Extract interval into composition (#5818)

This commit is contained in:
Anbraten
2025-12-03 21:50:17 +01:00
committed by GitHub
parent 7589e35e16
commit 3e45257600
2 changed files with 21 additions and 14 deletions

View File

@@ -0,0 +1,18 @@
import { onBeforeUnmount, onMounted, ref } from 'vue';
export function useInterval(fn: () => void | Promise<void>, ms: number): void {
const id = ref<number>();
onMounted(async () => {
await fn(); // run once immediately
id.value = window.setInterval(() => {
void fn();
}, ms);
});
onBeforeUnmount(() => {
if (id.value != null) {
window.clearInterval(id.value);
}
});
}

View File

@@ -96,7 +96,7 @@
</template>
<script lang="ts" setup>
import { computed, onBeforeUnmount, onMounted, ref } from 'vue';
import { computed, ref } from 'vue';
import { useI18n } from 'vue-i18n';
import AdminQueueStats from '~/components/admin/settings/queue/AdminQueueStats.vue';
@@ -107,6 +107,7 @@ import IconButton from '~/components/atomic/IconButton.vue';
import ListItem from '~/components/atomic/ListItem.vue';
import Settings from '~/components/layout/Settings.vue';
import useApiClient from '~/compositions/useApiClient';
import { useInterval } from '~/compositions/useInterval';
import useNotifications from '~/compositions/useNotifications';
import { useWPTitle } from '~/compositions/useWPTitle';
import type { QueueInfo } from '~/lib/api/types';
@@ -162,19 +163,7 @@ async function resumeQueue() {
});
}
const reloadInterval = ref<number>();
onMounted(async () => {
await loadQueueInfo();
reloadInterval.value = window.setInterval(async () => {
await loadQueueInfo();
}, 5000);
});
onBeforeUnmount(() => {
if (reloadInterval.value) {
window.clearInterval(reloadInterval.value);
}
});
useInterval(loadQueueInfo, 5 * 1000);
useWPTitle(computed(() => [t('admin.settings.queue.queue'), t('admin.settings.settings')]));
</script>