import { L10n } from '@syncfusion/ej2-base';
import { IGrid, IAction, NotifyArgs, IEdit } from '../base/interface';
import { EditRender } from '../renderer/edit-renderer';
import { ServiceLocator } from '../services/service-locator';
import { Column } from '../models/column';
import { Dialog } from '@syncfusion/ej2-popups';
import { FormValidator } from '@syncfusion/ej2-inputs';
/**
 * The `Edit` module is used to handle editing actions.
 */
export declare class Edit implements IAction {
    protected renderer: EditRender;
    /** @hidden */
    editModule: IEdit;
    /** @hidden */
    formObj: FormValidator;
    /** @hidden */
    virtualFormObj: FormValidator;
    /** @hidden */
    isShowAddedRowValidate: boolean;
    private static editCellType;
    private editType;
    protected parent: IGrid;
    protected serviceLocator: ServiceLocator;
    protected l10n: L10n;
    dialogObj: Dialog;
    private fieldname;
    private data;
    alertDObj: Dialog;
    private actionBeginFunction;
    private actionCompleteFunction;
    private onDataBoundFunction;
    private preventObj;
    private eventDetails;
    isLastRow?: boolean;
    deleteRowUid: string;
    editCellDialogClose: boolean;
    /**
     * Constructor for the Grid editing module
     *
     * @param {IGrid} parent - specifies the IGrid
     * @param {ServiceLocator} serviceLocator - specifies the servicelocator
     * @hidden
     */
    constructor(parent?: IGrid, serviceLocator?: ServiceLocator);
    private updateColTypeObj;
    /**
     * For internal use only - Get the module name.
     *
     * @returns {string} returns the module name
     * @private
     */
    protected getModuleName(): string;
    /**
     * @param {NotifyArgs} e - specifies the notifyargs
     * @returns {void}
     * @hidden
     */
    onPropertyChanged(e: NotifyArgs): void;
    private updateEditObj;
    private initialEnd;
    /**
     * Edits any bound record in the Grid by TR element.
     *
     * @param {HTMLTableRowElement} tr - Defines the table row to be edited.
     * @returns {void}
     */
    startEdit(tr?: HTMLTableRowElement): void;
    /**
     * @param {Element} tr - specifies the tr element
     * @param {object} args - specifies the object
     * @param {Element} args.row -specfifes the row
     * @param {string} args.requestType - specifies the request type
     * @returns {void}
     * @hidden
     */
    checkLastRow(tr: Element, args?: {
        row?: Element;
        requestType?: string;
    }): void;
    /**
     * Cancels edited state.
     *
     * @returns {void}
     */
    closeEdit(): void;
    protected refreshToolbar(): void;
    /**
     * To adds a new row at the top with the given data. When data is not passed, it will add empty rows.
     * > `editSettings.allowEditing` should be true.
     *
     * @param {Object} data - Defines the new add record data.
     * @param {number} index - Defines the row index to be added
     * @returns {void}
     */
    addRecord(data?: Object, index?: number): void;
    /**
     * Deletes a record with the given options. If fieldname and data are not given, the Grid will delete the selected record.
     * > `editSettings.allowDeleting` should be true.
     *
     * @param {string} fieldname - Defines the primary key field name of the column.
     * @param {Object} data - Defines the JSON data record to be deleted.
     * @returns {void}
     */
    deleteRecord(fieldname?: string, data?: Object): void;
    /**
     * Deletes a visible row by TR element.
     *
     * @param {HTMLTableRowElement} tr - Defines the table row element.
     * @returns {void}
     */
    deleteRow(tr: HTMLTableRowElement): void;
    /**
     * If Grid is in editable state, you can save a record by invoking endEdit.
     *
     * @returns {void}
     */
    endEdit(): void;
    /**
     * To update the specified cell by given value without changing into edited state.
     *
     * @param {number} rowIndex Defines the row index.
     * @param {string} field Defines the column field.
     * @param {string | number | boolean | Date} value - Defines the value to be changed.
     * @returns {void}
     */
    updateCell(rowIndex: number, field: string, value: string | number | boolean | Date): void;
    /**
     * To update the specified row by given values without changing into edited state.
     *
     * @param {number} index Defines the row index.
     * @param {Object} data Defines the data object to be updated.
     * @returns {void}
     */
    updateRow(index: number, data: Object): void;
    /**
     * Resets added, edited, and deleted records in the batch mode.
     *
     * @returns {void}
     */
    batchCancel(): void;
    /**
     * Bulk saves added, edited, and deleted records in the batch mode.
     *
     * @returns {void}
     */
    batchSave(): void;
    /**
     * Changes a particular cell into edited state based on the row index and field name provided in the `batch` mode.
     *
     * @param {number} index - Defines row index to edit a particular cell.
     * @param {string} field - Defines the field name of the column to perform batch edit.
     * @returns {void}
     */
    editCell(index: number, field: string): void;
    /**
     * Checks the status of validation at the time of editing. If validation is passed, it returns true.
     *
     * @returns {boolean} returns whether the form is validated
     */
    editFormValidate(): boolean;
    /**
     * Gets the added, edited,and deleted data before bulk save to the DataSource in batch mode.
     *
     * @returns {Object} returns the Object
     */
    getBatchChanges(): Object;
    /**
     * Gets the current value of the edited component.
     *
     * @returns {Object} returns the Object
     */
    getCurrentEditCellData(): Object;
    /**
     * Saves the cell that is currently edited. It does not save the value to the DataSource.
     *
     * @returns {void}
     */
    saveCell(): void;
    private endEditing;
    private showDialog;
    getValueFromType(col: Column, value: string | Date | boolean): number | string | Date | boolean;
    private destroyToolTip;
    private createConfirmDlg;
    private createAlertDlg;
    private alertClick;
    private dlgWidget;
    private dlgCancel;
    private dlgOk;
    private destroyEditComponents;
    /**
     * @returns {void}
     * @hidden
     */
    addEventListener(): void;
    /**
     * @returns {void}
     * @hidden
     */
    removeEventListener(): void;
    private actionComplete;
    /**
     * @param {Element} form - specifies the element
     * @param {Object} editedData - specifies the edited data
     * @returns {Object} returns the object
     * @hidden
     */
    getCurrentEditedData(form: Element, editedData: Object): Object;
    private getValue;
    /**
     * @param {NotifyArgs} e - specifies the NotifyArgs
     * @returns {void}
     * @hidden
     */
    onActionBegin(e: NotifyArgs): void;
    /**
     * @param {Column[]} cols - specfies the column
     * @returns {void}
     * @hidden
     */
    destroyWidgets(cols?: Column[]): void;
    /**
     * @returns {void}
     * @hidden
     */
    destroyForm(): void;
    /**
     * To destroy the editing.
     *
     * @returns {void}
     * @hidden
     */
    destroy(): void;
    private keyPressHandler;
    private curretRowFocus;
    private preventBatch;
    private executeAction;
    /**
     * @param {Column[]} cols - specifies the column
     * @param {Object} newRule - specifies the new rule object
     * @returns {void}
     * @hidden
     */
    applyFormValidation(cols?: Column[], newRule?: Object): void;
    /**
     * @param {HTMLFormElement} form - Defined Form element
     * @param {Object} rules - Defines form rules
     * @returns {FormValidator} Returns formvalidator instance
     * @hidden
     */
    createFormObj(form: HTMLFormElement, rules: Object): FormValidator;
    private valErrorPlacement;
    private getElemTable;
    resetElemPosition(elem: HTMLElement, args: {
        status: string;
        inputName: string;
        element: HTMLElement;
        message: string;
    }): void;
    private validationComplete;
    private createTooltip;
    /**
     * @param {Column} col - specfies the column
     * @returns {boolean} returns the whether column is grouped
     * @hidden
     */
    checkColumnIsGrouped(col: Column): boolean;
    /**
     * @param {object} editors -specfies the editors
     * @returns {void}
     * @hidden
     */
    static AddEditors(editors: object): void;
}
