UNPKG

yanzhen-design-vue

Version:

184 lines (183 loc) 5.27 kB
"use strict"; Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" }); const vue = require("vue"); const lodashEs = require("lodash-es"); const utilsVue = require("@yanzhen-libs/utils-vue"); const antDesignVue = require("ant-design-vue"); const useContactsSelectedData = require("./hook/use-contacts-selected-data.cjs"); const contacts = require("./contacts.cjs"); const contactsSelect = require("./contacts-select.cjs"); const useContactsConfirmModels = require("./hook/use-contacts-confirm-models.cjs"); function useContactsSelect(props, emit) { const watcher = utilsVue.createWatcher(); const { multiple, immediate } = vue.toRefs(props); const contactsRef = vue.ref(null); const { open: _open, disabled, ...vModels } = useContactsConfirmModels.useContactsConfirmModels(props); const formItemContext = antDesignVue.Form.useInjectFormItemContext(); const { selectedValue, getSelectedValues } = useContactsSelectedData.useContactsSelectedData( contactsRef, emit ); const contactsProps = vue.computed(() => { const _props = { ...props }; for (const [prop, value] of Object.entries(_props)) { if (value === void 0) { delete _props[prop]; } } return { ...contacts.contactsPickProps(_props), ...vue.unref(vModels.props), ...vue.unref(vModels.emits) }; }); const listType = vue.computed(() => { if (props.listType === false) { return false; } else if (props.listType === true) { return [contactsSelect.contactsSelectListType[0]]; } return lodashEs.flattenDeep([props.listType]).filter(Boolean); }); const modalProps = vue.computed(() => { const _modalProps = Object.entries(props).reduce((prev, [prop, value]) => { if (value === void 0) return prev; const key = lodashEs.kebabCase(prop); switch (true) { case key === "modal-props": break; case key.startsWith("modal-"): prev[lodashEs.camelCase(key.replace("modal-", ""))] = value; break; } return prev; }, {}); const _props = lodashEs.merge(_modalProps, (props == null ? void 0 : props.modalProps) ?? {}); return contactsSelect.contactsSelectOmitModalProps(_props); }); const selectProps = vue.computed(() => { return lodashEs.merge(contactsSelect.defineContactsSelectProps(props.selectProps), { autoClear: props.autoClear, multiple: props.multiple }); }); const selectedData = vue.computed(() => { const values = vue.unref(selectedValue); const maxCount = vue.unref(selectProps).maxCount; if (values.length === maxCount) { return { values, overage: [] }; } return { values: values.slice(0, maxCount), overage: values.slice(maxCount, values.length) }; }); function handleOverageText(values = []) { const labels = values.map(({ label }) => label); return labels.join(","); } watcher.set("open", { source: _open, handler(open) { var _a; if (open) { (_a = vue.unref(contactsRef)) == null ? void 0 : _a.refresh(); } }, immediate: true, debounce: 500 }); async function handleContactsChange() { if (!vue.unref(multiple) && vue.unref(immediate)) { await handleConfirm(); } } async function handleConfirm() { const ids = lodashEs.uniq(lodashEs.flattenDeep(Object.values(vue.unref(vModels.props)))); const selectedValue2 = getSelectedValues(ids); const args = [selectedValue2, vue.unref(vModels.props)]; console.log(args, "items+++++"); if (lodashEs.isFunction(props.beforeConfirm)) { const result = await props.beforeConfirm(...args); if (result === false) return false; } if (props.onConfirm) { const result = await props.onConfirm(...args); if (result === false) return false; } else { emit == null ? void 0 : emit("confirm", ...args); } vModels.send(); handleChange(selectedValue2[selectedValue2.length - 1], ids); handleBlur(); handleClose(); } function handleDelete(item, index) { vModels.delete(item, index); } function handleCancel() { _open.value = false; emit("cancel"); handleBlur(); handleClose(); } function handleOpen() { vModels.update(); if (vue.unref(disabled)) return; _open.value = true; } function handleClose() { vModels.update(); _open.value = false; } const handleChange = (...args) => { formItemContext.onFieldChange(); emit("change", ...args); }; const handleBlur = () => { formItemContext.onFieldBlur(); emit("blur"); }; vue.onMounted(() => { }); vue.onUnmounted(() => { _open.value = false; watcher.stop(); }); const refs = { contactsRef }; const ctx = { _open, selectedValue, modalProps, contactsProps, selectProps, listType, selectedData }; const methods = { open: handleOpen, close: handleCancel, handleOpen, handleCancel, handleConfirm, handleContactsChange, handleDelete, handleOverageText }; return { refs, ...refs, ctx, ...ctx, methods, ...methods }; } exports.useContactsSelect = useContactsSelect;