Open History to see the last commit
1import { type EnvironmentId, sessionGrantsScope } from "@t3tools/contracts";
2import {
3 AUTH_SCOPE_OPTIONS,
4 sessionPermissionsUnavailableMessage,
5} from "@t3tools/shared/authScopeOptions";
6import { useEnvironmentSessionState } from "~/state/session";
7
8export function SessionPermissions({
9 environmentId,
10 connected,
11 routeContext = false,
12}: {
13 readonly environmentId: EnvironmentId;
14 readonly connected: boolean;
15 readonly routeContext?: boolean;
16}) {
17 const session = useEnvironmentSessionState(environmentId);
18 return connected && !session.hasError && !session.isPending && session.data?.authenticated ? (
19 <div className="space-y-3 py-3 text-meta">
20 <p className="text-muted-foreground">
21 {routeContext
22 ? "These permissions apply to your active route. Other routes may have different permissions."
23 : "These permissions apply to this client’s current connection."}
24 </p>
25 <ul className="grid gap-x-6 gap-y-2 sm:grid-cols-2">
26 {AUTH_SCOPE_OPTIONS.map(({ scope, title }) => (
27 <li key={scope} className="flex items-start justify-between gap-3">
28 <span>{title}</span>
29 <span className="shrink-0 text-muted-foreground">
30 {sessionGrantsScope(session.data!, scope) ? "Allowed" : "Not granted"}
31 </span>
32 </li>
33 ))}
34 </ul>
35 </div>
36 ) : (
37 <p className="py-3 text-meta text-muted-foreground">
38 {sessionPermissionsUnavailableMessage({
39 connected,
40 failed: session.hasError,
41 rejected: !session.hasError && !session.isPending && session.data?.authenticated === false,
42 })}
43 </p>
44 );
45}