@topconsultnpm/sdkui-react 6.19.0-test2 → 6.19.0
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.
- package/lib/components/choosers/TMDynDataListItemChooser.js +5 -4
- package/lib/components/editors/TMMetadataValues.js +18 -10
- package/lib/components/features/assistant/ToppyDraggableHelpCenter.js +74 -63
- package/lib/components/features/documents/TMDcmtForm.d.ts +1 -0
- package/lib/components/features/documents/TMDcmtForm.js +12 -5
- package/lib/components/features/search/TMSavedQuerySelector.js +1 -1
- package/lib/components/features/search/TMSearchQueryPanel.js +1 -1
- package/lib/components/features/search/TMSearchResult.js +106 -26
- package/lib/components/features/search/TMSearchResultCheckoutInfoForm.d.ts +8 -0
- package/lib/components/features/search/TMSearchResultCheckoutInfoForm.js +134 -0
- package/lib/components/features/search/TMSearchResultsMenuItems.d.ts +2 -2
- package/lib/components/features/search/TMSearchResultsMenuItems.js +40 -62
- package/lib/components/features/search/TMTreeSelector.js +1 -1
- package/lib/components/features/search/TMViewHistoryDcmtForm.d.ts +18 -0
- package/lib/components/features/search/TMViewHistoryDcmtForm.js +215 -0
- package/lib/components/grids/TMRecentsManager.js +1 -1
- package/lib/helper/SDKUI_Globals.d.ts +7 -0
- package/lib/helper/SDKUI_Globals.js +1 -0
- package/lib/helper/SDKUI_Localizator.d.ts +9 -0
- package/lib/helper/SDKUI_Localizator.js +121 -6
- package/lib/helper/TMIcons.d.ts +3 -1
- package/lib/helper/TMIcons.js +9 -1
- package/lib/helper/cicoHelper.d.ts +31 -0
- package/lib/helper/cicoHelper.js +155 -0
- package/lib/helper/helpers.d.ts +7 -0
- package/lib/helper/helpers.js +31 -4
- package/package.json +2 -2
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import React, { useCallback, useEffect, useMemo, useState } from 'react';
|
|
3
|
-
import { SDK_Globals, DataColumnTypes, MetadataDataDomains, DataListViewModes, MetadataFormats, LayoutModes, TemplateTIDs, DcmtTypeListCacheService, AccessLevels, SystemMIDsAsNumber, RetrieveFileOptions, DcmtOpers, GeneralRetrieveFormats, AccessLevelsEx, ResultTypes, LayoutCacheService } from '@topconsultnpm/sdk-ts';
|
|
3
|
+
import { SDK_Globals, DataColumnTypes, MetadataDataDomains, DataListViewModes, MetadataFormats, LayoutModes, TemplateTIDs, DcmtTypeListCacheService, AccessLevels, SystemMIDsAsNumber, RetrieveFileOptions, DcmtOpers, GeneralRetrieveFormats, AccessLevelsEx, ResultTypes, LayoutCacheService, UserListCacheService } from '@topconsultnpm/sdk-ts';
|
|
4
4
|
import styled from 'styled-components';
|
|
5
5
|
import { getAllFieldSelectedDcmtsOrFocused, getCommandsMenuItems, getSelectedDcmtsOrFocused } from './TMSearchResultsMenuItems';
|
|
6
|
-
import { genUniqueId, IconShow, IconBoard, IconDcmtTypeSys, IconDetailDcmts, SDKUI_Localizator, IconDelete, IconRefresh, IconMenuVertical, IconDownload, deepCompare,
|
|
6
|
+
import { genUniqueId, IconShow, IconBoard, IconDcmtTypeSys, IconDetailDcmts, SDKUI_Localizator, IconDelete, IconRefresh, IconMenuVertical, IconDownload, deepCompare, generateUniqueColumnKeys, searchResultDescriptorToSimpleArray, searchResultToMetadataValues, IconSearchCheck, TMCommandsContextMenu, getExceptionMessage, IconCheck, svgToString, TMImageLibrary } from '../../../helper';
|
|
7
7
|
import { useDcmtOperations } from '../../../hooks/useDcmtOperations';
|
|
8
8
|
import { useInputAttachmentsDialog, useInputCvtFormatDialog } from '../../../hooks/useInputDialog';
|
|
9
9
|
import { useRelatedDocuments } from '../../../hooks/useRelatedDocuments';
|
|
@@ -43,6 +43,9 @@ import { TMResultManager } from '../../forms/TMResultDialog';
|
|
|
43
43
|
import TMCustomButton from '../../base/TMCustomButton';
|
|
44
44
|
import ToppyDraggableHelpCenter from '../assistant/ToppyDraggableHelpCenter';
|
|
45
45
|
import TMSignSettingsForm from './TMSignSettingsForm';
|
|
46
|
+
import { cicoIsEnabled, downloadFilesCallback, updateDcmtCheckoutItem } from '../../../helper/cicoHelper';
|
|
47
|
+
import TMViewHistoryDcmtForm from './TMViewHistoryDcmtForm';
|
|
48
|
+
import TMSearchResultCheckoutInfoForm from './TMSearchResultCheckoutInfoForm';
|
|
46
49
|
//#region Helper Methods
|
|
47
50
|
export const getSearchResultCountersSingleCategory = (searchResults) => {
|
|
48
51
|
// let totDcmtTypes = searchResults.length;
|
|
@@ -110,23 +113,42 @@ const TMSearchResult = ({ allTasks = [], getAllTasks, deleteTaskByIdsCallback, a
|
|
|
110
113
|
const [blogsDatasource, setBlogsDatasource] = useState([]);
|
|
111
114
|
const [hasLoadedDataOnce, setHasLoadedDataOnce] = useState(false); //traccia se *qualsiasi* dato è stato caricato per la prima volta
|
|
112
115
|
const [lastLoadedDid, setLastLoadedDid] = useState(undefined); // `lastLoadedDid` tiene traccia dell'ultimo `did` per cui abbiamo caricato i dati
|
|
116
|
+
// State to manage show history selected file
|
|
117
|
+
const [showHistory, setShowHistory] = useState(false);
|
|
118
|
+
const [allUsers, setAllUsers] = useState([]);
|
|
119
|
+
// State to manage show history selected file
|
|
120
|
+
const [showCheckoutInformationForm, setShowCheckoutInformationForm] = useState(false);
|
|
121
|
+
useEffect(() => {
|
|
122
|
+
const fetchAllUsers = async () => {
|
|
123
|
+
const users = await UserListCacheService.GetAllAsync();
|
|
124
|
+
setAllUsers(users ?? []);
|
|
125
|
+
};
|
|
126
|
+
fetchAllUsers();
|
|
127
|
+
}, []);
|
|
113
128
|
useEffect(() => { setID(genUniqueId()); }, []);
|
|
114
129
|
useEffect(() => {
|
|
115
130
|
setSelectedItems([]);
|
|
116
|
-
setFocusedItem(undefined);
|
|
117
131
|
setIsOpenBatchUpdate(false);
|
|
118
132
|
setCurrentSearchResults(searchResults);
|
|
119
|
-
if (searchResults.length <= 0)
|
|
133
|
+
if (searchResults.length <= 0) {
|
|
134
|
+
setSelectedSearchResult(undefined);
|
|
120
135
|
return;
|
|
136
|
+
}
|
|
121
137
|
if (searchResults.length === 1) {
|
|
122
138
|
setSelectedSearchResult(searchResults[0]);
|
|
123
139
|
return;
|
|
124
140
|
}
|
|
141
|
+
// Seleziona sempre il primo risultato ordinato, sia su mobile che desktop
|
|
125
142
|
setSelectedSearchResult(orderByName(searchResults)[0]);
|
|
126
143
|
}, [searchResults]);
|
|
127
144
|
useEffect(() => {
|
|
128
|
-
setFocusedItem(undefined);
|
|
129
145
|
setSelectedItems([]);
|
|
146
|
+
// Se non c'è un selectedSearchResult, resetta tutto
|
|
147
|
+
if (!selectedSearchResult) {
|
|
148
|
+
setFocusedItem(undefined);
|
|
149
|
+
setFromDTD(undefined);
|
|
150
|
+
return;
|
|
151
|
+
}
|
|
130
152
|
DcmtTypeListCacheService.GetWithNotGrantedAsync(selectedSearchResult?.fromTID, Number(selectedSearchResult?.dtdResult?.rows?.[0]?.[1])).then((dtd) => {
|
|
131
153
|
setFromDTD(dtd);
|
|
132
154
|
});
|
|
@@ -167,6 +189,16 @@ const TMSearchResult = ({ allTasks = [], getAllTasks, deleteTaskByIdsCallback, a
|
|
|
167
189
|
fetchLayout();
|
|
168
190
|
}, [currentMetadataValues]);
|
|
169
191
|
const openFormHandler = (layoutMode) => {
|
|
192
|
+
// Verifica che ci sia un documento selezionato con TID e DID validi
|
|
193
|
+
if (!focusedItem || focusedItem.TID === undefined || focusedItem.DID === undefined) {
|
|
194
|
+
ShowAlert({
|
|
195
|
+
message: SDKUI_Localizator.InvalidDcmt,
|
|
196
|
+
mode: "warning",
|
|
197
|
+
title: layoutMode === LayoutModes.Ark ? SDKUI_Localizator.Archive : SDKUI_Localizator.OpenTheDocument,
|
|
198
|
+
duration: 3000
|
|
199
|
+
});
|
|
200
|
+
return;
|
|
201
|
+
}
|
|
170
202
|
setIsOpenDcmtForm(true);
|
|
171
203
|
setDcmtFormLayoutMode(layoutMode);
|
|
172
204
|
};
|
|
@@ -205,7 +237,6 @@ const TMSearchResult = ({ allTasks = [], getAllTasks, deleteTaskByIdsCallback, a
|
|
|
205
237
|
const se = SDK_Globals.tmSession?.NewSearchEngine();
|
|
206
238
|
const sharedDcmts = await se?.GetSharedDcmtsAsync(getSelectedDcmtsOrFocused(selectedItems, focusedItem)[0].TID, getSelectedDcmtsOrFocused(selectedItems, focusedItem)[0].DID);
|
|
207
239
|
if (sharedDcmts && sharedDcmts.length > 0) {
|
|
208
|
-
console.log(sharedDcmts);
|
|
209
240
|
setSharedDcmtSearchResults(sharedDcmts);
|
|
210
241
|
}
|
|
211
242
|
else {
|
|
@@ -260,6 +291,12 @@ const TMSearchResult = ({ allTasks = [], getAllTasks, deleteTaskByIdsCallback, a
|
|
|
260
291
|
const closeSignSettingsForm = useCallback(() => {
|
|
261
292
|
setShowSignSettingsForm(false);
|
|
262
293
|
}, []);
|
|
294
|
+
const viewHistoryCallback = useCallback(() => {
|
|
295
|
+
setShowHistory(true);
|
|
296
|
+
}, []);
|
|
297
|
+
const showCheckoutInformationFormCallback = useCallback(() => {
|
|
298
|
+
setShowCheckoutInformationForm(true);
|
|
299
|
+
}, []);
|
|
263
300
|
const getTitleHeader = () => {
|
|
264
301
|
let counters = (showSelector && disableAccordionIfSingleCategory && searchResults.length > 1) ? getSearchResultCountersSingleCategory(searchResults) : "";
|
|
265
302
|
if (title)
|
|
@@ -310,6 +347,9 @@ const TMSearchResult = ({ allTasks = [], getAllTasks, deleteTaskByIdsCallback, a
|
|
|
310
347
|
setIsOpenDcmtForm(false);
|
|
311
348
|
}
|
|
312
349
|
else {
|
|
350
|
+
if (isMobile && currentSearchResults.length > 1) {
|
|
351
|
+
setSelectedSearchResult(undefined);
|
|
352
|
+
}
|
|
313
353
|
setSplitterSize(['100%', '0']);
|
|
314
354
|
onClose?.();
|
|
315
355
|
}
|
|
@@ -332,7 +372,7 @@ const TMSearchResult = ({ allTasks = [], getAllTasks, deleteTaskByIdsCallback, a
|
|
|
332
372
|
return;
|
|
333
373
|
if (e.target === 'content') {
|
|
334
374
|
e.items = e.items || [];
|
|
335
|
-
const menuItems = getCommandsMenuItems(isMobile, fromDTD, selectedItems, focusedItem, context, showFloatingBar, workingGroupContext, showSearch, setShowFloatingBar, openFormHandler, openSharedArchiveHandler, showSharedDcmtsHandler, downloadDcmtsAsync, runOperationAsync, onRefreshSearchAsync, refreshSelectionDataRowsAsync, onRefreshAfterAddDcmtToFavs, confirmFormat, openConfirmAttachmentsDialog, openTaskFormHandler, openDetailDcmtsFormHandler, openMasterDcmtsFormHandler, openBatchUpdateFormHandler, openExportForm, handleToggleSearch, handleSignApprove, openSignSettingsForm, handleCheckOutOperationCallback, openWGsCopyMoveForm, openCommentFormCallback, openEditPdf, openAddDocumentForm, passToArchiveCallback, archiveMasterDocuments, archiveDetailDocuments, currentTIDHasMasterRelations, currentTIDHasDetailRelations, canArchiveMasterRelation, canArchiveDetailRelation, pairManyToMany, hasManyToManyRelation);
|
|
375
|
+
const menuItems = getCommandsMenuItems(isMobile, fromDTD, allUsers, selectedItems, focusedItem, context, showFloatingBar, workingGroupContext, showSearch, setShowFloatingBar, openFormHandler, openSharedArchiveHandler, showSharedDcmtsHandler, downloadDcmtsAsync, runOperationAsync, onRefreshSearchAsync, refreshSelectionDataRowsAsync, onRefreshAfterAddDcmtToFavs, confirmFormat, openConfirmAttachmentsDialog, openTaskFormHandler, openDetailDcmtsFormHandler, openMasterDcmtsFormHandler, openBatchUpdateFormHandler, openExportForm, handleToggleSearch, handleSignApprove, openSignSettingsForm, handleCheckOutOperationCallback, showCheckoutInformationFormCallback, viewHistoryCallback, openWGsCopyMoveForm, openCommentFormCallback, openEditPdf, openAddDocumentForm, passToArchiveCallback, archiveMasterDocuments, archiveDetailDocuments, currentTIDHasMasterRelations, currentTIDHasDetailRelations, canArchiveMasterRelation, canArchiveDetailRelation, pairManyToMany, hasManyToManyRelation);
|
|
336
376
|
e.items.push(...menuItems);
|
|
337
377
|
//disabilitato per ora
|
|
338
378
|
//e.items.push(customButtonMenuItems());
|
|
@@ -361,9 +401,9 @@ const TMSearchResult = ({ allTasks = [], getAllTasks, deleteTaskByIdsCallback, a
|
|
|
361
401
|
if (checkout) {
|
|
362
402
|
await ue.CheckOutAsync()
|
|
363
403
|
.then(async () => {
|
|
364
|
-
|
|
404
|
+
const filename = fromDTD?.nameLoc || SDKUI_Localizator.SearchResult;
|
|
405
|
+
await downloadFilesCallback(filename, [firstDoc], true, downloadDcmtsAsync);
|
|
365
406
|
result.push({ rowIndex: 0, id1: firstDoc.TID, id2: firstDoc.DID, description: SDKUI_Localizator.UpdateCompletedSuccessfully, resultType: ResultTypes.SUCCESS });
|
|
366
|
-
// await refreshSelectionDataRowsAsync();
|
|
367
407
|
await refreshFocusedDataRowAsync(firstDoc.TID, firstDoc.DID, true);
|
|
368
408
|
})
|
|
369
409
|
.catch((error) => {
|
|
@@ -375,7 +415,13 @@ const TMSearchResult = ({ allTasks = [], getAllTasks, deleteTaskByIdsCallback, a
|
|
|
375
415
|
await ue.UndoCheckOutAsync()
|
|
376
416
|
.then(async () => {
|
|
377
417
|
result.push({ rowIndex: 0, id1: firstDoc.TID, id2: firstDoc.DID, description: SDKUI_Localizator.UpdateCompletedSuccessfully, resultType: ResultTypes.SUCCESS });
|
|
378
|
-
//
|
|
418
|
+
// Remove the corresponding draft checkout item
|
|
419
|
+
updateDcmtCheckoutItem({
|
|
420
|
+
TID: firstDoc.TID.toString(),
|
|
421
|
+
DID: firstDoc.DID.toString(),
|
|
422
|
+
checkoutFolder: "",
|
|
423
|
+
checkoutName: ""
|
|
424
|
+
}, "remove");
|
|
379
425
|
await refreshFocusedDataRowAsync(firstDoc.TID, firstDoc.DID, true);
|
|
380
426
|
})
|
|
381
427
|
.catch((error) => {
|
|
@@ -572,7 +618,7 @@ const TMSearchResult = ({ allTasks = [], getAllTasks, deleteTaskByIdsCallback, a
|
|
|
572
618
|
}
|
|
573
619
|
};
|
|
574
620
|
const searchResutlToolbar = _jsxs(_Fragment, { children: [(dcmtsReturned != dcmtsFound) && _jsx("p", { style: { backgroundColor: `white`, color: TMColors.primaryColor, textAlign: 'center', padding: '1px 4px', borderRadius: '3px', display: 'flex' }, children: `${dcmtsReturned}/${dcmtsFound} restituiti` }), context === SearchResultContext.FAVORITES_AND_RECENTS &&
|
|
575
|
-
_jsx("div", { style: { display: 'flex', alignItems: 'center', gap: '5px' }, children: _jsx(TMButton, { btnStyle: 'icon', icon: _jsx(IconDelete, { color: 'white' }), caption: "Rimuovi da " + (selectedSearchResult?.category === "Favorites" ? '"Preferiti"' : '"Recenti"'), disabled: getSelectedDcmtsOrFocused(selectedItems, focusedItem).length <= 0, onClick: removeDcmtFromFavsOrRecents }) }), _jsx(TMButton, { btnStyle: 'icon', icon: _jsx(IconRefresh, { color: 'white' }), caption: SDKUI_Localizator.Refresh, onClick: onRefreshSearchAsync }), _jsx(IconMenuVertical, { id: `commands-header-${id}`, color: 'white', cursor: 'pointer' }), _jsx(TMCommandsContextMenu, { target: `#commands-header-${id}`, showEvent: "click", menuItems: getCommandsMenuItems(isMobile, fromDTD, selectedItems, focusedItem, context, showFloatingBar, workingGroupContext, showSearch, setShowFloatingBar, openFormHandler, openSharedArchiveHandler, showSharedDcmtsHandler, downloadDcmtsAsync, runOperationAsync, onRefreshSearchAsync, refreshSelectionDataRowsAsync, onRefreshAfterAddDcmtToFavs, confirmFormat, openConfirmAttachmentsDialog, openTaskFormHandler, openDetailDcmtsFormHandler, openMasterDcmtsFormHandler, openBatchUpdateFormHandler, openExportForm, handleToggleSearch, handleSignApprove, openSignSettingsForm, handleCheckOutOperationCallback, openWGsCopyMoveForm, openCommentFormCallback, openEditPdf, openAddDocumentForm, passToArchiveCallback, archiveMasterDocuments, archiveDetailDocuments, currentTIDHasMasterRelations, currentTIDHasDetailRelations, canArchiveMasterRelation, canArchiveDetailRelation, pairManyToMany, hasManyToManyRelation)
|
|
621
|
+
_jsx("div", { style: { display: 'flex', alignItems: 'center', gap: '5px' }, children: _jsx(TMButton, { btnStyle: 'icon', icon: _jsx(IconDelete, { color: 'white' }), caption: "Rimuovi da " + (selectedSearchResult?.category === "Favorites" ? '"Preferiti"' : '"Recenti"'), disabled: getSelectedDcmtsOrFocused(selectedItems, focusedItem).length <= 0, onClick: removeDcmtFromFavsOrRecents }) }), _jsx(TMButton, { btnStyle: 'icon', icon: _jsx(IconRefresh, { color: 'white' }), caption: SDKUI_Localizator.Refresh, onClick: onRefreshSearchAsync }), _jsx(IconMenuVertical, { id: `commands-header-${id}`, color: 'white', cursor: 'pointer' }), _jsx(TMCommandsContextMenu, { target: `#commands-header-${id}`, showEvent: "click", menuItems: getCommandsMenuItems(isMobile, fromDTD, allUsers, selectedItems, focusedItem, context, showFloatingBar, workingGroupContext, showSearch, setShowFloatingBar, openFormHandler, openSharedArchiveHandler, showSharedDcmtsHandler, downloadDcmtsAsync, runOperationAsync, onRefreshSearchAsync, refreshSelectionDataRowsAsync, onRefreshAfterAddDcmtToFavs, confirmFormat, openConfirmAttachmentsDialog, openTaskFormHandler, openDetailDcmtsFormHandler, openMasterDcmtsFormHandler, openBatchUpdateFormHandler, openExportForm, handleToggleSearch, handleSignApprove, openSignSettingsForm, handleCheckOutOperationCallback, showCheckoutInformationFormCallback, viewHistoryCallback, openWGsCopyMoveForm, openCommentFormCallback, openEditPdf, openAddDocumentForm, passToArchiveCallback, archiveMasterDocuments, archiveDetailDocuments, currentTIDHasMasterRelations, currentTIDHasDetailRelations, canArchiveMasterRelation, canArchiveDetailRelation, pairManyToMany, hasManyToManyRelation) /*.concat([customButtonMenuItems()])*/ })] });
|
|
576
622
|
const handleAddItem = (tid, did) => {
|
|
577
623
|
let newItem = { TID: tid ?? 0, DID: did ?? 0 };
|
|
578
624
|
setSecondaryMasterDcmts((prevItems) => [...prevItems, newItem]);
|
|
@@ -604,10 +650,10 @@ const TMSearchResult = ({ allTasks = [], getAllTasks, deleteTaskByIdsCallback, a
|
|
|
604
650
|
? _jsxs("div", { style: { display: 'flex', flexDirection: 'column', alignItems: 'center', justifyContent: 'center', height: '100%', width: '100%' }, children: [_jsx(IconBoard, { fontSize: 96 }), _jsx("div", { style: { fontSize: "15px", marginTop: "10px" }, children: SDKUI_Localizator.NoDcmtFound }), openAddDocumentForm && _jsx("div", { style: { marginTop: "10px" }, children: _jsx(TMButton, { fontSize: "15px", icon: _jsx("i", { className: 'dx-icon-share' }), caption: SDKUI_Localizator.Share, onClick: openAddDocumentForm }) })] })
|
|
605
651
|
:
|
|
606
652
|
_jsxs(_Fragment, { children: [_jsxs(TMLayoutItem, { height: '100%', children: [_jsxs(TMSplitterLayout, { direction: 'horizontal', overflow: 'visible', separatorSize: Gutters.getGutters(), separatorActiveColor: 'transparent', separatorColor: 'transparent', min: ['0', '0'], showSeparator: showSelector && deviceType !== DeviceType.MOBILE, start: showSelector ? deviceType !== DeviceType.MOBILE ? ['30%', '70%'] : splitterSize : ['0%', '100%'], children: [showSelector ?
|
|
607
|
-
_jsx(TMLayoutItem, { children: _jsx(TMSearchResultSelector, { searchResults: currentSearchResults, disableAccordionIfSingleCategory: disableAccordionIfSingleCategory, selectedTID: selectedSearchResultTID, onSelectionChanged: onSearchResultSelectionChanged }) })
|
|
653
|
+
_jsx(TMLayoutItem, { children: _jsx(TMSearchResultSelector, { searchResults: currentSearchResults, disableAccordionIfSingleCategory: disableAccordionIfSingleCategory, selectedTID: selectedSearchResultTID, selectedSearchResult: selectedSearchResult, autoSelectFirst: !isMobile || currentSearchResults.length === 1, onSelectionChanged: onSearchResultSelectionChanged }) })
|
|
608
654
|
:
|
|
609
|
-
_jsx(_Fragment, {}), _jsxs(TMLayoutItem, { children: [_jsx(TMSearchResultGrid, { showSearch: showSearch, inputFocusedItem: focusedItem, inputSelectedItems: selectedItems, searchResult: searchResults.length > 1 ? selectedSearchResult : searchResults[0], lastUpdateSearchTime: lastUpdateSearchTime, openInOffice: openInOffice, onDblClick: () => openFormHandler(LayoutModes.Update), onContextMenuPreparing: onContextMenuPreparing, onSelectionChanged: (items) => { setSelectedItems(items); }, onVisibleItemChanged: setVisibleItems, onFocusedItemChanged: setFocusedItem, onDownloadDcmtsAsync: async (inputDcmts, downloadType, downloadMode, _y, confirmAttachments) => await downloadDcmtsAsync(inputDcmts, downloadType, downloadMode, onFileOpened, confirmAttachments), showExportForm: showExportForm, onCloseExportForm: onCloseExportForm }), allowFloatingBar && showFloatingBar && deviceType !== DeviceType.MOBILE &&
|
|
610
|
-
_jsxs(TMFloatingToolbar, { backgroundColor: TMColors.primaryColor, initialLeft: '10px', initialTop: 'calc(100% - 75px)', children: [fromDTD?.perm?.canRetrieveFile === AccessLevels.Yes && _jsx(TMButton, { btnStyle: 'icon', caption: "Download file", disabled: fromDTD?.perm?.canRetrieveFile !== AccessLevels.Yes || !focusedItem?.DID, icon: _jsx(IconDownload, { color: 'white' }), onClick: () => { downloadDcmtsAsync(getSelectedDcmtsOrFocused(selectedItems, focusedItem), DownloadTypes.Dcmt, "download"); } }), allowRelations && _jsx(TMButton, { btnStyle: 'icon', disabled: !currentTIDHasDetailRelations || !focusedItem?.DID, icon: _jsx(IconDetailDcmts, { color: 'white' }), caption: SDKUI_Localizator.DcmtsDetail, onClick: () => setIsOpenDetails(true) }), allowRelations && _jsx(TMButton, { btnStyle: 'icon', disabled: !currentTIDHasMasterRelations || !focusedItem?.DID, icon: _jsx(IconDetailDcmts, { color: 'white', transform: 'scale(-1, 1)' }), caption: SDKUI_Localizator.DcmtsMaster, onClick: () => setIsOpenMaster(true) }), _jsx(IconMenuVertical, { id: `commands-floating-${id}`, color: 'white', cursor: 'pointer' }), _jsx(TMCommandsContextMenu, { target: `#commands-floating-${id}`, showEvent: "click", menuItems: getCommandsMenuItems(isMobile, fromDTD, selectedItems, focusedItem, context, showFloatingBar, workingGroupContext, showSearch, setShowFloatingBar, openFormHandler, openSharedArchiveHandler, showSharedDcmtsHandler, downloadDcmtsAsync, runOperationAsync, onRefreshSearchAsync, refreshSelectionDataRowsAsync, onRefreshAfterAddDcmtToFavs, confirmFormat, openConfirmAttachmentsDialog, openTaskFormHandler, openDetailDcmtsFormHandler, openMasterDcmtsFormHandler, openBatchUpdateFormHandler, openExportForm, handleToggleSearch, handleSignApprove, openSignSettingsForm, handleCheckOutOperationCallback, openWGsCopyMoveForm, openCommentFormCallback, openEditPdf, openAddDocumentForm, passToArchiveCallback, archiveMasterDocuments, archiveDetailDocuments, currentTIDHasMasterRelations, currentTIDHasDetailRelations, canArchiveMasterRelation, canArchiveDetailRelation, pairManyToMany, hasManyToManyRelation)
|
|
655
|
+
_jsx(_Fragment, {}), _jsxs(TMLayoutItem, { children: [_jsx(TMSearchResultGrid, { showSearch: showSearch, fromDTD: fromDTD, allUsers: allUsers, inputFocusedItem: focusedItem, inputSelectedItems: selectedItems, searchResult: searchResults.length > 1 ? selectedSearchResult : searchResults[0], lastUpdateSearchTime: lastUpdateSearchTime, openInOffice: openInOffice, onDblClick: () => openFormHandler(LayoutModes.Update), onContextMenuPreparing: onContextMenuPreparing, onSelectionChanged: (items) => { setSelectedItems(items); }, onVisibleItemChanged: setVisibleItems, onFocusedItemChanged: setFocusedItem, onDownloadDcmtsAsync: async (inputDcmts, downloadType, downloadMode, _y, confirmAttachments) => await downloadDcmtsAsync(inputDcmts, downloadType, downloadMode, onFileOpened, confirmAttachments), showExportForm: showExportForm, onCloseExportForm: onCloseExportForm }), allowFloatingBar && showFloatingBar && deviceType !== DeviceType.MOBILE &&
|
|
656
|
+
_jsxs(TMFloatingToolbar, { backgroundColor: TMColors.primaryColor, initialLeft: '10px', initialTop: 'calc(100% - 75px)', children: [fromDTD?.perm?.canRetrieveFile === AccessLevels.Yes && _jsx(TMButton, { btnStyle: 'icon', caption: "Download file", disabled: fromDTD?.perm?.canRetrieveFile !== AccessLevels.Yes || !focusedItem?.DID, icon: _jsx(IconDownload, { color: 'white' }), onClick: () => { downloadDcmtsAsync(getSelectedDcmtsOrFocused(selectedItems, focusedItem), DownloadTypes.Dcmt, "download"); } }), allowRelations && _jsx(TMButton, { btnStyle: 'icon', disabled: !currentTIDHasDetailRelations || !focusedItem?.DID, icon: _jsx(IconDetailDcmts, { color: 'white' }), caption: SDKUI_Localizator.DcmtsDetail, onClick: () => setIsOpenDetails(true) }), allowRelations && _jsx(TMButton, { btnStyle: 'icon', disabled: !currentTIDHasMasterRelations || !focusedItem?.DID, icon: _jsx(IconDetailDcmts, { color: 'white', transform: 'scale(-1, 1)' }), caption: SDKUI_Localizator.DcmtsMaster, onClick: () => setIsOpenMaster(true) }), _jsx(IconMenuVertical, { id: `commands-floating-${id}`, color: 'white', cursor: 'pointer' }), _jsx(TMCommandsContextMenu, { target: `#commands-floating-${id}`, showEvent: "click", menuItems: getCommandsMenuItems(isMobile, fromDTD, allUsers, selectedItems, focusedItem, context, showFloatingBar, workingGroupContext, showSearch, setShowFloatingBar, openFormHandler, openSharedArchiveHandler, showSharedDcmtsHandler, downloadDcmtsAsync, runOperationAsync, onRefreshSearchAsync, refreshSelectionDataRowsAsync, onRefreshAfterAddDcmtToFavs, confirmFormat, openConfirmAttachmentsDialog, openTaskFormHandler, openDetailDcmtsFormHandler, openMasterDcmtsFormHandler, openBatchUpdateFormHandler, openExportForm, handleToggleSearch, handleSignApprove, openSignSettingsForm, handleCheckOutOperationCallback, showCheckoutInformationFormCallback, viewHistoryCallback, openWGsCopyMoveForm, openCommentFormCallback, openEditPdf, openAddDocumentForm, passToArchiveCallback, archiveMasterDocuments, archiveDetailDocuments, currentTIDHasMasterRelations, currentTIDHasDetailRelations, canArchiveMasterRelation, canArchiveDetailRelation, pairManyToMany, hasManyToManyRelation) /*.concat([customButtonMenuItems()])*/ })] })] })] }), showApprovePopup && _jsx(WorkFlowApproveRejectPopUp, { deviceType: deviceType, onCompleted: onWFOperationCompleted, selectedItems: getSelectedDcmtsOrFocused(selectedItems, focusedItem), isReject: 0, onClose: () => setShowApprovePopup(false) }), showRejectPopup && _jsx(WorkFlowApproveRejectPopUp, { deviceType: deviceType, onCompleted: onWFOperationCompleted, selectedItems: getSelectedDcmtsOrFocused(selectedItems, focusedItem), isReject: 1, onClose: () => setShowRejectPopup(false) }), showReAssignPopup && _jsx(WorkFlowReAssignPopUp, { deviceType: deviceType, onCompleted: onWFOperationCompleted, selectedItems: getSelectedDcmtsOrFocused(selectedItems, focusedItem), onClose: () => setShowReAssignPopup(false) }), showMoreInfoPopup && _jsx(WorkFlowMoreInfoPopUp, { TID: focusedItem?.TID, DID: focusedItem?.DID, deviceType: deviceType, onCompleted: onWFOperationCompleted, onClose: () => setShowMoreInfoPopup(false) }), isOpenBatchUpdate && _jsx(TMBatchUpdateForm, { isModal: true, titleModal: `${SDKUI_Localizator.BatchUpdate} (${getSelectionDcmtInfo().length} documenti selezionati)`, inputDcmts: getSelectionDcmtInfo(), TID: focusedItem ? focusedItem?.TID : selectedItems[0]?.TID, DID: focusedItem ? focusedItem?.DID : selectedItems[0]?.DID, onBack: () => {
|
|
611
657
|
setIsOpenBatchUpdate(false);
|
|
612
658
|
}, onSavedCallbackAsync: async () => {
|
|
613
659
|
setIsOpenBatchUpdate(false);
|
|
@@ -665,7 +711,8 @@ const TMSearchResult = ({ allTasks = [], getAllTasks, deleteTaskByIdsCallback, a
|
|
|
665
711
|
}, allTasks: allTasks, getAllTasks: getAllTasks, deleteTaskByIdsCallback: deleteTaskByIdsCallback, addTaskCallback: addTaskCallback, editTaskCallback: editTaskCallback, handleNavigateToWGs: handleNavigateToWGs, handleNavigateToDossiers: handleNavigateToDossiers }) }), sharedDcmtSearchResults.length > 0 &&
|
|
666
712
|
_jsx(TMModal, { title: "Documenti condivisi", onClose: () => {
|
|
667
713
|
setSharedDcmtSearchResults([]);
|
|
668
|
-
}, width: isMobile ? '90%' : '60%', height: isMobile ? '90%' : '80%', children: _jsx(TMSearchResult, { searchResults: sharedDcmtSearchResults, allowFloatingBar: false, showSelector: true, showBackButton:
|
|
714
|
+
}, width: isMobile ? '90%' : '60%', height: isMobile ? '90%' : '80%', children: _jsx(TMSearchResult, { searchResults: sharedDcmtSearchResults, allowFloatingBar: false, showSelector: true, disableAccordionIfSingleCategory: true, showBackButton: isMobile, allTasks: allTasks, getAllTasks: getAllTasks, deleteTaskByIdsCallback: deleteTaskByIdsCallback, addTaskCallback: addTaskCallback, editTaskCallback: editTaskCallback, handleNavigateToWGs: handleNavigateToWGs, handleNavigateToDossiers: handleNavigateToDossiers }) }), (showCheckoutInformationForm && fromDTD && getSelectedDcmtsOrFocused(selectedItems, focusedItem).length > 0) &&
|
|
715
|
+
_jsx(TMSearchResultCheckoutInfoForm, { dtdName: fromDTD.name ?? SDKUI_Localizator.SearchResult, selectedDcmtOrFocused: getSelectedDcmtsOrFocused(selectedItems, focusedItem)[0], onClose: () => setShowCheckoutInformationForm(false) }), (floatingActionConfig && floatingActionConfig.isVisible) && _jsx(TMSearchResultFloatingActionButton, { selectedDcmtsOrFocused: getSelectedDcmtsOrFocused(selectedItems, focusedItem), config: floatingActionConfig })] }), [
|
|
669
716
|
searchResults,
|
|
670
717
|
selectedSearchResult,
|
|
671
718
|
lastUpdateSearchTime,
|
|
@@ -783,7 +830,7 @@ const TMSearchResult = ({ allTasks = [], getAllTasks, deleteTaskByIdsCallback, a
|
|
|
783
830
|
:
|
|
784
831
|
_jsx(TMPanelManagerProvider, { panels: initialPanels, initialVisibility: allInitialPanelVisibility, defaultDimensions: initialPanelDimensions, initialDimensions: initialPanelDimensions, initialMobilePanelId: 'tmSearchResult', children: _jsx(TMPanelManagerContainer, { panels: initialPanels, direction: "horizontal", parentId: groupId, showToolbar: showSearchResultSidebar }) }) }) }), _jsx(StyledMultiViewPanel, { "$isVisible": isOpenDetails, children: isOpenDetails && _jsx(TMMasterDetailDcmts, { deviceType: deviceType, isForMaster: false, inputDcmts: getSelectionDcmtInfo(), allowNavigation: focusedItem && selectedItems.length <= 0, canNext: canNavigateHandler('next'), canPrev: canNavigateHandler('prev'), onNext: () => onNavigateHandler('next'), onPrev: () => onNavigateHandler('prev'), onBack: () => setIsOpenDetails(false), allTasks: allTasks, getAllTasks: getAllTasks, deleteTaskByIdsCallback: deleteTaskByIdsCallback, addTaskCallback: addTaskCallback, editTaskCallback: editTaskCallback, handleNavigateToWGs: handleNavigateToWGs, handleNavigateToDossiers: handleNavigateToDossiers }) }), _jsxs(StyledMultiViewPanel, { "$isVisible": isOpenMaster, children: [isOpenMaster && _jsx(TMMasterDetailDcmts, { deviceType: deviceType, inputDcmts: getSelectionDcmtInfo(), isForMaster: true, allowNavigation: focusedItem && selectedItems.length <= 0, canNext: canNavigateHandler('next'), canPrev: canNavigateHandler('prev'), onNext: () => onNavigateHandler('next'), onPrev: () => onNavigateHandler('prev'), onBack: () => setIsOpenMaster(false), appendMasterDcmts: handleAddItem, allTasks: allTasks, getAllTasks: getAllTasks, deleteTaskByIdsCallback: deleteTaskByIdsCallback, addTaskCallback: addTaskCallback, editTaskCallback: editTaskCallback, handleNavigateToWGs: handleNavigateToWGs, handleNavigateToDossiers: handleNavigateToDossiers }), secondaryMasterDcmts.length > 0 && secondaryMasterDcmts.map((dcmt, index) => {
|
|
785
832
|
return (_jsx(StyledModalContainer, { style: { backgroundColor: 'white' }, children: _jsx(TMMasterDetailDcmts, { deviceType: deviceType, inputDcmts: [dcmt], isForMaster: true, allowNavigation: false, onBack: () => handleRemoveItem(dcmt.TID, dcmt.DID), appendMasterDcmts: handleAddItem, allTasks: allTasks, getAllTasks: getAllTasks, deleteTaskByIdsCallback: deleteTaskByIdsCallback, addTaskCallback: addTaskCallback, editTaskCallback: editTaskCallback, handleNavigateToWGs: handleNavigateToWGs, handleNavigateToDossiers: handleNavigateToDossiers }) }, `${index}-${dcmt.DID}`));
|
|
786
|
-
})] }), _jsx(StyledMultiViewPanel, { "$isVisible": isOpenDcmtForm, children: isOpenDcmtForm && _jsx(TMDcmtForm, { isModal: openDcmtFormAsModal || (dcmtFormLayoutMode === LayoutModes.Ark && focusedItem?.DID), titleModal: fromDTD?.name ?? '', TID: focusedItem
|
|
833
|
+
})] }), _jsx(StyledMultiViewPanel, { "$isVisible": isOpenDcmtForm, children: isOpenDcmtForm && focusedItem?.TID !== undefined && focusedItem?.DID !== undefined && _jsx(TMDcmtForm, { isModal: openDcmtFormAsModal || (dcmtFormLayoutMode === LayoutModes.Ark && focusedItem?.DID), titleModal: fromDTD?.name ?? '', TID: focusedItem.TID, DID: focusedItem.DID, allowButtonsRefs: true, layoutMode: dcmtFormLayoutMode, count: visibleItems.length, itemIndex: visibleItems.findIndex(o => o.rowIndex === focusedItem?.rowIndex) + 1, canNext: canNavigateHandler('next'), canPrev: canNavigateHandler('prev'), onNext: () => onNavigateHandler('next'), onPrev: () => onNavigateHandler('prev'), onClose: () => { setIsOpenDcmtForm(false); }, onWFOperationCompleted: onWFOperationCompleted, onTaskCreateRequest: onTaskCreateRequest, onSavedAsyncCallback: handleSavedAsyncCallback, openS4TViewer: openS4TViewer, onOpenS4TViewerRequest: onOpenS4TViewerRequest, onReferenceClick: onReferenceClick, allTasks: allTasks, getAllTasks: getAllTasks, deleteTaskByIdsCallback: deleteTaskByIdsCallback, addTaskCallback: addTaskCallback, editTaskCallback: editTaskCallback, handleNavigateToWGs: handleNavigateToWGs, handleNavigateToDossiers: handleNavigateToDossiers }) }), isOpenArchiveRelationForm && _jsx(TMDcmtForm, { isModal: true, titleModal: SDKUI_Localizator.Archive + ' - ' + (archiveType === 'detail' ? SDKUI_Localizator.DcmtsDetail : SDKUI_Localizator.DcmtsMaster), TID: archiveRelatedDcmtFormTID, layoutMode: LayoutModes.Ark, inputMids: archiveRelatedDcmtFormMids, showBackButton: false, allowButtonsRefs: false, onClose: () => {
|
|
787
834
|
setIsOpenArchiveRelationForm(false);
|
|
788
835
|
setArchiveType(undefined);
|
|
789
836
|
setArchiveRelatedDcmtFormTID(undefined);
|
|
@@ -794,13 +841,13 @@ const TMSearchResult = ({ allTasks = [], getAllTasks, deleteTaskByIdsCallback, a
|
|
|
794
841
|
setArchiveRelatedDcmtFormTID(undefined);
|
|
795
842
|
setArchiveRelatedDcmtFormMids([]);
|
|
796
843
|
await onRefreshSearchAsync?.();
|
|
797
|
-
}, allTasks: allTasks, getAllTasks: getAllTasks, deleteTaskByIdsCallback: deleteTaskByIdsCallback, addTaskCallback: addTaskCallback, editTaskCallback: editTaskCallback, handleNavigateToWGs: handleNavigateToWGs, handleNavigateToDossiers: handleNavigateToDossiers }), (showSignSettingsForm && fromDTD) && _jsx(TMSignSettingsForm, { fromDTD: fromDTD, inputDcmts: allFieldSelectedDocs, onCloseSignSettingsForm: closeSignSettingsForm, onSavedAsyncCallback: handleSavedAsyncCallback })] }));
|
|
844
|
+
}, allTasks: allTasks, getAllTasks: getAllTasks, deleteTaskByIdsCallback: deleteTaskByIdsCallback, addTaskCallback: addTaskCallback, editTaskCallback: editTaskCallback, handleNavigateToWGs: handleNavigateToWGs, handleNavigateToDossiers: handleNavigateToDossiers }), (showSignSettingsForm && fromDTD) && _jsx(TMSignSettingsForm, { fromDTD: fromDTD, inputDcmts: allFieldSelectedDocs, onCloseSignSettingsForm: closeSignSettingsForm, onSavedAsyncCallback: handleSavedAsyncCallback }), (showHistory && fromDTD && getSelectedDcmtsOrFocused(selectedItems, focusedItem).length > 0) && _jsx(TMViewHistoryDcmtForm, { fromDTD: fromDTD, deviceType: deviceType, inputDcmt: getSelectedDcmtsOrFocused(selectedItems, focusedItem)[0], onClose: () => setShowHistory(false), allTasks: allTasks, getAllTasks: getAllTasks, deleteTaskByIdsCallback: deleteTaskByIdsCallback, addTaskCallback: addTaskCallback, editTaskCallback: editTaskCallback, handleNavigateToWGs: handleNavigateToWGs, handleNavigateToDossiers: handleNavigateToDossiers })] }));
|
|
798
845
|
};
|
|
799
846
|
export default TMSearchResult;
|
|
800
847
|
const renderDcmtIcon = (cellData, onDownloadDcmtsAsync, openInOffice) => {
|
|
801
848
|
return _jsx(TMDcmtIcon, { tid: cellData.data.TID, did: cellData.data.DID, fileExtension: cellData.data.FILEEXT, fileCount: cellData.data.FILECOUNT, isLexProt: cellData.data.IsLexProt, isMail: cellData.data.ISMAIL, isShared: cellData.data.ISSHARED, isSigned: cellData.data.ISSIGNED, downloadMode: 'openInNewWindow', onDownloadDcmtsAsync: onDownloadDcmtsAsync, openInOffice: openInOffice });
|
|
802
849
|
};
|
|
803
|
-
const TMSearchResultGrid = ({ openInOffice, inputFocusedItem, showSearch, allowMultipleSelection = true, showExportForm = false, onCloseExportForm, onFocusedItemChanged, onDownloadDcmtsAsync, onVisibleItemChanged, inputSelectedItems = [], lastUpdateSearchTime, searchResult, onContextMenuPreparing, onSelectionChanged, onDblClick }) => {
|
|
850
|
+
const TMSearchResultGrid = ({ openInOffice, fromDTD, allUsers, inputFocusedItem, showSearch, allowMultipleSelection = true, showExportForm = false, onCloseExportForm, onFocusedItemChanged, onDownloadDcmtsAsync, onVisibleItemChanged, inputSelectedItems = [], lastUpdateSearchTime, searchResult, onContextMenuPreparing, onSelectionChanged, onDblClick }) => {
|
|
804
851
|
const [dataSource, setDataSource] = useState();
|
|
805
852
|
const [columns, setColumns] = useState([]);
|
|
806
853
|
// State to store selected row keys
|
|
@@ -880,12 +927,20 @@ const TMSearchResultGrid = ({ openInOffice, inputFocusedItem, showSearch, allowM
|
|
|
880
927
|
return null;
|
|
881
928
|
const isLogDel = cellData.data.ISLOGDEL == 1;
|
|
882
929
|
const isLexProt = cellData.data.IsLexProt == 1;
|
|
930
|
+
// Prima colonna: la colonna numero 2 (dopo icona e selezione)
|
|
931
|
+
const isFirstColumn = cellData.columnIndex === 2;
|
|
932
|
+
const { checkoutStatus } = cicoIsEnabled(cellData.data, allUsers, fromDTD);
|
|
933
|
+
const shouldShowCheckoutIcon = isFirstColumn && checkoutStatus.isCheckedOut && checkoutStatus.icon;
|
|
883
934
|
let style = {};
|
|
884
935
|
if (isLogDel) {
|
|
885
936
|
style = { color: 'gray', textDecoration: 'line-through' };
|
|
886
937
|
}
|
|
887
|
-
else if (isLexProt)
|
|
938
|
+
else if (isLexProt) {
|
|
888
939
|
style = { color: 'blue' };
|
|
940
|
+
}
|
|
941
|
+
if (shouldShowCheckoutIcon) {
|
|
942
|
+
style = { ...style, display: 'flex', gap: '4px', whiteSpace: 'nowrap' };
|
|
943
|
+
}
|
|
889
944
|
let child = _jsx("div", { children: cellData.text });
|
|
890
945
|
if (dataDomain === MetadataDataDomains.DataList) {
|
|
891
946
|
child = _jsx(TMDataListItemViewer, { dataListId: dataListID, viewMode: dataListViewMode, value: cellData.value });
|
|
@@ -893,8 +948,8 @@ const TMSearchResultGrid = ({ openInOffice, inputFocusedItem, showSearch, allowM
|
|
|
893
948
|
if (dataDomain === MetadataDataDomains.UserID) {
|
|
894
949
|
child = _jsx(TMUserIdViewer, { userId: cellData.value, showIcon: true, noneSelectionText: '' });
|
|
895
950
|
}
|
|
896
|
-
return
|
|
897
|
-
}, []);
|
|
951
|
+
return (_jsxs("div", { style: style, children: [shouldShowCheckoutIcon && checkoutStatus.icon, child] }));
|
|
952
|
+
}, [fromDTD, allUsers]);
|
|
898
953
|
const dataType = useCallback((col) => {
|
|
899
954
|
switch (col.dataType) {
|
|
900
955
|
case DataColumnTypes.DateTime: return "datetime";
|
|
@@ -945,16 +1000,19 @@ const TMSearchResultGrid = ({ openInOffice, inputFocusedItem, showSearch, allowM
|
|
|
945
1000
|
return undefined;
|
|
946
1001
|
}, []);
|
|
947
1002
|
useEffect(() => {
|
|
1003
|
+
if (fromDTD === undefined || searchResult === undefined)
|
|
1004
|
+
return;
|
|
948
1005
|
setFocusedItem(undefined); // resetta sempre prima
|
|
949
1006
|
let cols = [];
|
|
1007
|
+
// Generate unique keys for all columns
|
|
1008
|
+
const uniqueKeys = generateUniqueColumnKeys(searchResult?.dtdResult?.columns, searchResult?.fromTID);
|
|
950
1009
|
searchResult?.dtdResult?.columns?.map((col, index) => {
|
|
951
|
-
let keyField = getDataColumnName(searchResult?.fromTID, col);
|
|
952
1010
|
const isVisible = col.extendedProperties?.["Visibility"] != "Hidden";
|
|
953
1011
|
const dataDomain = MetadataDataDomains[(col.extendedProperties?.["DataDomain"] ?? "None")];
|
|
954
1012
|
const dataListID = Number(col.extendedProperties?.["DataListID"]);
|
|
955
1013
|
const dataListViewMode = DataListViewModes[(col.extendedProperties?.["DataListViewMode"] ?? "None")];
|
|
956
1014
|
cols.push({
|
|
957
|
-
dataField:
|
|
1015
|
+
dataField: uniqueKeys[index],
|
|
958
1016
|
dataType: dataType(col),
|
|
959
1017
|
visible: isVisible,
|
|
960
1018
|
cellRender: (cellData) => cellRender(cellData, dataDomain, dataListID, dataListViewMode),
|
|
@@ -966,7 +1024,7 @@ const TMSearchResultGrid = ({ openInOffice, inputFocusedItem, showSearch, allowM
|
|
|
966
1024
|
let newDataSource = searchResultDescriptorToSimpleArray(searchResult);
|
|
967
1025
|
setDataSource(newDataSource);
|
|
968
1026
|
// setFocusedItem(newDataSource && newDataSource.length > 0 ? newDataSource[0] : undefined);
|
|
969
|
-
}, [searchResult]);
|
|
1027
|
+
}, [searchResult, fromDTD, allUsers]);
|
|
970
1028
|
useEffect(() => {
|
|
971
1029
|
let newDataSource = searchResultDescriptorToSimpleArray(searchResult);
|
|
972
1030
|
setDataSource(newDataSource);
|
|
@@ -999,6 +1057,16 @@ const TMSearchResultGrid = ({ openInOffice, inputFocusedItem, showSearch, allowM
|
|
|
999
1057
|
// Era sull'icona, non fare nulla
|
|
1000
1058
|
return;
|
|
1001
1059
|
}
|
|
1060
|
+
// Verifica che il documento abbia TID e DID validi prima di procedere
|
|
1061
|
+
if (!e.data.TID || !e.data.DID) {
|
|
1062
|
+
ShowAlert({
|
|
1063
|
+
message: SDKUI_Localizator.InvalidDcmt,
|
|
1064
|
+
mode: "warning",
|
|
1065
|
+
title: SDKUI_Localizator.OpenForm,
|
|
1066
|
+
duration: 3000
|
|
1067
|
+
});
|
|
1068
|
+
return;
|
|
1069
|
+
}
|
|
1002
1070
|
// setFocusedItem(e.data);
|
|
1003
1071
|
onFocusedItemChanged?.(e.data);
|
|
1004
1072
|
onDblClick();
|
|
@@ -1035,7 +1103,7 @@ const StyledItemTemplate = styled.div `
|
|
|
1035
1103
|
cursor: pointer;
|
|
1036
1104
|
`;
|
|
1037
1105
|
const MemoizedStyledItemTemplate = React.memo(StyledItemTemplate);
|
|
1038
|
-
const TMSearchResultSelector = ({ searchResults = [], disableAccordionIfSingleCategory = false, selectedTID, onSelectionChanged }) => {
|
|
1106
|
+
const TMSearchResultSelector = ({ searchResults = [], disableAccordionIfSingleCategory = false, selectedTID, selectedSearchResult, autoSelectFirst = true, onSelectionChanged }) => {
|
|
1039
1107
|
const [selectedResult, setSelectedResult] = useState(undefined);
|
|
1040
1108
|
/** Group results by category */
|
|
1041
1109
|
const groupedResults = useMemo(() => {
|
|
@@ -1059,7 +1127,19 @@ const TMSearchResultSelector = ({ searchResults = [], disableAccordionIfSingleCa
|
|
|
1059
1127
|
sortedCategories.forEach((category) => {
|
|
1060
1128
|
groupedResults[category].sort((a, b) => (a.fromName ?? '').localeCompare(b.fromName ?? ''));
|
|
1061
1129
|
});
|
|
1130
|
+
// Reset internal selection when parent sets selectedSearchResult to undefined
|
|
1131
|
+
// (this happens on mobile when clicking back to return to the list)
|
|
1062
1132
|
useEffect(() => {
|
|
1133
|
+
if (selectedSearchResult === undefined) {
|
|
1134
|
+
setSelectedResult(undefined);
|
|
1135
|
+
}
|
|
1136
|
+
}, [selectedSearchResult]);
|
|
1137
|
+
// Auto-seleziona il primo risultato di ricerca solo se autoSelectFirst è true.
|
|
1138
|
+
// Su mobile con più risultati, autoSelectFirst è false per permettere all'utente
|
|
1139
|
+
// di vedere prima la lista dei tipi documento e scegliere manualmente.
|
|
1140
|
+
useEffect(() => {
|
|
1141
|
+
if (!autoSelectFirst)
|
|
1142
|
+
return;
|
|
1063
1143
|
if (sortedCategories.length > 0) {
|
|
1064
1144
|
const firstCategory = sortedCategories[0];
|
|
1065
1145
|
if (groupedResults[firstCategory].length > 0) {
|
|
@@ -1067,7 +1147,7 @@ const TMSearchResultSelector = ({ searchResults = [], disableAccordionIfSingleCa
|
|
|
1067
1147
|
onSelectionChanged?.(groupedResults[firstCategory][0]);
|
|
1068
1148
|
}
|
|
1069
1149
|
}
|
|
1070
|
-
}, [sortedCategories.length]);
|
|
1150
|
+
}, [sortedCategories.length, autoSelectFirst]);
|
|
1071
1151
|
useEffect(() => {
|
|
1072
1152
|
if (selectedTID !== undefined) {
|
|
1073
1153
|
const found = searchResults.find(r => Number(r.fromTID) === selectedTID);
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { DcmtInfo } from "../../../ts";
|
|
2
|
+
interface TMSearchResultCheckoutInfoFormProps {
|
|
3
|
+
dtdName: string;
|
|
4
|
+
selectedDcmtOrFocused: DcmtInfo;
|
|
5
|
+
onClose: () => void;
|
|
6
|
+
}
|
|
7
|
+
declare const TMSearchResultCheckoutInfoForm: (props: TMSearchResultCheckoutInfoFormProps) => import("react/jsx-runtime").JSX.Element;
|
|
8
|
+
export default TMSearchResultCheckoutInfoForm;
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useEffect, useState } from "react";
|
|
3
|
+
import TMSaveForm from "../../forms/TMSaveForm";
|
|
4
|
+
import { IconBxInfo, IconFileDots, IconFolder, SDKUI_Globals, SDKUI_Localizator } from "../../../helper";
|
|
5
|
+
import { FormModes } from "../../../ts";
|
|
6
|
+
import { ResultTypes, ValidationItem } from "@topconsultnpm/sdk-ts";
|
|
7
|
+
import { SaveFormOptions, useSaveForm } from "../../../hooks/useForm";
|
|
8
|
+
import { getCicoDownloadFileName, updateDcmtCheckoutItem } from "../../../helper/cicoHelper";
|
|
9
|
+
import { TMColors } from "../../../utils/theme";
|
|
10
|
+
import TMLayoutContainer, { TMLayoutItem } from "../../base/TMLayout";
|
|
11
|
+
import TMTooltip from "../../base/TMTooltip";
|
|
12
|
+
import TMTextBox from "../../editors/TMTextBox";
|
|
13
|
+
import ShowAlert from "../../base/TMAlert";
|
|
14
|
+
import { TMExceptionBoxManager } from "../../base/TMPopUp";
|
|
15
|
+
const TMSearchResultCheckoutInfoForm = (props) => {
|
|
16
|
+
const { dtdName, selectedDcmtOrFocused, onClose } = props;
|
|
17
|
+
const [initialDcmtCheckoutFolder, setInitialDcmtCheckoutFolder] = useState("");
|
|
18
|
+
const [initialDcmtCheckoutName, setInitialDcmtCheckoutName] = useState("");
|
|
19
|
+
const validator = async (params) => {
|
|
20
|
+
const validations = [];
|
|
21
|
+
if (!params.checkoutName?.trim()) {
|
|
22
|
+
validations.push(new ValidationItem(ResultTypes.ERROR, SDKUI_Localizator.Name, SDKUI_Localizator.RequiredField));
|
|
23
|
+
}
|
|
24
|
+
return validations;
|
|
25
|
+
};
|
|
26
|
+
const { formData, setFormData, validationItems, exception } = useSaveForm(FormModes.Create, 0, new SaveFormOptions(), validator);
|
|
27
|
+
const isDisabled = !formData || !formData.checkoutName?.trim() || (formData.checkoutFolder === initialDcmtCheckoutFolder && formData.checkoutName === initialDcmtCheckoutName);
|
|
28
|
+
useEffect(() => {
|
|
29
|
+
if (!selectedDcmtOrFocused.TID || !selectedDcmtOrFocused.DID)
|
|
30
|
+
return;
|
|
31
|
+
const dcmtCheckoutInfoCurrentItems = [...SDKUI_Globals.userSettings.dcmtCheckoutInfo];
|
|
32
|
+
const existingItem = dcmtCheckoutInfoCurrentItems.find((item) => item.TID === selectedDcmtOrFocused.TID.toString() && item.DID === selectedDcmtOrFocused.DID.toString());
|
|
33
|
+
const folder = existingItem?.checkoutFolder ?? "";
|
|
34
|
+
const name = existingItem?.checkoutName ?? getCicoDownloadFileName(dtdName ?? SDKUI_Localizator.SearchResult, selectedDcmtOrFocused, true, false);
|
|
35
|
+
// Set form data
|
|
36
|
+
setFormData({
|
|
37
|
+
...formData,
|
|
38
|
+
checkoutFolder: folder,
|
|
39
|
+
checkoutName: name,
|
|
40
|
+
});
|
|
41
|
+
// Save initial values
|
|
42
|
+
setInitialDcmtCheckoutFolder(folder);
|
|
43
|
+
setInitialDcmtCheckoutName(name);
|
|
44
|
+
}, []);
|
|
45
|
+
const calcIsModifiedWrapper = (formData) => {
|
|
46
|
+
if (!formData)
|
|
47
|
+
return false;
|
|
48
|
+
if (formData.checkoutFolder !== initialDcmtCheckoutFolder || formData.checkoutName !== initialDcmtCheckoutName) {
|
|
49
|
+
return true;
|
|
50
|
+
}
|
|
51
|
+
return false;
|
|
52
|
+
};
|
|
53
|
+
const onSaveAsync = () => {
|
|
54
|
+
try {
|
|
55
|
+
if (isDisabled)
|
|
56
|
+
return;
|
|
57
|
+
// Check: formData must exist, selectedDcmtOrFocused.TID and selectedDcmtOrFocused.DID must exist, and at least one of checkoutFolder or checkoutName must be filled
|
|
58
|
+
if (formData && selectedDcmtOrFocused.TID && selectedDcmtOrFocused.DID) {
|
|
59
|
+
// Create a new draft checkout item with TID, DID, and folder/name values
|
|
60
|
+
const newItem = {
|
|
61
|
+
TID: selectedDcmtOrFocused.TID.toString(),
|
|
62
|
+
DID: selectedDcmtOrFocused.DID.toString(),
|
|
63
|
+
checkoutFolder: formData.checkoutFolder ?? "",
|
|
64
|
+
checkoutName: formData.checkoutName ?? ""
|
|
65
|
+
};
|
|
66
|
+
updateDcmtCheckoutItem(newItem, "addOrUpdate");
|
|
67
|
+
onClose();
|
|
68
|
+
ShowAlert({ mode: 'success', title: SDKUI_Localizator.CheckoutInfo, message: SDKUI_Localizator.OperationSuccess, duration: 3000 });
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
catch (error) {
|
|
72
|
+
console.error('Error in onSaveAsync:', error);
|
|
73
|
+
TMExceptionBoxManager.show({ title: SDKUI_Localizator.Error, exception: error });
|
|
74
|
+
}
|
|
75
|
+
};
|
|
76
|
+
return _jsx(TMSaveForm, { title: dtdName + " \u2014 " + SDKUI_Localizator.CheckoutInfo, showTitleFormMode: false, isModal: true, width: "470px", height: "240px", showBackButton: false, showErrorCount: false, showSaveButton: false, showUndoButton: false, showToolbar: false, hasNavigation: false, formMode: FormModes.Create, validationItems: validationItems, exception: exception, isModified: calcIsModifiedWrapper(formData), onClose: onClose, children: _jsx("div", { style: { margin: "0px 10px" }, children: _jsx(TMLayoutContainer, { direction: 'vertical', children: _jsx(TMLayoutContainer, { gap: 5, children: _jsxs(TMLayoutItem, { height: 'max-content', children: [_jsxs("div", { style: { display: "flex", alignItems: "center", gap: "10px", marginTop: "5px", marginBottom: "5px" }, children: [_jsx(TMTooltip, { content: SDKUI_Localizator.CheckInOutSettingsNotice, children: _jsx(IconBxInfo, {}) }), _jsxs("span", { children: [SDKUI_Localizator.DefaultFolder, ":", " ", _jsx("i", { children: SDKUI_Globals.userSettings.defaultCheckInOutFolder !== ""
|
|
77
|
+
? SDKUI_Globals.userSettings.defaultCheckInOutFolder
|
|
78
|
+
: SDKUI_Localizator.UndefinedText })] })] }), _jsx(TMTextBox, { icon: _jsx(IconFolder, {}), label: SDKUI_Localizator.Folder, value: formData?.checkoutFolder ?? '', isModifiedWhen: formData?.checkoutFolder !== initialDcmtCheckoutFolder, onValueChanged: (e) => {
|
|
79
|
+
const newValue = e.target.value;
|
|
80
|
+
setFormData(prev => ({
|
|
81
|
+
...prev,
|
|
82
|
+
checkoutFolder: newValue,
|
|
83
|
+
checkoutName: prev?.checkoutName ?? "",
|
|
84
|
+
}));
|
|
85
|
+
}, validationItems: validationItems?.filter(o => o.PropertyName === SDKUI_Localizator.Folder), autoFocus: true, fromModal: true }), _jsx(TMTextBox, { icon: _jsx(IconFileDots, {}), label: SDKUI_Localizator.Name, value: formData?.checkoutName ?? '', isModifiedWhen: formData?.checkoutName !== initialDcmtCheckoutName, onValueChanged: (e) => {
|
|
86
|
+
const newValue = e.target.value;
|
|
87
|
+
setFormData(prev => ({
|
|
88
|
+
...prev,
|
|
89
|
+
checkoutFolder: prev?.checkoutFolder ?? "",
|
|
90
|
+
checkoutName: newValue,
|
|
91
|
+
}));
|
|
92
|
+
}, validationItems: validationItems?.filter(o => o.PropertyName === SDKUI_Localizator.Name) }), _jsxs("div", { style: {
|
|
93
|
+
width: "100%",
|
|
94
|
+
height: '50px',
|
|
95
|
+
marginTop: "10px",
|
|
96
|
+
display: 'flex',
|
|
97
|
+
justifyContent: 'flex-end',
|
|
98
|
+
alignItems: 'center',
|
|
99
|
+
gap: '10px'
|
|
100
|
+
}, children: [_jsx("button", { onClick: () => onSaveAsync(), disabled: false, style: {
|
|
101
|
+
background: 'none',
|
|
102
|
+
border: 'none',
|
|
103
|
+
color: isDisabled ? '#a0a0a0' : TMColors.primary,
|
|
104
|
+
cursor: isDisabled ? 'not-allowed' : 'pointer',
|
|
105
|
+
padding: '6px 14px',
|
|
106
|
+
borderRadius: '6px',
|
|
107
|
+
transition: 'background-color 0.3s, color 0.3s',
|
|
108
|
+
}, onMouseEnter: e => {
|
|
109
|
+
if (!isDisabled) {
|
|
110
|
+
e.currentTarget.style.backgroundColor = '#e6f0ff';
|
|
111
|
+
e.currentTarget.style.color = '#004a99';
|
|
112
|
+
}
|
|
113
|
+
}, onMouseLeave: e => {
|
|
114
|
+
if (!isDisabled) {
|
|
115
|
+
e.currentTarget.style.backgroundColor = 'transparent';
|
|
116
|
+
e.currentTarget.style.color = TMColors.primary;
|
|
117
|
+
}
|
|
118
|
+
}, children: SDKUI_Localizator.Save }), _jsx("button", { onClick: () => onClose(), style: {
|
|
119
|
+
background: 'none',
|
|
120
|
+
border: 'none',
|
|
121
|
+
color: TMColors.primary,
|
|
122
|
+
cursor: 'pointer',
|
|
123
|
+
padding: '6px 14px',
|
|
124
|
+
borderRadius: '6px',
|
|
125
|
+
transition: 'background-color 0.3s, color 0.3s',
|
|
126
|
+
}, onMouseEnter: e => {
|
|
127
|
+
e.currentTarget.style.backgroundColor = '#e6f0ff';
|
|
128
|
+
e.currentTarget.style.color = '#004a99';
|
|
129
|
+
}, onMouseLeave: e => {
|
|
130
|
+
e.currentTarget.style.backgroundColor = 'transparent';
|
|
131
|
+
e.currentTarget.style.color = TMColors.primary;
|
|
132
|
+
}, children: SDKUI_Localizator.Cancel })] })] }) }) }) }) });
|
|
133
|
+
};
|
|
134
|
+
export default TMSearchResultCheckoutInfoForm;
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
import { DcmtTypeDescriptor, FileDescriptor, FileFormats, LayoutModes, WorkingGroupDescriptor } from '@topconsultnpm/sdk-ts';
|
|
2
|
+
import { DcmtTypeDescriptor, FileDescriptor, FileFormats, LayoutModes, WorkingGroupDescriptor, UserDescriptor } from '@topconsultnpm/sdk-ts';
|
|
3
3
|
import { TMDataGridContextMenuItem } from '../../base/TMDataGrid';
|
|
4
4
|
import { DcmtInfo, DcmtOperationTypes, DownloadModes, DownloadTypes, SearchResultContext } from '../../../ts';
|
|
5
5
|
export declare const getSelectedDcmtsOrFocused: (selectedItems: Array<any>, focusedItem: any, fileFormat?: FileFormats) => DcmtInfo[];
|
|
6
6
|
export declare const getAllFieldSelectedDcmtsOrFocused: (selectedItems: Array<any>, focusedItem: any, fileFormat?: FileFormats) => any[];
|
|
7
7
|
export declare const signatureInformationCallback: (isMobile: boolean, inputDcmts: DcmtInfo[] | undefined) => Promise<void>;
|
|
8
|
-
export declare const getCommandsMenuItems: (isMobile: boolean, dtd: DcmtTypeDescriptor | undefined, selectedItems: Array<any>, focusedItem: any, context: SearchResultContext, showFloatingBar: boolean, workingGroupContext: WorkingGroupDescriptor | undefined, showSearch: boolean, setShowFloatingBar: React.Dispatch<React.SetStateAction<boolean>>, openFormHandler: (layoutMode: LayoutModes) => void, openSharedArchiveHandler: () => Promise<void>, showSharedDcmtsHandler: () => Promise<void>, downloadDcmtsAsync: (inputDcmts: DcmtInfo[] | undefined, downloadType: DownloadTypes, downloadMode: DownloadModes, onFileDownloaded?: (dcmtFile: File | undefined) => void, confirmAttachments?: (list: FileDescriptor[]) => Promise<string[] | undefined>, skipConfirmation?: boolean) => Promise<void>, runOperationAsync: (inputDcmts: DcmtInfo[] | undefined, dcmtOperationType: DcmtOperationTypes, actionAfterOperationAsync?: () => Promise<void>) => Promise<void>, onRefreshSearchAsync: (() => Promise<void>) | undefined, onRefreshDataRowsAsync: (() => Promise<void>) | undefined, onRefreshAfterAddDcmtToFavs: (() => void) | undefined, confirmFormat: () => Promise<FileFormats>, confirmAttachments: (list: FileDescriptor[]) => Promise<string[] | undefined>, openTaskFormHandler: () => void, openDetailDcmtsFormHandler: (value: boolean) => void, openMasterDcmtsFormHandler: (value: boolean) => void, openBatchUpdateFormHandler: (value: boolean) => void, openExportForm: () => void, handleToggleSearch: () => void, handleSignApprove: () => void, openSignSettingsForm: () => void, handleCheckOutOperationCallback: (checkout: boolean) => Promise<void>, openWGsCopyMoveForm?: ((mode: "copyToWgDraft" | "copyToWgArchivedDoc", dcmtTypeDescriptor: DcmtTypeDescriptor, documents: Array<DcmtInfo>) => void), openCommentFormCallback?: ((documents: Array<DcmtInfo>) => void), openEditPdf?: ((documents: Array<DcmtInfo>) => void), openAddDocumentForm?: () => void, passToArchiveCallback?: (outputMids: Array<{
|
|
8
|
+
export declare const getCommandsMenuItems: (isMobile: boolean, dtd: DcmtTypeDescriptor | undefined, allUsers: Array<UserDescriptor>, selectedItems: Array<any>, focusedItem: any, context: SearchResultContext, showFloatingBar: boolean, workingGroupContext: WorkingGroupDescriptor | undefined, showSearch: boolean, setShowFloatingBar: React.Dispatch<React.SetStateAction<boolean>>, openFormHandler: (layoutMode: LayoutModes) => void, openSharedArchiveHandler: () => Promise<void>, showSharedDcmtsHandler: () => Promise<void>, downloadDcmtsAsync: (inputDcmts: DcmtInfo[] | undefined, downloadType: DownloadTypes, downloadMode: DownloadModes, onFileDownloaded?: (dcmtFile: File | undefined) => void, confirmAttachments?: (list: FileDescriptor[]) => Promise<string[] | undefined>, skipConfirmation?: boolean) => Promise<void>, runOperationAsync: (inputDcmts: DcmtInfo[] | undefined, dcmtOperationType: DcmtOperationTypes, actionAfterOperationAsync?: () => Promise<void>) => Promise<void>, onRefreshSearchAsync: (() => Promise<void>) | undefined, onRefreshDataRowsAsync: (() => Promise<void>) | undefined, onRefreshAfterAddDcmtToFavs: (() => void) | undefined, confirmFormat: () => Promise<FileFormats>, confirmAttachments: (list: FileDescriptor[]) => Promise<string[] | undefined>, openTaskFormHandler: () => void, openDetailDcmtsFormHandler: (value: boolean) => void, openMasterDcmtsFormHandler: (value: boolean) => void, openBatchUpdateFormHandler: (value: boolean) => void, openExportForm: () => void, handleToggleSearch: () => void, handleSignApprove: () => void, openSignSettingsForm: () => void, handleCheckOutOperationCallback: (checkout: boolean) => Promise<void>, showCheckoutInformationFormCallback: () => void, viewHistoryCallback: () => void, openWGsCopyMoveForm?: ((mode: "copyToWgDraft" | "copyToWgArchivedDoc", dcmtTypeDescriptor: DcmtTypeDescriptor, documents: Array<DcmtInfo>) => void), openCommentFormCallback?: ((documents: Array<DcmtInfo>) => void), openEditPdf?: ((documents: Array<DcmtInfo>) => void), openAddDocumentForm?: () => void, passToArchiveCallback?: (outputMids: Array<{
|
|
9
9
|
mid: number;
|
|
10
10
|
value: string;
|
|
11
11
|
}>, tid?: number) => void, archiveMasterDocuments?: (tid: number | undefined) => Promise<void>, archiveDetailDocuments?: (tid: number | undefined) => Promise<void>, hasMasterRelation?: boolean, hasDetailRelation?: boolean, canArchiveMasterRelation?: boolean, canArchiveDetailRelation?: boolean, pairManyToManyDocuments?: (isPairing: boolean) => Promise<void>, hasManyToManyRelation?: boolean) => Array<TMDataGridContextMenuItem>;
|