import React, { useState, useEffect, useCallback } from "react"; import { message } from "antd"; import { DefaultModal } from "../../Components/Modal/DefaultModal"; import "../Styles/FooterForm.scss"; import { getSession } from "../../Services/others.js"; import { getAdminPanel, postAdminPanel, putAdminPanel, deleteAdminPanel } from '../../features/AdminPanel/AdminPanel.js'; import { useDispatch } from 'react-redux'; import { Messages } from '../../Components/Notifications/Messages.jsx'; import { uploadImage } from "../../features/applications/bannerImage.js"; const FooterForm = ({ sectionKey = null }) => { const dispatch = useDispatch(); const [footerData, setFooterData] = useState([]); const [isModalOpen, setIsModalOpen] = useState(false); const [title, setTitle] = useState(""); const [description, setDescription] = useState(""); const [emailFields, setEmailFields] = useState([{ value: '', uniqueId: null }]); const [phoneFields, setPhoneFields] = useState([{ value: '', uniqueId: null }]); const [socialLink, setSocialLink] = useState(""); const [editingIndex, setEditingIndex] = useState(-1); const [editData, setEditData] = useState(null); const [titleError, setTitleError] = useState(""); const [descriptionError, setDescriptionError] = useState(""); const [messageData, setMessageData] = useState(null); const [messageType, setMessageType] = useState(null); const UserId = getSession('UserId') || 1; useEffect(() => { const getFooterData = async () => { const res = await dispatch(getAdminPanel({ sectionName: sectionKey }))?.unwrap(); if (res?.data?.statusCode === 1) { setFooterData(res?.data?.data); } else { setFooterData([]); setMessageData(res?.data?.response); setMessageType("error"); } }; if (sectionKey) { getFooterData(); } }, [sectionKey, dispatch]); const openModal = () => { setIsModalOpen(true); }; const closeModal = () => { setIsModalOpen(false); setTitle(""); setDescription(""); setEmailFields([{ value: '', uniqueId: null }]); setPhoneFields([{ value: '', uniqueId: null }]); setSocialLink(""); setEditingIndex(-1); setEditData(null); setTitleError(""); setDescriptionError(""); }; const handleClear = () => { setTitle(""); setDescription(""); setEmailFields([{ value: '', uniqueId: null }]); setPhoneFields([{ value: '', uniqueId: null }]); setSocialLink(""); setTitleError(""); setDescriptionError(""); }; const addEmailField = () => { setEmailFields([...emailFields, { value: '', uniqueId: null }]); }; const removeEmailField = (index) => { if (emailFields.length <= 1) return; // Don't remove if only one field const updated = emailFields.filter((_, i) => i !== index); setEmailFields(updated); }; const updateEmailField = (index, value) => { const updated = emailFields.map((email, i) => i === index ? { ...email, value } : email); setEmailFields(updated); }; const addPhoneField = () => { setPhoneFields([...phoneFields, { value: '', uniqueId: null }]); }; const removePhoneField = (index) => { if (phoneFields.length <= 1) return; // Don't remove if only one field const updated = phoneFields.filter((_, i) => i !== index); setPhoneFields(updated); }; const updatePhoneField = (index, value) => { const updated = phoneFields.map((phone, i) => i === index ? { ...phone, value } : phone); setPhoneFields(updated); }; const handleSave = async () => { let hasError = false; if (!title.trim()) { setTitleError("Title is required"); hasError = true; } else setTitleError(""); if (!description.trim()) { setDescriptionError("Description is required"); hasError = true; } else setDescriptionError(""); if (hasError) { message.error("Please fix the highlighted fields"); return; } // Build clean HomePageDetails array - only current form data const homePageDetails = []; // Add emails (only non-empty) emailFields.forEach(email => { if (email.value && email.value.trim()) { homePageDetails.push({ DtlName: 'Email', DtlDesc: email.value.trim(), DtlHdr: '', DtlImgUrl: '', RStatus: 'A', CreatedBy: UserId, ...(email.uniqueId && { UniqueId: email.uniqueId }) }); } }); // Add phones (only non-empty) phoneFields.forEach(phone => { if (phone.value && phone.value.trim()) { homePageDetails.push({ DtlName: 'Phone', DtlHdr: phone.value.trim(), DtlDesc: '', DtlImgUrl: '', RStatus: 'A', CreatedBy: UserId, ...(phone.uniqueId && { UniqueId: phone.uniqueId }) }); } }); // Check if data exists or if we're editing const hasExistingData = footerData.length > 0; const isEditing = editingIndex > -1 && editData; const shouldUpdate = isEditing || hasExistingData; const data = { SectionName: sectionKey, SectionHdr: title.trim(), SectionDesc: description.trim(), SectionImgUrl: '', HomePageDetails: homePageDetails, CreatedBy: UserId, RStatus: 'A', ...(shouldUpdate ? { SectionId: editData?.SectionId || footerData[0]?.SectionId } : {}), }; console.log("API Request Data:", data); console.log("Has Existing Data:", hasExistingData); console.log("Is Editing:", isEditing); console.log("Should Update:", shouldUpdate); try { const apiAction = shouldUpdate ? putAdminPanel : postAdminPanel; console.log("API Action:", shouldUpdate ? "PUT" : "POST"); const res = await dispatch(apiAction(data))?.unwrap(); console.log(`${shouldUpdate ? "Put" : "Post"} response:`, res); const success = res?.data?.statusCode === 1; const messageText = shouldUpdate ? "Footer Updated Successfully" : "Footer Added Successfully"; if (success) { setMessageData(messageText); setMessageType("success"); // Refresh data const refreshRes = await dispatch( getAdminPanel({ sectionName: sectionKey }) )?.unwrap(); if (refreshRes?.data?.statusCode === 1) { setFooterData(refreshRes.data.data); } } else { const errorMessage = res?.response || res?.data?.response || res?.message || "Error saving footer"; console.log("API Error Response:", errorMessage); setMessageData(errorMessage); setMessageType("error"); } } catch (error) { console.error("API Error Details:", { message: error?.message, response: error?.response, status: error?.response?.status, data: error?.response?.data, }); let errorMessage = "Network error occurred"; if (error?.response?.data?.message) { errorMessage = error.response.data.message; } else if (error?.response?.data?.response) { errorMessage = error.response.data.response; } else if (error?.message) { errorMessage = error.message; } setMessageData(errorMessage); setMessageType("error"); } closeModal(); }; const handleEdit = (footer, index) => { setTitle(footer.SectionHdr || ""); setDescription(footer.SectionDesc || ""); if (footer.HomePageDetails && footer.HomePageDetails.length > 0) { const emails = footer.HomePageDetails.filter(d => d.DtlName === 'Email').map(d => ({ value: d.DtlDesc || '', uniqueId: d.UniqueId || null })); const phones = footer.HomePageDetails.filter(d => d.DtlName === 'Phone').map(d => ({ value: d.DtlHdr || '', uniqueId: d.UniqueId || null })); setEmailFields(emails.length > 0 ? emails : [{ value: '', uniqueId: null }]); setPhoneFields(phones.length > 0 ? phones : [{ value: '', uniqueId: null }]); } else { setEmailFields([{ value: '', uniqueId: null }]); setPhoneFields([{ value: '', uniqueId: null }]); } setEditingIndex(index); setEditData(footer); openModal(); }; const handleToggleActive = async (index) => { const footer = footerData[index]; const newStatus = footer.RStatus === 'A' ? 'D' : 'A'; const deleteData = { sectionId: footer.SectionId, activeStatus: newStatus, updatedBy: UserId }; try { const res = await dispatch(deleteAdminPanel(deleteData))?.unwrap(); if (res?.data?.statusCode === 1) { setMessageData(`Footer ${newStatus === 'A' ? 'activated' : 'deactivated'} successfully`); setMessageType('success'); const refreshRes = await dispatch(getAdminPanel({ sectionName: sectionKey }))?.unwrap(); if (refreshRes?.data?.statusCode === 1) { setFooterData(refreshRes.data.data); } } else { setMessageData('Error updating status'); setMessageType('error'); } } catch (error) { setMessageData('Network error occurred'); setMessageType('error'); } }; const onComplete = useCallback(() => { setMessageData(null); setMessageType(null); }, []); return (
Manage and organize your footer content and settings.
Description: {footer.SectionDesc || "No description"}
{footer.HomePageDetails && footer.HomePageDetails.length > 0 && ( <> {footer.HomePageDetails.filter(d => d.DtlName === 'Email').length > 0 && (Emails:
{footer.HomePageDetails.filter(d => d.DtlName === 'Email').map((email, idx) => (Phones:
{footer.HomePageDetails.filter(d => d.DtlName === 'Phone').map((phone, idx) => (Status: {footer.RStatus?.trim() === 'A' ? 'Active' : 'Inactive'}
Get started by creating your first footer section