33 lines
1.2 KiB
TypeScript
33 lines
1.2 KiB
TypeScript
/*
|
||
* SPDX-FileCopyrightText: syuilo and misskey-project
|
||
* SPDX-License-Identifier: AGPL-3.0-only
|
||
*/
|
||
|
||
import { ref, readonly, computed } from 'vue';
|
||
|
||
const time = ref(Date.now());
|
||
|
||
/**
|
||
* 精度が求められないが定期的に更新しないといけない時計で使用(10秒に一度更新)。
|
||
* tickを各コンポーネントで行うのではなく、ここで一括して行うことでパフォーマンスを改善する。
|
||
*
|
||
* ※ マウント前の時刻を返す可能性があるため、通常は`useLowresTime`を使用する
|
||
*/
|
||
export const lowresTime = readonly(time);
|
||
|
||
/**
|
||
* 精度が求められないが定期的に更新しないといけない時計で使用(10秒に一度更新)。
|
||
* tickを各コンポーネントで行うのではなく、ここで一括して行うことでパフォーマンスを改善する。
|
||
*
|
||
* 必ず現在時刻以降を返すことを保証するコンポーサブル
|
||
*/
|
||
export function useLowresTime() {
|
||
// lowresTime自体はマウント前の時刻を返す可能性があるため、必ず現在時刻以降を返すことを保証する
|
||
const now = Date.now();
|
||
return computed(() => Math.max(time.value, now));
|
||
}
|
||
|
||
window.setInterval(() => {
|
||
time.value = Date.now();
|
||
}, 10000);
|