@topconsultnpm/sdkui-react 6.22.0-dev2.9 → 6.22.0-t2

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 (214) hide show
  1. package/lib/components/NewComponents/ContextMenu/TMContextMenu.js +1 -1
  2. package/lib/components/NewComponents/ContextMenu/styles.d.ts +45 -43
  3. package/lib/components/NewComponents/FloatingMenuBar/TMFloatingMenuBar.js +1 -1
  4. package/lib/components/NewComponents/FloatingMenuBar/styles.d.ts +67 -60
  5. package/lib/components/base/Styled.d.ts +93 -77
  6. package/lib/components/base/TMCounterBar.d.ts +2 -2
  7. package/lib/components/base/TMCounterContainer.d.ts +2 -1
  8. package/lib/components/base/TMCustomButton.d.ts +1 -1
  9. package/lib/components/base/TMDataGrid.d.ts +2 -0
  10. package/lib/components/base/TMDataGrid.js +260 -8
  11. package/lib/components/base/TMDataGridExportForm.d.ts +2 -1
  12. package/lib/components/base/TMEditorBase.d.ts +2 -0
  13. package/lib/components/base/TMFileManager.d.ts +2 -1
  14. package/lib/components/base/TMFileManager.js +5 -3
  15. package/lib/components/base/TMFileManagerDataGridView.d.ts +2 -1
  16. package/lib/components/base/TMFileManagerDataGridView.js +11 -2
  17. package/lib/components/base/TMFileManagerThumbnailItems.d.ts +1 -1
  18. package/lib/components/base/TMFileManagerThumbnailItems.js +19 -9
  19. package/lib/components/base/TMFileManagerThumbnailsView.d.ts +1 -1
  20. package/lib/components/base/TMFileManagerUtils.d.ts +6 -6
  21. package/lib/components/base/TMFileManagerUtils.js +37 -1
  22. package/lib/components/base/TMLayout.d.ts +4 -4
  23. package/lib/components/base/TMList.d.ts +2 -1
  24. package/lib/components/base/TMListView.d.ts +1 -1
  25. package/lib/components/base/TMModal.d.ts +11 -0
  26. package/lib/components/base/TMModal.js +47 -13
  27. package/lib/components/base/TMPanel.d.ts +6 -0
  28. package/lib/components/base/TMPanel.js +138 -25
  29. package/lib/components/base/TMPopUp.js +3 -0
  30. package/lib/components/base/TMSpinner.d.ts +2 -1
  31. package/lib/components/base/TMTab.d.ts +4 -3
  32. package/lib/components/base/TMTooltip.d.ts +2 -1
  33. package/lib/components/base/TMTooltip.js +24 -8
  34. package/lib/components/base/TMTreeView.d.ts +14 -8
  35. package/lib/components/base/TMTreeView.js +108 -67
  36. package/lib/components/base/TMUserAvatar.d.ts +2 -1
  37. package/lib/components/base/TMVilViewer.d.ts +2 -1
  38. package/lib/components/base/TMWaitPanel.d.ts +3 -2
  39. package/lib/components/choosers/TMDcmtTypeChooser.js +4 -3
  40. package/lib/components/choosers/TMDistinctValues.d.ts +9 -7
  41. package/lib/components/choosers/TMDistinctValues.js +149 -142
  42. package/lib/components/choosers/TMDynDataListItemChooser.d.ts +1 -1
  43. package/lib/components/choosers/TMInvoiceRetrieveFormats.d.ts +2 -1
  44. package/lib/components/choosers/TMMetadataChooser.js +1 -1
  45. package/lib/components/choosers/TMOrderRetrieveFormats.d.ts +2 -1
  46. package/lib/components/choosers/TMQuickSearchInfo.d.ts +13 -0
  47. package/lib/components/choosers/TMQuickSearchInfo.js +279 -0
  48. package/lib/components/choosers/TMQuickSearchSettingsForm.d.ts +16 -0
  49. package/lib/components/choosers/TMQuickSearchSettingsForm.js +94 -0
  50. package/lib/components/choosers/TMRelationChooser.d.ts +3 -3
  51. package/lib/components/choosers/TMSelectedValuesSummary.d.ts +13 -0
  52. package/lib/components/choosers/TMSelectedValuesSummary.js +91 -0
  53. package/lib/components/choosers/TMUserChooser.d.ts +2 -2
  54. package/lib/components/editors/TMDropDown.d.ts +3 -0
  55. package/lib/components/editors/TMDropDown.js +197 -5
  56. package/lib/components/editors/TMEditorStyled.d.ts +20 -42
  57. package/lib/components/editors/TMFormulaEditor.d.ts +1 -1
  58. package/lib/components/editors/TMHtmlContentDisplay.d.ts +2 -1
  59. package/lib/components/editors/TMHtmlEditor.d.ts +2 -1
  60. package/lib/components/editors/TMTreeDropDown.d.ts +1 -1
  61. package/lib/components/features/archive/TMArchive.js +17 -3
  62. package/lib/components/features/assistant/TMToppyDraggableHelpCenter.d.ts +1 -1
  63. package/lib/components/features/blog/TMBlogCommentForm.d.ts +2 -1
  64. package/lib/components/features/documents/TMBatchUpdateForm.js +19 -5
  65. package/lib/components/features/documents/TMDcmtBlog.d.ts +3 -0
  66. package/lib/components/features/documents/TMDcmtBlog.js +4 -4
  67. package/lib/components/features/documents/TMDcmtForm.d.ts +7 -0
  68. package/lib/components/features/documents/TMDcmtForm.js +178 -51
  69. package/lib/components/features/documents/TMDcmtFormActionButtons.d.ts +12 -1
  70. package/lib/components/features/documents/TMDcmtFormActionButtons.js +77 -7
  71. package/lib/components/features/documents/TMDcmtIcon.d.ts +2 -1
  72. package/lib/components/features/documents/TMDcmtIcon.js +5 -3
  73. package/lib/components/features/documents/TMDcmtPreview.d.ts +8 -6
  74. package/lib/components/features/documents/TMDcmtPreview.js +10 -6
  75. package/lib/components/features/documents/TMDcmtTasks.d.ts +2 -1
  76. package/lib/components/features/documents/TMDragDropOverlay.d.ts +1 -1
  77. package/lib/components/features/documents/TMMasterDetailDcmts.js +95 -33
  78. package/lib/components/features/documents/TMMasterInfoFields.d.ts +20 -0
  79. package/lib/components/features/documents/TMMasterInfoFields.js +186 -0
  80. package/lib/components/features/documents/TMMergeToPdfForm.d.ts +3 -3
  81. package/lib/components/features/documents/TMMergeToPdfForm.js +30 -5
  82. package/lib/components/features/documents/TMMultiMasterDetailDcmtsForm.d.ts +46 -0
  83. package/lib/components/features/documents/TMMultiMasterDetailDcmtsForm.js +323 -0
  84. package/lib/components/features/documents/TMMultiMasterDetailDcmtsUtils.d.ts +370 -0
  85. package/lib/components/features/documents/TMMultiMasterDetailDcmtsUtils.js +283 -0
  86. package/lib/components/features/documents/TMRelationViewer.d.ts +14 -1
  87. package/lib/components/features/documents/TMRelationViewer.js +69 -20
  88. package/lib/components/features/search/TMDcmtCheckoutInfoForm.d.ts +2 -1
  89. package/lib/components/features/search/TMMetadataOutputForm.d.ts +2 -1
  90. package/lib/components/features/search/TMMetadataSorterForm.d.ts +2 -1
  91. package/lib/components/features/search/TMSavedQuerySelector.d.ts +2 -2
  92. package/lib/components/features/search/TMSearch.js +77 -11
  93. package/lib/components/features/search/TMSearchQueryEditor.js +5 -3
  94. package/lib/components/features/search/TMSearchQueryPanel.d.ts +13 -3
  95. package/lib/components/features/search/TMSearchQueryPanel.js +141 -67
  96. package/lib/components/features/search/TMSearchResult.d.ts +16 -0
  97. package/lib/components/features/search/TMSearchResult.js +429 -108
  98. package/lib/components/features/search/TMSearchResultFloatingActionButton.d.ts +1 -1
  99. package/lib/components/features/search/TMSignatureInfoContent.d.ts +2 -1
  100. package/lib/components/features/search/TMTreeSelector.js +109 -64
  101. package/lib/components/features/search/TMViewHistoryDcmt.d.ts +2 -1
  102. package/lib/components/features/tasks/TMTaskForm.d.ts +1 -1
  103. package/lib/components/features/tasks/TMTaskFormUtils.d.ts +10 -10
  104. package/lib/components/features/tasks/TMTasksAgenda.d.ts +1 -1
  105. package/lib/components/features/tasks/TMTasksCalendar.d.ts +1 -1
  106. package/lib/components/features/tasks/TMTasksHeader.d.ts +1 -1
  107. package/lib/components/features/tasks/TMTasksPanelContent.d.ts +1 -1
  108. package/lib/components/features/tasks/TMTasksUtilsView.d.ts +5 -5
  109. package/lib/components/features/tasks/TMTasksView.d.ts +1 -1
  110. package/lib/components/features/wg/TMWGsCopyMoveForm.d.ts +3 -2
  111. package/lib/components/features/workflow/TMWorkflowPopup.d.ts +18 -7
  112. package/lib/components/features/workflow/TMWorkflowPopup.js +8 -4
  113. package/lib/components/features/workflow/diagram/WorkitemRecipientsEditor.d.ts +3 -1
  114. package/lib/components/forms/Login/ChangePasswordInputs.d.ts +3 -1
  115. package/lib/components/forms/Login/Chooser.d.ts +2 -2
  116. package/lib/components/forms/TMChooserForm.d.ts +2 -1
  117. package/lib/components/forms/TMSaveForm.d.ts +4 -4
  118. package/lib/components/grids/TMBlogAttachments.d.ts +2 -1
  119. package/lib/components/grids/TMBlogAttachments.js +13 -2
  120. package/lib/components/grids/TMBlogHeader.d.ts +1 -1
  121. package/lib/components/grids/TMBlogHeader.js +5 -1
  122. package/lib/components/grids/TMBlogsPost.d.ts +3 -1
  123. package/lib/components/grids/TMBlogsPost.js +31 -4
  124. package/lib/components/grids/TMBlogsPostUtils.d.ts +10 -9
  125. package/lib/components/grids/TMBlogsPostUtils.js +14 -3
  126. package/lib/components/grids/TMValidationItemsList.d.ts +2 -1
  127. package/lib/components/layout/panelManager/TMPanelManagerContainer.d.ts +3 -1
  128. package/lib/components/layout/panelManager/TMPanelManagerContainer.js +24 -14
  129. package/lib/components/layout/panelManager/TMPanelManagerContext.d.ts +2 -2
  130. package/lib/components/layout/panelManager/TMPanelManagerContext.js +68 -93
  131. package/lib/components/layout/panelManager/TMPanelManagerToolbar.d.ts +5 -6
  132. package/lib/components/layout/panelManager/TMPanelManagerWithPersistenceProvider.d.ts +2 -2
  133. package/lib/components/layout/panelManager/TMPanelWrapper.d.ts +2 -2
  134. package/lib/components/layout/panelManager/TMPanelWrapper.js +2 -2
  135. package/lib/components/layout/panelManager/types.d.ts +3 -0
  136. package/lib/components/layout/panelManager/utils.js +13 -11
  137. package/lib/components/pages/TMPage.d.ts +1 -1
  138. package/lib/components/query/TMQueryEditor.d.ts +14 -10
  139. package/lib/components/settings/SettingsAppearance.d.ts +2 -1
  140. package/lib/components/sidebar/TMAboutApp.d.ts +2 -1
  141. package/lib/components/sidebar/TMCommandsPanel.d.ts +4 -4
  142. package/lib/components/sidebar/TMHeader.d.ts +3 -3
  143. package/lib/components/sidebar/TMHeader.js +30 -20
  144. package/lib/components/viewers/TMDataListItemViewer.d.ts +3 -2
  145. package/lib/components/viewers/TMDataUserIdItemViewer.d.ts +3 -2
  146. package/lib/components/viewers/TMMidViewer.d.ts +2 -2
  147. package/lib/components/viewers/TMMidViewer.js +4 -1
  148. package/lib/components/viewers/TMTidViewer.d.ts +2 -2
  149. package/lib/components/viewers/TMTidViewer.js +86 -25
  150. package/lib/css/tm-sdkui.css +1 -1
  151. package/lib/devextreme-license.d.ts +1 -0
  152. package/lib/devextreme-license.js +3 -0
  153. package/lib/helper/SDKUI_Globals.d.ts +110 -0
  154. package/lib/helper/SDKUI_Globals.js +151 -0
  155. package/lib/helper/SDKUI_Localizator.d.ts +44 -0
  156. package/lib/helper/SDKUI_Localizator.js +440 -0
  157. package/lib/helper/TMAppUpdatedModal.d.ts +2 -0
  158. package/lib/helper/TMAppUpdatedModal.js +134 -0
  159. package/lib/helper/TMCommandsContextMenu.d.ts +1 -1
  160. package/lib/helper/TMIcons.d.ts +280 -279
  161. package/lib/helper/TMIcons.js +3 -0
  162. package/lib/helper/TMPdfViewer.d.ts +2 -1
  163. package/lib/helper/TMToppyMessage.d.ts +2 -2
  164. package/lib/helper/TMUtils.d.ts +23 -4
  165. package/lib/helper/TMUtils.js +24 -2
  166. package/lib/helper/dataGridSearchHelper.d.ts +28 -0
  167. package/lib/helper/dataGridSearchHelper.js +51 -0
  168. package/lib/helper/dcmtsHelper.d.ts +20 -0
  169. package/lib/helper/dcmtsHelper.js +58 -1
  170. package/lib/helper/helpers.d.ts +12 -1
  171. package/lib/helper/helpers.js +25 -1
  172. package/lib/helper/index.d.ts +2 -0
  173. package/lib/helper/index.js +2 -0
  174. package/lib/helper/queryHelper.d.ts +6 -1
  175. package/lib/helper/queryHelper.js +8 -3
  176. package/lib/hooks/tmDistinctValuesGridHelper.d.ts +16 -0
  177. package/lib/hooks/tmDistinctValuesGridHelper.js +31 -0
  178. package/lib/hooks/useArchiveListForm.d.ts +39 -0
  179. package/lib/hooks/useArchiveListForm.js +46 -0
  180. package/lib/hooks/useCaseFlowApprove.d.ts +56 -0
  181. package/lib/hooks/useCaseFlowApprove.js +157 -0
  182. package/lib/hooks/useDataUserIdItem.d.ts +1 -0
  183. package/lib/hooks/useDataUserIdItem.js +1 -0
  184. package/lib/hooks/useDocumentOperations.d.ts +4 -0
  185. package/lib/hooks/useDocumentOperations.js +52 -10
  186. package/lib/hooks/useInputDialog.d.ts +2 -1
  187. package/lib/hooks/useMultiMasterDetailDcmts.d.ts +113 -0
  188. package/lib/hooks/useMultiMasterDetailDcmts.js +760 -0
  189. package/lib/hooks/useRelatedDocuments.d.ts +1 -0
  190. package/lib/hooks/useRelatedDocuments.js +22 -27
  191. package/lib/hooks/useShowDossiersV5.d.ts +12 -0
  192. package/lib/hooks/useShowDossiersV5.js +37 -0
  193. package/lib/hooks/useTMDistinctValuesMetadataDisplay.d.ts +18 -0
  194. package/lib/hooks/useTMDistinctValuesMetadataDisplay.js +103 -0
  195. package/lib/hooks/useTMDistinctValuesQuickSearch.d.ts +49 -0
  196. package/lib/hooks/useTMDistinctValuesQuickSearch.js +307 -0
  197. package/lib/hooks/useTMDistinctValuesSelection.d.ts +42 -0
  198. package/lib/hooks/useTMDistinctValuesSelection.js +103 -0
  199. package/lib/hooks/useTMDistinctValuesSource.d.ts +29 -0
  200. package/lib/hooks/useTMDistinctValuesSource.js +105 -0
  201. package/lib/index.d.ts +2 -0
  202. package/lib/index.js +5 -2
  203. package/lib/services/caseflow/CaseFlowService.d.ts +236 -0
  204. package/lib/services/caseflow/CaseFlowService.js +693 -0
  205. package/lib/services/caseflow/CaseFlowTemplateCacheService.d.ts +28 -0
  206. package/lib/services/caseflow/CaseFlowTemplateCacheService.js +121 -0
  207. package/lib/services/caseflow/caseFlowNameCache.d.ts +32 -0
  208. package/lib/services/caseflow/caseFlowNameCache.js +116 -0
  209. package/lib/services/caseflow/caseFlowWorkItemUtils.d.ts +61 -0
  210. package/lib/services/caseflow/caseFlowWorkItemUtils.js +113 -0
  211. package/lib/services/index.d.ts +4 -0
  212. package/lib/services/index.js +4 -0
  213. package/lib/services/platform_services.d.ts +4 -3
  214. package/package.json +9 -5
@@ -12,5 +12,5 @@ interface TMSearchResultFloatingActionButtonProps {
12
12
  selectedDcmtsOrFocused: Array<DcmtInfo>;
13
13
  config: TMSearchResultFloatingActionConfig;
14
14
  }
15
- export declare const TMSearchResultFloatingActionButton: (props: TMSearchResultFloatingActionButtonProps) => import("react/jsx-runtime").JSX.Element;
15
+ export declare const TMSearchResultFloatingActionButton: (props: TMSearchResultFloatingActionButtonProps) => React.JSX.Element;
16
16
  export default TMSearchResultFloatingActionButton;
@@ -1,8 +1,9 @@
1
+ import React from "react";
1
2
  import { DcmtInfo, IGraphometricManagerProp } from "../../../ts";
2
3
  interface TMSignatureInfoContentProps {
3
4
  inputDcmt: DcmtInfo;
4
5
  graphometricManager?: IGraphometricManagerProp;
5
6
  onClose?: () => void;
6
7
  }
7
- declare const TMSignatureInfoContent: (props: TMSignatureInfoContentProps) => import("react/jsx-runtime").JSX.Element;
8
+ declare const TMSignatureInfoContent: (props: TMSignatureInfoContentProps) => React.JSX.Element;
8
9
  export default TMSignatureInfoContent;
@@ -1,5 +1,5 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { useCallback, useEffect, useState } from 'react';
2
+ import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
3
3
  import { DcmtTypeListCacheService, LayoutModes, SDK_Localizator, TreeCacheService, TreeItemTypes } from '@topconsultnpm/sdk-ts';
4
4
  import { TreeList, Column, Scrolling, Selection } from 'devextreme-react/tree-list';
5
5
  import { DropDownBox } from 'devextreme-react';
@@ -13,6 +13,15 @@ import { TMColors } from '../../../utils/theme';
13
13
  import styled from 'styled-components';
14
14
  import { useOutsideClick } from '../../../hooks/useOutsideClick';
15
15
  import { DeviceType, useDeviceType } from '../../base/TMDeviceProvider';
16
+ const TMTreeDcmtTypeCell = ({ tid, isMobile }) => {
17
+ const [dtd, setDtd] = useState();
18
+ const loadDTD = useCallback(async () => {
19
+ if (isMobile || dtd || !tid)
20
+ return;
21
+ setDtd(await DcmtTypeListCacheService.GetAsync(tid));
22
+ }, [isMobile, dtd, tid]);
23
+ return (_jsxs(StyledTreeDcmtTypeRow, { onMouseEnter: loadDTD, children: [_jsx("span", { style: { cursor: 'pointer', flex: 1, minWidth: 0 }, children: _jsx(TMTidViewer, { tid: tid, showIcon: false }) }), !isMobile && (_jsx("span", { className: 'info-icon', children: _jsx(TMDcmtTypeTooltip, { dtd: dtd, children: _jsx(IconInfo, { color: TMColors.info }) }) }))] }));
24
+ };
16
25
  const TMTreeSelector = ({ layoutMode = LayoutModes.Update, isVisible, onSelectedTIDChanged, onClosePanel, allowMaximize = true, onMaximizePanel }) => {
17
26
  const [trees, setTrees] = useState([]);
18
27
  const [treeItems, setTreeItems] = useState([]);
@@ -22,80 +31,76 @@ const TMTreeSelector = ({ layoutMode = LayoutModes.Update, isVisible, onSelected
22
31
  const [selectedRowKeys, setSelectedRowKeys] = useState([]);
23
32
  // State hook to store the currently focused row key, initially set to undefined
24
33
  const [focusedRowKey, setFocusedRowKey] = useState(undefined);
34
+ // Elemento selezionato nell'albero: dopo un refresh va riproposto se esiste ancora
35
+ const [selectedTreeItemKey, setSelectedTreeItemKey] = useState(undefined);
36
+ const selectedTreeItemKeys = useMemo(() => selectedTreeItemKey !== undefined ? [selectedTreeItemKey] : [], [selectedTreeItemKey]);
25
37
  const [isGridBoxOpened, setIsGridBoxOpened] = useState(false);
26
38
  const [defaultTreeId, setDefaultTreeId] = useState(-1);
27
39
  const deviceType = useDeviceType();
28
40
  const isMobile = deviceType === DeviceType.MOBILE;
29
41
  const panelRef = useOutsideClick(() => setInfoDTD(undefined));
30
- // useEffect(() => {
31
- // if (treeItems.length > 0 && treeItems[0].id) {
32
- // setSelectedRowKeys([treeItems[0].id])
33
- // }
34
- // }, [treeItems])
35
- useEffect(() => {
36
- const setResultCache = (result) => {
37
- if (result && result.length > 0) {
38
- setTrees(result);
39
- let defaultTree = SDKUI_Globals.userSettings.searchSettings.defaultTree;
40
- let initialTreeId;
41
- let treeToSelect;
42
- if (defaultTree > 0) {
43
- initialTreeId = defaultTree;
44
- treeToSelect = result.find(o => o.id == defaultTree);
45
- }
46
- else {
47
- initialTreeId = result[0]?.id ?? 0;
48
- treeToSelect = result[0];
49
- }
50
- setSelectedTreeId(initialTreeId);
51
- if (treeToSelect?.id) {
52
- setSelectedRowKeys([treeToSelect.id]);
53
- }
42
+ // Tiene traccia dell'albero selezionato senza far dipendere loadTreesAsync da selectedTreeId:
43
+ // così il refresh può riproporre la selezione corrente senza ricaricare a ogni cambio di albero
44
+ const selectedTreeIdRef = useRef(selectedTreeId);
45
+ useEffect(() => { selectedTreeIdRef.current = selectedTreeId; }, [selectedTreeId]);
46
+ // Carica tutti gli alberi del contesto corrente (ricerca o archiviazione).
47
+ // Con forceRefresh la cache viene invalidata, altrimenti GetAll* restituirebbe gli alberi già in memoria.
48
+ const loadTreesAsync = useCallback(async (forceRefresh = false) => {
49
+ const isSearchContext = layoutMode == LayoutModes.Update;
50
+ if (forceRefresh) {
51
+ if (isSearchContext)
52
+ TreeCacheService.RemoveAllSearch();
53
+ else
54
+ TreeCacheService.RemoveAllArchive();
55
+ }
56
+ const result = isSearchContext
57
+ ? await TreeCacheService.GetAllSearchAsync()
58
+ : await TreeCacheService.GetAllArchiveAsync();
59
+ if (!result || result.length === 0) {
60
+ // Sul refresh gli alberi possono essere spariti lato server: allinea anche lo stato vuoto
61
+ if (forceRefresh) {
62
+ setTrees([]);
63
+ setSelectedTreeId(0);
64
+ setSelectedRowKeys([]);
54
65
  }
55
- };
56
- if (layoutMode == LayoutModes.Update) {
57
- TreeCacheService.GetAllSearchAsync().then((result) => { setResultCache(result); });
66
+ return;
67
+ }
68
+ setTrees(result);
69
+ // Dopo un refresh mantiene l'albero corrente, se ancora presente
70
+ const currentTreeId = selectedTreeIdRef.current;
71
+ if (forceRefresh && result.some(o => o.id == currentTreeId)) {
72
+ setSelectedTreeId(currentTreeId);
73
+ setSelectedRowKeys([currentTreeId]);
74
+ return;
75
+ }
76
+ let defaultTree = SDKUI_Globals.userSettings.searchSettings.defaultTree;
77
+ let initialTreeId;
78
+ let treeToSelect;
79
+ if (defaultTree > 0) {
80
+ initialTreeId = defaultTree;
81
+ treeToSelect = result.find(o => o.id == defaultTree);
58
82
  }
59
83
  else {
60
- TreeCacheService.GetAllArchiveAsync().then((result) => { setResultCache(result); });
84
+ initialTreeId = result[0]?.id ?? 0;
85
+ treeToSelect = result[0];
86
+ }
87
+ setSelectedTreeId(initialTreeId);
88
+ if (treeToSelect?.id) {
89
+ setSelectedRowKeys([treeToSelect.id]);
61
90
  }
62
91
  }, [layoutMode]);
92
+ useEffect(() => { loadTreesAsync(); }, [loadTreesAsync]);
63
93
  useEffect(() => {
64
94
  let newTreeItems = trees.find(o => o.id == selectedTreeId)?.items ?? [];
65
95
  setTreeItems(newTreeItems);
96
+ // Mantiene la selezione dopo il refresh solo se l'elemento e' ancora presente (al cambio albero si azzera)
97
+ setSelectedTreeItemKey(prev => prev !== undefined && newTreeItems.some(o => o.id == prev) ? prev : undefined);
66
98
  }, [selectedTreeId, trees]);
67
99
  const renderCell = useCallback((data) => {
68
100
  const treeItem = data.data;
69
- const [showInfo, setShowInfo] = useState(false);
70
101
  // Documento (DcmtType)
71
102
  if (treeItem.type === TreeItemTypes.DcmtType) {
72
- return (_jsxs(StyledDivHorizontal, { style: {
73
- alignItems: 'center',
74
- minWidth: 0,
75
- width: '100%',
76
- gap: 2,
77
- position: 'relative'
78
- }, onMouseEnter: async () => {
79
- if (!isMobile) {
80
- setShowInfo(true);
81
- let dtd = await DcmtTypeListCacheService.GetAsync(treeItem.tid);
82
- setInfoDTD(dtd);
83
- }
84
- }, onMouseLeave: () => {
85
- if (!isMobile) {
86
- setShowInfo(false);
87
- setInfoDTD(undefined);
88
- }
89
- }, children: [_jsx("span", { style: { cursor: 'pointer', flex: 1, minWidth: 0 }, children: _jsx(TMTidViewer, { tid: treeItem.tid, showIcon: false }) }), !isMobile && (_jsx("span", { style: {
90
- opacity: showInfo ? 1 : 0,
91
- transition: 'opacity 0.2s',
92
- pointerEvents: showInfo ? 'auto' : 'none',
93
- cursor: 'pointer',
94
- display: 'flex',
95
- alignItems: 'center',
96
- marginLeft: 'auto',
97
- zIndex: 2
98
- }, children: _jsx(TMDcmtTypeTooltip, { dtd: infoDTD, children: _jsx(IconInfo, { color: TMColors.info }) }) }))] }));
103
+ return _jsx(TMTreeDcmtTypeCell, { tid: treeItem.tid, isMobile: isMobile });
99
104
  }
100
105
  // Folder (altri tipi)
101
106
  return (_jsxs(StyledDivHorizontal, { style: { gap: 5, alignItems: 'center', minWidth: 0 }, children: [_jsx("span", { style: {
@@ -113,7 +118,7 @@ const TMTreeSelector = ({ layoutMode = LayoutModes.Update, isVisible, onSelected
113
118
  whiteSpace: 'nowrap',
114
119
  flex: 1,
115
120
  }, children: treeItem.nameLoc })] }));
116
- }, [isMobile, infoDTD, setInfoDTD]);
121
+ }, [isMobile]);
117
122
  // Handles selection change in the data grid
118
123
  const onSelectionChanged = useCallback((e) => {
119
124
  const selectedKeys = e.component.getSelectedRowKeys() ?? [];
@@ -126,6 +131,16 @@ const TMTreeSelector = ({ layoutMode = LayoutModes.Update, isVisible, onSelected
126
131
  setSelectedRowKeys(selectedKeys);
127
132
  setIsGridBoxOpened(false);
128
133
  }, []);
134
+ // Handles click on a tree row in the trees data grid: clicking the already selected tree
135
+ // does not raise onSelectionChanged, so the drop down must be closed here as well
136
+ const onRowClickTrees = useCallback((e) => {
137
+ const tree = e.data;
138
+ if (tree?.id === undefined)
139
+ return;
140
+ setSelectedTreeId(tree.id);
141
+ setSelectedRowKeys([tree.id]);
142
+ setIsGridBoxOpened(false);
143
+ }, []);
129
144
  // Handles focus change in the data grid
130
145
  const onFocusedRowChanged = useCallback((e) => {
131
146
  setFocusedRowKey(e.row?.key);
@@ -161,7 +176,18 @@ const TMTreeSelector = ({ layoutMode = LayoutModes.Update, isVisible, onSelected
161
176
  }
162
177
  }
163
178
  }, []);
164
- return (_jsx(TMPanel, { title: SDK_Localizator.Trees, isVisible: isVisible, totalItems: trees.length, onClose: onClosePanel, allowMaximize: allowMaximize, onMaximize: onMaximizePanel, onHeaderDoubleClick: onMaximizePanel, toolbar: _jsx(TMButton, { btnStyle: 'icon', caption: defaultTreeId == selectedTreeId ? SDKUI_Localizator.TreeRemoveDefault : SDKUI_Localizator.SetAsDefault, icon: defaultTreeId == selectedTreeId ? _jsx(IconStarRemove, { color: 'rgb(243, 114, 92)' }) : _jsx(IconStar, { color: 'rgb(248, 215, 117)' }), onClick: () => {
179
+ // Callback function to handle click events on a tree view row.
180
+ const onRowClickTreeView = useCallback((e) => {
181
+ const treeItem = e.data;
182
+ if (treeItem?.type === TreeItemTypes.DcmtType) {
183
+ onSelectedTIDChanged?.(treeItem.tid, selectedTreeId);
184
+ }
185
+ }, [onSelectedTIDChanged, selectedTreeId]);
186
+ // La selezione la decide il widget (click, ctrl+click che deseleziona, barra spaziatrice): qui si allinea solo lo stato
187
+ const onSelectionChangedTreeView = useCallback((e) => {
188
+ setSelectedTreeItemKey(e.selectedRowKeys?.[0]);
189
+ }, []);
190
+ return (_jsx(TMPanel, { title: SDK_Localizator.Trees, isVisible: isVisible, totalItems: trees.length, onClose: onClosePanel, allowMaximize: allowMaximize, onMaximize: onMaximizePanel, onHeaderDoubleClick: onMaximizePanel, onRefresh: () => loadTreesAsync(true), toolbar: _jsx(TMButton, { btnStyle: 'icon', caption: defaultTreeId == selectedTreeId ? SDKUI_Localizator.TreeRemoveDefault : SDKUI_Localizator.SetAsDefault, icon: defaultTreeId == selectedTreeId ? _jsx(IconStarRemove, { color: 'rgb(243, 114, 92)' }) : _jsx(IconStar, { color: 'rgb(248, 215, 117)' }), onClick: () => {
165
191
  if (defaultTreeId == selectedTreeId) {
166
192
  if (layoutMode == LayoutModes.Update)
167
193
  SDKUI_Globals.userSettings.searchSettings.defaultTree = -1;
@@ -193,14 +219,33 @@ const TMTreeSelector = ({ layoutMode = LayoutModes.Update, isVisible, onSelected
193
219
  }, value: selectedTreeId, opened: isGridBoxOpened, valueExpr: "id", displayExpr: "nameLoc", deferRendering: false, dataSource: trees, onValueChanged: syncDataGridSelection, onOptionChanged: onGridBoxOpened, style: { height: 30, padding: '5px' }, children: _jsx(TMDataGrid, { height: "100%", width: "100%", dataSource: trees, dataColumns: [
194
220
  { dataField: 'nameLoc', caption: SDKUI_Localizator.Name, width: 'auto' },
195
221
  { dataField: 'description', caption: SDKUI_Localizator.Description, width: 'auto' },
196
- ], selection: { mode: 'single', showCheckBoxesMode: "none" }, showHeaderFilter: false, selectedRowKeys: selectedRowKeys, onSelectionChanged: onSelectionChanged, focusedRowKey: focusedRowKey, onFocusedRowChanged: onFocusedRowChanged }) }) }), _jsxs(StyledTreeListWrapper, { children: [_jsxs(TreeList, { height: "100%", dataSource: treeItems, showRowLines: false, showColumnLines: false, showBorders: false, columnAutoWidth: false, keyExpr: "id", parentIdExpr: "parentID", dataStructure: "plain", showColumnHeaders: false, onContentReady: (e) => e.component.clearSelection(), onCellDblClick: onCellDblClickTreeView, onSelectionChanged: (e) => {
197
- if (e.selectedRowsData[0] && e.selectedRowsData[0].type == TreeItemTypes.DcmtType) {
198
- onSelectedTIDChanged?.(e.selectedRowsData[0].tid, selectedTreeId);
199
- }
200
- }, children: [_jsx(Column, { dataField: "nameLoc", caption: SDKUI_Localizator.Name, cellRender: renderCell, width: "100%" }), _jsx(Scrolling, { mode: "virtual", useNative: Number(SDKUI_Globals.userSettings?.themeSettings.gridSettings.useNativeScrollbar) === 1 }), _jsx(Selection, { mode: "single" })] }), _jsxs(StyledOffCanvasPanel, { ref: panelRef, "$isOpen": isMobile && infoDTD !== undefined, children: [_jsxs(StyledDivHorizontal, { style: { gap: 10, padding: '10px 8px', width: '100%', alignItems: 'center' }, children: [_jsx("p", { style: { fontSize: '1.1rem', fontWeight: 'bold' }, children: `${SDKUI_Localizator.DcmtType} - ${SDKUI_Localizator.About}` }), _jsx(IconCloseOutline, { style: { marginLeft: 'auto', cursor: 'pointer' }, onClick: () => setInfoDTD(undefined) })] }), renderDTDTooltipContent(infoDTD)] })] })] })
222
+ ], selection: { mode: 'single', showCheckBoxesMode: "none" }, showHeaderFilter: false, selectedRowKeys: selectedRowKeys, onSelectionChanged: onSelectionChanged, onRowClick: onRowClickTrees, focusedRowKey: focusedRowKey, onFocusedRowChanged: onFocusedRowChanged }) }) }), _jsxs(StyledTreeListWrapper, { children: [_jsxs(TreeList, { height: "100%", dataSource: treeItems, showRowLines: false, showColumnLines: false, showBorders: false, columnAutoWidth: false, keyExpr: "id", parentIdExpr: "parentID", dataStructure: "plain", showColumnHeaders: false, selectedRowKeys: selectedTreeItemKeys, onSelectionChanged: onSelectionChangedTreeView, onCellDblClick: onCellDblClickTreeView, onRowClick: onRowClickTreeView, children: [_jsx(Column, { dataField: "nameLoc", caption: SDKUI_Localizator.Name, cellRender: renderCell, width: "100%" }), _jsx(Scrolling, { mode: "virtual", useNative: Number(SDKUI_Globals.userSettings?.themeSettings.gridSettings.useNativeScrollbar) === 1 }), _jsx(Selection, { mode: "single" })] }), _jsxs(StyledOffCanvasPanel, { ref: panelRef, "$isOpen": isMobile && infoDTD !== undefined, children: [_jsxs(StyledDivHorizontal, { style: { gap: 10, padding: '10px 8px', width: '100%', alignItems: 'center' }, children: [_jsx("p", { style: { fontSize: '1.1rem', fontWeight: 'bold' }, children: `${SDKUI_Localizator.DcmtType} - ${SDKUI_Localizator.About}` }), _jsx(IconCloseOutline, { style: { marginLeft: 'auto', cursor: 'pointer' }, onClick: () => setInfoDTD(undefined) })] }), renderDTDTooltipContent(infoDTD)] })] })] })
201
223
  : _jsx("div", { style: { display: 'flex', flexDirection: 'column', alignItems: 'center', justifyContent: 'center', height: '100%', width: '100%', fontSize: '1.5rem' }, children: SDKUI_Localizator.TreesNoAvailable }) }));
202
224
  };
203
225
  export default TMTreeSelector;
226
+ const StyledTreeDcmtTypeRow = styled(StyledDivHorizontal) `
227
+ align-items: center;
228
+ min-width: 0;
229
+ width: 100%;
230
+ gap: 2px;
231
+ position: relative;
232
+
233
+ .info-icon {
234
+ display: flex;
235
+ align-items: center;
236
+ margin-left: auto;
237
+ z-index: 2;
238
+ cursor: pointer;
239
+ opacity: 0;
240
+ pointer-events: none;
241
+ transition: opacity 0.2s;
242
+ }
243
+
244
+ &:hover .info-icon {
245
+ opacity: 1;
246
+ pointer-events: auto;
247
+ }
248
+ `;
204
249
  const StyledTreeListWrapper = styled.div `
205
250
  width: 100%;
206
251
  height: 100%;
@@ -1,3 +1,4 @@
1
+ import React from "react";
1
2
  import { DcmtInfo } from "../../../ts/types";
2
3
  import { DeviceType } from "../../base/TMDeviceProvider";
3
4
  import { DcmtTypeDescriptor, HomeBlogPost, TaskDescriptor } from "@topconsultnpm/sdk-ts";
@@ -14,5 +15,5 @@ interface TMViewHistoryDcmtProps {
14
15
  handleNavigateToWGs?: (value: HomeBlogPost | number) => Promise<void>;
15
16
  handleNavigateToDossiers?: (value: HomeBlogPost | number) => Promise<void>;
16
17
  }
17
- declare const TMViewHistoryDcmt: (props: TMViewHistoryDcmtProps) => import("react/jsx-runtime").JSX.Element;
18
+ declare const TMViewHistoryDcmt: (props: TMViewHistoryDcmtProps) => React.JSX.Element;
18
19
  export default TMViewHistoryDcmt;
@@ -36,5 +36,5 @@ export interface TMTaskFormProps {
36
36
  onOpenPdfEditorRequest?: (dcmtInfo: Array<DcmtInfo>, refreshDocumentPreview?: () => Promise<void>) => void;
37
37
  s4TViewerDialogComponent?: React.ReactNode;
38
38
  }
39
- declare const TMTaskForm: (props: TMTaskFormProps) => import("react/jsx-runtime").JSX.Element;
39
+ declare const TMTaskForm: (props: TMTaskFormProps) => React.JSX.Element;
40
40
  export default TMTaskForm;
@@ -8,7 +8,7 @@ interface TaskFormAssignmentNoticeSectionProps {
8
8
  users: Array<UserDescriptor>;
9
9
  requestMoreInfo?: boolean;
10
10
  }
11
- export declare const TaskFormAssignmentNoticeBadge: (props: TaskFormAssignmentNoticeSectionProps) => import("react/jsx-runtime").JSX.Element | null;
11
+ export declare const TaskFormAssignmentNoticeBadge: (props: TaskFormAssignmentNoticeSectionProps) => React.JSX.Element | null;
12
12
  interface RenderContextBlockParams {
13
13
  condition: boolean;
14
14
  pdg: PdGs;
@@ -19,7 +19,7 @@ interface TaskFormContextualAttachmentsProps {
19
19
  currentTask: TaskDescriptor | undefined;
20
20
  taskContext: TaskContext | undefined;
21
21
  }
22
- export declare const TaskFormContextualAttachments: (props: TaskFormContextualAttachmentsProps) => import("react/jsx-runtime").JSX.Element;
22
+ export declare const TaskFormContextualAttachments: (props: TaskFormContextualAttachmentsProps) => React.JSX.Element;
23
23
  interface TaskFormAssignedToProps {
24
24
  formMode: FormModes;
25
25
  formData: TaskDescriptor | undefined;
@@ -31,7 +31,7 @@ interface TaskFormAssignedToProps {
31
31
  label?: string;
32
32
  onValueChanged: (newValue: Array<number> | undefined) => void;
33
33
  }
34
- export declare const TaskAssigneeField: (props: TaskFormAssignedToProps) => import("react/jsx-runtime").JSX.Element;
34
+ export declare const TaskAssigneeField: (props: TaskFormAssignedToProps) => React.JSX.Element;
35
35
  interface RenderFieldBaseProps {
36
36
  fieldsReadOnly: IFieldsEditability;
37
37
  formDataOrig?: TaskDescriptor;
@@ -50,12 +50,12 @@ interface RenderDateFieldProps extends RenderFieldProps {
50
50
  label?: string;
51
51
  onContentReady?: () => void;
52
52
  }
53
- export declare const RenderNameField: ({ requestMoreInfo, validationItems, setFormData, formData, formDataOrig, fieldsReadOnly }: RenderFieldProps) => import("react/jsx-runtime").JSX.Element;
54
- export declare const RenderDescriptionField: ({ validationItems, setFormData, formData, formDataOrig, fieldsReadOnly }: RenderFieldProps) => import("react/jsx-runtime").JSX.Element;
55
- export declare const RenderPriorityField: ({ formData, formDataOrig, fieldsReadOnly, onPriorityValueChange }: RenderPriorityFieldProps) => import("react/jsx-runtime").JSX.Element;
56
- export declare const RenderStartDateField: ({ label, validationItems, setFormData, formData, formDataOrig, fieldsReadOnly, onContentReady }: RenderDateFieldProps) => import("react/jsx-runtime").JSX.Element;
57
- export declare const RenderEndDateField: ({ label, validationItems, setFormData, formData, formDataOrig, fieldsReadOnly, onContentReady }: RenderDateFieldProps) => import("react/jsx-runtime").JSX.Element;
58
- export declare const RenderRemindDateField: ({ validationItems, setFormData, formData, formDataOrig, fieldsReadOnly }: RenderFieldProps) => import("react/jsx-runtime").JSX.Element;
53
+ export declare const RenderNameField: ({ requestMoreInfo, validationItems, setFormData, formData, formDataOrig, fieldsReadOnly }: RenderFieldProps) => React.JSX.Element;
54
+ export declare const RenderDescriptionField: ({ validationItems, setFormData, formData, formDataOrig, fieldsReadOnly }: RenderFieldProps) => React.JSX.Element;
55
+ export declare const RenderPriorityField: ({ formData, formDataOrig, fieldsReadOnly, onPriorityValueChange }: RenderPriorityFieldProps) => React.JSX.Element;
56
+ export declare const RenderStartDateField: ({ label, validationItems, setFormData, formData, formDataOrig, fieldsReadOnly, onContentReady }: RenderDateFieldProps) => React.JSX.Element;
57
+ export declare const RenderEndDateField: ({ label, validationItems, setFormData, formData, formDataOrig, fieldsReadOnly, onContentReady }: RenderDateFieldProps) => React.JSX.Element;
58
+ export declare const RenderRemindDateField: ({ validationItems, setFormData, formData, formDataOrig, fieldsReadOnly }: RenderFieldProps) => React.JSX.Element;
59
59
  interface RenderTaskFormStateFieldProps {
60
60
  formDataOrig: TaskDescriptor | undefined;
61
61
  formData: TaskDescriptor | undefined;
@@ -71,7 +71,7 @@ interface TMChangeStateFormProps {
71
71
  handleShowChangeStateForm: (value: boolean) => void;
72
72
  setFormData: React.Dispatch<React.SetStateAction<TaskDescriptor | undefined>>;
73
73
  }
74
- export declare const TMChangeStateForm: (props: TMChangeStateFormProps) => import("react/jsx-runtime").JSX.Element;
74
+ export declare const TMChangeStateForm: (props: TMChangeStateFormProps) => React.JSX.Element;
75
75
  type TaskRole = "personal" | "sender" | "receiver";
76
76
  type StatusTransitionMap = {
77
77
  [key in Task_States]?: Task_States[];
@@ -15,5 +15,5 @@ interface TMTasksAgendaProps {
15
15
  handleFocusedRowChange: (row: TaskDescriptor | undefined) => void;
16
16
  menuItems: TMContextMenuItemProps[];
17
17
  }
18
- declare const TMTasksAgenda: (props: TMTasksAgendaProps) => import("react/jsx-runtime").JSX.Element;
18
+ declare const TMTasksAgenda: (props: TMTasksAgendaProps) => React.JSX.Element;
19
19
  export default TMTasksAgenda;
@@ -19,5 +19,5 @@ interface TMTasksCalendarProps {
19
19
  handleFocusedRowChange: (row: TaskDescriptor | undefined) => void;
20
20
  menuItems: TMContextMenuItemProps[];
21
21
  }
22
- declare const TMTasksCalendar: (props: TMTasksCalendarProps) => import("react/jsx-runtime").JSX.Element;
22
+ declare const TMTasksCalendar: (props: TMTasksCalendarProps) => React.JSX.Element;
23
23
  export default TMTasksCalendar;
@@ -10,5 +10,5 @@ interface TMTasksHeaderProps {
10
10
  color?: string;
11
11
  height?: string;
12
12
  }
13
- declare const TMTasksHeader: (props: TMTasksHeaderProps) => import("react/jsx-runtime").JSX.Element;
13
+ declare const TMTasksHeader: (props: TMTasksHeaderProps) => React.JSX.Element;
14
14
  export default TMTasksHeader;
@@ -16,5 +16,5 @@ interface TMTasksPanelContentProps {
16
16
  s4TViewerDialogComponent?: React.ReactNode;
17
17
  afterTaskSaved?: (task: TaskDescriptor | undefined, formMode: FormModes | undefined, forceRefresh?: boolean) => Promise<void>;
18
18
  }
19
- declare const TMTasksPanelContent: (props: TMTasksPanelContentProps) => import("react/jsx-runtime").JSX.Element;
19
+ declare const TMTasksPanelContent: (props: TMTasksPanelContentProps) => React.JSX.Element;
20
20
  export default TMTasksPanelContent;
@@ -1,4 +1,4 @@
1
- import { ReactNode } from "react";
1
+ import React, { ReactNode } from "react";
2
2
  import { PdGs, Task_States, TaskDescriptor } from '@topconsultnpm/sdk-ts';
3
3
  import { FormModes } from "../../../ts";
4
4
  export declare const taskStateIconMap: (fontSize?: number) => Map<Task_States, JSX.Element>;
@@ -12,15 +12,15 @@ export declare const renderTaskIcons: (taskData: {
12
12
  remTime: Date | undefined;
13
13
  isNew: boolean;
14
14
  numberOfDays: number;
15
- }) => import("react/jsx-runtime").JSX.Element;
15
+ }) => React.JSX.Element;
16
16
  interface TMActionCalendarProps {
17
17
  currentTask: TaskDescriptor;
18
18
  openTaskForm: (formMode: FormModes, task?: TaskDescriptor) => void;
19
19
  onDeleteCallback: (rowIds: Array<number>) => void;
20
20
  }
21
- export declare const TMActionCalendar: (props: TMActionCalendarProps) => import("react/jsx-runtime").JSX.Element;
22
- export declare const priorityLegend: () => import("react/jsx-runtime").JSX.Element;
23
- export declare const highlightTaskText: (text: string, search: string, taskId: number) => string | (string | import("react/jsx-runtime").JSX.Element)[];
21
+ export declare const TMActionCalendar: (props: TMActionCalendarProps) => React.JSX.Element;
22
+ export declare const priorityLegend: () => React.JSX.Element;
23
+ export declare const highlightTaskText: (text: string, search: string, taskId: number) => string | (string | React.JSX.Element)[];
24
24
  export declare const treeFilterDataSource: (allTasks: Array<TaskDescriptor>) => Array<{
25
25
  id: number;
26
26
  label: string;
@@ -36,5 +36,5 @@ interface TMTasksViewProps {
36
36
  s4TViewerDialogComponent?: React.ReactNode;
37
37
  afterTaskSaved?: (task: TaskDescriptor | undefined, formMode: FormModes | undefined, forceRefresh?: boolean) => Promise<void>;
38
38
  }
39
- declare const TMTasksView: (props: TMTasksViewProps) => import("react/jsx-runtime").JSX.Element;
39
+ declare const TMTasksView: (props: TMTasksViewProps) => React.JSX.Element;
40
40
  export default TMTasksView;
@@ -1,3 +1,4 @@
1
+ import React from 'react';
1
2
  import { DcmtTypeDescriptor, WorkingGroupDescriptor } from "@topconsultnpm/sdk-ts";
2
3
  import { FileItem } from '../../base/TMFileManagerUtils';
3
4
  /** Context descriptor for copy/move operations using different engines */
@@ -24,7 +25,7 @@ interface TMWGsCopyMoveFormProps {
24
25
  fetchTreeFileSystemForWorkingGroup?: (workingGroupId: number | undefined) => Promise<void>;
25
26
  fetchArchivedDocumentsForWorkingGroup?: (workingGroupId: number | undefined) => Promise<void>;
26
27
  }
27
- declare const TMWGsCopyMoveForm: (props: TMWGsCopyMoveFormProps) => import("react/jsx-runtime").JSX.Element;
28
+ declare const TMWGsCopyMoveForm: (props: TMWGsCopyMoveFormProps) => React.JSX.Element;
28
29
  export default TMWGsCopyMoveForm;
29
30
  interface StepItem {
30
31
  id: number | string;
@@ -36,4 +37,4 @@ interface TMStepNavigatorProps {
36
37
  currentStep: number;
37
38
  onStepChange: (stepIndex: number) => void;
38
39
  }
39
- export declare const TMStepNavigator: (props: TMStepNavigatorProps) => import("react/jsx-runtime").JSX.Element;
40
+ export declare const TMStepNavigator: (props: TMStepNavigatorProps) => React.JSX.Element;
@@ -1,8 +1,19 @@
1
+ import React from "react";
1
2
  import { DcmtTypeDescriptor, HomeBlogPost, TaskDescriptor, WFDescriptor } from '@topconsultnpm/sdk-ts';
2
3
  import { DeviceType } from "../../base/TMDeviceProvider";
3
4
  import { WorkItemDetail } from "../../../ts";
4
5
  interface IWorkflowOperationButtonsProps {
5
6
  dtd: DcmtTypeDescriptor | undefined;
7
+ /**
8
+ * Forza la forma dei pulsanti: `true` = flusso di FIRMA (Firma e approva),
9
+ * `false` = flusso di APPROVAZIONE. Se omesso si deduce dal tipo documento
10
+ * (widget Sign4Top), che è il comportamento del workflow.
11
+ *
12
+ * Serve a chi conosce la natura dell'attività meglio del tipo documento: un
13
+ * work item di sola approvazione su un tipo ABILITATO alla firma non deve
14
+ * mostrare "Firma e approva".
15
+ */
16
+ signFlow?: boolean;
6
17
  approveDisable?: boolean;
7
18
  signApproveDisable?: boolean;
8
19
  rejectDisable?: boolean;
@@ -22,7 +33,7 @@ interface IWorkflowOperationButtonsProps {
22
33
  handleNavigateToWGs?: (value: HomeBlogPost | number) => Promise<void>;
23
34
  handleNavigateToDossiers?: (value: HomeBlogPost | number) => Promise<void>;
24
35
  }
25
- export declare const WorkFlowOperationButtons: (props: IWorkflowOperationButtonsProps) => import("react/jsx-runtime").JSX.Element;
36
+ export declare const WorkFlowOperationButtons: (props: IWorkflowOperationButtonsProps) => React.JSX.Element;
26
37
  export declare const WorkFlowApproveRejectPopUp: ({ TID, DID, deviceType, isReject, selectedItems, onClose, onCompleted }: {
27
38
  TID?: number;
28
39
  DID?: number;
@@ -31,7 +42,7 @@ export declare const WorkFlowApproveRejectPopUp: ({ TID, DID, deviceType, isReje
31
42
  isReject: number;
32
43
  onClose?: () => void;
33
44
  onCompleted?: () => Promise<void>;
34
- }) => import("react/jsx-runtime").JSX.Element;
45
+ }) => React.JSX.Element;
35
46
  export declare const WorkFlowReAssignPopUp: ({ DID, TID, deviceType, onClose, selectedItems, onCompleted, wf, workItemDetail }: {
36
47
  TID?: number;
37
48
  DID?: number;
@@ -41,7 +52,7 @@ export declare const WorkFlowReAssignPopUp: ({ DID, TID, deviceType, onClose, se
41
52
  onCompleted?: () => Promise<void>;
42
53
  wf?: WFDescriptor;
43
54
  workItemDetail?: WorkItemDetail;
44
- }) => import("react/jsx-runtime").JSX.Element;
55
+ }) => React.JSX.Element;
45
56
  /**
46
57
  * Modal per forzare l'approvazione di un work item
47
58
  */
@@ -49,7 +60,7 @@ export declare const WorkflowForceApproveModal: ({ detail, onClose, onCompleted
49
60
  detail: WorkItemDetail;
50
61
  onClose?: () => void;
51
62
  onCompleted?: () => Promise<void>;
52
- }) => import("react/jsx-runtime").JSX.Element;
63
+ }) => React.JSX.Element;
53
64
  /**
54
65
  * Modal per forzare il rifiuto di un work item
55
66
  */
@@ -57,7 +68,7 @@ export declare const WorkflowForceRejectModal: ({ detail, onClose, onCompleted }
57
68
  detail: WorkItemDetail;
58
69
  onClose?: () => void;
59
70
  onCompleted?: () => Promise<void>;
60
- }) => import("react/jsx-runtime").JSX.Element;
71
+ }) => React.JSX.Element;
61
72
  /**
62
73
  * Modal per terminare le istanze workflow selezionate
63
74
  */
@@ -69,7 +80,7 @@ export declare const WorkflowEndInstanceModal: ({ selectedInstances, onClose, on
69
80
  }>;
70
81
  onClose?: () => void;
71
82
  onCompleted?: () => Promise<void>;
72
- }) => import("react/jsx-runtime").JSX.Element;
83
+ }) => React.JSX.Element;
73
84
  interface IWorkFlowMoreInfoPopUpProps {
74
85
  fromDTD?: DcmtTypeDescriptor;
75
86
  TID?: number;
@@ -86,5 +97,5 @@ interface IWorkFlowMoreInfoPopUpProps {
86
97
  handleNavigateToDossiers?: (value: HomeBlogPost | number) => Promise<void>;
87
98
  triggerBlogRefresh?: () => Promise<void>;
88
99
  }
89
- export declare const WorkFlowMoreInfoPopUp: (props: IWorkFlowMoreInfoPopUpProps) => import("react/jsx-runtime").JSX.Element | undefined;
100
+ export declare const WorkFlowMoreInfoPopUp: (props: IWorkFlowMoreInfoPopUpProps) => React.JSX.Element | undefined;
90
101
  export {};
@@ -53,16 +53,20 @@ const StyledHorizontalContainer = styled.div `
53
53
  /* align-items: flex-end; */
54
54
  `;
55
55
  export const WorkFlowOperationButtons = (props) => {
56
- const { dtd = undefined, deviceType = DeviceType.DESKTOP, approveDisable = false, signApproveDisable = false, rejectDisable = false, reassignDisable = false, infoDisable = false, onApprove, onSignApprove, onReject, onReAssign, onMoreInfo, } = props;
56
+ const { dtd = undefined, signFlow = undefined, deviceType = DeviceType.DESKTOP, approveDisable = false, signApproveDisable = false, rejectDisable = false, reassignDisable = false, infoDisable = false, onApprove, onSignApprove, onReject, onReAssign, onMoreInfo, } = props;
57
57
  const isMobile = deviceType === DeviceType.MOBILE;
58
- // Calcola direttamente se è un workflow di firma per evitare flickering durante il render
58
+ // Calcola direttamente se è un workflow di firma per evitare flickering durante il render.
59
+ // `signFlow`, se fornito, ha la precedenza: chi lo passa conosce la natura
60
+ // dell'attività (es. categoria del work item) meglio del tipo documento.
59
61
  const isSignWorkflow = useMemo(() => {
62
+ if (signFlow !== undefined)
63
+ return signFlow;
60
64
  if (dtd && dtd.widgets && dtd.widgets.length > 0) {
61
65
  return isSign4TopEnabled(dtd.widgets);
62
66
  }
63
67
  return false;
64
- }, [dtd]);
65
- return (_jsx(StyledWorkFlowOperationButtonsContainer, { "$isMobile": isMobile, children: isSignWorkflow ? (_jsxs(_Fragment, { children: [_jsx(TMButton, { btnStyle: isMobile ? 'toolbar' : 'advanced', showTooltip: isMobile, icon: _jsx(IconSignaturePencil, {}), caption: SDKUI_Localizator.SignatureAndApprove, width: "160px", disabled: signApproveDisable, onClick: () => !signApproveDisable && onSignApprove?.(), onMouseDown: e => e.stopPropagation(), advancedColor: "#1a9a49", color: "success" }), _jsx(TMButton, { btnStyle: isMobile ? 'toolbar' : 'advanced', showTooltip: isMobile, icon: _jsx(IconCloseOutline, {}), caption: SDKUI_Localizator.Reject, disabled: rejectDisable, onClick: () => !rejectDisable && onReject?.(), onMouseDown: e => e.stopPropagation(), advancedColor: TMColors.error, color: "error" }), _jsx(TMButton, { btnStyle: isMobile ? 'toolbar' : 'advanced', showTooltip: isMobile, icon: _jsx(IconInfo, { fontSize: 16 }), caption: SDKUI_Localizator.MoreInformation, width: "180px", disabled: infoDisable, onClick: () => !infoDisable && onMoreInfo?.(), onMouseDown: e => e.stopPropagation(), advancedColor: TMColors.info, color: "info" })] })) : (_jsxs(_Fragment, { children: [_jsx(TMButton, { btnStyle: isMobile ? 'toolbar' : 'advanced', showTooltip: isMobile, icon: _jsx(IconApply, {}), caption: SDKUI_Localizator.Approve, disabled: approveDisable, onClick: () => !approveDisable && onApprove?.(), advancedColor: "#1a9a49", color: "success" }), _jsx(TMButton, { btnStyle: isMobile ? 'toolbar' : 'advanced', showTooltip: isMobile, icon: _jsx(IconCloseOutline, {}), caption: SDKUI_Localizator.Reject, disabled: rejectDisable, onClick: () => !rejectDisable && onReject?.(), advancedColor: TMColors.error, color: "error" }), _jsx(TMButton, { btnStyle: isMobile ? 'toolbar' : 'advanced', showTooltip: isMobile, icon: _jsx(IconUser, { fontSize: 16 }), caption: SDKUI_Localizator.Reassign, disabled: reassignDisable, onClick: () => !reassignDisable && onReAssign?.(), advancedColor: TMColors.tertiary, color: "tertiary" }), _jsx(TMButton, { btnStyle: isMobile ? 'toolbar' : 'advanced', showTooltip: isMobile, icon: _jsx(IconInfo, { fontSize: 16 }), caption: SDKUI_Localizator.MoreInformation, width: "180px", disabled: infoDisable, onClick: () => !infoDisable && onMoreInfo?.(), advancedColor: TMColors.info, color: "info" })] })) }));
68
+ }, [dtd, signFlow]);
69
+ return (_jsx(StyledWorkFlowOperationButtonsContainer, { "$isMobile": isMobile, children: isSignWorkflow ? (_jsxs(_Fragment, { children: [_jsx(TMButton, { btnStyle: isMobile ? 'toolbar' : 'advanced', showTooltip: isMobile, icon: _jsx(IconSignaturePencil, {}), caption: SDKUI_Localizator.SignatureAndApprove, width: "160px", disabled: signApproveDisable, onClick: () => !signApproveDisable && onSignApprove?.(), onMouseDown: e => e.stopPropagation(), advancedColor: "#1a9a49", color: "success" }), _jsx(TMButton, { btnStyle: isMobile ? 'toolbar' : 'advanced', showTooltip: isMobile, icon: _jsx(IconCloseOutline, {}), caption: SDKUI_Localizator.Reject, disabled: rejectDisable, onClick: () => !rejectDisable && onReject?.(), onMouseDown: e => e.stopPropagation(), advancedColor: TMColors.error, color: "error" }), onMoreInfo && (_jsx(TMButton, { btnStyle: isMobile ? 'toolbar' : 'advanced', showTooltip: isMobile, icon: _jsx(IconInfo, { fontSize: 16 }), caption: SDKUI_Localizator.MoreInformation, width: "180px", disabled: infoDisable, onClick: () => !infoDisable && onMoreInfo?.(), onMouseDown: e => e.stopPropagation(), advancedColor: TMColors.info, color: "info" }))] })) : (_jsxs(_Fragment, { children: [_jsx(TMButton, { btnStyle: isMobile ? 'toolbar' : 'advanced', showTooltip: isMobile, icon: _jsx(IconApply, {}), caption: SDKUI_Localizator.Approve, disabled: approveDisable, onClick: () => !approveDisable && onApprove?.(), advancedColor: "#1a9a49", color: "success" }), _jsx(TMButton, { btnStyle: isMobile ? 'toolbar' : 'advanced', showTooltip: isMobile, icon: _jsx(IconCloseOutline, {}), caption: SDKUI_Localizator.Reject, disabled: rejectDisable, onClick: () => !rejectDisable && onReject?.(), advancedColor: TMColors.error, color: "error" }), onReAssign && (_jsx(TMButton, { btnStyle: isMobile ? 'toolbar' : 'advanced', showTooltip: isMobile, icon: _jsx(IconUser, { fontSize: 16 }), caption: SDKUI_Localizator.Reassign, disabled: reassignDisable, onClick: () => !reassignDisable && onReAssign?.(), advancedColor: TMColors.tertiary, color: "tertiary" })), onMoreInfo && (_jsx(TMButton, { btnStyle: isMobile ? 'toolbar' : 'advanced', showTooltip: isMobile, icon: _jsx(IconInfo, { fontSize: 16 }), caption: SDKUI_Localizator.MoreInformation, width: "180px", disabled: infoDisable, onClick: () => !infoDisable && onMoreInfo?.(), advancedColor: TMColors.info, color: "info" }))] })) }));
66
70
  };
67
71
  export const WorkFlowApproveRejectPopUp = ({ TID = 0, DID = 0, deviceType = DeviceType.DESKTOP, isReject, selectedItems = [], onClose, onCompleted }) => {
68
72
  const { refreshWorkflowApprove } = useWorkflowApprove();
@@ -1,7 +1,9 @@
1
1
  import React from 'react';
2
2
  import { QueryDescriptor } from '@topconsultnpm/sdk-ts';
3
3
  import { WorkItemActor } from './RecipientList';
4
- export declare const RecipientsContainer: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never> & Partial<Pick<React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>>> & string;
4
+ export declare const RecipientsContainer: import("styled-components/dist/types").IStyledComponentBase<"web", Omit<React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "style"> & {
5
+ style?: React.CSSProperties | import("styled-components/dist/types").CSSPropertiesWithVars | undefined;
6
+ }> & string;
5
7
  export declare const tosToActors: (tosString: string) => {
6
8
  andRecipients: WorkItemActor[];
7
9
  orRecipients: WorkItemActor[];
@@ -11,4 +11,6 @@ interface ChangePasswordInputsProps {
11
11
  }
12
12
  declare const ChangePasswordInputs: React.FC<ChangePasswordInputsProps>;
13
13
  export default ChangePasswordInputs;
14
- export declare const Divider: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never> & Partial<Pick<React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>>> & string;
14
+ export declare const Divider: import("styled-components/dist/types").IStyledComponentBase<"web", Omit<React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "style"> & {
15
+ style?: React.CSSProperties | import("styled-components/dist/types").CSSPropertiesWithVars | undefined;
16
+ }> & string;
@@ -23,6 +23,6 @@ interface ChooserProps<T> {
23
23
  onClose?: () => void;
24
24
  isDropDown?: boolean;
25
25
  }
26
- declare const Chooser: <T>({ dataSource, columns, value, additionalIcons, validationItems, title, label, icon, placeHolder, disabled, selectedRow, onChooserClick, onSelectionChanged, onClose, isDropDown }: ChooserProps<T>) => import("react/jsx-runtime").JSX.Element;
26
+ declare const Chooser: <T>({ dataSource, columns, value, additionalIcons, validationItems, title, label, icon, placeHolder, disabled, selectedRow, onChooserClick, onSelectionChanged, onClose, isDropDown }: ChooserProps<T>) => React.JSX.Element;
27
27
  export default Chooser;
28
- export declare function IconDropDown(props: React.SVGProps<SVGSVGElement>): import("react/jsx-runtime").JSX.Element;
28
+ export declare function IconDropDown(props: React.SVGProps<SVGSVGElement>): React.JSX.Element;
@@ -1,3 +1,4 @@
1
+ import React from 'react';
1
2
  import { ITMChooserFormProps } from '../../ts';
2
- declare const TMChooserForm: <T>({ children, title, allowMultipleSelection, allowApplyWithZeroSelection, startWithShowOnlySelectedItems, hasShowOnlySelectedItems, allowGrouping, allowSorting, width, height, dataSource, selectedIDs, manageUseLocalizedName, hasShowId, hideRefresh, keyName, customButtons, showFilterPanel, showDefaultColumns, columns, summaryItems, convertID, customFilter, getItems, cellRenderIcon, cellRenderNameAndDesc, onChoose, onClose, onShowIdChanged }: ITMChooserFormProps<T>) => import("react/jsx-runtime").JSX.Element;
3
+ declare const TMChooserForm: <T>({ children, title, allowMultipleSelection, allowApplyWithZeroSelection, startWithShowOnlySelectedItems, hasShowOnlySelectedItems, allowGrouping, allowSorting, width, height, dataSource, selectedIDs, manageUseLocalizedName, hasShowId, hideRefresh, keyName, customButtons, showFilterPanel, showDefaultColumns, columns, summaryItems, convertID, customFilter, getItems, cellRenderIcon, cellRenderNameAndDesc, onChoose, onClose, onShowIdChanged }: ITMChooserFormProps<T>) => React.JSX.Element;
3
4
  export default TMChooserForm;
@@ -13,19 +13,19 @@ interface ITMSaveFormButtonPreviousProps extends ITMSaveFormButtonBase {
13
13
  onPrev?: () => void;
14
14
  onSaveAsync?: () => Promise<void>;
15
15
  }
16
- export declare const TMSaveFormButtonPrevious: ({ btnStyle, formMode, isModified, onPrev, canPrev, iconColor, onSaveAsync }: ITMSaveFormButtonPreviousProps) => import("react/jsx-runtime").JSX.Element;
16
+ export declare const TMSaveFormButtonPrevious: ({ btnStyle, formMode, isModified, onPrev, canPrev, iconColor, onSaveAsync }: ITMSaveFormButtonPreviousProps) => React.JSX.Element;
17
17
  interface ITMSaveFormButtonNextProps extends ITMSaveFormButtonBase {
18
18
  canNext?: boolean;
19
19
  onNext?: () => void;
20
20
  onSaveAsync?: () => Promise<void>;
21
21
  }
22
- export declare const TMSaveFormButtonNext: ({ btnStyle, formMode, isModified, onNext, canNext, iconColor, onSaveAsync }: ITMSaveFormButtonNextProps) => import("react/jsx-runtime").JSX.Element;
22
+ export declare const TMSaveFormButtonNext: ({ btnStyle, formMode, isModified, onNext, canNext, iconColor, onSaveAsync }: ITMSaveFormButtonNextProps) => React.JSX.Element;
23
23
  interface ITMSaveFormButtonSaveProps extends ITMSaveFormButtonBase {
24
24
  errorsCount: number;
25
25
  onSaveAsync?: () => Promise<void>;
26
26
  }
27
- export declare const TMSaveFormButtonSave: ({ btnStyle, errorsCount, isModified, iconColor, width, advancedColor, advancedType, onSaveAsync }: ITMSaveFormButtonSaveProps) => import("react/jsx-runtime").JSX.Element;
27
+ export declare const TMSaveFormButtonSave: ({ btnStyle, errorsCount, isModified, iconColor, width, advancedColor, advancedType, onSaveAsync }: ITMSaveFormButtonSaveProps) => React.JSX.Element;
28
28
  interface ITMSaveFormButtonUndoProps extends ITMSaveFormButtonBase {
29
29
  onUndo?: () => void;
30
30
  }
31
- export declare const TMSaveFormButtonUndo: ({ btnStyle, isModified, iconColor, width, advancedColor, advancedType, onUndo, color, showTooltip }: ITMSaveFormButtonUndoProps) => import("react/jsx-runtime").JSX.Element;
31
+ export declare const TMSaveFormButtonUndo: ({ btnStyle, isModified, iconColor, width, advancedColor, advancedType, onUndo, color, showTooltip }: ITMSaveFormButtonUndoProps) => React.JSX.Element;