@topconsultnpm/sdkui-react 6.22.0-t1 → 6.22.0-t3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (286) hide show
  1. package/lib/components/NewComponents/ContextMenu/TMContextMenu.js +3 -3
  2. package/lib/components/NewComponents/ContextMenu/hooks.d.ts +1 -1
  3. package/lib/components/NewComponents/ContextMenu/styles.d.ts +45 -43
  4. package/lib/components/NewComponents/FloatingMenuBar/TMFloatingMenuBar.js +6 -6
  5. package/lib/components/NewComponents/FloatingMenuBar/styles.d.ts +80 -73
  6. package/lib/components/base/Styled.d.ts +92 -76
  7. package/lib/components/base/Styled.js +7 -5
  8. package/lib/components/base/TMAccordionNew.js +7 -7
  9. package/lib/components/base/TMAlert.d.ts +32 -32
  10. package/lib/components/base/TMAlert.js +6 -8
  11. package/lib/components/base/TMAreaManager.js +53 -55
  12. package/lib/components/base/TMButton.d.ts +13 -0
  13. package/lib/components/base/TMButton.js +139 -7
  14. package/lib/components/base/TMClosableList.js +3 -3
  15. package/lib/components/base/TMCustomButton.js +40 -48
  16. package/lib/components/base/TMDataGrid.d.ts +4 -0
  17. package/lib/components/base/TMDataGrid.js +292 -12
  18. package/lib/components/base/TMDataGridExportForm.js +39 -30
  19. package/lib/components/base/TMDropDownMenu.js +1 -1
  20. package/lib/components/base/TMEditorBase.d.ts +2 -0
  21. package/lib/components/base/TMFileManager.js +5 -3
  22. package/lib/components/base/TMFileManagerDataGridView.js +12 -3
  23. package/lib/components/base/TMFileManagerThumbnailItems.js +20 -10
  24. package/lib/components/base/TMFileManagerUtils.d.ts +6 -6
  25. package/lib/components/base/TMFileManagerUtils.js +37 -1
  26. package/lib/components/base/TMLayout.d.ts +2 -2
  27. package/lib/components/base/TMLayout.js +3 -3
  28. package/lib/components/base/TMList.js +1 -1
  29. package/lib/components/base/TMListView.js +3 -3
  30. package/lib/components/base/TMModal.d.ts +11 -0
  31. package/lib/components/base/TMModal.js +47 -13
  32. package/lib/components/base/TMPanel.d.ts +6 -0
  33. package/lib/components/base/TMPanel.js +141 -28
  34. package/lib/components/base/TMPopUp.js +5 -2
  35. package/lib/components/base/TMResizableMenu.js +2 -2
  36. package/lib/components/base/TMRightSidebar.js +1 -1
  37. package/lib/components/base/TMShowAllOrMaxItemsButton.js +1 -1
  38. package/lib/components/base/TMSpinner.d.ts +2 -1
  39. package/lib/components/base/TMSpinner.js +9 -7
  40. package/lib/components/base/TMTab.js +2 -2
  41. package/lib/components/base/TMTabControl.d.ts +106 -0
  42. package/lib/components/base/TMTabControl.js +664 -0
  43. package/lib/components/base/TMToggleButton.js +2 -2
  44. package/lib/components/base/TMToolbarCard.js +3 -3
  45. package/lib/components/base/TMTooltip.d.ts +2 -1
  46. package/lib/components/base/TMTooltip.js +24 -8
  47. package/lib/components/base/TMTreeView.d.ts +13 -7
  48. package/lib/components/base/TMTreeView.js +143 -70
  49. package/lib/components/base/TMWaitPanel.js +3 -3
  50. package/lib/components/base/waitPanel/TMWaitPanelConfirm.d.ts +12 -0
  51. package/lib/components/base/waitPanel/TMWaitPanelConfirm.js +185 -0
  52. package/lib/components/base/waitPanel/TMWaitPanelManager.d.ts +169 -0
  53. package/lib/components/base/waitPanel/TMWaitPanelManager.js +320 -0
  54. package/lib/components/base/waitPanel/TMWaitPanelView.d.ts +53 -0
  55. package/lib/components/base/waitPanel/TMWaitPanelView.js +274 -0
  56. package/lib/components/base/waitPanel/index.d.ts +1 -0
  57. package/lib/components/base/waitPanel/index.js +1 -0
  58. package/lib/components/choosers/TMCultureIDPicker.js +2 -2
  59. package/lib/components/choosers/TMDataListItemChooser.js +1 -1
  60. package/lib/components/choosers/TMDataListItemPicker.js +2 -2
  61. package/lib/components/choosers/TMDcmtTypeChooser.js +5 -4
  62. package/lib/components/choosers/TMDiskChooser.js +1 -1
  63. package/lib/components/choosers/TMDistinctValues.d.ts +9 -7
  64. package/lib/components/choosers/TMDistinctValues.js +157 -141
  65. package/lib/components/choosers/TMDynDataListItemChooser.js +1 -1
  66. package/lib/components/choosers/TMImageIDChooser.js +1 -1
  67. package/lib/components/choosers/TMMetadataChooser.js +3 -3
  68. package/lib/components/choosers/TMPathChooser.js +17 -34
  69. package/lib/components/choosers/TMQuickSearchInfo.d.ts +13 -0
  70. package/lib/components/choosers/TMQuickSearchInfo.js +279 -0
  71. package/lib/components/choosers/TMQuickSearchSettingsForm.d.ts +16 -0
  72. package/lib/components/choosers/TMQuickSearchSettingsForm.js +94 -0
  73. package/lib/components/choosers/TMRelationChooser.js +1 -1
  74. package/lib/components/choosers/TMSelectedValuesSummary.d.ts +13 -0
  75. package/lib/components/choosers/TMSelectedValuesSummary.js +89 -0
  76. package/lib/components/choosers/TMUserChooser.js +1 -1
  77. package/lib/components/editors/TMCheckBox.js +1 -1
  78. package/lib/components/editors/TMDateBox.d.ts +16 -1
  79. package/lib/components/editors/TMDateBox.js +90 -22
  80. package/lib/components/editors/TMDropDown.d.ts +3 -0
  81. package/lib/components/editors/TMDropDown.js +197 -5
  82. package/lib/components/editors/TMEditorStyled.d.ts +21 -43
  83. package/lib/components/editors/TMFormulaEditor.js +1 -1
  84. package/lib/components/editors/TMHtmlContentDisplay.js +1 -1
  85. package/lib/components/editors/TMLocalizedTextBox.js +1 -1
  86. package/lib/components/editors/TMMetadataEditor.d.ts +5 -1
  87. package/lib/components/editors/TMMetadataEditor.js +27 -23
  88. package/lib/components/editors/TMMetadataValues.js +6 -6
  89. package/lib/components/editors/TMRadioButton.js +2 -2
  90. package/lib/components/editors/TMSummary.js +3 -3
  91. package/lib/components/editors/TMTextArea.d.ts +1 -0
  92. package/lib/components/editors/TMTextArea.js +25 -17
  93. package/lib/components/editors/TMTextBox.d.ts +2 -0
  94. package/lib/components/editors/TMTextBox.js +32 -21
  95. package/lib/components/editors/TMTextExpression.js +1 -1
  96. package/lib/components/features/archive/TMArchive.js +24 -5
  97. package/lib/components/features/assistant/TMHelpOnLineChat.d.ts +29 -0
  98. package/lib/components/features/assistant/TMHelpOnLineChat.js +1384 -0
  99. package/lib/components/features/assistant/TMToppyDraggableHelpCenter.js +4 -4
  100. package/lib/components/features/assistant/TMToppySpeechBubble.js +1 -1
  101. package/lib/components/features/assistant/dataset/Designer-Suggested-Questions.json +102 -0
  102. package/lib/components/features/assistant/dataset/Login-Suggested-Questions.json +32 -0
  103. package/lib/components/features/assistant/dataset/Surfer-Suggested-Questions.json +102 -0
  104. package/lib/components/features/documents/TMBatchUpdateForm.js +22 -9
  105. package/lib/components/features/documents/TMCopyToFolderForm.js +50 -42
  106. package/lib/components/features/documents/TMDcmtBlog.d.ts +3 -0
  107. package/lib/components/features/documents/TMDcmtBlog.js +4 -4
  108. package/lib/components/features/documents/TMDcmtForm.d.ts +7 -0
  109. package/lib/components/features/documents/TMDcmtForm.js +281 -113
  110. package/lib/components/features/documents/TMDcmtFormActionButtons.d.ts +11 -0
  111. package/lib/components/features/documents/TMDcmtFormActionButtons.js +79 -9
  112. package/lib/components/features/documents/TMDcmtIcon.d.ts +1 -3
  113. package/lib/components/features/documents/TMDcmtIcon.js +8 -8
  114. package/lib/components/features/documents/TMDcmtPreview.d.ts +7 -5
  115. package/lib/components/features/documents/TMDcmtPreview.js +16 -10
  116. package/lib/components/features/documents/TMDcmtTasks.js +2 -9
  117. package/lib/components/features/documents/TMDownloadRelationViewerSection.js +1 -1
  118. package/lib/components/features/documents/TMFileUploader.js +7 -7
  119. package/lib/components/features/documents/TMMasterDetailDcmts.d.ts +2 -0
  120. package/lib/components/features/documents/TMMasterDetailDcmts.js +95 -108
  121. package/lib/components/features/documents/TMMasterInfoFields.d.ts +20 -0
  122. package/lib/components/features/documents/TMMasterInfoFields.js +185 -0
  123. package/lib/components/features/documents/TMMergeToPdfForm.d.ts +1 -2
  124. package/lib/components/features/documents/TMMergeToPdfForm.js +83 -56
  125. package/lib/components/features/documents/TMMultiMasterDetailDcmtsForm.d.ts +46 -0
  126. package/lib/components/features/documents/TMMultiMasterDetailDcmtsForm.js +320 -0
  127. package/lib/components/features/documents/TMMultiMasterDetailDcmtsUtils.d.ts +370 -0
  128. package/lib/components/features/documents/TMMultiMasterDetailDcmtsUtils.js +283 -0
  129. package/lib/components/features/documents/TMRelationViewer.d.ts +29 -9
  130. package/lib/components/features/documents/TMRelationViewer.js +310 -208
  131. package/lib/components/features/documents/copyAndMergeDcmtsShared.d.ts +1 -1
  132. package/lib/components/features/documents/relationTreeState.d.ts +32 -0
  133. package/lib/components/features/documents/relationTreeState.js +89 -0
  134. package/lib/components/features/search/TMMetadataOutputForm.js +1 -1
  135. package/lib/components/features/search/TMMetadataSorterForm.js +1 -1
  136. package/lib/components/features/search/TMSavedQuerySelector.js +2 -2
  137. package/lib/components/features/search/TMSearch.d.ts +1 -1
  138. package/lib/components/features/search/TMSearch.js +172 -34
  139. package/lib/components/features/search/TMSearchQueryEditor.js +7 -5
  140. package/lib/components/features/search/TMSearchQueryPanel.d.ts +14 -4
  141. package/lib/components/features/search/TMSearchQueryPanel.js +153 -62
  142. package/lib/components/features/search/TMSearchResult.d.ts +21 -0
  143. package/lib/components/features/search/TMSearchResult.js +461 -152
  144. package/lib/components/features/search/TMSignatureInfoContent.js +1 -1
  145. package/lib/components/features/search/TMTreeSelector.js +130 -83
  146. package/lib/components/features/search/TMViewHistoryDcmt.js +14 -25
  147. package/lib/components/features/tasks/TMTaskForm.js +1 -1
  148. package/lib/components/features/tasks/TMTaskFormUtils.js +3 -3
  149. package/lib/components/features/tasks/TMTasksAgenda.js +1 -1
  150. package/lib/components/features/tasks/TMTasksCalendar.js +1 -1
  151. package/lib/components/features/tasks/TMTasksHeader.js +1 -1
  152. package/lib/components/features/tasks/TMTasksUtilsView.js +1 -1
  153. package/lib/components/features/tasks/TMTasksView.js +97 -102
  154. package/lib/components/features/wg/TMWGsCopyMoveForm.js +92 -92
  155. package/lib/components/features/workflow/TMWorkflowPopup.d.ts +10 -0
  156. package/lib/components/features/workflow/TMWorkflowPopup.js +9 -5
  157. package/lib/components/features/workflow/diagram/ConnectionComponent.js +3 -3
  158. package/lib/components/features/workflow/diagram/DiagramItemComponent.js +3 -3
  159. package/lib/components/features/workflow/diagram/DiagramItemForm.js +1 -1
  160. package/lib/components/features/workflow/diagram/DiagramItemSvgContent.js +1 -1
  161. package/lib/components/features/workflow/diagram/RecipientList.js +1 -1
  162. package/lib/components/features/workflow/diagram/WFDiagram.js +4 -4
  163. package/lib/components/features/workflow/diagram/WorkitemRecipientsEditor.d.ts +3 -1
  164. package/lib/components/forms/Login/ChangePasswordInputs.d.ts +3 -1
  165. package/lib/components/forms/Login/Menu.js +1 -1
  166. package/lib/components/forms/Login/OTPReader.js +1 -1
  167. package/lib/components/forms/Login/PasswordStrengthChecker.js +1 -1
  168. package/lib/components/forms/Login/RapidAccessLogin.js +2 -2
  169. package/lib/components/forms/Login/RecoverPasswordFlow.js +2 -2
  170. package/lib/components/forms/Login/SelectBox.js +1 -1
  171. package/lib/components/forms/Login/StepIndicator.js +1 -1
  172. package/lib/components/forms/Login/TMLoginForm.js +7 -7
  173. package/lib/components/forms/Login/TextBox.js +1 -1
  174. package/lib/components/forms/TMApplyForm.js +3 -3
  175. package/lib/components/forms/TMChooserForm.js +1 -1
  176. package/lib/components/forms/TMResultDialog.js +1 -1
  177. package/lib/components/forms/TMSaveForm.js +3 -3
  178. package/lib/components/grids/TMBlogAttachments.js +14 -3
  179. package/lib/components/grids/TMBlogHeader.js +5 -1
  180. package/lib/components/grids/TMBlogsPost.d.ts +2 -0
  181. package/lib/components/grids/TMBlogsPost.js +122 -99
  182. package/lib/components/grids/TMBlogsPostUtils.d.ts +1 -0
  183. package/lib/components/grids/TMBlogsPostUtils.js +15 -4
  184. package/lib/components/grids/TMRecentsManager.js +4 -4
  185. package/lib/components/grids/TMValidationItemsList.js +1 -1
  186. package/lib/components/index.d.ts +6 -0
  187. package/lib/components/index.js +5 -0
  188. package/lib/components/layout/panelManager/TMPanelManagerContainer.d.ts +1 -0
  189. package/lib/components/layout/panelManager/TMPanelManagerContainer.js +25 -15
  190. package/lib/components/layout/panelManager/TMPanelManagerContext.js +68 -93
  191. package/lib/components/layout/panelManager/TMPanelManagerToolbar.d.ts +4 -5
  192. package/lib/components/layout/panelManager/TMPanelManagerToolbar.js +1 -1
  193. package/lib/components/layout/panelManager/TMPanelWrapper.js +3 -3
  194. package/lib/components/layout/panelManager/types.d.ts +3 -0
  195. package/lib/components/layout/panelManager/utils.js +13 -11
  196. package/lib/components/pages/TMPage.js +30 -32
  197. package/lib/components/query/TMQueryCountButton.js +1 -1
  198. package/lib/components/query/TMQueryEditor.d.ts +17 -10
  199. package/lib/components/query/TMQueryEditor.js +9 -8
  200. package/lib/components/sidebar/TMCommandsPanel.d.ts +4 -4
  201. package/lib/components/sidebar/TMCommandsPanel.js +1 -1
  202. package/lib/components/sidebar/TMHeader.d.ts +1 -0
  203. package/lib/components/sidebar/TMHeader.js +37 -27
  204. package/lib/components/sidebar/TMSidebar.js +1 -1
  205. package/lib/components/sidebar/TMSidebarItem.js +1 -1
  206. package/lib/components/viewers/TMMidViewer.js +6 -3
  207. package/lib/components/viewers/TMTidViewer.js +89 -28
  208. package/lib/components/wizard/TMStepIndicator.js +3 -3
  209. package/lib/css/tm-sdkui.css +1 -1
  210. package/lib/devextreme-license.d.ts +1 -0
  211. package/lib/devextreme-license.js +3 -0
  212. package/lib/helper/Enum_Localizator.d.ts +4 -4
  213. package/lib/helper/Enum_Localizator.js +1 -0
  214. package/lib/helper/Globalization.d.ts +1 -1
  215. package/lib/helper/SDKUI_Globals.d.ts +110 -0
  216. package/lib/helper/SDKUI_Globals.js +151 -0
  217. package/lib/helper/SDKUI_Localizator.d.ts +756 -677
  218. package/lib/helper/SDKUI_Localizator.js +790 -0
  219. package/lib/helper/TMAppUpdatedModal.d.ts +2 -0
  220. package/lib/helper/TMAppUpdatedModal.js +134 -0
  221. package/lib/helper/TMIcons.d.ts +1 -0
  222. package/lib/helper/TMIcons.js +4 -3
  223. package/lib/helper/TMPdfViewer.js +1 -1
  224. package/lib/helper/TMToppyMessage.js +1 -1
  225. package/lib/helper/TMUtils.d.ts +51 -4
  226. package/lib/helper/TMUtils.js +273 -12
  227. package/lib/helper/ZipManager.d.ts +1 -1
  228. package/lib/helper/ZipManager.js +2 -1
  229. package/lib/helper/checkinCheckoutManager.d.ts +1 -1
  230. package/lib/helper/checkinCheckoutManager.js +1 -1
  231. package/lib/helper/dataGridSearchHelper.d.ts +28 -0
  232. package/lib/helper/dataGridSearchHelper.js +51 -0
  233. package/lib/helper/dcmtsHelper.d.ts +22 -0
  234. package/lib/helper/dcmtsHelper.js +60 -1
  235. package/lib/helper/helpers.d.ts +24 -2
  236. package/lib/helper/helpers.js +59 -3
  237. package/lib/helper/index.d.ts +2 -0
  238. package/lib/helper/index.js +2 -0
  239. package/lib/helper/queryHelper.d.ts +6 -1
  240. package/lib/helper/queryHelper.js +8 -3
  241. package/lib/hooks/tmDistinctValuesGridHelper.d.ts +16 -0
  242. package/lib/hooks/tmDistinctValuesGridHelper.js +31 -0
  243. package/lib/hooks/useArchiveListForm.d.ts +39 -0
  244. package/lib/hooks/useArchiveListForm.js +46 -0
  245. package/lib/hooks/useCaseFlowApprove.d.ts +56 -0
  246. package/lib/hooks/useCaseFlowApprove.js +157 -0
  247. package/lib/hooks/useCheckInOutOperations.d.ts +0 -6
  248. package/lib/hooks/useCheckInOutOperations.js +14 -34
  249. package/lib/hooks/useDataUserIdItem.d.ts +1 -0
  250. package/lib/hooks/useDataUserIdItem.js +1 -0
  251. package/lib/hooks/useDcmtOperations.d.ts +3 -12
  252. package/lib/hooks/useDcmtOperations.js +187 -179
  253. package/lib/hooks/useDocumentOperations.d.ts +5 -0
  254. package/lib/hooks/useDocumentOperations.js +64 -33
  255. package/lib/hooks/useInputDialog.js +1 -1
  256. package/lib/hooks/useMultiMasterDetailDcmts.d.ts +98 -0
  257. package/lib/hooks/useMultiMasterDetailDcmts.js +758 -0
  258. package/lib/hooks/usePreventFileDrop.js +9 -0
  259. package/lib/hooks/useQueryParametersDialog.js +1 -1
  260. package/lib/hooks/useRelatedDocuments.d.ts +1 -0
  261. package/lib/hooks/useRelatedDocuments.js +22 -27
  262. package/lib/hooks/useShowDossiersV5.d.ts +12 -0
  263. package/lib/hooks/useShowDossiersV5.js +37 -0
  264. package/lib/hooks/useTMDistinctValuesMetadataDisplay.d.ts +18 -0
  265. package/lib/hooks/useTMDistinctValuesMetadataDisplay.js +103 -0
  266. package/lib/hooks/useTMDistinctValuesQuickSearch.d.ts +49 -0
  267. package/lib/hooks/useTMDistinctValuesQuickSearch.js +307 -0
  268. package/lib/hooks/useTMDistinctValuesSelection.d.ts +42 -0
  269. package/lib/hooks/useTMDistinctValuesSelection.js +103 -0
  270. package/lib/hooks/useTMDistinctValuesSource.d.ts +29 -0
  271. package/lib/hooks/useTMDistinctValuesSource.js +105 -0
  272. package/lib/hooks/useWorkflowApprove.js +33 -17
  273. package/lib/index.d.ts +2 -0
  274. package/lib/index.js +5 -2
  275. package/lib/services/caseflow/CaseFlowService.d.ts +277 -0
  276. package/lib/services/caseflow/CaseFlowService.js +761 -0
  277. package/lib/services/caseflow/CaseFlowTemplateCacheService.d.ts +28 -0
  278. package/lib/services/caseflow/CaseFlowTemplateCacheService.js +121 -0
  279. package/lib/services/caseflow/caseFlowNameCache.d.ts +32 -0
  280. package/lib/services/caseflow/caseFlowNameCache.js +116 -0
  281. package/lib/services/caseflow/caseFlowWorkItemUtils.d.ts +61 -0
  282. package/lib/services/caseflow/caseFlowWorkItemUtils.js +113 -0
  283. package/lib/services/index.d.ts +4 -0
  284. package/lib/services/index.js +4 -0
  285. package/lib/services/platform_services.d.ts +4 -4
  286. package/package.json +16 -13
@@ -2,7 +2,12 @@ import { useEffect } from "react";
2
2
  const usePreventFileDrop = (allowedDropZones) => {
3
3
  useEffect(() => {
4
4
  const isOverAllowedZone = (event) => allowedDropZones.some((ref) => ref.current?.contains(event.target));
5
+ // Il blocco vale solo per i file trascinati da fuori: i drag interni all'applicazione
6
+ // (riordino di metadati, colonne, tab, ...) devono restare liberi di completarsi
7
+ const isFileDrag = (event) => event.dataTransfer?.types?.includes("Files") === true;
5
8
  const handleDragOver = (event) => {
9
+ if (!isFileDrag(event))
10
+ return;
6
11
  if (isOverAllowedZone(event)) {
7
12
  // Riafferma "copy" ad ogni dragover: altrimenti un "none"
8
13
  // impostato mentre si era fuori zona resta e mostra "not-allowed"
@@ -17,6 +22,8 @@ const usePreventFileDrop = (allowedDropZones) => {
17
22
  }
18
23
  };
19
24
  const handleDragEnter = (event) => {
25
+ if (!isFileDrag(event))
26
+ return;
20
27
  if (isOverAllowedZone(event)) {
21
28
  document.body.style.cursor = "default";
22
29
  }
@@ -28,6 +35,8 @@ const usePreventFileDrop = (allowedDropZones) => {
28
35
  document.body.style.cursor = "default";
29
36
  };
30
37
  const handleDrop = (event) => {
38
+ if (!isFileDrag(event))
39
+ return;
31
40
  if (!isOverAllowedZone(event)) {
32
41
  event.preventDefault();
33
42
  document.body.style.cursor = "default";
@@ -1,4 +1,4 @@
1
- import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
1
+ import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { useEffect, useState } from "react";
3
3
  import { QueryParameterDescriptor } from '@topconsultnpm/sdk-ts';
4
4
  import { TMModal, TMTextBox, TMButton, TMCard, StyledDivHorizontal } from "../components";
@@ -67,6 +67,7 @@ export interface UseRelatedDocumentsReturn {
67
67
  checkManyToManyCapability: () => Promise<void>;
68
68
  archiveRelatedDcmtHandler: (relation: RelationDescriptor, type: 'detail' | 'master') => Promise<void>;
69
69
  executeManyToManyPairing: (relation: RelationDescriptor, isPairing: boolean) => Promise<void>;
70
+ backToPairSearchModal: (() => void) | undefined;
70
71
  }
71
72
  export declare const useRelatedDocuments: ({ selectedSearchResult, focusedItem, currentSearchResults }: UseRelatedDocumentsProps) => UseRelatedDocumentsReturn;
72
73
  export {};
@@ -2,7 +2,7 @@ import { jsx as _jsx } from "react/jsx-runtime";
2
2
  import { useState, useCallback, useMemo, useEffect } from 'react';
3
3
  import { SDKUI_Localizator } from '../helper/SDKUI_Localizator';
4
4
  import { IconPair, IconUnpair } from '../helper/TMIcons';
5
- import { hasDetailRelations, hasMasterRelations } from '../helper/dcmtsHelper';
5
+ import { hasDetailRelations, hasMasterRelations, mapRelationAssociationsToMids } from '../helper/dcmtsHelper';
6
6
  import { SDK_Globals, SearchEngine, RelationCacheService, RelationTypes, DcmtTypeListCacheService, SystemMIDsAsNumber, AccessLevelsEx } from '@topconsultnpm/sdk-ts';
7
7
  import { TMSpinner, TMExceptionBoxManager, ShowAlert } from '../components';
8
8
  export const useRelatedDocuments = ({ selectedSearchResult, focusedItem, currentSearchResults }) => {
@@ -28,6 +28,7 @@ export const useRelatedDocuments = ({ selectedSearchResult, focusedItem, current
28
28
  const [pairSearchModalParentDID, setPairSearchModalParentDID] = useState(undefined);
29
29
  const [pairSearchModalRelation, setPairSearchModalRelation] = useState(undefined);
30
30
  const [pairSearchModalInputMids, setPairSearchModalInputMids] = useState(undefined);
31
+ const [pairSearchContext, setPairSearchContext] = useState(undefined);
31
32
  const [currentTIDHasDetailRelations, setCurrentTIDHasDetailRelations] = useState();
32
33
  const [currentTIDHasMasterRelations, setCurrentTIDHasMasterRelations] = useState();
33
34
  const [canArchiveMasterRelation, setCanArchiveMasterRelation] = useState(false);
@@ -86,6 +87,7 @@ export const useRelatedDocuments = ({ selectedSearchResult, focusedItem, current
86
87
  if (!tms)
87
88
  return;
88
89
  const se = new SearchEngine(tms);
90
+ const operationTitle = isPairing ? SDKUI_Localizator.MatchManyDocumentsManyToMany : SDKUI_Localizator.UnmatchManyDocumentsManyToMany;
89
91
  try {
90
92
  TMSpinner.show({ description: isPairing ? 'Abbinamento in corso...' : 'Disabbinamento in corso...' });
91
93
  for (const doc of selected) {
@@ -115,10 +117,16 @@ export const useRelatedDocuments = ({ selectedSearchResult, focusedItem, current
115
117
  }
116
118
  }
117
119
  onCloseModal();
120
+ ShowAlert({
121
+ message: SDKUI_Localizator.OperationSuccess,
122
+ mode: 'success',
123
+ title: operationTitle,
124
+ duration: 3000
125
+ });
118
126
  }
119
127
  catch (error) {
120
128
  console.error('Error in onClick:', error);
121
- TMExceptionBoxManager.show({ exception: error });
129
+ TMExceptionBoxManager.show({ title: operationTitle, exception: error });
122
130
  }
123
131
  finally {
124
132
  TMSpinner.hide();
@@ -129,6 +137,14 @@ export const useRelatedDocuments = ({ selectedSearchResult, focusedItem, current
129
137
  }), []);
130
138
  const pairFloatingActionConfig = useMemo(() => createPairFloatingActionConfig(selectedManyToManyRelation, focusedItem?.TID ? Number(focusedItem.TID) : undefined, focusedItem?.DID ? Number(focusedItem.DID) : undefined, isPairingManyToMany, () => setShowPairDcmtsModal(false)), [createPairFloatingActionConfig, selectedManyToManyRelation, focusedItem, isPairingManyToMany]);
131
139
  const pairSearchModalFloatingActionConfig = useMemo(() => createPairFloatingActionConfig(pairSearchModalRelation, pairSearchModalParentTID, pairSearchModalParentDID, true, () => setShowPairSearchModal(false)), [createPairFloatingActionConfig, pairSearchModalRelation, pairSearchModalParentTID, pairSearchModalParentDID]);
140
+ const backToPairSearchModal = useMemo(() => {
141
+ if (!pairSearchContext)
142
+ return undefined;
143
+ return () => {
144
+ setShowPairDcmtsModal(false);
145
+ openPairSearchModal(pairSearchContext.relation, pairSearchContext.targetTID, pairSearchContext.qd);
146
+ };
147
+ }, [pairSearchContext, openPairSearchModal]);
132
148
  const getAllRelationsAsync = async () => {
133
149
  const tmSession = SDK_Globals.tmSession;
134
150
  try {
@@ -224,31 +240,7 @@ export const useRelatedDocuments = ({ selectedSearchResult, focusedItem, current
224
240
  };
225
241
  //This ensures archive master/detail works correctly regardless of output metadata configuration.
226
242
  const mapAssociationsToMidsAsync = useCallback(async (relation, type) => {
227
- if (!relation.associations || relation.associations.length === 0)
228
- return [];
229
- if (!focusedItem?.TID || !focusedItem?.DID)
230
- return [];
231
- const searchEngine = SDK_Globals.tmSession?.NewSearchEngine();
232
- if (!searchEngine)
233
- return [];
234
- const allMetadata = await searchEngine.GetMetadataAsync(focusedItem.TID, focusedItem.DID, false);
235
- if (!allMetadata?.dtdResult?.rows?.[0] || !allMetadata.selectMIDs)
236
- return [];
237
- const row = allMetadata.dtdResult.rows[0];
238
- const mids = allMetadata.selectMIDs;
239
- const metadataMap = new Map();
240
- mids.forEach((mid, index) => {
241
- const value = row[index];
242
- if (value !== undefined && value !== null) {
243
- metadataMap.set(mid, value.toString());
244
- }
245
- });
246
- return relation.associations.map(assoc => {
247
- const sourceMid = type === 'detail' ? (assoc.item1 ?? 0) : (assoc.item2 ?? 0);
248
- const targetMid = type === 'detail' ? (assoc.item2 ?? 0) : (assoc.item1 ?? 0);
249
- const value = metadataMap.get(sourceMid) ?? '';
250
- return { mid: targetMid, value };
251
- });
243
+ return mapRelationAssociationsToMids(relation, type, focusedItem);
252
244
  }, [focusedItem]);
253
245
  const archiveRelatedDcmtHandler = useCallback(async (relation, type) => {
254
246
  const targetTID = type === 'detail' ? relation.detailTID : relation.masterTID;
@@ -537,6 +529,7 @@ export const useRelatedDocuments = ({ selectedSearchResult, focusedItem, current
537
529
  dcmtsReturned: pairedDocumentsResult.dtdResult.rows.length,
538
530
  dcmtsFound: pairedDocumentsResult.dtdResult.rows.length
539
531
  };
532
+ setPairSearchContext(undefined);
540
533
  setPairedSearchResults([pairedSq]);
541
534
  setIsPairingManyToMany(isPairing);
542
535
  setShowPairDcmtsModal(true);
@@ -578,6 +571,7 @@ export const useRelatedDocuments = ({ selectedSearchResult, focusedItem, current
578
571
  openPairSearchModal(relation, targetTID, qd);
579
572
  return;
580
573
  }
574
+ setPairSearchContext({ relation, targetTID, qd });
581
575
  setPairedSearchResults([filteredSq]);
582
576
  setIsPairingManyToMany(isPairing);
583
577
  setShowPairDcmtsModal(true);
@@ -652,6 +646,7 @@ export const useRelatedDocuments = ({ selectedSearchResult, focusedItem, current
652
646
  selectedManyToManyRelation,
653
647
  showManyToManyChooser,
654
648
  manyToManyChooserDataSource,
649
+ backToPairSearchModal,
655
650
  showPairSearchModal,
656
651
  pairSearchModalTargetTID,
657
652
  pairSearchModalParentTID,
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Impostazione avanzata "Mostra pratiche V5": le pratiche (i dossier) sono
3
+ * sostituite dal CaseFlow e restano nascoste finché l'utente non le riattiva.
4
+ *
5
+ * Il valore vive in `SDKUI_Globals.userSettings.advancedSettings`, quindi la
6
+ * persistenza è quella delle altre impostazioni utente (per archivio e utente).
7
+ */
8
+ export declare const SHOW_DOSSIERS_V5_CHANGED_EVENT = "showDossiersV5Changed";
9
+ export declare const getShowDossiersV5: () => boolean;
10
+ export declare const setShowDossiersV5: (value: boolean) => void;
11
+ /** Legge l'impostazione e si aggiorna quando cambia. */
12
+ export declare const useShowDossiersV5: () => boolean;
@@ -0,0 +1,37 @@
1
+ import { useEffect, useState } from 'react';
2
+ import { SDK_Globals } from '@topconsultnpm/sdk-ts';
3
+ import { SDKUI_Globals } from '../helper';
4
+ /**
5
+ * Impostazione avanzata "Mostra pratiche V5": le pratiche (i dossier) sono
6
+ * sostituite dal CaseFlow e restano nascoste finché l'utente non le riattiva.
7
+ *
8
+ * Il valore vive in `SDKUI_Globals.userSettings.advancedSettings`, quindi la
9
+ * persistenza è quella delle altre impostazioni utente (per archivio e utente).
10
+ */
11
+ export const SHOW_DOSSIERS_V5_CHANGED_EVENT = 'showDossiersV5Changed';
12
+ export const getShowDossiersV5 = () => {
13
+ return SDKUI_Globals.userSettings.advancedSettings?.showDossiersV5 === 1;
14
+ };
15
+ export const setShowDossiersV5 = (value) => {
16
+ SDKUI_Globals.userSettings.advancedSettings.showDossiersV5 = value ? 1 : 0;
17
+ // Il setter di AdvancedSettings emette l'evento, ma dopo un ricaricamento
18
+ // della pagina `advancedSettings` torna da localStorage come oggetto
19
+ // semplice e non lo emette più: lo lanciamo anche qui, così i consumatori
20
+ // non dipendono da quale delle due forme è in memoria.
21
+ globalThis.dispatchEvent(new CustomEvent(SHOW_DOSSIERS_V5_CHANGED_EVENT, { detail: value }));
22
+ };
23
+ /** Legge l'impostazione e si aggiorna quando cambia. */
24
+ export const useShowDossiersV5 = () => {
25
+ const sessionDescr = SDK_Globals.tmSession?.SessionDescr;
26
+ const archiveId = sessionDescr?.archiveID;
27
+ const userId = sessionDescr?.userID;
28
+ const [showDossiersV5, setValue] = useState(getShowDossiersV5);
29
+ // Le impostazioni sono per utente e archivio: al cambio sessione va riletto.
30
+ useEffect(() => { setValue(getShowDossiersV5()); }, [archiveId, userId]);
31
+ useEffect(() => {
32
+ const onChanged = () => setValue(getShowDossiersV5());
33
+ globalThis.addEventListener(SHOW_DOSSIERS_V5_CHANGED_EVENT, onChanged);
34
+ return () => globalThis.removeEventListener(SHOW_DOSSIERS_V5_CHANGED_EVENT, onChanged);
35
+ }, []);
36
+ return showDossiersV5;
37
+ };
@@ -0,0 +1,18 @@
1
+ import { MetadataDescriptor } from '@topconsultnpm/sdk-ts';
2
+ import { IColumnProps } from 'devextreme-react/data-grid';
3
+ export declare const needsDisplayValue: (columnMd: MetadataDescriptor | undefined) => boolean;
4
+ /**
5
+ * Resa dei valori nelle griglie di TMDistinctValues: al posto della chiave archiviata mostra la descrizione
6
+ * presa dalle cache di liste dati e utenti, tenendole allineate alle colonne effettivamente visualizzate.
7
+ *
8
+ * Vale per entrambe le sorgenti del pannello (valori distinti e ricerca rapida, che può essere su un altro
9
+ * tipo documento): le chiavi delle due sorgenti vengono accumulate e ricaricate sempre insieme, altrimenti
10
+ * un caricamento farebbe perdere le descrizioni dell'altra sorgente.
11
+ */
12
+ export declare const useTMDistinctValuesMetadataDisplay: () => {
13
+ loadDisplayCachesAsync: (columnsMd: Array<MetadataDescriptor | undefined>, rows: string[][] | undefined) => Promise<void>;
14
+ getMetadataDisplayValue: (columnMd: MetadataDescriptor | undefined, value: any) => any;
15
+ displayValueColumnProps: (columnMd: MetadataDescriptor | undefined, dataField: string) => Partial<IColumnProps>;
16
+ };
17
+ /** Tipo di ritorno dell'hook: le sorgenti di TMDistinctValues lo ricevono come dipendenza */
18
+ export type TMDistinctValuesMetadataDisplay = ReturnType<typeof useTMDistinctValuesMetadataDisplay>;
@@ -0,0 +1,103 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { useCallback, useRef } from 'react';
3
+ import { DataListViewModes, MetadataDataDomains } from '@topconsultnpm/sdk-ts';
4
+ import { SDKUI_Localizator, stringIsNullOrEmpty } from '../helper';
5
+ import { useDataListItem } from './useDataListItem';
6
+ import { useDataUserIdItem } from './useDataUserIdItem';
7
+ // Le griglie di TMDistinctValues mostrano la descrizione, non la chiave archiviata (es. TD01 -> FATTURA)
8
+ export const needsDisplayValue = (columnMd) => columnMd?.dataDomain === MetadataDataDomains.DataList || columnMd?.dataDomain === MetadataDataDomains.UserID;
9
+ const getCellDataListViewMode = (columnMd) => columnMd?.dataListViewMode === DataListViewModes.Description
10
+ ? DataListViewModes.Description
11
+ : DataListViewModes.ImageAndDescription;
12
+ /**
13
+ * Resa dei valori nelle griglie di TMDistinctValues: al posto della chiave archiviata mostra la descrizione
14
+ * presa dalle cache di liste dati e utenti, tenendole allineate alle colonne effettivamente visualizzate.
15
+ *
16
+ * Vale per entrambe le sorgenti del pannello (valori distinti e ricerca rapida, che può essere su un altro
17
+ * tipo documento): le chiavi delle due sorgenti vengono accumulate e ricaricate sempre insieme, altrimenti
18
+ * un caricamento farebbe perdere le descrizioni dell'altra sorgente.
19
+ */
20
+ export const useTMDistinctValuesMetadataDisplay = () => {
21
+ const { loadDataListsAsync, renderDataListCell, getDataListItem, hasDataList } = useDataListItem();
22
+ const { loadUsersAsync, renderUserIdViewer, getUserItem, getCompleteUserName, hasUser } = useDataUserIdItem();
23
+ // Le cache vengono sostituite con le sole chiavi richieste a ogni caricamento: qui si accumula l'insieme completo
24
+ const requestedDataListIDsRef = useRef(new Set());
25
+ const requestedUserIDsRef = useRef(new Set());
26
+ // I caricamenti delle due sorgenti possono sovrapporsi: la coda garantisce che l'ultimo a scrivere nelle cache sia quello con l'insieme completo di chiavi
27
+ const displayCachesQueueRef = useRef(Promise.resolve());
28
+ /** Le descrizioni vengono dalle cache di liste dati e utenti: vanno caricate prima di mostrare le righe */
29
+ const loadDisplayCachesAsync = useCallback(async (columnsMd, rows) => {
30
+ const dataListIDs = new Set();
31
+ const userIDs = new Set();
32
+ columnsMd.forEach((columnMd, index) => {
33
+ if (columnMd?.dataDomain === MetadataDataDomains.DataList && columnMd.dataListID) {
34
+ dataListIDs.add(columnMd.dataListID);
35
+ return;
36
+ }
37
+ if (columnMd?.dataDomain !== MetadataDataDomains.UserID)
38
+ return;
39
+ // Della cache utenti serve solo chi compare effettivamente nelle righe
40
+ rows?.forEach((row) => {
41
+ const userId = Number(row[index]);
42
+ if (userId && userId > 0)
43
+ userIDs.add(userId);
44
+ });
45
+ });
46
+ if (dataListIDs.size <= 0 && userIDs.size <= 0)
47
+ return;
48
+ // In coda al caricamento precedente: l'insieme delle chiavi va calcolato quando è il turno di questa richiesta
49
+ const load = displayCachesQueueRef.current.then(async () => {
50
+ // Se tutte le chiavi richieste sono già in cache non c'è nulla da ricaricare
51
+ const isCacheComplete = Array.from(dataListIDs).every(id => hasDataList(id)) && Array.from(userIDs).every(id => hasUser(id));
52
+ if (isCacheComplete)
53
+ return;
54
+ dataListIDs.forEach(id => requestedDataListIDsRef.current.add(id));
55
+ userIDs.forEach(id => requestedUserIDsRef.current.add(id));
56
+ // Ricaricate tutte insieme: il caricamento sostituisce il contenuto delle cache
57
+ if (requestedDataListIDsRef.current.size > 0)
58
+ await loadDataListsAsync(new Set(requestedDataListIDsRef.current));
59
+ if (requestedUserIDsRef.current.size > 0)
60
+ await loadUsersAsync(new Set(requestedUserIDsRef.current));
61
+ });
62
+ // La coda non deve interrompersi per un caricamento fallito
63
+ displayCachesQueueRef.current = load.catch(() => { });
64
+ await load;
65
+ }, [loadDataListsAsync, loadUsersAsync, hasDataList, hasUser]);
66
+ const renderMetadataCell = useCallback((columnMd, cellData) => {
67
+ if (!cellData || cellData.value === undefined)
68
+ return null;
69
+ if (columnMd?.dataDomain === MetadataDataDomains.DataList && columnMd.dataListID) {
70
+ return renderDataListCell(cellData.value, columnMd.dataListID, getCellDataListViewMode(columnMd));
71
+ }
72
+ if (columnMd?.dataDomain === MetadataDataDomains.UserID) {
73
+ return renderUserIdViewer(Number(cellData.value), true);
74
+ }
75
+ return _jsx("div", { children: cellData.text });
76
+ }, [renderDataListCell, renderUserIdViewer]);
77
+ /** Descrizione da mostrare al posto della chiave archiviata, fuori dal contesto di una cella di griglia */
78
+ const getMetadataDisplayValue = useCallback((columnMd, value) => {
79
+ if (stringIsNullOrEmpty(value))
80
+ return value;
81
+ if (columnMd?.dataDomain === MetadataDataDomains.DataList && columnMd.dataListID) {
82
+ return getDataListItem(columnMd.dataListID, value)?.name ?? value;
83
+ }
84
+ if (columnMd?.dataDomain === MetadataDataDomains.UserID) {
85
+ const userId = Number(value);
86
+ if (userId === 0)
87
+ return SDKUI_Localizator.SystemUser;
88
+ const ud = getUserItem(userId);
89
+ return ud ? getCompleteUserName(ud.domain, ud.name) ?? value : value;
90
+ }
91
+ return value;
92
+ }, [getDataListItem, getUserItem, getCompleteUserName]);
93
+ /** Proprietà con cui una colonna mostra la descrizione al posto della chiave archiviata: vuote per i domini che non ne hanno bisogno */
94
+ const displayValueColumnProps = useCallback((columnMd, dataField) => {
95
+ if (!needsDisplayValue(columnMd))
96
+ return {};
97
+ return {
98
+ cellRender: (cellData) => renderMetadataCell(columnMd, cellData),
99
+ calculateDisplayValue: (rowData) => getMetadataDisplayValue(columnMd, rowData?.[dataField]),
100
+ };
101
+ }, [renderMetadataCell, getMetadataDisplayValue]);
102
+ return { loadDisplayCachesAsync, getMetadataDisplayValue, displayValueColumnProps };
103
+ };
@@ -0,0 +1,49 @@
1
+ import { MetadataDescriptor } from '@topconsultnpm/sdk-ts';
2
+ import { IColumnProps } from 'devextreme-react/data-grid';
3
+ import { DistinctValuesQuickSearchSettings } from '../helper';
4
+ import { TMDistinctValuesCounts } from './useTMDistinctValuesSource';
5
+ import { TMDistinctValuesMetadataDisplay } from './useTMDistinctValuesMetadataDisplay';
6
+ /** Le due sorgenti da cui TMDistinctValues può prelevare il valore del campo */
7
+ export declare enum DistinctValuesModes {
8
+ DistinctValues = 0,
9
+ QuickSearch = 1
10
+ }
11
+ /** Classe applicata alla colonna del metadato configurato nella ricerca rapida: è quella da cui si prende il valore */
12
+ export declare const QUICK_SEARCH_VALUE_COLUMN_CLASS = "tm-quick-search-value-column";
13
+ interface ITMDistinctValuesQuickSearchParams {
14
+ tid: number | undefined;
15
+ mid: number | undefined;
16
+ /** Metadato del campo, dalla sorgente dei valori distinti: è il ripiego quando la ricerca rapida non è attiva */
17
+ md: MetadataDescriptor | undefined;
18
+ display: TMDistinctValuesMetadataDisplay;
19
+ }
20
+ /**
21
+ * Sorgente "ricerca rapida" di TMDistinctValues, con il selettore di modalità del pannello: la modalità esiste
22
+ * solo perché esiste questa sorgente, quindi le due cose vivono insieme.
23
+ *
24
+ * La ricerca rapida non filtra i valori distinti: è una sorgente alternativa da cui prelevare il valore del
25
+ * metadato configurato nelle impostazioni, che restano associate alla coppia (tid, mid).
26
+ */
27
+ export declare const useTMDistinctValuesQuickSearch: ({ tid, mid, md, display }: ITMDistinctValuesQuickSearchParams) => {
28
+ mode: DistinctValuesModes;
29
+ isQuickSearchMode: boolean;
30
+ isQuickSearchGridVisible: boolean;
31
+ isFirstSearchPending: boolean;
32
+ settings: DistinctValuesQuickSearchSettings | undefined;
33
+ columns: IColumnProps[];
34
+ dataSource: any[];
35
+ counts: TMDistinctValuesCounts;
36
+ customizeColumns: (columns: Array<any>) => void;
37
+ valueField: string | undefined;
38
+ selectedValueMd: MetadataDescriptor | undefined;
39
+ showSettingsForm: boolean;
40
+ setShowSettingsForm: import("react").Dispatch<import("react").SetStateAction<boolean>>;
41
+ onModeChanged: (newMode: DistinctValuesModes) => void;
42
+ onSaveSettings: (newSettings: DistinctValuesQuickSearchSettings) => void;
43
+ onDeleteSettings: () => void;
44
+ onDeleteSettingsClick: () => void;
45
+ onSettingsFormClose: () => void;
46
+ refreshAsync: () => Promise<void>;
47
+ ConfirmQueryParamsDialog: () => JSX.Element;
48
+ };
49
+ export {};