Skip to content

Commit dc958fa

Browse files
committed
feat: update file tab refresh
1 parent b742d71 commit dc958fa

File tree

5 files changed

+74
-28
lines changed

5 files changed

+74
-28
lines changed

src/sections/dataset/dataset-files/DatasetFilesScrollable.tsx

+20-16
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
1+
import cn from 'classnames'
12
import { useMemo, useRef, useState } from 'react'
23
import useInfiniteScroll, { UseInfiniteScrollHookRefCallback } from 'react-infinite-scroll-hook'
4+
import { Alert } from '@iqss/dataverse-design-system'
35
import { FileRepository } from '../../../files/domain/repositories/FileRepository'
46
import { FileCriteria } from '../../../files/domain/models/FileCriteria'
57
import { DatasetVersion } from '../../../dataset/domain/models/Dataset'
@@ -10,9 +12,8 @@ import { useGetFilesTotalDownloadSize } from './useGetFilesTotalDownloadSize'
1012
import { useObserveElementSize } from '../../../shared/hooks/useObserveElementSize'
1113
import { FilesTableScrollable } from './files-table/FilesTableScrollable'
1214
import { FileCriteriaForm } from './file-criteria-form/FileCriteriaForm'
13-
import cn from 'classnames'
15+
import { FilesContext } from '@/sections/file/FilesContext'
1416
import styles from './DatasetFilesScrollable.module.scss'
15-
import { Alert } from '@iqss/dataverse-design-system'
1617

1718
interface DatasetFilesScrollableProps {
1819
filesRepository: FileRepository
@@ -67,7 +68,8 @@ export function DatasetFilesScrollable({
6768
areFilesAvailable,
6869
totalAvailable,
6970
hasNextPage,
70-
isEmptyFiles
71+
isEmptyFiles,
72+
refreshFiles
7173
} = useGetAccumulatedFiles({
7274
filesRepository,
7375
datasetPersistentId,
@@ -140,7 +142,6 @@ export function DatasetFilesScrollable({
140142
</>
141143
)
142144
}
143-
144145
return (
145146
<section ref={rootRef}>
146147
<div
@@ -161,18 +162,21 @@ export function DatasetFilesScrollable({
161162
/>
162163
</header>
163164

164-
<FilesTableScrollable
165-
files={accumulatedFiles}
166-
paginationInfo={paginationInfo}
167-
filesTotalDownloadSize={filesTotalDownloadSize}
168-
criteria={criteria}
169-
criteriaContainerHeight={criteriaContainerSize.height}
170-
sentryRef={sentryRef}
171-
showSentryRef={showSentryRef}
172-
isEmptyFiles={isEmptyFiles}
173-
accumulatedCount={accumulatedCount}
174-
fileRepository={filesRepository}
175-
/>
165+
<FilesContext.Provider
166+
value={{ files: accumulatedFiles, isLoading, refreshFiles: refreshFiles }}>
167+
<FilesTableScrollable
168+
files={accumulatedFiles}
169+
paginationInfo={paginationInfo}
170+
filesTotalDownloadSize={filesTotalDownloadSize}
171+
criteria={criteria}
172+
criteriaContainerHeight={criteriaContainerSize.height}
173+
sentryRef={sentryRef}
174+
showSentryRef={showSentryRef}
175+
isEmptyFiles={isEmptyFiles}
176+
accumulatedCount={accumulatedCount}
177+
fileRepository={filesRepository}
178+
/>
179+
</FilesContext.Provider>
176180
</div>
177181
</section>
178182
)

src/sections/dataset/dataset-files/useGetAccumulatedFiles.tsx

+9-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { useMemo, useState } from 'react'
1+
import { useCallback, useMemo, useState } from 'react'
22
import { useTranslation } from 'react-i18next'
33
import { FilePreview } from '../../../files/domain/models/FilePreview'
44
import { FileRepository } from '../../../files/domain/repositories/FileRepository'
@@ -24,6 +24,7 @@ type UseGetAccumulatedFilesReturnType = {
2424
isEmptyFiles: boolean
2525
areFilesAvailable: boolean
2626
accumulatedCount: number
27+
refreshFiles: () => Promise<void>
2728
}
2829

2930
type UseGetAccumulatedFilesParams = {
@@ -92,6 +93,11 @@ export const useGetAccumulatedFiles = ({
9293
}
9394
}
9495

96+
const refreshFiles = useCallback(async () => {
97+
await loadMore(new FilePaginationInfo(), new FileCriteria(), true)
98+
// eslint-disable-next-line react-hooks/exhaustive-deps
99+
}, [accumulatedFiles.length, filesRepository, datasetPersistentId, datasetVersion])
100+
95101
return {
96102
isLoading,
97103
accumulatedFiles,
@@ -101,7 +107,8 @@ export const useGetAccumulatedFiles = ({
101107
loadMore,
102108
isEmptyFiles,
103109
areFilesAvailable,
104-
accumulatedCount
110+
accumulatedCount,
111+
refreshFiles
105112
}
106113
}
107114

src/sections/file/FilesContext.ts

+16
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import { createContext, useContext } from 'react'
2+
import { FilePreview } from '@/files/domain/models/FilePreview'
3+
4+
interface FilesContextProps {
5+
files: FilePreview[] | undefined
6+
isLoading: boolean
7+
refreshFiles: () => Promise<void>
8+
}
9+
10+
export const FilesContext = createContext<FilesContextProps>({
11+
files: undefined,
12+
isLoading: false,
13+
refreshFiles: async () => {}
14+
})
15+
16+
export const useFilesContext = () => useContext(FilesContext)

src/sections/file/file-action-buttons/edit-file-menu/delete-file-button/DeleteFileButton.tsx

+14-5
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { useState } from 'react'
22
import { useTranslation } from 'react-i18next'
3-
import { useNavigate } from 'react-router-dom'
3+
import { useNavigate, useSearchParams } from 'react-router-dom'
44
import { toast } from 'react-toastify'
55
import { DropdownButtonItem } from '@iqss/dataverse-design-system'
66
import { FileRepository } from '@/files/domain/repositories/FileRepository'
@@ -9,6 +9,7 @@ import { DatasetNonNumericVersionSearchParam } from '@/dataset/domain/models/Dat
99
import { ConfirmDeleteFileModal } from './confirm-delete-file-modal/ConfirmDeleteFileModal'
1010
import { EditFileMenuDatasetInfo } from '../EditFileMenu'
1111
import { useDeleteFile } from './useDeleteFile'
12+
import { useFilesContext } from '@/sections/file/FilesContext'
1213

1314
interface DeleteFileButtonProps {
1415
fileId: number
@@ -32,16 +33,24 @@ export const DeleteFileButton = ({
3233

3334
const handleOpenModal = () => setShowConfirmationModal(true)
3435
const handleCloseModal = () => setShowConfirmationModal(false)
36+
const { refreshFiles } = useFilesContext()
37+
const [searchParamsURL] = useSearchParams()
38+
const urlParams = new URLSearchParams(searchParamsURL)
39+
const version = urlParams.get(QueryParamKey.VERSION)
3540

3641
function closeModalAndNavigateToDataset() {
3742
setShowConfirmationModal(false)
3843

39-
const searchParams = new URLSearchParams()
40-
searchParams.set(QueryParamKey.PERSISTENT_ID, datasetInfo.persistentId)
41-
searchParams.set(QueryParamKey.VERSION, DatasetNonNumericVersionSearchParam.DRAFT)
44+
if (version === 'DRAFT' || version === ':draft') {
45+
void refreshFiles()
46+
} else {
47+
const searchParams = new URLSearchParams()
48+
searchParams.set(QueryParamKey.PERSISTENT_ID, datasetInfo.persistentId)
49+
searchParams.set(QueryParamKey.VERSION, DatasetNonNumericVersionSearchParam.DRAFT)
50+
navigate(`${Route.DATASETS}?${searchParams.toString()}`)
51+
}
4252

4353
toast.success(t('fileDeletedSuccess'))
44-
navigate(`${Route.DATASETS}?${searchParams.toString()}`)
4554
}
4655

4756
return (

src/sections/file/file-action-buttons/edit-file-menu/restrict-file-button/RestrictFileButton.tsx

+15-5
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { useState } from 'react'
22
import { useTranslation } from 'react-i18next'
3-
import { useNavigate } from 'react-router-dom'
3+
import { useNavigate, useSearchParams } from 'react-router-dom'
44
import { toast } from 'react-toastify'
55
import { DropdownButtonItem } from '@iqss/dataverse-design-system'
66
import { FileRepository } from '@/files/domain/repositories/FileRepository'
@@ -9,6 +9,7 @@ import { DatasetNonNumericVersionSearchParam } from '@/dataset/domain/models/Dat
99
import { ConfirmRestrictFileModal } from './confirm-restrict-file-modal/ConfirmRestrictFileModal'
1010
import { EditFileMenuDatasetInfo } from '../EditFileMenu'
1111
import { useRestrictFile } from './useRestrictFile'
12+
import { useFilesContext } from '@/sections/file/FilesContext'
1213

1314
interface RestrictFileButtonProps {
1415
fileId: number
@@ -34,16 +35,25 @@ export const RestrictFileButton = ({
3435
})
3536
const handleOpenModal = () => setShowConfirmationModal(true)
3637
const handleCloseModal = () => setShowConfirmationModal(false)
38+
const { refreshFiles } = useFilesContext()
39+
const [searchParamsURL] = useSearchParams()
40+
const urlParams = new URLSearchParams(searchParamsURL)
41+
const version = urlParams.get(QueryParamKey.VERSION)
3742

3843
function closeModalAndNavigateToDataset() {
3944
setShowConfirmationModal(false)
40-
const searchParams = new URLSearchParams()
41-
searchParams.set(QueryParamKey.PERSISTENT_ID, datasetInfo.persistentId)
42-
searchParams.set(QueryParamKey.VERSION, DatasetNonNumericVersionSearchParam.DRAFT)
45+
46+
if (version === 'DRAFT' || version === ':draft') {
47+
void refreshFiles()
48+
} else {
49+
const searchParams = new URLSearchParams()
50+
searchParams.set(QueryParamKey.PERSISTENT_ID, datasetInfo.persistentId)
51+
searchParams.set(QueryParamKey.VERSION, DatasetNonNumericVersionSearchParam.DRAFT)
52+
navigate(`${Route.DATASETS}?${searchParams.toString()}`)
53+
}
4354
isRestricted
4455
? toast.success(t('restriction.fileUnrestrictedSuccess'))
4556
: toast.success(t('restriction.fileRestrictdSuccess'))
46-
navigate(`${Route.DATASETS}?${searchParams.toString()}`)
4757
}
4858
return (
4959
<>

0 commit comments

Comments
 (0)