UNPKG

yanzhen-design-vue

Version:

97 lines (96 loc) 2.79 kB
import { computed, ref, useSlots, onUnmounted } from "vue"; import { pageProviderProps } from "@yanzhen-lowcode/core"; import { flattenDeep, isFunction } from "lodash-es"; import { useModelValue, unref, useDynamicProps, useProxyProps } from "@yanzhen-libs/utils-vue"; import { isObject } from "@yanzhen-libs/utils"; import { createReusableTemplate } from "@vueuse/core"; import { formProviderEmits } from "./form-provider.mjs"; import { useFormProviderSchema } from "./hooks/use-form-provider-schema.mjs"; function useFormProvider(props, emit) { const modelValue = useModelValue(props, "value", emit); const modelRef = computed(() => { var _a; return unref(modelValue) || props.model || ((_a = props.form) == null ? void 0 : _a.model); }); const rulesRef = computed(() => { var _a; const rules = props.rules ?? ((_a = props.form) == null ? void 0 : _a.rules); return isObject(rules) ? rules : {}; }); const formRef = ref(null); const $slots = useSlots(); const type = "form"; const _schema = ref({ type }); const _schemaRef = computed(() => { return { ...props.schema ?? {}, type }; }); const options = { form: computed(() => props.form), row: computed(() => props.row), model: modelRef, rules: rulesRef, slots: $slots }; const { formSchema, bodySchema, rowSchema, bodySchemaConfig, handleFormProviderItemProps } = useFormProviderSchema(_schemaRef, options, formRef); const updatePropsKey = useDynamicProps({ update: true }); const pageProviderProps$1 = useProxyProps(props, formProviderEmits, { emit, include: Object.keys(pageProviderProps), exclude: ["value", "schema"], filter: (key) => { if (key === "onUpdate:value") { const handleUpdateValue = flattenDeep([props["onUpdate:value"]]).find(isFunction); return updatePropsKey.includes("value") && isFunction(handleUpdateValue); } return true; } }); const schemaRef = computed(() => { const row = unref(rowSchema); const body = unref(bodySchema); const schema = { type: "page", body }; if (row) { schema.body = { ...row, body: schema.body }; } return schema; }); const [DefinePageProviderItem, ReusablePageProviderItem] = createReusableTemplate(); const ctx = { pageProviderProps: pageProviderProps$1, modelRef, rulesRef, schemaRef, rowSchema, formSchema, formRef, bodySchema, bodySchemaConfig }; const methods = { handleFormProviderItemProps }; const templates = { DefinePageProviderItem, ReusablePageProviderItem }; onUnmounted(() => { _schema.value = { type }; }); return { ctx, methods, templates }; } export { useFormProvider };