"use client"; import MainContext from "@/app/contexts/mainContext"; import { backendUrl, serAxios } from "@/utils/axios"; import Image from "next/image"; import React, { useContext, useEffect, useState } from "react"; import { ChevronDown, Search } from "lucide-react"; import { useCurrency } from "@/app/contexts/currencyContext"; const getAuthPageData = async () => { // Fetch data from external API try { const res = await serAxios.get("/dynamic-ui/page/auth/"); const data = res.data; return data.data; } catch (error) { console.error("Error fetching data:", error); return null; } // Pass data to the page via props }; const LoginSignup = () => { const [isLogin, setIsLogin] = useState(true); const { loginUser, registerUser } = useContext(MainContext); const [loginPageData, setLoginPageData] = useState(null); const [formData, setFormData] = useState({ email: "", password: "", confirmPassword: "", country: "", }); const [countries, setCountries] = useState([]); const [isCountryDropdownOpen, setIsCountryDropdownOpen] = useState(false); const [isLoading, setIsLoading] = useState(false); const [searchTerm, setSearchTerm] = useState(""); const [filteredCountries, setFilteredCountries] = useState([]); const { setUserCountry } = useCurrency(); const handleInputChange = (e) => { const { name, value } = e.target; setFormData((prevData) => ({ ...prevData, [name]: value, })); }; const handleCountrySelect = (country) => { setFormData((prevData) => ({ ...prevData, country: country, })); setIsCountryDropdownOpen(false); setSearchTerm(""); }; const fetchCountries = async () => { setIsLoading(true); try { const response = await fetch('https://countriesnow.space/api/v0.1/countries/'); const data = await response.json(); if (!data.error) { setCountries(data.data); setFilteredCountries(data.data); } } catch (error) { console.error("Error fetching countries:", error); } finally { setIsLoading(false); } }; const handleSubmit = async (e) => { e.preventDefault(); if (isLogin) { loginUser(formData); } else { // If registering, also set the user's country for currency purposes if (formData.country) { setUserCountry(formData.country); } registerUser(formData); } }; const toggleMode = () => { setIsLogin(!isLogin); setFormData({ email: "", password: "", confirmPassword: "", country: "" }); setSearchTerm(""); }; useEffect(() => { getAuthPageData().then((data) => { setLoginPageData(data); }); if (!isLogin) { fetchCountries(); } }, [isLogin]); // Filter countries based on search term useEffect(() => { if (countries.length > 0) { const filtered = countries.filter(country => country.country.toLowerCase().includes(searchTerm.toLowerCase()) ); setFilteredCountries(filtered); } }, [searchTerm, countries]); return (