summaryrefslogtreecommitdiff
path: root/packages/frontend/src/pages/custom-emojis-manager.vue
diff options
context:
space:
mode:
Diffstat (limited to 'packages/frontend/src/pages/custom-emojis-manager.vue')
-rw-r--r--packages/frontend/src/pages/custom-emojis-manager.vue43
1 files changed, 31 insertions, 12 deletions
diff --git a/packages/frontend/src/pages/custom-emojis-manager.vue b/packages/frontend/src/pages/custom-emojis-manager.vue
index 0f306896c9..5cb88f0b1a 100644
--- a/packages/frontend/src/pages/custom-emojis-manager.vue
+++ b/packages/frontend/src/pages/custom-emojis-manager.vue
@@ -54,7 +54,7 @@ SPDX-License-Identifier: AGPL-3.0-only
<template #empty><span>{{ i18n.ts.noCustomEmojis }}</span></template>
<template #default="{items}">
<div class="ldhfsamy">
- <div v-for="emoji in items" :key="emoji.id" class="emoji _panel _button" @click="remoteMenu(emoji, $event)">
+ <div v-for="emoji in items" :key="emoji.id" class="emoji _panel _button" @click="remoteMenu(emoji as RemoteEmoji, $event)">
<img :src="getProxiedImageUrl(emoji.url, 'emoji')" class="img" :alt="emoji.name"/>
<div class="body">
<div class="name _monospace">{{ emoji.name }}</div>
@@ -71,7 +71,8 @@ SPDX-License-Identifier: AGPL-3.0-only
</template>
<script lang="ts" setup>
-import { computed, defineAsyncComponent, markRaw, ref } from 'vue';
+import * as Misskey from 'misskey-js';
+import { computed, markRaw, ref } from 'vue';
import MkButton from '@/components/MkButton.vue';
import MkInput from '@/components/MkInput.vue';
import MkPagination from '@/components/MkPagination.vue';
@@ -93,6 +94,8 @@ const host = ref<string | null>(null);
const selectMode = ref(false);
const selectedEmojis = ref<string[]>([]);
+type RemoteEmoji = Misskey.entities.AdminEmojiListRemoteResponse[number] & { host: string };
+
const paginator = markRaw(new Paginator('admin/emoji/list', {
limit: 30,
computedParams: computed(() => ({
@@ -116,7 +119,7 @@ const selectAll = () => {
}
};
-const toggleSelect = (emoji) => {
+const toggleSelect = (emoji: Misskey.entities.EmojiDetailed) => {
if (selectedEmojis.value.includes(emoji.id)) {
selectedEmojis.value = selectedEmojis.value.filter(x => x !== emoji.id);
} else {
@@ -124,19 +127,23 @@ const toggleSelect = (emoji) => {
}
};
-const add = async (ev: MouseEvent) => {
+const add = async () => {
const { dispose } = await os.popupAsyncWithDialog(import('./emoji-edit-dialog.vue').then(x => x.default), {
}, {
done: result => {
if (result.created) {
- paginator.prepend(result.created);
+ const nowIso = (new Date()).toISOString();
+ paginator.prepend({
+ ...result.created,
+ createdAt: nowIso,
+ });
}
},
closed: () => dispose(),
});
};
-const edit = async (emoji) => {
+const edit = async (emoji: Misskey.entities.EmojiDetailed) => {
const { dispose } = await os.popupAsyncWithDialog(import('./emoji-edit-dialog.vue').then(x => x.default), {
emoji: emoji,
}, {
@@ -154,7 +161,13 @@ const edit = async (emoji) => {
});
};
-const detailRemoteEmoji = (emoji) => {
+const detailRemoteEmoji = (emoji: {
+ id: string,
+ name: string,
+ host: string,
+ license: string | null,
+ url: string
+}) => {
const { dispose } = os.popup(MkRemoteEmojiEditDialog, {
emoji: emoji,
}, {
@@ -167,13 +180,19 @@ const detailRemoteEmoji = (emoji) => {
});
};
-const importEmoji = (emoji) => {
+const importEmoji = (emojiId: string) => {
os.apiWithDialog('admin/emoji/copy', {
- emojiId: emoji.id,
+ emojiId: emojiId,
});
};
-const remoteMenu = (emoji, ev: MouseEvent) => {
+const remoteMenu = (emoji: {
+ id: string,
+ name: string,
+ host: string,
+ license: string | null,
+ url: string
+}, ev: PointerEvent) => {
os.popupMenu([{
type: 'label',
text: ':' + emoji.name + ':',
@@ -184,11 +203,11 @@ const remoteMenu = (emoji, ev: MouseEvent) => {
}, {
text: i18n.ts.import,
icon: 'ti ti-plus',
- action: () => { importEmoji(emoji); },
+ action: () => { importEmoji(emoji.id); },
}], ev.currentTarget ?? ev.target);
};
-const menu = (ev: MouseEvent) => {
+const menu = (ev: PointerEvent) => {
os.popupMenu([{
icon: 'ti ti-download',
text: i18n.ts.export,