@opentiny/vue-renderless
Version:
An enterprise-class UI component library, support both Vue.js 2 and Vue.js 3, as well as PC and mobile.
119 lines (118 loc) • 3.69 kB
JavaScript
import {
__spreadProps,
__spreadValues
} from "../chunk-G2ADBYYC.js";
import { find } from "@opentiny/utils";
const filter = ({ vm }) => (value) => {
vm.$refs.treeRef.filter(value);
};
const nodeClick = ({ props, vm, emit }) => (data) => {
if (!props.multiple) {
vm.$refs.baseSelectRef.updateSelectedData(__spreadProps(__spreadValues({}, data), {
currentLabel: data[props.textField],
value: data[props.valueField],
state: {
currentLabel: data[props.textField]
}
}));
emit("change", data[props.valueField]);
emit("update:modelValue", data[props.valueField]);
vm.$refs.baseSelectRef.hidePanel();
}
};
const check = ({ props, vm, emit }) => (data, { checkedNodes }) => {
if (props.multiple) {
const currentValue = [];
vm.$refs.baseSelectRef.updateSelectedData(
checkedNodes.map((node) => {
currentValue.push(node[props.valueField]);
return __spreadProps(__spreadValues({}, node), {
currentLabel: node[props.textField],
value: node[props.valueField],
isTree: true
});
})
);
emit("change", currentValue);
emit("update:modelValue", currentValue);
}
};
const getTreeData = ({ props, state }) => (data) => {
const nodes = [];
const getChild = (data2, pId) => {
data2.forEach((node) => {
node.pId = pId;
nodes.push(node);
if (node[state.childrenName] && node[state.childrenName].length > 0) {
getChild(node[state.childrenName], node[props.valueField]);
}
});
};
getChild(data, null);
return nodes;
};
const getPluginOption = ({ api, props, state }) => (value) => {
const isRemote = (props.filterable || props.searchable) && props.remote && (typeof props.remoteMethod === "function" || typeof props.initQuery === "function");
const { textField, valueField } = props;
const sourceData = isRemote ? state.remoteData : api.getTreeData(state.treeData);
const selNode = find(sourceData, (item) => item[valueField] === value);
const items = [];
if (selNode) {
selNode.currentLabel = selNode[textField];
items.push(selNode);
}
return items;
};
const getCheckedData = ({ props, state }) => () => {
const checkedKey = [];
if (!Array.isArray(state.selected)) {
return props.modelValue ? [props.modelValue] : [state.selected[props.valueField]];
} else {
state.selected.length > 0 && state.selected.forEach((item) => {
checkedKey.push(item[props.valueField]);
});
return checkedKey;
}
};
const mounted = ({ api, state, props, vm }) => () => {
if (!state.value || state.value.length === 0)
return;
if (props.multiple) {
let initialNodes = [];
if (Array.isArray(state.value)) {
state.value.forEach((value) => {
const option = api.getPluginOption(value);
initialNodes = initialNodes.concat(option);
});
}
vm.$refs.baseSelectRef.updateSelectedData(
initialNodes.map((node) => {
return __spreadProps(__spreadValues({}, node), {
currentLabel: node[props.textField],
value: node[props.valueField],
isTree: true
});
})
);
state.defaultCheckedKeys = api.getCheckedData()[0];
} else {
const data = api.getPluginOption(state.value)[0];
vm.$refs.baseSelectRef.updateSelectedData(__spreadProps(__spreadValues({}, data), {
currentLabel: data[props.textField],
value: data[props.valueField],
state: {
currentLabel: data[props.textField]
}
}));
state.currentKey = data[props.valueField];
}
};
export {
check,
filter,
getCheckedData,
getPluginOption,
getTreeData,
mounted,
nodeClick
};