Skip to content

Commit 13f7cd3

Browse files
committed
Extract auto refresh from stores
1 parent c928e82 commit 13f7cd3

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

52 files changed

+296
-288
lines changed

src/Frontend/package-lock.json

Lines changed: 65 additions & 73 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/Frontend/package.json

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,13 +30,12 @@
3030
"@vue-flow/controls": "1.1.3",
3131
"@vue-flow/core": "1.46.3",
3232
"@vuepic/vue-datepicker": "11.0.2",
33+
"@vueuse/core": "13.9.0",
3334
"bootstrap": "5.3.8",
3435
"codemirror": "6.0.2",
3536
"diff": "8.0.2",
3637
"hex-to-css-filter": "6.0.0",
37-
"lodash": "4.17.21",
3838
"lossless-json": "4.2.0",
39-
"memoize-one": "6.0.0",
4039
"moment": "2.30.1",
4140
"pinia": "3.0.3",
4241
"vue": "3.5.21",
@@ -58,7 +57,6 @@
5857
"@tsconfig/node18": "18.2.4",
5958
"@types/bootstrap": "5.2.10",
6059
"@types/jsdom": "27.0.0",
61-
"@types/lodash": "4.17.20",
6260
"@types/node": "24.3.1",
6361
"@vitejs/plugin-vue": "6.0.1",
6462
"@vitest/coverage-v8": "3.2.4",

src/Frontend/src/App.vue

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,15 @@ import PageFooter from "./components/PageFooter.vue";
55
import PageHeader from "./components/PageHeader.vue";
66
import "bootstrap";
77
import { useServiceControlUrls } from "@/composables/serviceServiceControlUrls";
8-
import { useServiceControl } from "@/composables/serviceServiceControl";
8+
import { useServiceControl, useServiceControlAutoRefresh } from "@/composables/serviceServiceControl";
99
import LicenseNotifications from "@/components/LicenseNotifications.vue";
1010
import BackendChecksNotifications from "@/components/BackendChecksNotifications.vue";
1111
1212
useServiceControlUrls();
1313
1414
onMounted(async () => {
1515
await useServiceControl();
16+
useServiceControlAutoRefresh();
1617
});
1718
</script>
1819

src/Frontend/src/components/FilterInput.vue

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<script setup lang="ts">
22
import { computed, useTemplateRef } from "vue";
3-
import debounce from "lodash/debounce";
3+
import { useDebounceFn } from "@vueuse/core";
44
import FAIcon from "./FAIcon.vue";
55
import { faFilter } from "@fortawesome/free-solid-svg-icons";
66
@@ -16,7 +16,7 @@ const localInput = computed({
1616
},
1717
});
1818
const textField = useTemplateRef<HTMLInputElement>("textField");
19-
const debounceUpdateModel = debounce((value: string) => {
19+
const debounceUpdateModel = useDebounceFn((value: string) => {
2020
model.value = value;
2121
}, 600);
2222

src/Frontend/src/components/audit/AuditList.vue

Lines changed: 14 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -5,34 +5,24 @@ import { useRoute, useRouter } from "vue-router";
55
import ResultsCount from "@/components/ResultsCount.vue";
66
import FiltersPanel from "@/components/audit/FiltersPanel.vue";
77
import AuditListItem from "@/components/audit/AuditListItem.vue";
8-
import { onBeforeMount, onUnmounted, ref, watch } from "vue";
8+
import { onBeforeMount, ref, watch } from "vue";
99
import RefreshConfig from "../RefreshConfig.vue";
10-
import useAutoRefresh from "@/composables/autoRefresh";
11-
import throttle from "lodash/throttle";
10+
import createAutoRefresh from "@/composables/autoRefresh";
1211
import LoadingSpinner from "@/components/LoadingSpinner.vue";
12+
import { useThrottleFn } from "@vueuse/core";
1313
1414
const store = useAuditStore();
1515
const { messages, totalCount, sortBy, messageFilterString, selectedEndpointName, itemsPerPage, dateRange } = storeToRefs(store);
1616
const route = useRoute();
1717
const router = useRouter();
1818
const autoRefreshValue = ref<number | null>(null);
19-
const isLoading = ref(false);
20-
21-
const dataRetriever = useAutoRefresh(
22-
throttle(async () => {
23-
isLoading.value = true;
24-
try {
25-
await store.refresh();
26-
} finally {
27-
isLoading.value = false;
28-
}
29-
}, 2000),
30-
null
31-
);
3219
33-
onUnmounted(() => {
34-
dataRetriever.updateTimeout(null);
35-
});
20+
const { refreshNow, isRefreshing, updateInterval } = createAutoRefresh(
21+
useThrottleFn(async () => {
22+
await store.refresh();
23+
}, 2000),
24+
{ intervalMs: 0, immediate: false }
25+
)();
3626
3727
const firstLoad = ref(true);
3828
@@ -41,7 +31,7 @@ onBeforeMount(() => {
4131
4232
//without setTimeout, this happens before the store is properly initialised, and therefore the query route values aren't applied to the refresh
4333
setTimeout(async () => {
44-
await Promise.all([dataRetriever.executeAndResetTimer(), store.loadEndpoints()]);
34+
await Promise.all([refreshNow(), store.loadEndpoints()]);
4535
firstLoad.value = false;
4636
}, 0);
4737
});
@@ -50,7 +40,7 @@ watch(
5040
() => router.currentRoute.value.query,
5141
async () => {
5242
setQuery();
53-
await dataRetriever.executeAndResetTimer();
43+
await refreshNow();
5444
},
5545
{ deep: true }
5646
);
@@ -76,7 +66,7 @@ const watchHandle = watch([() => route.query, itemsPerPage, sortBy, messageFilte
7666
},
7767
});
7868
79-
await dataRetriever.executeAndResetTimer();
69+
await refreshNow();
8070
});
8171
8272
function setQuery() {
@@ -96,13 +86,13 @@ function setQuery() {
9686
watchHandle.resume();
9787
}
9888
99-
watch(autoRefreshValue, (newValue) => dataRetriever.updateTimeout(newValue));
89+
watch(autoRefreshValue, (newValue) => updateInterval(newValue || 0));
10090
</script>
10191

10292
<template>
10393
<div>
10494
<div class="header">
105-
<RefreshConfig v-model="autoRefreshValue" :isLoading="isLoading" @manual-refresh="dataRetriever.executeAndResetTimer()" />
95+
<RefreshConfig v-model="autoRefreshValue" :isLoading="isRefreshing" @manual-refresh="refreshNow()" />
10696
<div class="row">
10797
<FiltersPanel />
10898
</div>

src/Frontend/src/components/configuration/ConfigurationMenuItem.vue

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,13 @@ import { LicenseWarningLevel } from "@/composables/LicenseStatus";
77
import { WarningLevel } from "@/components/WarningLevel";
88
import routeLinks from "@/router/routeLinks";
99
import { displayConnectionsWarning } from "@/components/configuration/displayConnectionsWarning";
10-
import { useThroughputStore } from "@/stores/ThroughputStore";
1110
import { storeToRefs } from "pinia";
1211
import FAIcon from "@/components/FAIcon.vue";
1312
import { faGear } from "@fortawesome/free-solid-svg-icons";
13+
import useThroughputStoreAutoRefresh from "@/composables/useThroughputStoreAutoRefresh";
1414
15-
const { hasErrors } = storeToRefs(useThroughputStore());
15+
const { store } = useThroughputStoreAutoRefresh();
16+
const { hasErrors } = storeToRefs(store);
1617
1718
const displayWarn = computed(() => {
1819
return licenseStatus.warningLevel === LicenseWarningLevel.Warning;

src/Frontend/src/components/customchecks/CustomCheckView.vue

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
11
<script setup lang="ts">
22
import CustomCheck from "@/resources/CustomCheck";
33
import TimeSince from "@/components/TimeSince.vue";
4-
import { useCustomChecksStore } from "@/stores/CustomChecksStore";
54
import FAIcon from "@/components/FAIcon.vue";
65
import { faCheck, faList, faServer } from "@fortawesome/free-solid-svg-icons";
76
import { faClock } from "@fortawesome/free-regular-svg-icons";
87
import { hexToCSSFilter } from "hex-to-css-filter";
8+
import useCustomChecksStoreAutoRefresh from "@/composables/useCustomChecksStoreAutoRefresh";
99
1010
defineProps<{ customCheck: CustomCheck }>();
1111
12-
const store = useCustomChecksStore();
12+
const { store } = useCustomChecksStoreAutoRefresh();
1313
const endpointColor = hexToCSSFilter("#929E9E").filter;
1414
</script>
1515

src/Frontend/src/components/customchecks/CustomChecksDashboardItem.vue

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
<script setup lang="ts">
22
import DashboardItem from "@/components/DashboardItem.vue";
3-
import { useCustomChecksStore } from "@/stores/CustomChecksStore";
43
import routeLinks from "@/router/routeLinks";
54
import { storeToRefs } from "pinia";
65
import { faCheck } from "@fortawesome/free-solid-svg-icons";
6+
import useCustomChecksStoreAutoRefresh from "@/composables/useCustomChecksStoreAutoRefresh";
77
8-
const store = useCustomChecksStore();
8+
const { store } = useCustomChecksStoreAutoRefresh();
99
const { failingCount } = storeToRefs(store);
1010
</script>
1111

src/Frontend/src/components/customchecks/CustomChecksMenuItem.vue

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
<script setup lang="ts">
22
import { RouterLink } from "vue-router";
3-
import { useCustomChecksStore } from "@/stores/CustomChecksStore";
43
import routeLinks from "@/router/routeLinks";
54
import { storeToRefs } from "pinia";
65
import FAIcon from "@/components/FAIcon.vue";
76
import { faCheck } from "@fortawesome/free-solid-svg-icons";
7+
import useCustomChecksStoreAutoRefresh from "@/composables/useCustomChecksStoreAutoRefresh";
88
9-
const store = useCustomChecksStore();
9+
const { store } = useCustomChecksStoreAutoRefresh();
1010
const { failingCount } = storeToRefs(store);
1111
</script>
1212

src/Frontend/src/components/failedmessages/EditRetryDialog.vue

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,9 @@ import CodeEditor from "@/components/CodeEditor.vue";
99
import { useMessageStore } from "@/stores/MessageStore";
1010
import { storeToRefs } from "pinia";
1111
import LoadingSpinner from "@/components/LoadingSpinner.vue";
12-
import debounce from "lodash/debounce";
1312
import FAIcon from "@/components/FAIcon.vue";
1413
import { faExclamationCircle, faExclamationTriangle, faUndo } from "@fortawesome/free-solid-svg-icons";
14+
import { useDebounceFn } from "@vueuse/core";
1515
1616
interface HeaderWithEditing extends Header {
1717
isLocked: boolean;
@@ -58,7 +58,7 @@ const { state, headers, body, edit_and_retry_config } = storeToRefs(store);
5858
const id = computed(() => state.value.data.id ?? "");
5959
const uneditedMessageBody = computed(() => body.value.data.value ?? "");
6060
const regExToPruneLineEndings = new RegExp(/[\n\r]*/, "g");
61-
const debounceBodyUpdate = debounce((value: string) => {
61+
const debounceBodyUpdate = useDebounceFn((value: string) => {
6262
const newValue = value.replaceAll(regExToPruneLineEndings, "");
6363
localMessage.value.isBodyChanged = newValue !== uneditedMessageBody.value.replaceAll(regExToPruneLineEndings, "");
6464
localMessage.value.isBodyEmpty = newValue === "";

0 commit comments

Comments
 (0)