mindboost-rnbo-test-project/stores/timer.js

79 lines
2.4 KiB
JavaScript

import { defineStore } from 'pinia'
export const useTimerStore = defineStore('timer', {
state: () => ({
started: false,
progressBarWidth: '100%',
settings: {
timer: {
work: {
text: 'Focus',
time: 25,
color: '#72A5ED'
},
short: {
text: 'Short Break',
time: 5,
color: '#FBA9A9'
},
long: {
text: 'Long Break',
time: 15,
color: '#D77574'
}
},
autoStart: false,
maxSessions: 4 // the number of sessions before a long break
},
timeRemaining: 25 * 60,
currentSession: 'work',
currentSessionNumber: 1,
showNotification: true,
playSessionEndSound: true,
alarmAudio: 'bell_focus'
}),
getters: {
isStarted: state => state.started,
getTimeRemaining: state => state.timeRemaining,
getSessionTime: state => state.settings.timer[state.currentSession].time,
getCurrentSession: state => state.currentSession,
isWork: state => state.settings.timer[state.currentSession] === 'work',
getCurrentSessionNumber: state => state.currentSessionNumber,
getMaxSessions: state => state.settings.maxSessions,
getCurrentColor: state => state.settings.timer[state.currentSession].color,
getProgressBarWidth: state => state.settings.progressBarWidth
},
actions: {
toggleTimer () {
this.started = !this.started
},
clearTimeRemaining () {
this.timeRemaining = this.getSessionTime * 60
},
setTimeRemaining (time) {
this.timeRemaining = time
},
nextSession () {
// if current session is not work (i.e. a break)
if (this.currentSession !== 'work') {
this.currentSessionNumber = this.currentSessionNumber % this.settings.maxSessions + 1
this.currentSession = 'work'
} else if (this.currentSessionNumber === this.settings.maxSessions) {
this.currentSession = 'long'
} else {
this.currentSession = 'short'
}
this.timeRemaining = this.settings.timer[this.currentSession].time * 60
},
setMaxSessions (maxSessionsNumber) {
this.settings.maxSessions = maxSessionsNumber
},
setTimerSettings (workTime, shortBreakTime, longBreakTime) {
this.settings.timer.work.time = workTime
this.settings.timer.short.time = shortBreakTime
this.settings.timer.long.time = longBreakTime
this.timeRemaining = workTime * 60
}
}
})