hongluan-ui
Version:
Hongluan Component Library for Vue 3
1 lines • 9.77 kB
Source Map (JSON)
{"version":3,"file":"filter-panel.mjs","sources":["../../../../../../packages/components/table/src/filter-panel.vue"],"sourcesContent":["<template>\n <hl-tooltip\n ref=\"tooltip\"\n :visible=\"tooltipVisible\"\n :offset=\"0\"\n :placement=\"placement\"\n :show-arrow=\"false\"\n :stop-popper-mouse-event=\"false\"\n teleported\n effect=\"light\"\n pure\n :popper-class=\"filterClassName\"\n persistent\n >\n <template #content>\n <div v-if=\"multiple\">\n <div class=\"table-filter-content\">\n <hl-scrollbar wrap-class=\"table-filter-wrap\">\n <hl-checkbox-group\n v-model=\"filteredValue\"\n class=\"table-filter-checkbox-group\"\n >\n <hl-checkbox\n v-for=\"filter in filters\"\n :key=\"filter.value\"\n :label=\"filter.value\"\n >\n {{ filter.text }}\n </hl-checkbox>\n </hl-checkbox-group>\n </hl-scrollbar>\n </div>\n <div class=\"table-filter-bottom\">\n <hl-button\n :class=\"{ 'is-disabled': filteredValue.length === 0 }\"\n :disabled=\"filteredValue.length === 0\"\n @click=\"handleConfirm\"\n >\n {{ t('hl.table.confirmFilter') }}\n </hl-button>\n <hl-button type=\"button\" @click=\"handleReset\">\n {{ t('hl.table.resetFilter') }}\n </hl-button>\n </div>\n </div>\n <ul v-else class=\"table-filter-list\">\n <li\n :class=\"[\n 'table-filter-list-item',\n {\n 'is-active':\n filterValue === undefined || filterValue === null,\n },\n ]\"\n @click=\"handleSelect(null)\"\n >\n {{ t('hl.table.clearFilter') }}\n </li>\n <li\n v-for=\"filter in filters\"\n :key=\"filter.value\"\n :class=\"['table-filter-list-item', isActive(filter) ? 'is-active' : '']\"\n :label=\"filter.value\"\n @click=\"handleSelect(filter.value)\"\n >\n {{ filter.text }}\n </li>\n </ul>\n </template>\n <template #default>\n <span\n v-click-outside:[popperPaneRef]=\"hideFilterPanel\"\n :class=\"[\n `table-filter-trigger`,\n `none-outline`,\n column.filterOpened ? 'opened' : ''\n ]\"\n @click=\"showFilterPanel\"\n >\n <hl-icon>\n <slot name=\"filter-icon\" :filterOpened=\"column.filterOpened\">\n <system-filter />\n </slot>\n </hl-icon>\n </span>\n </template>\n </hl-tooltip>\n</template>\n\n<script lang=\"ts\">\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-nocheck\nimport { computed, defineComponent, getCurrentInstance, ref, watch } from 'vue'\nimport HlCheckbox from '@hongluan-ui/components/checkbox'\nimport HlCheckboxGroup from '@hongluan-ui/components/checkbox-group'\nimport HlIcon from '@hongluan-ui/components/icon'\nimport { SystemFilter } from '@hongluan-ui/components/system-icon'\nimport { ClickOutside } from '@hongluan-ui/directives'\nimport { useLocale } from '@hongluan-ui/hooks'\nimport HlTooltip from '@hongluan-ui/components/tooltip'\nimport HlButton from '@hongluan-ui/components/button'\nimport HlScrollbar from '@hongluan-ui/components/scrollbar'\nimport type { Placement } from '@hongluan-ui/components/popper'\n\nimport type { PropType, WritableComputedRef } from 'vue'\nimport type { TableColumnCtx } from './table-column/defaults'\nimport type { TableHeader } from './table-header'\nimport type { Store } from './store'\n\nexport default defineComponent({\n name: 'TableFilterPanel',\n components: {\n HlCheckbox,\n HlCheckboxGroup,\n HlScrollbar,\n HlTooltip,\n HlIcon,\n HlButton,\n SystemFilter,\n },\n directives: { ClickOutside },\n props: {\n placement: {\n type: String as PropType<Placement>,\n default: 'bottom-start',\n },\n store: {\n type: Object as PropType<Store<unknown>>,\n },\n column: {\n type: Object as PropType<TableColumnCtx<unknown>>,\n },\n upDataColumn: {\n type: Function,\n },\n },\n setup(props) {\n const instance = getCurrentInstance()\n const { t } = useLocale()\n const parent = instance?.parent as TableHeader\n if (!parent.filterPanels.value[props.column.id]) {\n parent.filterPanels.value[props.column.id] = instance\n }\n const tooltipVisible = ref(false)\n const tooltip = ref<InstanceType<typeof HlTooltip> | null>(null)\n const filters = computed(() => {\n return props.column && props.column.filters\n })\n const filterClassName = computed(() => {\n if (props.column.filterClassName) {\n return `popover popover-table-filter ${props.column.filterClassName}`\n }\n return 'popover popover-table-filter'\n })\n const filterValue = computed({\n get: () => (props.column?.filteredValue || [])[0],\n set: (value: string) => {\n if (filteredValue.value) {\n if (typeof value !== 'undefined' && value !== null) {\n filteredValue.value.splice(0, 1, value)\n } else {\n filteredValue.value.splice(0, 1)\n }\n }\n },\n })\n const filteredValue: WritableComputedRef<unknown[]> = computed({\n get() {\n if (props.column) {\n return props.column.filteredValue || []\n }\n return []\n },\n set(value: unknown[]) {\n if (props.column) {\n props.upDataColumn('filteredValue', value)\n }\n },\n })\n const multiple = computed(() => {\n if (props.column) {\n return props.column.filterMultiple\n }\n return true\n })\n const isActive = filter => {\n return filter.value === filterValue.value\n }\n const hidden = () => {\n tooltipVisible.value = false\n }\n const showFilterPanel = (e: MouseEvent) => {\n e.stopPropagation()\n tooltipVisible.value = !tooltipVisible.value\n }\n const hideFilterPanel = () => {\n tooltipVisible.value = false\n }\n const handleConfirm = () => {\n confirmFilter(filteredValue.value)\n hidden()\n }\n const handleReset = () => {\n filteredValue.value = []\n confirmFilter(filteredValue.value)\n hidden()\n }\n const handleSelect = (_filterValue?: string) => {\n filterValue.value = _filterValue\n if (typeof _filterValue !== 'undefined' && _filterValue !== null) {\n confirmFilter(filteredValue.value)\n } else {\n confirmFilter([])\n }\n hidden()\n }\n const confirmFilter = (filteredValue: unknown[]) => {\n props.store.commit('filterChange', {\n column: props.column,\n values: filteredValue,\n })\n props.store.updateAllSelected()\n }\n watch(\n tooltipVisible,\n value => {\n // todo\n if (props.column) {\n props.upDataColumn('filterOpened', value)\n }\n },\n {\n immediate: true,\n },\n )\n\n const popperPaneRef = computed(() => {\n return tooltip.value?.popperRef?.contentRef\n })\n\n return {\n tooltipVisible,\n multiple,\n filteredValue,\n filterValue,\n filters,\n filterClassName,\n handleConfirm,\n handleReset,\n handleSelect,\n isActive,\n t,\n showFilterPanel,\n hideFilterPanel,\n popperPaneRef,\n tooltip,\n }\n },\n})\n</script>\n"],"names":["_toDisplayString","_createElementBlock"],"mappings":"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"}