Saving inputs to browser storage

This commit is contained in:
2025-02-08 10:09:17 +00:00
parent 71d7f5cb07
commit 36c4502595
4 changed files with 91 additions and 10 deletions

65
src/store.js Normal file
View File

@@ -0,0 +1,65 @@
import * as yup from "yup";
const DEFAULTS_KEY = 'defaults';
const RECORDED_KEY = 'recorded';
const defaultsSchema = yup.object({
startTime: yup.string().required(),
target: yup.string().required(),
}).required();
const recordedSchema = yup.object({
recorded: yup.string().required(),
updated: yup.number().required().nullable()
}).required();
function getJsonValue(key, defaultValue = {}) {
const item = localStorage.getItem(key);
if (item != null) {
try {
const data = JSON.parse(item);
if (typeof data === 'object') {
return data;
}
} catch (e) {
localStorage.removeItem(key);
return defaultValue;
}
}
return defaultValue;
}
export function getStoredDefaults() {
const value = getJsonValue(DEFAULTS_KEY);
try {
return defaultsSchema.validateSync(value);
} catch (e) {
return {};
}
}
export function setStoredDefaults(data) {
localStorage.setItem(DEFAULTS_KEY, JSON.stringify(data));
}
export function getStoredRecordedTime() {
const info = getJsonValue(RECORDED_KEY, { recorded: '', updated: null });
try {
const data = recordedSchema.validateSync(info);
if (data.updated != null) {
const startOfDay = new Date();
startOfDay.setHours(0, 0, 0, 0);
if (data.updated < startOfDay.valueOf()) {
return '';
}
}
return data.recorded;
} catch (e) {
return '';
}
}
export function setStoredRecordedTime(recorded) {
localStorage.setItem(RECORDED_KEY, JSON.stringify({ recorded, updated: new Date().valueOf() }));
}