Skip to content

Commit 137da3f

Browse files
feat(AnalyticalTable): add possibility to clear sorting in column header (#399)
1 parent d0c811d commit 137da3f

File tree

2 files changed

+34
-8
lines changed

2 files changed

+34
-8
lines changed

packages/main/src/components/AnalyticalTable/ColumnHeader/ColumnHeaderModal.tsx

Lines changed: 33 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import '@ui5/webcomponents-icons/dist/icons/decline';
12
import { enrichEventWithDetails } from '@ui5/webcomponents-react-base/lib/Utils';
23
import { CustomListItem } from '@ui5/webcomponents-react/lib/CustomListItem';
34
import { FlexBox } from '@ui5/webcomponents-react/lib/FlexBox';
@@ -20,13 +21,13 @@ export interface ColumnHeaderModalProperties {
2021
showGroup?: boolean;
2122
column: ColumnType;
2223
style: CSSProperties;
23-
onSort?: (e: CustomEvent<{column: unknown; sortDirection: string}>) => void;
24-
onGroupBy?: (e: CustomEvent<{column: unknown; isGrouped: boolean}>) => void;
24+
onSort?: (e: CustomEvent<{ column: unknown; sortDirection: string }>) => void;
25+
onGroupBy?: (e: CustomEvent<{ column: unknown; isGrouped: boolean }>) => void;
2526
}
2627

2728
const staticStyle = { fontWeight: 'normal' };
2829

29-
export const ColumnHeaderModal: FC<ColumnHeaderModalProperties> = (props) => {
30+
export const ColumnHeaderModal: FC<ColumnHeaderModalProperties> = (props: ColumnHeaderModalProperties) => {
3031
const { showGroup, showSort, showFilter, column, style, openBy, onSort, onGroupBy } = props;
3132

3233
const { Filter } = column;
@@ -60,6 +61,17 @@ export const ColumnHeaderModal: FC<ColumnHeaderModalProperties> = (props) => {
6061
);
6162
}
6263
break;
64+
case 'clear':
65+
column.clearSortBy();
66+
if (typeof onSort === 'function') {
67+
onSort(
68+
enrichEventWithDetails(e, {
69+
column,
70+
sortDirection: sortType
71+
})
72+
);
73+
}
74+
break;
6375
case 'group':
6476
const willGroup = !column.isGrouped;
6577
column.toggleGroupBy(willGroup);
@@ -77,9 +89,12 @@ export const ColumnHeaderModal: FC<ColumnHeaderModalProperties> = (props) => {
7789
popoverRef.current.close();
7890
}
7991
},
80-
[column, popoverRef, onGroupBy]
92+
[column, popoverRef, onGroupBy, onSort]
8193
);
8294

95+
const isSortedAscending = column.isSorted && column.isSortedDesc === false;
96+
const isSortedDescending = column.isSorted && column.isSortedDesc === true;
97+
8398
return (
8499
<Popover
85100
openByStyle={style}
@@ -91,16 +106,26 @@ export const ColumnHeaderModal: FC<ColumnHeaderModalProperties> = (props) => {
91106
style={staticStyle as CSSProperties}
92107
>
93108
<List onItemClick={handleSort}>
94-
{showSort && (
95-
<StandardListItem type={ListItemTypes.Active} icon={'sort-ascending'} data-sort={'asc'}>
109+
{isSortedAscending && (
110+
<StandardListItem type={ListItemTypes.Active} icon="decline" data-sort="clear">
111+
Clear Sorting
112+
</StandardListItem>
113+
)}
114+
{showSort && !isSortedAscending && (
115+
<StandardListItem type={ListItemTypes.Active} icon="sort-ascending" data-sort="asc">
96116
Sort Ascending
97117
</StandardListItem>
98118
)}
99-
{showSort && (
100-
<StandardListItem type={ListItemTypes.Active} icon={'sort-descending'} data-sort={'desc'}>
119+
{showSort && !isSortedDescending && (
120+
<StandardListItem type={ListItemTypes.Active} icon="sort-descending" data-sort="desc">
101121
Sort Descending
102122
</StandardListItem>
103123
)}
124+
{isSortedDescending && (
125+
<StandardListItem type={ListItemTypes.Active} icon="decline" data-sort="clear">
126+
Clear Sorting
127+
</StandardListItem>
128+
)}
104129
{showFilter && !column.isGrouped && (
105130
<CustomListItem type={ListItemTypes.Inactive}>
106131
<FlexBox alignItems={FlexBoxAlignItems.Center} style={{ padding: '0px 1rem' }}>

packages/main/src/components/AnalyticalTable/types/ColumnType.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ export interface ColumnType extends Column {
77
id: string;
88
Filter: ComponentType<{ column: ColumnType; popoverRef?: RefObject<Ui5PopoverDomRef> }>;
99
toggleSortBy: (descending: boolean, multi?: any) => void;
10+
clearSortBy: () => void;
1011
toggleGroupBy: (set: boolean) => void;
1112
canFilter: boolean;
1213
canResize: boolean;

0 commit comments

Comments
 (0)