Skip to content

Commit

Permalink
chore: migrate service public to the client (#1098)
Browse files Browse the repository at this point in the history
  • Loading branch information
XavierJp committed Jun 5, 2024
1 parent dc1a68f commit ba98367
Show file tree
Hide file tree
Showing 9 changed files with 211 additions and 158 deletions.
Original file line number Diff line number Diff line change
@@ -1,99 +1,132 @@
'use client';

import { DILA } from '#components/administrations';
import NonRenseigne from '#components/non-renseigne';
import { DataSection } from '#components/section/data-section';
import { DataSectionClient } from '#components/section/data-section';
import { FullTable } from '#components/table/full';
import { EAdministration } from '#models/administrations/EAdministration';
import { IAPINotRespondingError } from '#models/api-not-responding';
import { IServicePublic } from '#models/service-public';
import { isAPILoading } from '#models/api-loading';
import { IUniteLegale } from '#models/core/types';
import { useFetchServicePublic } from 'hooks/fetch/service-public';
import SubServicesSection from './service-public-subservices';

type IProps = { servicePublic: IServicePublic | IAPINotRespondingError };
export default function ResponsablesServicePublicSection({
uniteLegale,
}: {
uniteLegale: IUniteLegale;
}) {
const servicePublic = useFetchServicePublic(uniteLegale);

export default function ResponsableSection({ servicePublic }: IProps) {
return (
<DataSection
id="responsables-service-public"
title={`Responsable(s)`}
sources={[EAdministration.DILA]}
notFoundInfo={<NotFoundInfo />}
data={servicePublic}
>
{(servicePublic) => (
<>
{!servicePublic.affectationPersonne ? (
<p>
Ce service public n’a pas de responsable enregistré auprès de la{' '}
<DILA />.
</p>
) : (
<>
<>
<DataSectionClient
id="responsables-service-public"
title={`Responsable(s)`}
sources={[EAdministration.DILA]}
notFoundInfo={<NotFoundInfo />}
data={servicePublic}
>
{(servicePublic) => (
<>
{!servicePublic.affectationPersonne ? (
<p>
Ce service public possède{' '}
{servicePublic.affectationPersonne.length} responsable(s)
enregistré(s) auprès de la <DILA />
{servicePublic.liens.annuaireServicePublic && (
<>
{' '}
sur{' '}
<a
href={servicePublic.liens.annuaireServicePublic.valeur}
target="_blank"
rel="noopener noreferrer"
aria-label="Voir la page de l’Annuaire du service public, Nouvelle fenêtre"
>
l’Annuaire du service public
</a>
</>
)}
{servicePublic.liens.organigramme && (
<>
{' '}
et publie un{' '}
<a
href={servicePublic.liens.organigramme.valeur}
target="_blank"
rel="noopener noreferrer"
aria-label={`Voir ${servicePublic.liens.organigramme.libelle}, nouvelle fenêtre`}
>
organigramme
</a>
</>
)}
Ce service public n’a pas de responsable enregistré dans l’
<a
href="https://lannuaire.service-public.fr/"
target="_blank"
rel="noopener noreferrer"
aria-label="Voir l’Annuaire de l’administration, nouvelle fenêtre"
>
Annuaire de l’administration
</a>
.
</p>
) : (
<>
<p>
Ce service public possède{' '}
{servicePublic.affectationPersonne.length} responsable(s)
enregistré(s) auprès de la <DILA />
{servicePublic.liens.annuaireServicePublic && (
<>
{' '}
sur{' '}
<a
href={servicePublic.liens.annuaireServicePublic.valeur}
target="_blank"
rel="noopener noreferrer"
aria-label="Voir la page de l’Annuaire du service public, Nouvelle fenêtre"
>
l’Annuaire du service public
</a>
</>
)}
{servicePublic.liens.organigramme && (
<>
{' '}
et publie un{' '}
<a
href={servicePublic.liens.organigramme.valeur}
target="_blank"
rel="noopener noreferrer"
aria-label={`Voir ${servicePublic.liens.organigramme.libelle}, nouvelle fenêtre`}
>
organigramme
</a>
</>
)}
.
</p>

<FullTable
head={['Role', 'Nom', 'Nomination']}
body={servicePublic.affectationPersonne.map((personne) => [
personne.fonction,
personne.nom ?? <NonRenseigne />,
personne.lienTexteAffectation ? (
<a
href={personne.lienTexteAffectation.valeur}
target="_blank"
rel="noopener noreferrer"
aria-label={`${
personne.lienTexteAffectation.libelle ||
'Voir la nomination'
}, nouvelle fenêtre`}
>
{personne.lienTexteAffectation.libelle ||
'Voir la nomination'}
</a>
) : (
<NonRenseigne />
),
])}
/>
</>
)}
</>
<FullTable
head={['Role', 'Nom', 'Nomination']}
body={servicePublic.affectationPersonne.map((personne) => [
personne.fonction,
personne.nom ?? <NonRenseigne />,
personne.lienTexteAffectation ? (
<a
href={personne.lienTexteAffectation.valeur}
target="_blank"
rel="noopener noreferrer"
aria-label={`${
personne.lienTexteAffectation.libelle ||
'Voir la nomination'
}, nouvelle fenêtre`}
>
{personne.lienTexteAffectation.libelle ||
'Voir la nomination'}
</a>
) : (
<NonRenseigne />
),
])}
/>
</>
)}
</>
)}
</DataSectionClient>
{!isAPILoading(servicePublic) && (
<SubServicesSection
servicePublic={servicePublic}
uniteLegale={uniteLegale}
/>
)}
</DataSection>
</>
);
}

const NotFoundInfo = () => (
<p>
Ce service public n’est pas enregistré auprès de la <DILA />.
Ce service public n’a pas été retrouvé dans l’
<a
href="https://lannuaire.service-public.fr/"
target="_blank"
rel="noopener noreferrer"
aria-label="Voir l’Annuaire de l’administration, nouvelle fenêtre"
>
Annuaire de l’administration
</a>
.
</p>
);
18 changes: 4 additions & 14 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 { getServicePublicByUniteLegale } from '#models/service-public';
import { isServicePublic } from '#models/core/types';
import { EScope, hasRights } from '#models/user/rights';
import {
uniteLegalePageDescription,
Expand All @@ -14,9 +14,8 @@ import extractParamsAppRouter, {
AppRouterProps,
} from '#utils/server-side-helper/app/extract-params';
import getSession from '#utils/server-side-helper/app/get-session';
import ResponsableSection from 'app/(header-default)/dirigeants/[slug]/_component/sections/service-public-responsables';
import { DirigeantInformation } from './_component/sections';
import SubServicesSection from './_component/sections/service-public-subservices';
import ResponsablesServicePublicSection from './_component/sections/service-public-responsables';

export const generateMetadata = async (
props: AppRouterProps
Expand All @@ -43,9 +42,6 @@ const DirigeantsPage = async (props: AppRouterProps) => {
const { slug, isBot } = extractParamsAppRouter(props);

const uniteLegale = await cachedGetUniteLegale(slug, isBot);
const servicePublic = await getServicePublicByUniteLegale(uniteLegale, {
isBot,
});

const session = await getSession();

Expand All @@ -57,14 +53,8 @@ const DirigeantsPage = async (props: AppRouterProps) => {
ficheType={FICHE.DIRIGEANTS}
session={session}
/>
{servicePublic ? (
<>
<ResponsableSection servicePublic={servicePublic} />
<SubServicesSection
servicePublic={servicePublic}
uniteLegale={uniteLegale}
/>
</>
{isServicePublic(uniteLegale) ? (
<ResponsablesServicePublicSection uniteLegale={uniteLegale} />
) : !estDiffusible(uniteLegale) &&
!hasRights(session, EScope.nonDiffusible) ? (
<DonneesPriveesSection />
Expand Down
38 changes: 12 additions & 26 deletions app/(header-default)/entreprise/[slug]/page.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,4 @@
import { Metadata } from 'next';
import { HorizontalSeparator } from '#components-ui/horizontal-separator';
import BreakPageForPrint from '#components-ui/print-break-page';
import AssociationSection from '#components/association-section';
import CollectiviteTerritorialeSection from '#components/collectivite-territoriale-section';
import { EspaceAgentSummarySection } from '#components/espace-agent-components/summary-section';
Expand All @@ -14,11 +12,13 @@ import Title from '#components/title-section';
import { FICHE } from '#components/title-section/tabs';
import UniteLegaleSection from '#components/unite-legale-section';
import UsefulShortcuts from '#components/useful-shortcuts';
import { isAPINotResponding } from '#models/api-not-responding';
import { estNonDiffusible } from '#models/core/statut-diffusion';
import { isAssociation, isCollectiviteTerritoriale } from '#models/core/types';
import {
isAssociation,
isCollectiviteTerritoriale,
isServicePublic,
} from '#models/core/types';
import { getImmatriculationEORI } from '#models/espace-agent/immatriculation-eori';
import { getServicePublicByUniteLegale } from '#models/service-public';
import { EScope, hasRights } from '#models/user/rights';
import {
shouldNotIndex,
Expand Down Expand Up @@ -55,14 +55,9 @@ export default async function UniteLegalePage(props: AppRouterProps) {
const session = await getSession();
const uniteLegale = await cachedGetUniteLegale(slug, isBot, page);

const [servicePublic, immatriculationEORI] = await Promise.all([
getServicePublicByUniteLegale(uniteLegale, {
isBot,
}),
hasRights(session, EScope.eori)
? getImmatriculationEORI(uniteLegale.siege.siret, session?.user)
: null,
]);
const immatriculationEORI = hasRights(session, EScope.eori)
? await getImmatriculationEORI(uniteLegale.siege.siret, session?.user)
: null;

return (
<>
Expand Down Expand Up @@ -90,19 +85,10 @@ export default async function UniteLegalePage(props: AppRouterProps) {
{isCollectiviteTerritoriale(uniteLegale) && (
<CollectiviteTerritorialeSection uniteLegale={uniteLegale} />
)}
{servicePublic && (
<ServicePublicSection
uniteLegale={uniteLegale}
servicePublic={servicePublic}
/>
)}
{(isCollectiviteTerritoriale(uniteLegale) ||
(servicePublic && !isAPINotResponding(servicePublic))) && (
<>
<HorizontalSeparator />
<BreakPageForPrint />
</>
)}
{isServicePublic(uniteLegale) &&
!isCollectiviteTerritoriale(uniteLegale) && (
<ServicePublicSection uniteLegale={uniteLegale} />
)}
{!isBot && isAssociation(uniteLegale) && (
<AssociationSection uniteLegale={uniteLegale} session={session} />
)}
Expand Down
11 changes: 3 additions & 8 deletions app/(header-default)/etablissement/[slug]/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import { NonDiffusibleSection } from '#components/non-diffusible-section';
import ServicePublicSection from '#components/service-public-section';
import { TitleEtablissementWithDenomination } from '#components/title-section/etablissement';
import { estNonDiffusible } from '#models/core/statut-diffusion';
import { getServicePublicByEtablissement } from '#models/service-public';
import { isServicePublic } from '#models/core/types';
import {
etablissementPageDescription,
etablissementPageTitle,
Expand Down Expand Up @@ -44,11 +44,6 @@ export default (async function EtablissementPage(props: AppRouterProps) {
await cachedEtablissementWithUniteLegale(slug, isBot);

const session = await getSession();
const servicePublic = await getServicePublicByEtablissement(
uniteLegale,
etablissement,
{ isBot }
);

return (
<>
Expand All @@ -73,10 +68,10 @@ export default (async function EtablissementPage(props: AppRouterProps) {
usedInEntreprisePage={false}
/>
)}
{servicePublic && (
{!isBot && isServicePublic(uniteLegale) && (
<ServicePublicSection
servicePublic={servicePublic}
uniteLegale={uniteLegale}
etablissement={etablissement}
/>
)}
</div>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ export async function GET(
'CarteProfessionnelleTravauxPublics',
slug,
EAdministration.FNTP,
EScope.conformite,
EScope.carteProfessionnelleTravauxPublics,
async (agentSiret: string) => {
const siret = verifySiret(slug as string);
const siren = extractSirenFromSiret(siret);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,10 @@ function queryAnnuaireServicePublic(whereQuery: string) {
return odsClient(
{
url: routes.annuaireServicePublic.ods.search,
config: { params: { where: whereQuery }, useCache: true },
config: {
params: { where: whereQuery },
useCache: true,
},
},
routes.annuaireServicePublic.ods.metadata
);
Expand Down Expand Up @@ -82,7 +85,6 @@ const clientAnnuaireServicePublicByIds = async (
ids: string[]
): Promise<IServicePublic[]> => {
const query = `id="${ids.join('" OR id="')}"`;
const useCache = false;
let response = await queryAnnuaireServicePublic(query);

if (!response.records.length) {
Expand Down
Loading

0 comments on commit ba98367

Please sign in to comment.