@leav/ui 1.5.0 → 1.5.1-10050692
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/__mocks__/common/attribute.js +1 -0
- package/dist/__mocks__/common/attribute.js.map +1 -1
- package/dist/__mocks__/common/library.d.ts +9 -0
- package/dist/_gqlTypes/index.d.ts +222 -27
- package/dist/_gqlTypes/index.js +150 -12
- package/dist/_gqlTypes/index.js.map +1 -1
- package/dist/_queries/attributes/attributeDetailsFragment.js +1 -0
- package/dist/_queries/attributes/attributeDetailsFragment.js.map +1 -1
- package/dist/_queries/libraries/libraryDetailsFragment.js +7 -0
- package/dist/_queries/libraries/libraryDetailsFragment.js.map +1 -1
- package/dist/components/Explorer/DataView.js +4 -3
- package/dist/components/Explorer/DataView.js.map +1 -1
- package/dist/components/Explorer/Explorer.d.ts +1 -1
- package/dist/components/Explorer/Explorer.js +17 -4
- package/dist/components/Explorer/Explorer.js.map +1 -1
- package/dist/components/Explorer/ExplorerFiltersAndSorts.d.ts +1 -0
- package/dist/components/Explorer/ExplorerFiltersAndSorts.js +2 -2
- package/dist/components/Explorer/ExplorerFiltersAndSorts.js.map +1 -1
- package/dist/components/Explorer/ExplorerToolbar.d.ts +1 -0
- package/dist/components/Explorer/ExplorerToolbar.js +2 -2
- package/dist/components/Explorer/ExplorerToolbar.js.map +1 -1
- package/dist/components/Explorer/IdCard.js +2 -2
- package/dist/components/Explorer/IdCard.js.map +1 -1
- package/dist/components/Explorer/_queries/useExplorerData.js +13 -2
- package/dist/components/Explorer/_queries/useExplorerData.js.map +1 -1
- package/dist/components/Explorer/actions-mass/edit-attribute/EditAttributeMassActionModal.d.ts +13 -0
- package/dist/components/Explorer/actions-mass/edit-attribute/EditAttributeMassActionModal.js +20 -0
- package/dist/components/Explorer/actions-mass/edit-attribute/EditAttributeMassActionModal.js.map +1 -0
- package/dist/components/Explorer/actions-mass/edit-attribute/EditTreeAttributeValueLine.d.ts +10 -0
- package/dist/components/Explorer/actions-mass/edit-attribute/EditTreeAttributeValueLine.js +38 -0
- package/dist/components/Explorer/actions-mass/edit-attribute/EditTreeAttributeValueLine.js.map +1 -0
- package/dist/components/Explorer/actions-mass/edit-attribute/EditTreeAttributeValuesMapping.d.ts +8 -0
- package/dist/components/Explorer/actions-mass/edit-attribute/EditTreeAttributeValuesMapping.js +16 -0
- package/dist/components/Explorer/actions-mass/edit-attribute/EditTreeAttributeValuesMapping.js.map +1 -0
- package/dist/components/Explorer/actions-mass/edit-attribute/useCountValuesOccurrencesHook.d.ts +10 -0
- package/dist/components/Explorer/actions-mass/edit-attribute/useCountValuesOccurrencesHook.js +28 -0
- package/dist/components/Explorer/actions-mass/edit-attribute/useCountValuesOccurrencesHook.js.map +1 -0
- package/dist/components/Explorer/actions-mass/edit-attribute/useListEditableAttributeHook.d.ts +5 -0
- package/dist/components/Explorer/actions-mass/edit-attribute/useListEditableAttributeHook.js +12 -0
- package/dist/components/Explorer/actions-mass/edit-attribute/useListEditableAttributeHook.js.map +1 -0
- package/dist/components/Explorer/actions-mass/edit-attribute/useListTreeAttributeValuesHook.d.ts +5 -0
- package/dist/components/Explorer/actions-mass/edit-attribute/useListTreeAttributeValuesHook.js +20 -0
- package/dist/components/Explorer/actions-mass/edit-attribute/useListTreeAttributeValuesHook.js.map +1 -0
- package/dist/components/Explorer/actions-mass/useDeleteLinkValues.js.map +1 -1
- package/dist/components/Explorer/actions-mass/useEditAttributeMassAction.d.ts +11 -0
- package/dist/components/Explorer/actions-mass/useEditAttributeMassAction.js +106 -0
- package/dist/components/Explorer/actions-mass/useEditAttributeMassAction.js.map +1 -0
- package/dist/components/Explorer/actions-mass/useExportMassAction.js +5 -6
- package/dist/components/Explorer/actions-mass/useExportMassAction.js.map +1 -1
- package/dist/components/Explorer/useLoadView.js +0 -2
- package/dist/components/Explorer/useLoadView.js.map +1 -1
- package/dist/components/Filters/_types.d.ts +4 -0
- package/dist/components/Filters/_types.js.map +1 -1
- package/dist/components/Filters/context/filtersReducer.js +20 -11
- package/dist/components/Filters/context/filtersReducer.js.map +1 -1
- package/dist/components/Filters/context/useFiltersReducer.d.ts +2 -1
- package/dist/components/Filters/context/useFiltersReducer.js +9 -5
- package/dist/components/Filters/context/useFiltersReducer.js.map +1 -1
- package/dist/components/Filters/context/useGetTreeFilters.d.ts +15 -0
- package/dist/components/Filters/context/useGetTreeFilters.js +63 -0
- package/dist/components/Filters/context/useGetTreeFilters.js.map +1 -0
- package/dist/components/Filters/filter-items/filter-type/TextAttributeDropDown.js +24 -7
- package/dist/components/Filters/filter-items/filter-type/TextAttributeDropDown.js.map +1 -1
- package/dist/components/Filters/filter-items/filter-type/TreeAttributeDropDown.js +15 -17
- package/dist/components/Filters/filter-items/filter-type/TreeAttributeDropDown.js.map +1 -1
- package/dist/components/Filters/index.js.map +1 -1
- package/dist/components/Filters/prepareFiltersForRequest.js +14 -5
- package/dist/components/Filters/prepareFiltersForRequest.js.map +1 -1
- package/dist/components/Filters/useFilters.d.ts +4 -0
- package/dist/components/Filters/useTransformFilters.d.ts +5 -1
- package/dist/components/Filters/useTransformFilters.js +26 -3
- package/dist/components/Filters/useTransformFilters.js.map +1 -1
- package/dist/components/LibraryPicker/LibrariesList/LibrariesList.js +1 -1
- package/dist/components/LibraryPicker/LibrariesList/LibrariesList.js.map +1 -1
- package/dist/components/RecordEdition/EditRecordContent/uiElements/StandardField/StandardFieldValue/DSRichTextWrapper.js +10 -2
- package/dist/components/RecordEdition/EditRecordContent/uiElements/StandardField/StandardFieldValue/DSRichTextWrapper.js.map +1 -1
- package/dist/components/RecordEdition/EditRecordContent/uiElements/TreeField/display-tree-node/TreeNodeList.js +1 -1
- package/dist/components/RecordEdition/EditRecordContent/uiElements/TreeField/display-tree-node/TreeNodeList.js.map +1 -1
- package/dist/components/RecordHistory/RecordHistory.js +11 -6
- package/dist/components/RecordHistory/RecordHistory.js.map +1 -1
- package/dist/components/RecordHistory/RecordHistoryLogEntry.js +13 -7
- package/dist/components/RecordHistory/RecordHistoryLogEntry.js.map +1 -1
- package/dist/components/SearchModal/SearchModal.js +1 -1
- package/dist/components/SearchModal/SearchModal.js.map +1 -1
- package/dist/components/SelectTreeNode/SelectTreeNodeContent.js +4 -1
- package/dist/components/SelectTreeNode/SelectTreeNodeContent.js.map +1 -1
- package/dist/components/TreePicker/TreesList/TreesList.js +1 -1
- package/dist/components/TreePicker/TreesList/TreesList.js.map +1 -1
- package/dist/constants.d.ts +1 -0
- package/dist/constants.js +1 -0
- package/dist/constants.js.map +1 -1
- package/dist/hooks/useIFrameMessenger/messageHandlers.d.ts +3 -1
- package/dist/hooks/useIFrameMessenger/messageHandlers.js +12 -0
- package/dist/hooks/useIFrameMessenger/messageHandlers.js.map +1 -1
- package/dist/hooks/useIFrameMessenger/schema.d.ts +38 -4
- package/dist/hooks/useIFrameMessenger/schema.js +10 -5
- package/dist/hooks/useIFrameMessenger/schema.js.map +1 -1
- package/dist/hooks/useIFrameMessenger/types.d.ts +20 -2
- package/dist/hooks/useIFrameMessenger/types.js.map +1 -1
- package/dist/hooks/useIFrameMessenger/useIFrameMessenger.d.ts +2 -0
- package/dist/hooks/useIFrameMessengerClient/iFrameMessengerClientContext.d.ts +2 -0
- package/dist/hooks/useIFrameMessengerClient/useIFrameMessengerClient.d.ts +2 -0
- package/dist/locales/en/shared.json +14 -2
- package/dist/locales/fr/shared.json +14 -2
- package/package.json +6 -7
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TreeAttributeDropDown.js","sourceRoot":"","sources":["../../../../../src/components/Filters/filter-items/filter-type/TreeAttributeDropDown.tsx"],"names":[],"mappings":";
|
|
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 = (filter.nodes ?? []).map(node => node.nodeId);\n\n const {conditionOptionsByType: availableConditionsOptions} = useConditionsOptionsByType(filter);\n\n const _handleOnSelect = (node: ITreeNodeWithRecord, selected: boolean) => {\n let newSelectedIds: string[];\n if (selected) {\n newSelectedIds = [...selectedNodesIds, node.id];\n } else {\n newSelectedIds = selectedNodesIds.filter(selectedValue => selectedValue !== node.id);\n }\n onFilterChange({\n ...filter,\n nodes: newSelectedIds.map(id => ({nodeId: id, libraryId: node.record.whoAmI.library.id})),\n });\n };\n\n const _onConditionChanged: ComponentProps<typeof KitSelect>['onChange'] = condition =>\n onFilterChange({...filter, condition});\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 const newSelectedNodes = selection.filter(node => !node?.disabled);\n\n const records = _getRecursiveChildrenRecord(selection);\n const fields = _getRecursiveFieldsFromLibraries(selection);\n\n onFilterChange({\n ...filter,\n nodes: newSelectedNodes.map(node => ({\n nodeId: node.id,\n libraryId: node.record?.whoAmI.library.id ?? records[0]?.whoAmI.library.id ?? '',\n })),\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={false}\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.
|
|
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
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
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[0].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":"AAAA,oFAAoF;AACpF,sCAAsC;AACtC,sEAAsE;AACtE,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAC,eAAe,EAAE,qBAAqB,EAA0B,oBAAoB,EAAC,MAAM,eAAe,CAAC;AACnH,OAAO,EAAC,iBAAiB,EAAC,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAC,wBAAwB,EAAC,MAAM,WAAW,CAAC;AACnD,OAAO,EAIH,kBAAkB,EAClB,iBAAiB,EACjB,cAAc,EACd,mBAAmB,EAGnB,2BAA2B,GAC9B,MAAM,UAAU,CAAC;AAClB,OAAO,EAAC,mBAAmB,EAAC,MAAM,oBAAoB,CAAC;AAEvD,MAAM,CAAC,MAAM,mBAAmB,GAAG,IAAI,CAAC;AAExC,MAAM,cAAc,GAAG,CAAC,IAAY,EAAU,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE,CAAC;AAE5G,MAAM,sBAAsB,GAAG,CAAC,EAAC,KAAK,EAAE,SAAS,EAAE,KAAK,EAAoB,EAAuB,EAAE;IACjG,QAAQ,SAAS,EAAE,CAAC;QAChB,KAAK,qBAAqB,CAAC,OAAO;YAC9B,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,KAAM,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;YACrD,OAAO;gBACH;oBACI,KAAK;oBACL,SAAS;oBACT,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC;wBAClB,IAAI;wBACJ,EAAE;qBACL,CAAC;iBACL;aACJ,CAAC;QACN,KAAK,qBAAqB,CAAC,SAAS;YAChC,OAAO;gBACH;oBACI,KAAK;oBACL,SAAS,EAAE,qBAAqB,CAAC,SAAS;oBAC1C,KAAK,EAAE,cAAc,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;iBACvC;aACJ,CAAC;QACN,KAAK,qBAAqB,CAAC,KAAK;YAC5B,OAAO;gBACH;oBACI,KAAK;oBACL,SAAS;oBACT,KAAK,EAAE,cAAc,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;iBACvC;aACJ,CAAC;QACN;YACI,OAAO;gBACH;oBACI,KAAK;oBACL,SAAS;oBACT,KAAK;iBACR;aACJ,CAAC;IACV,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,yBAAyB,GAAG,CAAC,MAAyB,EAAuB,EAAE;IACjF,IAAI,MAAM,CAAC,KAAK,KAAK,OAAO,EAAE,CAAC;QAC3B,OAAO;YACH;gBACI,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,SAAS,EAAE,wBAAwB,CAAC,SAAS;gBAC7C,KAAK,EAAE,MAAM;aAChB;SACJ,CAAC;IACN,CAAC;IAED,OAAO,CAAC,EAAC,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAC,CAAC,CAAC;AACrF,CAAC,CAAC;AAEF,MAAM,wBAAwB,GAAG,CAAC,UAAoB,EAAuB,EAAE,CAAC;IAC5E,EAAC,QAAQ,EAAE,oBAAoB,CAAC,YAAY,EAAC;IAC7C,GAAI,iBAAiB,CACjB,EAAC,QAAQ,EAAE,oBAAoB,CAAC,EAAE,EAAC,EACnC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;QACpB;YACI,KAAK,EAAE,IAAI;YACX,SAAS,EAAE,wBAAwB,CAAC,KAAK;YACzC,KAAK;SACR;KACJ,CAAC,CACmB;IACzB,EAAC,QAAQ,EAAE,oBAAoB,CAAC,aAAa,EAAC;CACjD,CAAC;AAEF,MAAM,qCAAqC,GAAG,CAAC,MAA0C,EAAuB,EAAE;IAC9G,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC7C,OAAO,EAAE,CAAC;IACd,CAAC;IACD,MAAM,oBAAoB,GAAwB,EAAE,CAAC;IACrD,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,GAAG,EAAE,EAAE;QACnC,IAAI,GAAG,KAAK,CAAC,IAAI,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvD,oBAAoB,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAE,oBAAoB,CAAC,YAAY,EAAC,CAAC,CAAC;QAC7E,CAAC;QACD,oBAAoB,CAAC,IAAI,CAAC;YACtB,KAAK,EAAE,QAAQ;YACf,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK;SACxE,CAAC,CAAC;QACH,IAAI,MAAM,CAAC,KAAK,IAAI,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAChD,oBAAoB,CAAC,IAAI,CAAC;gBACtB,QAAQ,EACJ,MAAM,CAAC,SAAS,KAAK,qBAAqB,CAAC,SAAS;oBAChD,CAAC,CAAC,oBAAoB,CAAC,GAAG;oBAC1B,CAAC,CAAC,oBAAoB,CAAC,EAAE;aACpC,CAAC,CAAC;QACP,CAAC;QACD,IAAI,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,GAAG,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5E,oBAAoB,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAE,oBAAoB,CAAC,aAAa,EAAC,CAAC,CAAC;QAC9E,CAAC;IACL,CAAC,CAAC,CAAC;IACH,OAAO,oBAAoB,CAAC;AAChC,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,wBAAwB,GAAG,CACpC,OAAmB,EACnB,eAAiC,EACjC,UAAqB,EACF,EAAE;IACrB,MAAM,gBAAgB,GAAG,iBAAiB,CACtC,EAAC,QAAQ,EAAE,eAAe,KAAK,IAAI,CAAC,CAAC,CAAC,oBAAoB,CAAC,EAAE,CAAC,CAAC,CAAC,oBAAoB,CAAC,GAAG,EAAC,EACzF,OAAO;SACF,MAAM,CAAC,MAAM,CAAC,EAAE;QACb,IAAI,iBAAiB,CAAC,MAAM,CAAC,EAAE,CAAC;YAC5B,OAAO,CACH,MAAM,CAAC,QAAQ;gBACf,MAAM,CAAC,YAAY;gBACnB,CAAC,MAAM,CAAC,KAAK,KAAK,IAAI,IAAI,mBAAmB,CAAC,QAAQ,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAC/E,CAAC;QACN,CAAC;QAED,IAAI,mBAAmB,CAAC,MAAM,CAAC,EAAE,CAAC;YAC9B,OAAO,CACH,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC;gBAC5C,CAAC,MAAM,CAAC,SAAS,IAAI,mBAAmB,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CACvE,CAAC;QACN,CAAC;QAED,OAAO,MAAM,CAAC,KAAK,KAAK,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,IAAI,mBAAmB,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;IACzG,CAAC,CAAC;SACD,GAAG,CAAC,MAAM,CAAC,EAAE;QACV,IAAI,cAAc,CAAC,MAAM,CAAC,EAAE,CAAC;YACzB,OAAO,MAAM,CAAC;QAClB,CAAC;QACD,MAAM,SAAS,GACX,MAAM,CAAC,SAAS,KAAK,wBAAwB,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC;QACnG,IAAI,KAAK,GACL,MAAM,CAAC,SAAS,KAAK,wBAAwB,CAAC,OAAO;YACjD,CAAC,CAAC,GAAG,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,QAAQ,EAAE;YACtC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;QAEvB,kFAAkF;QAClF,IAAI,2BAA2B,CAAC,MAAM,CAAC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YAC7F,KAAK,GAAG,GAAG,KAAK,KAAK,CAAC;QAC1B,CAAC;QAED,OAAO,EAAC,GAAG,MAAM,EAAE,SAAS,EAAE,KAAK,EAAC,CAAC;IACzC,CAAC,CAAC;SACD,GAAG,CAAC,MAAM,CAAC,EAAE;QACV,8DAA8D;QAC9D,IAAI,mBAAmB,CAAC,MAAM,CAAC,IAAI,cAAc,CAAC,MAAM,CAAC,EAAE,CAAC;YACxD,IAAI,MAAM,CAAC,SAAS,IAAI,mBAAmB,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC;gBACrE,OAAO;oBACH;wBACI,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK;wBACnE,SAAS,EAAE,MAAM,CAAC,SAAS;wBAC3B,KAAK,EAAE,IAAI;qBACd;iBACJ,CAAC;YACN,CAAC;YACD,OAAO,qCAAqC,CAAC,MAA4C,CAAC,CAAC;QAC/F,CAAC;QAED,IAAI,kBAAkB,CAAC,MAAkB,CAAC,EAAE,CAAC;YACzC,QAAQ,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC;gBAC9B,KAAK,eAAe,CAAC,IAAI;oBACrB,OAAO,sBAAsB,CAAC,MAA2B,CAAC,CAAC;gBAC/D,KAAK,eAAe,CAAC,OAAO;oBACxB,OAAO,yBAAyB,CAAC,MAA2B,CAAC,CAAC;gBAClE;oBACI,MAAM;YACd,CAAC;QACL,CAAC;QACD,OAAO;YACH;gBACI,KAAK,EAAE,MAAM,CAAC,KAAe;gBAC7B,SAAS,EAAE,MAAM,CAAC,SAAS;gBAC3B,KAAK,EAAE,MAAM,CAAC,KAAK;aACtB;SACJ,CAAC;IACN,CAAC,CAAC,CACT,CAAC;IAEF,OAAO;QACH,GAAG,gBAAgB;QACnB,GAAG,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC,EAAC,QAAQ,EAAE,oBAAoB,CAAC,GAAG,EAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC5F,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,wBAAwB,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;KAC9D,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 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[0].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
|
|
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: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useTransformFilters.js","sourceRoot":"","sources":["../../../src/components/Filters/useTransformFilters.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 AttributeDetailsLinkAttributeFragment,\n type AttributeDetailsTreeAttributeFragment,\n AttributeType,\n type ExplorerAttributesQuery,\n type ExplorerLinkAttributeQuery,\n type GetViewsListQuery,\n type LinkAttributeDetailsFragment,\n RecordFilterCondition,\n type StandardAttributeDetailsFragment,\n type ViewDetailsFilterFragment,\n} from '_ui/_gqlTypes';\nimport {\n type UIFilter,\n type IUIFilterBaseAttribute,\n type IUIFilterLink,\n type IUIFilterLinkValueList,\n type IUIFilterStandard,\n type IUIFilterStandardValueList,\n type IUIFilterThrough,\n type IUIFilterTree,\n type ValidFieldFilter,\n type ValidFieldFilterLinkValuesList,\n type ValidFieldFilterStandardValuesList,\n type ValidFieldFilterThrough,\n type ValidFilter,\n} from './_types';\nimport {ThroughConditionFilter} from '_ui/types';\nimport {isLinkAttribute, isStandardAttribute, isTreeAttribute} from '_ui/_utils/attributeType';\nimport {localizedTranslation} from '@leav/utils';\nimport {useLang} from '_ui/hooks';\nimport {valueListTextConditions} from './filter-items/filter-type/useConditionOptionsByType';\n\nconst _isValidFieldFilter = (filter: ViewDetailsFilterFragment | UIFilter): filter is ValidFieldFilter =>\n !!filter.field;\n\nconst _isValidFieldFilterThrough = (filter: ValidFilter): filter is ValidFieldFilterThrough =>\n filter.condition === ThroughConditionFilter.THROUGH && !!filter.subCondition && !!filter.subField;\n\nconst _isValidFieldFilterStandardValuesList = (\n filter: ValidFilter,\n attribute: NonNullable<ExplorerAttributesQuery['attributes']>['list'][number],\n): filter is ValidFieldFilterStandardValuesList & {attribute: StandardAttributeDetailsFragment} =>\n valueListTextConditions.includes(filter.condition) &&\n [AttributeType.simple, AttributeType.advanced].includes(attribute.type) &&\n 'valuesList' in attribute &&\n !!attribute.valuesList?.enable;\n\nconst _isValidFieldFilterLinkValuesList = (\n filter: ValidFilter,\n attribute: NonNullable<ExplorerAttributesQuery['attributes']>['list'][number],\n): filter is ValidFieldFilterLinkValuesList & {attribute: LinkAttributeDetailsFragment} =>\n valueListTextConditions.includes(filter.condition) &&\n [AttributeType.simple_link, AttributeType.advanced_link].includes(attribute.type) &&\n 'valuesList' in attribute &&\n !!attribute.valuesList?.enable;\n\ntype AttributeDetailsLinkAttributeWithPermissionsFragment = AttributeDetailsLinkAttributeFragment & {\n permissions: {\n access_attribute: boolean;\n };\n};\ntype AttributeDetailsTreeAttributeWithPermissionsFragment = AttributeDetailsTreeAttributeFragment & {\n permissions: {\n access_attribute: boolean;\n };\n};\n\nexport const isLinkAttributeDetails = (\n linkAttributeData: NonNullable<ExplorerLinkAttributeQuery['attributes']>['list'][number],\n): linkAttributeData is LinkAttributeDetailsFragment & {\n id: string;\n multiple_values: boolean;\n permissions: {\n access_attribute: boolean;\n edit_value: boolean;\n };\n} => 'linked_library' in linkAttributeData;\n\nexport type ValidFiltersArgument = GetViewsListQuery['views']['list'][number]['filters'] | UIFilter[];\n\nexport type AttributesById = Record<string, NonNullable<ExplorerAttributesQuery['attributes']>['list'][number]>;\n\nexport const useTransformFilters = () => {\n const {lang} = useLang();\n\n const toValidFilters = (filters: ValidFiltersArgument): ValidFilter[] =>\n (filters ?? []).reduce<ValidFilter[]>((acc, filter) => {\n if (!_isValidFieldFilter(filter)) {\n return acc;\n }\n const _isThroughFilter = filter.field.includes('.');\n\n if (_isThroughFilter) {\n const [field, subField] = filter.field.split('.');\n const throughFilter: ValidFieldFilterThrough = {\n field,\n subField,\n value: filter.value ?? null,\n hidden: filter.hidden ?? false,\n condition: ThroughConditionFilter.THROUGH,\n subCondition: filter.condition,\n };\n acc.push(throughFilter);\n } else {\n acc.push(filter);\n }\n\n return acc;\n }, []);\n\n const toUIFilters = ({\n filters,\n attributesDataById,\n }: {\n filters: ValidFilter[];\n attributesDataById: AttributesById;\n }): UIFilter[] =>\n (filters ?? []).reduce<UIFilter[]>((acc, filter) => {\n if (!attributesDataById[filter.field]) {\n console.warn(`Attribute ${filter.field} from user view not found in database.`);\n return acc;\n }\n\n const filterAttributeBase: IUIFilterBaseAttribute = {\n id: attributesDataById[filter.field].id,\n label: localizedTranslation(attributesDataById[filter.field].label, lang),\n type: attributesDataById[filter.field].type,\n };\n\n // filter is standardFilter\n if (isStandardAttribute(filterAttributeBase.type)) {\n const attributeData = attributesDataById[filter.field];\n if (_isValidFieldFilterStandardValuesList(filter, attributeData)) {\n const newFilter: IUIFilterStandardValueList = {\n field: filter.field,\n // TODO : save filter values as string[] when filter and handle fields with libraries\n value: filter.value ? [filter.value] : [],\n hidden: filter.hidden ?? false,\n id: window.crypto.randomUUID(),\n condition: (filter.condition as RecordFilterCondition) ?? null,\n attribute: {\n ...filterAttributeBase,\n format: attributeData.format!,\n valuesList: (attributeData as StandardAttributeDetailsFragment).valuesList!,\n },\n };\n acc.push(newFilter);\n } else {\n const newFilter: IUIFilterStandard = {\n field: filter.field,\n value: filter.value ?? null,\n hidden: filter.hidden ?? false,\n id: window.crypto.randomUUID(),\n condition: (filter.condition as RecordFilterCondition) ?? null,\n attribute: {\n ...filterAttributeBase,\n format: attributeData.format!,\n },\n };\n acc.push(newFilter);\n }\n }\n\n if (isLinkAttribute(filterAttributeBase.type)) {\n const attributeData = attributesDataById[\n filter.field\n ] as AttributeDetailsLinkAttributeWithPermissionsFragment;\n if (_isValidFieldFilterThrough(filter)) {\n const newFilter: IUIFilterThrough = {\n field: filter.field,\n value: filter.value ?? null,\n hidden: filter.hidden ?? false,\n id: window.crypto.randomUUID(),\n condition: filter.condition,\n attribute: {\n ...filterAttributeBase,\n linkedLibrary: attributeData.linked_library!,\n },\n subCondition: filter.subCondition ?? null,\n subField: filter.subField,\n };\n acc.push(newFilter);\n } else if (_isValidFieldFilterLinkValuesList(filter, attributeData)) {\n const newFilter: IUIFilterLinkValueList = {\n field: filter.field,\n // TODO : save filter values as string[] when filter and handle fields with libraries\n value: filter.value ? [filter.value] : [],\n hidden: filter.hidden ?? false,\n id: window.crypto.randomUUID(),\n condition: filter.condition,\n attribute: {\n ...filterAttributeBase,\n linkedLibrary: attributeData.linked_library!,\n valuesList: (attributeData as LinkAttributeDetailsFragment).valuesList!,\n },\n };\n\n acc.push(newFilter);\n } else {\n const newFilter: IUIFilterLink = {\n field: filter.field,\n value: filter.value ?? null,\n hidden: filter.hidden ?? false,\n id: window.crypto.randomUUID(),\n condition: filter.condition,\n attribute: {\n ...filterAttributeBase,\n linkedLibrary: attributeData.linked_library!,\n },\n };\n\n acc.push(newFilter);\n }\n }\n\n if (isTreeAttribute(filterAttributeBase.type) && !_isValidFieldFilterThrough(filter)) {\n const attributeData = attributesDataById[\n filter.field\n ] as AttributeDetailsTreeAttributeWithPermissionsFragment;\n const newFilter: IUIFilterTree = {\n field: [filter.field],\n // TODO : save filter values as string[] when tree filter and handle fields with libraries\n value: filter.value ? [filter.value] : null,\n hidden: filter.hidden ?? false,\n id: window.crypto.randomUUID(),\n attribute: {\n ...filterAttributeBase,\n linkedTree: attributeData.linked_tree!,\n },\n condition: filter.condition ?? RecordFilterCondition.EQUAL,\n };\n acc.push(newFilter);\n }\n\n return acc;\n }, []);\n\n return {\n toValidFilters,\n toUIFilters,\n };\n};\n"]}
|
|
1
|
+
{"version":3,"file":"useTransformFilters.js","sourceRoot":"","sources":["../../../src/components/Filters/useTransformFilters.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 AttributeDetailsLinkAttributeFragment,\n type AttributeDetailsTreeAttributeFragment,\n AttributeFormat,\n AttributeType,\n type ExplorerAttributesQuery,\n type ExplorerLinkAttributeQuery,\n type GetViewsListQuery,\n type LinkAttributeDetailsFragment,\n RecordFilterCondition,\n type StandardAttributeDetailsFragment,\n type ViewDetailsFilterFragment,\n} from '_ui/_gqlTypes';\nimport {\n type UIFilter,\n type IUIFilterBaseAttribute,\n type IUIFilterLink,\n type IUIFilterLinkValueList,\n type IUIFilterStandard,\n type IUIFilterStandardValueList,\n type IUIFilterThrough,\n type IUIFilterTree,\n type ValidFieldFilter,\n type ValidFieldFilterLinkValuesList,\n type ValidFieldFilterStandardValuesList,\n type ValidFieldFilterThrough,\n type ValidFilter,\n} from './_types';\nimport {ThroughConditionFilter} from '_ui/types';\nimport {isLinkAttribute, isStandardAttribute, isTreeAttribute} from '_ui/_utils/attributeType';\nimport {localizedTranslation} from '@leav/utils';\nimport {useLang} from '_ui/hooks';\nimport {valueListTextConditions} from './filter-items/filter-type/useConditionOptionsByType';\nimport dayjs from 'dayjs';\nimport {type TFunction} from 'i18next';\nimport {type ITreeFilters} from './context/useGetTreeFilters';\n\nconst _isValidFieldFilter = (filter: ViewDetailsFilterFragment | UIFilter): filter is ValidFieldFilter =>\n !!filter.field;\n\nconst _isValidFieldFilterThrough = (filter: ValidFilter): filter is ValidFieldFilterThrough =>\n filter.condition === ThroughConditionFilter.THROUGH && !!filter.subCondition && !!filter.subField;\n\nconst _isValidFieldFilterStandardValuesList = (\n filter: ValidFilter,\n attribute: NonNullable<ExplorerAttributesQuery['attributes']>['list'][number],\n): filter is ValidFieldFilterStandardValuesList & {attribute: StandardAttributeDetailsFragment} =>\n valueListTextConditions.includes(filter.condition) &&\n [AttributeType.simple, AttributeType.advanced].includes(attribute.type) &&\n 'valuesList' in attribute &&\n !!attribute.valuesList?.enable;\n\nconst _isValidFieldFilterLinkValuesList = (\n filter: ValidFilter,\n attribute: NonNullable<ExplorerAttributesQuery['attributes']>['list'][number],\n): filter is ValidFieldFilterLinkValuesList & {attribute: LinkAttributeDetailsFragment} =>\n valueListTextConditions.includes(filter.condition) &&\n [AttributeType.simple_link, AttributeType.advanced_link].includes(attribute.type) &&\n 'valuesList' in attribute &&\n !!attribute.valuesList?.enable;\n\ntype AttributeDetailsLinkAttributeWithPermissionsFragment = AttributeDetailsLinkAttributeFragment & {\n permissions: {\n access_attribute: boolean;\n };\n};\ntype AttributeDetailsTreeAttributeWithPermissionsFragment = AttributeDetailsTreeAttributeFragment & {\n permissions: {\n access_attribute: boolean;\n };\n};\n\nexport const isLinkAttributeDetails = (\n linkAttributeData: NonNullable<ExplorerLinkAttributeQuery['attributes']>['list'][number],\n): linkAttributeData is LinkAttributeDetailsFragment & {\n id: string;\n multiple_values: boolean;\n permissions: {\n access_attribute: boolean;\n edit_value: boolean;\n };\n} => 'linked_library' in linkAttributeData;\n\nexport type ValidFiltersArgument = GetViewsListQuery['views']['list'][number]['filters'] | UIFilter[];\n\nexport type AttributesById = Record<string, NonNullable<ExplorerAttributesQuery['attributes']>['list'][number]>;\n\nexport const useTransformFilters = () => {\n const {lang} = useLang();\n\n const toValidFilters = (filters: ValidFiltersArgument): ValidFilter[] =>\n (filters ?? []).reduce<ValidFilter[]>((acc, filter) => {\n if (!_isValidFieldFilter(filter)) {\n return acc;\n }\n const _isThroughFilter = filter.field.includes('.');\n\n if (_isThroughFilter) {\n const [field, subField] = filter.field.split('.');\n const throughFilter: ValidFieldFilterThrough = {\n field,\n subField,\n value: filter.value ?? null,\n hidden: filter.hidden ?? false,\n condition: ThroughConditionFilter.THROUGH,\n subCondition: filter.condition,\n };\n acc.push(throughFilter);\n } else {\n acc.push(filter);\n }\n\n return acc;\n }, []);\n\n const toUIFilters = ({\n filters,\n treeFilters,\n attributesDataById,\n t,\n }: {\n filters: ValidFilter[];\n treeFilters: ITreeFilters;\n attributesDataById: AttributesById;\n t: TFunction;\n }): UIFilter[] =>\n (filters ?? []).reduce<UIFilter[]>((acc, filter) => {\n if (!attributesDataById[filter.field]) {\n console.warn(`Attribute ${filter.field} from user view not found in database.`);\n return acc;\n }\n\n const filterAttributeBase: IUIFilterBaseAttribute = {\n id: attributesDataById[filter.field].id,\n label: localizedTranslation(attributesDataById[filter.field].label, lang),\n type: attributesDataById[filter.field].type,\n };\n\n // filter is standardFilter\n if (isStandardAttribute(filterAttributeBase.type)) {\n const attributeData = attributesDataById[filter.field];\n if (_isValidFieldFilterStandardValuesList(filter, attributeData)) {\n const newFilter: IUIFilterStandardValueList = {\n field: filter.field,\n // TODO : save filter values as string[] when filter and handle fields with libraries\n value: filter.value ? [filter.value] : [],\n hidden: filter.hidden ?? false,\n id: window.crypto.randomUUID(),\n condition: (filter.condition as RecordFilterCondition) ?? null,\n attribute: {\n ...filterAttributeBase,\n format: attributeData.format!,\n valuesList: (attributeData as StandardAttributeDetailsFragment).valuesList!,\n },\n };\n acc.push(newFilter);\n } else {\n let formattedValue: string;\n if (attributeData.format === AttributeFormat.boolean && filter.value) {\n formattedValue = filter.value === 'true' ? t('explorer.true') : t('explorer.false');\n }\n\n if (attributeData.format === AttributeFormat.date && filter.value) {\n formattedValue = dayjs(filter.value).format('YYYY-MM-DD');\n }\n\n const newFilter: IUIFilterStandard = {\n field: filter.field,\n value: filter.value ?? null,\n formattedValue,\n hidden: filter.hidden ?? false,\n id: window.crypto.randomUUID(),\n condition: (filter.condition as RecordFilterCondition) ?? null,\n attribute: {\n ...filterAttributeBase,\n format: attributeData.format!,\n },\n };\n acc.push(newFilter);\n }\n }\n\n if (isLinkAttribute(filterAttributeBase.type)) {\n const attributeData = attributesDataById[\n filter.field\n ] as AttributeDetailsLinkAttributeWithPermissionsFragment;\n if (_isValidFieldFilterThrough(filter)) {\n const newFilter: IUIFilterThrough = {\n field: filter.field,\n value: filter.value ?? null,\n hidden: filter.hidden ?? false,\n id: window.crypto.randomUUID(),\n condition: filter.condition,\n attribute: {\n ...filterAttributeBase,\n linkedLibrary: attributeData.linked_library!,\n },\n subCondition: filter.subCondition ?? null,\n subField: filter.subField,\n };\n acc.push(newFilter);\n } else if (_isValidFieldFilterLinkValuesList(filter, attributeData)) {\n const newFilter: IUIFilterLinkValueList = {\n field: filter.field,\n // TODO : save filter values as string[] when filter and handle fields with libraries\n value: filter.value ? [filter.value] : [],\n hidden: filter.hidden ?? false,\n id: window.crypto.randomUUID(),\n condition: filter.condition,\n attribute: {\n ...filterAttributeBase,\n linkedLibrary: attributeData.linked_library!,\n valuesList: (attributeData as LinkAttributeDetailsFragment).valuesList!,\n },\n };\n\n acc.push(newFilter);\n } else {\n const newFilter: IUIFilterLink = {\n field: filter.field,\n value: filter.value ?? null,\n hidden: filter.hidden ?? false,\n id: window.crypto.randomUUID(),\n condition: filter.condition,\n attribute: {\n ...filterAttributeBase,\n linkedLibrary: attributeData.linked_library!,\n },\n };\n\n acc.push(newFilter);\n }\n }\n\n if (isTreeAttribute(filterAttributeBase.type) && !_isValidFieldFilterThrough(filter)) {\n const attributeData = attributesDataById[\n filter.field\n ] as AttributeDetailsTreeAttributeWithPermissionsFragment;\n const newFilter: IUIFilterTree = {\n field: [filter.field],\n // TODO : save filter values as string[] when tree filter and handle fields with libraries\n value: filter.value\n ? [filter.value]\n : treeFilters[filter.field]\n ? treeFilters[filter.field].map(tree => tree.value)\n : null,\n formattedValue: filter.value\n ? [filter.value]\n : treeFilters[filter.field]\n ? treeFilters[filter.field].map(tree => tree.label)\n : undefined,\n nodes: filter.value\n ? undefined\n : treeFilters[filter.field]\n ? treeFilters[filter.field].map(tree => ({libraryId: tree.libraryId, nodeId: tree.nodeId}))\n : undefined,\n hidden: filter.hidden ?? false,\n id: window.crypto.randomUUID(),\n attribute: {\n ...filterAttributeBase,\n linkedTree: attributeData.linked_tree!,\n },\n condition: filter.condition ?? RecordFilterCondition.EQUAL,\n };\n acc.push(newFilter);\n }\n\n return acc;\n }, []);\n\n return {\n toValidFilters,\n toUIFilters,\n };\n};\n"]}
|
|
@@ -109,7 +109,7 @@ function LibrariesList({ onSelect, selected = [], multiple = true, showSelected
|
|
|
109
109
|
},
|
|
110
110
|
},
|
|
111
111
|
];
|
|
112
|
-
const tableData =
|
|
112
|
+
const tableData = [...(data?.libraries?.list ?? [])]
|
|
113
113
|
.filter(lib => {
|
|
114
114
|
// Do not display already selected libraries unless showSelected is true
|
|
115
115
|
if (!showSelected && selected.find(selectedLib => selectedLib === lib.id)) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LibrariesList.js","sourceRoot":"","sources":["../../../../src/components/LibraryPicker/LibrariesList/LibrariesList.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 {PlusOutlined} from '@ant-design/icons';\nimport {useApolloClient} from '@apollo/client';\nimport {localizedTranslation, type Override} from '@leav/utils';\nimport {Button, Input, Table, type TableColumnsType} from 'antd';\nimport {type Key, useState} from 'react';\nimport styled from 'styled-components';\nimport {PreviewSize} from '../../../constants';\nimport {useLang} from '../../../hooks';\nimport {useSharedTranslation} from '../../../hooks/useSharedTranslation';\nimport {\n type GetLibrariesQuery,\n type LibraryLightFragment,\n PermissionsActions,\n PermissionTypes,\n type SaveLibraryMutation,\n useGetLibrariesQuery,\n useIsAllowedQuery,\n} from '../../../_gqlTypes';\nimport {getLibrariesQuery} from '../../../_queries/libraries/getLibrariesQuery';\nimport {extractPermissionFromQuery} from '../../../_utils';\nimport {EditLibraryModal} from '../../EditLibraryModal';\nimport {EntityCard, type IEntityData} from '../../EntityCard';\nimport {ErrorDisplay} from '../../ErrorDisplay';\nimport {Loading} from '../../Loading';\n\nconst HeaderWrapper = styled.div`\n display: flex;\n justify-content: space-between;\n align-items: center;\n gap: 0.5rem;\n\n > input {\n flex-grow: 1;\n }\n`;\n\ntype LibraryType = Override<LibraryLightFragment, {label: string}> & {key: string};\n\ninterface ILibrariesListProps {\n onSelect: (selectedLibraries: LibraryLightFragment[]) => void;\n selected?: string[];\n multiple?: boolean;\n showSelected?: boolean;\n}\n\nfunction LibrariesList({\n onSelect,\n selected = [],\n multiple = true,\n showSelected = false,\n}: ILibrariesListProps): JSX.Element {\n const {t} = useSharedTranslation();\n const {lang} = useLang();\n const {loading, error, data} = useGetLibrariesQuery();\n\n const isAllowedQueryResult = useIsAllowedQuery({\n fetchPolicy: 'cache-and-network',\n variables: {\n type: PermissionTypes.admin,\n actions: [PermissionsActions.admin_create_library],\n },\n });\n const canCreate = extractPermissionFromQuery(isAllowedQueryResult, PermissionsActions.admin_create_library);\n\n const [selectedRowKeys, setSelectedRowKeys] = useState<Key[]>(showSelected ? selected : []);\n const [search, setSearch] = useState('');\n const [isNewLibraryModalOpen, setIsNewLibraryModalOpen] = useState(false);\n const client = useApolloClient();\n\n const _handleSelectionChange = (selection: Key[]) => {\n setSelectedRowKeys(selection);\n onSelect(_getLibsFromKeys(selection));\n };\n\n const _getLibsFromKeys = (keys: Key[], libsList?: LibraryLightFragment[]) => {\n // The list coming from data might not be up to date after a create, so we use the one passed as argument\n const list = libsList ?? data?.libraries?.list ?? [];\n return list.filter(lib => keys.find(k => lib.id === k));\n };\n\n const _handleRowClick = (record: LibraryType) => {\n let newSelection: Key[];\n\n if (selectedRowKeys.indexOf(record.key) === -1) {\n newSelection = multiple ? [...selectedRowKeys, record.key] : [record.key]; // Add to selection\n } else {\n newSelection = multiple ? selectedRowKeys.filter(key => key !== record.key) : []; // Remove from selection\n }\n\n _handleSelectionChange(newSelection);\n };\n\n const _handleSearchChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n setSearch(e.currentTarget.value);\n };\n\n const _handleClickNewLibrary = () => {\n setIsNewLibraryModalOpen(true);\n };\n const _handleCloseNewLibrary = () => setIsNewLibraryModalOpen(false);\n\n const _handlePostCreate = async (newLibrary: SaveLibraryMutation['saveLibrary']) => {\n const allLibrariesData = client.readQuery<GetLibrariesQuery>({query: getLibrariesQuery});\n\n const newLibsList = [newLibrary, ...(allLibrariesData?.libraries?.list ?? [])];\n if (allLibrariesData) {\n client.writeQuery({\n query: getLibrariesQuery,\n data: {\n libraries: {\n ...allLibrariesData.libraries,\n list: newLibsList,\n },\n },\n });\n }\n const newSelection = [...selectedRowKeys, newLibrary.id];\n setSelectedRowKeys(newSelection);\n onSelect(_getLibsFromKeys(newSelection, newLibsList));\n };\n\n if (loading) {\n return <Loading />;\n }\n\n if (error || isAllowedQueryResult.error) {\n return <ErrorDisplay message={error?.message || isAllowedQueryResult?.error?.message} />;\n }\n\n const columns: TableColumnsType<LibraryType> = [\n {\n title: t('libraries.library'),\n key: 'library',\n render: (_, library) => {\n const libraryIdentity: IEntityData = {\n label: library.label,\n subLabel: library.id,\n preview: (library.icon?.whoAmI?.preview?.[PreviewSize.SMALL] as string) ?? null,\n color: null,\n };\n return <EntityCard entity={libraryIdentity} size={PreviewSize.SMALL} />;\n },\n },\n ];\n\n const tableData: LibraryType[] = ([...data?.libraries?.list] ?? [])\n .filter(lib => {\n // Do not display already selected libraries unless showSelected is true\n if (!showSelected && selected.find(selectedLib => selectedLib === lib.id)) {\n return false;\n }\n\n // Filter based on search\n const label = localizedTranslation(lib.label, lang);\n const searchStr = search.toLowerCase();\n\n // Search on id or label\n return lib.id.toLowerCase().includes(searchStr) || label.toLowerCase().includes(searchStr);\n })\n .map(lib => ({\n ...lib,\n key: lib.id,\n label: localizedTranslation(lib.label, lang),\n }));\n\n const tableHeader = (\n <HeaderWrapper>\n <Input.Search onChange={_handleSearchChange} placeholder={t('libraries.search') + '...'} allowClear />\n {canCreate && (\n <Button type=\"primary\" icon={<PlusOutlined />} onClick={_handleClickNewLibrary}>\n {t('libraries.new_library')}\n </Button>\n )}\n </HeaderWrapper>\n );\n\n return (\n <>\n <Table\n size=\"middle\"\n rowSelection={{\n type: multiple ? 'checkbox' : 'radio',\n selectedRowKeys,\n onChange: _handleSelectionChange,\n }}\n columns={columns}\n dataSource={tableData}\n bordered\n pagination={false}\n scroll={{y: 'calc(95vh - 20rem)'}}\n title={() => tableHeader}\n onRow={record => ({\n onClick: () => _handleRowClick(record),\n })}\n />\n {isNewLibraryModalOpen && (\n <EditLibraryModal\n open={isNewLibraryModalOpen}\n onClose={_handleCloseNewLibrary}\n onPostCreate={_handlePostCreate}\n width={790}\n />\n )}\n </>\n );\n}\n\nexport default LibrariesList;\n"]}
|
|
1
|
+
{"version":3,"file":"LibrariesList.js","sourceRoot":"","sources":["../../../../src/components/LibraryPicker/LibrariesList/LibrariesList.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 {PlusOutlined} from '@ant-design/icons';\nimport {useApolloClient} from '@apollo/client';\nimport {localizedTranslation, type Override} from '@leav/utils';\nimport {Button, Input, Table, type TableColumnsType} from 'antd';\nimport {type Key, useState} from 'react';\nimport styled from 'styled-components';\nimport {PreviewSize} from '../../../constants';\nimport {useLang} from '../../../hooks';\nimport {useSharedTranslation} from '../../../hooks/useSharedTranslation';\nimport {\n type GetLibrariesQuery,\n type LibraryLightFragment,\n PermissionsActions,\n PermissionTypes,\n type SaveLibraryMutation,\n useGetLibrariesQuery,\n useIsAllowedQuery,\n} from '../../../_gqlTypes';\nimport {getLibrariesQuery} from '../../../_queries/libraries/getLibrariesQuery';\nimport {extractPermissionFromQuery} from '../../../_utils';\nimport {EditLibraryModal} from '../../EditLibraryModal';\nimport {EntityCard, type IEntityData} from '../../EntityCard';\nimport {ErrorDisplay} from '../../ErrorDisplay';\nimport {Loading} from '../../Loading';\n\nconst HeaderWrapper = styled.div`\n display: flex;\n justify-content: space-between;\n align-items: center;\n gap: 0.5rem;\n\n > input {\n flex-grow: 1;\n }\n`;\n\ntype LibraryType = Override<LibraryLightFragment, {label: string}> & {key: string};\n\ninterface ILibrariesListProps {\n onSelect: (selectedLibraries: LibraryLightFragment[]) => void;\n selected?: string[];\n multiple?: boolean;\n showSelected?: boolean;\n}\n\nfunction LibrariesList({\n onSelect,\n selected = [],\n multiple = true,\n showSelected = false,\n}: ILibrariesListProps): JSX.Element {\n const {t} = useSharedTranslation();\n const {lang} = useLang();\n const {loading, error, data} = useGetLibrariesQuery();\n\n const isAllowedQueryResult = useIsAllowedQuery({\n fetchPolicy: 'cache-and-network',\n variables: {\n type: PermissionTypes.admin,\n actions: [PermissionsActions.admin_create_library],\n },\n });\n const canCreate = extractPermissionFromQuery(isAllowedQueryResult, PermissionsActions.admin_create_library);\n\n const [selectedRowKeys, setSelectedRowKeys] = useState<Key[]>(showSelected ? selected : []);\n const [search, setSearch] = useState('');\n const [isNewLibraryModalOpen, setIsNewLibraryModalOpen] = useState(false);\n const client = useApolloClient();\n\n const _handleSelectionChange = (selection: Key[]) => {\n setSelectedRowKeys(selection);\n onSelect(_getLibsFromKeys(selection));\n };\n\n const _getLibsFromKeys = (keys: Key[], libsList?: LibraryLightFragment[]) => {\n // The list coming from data might not be up to date after a create, so we use the one passed as argument\n const list = libsList ?? data?.libraries?.list ?? [];\n return list.filter(lib => keys.find(k => lib.id === k));\n };\n\n const _handleRowClick = (record: LibraryType) => {\n let newSelection: Key[];\n\n if (selectedRowKeys.indexOf(record.key) === -1) {\n newSelection = multiple ? [...selectedRowKeys, record.key] : [record.key]; // Add to selection\n } else {\n newSelection = multiple ? selectedRowKeys.filter(key => key !== record.key) : []; // Remove from selection\n }\n\n _handleSelectionChange(newSelection);\n };\n\n const _handleSearchChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n setSearch(e.currentTarget.value);\n };\n\n const _handleClickNewLibrary = () => {\n setIsNewLibraryModalOpen(true);\n };\n const _handleCloseNewLibrary = () => setIsNewLibraryModalOpen(false);\n\n const _handlePostCreate = async (newLibrary: SaveLibraryMutation['saveLibrary']) => {\n const allLibrariesData = client.readQuery<GetLibrariesQuery>({query: getLibrariesQuery});\n\n const newLibsList = [newLibrary, ...(allLibrariesData?.libraries?.list ?? [])];\n if (allLibrariesData) {\n client.writeQuery({\n query: getLibrariesQuery,\n data: {\n libraries: {\n ...allLibrariesData.libraries,\n list: newLibsList,\n },\n },\n });\n }\n const newSelection = [...selectedRowKeys, newLibrary.id];\n setSelectedRowKeys(newSelection);\n onSelect(_getLibsFromKeys(newSelection, newLibsList));\n };\n\n if (loading) {\n return <Loading />;\n }\n\n if (error || isAllowedQueryResult.error) {\n return <ErrorDisplay message={error?.message || isAllowedQueryResult?.error?.message} />;\n }\n\n const columns: TableColumnsType<LibraryType> = [\n {\n title: t('libraries.library'),\n key: 'library',\n render: (_, library) => {\n const libraryIdentity: IEntityData = {\n label: library.label,\n subLabel: library.id,\n preview: (library.icon?.whoAmI?.preview?.[PreviewSize.SMALL] as string) ?? null,\n color: null,\n };\n return <EntityCard entity={libraryIdentity} size={PreviewSize.SMALL} />;\n },\n },\n ];\n\n const tableData: LibraryType[] = [...(data?.libraries?.list ?? [])]\n .filter(lib => {\n // Do not display already selected libraries unless showSelected is true\n if (!showSelected && selected.find(selectedLib => selectedLib === lib.id)) {\n return false;\n }\n\n // Filter based on search\n const label = localizedTranslation(lib.label, lang);\n const searchStr = search.toLowerCase();\n\n // Search on id or label\n return lib.id.toLowerCase().includes(searchStr) || label.toLowerCase().includes(searchStr);\n })\n .map(lib => ({\n ...lib,\n key: lib.id,\n label: localizedTranslation(lib.label, lang),\n }));\n\n const tableHeader = (\n <HeaderWrapper>\n <Input.Search onChange={_handleSearchChange} placeholder={t('libraries.search') + '...'} allowClear />\n {canCreate && (\n <Button type=\"primary\" icon={<PlusOutlined />} onClick={_handleClickNewLibrary}>\n {t('libraries.new_library')}\n </Button>\n )}\n </HeaderWrapper>\n );\n\n return (\n <>\n <Table\n size=\"middle\"\n rowSelection={{\n type: multiple ? 'checkbox' : 'radio',\n selectedRowKeys,\n onChange: _handleSelectionChange,\n }}\n columns={columns}\n dataSource={tableData}\n bordered\n pagination={false}\n scroll={{y: 'calc(95vh - 20rem)'}}\n title={() => tableHeader}\n onRow={record => ({\n onClick: () => _handleRowClick(record),\n })}\n />\n {isNewLibraryModalOpen && (\n <EditLibraryModal\n open={isNewLibraryModalOpen}\n onClose={_handleCloseNewLibrary}\n onPostCreate={_handlePostCreate}\n width={790}\n />\n )}\n </>\n );\n}\n\nexport default LibrariesList;\n"]}
|
|
@@ -7,7 +7,15 @@ import { Form } from 'antd';
|
|
|
7
7
|
import { KitRichText } from 'aristid-ds';
|
|
8
8
|
import { useSharedTranslation } from '../../../../../../hooks/useSharedTranslation';
|
|
9
9
|
import { EMPTY_INITIAL_VALUE_STRING } from '../../../antdUtils';
|
|
10
|
-
const
|
|
10
|
+
const LEADING_EMPTY_P_TAG = /^<p>(\s| )*<\/p>/;
|
|
11
|
+
const TRAILING_EMPTY_P_TAG = /(<p>(\s| )*<\/p>)+$/;
|
|
12
|
+
const cleanRichTextValue = (value) => {
|
|
13
|
+
if (!value) {
|
|
14
|
+
return null;
|
|
15
|
+
}
|
|
16
|
+
const cleanedValue = value.replace(LEADING_EMPTY_P_TAG, '').replace(TRAILING_EMPTY_P_TAG, '').trim();
|
|
17
|
+
return cleanedValue === '' ? null : cleanedValue;
|
|
18
|
+
};
|
|
11
19
|
export const DSRichTextWrapper = ({ value, presentationValue, isLastValueOfMultivalues, removeLastValueOfMultivalues, onChange, attribute, readonly, handleSubmit, calculatedFlags, inheritedFlags, }) => {
|
|
12
20
|
if (!onChange) {
|
|
13
21
|
throw Error('DSRichTextWrapper should be used inside a antd Form.Item');
|
|
@@ -35,7 +43,7 @@ export const DSRichTextWrapper = ({ value, presentationValue, isLastValueOfMulti
|
|
|
35
43
|
};
|
|
36
44
|
const _handleOnBlur = async (inputValue) => {
|
|
37
45
|
setHasChanged(false);
|
|
38
|
-
const valueToSubmit =
|
|
46
|
+
const valueToSubmit = cleanRichTextValue(inputValue);
|
|
39
47
|
if (!hasChanged) {
|
|
40
48
|
onChange(valueToSubmit);
|
|
41
49
|
setIsFocused(false);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DSRichTextWrapper.js","sourceRoot":"","sources":["../../../../../../../src/components/RecordEdition/EditRecordContent/uiElements/StandardField/StandardFieldValue/DSRichTextWrapper.tsx"],"names":[],"mappings":";AAAA,oFAAoF;AACpF,sCAAsC;AACtC,sEAAsE;AACtE,OAAO,EAAyB,QAAQ,EAAC,MAAM,OAAO,CAAC;AACvD,OAAO,EAAC,IAAI,EAAC,MAAM,MAAM,CAAC;AAC1B,OAAO,EAAC,WAAW,EAAC,MAAM,YAAY,CAAC;AAGvC,OAAO,EAAC,oBAAoB,EAAC,MAAM,gCAAgC,CAAC;AACpE,OAAO,EAAC,0BAA0B,EAAC,MAAM,oBAAoB,CAAC;AAE9D,MAAM,YAAY,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"DSRichTextWrapper.js","sourceRoot":"","sources":["../../../../../../../src/components/RecordEdition/EditRecordContent/uiElements/StandardField/StandardFieldValue/DSRichTextWrapper.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 FunctionComponent, useState} from 'react';\nimport {Form} from 'antd';\nimport {KitRichText} from 'aristid-ds';\nimport {type IStandFieldValueContentProps} from './_types';\nimport {type KitRichTextProps} from 'aristid-ds/dist/Kit/DataEntry/RichText/types';\nimport {useSharedTranslation} from '_ui/hooks/useSharedTranslation';\nimport {EMPTY_INITIAL_VALUE_STRING} from '../../../antdUtils';\n\nconst LEADING_EMPTY_P_TAG = /^<p>(\\s| )*<\\/p>/;\nconst TRAILING_EMPTY_P_TAG = /(<p>(\\s| )*<\\/p>)+$/;\n\nconst cleanRichTextValue = (value: string) => {\n if (!value) {\n return null;\n }\n const cleanedValue = value.replace(LEADING_EMPTY_P_TAG, '').replace(TRAILING_EMPTY_P_TAG, '').trim();\n\n return cleanedValue === '' ? null : cleanedValue;\n};\n\nexport const DSRichTextWrapper: FunctionComponent<IStandFieldValueContentProps<KitRichTextProps>> = ({\n value,\n presentationValue,\n isLastValueOfMultivalues,\n removeLastValueOfMultivalues,\n onChange,\n attribute,\n readonly,\n handleSubmit,\n calculatedFlags,\n inheritedFlags,\n}) => {\n if (!onChange) {\n throw Error('DSRichTextWrapper should be used inside a antd Form.Item');\n }\n\n const isNewValueOfMultivalues = isLastValueOfMultivalues && value === EMPTY_INITIAL_VALUE_STRING;\n const focusedDefaultValue = attribute.multiple_values ? isNewValueOfMultivalues : false;\n\n const [hasChanged, setHasChanged] = useState(false);\n const [isFocused, setIsFocused] = useState(focusedDefaultValue);\n const {errors} = Form.Item.useStatus();\n const {t} = useSharedTranslation();\n\n const isErrors = errors.length > 0;\n const valueToDisplay = isFocused || isErrors || !presentationValue ? value : presentationValue;\n\n const _resetToInheritedOrCalculatedValue = async () => {\n setHasChanged(false);\n if (inheritedFlags.isInheritedValue) {\n onChange(inheritedFlags.inheritedValue.raw_payload);\n } else if (calculatedFlags.isCalculatedValue) {\n onChange(calculatedFlags.calculatedValue.raw_payload);\n }\n await handleSubmit(null, attribute.id);\n };\n\n const _handleFocus = () => {\n setIsFocused(true);\n };\n\n const _handleOnBlur = async (inputValue: string) => {\n setHasChanged(false);\n const valueToSubmit = cleanRichTextValue(inputValue);\n if (!hasChanged) {\n onChange(valueToSubmit);\n setIsFocused(false);\n\n if (isNewValueOfMultivalues) {\n removeLastValueOfMultivalues();\n }\n return;\n }\n\n if (valueToSubmit === null && (inheritedFlags.isInheritedValue || calculatedFlags.isCalculatedValue)) {\n _resetToInheritedOrCalculatedValue();\n return;\n }\n\n onChange(valueToSubmit);\n await handleSubmit(valueToSubmit, attribute.id);\n setIsFocused(false);\n };\n\n const _handleOnChange = inputValue => {\n setHasChanged(true);\n onChange(inputValue);\n };\n\n return (\n <KitRichText\n id={attribute.id}\n autoFocus={isFocused}\n helper={isErrors ? String(errors[0]) : undefined}\n status={isErrors ? 'error' : undefined}\n value={valueToDisplay}\n readonly={readonly}\n onChange={_handleOnChange}\n onFocus={_handleFocus}\n onBlur={_handleOnBlur}\n placeholder={t('record_edition.placeholder.enter_a_text')}\n maxLength={attribute.character_limit ?? undefined}\n showCount\n />\n );\n};\n"]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
2
|
import TreeNodeItem from './TreeNodeItem';
|
|
3
3
|
import { TreeFieldWrapper } from './TreeFieldWrapper';
|
|
4
|
-
export const TreeNodeList = ({ attribute, backendValues, removeTreeNode, isReadOnly, }) => (_jsx(TreeFieldWrapper, { children: backendValues.map((value, index) => (_jsx(TreeNodeItem, { isReadOnly: isReadOnly, color: value.treeValue
|
|
4
|
+
export const TreeNodeList = ({ attribute, backendValues, removeTreeNode, isReadOnly, }) => (_jsx(TreeFieldWrapper, { children: backendValues.map((value, index) => (_jsx(TreeNodeItem, { isReadOnly: isReadOnly, color: value.treeValue?.record.whoAmI.color, label: value.treeValue?.record.whoAmI.label, ancestors: value.treeValue?.ancestors, canDelete: !isReadOnly &&
|
|
5
5
|
((attribute.required && attribute.multiple_values && backendValues.length > 1) ||
|
|
6
6
|
!attribute.required), onClickToDelete: () => removeTreeNode(value) }, index))) }));
|
|
7
7
|
//# sourceMappingURL=TreeNodeList.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TreeNodeList.js","sourceRoot":"","sources":["../../../../../../../src/components/RecordEdition/EditRecordContent/uiElements/TreeField/display-tree-node/TreeNodeList.tsx"],"names":[],"mappings":";AAMA,OAAO,YAAY,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAC,gBAAgB,EAAC,MAAM,oBAAoB,CAAC;AASpD,MAAM,CAAC,MAAM,YAAY,GAA6C,CAAC,EACnE,SAAS,EACT,aAAa,EACb,cAAc,EACd,UAAU,GACb,EAAE,EAAE,CAAC,CACF,KAAC,gBAAgB,cACZ,aAAa,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,CACjC,KAAC,YAAY,IAET,UAAU,EAAE,UAAU,EACtB,KAAK,EAAE,KAAK,CAAC,SAAS,
|
|
1
|
+
{"version":3,"file":"TreeNodeList.js","sourceRoot":"","sources":["../../../../../../../src/components/RecordEdition/EditRecordContent/uiElements/TreeField/display-tree-node/TreeNodeList.tsx"],"names":[],"mappings":";AAMA,OAAO,YAAY,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAC,gBAAgB,EAAC,MAAM,oBAAoB,CAAC;AASpD,MAAM,CAAC,MAAM,YAAY,GAA6C,CAAC,EACnE,SAAS,EACT,aAAa,EACb,cAAc,EACd,UAAU,GACb,EAAE,EAAE,CAAC,CACF,KAAC,gBAAgB,cACZ,aAAa,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,CACjC,KAAC,YAAY,IAET,UAAU,EAAE,UAAU,EACtB,KAAK,EAAE,KAAK,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,EAC3C,KAAK,EAAE,KAAK,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,EAC3C,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,SAAS,EACrC,SAAS,EACL,CAAC,UAAU;YACX,CAAC,CAAC,SAAS,CAAC,QAAQ,IAAI,SAAS,CAAC,eAAe,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC;gBAC1E,CAAC,SAAS,CAAC,QAAQ,CAAC,EAE5B,eAAe,EAAE,GAAG,EAAE,CAAC,cAAc,CAAC,KAAK,CAAC,IAVvC,KAAK,CAWZ,CACL,CAAC,GACa,CACtB,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 FunctionComponent} from 'react';\nimport {type RecordFormElementsValueTreeValue} from '_ui/hooks/useGetRecordForm';\nimport {type RecordFormAttributeTreeAttributeFragment} from '_ui/_gqlTypes';\nimport TreeNodeItem from './TreeNodeItem';\nimport {TreeFieldWrapper} from './TreeFieldWrapper';\n\ninterface IDisplayTreeNodeProps {\n attribute: RecordFormAttributeTreeAttributeFragment;\n backendValues: RecordFormElementsValueTreeValue[];\n removeTreeNode: (nodeValue: RecordFormElementsValueTreeValue) => void;\n isReadOnly: boolean;\n}\n\nexport const TreeNodeList: FunctionComponent<IDisplayTreeNodeProps> = ({\n attribute,\n backendValues,\n removeTreeNode,\n isReadOnly,\n}) => (\n <TreeFieldWrapper>\n {backendValues.map((value, index) => (\n <TreeNodeItem\n key={index}\n isReadOnly={isReadOnly}\n color={value.treeValue?.record.whoAmI.color}\n label={value.treeValue?.record.whoAmI.label}\n ancestors={value.treeValue?.ancestors}\n canDelete={\n !isReadOnly &&\n ((attribute.required && attribute.multiple_values && backendValues.length > 1) ||\n !attribute.required)\n }\n onClickToDelete={() => removeTreeNode(value)}\n />\n ))}\n </TreeFieldWrapper>\n);\n"]}
|
|
@@ -13,13 +13,16 @@ import { useFetchRecordHistory } from './hooks/useFetchRecordHistory';
|
|
|
13
13
|
import { RecordHistoryGoUpButton } from './RecordHistoryGoUpButton';
|
|
14
14
|
import { RecordHistoryLogEntry } from './RecordHistoryLogEntry';
|
|
15
15
|
const StyledDivContentWrapper = styled.div `
|
|
16
|
-
margin-top: calc(var(--general-spacing-
|
|
16
|
+
margin-top: calc(var(--general-spacing-xs) * 1px);
|
|
17
17
|
flex: 1 1 0;
|
|
18
18
|
overflow-y: auto;
|
|
19
19
|
`;
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
20
|
+
// TODO: This component should be moved to /apps/app-studio/src/modules/information-and-history/record-history/ when he will no longer be used by RecordSummary and ValuesSummary (those components will be removed in the future)
|
|
21
|
+
// Also when component will be moved
|
|
22
|
+
// - put together translations with information_and_history
|
|
23
|
+
// - remove usage of styled-components
|
|
24
|
+
// - instead of a record we could receive a recordId and a libraryId directly
|
|
25
|
+
// - remove styling of StyledDivContentWrapper that will no longer be necessary
|
|
23
26
|
export const RecordHistory = ({ record, attributeId }) => {
|
|
24
27
|
const { t } = useSharedTranslation();
|
|
25
28
|
const [showAllHistory, setShowAllHistory] = useState(false);
|
|
@@ -31,17 +34,19 @@ export const RecordHistory = ({ record, attributeId }) => {
|
|
|
31
34
|
attributeId,
|
|
32
35
|
});
|
|
33
36
|
if (loading && logs.length === 0) {
|
|
37
|
+
// TODO: Add a better loading state
|
|
34
38
|
return _jsx(Loading, {});
|
|
35
39
|
}
|
|
36
40
|
if (inError) {
|
|
41
|
+
//TODO: Add a better error state
|
|
37
42
|
return _jsx(ErrorDisplay, { message: t('record_history.error_fetching') });
|
|
38
43
|
}
|
|
39
44
|
if (logs.length === 0) {
|
|
40
45
|
return (_jsx(StyledDivContentWrapper, { children: _jsx(KitTypography.Text, { children: t('record_history.empty_history') }) }));
|
|
41
46
|
}
|
|
42
|
-
return (_jsx(StyledDivContentWrapper, { children: _jsx(RecordHistoryGoUpButton, { children: _jsxs(KitSpace, { size: "s", direction: "vertical", children: [total > 1 && (_jsx(
|
|
47
|
+
return (_jsx(StyledDivContentWrapper, { children: _jsx(RecordHistoryGoUpButton, { children: _jsxs(KitSpace, { size: "s", direction: "vertical", children: [showAllHistory && (_jsxs(_Fragment, { children: [logs.map((logEntry, index) => (_jsx(RecordHistoryLogEntry, { index: index, logEntry: logEntry }, index))), _jsx(ShowMore, { hasMore: hasMore, fetchMore: fetchMore })] })), !showAllHistory && _jsx(RecordHistoryLogEntry, { index: 0, logEntry: logs[0] }, 0), total > 1 && (_jsx(KitButton, { type: "secondary", size: "s", onClick: () => setShowAllHistory(!showAllHistory), children: showAllHistory
|
|
43
48
|
? t('record_history.hide_history', { total })
|
|
44
|
-
: t('record_history.show_history', { total }) }))
|
|
49
|
+
: t('record_history.show_history', { total }) }))] }) }) }));
|
|
45
50
|
};
|
|
46
51
|
export default RecordHistory;
|
|
47
52
|
//# sourceMappingURL=RecordHistory.js.map
|