{"version":3,"file":"filter-panel.mjs","sources":["../../../../../../packages/components/table/src/filter-panel.vue"],"sourcesContent":["<template>\r\n  <sg-tooltip\r\n    ref=\"tooltip\"\r\n    :visible=\"tooltipVisible\"\r\n    :offset=\"0\"\r\n    :placement=\"placement\"\r\n    :visible-arrow=\"false\"\r\n    :stop-popper-mouse-event=\"false\"\r\n    transfer\r\n    theme=\"light\"\r\n    pure\r\n    :popper-class=\"ns.b()\"\r\n    persistent\r\n  >\r\n    <template #content>\r\n      <div v-if=\"multiple\">\r\n        <div :class=\"ns.e('content')\">\r\n          <sg-scrollbar :wrap-class=\"ns.e('wrap')\">\r\n            <sg-checkbox-group\r\n              v-model=\"filteredValue\"\r\n              :class=\"ns.e('checkbox-group')\"\r\n            >\r\n              <sg-checkbox\r\n                v-for=\"filter in filters\"\r\n                :key=\"filter.value\"\r\n                :label=\"filter.value\"\r\n              >\r\n                {{ filter.text }}\r\n              </sg-checkbox>\r\n            </sg-checkbox-group>\r\n          </sg-scrollbar>\r\n        </div>\r\n        <div :class=\"ns.e('bottom')\">\r\n          <button\r\n            :class=\"{ [ns.is('disabled')]: filteredValue.length === 0 }\"\r\n            :disabled=\"filteredValue.length === 0\"\r\n            type=\"button\"\r\n            @click=\"handleConfirm\"\r\n          >\r\n            {{ t('sg.table.confirmFilter') }}\r\n          </button>\r\n          <button type=\"button\" @click=\"handleReset\">\r\n            {{ t('sg.table.resetFilter') }}\r\n          </button>\r\n        </div>\r\n      </div>\r\n      <ul v-else :class=\"ns.e('list')\">\r\n        <li\r\n          :class=\"[\r\n            ns.e('list-item'),\r\n            {\r\n              [ns.is('active')]:\r\n                filterValue === undefined || filterValue === null,\r\n            },\r\n          ]\"\r\n          @click=\"handleSelect(null)\"\r\n        >\r\n          {{ t('sg.table.clearFilter') }}\r\n        </li>\r\n        <li\r\n          v-for=\"filter in filters\"\r\n          :key=\"filter.value\"\r\n          :class=\"[ns.e('list-item'), ns.is('active', isActive(filter))]\"\r\n          :label=\"filter.value\"\r\n          @click=\"handleSelect(filter.value)\"\r\n        >\r\n          {{ filter.text }}\r\n        </li>\r\n      </ul>\r\n    </template>\r\n    <template #default>\r\n      <span\r\n        v-click-outside:[popperPaneRef]=\"hideFilterPanel\"\r\n        :class=\"[\r\n          `${ns.namespace.value}-table__column-filter-trigger`,\r\n          `${ns.namespace.value}-none-outline`,\r\n        ]\"\r\n        @click=\"showFilterPanel\"\r\n      >\r\n        <sg-icon>\r\n          <arrow-up v-if=\"column.filterOpened\" />\r\n          <arrow-down v-else />\r\n        </sg-icon>\r\n      </span>\r\n    </template>\r\n  </sg-tooltip>\r\n</template>\r\n\r\n<script lang=\"ts\">\r\n// @ts-nocheck\r\nimport { computed, defineComponent, getCurrentInstance, ref, watch } from 'vue'\r\nimport SgCheckbox from '@sgui-plus/components/checkbox'\r\nimport { SgIcon } from '@sgui-plus/components/icon'\r\nimport { ArrowDown, ArrowUp } from '@sgui-plus/icons-vue'\r\nimport { ClickOutside } from '@sgui-plus/directives'\r\nimport { useLocale, useNamespace } from '@sgui-plus/hooks'\r\nimport SgTooltip from '@sgui-plus/components/tooltip'\r\nimport SgScrollbar from '@sgui-plus/components/scrollbar'\r\nimport type { Placement } from '@sgui-plus/components/popper'\r\n\r\nimport type { PropType, WritableComputedRef } from 'vue'\r\nimport type { TableColumnCtx } from './table-column/defaults'\r\nimport type { TableHeader } from './table-header'\r\nimport type { Store } from './store'\r\n\r\nconst { CheckboxGroup: SgCheckboxGroup } = SgCheckbox\r\n\r\nexport default defineComponent({\r\n  name: 'SgTableFilterPanel',\r\n  components: {\r\n    SgCheckbox,\r\n    SgCheckboxGroup,\r\n    SgScrollbar,\r\n    SgTooltip,\r\n    SgIcon,\r\n    ArrowDown,\r\n    ArrowUp,\r\n  },\r\n  directives: { ClickOutside },\r\n  props: {\r\n    placement: {\r\n      type: String as PropType<Placement>,\r\n      default: 'bottom-start',\r\n    },\r\n    store: {\r\n      type: Object as PropType<Store<unknown>>,\r\n    },\r\n    column: {\r\n      type: Object as PropType<TableColumnCtx<unknown>>,\r\n    },\r\n    upDataColumn: {\r\n      type: Function,\r\n    },\r\n  },\r\n  setup(props) {\r\n    const instance = getCurrentInstance()\r\n    const { t } = useLocale()\r\n    const ns = useNamespace('table-filter')\r\n    const parent = instance?.parent as TableHeader\r\n    if (!parent.filterPanels.value[props.column.id]) {\r\n      parent.filterPanels.value[props.column.id] = instance\r\n    }\r\n    const tooltipVisible = ref(false)\r\n    const tooltip = ref<InstanceType<typeof SgTooltip> | null>(null)\r\n    const filters = computed(() => {\r\n      return props.column && props.column.filters\r\n    })\r\n    const filterValue = computed({\r\n      get: () => (props.column?.filteredValue || [])[0],\r\n      set: (value: string) => {\r\n        if (filteredValue.value) {\r\n          if (typeof value !== 'undefined' && value !== null) {\r\n            filteredValue.value.splice(0, 1, value)\r\n          } else {\r\n            filteredValue.value.splice(0, 1)\r\n          }\r\n        }\r\n      },\r\n    })\r\n    const filteredValue: WritableComputedRef<unknown[]> = computed({\r\n      get() {\r\n        if (props.column) {\r\n          return props.column.filteredValue || []\r\n        }\r\n        return []\r\n      },\r\n      set(value: unknown[]) {\r\n        if (props.column) {\r\n          props.upDataColumn('filteredValue', value)\r\n        }\r\n      },\r\n    })\r\n    const multiple = computed(() => {\r\n      if (props.column) {\r\n        return props.column.filterMultiple\r\n      }\r\n      return true\r\n    })\r\n    const isActive = (filter) => {\r\n      return filter.value === filterValue.value\r\n    }\r\n    const hidden = () => {\r\n      tooltipVisible.value = false\r\n    }\r\n    const showFilterPanel = (e: MouseEvent) => {\r\n      e.stopPropagation()\r\n      tooltipVisible.value = !tooltipVisible.value\r\n    }\r\n    const hideFilterPanel = () => {\r\n      tooltipVisible.value = false\r\n    }\r\n    const handleConfirm = () => {\r\n      confirmFilter(filteredValue.value)\r\n      hidden()\r\n    }\r\n    const handleReset = () => {\r\n      filteredValue.value = []\r\n      confirmFilter(filteredValue.value)\r\n      hidden()\r\n    }\r\n    const handleSelect = (_filterValue?: string) => {\r\n      filterValue.value = _filterValue\r\n      if (typeof _filterValue !== 'undefined' && _filterValue !== null) {\r\n        confirmFilter(filteredValue.value)\r\n      } else {\r\n        confirmFilter([])\r\n      }\r\n      hidden()\r\n    }\r\n    const confirmFilter = (filteredValue: unknown[]) => {\r\n      props.store.commit('filterChange', {\r\n        column: props.column,\r\n        values: filteredValue,\r\n      })\r\n      props.store.updateAllSelected()\r\n    }\r\n    watch(\r\n      tooltipVisible,\r\n      (value) => {\r\n        // todo\r\n        if (props.column) {\r\n          props.upDataColumn('filterOpened', value)\r\n        }\r\n      },\r\n      {\r\n        immediate: true,\r\n      }\r\n    )\r\n\r\n    const popperPaneRef = computed(() => {\r\n      return tooltip.value?.popperRef?.contentRef\r\n    })\r\n\r\n    return {\r\n      tooltipVisible,\r\n      multiple,\r\n      filteredValue,\r\n      filterValue,\r\n      filters,\r\n      handleConfirm,\r\n      handleReset,\r\n      handleSelect,\r\n      isActive,\r\n      t,\r\n      ns,\r\n      showFilterPanel,\r\n      hideFilterPanel,\r\n      popperPaneRef,\r\n      tooltip,\r\n    }\r\n  },\r\n})\r\n</script>\r\n"],"names":["_resolveDirective","_openBlock","_createBlock","_withCtx","_createElementVNode","_normalizeClass","_createVNode","_createElementBlock","_Fragment","_renderList","_toDisplayString","_withDirectives"],"mappings":"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"}