Merge branch 'issue/1'

This commit is contained in:
2025-02-15 11:08:22 +00:00
2 changed files with 22 additions and 11 deletions

View File

@@ -16,7 +16,7 @@ const schema = yup.object({
startTime: yup.string().matches(timeRe, {message: '12 or 24 hr time format required'}).required(), 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(), 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(), 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() recorded: yup.string().matches(durationRe, {message: 'duration in hh:mm or hrs and mins required'}).required()
}).required(); }).required();
@@ -31,7 +31,9 @@ export function App() {
startTime: '09:00', startTime: '09:00',
target: '7.5h', target: '7.5h',
break: '1h', break: '1h',
recorded: getStoredRecordedTime(), breakTaken: false,
recorded: '0',
...getStoredRecordedTime(),
...getStoredDefaults() ...getStoredDefaults()
}, },
resolver: yupResolver(schema) resolver: yupResolver(schema)
@@ -52,8 +54,8 @@ export function App() {
setRemaining(calculateRemaining(currentData)); setRemaining(calculateRemaining(currentData));
// save new values to storage // save new values to storage
setStoredDefaults({ startTime: currentData.startTime, target: currentData.target }); setStoredDefaults(currentData);
setStoredRecordedTime(currentData.recorded); setStoredRecordedTime(currentData.recorded, currentData.breakTaken);
const interval = setInterval(() => { const interval = setInterval(() => {
setRemaining(calculateRemaining(currentData)); setRemaining(calculateRemaining(currentData));

View File

@@ -6,10 +6,12 @@ const RECORDED_KEY = 'recorded';
const defaultsSchema = yup.object({ const defaultsSchema = yup.object({
startTime: yup.string().required(), startTime: yup.string().required(),
target: yup.string().required(), target: yup.string().required(),
break: yup.string().required(),
}).required(); }).required();
const recordedSchema = yup.object({ const recordedSchema = yup.object({
recorded: yup.string().required(), recorded: yup.string().required(),
breakTaken: yup.boolean().required(),
updated: yup.number().required().nullable() updated: yup.number().required().nullable()
}).required(); }).required();
@@ -39,11 +41,15 @@ export function getStoredDefaults() {
} }
export function setStoredDefaults(data) { 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() { export function getStoredRecordedTime() {
const info = getJsonValue(RECORDED_KEY, { recorded: '', updated: null }); const info = getJsonValue(RECORDED_KEY, { recorded: '', breakTaken: false, updated: null });
try { try {
const data = recordedSchema.validateSync(info); const data = recordedSchema.validateSync(info);
if (data.updated != null) { if (data.updated != null) {
@@ -51,15 +57,18 @@ export function getStoredRecordedTime() {
startOfDay.setHours(0, 0, 0, 0); startOfDay.setHours(0, 0, 0, 0);
if (data.updated < startOfDay.valueOf()) { if (data.updated < startOfDay.valueOf()) {
return ''; return { recorded: '0', breakTaken: false };
} }
} }
return data.recorded; return {
recorded: data.recorded,
breakTaken: data.breakTaken,
};
} catch (e) { } catch (e) {
return ''; return { recorded: '0', breakTaken: false };
} }
} }
export function setStoredRecordedTime(recorded) { export function setStoredRecordedTime(recorded, breakTaken) {
localStorage.setItem(RECORDED_KEY, JSON.stringify({ recorded, updated: new Date().valueOf() })); localStorage.setItem(RECORDED_KEY, JSON.stringify({ recorded, breakTaken, updated: new Date().valueOf() }));
} }