UNPKG

yanzhen-design-vue

Version:

79 lines (78 loc) 2.17 kB
import { reactive, computed, onMounted, onUnmounted } from "vue"; import { buildProps, definePropType, useOptions, createWatcher, unref } from "@yanzhen-libs/utils-vue"; import { isArray } from "lodash-es"; import { optionsProps } from "../../../select/src/hooks/select-common-props.mjs"; import { contactsOptions } from "../contacts.mjs"; import "../constants/index.mjs"; import { handleDataType } from "../utils/handleDataType.mjs"; import { handleContactsData } from "./use-contacts-selected-data.mjs"; import { contactsOptionType } from "../constants/base.mjs"; const ns = contactsOptions.ns; function contactsOptionsProps() { return optionsProps([...contactsOptionType]); } function useContactsItemProps() { return buildProps({ value: definePropType([String, Number]), avatar: String, errorImg: String, label: String, type: String }); } function useContactsOptions() { const options = useOptions([...contactsOptionType]); const config = reactive({ map: {}, disabledIds: [] }); const optionsMap = computed(() => { return config.map; }); const optionsDisabledIds = computed(() => { return config.disabledIds; }); const watcher = createWatcher(); function handleOptions(list = []) { const disabledIds = []; if (isArray(list)) { handleContactsData([], list, (item) => { if (!item) return item ?? {}; item.type = handleDataType(item); item.class = item.isLeaf ? ns.is("leaf") : ""; if (item.value) { config.map[item.value] = item; if ((item == null ? void 0 : item.disabled) === true) { disabledIds.push(item.value); } } return item; }); } config.disabledIds = disabledIds; } watcher.set("options", { source: unref(options), handler(list) { handleOptions(list); }, deep: true, debounce: 300 }); onMounted(() => { handleOptions(unref(options)); }); onUnmounted(() => { watcher.stop(); }); return { options, optionsMap, optionsDisabledIds }; } export { contactsOptionsProps, useContactsItemProps, useContactsOptions };