import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query'; import { useToast, useTRPC } from '@barev/web'; import { useState } from 'react'; import type { Me, Role } from '../App.tsx'; import { errText, useT } from '../i18n.tsx'; import { Avatar, Dialog, Field, I, Skeleton } from '../components/kit.tsx'; const ROLES: Role[] = ['SUPERADMIN', 'SUPPORT', 'CONCIERGE', 'SALES']; export function Team({ me }: { me: Me }) { const { t } = useT(); const trpc = useTRPC(); const qc = useQueryClient(); const toast = useToast(); const list = useQuery(trpc.bo.team.list.queryOptions()); const refresh = () => qc.invalidateQueries({ queryKey: trpc.bo.team.list.queryKey() }); const update = useMutation(trpc.bo.team.update.mutationOptions({ onSuccess: refresh, onError: (e) => toast(errText(t, e), 'error') })); const [link, setLink] = useState<{ name: string; url: string } | null>(null); const linkUrl = useMutation(trpc.bo.team.linkUrl.mutationOptions({ onError: (e) => toast(errText(t, e), 'error') })); const [adding, setAdding] = useState(false); return ( <>

{t('team.title')}

{t('team.lead')}

{!list.data ? ( ) : (
{list.data.map((m) => { const roles = m.roles as Role[]; const self = m.id === me.id; return (
{m.name} {self && ({t('team.you')})}
{!m.active ? t('team.disabled') : m.telegramLinked ? t('team.tgLinked') : t('team.tgNotLinked')}
{ROLES.map((r) => { const on = roles.includes(r); return ( ); })}
{m.active && ( )} {!self && ( )}
); })}
)} setAdding(false)} onCreated={(name, url) => { setAdding(false); refresh(); setLink({ name, url }); }} /> setLink(null)} title={link ? t('team.linkTitle', { name: link.name }) : ''} footer={ } >

{t('team.linkHint')}

{link && (
{link.url}
)}
); } function AddMember({ open, onClose, onCreated }: { open: boolean; onClose: () => void; onCreated: (name: string, url: string) => void }) { const { t } = useT(); const trpc = useTRPC(); const toast = useToast(); const [name, setName] = useState(''); const [roles, setRoles] = useState(['SUPPORT']); const create = useMutation( trpc.bo.team.create.mutationOptions({ onSuccess: (r) => { onCreated(r.name, r.linkUrl); setName(''); setRoles(['SUPPORT']); }, onError: (e) => toast(errText(t, e), 'error'), }), ); return ( } > setName(e.target.value)} maxLength={80} autoFocus />
{ROLES.map((r) => ( ))}
); }