Skip to content
Snippets Groups Projects
Commit 707ae8fb authored by Tore.Brede's avatar Tore.Brede
Browse files

Moving submit logic out of summary step component

parent 3c278321
No related branches found
No related tags found
1 merge request!109Refactor register summary step
...@@ -5,15 +5,22 @@ import { Box, Button } from '@mui/material' ...@@ -5,15 +5,22 @@ import { Box, Button } from '@mui/material'
import Page from 'components/page' import Page from 'components/page'
import { useHistory } from 'react-router-dom' import { useHistory } from 'react-router-dom'
import format from 'date-fns/format'
import { RegisterFormData } from './formData' import { RegisterFormData } from './formData'
import StepSummary from './stepSummary' import StepSummary from './stepSummary'
import StepPersonForm from './stepPersonForm' import StepPersonForm from './stepPersonForm'
import { PersonFormMethods } from './personFormMethods' import { PersonFormMethods } from './personFormMethods'
import { SummaryFormMethods } from './summaryFormMethods'
import SubmitState from './submitState' import SubmitState from './submitState'
import SponsorGuestButtons from '../components/sponsorGuestButtons' import SponsorGuestButtons from '../components/sponsorGuestButtons'
import { postJsonOpts } from '../../utils'
/**
*
* This component controls the invite process where the sponsor
* enters the initial information about a guest.
*
*/
export default function StepRegistration() { export default function StepRegistration() {
const { t } = useTranslation(['common']) const { t } = useTranslation(['common'])
const [formData, setFormData] = useState<RegisterFormData>({ const [formData, setFormData] = useState<RegisterFormData>({
...@@ -32,9 +39,9 @@ export default function StepRegistration() { ...@@ -32,9 +39,9 @@ export default function StepRegistration() {
const SUMMARY_STEP = 1 const SUMMARY_STEP = 1
const [activeStep, setActiveStep] = useState(0) const [activeStep, setActiveStep] = useState(0)
const personFormRef = useRef<PersonFormMethods>(null) const personFormRef = useRef<PersonFormMethods>(null)
const summaryStepRef = useRef<SummaryFormMethods>(null)
const [submitState, setSubmitState] = useState(SubmitState.NotSubmitted) const [submitState, setSubmitState] = useState(SubmitState.NotSubmitted)
const handleNext = () => { const handleNext = () => {
if (activeStep === 0) { if (activeStep === 0) {
if (personFormRef.current) { if (personFormRef.current) {
...@@ -46,9 +53,38 @@ export default function StepRegistration() { ...@@ -46,9 +53,38 @@ export default function StepRegistration() {
} }
const registerGuest = () => { const registerGuest = () => {
if (summaryStepRef.current) { const payload = {
summaryStepRef.current.doSubmit() first_name: formData.first_name,
last_name: formData.last_name,
email: formData.email,
role: {
type: formData.role_type,
start_date: formData.role_start === null ? null : format(formData.role_start as Date, 'yyyy-MM-dd'),
end_date: formData.role_end === null ? null : format(formData.role_end as Date, 'yyyy-MM-dd'),
comments: formData.comment,
orgunit_id: formData.ou_id,
},
} }
console.log('submitting', JSON.stringify(payload))
fetch('/api/ui/v1/invite/', postJsonOpts(payload))
.then((res) => {
if (!res.ok) {
setSubmitState(SubmitState.SubmitFailure)
return null
}
return res.text()
})
.then((result) => {
if (result !== null) {
console.log('result', result)
setSubmitState(SubmitState.SubmitSuccess)
}
})
.catch((error) => {
console.log('error', error)
setSubmitState(SubmitState.SubmitFailure)
})
} }
const handleBack = () => { const handleBack = () => {
...@@ -66,14 +102,6 @@ export default function StepRegistration() { ...@@ -66,14 +102,6 @@ export default function StepRegistration() {
history.push('/') history.push('/')
} }
const handleSubmitSuccess = () => {
setSubmitState(SubmitState.SubmitSuccess)
}
const handleSubmitFailure = () => {
setSubmitState(SubmitState.SubmitFailure)
}
return ( return (
<Page> <Page>
<SponsorGuestButtons registerNewGuestActive /> <SponsorGuestButtons registerNewGuestActive />
...@@ -89,9 +117,6 @@ export default function StepRegistration() { ...@@ -89,9 +117,6 @@ export default function StepRegistration() {
{activeStep === SUMMARY_STEP && ( {activeStep === SUMMARY_STEP && (
<StepSummary <StepSummary
formData={formData} formData={formData}
onSubmitSuccess={handleSubmitSuccess}
onSubmitFailure={handleSubmitFailure}
ref={summaryStepRef}
/> />
)} )}
</Box> </Box>
...@@ -132,6 +157,20 @@ export default function StepRegistration() { ...@@ -132,6 +157,20 @@ export default function StepRegistration() {
{t('button.cancel')} {t('button.cancel')}
</Button> </Button>
</Box> </Box>
{/* TODO For now just showing a heading to give the user some feedback. Should probably go to a different page on success */}
{submitState === SubmitState.SubmitSuccess && (
<Box>
<h2>Submit success</h2>
</Box>
)}
{submitState === SubmitState.SubmitFailure && (
<Box>
<h2>Submit failure</h2>
</Box>
)}
</Page> </Page>
) )
} }
import React, { forwardRef, Ref, useImperativeHandle, useState } from 'react' import React, { forwardRef } from 'react'
import { useTranslation } from 'react-i18next' import { useTranslation } from 'react-i18next'
import { import {
...@@ -14,69 +14,19 @@ import { ...@@ -14,69 +14,19 @@ import {
import format from 'date-fns/format' import format from 'date-fns/format'
import i18n from 'i18next' import i18n from 'i18next'
import { RegisterFormData } from './formData' import { RegisterFormData } from './formData'
import { postJsonOpts } from '../../utils'
import { PersonFormMethods } from './personFormMethods'
import useOus from '../../hooks/useOus' import useOus from '../../hooks/useOus'
import useRoleTypes from '../../hooks/useRoleTypes' import useRoleTypes from '../../hooks/useRoleTypes'
import SubmitState from './submitState'
interface StepSummaryProperties { interface StepSummaryProperties {
formData: RegisterFormData formData: RegisterFormData
onSubmitSuccess: () => void
onSubmitFailure: () => void
} }
const StepSummary = forwardRef((props: StepSummaryProperties, ref: Ref<PersonFormMethods>) => { const StepSummary = forwardRef((props: StepSummaryProperties) => {
const { t } = useTranslation(['common']) const { t } = useTranslation(['common'])
const { formData, onSubmitSuccess, onSubmitFailure } = props const { formData } = props
const ous = useOus() const ous = useOus()
const roleTypes = useRoleTypes() const roleTypes = useRoleTypes()
const [submitState, setSubmitState] = useState(SubmitState.NotSubmitted)
const submit = () => {
const payload = {
first_name: formData.first_name,
last_name: formData.last_name,
email: formData.email,
role: {
type: formData.role_type,
start_date: formData.role_start === null ? null : format(formData.role_start as Date, 'yyyy-MM-dd'),
end_date: formData.role_end === null ? null : format(formData.role_end as Date, 'yyyy-MM-dd'),
comments: formData.comment,
orgunit_id: formData.ou_id,
},
}
console.log('submitting', JSON.stringify(payload))
fetch('/api/ui/v1/invite/', postJsonOpts(payload))
.then((res) => {
if (!res.ok) {
onSubmitFailure()
setSubmitState(SubmitState.SubmitFailure)
return null
}
return res.text()
})
.then((result) => {
if (result !== null) {
console.log('result', result)
onSubmitSuccess()
setSubmitState(SubmitState.SubmitSuccess)
}
})
.catch((error) => {
console.log('error', error)
onSubmitFailure()
setSubmitState(SubmitState.SubmitFailure)
})
}
function doSubmit() {
return submit()
}
useImperativeHandle(ref, () => ({ doSubmit }))
const selectedOus = ous.find((value) => value.id === formData.ou_id) const selectedOus = ous.find((value) => value.id === formData.ou_id)
const ousName = selectedOus === undefined ? '' : (`${i18n.language === 'en' ? selectedOus.en : selectedOus.nb} (${selectedOus.id})`) const ousName = selectedOus === undefined ? '' : (`${i18n.language === 'en' ? selectedOus.en : selectedOus.nb} (${selectedOus.id})`)
...@@ -149,19 +99,6 @@ const StepSummary = forwardRef((props: StepSummaryProperties, ref: Ref<PersonFor ...@@ -149,19 +99,6 @@ const StepSummary = forwardRef((props: StepSummaryProperties, ref: Ref<PersonFor
</TableRow> </TableRow>
</TableBody> </TableBody>
</Table> </Table>
{/* TODO For now just showing a heading to give the user some feedback */}
{submitState === SubmitState.SubmitSuccess && (
<Box>
<h2>Submit success</h2>
</Box>
)}
{submitState === SubmitState.SubmitFailure && (
<Box>
<h2>Submit failure</h2>
</Box>
)}
</Box> </Box>
</> </>
) )
......
export interface SummaryFormMethods {
doSubmit: () => Promise<void>
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment