import React, { useState } from "react"; import { Button } from "@/components/ui/button"; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select"; import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogTrigger } from "@/components/ui/dialog"; import { Badge } from "@/components/ui/badge"; import { User, Clock, Coffee, Plane, UserX, Wifi } from "lucide-react"; import { useToast } from "@/hooks/use-toast"; export interface UserStatus { id: string; name: string; icon: React.ReactNode; color: string; bgColor: string; } const userStatuses: UserStatus[] = [ { id: "online", name: "Онлайн", icon: , color: "text-green-600", bgColor: "bg-green-100 dark:bg-green-900/20" }, { id: "working", name: "На работе", icon: , color: "text-blue-600", bgColor: "bg-blue-100 dark:bg-blue-900/20" }, { id: "break", name: "На перерыве", icon: , color: "text-yellow-600", bgColor: "bg-yellow-100 dark:bg-yellow-900/20" }, { id: "vacation", name: "В отпуске", icon: , color: "text-purple-600", bgColor: "bg-purple-100 dark:bg-purple-900/20" }, { id: "absent", name: "Отсутствует", icon: , color: "text-red-600", bgColor: "bg-red-100 dark:bg-red-900/20" }, { id: "busy", name: "Занят", icon: , color: "text-orange-600", bgColor: "bg-orange-100 dark:bg-orange-900/20" } ]; interface UserStatusSelectorProps { currentStatus: string; onStatusChange: (statusId: string) => void; userName: string; } export function UserStatusSelector({ currentStatus, onStatusChange, userName }: UserStatusSelectorProps) { const [isOpen, setIsOpen] = useState(false); const { toast } = useToast(); const handleStatusChange = (statusId: string) => { onStatusChange(statusId); setIsOpen(false); const status = userStatuses.find(s => s.id === statusId); toast({ title: "Статус обновлен", description: `Ваш статус изменен на "${status?.name}"`, }); }; const currentStatusObj = userStatuses.find(s => s.id === currentStatus) || userStatuses[0]; return ( {userName.split(' ').map(n => n[0]).join('').slice(0, 2)} {userName} {currentStatusObj.icon} {currentStatusObj.name} Изменить статус {userStatuses.map((status) => ( handleStatusChange(status.id)} > {status.icon} {status.name} ))} ); } export function getStatusBadge(statusId: string, darkMode: boolean = false) { const status = userStatuses.find(s => s.id === statusId) || userStatuses[0]; if (darkMode) { // Цвета для темного фона боковой панели const darkColors = { 'online': 'bg-green-500/20 text-green-300', 'working': 'bg-blue-500/20 text-blue-300', 'break': 'bg-yellow-500/20 text-yellow-300', 'vacation': 'bg-purple-500/20 text-purple-300', 'absent': 'bg-red-500/20 text-red-300', 'busy': 'bg-orange-500/20 text-orange-300' }; const colorClass = darkColors[status.id as keyof typeof darkColors] || darkColors.online; return ( {status.icon} {status.name} ); } return ( {status.icon} {status.name} ); } export { userStatuses };