Skip to content

Commit

Permalink
refactor: documents et dirigeants asso (#1136)
Browse files Browse the repository at this point in the history
* refactor: documents et dirigeants asso

* feat: add documents and dirigeants association

* comment: rna or compte asso

* feat: add agent wall

* feat: a11y, refacto RNE section for asso

* feat: update changelog association

* chore: merge with main
  • Loading branch information
XavierJp committed Jul 22, 2024
1 parent d227bef commit d318b92
Show file tree
Hide file tree
Showing 30 changed files with 511 additions and 168 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,112 @@
'use client';

import FAQLink from '#components-ui/faq-link';
import InformationTooltip from '#components-ui/information-tooltip';
import { Tag } from '#components-ui/tag';
import AgentWallAssociationProtected from '#components/espace-agent-components/agent-wall/association';
import NonRenseigne from '#components/non-renseigne';
import { DataSectionClient } from '#components/section/data-section';
import { FullTable } from '#components/table/full';
import { EAdministration } from '#models/administrations/EAdministration';
import { IUniteLegale } from '#models/core/types';
import { isUnauthorized } from '#models/data-fetching';
import { ISession } from '#models/user/session';
import { useAPIRouteData } from 'hooks/fetch/use-API-route-data';

type IProps = {
uniteLegale: IUniteLegale;
session: ISession | null;
};

const NoDirigeants = () => (
<>Aucun(e) dirigeant(e) n’a été retrouvé pour cette association.</>
);

/**
* Dirigeants for agents : RNA or Le compte asso
*/
function DirigeantsAssociationSection({ uniteLegale, session }: IProps) {
const associationProtected = useAPIRouteData(
'espace-agent/association-protected',
uniteLegale.siren,
session
);

if (isUnauthorized(associationProtected)) {
return (
<AgentWallAssociationProtected
title="Dirigeants des associations"
id="dirigeants"
uniteLegale={uniteLegale}
/>
);
}

return (
<DataSectionClient
id="rna-dirigeants"
title="Dirigeants des associations"
isProtected
// @ts-ignore
notFoundInfo={<NoDirigeants />}
sources={[EAdministration.MI, EAdministration.DJEPVA]}
data={associationProtected}
>
{(associationProtected) => (
<>
{associationProtected.dirigeants.length === 0 ? (
<NoDirigeants />
) : (
<>
Cette association possède {associationProtected.dirigeants.length}{' '}
dirigeant(s) enregistré(s) au{' '}
<FAQLink tooltipLabel="RNA">
Registre National des Associations
</FAQLink>{' '}
:
<br />
<br />
<FullTable
head={['Role', 'Détails', 'Contact']}
body={associationProtected.dirigeants.map(
({
civilite,
nom,
prenom,
fonction,
valideur_cec,
publication_internet,
telephone,
courriel,
}) => [
<>
{fonction}{' '}
{valideur_cec && (
<InformationTooltip
label="Le validateur CEC est le dirigeant de l’association chargé d’attester les déclarations d’engagement des responsables associatifs dans le cadre du compte d’engagement citoyen (CEC)."
tabIndex={0}
>
<Tag color="info">Validateur CEC</Tag>
</InformationTooltip>
)}
</>,
<>
{civilite} {(nom || '').toUpperCase()} {prenom}
</>,
publication_internet && courriel ? (
<a href={`mailto:${courriel}`}>{courriel}</a>
) : (
<NonRenseigne />
),
]
)}
/>
</>
)}
</>
)}
</DataSectionClient>
);
}

export default DirigeantsAssociationSection;
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,12 @@ import {
IPersonneMorale,
} from '#models/immatriculation';
import { formatDateLong, formatDatePartial, formatIntFr } from '#utils/helpers';
import { isPersonneMorale } from './is-personne-morale';
import { isPersonneMorale } from '../is-personne-morale';

type IDirigeantContentProps = {
dirigeants: IDirigeant[];
uniteLegale: IUniteLegale;
};

export function DirigeantContent({
dirigeants,
Expand Down Expand Up @@ -83,9 +88,3 @@ export function DirigeantContent({
</>
);
}

type IDirigeantContentProps = {
dirigeants: IDirigeant[];
uniteLegale: IUniteLegale;
isFallback: boolean;
};
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

import BreakPageForPrint from '#components-ui/print-break-page';
import { IUniteLegale } from '#models/core/types';
import { EScope, hasRights } from '#models/user/rights';
import { hasAnyError, isUnauthorized } from '#models/data-fetching';
import { ISession } from '#models/user/session';
import { useAPIRouteData } from 'hooks/fetch/use-API-route-data';
import BeneficiairesSection from './beneficiaires';
Expand All @@ -19,20 +19,29 @@ export function DirigeantInformation({
}) {
const immatriculationRNE = useAPIRouteData('rne', uniteLegale.siren, session);

const mandatairesRCS = useAPIRouteData(
'espace-agent/rcs-mandataires',
uniteLegale.siren,
session
);

const hasMandataireRCS =
!isUnauthorized(mandatairesRCS) && !hasAnyError(mandatairesRCS);

return (
<>
<DirigeantSummary
uniteLegale={uniteLegale}
immatriculationRNE={immatriculationRNE}
/>
{!hasRights(session, EScope.mandatairesRCS) ? (
<DirigeantsSection
{hasMandataireRCS ? (
<DirigeantsProtectedSection
uniteLegale={uniteLegale}
immatriculationRNE={immatriculationRNE}
mandatairesRCS={mandatairesRCS}
/>
) : (
<DirigeantsProtectedSection
session={session}
<DirigeantsSection
uniteLegale={uniteLegale}
immatriculationRNE={immatriculationRNE}
/>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,18 +11,18 @@ import {
isDataLoading,
} from '#models/data-fetching';
import { IDirigeant, IImmatriculationRNE } from '#models/immatriculation';
import { ISession } from '#models/user/session';
import { useAPIRouteData } from 'hooks/fetch/use-API-route-data';
import { DirigeantContent } from './dirigeant-content';
import DirigeantsSection from './rne-dirigeants';

type IProps = {
immatriculationRNE:
| IImmatriculationRNE
| IAPINotRespondingError
| IDataFetchingState;
uniteLegale: IUniteLegale;
session: ISession | null;
mandatairesRCS:
| Array<IDirigeant>
| IAPINotRespondingError
| IDataFetchingState;
};

function RCSDiffersFromRNE({
Expand Down Expand Up @@ -71,23 +71,8 @@ function RCSDiffersFromRNE({
function DirigeantsProtectedSection({
uniteLegale,
immatriculationRNE,
session,
mandatairesRCS,
}: IProps) {
const mandatairesRCS = useAPIRouteData(
'espace-agent/rcs-mandataires',
uniteLegale.siren,
session
);

if (hasAnyError(mandatairesRCS)) {
return (
<DirigeantsSection
uniteLegale={uniteLegale}
immatriculationRNE={immatriculationRNE}
/>
);
}

return (
<DataSectionClient
id="rne-dirigeants"
Expand Down Expand Up @@ -123,7 +108,6 @@ function DirigeantsProtectedSection({
</p>
<DirigeantContent
dirigeants={mandatairesRCS}
isFallback={false}
uniteLegale={uniteLegale}
/>
</>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,6 @@ function DirigeantsSection({ uniteLegale, immatriculationRNE }: IProps) {

<DirigeantContent
dirigeants={immatriculationRNE.dirigeants}
isFallback={immatriculationRNE.metadata.isFallback}
uniteLegale={uniteLegale}
/>
</>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -110,15 +110,17 @@ const DirigeantSummary: React.FC<IDirigeantSummaryProps> = ({
}

return (
<>
Cette structure possède :
<nav role="navigation" aria-labelledby="dirigeant-summary-title">
<strong id="dirigeant-summary-title">
Cette structure a pour dirigeant(s) :
</strong>
<ul>
{summaries.map((summary, index) => (
<li key={index}>{summary}</li>
))}
</ul>
<br />
</>
</nav>
);
};

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import { FullTable } from '#components/table/full';
import { EAdministration } from '#models/administrations/EAdministration';
import { IUniteLegale } from '#models/core/types';
import { useFetchServicePublic } from 'hooks/fetch/service-public';
import SubServicesSection from './service-public-subservices';
import SubServicesSection from './subservices';

export default function ResponsablesServicePublicSection({
uniteLegale,
Expand Down
12 changes: 9 additions & 3 deletions app/(header-default)/dirigeants/[slug]/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import { DonneesPriveesSection } from '#components/donnees-privees-section';
import Title from '#components/title-section';
import { FICHE } from '#components/title-section/tabs';
import { estDiffusible } from '#models/core/statut-diffusion';
import { isServicePublic } from '#models/core/types';
import { isAssociation, isServicePublic } from '#models/core/types';
import { EScope, hasRights } from '#models/user/rights';
import {
uniteLegalePageDescription,
Expand All @@ -14,8 +14,9 @@ import extractParamsAppRouter, {
AppRouterProps,
} from '#utils/server-side-helper/app/extract-params';
import getSession from '#utils/server-side-helper/app/get-session';
import { DirigeantInformation } from './_component/sections';
import ResponsablesServicePublicSection from './_component/sections/service-public-responsables';
import DirigeantsAssociationSection from './_component/sections/association/dirigeants';
import { DirigeantInformation } from './_component/sections/entreprise';
import ResponsablesServicePublicSection from './_component/sections/service-public';

export const generateMetadata = async (
props: AppRouterProps
Expand Down Expand Up @@ -58,6 +59,11 @@ const DirigeantsPage = async (props: AppRouterProps) => {
) : !estDiffusible(uniteLegale) &&
!hasRights(session, EScope.nonDiffusible) ? (
<DonneesPriveesSection />
) : isAssociation(uniteLegale) ? (
<DirigeantsAssociationSection
uniteLegale={uniteLegale}
session={session}
/>
) : (
<DirigeantInformation uniteLegale={uniteLegale} session={session} />
)}
Expand Down

This file was deleted.

Loading

0 comments on commit d318b92

Please sign in to comment.