-
Notifications
You must be signed in to change notification settings - Fork 22
Expand file tree
/
Copy pathuseSubmitFileMetadata.ts
More file actions
73 lines (67 loc) · 2.26 KB
/
Copy pathuseSubmitFileMetadata.ts
File metadata and controls
73 lines (67 loc) · 2.26 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
import { useState } from 'react'
import { FileRepository } from '@/files/domain/repositories/FileRepository'
import { EditFileMetadataFormData } from '@/sections/edit-file-metadata/EditFilesList'
import { editFileMetadata } from '@/files/domain/useCases/editFileMetadata'
export enum SubmissionStatus {
NotSubmitted = 'NotSubmitted',
IsSubmitting = 'IsSubmitting',
SubmitComplete = 'SubmitComplete',
Errored = 'Errored'
}
type UseSubmitFileMetadataReturnType =
| {
submissionStatus:
| SubmissionStatus.NotSubmitted
| SubmissionStatus.IsSubmitting
| SubmissionStatus.SubmitComplete
submitForm: (formData: EditFileMetadataFormData) => void
submitError: null
}
| {
submissionStatus: SubmissionStatus.Errored
submitForm: (formData: EditFileMetadataFormData) => void
submitError: string
}
export const useSubmitFileMetadata = (
fileRepository: FileRepository,
onSubmitSucceed: () => void,
datasetLastUpdateTime: string
) => {
const [submissionStatus, setSubmissionStatus] = useState<SubmissionStatus>(
SubmissionStatus.NotSubmitted
)
const [submitError, setSubmitError] = useState<string | null>(null)
const submitForm = (formData: EditFileMetadataFormData): void => {
void (async () => {
setSubmissionStatus(SubmissionStatus.IsSubmitting)
try {
for (const file of formData.files) {
const fileMetadataDTO = {
id: file.id,
description: file.description,
directoryLabel: file.fileDir,
label: file.fileName
}
await editFileMetadata(fileRepository, file.id, fileMetadataDTO, datasetLastUpdateTime)
}
setSubmitError(null)
setSubmissionStatus(SubmissionStatus.SubmitComplete)
onSubmitSucceed()
} catch (err) {
const errorMessage =
err instanceof Error && err.message
? err.message
: 'Something went wrong while trying to deaccession your dataset'
setSubmitError(errorMessage)
setSubmissionStatus(SubmissionStatus.Errored)
} finally {
setSubmissionStatus(SubmissionStatus.SubmitComplete)
}
})()
}
return {
submissionStatus,
submitForm,
submitError
} as UseSubmitFileMetadataReturnType
}