mldong-flow-designer-plus
Version:
本项目包含了作者为B站课堂视频[《工作流设计器开发最佳实践》](https://www.bilibili.com/cheese/play/ss24484)的过程源码。教程中开发的组件也可用于实际生产环境中。以下是和使用文档和课程章节说明。 ## 实战项目 [演示地址](https://flow-pro.mldong.com/)
102 lines (101 loc) • 3.28 kB
JavaScript
import { defineComponent, provide, computed, ref, getCurrentInstance, watch, inject, onBeforeUnmount } from "vue";
import { d as devWarning, c as createContext } from "./createContext-DWMub_ig.js";
const ContextKey = Symbol("ContextProps");
const InternalContextKey = Symbol("InternalContextProps");
const useProvideFormItemContext = function(props) {
let useValidation = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : computed(() => true);
const formItemFields = ref(/* @__PURE__ */ new Map());
const addFormItemField = (key, type) => {
formItemFields.value.set(key, type);
formItemFields.value = new Map(formItemFields.value);
};
const removeFormItemField = (key) => {
formItemFields.value.delete(key);
formItemFields.value = new Map(formItemFields.value);
};
const instance = getCurrentInstance();
watch([useValidation, formItemFields], () => {
if (process.env.NODE_ENV !== "production") {
if (useValidation.value && formItemFields.value.size > 1) {
devWarning(false, "Form.Item", `FormItem can only collect one field item, you haved set ${[...formItemFields.value.values()].map((v) => `\`${v.name}\``).join(", ")} ${formItemFields.value.size} field items.
You can set not need to be collected fields into \`a-form-item-rest\``);
let cur = instance;
while (cur.parent) {
console.warn("at", cur.type);
cur = cur.parent;
}
}
}
});
provide(ContextKey, props);
provide(InternalContextKey, {
addFormItemField,
removeFormItemField
});
};
const defaultContext = {
id: computed(() => void 0),
onFieldBlur: () => {
},
onFieldChange: () => {
},
clearValidate: () => {
}
};
const defaultInternalContext = {
addFormItemField: () => {
},
removeFormItemField: () => {
}
};
const useInjectFormItemContext = () => {
const internalContext = inject(InternalContextKey, defaultInternalContext);
const formItemFieldKey = Symbol("FormItemFieldKey");
const instance = getCurrentInstance();
internalContext.addFormItemField(formItemFieldKey, instance.type);
onBeforeUnmount(() => {
internalContext.removeFormItemField(formItemFieldKey);
});
provide(InternalContextKey, defaultInternalContext);
provide(ContextKey, defaultContext);
return inject(ContextKey, defaultContext);
};
const FormItemRest = defineComponent({
compatConfig: {
MODE: 3
},
name: "AFormItemRest",
setup(_, _ref) {
let {
slots
} = _ref;
provide(InternalContextKey, defaultInternalContext);
provide(ContextKey, defaultContext);
return () => {
var _a;
return (_a = slots.default) === null || _a === void 0 ? void 0 : _a.call(slots);
};
}
});
const FormItemInputContext = createContext({});
const NoFormStatus = defineComponent({
name: "NoFormStatus",
setup(_, _ref2) {
let {
slots
} = _ref2;
FormItemInputContext.useProvide({});
return () => {
var _a;
return (_a = slots.default) === null || _a === void 0 ? void 0 : _a.call(slots);
};
}
});
export {
FormItemRest as F,
NoFormStatus as N,
useProvideFormItemContext as a,
FormItemInputContext as b,
useInjectFormItemContext as u
};
//# sourceMappingURL=FormItemContext-BSmBW9ep.js.map