2025-04-30 01:44:16 +02:00
|
|
|
<template>
|
|
|
|
|
<DropdownMenu>
|
|
|
|
|
<DropdownMenuTrigger as-child>
|
|
|
|
|
<slot />
|
|
|
|
|
</DropdownMenuTrigger>
|
|
|
|
|
<DropdownMenuContent class="min-w-48">
|
|
|
|
|
<DropdownMenuItem @click="deleteAll" :disabled="!canEdit">
|
|
|
|
|
<Delete />
|
|
|
|
|
{{ m.tense_quick_cod_favor() }}
|
|
|
|
|
</DropdownMenuItem>
|
|
|
|
|
</DropdownMenuContent>
|
|
|
|
|
</DropdownMenu>
|
|
|
|
|
</template>
|
|
|
|
|
|
|
|
|
|
<script lang="ts" setup>
|
2025-05-26 11:19:15 +02:00
|
|
|
import { type CustomEmoji, RolePermission } from "@versia/client/schemas";
|
2025-04-30 01:44:16 +02:00
|
|
|
import { Delete } from "lucide-vue-next";
|
|
|
|
|
import { toast } from "vue-sonner";
|
2025-05-26 11:19:15 +02:00
|
|
|
import type { z } from "zod";
|
2025-04-30 01:44:16 +02:00
|
|
|
import { confirmModalService } from "~/components/modals/composable";
|
|
|
|
|
import {
|
|
|
|
|
DropdownMenu,
|
|
|
|
|
DropdownMenuContent,
|
|
|
|
|
DropdownMenuItem,
|
|
|
|
|
DropdownMenuTrigger,
|
|
|
|
|
} from "~/components/ui/dropdown-menu";
|
2025-07-16 07:48:39 +02:00
|
|
|
import * as m from "~~/paraglide/messages.js";
|
2025-04-30 01:44:16 +02:00
|
|
|
|
|
|
|
|
const { emojis } = defineProps<{
|
2025-05-26 11:19:15 +02:00
|
|
|
emojis: z.infer<typeof CustomEmoji>[];
|
2025-04-30 01:44:16 +02:00
|
|
|
}>();
|
|
|
|
|
|
2025-08-28 07:41:51 +02:00
|
|
|
const authStore = useAuthStore();
|
2025-04-30 01:44:16 +02:00
|
|
|
const canEdit =
|
|
|
|
|
(!emojis.some((e) => e.global) &&
|
2025-08-28 07:41:51 +02:00
|
|
|
authStore.permissions.includes(RolePermission.ManageOwnEmojis)) ||
|
|
|
|
|
authStore.permissions.includes(RolePermission.ManageEmojis);
|
2025-04-30 01:44:16 +02:00
|
|
|
|
|
|
|
|
const deleteAll = async () => {
|
2025-08-28 07:41:51 +02:00
|
|
|
if (!authStore.isSignedIn) {
|
2025-04-30 01:44:16 +02:00
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const { confirmed } = await confirmModalService.confirm({
|
|
|
|
|
title: m.tense_quick_cod_favor(),
|
|
|
|
|
message: m.next_hour_jurgen_sprout({
|
|
|
|
|
amount: emojis.length,
|
|
|
|
|
}),
|
|
|
|
|
confirmText: m.tense_quick_cod_favor(),
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
if (confirmed) {
|
|
|
|
|
const id = toast.loading(
|
|
|
|
|
m.equal_only_crow_file({
|
|
|
|
|
amount: emojis.length,
|
|
|
|
|
}),
|
|
|
|
|
);
|
|
|
|
|
try {
|
|
|
|
|
await Promise.all(
|
2025-08-28 07:41:51 +02:00
|
|
|
emojis.map((emoji) => authStore.client.deleteEmoji(emoji.id)),
|
2025-04-30 01:44:16 +02:00
|
|
|
);
|
|
|
|
|
toast.dismiss(id);
|
|
|
|
|
toast.success("Emojis deleted");
|
|
|
|
|
|
2025-08-28 07:41:51 +02:00
|
|
|
authStore.updateActiveIdentity({
|
|
|
|
|
emojis: authStore.emojis.filter(
|
|
|
|
|
(e) => !emojis.some((emoji) => e.id === emoji.id),
|
|
|
|
|
),
|
|
|
|
|
});
|
2025-04-30 01:44:16 +02:00
|
|
|
} catch {
|
|
|
|
|
toast.dismiss(id);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
</script>
|