@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.
Files changed (80) hide show
  1. package/lib/components/base/TMAccordionNew.js +1 -0
  2. package/lib/components/base/TMAreaManager.js +19 -3
  3. package/lib/components/base/TMDataGrid.js +2 -2
  4. package/lib/components/base/TMPanel.d.ts +7 -4
  5. package/lib/components/base/TMPanel.js +58 -26
  6. package/lib/components/choosers/TMDistinctValues.js +35 -21
  7. package/lib/components/choosers/TMUserChooser.d.ts +4 -0
  8. package/lib/components/choosers/TMUserChooser.js +7 -5
  9. package/lib/components/editors/TMDateBox.js +4 -2
  10. package/lib/components/editors/TMFormulaEditor.d.ts +2 -0
  11. package/lib/components/editors/TMFormulaEditor.js +75 -21
  12. package/lib/components/editors/TMMetadataValues.js +2 -1
  13. package/lib/components/editors/TMRadioButton.js +2 -1
  14. package/lib/components/editors/TMTextArea.d.ts +2 -0
  15. package/lib/components/editors/TMTextArea.js +6 -3
  16. package/lib/components/editors/TMTextBox.d.ts +2 -0
  17. package/lib/components/editors/TMTextBox.js +3 -3
  18. package/lib/components/features/archive/TMArchive.js +1 -1
  19. package/lib/components/features/documents/TMCopyToFolderForm.d.ts +24 -0
  20. package/lib/components/features/documents/TMCopyToFolderForm.js +346 -0
  21. package/lib/components/features/documents/TMDcmtForm.d.ts +1 -0
  22. package/lib/components/features/documents/TMDcmtForm.js +107 -29
  23. package/lib/components/features/documents/TMDcmtFormActionButtons.js +17 -2
  24. package/lib/components/features/documents/TMDcmtPreview.d.ts +1 -0
  25. package/lib/components/features/documents/TMDcmtPreview.js +2 -2
  26. package/lib/components/features/documents/TMDcmtTasks.d.ts +1 -0
  27. package/lib/components/features/documents/TMDcmtTasks.js +2 -2
  28. package/lib/components/features/documents/TMDownloadRelationViewerSection.d.ts +23 -0
  29. package/lib/components/features/documents/TMDownloadRelationViewerSection.js +173 -0
  30. package/lib/components/features/documents/TMFileUploader.js +1 -1
  31. package/lib/components/features/documents/TMMasterDetailDcmts.d.ts +4 -0
  32. package/lib/components/features/documents/TMMasterDetailDcmts.js +6 -5
  33. package/lib/components/features/documents/TMMergeToPdfForm.d.ts +26 -0
  34. package/lib/components/features/documents/TMMergeToPdfForm.js +276 -0
  35. package/lib/components/features/documents/TMRelationViewer.d.ts +13 -0
  36. package/lib/components/features/documents/TMRelationViewer.js +75 -6
  37. package/lib/components/features/documents/copyAndMergeDcmtsShared.d.ts +54 -0
  38. package/lib/components/features/documents/copyAndMergeDcmtsShared.js +263 -0
  39. package/lib/components/features/search/SignatureParamsManager.d.ts +70 -0
  40. package/lib/components/features/search/SignatureParamsManager.js +145 -0
  41. package/lib/components/features/search/TMSavedQuerySelector.d.ts +2 -2
  42. package/lib/components/features/search/TMSavedQuerySelector.js +3 -2
  43. package/lib/components/features/search/TMSearch.d.ts +6 -1
  44. package/lib/components/features/search/TMSearch.js +16 -10
  45. package/lib/components/features/search/TMSearchQueryPanel.js +1 -1
  46. package/lib/components/features/search/TMSearchResult.d.ts +4 -0
  47. package/lib/components/features/search/TMSearchResult.js +86 -21
  48. package/lib/components/features/search/TMViewHistoryDcmt.js +1 -2
  49. package/lib/components/features/workflow/diagram/queryDescriptorParser.js +3 -6
  50. package/lib/components/forms/Login/TMLoginForm.d.ts +9 -0
  51. package/lib/components/forms/Login/TMLoginForm.js +44 -0
  52. package/lib/components/grids/TMBlogAttachments.d.ts +1 -0
  53. package/lib/components/grids/TMBlogAttachments.js +38 -12
  54. package/lib/components/grids/TMBlogsPost.js +7 -1
  55. package/lib/components/grids/TMBlogsPostUtils.js +11 -17
  56. package/lib/components/index.d.ts +1 -0
  57. package/lib/components/index.js +1 -0
  58. package/lib/components/pages/TMPage.js +3 -1
  59. package/lib/components/query/TMQueryEditor.js +1 -1
  60. package/lib/components/viewers/TMTidViewer.js +1 -1
  61. package/lib/helper/GlobalStyles.js +6 -0
  62. package/lib/helper/SDKUI_Globals.d.ts +15 -0
  63. package/lib/helper/SDKUI_Globals.js +15 -1
  64. package/lib/helper/SDKUI_Localizator.d.ts +52 -0
  65. package/lib/helper/SDKUI_Localizator.js +522 -0
  66. package/lib/helper/TMPdfViewer.js +25 -24
  67. package/lib/helper/TMUtils.d.ts +19 -0
  68. package/lib/helper/ZipManager.d.ts +56 -0
  69. package/lib/helper/ZipManager.js +104 -0
  70. package/lib/helper/index.d.ts +1 -0
  71. package/lib/helper/index.js +1 -0
  72. package/lib/hooks/useDataUserIdItem.js +6 -4
  73. package/lib/hooks/useDcmtOperations.d.ts +9 -2
  74. package/lib/hooks/useDcmtOperations.js +31 -20
  75. package/lib/hooks/useDocumentOperations.d.ts +5 -0
  76. package/lib/hooks/useDocumentOperations.js +90 -20
  77. package/lib/hooks/useForm.js +5 -2
  78. package/lib/hooks/useResizeObserver.d.ts +1 -1
  79. package/lib/hooks/useResizeObserver.js +16 -15
  80. 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: showBackButton !== undefined
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: { component: tmBlog, panelContainer: { title: SDKUI_Localizator.BlogCase, allowMaximize: !isMobile } },
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: { component: tmSysMetadata, panelContainer: { title: SDKUI_Localizator.MetadataSystem, allowMaximize: !isMobile } },
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: { component: tmFullTextSearch, panelContainer: { title: SDKUI_Localizator.ResultDetails, allowMaximize: !isMobile } },
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: { component: tmDcmtPreview },
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, panelVisibility } = useTMPanelManagerContext();
1307
+ const { setPanelVisibilityById, setToolbarButtonDisabled } = useTMPanelManagerContext();
1244
1308
  useEffect(() => {
1245
- // Aggiorna lo stato disabled del bottone toolbar
1246
- setToolbarButtonDisabled('tmBlog', isBoardDisabled);
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
- }, [isBoardDisabled, setPanelVisibilityById, setToolbarButtonDisabled, panelVisibility]);
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: "LastUpdateTimeDisplay", caption: SDKUI_Localizator.LastUpdateTime },
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: _jsxs("div", { style: { alignItems: 'center', display: 'flex', minWidth: 0 }, children: [(!archivedDocumentsExist && !draftExist) ?
39
- _jsx(IconAttachment, { style: { marginRight: "5px", flexShrink: 0 } }) :
40
- _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: {
41
- whiteSpace: 'nowrap',
42
- overflow: 'hidden',
43
- textOverflow: 'ellipsis',
44
- minWidth: 0,
45
- }, children: nameElement })] }) }, blogPostAttachment.did + "_" + index);
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 tids first to avoid duplicate HTTP calls
148
- const uniqueTids = new Set();
149
- for (const blogPost of blogPosts) {
150
- if (blogPost.attachments) {
151
- for (const attachment of blogPost.attachments) {
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 instead of sequentially
159
- const promises = Array.from(uniqueTids).map(async (tid) => {
160
- const dcmtTypeDescriptor = await DcmtTypeListCacheService.GetAsync(tid, true);
161
- if (dcmtTypeDescriptor) {
162
- dcmtTypeMap.set(tid, dcmtTypeDescriptor);
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';
@@ -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: "Passa ad archiviazione", 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) => {
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}` }), dtd.hasBlog && _jsx(StyledTooltipItem, { children: `${SDKUI_Localizator.BlogCase}: ${SDKUI_Localizator.Yes}` }), _jsx(StyledTooltipItem, { children: `${SDKUI_Localizator.CheckIn}: ${dtd.cico ? SDKUI_Localizator.Yes : SDKUI_Localizator.No}` }), dtd.perm ?
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
  }