boxons/app/store/TimerStore.ts

145 lines
3.9 KiB
TypeScript
Raw Permalink Normal View History

import AsyncStorage from '@react-native-async-storage/async-storage';
// Storage keys definition
const TIMER_KEYS = {
REPS: 'timer_reps',
WORK_TIME: 'timer_work_time',
2025-04-08 20:53:40 +00:00
REST_TIME: 'timer_rest_time',
PREPARATION_TIME: 'timer_preparation_time'
};
// Store interface
export interface TimerState {
reps: number;
workTime: number;
restTime: number;
2025-04-08 20:53:40 +00:00
preparationTime: number;
}
// Default values
const DEFAULT_STATE: TimerState = {
reps: 1,
workTime: 0,
2025-04-08 20:53:40 +00:00
restTime: 0,
preparationTime: 3
};
// Store management class
class TimerStore {
// Method to save repetitions
async saveReps(reps: number): Promise<void> {
try {
await AsyncStorage.setItem(TIMER_KEYS.REPS, reps.toString());
} catch (error) {
console.error('Error saving repetitions:', error);
}
}
2025-04-08 20:53:40 +00:00
async savePreparationTime(preparationTime: number): Promise<void> {
try {
await AsyncStorage.setItem(TIMER_KEYS.PREPARATION_TIME, preparationTime.toString());
} catch (error) {
console.error('Error saving preparation time:', error);
}
}
// Method to save work time
async saveWorkTime(workTime: number): Promise<void> {
try {
await AsyncStorage.setItem(TIMER_KEYS.WORK_TIME, workTime.toString());
} catch (error) {
console.error('Error saving work time:', error);
}
}
// Method to save rest time
async saveRestTime(restTime: number): Promise<void> {
try {
await AsyncStorage.setItem(TIMER_KEYS.REST_TIME, restTime.toString());
} catch (error) {
console.error('Error saving rest time:', error);
}
}
// Method to save complete state
async saveState(state: TimerState): Promise<void> {
try {
await Promise.all([
this.saveReps(state.reps),
this.saveWorkTime(state.workTime),
2025-04-08 20:53:40 +00:00
this.saveRestTime(state.restTime),
this.savePreparationTime(state.preparationTime)
]);
} catch (error) {
console.error('Error saving state:', error);
}
}
// Method to retrieve repetitions
async getReps(): Promise<number> {
try {
const value = await AsyncStorage.getItem(TIMER_KEYS.REPS);
return value !== null ? parseInt(value, 10) : DEFAULT_STATE.reps;
} catch (error) {
console.error('Error retrieving repetitions:', error);
return DEFAULT_STATE.reps;
}
}
2025-04-08 20:53:40 +00:00
async getPreparationTime(): Promise<number> {
try {
const value = await AsyncStorage.getItem(TIMER_KEYS.PREPARATION_TIME);
return value !== null ? parseInt(value, 10) : DEFAULT_STATE.preparationTime;
} catch (error) {
console.error('Error retrieving preparation time:', error);
return DEFAULT_STATE.preparationTime;
}
}
// Method to retrieve work time
async getWorkTime(): Promise<number> {
try {
const value = await AsyncStorage.getItem(TIMER_KEYS.WORK_TIME);
return value !== null ? parseInt(value, 10) : DEFAULT_STATE.workTime;
} catch (error) {
console.error('Error retrieving work time:', error);
return DEFAULT_STATE.workTime;
}
}
// Method to retrieve rest time
async getRestTime(): Promise<number> {
try {
const value = await AsyncStorage.getItem(TIMER_KEYS.REST_TIME);
return value !== null ? parseInt(value, 10) : DEFAULT_STATE.restTime;
} catch (error) {
console.error('Error retrieving rest time:', error);
return DEFAULT_STATE.restTime;
}
}
// Method to retrieve complete state
async getState(): Promise<TimerState> {
try {
2025-04-08 20:53:40 +00:00
const [reps, workTime, restTime, preparationTime] = await Promise.all([
this.getReps(),
this.getWorkTime(),
2025-04-08 20:53:40 +00:00
this.getRestTime(),
this.getPreparationTime()
]);
return {
reps,
workTime,
2025-04-08 20:53:40 +00:00
restTime,
preparationTime
};
} catch (error) {
console.error('Error retrieving state:', error);
return DEFAULT_STATE;
}
}
}
// Export a singleton instance
export const timerStore = new TimerStore();