Migration des composants UI vers @framework/ui
Migration des composants UI vers @framework/ui
Les composants qui dépendent d'un serveur Frappe ou de Frappe Cloud ne sont plus dans frappe-ui/frappe. Ils sont dans le paquet @framework/ui (dossier ui/ de Dodock), exportés par sa racine.
Composants déplacés
| Groupe | Exports |
|---|---|
| Télémétrie | telemetryPlugin, useTelemetry, type TelemetryPluginOptions |
| Onboarding | useOnboarding, GettingStartedBanner, IntermediateStepModal, HelpModal, showHelpModal, minimize, type OnboardingStep |
| Bannières | TrialBanner, SignupBanner |
| Import de données | DataImportWizard, useDataImport |
Remplacer les imports
- import { useTelemetry, TrialBanner } from "frappe-ui/frappe";
+ import { useTelemetry, TrialBanner } from "@framework/ui";
telemetryPlugin était l'export par défaut d'un fichier de frappe-ui. C'est maintenant un export nommé.
@vueuse/core est une dépendance paire (peer dependency) de @framework/ui : le composable d'onboarding utilise useStorage. Votre application fournit @vueuse/core, pour n'en avoir qu'une copie.
Les écrans internes de DataImportWizard (ses étapes), OnboardingSteps et HelpCenter ne sont pas exportés. Une application ne les importe pas directement.
Télémétrie
import { telemetryPlugin } from "@framework/ui";
app.use(telemetryPlugin, {
app_name: "mon_application",
router, // facultatif : une page vue par navigation
});
Le plugin lit sa configuration sur le serveur Frappe. Options principales : app_name (obligatoire), enabled, router, getContext, anonymousMode.
Onboarding
useOnboarding(appName) renvoie l'état de l'onboarding de l'utilisateur pour une application. Il renvoie undefined pour un visiteur non connecté.
import { useOnboarding } from "@framework/ui";
const onboarding = useOnboarding("mon_application");
onboarding?.setUp([
{ name: "create_first_customer", title: "Créer un premier client", completed: false },
{ name: "send_first_quote", title: "Envoyer un premier devis", completed: false, dependsOn: "create_first_customer" },
]);
// Plus tard, quand l'utilisateur a fait l'action :
onboarding?.updateOnboardingStep("create_first_customer");
Autres méthodes : skip(step), skipAll(), reset(step), resetAll(), syncStatus(). Les valeurs calculées stepsCompleted, totalSteps et completedPercentage alimentent GettingStartedBanner.
Import de données
Le composant s'appelle maintenant DataImportWizard. Il prend l'état créé par useDataImport :
<template>
<DataImportWizard
:data-import="dataImport"
:on-open-list="(doctype) => router.push(`/${doctype}`)"
@open-record="(doctype, name) => router.push(`/${doctype}/${name}`)"
/>
</template>
<script setup>
import { ref } from "vue";
import { useRouter } from "vue-router";
import { DataImportWizard, useDataImport } from "@framework/ui";
const router = useRouter();
const importName = ref(null); // nom d'un document Data Import existant, ou null pour un nouvel import
const dataImport = useDataImport(importName, { doctype: "Customer" });
</script>
| Nom | Type | Rôle |
|---|---|---|
data-import | propriété | État renvoyé par useDataImport. Obligatoire. |
on-open-list | propriété | Affiche le lien vers la liste du DocType importé et l'appelle avec ce DocType. |
on-new-import | propriété | Affiche le bouton « Démarrer un nouvel import » à la fin de l'import. |
open-record | événement | (doctype, name) : ouvrir un enregistrement importé. |
open-imports | événement | (doctype) : ouvrir la liste des imports. |
useDataImport utilise la connexion temps réel de l'application pour suivre la progression. Vous n'avez pas à passer de socket.