1
0
forked from mirror/misskey
mi.moris.day/packages/frontend/src/pages/custom-emojis-manager.vue

124 lines
2.9 KiB
Vue
Raw Normal View History

<!--
2024-02-12 11:37:45 +09:00
SPDX-FileCopyrightText: syuilo and misskey-project
SPDX-License-Identifier: AGPL-3.0-only
-->
<template>
<div>
<MkStickyContainer>
<template #header><MkPageHeader v-model:tab="tab" :actions="headerActions" :tabs="headerTabs"/></template>
<MkSpacer :contentMax="900">
<div class="ogwlenmc">
<div v-if="tab === 'local'" class="local">
<MkCustomEmojiEditLocal/>
</div>
<div v-if="tab === 'request'" class="request">
<MkCustomEmojiEditRequest/>
</div>
<div v-else-if="tab === 'remote'" class="remote">
<MkCustomEmojiEditRemote/>
</div>
</div>
</MkSpacer>
</MkStickyContainer>
</div>
</template>
2022-01-13 00:47:05 +09:00
<script lang="ts" setup>
import { computed, defineAsyncComponent, ref } from 'vue';
import MkCustomEmojiEditRequest from '@/components/MkCustomEmojiEditRequest.vue';
import MkCustomEmojiEditLocal from '@/components/MkCustomEmojiEditLocal.vue';
import MkCustomEmojiEditRemote from '@/components/MkCustomEmojiEditRemote.vue';
import { selectFile } from '@/scripts/select-file';
import * as os from '@/os';
import { misskeyApi } from '@/scripts/misskey-api.js';
import { i18n } from '@/i18n';
import { definePageMetadata } from '@/scripts/page-metadata';
const tab = ref('request');
2022-01-13 00:47:05 +09:00
const add = async (ev: MouseEvent) => {
os.popup(defineAsyncComponent(() => import('../components/MkEmojiEditDialog.vue')), {
}, {
done: result => {
//TODO: emitにして追加を反映
// if (result.created) {
// emojisPaginationComponent.value.prepend(result.created);
// emojisPaginationComponent.value.reload();
// }
},
}, 'closed');
2022-01-13 00:47:05 +09:00
};
const menu = (ev: MouseEvent) => {
os.popupMenu([{
icon: 'ti ti-download',
text: i18n.ts.export,
2022-01-13 00:47:05 +09:00
action: async () => {
misskeyApi('export-custom-emojis', {
2022-01-13 00:47:05 +09:00
})
.then(() => {
os.alert({
type: 'info',
text: i18n.ts.exportRequested,
});
}).catch((err) => {
os.alert({
type: 'error',
text: err.message,
});
2022-01-13 00:47:05 +09:00
});
},
2022-01-13 00:47:40 +09:00
}, {
icon: 'ti ti-upload',
text: i18n.ts.import,
2022-01-13 00:47:40 +09:00
action: async () => {
2022-01-28 11:53:12 +09:00
const file = await selectFile(ev.currentTarget ?? ev.target);
misskeyApi('admin/emoji/import-zip', {
2022-01-13 00:47:40 +09:00
fileId: file.id,
})
.then(() => {
os.alert({
type: 'info',
text: i18n.ts.importRequested,
});
}).catch((err) => {
os.alert({
type: 'error',
text: err.message,
});
2022-01-13 00:47:40 +09:00
});
},
2022-01-28 11:53:12 +09:00
}], ev.currentTarget ?? ev.target);
2022-01-13 00:47:05 +09:00
};
const headerActions = computed(() => [{
asFullButton: true,
icon: 'ti ti-plus',
text: i18n.ts.addEmoji,
handler: add,
}, {
icon: 'ti ti-dots',
handler: menu,
}]);
const headerTabs = computed(() => [{
key: 'request',
title: i18n.ts.requestingEmojis,
}, {
key: 'local',
title: i18n.ts.local,
}, {
key: 'remote',
title: i18n.ts.remote,
}]);
definePageMetadata(() => ({
title: i18n.ts.customEmojis,
2022-12-31 20:36:49 +09:00
icon: 'ti ti-icons',
}));
</script>
<style lang="scss" scoped>
</style>