import React, { useState, useEffect } from 'react'; import axiosInstance from '../../src/axiosSecure'; import common from '../../src/helpers/common'; //import { is } from 'date-fns/locale'; function PublisherSearchBox({ selectedId, onChange, isFocused, filterDate, showSearch = true, showList = false, showAllAuto = false, infoText = " Семеен глава" }) { const [selectedItem, setSelectedItem] = useState(null); const [searchText, setSearchText] = useState(''); const [publishers, setPublishers] = useState([]); const [searchResults, setSearchResults] = useState([]); const [selectedDate, setSelectedDate] = useState(filterDate); useEffect(() => { fetchPublishers(); }, []); // Empty dependency array ensures this useEffect runs only once const fetchPublishers = async () => { console.log("fetchPublishers called"); try { let url = `/api/?action=filterPublishers&select=id,firstName,lastName,email,isactive&searchText=${searchText}&availabilities=false`; if (filterDate) { url += `&filterDate=${common.getISODateOnly(filterDate)}`; } if (showList) { url += `&assignments=true`; } const { data: publishersData } = await axiosInstance.get(url); //setPublishers(publishersData); const activePublishers = publishersData.filter(publisher => publisher.isactive === true); setPublishers(activePublishers); } catch (error) { // Handle errors console.error("Error fetching publishers:", error); } }; const handleHeadSelection = (pub) => { setSearchText(''); setSearchResults([]); setSelectedItem(pub); onChange(pub); // Pass the selected parent to the parent component }; //allows us to trigger a focus on the input field when we trigger to show the search box from outside const inputRef = React.useRef(null); useEffect(() => { console.log("isFocused changed = ", isFocused); if (isFocused && inputRef.current) { inputRef.current.focus(); } }, [isFocused]); // Update selectedDate filter from outside // useEffect(() => { // setSelectedDate(filterDate); // console.log("filterDate changed = ", filterDate); // }, [filterDate]); // Update publishers when filterDate or showList changes useEffect(() => { fetchPublishers(); }, [filterDate, showList]); // Update selectedItem when selectedId changes and also at the initial load useEffect(() => { if (publishers) { const head = publishers.find((publisher) => publisher.id === selectedId); if (head) { //setSearchText(`${head.firstName} ${head.lastName}`); setSelectedItem(head); } } }, [selectedId, publishers]); // Update searchResults when searchText or publishers change useEffect(() => { if (searchText || showAllAuto) { const filteredResults = publishers.filter((publisher) => { const fullName = `${publisher.firstName} ${publisher.lastName} `.toLowerCase(); return fullName.includes(searchText.trim().toLowerCase()) || publisher.email.toLowerCase().includes(searchText.trim().toLowerCase()); }); setSearchResults(filteredResults); } else { setSearchResults([]); } }, [searchText, publishers]); return (
{showSearch ? ( <> setSearchText(e.target.value)} onFocus={() => { isFocused = true; }} className="textbox" placeholder={`${selectedItem?.firstName || ""} ${selectedItem?.lastName || ""}`} /> {(showSearch) && (searchResults.length > 0 || showAllAuto) && ( )} {selectedItem && infoText && (

{infoText}: {selectedItem.firstName} {selectedItem.lastName}

)} ) : null} {showList ? ( // Display only clickable list of all publishers ) : null}
); } export default PublisherSearchBox;