feat: remember last bank and date range in localStorage

This commit is contained in:
tiennm99 committed 2026-04-03 23:18:51 +07:00
1 parent ba1de1ae4f
commit 3418461059
1 file changed
+43 -3
+43 -3
View File
@@ -95,16 +95,56 @@ function RateTable({ results, selectedBank }) {
);
}
function loadSavedSettings() {
if (typeof window === "undefined") return null;
try {
const saved = localStorage.getItem("exchangeRateSettings");
if (!saved) return null;
const parsed = JSON.parse(saved);
return {
bank: parsed.bank || "bidv",
startDate: parsed.startDate ? new Date(parsed.startDate) : null,
endDate: parsed.endDate ? new Date(parsed.endDate) : null,
};
} catch {
return null;
}
}
function saveSettings(bank, startDate, endDate) {
try {
localStorage.setItem("exchangeRateSettings", JSON.stringify({
bank,
startDate: startDate?.toISOString(),
endDate: endDate?.toISOString(),
}));
} catch { /* ignore quota errors */ }
}
export default function ExchangeRateViewer() {
const [startDate, setStartDate] = useState(() => subDays(new Date(), 7));
const [endDate, setEndDate] = useState(() => new Date());
const [selectedBank, setSelectedBank] = useState("bidv");
const [startDate, setStartDate] = useState(() => {
const saved = loadSavedSettings();
return saved?.startDate || subDays(new Date(), 7);
});
const [endDate, setEndDate] = useState(() => {
const saved = loadSavedSettings();
return saved?.endDate || new Date();
});
const [selectedBank, setSelectedBank] = useState(() => {
const saved = loadSavedSettings();
return saved?.bank || "bidv";
});
const [isLoading, setIsLoading] = useState(false);
const [error, setError] = useState("");
const [results, setResults] = useState([]);
const [hasFetched, setHasFetched] = useState(false);
const [progress, setProgress] = useState(null);
// Persist settings to localStorage
useEffect(() => {
saveSettings(selectedBank, startDate, endDate);
}, [selectedBank, startDate, endDate]);
const handleFetch = useCallback(async () => {
if (!startDate || !endDate) {
setError("Please select both start and end dates");