Clerk Blocks

session-management-1

A simple session management card.

Sessions
DeviceDetailLast SeenActions

Macintosh

Active

Chrome 141.0.0.0

f6e6:991a:9715:10aa:411d:5bc3:36c5:617d (New York City)Today at 5:17 AM

iPhone

Active

Safari 13.0.3

3f2a:0b9c:abcd:1f2e:77a0:04d1:9e2b:0c3f (New York City)Today at 5:17 AM

Installation

npx shadcn@latest add https://shadcn-ui-clerk-blocks.vercel.app/r/session-management-1.json

Usage

Basic

import SessionManagement1 from "@/components/session-management-1";
<SessionManagement1 />

With Manual Fetching

Server

page.tsx
import SessionManagement1 from "@/components/session-management-1";
import { fetchSessions } from "@/components/session-management-1/fetchers";

export default async function Page() {
  const sessions = await fetchSessions();

  if (!sessions) return;

  return <SessionManagement1 sessions={sessions} />;
}

Client

api/sessions/route.ts
import { fetchSessions } from "@/components/session-management-1/fetchers";

export async function GET() {
  const sessions = await fetchSessions();

  if (!sessions) {
    throw new Error("Failed to retrieve sessions.");
  }

  return Response.json({ sessions });
}
page.tsx
"use client";

import { useEffect, useState } from "react";
import { Session } from "@clerk/backend";
import SessionManagement1Inner from "@/components/session-management-1/inner";
import { formatSessions } from "@/components/session-management-1/utils";

import { Spinner } from "@/components/ui/spinner";

async function loadSessions() {
  let res = await fetch("/api/sessions");
  let { sessions }: { sessions: Session[] } = await res.json();

  return sessions;
}

export default function Page() {
  const [loading, setLoading] = useState<boolean>(true);
  const [sessions, setSessions] = useState<Session[] | null>(null);

  useEffect(() => {
    loadSessions()
      .then((s) => setSessions(s))
      .finally(() => setLoading(false));
  }, []);

  if (loading) {
    return <Spinner />;
  }

  if (!sessions) return;

  return <SessionManagement1Inner sessions={formatSessions(sessions)} />;
}

Props

Prop

Type