4.1.3 • Published 8 months ago

@hipay/hipay-material-ui v4.1.3

Weekly downloads
-
License
UNLICENSED
Repository
gitlab
Last release
8 months ago

Material-UI docs

Voici la documentation du site HiPay Material-UI.

Avant de commencer, il faut vous familiariser avec REACT :

Et connaîtres les best practices

Lancer le projet

Il faut que sur votre poste soit installés

  • node (minimum version LTS 8.9.4)
  • npm (minimum version 5.6.0)

Puis lancez les commandes

npm install

npm start # équivaut à : npx styleguidist server

Le site est dispo à cette URL: http://localhost:6060

Best practices

Patterns

Optimisation

  • Faire attention au Lifecycle ! ne pas introduire de boucle infinie en "updatant" le state d'un composant dans une mauvaise phase. (voir schéma ci-dessous). Si le composant à besoin d'accéder à son DOM (pour redéfinir sa taille...), on préfère le gérer en js pur pour ne pas refaire un cycle (voir la gestion des scrolls dans HiTable/HiTable.js ou l'ellipse au milieu dans HiTable/BodyCells/CellText.js )

  • Comprendre la différence entre React.Component & React.PureComponent https://codeburst.io/when-to-use-component-or-purecomponent-a60cfad01a81

  • Comprendre le principe de réconciliation pour optimiser les ensembles de composants (listes, tableaux...) -> use "key" ! https://reactjs.org/docs/lists-and-keys.html https://reactjs.org/docs/reconciliation.html

  • Attention aux refs et aux mutations ex: ne pas passer une arrow fonction directement dans les props d'un composant. Même pour y inclure un index ou une valeur contextuelle !

Gestion des événements clavier

  • Evénement capturé : on part sur le KeyDown, c'est le seul à capturer toutes les touches du clavier (source)

  • Capturing : il s'agit de la première phase par laquelle passe un événement lors de sa capture, durant celle-ci, il descend dans l’arborescence HTML en partant de l'élément racine (en React : Parent => Enfant, on peut le capturer avec onKeyDownCapture)

  • Bubbling : c'est la deuxième phase par laquelle passe un événement et celle capturée par défaut lorsque l'on fait un onKeyDown. A ce moment, l'événement remonte vers l'élément HTML racine (en React : Enfant => Parent)

  • PreventDefault : on l'utilisera à chaque fois qu'il faudra éviter un comportement par défaut du navigateur.

  • StopPropagation : il permet de stopper la capture dès qu'il est appelé. Couplé au Capturing on peut, par exemple, éviter qu'un événement soit capturé dans un composant enfant.

Contribuer

A savoir

  • Notre projet sur JIRA : PSYCHE - Production
  • Pour ouvrir nos features, nous utilisons git flow Après avoir cloner le projet, il faudra lancer la commande git flow init depuis la master
git clone git@gitlab.hipay.org:backend/hipay-material-ui.git
git checkout master
git flow init
# Tapez "Entrée" pour toutes les questions
  • Tous les composants sont dans le dossier /src.
  • Nos composants HiPay doivent être préfixés par "Hi", par exemple HiTable, HiButton...
  • Pour un code bien formatter, on utilise ESLint - Prettier
  • Pour activer ESLint sur PHPStorm : File -> Settings -> Languages & Frameworks -> Code Qaulity Tools -> ESLint -> Enable

Pour rajouter de la documentation dans les démos

Lire ce guide

Pour rajouter des composants dans la démo

Il faut créer un dossier avec le nom du composant. Dedans, y ajouter :

  • Un fichier index.js qui exporte le composant (sans ce fichier la démo n'apparaitra pas dans la liste).
  • Un fichier ComponentName.js qui sera le composant lui même.
  • Un fichier ComponentName.md qui contiendra la démo du composant. Ce fichier peut contenir plusieurs démos à la suite.

Workflow d'une feature

  • S'affecter la tâche JIRA et la passer à "dev in progress" (projet PSYCHE - Production)
  • Ouvrir la feature via git flow
git flow feature start PSYCHE-XXX
  • Avant de commiter ou pusher, il faut vérifier la Definition Of Done
  • Les tests unitaires doivent passer
  • La génération des apis aussi
  • Le code doit être bien formatter : ESLint - Prettier
  • Commit - suivant les conventions de rédaction des messages de commit
  • Push
  • Faire la demande de merge request sur la develop
  • La revue se fera par un membre de l'équipe PSYCHE
Conventional Changelog

(optionel) installer commitizen pour s'assurer de commiter selon la convention

npm install commitizen -g

Voici un squelette d’exemple de message de commit conventionnel :

<type de tâche>(<périmètre>): message court

Description complémentaire/complète

Référence/action sur un ticket définissant cette tâche

On facilite ainsi la lecture du log d’une part, la génération automatique du changelog (ou release notes) d’autre part

Types de tâche:

  • fix : commit d'une correction de bug. Se traduit en PATCH dans le changelog
  • feat : commit d'une nouvelle feature. Se traduit en MINOR dans le changelog
  • test : commit d'un ajout ou d'une maj de tests
  • docs : commit d'un ajout ou d'une maj de la documentation OU de l'app de démonstration
  • perf : commit concernant l'amélioration des performances

BREAKING CHANGE : si un commit introduit un BREAKING CHANGE, on doit ajouter le tag BREAKING CHANGE dans le corps du commit. Ce commit peut être de n'importe quel type mais il est préférable qu'il soit lié à une feature. Se traduit en MAJOR dans le changelog

Périmètre (optionel): nom du composant, type de tests, page de la doc

Exemple:

feat(HiTable): add children rows management

Handle children rows as subtable based on the same columns as parents.

PSYCHE-XX

Tests

Tous les composants doivent avoir leur test à côté (fichier .spec.js) On utilise mocha, chai et enzyme

Jouer tous les tests
npm run test:unit
Jouer les tests sur un seul composant
yarn run mocha packages/hipay-material-ui/src/HiRadio/HiRadio.test.js

Vérifier la couverture de code

npm run test:coverage
# ou pour avoir le rendu html :
npm run test:coverage:html

La couverture de code html se trouvera dans le dossier coverage

Calcul de couverture sur un seul composant

yarn cross-env NODE_ENV=test BABEL_ENV=coverage nyc mocha src/HiTable/BodyCells/CellAccount.spec.js  && nyc report -r lcovonly

ESLint - Prettier

Pour le bon formattage des fichiers, on utilise Prettier avec la conf EsLint La conf se trouve dans le fichier prettier.config.js Toutes les options : https://prettier.io/docs/en/options.html

Installer prettier en global

yarn global add prettier

Utilisation voir doc

Vérifier le fichier de config utilisé

prettier --find-config-path src/HiForm/HiInput.js

Forcer le formatage d'un fichier

prettier --write src/HiForm/HiInput.js

Publish

Le projet est publié sur un repo privé npm : https://www.npmjs.com/package/@hipay/hipay-material-ui

Un script de déploiement automatique est disponible dans gitlab CI.

Semantic Versioning

Une version MAJOR.MINOR.PATCH, correspond a:

  • MAJOR version introduisant des évolutions non retro-compatibles (API changes...),
  • MINOR version introduisant des évolutions retro-compatibles, la sortie des versions mineures est basé sur les sprints de la tribu PSYCHE
  • PATCH version corrigeant des bugs Des tags additionels peuvent être ajouter selon le contexte (ex: 1.0.0-beta.24).

En production, chaque releases (MAJOR, MINOR & PATCH) doit faire l'objet d'une communication interne aux tribus utilisatrices.

Les projets peuvent se baser sur une version MINOR: ^2.5.0, ce qui signifient "compatible avec la version 2.5.0".

Ainsi les PATCH seront automatiquement pris en compte. L'intégration d'une MINOR doit faire l'objet d'une recette (voir HI-CHANGELOG.md). Le passage à une autre MAJOR doit faire l'objet d'une recette (voir HI-CHANGELOG.md BREAKING CHANGE).

Importer la lib dans son projet React

Le package est publié sur un repo npm privé.

Il est donc nécessaire d'ajouter le token d'authentification dans le fichier .npmrc.

Demander à l'équipe PSYCHE ou le copier depuis le projet console.

Si ERR d'authentification

npm adduser admin admin123

pour le premier publish, modifier .npmrc

vi ~/.npmrc

Mettre

registry=http://jira-nexus.hipay-pos-platform.com:8081/repository/npm-private/ _auth="YWRtaW46YWRtaW4xMjM="

## Troubleshooting

### Upgrade node :
```bash
sudo npm cache clean -f
sudo npm install -g n
sudo n stable

Lorsqu'on lance la commande pour générer les apis :

Erreur : Cannot read property 'name' of undefined => Une props est présente dans les défaultProps mais pas déclarée dans propTypes

Lorsqu'on rajoute une page demo :

Cannot read property 'js' of undefined => dans le fichier markdown du dossier docs/src/pages/demos/VOTRE-DEMO/votre-demo.md, la demo pointe sur un fichier qui n'existe pas. Ou bien la demo n'existe pas dans le fichier js du dossier pages/demos/votre-demo.js

Cannot read property 'toLowerCase' of undefined => un composant qu'on importe n'est pas exporter. Vérifier le fichier index.js à la racine du dossier du composant en question dans src/

Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: undefined. You likely forgot to export your component from the file it's defined in, or you might have mixed up default and named imports. Check the render method of SelectSuggestWithLabel. => on importe mal un composant, par exemple import { HiFormControl } from 'material-ui/Form'; au lieu de import { HiFormControl } from 'hipay-material-ui/HiForm';

Problème d'import dans front-react

Attention aux index.js. La bonne syntaxe est : export { default as MyComponente } from './MyComponente';

4.1.3

8 months ago

4.1.1-beta.1.2

8 months ago

4.1.1-beta.1.1

8 months ago

4.1.1-beta.2

8 months ago

4.1.2

9 months ago

4.1.1-beta.1

9 months ago

4.1.1

11 months ago

4.0.0-beta6508

1 year ago

4.1.0

2 years ago

4.0.0-beta1083-2

2 years ago

4.0.0-beta1083-1

2 years ago

4.0.0-beta1083

2 years ago

4.0.1-beta5

2 years ago

4.0.1-beta3

2 years ago

4.0.0-p6205.9

2 years ago

4.0.0-p6205.8

2 years ago

4.0.0-p6205.7

2 years ago

4.0.0-p6205.6

2 years ago

4.0.0-p6205.5

2 years ago

4.0.0-p6205.3

2 years ago

4.0.0-p6205.2

2 years ago

4.0.0-p6205.1

2 years ago

4.0.0-p6205.0

2 years ago

4.0.0

2 years ago

3.15.3-beta.3

2 years ago

3.15.3-beta.1

2 years ago

3.15.3-beta.0

2 years ago

3.15.2

3 years ago

3.15.1

3 years ago

3.15.0

3 years ago

3.14.0

3 years ago

3.13.5

3 years ago

3.13.4

3 years ago

3.13.3

3 years ago

3.13.2

3 years ago

3.13.1

3 years ago

3.13.0

3 years ago

3.12.3-beta.0

3 years ago

3.12.2

3 years ago

3.12.1

3 years ago

3.12.0

3 years ago

3.11.2

3 years ago

3.11.1

3 years ago

3.11.0

4 years ago

3.11.0-beta.0

4 years ago

3.10.0

4 years ago

3.9.2

4 years ago

3.9.1

4 years ago

3.9.0

4 years ago

3.8.0

4 years ago

3.7.13

4 years ago

3.7.12

4 years ago

3.7.11

4 years ago

3.7.10

4 years ago

3.7.9

4 years ago

3.7.8

4 years ago

3.7.7

4 years ago

3.7.6

4 years ago

3.7.5

5 years ago

3.7.4

5 years ago

3.7.3

5 years ago

3.7.2

5 years ago

3.7.1

5 years ago

3.7.0

5 years ago

3.6.3

5 years ago

3.6.2

5 years ago

3.6.1

5 years ago

3.6.0

5 years ago

3.6.0-rc1

5 years ago

3.5.1

5 years ago

3.5.0

5 years ago

3.4.2

5 years ago

3.4.1

5 years ago

3.4.0

5 years ago

3.3.0

5 years ago

3.2.3

5 years ago

3.2.2

5 years ago

3.2.1

5 years ago

3.2.0

5 years ago

3.1.0

6 years ago

3.0.0

6 years ago

2.3.5

6 years ago

2.3.4

6 years ago

2.3.3

6 years ago

2.3.2

6 years ago

2.3.1

6 years ago

2.3.1-rc5

6 years ago

2.3.1-rc4

6 years ago

2.3.1-rc3

6 years ago

2.3.1-rc2

6 years ago

2.3.1-rc1

6 years ago

2.3.0

6 years ago

2.3.0-rc.5

6 years ago

2.3.0-rc.4

6 years ago

2.3.0-rc.3

6 years ago

2.3.0-rc.2

6 years ago

2.3.0-rc.1

6 years ago

2.2.0-beta-core4

6 years ago

2.2.0-beta-core3

6 years ago

2.2.0-beta-core2

6 years ago

2.2.0-beta-core

6 years ago

2.2.0

6 years ago

2.2.0-RC2

6 years ago

2.2.0-RC1

6 years ago

2.1.0

6 years ago

2.1.0-RC1

6 years ago

2.0.0-beta.76

6 years ago

2.0.0-beta.75

6 years ago

2.0.0-beta.74

6 years ago

2.0.0-beta.73

6 years ago

2.0.0-beta.72

6 years ago

2.0.0-beta.71

7 years ago

2.0.0-beta.70

7 years ago

2.0.0-beta.69

7 years ago

2.0.0-beta.68

7 years ago

2.0.0-beta.66

7 years ago

2.0.0-beta.65

7 years ago

2.0.0-beta.64

7 years ago

2.0.0-beta.63

7 years ago

2.0.0-beta.62

7 years ago

2.0.0-beta.61

7 years ago

2.0.0-beta.60

7 years ago

2.0.0-beta.59

7 years ago

2.0.0-beta.58

7 years ago

2.0.0-beta.57

7 years ago

2.0.0-beta.56

7 years ago

2.0.0-beta.55

7 years ago

2.0.0-beta.54

7 years ago

2.0.0-beta.53

7 years ago

2.0.0-beta.52

7 years ago

2.0.0-beta.51

7 years ago

2.0.0-beta.50

7 years ago

2.0.0-beta.49

7 years ago

2.0.0-beta.48

7 years ago

2.0.0-beta.47

7 years ago

2.0.0-beta.46

7 years ago

2.0.0-beta.45

7 years ago

2.0.0-beta.44

7 years ago

2.0.0-beta.43

7 years ago

2.0.0-beta.42

7 years ago

2.0.0-beta.41

7 years ago

2.0.0-beta.40

7 years ago

2.0.0-beta.39

7 years ago

2.0.0-beta.38

7 years ago

2.0.0-beta.37

7 years ago

1.0.0-beta.29

7 years ago

2.0.0-beta.36

7 years ago

2.0.0-beta.35

7 years ago

1.0.0-beta.28

7 years ago

1.0.0-beta.27

7 years ago

1.0.0-beta.26

7 years ago

1.0.0-beta.25

7 years ago

1.0.0-beta.23

7 years ago

1.0.0-beta.22

7 years ago

1.0.0-beta.21

7 years ago

1.0.0-beta.20

7 years ago

1.0.0-beta.19

7 years ago

1.0.0-beta.18

7 years ago

1.0.0-beta.17

7 years ago

1.0.0-beta.16

7 years ago

1.0.0-beta.15

7 years ago

1.0.0-beta.14

7 years ago

1.0.0-beta.13

7 years ago

1.0.0-beta.12

7 years ago

1.0.0-beta.11

7 years ago

1.0.0-beta.10

7 years ago

1.0.0-beta.9

7 years ago

1.0.0-beta.8

7 years ago

1.0.0-beta.7

7 years ago

1.0.0-beta.6

8 years ago

1.0.0-beta.5

8 years ago

1.0.0-beta.4

8 years ago

1.0.0-beta.3

8 years ago

1.0.0-beta.2

8 years ago

1.0.0-beta.1

8 years ago