@leav/ui 1.5.0 → 1.5.1-339c20fb
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/__mocks__/common/library.d.ts +9 -0
- package/dist/_gqlTypes/index.d.ts +107 -26
- package/dist/_gqlTypes/index.js +64 -12
- package/dist/_gqlTypes/index.js.map +1 -1
- package/dist/_queries/libraries/libraryDetailsFragment.js +7 -0
- package/dist/_queries/libraries/libraryDetailsFragment.js.map +1 -1
- package/dist/components/Explorer/DataView.js +4 -3
- package/dist/components/Explorer/DataView.js.map +1 -1
- package/dist/components/Explorer/Explorer.js +2 -1
- package/dist/components/Explorer/Explorer.js.map +1 -1
- package/dist/components/Explorer/ExplorerFiltersAndSorts.d.ts +1 -0
- package/dist/components/Explorer/ExplorerFiltersAndSorts.js +2 -2
- package/dist/components/Explorer/ExplorerFiltersAndSorts.js.map +1 -1
- package/dist/components/Explorer/ExplorerToolbar.d.ts +1 -0
- package/dist/components/Explorer/ExplorerToolbar.js +2 -2
- package/dist/components/Explorer/ExplorerToolbar.js.map +1 -1
- package/dist/components/Explorer/IdCard.js +2 -2
- package/dist/components/Explorer/IdCard.js.map +1 -1
- package/dist/components/Explorer/actions-mass/useDeleteLinkValues.js.map +1 -1
- package/dist/components/Explorer/actions-mass/useExportMassAction.js +5 -6
- package/dist/components/Explorer/actions-mass/useExportMassAction.js.map +1 -1
- package/dist/components/Explorer/useLoadView.js +0 -2
- package/dist/components/Explorer/useLoadView.js.map +1 -1
- package/dist/components/Filters/_types.d.ts +4 -0
- package/dist/components/Filters/_types.js.map +1 -1
- package/dist/components/Filters/context/filtersReducer.js +20 -11
- package/dist/components/Filters/context/filtersReducer.js.map +1 -1
- package/dist/components/Filters/context/useFiltersReducer.d.ts +2 -1
- package/dist/components/Filters/context/useFiltersReducer.js +9 -5
- package/dist/components/Filters/context/useFiltersReducer.js.map +1 -1
- package/dist/components/Filters/context/useGetTreeFilters.d.ts +15 -0
- package/dist/components/Filters/context/useGetTreeFilters.js +63 -0
- package/dist/components/Filters/context/useGetTreeFilters.js.map +1 -0
- package/dist/components/Filters/filter-items/filter-type/TextAttributeDropDown.js +24 -7
- package/dist/components/Filters/filter-items/filter-type/TextAttributeDropDown.js.map +1 -1
- package/dist/components/Filters/filter-items/filter-type/TreeAttributeDropDown.js +15 -17
- package/dist/components/Filters/filter-items/filter-type/TreeAttributeDropDown.js.map +1 -1
- package/dist/components/Filters/index.js.map +1 -1
- package/dist/components/Filters/prepareFiltersForRequest.js +14 -5
- package/dist/components/Filters/prepareFiltersForRequest.js.map +1 -1
- package/dist/components/Filters/useFilters.d.ts +4 -0
- package/dist/components/Filters/useTransformFilters.d.ts +5 -1
- package/dist/components/Filters/useTransformFilters.js +26 -3
- package/dist/components/Filters/useTransformFilters.js.map +1 -1
- package/dist/components/LibraryPicker/LibrariesList/LibrariesList.js +1 -1
- package/dist/components/LibraryPicker/LibrariesList/LibrariesList.js.map +1 -1
- package/dist/components/RecordEdition/EditRecordContent/uiElements/TreeField/display-tree-node/TreeNodeList.js +1 -1
- package/dist/components/RecordEdition/EditRecordContent/uiElements/TreeField/display-tree-node/TreeNodeList.js.map +1 -1
- package/dist/components/RecordHistory/RecordHistory.js +11 -6
- package/dist/components/RecordHistory/RecordHistory.js.map +1 -1
- package/dist/components/RecordHistory/RecordHistoryLogEntry.js +13 -7
- package/dist/components/RecordHistory/RecordHistoryLogEntry.js.map +1 -1
- package/dist/components/SearchModal/SearchModal.js +1 -1
- package/dist/components/SearchModal/SearchModal.js.map +1 -1
- package/dist/components/SelectTreeNode/SelectTreeNodeContent.js +4 -1
- package/dist/components/SelectTreeNode/SelectTreeNodeContent.js.map +1 -1
- package/dist/components/TreePicker/TreesList/TreesList.js +1 -1
- package/dist/components/TreePicker/TreesList/TreesList.js.map +1 -1
- package/dist/constants.d.ts +1 -0
- package/dist/constants.js +1 -0
- package/dist/constants.js.map +1 -1
- package/dist/hooks/useIFrameMessenger/messageHandlers.d.ts +3 -1
- package/dist/hooks/useIFrameMessenger/messageHandlers.js +12 -0
- package/dist/hooks/useIFrameMessenger/messageHandlers.js.map +1 -1
- package/dist/hooks/useIFrameMessenger/schema.d.ts +30 -1
- package/dist/hooks/useIFrameMessenger/schema.js +5 -4
- package/dist/hooks/useIFrameMessenger/schema.js.map +1 -1
- package/dist/hooks/useIFrameMessenger/types.d.ts +20 -2
- package/dist/hooks/useIFrameMessenger/types.js.map +1 -1
- package/dist/hooks/useIFrameMessenger/useIFrameMessenger.d.ts +2 -0
- package/dist/hooks/useIFrameMessengerClient/iFrameMessengerClientContext.d.ts +2 -0
- package/dist/hooks/useIFrameMessengerClient/useIFrameMessengerClient.d.ts +2 -0
- package/dist/locales/en/shared.json +2 -2
- package/dist/locales/fr/shared.json +2 -2
- package/package.json +6 -7
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useLoadView.js","sourceRoot":"","sources":["../../../src/components/Explorer/useLoadView.tsx"],"names":[],"mappings":"AAAA,oFAAoF;AACpF,sCAAsC;AACtC,sEAAsE;AACtE,OAAO,EAAC,8BAA8B,EAAE,UAAU,EAAC,MAAM,eAAe,CAAC;AACzE,OAAO,EAAC,MAAM,EAAC,MAAM,OAAO,CAAC;AAC7B,OAAO,EAAC,sBAAsB,EAAC,MAAM,mEAAmE,CAAC;AAEzG,OAAO,EAAC,eAAe,EAAE,uBAAuB,EAAC,MAAM,wBAAwB,CAAC;AAChF,OAAO,EAAC,+BAA+B,EAAE,+BAA+B,EAAC,MAAM,cAAc,CAAC;AAE9F,OAAO,EAAC,
|
|
1
|
+
{"version":3,"file":"useLoadView.js","sourceRoot":"","sources":["../../../src/components/Explorer/useLoadView.tsx"],"names":[],"mappings":"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","sourcesContent":["// Copyright LEAV Solutions 2017 until 2023/11/05, Copyright Aristid from 2023/11/06\n// This file is released under LGPL V3\n// License text available at https://www.gnu.org/licenses/lgpl-3.0.txt\nimport {useExplorerAttributesLazyQuery, useMeQuery} from '_ui/_gqlTypes';\nimport {useRef} from 'react';\nimport {useViewSettingsContext} from './manage-view-settings/store-view-settings/useViewSettingsContext';\nimport {type IUserView} from './_types';\nimport {useEditSettings, ViewSettingsActionTypes} from './manage-view-settings';\nimport {mapViewTypeFromExplorerToLegacy, mapViewTypeFromLegacyToExplorer} from './_constants';\nimport {type IViewSettingsActionLoadViewPayload} from './manage-view-settings/store-view-settings/viewSettingsReducer';\nimport {useFiltersContext} from '_ui/components/Filters/useFiltersContext';\nimport {FiltersActionTypes} from '_ui/components/Filters/context/filtersReducer';\nimport {type ValidFilter} from '../Filters/_types';\n\nexport const useLoadView = () => {\n const {view, dispatch} = useViewSettingsContext();\n const {dispatch: filtersDispatch} = useFiltersContext();\n const {closeSettingsPanel} = useEditSettings();\n const currentView = useRef<IUserView | null>(null);\n\n const [fetchAttributes] = useExplorerAttributesLazyQuery({\n fetchPolicy: 'network-only',\n });\n\n const {data} = useMeQuery();\n\n return {\n loadView: async (viewId: string | null) => {\n let viewData: IUserView | null;\n if (!viewId) {\n viewData = {\n ...view.defaultViewSettings,\n id: null,\n ownerId: data?.me?.whoAmI?.id ?? null,\n display: {type: mapViewTypeFromExplorerToLegacy[view.viewType]},\n label: {},\n shared: false,\n filters: view.defaultViewSettings.filters as ValidFilter[],\n };\n } else {\n viewData = view.savedViews.find(v => v.id === viewId) ?? null;\n }\n\n if (!viewData) {\n return;\n }\n\n currentView.current = viewData;\n\n const attributesToHydrate = [\n ...new Set([...(viewData?.filters ?? []), ...(viewData?.sort ?? [])].map(({field}) => field)),\n ];\n\n const fetchAttributesResult = await fetchAttributes({\n variables: {\n ids: attributesToHydrate,\n },\n });\n\n closeSettingsPanel();\n\n const attributesDataById = (fetchAttributesResult.data?.attributes?.list ?? []).reduce((acc, attr) => {\n acc[attr.id] = attr;\n return acc;\n }, {});\n\n const viewSettings: IViewSettingsActionLoadViewPayload = {\n viewId: currentView.current?.id ?? null,\n viewLabels: currentView.current?.label ?? {},\n viewType: currentView.current?.display\n ? mapViewTypeFromLegacyToExplorer[currentView.current?.display.type]\n : view.viewType,\n attributesIds: currentView.current?.attributes ?? [],\n sort: (currentView.current?.sort ?? []).map(s => ({\n field: s.field,\n order: s.order,\n })),\n };\n\n dispatch({\n type: ViewSettingsActionTypes.LOAD_VIEW,\n payload: viewSettings,\n });\n filtersDispatch({\n type: FiltersActionTypes.LOAD_VIEW,\n payload: {\n viewId: currentView.current?.id ?? null,\n filters: [],\n attributesDataById,\n },\n });\n },\n };\n};\n"]}
|
|
@@ -67,6 +67,10 @@ export interface IUIFilterTree extends Omit<IUIFilterBase, 'value' | 'formattedV
|
|
|
67
67
|
condition: RecordFilterCondition | null;
|
|
68
68
|
value: string[] | null;
|
|
69
69
|
formattedValue?: string[] | null;
|
|
70
|
+
nodes?: null | Array<{
|
|
71
|
+
nodeId: string;
|
|
72
|
+
libraryId: string;
|
|
73
|
+
}>;
|
|
70
74
|
field: string[];
|
|
71
75
|
}
|
|
72
76
|
export interface IUIFilterValueList extends Omit<IUIFilterBase, 'value' | 'formattedValue'> {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"_types.js","sourceRoot":"","sources":["../../../src/components/Filters/_types.ts"],"names":[],"mappings":"AAIA,OAAO,EAEH,aAAa,GAKhB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAC,sBAAsB,EAAC,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"_types.js","sourceRoot":"","sources":["../../../src/components/Filters/_types.ts"],"names":[],"mappings":"AAIA,OAAO,EAEH,aAAa,GAKhB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAC,sBAAsB,EAAC,MAAM,kBAAkB,CAAC;AAoHxD,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,MAAgB,EAA+B,EAAE,CAChF,CAAC,aAAa,CAAC,MAAM,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AAEnF,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,MAAgB,EAA2B,EAAE,CACxE,CAAC,aAAa,CAAC,WAAW,EAAE,aAAa,CAAC,aAAa,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC;IACxF,MAAM,CAAC,SAAS,KAAK,sBAAsB,CAAC,OAAO,CAAC;AAExD,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,MAAgB,EAA8B,EAAE,CAC9E,CAAC,aAAa,CAAC,WAAW,EAAE,aAAa,CAAC,aAAa,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC;IACxF,MAAM,CAAC,SAAS,KAAK,sBAAsB,CAAC,OAAO,CAAC;AAExD,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,MAAgB,EAAgC,EAAE,CAClF,CAAC,kBAAkB,CAAC,MAAM,CAAC,IAAI,cAAc,CAAC,MAAM,CAAC,CAAC,IAAI,WAAW,CAAC,MAAM,CAAC,CAAC;AAElF,MAAM,CAAC,MAAM,+BAA+B,GAAG,CAAC,MAAgB,EAAwC,EAAE,CACtG,CAAC,aAAa,CAAC,MAAM,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,WAAW,CAAC,MAAM,CAAC,CAAC;AAE1G,MAAM,CAAC,MAAM,2BAA2B,GAAG,CAAC,MAAgB,EAAoC,EAAE,CAC9F,CAAC,aAAa,CAAC,WAAW,EAAE,aAAa,CAAC,aAAa,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,WAAW,CAAC,MAAM,CAAC,CAAC;AAEpH,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,MAAgB,EAA2B,EAAE,CACxE,MAAM,CAAC,SAAS,CAAC,IAAI,KAAK,aAAa,CAAC,IAAI,CAAC;AAEjD,MAAM,CAAC,MAAM,2BAA2B,GAAG,CAAC,MAAgB,EAAoC,EAAE,CAC9F,cAAc,CAAC,MAAM,CAAC,IAAI,WAAW,CAAC,MAAM,CAAC,CAAC;AAElD,MAAM,WAAW,GAAG,CAAC,MAAgB,EAAmE,EAAE,CACtG,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE,UAAU,IAAI,MAAM,CAAC,SAAS,EAAE,UAAU,CAAC,MAAM,CAAC","sourcesContent":["// Copyright LEAV Solutions 2017 until 2023/11/05, Copyright Aristid from 2023/11/06\n// This file is released under LGPL V3\n// License text available at https://www.gnu.org/licenses/lgpl-3.0.txt\nimport {type Override} from '@leav/utils';\nimport {\n type AttributeFormat,\n AttributeType,\n type LinkAttributeDetailsFragment,\n type RecordFilterCondition,\n type StandardAttributeDetailsFragment,\n type ViewDetailsFilterFragment,\n} from '_ui/_gqlTypes';\nimport {ThroughConditionFilter} from '_ui/types/search';\n\nexport type FiltersOperator = 'AND' | 'OR';\n\nexport interface IUIFilterBaseAttribute {\n type: AttributeType;\n /**\n * Used to display the label of the filter.\n *\n * > Not displayed when filter is hidden\n */\n label: string;\n /**\n * Used to verify unicity: one filter per attribute\n */\n id: string;\n format?: AttributeFormat | null | undefined;\n valuesList?:\n | NonNullable<StandardAttributeDetailsFragment['valuesList']>\n | NonNullable<LinkAttributeDetailsFragment['valuesList']>;\n}\n\nexport interface IUIFilterStandardAttribute extends IUIFilterBaseAttribute {\n format: AttributeFormat;\n}\n\nexport interface IUIFilterLinkAttribute extends IUIFilterBaseAttribute {\n linkedLibrary?: {\n id: string;\n };\n}\n\nexport interface IUIFilterTreeAttribute extends IUIFilterBaseAttribute {\n linkedTree?: {\n id: string;\n };\n}\n\ninterface IUIFilterBase {\n id: string;\n attribute: IUIFilterBaseAttribute;\n condition: RecordFilterCondition | ThroughConditionFilter | null;\n /**\n * Used to build filter field.\n *\n * - ex: `campaigns_id_pac`\n * - ex with **subField**: `campaigns_id_pac.id`\n */\n field: any;\n value: string | null;\n formattedValue?: string | null;\n hidden?: boolean | undefined;\n}\n\nexport interface IUIFilterStandard extends Omit<IUIFilterBase, 'field'> {\n attribute: IUIFilterStandardAttribute;\n condition: RecordFilterCondition | null;\n field: string;\n}\n\nexport interface IUIFilterLink extends Omit<IUIFilterBase, 'field'> {\n attribute: IUIFilterLinkAttribute;\n condition: RecordFilterCondition | null;\n field: string;\n}\n\nexport interface IUIFilterThrough extends Omit<IUIFilterBase, 'field'> {\n attribute: IUIFilterLinkAttribute;\n condition: ThroughConditionFilter.THROUGH | null;\n subCondition: RecordFilterCondition | null;\n subField: string | null;\n field: string;\n}\n\nexport interface IUIFilterTree extends Omit<IUIFilterBase, 'value' | 'formattedValue' | 'field'> {\n attribute: IUIFilterTreeAttribute;\n condition: RecordFilterCondition | null;\n value: string[] | null;\n formattedValue?: string[] | null;\n nodes?: null | Array<{nodeId: string; libraryId: string}>;\n field: string[];\n}\n\nexport interface IUIFilterValueList extends Omit<IUIFilterBase, 'value' | 'formattedValue'> {\n attribute: (IUIFilterStandardAttribute | IUIFilterLinkAttribute) & {\n valuesList:\n | NonNullable<StandardAttributeDetailsFragment['valuesList']>\n | NonNullable<LinkAttributeDetailsFragment['valuesList']>;\n };\n value: string[] | null;\n condition: RecordFilterCondition | null;\n field: string | string[];\n}\n\nexport interface IUIFilterStandardValueList extends Omit<IUIFilterStandard, 'attribute' | 'value'>, IUIFilterValueList {\n attribute: IUIFilterStandardAttribute & {\n valuesList: NonNullable<StandardAttributeDetailsFragment['valuesList']>;\n };\n field: string;\n}\n\nexport interface IUIFilterLinkValueList extends Omit<IUIFilterLink, 'attribute' | 'value'>, IUIFilterValueList {\n attribute: IUIFilterLinkAttribute & {\n valuesList: NonNullable<LinkAttributeDetailsFragment['valuesList']>;\n };\n field: string;\n}\nexport interface IUIFilterTreeValueList extends Omit<IUIFilterTree, 'attribute' | 'value'>, IUIFilterValueList {\n attribute: IUIFilterLinkAttribute & {\n valuesList: NonNullable<LinkAttributeDetailsFragment['valuesList']>;\n };\n field: string[];\n}\n\nexport type UIFilter = IUIFilterStandard | IUIFilterLink | IUIFilterThrough | IUIFilterValueList | IUIFilterTree;\n\nexport const isUIFilterStandard = (filter: UIFilter): filter is IUIFilterStandard =>\n [AttributeType.simple, AttributeType.advanced].includes(filter.attribute.type);\n\nexport const isUIFilterLink = (filter: UIFilter): filter is IUIFilterLink =>\n [AttributeType.simple_link, AttributeType.advanced_link].includes(filter.attribute.type) &&\n filter.condition !== ThroughConditionFilter.THROUGH;\n\nexport const isUIFilterThrough = (filter: UIFilter): filter is IUIFilterThrough =>\n [AttributeType.simple_link, AttributeType.advanced_link].includes(filter.attribute.type) &&\n filter.condition === ThroughConditionFilter.THROUGH;\n\nexport const isUIFilterValueList = (filter: UIFilter): filter is IUIFilterValueList =>\n (isUIFilterStandard(filter) || isUIFilterLink(filter)) && isValueList(filter);\n\nexport const isUIFilterStandardWithValueList = (filter: UIFilter): filter is IUIFilterStandardValueList =>\n [AttributeType.simple, AttributeType.advanced].includes(filter.attribute.type) && isValueList(filter);\n\nexport const isUIFilterLinkWithValueList = (filter: UIFilter): filter is IUIFilterLinkValueList =>\n [AttributeType.simple_link, AttributeType.advanced_link].includes(filter.attribute.type) && isValueList(filter);\n\nexport const isUIFilterTree = (filter: UIFilter): filter is IUIFilterTree =>\n filter.attribute.type === AttributeType.tree;\n\nexport const isUIFilterTreeWithValueList = (filter: UIFilter): filter is IUIFilterTreeValueList =>\n isUIFilterTree(filter) && isValueList(filter);\n\nconst isValueList = (filter: UIFilter): filter is UIFilter & {attribute: {valuesList: {enabled: true}}} =>\n !!filter.attribute?.valuesList && filter.attribute?.valuesList.enable;\n\nexport interface IUIFilterDropDownProps {\n filter: UIFilter;\n canRemove: boolean;\n}\n\nexport type ValidFieldFilter = Override<\n ViewDetailsFilterFragment,\n {\n field: NonNullable<ViewDetailsFilterFragment['field']>;\n condition: NonNullable<ViewDetailsFilterFragment['condition']>;\n hidden: boolean;\n }\n>;\n\nexport type ValidFieldFilterStandardValuesList = Override<\n ValidFieldFilter,\n {\n valuesList: StandardAttributeDetailsFragment['valuesList'];\n }\n>;\n\nexport type ValidFieldFilterLinkValuesList = Override<\n ValidFieldFilter,\n {\n valuesList: LinkAttributeDetailsFragment['valuesList'];\n }\n>;\n\nexport type ValidFieldFilterThrough = Override<\n ValidFieldFilter,\n {\n condition: ThroughConditionFilter.THROUGH;\n hidden: boolean;\n }\n> & {\n subField: NonNullable<ViewDetailsFilterFragment['field']>;\n subCondition?: ViewDetailsFilterFragment['condition'];\n};\n\nexport type ValidFilter =\n | ValidFieldFilter\n | ValidFieldFilterThrough\n | ValidFieldFilterStandardValuesList\n | ValidFieldFilterLinkValuesList;\n"]}
|
|
@@ -27,17 +27,26 @@ const addFilter = (state, payload) => {
|
|
|
27
27
|
if (hasValueList) {
|
|
28
28
|
condition = AttributeConditionFilter.EQUAL;
|
|
29
29
|
}
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
condition: hasOnlyNoValueConditions(payload.attribute.format)
|
|
36
|
-
? null
|
|
37
|
-
: getFirstConditionByFilterType(payload)[0],
|
|
38
|
-
value: null,
|
|
30
|
+
let filterToAdd;
|
|
31
|
+
if (isUIFilterTree(payload)) {
|
|
32
|
+
const filterWithDefaultValues = state.initialFilters.find(initialFilter => initialFilter.attribute.id === payload.attribute.id);
|
|
33
|
+
if (filterWithDefaultValues !== undefined) {
|
|
34
|
+
filterToAdd = filterWithDefaultValues;
|
|
39
35
|
}
|
|
40
|
-
|
|
36
|
+
else {
|
|
37
|
+
filterToAdd = {
|
|
38
|
+
...payload,
|
|
39
|
+
id: uuid(),
|
|
40
|
+
field: Array.isArray(payload.field) ? payload.field : [payload.field],
|
|
41
|
+
condition: hasOnlyNoValueConditions(payload.attribute.format)
|
|
42
|
+
? null
|
|
43
|
+
: getFirstConditionByFilterType(payload)[0],
|
|
44
|
+
value: null,
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
else {
|
|
49
|
+
filterToAdd = {
|
|
41
50
|
...payload,
|
|
42
51
|
field: isLinkAttribute(payload.attribute.type) ? `${payload.field}.id` : payload.field,
|
|
43
52
|
id: uuid(),
|
|
@@ -45,6 +54,7 @@ const addFilter = (state, payload) => {
|
|
|
45
54
|
value: null,
|
|
46
55
|
valuesList: hasValueList ? payload.attribute.valuesList : undefined,
|
|
47
56
|
};
|
|
57
|
+
}
|
|
48
58
|
return {
|
|
49
59
|
...state,
|
|
50
60
|
filters: [...state.filters, filterToAdd],
|
|
@@ -55,7 +65,6 @@ const resetFilter = (state, payload) => ({
|
|
|
55
65
|
...state,
|
|
56
66
|
filters: state.filters.map(filter => {
|
|
57
67
|
if (filter.id === payload.id) {
|
|
58
|
-
// TODO Add initial Filters State
|
|
59
68
|
const initialFilter = state.initialFilters.find(({ id }) => id === payload.id);
|
|
60
69
|
if (initialFilter) {
|
|
61
70
|
return initialFilter;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filtersReducer.js","sourceRoot":"","sources":["../../../../src/components/Filters/context/filtersReducer.ts"],"names":[],"mappings":"AAAA,oFAAoF;AACpF,sCAAsC;AACtC,sEAAsE;AACtE,OAAO,EAAC,EAAE,IAAI,IAAI,EAAC,MAAM,MAAM,CAAC;AAChC,OAAO,EAAC,eAAe,EAA6B,MAAM,eAAe,CAAC;AAC1E,OAAO,EAIH,cAAc,EACd,kBAAkB,EAClB,iBAAiB,EACjB,cAAc,EACd,mBAAmB,GAEtB,MAAM,WAAW,CAAC;AACnB,OAAO,EAAC,wBAAwB,EAAE,mBAAmB,EAAC,MAAM,qBAAqB,CAAC;AAClF,OAAO,EAAC,kBAAkB,EAAE,6BAA6B,EAAC,MAAM,uDAAuD,CAAC;AACxH,OAAO,EAAC,wBAAwB,EAAE,sBAAsB,EAAC,MAAM,WAAW,CAAC;AAC3E,OAAO,EAAC,eAAe,EAAC,MAAM,0BAA0B,CAAC;AAKzD,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAC9B,UAAU,EAAE,YAAY;IACxB,YAAY,EAAE,cAAc;IAC5B,aAAa,EAAE,eAAe;IAC9B,WAAW,EAAE,aAAa;IAC1B,oBAAoB,EAAE,sBAAsB;IAC5C,SAAS,EAAE,WAAW;IACtB,KAAK,EAAE,OAAO;IACd,6BAA6B,EAAE,+BAA+B;IAC9D,YAAY,EAAE,cAAc;CACtB,CAAC;AA+EX,MAAM,SAAS,GAAuC,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IACrE,MAAM,YAAY,GAAG,OAAO,CAAC,SAAS,CAAC,UAAU,CAAC;IAElD,IAAI,SAAS,GAAG,wBAAwB,CAAE,OAA6B,CAAC,SAAS,CAAC,MAAM,CAAC;QACrF,CAAC,CAAC,IAAI;QACN,CAAC,CAAC,CAAC,kBAAkB,CAAE,OAA6B,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC;IACvF,IAAI,YAAY,EAAE,CAAC;QACf,SAAS,GAAG,wBAAwB,CAAC,KAAK,CAAC;IAC/C,CAAC;IAED,MAAM,WAAW,GAAG,cAAc,CAAC,OAAmB,CAAC;QACnD,CAAC,CAAC;YACI,GAAG,OAAO;YACV,EAAE,EAAE,IAAI,EAAE;YACV,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC;YACrE,SAAS,EAAE,wBAAwB,CAAE,OAA6B,CAAC,SAAS,CAAC,MAAM,CAAC;gBAChF,CAAC,CAAC,IAAI;gBACN,CAAC,CAAE,6BAA6B,CAAC,OAAmB,CAA6B,CAAC,CAAC,CAAC;YACxF,KAAK,EAAE,IAAI;SACd;QACH,CAAC,CAAC;YACI,GAAG,OAAO;YACV,KAAK,EAAE,eAAe,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,KAAK,KAAK,CAAC,CAAC,CAAE,OAAO,CAAC,KAAgB;YAClG,EAAE,EAAE,IAAI,EAAE;YACV,SAAS;YACT,KAAK,EAAE,IAAI;YACX,UAAU,EAAE,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS;SACtE,CAAC;IACR,OAAO;QACH,GAAG,KAAK;QACR,OAAO,EAAE,CAAC,GAAG,KAAK,CAAC,OAAO,EAAE,WAAW,CAAC;QACxC,YAAY,EAAE,IAAI;KACrB,CAAC;AACN,CAAC,CAAC;AAEF,MAAM,WAAW,GAA0C,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC;IAC5E,GAAG,KAAK;IACR,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;QAChC,IAAI,MAAM,CAAC,EAAE,KAAK,OAAO,CAAC,EAAE,EAAE,CAAC;YAC3B,iCAAiC;YACjC,MAAM,aAAa,GAAG,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAE,CAAC,EAAE,KAAK,OAAO,CAAC,EAAE,CAAC,CAAC;YAC7E,IAAI,aAAa,EAAE,CAAC;gBAChB,OAAO,aAAa,CAAC;YACzB,CAAC;YAED,IAAI,mBAAmB,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC9B,OAAO;oBACH,GAAG,MAAM;oBACT,SAAS,EAAE,IAAI;oBACf,KAAK,EAAE,IAAI;iBACd,CAAC;YACN,CAAC;YAED,IAAI,kBAAkB,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC7B,OAAO;oBACH,GAAG,MAAM;oBACT,SAAS,EAAE,wBAAwB,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC;wBACxD,CAAC,CAAC,IAAI;wBACN,CAAC,CAAC,kBAAkB,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;oBACpD,KAAK,EAAE,IAAI;iBACd,CAAC;YACN,CAAC;YAED,IAAI,iBAAiB,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC5B,OAAO;oBACH,GAAG,MAAM;oBACT,SAAS,EAAE,sBAAsB,CAAC,OAAO;oBACzC,KAAK,EAAE,IAAI;iBACd,CAAC;YACN,CAAC;YAED,IAAI,cAAc,CAAC,MAAM,CAAC,EAAE,CAAC;gBACzB,OAAO;oBACH,GAAG,MAAM;oBACT,SAAS,EAAE,kBAAkB,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;oBACtD,KAAK,EAAE,IAAI;iBACd,CAAC;YACN,CAAC;YAED,IAAI,cAAc,CAAC,MAAM,CAAC,EAAE,CAAC;gBACzB,OAAO;oBACH,GAAG,MAAM;oBACT,SAAS,EAAE,IAAI;oBACf,KAAK,EAAE,IAAI;iBACd,CAAC;YACN,CAAC;QACL,CAAC;QACD,OAAO,MAAM,CAAC;IAClB,CAAC,CAAC;CACL,CAAC,CAAC;AAEH,MAAM,YAAY,GAA0C,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC;IAC7E,GAAG,KAAK;IACR,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAE,CAAC,EAAE,KAAK,OAAO,CAAC,EAAE,CAAC;IAC1D,YAAY,EAAE,IAAI;CACrB,CAAC,CAAC;AAEH,MAAM,kBAAkB,GAAgD,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC;IACzF,GAAG,KAAK;IACR,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;QAChC,IAAI,MAAM,CAAC,EAAE,KAAK,OAAO,CAAC,EAAE,EAAE,CAAC;YAC3B,OAAO,MAAM,CAAC;QAClB,CAAC;QACD,IAAI,cAAc,CAAC,MAAM,CAAC,IAAI,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxE,OAAO,EAAC,GAAG,MAAM,EAAE,GAAG,OAAO,EAAE,KAAK,EAAE,IAAI,EAAC,CAAC;QAChD,CAAC;QACD,IAAI,mBAAmB,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,SAAS,IAAI,mBAAmB,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC;YACpG,OAAO,EAAC,GAAG,MAAM,EAAE,GAAG,OAAO,EAAE,KAAK,EAAE,IAAI,EAAC,CAAC;QAChD,CAAC;QACD,OAAO,EAAC,GAAG,MAAM,EAAE,GAAG,OAAO,EAAC,CAAC;IACnC,CAAC,CAAC;IACF,YAAY,EAAE,IAAI;CACrB,CAAC,CAAC;AAEH,MAAM,UAAU,GAAwC,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IACvE,MAAM,sBAAsB,GAAG,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC;IAClD,MAAM,CAAC,YAAY,CAAC,GAAG,sBAAsB,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;IAC3E,sBAAsB,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,EAAE,YAAY,CAAC,CAAC;IAChE,OAAO;QACH,GAAG,KAAK;QACR,OAAO,EAAE,sBAAsB;QAC/B,YAAY,EAAE,IAAI;KACrB,CAAC;AACN,CAAC,CAAC;AAEF,MAAM,KAAK,GAAmC,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC;AAEtE,MAAM,QAAQ,GAAsC,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC;IACrE,GAAG,KAAK;IACR,GAAG,OAAO;IACV,cAAc,EAAE,OAAO,CAAC,OAAO;CAClC,CAAC,CAAC;AAEH,MAAM,0BAA0B,GAAY,KAAK,CAAC,EAAE,CAAC,CAAC;IAClD,GAAG,KAAK;IACR,OAAO,EAAE,KAAK,CAAC,cAAc;CAChC,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,cAAc,GACvB,eAAe,CAAC,EAAE,CAClB,CAAC,KAAsB,EAAE,MAAuB,EAAmB,EAAE;IACjE,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC;QAClB,KAAK,kBAAkB,CAAC,UAAU,CAAC,CAAC,CAAC;YACjC,OAAO,SAAS,CAAC,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;QAC5C,CAAC;QACD,KAAK,kBAAkB,CAAC,YAAY,CAAC,CAAC,CAAC;YACnC,OAAO,WAAW,CAAC,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;QAC9C,CAAC;QACD,KAAK,kBAAkB,CAAC,aAAa,CAAC,CAAC,CAAC;YACpC,OAAO,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;QAC/C,CAAC;QACD,KAAK,kBAAkB,CAAC,oBAAoB,CAAC,CAAC,CAAC;YAC3C,OAAO,kBAAkB,CAAC,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;QACrD,CAAC;QACD,KAAK,kBAAkB,CAAC,WAAW,CAAC,CAAC,CAAC;YAClC,OAAO,UAAU,CAAC,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;QAC7C,CAAC;QACD,KAAK,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC;YAC5B,OAAO,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;QACxC,CAAC;QACD,KAAK,kBAAkB,CAAC,SAAS,CAAC,CAAC,CAAC;YAChC,OAAO,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;QAC3C,CAAC;QACD,KAAK,kBAAkB,CAAC,6BAA6B,CAAC,CAAC,CAAC;YACpD,OAAO,0BAA0B,CAAC,KAAK,CAAC,CAAC;QAC7C,CAAC;QACD,KAAK,kBAAkB,CAAC,YAAY,CAAC,CAAC,CAAC;YACnC,eAAe,EAAE,CAAC,IAAI,CAAC,CAAC;YACxB,OAAO,KAAK,CAAC;QACjB,CAAC;QACD;YACI,OAAO,KAAK,CAAC;IACrB,CAAC;AACL,CAAC,CAAC","sourcesContent":["// Copyright LEAV Solutions 2017 until 2023/11/05, Copyright Aristid from 2023/11/06\n// This file is released under LGPL V3\n// License text available at https://www.gnu.org/licenses/lgpl-3.0.txt\nimport {v4 as uuid} from 'uuid';\nimport {AttributeFormat, type RecordFilterCondition} from '_ui/_gqlTypes';\nimport {\n type UIFilter,\n type IUIFilterStandard,\n type IUIFilterTree,\n isUIFilterLink,\n isUIFilterStandard,\n isUIFilterThrough,\n isUIFilterTree,\n isUIFilterValueList,\n type FiltersOperator,\n} from '../_types';\nimport {hasOnlyNoValueConditions, nullValueConditions} from '../conditionsHelper';\nimport {conditionsByFormat, getFirstConditionByFilterType} from '../filter-items/filter-type/useConditionOptionsByType';\nimport {AttributeConditionFilter, ThroughConditionFilter} from '_ui/types';\nimport {isLinkAttribute} from '_ui/_utils/attributeType';\nimport {type AttributesById} from '../useTransformFilters';\n\nexport type ViewType = 'table' | 'list' | 'timeline' | 'mosaic';\n\nexport const FiltersActionTypes = {\n ADD_FILTER: 'ADD_FILTER',\n RESET_FILTER: 'RESET_FILTER',\n REMOVE_FILTER: 'REMOVE_FILTER',\n MOVE_FILTER: 'MOVE_FILTER',\n CHANGE_FILTER_CONFIG: 'CHANGE_FILTER_CONFIG',\n LOAD_VIEW: 'LOAD_VIEW',\n RESET: 'RESET',\n RESTORE_INITIAL_VIEW_SETTINGS: 'RESTORE_INITIAL_VIEW_SETTINGS',\n UPDATE_VIEWS: 'UPDATE_VIEWS',\n} as const;\n\nexport interface IUIFiltersState {\n libraryId: string;\n viewId: string | null;\n filtersOperator: FiltersOperator;\n filters: UIFilter[] | IUIFilterTree[];\n initialFilters: UIFilter[] | IUIFilterTree[];\n attributesDataById: AttributesById;\n loading: boolean;\n}\n\ninterface IUIFiltersActionAddFilter {\n type: typeof FiltersActionTypes.ADD_FILTER;\n payload: Omit<UIFilter, 'id' | 'value' | 'condition'>;\n}\n\ninterface IIUIFiltersActionResetFilter {\n type: typeof FiltersActionTypes.RESET_FILTER;\n payload: Pick<UIFilter, 'id'>;\n}\n\ninterface IUIFiltersActionRemoveFilter {\n type: typeof FiltersActionTypes.REMOVE_FILTER;\n payload: Pick<UIFilter, 'id'>;\n}\n\ninterface IUIFiltersActionChangeFilterConfig {\n type: typeof FiltersActionTypes.CHANGE_FILTER_CONFIG;\n payload: UIFilter | IUIFilterTree;\n}\n\ninterface IUIFiltersActionMoveFilter {\n type: typeof FiltersActionTypes.MOVE_FILTER;\n payload: {\n indexFrom: number;\n indexTo: number;\n };\n}\n\ninterface IUIFiltersActionReset {\n type: typeof FiltersActionTypes.RESET;\n payload: IUIFiltersState;\n}\n\ninterface IUIFiltersActionLoadView {\n type: typeof FiltersActionTypes.LOAD_VIEW;\n payload: Pick<IUIFiltersState, 'filters' | 'viewId' | 'attributesDataById'>;\n}\n\ninterface IUIFiltersActionRestoreInitialViewSettings {\n type: typeof FiltersActionTypes.RESTORE_INITIAL_VIEW_SETTINGS;\n}\n\ninterface IUIFiltersActionUpdateViewListAndCurrentView {\n type: typeof FiltersActionTypes.UPDATE_VIEWS;\n payload: IUIFiltersState;\n}\n\ntype Reducer<\n PAYLOAD extends {\n type: keyof typeof FiltersActionTypes;\n payload?: unknown;\n } = {type: any; payload: 'no_payload'},\n> = PAYLOAD['payload'] extends 'no_payload'\n ? (state: IUIFiltersState) => IUIFiltersState\n : (state: IUIFiltersState, payload: PAYLOAD['payload']) => IUIFiltersState;\n\nexport type UIFiltersAction =\n | IUIFiltersActionAddFilter\n | IIUIFiltersActionResetFilter\n | IUIFiltersActionRemoveFilter\n | IUIFiltersActionChangeFilterConfig\n | IUIFiltersActionMoveFilter\n | IUIFiltersActionReset\n | IUIFiltersActionLoadView\n | IUIFiltersActionRestoreInitialViewSettings\n | IUIFiltersActionUpdateViewListAndCurrentView;\n\nconst addFilter: Reducer<IUIFiltersActionAddFilter> = (state, payload) => {\n const hasValueList = payload.attribute.valuesList;\n\n let condition = hasOnlyNoValueConditions((payload as IUIFilterStandard).attribute.format)\n ? null\n : (conditionsByFormat[(payload as IUIFilterStandard).attribute.format][0] ?? null);\n if (hasValueList) {\n condition = AttributeConditionFilter.EQUAL;\n }\n\n const filterToAdd = isUIFilterTree(payload as UIFilter)\n ? {\n ...payload,\n id: uuid(),\n field: Array.isArray(payload.field) ? payload.field : [payload.field],\n condition: hasOnlyNoValueConditions((payload as IUIFilterStandard).attribute.format)\n ? null\n : (getFirstConditionByFilterType(payload as UIFilter) as RecordFilterCondition[])[0],\n value: null,\n }\n : {\n ...payload,\n field: isLinkAttribute(payload.attribute.type) ? `${payload.field}.id` : (payload.field as string),\n id: uuid(),\n condition,\n value: null,\n valuesList: hasValueList ? payload.attribute.valuesList : undefined,\n };\n return {\n ...state,\n filters: [...state.filters, filterToAdd],\n viewModified: true,\n };\n};\n\nconst resetFilter: Reducer<IIUIFiltersActionResetFilter> = (state, payload) => ({\n ...state,\n filters: state.filters.map(filter => {\n if (filter.id === payload.id) {\n // TODO Add initial Filters State\n const initialFilter = state.initialFilters.find(({id}) => id === payload.id);\n if (initialFilter) {\n return initialFilter;\n }\n\n if (isUIFilterValueList(filter)) {\n return {\n ...filter,\n condition: null,\n value: null,\n };\n }\n\n if (isUIFilterStandard(filter)) {\n return {\n ...filter,\n condition: hasOnlyNoValueConditions(filter.attribute.format)\n ? null\n : conditionsByFormat[filter.attribute.format][0],\n value: null,\n };\n }\n\n if (isUIFilterThrough(filter)) {\n return {\n ...filter,\n condition: ThroughConditionFilter.THROUGH,\n value: null,\n };\n }\n\n if (isUIFilterLink(filter)) {\n return {\n ...filter,\n condition: conditionsByFormat[AttributeFormat.text][0],\n value: null,\n };\n }\n\n if (isUIFilterTree(filter)) {\n return {\n ...filter,\n condition: null,\n value: null,\n };\n }\n }\n return filter;\n }),\n});\n\nconst removeFilter: Reducer<IUIFiltersActionRemoveFilter> = (state, payload) => ({\n ...state,\n filters: state.filters.filter(({id}) => id !== payload.id),\n viewModified: true,\n});\n\nconst changeFilterConfig: Reducer<IUIFiltersActionChangeFilterConfig> = (state, payload) => ({\n ...state,\n filters: state.filters.map(filter => {\n if (filter.id !== payload.id) {\n return filter;\n }\n if (isUIFilterTree(filter) && payload.value && payload.value.length === 0) {\n return {...filter, ...payload, value: null};\n }\n if (isUIFilterValueList(filter) && filter.condition && nullValueConditions.includes(filter.condition)) {\n return {...filter, ...payload, value: null};\n }\n return {...filter, ...payload};\n }),\n viewModified: true,\n});\n\nconst moveFilter: Reducer<IUIFiltersActionMoveFilter> = (state, payload) => {\n const attributesUsedToFilter = [...state.filters];\n const [filterToMove] = attributesUsedToFilter.splice(payload.indexFrom, 1);\n attributesUsedToFilter.splice(payload.indexTo, 0, filterToMove);\n return {\n ...state,\n filters: attributesUsedToFilter,\n viewModified: true,\n };\n};\n\nconst reset: Reducer<IUIFiltersActionReset> = (_, payload) => payload;\n\nconst loadView: Reducer<IUIFiltersActionLoadView> = (state, payload) => ({\n ...state,\n ...payload,\n initialFilters: payload.filters,\n});\n\nconst restoreInitialViewSettings: Reducer = state => ({\n ...state,\n filters: state.initialFilters,\n});\n\nexport const filtersReducer =\n setRefetchViews =>\n (state: IUIFiltersState, action: UIFiltersAction): IUIFiltersState => {\n switch (action.type) {\n case FiltersActionTypes.ADD_FILTER: {\n return addFilter(state, action.payload);\n }\n case FiltersActionTypes.RESET_FILTER: {\n return resetFilter(state, action.payload);\n }\n case FiltersActionTypes.REMOVE_FILTER: {\n return removeFilter(state, action.payload);\n }\n case FiltersActionTypes.CHANGE_FILTER_CONFIG: {\n return changeFilterConfig(state, action.payload);\n }\n case FiltersActionTypes.MOVE_FILTER: {\n return moveFilter(state, action.payload);\n }\n case FiltersActionTypes.RESET: {\n return reset(state, action.payload);\n }\n case FiltersActionTypes.LOAD_VIEW: {\n return loadView(state, action.payload);\n }\n case FiltersActionTypes.RESTORE_INITIAL_VIEW_SETTINGS: {\n return restoreInitialViewSettings(state);\n }\n case FiltersActionTypes.UPDATE_VIEWS: {\n setRefetchViews?.(true);\n return state;\n }\n default:\n return state;\n }\n };\n"]}
|
|
1
|
+
{"version":3,"file":"filtersReducer.js","sourceRoot":"","sources":["../../../../src/components/Filters/context/filtersReducer.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright LEAV Solutions 2017 until 2023/11/05, Copyright Aristid from 2023/11/06\n// This file is released under LGPL V3\n// License text available at https://www.gnu.org/licenses/lgpl-3.0.txt\nimport {v4 as uuid} from 'uuid';\nimport {AttributeFormat, type RecordFilterCondition} from '_ui/_gqlTypes';\nimport {\n type UIFilter,\n type IUIFilterStandard,\n type IUIFilterTree,\n isUIFilterLink,\n isUIFilterStandard,\n isUIFilterThrough,\n isUIFilterTree,\n isUIFilterValueList,\n type FiltersOperator,\n} from '../_types';\nimport {hasOnlyNoValueConditions, nullValueConditions} from '../conditionsHelper';\nimport {conditionsByFormat, getFirstConditionByFilterType} from '../filter-items/filter-type/useConditionOptionsByType';\nimport {AttributeConditionFilter, ThroughConditionFilter} from '_ui/types';\nimport {isLinkAttribute} from '_ui/_utils/attributeType';\nimport {type AttributesById} from '../useTransformFilters';\n\nexport type ViewType = 'table' | 'list' | 'timeline' | 'mosaic';\n\nexport const FiltersActionTypes = {\n ADD_FILTER: 'ADD_FILTER',\n RESET_FILTER: 'RESET_FILTER',\n REMOVE_FILTER: 'REMOVE_FILTER',\n MOVE_FILTER: 'MOVE_FILTER',\n CHANGE_FILTER_CONFIG: 'CHANGE_FILTER_CONFIG',\n LOAD_VIEW: 'LOAD_VIEW',\n RESET: 'RESET',\n RESTORE_INITIAL_VIEW_SETTINGS: 'RESTORE_INITIAL_VIEW_SETTINGS',\n UPDATE_VIEWS: 'UPDATE_VIEWS',\n} as const;\n\nexport interface IUIFiltersState {\n libraryId: string;\n viewId: string | null;\n filtersOperator: FiltersOperator;\n filters: UIFilter[] | IUIFilterTree[];\n initialFilters: UIFilter[] | IUIFilterTree[];\n attributesDataById: AttributesById;\n loading: boolean;\n}\n\ninterface IUIFiltersActionAddFilter {\n type: typeof FiltersActionTypes.ADD_FILTER;\n payload: Omit<UIFilter, 'id' | 'value' | 'condition'>;\n}\n\ninterface IIUIFiltersActionResetFilter {\n type: typeof FiltersActionTypes.RESET_FILTER;\n payload: Pick<UIFilter, 'id'>;\n}\n\ninterface IUIFiltersActionRemoveFilter {\n type: typeof FiltersActionTypes.REMOVE_FILTER;\n payload: Pick<UIFilter, 'id'>;\n}\n\ninterface IUIFiltersActionChangeFilterConfig {\n type: typeof FiltersActionTypes.CHANGE_FILTER_CONFIG;\n payload: UIFilter | IUIFilterTree;\n}\n\ninterface IUIFiltersActionMoveFilter {\n type: typeof FiltersActionTypes.MOVE_FILTER;\n payload: {\n indexFrom: number;\n indexTo: number;\n };\n}\n\ninterface IUIFiltersActionReset {\n type: typeof FiltersActionTypes.RESET;\n payload: IUIFiltersState;\n}\n\ninterface IUIFiltersActionLoadView {\n type: typeof FiltersActionTypes.LOAD_VIEW;\n payload: Pick<IUIFiltersState, 'filters' | 'viewId' | 'attributesDataById'>;\n}\n\ninterface IUIFiltersActionRestoreInitialViewSettings {\n type: typeof FiltersActionTypes.RESTORE_INITIAL_VIEW_SETTINGS;\n}\n\ninterface IUIFiltersActionUpdateViewListAndCurrentView {\n type: typeof FiltersActionTypes.UPDATE_VIEWS;\n payload: IUIFiltersState;\n}\n\ntype Reducer<\n PAYLOAD extends {\n type: keyof typeof FiltersActionTypes;\n payload?: unknown;\n } = {type: any; payload: 'no_payload'},\n> = PAYLOAD['payload'] extends 'no_payload'\n ? (state: IUIFiltersState) => IUIFiltersState\n : (state: IUIFiltersState, payload: PAYLOAD['payload']) => IUIFiltersState;\n\nexport type UIFiltersAction =\n | IUIFiltersActionAddFilter\n | IIUIFiltersActionResetFilter\n | IUIFiltersActionRemoveFilter\n | IUIFiltersActionChangeFilterConfig\n | IUIFiltersActionMoveFilter\n | IUIFiltersActionReset\n | IUIFiltersActionLoadView\n | IUIFiltersActionRestoreInitialViewSettings\n | IUIFiltersActionUpdateViewListAndCurrentView;\n\nconst addFilter: Reducer<IUIFiltersActionAddFilter> = (state, payload) => {\n const hasValueList = payload.attribute.valuesList;\n\n let condition = hasOnlyNoValueConditions((payload as IUIFilterStandard).attribute.format)\n ? null\n : (conditionsByFormat[(payload as IUIFilterStandard).attribute.format][0] ?? null);\n if (hasValueList) {\n condition = AttributeConditionFilter.EQUAL;\n }\n\n let filterToAdd;\n if (isUIFilterTree(payload as UIFilter)) {\n const filterWithDefaultValues = state.initialFilters.find(\n initialFilter => initialFilter.attribute.id === payload.attribute.id,\n );\n if (filterWithDefaultValues !== undefined) {\n filterToAdd = filterWithDefaultValues;\n } else {\n filterToAdd = {\n ...payload,\n id: uuid(),\n field: Array.isArray(payload.field) ? payload.field : [payload.field],\n condition: hasOnlyNoValueConditions((payload as IUIFilterStandard).attribute.format)\n ? null\n : (getFirstConditionByFilterType(payload as UIFilter) as RecordFilterCondition[])[0],\n value: null,\n };\n }\n } else {\n filterToAdd = {\n ...payload,\n field: isLinkAttribute(payload.attribute.type) ? `${payload.field}.id` : (payload.field as string),\n id: uuid(),\n condition,\n value: null,\n valuesList: hasValueList ? payload.attribute.valuesList : undefined,\n };\n }\n\n return {\n ...state,\n filters: [...state.filters, filterToAdd],\n viewModified: true,\n };\n};\n\nconst resetFilter: Reducer<IIUIFiltersActionResetFilter> = (state, payload) => ({\n ...state,\n filters: state.filters.map(filter => {\n if (filter.id === payload.id) {\n const initialFilter = state.initialFilters.find(({id}) => id === payload.id);\n if (initialFilter) {\n return initialFilter;\n }\n\n if (isUIFilterValueList(filter)) {\n return {\n ...filter,\n condition: null,\n value: null,\n };\n }\n\n if (isUIFilterStandard(filter)) {\n return {\n ...filter,\n condition: hasOnlyNoValueConditions(filter.attribute.format)\n ? null\n : conditionsByFormat[filter.attribute.format][0],\n value: null,\n };\n }\n\n if (isUIFilterThrough(filter)) {\n return {\n ...filter,\n condition: ThroughConditionFilter.THROUGH,\n value: null,\n };\n }\n\n if (isUIFilterLink(filter)) {\n return {\n ...filter,\n condition: conditionsByFormat[AttributeFormat.text][0],\n value: null,\n };\n }\n\n if (isUIFilterTree(filter)) {\n return {\n ...filter,\n condition: null,\n value: null,\n };\n }\n }\n return filter;\n }),\n});\n\nconst removeFilter: Reducer<IUIFiltersActionRemoveFilter> = (state, payload) => ({\n ...state,\n filters: state.filters.filter(({id}) => id !== payload.id),\n viewModified: true,\n});\n\nconst changeFilterConfig: Reducer<IUIFiltersActionChangeFilterConfig> = (state, payload) => ({\n ...state,\n filters: state.filters.map(filter => {\n if (filter.id !== payload.id) {\n return filter;\n }\n if (isUIFilterTree(filter) && payload.value && payload.value.length === 0) {\n return {...filter, ...payload, value: null};\n }\n if (isUIFilterValueList(filter) && filter.condition && nullValueConditions.includes(filter.condition)) {\n return {...filter, ...payload, value: null};\n }\n return {...filter, ...payload};\n }),\n viewModified: true,\n});\n\nconst moveFilter: Reducer<IUIFiltersActionMoveFilter> = (state, payload) => {\n const attributesUsedToFilter = [...state.filters];\n const [filterToMove] = attributesUsedToFilter.splice(payload.indexFrom, 1);\n attributesUsedToFilter.splice(payload.indexTo, 0, filterToMove);\n return {\n ...state,\n filters: attributesUsedToFilter,\n viewModified: true,\n };\n};\n\nconst reset: Reducer<IUIFiltersActionReset> = (_, payload) => payload;\n\nconst loadView: Reducer<IUIFiltersActionLoadView> = (state, payload) => ({\n ...state,\n ...payload,\n initialFilters: payload.filters,\n});\n\nconst restoreInitialViewSettings: Reducer = state => ({\n ...state,\n filters: state.initialFilters,\n});\n\nexport const filtersReducer =\n setRefetchViews =>\n (state: IUIFiltersState, action: UIFiltersAction): IUIFiltersState => {\n switch (action.type) {\n case FiltersActionTypes.ADD_FILTER: {\n return addFilter(state, action.payload);\n }\n case FiltersActionTypes.RESET_FILTER: {\n return resetFilter(state, action.payload);\n }\n case FiltersActionTypes.REMOVE_FILTER: {\n return removeFilter(state, action.payload);\n }\n case FiltersActionTypes.CHANGE_FILTER_CONFIG: {\n return changeFilterConfig(state, action.payload);\n }\n case FiltersActionTypes.MOVE_FILTER: {\n return moveFilter(state, action.payload);\n }\n case FiltersActionTypes.RESET: {\n return reset(state, action.payload);\n }\n case FiltersActionTypes.LOAD_VIEW: {\n return loadView(state, action.payload);\n }\n case FiltersActionTypes.RESTORE_INITIAL_VIEW_SETTINGS: {\n return restoreInitialViewSettings(state);\n }\n case FiltersActionTypes.UPDATE_VIEWS: {\n setRefetchViews?.(true);\n return state;\n }\n default:\n return state;\n }\n };\n"]}
|
|
@@ -6,8 +6,9 @@ export interface IFiltersProviderProps {
|
|
|
6
6
|
filtersOperator?: FiltersOperator;
|
|
7
7
|
ignoreViewByDefault?: boolean;
|
|
8
8
|
pinFilters?: boolean;
|
|
9
|
+
skip: boolean;
|
|
9
10
|
}
|
|
10
|
-
export declare const useFiltersReducer: ({ libraryId, viewId, filters, filtersOperator, ignoreViewByDefault, }: IFiltersProviderProps) => {
|
|
11
|
+
export declare const useFiltersReducer: ({ libraryId, viewId, filters, filtersOperator, ignoreViewByDefault, skip, }: IFiltersProviderProps) => {
|
|
11
12
|
filtersData: import("./filtersReducer").IUIFiltersState;
|
|
12
13
|
dispatch: import("react").Dispatch<import("./filtersReducer").UIFiltersAction>;
|
|
13
14
|
};
|
|
@@ -6,7 +6,10 @@ import { filtersReducer } from './filtersReducer';
|
|
|
6
6
|
import { filtersInitialState } from './filtersInitialState';
|
|
7
7
|
import { useTransformFilters } from '../useTransformFilters';
|
|
8
8
|
import { useExplorerAttributesQuery, useGetViewsListQuery } from '../../../_gqlTypes';
|
|
9
|
-
|
|
9
|
+
import { useSharedTranslation } from '../../../hooks/useSharedTranslation';
|
|
10
|
+
import { useGetTreeFilters } from './useGetTreeFilters';
|
|
11
|
+
export const useFiltersReducer = ({ libraryId, viewId, filters, filtersOperator = 'AND', ignoreViewByDefault = false, skip, }) => {
|
|
12
|
+
const { t } = useSharedTranslation();
|
|
10
13
|
const [refetchViews, setRefetchViews] = useState(false);
|
|
11
14
|
const [filtersData, dispatch] = useReducer(filtersReducer(setRefetchViews), {
|
|
12
15
|
...filtersInitialState,
|
|
@@ -19,11 +22,12 @@ export const useFiltersReducer = ({ libraryId, viewId, filters, filtersOperator
|
|
|
19
22
|
* List of my views and shared views
|
|
20
23
|
*/
|
|
21
24
|
data: viewData, loading: viewsLoading, } = useGetViewsListQuery({
|
|
22
|
-
skip: libraryId === null && !needToReload,
|
|
25
|
+
skip: skip || (libraryId === null && !needToReload),
|
|
23
26
|
variables: {
|
|
24
27
|
libraryId: libraryId,
|
|
25
28
|
},
|
|
26
29
|
});
|
|
30
|
+
const { data: treeFilters, loading: treeFiltersLoading } = useGetTreeFilters({ libraryId, skip });
|
|
27
31
|
let userView;
|
|
28
32
|
if (viewId) {
|
|
29
33
|
userView = viewData?.views?.list?.find(viewItem => viewItem.id === viewId);
|
|
@@ -46,9 +50,9 @@ export const useFiltersReducer = ({ libraryId, viewId, filters, filtersOperator
|
|
|
46
50
|
return acc;
|
|
47
51
|
}, {}), [attributesData]);
|
|
48
52
|
useEffect(() => {
|
|
49
|
-
if (!viewsLoading) {
|
|
53
|
+
if (!viewsLoading && !treeFiltersLoading) {
|
|
50
54
|
setRefetchViews(false);
|
|
51
|
-
const uiFilters = toUIFilters({ filters: allFilters ?? [], attributesDataById });
|
|
55
|
+
const uiFilters = toUIFilters({ filters: allFilters ?? [], treeFilters, attributesDataById, t });
|
|
52
56
|
dispatch({
|
|
53
57
|
type: 'RESET',
|
|
54
58
|
payload: {
|
|
@@ -62,7 +66,7 @@ export const useFiltersReducer = ({ libraryId, viewId, filters, filtersOperator
|
|
|
62
66
|
},
|
|
63
67
|
});
|
|
64
68
|
}
|
|
65
|
-
}, [attributesDataById, viewsLoading]);
|
|
69
|
+
}, [attributesDataById, viewsLoading, treeFiltersLoading]);
|
|
66
70
|
return { filtersData, dispatch };
|
|
67
71
|
};
|
|
68
72
|
//# sourceMappingURL=useFiltersReducer.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useFiltersReducer.js","sourceRoot":"","sources":["../../../../src/components/Filters/context/useFiltersReducer.tsx"],"names":[],"mappings":"AAAA,oFAAoF;AACpF,sCAAsC;AACtC,sEAAsE;AACtE,OAAO,
|
|
1
|
+
{"version":3,"file":"useFiltersReducer.js","sourceRoot":"","sources":["../../../../src/components/Filters/context/useFiltersReducer.tsx"],"names":[],"mappings":"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","sourcesContent":["// Copyright LEAV Solutions 2017 until 2023/11/05, Copyright Aristid from 2023/11/06\n// This file is released under LGPL V3\n// License text available at https://www.gnu.org/licenses/lgpl-3.0.txt\nimport {useEffect, useMemo, useReducer, useState} from 'react';\nimport {filtersReducer} from './filtersReducer';\nimport {filtersInitialState} from './filtersInitialState';\nimport {type AttributesById, useTransformFilters} from '../useTransformFilters';\nimport {type GetViewsListQuery, useExplorerAttributesQuery, useGetViewsListQuery} from '_ui/_gqlTypes';\nimport {type FiltersOperator, type UIFilter} from '../_types';\nimport {useSharedTranslation} from '_ui/hooks/useSharedTranslation';\nimport {useGetTreeFilters} from './useGetTreeFilters';\n\nexport interface IFiltersProviderProps {\n libraryId: string | null;\n viewId?: string;\n filters?: UIFilter[];\n filtersOperator?: FiltersOperator;\n ignoreViewByDefault?: boolean;\n pinFilters?: boolean;\n skip: boolean;\n}\n\nexport const useFiltersReducer = ({\n libraryId,\n viewId,\n filters,\n filtersOperator = 'AND',\n ignoreViewByDefault = false,\n skip,\n}: IFiltersProviderProps) => {\n const {t} = useSharedTranslation();\n const [refetchViews, setRefetchViews] = useState(false);\n const [filtersData, dispatch] = useReducer(filtersReducer(setRefetchViews), {\n ...filtersInitialState,\n filtersOperator: filtersOperator ?? filtersInitialState.filtersOperator,\n });\n const {toValidFilters, toUIFilters} = useTransformFilters();\n\n const needToReload = refetchViews || (libraryId && libraryId !== filtersData.libraryId);\n\n const {\n /**\n * List of my views and shared views\n */\n data: viewData,\n loading: viewsLoading,\n } = useGetViewsListQuery({\n skip: skip || (libraryId === null && !needToReload),\n variables: {\n libraryId: libraryId as string,\n },\n });\n\n const {data: treeFilters, loading: treeFiltersLoading} = useGetTreeFilters({libraryId, skip});\n\n let userView: GetViewsListQuery['views']['list'][number] | undefined;\n if (viewId) {\n userView = viewData?.views?.list?.find(viewItem => viewItem.id === viewId);\n }\n userView = userView ?? viewData?.views?.list?.at(-1) ?? null;\n\n const userViewFilters = ignoreViewByDefault ? [] : toValidFilters(userView?.filters ?? []);\n\n const preparedDefaultFilters = toValidFilters(filters ?? []);\n const allFilters = preparedDefaultFilters.concat(userViewFilters);\n\n const attributesToGet = allFilters.map(filter => filter.field);\n\n const {data: attributesData, loading: attributesLoading} = useExplorerAttributesQuery({\n variables: {\n ids: attributesToGet,\n },\n skip: libraryId === null || viewsLoading || attributesToGet.length === 0,\n });\n\n const attributesDataById = useMemo(\n () =>\n (attributesData?.attributes?.list ?? []).reduce<AttributesById>((acc, attr) => {\n if (attr.permissions.access_attribute) {\n acc[attr.id] = attr;\n }\n return acc;\n }, {}),\n [attributesData],\n );\n\n useEffect(() => {\n if (!viewsLoading && !treeFiltersLoading) {\n setRefetchViews(false);\n const uiFilters = toUIFilters({filters: allFilters ?? [], treeFilters, attributesDataById, t});\n dispatch({\n type: 'RESET',\n payload: {\n libraryId,\n viewId,\n filtersOperator: filtersOperator ?? filtersInitialState.filtersOperator,\n filters: uiFilters,\n initialFilters: uiFilters,\n attributesDataById,\n loading: viewsLoading || attributesLoading,\n },\n });\n }\n }, [attributesDataById, viewsLoading, treeFiltersLoading]);\n\n return {filtersData, dispatch};\n};\n"]}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export interface ITreeFilters {
|
|
2
|
+
[x: string]: Array<{
|
|
3
|
+
nodeId: string;
|
|
4
|
+
libraryId: string;
|
|
5
|
+
value: string;
|
|
6
|
+
label: string;
|
|
7
|
+
}>;
|
|
8
|
+
}
|
|
9
|
+
export declare const useGetTreeFilters: ({ libraryId, skip }: {
|
|
10
|
+
libraryId: string;
|
|
11
|
+
skip: boolean;
|
|
12
|
+
}) => {
|
|
13
|
+
data: ITreeFilters;
|
|
14
|
+
loading: boolean;
|
|
15
|
+
};
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
// Copyright LEAV Solutions 2017 until 2023/11/05, Copyright Aristid from 2023/11/06
|
|
2
|
+
// This file is released under LGPL V3
|
|
3
|
+
// License text available at https://www.gnu.org/licenses/lgpl-3.0.txt
|
|
4
|
+
import { useGetLibraryByIdQuery, useTreeFilterByDefaultValuesLazyQuery, } from '../../../_gqlTypes';
|
|
5
|
+
import { useEffect, useState } from 'react';
|
|
6
|
+
export const useGetTreeFilters = ({ libraryId, skip }) => {
|
|
7
|
+
const [treeFilters, setTreeFilters] = useState({});
|
|
8
|
+
const [treeFiltersLoading, setTreeFiltersLoading] = useState(true);
|
|
9
|
+
const [treeFilterByDefaultValues] = useTreeFilterByDefaultValuesLazyQuery();
|
|
10
|
+
const { data: libraryData, loading: libraryLoading } = useGetLibraryByIdQuery({
|
|
11
|
+
variables: {
|
|
12
|
+
id: libraryId,
|
|
13
|
+
},
|
|
14
|
+
skip: skip || !libraryId,
|
|
15
|
+
});
|
|
16
|
+
useEffect(() => {
|
|
17
|
+
if (skip || !libraryId || libraryLoading) {
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
const fetchTreeFilters = async () => {
|
|
21
|
+
const treeAttributesWithExtendedPermissions = libraryData?.libraries.list[0]?.permissions_conf?.permissionTreeAttributes.map(attribute => ({
|
|
22
|
+
attributeId: attribute.id,
|
|
23
|
+
treeId: libraryData?.libraries.list[0]?.attributes.find(tree => tree.id === attribute.id)?.linked_tree?.id,
|
|
24
|
+
})) || [];
|
|
25
|
+
const treeResponse = await Promise.all(treeAttributesWithExtendedPermissions.map(async (attribute) => {
|
|
26
|
+
const res = await treeFilterByDefaultValues({
|
|
27
|
+
variables: {
|
|
28
|
+
treeId: attribute.treeId,
|
|
29
|
+
accessRecordByDefaultPermission: {
|
|
30
|
+
attributeId: attribute.attributeId,
|
|
31
|
+
libraryId,
|
|
32
|
+
},
|
|
33
|
+
},
|
|
34
|
+
});
|
|
35
|
+
return {
|
|
36
|
+
attributeId: attribute.attributeId,
|
|
37
|
+
recordIds: res?.data?.treeNodeChildren?.list
|
|
38
|
+
?.map(item => item.accessRecordByDefaultPermission
|
|
39
|
+
? {
|
|
40
|
+
nodeId: item.id,
|
|
41
|
+
libraryId: item.record.whoAmI.library.id,
|
|
42
|
+
value: item.record.id,
|
|
43
|
+
label: item.record.whoAmI.label,
|
|
44
|
+
}
|
|
45
|
+
: undefined)
|
|
46
|
+
.filter(Boolean) || [],
|
|
47
|
+
};
|
|
48
|
+
}));
|
|
49
|
+
const attributeRecords = treeResponse.reduce((acc, item) => {
|
|
50
|
+
acc[item.attributeId] = item.recordIds;
|
|
51
|
+
return acc;
|
|
52
|
+
}, {});
|
|
53
|
+
setTreeFilters(attributeRecords);
|
|
54
|
+
setTreeFiltersLoading(false);
|
|
55
|
+
};
|
|
56
|
+
fetchTreeFilters();
|
|
57
|
+
}, [skip, libraryId, libraryLoading]);
|
|
58
|
+
return {
|
|
59
|
+
data: treeFilters,
|
|
60
|
+
loading: treeFiltersLoading,
|
|
61
|
+
};
|
|
62
|
+
};
|
|
63
|
+
//# sourceMappingURL=useGetTreeFilters.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useGetTreeFilters.js","sourceRoot":"","sources":["../../../../src/components/Filters/context/useGetTreeFilters.tsx"],"names":[],"mappings":"AAAA,oFAAoF;AACpF,sCAAsC;AACtC,sEAAsE;AACtE,OAAO,EAEH,sBAAsB,EACtB,qCAAqC,GACxC,MAAM,eAAe,CAAC;AACvB,OAAO,EAAC,SAAS,EAAE,QAAQ,EAAC,MAAM,OAAO,CAAC;AAM1C,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,EAAC,SAAS,EAAE,IAAI,EAAqC,EAAE,EAAE;IACvF,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAe,EAAE,CAAC,CAAC;IACjE,MAAM,CAAC,kBAAkB,EAAE,qBAAqB,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IACnE,MAAM,CAAC,yBAAyB,CAAC,GAAG,qCAAqC,EAAE,CAAC;IAE5E,MAAM,EAAC,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,cAAc,EAAC,GAAG,sBAAsB,CAAC;QACxE,SAAS,EAAE;YACP,EAAE,EAAE,SAAS;SAChB;QACD,IAAI,EAAE,IAAI,IAAI,CAAC,SAAS;KAC3B,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACX,IAAI,IAAI,IAAI,CAAC,SAAS,IAAI,cAAc,EAAE,CAAC;YACvC,OAAO;QACX,CAAC;QAED,MAAM,gBAAgB,GAAG,KAAK,IAAI,EAAE;YAChC,MAAM,qCAAqC,GACvC,WAAW,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,wBAAwB,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;gBACzF,WAAW,EAAE,SAAS,CAAC,EAAE;gBACzB,MAAM,EACF,WAAW,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,IAAI,CAC3C,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,SAAS,CAAC,EAAE,CAEvC,EAAE,WAAW,EAAE,EAAE;aACrB,CAAC,CAAC,IAAI,EAAE,CAAC;YAEd,MAAM,YAAY,GAAG,MAAM,OAAO,CAAC,GAAG,CAClC,qCAAqC,CAAC,GAAG,CAAC,KAAK,EAAC,SAAS,EAAC,EAAE;gBACxD,MAAM,GAAG,GAAG,MAAM,yBAAyB,CAAC;oBACxC,SAAS,EAAE;wBACP,MAAM,EAAE,SAAS,CAAC,MAAM;wBACxB,+BAA+B,EAAE;4BAC7B,WAAW,EAAE,SAAS,CAAC,WAAW;4BAClC,SAAS;yBACZ;qBACJ;iBACJ,CAAC,CAAC;gBAEH,OAAO;oBACH,WAAW,EAAE,SAAS,CAAC,WAAW;oBAClC,SAAS,EACL,GAAG,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI;wBAC7B,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,CACT,IAAI,CAAC,+BAA+B;wBAChC,CAAC,CAAC;4BACI,MAAM,EAAE,IAAI,CAAC,EAAE;4BACf,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE;4BACxC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE;4BACrB,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK;yBAClC;wBACH,CAAC,CAAC,SAAS,CAClB;yBACA,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE;iBACjC,CAAC;YACN,CAAC,CAAC,CACL,CAAC;YAEF,MAAM,gBAAgB,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE;gBACvD,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC;gBACvC,OAAO,GAAG,CAAC;YACf,CAAC,EAAE,EAAE,CAAC,CAAC;YAEP,cAAc,CAAC,gBAAgB,CAAC,CAAC;YACjC,qBAAqB,CAAC,KAAK,CAAC,CAAC;QACjC,CAAC,CAAC;QAEF,gBAAgB,EAAE,CAAC;IACvB,CAAC,EAAE,CAAC,IAAI,EAAE,SAAS,EAAE,cAAc,CAAC,CAAC,CAAC;IAEtC,OAAO;QACH,IAAI,EAAE,WAAW;QACjB,OAAO,EAAE,kBAAkB;KAC9B,CAAC;AACN,CAAC,CAAC","sourcesContent":["// Copyright LEAV Solutions 2017 until 2023/11/05, Copyright Aristid from 2023/11/06\n// This file is released under LGPL V3\n// License text available at https://www.gnu.org/licenses/lgpl-3.0.txt\nimport {\n type TreeAttributeDetailsFragment,\n useGetLibraryByIdQuery,\n useTreeFilterByDefaultValuesLazyQuery,\n} from '_ui/_gqlTypes';\nimport {useEffect, useState} from 'react';\n\nexport interface ITreeFilters {\n [x: string]: Array<{nodeId: string; libraryId: string; value: string; label: string}>;\n}\n\nexport const useGetTreeFilters = ({libraryId, skip}: {libraryId: string; skip: boolean}) => {\n const [treeFilters, setTreeFilters] = useState<ITreeFilters>({});\n const [treeFiltersLoading, setTreeFiltersLoading] = useState(true);\n const [treeFilterByDefaultValues] = useTreeFilterByDefaultValuesLazyQuery();\n\n const {data: libraryData, loading: libraryLoading} = useGetLibraryByIdQuery({\n variables: {\n id: libraryId,\n },\n skip: skip || !libraryId,\n });\n\n useEffect(() => {\n if (skip || !libraryId || libraryLoading) {\n return;\n }\n\n const fetchTreeFilters = async () => {\n const treeAttributesWithExtendedPermissions: Array<{attributeId: string; treeId: string}> =\n libraryData?.libraries.list[0]?.permissions_conf?.permissionTreeAttributes.map(attribute => ({\n attributeId: attribute.id,\n treeId: (\n libraryData?.libraries.list[0]?.attributes.find(\n tree => tree.id === attribute.id,\n ) as TreeAttributeDetailsFragment\n )?.linked_tree?.id,\n })) || [];\n\n const treeResponse = await Promise.all(\n treeAttributesWithExtendedPermissions.map(async attribute => {\n const res = await treeFilterByDefaultValues({\n variables: {\n treeId: attribute.treeId,\n accessRecordByDefaultPermission: {\n attributeId: attribute.attributeId,\n libraryId,\n },\n },\n });\n\n return {\n attributeId: attribute.attributeId,\n recordIds:\n res?.data?.treeNodeChildren?.list\n ?.map(item =>\n item.accessRecordByDefaultPermission\n ? {\n nodeId: item.id,\n libraryId: item.record.whoAmI.library.id,\n value: item.record.id,\n label: item.record.whoAmI.label,\n }\n : undefined,\n )\n .filter(Boolean) || [],\n };\n }),\n );\n\n const attributeRecords = treeResponse.reduce((acc, item) => {\n acc[item.attributeId] = item.recordIds;\n return acc;\n }, {});\n\n setTreeFilters(attributeRecords);\n setTreeFiltersLoading(false);\n };\n\n fetchTreeFilters();\n }, [skip, libraryId, libraryLoading]);\n\n return {\n data: treeFilters,\n loading: treeFiltersLoading,\n };\n};\n"]}
|
|
@@ -1,28 +1,45 @@
|
|
|
1
1
|
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
// Copyright LEAV Solutions 2017 until 2023/11/05, Copyright Aristid from 2023/11/06
|
|
3
|
+
// This file is released under LGPL V3
|
|
4
|
+
// License text available at https://www.gnu.org/licenses/lgpl-3.0.txt
|
|
5
|
+
import { useEffect, useState } from 'react';
|
|
2
6
|
import styled from 'styled-components';
|
|
3
7
|
import { KitInput, KitSelect } from 'aristid-ds';
|
|
4
8
|
import { AttributeConditionFilter } from '../../../../types';
|
|
5
9
|
import { useSharedTranslation } from '../../../../hooks/useSharedTranslation';
|
|
6
10
|
import { useConditionsOptionsByType } from './useConditionOptionsByType';
|
|
11
|
+
import { useDebouncedValue } from '../../../../hooks/useDebouncedValue';
|
|
7
12
|
const InputStyled = styled(KitInput) `
|
|
8
13
|
width: 100%;
|
|
9
14
|
`;
|
|
10
15
|
export const TextAttributeDropDown = ({ filter, onFilterChange, selectDropDownRef, }) => {
|
|
11
16
|
const { t } = useSharedTranslation();
|
|
12
17
|
const { conditionOptionsByType } = useConditionsOptionsByType(filter);
|
|
18
|
+
const [inputValue, setInputValue] = useState(filter.value || '');
|
|
19
|
+
const debouncedInputValue = useDebouncedValue(inputValue, 300);
|
|
20
|
+
useEffect(() => {
|
|
21
|
+
setInputValue(filter.value || '');
|
|
22
|
+
}, [filter.value]);
|
|
23
|
+
// Only apply onFilterChange when the input is empty or there are more than 2 characters
|
|
24
|
+
useEffect(() => {
|
|
25
|
+
const valueToApply = debouncedInputValue;
|
|
26
|
+
if (valueToApply.length === 0 && filter.value !== null) {
|
|
27
|
+
onFilterChange({ ...filter, value: null });
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
if (valueToApply.length >= 3 && filter.value !== valueToApply) {
|
|
31
|
+
onFilterChange({ ...filter, value: valueToApply });
|
|
32
|
+
}
|
|
33
|
+
}, [debouncedInputValue, onFilterChange, filter]);
|
|
13
34
|
const _onConditionChanged = condition => {
|
|
14
35
|
onFilterChange({ ...filter, condition });
|
|
15
36
|
};
|
|
16
|
-
// TODO debounce ?
|
|
17
37
|
const _onInputChanged = event => {
|
|
18
|
-
const
|
|
19
|
-
|
|
20
|
-
return;
|
|
21
|
-
}
|
|
22
|
-
onFilterChange({ ...filter, value: event.target.value.length === 0 ? null : event.target.value });
|
|
38
|
+
const newInputValue = event.target.value;
|
|
39
|
+
setInputValue(newInputValue);
|
|
23
40
|
};
|
|
24
41
|
const showSearch = filter.condition !== AttributeConditionFilter.IS_EMPTY &&
|
|
25
42
|
filter.condition !== AttributeConditionFilter.IS_NOT_EMPTY;
|
|
26
|
-
return (_jsxs(_Fragment, { children: [_jsx(KitSelect, { options: conditionOptionsByType, onChange: _onConditionChanged, value: filter.condition, getPopupContainer: () => selectDropDownRef?.current ?? document.body, "aria-label": String(t('explorer.filter-condition')) }), showSearch && (_jsx(InputStyled, { placeholder: String(t('explorer.type-a-value')), value:
|
|
43
|
+
return (_jsxs(_Fragment, { children: [_jsx(KitSelect, { options: conditionOptionsByType, onChange: _onConditionChanged, value: filter.condition, getPopupContainer: () => selectDropDownRef?.current ?? document.body, "aria-label": String(t('explorer.filter-condition')) }), showSearch && (_jsx(InputStyled, { placeholder: String(t('explorer.type-a-value')), value: inputValue, onChange: _onInputChanged }))] }));
|
|
27
44
|
};
|
|
28
45
|
//# sourceMappingURL=TextAttributeDropDown.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TextAttributeDropDown.js","sourceRoot":"","sources":["../../../../../src/components/Filters/filter-items/filter-type/TextAttributeDropDown.tsx"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"TextAttributeDropDown.js","sourceRoot":"","sources":["../../../../../src/components/Filters/filter-items/filter-type/TextAttributeDropDown.tsx"],"names":[],"mappings":"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","sourcesContent":["// Copyright LEAV Solutions 2017 until 2023/11/05, Copyright Aristid from 2023/11/06\n// This file is released under LGPL V3\n// License text available at https://www.gnu.org/licenses/lgpl-3.0.txt\nimport {type ComponentProps, type FunctionComponent, useEffect, useState} from 'react';\nimport styled from 'styled-components';\nimport {KitInput, KitSelect} from 'aristid-ds';\nimport {AttributeConditionFilter} from '_ui/types';\nimport {useSharedTranslation} from '_ui/hooks/useSharedTranslation';\nimport {type IFilterChildrenDropDownProps} from './_types';\nimport {useConditionsOptionsByType} from './useConditionOptionsByType';\nimport {useDebouncedValue} from '_ui/hooks/useDebouncedValue';\n\nconst InputStyled = styled(KitInput)`\n width: 100%;\n`;\n\nexport const TextAttributeDropDown: FunctionComponent<IFilterChildrenDropDownProps> = ({\n filter,\n onFilterChange,\n selectDropDownRef,\n}) => {\n const {t} = useSharedTranslation();\n\n const {conditionOptionsByType} = useConditionsOptionsByType(filter);\n const [inputValue, setInputValue] = useState(filter.value || '');\n const debouncedInputValue = useDebouncedValue(inputValue, 300);\n\n useEffect(() => {\n setInputValue(filter.value || '');\n }, [filter.value]);\n\n // Only apply onFilterChange when the input is empty or there are more than 2 characters\n useEffect(() => {\n const valueToApply = debouncedInputValue;\n\n if (valueToApply.length === 0 && filter.value !== null) {\n onFilterChange({...filter, value: null});\n return;\n }\n\n if (valueToApply.length >= 3 && filter.value !== valueToApply) {\n onFilterChange({...filter, value: valueToApply});\n }\n }, [debouncedInputValue, onFilterChange, filter]);\n\n const _onConditionChanged: ComponentProps<typeof KitSelect>['onChange'] = condition => {\n onFilterChange({...filter, condition});\n };\n\n const _onInputChanged: ComponentProps<typeof KitInput>['onChange'] = event => {\n const newInputValue = event.target.value;\n setInputValue(newInputValue);\n };\n\n const showSearch =\n filter.condition !== AttributeConditionFilter.IS_EMPTY &&\n filter.condition !== AttributeConditionFilter.IS_NOT_EMPTY;\n\n return (\n <>\n <KitSelect\n options={conditionOptionsByType}\n onChange={_onConditionChanged}\n value={filter.condition}\n getPopupContainer={() => selectDropDownRef?.current ?? document.body}\n aria-label={String(t('explorer.filter-condition'))}\n />\n {showSearch && (\n <InputStyled\n placeholder={String(t('explorer.type-a-value'))}\n value={inputValue}\n onChange={_onInputChanged}\n />\n )}\n </>\n );\n};\n"]}
|
|
@@ -1,8 +1,4 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
// Copyright LEAV Solutions 2017 until 2023/11/05, Copyright Aristid from 2023/11/06
|
|
3
|
-
// This file is released under LGPL V3
|
|
4
|
-
// License text available at https://www.gnu.org/licenses/lgpl-3.0.txt
|
|
5
|
-
import { useEffect, useState } from 'react';
|
|
6
2
|
import { KitSelect } from 'aristid-ds';
|
|
7
3
|
import { useSharedTranslation } from '../../../../hooks/useSharedTranslation';
|
|
8
4
|
import { AttributeConditionFilter } from '../../../../types';
|
|
@@ -16,24 +12,22 @@ const DivStyled = styled.div `
|
|
|
16
12
|
`;
|
|
17
13
|
export const TreeAttributeDropDown = ({ filter, onFilterChange, selectDropDownRef, }) => {
|
|
18
14
|
const { t } = useSharedTranslation();
|
|
19
|
-
const
|
|
15
|
+
const selectedNodesIds = (filter.nodes ?? []).map(node => node.nodeId);
|
|
20
16
|
const { conditionOptionsByType: availableConditionsOptions } = useConditionsOptionsByType(filter);
|
|
21
17
|
const _handleOnSelect = (node, selected) => {
|
|
18
|
+
let newSelectedIds;
|
|
22
19
|
if (selected) {
|
|
23
|
-
|
|
20
|
+
newSelectedIds = [...selectedNodesIds, node.id];
|
|
24
21
|
}
|
|
25
22
|
else {
|
|
26
|
-
|
|
23
|
+
newSelectedIds = selectedNodesIds.filter(selectedValue => selectedValue !== node.id);
|
|
27
24
|
}
|
|
25
|
+
onFilterChange({
|
|
26
|
+
...filter,
|
|
27
|
+
nodes: newSelectedIds.map(id => ({ nodeId: id, libraryId: node.record.whoAmI.library.id })),
|
|
28
|
+
});
|
|
28
29
|
};
|
|
29
|
-
const _onConditionChanged = condition => {
|
|
30
|
-
onFilterChange({ ...filter, condition });
|
|
31
|
-
};
|
|
32
|
-
useEffect(() => {
|
|
33
|
-
if (filter.value == null) {
|
|
34
|
-
setSelectedNodes([]);
|
|
35
|
-
}
|
|
36
|
-
}, [filter]);
|
|
30
|
+
const _onConditionChanged = condition => onFilterChange({ ...filter, condition });
|
|
37
31
|
const _getRecursiveChildrenRecord = (nodes) => {
|
|
38
32
|
const records = [];
|
|
39
33
|
const collectRecordIdsRecursively = (nodeList) => {
|
|
@@ -57,11 +51,15 @@ export const TreeAttributeDropDown = ({ filter, onFilterChange, selectDropDownRe
|
|
|
57
51
|
.filter(node => !!node.record?.whoAmI?.library?.id)
|
|
58
52
|
.map(node => `${filter.attribute.id}.${node.record?.whoAmI?.library?.id}.id`);
|
|
59
53
|
const _handleOnCheck = (selection) => {
|
|
60
|
-
|
|
54
|
+
const newSelectedNodes = selection.filter(node => !node?.disabled);
|
|
61
55
|
const records = _getRecursiveChildrenRecord(selection);
|
|
62
56
|
const fields = _getRecursiveFieldsFromLibraries(selection);
|
|
63
57
|
onFilterChange({
|
|
64
58
|
...filter,
|
|
59
|
+
nodes: newSelectedNodes.map(node => ({
|
|
60
|
+
nodeId: node.id,
|
|
61
|
+
libraryId: node.record?.whoAmI.library.id ?? records[0]?.whoAmI.library.id ?? '',
|
|
62
|
+
})),
|
|
65
63
|
value: records.map(record => record.id),
|
|
66
64
|
formattedValue: records.map(record => record.whoAmI.label).filter(Boolean),
|
|
67
65
|
condition: filter.condition ?? RecordFilterCondition.EQUAL,
|
|
@@ -70,6 +68,6 @@ export const TreeAttributeDropDown = ({ filter, onFilterChange, selectDropDownRe
|
|
|
70
68
|
};
|
|
71
69
|
const showSearch = filter.condition &&
|
|
72
70
|
![AttributeConditionFilter.IS_EMPTY, AttributeConditionFilter.IS_NOT_EMPTY].includes(filter.condition);
|
|
73
|
-
return (_jsxs(DivStyled, { children: [_jsx(KitSelect, { options: availableConditionsOptions, onChange: _onConditionChanged, value: filter.condition, getPopupContainer: () => selectDropDownRef?.current ?? document.body, "aria-label": String(t('explorer.filter-link-condition')) }), showSearch && (_jsx(SelectTreeNode, { treeId: filter.attribute.linkedTree?.id ?? '', selectedNodes:
|
|
71
|
+
return (_jsxs(DivStyled, { children: [_jsx(KitSelect, { options: availableConditionsOptions, onChange: _onConditionChanged, value: filter.condition, getPopupContainer: () => selectDropDownRef?.current ?? document.body, "aria-label": String(t('explorer.filter-link-condition')) }), showSearch && (_jsx(SelectTreeNode, { treeId: filter.attribute.linkedTree?.id ?? '', selectedNodes: selectedNodesIds, onSelect: _handleOnSelect, onCheck: _handleOnCheck, multiple: true, canSelectRoot: false, checkStrictly: false, checkable: true, loadRecursively: true, noPagination: true }))] }));
|
|
74
72
|
};
|
|
75
73
|
//# sourceMappingURL=TreeAttributeDropDown.js.map
|