Skip to Content
DocumentationWorkspacesImplémentation : sous le capot

Implémentation : sous le capot

L’état de Workspace v2 est géré par le store d’espaces de travail du framework. La plupart du code applicatif doit utiliser les APIs publiques au lieu de modifier directement le store :

  • launchWorkspace2 pour ouvrir ou restaurer un espace de travail
  • launchWorkspaceGroup2 pour ouvrir un groupe avant le premier lancement de workspace lorsque votre application a besoin d’un contexte de groupe ou d’un menu d’actions app-wide
  • closeWorkspaceGroup2 pour fermer le groupe actuel
  • Workspace2DefinitionProps.closeWorkspace pour fermer un espace de travail depuis son composant
  • Workspace2DefinitionProps.launchChildWorkspace pour ouvrir des espaces de travail enfants dans la même fenêtre

Forme du store

Le store v2 suit les définitions enregistrées et l’interface actuellement ouverte :

  • registeredGroupsByName - définitions de groupes enregistrées depuis workspaceGroups2
  • registeredWindowsByName - définitions de fenêtres enregistrées depuis workspaceWindows2
  • registeredWorkspacesByName - définitions d’espaces de travail enregistrées depuis workspaces2
  • openedGroup - le groupe actuellement ouvert et ses props de groupe
  • openedWindows - les fenêtres ouvertes dans ce groupe, y compris la pile d’espaces de travail de chaque fenêtre
  • isMostRecentlyOpenedWindowHidden - indique si la fenêtre au premier plan est actuellement masquée
  • workspaceTitleByWorkspaceName - les titres fournis par chaque wrapper <Workspace2> rendu

Chaque fenêtre ouverte contient windowName, props, maximized et openedWorkspaces. Chaque espace de travail ouvert stocke son workspaceName, ses props de lancement, son uuid généré et son état hasUnsavedChanges.

Lire le contexte d’un espace de travail

Dans un composant d’espace de travail, utilisez les props fournies par Workspace2DefinitionProps ou le hook useWorkspace2Context pour lire le contexte de l’espace de travail courant :

import { useWorkspace2Context } from '@openmrs/esm-framework'; export function WorkspaceDebugPanel() { const { workspaceName, windowName, workspaceProps, windowProps, groupProps } = useWorkspace2Context(); return ( <pre> {JSON.stringify( { workspaceName, windowName, workspaceProps, windowProps, groupProps, }, null, 2, )} </pre> ); }

Le store d’espaces de travail de bas niveau est un détail d’implémentation. Préférez les APIs publiques de lancement, fermeture, groupe et contexte sauf si vous travaillez dans le framework lui-même. Si un composant doit fermer toute la fenêtre au lieu de se fermer seulement lui-même avec ses espaces de travail enfants, appelez closeWorkspace({ closeWindow: true }).

Changements non enregistrés

Workspace v2 n’utilise pas promptBeforeClosing. À la place, transmettez hasUnsavedChanges au wrapper <Workspace2> :

<Workspace2 title={t('editVisit', 'Edit visit')} hasUnsavedChanges={formState.isDirty}> {/* workspace content */} </Workspace2>

Quand un utilisateur ferme un espace de travail, ferme une fenêtre, change des props incompatibles ou change de groupe, le système vérifie les indicateurs hasUnsavedChanges des espaces de travail concernés et affiche une confirmation si nécessaire.

Après l’enregistrement, fermez l’espace de travail sans afficher l’invite de changements non enregistrés :

await closeWorkspace({ discardUnsavedChanges: true });
Dernière mise à jour le