@topconsultnpm/sdkui-react 6.21.0-dev2.8 → 6.21.0-dev3.2

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 (81) hide show
  1. package/lib/components/base/TMAccordionNew.js +1 -0
  2. package/lib/components/base/TMAreaManager.js +19 -3
  3. package/lib/components/base/TMDataGrid.js +2 -2
  4. package/lib/components/base/TMModal.d.ts +1 -0
  5. package/lib/components/base/TMModal.js +2 -2
  6. package/lib/components/base/TMPanel.d.ts +7 -4
  7. package/lib/components/base/TMPanel.js +58 -26
  8. package/lib/components/base/TMTreeView.js +12 -2
  9. package/lib/components/base/TMWaitPanel.d.ts +3 -1
  10. package/lib/components/base/TMWaitPanel.js +14 -9
  11. package/lib/components/choosers/TMDistinctValues.js +35 -21
  12. package/lib/components/choosers/TMUserChooser.d.ts +4 -0
  13. package/lib/components/choosers/TMUserChooser.js +7 -5
  14. package/lib/components/editors/TMFormulaEditor.d.ts +2 -0
  15. package/lib/components/editors/TMFormulaEditor.js +75 -21
  16. package/lib/components/editors/TMMetadataValues.js +2 -1
  17. package/lib/components/editors/TMRadioButton.js +7 -5
  18. package/lib/components/editors/TMTextBox.d.ts +2 -0
  19. package/lib/components/editors/TMTextBox.js +3 -3
  20. package/lib/components/features/archive/TMArchive.js +1 -1
  21. package/lib/components/features/documents/TMCopyToFolderForm.d.ts +24 -0
  22. package/lib/components/features/documents/TMCopyToFolderForm.js +401 -0
  23. package/lib/components/features/documents/TMDcmtForm.d.ts +1 -0
  24. package/lib/components/features/documents/TMDcmtForm.js +126 -38
  25. package/lib/components/features/documents/TMDcmtFormActionButtons.js +17 -2
  26. package/lib/components/features/documents/TMDcmtPreview.d.ts +1 -0
  27. package/lib/components/features/documents/TMDcmtPreview.js +2 -2
  28. package/lib/components/features/documents/TMDcmtTasks.d.ts +1 -0
  29. package/lib/components/features/documents/TMDcmtTasks.js +2 -2
  30. package/lib/components/features/documents/TMDownloadRelationViewerSection.d.ts +23 -0
  31. package/lib/components/features/documents/TMDownloadRelationViewerSection.js +173 -0
  32. package/lib/components/features/documents/TMFileUploader.js +1 -1
  33. package/lib/components/features/documents/TMMasterDetailDcmts.d.ts +2 -0
  34. package/lib/components/features/documents/TMMasterDetailDcmts.js +28 -9
  35. package/lib/components/features/documents/TMMergeToPdfForm.d.ts +24 -0
  36. package/lib/components/features/documents/TMMergeToPdfForm.js +309 -0
  37. package/lib/components/features/documents/TMRelationViewer.d.ts +13 -0
  38. package/lib/components/features/documents/TMRelationViewer.js +75 -6
  39. package/lib/components/features/documents/copyAndMergeDcmtsShared.d.ts +71 -0
  40. package/lib/components/features/documents/copyAndMergeDcmtsShared.js +304 -0
  41. package/lib/components/features/search/SignatureParamsManager.d.ts +70 -0
  42. package/lib/components/features/search/SignatureParamsManager.js +145 -0
  43. package/lib/components/features/search/TMSavedQuerySelector.d.ts +2 -2
  44. package/lib/components/features/search/TMSavedQuerySelector.js +3 -2
  45. package/lib/components/features/search/TMSearch.d.ts +4 -1
  46. package/lib/components/features/search/TMSearch.js +16 -10
  47. package/lib/components/features/search/TMSearchQueryPanel.js +1 -1
  48. package/lib/components/features/search/TMSearchResult.d.ts +2 -0
  49. package/lib/components/features/search/TMSearchResult.js +117 -22
  50. package/lib/components/features/workflow/diagram/queryDescriptorParser.js +3 -6
  51. package/lib/components/forms/Login/TMLoginForm.d.ts +9 -0
  52. package/lib/components/forms/Login/TMLoginForm.js +61 -0
  53. package/lib/components/forms/TMResultDialog.d.ts +1 -1
  54. package/lib/components/forms/TMResultDialog.js +4 -2
  55. package/lib/components/index.d.ts +1 -0
  56. package/lib/components/index.js +1 -0
  57. package/lib/components/pages/TMPage.js +3 -1
  58. package/lib/components/query/TMQueryEditor.js +1 -1
  59. package/lib/components/viewers/TMTidViewer.js +1 -1
  60. package/lib/helper/MergePdfManager.d.ts +45 -0
  61. package/lib/helper/MergePdfManager.js +145 -0
  62. package/lib/helper/SDKUI_Globals.d.ts +15 -0
  63. package/lib/helper/SDKUI_Globals.js +15 -1
  64. package/lib/helper/SDKUI_Localizator.d.ts +107 -2
  65. package/lib/helper/SDKUI_Localizator.js +1070 -12
  66. package/lib/helper/TMPdfViewer.js +25 -24
  67. package/lib/helper/TMUtils.d.ts +1 -0
  68. package/lib/helper/TMUtils.js +17 -0
  69. package/lib/helper/ZipManager.d.ts +56 -0
  70. package/lib/helper/ZipManager.js +127 -0
  71. package/lib/helper/index.d.ts +1 -0
  72. package/lib/helper/index.js +1 -0
  73. package/lib/hooks/useDataUserIdItem.js +6 -4
  74. package/lib/hooks/useDcmtOperations.d.ts +9 -2
  75. package/lib/hooks/useDcmtOperations.js +77 -34
  76. package/lib/hooks/useDocumentOperations.d.ts +3 -0
  77. package/lib/hooks/useDocumentOperations.js +233 -24
  78. package/lib/hooks/useForm.js +5 -2
  79. package/lib/hooks/useResizeObserver.d.ts +1 -1
  80. package/lib/hooks/useResizeObserver.js +16 -15
  81. package/package.json +4 -2
@@ -0,0 +1,145 @@
1
+ // ============================================================================
2
+ // LAZY LOADING - Carica pdf-lib solo quando necessario
3
+ // ============================================================================
4
+ let pdfLibLoaded = false;
5
+ const loadPdfLib = async () => {
6
+ const module = await import('pdf-lib');
7
+ pdfLibLoaded = true;
8
+ return module;
9
+ };
10
+ // ============================================================================
11
+ // MERGE PDF MANAGER - Utility per unire PDF lato client
12
+ // ============================================================================
13
+ export class MergePdfManager {
14
+ /**
15
+ * Merge principale - Unisce array di File PDF in uno solo
16
+ */
17
+ static async merge(files, options = {}) {
18
+ if (!files?.length) {
19
+ throw new Error('MergePdfManager.merge: nessun file fornito.');
20
+ }
21
+ try {
22
+ // Carica pdf-lib on-demand
23
+ const { PDFDocument } = await loadPdfLib();
24
+ const mergedPdf = await PDFDocument.create();
25
+ let totalPages = 0;
26
+ // Itera su ogni file e copia le pagine nel documento finale
27
+ for (let i = 0; i < files.length; i++) {
28
+ const file = files[i];
29
+ try {
30
+ const buffer = await file.arrayBuffer();
31
+ const pdf = await PDFDocument.load(buffer);
32
+ // Copia tutte le pagine dal PDF sorgente
33
+ const pages = await mergedPdf.copyPages(pdf, pdf.getPageIndices());
34
+ pages.forEach(page => mergedPdf.addPage(page));
35
+ totalPages += pages.length;
36
+ // Notifica progresso
37
+ options.onProgress?.(i + 1, files.length, file);
38
+ }
39
+ catch (fileError) {
40
+ const errorMessage = fileError instanceof Error ? fileError.message : String(fileError);
41
+ throw new Error(`Errore processamento file "${file.name}" (${i}): ${errorMessage}`);
42
+ }
43
+ }
44
+ if (totalPages === 0) {
45
+ throw new Error('Nessuna pagina valida trovata.');
46
+ }
47
+ // Salva il PDF unito
48
+ const outBytes = await mergedPdf.save();
49
+ // Converte Uint8Array in ArrayBuffer per il Blob
50
+ const pdfBuffer = outBytes.buffer.slice(outBytes.byteOffset, outBytes.byteOffset + outBytes.byteLength);
51
+ const blob = new Blob([pdfBuffer], { type: 'application/pdf' });
52
+ return { bytes: outBytes, blob, pageCount: totalPages };
53
+ }
54
+ catch (error) {
55
+ const errorMessage = error instanceof Error ? error.message : String(error);
56
+ throw new Error(`MergePdfManager.merge: ${errorMessage}`);
57
+ }
58
+ }
59
+ /**
60
+ * Merge -> File - Restituisce un oggetto File
61
+ */
62
+ static async mergeToFile(files, fileName = 'merged.pdf', options = {}) {
63
+ try {
64
+ const { blob } = await this.merge(files, options);
65
+ return new File([blob], fileName, { type: 'application/pdf' });
66
+ }
67
+ catch (error) {
68
+ const errorMessage = error instanceof Error ? error.message : String(error);
69
+ throw new Error(`MergePdfManager.mergeToFile: ${errorMessage}`);
70
+ }
71
+ }
72
+ /**
73
+ * Merge + Download - Unisce e scarica automaticamente
74
+ */
75
+ static async mergeAndDownload(files, fileName = 'merged.pdf', options = {}) {
76
+ let url = null;
77
+ try {
78
+ const result = await this.merge(files, options);
79
+ url = URL.createObjectURL(result.blob);
80
+ // Crea link temporaneo per download
81
+ const a = document.createElement('a');
82
+ a.href = url;
83
+ a.download = fileName;
84
+ document.body.appendChild(a);
85
+ a.click();
86
+ a.remove();
87
+ return result;
88
+ }
89
+ catch (error) {
90
+ const errorMessage = error instanceof Error ? error.message : String(error);
91
+ throw new Error(`MergePdfManager.mergeAndDownload: ${errorMessage}`);
92
+ }
93
+ finally {
94
+ // Rilascia URL dopo un breve delay
95
+ if (url)
96
+ setTimeout(() => URL.revokeObjectURL(url), 1000);
97
+ }
98
+ }
99
+ /**
100
+ * Blob -> Base64 - Converte un Blob in stringa Base64
101
+ */
102
+ static blobToBase64(blob) {
103
+ return new Promise((resolve, reject) => {
104
+ const reader = new FileReader();
105
+ reader.onloadend = () => {
106
+ if (typeof reader.result === 'string') {
107
+ resolve(reader.result);
108
+ }
109
+ else {
110
+ reject(new Error('Impossibile convertire il blob in base64.'));
111
+ }
112
+ };
113
+ reader.onerror = () => reject(new Error('Errore durante la lettura del blob.'));
114
+ reader.readAsDataURL(blob);
115
+ });
116
+ }
117
+ /**
118
+ * Merge -> Base64 - Unisce e restituisce anche la stringa Base64
119
+ */
120
+ static async mergeToBase64(files, options = {}) {
121
+ try {
122
+ const result = await this.merge(files, options);
123
+ const base64 = await this.blobToBase64(result.blob);
124
+ return { ...result, base64 };
125
+ }
126
+ catch (error) {
127
+ const errorMessage = error instanceof Error ? error.message : String(error);
128
+ throw new Error(`MergePdfManager.mergeToBase64: ${errorMessage}`);
129
+ }
130
+ }
131
+ /**
132
+ * Merge per Preview - Restituisce solo base64 e pageCount per anteprima
133
+ */
134
+ static async mergeForPreview(files, options = {}) {
135
+ try {
136
+ const result = await this.mergeToBase64(files, options);
137
+ return { base64: result.base64, pageCount: result.pageCount };
138
+ }
139
+ catch (error) {
140
+ const errorMessage = error instanceof Error ? error.message : String(error);
141
+ throw new Error(`MergePdfManager.mergeForPreview: ${errorMessage}`);
142
+ }
143
+ }
144
+ }
145
+ export default MergePdfManager;
@@ -1,5 +1,19 @@
1
1
  import { InvoiceRetrieveFormats, ObjectClasses, OrderRetrieveFormats } from "@topconsultnpm/sdk-ts";
2
2
  import { CheckoutInfo } from "./checkinCheckoutManager";
3
+ export type FileNamingMode = 'onlyDid' | 'documentTypeAndDid' | 'documentTypeAndCustomMetadata' | 'onlyCustomMetadata';
4
+ export type FileExistsMode = 'overwrite' | 'skip' | 'rename';
5
+ export declare class DocumentDownloadSettings {
6
+ exportMode: 'copy' | 'zip';
7
+ destinationFolder: string;
8
+ zipFileName: string;
9
+ zipPassword: string;
10
+ fileNamingMode: FileNamingMode;
11
+ separatorChar: string;
12
+ invoiceFormat: InvoiceRetrieveFormats;
13
+ orderFormat: OrderRetrieveFormats;
14
+ fileExistsMode: FileExistsMode;
15
+ removeSignature: boolean;
16
+ }
3
17
  export declare const dcmtsFileCacheDownload: Map<string, File>;
4
18
  export declare const dcmtsFileCachePreview: Map<string, File>;
5
19
  export declare const CACHE_SIZE_LIMIT = 10;
@@ -22,6 +36,7 @@ export declare class UserSettings {
22
36
  wgDraftCheckoutInfo: CheckoutInfo[];
23
37
  dcmtCheckoutInfo: CheckoutInfo[];
24
38
  defaultCheckInOutFolder: string;
39
+ documentDownloadSettings: DocumentDownloadSettings;
25
40
  constructor(skipCssUpdate?: boolean);
26
41
  /** Load settings from local storage or other sources */
27
42
  static LoadSettings(userID: number | undefined, archiveID: string | undefined): UserSettings;
@@ -1,6 +1,19 @@
1
1
  import { InvoiceRetrieveFormats, LocalStorageService, OrderRetrieveFormats } from "@topconsultnpm/sdk-ts";
2
2
  import { FontSize } from "../utils/theme";
3
- // import { LandingPages } from "./helpers";
3
+ export class DocumentDownloadSettings {
4
+ constructor() {
5
+ this.exportMode = 'copy';
6
+ this.destinationFolder = 'Download';
7
+ this.zipFileName = '';
8
+ this.zipPassword = '';
9
+ this.fileNamingMode = 'documentTypeAndDid';
10
+ this.separatorChar = '_';
11
+ this.invoiceFormat = InvoiceRetrieveFormats.ASW_HTML;
12
+ this.orderFormat = OrderRetrieveFormats.NSO_HTML;
13
+ this.fileExistsMode = 'overwrite';
14
+ this.removeSignature = false;
15
+ }
16
+ }
4
17
  export const dcmtsFileCacheDownload = new Map();
5
18
  export const dcmtsFileCachePreview = new Map();
6
19
  export const CACHE_SIZE_LIMIT = 10;
@@ -24,6 +37,7 @@ export class UserSettings {
24
37
  this.wgDraftCheckoutInfo = [];
25
38
  this.dcmtCheckoutInfo = [];
26
39
  this.defaultCheckInOutFolder = DEFAULT_CHECK_IN_OUT_FOLDER;
40
+ this.documentDownloadSettings = new DocumentDownloadSettings();
27
41
  this.themeSettings = new ThemeSettings(skipCssUpdate);
28
42
  }
29
43
  /** Load settings from local storage or other sources */