From 10cb279dfc956aede3b65ca1f98b0cffda961271 Mon Sep 17 00:00:00 2001 From: tangjinzhou <415800467@qq.com> Date: Tue, 7 Sep 2021 22:28:34 +0800 Subject: [PATCH] refactor: table --- components/components.ts | 8 ++ components/table/Table.tsx | 12 ++- components/table/demo/ajax.vue | 38 ++++++---- components/table/demo/bordered.vue | 8 +- components/table/demo/colspan-rowspan.vue | 24 +++--- components/table/demo/custom-filter-panel.vue | 46 ++++-------- components/table/hooks/useColumns.tsx | 45 +++++++++++ .../table/hooks/useFilter/FilterDropdown.tsx | 74 +++++++++++++------ components/table/hooks/useFilter/index.tsx | 24 +++--- components/table/hooks/useTitleColumns.tsx | 22 +----- components/table/index.tsx | 3 +- components/table/interface.tsx | 2 +- components/vc-table/Cell/index.tsx | 19 +++-- components/vc-table/interface.ts | 9 +++ site/debugger/index.tsx | 2 +- 15 files changed, 213 insertions(+), 123 deletions(-) create mode 100644 components/table/hooks/useColumns.tsx diff --git a/components/components.ts b/components/components.ts index 93986f35e..8ed64834e 100644 --- a/components/components.ts +++ b/components/components.ts @@ -164,6 +164,14 @@ export { default as Steps, Step } from './steps'; export type { SwitchProps } from './switch'; export { default as Switch } from './switch'; +export type { + TableProps, + TablePaginationConfig, + ColumnGroupType as TableColumnGroupType, + ColumnType as TableColumnType, + ColumnProps as TableColumnProps, + ColumnsType as TableColumnsType, +} from './table'; export { default as Table, TableColumn, TableColumnGroup } from './table'; export type { TransferProps } from './transfer'; diff --git a/components/table/Table.tsx b/components/table/Table.tsx index ed2f21517..c3eade7ed 100644 --- a/components/table/Table.tsx +++ b/components/table/Table.tsx @@ -51,6 +51,7 @@ import classNames from '../_util/classNames'; import omit from '../_util/omit'; import { initDefaultProps } from '../_util/props-util'; import { ContextSlots, useProvideSlots } from './context'; +import useColumns from './hooks/useColumns'; export type { ColumnsType, TablePaginationConfig }; @@ -107,7 +108,7 @@ export interface TableProps sortDirections?: SortOrder[]; showSorterTooltip?: boolean | TooltipProps; } -const tableProps = () => { +export const tableProps = () => { return { prefixCls: { type: String as PropType, default: undefined }, columns: { type: Array as PropType, default: undefined }, @@ -394,10 +395,13 @@ const InteralTable = defineComponent< }); const mergedData = computed(() => getFilterData(sortedData.value, filterStates.value)); // ============================ Column ============================ + + const [transformBasicColumns] = useColumns(toRef(props, 'contextSlots')); + const columnTitleProps = computed(() => ({ ...sorterTitleProps.value, })); - const [transformTitleColumns] = useTitleColumns(columnTitleProps, toRef(props, 'contextSlots')); + const [transformTitleColumns] = useTitleColumns(columnTitleProps); // ========================== Pagination ========================== const onPaginationChange = (current: number, pageSize: number) => { @@ -505,7 +509,9 @@ const InteralTable = defineComponent< const transformColumns = (innerColumns: ColumnsType): ColumnsType => { const res = transformTitleColumns( - transformSelectionColumns(transformFilterColumns(transformSorterColumns(innerColumns))), + transformSelectionColumns( + transformFilterColumns(transformSorterColumns(transformBasicColumns(innerColumns))), + ), ); return res; }; diff --git a/components/table/demo/ajax.vue b/components/table/demo/ajax.vue index fa8df71dc..ce1114283 100644 --- a/components/table/demo/ajax.vue +++ b/components/table/demo/ajax.vue @@ -28,11 +28,14 @@ This example shows how to fetch and present data from a remote server, and how t :loading="loading" @change="handleTableChange" > - +