@topconsultnpm/sdkui-react 6.22.0-dev1.3 → 6.22.0-dev1.30
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/NewComponents/FloatingMenuBar/styles.d.ts +4 -4
- package/lib/components/base/Styled.d.ts +1 -1
- package/lib/components/base/TMCounterBar.d.ts +2 -2
- package/lib/components/base/TMCounterContainer.d.ts +2 -1
- package/lib/components/base/TMCustomButton.d.ts +1 -1
- package/lib/components/base/TMDataGridExportForm.d.ts +2 -1
- package/lib/components/base/TMFileManager.d.ts +2 -1
- package/lib/components/base/TMFileManagerDataGridView.d.ts +2 -1
- package/lib/components/base/TMFileManagerThumbnailItems.d.ts +1 -1
- package/lib/components/base/TMFileManagerThumbnailsView.d.ts +1 -1
- package/lib/components/base/TMLayout.d.ts +4 -4
- package/lib/components/base/TMList.d.ts +2 -1
- package/lib/components/base/TMListView.d.ts +1 -1
- package/lib/components/base/TMModal.js +1 -1
- package/lib/components/base/TMSpinner.d.ts +2 -1
- package/lib/components/base/TMTab.d.ts +4 -3
- package/lib/components/base/TMTooltip.d.ts +1 -1
- package/lib/components/base/TMTreeView.d.ts +1 -1
- package/lib/components/base/TMUserAvatar.d.ts +2 -1
- package/lib/components/base/TMVilViewer.d.ts +2 -1
- package/lib/components/base/TMWaitPanel.d.ts +3 -2
- package/lib/components/choosers/TMDynDataListItemChooser.d.ts +3 -1
- package/lib/components/choosers/TMDynDataListItemChooser.js +4 -6
- package/lib/components/choosers/TMInvoiceRetrieveFormats.d.ts +2 -1
- package/lib/components/choosers/TMOrderRetrieveFormats.d.ts +2 -1
- package/lib/components/choosers/TMRelationChooser.d.ts +3 -3
- package/lib/components/choosers/TMUserChooser.d.ts +2 -2
- package/lib/components/editors/TMFormulaEditor.d.ts +1 -1
- package/lib/components/editors/TMHtmlContentDisplay.d.ts +2 -1
- package/lib/components/editors/TMHtmlEditor.d.ts +2 -1
- package/lib/components/editors/TMTextBox.js +10 -5
- package/lib/components/editors/TMTreeDropDown.d.ts +1 -1
- package/lib/components/features/assistant/TMToppyDraggableHelpCenter.d.ts +1 -1
- package/lib/components/features/blog/TMBlogCommentForm.d.ts +2 -1
- package/lib/components/features/documents/TMDcmtForm.d.ts +2 -1
- package/lib/components/features/documents/TMDcmtForm.js +52 -5
- package/lib/components/features/documents/TMDcmtFormActionButtons.d.ts +1 -1
- package/lib/components/features/documents/TMDcmtIcon.d.ts +2 -1
- package/lib/components/features/documents/TMDcmtPreview.d.ts +1 -1
- package/lib/components/features/documents/TMDcmtTasks.d.ts +2 -1
- package/lib/components/features/documents/TMDragDropOverlay.d.ts +1 -1
- package/lib/components/features/documents/TMMergeToPdfForm.d.ts +2 -1
- package/lib/components/features/documents/TMMergeToPdfForm.js +1 -1
- package/lib/components/features/search/TMDcmtCheckoutInfoForm.d.ts +2 -1
- package/lib/components/features/search/TMMetadataOutputForm.d.ts +2 -1
- package/lib/components/features/search/TMMetadataSorterForm.d.ts +2 -1
- package/lib/components/features/search/TMSavedQuerySelector.d.ts +2 -2
- package/lib/components/features/search/TMSearch.d.ts +2 -1
- package/lib/components/features/search/TMSearch.js +2 -2
- package/lib/components/features/search/TMSearchResult.d.ts +2 -1
- package/lib/components/features/search/TMSearchResult.js +3 -2
- package/lib/components/features/search/TMSearchResultFloatingActionButton.d.ts +1 -1
- package/lib/components/features/search/TMSignatureInfoContent.d.ts +5 -2
- package/lib/components/features/search/TMSignatureInfoContent.js +373 -79
- package/lib/components/features/search/TMViewHistoryDcmt.d.ts +2 -1
- package/lib/components/features/tasks/TMTaskForm.d.ts +1 -1
- package/lib/components/features/tasks/TMTaskFormUtils.d.ts +10 -10
- package/lib/components/features/tasks/TMTasksAgenda.d.ts +1 -1
- package/lib/components/features/tasks/TMTasksCalendar.d.ts +1 -1
- package/lib/components/features/tasks/TMTasksHeader.d.ts +1 -1
- package/lib/components/features/tasks/TMTasksPanelContent.d.ts +1 -1
- package/lib/components/features/tasks/TMTasksUtilsView.d.ts +5 -5
- package/lib/components/features/tasks/TMTasksView.d.ts +1 -1
- package/lib/components/features/wg/TMWGsCopyMoveForm.d.ts +3 -2
- package/lib/components/features/workflow/TMWorkflowPopup.d.ts +8 -7
- package/lib/components/forms/Login/Chooser.d.ts +2 -2
- package/lib/components/forms/Login/TMLoginForm.d.ts +2 -0
- package/lib/components/forms/Login/TMLoginForm.js +17 -3
- package/lib/components/forms/Login/TextBox.d.ts +3 -0
- package/lib/components/forms/Login/TextBox.js +2 -2
- package/lib/components/forms/TMChooserForm.d.ts +2 -1
- package/lib/components/forms/TMSaveForm.d.ts +4 -4
- package/lib/components/grids/TMBlogAttachments.d.ts +2 -1
- package/lib/components/grids/TMBlogHeader.d.ts +1 -1
- package/lib/components/grids/TMBlogsPost.d.ts +1 -1
- package/lib/components/grids/TMBlogsPostUtils.d.ts +9 -9
- package/lib/components/grids/TMValidationItemsList.d.ts +2 -1
- package/lib/components/layout/panelManager/TMPanelManagerContainer.d.ts +2 -1
- package/lib/components/layout/panelManager/TMPanelManagerContext.d.ts +2 -2
- package/lib/components/layout/panelManager/TMPanelManagerToolbar.d.ts +1 -1
- package/lib/components/layout/panelManager/TMPanelManagerWithPersistenceProvider.d.ts +2 -2
- package/lib/components/layout/panelManager/TMPanelWrapper.d.ts +2 -2
- package/lib/components/pages/TMPage.d.ts +1 -1
- package/lib/components/pages/TMPage.js +3 -1
- package/lib/components/query/TMQueryEditor.js +1 -1
- package/lib/components/settings/SettingsAppearance.d.ts +2 -1
- package/lib/components/sidebar/TMAboutApp.d.ts +2 -1
- package/lib/components/sidebar/TMHeader.d.ts +3 -3
- package/lib/components/viewers/TMDataListItemViewer.d.ts +3 -2
- package/lib/components/viewers/TMDataUserIdItemViewer.d.ts +3 -2
- package/lib/components/viewers/TMMidViewer.d.ts +2 -2
- package/lib/components/viewers/TMTidViewer.d.ts +2 -2
- package/lib/helper/SDKUI_Globals.js +22 -2
- package/lib/helper/TMCommandsContextMenu.d.ts +1 -1
- package/lib/helper/TMIcons.d.ts +279 -279
- package/lib/helper/TMPdfViewer.d.ts +2 -1
- package/lib/helper/TMToppyMessage.d.ts +2 -2
- package/lib/helper/TMUtils.d.ts +1 -1
- package/lib/helper/grafometricSignaturesCache.d.ts +45 -0
- package/lib/helper/grafometricSignaturesCache.js +56 -0
- package/lib/helper/helpers.d.ts +1 -1
- package/lib/helper/index.d.ts +1 -0
- package/lib/helper/index.js +1 -0
- package/lib/hooks/useDocumentOperations.d.ts +2 -1
- package/lib/hooks/useDocumentOperations.js +15 -15
- package/lib/hooks/useInputDialog.d.ts +2 -1
- package/lib/hooks/usePreventFileDrop.js +14 -3
- package/lib/services/platform_services.d.ts +3 -2
- package/lib/ts/graphometricTypes.d.ts +62 -0
- package/lib/ts/graphometricTypes.js +1 -0
- package/lib/ts/index.d.ts +1 -0
- package/lib/ts/index.js +1 -0
- package/package.json +66 -61
|
@@ -1,43 +1,174 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
2
|
import { useEffect, useState } from "react";
|
|
3
|
-
import { SDK_Globals } from "@topconsultnpm/sdk-ts";
|
|
4
|
-
import { IconCopy, getExceptionMessage, SDKUI_Localizator } from "../../../helper";
|
|
3
|
+
import { SDK_Globals, RetrieveFileOptions, DcmtOpers, GeneralRetrieveFormats } from "@topconsultnpm/sdk-ts";
|
|
4
|
+
import { IconCopy, IconDownload, IconWarning, IconCheck, getExceptionMessage, SDKUI_Localizator, IconCircleInfo, IconRefresh } from "../../../helper";
|
|
5
|
+
import { getGrafometricSignatures, putGrafometricSignatures, removeGrafometricSignatures } from "../../../helper/grafometricSignaturesCache";
|
|
6
|
+
import TMTooltip from "../../base/TMTooltip";
|
|
5
7
|
import TMSpinner from "../../base/TMSpinner";
|
|
8
|
+
import TMModal from "../../base/TMModal";
|
|
9
|
+
import { DeviceType, useDeviceType } from "../../base/TMDeviceProvider";
|
|
10
|
+
import { LoadIndicator } from "devextreme-react";
|
|
11
|
+
import { TMColors } from "../../../utils/theme";
|
|
12
|
+
import ShowAlert from "../../base/TMAlert";
|
|
6
13
|
const TMSignatureInfoContent = (props) => {
|
|
7
|
-
const { inputDcmt } = props;
|
|
14
|
+
const { inputDcmt, graphometricManager, onClose } = props;
|
|
15
|
+
/** Abilita la cache delle firme grafometriche */
|
|
16
|
+
const useGrafometricCache = false;
|
|
17
|
+
/** Abilita la visualizzazione della sezione firme grafometriche */
|
|
18
|
+
const showGrafometricSection = false;
|
|
19
|
+
const deviceType = useDeviceType();
|
|
20
|
+
const isMobile = deviceType === DeviceType.MOBILE;
|
|
8
21
|
const [selectedHash, setSelectedHash] = useState('sha256');
|
|
9
22
|
const [signerInfo, setSignerInfo] = useState(undefined);
|
|
10
23
|
const [error, setError] = useState(undefined);
|
|
11
24
|
const [copiedHash, setCopiedHash] = useState(false);
|
|
25
|
+
// Stati per firma grafometrica (firme con dati biometrici estratti dal PDF)
|
|
26
|
+
const [grafometricSignatures, setGrafometricSignatures] = useState([]);
|
|
27
|
+
const [grafometricError, setGrafometricError] = useState(undefined);
|
|
28
|
+
const [isDataReady, setIsDataReady] = useState(false);
|
|
29
|
+
// Stati per gestire il caricamento on-demand delle firme grafometriche
|
|
30
|
+
const [isGrafometricRequested, setIsGrafometricRequested] = useState(false);
|
|
31
|
+
const [isGrafometricLoading, setIsGrafometricLoading] = useState(false);
|
|
32
|
+
// Caricamento iniziale: recupera solo signerInfo
|
|
33
|
+
// Le firme grafometriche vengono caricate on-demand tramite pulsante (o dalla cache se disponibili)
|
|
12
34
|
useEffect(() => {
|
|
13
35
|
const fetchSignerInfo = async () => {
|
|
36
|
+
const ue = SDK_Globals.tmSession?.NewUpdateEngineByID();
|
|
37
|
+
if (!ue) {
|
|
38
|
+
setError("Sessione non disponibile");
|
|
39
|
+
return undefined;
|
|
40
|
+
}
|
|
41
|
+
ue.TID = inputDcmt.TID;
|
|
42
|
+
ue.DID = inputDcmt.DID;
|
|
43
|
+
const signerInfoDescriptor = await ue.GetSignersAsync();
|
|
44
|
+
if (!signerInfoDescriptor) {
|
|
45
|
+
setError("Informazioni di firma non disponibili");
|
|
46
|
+
return undefined;
|
|
47
|
+
}
|
|
48
|
+
return signerInfoDescriptor;
|
|
49
|
+
};
|
|
50
|
+
const loadSignerInfo = async () => {
|
|
14
51
|
TMSpinner.show();
|
|
52
|
+
setIsDataReady(false);
|
|
53
|
+
setError(undefined);
|
|
54
|
+
// Reset stati grafometrici quando cambia il documento
|
|
55
|
+
setGrafometricError(undefined);
|
|
56
|
+
setGrafometricSignatures([]);
|
|
57
|
+
setIsGrafometricRequested(false);
|
|
15
58
|
try {
|
|
16
|
-
const
|
|
17
|
-
if (!ue) {
|
|
18
|
-
setError("Sessione non disponibile");
|
|
19
|
-
TMSpinner.hide();
|
|
20
|
-
return;
|
|
21
|
-
}
|
|
22
|
-
ue.TID = inputDcmt.TID;
|
|
23
|
-
ue.DID = inputDcmt.DID;
|
|
24
|
-
const signerInfoDescriptor = await ue.GetSignersAsync();
|
|
25
|
-
if (!signerInfoDescriptor) {
|
|
26
|
-
setError("Informazioni di firma non disponibili");
|
|
27
|
-
TMSpinner.hide();
|
|
28
|
-
return;
|
|
29
|
-
}
|
|
59
|
+
const signerInfoDescriptor = await fetchSignerInfo();
|
|
30
60
|
setSignerInfo(signerInfoDescriptor);
|
|
31
|
-
|
|
32
|
-
|
|
61
|
+
// Controlla se ci sono firme grafometriche in cache per questo documento
|
|
62
|
+
if (useGrafometricCache && graphometricManager && inputDcmt.FILEEXT?.toLowerCase() === "pdf") {
|
|
63
|
+
const cachedSignatures = getGrafometricSignatures(inputDcmt.TID, inputDcmt.DID);
|
|
64
|
+
if (cachedSignatures !== undefined) {
|
|
65
|
+
setGrafometricSignatures(cachedSignatures);
|
|
66
|
+
setIsGrafometricRequested(true);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
33
69
|
}
|
|
34
70
|
catch (err) {
|
|
35
71
|
setError(getExceptionMessage(err));
|
|
72
|
+
}
|
|
73
|
+
finally {
|
|
74
|
+
setIsDataReady(true);
|
|
36
75
|
TMSpinner.hide();
|
|
37
76
|
}
|
|
38
77
|
};
|
|
39
|
-
|
|
40
|
-
}, [inputDcmt]);
|
|
78
|
+
loadSignerInfo();
|
|
79
|
+
}, [inputDcmt, graphometricManager]);
|
|
80
|
+
// Funzione per estrarre le firme grafometriche (chiamata on-demand)
|
|
81
|
+
const extractGraphometricSignaturesFromPdf = async (forceRefresh = false) => {
|
|
82
|
+
// Verifica che graphometricManager sia definito e che il file sia un PDF
|
|
83
|
+
if (!graphometricManager) {
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
// Controlla se i dati sono già in cache (a meno che non sia richiesto un refresh forzato)
|
|
87
|
+
if (useGrafometricCache) {
|
|
88
|
+
if (!forceRefresh) {
|
|
89
|
+
const cachedSignatures = getGrafometricSignatures(inputDcmt.TID, inputDcmt.DID);
|
|
90
|
+
if (cachedSignatures !== undefined) {
|
|
91
|
+
setGrafometricSignatures(cachedSignatures);
|
|
92
|
+
setIsGrafometricRequested(true);
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
else {
|
|
97
|
+
// Rimuovi dalla cache se è richiesto un refresh forzato
|
|
98
|
+
removeGrafometricSignatures(inputDcmt.TID, inputDcmt.DID);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
setIsGrafometricLoading(true);
|
|
102
|
+
setGrafometricError(undefined);
|
|
103
|
+
setGrafometricSignatures([]);
|
|
104
|
+
try {
|
|
105
|
+
if (inputDcmt.FILEEXT?.toLowerCase() !== "pdf") {
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
108
|
+
// Configura opzioni per il download del file
|
|
109
|
+
const rfo = new RetrieveFileOptions();
|
|
110
|
+
rfo.retrieveReason = DcmtOpers.ShowFile;
|
|
111
|
+
rfo.generalRetrieveFormat = GeneralRetrieveFormats.OriginalUnsigned;
|
|
112
|
+
// Scarica il PDF dal server
|
|
113
|
+
const file = await SDK_Globals.tmSession?.NewSearchEngine().RetrieveFileAsync(inputDcmt.TID, inputDcmt.DID, rfo);
|
|
114
|
+
if (!file) {
|
|
115
|
+
console.warn('Impossibile scaricare il file PDF per l\'estrazione delle firme grafometriche');
|
|
116
|
+
setGrafometricError("Non è stato possibile verificare la presenza di firme grafometriche. Riprovare più tardi.");
|
|
117
|
+
return;
|
|
118
|
+
}
|
|
119
|
+
if (file.type !== "application/pdf") {
|
|
120
|
+
return;
|
|
121
|
+
}
|
|
122
|
+
const graphometricAttachments = await graphometricManager.extractGraphometricAttachments(file);
|
|
123
|
+
// Processa tutti gli attachment grafometrici con graphometricManager
|
|
124
|
+
const extractedSignatures = [];
|
|
125
|
+
// Filtra gli attachment con dataBase64 valido
|
|
126
|
+
const validAttachments = graphometricAttachments.filter(att => att.dataBase64 !== undefined);
|
|
127
|
+
// Estrai tutti i dataUrl degli attachment
|
|
128
|
+
const dataUrls = validAttachments.map(att => att.dataBase64).filter((data) => data !== undefined);
|
|
129
|
+
// Usa graphometricManager per estrarre i dati biometrici da tutte le immagini
|
|
130
|
+
const results = await graphometricManager.extractBiometricData(dataUrls);
|
|
131
|
+
// Processa i risultati (verifica che sia un array)
|
|
132
|
+
const errors = [];
|
|
133
|
+
if (Array.isArray(results)) {
|
|
134
|
+
results.forEach((result, index) => {
|
|
135
|
+
if (result.success && result.data) {
|
|
136
|
+
const originalAttachment = validAttachments[index];
|
|
137
|
+
extractedSignatures.push({
|
|
138
|
+
biometricData: result.data,
|
|
139
|
+
originalDataBase64: originalAttachment?.dataBase64,
|
|
140
|
+
originalFileName: originalAttachment?.fileName
|
|
141
|
+
});
|
|
142
|
+
}
|
|
143
|
+
else if (!result.success && result.error) {
|
|
144
|
+
errors.push(result.error);
|
|
145
|
+
}
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
// Se ci sono errori e nessuna firma estratta, mostra gli errori
|
|
149
|
+
if (errors.length > 0 && extractedSignatures.length === 0) {
|
|
150
|
+
setGrafometricError(errors.join('; '));
|
|
151
|
+
return;
|
|
152
|
+
}
|
|
153
|
+
// Salva in cache (se abilitata)
|
|
154
|
+
if (useGrafometricCache) {
|
|
155
|
+
putGrafometricSignatures(inputDcmt.TID, inputDcmt.DID, extractedSignatures);
|
|
156
|
+
}
|
|
157
|
+
setGrafometricSignatures(extractedSignatures);
|
|
158
|
+
}
|
|
159
|
+
catch (err) {
|
|
160
|
+
console.error('Errore estrazione firme grafometriche dal PDF:', err);
|
|
161
|
+
setGrafometricError("Non è stato possibile verificare la presenza di firme grafometriche. Riprovare più tardi.");
|
|
162
|
+
}
|
|
163
|
+
finally {
|
|
164
|
+
setIsGrafometricLoading(false);
|
|
165
|
+
setIsGrafometricRequested(true);
|
|
166
|
+
}
|
|
167
|
+
};
|
|
168
|
+
// Funzione per forzare il refresh delle firme grafometriche
|
|
169
|
+
const refreshGrafometricSignatures = () => {
|
|
170
|
+
extractGraphometricSignaturesFromPdf(true);
|
|
171
|
+
};
|
|
41
172
|
const hashButtonStyle = (isActive) => ({
|
|
42
173
|
padding: '8px 16px',
|
|
43
174
|
margin: '0 2px',
|
|
@@ -81,64 +212,227 @@ const TMSignatureInfoContent = (props) => {
|
|
|
81
212
|
}
|
|
82
213
|
};
|
|
83
214
|
if (error) {
|
|
84
|
-
return (_jsx("div", { style: {
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
215
|
+
return (_jsx(TMModal, { title: SDKUI_Localizator.SignatureInformation, expandable: true, onClose: onClose, width: isMobile ? '95%' : '700px', height: isMobile ? '90%' : 'auto', children: _jsx("div", { style: { padding: '20px', minHeight: '200px', display: 'flex', alignItems: 'center', justifyContent: 'center' }, children: _jsx("div", { style: {
|
|
216
|
+
padding: '20px',
|
|
217
|
+
textAlign: 'center',
|
|
218
|
+
color: '#d32f2f',
|
|
219
|
+
background: '#ffebee',
|
|
220
|
+
borderRadius: '8px',
|
|
221
|
+
width: '100%'
|
|
222
|
+
}, children: error }) }) }));
|
|
91
223
|
}
|
|
92
|
-
|
|
93
|
-
|
|
224
|
+
// Mostra il contenuto solo quando entrambi i caricamenti (signerInfo e firme grafometriche) sono completati
|
|
225
|
+
if (!isDataReady || !signerInfo) {
|
|
226
|
+
return (_jsx(TMModal, { title: SDKUI_Localizator.SignatureInformation, expandable: true, onClose: onClose, width: isMobile ? '95%' : '700px', height: isMobile ? '90%' : 'auto', children: _jsxs("div", { style: {
|
|
227
|
+
padding: '20px',
|
|
228
|
+
minHeight: '200px',
|
|
229
|
+
display: 'flex',
|
|
230
|
+
flexDirection: 'column',
|
|
231
|
+
alignItems: 'center',
|
|
232
|
+
justifyContent: 'center',
|
|
233
|
+
gap: '16px'
|
|
234
|
+
}, children: [_jsx(LoadIndicator, {}), _jsxs("span", { style: { color: '#666', fontSize: '14px' }, children: [SDKUI_Localizator.Loading, "..."] })] }) }));
|
|
94
235
|
}
|
|
95
|
-
return (
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
236
|
+
return (_jsx(TMModal, { title: SDKUI_Localizator.SignatureInformation, expandable: true, onClose: onClose, width: isMobile ? '95%' : '700px', height: isMobile ? '90%' : 'auto', children: _jsx("div", { style: { padding: '16px', minHeight: '200px', overflow: 'auto' }, children: _jsxs("div", { style: { lineHeight: "1.5em", boxSizing: "border-box", userSelect: 'text' }, children: [_jsxs("div", { children: [_jsxs("h4", { style: { margin: '0 0 12px 0', color: '#0078d4', fontSize: '16px' }, children: ["Firme digitali (", signerInfo.signers?.length ?? 0, ")"] }), signerInfo.signers && signerInfo.signers.length > 0 ? (signerInfo.signers.map((signer, idx) => (_jsxs("div", { style: {
|
|
237
|
+
border: "1px solid #d0d0d0",
|
|
238
|
+
borderRadius: "8px",
|
|
239
|
+
padding: "16px",
|
|
240
|
+
marginBottom: "12px",
|
|
241
|
+
background: "linear-gradient(135deg, #ffffff 0%, #f9f9f9 100%)",
|
|
242
|
+
boxShadow: "0 2px 4px rgba(0,0,0,0.08)",
|
|
243
|
+
userSelect: 'text',
|
|
244
|
+
}, children: [_jsxs("h3", { style: { margin: "0 0 12px", color: "#0078d4", fontSize: '15px', fontWeight: '600' }, children: ["Firma ", signer.levelAndIndex] }), _jsxs("div", { style: {
|
|
245
|
+
display: 'grid',
|
|
246
|
+
gap: '10px',
|
|
247
|
+
fontSize: '13px'
|
|
248
|
+
}, children: [_jsxs("div", { children: [_jsx("strong", { style: { color: '#555' }, children: "Intestatario:" }), _jsx("div", { style: { marginTop: '4px', color: '#333' }, children: signer.info1 ?? '-' })] }), _jsxs("div", { children: [_jsx("strong", { style: { color: '#555' }, children: "Riferimento temporale:" }), _jsx("div", { style: { marginTop: '4px', color: '#333' }, children: signer.info2 ?? '-' })] }), _jsxs("div", { children: [_jsx("strong", { style: { color: '#555' }, children: "Dettagli:" }), _jsx("div", { style: { marginTop: '4px', color: '#333' }, children: signer.info3 ?? '-' })] })] })] }, idx)))) : (_jsx("div", { style: {
|
|
249
|
+
border: "1px solid #d0d0d0",
|
|
250
|
+
borderRadius: "8px",
|
|
251
|
+
padding: "16px",
|
|
252
|
+
marginBottom: "12px",
|
|
253
|
+
background: "linear-gradient(135deg, #ffffff 0%, #f9f9f9 100%)",
|
|
254
|
+
boxShadow: "0 2px 4px rgba(0,0,0,0.08)",
|
|
255
|
+
userSelect: 'text',
|
|
256
|
+
textAlign: 'center',
|
|
257
|
+
color: '#666'
|
|
258
|
+
}, children: SDKUI_Localizator.NoSignatureFound }))] }), showGrafometricSection && graphometricManager && inputDcmt.FILEEXT?.toLowerCase() === "pdf" && (_jsxs("div", { style: { marginTop: '16px' }, children: [_jsxs("div", { style: { display: 'flex', alignItems: 'center', justifyContent: 'space-between', marginBottom: '12px' }, children: [_jsxs("h4", { style: { margin: 0, color: '#0078d4', fontSize: '16px' }, children: ["Firme Grafometriche ", isGrafometricRequested && !isGrafometricLoading && !grafometricError && `(${grafometricSignatures.length})`] }), isGrafometricRequested && !isGrafometricLoading && (_jsx(TMTooltip, { content: "Aggiorna", children: _jsx("button", { onClick: refreshGrafometricSignatures, style: {
|
|
259
|
+
background: 'transparent',
|
|
260
|
+
border: 'none',
|
|
261
|
+
cursor: 'pointer',
|
|
262
|
+
padding: '4px',
|
|
263
|
+
borderRadius: '4px',
|
|
264
|
+
display: 'flex',
|
|
265
|
+
alignItems: 'center',
|
|
266
|
+
color: '#0078d4',
|
|
267
|
+
transition: 'all 0.2s ease'
|
|
268
|
+
}, onMouseEnter: (e) => {
|
|
269
|
+
e.currentTarget.style.background = '#e6f2ff';
|
|
270
|
+
}, onMouseLeave: (e) => {
|
|
271
|
+
e.currentTarget.style.background = 'transparent';
|
|
272
|
+
}, children: _jsx(IconRefresh, { width: 18, height: 18 }) }) }))] }), !isGrafometricRequested && !isGrafometricLoading && (_jsx("div", { style: {
|
|
273
|
+
border: "1px solid #d0d0d0",
|
|
274
|
+
borderRadius: "8px",
|
|
275
|
+
padding: "20px",
|
|
276
|
+
marginBottom: "12px",
|
|
277
|
+
background: "linear-gradient(135deg, #ffffff 0%, #f9f9f9 100%)",
|
|
278
|
+
boxShadow: "0 2px 4px rgba(0,0,0,0.08)",
|
|
279
|
+
display: 'flex',
|
|
280
|
+
flexDirection: 'column',
|
|
281
|
+
alignItems: 'center',
|
|
282
|
+
gap: '12px'
|
|
283
|
+
}, children: _jsx("button", { onClick: () => extractGraphometricSignaturesFromPdf(), style: {
|
|
284
|
+
display: 'flex',
|
|
285
|
+
alignItems: 'center',
|
|
286
|
+
gap: '8px',
|
|
287
|
+
padding: '10px 20px',
|
|
288
|
+
border: '2px solid #0078d4',
|
|
289
|
+
borderRadius: '8px',
|
|
290
|
+
background: 'linear-gradient(135deg, #0078d4 0%, #005a9e 100%)',
|
|
291
|
+
color: '#fff',
|
|
292
|
+
cursor: 'pointer',
|
|
293
|
+
fontSize: '14px',
|
|
294
|
+
fontWeight: '600',
|
|
295
|
+
transition: 'all 0.2s ease',
|
|
296
|
+
boxShadow: '0 2px 6px rgba(0,120,212,0.3)',
|
|
297
|
+
}, onMouseEnter: (e) => {
|
|
298
|
+
e.currentTarget.style.background = 'linear-gradient(135deg, #005a9e 0%, #004578 100%)';
|
|
299
|
+
e.currentTarget.style.boxShadow = '0 4px 12px rgba(0,120,212,0.4)';
|
|
300
|
+
e.currentTarget.style.transform = 'translateY(-1px)';
|
|
301
|
+
}, onMouseLeave: (e) => {
|
|
302
|
+
e.currentTarget.style.background = 'linear-gradient(135deg, #0078d4 0%, #005a9e 100%)';
|
|
303
|
+
e.currentTarget.style.boxShadow = '0 2px 6px rgba(0,120,212,0.3)';
|
|
304
|
+
e.currentTarget.style.transform = 'translateY(0)';
|
|
305
|
+
}, children: "Scarica firme grafometriche" }) })), isGrafometricLoading && (_jsxs("div", { style: {
|
|
306
|
+
border: "1px solid #d0d0d0",
|
|
307
|
+
borderRadius: "8px",
|
|
308
|
+
padding: "24px",
|
|
309
|
+
marginBottom: "12px",
|
|
310
|
+
background: "linear-gradient(135deg, #ffffff 0%, #f9f9f9 100%)",
|
|
311
|
+
boxShadow: "0 2px 4px rgba(0,0,0,0.08)",
|
|
312
|
+
display: 'flex',
|
|
313
|
+
flexDirection: 'column',
|
|
314
|
+
alignItems: 'center',
|
|
315
|
+
gap: '12px'
|
|
316
|
+
}, children: [_jsx(LoadIndicator, {}), _jsx("span", { style: { color: '#666', fontSize: '13px' }, children: "Analisi delle firme grafometriche in corso..." })] })), grafometricError && isGrafometricRequested && (_jsx("div", { style: {
|
|
317
|
+
border: "1px solid #d0d0d0",
|
|
318
|
+
borderRadius: "8px",
|
|
319
|
+
padding: "16px",
|
|
320
|
+
marginBottom: "12px",
|
|
321
|
+
background: "linear-gradient(135deg, #ffffff 0%, #f9f9f9 100%)",
|
|
322
|
+
boxShadow: "0 2px 4px rgba(0,0,0,0.08)",
|
|
323
|
+
}, children: _jsxs("div", { style: {
|
|
324
|
+
color: '#d32f2f',
|
|
325
|
+
fontSize: '13px',
|
|
326
|
+
display: 'flex',
|
|
327
|
+
alignItems: 'center',
|
|
328
|
+
gap: '8px'
|
|
329
|
+
}, children: [_jsx(IconWarning, { width: 16, height: 16 }), grafometricError] }) })), isGrafometricRequested && !isGrafometricLoading && !grafometricError && grafometricSignatures.length === 0 && (_jsx("div", { style: {
|
|
330
|
+
border: "1px solid #d0d0d0",
|
|
331
|
+
borderRadius: "8px",
|
|
332
|
+
padding: "16px",
|
|
333
|
+
marginBottom: "12px",
|
|
334
|
+
background: "linear-gradient(135deg, #ffffff 0%, #f9f9f9 100%)",
|
|
335
|
+
boxShadow: "0 2px 4px rgba(0,0,0,0.08)",
|
|
336
|
+
textAlign: 'center',
|
|
337
|
+
color: '#666'
|
|
338
|
+
}, children: _jsxs("div", { style: { display: 'flex', alignItems: 'center', justifyContent: 'center', gap: '8px' }, children: [_jsx(IconCircleInfo, { width: 16, height: 16, style: { color: TMColors.iconLight } }), "Nessuna firma grafometrica trovata nel documento."] }) })), isGrafometricRequested && !isGrafometricLoading && grafometricSignatures.length > 0 && (_jsx(_Fragment, { children: grafometricSignatures.map((signature, idx) => {
|
|
339
|
+
const data = signature.biometricData;
|
|
340
|
+
const isIntegrityOk = data.integrityStatus === 'OK';
|
|
341
|
+
const integrityColor = isIntegrityOk ? '#28a745' : (data.integrityStatus === 'FAIL' ? '#dc3545' : '#ffc107');
|
|
342
|
+
const isDataStatusOk = data.dataStatus === 'GOOD';
|
|
343
|
+
const dataStatusColor = isDataStatusOk ? '#28a745' : (data.dataStatus === 'ERROR' ? '#dc3545' : '#ffc107');
|
|
344
|
+
const downloadBiometricData = () => {
|
|
345
|
+
if (!graphometricManager || !signature.originalDataBase64) {
|
|
346
|
+
ShowAlert({
|
|
347
|
+
mode: 'warning',
|
|
348
|
+
message: "I dati biometrici non sono disponibili per questa firma.",
|
|
349
|
+
duration: 3000,
|
|
350
|
+
title: SDKUI_Localizator.Warning,
|
|
351
|
+
});
|
|
352
|
+
return;
|
|
353
|
+
}
|
|
354
|
+
graphometricManager.downloadDecryptedPngWithBiometricData({
|
|
355
|
+
fileName: signature.originalFileName,
|
|
356
|
+
dataBase64: signature.originalDataBase64
|
|
357
|
+
});
|
|
358
|
+
};
|
|
359
|
+
return (_jsxs("div", { style: {
|
|
360
|
+
border: "1px solid #d0d0d0",
|
|
361
|
+
borderRadius: "8px",
|
|
362
|
+
padding: "16px",
|
|
363
|
+
marginBottom: "12px",
|
|
364
|
+
background: "linear-gradient(135deg, #ffffff 0%, #f9f9f9 100%)",
|
|
365
|
+
boxShadow: "0 2px 4px rgba(0,0,0,0.08)",
|
|
366
|
+
userSelect: 'text',
|
|
367
|
+
}, children: [_jsxs("div", { style: { display: 'flex', justifyContent: 'space-between', alignItems: 'center', marginBottom: '12px' }, children: [_jsxs("h3", { style: { margin: 0, color: "#0078d4", fontSize: '15px', fontWeight: '600' }, children: ["Firma #", idx + 1] }), _jsx("div", { style: { display: 'flex', gap: '8px' }, children: signature.originalDataBase64 && (_jsxs("button", { onClick: downloadBiometricData, style: {
|
|
368
|
+
display: 'flex',
|
|
369
|
+
alignItems: 'center',
|
|
370
|
+
gap: '6px',
|
|
371
|
+
padding: '6px 12px',
|
|
372
|
+
border: '1px solid #28a745',
|
|
373
|
+
borderRadius: '6px',
|
|
374
|
+
background: '#fff',
|
|
375
|
+
color: '#28a745',
|
|
376
|
+
cursor: 'pointer',
|
|
377
|
+
fontSize: '12px',
|
|
378
|
+
fontWeight: '500',
|
|
379
|
+
transition: 'all 0.2s ease',
|
|
380
|
+
}, onMouseEnter: (e) => {
|
|
381
|
+
e.currentTarget.style.background = '#28a745';
|
|
382
|
+
e.currentTarget.style.color = '#fff';
|
|
383
|
+
}, onMouseLeave: (e) => {
|
|
384
|
+
e.currentTarget.style.background = '#fff';
|
|
385
|
+
e.currentTarget.style.color = '#28a745';
|
|
386
|
+
}, children: [_jsx(IconDownload, { width: 14, height: 14 }), "Download"] })) })] }), _jsx("div", { style: {
|
|
387
|
+
background: '#fafafa',
|
|
388
|
+
borderRadius: '6px',
|
|
389
|
+
padding: '16px',
|
|
390
|
+
marginBottom: '16px',
|
|
391
|
+
textAlign: 'center',
|
|
392
|
+
border: '1px solid #e8e8e8'
|
|
393
|
+
}, children: _jsx("img", { src: `${data.signatureImage}`, draggable: false, alt: `Firma di ${data.signatureName || 'Firmatario'}`, style: {
|
|
394
|
+
maxWidth: '100%',
|
|
395
|
+
maxHeight: '100px',
|
|
396
|
+
objectFit: 'contain'
|
|
397
|
+
} }) }), _jsxs("div", { style: {
|
|
398
|
+
display: 'grid',
|
|
399
|
+
gap: '8px',
|
|
400
|
+
fontSize: '13px'
|
|
401
|
+
}, children: [data.signatureName && (_jsxs("div", { style: { display: 'flex', borderBottom: '1px solid #eee', paddingBottom: '8px' }, children: [_jsx("strong", { style: { color: '#555', minWidth: '160px', flexShrink: 0 }, children: "Firmatario:" }), _jsx("span", { style: { color: '#333' }, children: data.signatureName })] })), data.reasonForSigning && (_jsxs("div", { style: { display: 'flex', borderBottom: '1px solid #eee', paddingBottom: '8px' }, children: [_jsx("strong", { style: { color: '#555', minWidth: '160px', flexShrink: 0 }, children: "Motivo firma:" }), _jsx("span", { style: { color: '#333' }, children: data.reasonForSigning })] })), data.dateTimeFormatted && (_jsxs("div", { style: { display: 'flex', borderBottom: '1px solid #eee', paddingBottom: '8px' }, children: [_jsx("strong", { style: { color: '#555', minWidth: '160px', flexShrink: 0 }, children: "Data e ora:" }), _jsx("span", { style: { color: '#333' }, children: data.dateTimeFormatted })] })), data.digitizerType && (_jsxs("div", { style: { display: 'flex', borderBottom: '1px solid #eee', paddingBottom: '8px' }, children: [_jsx("strong", { style: { color: '#555', minWidth: '160px', flexShrink: 0 }, children: "Dispositivo:" }), _jsx("span", { style: { color: '#333' }, children: data.digitizerType })] })), data.digitizerDriver && (_jsxs("div", { style: { display: 'flex', borderBottom: '1px solid #eee', paddingBottom: '8px' }, children: [_jsx("strong", { style: { color: '#555', minWidth: '160px', flexShrink: 0 }, children: "Driver:" }), _jsx("span", { style: { color: '#333', wordBreak: 'break-all' }, children: data.digitizerDriver })] })), data.operatingSystem && (_jsxs("div", { style: { display: 'flex', borderBottom: '1px solid #eee', paddingBottom: '8px' }, children: [_jsx("strong", { style: { color: '#555', minWidth: '160px', flexShrink: 0 }, children: "Sistema operativo:" }), _jsx("span", { style: { color: '#333', wordBreak: 'break-all' }, children: data.operatingSystem })] })), data.networkInterfaceCard && (_jsxs("div", { style: { display: 'flex', borderBottom: '1px solid #eee', paddingBottom: '8px' }, children: [_jsx("strong", { style: { color: '#555', minWidth: '160px', flexShrink: 0 }, children: "Scheda di rete:" }), _jsx("span", { style: { color: '#333', wordBreak: 'break-all' }, children: data.networkInterfaceCard })] })), (() => {
|
|
402
|
+
const extraData = data.extraData ?? {};
|
|
403
|
+
return Object.keys(extraData).length > 0 && (_jsxs("div", { style: { display: 'flex', borderBottom: '1px solid #eee', paddingBottom: '8px' }, children: [_jsx("strong", { style: { color: '#555', minWidth: '160px', flexShrink: 0 }, children: "Extra Data:" }), _jsx("div", { style: { color: '#333', wordBreak: 'break-all' }, children: Object.entries(extraData).map(([key, value]) => (_jsxs("div", { children: [key, ": ", value] }, key))) })] }));
|
|
404
|
+
})(), _jsxs("div", { style: { borderBottom: '1px solid #eee', paddingBottom: '8px' }, children: [_jsxs("div", { style: { display: 'flex' }, children: [_jsxs("strong", { style: { color: '#555', minWidth: '160px', flexShrink: 0, display: 'flex', alignItems: 'center', gap: '4px' }, children: ["Integrit\u00E0 firma:", _jsx(TMTooltip, { content: "Verifica se la firma biometrica \u00E8 stata alterata", children: _jsx(IconCircleInfo, { width: 14, height: 14, style: { color: TMColors.iconLight } }) })] }), _jsx("span", { style: {
|
|
405
|
+
color: integrityColor,
|
|
406
|
+
fontWeight: '600',
|
|
407
|
+
display: 'flex',
|
|
408
|
+
alignItems: 'center',
|
|
409
|
+
gap: '6px'
|
|
410
|
+
}, children: isIntegrityOk ? _jsxs(_Fragment, { children: [_jsx(IconCheck, { width: 14, height: 14 }), " Verificata"] }) : _jsxs(_Fragment, { children: [_jsx(IconWarning, { width: 14, height: 14 }), " ", data.integrityStatus] }) })] }), data.integrityWarning && (_jsx("div", { style: { marginLeft: '160px', marginTop: '4px', fontSize: '12px', color: '#856404', fontStyle: 'italic' }, children: data.integrityWarning }))] })] })] }, idx));
|
|
411
|
+
}) }))] })), signerInfo.shA256 && (_jsxs("div", { style: {
|
|
412
|
+
marginBottom: '12px',
|
|
413
|
+
padding: '16px',
|
|
414
|
+
background: '#f5f5f5',
|
|
415
|
+
borderRadius: '8px',
|
|
416
|
+
border: '1px solid #e0e0e0'
|
|
417
|
+
}, children: [_jsxs("div", { style: { marginBottom: '12px', display: 'flex', gap: '4px', flexWrap: 'wrap' }, children: [signerInfo.shA256 && (_jsx("button", { onClick: () => setSelectedHash('sha256'), style: hashButtonStyle(selectedHash === 'sha256'), children: "SHA-256" })), signerInfo.shA1 && (_jsx("button", { onClick: () => setSelectedHash('sha1'), style: hashButtonStyle(selectedHash === 'sha1'), children: "SHA-1" })), signerInfo.shA256Base64 && (_jsx("button", { onClick: () => setSelectedHash('sha256base64'), style: hashButtonStyle(selectedHash === 'sha256base64'), children: "Base64" }))] }), _jsxs("div", { style: {
|
|
418
|
+
background: '#fff',
|
|
419
|
+
padding: '12px',
|
|
420
|
+
borderRadius: '6px',
|
|
421
|
+
wordBreak: 'break-all',
|
|
422
|
+
fontSize: '12px',
|
|
423
|
+
border: '1px solid #d0d0d0',
|
|
424
|
+
userSelect: 'text',
|
|
425
|
+
}, children: [_jsxs("div", { style: { display: 'flex', alignItems: 'center', justifyContent: 'space-between', marginBottom: '6px' }, children: [_jsxs("strong", { style: { color: '#0078d4', fontSize: '14px' }, children: [getHashLabel(), ":"] }), _jsxs("button", { onClick: copyToClipboard, style: {
|
|
426
|
+
background: copiedHash ? '#d4edda' : 'transparent',
|
|
427
|
+
border: 'none',
|
|
428
|
+
cursor: 'pointer',
|
|
429
|
+
padding: '4px 8px',
|
|
430
|
+
borderRadius: '4px',
|
|
431
|
+
display: 'flex',
|
|
432
|
+
alignItems: 'center',
|
|
433
|
+
gap: '4px',
|
|
434
|
+
transition: 'all 0.2s ease',
|
|
435
|
+
color: copiedHash ? '#155724' : '#666'
|
|
436
|
+
}, title: "Copia", children: [_jsx(IconCopy, { width: 16, height: 16 }), copiedHash && _jsx("span", { style: { fontSize: '11px' }, children: "Copiato" })] })] }), _jsx("div", { style: { color: '#333' }, children: getHashValue() })] })] }))] }) }) }));
|
|
143
437
|
};
|
|
144
438
|
export default TMSignatureInfoContent;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import React from "react";
|
|
1
2
|
import { DcmtInfo } from "../../../ts/types";
|
|
2
3
|
import { DeviceType } from "../../base/TMDeviceProvider";
|
|
3
4
|
import { DcmtTypeDescriptor, HomeBlogPost, TaskDescriptor } from "@topconsultnpm/sdk-ts";
|
|
@@ -14,5 +15,5 @@ interface TMViewHistoryDcmtProps {
|
|
|
14
15
|
handleNavigateToWGs?: (value: HomeBlogPost | number) => Promise<void>;
|
|
15
16
|
handleNavigateToDossiers?: (value: HomeBlogPost | number) => Promise<void>;
|
|
16
17
|
}
|
|
17
|
-
declare const TMViewHistoryDcmt: (props: TMViewHistoryDcmtProps) =>
|
|
18
|
+
declare const TMViewHistoryDcmt: (props: TMViewHistoryDcmtProps) => React.JSX.Element;
|
|
18
19
|
export default TMViewHistoryDcmt;
|
|
@@ -36,5 +36,5 @@ export interface TMTaskFormProps {
|
|
|
36
36
|
onOpenPdfEditorRequest?: (dcmtInfo: Array<DcmtInfo>, refreshDocumentPreview?: () => Promise<void>) => void;
|
|
37
37
|
s4TViewerDialogComponent?: React.ReactNode;
|
|
38
38
|
}
|
|
39
|
-
declare const TMTaskForm: (props: TMTaskFormProps) =>
|
|
39
|
+
declare const TMTaskForm: (props: TMTaskFormProps) => React.JSX.Element;
|
|
40
40
|
export default TMTaskForm;
|
|
@@ -8,7 +8,7 @@ interface TaskFormAssignmentNoticeSectionProps {
|
|
|
8
8
|
users: Array<UserDescriptor>;
|
|
9
9
|
requestMoreInfo?: boolean;
|
|
10
10
|
}
|
|
11
|
-
export declare const TaskFormAssignmentNoticeBadge: (props: TaskFormAssignmentNoticeSectionProps) =>
|
|
11
|
+
export declare const TaskFormAssignmentNoticeBadge: (props: TaskFormAssignmentNoticeSectionProps) => React.JSX.Element | null;
|
|
12
12
|
interface RenderContextBlockParams {
|
|
13
13
|
condition: boolean;
|
|
14
14
|
pdg: PdGs;
|
|
@@ -19,7 +19,7 @@ interface TaskFormContextualAttachmentsProps {
|
|
|
19
19
|
currentTask: TaskDescriptor | undefined;
|
|
20
20
|
taskContext: TaskContext | undefined;
|
|
21
21
|
}
|
|
22
|
-
export declare const TaskFormContextualAttachments: (props: TaskFormContextualAttachmentsProps) =>
|
|
22
|
+
export declare const TaskFormContextualAttachments: (props: TaskFormContextualAttachmentsProps) => React.JSX.Element;
|
|
23
23
|
interface TaskFormAssignedToProps {
|
|
24
24
|
formMode: FormModes;
|
|
25
25
|
formData: TaskDescriptor | undefined;
|
|
@@ -31,7 +31,7 @@ interface TaskFormAssignedToProps {
|
|
|
31
31
|
label?: string;
|
|
32
32
|
onValueChanged: (newValue: Array<number> | undefined) => void;
|
|
33
33
|
}
|
|
34
|
-
export declare const TaskAssigneeField: (props: TaskFormAssignedToProps) =>
|
|
34
|
+
export declare const TaskAssigneeField: (props: TaskFormAssignedToProps) => React.JSX.Element;
|
|
35
35
|
interface RenderFieldBaseProps {
|
|
36
36
|
fieldsReadOnly: IFieldsEditability;
|
|
37
37
|
formDataOrig?: TaskDescriptor;
|
|
@@ -50,12 +50,12 @@ interface RenderDateFieldProps extends RenderFieldProps {
|
|
|
50
50
|
label?: string;
|
|
51
51
|
onContentReady?: () => void;
|
|
52
52
|
}
|
|
53
|
-
export declare const RenderNameField: ({ requestMoreInfo, validationItems, setFormData, formData, formDataOrig, fieldsReadOnly }: RenderFieldProps) =>
|
|
54
|
-
export declare const RenderDescriptionField: ({ validationItems, setFormData, formData, formDataOrig, fieldsReadOnly }: RenderFieldProps) =>
|
|
55
|
-
export declare const RenderPriorityField: ({ formData, formDataOrig, fieldsReadOnly, onPriorityValueChange }: RenderPriorityFieldProps) =>
|
|
56
|
-
export declare const RenderStartDateField: ({ label, validationItems, setFormData, formData, formDataOrig, fieldsReadOnly, onContentReady }: RenderDateFieldProps) =>
|
|
57
|
-
export declare const RenderEndDateField: ({ label, validationItems, setFormData, formData, formDataOrig, fieldsReadOnly, onContentReady }: RenderDateFieldProps) =>
|
|
58
|
-
export declare const RenderRemindDateField: ({ validationItems, setFormData, formData, formDataOrig, fieldsReadOnly }: RenderFieldProps) =>
|
|
53
|
+
export declare const RenderNameField: ({ requestMoreInfo, validationItems, setFormData, formData, formDataOrig, fieldsReadOnly }: RenderFieldProps) => React.JSX.Element;
|
|
54
|
+
export declare const RenderDescriptionField: ({ validationItems, setFormData, formData, formDataOrig, fieldsReadOnly }: RenderFieldProps) => React.JSX.Element;
|
|
55
|
+
export declare const RenderPriorityField: ({ formData, formDataOrig, fieldsReadOnly, onPriorityValueChange }: RenderPriorityFieldProps) => React.JSX.Element;
|
|
56
|
+
export declare const RenderStartDateField: ({ label, validationItems, setFormData, formData, formDataOrig, fieldsReadOnly, onContentReady }: RenderDateFieldProps) => React.JSX.Element;
|
|
57
|
+
export declare const RenderEndDateField: ({ label, validationItems, setFormData, formData, formDataOrig, fieldsReadOnly, onContentReady }: RenderDateFieldProps) => React.JSX.Element;
|
|
58
|
+
export declare const RenderRemindDateField: ({ validationItems, setFormData, formData, formDataOrig, fieldsReadOnly }: RenderFieldProps) => React.JSX.Element;
|
|
59
59
|
interface RenderTaskFormStateFieldProps {
|
|
60
60
|
formDataOrig: TaskDescriptor | undefined;
|
|
61
61
|
formData: TaskDescriptor | undefined;
|
|
@@ -71,7 +71,7 @@ interface TMChangeStateFormProps {
|
|
|
71
71
|
handleShowChangeStateForm: (value: boolean) => void;
|
|
72
72
|
setFormData: React.Dispatch<React.SetStateAction<TaskDescriptor | undefined>>;
|
|
73
73
|
}
|
|
74
|
-
export declare const TMChangeStateForm: (props: TMChangeStateFormProps) =>
|
|
74
|
+
export declare const TMChangeStateForm: (props: TMChangeStateFormProps) => React.JSX.Element;
|
|
75
75
|
type TaskRole = "personal" | "sender" | "receiver";
|
|
76
76
|
type StatusTransitionMap = {
|
|
77
77
|
[key in Task_States]?: Task_States[];
|
|
@@ -15,5 +15,5 @@ interface TMTasksAgendaProps {
|
|
|
15
15
|
handleFocusedRowChange: (row: TaskDescriptor | undefined) => void;
|
|
16
16
|
menuItems: TMContextMenuItemProps[];
|
|
17
17
|
}
|
|
18
|
-
declare const TMTasksAgenda: (props: TMTasksAgendaProps) =>
|
|
18
|
+
declare const TMTasksAgenda: (props: TMTasksAgendaProps) => React.JSX.Element;
|
|
19
19
|
export default TMTasksAgenda;
|
|
@@ -19,5 +19,5 @@ interface TMTasksCalendarProps {
|
|
|
19
19
|
handleFocusedRowChange: (row: TaskDescriptor | undefined) => void;
|
|
20
20
|
menuItems: TMContextMenuItemProps[];
|
|
21
21
|
}
|
|
22
|
-
declare const TMTasksCalendar: (props: TMTasksCalendarProps) =>
|
|
22
|
+
declare const TMTasksCalendar: (props: TMTasksCalendarProps) => React.JSX.Element;
|
|
23
23
|
export default TMTasksCalendar;
|
|
@@ -10,5 +10,5 @@ interface TMTasksHeaderProps {
|
|
|
10
10
|
color?: string;
|
|
11
11
|
height?: string;
|
|
12
12
|
}
|
|
13
|
-
declare const TMTasksHeader: (props: TMTasksHeaderProps) =>
|
|
13
|
+
declare const TMTasksHeader: (props: TMTasksHeaderProps) => React.JSX.Element;
|
|
14
14
|
export default TMTasksHeader;
|
|
@@ -16,5 +16,5 @@ interface TMTasksPanelContentProps {
|
|
|
16
16
|
s4TViewerDialogComponent?: React.ReactNode;
|
|
17
17
|
afterTaskSaved?: (task: TaskDescriptor | undefined, formMode: FormModes | undefined, forceRefresh?: boolean) => Promise<void>;
|
|
18
18
|
}
|
|
19
|
-
declare const TMTasksPanelContent: (props: TMTasksPanelContentProps) =>
|
|
19
|
+
declare const TMTasksPanelContent: (props: TMTasksPanelContentProps) => React.JSX.Element;
|
|
20
20
|
export default TMTasksPanelContent;
|