@topconsultnpm/sdkui-react 6.22.0-dev4.21 → 6.22.0-dev4.23
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/styles.d.ts +45 -43
- package/lib/components/NewComponents/FloatingMenuBar/styles.d.ts +67 -60
- package/lib/components/base/Styled.d.ts +93 -77
- 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 +219 -219
- package/lib/components/base/TMDataGridExportForm.d.ts +2 -1
- package/lib/components/base/TMFileManager.d.ts +2 -1
- package/lib/components/base/TMFileManagerDataGridView.d.ts +2 -1
- package/lib/components/base/TMFileManagerThumbnailItems.d.ts +1 -1
- package/lib/components/base/TMFileManagerThumbnailsView.d.ts +1 -1
- package/lib/components/base/TMFileManagerUtils.d.ts +4 -6
- 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/TMSpinner.d.ts +3 -2
- package/lib/components/base/TMTab.d.ts +4 -3
- package/lib/components/base/TMTabControl.js +208 -208
- package/lib/components/base/TMTooltip.d.ts +1 -1
- package/lib/components/base/TMTreeView.d.ts +16 -8
- package/lib/components/base/TMTreeView.js +31 -5
- 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 +3 -2
- package/lib/components/base/waitPanel/TMWaitPanelView.d.ts +2 -1
- package/lib/components/base/waitPanel/TMWaitPanelView.js +207 -207
- package/lib/components/choosers/TMDynDataListItemChooser.d.ts +1 -1
- package/lib/components/choosers/TMInvoiceRetrieveFormats.d.ts +2 -1
- package/lib/components/choosers/TMOrderRetrieveFormats.d.ts +2 -1
- package/lib/components/choosers/TMQuickSearchInfo.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 +20 -42
- package/lib/components/editors/TMFormulaEditor.d.ts +1 -1
- package/lib/components/editors/TMHtmlContentDisplay.d.ts +2 -1
- package/lib/components/editors/TMHtmlEditor.d.ts +2 -1
- 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/documents/TMDcmtForm.js +31 -31
- 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/TMDcmtPreview.d.ts +8 -6
- 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/TMFileUploader.js +21 -21
- package/lib/components/features/documents/TMMasterDetailDcmts.js +62 -6
- package/lib/components/features/documents/TMMasterInfoFields.d.ts +2 -1
- package/lib/components/features/documents/TMMergeToPdfForm.d.ts +2 -1
- package/lib/components/features/documents/TMMultiMasterDetailDcmtsForm.d.ts +2 -1
- package/lib/components/features/documents/TMMultiMasterDetailDcmtsUtils.d.ts +4 -4
- package/lib/components/features/documents/TMRelationViewer.d.ts +2 -2
- package/lib/components/features/documents/TMRelationViewer.js +13 -3
- package/lib/components/features/documents/relationTreeState.d.ts +2 -0
- package/lib/components/features/search/TMDcmtCheckoutInfoForm.d.ts +2 -1
- package/lib/components/features/search/TMMetadataOutputForm.d.ts +2 -1
- package/lib/components/features/search/TMMetadataSorterForm.d.ts +2 -1
- package/lib/components/features/search/TMSavedQuerySelector.d.ts +2 -2
- package/lib/components/features/search/TMSearch.d.ts +2 -1
- package/lib/components/features/search/TMSearchQueryPanel.d.ts +9 -3
- package/lib/components/features/search/TMSearchResult.js +4 -5
- 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/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/wg/TMWGsCopyMoveForm.js +9 -9
- package/lib/components/features/workflow/TMWorkflowPopup.d.ts +8 -7
- package/lib/components/features/workflow/diagram/WorkitemRecipientsEditor.d.ts +3 -1
- package/lib/components/forms/Login/ChangePasswordInputs.d.ts +3 -1
- package/lib/components/forms/Login/Chooser.d.ts +2 -2
- 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/TMBlogHeader.d.ts +1 -1
- package/lib/components/grids/TMBlogsPost.d.ts +1 -1
- package/lib/components/grids/TMBlogsPostUtils.d.ts +9 -9
- package/lib/components/grids/TMValidationItemsList.d.ts +2 -1
- package/lib/components/layout/panelManager/TMPanelManagerContainer.d.ts +2 -1
- package/lib/components/layout/panelManager/TMPanelManagerContainer.js +12 -12
- package/lib/components/layout/panelManager/TMPanelManagerContext.d.ts +2 -2
- package/lib/components/layout/panelManager/TMPanelManagerLoader.d.ts +2 -1
- package/lib/components/layout/panelManager/TMPanelManagerToolbar.d.ts +5 -6
- 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/query/TMQueryEditor.d.ts +14 -10
- package/lib/components/settings/SettingsAppearance.d.ts +2 -1
- package/lib/components/sidebar/TMAboutApp.d.ts +2 -1
- package/lib/components/sidebar/TMCommandsPanel.d.ts +4 -4
- 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/helper/TMAppUpdatedModal.d.ts +2 -1
- package/lib/helper/TMAppUpdatedModal.js +93 -93
- package/lib/helper/TMCommandsContextMenu.d.ts +1 -1
- package/lib/helper/TMIcons.d.ts +281 -281
- package/lib/helper/TMPdfViewer.d.ts +2 -1
- package/lib/helper/TMToppyMessage.d.ts +2 -2
- package/lib/helper/TMUtils.d.ts +10 -4
- package/lib/helper/helpers.d.ts +1 -1
- package/lib/hooks/useDcmtOperations.js +1 -1
- package/lib/hooks/useInputDialog.d.ts +2 -1
- package/lib/services/platform_services.d.ts +3 -2
- package/package.json +2 -2
|
@@ -11,5 +11,5 @@ interface TMToppyDraggableHelpCenterProps {
|
|
|
11
11
|
/** Callback chiamato quando si clicca sull'immagine di Toppy */
|
|
12
12
|
onToppyImageClick?: () => void;
|
|
13
13
|
}
|
|
14
|
-
declare const TMToppyDraggableHelpCenter: (props: TMToppyDraggableHelpCenterProps) =>
|
|
14
|
+
declare const TMToppyDraggableHelpCenter: (props: TMToppyDraggableHelpCenterProps) => React.JSX.Element;
|
|
15
15
|
export default TMToppyDraggableHelpCenter;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import React from 'react';
|
|
1
2
|
import { BlogPost, UserDescriptor } from "@topconsultnpm/sdk-ts";
|
|
2
3
|
import { FileItem } from '../../base/TMFileManagerUtils';
|
|
3
4
|
import { TMBlogContextDescriptor } from '../../grids/TMBlogsPostUtils';
|
|
@@ -18,5 +19,5 @@ interface TMBlogCommentFormProps {
|
|
|
18
19
|
/** External save handler - when provided, bypasses internal engine logic */
|
|
19
20
|
onCustomSave?: (blogPost: BlogPost) => Promise<void>;
|
|
20
21
|
}
|
|
21
|
-
declare const TMBlogCommentForm: (props: TMBlogCommentFormProps) =>
|
|
22
|
+
declare const TMBlogCommentForm: (props: TMBlogCommentFormProps) => React.JSX.Element;
|
|
22
23
|
export default TMBlogCommentForm;
|
|
@@ -1910,35 +1910,35 @@ const TMDcmtPreviewWrapper = ({ refreshPreviewTrigger, fromDTD, currentDcmt, lay
|
|
|
1910
1910
|
_jsx(TMDcmtPreview, { dcmtData: currentDcmt, isVisible: isVisible, onClosePanel: (!isMobile && countVisibleLeafPanels() > 1) ? () => setPanelVisibilityById('tmDcmtPreview', false) : undefined, allowMaximize: !isMobile && countVisibleLeafPanels() > 1, onMaximizePanel: (!isMobile && countVisibleLeafPanels() > 1) ? () => toggleMaximize("tmDcmtPreview") : undefined, onBack: onBack, isResizingActive: isResizingActive, onFileRetrieved: onFileRetrieved }, refreshPreviewTrigger) :
|
|
1911
1911
|
_jsx(TMFileUploader, { fromDTD: fromDTD, onFileUpload: onFileUpload, openFileUploaderPdfEditor: openFileUploaderPdfEditor, onClose: (!isMobile && countVisibleLeafPanels() > 1) ? () => setPanelVisibilityById('tmDcmtPreview', false) : undefined, isRequired: fromDTD?.archiveConstraint === ArchiveConstraints.ContentCompulsory && dcmtFile === null, defaultBlob: dcmtFile, deviceType: deviceType, isResizingActive: isResizingActive, enableDragDropOverlay: panelVisibility['tmDcmtPreview'] && enableDragDropOverlay, onScanRequest: onScanRequest }));
|
|
1912
1912
|
};
|
|
1913
|
-
const Ribbon = styled.div `
|
|
1914
|
-
font-size: 0.85rem;
|
|
1915
|
-
font-weight: 600;
|
|
1916
|
-
color: #fff;
|
|
1917
|
-
text-shadow: 0 1px 2px rgba(0, 0, 0, 0.25);
|
|
1918
|
-
--f: .4em; /* control the folded part */
|
|
1919
|
-
position: absolute;
|
|
1920
|
-
top: 2px;
|
|
1921
|
-
left: 2px;
|
|
1922
|
-
z-index: 1200;
|
|
1923
|
-
line-height: 1.6;
|
|
1924
|
-
padding-inline: 0.8lh;
|
|
1925
|
-
padding-bottom: var(--f);
|
|
1926
|
-
border-image: conic-gradient(#0008 0 0) 51%/var(--f);
|
|
1927
|
-
clip-path: polygon(100% calc(100% - var(--f)),100% 100%,calc(100% - var(--f)) calc(100% - var(--f)),var(--f) calc(100% - var(--f)), 0 100%,0 calc(100% - var(--f)),999px calc(100% - var(--f) - 999px),calc(100% - 999px) calc(100% - var(--f) - 999px));
|
|
1928
|
-
transform: translate(calc((cos(45deg) - 1)*100%), -100%) rotate(-45deg);
|
|
1929
|
-
transform-origin: 100% 100%;
|
|
1930
|
-
background-color: rgba(217, 148, 13, 0.92);
|
|
1931
|
-
display: inline-block;
|
|
1932
|
-
padding-top: 0.1em;
|
|
1933
|
-
white-space: nowrap;
|
|
1934
|
-
transition: ${props => props.$isMobile ? 'none' : 'all 0.3s ease'};
|
|
1935
|
-
cursor: 'default';
|
|
1936
|
-
|
|
1937
|
-
${props => !props.$isMobile && `
|
|
1938
|
-
&:hover {
|
|
1939
|
-
background-color: #d9940d;
|
|
1940
|
-
font-size: 1.1rem;
|
|
1941
|
-
transform: translate(calc((cos(45deg) - 1)*100%), -100%) rotate(-45deg) scale(1.05);
|
|
1942
|
-
}
|
|
1943
|
-
`}
|
|
1913
|
+
const Ribbon = styled.div `
|
|
1914
|
+
font-size: 0.85rem;
|
|
1915
|
+
font-weight: 600;
|
|
1916
|
+
color: #fff;
|
|
1917
|
+
text-shadow: 0 1px 2px rgba(0, 0, 0, 0.25);
|
|
1918
|
+
--f: .4em; /* control the folded part */
|
|
1919
|
+
position: absolute;
|
|
1920
|
+
top: 2px;
|
|
1921
|
+
left: 2px;
|
|
1922
|
+
z-index: 1200;
|
|
1923
|
+
line-height: 1.6;
|
|
1924
|
+
padding-inline: 0.8lh;
|
|
1925
|
+
padding-bottom: var(--f);
|
|
1926
|
+
border-image: conic-gradient(#0008 0 0) 51%/var(--f);
|
|
1927
|
+
clip-path: polygon(100% calc(100% - var(--f)),100% 100%,calc(100% - var(--f)) calc(100% - var(--f)),var(--f) calc(100% - var(--f)), 0 100%,0 calc(100% - var(--f)),999px calc(100% - var(--f) - 999px),calc(100% - 999px) calc(100% - var(--f) - 999px));
|
|
1928
|
+
transform: translate(calc((cos(45deg) - 1)*100%), -100%) rotate(-45deg);
|
|
1929
|
+
transform-origin: 100% 100%;
|
|
1930
|
+
background-color: rgba(217, 148, 13, 0.92);
|
|
1931
|
+
display: inline-block;
|
|
1932
|
+
padding-top: 0.1em;
|
|
1933
|
+
white-space: nowrap;
|
|
1934
|
+
transition: ${props => props.$isMobile ? 'none' : 'all 0.3s ease'};
|
|
1935
|
+
cursor: 'default';
|
|
1936
|
+
|
|
1937
|
+
${props => !props.$isMobile && `
|
|
1938
|
+
&:hover {
|
|
1939
|
+
background-color: #d9940d;
|
|
1940
|
+
font-size: 1.1rem;
|
|
1941
|
+
transform: translate(calc((cos(45deg) - 1)*100%), -100%) rotate(-45deg) scale(1.05);
|
|
1942
|
+
}
|
|
1943
|
+
`}
|
|
1944
1944
|
`;
|
|
@@ -41,5 +41,5 @@ interface TMDcmtFormActionButtonsProps {
|
|
|
41
41
|
setShowMoreInfoTaskPopup: React.Dispatch<React.SetStateAction<boolean>>;
|
|
42
42
|
setShowMoreInfoTaskTask: React.Dispatch<React.SetStateAction<TaskDescriptor | undefined>>;
|
|
43
43
|
}
|
|
44
|
-
declare const TMDcmtFormActionButtons: (props: TMDcmtFormActionButtonsProps) =>
|
|
44
|
+
declare const TMDcmtFormActionButtons: (props: TMDcmtFormActionButtonsProps) => React.JSX.Element;
|
|
45
45
|
export default TMDcmtFormActionButtons;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import React from 'react';
|
|
1
2
|
import { DcmtInfo, DownloadModes, DownloadTypes } from '../../../ts';
|
|
2
3
|
import { FileDescriptor } from '@topconsultnpm/sdk-ts';
|
|
3
4
|
interface ITMDcmtIconProps {
|
|
@@ -14,5 +15,5 @@ interface ITMDcmtIconProps {
|
|
|
14
15
|
openInOffice?: (selectedDcmtsOrFocused: Array<DcmtInfo>) => Promise<void>;
|
|
15
16
|
onDownloadDcmtsAsync?: (inputDcmts: DcmtInfo[] | undefined, downloadType: DownloadTypes, downloadMode: DownloadModes, onFileDownloaded?: (dcmtFile: File | undefined) => void, confirmAttachments?: (list: FileDescriptor[]) => Promise<string[] | undefined>) => Promise<void>;
|
|
16
17
|
}
|
|
17
|
-
declare const TMDcmtIcon: ({ fileExtension, fileCount, isLexProt, isSigned, isMail, isShared, tid, did, downloadMode, tooltipContent, openInOffice, onDownloadDcmtsAsync }: ITMDcmtIconProps) =>
|
|
18
|
+
declare const TMDcmtIcon: ({ fileExtension, fileCount, isLexProt, isSigned, isMail, isShared, tid, did, downloadMode, tooltipContent, openInOffice, onDownloadDcmtsAsync }: ITMDcmtIconProps) => React.JSX.Element;
|
|
18
19
|
export default TMDcmtIcon;
|
|
@@ -27,10 +27,12 @@ export declare const TMNothingToShow: ({ text, secondText, fileExt, icon }: {
|
|
|
27
27
|
secondText?: any;
|
|
28
28
|
fileExt?: string;
|
|
29
29
|
icon?: any;
|
|
30
|
-
}) =>
|
|
31
|
-
export declare const StyledHeaderIcon: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").
|
|
30
|
+
}) => React.JSX.Element;
|
|
31
|
+
export declare const StyledHeaderIcon: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components/dist/types").Merged<Omit<React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "style"> & {
|
|
32
|
+
style?: React.CSSProperties | import("styled-components/dist/types").CSSPropertiesWithVars | undefined;
|
|
33
|
+
}, {
|
|
32
34
|
$color: string;
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
35
|
+
}>> & string;
|
|
36
|
+
export declare const StyledPanelStatusContainer: import("styled-components/dist/types").IStyledComponentBase<"web", Omit<React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "style"> & {
|
|
37
|
+
style?: React.CSSProperties | import("styled-components/dist/types").CSSPropertiesWithVars | undefined;
|
|
38
|
+
}> & string;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import React from "react";
|
|
1
2
|
import { FormModes, TaskContext } from "../../../ts";
|
|
2
3
|
import { HomeBlogPost, TaskDescriptor } from "@topconsultnpm/sdk-ts";
|
|
3
4
|
interface TMDcmtTasksProps {
|
|
@@ -12,5 +13,5 @@ interface TMDcmtTasksProps {
|
|
|
12
13
|
handleNavigateToDossiers?: (value: HomeBlogPost | number) => Promise<void>;
|
|
13
14
|
onBack?: () => void;
|
|
14
15
|
}
|
|
15
|
-
declare const TMDcmtTasks: (props: TMDcmtTasksProps) =>
|
|
16
|
+
declare const TMDcmtTasks: (props: TMDcmtTasksProps) => React.JSX.Element;
|
|
16
17
|
export default TMDcmtTasks;
|
|
@@ -2,5 +2,5 @@ interface TMDragDropOverlayProps {
|
|
|
2
2
|
handleFile: (file: File) => void;
|
|
3
3
|
refocusAfterFileInput: () => void;
|
|
4
4
|
}
|
|
5
|
-
declare const TMDragDropOverlay: (props: TMDragDropOverlayProps) => import("react
|
|
5
|
+
declare const TMDragDropOverlay: (props: TMDragDropOverlayProps) => import("react").JSX.Element;
|
|
6
6
|
export default TMDragDropOverlay;
|
|
@@ -112,27 +112,27 @@ const TMFileUploader = ({ fromDTD, deviceType = DeviceType.DESKTOP, onClose, onF
|
|
|
112
112
|
}, [deviceType, fromDTD, onClose]);
|
|
113
113
|
return showTMPanel ? (_jsx(TMPanel, { ref: fileUploaderPanelRef, panelID: 'file-uploader-panel', title: SDKUI_Localizator.FileUpload, onBack: deviceType === DeviceType.MOBILE ? () => onClose?.() : undefined, toolbar: toolbar, children: innerContent })) : (innerContent);
|
|
114
114
|
};
|
|
115
|
-
const UploadContainer = styled.div `
|
|
116
|
-
position: relative;
|
|
117
|
-
display: flex;
|
|
118
|
-
align-items: center;
|
|
119
|
-
justify-content: center;
|
|
120
|
-
flex-direction: column;
|
|
121
|
-
gap: 5px;
|
|
122
|
-
border: 2px dashed ${props => props.$isRequired ? () => TMColors.error : () => TMColors.primaryColor};
|
|
123
|
-
/* max-height: 100px; */
|
|
124
|
-
width: 100%;
|
|
125
|
-
height: 100%;
|
|
126
|
-
border-radius: 8px;
|
|
127
|
-
padding: 30px;
|
|
128
|
-
text-align: center;
|
|
129
|
-
color: ${props => props.$isRequired ? () => TMColors.error : () => TMColors.primaryColor};
|
|
130
|
-
transition: background-color 0.3s;
|
|
131
|
-
&:hover {
|
|
132
|
-
background-color: #658cab;
|
|
133
|
-
}
|
|
115
|
+
const UploadContainer = styled.div `
|
|
116
|
+
position: relative;
|
|
117
|
+
display: flex;
|
|
118
|
+
align-items: center;
|
|
119
|
+
justify-content: center;
|
|
120
|
+
flex-direction: column;
|
|
121
|
+
gap: 5px;
|
|
122
|
+
border: 2px dashed ${props => props.$isRequired ? () => TMColors.error : () => TMColors.primaryColor};
|
|
123
|
+
/* max-height: 100px; */
|
|
124
|
+
width: 100%;
|
|
125
|
+
height: 100%;
|
|
126
|
+
border-radius: 8px;
|
|
127
|
+
padding: 30px;
|
|
128
|
+
text-align: center;
|
|
129
|
+
color: ${props => props.$isRequired ? () => TMColors.error : () => TMColors.primaryColor};
|
|
130
|
+
transition: background-color 0.3s;
|
|
131
|
+
&:hover {
|
|
132
|
+
background-color: #658cab;
|
|
133
|
+
}
|
|
134
134
|
`;
|
|
135
|
-
const HiddenInput = styled.input `
|
|
136
|
-
display: none;
|
|
135
|
+
const HiddenInput = styled.input `
|
|
136
|
+
display: none;
|
|
137
137
|
`;
|
|
138
138
|
export default TMFileUploader;
|
|
@@ -3,7 +3,7 @@ import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
|
|
|
3
3
|
import { AppModules, DcmtTypeListCacheService, LayoutModes, ObjectClasses, SDK_Globals, SDK_Localizator } from '@topconsultnpm/sdk-ts';
|
|
4
4
|
import TMRelationViewer from './TMRelationViewer';
|
|
5
5
|
import TMContextMenu from '../../NewComponents/ContextMenu/TMContextMenu';
|
|
6
|
-
import { IconMultipleSelection, IconCheckFile, IconDetailDcmts, SDKUI_Localizator, IconMenuVertical, IconDataList, IconPreview, IconSearchCheck, IconBoard, IconDcmtTypeSys, IconShow, getMoreInfoTasksForDocument, isApprovalWorkflowView, searchResultToMetadataValues, IconRefresh, SDKUI_Globals } from '../../../helper';
|
|
6
|
+
import { IconMultipleSelection, IconCheckFile, IconDetailDcmts, SDKUI_Localizator, IconMenuVertical, IconDataList, IconPreview, IconSearchCheck, IconBoard, IconDcmtTypeSys, IconShow, getMoreInfoTasksForDocument, isApprovalWorkflowView, searchResultToMetadataValues, IconRefresh, SDKUI_Globals, mergeSearchResultsAppend, generateUniqueColumnKeys } from '../../../helper';
|
|
7
7
|
import { FormModes, SearchResultContext } from '../../../ts';
|
|
8
8
|
import { TMColors } from '../../../utils/theme';
|
|
9
9
|
import ShowAlert from '../../base/TMAlert';
|
|
@@ -515,6 +515,7 @@ const TMRelationViewerWrapper = ({ refreshKey, inputDcmts, isForMaster, showCurr
|
|
|
515
515
|
const { setPanelVisibilityById, setToolbarButtonVisibility } = useTMPanelManagerContext();
|
|
516
516
|
// Monitor device type changes to restore panel visibility when switching from mobile to desktop
|
|
517
517
|
const deviceType = useDeviceType();
|
|
518
|
+
const isMobile = deviceType === DeviceType.MOBILE;
|
|
518
519
|
const prevDeviceTypeRef = useRef(deviceType);
|
|
519
520
|
// Restore panel visibility when switching from mobile to desktop
|
|
520
521
|
useEffect(() => {
|
|
@@ -543,8 +544,11 @@ const TMRelationViewerWrapper = ({ refreshKey, inputDcmts, isForMaster, showCurr
|
|
|
543
544
|
}
|
|
544
545
|
}, [deviceType, focusedItem, setPanelVisibilityById, setToolbarButtonVisibility]);
|
|
545
546
|
// Handle focused item changes with panel visibility management
|
|
546
|
-
const handleFocusedItemChanged = useCallback((item) => {
|
|
547
|
+
const handleFocusedItemChanged = useCallback((item, isAutoFocus) => {
|
|
547
548
|
onFocusedItemChanged?.(item);
|
|
549
|
+
// In mobile il fuoco automatico non lascia la lista
|
|
550
|
+
if (isAutoFocus && isMobile)
|
|
551
|
+
return;
|
|
548
552
|
// Toggle panels based on item type
|
|
549
553
|
if (item?.isDcmt) {
|
|
550
554
|
setPanelVisibilityById('tmSearchResult', false);
|
|
@@ -558,26 +562,78 @@ const TMRelationViewerWrapper = ({ refreshKey, inputDcmts, isForMaster, showCurr
|
|
|
558
562
|
setToolbarButtonVisibility('tmSearchResult', true);
|
|
559
563
|
setToolbarButtonVisibility('tmDcmtForm', false);
|
|
560
564
|
}
|
|
561
|
-
}, [onFocusedItemChanged, setPanelVisibilityById, setToolbarButtonVisibility]);
|
|
565
|
+
}, [onFocusedItemChanged, isMobile, setPanelVisibilityById, setToolbarButtonVisibility]);
|
|
562
566
|
const onContextMenu = useCallback((item, e) => {
|
|
563
567
|
// Ferma la propagazione per evitare che l'evento arrivi al div contenitore
|
|
564
568
|
// (che ha il suo handler per il context menu sullo spazio bianco)
|
|
565
569
|
e.stopPropagation();
|
|
566
|
-
|
|
570
|
+
// In mobile (pressione prolungata) solo il fuoco: cambiare pannello aprirebbe il form sotto il menu
|
|
571
|
+
if (isMobile)
|
|
572
|
+
onFocusedItemChanged?.(item);
|
|
573
|
+
else
|
|
574
|
+
handleFocusedItemChanged(item);
|
|
567
575
|
// Il setTimeout è necessario per permettere a React di completare il re-render
|
|
568
576
|
// dopo il cambio di focus (handleFocusedItemChanged aggiorna stato e visibilità pannelli).
|
|
569
577
|
// Senza il delay, il context menu potrebbe mostrare opzioni basate sul vecchio stato.
|
|
570
578
|
setTimeout(() => {
|
|
571
579
|
onItemContextMenu?.(item, e);
|
|
572
580
|
}, 100);
|
|
573
|
-
}, [onItemContextMenu, handleFocusedItemChanged]);
|
|
581
|
+
}, [onItemContextMenu, handleFocusedItemChanged, onFocusedItemChanged, isMobile]);
|
|
574
582
|
return (_jsx(TMRelationViewer, { inputDcmts: inputDcmts, isForMaster: isForMaster, showCurrentDcmtIndicator: showCurrentDcmtIndicator, initialShowZeroDcmts: showZeroDcmts, customItemRender: customItemRender, allowMultipleSelection: allowMultipleSelection, focusedItem: focusedItem, selectedItems: selectedItems, onFocusedItemChanged: handleFocusedItemChanged, onSelectedItemsChanged: onSelectedItemsChanged, maxDepthLevel: 1, invertMasterNavigation: false, showExpandAllButton: true, onNoRelationsFound: onNoRelationsFound, onItemContextMenu: onContextMenu, onLoadingStateChanged: onLoadingStateChanged, onStopCalculationReady: onStopCalculationReady, onCalculationStopped: onCalculationStopped, initialTreeState: initialTreeState, onTreeStateChange: onTreeStateChange }, refreshKey));
|
|
575
583
|
};
|
|
584
|
+
/**
|
|
585
|
+
* Una cartella raccoglie un risultato per ogni documento di partenza: quelli con lo stesso TID
|
|
586
|
+
* si uniscono, così la griglia mostra tutti i figli e non solo il primo risultato.
|
|
587
|
+
*/
|
|
588
|
+
const mergeSearchResultsByTID = (searchResults) => {
|
|
589
|
+
if (searchResults.length <= 1)
|
|
590
|
+
return searchResults;
|
|
591
|
+
// Si uniscono solo risultati con le stesse colonne della griglia: altrimenti le righe non sarebbero allineate
|
|
592
|
+
const groups = new Map();
|
|
593
|
+
for (const sr of searchResults) {
|
|
594
|
+
const groupKey = `${sr.fromTID}|${generateUniqueColumnKeys(sr.dtdResult?.columns, sr.fromTID).join(',')}`;
|
|
595
|
+
groups.set(groupKey, [...(groups.get(groupKey) ?? []), sr]);
|
|
596
|
+
}
|
|
597
|
+
return [...groups.values()].map(group => {
|
|
598
|
+
// mergeSearchResultsAppend mette in cima le righe del secondo argomento: da destra si mantiene l'ordine
|
|
599
|
+
const merged = group.reduceRight((acc, sr) => mergeSearchResultsAppend(acc, sr), undefined) ?? group[0];
|
|
600
|
+
if (group.length === 1 || !merged.dtdResult?.rows)
|
|
601
|
+
return merged;
|
|
602
|
+
// Lo stesso documento può comparire sotto più documenti di partenza: come nell'albero, una volta sola
|
|
603
|
+
const didIndex = merged.dtdResult.columns?.findIndex(col => col.caption?.toUpperCase() === 'DID') ?? -1;
|
|
604
|
+
if (didIndex < 0)
|
|
605
|
+
return merged;
|
|
606
|
+
const seenDIDs = new Set();
|
|
607
|
+
const rows = merged.dtdResult.rows.filter(row => {
|
|
608
|
+
if (seenDIDs.has(row[didIndex]))
|
|
609
|
+
return false;
|
|
610
|
+
seenDIDs.add(row[didIndex]);
|
|
611
|
+
return true;
|
|
612
|
+
});
|
|
613
|
+
if (rows.length === merged.dtdResult.rows.length)
|
|
614
|
+
return merged;
|
|
615
|
+
// Copia: merged può essere uno dei risultati originali dell'albero
|
|
616
|
+
const deduped = structuredClone(merged);
|
|
617
|
+
deduped.dtdResult.rows = rows;
|
|
618
|
+
deduped.dcmtsFound = deduped.dcmtsReturned = rows.length;
|
|
619
|
+
return deduped;
|
|
620
|
+
});
|
|
621
|
+
};
|
|
576
622
|
const TMFormOrResultWrapper = ({ refreshKey, deviceType, focusedItem, onTaskCreateRequest, allTasks = [], getAllTasks, deleteTaskByIdsCallback, addTaskCallback, editTaskCallback, handleNavigateToWGs, handleNavigateToDossiers, onRefreshAfterAddDcmtToFavs, editPdfForm, openS4TViewer, onOpenS4TViewerRequest, onOpenPdfEditorRequest, onRefreshSearchAsyncDatagrid, onRefreshSearchResults, handleNavigateToReference, fetchRemoteCertificates }) => {
|
|
577
623
|
const { setPanelVisibilityById } = useTMPanelManagerContext();
|
|
624
|
+
// Il back azzera la selezione di TMSearchResult: si rimonta, altrimenti la stessa cartella resterebbe vuota
|
|
625
|
+
const [searchResultMountKey, setSearchResultMountKey] = useState(0);
|
|
626
|
+
const handleSearchResultClose = useCallback(() => {
|
|
627
|
+
setPanelVisibilityById('tmTreeView', true);
|
|
628
|
+
setSearchResultMountKey(prev => prev + 1);
|
|
629
|
+
}, [setPanelVisibilityById]);
|
|
630
|
+
// Memo: TMSearchResult ricarica a ogni nuovo riferimento di searchResults
|
|
631
|
+
const searchResults = useMemo(() => mergeSearchResultsByTID(focusedItem?.searchResult ?? []), [focusedItem?.searchResult]);
|
|
578
632
|
return (_jsx(_Fragment, { children: focusedItem?.isDcmt ?
|
|
579
633
|
_jsx(TMDcmtForm, { groupId: 'tmFormOrResult', TID: focusedItem?.tid, DID: focusedItem.did, allowButtonsRefs: true, isClosable: deviceType !== DeviceType.MOBILE, allowNavigation: false, allowRelations: deviceType !== DeviceType.MOBILE, showDcmtFormSidebar: false, onClose: () => { setPanelVisibilityById('tmTreeView', true); }, allTasks: allTasks, getAllTasks: getAllTasks, deleteTaskByIdsCallback: deleteTaskByIdsCallback, addTaskCallback: addTaskCallback, editTaskCallback: editTaskCallback, handleNavigateToWGs: handleNavigateToWGs, handleNavigateToDossiers: handleNavigateToDossiers, onReferenceClick: handleNavigateToReference, moreInfoTasks: getMoreInfoTasksForDocument(allTasks, focusedItem?.tid, focusedItem?.did), openS4TViewer: openS4TViewer, onOpenS4TViewerRequest: onOpenS4TViewerRequest, onOpenPdfEditorRequest: onOpenPdfEditorRequest, datagridUtility: {
|
|
580
634
|
onRefreshSearchAsyncDatagrid,
|
|
581
635
|
}, fetchRemoteCertificates: fetchRemoteCertificates }, refreshKey) :
|
|
582
|
-
focusedItem?.searchResult === undefined ? (_jsx(TMPanel, { title: SDKUI_Localizator.SearchResult,
|
|
636
|
+
focusedItem?.searchResult === undefined ? (_jsx(TMPanel, { title: SDKUI_Localizator.SearchResult,
|
|
637
|
+
// In mobile è l'unico pannello a video: senza back non si torna all'albero
|
|
638
|
+
onBack: deviceType === DeviceType.MOBILE ? () => setPanelVisibilityById('tmTreeView', true) : undefined, children: _jsx(TMToppyMessage, { message: SDKUI_Localizator.SelectDocumentToViewSearchResults }) })) : (_jsx(TMSearchResult, { groupId: 'tmFormOrResult', isClosable: deviceType !== DeviceType.MOBILE, context: SearchResultContext.METADATA_SEARCH, allowFloatingBar: false, allowRelations: false, openDcmtFormAsModal: true, searchResults: searchResults, showSearchResultSidebar: false, showDcmtFormSidebar: false, autoFocusFirstRow: false, onTaskCreateRequest: onTaskCreateRequest, onClose: handleSearchResultClose, allTasks: allTasks, getAllTasks: getAllTasks, deleteTaskByIdsCallback: deleteTaskByIdsCallback, addTaskCallback: addTaskCallback, editTaskCallback: editTaskCallback, handleNavigateToWGs: handleNavigateToWGs, handleNavigateToDossiers: handleNavigateToDossiers, editPdfForm: editPdfForm, onOpenPdfEditorRequest: onOpenPdfEditorRequest, openS4TViewer: openS4TViewer, onOpenS4TViewerRequest: onOpenS4TViewerRequest, enablePinIcons: false, onRefreshAfterAddDcmtToFavs: onRefreshAfterAddDcmtToFavs, onRefreshSearchAsyncDatagrid: onRefreshSearchResults, onReferenceClick: handleNavigateToReference, fetchRemoteCertificates: fetchRemoteCertificates }, `${refreshKey}-${searchResultMountKey}`)) }));
|
|
583
639
|
};
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import React from 'react';
|
|
1
2
|
import { DcmtTypeDescriptor } from '@topconsultnpm/sdk-ts';
|
|
2
3
|
import { DcmtInfo } from '../../../ts';
|
|
3
4
|
interface TMMasterInfoFieldsProps {
|
|
@@ -15,5 +16,5 @@ interface TMMasterInfoFieldsProps {
|
|
|
15
16
|
*/
|
|
16
17
|
isExpandedView?: boolean;
|
|
17
18
|
}
|
|
18
|
-
declare const TMMasterInfoFields: ({ dtd, dcmt, getValuesByMidAsync, reloadToken, isExpandedView }: TMMasterInfoFieldsProps) =>
|
|
19
|
+
declare const TMMasterInfoFields: ({ dtd, dcmt, getValuesByMidAsync, reloadToken, isExpandedView }: TMMasterInfoFieldsProps) => React.JSX.Element;
|
|
19
20
|
export default TMMasterInfoFields;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import React from 'react';
|
|
1
2
|
import { DcmtInfo } from '../../../ts';
|
|
2
3
|
import { HomeBlogPost, TaskDescriptor } from '@topconsultnpm/sdk-ts';
|
|
3
4
|
import { TMCopyToFolderMode } from '../../../hooks/useDocumentOperations';
|
|
@@ -19,5 +20,5 @@ interface ITMMergeToPdfFormProps {
|
|
|
19
20
|
* Form per l'unione di più documenti PDF in un singolo file.
|
|
20
21
|
* Condivide TMDownloadRelationViewerSection e gli helper in copyAndMergeDcmtsShared con TMCopyToFolderForm.
|
|
21
22
|
*/
|
|
22
|
-
declare const TMMergeToPdfForm: (props: ITMMergeToPdfFormProps) =>
|
|
23
|
+
declare const TMMergeToPdfForm: (props: ITMMergeToPdfFormProps) => React.JSX.Element;
|
|
23
24
|
export default TMMergeToPdfForm;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import React from "react";
|
|
1
2
|
import { DcmtTypeDescriptor, HomeBlogPost, ObjectRef, TaskDescriptor } from "@topconsultnpm/sdk-ts";
|
|
2
3
|
import { DcmtInfo, IGraphometricManagerProp, TaskContext } from "../../../ts";
|
|
3
4
|
import { IntesiCertificateData } from "../../../helper";
|
|
@@ -41,5 +42,5 @@ interface TMMultiMasterDetailDcmtsFormProps {
|
|
|
41
42
|
}>, tid?: number) => void;
|
|
42
43
|
openWGsCopyMoveForm?: (mode: "copyToWgDraft" | "copyToWgArchivedDoc", dcmtTypeDescriptor: DcmtTypeDescriptor, documents: Array<DcmtInfo>) => void;
|
|
43
44
|
}
|
|
44
|
-
declare const TMMultiMasterDetailDcmtsForm: (props: TMMultiMasterDetailDcmtsFormProps) =>
|
|
45
|
+
declare const TMMultiMasterDetailDcmtsForm: (props: TMMultiMasterDetailDcmtsFormProps) => React.JSX.Element | null;
|
|
45
46
|
export default TMMultiMasterDetailDcmtsForm;
|
|
@@ -312,7 +312,7 @@ export interface RenderStepperParams {
|
|
|
312
312
|
/** Click su uno step completato: riceve la fase di destinazione */
|
|
313
313
|
onStepClick: (phase: number) => void;
|
|
314
314
|
}
|
|
315
|
-
export declare const renderStepper: ({ steps, phase, hasMultipleTypes, isBackLocked, showBackArrow, onBack, onStepClick }: RenderStepperParams) =>
|
|
315
|
+
export declare const renderStepper: ({ steps, phase, hasMultipleTypes, isBackLocked, showBackArrow, onBack, onStepClick }: RenderStepperParams) => React.JSX.Element;
|
|
316
316
|
export interface RenderSelectDcmtTypeParams {
|
|
317
317
|
/** Relazioni di dettaglio fra cui scegliere */
|
|
318
318
|
detailRelationItems: Array<DetailRelationItem>;
|
|
@@ -321,7 +321,7 @@ export interface RenderSelectDcmtTypeParams {
|
|
|
321
321
|
/** Selezione di una relazione */
|
|
322
322
|
onSelectRelation: (item: DetailRelationItem) => void;
|
|
323
323
|
}
|
|
324
|
-
export declare const renderSelectDcmtType: ({ detailRelationItems, selectedRelation, onSelectRelation }: RenderSelectDcmtTypeParams) =>
|
|
324
|
+
export declare const renderSelectDcmtType: ({ detailRelationItems, selectedRelation, onSelectRelation }: RenderSelectDcmtTypeParams) => React.JSX.Element;
|
|
325
325
|
export interface RenderAccordionHeaderParams {
|
|
326
326
|
/** Sezione a cui appartiene la testata */
|
|
327
327
|
section: AccordionSection;
|
|
@@ -340,7 +340,7 @@ export interface RenderAccordionHeaderParams {
|
|
|
340
340
|
/** Apre/chiude la sezione */
|
|
341
341
|
onToggleOpen: (section: AccordionSection, isOpen: boolean) => void;
|
|
342
342
|
}
|
|
343
|
-
export declare const renderAccordionHeader: ({ section, isOpen, tooltip, count, title, actions, panel, onToggleOpen }: RenderAccordionHeaderParams) =>
|
|
343
|
+
export declare const renderAccordionHeader: ({ section, isOpen, tooltip, count, title, actions, panel, onToggleOpen }: RenderAccordionHeaderParams) => React.JSX.Element;
|
|
344
344
|
/**
|
|
345
345
|
* Contenuto di un pannello: il contesto del panel manager è leggibile solo dentro l'albero del
|
|
346
346
|
* provider, quindi è qui che si prende lo stato di ingrandimento da passare alla sezione
|
|
@@ -349,7 +349,7 @@ export declare const TMSummarySectionSlot: ({ section, render, onBeforeMaximize
|
|
|
349
349
|
section: AccordionSection;
|
|
350
350
|
render: (panel: SectionPanelState) => React.ReactNode;
|
|
351
351
|
onBeforeMaximize?: (section: AccordionSection) => void;
|
|
352
|
-
}) =>
|
|
352
|
+
}) => React.JSX.Element;
|
|
353
353
|
/**
|
|
354
354
|
* Segnala che l'utente ha spostato un separatore: è l'unico caso in cui le altezze dei pannelli sono
|
|
355
355
|
* una sua scelta, quindi la sola da salvare. Le quote calcolate all'apertura del riepilogo o al
|
|
@@ -50,8 +50,8 @@ export interface TMRelationViewerProps {
|
|
|
50
50
|
focusedItem?: RelationTreeItem | null;
|
|
51
51
|
/** Currently selected items (controlled) */
|
|
52
52
|
selectedItems?: RelationTreeItem[];
|
|
53
|
-
/** Callback when focused item changes */
|
|
54
|
-
onFocusedItemChanged?: (item: RelationTreeItem | null) => void;
|
|
53
|
+
/** Callback when focused item changes. `isAutoFocus`: fuoco iniziale o ripristinato, non dell'utente */
|
|
54
|
+
onFocusedItemChanged?: (item: RelationTreeItem | null, isAutoFocus?: boolean) => void;
|
|
55
55
|
/** Callback when selected items change */
|
|
56
56
|
onSelectedItemsChanged?: (items: RelationTreeItem[]) => void;
|
|
57
57
|
/** Callback fired when the internal tree data changes, providing a flattened list of all items currently rendered */
|
|
@@ -940,9 +940,19 @@ const TMRelationViewer = ({ inputDcmts, isForMaster = false, showCurrentDcmtIndi
|
|
|
940
940
|
return;
|
|
941
941
|
// Il padre azzera il fuoco all'avvio di un refresh: si conserva l'ultimo noto
|
|
942
942
|
const state = collectRelationTreeState(treeData, getInputKey(), focusedItem?.key, lastReportedStateRef.current?.focusedPath);
|
|
943
|
+
// Lo scroll non dipende dall'albero: si conserva l'ultimo
|
|
944
|
+
state.scrollTop = lastReportedStateRef.current?.scrollTop;
|
|
943
945
|
lastReportedStateRef.current = state;
|
|
944
946
|
onTreeStateChange(state);
|
|
945
947
|
}, [treeData, focusedItem, getInputKey, onTreeStateChange]);
|
|
948
|
+
/** Notifica lo scroll della lista insieme allo stato dell'albero */
|
|
949
|
+
const handleScrollTopChanged = useCallback((scrollTop) => {
|
|
950
|
+
if (!onTreeStateChange || !lastReportedStateRef.current)
|
|
951
|
+
return;
|
|
952
|
+
const state = { ...lastReportedStateRef.current, scrollTop };
|
|
953
|
+
lastReportedStateRef.current = state;
|
|
954
|
+
onTreeStateChange(state);
|
|
955
|
+
}, [onTreeStateChange]);
|
|
946
956
|
/**
|
|
947
957
|
* Notify parent with a flattened list of all items whenever the merged tree data changes.
|
|
948
958
|
*/
|
|
@@ -1037,7 +1047,7 @@ const TMRelationViewer = ({ inputDcmts, isForMaster = false, showCurrentDcmtIndi
|
|
|
1037
1047
|
if (focusPathToRestore) {
|
|
1038
1048
|
const nodeToFocus = findRelationNodeByPath(treeData, focusPathToRestore);
|
|
1039
1049
|
if (nodeToFocus) {
|
|
1040
|
-
onFocusedItemChanged(nodeToFocus);
|
|
1050
|
+
onFocusedItemChanged(nodeToFocus, true);
|
|
1041
1051
|
lastFocusedInputRef.current = currentInputKey;
|
|
1042
1052
|
return;
|
|
1043
1053
|
}
|
|
@@ -1062,7 +1072,7 @@ const TMRelationViewer = ({ inputDcmts, isForMaster = false, showCurrentDcmtIndi
|
|
|
1062
1072
|
const docNode = findFirstRootDocument(treeData);
|
|
1063
1073
|
if (docNode) {
|
|
1064
1074
|
// Set the focused item and mark this inputKey as focused
|
|
1065
|
-
onFocusedItemChanged(docNode);
|
|
1075
|
+
onFocusedItemChanged(docNode, true);
|
|
1066
1076
|
lastFocusedInputRef.current = currentInputKey;
|
|
1067
1077
|
}
|
|
1068
1078
|
}, [treeData, loadedInputKey, showMainDocument, onFocusedItemChanged, inputDcmts, getInputKey]);
|
|
@@ -1698,7 +1708,7 @@ const TMRelationViewer = ({ inputDcmts, isForMaster = false, showCurrentDcmtIndi
|
|
|
1698
1708
|
whiteSpace: 'nowrap',
|
|
1699
1709
|
outline: 'none',
|
|
1700
1710
|
transition: 'background 0.2s'
|
|
1701
|
-
}, children: [_jsx(IconChevronRight, { fontSize: 14 }), _jsx("span", { children: SDKUI_Localizator.CollapseAll })] }) })] })), _jsx("div", { style: { flex: 1, minHeight: 0, overflow: 'auto' }, children: _jsx(TMTreeView, { dataSource: mergedTreeData, itemRender: finalItemRender, calculateItemsForNode: calculateItemsForNode, onDataChanged: handleDataChanged, focusedItem: focusedItem, onFocusedItemChanged: handleFocusedItemChanged, allowMultipleSelection: allowMultipleSelection, selectedItems: selectedItems, itemsPerPage: 100, onSelectionChanged: handleSelectedItemsChanged, onItemContextMenu: isExpansionLoading ? undefined : onItemContextMenu, enableVirtualization: true, shouldDelayFocusOnEvent: (node, e) => {
|
|
1711
|
+
}, children: [_jsx(IconChevronRight, { fontSize: 14 }), _jsx("span", { children: SDKUI_Localizator.CollapseAll })] }) })] })), _jsx("div", { style: { flex: 1, minHeight: 0, overflow: 'auto' }, children: _jsx(TMTreeView, { dataSource: mergedTreeData, itemRender: finalItemRender, calculateItemsForNode: calculateItemsForNode, onDataChanged: handleDataChanged, focusedItem: focusedItem, onFocusedItemChanged: handleFocusedItemChanged, allowMultipleSelection: allowMultipleSelection, selectedItems: selectedItems, itemsPerPage: 100, onSelectionChanged: handleSelectedItemsChanged, onItemContextMenu: isExpansionLoading ? undefined : onItemContextMenu, enableVirtualization: true, initialScrollTop: initialTreeState?.scrollTop, onScrollTopChanged: onTreeStateChange ? handleScrollTopChanged : undefined, shouldDelayFocusOnEvent: (node, e) => {
|
|
1702
1712
|
// Ritarda il focus quando si clicca sull'icona del documento
|
|
1703
1713
|
// per permettere al doppio click di funzionare
|
|
1704
1714
|
const target = e.target;
|
|
@@ -14,6 +14,8 @@ export interface RelationTreeState {
|
|
|
14
14
|
*/
|
|
15
15
|
loadedPaths: string[];
|
|
16
16
|
focusedPath?: string;
|
|
17
|
+
/** Posizione di scroll della lista */
|
|
18
|
+
scrollTop?: number;
|
|
17
19
|
}
|
|
18
20
|
/** Carica i figli di un documento durante il ripristino. */
|
|
19
21
|
export type LoadChildrenFn = (node: RelationTreeItem) => Promise<RelationTreeItem[]>;
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
+
import React from "react";
|
|
1
2
|
import { DcmtInfo } from "../../../ts";
|
|
2
3
|
interface TMDcmtCheckoutInfoFormProps {
|
|
3
4
|
dtdName: string;
|
|
4
5
|
selectedDcmtOrFocused: DcmtInfo;
|
|
5
6
|
onClose: () => void;
|
|
6
7
|
}
|
|
7
|
-
declare const TMDcmtCheckoutInfoForm: (props: TMDcmtCheckoutInfoFormProps) =>
|
|
8
|
+
declare const TMDcmtCheckoutInfoForm: (props: TMDcmtCheckoutInfoFormProps) => React.JSX.Element;
|
|
8
9
|
export default TMDcmtCheckoutInfoForm;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import React from "react";
|
|
1
2
|
import { MetadataDescriptor, QueryDescriptor, SelectItem } from "@topconsultnpm/sdk-ts";
|
|
2
3
|
interface TMMetadataOutputFormProps {
|
|
3
4
|
/** QueryDescriptor da cui estrarre i metadati disponibili */
|
|
@@ -13,5 +14,5 @@ interface TMMetadataOutputFormProps {
|
|
|
13
14
|
/** Callback chiamata quando l'utente conferma la selezione dei SelectItem */
|
|
14
15
|
onChoose?: (selectItems: SelectItem[] | undefined) => void;
|
|
15
16
|
}
|
|
16
|
-
declare const TMMetadataOutputForm: (props: TMMetadataOutputFormProps) =>
|
|
17
|
+
declare const TMMetadataOutputForm: (props: TMMetadataOutputFormProps) => React.JSX.Element;
|
|
17
18
|
export default TMMetadataOutputForm;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import React from "react";
|
|
1
2
|
import { MetadataDescriptor, OrderByItem, QueryDescriptor } from "@topconsultnpm/sdk-ts";
|
|
2
3
|
interface TMMetadataSorterFormProps {
|
|
3
4
|
/** QueryDescriptor da cui estrarre i metadati disponibili */
|
|
@@ -13,5 +14,5 @@ interface TMMetadataSorterFormProps {
|
|
|
13
14
|
/** Callback chiamata quando l'utente conferma la selezione degli OrderByItem */
|
|
14
15
|
onChoose?: (orderByItems: OrderByItem[] | undefined) => void;
|
|
15
16
|
}
|
|
16
|
-
declare const TMMetadataSorterForm: (props: TMMetadataSorterFormProps) =>
|
|
17
|
+
declare const TMMetadataSorterForm: (props: TMMetadataSorterFormProps) => React.JSX.Element;
|
|
17
18
|
export default TMMetadataSorterForm;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import { SavedQueryDescriptor } from '@topconsultnpm/sdk-ts';
|
|
3
|
-
export declare const getTooltipBySqd: (sqd: SavedQueryDescriptor | undefined) =>
|
|
3
|
+
export declare const getTooltipBySqd: (sqd: SavedQueryDescriptor | undefined) => React.JSX.Element | null;
|
|
4
4
|
interface ITMSavedQuerySelectorProps {
|
|
5
5
|
height?: string;
|
|
6
6
|
items?: SavedQueryDescriptor[];
|
|
@@ -12,5 +12,5 @@ interface ITMSavedQuerySelectorProps {
|
|
|
12
12
|
refreshFavoriteSavedQueries?: (sqd: SavedQueryDescriptor) => void;
|
|
13
13
|
onRefreshData?: () => void;
|
|
14
14
|
}
|
|
15
|
-
declare const TMSavedQuerySelector: React.MemoExoticComponent<({ items, selectedId, allowShowSearch, height, manageDefault, onItemClick, onDeleted, refreshFavoriteSavedQueries, onRefreshData }: ITMSavedQuerySelectorProps) =>
|
|
15
|
+
declare const TMSavedQuerySelector: React.MemoExoticComponent<({ items, selectedId, allowShowSearch, height, manageDefault, onItemClick, onDeleted, refreshFavoriteSavedQueries, onRefreshData }: ITMSavedQuerySelectorProps) => React.JSX.Element>;
|
|
16
16
|
export default TMSavedQuerySelector;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import React from 'react';
|
|
1
2
|
import { SavedQueryDescriptor, DcmtTypeDescriptor, TaskDescriptor, ObjectRef, HomeBlogPost } from '@topconsultnpm/sdk-ts';
|
|
2
3
|
import { IntesiCertificateData } from '../../../helper';
|
|
3
4
|
import { DcmtInfo, IGraphometricManagerProp, TaskContext } from '../../../ts';
|
|
@@ -45,5 +46,5 @@ interface ITMSearchProps {
|
|
|
45
46
|
fetchRemoteCertificates?: (email: string) => Promise<IntesiCertificateData[]>;
|
|
46
47
|
graphometricManager?: IGraphometricManagerProp;
|
|
47
48
|
}
|
|
48
|
-
declare const TMSearch: (props: ITMSearchProps) =>
|
|
49
|
+
declare const TMSearch: (props: ITMSearchProps) => React.JSX.Element;
|
|
49
50
|
export default TMSearch;
|
|
@@ -29,6 +29,12 @@ interface ITMSearchQueryPanelProps {
|
|
|
29
29
|
declare const TMSearchQueryPanel: React.FunctionComponent<ITMSearchQueryPanelProps>;
|
|
30
30
|
export default TMSearchQueryPanel;
|
|
31
31
|
export declare const refreshLastSearch: (qd: QueryDescriptor | undefined) => Promise<SearchResultDescriptor[] | undefined>;
|
|
32
|
-
export declare const StyledToppyTextContainer: import("styled-components/dist/types").IStyledComponentBase<"web",
|
|
33
|
-
|
|
34
|
-
|
|
32
|
+
export declare const StyledToppyTextContainer: import("styled-components/dist/types").IStyledComponentBase<"web", Omit<React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "style"> & {
|
|
33
|
+
style?: React.CSSProperties | import("styled-components/dist/types").CSSPropertiesWithVars | undefined;
|
|
34
|
+
}> & string;
|
|
35
|
+
export declare const StyledToppyText: import("styled-components/dist/types").IStyledComponentBase<"web", Omit<React.DetailedHTMLProps<React.HTMLAttributes<HTMLParagraphElement>, HTMLParagraphElement>, "style"> & {
|
|
36
|
+
style?: React.CSSProperties | import("styled-components/dist/types").CSSPropertiesWithVars | undefined;
|
|
37
|
+
}> & string;
|
|
38
|
+
export declare const StyledToppyImage: import("styled-components/dist/types").IStyledComponentBase<"web", Omit<React.DetailedHTMLProps<React.ImgHTMLAttributes<HTMLImageElement>, HTMLImageElement>, "style"> & {
|
|
39
|
+
style?: React.CSSProperties | import("styled-components/dist/types").CSSPropertiesWithVars | undefined;
|
|
40
|
+
}> & string;
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import React, { useCallback, useEffect, useLayoutEffect, useMemo, useRef, useState, useSyncExternalStore } from 'react';
|
|
3
3
|
import styled from 'styled-components';
|
|
4
|
-
import { LoadIndicator } from 'devextreme-react';
|
|
5
4
|
import { AppModules, DataColumnTypes, DataListViewModes, DcmtTypeListCacheService, LayoutCacheService, LayoutModes, MetadataDataDomains, SDK_Globals, SystemMIDsAsNumber, UserListCacheService, } from '@topconsultnpm/sdk-ts';
|
|
6
5
|
import { customizeSearchByDisplayText, deepCompare, formatDateTimeByMetadataFormat, formatNumberByMetadataFormat, generateUniqueColumnKeys, genUniqueId, getColumnFormatInfo, getDateDisplayText, getNumberDisplayText, getSearchToolbarVisibility, IconAll, IconBoard, IconDcmtTypeSys, IconDelete, IconDuplicate, IconEdit, IconMenuVertical, IconPlatform, IconRefresh, IconSearchCheck, IconShow, isApprovalWorkflowView, isSign4TopEnabled, searchResultDescriptorToSimpleArray, searchResultToMetadataValues, getTraceShowFileMids, getTraceShowFileNotUpdatedMessage, getDcmtMetadataValuesAsync, SDKUI_Globals, SDKUI_Localizator, IconCloseOutline, getSearchResultPanelLayout, getSearchResultPanelLayoutSignature, hasSearchResultPanelLayout, saveSearchResultPanelLayout, subscribeSearchResultPanelLayout, VIRTUAL_RENDERING_THRESHOLD, VIRTUAL_RENDERING_CELL_THRESHOLD } from '../../../helper';
|
|
7
6
|
import { CounterItemKey, formatCount } from '../../base/TMCounterContainer';
|
|
@@ -18,7 +17,7 @@ import TMDataGrid, { TMDataGridPageSize } from '../../base/TMDataGrid';
|
|
|
18
17
|
import { DeviceType, useDeviceType } from '../../base/TMDeviceProvider';
|
|
19
18
|
import TMLayoutContainer, { TMLayoutItem, TMSplitterLayout } from '../../base/TMLayout';
|
|
20
19
|
import { ButtonNames, TMExceptionBoxManager, TMMessageBoxManager } from '../../base/TMPopUp';
|
|
21
|
-
import TMSpinner from '../../base/TMSpinner';
|
|
20
|
+
import TMSpinner, { SpinnerGraphic } from '../../base/TMSpinner';
|
|
22
21
|
import { StyledMultiViewPanel } from '../../base/Styled';
|
|
23
22
|
import TMMetadataValues from '../../editors/TMMetadataValues';
|
|
24
23
|
import TMTidViewer from '../../viewers/TMTidViewer';
|
|
@@ -529,8 +528,8 @@ handleNavigateToWGs, handleNavigateToDossiers, fetchRemoteCertificates, graphome
|
|
|
529
528
|
return;
|
|
530
529
|
}
|
|
531
530
|
}
|
|
532
|
-
// L'utente è sul selettore
|
|
533
|
-
if (
|
|
531
|
+
// L'utente è sul selettore (solo layout a step: senza selettore si seleziona il primo)
|
|
532
|
+
if (isSteppedLayout && navStep !== 'results') {
|
|
534
533
|
setSelectedSearchResult(undefined);
|
|
535
534
|
return;
|
|
536
535
|
}
|
|
@@ -1562,7 +1561,7 @@ const TMSearchResultGrid = ({ openInOffice, fromDTD, operationItems, allUsers, i
|
|
|
1562
1561
|
const gridCounterConfig = showCounterConfig
|
|
1563
1562
|
? { ...counterConfig, show: true, items: counterConfig?.items ?? defaultCounterItems }
|
|
1564
1563
|
: { show: false };
|
|
1565
|
-
return _jsxs("div", { style: { width: "100%", height: "100%" }, children: [!isDataGridReady && (_jsxs("div", { style: { display: 'flex', flexDirection: 'column', alignItems: 'center', justifyContent: 'center', height: '100%', width: '100%', gap: '10px' }, children: [_jsx(
|
|
1564
|
+
return _jsxs("div", { style: { width: "100%", height: "100%" }, children: [!isDataGridReady && (_jsxs("div", { style: { display: 'flex', flexDirection: 'column', alignItems: 'center', justifyContent: 'center', height: '100%', width: '100%', gap: '10px' }, children: [_jsx(SpinnerGraphic, {}), _jsx("div", { children: SDKUI_Localizator.Loading })] })), isDataGridReady && _jsx(TMDataGrid, { ref: dataGridRef, id: "tm-search-result", keyExpr: "rowIndex", dataColumns: dataColumns, dataSource: dataSource, customizeColumns: customizeColumns, repaintChangesOnly: true, selectedRowKeys: selectedRowKeys, focusedRowKey: disableAutoFocus ? undefined : Number(focusedItem?.rowIndex ?? 0), showSearchPanel: showSearchTMDatagrid, showFilterPanel: true, sorting: gridSorting, selection: gridSelection, scrolling: gridScrolling, pageSize: pageSize, compactPager: compactPager, onSelectionChanged: handleSelectionChange, onFocusedRowChanged: handleFocusedRowChange, onRowDblClick: onRowDblClick, onContentReady: onContentReady, showHeaderColumnChooser: true, onKeyDown: onKeyDown, customContextMenuItems: operationItems, counterConfig: gridCounterConfig })] });
|
|
1566
1565
|
};
|
|
1567
1566
|
//#region TMSearchResultSelector
|
|
1568
1567
|
const StyledItemTemplate = styled.div `
|
|
@@ -12,5 +12,5 @@ interface TMSearchResultFloatingActionButtonProps {
|
|
|
12
12
|
selectedDcmtsOrFocused: Array<DcmtInfo>;
|
|
13
13
|
config: TMSearchResultFloatingActionConfig;
|
|
14
14
|
}
|
|
15
|
-
export declare const TMSearchResultFloatingActionButton: (props: TMSearchResultFloatingActionButtonProps) =>
|
|
15
|
+
export declare const TMSearchResultFloatingActionButton: (props: TMSearchResultFloatingActionButtonProps) => React.JSX.Element;
|
|
16
16
|
export default TMSearchResultFloatingActionButton;
|