Skip to content

Commit

Permalink
EmployeeWebClient - CreateFacilityMultiStepForm - create composition
Browse files Browse the repository at this point in the history
  • Loading branch information
bartstc committed Dec 7, 2022
1 parent df41152 commit 76fe790
Show file tree
Hide file tree
Showing 6 changed files with 113 additions and 35 deletions.
Original file line number Diff line number Diff line change
@@ -1,36 +1,31 @@
import React from 'react';
import { useIntl } from 'react-intl';
import { ButtonGroup, chakra } from '@chakra-ui/react';
import { ButtonGroup } from '@chakra-ui/react';

import { List, IndentList, IndentLabel } from 'shared/IndentiationList';
import { Header, Heading, SubHeading, Divider, ListItem } from 'shared/DescriptionListV2';
import { useForm, FormProvider } from 'shared/FormV2';

import { CreateFacilityFormDto } from '../../../application/types';
import { useFacilityFormStore } from '../createFacilityFormStore';
import { PreviousStepButton } from '../PreviousStepButton';
import { NextStepButton } from '../NextStepButton';
import { BaseInfoStepInputs } from './BaseInfoStepInputs';
import { FormStepHeader } from '../FormStepHeader';
import { CreateFacilityFormDto } from '../../../application/types';
import { Form } from '../Form';

const BaseInfoStep = () => {
const { formatMessage } = useIntl();
const step = useFacilityFormStore(store => store.step);
const data = useFacilityFormStore(store => store.data);
const setData = useFacilityFormStore(store => store.setData);

const methods = useForm<Partial<CreateFacilityFormDto>>({
defaultValues: data,
});

return (
<chakra.form
id='add-facility-first-step'
data-testid='add-facility-first-step'
noValidate
onSubmit={methods.handleSubmit(model => setData(model))}
>
<FormProvider {...methods}>
<FormProvider {...methods}>
<Form id='add-facility-first-step'>
<List>
<ListItem>
<FormStepHeader>
Expand Down Expand Up @@ -67,8 +62,8 @@ const BaseInfoStep = () => {
</ButtonGroup>
</IndentLabel>
</List>
</FormProvider>
</chakra.form>
</Form>
</FormProvider>
);
};

Expand Down
Original file line number Diff line number Diff line change
@@ -1,24 +1,24 @@
import React from 'react';
import { useIntl } from 'react-intl';
import { ButtonGroup, chakra } from '@chakra-ui/react';
import { ButtonGroup } from '@chakra-ui/react';

import { ContactType } from 'types';
import { ContactInputs, FormProvider, useForm } from 'shared/FormV2';
import { IndentLabel, IndentList, List } from 'shared/IndentiationList';
import { Divider, Header, Heading, ListItem, SubHeading } from 'shared/DescriptionListV2';

import { useFacilityFormStore } from '../createFacilityFormStore';
import { CreateFacilityFormDto } from '../../../application/types';
import { useFacilityFormStore } from '../createFacilityFormStore';
import { FormStepHeader } from '../FormStepHeader';
import { PreviousStepButton } from '../PreviousStepButton';
import { NextStepButton } from '../NextStepButton';
import { ContactPersonInputs } from './ContactPersonInputs';
import { Form } from '../Form';

const ContactStep = () => {
const { formatMessage } = useIntl();
const step = useFacilityFormStore(store => store.step);
const data = useFacilityFormStore(store => store.data);
const setData = useFacilityFormStore(store => store.setData);

const methods = useForm<Partial<CreateFacilityFormDto>>({
defaultValues: {
Expand All @@ -40,13 +40,8 @@ const ContactStep = () => {
});

return (
<chakra.form
id='add-facility-third-step'
data-testid='add-facility-third-step'
noValidate
onSubmit={methods.handleSubmit(model => setData(model))}
>
<FormProvider {...methods}>
<FormProvider {...methods}>
<Form id='add-facility-third-step'>
<List>
<ListItem>
<FormStepHeader>
Expand Down Expand Up @@ -103,8 +98,8 @@ const ContactStep = () => {
</ButtonGroup>
</IndentLabel>
</List>
</FormProvider>
</chakra.form>
</Form>
</FormProvider>
);
};

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
import React from 'react';
import { ComponentMeta, ComponentStory } from '@storybook/react';

import { FacilityFixture } from 'utils';

import { CreateFacilityMultiStepForm } from './index';
import { FacilityFormStep, useFacilityFormStore } from './createFacilityFormStore';
import { CreateFacilityMapper } from 'modules/facility/application';

export default {
title: 'modules/facility/AddFacilityForm/Form',
component: CreateFacilityMultiStepForm,
decorators: [
Story => {
useFacilityFormStore.setState({
data: CreateFacilityMapper.modelToForm(FacilityFixture.toStructure()),
step: FacilityFormStep.Base_info,
});

return <Story />;
},
],
} as ComponentMeta<typeof CreateFacilityMultiStepForm>;

const Template: ComponentStory<typeof CreateFacilityMultiStepForm> = () => {
return <CreateFacilityMultiStepForm />;
};

export const Form = Template.bind({});
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
import React, { ReactNode } from 'react';
import { chakra } from '@chakra-ui/react';

import { useFormContextSelector } from 'shared/FormV2';

import { useFacilityFormStore } from './createFacilityFormStore';

interface IProps {
id: string;
children: ReactNode;
}

const Form = ({ id, children }: IProps) => {
const setData = useFacilityFormStore(store => store.setData);
const next = useFacilityFormStore(store => store.next);
const handleSubmit = useFormContextSelector(state => state.handleSubmit);
const getValues = useFormContextSelector(state => state.getValues);

return (
<chakra.form
id={id}
data-testid={id}
noValidate
onSubmit={handleSubmit(
model => {
setData(model);
next();
},
() => {
setData(getValues());
},
)}
>
{children}
</chakra.form>
);
};

export { Form };
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import React from 'react';
import { useIntl } from 'react-intl';
import { ButtonGroup, chakra } from '@chakra-ui/react';
import { ButtonGroup } from '@chakra-ui/react';

import { FormProvider, useForm } from 'shared/FormV2';
import { Divider, Header, Heading, ListItem, SubHeading } from 'shared/DescriptionListV2';
Expand All @@ -13,12 +13,12 @@ import { NextStepButton } from '../NextStepButton';
import { useFacilityFormStore } from '../createFacilityFormStore';
import { WorkingHoursInputs } from './WorkingHoursInputs';
import { AddressInputs } from './AddressInputs';
import { Form } from '../Form';

const WorkingDaysAndAddressStep = () => {
const { formatMessage } = useIntl();
const step = useFacilityFormStore(store => store.step);
const data = useFacilityFormStore(store => store.data);
const setData = useFacilityFormStore(store => store.setData);

const methods = useForm<Partial<CreateFacilityFormDto>>({
defaultValues: {
Expand All @@ -36,13 +36,8 @@ const WorkingDaysAndAddressStep = () => {
});

return (
<chakra.form
id='add-facility-second-step'
data-testid='add-facility-second-step'
noValidate
onSubmit={methods.handleSubmit(model => setData(model))}
>
<FormProvider {...methods}>
<FormProvider {...methods}>
<Form id='add-facility-second-step'>
<List>
<ListItem>
<FormStepHeader>
Expand Down Expand Up @@ -99,8 +94,8 @@ const WorkingDaysAndAddressStep = () => {
</ButtonGroup>
</IndentLabel>
</List>
</FormProvider>
</chakra.form>
</Form>
</FormProvider>
);
};

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
import React from 'react';
import { VStack } from '@chakra-ui/react';

import { FacilityFormStep, useFacilityFormStore } from './createFacilityFormStore';
import { FormStepProgressBar } from './FormStepProgressBar';
import { BaseInfoStep } from './BaseInfoStep';
import { WorkingDaysAndAddressStep } from './WorkingDaysAndAddressStep';
import { ContactStep } from './ContactStep';
import { SummaryStep } from './SummaryStep';

const CreateFacilityMultiStepForm = () => {
const step = useFacilityFormStore(store => store.step);

return (
<VStack display='stretch'>
<FormStepProgressBar />
{step === FacilityFormStep.Base_info && <BaseInfoStep />}
{step === FacilityFormStep.Working_hours && <WorkingDaysAndAddressStep />}
{step === FacilityFormStep.Contact && <ContactStep />}
{step === FacilityFormStep.Summary && <SummaryStep />}
</VStack>
);
};

export { CreateFacilityMultiStepForm };

0 comments on commit 76fe790

Please sign in to comment.