@topconsultnpm/sdkui-react 6.20.0-dev1.125 → 6.20.0-dev1.126
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.
|
@@ -8,7 +8,7 @@ import { DeviceType, useDeviceType } from '../../base/TMDeviceProvider';
|
|
|
8
8
|
import { useDcmtOperations } from '../../../hooks/useDcmtOperations';
|
|
9
9
|
import { useRelatedDocuments } from '../../../hooks/useRelatedDocuments';
|
|
10
10
|
import { getWorkItemSetIDAsync, handleArchiveVisibility, searchResultToMetadataValues } from '../../../helper/queryHelper';
|
|
11
|
-
import { genUniqueId, IconShow, SDKUI_Localizator, updateMruTids, IconBoard, IconDcmtTypeSys, IconDetailDcmts, IconDownload, calcIsModified, IconMenuVertical, Globalization, getListMaxItems, getSystemMetadata, IconBoxArchiveIn, IconClear, IconUndo, SDKUI_Globals, IconPreview, isTaskMoreInfo, IconWorkflow, IconSearch, deepCompare, IconCheck, IconActivity, TMImageLibrary, IconStar, IconRelation, IconInfo, IconArchiveDoc, IconDelete, IconPair, IconUnpair, IconArchiveMaster, IconArchiveDetail, getExceptionMessage, isApprovalWorkflowView, getDcmtCicoStatus, IconFileDots, IconCustom, buildWorkItemsFromWFCtrl } from '../../../helper';
|
|
11
|
+
import { genUniqueId, IconShow, SDKUI_Localizator, updateMruTids, IconBoard, IconDcmtTypeSys, IconDetailDcmts, IconDownload, calcIsModified, IconMenuVertical, Globalization, getListMaxItems, getSystemMetadata, IconBoxArchiveIn, IconClear, IconUndo, SDKUI_Globals, IconPreview, isTaskMoreInfo, IconWorkflow, IconSearch, deepCompare, IconCheck, IconActivity, TMImageLibrary, IconStar, IconRelation, IconInfo, IconArchiveDoc, IconDelete, IconPair, IconUnpair, IconArchiveMaster, IconArchiveDetail, getExceptionMessage, isApprovalWorkflowView, getDcmtCicoStatus, IconFileDots, IconCustom, buildWorkItemsFromWFCtrl, IconLock } from '../../../helper';
|
|
12
12
|
import { hasDetailRelations, hasMasterRelations, isXMLFileExt } from '../../../helper/dcmtsHelper';
|
|
13
13
|
import { Gutters, TMColors } from '../../../utils/theme';
|
|
14
14
|
import { StyledFormButtonsContainer, StyledLoadingContainer, StyledModalContainer, StyledReferenceButton, StyledSpinner, StyledToolbarCardContainer } from '../../base/Styled';
|
|
@@ -62,6 +62,7 @@ export var InvocationContext;
|
|
|
62
62
|
// Aggiungi qui altri contesti futuri secondo necessità
|
|
63
63
|
})(InvocationContext || (InvocationContext = {}));
|
|
64
64
|
let abortControllerLocal = new AbortController();
|
|
65
|
+
;
|
|
65
66
|
//#endregion
|
|
66
67
|
const TMDcmtForm = ({ allTasks = [], getAllTasks, deleteTaskByIdsCallback, addTaskCallback, editTaskCallback, handleNavigateToWGs, handleNavigateToDossiers, showHeader = true, onSaveRecents, layoutMode = LayoutModes.Update, showBackButton = true, onClose, onSavedAsyncCallback, TID, DID, formMode = FormModes.Update, canNext, canPrev, count, itemIndex, onNext, onPrev, allowNavigation = true, allowRelations = true, isClosable = false, isExpertMode = SDKUI_Globals.userSettings.advancedSettings.expertMode === 1, showDcmtFormSidebar = true, invocationContext = InvocationContext.Default, titleModal, isModal = false, widthModal = "100%", heightModal = "100%", groupId, onWFOperationCompleted, onTaskCompleted, onTaskCreateRequest, inputFile = null, taskFormDialogComponent, moreInfoTasks, connectorFileSave = undefined, inputMids = [], openS4TViewer = false, onOpenS4TViewerRequest, s4TViewerDialogComponent, enableDragDropOverlay = false, passToSearch, isSharedDcmt = false, sharedSourceTID, sharedSourceDID, allowButtonsRefs = false, onReferenceClick, }) => {
|
|
67
68
|
const { showHistory, showHistoryCallback, hideHistoryCallback, showCheckoutInformationForm, commentFormState, hideCommentFormCallback, showCheckoutInformationFormCallback, hideCheckoutInformationFormCallback, copyCheckoutPathToClipboardCallback, handleCheckOutCallback, handleCheckInCallback, refreshPreviewTrigger, showCicoWaitPanel, cicoWaitPanelTitle, showCicoPrimaryProgress, cicoPrimaryProgressText, cicoPrimaryProgressValue, cicoPrimaryProgressMax, } = useCheckInOutOperations();
|
|
@@ -121,6 +122,7 @@ const TMDcmtForm = ({ allTasks = [], getAllTasks, deleteTaskByIdsCallback, addTa
|
|
|
121
122
|
// Stato per triggerare il refresh del blog dall'esterno
|
|
122
123
|
const [refreshBlogTrigger, setRefreshBlogTrigger] = useState(0);
|
|
123
124
|
const [wfError, setWfError] = useState(null);
|
|
125
|
+
const [metadataDcmtOrigin, setMetadataDcmtOrigin] = useState(null);
|
|
124
126
|
const triggerBlogRefresh = useCallback(async () => {
|
|
125
127
|
setRefreshBlogTrigger(prev => prev + 1);
|
|
126
128
|
}, []);
|
|
@@ -188,10 +190,11 @@ const TMDcmtForm = ({ allTasks = [], getAllTasks, deleteTaskByIdsCallback, addTa
|
|
|
188
190
|
return;
|
|
189
191
|
TMSpinner.show({ description: 'Loading Metadata...' });
|
|
190
192
|
let res = getMetadataResult ?? await SDK_Globals.tmSession?.NewSearchEngine().GetMetadataAsync(TID, did, true);
|
|
193
|
+
const origin = { fromName: res?.fromName, fromTID: res?.fromTID };
|
|
191
194
|
let dtd = res?.dtdResult;
|
|
192
195
|
let rows = dtd.rows ? dtd.rows[0] : [];
|
|
193
196
|
let mids = res?.selectMIDs;
|
|
194
|
-
let metadataList = searchResultToMetadataValues(TID, dtd, rows, mids, mdList, layoutMode);
|
|
197
|
+
let metadataList = searchResultToMetadataValues(TID, dtd, rows, mids, mdList, layoutMode, origin.fromTID?.toString() !== TID?.toString());
|
|
195
198
|
if (archived) {
|
|
196
199
|
// Usa setFormData con funzione callback per accedere allo stato precedente
|
|
197
200
|
// invece di dipendere da formDataOrig nell'array di dipendenze
|
|
@@ -217,6 +220,7 @@ const TMDcmtForm = ({ allTasks = [], getAllTasks, deleteTaskByIdsCallback, addTa
|
|
|
217
220
|
});
|
|
218
221
|
return;
|
|
219
222
|
}
|
|
223
|
+
setMetadataDcmtOrigin(origin);
|
|
220
224
|
setFormDataOrig(structuredClone(metadataList));
|
|
221
225
|
setFormData(structuredClone(metadataList));
|
|
222
226
|
// Sincronizza il ref con i dati caricati per evitare stale closure in handleSave
|
|
@@ -278,7 +282,7 @@ const TMDcmtForm = ({ allTasks = [], getAllTasks, deleteTaskByIdsCallback, addTa
|
|
|
278
282
|
}
|
|
279
283
|
else {
|
|
280
284
|
const renderedMetadata = dtd?.metadata?.filter((metadata) => handleArchiveVisibility(metadata)) ?? [];
|
|
281
|
-
const metadataList = searchResultToMetadataValues(dtd?.id, undefined, [], [], renderedMetadata, layoutMode);
|
|
285
|
+
const metadataList = searchResultToMetadataValues(dtd?.id, undefined, [], [], renderedMetadata, layoutMode, metadataDcmtOrigin?.fromTID?.toString() !== TID?.toString());
|
|
282
286
|
setFormDataOrig(structuredClone(metadataList));
|
|
283
287
|
setFormData(structuredClone(metadataList));
|
|
284
288
|
formDataOrigRef.current = structuredClone(metadataList);
|
|
@@ -293,7 +297,7 @@ const TMDcmtForm = ({ allTasks = [], getAllTasks, deleteTaskByIdsCallback, addTa
|
|
|
293
297
|
setIsInitialLoading(false);
|
|
294
298
|
setIsNavigating(false);
|
|
295
299
|
}
|
|
296
|
-
}, [TID, DID, layoutMode, inputFile, setMetadataList, handleReset, allowButtonsRefs]);
|
|
300
|
+
}, [TID, DID, layoutMode, inputFile, setMetadataList, handleReset, allowButtonsRefs, metadataDcmtOrigin?.fromTID]);
|
|
297
301
|
const createChange = useCallback((mid, metadataType, modifiedValue) => {
|
|
298
302
|
return { mid, metadataType, modifiedValue };
|
|
299
303
|
}, []);
|
|
@@ -1377,6 +1381,11 @@ const TMDcmtForm = ({ allTasks = [], getAllTasks, deleteTaskByIdsCallback, addTa
|
|
|
1377
1381
|
};
|
|
1378
1382
|
const initialPanels = useMemo(() => {
|
|
1379
1383
|
const { assignedToMe, assignedByMe } = getDcmtTasksCounter(TID, DID, allTasks);
|
|
1384
|
+
let titleDcmtFormPanel = fromDTD?.nameLoc ?? "";
|
|
1385
|
+
// Caso: Il documento proviene da un'origine esterna
|
|
1386
|
+
if (metadataDcmtOrigin?.fromTID?.toString() !== TID?.toString()) {
|
|
1387
|
+
titleDcmtFormPanel = (_jsxs("div", { style: { display: 'inline-flex', alignItems: 'center', gap: '4px' }, children: [_jsx(TMTooltip, { content: _jsxs("div", { style: { textAlign: 'left' }, children: [_jsx("p", { children: "Questo documento proviene da un'altra origine e non pu\u00F2 essere modificato." }), _jsx("hr", {}), _jsxs("p", { children: [_jsx("strong", { children: "TID corrente:" }), " ", TID?.toString()] }), _jsxs("p", { children: [_jsx("strong", { children: "Nome corrente:" }), " ", fromDTD?.nameLoc] }), _jsx("hr", {}), _jsxs("p", { children: [_jsx("strong", { children: "TID origine:" }), " ", metadataDcmtOrigin?.fromTID?.toString()] }), _jsxs("p", { children: [_jsx("strong", { children: "Nome origine:" }), " ", metadataDcmtOrigin?.fromName] })] }), children: _jsx(IconLock, { fontSize: 16, style: { alignSelf: 'center' } }) }), metadataDcmtOrigin?.fromName] }));
|
|
1388
|
+
}
|
|
1380
1389
|
const panels = [
|
|
1381
1390
|
{
|
|
1382
1391
|
id: 'tmDcmtForm',
|
|
@@ -1386,7 +1395,7 @@ const TMDcmtForm = ({ allTasks = [], getAllTasks, deleteTaskByIdsCallback, addTa
|
|
|
1386
1395
|
isClosable: isClosable,
|
|
1387
1396
|
panelContainer: {
|
|
1388
1397
|
showHeader: showHeader,
|
|
1389
|
-
title:
|
|
1398
|
+
title: titleDcmtFormPanel,
|
|
1390
1399
|
allowMaximize: !isMobile,
|
|
1391
1400
|
onBack: showBackButton ? (isClosable && deviceType !== DeviceType.MOBILE) ? undefined : handleClose : undefined,
|
|
1392
1401
|
onClose: isClosable ? () => { } : undefined,
|
|
@@ -1458,7 +1467,7 @@ const TMDcmtForm = ({ allTasks = [], getAllTasks, deleteTaskByIdsCallback, addTa
|
|
|
1458
1467
|
},
|
|
1459
1468
|
];
|
|
1460
1469
|
return panels;
|
|
1461
|
-
}, [fromDTD, showBackButton, tmDcmtForm, tmBlog, tmSysMetadata, tmDcmtPreview, tmWF, tmDcmtTasks, isPreviewDisabled, isSysMetadataDisabled, isBoardDisabled, isWFDisabled, inputFile, isClosable, allTasks, DID, TID]);
|
|
1470
|
+
}, [fromDTD, showBackButton, tmDcmtForm, tmBlog, tmSysMetadata, tmDcmtPreview, tmWF, tmDcmtTasks, isPreviewDisabled, isSysMetadataDisabled, isBoardDisabled, isWFDisabled, inputFile, isClosable, allTasks, DID, TID, metadataDcmtOrigin?.fromTID]);
|
|
1462
1471
|
// Retrieves the current document form setting based on the normalized TID
|
|
1463
1472
|
const getCurrentDcmtFormSetting = () => {
|
|
1464
1473
|
const settings = SDKUI_Globals.userSettings.dcmtFormSettings;
|
|
@@ -15,5 +15,5 @@ export declare function getDefaultOperator(dataDomain: MetadataDataDomains | und
|
|
|
15
15
|
export declare const getQD: (tid: number | undefined, easyOr: boolean, newMaxDcmtsToBeReturned: number) => Promise<QueryDescriptor | undefined>;
|
|
16
16
|
export declare const getWorkItemSetIDAsync: (vid: number, did: number) => Promise<string | undefined>;
|
|
17
17
|
export declare const getSysAllDcmtsSQD: (tid: number | undefined, easyOr: boolean) => Promise<SavedQueryDescriptor>;
|
|
18
|
-
export declare const searchResultToMetadataValues: (tid: number | undefined, dtd: DataTableDescriptor | undefined, rows: string[], mids: number[], metadata: MetadataDescriptor[], layoutMode: LayoutModes) => MetadataValueDescriptorEx[];
|
|
18
|
+
export declare const searchResultToMetadataValues: (tid: number | undefined, dtd: DataTableDescriptor | undefined, rows: string[], mids: number[], metadata: MetadataDescriptor[], layoutMode: LayoutModes, isReadOnlyOrigin?: boolean) => MetadataValueDescriptorEx[];
|
|
19
19
|
export declare const handleArchiveVisibility: (md: MetadataDescriptor) => boolean;
|
|
@@ -260,7 +260,7 @@ export const getSysAllDcmtsSQD = async (tid, easyOr) => {
|
|
|
260
260
|
sqd.qd = await getQD(tid, easyOr, SDKUI_Globals.userSettings.searchSettings?.maxDcmtsToBeReturned ?? 1000);
|
|
261
261
|
return sqd;
|
|
262
262
|
};
|
|
263
|
-
export const searchResultToMetadataValues = (tid, dtd, rows, mids, metadata, layoutMode) => {
|
|
263
|
+
export const searchResultToMetadataValues = (tid, dtd, rows, mids, metadata, layoutMode, isReadOnlyOrigin = false) => {
|
|
264
264
|
if (!metadata || metadata.length === 0) {
|
|
265
265
|
return [];
|
|
266
266
|
}
|
|
@@ -345,27 +345,53 @@ export const searchResultToMetadataValues = (tid, dtd, rows, mids, metadata, lay
|
|
|
345
345
|
}
|
|
346
346
|
return mvd;
|
|
347
347
|
};
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
const
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
348
|
+
// Caso: il documento proviene da un'origine esterna e non può essere modificato
|
|
349
|
+
// Documento esterno: visualizza tutti i metadati non di sistema come read-only
|
|
350
|
+
if (isReadOnlyOrigin) {
|
|
351
|
+
const columns = dtd?.columns || [];
|
|
352
|
+
const rows = dtd?.rows ?? [];
|
|
353
|
+
// Itera su ogni colonna per costruire la metadata read-only
|
|
354
|
+
columns.forEach((col, index) => {
|
|
355
|
+
// MID: identificatore unico della colonna
|
|
356
|
+
const mid = Number(col.extendedProperties?.MID);
|
|
357
|
+
// Solo se MID > 100 (per escludere i metadati di sistema)
|
|
358
|
+
if (mid > 100 && rows[0] && rows[0][index]) {
|
|
359
|
+
// Cerca nei metadata se esiste un oggetto corrispondente a questo MID
|
|
360
|
+
const md = metadata.find(m => m.fromMID === mid);
|
|
361
|
+
if (!md)
|
|
362
|
+
return;
|
|
363
|
+
// Crea le proprietà del metadata impostando isReadOnly a true
|
|
364
|
+
const metadataProps = createMetadataProps(tid, md, rows[0][index], 0);
|
|
365
|
+
metadataProps.isReadOnly = true;
|
|
366
|
+
// Aggiunge l'oggetto read-only alla lista di output
|
|
367
|
+
outputMetadataList.push(metadataProps);
|
|
360
368
|
}
|
|
361
|
-
}
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
+
});
|
|
370
|
+
}
|
|
371
|
+
else {
|
|
372
|
+
// Caso: documento locale/modificabile
|
|
373
|
+
metadata.forEach(md => {
|
|
374
|
+
if (!md.id)
|
|
375
|
+
return;
|
|
376
|
+
if (layoutMode === LayoutModes.Ark && !handleArchiveVisibility(md))
|
|
377
|
+
return;
|
|
378
|
+
if (!rows)
|
|
379
|
+
return;
|
|
380
|
+
if (mids.length > 0) {
|
|
381
|
+
const index = mids.indexOf(md.id);
|
|
382
|
+
if (index >= 0) {
|
|
383
|
+
const isLexProt = (isLexProtIndex !== undefined && rows[isLexProtIndex]) ? (parseInt(rows[isLexProtIndex]) || undefined) : undefined;
|
|
384
|
+
outputMetadataList.push(createMetadataProps(tid, md, rows[index], isLexProt));
|
|
385
|
+
}
|
|
386
|
+
}
|
|
387
|
+
else {
|
|
388
|
+
let defaultValue;
|
|
389
|
+
if (layoutMode === LayoutModes.Ark && (md.dataDomain === MetadataDataDomains.DataList || md.dataDomain === MetadataDataDomains.DynamicDataList || md.dataDomain === MetadataDataDomains.UserID))
|
|
390
|
+
defaultValue = md.defaultValue;
|
|
391
|
+
outputMetadataList.push(createMetadataProps(tid, md, defaultValue, undefined));
|
|
392
|
+
}
|
|
393
|
+
});
|
|
394
|
+
}
|
|
369
395
|
return outputMetadataList;
|
|
370
396
|
};
|
|
371
397
|
export const handleArchiveVisibility = (md) => {
|