diff --git a/app/[legislature]/dossier/[id]/[tab]/page.tsx b/app/[legislature]/dossier/[id]/[tab]/page.tsx index 387bb46..011b203 100644 --- a/app/[legislature]/dossier/[id]/[tab]/page.tsx +++ b/app/[legislature]/dossier/[id]/[tab]/page.tsx @@ -1,6 +1,7 @@ import React from "react"; import { PreviewTab } from "@/components/folders/PreviewTab"; +import { AmendementTab } from "@/components/folders/AmendementTab"; import { DebateTab } from "@/components/folders/DebateTab"; import { getDossier } from "@/repository/database"; @@ -26,7 +27,7 @@ export default async function Page({ return ; case "amendement": - return

Amendements

; + return ; case "votes": return

Votes

; diff --git a/components/folders/AmendementTab/AmendementCard.tsx b/components/folders/AmendementTab/AmendementCard.tsx new file mode 100644 index 0000000..1ee419b --- /dev/null +++ b/components/folders/AmendementTab/AmendementCard.tsx @@ -0,0 +1,87 @@ +"use client"; +import * as React from "react"; + +import { Amendement } from "@/repository/types"; +import { Box } from "@mui/material"; +import Stack from "@mui/material/Stack"; + +export default function AmendementCard(props: Amendement) { + const { + dateDepot, + dateSort, + sortAmendement, + etatCode, + etatLibelle, + sousEtatCode, + sousEtatLibelle, + dispositif, + exposeSommaire, + urlDivisionTexteVise, + signatairesLibelle, + ...other + } = props; + + const [showMore, setShowMore] = React.useState(false); + return ( + + + Depte + {sortAmendement || etatLibelle} + + ul": { + flex: "4 0 0", + }, + "&>p": { + flex: "8 0 0", + }, + }} + > +
    +
  • + Date de dépôt:{" "} + + {dateDepot.toLocaleDateString("fr-FR", { + year: "numeric", + month: "long", + day: "numeric", + })} + +
  • +
  • + Date d'examen:{" "} + + {dateDepot.toLocaleDateString("fr-FR", { + year: "numeric", + month: "long", + day: "numeric", + })} + +
  • +
  • + Déposé par: +
  • +
  • + Examiné par: +
  • +
  • + Etat: +
  • +
+

+ + + {showMore && ( +

+          {JSON.stringify(props, null, 2)}
+        
+ )} + +
+ ); +} diff --git a/components/folders/AmendementTab/index.tsx b/components/folders/AmendementTab/index.tsx new file mode 100644 index 0000000..22a1f8e --- /dev/null +++ b/components/folders/AmendementTab/index.tsx @@ -0,0 +1,52 @@ +"use client"; + +import React from "react"; + +import Container from "@mui/material/Container"; +import Stack from "@mui/material/Stack"; + +import { DossierData } from "@/repository/database"; +import AmendementCard from "./AmendementCard"; +import { Divider } from "@mui/material"; + +type AmendementTabProps = { + dossier?: DossierData; +}; + +export const AmendementTab = ({ dossier }: AmendementTabProps) => { + const { + commissionFondId, + commissionAvisId, + organes = {}, + rapporteursFondIds, + coSignatairesIds, + acteurs = {}, + acts = [], + documents = [], + amendementCount = {}, + amendements = [], + } = dossier ?? {}; + + return ( + + + {amendements.slice(0, 10).map((amendement) => ( + + + + + ))} + + + ); +}; diff --git a/components/folders/CardLayout.tsx b/components/folders/CardLayout.tsx index 56b9238..1291c88 100644 --- a/components/folders/CardLayout.tsx +++ b/components/folders/CardLayout.tsx @@ -3,7 +3,7 @@ import * as React from "react"; import Card from "@mui/material/Card"; import CardContent from "@mui/material/CardContent"; -import { CardHeader, CardHeaderProps, Theme, useTheme } from "@mui/material"; +import { CardHeader, CardHeaderProps } from "@mui/material"; export interface CardLayoutProps extends Pick { diff --git a/repository/database.ts b/repository/database.ts index ca494bf..2b58b66 100644 --- a/repository/database.ts +++ b/repository/database.ts @@ -7,6 +7,7 @@ import { Organe, Acteur, Document as DocumentData, + Amendement, } from "./types"; /** @@ -14,14 +15,14 @@ import { * https://dev.to/noclat/fixing-too-many-connections-errors-with-database-clients-stacking-in-dev-mode-with-next-js-3kpm */ function registerService(name: string, initFn: () => T): T { - if (process.env.NODE_ENV === 'development') { + if (process.env.NODE_ENV === "development") { if (!(name in global)) { (global as any)[name] = initFn(); } return (global as any)[name]; } return initFn(); -}; +} const db = registerService("database", () => knex(config.development)); @@ -81,6 +82,7 @@ export type DossierData = { * Map les document id avec leur nombre d'amendement. */ amendementCount: Record; + amendements: Amendement[]; acts: ActeLegislatif[]; documents: Record; organes: Record; @@ -208,6 +210,11 @@ export async function getDossier( amendementCount[texteLegislatifRefUid] = count; }); + const amendements = await db + .select("*") + .from("Amendement") + .whereIn("texteLegislatifRefUid", Array.from(documentsIds)); + return { dossier, commissionFondId, @@ -219,6 +226,7 @@ export async function getDossier( organes, acteurs, amendementCount, + amendements, }; } catch (error) { console.error("Error fetching rows from Dossier:", error);