UNPKG

yanzhen-design-vue

Version:

183 lines (182 loc) 6.24 kB
"use strict"; Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" }); const vue = require("vue"); const utils = require("@yanzhen-libs/utils"); const utilsVue = require("@yanzhen-libs/utils-vue"); const lodashEs = require("lodash-es"); require("../constants/index.cjs"); const handleDataType = require("../utils/handleDataType.cjs"); require("../enum/index.cjs"); const useContactsOptions = require("./use-contacts-options.cjs"); const useContactsCommonProps = require("./use-contacts-common-props.cjs"); const contacts = require("../constants/contacts.cjs"); const contacts$1 = require("../enum/contacts.cjs"); const contactsDataCache = vue.ref({}); function useContactsMap(_el) { return contactsDataCache; } function handleContactsData(target, source, iteratee) { if (!utils.isArray(source)) source = []; if (!utils.isArray(target)) target = []; if (vue.isReadonly(source)) source = vue.toRaw(source); for (let item of source) { if (vue.isReadonly(item)) item = vue.toRaw(item); if (typeof iteratee === "function") { item = iteratee(item); } else if (typeof iteratee === "string") { item.type = iteratee; } item = lodashEs.merge(utilsVue.unref(contactsDataCache)[item.value] ?? {}, item); utilsVue.unref(contactsDataCache)[item.value] = item; target.push(item); } return target; } const OPTION_CONTEXT_KEY = Symbol("option"); function isContactsData(item) { return (item == null ? void 0 : item[OPTION_CONTEXT_KEY]) === true; } function getSelectedValue(item, config = {}) { var _a; const { contactsMap = useContactsMap(), optionsMap, localMap } = config; if (isContactsData(item)) return item; const id = lodashEs.isPlainObject(item) ? item == null ? void 0 : item.value : item; for (const map of [contactsMap, localMap, optionsMap]) { const info = (_a = utilsVue.unref(map)) == null ? void 0 : _a[id]; if (lodashEs.isPlainObject(info)) { if (isContactsData(item)) return item; return new Proxy(info, { get(target, p, receiver) { var _a2; if (p === OPTION_CONTEXT_KEY) { return true; } return Reflect.get(((_a2 = utilsVue.unref(optionsMap)) == null ? void 0 : _a2[id]) ?? {}, p, receiver) ?? Reflect.get(target, p, receiver); }, set(target, p, newValue, receiver) { if (p === OPTION_CONTEXT_KEY) { return false; } return Reflect.set(target, p, newValue, receiver); } }); } } return { value: id, label: id }; } function useContactsSelectedGroup(selectedValue) { const _contactsMap = useContactsMap(); if (!selectedValue) selectedValue = useContactsCommonProps.useSelectedIds(); const _selectedValue = vue.computed(() => { return utilsVue.unref(selectedValue).map((value) => { const contactsMap = utilsVue.unref(_contactsMap); return getSelectedValue(value, { contactsMap }); }); }); function getSelectedGroupItem(key, values = utilsVue.unref(selectedValue)) { const groups = [...contacts.contactsDataTypes]; const children = () => { return utilsVue.unref(values).reduce( (prev, value) => { const item = getSelectedValue(value); const flag = key === void 0 ? !groups.includes(handleDataType.handleDataType(item)) : handleDataType.handleDataType(item) == key; if (item && flag) { prev.push(item); } return prev; }, [] ); }; const proxy = key === void 0 ? { value: "-1", label: "未知" } : { value: key, label: contacts$1.getContactsLabel(key) }; return new Proxy( { ...proxy, children: [] }, { get(target, p, receiver) { if (p === "children") { target["children"] = children(); } return Reflect.get(target, p, receiver); } } ); } const selectedGroup = vue.computed(() => { const groups = [...contacts.contactsDataTypes]; return [void 0, ...groups].map((key) => getSelectedGroupItem(key)); }); const selectedGroupMap = [...contacts.contactsDataTypes].reduce( (prev, key) => { prev[key] = vue.computed(() => getSelectedGroupItem(key)); return prev; }, {} ); return { groups: [...contacts.contactsDataTypes], selectedValue: _selectedValue, getSelectedGroupItem, selectedGroup, selectedGroupMap }; } function useContactsSelectedData(el, emit) { const localRef = vue.ref([]); const _localMap = vue.ref({}); const _contactsMap = useContactsMap(); const _selectedIds = useContactsCommonProps.useSelectedIds(); const { optionsMap: _optionsMap } = useContactsOptions.useContactsOptions(); function getSelectedValues(selectedIds = utilsVue.unref(_selectedIds)) { return selectedIds.reduce( (prev, id) => { if (utils.isEmptyValue(id)) return prev; const item = getSelectedValue(id, { contactsMap: _contactsMap, optionsMap: _optionsMap, localMap: _localMap }); if (item) prev.push(item); return prev; }, [] ); } function setSelectedValues(items = []) { const optionsMap = utilsVue.unref(_optionsMap); const contactsMap = utilsVue.unref(_contactsMap); localRef.value = lodashEs.flattenDeep([items]).map((id) => { const info = (contactsMap == null ? void 0 : contactsMap[id]) ?? (optionsMap == null ? void 0 : optionsMap[id]); switch (true) { case lodashEs.isPlainObject(info): utilsVue.unref(_localMap)[info.value] = info; return info; } return id; }); emit == null ? void 0 : emit("update:selectedValue", utilsVue.unref(localRef)); } const methods = { getSelectedValues, setSelectedValues }; const selectedValue = vue.computed({ get: () => getSelectedValues(), set: setSelectedValues }); return { ...methods, selectedValue }; } exports.handleContactsData = handleContactsData; exports.useContactsMap = useContactsMap; exports.useContactsSelectedData = useContactsSelectedData; exports.useContactsSelectedGroup = useContactsSelectedGroup;