mon-entreprise/source/actions/companyStatusActions.js

108 lines
2.8 KiB
JavaScript

/* @flow */
import type {
ChooseCompanyLiabilityAction,
CompanyLiability,
CompanyHasMultipleAssociatesAction,
DirectorStatus,
CompanyIsMicroenterpriseAction,
ResetCompanyStatusAction,
DirectorIsInAMinorityAction,
DefineDirectorStatusAction
} from 'Types/companyTypes'
import { last } from "ramda";
import type { RouterHistory } from 'react-router'
import { dropWhile } from "ramda";
import { nextQuestionUrlSelector } from 'Selectors/companyStatusSelectors'
import sitePaths from '../sites/mycompanyinfrance.fr/sitePaths';
const thenGoToNextQuestion = actionCreator => (...args: any) => (
dispatch: any => void,
getState: () => any,
history: RouterHistory
) => {
dispatch(actionCreator(...args))
history.push(nextQuestionUrlSelector(getState()))
}
export const chooseCompanyLiability = thenGoToNextQuestion(
(setup: ?CompanyLiability): ChooseCompanyLiabilityAction => ({
type: 'CHOOSE_COMPANY_LEGAL_SETUP',
setup
})
)
export const defineDirectorStatus = thenGoToNextQuestion(
(status: ?DirectorStatus): DefineDirectorStatusAction => ({
type: 'DEFINE_DIRECTOR_STATUS',
status
})
)
export const companyHasMultipleAssociates = thenGoToNextQuestion(
(multipleAssociates: ?boolean): CompanyHasMultipleAssociatesAction => ({
type: 'COMPANY_HAS_MULTIPLE_ASSOCIATES',
multipleAssociates
})
)
export const companyIsMicroenterprise = thenGoToNextQuestion(
(microEnterprise: ?boolean): CompanyIsMicroenterpriseAction => ({
type: 'COMPANY_IS_MICROENTERPRISE',
microEnterprise
})
)
export const directorIsInAMinority = thenGoToNextQuestion(
(minorityDirector: ?boolean): DirectorIsInAMinorityAction => ({
type: 'SPECIFY_DIRECTORS_SHARE',
minorityDirector
})
)
export const goToCompanyStatusChoice = () => (
dispatch: ResetCompanyStatusAction => void,
_: any,
history: RouterHistory
) => {
dispatch(
({
type: 'RESET_COMPANY_STATUS_CHOICE'
}: ResetCompanyStatusAction)
)
history.push(sitePaths().entreprise.index)
}
export const resetCompanyStatusChoice = (from: string) => (
dispatch: ResetCompanyStatusAction => void,
getState: ()=> any
) => {
const answeredQuestion = Object.keys(getState().inFranceApp.companyLegalStatus);
const answersToReset = dropWhile(a => a !== from, answeredQuestion)
if (!answersToReset.length) {
return
}
dispatch(
({
type: 'RESET_COMPANY_STATUS_CHOICE',
answersToReset,
}: ResetCompanyStatusAction)
)
}
export const goBackToPreviousQuestion = () => (
dispatch: ResetCompanyStatusAction => void,
getState: () => any,
history: RouterHistory
) => {
const previousQuestion = last(Object.keys(getState().inFranceApp.companyLegalStatus));
if (previousQuestion) {
dispatch(
({
type: 'RESET_COMPANY_STATUS_CHOICE',
answersToReset: [previousQuestion],
}: ResetCompanyStatusAction)
)
}
history.push(sitePaths().entreprise.statusJuridique[previousQuestion || 'index'])
}