From e8715162a0cd859ed237fbfc5169be8d12f95ba9 Mon Sep 17 00:00:00 2001 From: Brandon Presley Date: Mon, 26 Sep 2022 19:02:25 +1300 Subject: [PATCH] Add setting for showing date by default Closes #52 --- SetList.tsx | 3 ++- SettingsPage.tsx | 13 +++++++++++++ TimerPage.tsx | 16 ++++++++++++---- db.ts | 3 +++ settings.ts | 1 + 5 files changed, 31 insertions(+), 5 deletions(-) diff --git a/SetList.tsx b/SetList.tsx index cc2e9e1..be59133 100644 --- a/SetList.tsx +++ b/SetList.tsx @@ -26,7 +26,7 @@ export default function SetList() { const [offset, setOffset] = useState(0); const [search, setSearch] = useState(''); const [end, setEnd] = useState(false); - const [dates, setDates] = useState(false); + const [dates, setDates] = useState(!!settings.showDate); const [images, setImages] = useState(true); const navigation = useNavigation>(); @@ -75,6 +75,7 @@ export default function SetList() { headerRight: () => , }); setImages(!!settings.images); + setDates(!!settings.showDate); }, [refresh, navigation]), ); diff --git a/SettingsPage.tsx b/SettingsPage.tsx index ddd5d1f..ee85f07 100644 --- a/SettingsPage.tsx +++ b/SettingsPage.tsx @@ -28,6 +28,7 @@ export default function SettingsPage() { const [workouts, setWorkouts] = useState(!!settings.workouts); const [steps, setSteps] = useState(!!settings.steps); const [date, setDate] = useState('%Y-%m-%d %H:%M'); + const [showDate, setShowDate] = useState(false); const {color, setColor} = useContext(CustomTheme); const {toast} = useContext(SnackbarContext); @@ -50,6 +51,7 @@ export default function SettingsPage() { workouts: +workouts, steps: +steps, date, + showDate: +showDate, }); getSettings(); }, [ @@ -64,6 +66,7 @@ export default function SettingsPage() { workouts, steps, date, + showDate, ]); const changeAlarmEnabled = useCallback( @@ -149,6 +152,15 @@ export default function SettingsPage() { [toast], ); + const changeShowDate = useCallback( + (enabled: boolean) => { + setShowDate(enabled); + if (enabled) toast('Show date for sets by default.', 4000); + else toast('Stopped showing date for sets by default.', 4000); + }, + [toast], + ); + const switches: Input[] = [ {name: 'Rest timers', value: alarm, onChange: changeAlarmEnabled}, {name: 'Vibrate', value: vibrate, onChange: changeVibrate}, @@ -158,6 +170,7 @@ export default function SettingsPage() { {name: 'Show unit', value: showUnit, onChange: changeUnit}, {name: 'Show workouts', value: workouts, onChange: changeWorkouts}, {name: 'Show steps', value: steps, onChange: changeSteps}, + {name: 'Show date', value: showDate, onChange: changeShowDate}, ]; return ( diff --git a/TimerPage.tsx b/TimerPage.tsx index 2569055..78a959f 100644 --- a/TimerPage.tsx +++ b/TimerPage.tsx @@ -39,17 +39,18 @@ export default function TimerPage() { const tick = (date: Date) => { const remaining = date.getTime() - new Date().getTime(); - console.log(`${TimerPage.name}.useEffect`, {remaining}); - if (remaining <= 0) return; + console.log(`${TimerPage.name}.tick`, {remaining}); + if (remaining <= 0) return 0; setMs(remaining); + return remaining; }; useEffect(() => { console.log(`${TimerPage.name}.useEffect:`, {next}); const date = next || new Date(); - tick(date); + if (tick(date) <= 0) return; const id = setInterval(() => { - tick(date); + if (tick(date) <= 0) clearInterval(id); }, 1000); setIntervalId(oldId => { clearInterval(oldId); @@ -75,6 +76,13 @@ export default function TimerPage() { setNext(date); NativeModules.AlarmModule.add(ms, !!settings.vibrate, settings.sound); tick(date); + const id = setInterval(() => { + if (tick(date) <= 0) clearInterval(id); + }, 1000); + setIntervalId(oldId => { + clearInterval(oldId); + return id; + }); }; return ( diff --git a/db.ts b/db.ts index 33a8440..040310e 100644 --- a/db.ts +++ b/db.ts @@ -106,6 +106,9 @@ const migrations = [ ` ALTER TABLE settings ADD COLUMN date TEXT NULL `, + ` + ALTER TABLE settings ADD COLUMN showDate BOOLEAN DEFAULT 0 + `, ]; export let db: SQLiteDatabase; diff --git a/settings.ts b/settings.ts index a5d7b2b..70441de 100644 --- a/settings.ts +++ b/settings.ts @@ -11,4 +11,5 @@ export default interface Settings { steps: number; nextAlarm?: string; date?: string; + showDate: number; }