@topconsultnpm/sdkui-react-beta 6.12.37 → 6.12.39

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (61) hide show
  1. package/lib/components/base/Styled.d.ts +12 -0
  2. package/lib/components/base/Styled.js +49 -3
  3. package/lib/components/base/TMFloatingToolbar.d.ts +9 -0
  4. package/lib/components/base/TMFloatingToolbar.js +99 -0
  5. package/lib/components/base/TMRightSidebar.d.ts +0 -4
  6. package/lib/components/base/TMRightSidebar.js +2 -10
  7. package/lib/components/base/TMShowAllOrMaxItemsButton.d.ts +8 -0
  8. package/lib/components/base/TMShowAllOrMaxItemsButton.js +14 -0
  9. package/lib/components/base/TMTreeView.d.ts +27 -0
  10. package/lib/components/base/TMTreeView.js +199 -0
  11. package/lib/components/grids/TMBlogs.d.ts +84 -0
  12. package/lib/components/grids/TMBlogs.js +566 -0
  13. package/lib/components/grids/TMBlogsUtils.d.ts +83 -0
  14. package/lib/components/grids/TMBlogsUtils.js +258 -0
  15. package/lib/components/index.d.ts +2 -0
  16. package/lib/components/index.js +2 -0
  17. package/lib/components/query/TMBatchUpdateForm.d.ts +12 -0
  18. package/lib/components/query/TMBatchUpdateForm.js +149 -0
  19. package/lib/components/query/TMDcmtBlog.d.ts +7 -0
  20. package/lib/components/query/TMDcmtBlog.js +34 -0
  21. package/lib/components/query/TMDcmtForm.d.ts +32 -0
  22. package/lib/components/query/TMDcmtForm.js +544 -0
  23. package/lib/components/query/TMDcmtIcon.d.ts +10 -0
  24. package/lib/components/query/TMDcmtIcon.js +52 -0
  25. package/lib/components/query/TMDcmtPreview.d.ts +26 -0
  26. package/lib/components/query/TMDcmtPreview.js +200 -0
  27. package/lib/components/query/TMFileUploader.d.ts +11 -0
  28. package/lib/components/query/TMFileUploader.js +101 -0
  29. package/lib/components/query/TMMasterDetailDcmts.d.ts +23 -0
  30. package/lib/components/query/TMMasterDetailDcmts.js +475 -0
  31. package/lib/components/query/TMQueryEditor.js +2 -2
  32. package/lib/components/query/TMQueryResultForm.d.ts +1 -7
  33. package/lib/components/query/TMQueryResultForm.js +1 -9
  34. package/lib/components/query/TMWorkflowPopup.d.ts +29 -0
  35. package/lib/components/query/TMWorkflowPopup.js +131 -0
  36. package/lib/components/search/TMSearchResult.d.ts +31 -0
  37. package/lib/components/search/TMSearchResult.js +727 -0
  38. package/lib/components/search/TMSearchResultsMenuItems.d.ts +6 -0
  39. package/lib/components/search/TMSearchResultsMenuItems.js +376 -0
  40. package/lib/helper/Enum_Localizator.d.ts +2 -1
  41. package/lib/helper/Enum_Localizator.js +20 -1
  42. package/lib/helper/SDKUI_Localizator.d.ts +24 -0
  43. package/lib/helper/SDKUI_Localizator.js +240 -0
  44. package/lib/helper/dcmtsHelper.d.ts +4 -0
  45. package/lib/helper/dcmtsHelper.js +15 -0
  46. package/lib/helper/helpers.d.ts +2 -1
  47. package/lib/helper/helpers.js +74 -1
  48. package/lib/helper/queryHelper.d.ts +7 -1
  49. package/lib/helper/queryHelper.js +105 -1
  50. package/lib/hooks/useDcmtOperations.d.ts +24 -0
  51. package/lib/hooks/useDcmtOperations.js +387 -0
  52. package/lib/hooks/useInputDialog.d.ts +5 -0
  53. package/lib/hooks/useInputDialog.js +73 -0
  54. package/lib/hooks/usePreventFileDrop.d.ts +3 -0
  55. package/lib/hooks/usePreventFileDrop.js +37 -0
  56. package/lib/index.d.ts +0 -1
  57. package/lib/index.js +0 -1
  58. package/lib/services/platform_services.d.ts +1 -1
  59. package/lib/ts/types.d.ts +54 -1
  60. package/lib/ts/types.js +34 -0
  61. package/package.json +1 -1
@@ -0,0 +1,544 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { useEffect, useMemo, useState } from 'react';
3
+ import styled from 'styled-components';
4
+ import TMDcmtPreview from './TMDcmtPreview';
5
+ import { ArchiveConstraints, ArchiveEngineByID, DcmtTypeListCacheService, LayoutModes, LocalStorageService, MetadataDataTypes, ResultTypes, SDK_Globals, SystemMIDsAsNumber, TemplateTIDs, UpdateEngineByID, ValidationItem } from '@topconsultnpm/sdk-ts-beta';
6
+ import { ContextMenu } from 'devextreme-react';
7
+ import { WorkFlowApproveRejectPopUp, WorkFlowOperationButtons, WorkFlowReAssignPopUp } from './TMWorkflowPopup';
8
+ import { FormModes } from '../../ts';
9
+ import { DeviceType, useDeviceType } from '../base/TMDeviceProvider';
10
+ import { useDcmtOperations } from '../../hooks/useDcmtOperations';
11
+ import { handleArchiveVisibility, searchResultToMetadataValues } from '../../helper/queryHelper';
12
+ import { genUniqueId, IconCloseCircle, IconShow, SDKUI_Localizator, IconBoard, IconDcmtTypeSys, IconDataList, IconDetailDcmts, svgToString, IconDownload, IconHide, calcIsModified, IconMenuVertical, Globalization, getListMaxItems, getSystemMetadata, IconBoxArchiveIn, IconClear, IconUndo } from '../../helper';
13
+ import { hasDetailRelations, hasMasterRelations } from '../../helper/dcmtsHelper';
14
+ import { TMColors } from '../../utils/theme';
15
+ import { StyledFormButtonsContainer, StyledModalContainer, StyledToolbarCardContainer } from '../base/Styled';
16
+ import ShowAlert from '../base/TMAlert';
17
+ import TMButton from '../base/TMButton';
18
+ import { TMSplitterLayout, TMLayoutItem } from '../base/TMLayout';
19
+ import { TMExceptionBoxManager, TMMessageBoxManager, ButtonNames } from '../base/TMPopUp';
20
+ import TMSpinner from '../base/TMSpinner';
21
+ import TMToolbarCard from '../base/TMToolbarCard';
22
+ import { TMLayoutWaitingContainer } from '../base/TMWaitPanel';
23
+ import TMDistinctValues from '../choosers/TMDistinctValues';
24
+ import TMFormulaEditor, { FormulaDescriptor, FormulaHelper, FormulaTargets } from '../editors/TMFormulaEditor';
25
+ import TMMetadataValues, { AdvancedMenuButtons } from '../editors/TMMetadataValues';
26
+ import { TMSaveFormButtonPrevious, TMSaveFormButtonNext, TMSaveFormButtonSave, TMSaveFormButtonUndo } from '../forms/TMSaveForm';
27
+ import TMShowAllOrMaxItemsButton from '../base/TMShowAllOrMaxItemsButton';
28
+ import TMFileUploader from './TMFileUploader';
29
+ import TMMasterDetailDcmts from './TMMasterDetailDcmts';
30
+ import TMDcmtBlog from './TMDcmtBlog';
31
+ let abortControllerLocal = new AbortController();
32
+ //#endregion
33
+ const TMDcmtForm = ({ showHeader = true, onSaveRecents, layoutMode = LayoutModes.Update, onClose, onSavedAsyncCallback, TID, DID, formMode = FormModes.Update, canNext, canPrev, count, itemIndex, onNext, onPrev, customRightSidebarItems = [], allowNavigation = true, allowRelations = true, isClosable = false, showDcmtForm = true, showDcmtFormSidebar = true, showPreview = false, showBoard = false, showSysMetadata = false, onClosePreview }) => {
34
+ const mruTIDs = LocalStorageService.getItem(`ARCHIVEPAGE_MRU_TIDS_${SDK_Globals.tmSession?.SessionDescr?.archiveID}_${SDK_Globals.tmSession?.SessionDescr?.userID}`);
35
+ const [id, setID] = useState('');
36
+ const [showWaitPanelLocal, setShowWaitPanelLocal] = useState(false);
37
+ const [waitPanelTitleLocal, setWaitPanelTitleLocal] = useState('');
38
+ const [showPrimaryLocal, setShowPrimaryLocal] = useState(false);
39
+ const [waitPanelTextPrimaryLocal, setWaitPanelTextPrimaryLocal] = useState('');
40
+ const [waitPanelValuePrimaryLocal, setWaitPanelValuePrimaryLocal] = useState(0);
41
+ const [waitPanelMaxValuePrimaryLocal, setWaitPanelMaxValuePrimaryLocal] = useState(0);
42
+ const [showSecondaryLocal, setShowSecondaryLocal] = useState(false);
43
+ const [waitPanelTextSecondaryLocal, setWaitPanelTextSecondaryLocal] = useState('');
44
+ const [waitPanelValueSecondaryLocal, setWaitPanelValueSecondaryLocal] = useState(0);
45
+ const [waitPanelMaxValueSecondaryLocal, setWaitPanelMaxValueSecondaryLocal] = useState(0);
46
+ const [useWaitPanelLocalState, setUseWaitPanelLocalState] = useState(false);
47
+ const [formData, setFormData] = useState([]);
48
+ const [formDataOrig, setFormDataOrig] = useState([]);
49
+ const [validationItems, setValidationItems] = useState([]);
50
+ const [changedMetadata, setChangedMetadata] = useState([]);
51
+ const [fromDTD, setFromDTD] = useState();
52
+ const [showAdvancedMenu, setShowAdvancedMenu] = useState(false);
53
+ const [showApprovePopup, setShowApprovePopup] = useState(false);
54
+ const [showRejectPopup, setShowRejectPopup] = useState(false);
55
+ const [showReAssignPopup, setShowReAssignPopup] = useState(false);
56
+ const [isOpenDetails, setIsOpenDetails] = useState(false);
57
+ const [isOpenMaster, setIsOpenMaster] = useState(false);
58
+ const [secondaryMasterDcmts, setSecondaryMasterDcmts] = useState([]);
59
+ const [isOpenDcmtForm, setIsOpenDcmtForm] = useState(false);
60
+ const [isOpenPreview, setIsOpenPreview] = useState(false);
61
+ const [isOpenSysMetadata, setIsOpenSysMetadata] = useState(false);
62
+ const [isOpenBoard, setIsOpenBoard] = useState(false);
63
+ const [isOpenDistinctValues, setIsOpenDistinctValues] = useState(false);
64
+ const [isOpenFormulaEditor, setIsOpenFormulaEditor] = useState(false);
65
+ const [isOpenTags, setIsOpenTags] = useState(false);
66
+ const [currentTIDHasDetailRelations, setCurrentTIDHasDetailRelations] = useState();
67
+ const [currentTIDHasMasterRelations, setCurrentTIDHasMasterRelations] = useState();
68
+ const [currentDcmt, setCurrentDcmt] = useState();
69
+ const [dcmtFile, setDcmtFile] = useState(null);
70
+ const [focusedMetadataValue, setFocusedMetadataValue] = useState();
71
+ const [showAll, setShowAll] = useState(false);
72
+ const { abortController, showWaitPanel, waitPanelTitle, showPrimary, waitPanelTextPrimary, waitPanelValuePrimary, waitPanelMaxValuePrimary, showSecondary, waitPanelTextSecondary, waitPanelValueSecondary, waitPanelMaxValueSecondary, downloadDcmtsAsync } = useDcmtOperations();
73
+ const deviceType = useDeviceType();
74
+ const isOpenMiddlePanel = () => isOpenSysMetadata || isOpenBoard || isOpenTags || isOpenDistinctValues || isOpenFormulaEditor;
75
+ const retrieveMetadataAsync = async () => {
76
+ try {
77
+ await DcmtTypeListCacheService.GetAsync(TID).then(async (dtd) => {
78
+ setFromDTD(dtd);
79
+ let mdList = dtd?.metadata ?? [];
80
+ if (layoutMode === LayoutModes.Update || (layoutMode === LayoutModes.Ark && DID)) {
81
+ await setMetadataListAsync(mdList);
82
+ }
83
+ else {
84
+ const renderedMetadata = dtd?.metadata?.filter((metadata) => handleArchiveVisibility(metadata)) ?? [];
85
+ const metadataList = searchResultToMetadataValues(dtd?.id, undefined, [], [], renderedMetadata, layoutMode);
86
+ setFormDataOrig(structuredClone(metadataList));
87
+ setFormData(structuredClone(metadataList));
88
+ }
89
+ layoutMode === LayoutModes.Ark && resetHandler();
90
+ });
91
+ }
92
+ catch (e) {
93
+ let err = e;
94
+ TMExceptionBoxManager.show({ exception: err });
95
+ }
96
+ };
97
+ useEffect(() => { setID(genUniqueId()); }, []);
98
+ useEffect(() => {
99
+ retrieveMetadataAsync();
100
+ }, [TID, DID]);
101
+ useEffect(() => {
102
+ if (formData.length > 0) {
103
+ setValidationItems(validateMetadataList(formData));
104
+ let changes = getSpecificChangedKeysWithValues(formDataOrig, formData);
105
+ setChangedMetadata(changes);
106
+ const newDcmt = {
107
+ tid: formData.find(o => o.mid == SystemMIDsAsNumber.TID)?.value,
108
+ did: formData.find(o => o.mid == SystemMIDsAsNumber.DID)?.value,
109
+ fileCount: formData.find(o => o.mid == SystemMIDsAsNumber.FileCount)?.value,
110
+ fileSize: formData.find(o => o.mid == SystemMIDsAsNumber.FileSize)?.value,
111
+ fileExt: formData.find(o => o.mid == SystemMIDsAsNumber.FileExt)?.value
112
+ };
113
+ if (!currentDcmt ||
114
+ currentDcmt.tid !== newDcmt.tid ||
115
+ currentDcmt.did !== newDcmt.did ||
116
+ currentDcmt.fileExt !== newDcmt.fileExt ||
117
+ currentDcmt.fileSize !== newDcmt.fileSize ||
118
+ currentDcmt.fileCount !== newDcmt.fileCount) {
119
+ setCurrentDcmt(newDcmt);
120
+ }
121
+ }
122
+ }, [formData]);
123
+ useEffect(() => { setIsOpenBoard(showBoard); }, [showBoard]);
124
+ useEffect(() => { setIsOpenSysMetadata(showSysMetadata); }, [showSysMetadata]);
125
+ useEffect(() => { setIsOpenDcmtForm(showDcmtForm); }, [showDcmtForm]);
126
+ useEffect(() => { setIsOpenPreview(showPreview); }, [showPreview]);
127
+ useEffect(() => {
128
+ hasDetailRelations(TID).then((value) => setCurrentTIDHasDetailRelations(value));
129
+ hasMasterRelations(TID).then((value) => setCurrentTIDHasMasterRelations(value));
130
+ }, [TID]);
131
+ useEffect(() => {
132
+ if (layoutMode !== LayoutModes.Ark)
133
+ return;
134
+ setFocusedMetadataValue(undefined);
135
+ }, [fromDTD, layoutMode]);
136
+ const fileIsNotValid = (fromDTD?.archiveConstraint === ArchiveConstraints.ContentCompulsory && !dcmtFile);
137
+ const sideBarItems = useMemo(() => {
138
+ let fixedItems = [
139
+ { icon: (layoutMode === LayoutModes.Ark && fileIsNotValid) ? _jsx(IconCloseCircle, { color: TMColors.error }) : _jsx(IconShow, {}), id: 'Preview', visibleName: (layoutMode === LayoutModes.Ark && fileIsNotValid) ? SDKUI_Localizator.RequiredField : 'Anteprima', isActive: isOpenPreview, onClick: () => { setIsOpenPreview(!isOpenPreview); }, disabled: layoutMode === LayoutModes.Ark && fromDTD?.archiveConstraint === ArchiveConstraints.OnlyMetadata },
140
+ { icon: _jsx(IconBoard, {}), id: 'Board', visibleName: 'Bacheca', disabled: layoutMode !== LayoutModes.Update, beginGroup: true, isActive: isOpenBoard, visible: layoutMode !== LayoutModes.Ark, onClick: () => { closeMiddlePanel(); setIsOpenBoard(!isOpenBoard); } },
141
+ { icon: _jsx(IconDcmtTypeSys, {}), id: 'SystemMetadata', visibleName: 'Metadati di sistema', disabled: layoutMode !== LayoutModes.Update, isActive: isOpenSysMetadata, visible: layoutMode !== LayoutModes.Ark, onClick: () => { closeMiddlePanel(); setIsOpenSysMetadata(!isOpenSysMetadata); } },
142
+ { icon: _jsx(IconDataList, {}), id: 'DistinctValues', disabled: !focusedMetadataValue, visibleName: 'Valori distiniti', isActive: isOpenDistinctValues, onClick: () => { closeMiddlePanel(); setIsOpenDistinctValues(!isOpenDistinctValues); } },
143
+ { icon: _jsx(IconDetailDcmts, { fontSize: 20, transform: 'scale(-1, 1)' }), id: 'Master', beginGroup: true, visible: layoutMode !== LayoutModes.Ark && allowRelations && currentTIDHasMasterRelations, visibleName: SDKUI_Localizator.DcmtsMaster, disabled: layoutMode !== LayoutModes.Update || !DID, isActive: isOpenMaster, onClick: () => { setIsOpenMaster(!isOpenMaster); } },
144
+ { icon: _jsx(IconDetailDcmts, { fontSize: 20 }), id: 'Details', visibleName: SDKUI_Localizator.DcmtsDetail, disabled: layoutMode !== LayoutModes.Update || !DID, isActive: isOpenDetails, visible: layoutMode !== LayoutModes.Ark && allowRelations && currentTIDHasDetailRelations, onClick: () => { setIsOpenDetails(!isOpenDetails); } },
145
+ ];
146
+ return customRightSidebarItems.length === 0
147
+ ? fixedItems
148
+ : [...fixedItems.filter(item => item.id !== 'DistinctValues'), ...customRightSidebarItems, ...fixedItems.filter(item => item.id === 'DistinctValues')];
149
+ }, [customRightSidebarItems, layoutMode, isOpenDistinctValues, isOpenPreview, focusedMetadataValue]);
150
+ const closeMiddlePanel = () => {
151
+ setIsOpenBoard(false);
152
+ setIsOpenSysMetadata(false);
153
+ setIsOpenTags(false);
154
+ setIsOpenDistinctValues(false);
155
+ setIsOpenFormulaEditor(false);
156
+ };
157
+ const titleText = () => {
158
+ if (isOpenTags)
159
+ return 'Tags';
160
+ if (isOpenSysMetadata)
161
+ return 'Metadati di sistema';
162
+ if (isOpenBoard)
163
+ return 'Bacheca';
164
+ if (isOpenDistinctValues)
165
+ return `${SDKUI_Localizator.DistinctValues} (${focusedMetadataValue?.md?.nameLoc})`;
166
+ if (isOpenFormulaEditor)
167
+ return `${SDKUI_Localizator.FormulaEditorTitle} (${focusedMetadataValue?.md?.nameLoc})`;
168
+ return '';
169
+ };
170
+ const middlePanelToolbar = _jsxs("div", { style: { width: 'max-content', display: 'flex', alignItems: 'center', gap: '10px' }, children: [layoutMode === LayoutModes.Update && _jsx(TMSaveFormButtonPrevious, { btnStyle: 'icon', isModified: false, formMode: FormModes.ReadOnly, canPrev: canPrev, onPrev: () => onPrev?.() }), layoutMode === LayoutModes.Update && _jsx(TMSaveFormButtonNext, { btnStyle: 'icon', isModified: false, formMode: FormModes.ReadOnly, canNext: canNext, onNext: () => onNext?.() })] });
171
+ const getPrimarySplitterStartLayout = () => {
172
+ let size = isOpenDcmtForm ? ['100%', '0'] : ['0%', '100%'];
173
+ if (deviceType !== DeviceType.MOBILE) {
174
+ if (isOpenPreview || isOpenMiddlePanel()) {
175
+ if (layoutMode === LayoutModes.Ark) {
176
+ size = ['50%', '50%'];
177
+ }
178
+ else if (isOpenDcmtForm) {
179
+ size = ['50%', '50%'];
180
+ }
181
+ else
182
+ size = ['0%', '100%'];
183
+ }
184
+ }
185
+ else {
186
+ size = (isOpenPreview || isOpenMiddlePanel()) ? ['0', '100%'] : ['100%', '0'];
187
+ }
188
+ return size;
189
+ };
190
+ const getSecondarySplitterStartLayout = () => {
191
+ if (isOpenPreview && !isOpenMiddlePanel()) {
192
+ return ['0', '100%'];
193
+ }
194
+ if (!isOpenPreview && isOpenMiddlePanel()) {
195
+ return ['100%', '0'];
196
+ }
197
+ return ['40%', '60%'];
198
+ };
199
+ const getSelectionDcmtInfo = () => {
200
+ let dcmts = [];
201
+ dcmts.push({ TID: TID ?? 0, DID: DID ?? 0 });
202
+ return dcmts;
203
+ };
204
+ const handleAddItem = (tid, did) => {
205
+ let newItem = { TID: tid ?? 0, DID: did ?? 0 };
206
+ setSecondaryMasterDcmts((prevItems) => [...prevItems, newItem]);
207
+ };
208
+ const handleRemoveItem = (tid, did) => {
209
+ setSecondaryMasterDcmts((prevItems) => prevItems.filter(item => item.TID !== tid && item.DID !== did));
210
+ };
211
+ const getDcmts = () => { return [{ TID: TID, DID: DID }]; };
212
+ const commandsMenuItems = [
213
+ { icon: svgToString(_jsx(IconDownload, {})), operationType: 'singleRow', text: "Download file", onClick: async () => await downloadDcmtsAsync(getDcmts()) },
214
+ { icon: svgToString(showAdvancedMenu ? _jsx(IconHide, {}) : _jsx(IconShow, {})), operationType: 'singleRow', text: showAdvancedMenu ? SDKUI_Localizator.StandardMode : SDKUI_Localizator.ExpertMode, onClick: () => setShowAdvancedMenu(!showAdvancedMenu) },
215
+ ];
216
+ const formToolbar = _jsxs("div", { style: { display: 'flex', alignItems: 'center', gap: '10px' }, children: [canPrev != undefined && _jsx("p", { style: { backgroundColor: `white`, color: TMColors.primaryColor, textAlign: 'center', padding: '1px 4px', borderRadius: '3px', display: 'flex' }, children: `${itemIndex}/${count}` }), canPrev != undefined && _jsx(TMSaveFormButtonPrevious, { btnStyle: 'icon', iconColor: 'white', isModified: calcIsModified(formData, formDataOrig), formMode: formMode, canPrev: canPrev, onPrev: onPrev }), canNext != undefined && _jsx(TMSaveFormButtonNext, { btnStyle: 'icon', iconColor: 'white', isModified: calcIsModified(formData, formDataOrig), formMode: formMode, canNext: canNext, onNext: onNext }), layoutMode === LayoutModes.Update && _jsx(IconMenuVertical, { id: `commands-detail-${id}`, color: 'white', cursor: 'pointer' }), layoutMode === LayoutModes.Update && _jsx(ContextMenu, { showEvent: 'click', dataSource: commandsMenuItems, target: `#commands-detail-${id}` })] });
217
+ function createChange(mid, metadataType, modifiedValue) {
218
+ return { mid, metadataType, modifiedValue };
219
+ }
220
+ function getSpecificChangedKeysWithValues(originalList, modifiedList) {
221
+ const changes = [];
222
+ if (!originalList || !modifiedList)
223
+ return changes;
224
+ const originalMap = new Map(originalList.map(item => [item.mid, item]));
225
+ for (const modified of modifiedList) {
226
+ if (modified.mid === undefined)
227
+ continue;
228
+ const original = originalMap.get(modified.mid);
229
+ if (!original)
230
+ continue;
231
+ if (original.value !== modified.value) {
232
+ changes.push(createChange(modified.mid, modified.md?.dataType ?? MetadataDataTypes.Varchar, modified.value));
233
+ }
234
+ }
235
+ return changes;
236
+ }
237
+ const setMetadataListAsync = async (mdList, archived = false, currentDID) => {
238
+ try {
239
+ let did = currentDID ?? DID;
240
+ if (!did)
241
+ return;
242
+ TMSpinner.show({ description: 'Loading Metadata...' });
243
+ let res = await SDK_Globals.tmSession?.NewSearchEngine().GetMetadataAsync(TID, did, true);
244
+ let dtd = res?.dtdResult;
245
+ let rows = dtd.rows ? dtd.rows[0] : [];
246
+ let mids = res?.selectMIDs;
247
+ let metadataList = searchResultToMetadataValues(TID, dtd, rows, mids, mdList, layoutMode);
248
+ if (archived) {
249
+ let tempMetadataList = [];
250
+ for (let md of metadataList) {
251
+ if (md.value === null) {
252
+ if (formDataOrig.find(metadata => metadata.mid === md.mid)?.value === '') {
253
+ tempMetadataList.push({ ...md, value: '' });
254
+ }
255
+ if (formDataOrig.find(metadata => metadata.mid === md.mid)?.value === undefined) {
256
+ tempMetadataList.push({ ...md, value: undefined });
257
+ }
258
+ if (formDataOrig.find(metadata => metadata.mid === md.mid)?.value === null) {
259
+ tempMetadataList.push(md);
260
+ }
261
+ }
262
+ else {
263
+ tempMetadataList.push(md);
264
+ }
265
+ }
266
+ setFormData(tempMetadataList);
267
+ return;
268
+ }
269
+ setFormDataOrig(structuredClone(metadataList));
270
+ setFormData(structuredClone(metadataList));
271
+ }
272
+ catch (e) {
273
+ TMExceptionBoxManager.show({ exception: e });
274
+ }
275
+ finally {
276
+ TMSpinner.hide();
277
+ }
278
+ };
279
+ const onUndoHandler = () => {
280
+ setFormData(structuredClone(formDataOrig));
281
+ };
282
+ const confirmActionPopup = async () => {
283
+ TMMessageBoxManager.show({
284
+ buttons: [ButtonNames.YES, ButtonNames.NO],
285
+ message: layoutMode === LayoutModes.Update ? SDKUI_Localizator.SaveQuestion : 'Sei sicuro di voler archiviare questo documento?',
286
+ onButtonClick(e) {
287
+ if (e !== ButtonNames.YES)
288
+ return;
289
+ layoutMode === LayoutModes.Update ? onSavedAsync() : onArchiveAsync();
290
+ },
291
+ });
292
+ };
293
+ const onSavedAsync = async () => {
294
+ const ue = new UpdateEngineByID(SDK_Globals.tmSession);
295
+ ue.DID = DID;
296
+ ue.TID = TID;
297
+ ue.Metadata_ClearAll();
298
+ try {
299
+ TMSpinner.show({ description: 'Aggiornamento in corso...' });
300
+ for (let metadata of changedMetadata) {
301
+ if (!metadata.modifiedValue)
302
+ ue.Metadata_AddNull(metadata.mid);
303
+ else {
304
+ switch (metadata.metadataType) {
305
+ case MetadataDataTypes.DateTime:
306
+ ue.Metadata_AddDateTime(metadata.mid, new Date(metadata.modifiedValue));
307
+ break;
308
+ case MetadataDataTypes.Number:
309
+ ue.Metadata_AddNumber(metadata.mid, metadata.modifiedValue);
310
+ break;
311
+ case MetadataDataTypes.Varchar:
312
+ ue.Metadata_AddString(metadata.mid, metadata.modifiedValue);
313
+ break;
314
+ default: ue.Metadata_AddNull(metadata.mid);
315
+ }
316
+ }
317
+ }
318
+ await ue.UpdateAsync();
319
+ await onSavedAsyncCallback?.(TID, DID);
320
+ await setMetadataListAsync(fromDTD?.metadata);
321
+ ShowAlert({ mode: 'success', title: 'Form di documento', message: 'Le modifiche sono state salvate con successo', duration: 3000 });
322
+ }
323
+ catch (e) {
324
+ TMExceptionBoxManager.show({ exception: e });
325
+ }
326
+ finally {
327
+ TMSpinner.hide();
328
+ }
329
+ };
330
+ const resetHandler = () => {
331
+ setDcmtFile(null);
332
+ };
333
+ let firstBlock = true;
334
+ let maxFileSize = 0;
335
+ const onArchiveAsync = async () => {
336
+ let operationTitle = 'Archiviazione';
337
+ setUseWaitPanelLocalState(true);
338
+ setShowWaitPanelLocal(true);
339
+ setShowPrimaryLocal(false);
340
+ setShowSecondaryLocal(true);
341
+ setWaitPanelTitleLocal(operationTitle);
342
+ abortControllerLocal = new AbortController();
343
+ const ae = new ArchiveEngineByID(SDK_Globals.tmSession);
344
+ ae.TID = TID;
345
+ ae.Metadata_ClearAll();
346
+ try {
347
+ for (let metadata of formData) {
348
+ if (!metadata.value)
349
+ continue;
350
+ switch (metadata.md?.dataType) {
351
+ case MetadataDataTypes.DateTime:
352
+ ae.Metadata_AddDateTime(metadata.mid, new Date(metadata.value));
353
+ break;
354
+ case MetadataDataTypes.Number:
355
+ ae.Metadata_AddNumber(metadata.mid, parseFloat(metadata.value));
356
+ break;
357
+ case MetadataDataTypes.Varchar:
358
+ ae.Metadata_AddString(metadata.mid, metadata.value);
359
+ break;
360
+ default: ae.Metadata_AddNull(metadata.mid);
361
+ }
362
+ }
363
+ ae.ArchivingFile = dcmtFile;
364
+ let res = await ae.ArchiveAsync(abortControllerLocal.signal, (pd) => {
365
+ if (firstBlock) {
366
+ maxFileSize = pd.ProgressBarMaximum ?? 0;
367
+ setWaitPanelMaxValueSecondaryLocal(maxFileSize);
368
+ firstBlock = false;
369
+ }
370
+ setWaitPanelValueSecondaryLocal(pd.ProgressBarValue);
371
+ setWaitPanelTextSecondaryLocal(`Archiviazione... ${Globalization.getNumberDisplayValue(pd.ProgressBarValue, true)} / ${Globalization.getNumberDisplayValue(maxFileSize, true)}`);
372
+ if (pd.ProgressBarValue === pd.ProgressBarMaximum) {
373
+ setWaitPanelMaxValueSecondaryLocal(0);
374
+ setWaitPanelValueSecondaryLocal(0);
375
+ setWaitPanelTextSecondaryLocal('');
376
+ firstBlock = true;
377
+ }
378
+ });
379
+ await setMetadataListAsync(fromDTD?.metadata ?? [], true, res);
380
+ resetHandler();
381
+ let newMruTIDS = mruTIDs ? mruTIDs.slice() : [];
382
+ let index = newMruTIDS.findIndex((o) => o == TID);
383
+ if (index >= 0)
384
+ newMruTIDS.splice(index, 1);
385
+ if (newMruTIDS.length >= 10)
386
+ newMruTIDS.splice(0, 1);
387
+ newMruTIDS.push(TID);
388
+ LocalStorageService.setItem(`ARCHIVEPAGE_MRU_TIDS_${SDK_Globals.tmSession?.SessionDescr?.archiveID}_${SDK_Globals.tmSession?.SessionDescr?.userID}`, newMruTIDS.filter((tid) => tid != undefined && tid != null));
389
+ onSaveRecents?.(newMruTIDS);
390
+ ShowAlert({ mode: 'success', title: 'Archiviazione', message: 'Il documento è stato archiviato con successo', duration: 3000 });
391
+ }
392
+ catch (err) {
393
+ TMExceptionBoxManager.show({ exception: err });
394
+ }
395
+ finally {
396
+ setWaitPanelTextPrimaryLocal('');
397
+ setWaitPanelMaxValuePrimaryLocal(0);
398
+ setWaitPanelValuePrimaryLocal(0);
399
+ setWaitPanelTextSecondaryLocal('');
400
+ setWaitPanelMaxValueSecondaryLocal(0);
401
+ setWaitPanelValueSecondaryLocal(0);
402
+ setShowWaitPanelLocal(false);
403
+ setUseWaitPanelLocalState(false);
404
+ }
405
+ };
406
+ const clearFormHandler = () => {
407
+ let data = structuredClone(formData);
408
+ if (!data || data.length === 0)
409
+ return;
410
+ for (let md of data) {
411
+ if (!md.mid)
412
+ continue;
413
+ if (md.mid > 99) {
414
+ if (formDataOrig.find(metadata => metadata.mid === md.mid)?.value === undefined) {
415
+ if (md.value)
416
+ md.value = undefined;
417
+ }
418
+ else if (md.value && md.value.length > 0)
419
+ md.value = '';
420
+ }
421
+ }
422
+ setFormData(data);
423
+ };
424
+ const handleClose = () => {
425
+ if (!isModified) {
426
+ onClose?.();
427
+ return;
428
+ }
429
+ TMMessageBoxManager.show({
430
+ message: SDKUI_Localizator.SaveQuestion, buttons: [ButtonNames.YES, ButtonNames.NO, ButtonNames.CANCEL],
431
+ onButtonClick: async (e) => {
432
+ try {
433
+ if (e == ButtonNames.CANCEL)
434
+ return;
435
+ if (e == ButtonNames.YES)
436
+ await onSavedAsync?.();
437
+ onClose?.();
438
+ }
439
+ catch (ex) {
440
+ TMExceptionBoxManager.show({ exception: ex });
441
+ }
442
+ }
443
+ });
444
+ };
445
+ const isModified = calcIsModified(formData, formDataOrig);
446
+ const clearFormBtnDisabled = formData.filter(md => md.mid && md.value && md.mid > 99 && md.value.length > 0).length > 0;
447
+ const archiveBtnDisabled = layoutMode === LayoutModes.Update || (fromDTD?.archiveConstraint === ArchiveConstraints.ContentCompulsory && !dcmtFile) || validationItems.length > 0;
448
+ const undoBtnDisabled = layoutMode === LayoutModes.Update || !calcIsModified(formData, formDataOrig);
449
+ const listMaxItems = getListMaxItems(deviceType ?? DeviceType.DESKTOP);
450
+ const totalItems = formData.filter(o => o.mid && o.mid > 100).length;
451
+ const metadataValuesSource = useMemo(() => {
452
+ return showAll ? formData.filter(o => o.mid && o.mid > 100) : formData.filter(o => o.mid && o.mid > 100).slice(0, listMaxItems);
453
+ }, [showAll, formData]);
454
+ const metadataValuesSourceOrig = useMemo(() => {
455
+ return showAll ? formDataOrig.filter(o => o.mid && o.mid > 100) : formDataOrig.filter(o => o.mid && o.mid > 100).slice(0, listMaxItems);
456
+ }, [showAll, formDataOrig]);
457
+ const getFormula = () => {
458
+ let fd = new FormulaDescriptor();
459
+ fd.expression = FormulaHelper.isFormula(focusedMetadataValue?.value) ? FormulaHelper.removeFormulaTag(focusedMetadataValue?.value) : undefined;
460
+ fd.formulaTarget = FormulaTargets.BatchUpdate;
461
+ fd.items = FormulaHelper.TreeViewList(TID ?? 0, getSystemMetadata(true), undefined, FormulaTargets.BatchUpdate, SDK_Globals.dbBrand);
462
+ fd.mid = focusedMetadataValue?.mid ?? 0;
463
+ fd.tid = TID;
464
+ return fd;
465
+ };
466
+ return (_jsxs(TMLayoutWaitingContainer, { direction: 'vertical', showWaitPanel: useWaitPanelLocalState ? showWaitPanelLocal : showWaitPanel, showWaitPanelPrimary: useWaitPanelLocalState ? showPrimaryLocal : showPrimary, showWaitPanelSecondary: useWaitPanelLocalState ? showSecondaryLocal : showSecondary, waitPanelTitle: useWaitPanelLocalState ? waitPanelTitleLocal : waitPanelTitle, waitPanelTextPrimary: useWaitPanelLocalState ? waitPanelTextPrimaryLocal : waitPanelTextPrimary, waitPanelValuePrimary: useWaitPanelLocalState ? waitPanelValuePrimaryLocal : waitPanelValuePrimary, waitPanelMaxValuePrimary: useWaitPanelLocalState ? waitPanelMaxValuePrimaryLocal : waitPanelMaxValuePrimary, waitPanelTextSecondary: useWaitPanelLocalState ? waitPanelTextSecondaryLocal : waitPanelTextSecondary, waitPanelValueSecondary: useWaitPanelLocalState ? waitPanelValueSecondaryLocal : waitPanelValueSecondary, waitPanelMaxValueSecondary: useWaitPanelLocalState ? waitPanelMaxValueSecondaryLocal : waitPanelMaxValueSecondary, isCancelable: useWaitPanelLocalState ? dcmtFile ? dcmtFile.size >= 1000000 : false : true, abortController: useWaitPanelLocalState ? abortControllerLocal : abortController, children: [_jsxs(TMSplitterLayout, { separatorSize: 5, separatorColor: 'transparent', showSeparator: (isOpenPreview || isOpenMiddlePanel()) && deviceType !== DeviceType.MOBILE && isOpenDcmtForm, start: getPrimarySplitterStartLayout(), min: deviceType !== DeviceType.MOBILE && isOpenDcmtForm ? ['150px', '0'] : ['0', '0'], direction: 'horizontal', children: [_jsx(TMLayoutItem, { children: _jsx(TMToolbarCard, { showHeader: showHeader, title: fromDTD?.nameLoc, toolbar: allowNavigation ? formToolbar : _jsx(_Fragment, {}), items: showDcmtFormSidebar ? sideBarItems : undefined, onBack: isClosable ? undefined : handleClose, onClose: isClosable ? handleClose : undefined, children: metadataValuesSource.length > 0 && _jsxs(StyledToolbarCardContainer, { children: [_jsx(TMMetadataValues, { TID: TID, metadataValues: metadataValuesSource, metadataValuesOrig: metadataValuesSourceOrig, showAdvancedMenu: showAdvancedMenu, isOpenDistinctValues: isOpenDistinctValues, openChooserBySingleClick: !isOpenDistinctValues, selectedMID: focusedMetadataValue?.mid, layoutMode: layoutMode, deviceType: deviceType, validationItems: validationItems, onFocusedItemChanged: (item) => { (item?.mid !== focusedMetadataValue?.mid) && setFocusedMetadataValue(item); }, onValueChanged: (newItems) => {
467
+ setFormData((prevItems) => prevItems.map((item) => {
468
+ const newItem = newItems.find((newItem) => newItem.tid === item.tid && newItem.mid === item.mid);
469
+ return newItem ? { ...item, ...newItem } : item;
470
+ }));
471
+ }, onAdvancedMenuClick: (e) => {
472
+ switch (e.button) {
473
+ case AdvancedMenuButtons.DistinctValues:
474
+ setIsOpenDistinctValues(!isOpenDistinctValues);
475
+ break;
476
+ case AdvancedMenuButtons.FormulaEditor:
477
+ setIsOpenFormulaEditor(!isOpenFormulaEditor);
478
+ break;
479
+ }
480
+ } }), _jsxs(StyledFormButtonsContainer, { children: [_jsxs("div", { style: { display: 'flex', flexDirection: 'column', gap: 10 }, children: [fromDTD?.templateTID === TemplateTIDs.WF_WIApprView && _jsx(WorkFlowOperationButtons, { onApprove: () => setShowApprovePopup(true), onReject: () => setShowRejectPopup(true), onReAssign: () => setShowReAssignPopup(true), isInDcmtForm: true }), _jsx("div", { style: { display: 'flex', justifyContent: 'center', alignItems: 'center', gap: '8px' }, children: layoutMode === LayoutModes.Update ? _jsxs(_Fragment, { children: [_jsx(TMSaveFormButtonSave, { showTooltip: false, btnStyle: 'advanced', advancedColor: '#f09c0a', isModified: isModified, formMode: formMode, errorsCount: validationItems.filter(o => o.ResultType == ResultTypes.ERROR).length, onSaveAsync: confirmActionPopup }), _jsx(TMSaveFormButtonUndo, { btnStyle: 'toolbar', showTooltip: true, color: 'primary', isModified: isModified, formMode: formMode, onUndo: onUndoHandler })] }) :
481
+ _jsxs(_Fragment, { children: [_jsx(TMButton, { disabled: archiveBtnDisabled, btnStyle: 'advanced', icon: _jsx(IconBoxArchiveIn, {}), showTooltip: false, caption: 'Archivia', advancedColor: TMColors.success, onClick: confirmActionPopup }), _jsx(TMButton, { disabled: !clearFormBtnDisabled, btnStyle: 'advanced', icon: _jsx(IconClear, {}), showTooltip: false, caption: 'Pulisci', advancedColor: TMColors.tertiary, onClick: clearFormHandler }), DID && _jsx(TMButton, { disabled: undoBtnDisabled, btnStyle: 'advanced', icon: _jsx(IconUndo, {}), width: '150px', showTooltip: false, caption: 'Annulla modifiche', advancedColor: TMColors.tertiary, onClick: onUndoHandler })] }) })] }), totalItems > listMaxItems && _jsx(TMShowAllOrMaxItemsButton, { showAll: showAll, dataSourceLength: totalItems, onClick: () => { setShowAll(!showAll); } })] }), showApprovePopup && _jsx(WorkFlowApproveRejectPopUp, { deviceType: deviceType, TID: TID, DID: DID, op: 0, onClose: () => setShowApprovePopup(false) }), showRejectPopup && _jsx(WorkFlowApproveRejectPopUp, { deviceType: deviceType, TID: TID, DID: DID, op: 1, onClose: () => setShowRejectPopup(false) }), showReAssignPopup && _jsx(WorkFlowReAssignPopUp, { deviceType: deviceType, TID: TID, DID: DID, onClose: () => setShowReAssignPopup(false) })] }) }) }), isOpenPreview || isOpenMiddlePanel() ?
482
+ _jsx(TMLayoutItem, { children: _jsxs(TMSplitterLayout, { separatorSize: 5, direction: 'horizontal', showSeparator: deviceType !== DeviceType.MOBILE && (isOpenPreview && isOpenMiddlePanel()), start: getSecondarySplitterStartLayout(), min: ['0', '0'], separatorColor: 'transparent', children: [isOpenMiddlePanel()
483
+ ? _jsx(TMLayoutItem, { children: _jsx(TMToolbarCard, { padding: '0', showHeader: !(isOpenDetails && layoutMode === LayoutModes.Update), color: TMColors.primaryColor, backgroundColor: `${TMColors.primaryColor}25`, title: titleText(), toolbar: middlePanelToolbar, onClose: () => { closeMiddlePanel(); }, children: _jsx(StyledToolbarCardContainer, { children: _jsx(StyledSectionContainer, { children: _jsxs(StyledSidebarItemsContentContainer, { children: [isOpenBoard && layoutMode === LayoutModes.Update &&
484
+ _jsx(TMDcmtBlog, { tid: TID, did: DID }), isOpenSysMetadata && layoutMode === LayoutModes.Update &&
485
+ _jsx(TMMetadataValues, { layoutMode: layoutMode, openChooserBySingleClick: !isOpenDistinctValues, TID: TID, deviceType: deviceType, metadataValues: formData.filter(o => (o.mid != undefined && o.mid <= 100)), metadataValuesOrig: formData.filter(o => (o.mid != undefined && o.mid <= 100)), validationItems: [] }), isOpenDistinctValues &&
486
+ _jsx(TMDistinctValues, { tid: TID, mid: focusedMetadataValue?.mid, showHeader: false, layoutMode: layoutMode, onSelectionChanged: (e) => {
487
+ if (!e)
488
+ return;
489
+ setFormData((prevItems) => prevItems.map((item) => item.tid == e.tid && item.mid === e.mid ? { ...item, value: e.newValue } : item));
490
+ } }), isOpenFormulaEditor &&
491
+ _jsx(TMFormulaEditor, { isModal: false, formMode: FormModes.Update, inputData: getFormula(), showBack: false, onClose: () => setIsOpenFormulaEditor(false), onApplied: (newFormula) => {
492
+ setFormData((prevItems) => prevItems.map((item) => item.tid == newFormula.tid && item.mid === newFormula.mid ? { ...item, value: FormulaHelper.addFormulaTag(newFormula.expression), isSelected: true, isEditable: true } : item));
493
+ setFocusedMetadataValue(prevState => ({
494
+ ...prevState,
495
+ isSelected: true,
496
+ isEditable: true,
497
+ value: FormulaHelper.addFormulaTag(newFormula.expression)
498
+ }));
499
+ } })] }) }) }) }) })
500
+ : _jsx(_Fragment, {}), isOpenPreview
501
+ ? _jsxs(TMLayoutItem, { children: [layoutMode === LayoutModes.Update ?
502
+ _jsx(TMDcmtPreview, { onClose: () => { setIsOpenPreview(false); onClosePreview?.(); }, dcmtData: currentDcmt, canNext: canNext, canPrev: canPrev, onNext: onNext, onPrev: onPrev }) :
503
+ _jsx(TMFileUploader, { onFileUpload: (file) => setDcmtFile(file), onClose: () => setIsOpenPreview(false), isRequired: fromDTD?.archiveConstraint === ArchiveConstraints.ContentCompulsory && dcmtFile === null, defaultBlob: dcmtFile, deviceType: deviceType }), " "] })
504
+ : _jsx(_Fragment, {})] }) }) : _jsx(_Fragment, {})] }), isOpenDetails &&
505
+ _jsx(StyledModalContainer, { style: { backgroundColor: 'white' }, children: _jsx(TMMasterDetailDcmts, { deviceType: deviceType, isForMaster: false, inputDcmts: getSelectionDcmtInfo(), allowNavigation: allowNavigation, canNext: canNext, canPrev: canPrev, onNext: onNext, onPrev: onPrev, onBack: () => setIsOpenDetails(false) }) }), isOpenMaster &&
506
+ _jsxs(StyledModalContainer, { style: { backgroundColor: 'white' }, children: [_jsx(TMMasterDetailDcmts, { deviceType: deviceType, inputDcmts: getSelectionDcmtInfo(), isForMaster: true, allowNavigation: allowNavigation, canNext: canNext, canPrev: canPrev, onNext: onNext, onPrev: onPrev, onBack: () => setIsOpenMaster(false), appendMasterDcmts: handleAddItem }), secondaryMasterDcmts.length > 0 && secondaryMasterDcmts.map((dcmt, index) => {
507
+ return (_jsx(StyledModalContainer, { style: { backgroundColor: 'white' }, children: _jsx(TMMasterDetailDcmts, { deviceType: deviceType, inputDcmts: [dcmt], isForMaster: true, allowNavigation: false, onBack: () => handleRemoveItem(dcmt.TID, dcmt.DID), appendMasterDcmts: handleAddItem }) }, `${index}-${dcmt.DID}`));
508
+ })] })] }));
509
+ };
510
+ export default TMDcmtForm;
511
+ //#region Styled Components
512
+ const StyledSectionContainer = styled.div ` width: 100%; height: 100%; display:flex; flex-direction: column; `;
513
+ const StyledSidebarItemsContentContainer = styled.div `width: 100%; height: 100%; overflow:auto;`;
514
+ //#endregion Styled Components
515
+ //#region Validaion
516
+ const validateMetadataList = (mvdList = []) => {
517
+ if (!Array.isArray(mvdList)) {
518
+ throw new TypeError("metadataList must be an array of ITMMetadataProps.");
519
+ }
520
+ return mvdList.reduce((validationItems, md) => {
521
+ const value = md.value?.toString() ?? "";
522
+ if (isValidForValidation(md)) {
523
+ validateRequiredField(md, value, validationItems);
524
+ validateMaxLength(md, value, validationItems);
525
+ }
526
+ return validationItems;
527
+ }, []);
528
+ };
529
+ const isValidForValidation = (mvd) => { return mvd.mid > 99; };
530
+ const validateRequiredField = (mvd, value, validationItems) => {
531
+ if (mvd.isRequired === '1' && !value.trim()) {
532
+ const message = SDKUI_Localizator.RequiredField;
533
+ validationItems.push(new ValidationItem(ResultTypes.ERROR, mvd.md?.nameLoc ?? "", message));
534
+ }
535
+ };
536
+ const validateMaxLength = (mvd, value, validationItems) => {
537
+ const regex = /[!?[\],./*-+'<>:";]/g;
538
+ const maxLength = mvd.md?.length ?? 0;
539
+ const isTextOrNumber = mvd.md?.dataType === MetadataDataTypes.Varchar || mvd.md?.dataType === MetadataDataTypes.Number;
540
+ if (isTextOrNumber && mvd.md?.length && value.replace(regex, '').length > maxLength) {
541
+ const message = `"${mvd.md.nameLoc ?? "no-name"}" ha superata massimo lunghezza di ${maxLength} caratteri.`;
542
+ validationItems.push(new ValidationItem(ResultTypes.ERROR, mvd.md.nameLoc ?? "", message));
543
+ }
544
+ };
@@ -0,0 +1,10 @@
1
+ interface ITMDcmtIconProps {
2
+ fileExtension: string | undefined;
3
+ fileCount: number | undefined;
4
+ isLexProt: number | undefined;
5
+ isSigned: number | undefined;
6
+ isMail: number | undefined;
7
+ isShared: number | undefined;
8
+ }
9
+ declare const TMDcmtIcon: ({ fileExtension, fileCount, isLexProt, isSigned, isMail, isShared }: ITMDcmtIconProps) => import("react/jsx-runtime").JSX.Element;
10
+ export default TMDcmtIcon;
@@ -0,0 +1,52 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import styled from 'styled-components';
3
+ import { getFileIcon } from '../../helper';
4
+ import TMTooltip from '../base/TMTooltip';
5
+ const StyledCellRenderDcmtIcon = styled.div `
6
+ display: flex;
7
+ flex-direction: row;
8
+ align-items: center;
9
+ justify-content: center;
10
+ overflow: visible;
11
+ position: relative;
12
+ `;
13
+ const TMDcmtIcon = ({ fileExtension, fileCount, isLexProt, isSigned, isMail, isShared }) => {
14
+ return (_jsxs(StyledCellRenderDcmtIcon, { children: [getFileIcon(isMail == 2 ? "PEC" : fileExtension, fileCount), isLexProt == 1 && _jsx("div", { style: { position: 'absolute', left: '-7px', top: isShared ? undefined : '2px' }, children: _jsx(TMTooltip, { content: "Protezione LEX", children: _jsx(IconLexProtLock, { color: 'blue', fontSize: 13 }) }) }), isShared == 1 && _jsx("div", { style: { position: 'absolute', top: '-7px', left: '-5px' }, children: _jsx(TMTooltip, { content: "Documento condiviso", children: _jsx(IconShared, { fontSize: 16 }) }) }), isSigned == 1 && _jsx("div", { style: { position: 'absolute', bottom: '-4px', right: '-7px' }, children: _jsx(TMTooltip, { content: "Documento firmato", children: _jsx(IconSignature, { fontSize: 28 }) }) })] }));
15
+ };
16
+ export default TMDcmtIcon;
17
+ function IconLexProtLock(props) {
18
+ return (_jsxs("svg", { viewBox: "0 0 512 512", height: "1em", width: "1em", ...props, children: [_jsx("path", { fill: "#455A64", d: "M256,0c-76.544,0.094-138.573,62.122-138.667,138.667V224c0,5.891,4.776,10.667,10.667,10.667h42.667\r\n c5.891,0,10.667-4.776,10.667-10.667v-85.333C181.333,97.429,214.763,64,256,64s74.667,33.429,74.667,74.667V224\r\n c0,5.891,4.776,10.667,10.667,10.667H384c5.891,0,10.667-4.776,10.667-10.667v-85.333C394.573,62.122,332.544,0.094,256,0z" }), _jsx("path", { fill: "#FFC107", d: "M128,213.333h256c29.455,0,53.333,23.878,53.333,53.333v192C437.333,488.122,413.455,512,384,512H128\r\n c-29.455,0-53.333-23.878-53.333-53.333v-192C74.667,237.211,98.545,213.333,128,213.333z" }), _jsx("path", { fill: "#455A64", d: "M309.333,330.667c0.124-29.455-23.653-53.434-53.108-53.558\r\n c-29.455-0.124-53.434,23.653-53.558,53.108c-0.086,20.36,11.427,38.992,29.674,48.023l-8.235,57.6\r\n c-0.825,5.833,3.235,11.23,9.068,12.055c0.494,0.07,0.993,0.105,1.492,0.105h42.667c5.891,0.06,10.715-4.667,10.774-10.558\r\n c0.005-0.543-0.03-1.086-0.108-1.623l-8.235-57.6C297.788,369.199,309.216,350.82,309.333,330.667z" }), _jsx("g", { children: " " }), " ", _jsx("g", { children: " " }), " ", _jsx("g", { children: " " }), " ", _jsx("g", { children: " " }), " ", _jsx("g", { children: " " }), " ", _jsx("g", { children: " " }), " ", _jsx("g", { children: " " }), " ", _jsx("g", { children: " " }), " ", _jsx("g", { children: " " }), " ", _jsx("g", { children: " " }), " ", _jsx("g", { children: " " }), " ", _jsx("g", { children: " " }), " ", _jsx("g", { children: " " }), " ", _jsx("g", { children: " " }), " ", _jsx("g", { children: " " })] })
19
+ // <svg
20
+ // viewBox="0 0 24 24"
21
+ // fill="currentColor"
22
+ // height="1em"
23
+ // width="1em"
24
+ // {...props}
25
+ // >
26
+ // <path d="M12 2C9.243 2 7 4.243 7 7v3H6a2 2 0 00-2 2v8a2 2 0 002 2h12a2 2 0 002-2v-8a2 2 0 00-2-2h-1V7c0-2.757-2.243-5-5-5zM9 7c0-1.654 1.346-3 3-3s3 1.346 3 3v3H9V7zm4 10.723V20h-2v-2.277a1.993 1.993 0 01.567-3.677A2.001 2.001 0 0114 16a1.99 1.99 0 01-1 1.723z" />
27
+ // </svg>
28
+ );
29
+ }
30
+ function IconShared(props) {
31
+ return (_jsx("svg", { viewBox: "0 0 24 24", fill: "currentColor", height: "1em", width: "1em", ...props, children: _jsx("path", { d: "M11 9V5l7 7-7 7v-4.1c-5 0-8.5 1.6-11 5.1 1-5 4-10 11-11m6-1V5l7 7-7 7v-3l4-4-4-4z" }) }));
32
+ }
33
+ function IconSignature(props) {
34
+ return (
35
+ // <svg viewBox="0 0 128 128" fill="currentColor"
36
+ // height="1em"
37
+ // width="1em"
38
+ // {...props}>
39
+ // <g><path d="m128 82.7c0-.3-.1-.6-.2-.8l-6.4-10.9c-2.2-3.7-4.8-7.1-7.9-10.2l-39.8-39.8c-2.7-2.7-7-2.7-9.7 0s-2.7 7 0 9.7l39.8 39.8c3.1 3.1 6.5 5.7 10.2 7.9l8.3 4.8c-.3.2-.7.5-1 .7-1.4 1-2.9 2-4.3 3.1-1.2.9-2.3 1.9-3.3 2.9-2.5 2.2-4.8 4.3-7.8 5.6-3.5 1.5-8.9 2.2-12.6-.9-.7-.6-1.4-1.4-2.2-2.2-2-2.2-4.3-4.7-7.8-4.6-2.9.1-4.9 2-6.7 3.7-.8.8-1.6 1.5-2.4 2-1 .6-2.1.9-3.2.9 1.9-3.5 2.5-7.1 1.7-10.5-.6-2.4-3.1-8.7-7.7-8.5-1.8.1-3.3 1-4.3 2.6-2.2 3.5-1.4 9.7-.4 12.2 1 2.4 2.6 4.4 4.5 5.9-3.9 4.3-9.6 7.4-15.9 8.6-6.4 1.2-12.9-.7-18.2-4.8 4.7-2 9.1-5.2 12.7-9.4 5.7-6.8 8-14.5 6.1-21.1-1.2-4.1-3.8-7.2-7.8-8.9-4.7-2-10.7-1.6-15.6 1.1-11.1 6.1-12.2 20.3-6.8 30.6 1.1 2.1 2.3 4 3.7 5.7-.5.1-1 .1-1.4.1-4.5.1-8.3-1.4-11.4-4.7-9.8-10.2-7-27.9 1.1-38.5 8.4-11 23.5-14.9 35.1-9.1 1 .5 2.2.1 2.7-.9s.1-2.2-.9-2.7c-13.2-6.6-30.4-2.2-40 10.2-9.2 12-12.2 32-.9 43.7 3.9 4 8.9 6.1 14.4 5.9 1.5 0 3-.3 4.5-.6 5.3 4.9 11.9 7.7 18.7 7.7 1.5 0 3-.1 4.6-.4 7.7-1.4 14.4-5.2 18.9-10.6 2.7.8 5.4.4 7.8-1.1 1.1-.7 2.1-1.6 3-2.5 1.4-1.4 2.7-2.5 4-2.6 1.6 0 2.8 1.2 4.7 3.3.8.9 1.6 1.8 2.6 2.6 4.2 3.5 10.8 4.1 16.8 1.5 3.6-1.6 6.3-4 8.9-6.3 1-.9 2.1-1.9 3.2-2.7 1.3-1 2.6-1.9 4-2.9 1.2-.8 2.5-1.7 3.7-2.6.7-.6 1-1.3.9-2zm-12-7.8c-3.4-2-6.5-4.4-9.4-7.2l-39.8-39.8c-1.1-1.1-1.1-2.9 0-4 .6-.6 1.3-.8 2-.8s1.5.3 2 .8l39.8 39.8c2.8 2.8 5.3 6 7.2 9.4l2.7 4.6zm-93.1 15.4c-4.5-8.5-3.8-20.3 5.2-25.2 2.2-1.2 4.8-1.8 7.3-1.8 1.7 0 3.4.3 4.9.9 1.9.8 4.4 2.6 5.5 6.3 2.1 7.6-3 14.7-5.3 17.4-3.5 4.2-8.2 7.4-12.9 9-1.9-2-3.4-4.2-4.7-6.6zm44.3 2.6c-1.4-1-2.5-2.5-3.2-4.2-.7-1.8-1.2-6.5.1-8.6.3-.5.6-.7 1.1-.7 1.2 0 3 3 3.5 5.4.8 3.2-.3 6.1-1.5 8.1z"></path></g>
40
+ // </svg>
41
+ _jsx("svg", { height: "1em", viewBox: "0 0 450 450", width: "1em", fill: "currentColor", ...props, children: _jsx("g", { children: _jsx("g", { children: _jsxs("g", { clipRule: "evenodd", fill: "rgb(0,0,0)", fillRule: "evenodd", children: [_jsx("path", { d: "m366.6 67.8 1.1-4c.4-1.5.6-3 .6-4.5 0-8.1-5.5-15.2-13.3-17.3-9.5-2.5-19.3 3.2-21.8 12.8l-20.4 77.9 34.6 9z" }), _jsx("path", { d: "m234.9 198.9h148.6v35.7h-148.6z", transform: "matrix(.253 -.968 .968 .253 21.311 461.088)" }), _jsx("path", { d: "m292.8 316 8.4 2.2 4.5-17.3-34.6-9.1-4.5 17.4 8.3 2.2z" }), _jsx("path", { d: "m275.3 319.7-12.7 14.7 5.4 40.3 24.4-32.5-3.9-19.1zm6.5 23.3c-.8 2.9-3.7 4.6-6.6 3.9s-4.6-3.7-3.9-6.6 3.7-4.6 6.6-3.9 4.6 3.7 3.9 6.6z" }), _jsx("path", { d: "m395.6 71.5-20.3-5.5-2 7.7 16.5 4.4-24.8 95c-.6 2.1.7 4.3 2.8 4.8.3.1.7.1 1 .1 1.8 0 3.4-1.2 3.8-3l25.8-98.8c.6-2-.7-4.2-2.8-4.7z" }), _jsx("path", { d: "" }), _jsx("path", { d: "m243.4 379.8c-1.8-1.2-4.3-.8-5.5 1.1-9.6 14.1-29.9 19.6-45.3 12.2-.5-.2-.9-.5-1.4-.7-3.5-1.8-7.9-4-12.8-2.7-2.7.7-4.7 2.3-6.5 3.6-1.5 1.2-2.8 2.2-3.9 2.2-2 .1-4-3-5-5.9-.2-.5-.4-1-.5-1.5-1.4-4.1-3.1-9.1-7.8-11.8-5.8-3.3-12.9-.9-17.4 3-2.4 2-4.2 4.4-6 6.7-1.2 1.5-2.3 2.9-3.4 4.1-7.5 7.9-20.3 10-30.2 5.6 7.6-6.9 13-15.5 15.4-24.9s1-21.1-7.8-25.8c-4.5-2.4-9.9-2.4-15.2.2-4.4 2.2-8.4 5.9-10.9 10.3-3.9 7-5.1 15.4-3.3 23.8 1.4 6.3 4.3 12 8.4 16.5-8.4 4.9-18.2 7.3-27.8 6.1-2.2-.3-4.2 1.2-4.5 3.4s1.2 4.2 3.4 4.5c2.1.3 4.1.4 6.2.4 10 0 20.1-3.1 29.1-9 6.1 3.7 13.5 5.4 21.1 4.7 8.5-.8 16.3-4.4 21.8-10.2 1.5-1.5 2.7-3.1 3.9-4.7 1.6-2.1 3.1-4 4.9-5.6 2.4-2 6-3.4 8.3-2.1 2.1 1.2 3.1 4.2 4.2 7.5.2.5.4 1.1.6 1.6 2.5 7 7.1 11.1 12.4 11.1h.6c3.6-.2 6.2-2.2 8.3-3.9 1.3-1 2.5-2 3.6-2.2 2-.5 4.5.8 7.2 2.1.5.3 1 .5 1.5.7 5.7 2.7 11.9 4 18.2 4 14.4 0 29-6.9 37.1-18.9 1.3-1.8.9-4.3-1-5.5zm-152.6 11.3c-8.1-8-10.4-21.8-4.8-31.7 2.5-4.5 7.5-8.2 12-8.2 1.2 0 2.3.3 3.4.8 5 2.7 5.5 10.6 3.9 16.8-2.2 8.7-7.5 16.5-14.5 22.3z" })] }) }) }) })
42
+ // <svg
43
+ // viewBox="0 0 24 24"
44
+ // fill="currentColor"
45
+ // height="1em"
46
+ // width="1em"
47
+ // {...props}
48
+ // >
49
+ // <path d="M22 22H2v-2h20v2M2.26 16.83L5.09 14l-2.83-2.83 1.41-1.41 2.83 2.83 2.83-2.83 1.41 1.41L7.91 14l2.83 2.83-1.41 1.41-2.83-2.83-2.83 2.83-1.41-1.41z" />
50
+ // </svg>
51
+ );
52
+ }