ayongui
Version:
209 lines (208 loc) • 6.25 kB
JavaScript
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
};