79 lines
2.4 KiB
JavaScript
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
|
|
}
|
|
}
|
|
})
|