Move économie-collaborative into /assistants

pull/2529/head
Jérémy Rialland 2023-03-02 18:12:07 +01:00 committed by Johan Girod
parent 9d5955da9a
commit a0a6ec58b8
29 changed files with 78 additions and 63 deletions

View File

@ -4,8 +4,8 @@ import { Project } from 'ts-morph'
import yaml from 'yaml'
const buildYamlToDts = [
'./source/pages/Simulateurs/économie-collaborative/activités.yaml',
'./source/pages/Simulateurs/économie-collaborative/activités.en.yaml',
'./source/pages/assistants/économie-collaborative/activités.yaml',
'./source/pages/assistants/économie-collaborative/activités.en.yaml',
]
const transform = (data: Record<string, unknown>, filePath: string) => {

View File

@ -9,8 +9,8 @@ export const runScriptOnFileChange = async () => {
options: [
{
paths: [
'./source/pages/Simulateurs/économie-collaborative/activités.yaml',
'./source/pages/Simulateurs/économie-collaborative/activités.en.yaml',
'./source/pages/assistants/économie-collaborative/activités.yaml',
'./source/pages/assistants/économie-collaborative/activités.en.yaml',
],
run: 'yarn build:yaml-to-dts',
},

View File

@ -60,6 +60,16 @@ export default function Redirections({ children }: Props) {
absoluteSitePaths.assistants['choix-du-statut'].index
),
},
{
paths: [
'/simulateurs/économie-collaborative/*',
'/calculators/sharing-economy/*',
],
to: decodeURI(pathname).replace(
/^\/(simulateurs|calculators)/,
absoluteSitePaths.assistants.index
),
},
] satisfies { paths: string[]; to: string }[]
}, [
absoluteSitePaths.assistants,

View File

@ -153,7 +153,7 @@ export default function Plan() {
<Li key="list-item-economie-collaborative">
<H3>
<Link
to={absoluteSitePaths.simulateurs.économieCollaborative.index}
to={absoluteSitePaths.assistants.économieCollaborative.index}
>
<Trans>
Assistant à la déclaration des revenus des plateformes en

View File

@ -6,6 +6,7 @@ import { déclarationRevenuIndépendantBetaConfig } from '../assistants/declarat
import { demandeMobilitéConfig } from '../assistants/demande-mobilité/config'
import { pourMonEntrepriseConfig } from '../assistants/pour-mon-entreprise/config'
import { rechercheCodeApeConfig } from '../assistants/recherche-code-ape/config'
import { économieCollaborativeConfig } from '../assistants/économie-collaborative/config'
import { artisteAuteurConfig } from './artiste-auteur/config'
import { autoEntrepreneurConfig } from './auto-entrepreneur/config'
import { auxiliaireMédicalConfig } from './auxiliaire-médical/config'
@ -30,7 +31,6 @@ import { professionLibéraleConfig } from './profession-libérale/config'
import { sageFemmeConfig } from './sage-femme/config'
import { salariéConfig } from './salarié/config'
import { sasuConfig } from './sasu/config'
import { économieCollaborativeConfig } from './économie-collaborative/config'
/**
* Contient l'intégralité des données concernant les différents simulateurs et assistants

View File

@ -1,10 +1,6 @@
// import {NavigateToChoixStatutJuridique} from '.'
import { NavigateToChoixStatutJuridique } from '.'
import ChoixDuStatut from '..'
import { config } from '../../../Simulateurs/configs/config'
import { SimulatorsDataParams } from '../../../Simulateurs/configs/types'
import GuideStatut from '../GuideStatut'
export function choixStatutJuridiqueConfig({
t,

View File

@ -111,7 +111,7 @@ export const ActiviteCard = ({
light
onClick={(e) => e.stopPropagation()}
to={
absoluteSitePaths.simulateurs.économieCollaborative.index +
absoluteSitePaths.assistants.économieCollaborative.index +
'/' +
title
}

View File

@ -35,9 +35,7 @@ export default function Activité() {
const activité = getTranslatedActivité(title, language)
if (state && !(title in state)) {
return (
<Navigate
to={absoluteSitePaths.simulateurs.économieCollaborative.index}
/>
<Navigate to={absoluteSitePaths.assistants.économieCollaborative.index} />
)
}
@ -66,7 +64,7 @@ export default function Activité() {
}
const seuilRevenus = state?.[title].seuilRevenus ?? undefined
const estExonérée = estExonéréeSelector(title)(state)
const estExonérée = state && estExonéréeSelector(title)(state)
return (
<section key={title}>

View File

@ -86,13 +86,13 @@ type ActivitéSelectionProps = {
export const ActivitéSelection = ({
activités,
currentActivité,
currentActivité = '',
}: ActivitéSelectionProps) => {
const { state } = useContext(StoreContext)
const activitéRépondue = activitésRéponduesSelector(state)
const nextButtonDisabled = activitésEffectuéesSelector(state).every(
(a) => !activités.includes(a)
)
const activitéRépondue = (state && activitésRéponduesSelector(state)) ?? []
const nextButtonDisabled =
state !== null &&
activitésEffectuéesSelector(state).every((a) => !activités.includes(a))
return (
<>
@ -114,10 +114,7 @@ export const ActivitéSelection = ({
})}
</Grid>
<Spacing xl />
<NextButton
disabled={nextButtonDisabled}
activité={currentActivité as any}
/>
<NextButton disabled={nextButtonDisabled} activité={currentActivité} />
</>
)
}

View File

@ -16,12 +16,12 @@ type NextButtonProps = {
export default function NextButton({ activité, disabled }: NextButtonProps) {
const { absoluteSitePaths } = useSitePaths()
const { state, dispatch } = useContext(StoreContext)
const nextActivité = nextActivitéSelector(state, activité)
const nextActivité = state && nextActivitéSelector(state, activité)
const nextTo = nextActivité
? absoluteSitePaths.simulateurs.économieCollaborative.index +
? absoluteSitePaths.assistants.économieCollaborative.index +
'/' +
nextActivité
: absoluteSitePaths.simulateurs.économieCollaborative.votreSituation
: absoluteSitePaths.assistants.économieCollaborative.votreSituation
return (
<p css="text-align: center">

View File

@ -30,7 +30,7 @@ export default function VotreSituation() {
const { state } = useContext(StoreContext)
const { t } = useTranslation()
if (!activitésEffectuéesSelector(state).length) {
if (!state || !activitésEffectuéesSelector(state).length) {
return <Navigate to={'..'} replace />
}
@ -169,7 +169,7 @@ const ActivitéList = ({ activités }: { activités: string[] }) => {
title={title}
answered
label={
régimeGénéralDisponibleSelector(state, title) ? (
state && régimeGénéralDisponibleSelector(state, title) ? (
<Trans i18nKey="économieCollaborative.obligations.régimeGénéralDisponible">
Régime général disponible
</Trans>

View File

@ -1,15 +1,27 @@
import ÉconomieCollaborative from '.'
import { config } from '../configs/config'
import { SimulatorsDataParams } from '../configs/types'
import { config } from '../../Simulateurs/configs/config'
import { SimulatorsDataParams } from '../../Simulateurs/configs/types'
export function économieCollaborativeConfig({
t,
sitePaths,
}: SimulatorsDataParams) {
return config({
beta: true,
id: 'économie-collaborative',
path: sitePaths.simulateurs.économieCollaborative.index,
pathId: 'assistants.économieCollaborative.index',
path: sitePaths.assistants.économieCollaborative.index,
iframePath: 'economie-collaborative',
tracking: 'economie_collaborative',
icône: '🙋',
title: t(
'pages.économie-collaborative.title',
'Assistant à la déclaration des revenus des plateformes en ligne'
),
shortName: t(
'pages.économie-collaborative.shortname',
'Assistant économie collaborative'
),
meta: {
title: t(
'pages.économie-collaborative.meta.title',
@ -20,18 +32,6 @@ export function économieCollaborativeConfig({
'Airbnb, Drivy, Blablacar, Leboncoin... Découvrez comment être en règle dans vos déclarations'
),
},
icône: '🙋',
pathId: 'simulateurs.économieCollaborative.index',
iframePath: 'economie-collaborative',
beta: true,
shortName: t(
'pages.économie-collaborative.shortname',
'Assistant économie collaborative'
),
title: t(
'pages.économie-collaborative.title',
'Assistant à la déclaration des revenus des plateformes en ligne'
),
component: ÉconomieCollaborative,
} as const)
}

View File

Before

Width:  |  Height:  |  Size: 23 KiB

After

Width:  |  Height:  |  Size: 23 KiB

View File

@ -15,7 +15,7 @@ import VotreSituation from './VotreSituation'
export default function ÉconomieCollaborative() {
const { relativeSitePaths, absoluteSitePaths } = useSitePaths()
const { économieCollaborative } = absoluteSitePaths.simulateurs
const { économieCollaborative } = absoluteSitePaths.assistants
const iframePath =
useSimulatorsData()['économie-collaborative'].iframePath ?? ''
const indexPath = useIsEmbedded()
@ -41,7 +41,7 @@ export default function ÉconomieCollaborative() {
<Route index element={<ActivitésSelection />} />
<Route
path={
relativeSitePaths.simulateurs.économieCollaborative.votreSituation
relativeSitePaths.assistants.économieCollaborative.votreSituation
}
element={<VotreSituation />}
/>

View File

@ -1,8 +1,14 @@
import { getActivité, hasConditions } from './activitésData'
import { State } from './reducer'
const filterActivités =
(filter = () => true) =>
(state) =>
(
filter: (
activitéData: State[keyof State],
activitéTitle: string
) => boolean = () => true
) =>
(state: State) =>
Object.entries(state)
.filter(
([activitéTitle, activitéData]) =>
@ -10,33 +16,38 @@ const filterActivités =
)
.map(([activité]) => activité)
export const nextActivitéSelector = (state, currentActivité) =>
export const nextActivitéSelector = (state: State, currentActivité?: string) =>
filterActivités(
({ vue }, activitéTitle) => !vue && activitéTitle !== currentActivité
)(state)[0]
const estExonérée = (critèresExonération, activité) => {
const estExonérée = (
critèresExonération: State[keyof State]['critèresExonération'],
activité: keyof State
) => {
if (!critèresExonération.length) {
return false
}
if (getActivité(activité)['exonérée si']) {
const acti = getActivité(activité)
if ('exonérée si' in acti && acti['exonérée si']) {
return critèresExonération.some(Boolean)
}
return critèresExonération.every((value) => value === false)
}
export const estExonéréeSelector = (activité) => (state) =>
export const estExonéréeSelector = (activité: string) => (state: State) =>
estExonérée(state[activité].critèresExonération, activité)
export const activitésEffectuéesSelector = filterActivités()
export const activitésRéponduesSelector = filterActivités(
({ vue }, activité) => vue && hasConditions(activité)
)
export const déclarationsSelector = (state) => ({
export const déclarationsSelector = (state: State) => ({
RÉGIME_GÉNÉRAL_DISPONIBLE: filterActivités(
({ seuilRevenus, critèresExonération }, activité) =>
['RÉGIME_GÉNÉRAL_NON_DISPONIBLE', 'RÉGIME_GÉNÉRAL_DISPONIBLE'].includes(
seuilRevenus
seuilRevenus ?? ''
) && !estExonérée(critèresExonération, activité)
)(state),
AUCUN: filterActivités(
@ -50,6 +61,9 @@ export const déclarationsSelector = (state) => ({
)(state),
})
export const régimeGénéralDisponibleSelector = (state, activité) =>
export const régimeGénéralDisponibleSelector = (
state: State,
activité: string
) =>
state[activité].seuilRevenus === 'RÉGIME_GÉNÉRAL_DISPONIBLE' &&
!estExonérée(state[activité].critèresExonération, activité)

View File

@ -29,6 +29,10 @@ const rawSitePathsFr = {
'recherche-code-ape': 'recherche-code-ape',
'déclaration-charges-sociales-indépendant':
'declaration-charges-sociales-independant',
économieCollaborative: {
index: 'économie-collaborative',
votreSituation: 'votre-situation',
},
'pour-mon-entreprise': {
index: 'pour-mon-entreprise',
entreprise: ':entreprise',
@ -80,10 +84,6 @@ const rawSitePathsFr = {
cipav: 'cipav',
},
'chômage-partiel': 'chômage-partiel',
économieCollaborative: {
index: 'économie-collaborative',
votreSituation: 'votre-situation',
},
is: 'impot-societe',
dividendes: 'dividendes',
},
@ -114,6 +114,10 @@ const rawSitePathsEn = {
'recherche-code-ape': 'search-code-ape',
'déclaration-charges-sociales-indépendant':
'declaration-social-charges-independent',
économieCollaborative: {
index: 'sharing-economy',
votreSituation: 'your-situation',
},
'pour-mon-entreprise': {
index: 'for-my-business',
entreprise: ':entreprise',
@ -165,10 +169,6 @@ const rawSitePathsEn = {
'expert-comptable': 'accountant',
cipav: 'cipav',
},
économieCollaborative: {
index: 'sharing-economy',
votreSituation: 'your-situation',
},
is: 'corporate-tax',
dividendes: 'dividends',
},