@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
@@ -1,5 +1,25 @@
1
1
  import { useState, useEffect, useCallback } from 'react';
2
2
  import { SDK_Globals } from '@topconsultnpm/sdk-ts';
3
+ const WORKFLOW_APPROVE_CHANGED_EVENT = 'onWorkflowApproveChange';
4
+ /** Totale dei documenti da approvare: somma dei dcmtsFound delle singole categorie. */
5
+ const calcTotalDcmtsFound = (data) => {
6
+ return data.reduce((sum, item) => sum + (item.dcmtsFound || 0), 0);
7
+ };
8
+ /**
9
+ * Fetch in corso.
10
+ *
11
+ * La WFAppr non porta un contatore ma l'intera lista di approvazione con le righe
12
+ * dei documenti, ed è chiesta da più istanze del hook a ridosso l'una dell'altra
13
+ * (coda del login, pagina di approvazione, widget della home). Chi arriva mentre
14
+ * è già in volo aspetta la stessa risposta invece di aprire una seconda richiesta.
15
+ */
16
+ let inFlight;
17
+ /** Ricarica i dati e notifica tutte le istanze del hook. */
18
+ const load = async () => {
19
+ const result = await SDK_Globals.tmSession?.NewWorkflowEngine().WFApprAsync(1);
20
+ SDK_Globals.currentWorkflowApproveData = result ?? [];
21
+ window.dispatchEvent(new CustomEvent(WORKFLOW_APPROVE_CHANGED_EVENT));
22
+ };
3
23
  /**
4
24
  * Hook per gestire i dati di approvazione del workflow.
5
25
  * Fornisce il dataSource, lo stato di caricamento e una funzione per aggiornare i dati.
@@ -7,13 +27,10 @@ import { SDK_Globals } from '@topconsultnpm/sdk-ts';
7
27
  export const useWorkflowApprove = () => {
8
28
  const [workflowApproveData, setWorkflowApproveData] = useState(SDK_Globals.currentWorkflowApproveData);
9
29
  const [isLoading, setIsLoading] = useState(false);
10
- const [totalDcmtsFound, setTotalDcmtsFound] = useState(0);
11
- /**
12
- * Calcola il numero totale di dcmtsFound dai dati del workflow.
13
- */
14
- const calculateTotalDcmtsFound = useCallback((data) => {
15
- return data.reduce((sum, item) => sum + (item.dcmtsFound || 0), 0);
16
- }, []);
30
+ // Seminato dai dati già in cache: un'istanza montata a login concluso parte dal
31
+ // totale reale e non da zero, altrimenti chi confronta questo valore con il
32
+ // contatore della home vede una differenza inesistente e ricarica a vuoto.
33
+ const [totalDcmtsFound, setTotalDcmtsFound] = useState(() => calcTotalDcmtsFound(SDK_Globals.currentWorkflowApproveData));
17
34
  /**
18
35
  * Ottiene tutti i work items che corrispondono a un determinato DID.
19
36
  * Restituisce un array di oggetti { tid, did }.
@@ -40,12 +57,10 @@ export const useWorkflowApprove = () => {
40
57
  }
41
58
  setIsLoading(true);
42
59
  try {
43
- const result = await SDK_Globals.tmSession.NewWorkflowEngine().WFApprAsync(1);
44
- SDK_Globals.currentWorkflowApproveData = result ?? [];
45
- // Aggiorna anche il totale dei dcmtsFound
46
- setTotalDcmtsFound(calculateTotalDcmtsFound(SDK_Globals.currentWorkflowApproveData));
47
- // Notifica tutte le istanze del hook che i dati sono cambiati.
48
- window.dispatchEvent(new CustomEvent('onWorkflowApproveChange'));
60
+ if (!inFlight) {
61
+ inFlight = load().finally(() => { inFlight = undefined; });
62
+ }
63
+ await inFlight;
49
64
  }
50
65
  catch (error) {
51
66
  console.error("Errore durante il fetch dei dati di approvazione workflow:", error);
@@ -53,18 +68,19 @@ export const useWorkflowApprove = () => {
53
68
  finally {
54
69
  setIsLoading(false);
55
70
  }
56
- }, [calculateTotalDcmtsFound]); // useCallback con array vuoto perché non ha dipendenze esterne a React
71
+ }, []);
57
72
  // Questo useEffect serve a sincronizzare lo stato tra diverse istanze del hook.
58
73
  // Se il componente A chiama refreshWorkflowApprove, il componente B (che usa lo stesso hook)
59
74
  // riceverà l'evento e aggiornerà il suo stato locale.
60
75
  useEffect(() => {
61
76
  const handleUpdate = () => {
62
77
  setWorkflowApproveData(SDK_Globals.currentWorkflowApproveData);
78
+ setTotalDcmtsFound(calcTotalDcmtsFound(SDK_Globals.currentWorkflowApproveData));
63
79
  };
64
- window.addEventListener('onWorkflowApproveChange', handleUpdate);
80
+ window.addEventListener(WORKFLOW_APPROVE_CHANGED_EVENT, handleUpdate);
65
81
  return () => {
66
- window.removeEventListener('onWorkflowApproveChange', handleUpdate);
82
+ window.removeEventListener(WORKFLOW_APPROVE_CHANGED_EVENT, handleUpdate);
67
83
  };
68
- }, [calculateTotalDcmtsFound]);
84
+ }, []);
69
85
  return { workflowApproveData, isLoading, refreshWorkflowApprove, totalDcmtsFound, getWorkItemsByDID };
70
86
  };
package/lib/index.d.ts CHANGED
@@ -8,7 +8,9 @@ export * from './hooks/useQueryParametersDialog';
8
8
  export * from './hooks/useDcmtOperations';
9
9
  export * from './hooks/useResizeObserver';
10
10
  export * from './hooks/useWorkflowApprove';
11
+ export * from './hooks/useCaseFlowApprove';
11
12
  export * from './hooks/useRelatedDocuments';
12
13
  export * from './hooks/useSettingsFeedback';
13
14
  export * from './hooks/useBetaFeatures';
15
+ export * from './hooks/useShowDossiersV5';
14
16
  export * from './services';
package/lib/index.js CHANGED
@@ -8,10 +8,13 @@ export * from './hooks/useQueryParametersDialog';
8
8
  export * from './hooks/useDcmtOperations';
9
9
  export * from './hooks/useResizeObserver';
10
10
  export * from './hooks/useWorkflowApprove';
11
+ export * from './hooks/useCaseFlowApprove';
11
12
  export * from './hooks/useRelatedDocuments';
12
13
  export * from './hooks/useSettingsFeedback';
13
14
  export * from './hooks/useBetaFeatures';
15
+ export * from './hooks/useShowDossiersV5';
14
16
  export * from './services';
15
17
  import config from 'devextreme/core/config';
16
- // DevExtreme License Key (valid for v25.2 and earlier versions)
17
- config({ licenseKey: 'ewogICJmb3JtYXQiOiAxLAogICJjdXN0b21lcklkIjogIjE1ODg1NDc4LTNjNTItNGUzYy1hNDI1LTU5NjAzMzQ0ZDVjMyIsCiAgIm1heFZlcnNpb25BbGxvd2VkIjogMjUyCn0=.ClI5PeQ2vnl48q0hwdwPHM6oDArs6XTeZ9u4JfN6kxaHoKgszVywO996SluAQfPdFhtzWz6OZsyDdenKv28UU2dOF5wppP88hGEJ17PAg+N/OpUkL1L/CMFNXlOIsYd2517GWA==' });
18
+ import { licenseKey } from './devextreme-license';
19
+ // DevExtreme License Key
20
+ config({ licenseKey });
@@ -0,0 +1,277 @@
1
+ import { BlogPost, BlogPostAttachment, CaseFlowDcmt, CaseFlowGuestPermissions, CaseFlowInstanceDescriptor, CaseFlowParticipant, CaseFlowTemplateDescriptor, CaseFlowWorkItem, DcmtTypeDescriptor, CF_ParticipantRoles, CF_States } from '@topconsultnpm/sdk-ts';
2
+ type PendingGroup = Array<{
3
+ caseflow: CaseFlowInstanceDescriptor;
4
+ workItems: CaseFlowWorkItem[];
5
+ }>;
6
+ /** Criteri di ricerca delle istanze (pannello Ricerca e Process Mining). */
7
+ export interface CaseFlowSearchCriteria {
8
+ templateId?: number;
9
+ name?: string;
10
+ description?: string;
11
+ state?: CF_States;
12
+ dateFrom?: string;
13
+ dateTo?: string;
14
+ metadataFilters?: Array<{
15
+ mid: number;
16
+ value: string;
17
+ }>;
18
+ /** Ricerca libera: cerca il valore in tutti i metadati di qualsiasi template */
19
+ freeTextMetadata?: string;
20
+ }
21
+ /** Documento non cancellato durante l'eliminazione di un'istanza (orfano). */
22
+ export interface CaseFlowDeleteOrphan {
23
+ tid: number;
24
+ did: number;
25
+ /** Motivo del fallimento (tipicamente "Document not accessible by this user"). */
26
+ reason: string;
27
+ }
28
+ /** Esito dell'eliminazione di un'istanza di CaseFlow. */
29
+ export interface CaseFlowDeleteResult {
30
+ instanceDID: number;
31
+ /** true se tutti i documenti individuati sono stati cancellati. */
32
+ complete: boolean;
33
+ /** Documenti non cancellati perché non accessibili all'utente (vista parametrica/CdV). */
34
+ orphaned: CaseFlowDeleteOrphan[];
35
+ }
36
+ export declare class CaseFlowService {
37
+ /** Elenco dei template reali (via CaseFlowTemplateCacheService). */
38
+ static getTemplates(): Promise<CaseFlowTemplateDescriptor[]>;
39
+ /**
40
+ * Singolo template per id. Usa GetAsync (non un find su GetAllAsync): così i
41
+ * template di cui l'utente NON può creare istanze — ma di cui è destinatario
42
+ * di un workitem (es. Completamento dati) — vengono risolti on-demand via
43
+ * RetrieveAsync mirata invece di restituire undefined.
44
+ */
45
+ static getTemplate(id: number): Promise<CaseFlowTemplateDescriptor | undefined>;
46
+ /** Invalida la cache dei template (dopo creazione/modifica/eliminazione). */
47
+ static invalidateTemplatesCache(): void;
48
+ /** DcmtTypeDescriptor (copertina) per il TID indicato. */
49
+ static getDcmtTypeAsync(tid: number): Promise<DcmtTypeDescriptor | undefined>;
50
+ /** Tutte le istanze visibili all'utente (unione di tutti i template). */
51
+ static getCaseflows(): Promise<CaseFlowInstanceDescriptor[]>;
52
+ /**
53
+ * Singola istanza COMPLETA per id. `RetrieveAllAsync` (usata dalla dashboard)
54
+ * porta i dati necessari alle card, ma per il dettaglio completo
55
+ * (documenti/bacheca/timeline) serve comunque una `RetrieveAsync(cftid, id)`
56
+ * che idrata l'istanza. Il `cftid` va passato quando noto (evita una
57
+ * scansione); in mancanza viene risolto dalla lista.
58
+ *
59
+ * ATTENZIONE sui `workItems` della RetrieveAll: contengono i soli workitem
60
+ * ANCORA APERTI, non lo storico. Una pratica conclusa arriva con
61
+ * `workItems: []`, perché non ha più nulla di pendente. Chi deve ricostruire
62
+ * la STORIA di una pratica (chi ha fatto cosa e quando) non può quindi basarsi
63
+ * sull'elenco: serve la Retrieve completa, e la fonte dei passaggi già
64
+ * avvenuti sono i messaggi di sistema della bacheca (`blogPosts` con
65
+ * allegato di riferimento all'azione).
66
+ */
67
+ static getCaseflow(id: number, cftid?: number): Promise<CaseFlowInstanceDescriptor | undefined>;
68
+ /**
69
+ * Come {@link getCaseflow} ma PROPAGA l'errore invece di inghiottirlo.
70
+ * Da usare nei punti in cui l'utente apre esplicitamente l'istanza (apertura
71
+ * scheda, deep link): il fallimento della Retrieve deve essere notificato,
72
+ * non mascherato da una vista incompleta ("non sei un partecipante").
73
+ */
74
+ static retrieveCaseflow(id: number, cftid?: number): Promise<CaseFlowInstanceDescriptor | undefined>;
75
+ /** Istanze di cui l'utente indicato è proprietario. */
76
+ static getMyCaseflows(userId: number): Promise<CaseFlowInstanceDescriptor[]>;
77
+ /** Ricerca avanzata sulle istanze applicando i filtri indicati. */
78
+ static searchCaseflows(criteria: CaseFlowSearchCriteria): Promise<CaseFlowInstanceDescriptor[]>;
79
+ /** WorkItem pendenti assegnati all'utente, raggruppati per istanza. */
80
+ static getMyPendingWorkItems(userId: number): Promise<PendingGroup>;
81
+ /**
82
+ * Richieste di "maggiori informazioni" INVIATE dall'utente e ancora in
83
+ * attesa di risposta, raggruppate per istanza.
84
+ *
85
+ * Non basta filtrare `toUserID === userId && state === MoreInfo` (il solo
86
+ * workitem "padre" bloccato intestato a me): a seconda di come il backend
87
+ * materializza la richiesta, l'unico workitem visibile può essere quello
88
+ * INVIATO al destinatario (`fromUserID === userId`, categoria MoreInfo,
89
+ * ancora Pending). In quel caso il filtro su `toUserID` non lo intercetta e
90
+ * l'istanza sparisce da TUTTE le sezioni di "Per te" (non è più Pending per
91
+ * me, non è MoreInfo intestato a me, e non ne sono owner). Consideriamo
92
+ * quindi entrambe le rappresentazioni, preferendo il figlio inviato (che
93
+ * porta il destinatario) ed evitando di mostrare padre + figlio della
94
+ * stessa richiesta.
95
+ */
96
+ static getMyMoreInfoRequests(userId: number): Promise<PendingGroup>;
97
+ private static collectWorkItemsByState;
98
+ /**
99
+ * Crea una nuova istanza a partire da un template tramite CreateAsync.
100
+ * I metadati di copertina (metadataValues: mid -> valore) vengono passati
101
+ * nel campo `cover`. Il backend materializza azioni/stati/partecipanti dal
102
+ * template identificato da `cftid`.
103
+ * @returns id della nuova istanza.
104
+ */
105
+ static CreateCaseFlowInstance(template: CaseFlowTemplateDescriptor, instanceName: string, instanceDescription: string | undefined, metadataValues: Record<number, string>): Promise<number>;
106
+ /**
107
+ * Avvia un'istanza tramite StartAsync(cftid, id): il backend porta la pratica
108
+ * da `New` a `InProgress` e materializza i workitem della prima azione.
109
+ *
110
+ * NON va chiamata dopo `CreateCaseFlowInstance`: la Create dell'API REST
111
+ * esegue già lo start internamente, quindi un'istanza appena creata è
112
+ * ancora `New` solo nel descrittore inviato, non lato server. Questa resta
113
+ * per le istanze che si trovano davvero in `New` (avvio differito); sulle
114
+ * altre il backend rifiuta.
115
+ */
116
+ static startCaseflow(caseFlowId: number, cftid?: number): Promise<void>;
117
+ /**
118
+ * Elimina un'istanza tramite DeleteAsync(cftid, id). Il cftid è preso dal
119
+ * template fornito (se disponibile) oppure risolto dall'istanza.
120
+ */
121
+ static DeleteCaseFlowInstance(instanceId: number, template?: CaseFlowTemplateDescriptor): Promise<CaseFlowDeleteResult>;
122
+ /** Aggiorna un'istanza esistente tramite UpdateAsync. */
123
+ static saveCaseflow(caseflow: CaseFlowInstanceDescriptor): Promise<void>;
124
+ /**
125
+ * Aggiunge un post in bacheca tramite BlogPostAddAsync(cftid, id, bp). Il
126
+ * cftid è passato quando noto (evita una Retrieve) oppure risolto dall'istanza.
127
+ * @returns il post creato (transitorio: la ricarica leggerà quelli reali).
128
+ */
129
+ static addBlogPost(caseFlowId: number, text: string, authorId: number, authorName: string, attachments?: BlogPostAttachment[], cftid?: number): Promise<BlogPost>;
130
+ /**
131
+ * Elimina (o ripristina) un post in bacheca tramite
132
+ * BlogPostDeleteOrUndeleteAsync(cftid, id, postID, del).
133
+ */
134
+ static deleteOrUndeleteBlogPost(caseFlowId: number, postId: number, del: boolean, cftid?: number): Promise<void>;
135
+ /**
136
+ * Aggancia un documento (nuovo archiviato o già presente in archivio)
137
+ * all'istanza tramite DcmtAddOrRemoveAsync(remove=false).
138
+ * @returns descrittore transitorio del documento agganciato (la ricarica
139
+ * dell'istanza leggerà quello reale).
140
+ */
141
+ static addDcmtToInstance(caseFlowId: number, tid: number, did: number, cftid?: number): Promise<CaseFlowDcmt | undefined>;
142
+ /** Sgancia un documento dall'istanza tramite DcmtAddOrRemoveAsync(remove=true). */
143
+ static removeDcmtFromInstance(caseFlowId: number, tid: number, did: number, cftid?: number): Promise<void>;
144
+ /** Aggiunge o aggiorna (upsert) la regola documenti del TID sulla sola istanza. */
145
+ static saveDcmtRule(caseFlowId: number, tid: number, min: number, max: number, cftid?: number): Promise<void>;
146
+ /** Rimuove la regola documenti del TID dalla sola istanza. */
147
+ static removeDcmtRule(caseFlowId: number, tid: number, cftid?: number): Promise<void>;
148
+ /**
149
+ * Chiama DcmtRuleAddOrRemoveAsync(cftid, id, tid, min, max, remove)
150
+ * risolvendo il cftid quando non passato (come per bacheca e partecipanti).
151
+ */
152
+ private static dcmtRuleAddOrRemove;
153
+ /**
154
+ * Chiama DcmtAddOrRemoveAsync(cftid, id, tid, did, remove) risolvendo il
155
+ * cftid quando non passato (come per bacheca e partecipanti).
156
+ */
157
+ private static dcmtAddOrRemove;
158
+ /**
159
+ * Allega un file alla pratica tramite AttachAddAsync(cftid, id, ...).
160
+ * @returns il DID dell'allegato appena archiviato.
161
+ */
162
+ static addAttachment(caseFlowId: number, file: File, name?: string, description?: string, cftid?: number): Promise<number | undefined>;
163
+ /**
164
+ * Toglie l'allegato dalla pratica tramite AttachRemoveAsync(cftid, id, attachDID).
165
+ * A differenza dello sgancio di un documento d'archivio, qui il file viene
166
+ * anche cancellato: un allegato fuori dalla sua pratica non ha più senso.
167
+ */
168
+ static removeAttachment(caseFlowId: number, attachDID: number, cftid?: number): Promise<void>;
169
+ /**
170
+ * Aggiunge un partecipante all'istanza (o ne aggiorna ruolo/permessi se già
171
+ * presente) tramite ParticipantsAddOrRemoveAsync(remove=false).
172
+ */
173
+ static addParticipant(caseFlowId: number, userId: number, userName: string, role: CF_ParticipantRoles, guestPermissions?: CaseFlowGuestPermissions, cftid?: number): Promise<CaseFlowParticipant | undefined>;
174
+ /** Rimuove un partecipante dall'istanza tramite ParticipantsAddOrRemoveAsync(remove=true). */
175
+ static removeParticipant(caseFlowId: number, userId: number, cftid?: number): Promise<void>;
176
+ /**
177
+ * Cambia il ruolo di un partecipante ri-applicando l'upsert col nuovo ruolo
178
+ * (non esiste un'Update dedicata). Passando a Guest si conservano/impostano i
179
+ * relativi permessi.
180
+ */
181
+ static changeParticipantRole(caseFlowId: number, userId: number, role: CF_ParticipantRoles, guestPermissions?: CaseFlowGuestPermissions, cftid?: number): Promise<void>;
182
+ /** Aggiorna i permessi Guest di un partecipante (upsert col ruolo Guest). */
183
+ static updateParticipantGuestPermissions(caseFlowId: number, userId: number, permissions: CaseFlowGuestPermissions, cftid?: number): Promise<void>;
184
+ /**
185
+ * Chiama ParticipantsAddOrRemoveAsync(cftid, id, d, remove) risolvendo il
186
+ * cftid quando non passato (come per la bacheca).
187
+ */
188
+ private static participantsAddOrRemove;
189
+ /** Istanze marcate come preferite dall'utente corrente. */
190
+ static getFavorites(): Promise<CaseFlowInstanceDescriptor[]>;
191
+ /**
192
+ * Aggiunge o rimuove l'istanza dai preferiti dell'utente corrente tramite
193
+ * FavoritesAddOrRemoveAsync(cftid, id, remove).
194
+ */
195
+ static setFavorite(caseFlowId: number, favorite: boolean, cftid?: number): Promise<void>;
196
+ /**
197
+ * Inizia o smette di seguire l'istanza tramite
198
+ * FollowAddOrRemoveAsync(cftid, id, remove).
199
+ */
200
+ static setFollow(caseFlowId: number, follow: boolean, cftid?: number): Promise<void>;
201
+ /**
202
+ * Stato "l'utente corrente segue questa pratica" letto dal descrittore.
203
+ *
204
+ * `isFollow` fa ormai parte del contratto (`CaseFlowInstanceDescriptor`):
205
+ * arriva valorizzato da `usp_Cfi_RetrieveAll`/`usp_Cfi_Retrieve`. Resta
206
+ * `undefined` solo quando il descrittore proviene da una sorgente che non
207
+ * popola il campo.
208
+ *
209
+ * Da NON dedurre dalla bacheca Home come fanno pratiche-dossier e gruppi di
210
+ * lavoro (filtro su `HomeBlogPost.classID`): quella query prende `TOP 30`
211
+ * righe e il solo ultimo post non di sistema per oggetto, quindi chi segue
212
+ * un oggetto senza post risulta "non seguace"; per le istanze di CaseFlow,
213
+ * poi, non esiste nemmeno un ramo nella UNION.
214
+ */
215
+ static readFollowFlag(cf: CaseFlowInstanceDescriptor): boolean | undefined;
216
+ /** Completa (approva) un workitem. La nota facoltativa viene pubblicata in bacheca dal backend. */
217
+ static completeWorkItem(caseFlowId: number, workItemId: number, response?: string, cftid?: number): Promise<void>;
218
+ /**
219
+ * Completa un workitem di "Completamento dati": i metadati valorizzati
220
+ * (mid -> valore) viaggiano in `metadataValues`; il backend li applica al
221
+ * documento master dell'istanza e completa il workitem.
222
+ */
223
+ static completeDataCompletionWorkItem(caseFlowId: number, workItemId: number, metadataValues: Record<number, string>, response?: string, cftid?: number): Promise<void>;
224
+ /** Rifiuta un workitem. Il motivo viene pubblicato in bacheca dal backend. */
225
+ static rejectWorkItem(caseFlowId: number, workItemId: number, response?: string, cftid?: number): Promise<void>;
226
+ /**
227
+ * Prende in carico un'azione per se stessi (operazione Claim): il backend
228
+ * crea il workitem intestato al chiamante e porta l'azione in lavorazione.
229
+ *
230
+ * Non e' un caso particolare di `createWorkItemForAction`: assegnare e'
231
+ * riservato a Owner e Supervisore, prendere in carico e' di chiunque lavori
232
+ * alla pratica. Passando dall'operazione Assign, un Partecipante si vedeva
233
+ * rifiutare la presa in carico (TMC-2789).
234
+ */
235
+ static claimAction(caseFlowId: number, actionID: number, cftid?: number): Promise<void>;
236
+ /**
237
+ * Rilascia un workitem preso in carico (operazione ReleaseClaim): il backend
238
+ * lo cancella e, se per quell'azione non restano altri destinatari, la riporta
239
+ * disponibile per la presa in carico.
240
+ *
241
+ * Stessa chiamata per due gesti diversi, e' la guardia della SP a distinguerli:
242
+ * il detentore rilascia il proprio workitem, un Owner/Supervisore annulla
243
+ * l'assegnazione di un altro. Chi chiama non deve dire quale dei due sta facendo.
244
+ */
245
+ static releaseClaim(caseFlowId: number, workItemId: number, cftid?: number): Promise<void>;
246
+ /** Assegna un'azione a un ALTRO utente creando il relativo workitem (operazione Assign). */
247
+ static createWorkItemForAction(caseFlowId: number, actionID: number, toUserID: number, description?: string, cftid?: number): Promise<void>;
248
+ /** Forza il completamento di un'azione (supervisor). */
249
+ static forceCompleteAction(caseFlowId: number, actionID: number, reason?: string, cftid?: number): Promise<void>;
250
+ /** Forza il rifiuto di un'azione (supervisor). Il motivo è obbligatorio. */
251
+ static forceRejectAction(caseFlowId: number, actionID: number, reason: string, cftid?: number): Promise<void>;
252
+ /**
253
+ * Richiede maggiori informazioni a un altro utente: il backend crea il
254
+ * workitem MoreInfo figlio assegnato a `targetUserId` e registra la richiesta.
255
+ */
256
+ static requestMoreInfo(caseFlowId: number, workItemId: number, targetUserId: number, message?: string, cftid?: number): Promise<void>;
257
+ /** Risponde a una richiesta di informazioni completando il workitem MoreInfo. */
258
+ static respondToMoreInfo(caseFlowId: number, moreInfoWorkItemId: number, response: string, cftid?: number): Promise<void>;
259
+ /**
260
+ * Chiama ExecuteWorkItemOperationAsync(cftid, id, operation) risolvendo il
261
+ * cftid quando non passato (come per bacheca, documenti e partecipanti).
262
+ */
263
+ private static executeWorkItemOperation;
264
+ private static _inFlightInstances?;
265
+ private static loadAllInstances;
266
+ private static doLoadAllInstances;
267
+ /**
268
+ * Fallback di TRANSIZIONE: enumera le istanze template per template usando
269
+ * l'elenco dei template visibili all'utente. Non copre le istanze di template
270
+ * NON visibili (partecipante a livello di istanza): per quelle serve la
271
+ * RetrieveAll cross-template (cftid=0). Da rimuovere quando cftid=0 è stabile.
272
+ */
273
+ private static loadInstancesPerTemplate;
274
+ /** Valorizza `ownerName` sulle istanze (best-effort, via cache utenti). */
275
+ private static resolveUserNames;
276
+ }
277
+ export {};