Skip to content

Commit d9aaaf2

Browse files
authored
Merge pull request #511 from sivertschou/dexie-improvements
Dexie improvements
2 parents 5d7c78c + 71e6409 commit d9aaaf2

2 files changed

Lines changed: 41 additions & 57 deletions

File tree

apps/frontend/src/db.ts

Lines changed: 27 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -56,11 +56,10 @@ export const defaultWorkoutState: WorkoutState = {
5656
};
5757

5858
export const startNewWorkout = async () => {
59-
db.transaction('rw', db.workoutState, async () => {
60-
const state =
61-
(await db.workoutState.toCollection().last()) ?? defaultWorkoutState;
59+
await db.transaction('rw', db.workoutState, async () => {
60+
const state = await getWorkoutState();
6261

63-
await db.workoutState.add({
62+
return db.workoutState.add({
6463
...defaultWorkoutState,
6564
workoutNumber: state.workoutNumber + 1,
6665
route: state.route,
@@ -69,34 +68,32 @@ export const startNewWorkout = async () => {
6968
};
7069

7170
export const addLap = async () => {
72-
db.transaction('rw', db.workoutState, async () => {
73-
const state =
74-
(await db.workoutState.orderBy('workoutNumber').last()) ??
75-
defaultWorkoutState;
71+
await db.transaction('rw', db.workoutState, async () => {
72+
const state = await getWorkoutState();
7673

7774
const lapNumber = state.lapNumber + 1;
78-
await db.workoutState.update(state.workoutNumber, {
75+
return db.workoutState.update(state.workoutNumber, {
7976
lapNumber,
8077
});
8178
});
8279
};
8380

8481
const getLastDatapoint = async () => {
85-
const state =
86-
(await db.workoutState.orderBy('workoutNumber').last()) ??
87-
defaultWorkoutState;
82+
const state = await getWorkoutState();
8883

8984
return (
90-
(await db.workoutDataPoint
85+
db.workoutDataPoint
9186
.where('workoutNumber')
9287
.equals(state.workoutNumber)
9388
.filter((item) => item.tracking)
94-
.last()) ?? null
89+
.last() ?? null
9590
);
9691
};
9792

9893
const getWorkoutState = async () => {
99-
return (await db.workoutState.toCollection().last()) ?? defaultWorkoutState;
94+
const state = await db.workoutState.orderBy('workoutNumber').last();
95+
96+
return state ?? defaultWorkoutState;
10097
};
10198

10299
export const addDatapoint = async (
@@ -140,7 +137,7 @@ export const addDatapoint = async (
140137

141138
const coordinates = distanceToCoordinates(routeWaypoints, totalDistance);
142139

143-
db.workoutDataPoint.add({
140+
await db.workoutDataPoint.add({
144141
...dataPoint,
145142
timestamp: new Date(),
146143
deltaTime: delta,
@@ -162,47 +159,45 @@ export const addDatapoint = async (
162159
const maxHeartRate = workoutState.maxHeartRate ?? 0;
163160

164161
if (maxHeartRate < heartRate) {
165-
setMaxHeartRate(heartRate);
162+
return setMaxHeartRate(heartRate);
166163
}
167164
}
168165
);
169166
};
170167

171168
export const addElapsedTime = async (delta: number) => {
172-
db.transaction('rw', db.workoutState, async () => {
173-
const state =
174-
(await db.workoutState.toCollection().last()) ?? defaultWorkoutState;
169+
await db.transaction('rw', db.workoutState, async () => {
170+
const state = await getWorkoutState();
175171

176-
await db.workoutState.update(state.workoutNumber, {
172+
return db.workoutState.update(state.workoutNumber, {
177173
elapsedTime: state.elapsedTime + delta,
178174
});
179175
});
180176
};
181177

182178
export const initWorkoutstate = async () => {
183-
db.transaction('rw', db.workoutState, async () => {
184-
const state = await db.workoutState.toCollection().last();
179+
await db.transaction('rw', db.workoutState, async () => {
180+
const state = await db.workoutState.orderBy('workoutNumber').last();
185181

186182
if (!state) {
187-
await db.workoutState.add(defaultWorkoutState);
183+
return db.workoutState.add(defaultWorkoutState);
188184
}
189185
});
190186
};
191187

192188
const setMaxHeartRate = async (heartRate: number) => {
193-
const state =
194-
(await db.workoutState.toCollection().last()) ?? defaultWorkoutState;
189+
const state = await getWorkoutState();
195190

196-
await db.workoutState.update(state.workoutNumber, {
191+
return db.workoutState.update(state.workoutNumber, {
197192
maxHeartRate: heartRate,
198193
});
199194
};
195+
200196
export const setRoute = async (route: Route) => {
201-
db.transaction('rw', db.workoutState, async () => {
202-
const state =
203-
(await db.workoutState.toCollection().last()) ?? defaultWorkoutState;
197+
await db.transaction('rw', db.workoutState, async () => {
198+
const state = await getWorkoutState();
204199

205-
await db.workoutState.update(state.workoutNumber, {
200+
return db.workoutState.update(state.workoutNumber, {
206201
route,
207202
});
208203
});
@@ -223,7 +218,7 @@ export const createNewWorkoutIfOldData = async () => {
223218
);
224219

225220
if (time.hours >= hoursToRecoverWorkout) {
226-
startNewWorkout();
221+
return startNewWorkout();
227222
}
228223
}
229224
}

apps/frontend/src/hooks/useWorkoutState.ts

Lines changed: 14 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ export const useWorkoutState = () => {
1818
db.workoutDataPoint
1919
.where('workoutNumber')
2020
.equals(state.workoutNumber)
21-
.filter((datapoint) => datapoint.tracking)
21+
.and((datapoint) => datapoint.tracking)
2222
.toArray(),
2323
[state.workoutNumber]
2424
) ?? [];
@@ -27,26 +27,26 @@ export const useWorkoutState = () => {
2727
useLiveQuery(
2828
() =>
2929
db.workoutDataPoint
30-
.where({
31-
workoutNumber: state.workoutNumber,
32-
lapNumber: state.lapNumber,
33-
})
34-
.filter((datapoint) => datapoint.tracking)
30+
.where(['workoutNumber', 'lapNumber'])
31+
.equals([state.workoutNumber, state.lapNumber])
32+
.and((datapoint) => datapoint.tracking)
3533
.toArray(),
3634
[state.workoutNumber, state.lapNumber]
3735
) ?? [];
3836

3937
const graphData =
4038
useLiveQuery(
41-
() =>
42-
db.workoutDataPoint
43-
.where('workoutNumber')
44-
.equals(state.workoutNumber)
45-
.reverse()
46-
.limit(numberOfGraphDataPoints)
47-
.toArray(),
39+
async () =>
40+
(
41+
await db.workoutDataPoint
42+
.where('workoutNumber')
43+
.equals(state.workoutNumber)
44+
.reverse()
45+
.limit(numberOfGraphDataPoints)
46+
.toArray()
47+
).toReversed(),
4848
[state.workoutNumber]
49-
)?.toReversed() ?? [];
49+
) ?? [];
5050

5151
const firstDatapoint =
5252
useLiveQuery(
@@ -70,17 +70,6 @@ export const useWorkoutState = () => {
7070
[state.workoutNumber]
7171
) ?? null;
7272

73-
const lastUntrackedDatapoint =
74-
useLiveQuery(
75-
() =>
76-
db.workoutDataPoint
77-
.where('workoutNumber')
78-
.equals(state.workoutNumber)
79-
.and((dataPoint) => !dataPoint.tracking)
80-
.last(),
81-
[state.workoutNumber]
82-
) ?? null;
83-
8473
useEffect(() => {
8574
createNewWorkoutIfOldData();
8675
}, []);

0 commit comments

Comments
 (0)