diff options
| author | かっこかり <67428053+kakkokari-gtyih@users.noreply.github.com> | 2025-12-30 14:32:40 +0900 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-12-30 14:32:40 +0900 |
| commit | 4285303c8155dd91be7dcbb865d5e8f7cb0e1c71 (patch) | |
| tree | 51a193c90401ada45f25921e4efdc07b46095ac5 /packages/frontend/src/widgets/widget.ts | |
| parent | enhance(frontend): ウィジェットの設定画面を改良 (#17033) (diff) | |
| download | misskey-4285303c8155dd91be7dcbb865d5e8f7cb0e1c71.tar.gz misskey-4285303c8155dd91be7dcbb865d5e8f7cb0e1c71.tar.bz2 misskey-4285303c8155dd91be7dcbb865d5e8f7cb0e1c71.zip | |
fix(frontend): follow-up of #17033 (#17047)
* wip
* fix
* ref -> reactive
* tweak throttle threshold
* tweak throttle threshold
* rss設定にはmanualSaveを使用するように
* Update MkWidgetSettingsDialog.vue
---------
Co-authored-by: syuilo <4439005+syuilo@users.noreply.github.com>
Diffstat (limited to 'packages/frontend/src/widgets/widget.ts')
| -rw-r--r-- | packages/frontend/src/widgets/widget.ts | 27 |
1 files changed, 16 insertions, 11 deletions
diff --git a/packages/frontend/src/widgets/widget.ts b/packages/frontend/src/widgets/widget.ts index 6c5ff36b16..d4209f6251 100644 --- a/packages/frontend/src/widgets/widget.ts +++ b/packages/frontend/src/widgets/widget.ts @@ -4,8 +4,9 @@ */ import { defineAsyncComponent, reactive, watch } from 'vue'; -import type { Reactive } from 'vue'; import { throttle } from 'throttle-debounce'; +import { getDefaultFormValues } from '@/utility/form.js'; +import type { Reactive } from 'vue'; import type { FormWithDefault, GetFormResultType } from '@/utility/form.js'; import * as os from '@/os.js'; import { deepClone } from '@/utility/clone.js'; @@ -39,19 +40,23 @@ export const useWidgetPropsManager = <F extends FormWithDefault>( save: () => void; configure: () => void; } => { - const widgetProps = reactive<GetFormResultType<F>>((props.widget ? deepClone(props.widget.data) : {}) as GetFormResultType<F>); - - const mergeProps = () => { - for (const prop of Object.keys(propsDef)) { - if (typeof widgetProps[prop] === 'undefined') { - widgetProps[prop] = propsDef[prop].default; + const widgetProps = reactive((() => { + const np = getDefaultFormValues(propsDef); + if (props.widget?.data != null) { + for (const key of Object.keys(props.widget.data) as (keyof F)[]) { + np[key] = props.widget.data[key] as GetFormResultType<F>[typeof key]; } } - }; + return np; + })()); - watch(widgetProps, () => { - mergeProps(); - }, { deep: true, immediate: true }); + watch(() => props.widget?.data, (to) => { + if (to != null) { + for (const key of Object.keys(propsDef)) { + widgetProps[key] = to[key]; + } + } + }, { deep: true }); const save = throttle(3000, () => { emit('updateProps', widgetProps as GetFormResultType<F>); |