@leav/ui 1.5.3 → 1.6.0-720c24f0

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 (29) hide show
  1. package/dist/components/Explorer/TableNameCell.js +6 -1
  2. package/dist/components/Explorer/TableNameCell.js.map +1 -1
  3. package/dist/components/Explorer/_queries/useExplorerData.js +19 -7
  4. package/dist/components/Explorer/_queries/useExplorerData.js.map +1 -1
  5. package/dist/components/Explorer/_types.d.ts +1 -0
  6. package/dist/components/Explorer/_types.js.map +1 -1
  7. package/dist/components/Explorer/actions-mass/useEditAttributeMassAction.js +5 -5
  8. package/dist/components/Explorer/actions-mass/useEditAttributeMassAction.js.map +1 -1
  9. package/dist/components/Explorer/actions-mass/useExportMassAction.js +5 -5
  10. package/dist/components/Explorer/actions-mass/useExportMassAction.js.map +1 -1
  11. package/dist/components/Explorer/list-saved-views/SavedViews.js +8 -6
  12. package/dist/components/Explorer/list-saved-views/SavedViews.js.map +1 -1
  13. package/dist/components/Filters/context/useGetTreeFilters.js +3 -1
  14. package/dist/components/Filters/context/useGetTreeFilters.js.map +1 -1
  15. package/dist/components/ImportModal/ImportModalSelectFileStep/ImportModalSelectFileStep.js +8 -4
  16. package/dist/components/ImportModal/ImportModalSelectFileStep/ImportModalSelectFileStep.js.map +1 -1
  17. package/dist/components/LibraryItemsList/LibraryItemsListContent/LibraryItemsListContent.js +5 -3
  18. package/dist/components/LibraryItemsList/LibraryItemsListContent/LibraryItemsListContent.js.map +1 -1
  19. package/dist/components/Notifications/hooks/useNotificationSubscription.js +8 -7
  20. package/dist/components/Notifications/hooks/useNotificationSubscription.js.map +1 -1
  21. package/dist/components/TriggerPreviewsGenerationModal/TriggerPreviewsGenerationModal.js +14 -4
  22. package/dist/components/TriggerPreviewsGenerationModal/TriggerPreviewsGenerationModal.js.map +1 -1
  23. package/dist/constants.d.ts +4 -1
  24. package/dist/constants.js +4 -1
  25. package/dist/constants.js.map +1 -1
  26. package/dist/hooks/useIFrameMessenger/schema.d.ts +2 -0
  27. package/dist/hooks/useIFrameMessenger/schema.js +1 -0
  28. package/dist/hooks/useIFrameMessenger/schema.js.map +1 -1
  29. package/package.json +16 -16
@@ -45,7 +45,12 @@ export const TableNameCell = ({ item, itemActions }) => {
45
45
  event.stopPropagation();
46
46
  callback();
47
47
  };
48
- return (_jsxs(StyledTableNameCellContainer, { ref: containerRef, children: [_jsx(StyledIdCard, { children: _jsx(IdCard, { item: item.whoAmI }) }), _jsxs(StyledActionsList, { className: "actions-list", children: [itemsActionsWithCallbackToDisplay.map(({ label, icon, isDanger, callback, disabled }, actionIndex) => (_jsx(KitTooltip, { title: resolveItemActionProp(item, label), mouseEnterDelay: TOOLTIP_DEFAULT_DELAY_IN_SECONDS, children: _jsx(KitButton, { size: "m", "aria-label": resolveItemActionProp(item, label), icon: resolveItemActionProp(item, icon), onClick: event => _handleButtonClick(event, callback), danger: resolveItemActionProp(item, isDanger), disabled: resolveItemActionProp(item, disabled) }) }, actionIndex))), isMoreThanThreeActions && (_jsx(KitDropDown, { placement: "bottomRight", getPopupContainer: () => containerRef.current || document.body, destroyPopupOnHide: true, menu: {
48
+ return (_jsxs(StyledTableNameCellContainer, { ref: containerRef, children: [_jsx(StyledIdCard, { children: _jsx(IdCard, { item: item.whoAmI }) }), _jsxs(StyledActionsList, { className: "actions-list", children: [itemsActionsWithCallbackToDisplay.map(({ label, icon, isDanger, callback, disabled, useItemDeletePermission }, actionIndex) => {
49
+ const disabledButton = useItemDeletePermission
50
+ ? !item.canDelete
51
+ : resolveItemActionProp(item, disabled);
52
+ return (_jsx(KitTooltip, { title: resolveItemActionProp(item, label), mouseEnterDelay: TOOLTIP_DEFAULT_DELAY_IN_SECONDS, children: _jsx(KitButton, { size: "m", "aria-label": resolveItemActionProp(item, label), icon: resolveItemActionProp(item, icon), onClick: event => _handleButtonClick(event, callback), danger: resolveItemActionProp(item, isDanger), disabled: disabledButton }) }, actionIndex));
53
+ }), isMoreThanThreeActions && (_jsx(KitDropDown, { placement: "bottomRight", getPopupContainer: () => containerRef.current || document.body, destroyPopupOnHide: true, menu: {
49
54
  items: itemActionsWithCallback
50
55
  .slice(2)
51
56
  .map(({ callback, icon, label, isDanger, disabled }) => ({
@@ -1 +1 @@
1
- {"version":3,"file":"TableNameCell.js","sourceRoot":"","sources":["../../../src/components/Explorer/TableNameCell.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 {IdCard} from './IdCard';\nimport {type IItemAction, type IItemData} from './_types';\nimport {cloneElement, type ReactElement, useRef} from 'react';\nimport {KitButton, KitDropDown, KitTooltip} from 'aristid-ds';\nimport styled from 'styled-components';\nimport {FaEllipsisH} from 'react-icons/fa';\nimport {useSharedTranslation} from '_ui/hooks/useSharedTranslation';\nimport {TOOLTIP_DEFAULT_DELAY_IN_SECONDS} from '_ui/constants';\n\nconst StyledTableNameCellContainer = styled.div`\n position: relative;\n display: inline-flex;\n align-items: center;\n width: 100%;\n`;\n\nconst StyledActionsList = styled.div`\n /* Action are displayed when the user hover the table row (CSS in DataView.tsx) */\n display: none;\n gap: calc(var(--general-spacing-xxs) * 1px);\n transition:\n display 0.2s ease-in-out,\n align-items: center;\n justify-content: center;\n margin-left: calc(var(--general-spacing-xs) * 1px);\n`;\n\nconst StyledIdCard = styled.div`\n flex: 1;\n`;\n\ntype ResolvedItemActionProp<T> = T extends (item: IItemData) => infer R ? R : T;\n\nconst resolveItemActionProp = <T extends IItemAction[keyof IItemAction]>(\n itemData: IItemData,\n itemActionProp: T,\n): ResolvedItemActionProp<T> =>\n (typeof itemActionProp === 'function' ? itemActionProp(itemData) : itemActionProp) as ResolvedItemActionProp<T>;\n\ninterface ITableNameCellProps {\n item: IItemData;\n itemActions: IItemAction[];\n}\n\nexport const TableNameCell = ({item, itemActions}: ITableNameCellProps) => {\n const {t} = useSharedTranslation();\n const containerRef = useRef<HTMLDivElement>(null);\n\n const itemActionsWithCallback = itemActions.map(action => ({\n ...action,\n callback: () => action.callback(item),\n }));\n\n const isMoreThanThreeActions = itemActionsWithCallback.length > 3;\n\n const itemsActionsWithCallbackToDisplay = isMoreThanThreeActions\n ? itemActionsWithCallback.slice(0, 2)\n : itemActionsWithCallback;\n\n const _handleButtonClick = (event: MouseEvent, callback: () => void) => {\n // Stop event propagation to avoid the row click event to be triggered\n event.stopPropagation();\n callback();\n };\n\n return (\n <StyledTableNameCellContainer ref={containerRef}>\n <StyledIdCard>\n <IdCard item={item.whoAmI} />\n </StyledIdCard>\n <StyledActionsList className=\"actions-list\">\n {itemsActionsWithCallbackToDisplay.map(({label, icon, isDanger, callback, disabled}, actionIndex) => (\n <KitTooltip\n key={actionIndex}\n title={resolveItemActionProp(item, label)}\n mouseEnterDelay={TOOLTIP_DEFAULT_DELAY_IN_SECONDS}\n >\n <KitButton\n size=\"m\"\n aria-label={resolveItemActionProp(item, label)}\n icon={resolveItemActionProp(item, icon)}\n onClick={event => _handleButtonClick(event, callback)}\n danger={resolveItemActionProp(item, isDanger)}\n disabled={resolveItemActionProp(item, disabled)}\n />\n </KitTooltip>\n ))}\n {isMoreThanThreeActions && (\n <KitDropDown\n placement=\"bottomRight\"\n getPopupContainer={() => containerRef.current || document.body}\n destroyPopupOnHide={true}\n menu={{\n items: itemActionsWithCallback\n .slice(2)\n .map(({callback, icon, label, isDanger, disabled}) => ({\n key: resolveItemActionProp(item, label),\n danger: resolveItemActionProp(item, isDanger),\n disabled: resolveItemActionProp(item, disabled),\n label: resolveItemActionProp(item, label),\n icon: icon\n ? cloneElement(resolveItemActionProp(item, icon), {\n size: '2em',\n })\n : null, // TODO: find better tuning\n onClick: callback,\n })),\n }}\n >\n <KitTooltip\n title={t('explorer.more-actions')}\n mouseEnterDelay={TOOLTIP_DEFAULT_DELAY_IN_SECONDS}\n >\n <KitButton\n size=\"m\"\n aria-label={t('explorer.more-actions') ?? undefined}\n icon={<FaEllipsisH />}\n onClick={event => event.stopPropagation()}\n />\n </KitTooltip>\n </KitDropDown>\n )}\n </StyledActionsList>\n </StyledTableNameCellContainer>\n );\n};\n"]}
1
+ {"version":3,"file":"TableNameCell.js","sourceRoot":"","sources":["../../../src/components/Explorer/TableNameCell.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 {IdCard} from './IdCard';\nimport {type IItemAction, type IItemData} from './_types';\nimport {cloneElement, type ReactElement, useRef} from 'react';\nimport {KitButton, KitDropDown, KitTooltip} from 'aristid-ds';\nimport styled from 'styled-components';\nimport {FaEllipsisH} from 'react-icons/fa';\nimport {useSharedTranslation} from '_ui/hooks/useSharedTranslation';\nimport {TOOLTIP_DEFAULT_DELAY_IN_SECONDS} from '_ui/constants';\n\nconst StyledTableNameCellContainer = styled.div`\n position: relative;\n display: inline-flex;\n align-items: center;\n width: 100%;\n`;\n\nconst StyledActionsList = styled.div`\n /* Action are displayed when the user hover the table row (CSS in DataView.tsx) */\n display: none;\n gap: calc(var(--general-spacing-xxs) * 1px);\n transition:\n display 0.2s ease-in-out,\n align-items: center;\n justify-content: center;\n margin-left: calc(var(--general-spacing-xs) * 1px);\n`;\n\nconst StyledIdCard = styled.div`\n flex: 1;\n`;\n\ntype ResolvedItemActionProp<T> = T extends (item: IItemData) => infer R ? R : T;\n\nconst resolveItemActionProp = <T extends IItemAction[keyof IItemAction]>(\n itemData: IItemData,\n itemActionProp: T,\n): ResolvedItemActionProp<T> =>\n (typeof itemActionProp === 'function' ? itemActionProp(itemData) : itemActionProp) as ResolvedItemActionProp<T>;\n\ninterface ITableNameCellProps {\n item: IItemData;\n itemActions: IItemAction[];\n}\n\nexport const TableNameCell = ({item, itemActions}: ITableNameCellProps) => {\n const {t} = useSharedTranslation();\n const containerRef = useRef<HTMLDivElement>(null);\n\n const itemActionsWithCallback = itemActions.map(action => ({\n ...action,\n callback: () => action.callback(item),\n }));\n\n const isMoreThanThreeActions = itemActionsWithCallback.length > 3;\n\n const itemsActionsWithCallbackToDisplay = isMoreThanThreeActions\n ? itemActionsWithCallback.slice(0, 2)\n : itemActionsWithCallback;\n\n const _handleButtonClick = (event: MouseEvent, callback: () => void) => {\n // Stop event propagation to avoid the row click event to be triggered\n event.stopPropagation();\n callback();\n };\n\n return (\n <StyledTableNameCellContainer ref={containerRef}>\n <StyledIdCard>\n <IdCard item={item.whoAmI} />\n </StyledIdCard>\n <StyledActionsList className=\"actions-list\">\n {itemsActionsWithCallbackToDisplay.map(\n ({label, icon, isDanger, callback, disabled, useItemDeletePermission}, actionIndex) => {\n const disabledButton = useItemDeletePermission\n ? !item.canDelete\n : resolveItemActionProp(item, disabled);\n\n return (\n <KitTooltip\n key={actionIndex}\n title={resolveItemActionProp(item, label)}\n mouseEnterDelay={TOOLTIP_DEFAULT_DELAY_IN_SECONDS}\n >\n <KitButton\n size=\"m\"\n aria-label={resolveItemActionProp(item, label)}\n icon={resolveItemActionProp(item, icon)}\n onClick={event => _handleButtonClick(event, callback)}\n danger={resolveItemActionProp(item, isDanger)}\n disabled={disabledButton}\n />\n </KitTooltip>\n );\n },\n )}\n {isMoreThanThreeActions && (\n <KitDropDown\n placement=\"bottomRight\"\n getPopupContainer={() => containerRef.current || document.body}\n destroyPopupOnHide={true}\n menu={{\n items: itemActionsWithCallback\n .slice(2)\n .map(({callback, icon, label, isDanger, disabled}) => ({\n key: resolveItemActionProp(item, label),\n danger: resolveItemActionProp(item, isDanger),\n disabled: resolveItemActionProp(item, disabled),\n label: resolveItemActionProp(item, label),\n icon: icon\n ? cloneElement(resolveItemActionProp(item, icon), {\n size: '2em',\n })\n : null, // TODO: find better tuning\n onClick: callback,\n })),\n }}\n >\n <KitTooltip\n title={t('explorer.more-actions')}\n mouseEnterDelay={TOOLTIP_DEFAULT_DELAY_IN_SECONDS}\n >\n <KitButton\n size=\"m\"\n aria-label={t('explorer.more-actions') ?? undefined}\n icon={<FaEllipsisH />}\n onClick={event => event.stopPropagation()}\n />\n </KitTooltip>\n </KitDropDown>\n )}\n </StyledActionsList>\n </StyledTableNameCellContainer>\n );\n};\n"]}
@@ -4,8 +4,9 @@
4
4
  import { localizedTranslation } from '@leav/utils';
5
5
  import { useEffect, useMemo } from 'react';
6
6
  import { useGetRecordUpdatesSubscription, useLang } from '../../../hooks';
7
- import { useExplorerLibraryDataQuery, useExplorerLinkAttributeQuery, useExplorerLinkDataQuery, } from '../../../_gqlTypes';
7
+ import { useExplorerLibraryDataLazyQuery, useExplorerLibraryDataQuery, useExplorerLinkAttributeQuery, useExplorerLinkDataQuery, } from '../../../_gqlTypes';
8
8
  import { prepareFiltersForRequest } from '../../../components/Filters';
9
+ import { AttributeConditionFilter } from '../../../types';
9
10
  export const dateValuesSeparator = '\n';
10
11
  const _mappingLibrary = (data, libraryId, availableLangs) => {
11
12
  const attributes = data.records.list.length
@@ -118,6 +119,7 @@ export const useExplorerData = ({ entrypoint, libraryId, attributeIds, fulltextS
118
119
  filters: preparedFilters,
119
120
  },
120
121
  });
122
+ const [fetchLibraryRecord] = useExplorerLibraryDataLazyQuery();
121
123
  const isMultivalue = !!attributeData?.attributes?.list?.[0]?.multiple_values;
122
124
  const canEditLinkAttributeValues = !!attributeData?.attributes?.list?.[0]?.permissions?.edit_value;
123
125
  const memoizedData = useMemo(() => {
@@ -133,15 +135,25 @@ export const useExplorerData = ({ entrypoint, libraryId, attributeIds, fulltextS
133
135
  const { data: updatedData } = useGetRecordUpdatesSubscription({ libraries: [libraryId], records: ids }, !libraryId);
134
136
  // TOTO: change to useMemo, and use updatedData to update memoizedData with new Data. Good luck !
135
137
  useEffect(() => {
136
- if (updatedData) {
138
+ if (updatedData && memoizedData) {
137
139
  if (isLibrary) {
138
- libraryRefetch();
139
- }
140
- else {
141
- linkRefetch();
140
+ //fetching updated record will update cache data, and all will be updated automatically
141
+ fetchLibraryRecord({
142
+ variables: {
143
+ libraryId,
144
+ attributeIds,
145
+ filters: [
146
+ {
147
+ field: 'id',
148
+ condition: AttributeConditionFilter.EQUAL,
149
+ value: updatedData.recordUpdate.record.id,
150
+ },
151
+ ],
152
+ },
153
+ });
142
154
  }
143
155
  }
144
- }, [updatedData]);
156
+ }, [updatedData, memoizedData]);
145
157
  return {
146
158
  data: memoizedData,
147
159
  isMultivalue,
@@ -1 +1 @@
1
- {"version":3,"file":"useExplorerData.js","sourceRoot":"","sources":["../../../../src/components/Explorer/_queries/useExplorerData.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 {localizedTranslation} from '@leav/utils';\nimport {useEffect, useMemo} from 'react';\nimport {useGetRecordUpdatesSubscription, useLang} from '_ui/hooks';\nimport {\n type Entrypoint,\n type IEntrypointLink,\n type IExplorerData,\n type DefaultViewSettings,\n type IEntrypointLibrary,\n} from '../_types';\nimport {\n type ExplorerLibraryDataQuery,\n type ExplorerLinkDataQuery,\n type LinkPropertyLinkValueFragment,\n type SortOrder,\n useExplorerLibraryDataQuery,\n useExplorerLinkAttributeQuery,\n useExplorerLinkDataQuery,\n} from '_ui/_gqlTypes';\nimport {type UIFilter} from '_ui/components/Filters/_types';\nimport {prepareFiltersForRequest} from '_ui/components/Filters';\n\nexport const dateValuesSeparator = '\\n';\n\nconst _mappingLibrary = (\n data: ExplorerLibraryDataQuery,\n libraryId: string,\n availableLangs: string[],\n): IExplorerData => {\n const attributes = data.records.list.length\n ? data.records.list[0].properties.reduce((acc, property) => {\n acc[property.attributeId] = {\n ...property.attributeProperties,\n label: localizedTranslation(property.attributeProperties.label, availableLangs),\n };\n\n return acc;\n }, {})\n : {};\n\n const records = data.records.list.map(({whoAmI, active, permissions, properties}) => ({\n libraryId,\n key: whoAmI.id, // For <KitTable /> only\n itemId: whoAmI.id, // For <KitTable /> only\n active,\n canActivate: permissions.create_record,\n canDelete: permissions.delete_record,\n whoAmI: {\n label: null,\n subLabel: null,\n color: null,\n preview: null,\n ...whoAmI,\n },\n propertiesById: properties.reduce((acc, {attributeId, values}) => ({...acc, [attributeId]: values}), {}),\n }));\n\n return {\n totalCount: data.records.totalCount ?? 0,\n attributes,\n records,\n };\n};\n\nconst _mappingLink = (data: ExplorerLinkDataQuery, libraryId: string, availableLangs: string[]): IExplorerData => {\n const attributes = data.records.list.length\n ? ((data.records.list[0].property[0] as LinkPropertyLinkValueFragment)?.payload?.properties ?? []).reduce(\n (acc, property) => {\n acc[property.attributeId] = {\n ...property.attributeProperties,\n label: localizedTranslation(property.attributeProperties.label, availableLangs),\n };\n\n return acc;\n },\n {},\n )\n : {};\n\n const records =\n (data.records.list.length &&\n data.records.list[0].property\n .map((linkValue: LinkPropertyLinkValueFragment, index: number) => {\n if (!linkValue.payload) {\n return null;\n }\n\n return {\n libraryId,\n // same link id can be duplicated, so we add the index to the key\n key: linkValue.payload.whoAmI.id + index, // For <KitTable /> only\n itemId: linkValue.payload.whoAmI.id, // For <KitTable /> only\n canActivate: true,\n canDelete: true,\n active: true,\n whoAmI: {\n label: null,\n subLabel: null,\n color: null,\n preview: null,\n ...linkValue.payload.whoAmI,\n },\n propertiesById: linkValue.payload.properties.reduce(\n (acc, {attributeId, values}) => ({...acc, [attributeId]: values}),\n {},\n ),\n id_value: linkValue.id_value ?? undefined,\n };\n })\n .filter(Boolean)) ||\n [];\n\n return {\n totalCount: records.length,\n attributes,\n records,\n };\n};\n\nexport const useExplorerData = ({\n entrypoint,\n libraryId,\n attributeIds,\n fulltextSearch,\n sorts,\n pagination,\n filters,\n filtersOperator,\n skip,\n}: {\n entrypoint: Entrypoint;\n libraryId: string;\n attributeIds: string[];\n fulltextSearch: string;\n sorts: Array<{\n field: string;\n order: SortOrder;\n }>;\n pagination: null | {limit: number; offset: number};\n filters: UIFilter[];\n filtersOperator: DefaultViewSettings['filtersOperator'];\n skip: boolean;\n}) => {\n const {lang: availableLangs} = useLang();\n\n const isLibrary = entrypoint.type === 'library';\n const isLink = entrypoint.type === 'link';\n\n const {data: attributeData} = useExplorerLinkAttributeQuery({\n skip: isLibrary,\n variables: {\n id: (entrypoint as IEntrypointLink).linkAttributeId,\n },\n });\n\n const isLinkAttributeAllowed = attributeData?.attributes?.list?.[0]?.permissions?.access_attribute;\n const {\n data: linkData,\n loading: linkLoading,\n refetch: linkRefetch,\n } = useExplorerLinkDataQuery({\n fetchPolicy: 'network-only',\n skip: skip || !isLink || !isLinkAttributeAllowed,\n variables: {\n parentLibraryId: (entrypoint as IEntrypointLink).parentLibraryId,\n parentRecordId: (entrypoint as IEntrypointLink).parentRecordId,\n linkAttributeId: (entrypoint as IEntrypointLink).linkAttributeId,\n attributeIds,\n },\n });\n\n const allowFreeEntry = isLibrary ? (entrypoint as IEntrypointLibrary).allowFreeEntry : undefined;\n const valuesList =\n !isLibrary || (fulltextSearch && allowFreeEntry) ? undefined : (entrypoint as IEntrypointLibrary).valuesList; // Remove values list for free entry values list on search\n const preparedFilters = prepareFiltersForRequest(filters, filtersOperator, valuesList);\n\n const {\n data: libraryData,\n loading: libraryLoading,\n refetch: libraryRefetch,\n } = useExplorerLibraryDataQuery({\n fetchPolicy: 'network-only',\n skip: skip || !isLibrary,\n variables: {\n libraryId,\n attributeIds,\n pagination,\n searchQuery: fulltextSearch,\n multipleSort: sorts,\n filters: preparedFilters,\n },\n });\n\n const isMultivalue = !!attributeData?.attributes?.list?.[0]?.multiple_values;\n const canEditLinkAttributeValues = !!attributeData?.attributes?.list?.[0]?.permissions?.edit_value;\n\n const memoizedData = useMemo(() => {\n if (isLibrary) {\n return libraryData ? _mappingLibrary(libraryData, libraryId, availableLangs) : null;\n }\n\n if (isLink) {\n return linkData ? _mappingLink(linkData, libraryId, availableLangs) : null;\n }\n\n return null;\n }, [libraryData, linkData]);\n\n const ids = memoizedData?.records.map(record => record.itemId);\n const {data: updatedData} = useGetRecordUpdatesSubscription({libraries: [libraryId], records: ids}, !libraryId);\n\n // TOTO: change to useMemo, and use updatedData to update memoizedData with new Data. Good luck !\n useEffect(() => {\n if (updatedData) {\n if (isLibrary) {\n libraryRefetch();\n } else {\n linkRefetch();\n }\n }\n }, [updatedData]);\n\n return {\n data: memoizedData,\n isMultivalue,\n canEditLinkAttributeValues,\n loading: isLibrary ? libraryLoading : linkLoading,\n refetch: isLibrary ? libraryRefetch : linkRefetch,\n };\n};\n"]}
1
+ {"version":3,"file":"useExplorerData.js","sourceRoot":"","sources":["../../../../src/components/Explorer/_queries/useExplorerData.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 {localizedTranslation} from '@leav/utils';\nimport {useEffect, useMemo} from 'react';\nimport {useGetRecordUpdatesSubscription, useLang} from '_ui/hooks';\nimport {\n type Entrypoint,\n type IEntrypointLink,\n type IExplorerData,\n type DefaultViewSettings,\n type IEntrypointLibrary,\n} from '../_types';\nimport {\n type ExplorerLibraryDataQuery,\n type ExplorerLinkDataQuery,\n type LinkPropertyLinkValueFragment,\n type SortOrder,\n useExplorerLibraryDataLazyQuery,\n useExplorerLibraryDataQuery,\n useExplorerLinkAttributeQuery,\n useExplorerLinkDataQuery,\n} from '_ui/_gqlTypes';\nimport {type UIFilter} from '_ui/components/Filters/_types';\nimport {prepareFiltersForRequest} from '_ui/components/Filters';\nimport {AttributeConditionFilter} from '_ui/types';\n\nexport const dateValuesSeparator = '\\n';\n\nconst _mappingLibrary = (\n data: ExplorerLibraryDataQuery,\n libraryId: string,\n availableLangs: string[],\n): IExplorerData => {\n const attributes = data.records.list.length\n ? data.records.list[0].properties.reduce((acc, property) => {\n acc[property.attributeId] = {\n ...property.attributeProperties,\n label: localizedTranslation(property.attributeProperties.label, availableLangs),\n };\n\n return acc;\n }, {})\n : {};\n\n const records = data.records.list.map(({whoAmI, active, permissions, properties}) => ({\n libraryId,\n key: whoAmI.id, // For <KitTable /> only\n itemId: whoAmI.id, // For <KitTable /> only\n active,\n canActivate: permissions.create_record,\n canDelete: permissions.delete_record,\n whoAmI: {\n label: null,\n subLabel: null,\n color: null,\n preview: null,\n ...whoAmI,\n },\n propertiesById: properties.reduce((acc, {attributeId, values}) => ({...acc, [attributeId]: values}), {}),\n }));\n\n return {\n totalCount: data.records.totalCount ?? 0,\n attributes,\n records,\n };\n};\n\nconst _mappingLink = (data: ExplorerLinkDataQuery, libraryId: string, availableLangs: string[]): IExplorerData => {\n const attributes = data.records.list.length\n ? ((data.records.list[0].property[0] as LinkPropertyLinkValueFragment)?.payload?.properties ?? []).reduce(\n (acc, property) => {\n acc[property.attributeId] = {\n ...property.attributeProperties,\n label: localizedTranslation(property.attributeProperties.label, availableLangs),\n };\n\n return acc;\n },\n {},\n )\n : {};\n\n const records =\n (data.records.list.length &&\n data.records.list[0].property\n .map((linkValue: LinkPropertyLinkValueFragment, index: number) => {\n if (!linkValue.payload) {\n return null;\n }\n\n return {\n libraryId,\n // same link id can be duplicated, so we add the index to the key\n key: linkValue.payload.whoAmI.id + index, // For <KitTable /> only\n itemId: linkValue.payload.whoAmI.id, // For <KitTable /> only\n canActivate: true,\n canDelete: true,\n active: true,\n whoAmI: {\n label: null,\n subLabel: null,\n color: null,\n preview: null,\n ...linkValue.payload.whoAmI,\n },\n propertiesById: linkValue.payload.properties.reduce(\n (acc, {attributeId, values}) => ({...acc, [attributeId]: values}),\n {},\n ),\n id_value: linkValue.id_value ?? undefined,\n };\n })\n .filter(Boolean)) ||\n [];\n\n return {\n totalCount: records.length,\n attributes,\n records,\n };\n};\n\nexport const useExplorerData = ({\n entrypoint,\n libraryId,\n attributeIds,\n fulltextSearch,\n sorts,\n pagination,\n filters,\n filtersOperator,\n skip,\n}: {\n entrypoint: Entrypoint;\n libraryId: string;\n attributeIds: string[];\n fulltextSearch: string;\n sorts: Array<{\n field: string;\n order: SortOrder;\n }>;\n pagination: null | {limit: number; offset: number};\n filters: UIFilter[];\n filtersOperator: DefaultViewSettings['filtersOperator'];\n skip: boolean;\n}) => {\n const {lang: availableLangs} = useLang();\n\n const isLibrary = entrypoint.type === 'library';\n const isLink = entrypoint.type === 'link';\n\n const {data: attributeData} = useExplorerLinkAttributeQuery({\n skip: isLibrary,\n variables: {\n id: (entrypoint as IEntrypointLink).linkAttributeId,\n },\n });\n\n const isLinkAttributeAllowed = attributeData?.attributes?.list?.[0]?.permissions?.access_attribute;\n const {\n data: linkData,\n loading: linkLoading,\n refetch: linkRefetch,\n } = useExplorerLinkDataQuery({\n fetchPolicy: 'network-only',\n skip: skip || !isLink || !isLinkAttributeAllowed,\n variables: {\n parentLibraryId: (entrypoint as IEntrypointLink).parentLibraryId,\n parentRecordId: (entrypoint as IEntrypointLink).parentRecordId,\n linkAttributeId: (entrypoint as IEntrypointLink).linkAttributeId,\n attributeIds,\n },\n });\n\n const allowFreeEntry = isLibrary ? (entrypoint as IEntrypointLibrary).allowFreeEntry : undefined;\n const valuesList =\n !isLibrary || (fulltextSearch && allowFreeEntry) ? undefined : (entrypoint as IEntrypointLibrary).valuesList; // Remove values list for free entry values list on search\n const preparedFilters = prepareFiltersForRequest(filters, filtersOperator, valuesList);\n\n const {\n data: libraryData,\n loading: libraryLoading,\n refetch: libraryRefetch,\n } = useExplorerLibraryDataQuery({\n fetchPolicy: 'network-only',\n skip: skip || !isLibrary,\n variables: {\n libraryId,\n attributeIds,\n pagination,\n searchQuery: fulltextSearch,\n multipleSort: sorts,\n filters: preparedFilters,\n },\n });\n\n const [fetchLibraryRecord] = useExplorerLibraryDataLazyQuery();\n\n const isMultivalue = !!attributeData?.attributes?.list?.[0]?.multiple_values;\n const canEditLinkAttributeValues = !!attributeData?.attributes?.list?.[0]?.permissions?.edit_value;\n\n const memoizedData = useMemo(() => {\n if (isLibrary) {\n return libraryData ? _mappingLibrary(libraryData, libraryId, availableLangs) : null;\n }\n\n if (isLink) {\n return linkData ? _mappingLink(linkData, libraryId, availableLangs) : null;\n }\n\n return null;\n }, [libraryData, linkData]);\n\n const ids = memoizedData?.records.map(record => record.itemId);\n const {data: updatedData} = useGetRecordUpdatesSubscription({libraries: [libraryId], records: ids}, !libraryId);\n\n // TOTO: change to useMemo, and use updatedData to update memoizedData with new Data. Good luck !\n useEffect(() => {\n if (updatedData && memoizedData) {\n if (isLibrary) {\n //fetching updated record will update cache data, and all will be updated automatically\n fetchLibraryRecord({\n variables: {\n libraryId,\n attributeIds,\n filters: [\n {\n field: 'id',\n condition: AttributeConditionFilter.EQUAL,\n value: updatedData.recordUpdate.record.id,\n },\n ],\n },\n });\n }\n }\n }, [updatedData, memoizedData]);\n\n return {\n data: memoizedData,\n isMultivalue,\n canEditLinkAttributeValues,\n loading: isLibrary ? libraryLoading : linkLoading,\n refetch: isLibrary ? libraryRefetch : linkRefetch,\n };\n};\n"]}
@@ -38,6 +38,7 @@ export interface IItemAction {
38
38
  isDanger?: boolean | ((item: IItemData) => boolean);
39
39
  disabled?: boolean | ((item: IItemData) => boolean);
40
40
  useItemActionOnRowClick?: boolean;
41
+ useItemDeletePermission?: boolean;
41
42
  }
42
43
  export interface IPrimaryAction {
43
44
  callback: () => void;
@@ -1 +1 @@
1
- {"version":3,"file":"_types.js","sourceRoot":"","sources":["../../../src/components/Explorer/_types.ts"],"names":[],"mappings":"","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 AttributePropertiesFragment,\n type PropertyValueFragment,\n type RecordFilterInput,\n type RecordIdentityFragment,\n} from '_ui/_gqlTypes';\nimport {type Key, type ReactElement} from 'react';\nimport {type IViewSettingsState} from './manage-view-settings';\nimport {type IView} from '_ui/types';\nimport {type MASS_SELECTION_ALL} from './_constants';\nimport {type UIFilter, type ValidFilter} from '../Filters/_types';\n\nexport type MassSelection = Key[] | typeof MASS_SELECTION_ALL;\n\nexport interface IExplorerData {\n totalCount: number;\n attributes: {\n [attributeId: string]: Override<AttributePropertiesFragment, {label: string}>;\n };\n records: IItemData[];\n}\n\nexport interface IItemData {\n libraryId: string;\n key: string;\n itemId: string;\n whoAmI: Required<RecordIdentityFragment['whoAmI']>;\n canActivate: boolean;\n canDelete: boolean;\n active: boolean;\n propertiesById: {\n [attributeId: string]: PropertyValueFragment[];\n };\n /**\n * Can be named `linkId` too, but for historical reason we keep old name 👴🏼.\n */\n id_value?: string;\n}\n\nexport interface IItemAction {\n callback: (item: IItemData) => void;\n icon: ReactElement | ((item: IItemData) => ReactElement);\n label: string | ((item: IItemData) => string);\n isDanger?: boolean | ((item: IItemData) => boolean);\n disabled?: boolean | ((item: IItemData) => boolean);\n useItemActionOnRowClick?: boolean;\n}\n\nexport interface IPrimaryAction {\n callback: () => void;\n disabled?: boolean;\n icon: ReactElement;\n label: string;\n}\n\nexport interface IMassActions {\n callback: (massSelectedFilter: RecordFilterInput[], massSelection: MassSelection) => void | Promise<void>;\n deselectAll: boolean;\n icon: ReactElement;\n label: string;\n}\n\nexport type FeatureHook<T = {}> = {isEnabled: boolean; isVisible?: boolean} & T;\n\nexport type DefaultViewSettings = Override<\n Partial<IViewSettingsState>,\n {\n filtersOperator?: 'AND' | 'OR';\n filters?: UIFilter[];\n }\n>;\n\nexport interface IEntrypointTree {\n type: 'tree';\n treeId: string;\n nodeId: string;\n}\n\nexport interface IEntrypointLibrary {\n type: 'library';\n libraryId: string;\n /**\n * Used to display a list of values instead of all library records when adding a link\n */\n valuesList?: string[];\n /**\n * Used to allow free entry when adding a link with values list\n */\n allowFreeEntry?: boolean;\n}\n\nexport interface IEntrypointLink {\n type: 'link';\n parentLibraryId: string;\n parentRecordId: string;\n linkAttributeId: string;\n}\n\nexport type Entrypoint = IEntrypointTree | IEntrypointLibrary | IEntrypointLink;\n\nexport interface IUserView extends Pick<IView, 'shared' | 'display' | 'sort' | 'attributes'> {\n label: Record<string, string>;\n id: IView['id'] | null;\n filters: ValidFilter[];\n ownerId: string | null;\n}\n\nexport interface IDataViewOnAction {\n id: string | null;\n label: Record<string, string> | null;\n}\n\nexport type SetNewPage = (newCurrentPage: number, ignoredPageSize: number) => void;\n"]}
1
+ {"version":3,"file":"_types.js","sourceRoot":"","sources":["../../../src/components/Explorer/_types.ts"],"names":[],"mappings":"","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 AttributePropertiesFragment,\n type PropertyValueFragment,\n type RecordFilterInput,\n type RecordIdentityFragment,\n} from '_ui/_gqlTypes';\nimport {type Key, type ReactElement} from 'react';\nimport {type IViewSettingsState} from './manage-view-settings';\nimport {type IView} from '_ui/types';\nimport {type MASS_SELECTION_ALL} from './_constants';\nimport {type UIFilter, type ValidFilter} from '../Filters/_types';\n\nexport type MassSelection = Key[] | typeof MASS_SELECTION_ALL;\n\nexport interface IExplorerData {\n totalCount: number;\n attributes: {\n [attributeId: string]: Override<AttributePropertiesFragment, {label: string}>;\n };\n records: IItemData[];\n}\n\nexport interface IItemData {\n libraryId: string;\n key: string;\n itemId: string;\n whoAmI: Required<RecordIdentityFragment['whoAmI']>;\n canActivate: boolean;\n canDelete: boolean;\n active: boolean;\n propertiesById: {\n [attributeId: string]: PropertyValueFragment[];\n };\n /**\n * Can be named `linkId` too, but for historical reason we keep old name 👴🏼.\n */\n id_value?: string;\n}\n\nexport interface IItemAction {\n callback: (item: IItemData) => void;\n icon: ReactElement | ((item: IItemData) => ReactElement);\n label: string | ((item: IItemData) => string);\n isDanger?: boolean | ((item: IItemData) => boolean);\n disabled?: boolean | ((item: IItemData) => boolean);\n useItemActionOnRowClick?: boolean;\n useItemDeletePermission?: boolean; //TODO: Add for PanelAttributeExplorer custom action (should be deleted later)\n}\n\nexport interface IPrimaryAction {\n callback: () => void;\n disabled?: boolean;\n icon: ReactElement;\n label: string;\n}\n\nexport interface IMassActions {\n callback: (massSelectedFilter: RecordFilterInput[], massSelection: MassSelection) => void | Promise<void>;\n deselectAll: boolean;\n icon: ReactElement;\n label: string;\n}\n\nexport type FeatureHook<T = {}> = {isEnabled: boolean; isVisible?: boolean} & T;\n\nexport type DefaultViewSettings = Override<\n Partial<IViewSettingsState>,\n {\n filtersOperator?: 'AND' | 'OR';\n filters?: UIFilter[];\n }\n>;\n\nexport interface IEntrypointTree {\n type: 'tree';\n treeId: string;\n nodeId: string;\n}\n\nexport interface IEntrypointLibrary {\n type: 'library';\n libraryId: string;\n /**\n * Used to display a list of values instead of all library records when adding a link\n */\n valuesList?: string[];\n /**\n * Used to allow free entry when adding a link with values list\n */\n allowFreeEntry?: boolean;\n}\n\nexport interface IEntrypointLink {\n type: 'link';\n parentLibraryId: string;\n parentRecordId: string;\n linkAttributeId: string;\n}\n\nexport type Entrypoint = IEntrypointTree | IEntrypointLibrary | IEntrypointLink;\n\nexport interface IUserView extends Pick<IView, 'shared' | 'display' | 'sort' | 'attributes'> {\n label: Record<string, string>;\n id: IView['id'] | null;\n filters: ValidFilter[];\n ownerId: string | null;\n}\n\nexport interface IDataViewOnAction {\n id: string | null;\n label: Record<string, string> | null;\n}\n\nexport type SetNewPage = (newCurrentPage: number, ignoredPageSize: number) => void;\n"]}
@@ -11,8 +11,8 @@ import { EditTreeAttributeValuesMapping } from './edit-attribute/EditTreeAttribu
11
11
  import { EditAttributeMassActionModal } from './edit-attribute/EditAttributeMassActionModal';
12
12
  import { useListEditableAttributeHook } from './edit-attribute/useListEditableAttributeHook';
13
13
  import { useCountValuesOccurrencesHook } from './edit-attribute/useCountValuesOccurrencesHook';
14
- import { KitAlert, useKitNotification } from 'aristid-ds';
15
- import { ERROR_ALERT_DURATION, INFO_NOTIFICATION_DURATION_SECONDS } from '../../../constants';
14
+ import { KitAlert, KitNotification } from 'aristid-ds';
15
+ import { ERROR_ALERT_DURATION, INFO_NOTIFICATION_DURATION } from '../../../constants';
16
16
  import { Loading } from '../../../components/Loading';
17
17
  export const useEditAttributeMassAction = ({ isEnabled, store: { view }, totalCount, }) => {
18
18
  if (!isEnabled) {
@@ -22,7 +22,6 @@ export const useEditAttributeMassAction = ({ isEnabled, store: { view }, totalCo
22
22
  };
23
23
  }
24
24
  const { t } = useSharedTranslation();
25
- const { kitNotification } = useKitNotification();
26
25
  const [selectedAttribute, setSelectedAttribute] = useState(undefined);
27
26
  const [massSelectionFilter, setMassSelectionFilter] = useState([]);
28
27
  const [openModal, setOpenModal] = useState(false);
@@ -72,12 +71,13 @@ export const useEditAttributeMassAction = ({ isEnabled, store: { view }, totalCo
72
71
  },
73
72
  });
74
73
  closeModal();
75
- kitNotification.info({
74
+ KitNotification.info({
76
75
  message: t('explorer.massAction.editAttribute_submit_notification_title'),
77
76
  description: t('explorer.massAction.editAttribute_submit_notification_description', {
78
77
  counter: bulkCounter,
79
78
  }),
80
- duration: INFO_NOTIFICATION_DURATION_SECONDS,
79
+ duration: INFO_NOTIFICATION_DURATION,
80
+ closable: true,
81
81
  });
82
82
  }
83
83
  catch (error) {
@@ -1 +1 @@
1
- {"version":3,"file":"useEditAttributeMassAction.js","sourceRoot":"","sources":["../../../../src/components/Explorer/actions-mass/useEditAttributeMassAction.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 AttributeDetailsFragment,\n AttributeType,\n type RecordFilterInput,\n useSaveValueBulkMutation,\n} from '_ui/_gqlTypes';\nimport {useSharedTranslation} from '_ui/hooks/useSharedTranslation';\nimport {useEffect, useMemo, useState} from 'react';\nimport {FaEdit} from 'react-icons/fa';\nimport {MASS_SELECTION_ALL} from '../_constants';\nimport {type FeatureHook, type IMassActions} from '../_types';\nimport {type IViewSettingsState} from '../manage-view-settings';\nimport {EditTreeAttributeValuesMapping} from './edit-attribute/EditTreeAttributeValuesMapping';\nimport {EditAttributeMassActionModal} from './edit-attribute/EditAttributeMassActionModal';\nimport {useListEditableAttributeHook} from './edit-attribute/useListEditableAttributeHook';\nimport {useCountValuesOccurrencesHook} from './edit-attribute/useCountValuesOccurrencesHook';\nimport {KitAlert, useKitNotification} from 'aristid-ds';\nimport {ERROR_ALERT_DURATION, INFO_NOTIFICATION_DURATION_SECONDS} from '_ui/constants';\nimport {Loading} from '_ui/components/Loading';\n\nexport const useEditAttributeMassAction = ({\n isEnabled,\n store: {view},\n totalCount,\n}: FeatureHook<{\n store: {\n view: IViewSettingsState;\n };\n totalCount: number;\n}>) => {\n if (!isEnabled) {\n return {\n editAttributeMassAction: null,\n editAttributeMassActionModal: null,\n };\n }\n\n const {t} = useSharedTranslation();\n const {kitNotification} = useKitNotification();\n\n const [selectedAttribute, setSelectedAttribute] = useState<AttributeDetailsFragment | undefined>(undefined);\n const [massSelectionFilter, setMassSelectionFilter] = useState<RecordFilterInput[]>([]);\n const [openModal, setOpenModal] = useState<boolean>(false);\n const [editionMapping, setEditionMapping] = useState<Array<{before: string | null; after: string | null}>>([]);\n\n const editableAttributes = useListEditableAttributeHook({libraryId: view.libraryId});\n const valuesOccurrences = useCountValuesOccurrencesHook({\n attributeId: selectedAttribute?.id,\n libraryId: view.libraryId,\n recordFilters: massSelectionFilter,\n });\n\n const [executeSaveValueBulk] = useSaveValueBulkMutation();\n\n useEffect(() => {\n setEditionMapping([]);\n }, [selectedAttribute]);\n\n const _editAttributeMassAction: IMassActions = useMemo(\n () => ({\n label: t('explorer.massAction.editAttribute'),\n icon: <FaEdit />,\n deselectAll: false,\n callback: _massSelectionFilter => {\n setMassSelectionFilter(_massSelectionFilter);\n setEditionMapping([]);\n setOpenModal(true);\n },\n }),\n [t, view.massSelection],\n );\n\n const closeModal = () => {\n setOpenModal(false);\n setMassSelectionFilter([]);\n setSelectedAttribute(undefined);\n setEditionMapping([]);\n };\n\n const isMappingCompleted = useMemo(\n () =>\n valuesOccurrences.noValueCount === 0\n ? editionMapping.length === valuesOccurrences.occurrences.length\n : editionMapping.length === valuesOccurrences.occurrences.length + 1, // for undefined values\n [editionMapping, valuesOccurrences],\n );\n\n const bulkCounter = useMemo(\n () => (view.massSelection === MASS_SELECTION_ALL ? totalCount : view.massSelection.length),\n [view.massSelection, totalCount],\n );\n\n const onOkButtonClick = async () => {\n if (!selectedAttribute || !isMappingCompleted) {\n return;\n }\n try {\n await executeSaveValueBulk({\n variables: {\n libraryId: view.libraryId,\n recordsFilters: massSelectionFilter,\n attributeId: selectedAttribute.id,\n mapValues: editionMapping,\n },\n });\n\n closeModal();\n kitNotification.info({\n message: t('explorer.massAction.editAttribute_submit_notification_title'),\n description: t('explorer.massAction.editAttribute_submit_notification_description', {\n counter: bulkCounter,\n }),\n duration: INFO_NOTIFICATION_DURATION_SECONDS,\n });\n } catch (error) {\n KitAlert.error({\n showIcon: true,\n duration: ERROR_ALERT_DURATION,\n message: t('error.error_occurred'),\n description: t('explorer.massAction.editAttribute_submit_error'),\n closable: true,\n });\n }\n };\n\n if (editableAttributes.length === 0) {\n return {\n editAttributeMassAction: null,\n editAttributeMassActionModal: null,\n };\n }\n\n return {\n editAttributeMassAction: _editAttributeMassAction,\n editAttributeMassActionModal: (\n <EditAttributeMassActionModal\n isOpen={openModal}\n attributes={editableAttributes}\n setSelectedAttribute={setSelectedAttribute}\n massSelectionFilter={massSelectionFilter}\n elementsCount={bulkCounter}\n disableOkButton={!isMappingCompleted}\n onOkButtonClick={onOkButtonClick}\n onCancelButtonClick={closeModal}\n >\n {selectedAttribute != null && valuesOccurrences.loading ? <Loading /> : null}\n {selectedAttribute?.type === AttributeType.tree && (\n <EditTreeAttributeValuesMapping\n selectedAttribute={selectedAttribute}\n valuesOccurrences={valuesOccurrences}\n setAttributeMapping={(before, after) => {\n setEditionMapping(\n editionMapping.filter(mapping => mapping.before !== before).concat([{before, after}]),\n );\n }}\n />\n )}\n </EditAttributeMassActionModal>\n ),\n };\n};\n"]}
1
+ {"version":3,"file":"useEditAttributeMassAction.js","sourceRoot":"","sources":["../../../../src/components/Explorer/actions-mass/useEditAttributeMassAction.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 AttributeDetailsFragment,\n AttributeType,\n type RecordFilterInput,\n useSaveValueBulkMutation,\n} from '_ui/_gqlTypes';\nimport {useSharedTranslation} from '_ui/hooks/useSharedTranslation';\nimport {useEffect, useMemo, useState} from 'react';\nimport {FaEdit} from 'react-icons/fa';\nimport {MASS_SELECTION_ALL} from '../_constants';\nimport {type FeatureHook, type IMassActions} from '../_types';\nimport {type IViewSettingsState} from '../manage-view-settings';\nimport {EditTreeAttributeValuesMapping} from './edit-attribute/EditTreeAttributeValuesMapping';\nimport {EditAttributeMassActionModal} from './edit-attribute/EditAttributeMassActionModal';\nimport {useListEditableAttributeHook} from './edit-attribute/useListEditableAttributeHook';\nimport {useCountValuesOccurrencesHook} from './edit-attribute/useCountValuesOccurrencesHook';\nimport {KitAlert, KitNotification} from 'aristid-ds';\nimport {ERROR_ALERT_DURATION, INFO_NOTIFICATION_DURATION} from '_ui/constants';\nimport {Loading} from '_ui/components/Loading';\n\nexport const useEditAttributeMassAction = ({\n isEnabled,\n store: {view},\n totalCount,\n}: FeatureHook<{\n store: {\n view: IViewSettingsState;\n };\n totalCount: number;\n}>) => {\n if (!isEnabled) {\n return {\n editAttributeMassAction: null,\n editAttributeMassActionModal: null,\n };\n }\n\n const {t} = useSharedTranslation();\n\n const [selectedAttribute, setSelectedAttribute] = useState<AttributeDetailsFragment | undefined>(undefined);\n const [massSelectionFilter, setMassSelectionFilter] = useState<RecordFilterInput[]>([]);\n const [openModal, setOpenModal] = useState<boolean>(false);\n const [editionMapping, setEditionMapping] = useState<Array<{before: string | null; after: string | null}>>([]);\n\n const editableAttributes = useListEditableAttributeHook({libraryId: view.libraryId});\n const valuesOccurrences = useCountValuesOccurrencesHook({\n attributeId: selectedAttribute?.id,\n libraryId: view.libraryId,\n recordFilters: massSelectionFilter,\n });\n\n const [executeSaveValueBulk] = useSaveValueBulkMutation();\n\n useEffect(() => {\n setEditionMapping([]);\n }, [selectedAttribute]);\n\n const _editAttributeMassAction: IMassActions = useMemo(\n () => ({\n label: t('explorer.massAction.editAttribute'),\n icon: <FaEdit />,\n deselectAll: false,\n callback: _massSelectionFilter => {\n setMassSelectionFilter(_massSelectionFilter);\n setEditionMapping([]);\n setOpenModal(true);\n },\n }),\n [t, view.massSelection],\n );\n\n const closeModal = () => {\n setOpenModal(false);\n setMassSelectionFilter([]);\n setSelectedAttribute(undefined);\n setEditionMapping([]);\n };\n\n const isMappingCompleted = useMemo(\n () =>\n valuesOccurrences.noValueCount === 0\n ? editionMapping.length === valuesOccurrences.occurrences.length\n : editionMapping.length === valuesOccurrences.occurrences.length + 1, // for undefined values\n [editionMapping, valuesOccurrences],\n );\n\n const bulkCounter = useMemo(\n () => (view.massSelection === MASS_SELECTION_ALL ? totalCount : view.massSelection.length),\n [view.massSelection, totalCount],\n );\n\n const onOkButtonClick = async () => {\n if (!selectedAttribute || !isMappingCompleted) {\n return;\n }\n try {\n await executeSaveValueBulk({\n variables: {\n libraryId: view.libraryId,\n recordsFilters: massSelectionFilter,\n attributeId: selectedAttribute.id,\n mapValues: editionMapping,\n },\n });\n\n closeModal();\n KitNotification.info({\n message: t('explorer.massAction.editAttribute_submit_notification_title'),\n description: t('explorer.massAction.editAttribute_submit_notification_description', {\n counter: bulkCounter,\n }),\n duration: INFO_NOTIFICATION_DURATION,\n closable: true,\n });\n } catch (error) {\n KitAlert.error({\n showIcon: true,\n duration: ERROR_ALERT_DURATION,\n message: t('error.error_occurred'),\n description: t('explorer.massAction.editAttribute_submit_error'),\n closable: true,\n });\n }\n };\n\n if (editableAttributes.length === 0) {\n return {\n editAttributeMassAction: null,\n editAttributeMassActionModal: null,\n };\n }\n\n return {\n editAttributeMassAction: _editAttributeMassAction,\n editAttributeMassActionModal: (\n <EditAttributeMassActionModal\n isOpen={openModal}\n attributes={editableAttributes}\n setSelectedAttribute={setSelectedAttribute}\n massSelectionFilter={massSelectionFilter}\n elementsCount={bulkCounter}\n disableOkButton={!isMappingCompleted}\n onOkButtonClick={onOkButtonClick}\n onCancelButtonClick={closeModal}\n >\n {selectedAttribute != null && valuesOccurrences.loading ? <Loading /> : null}\n {selectedAttribute?.type === AttributeType.tree && (\n <EditTreeAttributeValuesMapping\n selectedAttribute={selectedAttribute}\n valuesOccurrences={valuesOccurrences}\n setAttributeMapping={(before, after) => {\n setEditionMapping(\n editionMapping.filter(mapping => mapping.before !== before).concat([{before, after}]),\n );\n }}\n />\n )}\n </EditAttributeMassActionModal>\n ),\n };\n};\n"]}
@@ -4,18 +4,17 @@ import { jsx as _jsx } from "react/jsx-runtime";
4
4
  // License text available at https://www.gnu.org/licenses/lgpl-3.0.txt
5
5
  import { useMemo } from 'react';
6
6
  import { FaFileExport } from 'react-icons/fa';
7
- import { KitAlert, KitModal, useKitNotification } from 'aristid-ds';
7
+ import { KitAlert, KitModal, KitNotification } from 'aristid-ds';
8
8
  import { useExportLazyQuery } from '../../../_gqlTypes';
9
9
  import { useSharedTranslation } from '../../../hooks/useSharedTranslation';
10
10
  import { BREAK_TWO_LINES, MASS_SELECTION_ALL } from '../_constants';
11
- import { ERROR_ALERT_DURATION, INFO_NOTIFICATION_DURATION_SECONDS } from '../../../constants';
11
+ import { ERROR_ALERT_DURATION, INFO_NOTIFICATION_DURATION } from '../../../constants';
12
12
  /**
13
13
  * Hook that provides a mass action configuration for exporting selected or all items
14
14
  * from a view/data set
15
15
  */
16
16
  export const useExportMassAction = ({ isEnabled, store: { view, dispatch }, totalCount, onExport, }) => {
17
17
  const { t } = useSharedTranslation();
18
- const { kitNotification } = useKitNotification();
19
18
  const [exportQuery] = useExportLazyQuery();
20
19
  const _exportMassAction = useMemo(() => ({
21
20
  label: t('explorer.massAction.export'),
@@ -55,13 +54,14 @@ export const useExportMassAction = ({ isEnabled, store: { view, dispatch }, tota
55
54
  errorWithExtensions.extensions = graphQLError?.extensions;
56
55
  throw errorWithExtensions;
57
56
  }
58
- kitNotification.info({
57
+ KitNotification.info({
59
58
  message: t('explorer.massAction.export_message'),
60
59
  description: t('explorer.massAction.export_description', {
61
60
  count: total,
62
61
  total,
63
62
  }),
64
- duration: INFO_NOTIFICATION_DURATION_SECONDS,
63
+ duration: INFO_NOTIFICATION_DURATION,
64
+ closable: true,
65
65
  });
66
66
  onExport?.(massSelectionFilter, view.massSelection);
67
67
  }
@@ -1 +1 @@
1
- {"version":3,"file":"useExportMassAction.js","sourceRoot":"","sources":["../../../../src/components/Explorer/actions-mass/useExportMassAction.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 Dispatch, useMemo} from 'react';\nimport {FaFileExport} from 'react-icons/fa';\nimport {KitAlert, KitModal, useKitNotification} from 'aristid-ds';\nimport {useExportLazyQuery} from '_ui/_gqlTypes';\nimport {useSharedTranslation} from '_ui/hooks/useSharedTranslation';\nimport {type FeatureHook, type IMassActions} from '../_types';\nimport {type IViewSettingsAction, type IViewSettingsState} from '../manage-view-settings';\nimport {BREAK_TWO_LINES, MASS_SELECTION_ALL} from '../_constants';\nimport {ERROR_ALERT_DURATION, INFO_NOTIFICATION_DURATION_SECONDS} from '_ui/constants';\n\n/**\n * Hook that provides a mass action configuration for exporting selected or all items\n * from a view/data set\n */\nexport const useExportMassAction = ({\n isEnabled,\n store: {view, dispatch},\n totalCount,\n onExport,\n}: FeatureHook<{\n store: {\n view: IViewSettingsState;\n dispatch: Dispatch<IViewSettingsAction>;\n };\n totalCount: number;\n onExport?: IMassActions['callback'];\n}>) => {\n const {t} = useSharedTranslation();\n const {kitNotification} = useKitNotification();\n\n const [exportQuery] = useExportLazyQuery();\n\n const _exportMassAction: IMassActions = useMemo(\n () => ({\n label: t('explorer.massAction.export'),\n icon: <FaFileExport />,\n deselectAll: false,\n callback: massSelectionFilter => {\n KitModal.confirm({\n width: '100%',\n style: {content: {width: '90vw', maxWidth: '656px'}},\n icon: false,\n type: 'confirm',\n title:\n t('explorer.export_item', {\n count: view.massSelection === MASS_SELECTION_ALL ? Infinity : view.massSelection.length,\n }) ?? undefined,\n content:\n t('explorer.export_item_description', {\n count: view.massSelection === MASS_SELECTION_ALL ? Infinity : view.massSelection.length,\n }) +\n BREAK_TWO_LINES +\n t('global.are_you_sure'),\n okText: t('global.confirm') ?? undefined,\n cancelText: t('global.cancel') ?? undefined,\n onOk: async () => {\n const total =\n view.massSelection === MASS_SELECTION_ALL ? totalCount : view.massSelection.length;\n try {\n const {error} = await exportQuery({\n fetchPolicy: 'no-cache',\n variables: {\n library: view.libraryId,\n filters: massSelectionFilter,\n profile: 'default', // Set 'default' by default, it'll change when we can select a profile from the UI\n },\n });\n if (error) {\n // Preserve the extensions property which contains the error code\n const graphQLError = error.graphQLErrors?.[0];\n const errorWithExtensions = new Error(error.message);\n (errorWithExtensions as any).extensions = graphQLError?.extensions;\n throw errorWithExtensions;\n }\n\n kitNotification.info({\n message: t('explorer.massAction.export_message'),\n description: t('explorer.massAction.export_description', {\n count: total,\n total,\n }),\n duration: INFO_NOTIFICATION_DURATION_SECONDS,\n });\n\n onExport?.(massSelectionFilter, view.massSelection);\n } catch (e) {\n if (e.extensions?.code === 'CUSTOM_CONFIG_ERROR') {\n KitAlert.error({\n showIcon: true,\n duration: ERROR_ALERT_DURATION,\n message: t('explorer.massAction.export_config_error_message'),\n description: t('explorer.massAction.export_config_error_description'),\n closable: true,\n });\n } else {\n KitAlert.error({\n showIcon: true,\n duration: ERROR_ALERT_DURATION,\n message: t('explorer.massAction.export_error_message'),\n description: t('explorer.massAction.export_error_description', {count: total}),\n closable: true,\n });\n }\n }\n },\n });\n },\n }),\n [t, exportQuery, view.massSelection, dispatch, view.libraryId],\n );\n\n return {\n exportMassAction: isEnabled ? _exportMassAction : null,\n };\n};\n"]}
1
+ {"version":3,"file":"useExportMassAction.js","sourceRoot":"","sources":["../../../../src/components/Explorer/actions-mass/useExportMassAction.tsx"],"names":[],"mappings":";AAAA,oFAAoF;AACpF,sCAAsC;AACtC,sEAAsE;AACtE,OAAO,EAAgB,OAAO,EAAC,MAAM,OAAO,CAAC;AAC7C,OAAO,EAAC,YAAY,EAAC,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAC,QAAQ,EAAE,QAAQ,EAAE,eAAe,EAAC,MAAM,YAAY,CAAC;AAC/D,OAAO,EAAC,kBAAkB,EAAC,MAAM,eAAe,CAAC;AACjD,OAAO,EAAC,oBAAoB,EAAC,MAAM,gCAAgC,CAAC;AAGpE,OAAO,EAAC,eAAe,EAAE,kBAAkB,EAAC,MAAM,eAAe,CAAC;AAClE,OAAO,EAAC,oBAAoB,EAAE,0BAA0B,EAAC,MAAM,eAAe,CAAC;AAE/E;;;GAGG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,EAChC,SAAS,EACT,KAAK,EAAE,EAAC,IAAI,EAAE,QAAQ,EAAC,EACvB,UAAU,EACV,QAAQ,GAQV,EAAE,EAAE;IACF,MAAM,EAAC,CAAC,EAAC,GAAG,oBAAoB,EAAE,CAAC;IAEnC,MAAM,CAAC,WAAW,CAAC,GAAG,kBAAkB,EAAE,CAAC;IAE3C,MAAM,iBAAiB,GAAiB,OAAO,CAC3C,GAAG,EAAE,CAAC,CAAC;QACH,KAAK,EAAE,CAAC,CAAC,4BAA4B,CAAC;QACtC,IAAI,EAAE,KAAC,YAAY,KAAG;QACtB,WAAW,EAAE,KAAK;QAClB,QAAQ,EAAE,mBAAmB,CAAC,EAAE;YAC5B,QAAQ,CAAC,OAAO,CAAC;gBACb,KAAK,EAAE,MAAM;gBACb,KAAK,EAAE,EAAC,OAAO,EAAE,EAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAC,EAAC;gBACpD,IAAI,EAAE,KAAK;gBACX,IAAI,EAAE,SAAS;gBACf,KAAK,EACD,CAAC,CAAC,sBAAsB,EAAE;oBACtB,KAAK,EAAE,IAAI,CAAC,aAAa,KAAK,kBAAkB,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM;iBAC1F,CAAC,IAAI,SAAS;gBACnB,OAAO,EACH,CAAC,CAAC,kCAAkC,EAAE;oBAClC,KAAK,EAAE,IAAI,CAAC,aAAa,KAAK,kBAAkB,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM;iBAC1F,CAAC;oBACF,eAAe;oBACf,CAAC,CAAC,qBAAqB,CAAC;gBAC5B,MAAM,EAAE,CAAC,CAAC,gBAAgB,CAAC,IAAI,SAAS;gBACxC,UAAU,EAAE,CAAC,CAAC,eAAe,CAAC,IAAI,SAAS;gBAC3C,IAAI,EAAE,KAAK,IAAI,EAAE;oBACb,MAAM,KAAK,GACP,IAAI,CAAC,aAAa,KAAK,kBAAkB,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC;oBACvF,IAAI,CAAC;wBACD,MAAM,EAAC,KAAK,EAAC,GAAG,MAAM,WAAW,CAAC;4BAC9B,WAAW,EAAE,UAAU;4BACvB,SAAS,EAAE;gCACP,OAAO,EAAE,IAAI,CAAC,SAAS;gCACvB,OAAO,EAAE,mBAAmB;gCAC5B,OAAO,EAAE,SAAS,EAAE,kFAAkF;6BACzG;yBACJ,CAAC,CAAC;wBACH,IAAI,KAAK,EAAE,CAAC;4BACR,iEAAiE;4BACjE,MAAM,YAAY,GAAG,KAAK,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,CAAC;4BAC9C,MAAM,mBAAmB,GAAG,IAAI,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;4BACpD,mBAA2B,CAAC,UAAU,GAAG,YAAY,EAAE,UAAU,CAAC;4BACnE,MAAM,mBAAmB,CAAC;wBAC9B,CAAC;wBAED,eAAe,CAAC,IAAI,CAAC;4BACjB,OAAO,EAAE,CAAC,CAAC,oCAAoC,CAAC;4BAChD,WAAW,EAAE,CAAC,CAAC,wCAAwC,EAAE;gCACrD,KAAK,EAAE,KAAK;gCACZ,KAAK;6BACR,CAAC;4BACF,QAAQ,EAAE,0BAA0B;4BACpC,QAAQ,EAAE,IAAI;yBACjB,CAAC,CAAC;wBAEH,QAAQ,EAAE,CAAC,mBAAmB,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;oBACxD,CAAC;oBAAC,OAAO,CAAC,EAAE,CAAC;wBACT,IAAI,CAAC,CAAC,UAAU,EAAE,IAAI,KAAK,qBAAqB,EAAE,CAAC;4BAC/C,QAAQ,CAAC,KAAK,CAAC;gCACX,QAAQ,EAAE,IAAI;gCACd,QAAQ,EAAE,oBAAoB;gCAC9B,OAAO,EAAE,CAAC,CAAC,iDAAiD,CAAC;gCAC7D,WAAW,EAAE,CAAC,CAAC,qDAAqD,CAAC;gCACrE,QAAQ,EAAE,IAAI;6BACjB,CAAC,CAAC;wBACP,CAAC;6BAAM,CAAC;4BACJ,QAAQ,CAAC,KAAK,CAAC;gCACX,QAAQ,EAAE,IAAI;gCACd,QAAQ,EAAE,oBAAoB;gCAC9B,OAAO,EAAE,CAAC,CAAC,0CAA0C,CAAC;gCACtD,WAAW,EAAE,CAAC,CAAC,8CAA8C,EAAE,EAAC,KAAK,EAAE,KAAK,EAAC,CAAC;gCAC9E,QAAQ,EAAE,IAAI;6BACjB,CAAC,CAAC;wBACP,CAAC;oBACL,CAAC;gBACL,CAAC;aACJ,CAAC,CAAC;QACP,CAAC;KACJ,CAAC,EACF,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,aAAa,EAAE,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,CACjE,CAAC;IAEF,OAAO;QACH,gBAAgB,EAAE,SAAS,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,IAAI;KACzD,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 {type Dispatch, useMemo} from 'react';\nimport {FaFileExport} from 'react-icons/fa';\nimport {KitAlert, KitModal, KitNotification} from 'aristid-ds';\nimport {useExportLazyQuery} from '_ui/_gqlTypes';\nimport {useSharedTranslation} from '_ui/hooks/useSharedTranslation';\nimport {type FeatureHook, type IMassActions} from '../_types';\nimport {type IViewSettingsAction, type IViewSettingsState} from '../manage-view-settings';\nimport {BREAK_TWO_LINES, MASS_SELECTION_ALL} from '../_constants';\nimport {ERROR_ALERT_DURATION, INFO_NOTIFICATION_DURATION} from '_ui/constants';\n\n/**\n * Hook that provides a mass action configuration for exporting selected or all items\n * from a view/data set\n */\nexport const useExportMassAction = ({\n isEnabled,\n store: {view, dispatch},\n totalCount,\n onExport,\n}: FeatureHook<{\n store: {\n view: IViewSettingsState;\n dispatch: Dispatch<IViewSettingsAction>;\n };\n totalCount: number;\n onExport?: IMassActions['callback'];\n}>) => {\n const {t} = useSharedTranslation();\n\n const [exportQuery] = useExportLazyQuery();\n\n const _exportMassAction: IMassActions = useMemo(\n () => ({\n label: t('explorer.massAction.export'),\n icon: <FaFileExport />,\n deselectAll: false,\n callback: massSelectionFilter => {\n KitModal.confirm({\n width: '100%',\n style: {content: {width: '90vw', maxWidth: '656px'}},\n icon: false,\n type: 'confirm',\n title:\n t('explorer.export_item', {\n count: view.massSelection === MASS_SELECTION_ALL ? Infinity : view.massSelection.length,\n }) ?? undefined,\n content:\n t('explorer.export_item_description', {\n count: view.massSelection === MASS_SELECTION_ALL ? Infinity : view.massSelection.length,\n }) +\n BREAK_TWO_LINES +\n t('global.are_you_sure'),\n okText: t('global.confirm') ?? undefined,\n cancelText: t('global.cancel') ?? undefined,\n onOk: async () => {\n const total =\n view.massSelection === MASS_SELECTION_ALL ? totalCount : view.massSelection.length;\n try {\n const {error} = await exportQuery({\n fetchPolicy: 'no-cache',\n variables: {\n library: view.libraryId,\n filters: massSelectionFilter,\n profile: 'default', // Set 'default' by default, it'll change when we can select a profile from the UI\n },\n });\n if (error) {\n // Preserve the extensions property which contains the error code\n const graphQLError = error.graphQLErrors?.[0];\n const errorWithExtensions = new Error(error.message);\n (errorWithExtensions as any).extensions = graphQLError?.extensions;\n throw errorWithExtensions;\n }\n\n KitNotification.info({\n message: t('explorer.massAction.export_message'),\n description: t('explorer.massAction.export_description', {\n count: total,\n total,\n }),\n duration: INFO_NOTIFICATION_DURATION,\n closable: true,\n });\n\n onExport?.(massSelectionFilter, view.massSelection);\n } catch (e) {\n if (e.extensions?.code === 'CUSTOM_CONFIG_ERROR') {\n KitAlert.error({\n showIcon: true,\n duration: ERROR_ALERT_DURATION,\n message: t('explorer.massAction.export_config_error_message'),\n description: t('explorer.massAction.export_config_error_description'),\n closable: true,\n });\n } else {\n KitAlert.error({\n showIcon: true,\n duration: ERROR_ALERT_DURATION,\n message: t('explorer.massAction.export_error_message'),\n description: t('explorer.massAction.export_error_description', {count: total}),\n closable: true,\n });\n }\n }\n },\n });\n },\n }),\n [t, exportQuery, view.massSelection, dispatch, view.libraryId],\n );\n\n return {\n exportMassAction: isEnabled ? _exportMassAction : null,\n };\n};\n"]}
@@ -4,7 +4,7 @@ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-run
4
4
  // License text available at https://www.gnu.org/licenses/lgpl-3.0.txt
5
5
  import { useEffect, useState } from 'react';
6
6
  import styled from 'styled-components';
7
- import { KitRadio, KitSpace, KitTypography, useKitNotification } from 'aristid-ds';
7
+ import { KitRadio, KitSpace, KitTypography, KitNotification } from 'aristid-ds';
8
8
  import { useSharedTranslation } from '../../../hooks/useSharedTranslation';
9
9
  import { useViewSettingsContext } from '../manage-view-settings/store-view-settings/useViewSettingsContext';
10
10
  import { localizedTranslation } from '@leav/utils';
@@ -17,6 +17,7 @@ import { useEditLabelView } from '../manage-view-settings/save-view/useEditLabel
17
17
  import { IoCopy } from 'react-icons/io5';
18
18
  import classNames from 'classnames';
19
19
  import { DefaultViewId } from '../manage-view-settings/store-view-settings/viewSettingsInitialState';
20
+ import { INFO_NOTIFICATION_DURATION } from '../../../constants';
20
21
  const ContentWrapperStyledDiv = styled.div `
21
22
  display: flex;
22
23
  flex-direction: column;
@@ -69,7 +70,6 @@ const StyledCopySpan = styled.span `
69
70
  `;
70
71
  export const SavedViews = () => {
71
72
  const { t } = useSharedTranslation();
72
- const { kitNotification } = useKitNotification();
73
73
  const { availableLangs } = useLang();
74
74
  const { view } = useViewSettingsContext();
75
75
  const { loadView } = useLoadView();
@@ -93,19 +93,21 @@ export const SavedViews = () => {
93
93
  e.preventDefault();
94
94
  e.stopPropagation();
95
95
  await navigator.clipboard.writeText(viewItem.id || '');
96
- kitNotification.info({
96
+ KitNotification.info({
97
97
  message: `Id : ${viewItem?.id}`,
98
98
  description: t('explorer.viewList.copied'),
99
- duration: 3,
99
+ duration: INFO_NOTIFICATION_DURATION,
100
+ closable: true,
100
101
  });
101
102
  }, children: _jsx(IoCopy, {}) }))] }), _jsx(StyledIconsDiv, { children: _jsxs(KitSpace, { children: [iconEditLabel(viewItem), iconDelete(viewItem)] }) })] }, viewItem.id)))] }), _jsxs(StyleKitRadioGroup, { onChange: _onClickLoadView, value: currentView?.id, children: [_jsx(KitTypography.Title, { level: "h4", children: t('explorer.viewList.shared-views') }), sharedViews.length === 0 ? (_jsx(KitTypography.Text, { size: "fontSize5", children: t('explorer.viewList.no-shared-views') })) : (sharedViews.map(viewItem => (_jsxs(StyledViewDiv, { className: _selectedViewClass(viewItem.id), children: [_jsxs(KitRadio, { value: viewItem.id, children: [localizedTranslation(viewItem.label, availableLangs), viewItem?.id && (_jsx(StyledCopySpan, { title: `${t('explorer.viewList.copy-id')} : ${viewItem?.id}`, onClick: async (e) => {
102
103
  e.preventDefault();
103
104
  e.stopPropagation();
104
105
  await navigator.clipboard.writeText(viewItem.id || '');
105
- kitNotification.info({
106
+ KitNotification.info({
106
107
  message: `Id : ${viewItem?.id}`,
107
108
  description: t('explorer.viewList.copied'),
108
- duration: 3,
109
+ duration: INFO_NOTIFICATION_DURATION,
110
+ closable: true,
109
111
  });
110
112
  }, children: _jsx(IoCopy, {}) }))] }), isOwnerView(viewItem.ownerId) ? (_jsx(StyledIconsDiv, { children: _jsxs(KitSpace, { children: [iconEditLabel(viewItem), iconDelete(viewItem)] }) })) : null] }, viewItem.id))))] })] }), _jsx(ViewActionsButtons, {})] })] }));
111
113
  };
@@ -1 +1 @@
1
- {"version":3,"file":"SavedViews.js","sourceRoot":"","sources":["../../../../src/components/Explorer/list-saved-views/SavedViews.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 {KitRadio, KitSpace, KitTypography, useKitNotification} from 'aristid-ds';\nimport {useSharedTranslation} from '_ui/hooks/useSharedTranslation';\nimport {useViewSettingsContext} from '../manage-view-settings/store-view-settings/useViewSettingsContext';\nimport {localizedTranslation} from '@leav/utils';\nimport {useLang} from '_ui/hooks';\nimport {ViewActionsButtons} from '../manage-view-settings/save-view/ViewActionsButtons';\nimport {useLoadView} from '../useLoadView';\nimport {type Radio} from 'antd';\nimport {useMeQuery} from '_ui/_gqlTypes';\nimport {useDeleteView} from '../manage-view-settings/save-view/useDeleteView';\nimport {useEditLabelView} from '../manage-view-settings/save-view/useEditLabelView';\nimport {IoCopy} from 'react-icons/io5';\nimport {type IUserView} from '../_types';\nimport classNames from 'classnames';\nimport {DefaultViewId} from '../manage-view-settings/store-view-settings/viewSettingsInitialState';\n\nconst ContentWrapperStyledDiv = styled.div`\n display: flex;\n flex-direction: column;\n justify-content: space-between;\n height: 100%;\n`;\n\nconst StyledListViewsDiv = styled.div`\n display: flex;\n flex-direction: column;\n`;\n\nconst StyleKitRadioGroup = styled(KitRadio.Group)`\n padding: calc(var(--general-spacing-s) * 1px) 0;\n margin: 0 0 calc(var(--general-spacing-xs) * 1px) 0;\n color: var(--general-utilities-text-primary);\n gap: calc(var(--general-spacing-xs) * 1px);\n`;\n\nconst StyledViewDiv = styled.div`\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: calc(var(--general-spacing-xs) * 1px);\n border-radius: calc(var(--general-border-radius-xs) * 1px);\n\n &.selected,\n &:has(label:hover),\n &:has(svg:hover) {\n background: var(--general-utilities-main-light);\n }\n`;\n\nconst StyledIconsDiv = styled.div`\n .edit,\n .delete {\n font-size: calc(var(--general-typography-fontSize5) * 1px);\n flex: 0 0 auto;\n cursor: pointer;\n display: inline-block;\n }\n\n .edit {\n color: var(--general-utilities-main-default);\n }\n\n .delete {\n color: var(--general-utilities-error-default);\n }\n`;\n\nconst StyledCopySpan = styled.span`\n margin-left: calc(var(--general-spacing-xs) * 1px);\n color: var(--general-colors-neutral-grey-400);\n`;\n\nexport const SavedViews: FunctionComponent = () => {\n const {t} = useSharedTranslation();\n const {kitNotification} = useKitNotification();\n const {availableLangs} = useLang();\n const {view} = useViewSettingsContext();\n const {loadView} = useLoadView();\n const {iconDelete, deleteModal} = useDeleteView();\n const {iconEditLabel, editViewModal} = useEditLabelView();\n\n const [currentView, setCurrentView] = useState<IUserView | undefined>(\n view.savedViews.find(viewItem => view.viewId === viewItem.id) ?? undefined,\n );\n\n const {data: userData} = useMeQuery();\n\n const isOwnerView = (ownerId: string | null) => ownerId === userData?.me?.whoAmI?.id;\n\n const sharedViews = view.savedViews.filter(viewItem => viewItem.shared);\n const myViews = view.savedViews.filter(viewItem => !viewItem.shared);\n\n const _selectedViewClass = (viewId: string | null) =>\n classNames({\n selected: view.viewId === viewId,\n });\n\n useEffect(() => {\n setCurrentView(view.savedViews.find(viewItem => view.viewId === viewItem.id) ?? undefined);\n }, [view.viewId]);\n\n const _onClickLoadView: ComponentProps<typeof Radio>['onChange'] = e => {\n loadView(e.target.value);\n };\n\n return (\n <>\n {editViewModal}\n {deleteModal}\n <ContentWrapperStyledDiv>\n <StyledListViewsDiv>\n <StyleKitRadioGroup onChange={_onClickLoadView} value={currentView?.id}>\n <KitTypography.Title level=\"h4\">{t('explorer.viewList.my-views')}</KitTypography.Title>\n <StyledViewDiv className={_selectedViewClass(DefaultViewId)}>\n <KitRadio value={undefined}>{t('explorer.viewList.default-view')}</KitRadio>\n </StyledViewDiv>\n {myViews.map(viewItem => (\n <StyledViewDiv className={_selectedViewClass(viewItem.id)} key={viewItem.id}>\n <KitRadio value={viewItem.id}>\n {localizedTranslation(viewItem.label, availableLangs)}\n {viewItem?.id && (\n <StyledCopySpan\n title={`${t('explorer.viewList.copy-id')} : ${viewItem?.id}`}\n onClick={async e => {\n e.preventDefault();\n e.stopPropagation();\n await navigator.clipboard.writeText(viewItem.id || '');\n kitNotification.info({\n message: `Id : ${viewItem?.id}`,\n description: t('explorer.viewList.copied'),\n duration: 3,\n });\n }}\n >\n <IoCopy />\n </StyledCopySpan>\n )}\n </KitRadio>\n <StyledIconsDiv>\n <KitSpace>\n {iconEditLabel(viewItem)}\n {iconDelete(viewItem)}\n </KitSpace>\n </StyledIconsDiv>\n </StyledViewDiv>\n ))}\n </StyleKitRadioGroup>\n <StyleKitRadioGroup onChange={_onClickLoadView} value={currentView?.id}>\n <KitTypography.Title level=\"h4\">{t('explorer.viewList.shared-views')}</KitTypography.Title>\n {sharedViews.length === 0 ? (\n <KitTypography.Text size=\"fontSize5\">\n {t('explorer.viewList.no-shared-views')}\n </KitTypography.Text>\n ) : (\n sharedViews.map(viewItem => (\n <StyledViewDiv className={_selectedViewClass(viewItem.id)} key={viewItem.id}>\n <KitRadio value={viewItem.id}>\n {localizedTranslation(viewItem.label, availableLangs)}\n {viewItem?.id && (\n <StyledCopySpan\n title={`${t('explorer.viewList.copy-id')} : ${viewItem?.id}`}\n onClick={async e => {\n e.preventDefault();\n e.stopPropagation();\n await navigator.clipboard.writeText(viewItem.id || '');\n kitNotification.info({\n message: `Id : ${viewItem?.id}`,\n description: t('explorer.viewList.copied'),\n duration: 3,\n });\n }}\n >\n <IoCopy />\n </StyledCopySpan>\n )}\n </KitRadio>\n {isOwnerView(viewItem.ownerId) ? (\n <StyledIconsDiv>\n <KitSpace>\n {iconEditLabel(viewItem)}\n {iconDelete(viewItem)}\n </KitSpace>\n </StyledIconsDiv>\n ) : null}\n </StyledViewDiv>\n ))\n )}\n </StyleKitRadioGroup>\n </StyledListViewsDiv>\n <ViewActionsButtons />\n </ContentWrapperStyledDiv>\n </>\n );\n};\n"]}
1
+ {"version":3,"file":"SavedViews.js","sourceRoot":"","sources":["../../../../src/components/Explorer/list-saved-views/SavedViews.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 {KitRadio, KitSpace, KitTypography, KitNotification} from 'aristid-ds';\nimport {useSharedTranslation} from '_ui/hooks/useSharedTranslation';\nimport {useViewSettingsContext} from '../manage-view-settings/store-view-settings/useViewSettingsContext';\nimport {localizedTranslation} from '@leav/utils';\nimport {useLang} from '_ui/hooks';\nimport {ViewActionsButtons} from '../manage-view-settings/save-view/ViewActionsButtons';\nimport {useLoadView} from '../useLoadView';\nimport {type Radio} from 'antd';\nimport {useMeQuery} from '_ui/_gqlTypes';\nimport {useDeleteView} from '../manage-view-settings/save-view/useDeleteView';\nimport {useEditLabelView} from '../manage-view-settings/save-view/useEditLabelView';\nimport {IoCopy} from 'react-icons/io5';\nimport {type IUserView} from '../_types';\nimport classNames from 'classnames';\nimport {DefaultViewId} from '../manage-view-settings/store-view-settings/viewSettingsInitialState';\nimport {INFO_NOTIFICATION_DURATION} from '_ui/constants';\n\nconst ContentWrapperStyledDiv = styled.div`\n display: flex;\n flex-direction: column;\n justify-content: space-between;\n height: 100%;\n`;\n\nconst StyledListViewsDiv = styled.div`\n display: flex;\n flex-direction: column;\n`;\n\nconst StyleKitRadioGroup = styled(KitRadio.Group)`\n padding: calc(var(--general-spacing-s) * 1px) 0;\n margin: 0 0 calc(var(--general-spacing-xs) * 1px) 0;\n color: var(--general-utilities-text-primary);\n gap: calc(var(--general-spacing-xs) * 1px);\n`;\n\nconst StyledViewDiv = styled.div`\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: calc(var(--general-spacing-xs) * 1px);\n border-radius: calc(var(--general-border-radius-xs) * 1px);\n\n &.selected,\n &:has(label:hover),\n &:has(svg:hover) {\n background: var(--general-utilities-main-light);\n }\n`;\n\nconst StyledIconsDiv = styled.div`\n .edit,\n .delete {\n font-size: calc(var(--general-typography-fontSize5) * 1px);\n flex: 0 0 auto;\n cursor: pointer;\n display: inline-block;\n }\n\n .edit {\n color: var(--general-utilities-main-default);\n }\n\n .delete {\n color: var(--general-utilities-error-default);\n }\n`;\n\nconst StyledCopySpan = styled.span`\n margin-left: calc(var(--general-spacing-xs) * 1px);\n color: var(--general-colors-neutral-grey-400);\n`;\n\nexport const SavedViews: FunctionComponent = () => {\n const {t} = useSharedTranslation();\n const {availableLangs} = useLang();\n const {view} = useViewSettingsContext();\n const {loadView} = useLoadView();\n const {iconDelete, deleteModal} = useDeleteView();\n const {iconEditLabel, editViewModal} = useEditLabelView();\n\n const [currentView, setCurrentView] = useState<IUserView | undefined>(\n view.savedViews.find(viewItem => view.viewId === viewItem.id) ?? undefined,\n );\n\n const {data: userData} = useMeQuery();\n\n const isOwnerView = (ownerId: string | null) => ownerId === userData?.me?.whoAmI?.id;\n\n const sharedViews = view.savedViews.filter(viewItem => viewItem.shared);\n const myViews = view.savedViews.filter(viewItem => !viewItem.shared);\n\n const _selectedViewClass = (viewId: string | null) =>\n classNames({\n selected: view.viewId === viewId,\n });\n\n useEffect(() => {\n setCurrentView(view.savedViews.find(viewItem => view.viewId === viewItem.id) ?? undefined);\n }, [view.viewId]);\n\n const _onClickLoadView: ComponentProps<typeof Radio>['onChange'] = e => {\n loadView(e.target.value);\n };\n\n return (\n <>\n {editViewModal}\n {deleteModal}\n <ContentWrapperStyledDiv>\n <StyledListViewsDiv>\n <StyleKitRadioGroup onChange={_onClickLoadView} value={currentView?.id}>\n <KitTypography.Title level=\"h4\">{t('explorer.viewList.my-views')}</KitTypography.Title>\n <StyledViewDiv className={_selectedViewClass(DefaultViewId)}>\n <KitRadio value={undefined}>{t('explorer.viewList.default-view')}</KitRadio>\n </StyledViewDiv>\n {myViews.map(viewItem => (\n <StyledViewDiv className={_selectedViewClass(viewItem.id)} key={viewItem.id}>\n <KitRadio value={viewItem.id}>\n {localizedTranslation(viewItem.label, availableLangs)}\n {viewItem?.id && (\n <StyledCopySpan\n title={`${t('explorer.viewList.copy-id')} : ${viewItem?.id}`}\n onClick={async e => {\n e.preventDefault();\n e.stopPropagation();\n await navigator.clipboard.writeText(viewItem.id || '');\n KitNotification.info({\n message: `Id : ${viewItem?.id}`,\n description: t('explorer.viewList.copied'),\n duration: INFO_NOTIFICATION_DURATION,\n closable: true,\n });\n }}\n >\n <IoCopy />\n </StyledCopySpan>\n )}\n </KitRadio>\n <StyledIconsDiv>\n <KitSpace>\n {iconEditLabel(viewItem)}\n {iconDelete(viewItem)}\n </KitSpace>\n </StyledIconsDiv>\n </StyledViewDiv>\n ))}\n </StyleKitRadioGroup>\n <StyleKitRadioGroup onChange={_onClickLoadView} value={currentView?.id}>\n <KitTypography.Title level=\"h4\">{t('explorer.viewList.shared-views')}</KitTypography.Title>\n {sharedViews.length === 0 ? (\n <KitTypography.Text size=\"fontSize5\">\n {t('explorer.viewList.no-shared-views')}\n </KitTypography.Text>\n ) : (\n sharedViews.map(viewItem => (\n <StyledViewDiv className={_selectedViewClass(viewItem.id)} key={viewItem.id}>\n <KitRadio value={viewItem.id}>\n {localizedTranslation(viewItem.label, availableLangs)}\n {viewItem?.id && (\n <StyledCopySpan\n title={`${t('explorer.viewList.copy-id')} : ${viewItem?.id}`}\n onClick={async e => {\n e.preventDefault();\n e.stopPropagation();\n await navigator.clipboard.writeText(viewItem.id || '');\n KitNotification.info({\n message: `Id : ${viewItem?.id}`,\n description: t('explorer.viewList.copied'),\n duration: INFO_NOTIFICATION_DURATION,\n closable: true,\n });\n }}\n >\n <IoCopy />\n </StyledCopySpan>\n )}\n </KitRadio>\n {isOwnerView(viewItem.ownerId) ? (\n <StyledIconsDiv>\n <KitSpace>\n {iconEditLabel(viewItem)}\n {iconDelete(viewItem)}\n </KitSpace>\n </StyledIconsDiv>\n ) : null}\n </StyledViewDiv>\n ))\n )}\n </StyleKitRadioGroup>\n </StyledListViewsDiv>\n <ViewActionsButtons />\n </ContentWrapperStyledDiv>\n </>\n );\n};\n"]}
@@ -47,7 +47,9 @@ export const useGetTreeFilters = ({ libraryId, skip }) => {
47
47
  };
48
48
  }));
49
49
  const attributeRecords = treeResponse.reduce((acc, item) => {
50
- acc[item.attributeId] = item.recordIds;
50
+ if (item.recordIds.length > 0) {
51
+ acc[item.attributeId] = item.recordIds;
52
+ }
51
53
  return acc;
52
54
  }, {});
53
55
  setTreeFilters(attributeRecords);
@@ -1 +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"]}
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 if (item.recordIds.length > 0) {\n acc[item.attributeId] = item.recordIds;\n }\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"]}