Écrans — vue d'ensemble
Un écran dans Liberty est la page que voit l'utilisateur : un tableau de lignes, des filtres optionnels, un dialogue d'ajout/modification optionnel, des actions optionnelles, un menu contextuel ligne optionnel. Un écran = une requête <base>_get + (optionnellement) <base>_put / <base>_post / <base>_delete pour les écritures + un formulaire de dialogue par-dessus.
La page qui gère les écrans est Paramètres → Écrans. Cette vue d'ensemble la cartographie ; les pages suivantes décrivent chaque tâche.
La page Écrans en un coup d'œil
Trois régions :
| Région | Contenu |
|---|---|
| Barre de portée en haut | Une puce par application (un connecteur disposant d'un menu). Cliquer sur une puce → ses écrans se chargent en dessous. Le bouton + Ajouter des écrans pour un connecteur enregistre un connecteur tout neuf dans l'espace de nommage Écrans. Annuler / Enregistrer à droite valident ou annulent les modifications de toute la page. |
| Barre de filtre | Un champ de recherche pour la liste d'écrans. Visible quand l'application sélectionnée comporte plus de quelques écrans. |
| Liste des écrans | Une carte par écran, défilement vertical. Chaque carte affiche l'identifiant, le libellé, la requête de lecture, le nombre d'onglets, le nombre de champs et les actions par carte : Renommer, Dupliquer, Supprimer. Cliquer sur une carte ouvre la boîte de dialogue modale du Concepteur d'écran. |
La boîte de dialogue modale du Concepteur d'écran
Cliquer sur une carte ouvre une boîte de dialogue modale quasi plein écran qui héberge le ScreenEditor. L'en-tête présente Agrandir / Restaurer (plein écran par défaut), Annuler et Enregistrer — Enregistrer valide uniquement les modifications de cet écran et ferme ; Annuler demande confirmation en cas de modifications non enregistrées.
À l'intérieur de la modale, sept onglets organisent l'ensemble :
| Onglet | Contenu |
|---|---|
| Général | Identité, surcharge du connecteur, table d'audit, plafond de lignes, colonnes clés, indicateurs de comportement (chargement automatique, éditable, importable), regroupement, vue arborescente, graphique par défaut, comportement au clic sur une ligne. |
| Requêtes | Les quatre références de requêtes CRUD — lecture (obligatoire), mise à jour, insertion, suppression. Le sélecteur s'alimente depuis la liste des requêtes du connecteur. |
| Colonnes | Une ligne par indication de colonne — libellés, formats, valeurs par défaut, références dictionnaire, filtrage, règles d'édition. Cliquer sur une colonne pour accéder à son éditeur complet. |
| Dialogue | Le Constructeur visuel — un canevas à trois colonnes style Figma (Palette / Canevas / Inspecteur) où l'on glisse des champs sur des onglets. Optionnel — un écran sans dialogue fonctionne quand même comme un tableau en lecture seule ou en édition de grille. |
| Actions | Trois groupes : Hooks de dialogue (on_load / on_save / on_cancel), Barre d'outils (boutons au-dessus du tableau), Hooks de ligne (on_insert / on_update / on_delete). |
| Menu ligne | Actions du menu contextuel ouvert par clic droit sur une ligne. |
| Export | Configuration d'export xlsx multi-feuilles — optionnel. |
Les pages suivantes de cette section décrivent chaque onglet comme une tâche distincte.
Ce que porte un écran
Les champs de premier niveau du schéma, regroupés par finalité :
| Groupe | Champs |
|---|---|
| Identité | id, label, description, connector (vide = le connecteur de l'application) |
| Requête de lecture | read_query (obligatoire), auto_load, max_rows, key_columns |
| Requêtes d'écriture | update_query, insert_query, delete_query |
| Édition et affichage | columns, editable, uploadable, initial_group_by, treeview, chart_id |
| Audit | audit_table (ex. AUD_USERS — duplique les écritures avec AUD_ACTION / AUD_USER / AUD_DATE) |
| Formulaire | dialog (optionnel — le formulaire posé sur le tableau) |
| Actions / hooks | actions (barre d'outils), row_menu (clic droit), on_insert / on_update / on_delete (hooks de ligne) |
| Cible au clic sur une ligne | row_click_screen + row_click_connector + row_click_binds (ouvre un écran voisin comme dialogue) OU row_click_route (ouvre une route SPA) |
| Export | export (configuration du classeur xlsx) |
Types d'écrans — selon les champs renseignés
Il n'y a pas de discriminant kind ; les différentes formes d'écran proviennent des champs que l'on remplit :
| Champs renseignés | Comportement |
|---|---|
read_query seul | Grille en lecture seule. L'utilisateur voit les lignes ; pas d'édition, pas d'ajout. |
read_query + editable = true | Édition en ligne dans la grille — l'utilisateur édite les cellules sur place, le bouton Enregistrer de la grille écrit en retour. Nécessite update_query. |
read_query + dialog | Grille + dialogue. L'utilisateur ajoute/modifie les lignes via le formulaire. Nécessite les insert_query / update_query correspondantes. |
read_query + row_click_screen | Maître/détail. Cliquer sur une ligne ouvre le dialogue d'un écran voisin restreint à cette ligne. |
read_query + row_click_route | Maître/page. Cliquer sur une ligne navigue vers une route SPA — échappatoire pour les pages React écrites à la main (logs diffusés en direct, fusions multi-sources). |
Tout ce qui précède + treeview | Bascule en vue arborescente en complément des bascules Tableau / Graphique par défaut. Les colonnes parent/enfant construisent un arbre récursif. |
Un même écran peut superposer plusieurs : un écran avec dialog ET row_click_route ouvre la route au clic (la route gagne), et le dialogue n'est accessible que via le bouton + Ajouter de la barre d'outils.
Permissions — pilotées par la requête de lecture
L'écran lui-même n'a pas sa propre chaîne de permission. Un utilisateur peut voir un écran quand il a la permission d'exécuter sa requête de lecture :
sql:<connector>:<read_query>
Ainsi, un écran customers sur le connecteur crm avec read_query = customers_get est visible par toute personne disposant de sql:crm:customers_get. Accorder sql:crm:* ouvre toutes les requêtes du connecteur — et donc tous les écrans qui les utilisent.
La même logique s'applique aux écritures : le Enregistrer du dialogue et le Enregistrer de la grille n'aboutissent que si l'utilisateur a sql:<connector>:<update_query> / <insert_query> / <delete_query>. Un utilisateur avec la lecture mais sans permission d'écriture voit la grille mais pas de bouton + Ajouter et obtient un dialogue en lecture seule.
Enregistrement et rechargement
Le bouton Enregistrer de la page Écrans écrit l'intégralité de screens.toml (la table [screens] est remplacée intégralement) et déclenche un rechargement à chaud. La bannière de statut indique quelles applications ont été touchées.
Le rechargement à chaud signifie aucun redémarrage de processus — un nouvel écran est appelable immédiatement à /screen/<app>/<id>, et le menu le prend en compte si une entrée de menu pointe sur lui.
Ce que l'on fait concrètement — carte rapide
| Objectif | Lire |
|---|---|
Câbler un nouvel écran sur une requête _get et voir la grille. | Créer un écran à partir d'une requête. |
| Configurer les colonnes — libellés, formats, valeurs par défaut, filtrage. | Colonnes. |
| Construire le dialogue d'ajout/modification avec le concepteur visuel. | Constructeur de dialogue. |
| Faire apparaître / rendre obligatoires / verrouiller des champs sous conditions. | Champs conditionnels. |
| Ajouter des boutons de barre d'outils, des menus contextuels et des hooks de cycle de vie. | Actions et cycle de vie. |
| Intégrer un formulaire d'enregistrement enfant ou une grille de lignes liées dans un onglet. | Onglets imbriqués. |
Étapes suivantes
- Créer un écran à partir d'une requête — démarrer avec un
_get, voir la grille. - Concepts → Écrans — la référence approfondie derrière cette page.