@topconsultnpm/sdkui-react 6.21.0-dev2.32 → 6.21.0-dev2.34

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 (32) hide show
  1. package/lib/components/editors/TMTextBox.d.ts +2 -0
  2. package/lib/components/editors/TMTextBox.js +3 -3
  3. package/lib/components/features/documents/TMCopyToFolderForm.d.ts +16 -0
  4. package/lib/components/features/documents/TMCopyToFolderForm.js +306 -0
  5. package/lib/components/features/documents/TMDownloadRelationViewerSection.d.ts +15 -0
  6. package/lib/components/features/documents/TMDownloadRelationViewerSection.js +155 -0
  7. package/lib/components/features/documents/TMMasterDetailDcmts.d.ts +4 -0
  8. package/lib/components/features/documents/TMMasterDetailDcmts.js +6 -5
  9. package/lib/components/features/documents/TMMergeToPdfForm.d.ts +18 -0
  10. package/lib/components/features/documents/TMMergeToPdfForm.js +164 -0
  11. package/lib/components/features/documents/TMRelationViewer.d.ts +13 -0
  12. package/lib/components/features/documents/TMRelationViewer.js +75 -6
  13. package/lib/components/features/documents/copyAndMergeDcmtsShared.d.ts +53 -0
  14. package/lib/components/features/documents/copyAndMergeDcmtsShared.js +263 -0
  15. package/lib/components/features/search/TMSearch.d.ts +2 -0
  16. package/lib/components/features/search/TMSearch.js +2 -2
  17. package/lib/components/features/search/TMSearchResult.d.ts +2 -0
  18. package/lib/components/features/search/TMSearchResult.js +3 -2
  19. package/lib/components/forms/Login/TMLoginForm.d.ts +9 -0
  20. package/lib/components/forms/Login/TMLoginForm.js +44 -0
  21. package/lib/helper/SDKUI_Globals.d.ts +16 -0
  22. package/lib/helper/SDKUI_Globals.js +16 -1
  23. package/lib/helper/TMUtils.d.ts +19 -0
  24. package/lib/helper/ZipManager.d.ts +56 -0
  25. package/lib/helper/ZipManager.js +104 -0
  26. package/lib/helper/index.d.ts +1 -0
  27. package/lib/helper/index.js +1 -0
  28. package/lib/hooks/useDcmtOperations.d.ts +8 -2
  29. package/lib/hooks/useDcmtOperations.js +29 -20
  30. package/lib/hooks/useDocumentOperations.d.ts +4 -0
  31. package/lib/hooks/useDocumentOperations.js +75 -7
  32. package/package.json +2 -1
@@ -0,0 +1,104 @@
1
+ import { BlobReader, BlobWriter, TextReader, Uint8ArrayReader, ZipWriter, configure } from "@zip.js/zip.js";
2
+ // ============================================================================
3
+ // ZIP MANAGER CLASS
4
+ // ============================================================================
5
+ /**
6
+ * Utility per creare file ZIP con password opzionale (AES-256).
7
+ * Tutti i metodi sono statici.
8
+ */
9
+ export class ZipManager {
10
+ /** Configura zip.js (useWebWorkers, maxWorkers) */
11
+ static configure(options) {
12
+ configure(options);
13
+ }
14
+ // ========================================================================
15
+ // CREAZIONE ZIP
16
+ // ========================================================================
17
+ /** Crea ZIP da array di file */
18
+ static async createZip(files, options = {}) {
19
+ const { password, compressionLevel = 6, encryptionStrength = 3, comment, onProgress, onEntryProgress, signal } = options;
20
+ // Validazione password: stringa vuota = nessuna cifratura
21
+ const usePassword = typeof password === "string" && password.length > 0 ? password : undefined;
22
+ const blobWriter = new BlobWriter("application/zip");
23
+ const zipWriter = new ZipWriter(blobWriter, { password: usePassword, zipCrypto: true });
24
+ try {
25
+ const total = files.length;
26
+ for (let i = 0; i < files.length; i++) {
27
+ if (signal?.aborted) {
28
+ throw new DOMException("Operazione annullata", "AbortError");
29
+ }
30
+ const file = files[i];
31
+ onProgress?.(i + 1, total, file.filename);
32
+ const reader = this.createReader(file.data);
33
+ await zipWriter.add(file.filename, reader, {
34
+ comment: file.comment,
35
+ lastModDate: file.lastModDate,
36
+ signal,
37
+ password: usePassword,
38
+ encryptionStrength,
39
+ onprogress: onEntryProgress ? (progress, total) => onEntryProgress(progress, total) : undefined
40
+ });
41
+ }
42
+ const commentBytes = comment ? new TextEncoder().encode(comment) : undefined;
43
+ return await zipWriter.close(commentBytes);
44
+ }
45
+ catch (error) {
46
+ try {
47
+ await zipWriter.close();
48
+ }
49
+ catch { /* ignora */ }
50
+ throw error;
51
+ }
52
+ }
53
+ /** Crea ZIP da singolo file */
54
+ static async createZipFromFile(filename, data, options = {}) {
55
+ return this.createZip([{ filename, data }], options);
56
+ }
57
+ /** Crea ZIP da oggetto { nomeFile: contenuto } */
58
+ static async createZipFromMap(filesMap, options = {}) {
59
+ const files = Object.entries(filesMap).map(([filename, data]) => ({ filename, data }));
60
+ return this.createZip(files, options);
61
+ }
62
+ // ========================================================================
63
+ // DOWNLOAD
64
+ // ========================================================================
65
+ /** Crea ZIP e avvia download */
66
+ static async createAndDownload(files, downloadFilename, options = {}) {
67
+ const blob = await this.createZip(files, options);
68
+ this.downloadBlob(blob, downloadFilename);
69
+ }
70
+ /** Scarica un Blob come file */
71
+ static downloadBlob(blob, filename) {
72
+ const url = URL.createObjectURL(blob);
73
+ const link = document.createElement("a");
74
+ link.href = url;
75
+ link.download = filename;
76
+ link.style.display = "none";
77
+ document.body.appendChild(link);
78
+ link.click();
79
+ document.body.removeChild(link);
80
+ setTimeout(() => URL.revokeObjectURL(url), 100);
81
+ }
82
+ /** Crea URL temporaneo per Blob (ricordarsi revokeObjectURL!) */
83
+ static createObjectURL(blob) {
84
+ return URL.createObjectURL(blob);
85
+ }
86
+ /** Rilascia URL creato con createObjectURL */
87
+ static revokeObjectURL(url) {
88
+ URL.revokeObjectURL(url);
89
+ }
90
+ // ========================================================================
91
+ // PRIVATE
92
+ // ========================================================================
93
+ /** Converte data nel reader appropriato per zip.js */
94
+ static createReader(data) {
95
+ if (typeof data === "string")
96
+ return new TextReader(data);
97
+ if (data instanceof Uint8Array)
98
+ return new Uint8ArrayReader(data);
99
+ if (data instanceof ArrayBuffer)
100
+ return new Uint8ArrayReader(new Uint8Array(data));
101
+ return new BlobReader(data);
102
+ }
103
+ }
104
+ export default ZipManager;
@@ -15,3 +15,4 @@ export * from './GlobalStyles';
15
15
  export * from './checkinCheckoutManager';
16
16
  export * from './workItemsHelper';
17
17
  export * from './devextremeCustomMessages';
18
+ export * from './ZipManager';
@@ -15,3 +15,4 @@ export * from './GlobalStyles';
15
15
  export * from './checkinCheckoutManager';
16
16
  export * from './workItemsHelper';
17
17
  export * from './devextremeCustomMessages';
18
+ export * from './ZipManager';
@@ -1,5 +1,11 @@
1
- import { RetrieveFileOptions, FileDescriptor } from '@topconsultnpm/sdk-ts';
1
+ import { RetrieveFileOptions, DcmtOpers, FileDescriptor, GeneralRetrieveFormats, InvoiceRetrieveFormats, OrderRetrieveFormats } from '@topconsultnpm/sdk-ts';
2
2
  import { DcmtInfo, DcmtOperationTypes, DownloadModes, DownloadTypes } from '../ts';
3
+ export interface RetrieveFormatOptions {
4
+ retrieveReason?: DcmtOpers;
5
+ generalRetrieveFormat?: GeneralRetrieveFormats;
6
+ invoiceRetrieveFormat?: InvoiceRetrieveFormats;
7
+ orderRetrieveFormat?: OrderRetrieveFormats;
8
+ }
3
9
  export interface UseDcmtOperationsReturn {
4
10
  abortController: AbortController;
5
11
  showWaitPanel: boolean;
@@ -12,7 +18,7 @@ export interface UseDcmtOperationsReturn {
12
18
  waitPanelTextSecondary: string;
13
19
  waitPanelValueSecondary: number;
14
20
  waitPanelMaxValueSecondary: number;
15
- downloadDcmtsAsync: (inputDcmts: DcmtInfo[] | undefined, downloadType?: DownloadTypes, downloadMode?: DownloadModes, onFileDownloaded?: (dcmtFile: File) => void, confirmAttachments?: (list: FileDescriptor[]) => Promise<string[] | undefined>, skipConfirmation?: boolean) => Promise<void>;
21
+ downloadDcmtsAsync: (inputDcmts: DcmtInfo[] | undefined, downloadType?: DownloadTypes, downloadMode?: DownloadModes, onFileDownloaded?: (dcmtFile: File, dcmtInfo: DcmtInfo) => void | Promise<void>, confirmAttachments?: (list: FileDescriptor[]) => Promise<string[] | undefined>, skipConfirmation?: boolean, retrieveOptions?: RetrieveFormatOptions, useCache?: boolean) => Promise<void>;
16
22
  getDcmtFileAsync: (inputDcmt: DcmtInfo | undefined, rfo: RetrieveFileOptions, operationTitle: string, keepWaitPanelPrimary: boolean, bypassCache?: boolean) => Promise<{
17
23
  file: File | undefined;
18
24
  isFromCache: boolean;
@@ -42,7 +42,7 @@ export const useDcmtOperations = () => {
42
42
  const [waitPanelMaxValueSecondary, setWaitPanelMaxValueSecondary] = useState(0);
43
43
  const { OpenFileDialog } = useFileDialog();
44
44
  const [selectFileSource, FileSourceDialog] = useFileSourceDialog();
45
- const _downloadDcmtsAsync = async (inputDcmts, downloadMode = "download", onFileDownloaded, skipConfirmation = false) => {
45
+ const _downloadDcmtsAsync = async (inputDcmts, downloadMode = "download", onFileDownloaded, skipConfirmation = false, retrieveOptions, useCache = true) => {
46
46
  if (inputDcmts === undefined)
47
47
  return;
48
48
  if (inputDcmts.length <= 0)
@@ -72,9 +72,11 @@ export const useDcmtOperations = () => {
72
72
  setWaitPanelTitle(operationTitle);
73
73
  abortController = new AbortController();
74
74
  const rfo = new RetrieveFileOptions();
75
- rfo.retrieveReason = DcmtOpers.ShowFile;
76
- rfo.invoiceRetrieveFormat = SDKUI_Globals.userSettings.searchSettings.invoiceRetrieveFormat;
77
- rfo.orderRetrieveFormat = SDKUI_Globals.userSettings.searchSettings.orderRetrieveFormat;
75
+ rfo.retrieveReason = retrieveOptions?.retrieveReason ?? DcmtOpers.ShowFile;
76
+ if (retrieveOptions?.generalRetrieveFormat !== undefined)
77
+ rfo.generalRetrieveFormat = retrieveOptions.generalRetrieveFormat;
78
+ rfo.invoiceRetrieveFormat = retrieveOptions?.invoiceRetrieveFormat ?? SDKUI_Globals.userSettings.searchSettings.invoiceRetrieveFormat;
79
+ rfo.orderRetrieveFormat = retrieveOptions?.orderRetrieveFormat ?? SDKUI_Globals.userSettings.searchSettings.orderRetrieveFormat;
78
80
  let result = [];
79
81
  setWaitPanelMaxValuePrimary(inputDcmts.length);
80
82
  let firstBlock = true;
@@ -88,7 +90,7 @@ export const useDcmtOperations = () => {
88
90
  setWaitPanelTextPrimary(`Download file ${i + 1} di ${inputDcmts.length}`);
89
91
  let file;
90
92
  const cacheKey = `${inputDcmts[i].TID}-${inputDcmts[i].DID}`;
91
- if (dcmtsFileCacheDownload.has(cacheKey)) {
93
+ if (useCache && dcmtsFileCacheDownload.has(cacheKey)) {
92
94
  file = dcmtsFileCacheDownload.get(cacheKey);
93
95
  }
94
96
  else {
@@ -112,23 +114,30 @@ export const useDcmtOperations = () => {
112
114
  const fileURL = window.URL.createObjectURL(file);
113
115
  if (downloadMode === "openInNewWindow") {
114
116
  (onFileDownloaded && file)
115
- ? onFileDownloaded(file)
117
+ ? onFileDownloaded(file, inputDcmts[i])
116
118
  : window.open(fileURL, '_blank', 'noopener');
117
119
  }
118
120
  else {
119
- const alink2 = document.createElement('a');
120
- alink2.href = fileURL;
121
- const baseFileName = inputDcmts[i].fileName ?? (inputDcmts[i].FILEEXT ? `${inputDcmts[i].DID}.${inputDcmts[i].FILEEXT}` : file?.name);
122
- alink2.download = getDownloadFileName(baseFileName);
123
- alink2.target = "_blank";
124
- alink2.rel = "noreferrer";
125
- alink2.click();
121
+ if (onFileDownloaded && file) {
122
+ await onFileDownloaded(file, inputDcmts[i]);
123
+ }
124
+ else {
125
+ const alink2 = document.createElement('a');
126
+ alink2.href = fileURL;
127
+ const baseFileName = inputDcmts[i].fileName ?? (inputDcmts[i].FILEEXT ? `${inputDcmts[i].DID}.${inputDcmts[i].FILEEXT}` : file?.name);
128
+ alink2.download = getDownloadFileName(baseFileName);
129
+ alink2.target = "_blank";
130
+ alink2.rel = "noreferrer";
131
+ alink2.click();
132
+ }
126
133
  }
127
- if (dcmtsFileCacheDownload.size >= CACHE_SIZE_LIMIT) {
128
- const oldestKey = dcmtsFileCacheDownload.keys().next().value;
129
- dcmtsFileCacheDownload.delete(oldestKey);
134
+ if (useCache) {
135
+ if (dcmtsFileCacheDownload.size >= CACHE_SIZE_LIMIT) {
136
+ const oldestKey = dcmtsFileCacheDownload.keys().next().value;
137
+ dcmtsFileCacheDownload.delete(oldestKey);
138
+ }
139
+ dcmtsFileCacheDownload.set(cacheKey, file);
130
140
  }
131
- dcmtsFileCacheDownload.set(cacheKey, file);
132
141
  result.push({ rowIndex: i, id1: inputDcmts[i].TID, id2: inputDcmts[i].DID, resultType: ResultTypes.SUCCESS });
133
142
  }
134
143
  catch (ex) {
@@ -208,11 +217,11 @@ export const useDcmtOperations = () => {
208
217
  TMExceptionBoxManager.show({ exception: err });
209
218
  }
210
219
  };
211
- const downloadDcmtsAsync = async (inputDcmts, downloadType = DownloadTypes.Attachment, downloadMode = "download", onFileDownloaded, confirmAttachments, skipConfirmation = false) => {
220
+ const downloadDcmtsAsync = async (inputDcmts, downloadType = DownloadTypes.Attachment, downloadMode = "download", onFileDownloaded, confirmAttachments, skipConfirmation = false, retrieveOptions, useCache = true) => {
212
221
  switch (downloadType) {
213
- case DownloadTypes.Dcmt: return await _downloadDcmtsAsync(inputDcmts, downloadMode, onFileDownloaded, skipConfirmation);
222
+ case DownloadTypes.Dcmt: return await _downloadDcmtsAsync(inputDcmts, downloadMode, onFileDownloaded, skipConfirmation, retrieveOptions, useCache);
214
223
  case DownloadTypes.Attachment: return await _downloadAttachmentsAsync(inputDcmts, confirmAttachments);
215
- default: return await _downloadDcmtsAsync(inputDcmts, undefined, undefined, skipConfirmation);
224
+ default: return await _downloadDcmtsAsync(inputDcmts, undefined, undefined, skipConfirmation, retrieveOptions, useCache);
216
225
  }
217
226
  };
218
227
  const uploadDcmtsAsync = async (inputDcmts, operationTitle, operType, actionAfterOperationAsync) => {
@@ -6,6 +6,7 @@ import { DcmtInfo, MetadataValueDescriptorEx, SearchResultContext, TaskContext }
6
6
  import { UseCheckInOutOperationsReturn } from "./useCheckInOutOperations";
7
7
  import { UseDcmtOperationsReturn } from "./useDcmtOperations";
8
8
  import { UseRelatedDocumentsReturn } from "./useRelatedDocuments";
9
+ import { MergePdfManagerType } from '../helper';
9
10
  export interface DocumentDataProps {
10
11
  dtd: DcmtTypeDescriptor | undefined;
11
12
  selectedItems: Array<any>;
@@ -38,6 +39,8 @@ export interface DocumentDataProps {
38
39
  s4TViewerDialogComponent?: React.ReactNode;
39
40
  };
40
41
  }
42
+ export type TMCopyToFolderMode = 'onlySelected' | 'customized';
43
+ export type TMCopyToFolderOperationType = 'copyToFolder' | 'mergeToPdf';
41
44
  export interface ExportDataProps {
42
45
  dataColumns?: Array<IColumnProps>;
43
46
  dataSource?: Array<any>;
@@ -97,6 +100,7 @@ interface UseDocumentOperationsProps {
97
100
  tasks: TasksProps;
98
101
  callbacks: OperationCallbacks;
99
102
  exportData?: ExportDataProps;
103
+ mergePdfManager?: MergePdfManagerType;
100
104
  }
101
105
  export interface UseDocumentOperationsResult {
102
106
  operationItems: Array<TMContextMenuItemProps>;
@@ -23,6 +23,8 @@ import { useInputAttachmentsDialog, useInputCvtFormatDialog } from "./useInputDi
23
23
  import { useRelatedDocuments } from "./useRelatedDocuments";
24
24
  import { convertSearchResultDescriptorToFileItems, dcmtsFileCachePreview, getDcmtCicoStatus, getMoreInfoTasksForDocument, IconActivity, IconArchiveDetail, IconArchiveDoc, IconArchiveMaster, IconBatchUpdate, IconCheck, IconCheckFile, IconCheckIn, IconCircleInfo, IconCloseCircle, IconConvertFilePdf, IconCopy, IconCustom, IconDelete, IconDetailDcmts, IconDotsVerticalCircleOutline, IconDownload, IconEdit, IconExportTo, IconFileDots, IconHide, IconInfo, IconMenuCAArchive, IconMoveToFolder, IconPair, IconPin, IconPlatform, IconPreview, IconRelation, IconSearch, IconShare, IconSharedDcmt, IconShow, IconSignaturePencil, IconStar, IconSubstFile, IconUndo, IconUnpair, IconUserGroupOutline, isPdfEditorAvailable, SDKUI_Localizator, searchResultToMetadataValues, TMImageLibrary } from '../helper';
25
25
  import { isXMLFileExt } from "../helper/dcmtsHelper";
26
+ import TMCopyToFolderForm from "../components/features/documents/TMCopyToFolderForm";
27
+ import TMMergeToPdfForm from "../components/features/documents/TMMergeToPdfForm";
26
28
  export const getSelectedDcmtsOrFocused = (selectedItems, focusedItem, fileFormat) => {
27
29
  if (selectedItems.length <= 0 && !focusedItem)
28
30
  return [];
@@ -49,7 +51,7 @@ export const getAllFieldSelectedDcmtsOrFocused = (selectedItems, focusedItem, fi
49
51
  return [];
50
52
  };
51
53
  export const useDocumentOperations = (props) => {
52
- const { context, documentData, exportData, uiConfig, tasks, callbacks, } = props;
54
+ const { context, documentData, exportData, uiConfig, tasks, callbacks, mergePdfManager } = props;
53
55
  const { dtd, selectedItems, focusedItem, searchResult, currentSearchResults, currentMetadataValues, allUsers = [], datagridUtility, dcmtUtility, } = documentData;
54
56
  /** State for managing the document(s) to process */
55
57
  const [selectedDcmtInfos, setSelectedDcmtInfos] = useState([]);
@@ -162,6 +164,8 @@ export const useDocumentOperations = (props) => {
162
164
  const [showMoreInfoPopup, setShowMoreInfoPopup] = useState(false);
163
165
  const [isOpenBatchUpdate, setIsOpenBatchUpdate] = useState(false);
164
166
  const [isModifiedBatchUpdate, setIsModifiedBatchUpdate] = useState(false);
167
+ const [openCopyToFolderForm, setOpenCopyToFolderForm] = useState({ open: false, operationType: 'copyToFolder', mode: 'onlySelected' });
168
+ const [showTMRelationViewerInCopyToFolderForm, setShowTMRelationViewerInCopyToFolderForm] = useState(false);
165
169
  const openDetailDcmtsFormHandler = (value) => { setIsOpenDetails(value); };
166
170
  const openMasterDcmtsFormHandler = (value) => { setIsOpenMaster(value); };
167
171
  // State to control whether the export form (for exporting to Excel/CSV/txt and others) should be shown
@@ -695,6 +699,64 @@ export const useDocumentOperations = (props) => {
695
699
  ]
696
700
  };
697
701
  };
702
+ const mergeToPdfMenuItem = () => {
703
+ return {
704
+ id: 'merge-pdf',
705
+ icon: _jsx("i", { className: "dx-icon-pdffile", style: { fontSize: '18px' } }),
706
+ name: 'Unisci in un file PDF',
707
+ operationType: 'multiRow',
708
+ disabled: isDisabledForMultiRow(),
709
+ submenu: [
710
+ {
711
+ id: 'merge-pdf-only-selected',
712
+ icon: _jsx("i", { className: "dx-icon-pdffile", style: { fontSize: '18px' } }),
713
+ name: 'Solo i documenti selezionati',
714
+ onClick: () => {
715
+ setShowTMRelationViewerInCopyToFolderForm(false);
716
+ setOpenCopyToFolderForm({ open: true, operationType: 'mergeToPdf', mode: 'onlySelected' });
717
+ },
718
+ },
719
+ {
720
+ id: 'merge-pdf-customized',
721
+ icon: _jsx("i", { className: "dx-icon-pdffile", style: { fontSize: '18px' } }),
722
+ name: 'Documenti di primo livello e i correlati selezionati',
723
+ onClick: () => {
724
+ setShowTMRelationViewerInCopyToFolderForm(true);
725
+ setOpenCopyToFolderForm({ open: true, operationType: 'mergeToPdf', mode: 'customized' });
726
+ },
727
+ },
728
+ ],
729
+ };
730
+ };
731
+ const copyToFolderMenuItem = () => {
732
+ return {
733
+ id: 'copy-to-folder',
734
+ icon: _jsx(IconCopy, {}),
735
+ name: 'Copia in una cartella',
736
+ operationType: 'multiRow',
737
+ disabled: isDisabledForMultiRow(),
738
+ submenu: [
739
+ {
740
+ id: 'copy-to-folder-only-selected',
741
+ icon: _jsx(IconCopy, {}),
742
+ name: 'Solo i documenti selezionati',
743
+ onClick: () => {
744
+ setShowTMRelationViewerInCopyToFolderForm(false);
745
+ setOpenCopyToFolderForm({ open: true, operationType: 'copyToFolder', mode: 'onlySelected' });
746
+ },
747
+ },
748
+ {
749
+ id: 'copy-to-folder-customized',
750
+ icon: _jsx(IconCopy, {}),
751
+ name: 'Documenti di primo livello e i correlati selezionati',
752
+ onClick: () => {
753
+ setShowTMRelationViewerInCopyToFolderForm(true);
754
+ setOpenCopyToFolderForm({ open: true, operationType: 'copyToFolder', mode: 'customized', });
755
+ },
756
+ },
757
+ ],
758
+ };
759
+ };
698
760
  const relationsMenuItem = () => {
699
761
  return {
700
762
  id: 'rel',
@@ -1019,6 +1081,8 @@ export const useDocumentOperations = (props) => {
1019
1081
  },
1020
1082
  signatureMenuItem(),
1021
1083
  checkinMenuItem(),
1084
+ copyToFolderMenuItem(),
1085
+ mergePdfManager ? mergeToPdfMenuItem() : null,
1022
1086
  allowRelations ? relationsMenuItem() : null,
1023
1087
  sharedDcmtsMenuItem(),
1024
1088
  // shareMenuItem(),
@@ -1054,6 +1118,8 @@ export const useDocumentOperations = (props) => {
1054
1118
  copyFromWgMenuItem(),
1055
1119
  movetofolderFromWgMenuItem(),
1056
1120
  commentFromWgMenuItem(false),
1121
+ copyToFolderMenuItem(),
1122
+ mergeToPdfMenuItem(),
1057
1123
  removeFromWgMenuItem(SDKUI_Localizator.RemoveFromWorkgroup),
1058
1124
  ];
1059
1125
  return items.sort((a, b) => a.name.localeCompare(b.name));
@@ -1104,6 +1170,8 @@ export const useDocumentOperations = (props) => {
1104
1170
  },
1105
1171
  signatureMenuItem(),
1106
1172
  checkinMenuItem(),
1173
+ copyToFolderMenuItem(),
1174
+ mergeToPdfMenuItem(),
1107
1175
  ...((inputDcmtFormLayoutMode === LayoutModes.Update) ? [fullTextSearchMenuItem()] : []),
1108
1176
  ];
1109
1177
  };
@@ -1136,8 +1204,8 @@ export const useDocumentOperations = (props) => {
1136
1204
  onRefreshBlogDatagrid,
1137
1205
  onRefreshPreviewDatagrid
1138
1206
  } })) }), (showHistory && dtd && selectedDcmtInfos.length > 0) && _jsx(TMViewHistoryDcmt, { fromDTD: dtd, deviceType: deviceType, inputDcmt: selectedDcmtInfos[0], onClose: hideHistoryCallback, allTasks: allTasks, getAllTasks: getAllTasks, deleteTaskByIdsCallback: deleteTaskByIdsCallback, addTaskCallback: addTaskCallback, editTaskCallback: editTaskCallback, handleNavigateToWGs: handleNavigateToWGs, handleNavigateToDossiers: handleNavigateToDossiers }), (commentFormState.show && selectedDcmtInfos.length > 0) && _jsx(TMBlogCommentForm, { context: { engine: 'SearchEngine', object: { tid: selectedDcmtInfos[0].TID, did: selectedDcmtInfos[0].DID } }, onClose: hideCommentFormCallback, refreshCallback: onRefreshBlog, participants: [], showAttachmentsSection: true, allArchivedDocumentsFileItems: convertSearchResultDescriptorToFileItems(currentSearchResults ?? []), isCommentRequired: commentFormState.isRequired, removeAndEditAttachment: commentFormState.removeAndEditAttachment, selectedAttachmentDid: [Number(selectedDcmtInfos[0].DID)] }), (showCheckoutInformationForm && dtd && selectedDcmtInfos.length > 0) &&
1139
- _jsx(TMDcmtCheckoutInfoForm, { dtdName: dtd.name ?? SDKUI_Localizator.SearchResult, selectedDcmtOrFocused: selectedDcmtInfos[0], onClose: hideCheckoutInformationFormCallback }), _jsx(StyledMultiViewPanel, { "$isVisible": isOpenDetails, children: isOpenDetails && _jsx(TMMasterDetailDcmts, { deviceType: deviceType, isForMaster: false, inputDcmts: selectedDcmtInfos, allowNavigation: selectedDcmtInfos.length === 1, canNext: canNavigateHandler ? canNavigateHandler('next') : false, canPrev: canNavigateHandler ? canNavigateHandler('prev') : false, onNext: () => onNavigateHandler && onNavigateHandler('next'), onPrev: () => onNavigateHandler && onNavigateHandler('prev'), onBack: () => setIsOpenDetails(false), allTasks: allTasks, getAllTasks: getAllTasks, deleteTaskByIdsCallback: deleteTaskByIdsCallback, addTaskCallback: addTaskCallback, editTaskCallback: editTaskCallback, handleNavigateToWGs: handleNavigateToWGs, handleNavigateToDossiers: handleNavigateToDossiers, editPdfForm: editPdfForm, openS4TViewer: openS4TViewer, onOpenS4TViewerRequest: onOpenS4TViewerRequest, onOpenPdfEditorRequest: onOpenPdfEditorRequest, onRefreshAfterAddDcmtToFavs: onRefreshAfterAddDcmtToFavs, onTaskCreateRequest: onTaskCreateRequest, datagridUtility: datagridUtility, dcmtUtility: dcmtUtility }) }), _jsxs(StyledMultiViewPanel, { "$isVisible": isOpenMaster, children: [isOpenMaster && _jsx(TMMasterDetailDcmts, { deviceType: deviceType, inputDcmts: selectedDcmtInfos, isForMaster: true, allowNavigation: selectedDcmtInfos.length === 1, canNext: canNavigateHandler ? canNavigateHandler('next') : false, canPrev: canNavigateHandler ? canNavigateHandler('prev') : false, onNext: () => onNavigateHandler && onNavigateHandler('next'), onPrev: () => onNavigateHandler && onNavigateHandler('prev'), onBack: () => setIsOpenMaster(false), appendMasterDcmts: handleAddItem, allTasks: allTasks, getAllTasks: getAllTasks, deleteTaskByIdsCallback: deleteTaskByIdsCallback, addTaskCallback: addTaskCallback, editTaskCallback: editTaskCallback, handleNavigateToWGs: handleNavigateToWGs, handleNavigateToDossiers: handleNavigateToDossiers, editPdfForm: editPdfForm, openS4TViewer: openS4TViewer, onOpenS4TViewerRequest: onOpenS4TViewerRequest, onOpenPdfEditorRequest: onOpenPdfEditorRequest, onRefreshAfterAddDcmtToFavs: onRefreshAfterAddDcmtToFavs, onTaskCreateRequest: onTaskCreateRequest, datagridUtility: datagridUtility, dcmtUtility: dcmtUtility }), secondaryMasterDcmts.length > 0 && secondaryMasterDcmts.map((dcmt, index) => {
1140
- 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, allTasks: allTasks, getAllTasks: getAllTasks, deleteTaskByIdsCallback: deleteTaskByIdsCallback, addTaskCallback: addTaskCallback, editTaskCallback: editTaskCallback, handleNavigateToWGs: handleNavigateToWGs, handleNavigateToDossiers: handleNavigateToDossiers, editPdfForm: editPdfForm, openS4TViewer: openS4TViewer, onOpenS4TViewerRequest: onOpenS4TViewerRequest, onOpenPdfEditorRequest: onOpenPdfEditorRequest, onTaskCreateRequest: onTaskCreateRequest, datagridUtility: datagridUtility, dcmtUtility: dcmtUtility }) }, `${index}-${dcmt.DID}`));
1207
+ _jsx(TMDcmtCheckoutInfoForm, { dtdName: dtd.name ?? SDKUI_Localizator.SearchResult, selectedDcmtOrFocused: selectedDcmtInfos[0], onClose: hideCheckoutInformationFormCallback }), _jsx(StyledMultiViewPanel, { "$isVisible": isOpenDetails, children: isOpenDetails && _jsx(TMMasterDetailDcmts, { deviceType: deviceType, isForMaster: false, inputDcmts: selectedDcmtInfos, allowNavigation: selectedDcmtInfos.length === 1, canNext: canNavigateHandler ? canNavigateHandler('next') : false, canPrev: canNavigateHandler ? canNavigateHandler('prev') : false, onNext: () => onNavigateHandler && onNavigateHandler('next'), onPrev: () => onNavigateHandler && onNavigateHandler('prev'), onBack: () => setIsOpenDetails(false), allTasks: allTasks, getAllTasks: getAllTasks, deleteTaskByIdsCallback: deleteTaskByIdsCallback, addTaskCallback: addTaskCallback, editTaskCallback: editTaskCallback, handleNavigateToWGs: handleNavigateToWGs, handleNavigateToDossiers: handleNavigateToDossiers, editPdfForm: editPdfForm, openS4TViewer: openS4TViewer, onOpenS4TViewerRequest: onOpenS4TViewerRequest, onOpenPdfEditorRequest: onOpenPdfEditorRequest, onRefreshAfterAddDcmtToFavs: onRefreshAfterAddDcmtToFavs, onTaskCreateRequest: onTaskCreateRequest, datagridUtility: datagridUtility, dcmtUtility: dcmtUtility, mergePdfManager: mergePdfManager }) }), _jsxs(StyledMultiViewPanel, { "$isVisible": isOpenMaster, children: [isOpenMaster && _jsx(TMMasterDetailDcmts, { deviceType: deviceType, inputDcmts: selectedDcmtInfos, isForMaster: true, allowNavigation: selectedDcmtInfos.length === 1, canNext: canNavigateHandler ? canNavigateHandler('next') : false, canPrev: canNavigateHandler ? canNavigateHandler('prev') : false, onNext: () => onNavigateHandler && onNavigateHandler('next'), onPrev: () => onNavigateHandler && onNavigateHandler('prev'), onBack: () => setIsOpenMaster(false), appendMasterDcmts: handleAddItem, allTasks: allTasks, getAllTasks: getAllTasks, deleteTaskByIdsCallback: deleteTaskByIdsCallback, addTaskCallback: addTaskCallback, editTaskCallback: editTaskCallback, handleNavigateToWGs: handleNavigateToWGs, handleNavigateToDossiers: handleNavigateToDossiers, editPdfForm: editPdfForm, openS4TViewer: openS4TViewer, onOpenS4TViewerRequest: onOpenS4TViewerRequest, onOpenPdfEditorRequest: onOpenPdfEditorRequest, onRefreshAfterAddDcmtToFavs: onRefreshAfterAddDcmtToFavs, onTaskCreateRequest: onTaskCreateRequest, datagridUtility: datagridUtility, dcmtUtility: dcmtUtility, mergePdfManager: mergePdfManager }), secondaryMasterDcmts.length > 0 && secondaryMasterDcmts.map((dcmt, index) => {
1208
+ 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, allTasks: allTasks, getAllTasks: getAllTasks, deleteTaskByIdsCallback: deleteTaskByIdsCallback, addTaskCallback: addTaskCallback, editTaskCallback: editTaskCallback, handleNavigateToWGs: handleNavigateToWGs, handleNavigateToDossiers: handleNavigateToDossiers, editPdfForm: editPdfForm, openS4TViewer: openS4TViewer, onOpenS4TViewerRequest: onOpenS4TViewerRequest, onOpenPdfEditorRequest: onOpenPdfEditorRequest, onTaskCreateRequest: onTaskCreateRequest, datagridUtility: datagridUtility, dcmtUtility: dcmtUtility, mergePdfManager: mergePdfManager }) }, `${index}-${dcmt.DID}`));
1141
1209
  })] }), isOpenArchiveRelationForm && _jsx(TMDcmtForm, { isModal: true, titleModal: SDKUI_Localizator.Archive + ' - ' + (archiveType === 'detail' ? SDKUI_Localizator.DcmtsDetail : SDKUI_Localizator.DcmtsMaster), TID: archiveRelatedDcmtFormTID, layoutMode: LayoutModes.Ark, inputMids: archiveRelatedDcmtFormMids, showBackButton: false, allowButtonsRefs: false, onClose: () => {
1142
1210
  setIsOpenArchiveRelationForm(false);
1143
1211
  setArchiveType(undefined);
@@ -1182,7 +1250,7 @@ export const useDocumentOperations = (props) => {
1182
1250
  TMSpinner.hide();
1183
1251
  }
1184
1252
  }, onClose: () => setShowManyToManyChooser(false), manageUseLocalizedName: false }), showPairDcmtsModal &&
1185
- _jsx(TMModal, { title: (isPairingManyToMany ? "Abbina" : "Disabbina") + " documenti", onClose: () => setShowPairDcmtsModal(false), width: isMobile ? '90%' : '50%', height: isMobile ? '90%' : '70%', children: _jsx(TMSearchResult, { searchResults: pairedSearchResults, onRefreshAfterAddDcmtToFavs: onRefreshAfterAddDcmtToFavs, onRefreshSearchAsyncDatagrid: onRefreshSearchAsyncDatagrid, onFileOpened: onFileOpened, onTaskCreateRequest: onTaskCreateRequest, openWGsCopyMoveForm: openWGsCopyMoveForm, editPdfForm: editPdfForm, openS4TViewer: openS4TViewer, onOpenS4TViewerRequest: onOpenS4TViewerRequest, onOpenPdfEditorRequest: onOpenPdfEditorRequest, passToArchiveCallback: passToArchiveCallback, showTodoDcmtForm: showTodoDcmtForm, allowFloatingBar: false, floatingActionConfig: pairFloatingActionConfig, showBackButton: false, allTasks: allTasks, getAllTasks: getAllTasks, deleteTaskByIdsCallback: deleteTaskByIdsCallback, addTaskCallback: addTaskCallback, editTaskCallback: editTaskCallback, handleNavigateToWGs: handleNavigateToWGs, handleNavigateToDossiers: handleNavigateToDossiers, toppyHelpCenterUsePortal: toppyHelpCenterUsePortal, showToppyDraggableHelpCenter: showToppyDraggableHelpCenter }) }), showPairSearchModal &&
1253
+ _jsx(TMModal, { title: (isPairingManyToMany ? "Abbina" : "Disabbina") + " documenti", onClose: () => setShowPairDcmtsModal(false), width: isMobile ? '90%' : '50%', height: isMobile ? '90%' : '70%', children: _jsx(TMSearchResult, { searchResults: pairedSearchResults, onRefreshAfterAddDcmtToFavs: onRefreshAfterAddDcmtToFavs, onRefreshSearchAsyncDatagrid: onRefreshSearchAsyncDatagrid, onFileOpened: onFileOpened, onTaskCreateRequest: onTaskCreateRequest, openWGsCopyMoveForm: openWGsCopyMoveForm, editPdfForm: editPdfForm, openS4TViewer: openS4TViewer, onOpenS4TViewerRequest: onOpenS4TViewerRequest, onOpenPdfEditorRequest: onOpenPdfEditorRequest, passToArchiveCallback: passToArchiveCallback, showTodoDcmtForm: showTodoDcmtForm, allowFloatingBar: false, floatingActionConfig: pairFloatingActionConfig, showBackButton: false, allTasks: allTasks, getAllTasks: getAllTasks, deleteTaskByIdsCallback: deleteTaskByIdsCallback, addTaskCallback: addTaskCallback, editTaskCallback: editTaskCallback, handleNavigateToWGs: handleNavigateToWGs, handleNavigateToDossiers: handleNavigateToDossiers, toppyHelpCenterUsePortal: toppyHelpCenterUsePortal, showToppyDraggableHelpCenter: showToppyDraggableHelpCenter, mergePdfManager: mergePdfManager }) }), showPairSearchModal &&
1186
1254
  _jsx(TMModal, { title: "Ricerca documenti", onClose: () => setShowPairSearchModal(false), width: isMobile ? '90%' : '50%', height: isMobile ? '90%' : '70%', children: _jsx(TMSearch, { onlyShowSearchQueryPanel: true, inputTID: pairSearchModalTargetTID, inputMids: pairSearchModalInputMids, floatingActionConfig: pairSearchModalFloatingActionConfig, allTasks: allTasks, getAllTasks: getAllTasks, deleteTaskByIdsCallback: deleteTaskByIdsCallback, addTaskCallback: addTaskCallback, editTaskCallback: editTaskCallback, handleNavigateToWGs: handleNavigateToWGs, handleNavigateToDossiers: handleNavigateToDossiers }) }), isOpenSharedArchive && _jsx(TMModal, { title: SDKUI_Localizator.SharedArchiving, onClose: () => {
1187
1255
  setIsOpenSharedArchive(false);
1188
1256
  }, width: isMobile ? '90%' : '60%', height: isMobile ? '90%' : '80%', children: _jsx(TMArchive, { inputDID: selectedDcmtInfos?.[0].DID, inputTID: selectedDcmtInfos?.[0].TID, inputMids: currentMetadataValues.filter(md => md.mid && md.mid > 100).map(md => ({ mid: md.mid, value: md.value ?? '' })), isSharedArchive: true, inputFile: sharedDcmtFile, onSavedAsyncCallback: async (tid, did) => {
@@ -1191,11 +1259,11 @@ export const useDocumentOperations = (props) => {
1191
1259
  }, allTasks: allTasks, getAllTasks: getAllTasks, deleteTaskByIdsCallback: deleteTaskByIdsCallback, addTaskCallback: addTaskCallback, editTaskCallback: editTaskCallback, handleNavigateToWGs: handleNavigateToWGs, handleNavigateToDossiers: handleNavigateToDossiers }) }), sharedDcmtSearchResults.length > 0 &&
1192
1260
  _jsx(TMModal, { title: "Documenti condivisi", onClose: () => {
1193
1261
  setSharedDcmtSearchResults([]);
1194
- }, width: isMobile ? '90%' : '60%', height: isMobile ? '90%' : '80%', children: _jsx(TMSearchResult, { searchResults: sharedDcmtSearchResults, allowFloatingBar: false, showSelector: true, disableAccordionIfSingleCategory: true, showBackButton: isMobile, allTasks: allTasks, getAllTasks: getAllTasks, deleteTaskByIdsCallback: deleteTaskByIdsCallback, addTaskCallback: addTaskCallback, editTaskCallback: editTaskCallback, handleNavigateToWGs: handleNavigateToWGs, handleNavigateToDossiers: handleNavigateToDossiers }) }), isOpenBatchUpdate && _jsx(TMBatchUpdateForm, { isModal: true, titleModal: `${SDKUI_Localizator.BatchUpdate} (${selectedDcmtInfos.length} documenti selezionati)`, inputDcmts: selectedDcmtInfos, TID: selectedDcmtInfos.length > 0 ? selectedDcmtInfos[0]?.TID : undefined, DID: selectedDcmtInfos.length > 0 ? selectedDcmtInfos[0]?.DID : undefined, onBack: () => updateBatchUpdateForm(false), onSavedCallbackAsync: async () => {
1262
+ }, width: isMobile ? '90%' : '60%', height: isMobile ? '90%' : '80%', children: _jsx(TMSearchResult, { searchResults: sharedDcmtSearchResults, allowFloatingBar: false, showSelector: true, disableAccordionIfSingleCategory: true, showBackButton: isMobile, allTasks: allTasks, getAllTasks: getAllTasks, deleteTaskByIdsCallback: deleteTaskByIdsCallback, addTaskCallback: addTaskCallback, editTaskCallback: editTaskCallback, handleNavigateToWGs: handleNavigateToWGs, handleNavigateToDossiers: handleNavigateToDossiers, mergePdfManager: mergePdfManager }) }), isOpenBatchUpdate && _jsx(TMBatchUpdateForm, { isModal: true, titleModal: `${SDKUI_Localizator.BatchUpdate} (${selectedDcmtInfos.length} documenti selezionati)`, inputDcmts: selectedDcmtInfos, TID: selectedDcmtInfos.length > 0 ? selectedDcmtInfos[0]?.TID : undefined, DID: selectedDcmtInfos.length > 0 ? selectedDcmtInfos[0]?.DID : undefined, onBack: () => updateBatchUpdateForm(false), onSavedCallbackAsync: async () => {
1195
1263
  updateBatchUpdateForm(false);
1196
1264
  setIsModifiedBatchUpdate(false);
1197
1265
  await onRefreshDataRowsAsync?.();
1198
- }, onStatusChanged: (isModified) => { setIsModifiedBatchUpdate(isModified); } }), showApprovePopup && _jsx(WorkFlowApproveRejectPopUp, { deviceType: deviceType, onCompleted: handleWFOperationCompleted, selectedItems: approvalVID ? selectedDcmtInfos.map(item => ({ ...item, TID: approvalVID })) : selectedDcmtInfos, isReject: 0, onClose: () => updateShowApprovePopup(false) }), showRejectPopup && _jsx(WorkFlowApproveRejectPopUp, { deviceType: deviceType, onCompleted: handleWFOperationCompleted, selectedItems: approvalVID ? selectedDcmtInfos.map(item => ({ ...item, TID: approvalVID })) : selectedDcmtInfos, isReject: 1, onClose: () => updateShowRejectPopup(false) }), showReAssignPopup && _jsx(WorkFlowReAssignPopUp, { deviceType: deviceType, onCompleted: handleWFOperationCompleted, selectedItems: approvalVID ? selectedDcmtInfos.map(item => ({ ...item, TID: approvalVID })) : selectedDcmtInfos, onClose: () => updateShowReAssignPopup(false) }), showMoreInfoPopup && _jsx(WorkFlowMoreInfoPopUp, { fromDTD: dtd, TID: contextConfig.approvalTID, DID: focusedItem?.DID, deviceType: deviceType, onCompleted: handleWFOperationCompleted, onClose: () => updateShowMoreInfoPopup(false), allTasks: allTasks, getAllTasks: getAllTasks, deleteTaskByIdsCallback: deleteTaskByIdsCallback, addTaskCallback: addTaskCallback, editTaskCallback: editTaskCallback, handleNavigateToWGs: handleNavigateToWGs, handleNavigateToDossiers: handleNavigateToDossiers, triggerBlogRefresh: onRefreshBlogDatagrid }), _jsx(ConfirmFormatDialog, {}), _jsx(ConfirmAttachmentsDialog, {}), _jsx(FileSourceDialog, {}), taskFormDialogComponent, s4TViewerDialogComponent, currentCustomButton && _jsx(TMCustomButton, { button: currentCustomButton, formData: currentMetadataValues, selectedItems: selectedItemsFull, onClose: () => setCurrentCustomButton(undefined) })] }));
1266
+ }, onStatusChanged: (isModified) => { setIsModifiedBatchUpdate(isModified); } }), showApprovePopup && _jsx(WorkFlowApproveRejectPopUp, { deviceType: deviceType, onCompleted: handleWFOperationCompleted, selectedItems: approvalVID ? selectedDcmtInfos.map(item => ({ ...item, TID: approvalVID })) : selectedDcmtInfos, isReject: 0, onClose: () => updateShowApprovePopup(false) }), showRejectPopup && _jsx(WorkFlowApproveRejectPopUp, { deviceType: deviceType, onCompleted: handleWFOperationCompleted, selectedItems: approvalVID ? selectedDcmtInfos.map(item => ({ ...item, TID: approvalVID })) : selectedDcmtInfos, isReject: 1, onClose: () => updateShowRejectPopup(false) }), showReAssignPopup && _jsx(WorkFlowReAssignPopUp, { deviceType: deviceType, onCompleted: handleWFOperationCompleted, selectedItems: approvalVID ? selectedDcmtInfos.map(item => ({ ...item, TID: approvalVID })) : selectedDcmtInfos, onClose: () => updateShowReAssignPopup(false) }), showMoreInfoPopup && _jsx(WorkFlowMoreInfoPopUp, { fromDTD: dtd, TID: contextConfig.approvalTID, DID: focusedItem?.DID, deviceType: deviceType, onCompleted: handleWFOperationCompleted, onClose: () => updateShowMoreInfoPopup(false), allTasks: allTasks, getAllTasks: getAllTasks, deleteTaskByIdsCallback: deleteTaskByIdsCallback, addTaskCallback: addTaskCallback, editTaskCallback: editTaskCallback, handleNavigateToWGs: handleNavigateToWGs, handleNavigateToDossiers: handleNavigateToDossiers, triggerBlogRefresh: onRefreshBlogDatagrid }), openCopyToFolderForm.open && openCopyToFolderForm.operationType === 'mergeToPdf' && _jsx(TMMergeToPdfForm, { mode: openCopyToFolderForm.mode, selectedDcmtInfos: selectedDcmtInfos, onClose: () => setOpenCopyToFolderForm({ open: false, operationType: 'copyToFolder', mode: 'onlySelected' }), showTMRelationViewer: showTMRelationViewerInCopyToFolderForm, mergePdfManager: mergePdfManager }), openCopyToFolderForm.open && openCopyToFolderForm.operationType === 'copyToFolder' && _jsx(TMCopyToFolderForm, { mode: openCopyToFolderForm.mode, selectedDcmtInfos: selectedDcmtInfos, onClose: () => setOpenCopyToFolderForm({ open: false, operationType: 'copyToFolder', mode: 'onlySelected' }), showTMRelationViewer: showTMRelationViewerInCopyToFolderForm }), _jsx(ConfirmFormatDialog, {}), _jsx(ConfirmAttachmentsDialog, {}), _jsx(FileSourceDialog, {}), taskFormDialogComponent, s4TViewerDialogComponent, currentCustomButton && _jsx(TMCustomButton, { button: currentCustomButton, formData: currentMetadataValues, selectedItems: selectedItemsFull, onClose: () => setCurrentCustomButton(undefined) })] }));
1199
1267
  return {
1200
1268
  operationItems: operationItems(),
1201
1269
  renderFloatingBar,
@@ -1317,6 +1385,6 @@ export const useDocumentOperations = (props) => {
1317
1385
  updateShowReAssignPopup,
1318
1386
  updateShowMoreInfoPopup
1319
1387
  }
1320
- }
1388
+ },
1321
1389
  };
1322
1390
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@topconsultnpm/sdkui-react",
3
- "version": "6.21.0-dev2.32",
3
+ "version": "6.21.0-dev2.34",
4
4
  "description": "",
5
5
  "scripts": {
6
6
  "test": "echo \"Error: no test specified\" && exit 1",
@@ -41,6 +41,7 @@
41
41
  ],
42
42
  "dependencies": {
43
43
  "@topconsultnpm/sdk-ts": "6.21.0-dev2.5",
44
+ "@zip.js/zip.js": "2.8.26",
44
45
  "buffer": "^6.0.3",
45
46
  "devextreme": "^25.2.6",
46
47
  "devextreme-react": "^25.2.6",