@topconsultnpm/sdkui-react 6.21.0-dev2.46 → 6.21.0-dev2.47

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.
@@ -9,23 +9,28 @@ const TMTreeView = ({ dataSource = [], focusedItem, selectedItems = [], allowMul
9
9
  if (!focusedItem)
10
10
  return;
11
11
  let newFocusedItem = null;
12
+ let handled = false;
12
13
  switch (event.key) {
13
14
  case 'ArrowDown':
14
15
  newFocusedItem = findNextItem(dataSource, focusedItem);
16
+ handled = true;
15
17
  break;
16
18
  case 'ArrowUp':
17
19
  newFocusedItem = findPreviousItem(dataSource, focusedItem);
20
+ handled = true;
18
21
  break;
19
22
  case '+':
20
23
  if (!focusedItem.expanded) {
21
24
  handleNodeToggle(focusedItem.key, false);
22
25
  newFocusedItem = { ...focusedItem, expanded: true };
26
+ handled = true;
23
27
  }
24
28
  break;
25
29
  case '-':
26
30
  if (focusedItem.expanded) {
27
31
  handleNodeToggle(focusedItem.key, false);
28
32
  newFocusedItem = { ...focusedItem, expanded: false };
33
+ handled = true;
29
34
  }
30
35
  break;
31
36
  // case ' ':
@@ -40,12 +45,17 @@ const TMTreeView = ({ dataSource = [], focusedItem, selectedItems = [], allowMul
40
45
  default:
41
46
  break;
42
47
  }
48
+ if (handled) {
49
+ event.preventDefault();
50
+ event.stopPropagation();
51
+ }
43
52
  if (newFocusedItem)
44
53
  onFocusedItemChanged?.(newFocusedItem);
45
54
  };
46
- window.addEventListener('keydown', handleKeyDown);
55
+ // Usa capture: true per intercettare l'evento PRIMA che DevExtreme Popup lo gestisca
56
+ window.addEventListener('keydown', handleKeyDown, true);
47
57
  return () => {
48
- window.removeEventListener('keydown', handleKeyDown);
58
+ window.removeEventListener('keydown', handleKeyDown, true);
49
59
  };
50
60
  }, [focusedItem, dataSource, onFocusedItemChanged]);
51
61
  const findNextItem = (nodes, currentItem) => {
@@ -18,13 +18,16 @@ const StyledWaitPanel = styled.div `
18
18
  top: 50%;
19
19
  left: 50%;
20
20
  transform: translate(-50%, -50%);
21
- width: 300px;
22
- height: ${(props) => props.$height};
21
+ width: 300px;
22
+ max-width: calc(100% - 20px);
23
+ height: auto;
24
+ max-height: calc(100% - 20px);
23
25
  background: white;
24
26
  border-radius: 8px;
25
27
  padding: 10px;
26
28
  text-align: center;
27
- box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2);
29
+ box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2);
30
+ overflow: auto;
28
31
  `;
29
32
  const StyledTitle = styled.h2 ` margin: 0; font-size: 1.5em; color: #333; `;
30
33
  const StyledProgressBarContainer = styled.div ` width: 100%; height: 20px; background: #e0e0e0; border-radius: 10px; overflow: hidden; margin: 20px 0; `;
@@ -42,7 +45,7 @@ export const TMWaitPanel = (props) => {
42
45
  };
43
46
  let progressValue1 = calculateProgress(valuePrimary, maxValuePrimary);
44
47
  let progressValue2 = calculateProgress(valueSecondary, maxValueSecondary);
45
- return (_jsx(StyledWaitPanelOverlay, { children: _jsxs(StyledWaitPanel, { "$height": (showPrimary && showSecondary) ? '350px' : '250px', children: [_jsx(StyledTitle, { children: title }), showPrimary &&
48
+ return (_jsx(StyledWaitPanelOverlay, { children: _jsxs(StyledWaitPanel, { children: [_jsx(StyledTitle, { children: title }), showPrimary &&
46
49
  _jsxs("div", { style: { width: '100%', height: '100px' }, children: [_jsx(StyledProgressBarContainer, { children: _jsx(StyledProgressBar, { style: { width: `${progressValue1.toFixed(2)}%` } }) }), _jsxs(StyledProgressText, { children: [progressValue1.toFixed(2), "%"] }), _jsx(StyledMessage, { children: textPrimary })] }), showSecondary &&
47
50
  _jsxs("div", { style: { width: '100%', height: '100px' }, children: [_jsx(StyledProgressBarContainer, { children: _jsx(StyledProgressBar, { style: { width: `${progressValue2.toFixed(2)}%` } }) }), _jsxs(StyledProgressText, { children: [progressValue2.toFixed(2), "%"] }), _jsx(StyledMessage, { children: textSecondary })] }), isCancelable && _jsx(StyledAbortButton, { onClick: () => onAbortClick?.(abortController), children: SDKUI_Localizator.Abort })] }) }));
48
51
  };
@@ -43,12 +43,13 @@ const StyledradioButtonLabel = styled.label `
43
43
  -webkit-touch-callout: none;
44
44
  -webkit-user-select: none;
45
45
  width: 100%;
46
- cursor: ${props => !props.$disabled && 'pointer'};
46
+ cursor: ${props => !props.$disabled ? 'pointer' : 'default'};
47
+ pointer-events: ${props => props.$disabled ? 'none' : 'auto'};
47
48
  &:focus{
48
49
  outline: none;
49
- background-image: linear-gradient(white, #E4E9F7);
50
- border-bottom: 2px solid ;
51
- border-bottom-color: ${props => !props.$isModifiedWhen ? TMColors.primary : TMColors.isModified};
50
+ background-image: ${props => !props.$disabled ? 'linear-gradient(white, #E4E9F7)' : 'none'};
51
+ border-bottom: ${props => !props.$disabled ? '2px solid' : 'none'};
52
+ border-bottom-color: ${props => !props.$disabled ? (!props.$isModifiedWhen ? TMColors.primary : TMColors.isModified) : 'transparent'};
52
53
  }
53
54
  `;
54
55
  const TMRadioButton = ({ isModifiedWhen, flexBase = 1, elementStyle, label, value, fontSize = FontSize.defaultFontSize, dataSource = [], direction = 'row', onValueChanged, disabled = false }) => {
@@ -1,5 +1,5 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { useRef, useState } from 'react';
2
+ import { useMemo, useRef, useState } from 'react';
3
3
  import { DownloadTypes } from '../../../ts';
4
4
  import { calcResponsiveSizes, DocumentDownloadSettings, IconDelete, IconFolderOpen, IconPlay, IconSave, IconUndo, SDKUI_Globals, SDKUI_Localizator, ZipManager, } from '../../../helper';
5
5
  import { DcmtOpers, GeneralRetrieveFormats, ResultTypes, RetrieveFileOptions, ValidationItem, } from '@topconsultnpm/sdk-ts';
@@ -19,7 +19,7 @@ import TMCheckBox from '../../editors/TMCheckBox';
19
19
  import ShowAlert from '../../base/TMAlert';
20
20
  import { TMColors } from '../../../utils/theme';
21
21
  import TMDownloadRelationViewerSection from './TMDownloadRelationViewerSection';
22
- import { buildInitialDownloadSettings, fileExists, generateTargetFileName, generateUniqueFileName, getDcmtInfosToDownload, getFloatingLabelStyle, isDirectoryPickerSupported, SPLITTER_MIN, SPLITTER_START_60_40, } from './copyAndMergeDcmtsShared';
22
+ import { buildInitialDownloadSettings, fileExists, generateTargetFileName, generateUniqueFileName, getDcmtInfosToDownload, getFloatingLabelStyle, isDirectoryPickerSupported, } from './copyAndMergeDcmtsShared';
23
23
  /**
24
24
  * Form per la copia/zip dei documenti in una cartella locale.
25
25
  * Logica condivisa con TMMergeToPdfForm è esternalizzata in copyAndMergeDcmtsShared
@@ -27,6 +27,7 @@ import { buildInitialDownloadSettings, fileExists, generateTargetFileName, gener
27
27
  */
28
28
  const TMCopyToFolderForm = ({ mode, selectedDcmtInfos, onClose, showTMRelationViewer, allTasks, getAllTasks, deleteTaskByIdsCallback, addTaskCallback, editTaskCallback, handleNavigateToWGs, handleNavigateToDossiers }) => {
29
29
  const { abortController, showWaitPanel, waitPanelTitle, showPrimary, waitPanelTextPrimary, waitPanelValuePrimary, waitPanelMaxValuePrimary, showSecondary, waitPanelTextSecondary, waitPanelValueSecondary, waitPanelMaxValueSecondary, downloadDcmtsAsync, } = useDcmtOperations();
30
+ // Get the current device type (e.g., mobile, tablet, desktop) using a custom hook.
30
31
  const deviceType = useDeviceType();
31
32
  // ---- Stato dei settings ----
32
33
  const [settings, setSettings] = useState(() => buildInitialDownloadSettings(SDKUI_Globals.userSettings.documentDownloadSettings, SDKUI_Globals.userSettings.searchSettings.invoiceRetrieveFormat, SDKUI_Globals.userSettings.searchSettings.orderRetrieveFormat));
@@ -54,14 +55,17 @@ const TMCopyToFolderForm = ({ mode, selectedDcmtInfos, onClose, showTMRelationVi
54
55
  };
55
56
  const isUsingDefaultDownloads = settings.destinationFolder === 'Download' && !folderHandleRef.current;
56
57
  // ---- Validazione ----
57
- const folderValidationItems = [];
58
- if (settings.exportMode === 'copy' && !settings.destinationFolder.trim()) {
59
- folderValidationItems.push(new ValidationItem(ResultTypes.ERROR, SDKUI_Localizator.Path, SDKUI_Localizator.RequiredField));
60
- }
61
- const zipValidationItems = [];
62
- if (settings.exportMode === 'zip' && !settings.zipFileName.trim()) {
63
- zipValidationItems.push(new ValidationItem(ResultTypes.ERROR, SDKUI_Localizator.ZipFileName, SDKUI_Localizator.RequiredField));
64
- }
58
+ const { folderValidationItems, zipValidationItems } = useMemo(() => {
59
+ const folderItems = [];
60
+ const zipItems = [];
61
+ if (settings.exportMode === 'copy' && !settings.destinationFolder.trim()) {
62
+ folderItems.push(new ValidationItem(ResultTypes.ERROR, SDKUI_Localizator.FolderName, SDKUI_Localizator.RequiredField));
63
+ }
64
+ if (settings.exportMode === 'zip' && !settings.zipFileName.trim()) {
65
+ zipItems.push(new ValidationItem(ResultTypes.ERROR, SDKUI_Localizator.ZipFileName, SDKUI_Localizator.RequiredField));
66
+ }
67
+ return { folderValidationItems: folderItems, zipValidationItems: zipItems };
68
+ }, [settings.exportMode, settings.destinationFolder, settings.zipFileName]);
65
69
  const isFormValid = () => {
66
70
  if (settings.exportMode === 'copy')
67
71
  return folderValidationItems.length === 0;
@@ -258,16 +262,59 @@ const TMCopyToFolderForm = ({ mode, selectedDcmtInfos, onClose, showTMRelationVi
258
262
  }
259
263
  return JSON.stringify(settings) === JSON.stringify(saved);
260
264
  };
265
+ // ---- Componenti comuni riutilizzati in entrambe le modalità (copy/zip) ----
266
+ const folderSelector = isDirectoryPickerSupported() ? (_jsx("div", { style: { flex: '1 1 280px', minWidth: '280px' }, children: _jsx(TMTextBox, { label: SDKUI_Localizator.FolderName, value: settings.destinationFolder, validationItems: folderValidationItems, onValueChanged: handleFolderValueChange, readOnly: true, placeHolder: "Download", onClick: handleSelectFolder, buttons: [
267
+ {
268
+ icon: _jsx(IconFolderOpen, {}),
269
+ text: SDKUI_Localizator.SelectFolder,
270
+ onClick: handleSelectFolder
271
+ },
272
+ ...(!isUsingDefaultDownloads ? [{
273
+ icon: _jsx(IconUndo, {}),
274
+ text: SDKUI_Localizator.RestoreDownload,
275
+ onClick: () => {
276
+ skipSelectFolderRef.current = true;
277
+ updateSettings('destinationFolder', 'Download');
278
+ folderHandleRef.current = null;
279
+ }
280
+ }] : [])
281
+ ] }) })) : (_jsx("div", { style: { flex: '1 1 280px', minWidth: '280px' }, children: _jsxs("div", { style: { position: 'relative', marginTop: '16px' }, children: [_jsx("span", { style: {
282
+ position: 'absolute',
283
+ top: '-10px',
284
+ left: '12px',
285
+ fontSize: '0.9rem',
286
+ color: TMColors.label_normal,
287
+ padding: '0 3px',
288
+ userSelect: 'none',
289
+ WebkitTouchCallout: 'none',
290
+ WebkitUserSelect: 'none',
291
+ width: 'max-content',
292
+ backgroundColor: TMColors.default_background,
293
+ zIndex: 1,
294
+ }, children: SDKUI_Localizator.Path }), _jsxs("div", { style: { border: `1px solid ${TMColors.border_normal}`, borderRadius: '5px', padding: '4px 10px 4px 13px', display: 'flex', alignItems: 'center', gap: '8px', backgroundColor: '#fafafa' }, children: [_jsx(IconFolderOpen, {}), _jsx("span", { style: { fontSize: '0.9rem', color: '#333' }, children: "Download" })] }), _jsx("span", { style: { fontSize: '0.8rem', color: '#888', fontStyle: 'italic', marginTop: '4px', display: 'block' }, children: SDKUI_Localizator.BrowserDoesNotSupportFolderSelection })] }) }));
295
+ const fileNamingRow = (_jsxs("div", { style: {
296
+ display: 'flex',
297
+ flexWrap: 'wrap',
298
+ alignItems: 'flex-end',
299
+ gap: '10px',
300
+ width: '100%',
301
+ }, children: [_jsx(TMDropDown, { label: SDKUI_Localizator.UseForFileName, value: settings.fileNamingMode, dataSource: [
302
+ { value: 'onlyDid', display: SDKUI_Localizator.OnlyDID },
303
+ { value: 'documentTypeAndDid', display: SDKUI_Localizator.DocumentTypeNameAndDID },
304
+ { value: 'documentTypeAndCustomMetadata', display: SDKUI_Localizator.DocumentTypeNameAndCustomMetadata },
305
+ { value: 'onlyCustomMetadata', display: SDKUI_Localizator.OnlyCustomMetadata },
306
+ ], onValueChanged: handleFileNamingModeChange, width: '280px' }), _jsx(TMTextBox, { label: SDKUI_Localizator.Separator, value: settings.separatorChar, maxLength: 1, onValueChanged: (e) => handleSeparatorChange(e), width: '100px', elementStyle: { textAlign: 'center' } }), _jsx("div", { style: { paddingBottom: '7px' }, children: _jsx(TMCheckBox, { label: SDKUI_Localizator.RemoveSignatureIfPresent, value: settings.removeSignature, onValueChanged: (value) => updateSettings('removeSignature', value) }) })] }));
307
+ const formatSelectorsRow = (_jsxs("div", { style: { display: 'flex', flexWrap: 'wrap', columnGap: '10px', width: '100%' }, children: [_jsx("div", { style: { flex: '1 1 280px', minWidth: '280px' }, children: _jsx(TMInvoiceRetrieveFormats, { width: '100%', label: SDKUI_Localizator.ElectronicInvoice + ' - ' + SDKUI_Localizator.DisplayFormat, onValueChanged: (newValue) => updateSettings('invoiceFormat', newValue), value: settings.invoiceFormat, valueOrig: settings.invoiceFormat }) }), _jsx("div", { style: { flex: '1 1 280px', minWidth: '280px' }, children: _jsx(TMOrderRetrieveFormats, { width: '100%', label: SDKUI_Localizator.ElectronicOrder + ' - ' + SDKUI_Localizator.DisplayFormat, value: settings.orderFormat, valueOrig: settings.orderFormat, onValueChanged: (newValue) => updateSettings('orderFormat', newValue) }) })] }));
261
308
  // ---- Render della sezione configurazione ----
262
309
  const configSection = (_jsxs("div", { style: {
263
310
  position: 'relative',
264
311
  border: `1px solid ${TMColors.border_normal}`,
265
312
  borderRadius: '8px',
266
313
  padding: '10px 6px 6px 6px',
267
- height: showTMRelationViewer ? '100%' : undefined,
314
+ height: showTMRelationViewer ? 'calc(100% - 7px)' : undefined,
315
+ marginTop: '7px',
268
316
  flex: showTMRelationViewer ? undefined : 1,
269
317
  minHeight: 0,
270
- marginTop: '8px',
271
318
  display: 'flex',
272
319
  flexDirection: 'column',
273
320
  boxSizing: 'border-box'
@@ -287,60 +334,46 @@ const TMCopyToFolderForm = ({ mode, selectedDcmtInfos, onClose, showTMRelationVi
287
334
  flex: 1,
288
335
  overflowY: 'auto',
289
336
  minHeight: 0,
290
- }, children: [_jsx("div", { style: { display: 'flex', justifyContent: 'center', alignItems: 'center' }, children: _jsx(TMRadioButton, { dataSource: [
337
+ }, children: [_jsx("div", { style: { display: 'flex', justifyContent: 'flex-start', alignItems: 'center', marginTop: "8px" }, children: _jsx(TMRadioButton, { dataSource: [
291
338
  { value: 'copy', display: SDKUI_Localizator.CopyToFolder },
292
339
  { value: 'zip', display: SDKUI_Localizator.CompressToZipFile }
293
- ], value: settings.exportMode, direction: "row", onValueChanged: (value) => updateSettings('exportMode', value) }) }), isDirectoryPickerSupported() ? (_jsxs("div", { style: { display: 'flex', flexDirection: 'column', gap: '4px' }, children: [_jsx(TMTextBox, { label: SDKUI_Localizator.Path, value: settings.destinationFolder, validationItems: folderValidationItems, onValueChanged: handleFolderValueChange, readOnly: true, placeHolder: "Download", onClick: handleSelectFolder, buttons: [
294
- {
295
- icon: _jsx(IconFolderOpen, {}),
296
- text: SDKUI_Localizator.SelectFolder,
297
- onClick: handleSelectFolder
298
- },
299
- ...(!isUsingDefaultDownloads ? [{
300
- icon: _jsx(IconUndo, {}),
301
- text: SDKUI_Localizator.RestoreDownload,
302
- onClick: () => {
303
- skipSelectFolderRef.current = true;
304
- updateSettings('destinationFolder', 'Download');
305
- folderHandleRef.current = null;
306
- }
307
- }] : [])
308
- ] }), SDKUI_Globals.userSettings.documentDownloadSettings?.destinationFolder && (_jsxs("span", { style: { fontSize: '0.8rem', color: '#666', fontStyle: 'italic' }, children: [SDKUI_Localizator.SavedDestination, ": ", SDKUI_Globals.userSettings.documentDownloadSettings.destinationFolder] }))] })) : (_jsxs("div", { style: { display: 'flex', flexDirection: 'column', gap: '4px' }, children: [_jsx("label", { style: { fontSize: '0.9rem', color: '#525252' }, children: SDKUI_Localizator.Path }), _jsxs("div", { style: {
309
- display: 'flex',
310
- alignItems: 'center',
311
- gap: '8px',
312
- padding: '8px 12px',
313
- border: `1px solid ${TMColors.border_normal}`,
314
- borderRadius: '5px',
315
- backgroundColor: '#fafafa',
316
- }, children: [_jsx(IconFolderOpen, {}), _jsx("span", { style: { fontSize: '0.9rem', color: '#333' }, children: "Download" })] }), _jsx("span", { style: { fontSize: '0.8rem', color: '#888', fontStyle: 'italic' }, children: SDKUI_Localizator.BrowserDoesNotSupportFolderSelection })] })), settings.exportMode === 'zip' && (_jsxs("div", { style: { display: 'grid', gridTemplateColumns: 'repeat(auto-fit, minmax(220px, 1fr))', gap: '12px' }, children: [_jsx(TMTextBox, { label: SDKUI_Localizator.ZipFileName, value: settings.zipFileName, validationItems: zipValidationItems, autoComplete: "one-time-code", onValueChanged: (e) => updateSettings('zipFileName', e.target.value) }), _jsx(TMTextBox, { label: SDKUI_Localizator.ProtectWithPasswordOptional, value: settings.zipPassword, type: "password", autoComplete: "one-time-code", onValueChanged: (e) => updateSettings('zipPassword', e.target.value) })] })), settings.exportMode === 'copy' && isDirectoryPickerSupported() && (_jsx("div", { style: { display: 'flex', flexDirection: 'column', gap: '4px', marginTop: '8px' }, children: isUsingDefaultDownloads ? (_jsxs("span", { style: { fontSize: '0.8rem', color: '#888', fontStyle: 'italic' }, children: [SDKUI_Localizator.BrowserAutoRenamesDuplicateFilesInDownloadsFolder, "."] })) : (_jsxs("div", { style: { display: 'flex', flexDirection: 'row', alignItems: 'center', gap: '12px', flexWrap: 'wrap' }, children: [_jsx("label", { style: { fontSize: '0.9rem', color: '#525252', fontWeight: 500 }, children: SDKUI_Localizator.IfFileExists }), _jsx(TMRadioButton, { dataSource: [
317
- { value: 'overwrite', display: SDKUI_Localizator.CopyAndReplace },
318
- { value: 'skip', display: SDKUI_Localizator.DoNotCopy },
319
- { value: 'rename', display: SDKUI_Localizator.CopyButRename },
320
- ], value: settings.fileExistsMode, direction: "row", onValueChanged: (value) => updateSettings('fileExistsMode', value) })] })) })), _jsxs("div", { style: { display: 'flex', alignItems: 'flex-end', gap: '12px', flexWrap: 'wrap' }, children: [_jsx("div", { style: { flex: '0 0 auto', minWidth: '160px' }, children: _jsx(TMDropDown, { label: SDKUI_Localizator.UseForFileName, value: settings.fileNamingMode, dataSource: [
321
- { value: 'onlyDid', display: SDKUI_Localizator.OnlyDID },
322
- { value: 'documentTypeAndDid', display: SDKUI_Localizator.DocumentTypeNameAndDID },
323
- { value: 'documentTypeAndCustomMetadata', display: SDKUI_Localizator.DocumentTypeNameAndCustomMetadata },
324
- { value: 'onlyCustomMetadata', display: SDKUI_Localizator.OnlyCustomMetadata },
325
- ], onValueChanged: handleFileNamingModeChange }) }), _jsxs("div", { style: { display: 'flex', alignItems: 'center', gap: '8px' }, children: [_jsx("label", { style: { fontSize: '0.9rem', color: '#525252', whiteSpace: 'nowrap' }, children: SDKUI_Localizator.SeparatorCharacter }), _jsx("input", { type: "text", value: settings.separatorChar, maxLength: 1, onChange: handleSeparatorChange, style: {
326
- width: '32px',
327
- height: '28px',
328
- textAlign: 'center',
329
- fontSize: '14px',
330
- fontWeight: 500,
331
- padding: '4px',
332
- border: `1px solid ${TMColors.border_normal}`,
333
- borderRadius: '5px',
334
- outline: 'none',
335
- color: 'black',
336
- background: 'white',
337
- }, onFocus: (e) => {
338
- e.target.style.backgroundImage = 'linear-gradient(white, #E4E9F7)';
339
- e.target.style.borderBottom = `2px solid ${TMColors.primary}`;
340
- }, onBlur: (e) => {
341
- e.target.style.backgroundImage = 'none';
342
- e.target.style.borderBottom = `1px solid ${TMColors.border_normal}`;
343
- } })] }), _jsx(TMCheckBox, { label: SDKUI_Localizator.RemoveSignatureIfPresent, value: settings.removeSignature, onValueChanged: (value) => updateSettings('removeSignature', value) })] }), _jsxs("div", { style: { display: 'grid', gridTemplateColumns: 'repeat(auto-fit, minmax(240px, 1fr))', gap: '12px' }, children: [_jsx(TMInvoiceRetrieveFormats, { width: '100%', label: SDKUI_Localizator.ElectronicInvoice + ' - ' + SDKUI_Localizator.DisplayFormat, onValueChanged: (newValue) => updateSettings('invoiceFormat', newValue), value: settings.invoiceFormat, valueOrig: settings.invoiceFormat }), _jsx(TMOrderRetrieveFormats, { width: '100%', label: SDKUI_Localizator.ElectronicOrder + ' - ' + SDKUI_Localizator.DisplayFormat, value: settings.orderFormat, valueOrig: settings.orderFormat, onValueChanged: (newValue) => updateSettings('orderFormat', newValue) })] })] })] }));
344
- return (_jsx(TMModal, { width: calcResponsiveSizes(deviceType, showTMRelationViewer ? '95%' : '780px', showTMRelationViewer ? '95%' : '780px', '95%'), height: calcResponsiveSizes(deviceType, showTMRelationViewer ? '95%' : '450px', showTMRelationViewer ? '95%' : '450px', '95%'), title: getTitle(), onClose: onClose, showCloseButton: true, 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("div", { onContextMenu: (e) => e.preventDefault(), style: { display: 'flex', flexDirection: 'column', padding: '4px 4px 16px 4px', width: '100%', height: '100%', boxSizing: 'border-box', overflow: 'hidden' }, children: [showTMRelationViewer ? (_jsx("div", { style: { flex: 1, minHeight: 0, display: 'flex', flexDirection: 'column' }, children: _jsxs(TMSplitterLayout, { direction: 'vertical', showSeparator: true, separatorSize: 8, separatorColor: 'transparent', separatorActiveColor: 'transparent', overflow: 'hidden', min: SPLITTER_MIN, start: SPLITTER_START_60_40, children: [_jsx(TMDownloadRelationViewerSection, { selectedDcmtInfos: selectedDcmtInfos, onSelectionChanged: setSelectedItemsRelationViewer, allTasks: allTasks, getAllTasks: getAllTasks, deleteTaskByIdsCallback: deleteTaskByIdsCallback, addTaskCallback: addTaskCallback, editTaskCallback: editTaskCallback, handleNavigateToWGs: handleNavigateToWGs, handleNavigateToDossiers: handleNavigateToDossiers }), configSection] }, "TMCopyToFolder-relation-config") })) : (configSection), _jsx("div", { style: { display: 'flex', justifyContent: 'center', alignItems: 'center', flexShrink: 0, marginTop: '12px' }, children: _jsx(TMButton, { caption: SDKUI_Localizator.Execute, icon: _jsx(IconPlay, {}), color: 'success', showTooltip: false, disabled: !isFormValid() || (showTMRelationViewer && selectedItemsRelationViewer.filter(i => i.isDcmt).length === 0), onClick: run }) })] }) }) }));
340
+ ], value: settings.exportMode, direction: "row", onValueChanged: (value) => updateSettings('exportMode', value) }) }), settings.exportMode === 'copy' && (_jsxs("div", { style: { display: 'flex', flexWrap: 'wrap', columnGap: '10px' }, children: [folderSelector, _jsx("div", { style: { flex: '1.5 1 420px', minWidth: '350px', width: '100%' }, children: _jsxs("div", { style: { position: 'relative', marginTop: '16px' }, children: [_jsx("span", { style: {
341
+ position: 'absolute',
342
+ top: '-10px',
343
+ left: '12px',
344
+ fontSize: '0.9rem',
345
+ color: TMColors.label_normal,
346
+ padding: '0 3px',
347
+ userSelect: 'none',
348
+ WebkitTouchCallout: 'none',
349
+ WebkitUserSelect: 'none',
350
+ width: 'max-content',
351
+ backgroundColor: TMColors.default_background,
352
+ zIndex: 1,
353
+ }, children: SDKUI_Localizator.IfFileExists }), _jsx("div", { style: { border: `1px solid ${TMColors.border_normal}`, borderRadius: '5px', padding: '4px 10px 4px 13px' }, children: _jsx(TMRadioButton, { dataSource: [
354
+ { value: 'overwrite', display: SDKUI_Localizator.CopyAndReplace },
355
+ { value: 'skip', display: SDKUI_Localizator.DoNotCopy },
356
+ { value: 'rename', display: SDKUI_Localizator.CopyButRename },
357
+ ], value: isUsingDefaultDownloads ? 'rename' : settings.fileExistsMode, direction: "row", disabled: isUsingDefaultDownloads, onValueChanged: (value) => updateSettings('fileExistsMode', value), fontSize: '0.9rem' }) }), isUsingDefaultDownloads && (_jsx("span", { style: { fontSize: '0.8rem', color: '#888', fontStyle: 'italic', marginTop: '4px', display: 'block' }, children: SDKUI_Localizator.BrowserAutoRenamesDuplicateFilesInDownloadsFolder }))] }) }), fileNamingRow, formatSelectorsRow] })), settings.exportMode === 'zip' && (_jsxs("div", { style: { display: 'flex', flexWrap: 'wrap', columnGap: '10px' }, children: [_jsxs("div", { style: { display: 'flex', flexWrap: 'wrap', columnGap: '10px', width: '100%' }, children: [folderSelector, _jsx("div", { style: { flex: '1 1 280px', minWidth: '280px' }, children: _jsx(TMTextBox, { label: SDKUI_Localizator.ZipFileName, value: settings.zipFileName, validationItems: zipValidationItems, autoComplete: "one-time-code", onValueChanged: (e) => updateSettings('zipFileName', e.target.value) }) }), _jsx("div", { style: { flex: '1 1 280px', minWidth: '280px' }, children: _jsx(TMTextBox, { label: SDKUI_Localizator.ProtectWithPasswordOptional, value: settings.zipPassword, type: "password", autoComplete: "one-time-code", onValueChanged: (e) => updateSettings('zipPassword', e.target.value) }) })] }), fileNamingRow, formatSelectorsRow] }))] })] }));
358
+ return (_jsx(TMModal, { width: calcResponsiveSizes(deviceType, showTMRelationViewer ? '95%' : '950px', '95%', '95%'), height: showTMRelationViewer ? '95%' : 'auto', title: getTitle(), onClose: onClose, showCloseButton: true, 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("div", { onContextMenu: (e) => e.preventDefault(), style: { display: 'flex', flexDirection: 'column', padding: '4px 4px 16px 4px', width: '100%', height: '100%', boxSizing: 'border-box', overflow: 'hidden' }, children: [showTMRelationViewer ? (_jsx("div", { style: { flex: 1, minHeight: 0, display: 'flex', flexDirection: 'column' }, children: _jsxs(TMSplitterLayout, { direction: 'vertical', showSeparator: true, separatorSize: 8, separatorColor: 'transparent', separatorActiveColor: 'transparent', overflow: 'hidden', min: ["50", "50"], start: ['65%', '35%'], children: [_jsx(TMDownloadRelationViewerSection, { selectedDcmtInfos: selectedDcmtInfos, onSelectionChanged: setSelectedItemsRelationViewer, allTasks: allTasks, getAllTasks: getAllTasks, deleteTaskByIdsCallback: deleteTaskByIdsCallback, addTaskCallback: addTaskCallback, editTaskCallback: editTaskCallback, handleNavigateToWGs: handleNavigateToWGs, handleNavigateToDossiers: handleNavigateToDossiers }), configSection] }, "TMCopyToFolder-relation-config") })) : (configSection), _jsx("div", { style: { display: 'flex', justifyContent: 'center', alignItems: 'center', flexShrink: 0, marginTop: '12px' }, children: _jsxs("button", { disabled: !isFormValid() || (showTMRelationViewer && selectedItemsRelationViewer.filter(i => i.isDcmt).length === 0), onClick: run, style: {
359
+ display: 'flex',
360
+ alignItems: 'center',
361
+ justifyContent: 'center',
362
+ gap: '6px',
363
+ padding: '8px 20px',
364
+ fontSize: '0.95rem',
365
+ fontWeight: 600,
366
+ color: '#fff',
367
+ background: (!isFormValid() || (showTMRelationViewer && selectedItemsRelationViewer.filter(i => i.isDcmt).length === 0))
368
+ ? '#b0b0b0'
369
+ : 'linear-gradient(135deg, #28a745 0%, #218838 100%)',
370
+ border: 'none',
371
+ borderRadius: '6px',
372
+ cursor: (!isFormValid() || (showTMRelationViewer && selectedItemsRelationViewer.filter(i => i.isDcmt).length === 0)) ? 'not-allowed' : 'pointer',
373
+ boxShadow: (!isFormValid() || (showTMRelationViewer && selectedItemsRelationViewer.filter(i => i.isDcmt).length === 0))
374
+ ? 'none'
375
+ : '0 2px 8px rgba(40, 167, 69, 0.35)',
376
+ transition: 'all 0.2s ease',
377
+ }, children: [_jsx(IconPlay, {}), _jsx("span", { children: SDKUI_Localizator.Execute })] }) })] }) }) }));
345
378
  };
346
379
  export default TMCopyToFolderForm;
@@ -7,7 +7,7 @@ import { TMColors } from '../../../utils/theme';
7
7
  import { TMSplitterLayout } from '../../base/TMLayout';
8
8
  import TMRelationViewer from './TMRelationViewer';
9
9
  import TMDcmtForm from './TMDcmtForm';
10
- import { dedupeByTidDid, getDcmtKey, getFloatingLabelStyle, SPLITTER_MIN, SPLITTER_START_75_25, } from './copyAndMergeDcmtsShared';
10
+ import { dedupeByTidDid, getDcmtKey, getFloatingLabelStyle, } from './copyAndMergeDcmtsShared';
11
11
  /**
12
12
  * Sezione condivisa tra TMCopyToFolderForm e TMMergeToPdfForm
13
13
  * che mostra l'elenco dei documenti correlati e il tree di selezione
@@ -54,7 +54,7 @@ const TMDownloadRelationViewerSection = ({ selectedDcmtInfos, onSelectionChanged
54
54
  display: 'flex',
55
55
  flexDirection: 'column',
56
56
  boxSizing: 'border-box'
57
- }, children: [_jsx("div", { style: { flex: 1, minHeight: 0, overflow: 'visible', paddingTop: '10px' }, children: _jsxs(TMSplitterLayout, { direction: 'horizontal', showSeparator: true, separatorSize: 8, separatorColor: 'transparent', separatorActiveColor: 'transparent', overflow: 'visible', min: SPLITTER_MIN, start: SPLITTER_START_75_25, children: [_jsxs("div", { style: {
57
+ }, children: [_jsx("div", { style: { flex: 1, minHeight: 0, overflow: 'visible', paddingTop: '10px' }, children: _jsxs(TMSplitterLayout, { direction: 'horizontal', showSeparator: true, separatorSize: 8, separatorColor: 'transparent', separatorActiveColor: 'transparent', overflow: 'visible', min: ["50", "50"], start: ["75%", "25%"], children: [_jsxs("div", { style: {
58
58
  position: 'relative',
59
59
  height: '100%',
60
60
  minHeight: 0,
@@ -6,15 +6,15 @@ import { DcmtOpers, FileFormats, GeneralRetrieveFormats, ResultTypes, RetrieveFi
6
6
  import TMModal from '../../base/TMModal';
7
7
  import { useDeviceType } from '../../base/TMDeviceProvider';
8
8
  import TMTextBox from '../../editors/TMTextBox';
9
- import TMButton from '../../base/TMButton';
10
9
  import { ButtonNames, TMMessageBoxManager } from '../../base/TMPopUp';
11
10
  import { useDcmtOperations } from '../../../hooks/useDcmtOperations';
12
11
  import { TMLayoutWaitingContainer } from '../../base/TMWaitPanel';
13
12
  import { TMSplitterLayout } from '../../base/TMLayout';
14
13
  import { TMColors } from '../../../utils/theme';
15
14
  import TMDownloadRelationViewerSection from './TMDownloadRelationViewerSection';
16
- import { getDcmtInfosToDownload, getFloatingLabelStyle, isDirectoryPickerSupported, isPdfExt, MIN_PDF_FOR_MERGE, SPLITTER_MIN, SPLITTER_START_70_30, } from './copyAndMergeDcmtsShared';
15
+ import { getDcmtInfosToDownload, getFloatingLabelStyle, isDirectoryPickerSupported, isPdfExt, MIN_PDF_FOR_MERGE, } from './copyAndMergeDcmtsShared';
17
16
  import ShowAlert from '../../base/TMAlert';
17
+ import TMTooltip from '../../base/TMTooltip';
18
18
  /**
19
19
  * Form per l'unione di più documenti PDF in un singolo file.
20
20
  * Condivide TMDownloadRelationViewerSection e gli helper in copyAndMergeDcmtsShared
@@ -201,74 +201,107 @@ const TMMergeToPdfForm = ({ mode, selectedDcmtInfos, onClose, showTMRelationView
201
201
  border: `1px solid ${TMColors.border_normal}`,
202
202
  borderRadius: '8px',
203
203
  padding: '8px',
204
- height: showTMRelationViewer ? '100%' : undefined,
204
+ height: showTMRelationViewer ? 'calc(100% - 7px)' : undefined,
205
+ marginTop: '7px',
205
206
  flex: showTMRelationViewer ? undefined : 1,
206
207
  minHeight: 0,
207
- marginTop: showTMRelationViewer ? '10px' : undefined,
208
208
  display: 'flex',
209
209
  flexDirection: 'column',
210
210
  boxSizing: 'border-box'
211
211
  }, children: [_jsx("span", { style: getFloatingLabelStyle(), title: `${SDKUI_Localizator.ConfigurationParameters} (${SDKUI_Localizator.MergeToPdf})`, children: SDKUI_Localizator.ConfigurationParameters }), _jsxs("div", { style: {
212
212
  display: 'flex',
213
213
  flexDirection: 'column',
214
- gap: '12px',
215
214
  flex: 1,
216
215
  overflowY: 'auto',
217
216
  minHeight: 0,
218
- }, children: [_jsxs("div", { style: { display: 'grid', gridTemplateColumns: isDirectoryPickerSupported() ? '1fr 1fr' : '1fr', gap: '12px' }, children: [isDirectoryPickerSupported() && (_jsx(TMTextBox, { label: SDKUI_Localizator.Path, value: destinationFolder, onValueChanged: handleFolderValueChange, readOnly: true, placeHolder: "Download", onClick: handleSelectFolder, buttons: [
219
- {
220
- icon: _jsx(IconFolderOpen, {}),
221
- text: SDKUI_Localizator.SelectFolder,
222
- onClick: handleSelectFolder
223
- },
224
- ...(!isUsingDefaultDownloads ? [{
225
- icon: _jsx(IconUndo, {}),
226
- text: SDKUI_Localizator.RestoreDownload,
227
- onClick: () => {
228
- skipSelectFolderRef.current = true;
229
- setDestinationFolder('Download');
230
- folderHandleRef.current = null;
231
- }
232
- }] : [])
233
- ] })), _jsx(TMTextBox, { label: SDKUI_Localizator.PdfFileName, value: pdfFileName, validationItems: pdfValidationItems, autoComplete: "one-time-code", onValueChanged: (e) => setPdfFileName(e.target.value) })] }), hasConvertibleSelected && (_jsxs("div", { style: {
217
+ }, children: [_jsxs("div", { style: { display: 'flex', flexWrap: 'wrap', columnGap: '10px' }, children: [isDirectoryPickerSupported() ? (_jsx("div", { style: { flex: '1 1 280px', minWidth: '280px' }, children: _jsx(TMTextBox, { label: SDKUI_Localizator.FolderName, value: destinationFolder, onValueChanged: handleFolderValueChange, readOnly: true, placeHolder: "Download", onClick: handleSelectFolder, buttons: [
218
+ {
219
+ icon: _jsx(IconFolderOpen, {}),
220
+ text: SDKUI_Localizator.SelectFolder,
221
+ onClick: handleSelectFolder
222
+ },
223
+ ...(!isUsingDefaultDownloads ? [{
224
+ icon: _jsx(IconUndo, {}),
225
+ text: SDKUI_Localizator.RestoreDownload,
226
+ onClick: () => {
227
+ skipSelectFolderRef.current = true;
228
+ setDestinationFolder('Download');
229
+ folderHandleRef.current = null;
230
+ }
231
+ }] : [])
232
+ ] }) })) : (_jsx("div", { style: { flex: '1 1 280px', minWidth: '280px' }, children: _jsxs("div", { style: { position: 'relative', marginTop: '16px' }, children: [_jsx("span", { style: {
233
+ position: 'absolute',
234
+ top: '-10px',
235
+ left: '12px',
236
+ fontSize: '0.9rem',
237
+ color: TMColors.label_normal,
238
+ padding: '0 3px',
239
+ userSelect: 'none',
240
+ WebkitTouchCallout: 'none',
241
+ WebkitUserSelect: 'none',
242
+ width: 'max-content',
243
+ backgroundColor: TMColors.default_background,
244
+ zIndex: 1,
245
+ }, children: SDKUI_Localizator.Path }), _jsxs("div", { style: { border: `1px solid ${TMColors.border_normal}`, borderRadius: '5px', padding: '4px 10px 4px 13px', display: 'flex', alignItems: 'center', gap: '8px', backgroundColor: '#fafafa' }, children: [_jsx(IconFolderOpen, {}), _jsx("span", { style: { fontSize: '0.9rem', color: '#333' }, children: "Download" })] }), _jsx("span", { style: { fontSize: '0.8rem', color: '#888', fontStyle: 'italic', marginTop: '4px', display: 'block' }, children: SDKUI_Localizator.BrowserDoesNotSupportFolderSelection })] }) })), _jsx("div", { style: { flex: '1.5 1 420px', minWidth: '350px', width: '100%' }, children: _jsx(TMTextBox, { label: SDKUI_Localizator.PdfFileName, value: pdfFileName, validationItems: pdfValidationItems, autoComplete: "one-time-code", onValueChanged: (e) => setPdfFileName(e.target.value) }) })] }), (hasConvertibleSelected || !hasEnoughPdfForMerge || hasNonPdfSelected) && (_jsxs("div", { style: {
234
246
  display: 'flex',
235
247
  flexDirection: 'column',
236
248
  gap: '6px',
237
249
  padding: '8px 12px',
238
- border: '1px solid #6db3f0',
250
+ border: '1px solid #c0c0c0',
239
251
  borderRadius: '5px',
240
- backgroundColor: '#e2f0fd',
241
- color: '#00527a',
242
- fontSize: '0.85rem'
243
- }, children: [_jsx("strong", { children: SDKUI_Localizator.Note }), _jsx("ul", { style: { margin: 0, paddingLeft: '18px', display: 'flex', flexDirection: 'column', gap: '4px' }, children: _jsx("li", { children: (() => {
244
- const extSet = Array.from(new Set(convertibleSelectedItems.map(i => (i.ext ?? '').toString().trim().toLowerCase().replace(/^\./, '')).filter(e => e.length > 0)));
245
- const extLabel = extSet.length > 0
246
- ? ` (${extSet.map(e => '.' + e).join(', ')})`
247
- : '';
248
- return convertibleSelectedItems.length === 1
249
- ? SDKUI_Localizator.DocumentWillBeConvertedDuringMerge.replaceParams(extLabel)
250
- : SDKUI_Localizator.DocumentsWillBeConvertedDuringMerge.replaceParams(convertibleSelectedItems.length.toString(), extLabel);
251
- })() }) })] })), (!hasEnoughPdfForMerge || hasNonPdfSelected || !isDirectoryPickerSupported()) && (_jsxs("div", { style: {
252
- display: 'flex',
253
- flexDirection: 'column',
254
- gap: '6px',
255
- padding: '8px 12px',
256
- border: '1px solid #f0c36d',
257
- borderRadius: '5px',
258
- backgroundColor: '#fdf5e2',
259
- color: '#7a5d00',
260
- fontSize: '0.85rem'
261
- }, children: [_jsx("strong", { children: SDKUI_Localizator.Warning }), _jsxs("ul", { style: { margin: 0, paddingLeft: '18px', display: 'flex', flexDirection: 'column', gap: '4px' }, children: [!isDirectoryPickerSupported() && (_jsx("li", { children: SDKUI_Localizator.BrowserDoesNotSupportFolderSelection })), !hasEnoughPdfForMerge && (_jsx("li", { children: mergeableSelectedCount === 0
252
+ backgroundColor: '#f8f8f8',
253
+ fontSize: '0.85rem',
254
+ marginTop: '12px',
255
+ }, children: [_jsx("div", { style: {
256
+ display: 'flex',
257
+ alignItems: 'center',
258
+ gap: '6px',
259
+ fontWeight: 600,
260
+ color: '#555',
261
+ fontSize: '0.9rem',
262
+ borderBottom: '1px solid #e0e0e0',
263
+ paddingBottom: '6px',
264
+ marginBottom: '2px'
265
+ }, children: SDKUI_Localizator.NotesAndWarnings }), _jsxs("ul", { style: { margin: 0, paddingLeft: '18px', display: 'flex', flexDirection: 'column', gap: '4px' }, children: [hasConvertibleSelected && (_jsx("li", { style: { color: '#00527a' }, children: (() => {
266
+ const extSet = Array.from(new Set(convertibleSelectedItems.map(i => (i.ext ?? '').toString().trim().toLowerCase().replace(/^\./, '')).filter(e => e.length > 0)));
267
+ const extLabel = extSet.length > 0
268
+ ? ` (${extSet.map(e => '.' + e).join(', ')})`
269
+ : '';
270
+ return convertibleSelectedItems.length === 1
271
+ ? SDKUI_Localizator.DocumentWillBeConvertedDuringMerge.replaceParams(extLabel)
272
+ : SDKUI_Localizator.DocumentsWillBeConvertedDuringMerge.replaceParams(convertibleSelectedItems.length.toString(), extLabel);
273
+ })() })), !hasEnoughPdfForMerge && (_jsx("li", { style: { color: '#7a5d00' }, children: mergeableSelectedCount === 0
262
274
  ? SDKUI_Localizator.NoPdfOrConvertibleFilesSelected_Param.replaceParams(MIN_PDF_FOR_MERGE.toString())
263
- : SDKUI_Localizator.OnlyOnePdfOrConvertibleFileSelected.replaceParams(MIN_PDF_FOR_MERGE.toString()) })), hasNonPdfSelected && (_jsx("li", { children: (() => {
275
+ : SDKUI_Localizator.OnlyOnePdfOrConvertibleFileSelected.replaceParams(MIN_PDF_FOR_MERGE.toString()) })), hasNonPdfSelected && (_jsx("li", { style: { color: '#7a5d00' }, children: (() => {
264
276
  const extSet = Array.from(new Set(nonPdfSelectedItems.map(i => (i.ext ?? '').toString().trim().toLowerCase().replace(/^\./, '')).filter(e => e.length > 0)));
265
277
  const extLabel = extSet.length > 0 ? ` (${extSet.map(e => '.' + e).join(', ')})` : '';
266
278
  return nonPdfSelectedItems.length === 1
267
279
  ? SDKUI_Localizator.FileNotPdfWillBeExcluded.replaceParams(extLabel)
268
280
  : SDKUI_Localizator.FilesNotPdfWillBeExcluded.replaceParams(nonPdfSelectedItems.length.toString(), extLabel);
269
281
  })() }))] })] }))] })] }));
270
- return (_jsx(TMModal, { width: calcResponsiveSizes(deviceType, showTMRelationViewer ? '90%' : '500px', showTMRelationViewer ? '90%' : '500px', '95%'), height: calcResponsiveSizes(deviceType, showTMRelationViewer ? '90%' : '500px', showTMRelationViewer ? '90%' : '500px', showTMRelationViewer ? '95%' : '500px'), title: getTitle(), onClose: onClose, showCloseButton: true, 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("div", { onContextMenu: (e) => e.preventDefault(), style: { display: 'flex', flexDirection: 'column', gap: '16px', padding: '16px', width: '100%', height: '100%', boxSizing: 'border-box', overflow: 'hidden' }, children: [showTMRelationViewer ? (_jsx("div", { style: { flex: 1, minHeight: 0, display: 'flex', flexDirection: 'column' }, children: _jsxs(TMSplitterLayout, { direction: 'vertical', showSeparator: true, separatorSize: 8, separatorColor: 'transparent', separatorActiveColor: 'transparent', overflow: 'hidden', min: SPLITTER_MIN, start: SPLITTER_START_70_30, children: [_jsx(TMDownloadRelationViewerSection, { selectedDcmtInfos: selectedDcmtInfos, onSelectionChanged: setSelectedItemsRelationViewer, allTasks: allTasks, getAllTasks: getAllTasks, deleteTaskByIdsCallback: deleteTaskByIdsCallback, addTaskCallback: addTaskCallback, editTaskCallback: editTaskCallback, handleNavigateToWGs: handleNavigateToWGs, handleNavigateToDossiers: handleNavigateToDossiers }), configSection] }, "TMMergeToPdf-relation-config") })) : (configSection), _jsx("div", { style: { display: 'flex', justifyContent: 'center', alignItems: 'center', gap: '12px', flexShrink: 0 }, children: _jsx(TMButton, { caption: mergeableSelectedCount === 0 ? SDKUI_Localizator.MergeToPdf : SDKUI_Localizator.MergeFilesToPdf.replaceParams(mergeableSelectedCount.toString()), icon: _jsx(IconPlay, {}), color: 'success', showTooltip: false, disabled: !isFormValid()
271
- || (showTMRelationViewer && selectedItemsRelationViewer.filter(i => i.isDcmt).length === 0)
272
- || !hasEnoughPdfForMerge, onClick: run }) })] }) }) }));
282
+ return (_jsx(TMModal, { width: calcResponsiveSizes(deviceType, showTMRelationViewer ? '90%' : '500px', showTMRelationViewer ? '90%' : '500px', '95%'), height: showTMRelationViewer ? '95%' : 'auto', title: getTitle(), onClose: onClose, showCloseButton: true, 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("div", { onContextMenu: (e) => e.preventDefault(), style: { display: 'flex', flexDirection: 'column', gap: '16px', padding: '16px', width: '100%', height: '100%', boxSizing: 'border-box', overflow: 'hidden' }, children: [showTMRelationViewer ? (_jsx("div", { style: { flex: 1, minHeight: 0, display: 'flex', flexDirection: 'column' }, children: _jsxs(TMSplitterLayout, { direction: 'vertical', showSeparator: true, separatorSize: 8, separatorColor: 'transparent', separatorActiveColor: 'transparent', overflow: 'hidden', min: ["50", "50"], start: ["70%", "30%"], children: [_jsx(TMDownloadRelationViewerSection, { selectedDcmtInfos: selectedDcmtInfos, onSelectionChanged: setSelectedItemsRelationViewer, allTasks: allTasks, getAllTasks: getAllTasks, deleteTaskByIdsCallback: deleteTaskByIdsCallback, addTaskCallback: addTaskCallback, editTaskCallback: editTaskCallback, handleNavigateToWGs: handleNavigateToWGs, handleNavigateToDossiers: handleNavigateToDossiers }), configSection] }, "TMMergeToPdf-relation-config") })) : (configSection), _jsx("div", { style: { display: 'flex', justifyContent: 'center', alignItems: 'center', flexShrink: 0, marginTop: '12px' }, children: _jsxs("button", { disabled: !isFormValid() || (showTMRelationViewer && selectedItemsRelationViewer.filter(i => i.isDcmt).length === 0) || !hasEnoughPdfForMerge, onClick: run, style: {
283
+ display: 'flex',
284
+ alignItems: 'center',
285
+ justifyContent: 'center',
286
+ gap: '6px',
287
+ padding: '8px 20px',
288
+ fontSize: '0.95rem',
289
+ fontWeight: 600,
290
+ color: '#fff',
291
+ background: (!isFormValid() || (showTMRelationViewer && selectedItemsRelationViewer.filter(i => i.isDcmt).length === 0) || !hasEnoughPdfForMerge)
292
+ ? '#b0b0b0'
293
+ : 'linear-gradient(135deg, #28a745 0%, #218838 100%)',
294
+ border: 'none',
295
+ borderRadius: '6px',
296
+ cursor: (!isFormValid() || (showTMRelationViewer && selectedItemsRelationViewer.filter(i => i.isDcmt).length === 0) || !hasEnoughPdfForMerge) ? 'not-allowed' : 'pointer',
297
+ boxShadow: (!isFormValid() || (showTMRelationViewer && selectedItemsRelationViewer.filter(i => i.isDcmt).length === 0) || !hasEnoughPdfForMerge)
298
+ ? 'none'
299
+ : '0 2px 8px rgba(40, 167, 69, 0.35)',
300
+ transition: 'all 0.2s ease',
301
+ }, children: [_jsx(IconPlay, {}), _jsx("span", { children: mergeableSelectedCount === 0
302
+ ? SDKUI_Localizator.MergeToPdf
303
+ : mergeableSelectedCount > 999
304
+ ? _jsx(TMTooltip, { content: mergeableSelectedCount.toString(), children: SDKUI_Localizator.MergeFilesToPdf.replaceParams('999+') })
305
+ : SDKUI_Localizator.MergeFilesToPdf.replaceParams(mergeableSelectedCount.toString()) })] }) })] }) }) }));
273
306
  };
274
307
  export default TMMergeToPdfForm;
@@ -1,7 +1,7 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
2
  import React, { useCallback, useEffect, useMemo, useState } from 'react';
3
3
  import { DcmtTypeListCacheService, SDK_Globals, DataColumnTypes, MetadataFormats, SystemMIDs, MetadataDataDomains, RelationCacheService, RelationTypes, UserListCacheService } from "@topconsultnpm/sdk-ts";
4
- import { genUniqueId, IconFolder, IconBackhandIndexPointingRight, IconCircleInfo, getDcmtCicoStatus, IconChevronDown, IconChevronRight } from '../../../helper';
4
+ import { genUniqueId, IconFolder, IconBackhandIndexPointingRight, IconCircleInfo, getDcmtCicoStatus, IconChevronDown, IconChevronRight, SDKUI_Localizator } from '../../../helper';
5
5
  import { TMColors } from '../../../utils/theme';
6
6
  import { StyledDivHorizontal, StyledBadge, StyledToolbarForm } from '../../base/Styled';
7
7
  import TMTreeView from '../../base/TMTreeView';
@@ -1225,7 +1225,7 @@ const TMRelationViewer = ({ inputDcmts, isForMaster = false, showCurrentDcmtIndi
1225
1225
  return null;
1226
1226
  return _jsx("div", { style: { padding: '20px', textAlign: 'center', color: '#666' }, children: "Nessuna relazione disponibile." });
1227
1227
  }
1228
- return (_jsxs("div", { style: { display: 'flex', flexDirection: 'column', height: '100%', minHeight: 0, width: '100%' }, children: [showExpandAllButton && (_jsx(StyledToolbarForm, { style: { flexShrink: 0 }, children: _jsxs("button", { type: "button", onClick: handleToggleExpandAll, title: allExpanded ? 'Comprimi tutto' : 'Espandi tutto', style: {
1228
+ return (_jsxs("div", { style: { display: 'flex', flexDirection: 'column', height: '100%', minHeight: 0, width: '100%' }, children: [showExpandAllButton && (_jsx(StyledToolbarForm, { style: { flexShrink: 0 }, children: _jsxs("button", { type: "button", onClick: handleToggleExpandAll, title: allExpanded ? SDKUI_Localizator.CollapseAll : SDKUI_Localizator.ExpandAll, style: {
1229
1229
  display: 'inline-flex',
1230
1230
  alignItems: 'center',
1231
1231
  gap: '4px',
@@ -1238,7 +1238,7 @@ const TMRelationViewer = ({ inputDcmts, isForMaster = false, showCurrentDcmtIndi
1238
1238
  cursor: 'pointer',
1239
1239
  lineHeight: 1,
1240
1240
  whiteSpace: 'nowrap'
1241
- }, children: [allExpanded ? _jsx(IconChevronRight, { fontSize: 14 }) : _jsx(IconChevronDown, { fontSize: 14 }), _jsx("span", { children: allExpanded ? 'Comprimi tutto' : 'Espandi tutto' })] }) })), _jsx("div", { style: { flex: 1, minHeight: 0, overflow: 'auto' }, children: _jsx(TMTreeView, { dataSource: mergedTreeData, itemRender: finalItemRender, calculateItemsForNode: calculateItemsForNode, onDataChanged: handleDataChanged, focusedItem: focusedItem, onFocusedItemChanged: handleFocusedItemChanged, allowMultipleSelection: allowMultipleSelection, selectedItems: selectedItems, itemsPerPage: 100, onSelectionChanged: handleSelectedItemsChanged, onItemContextMenu: onItemContextMenu }) }), showExpansionWaitPanel && (_jsx(TMWaitPanel, { title: isForMaster ? 'Caricamento documenti master' : 'Caricamento documenti dettaglio', showPrimary: true, textPrimary: expansionWaitPanelText, valuePrimary: expansionWaitPanelValue, maxValuePrimary: expansionWaitPanelMaxValue, isCancelable: true, abortController: expansionAbortController, onAbortClick: (abortController) => {
1241
+ }, children: [allExpanded ? _jsx(IconChevronRight, { fontSize: 14 }) : _jsx(IconChevronDown, { fontSize: 14 }), _jsx("span", { children: allExpanded ? SDKUI_Localizator.CollapseAll : SDKUI_Localizator.ExpandAll })] }) })), _jsx("div", { style: { flex: 1, minHeight: 0, overflow: 'auto' }, children: _jsx(TMTreeView, { dataSource: mergedTreeData, itemRender: finalItemRender, calculateItemsForNode: calculateItemsForNode, onDataChanged: handleDataChanged, focusedItem: focusedItem, onFocusedItemChanged: handleFocusedItemChanged, allowMultipleSelection: allowMultipleSelection, selectedItems: selectedItems, itemsPerPage: 100, onSelectionChanged: handleSelectedItemsChanged, onItemContextMenu: onItemContextMenu }) }), showExpansionWaitPanel && (_jsx(TMWaitPanel, { title: isForMaster ? 'Caricamento documenti master' : 'Caricamento documenti dettaglio', showPrimary: true, textPrimary: expansionWaitPanelText, valuePrimary: expansionWaitPanelValue, maxValuePrimary: expansionWaitPanelMaxValue, isCancelable: true, abortController: expansionAbortController, onAbortClick: (abortController) => {
1242
1242
  setTimeout(() => {
1243
1243
  abortController?.abort();
1244
1244
  }, 100);
@@ -2,10 +2,6 @@ import React from 'react';
2
2
  import { DcmtInfo } from '../../../ts';
3
3
  import { DocumentDownloadSettings, FileNamingMode } from '../../../helper';
4
4
  import { IRelatedDcmt } from './TMMasterDetailDcmts';
5
- export declare const SPLITTER_MIN: string[];
6
- export declare const SPLITTER_START_60_40: string[];
7
- export declare const SPLITTER_START_70_30: string[];
8
- export declare const SPLITTER_START_75_25: string[];
9
5
  /** Numero minimo di file PDF necessari per poterli unire in un unico documento. */
10
6
  export declare const MIN_PDF_FOR_MERGE = 2;
11
7
  /** Stile per le etichette "floating" posizionate sopra i bordi dei container */
@@ -1,13 +1,6 @@
1
1
  import { DcmtTypeListCacheService, LayoutModes, SDK_Globals } from '@topconsultnpm/sdk-ts';
2
2
  import { searchResultToMetadataValues, DocumentDownloadSettings } from '../../../helper';
3
3
  import { TMColors } from '../../../utils/theme';
4
- // ============================================================
5
- // Costanti condivise tra TMCopyToFolderForm e TMMergeToPdfForm
6
- // ============================================================
7
- export const SPLITTER_MIN = ['50', '50'];
8
- export const SPLITTER_START_60_40 = ['60%', '40%'];
9
- export const SPLITTER_START_70_30 = ['70%', '30%'];
10
- export const SPLITTER_START_75_25 = ['75%', '25%'];
11
4
  /** Numero minimo di file PDF necessari per poterli unire in un unico documento. */
12
5
  export const MIN_PDF_FOR_MERGE = 2;
13
6
  // ============================================================
@@ -109,6 +109,7 @@ export declare class SDKUI_Localizator {
109
109
  static get Close(): "Ausgang" | "Close" | "Salida" | "Sortie" | "Saída" | "Chiudi";
110
110
  static get Closed(): "Geschlossen" | "Closed" | "Cerrada" | "Fermée" | "Fechada" | "Chiusa";
111
111
  static get CloseTask(): string;
112
+ static get CollapseAll(): "Alle reduzieren" | "Collapse all" | "Contraer todo" | "Tout réduire" | "Recolher tudo" | "Comprimi tutto";
112
113
  static get Columns_All_Hide(): "Alle Spalten ausblenden" | "Hide all columns" | "Ocultar todas las columnas" | "Masquer toutes les colonnes" | "Ocultar todas as colunas" | "Nascondi tutte le colonne";
113
114
  static get Columns_All_Show(): "Alle Spalten anzeigen" | "Show all columns" | "Mostrar todas las columnas" | "Afficher toutes les colonnes" | "Mostrar todas as colunas" | "Visualizza tutte le colonne";
114
115
  static get Comment(): string;
@@ -263,6 +264,7 @@ export declare class SDKUI_Localizator {
263
264
  static get ExtractedFromOtherUser(): string;
264
265
  static get ExtractedOn(): "Ausgezogen am" | "Extracted on" | "Extraído el" | "Extrait le" | "Extraído em" | "Estratto il";
265
266
  static get EvaluateResult(): "Bewerten Sie das Ergebnis" | "Evaluate result" | "Valorar el resultado" | "Évalue les résultats" | "Avalia os resultados" | "Valuta il risultato";
267
+ static get ExpandAll(): "Alle erweitern" | "Expand all" | "Expandir todo" | "Tout développer" | "Expandir tudo" | "Espandi tutto";
266
268
  static get Expected(): "Erwartet" | "Expected" | "Esperado" | "Attendu" | "Atteso";
267
269
  static get Expiration(): "Ablaufdatum" | "Expiration" | "Fecha de expiración" | "Date d'expiration" | "Data de expiração" | "Scadenza";
268
270
  static get ExpirationDate(): "Ablaufdatum" | "Expiration date" | "Fecha de vencimiento" | "Date d'échéance" | "Data de validade" | "Data di scadenza";
@@ -290,6 +292,7 @@ export declare class SDKUI_Localizator {
290
292
  static get FilesNotPdfWillBeExcluded(): string;
291
293
  static get FileUpload(): "Datei hochladen" | "File upload" | "Carga de archivo" | "Téléchargement de fichier" | "Carregamento de arquivo" | "Caricamento File";
292
294
  static get Folder(): string;
295
+ static get FolderName(): string;
293
296
  static get FolderExist(): "Ordner existiert bereits. Bitte versuchen Sie einen anderen Namen" | "Folder already exists. Please try another name" | "La carpeta ya existe. Intente con otro nombre." | "Le dossier existe déjà. Veuillez essayer un autre nom" | "A pasta já existe. Por favor tente outro nome" | "La cartella esiste già. Prova un altro nome";
294
297
  static get FolderIsEmpty(): string;
295
298
  static get ForgetPassword(): "Passwort vergessen" | "Forgot password" | "Has olvidado tu contraseña" | "Mot de passe oublié" | "Esqueceu sua senha" | "Password dimenticata";
@@ -510,6 +513,7 @@ export declare class SDKUI_Localizator {
510
513
  static get NoneSelection(): "Keine Auswahl" | "No selection" | "Ninguna selección" | "Pas de sélections" | "Nenhuma seleção" | "Nessuna selezione";
511
514
  static get NotAvailable(): string;
512
515
  static get Note(): string;
516
+ static get NotesAndWarnings(): string;
513
517
  static get MaximumNumberOfResults(): string;
514
518
  static get OfSystem(): "Des Systems" | "Of system" | "Del sistema" | "Du système" | "Do sistema" | "Di sistema";
515
519
  static get OldPassword(): "Altes Kennwort" | "Old password" | "Contraseña anterior" | "Ancien mot de passe" | "Senha Antiga" | "Password vecchia";
@@ -656,7 +660,6 @@ export declare class SDKUI_Localizator {
656
660
  static get SavingInProgress(): string;
657
661
  static get SaveQuestion(): "Ihre Änderungen speichern?" | "Save modifications?" | "¿Guardar modificaciones aportadas?" | "Enregistrez les modifications?" | "Salve as alterações?" | "Salvare le modifiche apportate?";
658
662
  static get FormErrorsProceedQuestion(): "Es gibt Fehler im Formular. Wenn Sie fortfahren, werden die Daten nicht gespeichert. Möchten Sie trotzdem fortfahren?" | "There are errors in the form. If you continue, the data will not be saved. Do you want to proceed anyway?" | "Hay errores en el formulario. Si continúas, los datos no se guardarán. ¿Quieres proceder de todos modos?" | "Il y a des erreurs dans le formulaire. Si vous continuez, les données ne seront pas enregistrées. Voulez-vous continuer quand même?" | "Há erros no formulário. Se continuar, os dados não serão salvos. Deseja prosseguir mesmo assim?" | "Ci sono errori nel form. Se continui, i dati non saranno salvati. Vuoi comunque procedere?";
659
- static get SavedDestination(): string;
660
663
  static get SavedQueryNew(): "Neue Suche speichern" | "Save new search" | "Guardar nueva búsqueda" | "Enregistrer la nouvelle recherche" | "Guardar nova pesquisa" | "Salva nuova ricerca";
661
664
  static get SavedQueryUpdate(): "Suche bearbeiten" | "Modify query" | "Modificar búsqueda" | "Modifie la recherche" | "Mudar pesquisa" | "Modifica ricerca";
662
665
  static get ScanFeatureUnavailableInThisContext(): "Scanfunktionen sind in diesem Kontext nicht verfugbar." | "Scanning features are not available in this context." | "Las funciones de escaneo no estan disponibles en este contexto." | "Les fonctionnalites de numerisation ne sont pas disponibles dans ce contexte." | "Os recursos de digitalizacao nao estao disponiveis neste contexto." | "Funzionalita di scansione non disponibili in questo contesto.";
@@ -692,7 +695,7 @@ export declare class SDKUI_Localizator {
692
695
  static get SetAsDefault2(): "Standard setzen" | "Set default" | "Configurar predeterminado" | "Place le défaut" | "Definir padrão" | "Imposta default";
693
696
  static get SetAsFavorite(): "Als Favorit festlegen" | "Set as favorite" | "Establecer como favorito" | "Définir comme favori" | "Definir como favorito" | "Imposta come preferito";
694
697
  static get SetNamedCredentialsAsPreferred(): "Möchten Sie die Anmeldedaten '{{0}}' als bevorzugt festlegen?" | "Do you want to set the '{{0}}' credentials as preferred?" | "¿Quieres configurar las credenciales '{{0}}' como preferidas?" | "Voulez-vous définir les identifiants '{{0}}' comme préférés ?" | "Deseja definir as credenciais '{{0}}' como preferidas?" | "Vuoi impostare le credenziali '{{0}}' come preferite?";
695
- static get SeparatorCharacter(): string;
698
+ static get Separator(): string;
696
699
  static get Settings(): "Einstellungen" | "Settings" | "Ajustes" | "Réglages" | "Definições" | "Impostazioni";
697
700
  static get SettingSavedSuccessfully(): string;
698
701
  static get Severity(): "Schweregrad" | "Severity" | "Gravedad" | "Gravité" | "Gravidade" | "Gravità";
@@ -777,28 +777,22 @@ export class SDKUI_Localizator {
777
777
  }
778
778
  static get BrowserDoesNotSupportFolderSelection() {
779
779
  switch (this._cultureID) {
780
- case CultureIDs.De_DE:
781
- return "Der verwendete Browser unterstützt die Ordnerauswahl nicht. Die Dateien werden in den Download-Ordner heruntergeladen";
782
- case CultureIDs.En_US:
783
- return "The browser in use does not support folder selection. Files will be downloaded to the Downloads folder";
784
- case CultureIDs.Es_ES:
785
- return "El navegador en uso no admite la selección de carpetas. Los archivos se descargarán en la carpeta Descargas";
786
- case CultureIDs.Fr_FR:
787
- return "Le navigateur utilisé ne prend pas en charge la sélection de dossier. Les fichiers seront téléchargés dans le dossier Téléchargements";
788
- case CultureIDs.Pt_PT:
789
- return "O navegador utilizado não suporta a seleção de pastas. Os ficheiros serão transferidos para a pasta Downloads";
790
- default:
791
- return "Il browser in uso non supporta la selezione della cartella. I file verranno scaricati nella cartella Download";
780
+ case CultureIDs.De_DE: return "Der verwendete Browser unterstützt die Ordnerauswahl nicht";
781
+ case CultureIDs.En_US: return "The browser in use does not support folder selection";
782
+ case CultureIDs.Es_ES: return "El navegador en uso no admite la selección de carpetas";
783
+ case CultureIDs.Fr_FR: return "Le navigateur utilisé ne prend pas en charge la sélection de dossier";
784
+ case CultureIDs.Pt_PT: return "O navegador utilizado não suporta a seleção de pastas";
785
+ default: return "Il browser in uso non supporta la selezione della cartella";
792
786
  }
793
787
  }
794
788
  static get BrowserAutoRenamesDuplicateFilesInDownloadsFolder() {
795
789
  switch (this._cultureID) {
796
- case CultureIDs.De_DE: return "Im Download-Ordner benennt der Browser doppelte Dateien automatisch um";
797
- case CultureIDs.En_US: return "In the Downloads folder, the browser automatically renames duplicate files";
798
- case CultureIDs.Es_ES: return "En la carpeta Descargas, el navegador renombra automáticamente los archivos duplicados";
799
- case CultureIDs.Fr_FR: return "Dans le dossier Téléchargements, le navigateur renomme automatiquement les fichiers en double";
800
- case CultureIDs.Pt_PT: return "Na pasta Downloads, o navegador renomeia automaticamente os ficheiros duplicados";
801
- default: return "Nella cartella Download il browser rinomina automaticamente i file duplicati";
790
+ case CultureIDs.De_DE: return "Browser benennt Duplikate automatisch um";
791
+ case CultureIDs.En_US: return "Browser auto-renames duplicate files";
792
+ case CultureIDs.Es_ES: return "El navegador renombra archivos duplicados";
793
+ case CultureIDs.Fr_FR: return "Le navigateur renomme les fichiers en double";
794
+ case CultureIDs.Pt_PT: return "O navegador renomeia ficheiros duplicados";
795
+ default: return "Il browser rinomina automaticamente i file duplicati";
802
796
  }
803
797
  }
804
798
  static get ByDate() {
@@ -1076,6 +1070,16 @@ export class SDKUI_Localizator {
1076
1070
  default: return "Chiudi attività";
1077
1071
  }
1078
1072
  }
1073
+ static get CollapseAll() {
1074
+ switch (this._cultureID) {
1075
+ case CultureIDs.De_DE: return "Alle reduzieren";
1076
+ case CultureIDs.En_US: return "Collapse all";
1077
+ case CultureIDs.Es_ES: return "Contraer todo";
1078
+ case CultureIDs.Fr_FR: return "Tout réduire";
1079
+ case CultureIDs.Pt_PT: return "Recolher tudo";
1080
+ default: return "Comprimi tutto";
1081
+ }
1082
+ }
1079
1083
  static get Columns_All_Hide() {
1080
1084
  switch (this._cultureID) {
1081
1085
  case CultureIDs.De_DE: return "Alle Spalten ausblenden";
@@ -2603,6 +2607,16 @@ export class SDKUI_Localizator {
2603
2607
  default: return "Valuta il risultato";
2604
2608
  }
2605
2609
  }
2610
+ static get ExpandAll() {
2611
+ switch (this._cultureID) {
2612
+ case CultureIDs.De_DE: return "Alle erweitern";
2613
+ case CultureIDs.En_US: return "Expand all";
2614
+ case CultureIDs.Es_ES: return "Expandir todo";
2615
+ case CultureIDs.Fr_FR: return "Tout développer";
2616
+ case CultureIDs.Pt_PT: return "Expandir tudo";
2617
+ default: return "Espandi tutto";
2618
+ }
2619
+ }
2606
2620
  static get Expected() {
2607
2621
  switch (this._cultureID) {
2608
2622
  case CultureIDs.De_DE: return "Erwartet";
@@ -2873,6 +2887,16 @@ export class SDKUI_Localizator {
2873
2887
  default: return "Cartella";
2874
2888
  }
2875
2889
  }
2890
+ static get FolderName() {
2891
+ switch (this._cultureID) {
2892
+ case CultureIDs.De_DE: return "Ordnername";
2893
+ case CultureIDs.En_US: return "Folder name";
2894
+ case CultureIDs.Es_ES: return "Nombre de carpeta";
2895
+ case CultureIDs.Fr_FR: return "Nom du dossier";
2896
+ case CultureIDs.Pt_PT: return "Nome da pasta";
2897
+ default: return "Nome cartella";
2898
+ }
2899
+ }
2876
2900
  static get FolderExist() {
2877
2901
  switch (this._cultureID) {
2878
2902
  case CultureIDs.De_DE: return "Ordner existiert bereits. Bitte versuchen Sie einen anderen Namen";
@@ -5066,6 +5090,16 @@ export class SDKUI_Localizator {
5066
5090
  default: return "Nota";
5067
5091
  }
5068
5092
  }
5093
+ static get NotesAndWarnings() {
5094
+ switch (this._cultureID) {
5095
+ case CultureIDs.De_DE: return "Hinweise und Warnungen";
5096
+ case CultureIDs.En_US: return "Notes and Warnings";
5097
+ case CultureIDs.Es_ES: return "Notas y advertencias";
5098
+ case CultureIDs.Fr_FR: return "Notes et avertissements";
5099
+ case CultureIDs.Pt_PT: return "Notas e avisos";
5100
+ default: return "Note e avvisi";
5101
+ }
5102
+ }
5069
5103
  static get MaximumNumberOfResults() {
5070
5104
  switch (this._cultureID) {
5071
5105
  case CultureIDs.De_DE: return "Maximale Anzahl von Ergebnissen";
@@ -6545,16 +6579,6 @@ export class SDKUI_Localizator {
6545
6579
  default: return "Ci sono errori nel form. Se continui, i dati non saranno salvati. Vuoi comunque procedere?";
6546
6580
  }
6547
6581
  }
6548
- static get SavedDestination() {
6549
- switch (this._cultureID) {
6550
- case CultureIDs.De_DE: return "Gespeichertes Ziel";
6551
- case CultureIDs.En_US: return "Saved destination";
6552
- case CultureIDs.Es_ES: return "Destino guardado";
6553
- case CultureIDs.Fr_FR: return "Destination enregistrée";
6554
- case CultureIDs.Pt_PT: return "Destino guardado";
6555
- default: return "Destinazione salvata";
6556
- }
6557
- }
6558
6582
  static get SavedQueryNew() {
6559
6583
  switch (this._cultureID) {
6560
6584
  case CultureIDs.De_DE: return "Neue Suche speichern";
@@ -6906,14 +6930,14 @@ export class SDKUI_Localizator {
6906
6930
  default: return "Vuoi impostare le credenziali '{{0}}' come preferite?";
6907
6931
  }
6908
6932
  }
6909
- static get SeparatorCharacter() {
6933
+ static get Separator() {
6910
6934
  switch (this._cultureID) {
6911
6935
  case CultureIDs.De_DE: return "Trennzeichen";
6912
- case CultureIDs.En_US: return "Separator character";
6913
- case CultureIDs.Es_ES: return "Carácter separador";
6914
- case CultureIDs.Fr_FR: return "Caractère séparateur";
6915
- case CultureIDs.Pt_PT: return "Carácter separador";
6916
- default: return "Carattere separatore";
6936
+ case CultureIDs.En_US: return "Separator";
6937
+ case CultureIDs.Es_ES: return "Separador";
6938
+ case CultureIDs.Fr_FR: return "Séparateur";
6939
+ case CultureIDs.Pt_PT: return "Separador";
6940
+ default: return "Separatore";
6917
6941
  }
6918
6942
  }
6919
6943
  static get Settings() {
@@ -1107,7 +1107,7 @@ export const useDocumentOperations = (props) => {
1107
1107
  ];
1108
1108
  };
1109
1109
  const getArchivedWorkgroupMenuItems = () => {
1110
- const items = [
1110
+ const sortedItems = [
1111
1111
  addReplaceFileOperation(),
1112
1112
  openFormOperation(),
1113
1113
  deletetionMenuItem(),
@@ -1118,11 +1118,13 @@ export const useDocumentOperations = (props) => {
1118
1118
  copyFromWgMenuItem(),
1119
1119
  movetofolderFromWgMenuItem(),
1120
1120
  commentFromWgMenuItem(false),
1121
- copyToFolderMenuItem(),
1122
- mergeToPdfMenuItem(),
1123
1121
  removeFromWgMenuItem(SDKUI_Localizator.RemoveFromWorkgroup),
1122
+ ].sort((a, b) => a.name.localeCompare(b.name));
1123
+ return [
1124
+ ...sortedItems,
1125
+ { ...copyToFolderMenuItem(), beginGroup: true },
1126
+ mergeToPdfMenuItem(),
1124
1127
  ];
1125
- return items.sort((a, b) => a.name.localeCompare(b.name));
1126
1128
  };
1127
1129
  const getDcmtFormMenuItems = () => {
1128
1130
  return [
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@topconsultnpm/sdkui-react",
3
- "version": "6.21.0-dev2.46",
3
+ "version": "6.21.0-dev2.47",
4
4
  "description": "",
5
5
  "scripts": {
6
6
  "test": "echo \"Error: no test specified\" && exit 1",