@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,387 @@
1
+ import { useState } from 'react';
2
+ import { LocalizeDcmtOperationTypes } from '../helper/Enum_Localizator';
3
+ import { SDK_Globals, RetrieveFileOptions, DcmtOpers, ResultTypes, RecentCategories, MetadataDataTypes, MetadataDataDomains, DataListCacheService } from '@topconsultnpm/sdk-ts-beta';
4
+ import { ShowAlert, TMResultManager, FormulaHelper } from '../components';
5
+ import { Globalization, getExceptionMessage, dialogConfirmOperation, extensionHandler } from '../helper';
6
+ import { DcmtOperationTypes, FileExtensionHandler } from '../ts';
7
+ import { useFileDialog } from './useInputDialog';
8
+ let abortController = new AbortController();
9
+ const dcmtsFileCacheDownload = new Map();
10
+ const dcmtsFileCachePreview = new Map();
11
+ const CACHE_SIZE_LIMIT = 10;
12
+ export function useDcmtOperations() {
13
+ const [showWaitPanel, setShowWaitPanel] = useState(false);
14
+ const [waitPanelTitle, setWaitPanelTitle] = useState('');
15
+ const [showPrimary, setShowPrimary] = useState(false);
16
+ const [waitPanelTextPrimary, setWaitPanelTextPrimary] = useState('');
17
+ const [waitPanelValuePrimary, setWaitPanelValuePrimary] = useState(0);
18
+ const [waitPanelMaxValuePrimary, setWaitPanelMaxValuePrimary] = useState(0);
19
+ const [showSecondary, setShowSecondary] = useState(false);
20
+ const [waitPanelTextSecondary, setWaitPanelTextSecondary] = useState('');
21
+ const [waitPanelValueSecondary, setWaitPanelValueSecondary] = useState(0);
22
+ const [waitPanelMaxValueSecondary, setWaitPanelMaxValueSecondary] = useState(0);
23
+ const { OpenFileDialog } = useFileDialog();
24
+ const downloadDcmtsAsync = async (inputDcmts) => {
25
+ if (inputDcmts === undefined)
26
+ return;
27
+ if (inputDcmts.length <= 0)
28
+ return;
29
+ let operationTitle = 'Download File';
30
+ setShowWaitPanel(true);
31
+ setShowPrimary(inputDcmts.length > 1);
32
+ setShowSecondary(true);
33
+ setWaitPanelTitle(operationTitle);
34
+ abortController = new AbortController();
35
+ const rfo = new RetrieveFileOptions();
36
+ rfo.retrieveReason = DcmtOpers.ShowFile;
37
+ let result = [];
38
+ setWaitPanelMaxValuePrimary(inputDcmts.length);
39
+ let firstBlock = true;
40
+ let maxFileSize = 0;
41
+ for (let i = 0; i < inputDcmts.length; i++) {
42
+ if (abortController.signal.aborted) {
43
+ result.push({ rowIndex: i, id1: inputDcmts[i].TID, id2: inputDcmts[i].DID, resultType: ResultTypes.WARNING, description: `Operazione interrotta. Elaborati ${i + 1} documenti` });
44
+ break;
45
+ }
46
+ try {
47
+ setWaitPanelTextPrimary(`Download file ${i + 1} di ${inputDcmts.length}`);
48
+ let file;
49
+ const cacheKey = `${inputDcmts[i].TID}-${inputDcmts[i].DID}`;
50
+ if (dcmtsFileCacheDownload.has(cacheKey)) {
51
+ file = dcmtsFileCacheDownload.get(cacheKey);
52
+ }
53
+ else {
54
+ file = await SDK_Globals.tmSession?.NewSearchEngine().RetrieveFileAsync(inputDcmts[i].TID, inputDcmts[i].DID, rfo, abortController.signal, (pd) => {
55
+ if (firstBlock) {
56
+ maxFileSize = pd.ProgressBarMaximum ?? 0;
57
+ setWaitPanelMaxValueSecondary(maxFileSize);
58
+ firstBlock = false;
59
+ }
60
+ setWaitPanelValueSecondary(pd.ProgressBarValue);
61
+ setWaitPanelTextSecondary(`Downloading... ${Globalization.getNumberDisplayValue(pd.ProgressBarValue, true)} / ${Globalization.getNumberDisplayValue(maxFileSize, true)}`);
62
+ if (pd.ProgressBarValue === pd.ProgressBarMaximum) {
63
+ setWaitPanelMaxValueSecondary(0);
64
+ setWaitPanelValueSecondary(0);
65
+ setWaitPanelTextSecondary('');
66
+ firstBlock = true;
67
+ }
68
+ });
69
+ }
70
+ setWaitPanelValuePrimary(i + 1);
71
+ const fileURL = window.URL.createObjectURL(file);
72
+ const alink2 = document.createElement('a');
73
+ alink2.href = fileURL;
74
+ alink2.download = inputDcmts[i].fileName ?? file?.name;
75
+ alink2.target = "_blank";
76
+ alink2.rel = "noreferrer";
77
+ alink2.click();
78
+ if (dcmtsFileCacheDownload.size >= CACHE_SIZE_LIMIT) {
79
+ const oldestKey = dcmtsFileCacheDownload.keys().next().value;
80
+ dcmtsFileCacheDownload.delete(oldestKey);
81
+ }
82
+ dcmtsFileCacheDownload.set(cacheKey, file);
83
+ result.push({ rowIndex: i, id1: inputDcmts[i].TID, id2: inputDcmts[i].DID, resultType: ResultTypes.SUCCESS });
84
+ }
85
+ catch (ex) {
86
+ result.push({ rowIndex: i, id1: inputDcmts[i].TID, id2: inputDcmts[i].DID, resultType: ResultTypes.ERROR, description: getExceptionMessage(ex) });
87
+ const err = ex;
88
+ if (err.name === 'CanceledError') {
89
+ ShowAlert({ message: err.message, mode: 'warning', duration: 3000, title: 'Abort' });
90
+ }
91
+ }
92
+ }
93
+ setWaitPanelTextPrimary('');
94
+ setWaitPanelMaxValuePrimary(0);
95
+ setWaitPanelValuePrimary(0);
96
+ setWaitPanelTextSecondary('');
97
+ setWaitPanelMaxValueSecondary(0);
98
+ setWaitPanelValueSecondary(0);
99
+ setShowWaitPanel(false);
100
+ TMResultManager.show(result, operationTitle, "TID", "DID");
101
+ };
102
+ const uploadDcmtsAsync = async (inputDcmts, operationTitle, operType, actionAfterOperationAsync) => {
103
+ if (inputDcmts === undefined)
104
+ return;
105
+ if (inputDcmts.length <= 0)
106
+ return;
107
+ let file = await OpenFileDialog();
108
+ if (!file)
109
+ return;
110
+ setShowWaitPanel(true);
111
+ setShowPrimary(inputDcmts.length > 1);
112
+ setShowSecondary(true);
113
+ setWaitPanelTitle(operationTitle);
114
+ abortController = new AbortController();
115
+ let result = [];
116
+ setWaitPanelMaxValuePrimary(inputDcmts.length);
117
+ let firstBlock = true;
118
+ let maxFileSize = 0;
119
+ for (let i = 0; i < inputDcmts.length; i++) {
120
+ if (abortController.signal.aborted) {
121
+ result.push({ rowIndex: i, id1: inputDcmts[i].TID, id2: inputDcmts[i].DID, resultType: ResultTypes.WARNING, description: `Operazione interrotta. Elaborati ${i + 1} documenti` });
122
+ break;
123
+ }
124
+ try {
125
+ setWaitPanelTextPrimary(`Caricamento file ${i + 1} di ${inputDcmts.length}`);
126
+ const cacheKey = `${inputDcmts[i].TID}-${inputDcmts[i].DID}`;
127
+ if (dcmtsFileCachePreview.has(cacheKey))
128
+ removeDcmtsFileCache(cacheKey);
129
+ let ue = SDK_Globals.tmSession?.NewUpdateEngineByID();
130
+ if (ue) {
131
+ ue.TID = inputDcmts[i].TID;
132
+ ue.DID = inputDcmts[i].DID;
133
+ await ue.SubstituteFileAsync(file, operType, abortController.signal, (pd) => {
134
+ if (firstBlock) {
135
+ maxFileSize = pd.ProgressBarMaximum ?? 0;
136
+ setWaitPanelMaxValueSecondary(maxFileSize);
137
+ firstBlock = false;
138
+ }
139
+ setWaitPanelValueSecondary(pd.ProgressBarValue);
140
+ setWaitPanelTextSecondary(`Uploading... ${Globalization.getNumberDisplayValue(pd.ProgressBarValue, true)} / ${Globalization.getNumberDisplayValue(maxFileSize, true)}`);
141
+ if (pd.ProgressBarValue === pd.ProgressBarMaximum) {
142
+ setWaitPanelMaxValueSecondary(0);
143
+ setWaitPanelValueSecondary(0);
144
+ setWaitPanelTextSecondary('');
145
+ firstBlock = true;
146
+ }
147
+ });
148
+ }
149
+ setWaitPanelValuePrimary(i + 1);
150
+ result.push({ rowIndex: i, id1: inputDcmts[i].TID, id2: inputDcmts[i].DID, resultType: ResultTypes.SUCCESS });
151
+ }
152
+ catch (ex) {
153
+ result.push({ rowIndex: i, id1: inputDcmts[i].TID, id2: inputDcmts[i].DID, resultType: ResultTypes.ERROR, description: getExceptionMessage(ex) });
154
+ const err = ex;
155
+ if (err.name === 'CanceledError') {
156
+ ShowAlert({ message: err.message, mode: 'warning', duration: 3000, title: 'Abort' });
157
+ }
158
+ }
159
+ }
160
+ setWaitPanelTextPrimary('');
161
+ setWaitPanelMaxValuePrimary(0);
162
+ setWaitPanelValuePrimary(0);
163
+ setWaitPanelTextSecondary('');
164
+ setWaitPanelMaxValueSecondary(0);
165
+ setWaitPanelValueSecondary(0);
166
+ actionAfterOperationAsync?.();
167
+ setShowWaitPanel(false);
168
+ TMResultManager.show(result, operationTitle, "TID", "DID");
169
+ };
170
+ const getDcmtFileAsync = async (inputDcmt, rfo, operationTitle, keepWaitPanelPrimary) => {
171
+ if (inputDcmt?.TID === undefined)
172
+ return;
173
+ if (inputDcmt?.DID === undefined)
174
+ return;
175
+ const cacheKey = `${inputDcmt.TID}-${inputDcmt.DID}`;
176
+ if (dcmtsFileCachePreview.has(cacheKey))
177
+ return { file: dcmtsFileCachePreview.get(cacheKey), isFromCache: true };
178
+ setShowWaitPanel(true);
179
+ setShowPrimary(keepWaitPanelPrimary);
180
+ setShowSecondary(true);
181
+ setWaitPanelTitle(operationTitle);
182
+ abortController = new AbortController();
183
+ let firstBlock = true;
184
+ let maxFileSize = 0;
185
+ try {
186
+ setWaitPanelTextSecondary(extensionHandler(inputDcmt.FILEEXT ?? '') === FileExtensionHandler.CONVERTIBLE ? 'Conversione file in corso...' : 'Recupero file in corso...');
187
+ const file = await SDK_Globals.tmSession?.NewSearchEngine().RetrieveFileAsync(inputDcmt?.TID, inputDcmt?.DID, rfo, abortController.signal, (pd) => {
188
+ if (firstBlock) {
189
+ maxFileSize = pd.ProgressBarMaximum ?? 0;
190
+ setWaitPanelMaxValueSecondary(maxFileSize);
191
+ firstBlock = false;
192
+ }
193
+ setWaitPanelValueSecondary(pd.ProgressBarValue);
194
+ setWaitPanelTextSecondary(`Downloading... ${Globalization.getNumberDisplayValue(pd.ProgressBarValue, true)} / ${Globalization.getNumberDisplayValue(maxFileSize, true)}`);
195
+ if (pd.ProgressBarValue === pd.ProgressBarMaximum) {
196
+ setWaitPanelMaxValueSecondary(0);
197
+ setWaitPanelValueSecondary(0);
198
+ setWaitPanelTextSecondary('');
199
+ firstBlock = true;
200
+ }
201
+ });
202
+ if (dcmtsFileCachePreview.size >= CACHE_SIZE_LIMIT) {
203
+ const oldestKey = dcmtsFileCachePreview.keys().next().value;
204
+ dcmtsFileCachePreview.delete(oldestKey);
205
+ }
206
+ dcmtsFileCachePreview.set(cacheKey, file);
207
+ return { file: file, isFromCache: false };
208
+ }
209
+ finally {
210
+ setWaitPanelTextSecondary('');
211
+ setWaitPanelMaxValueSecondary(0);
212
+ setWaitPanelValueSecondary(0);
213
+ setShowWaitPanel(false);
214
+ }
215
+ };
216
+ const clearDcmtsFileCache = () => dcmtsFileCachePreview.clear();
217
+ const removeDcmtsFileCache = (key) => dcmtsFileCachePreview.delete(key);
218
+ const isDcmtFileInCache = (key) => dcmtsFileCachePreview.has(key);
219
+ const getDisplayValueMetadataValueDescriptor = async (mvd) => {
220
+ if (!mvd)
221
+ return undefined;
222
+ if (FormulaHelper.isFormula(mvd.value))
223
+ return mvd.value;
224
+ if (mvd.isNull)
225
+ return "'NULL'";
226
+ if (!mvd.value)
227
+ return undefined;
228
+ if (mvd.md?.dataDomain === MetadataDataDomains.DataList) {
229
+ let dl = await DataListCacheService.GetAsync(mvd.md.dataListID);
230
+ let description = dl?.items?.find(o => o.value === mvd.value)?.name;
231
+ return (description && mvd.value !== description) ? `${description} (${mvd.value})` : mvd.value;
232
+ }
233
+ else {
234
+ switch (mvd.md?.dataType) {
235
+ case MetadataDataTypes.DateTime: return Globalization.getDateTimeDisplayValue(mvd.value, undefined, mvd.md.format?.format);
236
+ case MetadataDataTypes.Number: return mvd.value;
237
+ default: return mvd.value;
238
+ }
239
+ }
240
+ };
241
+ const runOperationAsync = async (inputDcmts, dcmtOperationType, actionAfterOperationAsync) => {
242
+ if (inputDcmts === undefined)
243
+ return;
244
+ if (inputDcmts.length <= 0)
245
+ return;
246
+ let operationTitle = LocalizeDcmtOperationTypes(dcmtOperationType);
247
+ let msg = "";
248
+ switch (dcmtOperationType) {
249
+ case DcmtOperationTypes.BatchUpdate:
250
+ msg = `I documenti selezionati (${inputDcmts.length}) verranno modificati con i seguenti valori: <br><br>`;
251
+ for (const mvd of inputDcmts[0]?.metadataValues?.filter(o => o.isSelected) ?? []) {
252
+ let displayValue = await getDisplayValueMetadataValueDescriptor(mvd);
253
+ msg += `${mvd.md?.nameLoc}: <b>${displayValue}</b><br>`;
254
+ }
255
+ msg += "<br>Le modifiche apportate non potranno essere più annullate.<br><br>Continuare?";
256
+ break;
257
+ default: {
258
+ switch (inputDcmts.length) {
259
+ case 0: return;
260
+ default:
261
+ msg = `${inputDcmts.length} documento/i selezionato/i. Confermare l'operazione?`;
262
+ break;
263
+ }
264
+ break;
265
+ }
266
+ }
267
+ const doOperationAsync = async () => {
268
+ if (dcmtOperationType == DcmtOperationTypes.SubstituteFile) {
269
+ await uploadDcmtsAsync(inputDcmts, operationTitle, undefined, actionAfterOperationAsync);
270
+ return;
271
+ }
272
+ setShowWaitPanel(true);
273
+ setShowPrimary(true);
274
+ setShowSecondary(false);
275
+ setWaitPanelTitle(operationTitle);
276
+ abortController = new AbortController();
277
+ let result = [];
278
+ setWaitPanelMaxValuePrimary(inputDcmts.length);
279
+ for (let i = 0; i < inputDcmts.length; i++) {
280
+ if (abortController.signal.aborted) {
281
+ result.push({ rowIndex: i, id1: inputDcmts[i].TID, id2: inputDcmts[i].DID, resultType: ResultTypes.WARNING, description: `Operazione interrotta. Elaborati ${i + 1} documenti` });
282
+ break;
283
+ }
284
+ setWaitPanelTextPrimary(`Documento ${i + 1} di ${inputDcmts.length}`);
285
+ try {
286
+ switch (dcmtOperationType) {
287
+ case DcmtOperationTypes.AddToFavs:
288
+ await SDK_Globals.tmSession?.NewFavoritesEngine().AddOrRemoveDcmtAsync(inputDcmts[i].TID, inputDcmts[i].DID, false);
289
+ break;
290
+ case DcmtOperationTypes.BatchUpdate: {
291
+ let ue = SDK_Globals.tmSession?.NewUpdateEngineByID();
292
+ if (ue) {
293
+ ue.TID = inputDcmts[i].TID;
294
+ ue.DID = inputDcmts[i].DID;
295
+ ue.Metadata_ClearAll();
296
+ for (let metadata of inputDcmts[i].metadataValues?.filter(o => o.isSelected) ?? []) {
297
+ if (metadata.isNull)
298
+ ue.Metadata_AddNull(metadata.mid);
299
+ else if (FormulaHelper.isFormula(metadata.value))
300
+ ue.Metadata_AddString(metadata.mid, metadata.value);
301
+ else {
302
+ switch (metadata.md?.dataType) {
303
+ case MetadataDataTypes.DateTime:
304
+ ue.Metadata_AddDateTime(metadata.mid, new Date(metadata.value));
305
+ break;
306
+ case MetadataDataTypes.Number:
307
+ ue.Metadata_AddNumber(metadata.mid, metadata.value);
308
+ break;
309
+ case MetadataDataTypes.Varchar:
310
+ ue.Metadata_AddString(metadata.mid, metadata.value);
311
+ break;
312
+ default: ue.Metadata_AddNull(metadata.mid);
313
+ }
314
+ }
315
+ }
316
+ await ue.UpdateAsync();
317
+ }
318
+ break;
319
+ }
320
+ case DcmtOperationTypes.CheckFile:
321
+ await SDK_Globals.tmSession?.NewSearchEngine().CheckFileAsync(inputDcmts[i].TID, inputDcmts[i].DID);
322
+ break;
323
+ case DcmtOperationTypes.ConvertFile: {
324
+ let ue = SDK_Globals.tmSession?.NewUpdateEngineByID();
325
+ if (ue) {
326
+ ue.TID = inputDcmts[i].TID;
327
+ ue.DID = inputDcmts[i].DID;
328
+ await ue.ConvertFileAsync(inputDcmts[i].fileFormat);
329
+ }
330
+ break;
331
+ }
332
+ case DcmtOperationTypes.FreeSearchReindex:
333
+ await SDK_Globals.tmSession?.NewSearchEngine().FreeSearchReindexDcmtAsync(inputDcmts[i].TID, inputDcmts[i].DID);
334
+ break;
335
+ case DcmtOperationTypes.FreeSearchPurge:
336
+ await SDK_Globals.tmSession?.NewSearchEngine().FreeSearchPurgeDcmtAsync(inputDcmts[i].TID, inputDcmts[i].DID);
337
+ break;
338
+ case DcmtOperationTypes.LogDelete:
339
+ await SDK_Globals.tmSession?.NewDeleteEngine().LogDeleteByIDAsync(inputDcmts[i].TID, inputDcmts[i].DID);
340
+ break;
341
+ case DcmtOperationTypes.PhysDelete:
342
+ await SDK_Globals.tmSession?.NewDeleteEngine().PhysDeleteByIDAsync(inputDcmts[i].TID, inputDcmts[i].DID, true);
343
+ break;
344
+ case DcmtOperationTypes.RemoveFromFavs:
345
+ await SDK_Globals.tmSession?.NewFavoritesEngine().AddOrRemoveDcmtAsync(inputDcmts[i].TID, inputDcmts[i].DID, true);
346
+ break;
347
+ case DcmtOperationTypes.RemoveFromRecents:
348
+ await SDK_Globals.tmSession?.NewRecentEngine().AddOrRemoveDcmtAsync(inputDcmts[i].TID, inputDcmts[i].DID, inputDcmts[i].Category ?? RecentCategories.None, true);
349
+ break;
350
+ case DcmtOperationTypes.Undelete:
351
+ await SDK_Globals.tmSession?.NewDeleteEngine().UndeleteByIDAsync(inputDcmts[i].TID, inputDcmts[i].DID);
352
+ break;
353
+ case DcmtOperationTypes.VerifySign: {
354
+ let ue = SDK_Globals.tmSession?.NewUpdateEngineByID();
355
+ if (ue) {
356
+ ue.TID = inputDcmts[i].TID;
357
+ ue.DID = inputDcmts[i].DID;
358
+ await ue.VerifySignAsync();
359
+ }
360
+ break;
361
+ }
362
+ }
363
+ result.push({ rowIndex: i, id1: inputDcmts[i].TID, id2: inputDcmts[i].DID, resultType: ResultTypes.SUCCESS });
364
+ }
365
+ catch (ex) {
366
+ result.push({ rowIndex: i, id1: inputDcmts[i].TID, id2: inputDcmts[i].DID, resultType: ResultTypes.ERROR, description: getExceptionMessage(ex) });
367
+ const err = ex;
368
+ if (err.name === 'CanceledError') {
369
+ ShowAlert({ message: err.message, mode: 'warning', duration: 3000, title: 'Abort' });
370
+ }
371
+ }
372
+ setWaitPanelValuePrimary(i + 1);
373
+ }
374
+ setWaitPanelMaxValuePrimary(0);
375
+ setWaitPanelValuePrimary(0);
376
+ setWaitPanelTextPrimary('');
377
+ setShowWaitPanel(false);
378
+ actionAfterOperationAsync?.();
379
+ TMResultManager.show(result, operationTitle, "TID", "DID");
380
+ };
381
+ dialogConfirmOperation(operationTitle, msg, doOperationAsync);
382
+ };
383
+ return {
384
+ abortController, showWaitPanel, showPrimary, waitPanelTitle, waitPanelTextPrimary, waitPanelValuePrimary, waitPanelMaxValuePrimary, showSecondary, waitPanelTextSecondary, waitPanelValueSecondary, waitPanelMaxValueSecondary,
385
+ downloadDcmtsAsync, getDcmtFileAsync, clearDcmtsFileCache, removeDcmtsFileCache, isDcmtFileInCache, runOperationAsync
386
+ };
387
+ }
@@ -0,0 +1,5 @@
1
+ import { FileFormats } from '@topconsultnpm/sdk-ts-beta';
2
+ export declare const useInputCvtFormatDialog: () => [() => Promise<FileFormats>, () => JSX.Element];
3
+ export declare const useFileDialog: () => {
4
+ OpenFileDialog: () => Promise<File | undefined>;
5
+ };
@@ -0,0 +1,73 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { useEffect, useState } from "react";
3
+ import { FileFormats } from '@topconsultnpm/sdk-ts-beta';
4
+ import { TMModal, TMRadioButton, TMButton } from "../components";
5
+ import { SDKUI_Localizator, IconApply, IconCloseOutline } from "../helper";
6
+ import { TMColors } from "../utils/theme";
7
+ const formats = [
8
+ { value: FileFormats.PDF, display: FileFormats.PDF.toString() },
9
+ { value: FileFormats.PDFA_1A, display: FileFormats.PDFA_1A.toString() },
10
+ { value: FileFormats.PDFA_1B, display: FileFormats.PDFA_1B.toString() }
11
+ ];
12
+ export const useInputCvtFormatDialog = () => {
13
+ const [promise, setPromise] = useState(null);
14
+ const [open, setOpen] = useState(false);
15
+ const handleClose = () => {
16
+ setOpen(false);
17
+ setPromise(null);
18
+ };
19
+ const handleConfirm = (format) => {
20
+ promise?.resolve(format);
21
+ handleClose();
22
+ };
23
+ const handleCancel = () => {
24
+ promise?.resolve(FileFormats.None);
25
+ handleClose();
26
+ };
27
+ const ConfirmFormatDialog = () => {
28
+ const [format, setFormat] = useState(FileFormats.PDF);
29
+ return (open ?
30
+ _jsx(TMModal, { title: SDKUI_Localizator.Format, height: "max-content", width: "260px", onClose: handleClose, children: _jsxs("div", { style: { display: 'flex', flexDirection: 'column', gap: '5px', padding: '10px', height: '100%' }, children: [_jsx(TMRadioButton, { dataSource: formats, direction: 'column', value: format, onValueChanged: (newValue) => { setFormat(newValue); } }), _jsxs("div", { style: { display: 'flex', flexDirection: 'row', gap: '5px', paddingTop: '10px', justifyContent: 'center', alignItems: 'center', height: '50px' }, children: [_jsx(TMButton, { btnStyle: "advanced", showTooltip: false, icon: _jsx(IconApply, {}), caption: "OK", advancedColor: TMColors.tertiary, onClick: () => handleConfirm(format) }), _jsx(TMButton, { btnStyle: "advanced", showTooltip: false, icon: _jsx(IconCloseOutline, {}), caption: SDKUI_Localizator.Cancel, onClick: handleCancel })] })] }) })
31
+ : _jsx(_Fragment, {}));
32
+ };
33
+ const confirmFormat = () => new Promise((resolve, reject) => {
34
+ setOpen(true);
35
+ setPromise({ resolve });
36
+ });
37
+ return [confirmFormat, ConfirmFormatDialog];
38
+ };
39
+ export const useFileDialog = () => {
40
+ const [promise, setPromise] = useState(null);
41
+ useEffect(() => {
42
+ if (!promise)
43
+ return;
44
+ const input = document.createElement('input');
45
+ input.type = 'file';
46
+ // input.multiple = _options.multiple as boolean;
47
+ // input.accept = _options.accept as string;
48
+ input.onchange = (e) => {
49
+ const file = e.target?.files?.[0];
50
+ if (!file) {
51
+ handleCancel();
52
+ return;
53
+ }
54
+ handleConfirm(file);
55
+ };
56
+ input.click();
57
+ }, [promise]);
58
+ const handleClose = () => {
59
+ setPromise(null);
60
+ };
61
+ const handleConfirm = (file) => {
62
+ promise?.resolve(file);
63
+ handleClose();
64
+ };
65
+ const handleCancel = () => {
66
+ promise?.resolve(undefined);
67
+ handleClose();
68
+ };
69
+ const OpenFileDialog = () => new Promise((resolve, reject) => {
70
+ setPromise({ resolve });
71
+ });
72
+ return { OpenFileDialog };
73
+ };
@@ -0,0 +1,3 @@
1
+ import { RefObject } from "react";
2
+ declare const usePreventFileDrop: (allowedDropZones: RefObject<HTMLElement>[]) => void;
3
+ export default usePreventFileDrop;
@@ -0,0 +1,37 @@
1
+ import { useEffect } from "react";
2
+ const usePreventFileDrop = (allowedDropZones) => {
3
+ useEffect(() => {
4
+ const isOverAllowedZone = (event) => allowedDropZones.some((ref) => ref.current?.contains(event.target));
5
+ const handleDragOver = (event) => {
6
+ if (!isOverAllowedZone(event)) {
7
+ event.preventDefault();
8
+ event.dataTransfer.dropEffect = "none";
9
+ }
10
+ };
11
+ const handleDragEnter = (event) => {
12
+ if (!isOverAllowedZone(event)) {
13
+ document.body.style.cursor = "not-allowed";
14
+ }
15
+ };
16
+ const handleDragLeave = () => {
17
+ document.body.style.cursor = "default";
18
+ };
19
+ const handleDrop = (event) => {
20
+ if (!isOverAllowedZone(event)) {
21
+ event.preventDefault();
22
+ document.body.style.cursor = "default";
23
+ }
24
+ };
25
+ document.addEventListener("dragover", handleDragOver);
26
+ document.addEventListener("dragenter", handleDragEnter);
27
+ document.addEventListener("dragleave", handleDragLeave);
28
+ document.addEventListener("drop", handleDrop);
29
+ return () => {
30
+ document.removeEventListener("dragover", handleDragOver);
31
+ document.removeEventListener("dragenter", handleDragEnter);
32
+ document.removeEventListener("dragleave", handleDragLeave);
33
+ document.removeEventListener("drop", handleDrop);
34
+ };
35
+ }, [allowedDropZones]);
36
+ };
37
+ export default usePreventFileDrop;
package/lib/index.d.ts CHANGED
@@ -1,5 +1,4 @@
1
1
  export * from './ts';
2
- export * from './components';
3
2
  export * from './helper';
4
3
  export * from './utils/theme';
5
4
  export * from './hooks/useForm';
package/lib/index.js CHANGED
@@ -1,5 +1,4 @@
1
1
  export * from './ts';
2
- export * from './components';
3
2
  export * from './helper';
4
3
  export * from './utils/theme';
5
4
  export * from './hooks/useForm';
@@ -4,7 +4,7 @@ export declare class PlatformObjectService {
4
4
  static readonly retrieveAllAsync: (objClass: ObjectClasses, jobType?: JobTypes) => Promise<DcmtTypeDescriptor[] | import("@topconsultnpm/sdk-ts-beta").UserDescriptor[] | import("@topconsultnpm/sdk-ts-beta").FEDistillerJobDescriptor[] | import("@topconsultnpm/sdk-ts-beta").AreaDescriptor[] | import("@topconsultnpm/sdk-ts-beta").DataListDescriptor[] | import("@topconsultnpm/sdk-ts-beta").DiskDescriptor[] | import("@topconsultnpm/sdk-ts-beta").GroupDescriptor[] | import("@topconsultnpm/sdk-ts-beta").LDAPDescriptor[] | import("@topconsultnpm/sdk-ts-beta").NumeratorDescriptor[] | import("@topconsultnpm/sdk-ts-beta").SignCertDescriptor[] | import("@topconsultnpm/sdk-ts-beta").SignServerDescriptor[] | import("@topconsultnpm/sdk-ts-beta").TreeDescriptor[] | import("@topconsultnpm/sdk-ts-beta").TSADescriptor[] | ProcessDescriptor[] | import("@topconsultnpm/sdk-ts-beta").TaskDescriptor[] | undefined>;
5
5
  private static readonly loadCacheForJobAsync;
6
6
  private static readonly retrieveAdminJobAsync;
7
- static readonly retrieveAdminAsync: (objClass: ObjectClasses, jobType: JobTypes, id: number) => Promise<DcmtTypeDescriptor | -1 | import("@topconsultnpm/sdk-ts-beta").DataListDescriptor | import("@topconsultnpm/sdk-ts-beta").UserDescriptor | import("@topconsultnpm/sdk-ts-beta").BarcodeArchiverJobDescriptor | import("@topconsultnpm/sdk-ts-beta").BatchUpdaterJobDescriptor | import("@topconsultnpm/sdk-ts-beta").CassettoDoganaleJobDescriptor | import("@topconsultnpm/sdk-ts-beta").CassettoDoganalePlusJobDescriptor | import("@topconsultnpm/sdk-ts-beta").CassettoFiscaleQueryJobDescriptor | import("@topconsultnpm/sdk-ts-beta").CassettoFiscaleSenderJobDescriptor | import("@topconsultnpm/sdk-ts-beta").CheckSequenceJobDescriptor | import("@topconsultnpm/sdk-ts-beta").COSCheckerJobDescriptor | import("@topconsultnpm/sdk-ts-beta").DcmtConverterJobDescriptor | import("@topconsultnpm/sdk-ts-beta").DcmtDeleterJobDescriptor | import("@topconsultnpm/sdk-ts-beta").DcmtNoteJobDescriptor | import("@topconsultnpm/sdk-ts-beta").DcmtPrinterJobDescriptor | import("@topconsultnpm/sdk-ts-beta").FEAttacherJobDescriptor | import("@topconsultnpm/sdk-ts-beta").FECreatorTxtJobDescriptor | import("@topconsultnpm/sdk-ts-beta").FEDetacherJobDescriptor | import("@topconsultnpm/sdk-ts-beta").FEDistillerJobDescriptor | import("@topconsultnpm/sdk-ts-beta").FESenderWsJobDescriptor | import("@topconsultnpm/sdk-ts-beta").FESplitterJobDescriptor | import("@topconsultnpm/sdk-ts-beta").FEValidatorJobDescriptor | import("@topconsultnpm/sdk-ts-beta").FileArchiverJobDescriptor | import("@topconsultnpm/sdk-ts-beta").FileCheckerJobDescriptor | import("@topconsultnpm/sdk-ts-beta").FileExecJobDescriptor | import("@topconsultnpm/sdk-ts-beta").FileExportJobDescriptor | import("@topconsultnpm/sdk-ts-beta").FileMoverJobDescriptor | import("@topconsultnpm/sdk-ts-beta").LexJobDescriptor | import("@topconsultnpm/sdk-ts-beta").LinkerJobDescriptor | import("@topconsultnpm/sdk-ts-beta").MailArchiverJobDescriptor | import("@topconsultnpm/sdk-ts-beta").MailQueryJobDescriptor | import("@topconsultnpm/sdk-ts-beta").MailSenderJobDescriptor | import("@topconsultnpm/sdk-ts-beta").MigrationJobDescriptor | import("@topconsultnpm/sdk-ts-beta").PdDCreatorJobDescriptor | import("@topconsultnpm/sdk-ts-beta").PDFArchiverJobDescriptor | import("@topconsultnpm/sdk-ts-beta").PdVArchiverJobDescriptor | import("@topconsultnpm/sdk-ts-beta").PdVQueryJobDescriptor | import("@topconsultnpm/sdk-ts-beta").PdVSenderJobDescriptor | import("@topconsultnpm/sdk-ts-beta").PeppolQueryJobDescriptor | import("@topconsultnpm/sdk-ts-beta").PeppolSenderJobDescriptor | import("@topconsultnpm/sdk-ts-beta").PostelQueryJobDescriptor | import("@topconsultnpm/sdk-ts-beta").PostelSenderJobDescriptor | import("@topconsultnpm/sdk-ts-beta").ReplicatorJobDescriptor | import("@topconsultnpm/sdk-ts-beta").SAPAlignerJobDescriptor | import("@topconsultnpm/sdk-ts-beta").SAPBarcodeJobDescriptor | import("@topconsultnpm/sdk-ts-beta").SAPDataReaderJobDescriptor | import("@topconsultnpm/sdk-ts-beta").SAPDataWriterJobDescriptor | import("@topconsultnpm/sdk-ts-beta").SignerJobDescriptor | import("@topconsultnpm/sdk-ts-beta").SpoolArchiverJobDescriptor | import("@topconsultnpm/sdk-ts-beta").UpdaterJobDescriptor | import("@topconsultnpm/sdk-ts-beta").AreaDescriptor | import("@topconsultnpm/sdk-ts-beta").BasketTypeDescriptor | import("@topconsultnpm/sdk-ts-beta").DiskDescriptor | import("@topconsultnpm/sdk-ts-beta").GroupDescriptor | import("@topconsultnpm/sdk-ts-beta").LDAPDescriptor | import("@topconsultnpm/sdk-ts-beta").NumeratorDescriptor | import("@topconsultnpm/sdk-ts-beta").SignCertDescriptor | import("@topconsultnpm/sdk-ts-beta").SignServerDescriptor | import("@topconsultnpm/sdk-ts-beta").TreeDescriptor | import("@topconsultnpm/sdk-ts-beta").TSADescriptor | ProcessDescriptor | import("@topconsultnpm/sdk-ts-beta").TaskDescriptor | import("@topconsultnpm/sdk-ts-beta").SavedQueryDescriptor | import("@topconsultnpm/sdk-ts-beta").WorkingGroupDescriptor | undefined>;
7
+ static readonly retrieveAdminAsync: (objClass: ObjectClasses, jobType: JobTypes, id: number) => Promise<-1 | DcmtTypeDescriptor | import("@topconsultnpm/sdk-ts-beta").SavedQueryDescriptor | import("@topconsultnpm/sdk-ts-beta").DataListDescriptor | import("@topconsultnpm/sdk-ts-beta").UserDescriptor | import("@topconsultnpm/sdk-ts-beta").BarcodeArchiverJobDescriptor | import("@topconsultnpm/sdk-ts-beta").BatchUpdaterJobDescriptor | import("@topconsultnpm/sdk-ts-beta").CassettoDoganaleJobDescriptor | import("@topconsultnpm/sdk-ts-beta").CassettoDoganalePlusJobDescriptor | import("@topconsultnpm/sdk-ts-beta").CassettoFiscaleQueryJobDescriptor | import("@topconsultnpm/sdk-ts-beta").CassettoFiscaleSenderJobDescriptor | import("@topconsultnpm/sdk-ts-beta").CheckSequenceJobDescriptor | import("@topconsultnpm/sdk-ts-beta").COSCheckerJobDescriptor | import("@topconsultnpm/sdk-ts-beta").DcmtConverterJobDescriptor | import("@topconsultnpm/sdk-ts-beta").DcmtDeleterJobDescriptor | import("@topconsultnpm/sdk-ts-beta").DcmtNoteJobDescriptor | import("@topconsultnpm/sdk-ts-beta").DcmtPrinterJobDescriptor | import("@topconsultnpm/sdk-ts-beta").FEAttacherJobDescriptor | import("@topconsultnpm/sdk-ts-beta").FECreatorTxtJobDescriptor | import("@topconsultnpm/sdk-ts-beta").FEDetacherJobDescriptor | import("@topconsultnpm/sdk-ts-beta").FEDistillerJobDescriptor | import("@topconsultnpm/sdk-ts-beta").FESenderWsJobDescriptor | import("@topconsultnpm/sdk-ts-beta").FESplitterJobDescriptor | import("@topconsultnpm/sdk-ts-beta").FEValidatorJobDescriptor | import("@topconsultnpm/sdk-ts-beta").FileArchiverJobDescriptor | import("@topconsultnpm/sdk-ts-beta").FileCheckerJobDescriptor | import("@topconsultnpm/sdk-ts-beta").FileExecJobDescriptor | import("@topconsultnpm/sdk-ts-beta").FileExportJobDescriptor | import("@topconsultnpm/sdk-ts-beta").FileMoverJobDescriptor | import("@topconsultnpm/sdk-ts-beta").LexJobDescriptor | import("@topconsultnpm/sdk-ts-beta").LinkerJobDescriptor | import("@topconsultnpm/sdk-ts-beta").MailArchiverJobDescriptor | import("@topconsultnpm/sdk-ts-beta").MailQueryJobDescriptor | import("@topconsultnpm/sdk-ts-beta").MailSenderJobDescriptor | import("@topconsultnpm/sdk-ts-beta").MigrationJobDescriptor | import("@topconsultnpm/sdk-ts-beta").PdDCreatorJobDescriptor | import("@topconsultnpm/sdk-ts-beta").PDFArchiverJobDescriptor | import("@topconsultnpm/sdk-ts-beta").PdVArchiverJobDescriptor | import("@topconsultnpm/sdk-ts-beta").PdVQueryJobDescriptor | import("@topconsultnpm/sdk-ts-beta").PdVSenderJobDescriptor | import("@topconsultnpm/sdk-ts-beta").PeppolQueryJobDescriptor | import("@topconsultnpm/sdk-ts-beta").PeppolSenderJobDescriptor | import("@topconsultnpm/sdk-ts-beta").PostelQueryJobDescriptor | import("@topconsultnpm/sdk-ts-beta").PostelSenderJobDescriptor | import("@topconsultnpm/sdk-ts-beta").ReplicatorJobDescriptor | import("@topconsultnpm/sdk-ts-beta").SAPAlignerJobDescriptor | import("@topconsultnpm/sdk-ts-beta").SAPBarcodeJobDescriptor | import("@topconsultnpm/sdk-ts-beta").SAPDataReaderJobDescriptor | import("@topconsultnpm/sdk-ts-beta").SAPDataWriterJobDescriptor | import("@topconsultnpm/sdk-ts-beta").SignerJobDescriptor | import("@topconsultnpm/sdk-ts-beta").SpoolArchiverJobDescriptor | import("@topconsultnpm/sdk-ts-beta").UpdaterJobDescriptor | import("@topconsultnpm/sdk-ts-beta").AreaDescriptor | import("@topconsultnpm/sdk-ts-beta").BasketTypeDescriptor | import("@topconsultnpm/sdk-ts-beta").DiskDescriptor | import("@topconsultnpm/sdk-ts-beta").GroupDescriptor | import("@topconsultnpm/sdk-ts-beta").LDAPDescriptor | import("@topconsultnpm/sdk-ts-beta").NumeratorDescriptor | import("@topconsultnpm/sdk-ts-beta").SignCertDescriptor | import("@topconsultnpm/sdk-ts-beta").SignServerDescriptor | import("@topconsultnpm/sdk-ts-beta").TreeDescriptor | import("@topconsultnpm/sdk-ts-beta").TSADescriptor | ProcessDescriptor | import("@topconsultnpm/sdk-ts-beta").TaskDescriptor | import("@topconsultnpm/sdk-ts-beta").WorkingGroupDescriptor | undefined>;
8
8
  private static readonly updateJobAsync;
9
9
  static readonly updateAsync: (objClass: ObjectClasses, jobType: JobTypes, d: any) => Promise<number | undefined>;
10
10
  private static readonly createJobAsync;
package/lib/ts/types.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import { ReactNode } from "react";
2
- import { ITopMediaSession, ValidationItem } from "@topconsultnpm/sdk-ts-beta";
2
+ import { FileFormats, ITopMediaSession, MetadataDescriptor, MetadataValueDescriptor, RecentCategories, ValidationItem } from "@topconsultnpm/sdk-ts-beta";
3
3
  import { ITMEditorBase } from "../components/base/TMEditorBase";
4
4
  import { IColumnProps } from "devextreme-react/cjs/data-grid";
5
5
  export declare enum FormModes {
@@ -15,11 +15,57 @@ export declare enum TMProgressOptions {
15
15
  Finish = 2,
16
16
  NewAbortController = 3
17
17
  }
18
+ export declare enum FileExtensionHandler {
19
+ READY_TO_SHOW = "readyToShow",
20
+ CONVERTIBLE = "convertibleToPdf",
21
+ NONE = "TMNothingToShow"
22
+ }
23
+ export declare enum DcmtOperationTypes {
24
+ Download = 0,
25
+ LogDelete = 1,
26
+ Undelete = 2,
27
+ PhysDelete = 3,
28
+ AddToFavs = 4,
29
+ RemoveFromFavs = 5,
30
+ RemoveFromRecents = 6,
31
+ CheckFile = 7,
32
+ ConvertFile = 8,
33
+ VerifySign = 9,
34
+ SubstituteFile = 10,
35
+ FreeSearchReindex = 11,
36
+ FreeSearchPurge = 12,
37
+ BatchUpdate = 13
38
+ }
39
+ export declare enum SearchResultContext {
40
+ METADATA_SEARCH = "metadataSearch",
41
+ WORKFLOW_APPROVE = "workflowApprove",
42
+ FAVORITES = "favorites",
43
+ RECENT = "recent",
44
+ FREE_SEARCH = "freeSearch"
45
+ }
18
46
  export type TID_MID = {
19
47
  tid: number | undefined;
20
48
  mid: number | undefined;
21
49
  aliasTID?: string;
22
50
  };
51
+ export type DcmtInfo = {
52
+ TID: number;
53
+ DID: number;
54
+ Category?: RecentCategories;
55
+ FILEEXT?: string;
56
+ fileFormat?: FileFormats;
57
+ metadataValues?: MetadataValueDescriptorEx[];
58
+ fileName?: string;
59
+ };
60
+ export declare class MetadataValueDescriptorEx extends MetadataValueDescriptor {
61
+ tid?: number;
62
+ md?: MetadataDescriptor;
63
+ isRequired?: string;
64
+ isEditable?: boolean;
65
+ isLexProt?: number;
66
+ isSelected?: boolean;
67
+ isNull?: boolean;
68
+ }
23
69
  export interface ITMSaveFormProps<T> extends ITMSaveFormBaseProps {
24
70
  /** Notifica al parent il nuovo descrittore appena salvato */
25
71
  onSaved?: (newDescriptor: T) => void;
@@ -163,6 +209,13 @@ export interface ITMChooserProps extends ITMEditorBase {
163
209
  onValueChanged?: (value: any) => void;
164
210
  onRefreshCache?: () => void;
165
211
  }
212
+ export interface ITMDcmt {
213
+ tid: number;
214
+ did: number;
215
+ fileExt?: string;
216
+ fileSize?: number;
217
+ fileCount?: number;
218
+ }
166
219
  export declare enum moduleTypes {
167
220
  SDK = "SDK",
168
221
  SDKUI = "SDKUI",