diff options
| author | syuilo <Syuilotan@yahoo.co.jp> | 2022-06-26 03:12:58 +0900 |
|---|---|---|
| committer | syuilo <Syuilotan@yahoo.co.jp> | 2022-06-26 03:12:58 +0900 |
| commit | 5e95a1f7af841f10646133ad0cc155a2c5cea9fd (patch) | |
| tree | 6aacbbdca450e7a0ae54e7040147395c934e787b /packages/client/src/widgets | |
| parent | enhance(client): tweak control panel dashboard (diff) | |
| download | sharkey-5e95a1f7af841f10646133ad0cc155a2c5cea9fd.tar.gz sharkey-5e95a1f7af841f10646133ad0cc155a2c5cea9fd.tar.bz2 sharkey-5e95a1f7af841f10646133ad0cc155a2c5cea9fd.zip | |
refactor(client): extract interval logic to a composable function
あと`onUnmounted`を`onMounted`内で呼んでいたりしたのを修正したりとか
Diffstat (limited to 'packages/client/src/widgets')
| -rw-r--r-- | packages/client/src/widgets/aichan.vue | 31 | ||||
| -rw-r--r-- | packages/client/src/widgets/calendar.vue | 25 | ||||
| -rw-r--r-- | packages/client/src/widgets/federation.vue | 10 | ||||
| -rw-r--r-- | packages/client/src/widgets/online-users.vue | 12 | ||||
| -rw-r--r-- | packages/client/src/widgets/rss.vue | 12 | ||||
| -rw-r--r-- | packages/client/src/widgets/slideshow.vue | 15 | ||||
| -rw-r--r-- | packages/client/src/widgets/trends.vue | 12 |
7 files changed, 55 insertions, 62 deletions
diff --git a/packages/client/src/widgets/aichan.vue b/packages/client/src/widgets/aichan.vue index cdd367cc84..828490fd9c 100644 --- a/packages/client/src/widgets/aichan.vue +++ b/packages/client/src/widgets/aichan.vue @@ -6,8 +6,8 @@ <script lang="ts" setup> import { onMounted, onUnmounted, reactive, ref } from 'vue'; -import { GetFormResultType } from '@/scripts/form'; import { useWidgetPropsManager, Widget, WidgetComponentEmits, WidgetComponentExpose, WidgetComponentProps } from './widget'; +import { GetFormResultType } from '@/scripts/form'; const name = 'ai'; @@ -38,22 +38,23 @@ const touched = () => { //if (this.live2d) this.live2d.changeExpression('gurugurume'); }; -onMounted(() => { - const onMousemove = (ev: MouseEvent) => { - const iframeRect = live2d.value.getBoundingClientRect(); - live2d.value.contentWindow.postMessage({ - type: 'moveCursor', - body: { - x: ev.clientX - iframeRect.left, - y: ev.clientY - iframeRect.top, - } - }, '*'); - }; +const onMousemove = (ev: MouseEvent) => { + const iframeRect = live2d.value.getBoundingClientRect(); + live2d.value.contentWindow.postMessage({ + type: 'moveCursor', + body: { + x: ev.clientX - iframeRect.left, + y: ev.clientY - iframeRect.top, + }, + }, '*'); +}; +onMounted(() => { window.addEventListener('mousemove', onMousemove, { passive: true }); - onUnmounted(() => { - window.removeEventListener('mousemove', onMousemove); - }); +}); + +onUnmounted(() => { + window.removeEventListener('mousemove', onMousemove); }); defineExpose<WidgetComponentExpose>({ diff --git a/packages/client/src/widgets/calendar.vue b/packages/client/src/widgets/calendar.vue index 2a2b035541..3a0dc8970c 100644 --- a/packages/client/src/widgets/calendar.vue +++ b/packages/client/src/widgets/calendar.vue @@ -34,9 +34,10 @@ <script lang="ts" setup> import { onUnmounted, ref } from 'vue'; -import { GetFormResultType } from '@/scripts/form'; import { useWidgetPropsManager, Widget, WidgetComponentEmits, WidgetComponentExpose, WidgetComponentProps } from './widget'; +import { GetFormResultType } from '@/scripts/form'; import { i18n } from '@/i18n'; +import { useInterval } from '@/scripts/use-interval'; const name = 'calendar'; @@ -85,28 +86,26 @@ const tick = () => { i18n.ts._weekday.wednesday, i18n.ts._weekday.thursday, i18n.ts._weekday.friday, - i18n.ts._weekday.saturday + i18n.ts._weekday.saturday, ][now.getDay()]; - const dayNumer = now.getTime() - new Date(ny, nm, nd).getTime(); - const dayDenom = 1000/*ms*/ * 60/*s*/ * 60/*m*/ * 24/*h*/; + const dayNumer = now.getTime() - new Date(ny, nm, nd).getTime(); + const dayDenom = 1000/*ms*/ * 60/*s*/ * 60/*m*/ * 24/*h*/; const monthNumer = now.getTime() - new Date(ny, nm, 1).getTime(); const monthDenom = new Date(ny, nm + 1, 1).getTime() - new Date(ny, nm, 1).getTime(); - const yearNumer = now.getTime() - new Date(ny, 0, 1).getTime(); - const yearDenom = new Date(ny + 1, 0, 1).getTime() - new Date(ny, 0, 1).getTime(); + const yearNumer = now.getTime() - new Date(ny, 0, 1).getTime(); + const yearDenom = new Date(ny + 1, 0, 1).getTime() - new Date(ny, 0, 1).getTime(); - dayP.value = dayNumer / dayDenom * 100; + dayP.value = dayNumer / dayDenom * 100; monthP.value = monthNumer / monthDenom * 100; - yearP.value = yearNumer / yearDenom * 100; + yearP.value = yearNumer / yearDenom * 100; isHoliday.value = now.getDay() === 0 || now.getDay() === 6; }; -tick(); - -const intervalId = window.setInterval(tick, 1000); -onUnmounted(() => { - window.clearInterval(intervalId); +useInterval(tick, 1000, { + immediate: true, + afterMounted: false, }); defineExpose<WidgetComponentExpose>({ diff --git a/packages/client/src/widgets/federation.vue b/packages/client/src/widgets/federation.vue index afe7af0e96..ac87cdac2e 100644 --- a/packages/client/src/widgets/federation.vue +++ b/packages/client/src/widgets/federation.vue @@ -25,6 +25,7 @@ import { GetFormResultType } from '@/scripts/form'; import MkContainer from '@/components/ui/container.vue'; import MkMiniChart from '@/components/mini-chart.vue'; import * as os from '@/os'; +import { useInterval } from '@/scripts/use-interval'; const name = 'federation'; @@ -64,12 +65,9 @@ const fetch = async () => { fetching.value = false; }; -onMounted(() => { - fetch(); - const intervalId = window.setInterval(fetch, 1000 * 60); - onUnmounted(() => { - window.clearInterval(intervalId); - }); +useInterval(fetch, 1000 * 60, { + immediate: true, + afterMounted: true, }); defineExpose<WidgetComponentExpose>({ diff --git a/packages/client/src/widgets/online-users.vue b/packages/client/src/widgets/online-users.vue index eb3184fe9d..4122a82657 100644 --- a/packages/client/src/widgets/online-users.vue +++ b/packages/client/src/widgets/online-users.vue @@ -8,9 +8,10 @@ <script lang="ts" setup> import { onMounted, onUnmounted, ref } from 'vue'; -import { GetFormResultType } from '@/scripts/form'; import { useWidgetPropsManager, Widget, WidgetComponentEmits, WidgetComponentExpose, WidgetComponentProps } from './widget'; +import { GetFormResultType } from '@/scripts/form'; import * as os from '@/os'; +import { useInterval } from '@/scripts/use-interval'; const name = 'onlineUsers'; @@ -43,12 +44,9 @@ const tick = () => { }); }; -onMounted(() => { - tick(); - const intervalId = window.setInterval(tick, 1000 * 15); - onUnmounted(() => { - window.clearInterval(intervalId); - }); +useInterval(tick, 1000 * 15, { + immediate: true, + afterMounted: true, }); defineExpose<WidgetComponentExpose>({ diff --git a/packages/client/src/widgets/rss.vue b/packages/client/src/widgets/rss.vue index fc65f11813..e5da291a8d 100644 --- a/packages/client/src/widgets/rss.vue +++ b/packages/client/src/widgets/rss.vue @@ -14,10 +14,11 @@ <script lang="ts" setup> import { onMounted, onUnmounted, ref, watch } from 'vue'; -import { GetFormResultType } from '@/scripts/form'; import { useWidgetPropsManager, Widget, WidgetComponentEmits, WidgetComponentExpose, WidgetComponentProps } from './widget'; +import { GetFormResultType } from '@/scripts/form'; import * as os from '@/os'; import MkContainer from '@/components/ui/container.vue'; +import { useInterval } from '@/scripts/use-interval'; const name = 'rss'; @@ -60,12 +61,9 @@ const tick = () => { watch(() => widgetProps.url, tick); -onMounted(() => { - tick(); - const intervalId = window.setInterval(tick, 60000); - onUnmounted(() => { - window.clearInterval(intervalId); - }); +useInterval(tick, 60000, { + immediate: true, + afterMounted: true, }); defineExpose<WidgetComponentExpose>({ diff --git a/packages/client/src/widgets/slideshow.vue b/packages/client/src/widgets/slideshow.vue index fd78edbe40..c286312161 100644 --- a/packages/client/src/widgets/slideshow.vue +++ b/packages/client/src/widgets/slideshow.vue @@ -13,9 +13,10 @@ <script lang="ts" setup> import { nextTick, onMounted, onUnmounted, reactive, ref } from 'vue'; -import { GetFormResultType } from '@/scripts/form'; import { useWidgetPropsManager, Widget, WidgetComponentEmits, WidgetComponentExpose, WidgetComponentProps } from './widget'; +import { GetFormResultType } from '@/scripts/form'; import * as os from '@/os'; +import { useInterval } from '@/scripts/use-interval'; const name = 'slideshow'; @@ -75,7 +76,7 @@ const fetch = () => { os.api('drive/files', { folderId: widgetProps.folderId, type: 'image/*', - limit: 100 + limit: 100, }).then(res => { images.value = res; fetching.value = false; @@ -96,15 +97,15 @@ const choose = () => { }); }; +useInterval(change, 10000, { + immediate: false, + afterMounted: true, +}); + onMounted(() => { if (widgetProps.folderId != null) { fetch(); } - - const intervalId = window.setInterval(change, 10000); - onUnmounted(() => { - window.clearInterval(intervalId); - }); }); defineExpose<WidgetComponentExpose>({ diff --git a/packages/client/src/widgets/trends.vue b/packages/client/src/widgets/trends.vue index 9680f1c892..0f34ea6341 100644 --- a/packages/client/src/widgets/trends.vue +++ b/packages/client/src/widgets/trends.vue @@ -19,11 +19,12 @@ <script lang="ts" setup> import { onMounted, onUnmounted, ref } from 'vue'; -import { GetFormResultType } from '@/scripts/form'; import { useWidgetPropsManager, Widget, WidgetComponentEmits, WidgetComponentExpose, WidgetComponentProps } from './widget'; +import { GetFormResultType } from '@/scripts/form'; import MkContainer from '@/components/ui/container.vue'; import MkMiniChart from '@/components/mini-chart.vue'; import * as os from '@/os'; +import { useInterval } from '@/scripts/use-interval'; const name = 'hashtags'; @@ -58,12 +59,9 @@ const fetch = () => { }); }; -onMounted(() => { - fetch(); - const intervalId = window.setInterval(fetch, 1000 * 60); - onUnmounted(() => { - window.clearInterval(intervalId); - }); +useInterval(fetch, 1000 * 60, { + immediate: true, + afterMounted: true, }); defineExpose<WidgetComponentExpose>({ |