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 });
}}
/>
>
);
}
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 (
);
}