yanzhen-design-vue
Version:
183 lines (182 loc) • 6.24 kB
JavaScript
;
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;