1/**
2 * Created by Liu.Jun on 2020/4/25 14:45.
3 */
4
5import { defineComponent, h, resolveComponent as _resolveComponent } from 'vue';
6
7export {
8    nodePath2ClassName, isRootNodePath, computedCurPath, getPathVal, path2prop
9} from './vueUtils';
10
11// 内部使用 . ,配置数据key不能出现.
12const pathSeparator = '.';
13
14// 删除当前path值
15export function deletePathVal(vueData, name) {
16    delete vueData[name];
17}
18
19// 设置当前path值
20export function setPathVal(obj, path, value) {
21    const pathArr = path.split(pathSeparator);
22    for (let i = 0; i < pathArr.length; i += 1) {
23        if (pathArr.length - i < 2) {
24            // 倒数第一个数据
25            obj[pathArr[pathArr.length - 1]] = value;
26            break;
27        }
28        obj = obj[pathArr[i]];
29    }
30}
31
32export function resolveComponent(component) {
33    if (typeof component === 'string') return _resolveComponent(component);
34
35    return component;
36}
37
38// 转换antdv、naive等非moduleValue的v-model组件
39export const modelValueComponent = (component, {
40    model = 'value'
41} = {}) => defineComponent({
42    inheritAttrs: false,
43    setup(props, { attrs, slots }) {
44        return () => {
45            const {
46                modelValue: value,
47                'onUpdate:modelValue': onUpdateValue,
48                ...otherAttrs
49            } = attrs;
50
51            // eg: 'a-input'
52            return h(resolveComponent(component), {
53                [model]: value,
54                [`onUpdate:${model}`]: onUpdateValue,
55                ...otherAttrs
56            }, slots);
57        };
58    }
59});
60