UNPKG

@aplus-frontend/ui

Version:

252 lines (251 loc) 6.79 kB
import { defineComponent as te, reactive as re, ref as O, unref as h, nextTick as oe, toRaw as P, watch as ne, onWatcherCleanup as ie, computed as le, createBlock as se, openBlock as ae, mergeProps as ue, withCtx as ce, renderSlot as fe } from "vue"; import { Form as de } from "@aplus-frontend/antdv"; import { useProvideForm as ge } from "./context.mjs"; import { isArray as f, cloneDeep as pe, isEqual as me, isFunction as M, isPlainObject as R, omit as he } from "lodash-unified"; import { useUrlSearchParams as Fe } from "@vueuse/core"; import { INTERNAL_FORM_INSTANCE_MARK as j } from "./constant.mjs"; import { getRouteType as ye, isDef as T } from "../utils/index.mjs"; import Te from "./utils/set.mjs"; import { genParams as B, setToParams as x } from "./utils/params.mjs"; import { useInjectFormProvider as Ve } from "./provider/context.mjs"; import { getModelValue as W } from "./utils/get.mjs"; import { useDevWarning as ve } from "../utils/warning.mjs"; const Oe = /* @__PURE__ */ te({ name: "ApForm", __name: "ap-form", props: { layout: { default: "horizontal" }, labelCol: {}, wrapperCol: {}, colon: { type: Boolean, default: !0 }, labelAlign: { default: "right" }, labelWrap: { type: Boolean }, prefixCls: {}, requiredMark: {}, hideRequiredMark: { type: Boolean, default: !1 }, rules: {}, validateMessages: {}, validateOnRuleChange: { type: Boolean, default: !0 }, scrollToFirstError: {}, onSubmit: {}, name: {}, validateTrigger: { default: "change" }, size: {}, disabled: { type: Boolean }, onFieldsChange: {}, onFinish: {}, onFinishFailed: {}, onValidate: {}, variant: {}, initialValues: {}, onValuesChange: {}, syncToUrl: { type: [Boolean, Function], default: !1 }, syncToUrlPriority: { type: Boolean } }, setup(N, { expose: S }) { const n = N; function V(e, t, r = !0, o) { if (f(e)) { let i = l; for (let u = 0; u < e.length - 1; u++) e[u] in i || (i[e[u]] = {}), i = i[e[u]]; o ? o(i, e[e.length - 1]) : i[e[e.length - 1]] = t; } else o ? o(l, e) : l[e] = t; let a = f(e) ? e[0] : e; if (r) { const i = { [a]: l[a] }; F.triggerFormChange(n.name, i), n.onValuesChange?.(i, l, e); } y(); } const s = O(), v = Fe(ye()), F = Ve(), q = ve("ApForm"), C = O( n.syncToUrl ? B(n.syncToUrl, v, "get") : {} ); let d = pe(_()), g = {}; const l = re(_()); let p = []; function _() { const e = n.initialValues || {}; return n.syncToUrlPriority ? { ...e, ...h(C) } : { ...h(C), ...e }; } function D(e) { const t = m(e, g); F.triggerFormFinish(n.name, e), n.syncToUrl && x(v, B(n.syncToUrl, t, "set")), n.onFinish?.(t); } const K = async () => { s.value?.resetFields(), await oe(() => { Object.keys(l).forEach((e) => delete l[e]), Object.assign(l, d), y(), n.syncToUrl && x( v, B( n.syncToUrl, m(d, g), "set" ) ); }); }, L = (e) => { s.value?.clearValidate(e); }, $ = (e, t) => s.value?.validateFields(e, t), k = async (e, t) => { const r = await s.value?.validateFields( e, t ); return m(r, g); }, b = (e) => e === !0 ? P(l) : s.value?.getFieldsValue(e), G = (e) => { const t = b(e); return m(t, g); }, H = (e, t) => s.value?.validate(e, t), J = (e, t = {}) => { s.value?.scrollToField(e, t); }, Q = (e) => { Object.assign(l, e), y(); }, I = (e, t, r = !0, o) => { V(e, t, r, o), y(); }; function U(e) { return e(P(l)), p.push(e), () => { p = p.filter((t) => t !== e); }; } function X(e, t) { if (f(e)) { let r = d; for (let o = 0; o < e.length - 1; o++) T(r[e[o]]) || (r[e[o]] = {}), r = r[e[o]]; r[e[e.length - 1]] = t; } else d[e] = t; } function Y(e, t) { if (!T(e) || !T(t)) return; const r = W(d, t); if (me(r, e)) return; const o = W(h(C), t); T(o) && n.syncToUrlPriority || (V(t, e, !1), X(t, e)); } function Z(e, t) { t && (g = Te( g, [e].flat(1), t, !0 )); } function w({ initialValue: e, name: t, transform: r }) { Y(e, t), Z(t, r); } function A() { return d; } function z(e) { if (q( e === j, "usage", "getInternalInstance should only used at internal" ), e === j) return { registerField: w, registerWatch: U, setFieldValue: I, getInitialValues: A }; } function y() { if (p.length) { const e = P(l); p.forEach((t) => { t(e); }); } } function m(e, t) { if (e == null) return; let r = f(e) ? [] : {}; return Object.keys(e).forEach((o) => { const a = e[o], i = t?.[o], u = M(i) ? i : i?.transformer, ee = M(i) ? !0 : i?.flat; if (M(u)) { const c = u(a); ee ? f(c) && f(r) ? r = [...r, ...c] : R(c) && R(r) ? r = { ...r, ...c } : r[o] = c : r[o] = c; } else if (R(a) || f(a)) { const c = m( a, i ); r[o] = c; } else r[o] = a; }), r; } const E = { resetFields: K, clearValidate: L, validateFields: $, getFieldsValue: b, validate: H, scrollToField: J, setFieldsValue: Q, setFieldValue: I, registerWatch: U, validateFieldsReturnTransformed: k, getFieldsValueTransformed: G, getInternalInstance: z }; return ne( () => n.name, (e) => { e && (F.registerForm(e, E), ie(() => { F.unregisterForm(n.name); })); }, { immediate: !0 } ), ge({ model: le(() => l), updateModel: V, internalInstance: { registerWatch: U, registerField: w, setFieldValue: I, getInitialValues: A } }), S(E), (e, t) => (ae(), se(h(de), ue( { ref_key: "formRef", ref: s }, h(he)(n, [ "initialValues", "onValuesChange", "onFinish", "syncToUrl", "syncToUrlPriority" ]), { model: l, "data-form-name": e.name, onFinish: D } ), { default: ce(() => [ fe(e.$slots, "default") ]), _: 3 }, 16, ["model", "data-form-name"])); } }); export { Oe as default };