Skip to content

Commit b290778

Browse files
committed
added pagination to Versions tab on Dataset and File page
1 parent 01114df commit b290778

13 files changed

Lines changed: 362 additions & 89 deletions

File tree

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,17 @@
11
import { PaginationInfo } from '../../../shared/pagination/domain/models/PaginationInfo'
22

33
export class DatasetVersionPaginationInfo extends PaginationInfo<DatasetVersionPaginationInfo> {
4-
constructor(page = 1, pageSize = 10, totalItems = 0, itemName = 'Version') {
4+
constructor(
5+
page = 1,
6+
pageSize = 10,
7+
totalItems = 0,
8+
itemName = 'Version',
9+
private readonly offsetOverride?: number
10+
) {
511
super(page, pageSize, totalItems, itemName)
612
}
13+
14+
get offset(): number {
15+
return this.offsetOverride ?? super.offset
16+
}
717
}

src/sections/dataset/Dataset.tsx

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -172,9 +172,8 @@ export function Dataset({
172172
datasetId={dataset.persistentId}
173173
currentVersionNumber={currentVersionNumber}
174174
canUpdateDataset={canUpdateDataset}
175-
isInView={activeTab === 'versions'}
175+
isInView
176176
key={dataset.internalVersionNumber}
177-
isCurrentVersionDeaccessioned={isCurrentVersionDeaccessioned}
178177
/>
179178
</div>
180179
</Tabs.Tab>

src/sections/dataset/dataset-versions/DatasetVersions.module.scss

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,13 @@
3434
}
3535
}
3636

37+
.dataset-versions-table-loading {
38+
tbody {
39+
opacity: 0.55;
40+
transition: opacity 120ms ease-in-out;
41+
}
42+
}
43+
3744
.visually-hidden {
3845
position: absolute;
3946
clip: rect(1px, 1px, 1px, 1px);

src/sections/dataset/dataset-versions/DatasetVersions.tsx

Lines changed: 53 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,15 @@ import { useDatasetVersionSummaryDescription } from './useDatasetVersionSummaryD
1616
import { DatasetViewDetailButton } from './DatasetViewDetailButton'
1717
import { DatasetVersionState } from '@/dataset/domain/models/Dataset'
1818
import styles from './DatasetVersions.module.scss'
19+
import { DatasetVersionPaginationInfo } from '@/dataset/domain/models/DatasetVersionPaginationInfo'
20+
import { PaginationControls } from '@/sections/shared/pagination/PaginationControls'
1921

2022
interface DatasetVersionsProps {
2123
datasetRepository: DatasetRepository
2224
datasetId: string
2325
currentVersionNumber: string
2426
canUpdateDataset: boolean
2527
isInView: boolean
26-
isCurrentVersionDeaccessioned?: boolean
2728
}
2829

2930
const 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
}

src/sections/dataset/dataset-versions/useGetDatasetVersionsSummaries.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ interface UseGetDatasetVersionsSummaries {
88
datasetVersionSummaries: DatasetVersionSummaryInfo[] | undefined
99
error: string | null
1010
isLoading: boolean
11-
fetchSummaries: (paginationInfo?: DatasetVersionPaginationInfo) => Promise<void>
11+
fetchSummaries: (paginationInfo?: DatasetVersionPaginationInfo) => Promise<number | undefined>
1212
}
1313

1414
interface Props {
@@ -38,12 +38,14 @@ export const useGetDatasetVersionsSummaries = ({
3838
paginationInfo
3939
)
4040
setSummaries(versionSummaries.summaries)
41+
return versionSummaries.totalCount
4142
} catch (err) {
4243
const errorMessage =
4344
err instanceof Error && err.message
4445
? err.message
4546
: 'Something went wrong getting the information from the dataset versions summaries. Try again later.'
4647
setError(errorMessage)
48+
return undefined
4749
} finally {
4850
setIsLoading(false)
4951
}

src/sections/file/file-version/FileVersion.module.scss

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,13 @@
1919
}
2020
}
2121

22+
.file-versions-table-loading {
23+
tbody {
24+
opacity: 0.55;
25+
transition: opacity 120ms ease-in-out;
26+
}
27+
}
28+
2229
.no-summary-text {
2330
font-style: italic;
2431
color: $dv-subtext-color;

0 commit comments

Comments
 (0)