Gérer les transitions et les tasks
Vue d'ensemble
Le hook useProcess expose l’objet processHandlers, qui permet de gérer les transitions du workflow ainsi que l’exécution et le suivi des tâches (tasks) depuis les composants React. Il centralise les actions de navigation (NEXT, PREV), la gestion des métadonnées de transition et les interactions avec les tâches OIP.
Pour utiliser processHandlers, importez useProcess depuis @fasstech/oip-starter-utils/app.
import { useProcess } from '@fasstech/oip-starter-utils/app';
const Demo = () => {
const { processHandlers } = useProcess();
return <h2>DEMO</h2>;
};Prérequis
- OIP Core ≥ v3.5.0 pour la gestion des métadonnées de transition.
- OIP Starter Utils ≥ v3.0.4.
- Pour la gestion des tasks : une configuration valide dans le fichier OIP.
Fonctionnement
Architecture générale
processHandlers regroupe les handlers suivants :
- Transitions : onAction, onNext, onPrev
- Tasks : onRunTask, onGetTask, onGetTaskStatus, onGetTaskStatusCode, onKillCronTask
- Handlers spéciaux : destroyApp, onLogout
- Handlers personnalisés (extensibles via use-custom-handlers.hook.js)
Handlers de transitions
onAction
Déclenche une transition explicitement (NEXT ou PREV).
Signature
onAction: async ({ action, context }) => voidParamètres
- action — "NEXT" ou "PREV"
- context — métadonnées (optionnel)
Exemple
const onAction = (action) => {
processHandlers.onAction({
action,
context: {
logic: true,
metadata: { someId: 'azerty' }
}
});
};onNext
Déclenche la transition vers la vue suivante.
Signature
onNext: async ({ context }) => voidExemple
processHandlers.onNext({
context: { logic: true, metadata: { someId: 'azerty' } }
});onPrev
Déclenche la transition vers la vue précédente.
Signature
onPrev: async ({ context }) => voidExemple
processHandlers.onPrev({
context: { logic: true, metadata: { someId: 'azerty' } }
});Handlers des tasks
onRunTask
Exécute une tâche déclarée dans la configuration OIP.
Signature
onRunTask: async ({ taskName, isNotLinked, metadata }) => voidParamètres
- taskName — obligatoire
- isNotLinked — optionnel (défaut false)
- metadata — optionnel
Exemple
processHandlers.onRunTask({
taskName: 'magicTask',
metadata: { something: "That's all Folks!" }
});onGetTask
Récupère l’objet complet d’une tâche.
Signature
onGetTask: async ({ taskName, isNotLinked }) => taskExemple
const task = await processHandlers.onGetTask({ taskName: 'magicTask' });onGetTaskStatus
Récupère le statut d’une tâche.
Signature
onGetTaskStatus: async ({ taskName, isNotLinked }) => statusExemple
const status = await processHandlers.onGetTaskStatus({ taskName: 'magicTask' });onGetTaskStatusCode
Récupère le code de statut d’une tâche.
Signature
onGetTaskStatusCode: async ({ taskName, isNotLinked }) => statusCodeExemple
const code = await processHandlers.onGetTaskStatusCode({ taskName: 'magicTask' });onKillCronTask
Arrête une tâche CRON programmée.
Signature
onKillCronTask: async ({ taskName }) => voidExemple
processHandlers.onKillCronTask({ taskName: 'cronTask' });Handlers spéciaux
destroyApp
Libère la mémoire lorsqu’une application en mode bundle change de bundle. Disponible depuis v3.4.3.
Signature
destroyApp: () => voidExemple
processHandlers.onNext();
processHandlers.destroyApp();onLogout
Détruit la session de navigation côté serveur. Disponible depuis v3.4.4.
Toute logique additionnelle (redirection) doit être gérée par l’OAV.
Signature
onLogout: async () => Promise<void>Exemple
processHandlers.onLogout();Handlers personnalisés
Vous pouvez étendre processHandlers via :
app/hooks/use-custom-handlers.hook.js
Exemple
const myCustomHandler = async () => {
return true;
};
return { customHandlers: { myCustomHandler } };Utilisation
processHandlers.myCustomHandler();Consommer une query ou mutation GraphQL
Utilisez useApolloClient pour appeler une query ou une mutation dans un handler personnalisé.
const onGetBusiness = async () => {
const { data } = await client.query({ query: BusinessQuery });
return data.business.business;
};
const onCreateBusiness = async (input) => {
const { data } = await client.mutate({
mutation: CreateBusiness,
variables: { input }
});
return data.createBusiness.business;
};Bonnes pratiques
- Passer uniquement les métadonnées nécessaires dans context.
- Vérifier que la tâche existe dans la configuration OIP avant utilisation.
- Centraliser la logique métier dans des handlers personnalisés.
- Éviter d’exécuter des opérations lourdes dans une transition.
Références liées
- Gestion des Tasks
- Documentation GraphQL OIP Project Starter
- Changelog OIP Starter Utils