{"version":3,"file":"filter-panel.mjs","sources":["../../../../../../packages/components/table/src/filter-panel.vue"],"sourcesContent":["<template>\n  <el-tooltip\n    ref=\"tooltip\"\n    v-model:visible=\"tooltipVisible\"\n    :offset=\"0\"\n    :placement=\"placement\"\n    :show-arrow=\"false\"\n    :stop-popper-mouse-event=\"false\"\n    append-to-body\n    effect=\"light\"\n    pure\n    :popper-class=\"ns.b()\"\n    persistent\n  >\n    <template #content>\n      <div v-if=\"multiple\">\n        <div :class=\"ns.e('content')\">\n          <el-scrollbar :wrap-class=\"ns.e('wrap')\">\n            <el-checkbox-group\n              v-model=\"filteredValue\"\n              :class=\"ns.e('checkbox-group')\"\n            >\n              <el-checkbox\n                v-for=\"filter in filters\"\n                :key=\"filter.value\"\n                :label=\"filter.value\"\n              >\n                {{ filter.text }}\n              </el-checkbox>\n            </el-checkbox-group>\n          </el-scrollbar>\n        </div>\n        <div :class=\"ns.e('bottom')\">\n          <button\n            :class=\"{ [ns.is('disabled')]: filteredValue.length === 0 }\"\n            :disabled=\"filteredValue.length === 0\"\n            type=\"button\"\n            @click=\"handleConfirm\"\n          >\n            {{ t('el.table.confirmFilter') }}\n          </button>\n          <button type=\"button\" @click=\"handleReset\">\n            {{ t('el.table.resetFilter') }}\n          </button>\n        </div>\n      </div>\n      <ul v-else :class=\"ns.e('list')\">\n        <li\n          :class=\"[\n            ns.e('list-item'),\n            {\n              [ns.is('active')]:\n                filterValue === undefined || filterValue === null,\n            },\n          ]\"\n          @click=\"handleSelect(null)\"\n        >\n          {{ t('el.table.clearFilter') }}\n        </li>\n        <li\n          v-for=\"filter in filters\"\n          :key=\"filter.value\"\n          :class=\"[ns.e('list-item'), ns.is('active', isActive(filter))]\"\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          `${ns.namespace.value}-table__column-filter-trigger`,\n          `${ns.namespace.value}-none-outline`,\n        ]\"\n        @click=\"showFilterPanel\"\n      >\n        <el-icon>\n          <arrow-up v-if=\"column.filterOpened\" />\n          <arrow-down v-else />\n        </el-icon>\n      </span>\n    </template>\n  </el-tooltip>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, ref, computed, getCurrentInstance, watch } from 'vue'\nimport ElCheckbox from '@element-plus/components/checkbox'\nimport { ElIcon } from '@element-plus/components/icon'\nimport { ArrowDown, ArrowUp } from '@element-plus/icons-vue'\nimport { ClickOutside } from '@element-plus/directives'\nimport { useLocale, useNamespace } from '@element-plus/hooks'\nimport ElTooltip from '@element-plus/components/tooltip'\nimport ElScrollbar from '@element-plus/components/scrollbar'\nimport type { Placement } from '@element-plus/components/popper'\n\nimport type { WritableComputedRef, PropType } from 'vue'\nimport type { TableColumnCtx } from './table-column/defaults'\nimport type { TableHeader } from './table-header'\nimport type { Store } from './store'\n\nconst { CheckboxGroup: ElCheckboxGroup } = ElCheckbox\n\nexport default defineComponent({\n  name: 'ElTableFilterPanel',\n  components: {\n    ElCheckbox,\n    ElCheckboxGroup,\n    ElScrollbar,\n    ElTooltip,\n    ElIcon,\n    ArrowDown,\n    ArrowUp,\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 ns = useNamespace('table-filter')\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 ElTooltip> | null>(null)\n    const filters = computed(() => {\n      return props.column && props.column.filters\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      handleConfirm,\n      handleReset,\n      handleSelect,\n      isActive,\n      t,\n      ns,\n      showFilterPanel,\n      hideFilterPanel,\n      popperPaneRef,\n      tooltip,\n    }\n  },\n})\n</script>\n"],"names":["_openBlock"],"mappings":";;;;;;;;;;;;;AAwGA,MAAM,EAAE,eAAe,oBAAoB;AAE3C,MAAK,YAAa,gBAAa;AAAA,EAC7B,MAAM;AAAA,EACN,YAAY;AAAA,IACV;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,EAEF,YAAY,EAAE;AAAA,EACd,OAAO;AAAA,IACL,WAAW;AAAA,MACT,MAAM;AAAA,MACN,SAAS;AAAA;AAAA,IAEX,OAAO;AAAA,MACL,MAAM;AAAA;AAAA,IAER,QAAQ;AAAA,MACN,MAAM;AAAA;AAAA,IAER,cAAc;AAAA,MACZ,MAAM;AAAA;AAAA;AAAA,EAGV,MAAM,OAAO;AACX,UAAM,WAAW;AACjB,UAAM,EAAE,MAAM;AACd,UAAM,KAAK,aAAa;AACxB,UAAM,SAAS;AACf,QAAI,CAAC,OAAO,aAAa,MAAM,MAAM,OAAO,KAAK;AAC/C,aAAO,aAAa,MAAM,MAAM,OAAO,MAAM;AAAA;AAE/C,UAAM,iBAAiB,IAAI;AAC3B,UAAM,UAAU,IAA2C;AAC3D,UAAM,UAAU,SAAS,MAAM;AAC7B,aAAO,MAAM,UAAU,MAAM,OAAO;AAAA;AAEtC,UAAM,cAAc,SAAS;AAAA,MAC3B,KAAK,MAAO;AAAmC,YACzC;AACJ;AACE;AACE;AAAiC;AAEjC,0BAAc,gBAAgB;AAAA;AAAA;AAAA;AAAA;AAKtC;AAA+D;AAE3D;AACE,uBAAa;AAAwB;AAEvC;AAAO;AAAA;AAGP,kBAAU;AACR;AAAoC;AAAA;AAAA;AAI1C;AACE;AACE;AAAoB;AAEtB;AAAO;AAET;AACE,aAAO;AAA6B;AAEtC,UAAM;AACJ;AAAuB;AAEzB,UAAM;AACJ;AACA;AAAuC;AAEzC;AACE,qBAAe,QAAQ;AAAA;AAEzB,UAAM;AACJ,oBAAc,cAAc;AAC5B;AAAA;AAEF;AACE;AACA;AACA;AAAA;AAEF;AACE;AACA;AACE,sBAAc;AAAc;AAE5B;AAAc;AAEhB;AAAA;AAEF;AACE,YAAM;AAA6B;AACnB;AACN;AAEV;AAAY;AAEd;AAII;AACE;AAAmC;AAAA;AAGvC;AACa;AAIf;AACE,qBAAe;AAAkB;AAGnC;AAAO,MACL;AAAA,MACA;AAAA,MACA;AAAA;AACA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA;AAAA;AAAA;;;;;;;;;;;;;;AArPW;AACL;;AACE;AACT,IACA;AAAY,IACZ;AAAA,IACD,2BAAc;AAAA,IACd;AAAc,IACd;AAAI,IACH;AAAA,IACD;AAAU;;AAEC;AACU;AAgBX;AAfO;WACX;AAAA,uBAAeA;AAAgB;;;AAYT;AAVI;;AACV;;;AAEZ;;AAEoB;AACV;;;;;;;;;;;;;;;AAOhB;AAAa;WACX;AAAA;AACa,kCACA;AAAoB;AAClB;AACZ;AAEG;AAIG;AAFY,YAAE;AAAA,0CACjB;AAAA;;;;AAIO;SACf;AAAA;AACQ;AAAoB;;;;;;AAStB;AAUD;;AANe,iBACZ;AAAA,kCACc;AAAA,kBACd;AAAA,iDAEQ;AAAA;;;;;;AAOV;AAA8B;AAAgE;;;;AAMpG;AACyC;AAAhB;;;;;;;;;;;;;;;;;;;"}