@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.
- package/lib/components/NewComponents/ContextMenu/TMContextMenu.js +3 -3
- package/lib/components/NewComponents/ContextMenu/hooks.d.ts +1 -1
- package/lib/components/NewComponents/ContextMenu/styles.d.ts +45 -43
- package/lib/components/NewComponents/FloatingMenuBar/TMFloatingMenuBar.js +6 -6
- package/lib/components/NewComponents/FloatingMenuBar/styles.d.ts +80 -73
- package/lib/components/base/Styled.d.ts +92 -76
- package/lib/components/base/Styled.js +7 -5
- package/lib/components/base/TMAccordionNew.js +7 -7
- package/lib/components/base/TMAlert.d.ts +32 -32
- package/lib/components/base/TMAlert.js +6 -8
- package/lib/components/base/TMAreaManager.js +53 -55
- package/lib/components/base/TMButton.d.ts +13 -0
- package/lib/components/base/TMButton.js +139 -7
- package/lib/components/base/TMClosableList.js +3 -3
- package/lib/components/base/TMCustomButton.js +40 -48
- package/lib/components/base/TMDataGrid.d.ts +4 -0
- package/lib/components/base/TMDataGrid.js +292 -12
- package/lib/components/base/TMDataGridExportForm.js +39 -30
- package/lib/components/base/TMDropDownMenu.js +1 -1
- package/lib/components/base/TMEditorBase.d.ts +2 -0
- package/lib/components/base/TMFileManager.js +5 -3
- package/lib/components/base/TMFileManagerDataGridView.js +12 -3
- package/lib/components/base/TMFileManagerThumbnailItems.js +20 -10
- package/lib/components/base/TMFileManagerUtils.d.ts +6 -6
- package/lib/components/base/TMFileManagerUtils.js +37 -1
- package/lib/components/base/TMLayout.d.ts +2 -2
- package/lib/components/base/TMLayout.js +3 -3
- package/lib/components/base/TMList.js +1 -1
- package/lib/components/base/TMListView.js +3 -3
- package/lib/components/base/TMModal.d.ts +11 -0
- package/lib/components/base/TMModal.js +47 -13
- package/lib/components/base/TMPanel.d.ts +6 -0
- package/lib/components/base/TMPanel.js +141 -28
- package/lib/components/base/TMPopUp.js +5 -2
- package/lib/components/base/TMResizableMenu.js +2 -2
- package/lib/components/base/TMRightSidebar.js +1 -1
- package/lib/components/base/TMShowAllOrMaxItemsButton.js +1 -1
- package/lib/components/base/TMSpinner.d.ts +2 -1
- package/lib/components/base/TMSpinner.js +9 -7
- package/lib/components/base/TMTab.js +2 -2
- package/lib/components/base/TMTabControl.d.ts +106 -0
- package/lib/components/base/TMTabControl.js +664 -0
- package/lib/components/base/TMToggleButton.js +2 -2
- package/lib/components/base/TMToolbarCard.js +3 -3
- package/lib/components/base/TMTooltip.d.ts +2 -1
- package/lib/components/base/TMTooltip.js +24 -8
- package/lib/components/base/TMTreeView.d.ts +13 -7
- package/lib/components/base/TMTreeView.js +143 -70
- package/lib/components/base/TMWaitPanel.js +3 -3
- package/lib/components/base/waitPanel/TMWaitPanelConfirm.d.ts +12 -0
- package/lib/components/base/waitPanel/TMWaitPanelConfirm.js +185 -0
- package/lib/components/base/waitPanel/TMWaitPanelManager.d.ts +169 -0
- package/lib/components/base/waitPanel/TMWaitPanelManager.js +320 -0
- package/lib/components/base/waitPanel/TMWaitPanelView.d.ts +53 -0
- package/lib/components/base/waitPanel/TMWaitPanelView.js +274 -0
- package/lib/components/base/waitPanel/index.d.ts +1 -0
- package/lib/components/base/waitPanel/index.js +1 -0
- package/lib/components/choosers/TMCultureIDPicker.js +2 -2
- package/lib/components/choosers/TMDataListItemChooser.js +1 -1
- package/lib/components/choosers/TMDataListItemPicker.js +2 -2
- package/lib/components/choosers/TMDcmtTypeChooser.js +5 -4
- package/lib/components/choosers/TMDiskChooser.js +1 -1
- package/lib/components/choosers/TMDistinctValues.d.ts +9 -7
- package/lib/components/choosers/TMDistinctValues.js +157 -141
- package/lib/components/choosers/TMDynDataListItemChooser.js +1 -1
- package/lib/components/choosers/TMImageIDChooser.js +1 -1
- package/lib/components/choosers/TMMetadataChooser.js +3 -3
- package/lib/components/choosers/TMPathChooser.js +17 -34
- package/lib/components/choosers/TMQuickSearchInfo.d.ts +13 -0
- package/lib/components/choosers/TMQuickSearchInfo.js +279 -0
- package/lib/components/choosers/TMQuickSearchSettingsForm.d.ts +16 -0
- package/lib/components/choosers/TMQuickSearchSettingsForm.js +94 -0
- package/lib/components/choosers/TMRelationChooser.js +1 -1
- package/lib/components/choosers/TMSelectedValuesSummary.d.ts +13 -0
- package/lib/components/choosers/TMSelectedValuesSummary.js +89 -0
- package/lib/components/choosers/TMUserChooser.js +1 -1
- package/lib/components/editors/TMCheckBox.js +1 -1
- package/lib/components/editors/TMDateBox.d.ts +16 -1
- package/lib/components/editors/TMDateBox.js +90 -22
- package/lib/components/editors/TMDropDown.d.ts +3 -0
- package/lib/components/editors/TMDropDown.js +197 -5
- package/lib/components/editors/TMEditorStyled.d.ts +21 -43
- package/lib/components/editors/TMFormulaEditor.js +1 -1
- package/lib/components/editors/TMHtmlContentDisplay.js +1 -1
- package/lib/components/editors/TMLocalizedTextBox.js +1 -1
- package/lib/components/editors/TMMetadataEditor.d.ts +5 -1
- package/lib/components/editors/TMMetadataEditor.js +27 -23
- package/lib/components/editors/TMMetadataValues.js +6 -6
- package/lib/components/editors/TMRadioButton.js +2 -2
- package/lib/components/editors/TMSummary.js +3 -3
- package/lib/components/editors/TMTextArea.d.ts +1 -0
- package/lib/components/editors/TMTextArea.js +25 -17
- package/lib/components/editors/TMTextBox.d.ts +2 -0
- package/lib/components/editors/TMTextBox.js +32 -21
- package/lib/components/editors/TMTextExpression.js +1 -1
- package/lib/components/features/archive/TMArchive.js +24 -5
- package/lib/components/features/assistant/TMHelpOnLineChat.d.ts +29 -0
- package/lib/components/features/assistant/TMHelpOnLineChat.js +1384 -0
- package/lib/components/features/assistant/TMToppyDraggableHelpCenter.js +4 -4
- package/lib/components/features/assistant/TMToppySpeechBubble.js +1 -1
- package/lib/components/features/assistant/dataset/Designer-Suggested-Questions.json +102 -0
- package/lib/components/features/assistant/dataset/Login-Suggested-Questions.json +32 -0
- package/lib/components/features/assistant/dataset/Surfer-Suggested-Questions.json +102 -0
- package/lib/components/features/documents/TMBatchUpdateForm.js +22 -9
- package/lib/components/features/documents/TMCopyToFolderForm.js +50 -42
- package/lib/components/features/documents/TMDcmtBlog.d.ts +3 -0
- package/lib/components/features/documents/TMDcmtBlog.js +4 -4
- package/lib/components/features/documents/TMDcmtForm.d.ts +7 -0
- package/lib/components/features/documents/TMDcmtForm.js +281 -113
- package/lib/components/features/documents/TMDcmtFormActionButtons.d.ts +11 -0
- package/lib/components/features/documents/TMDcmtFormActionButtons.js +79 -9
- package/lib/components/features/documents/TMDcmtIcon.d.ts +1 -3
- package/lib/components/features/documents/TMDcmtIcon.js +8 -8
- package/lib/components/features/documents/TMDcmtPreview.d.ts +7 -5
- package/lib/components/features/documents/TMDcmtPreview.js +16 -10
- package/lib/components/features/documents/TMDcmtTasks.js +2 -9
- package/lib/components/features/documents/TMDownloadRelationViewerSection.js +1 -1
- package/lib/components/features/documents/TMFileUploader.js +7 -7
- package/lib/components/features/documents/TMMasterDetailDcmts.d.ts +2 -0
- package/lib/components/features/documents/TMMasterDetailDcmts.js +95 -108
- package/lib/components/features/documents/TMMasterInfoFields.d.ts +20 -0
- package/lib/components/features/documents/TMMasterInfoFields.js +185 -0
- package/lib/components/features/documents/TMMergeToPdfForm.d.ts +1 -2
- package/lib/components/features/documents/TMMergeToPdfForm.js +83 -56
- package/lib/components/features/documents/TMMultiMasterDetailDcmtsForm.d.ts +46 -0
- package/lib/components/features/documents/TMMultiMasterDetailDcmtsForm.js +320 -0
- package/lib/components/features/documents/TMMultiMasterDetailDcmtsUtils.d.ts +370 -0
- package/lib/components/features/documents/TMMultiMasterDetailDcmtsUtils.js +283 -0
- package/lib/components/features/documents/TMRelationViewer.d.ts +29 -9
- package/lib/components/features/documents/TMRelationViewer.js +310 -208
- package/lib/components/features/documents/copyAndMergeDcmtsShared.d.ts +1 -1
- package/lib/components/features/documents/relationTreeState.d.ts +32 -0
- package/lib/components/features/documents/relationTreeState.js +89 -0
- package/lib/components/features/search/TMMetadataOutputForm.js +1 -1
- package/lib/components/features/search/TMMetadataSorterForm.js +1 -1
- package/lib/components/features/search/TMSavedQuerySelector.js +2 -2
- package/lib/components/features/search/TMSearch.d.ts +1 -1
- package/lib/components/features/search/TMSearch.js +172 -34
- package/lib/components/features/search/TMSearchQueryEditor.js +7 -5
- package/lib/components/features/search/TMSearchQueryPanel.d.ts +14 -4
- package/lib/components/features/search/TMSearchQueryPanel.js +153 -62
- package/lib/components/features/search/TMSearchResult.d.ts +21 -0
- package/lib/components/features/search/TMSearchResult.js +461 -152
- package/lib/components/features/search/TMSignatureInfoContent.js +1 -1
- package/lib/components/features/search/TMTreeSelector.js +130 -83
- package/lib/components/features/search/TMViewHistoryDcmt.js +14 -25
- package/lib/components/features/tasks/TMTaskForm.js +1 -1
- package/lib/components/features/tasks/TMTaskFormUtils.js +3 -3
- package/lib/components/features/tasks/TMTasksAgenda.js +1 -1
- package/lib/components/features/tasks/TMTasksCalendar.js +1 -1
- package/lib/components/features/tasks/TMTasksHeader.js +1 -1
- package/lib/components/features/tasks/TMTasksUtilsView.js +1 -1
- package/lib/components/features/tasks/TMTasksView.js +97 -102
- package/lib/components/features/wg/TMWGsCopyMoveForm.js +92 -92
- package/lib/components/features/workflow/TMWorkflowPopup.d.ts +10 -0
- package/lib/components/features/workflow/TMWorkflowPopup.js +9 -5
- package/lib/components/features/workflow/diagram/ConnectionComponent.js +3 -3
- package/lib/components/features/workflow/diagram/DiagramItemComponent.js +3 -3
- package/lib/components/features/workflow/diagram/DiagramItemForm.js +1 -1
- package/lib/components/features/workflow/diagram/DiagramItemSvgContent.js +1 -1
- package/lib/components/features/workflow/diagram/RecipientList.js +1 -1
- package/lib/components/features/workflow/diagram/WFDiagram.js +4 -4
- package/lib/components/features/workflow/diagram/WorkitemRecipientsEditor.d.ts +3 -1
- package/lib/components/forms/Login/ChangePasswordInputs.d.ts +3 -1
- package/lib/components/forms/Login/Menu.js +1 -1
- package/lib/components/forms/Login/OTPReader.js +1 -1
- package/lib/components/forms/Login/PasswordStrengthChecker.js +1 -1
- package/lib/components/forms/Login/RapidAccessLogin.js +2 -2
- package/lib/components/forms/Login/RecoverPasswordFlow.js +2 -2
- package/lib/components/forms/Login/SelectBox.js +1 -1
- package/lib/components/forms/Login/StepIndicator.js +1 -1
- package/lib/components/forms/Login/TMLoginForm.js +7 -7
- package/lib/components/forms/Login/TextBox.js +1 -1
- package/lib/components/forms/TMApplyForm.js +3 -3
- package/lib/components/forms/TMChooserForm.js +1 -1
- package/lib/components/forms/TMResultDialog.js +1 -1
- package/lib/components/forms/TMSaveForm.js +3 -3
- package/lib/components/grids/TMBlogAttachments.js +14 -3
- package/lib/components/grids/TMBlogHeader.js +5 -1
- package/lib/components/grids/TMBlogsPost.d.ts +2 -0
- package/lib/components/grids/TMBlogsPost.js +122 -99
- package/lib/components/grids/TMBlogsPostUtils.d.ts +1 -0
- package/lib/components/grids/TMBlogsPostUtils.js +15 -4
- package/lib/components/grids/TMRecentsManager.js +4 -4
- package/lib/components/grids/TMValidationItemsList.js +1 -1
- package/lib/components/index.d.ts +6 -0
- package/lib/components/index.js +5 -0
- package/lib/components/layout/panelManager/TMPanelManagerContainer.d.ts +1 -0
- package/lib/components/layout/panelManager/TMPanelManagerContainer.js +25 -15
- package/lib/components/layout/panelManager/TMPanelManagerContext.js +68 -93
- package/lib/components/layout/panelManager/TMPanelManagerToolbar.d.ts +4 -5
- package/lib/components/layout/panelManager/TMPanelManagerToolbar.js +1 -1
- package/lib/components/layout/panelManager/TMPanelWrapper.js +3 -3
- package/lib/components/layout/panelManager/types.d.ts +3 -0
- package/lib/components/layout/panelManager/utils.js +13 -11
- package/lib/components/pages/TMPage.js +30 -32
- package/lib/components/query/TMQueryCountButton.js +1 -1
- package/lib/components/query/TMQueryEditor.d.ts +17 -10
- package/lib/components/query/TMQueryEditor.js +9 -8
- package/lib/components/sidebar/TMCommandsPanel.d.ts +4 -4
- package/lib/components/sidebar/TMCommandsPanel.js +1 -1
- package/lib/components/sidebar/TMHeader.d.ts +1 -0
- package/lib/components/sidebar/TMHeader.js +37 -27
- package/lib/components/sidebar/TMSidebar.js +1 -1
- package/lib/components/sidebar/TMSidebarItem.js +1 -1
- package/lib/components/viewers/TMMidViewer.js +6 -3
- package/lib/components/viewers/TMTidViewer.js +89 -28
- package/lib/components/wizard/TMStepIndicator.js +3 -3
- package/lib/css/tm-sdkui.css +1 -1
- package/lib/devextreme-license.d.ts +1 -0
- package/lib/devextreme-license.js +3 -0
- package/lib/helper/Enum_Localizator.d.ts +4 -4
- package/lib/helper/Enum_Localizator.js +1 -0
- package/lib/helper/Globalization.d.ts +1 -1
- package/lib/helper/SDKUI_Globals.d.ts +110 -0
- package/lib/helper/SDKUI_Globals.js +151 -0
- package/lib/helper/SDKUI_Localizator.d.ts +756 -677
- package/lib/helper/SDKUI_Localizator.js +790 -0
- package/lib/helper/TMAppUpdatedModal.d.ts +2 -0
- package/lib/helper/TMAppUpdatedModal.js +134 -0
- package/lib/helper/TMIcons.d.ts +1 -0
- package/lib/helper/TMIcons.js +4 -3
- package/lib/helper/TMPdfViewer.js +1 -1
- package/lib/helper/TMToppyMessage.js +1 -1
- package/lib/helper/TMUtils.d.ts +51 -4
- package/lib/helper/TMUtils.js +273 -12
- package/lib/helper/ZipManager.d.ts +1 -1
- package/lib/helper/ZipManager.js +2 -1
- package/lib/helper/checkinCheckoutManager.d.ts +1 -1
- package/lib/helper/checkinCheckoutManager.js +1 -1
- package/lib/helper/dataGridSearchHelper.d.ts +28 -0
- package/lib/helper/dataGridSearchHelper.js +51 -0
- package/lib/helper/dcmtsHelper.d.ts +22 -0
- package/lib/helper/dcmtsHelper.js +60 -1
- package/lib/helper/helpers.d.ts +24 -2
- package/lib/helper/helpers.js +59 -3
- package/lib/helper/index.d.ts +2 -0
- package/lib/helper/index.js +2 -0
- package/lib/helper/queryHelper.d.ts +6 -1
- package/lib/helper/queryHelper.js +8 -3
- package/lib/hooks/tmDistinctValuesGridHelper.d.ts +16 -0
- package/lib/hooks/tmDistinctValuesGridHelper.js +31 -0
- package/lib/hooks/useArchiveListForm.d.ts +39 -0
- package/lib/hooks/useArchiveListForm.js +46 -0
- package/lib/hooks/useCaseFlowApprove.d.ts +56 -0
- package/lib/hooks/useCaseFlowApprove.js +157 -0
- package/lib/hooks/useCheckInOutOperations.d.ts +0 -6
- package/lib/hooks/useCheckInOutOperations.js +14 -34
- package/lib/hooks/useDataUserIdItem.d.ts +1 -0
- package/lib/hooks/useDataUserIdItem.js +1 -0
- package/lib/hooks/useDcmtOperations.d.ts +3 -12
- package/lib/hooks/useDcmtOperations.js +187 -179
- package/lib/hooks/useDocumentOperations.d.ts +5 -0
- package/lib/hooks/useDocumentOperations.js +64 -33
- package/lib/hooks/useInputDialog.js +1 -1
- package/lib/hooks/useMultiMasterDetailDcmts.d.ts +98 -0
- package/lib/hooks/useMultiMasterDetailDcmts.js +758 -0
- package/lib/hooks/usePreventFileDrop.js +9 -0
- package/lib/hooks/useQueryParametersDialog.js +1 -1
- package/lib/hooks/useRelatedDocuments.d.ts +1 -0
- package/lib/hooks/useRelatedDocuments.js +22 -27
- package/lib/hooks/useShowDossiersV5.d.ts +12 -0
- package/lib/hooks/useShowDossiersV5.js +37 -0
- package/lib/hooks/useTMDistinctValuesMetadataDisplay.d.ts +18 -0
- package/lib/hooks/useTMDistinctValuesMetadataDisplay.js +103 -0
- package/lib/hooks/useTMDistinctValuesQuickSearch.d.ts +49 -0
- package/lib/hooks/useTMDistinctValuesQuickSearch.js +307 -0
- package/lib/hooks/useTMDistinctValuesSelection.d.ts +42 -0
- package/lib/hooks/useTMDistinctValuesSelection.js +103 -0
- package/lib/hooks/useTMDistinctValuesSource.d.ts +29 -0
- package/lib/hooks/useTMDistinctValuesSource.js +105 -0
- package/lib/hooks/useWorkflowApprove.js +33 -17
- package/lib/index.d.ts +2 -0
- package/lib/index.js +5 -2
- package/lib/services/caseflow/CaseFlowService.d.ts +277 -0
- package/lib/services/caseflow/CaseFlowService.js +761 -0
- package/lib/services/caseflow/CaseFlowTemplateCacheService.d.ts +28 -0
- package/lib/services/caseflow/CaseFlowTemplateCacheService.js +121 -0
- package/lib/services/caseflow/caseFlowNameCache.d.ts +32 -0
- package/lib/services/caseflow/caseFlowNameCache.js +116 -0
- package/lib/services/caseflow/caseFlowWorkItemUtils.d.ts +61 -0
- package/lib/services/caseflow/caseFlowWorkItemUtils.js +113 -0
- package/lib/services/index.d.ts +4 -0
- package/lib/services/index.js +4 -0
- package/lib/services/platform_services.d.ts +4 -4
- package/package.json +16 -13
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { useEffect, useMemo, useRef, useState } from 'react';
|
|
3
3
|
import ReactDOM from 'react-dom';
|
|
4
4
|
import styled from 'styled-components';
|
|
@@ -60,7 +60,7 @@ const TMToppyButton = styled.div.attrs((props) => ({
|
|
|
60
60
|
height: ${(props) => props.$isCollapsed ? '56px' : '110px'};
|
|
61
61
|
max-width: 100%;
|
|
62
62
|
max-height: 100%;
|
|
63
|
-
z-index:
|
|
63
|
+
z-index: 2147483600;
|
|
64
64
|
background-color: ${(props) => props.$isCollapsed ? '#ffffff' : 'transparent'};
|
|
65
65
|
border: ${(props) => props.$isCollapsed ? '3px solid #3b82f6' : 'none'};
|
|
66
66
|
border-radius: ${(props) => props.$isCollapsed ? '50%' : '0'};
|
|
@@ -130,7 +130,7 @@ const DragOverlay = styled.div `
|
|
|
130
130
|
left: 0;
|
|
131
131
|
right: 0;
|
|
132
132
|
bottom: 0;
|
|
133
|
-
z-index:
|
|
133
|
+
z-index: 2147483599;
|
|
134
134
|
cursor: grabbing;
|
|
135
135
|
`;
|
|
136
136
|
const TMToppyDraggableHelpCenter = (props) => {
|
|
@@ -433,7 +433,7 @@ const TMToppyDraggableHelpCenter = (props) => {
|
|
|
433
433
|
window.removeEventListener('resize', handleResize);
|
|
434
434
|
};
|
|
435
435
|
}, []);
|
|
436
|
-
const toppyContent = (_jsxs(_Fragment, { children: [isDragging && _jsx(DragOverlay, {}), _jsxs(TMToppyButton, { ref: toppyButtonRef,
|
|
436
|
+
const toppyContent = (_jsxs(_Fragment, { children: [isDragging && _jsx(DragOverlay, {}), _jsxs(TMToppyButton, { ref: toppyButtonRef, $align: align, $isDragging: isDragging, $isVisible: isVisible, $isCollapsed: isCollapsed, $isMobile: isMobile, $usePortal: usePortal, onContextMenu: (e) => e.preventDefault(), onMouseDown: !isMobile ? handleMouseDown : undefined, onTouchStart: isMobile ? handleTouchStart : undefined, onDoubleClick: !isMobile ? toggleCollapse : undefined, $x: position?.x, $y: position?.y, children: [(content && !isCollapsed) && _jsx(TMToppySpeechBubble, { ref: bubbleRef, align: align, onClose: toggleCollapse, children: content }), (content && isCollapsed) && (_jsx(ExpandButton, { onMouseDown: (e) => {
|
|
437
437
|
isExpandButtonDraggingRef.current = false;
|
|
438
438
|
expandButtonMouseDownPosRef.current = { x: e.clientX, y: e.clientY };
|
|
439
439
|
}, onMouseMove: (e) => {
|
|
@@ -120,7 +120,7 @@ const TMToppySpeechBubble = forwardRef((props, ref) => {
|
|
|
120
120
|
e.stopPropagation();
|
|
121
121
|
onClose?.();
|
|
122
122
|
};
|
|
123
|
-
return (_jsx(BubbleContainer, {
|
|
123
|
+
return (_jsx(BubbleContainer, { $align: align, children: _jsxs(BubbleWrapper, { ref: ref, $hasCloseButton: !!onClose, children: [onClose && (_jsx(CloseButton, { onMouseDown: handleMouseDown, onMouseMove: handleMouseMove, onMouseUp: handleMouseUp, onClick: handleClick, "aria-label": SDKUI_Localizator.Minimize, title: SDKUI_Localizator.Minimize, type: "button", children: _jsx(IconWindowMinimize, {}) })), _jsx(Bubble, { $align: align, children: _jsx(Content, { children: children }) })] }) }));
|
|
124
124
|
});
|
|
125
125
|
TMToppySpeechBubble.displayName = 'TMToppySpeechBubble';
|
|
126
126
|
export default TMToppySpeechBubble;
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
[
|
|
2
|
+
"Come metto un tipo documento dentro un albero?",
|
|
3
|
+
"Perché l'area di appoggio non mostra i file?",
|
|
4
|
+
"Che differenza c'è fra uno a molti e molti a molti?",
|
|
5
|
+
"A che servono i tre pulsanti della pagina certificati?",
|
|
6
|
+
"Che differenza c'è fra firma e marca temporale?",
|
|
7
|
+
"Posso cambiare il percorso di un disco?",
|
|
8
|
+
"Come esporto la configurazione?",
|
|
9
|
+
"Che differenza c'è fra la finestra dell'errore e il contatore rosso?",
|
|
10
|
+
"Ho archiviato un documento ma la ricerca libera non lo trova, perché?",
|
|
11
|
+
"Perché un gruppo non ha l'elenco degli utenti?",
|
|
12
|
+
"Come importo una configurazione?",
|
|
13
|
+
"Perché il cestino è grigio nei server LDAP?",
|
|
14
|
+
"Cosa succede ai documenti se elimino un valore di una lista dati?",
|
|
15
|
+
"Perché il cestino è grigio nei server di marca temporale?",
|
|
16
|
+
"Cosa sono i parametri fra parentesi graffe?",
|
|
17
|
+
"Come impedisco di riusare le vecchie password?",
|
|
18
|
+
"Perché la griglia dei permessi è vuota?",
|
|
19
|
+
"Che differenza c'è fra Direct e LoadBalance?",
|
|
20
|
+
"Quali campi ha un tipo serbatoio?",
|
|
21
|
+
"Come capisco se un utente sta davvero lavorando?",
|
|
22
|
+
"Perché il cestino è grigio nei server di firma?",
|
|
23
|
+
"Come aggiungo un campo a un tipo documento?",
|
|
24
|
+
"Quanti documenti ci sono in archivio?",
|
|
25
|
+
"A che serve «Usa autenticazione sicura» su un utente?",
|
|
26
|
+
"In che formato vengono mostrate le fatture elettroniche?",
|
|
27
|
+
"Come definisco quali documenti entrano in una vista?",
|
|
28
|
+
"Dove trovo la vista approvativa di un workflow?",
|
|
29
|
+
"Perché salva è grigio negli alberi?",
|
|
30
|
+
"Perché salva è grigio nelle aree di appoggio?",
|
|
31
|
+
"Perché la correlazione funziona solo in un verso?",
|
|
32
|
+
"Perché la firma non riesce pur essendo tutto compilato?",
|
|
33
|
+
"Perché non riesco a creare il certificato?",
|
|
34
|
+
"Che differenza c'è fra disco e area di appoggio?",
|
|
35
|
+
"Come esporto un tipo documento con tutto ciò che gli serve?",
|
|
36
|
+
"Che cosa vuol dire «Proseguendo le modifiche apportate andranno perse»?",
|
|
37
|
+
"A che serve la coda della ricerca full text?",
|
|
38
|
+
"Come metto una persona in un gruppo?",
|
|
39
|
+
"Come importo un tipo documento che usa liste dati che qui non esistono?",
|
|
40
|
+
"Dove metto utente e password del dominio?",
|
|
41
|
+
"Perché salva è grigio nelle liste dati?",
|
|
42
|
+
"Posso usare un certificatore diverso dai tre proposti?",
|
|
43
|
+
"Come faccio ripartire il protocollo da 1 ogni anno?",
|
|
44
|
+
"Come faccio scadere le password?",
|
|
45
|
+
"Cosa vuol dire autorizzato e non autorizzato?",
|
|
46
|
+
"Che cos'è un «Login SAP» e a che cosa serve?",
|
|
47
|
+
"Perché salva è grigio nei tipi serbatoio?",
|
|
48
|
+
"Dove trovo l'ID di sessione da dare all'assistenza?",
|
|
49
|
+
"Quali campi ha un server di firma?",
|
|
50
|
+
"Dove finiscono i file di questo tipo documento?",
|
|
51
|
+
"Quanti documenti sono senza file?",
|
|
52
|
+
"Ho creato un utente ma non vede niente, perché?",
|
|
53
|
+
"Perché il link di un documento non funziona?",
|
|
54
|
+
"Perché la stessa vista mostra cose diverse a persone diverse?",
|
|
55
|
+
"Che differenza c'è fra partecipante e responsabile?",
|
|
56
|
+
"Che cos'è un albero e a che cosa serve?",
|
|
57
|
+
"Che cos'è un'area di appoggio e a che cosa serve?",
|
|
58
|
+
"Perché dice «nessuna proprietà da definire»?",
|
|
59
|
+
"A che cosa servono «OTP Provider» e «OTP ID» del certificato?",
|
|
60
|
+
"Come aggiungo spazio all'archivio?",
|
|
61
|
+
"Perché dopo l'importazione i gruppi non vedono nulla?",
|
|
62
|
+
"Perché a volte è «Campo Obbligatorio» con la maiuscola?",
|
|
63
|
+
"Perché questo gruppo non si lascia modificare?",
|
|
64
|
+
"Devo importare tutto il file?",
|
|
65
|
+
"Perché salva è grigio nel server LDAP?",
|
|
66
|
+
"Che cos'è una lista dati e a che cosa serve?",
|
|
67
|
+
"Perché salva è grigio nel server di marca temporale?",
|
|
68
|
+
"Perché il numeratore dà sempre lo stesso numero?",
|
|
69
|
+
"A cosa servono i tre puntini nella cella dei permessi?",
|
|
70
|
+
"Dove si configura il collegamento a SAP?",
|
|
71
|
+
"Che differenza c'è fra serbatoio, disco e area di appoggio?",
|
|
72
|
+
"Quali colonne ha l'elenco delle sessioni?",
|
|
73
|
+
"Dove si configura il servizio che manda il codice OTP?",
|
|
74
|
+
"Che differenza c'è fra chiave primaria e indice univoco?",
|
|
75
|
+
"Perché un utente non riesce più ad accedere?",
|
|
76
|
+
"Come faccio vedere un documento a chi non ha un'utenza?",
|
|
77
|
+
"Perché la linguetta «Metadati» di un tipo documento è obbligatoria?",
|
|
78
|
+
"Perché la modifica al workflow non ha effetto?",
|
|
79
|
+
"Perché non riesco a salvare un albero nuovo?",
|
|
80
|
+
"Quali campi servono per un'area di appoggio?",
|
|
81
|
+
"Come risolvo l'errore sulla seconda query di una correlazione?",
|
|
82
|
+
"Perché salva è grigio nel certificato di firma?",
|
|
83
|
+
"Cosa succede ai documenti se elimino il disco?",
|
|
84
|
+
"Dove cambio il nome del file di esportazione?",
|
|
85
|
+
"Perché il salvataggio riesce ma l'oggetto non funziona?",
|
|
86
|
+
"Che cos'è un gruppo e perché i permessi si danno ai gruppi?",
|
|
87
|
+
"Perché non vedo il pulsante delle opzioni di importazione?",
|
|
88
|
+
"Che cos'è un server LDAP?",
|
|
89
|
+
"Perché la lista nuova non compare da nessuna parte?",
|
|
90
|
+
"Che cos'è un server di marca temporale?",
|
|
91
|
+
"Che cos'è un numeratore e a che cosa serve?",
|
|
92
|
+
"Perché non trovo l'oggetto nella griglia dei permessi?",
|
|
93
|
+
"Posso recuperare un profilo eliminato?",
|
|
94
|
+
"Dove si creano i tipi serbatoio?",
|
|
95
|
+
"Come faccio uscire qualcuno dall'applicazione?",
|
|
96
|
+
"Come provo che un server di firma funzioni?",
|
|
97
|
+
"Che cosa sono le opzioni del tipo documento?",
|
|
98
|
+
"Che cos'è il numero rosso nella scheda?",
|
|
99
|
+
"In che lingua vede il documento chi riceve il link?",
|
|
100
|
+
"Perché una vista ha meno opzioni di un tipo documento?",
|
|
101
|
+
"Che differenza c'è fra errore e avviso?"
|
|
102
|
+
]
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
[
|
|
2
|
+
"Che cos'è la schermata di accesso?",
|
|
3
|
+
"Quanti passaggi servono per entrare e come torno indietro?",
|
|
4
|
+
"Che cos'è il punto di accesso?",
|
|
5
|
+
"Come verifico che il punto di accesso risponda?",
|
|
6
|
+
"Che cos'è l'archivio documentale che mi viene chiesto?",
|
|
7
|
+
"Come si sceglie da un elenco a tendina o a finestra?",
|
|
8
|
+
"Quali sono le cinque modalità di autenticazione?",
|
|
9
|
+
"A che cosa servono i campi nome utente e password?",
|
|
10
|
+
"Che cos'è l'accesso «per conto di»?",
|
|
11
|
+
"Quali campi sono obbligatori per accedere?",
|
|
12
|
+
"Quali controlli ci sono sul cambio e sul recupero della password?",
|
|
13
|
+
"Che cos'è l'autenticazione a più fattori?",
|
|
14
|
+
"Come si compilano le sei caselle del codice?",
|
|
15
|
+
"Quali comandi ho accanto alle caselle del codice?",
|
|
16
|
+
"Come ottengo il codice per posta elettronica o da applicazione?",
|
|
17
|
+
"Quando compaiono «Cambia password» e «Password dimenticata»?",
|
|
18
|
+
"Come si cambia la password dalla schermata di accesso?",
|
|
19
|
+
"Ho dimenticato la password, come la recupero?",
|
|
20
|
+
"Quali requisiti deve avere la nuova password?",
|
|
21
|
+
"Che cosa sono gli accessi rapidi?",
|
|
22
|
+
"Come creo un accesso rapido prima di entrare?",
|
|
23
|
+
"Com'è fatto il pannello degli accessi rapidi?",
|
|
24
|
+
"Come personalizzo nome, icona e colore di un accesso rapido?",
|
|
25
|
+
"Come esporto e importo gli accessi rapidi?",
|
|
26
|
+
"Come cambio la lingua della schermata di accesso?",
|
|
27
|
+
"Quali versioni sono indicate nella schermata?",
|
|
28
|
+
"Che cosa vogliono dire i messaggi della schermata di accesso?",
|
|
29
|
+
"L'accesso non riesce: come capisco il motivo?",
|
|
30
|
+
"Come accedo a TopMedia da telefono?",
|
|
31
|
+
"La password nuova non viene accettata, perché?"
|
|
32
|
+
]
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
[
|
|
2
|
+
"Che cos'è l'Archiviazione?",
|
|
3
|
+
"Che cosa succede facendo clic su un risultato?",
|
|
4
|
+
"Che cosa significa tipo documento?",
|
|
5
|
+
"Che cosa sono i metadati di output?",
|
|
6
|
+
"Che cosa cambia negli elenchi e nelle finestre su Mobile?",
|
|
7
|
+
"Che cos'è la ricerca naturale?",
|
|
8
|
+
"Come effettuo una ricerca?",
|
|
9
|
+
"Come apro la sezione Ricerca?",
|
|
10
|
+
"Dove trovo i tipi documento in archiviazione?",
|
|
11
|
+
"A cosa servono i metadati?",
|
|
12
|
+
"Che cos'è un filtro di ricerca?",
|
|
13
|
+
"Come si apre la ricerca naturale?",
|
|
14
|
+
"In quale sezione di Surfer si cercano i documenti?",
|
|
15
|
+
"Che cos'è la ricerca avanzata?",
|
|
16
|
+
"Posso vedere il contenuto del file che sto archiviando?",
|
|
17
|
+
"A cosa serve il tipo documento?",
|
|
18
|
+
"Quali operatori di ricerca esistono?",
|
|
19
|
+
"Come evito errori di battitura?",
|
|
20
|
+
"Che cos'è la scheda del documento?",
|
|
21
|
+
"Devo convertire il file prima di archiviarlo?",
|
|
22
|
+
"Che cosa sono i metadati?",
|
|
23
|
+
"Che cos'è l'ordinamento del risultato?",
|
|
24
|
+
"Come cerco documenti di un certo periodo?",
|
|
25
|
+
"Come vengono nominati i file copiati?",
|
|
26
|
+
"Come scelgo il tipo documento da archiviare?",
|
|
27
|
+
"Che cos'è la ricerca per metadati?",
|
|
28
|
+
"Come cerco i documenti di oggi?",
|
|
29
|
+
"Che cos'è l'editor delle formule?",
|
|
30
|
+
"Dove metto il file da archiviare?",
|
|
31
|
+
"Che cos'è un documento in Surfer?",
|
|
32
|
+
"Come personalizzo i pannelli della ricerca?",
|
|
33
|
+
"Come si apre il pannello «Impostazioni» e come è fatto?",
|
|
34
|
+
"Come archivio una fattura elettronica?",
|
|
35
|
+
"Cosa vuol dire prendere in carico un documento?",
|
|
36
|
+
"Come aggiungo una colonna al risultato?",
|
|
37
|
+
"Che cosa vedo dopo la ricerca?",
|
|
38
|
+
"Che cosa sono i documenti master e dettaglio?",
|
|
39
|
+
"Come ordino cliccando sulla colonna?",
|
|
40
|
+
"Che cosa sono i metadati di sistema?",
|
|
41
|
+
"Come non reimposto ogni volta i filtri?",
|
|
42
|
+
"Come riconosco il tipo di dato di un metadato?",
|
|
43
|
+
"Perché non posso modificare la ricerca?",
|
|
44
|
+
"Che cos'è una vista e perché è scritta in rosso?",
|
|
45
|
+
"Come unisco due ricerche?",
|
|
46
|
+
"Che cos'è Toppy e in quanti modi compare nella Ricerca?",
|
|
47
|
+
"Come scarico un documento?",
|
|
48
|
+
"A cosa serve il check out?",
|
|
49
|
+
"Come elimino un documento dall'archivio?",
|
|
50
|
+
"Come prendo in carico un documento?",
|
|
51
|
+
"Come esporto i risultati?",
|
|
52
|
+
"Come metto un documento tra i preferiti?",
|
|
53
|
+
"Come aggiorno i risultati?",
|
|
54
|
+
"Dove sono finiti i documenti che avevo trovato?",
|
|
55
|
+
"Come faccio a rivedere le ricerche rapide?",
|
|
56
|
+
"Come scelgo il tipo documento dall'albero?",
|
|
57
|
+
"Come cambio l'albero che si apre all'inizio?",
|
|
58
|
+
"Come pulisco l'elenco delle scorciatoie?",
|
|
59
|
+
"Come filtro l'elenco dei tipi documento?",
|
|
60
|
+
"Perché non posso eliminare una ricerca?",
|
|
61
|
+
"Come faccio partire sempre la stessa ricerca?",
|
|
62
|
+
"Come richiamo una ricerca dalla pagina iniziale?",
|
|
63
|
+
"Come annullo le modifiche ai filtri?",
|
|
64
|
+
"Come aggiungo un campo di ricerca che non c'è?",
|
|
65
|
+
"Come scelgo quali colonne vedere nel risultato?",
|
|
66
|
+
"Come stabilisco la priorità dell'ordinamento?",
|
|
67
|
+
"Come faccio partire subito una ricerca salvata?",
|
|
68
|
+
"Come aggiungo un comando alla barra flottante?",
|
|
69
|
+
"Come leggo il documento senza aprirlo?",
|
|
70
|
+
"Come trovo un documento nei risultati?",
|
|
71
|
+
"Come tolgo una colonna dalla vista?",
|
|
72
|
+
"Come sostituisco il file?",
|
|
73
|
+
"Come firmo un documento?",
|
|
74
|
+
"Come trasformo un documento in pdf?",
|
|
75
|
+
"Come cambio un valore su tanti documenti?",
|
|
76
|
+
"Come trovo il documento principale?",
|
|
77
|
+
"Come collego due documenti?",
|
|
78
|
+
"Come archivio un documento simile?",
|
|
79
|
+
"Come tengo aperta l'anteprima?",
|
|
80
|
+
"Come faccio vedere l'anteprima dei file grandi?",
|
|
81
|
+
"Come copio i file in una cartella?",
|
|
82
|
+
"Come unisco più documenti?",
|
|
83
|
+
"Perché la ricerca full text non lo trova?",
|
|
84
|
+
"Come tolgo un documento dal gruppo di lavoro?",
|
|
85
|
+
"Chi ha preso il documento in passato?",
|
|
86
|
+
"Dove vedo i documenti condivisi?",
|
|
87
|
+
"Come assegno un compito su un documento?",
|
|
88
|
+
"Come scarico gli allegati di una fattura?",
|
|
89
|
+
"Come scarico la lista dei documenti?",
|
|
90
|
+
"Come cambio i dati di un documento?",
|
|
91
|
+
"Come archivio partendo da una ricerca?",
|
|
92
|
+
"Come faccio una ricerca complessa?",
|
|
93
|
+
"Perché il risultato non è quello che mi aspetto?",
|
|
94
|
+
"Come cerco una parola dentro i documenti?",
|
|
95
|
+
"Come chiedo a Toppy di trovare un documento?",
|
|
96
|
+
"Come copio i dati della firma?",
|
|
97
|
+
"Chi ha modificato il documento e quando?",
|
|
98
|
+
"Come risalgo dalla fattura all'ordine?",
|
|
99
|
+
"Come imposto una ricerca per trovare un documento?",
|
|
100
|
+
"Dove si cercano i documenti di un certo tipo?",
|
|
101
|
+
"Come vedo la cronologia dei check out di un documento?"
|
|
102
|
+
]
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { useEffect, useState } from 'react';
|
|
3
3
|
import { AccessLevels, DcmtTypeListCacheService, LayoutModes, MetadataDataDomains, ResultTypes, SDK_Globals, ValidationItem } from '@topconsultnpm/sdk-ts';
|
|
4
4
|
import { searchResultToMetadataValues, getSystemMetadata, calcIsModified, getListMaxItems, SDKUI_Localizator, SDKUI_Globals } from '../../../helper';
|
|
@@ -6,11 +6,10 @@ import { useDcmtOperations } from '../../../hooks/useDcmtOperations';
|
|
|
6
6
|
import { DcmtOperationTypes, FormModes } from '../../../ts';
|
|
7
7
|
import { StyledToolbarCardContainer, StyledFormButtonsContainer } from '../../base/Styled';
|
|
8
8
|
import { useDeviceType, DeviceType } from '../../base/TMDeviceProvider';
|
|
9
|
-
import { TMSplitterLayout } from '../../base/TMLayout';
|
|
10
|
-
import { TMExceptionBoxManager } from '../../base/TMPopUp';
|
|
9
|
+
import TMLayoutContainer, { TMSplitterLayout } from '../../base/TMLayout';
|
|
10
|
+
import { TMExceptionBoxManager, TMMessageBoxManager, ButtonNames } from '../../base/TMPopUp';
|
|
11
11
|
import TMShowAllOrMaxItemsButton from '../../base/TMShowAllOrMaxItemsButton';
|
|
12
12
|
import TMSpinner from '../../base/TMSpinner';
|
|
13
|
-
import { TMLayoutWaitingContainer } from '../../base/TMWaitPanel';
|
|
14
13
|
import TMDistinctValues from '../../choosers/TMDistinctValues';
|
|
15
14
|
import TMFormulaEditor, { FormulaDescriptor, FormulaHelper, FormulaTargets } from '../../editors/TMFormulaEditor';
|
|
16
15
|
import { useMetadataEditableList } from '../../editors/TMMetadataEditor';
|
|
@@ -28,7 +27,7 @@ const TMBatchUpdateForm = ({ inputDcmts, TID, DID, isExpertMode = SDKUI_Globals.
|
|
|
28
27
|
const [showFormulaEditor, setShowFormulaEditor] = useState(false);
|
|
29
28
|
const [focusedMetadataValue, setFocusedMetadataValue] = useState();
|
|
30
29
|
const [addOrRemoveEditableList] = useMetadataEditableList();
|
|
31
|
-
const {
|
|
30
|
+
const { runOperationAsync } = useDcmtOperations();
|
|
32
31
|
const deviceType = useDeviceType();
|
|
33
32
|
useEffect(() => {
|
|
34
33
|
if (!TID)
|
|
@@ -114,10 +113,24 @@ const TMBatchUpdateForm = ({ inputDcmts, TID, DID, isExpertMode = SDKUI_Globals.
|
|
|
114
113
|
const totalItems = metadataValues.filter(o => o.mid && o.mid > 100).length;
|
|
115
114
|
const metadataValuesSource = metadataValues.filter(o => o.mid && o.mid > 100).slice(0, showAll ? metadataValues.filter(o => o.mid && o.mid > 100).length : listMaxItems);
|
|
116
115
|
const metadataValuesSourceOrig = metadataValuesOrig.filter(o => o.mid && o.mid > 100).slice(0, showAll ? metadataValuesOrig.filter(o => o.mid && o.mid > 100).length : listMaxItems);
|
|
116
|
+
/**
|
|
117
|
+
* Chiusura del form: con modifiche pendenti chiede conferma prima di scartarle.
|
|
118
|
+
* Il TMModal è montato con askClosingConfirm, quindi non si auto-nasconde: la chiusura
|
|
119
|
+
* effettiva avviene solo quando onBack smonta il componente.
|
|
120
|
+
*/
|
|
121
|
+
const handleClose = () => {
|
|
122
|
+
if (!isModified) {
|
|
123
|
+
onBack?.();
|
|
124
|
+
return;
|
|
125
|
+
}
|
|
126
|
+
TMMessageBoxManager.show({
|
|
127
|
+
title: SDKUI_Localizator.Cancel, message: SDKUI_Localizator.ConfirmOnCancel, buttons: [ButtonNames.YES, ButtonNames.NO],
|
|
128
|
+
onButtonClick: (e) => { if (e === ButtonNames.YES)
|
|
129
|
+
onBack?.(); }
|
|
130
|
+
});
|
|
131
|
+
};
|
|
117
132
|
const renderContent = () => {
|
|
118
|
-
return (_jsx(
|
|
119
|
-
// onClose={deviceType !== DeviceType.MOBILE ? onBack : undefined}
|
|
120
|
-
allowMaximize: !isModal, showHeader: !isModal, children: _jsxs(StyledToolbarCardContainer, { children: [_jsx(TMMetadataValues, { TID: TID, isExpertMode: isExpertMode, showCheckBoxes: ShowCheckBoxesMode.Always, showNullValueCheckBoxes: true, metadataValues: metadataValuesSource, metadataValuesOrig: metadataValuesSourceOrig, validationItems: validationItems, isOpenDistinctValues: showDistinctValuesPanel, selectedMID: focusedMetadataValue?.mid, onFocusedItemChanged: (item) => { setFocusedMetadataValue(item); }, onValueChanged: (newItems) => {
|
|
133
|
+
return (_jsx(TMLayoutContainer, { children: _jsxs(TMSplitterLayout, { direction: 'horizontal', overflow: 'visible', separatorSize: Gutters.getGutters(), separatorColor: 'transparent', separatorActiveColor: 'transparent', showSeparator: showFormulaEditor, start: showFormulaEditor ? ['50%', '50%'] : ['100%', '0%'], min: ['0', '0'], children: [_jsx(TMPanel, { title: isModal ? 'Modifica i metadati' : `${SDKUI_Localizator.BatchUpdate} (${inputDcmts.length} documenti selezionati)`, onBack: deviceType === DeviceType.MOBILE ? handleClose : undefined, allowMaximize: !isModal, showHeader: !isModal, children: _jsxs(StyledToolbarCardContainer, { children: [_jsx(TMMetadataValues, { TID: TID, isExpertMode: isExpertMode, showCheckBoxes: ShowCheckBoxesMode.Always, showNullValueCheckBoxes: true, metadataValues: metadataValuesSource, metadataValuesOrig: metadataValuesSourceOrig, validationItems: validationItems, isOpenDistinctValues: showDistinctValuesPanel, selectedMID: focusedMetadataValue?.mid, onFocusedItemChanged: (item) => { setFocusedMetadataValue(item); }, onValueChanged: (newItems) => {
|
|
121
134
|
setMetadataValues((prevItems) => prevItems.map((item) => {
|
|
122
135
|
const newItem = newItems.find((newItem) => newItem.tid === item.tid && newItem.mid === item.mid);
|
|
123
136
|
return newItem ? { ...item, ...newItem } : item;
|
|
@@ -153,7 +166,7 @@ const TMBatchUpdateForm = ({ inputDcmts, TID, DID, isExpertMode = SDKUI_Globals.
|
|
|
153
166
|
} })] }) })] }) }));
|
|
154
167
|
};
|
|
155
168
|
return (_jsx(_Fragment, { children: (isModal && onBack)
|
|
156
|
-
? _jsx(TMModal, { title: titleModal, onClose:
|
|
169
|
+
? _jsx(TMModal, { title: titleModal, onClose: handleClose, width: widthModal ?? '100%', height: heightModal ?? '100%', hidePopup: false, askClosingConfirm: true, children: _jsx("div", { style: { width: "100%", height: "100%", display: 'block', padding: "4px" }, children: renderContent() }) })
|
|
157
170
|
: renderContent() }));
|
|
158
171
|
};
|
|
159
172
|
export default TMBatchUpdateForm;
|
|
@@ -13,8 +13,8 @@ import TMOrderRetrieveFormats from '../../choosers/TMOrderRetrieveFormats';
|
|
|
13
13
|
import TMButton from '../../base/TMButton';
|
|
14
14
|
import { ButtonNames, TMMessageBoxManager } from '../../base/TMPopUp';
|
|
15
15
|
import { useDcmtOperations } from '../../../hooks/useDcmtOperations';
|
|
16
|
-
import { TMLayoutWaitingContainer } from '../../base/TMWaitPanel';
|
|
17
16
|
import { TMSplitterLayout } from '../../base/TMLayout';
|
|
17
|
+
import TMWaitPanelManager from '../../base/waitPanel/TMWaitPanelManager';
|
|
18
18
|
import TMCheckBox from '../../editors/TMCheckBox';
|
|
19
19
|
import ShowAlert from '../../base/TMAlert';
|
|
20
20
|
import { TMColors } from '../../../utils/theme';
|
|
@@ -26,17 +26,13 @@ import { buildInitialDownloadSettings, fileExists, generateTargetFileName, gener
|
|
|
26
26
|
* e TMDownloadRelationViewerSection.
|
|
27
27
|
*/
|
|
28
28
|
const TMCopyToFolderForm = ({ mode, selectedDcmtInfos, onClose, showTMRelationViewer, allTasks, getAllTasks, deleteTaskByIdsCallback, addTaskCallback, editTaskCallback, handleNavigateToWGs, handleNavigateToDossiers }) => {
|
|
29
|
-
|
|
29
|
+
// Il wait panel del download lo apre e lo aggiorna l'hook: qui serve solo la funzione.
|
|
30
|
+
const { downloadDcmtsAsync } = useDcmtOperations();
|
|
30
31
|
// Get the current device type (e.g., mobile, tablet, desktop) using a custom hook.
|
|
31
32
|
const deviceType = useDeviceType();
|
|
32
33
|
// ---- Stato dei settings ----
|
|
33
34
|
const [settings, setSettings] = useState(() => buildInitialDownloadSettings(SDKUI_Globals.userSettings.documentDownloadSettings, SDKUI_Globals.userSettings.searchSettings.invoiceRetrieveFormat, SDKUI_Globals.userSettings.searchSettings.orderRetrieveFormat));
|
|
34
35
|
const [selectedItemsRelationViewer, setSelectedItemsRelationViewer] = useState([]);
|
|
35
|
-
// ---- Stato per la creazione ZIP (spinner separato) ----
|
|
36
|
-
const [isCreatingZip, setIsCreatingZip] = useState(false);
|
|
37
|
-
const [zipProgressText, setZipProgressText] = useState('');
|
|
38
|
-
const [zipProgressValue, setZipProgressValue] = useState(0);
|
|
39
|
-
const [zipProgressMax, setZipProgressMax] = useState(0);
|
|
40
36
|
const [hasSavedLayout, setHasSavedLayout] = useState(() => {
|
|
41
37
|
const saved = SDKUI_Globals.userSettings.documentDownloadSettings;
|
|
42
38
|
const defaults = new DocumentDownloadSettings();
|
|
@@ -114,7 +110,7 @@ const TMCopyToFolderForm = ({ mode, selectedDcmtInfos, onClose, showTMRelationVi
|
|
|
114
110
|
// ---- Scrittura file nel filesystem locale ----
|
|
115
111
|
const writeFileToFolder = async (file, dcmtInfo) => {
|
|
116
112
|
try {
|
|
117
|
-
|
|
113
|
+
const baseFileName = await generateTargetFileName(file, dcmtInfo, {
|
|
118
114
|
fileNamingMode: settings.fileNamingMode,
|
|
119
115
|
separatorChar: settings.separatorChar,
|
|
120
116
|
});
|
|
@@ -123,7 +119,7 @@ const TMCopyToFolderForm = ({ mode, selectedDcmtInfos, onClose, showTMRelationVi
|
|
|
123
119
|
const url = URL.createObjectURL(file);
|
|
124
120
|
const a = document.createElement('a');
|
|
125
121
|
a.href = url;
|
|
126
|
-
a.download =
|
|
122
|
+
a.download = baseFileName;
|
|
127
123
|
document.body.appendChild(a);
|
|
128
124
|
a.target = '_blank';
|
|
129
125
|
a.rel = 'noreferrer';
|
|
@@ -132,20 +128,22 @@ const TMCopyToFolderForm = ({ mode, selectedDcmtInfos, onClose, showTMRelationVi
|
|
|
132
128
|
URL.revokeObjectURL(url);
|
|
133
129
|
return;
|
|
134
130
|
}
|
|
135
|
-
const
|
|
131
|
+
const folderHandle = folderHandleRef.current;
|
|
132
|
+
let targetFileName = baseFileName;
|
|
133
|
+
const exists = await fileExists(folderHandle, targetFileName);
|
|
136
134
|
if (exists) {
|
|
137
135
|
switch (settings.fileExistsMode) {
|
|
138
136
|
case 'skip':
|
|
139
137
|
return;
|
|
140
138
|
case 'rename':
|
|
141
|
-
targetFileName = await generateUniqueFileName(
|
|
139
|
+
targetFileName = await generateUniqueFileName(folderHandle, targetFileName);
|
|
142
140
|
break;
|
|
143
141
|
case 'overwrite':
|
|
144
142
|
default:
|
|
145
143
|
break;
|
|
146
144
|
}
|
|
147
145
|
}
|
|
148
|
-
const fileHandle = await
|
|
146
|
+
const fileHandle = await folderHandle.getFileHandle(targetFileName, { create: true });
|
|
149
147
|
const writable = await fileHandle.createWritable();
|
|
150
148
|
await writable.write(file);
|
|
151
149
|
await writable.close();
|
|
@@ -179,7 +177,6 @@ const TMCopyToFolderForm = ({ mode, selectedDcmtInfos, onClose, showTMRelationVi
|
|
|
179
177
|
await downloadDcmtsAsync({ inputDcmts: dcmtInfosToDownload, downloadType: DownloadTypes.Dcmt, downloadMode: 'download', onFileDownloaded: writeFileToFolder, skipConfirmation: true, retrieveOptions, useCache: false });
|
|
180
178
|
}
|
|
181
179
|
else if (settings.exportMode === 'zip') {
|
|
182
|
-
const zipEntries = [];
|
|
183
180
|
const fileNameCounts = new Map();
|
|
184
181
|
const getUniqueZipFileName = (fileName) => {
|
|
185
182
|
const lowerName = fileName.toLowerCase();
|
|
@@ -192,30 +189,41 @@ const TMCopyToFolderForm = ({ mode, selectedDcmtInfos, onClose, showTMRelationVi
|
|
|
192
189
|
const ext = dotIndex > 0 ? fileName.substring(dotIndex) : '';
|
|
193
190
|
return `${baseName} (${count})${ext}`;
|
|
194
191
|
};
|
|
192
|
+
// I file scaricati si raccolgono in mappa (nome incluso) e l'archivio viene costruito
|
|
193
|
+
// dopo, nell'ordine di selezione, così i suffissi di deduplica restano coerenti.
|
|
194
|
+
const downloadedEntries = new Map();
|
|
195
195
|
const collectFileForZip = async (file, dcmtInfo) => {
|
|
196
196
|
const targetFileName = await generateTargetFileName(file, dcmtInfo, {
|
|
197
197
|
fileNamingMode: settings.fileNamingMode,
|
|
198
198
|
separatorChar: settings.separatorChar,
|
|
199
199
|
});
|
|
200
|
-
|
|
200
|
+
downloadedEntries.set(`${dcmtInfo.TID}_${dcmtInfo.DID}`, { file, targetFileName });
|
|
201
201
|
};
|
|
202
202
|
await downloadDcmtsAsync({ inputDcmts: dcmtInfosToDownload, downloadType: DownloadTypes.Dcmt, downloadMode: 'download', onFileDownloaded: collectFileForZip, skipConfirmation: true, retrieveOptions, useCache: false });
|
|
203
|
+
const zipEntries = [];
|
|
204
|
+
for (const dcmtInfo of dcmtInfosToDownload) {
|
|
205
|
+
const entry = downloadedEntries.get(`${dcmtInfo.TID}_${dcmtInfo.DID}`);
|
|
206
|
+
if (!entry)
|
|
207
|
+
continue;
|
|
208
|
+
zipEntries.push({ filename: getUniqueZipFileName(entry.targetFileName), data: entry.file });
|
|
209
|
+
}
|
|
203
210
|
if (zipEntries.length > 0) {
|
|
204
211
|
const zipFileName = settings.zipFileName.trim().toLowerCase().endsWith('.zip')
|
|
205
212
|
? settings.zipFileName.trim()
|
|
206
213
|
: settings.zipFileName.trim() + '.zip';
|
|
207
|
-
// Crea il blob ZIP
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
214
|
+
// Crea il blob ZIP: la compressione non e' interrompibile, quindi niente Interrompi.
|
|
215
|
+
const zipPanel = TMWaitPanelManager.show({
|
|
216
|
+
title: SDKUI_Localizator.CompressToZipFile,
|
|
217
|
+
subtitle: SDKUI_Localizator.CompressToZipFile,
|
|
218
|
+
max: zipEntries.length,
|
|
219
|
+
showCounters: false,
|
|
220
|
+
});
|
|
212
221
|
try {
|
|
213
222
|
const zipBlob = await ZipManager.createZip(zipEntries, {
|
|
214
223
|
compressionLevel: 6,
|
|
215
224
|
password: settings.zipPassword.trim() || undefined,
|
|
216
225
|
onProgress: (current, total, filename) => {
|
|
217
|
-
|
|
218
|
-
setZipProgressText(`${SDKUI_Localizator.CompressToZipFile}: ${filename}`);
|
|
226
|
+
zipPanel.update({ value: current, subtitle: `${SDKUI_Localizator.CompressToZipFile}: ${filename}` });
|
|
219
227
|
},
|
|
220
228
|
});
|
|
221
229
|
// Se c'è un handle della cartella: salva direttamente nella cartella selezionata
|
|
@@ -247,7 +255,7 @@ const TMCopyToFolderForm = ({ mode, selectedDcmtInfos, onClose, showTMRelationVi
|
|
|
247
255
|
ShowAlert({ message: SDKUI_Localizator.Error, mode: 'error', duration: 5000, title: SDKUI_Localizator.CompressToZipFile });
|
|
248
256
|
}
|
|
249
257
|
finally {
|
|
250
|
-
|
|
258
|
+
zipPanel.close();
|
|
251
259
|
}
|
|
252
260
|
}
|
|
253
261
|
}
|
|
@@ -377,25 +385,25 @@ const TMCopyToFolderForm = ({ mode, selectedDcmtInfos, onClose, showTMRelationVi
|
|
|
377
385
|
{ value: 'skip', display: SDKUI_Localizator.DoNotCopy },
|
|
378
386
|
{ value: 'rename', display: SDKUI_Localizator.CopyButRename },
|
|
379
387
|
], value: isUsingDefaultDownloads ? 'rename' : settings.fileExistsMode, direction: "row", disabled: isUsingDefaultDownloads, onValueChanged: (value) => updateSettings('fileExistsMode', value), fontSize: '0.9rem' }) }), isUsingDefaultDownloads && (_jsx("span", { style: { fontSize: '0.8rem', color: '#888', fontStyle: 'italic', marginTop: '4px', display: 'block' }, children: SDKUI_Localizator.BrowserAutoRenamesDuplicateFilesInDownloadsFolder }))] }) }), fileNamingRow, formatSelectorsRow] })), settings.exportMode === 'zip' && (_jsxs("div", { style: { display: 'flex', flexWrap: 'wrap', columnGap: '10px' }, children: [_jsxs("div", { style: { display: 'flex', flexWrap: 'wrap', columnGap: '10px', width: '100%' }, children: [folderSelector, _jsx("div", { style: { flex: '1 1 280px', minWidth: '280px' }, children: _jsx(TMTextBox, { label: SDKUI_Localizator.ZipFileName, value: settings.zipFileName, validationItems: zipValidationItems, autoComplete: "one-time-code", onValueChanged: (e) => updateSettings('zipFileName', e.target.value) }) }), _jsx("div", { style: { flex: '1 1 280px', minWidth: '280px' }, children: _jsx(TMTextBox, { label: SDKUI_Localizator.ProtectWithPasswordOptional, value: settings.zipPassword, type: "password", autoComplete: "one-time-code", onValueChanged: (e) => updateSettings('zipPassword', e.target.value) }) })] }), fileNamingRow, formatSelectorsRow] }))] })] }));
|
|
380
|
-
return (_jsx(
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
388
|
+
return (_jsx(TMModal, { width: calcResponsiveSizes(deviceType, showTMRelationViewer ? '95%' : '950px', '95%', '95%'), height: showTMRelationViewer ? '95%' : 'auto', title: getTitle(), onClose: onClose, showCloseButton: true, children: _jsxs("div", { onContextMenu: (e) => e.preventDefault(), style: { display: 'flex', flexDirection: 'column', padding: '4px 4px 16px 4px', width: '100%', height: '100%', boxSizing: 'border-box', overflow: 'hidden' }, children: [showTMRelationViewer ? (_jsx("div", { style: { flex: 1, minHeight: 0, display: 'flex', flexDirection: 'column' }, children: _jsxs(TMSplitterLayout, { direction: 'vertical', showSeparator: true, separatorSize: 8, separatorColor: 'transparent', separatorActiveColor: 'transparent', overflow: 'hidden', min: ["50", "50"], start: ['65%', '35%'], children: [_jsx(TMDownloadRelationViewerSection, { selectedDcmtInfos: selectedDcmtInfos, onSelectionChanged: setSelectedItemsRelationViewer, allTasks: allTasks, getAllTasks: getAllTasks, deleteTaskByIdsCallback: deleteTaskByIdsCallback, addTaskCallback: addTaskCallback, editTaskCallback: editTaskCallback, handleNavigateToWGs: handleNavigateToWGs, handleNavigateToDossiers: handleNavigateToDossiers }), configSection] }, "TMCopyToFolder-relation-config") })) : (configSection), _jsx("div", { style: { display: 'flex', justifyContent: 'center', alignItems: 'center', flexShrink: 0, marginTop: '12px' }, children: _jsxs("button", { disabled: !isFormValid() || (showTMRelationViewer && selectedItemsRelationViewer.filter(i => i.isDcmt).length === 0), onClick: run, style: {
|
|
389
|
+
display: 'flex',
|
|
390
|
+
alignItems: 'center',
|
|
391
|
+
justifyContent: 'center',
|
|
392
|
+
gap: '6px',
|
|
393
|
+
padding: '8px 20px',
|
|
394
|
+
fontSize: '0.95rem',
|
|
395
|
+
fontWeight: 600,
|
|
396
|
+
color: '#fff',
|
|
397
|
+
background: (!isFormValid() || (showTMRelationViewer && selectedItemsRelationViewer.filter(i => i.isDcmt).length === 0))
|
|
398
|
+
? '#b0b0b0'
|
|
399
|
+
: 'linear-gradient(135deg, #28a745 0%, #218838 100%)',
|
|
400
|
+
border: 'none',
|
|
401
|
+
borderRadius: '6px',
|
|
402
|
+
cursor: (!isFormValid() || (showTMRelationViewer && selectedItemsRelationViewer.filter(i => i.isDcmt).length === 0)) ? 'not-allowed' : 'pointer',
|
|
403
|
+
boxShadow: (!isFormValid() || (showTMRelationViewer && selectedItemsRelationViewer.filter(i => i.isDcmt).length === 0))
|
|
404
|
+
? 'none'
|
|
405
|
+
: '0 2px 8px rgba(40, 167, 69, 0.35)',
|
|
406
|
+
transition: 'all 0.2s ease',
|
|
407
|
+
}, children: [_jsx(IconPlay, {}), _jsx("span", { children: SDKUI_Localizator.Execute })] }) })] }) }));
|
|
400
408
|
};
|
|
401
409
|
export default TMCopyToFolderForm;
|
|
@@ -3,7 +3,10 @@ import { HomeBlogPost, TaskDescriptor } from '@topconsultnpm/sdk-ts';
|
|
|
3
3
|
interface ITMDcmtBlogProps {
|
|
4
4
|
tid: number | undefined;
|
|
5
5
|
did: number | undefined;
|
|
6
|
+
/** Il pannello è aperto. La inietta TMPanelWrapper, non va passata dal chiamante */
|
|
6
7
|
isVisible?: boolean;
|
|
8
|
+
/** La pagina che contiene il pannello è a video: quelle in secondo piano restano montate e non devono caricare */
|
|
9
|
+
isPageVisible?: boolean;
|
|
7
10
|
fetchBlogDataTrigger?: number;
|
|
8
11
|
onRefreshBlogDatagrid?: () => Promise<void>;
|
|
9
12
|
showFloatingCommentButton?: boolean;
|
|
@@ -8,7 +8,7 @@ import TMBlogCommentForm from '../blog/TMBlogCommentForm';
|
|
|
8
8
|
import TMBlogsPost from '../../grids/TMBlogsPost';
|
|
9
9
|
import TMSpinner from '../../base/TMSpinner';
|
|
10
10
|
import { TMExceptionBoxManager } from '../../base/TMPopUp';
|
|
11
|
-
const TMDcmtBlog = ({ tid, did, isVisible, fetchBlogDataTrigger, onRefreshBlogDatagrid, showFloatingCommentButton = true, allTasks = [], getAllTasks, deleteTaskByIdsCallback, addTaskCallback, editTaskCallback, handleNavigateToWGs, handleNavigateToDossiers }) => {
|
|
11
|
+
const TMDcmtBlog = ({ tid, did, isVisible, isPageVisible = true, fetchBlogDataTrigger, onRefreshBlogDatagrid, showFloatingCommentButton = true, allTasks = [], getAllTasks, deleteTaskByIdsCallback, addTaskCallback, editTaskCallback, handleNavigateToWGs, handleNavigateToDossiers }) => {
|
|
12
12
|
const [blogsDatasource, setBlogsDatasource] = useState([]);
|
|
13
13
|
const [hasLoadedDataOnce, setHasLoadedDataOnce] = useState(false); //traccia se *qualsiasi* dato è stato caricato per la prima volta
|
|
14
14
|
const [lastLoadedDid, setLastLoadedDid] = useState(undefined); // `lastLoadedDid` tiene traccia dell'ultimo `did` per cui abbiamo caricato i dati
|
|
@@ -47,15 +47,15 @@ const TMDcmtBlog = ({ tid, did, isVisible, fetchBlogDataTrigger, onRefreshBlogDa
|
|
|
47
47
|
return;
|
|
48
48
|
}
|
|
49
49
|
// Condizione per eseguire il fetch:
|
|
50
|
-
// 1. Il pannello è visibile
|
|
50
|
+
// 1. Il pannello è visibile in una pagina a video
|
|
51
51
|
// 2. E (non abbiamo ancora caricato dati o il `did` è cambiato rispetto all'ultima volta)
|
|
52
|
-
const shouldFetch = isVisible && (!hasLoadedDataOnce || did !== lastLoadedDid);
|
|
52
|
+
const shouldFetch = isVisible && isPageVisible && (!hasLoadedDataOnce || did !== lastLoadedDid);
|
|
53
53
|
// Esegui la chiamata API solo se il pannello è visibile E i dati non sono già stati caricati
|
|
54
54
|
// O, se vuoi ricaricare ogni volta che diventa visibile (ma è meno efficiente per "pesante")
|
|
55
55
|
if (shouldFetch) {
|
|
56
56
|
fetchBlogDataAsync(tid, did);
|
|
57
57
|
}
|
|
58
|
-
}, [tid, did, isVisible, hasLoadedDataOnce, lastLoadedDid]);
|
|
58
|
+
}, [tid, did, isVisible, isPageVisible, hasLoadedDataOnce, lastLoadedDid]);
|
|
59
59
|
const refreshCallback = async () => {
|
|
60
60
|
await fetchBlogDataAsync(tid, did);
|
|
61
61
|
await onRefreshBlogDatagrid?.();
|
|
@@ -2,6 +2,7 @@ import React from 'react';
|
|
|
2
2
|
import { DcmtTypeDescriptor, HomeBlogPost, LayoutModes, ObjectRef, SearchResultDescriptor, TaskDescriptor, ValidationItem } from '@topconsultnpm/sdk-ts';
|
|
3
3
|
import { DcmtInfo, FormModes, MetadataValueDescriptorEx, TaskContext, IGraphometricManagerProp } from '../../../ts';
|
|
4
4
|
import { IntesiCertificateData } from '../../../helper';
|
|
5
|
+
import { ArchiveListMode } from '../../../hooks/useArchiveListForm';
|
|
5
6
|
/**
|
|
6
7
|
* Definisce il contesto da cui è stato invocato il TMDcmtForm.
|
|
7
8
|
* Permette di gestire logiche diverse in base alla provenienza.
|
|
@@ -77,6 +78,12 @@ interface ITMDcmtFormProps {
|
|
|
77
78
|
mid: number;
|
|
78
79
|
value: string;
|
|
79
80
|
}>, tid?: number) => void;
|
|
81
|
+
/**
|
|
82
|
+
* Modalità "aggiungi a elenco" (es. archiviazione dettagli multipli): se valorizzata, in layout di archiviazione
|
|
83
|
+
* il form non archivia ma emette i metadati compilati al chiamante (pulsanti "Aggiungi"/"Modifica" + "Pulisci").
|
|
84
|
+
* Tutta la logica è incapsulata in useArchiveListForm; usata solo da TMMultiMasterDetailDcmts.
|
|
85
|
+
*/
|
|
86
|
+
archiveListMode?: ArchiveListMode;
|
|
80
87
|
fetchRemoteCertificates?: (email: string) => Promise<IntesiCertificateData[]>;
|
|
81
88
|
datagridUtility?: {
|
|
82
89
|
onRefreshSearchAsyncDatagrid?: () => Promise<void>;
|