Skip to content

Commit e6e7343

Browse files
Clear filter fix and equal operator
1 parent 67d81a7 commit e6e7343

File tree

9 files changed

+39
-24
lines changed

9 files changed

+39
-24
lines changed

src/components/projects/projectId/data-browser/DataBrowser.tsx

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,11 @@ import { getEmbeddings } from "@/src/services/base/embedding";
2121
import { parseFilterToExtended } from "@/src/util/components/projects/projectId/data-browser/filter-parser-helper";
2222
import { SearchGroup, Slice } from "@/submodules/javascript-functions/enums/enums";
2323
import { Application, CurrentPage } from "@/submodules/react-components/hooks/web-socket/constants";
24+
import { DataBrowserProps } from "@/src/types/components/projects/projectId/data-browser/data-browser";
2425

2526
const SEARCH_REQUEST = { offset: 0, limit: 20 };
2627

27-
export default function DataBrowser() {
28+
export default function DataBrowser(props: DataBrowserProps) {
2829
const dispatch = useDispatch();
2930

3031
const projectId = useSelector(selectProjectId);
@@ -40,6 +41,7 @@ export default function DataBrowser() {
4041
const activeSlice = useSelector(selectActiveSlice);
4142

4243
const [searchRequest, setSearchRequest] = useState(SEARCH_REQUEST);
44+
const [clearRequest, setClearRequest] = useState(false);
4345

4446
useEffect(() => {
4547
if (!projectId) return;
@@ -148,6 +150,7 @@ export default function DataBrowser() {
148150

149151
const setSearchRequestToInit = useCallback(() => {
150152
setSearchRequest(SEARCH_REQUEST);
153+
setClearRequest(true);
151154
}, []);
152155

153156
const handleWebsocketNotification = useCallback((msgParts: string[]) => {
@@ -171,7 +174,7 @@ export default function DataBrowser() {
171174

172175
return (<>
173176
{projectId && <div className="flex flex-row h-full">
174-
<DataBrowserSidebar />
177+
<DataBrowserSidebar clearRequest={clearRequest} />
175178
<DataBrowserRecords refetchNextRecords={getNextRecords} clearSearchRequest={setSearchRequestToInit} />
176179
</div>}
177180
</>)

src/components/projects/projectId/data-browser/DataBrowserRecords.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { openModal } from '@/src/reduxStore/states/modal';
2-
import { selectActiveSearchParams, selectActiveSlice, selectAdditionalData, selectRecords, selectSimilaritySearch, setActiveDataSlice, setActiveSearchParams, setIsTextHighlightNeeded, setRecordsInDisplay, setTextHighlight, updateAdditionalDataState } from '@/src/reduxStore/states/pages/data-browser';
2+
import { selectActiveSearchParams, selectActiveSlice, selectAdditionalData, selectRecords, selectSimilaritySearch, setActiveDataSlice, setActiveSearchParams, setFullSearchStore, setIsTextHighlightNeeded, setRecordsInDisplay, setTextHighlight, updateAdditionalDataState } from '@/src/reduxStore/states/pages/data-browser';
33
import style from '@/src/styles/components/projects/projectId/data-browser.module.css';
44
import { ModalEnum } from '@/src/types/shared/modal';
55
import { TOOLTIPS_DICT } from '@/src/util/tooltip-constants';

src/components/projects/projectId/data-browser/DataBrowserSidebar.tsx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
import { selectAllUsers } from '@/src/reduxStore/states/general';
22
import { setModalStates } from '@/src/reduxStore/states/modal';
3-
import { selectActiveSlice, selectAdditionalData, selectDataSlicesAll, setActiveDataSlice, setActiveSearchParams, setFullSearchStore, setIsTextHighlightNeeded, setRecordsInDisplay, setTextHighlight, updateAdditionalDataState } from '@/src/reduxStore/states/pages/data-browser';
3+
import { selectActiveSlice, selectAdditionalData, selectDataSlicesAll, setActiveDataSlice, setActiveSearchParams, setFullSearchStore, setIsTextHighlightNeeded, setRecordsInDisplay, setTextHighlight, setUniqueValuesDict, updateAdditionalDataState } from '@/src/reduxStore/states/pages/data-browser';
44
import { selectProjectId } from '@/src/reduxStore/states/project';
55
import style from '@/src/styles/components/projects/projectId/data-browser.module.css';
6-
import { DataSlice } from '@/src/types/components/projects/projectId/data-browser/data-browser';
6+
import { DataBrowserSidebarProps, DataSlice } from '@/src/types/components/projects/projectId/data-browser/data-browser';
77
import { ModalEnum } from '@/src/types/shared/modal';
88
import { updateSliceInfoHelper } from '@/src/util/components/projects/projectId/data-browser/data-browser-helper';
99
import { Slice } from '@/submodules/javascript-functions/enums/enums';
@@ -17,7 +17,7 @@ import DataSliceInfoModal from './modals/DataSliceInfoModal';
1717
import MultilineTooltip from '@/src/components/shared/multilines-tooltip/MultilineTooltip';
1818
import { MemoIconAlertTriangle, MemoIconInfoCircle, MemoIconLayoutSidebar, MemoIconTrash } from '@/submodules/react-components/components/kern-icons/icons';
1919

20-
export default function DataBrowserSidebar() {
20+
export default function DataBrowserSidebar(props: DataBrowserSidebarProps) {
2121
const dispatch = useDispatch();
2222

2323
const projectId = useSelector(selectProjectId);
@@ -130,7 +130,7 @@ export default function DataBrowserSidebar() {
130130
</div>
131131
<span className="text-sm text-gray-400">You can filter and order all your data in the browser according to your needs. Selected filter criteria can be saved and used later on.</span>
132132

133-
<SearchGroups />
133+
<SearchGroups clearRequest={props.clearRequest} />
134134
</div>}
135135
</div>
136136
<DeleteSliceModal />

src/components/projects/projectId/data-browser/SearchGroups.tsx

Lines changed: 11 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -29,12 +29,12 @@ import { getRecordsByStaticSlice, searchRecordsExtended } from "@/src/services/b
2929
import { staticDataSlicesCurrentCount } from "@/src/services/base/dataSlices";
3030
import KernButton from "@/submodules/react-components/components/kern-button/KernButton";
3131
import { MemoIconArrowDown, MemoIconArrowsRandom, MemoIconFilterOff, MemoIconPlus, MemoIconPointerOff, MemoIconTrash } from "@/submodules/react-components/components/kern-icons/icons";
32-
import { useConsoleLog } from "@/submodules/react-components/hooks/useConsoleLog";
32+
import { SearchGroupsProps } from "@/src/types/components/projects/projectId/data-browser/data-browser";
3333

3434
const GROUP_SORT_ORDER = 0;
3535
let GLOBAL_SEARCH_GROUP_COUNT = 0;
3636

37-
export default function SearchGroups() {
37+
export default function SearchGroups(props: SearchGroupsProps) {
3838
const dispatch = useDispatch();
3939

4040
const projectId = useSelector(selectProjectId);
@@ -97,7 +97,7 @@ export default function SearchGroups() {
9797
});
9898
setBackgroundColors(colors);
9999
setAttributeSortOrder(attributesSort);
100-
}, [attributes]);
100+
}, [attributes, props.clearRequest]);
101101

102102
useEffect(() => {
103103
if (!attributesSortOrder || !searchGroupsStore) return;
@@ -339,10 +339,10 @@ export default function SearchGroups() {
339339
}
340340
if (attributeType == DataTypeEnum.TEXT_LIST) {
341341
operatorsCopy.push({
342-
value: SearchOperator.CONTAINS.split("_").join(" "),
342+
value: SearchOperator.EQUAL.split("_").join(" "),
343343
});
344-
tooltipsCopy.push(getSearchOperatorTooltip(SearchOperator.CONTAINS));
345-
formControlsIdx['operator'] = SearchOperator.CONTAINS;
344+
tooltipsCopy.push(getSearchOperatorTooltip(SearchOperator.EQUAL));
345+
formControlsIdx['operator'] = SearchOperator.EQUAL;
346346

347347
} else if (attributeType !== DataTypeEnum.BOOLEAN) {
348348
for (let t of Object.values(SearchOperator)) {
@@ -365,8 +365,6 @@ export default function SearchGroups() {
365365
dispatch(setFullSearchStore(fullSearchCopy));
366366
}
367367

368-
useConsoleLog(uniqueValuesDict, 'uniqueValuesDict');
369-
370368
function removeSearchGroupItem(groupKey, index) {
371369
const fullSearchCopy = jsonCopy(fullSearchStore);
372370
fullSearchCopy[groupKey].groupElements.splice(index, 1);
@@ -622,17 +620,17 @@ export default function SearchGroups() {
622620
<div className="flex-grow mr-2.5 flex flex-col mt-2 ">
623621
<div className="flex-grow flex flex-row flex-wrap gap-1">
624622
<div style={{ width: groupItem.operator != '' ? '49%' : '100%' }}>
625-
<KernDropdown options={attributesSortOrder} buttonName={groupItem.name} backgroundColors={backgroundColors}
626-
selectedOption={(option: any) => selectValueDropdown(option.name, index, 'name', group.key)} fontClass="font-dmMono" buttonClasses="text-xs" />
623+
{attributesSortOrder && <KernDropdown options={attributesSortOrder} buttonName={groupItem.name} backgroundColors={backgroundColors}
624+
selectedOption={(option: any) => selectValueDropdown(option.name, index, 'name', group.key)} fontClass="font-dmMono" buttonClasses="text-xs" />}
627625
</div>
628626
<div style={{ width: '49%' }}>
629-
{groupItem.operator != '' &&
627+
{(groupItem.operator != '' && operatorsDropdown) &&
630628
<KernDropdown options={operatorsDropdown} buttonName={groupItem.operator} tooltipsArray={tooltipsArray} tooltipArrayPlacement="right" buttonClasses="text-xs"
631629
selectedOption={(option: any) => selectValueDropdown(option.value, index, 'operator', group.key)} fontClass="font-dmMono" />
632630
}
633631
</div>
634632
</div>
635-
{(uniqueValuesDict[groupItem['name']] && groupItem['operator'] != '' && groupItem['operator'] != 'BETWEEN' && groupItem['operator'] != 'IN' && groupItem['operator'] != 'IN WC' || saveAttributeType == DataTypeEnum.TEXT_LIST) ? (
633+
{(uniqueValuesDict && uniqueValuesDict[groupItem['name']] && groupItem['operator'] != '' && groupItem['operator'] != 'BETWEEN' && groupItem['operator'] != 'IN' && groupItem['operator'] != 'IN WC' || saveAttributeType == DataTypeEnum.TEXT_LIST) ? (
636634
<div className="my-2">
637635
<KernDropdown options={uniqueValuesDict[groupItem['name']]} buttonName={groupItem['searchValue'] ? groupItem['searchValue'] : 'Select value'}
638636
selectedOption={(option: any) => selectValueDropdown(option, index, 'searchValue', group.key)} fontClass="font-dmMono" />
@@ -651,7 +649,7 @@ export default function SearchGroups() {
651649
</div>
652650
)}
653651

654-
{(groupItem['operator'] == "BEGINS WITH" || groupItem['operator'] == "ENDS WITH" || groupItem['operator'] == SearchOperator.CONTAINS || groupItem['operator'] == "IN WC") && (saveAttributeType != DataTypeEnum.INTEGER && saveAttributeType != DataTypeEnum.FLOAT) &&
652+
{(groupItem['operator'] == "BEGINS WITH" || groupItem['operator'] == "ENDS WITH" || groupItem['operator'] == SearchOperator.CONTAINS || groupItem['operator'] == "IN WC") && (saveAttributeType != DataTypeEnum.INTEGER && saveAttributeType != DataTypeEnum.FLOAT && saveAttributeType != DataTypeEnum.TEXT_LIST) &&
655653
<label htmlFor="caseSensitive" className="text-xs text-gray-500 cursor-pointer flex items-center pb-2">
656654
<input name="caseSensitive" className="mr-1 cursor-pointer" id="caseSensitive"
657655
onChange={(e: any) => selectValueDropdown(e.target.checked, index, 'caseSensitive', group.key)} type="checkbox" />Case sensitive</label>}

src/components/projects/projectId/settings/labeling-tasks/LabelingTasks.tsx

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ import { updateLabelingTask } from "@/src/services/base/labeling-tasks";
2020
import IconButton from "@/submodules/react-components/components/kern-button/IconButton";
2121
import KernButton from "@/submodules/react-components/components/kern-button/KernButton";
2222
import { MemoIconColorPicker, MemoIconPlus, MemoIconTrash } from "@/submodules/react-components/components/kern-icons/icons";
23-
import { useConsoleLog } from "@/submodules/react-components/hooks/useConsoleLog";
2423

2524
export default function LabelingTasks() {
2625
const dispatch = useDispatch();

src/types/components/projects/projectId/data-browser/data-browser.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,4 +55,16 @@ export enum LineBreaksType {
5555
export type DataBrowserRecordsProps = {
5656
refetchNextRecords: () => void;
5757
clearSearchRequest: () => void;
58+
};
59+
60+
export type DataBrowserProps = {
61+
clearSearchRequest: () => void;
62+
};
63+
64+
export type DataBrowserSidebarProps = {
65+
clearRequest: boolean;
66+
}
67+
68+
export type SearchGroupsProps = {
69+
clearRequest: boolean;
5870
};

src/util/components/projects/projectId/data-browser/data-browser-helper.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,7 @@ import { buildFullLink } from "@/src/util/shared/link-parser-helper";
55
import { dateAsUTCDate } from "@/submodules/javascript-functions/date-parser";
66
import { informationSourceTypeToString, labelSourceToString, sliceTypeToString } from "@/submodules/javascript-functions/enums/enum-functions";
77
import { LabelSource, Slice } from "@/submodules/javascript-functions/enums/enums";
8-
import { jsonCopy, tryParseJSON } from "@/submodules/javascript-functions/general";
9-
import { getAttributeType } from "./search-operators-helper";
8+
import { jsonCopy } from "@/submodules/javascript-functions/general";
109

1110
export function postProcessDataSlices(dataSlices: DataSlice[]) {
1211
const prepareDataSlices = jsonCopy(dataSlices);

src/util/components/projects/projectId/data-browser/search-operators-helper.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { FilterIntegrationOperator, SearchOperator } from "@/src/types/components/projects/projectId/data-browser/search-operators";
2+
import { DataTypeEnum } from "@/src/types/shared/general";
23

34
export function getAttributeType(attributes: any[], attributeName: string) {
45
return attributes.find(att => att.name == attributeName)?.type;
@@ -134,6 +135,9 @@ export function prepareOperator(searchElement: any, attributeType: string): stri
134135
if (attributeType == "BOOLEAN") {
135136
return SearchOperator.EQUAL;
136137
} else {
138+
if (attributeType == DataTypeEnum.TEXT_LIST && searchElement.values.operator == SearchOperator.EQUAL) {
139+
return SearchOperator.CONTAINS;
140+
}
137141
return searchElement.values.operator;
138142
}
139143
}

submodules/react-components

0 commit comments

Comments
 (0)