@@ -16,14 +16,15 @@ import { useDatasetVersionSummaryDescription } from './useDatasetVersionSummaryD
1616import { DatasetViewDetailButton } from './DatasetViewDetailButton'
1717import { DatasetVersionState } from '@/dataset/domain/models/Dataset'
1818import styles from './DatasetVersions.module.scss'
19+ import { DatasetVersionPaginationInfo } from '@/dataset/domain/models/DatasetVersionPaginationInfo'
20+ import { PaginationControls } from '@/sections/shared/pagination/PaginationControls'
1921
2022interface DatasetVersionsProps {
2123 datasetRepository : DatasetRepository
2224 datasetId : string
2325 currentVersionNumber : string
2426 canUpdateDataset : boolean
2527 isInView : boolean
26- isCurrentVersionDeaccessioned ?: boolean
2728}
2829
2930const isVersionDeaccessioned = ( version : DatasetVersionSummaryInfo ) =>
@@ -36,11 +37,13 @@ export function DatasetVersions({
3637 datasetId,
3738 currentVersionNumber,
3839 canUpdateDataset,
39- isInView,
40- isCurrentVersionDeaccessioned
40+ isInView
4141} : DatasetVersionsProps ) {
4242 const { t } = useTranslation ( 'dataset' )
4343 const [ selectedVersions , setSelectedVersions ] = useState < DatasetVersionSummaryInfo [ ] > ( [ ] )
44+ const [ paginationInfo , setPaginationInfo ] = useState < DatasetVersionPaginationInfo > (
45+ new DatasetVersionPaginationInfo ( )
46+ )
4447 const {
4548 datasetVersionSummaries,
4649 error,
@@ -49,7 +52,7 @@ export function DatasetVersions({
4952 } = useGetDatasetVersionsSummaries ( {
5053 datasetRepository,
5154 persistentId : datasetId ,
52- autoFetch : isCurrentVersionDeaccessioned ? true : false
55+ autoFetch : false
5356 } )
5457
5558 const handleCheckboxChange = ( datasetSummary : DatasetVersionSummaryInfo ) => {
@@ -64,18 +67,39 @@ export function DatasetVersions({
6467 } )
6568 }
6669
70+ const visibleDatasetVersionSummaries = datasetVersionSummaries ?. slice ( 0 , paginationInfo . pageSize )
6771 const selectableVersions =
68- datasetVersionSummaries &&
69- datasetVersionSummaries . filter ( ( version ) => ! isVersionDeaccessioned ( version ) )
72+ visibleDatasetVersionSummaries &&
73+ visibleDatasetVersionSummaries . filter ( ( version ) => ! isVersionDeaccessioned ( version ) )
7074 const isCheckBoxValid = ( selectableVersions ?. length ?? 0 ) > 2
7175
7276 useEffect ( ( ) => {
73- if ( isInView && ! datasetVersionSummaries ) {
74- void fetchSummaries ( )
77+ if ( isInView ) {
78+ const paginationInfoToDisplay = new DatasetVersionPaginationInfo (
79+ paginationInfo . page ,
80+ paginationInfo . pageSize
81+ )
82+ const paginationInfoToFetch = new DatasetVersionPaginationInfo (
83+ paginationInfo . page ,
84+ paginationInfo . pageSize + 1 ,
85+ 0 ,
86+ 'Version' ,
87+ paginationInfoToDisplay . offset
88+ )
89+
90+ void fetchSummaries ( paginationInfoToFetch ) . then ( ( totalCount ) => {
91+ if ( typeof totalCount === 'number' ) {
92+ setPaginationInfo ( paginationInfoToDisplay . withTotal ( totalCount ) )
93+ }
94+ } )
7595 }
76- } , [ isInView , fetchSummaries , datasetVersionSummaries ] )
96+ } , [ isInView , fetchSummaries , paginationInfo . page , paginationInfo . pageSize ] )
97+
98+ useEffect ( ( ) => {
99+ setSelectedVersions ( [ ] )
100+ } , [ paginationInfo . page , paginationInfo . pageSize ] )
77101
78- if ( isLoadingDatasetVersionSummaries || ! datasetVersionSummaries ) {
102+ if ( ! datasetVersionSummaries ) {
79103 return < DatasetVersionsLoadingSkeleton />
80104 }
81105
@@ -93,7 +117,12 @@ export function DatasetVersions({
93117 />
94118 ) }
95119
96- < div className = { styles [ 'dataset-versions-table' ] } data-testid = "dataset-versions-table" >
120+ < div
121+ className = { `${ styles [ 'dataset-versions-table' ] } ${
122+ isLoadingDatasetVersionSummaries ? styles [ 'dataset-versions-table-loading' ] : ''
123+ } `}
124+ data-testid = "dataset-versions-table"
125+ aria-busy = { isLoadingDatasetVersionSummaries } >
97126 < Table >
98127 < thead >
99128 < tr >
@@ -110,7 +139,7 @@ export function DatasetVersions({
110139 </ tr >
111140 </ thead >
112141 < tbody >
113- { datasetVersionSummaries ?. map ( ( dataset , index ) => {
142+ { visibleDatasetVersionSummaries ?. map ( ( dataset , index ) => {
114143 const findLastNonDeaccessionedPreviousVersion = ( ) => {
115144 for ( let i = index + 1 ; i < datasetVersionSummaries . length ; i ++ ) {
116145 const version = datasetVersionSummaries [ i ]
@@ -186,6 +215,18 @@ export function DatasetVersions({
186215 </ tbody >
187216 </ Table >
188217 </ div >
218+ < PaginationControls
219+ initialPaginationInfo = { paginationInfo }
220+ onPaginationInfoChange = { ( newPaginationInfo ) =>
221+ setPaginationInfo (
222+ new DatasetVersionPaginationInfo (
223+ newPaginationInfo . page ,
224+ newPaginationInfo . pageSize ,
225+ newPaginationInfo . totalItems
226+ )
227+ )
228+ }
229+ />
189230 </ >
190231 )
191232}
0 commit comments