class FieldsStore {
    constructor(fields = {}) {
        this.fields = fields;
    }
    setFields(fields) {
        Object.assign(this.fields, fields);
    }
    updateFields(fields) {
        this.fields = fields;
    }
    clearField(name) {
        delete this.fields[name];
    }
    getValueFromFields(name, fields) {
        const field = fields[name];
        if (field && 'value' in field) {
            return field.value;
        }
        return field.initialValue;
    }
    getAllFieldsName() {
        const { fields } = this;
        return fields ? Object.keys(fields) : [];
    }
    getField(name) {
        return {
            ...this.fields[name],
            name
        };
    }
    getFieldValuePropValue(fieldOption) {
        const { name, valuePropName } = fieldOption;
        const field = this.getField(name);
        const fieldValue = 'value' in field ? field.value : field.initialValue;
        return {
            [valuePropName]: fieldValue
        };
    }
    getFieldValue(name) {
        return this.getValueFromFields(name, this.fields);
    }
    getFieldsValue(names) {
        const fields = names || this.getAllFieldsName();
        return fields.reduce((acc, name) => {
            acc[name] = this.getFieldValue(name);
            return acc;
        }, {});
    }
    resetFields(ns) {
        const { fields } = this;
        const names = ns || this.getAllFieldsName();
        return names.reduce((acc, name) => {
            const field = fields[name];
            if (field) {
                acc[name] = field.initialValue;
            }
            return acc;
        }, {});
    }
}
export default function createFieldsStore(fields) {
    return new FieldsStore(fields);
}
