From ed55c696cd083bfaa5429082a9c5edd4ebde0cd8 Mon Sep 17 00:00:00 2001
From: Sebastien Castiel <sebastien@castiel.me>
Date: Tue, 5 Dec 2023 17:39:05 -0500
Subject: First version

---
 src/app/groups/recent-group-list.tsx | 43 ++++++++++++++++++++++++++++++++++++
 1 file changed, 43 insertions(+)
 create mode 100644 src/app/groups/recent-group-list.tsx

(limited to 'src/app/groups/recent-group-list.tsx')

diff --git a/src/app/groups/recent-group-list.tsx b/src/app/groups/recent-group-list.tsx
new file mode 100644
index 0000000..e728193
--- /dev/null
+++ b/src/app/groups/recent-group-list.tsx
@@ -0,0 +1,43 @@
+'use client'
+import { getRecentGroups } from '@/app/groups/recent-groups-helpers'
+import { Button } from '@/components/ui/button'
+import Link from 'next/link'
+import { useEffect, useState } from 'react'
+import { z } from 'zod'
+
+const recentGroupsSchema = z.array(
+  z.object({
+    id: z.string().min(1),
+    name: z.string(),
+  }),
+)
+type RecentGroups = z.infer<typeof recentGroupsSchema>
+
+type State = { status: 'pending' } | { status: 'success'; groups: RecentGroups }
+
+export function RecentGroupList() {
+  const [state, setState] = useState<State>({ status: 'pending' })
+
+  useEffect(() => {
+    const groupsInStorage = getRecentGroups()
+    setState({ status: 'success', groups: groupsInStorage })
+  }, [])
+
+  return (
+    <ul className="flex flex-col gap-2 mt-2">
+      {state.status === 'pending' ? (
+        <li>
+          <em>Loading recent groups…</em>
+        </li>
+      ) : (
+        state.groups.map(({ id, name }) => (
+          <li key={id}>
+            <Button asChild variant="outline">
+              <Link href={`/groups/${id}`}>{name}</Link>
+            </Button>
+          </li>
+        ))
+      )}
+    </ul>
+  )
+}
-- 
cgit v1.3

