@topconsultnpm/sdkui-react-beta 6.12.110 → 6.12.112
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/features/documents/TMDcmtPreview.js +1 -2
- package/lib/components/features/search/TMSearch.js +1 -1
- package/lib/components/features/search/TMSearchQueryPanel.d.ts +1 -0
- package/lib/components/features/search/TMSearchQueryPanel.js +2 -4
- package/lib/components/features/search/TMSearchResult.js +1 -1
- package/lib/components/grids/TMBlogs.d.ts +2 -2
- package/lib/components/grids/TMBlogs.js +101 -56
- package/lib/components/grids/TMBlogsUtils.d.ts +2 -1
- package/lib/components/grids/TMBlogsUtils.js +14 -11
- package/lib/helper/SDKUI_Localizator.d.ts +2 -0
- package/lib/helper/SDKUI_Localizator.js +20 -0
- package/package.json +1 -1
@@ -23,7 +23,6 @@ const TMDcmtPreview = ({ dcmtData, onClose, canNext, canPrev, onNext, onPrev })
|
|
23
23
|
const [error, setError] = useState('');
|
24
24
|
const { abortController, showWaitPanel, waitPanelTitle, showPrimary, waitPanelTextPrimary, waitPanelValuePrimary, waitPanelMaxValuePrimary, showSecondary, waitPanelTextSecondary, waitPanelValueSecondary, waitPanelMaxValueSecondary, getDcmtFileAsync, clearDcmtsFileCache, removeDcmtsFileCache, isDcmtFileInCache } = useDcmtOperations();
|
25
25
|
const cacheKey = dcmtData ? `${dcmtData.tid}-${dcmtData.did}` : '00';
|
26
|
-
const FILE_SIZE_LIMIT = 500000;
|
27
26
|
useEffect(() => {
|
28
27
|
setDcmtBlob(undefined);
|
29
28
|
setError('');
|
@@ -34,7 +33,7 @@ const TMDcmtPreview = ({ dcmtData, onClose, canNext, canPrev, onNext, onPrev })
|
|
34
33
|
setShowPreview(true);
|
35
34
|
return;
|
36
35
|
}
|
37
|
-
if ((extensionHandler(dcmtData.fileExt) !== FileExtensionHandler.NONE) && ((dcmtData.fileSize ?? 0) <=
|
36
|
+
if ((extensionHandler(dcmtData.fileExt) !== FileExtensionHandler.NONE) && ((dcmtData.fileSize ?? 0) <= SDKUI_Globals.userSettings.searchSettings.previewThreshold)) {
|
38
37
|
loadDocumentWithCache();
|
39
38
|
setShowPreview(true);
|
40
39
|
}
|
@@ -158,7 +158,7 @@ const TMSearch = ({ inputTID, inputSqdID, onRefreshAfterAddDcmtToFavs, onTaskCre
|
|
158
158
|
newMruTIDS.splice(index, 1);
|
159
159
|
SDKUI_Globals.userSettings.searchSettings.mruTIDs = newMruTIDS.filter(tid => tid != undefined && tid != null);
|
160
160
|
setMruTIDs(newMruTIDS);
|
161
|
-
} }) }), _jsx(TMSearchQueryPanel, { fromDTD: fromDTD, SQD: currentSQD, isOpenDistinctValuesPanel: showDistinctValuesPanel, rightSidebarItems: rightSidebarItems, onFocusedMetadataChanged: setFocusedTidMid, onRightSidebarItemClick: rightSidebarItemClickHandler, onCloseDistinctValuesPanel: () => setShowDistinctValuesPanel(false), onSearchCompleted: (searchResult, qd) => {
|
161
|
+
} }) }), _jsx(TMSearchQueryPanel, { fromDTD: fromDTD, SQD: currentSQD, isOpenDistinctValuesPanel: showDistinctValuesPanel, rightSidebarItems: rightSidebarItems, onBack: deviceType !== DeviceType.DESKTOP ? () => { setCurrentTID(0); } : undefined, onFocusedMetadataChanged: setFocusedTidMid, onRightSidebarItemClick: rightSidebarItemClickHandler, onCloseDistinctValuesPanel: () => setShowDistinctValuesPanel(false), onSearchCompleted: (searchResult, qd) => {
|
162
162
|
setSearchResult(searchResult);
|
163
163
|
if (searchResult.length <= 0)
|
164
164
|
return;
|
@@ -7,6 +7,7 @@ interface ITMSearchQueryPanelProps {
|
|
7
7
|
SQD?: SavedQueryDescriptor;
|
8
8
|
isOpenDistinctValuesPanel?: boolean;
|
9
9
|
rightSidebarItems?: ITMRightSidebarItem[];
|
10
|
+
onBack?: () => void;
|
10
11
|
onRightSidebarItemClick?: (item: string) => void;
|
11
12
|
onSqdSaved?: (newSqd: SavedQueryDescriptor) => void;
|
12
13
|
onFocusedMetadataChanged?: (tid_mid: TID_MID | undefined) => void;
|
@@ -21,7 +21,7 @@ import TMDistinctValues from '../../choosers/TMDistinctValues';
|
|
21
21
|
import { TMMetadataChooserForm } from '../../choosers/TMMetadataChooser';
|
22
22
|
import TMQueryEditor from '../../query/TMQueryEditor';
|
23
23
|
import TMSavedQueryForm from './TMSavedQueryForm';
|
24
|
-
const TMSearchQueryPanel = ({ fromDTD, rightSidebarItems, isOpenDistinctValuesPanel = false, SQD, onRightSidebarItemClick, onSearchCompleted, onFocusedMetadataChanged, onCloseDistinctValuesPanel, onSqdSaved }) => {
|
24
|
+
const TMSearchQueryPanel = ({ fromDTD, rightSidebarItems, isOpenDistinctValuesPanel = false, SQD, onRightSidebarItemClick, onSearchCompleted, onFocusedMetadataChanged, onCloseDistinctValuesPanel, onSqdSaved, onBack }) => {
|
25
25
|
const [confirmQueryParams, ConfirmQueryParamsDialog] = useQueryParametersDialog();
|
26
26
|
const [qd, setQd] = useState();
|
27
27
|
const [lastQdParams, setLastQdParams] = useState([]);
|
@@ -99,9 +99,7 @@ const TMSearchQueryPanel = ({ fromDTD, rightSidebarItems, isOpenDistinctValuesPa
|
|
99
99
|
}
|
100
100
|
}
|
101
101
|
};
|
102
|
-
return (_jsxs(TMSplitterLayout, { direction: 'horizontal', showSeparator: deviceType !== DeviceType.MOBILE && isOpenDistinctValuesPanel, separatorSize: 8, separatorColor: 'transparent', separatorActiveColor: 'transparent', min: ['0', '0'], start: deviceType === DeviceType.MOBILE ? ['100%', '0%'] : (isOpenDistinctValuesPanel ? ['55%', '45%'] : ['100%', '0%']), children: [_jsxs(TMToolbarCard, { title: fromDTD?.nameLoc ?? SDKUI_Localizator.Search_Metadata, items: rightSidebarItems, onItemClick: onRightSidebarItemClick,
|
103
|
-
// onBack={deviceType !== DeviceType.DESKTOP ? () => { setCurrentTID(0) } : undefined}
|
104
|
-
toolbar: _jsx(_Fragment, { children: (SQD && !showSqdForm) ?
|
102
|
+
return (_jsxs(TMSplitterLayout, { direction: 'horizontal', showSeparator: deviceType !== DeviceType.MOBILE && isOpenDistinctValuesPanel, separatorSize: 8, separatorColor: 'transparent', separatorActiveColor: 'transparent', min: ['0', '0'], start: deviceType === DeviceType.MOBILE ? ['100%', '0%'] : (isOpenDistinctValuesPanel ? ['55%', '45%'] : ['100%', '0%']), children: [_jsxs(TMToolbarCard, { title: fromDTD?.nameLoc ?? SDKUI_Localizator.Search_Metadata, items: rightSidebarItems, onItemClick: onRightSidebarItemClick, onBack: onBack, toolbar: _jsx(_Fragment, { children: (SQD && !showSqdForm) ?
|
105
103
|
_jsx(TMDropDownMenu, { backgroundColor: 'white', borderRadius: '3px', content: _jsx(TMButton, { btnStyle: 'icon', caption: 'Altro', icon: _jsx(IconMenuVertical, { color: 'white' }), showTooltip: false }), items: [
|
106
104
|
{ icon: _jsx(IconAddCircleOutline, {}), text: SDKUI_Localizator.SavedQueryNew, onClick: () => { openSqdForm(FormModes.Create); } },
|
107
105
|
{ icon: _jsx(IconEdit, {}), text: SDKUI_Localizator.SavedQueryUpdate, disabled: (SQD && SQD.id == 1), onClick: () => { openSqdForm(FormModes.Update); } },
|
@@ -465,7 +465,7 @@ const TMSearchResult = ({ context = SearchResultContext.METADATA_SEARCH, isVisib
|
|
465
465
|
_jsxs(StyledModalContainer, { style: { backgroundColor: 'white' }, children: [_jsx(TMMasterDetailDcmts, { deviceType: deviceType, inputDcmts: getSelectionDcmtInfo(), isForMaster: true, allowNavigation: focusedItem && selectedItems.length <= 0, canNext: canNavigateHandler('next'), canPrev: canNavigateHandler('prev'), onNext: () => onNavigateHandler('next'), onPrev: () => onNavigateHandler('prev'), onBack: () => setIsOpenMaster(false), appendMasterDcmts: handleAddItem }), secondaryMasterDcmts.length > 0 && secondaryMasterDcmts.map((dcmt, index) => {
|
466
466
|
return (_jsx(StyledModalContainer, { style: { backgroundColor: 'white' }, children: _jsx(TMMasterDetailDcmts, { deviceType: deviceType, inputDcmts: [dcmt], isForMaster: true, allowNavigation: false, onBack: () => handleRemoveItem(dcmt.TID, dcmt.DID), appendMasterDcmts: handleAddItem }) }, `${index}-${dcmt.DID}`));
|
467
467
|
})] }), isOpenDcmtForm &&
|
468
|
-
_jsx(StyledModalContainer, { style: { backgroundColor: 'white' }, children: _jsx(TMDcmtForm, { TID: focusedItem?.TID, DID: focusedItem?.DID, layoutMode: dcmtFormLayoutMode, showPreview:
|
468
|
+
_jsx(StyledModalContainer, { style: { backgroundColor: 'white' }, children: _jsx(TMDcmtForm, { TID: focusedItem?.TID, DID: focusedItem?.DID, layoutMode: dcmtFormLayoutMode, showPreview: deviceType !== DeviceType.MOBILE, count: visibleItems.length, itemIndex: visibleItems.findIndex(o => o.rowIndex === focusedItem?.rowIndex) + 1, canNext: canNavigateHandler('next'), canPrev: canNavigateHandler('prev'), onNext: () => onNavigateHandler('next'), onPrev: () => onNavigateHandler('prev'), onClose: () => { setIsOpenDcmtForm(false); }, onSavedAsyncCallback: async (tid, did) => { await refreshFocusedDataRowAsync(tid, did, true); } }) })] }) }));
|
469
469
|
};
|
470
470
|
export default TMSearchResult;
|
471
471
|
const renderDcmtIcon = (cellData) => _jsx(TMDcmtIcon, { fileExtension: cellData.data.FILEEXT, fileCount: cellData.data.FILECOUNT, isLexProt: cellData.data.IsLexProt, isMail: cellData.data.ISMAIL, isShared: cellData.data.ISSHARED, isSigned: cellData.data.ISSIGNED });
|
@@ -50,8 +50,6 @@ interface TMBlogsProps {
|
|
50
50
|
}>;
|
51
51
|
/** Optional callback function to update the list of visualized blog posts */
|
52
52
|
updateVisualizedBlogCallback?: (blogPosts: Array<BlogPost | HomeBlogPost>) => void;
|
53
|
-
/** Optional callback to handle clicks on attachment folder files */
|
54
|
-
handleClickAttachmentFolderFileCallback?: (folderId: number, draftId: number) => void;
|
55
53
|
/** Optional callback to handle navigation to working groups */
|
56
54
|
handleNavigateToWGs?: (selectedWorkingGroupId: number) => void;
|
57
55
|
/** Optional boolean to control the visibility of an ID */
|
@@ -65,6 +63,8 @@ interface TMBlogsProps {
|
|
65
63
|
isShowHideFilterEnabled: boolean;
|
66
64
|
isShowHideIDEnaled: boolean;
|
67
65
|
isCommentEnabled: boolean;
|
66
|
+
isDownloadAttachmentEnabled: boolean;
|
67
|
+
isViewEditMetadata: boolean;
|
68
68
|
isDeleteEnabled: boolean;
|
69
69
|
isRestoreEnabled: boolean;
|
70
70
|
isRefreshEnabled: boolean;
|
@@ -1,6 +1,6 @@
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
2
2
|
import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
|
3
|
-
import { DcmtTypeListCacheService, ResultTypes, SDK_Globals, WorkingGroupEngine } from "@topconsultnpm/sdk-ts-beta";
|
3
|
+
import { DcmtTypeListCacheService, LayoutModes, ResultTypes, SDK_Globals, WorkingGroupEngine } from "@topconsultnpm/sdk-ts-beta";
|
4
4
|
import { ContextMenu, ScrollView } from 'devextreme-react';
|
5
5
|
import { SDKUI_Localizator, IconAttachment, getExceptionMessage, Globalization, IconBoard } from '../../helper';
|
6
6
|
import TMDataGrid from '../base/TMDataGrid';
|
@@ -15,12 +15,16 @@ import { TMResultManager } from '../forms/TMResultDialog';
|
|
15
15
|
import { TMSearchBar } from '../sidebar/TMHeader';
|
16
16
|
import { AttachmentElement, BlogPostContainer, colors, findFileItemByDraftID, highlightText, IconAndHeaderElement, isHeaderFullyHidden, OwnerInitialsBadge, TMBlogsFilterCategoryId } from './TMBlogsUtils';
|
17
17
|
import { useDcmtOperations } from '../../hooks/useDcmtOperations';
|
18
|
-
|
18
|
+
import { DownloadTypes } from '../../ts';
|
19
|
+
import TMDcmtForm from '../features/documents/TMDcmtForm';
|
20
|
+
let localAbortController = new AbortController();
|
19
21
|
const TMBlogs = (props) => {
|
20
|
-
const { id, allData, showExtendedAttachments = true, treeFs, draftLatestInfoMap, archivedDocumentMap, updateVisualizedBlogCallback,
|
22
|
+
const { id, allData, showExtendedAttachments = true, treeFs, draftLatestInfoMap, archivedDocumentMap, updateVisualizedBlogCallback, height, width, scrollToBottom = true, viewMode = 'thumbnails', header, showIconHeader = true, color = colors.PRIMARY_BLUE, handleNavigateToWGs, showId, setShowId, currentWorkingGroup, contextMenuParams = {
|
21
23
|
isShowHideFilterEnabled: true,
|
22
24
|
isShowHideIDEnaled: true,
|
23
25
|
isCommentEnabled: false,
|
26
|
+
isDownloadAttachmentEnabled: false,
|
27
|
+
isViewEditMetadata: false,
|
24
28
|
isDeleteEnabled: false,
|
25
29
|
isRestoreEnabled: false,
|
26
30
|
isRefreshEnabled: false,
|
@@ -28,6 +32,7 @@ const TMBlogs = (props) => {
|
|
28
32
|
}, refreshCallback, newPosts = [], showCommentFormCallback, showTaskFormCallback, showContextMenu = true } = props;
|
29
33
|
// Get the current device type (e.g., mobile, tablet, desktop) using a custom hook.
|
30
34
|
const deviceType = useDeviceType();
|
35
|
+
const { abortController, showWaitPanel, waitPanelTitle, showPrimary, waitPanelTextPrimary, waitPanelValuePrimary, waitPanelMaxValuePrimary, showSecondary, waitPanelTextSecondary, waitPanelValueSecondary, waitPanelMaxValueSecondary, downloadDcmtsAsync } = useDcmtOperations();
|
31
36
|
// This avoids unnecessary re-renders by only recalculating when deviceType changes.
|
32
37
|
let isMobile = useMemo(() => { return deviceType === DeviceType.MOBILE; }, [deviceType]);
|
33
38
|
// State to manage the current rendering mode of the component (either 'thumbnails' or 'details')
|
@@ -45,11 +50,12 @@ const TMBlogs = (props) => {
|
|
45
50
|
// State to manage the focused file
|
46
51
|
const [focusedBlog, setFocusedBlog] = useState(undefined);
|
47
52
|
// State to manage the focused file
|
53
|
+
const [focusedAttachment, setFocusedAttachment] = useState(undefined);
|
54
|
+
// State to manage the focused file
|
48
55
|
const [dcmtTypeDescriptors, setDcmtTypeDescriptors] = useState(new Map());
|
49
|
-
// State to store context menu items for file manager actions
|
50
|
-
const [menuItems, setMenuItems] = useState([]);
|
51
56
|
// State to manage the anchor element for context menu positioning
|
52
57
|
const [anchorEl, setAnchorEl] = useState(null);
|
58
|
+
const contextMenuRef = useRef(null);
|
53
59
|
// State to store the current header value. Initialized with the provided 'header' prop.
|
54
60
|
const [currentHeader, setCurrentHeader] = useState(header);
|
55
61
|
// State to track whether the header is fully hidden based on the current header value
|
@@ -61,17 +67,19 @@ const TMBlogs = (props) => {
|
|
61
67
|
// Ref to the container
|
62
68
|
const containerRef = useRef(null);
|
63
69
|
// State variable to control the visibility of the wait panel.
|
64
|
-
const [
|
70
|
+
const [localShowWaitPanel, setLocalShowWaitPanel] = useState(false);
|
65
71
|
// State variable to store the title of the wait panel.
|
66
|
-
const [
|
72
|
+
const [localWaitPanelTitle, setLocalWaitPanelTitle] = useState('');
|
67
73
|
// State variable to control the visibility of the primary section of the wait panel.
|
68
|
-
const [
|
74
|
+
const [localShowPrimary, setLocalShowPrimary] = useState(false);
|
69
75
|
// State variable to store the primary text of the wait panel.
|
70
|
-
const [
|
76
|
+
const [localWaitPanelTextPrimary, setLocalWaitPanelTextPrimary] = useState('');
|
71
77
|
// State variable to track the current value of the primary progress indicator in the wait panel.
|
72
|
-
const [
|
78
|
+
const [localWaitPanelValuePrimary, setLocalWaitPanelValuePrimary] = useState(0);
|
73
79
|
// State variable to define the maximum value for the primary progress indicator in the wait panel.
|
74
|
-
const [
|
80
|
+
const [localWaitPanelMaxValuePrimary, setLocalWaitPanelMaxValuePrimary] = useState(0);
|
81
|
+
// State to manage show selected file
|
82
|
+
const [showDcmtForm, setShowDcmtForm] = useState(false);
|
75
83
|
// Data source for the number of posts to display in the UI
|
76
84
|
const postsToShowDataSource = [
|
77
85
|
{ value: 30, display: SDKUI_Localizator.Latest + ' 30' },
|
@@ -110,59 +118,58 @@ const TMBlogs = (props) => {
|
|
110
118
|
return;
|
111
119
|
if (focusedBlog === undefined || focusedBlog.id === undefined || currentWorkingGroup === undefined || currentWorkingGroup.id === undefined)
|
112
120
|
return Promise.resolve();
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
121
|
+
setLocalWaitPanelTitle(del ? SDKUI_Localizator.Delete : SDKUI_Localizator.Restore);
|
122
|
+
setLocalShowWaitPanel(true);
|
123
|
+
setLocalShowPrimary(true);
|
124
|
+
localAbortController = new AbortController();
|
117
125
|
let result = [];
|
118
126
|
let i = 0;
|
119
|
-
|
127
|
+
setLocalWaitPanelMaxValuePrimary(1);
|
120
128
|
if (abortController.signal.aborted) {
|
121
129
|
result.push({ rowIndex: i, id1: focusedBlog.id, id2: focusedBlog.id, resultType: ResultTypes.WARNING, description: `Operazione interrotta. Elaborate ${i}` });
|
122
130
|
}
|
123
131
|
else {
|
124
|
-
|
132
|
+
setLocalWaitPanelTextPrimary(del ? SDKUI_Localizator.Delete : SDKUI_Localizator.Restore);
|
125
133
|
const workingGroupEngine = new WorkingGroupEngine(SDK_Globals.tmSession);
|
126
134
|
await workingGroupEngine.BlogPostDeleteOrUndeleteAsync(currentWorkingGroup.id, focusedBlog.id, del)
|
127
135
|
.then(() => {
|
128
136
|
result.push({ rowIndex: 1, id1: currentWorkingGroup.id, id2: 0, description: SDKUI_Localizator.UpdateCompletedSuccessfully, resultType: ResultTypes.SUCCESS });
|
129
137
|
TMResultManager.show(result, del ? SDKUI_Localizator.Delete : SDKUI_Localizator.Restore, "ID", undefined);
|
130
|
-
|
138
|
+
handleFocusedBlog(undefined);
|
131
139
|
refresh();
|
132
140
|
})
|
133
141
|
.catch((err) => {
|
134
142
|
result.push({ rowIndex: 1, id1: currentWorkingGroup.id, id2: currentWorkingGroup.id, resultType: ResultTypes.ERROR, description: getExceptionMessage(err) });
|
135
143
|
});
|
136
144
|
}
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
145
|
+
setLocalWaitPanelTextPrimary('');
|
146
|
+
setLocalWaitPanelMaxValuePrimary(0);
|
147
|
+
setLocalWaitPanelValuePrimary(0);
|
148
|
+
setLocalShowWaitPanel(false);
|
141
149
|
TMResultManager.show(result, del ? SDKUI_Localizator.Delete : SDKUI_Localizator.Restore, "ID", undefined);
|
142
150
|
}
|
143
151
|
});
|
144
152
|
};
|
153
|
+
const handleFocusedAttachment = (attachment) => {
|
154
|
+
setFocusedAttachment(attachment);
|
155
|
+
};
|
156
|
+
const handleFocusedBlog = (blog) => {
|
157
|
+
setFocusedBlog(blog);
|
158
|
+
setFocusedAttachment(undefined);
|
159
|
+
};
|
145
160
|
const refresh = () => {
|
146
161
|
if (refreshCallback)
|
147
162
|
refreshCallback();
|
148
163
|
};
|
164
|
+
const downloadAttachment = () => {
|
165
|
+
if (focusedAttachment === undefined)
|
166
|
+
return;
|
167
|
+
if (downloadDcmtsAsync)
|
168
|
+
downloadDcmtsAsync([{ TID: focusedAttachment.TID, DID: focusedAttachment.DID, fileName: focusedAttachment.fileName }], DownloadTypes.Dcmt);
|
169
|
+
};
|
149
170
|
// ContexMenuItems array contains a list of context menu items for a blog
|
150
171
|
const contextMenuItems = useMemo(() => {
|
151
172
|
let menuItemsElements = [
|
152
|
-
{
|
153
|
-
icon: isHeaderHidden ? 'eyeopen' : 'eyeclose',
|
154
|
-
text: isHeaderHidden ? SDKUI_Localizator.ShowFilters : SDKUI_Localizator.HideFilters,
|
155
|
-
visible: contextMenuParams.isShowHideFilterEnabled,
|
156
|
-
onClick: toggleHeaderClick,
|
157
|
-
disabled: false,
|
158
|
-
},
|
159
|
-
{
|
160
|
-
icon: localShowId ? 'eyeclose' : 'eyeopen',
|
161
|
-
onClick: () => setLocalShowId(prevShowId => !prevShowId),
|
162
|
-
text: localShowId ? SDKUI_Localizator.ID_Hide : SDKUI_Localizator.ID_Show,
|
163
|
-
visible: contextMenuParams.isShowHideIDEnaled,
|
164
|
-
disabled: false,
|
165
|
-
},
|
166
173
|
{
|
167
174
|
icon: "chat",
|
168
175
|
text: SDKUI_Localizator.Comment,
|
@@ -170,7 +177,20 @@ const TMBlogs = (props) => {
|
|
170
177
|
disabled: false,
|
171
178
|
onClick: () => { if (showCommentFormCallback)
|
172
179
|
showCommentFormCallback(); },
|
173
|
-
|
180
|
+
},
|
181
|
+
{
|
182
|
+
icon: "download",
|
183
|
+
text: 'Download',
|
184
|
+
visible: contextMenuParams.isDownloadAttachmentEnabled && focusedAttachment !== undefined,
|
185
|
+
disabled: focusedAttachment === undefined,
|
186
|
+
onClick: downloadAttachment,
|
187
|
+
},
|
188
|
+
{
|
189
|
+
icon: showDcmtForm ? 'eyeclose' : 'eyeopen',
|
190
|
+
text: showDcmtForm ? SDKUI_Localizator.HideMetadata : SDKUI_Localizator.ViewEditMetadata,
|
191
|
+
visible: contextMenuParams.isViewEditMetadata && focusedAttachment !== undefined,
|
192
|
+
disabled: focusedAttachment === undefined,
|
193
|
+
onClick: () => setShowDcmtForm(true),
|
174
194
|
},
|
175
195
|
{
|
176
196
|
icon: "trash",
|
@@ -178,6 +198,7 @@ const TMBlogs = (props) => {
|
|
178
198
|
visible: contextMenuParams.isDeleteEnabled,
|
179
199
|
onClick: () => deleteOrUndeleteCommentCallback(true),
|
180
200
|
disabled: focusedBlog?.ownerID !== SDK_Globals.tmSession?.SessionDescr?.userID || focusedBlog === undefined || (focusedBlog && (focusedBlog.isDel !== undefined && focusedBlog.isDel !== 0)),
|
201
|
+
beginGroup: true
|
181
202
|
},
|
182
203
|
{
|
183
204
|
icon: "undo",
|
@@ -195,6 +216,21 @@ const TMBlogs = (props) => {
|
|
195
216
|
disabled: false,
|
196
217
|
beginGroup: true
|
197
218
|
},
|
219
|
+
{
|
220
|
+
icon: isHeaderHidden ? 'eyeopen' : 'eyeclose',
|
221
|
+
text: isHeaderHidden ? SDKUI_Localizator.ShowFilters : SDKUI_Localizator.HideFilters,
|
222
|
+
visible: contextMenuParams.isShowHideFilterEnabled,
|
223
|
+
onClick: toggleHeaderClick,
|
224
|
+
disabled: false,
|
225
|
+
beginGroup: true
|
226
|
+
},
|
227
|
+
{
|
228
|
+
icon: localShowId ? 'eyeclose' : 'eyeopen',
|
229
|
+
onClick: () => setLocalShowId(prevShowId => !prevShowId),
|
230
|
+
text: localShowId ? SDKUI_Localizator.ID_Hide : SDKUI_Localizator.ID_Show,
|
231
|
+
visible: contextMenuParams.isShowHideIDEnaled,
|
232
|
+
disabled: false,
|
233
|
+
},
|
198
234
|
{
|
199
235
|
icon: "refresh",
|
200
236
|
text: SDKUI_Localizator.Refresh,
|
@@ -205,7 +241,7 @@ const TMBlogs = (props) => {
|
|
205
241
|
},
|
206
242
|
];
|
207
243
|
return menuItemsElements;
|
208
|
-
}, [isHeaderHidden, localShowId, setLocalShowId, focusedBlog]);
|
244
|
+
}, [isHeaderHidden, localShowId, setLocalShowId, focusedBlog, focusedAttachment, showDcmtForm]);
|
209
245
|
useEffect(() => {
|
210
246
|
if (currentWorkingGroup === undefined)
|
211
247
|
setNewPostCount(0);
|
@@ -317,7 +353,7 @@ const TMBlogs = (props) => {
|
|
317
353
|
// Update the state with the filtered and limited list of blogs
|
318
354
|
setBlogPosts(filteredBlogs);
|
319
355
|
if (focusedBlog && focusedBlog.id && filteredBlogs.find(filteredBlog => focusedBlog.id === filteredBlog.id) === undefined)
|
320
|
-
|
356
|
+
handleFocusedBlog(undefined);
|
321
357
|
}, [allData, appliedGlobalFilters, searchText, postsToShow, currentHeader]);
|
322
358
|
useEffect(() => {
|
323
359
|
if (viewMode)
|
@@ -334,7 +370,6 @@ const TMBlogs = (props) => {
|
|
334
370
|
}, [focusedBlog]);
|
335
371
|
const ThumbnailView = () => {
|
336
372
|
const scrollRef = useRef(null);
|
337
|
-
const { abortController, showWaitPanel, waitPanelTitle, showPrimary, waitPanelTextPrimary, waitPanelValuePrimary, waitPanelMaxValuePrimary, showSecondary, waitPanelTextSecondary, waitPanelValueSecondary, waitPanelMaxValueSecondary, downloadDcmtsAsync } = useDcmtOperations();
|
338
373
|
useEffect(() => {
|
339
374
|
if (focusedBlog && focusedBlog.id) { // containerRef.current
|
340
375
|
const focusedElement = document.getElementById(focusedBlog.id.toString());
|
@@ -350,7 +385,7 @@ const TMBlogs = (props) => {
|
|
350
385
|
}, [blogPosts, viewMode, focusedBlog]);
|
351
386
|
const attachmentDetails = (attachments, isSelected) => {
|
352
387
|
return _jsx("div", { style: { marginTop: "10px", overflow: "hidden" }, children: attachments.map(attachment => {
|
353
|
-
return AttachmentElement(attachment, treeFs, draftLatestInfoMap, archivedDocumentMap, dcmtTypeDescriptors, isSelected, searchText, color,
|
388
|
+
return AttachmentElement(attachment, treeFs, draftLatestInfoMap, archivedDocumentMap, dcmtTypeDescriptors, isSelected, searchText, color, downloadDcmtsAsync, handleFocusedAttachment, setAnchorEl, contextMenuRef);
|
354
389
|
}) });
|
355
390
|
};
|
356
391
|
return _jsx(TMLayoutWaitingContainer, { direction: 'vertical', showWaitPanel: showWaitPanel, showWaitPanelPrimary: showPrimary, showWaitPanelSecondary: showSecondary, waitPanelTitle: waitPanelTitle, waitPanelTextPrimary: waitPanelTextPrimary, waitPanelValuePrimary: waitPanelValuePrimary, waitPanelMaxValuePrimary: waitPanelMaxValuePrimary, waitPanelTextSecondary: waitPanelTextSecondary, waitPanelValueSecondary: waitPanelValueSecondary, waitPanelMaxValueSecondary: waitPanelMaxValueSecondary, isCancelable: true, abortController: abortController, children: _jsx("div", { ref: scrollRef, style: { backgroundColor: "rgba(191, 191, 191, 0.15)", height: "100%", padding: "5px", overflowY: "auto", width: "100%" }, children: blogPosts.length === 0 ?
|
@@ -383,14 +418,14 @@ const TMBlogs = (props) => {
|
|
383
418
|
handleNavigateToWGs(id);
|
384
419
|
};
|
385
420
|
const onClickCallback = () => {
|
386
|
-
|
421
|
+
handleFocusedBlog(blogPost);
|
387
422
|
};
|
388
423
|
const handleKeyDown = (event) => {
|
389
424
|
event.preventDefault();
|
390
425
|
if (event.key === 'ArrowDown' && focusedBlog) {
|
391
426
|
const currentIndex = blogPosts.findIndex(post => post.id === focusedBlog.id);
|
392
427
|
if (blogPosts[currentIndex + 1]) {
|
393
|
-
|
428
|
+
handleFocusedBlog(blogPosts[currentIndex + 1]);
|
394
429
|
}
|
395
430
|
;
|
396
431
|
}
|
@@ -400,12 +435,17 @@ const TMBlogs = (props) => {
|
|
400
435
|
if (event.key === 'ArrowUp' && focusedBlog) {
|
401
436
|
const currentIndex = blogPosts.findIndex(post => post.id === focusedBlog.id);
|
402
437
|
if (blogPosts[currentIndex - 1]) {
|
403
|
-
|
438
|
+
handleFocusedBlog(blogPosts[currentIndex - 1]);
|
404
439
|
}
|
405
440
|
;
|
406
441
|
}
|
407
442
|
};
|
408
|
-
|
443
|
+
const onContextMenu = (e) => {
|
444
|
+
e.preventDefault();
|
445
|
+
setAnchorEl(e.currentTarget);
|
446
|
+
handleFocusedAttachment(undefined);
|
447
|
+
};
|
448
|
+
return (_jsxs(BlogPostContainer, { id: id + "-" + blogPost.id.toString(), ref: containerRef, "$color": textColor, "$textDecoration": blogPost.isDel ? 'line-through' : 'none', "$backgroundColor": bgColor, "$isNew": Boolean(blogPost.newPosts ?? 0) || isNew, "$canNavigate": canNavigate(), onClick: onClickCallback, onDoubleClick: headerClickCallback, tabIndex: 0, onKeyDown: handleKeyDown, onKeyUp: handleKeyUp, onContextMenu: onContextMenu, children: [_jsxs("div", { style: { display: "flex", alignItems: "center" }, children: [OwnerInitialsBadge(blogPost), _jsx("div", { style: { flex: "1 1 auto", minWidth: "0" }, children: _jsxs("div", { style: { display: 'flex', justifyContent: 'space-between', alignItems: 'center', flexWrap: "wrap", overflow: "hidden" }, children: [_jsxs("div", { children: [_jsxs("div", { style: { fontWeight: "bold", fontSize: "13px", display: "flex", alignItems: "center" }, children: [(showIconHeader && (blogPost.header && blogPost.classID))
|
409
449
|
? (IconAndHeaderElement(blogPost, iconColor, isSelected, headerClickCallback, searchText)) :
|
410
450
|
_jsx("span", { style: { marginLeft: showIconHeader ? "5px" : "0" }, children: highlightText(blogPost.ownerName ?? '', searchText, isSelected) }), (blogPost?.newPosts ?? 0) > 0 && (_jsx("div", { style: {
|
411
451
|
marginLeft: "5px",
|
@@ -481,9 +521,9 @@ const TMBlogs = (props) => {
|
|
481
521
|
const data = cellData.data;
|
482
522
|
const { attachments } = data;
|
483
523
|
return _jsx("div", { style: { marginTop: "10px", overflow: "hidden" }, children: (attachments && attachments.length > 0) ? attachments.map(attachment => {
|
484
|
-
return AttachmentElement(attachment, treeFs, draftLatestInfoMap, archivedDocumentMap, dcmtTypeDescriptors, false, searchText, color,
|
524
|
+
return AttachmentElement(attachment, treeFs, draftLatestInfoMap, archivedDocumentMap, dcmtTypeDescriptors, false, searchText, color, downloadDcmtsAsync, handleFocusedAttachment, setAnchorEl, contextMenuRef);
|
485
525
|
}) : '' });
|
486
|
-
}, [treeFs, draftLatestInfoMap, dcmtTypeDescriptors, color,
|
526
|
+
}, [treeFs, draftLatestInfoMap, dcmtTypeDescriptors, color, searchText]);
|
487
527
|
const cellDatetimeRender = useCallback((cellData) => {
|
488
528
|
const data = cellData.data;
|
489
529
|
const { value } = cellData;
|
@@ -494,7 +534,7 @@ const TMBlogs = (props) => {
|
|
494
534
|
// Handles focus change in the data grid
|
495
535
|
const onFocusedRowChanged = useCallback((e) => {
|
496
536
|
if (e.row)
|
497
|
-
|
537
|
+
handleFocusedBlog(e.row.data);
|
498
538
|
}, []);
|
499
539
|
const onContextMenuPreparing = (e) => {
|
500
540
|
if (e === undefined)
|
@@ -532,18 +572,23 @@ const TMBlogs = (props) => {
|
|
532
572
|
setPostsToShow(Number(value));
|
533
573
|
}
|
534
574
|
};
|
575
|
+
// Handle closing the context menu
|
576
|
+
const closeContextMenu = useCallback(() => {
|
577
|
+
setAnchorEl(null);
|
578
|
+
}, []);
|
535
579
|
const onContextMenu = (event) => {
|
536
580
|
if (event === undefined)
|
537
581
|
return;
|
538
|
-
|
539
|
-
|
540
|
-
|
582
|
+
if (blogPosts.length === 0) {
|
583
|
+
event.preventDefault();
|
584
|
+
setAnchorEl(event.currentTarget);
|
585
|
+
}
|
541
586
|
};
|
542
|
-
|
543
|
-
|
544
|
-
|
587
|
+
const onCloseDcmtForm = useCallback(() => {
|
588
|
+
setShowDcmtForm(false);
|
589
|
+
handleFocusedAttachment(undefined);
|
545
590
|
}, []);
|
546
|
-
return _jsx("div", { style: { height: height ?? '100%', width: width ?? '100%' }, children: _jsxs(TMLayoutWaitingContainer, { direction: 'vertical', showWaitPanel:
|
591
|
+
return _jsx("div", { style: { height: height ?? '100%', width: width ?? '100%' }, children: _jsxs(TMLayoutWaitingContainer, { direction: 'vertical', showWaitPanel: localShowWaitPanel, showWaitPanelPrimary: localShowPrimary, waitPanelTitle: localWaitPanelTitle, waitPanelTextPrimary: localWaitPanelTextPrimary, waitPanelValuePrimary: localWaitPanelValuePrimary, waitPanelMaxValuePrimary: localWaitPanelMaxValuePrimary, isCancelable: true, abortController: localAbortController, children: [(currentHeader && !isHeaderHidden) && (_jsx("div", { style: { display: 'block', width: '100%', overflowX: 'auto', overflowY: 'hidden', whiteSpace: 'nowrap' }, onContextMenu: e => e.preventDefault(), children: _jsx(ScrollView, { width: "100%", height: "auto", direction: "horizontal", useNative: true, children: _jsxs("div", { style: {
|
547
592
|
display: 'flex',
|
548
593
|
flexDirection: 'row',
|
549
594
|
gap: '8px',
|
@@ -561,6 +606,6 @@ const TMBlogs = (props) => {
|
|
561
606
|
minWidth: isMobile ? '90px' : '120px',
|
562
607
|
width: isMobile ? '90px' : '150px',
|
563
608
|
height: '29px',
|
564
|
-
} }))] }) }) })), _jsxs("div", { style: { height: `calc(100% - ${currentHeader && !isHeaderHidden ? '50px' : '0px'})`, width: "100%", overflow: 'auto', display: 'block' }, children: [_jsx("div", { style: { display: renderMode === 'thumbnails' ? 'block' : 'none', width: "100%", height: "100%" }, onContextMenu: onContextMenu, children: ThumbnailView() }), _jsx("div", { style: { display: renderMode === 'details' ? 'block' : 'none', width: "100%", height: "100%" }, children: DataGridView() }), anchorEl && _jsx(ContextMenu, { dataSource:
|
609
|
+
} }))] }) }) })), _jsxs("div", { style: { height: `calc(100% - ${currentHeader && !isHeaderHidden ? '50px' : '0px'})`, width: "100%", overflow: 'auto', display: 'block' }, children: [_jsx("div", { style: { display: renderMode === 'thumbnails' ? 'block' : 'none', width: "100%", height: "100%" }, onContextMenu: onContextMenu, children: ThumbnailView() }), _jsx("div", { style: { display: renderMode === 'details' ? 'block' : 'none', width: "100%", height: "100%" }, children: DataGridView() }), anchorEl && _jsx(ContextMenu, { ref: contextMenuRef, dataSource: contextMenuItems, target: anchorEl, onHiding: closeContextMenu })] }), (showDcmtForm && focusedAttachment && focusedAttachment.TID && focusedAttachment.DID) && _jsx(TMDcmtForm, { TID: Number(focusedAttachment.TID), DID: Number(focusedAttachment.DID), layoutMode: LayoutModes.Update, onClose: onCloseDcmtForm, isClosable: true, titleModal: SDKUI_Localizator.Attachment + ": " + focusedAttachment.fileName, isModal: true, showPreview: !isMobile, showBoard: !isMobile, widthModal: "95%", heightModal: "95%" })] }) });
|
565
610
|
};
|
566
611
|
export default TMBlogs;
|
@@ -2,6 +2,7 @@ import React from 'react';
|
|
2
2
|
import { BlogPost, BlogPostAttachment, DcmtTypeDescriptor, HomeBlogPost } from "@topconsultnpm/sdk-ts-beta";
|
3
3
|
import { FileItem } from '../base/TMFileManager';
|
4
4
|
import { DcmtInfo, DownloadTypes } from '../../ts';
|
5
|
+
import { ContextMenuRef } from 'devextreme-react/cjs/context-menu';
|
5
6
|
export declare const DRAFT_TYPE_TID = 6;
|
6
7
|
export declare const colors: {
|
7
8
|
DARK_BLUE: string;
|
@@ -72,7 +73,7 @@ export declare const AttachmentElement: (attachment: BlogPostAttachment, treeFs:
|
|
72
73
|
did: number;
|
73
74
|
fileExt: string;
|
74
75
|
fileSize: string;
|
75
|
-
}> | undefined, dcmtTypeDescriptors: Map<number, DcmtTypeDescriptor>, isSelected: boolean, searchText: string, color: string,
|
76
|
+
}> | undefined, dcmtTypeDescriptors: Map<number, DcmtTypeDescriptor>, isSelected: boolean, searchText: string, color: string, downloadDcmtsAsync: (inputDcmts: Array<DcmtInfo> | undefined, downloadType: DownloadTypes) => Promise<void>, handleFocusedAttachment: (attachment: DcmtInfo | undefined) => void, setAnchorEl: (value: React.SetStateAction<HTMLElement | null>) => void, contextMenuRef: React.MutableRefObject<ContextMenuRef<any> | null>) => import("react/jsx-runtime").JSX.Element;
|
76
77
|
export declare const OwnerInitialsBadge: (blogPost: BlogPost | HomeBlogPost) => import("react/jsx-runtime").JSX.Element;
|
77
78
|
export declare const IconAndHeaderElement: (blogPost: BlogPost | HomeBlogPost, iconColor: string, isSelected: boolean, headerClickCallback: () => void, searchText: string) => import("react/jsx-runtime").JSX.Element;
|
78
79
|
export declare const findFileItemByDraftID: (tree: FileItem | undefined, draftID: number | undefined) => FileItem | null;
|
@@ -130,17 +130,8 @@ export const getAttachmentInfo = (attachment, treeFs, draftLatestInfoMap, archiv
|
|
130
130
|
}
|
131
131
|
return { name, nameElement, folderId, fileExt, draftExist, archivedDocumentsExist };
|
132
132
|
};
|
133
|
-
export const AttachmentElement = (attachment, treeFs, draftLatestInfoMap, archivedDocumentMap, dcmtTypeDescriptors, isSelected, searchText, color,
|
133
|
+
export const AttachmentElement = (attachment, treeFs, draftLatestInfoMap, archivedDocumentMap, dcmtTypeDescriptors, isSelected, searchText, color, downloadDcmtsAsync, handleFocusedAttachment, setAnchorEl, contextMenuRef) => {
|
134
134
|
const { name, nameElement, folderId, fileExt, draftExist } = getAttachmentInfo(attachment, treeFs, draftLatestInfoMap, archivedDocumentMap, dcmtTypeDescriptors, isSelected, searchText, color);
|
135
|
-
const onClickCallback = (e) => {
|
136
|
-
e.preventDefault();
|
137
|
-
e.stopPropagation();
|
138
|
-
if (attachment.tid === DRAFT_TYPE_TID && treeFs && draftExist) {
|
139
|
-
const folderIdAttachment = folderId === 0 ? -1 : folderId;
|
140
|
-
if (handleClickAttachmentFolderFileCallback && attachment.draftID)
|
141
|
-
handleClickAttachmentFolderFileCallback(folderIdAttachment, attachment.draftID);
|
142
|
-
}
|
143
|
-
};
|
144
135
|
const onDoubleClick = (e) => {
|
145
136
|
e.preventDefault();
|
146
137
|
e.stopPropagation();
|
@@ -149,7 +140,19 @@ export const AttachmentElement = (attachment, treeFs, draftLatestInfoMap, archiv
|
|
149
140
|
if (downloadDcmtsAsync)
|
150
141
|
downloadDcmtsAsync([{ TID: attachment.tid, DID: attachment.did, fileName }], DownloadTypes.Dcmt);
|
151
142
|
};
|
152
|
-
|
143
|
+
const onContextMenu = (e) => {
|
144
|
+
const archiveID = SDK_Globals.tmSession?.SessionDescr?.archiveID;
|
145
|
+
const fileName = `${removeFileExtension(name)}_${archiveID}_${attachment.tid}_${attachment.did}.${fileExt}`;
|
146
|
+
handleFocusedAttachment({ TID: attachment.tid, DID: attachment.did, fileName });
|
147
|
+
setAnchorEl(e.currentTarget);
|
148
|
+
e.preventDefault();
|
149
|
+
e.stopPropagation();
|
150
|
+
// Slight delay to ensure state update before showing context menu
|
151
|
+
setTimeout(() => {
|
152
|
+
contextMenuRef.current?.instance()?.show();
|
153
|
+
}, 0);
|
154
|
+
};
|
155
|
+
return _jsx("div", { onDoubleClick: onDoubleClick, onContextMenu: onContextMenu, style: {
|
153
156
|
display: 'inline-flex',
|
154
157
|
padding: '8px 12px',
|
155
158
|
margin: '4px',
|
@@ -170,6 +170,7 @@ export declare class SDKUI_Localizator {
|
|
170
170
|
static get Hide_CompleteName(): "Vollständigen Namen ausblenden" | "Hide full name" | "Ocultar nombre completo" | "Masquer le nom complet" | "Ocultar nome completo" | "Nascondi nome completo";
|
171
171
|
static get HideFilters(): string;
|
172
172
|
static get HideLeftPanel(): "Linkes Panel ausblenden" | "Hide left panel" | "Ocultar panel izquierdo" | "Masquer le panneau de gauche" | "Ocultar painel esquerdo" | "Nascondi il pannello sinistro";
|
173
|
+
static get HideMetadata(): string;
|
173
174
|
static get HideSearch(): "Suche ausblenden" | "Hide search" | "Ocultar búsqueda" | "Masquer la recherche" | "Ocultar pesquisa" | "Nascondi ricerca";
|
174
175
|
static get ID_Hide(): "Ausblenden ID" | "Hide ID" | "Ocultar ID" | "Masquer ID" | "Nascondi ID";
|
175
176
|
static get ID_Show(): "ID anzeigen" | "Show ID" | "Mostrar ID" | "Afficher ID" | "Visualizza ID";
|
@@ -400,6 +401,7 @@ export declare class SDKUI_Localizator {
|
|
400
401
|
static get VariablesSystem(): "Systemvariablen" | "System variables" | "Variables del sistema" | "Variables de système" | "Variáveis do sistema" | "Variabili di sistema";
|
401
402
|
static get Version(): string;
|
402
403
|
static get View_Metadato(): "Anzeige (Methadaten)" | "Visualization (metadata)" | "Visualización (metadato)" | "Visualisation (métadonnée)" | "Display (metadados)" | "Visualizzazione (metadato)";
|
404
|
+
static get ViewEditMetadata(): string;
|
403
405
|
static get ViewWithCheckOption(): "Kontrolle über Archivierung und Bearbeitung" | "Check on archive and update" | "Control en almacenamiento y modificación" | "Contrôle de l'archivage et la modifie" | "Controle de arquivamento e edição" | "Controllo su archiviazione e modifica";
|
404
406
|
static get Visible(): "Sichtbar" | "Visible" | "Visibles" | "Visibiles" | "Visíveis" | "Visibili";
|
405
407
|
static get VisibleItems(): "sichtbare Elemente" | "Visible items" | "elementos visibles" | "éléments visibles" | "itens visíveis" | "Elementi visibili";
|
@@ -1660,6 +1660,16 @@ export class SDKUI_Localizator {
|
|
1660
1660
|
default: return "Nascondi il pannello sinistro";
|
1661
1661
|
}
|
1662
1662
|
}
|
1663
|
+
static get HideMetadata() {
|
1664
|
+
switch (this._cultureID) {
|
1665
|
+
case CultureIDs.De_DE: return "Metadaten ausblenden";
|
1666
|
+
case CultureIDs.En_US: return "Hide Metadata";
|
1667
|
+
case CultureIDs.Es_ES: return "Ocultar metadatos";
|
1668
|
+
case CultureIDs.Fr_FR: return "Masquer les métadonnées";
|
1669
|
+
case CultureIDs.Pt_PT: return "Ocultar metadados";
|
1670
|
+
default: return "Nascondi metadati";
|
1671
|
+
}
|
1672
|
+
}
|
1663
1673
|
static get HideSearch() {
|
1664
1674
|
switch (this._cultureID) {
|
1665
1675
|
case CultureIDs.De_DE: return "Suche ausblenden";
|
@@ -3958,6 +3968,16 @@ export class SDKUI_Localizator {
|
|
3958
3968
|
default: return "Visualizzazione (metadato)";
|
3959
3969
|
}
|
3960
3970
|
}
|
3971
|
+
static get ViewEditMetadata() {
|
3972
|
+
switch (this._cultureID) {
|
3973
|
+
case CultureIDs.De_DE: return "Metadaten anzeigen/bearbeiten";
|
3974
|
+
case CultureIDs.En_US: return "View/Edit Metadata";
|
3975
|
+
case CultureIDs.Es_ES: return "Ver/Editar metadatos";
|
3976
|
+
case CultureIDs.Fr_FR: return "Afficher/Modifier les métadonnées";
|
3977
|
+
case CultureIDs.Pt_PT: return "Visualizar/Editar metadados";
|
3978
|
+
default: return "Visualizza/modifica metadati";
|
3979
|
+
}
|
3980
|
+
}
|
3961
3981
|
static get ViewWithCheckOption() {
|
3962
3982
|
switch (this._cultureID) {
|
3963
3983
|
case CultureIDs.De_DE: return "Kontrolle über Archivierung und Bearbeitung";
|