import React, { useState, useEffect } from 'react' import { useLocation } from 'react-router-dom' import axios from 'axios' import { Descriptions, Spin, Space, Button, message, Typography, Flex, Form, Input, Collapse } from 'antd' import { LoadingOutlined, ExportOutlined, CaretRightOutlined } from '@ant-design/icons' import IdText from '../../common/IdText' import CountrySelect from '../../common/CountrySelect' import CountryDisplay from '../../common/CountryDisplay' import TimeDisplay from '../../common/TimeDisplay' import ReloadIcon from '../../../Icons/ReloadIcon' import EditIcon from '../../../Icons/EditIcon.jsx' import XMarkIcon from '../../../Icons/XMarkIcon.jsx' import CheckIcon from '../../../Icons/CheckIcon.jsx' import useCollapseState from '../../hooks/useCollapseState' import config from '../../../../config.js' const { Title, Link } = Typography const VendorInfo = () => { const [vendorData, setVendorData] = useState(null) const [loading, setLoading] = useState(false) const [error, setError] = useState(null) const location = useLocation() const [messageApi, contextHolder] = message.useMessage() const vendorId = new URLSearchParams(location.search).get('vendorId') const [isEditing, setIsEditing] = useState(false) const [form] = Form.useForm() const [fetchLoading, setFetchLoading] = useState(true) const [collapseState, updateCollapseState] = useCollapseState('VendorInfo', { info: true }) useEffect(() => { if (vendorId) { fetchVendorDetails() } }, [vendorId]) useEffect(() => { if (vendorData) { form.setFieldsValue({ name: vendorData.name || '', website: vendorData.website || '', contact: vendorData.contact || '', country: vendorData.country || '', phone: vendorData.phone || '', email: vendorData.email || '' }) } }, [vendorData, form]) const fetchVendorDetails = async () => { try { setFetchLoading(true) const response = await axios.get( `${config.backendUrl}/vendors/${vendorId}`, { headers: { Accept: 'application/json' }, withCredentials: true } ) setVendorData(response.data) setError(null) } catch (err) { setError('Failed to fetch vendor details') messageApi.error('Failed to fetch vendor details') } finally { setFetchLoading(false) } } const startEditing = () => { updateCollapseState('info', true) setIsEditing(true) } const cancelEditing = () => { form.setFieldsValue({ name: vendorData?.name || '', website: vendorData?.website || '', contact: vendorData?.contact || '', country: vendorData?.country || '', phone: vendorData?.phone || '', email: vendorData?.email || '' }) setIsEditing(false) } const updateInfo = async () => { try { const values = await form.validateFields() setLoading(true) await axios.put(`${config.backendUrl}/vendors/${vendorId}`, values, { headers: { 'Content-Type': 'application/json' }, withCredentials: true }) setVendorData({ ...vendorData, ...values }) setIsEditing(false) messageApi.success('Vendor information updated successfully') } catch (err) { if (err.errorFields) { return } console.error('Failed to update vendor information:', err) messageApi.error('Failed to update vendor information') } finally { fetchVendorDetails() setLoading(false) } } if (fetchLoading) { return (
} />
) } if (error || !vendorData) { return (

{error || 'Vendor not found'}

) } return (
{contextHolder} updateCollapseState('info', keys.length > 0)} expandIcon={({ isActive }) => ( )} className='no-h-padding-collapse no-t-padding-collapse' > Vendor Information {isEditing ? ( <>
) } export default VendorInfo