2024-11-30 18:21:40 +01:00
|
|
|
<script setup lang="tsx">
|
2024-11-30 16:21:16 +01:00
|
|
|
import {
|
|
|
|
|
Ban,
|
|
|
|
|
Code,
|
|
|
|
|
Delete,
|
|
|
|
|
ExternalLink,
|
2024-12-02 16:07:52 +01:00
|
|
|
Flag,
|
|
|
|
|
Hash,
|
2024-11-30 16:21:16 +01:00
|
|
|
Link,
|
|
|
|
|
Pencil,
|
|
|
|
|
Trash,
|
|
|
|
|
} from "lucide-vue-next";
|
2024-11-30 18:21:40 +01:00
|
|
|
import { toast } from "vue-sonner";
|
2025-06-26 22:39:02 +02:00
|
|
|
import {
|
|
|
|
|
DropdownMenu,
|
|
|
|
|
DropdownMenuContent,
|
|
|
|
|
DropdownMenuGroup,
|
|
|
|
|
DropdownMenuItem,
|
|
|
|
|
DropdownMenuSeparator,
|
|
|
|
|
DropdownMenuTrigger,
|
|
|
|
|
} from "@/components/ui/dropdown-menu";
|
2024-12-01 18:54:17 +01:00
|
|
|
import { confirmModalService } from "~/components/modals/composable.ts";
|
2025-07-16 07:48:39 +02:00
|
|
|
import * as m from "~~/paraglide/messages.js";
|
2024-11-30 18:21:40 +01:00
|
|
|
|
2024-12-01 18:54:17 +01:00
|
|
|
const { authorId, noteId } = defineProps<{
|
2024-11-30 18:21:40 +01:00
|
|
|
apiNoteString: string;
|
|
|
|
|
isRemote: boolean;
|
|
|
|
|
url: string;
|
2025-05-26 11:19:15 +02:00
|
|
|
remoteUrl?: string;
|
2024-11-30 18:21:40 +01:00
|
|
|
authorId: string;
|
2024-12-01 18:54:17 +01:00
|
|
|
noteId: string;
|
2024-11-30 18:21:40 +01:00
|
|
|
}>();
|
|
|
|
|
|
2024-12-01 18:29:54 +01:00
|
|
|
const emit = defineEmits<{
|
|
|
|
|
edit: [];
|
2024-12-01 18:54:17 +01:00
|
|
|
delete: [];
|
2024-12-01 18:29:54 +01:00
|
|
|
}>();
|
|
|
|
|
|
2024-11-30 18:21:40 +01:00
|
|
|
const { copy } = useClipboard();
|
2025-08-28 07:41:51 +02:00
|
|
|
const authStore = useAuthStore();
|
|
|
|
|
const authorIsMe = authStore.isSignedIn && authorId === authStore.account?.id;
|
2024-11-30 18:21:40 +01:00
|
|
|
|
|
|
|
|
const copyText = (text: string) => {
|
|
|
|
|
copy(text);
|
2024-12-07 22:17:22 +01:00
|
|
|
toast.success(m.flat_nice_worm_dream());
|
2024-11-30 18:21:40 +01:00
|
|
|
};
|
|
|
|
|
|
2024-12-01 18:54:17 +01:00
|
|
|
const blockUser = async (userId: string) => {
|
2024-12-07 22:17:22 +01:00
|
|
|
const id = toast.loading(m.top_cute_bison_nudge());
|
2025-08-28 07:41:51 +02:00
|
|
|
await authStore.client.blockAccount(userId);
|
2024-12-01 18:54:17 +01:00
|
|
|
toast.dismiss(id);
|
2024-11-30 18:21:40 +01:00
|
|
|
|
2024-12-07 22:17:22 +01:00
|
|
|
toast.success(m.main_weary_racoon_peek());
|
2024-11-30 18:21:40 +01:00
|
|
|
};
|
2024-12-01 18:54:17 +01:00
|
|
|
|
|
|
|
|
const _delete = async () => {
|
2025-04-30 18:03:14 +02:00
|
|
|
if (preferences.confirm_actions.value.includes("delete")) {
|
2024-12-02 22:01:04 +01:00
|
|
|
const confirmation = await confirmModalService.confirm({
|
2024-12-07 22:17:22 +01:00
|
|
|
title: m.calm_icy_weasel_twirl(),
|
|
|
|
|
message: m.gray_fun_toucan_slide(),
|
|
|
|
|
confirmText: m.royal_best_tern_transform(),
|
2024-12-02 22:01:04 +01:00
|
|
|
inputType: "none",
|
|
|
|
|
});
|
2024-12-01 18:54:17 +01:00
|
|
|
|
2024-12-02 22:01:04 +01:00
|
|
|
if (!confirmation.confirmed) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
2024-12-01 18:54:17 +01:00
|
|
|
}
|
|
|
|
|
|
2024-12-07 22:17:22 +01:00
|
|
|
const id = toast.loading(m.new_funny_fox_boil());
|
2025-08-28 07:41:51 +02:00
|
|
|
await authStore.client.deleteStatus(noteId);
|
2024-12-01 18:54:17 +01:00
|
|
|
toast.dismiss(id);
|
|
|
|
|
|
2024-12-07 22:17:22 +01:00
|
|
|
toast.success(m.green_tasty_bumblebee_beam());
|
2024-12-01 18:54:17 +01:00
|
|
|
emit("delete");
|
|
|
|
|
};
|
2024-11-30 16:21:16 +01:00
|
|
|
</script>
|
|
|
|
|
|
|
|
|
|
<template>
|
|
|
|
|
<DropdownMenu>
|
|
|
|
|
<DropdownMenuTrigger as-child>
|
|
|
|
|
<slot />
|
|
|
|
|
</DropdownMenuTrigger>
|
2024-12-07 20:24:09 +01:00
|
|
|
<DropdownMenuContent class="min-w-56">
|
2024-11-30 16:21:16 +01:00
|
|
|
<DropdownMenuGroup>
|
2024-12-01 18:29:54 +01:00
|
|
|
<DropdownMenuItem v-if="authorIsMe" as="button" @click="emit('edit')">
|
2025-02-09 19:50:57 +01:00
|
|
|
<Pencil />
|
2024-12-07 22:17:22 +01:00
|
|
|
{{ m.front_lime_grizzly_persist() }}
|
2024-11-30 16:21:16 +01:00
|
|
|
</DropdownMenuItem>
|
2024-11-30 18:21:40 +01:00
|
|
|
<DropdownMenuItem as="button" @click="copyText(apiNoteString)">
|
2025-02-09 19:50:57 +01:00
|
|
|
<Code />
|
2024-12-07 22:17:22 +01:00
|
|
|
{{ m.yummy_moving_scallop_sail() }}
|
2024-11-30 16:21:16 +01:00
|
|
|
</DropdownMenuItem>
|
2024-12-02 16:07:52 +01:00
|
|
|
<DropdownMenuItem as="button" @click="copyText(noteId)">
|
2025-02-09 19:50:57 +01:00
|
|
|
<Hash />
|
2024-12-07 22:17:22 +01:00
|
|
|
{{ m.sunny_zany_jellyfish_pop() }}
|
2024-12-02 16:07:52 +01:00
|
|
|
</DropdownMenuItem>
|
|
|
|
|
</DropdownMenuGroup>
|
|
|
|
|
<DropdownMenuSeparator />
|
|
|
|
|
<DropdownMenuGroup>
|
2024-11-30 18:21:40 +01:00
|
|
|
<DropdownMenuItem as="button" @click="copyText(url)">
|
2025-02-09 19:50:57 +01:00
|
|
|
<Link />
|
2024-12-07 22:17:22 +01:00
|
|
|
{{ m.ago_new_pelican_drip() }}
|
2024-11-30 16:21:16 +01:00
|
|
|
</DropdownMenuItem>
|
2025-05-26 11:19:15 +02:00
|
|
|
<DropdownMenuItem as="button" v-if="isRemote && remoteUrl" @click="copyText(remoteUrl)">
|
2025-02-09 19:50:57 +01:00
|
|
|
<Link />
|
2024-12-07 22:17:22 +01:00
|
|
|
{{ m.solid_witty_zebra_walk() }}
|
2024-11-30 16:21:16 +01:00
|
|
|
</DropdownMenuItem>
|
2024-11-30 18:21:40 +01:00
|
|
|
<DropdownMenuItem as="a" v-if="isRemote" target="_blank" rel="noopener noreferrer" :href="remoteUrl">
|
2025-02-09 19:50:57 +01:00
|
|
|
<ExternalLink />
|
2024-12-07 22:17:22 +01:00
|
|
|
{{ m.active_trite_lark_inspire() }}
|
2024-11-30 16:21:16 +01:00
|
|
|
</DropdownMenuItem>
|
|
|
|
|
</DropdownMenuGroup>
|
2024-12-01 18:29:54 +01:00
|
|
|
<DropdownMenuSeparator v-if="authorIsMe" />
|
|
|
|
|
<DropdownMenuGroup v-if="authorIsMe">
|
2024-12-01 18:54:17 +01:00
|
|
|
<DropdownMenuItem as="button" :disabled="true">
|
2025-02-09 19:50:57 +01:00
|
|
|
<Delete />
|
2024-12-07 22:17:22 +01:00
|
|
|
{{ m.real_green_clownfish_pet() }}
|
2024-11-30 16:21:16 +01:00
|
|
|
</DropdownMenuItem>
|
2024-12-01 18:54:17 +01:00
|
|
|
<DropdownMenuItem as="button" @click="_delete">
|
2025-02-09 19:50:57 +01:00
|
|
|
<Trash />
|
2024-12-07 22:17:22 +01:00
|
|
|
{{ m.tense_quick_cod_favor() }}
|
2024-11-30 16:21:16 +01:00
|
|
|
</DropdownMenuItem>
|
|
|
|
|
</DropdownMenuGroup>
|
2025-08-28 07:41:51 +02:00
|
|
|
<DropdownMenuSeparator v-if="authStore.isSignedIn && !authorIsMe" />
|
|
|
|
|
<DropdownMenuGroup v-if="authStore.isSignedIn && !authorIsMe">
|
2024-11-30 18:21:40 +01:00
|
|
|
<DropdownMenuItem as="button" :disabled="true">
|
2025-02-09 19:50:57 +01:00
|
|
|
<Flag />
|
2024-12-07 22:17:22 +01:00
|
|
|
{{ m.great_few_jaguar_rise() }}
|
2024-11-30 16:21:16 +01:00
|
|
|
</DropdownMenuItem>
|
2024-11-30 18:21:40 +01:00
|
|
|
<DropdownMenuItem as="button" @click="blockUser(authorId)">
|
2025-02-09 19:50:57 +01:00
|
|
|
<Ban />
|
2024-12-07 22:17:22 +01:00
|
|
|
{{ m.misty_soft_sparrow_vent() }}
|
2024-11-30 16:21:16 +01:00
|
|
|
</DropdownMenuItem>
|
|
|
|
|
</DropdownMenuGroup>
|
|
|
|
|
</DropdownMenuContent>
|
|
|
|
|
</DropdownMenu>
|
2025-02-09 19:39:05 +01:00
|
|
|
</template>
|