mon-entreprise/source/actions/existingCompanyActions.js

64 lines
1.6 KiB
JavaScript

/* @flow */
import { isNil } from 'ramda'
import type { SaveExistingCompanyDetailsAction } from 'Types/companyTypes'
const getCommuneByCodeInsee = function(codeInsee: string) {
return fetch(
`https://geo.api.gouv.fr/communes/${codeInsee}?fields=departement,region`
).then(response => {
return response.json()
})
}
const getCommuneByCodePostal = function(codePostal: string) {
return fetch(
`https://geo.api.gouv.fr/communes?codePostal=${codePostal}&fields=departement,region`
)
.then(response => {
return response.json()
})
.then(communes => {
if (!communes || communes.length === 0) {
throw new Error(
`Pas de commune associée à ce code postal : ${codePostal}`
)
}
if (communes.length > 1) {
throw new Error(
`Trop de communes associées à ce code postal : ${codePostal}`
)
}
return communes[0]
})
}
export const saveExistingCompanyDetails = (details: { [string]: string }) => (
dispatch: SaveExistingCompanyDetailsAction => void
) => {
let effectif = Number.parseInt(
details.tranche_effectif_salarie_entreprise_centaine_pret,
10
)
effectif = isNaN(effectif) ? null : effectif
getCommuneByCodeInsee(details.departement + details.commune)
.catch(err => {
console.warn(err)
return getCommuneByCodePostal(details.code_postal)
})
.catch(err => {
console.warn(err)
return null
})
.then(commune =>
dispatch({
type: 'SAVE_EXISTING_COMPANY_DETAILS',
details: {
siret: details.siret,
...(!isNil(effectif) ? { effectif } : null),
...(commune ? { localisation: commune } : null),
apiDetails: details
}
})
)
}