Skip to content

Commit

Permalink
Prisma fixes (#56)
Browse files Browse the repository at this point in the history
  • Loading branch information
alexfauquette authored Sep 6, 2024
1 parent 4afeff4 commit 17ceafb
Show file tree
Hide file tree
Showing 19 changed files with 472 additions and 377 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ export const DebateSummary = (props: DebateSummaryProps) => {
const { sections, wordsCounts } = props;
const theme = useTheme();

const [activeState, setActiveState] = React.useState<string | null>(null);
const [activeState, setActiveState] = React.useState<number | null>(null);
const clickedRef = React.useRef(false);
const unsetClickedRef = React.useRef<any>(null);
const findActiveIndex = React.useCallback(() => {
Expand All @@ -81,14 +81,14 @@ export const DebateSummary = (props: DebateSummaryProps) => {

let active;
for (let i = sections.length - 1; i >= 0; i -= 1) {
// No hash if we're near the top of the page
// No id if we're near the top of the page
if (document.documentElement.scrollTop < 200) {
active = { hash: null };
active = { id: null };
break;
}

const item = sections[i];
const node = document.getElementById(item.hash);
const node = document.getElementById(item.id.toString());

if (process.env.NODE_ENV !== "production") {
if (!node) {
Expand All @@ -109,16 +109,16 @@ export const DebateSummary = (props: DebateSummaryProps) => {
}
}

if (active && activeState !== active.hash) {
setActiveState(active.hash);
if (active && activeState !== active.id) {
setActiveState(active.id);
}
}, [activeState, sections]);

// Corresponds to 10 frames at 60 Hz
useThrottledOnScroll(sections.length > 0 ? findActiveIndex : null, 166);

const handleClick =
(hash: string) => (event: React.MouseEvent<HTMLElement>) => {
(id: number) => (event: React.MouseEvent<HTMLElement>) => {
// Ignore click events meant for native link handling, for example open in new tab
if (samePageLinkNavigation(event)) {
return;
Expand All @@ -130,8 +130,8 @@ export const DebateSummary = (props: DebateSummaryProps) => {
clickedRef.current = false;
}, 1000);

if (activeState !== hash) {
setActiveState(hash);
if (activeState !== id) {
setActiveState(id);
}
};

Expand Down Expand Up @@ -162,10 +162,10 @@ export const DebateSummary = (props: DebateSummaryProps) => {
</AccordionSummary>
<AccordionDetails>
<Stack direction="column" spacing={2} pb={3}>
{sections.map(({ hash, texte }, index) =>
activeState === hash || (activeState === null && index === 0) ? (
{sections.map(({ id, texte }, index) =>
activeState === id || (activeState === null && index === 0) ? (
<Box
key={hash}
key={id}
sx={{
backgroundColor: theme.palette.grey[900],
p: 1,
Expand All @@ -175,7 +175,7 @@ export const DebateSummary = (props: DebateSummaryProps) => {
<Typography
color="white"
component="a"
href={`#${hash}`}
href={`#${id}`}
dangerouslySetInnerHTML={{ __html: cleanText(texte!) }}
/>
<Stack direction="row" alignItems="center" spacing={0.5}>
Expand All @@ -185,19 +185,19 @@ export const DebateSummary = (props: DebateSummaryProps) => {
variant="caption"
fontWeight="light"
>
{getDuration(wordsCounts[hash]) ?? "?"} minute
{getDuration(wordsCounts[hash]) === 1 ? "" : "s"}
{getDuration(wordsCounts[id]) ?? "?"} minute
{getDuration(wordsCounts[id]) === 1 ? "" : "s"}
</Typography>
</Stack>
</Box>
) : (
<Typography
key={hash}
key={id}
component="a"
href={`#${hash}`}
href={`#${id}`}
dangerouslySetInnerHTML={{ __html: cleanText(texte!) }}
variant="body2"
onClick={handleClick(hash)}
onClick={handleClick(id)}
/>
)
)}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,13 +21,13 @@ export const DebateTimeline = ({ paragraphs }: DebateTimelineProps) => (
},
}}
>
{paragraphs.map(({ hash, codeGrammaire, acteurRef, roleDebat, texte }) => {
{paragraphs.map(({ id, codeGrammaire, acteurRef, roleDebat, texte }) => {
switch (codeGrammaire) {
case "PAROLE_GENERIQUE":
case "INTERRUPTION_1_10":
return (
<ParoleItem
key={hash}
key={id}
acteur={acteurRef}
roleDebat={roleDebat}
texte={texte}
Expand All @@ -38,7 +38,7 @@ export const DebateTimeline = ({ paragraphs }: DebateTimelineProps) => (
case "DISC_GENERALE_1":
case "MOTION_RP_1_1":
case "DISC_ARTICLES_2_4":
return <SectionItem id={hash} title={texte} />;
return <SectionItem id={id.toString()} title={texte} />;

case "TITRE_TEXTE_DISCUSSION":
return (
Expand Down Expand Up @@ -76,7 +76,7 @@ export const DebateTimeline = ({ paragraphs }: DebateTimelineProps) => (
) : null;
// return (
// <div
// key={hash}
// key={id}
// onClick={() => {
// console.log(other);
// }}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -67,22 +67,22 @@ export default async function Page({ params }: any) {
return <p>Aucun debat trouvé pour cette seance.</p>;
}

let lastHash = "init";
let lastId = 'init';

const wordsCounts: Record<string, number> = paragraphes.reduce(
(acc, paragraphe) => {
const { codeGrammaire, texte } = paragraphe;

if (SUMMARY_CODES.includes(codeGrammaire!)) {
lastHash = paragraphe.hash;
return { ...acc, [lastHash]: 0 };
lastId = paragraphe.id.toString();
return { ...acc, [lastId]: 0 };
}

if (["PAROLE_GENERIQUE", "INTERRUPTION_1_10"].includes(codeGrammaire!)) {
const texteLength = texte ? texte.split(" ").length : 0;
return {
...acc,
[lastHash]: acc[lastHash] + texteLength,
[lastId]: acc[lastId] + texteLength,
};
}
return acc;
Expand Down
2 changes: 1 addition & 1 deletion app/[legislature]/dossier/[id]/debat/layout.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ async function getReunionsUnCached(uid: string) {
const pointIndex =
1 +
(act.agendaRef.pointsOdj.findIndex(
(pt) => pt.uid === act.odjRefUid
(pt) => pt.uid === act.pointOdjUid
) ?? -1);

const {
Expand Down
2 changes: 1 addition & 1 deletion app/depute/[slug]/travaux/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -150,7 +150,7 @@ export default async function Amendements({
<ul>
{dossiers.map((dossier) => (
<li
key={dossier.slug}
key={dossier.id}
style={{
display: "flex",
width: "100%",
Expand Down
1 change: 0 additions & 1 deletion app/deputes/DeputesView.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -223,7 +223,6 @@ export default function DeputesView({
group={groups[key]}
nbDeputes={filteredDeputes.length}
/>
<p>{key}</p>
<AccordionDetails>
<Deputes deputes={filteredDeputes} grouping={grouping} />
</AccordionDetails>
Expand Down
56 changes: 30 additions & 26 deletions prisma/models/acteur.prisma
Original file line number Diff line number Diff line change
@@ -1,45 +1,46 @@
/// Personne physique ayant été élue ou nommée dans un organe.
model Acteur {
/// Identifiant unique.
uid String @id
/// Hachage de l'objet.
hash String @unique
uid String @id
/// Jeu de données de provenance (numéro de législature)
dataset Int
/// Prénom.
prenom String
prenom String
/// Nom.
nom String
nom String
/// Civilité.
civ String
civ String
/// Date de naissance.
dateNais DateTime?
dateNais DateTime?
/// Date de décès.
dateDeces DateTime?
dateDeces DateTime?
/// Ville de naissance.
villeNais String?
villeNais String?
/// Département de naissance.
depNais String?
depNais String?
/// Pays de naissance.
paysNais String?
paysNais String?
/// Profession.
profession String?
profession String?
/// Catégorie socio professionelle de l'INSEE.
catSocPro String?
catSocPro String?
/// Famille socio professionelle de l'INSEE.
famSocPro String?
slug String
famSocPro String?
slug String
/// URL de la déclaration d'intérêt de l'acteur sur le site de la Haute Autorité pour la Transparence dans la Vie Publique.
uriHatvp String?
uriHatvp String?
/// Deputé en poste actuellement.
actif Boolean? @default(false)
actif Boolean? @default(false)
/// Groupe parlementaire du député.
groupeParlementaireUid String?
groupeParlementaireUid String?
/// Mandat principal du député, c'est à dire s'il est actif ou non.
mandatPrincipalUid String? @unique
mandatPrincipalUid String? @unique
/// Organe de circonscription
circonscriptionUid String?
circonscriptionUid String?
/// Chambre du parlementaire (assemblée ou sénat)
chambre String?
compteTwitter String?
chambre String?
compteTwitter String?
groupeParlementaire Organe? @relation("Acteur_GroupeParlementaire", fields: [groupeParlementaireUid], references: [uid])
mandatPrincipal Mandat? @relation("Acteur_MandatPrincipal", fields: [mandatPrincipalUid], references: [uid])
circonscription Organe? @relation("Acteur_Circonscription", fields: [circonscriptionUid], references: [uid])
Expand Down Expand Up @@ -74,6 +75,7 @@ model Acteur {
/// Lois signées par cet acteur.
loisSignees TexteLoi[] @relation("loisSignees")
@@index([dataset])
@@index([vecteurRecherche], type: Gin)
@@index([actif])
@@index([groupeParlementaireUid])
Expand All @@ -85,8 +87,8 @@ model Acteur {
model AdresseElectronique {
/// Identifiant unique.
uid String @id
/// Hachage de l'objet
hash String @unique
/// Jeu de données de provenance (numéro de législature)
dataset Int
type String
typeLibelle String
poids String?
Expand All @@ -96,14 +98,15 @@ model AdresseElectronique {
acteurRefUid String
acteurRef Acteur @relation(fields: [acteurRefUid], references: [uid], onDelete: Cascade)
@@index([dataset])
@@index([acteurRefUid])
}

model AdressePostale {
/// Identifiant unique.
uid String @id
/// Hachage de l'objet
hash String @unique
/// Jeu de données de provenance (numéro de législature)
dataset Int
type String
typeLibelle String
poids String?
Expand All @@ -117,5 +120,6 @@ model AdressePostale {
acteurRefUid String
acteurRef Acteur @relation(fields: [acteurRefUid], references: [uid], onDelete: Cascade)
@@index([dataset])
@@index([acteurRefUid])
}
25 changes: 15 additions & 10 deletions prisma/models/agenda.prisma
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@
model Agenda {
/// Identifiant unique.
uid String @id
/// Hachage de l'objet
hash String @unique
/// Jeu de données de provenance (numéro de législature)
dataset Int
/// Type de la réunion
xsiType String?
/// Date et heure du début de la réunion.
Expand Down Expand Up @@ -70,6 +70,7 @@ model Agenda {
amendements Amendement[]
debats Debat[]
@@index([dataset])
@@index([vecteurRecherche], type: Gin)
@@index([organeDemandeurRefUid])
@@index([organeReunionRefUid])
Expand All @@ -79,8 +80,8 @@ model Agenda {
model PointOdj {
/// Identifiant unique.
uid String @id
/// Hachage de l'objet
hash String @unique
/// Jeu de données de provenance (numéro de législature)
dataset Int
/// Identifiant unique de la réunion associée.
agendaRefUid String?
/// Le contenu de ce champ n'est pas défini.
Expand Down Expand Up @@ -110,30 +111,32 @@ model PointOdj {
dossierLegislatif Dossier? @relation(fields: [dossierLegislatifUid], references: [uid])
agendaRef Agenda? @relation(fields: [agendaRefUid], references: [uid], onDelete: Cascade)
@@index([dataset])
@@index([agendaRefUid])
}

model ActeurDemandeur {
/// Clé primaire.
id Int @id @default(autoincrement())
/// Identifiant unique.
slug String @unique
/// Jeu de données de provenance (numéro de législature)
dataset Int
/// Acteur référent.
acteurRefUid String
/// Agenda référent.
agendaRefUid String
acteurRef Acteur @relation(fields: [acteurRefUid], references: [uid], onDelete: Cascade)
agendaRef Agenda @relation(fields: [agendaRefUid], references: [uid], onDelete: Cascade)
@@index([dataset])
@@index([acteurRefUid])
@@index([agendaRefUid])
}

model ParticipantReunion {
/// Clé primaire.
id Int @id @default(autoincrement())
/// Identifiant unique.
slug String @unique
/// Jeu de données de provenance (numéro de législature)
dataset Int
/// La valeur est 'absent' ou 'excusé' si la personne n'a pas participé à la réunion, 'présent' sinon.
presence String?
/// Acteur référent.
Expand All @@ -143,15 +146,16 @@ model ParticipantReunion {
acteurRef Acteur? @relation(fields: [acteurRefUid], references: [uid])
agendaRef Agenda @relation(fields: [agendaRefUid], references: [uid], onDelete: Cascade)
@@index([dataset])
@@index([acteurRefUid])
@@index([agendaRefUid])
}

model PersonneAuditionneeReunion {
/// Clé primaire.
id Int @id @default(autoincrement())
/// Hachage de l'objet
hash String @unique
/// Jeu de données de provenance (numéro de législature)
dataset Int
/// Identifiant unique de l'acteur ou bien, dans le cas ou il ne s'agit pas d'un acteur, un identifiant unique de personne externe débutant par PE qui est utilisé uniquement dans ce contexte.
uid String
/// Acteur référent.
Expand All @@ -171,6 +175,7 @@ model PersonneAuditionneeReunion {
acteurRef Acteur? @relation(fields: [acteurRefUid], references: [uid], onDelete: Cascade)
agendaRef Agenda @relation(fields: [agendaRefUid], references: [uid], onDelete: Cascade)
@@index([dataset])
@@index([acteurRefUid])
@@index([agendaRefUid])
}
Loading

0 comments on commit 17ceafb

Please sign in to comment.