UNPKG

xdesign-vue-next

Version:

XDesign Component for vue-next

1 lines 13.7 kB
{"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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqCA,4BAAA,eAAA,CAAA;AACEA,EAAAA,IAAAA,EAAAA,uBAAAA;AAEAC,EAAAA,KAAAA,EAAAA;AACEC,IAAAA,MAAAA,EAAAA,MAAAA;AACAC,IAAAA,QAAAA,EAAAA,MAAAA;AACAC,IAAAA,YAAAA,EAAAA,MAAAA;AACAC,IAAAA,gBAAAA,EAAAA,MAAAA;AACAC,IAAAA,kBAAAA,EAAAA,MAAAA;AACAC,IAAAA,YAAAA,EAAAA,MAAAA;;AAGAC,IAAAA,UAAAA,EAAAA,MAAAA;AACAC,IAAAA,MAAAA,EAAAA,CAAAA,MAAAA,EAAAA,QAAAA,CAAAA;AACAC,IAAAA,eAAAA,EAAAA,QAAAA;;AAGFC,EAAAA,KAAAA,EAAAA,CAAAA,qBAAAA,EAAAA,OAAAA,EAAAA,SAAAA,CAAAA;AAEAC,EAAAA,KAAAA,EAAAA,SAAAA,KAAAA,CAAAA,KAAAA,EAAAA,OAAAA,EAAAA;AACQ,IAAA,IAAA,iBAAA,GAAA,GAAA,CAAA,IAAA,CAAA,CAAA;AACN,IAAA,IAAA,WAAA,GAAA,eAAA,EAAA,CAAA;AACA,IAAA,IAAA,UAAA,GAAA,SAAA,CAAA,OAAA,CAAA;;;AACM,IAAA,IAAA,kBAAA,GAAA,GAAA,CAAA,KAAA,CAAA,CAAA;AAEA,IAAA,IAAA,0BAAA,GAAA,SAAA,0BAAA,CAAA,OAAA,EAAA;AAAmD,MAAA,IAAA,qBAAA,CAAA;;AAEvD,MAAA,CAAA,qBAAA,GAAA,KAAA,CAAA,eAAA,MAAA,IAAA,IAAA,qBAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,qBAAA,CAAA,IAAA,CAAA,KAAA,EAAA,OAAA,CAAA,CAAA;;;AAIA,MAAA,IAAA,CAAA,SAAA,EAAA,OAAA,IAAA,CAAA;AACM,MAAA,IAAA,cAAA,GAAA,CAAA,CAAA,SAAA,CAAA,KAAA,CAAA;;;AAGI,UAAA,IAAA,MAAA,GAAA,OAAA,CAAA,CAAA,CAAA,KAAA,QAAA,IAAA,OAAA,IAAA,CAAA,GAAA,CAAA,CAAA,KAAA,GAAA,EAAA,CAAA;;AAEJX,YAAAA,KAAAA,EAAAA,aAAAA,CAAAA,aAAAA,CAAAA,EAAAA,EAAAA,oBAAAA,CAAAA,EAAAA,MAAAA,CAAAA;AACF,WAAA,CAAA,CAAA;AACF,SAAA,CAAA,CAAA;AACF,OAAA;AACM,MAAA,IAAA,MAAA,GAAA,MAAA,CAAA,MAAA,IAAA,EAAA,CAAA;AAEJ,MAAA,OAAAY,WAAA,CAAA,SAAA,EAAAC,UAAA,CAAA;;AACgB,QAAA,OAAA,EAAA,MAAA,CAAA,KAAA;AACA,OAAA,EAAA,MAAA,CAAA,KAAA,EAAA,oBAAA,CAAA,EAAA,IAAA,CAAA,CAAA;;AAOd,IAAA,IAAA,gBAAA,GAAA,SAAA,gBAAA,CAAA,MAAA,EAAA;;;AAEA,MAAA,IAAA,MAAA,CAAA,IAAA,IAAA,CAAA,KAAA,CAAA,QAAA,CAAA,MAAA,CAAA,MAAA,CAAA,IAAA,CAAA,EAAA;AACFC,QAAAA,OAAAA,CAAAA,KAAAA,CAAAA,iEAAAA,CAAAA,MAAAA,CAAAA,IAAAA,CAAAA,SAAAA,CAAAA,KAAAA,CAAAA,CAAAA,CAAAA,CAAAA;AACA,QAAA,OAAA;AACF,OAAA;AACM,MAAA,IAAA,gBAAA,GAAA,KAAA,CAAA,gBAAA,CAAA;AACN,MAAA,IAAA,SAAA,GAAA;AAEIC,QAAAA,MAAAA,EAAAA,UAAAA;AACAC,QAAAA,QAAAA,EAAAA,aAAAA;AACAC,QAAAA,KAAAA,EAAAA,KAAAA;AACF,OAAA,CAAA,MAAA,CAAA,MAAA,CAAA,IAAA,CAAA,IAAA,MAAA,CAAA,MAAA,CAAA,SAAA,CAAA;;AAEF,MAAA,IAAA,oBAAA,GAAA,aAAA,CAAA,aAAA,CAAA;AACEC,QAAAA,OAAAA,EAAAA,CAAAA,QAAAA,EAAAA,UAAAA,CAAAA,CAAAA,QAAAA,CAAAA,MAAAA,CAAAA,MAAAA,CAAAA,IAAAA,CAAAA,GAAAA,CAAAA,cAAAA,GAAAA,MAAAA,CAAAA,MAAAA,MAAAA,IAAAA,IAAAA,cAAAA,KAAAA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,cAAAA,CAAAA,IAAAA,GAAAA,KAAAA,CAAAA;AAAqF,OAAA,EAAA,CAAA,CAAA,eAAA,GAAA,MAAA,CAAA,MAAA,MAAA,IAAA,IAAA,eAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,eAAA,CAAA,KAAA,KAAA,EAAA,CAAA,EAAA,EAAA,EAAA;AAErFC,QAAAA,QAAAA,EAAAA,SAAAA,QAAAA,CAAAA,GAAAA,EAAAA,GAAAA,EAAAA;AAAkC,UAAA,IAAA,oBAAA,CAAA;;AAE5B,UAAA,IAAA,CAAA,oBAAA,GAAA,MAAA,CAAA,MAAA,CAAA,KAAA,MAAA,IAAA,IAAA,oBAAA,KAAA,KAAA,CAAA,IAAA,oBAAA,CAAA,QAAA,EAAA;;;AAEJ,WAAA;AACF,SAAA;;;AAE0E,QAAA,IAAA,qBAAA,CAAA;AACrDC,QAAAA,oBAAAA,CAAAA,KAAAA,GAAAA,CAAAA,qBAAAA,GAAAA,KAAAA,CAAAA,gBAAAA,MAAAA,IAAAA,IAAAA,qBAAAA,KAAAA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,qBAAAA,CAAAA,MAAAA,CAAAA,MAAAA,CAAAA,CAAAA;AACvB,OAAA;AAEI,MAAA,IAAA,MAAA,CAAA,MAAA,CAAA,aAAA,EAAA;;AAEAA,UAAAA,oBAAAA,CAAAA,KAAAA,CAAAA,GAAAA,YAAAA;AACUC,YAAAA,OAAAA,CAAAA,IAAAA,CAAAA,SAAAA,EAAAA,MAAAA,CAAAA,CAAAA;;;AAGZ,SAAA,CAAA,CAAA;AACF,OAAA;AAEE,MAAA,OAAAT,WAAA,CAAA,KAAA,EAAA;;AACG,OAAA,EAAA,CAAA,eAAA,CAAA,MAAA,EAAA,oBAAA,EAAA,SAAA,CAAA,CAAA,CAAA,CAAA;;AAKD,IAAA,IAAA,gBAAA,GAAA,SAAA,gBAAA,CAAA,MAAA,EAAA;AACA,MAAA,IAAA,CAAA,MAAA,CAAA,MAAA,CAAA,mBAAA,EAAA,OAAA;AACJ,MAAA,OAAAA,WAAA,CAAA,KAAA,EAAA;;;AACuC,QAAA,OAAA,EAAA,SAAA;;;AAKvBS,UAAAA,OAAAA,CAAAA,IAAAA,CAAAA,OAAAA,EAAAA,MAAAA,CAAAA,CAAAA;;AAEV,SAAA;AAEC,OAAA,EAAA;AAAA,QAAA,SAAA,EAAA,SAAA,QAAA,GAAA;AAAA,UAAA,OAAA,CAAA,YAAA,CAAA,KAAA,CAAA,SAAA,CAAA,CAAA;AAAmB,SAAA;;AAAA,QAAA,OAAA,EAAA,SAAA;;;AAMVA,UAAAA,OAAAA,CAAAA,IAAAA,CAAAA,SAAAA,EAAAA,MAAAA,CAAAA,CAAAA;;AAEV,SAAA;AAEC,OAAA,EAAA;AAAA,QAAA,SAAA,EAAA,SAAA,QAAA,GAAA;AAAA,UAAA,OAAA,CAAA,YAAA,CAAA,KAAA,CAAA,WAAA,CAAA,CAAA;AAAmB,SAAA;AAAA,OAAA,CAAA,CAAA,CAAA,CAAA;;AAM5B,IAAA,IAAA,UAAA,GAAA,SAAA,UAAA,GAAA;;;AACuC,OAAA,EAAA,CAAA,gBAAA,CAAA,KAAA,CAAA,MAAA,CAAA,EAAA,gBAAA,CAAA,KAAA,CAAA,MAAA,CAAA,CAAA,CAAA,CAAA;;;AAOrCC,MAAAA,CAAAA,EAAAA,CAAAA;AACAC,MAAAA,YAAAA,EAAAA,YAAAA;AACAC,MAAAA,kBAAAA,EAAAA,kBAAAA;AACAC,MAAAA,iBAAAA,EAAAA,iBAAAA;AACAC,MAAAA,WAAAA,EAAAA,WAAAA;AACAC,MAAAA,UAAAA,EAAAA,UAAAA;AACAC,MAAAA,0BAAAA,EAAAA,0BAAAA;;;;AAIK,IAAA,IAAA,kBAAA;;AACD,IAAA,IAAA,MAAA,GAAA,IAAA,CAAA,MAAA;;;AAGA,IAAA,IAAA,iBAAA,GAAA,IAAA,CAAA,CAAA,CAAA,IAAA,CAAA,YAAA,CAAA,UAAA,CAAA,IAAAhB,WAAA,CAAuDiB,uBAA0B,EAAA,IAAA,EAAA,IAAA,CAAA,CAAA;AACjF,IAAA,IAAA,WAAA,GAAA,CAAA,kBAAA,GAAA,IAAA,CAAA,YAAA,MAAA,IAAA,IAAA,kBAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,kBAAA,CAAA,MAAA,CAAA,MAAA,CAAA,CAAA;AACN,IAAA,IAAA,YAAA,GAAA,OAAA,CAAA,WAAA,CAAA,KAAA,QAAA,IAAA,CAAAC,SAAA,CAAA,WAAA,CAAA,CAAA;;AAEA,IAAA,OAAAlB,WAAA,CAAA,KAAA,EAAAC,UAAA,CAAA;AAAA,MAAA,QAAA,EAAA,IAAA,CAAA,MAAA,KAAA,IAAA,CAAA,mBAAA,GAAA,YAAA;;;;AAII,MAAA,gBAAA,EAAA,IAAA;AAAA,MAAA,SAAA,EAAA,OAAA;AACQ,MAAA,WAAA,EAAA,cAAA;AACE,MAAA,WAAA,EAAA,IAAA;AAAA,MAAA,kBAAA,EAAA,IAAA,CAAA,kBAAA,CAAA,KAAA;;AAGyB,QAAA,OAAA,KAAA,CAAA,0BAAA,CAAA,GAAA,CAAA,CAAA;;;AAMnC,MAAA,SAAA,EAAA,IAAA,CAAA,UAAA;AAEI,KAAA,EAAA,UAAA,CAAA,EAAA;AAAA,MAAA,SAAA,EAAA,SAAA,QAAA,GAAA;AAAA,QAAA,OAAA,CAAAD,WAAA,CAAA,KAAA,EAAA;;AAEK,SAAA,EAAA,CAAA,KAAA,CAAA,WAAA,CAAA,YAAA,EAAA;AAELmB,UAAAA,WAAAA,EAAAA,iBAAAA;AACAC,UAAAA,MAAAA,EAAAA;AAAUC,YAAAA,GAAAA,EAAAA,MAAAA;;AAAqC,WAAA;AACjD,SAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAC,OAAA;AAAA,KAAA,CAAA,CAAA;AAIT,GAAA;AACF,CAAA,CAAA;;;;"}