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