Thème
Guide d'Intégration IA : Librairie CrudPage
Ce document explique à une IA comment implémenter et utiliser la librairie CrudPage dans un projet Vue 3 cible.
1. Installation et Importation
La librairie s'installe via NPM. Elle inclut ses propres types.
bash
npm install @codifyo/vue-crudDans un composant Vue 3 (Composition API) de l'application cliente :
vue
<script setup lang="ts">
import { CrudPage, type CrudConfig } from '@codifyo/vue-crud';
import '@codifyo/vue-crud/dist/style.css'; // Si des styles personnalisés existent
import MyCustomFormComponent from '@/components/MyCustomFormComponent.vue';
</script>
<template>
<!-- Le composant de formulaire est passé via un slot dynamique ou via injection globale -->
<CrudPage :config="config">
<template #form="{ formConfig, modelValue, updateModelValue }">
<MyCustomFormComponent
:config="formConfig"
:modelValue="modelValue"
@update:modelValue="updateModelValue"
/>
</template>
</CrudPage>
</template>2. Configuration d'une Instance (CrudConfig)
Voici comment définir un objet de configuration complet. L'IA doit utiliser les types exportés pour s'assurer de respecter la signature attendue.
typescript
const config: CrudConfig = {
title: 'Gestion des Clients',
itemName: 'Client',
// 1. Fonctions API (Doivent retourner des Promises)
api: {
fetchList: async (params) => {
// params contient : page, limit, sort, dir, filters
const response = await api.get('/clients', { params });
// Doit retourner { data: Array, total: number }
return { data: response.data.items, total: response.data.total };
},
delete: async (id) => await api.delete(`/clients/${id}`),
// update: ..., create: ...
},
// 2. Colonnes
columns: [
{ key: 'id', label: 'ID', sortable: true },
{ key: 'name', label: 'Nom Complet', sortable: true },
{ key: 'status', label: 'Statut', type: 'badge' },
{ key: 'createdAt', label: 'Date', type: 'date' }
],
// 3. Configurations des formulaires (Transmises au MyCustomFormComponent)
filterFormConfig: { /* Structure propre au composant de l'application parente */ },
editFormConfig: { /* Structure propre au composant de l'application parente */ },
// 4. Actions
actions: {
global: [
{ name: 'create', label: 'Nouveau', displayMode: 'modal', style: 'primary', trackInUrl: true }
],
item: [
{ name: 'edit', label: 'Modifier', displayMode: 'page', trackInUrl: true },
{ name: 'delete', label: 'Supprimer', style: 'danger', confirm: true, displayMode: 'none',
handler: async ({ item }) => {
await api.delete(`/clients/${item.id}`);
}
}
]
},
options: {
perPage: 20,
syncUrl: true // Conserve pagination et filtres dans l'URL (?page=2&sort=name...)
}
};3. Particularités Importantes (Tips pour IA)
- trackInUrl : Si une action (ex:
edit) a l'optiontrackInUrl: true, le CrudPage changera l'URL en?action=edit&id=123. Cela rend l'état copiable/collable. CrudPage gère lui-même la lecture de cette URL au montage pour réafficher directement le formulaire. - Filtres dans les actions : Le
handlerd'une action reçoit toujours{ item?, ids?, formData?, filters?, sort?, dir? }(état de la liste au clic). En JSON,includeFilters: trueajoutesort,diretfilters[...]à la query string de la requête de l'action (globale, bulk,formouview), quelle que soit la méthode HTTP ; une action bulkconfirmenvoie aussiids[]. - Skeletons : La librairie gère les indicateurs de chargement (skeletons Bootstrap) de manière autonome lorsqu'elle attend la résolution de la promesse
fetchList. L'IA n'a pas besoin de gérer deisLoadingdans le parent. - Composant Externe : Le CRUD n'essaie pas de réinventer la roue des champs de formulaires complexes (DatePicker complexes, Select multiples avec recherche, etc.). Il délègue cela au composant spécifié dans les slots. Le rôle de l'IA utilisant cette librairie est de mapper correctement les props
formConfigau système de formulaire existant dans l'application cible.