From 8f57571d6b9f2d71c765dc080510105986306a24 Mon Sep 17 00:00:00 2001 From: JeremyWuuuuu <15975785+JeremyWuuuuu@users.noreply.github.com> Date: Mon, 18 Apr 2022 00:49:35 +0800 Subject: [PATCH] feat(components): [virtual-table] renderers (#7204) - Update sorting for table-v2. - Update SortIndicator component's style. --- .../table-v2/src/renderers/header-cell.tsx | 26 ++++++++++++------- .../components/table-v2/src/sort-icon.tsx | 11 ++++---- packages/components/table-v2/src/use-table.ts | 4 ++- packages/theme-chalk/src/table-v2.scss | 22 +++++++++++++++- 4 files changed, 46 insertions(+), 17 deletions(-) diff --git a/packages/components/table-v2/src/renderers/header-cell.tsx b/packages/components/table-v2/src/renderers/header-cell.tsx index 40e0a3b631..f9eeae92d7 100644 --- a/packages/components/table-v2/src/renderers/header-cell.tsx +++ b/packages/components/table-v2/src/renderers/header-cell.tsx @@ -67,15 +67,6 @@ const HeaderCellRenderer: FunctionalComponent = ( */ const { sortBy, sortState, headerCellProps } = props - const cellKls = [ - ns.e('header-cell'), - ...tryCall(headerClass, props, ''), - column.align === Alignment.CENTER && ns.is('align-center'), - column.align === Alignment.RIGHT && ns.is('align-right'), - sortable && ns.is('sortable'), - column.key === resizingKey && ns.is('resizing'), - ] - let sorting: boolean, sortOrder: SortOrder if (sortState) { const order = sortState[column.key] @@ -86,6 +77,15 @@ const HeaderCellRenderer: FunctionalComponent = ( sortOrder = sorting ? sortBy.order : SortOrder.ASC } + const cellKls = [ + ns.e('header-cell'), + ...tryCall(headerClass, props, ''), + column.align === Alignment.CENTER && ns.is('align-center'), + column.align === Alignment.RIGHT && ns.is('align-right'), + sortable && ns.is('sortable'), + column.key === resizingKey && ns.is('resizing'), + ] + const cellProps = { ...tryCall(headerCellProps, props), onClick: column.sortable ? onColumnSorted : undefined, @@ -97,7 +97,13 @@ const HeaderCellRenderer: FunctionalComponent = ( return (
{Cell} - {sortable && } + + {sortable && ( + + )} {resizable && ( { +const SortIcon: FunctionalComponent = (props) => { const { sortOrder } = props return ( - {sortOrder === SortOrder.ASC ? SortUp : SortDown} + {sortOrder === SortOrder.ASC ? : } ) -}) +} export default SortIcon diff --git a/packages/components/table-v2/src/use-table.ts b/packages/components/table-v2/src/use-table.ts index d5ca0c29e2..12427af2cf 100644 --- a/packages/components/table-v2/src/use-table.ts +++ b/packages/components/table-v2/src/use-table.ts @@ -299,7 +299,9 @@ function useTable(props: TableV2Props) { props.onColumnResizeEnded?.(getColumn(_resizingKey)!, _resizingWidth) } - function onColumnSorted(key: KeyType) { + function onColumnSorted(e: MouseEvent) { + const { key } = (e.currentTarget as HTMLElement).dataset + if (!key) return const { sortState, sortBy } = props let order = SortOrder.ASC diff --git a/packages/theme-chalk/src/table-v2.scss b/packages/theme-chalk/src/table-v2.scss index 916a9a0898..7ce3c25790 100644 --- a/packages/theme-chalk/src/table-v2.scss +++ b/packages/theme-chalk/src/table-v2.scss @@ -79,12 +79,32 @@ @include e('header-cell') { @include center-flex; @include cell-padding; + @include cell-alignment; height: 100%; user-select: none; background-color: getCssVar('table-header', 'bg-color'); color: getCssVar('table-header', 'text-color'); - @include cell-alignment; + @include when(sortable) { + cursor: pointer; + } + + &:hover { + #{$namespace}-icon { + display: block; + } + } + } + + @include e('sort-icon') { + transition: opacity, display getCssVar('transition-duration', ''); + opacity: 0.6; + display: none; + + @include when(sorting) { + display: block; + opacity: 1; + } } }