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