Gérer le process de l'OAV
process est un objet important qui contient des informations utiles comme l'id du projet et l'id de la vue actuelle. process est mis à jour lors de chaque transition d'une vue à l'autre.
La gestion de metadata lors des transitions est disponible à partir de la version 3.5.0 de l'OIP Core combinée à une version de l'OIP Starter Utils >= 3.0.4
Par défaut process contient l'identifiant de l'entité Project actuelle, l'identifiant de la vue actuelle ainsi que la metadata passée en paramètre lors de la dernière transition (si elle existe) :
// process
{
projectId: 'fasst-project-id',
viewId: 'current-view-id',
metadata: {
message: 'Some metadata'
}
}L'objet process est accessible depuis un composant ou un resolver graphQL d'une vue.
Récupérer le process depuis un composant
Rien de plus simple ! Veuillez tout d'abord importer le hook useProcess depuis @fasstech/oip-starter-utils/app dans votre composant.
Le hook useProcess expose un objet context qui contient les champs du process
Depuis la version v3.4.1 de la dépendance @fasstech/oip-starter-utils, l'objet context reçu en réponse du hook useProcess contient également le champ sessionId
Exemple :
import { useProcess } from '@fasstech/oip-starter-utils/app';
const Demo = () => {
const { context } = useProcess();
return (
<div>
<h2>{context.viewId.toUpperCase()}</h2>
<p>{`Project ID: ${context.projectId}`}</p>
<div>
<p>Metadata:</p>
<pre>{JSON.stringify(context.metadata, null, 2)}</pre>
</div>
</div>
);
};
export default Demo;Récupérer le process depuis un resolver
Chaque resolver d'une query ou d'une mutation graphQL reçoit en second paramètre un object context qui contient l'objet process et sessionId
C'est grâce à l'objet process que vous allez récupérer notamment l'id du projet en cours projectId dans vos resolvers.
Exemple :
export const getMagic = (args, context) => {
const { process, sessionId } = context;
// log process
console.log(process);
// out > {
// projectId: 'project-id',
// viewId: 'view-id',
// metadata: { logic: 42 }
// }
return {
foo: 'hello world!',
};
};
export default getMagic;Étendre le process
Par défaut process ne contient que projectId et viewId ainsi que metadata si elle existe.
Si vous souhaitez étendre le process, ajouter des champs additionnels et y avoir accès dans le contexte de vos composants ou de vos resolvers graphQL veuillez suivre ces trois étapes :
- Editer le type graphQL ExtendedProcessType fichier server/graphql/types/extended-process-type.mjs et définir vos champs additionnels
Depuis la version v3.4.1 de la dépendance @fasstech/oip-starter-utils, la définition du type graphQL ExtendedProcessType requiert le champ sessionID
import { gql } from 'graphql-tag';
export const ExtendedProcessType = gql`
type ExtendedProcess implements Process {
# required fields (do not remove)
projectId: ID
viewId: ID
metadata: ProcessMetadata
# required field since v3.4.1 of @fasstech/oip-starter-utils
sessionID: ID
# additional fields
message: String
}
`;- Editer la fonction extendProcess fichier server/process/extend-process.mjs pour résoudre les champs additionnels
Depuis la version v3.4.1 de la dépendance @fasstech/oip-starter-utils, l'objet process reçu en paramètre contient également le champ sessionId
export const extendProcess = async (process) => {
// resolve custom fields from your process here
// additional fields must match type definition at server/graphql/types/extended-process-type.mjs
const message = 'hello world!';
return {
...process,
// additional fields
message
};
};- Editer le fragment graphQL ProcessFragment fichier app/graphql/fragments/process.js pour définir les champs additionnels qui seront demandés coté client
Depuis la version v3.4.1 de la dépendance @fasstech/oip-starter-utils, la définition du fragment graphQL ProcessFragment requiert le champ sessionID
import { gql } from '@apollo/client';
export const ProcessFragment = gql`
fragment ProcessFragment on ExtendedProcess {
# required fields (do not remove)
projectId
viewId
metadata
# required field since v3.4.1 of @fasstech/oip-starter-utils
sessionID
# additional fields
# requested fields must match type definition at server/graphql/types/extended-process-type.mjs
message
}
`;Done ! Dans cet exemple nous avons ajouté le champ message à notre process 🚀