@@ -4,6 +4,7 @@ import { useLineListAnalyticsData } from './hooks/use-line-list-analytics-data'
44import type { MetadataInput } from '@components/app-wrapper/metadata-helpers'
55import { LineList } from '@components/line-list'
66import type { LineListAnalyticsData } from '@components/line-list'
7+ import type { DataSortFn , DataSortPayload } from '@components/line-list/types'
78import { transformVisualization } from '@modules/visualization'
89import type { CurrentUser , CurrentVisualization , SortDirection } from '@types'
910
@@ -14,6 +15,7 @@ type LineListPluginProps = {
1415 isInDashboard : boolean
1516 isInModal : boolean
1617 isVisualizationLoading : boolean
18+ onDataSorted ?: ( sorting : DataSortPayload | undefined ) => void
1719 onResponseReceived ?: ( metadata : MetadataInput ) => void
1820}
1921
@@ -27,6 +29,7 @@ export const LineListPlugin: FC<LineListPluginProps> = ({
2729 isInDashboard,
2830 isInModal,
2931 isVisualizationLoading,
32+ onDataSorted,
3033 onResponseReceived,
3134} ) => {
3235 console . log (
@@ -39,8 +42,7 @@ export const LineListPlugin: FC<LineListPluginProps> = ({
3942 isVisualizationLoading
4043 )
4144
42- // TODO: add setter used in onDataSort
43- const [ visualization ] = useState < CurrentVisualization > (
45+ const [ visualization , setVisualization ] = useState < CurrentVisualization > (
4446 transformVisualization ( originalVisualization )
4547 )
4648
@@ -55,31 +57,36 @@ export const LineListPlugin: FC<LineListPluginProps> = ({
5557 }
5658 )
5759
58- // TODO: get this from visualization.sorting
59- const sortField = null
60- const sortDirection = 'default'
60+ const { dimension : sortField , direction : sortDirection } = visualization
61+ . sorting ?. length
62+ ? visualization . sorting [ 0 ]
63+ : { dimension : undefined , direction : undefined }
6164
62- // TODO: remove this comment once LineList component is used here
63- // eslint-disable-next-line @typescript-eslint/no-unused-vars
64- const onPaginate = useCallback (
65- ( { page, pageSize } ) =>
66- setPagination ( { page : pageSize ? FIRST_PAGE : page , pageSize } ) ,
67- [ ]
68- )
65+ const onPaginate = useCallback ( ( { page, pageSize } ) => {
66+ if ( pageSize ) {
67+ setPagination ( { page : pageSize ? FIRST_PAGE : page , pageSize } )
68+ } else if ( page ) {
69+ setPagination ( { page } )
70+ } else {
71+ throw new Error (
72+ 'onPaginate was called with neither a page nor pageSize. At least one is expected'
73+ )
74+ }
75+ } , [ ] )
6976
70- // TODO: remove this comment once LineList component is used here
71- // eslint-disable-next-line @typescript-eslint/no-unused-vars
72- const onDataSort = useCallback (
77+ const onDataSort : DataSortFn = useCallback (
7378 ( sorting ) => {
74- console . log ( 'onDataSort TBD' , sorting )
75- //setVisualization({
76- // ...originalVisualization,
77- // sorting,
78- //})
79+ const newSorting =
80+ sorting . direction === undefined ? undefined : sorting
81+
82+ setVisualization ( {
83+ ...visualization ,
84+ sorting : newSorting ? [ newSorting ] : undefined ,
85+ } as CurrentVisualization )
86+
87+ onDataSorted ?.( newSorting )
7988 } ,
80- [
81- /*originalVisualization*/
82- ]
89+ [ visualization , onDataSorted ]
8390 )
8491
8592 const {
@@ -122,7 +129,7 @@ export const LineListPlugin: FC<LineListPluginProps> = ({
122129 )
123130 } }
124131 sortDirection = { sortDirection as SortDirection }
125- sortField = { sortField ?? undefined }
132+ sortField = { sortField }
126133 />
127134 )
128135}
0 commit comments