Soraya97 / VisualDon

Folder for exercices
0 stars 0 forks source link

Projet: évitez de vous répéter #4

Open idris-maps opened 4 years ago

idris-maps commented 4 years ago

Vous vous répétez beaucoup. Par exemple:

https://github.com/Soraya97/VisualDon/blob/2456c08b7e47c3a902dc1509d97a3f5a112a1eb9/projet/src/index.js#L103-L131

Pour minimiser le risque d'erreur et pour que ce soit plus lisible, essayez de créé des fonctions plus générales. Comme vous avez fait avec:

https://github.com/Soraya97/VisualDon/blob/2456c08b7e47c3a902dc1509d97a3f5a112a1eb9/projet/src/index.js#L84-L91

Il y a beaucoup de manières de faire. Mais vu la question pour la légende de l'autre jour, j'opterais pour avoir un tableau avec les données par continent. Il contiendrait les noms, couleurs, lignes... et tout ce dont vous auriez besoin.

J'imagine quelque chose comme ça:

const continents = [
  { nom: 'Monde', color: 'HotPink' },
  { nom: 'Afrique', color: 'black' },
  // ...
]

const getPath = ({ nom }) =>
  d3.line()
    .x(d => xScale(parseTime(d.date)))
    .y(d => yScale(d[nom].guéris))

const getLine = (path, color) =>
  svg.append("path")
    .datum(data)
    .attr("d", path)
    .attr('stroke', color)
    .attr('fill', 'none')
    .attr('transform', `translate(${MARGIN_LEFT}, 0)`)
    .attr('opacity', 1)

const continentsData = continents
  .map(d => ({ ...d, path: getPath(d) }))
  .map(d => ({ ...d, line: getLine(d.path, d.color) }))