Ouvrir / Enregistrer une session / une calculette
Objectif
Pouvoir sauvegarder en local dans un fichier json et ensuite de pouvoir recharger, soit une calculette, soit un ensemble de calculette (session).
Ergonomie
Ajouter un bouton enregistrer à côté du bouton de fermeture d'une calculette Ajouter un bouton enregistrer et un bouton ouvrir dans le sidenav.
A l'enregistrement, ouvrir une boîte de dialogue affichant la liste des calculettes en cours avec des coches pour sélectionner. Lorsqu'on enregistre depuis une calculette, ne sélectionner que la calculette affichée et lorsqu'on enregistre depuis la sidenav, sélectionner toutes les calculettes. Ajouter un bouton tout sélectionner/déselectionner pour pouvoir manipuler facilement la sélection.
A l'ouverture, si des calculettes sont déjà ouvertes, proposer d'ajouter les calculettes à ouvrir à celles déjà ouvertes. Si on ne choisit pas cette option, proposer d'enregistrer les calculettes ouvertes avant d'ouvrir un nouveau fichier.
A l'ouverture du fichier, afficher la même liste de sélection que pour l'enregistrement en sélectionnant toutes les calculettes présentes dans le fichier par défaut.
Difficulté à surmonter
Il n'est pas possible en javascript côté client de générer un fichier à enregistrer sur le disque. Il faut que le fichier soit envoyé par le serveur. Il faut donc un script en fonction du type de serveur. Pour electron, il existe une API spécifique pour utiliser les fenêtres standards d'ouverture et enregistrement de fichier.
Le mécanisme suivant peut être mis en place :
- le client génère le fichier json et l'envoi via une requête POST au serveur;
- le serveur récupère le json et le renvoie tel quel sous la forme d'un fichier json.
IL faudrait faire une veille pour voir quels sont les mécanismes standard de communication client -> serveur dans les technos web.
TAF
- Réaliser le script client de conception du json à partir d'une calculette ou d'une session de calculettes et d'envoi des données vers le serveur
- Réaliser le script serveur pour chaque type de serveur :
- PHP
- js ou typescript ou angular pour une exécution avec
ng serve
- Electron (peut utiliser le script précédent mais nécessitera sûrement une adaptation pour gérer les fenêtres de dialogue ouvrir/enregistrer).