[frontend]: Save user's selected filters to a cookie upon submit

This commit is contained in:
2025-03-05 15:21:36 +00:00
parent 7166de9b3a
commit ec0bab39bf
3 changed files with 37 additions and 52 deletions

View File

@ -1,4 +1,6 @@
import React, { useState } from "react";
import React, { useState, useEffect } from "react";
import PropTypes from 'prop-types';
import Cookies from "js-cookie";
const Sidebar = ({ selectedSources, setSelectedSources, clusteringEnabled, setClusteringEnabled, fetchData }) => {
const [isOpen, setIsOpen] = useState(true);
@ -7,9 +9,22 @@ const Sidebar = ({ selectedSources, setSelectedSources, clusteringEnabled, setCl
{ id: "IrishRailStations", name: "Irish Rail Stations" },
{ id: "LuasStops", name: "Luas Stops" },
{ id: "BusStops", name: "Bus Stops" },
{ id: "Buses", name: "Buses", },
{ id: "Buses", name: "Buses" },
];
// Load selected sources from cookies on component mount
useEffect(() => {
const savedSources = Cookies.get("selectedSources");
if (savedSources) {
setSelectedSources(JSON.parse(savedSources));
}
}, [setSelectedSources]);
const handleSubmit = () => {
Cookies.set("selectedSources", JSON.stringify(selectedSources), { expires: 7 });
fetchData();
};
return (
<div style={{
position: "absolute", top: "10px", right: "10px",
@ -52,11 +67,19 @@ const Sidebar = ({ selectedSources, setSelectedSources, clusteringEnabled, setCl
/>
<label htmlFor="toggleClustering">Cluster overlapping icons</label>
</div>
<button onClick={fetchData} style={{ marginTop: "10px" }}>Submit</button>
<button onClick={handleSubmit} style={{ marginTop: "10px" }}>Submit</button>
</div>
)}
</div>
);
};
Sidebar.propTypes = {
selectedSources: PropTypes.array.isRequired,
setSelectedSources: PropTypes.func.isRequired,
clusteringEnabled: PropTypes.bool.isRequired,
setClusteringEnabled: PropTypes.func.isRequired,
fetchData: PropTypes.func.isRequired,
};
export default Sidebar;