Skip to content

Commit e77bb30

Browse files
author
Christopher Suh
authored
Add a sort button to column header (#18561)
* add new sort button * remove extraneous call * wip * store prev sort button * remove reset to unfiltered state after sorting a column * Revert "remove reset to unfiltered state after sorting a column" This reverts commit 1d3b70d. * add third state for sort button, resetting data to original order * fix sort/filter scenarios * fix build * pr comments & cleanup * cleanup * update comment
1 parent d48830d commit e77bb30

18 files changed

+272
-61
lines changed

src/reactviews/media/sort-asc.gif

-830 Bytes
Binary file not shown.

src/reactviews/media/sort-asc.png

-105 Bytes
Binary file not shown.

src/reactviews/media/sort-desc.gif

-833 Bytes
Binary file not shown.

src/reactviews/media/sort-desc.png

-107 Bytes
Binary file not shown.

src/reactviews/media/sort.svg

Lines changed: 3 additions & 0 deletions
Loading

src/reactviews/media/sort_asc.svg

Lines changed: 2 additions & 7 deletions
Loading
Lines changed: 2 additions & 7 deletions
Loading

src/reactviews/media/sort_desc.svg

Lines changed: 2 additions & 7 deletions
Loading
Lines changed: 2 additions & 7 deletions
Loading

src/reactviews/media/sort_inverse.svg

Lines changed: 3 additions & 0 deletions
Loading

src/reactviews/media/table.css

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,33 @@
6161
flex: 0 0 auto;
6262
}
6363

64+
.slick-header-sort-button,
65+
.slick-header-sortdesc-button,
66+
.slick-header-sortasc-button {
67+
background-position: center center;
68+
background-repeat: no-repeat;
69+
cursor: pointer;
70+
display: inline-block;
71+
width: 16px;
72+
flex: 0 0 auto;
73+
margin-right: 2px;
74+
background-color: transparent;
75+
border: 0;
76+
padding: 0;
77+
}
78+
79+
.slick-header-sort-button {
80+
background-image: url("sort_inverse.svg");
81+
}
82+
83+
.slick-header-sortdesc-button {
84+
background-image: url("sort_desc_inverse.svg");
85+
}
86+
87+
.slick-header-sortasc-button {
88+
background-image: url("sort_asc_inverse.svg");
89+
}
90+
6491
.slick-header-menubutton {
6592
background-position: center center;
6693
background-repeat: no-repeat;

src/reactviews/pages/QueryResult/table/asyncDataView.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -286,6 +286,10 @@ export class AsyncDataProvider<T extends Slick.SlickData>
286286
throw new Error("Method not implemented.");
287287
}
288288

289+
resetSort(): void {
290+
throw new Error("Method not implemented.");
291+
}
292+
289293
public getLength(): number {
290294
return this.dataRows.getLength();
291295
}

src/reactviews/pages/QueryResult/table/dataProvider.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,11 @@ export interface IDisposableDataProvider<T extends Slick.SlickData>
3333
*/
3434
sort(args: Slick.OnSortEventArgs<T>): Promise<void>;
3535

36+
/**
37+
* Resets the sort
38+
*/
39+
resetSort(): void;
40+
3641
/**
3742
* Event fired when the filters changed
3843
*/

src/reactviews/pages/QueryResult/table/hybridDataProvider.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,10 @@ export class HybridDataProvider<T extends Slick.SlickData>
116116
void this.provider.sort(options);
117117
}
118118

119+
public async resetSort() {
120+
void this.provider.resetSort();
121+
}
122+
119123
private get thresholdReached(): boolean {
120124
return (
121125
this._options.inMemoryDataCountThreshold !== undefined &&

src/reactviews/pages/QueryResult/table/interfaces.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
*--------------------------------------------------------------------------------------------*/
55

66
import { IDisposableDataProvider } from "./dataProvider";
7+
import { SortDirection } from "./plugins/headerFilter.plugin";
78

89
export interface ITableMouseEvent {
910
anchor: HTMLElement | { x: number; y: number };
@@ -80,6 +81,11 @@ export interface FilterableColumn<T extends Slick.SlickData>
8081
sorted?: SortProperties;
8182
}
8283

84+
export interface ColumnSortState<T extends Slick.SlickData> {
85+
column: Slick.Column<T>;
86+
sortDirection: SortDirection;
87+
}
88+
8389
export interface ITableKeyboardEvent {
8490
cell?: { row: number; cell: number };
8591
event: KeyboardEvent;

0 commit comments

Comments
 (0)