{"version":3,"file":"filter-controller.mjs","sources":["../../src/table/filter-controller.tsx"],"sourcesContent":["import { defineComponent, PropType, ref, h } from 'vue';\nimport isEmpty from 'lodash/isEmpty';\nimport Popup, { PopupProps } from '../popup';\nimport { CheckboxGroup } from '../checkbox';\nimport { RadioGroup } from '../radio';\nimport Input from '../input';\nimport TButton from '../button';\nimport { useTNodeDefault } from '../hooks/tnode';\nimport { PrimaryTableCol, FilterValue } from './type';\nimport { useConfig } from '../hooks/useConfig';\nimport { AttachNode } from '../common';\nimport isFunction from 'lodash/isFunction';\n\nexport interface TableFilterControllerProps {\n  tFilterValue: FilterValue;\n  innerFilterValue: FilterValue;\n  tableFilterClasses: {\n    filterable: string;\n    popup: string;\n    icon: string;\n    popupContent: string;\n    result: string;\n    inner: string;\n    bottomButtons: string;\n    contentInner: string;\n    iconWrap: string;\n  };\n  isFocusClass: string;\n  column: PrimaryTableCol;\n  colIndex: number;\n  // HTMLElement\n  primaryTableElement: any;\n  popupProps: PopupProps;\n  attach?: AttachNode;\n  onVisibleChange: (val: boolean) => void;\n}\n\nexport default defineComponent({\n  name: 'XableFilterController',\n\n  props: {\n    column: Object as PropType<TableFilterControllerProps['column']>,\n    colIndex: Number,\n    tFilterValue: Object as PropType<TableFilterControllerProps['tFilterValue']>,\n    innerFilterValue: Object as PropType<TableFilterControllerProps['innerFilterValue']>,\n    tableFilterClasses: Object as PropType<TableFilterControllerProps['tableFilterClasses']>,\n    isFocusClass: String,\n    // eslint-disable-next-line\n    primaryTableElement: {},\n    popupProps: Object as PropType<TableFilterControllerProps['popupProps']>,\n    attach: [String, Function] as PropType<TableFilterControllerProps['attach']>,\n    onVisibleChange: Function as PropType<TableFilterControllerProps['onVisibleChange']>,\n  },\n\n  emits: ['inner-filter-change', 'reset', 'confirm'],\n\n  setup(props: TableFilterControllerProps, context) {\n    const triggerElementRef = ref<HTMLDivElement>(null);\n    const renderTNode = useTNodeDefault();\n    const { t, globalConfig } = useConfig('table');\n    const filterPopupVisible = ref(false);\n\n    const onFilterPopupVisibleChange = (visible: boolean) => {\n      filterPopupVisible.value = visible;\n      props.onVisibleChange?.(visible);\n    };\n\n    const renderComponent = (column: PrimaryTableCol, filterComponentProps: any, component: any) => {\n      if (!component) return null;\n      const isVueComponent = !!component.setup;\n      if (isFunction(column.filter.component) && !isVueComponent) {\n        return column.filter.component((v: any, b: any) => {\n          const tProps = typeof b === 'object' && 'attrs' in b ? b.attrs : {};\n          return h(v, {\n            props: { ...filterComponentProps, ...tProps },\n          });\n        });\n      }\n      const filter = column.filter || {};\n      return (\n        <component\n          class={filter.classNames}\n          style={filter.style}\n          {...filter.attrs}\n          {...filterComponentProps}\n        ></component>\n      );\n    };\n\n    const getFilterContent = (column: PrimaryTableCol) => {\n      const types = ['single', 'multiple', 'input'];\n      if (column.type && !types.includes(column.filter.type)) {\n        console.error(`TDesign Table Error: column.filter.type must be the following: ${JSON.stringify(types)}`);\n        return;\n      }\n      const { innerFilterValue } = props;\n      const component =\n        {\n          single: RadioGroup,\n          multiple: CheckboxGroup,\n          input: Input,\n        }[column.filter.type] || column.filter.component;\n      if (!component && !column.filter.component) return;\n      const filterComponentProps: { [key: string]: any } = {\n        options: ['single', 'multiple'].includes(column.filter.type) ? column.filter?.list : undefined,\n        ...(column.filter?.props || {}),\n        onChange: (val: any, ctx: any) => {\n          context.emit('inner-filter-change', val, column);\n          if (column.filter.props?.onChange) {\n            column.filter.props.onChange?.(val, ctx);\n          }\n        },\n      };\n      if (column.colKey && innerFilterValue && column.colKey in innerFilterValue) {\n        filterComponentProps.value = props.innerFilterValue?.[column.colKey];\n      }\n      // 允许自定义触发确认搜索的事件\n      if (column.filter.confirmEvents) {\n        column.filter.confirmEvents.forEach((event) => {\n          filterComponentProps[event] = () => {\n            context.emit('confirm', column);\n            filterPopupVisible.value = false;\n          };\n        });\n      }\n      return (\n        <div class={props.tableFilterClasses.contentInner}>\n          {renderComponent(column, filterComponentProps, component)}\n        </div>\n      );\n    };\n\n    const getBottomButtons = (column: PrimaryTableCol) => {\n      if (!column.filter.showConfirmAndReset) return;\n      return (\n        <div class={props.tableFilterClasses.bottomButtons}>\n          <TButton\n            theme=\"default\"\n            size=\"small\"\n            onClick={() => {\n              context.emit('reset', column);\n              filterPopupVisible.value = false;\n            }}\n          >\n            {globalConfig.value.resetText}\n          </TButton>\n          <TButton\n            theme=\"primary\"\n            size=\"small\"\n            onClick={() => {\n              context.emit('confirm', column);\n              filterPopupVisible.value = false;\n            }}\n          >\n            {globalConfig.value.confirmText}\n          </TButton>\n        </div>\n      );\n    };\n\n    const getContent = () => (\n      <div class={props.tableFilterClasses.popupContent}>\n        {getFilterContent(props.column)}\n        {getBottomButtons(props.column)}\n      </div>\n    );\n\n    return {\n      t,\n      globalConfig,\n      filterPopupVisible,\n      triggerElementRef,\n      renderTNode,\n      getContent,\n      onFilterPopupVisibleChange,\n    };\n  },\n\n  render() {\n    const { column, popupProps } = this as any;\n\n    if (!column.filter || (column.filter && !Object.keys(column.filter).length)) return null;\n    const defaultFilterIcon = this.t(this.globalConfig.filterIcon) || <icon-ri-filter-line />;\n    const filterValue = this.tFilterValue?.[column.colKey];\n    const isObjectTrue = typeof filterValue === 'object' && !isEmpty(filterValue);\n    const isValueTrue = filterValue && typeof filterValue !== 'object';\n    return (\n      <Popup\n        attach={this.attach || (this.primaryTableElement ? () => this.primaryTableElement as HTMLElement : undefined)}\n        visible={this.filterPopupVisible}\n        destroyOnClose\n        trigger=\"click\"\n        placement=\"bottom-right\"\n        showArrow\n        overlayClassName={this.tableFilterClasses.popup}\n        onVisibleChange={(val: boolean) => this.onFilterPopupVisibleChange(val)}\n        class={[\n          this.tableFilterClasses.icon,\n          {\n            [this.isFocusClass]: isObjectTrue || isValueTrue,\n          },\n        ]}\n        content={this.getContent}\n        {...popupProps}\n      >\n        <div ref=\"triggerElementRef\">\n          {this.renderTNode('filterIcon', {\n            defaultNode: defaultFilterIcon,\n            params: { col: column, colIndex: this.colIndex },\n          })}\n        </div>\n      </Popup>\n    );\n  },\n});\n"],"names":["name","props","column","colIndex","tFilterValue","innerFilterValue","tableFilterClasses","isFocusClass","popupProps","attach","onVisibleChange","emits","setup","_createVNode","_mergeProps","console","single","multiple","input","options","onChange","filterComponentProps","context","t","globalConfig","filterPopupVisible","triggerElementRef","renderTNode","getContent","onFilterPopupVisibleChange","_resolveComponent","isEmpty","defaultNode","params","col"],"mappings":"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"}