@topconsultnpm/sdkui-react 6.21.0-dev2.8 → 6.21.0-dev3.2
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/base/TMAccordionNew.js +1 -0
- package/lib/components/base/TMAreaManager.js +19 -3
- package/lib/components/base/TMDataGrid.js +2 -2
- package/lib/components/base/TMModal.d.ts +1 -0
- package/lib/components/base/TMModal.js +2 -2
- package/lib/components/base/TMPanel.d.ts +7 -4
- package/lib/components/base/TMPanel.js +58 -26
- package/lib/components/base/TMTreeView.js +12 -2
- package/lib/components/base/TMWaitPanel.d.ts +3 -1
- package/lib/components/base/TMWaitPanel.js +14 -9
- package/lib/components/choosers/TMDistinctValues.js +35 -21
- package/lib/components/choosers/TMUserChooser.d.ts +4 -0
- package/lib/components/choosers/TMUserChooser.js +7 -5
- package/lib/components/editors/TMFormulaEditor.d.ts +2 -0
- package/lib/components/editors/TMFormulaEditor.js +75 -21
- package/lib/components/editors/TMMetadataValues.js +2 -1
- package/lib/components/editors/TMRadioButton.js +7 -5
- package/lib/components/editors/TMTextBox.d.ts +2 -0
- package/lib/components/editors/TMTextBox.js +3 -3
- package/lib/components/features/archive/TMArchive.js +1 -1
- package/lib/components/features/documents/TMCopyToFolderForm.d.ts +24 -0
- package/lib/components/features/documents/TMCopyToFolderForm.js +401 -0
- package/lib/components/features/documents/TMDcmtForm.d.ts +1 -0
- package/lib/components/features/documents/TMDcmtForm.js +126 -38
- package/lib/components/features/documents/TMDcmtFormActionButtons.js +17 -2
- package/lib/components/features/documents/TMDcmtPreview.d.ts +1 -0
- package/lib/components/features/documents/TMDcmtPreview.js +2 -2
- package/lib/components/features/documents/TMDcmtTasks.d.ts +1 -0
- package/lib/components/features/documents/TMDcmtTasks.js +2 -2
- package/lib/components/features/documents/TMDownloadRelationViewerSection.d.ts +23 -0
- package/lib/components/features/documents/TMDownloadRelationViewerSection.js +173 -0
- package/lib/components/features/documents/TMFileUploader.js +1 -1
- package/lib/components/features/documents/TMMasterDetailDcmts.d.ts +2 -0
- package/lib/components/features/documents/TMMasterDetailDcmts.js +28 -9
- package/lib/components/features/documents/TMMergeToPdfForm.d.ts +24 -0
- package/lib/components/features/documents/TMMergeToPdfForm.js +309 -0
- package/lib/components/features/documents/TMRelationViewer.d.ts +13 -0
- package/lib/components/features/documents/TMRelationViewer.js +75 -6
- package/lib/components/features/documents/copyAndMergeDcmtsShared.d.ts +71 -0
- package/lib/components/features/documents/copyAndMergeDcmtsShared.js +304 -0
- package/lib/components/features/search/SignatureParamsManager.d.ts +70 -0
- package/lib/components/features/search/SignatureParamsManager.js +145 -0
- package/lib/components/features/search/TMSavedQuerySelector.d.ts +2 -2
- package/lib/components/features/search/TMSavedQuerySelector.js +3 -2
- package/lib/components/features/search/TMSearch.d.ts +4 -1
- package/lib/components/features/search/TMSearch.js +16 -10
- package/lib/components/features/search/TMSearchQueryPanel.js +1 -1
- package/lib/components/features/search/TMSearchResult.d.ts +2 -0
- package/lib/components/features/search/TMSearchResult.js +117 -22
- package/lib/components/features/workflow/diagram/queryDescriptorParser.js +3 -6
- package/lib/components/forms/Login/TMLoginForm.d.ts +9 -0
- package/lib/components/forms/Login/TMLoginForm.js +61 -0
- package/lib/components/forms/TMResultDialog.d.ts +1 -1
- package/lib/components/forms/TMResultDialog.js +4 -2
- package/lib/components/index.d.ts +1 -0
- package/lib/components/index.js +1 -0
- package/lib/components/pages/TMPage.js +3 -1
- package/lib/components/query/TMQueryEditor.js +1 -1
- package/lib/components/viewers/TMTidViewer.js +1 -1
- package/lib/helper/MergePdfManager.d.ts +45 -0
- package/lib/helper/MergePdfManager.js +145 -0
- package/lib/helper/SDKUI_Globals.d.ts +15 -0
- package/lib/helper/SDKUI_Globals.js +15 -1
- package/lib/helper/SDKUI_Localizator.d.ts +107 -2
- package/lib/helper/SDKUI_Localizator.js +1070 -12
- package/lib/helper/TMPdfViewer.js +25 -24
- package/lib/helper/TMUtils.d.ts +1 -0
- package/lib/helper/TMUtils.js +17 -0
- package/lib/helper/ZipManager.d.ts +56 -0
- package/lib/helper/ZipManager.js +127 -0
- package/lib/helper/index.d.ts +1 -0
- package/lib/helper/index.js +1 -0
- package/lib/hooks/useDataUserIdItem.js +6 -4
- package/lib/hooks/useDcmtOperations.d.ts +9 -2
- package/lib/hooks/useDcmtOperations.js +77 -34
- package/lib/hooks/useDocumentOperations.d.ts +3 -0
- package/lib/hooks/useDocumentOperations.js +233 -24
- package/lib/hooks/useForm.js +5 -2
- package/lib/hooks/useResizeObserver.d.ts +1 -1
- package/lib/hooks/useResizeObserver.js +16 -15
- package/package.json +4 -2
|
@@ -327,7 +327,7 @@ const TMSearchQueryPanel = ({ fromDTD, showBackToResultButton, isExpertMode = SD
|
|
|
327
327
|
return (_jsxs(_Fragment, { children: [_jsxs(TMPanel, { title: fromDTD?.nameLoc ?? SDKUI_Localizator.Search_Metadata, allowMaximize: allowMaximize, onMaximize: onMaximizePanel, onHeaderDoubleClick: onMaximizePanel, onBack: onBack, onActiveChanged: handlePanelActiveChanged, toolbar: _jsx(_Fragment, { children: (SQD && !showSqdForm) ?
|
|
328
328
|
_jsx(ContextMenu, { items: contextMenuItems, trigger: "left", children: _jsx(TMButton, { btnStyle: 'icon', caption: 'Altro', icon: _jsx(IconMenuVertical, { color: 'white' }), showTooltip: false, onClick: () => setIsQueryPanelActive(true) }) })
|
|
329
329
|
: _jsx(_Fragment, {}) }), children: [_jsx(ConfirmQueryParamsDialog, {}), SQD
|
|
330
|
-
? _jsxs("div", { onContextMenu: (e) => e.preventDefault(), style: { height: '100%', width: '100%', position: 'relative', display: 'flex', flexDirection: 'column', gap: 5 }, children: [showAdvancedSearch
|
|
330
|
+
? _jsxs("div", { onContextMenu: (e) => e.preventDefault(), style: { height: '100%', width: '100%', position: 'relative', display: showSqdForm ? 'none' : 'flex', flexDirection: 'column', gap: 5 }, children: [showAdvancedSearch
|
|
331
331
|
? _jsx(TMQueryEditor, { formMode: FormModes.Update, showToolbar: false, inputData: qd, validateSelect: true, showApply: false, onQDChanged: handleQdChanged, updateIsModalOpen: updateIsModalOpen })
|
|
332
332
|
: _jsx(TMSearchQueryEditor, { qd: qd, dcmtTypesList: dcmtTypesList, isExpertMode: isExpertMode, showAllMdWhere: showAllMdWhere, onQdChanged: handleQdChanged, onFocusedMetadataChanged: setFocusedTidMid, onAdvancedMenuClick: handleAdvancedMenuClick, updateIsModalOpen: updateIsModalOpen }), _jsxs("div", { style: {
|
|
333
333
|
display: 'flex',
|
|
@@ -11,6 +11,8 @@ interface ITMSearchResultProps {
|
|
|
11
11
|
selectedSearchResultTID?: number;
|
|
12
12
|
floatingActionConfig?: TMSearchResultFloatingActionConfig;
|
|
13
13
|
workingGroupContext?: WorkingGroupDescriptor;
|
|
14
|
+
inputDID?: number;
|
|
15
|
+
formAutoOpen?: boolean;
|
|
14
16
|
allowFloatingBar?: boolean;
|
|
15
17
|
allowRelations?: boolean;
|
|
16
18
|
isClosable?: boolean;
|
|
@@ -3,7 +3,7 @@ import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react'
|
|
|
3
3
|
import styled from 'styled-components';
|
|
4
4
|
import { LoadIndicator } from 'devextreme-react';
|
|
5
5
|
import { AppModules, DataColumnTypes, DataListViewModes, DcmtTypeListCacheService, LayoutCacheService, LayoutModes, MetadataDataDomains, MetadataFormats, SDK_Globals, SystemMIDsAsNumber, UserListCacheService, } from '@topconsultnpm/sdk-ts';
|
|
6
|
-
import { deepCompare, generateUniqueColumnKeys, genUniqueId, getSearchToolbarVisibility, IconBoard, IconDcmtTypeSys, IconDelete, IconMenuVertical, IconPlatform, IconRefresh, IconSearchCheck, IconShow, isApprovalWorkflowView, searchResultDescriptorToSimpleArray, searchResultToMetadataValues, SDKUI_Globals, SDKUI_Localizator
|
|
6
|
+
import { deepCompare, generateUniqueColumnKeys, genUniqueId, getSearchToolbarVisibility, IconBoard, IconDcmtTypeSys, IconDelete, IconMenuVertical, IconPlatform, IconRefresh, IconSearchCheck, IconShow, isApprovalWorkflowView, isSign4TopEnabled, searchResultDescriptorToSimpleArray, searchResultToMetadataValues, SDKUI_Globals, SDKUI_Localizator } from '../../../helper';
|
|
7
7
|
import { getDcmtCicoStatus } from '../../../helper/checkinCheckoutManager';
|
|
8
8
|
import { DcmtOperationTypes, SearchResultContext, } from '../../../ts';
|
|
9
9
|
import { Gutters } from '../../../utils/theme';
|
|
@@ -52,9 +52,9 @@ const orderByName = (array) => {
|
|
|
52
52
|
};
|
|
53
53
|
const TMSearchResult = ({
|
|
54
54
|
// Data
|
|
55
|
-
groupId, searchResults = [], context = SearchResultContext.METADATA_SEARCH, title, selectedSearchResultTID, floatingActionConfig, workingGroupContext = undefined,
|
|
55
|
+
groupId, searchResults = [], context = SearchResultContext.METADATA_SEARCH, title, selectedSearchResultTID, floatingActionConfig, workingGroupContext = undefined, inputDID,
|
|
56
56
|
// Boolean flags to enable/disable features
|
|
57
|
-
isVisible = true, allowRelations = true, openDcmtFormAsModal = false, showSearchResultSidebar = true, showDcmtFormSidebar = true, showSelector = false, isClosable = false, allowFloatingBar = true, showToolbarHeader = true, showBackButton = true, disableAccordionIfSingleCategory = false, editPdfForm = false, openS4TViewer = false, showTodoDcmtForm = false, showToppyDraggableHelpCenter = true, toppyHelpCenterUsePortal = false, showNoDcmtFoundMessage = true, enablePinIcons = true,
|
|
57
|
+
formAutoOpen, isVisible = true, allowRelations = true, openDcmtFormAsModal = false, showSearchResultSidebar = true, showDcmtFormSidebar = true, showSelector = false, isClosable = false, allowFloatingBar = true, showToolbarHeader = true, showBackButton = true, disableAccordionIfSingleCategory = false, editPdfForm = false, openS4TViewer = false, showTodoDcmtForm = false, showToppyDraggableHelpCenter = true, toppyHelpCenterUsePortal = false, showNoDcmtFoundMessage = true, enablePinIcons = true,
|
|
58
58
|
// Callbacks (optional)
|
|
59
59
|
openInOffice, onRefreshAfterAddDcmtToFavs, onRefreshSearchAsyncDatagrid, onSelectedTIDChanged, onWFOperationCompleted, onClose, onFileOpened, onTaskCreateRequest, openWGsCopyMoveForm, openCommentFormCallback, openAddDocumentForm, onOpenS4TViewerRequest, onOpenPdfEditorRequest, openFileUploaderPdfEditor, passToArchiveCallback, onReferenceClick,
|
|
60
60
|
// Tasks
|
|
@@ -101,6 +101,15 @@ handleNavigateToWGs, handleNavigateToDossiers, }) => {
|
|
|
101
101
|
// State to control the layout of the custom buttons
|
|
102
102
|
const [customButtonsLayout, setCustomButtonsLayout] = useState();
|
|
103
103
|
const [allUsers, setAllUsers] = useState([]);
|
|
104
|
+
const [isBoardDisabled, setIsBoardDisabled] = useState(true);
|
|
105
|
+
useEffect(() => {
|
|
106
|
+
if (!fromDTD) {
|
|
107
|
+
setIsBoardDisabled(false);
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
const newValue = fromDTD.hasBlog !== undefined && fromDTD.hasBlog !== 1;
|
|
111
|
+
setIsBoardDisabled(newValue);
|
|
112
|
+
}, [fromDTD]);
|
|
104
113
|
useEffect(() => {
|
|
105
114
|
const fetchAllUsers = async () => {
|
|
106
115
|
const users = await UserListCacheService.GetAllAsync();
|
|
@@ -282,7 +291,7 @@ handleNavigateToWGs, handleNavigateToDossiers, }) => {
|
|
|
282
291
|
createTaskFromDocumentOrWorkItem();
|
|
283
292
|
}
|
|
284
293
|
};
|
|
285
|
-
const { operationItems, renderFloatingBar, renderDcmtOperations, features } = useDocumentOperations({
|
|
294
|
+
const { operationItems, renderFloatingBar, renderDcmtOperations, features, } = useDocumentOperations({
|
|
286
295
|
context: context,
|
|
287
296
|
documentData: {
|
|
288
297
|
dtd: fromDTD,
|
|
@@ -318,6 +327,7 @@ handleNavigateToWGs, handleNavigateToDossiers, }) => {
|
|
|
318
327
|
allowFloatingBar,
|
|
319
328
|
enablePinIcons,
|
|
320
329
|
allowRelations,
|
|
330
|
+
showTodoDcmtForm
|
|
321
331
|
},
|
|
322
332
|
tasks: {
|
|
323
333
|
allTasks: allTasks,
|
|
@@ -352,7 +362,7 @@ handleNavigateToWGs, handleNavigateToDossiers, }) => {
|
|
|
352
362
|
openTaskFormHandler,
|
|
353
363
|
},
|
|
354
364
|
});
|
|
355
|
-
const { isOpenDcmtForm, openFormHandler, dcmtFormLayoutMode, onDcmtFormOpenChange, showSearchTMDatagrid, showExportForm, isOpenBatchUpdate, isModifiedBatchUpdate, updateBatchUpdateForm, handleSignApprove, checkoutInfo: { showCicoWaitPanel, cicoWaitPanelTitle, showCicoPrimaryProgress, cicoPrimaryProgressText, cicoPrimaryProgressValue, cicoPrimaryProgressMax, }, dcmtOperations: { abortController, showWaitPanel, showPrimary, waitPanelTitle, waitPanelTextPrimary, waitPanelValuePrimary, waitPanelMaxValuePrimary, showSecondary, waitPanelTextSecondary, waitPanelValueSecondary, waitPanelMaxValueSecondary, downloadDcmtsAsync, runOperationAsync, }, relatedDocumentsInfo: { isOpenDetails, isOpenMaster, checkRelatedDcmtsArchiveCapability, checkManyToManyCapability, }, toppyOperations: { showApprovePopup, showRejectPopup, showReAssignPopup, showMoreInfoPopup, updateShowApprovePopup, updateShowRejectPopup, updateShowReAssignPopup, updateShowMoreInfoPopup } } = features;
|
|
365
|
+
const { isOpenDcmtForm, openFormHandler, dcmtFormLayoutMode, onDcmtFormOpenChange, showSearchTMDatagrid, showExportForm, isOpenBatchUpdate, isModifiedBatchUpdate, updateBatchUpdateForm, closeDcmtFormHandler, handleSignApprove, checkoutInfo: { showCicoWaitPanel, cicoWaitPanelTitle, showCicoPrimaryProgress, cicoPrimaryProgressText, cicoPrimaryProgressValue, cicoPrimaryProgressMax, }, dcmtOperations: { abortController, showWaitPanel, showPrimary, waitPanelTitle, waitPanelTextPrimary, waitPanelValuePrimary, waitPanelMaxValuePrimary, showSecondary, waitPanelTextSecondary, waitPanelValueSecondary, waitPanelMaxValueSecondary, downloadDcmtsAsync, runOperationAsync, }, relatedDocumentsInfo: { isOpenDetails, isOpenMaster, checkRelatedDcmtsArchiveCapability, checkManyToManyCapability, }, toppyOperations: { showApprovePopup, showRejectPopup, showReAssignPopup, showMoreInfoPopup, updateShowApprovePopup, updateShowRejectPopup, updateShowReAssignPopup, updateShowMoreInfoPopup } } = features;
|
|
356
366
|
const deviceType = useDeviceType();
|
|
357
367
|
const isMobile = deviceType === DeviceType.MOBILE;
|
|
358
368
|
const selectedDocs = getSelectedDcmtsOrFocused(selectedItems, focusedItem);
|
|
@@ -366,6 +376,7 @@ handleNavigateToWGs, handleNavigateToDossiers, }) => {
|
|
|
366
376
|
useEffect(() => {
|
|
367
377
|
setSelectedItems([]);
|
|
368
378
|
updateBatchUpdateForm(false);
|
|
379
|
+
closeDcmtFormHandler();
|
|
369
380
|
setCurrentSearchResults(searchResults);
|
|
370
381
|
if (searchResults.length <= 0) {
|
|
371
382
|
setSelectedSearchResult(undefined);
|
|
@@ -407,6 +418,54 @@ handleNavigateToWGs, handleNavigateToDossiers, }) => {
|
|
|
407
418
|
// Se esiste almeno una riga, seleziona la prima
|
|
408
419
|
setFocusedItem(newDataSource && newDataSource.length > 0 ? newDataSource[0] : undefined);
|
|
409
420
|
}, [selectedSearchResult, checkRelatedDcmtsArchiveCapability, checkManyToManyCapability]);
|
|
421
|
+
// Quando inputDID è fornito e i dati della griglia sono pronti, seleziona il documento corrispondente
|
|
422
|
+
useEffect(() => {
|
|
423
|
+
if (!inputDID || visibleItems.length === 0)
|
|
424
|
+
return;
|
|
425
|
+
const targetItem = visibleItems.find((item) => item.DID == inputDID);
|
|
426
|
+
if (targetItem && focusedItem?.DID != inputDID) {
|
|
427
|
+
setFocusedItem(targetItem);
|
|
428
|
+
}
|
|
429
|
+
else if (!targetItem) {
|
|
430
|
+
ShowAlert({
|
|
431
|
+
message: `${SDKUI_Localizator.NoDcmtFound} (DID: ${inputDID})`,
|
|
432
|
+
mode: "warning",
|
|
433
|
+
title: 'External link',
|
|
434
|
+
duration: 5000
|
|
435
|
+
});
|
|
436
|
+
}
|
|
437
|
+
}, [inputDID, visibleItems]);
|
|
438
|
+
// Quando inputDID e formAutoOpen sono forniti, apri automaticamente il form del documento
|
|
439
|
+
useEffect(() => {
|
|
440
|
+
if (!inputDID || !formAutoOpen)
|
|
441
|
+
return;
|
|
442
|
+
if (focusedItem?.DID != inputDID)
|
|
443
|
+
return;
|
|
444
|
+
openFormHandler(LayoutModes.Update);
|
|
445
|
+
}, [inputDID, formAutoOpen, focusedItem]);
|
|
446
|
+
// Quando openS4TViewer è true, apri automaticamente il viewer S4T
|
|
447
|
+
useEffect(() => {
|
|
448
|
+
if (!openS4TViewer)
|
|
449
|
+
return;
|
|
450
|
+
if (!inputDID)
|
|
451
|
+
return;
|
|
452
|
+
if (!focusedItem)
|
|
453
|
+
return;
|
|
454
|
+
if (focusedItem.DID != inputDID)
|
|
455
|
+
return;
|
|
456
|
+
if (!fromDTD || !isApprovalWorkflowView(fromDTD))
|
|
457
|
+
return;
|
|
458
|
+
if (!focusedItem.FILEEXT || !fromDTD.widgets || !isSign4TopEnabled(fromDTD.widgets)) {
|
|
459
|
+
ShowAlert({
|
|
460
|
+
message: "Il documento non ha l'estensione valida per la firma.",
|
|
461
|
+
mode: "warning",
|
|
462
|
+
title: 'External link',
|
|
463
|
+
duration: 5000
|
|
464
|
+
});
|
|
465
|
+
return;
|
|
466
|
+
}
|
|
467
|
+
onOpenS4TViewerRequest?.([{ TID: focusedItem.TID, DID: focusedItem.DID }]);
|
|
468
|
+
}, [openS4TViewer, inputDID, focusedItem, fromDTD]);
|
|
410
469
|
useEffect(() => {
|
|
411
470
|
if (!focusedItem)
|
|
412
471
|
return;
|
|
@@ -512,6 +571,21 @@ handleNavigateToWGs, handleNavigateToDossiers, }) => {
|
|
|
512
571
|
return newResults;
|
|
513
572
|
});
|
|
514
573
|
};
|
|
574
|
+
/**
|
|
575
|
+
* Restituisce l'handler onBack per i pannelli, evitando duplicazione di codice.
|
|
576
|
+
* @param isMainPanel - Se true, è il pannello principale dei risultati di ricerca
|
|
577
|
+
*/
|
|
578
|
+
const getOnBackHandler = (isMainPanel = false) => {
|
|
579
|
+
// Se showBackButton è false, non mostrare mai il back
|
|
580
|
+
if (showBackButton === false)
|
|
581
|
+
return undefined;
|
|
582
|
+
// Mobile: mostra back su tutti i pannelli (se showBackButton è definito e non è closable)
|
|
583
|
+
if (isMobile) {
|
|
584
|
+
return (showBackButton !== undefined && !isClosable) ? onBack : undefined;
|
|
585
|
+
}
|
|
586
|
+
// Desktop: mostra back solo sul pannello principale dei risultati (se showBackButton è definito e non è closable)
|
|
587
|
+
return (showBackButton !== undefined && isMainPanel && !isClosable) ? onBack : undefined;
|
|
588
|
+
};
|
|
515
589
|
const removeDcmtFromFavsOrRecents = async () => {
|
|
516
590
|
switch (selectedSearchResult?.category) {
|
|
517
591
|
case "Favorites":
|
|
@@ -601,7 +675,7 @@ handleNavigateToWGs, handleNavigateToDossiers, }) => {
|
|
|
601
675
|
]);
|
|
602
676
|
const tmBlog = useMemo(() => _jsx(TMDcmtBlog, { tid: focusedItem?.TID, did: focusedItem?.DID, fetchBlogDataTrigger: refreshBlogTrigger, allTasks: allTasks, getAllTasks: getAllTasks, deleteTaskByIdsCallback: deleteTaskByIdsCallback, addTaskCallback: addTaskCallback, editTaskCallback: editTaskCallback, handleNavigateToWGs: handleNavigateToWGs, handleNavigateToDossiers: handleNavigateToDossiers }), [focusedItem, allTasks, refreshBlogTrigger, handleNavigateToWGs, handleNavigateToDossiers, onRefreshBlogDatagrid]);
|
|
603
677
|
const tmSysMetadata = useMemo(() => _jsx(TMMetadataValues, { layoutMode: LayoutModes.Update, openChooserBySingleClick: true, TID: focusedItem?.TID, isReadOnly: true, deviceType: deviceType, metadataValues: currentMetadataValues.filter(o => (o.mid != undefined && o.mid <= 100)), metadataValuesOrig: currentMetadataValues.filter(o => (o.mid != undefined && o.mid <= 100)), validationItems: [] }), [focusedItem, currentMetadataValues, deviceType]);
|
|
604
|
-
const tmDcmtPreview = useMemo(() => _jsx(TMDcmtPreviewWrapper, { refreshPreviewTrigger: refreshPreviewTrigger, currentDcmt: currentDcmt }), [currentDcmt, refreshPreviewTrigger]);
|
|
678
|
+
const tmDcmtPreview = useMemo(() => _jsx(TMDcmtPreviewWrapper, { refreshPreviewTrigger: refreshPreviewTrigger, currentDcmt: currentDcmt, onBack: getOnBackHandler() }), [currentDcmt, refreshPreviewTrigger]);
|
|
605
679
|
// Auto-fetch indexing info when drawer is open and focusedItem changes
|
|
606
680
|
useEffect(() => {
|
|
607
681
|
if (!focusedItem || !showIndexingInfo)
|
|
@@ -658,7 +732,6 @@ handleNavigateToWGs, handleNavigateToDossiers, }) => {
|
|
|
658
732
|
}
|
|
659
733
|
return (_jsxs("div", { style: { display: 'flex', flexDirection: 'column', height: '100%', overflow: 'hidden', width: '100%' }, children: [_jsx("div", { style: { padding: '10px', overflow: 'auto', flex: 1 }, children: _jsx("div", { dangerouslySetInnerHTML: { __html: ftExplanation } }) }), _jsxs(StyledIndexingInfoSection, { children: [_jsxs(StyledIndexingToggle, { onClick: handleToggleIndexingInfo, disabled: loadingIndexingInfo, children: [_jsx(StyledLeftContent, { children: _jsx("span", { children: SDKUI_Localizator.IndexingInformation }) }), _jsx(StyledRightContent, { children: _jsx(StyledChevron, { "$isOpen": showIndexingInfo, children: "\u25BC" }) })] }), showIndexingInfo && indexingInfo && (_jsxs(StyledIndexingInfoBox, { children: [_jsx("div", { dangerouslySetInnerHTML: { __html: indexingInfo } }), loadingIndexingInfo && (_jsxs("div", { style: { position: 'absolute', top: '50%', left: '50%', transform: 'translate(-50%, -50%)', background: 'rgba(255, 255, 255, 0.9)', padding: '10px', borderRadius: '4px', boxShadow: '0 2px 8px rgba(0,0,0,0.15)' }, children: [SDKUI_Localizator.Loading, "..."] }))] }))] })] }));
|
|
660
734
|
}, [selectedSearchResult, focusedItem, indexingInfo, showIndexingInfo, loadingIndexingInfo]);
|
|
661
|
-
const isBoardDisabled = useMemo(() => fromDTD?.hasBlog !== 1, [fromDTD?.hasBlog]);
|
|
662
735
|
const allInitialPanelVisibility = {
|
|
663
736
|
'tmSearchResult': true,
|
|
664
737
|
'tmBlog': false,
|
|
@@ -683,9 +756,7 @@ handleNavigateToWGs, handleNavigateToDossiers, }) => {
|
|
|
683
756
|
title: getTitleHeader(),
|
|
684
757
|
showHeader: showToolbarHeader,
|
|
685
758
|
allowMaximize: !isMobile,
|
|
686
|
-
onBack:
|
|
687
|
-
? (showBackButton ? onBack : undefined)
|
|
688
|
-
: ((!isClosable && context === SearchResultContext.METADATA_SEARCH) || (isMobile && context !== SearchResultContext.METADATA_SEARCH && splitterSize[1] === '100%') ? onBack : undefined),
|
|
759
|
+
onBack: getOnBackHandler(true),
|
|
689
760
|
onClose: isClosable ? onBack : undefined,
|
|
690
761
|
toolbar: searchResutlToolbar
|
|
691
762
|
},
|
|
@@ -695,27 +766,50 @@ handleNavigateToWGs, handleNavigateToDossiers, }) => {
|
|
|
695
766
|
{
|
|
696
767
|
id: 'tmBlog',
|
|
697
768
|
name: SDKUI_Localizator.BlogCase,
|
|
698
|
-
contentOptions: {
|
|
769
|
+
contentOptions: {
|
|
770
|
+
component: tmBlog,
|
|
771
|
+
panelContainer: {
|
|
772
|
+
title: SDKUI_Localizator.BlogCase,
|
|
773
|
+
allowMaximize: !isMobile,
|
|
774
|
+
onBack: getOnBackHandler(),
|
|
775
|
+
}
|
|
776
|
+
},
|
|
699
777
|
toolbarOptions: { icon: _jsx(IconBoard, { fontSize: 24 }), visible: getSearchToolbarVisibility(SDK_Globals.tmSession?.SessionDescr?.appModuleID ?? AppModules.SURFER).tmBlog, orderNumber: 2, isActive: allInitialPanelVisibility['tmBlog'] }
|
|
700
778
|
},
|
|
701
779
|
{
|
|
702
780
|
id: 'tmSysMetadata',
|
|
703
781
|
name: SDKUI_Localizator.MetadataSystem,
|
|
704
|
-
contentOptions: {
|
|
782
|
+
contentOptions: {
|
|
783
|
+
component: tmSysMetadata,
|
|
784
|
+
panelContainer: {
|
|
785
|
+
title: SDKUI_Localizator.MetadataSystem,
|
|
786
|
+
allowMaximize: !isMobile,
|
|
787
|
+
onBack: getOnBackHandler(),
|
|
788
|
+
}
|
|
789
|
+
},
|
|
705
790
|
toolbarOptions: { icon: _jsx(IconDcmtTypeSys, { fontSize: 24 }), visible: getSearchToolbarVisibility(SDK_Globals.tmSession?.SessionDescr?.appModuleID ?? AppModules.SURFER).tmSysMetadata, orderNumber: 3, isActive: allInitialPanelVisibility['tmSysMetadata'] }
|
|
706
791
|
},
|
|
707
792
|
...(context === SearchResultContext.FREE_SEARCH ? [
|
|
708
793
|
{
|
|
709
794
|
id: 'tmFullTextSearch',
|
|
710
795
|
name: SDKUI_Localizator.ResultDetails,
|
|
711
|
-
contentOptions: {
|
|
796
|
+
contentOptions: {
|
|
797
|
+
component: tmFullTextSearch,
|
|
798
|
+
panelContainer: {
|
|
799
|
+
title: SDKUI_Localizator.ResultDetails,
|
|
800
|
+
allowMaximize: !isMobile,
|
|
801
|
+
onBack: getOnBackHandler(),
|
|
802
|
+
}
|
|
803
|
+
},
|
|
712
804
|
toolbarOptions: { icon: _jsx(IconPlatform, { fontSize: 20 }), visible: getSearchToolbarVisibility(SDK_Globals.tmSession?.SessionDescr?.appModuleID ?? AppModules.SURFER).tmFullTextSearch, orderNumber: 4, isActive: allInitialPanelVisibility['tmFullTextSearch'] }
|
|
713
805
|
}
|
|
714
806
|
] : []),
|
|
715
807
|
{
|
|
716
808
|
id: 'tmDcmtPreview',
|
|
717
809
|
name: SDKUI_Localizator.PreviewDocument,
|
|
718
|
-
contentOptions: {
|
|
810
|
+
contentOptions: {
|
|
811
|
+
component: tmDcmtPreview
|
|
812
|
+
},
|
|
719
813
|
toolbarOptions: { icon: _jsx(IconShow, { fontSize: 24 }), visible: getSearchToolbarVisibility(SDK_Globals.tmSession?.SessionDescr?.appModuleID ?? AppModules.SURFER).tmDcmtPreview, orderNumber: context === SearchResultContext.FREE_SEARCH ? 5 : 4, isActive: allInitialPanelVisibility['tmDcmtPreview'] }
|
|
720
814
|
}
|
|
721
815
|
], [tmSearchResult, tmBlog, tmSysMetadata, tmDcmtPreview, tmFullTextSearch, showToolbarHeader, context, isMobile]);
|
|
@@ -1240,22 +1334,23 @@ const TMSearchResultSelector = ({ searchResults = [], disableAccordionIfSingleCa
|
|
|
1240
1334
|
};
|
|
1241
1335
|
//#endregion TMSearchResultSelector
|
|
1242
1336
|
const PanelDisabledStateHandler = ({ isBoardDisabled }) => {
|
|
1243
|
-
const { setPanelVisibilityById, setToolbarButtonDisabled
|
|
1337
|
+
const { setPanelVisibilityById, setToolbarButtonDisabled } = useTMPanelManagerContext();
|
|
1244
1338
|
useEffect(() => {
|
|
1245
|
-
|
|
1246
|
-
|
|
1247
|
-
// Chiude il pannello solo se è attualmente visibile e deve essere disabilitato
|
|
1248
|
-
if (isBoardDisabled && panelVisibility['tmBlog']) {
|
|
1339
|
+
if (isBoardDisabled) {
|
|
1340
|
+
setToolbarButtonDisabled('tmBlog', true);
|
|
1249
1341
|
setPanelVisibilityById('tmBlog', false);
|
|
1250
1342
|
}
|
|
1251
|
-
|
|
1343
|
+
else {
|
|
1344
|
+
setToolbarButtonDisabled('tmBlog', false);
|
|
1345
|
+
}
|
|
1346
|
+
}, [isBoardDisabled]);
|
|
1252
1347
|
return null;
|
|
1253
1348
|
};
|
|
1254
|
-
const TMDcmtPreviewWrapper = ({ refreshPreviewTrigger, currentDcmt, isVisible }) => {
|
|
1349
|
+
const TMDcmtPreviewWrapper = ({ refreshPreviewTrigger, currentDcmt, isVisible, onBack }) => {
|
|
1255
1350
|
const { setPanelVisibilityById, toggleMaximize, isResizingActive, countVisibleLeafPanels } = useTMPanelManagerContext();
|
|
1256
1351
|
const deviceType = useDeviceType();
|
|
1257
1352
|
const isMobile = deviceType === DeviceType.MOBILE;
|
|
1258
|
-
return (_jsx(TMDcmtPreview, { dcmtData: currentDcmt, onClosePanel: (!isMobile && countVisibleLeafPanels() > 1) ? () => setPanelVisibilityById('tmDcmtPreview', false) : undefined, allowMaximize: !isMobile && countVisibleLeafPanels() > 1, onMaximizePanel: (!isMobile && countVisibleLeafPanels() > 1) ? () => toggleMaximize("tmDcmtPreview") : undefined, isResizingActive: isResizingActive, isVisible: isVisible }, refreshPreviewTrigger));
|
|
1353
|
+
return (_jsx(TMDcmtPreview, { dcmtData: currentDcmt, onClosePanel: (!isMobile && countVisibleLeafPanels() > 1) ? () => setPanelVisibilityById('tmDcmtPreview', false) : undefined, onBack: onBack, allowMaximize: !isMobile && countVisibleLeafPanels() > 1, onMaximizePanel: (!isMobile && countVisibleLeafPanels() > 1) ? () => toggleMaximize("tmDcmtPreview") : undefined, isResizingActive: isResizingActive, isVisible: isVisible }, refreshPreviewTrigger));
|
|
1259
1354
|
};
|
|
1260
1355
|
// Styled Components
|
|
1261
1356
|
const StyledPlaceholder = styled.div `
|
|
@@ -175,14 +175,11 @@ export const parseQueryDescriptorXml = (xmlString) => {
|
|
|
175
175
|
return SearchEngine.NormalizeQueryDescriptor(queryDescriptor);
|
|
176
176
|
};
|
|
177
177
|
export const serializeQueryDescriptorXml = async (qd) => {
|
|
178
|
-
// try {
|
|
179
178
|
if (!qd)
|
|
180
179
|
return '';
|
|
180
|
+
// Per compatibilità con V5, assicurati che ogni JoinItem abbia un alias (anche se vuoto) prima della serializzazione,
|
|
181
|
+
// poiché la logica di serializzazione potrebbe aspettarsi questa proprietà.
|
|
182
|
+
qd.join?.forEach(join => { join.alias ??= ""; });
|
|
181
183
|
let xml = await SDK_Globals.tmSession?.NewDcmtPlatformEngine().UtilsSerializeQdAsync(qd) ?? '';
|
|
182
184
|
return xml;
|
|
183
|
-
// } catch (error) {
|
|
184
|
-
// console.error('Error serializing QueryDescriptor to XML:', error);
|
|
185
|
-
//TODO: gestire errore
|
|
186
|
-
// return '';
|
|
187
|
-
// }
|
|
188
185
|
};
|
|
@@ -31,6 +31,14 @@ export declare const cultureIDsDataSource: {
|
|
|
31
31
|
value: CultureIDs;
|
|
32
32
|
display: string;
|
|
33
33
|
}[];
|
|
34
|
+
export interface ITMLoginDefaultValues {
|
|
35
|
+
endpoint: string;
|
|
36
|
+
archiveId?: string;
|
|
37
|
+
authenticationMode?: AuthenticationModes;
|
|
38
|
+
username?: string;
|
|
39
|
+
behalfUsername?: string;
|
|
40
|
+
domain?: string;
|
|
41
|
+
}
|
|
34
42
|
interface ITMLoginFormProps {
|
|
35
43
|
isConnector?: boolean;
|
|
36
44
|
sdInput?: SessionDescriptor;
|
|
@@ -39,6 +47,7 @@ interface ITMLoginFormProps {
|
|
|
39
47
|
onLogged: (tmSession: ITopMediaSession) => void;
|
|
40
48
|
onChangeLanguage?: (e: CultureIDs) => void;
|
|
41
49
|
cultureID?: CultureIDs;
|
|
50
|
+
defaultLoginValues?: ITMLoginDefaultValues;
|
|
42
51
|
}
|
|
43
52
|
declare const TMLoginForm: React.FunctionComponent<ITMLoginFormProps>;
|
|
44
53
|
export default TMLoginForm;
|
|
@@ -106,6 +106,7 @@ const TMLoginForm = (props) => {
|
|
|
106
106
|
const passwordRef = useRef(null);
|
|
107
107
|
const usernameOnBehalfOfRef = useRef(null);
|
|
108
108
|
const passwordOnBehalfOfRRef = useRef(null);
|
|
109
|
+
const defaultLoginAppliedRef = useRef(false);
|
|
109
110
|
const [loginStep, setLoginStep] = useState(1);
|
|
110
111
|
const [tmServer, setTmServer] = useState();
|
|
111
112
|
const [tmSession, setTmSession] = useState();
|
|
@@ -201,6 +202,30 @@ const TMLoginForm = (props) => {
|
|
|
201
202
|
setUsername(props.sdInput.userName);
|
|
202
203
|
}
|
|
203
204
|
}, []);
|
|
205
|
+
useEffect(() => {
|
|
206
|
+
if (!props.defaultLoginValues)
|
|
207
|
+
return;
|
|
208
|
+
const matchingEndpoint = props.endpoints.find(ep => ep.URL === props.defaultLoginValues.endpoint);
|
|
209
|
+
if (!matchingEndpoint) {
|
|
210
|
+
ShowAlert({
|
|
211
|
+
message: "Endpoint non trovato",
|
|
212
|
+
mode: "warning",
|
|
213
|
+
title: "External link",
|
|
214
|
+
duration: 5000
|
|
215
|
+
});
|
|
216
|
+
return;
|
|
217
|
+
}
|
|
218
|
+
setEndpoint(matchingEndpoint);
|
|
219
|
+
if (props.defaultLoginValues.archiveId)
|
|
220
|
+
setManualArchiveID(props.defaultLoginValues.archiveId);
|
|
221
|
+
setAuthMode(props.defaultLoginValues.authenticationMode ?? AuthenticationModes.TopMedia);
|
|
222
|
+
if (props.defaultLoginValues.username)
|
|
223
|
+
setUsername(props.defaultLoginValues.username);
|
|
224
|
+
if (props.defaultLoginValues.domain)
|
|
225
|
+
setAuthDomain(props.defaultLoginValues.domain);
|
|
226
|
+
if (props.defaultLoginValues.behalfUsername)
|
|
227
|
+
setUsernameOnBehalf(props.defaultLoginValues.behalfUsername);
|
|
228
|
+
}, [props.defaultLoginValues, props.endpoints]);
|
|
204
229
|
useEffect(() => {
|
|
205
230
|
if (!hasSingleOption)
|
|
206
231
|
return;
|
|
@@ -216,6 +241,9 @@ const TMLoginForm = (props) => {
|
|
|
216
241
|
setDcmtArchive(undefined);
|
|
217
242
|
}, [isSuccess]);
|
|
218
243
|
useEffect(() => {
|
|
244
|
+
// Skip all default endpoint logic when defaultLoginValues is defined (external link)
|
|
245
|
+
if (props.defaultLoginValues)
|
|
246
|
+
return;
|
|
219
247
|
let preferredRapidAccess = localRa?.find(ar => ar.preferred === true);
|
|
220
248
|
if (preferredRapidAccess) {
|
|
221
249
|
handleRapidAccessSelection(preferredRapidAccess);
|
|
@@ -240,6 +268,36 @@ const TMLoginForm = (props) => {
|
|
|
240
268
|
useEffect(() => {
|
|
241
269
|
getArchivesAsync();
|
|
242
270
|
}, [tmSession]);
|
|
271
|
+
// Default values and step management
|
|
272
|
+
useEffect(() => {
|
|
273
|
+
if (!props.defaultLoginValues || !props.defaultLoginValues.archiveId || defaultLoginAppliedRef.current || !tmSession || !tmSession.TopMediaServer?.BaseAddress)
|
|
274
|
+
return;
|
|
275
|
+
defaultLoginAppliedRef.current = true;
|
|
276
|
+
const archiveId = props.defaultLoginValues.archiveId;
|
|
277
|
+
const validateAndAdvance = async () => {
|
|
278
|
+
try {
|
|
279
|
+
TMSpinner.show({ description: '' });
|
|
280
|
+
const archiveEngine = tmSession.NewArchiveEngine();
|
|
281
|
+
const result = await archiveEngine.RetrieveAsync(archiveId);
|
|
282
|
+
setDcmtArchive(result);
|
|
283
|
+
setLoginStep(2);
|
|
284
|
+
}
|
|
285
|
+
catch (e) {
|
|
286
|
+
ShowAlert({
|
|
287
|
+
message: "Archive id non valido",
|
|
288
|
+
mode: "warning",
|
|
289
|
+
title: "External link",
|
|
290
|
+
duration: 5000
|
|
291
|
+
});
|
|
292
|
+
setManualArchiveID('');
|
|
293
|
+
TMExceptionBoxManager.show({ exception: e });
|
|
294
|
+
}
|
|
295
|
+
finally {
|
|
296
|
+
TMSpinner.hide();
|
|
297
|
+
}
|
|
298
|
+
};
|
|
299
|
+
validateAndAdvance();
|
|
300
|
+
}, [tmSession, props.defaultLoginValues]);
|
|
243
301
|
useEffect(() => {
|
|
244
302
|
if (!saveLoginEnable || !dcmtArchive)
|
|
245
303
|
return;
|
|
@@ -396,6 +454,9 @@ const TMLoginForm = (props) => {
|
|
|
396
454
|
if (!archives)
|
|
397
455
|
return;
|
|
398
456
|
setDcmtArchives(archives);
|
|
457
|
+
// Skip auto-selection when defaultLoginValues provides an archiveId (external link)
|
|
458
|
+
if (props.defaultLoginValues?.archiveId)
|
|
459
|
+
return;
|
|
399
460
|
if (archives.length === 1) {
|
|
400
461
|
setDcmtArchive(archives[0]);
|
|
401
462
|
return;
|
|
@@ -16,5 +16,5 @@ interface ITMResultDialogProps {
|
|
|
16
16
|
declare const TMResultDialog: React.FC<ITMResultDialogProps>;
|
|
17
17
|
export default TMResultDialog;
|
|
18
18
|
export declare class TMResultManager {
|
|
19
|
-
static show(result: ResultInfo[], title: string, id1Caption: string | undefined, id2Caption: string | undefined, customMsg?: string, customDuration?: number): void;
|
|
19
|
+
static show(result: ResultInfo[], title: string, id1Caption: string | undefined, id2Caption: string | undefined, customMsg?: string, customDuration?: number, showSuccessAlert?: boolean): void;
|
|
20
20
|
}
|
|
@@ -29,11 +29,13 @@ const TMResultDialog = ({ title, result, id1Caption, id2Caption }) => {
|
|
|
29
29
|
};
|
|
30
30
|
export default TMResultDialog;
|
|
31
31
|
export class TMResultManager {
|
|
32
|
-
static show(result, title, id1Caption, id2Caption, customMsg, customDuration) {
|
|
32
|
+
static show(result, title, id1Caption, id2Caption, customMsg, customDuration, showSuccessAlert = true) {
|
|
33
33
|
const warningsCount = result.filter(o => o.resultType == ResultTypes.WARNING).length;
|
|
34
34
|
const errorsCount = result.filter(o => o.resultType == ResultTypes.ERROR).length;
|
|
35
35
|
if (warningsCount <= 0 && errorsCount <= 0) {
|
|
36
|
-
|
|
36
|
+
if (showSuccessAlert) {
|
|
37
|
+
ShowAlert({ message: customMsg && customMsg.length > 0 ? customMsg : SDKUI_Localizator.OperationSuccess, mode: 'success', duration: customDuration && customDuration > 0 ? customDuration : 3000, title: title });
|
|
38
|
+
}
|
|
37
39
|
return;
|
|
38
40
|
}
|
|
39
41
|
let container = document.createElement('div');
|
|
@@ -71,6 +71,7 @@ export * from './features/documents/TMRelationViewer';
|
|
|
71
71
|
export * from './features/archive/TMArchive';
|
|
72
72
|
export * from './features/search/TMSearch';
|
|
73
73
|
export * from './features/search/TMSearchResult';
|
|
74
|
+
export * from './features/search/SignatureParamsManager';
|
|
74
75
|
export { default as TMTaskForm } from './features/tasks/TMTaskForm';
|
|
75
76
|
export { default as TMTasksAgenda } from './features/tasks/TMTasksAgenda';
|
|
76
77
|
export { default as TMTasksCalendar } from './features/tasks/TMTasksCalendar';
|
package/lib/components/index.js
CHANGED
|
@@ -81,6 +81,7 @@ export * from './features/archive/TMArchive';
|
|
|
81
81
|
//search
|
|
82
82
|
export * from './features/search/TMSearch';
|
|
83
83
|
export * from './features/search/TMSearchResult';
|
|
84
|
+
export * from './features/search/SignatureParamsManager';
|
|
84
85
|
// tasks
|
|
85
86
|
export { default as TMTaskForm } from './features/tasks/TMTaskForm';
|
|
86
87
|
export { default as TMTasksAgenda } from './features/tasks/TMTasksAgenda';
|
|
@@ -188,8 +188,10 @@ const TMPage = ({ id, objClass = ObjectClasses.None, listDisabled = false, lastR
|
|
|
188
188
|
onStatusChanged: (isModified) => { setSelectionListDisabled((formMode == FormModes.Create || formMode == FormModes.Duplicate) ? true : isModified); },
|
|
189
189
|
onSaved: async (newItem) => {
|
|
190
190
|
try {
|
|
191
|
+
console.log('Saved item', newItem);
|
|
191
192
|
const currentItems = items.map((job) => job);
|
|
192
193
|
const index = currentItems.findIndex((o) => o.id == newItem.id);
|
|
194
|
+
console.log('index', index);
|
|
193
195
|
if (index >= 0)
|
|
194
196
|
currentItems[index] = newItem;
|
|
195
197
|
else
|
|
@@ -221,6 +223,6 @@ const TMPage = ({ id, objClass = ObjectClasses.None, listDisabled = false, lastR
|
|
|
221
223
|
_jsx(TMLayoutItem, { children: selectedItems.length == 1 || formMode == FormModes.Create || formMode == FormModes.Duplicate ?
|
|
222
224
|
_jsx(TMToolbarCard, { onBack: deviceType === DeviceType.MOBILE ? () => setShowList(true) : undefined, title: calcSaveFormTitle(objName, formMode, selectedItems.length == 0 ? -1 : selectedItems[0].id, detailTitlePathKeys), children: getDetailFormWithProps() })
|
|
223
225
|
:
|
|
224
|
-
_jsx(MultipleSelectionManager, {}) })] }) }));
|
|
226
|
+
selectedItems.length > 0 ? _jsx(MultipleSelectionManager, {}) : _jsx(_Fragment, {}) })] }) }));
|
|
225
227
|
};
|
|
226
228
|
export default TMPage;
|
|
@@ -733,7 +733,7 @@ const TMQueryEditor = ({ formMode, inputData, onQDChanged, isExpertMode, showDis
|
|
|
733
733
|
}
|
|
734
734
|
};
|
|
735
735
|
// #endregion
|
|
736
|
-
return (_jsxs(_Fragment, { children: [_jsxs(TMApplyForm, { isModal: false, formMode: formMode, isModified: calcIsModified(formData, formDataOrig), exception: exception, validationItems: validationItems, hasNavigation: false, customToolbarElements: _jsxs(_Fragment, { children: [_jsx(TMButton, { btnStyle: 'toolbar', caption: SDKUI_Localizator.Search, color: 'tertiary', icon: _jsx(IconSearch, {}), disabled: errorsCount > 0, onClick: async () => await onSearchAsync(formData) }), _jsx(TMQueryCountButton, { qd: { ...formData }, lastparams: lastQdParams, onLastQueryParamsChanged: (params) => { setLastQdParams(params); }, disabled: errorsCount > 0, showSpinner: true }), SDK_Globals.tmSession?.SessionDescr?.appModuleID == AppModules.SURFER && _jsx(TMButton, { caption:
|
|
736
|
+
return (_jsxs(_Fragment, { children: [_jsxs(TMApplyForm, { isModal: false, formMode: formMode, isModified: calcIsModified(formData, formDataOrig), exception: exception, validationItems: validationItems, hasNavigation: false, customToolbarElements: _jsxs(_Fragment, { children: [_jsx(TMButton, { btnStyle: 'toolbar', caption: SDKUI_Localizator.Search, color: 'tertiary', icon: _jsx(IconSearch, {}), disabled: errorsCount > 0, onClick: async () => await onSearchAsync(formData) }), _jsx(TMQueryCountButton, { qd: { ...formData }, lastparams: lastQdParams, onLastQueryParamsChanged: (params) => { setLastQdParams(params); }, disabled: errorsCount > 0, showSpinner: true }), SDK_Globals.tmSession?.SessionDescr?.appModuleID == AppModules.SURFER && _jsx(TMButton, { caption: SDKUI_Localizator.PassToArchive, icon: _jsx(IconArchiveDoc, {}), btnStyle: 'toolbar', fontSize: '1.3rem', onClick: () => { ShowAlert({ message: "TODO Passa ad archiviazione", mode: 'info', title: `${"TODO"}`, duration: 3000 }); } }), SDK_Globals.tmSession?.SessionDescr?.appModuleID == AppModules.SURFER && _jsx(TMButton, { caption: "Vai a risultato", icon: _jsx(IconArrowRight, {}), btnStyle: 'toolbar', fontSize: '1.3rem', onClick: () => { ShowAlert({ message: "TODO Vai a risultato", mode: 'info', title: `${"TODO"}`, duration: 3000 }); } })] }), showToolbar: showToolbar, showApply: showApply, showUndo: showUndo, showBack: showBack, onApply: () => applyData(), onClose: () => onClose?.(), onUndo: () => setFormData(formDataOrig), children: [_jsxs(Accordion, { elementAttr: { class: 'tm-query-dx-accordion' }, height: height, multiple: true, collapsible: true, repaintChangesOnly: true, deferRendering: false, animationDuration: 0, onContentReady: (e) => {
|
|
737
737
|
let items = e.component.option("items");
|
|
738
738
|
if (items && items.length > 0) {
|
|
739
739
|
for (let i = 0; i < items.length; i++) {
|
|
@@ -332,7 +332,7 @@ export const renderDTDTooltipContent = (dtd) => {
|
|
|
332
332
|
: _jsxs(StyledTooltipContainer, { children: [_jsx(StyledTooltipItem, { children: `${SDK_Globals.useLocalizedName ? dtd.nameLoc : dtd.name} (${dtd.isView ? 'VID' : 'TID'}: ${dtd.id}, RootTID: ${dtd.rootTID ?? 0})` }), dtd.description && _jsx(StyledTooltipItem, { children: dtd.description }), _jsx(StyledTooltipSeparatorItem, {}), dtd.customData2 === "NOTGRANTED"
|
|
333
333
|
? _jsx(StyledTooltipItem, { style: { fontWeight: 600 }, children: 'Tipo documento NON autorizzato' })
|
|
334
334
|
:
|
|
335
|
-
_jsxs(_Fragment, { children: [_jsx(StyledTooltipItem, { children: `${SDKUI_Localizator.ArchiveConstraint}: ${LocalizeArchiveConstraints(dtd.archiveConstraint)}` }), dtd.isView && dtd.parametricFilterType != ParametricFilterTypes.None && _jsx(StyledTooltipItem, { children: `${SDKUI_Localizator.ParametricFilter}: ${LocalizeParametricFilterTypes(dtd.parametricFilterType)}` }), dtd.isView && dtd.withCheckOption && _jsx(StyledTooltipItem, { children: `${SDKUI_Localizator.ViewWithCheckOption}: ${SDKUI_Localizator.Yes}` }), dtd.isLexProt && dtd.isLexProt > 0 && _jsx(StyledTooltipItem, { children: `${SDKUI_Localizator.LexProt}: ${SDKUI_Localizator.Yes}` }), dtd.isFreeSearchable && _jsx(StyledTooltipItem, { children: `${SDKUI_Localizator.Search_Free}: ${SDKUI_Localizator.Yes}` }), dtd.templateTID && _jsx(StyledTooltipItem, { children: `${SDKUI_Localizator.Template}: ${dtd.templateTID}` }), dtd.traceTID && _jsx(StyledTooltipItem, { children: `${SDKUI_Localizator.Tracing}: ${SDKUI_Localizator.Yes} - ${dtd.templateTID == TemplateTIDs.Trace_DcmtType ? SDKUI_Localizator.Destination : SDKUI_Localizator.Source} ${dtd.traceTID < 0 ? SDKUI_Localizator.Disabled : ''}` }), dtd.wfAppr && _jsx(StyledTooltipItem, { children: `${SDKUI_Localizator.WorkflowApproval}: ${SDKUI_Localizator.Yes}` }),
|
|
335
|
+
_jsxs(_Fragment, { children: [_jsx(StyledTooltipItem, { children: `${SDKUI_Localizator.ArchiveConstraint}: ${LocalizeArchiveConstraints(dtd.archiveConstraint)}` }), dtd.isView && dtd.parametricFilterType != ParametricFilterTypes.None && _jsx(StyledTooltipItem, { children: `${SDKUI_Localizator.ParametricFilter}: ${LocalizeParametricFilterTypes(dtd.parametricFilterType)}` }), dtd.isView && dtd.withCheckOption && _jsx(StyledTooltipItem, { children: `${SDKUI_Localizator.ViewWithCheckOption}: ${SDKUI_Localizator.Yes}` }), dtd.isLexProt && dtd.isLexProt > 0 && _jsx(StyledTooltipItem, { children: `${SDKUI_Localizator.LexProt}: ${SDKUI_Localizator.Yes}` }), dtd.isFreeSearchable && _jsx(StyledTooltipItem, { children: `${SDKUI_Localizator.Search_Free}: ${SDKUI_Localizator.Yes}` }), dtd.templateTID && _jsx(StyledTooltipItem, { children: `${SDKUI_Localizator.Template}: ${dtd.templateTID}` }), dtd.traceTID && _jsx(StyledTooltipItem, { children: `${SDKUI_Localizator.Tracing}: ${SDKUI_Localizator.Yes} - ${dtd.templateTID == TemplateTIDs.Trace_DcmtType ? SDKUI_Localizator.Destination : SDKUI_Localizator.Source} ${dtd.traceTID < 0 ? SDKUI_Localizator.Disabled : ''}` }), dtd.wfAppr && _jsx(StyledTooltipItem, { children: `${SDKUI_Localizator.WorkflowApproval}: ${SDKUI_Localizator.Yes}` }), _jsx(StyledTooltipItem, { children: `${SDKUI_Localizator.BlogCase}: ${dtd.hasBlog ? SDKUI_Localizator.Yes : SDKUI_Localizator.No}` }), _jsx(StyledTooltipItem, { children: `${SDKUI_Localizator.CheckIn}: ${dtd.cico ? SDKUI_Localizator.Yes : SDKUI_Localizator.No}` }), dtd.perm ?
|
|
336
336
|
_jsxs(_Fragment, { children: [_jsx(StyledTooltipItem, { "$color": 'primary', "$marginTop": '5px', children: SDKUI_Localizator.Perms }), _jsx(StyledTooltipSeparatorItem, {}), _jsx(StyledTooltipItem, { children: `${SDKUI_Localizator.Archive}: ${mapAccessLevelToLocalizedString(dtd.perm.canArchive)}` }), _jsx(StyledTooltipItem, { children: `${SDKUI_Localizator.View_Metadato}: ${mapAccessLevelToLocalizedString(dtd.perm.canView)}` }), _jsx(StyledTooltipItem, { children: `${SDKUI_Localizator.Search}: ${mapAccessLevelToLocalizedString(dtd.perm.canSearch)}` }), _jsx(StyledTooltipItem, { children: `${SDKUI_Localizator.Update}: ${mapAccessLevelToLocalizedString(dtd.perm.canUpdate)}` }), _jsx(StyledTooltipItem, { children: `${SDKUI_Localizator.RetrieveFile}: ${mapAccessLevelToLocalizedString(dtd.perm.canRetrieveFile)}` }), _jsx(StyledTooltipItem, { children: `${SDKUI_Localizator.AddOrSubstFile}: ${mapAccessLevelToLocalizedString(dtd.perm.canSubstFile)}` }), _jsx(StyledTooltipItem, { children: `${SDKUI_Localizator.LogDelete}: ${mapAccessLevelToLocalizedString(dtd.perm.canLogicalDelete)}` }), _jsx(StyledTooltipItem, { children: `${SDKUI_Localizator.PhysDelete}: ${mapAccessLevelToLocalizedString(dtd.perm.canPhysicalDelete)}` }), dtd.hasBlog && _jsx(StyledTooltipItem, { children: `${SDKUI_Localizator.Blog_Read}: ${mapAccessLevelToLocalizedString(dtd.perm.canReadBlog)}` }), dtd.hasBlog && _jsx(StyledTooltipItem, { children: `${SDKUI_Localizator.Blog_Write}: ${mapAccessLevelToLocalizedString(dtd.perm.canWriteBlog)}` }), _jsx(StyledTooltipItem, { children: `${SDKUI_Localizator.CheckIn}: ${mapAccessLevelToLocalizedString(dtd.perm.canCICO)}` }), _jsx(StyledTooltipItem, { children: `${SDKUI_Localizator.ChronologyDelete}: ${mapAccessLevelToLocalizedString(dtd.perm.canDelChron)}` })] })
|
|
337
337
|
: dtd.ownershipLevel == OwnershipLevels.DirectOwner || dtd.ownershipLevel == OwnershipLevels.IndirectOwner ?
|
|
338
338
|
_jsxs(_Fragment, { children: [_jsx(StyledTooltipItem, { "$color": 'primary', "$marginTop": '5px', children: SDKUI_Localizator.Perms }), _jsx(StyledTooltipSeparatorItem, {}), _jsx(StyledTooltipItem, { children: `${SDKUI_Localizator.Archive}: ${SDKUI_Localizator.Yes}` }), _jsx(StyledTooltipItem, { children: `${SDKUI_Localizator.View_Metadato}: ${SDKUI_Localizator.Yes}` }), _jsx(StyledTooltipItem, { children: `${SDKUI_Localizator.Search}: ${SDKUI_Localizator.Yes}` }), _jsx(StyledTooltipItem, { children: `${SDKUI_Localizator.Update}: ${SDKUI_Localizator.Yes}` }), _jsx(StyledTooltipItem, { children: `${SDKUI_Localizator.RetrieveFile}: ${SDKUI_Localizator.Yes}` }), _jsx(StyledTooltipItem, { children: `${SDKUI_Localizator.AddOrSubstFile}: ${SDKUI_Localizator.Yes}` }), _jsx(StyledTooltipItem, { children: `${SDKUI_Localizator.LogDelete}: ${SDKUI_Localizator.Yes}` }), _jsx(StyledTooltipItem, { children: `${SDKUI_Localizator.PhysDelete}: ${SDKUI_Localizator.Yes}` }), dtd.hasBlog && _jsx(StyledTooltipItem, { children: `${SDKUI_Localizator.Blog_Read}: ${SDKUI_Localizator.Yes}` }), dtd.hasBlog && _jsx(StyledTooltipItem, { children: `${SDKUI_Localizator.Blog_Write}: ${SDKUI_Localizator.Yes}` }), _jsx(StyledTooltipItem, { children: `${SDKUI_Localizator.CheckIn}: ${SDKUI_Localizator.Yes}` }), _jsx(StyledTooltipItem, { children: `${SDKUI_Localizator.ChronologyDelete}: ${SDKUI_Localizator.Yes}` })] })
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/** Risultato del merge PDF */
|
|
2
|
+
export interface MergePdfResult {
|
|
3
|
+
bytes: Uint8Array;
|
|
4
|
+
blob: Blob;
|
|
5
|
+
pageCount: number;
|
|
6
|
+
}
|
|
7
|
+
/** Risultato con Base64 incluso */
|
|
8
|
+
export interface MergePdfResultWithBase64 extends MergePdfResult {
|
|
9
|
+
base64: string;
|
|
10
|
+
}
|
|
11
|
+
/** Opzioni per il merge */
|
|
12
|
+
export interface MergePdfOptions {
|
|
13
|
+
fileName?: string;
|
|
14
|
+
onProgress?: (current: number, total: number, file: File) => void;
|
|
15
|
+
}
|
|
16
|
+
export declare class MergePdfManager {
|
|
17
|
+
/**
|
|
18
|
+
* Merge principale - Unisce array di File PDF in uno solo
|
|
19
|
+
*/
|
|
20
|
+
static merge(files: File[], options?: MergePdfOptions): Promise<MergePdfResult>;
|
|
21
|
+
/**
|
|
22
|
+
* Merge -> File - Restituisce un oggetto File
|
|
23
|
+
*/
|
|
24
|
+
static mergeToFile(files: File[], fileName?: string, options?: MergePdfOptions): Promise<File>;
|
|
25
|
+
/**
|
|
26
|
+
* Merge + Download - Unisce e scarica automaticamente
|
|
27
|
+
*/
|
|
28
|
+
static mergeAndDownload(files: File[], fileName?: string, options?: MergePdfOptions): Promise<MergePdfResult>;
|
|
29
|
+
/**
|
|
30
|
+
* Blob -> Base64 - Converte un Blob in stringa Base64
|
|
31
|
+
*/
|
|
32
|
+
static blobToBase64(blob: Blob): Promise<string>;
|
|
33
|
+
/**
|
|
34
|
+
* Merge -> Base64 - Unisce e restituisce anche la stringa Base64
|
|
35
|
+
*/
|
|
36
|
+
static mergeToBase64(files: File[], options?: MergePdfOptions): Promise<MergePdfResultWithBase64>;
|
|
37
|
+
/**
|
|
38
|
+
* Merge per Preview - Restituisce solo base64 e pageCount per anteprima
|
|
39
|
+
*/
|
|
40
|
+
static mergeForPreview(files: File[], options?: MergePdfOptions): Promise<{
|
|
41
|
+
base64: string;
|
|
42
|
+
pageCount: number;
|
|
43
|
+
}>;
|
|
44
|
+
}
|
|
45
|
+
export default MergePdfManager;
|