@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.
- package/lib/components/NewComponents/ContextMenu/TMContextMenu.js +22 -1
- package/lib/components/NewComponents/ContextMenu/styles.d.ts +4 -4
- package/lib/components/NewComponents/FloatingMenuBar/styles.d.ts +6 -6
- package/lib/components/base/Styled.d.ts +1 -1
- package/lib/components/base/TMAreaManager.js +11 -0
- package/lib/components/base/TMCounterBar.d.ts +2 -2
- package/lib/components/base/TMCounterContainer.d.ts +2 -1
- package/lib/components/base/TMCustomButton.d.ts +1 -1
- package/lib/components/base/TMDataGrid.js +12 -2
- package/lib/components/base/TMDataGridExportForm.d.ts +2 -1
- package/lib/components/base/TMDataGridExportForm.js +19 -8
- package/lib/components/base/TMFileManager.d.ts +2 -1
- package/lib/components/base/TMFileManagerDataGridView.d.ts +2 -1
- package/lib/components/base/TMFileManagerDataGridView.js +4 -4
- package/lib/components/base/TMFileManagerThumbnailItems.d.ts +1 -1
- package/lib/components/base/TMFileManagerThumbnailItems.js +3 -3
- package/lib/components/base/TMFileManagerThumbnailsView.d.ts +1 -1
- package/lib/components/base/TMFileManagerUtils.d.ts +7 -0
- package/lib/components/base/TMFileManagerUtils.js +14 -1
- package/lib/components/base/TMLayout.d.ts +4 -4
- package/lib/components/base/TMList.d.ts +2 -1
- package/lib/components/base/TMListView.d.ts +1 -1
- package/lib/components/base/TMModal.js +2 -2
- package/lib/components/base/TMPopUp.d.ts +1 -0
- package/lib/components/base/TMPopUp.js +59 -2
- package/lib/components/base/TMSpinner.d.ts +5 -2
- package/lib/components/base/TMSpinner.js +33 -6
- package/lib/components/base/TMTab.d.ts +4 -3
- package/lib/components/base/TMTooltip.d.ts +1 -1
- package/lib/components/base/TMTreeView.d.ts +1 -1
- package/lib/components/base/TMTreeView.js +12 -15
- package/lib/components/base/TMUserAvatar.d.ts +2 -1
- package/lib/components/base/TMVilViewer.d.ts +2 -1
- package/lib/components/base/TMWaitPanel.d.ts +5 -2
- package/lib/components/base/TMWaitPanel.js +8 -6
- package/lib/components/choosers/TMDynDataListItemChooser.d.ts +1 -1
- package/lib/components/choosers/TMDynDataListItemChooser.js +6 -1
- package/lib/components/choosers/TMGroupChooser.js +1 -1
- package/lib/components/choosers/TMInvoiceRetrieveFormats.d.ts +2 -1
- package/lib/components/choosers/TMOrderRetrieveFormats.d.ts +2 -1
- package/lib/components/choosers/TMRelationChooser.d.ts +3 -3
- package/lib/components/choosers/TMUserChooser.d.ts +2 -2
- package/lib/components/editors/TMEditorStyled.d.ts +6 -6
- package/lib/components/editors/TMFormulaEditor.d.ts +2 -1
- package/lib/components/editors/TMFormulaEditor.js +98 -49
- package/lib/components/editors/TMHtmlContentDisplay.d.ts +2 -1
- package/lib/components/editors/TMHtmlEditor.d.ts +2 -1
- package/lib/components/editors/TMMetadataEditor.js +6 -2
- package/lib/components/editors/TMMetadataValues.js +23 -6
- package/lib/components/editors/TMTreeDropDown.d.ts +1 -1
- package/lib/components/features/assistant/TMToppyDraggableHelpCenter.d.ts +1 -1
- package/lib/components/features/blog/TMBlogCommentForm.d.ts +2 -1
- package/lib/components/features/blog/TMBlogCommentForm.js +5 -2
- package/lib/components/features/documents/TMCopyToFolderForm.js +46 -24
- package/lib/components/features/documents/TMDcmtForm.js +19 -9
- package/lib/components/features/documents/TMDcmtFormActionButtons.d.ts +1 -1
- package/lib/components/features/documents/TMDcmtIcon.d.ts +2 -1
- package/lib/components/features/documents/TMDcmtIcon.js +1 -1
- package/lib/components/features/documents/TMDcmtPreview.d.ts +1 -1
- package/lib/components/features/documents/TMDcmtTasks.d.ts +2 -1
- package/lib/components/features/documents/TMDragDropOverlay.d.ts +1 -1
- package/lib/components/features/documents/TMMasterDetailDcmts.d.ts +0 -2
- package/lib/components/features/documents/TMMasterDetailDcmts.js +4 -5
- package/lib/components/features/documents/TMMergeToPdfForm.d.ts +0 -2
- package/lib/components/features/documents/TMMergeToPdfForm.js +26 -10
- package/lib/components/features/documents/TMRelationViewer.js +8 -3
- package/lib/components/features/documents/copyAndMergeDcmtsShared.d.ts +0 -13
- package/lib/components/features/documents/copyAndMergeDcmtsShared.js +1 -39
- package/lib/components/features/search/TMDcmtCheckoutInfoForm.d.ts +2 -1
- package/lib/components/features/search/TMMetadataOutputForm.d.ts +18 -0
- package/lib/components/features/search/TMMetadataOutputForm.js +225 -0
- package/lib/components/features/search/TMMetadataSorterForm.d.ts +18 -0
- package/lib/components/features/search/TMMetadataSorterForm.js +243 -0
- package/lib/components/features/search/TMSavedQuerySelector.d.ts +2 -2
- package/lib/components/features/search/TMSearch.d.ts +0 -2
- package/lib/components/features/search/TMSearch.js +2 -2
- package/lib/components/features/search/TMSearchQueryEditor.js +14 -8
- package/lib/components/features/search/TMSearchQueryPanel.js +249 -58
- package/lib/components/features/search/TMSearchResult.d.ts +1 -2
- package/lib/components/features/search/TMSearchResult.js +40 -20
- package/lib/components/features/search/TMSearchResultFloatingActionButton.d.ts +1 -1
- package/lib/components/features/search/TMSignatureInfoContent.d.ts +2 -1
- package/lib/components/features/search/TMViewHistoryDcmt.d.ts +2 -1
- package/lib/components/features/search/TMViewHistoryDcmt.js +1 -1
- package/lib/components/features/search/metadataFormHelper.d.ts +16 -0
- package/lib/components/features/search/metadataFormHelper.js +77 -0
- package/lib/components/features/tasks/TMTaskForm.d.ts +1 -1
- package/lib/components/features/tasks/TMTaskFormUtils.d.ts +10 -10
- package/lib/components/features/tasks/TMTasksAgenda.d.ts +1 -1
- package/lib/components/features/tasks/TMTasksCalendar.d.ts +1 -1
- package/lib/components/features/tasks/TMTasksHeader.d.ts +1 -1
- package/lib/components/features/tasks/TMTasksPanelContent.d.ts +1 -1
- package/lib/components/features/tasks/TMTasksUtilsView.d.ts +5 -5
- package/lib/components/features/tasks/TMTasksView.d.ts +1 -1
- package/lib/components/features/wg/TMWGsCopyMoveForm.d.ts +3 -2
- package/lib/components/features/workflow/TMWorkflowPopup.d.ts +8 -7
- package/lib/components/forms/Login/Chooser.d.ts +2 -2
- package/lib/components/forms/Login/TMLoginForm.js +15 -3
- package/lib/components/forms/TMChooserForm.d.ts +2 -1
- package/lib/components/forms/TMSaveForm.d.ts +4 -4
- package/lib/components/grids/TMBlogAttachments.d.ts +2 -1
- package/lib/components/grids/TMBlogAttachments.js +2 -2
- package/lib/components/grids/TMBlogHeader.d.ts +1 -1
- package/lib/components/grids/TMBlogsPost.d.ts +1 -1
- package/lib/components/grids/TMBlogsPost.js +5 -3
- package/lib/components/grids/TMBlogsPostUtils.d.ts +10 -9
- package/lib/components/grids/TMBlogsPostUtils.js +3 -1
- package/lib/components/grids/TMValidationItemsList.d.ts +2 -1
- package/lib/components/layout/panelManager/TMPanelManagerContainer.d.ts +2 -1
- package/lib/components/layout/panelManager/TMPanelManagerContext.d.ts +2 -2
- package/lib/components/layout/panelManager/TMPanelManagerToolbar.d.ts +1 -1
- package/lib/components/layout/panelManager/TMPanelManagerWithPersistenceProvider.d.ts +2 -2
- package/lib/components/layout/panelManager/TMPanelWrapper.d.ts +2 -2
- package/lib/components/pages/TMPage.d.ts +1 -1
- package/lib/components/settings/SettingsAppearance.d.ts +2 -1
- package/lib/components/sidebar/TMAboutApp.d.ts +2 -1
- package/lib/components/sidebar/TMHeader.d.ts +3 -3
- package/lib/components/viewers/TMDataListItemViewer.d.ts +3 -2
- package/lib/components/viewers/TMDataUserIdItemViewer.d.ts +3 -2
- package/lib/components/viewers/TMMidViewer.d.ts +2 -2
- package/lib/components/viewers/TMTidViewer.d.ts +2 -2
- package/lib/components/wizard/TMWizard.d.ts +1 -0
- package/lib/components/wizard/TMWizard.js +5 -3
- package/lib/helper/Enum_Localizator.js +1 -0
- package/lib/helper/MergePdfManager.d.ts +45 -0
- package/lib/helper/MergePdfManager.js +148 -0
- package/lib/helper/SDKUI_Globals.js +2 -1
- package/lib/helper/SDKUI_Localizator.d.ts +6 -0
- package/lib/helper/SDKUI_Localizator.js +60 -0
- package/lib/helper/TMCommandsContextMenu.d.ts +1 -1
- package/lib/helper/TMIcons.d.ts +278 -278
- package/lib/helper/TMPdfViewer.d.ts +2 -1
- package/lib/helper/TMToppyMessage.d.ts +2 -2
- package/lib/helper/TMUtils.d.ts +24 -20
- package/lib/helper/TMUtils.js +55 -0
- package/lib/helper/checkinCheckoutManager.d.ts +4 -3
- package/lib/helper/checkinCheckoutManager.js +29 -11
- package/lib/helper/helpers.d.ts +3 -2
- package/lib/helper/helpers.js +1 -0
- package/lib/hooks/useCheckInOutOperations.d.ts +4 -3
- package/lib/hooks/useDataUserIdItem.js +1 -1
- package/lib/hooks/useDcmtOperations.d.ts +18 -1
- package/lib/hooks/useDcmtOperations.js +235 -24
- package/lib/hooks/useDocumentOperations.d.ts +0 -2
- package/lib/hooks/useDocumentOperations.js +27 -10
- package/lib/hooks/useInputDialog.d.ts +2 -1
- package/lib/hooks/useRelatedDocuments.js +4 -4
- package/lib/services/platform_services.d.ts +7 -6
- package/lib/ts/types.d.ts +2 -1
- package/lib/ts/types.js +1 -0
- 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) =>
|
|
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>) =>
|
|
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
|
-
}) =>
|
|
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) =>
|
|
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
|
-
}) =>
|
|
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>>):
|
|
43
|
-
export declare function IconHeaderSettings(props: Readonly<React.SVGProps<SVGSVGElement>>):
|
|
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) =>
|
|
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) =>
|
|
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) =>
|
|
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) =>
|
|
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) =>
|
|
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) =>
|
|
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) =>
|
|
256
|
-
export declare const renderDTDTooltipContent: (dtd: DcmtTypeDescriptor | undefined) =>
|
|
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;
|
|
@@ -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(
|
|
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) =>
|
|
15
|
+
export declare const TMCommandsContextMenu: React.MemoExoticComponent<({ target, menuItems, id, showEvent, onHiding, trigger, children }: TMCommandsContextMenuProps) => React.JSX.Element>;
|
|
16
16
|
export {};
|