"use client" import { useState } from 'react' import { useQuery, useMutation } from '@apollo/client' import { Card } from '@/components/ui/card' import { Button } from '@/components/ui/button' import { Badge } from '@/components/ui/badge' import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs' import { Users, Clock, Send, CheckCircle, XCircle, ArrowUpCircle, ArrowDownCircle } from 'lucide-react' import { OrganizationCard } from './organization-card' import { GET_MY_COUNTERPARTIES, GET_INCOMING_REQUESTS, GET_OUTGOING_REQUESTS } from '@/graphql/queries' import { RESPOND_TO_COUNTERPARTY_REQUEST, CANCEL_COUNTERPARTY_REQUEST, REMOVE_COUNTERPARTY } from '@/graphql/mutations' interface Organization { id: string inn: string name?: string fullName?: string type: 'FULFILLMENT' | 'SELLER' | 'LOGIST' | 'WHOLESALE' address?: string phones?: Array<{ value: string }> emails?: Array<{ value: string }> createdAt: string users?: Array<{ id: string, avatar?: string }> } interface CounterpartyRequest { id: string message?: string status: 'PENDING' | 'ACCEPTED' | 'REJECTED' | 'CANCELLED' createdAt: string sender: Organization receiver: Organization } export function MarketCounterparties() { const { data: counterpartiesData, loading: counterpartiesLoading, refetch: refetchCounterparties } = useQuery(GET_MY_COUNTERPARTIES) const { data: incomingData, loading: incomingLoading, refetch: refetchIncoming } = useQuery(GET_INCOMING_REQUESTS) const { data: outgoingData, loading: outgoingLoading, refetch: refetchOutgoing } = useQuery(GET_OUTGOING_REQUESTS) const [respondToRequest] = useMutation(RESPOND_TO_COUNTERPARTY_REQUEST, { onCompleted: () => { refetchIncoming() refetchCounterparties() } }) const [cancelRequest] = useMutation(CANCEL_COUNTERPARTY_REQUEST, { onCompleted: () => { refetchOutgoing() } }) const [removeCounterparty] = useMutation(REMOVE_COUNTERPARTY, { onCompleted: () => { refetchCounterparties() } }) const handleAcceptRequest = async (requestId: string) => { try { await respondToRequest({ variables: { requestId, response: 'ACCEPTED' } }) } catch (error) { console.error('Ошибка при принятии заявки:', error) } } const handleRejectRequest = async (requestId: string) => { try { await respondToRequest({ variables: { requestId, response: 'REJECTED' } }) } catch (error) { console.error('Ошибка при отклонении заявки:', error) } } const handleCancelRequest = async (requestId: string) => { try { await cancelRequest({ variables: { requestId } }) } catch (error) { console.error('Ошибка при отмене заявки:', error) } } const handleRemoveCounterparty = async (organizationId: string) => { try { await removeCounterparty({ variables: { organizationId } }) } catch (error) { console.error('Ошибка при удалении контрагента:', error) } } const formatDate = (dateString: string) => { if (!dateString) return '' try { let date: Date // Проверяем, является ли строка числом (Unix timestamp) if (/^\d+$/.test(dateString)) { // Если это Unix timestamp в миллисекундах const timestamp = parseInt(dateString, 10) date = new Date(timestamp) } else { // Обычная строка даты date = new Date(dateString) } if (isNaN(date.getTime())) { return 'Неверная дата' } return date.toLocaleDateString('ru-RU', { year: 'numeric', month: 'long', day: 'numeric' }) } catch (error) { return 'Ошибка даты' } } const counterparties = counterpartiesData?.myCounterparties || [] const incomingRequests = incomingData?.incomingRequests || [] const outgoingRequests = outgoingData?.outgoingRequests || [] return (
Управление контрагентами и заявками
У вас пока нет контрагентов
Перейдите на другие вкладки, чтобы найти партнеров
Нет входящих заявок
ИНН: {request.sender.inn}
{request.message && ("{request.message}"
)}Нет исходящих заявок
ИНН: {request.receiver.inn}
{request.message && ("{request.message}"
)}