[frontend]: Auto-fetch user's selected sources

This commit is contained in:
2025-04-05 16:33:05 +01:00
parent afe344286d
commit 24c0028711

View File

@ -47,6 +47,8 @@ const menuData = [
}, },
]; ];
const customDefaultChecked = ["mainline","suburban","dart","running","not-yet-running","terminated","early","on-time","late","disabled","buses","irish-rail-trains","luas-stops","enabled","green-line","red-line","irish-rail","bus"]
const getAllDefaultCheckedIds = (data) => { const getAllDefaultCheckedIds = (data) => {
const ids = []; const ids = [];
const traverse = (items, isTopLevel = true) => { const traverse = (items, isTopLevel = true) => {
@ -135,9 +137,10 @@ const CheckboxItem = ({ item, selectedSources, setSelectedSources, enabledSource
}; };
const Sidebar = ({ selectedSources, setSelectedSources, clusteringEnabled, setClusteringEnabled, fetchData, userLocationAvailable, showFavouritesOnly, setShowFavouritesOnly }) => { const Sidebar = ({ selectedSources, setSelectedSources, clusteringEnabled, setClusteringEnabled, fetchData, userLocationAvailable, showFavouritesOnly, setShowFavouritesOnly }) => {
const [isOpen, setIsOpen] = useState(false); const [isOpen, setIsOpen] = useState(true);
const [enabledSources, setEnabledSources] = useState([]); // New state to track enabled sources const [enabledSources, setEnabledSources] = useState([]); // New state to track enabled sources
const [numberInputValue, setNumberInputValue] = useState(""); // State to manage number input value const [numberInputValue, setNumberInputValue] = useState(""); // State to manage number input value
const hasMounted = useRef(false);
// Load selected sources from cookies or set all as default checked // Load selected sources from cookies or set all as default checked
useEffect(() => { useEffect(() => {
@ -145,8 +148,7 @@ const Sidebar = ({ selectedSources, setSelectedSources, clusteringEnabled, setCl
if (savedSources) { if (savedSources) {
setSelectedSources(JSON.parse(savedSources)); setSelectedSources(JSON.parse(savedSources));
} else { } else {
const allDefaultChecked = getAllDefaultCheckedIds(menuData); setSelectedSources(customDefaultChecked);
setSelectedSources(allDefaultChecked);
} }
// Load numberInputValue from cookie // Load numberInputValue from cookie
@ -156,6 +158,13 @@ const Sidebar = ({ selectedSources, setSelectedSources, clusteringEnabled, setCl
} }
}, [setSelectedSources]); }, [setSelectedSources]);
useEffect(() => {
if (!hasMounted.current && enabledSources.length > 0) {
fetchData(enabledSources, numberInputValue);
hasMounted.current = true;
}
}, [enabledSources]);
const handleSubmit = () => { const handleSubmit = () => {
Cookies.set("selectedSources", JSON.stringify(selectedSources), { expires: 365 }); Cookies.set("selectedSources", JSON.stringify(selectedSources), { expires: 365 });
Cookies.set("numberInputValue", numberInputValue, { expires: 365 }); // Save numberInputValue to cookie Cookies.set("numberInputValue", numberInputValue, { expires: 365 }); // Save numberInputValue to cookie