plus-pro-components
Version:
Page level components developed based on Element Plus.
74 lines (71 loc) • 2.23 kB
JavaScript
import { defineComponent, ref, watch, isVNode, openBlock, createBlock, resolveDynamicComponent, mergeProps, normalizeProps } from 'vue';
import '../../utils/index.mjs';
import { isString } from '../../utils/is.mjs';
var _sfc_main = /* @__PURE__ */ defineComponent({
...{
name: "PlusRender"
},
__name: "index",
props: {
renderType: { default: void 0 },
callbackValue: { default: "" },
customFieldProps: { default: () => ({}) },
render: {},
params: { default: () => ({}) },
handleChange: {}
},
setup(__props) {
const props = __props;
const state = ref();
watch(
() => props.callbackValue,
(val) => {
state.value = val;
},
{
flush: "post",
immediate: true
}
);
const renderComponent = () => {
if (!props.render) return;
const params = { ...props.params };
const dynamicComponent = props.renderType === "form" ? props.render(
state.value,
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
props.handleChange,
params
) : props.render(state.value, params);
if (isVNode(dynamicComponent)) {
const payload = props.renderType === "form" ? {
modelValue: state.value,
...props.customFieldProps,
...dynamicComponent.props
} : {
...props.customFieldProps,
...dynamicComponent.props
};
return {
...dynamicComponent,
props: payload
};
} else if (isString(dynamicComponent)) {
return dynamicComponent;
}
};
return (_ctx, _cache) => {
return _ctx.renderType === "form" ? (openBlock(), createBlock(resolveDynamicComponent(renderComponent), mergeProps({
key: 0,
modelValue: state.value,
"onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => state.value = $event)
}, _ctx.customFieldProps), null, 16, ["modelValue"])) : (openBlock(), createBlock(
resolveDynamicComponent(renderComponent),
normalizeProps(mergeProps({ key: 1 }, _ctx.customFieldProps)),
null,
16
/* FULL_PROPS */
));
};
}
});
export { _sfc_main as default };