---
# System prepended metadata

title: Retours techniques Beeops

---

 # Retours techniques Beeops
 
 * Branche de référence : 2-create-apiary-screen
 * Date : 11 décembre 2019
 * Auteur : Corentin Chardeau

 ## Structure du projet
 
 Pour ce qui est de la structure du projet, je serais d'avis de suivre ce qui a été fait sur ce [boilerplate](https://github.com/GeekyAnts/ReactNative-Redux-TypeScript-Boilerplate), notament pour le dossier `src`. Ce qui donnerais pour un composant `Weather`, un path `src/components/Weather.tsx`. Les tests correspondants à ce composant se trouveraient dans `tests/components/Weather.test.tsx`.
 
 ## React
 Utiliser les FunctionComponents avec les hooks dès que possible. De nombreux développements React tendent vers ce nouveau mode de fonctionnement. Il simplifie énormément l'écriture des composants en "masquant" la partie `lifecycle` notamment.
 [Pour en savoir plus](https://habr.com/en/post/443500)
 
 ## Typescript
 ### Couverture
 Quelques améliorations concernant la couverture Typescript du projet :
 * Passer tout les fichiers `src` sur du Typescript (`.ts` ous `.tsx` pour les composants).
 * Corriger les erreurs Typescript (ex : Element implicitly has an 'any' type)
 * Pour cela, ne pas hésiter à utiliser une extension TS pour son IDE. La mission : enlever tout le rouge sur son écran :grin: 
 * Ajouter le check TSLint à la compilation ? (comme ça, erreur TypeScript = pas de compilation = correction immédiate de l'erreur)

### Typage
* Ajouter du typage sur les `props`, ça simplifie la lecture du composant et permet d'éviter pas mal d'erreurs. [exemple](https://github.com/cchardeau/marvel/blob/master/src/components/Character/Character.tsx)
* Ajouter du typage sur les variables "complexes". Exemple avec `hives` :
```javascript
// src/models/Hive.ts

enum Health {
  Low = 0,
  Medium = 1,
  Normal = 2
}

enum Food {
  VeryLow = 1,
  Low = 2,
  Full = 3,
  VeryFull = 4
}

enum Eggs {
  Invalid = -1,
  Ko = 0,
  Ok = 1
}

enum Alerts {
  Varroa = 'VARROA',
  Swarming = 'SWARMING',
  SwarmingP = 'SWARMINGP',
  Laying = 'LAYING',
  Food = 'FOOD',
  FoodP = 'FOODP',
  Brood = 'BROOD',
  Sickness = 'SICKNESS',
  Orphan = 'Orphan'
}

type Queen = {
  seen: boolean
  orphan: boolean
  year: number
}

type Hive = {
  id: number,
  name: string,
  health: Health,
  queen: Queen,
  brood: number
  food: Food,
  eggs: Eggs,
  alerts: Array<Alerts>
}

export { Health, Food, Eggs, Alerts }
export default Hive
```
```javascript
// src/utils/data.ts

import Hive from '../models/Hive'

export const hives: Array<Hive> = [ ... ]
```


## Code
 * Corriger les diférentes erreurs Eslint 
 * Préferer l'utilisation de `const` et `let` à `var`
 * Harmoniser l'écriture du noms des variables (choix entre `snake_case` ou `camelCase`)
