// Le Compte en page de réglages de bureau : les rubriques à gauche, la rubrique
// choisie à droite.
//
// L'écran du Compte n'est ni remplacé, ni recopié, ni modifié. Il tient les cinq
// rubriques, leurs chargeurs, leurs éditeurs, leurs refus et la déconnexion, et
// il est monté tel quel dans le volet de droite.
//
// Cette couche ne lui parle pas par des propriétés : elle enveloppe une de ses
// pièces, la ligne d'accueil, comme `patient-view-modes` enveloppe déjà le tri
// et les vues du répertoire. Cette ligne lui donne le geste qui ouvre une
// rubrique, et la liste de gauche rejoue ce même geste : il n'existe qu'un
// chemin d'ouverture, celui du téléphone.
//
// Aucun état d'application ici, aucun appel au client d'API, aucune règle métier.
// Sous le seuil, rien n'est monté : la coque rend l'écran tel quel.
const VASCO_ACCOUNT_DESKTOP_SCREEN = AccountScreen;
// L'écran nomme sa rubrique ouverte par le titre qu'il affiche : on relit ce
// titre dans le catalogue du téléphone plutôt que d'exiger qu'il nous prévienne.
const VASCO_ACCOUNT_DESKTOP_SECTION_BY_TITLE = Object.freeze(
Object.fromEntries(Object.entries(ACCOUNT_SECTION_TITLES).map(([id, title]) => [title, id])),
);
// Le geste d'ouverture de l'accueil, retenu tant qu'une rubrique le cache. C'est
// une fermeture sur les `setState` de l'écran, stable par construction : aucune
// valeur de rendu n'y est capturée.
const VASCO_ACCOUNT_DESKTOP_GESTURE = { open: null };
// Les deux pièces enveloppées. Elles rendent l'original tel quel, des deux côtés
// du seuil : la ligne d'accueil ne fait que donner son geste, elle ne change ni
// ce qu'elle montre ni ce qu'elle fait.
const VASCO_ACCOUNT_DESKTOP_HOME_ENTRY = AccountHomeEntry;
AccountHomeEntry = function VascoAccountHomeEntryForLayout(props) {
React.useEffect(() => { VASCO_ACCOUNT_DESKTOP_GESTURE.open = props.onOpen; });
return ;
};
window.AccountHomeEntry = AccountHomeEntry;
function VascoAccountDesktopSections({ selectedId, onSelect }) {
const tokens = window.VascoUI.tokens;
const { InteractiveRow } = window.VascoUI;
return ;
}
function VascoAccountDesktopPage(props) {
const tokens = window.VascoUI.tokens;
const { PageHeader, SplitView } = window.VascoUI;
// La rubrique montree en surbrillance. C'est de l'affichage : la rubrique
// ouverte reste celle que l'ecran tient, et le seul chemin pour en changer est
// le geste de l'accueil, que la ligne d'accueil nous a donne.
const [section, setSection] = React.useState(null);
const openSection = React.useCallback((id) => {
if (!VASCO_ACCOUNT_DESKTOP_GESTURE.open) return;
VASCO_ACCOUNT_DESKTOP_GESTURE.open(id);
setSection(id);
}, []);
// Un volet de droite qui montre l'accueil redirait la liste de gauche : la
// première rubrique s'ouvre d'emblée, par la porte de l'écran.
React.useEffect(() => {
if (section || !VASCO_ACCOUNT_DESKTOP_GESTURE.open) return;
openSection(ACCOUNT_HOME_ENTRIES[0].id);
});
// L'identité vient du même endroit que celle de l'écran : le répertoire de
// session tenu par le client d'API, dont l'écran part lui aussi. La page ne
// recharge rien et n'en tient pas une seconde copie ; elle compose la même
// phrase, avec la même table de civilités que l'accueil du téléphone.
const profile = window.VASCO_RUNTIME?.account?.profile || null;
const clinic = props.clinicContext || null;
const subtitle = profile ? [
[AC_SALUTATIONS[profile.salutation], profile.given_name, profile.family_name]
.filter(Boolean).join(' '),
profile.specialty || null,
clinic?.department ? clinic.organization?.name || null : null,
clinic?.department
? [clinic.clinic?.name, clinic.department.name].filter(Boolean).join(' · ') : null,
].filter(Boolean).join(' · ') : null;
return
{/* La déconnexion n'est pas redite ici : elle vit dans la rubrique Sécurité,
où l'écran la tient déjà, avec sa garde d'occupation et son avis à la
coque. Un second bouton en aurait été une copie. */}
}
detail={} />
;
}
window.VascoAccountDesktop = VascoAccountDesktopPage;
// Au bureau, le Compte est une page de réglages en deux volets : les rubriques à
// gauche, la rubrique choisie à droite. C'est le même écran, les mêmes
// chargeurs, la même déconnexion ; seule la navigation entre rubriques change de
// forme. La coque téléphone n'a rien à en savoir : on enveloppe le symbole, dans
// sa dernière version, comme les autres couches produit le font déjà.
AccountScreen = function VascoAccountScreenForLayout(props) {
if (window.VascoUI.useLayout() === 'desktop') return ;
return ;
};
window.AccountScreen = AccountScreen;