Yayaw
Documentation
Bien démarrer

Concepts

Comprendre les catalogues, les actions, les formulaires et l’identité des instances.

Une table fonctionnelle relie une configuration à une source de données. Gardez cette liaison simple et stable : les mêmes catalogues peuvent servir plusieurs instances sans mélanger leurs états.

Les trois catalogues

CatalogueResponsabilitéContenu habituel
getTableConfig(tableType)Ce que propose l’interfaceColonnes, tri initial, modes d’affichage, autorisations, disposition du formulaire
getTableActions(tableType)Comment charger et modifier les donnéeslist, create, update, delete, méthodes groupées et vues sauvegardées
getFormConfig(formType, context)Comment éditer un enregistrementChamps, validation, conditions, sections et options asynchrones

React résout ces catalogues depuis DataTable. Vue accepte aussi une prop config directe. Gardez les fonctions de résolution stables au lieu de recréer leur contenu à chaque rendu.

Une configuration complète

Ce point de départ en lecture seule active la navigation habituelle et désactive les mutations tant que leurs handlers ne sont pas fournis. Le guide de démarrage associé fournit l’action de liste.

product-config.ts
import { defineTableConfig } from "@/components/ui/yayaw-table";

export const productConfig = defineTableConfig({
  id: "products",
  translations: { namespace: "products", keys: {} },
  columns: {
    definitions: [
      { id: "name", header: "Name", type: "text" },
      { id: "price", header: "Price", type: "number" },
      { id: "stock", header: "Stock", type: "number" },
      {
        id: "status",
        header: "Status",
        type: "select",
        options: [
          { label: "Draft", value: "draft" },
          { label: "Active", value: "active" },
          { label: "Archived", value: "archived" },
        ],
      },
    ],
    order: ["name", "price", "stock", "status"],
    visible: ["name", "price", "stock", "status"],
    mandatory: ["name"],
    sort: [{ id: "name", desc: false }],
  },
  table: {
    allowCreate: false,
    allowEdit: false,
    allowDelete: false,
    allowDuplicate: false,
    allowBulkEdit: false,
    allowBulkDelete: false,
    enableRowSelection: false,
    enableViews: false,
    syncUrl: false,
    defaultPageSize: 10,
  },
});

export const getTableConfig = (tableType: string) =>
  tableType === "products" ? productConfig : undefined;
product-config.ts
import { defineTableConfig } from "@/components/ui/yayaw-table-vue";

export const productConfig = defineTableConfig({
  id: "products",
  translations: { namespace: "products", keys: {} },
  columns: {
    definitions: [
      { id: "name", header: "Name", type: "text" },
      { id: "price", header: "Price", type: "number" },
      { id: "stock", header: "Stock", type: "number" },
      {
        id: "status",
        header: "Status",
        type: "select",
        options: [
          { label: "Draft", value: "draft" },
          { label: "Active", value: "active" },
          { label: "Archived", value: "archived" },
        ],
      },
    ],
    order: ["name", "price", "stock", "status"],
    visible: ["name", "price", "stock", "status"],
    mandatory: ["name"],
    sort: [{ id: "name", desc: false }],
  },
  table: {
    allowCreate: false,
    allowEdit: false,
    allowDelete: false,
    allowDuplicate: false,
    allowBulkEdit: false,
    allowBulkDelete: false,
    enableRowSelection: false,
    enableViews: false,
    syncUrl: false,
    defaultPageSize: 10,
  },
});

export const getTableConfig = (tableType: string) =>
  tableType === "products" ? productConfig : undefined;

defineTableConfig fusionne les valeurs par défaut. Les valeurs explicitement définies à false restent désactivées. La forme structurée range les comportements dans table ; les anciennes configurations React à plat restent compatibles, mais les nouveaux exemples utilisent le catalogue structuré.

Des identifiants distincts

IdentifiantRôleExemple
tableTypeChoisir les catalogues de configuration et d’actionsproducts
tableIdIsoler URL, sélection, vues et cache d’une instancewarehouse-products
formTypeChoisir un catalogue de formulaireproduct-editor
ID de ligneIdentifier un enregistrement entre les pages et mutationsproduct-42

Fournissez des identifiants de ligne stables avec getRowId. Des index de position ne permettent pas de suivre une sélection entre plusieurs pages serveur. Deux tables indépendantes sur une page nécessitent des tableId distincts, même si elles partagent un tableType.

Circulation des données

Une interaction modifie l’état de la requête. La table appelle list avec une pagination commençant à un, le tri, la recherche et les filtres. L’action renvoie la page demandée et les totaux. Une mutation persiste le changement, puis la table se rafraîchit via le cache Query partagé.

React utilise une liste chargée par actions. Vue accepte aussi des data locales, sur lesquelles son moteur applique la requête. Avec une source distante, les deux éditions comptent sur le backend pour appliquer la requête complète avant la pagination.

Valeurs initiales, état courant et vues sauvegardées

La configuration définit l’interface initiale. L’URL et les vues sauvegardées représentent l’organisation courante de l’utilisateur : modifier une valeur par défaut ne remplace pas une organisation déjà sauvegardée. Les callbacks et les fonctions de rendu restent dans le code de l’application ; les snapshots de vues contiennent un état sérialisable.

Personnaliser le bon niveau

Utilisez les métadonnées d’une colonne pour son formatage, un champ de formulaire pour l’édition, une fonction de rendu ou un slot Vue pour la présentation et une action pour la persistance. Évitez une seconde source d’état de requête extérieure à la table. Consultez l’intégration Query, les formulaires et le contrat d’actions avant d’ajouter un workflow.