Skip to content

Commit

Permalink
extract filesize into queries
Browse files Browse the repository at this point in the history
  • Loading branch information
carolineBda committed Oct 31, 2024
1 parent 886cf14 commit e19a58e
Show file tree
Hide file tree
Showing 12 changed files with 166 additions and 244 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -111,59 +111,3 @@ exports[`Modeles getByIdsModeles 1`] = `
},
]
`;

exports[`Modeles getBySlugModeles 1`] = `
{
"breadcrumbs": [
{
"label": "Départ de l’entreprise",
"position": 8,
"slug": "/themes/depart-de-lentreprise",
},
{
"label": "Rupture conventionnelle",
"position": 3,
"slug": "/themes/rupture-conventionnelle",
},
{
"label": "Rupture conventionnelle individuelle",
"position": 1,
"slug": "/themes/rupture-conventionnelle-individuelle",
},
],
"cdtnId": "a712ecb976",
"description": "La rupture conventionnelle individuelle est une modalité de rupture spécifique du CDI. Elle nécessite le consentement de l’employeur et du salarié, et son homologation par l’administration. La rupture ouvre droit à une indemnité de rupture conventionnelle. Ce modèle permet d’initier la procédure de rupture par l’invitation à un premier entretien.",
"slug": "demande-de-rendez-vous-en-vue-dune-rupture-conventionnelle",
"source": "modeles_de_courriers",
"title": "Demande de rendez-vous en vue d’une rupture conventionnelle",
}
`;

exports[`Modeles getBySlugsModeles 1`] = `
[
{
"breadcrumbs": [
{
"label": "Départ de l’entreprise",
"position": 8,
"slug": "/themes/depart-de-lentreprise",
},
{
"label": "Rupture conventionnelle",
"position": 3,
"slug": "/themes/rupture-conventionnelle",
},
{
"label": "Rupture conventionnelle individuelle",
"position": 1,
"slug": "/themes/rupture-conventionnelle-individuelle",
},
],
"cdtnId": "a712ecb976",
"description": "La rupture conventionnelle individuelle est une modalité de rupture spécifique du CDI. Elle nécessite le consentement de l’employeur et du salarié, et son homologation par l’administration. La rupture ouvre droit à une indemnité de rupture conventionnelle. Ce modèle permet d’initier la procédure de rupture par l’invitation à un premier entretien.",
"slug": "demande-de-rendez-vous-en-vue-dune-rupture-conventionnelle",
"source": "modeles_de_courriers",
"title": "Demande de rendez-vous en vue d’une rupture conventionnelle",
},
]
`;
Original file line number Diff line number Diff line change
@@ -1,33 +1,14 @@
/** @jest-environment node */

import {
getAllModeles,
getByIdsModeles,
getBySlugModeles,
getBySlugsModeles,
} from "../service";
import { getAllModeles, getByIdsModeles } from "../service";

describe("Modeles", () => {
it("getAllModeles", async () => {
const result = await getAllModeles();
expect(result).toMatchSnapshot();
});
it("getBySlugsModeles", async () => {
const result = await getBySlugsModeles([
"demande-de-rendez-vous-en-vue-dune-rupture-conventionnelle",
]);
expect(result).toMatchSnapshot();
});

it("getByIdsModeles", async () => {
const result = await getByIdsModeles(["a712ecb976"]);
expect(result).toMatchSnapshot();
});

it("getBySlugModeles", async () => {
const result = await getBySlugModeles(
"demande-de-rendez-vous-en-vue-dune-rupture-conventionnelle"
);
expect(result).toMatchSnapshot();
});
});
Original file line number Diff line number Diff line change
Expand Up @@ -28,19 +28,6 @@ export const getAllModeles = async () => {
: [];
};

export const getBySlugsModeles = async (
slugs: string[]
): Promise<ElasticSearchItem[]> => {
const body = getModelesBySlugs(slugs);
const response = await elasticsearchClient.search<any>({
body,
index: elasticDocumentsIndex,
});
return response.hits.hits.length > 0
? response.hits.hits.map(({ _source }) => _source)
: [];
};

export const getByIdsModeles = async (
ids: string[]
): Promise<ElasticSearchItem[]> => {
Expand All @@ -58,26 +45,3 @@ export const getByIdsModeles = async (
}
return response.hits.hits.map(({ _source }) => _source);
};

export const getBySlugModeles = async (slug: string) => {
const body = getModeleBySlug(slug);

const response = await elasticsearchClient.search<any>({
body,
index: elasticDocumentsIndex,
});

if (response.hits.hits.length === 0) {
throw new NotFoundError({
message: `There is no modele that match ${slug}`,
name: "MODELE_NOT_FOUND",
cause: null,
});
}

const theme = response.hits.hits[0];

return {
...theme._source,
};
};
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@ export const fetchLegalArticle = async (
{ term: { isPublished: true } },
],
},
},
size: 1,
}
});
};
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ export const fetchDocument = async <
_source: fields,
index: elasticDocumentsIndex,
...body,
size: 1,
});
if (response.hits.hits.length === 0) {
return;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,7 @@ describe("<LetterModel />", () => {
metaDescription={""}
filesize={10}
filename={""}
extension={""}
html={""}
/>
);
Expand All @@ -101,6 +102,7 @@ describe("<LetterModel />", () => {
metaDescription={""}
filesize={10}
filename={""}
extension={""}
html="<p>Hello</p>"
/>
);
Expand Down Expand Up @@ -128,6 +130,7 @@ describe("<LetterModel />", () => {
metaDescription={""}
filesize={10}
filename={""}
extension={""}
html={""}
/>
);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,34 +26,33 @@ describe("Modèles de courrier", () => {
slug: "demande-de-rendez-vous-en-vue-dune-rupture-conventionnelle",
});
expect(result).toEqual({
_id: "15",
author: "Ministère du Travail",
breadcrumbs: [
"_id": "15",
"author": "Ministère du Travail",
"breadcrumbs": [
{
label: "Départ de l’entreprise",
position: 8,
slug: "/themes/depart-de-lentreprise",
"label": "Départ de l’entreprise",
"position": 8,
"slug": "/themes/depart-de-lentreprise"
},
{
label: "Rupture conventionnelle",
position: 3,
slug: "/themes/rupture-conventionnelle",
"label": "Rupture conventionnelle",
"position": 3,
"slug": "/themes/rupture-conventionnelle"
},
{
label: "Rupture conventionnelle individuelle",
position: 1,
slug: "/themes/rupture-conventionnelle-individuelle",
},
"label": "Rupture conventionnelle individuelle",
"position": 1,
"slug": "/themes/rupture-conventionnelle-individuelle"
}
],
date: "16/12/2019",
description:
"La rupture conventionnelle individuelle est une modalité de rupture spécifique du CDI. Elle nécessite le consentement de l’employeur et du salarié, et son homologation par l’administration. La rupture ouvre droit à une indemnité de rupture conventionnelle. Ce modèle permet d’initier la procédure de rupture par l’invitation à un premier entretien.",
filename: "demande_rdv_rupture_conventionnelle.docx",
filesize: 14535,
html: "<style>\n.courrier-expediteur {display: flex; align-items: flex-start; flex-direction:column;}\n.courrier-destinataire {display: flex; align-items: flex-end; flex-direction:column;}\n.courrier-signature {display: flex; flex-direction:column; align-items: flex-end;}\n.title-center {display: flex; align-items: center; flex-direction:column; font-size: 1.8rem; font-weight:bold}\n.center {display: flex; align-items: center; flex-direction:column; }\n.checklist { list-style-image: url(data:image/svg+xml;,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%221rem%22%20height%3D%221rem%22%20viewBox%3D%220%200%2011%2011%22%3E%3Cpath%20fill%3D%22currentColor%22%20d%3D%22M2%202h10v10H2z%22%2F%3E%3Cpath%20fill%3D%22%23fff%22%20stroke%3D%22currentColor%22%20stroke-width%3D%22.5%22%20d%3D%22M1%201h9v9H1z%22%2F%3E%3C%2Fsvg%3E);}\n.editable {color: #4d73b8}\n</style><div class=\"courrier-expediteur\"><p><span class='editable'>« Prénom Nom du salarié »</span></p><p><span class='editable'>« Adresse »</span></p><p><span class='editable'>« Code postal + Ville »</span></p><p><span class='editable'>« Tél : 00.00.00.00.00 »</span></p><p><span class='editable'>« E-mail : …………@... »</span></p></div><div class=\"courrier-destinataire\"><p><span class='editable'>« Société »</span></p><p><span class='editable'>« Prénom Nom du représentant »</span></p><p><span class='editable'>« Fonction (DRH, etc.) »</span></p><p><span class='editable'>« Adresse »</span></p><p><span class='editable'>« Code postal + Ville »</span></p><p>A<a id=\"__DdeLink__1875_1685986494\"></a> <span class='editable'>« lieu »</span>, le <span class='editable'>« date »</span></p></div><div class=\"courrier-expediteur\"><p>Objet : Demande de rendez-vous en vue d’une éventuelle rupture conventionnelle</p></div><p><span class='editable'>« Madame / Monsieur »</span>,</p><p>Je sollicite un entretien afin de vous proposer que nous convenions ensemble, si vous en êtes d’accord, de la rupture de mon contrat de travail dans le cadre légal de la rupture conventionnelle. </p><p>A cette occasion, je vous présenterai les raisons de ma démarche et nous pourrons déterminer d’un commun accord les modalités de la rupture de mon contrat de travail.</p><p>Seriez-vous disponible pour un rendez-vous ce mois-ci, à la date qui vous convient ? </p><p>Vous pouvez me joindre aux coordonnées présentées ci-dessus.</p><p>Veuillez agréer, <span class='editable'>« Madame / Monsieur »</span>, l’expression de ma considération distinguée.</p><div class=\"courrier-destinataire\"><p><span class='editable'>« Prénom Nom du salarié »</span></p><p><span class='editable'>« Signature »</span></p></div>",
metaDescription:
"La rupture conventionnelle individuelle est une modalité de rupture spécifique du CDI. Elle nécessite le consentement de l’employeur et du salarié, et son homologation par l’administration. La rupture ouvre droit à une indemnité de rupture conventionnelle. Ce modèle permet d’initier la procédure de rupture par l’invitation à un premier entretien.",
title: "Demande de rendez-vous en vue d’une rupture conventionnelle",
"date": "16/12/2019",
"description": "La rupture conventionnelle individuelle est une modalité de rupture spécifique du CDI. Elle nécessite le consentement de l’employeur et du salarié, et son homologation par l’administration. La rupture ouvre droit à une indemnité de rupture conventionnelle. Ce modèle permet d’initier la procédure de rupture par l’invitation à un premier entretien.",
"filename": "demande_rdv_rupture_conventionnelle.docx",
"filesize": 14.54,
"extension": "docx",
"html": "<style>\n.courrier-expediteur {display: flex; align-items: flex-start; flex-direction:column;}\n.courrier-destinataire {display: flex; align-items: flex-end; flex-direction:column;}\n.courrier-signature {display: flex; flex-direction:column; align-items: flex-end;}\n.title-center {display: flex; align-items: center; flex-direction:column; font-size: 1.8rem; font-weight:bold}\n.center {display: flex; align-items: center; flex-direction:column; }\n.checklist { list-style-image: url(data:image/svg+xml;,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%221rem%22%20height%3D%221rem%22%20viewBox%3D%220%200%2011%2011%22%3E%3Cpath%20fill%3D%22currentColor%22%20d%3D%22M2%202h10v10H2z%22%2F%3E%3Cpath%20fill%3D%22%23fff%22%20stroke%3D%22currentColor%22%20stroke-width%3D%22.5%22%20d%3D%22M1%201h9v9H1z%22%2F%3E%3C%2Fsvg%3E);}\n.editable {color: #4d73b8}\n</style><div class=\"courrier-expediteur\"><p><span class='editable'>« Prénom Nom du salarié »</span></p><p><span class='editable'>« Adresse »</span></p><p><span class='editable'>« Code postal + Ville »</span></p><p><span class='editable'>« Tél : 00.00.00.00.00 »</span></p><p><span class='editable'>« E-mail : …………@... »</span></p></div><div class=\"courrier-destinataire\"><p><span class='editable'>« Société »</span></p><p><span class='editable'>« Prénom Nom du représentant »</span></p><p><span class='editable'>« Fonction (DRH, etc.) »</span></p><p><span class='editable'>« Adresse »</span></p><p><span class='editable'>« Code postal + Ville »</span></p><p>A<a id=\"__DdeLink__1875_1685986494\"></a> <span class='editable'>« lieu »</span>, le <span class='editable'>« date »</span></p></div><div class=\"courrier-expediteur\"><p>Objet : Demande de rendez-vous en vue d’une éventuelle rupture conventionnelle</p></div><p><span class='editable'>« Madame / Monsieur »</span>,</p><p>Je sollicite un entretien afin de vous proposer que nous convenions ensemble, si vous en êtes d’accord, de la rupture de mon contrat de travail dans le cadre légal de la rupture conventionnelle. </p><p>A cette occasion, je vous présenterai les raisons de ma démarche et nous pourrons déterminer d’un commun accord les modalités de la rupture de mon contrat de travail.</p><p>Seriez-vous disponible pour un rendez-vous ce mois-ci, à la date qui vous convient ? </p><p>Vous pouvez me joindre aux coordonnées présentées ci-dessus.</p><p>Veuillez agréer, <span class='editable'>« Madame / Monsieur »</span>, l’expression de ma considération distinguée.</p><div class=\"courrier-destinataire\"><p><span class='editable'>« Prénom Nom du salarié »</span></p><p><span class='editable'>« Signature »</span></p></div>",
"metaDescription": "La rupture conventionnelle individuelle est une modalité de rupture spécifique du CDI. Elle nécessite le consentement de l’employeur et du salarié, et son homologation par l’administration. La rupture ouvre droit à une indemnité de rupture conventionnelle. Ce modèle permet d’initier la procédure de rupture par l’invitation à un premier entretien.",
"title": "Demande de rendez-vous en vue d’une rupture conventionnelle"
});
});

Expand All @@ -64,9 +63,7 @@ describe("Modèles de courrier", () => {

it("Récupération d'un modèle de courrier avec son id", async () => {
const result = await fetchModel({ _id: "15" });
expect(result?.title).toEqual(
"Demande de rendez-vous en vue d’une rupture conventionnelle"
);
expect(result?.title).toEqual("Demande de rendez-vous en vue d’une rupture conventionnelle");
expect(result?._id).toEqual("15");
});
});
Original file line number Diff line number Diff line change
Expand Up @@ -4,15 +4,14 @@ import { toUrl } from "../../../lib";
export const DownloadTile = ({
filename,
filesize,
extension,
title,
}: {
filename: string;
filesize: number;
extension: string;
title: string;
}) => {
const filesizeFormated = Math.round((filesize / 1000) * 100) / 100;
const [, extension] = filename.split(/\.([a-z]{2,4})$/);

return (
<Tile
downloadButton
Expand All @@ -21,7 +20,7 @@ export const DownloadTile = ({
imageUrl={`/static/assets/img/modeles-de-courriers-download.svg`}
title={`Télécharger le ${title}`}
titleAs="h2"
detail={`Format ${extension} - ${filesizeFormated}Ko`}
detail={`${extension} - ${filesize}Ko`}
linkProps={{
href: toUrl(filename),
}}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,59 +7,68 @@ import { getDisclaimer } from "../helpers";
import { Alert } from "@codegouvfr/react-dsfr/Alert";
import { DownloadTile } from "./DownloadTile";
import { CopyButton } from "./CopyButton";
import "../../../../public/static/modeles.css";
import { MailElasticDocument } from "@socialgouv/cdtn-types";

export interface LetterModelProps {
date: string;
intro: string;
title: string;
filesize: any;
filename: string;
slug: string;
html: any;
}
export type LetterModelContentProps = Pick<
MailElasticDocument,
"date" | "intro" | "title" | "filesize" | "filename" | "html" | "slug"
> & {
extension: string;
};

export const LetterModelContent = ({
filename,
filesize,
extension,
html,
slug,
title,
intro,
date,
}: LetterModelProps) => {
}: LetterModelContentProps) => {
return (
<>
<p className={fr.cx("fr-mb-6w")}>Mis à jour le&nbsp;: {date}</p>
<p className={fr.cx("fr-mb-6w")}>Mise à jour le&nbsp;: {date}</p>
{intro && (
<div className={`${fr.cx("fr-highlight", "fr-mb-6w")}`}>
<Html>{intro}</Html>
</div>
)}
<div className={fr.cx("fr-hidden-md")}>
<div className={fr.cx("fr-mb-6w")}>
<DownloadTile filename={filename} filesize={filesize} title={title} />
<DownloadTile
filename={filename}
filesize={filesize}
extension={extension}
title={title}
></DownloadTile>
</div>
<CopyButton slug={slug} />
</div>
<div
className={`${fr.cx("fr-p-2w", "fr-pt-4w", "fr-mb-6w")} ${border}`}
className={`${fr.cx("fr-p-2w")} ${fr.cx("fr-mb-6w")} ${border}`}
id="content-to-copy"
>
<Html>{html}</Html>
</div>
<Alert
className={fr.cx("fr-mb-6w")}
description={getDisclaimer(slug)}
closable={false}
severity="info"
small
/>
<div className={button}>
<CopyButton slug={slug} />
<div className={fr.cx("fr-col-12", "fr-col-md-10")}>
<Alert
className={fr.cx("fr-mb-6w")}
description={getDisclaimer(slug)}
closable={false}
severity="info"
small
/>
</div>

<CopyButton slug={slug} />
<div className={fr.cx("fr-mb-6w")}>
<DownloadTile filename={filename} filesize={filesize} title={title} />
<DownloadTile
filename={filename}
filesize={filesize}
extension={extension}
title={title}
></DownloadTile>
</div>
</>
);
Expand All @@ -70,9 +79,3 @@ const border = css({
borderRadius: "8px",
borderColor: "var(--artwork-minor-blue-cumulus)",
});

const button = css({
"& > button": {
md: { w: "auto!" },
},
});
Loading

0 comments on commit e19a58e

Please sign in to comment.