"use client"; import { Info, Paperclip, ShieldUser, ShoppingBag, User, UserCog, } from "lucide-react"; import Link from "next/link"; import { cn } from "~/lib/utils"; import { Button, buttonVariants } from "~/components/ui/button"; import Image from "next/image"; import { Popover, PopoverContent, PopoverTrigger, } from "~/components/ui/popover"; import { AlertDialog, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogTitle, AlertDialogTrigger, AlertDialogCancel, AlertDialogAction, } from "~/components/ui/alert-dialog"; import { api } from "~/utils/api"; import { useRouter } from "next/router"; import toast from "react-hot-toast"; import { Separator } from "~/components/ui/separator"; import { EtichetteDisplayer } from "~/components/etichette"; import type { Session } from "~/server/api/trpc"; import type { ChatUserInfo } from "~/server/services/chat.service"; import type { ChatsChatid } from "~/schemas/public/Chats"; import type { OnlineStatus } from "~/server/sse"; import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, } from "~/components/ui/tooltip"; import { useCallback } from "react"; import { UserAvatar } from "~/components/user_avatar"; type ChatTopbarProps = { chatId: ChatsChatid; userData: Session; chatUserData: ChatUserInfo; onlineStatus: OnlineStatus[]; }; export default function ChatTopbar({ chatId, userData, chatUserData, onlineStatus, }: ChatTopbarProps) { const utils = api.useUtils(); const { mutate: deletechat } = api.chat.deleteChat.useMutation({ onSuccess: async () => { await utils.chat.getActiveChats.invalidate(); await utils.users.getActiveUsersWithoutChat.invalidate(); await router.push("/area-riservata/admin/chats/"); }, }); const router = useRouter(); const { mutate: swap } = api.auth.swapUser.useMutation({ onSuccess: async () => { toast.success("Utente cambiato con successo"); await router.push("/area-riservata/dashboard"); router.reload(); }, }); const handleDeleteChat = useCallback(() => { deletechat({ chatId }); }, [chatId, deletechat]); const handleSwapUser = useCallback(() => { swap({ id: chatUserData.id }); }, [chatUserData, swap]); return (
{!userData.isAdmin ? ( Infoalloggi logo ) : ( )}
{!userData.isAdmin ? "Chat Infoalloggi" : chatUserData.username} {userData.isAdmin && }
{userData.isAdmin && ( )}
); } const UserStatus = ({ onlineStatus, userData, }: { onlineStatus: OnlineStatus[]; userData: Session; }) => (
{onlineStatus.map((user, idx) => user.isAdmin ? ( {user.nome} {idx < onlineStatus.length - 1 && ","}

Admin Infoalloggi

) : ( {user.nome} {!userData.isAdmin && " (Tu)"} {idx < onlineStatus.length - 1 && ", "} ), )}
); const AdminPopover = ({ chatUserData, handleSwapUser, handleDeleteChat, }: { chatUserData: ChatUserInfo; handleSwapUser: () => void; handleDeleteChat: () => void; }) => (
Profilo Ordini Allegati Sei assolutamente sicuro? Questa azione non può essere annullata. Questo eliminerà definitivamente la chat e rimuoverà i dati dai nostri server. Annulla Continua
);