diff --git a/packages/frontend/src/pages/admin/RolesEditorFormula.vue b/packages/frontend/src/pages/admin/RolesEditorFormula.vue index c6099697ff..80cc1d9d8f 100644 --- a/packages/frontend/src/pages/admin/RolesEditorFormula.vue +++ b/packages/frontend/src/pages/admin/RolesEditorFormula.vue @@ -37,8 +37,8 @@ SPDX-License-Identifier: AGPL-3.0-only
-
- +
+
{{ i18n.ts.add }} @@ -75,7 +75,7 @@ import { deepClone } from '@/scripts/clone.js'; import { rolesCache } from '@/cache.js'; const emit = defineEmits<{ - (ev: 'update:modelValue', value: any): void; + (ev: 'update:modelValue', value: Misskey.entities.RoleCondFormulaValue): void; (ev: 'remove'): void; }>(); @@ -95,24 +95,38 @@ function assertValueNot(f: Misskey.entities.RoleCondFormulaValue): f is Misskey. const dndParentEl = shallowRef(); const v = ref(deepClone(props.modelValue)); -const values = computed({ +const valueKv = computed(() => { + if (assertLogicFormula(v.value)) { + return Object.fromEntries(v.value.values.map(v => [v.id, v] as const)); + } else { + return []; + } +}); + +const valueIds = computed({ get: () => { if (assertLogicFormula(v.value)) { - return v.value.values; + return v.value.values.map(v => v.id); } else { return []; } }, set: (newVal) => { if (assertLogicFormula(v.value)) { - v.value.values = newVal; + v.value.values = newVal.map(id => { + if (assertLogicFormula(v.value)) { + return v.value.values.find(v => v.id === id) ?? null; + } else { + return null; + } + }).filter(v => v !== null); } } }); dragAndDrop({ parent: dndParentEl, - values, + values: valueIds, group: 'roleFormula', dragHandle: '.drag-handle', plugins: [animations()], @@ -154,15 +168,15 @@ function addValue() { v.value.values.push({ id: uuid(), type: 'isRemote' }); } -function valuesItemUpdated(item) { +function valuesItemUpdated(item: Misskey.entities.RoleCondFormulaValue) { if (!assertLogicFormula(v.value)) return; const i = v.value.values.findIndex(_item => _item.id === item.id); v.value.values[i] = item; } -function removeItem(item: Misskey.entities.RoleCondFormulaValue) { +function removeItem(itemId: string) { if (!assertLogicFormula(v.value)) return; - v.value.values = v.value.values.filter(_item => _item.id !== item.id); + v.value.values = v.value.values.filter(_item => _item.id !== itemId); } function removeSelf() { diff --git a/packages/frontend/src/pages/admin/server-rules.vue b/packages/frontend/src/pages/admin/server-rules.vue index 69a09756fa..48124ef5e2 100644 --- a/packages/frontend/src/pages/admin/server-rules.vue +++ b/packages/frontend/src/pages/admin/server-rules.vue @@ -11,17 +11,17 @@ SPDX-License-Identifier: AGPL-3.0-only
{{ i18n.ts._serverRules.description }}
-
+
- +
- +
- {{ i18n.ts.add }} + {{ i18n.ts.add }} {{ i18n.ts.save }}
@@ -32,6 +32,7 @@ SPDX-License-Identifier: AGPL-3.0-only