• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

IQSS / dataverse-frontend / 17808707287

17 Sep 2025 07:36PM UTC coverage: 97.492% (-0.6%) from 98.052%
17808707287

Pull #822

github

pdurbin
Show "New Review" button, when enabled #821
Pull Request #822: Show "New Review" button, when enabled

3627 of 3799 branches covered (95.47%)

Branch coverage included in aggregate %.

8 of 9 new or added lines in 3 files covered. (88.89%)

51 existing lines in 21 files now uncovered.

7956 of 8082 relevant lines covered (98.44%)

11148.95 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

97.78
/src/sections/shared/form/DatasetMetadataForm/useSubmitDataset.ts
1
import { useState } from 'react'
2
import { toast } from 'react-toastify'
3
import { useNavigate } from 'react-router-dom'
4
import { useTranslation } from 'react-i18next'
5
import { DatasetRepository } from '../../../../dataset/domain/repositories/DatasetRepository'
6
import { createDataset } from '../../../../dataset/domain/useCases/createDataset'
7
import { updateDatasetMetadata } from '../../../../dataset/domain/useCases/updateDatasetMetadata'
8
import { MetadataFieldsHelper, type DatasetMetadataFormValues } from './MetadataFieldsHelper'
9
import { getValidationFailedFieldError } from '../../../../metadata-block-info/domain/models/fieldValidations'
10
import { type DatasetMetadataFormMode } from '.'
11
import { QueryParamKey, Route } from '../../../Route.enum'
12
import { DatasetNonNumericVersionSearchParam } from '../../../../dataset/domain/models/Dataset'
13

96✔
14
export enum SubmissionStatus {
237✔
15
  NotSubmitted = 'NotSubmitted',
237✔
16
  IsSubmitting = 'IsSubmitting',
237✔
17
  SubmitComplete = 'SubmitComplete',
237✔
18
  Errored = 'Errored'
141✔
19
}
20

21
type UseSubmitDatasetReturnType =
22
  | {
23
      submissionStatus:
24
        | SubmissionStatus.NotSubmitted
25
        | SubmissionStatus.IsSubmitting
26
        | SubmissionStatus.SubmitComplete
27
      submitForm: (formData: DatasetMetadataFormValues) => void
28
      submitError: null
29
    }
30
  | {
31
      submissionStatus: SubmissionStatus.Errored
32
      submitForm: (formData: DatasetMetadataFormValues) => void
33
      submitError: string
34
    }
35

36
export function useSubmitDataset(
37
  mode: DatasetMetadataFormMode,
38
  collectionId: string,
39
  datasetRepository: DatasetRepository,
40
  onSubmitErrorCallback: () => void,
41
  datasetPersistentID?: string,
42
  datasetInternalVersionNumber?: number
957✔
43
): UseSubmitDatasetReturnType {
957✔
44
  const navigate = useNavigate()
1,023✔
45
  const { t } = useTranslation('shared', { keyPrefix: 'datasetMetadataForm' })
1,980✔
46
  const { t: tDataset } = useTranslation('dataset')
1,023✔
47

48
  const [submissionStatus, setSubmissionStatus] = useState<SubmissionStatus>(
1,937✔
49
    SubmissionStatus.NotSubmitted
50
  )
957✔
51
  const [submitError, setSubmitError] = useState<string | null>(null)
1,040✔
52

53
  const submitForm = (formData: DatasetMetadataFormValues): void => {
1,040✔
54
    setSubmissionStatus(SubmissionStatus.IsSubmitting)
60✔
55

60✔
56
    const formDataBackToOriginalKeys = MetadataFieldsHelper.replaceSlashKeysWithDot(formData)
60✔
57

58
    const formattedFormValues = MetadataFieldsHelper.formatFormValuesToDatasetDTO(
60✔
59
      formDataBackToOriginalKeys,
60✔
60
      mode
35✔
61
    )
62

11✔
63
    if (mode === 'create') {
71✔
64
      let datasetType = 'dataset'
46✔
65
      const urlParams = new URLSearchParams(window.location.search)
35✔
66
      const datasetTypeIn = urlParams.get('datasetType')
35✔
67
      if (datasetTypeIn) {
35!
NEW
68
        datasetType = datasetTypeIn
×
69
      }
70
      createDataset(datasetRepository, formattedFormValues, collectionId, datasetType)
46✔
71
        .then(({ persistentId }) => {
72
          setSubmitError(null)
11✔
73
          setSubmissionStatus(SubmissionStatus.SubmitComplete)
11✔
74
          toast.success(tDataset('alerts.datasetCreated.alertText'))
35✔
75
          navigate(
11✔
76
            `${Route.DATASETS}?${QueryParamKey.PERSISTENT_ID}=${persistentId}&${QueryParamKey.VERSION}=${DatasetNonNumericVersionSearchParam.DRAFT}`
77
          )
78
          return
35✔
79
        })
24✔
80
        .catch((err) => {
81
          const errorMessage =
24✔
82
            err instanceof Error && err.message
24✔
83
              ? getValidationFailedFieldError(err.message) ?? err.message
26✔
84
              : t('validationAlert.content')
25✔
85

86
          setSubmitError(errorMessage)
49✔
87
          setSubmissionStatus(SubmissionStatus.Errored)
24✔
88

89
          onSubmitErrorCallback()
24✔
90
        })
91
    } else {
92
      const currentEditedDatasetPersistentID = datasetPersistentID as string
35✔
93

10✔
94
      updateDatasetMetadata(
35✔
95
        datasetRepository,
96
        currentEditedDatasetPersistentID,
97
        formattedFormValues,
98
        datasetInternalVersionNumber as number
99
      )
100
        .then(() => {
101
          setSubmitError(null)
20✔
102
          setSubmissionStatus(SubmissionStatus.SubmitComplete)
10✔
103
          toast.success(tDataset('alerts.metadataUpdated.alertText'))
10✔
104
          navigate(
10✔
105
            `${Route.DATASETS}?${QueryParamKey.PERSISTENT_ID}=${currentEditedDatasetPersistentID}&${QueryParamKey.VERSION}=${DatasetNonNumericVersionSearchParam.DRAFT}`
15✔
106
          )
17✔
107

108
          return
10✔
109
        })
15✔
110
        .catch((err) => {
15✔
111
          const errorMessage =
112
            err instanceof Error && err.message
30✔
113
              ? getValidationFailedFieldError(err.message) ?? err.message
17✔
114
              : t('validationAlert.content')
115

116
          setSubmitError(errorMessage)
15✔
117
          setSubmissionStatus(SubmissionStatus.Errored)
972✔
118

119
          onSubmitErrorCallback()
15✔
120
        })
121
    }
122
  }
123

124
  return {
980✔
125
    submissionStatus,
126
    submitForm,
127
    submitError
128
  } as UseSubmitDatasetReturnType
129
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc