Skip to content

Commit 6861531

Browse files
astrobastiion
authored and
bastiion
committed
frontend/submission: send formData on every wizard page change
Closes Github issue #50
1 parent 83e8d94 commit 6861531

File tree

2 files changed

+17
-2
lines changed

2 files changed

+17
-2
lines changed

frontend/submission/components/forms/FormWizard.tsx

+8-1
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ type FormWizardProps = Record<string, never>
1818
export const FormWizard = ({}: FormWizardProps) => {
1919
const { t } = useTranslation()
2020
const {currentStep} = useWizardQueryState()
21-
const {setSerializedPubKeys, formData, setFormData} = useArmoredDatastore()
21+
const {setSerializedPubKeys, formData, formDataDirty, setFormData, sendFormData} = useArmoredDatastore()
2222
const { replace } = useRouter()
2323
const [loading, setLoading] = useState(true)
2424

@@ -50,6 +50,13 @@ export const FormWizard = ({}: FormWizardProps) => {
5050
setSerializedPubKeys(pubKeys)
5151
}, [data, setSerializedPubKeys, token, replace, setLoading])
5252

53+
// send formData on when wizard page changes
54+
useEffect(() => {
55+
if (formDataDirty && token && userId) {
56+
sendFormData(token, userId)
57+
}
58+
}, [currentStep, sendFormData])
59+
5360
const handleFormChange = useCallback(
5461
(name: string, state: Pick<JsonFormsCore, 'data' | 'errors'>) => {
5562
setFormData(name, state.data)

frontend/submission/state/useArmoredDatastore.ts

+9-1
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ type ArmoredDatastoreState = {
3333
pubKeys: Key[]
3434

3535
formData: any
36+
formDataDirty: boolean
3637
setFormData: (name: string, formData: any) => void
3738

3839
sendFormData: (token: string, userId: string) => Promise<void>
@@ -57,12 +58,14 @@ export const useArmoredDatastore = zustand<ArmoredDatastoreState>((set, get) =>
5758
pubKeys: [],
5859

5960
formData: {},
61+
formDataDirty: false,
6062
setFormData: (name: string, data: any) => {
6163
set(({formData}) => ({
6264
formData: {
6365
...formData,
6466
[name]: data,
65-
}
67+
},
68+
formDataDirty: true,
6669
}))
6770
},
6871

@@ -99,6 +102,11 @@ export const useArmoredDatastore = zustand<ArmoredDatastoreState>((set, get) =>
99102
if (!res.ok) {
100103
throw new Error(`upload-form: HTTP ${res.status}`)
101104
}
105+
106+
if (get().formData == formData) {
107+
// only mark clean if there has been no form change during the fetch
108+
set({ formDataDirty: false })
109+
}
102110
},
103111

104112
attachments: [],

0 commit comments

Comments
 (0)