summaryrefslogtreecommitdiff
path: root/packages/frontend/src/widgets/widget.ts
diff options
context:
space:
mode:
authorかっこかり <67428053+kakkokari-gtyih@users.noreply.github.com>2025-12-30 14:32:40 +0900
committerGitHub <noreply@github.com>2025-12-30 14:32:40 +0900
commit4285303c8155dd91be7dcbb865d5e8f7cb0e1c71 (patch)
tree51a193c90401ada45f25921e4efdc07b46095ac5 /packages/frontend/src/widgets/widget.ts
parentenhance(frontend): ウィジェットの設定画面を改良 (#17033) (diff)
downloadmisskey-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.ts27
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>);