import { GenericList, IGenericListConfiguration } from '.';
export interface IGenericCudListConfiguration<ET> extends IGenericListConfiguration {
    idField?: string;
    nameField?: string;
    /** Returns default item to use for new entries. */
    defaultItem: () => ET;
    /** Validate given item. Return boolean true for valid item or string error. */
    validateItem?: (item: ET) => boolean | string;
    /** Transform given item into item suitable for serialization to server. */
    serverItem?: (item: ET) => unknown;
    endpointPost?: string;
    endpointPut?: string;
    endpointDelete?: string;
    endpointRestore?: string;
}
export declare class GenericCudList<T, ET> extends GenericList<T> {
    cudConfiguration: IGenericCudListConfiguration<ET>;
    constructor(cudConfiguration: IGenericCudListConfiguration<ET>);
    /** Set in case of Create Update Delete error. Prefer using specialized error fields per mode. */
    cudError?: Error | string;
    setCudError(value?: Error | string): void;
    /** Might be set in case custom validation method returned error message. */
    validationError?: string;
    setValidationError(value?: string): void;
    /** Set in case of CUD error or validation error (latter only when in update mode). */
    get hasCudOrValidationError(): boolean;
    /** Set after error in create mode. */
    get createError(): string | Error | undefined;
    /** Set after error in update mode. */
    get updateError(): string | Error | undefined;
    /** Set after error in delete mode. */
    get deleteError(): string | Error | undefined;
    /** Set after error in restore mode. */
    get restoreError(): string | Error | undefined;
    /** Set to editable item when in create or update mode. */
    editableItem?: ET;
    setEditableItem(value?: ET): void;
    /** Set to original editable item when starting update mode. */
    editableItemUnmodified?: ET;
    setEditableItemUnmodified(value?: ET): void;
    /** Set to item when in delete mode. */
    deleteItem?: T;
    setDeleteItem(value?: T): void;
    /** Set with data of just deleted item. */
    deletedItem?: T;
    setDeletedItem(value?: T): void;
    /** Set with data of newly created item. */
    createdItem?: T;
    setCreatedItem(value?: T): void;
    /** Set to item when in restore mode. */
    restoreItem?: T;
    setRestoreItem(value?: T): void;
    /** Set with data of just restored item. */
    restoredItem?: T;
    setRestoredItem(value?: T): void;
    /** Start create mode for item. */
    create: (template?: ET) => void;
    /** Start update mode for given item. */
    update(entity: ET | T): void;
    /** Start delete mode for given item. */
    delete(entity: T): void;
    /** Start restore mode for given item. */
    restore(entity: T): void;
    /** Cancel any mode we are currently in (create, update, delete, restore). Using lambda syntax here so we can directly hook this method to onClick/onChange like events of user interface. */
    cancel: () => void;
    /** True if in create mode. */
    get isCreate(): boolean;
    /** True if in update mode. */
    get isUpdate(): boolean;
    /** True if in delete mode. */
    get isDelete(): boolean;
    /** True if in restore mode. */
    get isRestore(): boolean;
    /** True is editable data was changed while in update mode. */
    get isModified(): boolean;
    /** True if editable data contains valid data while in create or update mode. */
    get isValidated(): boolean | undefined;
    /** Perform actual create or update operation of item set in create or update mode. */
    save(): Promise<boolean>;
    /** Perform actual delete operation of item previously set in delete mode. */
    deleteConfirmed(): Promise<boolean>;
    /** Perform actual restore operation of item previously set in restore mode. */
    restoreConfirmed(): Promise<boolean>;
    /** Return id of given item using settings provided in provided @see IGenericCudListConfiguration. */
    idForItem(item: T | ET): string | number | undefined;
    /** Return name of given item using settings provided in provided @see IGenericCudListConfiguration. */
    nameForItem(item: T | ET): string | number | undefined;
}
