yanzhen-design-vue
Version:
79 lines (78 loc) • 2.17 kB
JavaScript
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
};