@topconsultnpm/sdkui-react 6.22.0-dev4.2 → 6.22.0-dev4.21

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 (150) hide show
  1. package/lib/components/NewComponents/ContextMenu/styles.d.ts +43 -45
  2. package/lib/components/NewComponents/FloatingMenuBar/styles.d.ts +60 -67
  3. package/lib/components/base/Styled.d.ts +77 -93
  4. package/lib/components/base/TMAlert.d.ts +2 -1
  5. package/lib/components/base/TMAlert.js +7 -6
  6. package/lib/components/base/TMCounterBar.d.ts +2 -2
  7. package/lib/components/base/TMCounterContainer.d.ts +4 -3
  8. package/lib/components/base/TMCounterContainer.js +16 -1
  9. package/lib/components/base/TMCustomButton.d.ts +1 -1
  10. package/lib/components/base/TMDataGrid.js +24 -4
  11. package/lib/components/base/TMDataGridExportForm.d.ts +1 -2
  12. package/lib/components/base/TMFileManager.d.ts +1 -2
  13. package/lib/components/base/TMFileManagerDataGridView.d.ts +1 -2
  14. package/lib/components/base/TMFileManagerThumbnailItems.d.ts +1 -1
  15. package/lib/components/base/TMFileManagerThumbnailsView.d.ts +1 -1
  16. package/lib/components/base/TMFileManagerUtils.d.ts +6 -4
  17. package/lib/components/base/TMLayout.d.ts +4 -4
  18. package/lib/components/base/TMList.d.ts +1 -2
  19. package/lib/components/base/TMListView.d.ts +1 -1
  20. package/lib/components/base/TMSpinner.d.ts +2 -3
  21. package/lib/components/base/TMTab.d.ts +3 -4
  22. package/lib/components/base/TMTabControl.js +208 -208
  23. package/lib/components/base/TMTooltip.d.ts +1 -1
  24. package/lib/components/base/TMTreeView.d.ts +8 -14
  25. package/lib/components/base/TMUserAvatar.d.ts +1 -2
  26. package/lib/components/base/TMVilViewer.d.ts +1 -2
  27. package/lib/components/base/TMWaitPanel.d.ts +2 -3
  28. package/lib/components/base/waitPanel/TMWaitPanelManager.d.ts +16 -6
  29. package/lib/components/base/waitPanel/TMWaitPanelManager.js +55 -2
  30. package/lib/components/base/waitPanel/TMWaitPanelView.d.ts +6 -2
  31. package/lib/components/base/waitPanel/TMWaitPanelView.js +75 -3
  32. package/lib/components/choosers/TMDistinctValues.js +3 -3
  33. package/lib/components/choosers/TMDynDataListItemChooser.d.ts +1 -1
  34. package/lib/components/choosers/TMInvoiceRetrieveFormats.d.ts +1 -2
  35. package/lib/components/choosers/TMOrderRetrieveFormats.d.ts +1 -2
  36. package/lib/components/choosers/TMQuickSearchInfo.d.ts +1 -2
  37. package/lib/components/choosers/TMRelationChooser.d.ts +3 -3
  38. package/lib/components/choosers/TMUserChooser.d.ts +3 -2
  39. package/lib/components/choosers/TMUserChooser.js +3 -3
  40. package/lib/components/editors/TMEditorStyled.d.ts +42 -20
  41. package/lib/components/editors/TMFormulaEditor.d.ts +1 -1
  42. package/lib/components/editors/TMHtmlContentDisplay.d.ts +1 -2
  43. package/lib/components/editors/TMHtmlEditor.d.ts +1 -2
  44. package/lib/components/editors/TMTreeDropDown.d.ts +1 -1
  45. package/lib/components/features/assistant/TMHelpOnLineChat.d.ts +0 -1
  46. package/lib/components/features/assistant/TMHelpOnLineChat.js +8 -161
  47. package/lib/components/features/assistant/TMToppyDraggableHelpCenter.d.ts +1 -1
  48. package/lib/components/features/blog/TMBlogCommentForm.d.ts +1 -2
  49. package/lib/components/features/documents/TMDcmtForm.d.ts +6 -1
  50. package/lib/components/features/documents/TMDcmtForm.js +42 -7
  51. package/lib/components/features/documents/TMDcmtFormActionButtons.d.ts +1 -1
  52. package/lib/components/features/documents/TMDcmtFormActionButtons.js +5 -2
  53. package/lib/components/features/documents/TMDcmtIcon.d.ts +1 -2
  54. package/lib/components/features/documents/TMDcmtPreview.d.ts +8 -8
  55. package/lib/components/features/documents/TMDcmtPreview.js +16 -7
  56. package/lib/components/features/documents/TMDcmtTasks.d.ts +1 -2
  57. package/lib/components/features/documents/TMDragDropOverlay.d.ts +1 -1
  58. package/lib/components/features/documents/TMFileUploader.js +21 -21
  59. package/lib/components/features/documents/TMMasterDetailDcmts.d.ts +2 -0
  60. package/lib/components/features/documents/TMMasterDetailDcmts.js +13 -5
  61. package/lib/components/features/documents/TMMasterInfoFields.d.ts +1 -2
  62. package/lib/components/features/documents/TMMergeToPdfForm.d.ts +1 -2
  63. package/lib/components/features/documents/TMMergeToPdfForm.js +5 -4
  64. package/lib/components/features/documents/TMMultiMasterDetailDcmtsForm.d.ts +1 -2
  65. package/lib/components/features/documents/TMMultiMasterDetailDcmtsUtils.d.ts +4 -4
  66. package/lib/components/features/search/TMDcmtCheckoutInfoForm.d.ts +1 -2
  67. package/lib/components/features/search/TMMetadataOutputForm.d.ts +1 -2
  68. package/lib/components/features/search/TMMetadataSorterForm.d.ts +1 -2
  69. package/lib/components/features/search/TMSavedQuerySelector.d.ts +2 -2
  70. package/lib/components/features/search/TMSearch.d.ts +1 -2
  71. package/lib/components/features/search/TMSearchQueryPanel.d.ts +3 -9
  72. package/lib/components/features/search/TMSearchResult.js +121 -91
  73. package/lib/components/features/search/TMSearchResultFloatingActionButton.d.ts +1 -1
  74. package/lib/components/features/search/TMSignatureInfoContent.d.ts +1 -2
  75. package/lib/components/features/search/TMViewHistoryDcmt.d.ts +1 -2
  76. package/lib/components/features/search/TMViewHistoryDcmt.js +1 -1
  77. package/lib/components/features/tasks/TMTaskForm.d.ts +1 -1
  78. package/lib/components/features/tasks/TMTaskFormUtils.d.ts +10 -10
  79. package/lib/components/features/tasks/TMTasksAgenda.d.ts +1 -1
  80. package/lib/components/features/tasks/TMTasksCalendar.d.ts +1 -1
  81. package/lib/components/features/tasks/TMTasksHeader.d.ts +1 -1
  82. package/lib/components/features/tasks/TMTasksPanelContent.d.ts +1 -1
  83. package/lib/components/features/tasks/TMTasksUtilsView.d.ts +5 -5
  84. package/lib/components/features/tasks/TMTasksView.d.ts +1 -1
  85. package/lib/components/features/tasks/TMTasksView.js +15 -9
  86. package/lib/components/features/wg/TMWGsCopyMoveForm.d.ts +2 -3
  87. package/lib/components/features/wg/TMWGsCopyMoveForm.js +8 -4
  88. package/lib/components/features/workflow/TMWorkflowPopup.d.ts +7 -8
  89. package/lib/components/features/workflow/TMWorkflowPopup.js +1 -1
  90. package/lib/components/features/workflow/diagram/WorkitemRecipientsEditor.d.ts +1 -3
  91. package/lib/components/forms/Login/ChangePasswordInputs.d.ts +1 -3
  92. package/lib/components/forms/Login/Chooser.d.ts +2 -2
  93. package/lib/components/forms/TMChooserForm.d.ts +1 -2
  94. package/lib/components/forms/TMSaveForm.d.ts +4 -4
  95. package/lib/components/grids/TMBlogAttachments.d.ts +1 -2
  96. package/lib/components/grids/TMBlogHeader.d.ts +1 -1
  97. package/lib/components/grids/TMBlogsPost.d.ts +1 -1
  98. package/lib/components/grids/TMBlogsPost.js +1 -1
  99. package/lib/components/grids/TMBlogsPostUtils.d.ts +9 -9
  100. package/lib/components/grids/TMValidationItemsList.d.ts +1 -2
  101. package/lib/components/layout/panelManager/TMPanelManagerContainer.d.ts +1 -2
  102. package/lib/components/layout/panelManager/TMPanelManagerContainer.js +12 -12
  103. package/lib/components/layout/panelManager/TMPanelManagerContext.d.ts +2 -2
  104. package/lib/components/layout/panelManager/TMPanelManagerLoader.d.ts +1 -2
  105. package/lib/components/layout/panelManager/TMPanelManagerToolbar.d.ts +6 -5
  106. package/lib/components/layout/panelManager/TMPanelManagerWithPersistenceProvider.d.ts +2 -2
  107. package/lib/components/layout/panelManager/TMPanelWrapper.d.ts +2 -2
  108. package/lib/components/pages/TMPage.d.ts +1 -1
  109. package/lib/components/pages/TMPage.js +13 -5
  110. package/lib/components/query/TMQueryEditor.d.ts +10 -14
  111. package/lib/components/settings/SettingsAppearance.d.ts +1 -2
  112. package/lib/components/sidebar/TMAboutApp.d.ts +1 -2
  113. package/lib/components/sidebar/TMCommandsPanel.d.ts +4 -4
  114. package/lib/components/sidebar/TMHeader.d.ts +3 -3
  115. package/lib/components/viewers/TMDataListItemViewer.d.ts +2 -3
  116. package/lib/components/viewers/TMDataUserIdItemViewer.d.ts +2 -3
  117. package/lib/components/viewers/TMMidViewer.d.ts +2 -2
  118. package/lib/components/viewers/TMTidViewer.d.ts +2 -2
  119. package/lib/helper/SDKUI_Globals.d.ts +7 -4
  120. package/lib/helper/SDKUI_Globals.js +7 -4
  121. package/lib/helper/SDKUI_Localizator.d.ts +13 -6
  122. package/lib/helper/SDKUI_Localizator.js +121 -51
  123. package/lib/helper/TMAppUpdatedModal.d.ts +1 -2
  124. package/lib/helper/TMAppUpdatedModal.js +93 -93
  125. package/lib/helper/TMCommandsContextMenu.d.ts +1 -1
  126. package/lib/helper/TMIcons.d.ts +282 -281
  127. package/lib/helper/TMIcons.js +4 -1
  128. package/lib/helper/TMPdfViewer.d.ts +1 -2
  129. package/lib/helper/TMToppyMessage.d.ts +2 -2
  130. package/lib/helper/TMUtils.d.ts +4 -10
  131. package/lib/helper/checkinCheckoutManager.js +2 -3
  132. package/lib/helper/helpers.d.ts +1 -1
  133. package/lib/helper/queryHelper.d.ts +15 -2
  134. package/lib/helper/queryHelper.js +52 -1
  135. package/lib/hooks/useCaseFlowApprove.js +31 -6
  136. package/lib/hooks/useCheckInOutOperations.js +2 -3
  137. package/lib/hooks/useDcmtOperations.js +24 -16
  138. package/lib/hooks/useDocumentOperations.d.ts +2 -0
  139. package/lib/hooks/useDocumentOperations.js +7 -7
  140. package/lib/hooks/useInputDialog.d.ts +1 -2
  141. package/lib/hooks/useMultiMasterDetailDcmts.js +10 -6
  142. package/lib/services/caseflow/CaseFlowService.d.ts +33 -3
  143. package/lib/services/caseflow/CaseFlowService.js +71 -44
  144. package/lib/services/caseflow/caseFlowNameCache.d.ts +5 -0
  145. package/lib/services/caseflow/caseFlowNameCache.js +19 -0
  146. package/lib/services/platform_services.d.ts +2 -3
  147. package/package.json +69 -69
  148. package/lib/components/features/assistant/dataset/Designer-Suggested-Questions.json +0 -102
  149. package/lib/components/features/assistant/dataset/Login-Suggested-Questions.json +0 -32
  150. package/lib/components/features/assistant/dataset/Surfer-Suggested-Questions.json +0 -102
@@ -4,6 +4,7 @@ import { RelationTreeItem } from './TMRelationViewer';
4
4
  import { IntesiCertificateData } from '../../../helper';
5
5
  import { DcmtInfo, TaskContext, MetadataValueDescriptorEx } from '../../../ts';
6
6
  import { DeviceContextProps } from '../../base/TMDeviceProvider';
7
+ import { TMSearchResultFloatingActionConfig } from '../search/TMSearchResultFloatingActionButton';
7
8
  export type IRelatedDcmt = RelationTreeItem;
8
9
  interface ITMMasterDetailDcmtsProps extends DeviceContextProps {
9
10
  allTasks?: Array<TaskDescriptor>;
@@ -32,6 +33,7 @@ interface ITMMasterDetailDcmtsProps extends DeviceContextProps {
32
33
  onOpenS4TViewerRequest?: (dcmtInfo: Array<DcmtInfo>, refreshDocumentPreview?: (() => Promise<void>)) => void;
33
34
  onOpenPdfEditorRequest?: ((dcmtInfo: Array<DcmtInfo>, refreshDocumentPreview?: () => Promise<void>) => void);
34
35
  fetchRemoteCertificates?: (email: string) => Promise<IntesiCertificateData[]>;
36
+ floatingActionConfig?: TMSearchResultFloatingActionConfig;
35
37
  datagridUtility?: {
36
38
  onRefreshSearchAsyncDatagrid?: () => Promise<void>;
37
39
  onRefreshDataRowsAsync?: (() => Promise<void>);
@@ -1,6 +1,6 @@
1
1
  import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
3
- import { DcmtTypeListCacheService, LayoutModes, ObjectClasses, SDK_Globals, SDK_Localizator } from '@topconsultnpm/sdk-ts';
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
6
  import { IconMultipleSelection, IconCheckFile, IconDetailDcmts, SDKUI_Localizator, IconMenuVertical, IconDataList, IconPreview, IconSearchCheck, IconBoard, IconDcmtTypeSys, IconShow, getMoreInfoTasksForDocument, isApprovalWorkflowView, searchResultToMetadataValues, IconRefresh, SDKUI_Globals } from '../../../helper';
@@ -20,12 +20,13 @@ import { useDocumentOperations } from '../../../hooks/useDocumentOperations';
20
20
  import TMToppyMessage from '../../../helper/TMToppyMessage';
21
21
  import TMPanel from '../../base/TMPanel';
22
22
  import TMSpinner from '../../base/TMSpinner';
23
- const TMMasterDetailDcmts = ({ allTasks = [], getAllTasks, deleteTaskByIdsCallback, addTaskCallback, editTaskCallback, handleNavigateToWGs, handleNavigateToDossiers, deviceType, inputDcmts, isForMaster, showCurrentDcmtIndicator = true, allowNavigation, canNext, canPrev, onNext, onPrev, onBack, onFirstLoadCompleted, appendMasterDcmts, onTaskCreateRequest, onRefreshAfterAddDcmtToFavs, editPdfForm, openS4TViewer, onOpenS4TViewerRequest, onOpenPdfEditorRequest, datagridUtility, dcmtUtility, fetchRemoteCertificates }) => {
23
+ const TMMasterDetailDcmts = ({ allTasks = [], getAllTasks, deleteTaskByIdsCallback, addTaskCallback, editTaskCallback, handleNavigateToWGs, handleNavigateToDossiers, deviceType, inputDcmts, isForMaster, showCurrentDcmtIndicator = true, allowNavigation, canNext, canPrev, onNext, onPrev, onBack, onFirstLoadCompleted, appendMasterDcmts, onTaskCreateRequest, onRefreshAfterAddDcmtToFavs, editPdfForm, openS4TViewer, onOpenS4TViewerRequest, onOpenPdfEditorRequest, datagridUtility, dcmtUtility, fetchRemoteCertificates, floatingActionConfig }) => {
24
24
  const floatingBarContainerRef = useRef(null);
25
+ const attachActionConfig = SDK_Globals.tmSession?.SessionDescr?.appModuleID === AppModules.OUTLOOK_CONNECTOR && floatingActionConfig?.isVisible ? floatingActionConfig : undefined;
25
26
  const [focusedItem, setFocusedItem] = useState();
26
27
  const [selectedItems, setSelectedItems] = useState([]);
27
28
  const [showZeroDcmts, setShowZeroDcmts] = useState(() => SDKUI_Globals.userSettings?.searchSettings?.relationShowZeroDcmts ?? false);
28
- const [allowMultipleSelection, setAllowMultipleSelection] = useState(false);
29
+ const [allowMultipleSelection, setAllowMultipleSelection] = useState(attachActionConfig !== undefined);
29
30
  const [dtdMaster, setDtdMaster] = useState();
30
31
  const [noRelationsOnFirstLoad, setNoRelationsOnFirstLoad] = useState(false);
31
32
  const [isCheckingFirstLoad, setIsCheckingFirstLoad] = useState(true);
@@ -274,6 +275,7 @@ const TMMasterDetailDcmts = ({ allTasks = [], getAllTasks, deleteTaskByIdsCallba
274
275
  enablePinIcons: false,
275
276
  allowRelations: true,
276
277
  inputDcmtFormLayoutMode: LayoutModes.Update,
278
+ floatingActionConfig,
277
279
  },
278
280
  tasks: {
279
281
  allTasks: allTasks,
@@ -338,6 +340,12 @@ const TMMasterDetailDcmts = ({ allTasks = [], getAllTasks, deleteTaskByIdsCallba
338
340
  const handleSelectedItemsChanged = useCallback((items) => {
339
341
  setSelectedItems(items);
340
342
  }, []);
343
+ const attachDcmts = useMemo(() => {
344
+ const isAttachable = (item) => !!item?.isDcmt && item.tid !== undefined && item.did !== undefined;
345
+ const checkedDcmts = selectedItems.filter(isAttachable);
346
+ const dcmts = checkedDcmts.length > 0 ? checkedDcmts : (isAttachable(focusedItem) ? [focusedItem] : []);
347
+ return dcmts.map(item => ({ TID: item.tid, DID: item.did, FILEEXT: item.fileExt }));
348
+ }, [selectedItems, focusedItem]);
341
349
  const handleNoRelationsFound = useCallback(() => {
342
350
  if (isCheckingFirstLoad) {
343
351
  setNoRelationsOnFirstLoad(true);
@@ -398,7 +406,7 @@ const TMMasterDetailDcmts = ({ allTasks = [], getAllTasks, deleteTaskByIdsCallba
398
406
  ?
399
407
  _jsx(TMNothingToShow, { text: getTitle(), secondText: SDKUI_Localizator.NoDataToDisplay, icon: isForMaster ? _jsx(IconDetailDcmts, { fontSize: 96, transform: 'scale(-1, 1)' }) : _jsx(IconDetailDcmts, { fontSize: 96 }) })
400
408
  :
401
- _jsxs("div", { ref: floatingBarContainerRef, style: { width: "100%", height: "100%" }, onContextMenu: (e) => {
409
+ _jsxs("div", { ref: floatingBarContainerRef, style: { width: "100%", height: "100%", ...(attachActionConfig ? { position: 'relative' } : {}) }, onContextMenu: (e) => {
402
410
  // Disable context menu when loading
403
411
  if (isRelationViewerLoading) {
404
412
  e.preventDefault();
@@ -414,7 +422,7 @@ const TMMasterDetailDcmts = ({ allTasks = [], getAllTasks, deleteTaskByIdsCallba
414
422
  visible: contextMenuVisible,
415
423
  position: contextMenuPosition,
416
424
  onClose: () => setContextMenuVisible(false)
417
- } })] }) }), [inputDcmts, isForMaster, showCurrentDcmtIndicator, showZeroDcmts, allowMultipleSelection, focusedItem, selectedItems, handleFocusedItemChanged, handleSelectedItemsChanged, handleNoRelationsFound, onItemContextMenu, contextMenuVisible, contextMenuPosition, refreshKey, focusedItemFormData, isRelationViewerLoading, handleStopCalculationReady, handleRelationsCalculationStopped, handleTreeStateChange]);
425
+ } })] }) }), [inputDcmts, isForMaster, showCurrentDcmtIndicator, showZeroDcmts, allowMultipleSelection, focusedItem, selectedItems, handleFocusedItemChanged, handleSelectedItemsChanged, handleNoRelationsFound, onItemContextMenu, contextMenuVisible, contextMenuPosition, refreshKey, focusedItemFormData, isRelationViewerLoading, handleStopCalculationReady, handleRelationsCalculationStopped, handleTreeStateChange, attachActionConfig, attachDcmts]);
418
426
  const tmFormOrResult = useMemo(() => _jsx(TMFormOrResultWrapper, { refreshKey: refreshKeyFormOrResult, deviceType: deviceType, focusedItem: focusedItem, onTaskCreateRequest: onTaskCreateRequest, allTasks: allTasks, getAllTasks: getAllTasks, deleteTaskByIdsCallback: deleteTaskByIdsCallback, addTaskCallback: addTaskCallback, editTaskCallback: editTaskCallback, handleNavigateToWGs: handleNavigateToWGs, handleNavigateToDossiers: handleNavigateToDossiers, handleNavigateToReference: handleNavigateToReference, onRefreshAfterAddDcmtToFavs: onRefreshAfterAddDcmtToFavs, editPdfForm: editPdfForm, openS4TViewer: openS4TViewer, onOpenS4TViewerRequest: onOpenS4TViewerRequest, onOpenPdfEditorRequest: onOpenPdfEditorRequest, onRefreshSearchResults: onRefreshAllPanels }), [focusedItem, deviceType, allTasks, handleNavigateToWGs, handleNavigateToDossiers, handleNavigateToReference, editPdfForm, openS4TViewer, onOpenS4TViewerRequest, onOpenPdfEditorRequest, onRefreshAfterAddDcmtToFavs, refreshKeyFormOrResult]);
419
427
  const initialPanelDimensions = {
420
428
  'tmTreeView': { width: '50%', height: '100%' },
@@ -1,4 +1,3 @@
1
- import React from 'react';
2
1
  import { DcmtTypeDescriptor } from '@topconsultnpm/sdk-ts';
3
2
  import { DcmtInfo } from '../../../ts';
4
3
  interface TMMasterInfoFieldsProps {
@@ -16,5 +15,5 @@ interface TMMasterInfoFieldsProps {
16
15
  */
17
16
  isExpandedView?: boolean;
18
17
  }
19
- declare const TMMasterInfoFields: ({ dtd, dcmt, getValuesByMidAsync, reloadToken, isExpandedView }: TMMasterInfoFieldsProps) => React.JSX.Element;
18
+ declare const TMMasterInfoFields: ({ dtd, dcmt, getValuesByMidAsync, reloadToken, isExpandedView }: TMMasterInfoFieldsProps) => import("react/jsx-runtime").JSX.Element;
20
19
  export default TMMasterInfoFields;
@@ -1,4 +1,3 @@
1
- import React from 'react';
2
1
  import { DcmtInfo } from '../../../ts';
3
2
  import { HomeBlogPost, TaskDescriptor } from '@topconsultnpm/sdk-ts';
4
3
  import { TMCopyToFolderMode } from '../../../hooks/useDocumentOperations';
@@ -20,5 +19,5 @@ interface ITMMergeToPdfFormProps {
20
19
  * Form per l'unione di più documenti PDF in un singolo file.
21
20
  * Condivide TMDownloadRelationViewerSection e gli helper in copyAndMergeDcmtsShared con TMCopyToFolderForm.
22
21
  */
23
- declare const TMMergeToPdfForm: (props: ITMMergeToPdfFormProps) => React.JSX.Element;
22
+ declare const TMMergeToPdfForm: (props: ITMMergeToPdfFormProps) => import("react/jsx-runtime").JSX.Element;
24
23
  export default TMMergeToPdfForm;
@@ -169,14 +169,15 @@ const TMMergeToPdfForm = (props) => {
169
169
  }
170
170
  else {
171
171
  // createMetadataPdfFromDocument ha restituito null (errore interno loggato)
172
- metadataConversionResults.push({ rowIndex: i, id1: dcmt.TID, id2: dcmt.DID, resultType: ResultTypes.ERROR, description: 'Creazione PDF metadati fallita' });
173
- metadataPanel.error();
172
+ metadataConversionResults.push({ rowIndex: i, id1: dcmt.TID, id2: dcmt.DID, resultType: ResultTypes.ERROR, description: SDKUI_Localizator.MetadataPdfCreationFailed });
173
+ metadataPanel.error(1, `DID ${dcmt.DID}: ${SDKUI_Localizator.MetadataPdfCreationFailed}`);
174
174
  }
175
175
  }
176
176
  catch (error) {
177
177
  console.error(`Errore creazione PDF metadati per TID=${dcmt.TID}, DID=${dcmt.DID}`, error);
178
- metadataConversionResults.push({ rowIndex: i, id1: dcmt.TID, id2: dcmt.DID, resultType: ResultTypes.ERROR, description: getExceptionMessage(error) });
179
- metadataPanel.error();
178
+ const description = getExceptionMessage(error);
179
+ metadataConversionResults.push({ rowIndex: i, id1: dcmt.TID, id2: dcmt.DID, resultType: ResultTypes.ERROR, description });
180
+ metadataPanel.error(1, `DID ${dcmt.DID}: ${description}`);
180
181
  }
181
182
  // Avanza a conversione conclusa: con un solo documento la barra non parte dal 100%
182
183
  await metadataPanel.step();
@@ -1,4 +1,3 @@
1
- import React from "react";
2
1
  import { DcmtTypeDescriptor, HomeBlogPost, ObjectRef, TaskDescriptor } from "@topconsultnpm/sdk-ts";
3
2
  import { DcmtInfo, IGraphometricManagerProp, TaskContext } from "../../../ts";
4
3
  import { IntesiCertificateData } from "../../../helper";
@@ -42,5 +41,5 @@ interface TMMultiMasterDetailDcmtsFormProps {
42
41
  }>, tid?: number) => void;
43
42
  openWGsCopyMoveForm?: (mode: "copyToWgDraft" | "copyToWgArchivedDoc", dcmtTypeDescriptor: DcmtTypeDescriptor, documents: Array<DcmtInfo>) => void;
44
43
  }
45
- declare const TMMultiMasterDetailDcmtsForm: (props: TMMultiMasterDetailDcmtsFormProps) => React.JSX.Element | null;
44
+ declare const TMMultiMasterDetailDcmtsForm: (props: TMMultiMasterDetailDcmtsFormProps) => import("react/jsx-runtime").JSX.Element | null;
46
45
  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) => React.JSX.Element;
315
+ export declare const renderStepper: ({ steps, phase, hasMultipleTypes, isBackLocked, showBackArrow, onBack, onStepClick }: RenderStepperParams) => import("react/jsx-runtime").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) => React.JSX.Element;
324
+ export declare const renderSelectDcmtType: ({ detailRelationItems, selectedRelation, onSelectRelation }: RenderSelectDcmtTypeParams) => import("react/jsx-runtime").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) => React.JSX.Element;
343
+ export declare const renderAccordionHeader: ({ section, isOpen, tooltip, count, title, actions, panel, onToggleOpen }: RenderAccordionHeaderParams) => import("react/jsx-runtime").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
- }) => React.JSX.Element;
352
+ }) => import("react/jsx-runtime").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
@@ -1,9 +1,8 @@
1
- import React from "react";
2
1
  import { DcmtInfo } from "../../../ts";
3
2
  interface TMDcmtCheckoutInfoFormProps {
4
3
  dtdName: string;
5
4
  selectedDcmtOrFocused: DcmtInfo;
6
5
  onClose: () => void;
7
6
  }
8
- declare const TMDcmtCheckoutInfoForm: (props: TMDcmtCheckoutInfoFormProps) => React.JSX.Element;
7
+ declare const TMDcmtCheckoutInfoForm: (props: TMDcmtCheckoutInfoFormProps) => import("react/jsx-runtime").JSX.Element;
9
8
  export default TMDcmtCheckoutInfoForm;
@@ -1,4 +1,3 @@
1
- import React from "react";
2
1
  import { MetadataDescriptor, QueryDescriptor, SelectItem } from "@topconsultnpm/sdk-ts";
3
2
  interface TMMetadataOutputFormProps {
4
3
  /** QueryDescriptor da cui estrarre i metadati disponibili */
@@ -14,5 +13,5 @@ interface TMMetadataOutputFormProps {
14
13
  /** Callback chiamata quando l'utente conferma la selezione dei SelectItem */
15
14
  onChoose?: (selectItems: SelectItem[] | undefined) => void;
16
15
  }
17
- declare const TMMetadataOutputForm: (props: TMMetadataOutputFormProps) => React.JSX.Element;
16
+ declare const TMMetadataOutputForm: (props: TMMetadataOutputFormProps) => import("react/jsx-runtime").JSX.Element;
18
17
  export default TMMetadataOutputForm;
@@ -1,4 +1,3 @@
1
- import React from "react";
2
1
  import { MetadataDescriptor, OrderByItem, QueryDescriptor } from "@topconsultnpm/sdk-ts";
3
2
  interface TMMetadataSorterFormProps {
4
3
  /** QueryDescriptor da cui estrarre i metadati disponibili */
@@ -14,5 +13,5 @@ interface TMMetadataSorterFormProps {
14
13
  /** Callback chiamata quando l'utente conferma la selezione degli OrderByItem */
15
14
  onChoose?: (orderByItems: OrderByItem[] | undefined) => void;
16
15
  }
17
- declare const TMMetadataSorterForm: (props: TMMetadataSorterFormProps) => React.JSX.Element;
16
+ declare const TMMetadataSorterForm: (props: TMMetadataSorterFormProps) => import("react/jsx-runtime").JSX.Element;
18
17
  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) => React.JSX.Element | null;
3
+ export declare const getTooltipBySqd: (sqd: SavedQueryDescriptor | undefined) => import("react/jsx-runtime").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) => React.JSX.Element>;
15
+ declare const TMSavedQuerySelector: React.MemoExoticComponent<({ items, selectedId, allowShowSearch, height, manageDefault, onItemClick, onDeleted, refreshFavoriteSavedQueries, onRefreshData }: ITMSavedQuerySelectorProps) => import("react/jsx-runtime").JSX.Element>;
16
16
  export default TMSavedQuerySelector;
@@ -1,4 +1,3 @@
1
- import React from 'react';
2
1
  import { SavedQueryDescriptor, DcmtTypeDescriptor, TaskDescriptor, ObjectRef, HomeBlogPost } from '@topconsultnpm/sdk-ts';
3
2
  import { IntesiCertificateData } from '../../../helper';
4
3
  import { DcmtInfo, IGraphometricManagerProp, TaskContext } from '../../../ts';
@@ -46,5 +45,5 @@ interface ITMSearchProps {
46
45
  fetchRemoteCertificates?: (email: string) => Promise<IntesiCertificateData[]>;
47
46
  graphometricManager?: IGraphometricManagerProp;
48
47
  }
49
- declare const TMSearch: (props: ITMSearchProps) => React.JSX.Element;
48
+ declare const TMSearch: (props: ITMSearchProps) => import("react/jsx-runtime").JSX.Element;
50
49
  export default TMSearch;
@@ -29,12 +29,6 @@ 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", 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;
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;
@@ -3,8 +3,8 @@ import React, { useCallback, useEffect, useLayoutEffect, useMemo, useRef, useSta
3
3
  import styled from 'styled-components';
4
4
  import { LoadIndicator } from 'devextreme-react';
5
5
  import { AppModules, DataColumnTypes, DataListViewModes, DcmtTypeListCacheService, LayoutCacheService, LayoutModes, MetadataDataDomains, SDK_Globals, SystemMIDsAsNumber, UserListCacheService, } from '@topconsultnpm/sdk-ts';
6
- 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, SDKUI_Globals, SDKUI_Localizator, IconCloseOutline, getSearchResultPanelLayout, getSearchResultPanelLayoutSignature, hasSearchResultPanelLayout, saveSearchResultPanelLayout, subscribeSearchResultPanelLayout, DEFAULT_VIRTUAL_RENDERING_THRESHOLD } from '../../../helper';
7
- import { CounterItemKey } from '../../base/TMCounterContainer';
6
+ 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
+ import { CounterItemKey, formatCount } from '../../base/TMCounterContainer';
8
8
  import { getDcmtCicoStatus } from '../../../helper/checkinCheckoutManager';
9
9
  import { DcmtOperationTypes, SearchResultContext, } from '../../../ts';
10
10
  import { Gutters, TMColors } from '../../../utils/theme';
@@ -285,6 +285,26 @@ handleNavigateToWGs, handleNavigateToDossiers, fetchRemoteCertificates, graphome
285
285
  if (refreshUI)
286
286
  setLastUpdateSearchTime(new Date(Date.now()));
287
287
  };
288
+ // Ref alla versione corrente: l'anteprima è memoizzata e la funzione si ricrea a ogni render
289
+ const refreshFocusedDataRowRef = useRef(refreshFocusedDataRowAsync);
290
+ refreshFocusedDataRowRef.current = refreshFocusedDataRowAsync;
291
+ // Anteprima scaricata dal server con tracciatura "Mostra file": aggiorna solo la riga del documento
292
+ const onPreviewFileRetrieved = useCallback(async (tid, did) => {
293
+ const traceMids = getTraceShowFileMids(fromDTD);
294
+ if (!tid || !did || traceMids.length === 0)
295
+ return;
296
+ try {
297
+ const res = await getDcmtMetadataValuesAsync(tid, did, traceMids);
298
+ // Uscito dalla vista: la riga resta per non chiudere l'anteprima aperta
299
+ if (res === null)
300
+ ShowAlert({ mode: 'warning', title: SDKUI_Localizator.DcmtNoLongerAvailable, ...getTraceShowFileNotUpdatedMessage(fromDTD), duration: 6000 });
301
+ else if (res)
302
+ await refreshFocusedDataRowRef.current(tid, did, true, res);
303
+ }
304
+ catch (e) {
305
+ console.error('Errore aggiornamento metadati "Mostra file":', e);
306
+ }
307
+ }, [fromDTD]);
288
308
  // Refreshes metadata for selected documents (or focused one) and triggers grid re-render
289
309
  const onRefreshDataRowsAsync = async () => {
290
310
  let dcmts = getSelectedDcmtsOrFocused(selectedItems, focusedItem);
@@ -370,6 +390,7 @@ handleNavigateToWGs, handleNavigateToDossiers, fetchRemoteCertificates, graphome
370
390
  showTodoDcmtForm,
371
391
  graphometricManager,
372
392
  showSelector,
393
+ floatingActionConfig,
373
394
  },
374
395
  tasks: {
375
396
  allTasks: allTasks,
@@ -829,7 +850,7 @@ handleNavigateToWGs, handleNavigateToDossiers, fetchRemoteCertificates, graphome
829
850
  const isSearchResultOnScreen = isVisible && !isOpenDcmtForm && !isOpenDetails && !isOpenMaster;
830
851
  const tmBlog = useMemo(() => _jsx(TMDcmtBlog, { tid: focusedItem?.TID, did: focusedItem?.DID, isPageVisible: isSearchResultOnScreen, fetchBlogDataTrigger: refreshBlogTrigger, allTasks: allTasks, getAllTasks: getAllTasks, deleteTaskByIdsCallback: deleteTaskByIdsCallback, addTaskCallback: addTaskCallback, editTaskCallback: editTaskCallback, handleNavigateToWGs: handleNavigateToWGs, handleNavigateToDossiers: handleNavigateToDossiers }), [focusedItem, allTasks, refreshBlogTrigger, isSearchResultOnScreen, handleNavigateToWGs, handleNavigateToDossiers, onRefreshBlogDatagrid]);
831
852
  const tmSysMetadata = useMemo(() => _jsx(TMMetadataValues, { layoutMode: LayoutModes.Update, openChooserBySingleClick: true, TID: focusedItem?.TID, isReadOnly: true, deviceType: deviceType, metadataValues: currentMetadataValues.filter(o => (o.mid != undefined && o.mid <= 100)), metadataValuesOrig: currentMetadataValues.filter(o => (o.mid != undefined && o.mid <= 100)), validationItems: [] }), [focusedItem, currentMetadataValues, deviceType]);
832
- const tmDcmtPreview = useMemo(() => _jsx(TMDcmtPreviewWrapper, { refreshPreviewTrigger: refreshPreviewTrigger, currentDcmt: currentDcmt, isPageVisible: isSearchResultOnScreen, onBack: backHandlerSecondary }), [currentDcmt, refreshPreviewTrigger, isSearchResultOnScreen, backHandlerSecondary]);
853
+ const tmDcmtPreview = useMemo(() => _jsx(TMDcmtPreviewWrapper, { refreshPreviewTrigger: refreshPreviewTrigger, currentDcmt: currentDcmt, isPageVisible: isSearchResultOnScreen, onBack: backHandlerSecondary, onFileRetrieved: onPreviewFileRetrieved }), [currentDcmt, refreshPreviewTrigger, isSearchResultOnScreen, backHandlerSecondary, onPreviewFileRetrieved]);
833
854
  // Auto-fetch indexing info when drawer is open and focusedItem changes
834
855
  useEffect(() => {
835
856
  if (!focusedItem || !showIndexingInfo)
@@ -1403,13 +1424,16 @@ const TMSearchResultGrid = ({ openInOffice, fromDTD, operationItems, allUsers, i
1403
1424
  const gridSorting = useMemo(() => ({ mode: 'multiple' }), []);
1404
1425
  const gridSelection = useMemo(() => ({ mode: allowMultipleSelection ? 'multiple' : 'single' }), [allowMultipleSelection]);
1405
1426
  const useNativeScrollbar = SDKUI_Globals.userSettings?.themeSettings.gridSettings.useNativeScrollbar === 1;
1406
- // Con pagine grandi (oltre la soglia impostata, default 500 righe) il rendering virtuale delle righe evita di creare nel DOM tutte le righe della pagina.
1407
- const virtualRenderingThreshold = SDKUI_Globals.userSettings.searchSettings?.virtualRenderingThreshold ?? DEFAULT_VIRTUAL_RENDERING_THRESHOLD;
1427
+ // Rendering virtuale delle righe oltre VIRTUAL_RENDERING_THRESHOLD righe o VIRTUAL_RENDERING_CELL_THRESHOLD celle (righe effettive × colonne)
1428
+ const pageRowCount = Math.min(pageSize, dataSource?.length ?? 0);
1429
+ // +1 per la colonna icona (FILEEXT) sempre presente
1430
+ const visibleColumnCount = columns.filter(col => col.visible !== false && col.dataField !== 'FILEEXT').length + 1;
1431
+ const useVirtualRows = pageRowCount > VIRTUAL_RENDERING_THRESHOLD || pageRowCount * visibleColumnCount > VIRTUAL_RENDERING_CELL_THRESHOLD;
1408
1432
  const gridScrolling = useMemo(() => ({
1409
1433
  columnRenderingMode: 'virtual',
1410
- rowRenderingMode: pageSize > virtualRenderingThreshold ? 'virtual' : 'standard',
1434
+ rowRenderingMode: useVirtualRows ? 'virtual' : 'standard',
1411
1435
  useNative: useNativeScrollbar
1412
- }), [useNativeScrollbar, pageSize, virtualRenderingThreshold]);
1436
+ }), [useNativeScrollbar, useVirtualRows]);
1413
1437
  // Handles selection change in the data grid
1414
1438
  const handleSelectionChange = useCallback((e) => {
1415
1439
  if (onSelectionChanged === undefined)
@@ -1420,8 +1444,14 @@ const TMSearchResultGrid = ({ openInOffice, fromDTD, operationItems, allUsers, i
1420
1444
  // Handles focus change in the data grid
1421
1445
  const handleFocusedRowChange = useCallback((e) => {
1422
1446
  // Non bloccare mai questo handler: è chiamato quando l'utente clicca su una riga
1423
- onFocusedItemChanged?.(e.row?.data);
1424
- }, [onFocusedItemChanged]);
1447
+ // Con il rendering virtuale la riga su cui il cambio pagina sposta il fuoco può non essere ancora disegnata:
1448
+ // e.row è undefined e il documento si ricava dalla chiave (altrimenti focusedRowKey ricadrebbe su 0, cioè pagina 1)
1449
+ const rowData = e.row?.data ?? dataSource?.find(item => item.rowIndex === e.component.option('focusedRowKey'));
1450
+ // La prop controllata va allineata subito: finché resta sulla riga precedente, il wrapper React
1451
+ // riporta lì il fuoco e autoNavigateToFocusedRow riporta la griglia alla sua pagina
1452
+ setFocusedItem(rowData);
1453
+ onFocusedItemChanged?.(rowData);
1454
+ }, [onFocusedItemChanged, dataSource]);
1425
1455
  // Handler for double-click row event
1426
1456
  const onRowDblClick = useCallback((e) => {
1427
1457
  if (onDblClick === undefined)
@@ -1522,8 +1552,8 @@ const TMSearchResultGrid = ({ openInOffice, fromDTD, operationItems, allUsers, i
1522
1552
  [CounterItemKey.allItems, {
1523
1553
  key: CounterItemKey.allItems,
1524
1554
  show: true,
1525
- caption: `${dcmtsReturned} restituiti su ${dcmtsFound} trovati`,
1526
- value: `${dcmtsReturned}/${dcmtsFound}`,
1555
+ caption: `${formatCount(dcmtsReturned)} restituiti su ${formatCount(dcmtsFound)} trovati`,
1556
+ value: `${formatCount(dcmtsReturned)}/${formatCount(dcmtsFound)}`,
1527
1557
  icon: _jsx(IconAll, {}),
1528
1558
  order: -1
1529
1559
  }]
@@ -1535,9 +1565,9 @@ const TMSearchResultGrid = ({ openInOffice, fromDTD, operationItems, allUsers, i
1535
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 })] });
1536
1566
  };
1537
1567
  //#region TMSearchResultSelector
1538
- const StyledItemTemplate = styled.div `
1539
- background: ${(props) => props.$isSelected ? 'oklch(from var(--dx-color-primary) l c h / .2) !important' : 'transparent'};
1540
- cursor: pointer;
1568
+ const StyledItemTemplate = styled.div `
1569
+ background: ${(props) => props.$isSelected ? 'oklch(from var(--dx-color-primary) l c h / .2) !important' : 'transparent'};
1570
+ cursor: pointer;
1541
1571
  `;
1542
1572
  const MemoizedStyledItemTemplate = React.memo(StyledItemTemplate);
1543
1573
  const TMSearchResultSelector = ({ searchResults = [], disableAccordionIfSingleCategory = false, selectedTID, selectedSearchResult, autoSelectFirst = true, onSelectionChanged }) => {
@@ -1737,92 +1767,92 @@ const PanelDisabledStateHandler = ({ isBoardDisabled, savedBlogVisible = false }
1737
1767
  }, [isBoardDisabled, savedBlogVisible]);
1738
1768
  return null;
1739
1769
  };
1740
- const TMDcmtPreviewWrapper = ({ refreshPreviewTrigger, currentDcmt, isVisible, isPageVisible = true, onBack }) => {
1770
+ const TMDcmtPreviewWrapper = ({ refreshPreviewTrigger, currentDcmt, isVisible, isPageVisible = true, onBack, onFileRetrieved }) => {
1741
1771
  const { setPanelVisibilityById, toggleMaximize, isResizingActive, countVisibleLeafPanels } = useTMPanelManagerContext();
1742
1772
  const deviceType = useDeviceType();
1743
1773
  const isMobile = deviceType === DeviceType.MOBILE;
1744
- return (_jsx(TMDcmtPreview, { dcmtData: currentDcmt, onClosePanel: (!isMobile && countVisibleLeafPanels() > 1) ? () => setPanelVisibilityById('tmDcmtPreview', false) : undefined, onBack: onBack, allowMaximize: !isMobile && countVisibleLeafPanels() > 1, onMaximizePanel: (!isMobile && countVisibleLeafPanels() > 1) ? () => toggleMaximize("tmDcmtPreview") : undefined, isResizingActive: isResizingActive, isVisible: isVisible && isPageVisible }, refreshPreviewTrigger));
1774
+ return (_jsx(TMDcmtPreview, { dcmtData: currentDcmt, onClosePanel: (!isMobile && countVisibleLeafPanels() > 1) ? () => setPanelVisibilityById('tmDcmtPreview', false) : undefined, onBack: onBack, allowMaximize: !isMobile && countVisibleLeafPanels() > 1, onMaximizePanel: (!isMobile && countVisibleLeafPanels() > 1) ? () => toggleMaximize("tmDcmtPreview") : undefined, isResizingActive: isResizingActive, isVisible: isVisible && isPageVisible, onFileRetrieved: onFileRetrieved }, refreshPreviewTrigger));
1745
1775
  };
1746
1776
  // Styled Components
1747
- const StyledPlaceholder = styled.div `
1748
- padding: 20px;
1749
- text-align: center;
1750
- color: #888;
1777
+ const StyledPlaceholder = styled.div `
1778
+ padding: 20px;
1779
+ text-align: center;
1780
+ color: #888;
1751
1781
  `;
1752
- const StyledIndexingInfoSection = styled.div `
1753
- padding: 15px;
1754
- border-top: 1px solid #e0e0e0;
1755
- background: linear-gradient(to bottom, #f9f9f9, #f5f5f5);
1756
- display: flex;
1757
- flex-direction: column;
1758
- gap: 10px;
1782
+ const StyledIndexingInfoSection = styled.div `
1783
+ padding: 15px;
1784
+ border-top: 1px solid #e0e0e0;
1785
+ background: linear-gradient(to bottom, #f9f9f9, #f5f5f5);
1786
+ display: flex;
1787
+ flex-direction: column;
1788
+ gap: 10px;
1759
1789
  `;
1760
- const StyledIndexingToggle = styled.button `
1761
- display: flex;
1762
- align-items: center;
1763
- justify-content: space-between;
1764
- width: 100%;
1765
- padding: 10px 16px;
1766
- background: white;
1767
- border: 1px solid #d0d0d0;
1768
- border-radius: 6px;
1769
- cursor: ${props => props.disabled ? 'not-allowed' : 'pointer'};
1770
- transition: all 0.2s ease;
1771
- font-size: 14px;
1772
- font-weight: 500;
1773
- color: #333;
1774
- opacity: ${props => props.disabled ? 0.6 : 1};
1775
- box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
1776
-
1777
- &:hover:not(:disabled) {
1778
- background: #f8f8f8;
1779
- border-color: #2196F3;
1780
- box-shadow: 0 2px 4px rgba(33, 150, 243, 0.2);
1781
- }
1782
-
1783
- &:active:not(:disabled) {
1784
- transform: translateY(1px);
1785
- box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1);
1786
- }
1790
+ const StyledIndexingToggle = styled.button `
1791
+ display: flex;
1792
+ align-items: center;
1793
+ justify-content: space-between;
1794
+ width: 100%;
1795
+ padding: 10px 16px;
1796
+ background: white;
1797
+ border: 1px solid #d0d0d0;
1798
+ border-radius: 6px;
1799
+ cursor: ${props => props.disabled ? 'not-allowed' : 'pointer'};
1800
+ transition: all 0.2s ease;
1801
+ font-size: 14px;
1802
+ font-weight: 500;
1803
+ color: #333;
1804
+ opacity: ${props => props.disabled ? 0.6 : 1};
1805
+ box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
1806
+
1807
+ &:hover:not(:disabled) {
1808
+ background: #f8f8f8;
1809
+ border-color: #2196F3;
1810
+ box-shadow: 0 2px 4px rgba(33, 150, 243, 0.2);
1811
+ }
1812
+
1813
+ &:active:not(:disabled) {
1814
+ transform: translateY(1px);
1815
+ box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1);
1816
+ }
1787
1817
  `;
1788
- const StyledLeftContent = styled.div `
1789
- display: flex;
1790
- align-items: center;
1791
- gap: 8px;
1818
+ const StyledLeftContent = styled.div `
1819
+ display: flex;
1820
+ align-items: center;
1821
+ gap: 8px;
1792
1822
  `;
1793
- const StyledRightContent = styled.div `
1794
- display: flex;
1795
- align-items: center;
1796
- gap: 8px;
1823
+ const StyledRightContent = styled.div `
1824
+ display: flex;
1825
+ align-items: center;
1826
+ gap: 8px;
1797
1827
  `;
1798
- const StyledChevron = styled.span `
1799
- transition: transform 0.2s ease;
1800
- transform: ${props => props.$isOpen ? 'rotate(180deg)' : 'rotate(0deg)'};
1801
- color: #666;
1802
- font-size: 12px;
1828
+ const StyledChevron = styled.span `
1829
+ transition: transform 0.2s ease;
1830
+ transform: ${props => props.$isOpen ? 'rotate(180deg)' : 'rotate(0deg)'};
1831
+ color: #666;
1832
+ font-size: 12px;
1803
1833
  `;
1804
- const StyledIndexingInfoBox = styled.div `
1805
- position: relative;
1806
- background: white;
1807
- border: 1px solid #e0e0e0;
1808
- border-radius: 6px;
1809
- padding: 12px;
1810
- max-height: 200px;
1811
- overflow: auto;
1812
- font-family: 'Courier New', monospace;
1813
- font-size: 12px;
1814
- color: #333;
1815
- box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
1816
- animation: slideDown 0.2s ease;
1817
-
1818
- @keyframes slideDown {
1819
- from {
1820
- opacity: 0;
1821
- transform: translateY(-10px);
1822
- }
1823
- to {
1824
- opacity: 1;
1825
- transform: translateY(0);
1826
- }
1827
- }
1834
+ const StyledIndexingInfoBox = styled.div `
1835
+ position: relative;
1836
+ background: white;
1837
+ border: 1px solid #e0e0e0;
1838
+ border-radius: 6px;
1839
+ padding: 12px;
1840
+ max-height: 200px;
1841
+ overflow: auto;
1842
+ font-family: 'Courier New', monospace;
1843
+ font-size: 12px;
1844
+ color: #333;
1845
+ box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
1846
+ animation: slideDown 0.2s ease;
1847
+
1848
+ @keyframes slideDown {
1849
+ from {
1850
+ opacity: 0;
1851
+ transform: translateY(-10px);
1852
+ }
1853
+ to {
1854
+ opacity: 1;
1855
+ transform: translateY(0);
1856
+ }
1857
+ }
1828
1858
  `;
@@ -12,5 +12,5 @@ interface TMSearchResultFloatingActionButtonProps {
12
12
  selectedDcmtsOrFocused: Array<DcmtInfo>;
13
13
  config: TMSearchResultFloatingActionConfig;
14
14
  }
15
- export declare const TMSearchResultFloatingActionButton: (props: TMSearchResultFloatingActionButtonProps) => React.JSX.Element;
15
+ export declare const TMSearchResultFloatingActionButton: (props: TMSearchResultFloatingActionButtonProps) => import("react/jsx-runtime").JSX.Element;
16
16
  export default TMSearchResultFloatingActionButton;
@@ -1,9 +1,8 @@
1
- import React from "react";
2
1
  import { DcmtInfo, IGraphometricManagerProp } from "../../../ts";
3
2
  interface TMSignatureInfoContentProps {
4
3
  inputDcmt: DcmtInfo;
5
4
  graphometricManager?: IGraphometricManagerProp;
6
5
  onClose?: () => void;
7
6
  }
8
- declare const TMSignatureInfoContent: (props: TMSignatureInfoContentProps) => React.JSX.Element;
7
+ declare const TMSignatureInfoContent: (props: TMSignatureInfoContentProps) => import("react/jsx-runtime").JSX.Element;
9
8
  export default TMSignatureInfoContent;
@@ -1,4 +1,3 @@
1
- import React from "react";
2
1
  import { DcmtInfo } from "../../../ts/types";
3
2
  import { DeviceType } from "../../base/TMDeviceProvider";
4
3
  import { DcmtTypeDescriptor, HomeBlogPost, TaskDescriptor } from "@topconsultnpm/sdk-ts";
@@ -15,5 +14,5 @@ interface TMViewHistoryDcmtProps {
15
14
  handleNavigateToWGs?: (value: HomeBlogPost | number) => Promise<void>;
16
15
  handleNavigateToDossiers?: (value: HomeBlogPost | number) => Promise<void>;
17
16
  }
18
- declare const TMViewHistoryDcmt: (props: TMViewHistoryDcmtProps) => React.JSX.Element;
17
+ declare const TMViewHistoryDcmt: (props: TMViewHistoryDcmtProps) => import("react/jsx-runtime").JSX.Element;
19
18
  export default TMViewHistoryDcmt;
@@ -155,7 +155,7 @@ const TMViewHistoryDcmt = (props) => {
155
155
  let result = [];
156
156
  let i = 0;
157
157
  if (abortLocalController.signal.aborted) {
158
- result.push({ rowIndex: i, id1: currentDcmt.id, id2: currentDcmt.id, resultType: ResultTypes.WARNING, description: `Operazione interrotta. Elaborate ${i}` });
158
+ result.push({ rowIndex: i, id1: currentDcmt.id, id2: currentDcmt.id, resultType: ResultTypes.WARNING, description: SDKUI_Localizator.OperationItemsInterrupted.replaceParams(i) });
159
159
  }
160
160
  else {
161
161
  panel.setSubtitle(SDKUI_Localizator.Delete);
@@ -36,5 +36,5 @@ export interface TMTaskFormProps {
36
36
  onOpenPdfEditorRequest?: (dcmtInfo: Array<DcmtInfo>, refreshDocumentPreview?: () => Promise<void>) => void;
37
37
  s4TViewerDialogComponent?: React.ReactNode;
38
38
  }
39
- declare const TMTaskForm: (props: TMTaskFormProps) => React.JSX.Element;
39
+ declare const TMTaskForm: (props: TMTaskFormProps) => import("react/jsx-runtime").JSX.Element;
40
40
  export default TMTaskForm;