UNPKG

element-plus

Version:

A Component Library for Vue 3

217 lines (214 loc) 6.3 kB
import { defineComponent, getCurrentInstance, ref, computed } from 'vue'; import { ElCheckboxGroup, ElCheckbox } from '../../checkbox/index.mjs'; import { ElIcon } from '../../icon/index.mjs'; import { ArrowUp, ArrowDown } from '@element-plus/icons-vue'; import { ElTooltip } from '../../tooltip/index.mjs'; import { ElScrollbar } from '../../scrollbar/index.mjs'; import { useTooltipContentProps } from '../../tooltip/src/content.mjs'; import { useLocale } from '../../../hooks/use-locale/index.mjs'; import { useNamespace } from '../../../hooks/use-namespace/index.mjs'; import { isPropAbsent } from '../../../utils/types.mjs'; import { getEventCode } from '../../../utils/dom/event.mjs'; import { EVENT_CODE } from '../../../constants/aria.mjs'; var _sfc_main = defineComponent({ name: "ElTableFilterPanel", components: { ElCheckbox, ElCheckboxGroup, ElScrollbar, ElTooltip, ElIcon, ArrowDown, ArrowUp }, props: { placement: { type: String, default: "bottom-start" }, store: { type: Object }, column: { type: Object }, upDataColumn: { type: Function }, appendTo: useTooltipContentProps.appendTo }, setup(props) { const instance = getCurrentInstance(); const { t } = useLocale(); const ns = useNamespace("table-filter"); const parent = instance == null ? void 0 : instance.parent; if (props.column && !parent.filterPanels.value[props.column.id]) { parent.filterPanels.value[props.column.id] = instance; } const tooltipRef = ref(null); const rootRef = ref(null); const checkedIndex = ref(0); const filters = computed(() => { return props.column && props.column.filters; }); const filterClassName = computed(() => { if (props.column && props.column.filterClassName) { return `${ns.b()} ${props.column.filterClassName}`; } return ns.b(); }); const filterValue = computed({ get: () => { var _a; return (((_a = props.column) == null ? void 0 : _a.filteredValue) || [])[0]; }, set: (value) => { if (filteredValue.value) { if (!isPropAbsent(value)) { filteredValue.value.splice(0, 1, value); } else { filteredValue.value.splice(0, 1); } } } }); const filteredValue = computed({ get() { if (props.column) { return props.column.filteredValue || []; } return []; }, set(value) { var _a; if (props.column) { (_a = props.upDataColumn) == null ? void 0 : _a.call(props, "filteredValue", value); } } }); const multiple = computed(() => { if (props.column) { return props.column.filterMultiple; } return true; }); const isActive = (filter) => { return filter.value === filterValue.value; }; const hidden = () => { var _a; (_a = tooltipRef.value) == null ? void 0 : _a.onClose(); }; const handleConfirm = () => { confirmFilter(filteredValue.value); hidden(); }; const handleReset = () => { filteredValue.value = []; confirmFilter(filteredValue.value); hidden(); }; const handleSelect = (_filterValue, index) => { filterValue.value = _filterValue; checkedIndex.value = index; if (!isPropAbsent(_filterValue)) { confirmFilter(filteredValue.value); } else { confirmFilter([]); } hidden(); }; const confirmFilter = (filteredValue2) => { var _a, _b; (_a = props.store) == null ? void 0 : _a.commit("filterChange", { column: props.column, values: filteredValue2 }); (_b = props.store) == null ? void 0 : _b.updateAllSelected(); }; const handleShowTooltip = () => { var _a, _b; (_a = rootRef.value) == null ? void 0 : _a.focus(); !multiple.value && initCheckedIndex(); if (props.column) { (_b = props.upDataColumn) == null ? void 0 : _b.call(props, "filterOpened", true); } }; const handleHideTooltip = () => { var _a; if (props.column) { (_a = props.upDataColumn) == null ? void 0 : _a.call(props, "filterOpened", false); } }; const initCheckedIndex = () => { if (isPropAbsent(filterValue)) { checkedIndex.value = 0; return; } const idx = (filters.value || []).findIndex((item) => { return item.value === filterValue.value; }); checkedIndex.value = idx >= 0 ? idx + 1 : 0; }; const handleKeydown = (event) => { var _a, _b; const code = getEventCode(event); const len = (filters.value ? filters.value.length : 0) + 1; let index = checkedIndex.value; let isPreventDefault = true; switch (code) { case EVENT_CODE.down: case EVENT_CODE.right: index = (index + 1) % len; break; case EVENT_CODE.up: case EVENT_CODE.left: index = (index - 1 + len) % len; break; case EVENT_CODE.tab: hidden(); isPreventDefault = false; break; case EVENT_CODE.enter: case EVENT_CODE.space: if (index === 0) { handleSelect(null, 0); } else { const item = (filters.value || [])[index - 1]; item.value && handleSelect(item.value, index); } break; default: isPreventDefault = false; break; } isPreventDefault && event.preventDefault(); checkedIndex.value = index; (_b = (_a = rootRef.value) == null ? void 0 : _a.querySelector( `.${ns.e("list-item")}:nth-child(${index + 1})` )) == null ? void 0 : _b.focus(); }; return { multiple, filterClassName, filteredValue, filterValue, filters, handleConfirm, handleReset, handleSelect, isPropAbsent, isActive, t, ns, tooltipRef, rootRef, checkedIndex, handleShowTooltip, handleHideTooltip, handleKeydown }; } }); export { _sfc_main as default }; //# sourceMappingURL=filter-panel.vue2.mjs.map