@topconsultnpm/sdkui-react 6.20.0-dev2.9 → 6.20.0-dev3.10

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 (89) hide show
  1. package/lib/components/NewComponents/ContextMenu/styles.d.ts +3 -1
  2. package/lib/components/NewComponents/ContextMenu/styles.js +7 -5
  3. package/lib/components/base/Styled.d.ts +4 -1
  4. package/lib/components/base/Styled.js +11 -3
  5. package/lib/components/base/TMTreeView.d.ts +3 -1
  6. package/lib/components/base/TMTreeView.js +64 -21
  7. package/lib/components/choosers/TMDataListItemEditor.d.ts +11 -0
  8. package/lib/components/choosers/TMDataListItemEditor.js +130 -0
  9. package/lib/components/choosers/TMDataListItemFields.d.ts +11 -0
  10. package/lib/components/choosers/TMDataListItemFields.js +61 -0
  11. package/lib/components/choosers/TMDataListItemPicker.d.ts +1 -0
  12. package/lib/components/choosers/TMDataListItemPicker.js +178 -18
  13. package/lib/components/choosers/TMImageIDChooser.d.ts +16 -0
  14. package/lib/components/choosers/TMImageIDChooser.js +53 -0
  15. package/lib/components/choosers/TMMetadataChooser.js +1 -1
  16. package/lib/components/editors/TMDateBox.js +1 -1
  17. package/lib/components/editors/TMHtmlEditor.js +1 -1
  18. package/lib/components/editors/TMLocalizedTextBox.d.ts +1 -0
  19. package/lib/components/editors/TMLocalizedTextBox.js +3 -3
  20. package/lib/components/editors/TMTextBox.js +9 -10
  21. package/lib/components/features/archive/TMArchive.d.ts +3 -1
  22. package/lib/components/features/archive/TMArchive.js +31 -44
  23. package/lib/components/features/blog/TMBlogCommentForm.d.ts +3 -0
  24. package/lib/components/features/blog/TMBlogCommentForm.js +42 -36
  25. package/lib/components/features/documents/TMDcmtForm.d.ts +3 -1
  26. package/lib/components/features/documents/TMDcmtForm.js +197 -53
  27. package/lib/components/features/documents/TMDcmtTasks.d.ts +3 -1
  28. package/lib/components/features/documents/TMDcmtTasks.js +2 -2
  29. package/lib/components/features/documents/TMFileUploader.d.ts +5 -0
  30. package/lib/components/features/documents/TMFileUploader.js +28 -6
  31. package/lib/components/features/documents/TMMasterDetailDcmts.js +68 -84
  32. package/lib/components/features/documents/TMRelationViewer.d.ts +7 -1
  33. package/lib/components/features/documents/TMRelationViewer.js +395 -78
  34. package/lib/components/features/search/TMSearchResult.d.ts +2 -0
  35. package/lib/components/features/search/TMSearchResult.js +86 -91
  36. package/lib/components/features/search/TMSearchResultsMenuItems.d.ts +1 -1
  37. package/lib/components/features/search/TMSearchResultsMenuItems.js +6 -18
  38. package/lib/components/features/search/TMTreeSelector.js +1 -1
  39. package/lib/components/features/tasks/TMTaskForm.d.ts +1 -0
  40. package/lib/components/features/tasks/TMTaskForm.js +61 -193
  41. package/lib/components/features/tasks/TMTaskFormUtils.d.ts +80 -0
  42. package/lib/components/features/tasks/TMTaskFormUtils.js +559 -0
  43. package/lib/components/features/tasks/TMTasksUtils.d.ts +3 -1
  44. package/lib/components/features/tasks/TMTasksUtils.js +46 -16
  45. package/lib/components/features/tasks/TMTasksUtilsView.d.ts +0 -7
  46. package/lib/components/features/tasks/TMTasksUtilsView.js +7 -14
  47. package/lib/components/features/tasks/TMTasksView.js +5 -3
  48. package/lib/components/features/workflow/TMWorkflowPopup.d.ts +20 -3
  49. package/lib/components/features/workflow/TMWorkflowPopup.js +14 -92
  50. package/lib/components/features/workflow/diagram/ConnectionComponent.d.ts +1 -0
  51. package/lib/components/features/workflow/diagram/ConnectionComponent.js +6 -2
  52. package/lib/components/features/workflow/diagram/DiagramItemForm.js +1 -1
  53. package/lib/components/features/workflow/diagram/WFDiagram.js +75 -5
  54. package/lib/components/forms/Login/TMLoginForm.js +1 -1
  55. package/lib/components/forms/TMSaveForm.js +61 -13
  56. package/lib/components/grids/TMBlogsPost.js +8 -8
  57. package/lib/components/grids/TMBlogsPostUtils.js +2 -2
  58. package/lib/components/grids/TMRecentsManager.js +1 -1
  59. package/lib/components/index.d.ts +2 -0
  60. package/lib/components/index.js +2 -0
  61. package/lib/components/pages/TMPage.js +4 -0
  62. package/lib/components/query/TMQueryEditor.d.ts +1 -0
  63. package/lib/components/query/TMQueryEditor.js +2 -2
  64. package/lib/helper/Enum_Localizator.js +5 -0
  65. package/lib/helper/GlobalStyles.js +3 -0
  66. package/lib/helper/SDKUI_Globals.d.ts +8 -0
  67. package/lib/helper/SDKUI_Globals.js +12 -0
  68. package/lib/helper/SDKUI_Localizator.d.ts +19 -3
  69. package/lib/helper/SDKUI_Localizator.js +182 -22
  70. package/lib/helper/TMIcons.d.ts +2 -1
  71. package/lib/helper/TMIcons.js +4 -1
  72. package/lib/helper/TMUtils.d.ts +13 -41
  73. package/lib/helper/TMUtils.js +86 -170
  74. package/lib/helper/helpers.d.ts +6 -2
  75. package/lib/helper/helpers.js +24 -8
  76. package/lib/helper/index.d.ts +1 -0
  77. package/lib/helper/index.js +1 -0
  78. package/lib/helper/queryHelper.js +1 -1
  79. package/lib/hooks/useBetaFeatures.d.ts +1 -0
  80. package/lib/hooks/useBetaFeatures.js +41 -0
  81. package/lib/hooks/useDcmtOperations.js +14 -2
  82. package/lib/hooks/useRelatedDocuments.js +34 -11
  83. package/lib/index.d.ts +1 -0
  84. package/lib/index.js +1 -0
  85. package/lib/services/platform_services.d.ts +1 -1
  86. package/lib/services/platform_services.js +4 -0
  87. package/package.json +2 -2
  88. package/lib/components/features/search/TMSignSettingsForm.d.ts +0 -9
  89. package/lib/components/features/search/TMSignSettingsForm.js +0 -621
@@ -8,13 +8,15 @@ import ConnectionComponent from './ConnectionComponent';
8
8
  import DiagramItemComponent from './DiagramItemComponent';
9
9
  import DiagramItemSvgContent from './DiagramItemSvgContent';
10
10
  import { calculateArrowAngle, downloadFile, getConnectionPoint, getNewWfDiagram, isConnectionNonLinear, validateDiagram } from './workflowHelpers';
11
- import { IconFlowChart, IconUndo, IconRestore, IconAdjust, IconCopy, IconCut, IconPaste, IconPin, IconUnpin, IconChevronRight, IconCloseOutline, IconNew, SDKUI_Localizator, generateUUID, IconExport, IconImport, IconWindowMaximize, IconZoomIn, IconZoomOut, IconPencil, IconLock, LocalizeDiagramItemType, IconWindowMinimize, IconZoomAuto } from '../../../../helper';
11
+ import { IconFlowChart, IconUndo, IconRestore, IconAdjust, IconCopy, IconCut, IconPaste, IconPin, IconUnpin, IconChevronRight, IconCloseOutline, IconNew, SDKUI_Localizator, generateUUID, IconExport, IconImport, IconWindowMaximize, IconZoomIn, IconZoomOut, IconPencil, IconLock, LocalizeDiagramItemType, IconWindowMinimize, IconZoomAuto, IconCloseCircle, IconSuccess } from '../../../../helper';
12
12
  import { ButtonNames, TMExceptionBoxManager, TMMessageBoxManager } from '../../../base/TMPopUp';
13
13
  import { StyledLoadingContainer, StyledSpinner } from '../../../base/Styled';
14
14
  import DiagramItemForm from './DiagramItemForm';
15
15
  import ReactDOM from 'react-dom';
16
16
  import ConnectionForm from './ConnectionForm';
17
17
  import TMFloatingMenuBar from '../../../NewComponents/FloatingMenuBar';
18
+ import TMContextMenu from '../../../NewComponents/ContextMenu/TMContextMenu';
19
+ import { TMColors } from '../../../../utils/theme';
18
20
  const ZoomLevelText = styled.span `
19
21
  font-size: 0.9em;
20
22
  color: #555;
@@ -331,6 +333,9 @@ const WFDiagram = ({ xmlDiagramString, currentSetID, allowEdit = true, onDiagram
331
333
  const [wfDiagram, setWfDiagram] = useState(null);
332
334
  const [selectedItems, setSelectedItems] = useState(new Set());
333
335
  const [selectedConnections, setSelectedConnections] = useState(new Set());
336
+ // Context menu per le connections
337
+ const [connectionContextMenuPosition, setConnectionContextMenuPosition] = useState({ x: 0, y: 0 });
338
+ const [contextMenuConnectionId, setContextMenuConnectionId] = useState(null);
334
339
  const [wfDiagramHistory, setWfDiagramHistory] = useState([]);
335
340
  const [historyIndex, setHistoryIndex] = useState(-1);
336
341
  const isUndoingRedoing = useRef(false);
@@ -1311,6 +1316,62 @@ const WFDiagram = ({ xmlDiagramString, currentSetID, allowEdit = true, onDiagram
1311
1316
  if (!isCtrlPressed)
1312
1317
  setSelectedItems(new Set());
1313
1318
  }, [isReadOnly]);
1319
+ const handleConnectionContextMenu = useCallback((id, event) => {
1320
+ if (isReadOnly)
1321
+ return;
1322
+ event.preventDefault();
1323
+ event.stopPropagation();
1324
+ // Trova la connection
1325
+ const connection = wfDiagram?.Connections.find(conn => conn.ID === id);
1326
+ if (!connection)
1327
+ return;
1328
+ // Verifica se esce da un DiagramItemTypes.Condition o Approval
1329
+ const sourceItem = wfDiagram?.DiagramItems.find(item => item.ID === connection.Source.ParentDiagramItem.ID);
1330
+ if (!sourceItem || ![DiagramItemTypes.Condition, DiagramItemTypes.Approval].includes(sourceItem.Type))
1331
+ return;
1332
+ // Mostra il context menu
1333
+ setContextMenuConnectionId(id);
1334
+ setConnectionContextMenuPosition({ x: event.clientX, y: event.clientY });
1335
+ }, [isReadOnly, wfDiagram]);
1336
+ const handleChangeConnectionOutputStatus = useCallback((connectionId) => {
1337
+ if (isReadOnly || !wfDiagram)
1338
+ return;
1339
+ const connection = wfDiagram.Connections.find(conn => conn.ID === connectionId);
1340
+ if (!connection)
1341
+ return;
1342
+ // Cambia l'OutputStatus da Completed a Rejected e viceversa
1343
+ const newStatus = connection.OutputStatus === WorkItemStatus.Completed
1344
+ ? WorkItemStatus.Rejected
1345
+ : WorkItemStatus.Completed;
1346
+ const updatedDiagram = {
1347
+ ...wfDiagram,
1348
+ Connections: wfDiagram.Connections.map(conn => conn.ID === connectionId ? { ...conn, OutputStatus: newStatus } : conn)
1349
+ };
1350
+ updateDiagram(updatedDiagram);
1351
+ setWfDiagram(updatedDiagram);
1352
+ setContextMenuConnectionId(null);
1353
+ }, [isReadOnly, wfDiagram, updateDiagram]);
1354
+ const closeConnectionContextMenu = useCallback(() => {
1355
+ setContextMenuConnectionId(null);
1356
+ }, []);
1357
+ // Menu items per il context menu delle connections
1358
+ const connectionContextMenuItems = useMemo(() => {
1359
+ if (!contextMenuConnectionId || !wfDiagram)
1360
+ return [];
1361
+ const connection = wfDiagram.Connections.find(conn => conn.ID === contextMenuConnectionId);
1362
+ if (!connection)
1363
+ return [];
1364
+ const targetStatus = connection.OutputStatus === WorkItemStatus.Completed
1365
+ ? SDKUI_Localizator.WorkItemStatus_Rejected
1366
+ : SDKUI_Localizator.WorkItemStatus_Completed;
1367
+ return [{
1368
+ icon: connection.OutputStatus === WorkItemStatus.Completed
1369
+ ? _jsx(IconCloseCircle, { color: TMColors.error, fontSize: 16 })
1370
+ : _jsx(IconSuccess, { color: TMColors.success, fontSize: 16 }),
1371
+ name: SDKUI_Localizator.ChangeStatusTo.replaceParams(targetStatus),
1372
+ onClick: () => handleChangeConnectionOutputStatus(contextMenuConnectionId)
1373
+ }];
1374
+ }, [contextMenuConnectionId, wfDiagram, handleChangeConnectionOutputStatus]);
1314
1375
  const handleDrag = useCallback((id, newX, newY) => {
1315
1376
  if (isReadOnly)
1316
1377
  return;
@@ -1393,10 +1454,15 @@ const WFDiagram = ({ xmlDiagramString, currentSetID, allowEdit = true, onDiagram
1393
1454
  if (sourceItem.Type === DiagramItemTypes.Condition || sourceItem.Type === DiagramItemTypes.Approval) {
1394
1455
  const existingConnectionsFromSource = wfDiagram.Connections.filter(conn => conn.Source.ParentDiagramItem.ID === sourceItem.ID);
1395
1456
  if (existingConnectionsFromSource.length === 0) {
1457
+ // Prima connessione → Completed
1396
1458
  outputStatus = WorkItemStatus.Completed;
1397
1459
  }
1398
1460
  else if (existingConnectionsFromSource.length === 1) {
1399
- outputStatus = WorkItemStatus.Rejected;
1461
+ // Seconda connessione → contrario della prima
1462
+ const firstConnection = existingConnectionsFromSource[0];
1463
+ outputStatus = firstConnection.OutputStatus === WorkItemStatus.Completed
1464
+ ? WorkItemStatus.Rejected
1465
+ : WorkItemStatus.Completed;
1400
1466
  }
1401
1467
  }
1402
1468
  const newConnection = {
@@ -1820,7 +1886,7 @@ const WFDiagram = ({ xmlDiagramString, currentSetID, allowEdit = true, onDiagram
1820
1886
  fullScreenRef.current.focus();
1821
1887
  }
1822
1888
  }, [isFullScreen]);
1823
- const diagramContent = (_jsxs(CanvasContainer, { onDoubleClick: handleCanvasDoubleClick, children: [_jsx("input", { ref: fileInputRef, type: "file", accept: ".xml" // Filtra per file XML
1889
+ const diagramContent = (_jsxs(CanvasContainer, { onDoubleClick: handleCanvasDoubleClick, onContextMenu: (e) => e.preventDefault(), children: [_jsx("input", { ref: fileInputRef, type: "file", accept: ".xml" // Filtra per file XML
1824
1890
  , onChange: handleFileChange, style: { display: 'none' } }), SDK_Globals.tmSession?.SessionDescr?.appModuleID === AppModules.SURFER ?
1825
1891
  _jsx(TMFloatingMenuBar, { containerRef: diagramRef, defaultPosition: { x: 45, y: 85 }, enableConfigMode: false, fixedItems: [
1826
1892
  { icon: _jsx(IconZoomIn, {}), name: SDKUI_Localizator.ZoomIn, disabled: isAutoZoomEnabled, onClick: () => { handleZoomIn(); }, id: 'zoom-in', isPinned: true },
@@ -1842,8 +1908,12 @@ const WFDiagram = ({ xmlDiagramString, currentSetID, allowEdit = true, onDiagram
1842
1908
  const sinkPoint = getConnectionPoint(sinkItem, connection.Sink.ConnectorName);
1843
1909
  // Determina se questa è la connessione che stiamo trascinando
1844
1910
  const isThisConnectionBeingDragged = isDraggingExistingConnectionEndpoint && draggingConnectionId === connection.ID;
1845
- return (_jsx(ConnectionComponent, { connection: connection, isSelected: selectedConnections.has(connection.ID), sourcePoint: sourcePoint, sinkPoint: sinkPoint, isTemporary: isThisConnectionBeingDragged, onClick: handleConnectionClick, onDoubleClick: handleDoubleClickConnection, onConnectionEndpointMouseDown: handleConnectionEndpointMouseDown }, connection.ID));
1846
- }), isDrawingConnection && tempConnectionPathData && (_jsx(TempConnectionPath, { d: tempConnectionPathData })), isDraggingExistingConnectionEndpoint && tempConnectionPathData && (_jsx(TempConnectionPath, { d: tempConnectionPathData })), isDrawingSelectionRect && currentSelectionRect && (_jsx(SelectionRect, { x: currentSelectionRect.x, y: currentSelectionRect.y, width: currentSelectionRect.width, height: currentSelectionRect.height }))] }) })) : (_jsx(DiagramMessage, { children: `${SDKUI_Localizator.WorkflowDiagramMissingOrInvalid} ...` })) }), isModalOpen && itemToEdit && (_jsx(DiagramItemForm, { itemToEdit: itemToEdit, wf: wfDiagram?.Info, onClose: handleCloseModal, onApply: handleUpdateDiagramItem })), isConnectionModalOpen && connectionToEdit && (_jsx(ConnectionForm, { connectionToEdit: connectionToEdit, onClose: () => setIsConnectionModalOpen(false), onApply: handleUpdateConnection }))] }));
1911
+ return (_jsx(ConnectionComponent, { connection: connection, isSelected: selectedConnections.has(connection.ID), sourcePoint: sourcePoint, sinkPoint: sinkPoint, isTemporary: isThisConnectionBeingDragged, onClick: handleConnectionClick, onDoubleClick: handleDoubleClickConnection, onConnectionEndpointMouseDown: handleConnectionEndpointMouseDown, onContextMenu: handleConnectionContextMenu }, connection.ID));
1912
+ }), isDrawingConnection && tempConnectionPathData && (_jsx(TempConnectionPath, { d: tempConnectionPathData })), isDraggingExistingConnectionEndpoint && tempConnectionPathData && (_jsx(TempConnectionPath, { d: tempConnectionPathData })), isDrawingSelectionRect && currentSelectionRect && (_jsx(SelectionRect, { x: currentSelectionRect.x, y: currentSelectionRect.y, width: currentSelectionRect.width, height: currentSelectionRect.height }))] }) })) : (_jsx(DiagramMessage, { children: `${SDKUI_Localizator.WorkflowDiagramMissingOrInvalid} ...` })) }), isModalOpen && itemToEdit && (_jsx(DiagramItemForm, { itemToEdit: itemToEdit, wf: wfDiagram?.Info, onClose: handleCloseModal, onApply: handleUpdateDiagramItem })), isConnectionModalOpen && connectionToEdit && (_jsx(ConnectionForm, { connectionToEdit: connectionToEdit, onClose: () => setIsConnectionModalOpen(false), onApply: handleUpdateConnection })), _jsx(TMContextMenu, { items: connectionContextMenuItems, externalControl: {
1913
+ visible: contextMenuConnectionId !== null,
1914
+ position: connectionContextMenuPosition,
1915
+ onClose: closeConnectionContextMenu
1916
+ } })] }));
1847
1917
  return (_jsxs(_Fragment, { children: [!isFullScreen && (_jsx(DiagramWrapper, { ref: diagramRef, children: diagramContent })), isFullScreen && ReactDOM.createPortal(_jsx(FullScreenContainer, { ref: fullScreenRef, tabIndex: 0, onKeyDown: handleFullScreenKeyDown, children: diagramContent }), document.body)] }));
1848
1918
  };
1849
1919
  export default WFDiagram;
@@ -115,7 +115,7 @@ const TMLoginForm = (props) => {
115
115
  const [dcmtArchive, setDcmtArchive] = useState();
116
116
  const [manualArchiveID, setManualArchiveID] = useState('');
117
117
  const [authMode, setAuthMode] = useState(AuthenticationModes.TopMedia);
118
- const [username, setUsername] = useState('SysAdmin');
118
+ const [username, setUsername] = useState('');
119
119
  const [password, setPassword] = useState('');
120
120
  const [authDomain, setAuthDomain] = useState('');
121
121
  const [usernameOnBehalf, setUsernameOnBehalf] = useState('');
@@ -11,7 +11,7 @@ import { TMColors } from '../../utils/theme';
11
11
  import TMValidationItemsList from '../grids/TMValidationItemsList';
12
12
  import TMModal from '../base/TMModal';
13
13
  import { DeviceType, useDeviceType } from '../base/TMDeviceProvider';
14
- const TMSaveForm = ({ id, formMode = FormModes.Update, showToolbar = true, skipIsModifiedCheck = false, title, children, isModal, exception, customToolbarElements, hasNavigation, showSaveButton = true, customSaveButton, customTooltipSaveButton, showBackButton, showWarningsCount = true, showErrorCount = true, showUndoButton = true, onClose, onSaveAsync, onNext, onPrev, canNext, canPrev, isModified, onShowList, validationItems = [], onUndo, onCancel, width, height, askClosingConfirm = false, showTitleFormMode = true, showCloseButton = true }) => {
14
+ const TMSaveForm = ({ id, formMode = FormModes.Update, showToolbar = true, skipIsModifiedCheck = false, title, children, isModal, exception, customToolbarElements, hasNavigation, showSaveButton = true, customSaveButton, customTooltipSaveButton, showBackButton, showWarningsCount = true, showErrorCount = true, showUndoButton = true, onClose, onSaveAsync, onNext, onPrev, canNext, canPrev, isModified, onShowList, validationItems = [], onUndo, onCancel, width, height, askClosingConfirm = false, showTitleFormMode = true, showCloseButton = true, resizable = true }) => {
15
15
  const [showList, setShowList] = useState(true);
16
16
  const [showErrorGrid, setShowErrorGrid] = useState(false);
17
17
  const deviceType = useDeviceType();
@@ -65,26 +65,74 @@ const TMSaveForm = ({ id, formMode = FormModes.Update, showToolbar = true, skipI
65
65
  }
66
66
  });
67
67
  };
68
- const doClose = () => {
68
+ const doClose = async () => {
69
+ // Se non ci sono modifiche o vogliamo ignorare il controllo delle modifiche
69
70
  if (!isModified || skipIsModifiedCheck) {
70
71
  onClose?.();
71
- deviceType === DeviceType.MOBILE && setShowList(true), onShowList?.(true);
72
+ // Se il dispositivo è mobile, mostra di nuovo la lista
73
+ if (deviceType === DeviceType.MOBILE) {
74
+ setShowList(true);
75
+ onShowList?.(true);
76
+ }
72
77
  return;
73
78
  }
79
+ // Determina il messaggio e i pulsanti da mostrare in base alla presenza di errori
80
+ const hasValidationErrors = validationItems.length > 0;
81
+ const message = (isModified && hasValidationErrors) ? SDKUI_Localizator.FormErrorsProceedQuestion : SDKUI_Localizator.SaveQuestion;
82
+ const buttons = hasValidationErrors
83
+ ? [ButtonNames.YES, ButtonNames.NO]
84
+ : [ButtonNames.YES, ButtonNames.NO, ButtonNames.CANCEL];
85
+ // Mostra il messaggio di conferma
74
86
  TMMessageBoxManager.show({
75
- parentId: isModal ? "TMSaveFormShowConfirmForClose-" + id : undefined,
76
- message: SDKUI_Localizator.SaveQuestion, buttons: [ButtonNames.YES, ButtonNames.NO, ButtonNames.CANCEL],
77
- onButtonClick: async (e) => {
87
+ parentId: isModal ? `TMSaveFormShowConfirmForClose-${id}` : undefined,
88
+ message,
89
+ buttons,
90
+ onButtonClick: async (buttonClicked) => {
78
91
  try {
79
- if (e == ButtonNames.CANCEL)
80
- return;
81
- if (e == ButtonNames.NO)
82
- deviceType === DeviceType.MOBILE && (onUndo(), setShowList(true), onShowList?.(true));
83
- if (e == ButtonNames.YES)
84
- deviceType === DeviceType.MOBILE ? (await onSaveAsync?.(), setShowList(true), onShowList?.(true)) : await onSaveAsync?.();
92
+ // Caso con errori di validazione
93
+ if (hasValidationErrors) {
94
+ if (buttonClicked === ButtonNames.NO)
95
+ return; // Non fare nulla
96
+ if (buttonClicked === ButtonNames.YES) {
97
+ if (deviceType === DeviceType.MOBILE) {
98
+ onUndo();
99
+ setShowList(true);
100
+ onShowList?.(true);
101
+ }
102
+ else {
103
+ onUndo();
104
+ }
105
+ }
106
+ }
107
+ else {
108
+ // Caso senza errori
109
+ switch (buttonClicked) {
110
+ case ButtonNames.CANCEL:
111
+ return; // Non fare nulla
112
+ case ButtonNames.NO:
113
+ if (deviceType === DeviceType.MOBILE) {
114
+ onUndo();
115
+ setShowList(true);
116
+ onShowList?.(true);
117
+ }
118
+ break;
119
+ case ButtonNames.YES:
120
+ if (deviceType === DeviceType.MOBILE) {
121
+ await onSaveAsync?.();
122
+ setShowList(true);
123
+ onShowList?.(true);
124
+ }
125
+ else {
126
+ await onSaveAsync?.();
127
+ }
128
+ break;
129
+ }
130
+ }
131
+ // Chiude il form/modal
85
132
  onClose?.();
86
133
  }
87
134
  catch (ex) {
135
+ // Mostra eventuali eccezioni
88
136
  TMExceptionBoxManager.show({ exception: ex });
89
137
  }
90
138
  }
@@ -102,7 +150,7 @@ const TMSaveForm = ({ id, formMode = FormModes.Update, showToolbar = true, skipI
102
150
  _jsx("div", { style: { width: '100%', height: '100%', marginTop: '50px', display: 'flex', alignItems: 'center', justifyContent: 'center', flexDirection: 'column', color: getColor('error') }, children: 'Si è verificato un errore' })
103
151
  : _jsx(_Fragment, { children: children }) }), showErrorGrid && validationItems.length > 0 ? _jsx(TMCard, { scrollY: true, padding: false, showBorder: false, children: _jsx(TMValidationItemsList, { validationItems: validationItems }) }) : _jsx(_Fragment, {})] }) }), (isModal && onClose) && _jsx("div", { id: "TMSaveFormShowConfirmForClose-" + id })] }));
104
152
  };
105
- return (_jsx(_Fragment, { children: (isModal && onClose) ? _jsx(_Fragment, { children: _jsx(TMModal, { title: `${title}${showTitleFormMode ? ` - ${LocalizeFormModes(formMode)}` : ''}`, onClose: doClose, width: width ?? '100%', height: height ?? '100%', hidePopup: false, askClosingConfirm: askClosingConfirm, showCloseButton: showCloseButton, children: _jsx("div", { style: { width: "100%", height: "100%", display: 'block' }, children: renderSaveForm() }) }) })
153
+ return (_jsx(_Fragment, { children: (isModal && onClose) ? _jsx(_Fragment, { children: _jsx(TMModal, { title: `${title}${showTitleFormMode ? ` - ${LocalizeFormModes(formMode)}` : ''}`, onClose: doClose, width: width ?? '100%', height: height ?? '100%', hidePopup: false, askClosingConfirm: askClosingConfirm, showCloseButton: showCloseButton, resizable: resizable, children: _jsx("div", { style: { width: "100%", height: "100%", display: 'block' }, children: renderSaveForm() }) }) })
106
154
  : renderSaveForm() }));
107
155
  };
108
156
  export default TMSaveForm;
@@ -2,7 +2,7 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import React, { useCallback, useEffect, useRef, useState } from "react";
3
3
  import { DossierEngine, LayoutModes, ObjectClasses, ResultTypes, SDK_Globals, TaskDescriptor, WorkingGroupEngine } from "@topconsultnpm/sdk-ts";
4
4
  import { ContextMenu as TMContextMenu } from "../NewComponents/ContextMenu";
5
- import { SDKUI_Localizator, Globalization, getExceptionMessage, TMConditionalWrapper, calcResponsiveSizes, getMoreInfoTasksForDocument } from "../../helper";
5
+ import { SDKUI_Localizator, Globalization, getExceptionMessage, TMConditionalWrapper, getMoreInfoTasksForDocument, taskModalSizes } from "../../helper";
6
6
  import TMToppyMessage from "../../helper/TMToppyMessage";
7
7
  import { useDcmtOperations } from "../../hooks/useDcmtOperations";
8
8
  import { DownloadTypes, FormModes } from "../../ts";
@@ -629,10 +629,10 @@ const TMBlogsPost = (props) => {
629
629
  console.warn(`Unhandled object type: ${ref.objClass}`);
630
630
  }
631
631
  };
632
- return _jsx("div", { ref: containerRef, style: { height: height, width: width }, 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: localShowWaitPanel, showWaitPanelPrimary: localShowPrimary, waitPanelTitle: localWaitPanelTitle, waitPanelTextPrimary: localWaitPanelTextPrimary, waitPanelValuePrimary: localWaitPanelValuePrimary, waitPanelMaxValuePrimary: localWaitPanelMaxValuePrimary, isCancelable: true, abortController: localAbortController, children: [_jsx(TMBlogHeader, { isVisible: currentHeader !== undefined && !isHeaderHidden, layoutMode: layoutMode, height: layoutMode === 'extended' ? "40px" : "70px", width: "100%", allPosts: posts, postsToShow: postsToShow, onPostsToShowChange: handlePostsToShowChange, categoryIdDataSource: categoryIdDataSource, appliedCategoryIdFilters: appliedCategoryIdFilters, setAppliedCategoryIdFilters: setAppliedCategoryIdFilters, searchText: searchText, onSearchChange: handleSearchChange }), _jsxs("div", { style: {
632
+ return _jsx("div", { ref: containerRef, style: { height: height, width: width }, 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: localShowWaitPanel, showWaitPanelPrimary: localShowPrimary, waitPanelTitle: localWaitPanelTitle, waitPanelTextPrimary: localWaitPanelTextPrimary, waitPanelValuePrimary: localWaitPanelValuePrimary, waitPanelMaxValuePrimary: localWaitPanelMaxValuePrimary, isCancelable: true, abortController: localAbortController, children: [_jsx(TMBlogHeader, { isVisible: currentHeader !== undefined && !isHeaderHidden, layoutMode: layoutMode, height: layoutMode === 'extended' ? "40px" : "70px", width: "100%", allPosts: posts, postsToShow: postsToShow, onPostsToShowChange: handlePostsToShowChange, categoryIdDataSource: categoryIdDataSource, appliedCategoryIdFilters: appliedCategoryIdFilters, setAppliedCategoryIdFilters: setAppliedCategoryIdFilters, searchText: searchText, onSearchChange: handleSearchChange }), _jsxs("div", { id: `${id}-blogs-wrapper`, onContextMenu: onContextMenu, style: {
633
633
  width: "100%",
634
634
  height: currentHeader !== undefined && !isHeaderHidden ? `calc(100% - ${layoutMode === 'extended' ? "40px" : "70px"})` : "100%",
635
- }, children: [blogPosts.length === 0 && _jsx(TMToppyMessage, { message: searchText.length > 0 ? SDKUI_Localizator.NoMessagesFound : SDKUI_Localizator.NoMessages }), blogPosts.length > 0 && _jsxs("div", { id: `${id}-blogs-container`, tabIndex: 0, onKeyDown: handleKeyDown, onContextMenu: onContextMenu, style: {
635
+ }, children: [blogPosts.length === 0 && _jsx(TMToppyMessage, { message: searchText.length > 0 ? SDKUI_Localizator.NoMessagesFound : SDKUI_Localizator.NoMessages }), blogPosts.length > 0 && _jsxs("div", { id: `${id}-blogs-container`, tabIndex: 0, onKeyDown: handleKeyDown, style: {
636
636
  height: '100%',
637
637
  width: '100%',
638
638
  outline: "none",
@@ -680,11 +680,11 @@ const TMBlogsPost = (props) => {
680
680
  boxShadow: isFocused ? "0 4px 12px rgba(19, 85, 150, 0.6)" : "none",
681
681
  cursor: 'pointer',
682
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);
683
- }), _jsx("div", { ref: bottomRef }), _jsx(TMContextMenu, { items: menuItems, target: `#${id}-blogs-container`, externalControl: {
684
- visible: menuVisible,
685
- position: menuPosition,
686
- onClose: closeContextMenu,
687
- } })] }), (showTaskForm && handleNavigateToWGs && handleNavigateToDossiers && getAllTasks && deleteTaskByIdsCallback && addTaskCallback && editTaskCallback) && _jsx("div", { style: { height: "100%", width: "100%" }, children: _jsx(TMTaskForm, { id: -1, title: SDKUI_Localizator.ContextualTask, isModal: true, width: calcResponsiveSizes(deviceType, '700px', '700px', '95%'), height: calcResponsiveSizes(deviceType, '670px', '80%', '95%'), formMode: FormModes.Create, visualizedTasks: [], currentTask: currentTask, setCurrentTask: () => { }, selectedRowKeys: [], handleFocusedRowKeyChange: () => { }, onStatusChanged: () => { }, onSaved: onSavedTaskFormCallback, onClose: () => closeTaskFormCallback(), onCancel: () => closeTaskFormCallback(), usersList: participants, handleNavigateToWGs: handleNavigateToWGs, handleNavigateToDossiers: handleNavigateToDossiers, isContextualCreate: true, taskContext: taskContext, allTasks: allTasks, getAllTasks: getAllTasks, deleteTaskByIdsCallback: deleteTaskByIdsCallback, addTaskCallback: addTaskCallback, editTaskCallback: editTaskCallback }) }), (dcmtForm.dcmt && dcmtForm.dcmt.TID && dcmtForm.dcmt.DID) && _jsx(TMDcmtForm, { TID: Number(dcmtForm.dcmt.TID), DID: Number(dcmtForm.dcmt.DID), layoutMode: LayoutModes.Update, onClose: closeDcmtForm, isClosable: true, titleModal: SDKUI_Localizator.Attachment + ": " + dcmtForm.dcmt.fileName, isModal: true, widthModal: "95%", heightModal: "95%", allTasks: allTasks, getAllTasks: getAllTasks, deleteTaskByIdsCallback: deleteTaskByIdsCallback, addTaskCallback: addTaskCallback, editTaskCallback: editTaskCallback, handleNavigateToWGs: handleNavigateToWGs, handleNavigateToDossiers: handleNavigateToDossiers, onReferenceClick: handleNavigateToReference, moreInfoTasks: getMoreInfoTasksForDocument(allTasks, Number(dcmtForm.dcmt.TID), Number(dcmtForm.dcmt.DID)) }), (showFloatingCommentButton && showCommentFormCallback && !(context?.engine === 'WorkingGroupEngine' && context?.object?.customData1 === 1)) && _jsx("button", { style: {
683
+ }), _jsx("div", { ref: bottomRef })] }), _jsx(TMContextMenu, { items: menuItems, target: `#${id}-blogs-wrapper`, externalControl: {
684
+ visible: menuVisible,
685
+ position: menuPosition,
686
+ onClose: closeContextMenu,
687
+ } }), (showTaskForm && handleNavigateToWGs && handleNavigateToDossiers && getAllTasks && deleteTaskByIdsCallback && addTaskCallback && editTaskCallback) && _jsx("div", { style: { height: "100%", width: "100%" }, children: _jsx(TMTaskForm, { id: -1, title: SDKUI_Localizator.ContextualTask, isModal: true, width: taskModalSizes(deviceType, FormModes.Create).width, height: taskModalSizes(deviceType, FormModes.Create).height, formMode: FormModes.Create, visualizedTasks: [], currentTask: currentTask, setCurrentTask: () => { }, selectedRowKeys: [], handleFocusedRowKeyChange: () => { }, onStatusChanged: () => { }, onSaved: onSavedTaskFormCallback, onClose: () => closeTaskFormCallback(), onCancel: () => closeTaskFormCallback(), usersList: participants, handleNavigateToWGs: handleNavigateToWGs, handleNavigateToDossiers: handleNavigateToDossiers, isContextualCreate: true, taskContext: taskContext, allTasks: allTasks, getAllTasks: getAllTasks, deleteTaskByIdsCallback: deleteTaskByIdsCallback, addTaskCallback: addTaskCallback, editTaskCallback: editTaskCallback }) }), (dcmtForm.dcmt && dcmtForm.dcmt.TID && dcmtForm.dcmt.DID) && _jsx(TMDcmtForm, { TID: Number(dcmtForm.dcmt.TID), DID: Number(dcmtForm.dcmt.DID), layoutMode: LayoutModes.Update, onClose: closeDcmtForm, isClosable: true, titleModal: SDKUI_Localizator.Attachment + ": " + dcmtForm.dcmt.fileName, isModal: true, widthModal: "95%", heightModal: "95%", allTasks: allTasks, getAllTasks: getAllTasks, deleteTaskByIdsCallback: deleteTaskByIdsCallback, addTaskCallback: addTaskCallback, editTaskCallback: editTaskCallback, handleNavigateToWGs: handleNavigateToWGs, handleNavigateToDossiers: handleNavigateToDossiers, onReferenceClick: handleNavigateToReference, moreInfoTasks: getMoreInfoTasksForDocument(allTasks, Number(dcmtForm.dcmt.TID), Number(dcmtForm.dcmt.DID)) }), (showFloatingCommentButton && showCommentFormCallback && !(context?.engine === 'WorkingGroupEngine' && context?.object?.customData1 === 1)) && _jsx("button", { style: {
688
688
  position: 'absolute',
689
689
  bottom: '18px',
690
690
  right: '20px',
@@ -1,6 +1,6 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
2
  import { DcmtTypeListCacheService } from "@topconsultnpm/sdk-ts";
3
- import { getAvatarColor, extractInitialsFromName, SDKUI_Localizator, formatBytes, IconMenuCAWorkingGroups, IconCADossier, Globalization } from "../../helper";
3
+ import { getAvatarColor, extractInitialsFromName, SDKUI_Localizator, formatBytes, IconMenuCAWorkingGroups, IconCADossier, Globalization, PDGS_COLORS } from "../../helper";
4
4
  import { TMColors } from "../../utils/theme";
5
5
  import TMTooltip from "../base/TMTooltip";
6
6
  export const DRAFT_TYPE_TID = 6;
@@ -167,7 +167,7 @@ export const getDcmtTypeDescriptor = async (blogPosts) => {
167
167
  };
168
168
  export const BlogPostHomeHeader = (header, classId, isSelected, searchText, headerClickCallback) => {
169
169
  const isWorkGroup = classId === 'WG';
170
- const iconColor = isSelected ? '#ffffff' : isWorkGroup ? '#009700' : '#e65b00';
170
+ const iconColor = isSelected ? '#ffffff' : isWorkGroup ? PDGS_COLORS.WORKING_GROUP : PDGS_COLORS.DOSSIER;
171
171
  return (_jsxs("div", { style: {
172
172
  display: "flex",
173
173
  alignItems: "center",
@@ -130,7 +130,7 @@ const TMRecentsManager = ({ deviceType, mruTIDs, currentMruTID, accessFilter = '
130
130
  alignItems: 'center',
131
131
  justifyContent: 'center',
132
132
  minWidth: 0
133
- }, children: _jsx(TMTidViewer, { tid: dtd.id, color: TMColors.primaryColor, showIcon: false }) }), _jsx("span", { style: {
133
+ }, children: _jsx(TMTidViewer, { tid: dtd.id, showIcon: false }) }), _jsx("span", { style: {
134
134
  width: 24,
135
135
  height: 24,
136
136
  borderRadius: 24,
@@ -43,6 +43,8 @@ export { editorColorManager } from './editors/TMEditorStyled';
43
43
  export { default as TMLocalizedTextBox } from './editors/TMLocalizedTextBox';
44
44
  export * from './choosers/TMCultureIDPicker';
45
45
  export * from './choosers/TMDataListItemChooser';
46
+ export * from './choosers/TMDataListItemFields';
47
+ export * from './choosers/TMImageIDChooser';
46
48
  export * from './choosers/TMDistinctValues';
47
49
  export * from './choosers/TMDiskChooser';
48
50
  export * from './choosers/TMDynDataListItemChooser';
@@ -46,6 +46,8 @@ export { default as TMLocalizedTextBox } from './editors/TMLocalizedTextBox';
46
46
  // chooserss
47
47
  export * from './choosers/TMCultureIDPicker';
48
48
  export * from './choosers/TMDataListItemChooser';
49
+ export * from './choosers/TMDataListItemFields';
50
+ export * from './choosers/TMImageIDChooser';
49
51
  export * from './choosers/TMDistinctValues';
50
52
  export * from './choosers/TMDiskChooser';
51
53
  export * from './choosers/TMDynDataListItemChooser';
@@ -41,6 +41,8 @@ const TMPage = ({ id, objClass = ObjectClasses.None, listDisabled = false, lastR
41
41
  let itemsCount = gridInstance?.instance().getDataSource().items().length;
42
42
  if (itemsCount && itemsCount > 0) {
43
43
  gridInstance?.instance().selectRows(selectedItems?.map((item) => item.id) ?? [], false);
44
+ if (selectedItems && selectedItems.length > 0 && (selectedItems?.[0]).id)
45
+ gridInstance?.instance()?.navigateToRow((selectedItems?.[0]).id);
44
46
  }
45
47
  }, [selectedItems]);
46
48
  useEffect(() => {
@@ -52,6 +54,8 @@ const TMPage = ({ id, objClass = ObjectClasses.None, listDisabled = false, lastR
52
54
  useEffect(() => {
53
55
  if (lastRefreshTime) {
54
56
  loadDataAsync(id);
57
+ if (id)
58
+ gridInstance?.instance()?.navigateToRow(id);
55
59
  }
56
60
  }, [lastRefreshTime]);
57
61
  useEffect(() => {
@@ -48,6 +48,7 @@ interface ITMQueryEditor extends ITMApplyFormProps<QueryDescriptor> {
48
48
  ShowOnlySAP?: boolean;
49
49
  updateIsModalOpen?: (isOpen: boolean) => void;
50
50
  showSearchResultSidebar?: boolean;
51
+ showDcmtFormSidebar?: boolean;
51
52
  showToppyDraggableHelpCenter?: boolean;
52
53
  toppyHelpCenterUsePortal?: boolean;
53
54
  }
@@ -62,7 +62,7 @@ export function useQueryApplyForm(d, formMode, inputData, onApplied, parameters)
62
62
  const [validationItems, setValidationItems] = useState([]);
63
63
  return { formData, setFormData, formDataOrig, validationItems, setValidationItems, exception, applyData };
64
64
  }
65
- const TMQueryEditor = ({ formMode, inputData, onQDChanged, isExpertMode, showDistinct = false, showToolbar = true, validateSelect = true, validateOrderBy = true, raiseWarningForOnlyMetadataDcmtTypes = false, onApplied, onClose, height = 'auto', borderRadius = '4px', searchText, showApply, showUndo, showBack, onFromTIDChanged, ShowOnlySAP, updateIsModalOpen, showSearchResultSidebar = true, showToppyDraggableHelpCenter = true, toppyHelpCenterUsePortal = false }) => {
65
+ const TMQueryEditor = ({ formMode, inputData, onQDChanged, isExpertMode, showDistinct = false, showToolbar = true, validateSelect = true, validateOrderBy = true, raiseWarningForOnlyMetadataDcmtTypes = false, onApplied, onClose, height = 'auto', borderRadius = '4px', searchText, showApply, showUndo, showBack, onFromTIDChanged, ShowOnlySAP, updateIsModalOpen, showSearchResultSidebar = true, showDcmtFormSidebar = true, showToppyDraggableHelpCenter = true, toppyHelpCenterUsePortal = false }) => {
66
66
  const [confirmQueryParams, ConfirmQueryParamsDialog] = useQueryParametersDialog();
67
67
  const { formData, setFormData, formDataOrig, validationItems, setValidationItems, exception, applyData } = useQueryApplyForm(Descriptors.Query, formMode, inputData, onApplied);
68
68
  const [dcmtTypesList, setDcmtTypesList] = useState([]);
@@ -598,7 +598,7 @@ const TMQueryEditor = ({ formMode, inputData, onQDChanged, isExpertMode, showDis
598
598
  // #region Ricerca
599
599
  const renderResultSearchForm = (_jsx(TMSearchResult, { context: SearchResultContext.METADATA_SEARCH, allowFloatingBar: false, onClose: () => {
600
600
  setShowResultSearch(false);
601
- }, searchResults: resultSearch, showSearchResultSidebar: showSearchResultSidebar, showToppyDraggableHelpCenter: showToppyDraggableHelpCenter, toppyHelpCenterUsePortal: toppyHelpCenterUsePortal }));
601
+ }, searchResults: resultSearch, showSearchResultSidebar: showSearchResultSidebar, showDcmtFormSidebar: showDcmtFormSidebar, showToppyDraggableHelpCenter: showToppyDraggableHelpCenter, toppyHelpCenterUsePortal: toppyHelpCenterUsePortal }));
602
602
  const onSearchAsync = async (qdInput) => {
603
603
  try {
604
604
  let qdSearch = await prepareQdForSearchAsync(qdInput);
@@ -101,6 +101,11 @@ export function LocalizeJobTypes(value) {
101
101
  case CultureIDs.It_IT: return value?.toString();
102
102
  default: return "CustomsDrawerPlus";
103
103
  }
104
+ // case JobTypes.CassettoDoganaleDistiller:
105
+ // switch (cultureID) {
106
+ // case CultureIDs.It_IT: return value?.toString();
107
+ // default: return "CustomsDrawerDistiller";
108
+ // }
104
109
  default: return value?.toString() ?? '';
105
110
  }
106
111
  }
@@ -6,5 +6,8 @@ const GlobalStyle = createGlobalStyle `
6
6
  * {
7
7
  font-family: var(--base-font-family, "Inter"), sans-serif;
8
8
  }
9
+ .dx-filemanager-dirs-tree-item-text{
10
+ font-size: var(--base-font-size, 13px);
11
+ }
9
12
  `;
10
13
  export default GlobalStyle;
@@ -16,6 +16,8 @@ export declare class UserSettings {
16
16
  fullTextSettings: FullTextSettings;
17
17
  searchSettings: SearchSettings;
18
18
  themeSettings: ThemeSettings;
19
+ devSettings: DevSettings;
20
+ ctrlWfSettings: CtrlWfSettings;
19
21
  dcmtFormSettings: DcmtFormSettings[];
20
22
  wgDraftCheckoutInfo: CheckoutInfo[];
21
23
  dcmtCheckoutInfo: CheckoutInfo[];
@@ -84,6 +86,9 @@ export declare class ArchivingSettings {
84
86
  export declare class FullTextSettings {
85
87
  mruTerms: string[];
86
88
  }
89
+ export declare class DevSettings {
90
+ betaFeatures: number;
91
+ }
87
92
  export declare class AdvancedSettings {
88
93
  private _expertMode;
89
94
  get expertMode(): number;
@@ -92,6 +97,9 @@ export declare class AdvancedSettings {
92
97
  expertMode: number;
93
98
  };
94
99
  }
100
+ export declare class CtrlWfSettings {
101
+ detailWIFormWidth: string;
102
+ }
95
103
  export declare class DcmtFormSettings {
96
104
  TID: number | undefined;
97
105
  layout: {
@@ -18,6 +18,8 @@ export class UserSettings {
18
18
  this.fullTextSettings = new FullTextSettings();
19
19
  this.searchSettings = new SearchSettings();
20
20
  this.themeSettings = new ThemeSettings(true);
21
+ this.devSettings = new DevSettings();
22
+ this.ctrlWfSettings = new CtrlWfSettings();
21
23
  this.dcmtFormSettings = [];
22
24
  this.wgDraftCheckoutInfo = [];
23
25
  this.dcmtCheckoutInfo = [];
@@ -120,6 +122,11 @@ export class FullTextSettings {
120
122
  this.mruTerms = [];
121
123
  }
122
124
  }
125
+ export class DevSettings {
126
+ constructor() {
127
+ this.betaFeatures = 0;
128
+ }
129
+ }
123
130
  export class AdvancedSettings {
124
131
  constructor() {
125
132
  this._expertMode = 0;
@@ -142,6 +149,11 @@ export class AdvancedSettings {
142
149
  };
143
150
  }
144
151
  }
152
+ export class CtrlWfSettings {
153
+ constructor() {
154
+ this.detailWIFormWidth = '30';
155
+ }
156
+ }
145
157
  export class DcmtFormSettings {
146
158
  constructor() {
147
159
  this.layout = {};