Skip to content

Commit

Permalink
Correction des types sur la page SaisieEspèces (#79)
Browse files Browse the repository at this point in the history
* Création de 3 fieldset spécifiques en fonction de la classification

* Changer le type de descriptionMenacesEspèces

* Déplace les commentaires sur les fourchettes dindividus

* Extrait trois tableaux séparés pour chaque classification

* Répare la fonction etreVivantAtteintToJSON

* Modifie la fonction descriptionMenacesEspècesToJSON

* Fixe les rerenderings et le copier-coller

* Déplace les types NomGroupeEspèces, EspèceSimplifiée et GroupesEspèces

* Fix des imports de types

* Ajoute la gestion de toSorted par Typescript

* Ajoute des ts-expect-error

* Rerender à la suppression dune ligne

* Ajoute une option vide pour le nb dindividus

* ajout tests manuels saisie espèces

* Fix les typeguards

* Mise a jour du tsconfig

* Change le type de DescriptionMenacesEspèces

* Retire le type DescriptionMenacesEspècesJSON

* Import StringValues de types.js

* Retire composants qui nont rien a faire dans cette PR

---------

Co-authored-by: David Bruant <[email protected]>
  • Loading branch information
Ynote and DavidBruant committed Sep 16, 2024
1 parent d0ad3eb commit da5bb33
Show file tree
Hide file tree
Showing 15 changed files with 1,146 additions and 564 deletions.
7 changes: 7 additions & 0 deletions outils/groupes-espèces.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,13 @@ import {espèceProtégéeStringToEspèceProtégée} from '../scripts/commun/outi

import '../scripts/types.js'

/** @import {
* EspèceProtégée,
* EspèceProtégéeStrings,
* EspèceSimplifiée,
* GroupesEspèces
* } from '../scripts/types/especes.d.ts' */

/**
* Cet outil prend le fichier data/ListeGroupesEspeces.ods et en fait un fichier json plus léger
* qui contient les groupes d'espèces pour usage dans
Expand Down
112 changes: 67 additions & 45 deletions scripts/commun/outils-espèces.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,24 @@
//@ts-check

/** @import {ClassificationEtreVivant, EspèceProtégée, DescriptionMenaceEspèce, EtreVivantAtteint, TAXREF_ROW, EspèceProtégéeStrings, OiseauAtteintJSON, EtreVivantAtteintJSON, DescriptionMenaceEspècesJSON, ActivitéMenançante, MéthodeMenançante, TransportMenançant} from "../types.js" */
import { isOiseauAtteint, isFauneNonOiseauAtteinte, isFloreAtteinte } from '../types/typeguards.js'

/** @import {
* ClassificationEtreVivant,
* EspèceProtégée,
* EspèceProtégéeStrings,
* TAXREF_ROW,
* OiseauAtteint,
* FloreAtteinte,
* FauneNonOiseauAtteinte,
* OiseauAtteintJSON,
* FloreAtteinteJSON,
* FauneNonOiseauAtteinteJSON,
* DescriptionMenacesEspèces,
* DescriptionMenaceEspèceJSON,
* ActivitéMenançante,
* MéthodeMenançante,
* TransportMenançant,
* } from "../types/especes.d.ts" */


/** @type {Set<'oiseau' | 'faune non-oiseau' | 'flore'>} */
Expand Down Expand Up @@ -72,72 +90,75 @@ export function espèceProtégéeStringToEspèceProtégée({CD_REF, CD_TYPE_STAT


/**
* @typedef {EtreVivantAtteint & {nombreNids?: number, nombreOeufs?: number }} EtreVivantOuOiseauAtteint
*
* @param { EtreVivantOuOiseauAtteint } EtreVivantOuOiseauAtteint
* @returns { OiseauAtteintJSON | EtreVivantAtteintJSON }
* @param { OiseauAtteint|FauneNonOiseauAtteinte|FloreAtteinte} etreVivantAtteint
* @returns { OiseauAtteintJSON|FauneNonOiseauAtteinteJSON|FloreAtteinteJSON }
*/
function etreVivantAtteintToJSON(EtreVivantOuOiseauAtteint){
const {
espèce,
activité, méthode, transport,
nombreIndividus, nombreNids, nombreOeufs, surfaceHabitatDétruit
} = EtreVivantOuOiseauAtteint

if(nombreNids || nombreOeufs){
return {
espèce: espèce['CD_REF'],
activité: activité && activité.Code,
méthode: méthode && méthode.Code,
transport: transport && transport.Code,
nombreIndividus,
nombreNids,
nombreOeufs,
surfaceHabitatDétruit
}
function etreVivantAtteintToJSON(etreVivantAtteint){
const etreVivantAtteintJSON = {
espèce: etreVivantAtteint.espèce['CD_REF'],
activité: etreVivantAtteint.activité && etreVivantAtteint.activité.Code,
nombreIndividus: etreVivantAtteint.nombreIndividus,
surfaceHabitatDétruit: etreVivantAtteint.surfaceHabitatDétruit,
}
else{
return {
espèce: espèce['CD_REF'],
activité: activité && activité.Code,
méthode: méthode && méthode.Code,
transport: transport && transport.Code,
nombreIndividus,
surfaceHabitatDétruit
}

if(isOiseauAtteint(etreVivantAtteint)){
return Object.assign(etreVivantAtteintJSON, {
méthode: etreVivantAtteint.méthode && etreVivantAtteint.méthode.Code,
transport: etreVivantAtteint.transport && etreVivantAtteint.transport.Code,
nombreIndividus: etreVivantAtteint.nombreIndividus,
nombreNids: etreVivantAtteint.nombreNids,
nombreOeufs: etreVivantAtteint.nombreOeufs,
})
}
else if(isFauneNonOiseauAtteinte(etreVivantAtteint)) {
return Object.assign(etreVivantAtteintJSON, {
méthode: etreVivantAtteint.méthode && etreVivantAtteint.méthode.Code,
transport: etreVivantAtteint.transport && etreVivantAtteint.transport.Code,
nombreIndividus: etreVivantAtteint.nombreIndividus,
})
}
else if(isFloreAtteinte(etreVivantAtteint)) {
return etreVivantAtteintJSON
}

throw new TypeError("etreVivantAtteint n'est ni un oiseau, ni une faune non-oiseau, ni une flore")
}

/**
*
* @param { DescriptionMenaceEspèce[] } descriptionMenacesEspèces
* @returns { DescriptionMenaceEspècesJSON }
* @param { DescriptionMenacesEspèces } descriptionMenacesEspèces
* @returns { DescriptionMenaceEspèceJSON[] }
*/
export function descriptionMenacesEspècesToJSON(descriptionMenacesEspèces){
return descriptionMenacesEspèces.map(({classification, etresVivantsAtteints}) => {
console.log(descriptionMenacesEspèces)
// @ts-ignore
return Object.keys(descriptionMenacesEspèces).map((/** @type {ClassificationEtreVivant} */ classification) => {
return {
classification,
etresVivantsAtteints: etresVivantsAtteints.map(etreVivantAtteintToJSON),
etresVivantsAtteints: descriptionMenacesEspèces[classification].map(etreVivantAtteintToJSON),

}
})
}

/**
* @param {DescriptionMenaceEspècesJSON} descriptionMenacesEspècesJSON
* @param {DescriptionMenaceEspèceJSON[]} descriptionMenacesEspècesJSON
* @param {Map<EspèceProtégée['CD_REF'], EspèceProtégée>} espèceByCD_REF
* @param {ActivitéMenançante[]} activites
* @param {MéthodeMenançante[]} methodes
* @param {TransportMenançant[]} transports
* @returns {DescriptionMenaceEspèce[]}
* @returns {DescriptionMenacesEspèces}
*/
export function descriptionMenacesEspècesFromJSON(descriptionMenacesEspècesJSON, espèceByCD_REF, activites, methodes, transports){
//@ts-ignore
return descriptionMenacesEspècesJSON.map(({classification, etresVivantsAtteints}) => {

return {
classification,
etresVivantsAtteints: etresVivantsAtteints.map(({espèce, espece, activité, méthode, transport, ...rest}) => {
/** @type {DescriptionMenacesEspèces} */
const descriptionMenacesEspèces = Object.create(null)

descriptionMenacesEspècesJSON.forEach(({classification, etresVivantsAtteints}) => {
//@ts-ignore
descriptionMenacesEspèces[classification] =
//@ts-ignore
etresVivantsAtteints.map(({espèce, espece, activité, méthode, transport, ...rest}) => {
//@ts-expect-error TS ne comprend pas que si `espèce` n'est pas
// renseigné alors `espece` l'est forcément
const espèceParamDéprécié = espèceByCD_REF.get(espece)
Expand All @@ -149,7 +170,8 @@ export function descriptionMenacesEspècesFromJSON(descriptionMenacesEspècesJSO
transport: transports.find((t) => t.Espèces === classification && t.Code === transport),
...rest
}
}),
}
})
})

return descriptionMenacesEspèces
}
2 changes: 1 addition & 1 deletion scripts/front-end/components/AutocompleteEspèces.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
//@ts-check
import AutoComplete from "simple-svelte-autocomplete"
/** @import {EspèceProtégée} from '../../types.js' */
/** @import {EspèceProtégée} from '../../types/especes.d.ts' */
/** @type {EspèceProtégée[]} */
export let espèces;
Expand Down
2 changes: 1 addition & 1 deletion scripts/front-end/components/NomEspèce.svelte
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<script>
//@ts-check
/** @import {EspèceProtégée} from '../../types.js' */
/** @import {EspèceProtégée} from '../../types/especes.d.ts' */
/** @type {EspèceProtégée} */
export let espèce
Expand Down
Loading

0 comments on commit da5bb33

Please sign in to comment.