É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) |
Mode lecture seule
Activez Lecture seule sur un écran (une case à cocher dans l'onglet Général) pour rendre toute la vue non modifiable. Cela masque les boutons Enregistrer, Supprimer et Dupliquer du dialogue, les boutons Ajouter et Supprimer la sélection de la grille, l'édition de cellule en ligne, le collage et l'import Excel — dans les éditeurs de tables imbriquées aussi. C'est plus fort que Désactiver l'ajout (qui ne bloque que les insertions) : c'est le bon réglage pour un écran de référence ou d'audit qui ne doit jamais être modifié depuis l'interface. Les permissions côté serveur s'appliquent en plus, indépendamment.
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.