import { ObservableMap } from 'mobx';
import DataSet 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;
    dataSetSnapshot: {
        [key: string]: DataSetSnapshot;
    };
    cascadeRecordsMap: {
        [key: string]: Record[];
    };
    cascading: {};
    data: object;
    dirtyData: ObservableMap<string, any>;
    get pristineData(): object;
    set pristineData(data: object);
    status: RecordStatus;
    selectable: boolean;
    isSelected: boolean;
    isCurrent: boolean;
    isCached: boolean;
    editing?: boolean;
    pending?: boolean;
    childrenLoaded?: boolean;
    state: ObservableMap<string, any>;
    get key(): string | number;
    get index(): number;
    get indexInParent(): number;
    get isRemoved(): boolean;
    get isNew(): 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;
    get 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);
    toData(needIgnore?: boolean, noCascade?: boolean, isCascadeSelect?: boolean, all?: boolean): any;
    toJSONData(noCascade?: boolean, isCascadeSelect?: boolean): any;
    validate(all?: boolean, noCascade?: boolean): Promise<boolean>;
    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): 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 getSortedFields;
    private processData;
    private normalizeData;
    private normalizeCascadeData;
}
