@leav/ui 1.9.0-2 → 1.9.0-25f0df5c
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/_gqlTypes/index.d.ts +103 -20
- package/dist/_gqlTypes/index.js +46 -11
- package/dist/_gqlTypes/index.js.map +1 -1
- package/dist/_queries/records/createRecordMutation.js +2 -2
- package/dist/_queries/records/createRecordMutation.js.map +1 -1
- package/dist/components/Explorer/Explorer.js +22 -12
- package/dist/components/Explorer/Explorer.js.map +1 -1
- package/dist/components/Explorer/ExplorerToolbar.js +2 -1
- package/dist/components/Explorer/ExplorerToolbar.js.map +1 -1
- package/dist/components/Explorer/_queries/useExplorerCountData.d.ts +16 -0
- package/dist/components/Explorer/_queries/useExplorerCountData.js +26 -0
- package/dist/components/Explorer/_queries/useExplorerCountData.js.map +1 -0
- package/dist/components/Explorer/_queries/useExplorerData.js +18 -20
- package/dist/components/Explorer/_queries/useExplorerData.js.map +1 -1
- package/dist/components/Explorer/actions-mass/ResultsCount.d.ts +10 -0
- package/dist/components/Explorer/actions-mass/ResultsCount.js +8 -0
- package/dist/components/Explorer/actions-mass/ResultsCount.js.map +1 -0
- package/dist/components/Explorer/actions-mass/edit-attribute/useCountValuesOccurrencesHook.d.ts +9 -2
- package/dist/components/Explorer/actions-mass/edit-attribute/useCountValuesOccurrencesHook.js +18 -4
- package/dist/components/Explorer/actions-mass/edit-attribute/useCountValuesOccurrencesHook.js.map +1 -1
- package/dist/components/Explorer/actions-mass/useMassActions.d.ts +5 -3
- package/dist/components/Explorer/actions-mass/useMassActions.js +19 -13
- package/dist/components/Explorer/actions-mass/useMassActions.js.map +1 -1
- package/dist/components/Explorer/actions-primary/useCreatePrimaryAction.d.ts +3 -1
- package/dist/components/Explorer/actions-primary/useCreatePrimaryAction.js +5 -1
- package/dist/components/Explorer/actions-primary/useCreatePrimaryAction.js.map +1 -1
- package/dist/components/Explorer/manage-view-settings/configure-display/view-type/SelectViewType.js +1 -1
- package/dist/components/Explorer/manage-view-settings/configure-display/view-type/SelectViewType.js.map +1 -1
- package/dist/components/RecordEdition/EditRecord/EditRecord.d.ts +1 -0
- package/dist/components/RecordEdition/EditRecord/EditRecord.js +3 -3
- package/dist/components/RecordEdition/EditRecord/EditRecord.js.map +1 -1
- package/dist/components/RecordEdition/EditRecordContent/_types.d.ts +4 -0
- package/dist/components/RecordEdition/EditRecordContent/_types.js.map +1 -1
- package/dist/components/RecordEdition/EditRecordModal/EditRecordModal.js +28 -17
- package/dist/components/RecordEdition/EditRecordModal/EditRecordModal.js.map +1 -1
- package/dist/components/RecordEdition/EditRecordPage/EditRecordPage.d.ts +1 -0
- package/dist/components/RecordEdition/EditRecordPage/EditRecordPage.js +30 -18
- package/dist/components/RecordEdition/EditRecordPage/EditRecordPage.js.map +1 -1
- package/dist/components/RecordEdition/EditRecordPage/ErrorComponent.d.ts +2 -0
- package/dist/components/RecordEdition/EditRecordPage/ErrorComponent.js +11 -0
- package/dist/components/RecordEdition/EditRecordPage/ErrorComponent.js.map +1 -0
- package/dist/components/RecordEdition/EditRecordPage/getInitialRecordValues.d.ts +2 -0
- package/dist/components/RecordEdition/EditRecordPage/getInitialRecordValues.js +35 -0
- package/dist/components/RecordEdition/EditRecordPage/getInitialRecordValues.js.map +1 -0
- package/dist/components/RecordEdition/_types.d.ts +1 -1
- package/dist/components/RecordEdition/_types.js.map +1 -1
- package/dist/components/RecordEdition/hooks/useGetSubmitButtons.d.ts +1 -1
- package/dist/components/RecordEdition/hooks/useGetSubmitButtons.js +6 -2
- package/dist/components/RecordEdition/hooks/useGetSubmitButtons.js.map +1 -1
- package/dist/hooks/useIFrameMessenger/schema.d.ts +2 -2
- package/dist/hooks/useIFrameMessenger/schema.js +1 -1
- package/dist/hooks/useIFrameMessenger/schema.js.map +1 -1
- package/dist/hooks/useIFrameMessenger/types.d.ts +5 -0
- package/dist/hooks/useIFrameMessenger/types.js.map +1 -1
- package/dist/locales/en/shared.json +2 -2
- package/dist/locales/fr/shared.json +2 -2
- package/package.json +8 -12
|
@@ -8,19 +8,21 @@ import { type IUIFiltersState } from '../../../components/Filters/context/filter
|
|
|
8
8
|
* @param isEnabled - whether the selection is present
|
|
9
9
|
* @param view - represent the current view
|
|
10
10
|
* @param dispatch - method to change the current view
|
|
11
|
-
* @param
|
|
11
|
+
* @param totalCountFiltered - number of results with the current filters
|
|
12
|
+
* @param totalCountLibrary - number of total items in the library (without filters)
|
|
12
13
|
* @param allVisibleKeys - list of all ids currently selected
|
|
13
14
|
* @param massActions - array of all actions available on mass selection
|
|
14
15
|
* @param snackbarId - id of the snackbar displayed
|
|
15
16
|
*/
|
|
16
|
-
export declare const useMassActions: ({ isEnabled, store: { dispatch, view }, filtersStore: { filters, filtersOperator },
|
|
17
|
+
export declare const useMassActions: ({ isEnabled, store: { dispatch, view }, filtersStore: { filters, filtersOperator }, totalCountFiltered, totalCountLibrary, allVisibleKeys, massActions, snackbarId, }: {
|
|
17
18
|
isEnabled: boolean;
|
|
18
19
|
store: {
|
|
19
20
|
view: IViewSettingsState;
|
|
20
21
|
dispatch: Dispatch<IViewSettingsAction>;
|
|
21
22
|
};
|
|
22
23
|
filtersStore: IUIFiltersState;
|
|
23
|
-
|
|
24
|
+
totalCountFiltered: number;
|
|
25
|
+
totalCountLibrary: number;
|
|
24
26
|
allVisibleKeys: string[];
|
|
25
27
|
massActions: IMassActions[];
|
|
26
28
|
snackbarId: string;
|
|
@@ -3,7 +3,7 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
3
3
|
// This file is released under LGPL V3
|
|
4
4
|
// License text available at https://www.gnu.org/licenses/lgpl-3.0.txt
|
|
5
5
|
import { closeKitSnackBar, KitCheckbox, KitDropDown, KitSpace, openKitSnackBar } from 'aristid-ds';
|
|
6
|
-
import { useCallback, useEffect } from 'react';
|
|
6
|
+
import { useCallback, useEffect, useState } from 'react';
|
|
7
7
|
import { RecordFilterCondition, RecordFilterOperator } from '../../../_gqlTypes';
|
|
8
8
|
import { useSharedTranslation } from '../../../hooks/useSharedTranslation';
|
|
9
9
|
import { interleaveElement } from '../../../_utils/interleaveElement';
|
|
@@ -11,20 +11,26 @@ import { MASS_SELECTION_ALL } from '../_constants';
|
|
|
11
11
|
import { ViewSettingsActionTypes } from '../manage-view-settings';
|
|
12
12
|
import { prepareFiltersForRequest } from '../../../components/Filters';
|
|
13
13
|
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
|
|
14
|
-
import {
|
|
14
|
+
import { faCaretDown } from '@fortawesome/free-solid-svg-icons';
|
|
15
|
+
import { ResultsCount } from './ResultsCount';
|
|
15
16
|
/**
|
|
16
17
|
* Hook used to manage mass selection as the snackbar and all kind of selection (manual, all in page, all in filters)
|
|
17
18
|
*
|
|
18
19
|
* @param isEnabled - whether the selection is present
|
|
19
20
|
* @param view - represent the current view
|
|
20
21
|
* @param dispatch - method to change the current view
|
|
21
|
-
* @param
|
|
22
|
+
* @param totalCountFiltered - number of results with the current filters
|
|
23
|
+
* @param totalCountLibrary - number of total items in the library (without filters)
|
|
22
24
|
* @param allVisibleKeys - list of all ids currently selected
|
|
23
25
|
* @param massActions - array of all actions available on mass selection
|
|
24
26
|
* @param snackbarId - id of the snackbar displayed
|
|
25
27
|
*/
|
|
26
|
-
export const useMassActions = ({ isEnabled, store: { dispatch, view }, filtersStore: { filters, filtersOperator },
|
|
28
|
+
export const useMassActions = ({ isEnabled, store: { dispatch, view }, filtersStore: { filters, filtersOperator }, totalCountFiltered, totalCountLibrary, allVisibleKeys, massActions, snackbarId, }) => {
|
|
27
29
|
const { t } = useSharedTranslation();
|
|
30
|
+
const [isInactive, setIsInactive] = useState(false);
|
|
31
|
+
useEffect(() => {
|
|
32
|
+
setIsInactive(filters.filter(f => f.field === 'active')?.[0]?.value === 'false');
|
|
33
|
+
}, [filters]);
|
|
28
34
|
useEffect(() => {
|
|
29
35
|
if (view.massSelection === MASS_SELECTION_ALL || view.massSelection.length !== 0) {
|
|
30
36
|
openKitSnackBar({
|
|
@@ -34,7 +40,7 @@ export const useMassActions = ({ isEnabled, store: { dispatch, view }, filtersSt
|
|
|
34
40
|
toasterId: snackbarId,
|
|
35
41
|
onClose: () => _setSelectedKeys([]),
|
|
36
42
|
message: t('explorer.massAction.selectedItems', {
|
|
37
|
-
count: view.massSelection === MASS_SELECTION_ALL ?
|
|
43
|
+
count: view.massSelection === MASS_SELECTION_ALL ? totalCountFiltered : view.massSelection.length,
|
|
38
44
|
}),
|
|
39
45
|
actions: massActions.map(({ label, icon, deselectAll, callback }, index) => ({
|
|
40
46
|
key: index,
|
|
@@ -63,13 +69,13 @@ export const useMassActions = ({ isEnabled, store: { dispatch, view }, filtersSt
|
|
|
63
69
|
else {
|
|
64
70
|
closeKitSnackBar(snackbarId);
|
|
65
71
|
}
|
|
66
|
-
}, [view.massSelection, filters,
|
|
72
|
+
}, [view.massSelection, filters, totalCountFiltered]);
|
|
67
73
|
useEffect(() => () => closeKitSnackBar(snackbarId), []);
|
|
68
|
-
const isOnePage = view.pageSize >
|
|
69
|
-
const hasSelectedAllAvailableItems = view.massSelection === MASS_SELECTION_ALL || view.massSelection.length ===
|
|
74
|
+
const isOnePage = view.pageSize > totalCountFiltered;
|
|
75
|
+
const hasSelectedAllAvailableItems = view.massSelection === MASS_SELECTION_ALL || view.massSelection.length === totalCountFiltered;
|
|
70
76
|
const hasSelectedSomeItems = view.massSelection !== MASS_SELECTION_ALL &&
|
|
71
77
|
view.massSelection.length > 0 &&
|
|
72
|
-
view.massSelection.length <
|
|
78
|
+
view.massSelection.length < totalCountFiltered;
|
|
73
79
|
const _selectAllButton = isOnePage ? (_jsx(KitCheckbox, { "aria-checked": hasSelectedSomeItems ? 'mixed' : hasSelectedAllAvailableItems ? 'true' : 'false', indeterminate: hasSelectedSomeItems, checked: hasSelectedAllAvailableItems, onChange: _ => {
|
|
74
80
|
if (hasSelectedAllAvailableItems) {
|
|
75
81
|
_setSelectedKeys([]);
|
|
@@ -77,7 +83,7 @@ export const useMassActions = ({ isEnabled, store: { dispatch, view }, filtersSt
|
|
|
77
83
|
else {
|
|
78
84
|
_setSelectedKeys(allVisibleKeys);
|
|
79
85
|
}
|
|
80
|
-
}, children:
|
|
86
|
+
}, children: _jsx(ResultsCount, { t: t, isInactive: isInactive, totalCountFiltered: totalCountFiltered, totalCountLibrary: totalCountLibrary }) })) : (_jsx(KitDropDown, { trigger: ['click'], menu: {
|
|
81
87
|
items: [
|
|
82
88
|
hasSelectedAllAvailableItems
|
|
83
89
|
? null
|
|
@@ -91,8 +97,8 @@ export const useMassActions = ({ isEnabled, store: { dispatch, view }, filtersSt
|
|
|
91
97
|
{
|
|
92
98
|
key: 'toggle_all_selection',
|
|
93
99
|
label: hasSelectedAllAvailableItems
|
|
94
|
-
? t('explorer.massAction.toggle_selection.deselect_all', { count:
|
|
95
|
-
: t('explorer.massAction.toggle_selection.select_all', { count:
|
|
100
|
+
? t('explorer.massAction.toggle_selection.deselect_all', { count: totalCountFiltered })
|
|
101
|
+
: t('explorer.massAction.toggle_selection.select_all', { count: totalCountFiltered }),
|
|
96
102
|
onClick: async () => {
|
|
97
103
|
if (hasSelectedAllAvailableItems) {
|
|
98
104
|
_setSelectedKeys([]);
|
|
@@ -103,7 +109,7 @@ export const useMassActions = ({ isEnabled, store: { dispatch, view }, filtersSt
|
|
|
103
109
|
},
|
|
104
110
|
},
|
|
105
111
|
],
|
|
106
|
-
}, children: _jsx(KitCheckbox, { "aria-checked": hasSelectedSomeItems ? 'mixed' : hasSelectedAllAvailableItems ? 'true' : 'false', indeterminate: hasSelectedSomeItems, checked: hasSelectedAllAvailableItems, children: _jsxs(KitSpace, { size: "
|
|
112
|
+
}, children: _jsx(KitCheckbox, { "aria-checked": hasSelectedSomeItems ? 'mixed' : hasSelectedAllAvailableItems ? 'true' : 'false', indeterminate: hasSelectedSomeItems, checked: hasSelectedAllAvailableItems, children: _jsxs(KitSpace, { size: "xxs", children: [_jsx(ResultsCount, { t: t, isInactive: isInactive, totalCountFiltered: totalCountFiltered, totalCountLibrary: totalCountLibrary }), _jsx(FontAwesomeIcon, { icon: faCaretDown, size: "2xs" })] }) }) }));
|
|
107
113
|
const _setSelectedKeys = useCallback((keys) => dispatch({
|
|
108
114
|
type: ViewSettingsActionTypes.SET_SELECTED_KEYS,
|
|
109
115
|
payload: keys,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useMassActions.js","sourceRoot":"","sources":["../../../../src/components/Explorer/actions-mass/useMassActions.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 {closeKitSnackBar, KitCheckbox, KitDropDown, KitSpace, openKitSnackBar} from 'aristid-ds';\nimport {type Dispatch, useCallback, useEffect, useRef} from 'react';\nimport {RecordFilterCondition, RecordFilterOperator} from '_ui/_gqlTypes';\nimport {useSharedTranslation} from '_ui/hooks/useSharedTranslation';\nimport {interleaveElement} from '_ui/_utils/interleaveElement';\nimport {type IMassActions, type MassSelection} from '../_types';\nimport {MASS_SELECTION_ALL} from '../_constants';\nimport {type IViewSettingsAction, type IViewSettingsState, ViewSettingsActionTypes} from '../manage-view-settings';\nimport {prepareFiltersForRequest} from '_ui/components/Filters';\nimport {type IUIFiltersState} from '_ui/components/Filters/context/filtersReducer';\nimport {FontAwesomeIcon} from '@fortawesome/react-fontawesome';\nimport {faChevronDown} from '@fortawesome/free-solid-svg-icons';\n\n/**\n * Hook used to manage mass selection as the snackbar and all kind of selection (manual, all in page, all in filters)\n *\n * @param isEnabled - whether the selection is present\n * @param view - represent the current view\n * @param dispatch - method to change the current view\n * @param totalCount - used for display only\n * @param allVisibleKeys - list of all ids currently selected\n * @param massActions - array of all actions available on mass selection\n * @param snackbarId - id of the snackbar displayed\n */\nexport const useMassActions = ({\n isEnabled,\n store: {dispatch, view},\n filtersStore: {filters, filtersOperator},\n totalCount,\n allVisibleKeys,\n massActions,\n snackbarId,\n}: {\n isEnabled: boolean;\n store: {\n view: IViewSettingsState;\n dispatch: Dispatch<IViewSettingsAction>;\n };\n filtersStore: IUIFiltersState;\n totalCount: number;\n allVisibleKeys: string[];\n massActions: IMassActions[];\n snackbarId: string;\n}) => {\n const {t} = useSharedTranslation();\n\n useEffect(() => {\n if (view.massSelection === MASS_SELECTION_ALL || view.massSelection.length !== 0) {\n openKitSnackBar({\n duration: 0,\n closable: true,\n snackbarId,\n toasterId: snackbarId,\n onClose: () => _setSelectedKeys([]),\n message: t('explorer.massAction.selectedItems', {\n count: view.massSelection === MASS_SELECTION_ALL ? totalCount : view.massSelection.length,\n }),\n actions: massActions.map(({label, icon, deselectAll, callback}, index) => ({\n key: index,\n label,\n icon,\n onClick: async () => {\n await callback(\n view.massSelection === MASS_SELECTION_ALL\n ? prepareFiltersForRequest(filters, filtersOperator)\n : interleaveElement(\n {operator: RecordFilterOperator.OR},\n view.massSelection.map(key => [\n {\n field: 'id',\n condition: RecordFilterCondition.EQUAL,\n value: String(key),\n },\n ]),\n ),\n view.massSelection,\n );\n if (deselectAll) {\n dispatch({\n type: ViewSettingsActionTypes.SET_SELECTED_KEYS,\n payload: [],\n });\n }\n },\n })),\n });\n } else {\n closeKitSnackBar(snackbarId);\n }\n }, [view.massSelection, filters, totalCount]);\n\n useEffect(() => () => closeKitSnackBar(snackbarId), []);\n\n const isOnePage = view.pageSize > totalCount;\n const hasSelectedAllAvailableItems =\n view.massSelection === MASS_SELECTION_ALL || view.massSelection.length === totalCount;\n const hasSelectedSomeItems =\n view.massSelection !== MASS_SELECTION_ALL &&\n view.massSelection.length > 0 &&\n view.massSelection.length < totalCount;\n\n const _selectAllButton = isOnePage ? (\n <KitCheckbox\n aria-checked={hasSelectedSomeItems ? 'mixed' : hasSelectedAllAvailableItems ? 'true' : 'false'}\n indeterminate={hasSelectedSomeItems}\n checked={hasSelectedAllAvailableItems}\n onChange={_ => {\n if (hasSelectedAllAvailableItems) {\n _setSelectedKeys([]);\n } else {\n _setSelectedKeys(allVisibleKeys);\n }\n }}\n >\n {t('explorer.massAction.itemsTotal', {count: totalCount})}\n </KitCheckbox>\n ) : (\n <KitDropDown\n trigger={['click']}\n menu={{\n items: [\n hasSelectedAllAvailableItems\n ? null\n : {\n key: 'toggle_page_selection',\n label: t('explorer.massAction.toggle_selection.select_page', {count: view.pageSize}),\n onClick: () => {\n _setSelectedKeys([...new Set([...view.massSelection, ...allVisibleKeys])]);\n },\n },\n {\n key: 'toggle_all_selection',\n label: hasSelectedAllAvailableItems\n ? t('explorer.massAction.toggle_selection.deselect_all', {count: totalCount})\n : t('explorer.massAction.toggle_selection.select_all', {count: totalCount}),\n onClick: async () => {\n if (hasSelectedAllAvailableItems) {\n _setSelectedKeys([]);\n } else {\n _setSelectedKeys(MASS_SELECTION_ALL);\n }\n },\n },\n ],\n }}\n >\n <KitCheckbox\n aria-checked={hasSelectedSomeItems ? 'mixed' : hasSelectedAllAvailableItems ? 'true' : 'false'}\n indeterminate={hasSelectedSomeItems}\n checked={hasSelectedAllAvailableItems}\n >\n <KitSpace size=\"s\">\n {t('explorer.massAction.itemsTotal', {count: totalCount})}\n <FontAwesomeIcon icon={faChevronDown} />\n </KitSpace>\n </KitCheckbox>\n </KitDropDown>\n );\n\n const _setSelectedKeys = useCallback(\n (keys: MassSelection) =>\n dispatch({\n type: ViewSettingsActionTypes.SET_SELECTED_KEYS,\n payload: keys,\n }),\n [dispatch],\n );\n\n return {\n selectAllButton: isEnabled ? _selectAllButton : null,\n setSelectedKeys: isEnabled ? _setSelectedKeys : null,\n };\n};\n"]}
|
|
1
|
+
{"version":3,"file":"useMassActions.js","sourceRoot":"","sources":["../../../../src/components/Explorer/actions-mass/useMassActions.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 {closeKitSnackBar, KitCheckbox, KitDropDown, KitSpace, KitTypography, openKitSnackBar} from 'aristid-ds';\nimport {type Dispatch, useCallback, useEffect, useRef, useState} from 'react';\nimport {RecordFilterCondition, RecordFilterOperator} from '_ui/_gqlTypes';\nimport {useSharedTranslation} from '_ui/hooks/useSharedTranslation';\nimport {interleaveElement} from '_ui/_utils/interleaveElement';\nimport {type IMassActions, type MassSelection} from '../_types';\nimport {MASS_SELECTION_ALL} from '../_constants';\nimport {type IViewSettingsAction, type IViewSettingsState, ViewSettingsActionTypes} from '../manage-view-settings';\nimport {prepareFiltersForRequest} from '_ui/components/Filters';\nimport {type IUIFiltersState} from '_ui/components/Filters/context/filtersReducer';\nimport {FontAwesomeIcon} from '@fortawesome/react-fontawesome';\nimport {faCaretDown} from '@fortawesome/free-solid-svg-icons';\nimport {ResultsCount} from './ResultsCount';\n\n/**\n * Hook used to manage mass selection as the snackbar and all kind of selection (manual, all in page, all in filters)\n *\n * @param isEnabled - whether the selection is present\n * @param view - represent the current view\n * @param dispatch - method to change the current view\n * @param totalCountFiltered - number of results with the current filters\n * @param totalCountLibrary - number of total items in the library (without filters)\n * @param allVisibleKeys - list of all ids currently selected\n * @param massActions - array of all actions available on mass selection\n * @param snackbarId - id of the snackbar displayed\n */\nexport const useMassActions = ({\n isEnabled,\n store: {dispatch, view},\n filtersStore: {filters, filtersOperator},\n totalCountFiltered,\n totalCountLibrary,\n allVisibleKeys,\n massActions,\n snackbarId,\n}: {\n isEnabled: boolean;\n store: {\n view: IViewSettingsState;\n dispatch: Dispatch<IViewSettingsAction>;\n };\n filtersStore: IUIFiltersState;\n totalCountFiltered: number;\n totalCountLibrary: number;\n allVisibleKeys: string[];\n massActions: IMassActions[];\n snackbarId: string;\n}) => {\n const {t} = useSharedTranslation();\n const [isInactive, setIsInactive] = useState(false);\n\n useEffect(() => {\n setIsInactive(filters.filter(f => f.field === 'active')?.[0]?.value === 'false');\n }, [filters]);\n\n useEffect(() => {\n if (view.massSelection === MASS_SELECTION_ALL || view.massSelection.length !== 0) {\n openKitSnackBar({\n duration: 0,\n closable: true,\n snackbarId,\n toasterId: snackbarId,\n onClose: () => _setSelectedKeys([]),\n message: t('explorer.massAction.selectedItems', {\n count: view.massSelection === MASS_SELECTION_ALL ? totalCountFiltered : view.massSelection.length,\n }),\n actions: massActions.map(({label, icon, deselectAll, callback}, index) => ({\n key: index,\n label,\n icon,\n onClick: async () => {\n await callback(\n view.massSelection === MASS_SELECTION_ALL\n ? prepareFiltersForRequest(filters, filtersOperator)\n : interleaveElement(\n {operator: RecordFilterOperator.OR},\n view.massSelection.map(key => [\n {\n field: 'id',\n condition: RecordFilterCondition.EQUAL,\n value: String(key),\n },\n ]),\n ),\n view.massSelection,\n );\n if (deselectAll) {\n dispatch({\n type: ViewSettingsActionTypes.SET_SELECTED_KEYS,\n payload: [],\n });\n }\n },\n })),\n });\n } else {\n closeKitSnackBar(snackbarId);\n }\n }, [view.massSelection, filters, totalCountFiltered]);\n\n useEffect(() => () => closeKitSnackBar(snackbarId), []);\n\n const isOnePage = view.pageSize > totalCountFiltered;\n const hasSelectedAllAvailableItems =\n view.massSelection === MASS_SELECTION_ALL || view.massSelection.length === totalCountFiltered;\n const hasSelectedSomeItems =\n view.massSelection !== MASS_SELECTION_ALL &&\n view.massSelection.length > 0 &&\n view.massSelection.length < totalCountFiltered;\n\n const _selectAllButton = isOnePage ? (\n <KitCheckbox\n aria-checked={hasSelectedSomeItems ? 'mixed' : hasSelectedAllAvailableItems ? 'true' : 'false'}\n indeterminate={hasSelectedSomeItems}\n checked={hasSelectedAllAvailableItems}\n onChange={_ => {\n if (hasSelectedAllAvailableItems) {\n _setSelectedKeys([]);\n } else {\n _setSelectedKeys(allVisibleKeys);\n }\n }}\n >\n <ResultsCount\n t={t}\n isInactive={isInactive}\n totalCountFiltered={totalCountFiltered}\n totalCountLibrary={totalCountLibrary}\n />\n </KitCheckbox>\n ) : (\n <KitDropDown\n trigger={['click']}\n menu={{\n items: [\n hasSelectedAllAvailableItems\n ? null\n : {\n key: 'toggle_page_selection',\n label: t('explorer.massAction.toggle_selection.select_page', {count: view.pageSize}),\n onClick: () => {\n _setSelectedKeys([...new Set([...view.massSelection, ...allVisibleKeys])]);\n },\n },\n {\n key: 'toggle_all_selection',\n label: hasSelectedAllAvailableItems\n ? t('explorer.massAction.toggle_selection.deselect_all', {count: totalCountFiltered})\n : t('explorer.massAction.toggle_selection.select_all', {count: totalCountFiltered}),\n onClick: async () => {\n if (hasSelectedAllAvailableItems) {\n _setSelectedKeys([]);\n } else {\n _setSelectedKeys(MASS_SELECTION_ALL);\n }\n },\n },\n ],\n }}\n >\n <KitCheckbox\n aria-checked={hasSelectedSomeItems ? 'mixed' : hasSelectedAllAvailableItems ? 'true' : 'false'}\n indeterminate={hasSelectedSomeItems}\n checked={hasSelectedAllAvailableItems}\n >\n <KitSpace size=\"xxs\">\n <ResultsCount\n t={t}\n isInactive={isInactive}\n totalCountFiltered={totalCountFiltered}\n totalCountLibrary={totalCountLibrary}\n />\n <FontAwesomeIcon icon={faCaretDown} size=\"2xs\" />\n </KitSpace>\n </KitCheckbox>\n </KitDropDown>\n );\n\n const _setSelectedKeys = useCallback(\n (keys: MassSelection) =>\n dispatch({\n type: ViewSettingsActionTypes.SET_SELECTED_KEYS,\n payload: keys,\n }),\n [dispatch],\n );\n\n return {\n selectAllButton: isEnabled ? _selectAllButton : null,\n setSelectedKeys: isEnabled ? _setSelectedKeys : null,\n };\n};\n"]}
|
|
@@ -16,8 +16,9 @@ import { type FeatureHook, type Entrypoint, type IPrimaryAction } from '../_type
|
|
|
16
16
|
* @param totalCount - used for display purpose only
|
|
17
17
|
* @param onCreate - callback to let outside world known about creating item (and linking)
|
|
18
18
|
* @param refetch - method to call to refresh the list. A new item will be visible if it matches filters and sorts
|
|
19
|
+
* @param refetchCount - method to call to refresh the count of the library. A new item will be visible if it matches filters and sorts
|
|
19
20
|
*/
|
|
20
|
-
export declare const useCreatePrimaryAction: ({ isEnabled, isVisible, libraryId, entrypoint, totalCount, canCreateAndLinkValue, isMultivalue, onCreate, formId, joinLibraryContext, refetch, }: FeatureHook<{
|
|
21
|
+
export declare const useCreatePrimaryAction: ({ isEnabled, isVisible, libraryId, entrypoint, totalCount, canCreateAndLinkValue, isMultivalue, onCreate, formId, joinLibraryContext, refetch, refetchCount, }: FeatureHook<{
|
|
21
22
|
libraryId: string;
|
|
22
23
|
entrypoint: Entrypoint;
|
|
23
24
|
totalCount: number;
|
|
@@ -30,6 +31,7 @@ export declare const useCreatePrimaryAction: ({ isEnabled, isVisible, libraryId,
|
|
|
30
31
|
joinLibraryContext?: JoinLibraryContextFragment;
|
|
31
32
|
formId?: string;
|
|
32
33
|
refetch: () => void;
|
|
34
|
+
refetchCount: () => void;
|
|
33
35
|
}>) => {
|
|
34
36
|
createPrimaryAction: IPrimaryAction;
|
|
35
37
|
createModal: ReactElement<any, string | import("react").JSXElementConstructor<any>>;
|
|
@@ -28,8 +28,9 @@ import { faPlus } from '@fortawesome/free-solid-svg-icons';
|
|
|
28
28
|
* @param totalCount - used for display purpose only
|
|
29
29
|
* @param onCreate - callback to let outside world known about creating item (and linking)
|
|
30
30
|
* @param refetch - method to call to refresh the list. A new item will be visible if it matches filters and sorts
|
|
31
|
+
* @param refetchCount - method to call to refresh the count of the library. A new item will be visible if it matches filters and sorts
|
|
31
32
|
*/
|
|
32
|
-
export const useCreatePrimaryAction = ({ isEnabled, isVisible, libraryId, entrypoint, totalCount, canCreateAndLinkValue, isMultivalue, onCreate, formId, joinLibraryContext, refetch, }) => {
|
|
33
|
+
export const useCreatePrimaryAction = ({ isEnabled, isVisible, libraryId, entrypoint, totalCount, canCreateAndLinkValue, isMultivalue, onCreate, formId, joinLibraryContext, refetch, refetchCount, }) => {
|
|
33
34
|
const { t } = useSharedTranslation();
|
|
34
35
|
const { lang } = useLang();
|
|
35
36
|
const [isModalCreationVisible, setIsModalCreationVisible] = useState(false);
|
|
@@ -85,6 +86,7 @@ export const useCreatePrimaryAction = ({ isEnabled, isVisible, libraryId, entryp
|
|
|
85
86
|
case LibraryBehavior.files:
|
|
86
87
|
_createModal = (_jsx(UploadFiles, { libraryId: _getLibraryId(), multiple: true, onClose: () => setIsModalCreationVisible(false), onCompleted: () => {
|
|
87
88
|
refetch();
|
|
89
|
+
refetchCount();
|
|
88
90
|
_notifyNewCreation(t('upload.file'));
|
|
89
91
|
setIsModalCreationVisible(false);
|
|
90
92
|
} }));
|
|
@@ -92,6 +94,7 @@ export const useCreatePrimaryAction = ({ isEnabled, isVisible, libraryId, entryp
|
|
|
92
94
|
case LibraryBehavior.directories:
|
|
93
95
|
_createModal = (_jsx(CreateDirectory, { libraryId: _getLibraryId(), onClose: () => setIsModalCreationVisible(false), onCompleted: () => {
|
|
94
96
|
refetch();
|
|
97
|
+
refetchCount();
|
|
95
98
|
_notifyNewCreation(t('upload.folder'));
|
|
96
99
|
setIsModalCreationVisible(false);
|
|
97
100
|
} }));
|
|
@@ -124,6 +127,7 @@ export const useCreatePrimaryAction = ({ isEnabled, isVisible, libraryId, entryp
|
|
|
124
127
|
await Promise.resolve(onCreate?.({ recordIdCreated: newRecord.id }));
|
|
125
128
|
}
|
|
126
129
|
refetch();
|
|
130
|
+
refetchCount();
|
|
127
131
|
}, submitButtons: ['create'] }));
|
|
128
132
|
break;
|
|
129
133
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useCreatePrimaryAction.js","sourceRoot":"","sources":["../../../../src/components/Explorer/actions-primary/useCreatePrimaryAction.tsx"],"names":[],"mappings":";AAAA,oFAAoF;AACpF,sCAAsC;AACtC,sEAAsE;AACtE,OAAO,EAAoB,QAAQ,EAAC,MAAM,OAAO,CAAC;AAClD,OAAO,EAAC,QAAQ,EAAC,MAAM,YAAY,CAAC;AACpC,OAAO,EAAC,eAAe,EAAE,eAAe,EAAE,WAAW,EAAC,MAAM,gBAAgB,CAAC;AAC7E,OAAO,EAAC,oBAAoB,EAAC,MAAM,gCAAgC,CAAC;AACpE,OAAO,yBAAyB,MAAM,uFAAuF,CAAC;AAE9H,OAAO,EACH,aAAa,EAEb,eAAe,EACf,8BAA8B,GACjC,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAC,6BAA6B,EAAC,MAAM,eAAe,CAAC;AAC5D,OAAO,EAAC,sBAAsB,EAAC,MAAM,eAAe,CAAC;AACrD,OAAO,EAAC,oBAAoB,EAAC,MAAM,aAAa,CAAC;AACjD,OAAO,EAAC,OAAO,EAAC,MAAM,WAAW,CAAC;AAClC,OAAO,EAAC,eAAe,EAAC,MAAM,gCAAgC,CAAC;AAC/D,OAAO,EAAC,MAAM,EAAC,MAAM,mCAAmC,CAAC;AAEzD;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,EACnC,SAAS,EACT,SAAS,EACT,SAAS,EACT,UAAU,EACV,UAAU,EACV,qBAAqB,EACrB,YAAY,EACZ,QAAQ,EACR,MAAM,EACN,kBAAkB,EAClB,OAAO,GAiBT,EAAE,EAAE;IACF,MAAM,EAAC,CAAC,EAAC,GAAG,oBAAoB,EAAE,CAAC;IACnC,MAAM,EAAC,IAAI,EAAC,GAAG,OAAO,EAAE,CAAC;IAEzB,MAAM,CAAC,sBAAsB,EAAE,yBAAyB,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC5E,MAAM,EAAC,UAAU,EAAC,GAAG,yBAAyB,EAAE,CAAC;IAEjD,MAAM,aAAa,GAAG,GAAG,EAAE,CACvB,CAAC,kBAAkB,EAAE,kBAAkB;QACnC,gBAAgB,IAAI,kBAAkB,CAAC,kBAAkB;QACzD,kBAAkB,CAAC,kBAAkB,CAAC,cAAc,EAAE,EAAE,CAAC;QAC7D,SAAS,CAAC;IAEd,MAAM,EAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAC,GAAG,8BAA8B,CAAC;QAC1D,SAAS,EAAE,EAAC,SAAS,EAAE,aAAa,EAAE,EAAC;QACvC,IAAI,EAAE,CAAC,SAAS;KACnB,CAAC,CAAC;IAEH,MAAM,yBAAyB,GAAG,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,aAAa,IAAI,KAAK,CAAC;IAEhG,IAAI,KAAK,IAAI,OAAO,IAAI,CAAC,SAAS,IAAI,CAAC,yBAAyB,EAAE,CAAC;QAC/D,OAAO,EAAC,mBAAmB,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAC,CAAC;IAC1D,CAAC;IAED,IAAI,eAAe,CAAC;IACpB,IAAI,kBAAkB,EAAE,kBAAkB,EAAE,IAAI,KAAK,aAAa,CAAC,IAAI,EAAE,CAAC;QACtE,eAAe,GAAG,KAAK,CAAC;IAC5B,CAAC;SAAM,IAAI,UAAU,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QACvC,eAAe,GAAG,IAAI,CAAC;IAC3B,CAAC;SAAM,CAAC;QACJ,eAAe,GAAG,qBAAqB,IAAI,CAAC,YAAY,IAAI,UAAU,KAAK,CAAC,CAAC,CAAC;IAClF,CAAC;IAED,MAAM,oBAAoB,GAAmB;QACzC,QAAQ,EAAE,GAAG,EAAE;YACX,yBAAyB,CAAC,IAAI,CAAC,CAAC;QACpC,CAAC;QACD,IAAI,EAAE,KAAC,eAAe,IAAC,IAAI,EAAE,MAAM,GAAI;QACvC,QAAQ,EAAE,CAAC,eAAe;QAC1B,KAAK,EAAE,CAAC,CAAC,qBAAqB,CAAC;KAClC,CAAC;IAEF,MAAM,kBAAkB,GAAG,CAAC,KAAqB,EAAE,EAAE;QACjD,QAAQ,CAAC,OAAO,CAAC;YACb,QAAQ,EAAE,IAAI;YACd,QAAQ,EAAE,sBAAsB;YAChC,OAAO,EAAE,CAAC,CAAC,uCAAuC,EAAE;gBAChD,OAAO,EACH,oBAAoB,CAAC,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC;oBAC3D,CAAC,CAAC,oCAAoC,CAAC;aAC9C,CAAC;YACF,WAAW,EAAE,CAAC,CAAC,2CAA2C,EAAE;gBACxD,OAAO,EACH,oBAAoB,CAAC,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC;oBAC3D,CAAC,CAAC,oCAAoC,CAAC;gBAC3C,QAAQ,EAAE,KAAK,IAAI,CAAC,CAAC,oCAAoC,CAAC;aAC7D,CAAC;YACF,QAAQ,EAAE,IAAI;SACjB,CAAC,CAAC;IACP,CAAC,CAAC;IAEF,IAAI,YAAY,GAAwB,IAAI,CAAC;IAC7C,QAAQ,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC;QACzC,KAAK,eAAe,CAAC,KAAK;YACtB,YAAY,GAAG,CACX,KAAC,WAAW,IACR,SAAS,EAAE,aAAa,EAAE,EAC1B,QAAQ,QACR,OAAO,EAAE,GAAG,EAAE,CAAC,yBAAyB,CAAC,KAAK,CAAC,EAC/C,WAAW,EAAE,GAAG,EAAE;oBACd,OAAO,EAAE,CAAC;oBACV,kBAAkB,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC;oBACrC,yBAAyB,CAAC,KAAK,CAAC,CAAC;gBACrC,CAAC,GACH,CACL,CAAC;YACF,MAAM;QACV,KAAK,eAAe,CAAC,WAAW;YAC5B,YAAY,GAAG,CACX,KAAC,eAAe,IACZ,SAAS,EAAE,aAAa,EAAE,EAC1B,OAAO,EAAE,GAAG,EAAE,CAAC,yBAAyB,CAAC,KAAK,CAAC,EAC/C,WAAW,EAAE,GAAG,EAAE;oBACd,OAAO,EAAE,CAAC;oBACV,kBAAkB,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC;oBACvC,yBAAyB,CAAC,KAAK,CAAC,CAAC;gBACrC,CAAC,GACH,CACL,CAAC;YACF,MAAM;QACV,KAAK,eAAe,CAAC,QAAQ,CAAC;QAC9B,KAAK,eAAe,CAAC,IAAI;YACrB,YAAY,GAAG,CACX,KAAC,eAAe,IACZ,SAAS,EAAE,6BAA6B,EACxC,IAAI,QACJ,MAAM,EAAE,IAAI,EACZ,OAAO,EAAE,aAAa,EAAE,EACxB,cAAc,EAAE,MAAM,EACtB,OAAO,EAAE,GAAG,EAAE;oBACV,yBAAyB,CAAC,KAAK,CAAC,CAAC;gBACrC,CAAC,EACD,QAAQ,EAAE,KAAK,EAAC,SAAS,EAAC,EAAE;oBACxB,kBAAkB,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;oBACpC,yBAAyB,CAAC,KAAK,CAAC,CAAC;oBACjC,IAAI,UAAU,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;wBAC7B,MAAM,UAAU,CACZ;4BACI,EAAE,EAAE,UAAU,CAAC,cAAc;4BAC7B,OAAO,EAAE;gCACL,EAAE,EAAE,UAAU,CAAC,eAAe;6BACjC;yBACJ,EACD;4BACI;gCACI,SAAS,EAAE,UAAU,CAAC,eAAe;gCACrC,OAAO,EAAE,IAAI;gCACb,KAAK,EAAE,SAAS,CAAC,EAAE;6BACtB;yBACJ,CACJ,CAAC,IAAI,CAAC,KAAK,EAAC,gBAAgB,EAAC,EAAE,CAC5B,QAAQ,EAAE,CAAC;4BACP,eAAe,EAAE,SAAS,CAAC,EAAE;4BAC7B,sBAAsB,EAAE,gBAAgB;yBAC3C,CAAC,CACL,CAAC;oBACN,CAAC;yBAAM,CAAC;wBACJ,MAAM,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,EAAC,eAAe,EAAE,SAAS,CAAC,EAAE,EAAC,CAAC,CAAC,CAAC;oBACvE,CAAC;oBACD,OAAO,EAAE,CAAC;gBACd,CAAC,EACD,aAAa,EAAE,CAAC,QAAQ,CAAC,GAC3B,CACL,CAAC;YACF,MAAM;IACd,CAAC;IAED,OAAO;QACH,mBAAmB,EAAE,SAAS,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,IAAI;QAC5D,WAAW,EAAE,sBAAsB,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI;KAC5D,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 ReactElement, useState} from 'react';\nimport {KitAlert} from 'aristid-ds';\nimport {CreateDirectory, EditRecordModal, UploadFiles} from '_ui/components';\nimport {useSharedTranslation} from '_ui/hooks/useSharedTranslation';\nimport useSaveValueBatchMutation from '_ui/components/RecordEdition/EditRecordContent/hooks/useExecuteSaveValueBatchMutation';\nimport {type ISubmitMultipleResult} from '_ui/components/RecordEdition/EditRecordContent/_types';\nimport {\n AttributeType,\n type JoinLibraryContextFragment,\n LibraryBehavior,\n useExplorerLibraryDetailsQuery,\n} from '_ui/_gqlTypes';\nimport {type FeatureHook, type Entrypoint, type IPrimaryAction} from '../_types';\nimport {CREATE_RECORD_MODAL_CLASSNAME} from '../_constants';\nimport {SUCCESS_ALERT_DURATION} from '_ui/constants';\nimport {localizedTranslation} from '@leav/utils';\nimport {useLang} from '_ui/hooks';\nimport {FontAwesomeIcon} from '@fortawesome/react-fontawesome';\nimport {faPlus} from '@fortawesome/free-solid-svg-icons';\n\n/**\n * Hook used to get the action for the `<DataView />` component.\n *\n * When the creation is done, we refresh all data even if the new record is not visible due to some filters.\n *\n * It returns also two parts: one for the call action button - one for displaying the modal required by the action.\n *\n * @param isEnabled - whether the action is present\n * @param isVisible - whether the button should be visible or not\n * @param libraryId - the library's id to add new item\n * @param entrypoint - represent the current entrypoint\n * @param totalCount - used for display purpose only\n * @param onCreate - callback to let outside world known about creating item (and linking)\n * @param refetch - method to call to refresh the list. A new item will be visible if it matches filters and sorts\n */\nexport const useCreatePrimaryAction = ({\n isEnabled,\n isVisible,\n libraryId,\n entrypoint,\n totalCount,\n canCreateAndLinkValue,\n isMultivalue,\n onCreate,\n formId,\n joinLibraryContext,\n refetch,\n}: FeatureHook<{\n libraryId: string;\n entrypoint: Entrypoint;\n totalCount: number;\n canCreateAndLinkValue: boolean;\n isMultivalue: boolean;\n onCreate?: ({\n recordIdCreated,\n saveValuesResultOnLink,\n }: {\n recordIdCreated: string;\n saveValuesResultOnLink?: ISubmitMultipleResult;\n }) => void;\n joinLibraryContext?: JoinLibraryContextFragment;\n formId?: string;\n refetch: () => void;\n}>) => {\n const {t} = useSharedTranslation();\n const {lang} = useLang();\n\n const [isModalCreationVisible, setIsModalCreationVisible] = useState(false);\n const {saveValues} = useSaveValueBatchMutation();\n\n const _getLibraryId = () =>\n (joinLibraryContext?.mandatoryAttribute &&\n 'linked_library' in joinLibraryContext.mandatoryAttribute &&\n joinLibraryContext.mandatoryAttribute.linked_library?.id) ||\n libraryId;\n\n const {data, loading, error} = useExplorerLibraryDetailsQuery({\n variables: {libraryId: _getLibraryId()},\n skip: !isEnabled,\n });\n\n const hasCreateRecordPermission = data?.libraries?.list[0]?.permissions?.create_record ?? false;\n\n if (error || loading || !isVisible || !hasCreateRecordPermission) {\n return {createPrimaryAction: null, createModal: null};\n }\n\n let canCreateRecord;\n if (joinLibraryContext?.mandatoryAttribute?.type === AttributeType.tree) {\n canCreateRecord = false;\n } else if (entrypoint.type === 'library') {\n canCreateRecord = true;\n } else {\n canCreateRecord = canCreateAndLinkValue && (isMultivalue || totalCount === 0);\n }\n\n const _createPrimaryAction: IPrimaryAction = {\n callback: () => {\n setIsModalCreationVisible(true);\n },\n icon: <FontAwesomeIcon icon={faPlus} />,\n disabled: !canCreateRecord,\n label: t('explorer.create-one'),\n };\n\n const _notifyNewCreation = (label?: string | null) => {\n KitAlert.success({\n showIcon: true,\n duration: SUCCESS_ALERT_DURATION,\n message: t('items_list.created_in_success.message', {\n libName:\n localizedTranslation(data?.libraries?.list[0]?.label, lang) ||\n t('items_list.created_in_success.item'),\n }),\n description: t('items_list.created_in_success.description', {\n libName:\n localizedTranslation(data?.libraries?.list[0]?.label, lang) ||\n t('items_list.created_in_success.item'),\n itemName: label || t('items_list.created_in_success.item'),\n }),\n closable: true,\n });\n };\n\n let _createModal: ReactElement | null = null;\n switch (data?.libraries?.list[0]?.behavior) {\n case LibraryBehavior.files:\n _createModal = (\n <UploadFiles\n libraryId={_getLibraryId()}\n multiple\n onClose={() => setIsModalCreationVisible(false)}\n onCompleted={() => {\n refetch();\n _notifyNewCreation(t('upload.file'));\n setIsModalCreationVisible(false);\n }}\n />\n );\n break;\n case LibraryBehavior.directories:\n _createModal = (\n <CreateDirectory\n libraryId={_getLibraryId()}\n onClose={() => setIsModalCreationVisible(false)}\n onCompleted={() => {\n refetch();\n _notifyNewCreation(t('upload.folder'));\n setIsModalCreationVisible(false);\n }}\n />\n );\n break;\n case LibraryBehavior.standard:\n case LibraryBehavior.join:\n _createModal = (\n <EditRecordModal\n className={CREATE_RECORD_MODAL_CLASSNAME}\n open\n record={null}\n library={_getLibraryId()}\n creationFormId={formId}\n onClose={() => {\n setIsModalCreationVisible(false);\n }}\n onCreate={async newRecord => {\n _notifyNewCreation(newRecord.label);\n setIsModalCreationVisible(false);\n if (entrypoint.type === 'link') {\n await saveValues(\n {\n id: entrypoint.parentRecordId,\n library: {\n id: entrypoint.parentLibraryId,\n },\n },\n [\n {\n attribute: entrypoint.linkAttributeId,\n idValue: null,\n value: newRecord.id,\n },\n ],\n ).then(async saveValuesResult =>\n onCreate?.({\n recordIdCreated: newRecord.id,\n saveValuesResultOnLink: saveValuesResult,\n }),\n );\n } else {\n await Promise.resolve(onCreate?.({recordIdCreated: newRecord.id}));\n }\n refetch();\n }}\n submitButtons={['create']}\n />\n );\n break;\n }\n\n return {\n createPrimaryAction: isEnabled ? _createPrimaryAction : null,\n createModal: isModalCreationVisible ? _createModal : null,\n };\n};\n"]}
|
|
1
|
+
{"version":3,"file":"useCreatePrimaryAction.js","sourceRoot":"","sources":["../../../../src/components/Explorer/actions-primary/useCreatePrimaryAction.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 ReactElement, useState} from 'react';\nimport {KitAlert} from 'aristid-ds';\nimport {CreateDirectory, EditRecordModal, UploadFiles} from '_ui/components';\nimport {useSharedTranslation} from '_ui/hooks/useSharedTranslation';\nimport useSaveValueBatchMutation from '_ui/components/RecordEdition/EditRecordContent/hooks/useExecuteSaveValueBatchMutation';\nimport {type ISubmitMultipleResult} from '_ui/components/RecordEdition/EditRecordContent/_types';\nimport {\n AttributeType,\n type JoinLibraryContextFragment,\n LibraryBehavior,\n useExplorerLibraryDetailsQuery,\n} from '_ui/_gqlTypes';\nimport {type FeatureHook, type Entrypoint, type IPrimaryAction} from '../_types';\nimport {CREATE_RECORD_MODAL_CLASSNAME} from '../_constants';\nimport {SUCCESS_ALERT_DURATION} from '_ui/constants';\nimport {localizedTranslation} from '@leav/utils';\nimport {useLang} from '_ui/hooks';\nimport {FontAwesomeIcon} from '@fortawesome/react-fontawesome';\nimport {faPlus} from '@fortawesome/free-solid-svg-icons';\n\n/**\n * Hook used to get the action for the `<DataView />` component.\n *\n * When the creation is done, we refresh all data even if the new record is not visible due to some filters.\n *\n * It returns also two parts: one for the call action button - one for displaying the modal required by the action.\n *\n * @param isEnabled - whether the action is present\n * @param isVisible - whether the button should be visible or not\n * @param libraryId - the library's id to add new item\n * @param entrypoint - represent the current entrypoint\n * @param totalCount - used for display purpose only\n * @param onCreate - callback to let outside world known about creating item (and linking)\n * @param refetch - method to call to refresh the list. A new item will be visible if it matches filters and sorts\n * @param refetchCount - method to call to refresh the count of the library. A new item will be visible if it matches filters and sorts\n */\nexport const useCreatePrimaryAction = ({\n isEnabled,\n isVisible,\n libraryId,\n entrypoint,\n totalCount,\n canCreateAndLinkValue,\n isMultivalue,\n onCreate,\n formId,\n joinLibraryContext,\n refetch,\n refetchCount,\n}: FeatureHook<{\n libraryId: string;\n entrypoint: Entrypoint;\n totalCount: number;\n canCreateAndLinkValue: boolean;\n isMultivalue: boolean;\n onCreate?: ({\n recordIdCreated,\n saveValuesResultOnLink,\n }: {\n recordIdCreated: string;\n saveValuesResultOnLink?: ISubmitMultipleResult;\n }) => void;\n joinLibraryContext?: JoinLibraryContextFragment;\n formId?: string;\n refetch: () => void;\n refetchCount: () => void;\n}>) => {\n const {t} = useSharedTranslation();\n const {lang} = useLang();\n\n const [isModalCreationVisible, setIsModalCreationVisible] = useState(false);\n const {saveValues} = useSaveValueBatchMutation();\n\n const _getLibraryId = () =>\n (joinLibraryContext?.mandatoryAttribute &&\n 'linked_library' in joinLibraryContext.mandatoryAttribute &&\n joinLibraryContext.mandatoryAttribute.linked_library?.id) ||\n libraryId;\n\n const {data, loading, error} = useExplorerLibraryDetailsQuery({\n variables: {libraryId: _getLibraryId()},\n skip: !isEnabled,\n });\n\n const hasCreateRecordPermission = data?.libraries?.list[0]?.permissions?.create_record ?? false;\n\n if (error || loading || !isVisible || !hasCreateRecordPermission) {\n return {createPrimaryAction: null, createModal: null};\n }\n\n let canCreateRecord;\n if (joinLibraryContext?.mandatoryAttribute?.type === AttributeType.tree) {\n canCreateRecord = false;\n } else if (entrypoint.type === 'library') {\n canCreateRecord = true;\n } else {\n canCreateRecord = canCreateAndLinkValue && (isMultivalue || totalCount === 0);\n }\n\n const _createPrimaryAction: IPrimaryAction = {\n callback: () => {\n setIsModalCreationVisible(true);\n },\n icon: <FontAwesomeIcon icon={faPlus} />,\n disabled: !canCreateRecord,\n label: t('explorer.create-one'),\n };\n\n const _notifyNewCreation = (label?: string | null) => {\n KitAlert.success({\n showIcon: true,\n duration: SUCCESS_ALERT_DURATION,\n message: t('items_list.created_in_success.message', {\n libName:\n localizedTranslation(data?.libraries?.list[0]?.label, lang) ||\n t('items_list.created_in_success.item'),\n }),\n description: t('items_list.created_in_success.description', {\n libName:\n localizedTranslation(data?.libraries?.list[0]?.label, lang) ||\n t('items_list.created_in_success.item'),\n itemName: label || t('items_list.created_in_success.item'),\n }),\n closable: true,\n });\n };\n\n let _createModal: ReactElement | null = null;\n switch (data?.libraries?.list[0]?.behavior) {\n case LibraryBehavior.files:\n _createModal = (\n <UploadFiles\n libraryId={_getLibraryId()}\n multiple\n onClose={() => setIsModalCreationVisible(false)}\n onCompleted={() => {\n refetch();\n refetchCount();\n _notifyNewCreation(t('upload.file'));\n setIsModalCreationVisible(false);\n }}\n />\n );\n break;\n case LibraryBehavior.directories:\n _createModal = (\n <CreateDirectory\n libraryId={_getLibraryId()}\n onClose={() => setIsModalCreationVisible(false)}\n onCompleted={() => {\n refetch();\n refetchCount();\n _notifyNewCreation(t('upload.folder'));\n setIsModalCreationVisible(false);\n }}\n />\n );\n break;\n case LibraryBehavior.standard:\n case LibraryBehavior.join:\n _createModal = (\n <EditRecordModal\n className={CREATE_RECORD_MODAL_CLASSNAME}\n open\n record={null}\n library={_getLibraryId()}\n creationFormId={formId}\n onClose={() => {\n setIsModalCreationVisible(false);\n }}\n onCreate={async newRecord => {\n _notifyNewCreation(newRecord.label);\n setIsModalCreationVisible(false);\n if (entrypoint.type === 'link') {\n await saveValues(\n {\n id: entrypoint.parentRecordId,\n library: {\n id: entrypoint.parentLibraryId,\n },\n },\n [\n {\n attribute: entrypoint.linkAttributeId,\n idValue: null,\n value: newRecord.id,\n },\n ],\n ).then(async saveValuesResult =>\n onCreate?.({\n recordIdCreated: newRecord.id,\n saveValuesResultOnLink: saveValuesResult,\n }),\n );\n } else {\n await Promise.resolve(onCreate?.({recordIdCreated: newRecord.id}));\n }\n refetch();\n refetchCount();\n }}\n submitButtons={['create']}\n />\n );\n break;\n }\n\n return {\n createPrimaryAction: isEnabled ? _createPrimaryAction : null,\n createModal: isModalCreationVisible ? _createModal : null,\n };\n};\n"]}
|
package/dist/components/Explorer/manage-view-settings/configure-display/view-type/SelectViewType.js
CHANGED
|
@@ -7,6 +7,6 @@ import { KitIdCard, KitRadio, KitSpace, KitTag } from 'aristid-ds';
|
|
|
7
7
|
export const SelectViewType = ({ value, onChange }) => {
|
|
8
8
|
const { t } = useSharedTranslation();
|
|
9
9
|
const comingSoonTag = (_jsx(KitTag, { type: "secondary", children: _jsx(KitIdCard, { description: String(t('explorer.coming-soon')) }) }));
|
|
10
|
-
return (_jsx(KitRadio.Group, { value: value, onChange: onChange, children: _jsxs(KitSpace, { direction: "vertical", size: 0, children: [_jsx(KitRadio, { value: "
|
|
10
|
+
return (_jsx(KitRadio.Group, { value: value, onChange: onChange, children: _jsxs(KitSpace, { direction: "vertical", size: 0, children: [_jsx(KitRadio, { value: "table", children: t('explorer.view-type-table') }), _jsx(KitRadio, { value: "timeline", children: t('explorer.view-type-planning') }), _jsx(KitRadio, { value: "list", disabled: true, children: _jsxs(KitSpace, { children: [t('explorer.view-type-list'), " ", comingSoonTag] }) }), _jsx(KitRadio, { value: "mosaic", disabled: true, children: _jsxs(KitSpace, { children: [t('explorer.view-type-mosaic'), " ", comingSoonTag] }) })] }) }));
|
|
11
11
|
};
|
|
12
12
|
//# sourceMappingURL=SelectViewType.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SelectViewType.js","sourceRoot":"","sources":["../../../../../../src/components/Explorer/manage-view-settings/configure-display/view-type/SelectViewType.tsx"],"names":[],"mappings":";AAAA,oFAAoF;AACpF,sCAAsC;AACtC,sEAAsE;AACtE,OAAO,EAAC,oBAAoB,EAAC,MAAM,gCAAgC,CAAC;AACpE,OAAO,EAAC,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAC,MAAM,YAAY,CAAC;AASjE,MAAM,CAAC,MAAM,cAAc,GAA4C,CAAC,EAAC,KAAK,EAAE,QAAQ,EAAC,EAAE,EAAE;IACzF,MAAM,EAAC,CAAC,EAAC,GAAG,oBAAoB,EAAE,CAAC;IAEnC,MAAM,aAAa,GAAG,CAClB,KAAC,MAAM,IAAC,IAAI,EAAC,WAAW,YACpB,KAAC,SAAS,IAAC,WAAW,EAAE,MAAM,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,GAAI,GACxD,CACZ,CAAC;IAEF,OAAO,CACH,KAAC,QAAQ,CAAC,KAAK,IAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,YAC5C,MAAC,QAAQ,IAAC,SAAS,EAAC,UAAU,EAAC,IAAI,EAAE,CAAC,aAClC,KAAC,QAAQ,IAAC,KAAK,EAAC,
|
|
1
|
+
{"version":3,"file":"SelectViewType.js","sourceRoot":"","sources":["../../../../../../src/components/Explorer/manage-view-settings/configure-display/view-type/SelectViewType.tsx"],"names":[],"mappings":";AAAA,oFAAoF;AACpF,sCAAsC;AACtC,sEAAsE;AACtE,OAAO,EAAC,oBAAoB,EAAC,MAAM,gCAAgC,CAAC;AACpE,OAAO,EAAC,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAC,MAAM,YAAY,CAAC;AASjE,MAAM,CAAC,MAAM,cAAc,GAA4C,CAAC,EAAC,KAAK,EAAE,QAAQ,EAAC,EAAE,EAAE;IACzF,MAAM,EAAC,CAAC,EAAC,GAAG,oBAAoB,EAAE,CAAC;IAEnC,MAAM,aAAa,GAAG,CAClB,KAAC,MAAM,IAAC,IAAI,EAAC,WAAW,YACpB,KAAC,SAAS,IAAC,WAAW,EAAE,MAAM,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,GAAI,GACxD,CACZ,CAAC;IAEF,OAAO,CACH,KAAC,QAAQ,CAAC,KAAK,IAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,YAC5C,MAAC,QAAQ,IAAC,SAAS,EAAC,UAAU,EAAC,IAAI,EAAE,CAAC,aAClC,KAAC,QAAQ,IAAC,KAAK,EAAC,OAAO,YAAE,CAAC,CAAC,0BAA0B,CAAC,GAAY,EAClE,KAAC,QAAQ,IAAC,KAAK,EAAC,UAAU,YAAE,CAAC,CAAC,6BAA6B,CAAC,GAAY,EACxE,KAAC,QAAQ,IAAC,KAAK,EAAC,MAAM,EAAC,QAAQ,kBAC3B,MAAC,QAAQ,eACJ,CAAC,CAAC,yBAAyB,CAAC,OAAG,aAAa,IACtC,GACJ,EACX,KAAC,QAAQ,IAAC,KAAK,EAAC,QAAQ,EAAC,QAAQ,kBAC7B,MAAC,QAAQ,eACJ,CAAC,CAAC,2BAA2B,CAAC,OAAG,aAAa,IACxC,GACJ,IACJ,GACE,CACpB,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 {useSharedTranslation} from '_ui/hooks/useSharedTranslation';\nimport {KitIdCard, KitRadio, KitSpace, KitTag} from 'aristid-ds';\nimport {type RadioGroupProps} from 'aristid-ds/dist/Kit/DataEntry/Radio';\nimport {type FunctionComponent} from 'react';\n\ninterface ISelectViewTypeProps {\n value: string;\n onChange: RadioGroupProps['onChange'];\n}\n\nexport const SelectViewType: FunctionComponent<ISelectViewTypeProps> = ({value, onChange}) => {\n const {t} = useSharedTranslation();\n\n const comingSoonTag = (\n <KitTag type=\"secondary\">\n <KitIdCard description={String(t('explorer.coming-soon'))} />\n </KitTag>\n );\n\n return (\n <KitRadio.Group value={value} onChange={onChange}>\n <KitSpace direction=\"vertical\" size={0}>\n <KitRadio value=\"table\">{t('explorer.view-type-table')}</KitRadio>\n <KitRadio value=\"timeline\">{t('explorer.view-type-planning')}</KitRadio>\n <KitRadio value=\"list\" disabled>\n <KitSpace>\n {t('explorer.view-type-list')} {comingSoonTag}\n </KitSpace>\n </KitRadio>\n <KitRadio value=\"mosaic\" disabled>\n <KitSpace>\n {t('explorer.view-type-mosaic')} {comingSoonTag}\n </KitSpace>\n </KitRadio>\n </KitSpace>\n </KitRadio.Group>\n );\n};\n"]}
|
|
@@ -34,7 +34,7 @@ const Content = styled.div `
|
|
|
34
34
|
overflow-y: scroll;
|
|
35
35
|
border-right: ${props => props.$shouldUseLayoutWithSidebar ? '1px solid var(--general-utilities-border)' : 'none'};
|
|
36
36
|
`;
|
|
37
|
-
export const EditRecord = ({ antdForm, formId, isFormCreationMode, formElementId, record, library: libraryId, onCreate, valuesVersion, enableSidebar = false, showSidebar = false, sidebarContainer, containerStyle, withInfoButton, removePadding = false, }) => {
|
|
37
|
+
export const EditRecord = ({ antdForm, formId, isFormCreationMode, formElementId, record, library: libraryId, onCreate, valuesVersion, enableSidebar = false, showSidebar = false, sidebarContainer, forceDisableSidebarInAppStudio = false, containerStyle, withInfoButton, removePadding = false, }) => {
|
|
38
38
|
const [state, dispatch] = useReducer(editRecordReducer, {
|
|
39
39
|
...initialState,
|
|
40
40
|
record,
|
|
@@ -161,7 +161,7 @@ export const EditRecord = ({ antdForm, formId, isFormCreationMode, formElementId
|
|
|
161
161
|
}));
|
|
162
162
|
return saveValues(record, valuesToSave, version, true);
|
|
163
163
|
};
|
|
164
|
-
const shouldUseLayoutWithSidebar = state.enableSidebar && state.isOpenSidebar && sidebarContainer === undefined;
|
|
165
|
-
return (_jsx(ErrorBoundary, { children: _jsx(EditRecordReducerContext.Provider, { value: { state, dispatch }, children: _jsxs(Container, { "$shouldUseLayoutWithSidebar": shouldUseLayoutWithSidebar, style: containerStyle, children: [_jsx(EditRecordButtons, {}), _jsx(Content, { className: "edit-record-content-container", "$shouldUseLayoutWithSidebar": shouldUseLayoutWithSidebar, "$removePadding": removePadding, children: permissionsLoading ? (_jsx(EditRecordSkeleton, { rows: 5 })) : canEdit ? (_jsx(EditRecordContent, { antdForm: antdForm, formId: formId, isFormCreationMode: isFormCreationMode, formElementId: formElementId, record: record, library: libraryId, onRecordSubmit: _handleRecordSubmit, onValueSubmit: _handleValueSubmit, onValueDelete: deleteValue, onDeleteMultipleValues: _handleDeleteAllValues, readonly: isReadOnly })) : (_jsx(ErrorDisplay, { type: ErrorDisplayTypes.PERMISSION_ERROR, showActionButton: false })) }), _jsx(EditRecordSidebar, { onMetadataSubmit: _handleMetadataSubmit, sidebarContainer: sidebarContainer })] }) }) }));
|
|
164
|
+
const shouldUseLayoutWithSidebar = state.enableSidebar && state.isOpenSidebar && sidebarContainer === undefined && !forceDisableSidebarInAppStudio;
|
|
165
|
+
return (_jsx(ErrorBoundary, { children: _jsx(EditRecordReducerContext.Provider, { value: { state, dispatch }, children: _jsxs(Container, { "$shouldUseLayoutWithSidebar": shouldUseLayoutWithSidebar, style: containerStyle, children: [_jsx(EditRecordButtons, {}), _jsx(Content, { className: "edit-record-content-container", "$shouldUseLayoutWithSidebar": shouldUseLayoutWithSidebar, "$removePadding": removePadding, children: permissionsLoading ? (_jsx(EditRecordSkeleton, { rows: 5 })) : canEdit ? (_jsx(EditRecordContent, { antdForm: antdForm, formId: formId, isFormCreationMode: isFormCreationMode, formElementId: formElementId, record: record, library: libraryId, onRecordSubmit: _handleRecordSubmit, onValueSubmit: _handleValueSubmit, onValueDelete: deleteValue, onDeleteMultipleValues: _handleDeleteAllValues, readonly: isReadOnly })) : (_jsx(ErrorDisplay, { type: ErrorDisplayTypes.PERMISSION_ERROR, showActionButton: false })) }), !forceDisableSidebarInAppStudio && (_jsx(EditRecordSidebar, { onMetadataSubmit: _handleMetadataSubmit, sidebarContainer: sidebarContainer }))] }) }) }));
|
|
166
166
|
};
|
|
167
167
|
//# sourceMappingURL=EditRecord.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EditRecord.js","sourceRoot":"","sources":["../../../../src/components/RecordEdition/EditRecord/EditRecord.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 isEqual from 'lodash/isEqual';\nimport {type FunctionComponent, useEffect, useReducer} from 'react';\nimport styled, {type CSSObject} from 'styled-components';\nimport {ErrorDisplayTypes} from '../../../constants';\nimport {useCanEditRecord} from '../../../hooks/useCanEditRecord';\nimport {type IValueVersion} from '../../../types/values';\nimport {\n AttributeType,\n type RecordFormAttributeStandardAttributeFragment,\n type RecordIdentityFragment,\n useActivateNewRecordMutation,\n} from '../../../_gqlTypes';\nimport {\n type IRecordPropertyLink,\n type IRecordPropertyStandard,\n type IRecordPropertyTree,\n} from '../../../_queries/records/getRecordPropertiesQuery';\nimport {ErrorBoundary} from '../../ErrorBoundary';\nimport {ErrorDisplay} from '../../ErrorDisplay';\nimport EditRecordContent from '../EditRecordContent';\nimport useExecuteDeleteValueMutation from '../EditRecordContent/hooks/useExecuteDeleteValueMutation';\nimport useSaveValueBatchMutation from '../EditRecordContent/hooks/useExecuteSaveValueBatchMutation';\nimport {\n type DeleteMultipleValuesFunc,\n type ISubmittedValueLink,\n type ISubmittedValueStandard,\n type ISubmittedValueTree,\n type IValueToSubmit,\n type MetadataSubmitValueFunc,\n type SubmitValueFunc,\n} from '../EditRecordContent/_types';\nimport editRecordReducer, {EditRecordReducerActionsTypes, initialState} from '../editRecordReducer/editRecordReducer';\nimport {EditRecordReducerContext} from '../editRecordReducer/editRecordReducerContext';\nimport {type FormInstance} from 'antd/lib/form/Form';\nimport EditRecordSidebar from '../EditRecordSidebar';\nimport EditRecordSkeleton from '../EditRecordSkeleton';\nimport {useQuery} from '@apollo/client';\nimport {getLibraryByIdQuery} from '_ui/_queries/libraries/getLibraryByIdQuery';\nimport EditRecordButtons from '../EditRecordButtons';\n\ninterface IEditRecordProps {\n antdForm: FormInstance;\n formId: string;\n isFormCreationMode: boolean;\n formElementId?: string;\n record: RecordIdentityFragment['whoAmI'] | null;\n library: string;\n onCreate?: (newRecord: RecordIdentityFragment['whoAmI']) => void;\n valuesVersion?: IValueVersion;\n showSidebar?: boolean;\n enableSidebar?: boolean;\n sidebarContainer?: HTMLElement;\n containerStyle?: CSSObject;\n withInfoButton: boolean;\n removePadding?: boolean; // TODO: This prop should be remove when EditRecord will be moved to app-studio or data-studio deleted\n}\n\nconst sidebarWidth = '352px';\n\nconst Container = styled.div<{$shouldUseLayoutWithSidebar: boolean; style: CSSObject}>`\n display: grid;\n grid-template-columns: ${props => (props.$shouldUseLayoutWithSidebar ? `minmax(0, auto) ${sidebarWidth}` : '1fr')};\n grid-template-areas: ${props => (props.$shouldUseLayoutWithSidebar ? '\"content sidebar\"' : '\"content\"')};\n overflow: hidden;\n`;\n\nconst Content = styled.div<{$shouldUseLayoutWithSidebar: boolean; $removePadding: boolean}>`\n grid-area: content;\n padding: ${props => (props.$removePadding ? 'unset' : '24px')};\n overflow-x: hidden;\n overflow-y: scroll;\n border-right: ${props =>\n props.$shouldUseLayoutWithSidebar ? '1px solid var(--general-utilities-border)' : 'none'};\n`;\n\nexport const EditRecord: FunctionComponent<IEditRecordProps> = ({\n antdForm,\n formId,\n isFormCreationMode,\n formElementId,\n record,\n library: libraryId,\n onCreate,\n valuesVersion,\n enableSidebar = false,\n showSidebar = false,\n sidebarContainer,\n containerStyle,\n withInfoButton,\n removePadding = false,\n}) => {\n const [state, dispatch] = useReducer(editRecordReducer, {\n ...initialState,\n record,\n libraryId,\n libraryLabel: null,\n valuesVersion,\n originValuesVersion: valuesVersion,\n withInfoButton,\n });\n\n const {\n loading: permissionsLoading,\n canEdit,\n isReadOnly,\n } = useCanEditRecord({...record?.library, id: libraryId}, record?.id);\n\n const {data: libraryData} = useQuery(getLibraryByIdQuery, {\n variables: {id: [libraryId]},\n });\n\n const {saveValues} = useSaveValueBatchMutation();\n const {deleteValue} = useExecuteDeleteValueMutation(record);\n const [activateNewRecordMutation] = useActivateNewRecordMutation();\n\n // Update record in reducer when it changes. Might happen on record identity change (after value save)\n useEffect(() => {\n if (libraryData) {\n dispatch({\n type: EditRecordReducerActionsTypes.SET_LIBRARY_LABEL,\n label: libraryData.libraries.list[0].label,\n });\n }\n }, [libraryData]);\n\n useEffect(() => {\n if (record && !isEqual(record, state.record)) {\n dispatch({\n type: EditRecordReducerActionsTypes.SET_RECORD,\n record,\n });\n }\n }, [record]);\n\n useEffect(() => {\n dispatch({\n type: EditRecordReducerActionsTypes.SET_ENABLE_SIDEBAR,\n enabled: enableSidebar,\n });\n }, [enableSidebar]);\n\n useEffect(() => {\n dispatch({\n type: EditRecordReducerActionsTypes.SET_SIDEBAR_IS_OPEN,\n isOpen: showSidebar,\n });\n }, [showSidebar]);\n\n const _handleValueSubmit: SubmitValueFunc = async (values, version) =>\n saveValues(\n record,\n values.map(val => {\n const savableValue = {...val, attribute: val.attribute.id, metadata: val.metadata};\n\n if (val.value) {\n switch (val.attribute.type) {\n case AttributeType.advanced_link:\n case AttributeType.simple_link:\n savableValue.value = (val as ISubmittedValueLink).value.id;\n break;\n case AttributeType.tree:\n savableValue.value = (val as ISubmittedValueTree).value.id;\n break;\n default:\n savableValue.value = (val as ISubmittedValueStandard).value;\n break;\n }\n }\n\n return savableValue as IValueToSubmit;\n }),\n version,\n true, // deleteEmpty\n );\n\n const _handleMetadataSubmit: MetadataSubmitValueFunc = (value, attribute, metadata) => {\n let valueContent;\n switch (attribute.type) {\n case AttributeType.simple:\n case AttributeType.advanced:\n valueContent = (value as IRecordPropertyStandard).raw_payload;\n break;\n case AttributeType.advanced_link:\n case AttributeType.simple_link:\n valueContent = (value as IRecordPropertyLink).linkValue;\n break;\n case AttributeType.tree:\n valueContent = (value as IRecordPropertyTree).treeValue;\n break;\n }\n\n return _handleValueSubmit(\n [\n {\n idValue: value.id_value,\n attribute,\n value: valueContent,\n metadata,\n },\n ],\n null,\n );\n };\n\n /**\n * Submit the whole record: create record and batch save all stored values\n */\n const _handleRecordSubmit = async (attributes: RecordFormAttributeStandardAttributeFragment[]) => {\n const activateNewRecordResult = await activateNewRecordMutation({\n fetchPolicy: 'network-only',\n variables: {\n libraryId,\n recordId: record.id,\n formId,\n },\n });\n const errors = activateNewRecordResult?.data?.activateNewRecord.valuesErrors;\n if (errors == null || errors?.length === 0) {\n if (onCreate) {\n onCreate(activateNewRecordResult?.data?.activateNewRecord?.record?.whoAmI);\n }\n return;\n }\n antdForm.setFields(\n errors.map(error => {\n const attributeInError = attributes.find(attribute => attribute.id === error.attribute);\n\n const doesAttributeHaveMultipleFields =\n attributeInError?.multiple_values &&\n ![AttributeType.simple_link, AttributeType.advanced_link].includes(attributeInError.type);\n\n return {\n name:\n doesAttributeHaveMultipleFields && error.type === 'REQUIRED_ATTRIBUTE'\n ? [error.attribute, 0]\n : error.attribute,\n errors: [error.message],\n };\n }),\n );\n };\n\n const _handleDeleteAllValues: DeleteMultipleValuesFunc = async (attribute, values, version) => {\n const valuesToSave = values.map(value => ({\n idValue: value.id_value,\n attribute,\n value: null,\n }));\n\n return saveValues(record, valuesToSave, version, true);\n };\n\n const shouldUseLayoutWithSidebar = state.enableSidebar && state.isOpenSidebar && sidebarContainer === undefined;\n\n return (\n <ErrorBoundary>\n <EditRecordReducerContext.Provider value={{state, dispatch}}>\n <Container $shouldUseLayoutWithSidebar={shouldUseLayoutWithSidebar} style={containerStyle}>\n <EditRecordButtons />\n <Content\n className=\"edit-record-content-container\"\n $shouldUseLayoutWithSidebar={shouldUseLayoutWithSidebar}\n $removePadding={removePadding}\n >\n {permissionsLoading ? (\n <EditRecordSkeleton rows={5} />\n ) : canEdit ? (\n <EditRecordContent\n antdForm={antdForm}\n formId={formId}\n isFormCreationMode={isFormCreationMode}\n formElementId={formElementId}\n record={record}\n library={libraryId}\n onRecordSubmit={_handleRecordSubmit}\n onValueSubmit={_handleValueSubmit}\n onValueDelete={deleteValue}\n onDeleteMultipleValues={_handleDeleteAllValues}\n readonly={isReadOnly}\n />\n ) : (\n <ErrorDisplay type={ErrorDisplayTypes.PERMISSION_ERROR} showActionButton={false} />\n )}\n </Content>\n <EditRecordSidebar onMetadataSubmit={_handleMetadataSubmit} sidebarContainer={sidebarContainer} />\n </Container>\n </EditRecordReducerContext.Provider>\n </ErrorBoundary>\n );\n};\n"]}
|
|
1
|
+
{"version":3,"file":"EditRecord.js","sourceRoot":"","sources":["../../../../src/components/RecordEdition/EditRecord/EditRecord.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 isEqual from 'lodash/isEqual';\nimport {type FunctionComponent, useEffect, useReducer} from 'react';\nimport styled, {type CSSObject} from 'styled-components';\nimport {ErrorDisplayTypes} from '../../../constants';\nimport {useCanEditRecord} from '../../../hooks/useCanEditRecord';\nimport {type IValueVersion} from '../../../types/values';\nimport {\n AttributeType,\n type RecordFormAttributeStandardAttributeFragment,\n type RecordIdentityFragment,\n useActivateNewRecordMutation,\n} from '../../../_gqlTypes';\nimport {\n type IRecordPropertyLink,\n type IRecordPropertyStandard,\n type IRecordPropertyTree,\n} from '../../../_queries/records/getRecordPropertiesQuery';\nimport {ErrorBoundary} from '../../ErrorBoundary';\nimport {ErrorDisplay} from '../../ErrorDisplay';\nimport EditRecordContent from '../EditRecordContent';\nimport useExecuteDeleteValueMutation from '../EditRecordContent/hooks/useExecuteDeleteValueMutation';\nimport useSaveValueBatchMutation from '../EditRecordContent/hooks/useExecuteSaveValueBatchMutation';\nimport {\n type DeleteMultipleValuesFunc,\n type ISubmittedValueLink,\n type ISubmittedValueStandard,\n type ISubmittedValueTree,\n type IValueToSubmit,\n type MetadataSubmitValueFunc,\n type SubmitValueFunc,\n} from '../EditRecordContent/_types';\nimport editRecordReducer, {EditRecordReducerActionsTypes, initialState} from '../editRecordReducer/editRecordReducer';\nimport {EditRecordReducerContext} from '../editRecordReducer/editRecordReducerContext';\nimport {type FormInstance} from 'antd/lib/form/Form';\nimport EditRecordSidebar from '../EditRecordSidebar';\nimport EditRecordSkeleton from '../EditRecordSkeleton';\nimport {useQuery} from '@apollo/client';\nimport {getLibraryByIdQuery} from '_ui/_queries/libraries/getLibraryByIdQuery';\nimport EditRecordButtons from '../EditRecordButtons';\n\ninterface IEditRecordProps {\n antdForm: FormInstance;\n formId: string;\n isFormCreationMode: boolean;\n formElementId?: string;\n record: RecordIdentityFragment['whoAmI'] | null;\n library: string;\n onCreate?: (newRecord: RecordIdentityFragment['whoAmI']) => void;\n valuesVersion?: IValueVersion;\n showSidebar?: boolean; // TODO: Should be removed when sidebar is fully removed from EditRecord\n enableSidebar?: boolean; // TODO: Should be removed when sidebar is fully removed from EditRecord\n sidebarContainer?: HTMLElement; // TODO: Should be removed when sidebar is fully removed from EditRecord\n forceDisableSidebarInAppStudio?: boolean; // TODO: Should be removed when sidebar is fully removed from EditRecord\n containerStyle?: CSSObject;\n withInfoButton: boolean;\n removePadding?: boolean; // TODO: This prop should be remove when EditRecord will be moved to app-studio or data-studio deleted\n}\n\nconst sidebarWidth = '352px';\n\nconst Container = styled.div<{$shouldUseLayoutWithSidebar: boolean; style: CSSObject}>`\n display: grid;\n grid-template-columns: ${props => (props.$shouldUseLayoutWithSidebar ? `minmax(0, auto) ${sidebarWidth}` : '1fr')};\n grid-template-areas: ${props => (props.$shouldUseLayoutWithSidebar ? '\"content sidebar\"' : '\"content\"')};\n overflow: hidden;\n`;\n\nconst Content = styled.div<{$shouldUseLayoutWithSidebar: boolean; $removePadding: boolean}>`\n grid-area: content;\n padding: ${props => (props.$removePadding ? 'unset' : '24px')};\n overflow-x: hidden;\n overflow-y: scroll;\n border-right: ${props =>\n props.$shouldUseLayoutWithSidebar ? '1px solid var(--general-utilities-border)' : 'none'};\n`;\n\nexport const EditRecord: FunctionComponent<IEditRecordProps> = ({\n antdForm,\n formId,\n isFormCreationMode,\n formElementId,\n record,\n library: libraryId,\n onCreate,\n valuesVersion,\n enableSidebar = false,\n showSidebar = false,\n sidebarContainer,\n forceDisableSidebarInAppStudio = false,\n containerStyle,\n withInfoButton,\n removePadding = false,\n}) => {\n const [state, dispatch] = useReducer(editRecordReducer, {\n ...initialState,\n record,\n libraryId,\n libraryLabel: null,\n valuesVersion,\n originValuesVersion: valuesVersion,\n withInfoButton,\n });\n\n const {\n loading: permissionsLoading,\n canEdit,\n isReadOnly,\n } = useCanEditRecord({...record?.library, id: libraryId}, record?.id);\n\n const {data: libraryData} = useQuery(getLibraryByIdQuery, {\n variables: {id: [libraryId]},\n });\n\n const {saveValues} = useSaveValueBatchMutation();\n const {deleteValue} = useExecuteDeleteValueMutation(record);\n const [activateNewRecordMutation] = useActivateNewRecordMutation();\n\n // Update record in reducer when it changes. Might happen on record identity change (after value save)\n useEffect(() => {\n if (libraryData) {\n dispatch({\n type: EditRecordReducerActionsTypes.SET_LIBRARY_LABEL,\n label: libraryData.libraries.list[0].label,\n });\n }\n }, [libraryData]);\n\n useEffect(() => {\n if (record && !isEqual(record, state.record)) {\n dispatch({\n type: EditRecordReducerActionsTypes.SET_RECORD,\n record,\n });\n }\n }, [record]);\n\n useEffect(() => {\n dispatch({\n type: EditRecordReducerActionsTypes.SET_ENABLE_SIDEBAR,\n enabled: enableSidebar,\n });\n }, [enableSidebar]);\n\n useEffect(() => {\n dispatch({\n type: EditRecordReducerActionsTypes.SET_SIDEBAR_IS_OPEN,\n isOpen: showSidebar,\n });\n }, [showSidebar]);\n\n const _handleValueSubmit: SubmitValueFunc = async (values, version) =>\n saveValues(\n record,\n values.map(val => {\n const savableValue = {...val, attribute: val.attribute.id, metadata: val.metadata};\n\n if (val.value) {\n switch (val.attribute.type) {\n case AttributeType.advanced_link:\n case AttributeType.simple_link:\n savableValue.value = (val as ISubmittedValueLink).value.id;\n break;\n case AttributeType.tree:\n savableValue.value = (val as ISubmittedValueTree).value.id;\n break;\n default:\n savableValue.value = (val as ISubmittedValueStandard).value;\n break;\n }\n }\n\n return savableValue as IValueToSubmit;\n }),\n version,\n true, // deleteEmpty\n );\n\n const _handleMetadataSubmit: MetadataSubmitValueFunc = (value, attribute, metadata) => {\n let valueContent;\n switch (attribute.type) {\n case AttributeType.simple:\n case AttributeType.advanced:\n valueContent = (value as IRecordPropertyStandard).raw_payload;\n break;\n case AttributeType.advanced_link:\n case AttributeType.simple_link:\n valueContent = (value as IRecordPropertyLink).linkValue;\n break;\n case AttributeType.tree:\n valueContent = (value as IRecordPropertyTree).treeValue;\n break;\n }\n\n return _handleValueSubmit(\n [\n {\n idValue: value.id_value,\n attribute,\n value: valueContent,\n metadata,\n },\n ],\n null,\n );\n };\n\n /**\n * Submit the whole record: create record and batch save all stored values\n */\n const _handleRecordSubmit = async (attributes: RecordFormAttributeStandardAttributeFragment[]) => {\n const activateNewRecordResult = await activateNewRecordMutation({\n fetchPolicy: 'network-only',\n variables: {\n libraryId,\n recordId: record.id,\n formId,\n },\n });\n const errors = activateNewRecordResult?.data?.activateNewRecord.valuesErrors;\n if (errors == null || errors?.length === 0) {\n if (onCreate) {\n onCreate(activateNewRecordResult?.data?.activateNewRecord?.record?.whoAmI);\n }\n return;\n }\n antdForm.setFields(\n errors.map(error => {\n const attributeInError = attributes.find(attribute => attribute.id === error.attribute);\n\n const doesAttributeHaveMultipleFields =\n attributeInError?.multiple_values &&\n ![AttributeType.simple_link, AttributeType.advanced_link].includes(attributeInError.type);\n\n return {\n name:\n doesAttributeHaveMultipleFields && error.type === 'REQUIRED_ATTRIBUTE'\n ? [error.attribute, 0]\n : error.attribute,\n errors: [error.message],\n };\n }),\n );\n };\n\n const _handleDeleteAllValues: DeleteMultipleValuesFunc = async (attribute, values, version) => {\n const valuesToSave = values.map(value => ({\n idValue: value.id_value,\n attribute,\n value: null,\n }));\n\n return saveValues(record, valuesToSave, version, true);\n };\n\n const shouldUseLayoutWithSidebar =\n state.enableSidebar && state.isOpenSidebar && sidebarContainer === undefined && !forceDisableSidebarInAppStudio;\n\n return (\n <ErrorBoundary>\n <EditRecordReducerContext.Provider value={{state, dispatch}}>\n <Container $shouldUseLayoutWithSidebar={shouldUseLayoutWithSidebar} style={containerStyle}>\n <EditRecordButtons />\n <Content\n className=\"edit-record-content-container\"\n $shouldUseLayoutWithSidebar={shouldUseLayoutWithSidebar}\n $removePadding={removePadding}\n >\n {permissionsLoading ? (\n <EditRecordSkeleton rows={5} />\n ) : canEdit ? (\n <EditRecordContent\n antdForm={antdForm}\n formId={formId}\n isFormCreationMode={isFormCreationMode}\n formElementId={formElementId}\n record={record}\n library={libraryId}\n onRecordSubmit={_handleRecordSubmit}\n onValueSubmit={_handleValueSubmit}\n onValueDelete={deleteValue}\n onDeleteMultipleValues={_handleDeleteAllValues}\n readonly={isReadOnly}\n />\n ) : (\n <ErrorDisplay type={ErrorDisplayTypes.PERMISSION_ERROR} showActionButton={false} />\n )}\n </Content>\n {!forceDisableSidebarInAppStudio && (\n <EditRecordSidebar\n onMetadataSubmit={_handleMetadataSubmit}\n sidebarContainer={sidebarContainer}\n />\n )}\n </Container>\n </EditRecordReducerContext.Provider>\n </ErrorBoundary>\n );\n};\n"]}
|
|
@@ -56,6 +56,10 @@ export type SubmittedValue = ISubmittedValueStandard | ISubmittedValueLink | ISu
|
|
|
56
56
|
export type SubmitValueFunc = (values: SubmittedValue[], version: IValueVersion) => Promise<ISubmitMultipleResult>;
|
|
57
57
|
export type DeleteValueFunc = (value: ValueInput | null, attribute: string) => Promise<IDeleteValueResult>;
|
|
58
58
|
export type CreateEmptyRecordFunc = (library: string) => Promise<ICreateRecordResult>;
|
|
59
|
+
export type CreateRecordFunc = (library: string, skipActivate?: boolean, data?: {
|
|
60
|
+
values: Array<Omit<IValueToSubmit, 'idValue'>>;
|
|
61
|
+
version: IValueVersion;
|
|
62
|
+
}) => Promise<ICreateRecordResult>;
|
|
59
63
|
export type DeleteMultipleValuesFunc = (attribute: string, values: RecordProperty[], version: IValueVersion) => Promise<ISubmitMultipleResult>;
|
|
60
64
|
export type MetadataSubmitValueFunc = (value: RecordProperty, attribute: RecordFormAttributeFragment, metadata: IKeyValue<AnyPrimitive>) => Promise<ISubmitMultipleResult>;
|
|
61
65
|
export interface ISubmittedValueBase {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"_types.js","sourceRoot":"","sources":["../../../../src/components/RecordEdition/EditRecordContent/_types.ts"],"names":[],"mappings":"AAoCA,MAAM,CAAN,IAAY,aAIX;AAJD,WAAY,aAAa;IACrB,oCAAmB,CAAA;IACnB,gCAAe,CAAA;IACf,oCAAmB,CAAA;AACvB,CAAC,EAJW,aAAa,KAAb,aAAa,QAIxB;
|
|
1
|
+
{"version":3,"file":"_types.js","sourceRoot":"","sources":["../../../../src/components/RecordEdition/EditRecordContent/_types.ts"],"names":[],"mappings":"AAoCA,MAAM,CAAN,IAAY,aAIX;AAJD,WAAY,aAAa;IACrB,oCAAmB,CAAA;IACnB,gCAAe,CAAA;IACf,oCAAmB,CAAA;AACvB,CAAC,EAJW,aAAa,KAAb,aAAa,QAIxB;AA4GD,MAAM,CAAN,IAAY,iBAGX;AAHD,WAAY,iBAAiB;IACzB,4CAAuB,CAAA;IACvB,wCAAmB,CAAA;AACvB,CAAC,EAHW,iBAAiB,KAAjB,iBAAiB,QAG5B","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 {\n type AnyPrimitive,\n type FormFieldTypes,\n type FormUIElementTypes,\n type IRequiredFieldsSettings,\n type IKeyValue,\n type Override,\n} from '@leav/utils';\nimport {type RecordFormElementsValue} from '_ui/hooks/useGetRecordForm';\nimport {type IRecordIdentity, type IRecordIdentityWhoAmI} from '_ui/types/records';\nimport {type ITreeNodeWithRecord} from '_ui/types/trees';\nimport {type IValueVersion} from '_ui/types/values';\nimport {\n type RecordFormAttributeFragment,\n type SaveValueBatchMutation,\n type CreateRecordMutation,\n type RecordFormElementFragment,\n type RecordIdentityFragment,\n type ValueDetailsFragment,\n type ValueInput,\n} from '_ui/_gqlTypes';\nimport {type RecordProperty} from '_ui/_queries/records/getRecordPropertiesQuery';\nimport {type FormInstance} from 'antd/lib/form/Form';\nimport {type GetRecordColumnsValuesRecord} from '_ui/_queries/records/getRecordColumnsValues';\n\nexport interface IValueToSubmit {\n attribute: string;\n value: AnyPrimitive | null;\n idValue: string | null;\n metadata?: IKeyValue<AnyPrimitive>;\n}\n\nexport enum APICallStatus {\n SUCCESS = 'SUCCESS',\n ERROR = 'ERROR',\n PARTIAL = 'PARTIAL',\n}\n\nexport type FieldSubmitMultipleFunc = (\n record: IRecordIdentityWhoAmI,\n values: IValueToSubmit[],\n version?: IValueVersion,\n deleteEmpty?: boolean,\n) => Promise<ISubmitMultipleResult>;\n\nexport interface ISubmitMultipleResult {\n status: APICallStatus;\n error?: string;\n values?: ValueDetailsFragment[];\n errors?: SaveValueBatchMutation['saveValueBatch']['errors'];\n}\n\nexport interface IDeleteValueResult {\n status: APICallStatus;\n error?: string;\n}\n\nexport interface ICreateRecordResult {\n status: APICallStatus;\n record?: RecordIdentityFragment['whoAmI'];\n errors?: CreateRecordMutation['createRecord']['valuesErrors'];\n}\n\nexport interface IRecordEditionContext {\n elements: IFormElementsByContainer;\n readOnly: boolean;\n record: IRecordIdentityWhoAmI;\n}\n\nexport interface IFormElementsByContainer {\n [containerId: string]: Array<FormElement<unknown>>;\n}\n\nexport interface ISubmittedValueStandard extends ISubmittedValueBase {\n value: AnyPrimitive;\n}\n\nexport interface ISubmittedValueLink extends ISubmittedValueBase {\n value: IRecordIdentity;\n}\n\nexport interface ISubmittedValueTree extends ISubmittedValueBase {\n value: ITreeNodeWithRecord;\n}\n\nexport type SubmittedValue = ISubmittedValueStandard | ISubmittedValueLink | ISubmittedValueTree;\n\nexport type SubmitValueFunc = (values: SubmittedValue[], version: IValueVersion) => Promise<ISubmitMultipleResult>;\nexport type DeleteValueFunc = (value: ValueInput | null, attribute: string) => Promise<IDeleteValueResult>;\nexport type CreateEmptyRecordFunc = (library: string) => Promise<ICreateRecordResult>;\nexport type CreateRecordFunc = (\n library: string,\n skipActivate?: boolean,\n data?: {\n values: Array<Omit<IValueToSubmit, 'idValue'>>;\n version: IValueVersion;\n },\n) => Promise<ICreateRecordResult>;\nexport type DeleteMultipleValuesFunc = (\n attribute: string,\n values: RecordProperty[],\n version: IValueVersion,\n) => Promise<ISubmitMultipleResult>;\n\nexport type MetadataSubmitValueFunc = (\n value: RecordProperty,\n attribute: RecordFormAttributeFragment,\n metadata: IKeyValue<AnyPrimitive>,\n) => Promise<ISubmitMultipleResult>;\n\nexport interface ISubmittedValueBase {\n attribute: RecordFormAttributeFragment;\n idValue: string;\n metadata?: IKeyValue<AnyPrimitive>;\n}\n\nexport interface IFormElementProps<SettingsType, RecordFormElements = RecordFormElementsValue> {\n element: FormElement<SettingsType, RecordFormElements>;\n readonly?: boolean;\n onValueSubmit?: SubmitValueFunc;\n onValueDelete?: DeleteValueFunc;\n onDeleteMultipleValues?: DeleteMultipleValuesFunc;\n metadataEdit?: boolean;\n isFormCreationMode?: boolean;\n}\n\nexport type FormElement<SettingsType, RecordFormElements = RecordFormElementsValue> = Override<\n RecordFormElementFragment,\n {\n settings: SettingsType;\n uiElementType: FormUIElementTypes | FormFieldTypes;\n values: RecordFormElements[];\n }\n> & {\n uiElement: FunctionComponent<\n IFormElementProps<unknown> & {\n antdForm?: FormInstance;\n computedValues?: GetRecordColumnsValuesRecord;\n }\n >;\n};\n\nexport type StandardValueTypes = AnyPrimitive;\n\nexport enum VersionFieldScope {\n INHERITED = 'INHERITED', // inherited values\n CURRENT = 'CURRENT', // values of \"current\" version, eg. the version selected in the form\n}\n\nexport interface ICommonFieldsReducerState<ValuesType, RecordFormAttributeFragmentType = RecordFormAttributeFragment> {\n record: IRecordIdentityWhoAmI;\n formElement: FormElement<IRequiredFieldsSettings>;\n attribute: RecordFormAttributeFragmentType;\n isReadOnly: boolean;\n activeScope: VersionFieldScope;\n values: {\n [scope in VersionFieldScope]: {\n version: IValueVersion;\n values: ValuesType;\n } | null;\n };\n}\n\nexport interface IProvidedByAntFormItem<\n InputFieldProps extends {value?: unknown; onChange?: unknown},\n AntNotifier extends {onChange?: unknown} = InputFieldProps,\n> {\n value?: InputFieldProps['value'];\n onChange?: AntNotifier['onChange'];\n}\n"]}
|