@topconsultnpm/sdkui-react 6.21.0-t2 → 6.21.0-t3

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 (151) hide show
  1. package/lib/components/NewComponents/ContextMenu/TMContextMenu.js +22 -1
  2. package/lib/components/NewComponents/ContextMenu/styles.d.ts +4 -4
  3. package/lib/components/NewComponents/FloatingMenuBar/styles.d.ts +6 -6
  4. package/lib/components/base/Styled.d.ts +1 -1
  5. package/lib/components/base/TMAreaManager.js +11 -0
  6. package/lib/components/base/TMCounterBar.d.ts +2 -2
  7. package/lib/components/base/TMCounterContainer.d.ts +2 -1
  8. package/lib/components/base/TMCustomButton.d.ts +1 -1
  9. package/lib/components/base/TMDataGrid.js +12 -2
  10. package/lib/components/base/TMDataGridExportForm.d.ts +2 -1
  11. package/lib/components/base/TMDataGridExportForm.js +19 -8
  12. package/lib/components/base/TMFileManager.d.ts +2 -1
  13. package/lib/components/base/TMFileManagerDataGridView.d.ts +2 -1
  14. package/lib/components/base/TMFileManagerDataGridView.js +4 -4
  15. package/lib/components/base/TMFileManagerThumbnailItems.d.ts +1 -1
  16. package/lib/components/base/TMFileManagerThumbnailItems.js +3 -3
  17. package/lib/components/base/TMFileManagerThumbnailsView.d.ts +1 -1
  18. package/lib/components/base/TMFileManagerUtils.d.ts +7 -0
  19. package/lib/components/base/TMFileManagerUtils.js +14 -1
  20. package/lib/components/base/TMLayout.d.ts +4 -4
  21. package/lib/components/base/TMList.d.ts +2 -1
  22. package/lib/components/base/TMListView.d.ts +1 -1
  23. package/lib/components/base/TMModal.js +2 -2
  24. package/lib/components/base/TMPopUp.d.ts +1 -0
  25. package/lib/components/base/TMPopUp.js +59 -2
  26. package/lib/components/base/TMSpinner.d.ts +5 -2
  27. package/lib/components/base/TMSpinner.js +33 -6
  28. package/lib/components/base/TMTab.d.ts +4 -3
  29. package/lib/components/base/TMTooltip.d.ts +1 -1
  30. package/lib/components/base/TMTreeView.d.ts +1 -1
  31. package/lib/components/base/TMTreeView.js +12 -15
  32. package/lib/components/base/TMUserAvatar.d.ts +2 -1
  33. package/lib/components/base/TMVilViewer.d.ts +2 -1
  34. package/lib/components/base/TMWaitPanel.d.ts +5 -2
  35. package/lib/components/base/TMWaitPanel.js +8 -6
  36. package/lib/components/choosers/TMDynDataListItemChooser.d.ts +1 -1
  37. package/lib/components/choosers/TMDynDataListItemChooser.js +6 -1
  38. package/lib/components/choosers/TMGroupChooser.js +1 -1
  39. package/lib/components/choosers/TMInvoiceRetrieveFormats.d.ts +2 -1
  40. package/lib/components/choosers/TMOrderRetrieveFormats.d.ts +2 -1
  41. package/lib/components/choosers/TMRelationChooser.d.ts +3 -3
  42. package/lib/components/choosers/TMUserChooser.d.ts +2 -2
  43. package/lib/components/editors/TMEditorStyled.d.ts +6 -6
  44. package/lib/components/editors/TMFormulaEditor.d.ts +2 -1
  45. package/lib/components/editors/TMFormulaEditor.js +98 -49
  46. package/lib/components/editors/TMHtmlContentDisplay.d.ts +2 -1
  47. package/lib/components/editors/TMHtmlEditor.d.ts +2 -1
  48. package/lib/components/editors/TMMetadataEditor.js +6 -2
  49. package/lib/components/editors/TMMetadataValues.js +23 -6
  50. package/lib/components/editors/TMTreeDropDown.d.ts +1 -1
  51. package/lib/components/features/assistant/TMToppyDraggableHelpCenter.d.ts +1 -1
  52. package/lib/components/features/blog/TMBlogCommentForm.d.ts +2 -1
  53. package/lib/components/features/blog/TMBlogCommentForm.js +5 -2
  54. package/lib/components/features/documents/TMCopyToFolderForm.js +46 -24
  55. package/lib/components/features/documents/TMDcmtForm.js +19 -9
  56. package/lib/components/features/documents/TMDcmtFormActionButtons.d.ts +1 -1
  57. package/lib/components/features/documents/TMDcmtIcon.d.ts +2 -1
  58. package/lib/components/features/documents/TMDcmtIcon.js +1 -1
  59. package/lib/components/features/documents/TMDcmtPreview.d.ts +1 -1
  60. package/lib/components/features/documents/TMDcmtTasks.d.ts +2 -1
  61. package/lib/components/features/documents/TMDragDropOverlay.d.ts +1 -1
  62. package/lib/components/features/documents/TMMasterDetailDcmts.d.ts +0 -2
  63. package/lib/components/features/documents/TMMasterDetailDcmts.js +4 -5
  64. package/lib/components/features/documents/TMMergeToPdfForm.d.ts +0 -2
  65. package/lib/components/features/documents/TMMergeToPdfForm.js +26 -10
  66. package/lib/components/features/documents/TMRelationViewer.js +8 -3
  67. package/lib/components/features/documents/copyAndMergeDcmtsShared.d.ts +0 -13
  68. package/lib/components/features/documents/copyAndMergeDcmtsShared.js +1 -39
  69. package/lib/components/features/search/TMDcmtCheckoutInfoForm.d.ts +2 -1
  70. package/lib/components/features/search/TMMetadataOutputForm.d.ts +18 -0
  71. package/lib/components/features/search/TMMetadataOutputForm.js +225 -0
  72. package/lib/components/features/search/TMMetadataSorterForm.d.ts +18 -0
  73. package/lib/components/features/search/TMMetadataSorterForm.js +243 -0
  74. package/lib/components/features/search/TMSavedQuerySelector.d.ts +2 -2
  75. package/lib/components/features/search/TMSearch.d.ts +0 -2
  76. package/lib/components/features/search/TMSearch.js +2 -2
  77. package/lib/components/features/search/TMSearchQueryEditor.js +14 -8
  78. package/lib/components/features/search/TMSearchQueryPanel.js +249 -58
  79. package/lib/components/features/search/TMSearchResult.d.ts +1 -2
  80. package/lib/components/features/search/TMSearchResult.js +40 -20
  81. package/lib/components/features/search/TMSearchResultFloatingActionButton.d.ts +1 -1
  82. package/lib/components/features/search/TMSignatureInfoContent.d.ts +2 -1
  83. package/lib/components/features/search/TMViewHistoryDcmt.d.ts +2 -1
  84. package/lib/components/features/search/TMViewHistoryDcmt.js +1 -1
  85. package/lib/components/features/search/metadataFormHelper.d.ts +16 -0
  86. package/lib/components/features/search/metadataFormHelper.js +77 -0
  87. package/lib/components/features/tasks/TMTaskForm.d.ts +1 -1
  88. package/lib/components/features/tasks/TMTaskFormUtils.d.ts +10 -10
  89. package/lib/components/features/tasks/TMTasksAgenda.d.ts +1 -1
  90. package/lib/components/features/tasks/TMTasksCalendar.d.ts +1 -1
  91. package/lib/components/features/tasks/TMTasksHeader.d.ts +1 -1
  92. package/lib/components/features/tasks/TMTasksPanelContent.d.ts +1 -1
  93. package/lib/components/features/tasks/TMTasksUtilsView.d.ts +5 -5
  94. package/lib/components/features/tasks/TMTasksView.d.ts +1 -1
  95. package/lib/components/features/wg/TMWGsCopyMoveForm.d.ts +3 -2
  96. package/lib/components/features/workflow/TMWorkflowPopup.d.ts +8 -7
  97. package/lib/components/forms/Login/Chooser.d.ts +2 -2
  98. package/lib/components/forms/Login/TMLoginForm.js +15 -3
  99. package/lib/components/forms/TMChooserForm.d.ts +2 -1
  100. package/lib/components/forms/TMSaveForm.d.ts +4 -4
  101. package/lib/components/grids/TMBlogAttachments.d.ts +2 -1
  102. package/lib/components/grids/TMBlogAttachments.js +2 -2
  103. package/lib/components/grids/TMBlogHeader.d.ts +1 -1
  104. package/lib/components/grids/TMBlogsPost.d.ts +1 -1
  105. package/lib/components/grids/TMBlogsPost.js +5 -3
  106. package/lib/components/grids/TMBlogsPostUtils.d.ts +10 -9
  107. package/lib/components/grids/TMBlogsPostUtils.js +3 -1
  108. package/lib/components/grids/TMValidationItemsList.d.ts +2 -1
  109. package/lib/components/layout/panelManager/TMPanelManagerContainer.d.ts +2 -1
  110. package/lib/components/layout/panelManager/TMPanelManagerContext.d.ts +2 -2
  111. package/lib/components/layout/panelManager/TMPanelManagerToolbar.d.ts +1 -1
  112. package/lib/components/layout/panelManager/TMPanelManagerWithPersistenceProvider.d.ts +2 -2
  113. package/lib/components/layout/panelManager/TMPanelWrapper.d.ts +2 -2
  114. package/lib/components/pages/TMPage.d.ts +1 -1
  115. package/lib/components/settings/SettingsAppearance.d.ts +2 -1
  116. package/lib/components/sidebar/TMAboutApp.d.ts +2 -1
  117. package/lib/components/sidebar/TMHeader.d.ts +3 -3
  118. package/lib/components/viewers/TMDataListItemViewer.d.ts +3 -2
  119. package/lib/components/viewers/TMDataUserIdItemViewer.d.ts +3 -2
  120. package/lib/components/viewers/TMMidViewer.d.ts +2 -2
  121. package/lib/components/viewers/TMTidViewer.d.ts +2 -2
  122. package/lib/components/wizard/TMWizard.d.ts +1 -0
  123. package/lib/components/wizard/TMWizard.js +5 -3
  124. package/lib/helper/Enum_Localizator.js +1 -0
  125. package/lib/helper/MergePdfManager.d.ts +45 -0
  126. package/lib/helper/MergePdfManager.js +148 -0
  127. package/lib/helper/SDKUI_Globals.js +2 -1
  128. package/lib/helper/SDKUI_Localizator.d.ts +6 -0
  129. package/lib/helper/SDKUI_Localizator.js +60 -0
  130. package/lib/helper/TMCommandsContextMenu.d.ts +1 -1
  131. package/lib/helper/TMIcons.d.ts +278 -278
  132. package/lib/helper/TMPdfViewer.d.ts +2 -1
  133. package/lib/helper/TMToppyMessage.d.ts +2 -2
  134. package/lib/helper/TMUtils.d.ts +24 -20
  135. package/lib/helper/TMUtils.js +55 -0
  136. package/lib/helper/checkinCheckoutManager.d.ts +4 -3
  137. package/lib/helper/checkinCheckoutManager.js +29 -11
  138. package/lib/helper/helpers.d.ts +3 -2
  139. package/lib/helper/helpers.js +1 -0
  140. package/lib/hooks/useCheckInOutOperations.d.ts +4 -3
  141. package/lib/hooks/useDataUserIdItem.js +1 -1
  142. package/lib/hooks/useDcmtOperations.d.ts +18 -1
  143. package/lib/hooks/useDcmtOperations.js +235 -24
  144. package/lib/hooks/useDocumentOperations.d.ts +0 -2
  145. package/lib/hooks/useDocumentOperations.js +27 -10
  146. package/lib/hooks/useInputDialog.d.ts +2 -1
  147. package/lib/hooks/useRelatedDocuments.js +4 -4
  148. package/lib/services/platform_services.d.ts +7 -6
  149. package/lib/ts/types.d.ts +2 -1
  150. package/lib/ts/types.js +1 -0
  151. package/package.json +14 -7
@@ -1,8 +1,8 @@
1
- import { ReactNode } from 'react';
1
+ import React, { ReactNode } from 'react';
2
2
  import { TMPanelDefinition } from './types';
3
3
  interface TMPanelWrapperProps {
4
4
  panel: TMPanelDefinition;
5
5
  children: ReactNode;
6
6
  }
7
- declare const TMPanelWrapper: (props: TMPanelWrapperProps) => import("react/jsx-runtime").JSX.Element | null;
7
+ declare const TMPanelWrapper: (props: TMPanelWrapperProps) => React.JSX.Element | null;
8
8
  export default TMPanelWrapper;
@@ -34,5 +34,5 @@ interface ITMPage<T> {
34
34
  /** Indica il cambiamento dei contatori della lista (totali, selezionati e visibili) */
35
35
  onCountersChanged?: (totalItemsCount: number, selectedItemsCount: number, visibleItemsCount: number) => void;
36
36
  }
37
- declare const TMPage: <T>({ id, objClass, listDisabled, lastRefreshTime, objType, listInsteadOfContent, detailInsteadOfContent, routePage, customButtons, customColumns, searchText, detailForm, detailTitlePathKeys, deps, onSelectionChanged, onCountersChanged }: ITMPage<T>) => import("react/jsx-runtime").JSX.Element;
37
+ declare const TMPage: <T>({ id, objClass, listDisabled, lastRefreshTime, objType, listInsteadOfContent, detailInsteadOfContent, routePage, customButtons, customColumns, searchText, detailForm, detailTitlePathKeys, deps, onSelectionChanged, onCountersChanged }: ITMPage<T>) => React.JSX.Element;
38
38
  export default TMPage;
@@ -1,3 +1,4 @@
1
+ import React from 'react';
1
2
  declare const SettingsAppearance: ({ landingPagesOptions, permissions, showConfirmPopup }: {
2
3
  landingPagesOptions?: {
3
4
  display: string;
@@ -11,5 +12,5 @@ declare const SettingsAppearance: ({ landingPagesOptions, permissions, showConfi
11
12
  workFlowLicense: boolean;
12
13
  };
13
14
  showConfirmPopup?: (title: string, onConfirm: () => void) => void;
14
- }) => import("react/jsx-runtime").JSX.Element;
15
+ }) => React.JSX.Element;
15
16
  export default SettingsAppearance;
@@ -1,8 +1,9 @@
1
+ import React from 'react';
1
2
  interface TMAboutAppProps {
2
3
  app: boolean;
3
4
  skdui: boolean;
4
5
  sdk: boolean;
5
6
  websdk: boolean;
6
7
  }
7
- export declare const TMAboutApp: (props: TMAboutAppProps) => import("react/jsx-runtime").JSX.Element;
8
+ export declare const TMAboutApp: (props: TMAboutAppProps) => React.JSX.Element;
8
9
  export {};
@@ -36,8 +36,8 @@ export declare const TMSearchBar: ({ searchValue, onSearchValueChanged, maxWidth
36
36
  marginLeft?: string;
37
37
  searchValue: string;
38
38
  onSearchValueChanged: (value: string) => void;
39
- }) => import("react/jsx-runtime").JSX.Element;
39
+ }) => React.JSX.Element;
40
40
  declare const TMHeader: React.FC<ITMHeader>;
41
41
  export default TMHeader;
42
- export declare function IconHeaderNotifications(props: Readonly<React.SVGProps<SVGSVGElement>>): import("react/jsx-runtime").JSX.Element;
43
- export declare function IconHeaderSettings(props: Readonly<React.SVGProps<SVGSVGElement>>): import("react/jsx-runtime").JSX.Element;
42
+ export declare function IconHeaderNotifications(props: Readonly<React.SVGProps<SVGSVGElement>>): React.JSX.Element;
43
+ export declare function IconHeaderSettings(props: Readonly<React.SVGProps<SVGSVGElement>>): React.JSX.Element;
@@ -1,3 +1,4 @@
1
+ import React from 'react';
1
2
  import { DataListViewModes } from '@topconsultnpm/sdk-ts';
2
3
  import { DataGridTypes } from 'devextreme-react/data-grid';
3
4
  interface ITMDataListItemViewerProps {
@@ -7,6 +8,6 @@ interface ITMDataListItemViewerProps {
7
8
  showTooltip?: boolean;
8
9
  width?: string;
9
10
  }
10
- declare const TMDataListItemViewer: ({ dataListId, value, viewMode, showTooltip, width }: ITMDataListItemViewerProps) => import("react/jsx-runtime").JSX.Element | null;
11
+ declare const TMDataListItemViewer: ({ dataListId, value, viewMode, showTooltip, width }: ITMDataListItemViewerProps) => React.JSX.Element | null;
11
12
  export default TMDataListItemViewer;
12
- export declare const cellRenderDataListItem: (data: DataGridTypes.ColumnCellTemplateData, dataListId?: number, viewMode?: DataListViewModes) => import("react/jsx-runtime").JSX.Element;
13
+ export declare const cellRenderDataListItem: (data: DataGridTypes.ColumnCellTemplateData, dataListId?: number, viewMode?: DataListViewModes) => React.JSX.Element;
@@ -1,8 +1,9 @@
1
+ import React from 'react';
1
2
  import { DataGridTypes } from 'devextreme-react/data-grid';
2
3
  interface ITMDataUserIdItemViewerProps {
3
4
  userId?: number;
4
5
  showIcon?: boolean;
5
6
  }
6
- declare const TMDataUserIdItemViewer: ({ userId, showIcon }: ITMDataUserIdItemViewerProps) => import("react/jsx-runtime").JSX.Element | null;
7
+ declare const TMDataUserIdItemViewer: ({ userId, showIcon }: ITMDataUserIdItemViewerProps) => React.JSX.Element | null;
7
8
  export default TMDataUserIdItemViewer;
8
- export declare const cellRenderUserIdItem: (data: DataGridTypes.ColumnCellTemplateData, showIcon?: boolean) => import("react/jsx-runtime").JSX.Element;
9
+ export declare const cellRenderUserIdItem: (data: DataGridTypes.ColumnCellTemplateData, showIcon?: boolean) => React.JSX.Element;
@@ -22,7 +22,7 @@ interface ITMMetadataIcon {
22
22
  isMetadataSelected?: boolean;
23
23
  elementStyle?: React.CSSProperties;
24
24
  }
25
- export declare const TMMetadataIcon: ({ tid, md, color, layoutMode, isMetadataSelected, elementStyle }: ITMMetadataIcon) => import("react/jsx-runtime").JSX.Element | null;
25
+ export declare const TMMetadataIcon: ({ tid, md, color, layoutMode, isMetadataSelected, elementStyle }: ITMMetadataIcon) => React.JSX.Element | null;
26
26
  interface ITMMetadataTooltip {
27
27
  tid: number | undefined;
28
28
  md: MetadataDescriptor | undefined;
@@ -31,6 +31,6 @@ interface ITMMetadataTooltip {
31
31
  layoutMode?: LayoutModes;
32
32
  }
33
33
  export declare const TMMetadataTooltip: React.FC<ITMMetadataTooltip>;
34
- export declare const cellRenderMID: (data: DataGridTypes.ColumnCellTemplateData, noneSelectionText?: string, tid?: number) => import("react/jsx-runtime").JSX.Element;
34
+ export declare const cellRenderMID: (data: DataGridTypes.ColumnCellTemplateData, noneSelectionText?: string, tid?: number) => React.JSX.Element;
35
35
  export declare const getDisplayAlias: (dcmtTypeName: string | undefined, alias: string | undefined) => string | undefined;
36
36
  export {};
@@ -252,5 +252,5 @@ export interface ITMTidViewerProps {
252
252
  }
253
253
  declare const TMTidViewer: React.FC<ITMTidViewerProps>;
254
254
  export default TMTidViewer;
255
- export declare const cellRenderTID: (data: DataGridTypes.ColumnCellTemplateData, noneSelectionText?: string) => import("react/jsx-runtime").JSX.Element;
256
- export declare const renderDTDTooltipContent: (dtd: DcmtTypeDescriptor | undefined) => import("react/jsx-runtime").JSX.Element | null;
255
+ export declare const cellRenderTID: (data: DataGridTypes.ColumnCellTemplateData, noneSelectionText?: string) => React.JSX.Element;
256
+ export declare const renderDTDTooltipContent: (dtd: DcmtTypeDescriptor | undefined) => React.JSX.Element | null;
@@ -10,6 +10,7 @@ interface TMWizardProps {
10
10
  initialData: any;
11
11
  title: string;
12
12
  description: string;
13
+ initialStep?: number;
13
14
  validateOnlyCurrentStep?: boolean;
14
15
  onClose: () => void;
15
16
  onFinish: (data: any) => void;
@@ -1,6 +1,6 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  // TMWizard.tsx
3
- import React, { useState } from 'react';
3
+ import React, { useState, useEffect } from 'react';
4
4
  import styled from 'styled-components';
5
5
  import { ResultTypes } from '@topconsultnpm/sdk-ts';
6
6
  import TMButton from '../base/TMButton';
@@ -40,9 +40,11 @@ const ControlsContainer = styled.div `
40
40
  padding: 15px 20px;
41
41
  border-top: 1px solid #eee;
42
42
  `;
43
- const TMWizard = ({ steps, validateOnlyCurrentStep = true, onClose, onFinish, initialData, title, description }) => {
44
- const [currentStep, setCurrentStep] = useState(0);
43
+ const TMWizard = ({ steps, validateOnlyCurrentStep = true, onClose, onFinish, initialData, title, description, initialStep = 0 }) => {
44
+ const [currentStep, setCurrentStep] = useState(initialStep);
45
45
  const [formData, setFormData] = useState(initialData);
46
+ useEffect(() => { setCurrentStep(initialStep); }, [initialStep]);
47
+ useEffect(() => { setFormData(initialData); }, [initialData]);
46
48
  const stepValidationErrors = steps.map((step, index) => {
47
49
  if (validateOnlyCurrentStep) {
48
50
  if (index <= currentStep) {
@@ -23,6 +23,7 @@ export function LocalizeDcmtOperationTypes(value) {
23
23
  case DcmtOperationTypes.CheckFile: return SDKUI_Localizator.FileCheck;
24
24
  case DcmtOperationTypes.ConvertFile: return SDKUI_Localizator.FileConversion;
25
25
  case DcmtOperationTypes.VerifySign: return SDKUI_Localizator.VerifySignature;
26
+ case DcmtOperationTypes.CopyCompliant: return SDKUI_Localizator.CopyCompliant;
26
27
  case DcmtOperationTypes.SubstituteFile: return SDKUI_Localizator.AddOrSubstFile;
27
28
  case DcmtOperationTypes.FreeSearchReindex: return SDKUI_Localizator.IndexOrReindex;
28
29
  case DcmtOperationTypes.FreeSearchPurge: return SDKUI_Localizator.IndexingDelete;
@@ -0,0 +1,45 @@
1
+ /** Risultato del merge PDF */
2
+ export interface MergePdfResult {
3
+ bytes: Uint8Array;
4
+ blob: Blob;
5
+ pageCount: number;
6
+ }
7
+ /** Risultato con Base64 incluso */
8
+ export interface MergePdfResultWithBase64 extends MergePdfResult {
9
+ base64: string;
10
+ }
11
+ /** Opzioni per il merge */
12
+ export interface MergePdfOptions {
13
+ fileName?: string;
14
+ onProgress?: (current: number, total: number, file: File) => void;
15
+ }
16
+ export declare class MergePdfManager {
17
+ /**
18
+ * Merge principale - Unisce array di File PDF in uno solo
19
+ */
20
+ static merge(files: File[], options?: MergePdfOptions): Promise<MergePdfResult>;
21
+ /**
22
+ * Merge -> File - Restituisce un oggetto File
23
+ */
24
+ static mergeToFile(files: File[], fileName?: string, options?: MergePdfOptions): Promise<File>;
25
+ /**
26
+ * Merge + Download - Unisce e scarica automaticamente
27
+ */
28
+ static mergeAndDownload(files: File[], fileName?: string, options?: MergePdfOptions): Promise<MergePdfResult>;
29
+ /**
30
+ * Blob -> Base64 - Converte un Blob in stringa Base64
31
+ */
32
+ static blobToBase64(blob: Blob): Promise<string>;
33
+ /**
34
+ * Merge -> Base64 - Unisce e restituisce anche la stringa Base64
35
+ */
36
+ static mergeToBase64(files: File[], options?: MergePdfOptions): Promise<MergePdfResultWithBase64>;
37
+ /**
38
+ * Merge per Preview - Restituisce solo base64 e pageCount per anteprima
39
+ */
40
+ static mergeForPreview(files: File[], options?: MergePdfOptions): Promise<{
41
+ base64: string;
42
+ pageCount: number;
43
+ }>;
44
+ }
45
+ export default MergePdfManager;
@@ -0,0 +1,148 @@
1
+ import { SDKUI_Localizator } from './SDKUI_Localizator';
2
+ // ============================================================================
3
+ // LAZY LOADING - Carica pdf-lib solo quando necessario
4
+ // ============================================================================
5
+ let pdfLibLoaded = false;
6
+ const loadPdfLib = async () => {
7
+ const module = await import('pdf-lib');
8
+ pdfLibLoaded = true;
9
+ return module;
10
+ };
11
+ // ============================================================================
12
+ // MERGE PDF MANAGER - Utility per unire PDF lato client
13
+ // ============================================================================
14
+ export class MergePdfManager {
15
+ /**
16
+ * Merge principale - Unisce array di File PDF in uno solo
17
+ */
18
+ static async merge(files, options = {}) {
19
+ if (!files?.length) {
20
+ throw new Error('MergePdfManager.merge: nessun file fornito.');
21
+ }
22
+ try {
23
+ // Carica pdf-lib on-demand
24
+ const { PDFDocument } = await loadPdfLib();
25
+ const mergedPdf = await PDFDocument.create();
26
+ let totalPages = 0;
27
+ // Itera su ogni file e copia le pagine nel documento finale
28
+ for (let i = 0; i < files.length; i++) {
29
+ const file = files[i];
30
+ try {
31
+ const buffer = await file.arrayBuffer();
32
+ const pdf = await PDFDocument.load(buffer);
33
+ // Copia tutte le pagine dal PDF sorgente
34
+ const pages = await mergedPdf.copyPages(pdf, pdf.getPageIndices());
35
+ pages.forEach(page => mergedPdf.addPage(page));
36
+ totalPages += pages.length;
37
+ // Notifica progresso
38
+ options.onProgress?.(i + 1, files.length, file);
39
+ }
40
+ catch (fileError) {
41
+ const errorMessage = fileError instanceof Error ? fileError.message : String(fileError);
42
+ throw new Error(`Errore processamento file "${file.name}" (${i}): ${errorMessage}`);
43
+ }
44
+ }
45
+ if (totalPages === 0) {
46
+ throw new Error('Nessuna pagina valida trovata.');
47
+ }
48
+ // Salva il PDF unito
49
+ const outBytes = await mergedPdf.save();
50
+ // Converte Uint8Array in ArrayBuffer per il Blob
51
+ const pdfBuffer = outBytes.buffer.slice(outBytes.byteOffset, outBytes.byteOffset + outBytes.byteLength);
52
+ const blob = new Blob([pdfBuffer], { type: 'application/pdf' });
53
+ return { bytes: outBytes, blob, pageCount: totalPages };
54
+ }
55
+ catch (error) {
56
+ const errorMessage = error instanceof Error ? error.message : String(error);
57
+ throw new Error(`MergePdfManager.merge: ${errorMessage}`);
58
+ }
59
+ }
60
+ /**
61
+ * Merge -> File - Restituisce un oggetto File
62
+ */
63
+ static async mergeToFile(files, fileName, options = {}) {
64
+ try {
65
+ const { blob } = await this.merge(files, options);
66
+ const finalFileName = fileName || `${SDKUI_Localizator.Result.toLowerCase()}.pdf`;
67
+ return new File([blob], finalFileName, { type: 'application/pdf' });
68
+ }
69
+ catch (error) {
70
+ const errorMessage = error instanceof Error ? error.message : String(error);
71
+ throw new Error(`MergePdfManager.mergeToFile: ${errorMessage}`);
72
+ }
73
+ }
74
+ /**
75
+ * Merge + Download - Unisce e scarica automaticamente
76
+ */
77
+ static async mergeAndDownload(files, fileName, options = {}) {
78
+ let url = null;
79
+ const finalFileName = fileName || `${SDKUI_Localizator.Result.toLowerCase()}.pdf`;
80
+ try {
81
+ const result = await this.merge(files, options);
82
+ url = URL.createObjectURL(result.blob);
83
+ // Crea link temporaneo per download
84
+ const a = document.createElement('a');
85
+ a.href = url;
86
+ a.download = finalFileName;
87
+ document.body.appendChild(a);
88
+ a.click();
89
+ a.remove();
90
+ return result;
91
+ }
92
+ catch (error) {
93
+ const errorMessage = error instanceof Error ? error.message : String(error);
94
+ throw new Error(`MergePdfManager.mergeAndDownload: ${errorMessage}`);
95
+ }
96
+ finally {
97
+ // Rilascia URL dopo un breve delay
98
+ if (url)
99
+ setTimeout(() => URL.revokeObjectURL(url), 1000);
100
+ }
101
+ }
102
+ /**
103
+ * Blob -> Base64 - Converte un Blob in stringa Base64
104
+ */
105
+ static blobToBase64(blob) {
106
+ return new Promise((resolve, reject) => {
107
+ const reader = new FileReader();
108
+ reader.onloadend = () => {
109
+ if (typeof reader.result === 'string') {
110
+ resolve(reader.result);
111
+ }
112
+ else {
113
+ reject(new Error('Impossibile convertire il blob in base64.'));
114
+ }
115
+ };
116
+ reader.onerror = () => reject(new Error('Errore durante la lettura del blob.'));
117
+ reader.readAsDataURL(blob);
118
+ });
119
+ }
120
+ /**
121
+ * Merge -> Base64 - Unisce e restituisce anche la stringa Base64
122
+ */
123
+ static async mergeToBase64(files, options = {}) {
124
+ try {
125
+ const result = await this.merge(files, options);
126
+ const base64 = await this.blobToBase64(result.blob);
127
+ return { ...result, base64 };
128
+ }
129
+ catch (error) {
130
+ const errorMessage = error instanceof Error ? error.message : String(error);
131
+ throw new Error(`MergePdfManager.mergeToBase64: ${errorMessage}`);
132
+ }
133
+ }
134
+ /**
135
+ * Merge per Preview - Restituisce solo base64 e pageCount per anteprima
136
+ */
137
+ static async mergeForPreview(files, options = {}) {
138
+ try {
139
+ const result = await this.mergeToBase64(files, options);
140
+ return { base64: result.base64, pageCount: result.pageCount };
141
+ }
142
+ catch (error) {
143
+ const errorMessage = error instanceof Error ? error.message : String(error);
144
+ throw new Error(`MergePdfManager.mergeForPreview: ${errorMessage}`);
145
+ }
146
+ }
147
+ }
148
+ export default MergePdfManager;
@@ -1,10 +1,11 @@
1
1
  import { InvoiceRetrieveFormats, LocalStorageService, OrderRetrieveFormats } from "@topconsultnpm/sdk-ts";
2
2
  import { FontSize } from "../utils/theme";
3
+ import { SDKUI_Localizator } from "./SDKUI_Localizator";
3
4
  export class DocumentDownloadSettings {
4
5
  constructor() {
5
6
  this.exportMode = 'copy';
6
7
  this.destinationFolder = 'Download';
7
- this.zipFileName = '';
8
+ this.zipFileName = SDKUI_Localizator.Result.toLowerCase() + '.zip';
8
9
  this.zipPassword = '';
9
10
  this.fileNamingMode = 'documentTypeAndDid';
10
11
  this.separatorChar = '_';
@@ -54,6 +54,7 @@ export declare class SDKUI_Localizator {
54
54
  static get ArchiveDetailDocument(): "Detaildokument archivieren" | "Archive detail document" | "Archivar documento de detalle" | "Archiver le document détail" | "Arquivar documento de detalhe" | "Archivia documento dettaglio";
55
55
  static get ArchiveMasterDocument(): "Master-Dokument archivieren" | "Archive master document" | "Archivar documento maestro" | "Archiver le document maître" | "Arquivar documento mestre" | "Archivia documento master";
56
56
  static get Archiving(): string;
57
+ static get ArchivingCompletionInProgress(): string;
57
58
  static get Arguments(): "Themen" | "Arguments" | "Argumentos" | "Sujets" | "Tópicos" | "Argomenti";
58
59
  static get AssignTo(): "Zuweisen an" | "Assign to" | "Asignar a" | "Assigner à" | "Atribuir a" | "Assegna a";
59
60
  static get AssignedBy(): "Zugewiesen von" | "Assigned by" | "Asignado por" | "Assigné par" | "Atribuído por" | "Assegnata da";
@@ -136,6 +137,7 @@ export declare class SDKUI_Localizator {
136
137
  static get CopyAndReplace(): string;
137
138
  static get CopyButRename(): string;
138
139
  static get CopyCheckoutPath(): string;
140
+ static get CopyCompliant(): string;
139
141
  static get CopyToArchived(): string;
140
142
  static get CopyToArchivedDocuments(): string;
141
143
  static get CopyToClipboard(): "Erfolgreich in die Zwischenablage kopiert" | "Copy in clipboard" | "Copiar en portapapeles" | "Copier dans le presse-papier" | "Copiar na área de transferência" | "Copia negli appunti";
@@ -486,6 +488,8 @@ export declare class SDKUI_Localizator {
486
488
  static get NoDataToDisplay(): "Keine Daten zum Anzeigen" | "No data to display" | "No hay datos para mostrar" | "Aucune donnée à afficher" | "Sem dados para exibir" | "Nessun dato da visualizzare";
487
489
  static get NoDcmtFound(): "Kein Dokument gefunden" | "No documents found" | "Ningún documento encontrado" | "Pas de documents trouvés" | "Nenhum documento encontrado" | "Nessun documento trovato";
488
490
  static get NoDcmtSelected(): string;
491
+ static get NoSortingApplied(): string;
492
+ static get NoOutputMetadata(): string;
489
493
  static get NoDetailDocumentFoundForArchiving(): "Kein Detaildokument zur Archivierung gefunden." | "No detail document found for archiving." | "No se encontró ningún documento de detalle para archivar." | "Aucun document détail trouvé pour l'archivage." | "Nenhum documento de detalhe encontrado para arquivamento." | "Nessun documento di dettaglio trovato per l'archiviazione.";
490
494
  static get NoDocumentMatchFound(): "Kein zugeordnetes Dokument gefunden." | "No document match found." | "No se encontró ningún documento emparejado." | "Aucun document associé trouvé." | "Nenhum documento correspondente encontrado." | "Nessun documento abbinato trovato.";
491
495
  static get NoDocumentSelectedForManyToManyMatching(): "Kein Dokument für die Mehrfach-Zuordnung ausgewählt." | "No document selected for many-to-many matching." | "Ningún documento seleccionado para el emparejamiento de muchos a muchos." | "Aucun document sélectionné pour l'association plusieurs à plusieurs." | "Nenhum documento selecionado para correspondência de muitos para muitos." | "Nessun documento selezionato per l'abbinamento molti a molti.";
@@ -651,6 +655,7 @@ export declare class SDKUI_Localizator {
651
655
  static get RenameFile(): "Datei erfolgreich umbenannt" | "File renamed successfully" | "Archivo renombrada exitosamente" | "Fichier renommé avec succès" | "Arquivo renomeada com sucesso" | "File rinominata con successo";
652
656
  static get Restore(): "Wiederherstellen" | "Restore" | "Restablecer" | "Restaure" | "Restauração" | "Ripristina";
653
657
  static get RestoreComment(): "Kommentar wiederherstellen?" | "Restore the comment?" | "¿Restaurar el comentario?" | "Restaurer le commentaire ?" | "Restaurar o comentário?" | "Ripristinare il commento?";
658
+ static get Result(): string;
654
659
  static get ResultDetails(): string;
655
660
  static get RestoreDownload(): string;
656
661
  static get ResultsPerPage(): string;
@@ -736,6 +741,7 @@ export declare class SDKUI_Localizator {
736
741
  static get SignatureType(): string;
737
742
  static get Size(): "Größe" | "Size" | "Dimensión" | "Dimension" | "Tamanho" | "Dimensione";
738
743
  static get SortBy(): "Sortieren nach" | "Sort by" | "Ordenar por" | "Trier par" | "Ordinamento";
744
+ static get SortByPlural(): "Sortierungen" | "Sortings" | "Ordenaciones" | "Tris" | "Ordenações" | "Ordinamenti";
739
745
  static get Source(): "Ursprung" | "Source" | "Origen" | "Origem" | "Origine";
740
746
  static get SpecialOperators(): "Spezielle Operatoren" | "Special operators" | "Operadores especiales" | "Opérateurs spéciaux" | "Os operadores especiais" | "Operatori speciali";
741
747
  static get StandardMode(): "Standardmodus" | "Standard mode" | "Modo estándar" | "Mode standard" | "Modo padrão" | "Modalità standard";
@@ -494,6 +494,16 @@ export class SDKUI_Localizator {
494
494
  default: return "Archiviazione";
495
495
  }
496
496
  }
497
+ static get ArchivingCompletionInProgress() {
498
+ switch (this._cultureID) {
499
+ case CultureIDs.De_DE: return "Archivierung wird abgeschlossen";
500
+ case CultureIDs.En_US: return "Completing archiving";
501
+ case CultureIDs.Es_ES: return "Completando archivación";
502
+ case CultureIDs.Fr_FR: return "Finalisation de l'archivage";
503
+ case CultureIDs.Pt_PT: return "Concluindo arquivamento";
504
+ default: return "Completamento archiviazione in corso";
505
+ }
506
+ }
497
507
  static get Arguments() {
498
508
  switch (this._cultureID) {
499
509
  case CultureIDs.De_DE: return "Themen";
@@ -1346,6 +1356,16 @@ export class SDKUI_Localizator {
1346
1356
  default: return "Copia path di check out";
1347
1357
  }
1348
1358
  }
1359
+ static get CopyCompliant() {
1360
+ switch (this._cultureID) {
1361
+ case CultureIDs.De_DE: return "Elektronisches Duplikat";
1362
+ case CultureIDs.En_US: return "Compliant copy";
1363
+ case CultureIDs.Es_ES: return "Duplicado electrónico";
1364
+ case CultureIDs.Fr_FR: return "Duplicata électronique";
1365
+ case CultureIDs.Pt_PT: return "Duplicado eletrónico";
1366
+ default: return "Duplicato informatico";
1367
+ }
1368
+ }
1349
1369
  static get CopyToArchived() {
1350
1370
  switch (this._cultureID) {
1351
1371
  case CultureIDs.De_DE: return "In Archivierte kopieren";
@@ -4820,6 +4840,26 @@ export class SDKUI_Localizator {
4820
4840
  default: return "Nessun documento selezionato";
4821
4841
  }
4822
4842
  }
4843
+ static get NoSortingApplied() {
4844
+ switch (this._cultureID) {
4845
+ case CultureIDs.De_DE: return "Keine Sortierung angewendet";
4846
+ case CultureIDs.En_US: return "No sorting applied";
4847
+ case CultureIDs.Es_ES: return "Ningún ordenamiento aplicado";
4848
+ case CultureIDs.Fr_FR: return "Aucun tri appliqué";
4849
+ case CultureIDs.Pt_PT: return "Nenhuma ordenação aplicada";
4850
+ default: return "Nessun ordinamento applicato";
4851
+ }
4852
+ }
4853
+ static get NoOutputMetadata() {
4854
+ switch (this._cultureID) {
4855
+ case CultureIDs.De_DE: return "Keine Ausgabemetadaten ausgewählt";
4856
+ case CultureIDs.En_US: return "No output metadata selected";
4857
+ case CultureIDs.Es_ES: return "Ningún metadato de salida seleccionado";
4858
+ case CultureIDs.Fr_FR: return "Aucune métadonnée de sortie sélectionnée";
4859
+ case CultureIDs.Pt_PT: return "Nenhum metadado de saída selecionado";
4860
+ default: return "Nessun metadato di output selezionato";
4861
+ }
4862
+ }
4823
4863
  static get NoDetailDocumentFoundForArchiving() {
4824
4864
  switch (this._cultureID) {
4825
4865
  case CultureIDs.De_DE: return "Kein Detaildokument zur Archivierung gefunden.";
@@ -6489,6 +6529,16 @@ export class SDKUI_Localizator {
6489
6529
  default: return "Ripristinare il commento?";
6490
6530
  }
6491
6531
  }
6532
+ static get Result() {
6533
+ switch (this._cultureID) {
6534
+ case CultureIDs.De_DE: return "Ergebnis";
6535
+ case CultureIDs.En_US: return "Result";
6536
+ case CultureIDs.Es_ES: return "Resultado";
6537
+ case CultureIDs.Fr_FR: return "Résultat";
6538
+ case CultureIDs.Pt_PT: return "Resultado";
6539
+ default: return "Risultato";
6540
+ }
6541
+ }
6492
6542
  static get ResultDetails() {
6493
6543
  switch (this._cultureID) {
6494
6544
  case CultureIDs.De_DE: return "Ergebnisdetails";
@@ -7340,6 +7390,16 @@ export class SDKUI_Localizator {
7340
7390
  default: return "Ordinamento";
7341
7391
  }
7342
7392
  }
7393
+ static get SortByPlural() {
7394
+ switch (this._cultureID) {
7395
+ case CultureIDs.De_DE: return "Sortierungen";
7396
+ case CultureIDs.En_US: return "Sortings";
7397
+ case CultureIDs.Es_ES: return "Ordenaciones";
7398
+ case CultureIDs.Fr_FR: return "Tris";
7399
+ case CultureIDs.Pt_PT: return "Ordenações";
7400
+ default: return "Ordinamenti";
7401
+ }
7402
+ }
7343
7403
  static get Source() {
7344
7404
  switch (this._cultureID) {
7345
7405
  case CultureIDs.De_DE: return "Ursprung";
@@ -12,5 +12,5 @@ interface TMCommandsContextMenuProps {
12
12
  trigger?: 'right' | 'left';
13
13
  children?: React.ReactNode;
14
14
  }
15
- export declare const TMCommandsContextMenu: React.MemoExoticComponent<({ target, menuItems, id, showEvent, onHiding, trigger, children }: TMCommandsContextMenuProps) => import("react/jsx-runtime").JSX.Element>;
15
+ export declare const TMCommandsContextMenu: React.MemoExoticComponent<({ target, menuItems, id, showEvent, onHiding, trigger, children }: TMCommandsContextMenuProps) => React.JSX.Element>;
16
16
  export {};