@topconsultnpm/sdkui-react-beta 6.13.39 → 6.13.41

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.
@@ -1,10 +1,10 @@
1
- import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
1
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import React, { useCallback, useEffect, useMemo, useState } from 'react';
3
3
  import { SDK_Globals, DataColumnTypes, MetadataDataDomains, DataListViewModes, MetadataFormats, LayoutModes, TemplateTIDs, DcmtTypeListCacheService, AccessLevels, SystemMIDsAsNumber, ArchiveConstraints } from '@topconsultnpm/sdk-ts-beta';
4
4
  import styled from 'styled-components';
5
5
  import { getCommandsMenuItems, getSelectedDcmtsOrFocused } from './TMSearchResultsMenuItems';
6
6
  import { ContextMenu } from 'devextreme-react';
7
- import { genUniqueId, IconShow, IconBoard, IconDcmtTypeSys, IconDetailDcmts, SDKUI_Localizator, IconTag, IconDetails, IconCommand, IconDelete, IconRefresh, IconMenuVertical, IconDownload, IconSignature, deepCompare, getDataColumnName, searchResultDescriptorToSimpleArray, IconArchive, IconActivityLog, IconStar, IconFreeSearch, IconChevronDown, searchResultToMetadataValues, SDKUI_Globals, IconArrowLeft } from '../../../helper';
7
+ import { genUniqueId, IconShow, IconBoard, IconDcmtTypeSys, IconDetailDcmts, SDKUI_Localizator, IconDelete, IconRefresh, IconMenuVertical, IconDownload, IconSignature, deepCompare, getDataColumnName, searchResultDescriptorToSimpleArray, IconArchive, IconActivityLog, IconStar, IconFreeSearch, IconChevronDown, searchResultToMetadataValues, SDKUI_Globals, IconSearchCheck, IconBatchUpdate } from '../../../helper';
8
8
  import { useDcmtOperations } from '../../../hooks/useDcmtOperations';
9
9
  import { useInputAttachmentsDialog, useInputCvtFormatDialog } from '../../../hooks/useInputDialog';
10
10
  import { DcmtOperationTypes, FormModes, SearchResultContext, DownloadTypes } from '../../../ts';
@@ -25,7 +25,7 @@ import { TMSaveFormButtonPrevious, TMSaveFormButtonNext } from '../../forms/TMSa
25
25
  import TMDataListItemViewer from '../../viewers/TMDataListItemViewer';
26
26
  import TMTidViewer from '../../viewers/TMTidViewer';
27
27
  import { hasDetailRelations, hasMasterRelations } from '../../../helper/dcmtsHelper';
28
- import TMDcmtPreview, { TMNothingToShow } from '../documents/TMDcmtPreview';
28
+ import TMDcmtPreview from '../documents/TMDcmtPreview';
29
29
  import TMFloatingToolbar from '../../base/TMFloatingToolbar';
30
30
  import { WorkFlowApproveRejectPopUp, WorkFlowOperationButtons, WorkFlowReAssignPopUp } from '../workflow/TMWorkflowPopup';
31
31
  import TMMasterDetailDcmts from '../documents/TMMasterDetailDcmts';
@@ -33,12 +33,7 @@ import TMBatchUpdateForm from '../../features/documents/TMBatchUpdateForm';
33
33
  import TMDcmtForm from '../documents/TMDcmtForm';
34
34
  import TMDcmtBlog from '../documents/TMDcmtBlog';
35
35
  import TMDcmtIcon from '../documents/TMDcmtIcon';
36
- import TMPanel from '../../base/TMPanel';
37
- import TMCommandsPanel from '../../sidebar/TMCommandsPanel';
38
- //#endregion region Interfaces, Types and Enums
39
- //#region Styled Components
40
- const StyledContainer = styled.div ` overflow: hidden; background-color: #ffffff; width: calc(100%); height: calc(100%); display: flex; gap: 10px; `;
41
- //#endregion Styled Components
36
+ import TMPanelManager from '../../base/TMPanelManager';
42
37
  //#region Internal Components
43
38
  const CommandsContextMenu = React.memo(({ target, menuItems, allowPin }) => {
44
39
  return (_jsx(ContextMenu, { showEvent: 'click', dataSource: menuItems, target: `${target}` }));
@@ -53,7 +48,6 @@ const orderByName = (array) => {
53
48
  return 1;
54
49
  } return 0; });
55
50
  };
56
- //#endregion Helper Methods
57
51
  const TMSearchResult = ({ context = SearchResultContext.METADATA_SEARCH, isVisible = true, searchResults = [], showSearchResultSidebar = true, showSelector = false, onClosePreviewPanel, showDcmtForm = false, showBoard = false, showPreview = false, title, showSysMetadata = false, isClosable = false, allowFloatingBar = true, showToolbarHeader = true, onRefreshAfterAddDcmtToFavs, onRefreshSearchAsync, onSelectedTIDChanged, onUpdate, onClose, onTaskCreateRequest }) => {
58
52
  const [id, setID] = useState('');
59
53
  const [showApprovePopup, setShowApprovePopup] = useState(false);
@@ -69,11 +63,6 @@ const TMSearchResult = ({ context = SearchResultContext.METADATA_SEARCH, isVisib
69
63
  const [isOpenMaster, setIsOpenMaster] = useState(false);
70
64
  const [secondaryMasterDcmts, setSecondaryMasterDcmts] = useState([]);
71
65
  const [isOpenDcmtForm, setIsOpenDcmtForm] = useState(false);
72
- const [isOpenPreview, setIsOpenPreview] = useState(false);
73
- const [isOpenSysMetadata, setIsOpenSysMetadata] = useState(false);
74
- const [isOpenBoard, setIsOpenBoard] = useState(false);
75
- const [isOpenDistinctValues, setIsOpenDistinctValues] = useState(false);
76
- const [isOpenTags, setIsOpenTags] = useState(false);
77
66
  const [currentTIDHasDetailRelations, setCurrentTIDHasDetailRelations] = useState();
78
67
  const [currentTIDHasMasterRelations, setCurrentTIDHasMasterRelations] = useState();
79
68
  const [isOpenBatchUpdate, setIsOpenBatchUpdate] = useState(false);
@@ -136,10 +125,10 @@ const TMSearchResult = ({ context = SearchResultContext.METADATA_SEARCH, isVisib
136
125
  fileExt: currentMetadataValues.find(o => o.mid == SystemMIDsAsNumber.FileExt)?.value
137
126
  });
138
127
  }, [currentMetadataValues]);
139
- useEffect(() => { setIsOpenBoard(showBoard); }, [showBoard]);
140
- useEffect(() => { setIsOpenSysMetadata(showSysMetadata); }, [showSysMetadata]);
128
+ // useEffect(() => { setIsOpenBoard(showBoard); }, [showBoard])
129
+ // useEffect(() => { setIsOpenSysMetadata(showSysMetadata); }, [showSysMetadata])
141
130
  useEffect(() => { setIsOpenDcmtForm(showDcmtForm); }, [showDcmtForm]);
142
- useEffect(() => { setIsOpenPreview(showPreview); }, [showPreview]);
131
+ // useEffect(() => { setIsOpenPreview(showPreview) }, [showPreview])
143
132
  const openFormHandler = (layoutMode) => { setIsOpenDcmtForm(true); setDcmtFormLayoutMode(layoutMode); };
144
133
  const openTaskFormHandler = (value) => {
145
134
  if (selectedItems.length > 1)
@@ -184,13 +173,6 @@ const TMSearchResult = ({ context = SearchResultContext.METADATA_SEARCH, isVisib
184
173
  }
185
174
  return titleHeader;
186
175
  };
187
- const allowBackButton = () => {
188
- if (context === SearchResultContext.METADATA_SEARCH)
189
- return true;
190
- if (deviceType !== DeviceType.MOBILE)
191
- return false;
192
- return splitterSize[0] === '0';
193
- };
194
176
  const onBack = () => {
195
177
  if (isOpenBatchUpdate && isModifiedBatchUpdate) {
196
178
  TMMessageBoxManager.show({
@@ -306,44 +288,7 @@ const TMSearchResult = ({ context = SearchResultContext.METADATA_SEARCH, isVisib
306
288
  }
307
289
  setLastUpdateSearchTime(new Date(Date.now()));
308
290
  };
309
- const isOpenMiddlePanel = () => isOpenSysMetadata || isOpenBoard || isOpenTags || isOpenDistinctValues;
310
291
  const getSelectionDcmtInfo = () => { return getSelectedDcmtsOrFocused(selectedItems, focusedItem); };
311
- const getPrimarySplitterStartLayout = () => {
312
- let size = ['100%', '0'];
313
- if (deviceType !== DeviceType.MOBILE) {
314
- if (isOpenPreview || isOpenMiddlePanel() || isOpenBatchUpdate) {
315
- size = ['50%', '50%'];
316
- }
317
- }
318
- else {
319
- size = (isOpenPreview || isOpenMiddlePanel() || isOpenBatchUpdate) ? ['0', '100%'] : ['100%', '0'];
320
- }
321
- return size;
322
- };
323
- const getSecondarySplitterStartLayout = () => {
324
- if (isOpenPreview && !isOpenMiddlePanel()) {
325
- return ['0', '100%'];
326
- }
327
- if (!isOpenPreview && isOpenMiddlePanel()) {
328
- return ['100%', '0'];
329
- }
330
- return ['40%', '60%'];
331
- };
332
- const closeMiddlePanel = () => {
333
- setIsOpenBoard(false);
334
- setIsOpenSysMetadata(false);
335
- setIsOpenTags(false);
336
- setIsOpenDistinctValues(false);
337
- };
338
- const titleText = () => {
339
- if (isOpenTags)
340
- return 'Tags';
341
- if (isOpenSysMetadata)
342
- return 'Metadati di sistema';
343
- if (isOpenBoard)
344
- return 'Bacheca';
345
- return '';
346
- };
347
292
  const canNavigateHandler = (dir) => {
348
293
  if (!focusedItem)
349
294
  return false;
@@ -380,39 +325,9 @@ const TMSearchResult = ({ context = SearchResultContext.METADATA_SEARCH, isVisib
380
325
  break;
381
326
  }
382
327
  };
328
+ const searchResutlToolbar = _jsxs(_Fragment, { children: [context !== SearchResultContext.METADATA_SEARCH && fromDTD?.templateTID === TemplateTIDs.WF_WIApprView && _jsx(WorkFlowOperationButtons, { deviceType: deviceType, onApprove: () => setShowApprovePopup(true), onReject: () => setShowRejectPopup(true), onReAssign: () => setShowReAssignPopup(true), approveDisable: disable, rejectDisable: disable, reassignDisable: disable, infoDisable: getSelectedDcmtsOrFocused(selectedItems, focusedItem).length !== 1 }), (dcmtsReturned != dcmtsFound) && _jsx("p", { style: { backgroundColor: `white`, color: TMColors.primaryColor, textAlign: 'center', padding: '1px 4px', borderRadius: '3px', display: 'flex' }, children: `${dcmtsReturned}/${dcmtsFound} restituiti` }), context === SearchResultContext.FAVORITES_AND_RECENTS &&
329
+ _jsx("div", { style: { display: 'flex', alignItems: 'center', gap: '5px' }, children: _jsx(TMButton, { btnStyle: 'icon', icon: _jsx(IconDelete, { color: 'white' }), caption: "Rimuovi da " + (selectedSearchResult?.category === "Favorites" ? '"Preferiti"' : '"Recenti"'), disabled: getSelectedDcmtsOrFocused(selectedItems, focusedItem).length <= 0, onClick: removeDcmtFromFavsOrRecents }) }), _jsx(TMButton, { btnStyle: 'icon', icon: _jsx(IconRefresh, { color: 'white' }), caption: SDKUI_Localizator.Refresh, onClick: onRefreshSearchAsync }), _jsx(IconMenuVertical, { id: `commands-header-${id}`, color: 'white', cursor: 'pointer' }), _jsx(CommandsContextMenu, { target: `#commands-header-${id}`, menuItems: getCommandsMenuItems(fromDTD, selectedItems, focusedItem, context, showFloatingBar, setShowFloatingBar, openFormHandler, downloadDcmtsAsync, runOperationAsync, onRefreshSearchAsync, refreshSelectionDataRowsAsync, onRefreshAfterAddDcmtToFavs, confirmFormat, openConfirmAttachmentsDialog, openTaskFormHandler, openDetailDcmtsFormHandler, openMasterDcmtsFormHandler, openBatchUpdateFormHandler) })] });
383
330
  const middlePanelToolbar = _jsxs("div", { style: { width: 'max-content', display: 'flex', alignItems: 'center', gap: '10px' }, children: [_jsx(TMSaveFormButtonPrevious, { btnStyle: 'icon', isModified: false, iconColor: TMColors.default_background, formMode: FormModes.ReadOnly, canPrev: canNavigateHandler('prev'), onPrev: () => onNavigateHandler('prev') }), _jsx(TMSaveFormButtonNext, { btnStyle: 'icon', isModified: false, iconColor: TMColors.default_background, formMode: FormModes.ReadOnly, canNext: canNavigateHandler('next'), onNext: () => onNavigateHandler('next') })] });
384
- let notAvalableMsg = '';
385
- let notAvalableIcon;
386
- if (isOpenBoard) {
387
- notAvalableMsg = 'Bacheca non disponibile.';
388
- }
389
- else if (isOpenTags) {
390
- notAvalableMsg = 'Tags non disponibile.';
391
- }
392
- else if (isOpenDetails) {
393
- notAvalableMsg = 'Documenti detail non disponibile.';
394
- }
395
- else if (isOpenMaster) {
396
- notAvalableMsg = 'Documenti master non disponibile.';
397
- }
398
- else {
399
- notAvalableMsg = 'Metadati di sistema non disponibile.';
400
- }
401
- if (isOpenBoard) {
402
- notAvalableIcon = _jsx(IconBoard, { fontSize: 96 });
403
- }
404
- else if (isOpenTags) {
405
- notAvalableIcon = _jsx(IconTag, { fontSize: 96 });
406
- }
407
- else if (isOpenDetails) {
408
- notAvalableIcon = _jsx(IconDetails, { fontSize: 96 });
409
- }
410
- else if (isOpenMaster) {
411
- notAvalableIcon = _jsx(IconCommand, { fontSize: 96 });
412
- }
413
- else {
414
- notAvalableIcon = _jsx(IconDcmtTypeSys, { fontSize: 96 });
415
- }
416
331
  const handleAddItem = (tid, did) => {
417
332
  let newItem = { TID: tid ?? 0, DID: did ?? 0 };
418
333
  setSecondaryMasterDcmts((prevItems) => [...prevItems, newItem]);
@@ -422,66 +337,173 @@ const TMSearchResult = ({ context = SearchResultContext.METADATA_SEARCH, isVisib
422
337
  };
423
338
  if (!searchResults || searchResults.length <= 0)
424
339
  return _jsxs("div", { style: { display: 'flex', flexDirection: 'column', alignItems: 'center', justifyContent: 'center', height: '100%' }, children: [_jsx(IconBoard, { fontSize: 96 }), _jsx("div", { style: { fontSize: "15px", marginTop: "10px" }, children: SDKUI_Localizator.NoDcmtFound })] });
425
- const isPreviewDisabled = isOpenBatchUpdate || fromDTD?.archiveConstraint === ArchiveConstraints.OnlyMetadata;
426
- const isBoardDisabled = isOpenBatchUpdate;
427
- const isSysMetadataDisabled = isOpenBatchUpdate || !focusedItem?.DID;
428
- const isDetailsDisabled = isOpenBatchUpdate || !focusedItem?.DID;
429
- const isMasterDisabled = isOpenBatchUpdate || (!focusedItem?.DID && selectedItems.length <= 0);
430
340
  const isMobile = deviceType === DeviceType.MOBILE;
431
- return (_jsxs(StyledMultiViewPanel, { "$isVisible": isVisible, children: [_jsxs(StyledMultiViewPanel, { "$isVisible": !isOpenDcmtForm && !isOpenDetails && !isOpenMaster, style: {
341
+ const renderTMSearchResult = (handleTogglePanel) => _jsxs(_Fragment, { children: [_jsxs(TMLayoutItem, { height: '100%', children: [_jsxs(TMSplitterLayout, { direction: 'horizontal', overflow: 'visible', separatorSize: SDKUI_Globals.userSettings.themeSettings.gutters, separatorActiveColor: 'transparent', separatorColor: 'transparent', min: ['0', '0'], showSeparator: showSelector && deviceType !== DeviceType.MOBILE, start: showSelector ? deviceType !== DeviceType.MOBILE ? ['25%', '75%'] : splitterSize : ['0%', '100%'], children: [showSelector ?
342
+ _jsx(TMLayoutItem, { children: _jsx(TMSearchResultSelector, { searchResults: currentSearchResults, onSelectionChanged: onSearchResultSelectionChanged }) })
343
+ :
344
+ _jsx(_Fragment, {}), _jsxs(TMLayoutItem, { children: [_jsx(TMSearchResultGrid
345
+ // allowMultipleSelection={allowMultipleSelection}
346
+ , {
347
+ // allowMultipleSelection={allowMultipleSelection}
348
+ inputFocusedItem: focusedItem, inputSelectedItems: selectedItems, searchResult: searchResults.length > 1 ? selectedSearchResult : searchResults[0], lastUpdateSearchTime: lastUpdateSearchTime, onDblClick: () => openFormHandler(LayoutModes.Update), onContextMenuPreparing: onContextMenuPreparing, onSelectionChanged: (items) => { setSelectedItems(items); }, onVisibleItemChanged: setVisibleItems, onFocusedItemChanged: setFocusedItem }), allowFloatingBar && showFloatingBar && deviceType !== DeviceType.MOBILE &&
349
+ _jsxs(TMFloatingToolbar, { backgroundColor: TMColors.primaryColor, initialLeft: '10px', initialTop: 'calc(100% - 75px)', children: [fromDTD?.perm?.canRetrieveFile === AccessLevels.Yes && _jsx(TMButton, { btnStyle: 'icon', caption: "Download file", disabled: fromDTD?.perm?.canRetrieveFile !== AccessLevels.Yes, icon: _jsx(IconDownload, { color: 'white' }), onClick: () => { downloadDcmtsAsync(getSelectedDcmtsOrFocused(selectedItems, focusedItem), DownloadTypes.Dcmt); } }), _jsx(TMButton, { btnStyle: 'icon', caption: 'Firma e marca', icon: _jsx(IconSignature, { color: 'white' }), onClick: () => { ShowAlert({ message: "TODO Firma e marca ", mode: 'info', title: `${"TODO"}`, duration: 3000 }); } }), _jsx(IconMenuVertical, { id: `commands-floating-${id}`, color: 'white', cursor: 'pointer' }), _jsx(CommandsContextMenu, { target: `#commands-floating-${id}`, menuItems: getCommandsMenuItems(fromDTD, selectedItems, focusedItem, context, showFloatingBar, setShowFloatingBar, openFormHandler, downloadDcmtsAsync, runOperationAsync, onRefreshSearchAsync, refreshSelectionDataRowsAsync, onRefreshAfterAddDcmtToFavs, confirmFormat, openConfirmAttachmentsDialog, openTaskFormHandler, openDetailDcmtsFormHandler, openMasterDcmtsFormHandler, openBatchUpdateFormHandler) })] })] })] }), showApprovePopup && _jsx(WorkFlowApproveRejectPopUp, { deviceType: deviceType, onUpdate: onUpdate, selectedItems: getSelectedDcmtsOrFocused(selectedItems, focusedItem), op: 0, onClose: () => setShowApprovePopup(false) }), showRejectPopup && _jsx(WorkFlowApproveRejectPopUp, { deviceType: deviceType, onUpdate: onUpdate, selectedItems: getSelectedDcmtsOrFocused(selectedItems, focusedItem), op: 1, onClose: () => setShowRejectPopup(false) }), showReAssignPopup && _jsx(WorkFlowReAssignPopUp, { deviceType: deviceType, onUpdate: onUpdate, selectedItems: getSelectedDcmtsOrFocused(selectedItems, focusedItem), onClose: () => setShowReAssignPopup(false) })] }), _jsx(ConfirmFormatDialog, {}), _jsx(ConfirmAttachmentsDialog, {})] });
350
+ const renderTMBlog = (handleTogglePanel) => _jsx(TMDcmtBlog, { tid: focusedItem?.TID, did: focusedItem?.DID });
351
+ const renderTMSysMetadata = (handleTogglePanel) => _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: [] });
352
+ const renderTMDcmtPreview = (handleTogglePanel) => _jsx(TMDcmtPreview, { onClose: () => {
353
+ handleTogglePanel("TMDcmtPreview");
354
+ onClosePreviewPanel?.();
355
+ }, dcmtData: currentDcmt });
356
+ const renderTMBatchUpdate = (handleTogglePanel) => _jsx(TMBatchUpdateForm, { inputDcmts: getSelectionDcmtInfo(), TID: focusedItem ? focusedItem?.TID : selectedItems[0]?.TID, DID: focusedItem ? focusedItem?.DID : selectedItems[0]?.DID, onBack: () => { handleTogglePanel("TMBatchUpdate"); }, onSavedCallbackAsync: async () => {
357
+ setIsOpenBatchUpdate(false);
358
+ setIsModifiedBatchUpdate(false);
359
+ await refreshSelectionDataRowsAsync();
360
+ }, onStatusChanged: (isModified) => { setIsModifiedBatchUpdate(isModified); } });
361
+ const panelsConfig = [
362
+ {
363
+ id: 'TMSearchResult',
364
+ name: SDKUI_Localizator.SearchResult,
365
+ toolbarOptions: { icon: _jsx(IconSearchCheck, { fontSize: 24 }), visible: true, isActive: true, orderNumber: 1 },
366
+ type: 'content',
367
+ contentOptions: {
368
+ visible: true,
369
+ height: '100%',
370
+ width: '20%',
371
+ content: renderTMSearchResult,
372
+ panelContainer: {
373
+ title: getTitleHeader(),
374
+ showHeader: showToolbarHeader,
375
+ allowMaximize: !isMobile,
376
+ onBack: !isClosable ? onBack : undefined,
377
+ onClose: isClosable ? onBack : undefined,
378
+ toolbar: searchResutlToolbar
379
+ },
380
+ },
381
+ },
382
+ {
383
+ id: 'TMBlog',
384
+ name: SDKUI_Localizator.BlogCase,
385
+ toolbarOptions: {
386
+ icon: _jsx(IconBoard, { fontSize: 24 }),
387
+ disabled: !focusedItem?.DID,
388
+ visible: true,
389
+ isActive: showBoard,
390
+ orderNumber: 2
391
+ },
392
+ type: 'content',
393
+ contentOptions: {
394
+ visible: true,
395
+ height: '100%',
396
+ width: '20%',
397
+ content: renderTMBlog,
398
+ panelContainer: {
399
+ title: SDKUI_Localizator.BlogCase,
400
+ allowMaximize: !isMobile,
401
+ toolbar: middlePanelToolbar
402
+ },
403
+ },
404
+ },
405
+ {
406
+ id: 'TMSysMetadata',
407
+ name: SDKUI_Localizator.MetadataSystem,
408
+ toolbarOptions: {
409
+ icon: _jsx(IconDcmtTypeSys, { fontSize: 24 }),
410
+ visible: true,
411
+ disabled: !focusedItem?.DID,
412
+ isActive: showSysMetadata,
413
+ orderNumber: 3
414
+ },
415
+ type: 'content',
416
+ contentOptions: {
417
+ visible: true,
418
+ height: '100%',
419
+ width: '20%',
420
+ content: renderTMSysMetadata,
421
+ panelContainer: {
422
+ title: SDKUI_Localizator.MetadataSystem,
423
+ allowMaximize: !isMobile,
424
+ toolbar: middlePanelToolbar
425
+ },
426
+ },
427
+ },
428
+ {
429
+ id: 'TMDcmtPreview',
430
+ name: SDKUI_Localizator.PreviewDocument,
431
+ toolbarOptions: {
432
+ icon: _jsx(IconShow, { fontSize: 24 }),
433
+ disabled: !focusedItem?.DID && fromDTD?.archiveConstraint === ArchiveConstraints.OnlyMetadata,
434
+ visible: true,
435
+ isActive: showPreview,
436
+ orderNumber: 4
437
+ },
438
+ type: 'content',
439
+ contentOptions: {
440
+ visible: true,
441
+ height: '100%',
442
+ width: '20%',
443
+ content: renderTMDcmtPreview,
444
+ },
445
+ },
446
+ {
447
+ id: 'TMBatchUpdate',
448
+ name: SDKUI_Localizator.BatchUpdate,
449
+ toolbarOptions: { icon: _jsx(IconBatchUpdate, { fontSize: 24 }), visible: true, isActive: false, orderNumber: 5 },
450
+ type: 'content',
451
+ contentOptions: {
452
+ visible: true,
453
+ height: '100%',
454
+ width: '20%',
455
+ content: renderTMBatchUpdate,
456
+ },
457
+ },
458
+ {
459
+ id: 'showMaster',
460
+ name: SDKUI_Localizator.DcmtsMaster,
461
+ toolbarOptions: {
462
+ icon: _jsx(IconDetailDcmts, { fontSize: 24 }),
463
+ visible: !!currentTIDHasMasterRelations,
464
+ disabled: (!focusedItem?.DID && selectedItems.length <= 0),
465
+ isActive: !!currentTIDHasMasterRelations,
466
+ orderNumber: 6,
467
+ beginGroup: true
468
+ },
469
+ type: 'button',
470
+ buttonOptions: {
471
+ onClick: () => { setIsOpenMaster(true); },
472
+ },
473
+ },
474
+ {
475
+ id: 'showDetails',
476
+ name: SDKUI_Localizator.DcmtsDetail,
477
+ toolbarOptions: {
478
+ icon: _jsx(IconDetailDcmts, { transform: 'scale(-1, 1)', fontSize: 24 }),
479
+ visible: !!currentTIDHasDetailRelations,
480
+ disabled: !focusedItem?.DID,
481
+ isActive: !!currentTIDHasDetailRelations,
482
+ orderNumber: 7,
483
+ },
484
+ type: 'button',
485
+ buttonOptions: {
486
+ onClick: () => { setIsOpenDetails(true); },
487
+ },
488
+ },
489
+ ];
490
+ const getPanelMobile = () => {
491
+ if (showPreview)
492
+ return 'TMDcmtPreview';
493
+ if (showBoard)
494
+ return 'TMBlog';
495
+ if (showSysMetadata)
496
+ return 'TMSysMetadata';
497
+ return 'TMSearchResult';
498
+ };
499
+ return (_jsxs(StyledMultiViewPanel, { "$isVisible": isVisible, children: [_jsx(StyledMultiViewPanel, { "$isVisible": !isOpenDcmtForm && !isOpenDetails && !isOpenMaster, style: {
432
500
  display: 'flex',
433
501
  flexDirection: isMobile ? 'column' : 'row',
434
502
  justifyContent: 'space-between',
435
503
  gap: SDKUI_Globals.userSettings.themeSettings.gutters,
436
504
  width: '100%',
437
505
  height: '100%',
438
- }, children: [_jsx("div", { style: { flex: 1, minWidth: 0, height: '100%', overflow: 'hidden' }, 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(TMSplitterLayout, { direction: 'horizontal', overflow: 'visible', separatorSize: SDKUI_Globals.userSettings.themeSettings.gutters, separatorActiveColor: 'transparent', separatorColor: 'transparent', showSeparator: (isOpenPreview || isOpenMiddlePanel() || isOpenBatchUpdate) && deviceType !== DeviceType.MOBILE, start: getPrimarySplitterStartLayout(), min: deviceType !== DeviceType.MOBILE && isOpenDcmtForm ? ['150px', '0'] : ['0', '0'], children: [_jsx(TMLayoutItem, { children: _jsxs(TMPanel, { toolbar: _jsxs(_Fragment, { children: [context !== SearchResultContext.METADATA_SEARCH && fromDTD?.templateTID === TemplateTIDs.WF_WIApprView && _jsx(WorkFlowOperationButtons, { deviceType: deviceType, onApprove: () => setShowApprovePopup(true), onReject: () => setShowRejectPopup(true), onReAssign: () => setShowReAssignPopup(true), approveDisable: disable, rejectDisable: disable, reassignDisable: disable, infoDisable: getSelectedDcmtsOrFocused(selectedItems, focusedItem).length !== 1 }), (dcmtsReturned != dcmtsFound) && _jsx("p", { style: { backgroundColor: `white`, color: TMColors.primaryColor, textAlign: 'center', padding: '1px 4px', borderRadius: '3px', display: 'flex' }, children: `${dcmtsReturned}/${dcmtsFound} restituiti` }), context === SearchResultContext.FAVORITES_AND_RECENTS &&
439
- _jsx("div", { style: { display: 'flex', alignItems: 'center', gap: '5px' }, children: _jsx(TMButton, { btnStyle: 'icon', icon: _jsx(IconDelete, { color: 'white' }), caption: "Rimuovi da " + (selectedSearchResult?.category === "Favorites" ? '"Preferiti"' : '"Recenti"'), disabled: getSelectedDcmtsOrFocused(selectedItems, focusedItem).length <= 0, onClick: removeDcmtFromFavsOrRecents }) }), _jsx(TMButton, { btnStyle: 'icon', icon: _jsx(IconRefresh, { color: 'white' }), caption: SDKUI_Localizator.Refresh, onClick: onRefreshSearchAsync }), _jsx(IconMenuVertical, { id: `commands-header-${id}`, color: 'white', cursor: 'pointer' }), _jsx(CommandsContextMenu, { target: `#commands-header-${id}`, menuItems: getCommandsMenuItems(fromDTD, selectedItems, focusedItem, context, showFloatingBar, setShowFloatingBar, openFormHandler, downloadDcmtsAsync, runOperationAsync, onRefreshSearchAsync, refreshSelectionDataRowsAsync, onRefreshAfterAddDcmtToFavs, confirmFormat, openConfirmAttachmentsDialog, openTaskFormHandler, openDetailDcmtsFormHandler, openMasterDcmtsFormHandler, openBatchUpdateFormHandler) })] }), onBack: !isClosable && !isMobile && allowBackButton() ? onBack : undefined, onClose: isClosable && allowBackButton() ? onBack : undefined, title: getTitleHeader(), showHeader: showToolbarHeader, children: [_jsxs(TMLayoutItem, { height: '100%', children: [_jsxs(TMSplitterLayout, { direction: 'horizontal', overflow: 'visible', separatorSize: SDKUI_Globals.userSettings.themeSettings.gutters, separatorActiveColor: 'transparent', separatorColor: 'transparent', min: ['0', '0'], showSeparator: showSelector && deviceType !== DeviceType.MOBILE, start: showSelector ? deviceType !== DeviceType.MOBILE ? ['25%', '75%'] : splitterSize : ['0%', '100%'], children: [showSelector ?
440
- _jsx(TMLayoutItem, { children: _jsx(TMSearchResultSelector, { searchResults: currentSearchResults, onSelectionChanged: onSearchResultSelectionChanged }) })
441
- :
442
- _jsx(_Fragment, {}), _jsxs(TMLayoutItem, { children: [_jsx(TMSearchResultGrid
443
- // allowMultipleSelection={allowMultipleSelection}
444
- , {
445
- // allowMultipleSelection={allowMultipleSelection}
446
- inputFocusedItem: focusedItem, inputSelectedItems: selectedItems, searchResult: searchResults.length > 1 ? selectedSearchResult : searchResults[0], lastUpdateSearchTime: lastUpdateSearchTime, onDblClick: () => openFormHandler(LayoutModes.Update), onContextMenuPreparing: onContextMenuPreparing, onSelectionChanged: (items) => { setSelectedItems(items); }, onVisibleItemChanged: setVisibleItems, onFocusedItemChanged: setFocusedItem }), allowFloatingBar && showFloatingBar && deviceType !== DeviceType.MOBILE &&
447
- _jsxs(TMFloatingToolbar, { backgroundColor: TMColors.primaryColor, initialLeft: '10px', initialTop: 'calc(100% - 75px)', children: [fromDTD?.perm?.canRetrieveFile === AccessLevels.Yes && _jsx(TMButton, { btnStyle: 'icon', caption: "Download file", disabled: fromDTD?.perm?.canRetrieveFile !== AccessLevels.Yes, icon: _jsx(IconDownload, { color: 'white' }), onClick: () => { downloadDcmtsAsync(getSelectedDcmtsOrFocused(selectedItems, focusedItem), DownloadTypes.Dcmt); } }), _jsx(TMButton, { btnStyle: 'icon', caption: 'Firma e marca', icon: _jsx(IconSignature, { color: 'white' }), onClick: () => { ShowAlert({ message: "TODO Firma e marca ", mode: 'info', title: `${"TODO"}`, duration: 3000 }); } }), _jsx(IconMenuVertical, { id: `commands-floating-${id}`, color: 'white', cursor: 'pointer' }), _jsx(CommandsContextMenu, { target: `#commands-floating-${id}`, menuItems: getCommandsMenuItems(fromDTD, selectedItems, focusedItem, context, showFloatingBar, setShowFloatingBar, openFormHandler, downloadDcmtsAsync, runOperationAsync, onRefreshSearchAsync, refreshSelectionDataRowsAsync, onRefreshAfterAddDcmtToFavs, confirmFormat, openConfirmAttachmentsDialog, openTaskFormHandler, openDetailDcmtsFormHandler, openMasterDcmtsFormHandler, openBatchUpdateFormHandler) })] })] })] }), showApprovePopup && _jsx(WorkFlowApproveRejectPopUp, { deviceType: deviceType, onUpdate: onUpdate, selectedItems: getSelectedDcmtsOrFocused(selectedItems, focusedItem), op: 0, onClose: () => setShowApprovePopup(false) }), showRejectPopup && _jsx(WorkFlowApproveRejectPopUp, { deviceType: deviceType, onUpdate: onUpdate, selectedItems: getSelectedDcmtsOrFocused(selectedItems, focusedItem), op: 1, onClose: () => setShowRejectPopup(false) }), showReAssignPopup && _jsx(WorkFlowReAssignPopUp, { deviceType: deviceType, onUpdate: onUpdate, selectedItems: getSelectedDcmtsOrFocused(selectedItems, focusedItem), onClose: () => setShowReAssignPopup(false) })] }), _jsx(ConfirmFormatDialog, {}), _jsx(ConfirmAttachmentsDialog, {})] }) }), isOpenBatchUpdate ?
448
- _jsx(StyledModalContainer, { style: { backgroundColor: 'white' }, children: _jsx(TMBatchUpdateForm, { inputDcmts: getSelectionDcmtInfo(), TID: focusedItem ? focusedItem?.TID : selectedItems[0]?.TID, DID: focusedItem ? focusedItem?.DID : selectedItems[0]?.DID, onBack: () => setIsOpenBatchUpdate(false), onSavedCallbackAsync: async () => {
449
- setIsOpenBatchUpdate(false);
450
- setIsModifiedBatchUpdate(false);
451
- await refreshSelectionDataRowsAsync();
452
- }, onStatusChanged: (isModified) => { setIsModifiedBatchUpdate(isModified); } }) })
453
- :
454
- isOpenPreview || isOpenMiddlePanel()
455
- ? _jsx(TMLayoutItem, { children: _jsxs(TMSplitterLayout, { direction: 'horizontal', overflow: 'visible', separatorSize: SDKUI_Globals.userSettings.themeSettings.gutters, separatorActiveColor: 'transparent', separatorColor: 'transparent', showSeparator: deviceType !== DeviceType.MOBILE && (isOpenPreview && isOpenMiddlePanel()), start: getSecondarySplitterStartLayout(), min: ['0', '0'], children: [isOpenMiddlePanel()
456
- ? _jsx(TMLayoutItem, { children: _jsx(TMPanel, { padding: '0',
457
- // color={TMColors.primaryColor}
458
- // backgroundColor={`${TMColors.primaryColor}25`}
459
- title: titleText(), toolbar: middlePanelToolbar, onClose: () => closeMiddlePanel(), children: (!focusedItem?.DID)
460
- ?
461
- _jsx(TMNothingToShow, { text: 'Nessun documento selezionato.', secondText: notAvalableMsg, icon: notAvalableIcon })
462
- :
463
- _jsxs(StyledContainer, { children: [isOpenBoard && _jsx(TMDcmtBlog, { tid: focusedItem?.TID, did: focusedItem?.DID }), isOpenSysMetadata &&
464
- _jsx(TMMetadataValues, { layoutMode: LayoutModes.Update, openChooserBySingleClick: !isOpenDistinctValues, 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: [] })] }) }) })
465
- : _jsx(_Fragment, {}), isOpenPreview
466
- ? _jsx(TMLayoutItem, { children: _jsx(TMDcmtPreview, { onClose: () => { setIsOpenPreview(false); onClosePreviewPanel?.(); }, dcmtData: currentDcmt }) })
467
- : _jsx(_Fragment, {})] }) })
468
- : _jsx(_Fragment, {})] }) }) }), showSearchResultSidebar && _jsx(TMCommandsPanel, { isMobile: deviceType === DeviceType.MOBILE, items: [
469
- ...(isMobile ? [{ icon: _jsx(IconArrowLeft, {}), onClick: !isClosable && allowBackButton() ? onBack : undefined }] : []),
470
- { icon: _jsx(IconShow, {}), selected: isOpenPreview, disabled: isPreviewDisabled, onClick: () => { if (!isPreviewDisabled)
471
- setIsOpenPreview(!isOpenPreview); } },
472
- { icon: _jsx(IconBoard, {}), selected: isOpenBoard, disabled: isBoardDisabled, onClick: () => { if (!isBoardDisabled) {
473
- closeMiddlePanel();
474
- setIsOpenBoard(!isOpenBoard);
475
- } } },
476
- { icon: _jsx(IconDcmtTypeSys, {}), selected: isOpenSysMetadata, disabled: isSysMetadataDisabled, onClick: () => { if (!isSysMetadataDisabled) {
477
- closeMiddlePanel();
478
- setIsOpenSysMetadata(!isOpenSysMetadata);
479
- } } },
480
- ...(currentTIDHasMasterRelations ? [{ icon: _jsx(IconDetailDcmts, {}), selected: isOpenMaster, disabled: isMasterDisabled, onClick: () => { if (!isMasterDisabled)
481
- setIsOpenMaster(!isOpenMaster); } }] : []),
482
- ...(currentTIDHasDetailRelations ? [{ icon: _jsx(IconDetailDcmts, { transform: 'scale(-1, 1)' }), selected: isOpenDetails, disabled: isDetailsDisabled, onClick: () => { if (!isDetailsDisabled)
483
- setIsOpenDetails(!isOpenDetails); } }] : []),
484
- ] })] }), _jsx(StyledMultiViewPanel, { "$isVisible": isOpenDetails, children: isOpenDetails && _jsx(TMMasterDetailDcmts, { deviceType: deviceType, isForMaster: false, inputDcmts: getSelectionDcmtInfo(), allowNavigation: focusedItem && selectedItems.length <= 0, canNext: canNavigateHandler('next'), canPrev: canNavigateHandler('prev'), onNext: () => onNavigateHandler('next'), onPrev: () => onNavigateHandler('prev'), onBack: () => setIsOpenDetails(false) }) }), _jsxs(StyledMultiViewPanel, { "$isVisible": isOpenMaster, children: [isOpenMaster && _jsx(TMMasterDetailDcmts, { deviceType: deviceType, inputDcmts: getSelectionDcmtInfo(), isForMaster: true, allowNavigation: focusedItem && selectedItems.length <= 0, canNext: canNavigateHandler('next'), canPrev: canNavigateHandler('prev'), onNext: () => onNavigateHandler('next'), onPrev: () => onNavigateHandler('prev'), onBack: () => setIsOpenMaster(false), appendMasterDcmts: handleAddItem }), secondaryMasterDcmts.length > 0 && secondaryMasterDcmts.map((dcmt, index) => {
506
+ }, 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: _jsx(TMPanelManager, { panels: panelsConfig, initialMobilePanelId: getPanelMobile(), showToolbar: showSearchResultSidebar, toolbarMode: 1 }) }) }), _jsx(StyledMultiViewPanel, { "$isVisible": isOpenDetails, children: isOpenDetails && _jsx(TMMasterDetailDcmts, { deviceType: deviceType, isForMaster: false, inputDcmts: getSelectionDcmtInfo(), allowNavigation: focusedItem && selectedItems.length <= 0, canNext: canNavigateHandler('next'), canPrev: canNavigateHandler('prev'), onNext: () => onNavigateHandler('next'), onPrev: () => onNavigateHandler('prev'), onBack: () => setIsOpenDetails(false) }) }), _jsxs(StyledMultiViewPanel, { "$isVisible": isOpenMaster, children: [isOpenMaster && _jsx(TMMasterDetailDcmts, { deviceType: deviceType, inputDcmts: getSelectionDcmtInfo(), isForMaster: true, allowNavigation: focusedItem && selectedItems.length <= 0, canNext: canNavigateHandler('next'), canPrev: canNavigateHandler('prev'), onNext: () => onNavigateHandler('next'), onPrev: () => onNavigateHandler('prev'), onBack: () => setIsOpenMaster(false), appendMasterDcmts: handleAddItem }), secondaryMasterDcmts.length > 0 && secondaryMasterDcmts.map((dcmt, index) => {
485
507
  return (_jsx(StyledModalContainer, { style: { backgroundColor: 'white' }, children: _jsx(TMMasterDetailDcmts, { deviceType: deviceType, inputDcmts: [dcmt], isForMaster: true, allowNavigation: false, onBack: () => handleRemoveItem(dcmt.TID, dcmt.DID), appendMasterDcmts: handleAddItem }) }, `${index}-${dcmt.DID}`));
486
508
  })] }), _jsx(StyledMultiViewPanel, { "$isVisible": isOpenDcmtForm, children: isOpenDcmtForm && _jsx(TMDcmtForm, { TID: focusedItem?.TID, DID: focusedItem?.DID, layoutMode: dcmtFormLayoutMode, showPreview: deviceType !== DeviceType.MOBILE, count: visibleItems.length, itemIndex: visibleItems.findIndex(o => o.rowIndex === focusedItem?.rowIndex) + 1, canNext: canNavigateHandler('next'), canPrev: canNavigateHandler('prev'), onNext: () => onNavigateHandler('next'), onPrev: () => onNavigateHandler('prev'), onClose: () => { setIsOpenDcmtForm(false); }, onSavedAsyncCallback: async (tid, did) => { await refreshFocusedDataRowAsync(tid, did, true); } }) })] }));
487
509
  };
@@ -4,11 +4,13 @@ import { useEffect, useState } from 'react';
4
4
  import ReactDOMServer from 'react-dom/server';
5
5
  import { DcmtTypeListCacheService } from '@topconsultnpm/sdk-ts-beta';
6
6
  import ContextMenu from 'devextreme-react/cjs/context-menu';
7
- import { IconDelete, SDKUI_Localizator, IconApply, IconInfo } from '../../helper';
7
+ import { IconDelete, SDKUI_Localizator, IconApply, IconInfo, IconCloseOutline } from '../../helper';
8
8
  import { TMColors } from '../../utils/theme';
9
9
  import { DeviceType } from '../base/TMDeviceProvider';
10
10
  import { TMDcmtTypeChooserForm } from '../choosers/TMDcmtTypeChooser';
11
- import TMTidViewer, { TMDcmtTypeTooltip } from '../viewers/TMTidViewer';
11
+ import TMTidViewer, { renderDTDTooltipContent, TMDcmtTypeTooltip } from '../viewers/TMTidViewer';
12
+ import { StyledDivHorizontal, StyledOffCanvasPanel } from '../base/Styled';
13
+ import { useOutsideClick } from '../../hooks/useOutsideClick';
12
14
  const StyledRecentTidItem = styled.div `
13
15
  display: flex;
14
16
  flex-direction: column;
@@ -27,9 +29,13 @@ const StyledRecentTidItem = styled.div `
27
29
  left: -7px;
28
30
  top: 50%;
29
31
  transform: translateY(-50%);
30
- opacity: ${({ $isMobile }) => ($isMobile ? 1 : 0)};
32
+ opacity: 0;
31
33
  transition: opacity 0.2s;
32
- pointer-events: ${({ $isMobile }) => ($isMobile ? 'auto' : 'none')};
34
+ pointer-events: none;
35
+ // On mobile, never show
36
+ ${({ $isMobile }) => $isMobile && `
37
+ display: none !important;
38
+ `}
33
39
  }
34
40
 
35
41
  &:hover .info-icon {
@@ -46,13 +52,18 @@ const iconDelete = () => ReactDOMServer.renderToString(_jsx(IconDelete, {}));
46
52
  const TMRecentsManager = ({ deviceType, mruTIDs, currentMruTID, onSelectedTID, onDeletedTID }) => {
47
53
  const [showDcmtTypeChooser, setShowDcmtTypeChooser] = useState(false);
48
54
  const [recentDcmtTypes, setRecentDcmtTypes] = useState([]);
55
+ const [infoDTD, setInfoDTD] = useState();
49
56
  useEffect(() => {
50
57
  DcmtTypeListCacheService.GetAllWithoutMetadataAsync().then((allTypes) => {
51
58
  const filtered = allTypes.filter(dt => mruTIDs.includes(dt.id));
52
59
  setRecentDcmtTypes(filtered);
53
60
  });
54
61
  }, [mruTIDs]);
55
- return (_jsxs(_Fragment, { children: [_jsxs("div", { style: { overflowY: deviceType === DeviceType.MOBILE ? 'auto' : undefined, display: 'flex', flexDirection: 'column', padding: '5px', width: '100%' }, children: [_jsx(StyledRecentTidItem, { id: `tid-${0}`, "$isMobile": deviceType === DeviceType.MOBILE, onClick: () => { setShowDcmtTypeChooser(true); }, children: _jsx("div", { style: { display: 'flex', alignItems: 'center', justifyContent: 'center', width: '100%' }, children: _jsx("p", { style: {
62
+ const panelRef = useOutsideClick(() => {
63
+ setInfoDTD(undefined);
64
+ });
65
+ const isMobile = deviceType === DeviceType.MOBILE;
66
+ return (_jsxs(_Fragment, { children: [_jsxs("div", { style: { overflowY: isMobile ? 'auto' : undefined, display: 'flex', flexDirection: 'column', padding: '5px', width: '100%' }, children: [_jsx(StyledRecentTidItem, { id: `tid-${0}`, "$isMobile": isMobile, onClick: () => { setShowDcmtTypeChooser(true); }, children: _jsx("div", { style: { display: 'flex', alignItems: 'center', justifyContent: 'center', width: '100%' }, children: _jsx("p", { style: {
56
67
  color: TMColors.primaryColor,
57
68
  fontSize: '1rem',
58
69
  fontWeight: 600,
@@ -60,7 +71,20 @@ const TMRecentsManager = ({ deviceType, mruTIDs, currentMruTID, onSelectedTID, o
60
71
  overflow: 'hidden',
61
72
  textOverflow: 'ellipsis'
62
73
  }, children: `${SDKUI_Localizator.AllDcmtTypes} (${DcmtTypeListCacheService.CacheCount(true)})` }) }) }, 0), recentDcmtTypes.map((dtd) => {
63
- return (_jsxs(StyledRecentTidItem, { id: `tid-${dtd.id}`, onClick: () => { onSelectedTID?.(dtd.id ?? 0); }, children: [_jsx("span", { className: "info-icon", children: _jsx(TMDcmtTypeTooltip, { dtd: dtd, children: _jsx(IconInfo, { color: TMColors.primaryColor }) }) }), _jsx("div", { style: { display: 'flex', justifyContent: 'center', width: '100%' }, children: _jsx(TMTidViewer, { tid: dtd.id, color: TMColors.primaryColor, showIcon: false }) }), _jsx(ContextMenu, { dataSource: [{ text: SDKUI_Localizator.Remove, icon: iconDelete(), }], target: `#tid-${dtd.id}`, onItemClick: () => { onDeletedTID?.(dtd.id ?? 0); } }), currentMruTID == dtd.id &&
74
+ return (_jsxs(StyledRecentTidItem, { id: `tid-${dtd.id}`, "$isMobile": isMobile, onClick: () => { onSelectedTID?.(dtd.id ?? 0); }, children: [_jsx("span", { className: "info-icon", children: _jsx(TMDcmtTypeTooltip, { dtd: dtd, children: _jsx(IconInfo, { color: TMColors.info }) }) }), _jsx("div", { style: { display: 'flex', justifyContent: 'center', width: '100%' }, children: _jsx(TMTidViewer, { tid: dtd.id, color: TMColors.primaryColor, showIcon: false }) }), _jsx(ContextMenu, { dataSource: [
75
+ {
76
+ text: SDKUI_Localizator.Remove,
77
+ icon: iconDelete(),
78
+ onClick: () => { onDeletedTID?.(dtd.id ?? 0); }
79
+ },
80
+ ...(isMobile ? [
81
+ {
82
+ text: SDKUI_Localizator.About,
83
+ icon: ReactDOMServer.renderToString(_jsx(IconInfo, { color: TMColors.info })),
84
+ onClick: () => { setInfoDTD(dtd); }
85
+ }
86
+ ] : [])
87
+ ], target: `#tid-${dtd.id}` }), currentMruTID == dtd.id &&
64
88
  _jsx("div", { style: {
65
89
  width: '24px',
66
90
  height: '24px',
@@ -74,6 +98,6 @@ const TMRecentsManager = ({ deviceType, mruTIDs, currentMruTID, onSelectedTID, o
74
98
  fontSize: '1rem',
75
99
  fontWeight: 'bold'
76
100
  }, children: _jsx(IconApply, { fontSize: 24, color: 'green' }) })] }, dtd.id));
77
- })] }), showDcmtTypeChooser && _jsx(TMDcmtTypeChooserForm, { onClose: () => setShowDcmtTypeChooser(false), onChoose: (tids) => { onSelectedTID?.(tids?.[0] ?? 0); } })] }));
101
+ })] }), showDcmtTypeChooser && _jsx(TMDcmtTypeChooserForm, { onClose: () => setShowDcmtTypeChooser(false), onChoose: (tids) => { onSelectedTID?.(tids?.[0] ?? 0); } }), _jsxs(StyledOffCanvasPanel, { ref: panelRef, "$isOpen": isMobile && infoDTD !== undefined, children: [_jsxs(StyledDivHorizontal, { style: { gap: 10, padding: '10px 8px', width: '100%', alignItems: 'center' }, children: [_jsx("p", { style: { fontSize: '1.1rem', fontWeight: 'bold' }, children: `${SDKUI_Localizator.DcmtType} - ${SDKUI_Localizator.About}` }), _jsx(IconCloseOutline, { style: { marginLeft: 'auto', cursor: 'pointer' }, onClick: () => setInfoDTD(undefined) })] }), renderDTDTooltipContent(infoDTD)] })] }));
78
102
  };
79
103
  export default TMRecentsManager;
@@ -0,0 +1,39 @@
1
+ import React, { ReactNode } from 'react';
2
+ type TMPanelManagerNewProps = {
3
+ children: ReactNode;
4
+ showToolbar?: boolean;
5
+ emptyContent?: ReactNode;
6
+ };
7
+ type TMPanelGroupProps = {
8
+ orientation?: 'horizontal' | 'vertical';
9
+ allowItemResize?: boolean;
10
+ gutters?: number;
11
+ panelVisibility?: boolean[];
12
+ onTogglePanel?: (idx: number) => void;
13
+ panelLabels?: string[];
14
+ children: ReactNode;
15
+ parentVisibility?: boolean;
16
+ parentPanelCount?: number;
17
+ parentPanelVisibility?: boolean[];
18
+ parentOnTogglePanel?: (idx: number, path: number[]) => void;
19
+ path?: number[];
20
+ };
21
+ type TMPanelItemProps = {
22
+ width?: string;
23
+ height?: string;
24
+ minWidth?: string;
25
+ minHeight?: string;
26
+ children: ReactNode;
27
+ style?: React.CSSProperties;
28
+ label?: string;
29
+ };
30
+ export declare const TMPanelItem: React.FC<TMPanelItemProps>;
31
+ export declare const TMPanelGroup: React.FC<TMPanelGroupProps>;
32
+ declare const TMPanelLayout: React.FC<TMPanelManagerNewProps>;
33
+ export default TMPanelLayout;
34
+ type TMPanelLayoutToolbarProps = {
35
+ panelLabels: string[];
36
+ panelVisibility: boolean[];
37
+ onTogglePanel: (idx: number) => void;
38
+ };
39
+ export declare const TMPanelLayoutToolbar: React.FC<TMPanelLayoutToolbarProps>;