import { ObservableMap } from 'mobx';
import DataSet, { RecordValidationErrors } from './DataSet';
import Field, { FieldProps, Fields } from './Field';
import DataSetSnapshot from './DataSetSnapshot';
import { RecordStatus } from './enum';
export default class Record {
    id: number;
    dataSet?: DataSet;
    fields: Fields;
    memo?: object;
    prepareForReport?: {
        result?: boolean;
        timeout?: number;
    } | undefined;
    dataSetSnapshot?: {
        [key: string]: DataSetSnapshot;
    } | undefined;
    cascadeRecordsMap?: {
        [key: string]: Record[];
    } | undefined;
    cascading?: {
        [key: string]: boolean;
    } | undefined;
    validating?: boolean | undefined;
    data: object;
    dirtyData?: ObservableMap<string, any> | undefined;
    get pristineData(): object;
    set pristineData(data: object);
    status: RecordStatus;
    get selectable(): boolean;
    set selectable(selectable: boolean);
    get isDataSetInAllPageSelection(): boolean;
    get isSelected(): boolean;
    set isSelected(isSelected: boolean);
    isCurrent?: boolean;
    isCached?: boolean;
    editing?: boolean;
    pending?: boolean;
    childrenLoaded?: boolean;
    state?: ObservableMap<string, any> | undefined;
    private $children;
    private $parent;
    get key(): string | number;
    get index(): number;
    get indexInParent(): number;
    get isRemoved(): boolean;
    get isNew(): boolean;
    get isSelectionIndeterminate(): boolean;
    get isIndeterminate(): boolean;
    get isExpanded(): boolean;
    set isExpanded(expand: boolean);
    get previousRecord(): Record | undefined;
    get nextRecord(): Record | undefined;
    get records(): Record[];
    get children(): Record[] | undefined;
    set children(children: Record[] | undefined);
    get parent(): Record | undefined;
    set parent(parent: Record | undefined);
    get parents(): Record[];
    get path(): Record[];
    get level(): number;
    get dirty(): boolean;
    get cascadeParent(): Record | undefined;
    constructor(data?: object, dataSet?: DataSet, status?: RecordStatus);
    /**
     * 转换成普通数据
     * 一般用于父级联数据源中的json类型字段
     * 禁止通过此方法获取某一个或几个字段值
     */
    toData(needIgnore?: boolean, noCascade?: boolean, isCascadeSelect?: boolean, all?: boolean): any;
    /**
     * 转换成用于提交的数据
     */
    toJSONData(noCascade?: boolean, isCascadeSelect?: boolean): any;
    validate(all?: boolean, noCascade?: boolean): Promise<boolean>;
    reportValidity(result: boolean): void;
    getValidationErrors(): RecordValidationErrors[];
    getField(fieldName?: string): Field | undefined;
    getCascadeRecordsIncludeDelete(fieldName?: string): Record[] | undefined;
    getCascadeRecords(fieldName?: string): Record[] | undefined;
    getCascadeSelectedRecordsIncludeDelete(fieldName?: string): Record[] | undefined;
    getCascadeSelectedRecords(fieldName?: string): Record[] | undefined;
    get(fieldName?: string | string[]): any;
    set(item: string | object, value?: any): Record;
    getPristineValue(fieldName?: string): any;
    init(item: string | object, value?: any): Record;
    clone(): Record;
    ready(): Promise<any>;
    tls(name?: string): Promise<void>;
    reset(): Record;
    save(): Record;
    restore(): Record;
    clear(): Record;
    commit(data?: object, dataSet?: DataSet): Record;
    setState(item: string | object, value?: any): this;
    getState(key: string): any;
    treeReduce<U>(fn: (previousValue: U, record: Record) => U, initialValue: U): U;
    private commitTls;
    private initFields;
    addField(name: string, fieldProps?: FieldProps): Field;
    private processFieldValue;
    private processData;
    private normalizeData;
    private normalizeCascadeData;
}
