@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.
Files changed (115) hide show
  1. package/lib/components/NewComponents/ContextMenu/styles.d.ts +45 -43
  2. package/lib/components/NewComponents/FloatingMenuBar/styles.d.ts +67 -60
  3. package/lib/components/base/Styled.d.ts +93 -77
  4. package/lib/components/base/TMCounterBar.d.ts +2 -2
  5. package/lib/components/base/TMCounterContainer.d.ts +2 -1
  6. package/lib/components/base/TMCustomButton.d.ts +1 -1
  7. package/lib/components/base/TMDataGrid.js +219 -219
  8. package/lib/components/base/TMDataGridExportForm.d.ts +2 -1
  9. package/lib/components/base/TMFileManager.d.ts +2 -1
  10. package/lib/components/base/TMFileManagerDataGridView.d.ts +2 -1
  11. package/lib/components/base/TMFileManagerThumbnailItems.d.ts +1 -1
  12. package/lib/components/base/TMFileManagerThumbnailsView.d.ts +1 -1
  13. package/lib/components/base/TMFileManagerUtils.d.ts +4 -6
  14. package/lib/components/base/TMLayout.d.ts +4 -4
  15. package/lib/components/base/TMList.d.ts +2 -1
  16. package/lib/components/base/TMListView.d.ts +1 -1
  17. package/lib/components/base/TMSpinner.d.ts +3 -2
  18. package/lib/components/base/TMTab.d.ts +4 -3
  19. package/lib/components/base/TMTabControl.js +208 -208
  20. package/lib/components/base/TMTooltip.d.ts +1 -1
  21. package/lib/components/base/TMTreeView.d.ts +16 -8
  22. package/lib/components/base/TMTreeView.js +31 -5
  23. package/lib/components/base/TMUserAvatar.d.ts +2 -1
  24. package/lib/components/base/TMVilViewer.d.ts +2 -1
  25. package/lib/components/base/TMWaitPanel.d.ts +3 -2
  26. package/lib/components/base/waitPanel/TMWaitPanelView.d.ts +2 -1
  27. package/lib/components/base/waitPanel/TMWaitPanelView.js +207 -207
  28. package/lib/components/choosers/TMDynDataListItemChooser.d.ts +1 -1
  29. package/lib/components/choosers/TMInvoiceRetrieveFormats.d.ts +2 -1
  30. package/lib/components/choosers/TMOrderRetrieveFormats.d.ts +2 -1
  31. package/lib/components/choosers/TMQuickSearchInfo.d.ts +2 -1
  32. package/lib/components/choosers/TMRelationChooser.d.ts +3 -3
  33. package/lib/components/choosers/TMUserChooser.d.ts +2 -2
  34. package/lib/components/editors/TMEditorStyled.d.ts +20 -42
  35. package/lib/components/editors/TMFormulaEditor.d.ts +1 -1
  36. package/lib/components/editors/TMHtmlContentDisplay.d.ts +2 -1
  37. package/lib/components/editors/TMHtmlEditor.d.ts +2 -1
  38. package/lib/components/editors/TMTreeDropDown.d.ts +1 -1
  39. package/lib/components/features/assistant/TMToppyDraggableHelpCenter.d.ts +1 -1
  40. package/lib/components/features/blog/TMBlogCommentForm.d.ts +2 -1
  41. package/lib/components/features/documents/TMDcmtForm.js +31 -31
  42. package/lib/components/features/documents/TMDcmtFormActionButtons.d.ts +1 -1
  43. package/lib/components/features/documents/TMDcmtIcon.d.ts +2 -1
  44. package/lib/components/features/documents/TMDcmtPreview.d.ts +8 -6
  45. package/lib/components/features/documents/TMDcmtTasks.d.ts +2 -1
  46. package/lib/components/features/documents/TMDragDropOverlay.d.ts +1 -1
  47. package/lib/components/features/documents/TMFileUploader.js +21 -21
  48. package/lib/components/features/documents/TMMasterDetailDcmts.js +62 -6
  49. package/lib/components/features/documents/TMMasterInfoFields.d.ts +2 -1
  50. package/lib/components/features/documents/TMMergeToPdfForm.d.ts +2 -1
  51. package/lib/components/features/documents/TMMultiMasterDetailDcmtsForm.d.ts +2 -1
  52. package/lib/components/features/documents/TMMultiMasterDetailDcmtsUtils.d.ts +4 -4
  53. package/lib/components/features/documents/TMRelationViewer.d.ts +2 -2
  54. package/lib/components/features/documents/TMRelationViewer.js +13 -3
  55. package/lib/components/features/documents/relationTreeState.d.ts +2 -0
  56. package/lib/components/features/search/TMDcmtCheckoutInfoForm.d.ts +2 -1
  57. package/lib/components/features/search/TMMetadataOutputForm.d.ts +2 -1
  58. package/lib/components/features/search/TMMetadataSorterForm.d.ts +2 -1
  59. package/lib/components/features/search/TMSavedQuerySelector.d.ts +2 -2
  60. package/lib/components/features/search/TMSearch.d.ts +2 -1
  61. package/lib/components/features/search/TMSearchQueryPanel.d.ts +9 -3
  62. package/lib/components/features/search/TMSearchResult.js +4 -5
  63. package/lib/components/features/search/TMSearchResultFloatingActionButton.d.ts +1 -1
  64. package/lib/components/features/search/TMSignatureInfoContent.d.ts +2 -1
  65. package/lib/components/features/search/TMViewHistoryDcmt.d.ts +2 -1
  66. package/lib/components/features/tasks/TMTaskForm.d.ts +1 -1
  67. package/lib/components/features/tasks/TMTaskFormUtils.d.ts +10 -10
  68. package/lib/components/features/tasks/TMTasksAgenda.d.ts +1 -1
  69. package/lib/components/features/tasks/TMTasksCalendar.d.ts +1 -1
  70. package/lib/components/features/tasks/TMTasksHeader.d.ts +1 -1
  71. package/lib/components/features/tasks/TMTasksPanelContent.d.ts +1 -1
  72. package/lib/components/features/tasks/TMTasksUtilsView.d.ts +5 -5
  73. package/lib/components/features/tasks/TMTasksView.d.ts +1 -1
  74. package/lib/components/features/wg/TMWGsCopyMoveForm.d.ts +3 -2
  75. package/lib/components/features/wg/TMWGsCopyMoveForm.js +9 -9
  76. package/lib/components/features/workflow/TMWorkflowPopup.d.ts +8 -7
  77. package/lib/components/features/workflow/diagram/WorkitemRecipientsEditor.d.ts +3 -1
  78. package/lib/components/forms/Login/ChangePasswordInputs.d.ts +3 -1
  79. package/lib/components/forms/Login/Chooser.d.ts +2 -2
  80. package/lib/components/forms/TMChooserForm.d.ts +2 -1
  81. package/lib/components/forms/TMSaveForm.d.ts +4 -4
  82. package/lib/components/grids/TMBlogAttachments.d.ts +2 -1
  83. package/lib/components/grids/TMBlogHeader.d.ts +1 -1
  84. package/lib/components/grids/TMBlogsPost.d.ts +1 -1
  85. package/lib/components/grids/TMBlogsPostUtils.d.ts +9 -9
  86. package/lib/components/grids/TMValidationItemsList.d.ts +2 -1
  87. package/lib/components/layout/panelManager/TMPanelManagerContainer.d.ts +2 -1
  88. package/lib/components/layout/panelManager/TMPanelManagerContainer.js +12 -12
  89. package/lib/components/layout/panelManager/TMPanelManagerContext.d.ts +2 -2
  90. package/lib/components/layout/panelManager/TMPanelManagerLoader.d.ts +2 -1
  91. package/lib/components/layout/panelManager/TMPanelManagerToolbar.d.ts +5 -6
  92. package/lib/components/layout/panelManager/TMPanelManagerWithPersistenceProvider.d.ts +2 -2
  93. package/lib/components/layout/panelManager/TMPanelWrapper.d.ts +2 -2
  94. package/lib/components/pages/TMPage.d.ts +1 -1
  95. package/lib/components/query/TMQueryEditor.d.ts +14 -10
  96. package/lib/components/settings/SettingsAppearance.d.ts +2 -1
  97. package/lib/components/sidebar/TMAboutApp.d.ts +2 -1
  98. package/lib/components/sidebar/TMCommandsPanel.d.ts +4 -4
  99. package/lib/components/sidebar/TMHeader.d.ts +3 -3
  100. package/lib/components/viewers/TMDataListItemViewer.d.ts +3 -2
  101. package/lib/components/viewers/TMDataUserIdItemViewer.d.ts +3 -2
  102. package/lib/components/viewers/TMMidViewer.d.ts +2 -2
  103. package/lib/components/viewers/TMTidViewer.d.ts +2 -2
  104. package/lib/helper/TMAppUpdatedModal.d.ts +2 -1
  105. package/lib/helper/TMAppUpdatedModal.js +93 -93
  106. package/lib/helper/TMCommandsContextMenu.d.ts +1 -1
  107. package/lib/helper/TMIcons.d.ts +281 -281
  108. package/lib/helper/TMPdfViewer.d.ts +2 -1
  109. package/lib/helper/TMToppyMessage.d.ts +2 -2
  110. package/lib/helper/TMUtils.d.ts +10 -4
  111. package/lib/helper/helpers.d.ts +1 -1
  112. package/lib/hooks/useDcmtOperations.js +1 -1
  113. package/lib/hooks/useInputDialog.d.ts +2 -1
  114. package/lib/services/platform_services.d.ts +3 -2
  115. 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) => import("react/jsx-runtime").JSX.Element;
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) => import("react/jsx-runtime").JSX.Element;
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) => import("react/jsx-runtime").JSX.Element;
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) => import("react/jsx-runtime").JSX.Element;
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
- }) => import("react/jsx-runtime").JSX.Element;
31
- export declare const StyledHeaderIcon: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("styled-components").FastOmit<React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "$color"> & {
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
- }, never> & Partial<Pick<import("styled-components").FastOmit<React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "$color"> & {
34
- $color: string;
35
- }, never>>> & string;
36
- export declare const StyledPanelStatusContainer: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never> & Partial<Pick<React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>>> & string;
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) => import("react/jsx-runtime").JSX.Element;
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/jsx-runtime").JSX.Element;
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
- handleFocusedItemChanged(item);
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, 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: focusedItem?.searchResult ?? [], showSearchResultSidebar: false, showDcmtFormSidebar: false, autoFocusFirstRow: false, onTaskCreateRequest: onTaskCreateRequest, onClose: () => { setPanelVisibilityById('tmTreeView', true); }, 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, showBackButton: false, onRefreshSearchAsyncDatagrid: onRefreshSearchResults, onReferenceClick: handleNavigateToReference, fetchRemoteCertificates: fetchRemoteCertificates }, refreshKey)) }));
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) => import("react/jsx-runtime").JSX.Element;
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) => import("react/jsx-runtime").JSX.Element;
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) => import("react/jsx-runtime").JSX.Element | null;
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) => import("react/jsx-runtime").JSX.Element;
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) => import("react/jsx-runtime").JSX.Element;
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) => import("react/jsx-runtime").JSX.Element;
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
- }) => import("react/jsx-runtime").JSX.Element;
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) => import("react/jsx-runtime").JSX.Element;
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) => import("react/jsx-runtime").JSX.Element;
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) => import("react/jsx-runtime").JSX.Element;
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) => import("react/jsx-runtime").JSX.Element | null;
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) => import("react/jsx-runtime").JSX.Element>;
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) => import("react/jsx-runtime").JSX.Element;
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", import("styled-components").FastOmit<React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never> & Partial<Pick<React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>>> & string;
33
- export declare const StyledToppyText: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<React.DetailedHTMLProps<React.HTMLAttributes<HTMLParagraphElement>, HTMLParagraphElement>, never> & Partial<Pick<React.DetailedHTMLProps<React.HTMLAttributes<HTMLParagraphElement>, HTMLParagraphElement>, never>>> & string;
34
- export declare const StyledToppyImage: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<React.DetailedHTMLProps<React.ImgHTMLAttributes<HTMLImageElement>, HTMLImageElement>, never> & Partial<Pick<React.DetailedHTMLProps<React.ImgHTMLAttributes<HTMLImageElement>, HTMLImageElement>, never>>> & string;
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 (isMobile && navStep !== 'results') {
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(LoadIndicator, { height: 60, width: 60 }), _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 })] });
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) => import("react/jsx-runtime").JSX.Element;
15
+ export declare const TMSearchResultFloatingActionButton: (props: TMSearchResultFloatingActionButtonProps) => React.JSX.Element;
16
16
  export default TMSearchResultFloatingActionButton;