fix MkRoleSelectDialog.vue

This commit is contained in:
samunohito 2024-02-18 09:33:10 +09:00
parent 87ff8e8d94
commit 5e64974539
4 changed files with 31 additions and 19 deletions

View File

@ -1,15 +1,17 @@
<template> <template>
<MkWindow <MkModalWindow
ref="windowEl" ref="windowEl"
:initialWidth="400" :withOkButton="false"
:initialHeight="500" :okButtonDisabled="false"
:canResize="false" :width="400"
@close="windowEl?.close()" :height="500"
@closed="$emit('closed')" @close="onCloseModalWindow"
@closed="console.log('MkRoleSelectDialog: closed') ; $emit('dispose')"
> >
<template #header>{{ title }}</template> <template #header>{{ title }}</template>
<MkSpacer :marginMin="20" :marginMax="28"> <MkSpacer :marginMin="20" :marginMax="28">
<div class="_gaps"> <MkLoading v-if="fetching"/>
<div v-else class="_gaps">
<div :class="$style.header"> <div :class="$style.header">
<MkButton rounded @click="addRole"><i class="ti ti-plus"></i> {{ i18n.ts.add }}</MkButton> <MkButton rounded @click="addRole"><i class="ti ti-plus"></i> {{ i18n.ts.add }}</MkButton>
</div> </div>
@ -35,7 +37,7 @@
</div> </div>
</div> </div>
</MkSpacer> </MkSpacer>
</MkWindow> </MkModalWindow>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
@ -46,14 +48,15 @@ import MkButton from '@/components/MkButton.vue';
import MkInfo from '@/components/MkInfo.vue'; import MkInfo from '@/components/MkInfo.vue';
import MkRolePreview from '@/components/MkRolePreview.vue'; import MkRolePreview from '@/components/MkRolePreview.vue';
import { misskeyApi } from '@/scripts/misskey-api.js'; import { misskeyApi } from '@/scripts/misskey-api.js';
import Section from '@/components/form/section.vue';
import * as os from '@/os.js'; import * as os from '@/os.js';
import MkWindow from '@/components/MkWindow.vue';
import MkSpacer from '@/components/global/MkSpacer.vue'; import MkSpacer from '@/components/global/MkSpacer.vue';
import MkModalWindow from '@/components/MkModalWindow.vue';
import MkLoading from '@/components/global/MkLoading.vue';
const emit = defineEmits<{ const emit = defineEmits<{
(ev: 'done', value: Misskey.entities.Role[]), (ev: 'done', value: Misskey.entities.Role[]),
(ev: 'closed'), (ev: 'close'),
(ev: 'dispose'),
}>(); }>();
const props = withDefaults(defineProps<{ const props = withDefaults(defineProps<{
@ -70,9 +73,10 @@ const props = withDefaults(defineProps<{
const { initialRoleIds, infoMessage, title, publicOnly } = toRefs(props); const { initialRoleIds, infoMessage, title, publicOnly } = toRefs(props);
const windowEl = ref<InstanceType<typeof MkWindow>>(); const windowEl = ref<InstanceType<typeof MkModalWindow>>();
const roles = ref<Misskey.entities.Role[]>([]); const roles = ref<Misskey.entities.Role[]>([]);
const selectedRoleIds = ref<string[]>(initialRoleIds.value ?? []); const selectedRoleIds = ref<string[]>(initialRoleIds.value ?? []);
const fetching = ref(false);
const selectedRoles = computed(() => { const selectedRoles = computed(() => {
const r = roles.value.filter(role => selectedRoleIds.value.includes(role.id)); const r = roles.value.filter(role => selectedRoleIds.value.includes(role.id));
@ -87,8 +91,10 @@ const selectedRoles = computed(() => {
}); });
async function fetchRoles() { async function fetchRoles() {
fetching.value = true;
const result = await misskeyApi('admin/roles/list', {}); const result = await misskeyApi('admin/roles/list', {});
roles.value = result.filter(it => publicOnly.value ? it.isPublic : true); roles.value = result.filter(it => publicOnly.value ? it.isPublic : true);
fetching.value = false;
} }
async function addRole() { async function addRole() {
@ -115,7 +121,13 @@ function onOkClicked() {
} }
function onCancelClicked() { function onCancelClicked() {
emit('closed'); emit('close');
windowEl.value?.close();
}
function onCloseModalWindow() {
emit('close');
windowEl.value?.close();
} }
fetchRoles(); fetchRoles();

View File

@ -489,10 +489,10 @@ export async function selectRole(params: {
done: roles => { done: roles => {
resolve({ canceled: false, result: roles }); resolve({ canceled: false, result: roles });
}, },
closed: () => { close: () => {
resolve({ canceled: true, result: undefined }); resolve({ canceled: true, result: undefined });
}, },
}, 'closed'); }, 'dispose');
}); });
} }

View File

@ -275,9 +275,9 @@ function setupGrid(): GridSetting {
}, },
customValueEditor: async (row) => { customValueEditor: async (row) => {
// ID使 // ID使
const current = gridItems.value[row.index].roleIdsThatCanBeUsedThisEmojiAsReaction.map(it => it.id); const current = gridItems.value[row.index].roleIdsThatCanBeUsedThisEmojiAsReaction;
const result = await os.selectRole({ const result = await os.selectRole({
initialRoleIds: current, initialRoleIds: current.map(it => it.id),
title: i18n.ts.rolesThatCanBeUsedThisEmojiAsReaction, title: i18n.ts.rolesThatCanBeUsedThisEmojiAsReaction,
infoMessage: i18n.ts.rolesThatCanBeUsedThisEmojiAsReactionEmptyDescription, infoMessage: i18n.ts.rolesThatCanBeUsedThisEmojiAsReactionEmptyDescription,
publicOnly: true, publicOnly: true,

View File

@ -169,9 +169,9 @@ function setupGrid(): GridSetting {
}, },
customValueEditor: async (row) => { customValueEditor: async (row) => {
// ID使 // ID使
const current = gridItems.value[row.index].roleIdsThatCanBeUsedThisEmojiAsReaction.map(it => it.id); const current = gridItems.value[row.index].roleIdsThatCanBeUsedThisEmojiAsReaction;
const result = await os.selectRole({ const result = await os.selectRole({
initialRoleIds: current, initialRoleIds: current.map(it => it.id),
title: i18n.ts.rolesThatCanBeUsedThisEmojiAsReaction, title: i18n.ts.rolesThatCanBeUsedThisEmojiAsReaction,
infoMessage: i18n.ts.rolesThatCanBeUsedThisEmojiAsReactionEmptyDescription, infoMessage: i18n.ts.rolesThatCanBeUsedThisEmojiAsReactionEmptyDescription,
publicOnly: true, publicOnly: true,