UNPKG

ayongui

Version:
209 lines (208 loc) 6.25 kB
import { j as z } from "../../../react/jsx-runtime.mjs"; import R, { forwardRef as T, useState as I, useImperativeHandle as X, useRef as K, useEffect as E, useMemo as Y } from "react"; import Z from "./index.module.less.mjs"; import { useForm as G } from "./form-api.mjs"; import { isObject as B } from "../../utils/index.mjs"; import $ from "./components/form-item/index.mjs"; import v from "./components/form-list/index.mjs"; const h = R.createContext(), D = T( ({ form: d, size: C, children: A, _fromDate: f, labelWidth: j, initialValues: x, onChange: N, formLayout: H, disabled: w, _onFinishFailed: V, errorInfo: O, defaultValueUpDate: U = () => { } }, L) => { const o = {}; let P = {}; G(d); const g = () => { var e; for (let t in f) if (B(f[t]) && Object.keys(o[t]).length > 1) for (let n in o[t]) (e = o[t][n]) == null || e.current.onReset(); else o[t].current.onReset(); }, M = (e) => { var t; for (let n in e) if (B(e[n]) && Object.keys(o[n]).length > 1) for (let i in o[n]) (t = o[n][i]) == null || t.current.onSet(e[n][i]); else o[n] && o[n].current.onSet(e[n]); }, y = () => { var e, t, n; for (let i in f) if (B(f[i]) && Object.keys(o[i]).length > 1) for (let r in o[i]) (e = o[i][r]) == null || e.current.onVerify("submit"); else (n = (t = o[i]) == null ? void 0 : t.current) == null || n.onVerify("submit"); }; I(!1); const W = (e, t) => { }; X(L, () => ({ onReset: g, onVerify: y, onSet: M, formUpDateValue: W })); const b = ({ child: e, value: t = !1, listName: n, type: i = "" }) => { if (Array.isArray(e.props.name)) { const [r, l] = e.props.name; return f[r] || (f[r] = {}), f[r][l] = x[r] && x[r][l] || t, o[r] || (o[r] = {}), o[r][l] = R.createRef(), [r, l]; } else o[e.props.name] = R.createRef(), f[e.props.name] = x[e.props.name] || t; }; return P = R.Children.map(A, (e, t) => { var n, i, r, l, F; if (R.isValidElement(e)) { let a = []; e.props.name && (((n = e == null ? void 0 : e.type) == null ? void 0 : n.displayName) === "FormList" ? a = b({ child: e, value: [], type: (i = e == null ? void 0 : e.type) == null ? void 0 : i.displayName, listName: e.props.name }) : ["Radio", "Switch"].includes((F = (l = (r = e == null ? void 0 : e.props) == null ? void 0 : r.children) == null ? void 0 : l.type) == null ? void 0 : F.displayName) ? a = b({ child: e }) : a = b({ child: e, value: "" })); const [q, s] = a || ["", ""]; return R.cloneElement(e, { ref: Array.isArray(e.props.name) ? o[q][s] : o[e.props.name], form: d, size: C, labelWidth: j, formLayout: H, disabled: w, _fromDate: f, onChange: N, _onFinishFailed: V, errorInfo: O }); } return e; }), U(f), P; } ), S = R.forwardRef( ({ name: d, style: C, size: A, labelWidth: f = "100px", form: j = {}, children: x, initialValues: N = {}, autoComplete: H, disabled: w = !1, formLayout: V = "right", onSubmit: O = () => { }, onFinish: U = () => { }, onFinishFailed: L = () => { }, onValuesChange: o = () => { } }, P) => { const g = { ...N }, M = ({ name: s, value: m, parentName: p, index: c, operationType: k }) => { if (Array.isArray(s)) { const [u, Q] = s; n((J) => ({ ...J, [u]: { ...J[u], [Q]: m } })); return; } if (k === "remove") return n((u) => { if (p) return u[p].splice(c, 1), u; }); n((u) => p ? (u[p][c] = { ...u[p][c], [s]: m }, u) : { ...u, [s]: m }); }, [y, W] = I({ errorFields: [] }), b = (s, m) => { W((p) => { const c = { ...p }; if (s === "remove" && (c.errorFields = p.errorFields.filter((k) => k.name !== m.name)), s === "add") { const k = p.errorFields.findIndex((u) => u.name === m.name); k === -1 ? c.errorFields.push(m) : c.errorFields[k] = m; } return c; }); }, e = K(), [t, n] = I(), i = (s, m) => { m === "reset" && (s = g, e.current.onReset()), m === "set" && e.current.onSet(s), n(s), e.current.formUpDateValue(s, m); }, [r] = G(j); let l = (s) => { }; E(() => { n(g); }, []), E(() => { if (t && o(t), r != null && r.getInternalHooks) { const { setInitialValues: s } = r.getInternalHooks({ update: i, submit: F, errorInfo: y }); s(t); } }, [t]), I(!1); const F = (s) => { s == null || s.preventDefault(), e.current.onVerify(), a.current = !0; }; E(() => { !(r != null && r.getInternalHooks) && F && i || r == null || r.getInternalHooks({ update: i, submit: F, errorInfo: y }); }); const a = K(!1); E(() => { y.errorFields.length && a.current ? L(y) : a.current && (U(), O(t)), a.current = !1; }, [y.errorFields, a.current]); const q = Y(() => ({ ...r }), [r]); return /* @__PURE__ */ z.jsx( "form", { name: d, style: C, onSubmit: F, className: V === "inline" ? Z.formFlexWrap : "", autoComplete: H, onReset: (s) => { s.preventDefault(); }, children: /* @__PURE__ */ z.jsx(h.Provider, { value: q, children: /* @__PURE__ */ z.jsx( D, { ref: e, form: j, size: A, labelWidth: f, onChange: M, children: x, _fromDate: g, fromData: t, formLayout: V, disabled: w, defaultValueUpDate: l, _onFinishFailed: b, initialValues: N } ) }) } ); } ); S.Item = $; S.useForm = G; S.List = v; S.displayName = "Form"; export { S as default };