UNPKG

10.4 kBSource Map (JSON)View Raw
1{"version":3,"file":"index.cjs.js","sources":["../src/action.js","../src/forms.js","../src/lib.js","../src/reducer.js","../src/selector.js","../src/index.js"],"sourcesContent":["import { startsWith } from \"lodash\";\nexport const PREFIX = \"@FORM\";\n\nexport function isForm(action = {}) {\n const { key, type } = action;\n return key && startsWith(type, PREFIX);\n}\n\n// rest form\nexport const RESET = \"RESET\";\n// form field change\nexport const CHANGE_FIELD = \"CHANGE_FIELD\";\n// change mutil-fields\nexport const CHANGE_MUTIL_FIELDS = \"CHANGE_MUTIL_FIELDS\";\n// register field\nexport const REGISTER_FIELD = \"REGISTER_FIELD\";\n// register mutil-fields\nexport const REGISTER_MUTIL_FIELDS = \"REGISTER_MUTIL_FIELDS\";\n\nexport const Types = {\n reset: `${PREFIX}/${RESET}`,\n registerField: `${PREFIX}/${REGISTER_FIELD}`,\n registerMutilFields: `${PREFIX}/${REGISTER_MUTIL_FIELDS}`,\n changeField: `${PREFIX}/${CHANGE_FIELD}`,\n changeMutilFields: `${PREFIX}/${CHANGE_MUTIL_FIELDS}`,\n};\n","export const Forms = new Map();\n\nexport function registerForm(form) {\n Forms.set(form.key, form);\n}\n","import { camelCase } from \"lodash\";\n\n/**\n * camel case key\n * @param {String} key\n */\nexport const camelCaseKey = key => {\n return key\n .split(\".\")\n .map(k => camelCase(k))\n .join(\".\");\n};\n","import { isForm, Types } from \"./action\";\nimport { setWith, clone, get } from \"lodash\";\nimport { Forms } from \"./forms\";\n\n/**\n * field init state\n */\nexport const initFieldState = {\n name: undefined, //field name\n dirty: false, // is dirty\n touched: false, // is touched\n value: undefined, // field value\n validating: undefined, // is validating\n errors: undefined, // validate errors\n};\n\nexport const initState = {\n fields: {},\n meta: {},\n};\n\nfunction registerField(fields = {}, name, initialValue) {\n const originalField = get(fields, name);\n\n // if name had registered, register action lose efficacy\n if (originalField) {\n return fields;\n }\n\n const filedState = { ...initFieldState, name, value: initialValue };\n\n return {\n ...fields,\n [name]: filedState,\n };\n}\n\nfunction changeField(fields = {}, field = {}) {\n const { name, ...rest } = field;\n\n const newField = { ...(fields[name] || initFieldState), name, ...rest };\n\n return {\n ...fields,\n [name]: newField,\n };\n}\n\nfunction r(state = initState, action) {\n const { payload = {}, meta = {}, type } = action;\n\n if (type === Types.registerField) {\n // need field name\n const { name, initialValue } = payload;\n if (!name) {\n return state;\n }\n\n const newFileds = registerField(state.fields, name, initialValue);\n\n return {\n ...state,\n fields: newFileds,\n meta,\n };\n }\n\n if (type === Types.registerMutilFields) {\n const { fields = [] } = payload;\n\n const newFields = fields.reduce((acc, cur) => {\n const { name, initialValue } = cur;\n if (!name) {\n return acc;\n }\n\n return registerField(acc, name, initialValue);\n }, state.fields);\n\n return {\n ...state,\n fields: newFields,\n meta,\n };\n }\n\n if (type === Types.changeField) {\n const { name } = payload;\n if (!name) {\n return state;\n }\n\n const newFields = changeField(state.fields, payload);\n return {\n ...state,\n fields: newFields,\n meta,\n };\n }\n\n if (type === Types.changeMutilFields) {\n const { fields = [] } = payload;\n\n const newFields = fields.reduce((acc, cur) => {\n const { name } = cur;\n if (!name) {\n return acc;\n }\n\n return changeField(acc, cur);\n }, state.fields);\n\n return {\n ...state,\n fields: newFields,\n meta,\n };\n }\n\n if (type === Types.reset) {\n const { initialValues = {} } = payload;\n\n const newFileds = {};\n for (const name in state.fields) {\n newFileds[name] = { ...initFieldState, value: initialValues[name] };\n }\n\n return {\n ...state,\n fields: newFileds,\n meta,\n };\n }\n\n return state;\n}\n\nexport default function reducer(state = {}, action) {\n if (!isForm(action)) return state;\n\n const { key } = action;\n\n if (!key) return state;\n\n const form = Forms.get(key);\n\n if (!form) {\n return state;\n }\n\n return setWith(\n { ...state },\n form.reduxPath,\n r(get(state, form.reduxPath), action),\n clone\n );\n}\n","import { camelCaseKey } from \"./lib\";\nimport { get } from \"lodash\";\nimport { initState } from \"./reducer\";\n\nexport const makeStateSelector = path => state =>\n get(state.forms, path) || initState;\n\nconst createFormSelector = (key, reduxPath) => {\n const path = reduxPath || camelCaseKey(key);\n\n return makeStateSelector(path);\n};\n\nexport default createFormSelector;\n","import { Types } from \"./action\";\nimport { registerForm, Forms } from \"./forms\";\nimport { camelCaseKey } from \"./lib\";\n\nclass Form {\n constructor(key, reduxPath) {\n this._key = key;\n this._reduxPath = camelCaseKey(reduxPath || key);\n }\n\n get key() {\n return this._key;\n }\n\n get reduxPath() {\n return this._reduxPath;\n }\n\n get actions() {\n return {\n reset: (initialValues = {}, meta = {}) => ({\n type: Types.reset,\n key: this.key,\n payload: { initialValues },\n meta,\n }),\n registerField: (name, initialValue, meta = {}) => ({\n type: Types.registerField,\n key: this.key,\n payload: { name, initialValue },\n meta,\n }),\n registerMutilFields: (fields = [], meta = {}) => ({\n type: Types.registerMutilFields,\n key: this.key,\n payload: { fields },\n meta,\n }),\n changeField: (name, fieldState = {}, meta = {}) => ({\n type: Types.changeField,\n key: this.key,\n payload: { ...fieldState, name },\n meta,\n }),\n changeMutilFields: (fields = [], meta = {}) => ({\n type: Types.changeMutilFields,\n key: this.key,\n payload: { fields },\n meta,\n }),\n };\n }\n}\n\nexport function createFormActions(key, opts = {}) {\n if (!key) {\n throw new Error(\"Form need a key\");\n }\n\n if (Forms.has(key)) {\n return Forms.get(key).actions;\n }\n\n const form = new Form(key, opts.reduxPath);\n registerForm(form);\n return form.actions;\n}\n\nexport { default as formReducer } from \"./reducer\";\n\nexport { default as createFormSelector } from \"./selector\";\n\nexport { Types as FormTypes, isForm } from \"./action\";\n"],"names":["PREFIX","isForm","action","key","type","startsWith","RESET","CHANGE_FIELD","CHANGE_MUTIL_FIELDS","REGISTER_FIELD","REGISTER_MUTIL_FIELDS","Types","reset","registerField","registerMutilFields","changeField","changeMutilFields","Forms","Map","registerForm","form","set","camelCaseKey","split","map","k","camelCase","join","initFieldState","name","undefined","dirty","touched","value","validating","errors","initState","fields","meta","initialValue","get","filedState","field","rest","newField","r","state","payload","newFileds","newFields","reduce","acc","cur","initialValues","reducer","setWith","reduxPath","clone","makeStateSelector","path","forms","createFormSelector","Form","constructor","_key","_reduxPath","this","fieldState","createFormActions","opts","Error","has","actions"],"mappings":"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"}
\No newline at end of file