import { useEffect, useState, useMemo } from "react"; import { useNavigate, useParams } from "react-router-dom"; import { motion } from "framer-motion"; import { FaArrowLeft, FaTrash, FaUpload } from "react-icons/fa"; import { api } from "../API/api"; import { FaPlus, FaCircle } from "react-icons/fa"; import Select from 'react-select'; import canada_cities from '../assets/canada_cities.json'; import { useLoading } from "../Context/LoadingContext"; import { FiPlus } from "react-icons/fi"; const ManagePartner = () => { const { id } = useParams(); const [files, setFiles] = useState([]); const [partners, setPartners] = useState([]); const [screens, setScreens] = useState([]); const [uploading, setUploading] = useState(false); const navigate = useNavigate(); const [isEnabled, setIsEnabled] = useState(true); const { setLoading } = useLoading(); const [formData, setFormData] = useState({ transid: "", name: "", logo_url: "", open_time: "", close_time: "", address: "", city: "", state: "", pincode: "", screens: "", yt: "", scrolltext: "" }); const [selectedProvince, setSelectedProvince] = useState(null); const [selectedCity, setSelectedCity] = useState(null); const provinceOptions = useMemo( () => Object.keys(canada_cities).map((province) => ({ value: province, label: province, })), [canada_cities] ); const cityOptions = useMemo( () => selectedProvince ? canada_cities[selectedProvince.value].map((city) => ({ value: city, label: city, })) : [], [selectedProvince, canada_cities] ); useEffect(() => { fetchPartners(); fetchScreens(); }, [id]); const fetchFiles = async () => { try { const response = await api.get(`/client/files/${id}`); setFiles(response); } catch (error) { console.error("Error fetching files:", error); } }; const fetchPartners = async () => { try { const response = await api.get(`/admin/get-partner/${id}`); setPartners(response); setFormData(response[0]); if (response[0]) { setSelectedProvince({ value: response[0].state, label: response[0].state }); setSelectedCity({ value: response[0].city, label: response[0].city }); } } catch (error) { console.error("Error fetching files:", error); } }; const fetchScreens = async () => { try { const response = await api.get(`/admin/get-screen/${id}`); console.log(response) setScreens(response); console.log(response) } catch (error) { console.error("Error fetching files:", error); } }; const handleFileUpload = async (file) => { if (!file) return; setUploading(true); const formData = new FormData(); formData.append("file", file); formData.append("file_name", file.name); formData.append("client_id", id); // Attach client ID try { setLoading(true) await api.post("/files/update-partner-logo", formData, { headers: { "Content-Type": "multipart/form-data" }, }); navigate("/partners"); // Refresh file list after each successful upload fetchFiles(); } catch (error) { console.error(`File upload failed for ${file.name}:`, error); // Optionally, you could add some user feedback here for individual file failures } finally { setUploading(false); // Keep this false, as we're handling individual uploads setLoading(false) } }; const handleFileChange = async (e) => { console.log("oiouyt") await handleFileUpload(e.target.files[0]); setFormData({ ...formData, image: e.target.files[0] }); }; const handleChange = (e) => { const { name, value } = e.target; setFormData({ ...formData, [name]: value }); }; const handleProvinceChange = (selectedOption) => { setSelectedProvince(selectedOption); setSelectedCity(null); setFormData({ ...formData, state: selectedOption?.value || "" }); }; const handleCityChange = (selectedOption) => { setSelectedCity(selectedOption); setFormData({ ...formData, city: selectedOption?.value || "" }); }; const handleEdit = () => { setIsEnabled(false); }; const handleUpdate = async (e) => { e.preventDefault(); try { console.log(formData) await api.post("/admin/update-partner", formData); navigate("/partners"); } catch (error) { console.error("Error updating Partner:", error); } }; const AddScreen = async () => { try { console.log({ partnerid: id }) setLoading(true); var data = await api.post("/admin/add-screen", { partnerid: id }); console.log(data) fetchScreens(); } catch (error) { console.error("Error adding Screen:", error); } setLoading(false); } const DeleteScreen = async (id) => { try { setLoading(true); var data = await api.post("/admin/delete-screen", { screenid: id }); console.log(data) fetchScreens(); } catch (error) { console.error("Error adding Screen:", error); } setLoading(false); } const handleToggleYouTube = async (screenid, sts, idx) => { try { setLoading(true); // call your API – adjust the endpoint & payload as needed await api.post("/admin/update-screen-youtube", { screenid, sts: sts ? 1 : 0, }); fetchScreens() } catch (err) { console.error("Error toggling YouTube:", err); } finally { setLoading(false); } }; return (