feat: updated timer view
This commit is contained in:
@@ -8,8 +8,8 @@
|
|||||||
|
|
||||||
<!-- Card top labels -->
|
<!-- Card top labels -->
|
||||||
<div class="timer-card-labels">
|
<div class="timer-card-labels">
|
||||||
<span v-if="timer" class="label-left">{{ timer.title }}</span>
|
<span class="label-left">{{ countdown?.timerNow.value?.title }}</span>
|
||||||
<span class="label-right">Помидор</span>
|
<span class="label-right">{{ countdown?.timerNow.value?.typeTimer }}</span>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Time display -->
|
<!-- Time display -->
|
||||||
@@ -18,7 +18,7 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Progress bar -->
|
<!-- Progress bar -->
|
||||||
<div class="timer-progress-bar">
|
<div v-show="!countdown?.isFinished.value" class="timer-progress-bar">
|
||||||
<div class="timer-progress-fill" :style="{ width: `${countdown?.progress.value}%` }"></div>
|
<div class="timer-progress-fill" :style="{ width: `${countdown?.progress.value}%` }"></div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -42,7 +42,7 @@
|
|||||||
class="btn-timer
|
class="btn-timer
|
||||||
btn-timer-start"
|
btn-timer-start"
|
||||||
id="btn-start"
|
id="btn-start"
|
||||||
v-show="state === 'idle' || state === 'paused'"
|
v-show="state === 'idle' && !countdown?.isFinished.value || state === 'paused'"
|
||||||
@click="() => { setState('running'); countdown?.start(); }"
|
@click="() => { setState('running'); countdown?.start(); }"
|
||||||
>
|
>
|
||||||
<ion-icon :icon="playOutline"></ion-icon>
|
<ion-icon :icon="playOutline"></ion-icon>
|
||||||
@@ -54,7 +54,7 @@
|
|||||||
class="btn-timer
|
class="btn-timer
|
||||||
btn-timer-pause"
|
btn-timer-pause"
|
||||||
id="btn-pause"
|
id="btn-pause"
|
||||||
v-show="state === 'running'"
|
v-show="state === 'running' && !countdown?.isFinished.value"
|
||||||
@click="() => { setState('paused'); countdown?.pause(); }"
|
@click="() => { setState('paused'); countdown?.pause(); }"
|
||||||
>
|
>
|
||||||
<ion-icon :icon="pauseOutline"></ion-icon>
|
<ion-icon :icon="pauseOutline"></ion-icon>
|
||||||
|
|||||||
@@ -8,9 +8,12 @@ import {
|
|||||||
pauseOutline
|
pauseOutline
|
||||||
} from 'ionicons/icons';
|
} from 'ionicons/icons';
|
||||||
|
|
||||||
import { getTimer } from '@/db/crud/timerCrud';
|
|
||||||
import type { TimerRow } from '@/types/timerType';
|
import type { TimerRow } from '@/types/timerType';
|
||||||
import { useCountdown } from '@/composables/useTimer';
|
import { useCountdown } from '@/composables/useTimer';
|
||||||
|
import { playSound } from '@/composables/useAudio';
|
||||||
|
import { getSoundPathById } from '@/composables/libAudio';
|
||||||
|
import { loadConfig } from '@/composables/useConfig';
|
||||||
|
import { queueTimer } from '@/composables/chainTimer';
|
||||||
import { CountdownReturn } from '@/types/timerType';
|
import { CountdownReturn } from '@/types/timerType';
|
||||||
|
|
||||||
/** Возможные состояния таймера */
|
/** Возможные состояния таймера */
|
||||||
@@ -43,6 +46,9 @@ export default defineComponent({
|
|||||||
/** Shallow-ссылка на экземпляр composable обратного отсчёта */
|
/** Shallow-ссылка на экземпляр composable обратного отсчёта */
|
||||||
const countdown = shallowRef<CountdownReturn | null>(null);
|
const countdown = shallowRef<CountdownReturn | null>(null);
|
||||||
|
|
||||||
|
/** Чтение конфига */
|
||||||
|
const config = loadConfig()
|
||||||
|
|
||||||
/** Останавливает таймер при размонтировании компонента */
|
/** Останавливает таймер при размонтировании компонента */
|
||||||
onUnmounted(() => {
|
onUnmounted(() => {
|
||||||
countdown.value?.stop();
|
countdown.value?.stop();
|
||||||
@@ -51,15 +57,14 @@ export default defineComponent({
|
|||||||
/** Загружает данные таймера из БД и инициализирует отсчёт */
|
/** Загружает данные таймера из БД и инициализирует отсчёт */
|
||||||
const loadTimer = async (): Promise<void> => {
|
const loadTimer = async (): Promise<void> => {
|
||||||
try {
|
try {
|
||||||
const result = await getTimer(id);
|
const timers = await queueTimer(id);
|
||||||
const timerData = Array.isArray(result) ? result[0] : result;
|
|
||||||
timer.value = timerData;
|
|
||||||
|
|
||||||
countdown.value = useCountdown({
|
countdown.value = useCountdown({
|
||||||
seconds: timerData.pomodoro_time ?? 0,
|
timers: timers,
|
||||||
onFinish: () => alert('Время вышло!')
|
onFinish: async () => {
|
||||||
|
await playSound(getSoundPathById((await config).sound.sound_id));
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
error.value = 'Ошибка загрузки таймера';
|
error.value = 'Ошибка загрузки таймера';
|
||||||
console.error(e);
|
console.error(e);
|
||||||
|
|||||||
Reference in New Issue
Block a user