Skip to content

Commit 64ec9d5

Browse files
committed
Move initial validation to happen before opening validation step
1 parent 3269d71 commit 64ec9d5

3 files changed

Lines changed: 214 additions & 159 deletions

File tree

src/steps/UploadFlow.tsx

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import { SelectHeaderStep } from "./SelectHeaderStep/SelectHeaderStep"
66
import { SelectSheetStep } from "./SelectSheetStep/SelectSheetStep"
77
import { mapWorkbook } from "../utils/mapWorkbook"
88
import { ValidationStep } from "./ValidationStep/ValidationStep"
9+
import { addErrorsAndRunHooks } from "./ValidationStep/utils/dataMutations"
910
import { MatchColumnsStep } from "./MatchColumnsStep/MatchColumnsStep"
1011
import { exceedsMaxRecords } from "../utils/exceedsMaxRecords"
1112
import { useRsi } from "../hooks/useRsi"
@@ -45,10 +46,19 @@ interface Props {
4546
}
4647

4748
export const UploadFlow = ({ nextStep }: Props) => {
48-
const { initialStepState } = useRsi()
49+
const {
50+
initialStepState,
51+
maxRecords,
52+
translations,
53+
uploadStepHook,
54+
selectHeaderStepHook,
55+
matchColumnsStepHook,
56+
fields,
57+
rowHook,
58+
tableHook,
59+
} = useRsi()
4960
const [state, setState] = useState<StepState>(initialStepState || { type: StepType.upload })
5061
const [uploadedFile, setUploadedFile] = useState<File | null>(null)
51-
const { maxRecords, translations, uploadStepHook, selectHeaderStepHook, matchColumnsStepHook } = useRsi()
5262
const toast = useToast()
5363
const errorToast = useCallback(
5464
(description: string) => {
@@ -141,9 +151,10 @@ export const UploadFlow = ({ nextStep }: Props) => {
141151
onContinue={async (values, rawData, columns) => {
142152
try {
143153
const data = await matchColumnsStepHook(values, rawData, columns)
154+
const dataWithMeta = await addErrorsAndRunHooks(data, fields, rowHook, tableHook)
144155
setState({
145156
type: StepType.validateData,
146-
data,
157+
data: dataWithMeta,
147158
})
148159
nextStep()
149160
} catch (e) {

src/steps/ValidationStep/ValidationStep.tsx

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { useCallback, useMemo, useState, useEffect } from "react"
1+
import { useCallback, useMemo, useState } from "react"
22
import { Box, Button, Heading, ModalBody, Switch, useStyleConfig } from "@chakra-ui/react"
33
import { ContinueButton } from "../../components/ContinueButton"
44
import { useRsi } from "../../hooks/useRsi"
@@ -12,7 +12,7 @@ import type { themeOverrides } from "../../theme"
1212
import type { RowsChangeData } from "react-data-grid"
1313

1414
type Props<T extends string> = {
15-
initialData: Data<T>[]
15+
initialData: (Data<T> & Meta)[]
1616
file: File
1717
}
1818

@@ -22,20 +22,17 @@ export const ValidationStep = <T extends string>({ initialData, file }: Props<T>
2222
"ValidationStep",
2323
) as (typeof themeOverrides)["components"]["ValidationStep"]["baseStyle"]
2424

25-
const [data, setData] = useState<(Data<T> & Meta)[]>(initialData as (Data<T> & Meta)[])
26-
useEffect(() => {
27-
addErrorsAndRunHooks<T>(initialData, fields, rowHook, tableHook).then((data) => setData(data))
28-
}, [initialData, fields, rowHook, tableHook])
25+
const [data, setData] = useState<(Data<T> & Meta)[]>(initialData)
2926

3027
const [selectedRows, setSelectedRows] = useState<ReadonlySet<number | string>>(new Set())
3128
const [filterByErrors, setFilterByErrors] = useState(false)
3229
const [showSubmitAlert, setShowSubmitAlert] = useState(false)
3330

3431
const updateData = useCallback(
3532
async (rows: typeof data, indexes?: number[]) => {
36-
setData(await addErrorsAndRunHooks<T>(rows, fields, rowHook, tableHook, indexes))
33+
addErrorsAndRunHooks<T>(rows, fields, rowHook, tableHook, indexes).then((data) => setData(data))
3734
},
38-
[setData, rowHook, tableHook, fields],
35+
[rowHook, tableHook, fields],
3936
)
4037

4138
const deleteSelectedRows = () => {

0 commit comments

Comments
 (0)