model.re 2.89 KB
Newer Older
1 2
open Types;

3 4 5 6 7
external asJsObject : 'a => Js.t({..}) = "%identity";

[@bs.module]
external shallowEqual : (Js.t({..}), Js.t({..})) => bool = "shallowequal";

8 9 10 11 12 13 14
module Groupe = {
  type t = option(groupe);
  let compare = (groupe1: t, groupe2: t) =>
    switch (groupe1, groupe2) {
    | (None, None) => 0
    | (None, Some(_groupe2)) => 1
    | (Some(_groupe1), None) => (-1)
15 16
    | (Some(groupe1), Some(groupe2)) =>
      Pervasives.compare(groupe1, groupe2)
17 18 19 20 21
    };
};

module GroupesSet = Set.Make(Groupe);

22
let assembleeDiscussionUrlPath =
23 24 25 26
    (
      ~bibard: string,
      ~bibardSuffixe: string,
      ~legislature: int,
27
      ~organe: string,
28 29
    )
    : string =>
30
  "/assemblee/discussions/"
31
  ++ string_of_int(legislature)
32
  ++ "/"
Emmanuel Raviart's avatar
Emmanuel Raviart committed
33 34
  ++ organe
  ++ "/"
35
  ++ bibard
36
  ++ "/"
37
  ++ bibardSuffixe;
38

39
let groupeTitleFromAuteurGroupe = (auteur: auteur, groupe: option(groupe)) =>
40
  switch (groupe) {
41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
  | None => "" /* Gouvernement... */
  | Some(GaucheDemocrateEtRepublicaine) => {js|Groupe de la Gauche démocrate et républicaine|js}
  | Some(LaFranceInsoumise) => {js|Groupe La France insoumise|js}
  | Some(LaRepubliqueEnMarche) => {js|Groupe La République en Marche|js}
  | Some(LesRepublicains) => {js|Groupe Les Républicains|js}
  | Some(MouvementDemocrateEtApparentes) => {js|Groupe du Mouvement Démocrate et apparentés|js}
  | Some(NonInscrits) =>
    if (auteur.civilite === "Mme") {
      {js|Non inscrite|js};
    } else {
      {js|Non inscrit|js};
    }
  | Some(NouvelleGauche) => {js|Groupe Nouvelle Gauche|js}
  | Some(UdiAgirEtIndependants) => {js|Groupe UDI, Agir et Indépendants|js}
  };

57 58 59 60 61
let senatDiscussionUrlPath =
    (~num: string, ~sesinsLil: string, ~txttyp: string)
    : string =>
  "/senat/discussions/" ++ txttyp ++ "/" ++ sesinsLil ++ "/" ++ num;

62
let shortTitleFromGroupe = (groupe: option(groupe)) =>
63
  switch (groupe) {
64 65 66 67 68 69 70 71 72 73 74
  | None => "~~~" /* Gouvernement... */
  | Some(GaucheDemocrateEtRepublicaine) => {js|Gauche démocrate et républicaine|js}
  | Some(LaFranceInsoumise) => {js|La France insoumise|js}
  | Some(LaRepubliqueEnMarche) => {js|La République en Marche|js}
  | Some(LesRepublicains) => {js|Les Républicains|js}
  | Some(MouvementDemocrateEtApparentes) => {js|Mouvement Démocrate et apparentés|js}
  | Some(NonInscrits) => {js|Non inscrits|js}
  | Some(NouvelleGauche) => {js|Nouvelle Gauche|js}
  | Some(UdiAgirEtIndependants) => {js|UDI, Agir et Indépendants|js}
  };

75 76
let ste = ReasonReact.stringToElement;

77 78
let urlPathFromAssembleeDiscussion = (discussion: discussion) : string =>
  assembleeDiscussionUrlPath(
79 80 81
    ~bibard=discussion.bibard,
    ~bibardSuffixe=discussion.bibardSuffixe,
    ~legislature=discussion.legislature,
82 83 84 85 86 87 88
    ~organe=discussion.organe,
  );

let urlPathFromSenatDiscussion = (txt: ameliTxt) : string =>
  switch (txt.sesins) {
  | None => "TODO"
  | Some(sesins) =>
Emmanuel Raviart's avatar
Emmanuel Raviart committed
89 90 91 92 93
    senatDiscussionUrlPath(
      ~num=txt.num,
      ~sesinsLil=sesins.lil,
      ~txttyp=txt.txttyp,
    )
94
  };