import type { PractitionerRole } from "fhir/r4"; import { getExplicitDefaultWorkspace, getPractitionerRoleDefaultWorkspace, type StaffWorkspace, } from "./staffRoleCatalog"; /** * The workspace a staff member opens in at sign-in. A choice made earlier in this browser wins, then a * default somebody set on any of their roles, and only then one inferred from a role's group: a founding * admin's Platform Manager role carries no default, so its inferred one must not outrank the Admin role's. */ export const chooseSignInWorkspace = ({ stored, selectedRole, roles, assigned, groupOf, }: { stored?: StaffWorkspace | null; selectedRole?: PractitionerRole; roles: PractitionerRole[]; assigned: StaffWorkspace[]; groupOf: (role: PractitionerRole) => string | undefined; }): StaffWorkspace | undefined => { const open = (workspace?: StaffWorkspace | null) => (workspace && assigned.includes(workspace) ? workspace : undefined); const explicitOf = (role: PractitionerRole) => getExplicitDefaultWorkspace(role, groupOf(role)); return open(stored) ?? open(selectedRole && explicitOf(selectedRole)) ?? roles.map(explicitOf).find((workspace) => open(workspace)) ?? open(selectedRole && getPractitionerRoleDefaultWorkspace(selectedRole, groupOf(selectedRole))) ?? roles.map((role) => getPractitionerRoleDefaultWorkspace(role, groupOf(role))).find((workspace) => open(workspace)) ?? assigned[0]; };