Skip to main content

UserTable

Implemented

Team management table — member (name + email stacked), role, status pill, venue count, last sign-in. FR/EN via the `labels` prop (the source module also exports a `USER_TABLE_LABELS_FR` bundle — note: NOT re-exported from the barrel yet). Composes the DataTable organism with a UserRow column config (two-line member cell + role/status formatters — Wave-3 L8c); rows are not interactive — role editing lives in the consumer. Exported from the barrel.

Categoryorganisms
Sourcecomponents/organisms/usertable/UserTable.tsx
AI HintExported from the barrel (the old 'kept unexported per ADR-035' note was stale — the barrel re-exports UserTable/UserTableProps/UserRow/UserRole/UserStatus). A fixed 5-column venue-team roster: zero live consumers, and it is NOT an accounts console — the super-admin UserManagement screen needs org/contact/profiles/billing/GST-QST columns plus row actions (Impersonate), which this fixed-column organism cannot host (a 2026-09-07 migration attempt was blocked for exactly this). Rows are not interactive; wire role editing in the consumer.

Tableau des membres de l'équipe (rôle + statut + lieux accessibles + dernière connexion). FR-CA : « Membres de l'équipe · Membre · Rôle · Statut · Lieux · Dernière connexion · Propriétaire · Administrateur · Producteur · Scanner · Soutien · Invité · Actif · Invité · Suspendu » — jeu EN complet via les défauts anglais de `labels`.

UserTable

Organism — Admin family (Family 8)

Tableau de gestion d'équipe à 5 colonnes fixes (membre — nom + courriel empilés, rôle, statut, lieux, dernière connexion), composé sur l'organisme DataTable. Légende visible au-dessus du tableau. Libellés localisés via la prop `labels` — le bundle `USER_TABLE_LABELS_FR` (module source, non ré-exporté du barrel) fournit les chaînes FR-CA maison. Les statuts Actif/Invité/Suspendu sont rendus en pilule sémantique accessible (paires tint/fg ADR-027, gabarits aria « Statut : {label} » / « Rôle : {label} »). Les lignes ne sont pas interactives.

Team members
MemberRoleStatusVenuesLast sign-in
Guillaume Bleau
OwnerActive12026-08-04
Marie Tremblay
ProducerActive12026-08-03
Jean-Pierre Gauthier
ScannerInvited1—
Sophie Lavoie
AdministratorActive12026-08-02
Mehdi Boudjellal
SupportSuspended02026-07-12

This component supports light and dark mode.

UserTable (EN)

Organism — Admin family (Family 8)

Variante EN — sans `labels`, les défauts anglais maison s'appliquent (Team members, Member, Role, Status, Venues, Last sign-in, Owner, Producer, Scanner, Support, Guest, Active, Invited, Suspended).

Team members
MemberRoleStatusVenuesLast sign-in
Guillaume Bleau
OwnerActive12026-08-04
Marie Tremblay
ProducerActive12026-08-03
Jean-Pierre Gauthier
ScannerInvited1—

Props

Prop
Type
Default
Description
rows*
UserRow[]
—

Lignes d'utilisateur (id, fullName, email, role, status, lastSignIn?, venueCount).

labels
UserTableLabels
English house defaults

Toutes les chaînes visibles : légende visible, en-têtes de colonnes, libellés rôle/statut, gabarits aria, message d'état vide. Valeurs FR-CA via USER_TABLE_LABELS_FR (module source, hors barrel).

ariaLabel
string
resolved caption

aria-label de la région défilable ; par défaut la légende résolue.

className
string
—

Classes additionnelles sur la racine DataTable.

Props

Preview

UserTable

Prop
Type
Required
Default
Description
rows
UserRow[]
Required
—

Row data (id, fullName, email, role, status, lastSignIn?, venueCount).

labels
UserTableLabels
Optional
English house defaults

Every user-visible string: caption, column headers, role/status labels, aria templates, empty message. FR values per the source JSDoc (a USER_TABLE_LABELS_FR bundle exists in the source module but is not barrel-exported).

ariaLabel
string
Optional
resolved caption

aria-label for the scrollable region wrapper; defaults to the resolved caption. Pass when the caption is purely decorative.

className
string
Optional
—

Additional CSS classes appended to the DataTable root.

Quick use:<UserTable />

Accessibility

ARIA roletable

ARIA

2 rules

WCAG 4.1.2

Status pill and role cell carry aria-label templates ('Status: {label}' / 'Role: {label}') so screen readers announce context

WCAG 4.1.3

Empty state announced via DataTable's role='status' aria-live='polite' row (labels.emptyMessage)

Usage

Import

tsxSnippet
import { UserTable } from "@epasslive/design-system"

Example 1

tsxSnippet
<UserTable rows={teamRows} labels={{ caption: "Membres de l'équipe", roleHeader: "Rôle", statusHeader: "Statut" }} />

Anti-patterns

— Do not fetch data directly in organisms

— Avoid tight coupling to specific data sources

Design System v4.1.0 | ePassLive