"use client"; import { Select, SelectContent, SelectGroup, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select"; import { useState } from "react"; import { toast } from "sonner"; import type { GroupRole } from "@album/contracts"; import { api } from "@/trpc/react"; import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import { Badge } from "@/components/ui/badge"; import { Card, CardContent, CardDescription, CardHeader, CardTitle, } from "@/components/ui/card"; export function GroupPeople({ groupId, canManage, }: { groupId: string; canManage: boolean; }) { const utils = api.useUtils(); const members = api.group.members.useQuery({ groupId }); const [email, setEmail] = useState(""); const [role, setRole] = useState("member"); const [code, setCode] = useState(null); const setMember = api.group.setMember.useMutation({ onSuccess: async () => { toast.success("Member updated"); setEmail(""); await utils.group.members.invalidate({ groupId }); }, onError: (error) => toast.error(error.message), }); const invite = api.group.inviteEmail.useMutation({ onSuccess: () => toast.success("Invite emailed"), onError: (error) => toast.error(error.message), }); const createCode = api.group.createCode.useMutation({ onSuccess: (result) => { setCode(result.code); toast.success("Invite code created"); }, onError: (error) => toast.error(error.message), }); const remove = api.group.removeMember.useMutation({ onSuccess: async () => { await utils.group.members.invalidate({ groupId }); }, onError: (error) => toast.error(error.message), }); return ( Group members People who can be added to events in this group.
    {(members.data ?? []).map((member) => (
  • {member.name}

    {member.email}

    {member.role} {canManage ? ( ) : null}
  • ))}
{canManage ? ( <>
{ formEvent.preventDefault(); setMember.mutate({ groupId, email, role }); }} > setEmail(event.target.value)} className="max-w-xs" />
{code ? (

Share this code once: {code}

) : null} ) : null}
); }