tav-ui
Version:
122 lines (119 loc) • 4.55 kB
JavaScript
import { defineComponent, ref, computed, unref, watch, resolveComponent, openBlock, createElementBlock, Fragment, renderList, createBlock, withCtx, createTextVNode, toDisplayString, createCommentVNode } from 'vue';
import { CheckableTag } from 'ant-design-vue';
import '../types/index2.mjs';
import '../hooks/index2.mjs';
import _export_sfc from '../../../../../_virtual/plugin-vue_export-helper.mjs';
import { cascadeProHotProps } from '../types/props2.mjs';
import { useCascadeProContext } from '../hooks/use-context2.mjs';
const _sfc_main = defineComponent({
name: "TaCascadeProHot",
components: {
CheckableTag
},
props: cascadeProHotProps,
emits: ["change"],
setup(props, { emit, expose }) {
const { options, selectRecords, fields } = useCascadeProContext();
const selectedHots = ref([]);
const cascadeProHot = computed(() => {
return {
visible: props.hotVisible && props.hotKeyWords && props.hotKeyWords.length > 0,
list: props.generateHotList(unref(options).list, props.hotKeyWords)
};
});
const getAddAndDeleteOptions = (newOptions, oldOptions) => {
const added = [];
const deleted = [];
if (newOptions.length > oldOptions.length) {
newOptions.forEach((hot) => {
const isExist = oldOptions.find((_hot) => _hot.idPath === hot.idPath);
if (!isExist) {
added.push(hot);
}
});
} else {
oldOptions.forEach((hot) => {
const isExist = newOptions.find((_hot) => _hot.idPath === hot.idPath);
if (!isExist) {
deleted.push({ ...hot });
}
});
}
return {
added,
deleted
};
};
const handleHotChange = (cascade, checked) => {
const nextSelectedHots = checked ? [...unref(selectedHots), cascade] : unref(selectedHots).filter((selectedCascade) => selectedCascade.idPath !== cascade.idPath);
const { added, deleted } = getAddAndDeleteOptions(nextSelectedHots, unref(selectedHots));
selectedHots.value = nextSelectedHots;
emit("change", {
added,
deleted
});
};
const handleHotClearAll = () => {
selectedHots.value = [];
};
const filterFromHots = (options2) => {
const currentAllHots = unref(cascadeProHot).list;
return options2.filter((option) => !!currentAllHots.find((_option) => _option.idPath === option.idPath));
};
expose({
handleHotClearAll
});
watch(() => selectRecords, (newVal) => {
const newSelectRecords = unref(newVal);
const oldSelectRecords = unref(selectedHots);
if (newSelectRecords.length === 0) {
handleHotClearAll();
} else {
const { added, deleted } = getAddAndDeleteOptions(newSelectRecords, oldSelectRecords);
if (added.length > 0) {
selectedHots.value = [...unref(selectedHots), ...filterFromHots(added)];
}
if (deleted.length > 0) {
const remainHots = unref(selectedHots).filter((option) => {
if (deleted.find((_option) => _option.idPath === option.idPath)) {
return false;
}
return true;
});
selectedHots.value = [...unref(remainHots)];
}
}
}, {
deep: true
});
return {
cascadeProHot,
selectedHots,
handleHotChange
};
}
});
const _hoisted_1 = {
key: 0,
class: "ta-cascade-pro-hot"
};
function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
const _component_CheckableTag = resolveComponent("CheckableTag");
return _ctx.cascadeProHot.visible ? (openBlock(), createElementBlock("div", _hoisted_1, [
(openBlock(true), createElementBlock(Fragment, null, renderList(_ctx.cascadeProHot.list, (cascade) => {
return openBlock(), createBlock(_component_CheckableTag, {
key: cascade.id,
checked: _ctx.selectedHots.filter((selectedCascade) => selectedCascade.idPath === cascade.idPath).length > 0,
onChange: (checked) => _ctx.handleHotChange(cascade, checked)
}, {
default: withCtx(() => [
createTextVNode(toDisplayString(cascade.name), 1)
]),
_: 2
}, 1032, ["checked", "onChange"]);
}), 128))
])) : createCommentVNode("v-if", true);
}
var Hot = /* @__PURE__ */ _export_sfc(_sfc_main, [["render", _sfc_render], ["__file", "/home/runner/work/tav-ui/tav-ui/packages/components/cascade-pro/src/components/hot.vue"]]);
export { Hot as default };
//# sourceMappingURL=hot2.mjs.map