mon-entreprise/source/actions/companyStatusActions.js

108 lines
2.8 KiB
JavaScript

/* @flow */
import { dropWhile, last } from 'ramda'
import { nextQuestionUrlSelector } from 'Selectors/companyStatusSelectors'
import type {
IsSoleProprietorshipAction,
CompanyHasMultipleAssociatesAction,
DirectorStatus,
IsAutoentrepreneurAction,
ResetCompanyStatusAction,
DirectorIsInAMinorityAction,
DefineDirectorStatusAction
} from 'Types/companyTypes'
import type { Thunk } from 'Types/ActionsTypes'
// Bug : last et dropline sont automatiquement enlevé par le formatOnSave de visual studio code sinon
// eslint-disable-next-line
let x = [dropWhile, last]
const thenGoToNextQuestion = actionCreator => (...args: any) =>
((dispatch, getState, { history, sitePaths }) => {
dispatch(actionCreator(...args))
history.push(nextQuestionUrlSelector(getState(), { sitePaths }))
}: Thunk<any>)
export const isSoleProprietorship = thenGoToNextQuestion(
(isSoleProprietorship: ?boolean): IsSoleProprietorshipAction => ({
type: 'COMPANY_IS_SOLE_PROPRIETORSHIP',
isSoleProprietorship
})
)
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 isAutoentrepreneur = thenGoToNextQuestion(
(autoEntrepreneur: ?boolean): IsAutoentrepreneurAction => ({
type: 'COMPANY_IS_MICROENTERPRISE',
autoEntrepreneur
})
)
export const directorIsInAMinority = thenGoToNextQuestion(
(minorityDirector: ?boolean): DirectorIsInAMinorityAction => ({
type: 'SPECIFY_DIRECTORS_SHARE',
minorityDirector
})
)
export const goToCompanyStatusChoice = (): Thunk<ResetCompanyStatusAction> => (
dispatch,
_,
{ history, sitePaths }
) => {
dispatch(
({
type: 'RESET_COMPANY_STATUS_CHOICE'
}: ResetCompanyStatusAction)
)
history.push(sitePaths.entreprise.index)
}
export const resetCompanyStatusChoice = (
from: string
): Thunk<ResetCompanyStatusAction> => (dispatch, getState) => {
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
})
}
export const goBackToPreviousQuestion = (): Thunk<ResetCompanyStatusAction> => (
dispatch,
getState,
{ history, sitePaths }
) => {
const previousQuestion = last(
Object.keys(getState().inFranceApp.companyLegalStatus)
)
if (previousQuestion) {
dispatch({
type: 'RESET_COMPANY_STATUS_CHOICE',
answersToReset: [previousQuestion]
})
}
history.push(
sitePaths.entreprise.statutJuridique[previousQuestion || 'index']
)
}