diff options
Diffstat (limited to 'packages/client/src/widgets')
| -rw-r--r-- | packages/client/src/widgets/job-queue.vue | 7 | ||||
| -rw-r--r-- | packages/client/src/widgets/widget.ts | 7 |
2 files changed, 8 insertions, 6 deletions
diff --git a/packages/client/src/widgets/job-queue.vue b/packages/client/src/widgets/job-queue.vue index 8897f240bd..363d1b3ea0 100644 --- a/packages/client/src/widgets/job-queue.vue +++ b/packages/client/src/widgets/job-queue.vue @@ -47,12 +47,13 @@ <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'; import { stream } from '@/stream'; import number from '@/filters/number'; import * as sound from '@/scripts/sound'; import * as os from '@/os'; +import { deepClone } from '@/scripts/clone'; const name = 'jobQueue'; @@ -100,12 +101,12 @@ const prev = reactive({} as typeof current); const jammedSound = sound.setVolume(sound.getAudio('syuilo/queue-jammed'), 1); for (const domain of ['inbox', 'deliver']) { - prev[domain] = JSON.parse(JSON.stringify(current[domain])); + prev[domain] = deepClone(current[domain]); } const onStats = (stats) => { for (const domain of ['inbox', 'deliver']) { - prev[domain] = JSON.parse(JSON.stringify(current[domain])); + prev[domain] = deepClone(current[domain]); current[domain].activeSincePrevTick = stats[domain].activeSincePrevTick; current[domain].active = stats[domain].active; current[domain].waiting = stats[domain].waiting; diff --git a/packages/client/src/widgets/widget.ts b/packages/client/src/widgets/widget.ts index 9fdfe7f3e1..8bd56a5966 100644 --- a/packages/client/src/widgets/widget.ts +++ b/packages/client/src/widgets/widget.ts @@ -2,6 +2,7 @@ import { reactive, watch } from 'vue'; import { throttle } from 'throttle-debounce'; import { Form, GetFormResultType } from '@/scripts/form'; import * as os from '@/os'; +import { deepClone } from '@/scripts/clone'; export type Widget<P extends Record<string, unknown>> = { id: string; @@ -32,7 +33,7 @@ export const useWidgetPropsManager = <F extends Form & Record<string, { default: save: () => void; configure: () => void; } => { - const widgetProps = reactive(props.widget ? JSON.parse(JSON.stringify(props.widget.data)) : {}); + const widgetProps = reactive(props.widget ? deepClone(props.widget.data) : {}); const mergeProps = () => { for (const prop of Object.keys(propsDef)) { @@ -43,14 +44,14 @@ export const useWidgetPropsManager = <F extends Form & Record<string, { default: }; watch(widgetProps, () => { mergeProps(); - }, { deep: true, immediate: true, }); + }, { deep: true, immediate: true }); const save = throttle(3000, () => { emit('updateProps', widgetProps); }); const configure = async () => { - const form = JSON.parse(JSON.stringify(propsDef)); + const form = deepClone(propsDef); for (const item of Object.keys(form)) { form[item].default = widgetProps[item]; } |