@topconsultnpm/sdkui-react-beta 6.12.84 → 6.12.86
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/TMInvoiceRetrieveFormats.d.ts +4 -0
- package/lib/components/choosers/TMInvoiceRetrieveFormats.js +22 -0
- package/lib/components/choosers/TMOrderRetrieveFormats.d.ts +4 -0
- package/lib/components/choosers/TMOrderRetrieveFormats.js +22 -0
- package/lib/components/index.d.ts +2 -0
- package/lib/components/index.js +2 -0
- package/lib/helper/Enum_Localizator.d.ts +3 -1
- package/lib/helper/Enum_Localizator.js +23 -1
- package/lib/helper/SDKUI_Globals.d.ts +3 -1
- package/lib/helper/SDKUI_Localizator.d.ts +2 -0
- package/lib/helper/SDKUI_Localizator.js +20 -0
- package/lib/hooks/useDcmtOperations.js +3 -1
- package/lib/ts/types.d.ts +15 -0
- package/package.json +1 -1
@@ -0,0 +1,4 @@
|
|
1
|
+
import { InvoiceRetrieveFormats } from '@topconsultnpm/sdk-ts-beta';
|
2
|
+
import { ITMEnumDataBinding } from '../../ts';
|
3
|
+
declare const TMInvoiceRetrieveFormats: ({ value, valueOrig, onValueChanged, valuesToExclude, label }: ITMEnumDataBinding<InvoiceRetrieveFormats>) => import("react/jsx-runtime").JSX.Element;
|
4
|
+
export default TMInvoiceRetrieveFormats;
|
@@ -0,0 +1,22 @@
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
2
|
+
import { InvoiceRetrieveFormats } from '@topconsultnpm/sdk-ts-beta';
|
3
|
+
import { LocalizeInvoiceRetrieveFormats, SDKUI_Localizator } from '../../helper';
|
4
|
+
import { TMMargin } from '../../utils/theme';
|
5
|
+
import TMDropDown from '../editors/TMDropDown';
|
6
|
+
const TMInvoiceRetrieveFormats = ({ value, valueOrig, onValueChanged, valuesToExclude, label = SDKUI_Localizator.InvoiceRetrieveFormat }) => {
|
7
|
+
const getDataSource = () => {
|
8
|
+
let dataSource = [];
|
9
|
+
for (let item of Object.values(InvoiceRetrieveFormats)) {
|
10
|
+
if (item == InvoiceRetrieveFormats.Original)
|
11
|
+
continue;
|
12
|
+
if (item == InvoiceRetrieveFormats.OriginalUnsigned)
|
13
|
+
continue;
|
14
|
+
if (valuesToExclude?.includes(item))
|
15
|
+
continue;
|
16
|
+
dataSource.push({ value: item, display: LocalizeInvoiceRetrieveFormats(item) });
|
17
|
+
}
|
18
|
+
return dataSource;
|
19
|
+
};
|
20
|
+
return (_jsx(TMDropDown, { label: label, elementStyle: { marginBottom: TMMargin.defultMargin }, dataSource: getDataSource(), value: value, onValueChanged: (e) => { onValueChanged?.(e.target.value); }, isModifiedWhen: value != valueOrig }));
|
21
|
+
};
|
22
|
+
export default TMInvoiceRetrieveFormats;
|
@@ -0,0 +1,4 @@
|
|
1
|
+
import { OrderRetrieveFormats } from '@topconsultnpm/sdk-ts-beta';
|
2
|
+
import { ITMEnumDataBinding } from '../../ts';
|
3
|
+
declare const TMOrderRetrieveFormats: ({ value, valueOrig, onValueChanged, valuesToExclude, label }: ITMEnumDataBinding<OrderRetrieveFormats>) => import("react/jsx-runtime").JSX.Element;
|
4
|
+
export default TMOrderRetrieveFormats;
|
@@ -0,0 +1,22 @@
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
2
|
+
import { OrderRetrieveFormats } from '@topconsultnpm/sdk-ts-beta';
|
3
|
+
import { LocalizeOrderRetrieveFormats, SDKUI_Localizator } from '../../helper';
|
4
|
+
import { TMMargin } from '../../utils/theme';
|
5
|
+
import TMDropDown from '../editors/TMDropDown';
|
6
|
+
const TMOrderRetrieveFormats = ({ value, valueOrig, onValueChanged, valuesToExclude, label = SDKUI_Localizator.OrderRetrieveFormat }) => {
|
7
|
+
const getDataSource = () => {
|
8
|
+
let dataSource = [];
|
9
|
+
for (let item of Object.values(OrderRetrieveFormats)) {
|
10
|
+
if (item == OrderRetrieveFormats.Original)
|
11
|
+
continue;
|
12
|
+
if (item == OrderRetrieveFormats.OriginalUnsigned)
|
13
|
+
continue;
|
14
|
+
if (valuesToExclude?.includes(item))
|
15
|
+
continue;
|
16
|
+
dataSource.push({ value: item, display: LocalizeOrderRetrieveFormats(item) });
|
17
|
+
}
|
18
|
+
return dataSource;
|
19
|
+
};
|
20
|
+
return (_jsx(TMDropDown, { label: label, elementStyle: { marginBottom: TMMargin.defultMargin }, dataSource: getDataSource(), value: value, isModifiedWhen: value != valueOrig, onValueChanged: (e) => { onValueChanged?.(e.target.value); }, width: '100%' }));
|
21
|
+
};
|
22
|
+
export default TMOrderRetrieveFormats;
|
@@ -41,7 +41,9 @@ export * from './choosers/TMDistinctValues';
|
|
41
41
|
export * from './choosers/TMDiskChooser';
|
42
42
|
export * from './choosers/TMDynDataListItemChooser';
|
43
43
|
export * from './choosers/TMDcmtTypeChooser';
|
44
|
+
export * from './choosers/TMInvoiceRetrieveFormats';
|
44
45
|
export * from './choosers/TMMetadataChooser';
|
46
|
+
export * from './choosers/TMOrderRetrieveFormats';
|
45
47
|
export * from './choosers/TMUserChooser';
|
46
48
|
export { default as TMValidationItemsList } from './grids/TMValidationItemsList';
|
47
49
|
export { default as TMBlogs } from './grids/TMBlogs';
|
package/lib/components/index.js
CHANGED
@@ -44,7 +44,9 @@ export * from './choosers/TMDistinctValues';
|
|
44
44
|
export * from './choosers/TMDiskChooser';
|
45
45
|
export * from './choosers/TMDynDataListItemChooser';
|
46
46
|
export * from './choosers/TMDcmtTypeChooser';
|
47
|
+
export * from './choosers/TMInvoiceRetrieveFormats';
|
47
48
|
export * from './choosers/TMMetadataChooser';
|
49
|
+
export * from './choosers/TMOrderRetrieveFormats';
|
48
50
|
export * from './choosers/TMUserChooser';
|
49
51
|
//grids
|
50
52
|
export { default as TMValidationItemsList } from './grids/TMValidationItemsList';
|
@@ -1,11 +1,13 @@
|
|
1
|
-
import { ArchiveConstraints, JobTypes, JoinTypes, MetadataFormats, OwnershipLevels, ParametricFilterTypes, QueryFunctions, QueryOperators, SharingModes, UserLevels } from "@topconsultnpm/sdk-ts-beta";
|
1
|
+
import { ArchiveConstraints, InvoiceRetrieveFormats, JobTypes, JoinTypes, MetadataFormats, OrderRetrieveFormats, OwnershipLevels, ParametricFilterTypes, QueryFunctions, QueryOperators, SharingModes, UserLevels } from "@topconsultnpm/sdk-ts-beta";
|
2
2
|
import { DcmtOperationTypes, FormModes } from "../ts";
|
3
3
|
export declare function LocalizeArchiveConstraints(value: ArchiveConstraints | undefined): "Archivierung nur mit Dateien erlauben" | "Allow file only archiving" | "Permitir solo almacenamientos con archivo" | "Autorise uniquement l'archivage de fichiers" | "Permitir somente depósitos com arquivos" | "Consenti solo archiviazioni con file" | "Alles zulassen" | "Allow everything" | "Permitir todo" | "Autorise tout" | "Permitir que todos" | "Consenti tutto" | "Nur Methadatenarchivierung erlauben" | "Allow metadata only archiving" | "Permitir solo almacenamiento de metadatos" | "Autorise uniquement l'archivage de métadonnées" | "Permitir somente os metadados de arquivamento" | "Consenti solo archiviazioni di metadati";
|
4
4
|
export declare function LocalizeDcmtOperationTypes(value: DcmtOperationTypes | undefined): string;
|
5
5
|
export declare function LocalizeFormModes(value: FormModes | undefined): "Erstellen" | "Create" | "Crear" | "Créer" | "Criar" | "Crea" | "Duplikat" | "Duplicate" | "Duplicar" | "Dupliquer" | "Duplicado" | "Duplica" | "Nur Lesen" | "Read only" | "Solo lectura" | "En lecture seule" | "Somente leitura" | "Solo lettura" | "Bearbeiten" | "Update" | "Modificar" | "Modifie" | "Modificação" | "Modifica" | "None" | "Niemand" | "Ninguno" | "Aucun" | "Nenhum" | "Nessuno";
|
6
|
+
export declare function LocalizeInvoiceRetrieveFormats(value: InvoiceRetrieveFormats): string;
|
6
7
|
export declare function LocalizeJobTypes(value: JobTypes | undefined): string;
|
7
8
|
export declare function LocalizeMetadataFormats(value: MetadataFormats): string;
|
8
9
|
export declare function LocalizeOwnershipLevels(value: OwnershipLevels | undefined): string | undefined;
|
10
|
+
export declare function LocalizeOrderRetrieveFormats(value: OrderRetrieveFormats): string;
|
9
11
|
export declare function LocalizeParametricFilterTypes(value: ParametricFilterTypes | undefined): "Personalisierter Ausdruck" | "Custom expression" | "Expresión personalizada" | "Expression personnalisée" | "Expressão personalizado" | "Espressione personalizzata" | "Filtern nach {@UserID}" | "Filter on {@UserID}" | "Filtro en {@UserID}" | "Filtre sur {@UserID}" | "Filtre on {@UserID}" | "Filtro su {@UserID}" | "Filtern nach {@Benutzername} (=)" | "Filter on {@UserName} (=)" | "Filtro en {@UserName} (=)" | "Filtre sur {@UserName} (=)" | "Filtre on {@UserName} (=)" | "Filtro su {@UserName} (=)" | "Filter nach {@Benutzername} (Enthält)" | "Filter on {@UserName} (Contains)" | "Filtro en {@UserName} (Contiene)" | "Filtre sur {@UserName} (Contient)" | "Filtre on {@UserName} (Contém)" | "Filtro su {@UserName} (Contiene)" | "None" | "Niemand" | "Ninguno" | "Aucun" | "Nenhum" | "Nessuno";
|
10
12
|
export declare function LocalizeQueryFunctions(value: QueryFunctions | undefined): "Zählen" | "Count" | "Contar" | "Compte" | "Contagem" | "Conta" | "" | "None" | "Niemand" | "Ninguno" | "Aucun" | "Nenhum" | "Nessuno" | "Max" | "Höchstwert" | "Máximo" | "Massimo" | "Min" | "Mindestwert" | "Mínimo" | "Minimo" | "Sum" | "Summe" | "Suma" | "Somme" | "Soma" | "Somma";
|
11
13
|
export declare function LocalizeQueryJoinTypes(value: JoinTypes | undefined): string;
|
@@ -1,4 +1,4 @@
|
|
1
|
-
import { ArchiveConstraints, CultureIDs, JobTypes, JoinTypes, MetadataFormats, OwnershipLevels, ParametricFilterTypes, QueryFunctions, QueryOperators, SDK_Globals, SDK_Localizator, SharingModes, UserLevels } from "@topconsultnpm/sdk-ts-beta";
|
1
|
+
import { ArchiveConstraints, CultureIDs, InvoiceRetrieveFormats, JobTypes, JoinTypes, MetadataFormats, OrderRetrieveFormats, OwnershipLevels, ParametricFilterTypes, QueryFunctions, QueryOperators, SDK_Globals, SDK_Localizator, SharingModes, UserLevels } from "@topconsultnpm/sdk-ts-beta";
|
2
2
|
import { SDKUI_Localizator } from "./SDKUI_Localizator";
|
3
3
|
import { DcmtOperationTypes, FormModes } from "../ts";
|
4
4
|
export function LocalizeArchiveConstraints(value) {
|
@@ -38,6 +38,18 @@ export function LocalizeFormModes(value) {
|
|
38
38
|
case FormModes.ReadOnly: return SDKUI_Localizator.ReadOnly;
|
39
39
|
}
|
40
40
|
}
|
41
|
+
export function LocalizeInvoiceRetrieveFormats(value) {
|
42
|
+
switch (value) {
|
43
|
+
case InvoiceRetrieveFormats.None: return SDKUI_Localizator.Formats_None;
|
44
|
+
case InvoiceRetrieveFormats.SDI_HTML: return SDKUI_Localizator.FEFormats_SDI_HTML;
|
45
|
+
case InvoiceRetrieveFormats.SDI_PDF: return SDKUI_Localizator.FEFormats_SDI_PDF;
|
46
|
+
case InvoiceRetrieveFormats.ASW_HTML: return SDKUI_Localizator.FEFormats_ASW_HTML;
|
47
|
+
case InvoiceRetrieveFormats.ASW_PDF: return SDKUI_Localizator.FEFormats_ASW_PDF;
|
48
|
+
case InvoiceRetrieveFormats.ASWEX_HTML: return SDKUI_Localizator.FEFormats_ASWEX_HTML;
|
49
|
+
case InvoiceRetrieveFormats.ASWEX_PDF: return SDKUI_Localizator.FEFormats_ASWEX_PDF;
|
50
|
+
default: return String(value);
|
51
|
+
}
|
52
|
+
}
|
41
53
|
export function LocalizeJobTypes(value) {
|
42
54
|
let cultureID = SDK_Globals.tmSession?.SessionDescr?.cultureID ?? CultureIDs.It_IT;
|
43
55
|
switch (value) {
|
@@ -100,6 +112,16 @@ export function LocalizeOwnershipLevels(value) {
|
|
100
112
|
default: return value?.toString();
|
101
113
|
}
|
102
114
|
}
|
115
|
+
export function LocalizeOrderRetrieveFormats(value) {
|
116
|
+
switch (value) {
|
117
|
+
case OrderRetrieveFormats.None: return SDKUI_Localizator.Formats_None;
|
118
|
+
case OrderRetrieveFormats.ER_HTML: return SDKUI_Localizator.UBLViewFormats_ER_HTML;
|
119
|
+
case OrderRetrieveFormats.ER_PDF: return SDKUI_Localizator.UBLViewFormats_ER_PDF;
|
120
|
+
case OrderRetrieveFormats.NSO_HTML: return SDKUI_Localizator.FEFormats_ASW_HTML;
|
121
|
+
case OrderRetrieveFormats.NSO_PDF: return SDKUI_Localizator.UBLViewFormats_NSO_PDF;
|
122
|
+
default: return String(value);
|
123
|
+
}
|
124
|
+
}
|
103
125
|
export function LocalizeParametricFilterTypes(value) {
|
104
126
|
switch (value) {
|
105
127
|
case undefined:
|
@@ -1,4 +1,4 @@
|
|
1
|
-
import { UserAppSettings } from "@topconsultnpm/sdk-ts-beta";
|
1
|
+
import { InvoiceRetrieveFormats, OrderRetrieveFormats, UserAppSettings } from "@topconsultnpm/sdk-ts-beta";
|
2
2
|
export declare class SDKUI_Globals {
|
3
3
|
static userAppSettings: UserAppSettings | undefined;
|
4
4
|
private static _dataGridShowRowLines;
|
@@ -10,4 +10,6 @@ export declare class SDKUI_Globals {
|
|
10
10
|
static set dataGridShowColumnLines(theDataGridShowColumnLines: boolean | undefined);
|
11
11
|
static get dataGridUseNativeScrollbar(): boolean | undefined;
|
12
12
|
static set dataGridUseNativeScrollbar(theDataGridUseNativeScrollbar: boolean | undefined);
|
13
|
+
static invoiceRetrieveFormat: InvoiceRetrieveFormats | undefined;
|
14
|
+
static orderRetrieveFormat: OrderRetrieveFormats | undefined;
|
13
15
|
}
|
@@ -180,6 +180,7 @@ export declare class SDKUI_Localizator {
|
|
180
180
|
static get Interrupt(): "Unterbrechen" | "Interrupt" | "interrumpir" | "Interrompre" | "Interromper" | "Interrompere";
|
181
181
|
static get Interval(): "Intervall" | "Interval" | "Intervalo" | "Intervalle" | "Intervallo";
|
182
182
|
static get Invalid_File(): "Ungültige datei" | "Invalid file" | "Archivo inválido" | "Fichier non valide" | "Arquivo inválido" | "File non valido";
|
183
|
+
static get InvoiceRetrieveFormat(): "Exportieren Sie die Rechnung im folgenden Format" | "Export invoice in the following format" | "Exportar la factura en el siguiente formato" | "Exportez la facture au format suivant" | "Exporte a fatura no seguinte formato" | "Esporta la fattura nel seguente formato";
|
183
184
|
static get LastUpdateTime(): "Letzte Änderung" | "Last update Time" | "Última modificación" | "Dernière modifie" | "Última modificação" | "Ultima modifica";
|
184
185
|
static get LastVersion(): string;
|
185
186
|
static get Latest(): string;
|
@@ -244,6 +245,7 @@ export declare class SDKUI_Localizator {
|
|
244
245
|
static get Options(): "Optionen" | "Options" | "Opciones" | "Opções" | "Opzioni";
|
245
246
|
static get OTPSent(): "Der OTP-Code wurde an gesendet " | "OTP code has been sent to " | "El código OTP ha sido enviado a " | "Le code OTP a été envoyé à " | "O código OTP foi enviado para " | "Il codice OTP è stato inviato a ";
|
246
247
|
static get OTPNewRequest(): "Wenn Sie noch kein OTP erhalten haben, können Sie ein neues OTP anfordern " | "If You haven't received OTP yet, you can request a new OTP in " | "Si aún no ha recibido OTP, puede solicitar una nueva OTP en " | "Ii vous n'avez pas encore reçu d'OTP, vous pouvez demander un nouvel OTP en " | "Se você ainda não recebeu o OTP, poderá solicitar um novo OTP em " | "Se non hai ancora ricevuto la OTP, puoi richiederne una nuova entro";
|
248
|
+
static get OrderRetrieveFormat(): "Exportieren Sie die Bestellung im folgenden Format" | "Export order in the following format" | "Exportar orden en el siguiente formato." | "Exportez la commande au format suivant" | "Exporte ordem no seguinte formato" | "Esporta l'ordine nel seguente formato";
|
247
249
|
static get OverwritingCanceled(): "Überschreiben wird abgebrochen" | "Overwriting is canceled" | "La sobrescritura está cancelada" | "L'écrasement est annulé" | "A substituição foi cancelada" | "La sovrascrittura è annullata";
|
248
250
|
static get OwnerID(): "Eigentümer-ID" | "Owner ID" | "ID propietario" | "ID propriétaire" | "ID proprietário" | "ID proprietario";
|
249
251
|
static get OwnerName(): "Eigentümer" | "Owner" | "Propietario" | "Propriétaire" | "Proprietário" | "Proprietario";
|
@@ -1760,6 +1760,16 @@ export class SDKUI_Localizator {
|
|
1760
1760
|
default: return "File non valido";
|
1761
1761
|
}
|
1762
1762
|
}
|
1763
|
+
static get InvoiceRetrieveFormat() {
|
1764
|
+
switch (this._cultureID) {
|
1765
|
+
case CultureIDs.De_DE: return "Exportieren Sie die Rechnung im folgenden Format";
|
1766
|
+
case CultureIDs.En_US: return "Export invoice in the following format";
|
1767
|
+
case CultureIDs.Es_ES: return "Exportar la factura en el siguiente formato";
|
1768
|
+
case CultureIDs.Fr_FR: return "Exportez la facture au format suivant";
|
1769
|
+
case CultureIDs.Pt_PT: return "Exporte a fatura no seguinte formato";
|
1770
|
+
default: return "Esporta la fattura nel seguente formato";
|
1771
|
+
}
|
1772
|
+
}
|
1763
1773
|
static get LastUpdateTime() {
|
1764
1774
|
switch (this._cultureID) {
|
1765
1775
|
case CultureIDs.De_DE: return "Letzte Änderung";
|
@@ -2391,6 +2401,16 @@ export class SDKUI_Localizator {
|
|
2391
2401
|
default: return "Se non hai ancora ricevuto la OTP, puoi richiederne una nuova entro";
|
2392
2402
|
}
|
2393
2403
|
}
|
2404
|
+
static get OrderRetrieveFormat() {
|
2405
|
+
switch (this._cultureID) {
|
2406
|
+
case CultureIDs.De_DE: return "Exportieren Sie die Bestellung im folgenden Format";
|
2407
|
+
case CultureIDs.En_US: return "Export order in the following format";
|
2408
|
+
case CultureIDs.Es_ES: return "Exportar orden en el siguiente formato.";
|
2409
|
+
case CultureIDs.Fr_FR: return "Exportez la commande au format suivant";
|
2410
|
+
case CultureIDs.Pt_PT: return "Exporte ordem no seguinte formato";
|
2411
|
+
default: return "Esporta l'ordine nel seguente formato";
|
2412
|
+
}
|
2413
|
+
}
|
2394
2414
|
static get OverwritingCanceled() {
|
2395
2415
|
switch (this._cultureID) {
|
2396
2416
|
case CultureIDs.De_DE: return "Überschreiben wird abgebrochen";
|
@@ -2,7 +2,7 @@ import { useState } from 'react';
|
|
2
2
|
import { LocalizeDcmtOperationTypes } from '../helper/Enum_Localizator';
|
3
3
|
import { SDK_Globals, RetrieveFileOptions, DcmtOpers, ResultTypes, RecentCategories, MetadataDataTypes, MetadataDataDomains, DataListCacheService } from '@topconsultnpm/sdk-ts-beta';
|
4
4
|
import { ShowAlert, TMResultManager, FormulaHelper, TMExceptionBoxManager, TMSpinner } from '../components';
|
5
|
-
import { Globalization, getExceptionMessage, dialogConfirmOperation, extensionHandler, downloadBase64File } from '../helper';
|
5
|
+
import { Globalization, getExceptionMessage, dialogConfirmOperation, extensionHandler, downloadBase64File, SDKUI_Globals } from '../helper';
|
6
6
|
import { DcmtOperationTypes, DownloadTypes, FileExtensionHandler } from '../ts';
|
7
7
|
import { useFileDialog } from './useInputDialog';
|
8
8
|
import { isXMLFileExt } from '../helper/dcmtsHelper';
|
@@ -35,6 +35,8 @@ export function useDcmtOperations() {
|
|
35
35
|
abortController = new AbortController();
|
36
36
|
const rfo = new RetrieveFileOptions();
|
37
37
|
rfo.retrieveReason = DcmtOpers.ShowFile;
|
38
|
+
rfo.invoiceRetrieveFormat = SDKUI_Globals.invoiceRetrieveFormat;
|
39
|
+
rfo.orderRetrieveFormat = SDKUI_Globals.orderRetrieveFormat;
|
38
40
|
let result = [];
|
39
41
|
setWaitPanelMaxValuePrimary(inputDcmts.length);
|
40
42
|
let firstBlock = true;
|
package/lib/ts/types.d.ts
CHANGED
@@ -81,6 +81,21 @@ export type TaskContext = {
|
|
81
81
|
name: string;
|
82
82
|
};
|
83
83
|
};
|
84
|
+
export interface ITMUIElement {
|
85
|
+
label?: string;
|
86
|
+
elementStyle?: React.CSSProperties;
|
87
|
+
width?: string;
|
88
|
+
height?: string;
|
89
|
+
}
|
90
|
+
export interface ITMDataBinding<T> extends ITMUIElement {
|
91
|
+
value: T | undefined;
|
92
|
+
valueOrig: T | undefined;
|
93
|
+
onValueChanged: (newValue: T) => void;
|
94
|
+
validationItems?: ValidationItem[];
|
95
|
+
}
|
96
|
+
export interface ITMEnumDataBinding<T> extends ITMDataBinding<T> {
|
97
|
+
valuesToExclude?: T[];
|
98
|
+
}
|
84
99
|
export interface ITMSaveFormProps<T> extends ITMSaveFormBaseProps {
|
85
100
|
/** Notifica al parent il nuovo descrittore appena salvato */
|
86
101
|
onSaved?: (newDescriptor: T) => void;
|