diff --git a/src/index.jsx b/src/index.jsx index 0a00bbf..f37d475 100644 --- a/src/index.jsx +++ b/src/index.jsx @@ -16,7 +16,7 @@ const schema = yup.object({ startTime: yup.string().matches(timeRe, {message: '12 or 24 hr time format required'}).required(), target: yup.string().matches(durationRe, {message: 'duration in hh:mm or hrs and mins required'}).required(), break: yup.string().matches(durationRe, {message: 'duration in hh:mm or hrs and mins required'}).required(), - breakTaken: yup.bool().required(), + breakTaken: yup.boolean().required(), recorded: yup.string().matches(durationRe, {message: 'duration in hh:mm or hrs and mins required'}).required() }).required(); @@ -31,7 +31,9 @@ export function App() { startTime: '09:00', target: '7.5h', break: '1h', - recorded: getStoredRecordedTime(), + breakTaken: false, + recorded: '0', + ...getStoredRecordedTime(), ...getStoredDefaults() }, resolver: yupResolver(schema) @@ -52,8 +54,8 @@ export function App() { setRemaining(calculateRemaining(currentData)); // save new values to storage - setStoredDefaults({ startTime: currentData.startTime, target: currentData.target }); - setStoredRecordedTime(currentData.recorded); + setStoredDefaults(currentData); + setStoredRecordedTime(currentData.recorded, currentData.breakTaken); const interval = setInterval(() => { setRemaining(calculateRemaining(currentData)); diff --git a/src/store.js b/src/store.js index 3382150..cef86ba 100644 --- a/src/store.js +++ b/src/store.js @@ -6,10 +6,12 @@ const RECORDED_KEY = 'recorded'; const defaultsSchema = yup.object({ startTime: yup.string().required(), target: yup.string().required(), + break: yup.string().required(), }).required(); const recordedSchema = yup.object({ recorded: yup.string().required(), + breakTaken: yup.boolean().required(), updated: yup.number().required().nullable() }).required(); @@ -39,11 +41,15 @@ export function getStoredDefaults() { } export function setStoredDefaults(data) { - localStorage.setItem(DEFAULTS_KEY, JSON.stringify(data)); + try { + localStorage.setItem(DEFAULTS_KEY, JSON.stringify(defaultsSchema.cast(data, {stripUnknown: true}))); + } catch (e) { + console.error(`Error setting stored defaults: ${e.message}`); + } } export function getStoredRecordedTime() { - const info = getJsonValue(RECORDED_KEY, { recorded: '', updated: null }); + const info = getJsonValue(RECORDED_KEY, { recorded: '', breakTaken: false, updated: null }); try { const data = recordedSchema.validateSync(info); if (data.updated != null) { @@ -51,15 +57,18 @@ export function getStoredRecordedTime() { startOfDay.setHours(0, 0, 0, 0); if (data.updated < startOfDay.valueOf()) { - return ''; + return { recorded: '0', breakTaken: false }; } } - return data.recorded; + return { + recorded: data.recorded, + breakTaken: data.breakTaken, + }; } catch (e) { - return ''; + return { recorded: '0', breakTaken: false }; } } -export function setStoredRecordedTime(recorded) { - localStorage.setItem(RECORDED_KEY, JSON.stringify({ recorded, updated: new Date().valueOf() })); +export function setStoredRecordedTime(recorded, breakTaken) { + localStorage.setItem(RECORDED_KEY, JSON.stringify({ recorded, breakTaken, updated: new Date().valueOf() })); }