import { Show } from "solid-js"; import { Trans } from "@lingui-solid/solid/macro"; import type { API } from "stoat.js"; import { Channel, Server } from "stoat.js"; import { useModals } from "@revolt/modal"; import { useState } from "@revolt/state"; import MdBadge from "@material-design-icons/svg/outlined/badge.svg?component-solid"; import MdDelete from "@material-design-icons/svg/outlined/delete.svg?component-solid"; import MdLibraryAdd from "@material-design-icons/svg/outlined/library_add.svg?component-solid"; import MdMarkChatRead from "@material-design-icons/svg/outlined/mark_chat_read.svg?component-solid"; import { Symbol } from "@revolt/ui/components/utils/Symbol"; import { ContextMenu, ContextMenuButton, ContextMenuDivider, } from "./ContextMenu"; export type CategoryData = Omit & { channels: Channel[]; }; /** * Context menu for categories */ export function CategoryContextMenu(props: { server: Server; category: CategoryData; }) { const state = useState(); const { openModal } = useModals(); /** * Mark category as read */ function markAsRead() { props.category.channels .filter((channel) => channel.unread) .forEach((channel) => channel.ack()); } /** * Create a new category */ function createCategory() { openModal({ type: "create_category", server: props.server, }); } /** * Delete category */ function deleteCategory() { openModal({ type: "delete_category", server: props.server, categoryId: props.category.id, }); } function editCategoryName() { openModal({ type: "edit_category", server: props.server, category: props.category, }); } /** * Copy category id to clipboard */ function copyId() { navigator.clipboard.writeText(props.category.id); } /** * Determine if any channel in category has unread messages */ const hasUnread = () => { return props.category.channels.some((channel) => channel?.unread); }; return ( Mark as read Create category edit} onClick={editCategoryName} > Rename category Delete category Copy category ID ); }