@leav/ui 1.5.0-ba7c6a04 → 1.5.0-e0f0cfb7

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.
Files changed (45) hide show
  1. package/dist/__mocks__/common/library.d.ts +9 -0
  2. package/dist/_gqlTypes/index.d.ts +108 -12
  3. package/dist/_gqlTypes/index.js +62 -12
  4. package/dist/_gqlTypes/index.js.map +1 -1
  5. package/dist/_queries/libraries/libraryDetailsFragment.js +7 -0
  6. package/dist/_queries/libraries/libraryDetailsFragment.js.map +1 -1
  7. package/dist/components/Explorer/DataView.js +4 -3
  8. package/dist/components/Explorer/DataView.js.map +1 -1
  9. package/dist/components/Explorer/Explorer.js +2 -1
  10. package/dist/components/Explorer/Explorer.js.map +1 -1
  11. package/dist/components/Explorer/ExplorerFiltersAndSorts.d.ts +1 -0
  12. package/dist/components/Explorer/ExplorerFiltersAndSorts.js +2 -2
  13. package/dist/components/Explorer/ExplorerFiltersAndSorts.js.map +1 -1
  14. package/dist/components/Explorer/ExplorerToolbar.d.ts +1 -0
  15. package/dist/components/Explorer/ExplorerToolbar.js +2 -2
  16. package/dist/components/Explorer/ExplorerToolbar.js.map +1 -1
  17. package/dist/components/Explorer/actions-mass/useDeleteLinkValues.js.map +1 -1
  18. package/dist/components/Explorer/useLoadView.js +0 -2
  19. package/dist/components/Explorer/useLoadView.js.map +1 -1
  20. package/dist/components/Filters/_types.d.ts +4 -0
  21. package/dist/components/Filters/_types.js.map +1 -1
  22. package/dist/components/Filters/context/filtersReducer.js +20 -10
  23. package/dist/components/Filters/context/filtersReducer.js.map +1 -1
  24. package/dist/components/Filters/context/useFiltersReducer.d.ts +2 -1
  25. package/dist/components/Filters/context/useFiltersReducer.js +9 -5
  26. package/dist/components/Filters/context/useFiltersReducer.js.map +1 -1
  27. package/dist/components/Filters/context/useGetTreeFilters.d.ts +15 -0
  28. package/dist/components/Filters/context/useGetTreeFilters.js +63 -0
  29. package/dist/components/Filters/context/useGetTreeFilters.js.map +1 -0
  30. package/dist/components/Filters/filter-items/filter-type/TreeAttributeDropDown.js +6 -6
  31. package/dist/components/Filters/filter-items/filter-type/TreeAttributeDropDown.js.map +1 -1
  32. package/dist/components/Filters/index.js.map +1 -1
  33. package/dist/components/Filters/prepareFiltersForRequest.js +14 -5
  34. package/dist/components/Filters/prepareFiltersForRequest.js.map +1 -1
  35. package/dist/components/Filters/useFilters.d.ts +4 -0
  36. package/dist/components/Filters/useTransformFilters.d.ts +5 -1
  37. package/dist/components/Filters/useTransformFilters.js +26 -3
  38. package/dist/components/Filters/useTransformFilters.js.map +1 -1
  39. package/dist/components/RecordHistory/RecordHistory.js +11 -6
  40. package/dist/components/RecordHistory/RecordHistory.js.map +1 -1
  41. package/dist/components/RecordHistory/RecordHistoryLogEntry.js +13 -7
  42. package/dist/components/RecordHistory/RecordHistoryLogEntry.js.map +1 -1
  43. package/dist/components/SelectTreeNode/SelectTreeNodeContent.js +1 -1
  44. package/dist/components/SelectTreeNode/SelectTreeNodeContent.js.map +1 -1
  45. package/package.json +4 -4
@@ -1 +1 @@
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 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 // 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"]}
@@ -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
- export const useFiltersReducer = ({ libraryId, viewId, filters, filtersOperator = 'AND', ignoreViewByDefault = false, }) => {
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":"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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 {ReactNode, 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';\n\nexport interface IFiltersProviderProps {\n libraryId: string | null;\n viewId?: string;\n filters?: UIFilter[];\n filtersOperator?: FiltersOperator;\n ignoreViewByDefault?: boolean;\n pinFilters?: boolean;\n}\n\nexport const useFiltersReducer = ({\n libraryId,\n viewId,\n filters,\n filtersOperator = 'AND',\n ignoreViewByDefault = false,\n}: IFiltersProviderProps) => {\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: libraryId === null && !needToReload,\n variables: {\n libraryId: libraryId as string,\n },\n });\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) {\n setRefetchViews(false);\n const uiFilters = toUIFilters({filters: allFilters ?? [], attributesDataById});\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]);\n\n return {filtersData, dispatch};\n};\n"]}
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":"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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 {\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"]}
@@ -16,14 +16,14 @@ const DivStyled = styled.div `
16
16
  `;
17
17
  export const TreeAttributeDropDown = ({ filter, onFilterChange, selectDropDownRef, }) => {
18
18
  const { t } = useSharedTranslation();
19
- const [selectedNodes, setSelectedNodes] = useState([]);
19
+ const [selectedNodesIds, setSelectedNodesIds] = useState((filter.nodes ?? []).map(node => node.nodeId));
20
20
  const { conditionOptionsByType: availableConditionsOptions } = useConditionsOptionsByType(filter);
21
21
  const _handleOnSelect = (node, selected) => {
22
22
  if (selected) {
23
- setSelectedNodes(prev => [...prev, node]);
23
+ setSelectedNodesIds(prev => [...prev, node.id]);
24
24
  }
25
25
  else {
26
- setSelectedNodes(prev => prev.filter(selectedValue => selectedValue.id !== node.id));
26
+ setSelectedNodesIds(prev => prev.filter(selectedValue => selectedValue !== node.id));
27
27
  }
28
28
  };
29
29
  const _onConditionChanged = condition => {
@@ -31,7 +31,7 @@ export const TreeAttributeDropDown = ({ filter, onFilterChange, selectDropDownRe
31
31
  };
32
32
  useEffect(() => {
33
33
  if (filter.value == null) {
34
- setSelectedNodes([]);
34
+ setSelectedNodesIds([]);
35
35
  }
36
36
  }, [filter]);
37
37
  const _getRecursiveChildrenRecord = (nodes) => {
@@ -57,7 +57,7 @@ export const TreeAttributeDropDown = ({ filter, onFilterChange, selectDropDownRe
57
57
  .filter(node => !!node.record?.whoAmI?.library?.id)
58
58
  .map(node => `${filter.attribute.id}.${node.record?.whoAmI?.library?.id}.id`);
59
59
  const _handleOnCheck = (selection) => {
60
- setSelectedNodes(selection.filter(node => !node?.disabled));
60
+ setSelectedNodesIds(selection.filter(node => !node?.disabled).map(node => node.id));
61
61
  const records = _getRecursiveChildrenRecord(selection);
62
62
  const fields = _getRecursiveFieldsFromLibraries(selection);
63
63
  onFilterChange({
@@ -70,6 +70,6 @@ export const TreeAttributeDropDown = ({ filter, onFilterChange, selectDropDownRe
70
70
  };
71
71
  const showSearch = filter.condition &&
72
72
  ![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: selectedNodes.map(node => node.id), onSelect: _handleOnSelect, onCheck: _handleOnCheck, multiple: true, canSelectRoot: true, checkStrictly: false, checkable: true, loadRecursively: true, noPagination: true }))] }));
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: selectedNodesIds, onSelect: _handleOnSelect, onCheck: _handleOnCheck, multiple: true, canSelectRoot: true, checkStrictly: false, checkable: true, loadRecursively: true, noPagination: true }))] }));
74
74
  };
75
75
  //# sourceMappingURL=TreeAttributeDropDown.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"TreeAttributeDropDown.js","sourceRoot":"","sources":["../../../../../src/components/Filters/filter-items/filter-type/TreeAttributeDropDown.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 {KitSelect} from 'aristid-ds';\nimport {useSharedTranslation} from '_ui/hooks/useSharedTranslation';\nimport {AttributeConditionFilter, type IRecordIdentity, type ITreeNodeWithRecord} from '_ui/types';\nimport {RecordFilterCondition} from '_ui/_gqlTypes';\nimport {type IFilterChildrenTreeDropDownProps} from './_types';\nimport {SelectTreeNode} from '_ui/components/SelectTreeNode';\nimport styled from 'styled-components';\nimport {useConditionsOptionsByType} from './useConditionOptionsByType';\n\nconst DivStyled = styled.div`\n max-height: 30rem;\n overflow: auto;\n`;\n\nexport const TreeAttributeDropDown: FunctionComponent<IFilterChildrenTreeDropDownProps> = ({\n filter,\n onFilterChange,\n selectDropDownRef,\n}) => {\n const {t} = useSharedTranslation();\n\n const [selectedNodes, setSelectedNodes] = useState<ITreeNodeWithRecord[]>([]);\n\n const {conditionOptionsByType: availableConditionsOptions} = useConditionsOptionsByType(filter);\n\n const _handleOnSelect = (node: ITreeNodeWithRecord, selected: boolean) => {\n if (selected) {\n setSelectedNodes(prev => [...prev, node]);\n } else {\n setSelectedNodes(prev => prev.filter(selectedValue => selectedValue.id !== node.id));\n }\n };\n\n const _onConditionChanged: ComponentProps<typeof KitSelect>['onChange'] = condition => {\n onFilterChange({...filter, condition});\n };\n\n useEffect(() => {\n if (filter.value == null) {\n setSelectedNodes([]);\n }\n }, [filter]);\n\n const _getRecursiveChildrenRecord = (nodes: ITreeNodeWithRecord[]): IRecordIdentity[] => {\n const records: IRecordIdentity[] = [];\n const collectRecordIdsRecursively = (nodeList: ITreeNodeWithRecord[]) => {\n for (const node of nodeList) {\n if (node.id === filter.attribute.linkedTree?.id) {\n continue;\n }\n if (node.record) {\n records.push(node.record);\n }\n if (node.children && node.children.length > 0) {\n collectRecordIdsRecursively(node.children);\n }\n }\n };\n collectRecordIdsRecursively(nodes);\n // Delete duplicates\n return Array.from(new Set(records));\n };\n const _getRecursiveFieldsFromLibraries = (nodes: ITreeNodeWithRecord[]): string[] =>\n nodes\n .filter(node => !!node.record?.whoAmI?.library?.id)\n .map(node => `${filter.attribute.id}.${node.record?.whoAmI?.library?.id}.id`);\n\n const _handleOnCheck = (selection: ITreeNodeWithRecord[]) => {\n setSelectedNodes(selection.filter(node => !node?.disabled));\n\n const records = _getRecursiveChildrenRecord(selection);\n const fields = _getRecursiveFieldsFromLibraries(selection);\n\n onFilterChange({\n ...filter,\n value: records.map(record => record.id),\n formattedValue: records.map(record => record.whoAmI.label).filter(Boolean),\n condition: filter.condition ?? RecordFilterCondition.EQUAL,\n field: fields,\n });\n };\n\n const showSearch =\n filter.condition &&\n ![AttributeConditionFilter.IS_EMPTY, AttributeConditionFilter.IS_NOT_EMPTY].includes(filter.condition);\n\n return (\n <DivStyled>\n <KitSelect\n options={availableConditionsOptions}\n onChange={_onConditionChanged}\n value={filter.condition}\n getPopupContainer={() => selectDropDownRef?.current ?? document.body}\n aria-label={String(t('explorer.filter-link-condition'))}\n />\n {showSearch && (\n <SelectTreeNode\n treeId={filter.attribute.linkedTree?.id ?? ''}\n selectedNodes={selectedNodes.map(node => node.id)}\n onSelect={_handleOnSelect}\n onCheck={_handleOnCheck}\n multiple\n canSelectRoot\n checkStrictly={false}\n checkable\n loadRecursively={true}\n noPagination={true}\n />\n )}\n </DivStyled>\n );\n};\n"]}
1
+ {"version":3,"file":"TreeAttributeDropDown.js","sourceRoot":"","sources":["../../../../../src/components/Filters/filter-items/filter-type/TreeAttributeDropDown.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 {KitSelect} from 'aristid-ds';\nimport {useSharedTranslation} from '_ui/hooks/useSharedTranslation';\nimport {AttributeConditionFilter, type IRecordIdentity, type ITreeNodeWithRecord} from '_ui/types';\nimport {RecordFilterCondition} from '_ui/_gqlTypes';\nimport {type IFilterChildrenTreeDropDownProps} from './_types';\nimport {SelectTreeNode} from '_ui/components/SelectTreeNode';\nimport styled from 'styled-components';\nimport {useConditionsOptionsByType} from './useConditionOptionsByType';\n\nconst DivStyled = styled.div`\n max-height: 30rem;\n overflow: auto;\n`;\n\nexport const TreeAttributeDropDown: FunctionComponent<IFilterChildrenTreeDropDownProps> = ({\n filter,\n onFilterChange,\n selectDropDownRef,\n}) => {\n const {t} = useSharedTranslation();\n\n const [selectedNodesIds, setSelectedNodesIds] = useState<string[]>((filter.nodes ?? []).map(node => node.nodeId));\n\n const {conditionOptionsByType: availableConditionsOptions} = useConditionsOptionsByType(filter);\n\n const _handleOnSelect = (node: ITreeNodeWithRecord, selected: boolean) => {\n if (selected) {\n setSelectedNodesIds(prev => [...prev, node.id]);\n } else {\n setSelectedNodesIds(prev => prev.filter(selectedValue => selectedValue !== node.id));\n }\n };\n\n const _onConditionChanged: ComponentProps<typeof KitSelect>['onChange'] = condition => {\n onFilterChange({...filter, condition});\n };\n\n useEffect(() => {\n if (filter.value == null) {\n setSelectedNodesIds([]);\n }\n }, [filter]);\n\n const _getRecursiveChildrenRecord = (nodes: ITreeNodeWithRecord[]): IRecordIdentity[] => {\n const records: IRecordIdentity[] = [];\n const collectRecordIdsRecursively = (nodeList: ITreeNodeWithRecord[]) => {\n for (const node of nodeList) {\n if (node.id === filter.attribute.linkedTree?.id) {\n continue;\n }\n if (node.record) {\n records.push(node.record);\n }\n if (node.children && node.children.length > 0) {\n collectRecordIdsRecursively(node.children);\n }\n }\n };\n collectRecordIdsRecursively(nodes);\n // Delete duplicates\n return Array.from(new Set(records));\n };\n const _getRecursiveFieldsFromLibraries = (nodes: ITreeNodeWithRecord[]): string[] =>\n nodes\n .filter(node => !!node.record?.whoAmI?.library?.id)\n .map(node => `${filter.attribute.id}.${node.record?.whoAmI?.library?.id}.id`);\n\n const _handleOnCheck = (selection: ITreeNodeWithRecord[]) => {\n setSelectedNodesIds(selection.filter(node => !node?.disabled).map(node => node.id));\n\n const records = _getRecursiveChildrenRecord(selection);\n const fields = _getRecursiveFieldsFromLibraries(selection);\n\n onFilterChange({\n ...filter,\n value: records.map(record => record.id),\n formattedValue: records.map(record => record.whoAmI.label).filter(Boolean),\n condition: filter.condition ?? RecordFilterCondition.EQUAL,\n field: fields,\n });\n };\n\n const showSearch =\n filter.condition &&\n ![AttributeConditionFilter.IS_EMPTY, AttributeConditionFilter.IS_NOT_EMPTY].includes(filter.condition);\n\n return (\n <DivStyled>\n <KitSelect\n options={availableConditionsOptions}\n onChange={_onConditionChanged}\n value={filter.condition}\n getPopupContainer={() => selectDropDownRef?.current ?? document.body}\n aria-label={String(t('explorer.filter-link-condition'))}\n />\n {showSearch && (\n <SelectTreeNode\n treeId={filter.attribute.linkedTree?.id ?? ''}\n selectedNodes={selectedNodesIds}\n onSelect={_handleOnSelect}\n onCheck={_handleOnCheck}\n multiple\n canSelectRoot\n checkStrictly={false}\n checkable\n loadRecursively={true}\n noPagination={true}\n />\n )}\n </DivStyled>\n );\n};\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/Filters/index.tsx"],"names":[],"mappings":"AAAA,oFAAoF;AACpF,sCAAsC;AACtC,sEAAsE;AACtE,OAAO,EAAC,UAAU,EAAC,MAAM,cAAc,CAAC;AACxC,OAAO,EAAC,iBAAiB,EAAC,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAC,mBAAmB,EAAC,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAC,eAAe,EAAC,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAC,wBAAwB,EAAC,MAAM,4BAA4B,CAAC;AACpE,OAAO,EAAC,iBAAiB,EAAC,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAC,gBAAgB,EAAC,MAAM,iCAAiC,CAAC;AACjE,cAAc,UAAU,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\nexport {useFilters} from './useFilters';\nexport {useFiltersContext} from './useFiltersContext';\nexport {useTransformFilters} from './useTransformFilters';\nexport {FiltersProvider} from './FiltersProvider';\nexport {prepareFiltersForRequest} from './prepareFiltersForRequest';\nexport {useFiltersReducer} from './context/useFiltersReducer';\nexport {CommonFilterItem} from './filter-items/CommonFilterItem';\nexport * from './_types';\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/Filters/index.ts"],"names":[],"mappings":"AAAA,oFAAoF;AACpF,sCAAsC;AACtC,sEAAsE;AACtE,OAAO,EAAC,UAAU,EAAC,MAAM,cAAc,CAAC;AACxC,OAAO,EAAC,iBAAiB,EAAC,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAC,mBAAmB,EAAC,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAC,eAAe,EAAC,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAC,wBAAwB,EAAC,MAAM,4BAA4B,CAAC;AACpE,OAAO,EAAC,iBAAiB,EAAC,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAC,gBAAgB,EAAC,MAAM,iCAAiC,CAAC;AACjE,cAAc,UAAU,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\nexport {useFilters} from './useFilters';\nexport {useFiltersContext} from './useFiltersContext';\nexport {useTransformFilters} from './useTransformFilters';\nexport {FiltersProvider} from './FiltersProvider';\nexport {prepareFiltersForRequest} from './prepareFiltersForRequest';\nexport {useFiltersReducer} from './context/useFiltersReducer';\nexport {CommonFilterItem} from './filter-items/CommonFilterItem';\nexport * from './_types';\n"]}
@@ -81,11 +81,20 @@ const _generateConditionsFromMultipleValues = (filter) => {
81
81
  if (idx === 0 && filter.value && filter.value.length > 1) {
82
82
  filtersWithOperators.push({ operator: RecordFilterOperator.OPEN_BRACKET });
83
83
  }
84
- filtersWithOperators.push({
85
- value: recordId,
86
- condition: filter.condition,
87
- field: Array.isArray(filter.field) ? filter.field[idx] : filter.field,
88
- });
84
+ if (isUIFilterTree(filter) && filter.nodes && filter.nodes.length > 0) {
85
+ filtersWithOperators.push({
86
+ value: recordId,
87
+ condition: filter.condition,
88
+ field: `${filter.attribute.id}.${filter.nodes[idx].libraryId}.id`,
89
+ });
90
+ }
91
+ else {
92
+ filtersWithOperators.push({
93
+ value: recordId,
94
+ condition: filter.condition,
95
+ field: Array.isArray(filter.field) ? filter.field[idx] : filter.field,
96
+ });
97
+ }
89
98
  if (filter.value && idx < filter.value.length - 1) {
90
99
  filtersWithOperators.push({
91
100
  operator: filter.condition === RecordFilterCondition.NOT_EQUAL
@@ -1 +1 @@
1
- {"version":3,"file":"prepareFiltersForRequest.js","sourceRoot":"","sources":["../../../src/components/Filters/prepareFiltersForRequest.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 dayjs from 'dayjs';\nimport {AttributeFormat, RecordFilterCondition, type RecordFilterInput, RecordFilterOperator} from '_ui/_gqlTypes';\nimport {interleaveElement} from '_ui/_utils/interleaveElement';\nimport {AttributeConditionFilter} from '_ui/types';\nimport {\n type UIFilter,\n type IUIFilterStandard,\n type IUIFilterTree,\n isUIFilterStandard,\n isUIFilterThrough,\n isUIFilterTree,\n isUIFilterValueList,\n type IUIFilterValueList,\n type FiltersOperator,\n isUIFilterLinkWithValueList,\n} from './_types';\nimport {nullValueConditions} from './conditionsHelper';\n\nexport const dateValuesSeparator = '\\n';\n\nconst _getDateAtNoon = (date: number): string => dayjs.unix(Number(date)).add(12, 'hour').unix().toString();\n\nconst _getDateRequestFilters = ({field, condition, value}: IUIFilterStandard): RecordFilterInput[] => {\n switch (condition) {\n case RecordFilterCondition.BETWEEN:\n const [from, to] = value!.split(dateValuesSeparator);\n return [\n {\n field,\n condition,\n value: JSON.stringify({\n from,\n to,\n }),\n },\n ];\n case RecordFilterCondition.NOT_EQUAL:\n return [\n {\n field,\n condition: RecordFilterCondition.NOT_EQUAL,\n value: _getDateAtNoon(Number(value)),\n },\n ];\n case RecordFilterCondition.EQUAL:\n return [\n {\n field,\n condition,\n value: _getDateAtNoon(Number(value)),\n },\n ];\n default:\n return [\n {\n field,\n condition,\n value,\n },\n ];\n }\n};\n\nconst _getBooleanRequestFilters = (filter: IUIFilterStandard): RecordFilterInput[] => {\n if (filter.value === 'false') {\n return [\n {\n field: filter.field,\n condition: AttributeConditionFilter.NOT_EQUAL,\n value: 'true',\n },\n ];\n }\n\n return [{field: filter.field, condition: filter.condition, value: filter.value}];\n};\n\nconst _addValuesListForFilters = (valuesList: string[]): RecordFilterInput[] => [\n {operator: RecordFilterOperator.OPEN_BRACKET},\n ...(interleaveElement(\n {operator: RecordFilterOperator.OR},\n valuesList.map(value => [\n {\n field: 'id',\n condition: AttributeConditionFilter.EQUAL,\n value,\n },\n ]),\n ) as RecordFilterInput[]),\n {operator: RecordFilterOperator.CLOSE_BRACKET},\n];\n\nconst _generateConditionsFromMultipleValues = (filter: IUIFilterTree | IUIFilterValueList): RecordFilterInput[] => {\n if (!filter.value || filter.value.length === 0) {\n return [];\n }\n const filtersWithOperators: RecordFilterInput[] = [];\n filter.value.forEach((recordId, idx) => {\n if (idx === 0 && filter.value && filter.value.length > 1) {\n filtersWithOperators.push({operator: RecordFilterOperator.OPEN_BRACKET});\n }\n filtersWithOperators.push({\n value: recordId,\n condition: filter.condition,\n field: Array.isArray(filter.field) ? filter.field[idx] : filter.field,\n });\n if (filter.value && idx < filter.value.length - 1) {\n filtersWithOperators.push({\n operator:\n filter.condition === RecordFilterCondition.NOT_EQUAL\n ? RecordFilterOperator.AND\n : RecordFilterOperator.OR,\n });\n }\n if (filter.value && filter.value.length > 1 && idx >= filter.value.length - 1) {\n filtersWithOperators.push({operator: RecordFilterOperator.CLOSE_BRACKET});\n }\n });\n return filtersWithOperators;\n};\n\nexport const prepareFiltersForRequest = (\n filters: UIFilter[],\n filtersOperator?: FiltersOperator,\n valuesList?: string[],\n): RecordFilterInput[] => {\n const interleaveFilter = interleaveElement(\n {operator: filtersOperator === 'OR' ? RecordFilterOperator.OR : RecordFilterOperator.AND},\n filters\n .filter(filter => {\n if (isUIFilterThrough(filter)) {\n return (\n filter.subField &&\n filter.subCondition &&\n (filter.value !== null || nullValueConditions.includes(filter.subCondition))\n );\n }\n\n if (isUIFilterValueList(filter)) {\n return (\n (!!filter.condition && filter.value?.length) ||\n (filter.condition && nullValueConditions.includes(filter.condition))\n );\n }\n\n return filter.value !== null || (filter.condition && nullValueConditions.includes(filter.condition));\n })\n .map(filter => {\n if (isUIFilterTree(filter)) {\n return filter;\n }\n const condition =\n filter.condition === AttributeConditionFilter.THROUGH ? filter.subCondition : filter.condition;\n let field =\n filter.condition === AttributeConditionFilter.THROUGH\n ? `${filter.field}.${filter.subField}`\n : filter.field;\n\n // When a link attribute has a values list, we must filter on the linked record id\n if (isUIFilterLinkWithValueList(filter) && typeof field === 'string' && !field.endsWith('.id')) {\n field = `${field}.id`;\n }\n\n return {...filter, condition, field};\n })\n .map(filter => {\n //@ts-ignore typscript does not recognize filter as a UIFilter\n if (isUIFilterValueList(filter) || isUIFilterTree(filter)) {\n if (filter.condition && nullValueConditions.includes(filter.condition)) {\n return [\n {\n field: Array.isArray(filter.field) ? filter.field[0] : filter.field,\n condition: filter.condition,\n value: null,\n },\n ];\n }\n return _generateConditionsFromMultipleValues(filter as IUIFilterTree | IUIFilterValueList);\n }\n\n if (isUIFilterStandard(filter as UIFilter)) {\n switch (filter.attribute.format) {\n case AttributeFormat.date:\n return _getDateRequestFilters(filter as IUIFilterStandard);\n case AttributeFormat.boolean:\n return _getBooleanRequestFilters(filter as IUIFilterStandard);\n default:\n break;\n }\n }\n return [\n {\n field: filter.field as string,\n condition: filter.condition,\n value: filter.value,\n },\n ];\n }),\n );\n\n return [\n ...interleaveFilter,\n ...(interleaveFilter.length > 0 && valuesList ? [{operator: RecordFilterOperator.AND}] : []),\n ...(valuesList ? _addValuesListForFilters(valuesList) : []),\n ];\n};\n"]}
1
+ {"version":3,"file":"prepareFiltersForRequest.js","sourceRoot":"","sources":["../../../src/components/Filters/prepareFiltersForRequest.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 dayjs from 'dayjs';\nimport {AttributeFormat, RecordFilterCondition, type RecordFilterInput, RecordFilterOperator} from '_ui/_gqlTypes';\nimport {interleaveElement} from '_ui/_utils/interleaveElement';\nimport {AttributeConditionFilter} from '_ui/types';\nimport {\n type UIFilter,\n type IUIFilterStandard,\n type IUIFilterTree,\n isUIFilterStandard,\n isUIFilterThrough,\n isUIFilterTree,\n isUIFilterValueList,\n type IUIFilterValueList,\n type FiltersOperator,\n isUIFilterLinkWithValueList,\n} from './_types';\nimport {nullValueConditions} from './conditionsHelper';\n\nexport const dateValuesSeparator = '\\n';\n\nconst _getDateAtNoon = (date: number): string => dayjs.unix(Number(date)).add(12, 'hour').unix().toString();\n\nconst _getDateRequestFilters = ({field, condition, value}: IUIFilterStandard): RecordFilterInput[] => {\n switch (condition) {\n case RecordFilterCondition.BETWEEN:\n const [from, to] = value!.split(dateValuesSeparator);\n return [\n {\n field,\n condition,\n value: JSON.stringify({\n from,\n to,\n }),\n },\n ];\n case RecordFilterCondition.NOT_EQUAL:\n return [\n {\n field,\n condition: RecordFilterCondition.NOT_EQUAL,\n value: _getDateAtNoon(Number(value)),\n },\n ];\n case RecordFilterCondition.EQUAL:\n return [\n {\n field,\n condition,\n value: _getDateAtNoon(Number(value)),\n },\n ];\n default:\n return [\n {\n field,\n condition,\n value,\n },\n ];\n }\n};\n\nconst _getBooleanRequestFilters = (filter: IUIFilterStandard): RecordFilterInput[] => {\n if (filter.value === 'false') {\n return [\n {\n field: filter.field,\n condition: AttributeConditionFilter.NOT_EQUAL,\n value: 'true',\n },\n ];\n }\n\n return [{field: filter.field, condition: filter.condition, value: filter.value}];\n};\n\nconst _addValuesListForFilters = (valuesList: string[]): RecordFilterInput[] => [\n {operator: RecordFilterOperator.OPEN_BRACKET},\n ...(interleaveElement(\n {operator: RecordFilterOperator.OR},\n valuesList.map(value => [\n {\n field: 'id',\n condition: AttributeConditionFilter.EQUAL,\n value,\n },\n ]),\n ) as RecordFilterInput[]),\n {operator: RecordFilterOperator.CLOSE_BRACKET},\n];\n\nconst _generateConditionsFromMultipleValues = (filter: IUIFilterTree | IUIFilterValueList): RecordFilterInput[] => {\n if (!filter.value || filter.value.length === 0) {\n return [];\n }\n const filtersWithOperators: RecordFilterInput[] = [];\n filter.value.forEach((recordId, idx) => {\n if (idx === 0 && filter.value && filter.value.length > 1) {\n filtersWithOperators.push({operator: RecordFilterOperator.OPEN_BRACKET});\n }\n if (isUIFilterTree(filter) && filter.nodes && filter.nodes.length > 0) {\n filtersWithOperators.push({\n value: recordId,\n condition: filter.condition,\n field: `${filter.attribute.id}.${filter.nodes[idx].libraryId}.id`,\n });\n } else {\n filtersWithOperators.push({\n value: recordId,\n condition: filter.condition,\n field: Array.isArray(filter.field) ? filter.field[idx] : filter.field,\n });\n }\n if (filter.value && idx < filter.value.length - 1) {\n filtersWithOperators.push({\n operator:\n filter.condition === RecordFilterCondition.NOT_EQUAL\n ? RecordFilterOperator.AND\n : RecordFilterOperator.OR,\n });\n }\n if (filter.value && filter.value.length > 1 && idx >= filter.value.length - 1) {\n filtersWithOperators.push({operator: RecordFilterOperator.CLOSE_BRACKET});\n }\n });\n return filtersWithOperators;\n};\n\nexport const prepareFiltersForRequest = (\n filters: UIFilter[],\n filtersOperator?: FiltersOperator,\n valuesList?: string[],\n): RecordFilterInput[] => {\n const interleaveFilter = interleaveElement(\n {operator: filtersOperator === 'OR' ? RecordFilterOperator.OR : RecordFilterOperator.AND},\n filters\n .filter(filter => {\n if (isUIFilterThrough(filter)) {\n return (\n filter.subField &&\n filter.subCondition &&\n (filter.value !== null || nullValueConditions.includes(filter.subCondition))\n );\n }\n\n if (isUIFilterValueList(filter)) {\n return (\n (!!filter.condition && filter.value?.length) ||\n (filter.condition && nullValueConditions.includes(filter.condition))\n );\n }\n\n return filter.value !== null || (filter.condition && nullValueConditions.includes(filter.condition));\n })\n .map(filter => {\n if (isUIFilterTree(filter)) {\n return filter;\n }\n const condition =\n filter.condition === AttributeConditionFilter.THROUGH ? filter.subCondition : filter.condition;\n let field =\n filter.condition === AttributeConditionFilter.THROUGH\n ? `${filter.field}.${filter.subField}`\n : filter.field;\n\n // When a link attribute has a values list, we must filter on the linked record id\n if (isUIFilterLinkWithValueList(filter) && typeof field === 'string' && !field.endsWith('.id')) {\n field = `${field}.id`;\n }\n\n return {...filter, condition, field};\n })\n .map(filter => {\n //@ts-ignore typscript does not recognize filter as a UIFilter\n if (isUIFilterValueList(filter) || isUIFilterTree(filter)) {\n if (filter.condition && nullValueConditions.includes(filter.condition)) {\n return [\n {\n field: Array.isArray(filter.field) ? filter.field[0] : filter.field,\n condition: filter.condition,\n value: null,\n },\n ];\n }\n return _generateConditionsFromMultipleValues(filter as IUIFilterTree | IUIFilterValueList);\n }\n\n if (isUIFilterStandard(filter as UIFilter)) {\n switch (filter.attribute.format) {\n case AttributeFormat.date:\n return _getDateRequestFilters(filter as IUIFilterStandard);\n case AttributeFormat.boolean:\n return _getBooleanRequestFilters(filter as IUIFilterStandard);\n default:\n break;\n }\n }\n return [\n {\n field: filter.field as string,\n condition: filter.condition,\n value: filter.value,\n },\n ];\n }),\n );\n\n return [\n ...interleaveFilter,\n ...(interleaveFilter.length > 0 && valuesList ? [{operator: RecordFilterOperator.AND}] : []),\n ...(valuesList ? _addValuesListForFilters(valuesList) : []),\n ];\n};\n"]}
@@ -1714,6 +1714,10 @@ export declare const useFilters: (pinFilters?: boolean) => {
1714
1714
  condition: import("../../_gqlTypes").RecordFilterCondition | null;
1715
1715
  value: string[] | null;
1716
1716
  formattedValue?: string[] | null;
1717
+ nodes?: null | Array<{
1718
+ nodeId: string;
1719
+ libraryId: string;
1720
+ }>;
1717
1721
  field: string[];
1718
1722
  id: string;
1719
1723
  hidden?: boolean | undefined;
@@ -1,5 +1,7 @@
1
1
  import { type ExplorerAttributesQuery, type ExplorerLinkAttributeQuery, type GetViewsListQuery, type LinkAttributeDetailsFragment } from '../../_gqlTypes';
2
2
  import { type UIFilter, type ValidFilter } from './_types';
3
+ import { type TFunction } from 'i18next';
4
+ import { type ITreeFilters } from './context/useGetTreeFilters';
3
5
  export declare const isLinkAttributeDetails: (linkAttributeData: NonNullable<ExplorerLinkAttributeQuery["attributes"]>["list"][number]) => linkAttributeData is LinkAttributeDetailsFragment & {
4
6
  id: string;
5
7
  multiple_values: boolean;
@@ -12,8 +14,10 @@ export type ValidFiltersArgument = GetViewsListQuery['views']['list'][number]['f
12
14
  export type AttributesById = Record<string, NonNullable<ExplorerAttributesQuery['attributes']>['list'][number]>;
13
15
  export declare const useTransformFilters: () => {
14
16
  toValidFilters: (filters: ValidFiltersArgument) => ValidFilter[];
15
- toUIFilters: ({ filters, attributesDataById, }: {
17
+ toUIFilters: ({ filters, treeFilters, attributesDataById, t, }: {
16
18
  filters: ValidFilter[];
19
+ treeFilters: ITreeFilters;
17
20
  attributesDataById: AttributesById;
21
+ t: TFunction;
18
22
  }) => UIFilter[];
19
23
  };
@@ -1,12 +1,13 @@
1
1
  // Copyright LEAV Solutions 2017 until 2023/11/05, Copyright Aristid from 2023/11/06
2
2
  // This file is released under LGPL V3
3
3
  // License text available at https://www.gnu.org/licenses/lgpl-3.0.txt
4
- import { AttributeType, RecordFilterCondition, } from '../../_gqlTypes';
4
+ import { AttributeFormat, AttributeType, RecordFilterCondition, } from '../../_gqlTypes';
5
5
  import { ThroughConditionFilter } from '../../types';
6
6
  import { isLinkAttribute, isStandardAttribute, isTreeAttribute } from '../../_utils/attributeType';
7
7
  import { localizedTranslation } from '@leav/utils';
8
8
  import { useLang } from '../../hooks';
9
9
  import { valueListTextConditions } from './filter-items/filter-type/useConditionOptionsByType';
10
+ import dayjs from 'dayjs';
10
11
  const _isValidFieldFilter = (filter) => !!filter.field;
11
12
  const _isValidFieldFilterThrough = (filter) => filter.condition === ThroughConditionFilter.THROUGH && !!filter.subCondition && !!filter.subField;
12
13
  const _isValidFieldFilterStandardValuesList = (filter, attribute) => valueListTextConditions.includes(filter.condition) &&
@@ -42,7 +43,7 @@ export const useTransformFilters = () => {
42
43
  }
43
44
  return acc;
44
45
  }, []);
45
- const toUIFilters = ({ filters, attributesDataById, }) => (filters ?? []).reduce((acc, filter) => {
46
+ const toUIFilters = ({ filters, treeFilters, attributesDataById, t, }) => (filters ?? []).reduce((acc, filter) => {
46
47
  if (!attributesDataById[filter.field]) {
47
48
  console.warn(`Attribute ${filter.field} from user view not found in database.`);
48
49
  return acc;
@@ -72,9 +73,17 @@ export const useTransformFilters = () => {
72
73
  acc.push(newFilter);
73
74
  }
74
75
  else {
76
+ let formattedValue;
77
+ if (attributeData.format === AttributeFormat.boolean && filter.value) {
78
+ formattedValue = filter.value === 'true' ? t('explorer.true') : t('explorer.false');
79
+ }
80
+ if (attributeData.format === AttributeFormat.date && filter.value) {
81
+ formattedValue = dayjs(filter.value).format('YYYY-MM-DD');
82
+ }
75
83
  const newFilter = {
76
84
  field: filter.field,
77
85
  value: filter.value ?? null,
86
+ formattedValue,
78
87
  hidden: filter.hidden ?? false,
79
88
  id: window.crypto.randomUUID(),
80
89
  condition: filter.condition ?? null,
@@ -140,7 +149,21 @@ export const useTransformFilters = () => {
140
149
  const newFilter = {
141
150
  field: [filter.field],
142
151
  // TODO : save filter values as string[] when tree filter and handle fields with libraries
143
- value: filter.value ? [filter.value] : null,
152
+ value: filter.value
153
+ ? [filter.value]
154
+ : treeFilters[filter.field]
155
+ ? treeFilters[filter.field].map(tree => tree.value)
156
+ : null,
157
+ formattedValue: filter.value
158
+ ? [filter.value]
159
+ : treeFilters[filter.field]
160
+ ? treeFilters[filter.field].map(tree => tree.label)
161
+ : undefined,
162
+ nodes: filter.value
163
+ ? undefined
164
+ : treeFilters[filter.field]
165
+ ? treeFilters[filter.field].map(tree => ({ libraryId: tree.libraryId, nodeId: tree.nodeId }))
166
+ : undefined,
144
167
  hidden: filter.hidden ?? false,
145
168
  id: window.crypto.randomUUID(),
146
169
  attribute: {