"use client"; import { useEffect, useState } from "react"; import { getMyOffers, Offer, toggleOffer, deleteOffer } from "@/shared/api/catalog"; import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from "@/components/ui/card"; import { Button } from "@/components/ui/button"; import { toast } from "sonner"; import Link from "next/link"; import { useRouter } from "next/navigation"; import { PlusCircle, Loader2, Pencil, Trash2, PauseCircle, PlayCircle, Image as ImageIcon } from "lucide-react"; import { useSessionStore } from "@/entities/session/store"; import { formatPrice } from "@/shared/lib/formatPrice"; export default function MyOffersPage() { const router = useRouter(); const { user, isAuth } = useSessionStore(); const [offers, setOffers] = useState([]); const [loading, setLoading] = useState(true); useEffect(() => { // Проверка прав доступа if (!isAuth) return; const isPerformer = user?.roles?.some(r => ["Master", "Company", "Candidate", "Admin"].includes(r)); if (!isPerformer) { toast.error("Чтобы создавать услуги, вам нужно стать исполнителем"); router.push("/dashboard/become-performer"); return; } const fetchOffers = async () => { try { const data = await getMyOffers(); setOffers(data || []); } catch (error) { console.error(error); toast.error("Не удалось загрузить ваши услуги"); } finally { setLoading(false); } }; fetchOffers(); }, [isAuth, user, router]); const handleToggle = async (id: string) => { try { const newStatus = await toggleOffer(id); setOffers(offers.map(o => o.id === id ? { ...o, isActive: newStatus } : o)); toast.success(newStatus ? "Услуга активирована" : "Услуга приостановлена"); } catch { toast.error("Не удалось изменить статус услуги"); } }; const handleDelete = async (id: string) => { if (!confirm("Вы уверены, что хотите удалить эту услугу?")) return; try { await deleteOffer(id); setOffers(offers.filter(o => o.id !== id)); toast.success("Услуга удалена"); } catch { toast.error("Не удалось удалить услугу"); } }; if (loading) { return (
); } if (offers.length === 0) { return (

У вас еще нет услуг

Создайте свою первую услугу, чтобы клиенты могли вас найти и предложить заказ.

); } return (

Мои услуги

{offers.map((offer) => ( {offer.title} {offer.isActive ? ( Активна ) : ( Приостановлена )} {offer.images && offer.images.length > 0 && (
Primary image
)}

{offer.description}

{offer.price.type === 2 ? Договорная : <> {formatPrice(offer.price.amount)} {offer.price.type === 1 ? "в час" : "фиксированно"} }
))}
); }