|
| 1 | +import { useCallback, useState } from 'react' |
| 2 | + |
| 3 | +import { Grid, StepLabel } from '@mui/material' |
| 4 | + |
| 5 | +import { Step as StepType, Steps } from './helpers/campaignApplication.types' |
| 6 | + |
| 7 | +import GenericForm from 'components/common/form/GenericForm' |
| 8 | +import CampaignApplicationStepperIcon from './CampaignApplicationStepperIcon' |
| 9 | +import CampaignApplicationOrganizer from './steps/CampaignApplicationOrganizer' |
| 10 | +import CampaignApplicationDetails from './steps/CampaignApplicationDetails' |
| 11 | +import CampaignApplication from './steps/CampaignApplication' |
| 12 | +import CampaignApplicationFormActions from './CampaignApplicationFormActions' |
| 13 | +import stepsHandler from './helpers/stepsHandler' |
| 14 | + |
| 15 | +import { |
| 16 | + ActionsContainer, |
| 17 | + StyledCampaignApplicationStep, |
| 18 | + StyledCampaignApplicationStepper, |
| 19 | + StyledStepConnector, |
| 20 | +} from './helpers/campaignApplication.styled' |
| 21 | + |
| 22 | +const initialValues: Record<string, string> = {} |
| 23 | + |
| 24 | +const steps: StepType[] = [ |
| 25 | + { |
| 26 | + title: 'campaign-application:steps.organizer.title', |
| 27 | + component: <CampaignApplicationOrganizer />, |
| 28 | + }, |
| 29 | + { |
| 30 | + title: 'campaign-application:steps.campaign-application.title', |
| 31 | + component: <CampaignApplication />, |
| 32 | + }, |
| 33 | + { |
| 34 | + title: 'campaign-application:steps.campaign-application-details.title', |
| 35 | + component: <CampaignApplicationDetails />, |
| 36 | + }, |
| 37 | +] |
| 38 | + |
| 39 | +export default function CampaignApplicationForm() { |
| 40 | + const [activeStep, setActiveStep] = useState<Steps>(Steps.ORGANIZER) |
| 41 | + |
| 42 | + const handleSubmit = () => { |
| 43 | + stepsHandler({ activeStep, setActiveStep }) |
| 44 | + } |
| 45 | + |
| 46 | + const handleBack = useCallback(() => { |
| 47 | + setActiveStep((prevActiveStep) => prevActiveStep - 1) |
| 48 | + }, []) |
| 49 | + |
| 50 | + return ( |
| 51 | + <GenericForm<Record<string, string>> onSubmit={handleSubmit} initialValues={initialValues}> |
| 52 | + <StyledCampaignApplicationStepper activeStep={activeStep} connector={<StyledStepConnector />}> |
| 53 | + {steps.map((step) => ( |
| 54 | + <StyledCampaignApplicationStep key={step.title}> |
| 55 | + <StepLabel StepIconComponent={CampaignApplicationStepperIcon} /> |
| 56 | + </StyledCampaignApplicationStep> |
| 57 | + ))} |
| 58 | + </StyledCampaignApplicationStepper> |
| 59 | + <ActionsContainer container spacing={5}> |
| 60 | + <Grid container item xs={12}> |
| 61 | + {activeStep < steps.length && steps[activeStep].component} |
| 62 | + </Grid> |
| 63 | + <Grid container item spacing={3}> |
| 64 | + <CampaignApplicationFormActions activeStep={activeStep} onBack={handleBack} /> |
| 65 | + </Grid> |
| 66 | + </ActionsContainer> |
| 67 | + </GenericForm> |
| 68 | + ) |
| 69 | +} |
0 commit comments