@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
@@ -0,0 +1,157 @@
1
+ import { useCallback, useEffect, useState } from 'react';
2
+ import { SDK_Globals } from '@topconsultnpm/sdk-ts';
3
+ import { CaseFlowService } from '../services/caseflow/CaseFlowService';
4
+ import { getWorkItemTargetDoc, isMoreInfoWorkItem, isSignatureWorkItem } from '../services/caseflow/caseFlowWorkItemUtils';
5
+ const CASEFLOW_APPROVE_CHANGED_EVENT = 'onCaseFlowApproveChange';
6
+ let cache = [];
7
+ let inFlight;
8
+ let lastLoadedAt = 0;
9
+ /**
10
+ * Finestra minima fra due ricariche: il form del documento chiede un refresh a
11
+ * ogni apertura e la lista è una scansione delle istanze, non una query puntuale.
12
+ */
13
+ const MIN_RELOAD_INTERVAL_MS = 15000;
14
+ const notifyChanged = () => {
15
+ if (typeof window === 'undefined')
16
+ return;
17
+ window.dispatchEvent(new CustomEvent(CASEFLOW_APPROVE_CHANGED_EVENT));
18
+ };
19
+ /**
20
+ * Ricarica la cache: i workitem pendenti dell'utente, risolti sul documento su
21
+ * cui lavorano. Le richieste di informazioni sono escluse (si rispondono nella
22
+ * pratica, non sul documento) come i workitem senza documento.
23
+ */
24
+ const reload = async () => {
25
+ const userId = SDK_Globals.tmSession?.SessionDescr?.userID;
26
+ if (userId == null) {
27
+ cache = [];
28
+ return;
29
+ }
30
+ const groups = await CaseFlowService.getMyPendingWorkItems(userId);
31
+ const resolved = [];
32
+ for (const { caseflow, workItems } of groups) {
33
+ // Le richieste di informazioni si rispondono nella pratica, non sul documento.
34
+ const relevant = workItems.filter(wi => !isMoreInfoWorkItem(wi));
35
+ if (relevant.length === 0)
36
+ continue;
37
+ // Il TID dell'azione è autorato sul TEMPLATE e non materializzato
38
+ // sull'istanza: senza template risolto il documento non è calcolabile.
39
+ if (caseflow.cftid != null) {
40
+ await CaseFlowService.getTemplate(caseflow.cftid);
41
+ }
42
+ // I DOCUMENTI AGGANCIATI non arrivano dalla RetrieveAll (che porta solo i
43
+ // dati delle card): serve la Retrieve completa, altrimenti `dcmts` è vuoto
44
+ // e nessun workitem risulterebbe associato a un documento.
45
+ let instance = caseflow;
46
+ if ((instance.dcmts?.length ?? 0) === 0 && instance.id != null) {
47
+ instance = (await CaseFlowService.getCaseflow(instance.id, instance.cftid)) ?? instance;
48
+ }
49
+ for (const wi of relevant) {
50
+ const target = getWorkItemTargetDoc(instance, wi);
51
+ if (!target)
52
+ continue;
53
+ resolved.push({ caseflow: instance, workItem: wi, tid: target.tid, did: target.did });
54
+ }
55
+ }
56
+ cache = resolved;
57
+ lastLoadedAt = Date.now();
58
+ // Diagnostica del bring-up: se il Toppy non compare, qui si vede a che punto
59
+ // la catena si interrompe (nessun workitem / nessun documento risolto).
60
+ // Rimuovibile una volta stabilizzato il flusso.
61
+ console.debug('[CaseFlow] attività su documenti:', {
62
+ istanzeConPendenti: groups.length,
63
+ workItemPendenti: groups.reduce((n, g) => n + g.workItems.length, 0),
64
+ risolteSuDocumento: resolved.length,
65
+ documenti: resolved.map(r => `${r.tid}/${r.did}`),
66
+ });
67
+ };
68
+ /**
69
+ * Ricarica i workitem di pratica dell'utente. Con `force` ignora la finestra
70
+ * anti-raffica (da usare dopo un'operazione che li ha modificati).
71
+ */
72
+ export const refreshCaseFlowApproveData = async (force = false) => {
73
+ if (inFlight)
74
+ return inFlight;
75
+ if (!force && lastLoadedAt > 0 && Date.now() - lastLoadedAt < MIN_RELOAD_INTERVAL_MS)
76
+ return;
77
+ inFlight = reload()
78
+ .catch(error => { console.error('Errore nel caricare le attività di pratica sui documenti', error); })
79
+ .finally(() => { inFlight = undefined; notifyChanged(); });
80
+ return inFlight;
81
+ };
82
+ /**
83
+ * Workitem di pratica pendenti su quel documento (lettura sincrona dalla cache).
84
+ *
85
+ * TID/DID vanno NORMALIZZATI: pur essendo tipati `number`, arrivano come stringhe
86
+ * quando il documento è aperto da una griglia (righe di datagrid) — per lo stesso
87
+ * motivo il resto della libreria fa `Number(TID)`/`Number(DID)` in ogni confronto.
88
+ * Senza normalizzazione il confronto stretto falliva, e l'attività risultava
89
+ * assente aprendo il documento dalla ricerca mentre compariva dal widget "Per te".
90
+ */
91
+ export const getCaseFlowWorkItemsByDcmt = (tid, did) => {
92
+ const t = Number(tid);
93
+ const d = Number(did);
94
+ if (!Number.isFinite(t) || !Number.isFinite(d))
95
+ return [];
96
+ return cache.filter(r => Number(r.tid) === t && Number(r.did) === d);
97
+ };
98
+ /** Svuota la cache (logout / cambio archivio). */
99
+ export const clearCaseFlowApproveData = () => {
100
+ cache = [];
101
+ lastLoadedAt = 0;
102
+ notifyChanged();
103
+ };
104
+ /** Completa il workitem di pratica e ricarica la cache. */
105
+ export const completeCaseFlowWorkItem = async (item, comment) => {
106
+ if (item.caseflow.id == null || item.workItem.id == null)
107
+ return;
108
+ await CaseFlowService.completeWorkItem(item.caseflow.id, item.workItem.id, comment?.trim() || undefined);
109
+ await refreshCaseFlowApproveData(true);
110
+ };
111
+ /** Rifiuta il workitem di pratica (motivo obbligatorio) e ricarica la cache. */
112
+ export const rejectCaseFlowWorkItem = async (item, reason) => {
113
+ if (item.caseflow.id == null || item.workItem.id == null)
114
+ return;
115
+ await CaseFlowService.rejectWorkItem(item.caseflow.id, item.workItem.id, reason);
116
+ await refreshCaseFlowApproveData(true);
117
+ };
118
+ /**
119
+ * Completa l'attività di FIRMA di una pratica sul documento indicato, se esiste.
120
+ * La chiama il viewer di firma quando la firma è riuscita: è il gemello di quanto
121
+ * già avviene per i workitem del workflow legacy.
122
+ * @returns true se un'attività è stata completata.
123
+ */
124
+ export const completeCaseFlowSignatureForDcmt = async (tid, did, comment) => {
125
+ const target = getCaseFlowWorkItemsByDcmt(tid, did).find(r => isSignatureWorkItem(r.workItem));
126
+ if (!target)
127
+ return false;
128
+ await completeCaseFlowWorkItem(target, comment);
129
+ return true;
130
+ };
131
+ /**
132
+ * Attività di pratica sul documento indicato. Senza sessione o senza attività
133
+ * l'elenco è vuoto e nulla cambia nella UI.
134
+ */
135
+ export const useCaseFlowApprove = (tid, did) => {
136
+ const readItems = useCallback(() => getCaseFlowWorkItemsByDcmt(tid, did), [tid, did]);
137
+ const [caseFlowWorkItems, setCaseFlowWorkItems] = useState(readItems);
138
+ useEffect(() => { setCaseFlowWorkItems(readItems()); }, [readItems]);
139
+ useEffect(() => {
140
+ const handleChange = () => setCaseFlowWorkItems(readItems());
141
+ window.addEventListener(CASEFLOW_APPROVE_CHANGED_EVENT, handleChange);
142
+ return () => window.removeEventListener(CASEFLOW_APPROVE_CHANGED_EVENT, handleChange);
143
+ }, [readItems]);
144
+ // All'apertura di un documento la cache può essere vecchia (attività assegnate
145
+ // dopo l'ultimo caricamento) o non ancora popolata.
146
+ useEffect(() => {
147
+ if (tid == null || did == null)
148
+ return;
149
+ void refreshCaseFlowApproveData();
150
+ }, [tid, did]);
151
+ return {
152
+ caseFlowWorkItems,
153
+ refreshCaseFlowApprove: refreshCaseFlowApproveData,
154
+ completeCaseFlowWorkItem,
155
+ rejectCaseFlowWorkItem,
156
+ };
157
+ };
@@ -20,11 +20,5 @@ export interface UseCheckInOutOperationsReturn {
20
20
  copyCheckoutPathToClipboardCallback: (dcmt: DcmtInfo, filename: string) => void;
21
21
  handleCheckOutCallback: (dcmt: DcmtInfo, checkout: boolean, filename: string, downloadDcmtsAsync: (params: DownloadDcmtsAsyncParams) => Promise<void>, onRefreshAsync?: (tid: number | undefined, did: number | undefined, refreshUI?: boolean, metadataResult?: SearchResultDescriptor | null) => Promise<void>) => Promise<void>;
22
22
  handleCheckInCallback: (dcmt: DcmtInfo, checkoutDate?: string | null, onRefreshAsync?: (tid: number | undefined, did: number | undefined, refreshUI?: boolean, metadataResult?: SearchResultDescriptor | null) => Promise<void>) => Promise<void>;
23
- showCicoWaitPanel: boolean;
24
- cicoWaitPanelTitle: string;
25
- showCicoPrimaryProgress: boolean;
26
- cicoPrimaryProgressText: string;
27
- cicoPrimaryProgressValue: number;
28
- cicoPrimaryProgressMax: number;
29
23
  }
30
24
  export declare const useCheckInOutOperations: (props: UseCheckInOutOperationsProps) => UseCheckInOutOperationsReturn;
@@ -1,6 +1,6 @@
1
1
  import { useCallback, useMemo, useState } from 'react';
2
2
  import { cicoDownloadFilesCallback, dcmtsFileCachePreview, getCicoDownloadFileName, getExceptionMessage, removeDcmtsFileCache, renderCicoCheckInContent, SDKUI_Globals, SDKUI_Localizator, updateCicoCheckoutStorageItem, validateCicoFileName } from '../helper';
3
- import { ButtonNames, DeviceType, ShowAlert, TMMessageBoxManager, TMResultManager, useDeviceType } from '../components';
3
+ import { ButtonNames, DeviceType, ShowAlert, TMMessageBoxManager, TMResultManager, TMWaitPanelManager, useDeviceType } from '../components';
4
4
  import { ResultTypes, SDK_Globals } from '@topconsultnpm/sdk-ts';
5
5
  let abortController = new AbortController();
6
6
  export const useCheckInOutOperations = (props) => {
@@ -18,18 +18,13 @@ export const useCheckInOutOperations = (props) => {
18
18
  const deviceType = useDeviceType();
19
19
  // This avoids unnecessary re-renders by only recalculating when deviceType changes.
20
20
  let isMobile = useMemo(() => { return deviceType === DeviceType.MOBILE; }, [deviceType]);
21
- // State variable to control the visibility of the wait panel
22
- const [showCicoWaitPanel, setShowCicoWaitPanel] = useState(false);
23
- // State variable to store the title of the wait panel
24
- const [cicoWaitPanelTitle, setCicoWaitPanelTitle] = useState('');
25
- // State variable to control the visibility of the primary section of the wait panel
26
- const [showCicoPrimaryProgress, setShowCicoPrimaryProgress] = useState(false);
27
- // State variable to store the primary text of the wait panel
28
- const [cicoPrimaryProgressText, setCicoPrimaryProgressText] = useState('');
29
- // State variable to track the current value of the primary progress indicator in the wait panel
30
- const [cicoPrimaryProgressValue, setCicoPrimaryProgressValue] = useState(0);
31
- // State variable to define the maximum value for the primary progress indicator in the wait panel
32
- const [cicoPrimaryProgressMax, setCicoPrimaryProgressMax] = useState(0);
21
+ // Check in e check out non riportano avanzamento: il pannello e' solo il "sto lavorando".
22
+ const showCicoWaitPanel = (title) => TMWaitPanelManager.show({
23
+ title,
24
+ showCounters: false,
25
+ cancelable: true,
26
+ onAbort: () => abortController.abort(),
27
+ });
33
28
  const showHistoryCallback = useCallback(() => {
34
29
  setShowHistory(true);
35
30
  }, []);
@@ -73,11 +68,9 @@ export const useCheckInOutOperations = (props) => {
73
68
  if (e !== ButtonNames.YES)
74
69
  return;
75
70
  let result = [];
71
+ abortController = new AbortController();
72
+ const panel = showCicoWaitPanel(title);
76
73
  try {
77
- setCicoWaitPanelTitle(title);
78
- setShowCicoWaitPanel(true);
79
- setShowCicoPrimaryProgress(true);
80
- abortController = new AbortController();
81
74
  const ue = SDK_Globals.tmSession?.NewUpdateEngineByID();
82
75
  if (!ue)
83
76
  throw new Error("Update Engine not available");
@@ -113,10 +106,7 @@ export const useCheckInOutOperations = (props) => {
113
106
  result.push({ rowIndex: 1, id1: dcmt.TID, id2: dcmt.DID, resultType: ResultTypes.ERROR, description: getExceptionMessage(error) });
114
107
  }
115
108
  finally {
116
- setCicoPrimaryProgressText('');
117
- setCicoPrimaryProgressMax(0);
118
- setCicoPrimaryProgressValue(0);
119
- setShowCicoWaitPanel(false);
109
+ panel.close();
120
110
  TMResultManager.show(result, title, "ID", undefined);
121
111
  }
122
112
  }
@@ -158,13 +148,12 @@ export const useCheckInOutOperations = (props) => {
158
148
  onButtonClick: async (e) => {
159
149
  if (e !== ButtonNames.YES)
160
150
  return;
161
- setCicoWaitPanelTitle('Check in');
162
- setShowCicoWaitPanel(true);
163
- setShowCicoPrimaryProgress(true);
164
151
  abortController = new AbortController();
165
152
  let result = [];
166
153
  let i = 0;
167
154
  if (dcmt.TID && dcmt.DID) {
155
+ // Aperto qui e non prima: fuori da questo ramo nessuno lo chiuderebbe.
156
+ const panel = showCicoWaitPanel('Check in');
168
157
  try {
169
158
  const ue = SDK_Globals.tmSession?.NewUpdateEngineByID();
170
159
  if (ue) {
@@ -187,10 +176,7 @@ export const useCheckInOutOperations = (props) => {
187
176
  result.push({ rowIndex: i, id1: i, id2: i, resultType: ResultTypes.ERROR, description: getExceptionMessage(err) });
188
177
  }
189
178
  finally {
190
- setCicoPrimaryProgressText('');
191
- setCicoPrimaryProgressMax(0);
192
- setCicoPrimaryProgressValue(0);
193
- setShowCicoWaitPanel(false);
179
+ panel.close();
194
180
  TMResultManager.show(result, 'Check in', "ID", undefined, SDKUI_Localizator.CheckInSuccessMessage, 6000);
195
181
  }
196
182
  }
@@ -211,11 +197,5 @@ export const useCheckInOutOperations = (props) => {
211
197
  copyCheckoutPathToClipboardCallback,
212
198
  handleCheckOutCallback,
213
199
  handleCheckInCallback,
214
- showCicoWaitPanel,
215
- cicoWaitPanelTitle,
216
- showCicoPrimaryProgress,
217
- cicoPrimaryProgressText,
218
- cicoPrimaryProgressValue,
219
- cicoPrimaryProgressMax,
220
200
  };
221
201
  };
@@ -3,6 +3,7 @@ import { UserDescriptor } from '@topconsultnpm/sdk-ts';
3
3
  export declare const useDataUserIdItem: () => {
4
4
  loadUsersAsync: (userIDs: Set<number>) => Promise<void>;
5
5
  getUserItem: (userId: number) => UserDescriptor | undefined;
6
+ getCompleteUserName: (domain: string | undefined, name: string | undefined) => string | undefined;
6
7
  clearCache: () => void;
7
8
  hasUser: (userId: number) => boolean;
8
9
  usersCache: React.MutableRefObject<Map<number, UserDescriptor>>;
@@ -90,6 +90,7 @@ export const useDataUserIdItem = () => {
90
90
  return {
91
91
  loadUsersAsync,
92
92
  getUserItem,
93
+ getCompleteUserName,
93
94
  clearCache,
94
95
  hasUser,
95
96
  usersCache: usersCacheRef,
@@ -26,19 +26,10 @@ export interface DownloadDcmtsAsyncParams {
26
26
  useInputFileName?: boolean;
27
27
  }
28
28
  export interface UseDcmtOperationsReturn {
29
- abortController: AbortController;
30
- showWaitPanel: boolean;
31
- showPrimary: boolean;
32
- waitPanelTitle: string;
33
- waitPanelTextPrimary: string;
34
- waitPanelValuePrimary: number;
35
- waitPanelMaxValuePrimary: number;
36
- showSecondary: boolean;
37
- waitPanelTextSecondary: string;
38
- waitPanelValueSecondary: number;
39
- waitPanelMaxValueSecondary: number;
40
29
  downloadDcmtsAsync: (params: DownloadDcmtsAsyncParams) => Promise<void>;
41
- getDcmtFileAsync: (inputDcmt: DcmtInfo | undefined, rfo: RetrieveFileOptions, operationTitle: string, keepWaitPanelPrimary: boolean, bypassCache?: boolean) => Promise<{
30
+ getDcmtFileAsync: (inputDcmt: DcmtInfo | undefined, rfo: RetrieveFileOptions, operationTitle: string,
31
+ /** Ignorato: con un file solo il pannello ha una barra sola, quella dei byte. */
32
+ keepWaitPanelPrimary: boolean, bypassCache?: boolean) => Promise<{
42
33
  file: File | undefined;
43
34
  isFromCache: boolean;
44
35
  } | undefined>;