UNPKG

tav-ui

Version:
122 lines (119 loc) 4.55 kB
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