@topconsultnpm/sdkui-react 6.21.0-dev2.4 → 6.21.0-dev2.40
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/TMPanel.d.ts +7 -4
- package/lib/components/base/TMPanel.js +58 -26
- 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/TMDateBox.js +4 -2
- 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 +2 -1
- package/lib/components/editors/TMTextArea.d.ts +2 -0
- package/lib/components/editors/TMTextArea.js +6 -3
- 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 +346 -0
- package/lib/components/features/documents/TMDcmtForm.d.ts +1 -0
- package/lib/components/features/documents/TMDcmtForm.js +107 -29
- 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 +4 -0
- package/lib/components/features/documents/TMMasterDetailDcmts.js +6 -5
- package/lib/components/features/documents/TMMergeToPdfForm.d.ts +26 -0
- package/lib/components/features/documents/TMMergeToPdfForm.js +276 -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 +54 -0
- package/lib/components/features/documents/copyAndMergeDcmtsShared.js +263 -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 +6 -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 +4 -0
- package/lib/components/features/search/TMSearchResult.js +86 -21
- package/lib/components/features/search/TMViewHistoryDcmt.js +1 -2
- 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 +44 -0
- package/lib/components/grids/TMBlogAttachments.d.ts +1 -0
- package/lib/components/grids/TMBlogAttachments.js +38 -12
- package/lib/components/grids/TMBlogsPost.js +7 -1
- package/lib/components/grids/TMBlogsPostUtils.js +11 -17
- 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/GlobalStyles.js +6 -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 +52 -0
- package/lib/helper/SDKUI_Localizator.js +522 -0
- package/lib/helper/TMPdfViewer.js +25 -24
- package/lib/helper/TMUtils.d.ts +19 -0
- package/lib/helper/ZipManager.d.ts +56 -0
- package/lib/helper/ZipManager.js +104 -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 +31 -20
- package/lib/hooks/useDocumentOperations.d.ts +5 -0
- package/lib/hooks/useDocumentOperations.js +90 -20
- 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 +3 -2
|
@@ -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, mergePdfManager,
|
|
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,
|
|
@@ -351,8 +361,9 @@ handleNavigateToWGs, handleNavigateToDossiers, }) => {
|
|
|
351
361
|
onTaskCreateRequest,
|
|
352
362
|
openTaskFormHandler,
|
|
353
363
|
},
|
|
364
|
+
mergePdfManager,
|
|
354
365
|
});
|
|
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;
|
|
366
|
+
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
367
|
const deviceType = useDeviceType();
|
|
357
368
|
const isMobile = deviceType === DeviceType.MOBILE;
|
|
358
369
|
const selectedDocs = getSelectedDcmtsOrFocused(selectedItems, focusedItem);
|
|
@@ -366,6 +377,7 @@ handleNavigateToWGs, handleNavigateToDossiers, }) => {
|
|
|
366
377
|
useEffect(() => {
|
|
367
378
|
setSelectedItems([]);
|
|
368
379
|
updateBatchUpdateForm(false);
|
|
380
|
+
closeDcmtFormHandler();
|
|
369
381
|
setCurrentSearchResults(searchResults);
|
|
370
382
|
if (searchResults.length <= 0) {
|
|
371
383
|
setSelectedSearchResult(undefined);
|
|
@@ -407,6 +419,23 @@ handleNavigateToWGs, handleNavigateToDossiers, }) => {
|
|
|
407
419
|
// Se esiste almeno una riga, seleziona la prima
|
|
408
420
|
setFocusedItem(newDataSource && newDataSource.length > 0 ? newDataSource[0] : undefined);
|
|
409
421
|
}, [selectedSearchResult, checkRelatedDcmtsArchiveCapability, checkManyToManyCapability]);
|
|
422
|
+
// Quando inputDID è fornito e i dati della griglia sono pronti, seleziona il documento corrispondente
|
|
423
|
+
useEffect(() => {
|
|
424
|
+
if (!inputDID || visibleItems.length === 0)
|
|
425
|
+
return;
|
|
426
|
+
const targetItem = visibleItems.find((item) => item.DID == inputDID);
|
|
427
|
+
if (targetItem && focusedItem?.DID != inputDID) {
|
|
428
|
+
setFocusedItem(targetItem);
|
|
429
|
+
}
|
|
430
|
+
}, [inputDID, visibleItems]);
|
|
431
|
+
// Quando inputDID e formAutoOpen sono forniti, apri automaticamente il form del documento
|
|
432
|
+
useEffect(() => {
|
|
433
|
+
if (!inputDID || !formAutoOpen)
|
|
434
|
+
return;
|
|
435
|
+
if (focusedItem?.DID != inputDID)
|
|
436
|
+
return;
|
|
437
|
+
openFormHandler(LayoutModes.Update);
|
|
438
|
+
}, [inputDID, formAutoOpen, focusedItem]);
|
|
410
439
|
useEffect(() => {
|
|
411
440
|
if (!focusedItem)
|
|
412
441
|
return;
|
|
@@ -512,6 +541,21 @@ handleNavigateToWGs, handleNavigateToDossiers, }) => {
|
|
|
512
541
|
return newResults;
|
|
513
542
|
});
|
|
514
543
|
};
|
|
544
|
+
/**
|
|
545
|
+
* Restituisce l'handler onBack per i pannelli, evitando duplicazione di codice.
|
|
546
|
+
* @param isMainPanel - Se true, è il pannello principale dei risultati di ricerca
|
|
547
|
+
*/
|
|
548
|
+
const getOnBackHandler = (isMainPanel = false) => {
|
|
549
|
+
// Se showBackButton è false, non mostrare mai il back
|
|
550
|
+
if (showBackButton === false)
|
|
551
|
+
return undefined;
|
|
552
|
+
// Mobile: mostra back su tutti i pannelli (se showBackButton è definito e non è closable)
|
|
553
|
+
if (isMobile) {
|
|
554
|
+
return (showBackButton !== undefined && !isClosable) ? onBack : undefined;
|
|
555
|
+
}
|
|
556
|
+
// Desktop: mostra back solo sul pannello principale dei risultati (se showBackButton è definito e non è closable)
|
|
557
|
+
return (showBackButton !== undefined && isMainPanel && !isClosable) ? onBack : undefined;
|
|
558
|
+
};
|
|
515
559
|
const removeDcmtFromFavsOrRecents = async () => {
|
|
516
560
|
switch (selectedSearchResult?.category) {
|
|
517
561
|
case "Favorites":
|
|
@@ -601,7 +645,7 @@ handleNavigateToWGs, handleNavigateToDossiers, }) => {
|
|
|
601
645
|
]);
|
|
602
646
|
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
647
|
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]);
|
|
648
|
+
const tmDcmtPreview = useMemo(() => _jsx(TMDcmtPreviewWrapper, { refreshPreviewTrigger: refreshPreviewTrigger, currentDcmt: currentDcmt, onBack: getOnBackHandler() }), [currentDcmt, refreshPreviewTrigger]);
|
|
605
649
|
// Auto-fetch indexing info when drawer is open and focusedItem changes
|
|
606
650
|
useEffect(() => {
|
|
607
651
|
if (!focusedItem || !showIndexingInfo)
|
|
@@ -658,7 +702,6 @@ handleNavigateToWGs, handleNavigateToDossiers, }) => {
|
|
|
658
702
|
}
|
|
659
703
|
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
704
|
}, [selectedSearchResult, focusedItem, indexingInfo, showIndexingInfo, loadingIndexingInfo]);
|
|
661
|
-
const isBoardDisabled = useMemo(() => fromDTD?.hasBlog !== 1, [fromDTD?.hasBlog]);
|
|
662
705
|
const allInitialPanelVisibility = {
|
|
663
706
|
'tmSearchResult': true,
|
|
664
707
|
'tmBlog': false,
|
|
@@ -683,9 +726,7 @@ handleNavigateToWGs, handleNavigateToDossiers, }) => {
|
|
|
683
726
|
title: getTitleHeader(),
|
|
684
727
|
showHeader: showToolbarHeader,
|
|
685
728
|
allowMaximize: !isMobile,
|
|
686
|
-
onBack:
|
|
687
|
-
? (showBackButton ? onBack : undefined)
|
|
688
|
-
: ((!isClosable && context === SearchResultContext.METADATA_SEARCH) || (isMobile && context !== SearchResultContext.METADATA_SEARCH && splitterSize[1] === '100%') ? onBack : undefined),
|
|
729
|
+
onBack: getOnBackHandler(true),
|
|
689
730
|
onClose: isClosable ? onBack : undefined,
|
|
690
731
|
toolbar: searchResutlToolbar
|
|
691
732
|
},
|
|
@@ -695,27 +736,50 @@ handleNavigateToWGs, handleNavigateToDossiers, }) => {
|
|
|
695
736
|
{
|
|
696
737
|
id: 'tmBlog',
|
|
697
738
|
name: SDKUI_Localizator.BlogCase,
|
|
698
|
-
contentOptions: {
|
|
739
|
+
contentOptions: {
|
|
740
|
+
component: tmBlog,
|
|
741
|
+
panelContainer: {
|
|
742
|
+
title: SDKUI_Localizator.BlogCase,
|
|
743
|
+
allowMaximize: !isMobile,
|
|
744
|
+
onBack: getOnBackHandler(),
|
|
745
|
+
}
|
|
746
|
+
},
|
|
699
747
|
toolbarOptions: { icon: _jsx(IconBoard, { fontSize: 24 }), visible: getSearchToolbarVisibility(SDK_Globals.tmSession?.SessionDescr?.appModuleID ?? AppModules.SURFER).tmBlog, orderNumber: 2, isActive: allInitialPanelVisibility['tmBlog'] }
|
|
700
748
|
},
|
|
701
749
|
{
|
|
702
750
|
id: 'tmSysMetadata',
|
|
703
751
|
name: SDKUI_Localizator.MetadataSystem,
|
|
704
|
-
contentOptions: {
|
|
752
|
+
contentOptions: {
|
|
753
|
+
component: tmSysMetadata,
|
|
754
|
+
panelContainer: {
|
|
755
|
+
title: SDKUI_Localizator.MetadataSystem,
|
|
756
|
+
allowMaximize: !isMobile,
|
|
757
|
+
onBack: getOnBackHandler(),
|
|
758
|
+
}
|
|
759
|
+
},
|
|
705
760
|
toolbarOptions: { icon: _jsx(IconDcmtTypeSys, { fontSize: 24 }), visible: getSearchToolbarVisibility(SDK_Globals.tmSession?.SessionDescr?.appModuleID ?? AppModules.SURFER).tmSysMetadata, orderNumber: 3, isActive: allInitialPanelVisibility['tmSysMetadata'] }
|
|
706
761
|
},
|
|
707
762
|
...(context === SearchResultContext.FREE_SEARCH ? [
|
|
708
763
|
{
|
|
709
764
|
id: 'tmFullTextSearch',
|
|
710
765
|
name: SDKUI_Localizator.ResultDetails,
|
|
711
|
-
contentOptions: {
|
|
766
|
+
contentOptions: {
|
|
767
|
+
component: tmFullTextSearch,
|
|
768
|
+
panelContainer: {
|
|
769
|
+
title: SDKUI_Localizator.ResultDetails,
|
|
770
|
+
allowMaximize: !isMobile,
|
|
771
|
+
onBack: getOnBackHandler(),
|
|
772
|
+
}
|
|
773
|
+
},
|
|
712
774
|
toolbarOptions: { icon: _jsx(IconPlatform, { fontSize: 20 }), visible: getSearchToolbarVisibility(SDK_Globals.tmSession?.SessionDescr?.appModuleID ?? AppModules.SURFER).tmFullTextSearch, orderNumber: 4, isActive: allInitialPanelVisibility['tmFullTextSearch'] }
|
|
713
775
|
}
|
|
714
776
|
] : []),
|
|
715
777
|
{
|
|
716
778
|
id: 'tmDcmtPreview',
|
|
717
779
|
name: SDKUI_Localizator.PreviewDocument,
|
|
718
|
-
contentOptions: {
|
|
780
|
+
contentOptions: {
|
|
781
|
+
component: tmDcmtPreview
|
|
782
|
+
},
|
|
719
783
|
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
784
|
}
|
|
721
785
|
], [tmSearchResult, tmBlog, tmSysMetadata, tmDcmtPreview, tmFullTextSearch, showToolbarHeader, context, isMobile]);
|
|
@@ -1240,22 +1304,23 @@ const TMSearchResultSelector = ({ searchResults = [], disableAccordionIfSingleCa
|
|
|
1240
1304
|
};
|
|
1241
1305
|
//#endregion TMSearchResultSelector
|
|
1242
1306
|
const PanelDisabledStateHandler = ({ isBoardDisabled }) => {
|
|
1243
|
-
const { setPanelVisibilityById, setToolbarButtonDisabled
|
|
1307
|
+
const { setPanelVisibilityById, setToolbarButtonDisabled } = useTMPanelManagerContext();
|
|
1244
1308
|
useEffect(() => {
|
|
1245
|
-
|
|
1246
|
-
|
|
1247
|
-
// Chiude il pannello solo se è attualmente visibile e deve essere disabilitato
|
|
1248
|
-
if (isBoardDisabled && panelVisibility['tmBlog']) {
|
|
1309
|
+
if (isBoardDisabled) {
|
|
1310
|
+
setToolbarButtonDisabled('tmBlog', true);
|
|
1249
1311
|
setPanelVisibilityById('tmBlog', false);
|
|
1250
1312
|
}
|
|
1251
|
-
|
|
1313
|
+
else {
|
|
1314
|
+
setToolbarButtonDisabled('tmBlog', false);
|
|
1315
|
+
}
|
|
1316
|
+
}, [isBoardDisabled]);
|
|
1252
1317
|
return null;
|
|
1253
1318
|
};
|
|
1254
|
-
const TMDcmtPreviewWrapper = ({ refreshPreviewTrigger, currentDcmt, isVisible }) => {
|
|
1319
|
+
const TMDcmtPreviewWrapper = ({ refreshPreviewTrigger, currentDcmt, isVisible, onBack }) => {
|
|
1255
1320
|
const { setPanelVisibilityById, toggleMaximize, isResizingActive, countVisibleLeafPanels } = useTMPanelManagerContext();
|
|
1256
1321
|
const deviceType = useDeviceType();
|
|
1257
1322
|
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));
|
|
1323
|
+
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
1324
|
};
|
|
1260
1325
|
// Styled Components
|
|
1261
1326
|
const StyledPlaceholder = styled.div `
|
|
@@ -77,7 +77,6 @@ const TMViewHistoryDcmt = (props) => {
|
|
|
77
77
|
UpdaterDisplayName: user?.name ?? updaterID.toString(),
|
|
78
78
|
CreationTime: row.CreationTime,
|
|
79
79
|
LastUpdateTime: row.LastUpdateTime,
|
|
80
|
-
LastUpdateTimeDisplay: row.LastUpdateTime ? Globalization.getDateTimeDisplayValue(new Date(row.LastUpdateTime)) : '-',
|
|
81
80
|
Version: row.Version,
|
|
82
81
|
CheckInTime: row.CheckInTime,
|
|
83
82
|
IsLex: row.IsLex ? row.IsLex.toString() === '1' : false,
|
|
@@ -277,7 +276,7 @@ const TMViewHistoryDcmt = (props) => {
|
|
|
277
276
|
{ dataField: "Version", caption: "V.", dataType: 'number' },
|
|
278
277
|
{ dataField: "FileSizeDisplay", caption: SDKUI_Localizator.Size },
|
|
279
278
|
{ dataField: "UpdaterDisplayName", caption: SDKUI_Localizator.Author },
|
|
280
|
-
{ dataField: "
|
|
279
|
+
{ dataField: "LastUpdateTime", caption: SDKUI_Localizator.LastUpdateTime, dataType: 'datetime', format: 'dd/MM/yyyy HH:mm:ss', },
|
|
281
280
|
]);
|
|
282
281
|
}, [showId]);
|
|
283
282
|
return _jsx(TMModal, { title: `${SDKUI_Localizator.SearchResult} \u2014 ${SDKUI_Localizator.History + ": " + (fromDTD.nameLoc ?? SDKUI_Localizator.Document) + " (DID:" + inputDcmt.DID})`, width: calcResponsiveSizes(deviceType, '700px', '700px', '95%'), height: calcResponsiveSizes(deviceType, '80%', '80%', '95%'), onClose: onClose, children: _jsx(TMLayoutWaitingContainer, { direction: 'vertical', showWaitPanel: showWaitPanel, showWaitPanelPrimary: showPrimary, showWaitPanelSecondary: showSecondary, waitPanelTitle: waitPanelTitle, waitPanelTextPrimary: waitPanelTextPrimary, waitPanelValuePrimary: waitPanelValuePrimary, waitPanelMaxValuePrimary: waitPanelMaxValuePrimary, waitPanelTextSecondary: waitPanelTextSecondary, waitPanelValueSecondary: waitPanelValueSecondary, waitPanelMaxValueSecondary: waitPanelMaxValueSecondary, isCancelable: true, abortController: abortController, children: _jsxs(TMLayoutWaitingContainer, { direction: 'vertical', showWaitPanel: showLocalWaitPanel, showWaitPanelPrimary: showLocalPrimary, waitPanelTitle: waitLocalPanelTitle, waitPanelTextPrimary: waitLocalPanelTextPrimary, waitPanelValuePrimary: waitLocalPanelValuePrimary, waitPanelMaxValuePrimary: waitLocalPanelMaxValuePrimary, isCancelable: true, abortController: abortLocalController, children: [_jsx(TMDataGrid, { dataSource: dcmtHistory, dataColumns: dataColumns, focusedRowKey: focusedRowKey, selection: selection, customContextMenuItems: customContextMenuItems, onFocusedRowChanged: onFocusedRowChanged, onCellDblClick: onCellDblClick, noDataText: SDKUI_Localizator.NoDataToDisplay, showSearchPanel: showSearch }), (showDcmtForm && selectedDcmt !== undefined) &&
|
|
@@ -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,23 @@ 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
|
+
return;
|
|
211
|
+
setEndpoint(matchingEndpoint);
|
|
212
|
+
if (props.defaultLoginValues.archiveId)
|
|
213
|
+
setManualArchiveID(props.defaultLoginValues.archiveId);
|
|
214
|
+
setAuthMode(props.defaultLoginValues.authenticationMode ?? AuthenticationModes.TopMedia);
|
|
215
|
+
if (props.defaultLoginValues.username)
|
|
216
|
+
setUsername(props.defaultLoginValues.username);
|
|
217
|
+
if (props.defaultLoginValues.domain)
|
|
218
|
+
setAuthDomain(props.defaultLoginValues.domain);
|
|
219
|
+
if (props.defaultLoginValues.behalfUsername)
|
|
220
|
+
setUsernameOnBehalf(props.defaultLoginValues.behalfUsername);
|
|
221
|
+
}, [props.defaultLoginValues, props.endpoints]);
|
|
204
222
|
useEffect(() => {
|
|
205
223
|
if (!hasSingleOption)
|
|
206
224
|
return;
|
|
@@ -216,6 +234,9 @@ const TMLoginForm = (props) => {
|
|
|
216
234
|
setDcmtArchive(undefined);
|
|
217
235
|
}, [isSuccess]);
|
|
218
236
|
useEffect(() => {
|
|
237
|
+
// Skip default endpoint
|
|
238
|
+
if (props.defaultLoginValues && props.endpoints.some(ep => ep.URL === props.defaultLoginValues.endpoint))
|
|
239
|
+
return;
|
|
219
240
|
let preferredRapidAccess = localRa?.find(ar => ar.preferred === true);
|
|
220
241
|
if (preferredRapidAccess) {
|
|
221
242
|
handleRapidAccessSelection(preferredRapidAccess);
|
|
@@ -240,6 +261,29 @@ const TMLoginForm = (props) => {
|
|
|
240
261
|
useEffect(() => {
|
|
241
262
|
getArchivesAsync();
|
|
242
263
|
}, [tmSession]);
|
|
264
|
+
// Default values and step management
|
|
265
|
+
useEffect(() => {
|
|
266
|
+
if (!props.defaultLoginValues || !props.defaultLoginValues.archiveId || defaultLoginAppliedRef.current || !tmSession || !tmSession.TopMediaServer?.BaseAddress)
|
|
267
|
+
return;
|
|
268
|
+
defaultLoginAppliedRef.current = true;
|
|
269
|
+
const archiveId = props.defaultLoginValues.archiveId;
|
|
270
|
+
const validateAndAdvance = async () => {
|
|
271
|
+
try {
|
|
272
|
+
TMSpinner.show({ description: '' });
|
|
273
|
+
const archiveEngine = tmSession.NewArchiveEngine();
|
|
274
|
+
const result = await archiveEngine.RetrieveAsync(archiveId);
|
|
275
|
+
setDcmtArchive(result);
|
|
276
|
+
setLoginStep(2);
|
|
277
|
+
}
|
|
278
|
+
catch (e) {
|
|
279
|
+
TMExceptionBoxManager.show({ exception: e });
|
|
280
|
+
}
|
|
281
|
+
finally {
|
|
282
|
+
TMSpinner.hide();
|
|
283
|
+
}
|
|
284
|
+
};
|
|
285
|
+
validateAndAdvance();
|
|
286
|
+
}, [tmSession, props.defaultLoginValues]);
|
|
243
287
|
useEffect(() => {
|
|
244
288
|
if (!saveLoginEnable || !dcmtArchive)
|
|
245
289
|
return;
|
|
@@ -5,6 +5,7 @@ interface TMBlogAttachmentsProps {
|
|
|
5
5
|
layoutMode: "compact" | "extended";
|
|
6
6
|
attachments: Array<BlogPostAttachment>;
|
|
7
7
|
isSelected: boolean;
|
|
8
|
+
isLoading?: boolean;
|
|
8
9
|
searchText: string;
|
|
9
10
|
dcmtTypeDescriptors: Map<number, DcmtTypeDescriptor>;
|
|
10
11
|
treeFs: FileItem | undefined;
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
1
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { SDK_Globals } from "@topconsultnpm/sdk-ts";
|
|
3
3
|
import { getAttachmentInfo, lightenColor, removeFileExtension } from "./TMBlogsPostUtils";
|
|
4
4
|
import TMDcmtIcon from "../features/documents/TMDcmtIcon";
|
|
5
5
|
import { IconAttachment } from "../../helper";
|
|
6
6
|
const TMBlogAttachments = (props) => {
|
|
7
|
-
const { layoutMode, attachments, isSelected, searchText, dcmtTypeDescriptors, treeFs, draftLatestInfoMap, archivedDocumentMap, handleAttachmentFocus, openDcmtForm } = props;
|
|
7
|
+
const { layoutMode, attachments, isSelected, isLoading = false, searchText, dcmtTypeDescriptors, treeFs, draftLatestInfoMap, archivedDocumentMap, handleAttachmentFocus, openDcmtForm } = props;
|
|
8
8
|
const handleMouseEnter = (e, blogPostAttachment, name, fileExt) => {
|
|
9
9
|
e.currentTarget.style.boxShadow = '0 4px 8px rgba(0, 0, 0, 0.15)';
|
|
10
10
|
e.currentTarget.style.backgroundColor = isSelected ? lightenColor("#135596", 40) : '#cfcfcf';
|
|
@@ -24,7 +24,7 @@ const TMBlogAttachments = (props) => {
|
|
|
24
24
|
};
|
|
25
25
|
return _jsx("div", { style: { width: "100%", marginTop: "5px", overflow: "hidden" }, children: attachments.map((blogPostAttachment, index) => {
|
|
26
26
|
const { name, nameElement, tooltipContent, fileExt, archivedDocumentsExist, draftExist } = getAttachmentInfo(blogPostAttachment, treeFs, draftLatestInfoMap, archivedDocumentMap, dcmtTypeDescriptors, isSelected, searchText);
|
|
27
|
-
return _jsx("div", { onDoubleClick: (e) => onDoubleClick(e, blogPostAttachment, name, fileExt), onMouseEnter: (e) => handleMouseEnter(e, blogPostAttachment, name, fileExt), onMouseLeave: (e) => handleMouseLeave(e), style: {
|
|
27
|
+
return _jsx("div", { onDoubleClick: (e) => !isLoading && onDoubleClick(e, blogPostAttachment, name, fileExt), onMouseEnter: (e) => !isLoading && handleMouseEnter(e, blogPostAttachment, name, fileExt), onMouseLeave: (e) => !isLoading && handleMouseLeave(e), style: {
|
|
28
28
|
display: layoutMode === "extended" ? "inline-flex" : "flex",
|
|
29
29
|
padding: '4px 8px',
|
|
30
30
|
margin: '4px',
|
|
@@ -32,17 +32,43 @@ const TMBlogAttachments = (props) => {
|
|
|
32
32
|
borderRadius: '8px',
|
|
33
33
|
boxShadow: '0 2px 4px rgba(0, 0, 0, 0.1)',
|
|
34
34
|
backgroundColor: isSelected ? "#135596" : "#ffffff",
|
|
35
|
-
cursor: "pointer",
|
|
35
|
+
cursor: isLoading ? "default" : "pointer",
|
|
36
36
|
fontSize: '0.9rem',
|
|
37
37
|
color: isSelected ? "#ffffff" : "#000000",
|
|
38
|
-
}, children:
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
38
|
+
}, children: _jsx("div", { style: { alignItems: 'center', display: 'flex', minWidth: 0 }, children: isLoading ? (_jsxs(_Fragment, { children: [_jsx("div", { style: {
|
|
39
|
+
width: '16px',
|
|
40
|
+
height: '16px',
|
|
41
|
+
marginRight: '8px',
|
|
42
|
+
border: '2px solid #ddd',
|
|
43
|
+
borderTop: `2px solid ${isSelected ? '#fff' : '#135596'}`,
|
|
44
|
+
borderRadius: '50%',
|
|
45
|
+
animation: 'spin 1s linear infinite',
|
|
46
|
+
flexShrink: 0,
|
|
47
|
+
} }), _jsx("span", { style: {
|
|
48
|
+
background: isSelected ? 'rgba(255,255,255,0.3)' : 'linear-gradient(90deg, #e0e0e0 25%, #f0f0f0 50%, #e0e0e0 75%)',
|
|
49
|
+
backgroundSize: '200% 100%',
|
|
50
|
+
animation: 'shimmer 1.5s infinite',
|
|
51
|
+
borderRadius: '4px',
|
|
52
|
+
width: '120px',
|
|
53
|
+
height: '14px',
|
|
54
|
+
display: 'inline-block',
|
|
55
|
+
} }), _jsx("style", { children: `
|
|
56
|
+
@keyframes spin {
|
|
57
|
+
0% { transform: rotate(0deg); }
|
|
58
|
+
100% { transform: rotate(360deg); }
|
|
59
|
+
}
|
|
60
|
+
@keyframes shimmer {
|
|
61
|
+
0% { background-position: -200% 0; }
|
|
62
|
+
100% { background-position: 200% 0; }
|
|
63
|
+
}
|
|
64
|
+
` })] })) : (_jsxs(_Fragment, { children: [(!archivedDocumentsExist && !draftExist) ?
|
|
65
|
+
_jsx(IconAttachment, { style: { marginRight: "5px", flexShrink: 0 } }) :
|
|
66
|
+
_jsx("div", { style: { marginRight: "10px", flexShrink: 0 }, children: _jsx(TMDcmtIcon, { tid: blogPostAttachment.tid, did: blogPostAttachment.did, fileExtension: fileExt, downloadMode: 'openInNewWindow', tooltipContent: tooltipContent }) }), _jsx("span", { title: layoutMode === 'compact' ? name + " (DID: " + blogPostAttachment.did + ")" : undefined, style: {
|
|
67
|
+
whiteSpace: 'nowrap',
|
|
68
|
+
overflow: 'hidden',
|
|
69
|
+
textOverflow: 'ellipsis',
|
|
70
|
+
minWidth: 0,
|
|
71
|
+
}, children: nameElement })] })) }) }, blogPostAttachment.did + "_" + index);
|
|
46
72
|
}) });
|
|
47
73
|
};
|
|
48
74
|
export default TMBlogAttachments;
|
|
@@ -48,6 +48,7 @@ const TMBlogsPost = (props) => {
|
|
|
48
48
|
const [firstUnreadPost, setFirstUnreadPost] = useState(undefined);
|
|
49
49
|
// State to manage the focused file
|
|
50
50
|
const [dcmtTypeDescriptors, setDcmtTypeDescriptors] = useState(new Map());
|
|
51
|
+
const [descriptorsLoaded, setDescriptorsLoaded] = useState(false);
|
|
51
52
|
const [currentHeader, setCurrentHeader] = useState(header);
|
|
52
53
|
const [isHeaderHidden, setIsHeaderHidden] = useState(isHeaderFullyHidden(currentHeader));
|
|
53
54
|
const [localShowId, setLocalShowId] = useState(false);
|
|
@@ -147,8 +148,13 @@ const TMBlogsPost = (props) => {
|
|
|
147
148
|
useEffect(() => {
|
|
148
149
|
(async () => {
|
|
149
150
|
if (showExtendedAttachments) {
|
|
151
|
+
setDescriptorsLoaded(false);
|
|
150
152
|
const descriptors = await getDcmtTypeDescriptor(posts);
|
|
151
153
|
setDcmtTypeDescriptors(descriptors);
|
|
154
|
+
setDescriptorsLoaded(true);
|
|
155
|
+
}
|
|
156
|
+
else {
|
|
157
|
+
setDescriptorsLoaded(true);
|
|
152
158
|
}
|
|
153
159
|
const publishedBlogssLength = posts.filter(newsFeed => newsFeed.isSys !== 1 && newsFeed.isDel !== 1).length;
|
|
154
160
|
const systemBlogsLength = posts.filter(newsFeed => newsFeed.isSys === 1).length;
|
|
@@ -679,7 +685,7 @@ const TMBlogsPost = (props) => {
|
|
|
679
685
|
textDecoration: blogPost.isDel ? 'line-through' : 'none',
|
|
680
686
|
boxShadow: isFocused ? "0 4px 12px rgba(19, 85, 150, 0.6)" : "none",
|
|
681
687
|
cursor: 'pointer',
|
|
682
|
-
}, children: [_jsx(BlogPostTitle, { displayMode: displayMode, layoutMode: layoutMode, blogPost: blogPost, isSelected: isSelected, isOwnComment: isOwnComment, searchText: searchText, isSys: isSys, isHomeBlogPost: isHomeBlogPost, showId: localShowId, handleNavigateToWGs: handleNavigateToWGs, handleNavigateToDossiers: handleNavigateToDossiers }), isNew && _jsx(NewBadge, { layoutMode: layoutMode }), _jsx("div", { style: { fontSize: '1rem', color: "#000", marginTop: "10px", overflow: "hidden" }, children: _jsx(TMHtmlContentDisplay, { markup: blogPost.description ?? '-', searchText: searchText, isSelected: isSelected }) }), showExtendedAttachments && blogPost.attachments && blogPost.attachments.length > 0 && (_jsx(TMBlogAttachments, { attachments: blogPost.attachments, layoutMode: layoutMode, isSelected: isSelected, searchText: searchText, dcmtTypeDescriptors: dcmtTypeDescriptors, treeFs: treeFs, draftLatestInfoMap: draftLatestInfoMap, archivedDocumentMap: archivedDocumentMap, handleAttachmentFocus: handleFocusedAttachment, openDcmtForm: openDcmtForm }))] }, `${id}-blogpost-${blogPost.id}`) })] }, "blog-post-wrapper-" + id + "-" + blogPost.id);
|
|
688
|
+
}, children: [_jsx(BlogPostTitle, { displayMode: displayMode, layoutMode: layoutMode, blogPost: blogPost, isSelected: isSelected, isOwnComment: isOwnComment, searchText: searchText, isSys: isSys, isHomeBlogPost: isHomeBlogPost, showId: localShowId, handleNavigateToWGs: handleNavigateToWGs, handleNavigateToDossiers: handleNavigateToDossiers }), isNew && _jsx(NewBadge, { layoutMode: layoutMode }), _jsx("div", { style: { fontSize: '1rem', color: "#000", marginTop: "10px", overflow: "hidden" }, children: _jsx(TMHtmlContentDisplay, { markup: blogPost.description ?? '-', searchText: searchText, isSelected: isSelected }) }), showExtendedAttachments && blogPost.attachments && blogPost.attachments.length > 0 && (_jsx(TMBlogAttachments, { attachments: blogPost.attachments, layoutMode: layoutMode, isSelected: isSelected, isLoading: !descriptorsLoaded, searchText: searchText, dcmtTypeDescriptors: dcmtTypeDescriptors, treeFs: treeFs, draftLatestInfoMap: draftLatestInfoMap, archivedDocumentMap: archivedDocumentMap, handleAttachmentFocus: handleFocusedAttachment, openDcmtForm: openDcmtForm }))] }, `${id}-blogpost-${blogPost.id}`) })] }, "blog-post-wrapper-" + id + "-" + blogPost.id);
|
|
683
689
|
}), _jsx("div", { ref: bottomRef })] }), _jsx(TMContextMenu, { items: menuItems, target: `#${id}-blogs-wrapper`, externalControl: {
|
|
684
690
|
visible: menuVisible,
|
|
685
691
|
position: menuPosition,
|
|
@@ -142,27 +142,21 @@ export const getAttachmentInfo = (attachment, treeFs, draftLatestInfoMap, archiv
|
|
|
142
142
|
return { name, nameElement, tooltipContent, folderId, fileExt, draftExist, archivedDocumentsExist };
|
|
143
143
|
};
|
|
144
144
|
export const getDcmtTypeDescriptor = async (blogPosts) => {
|
|
145
|
-
// Create a Map to store tid as key and DcmtTypeDescriptor as value
|
|
146
145
|
const dcmtTypeMap = new Map();
|
|
147
|
-
// Collect unique
|
|
148
|
-
const
|
|
149
|
-
for (const
|
|
150
|
-
if (
|
|
151
|
-
|
|
152
|
-
if (attachment.tid) {
|
|
153
|
-
uniqueTids.add(attachment.tid);
|
|
154
|
-
}
|
|
155
|
-
}
|
|
146
|
+
// Collect unique tid-did pairs to avoid duplicate HTTP calls
|
|
147
|
+
const tidDidMap = new Map();
|
|
148
|
+
for (const { tid, did } of blogPosts.flatMap(bp => bp.attachments ?? [])) {
|
|
149
|
+
if (tid !== undefined && !tidDidMap.has(tid)) {
|
|
150
|
+
tidDidMap.set(tid, did);
|
|
156
151
|
}
|
|
157
152
|
}
|
|
158
|
-
// Fetch all descriptors in parallel
|
|
159
|
-
|
|
160
|
-
const
|
|
161
|
-
if (
|
|
162
|
-
dcmtTypeMap.set(tid,
|
|
153
|
+
// Fetch all descriptors in parallel
|
|
154
|
+
await Promise.all(Array.from(tidDidMap.entries()).map(async ([tid, did]) => {
|
|
155
|
+
const descriptor = await DcmtTypeListCacheService.GetWithNotGrantedAsync(tid, did);
|
|
156
|
+
if (descriptor) {
|
|
157
|
+
dcmtTypeMap.set(tid, descriptor);
|
|
163
158
|
}
|
|
164
|
-
});
|
|
165
|
-
await Promise.all(promises);
|
|
159
|
+
}));
|
|
166
160
|
return dcmtTypeMap;
|
|
167
161
|
};
|
|
168
162
|
export const BlogPostHomeHeader = (header, classId, isSelected, searchText, headerClickCallback) => {
|
|
@@ -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}` })] })
|
|
@@ -6,6 +6,12 @@ const GlobalStyle = createGlobalStyle `
|
|
|
6
6
|
* {
|
|
7
7
|
font-family: var(--base-font-family, "Inter"), sans-serif;
|
|
8
8
|
}
|
|
9
|
+
|
|
10
|
+
.dx-widget input,
|
|
11
|
+
.dx-widget textarea {
|
|
12
|
+
font-family: var(--base-font-family, "Inter"), sans-serif !important;
|
|
13
|
+
}
|
|
14
|
+
|
|
9
15
|
.dx-filemanager-dirs-tree-item-text{
|
|
10
16
|
font-size: var(--base-font-size, 13px);
|
|
11
17
|
}
|