import { Dropdown, Menu, MenuButton, MenuItem, Tooltip } from "@mui/joy"; import { Edit3Icon, MoreVerticalIcon, TrashIcon, PlusIcon } from "lucide-react"; import { observer } from "mobx-react-lite"; import { userServiceClient } from "@/grpcweb"; import useAsyncEffect from "@/hooks/useAsyncEffect"; import useCurrentUser from "@/hooks/useCurrentUser"; import { useMemoFilterStore } from "@/store/v1"; import { userStore } from "@/store/v2"; import { Shortcut } from "@/types/proto/api/v1/user_service"; import { cn } from "@/utils"; import { useTranslate } from "@/utils/i18n"; import showCreateShortcutDialog from "../CreateShortcutDialog"; const emojiRegex = /^(\p{Emoji_Presentation}|\p{Emoji}\uFE0F)$/u; const ShortcutsSection = observer(() => { const t = useTranslate(); const user = useCurrentUser(); const memoFilterStore = useMemoFilterStore(); const shortcuts = userStore.state.shortcuts; useAsyncEffect(async () => { await userStore.fetchShortcuts(); }, []); const handleDeleteShortcut = async (shortcut: Shortcut) => { const confirmed = window.confirm("Are you sure you want to delete this shortcut?"); if (confirmed) { await userServiceClient.deleteShortcut({ parent: user.name, id: shortcut.id }); await userStore.fetchShortcuts(); } }; return (
{t("common.shortcuts")} showCreateShortcutDialog({})} />
{shortcuts.map((shortcut) => { const maybeEmoji = shortcut.title.split(" ")[0]; const emoji = emojiRegex.test(maybeEmoji) ? maybeEmoji : undefined; const title = emoji ? shortcut.title.replace(emoji, "") : shortcut.title; const selected = memoFilterStore.shortcut === shortcut.id; return (
(selected ? memoFilterStore.setShortcut(undefined) : memoFilterStore.setShortcut(shortcut.id))} > {emoji && {emoji}} {title.trim()} showCreateShortcutDialog({ shortcut })}> {t("common.edit")} handleDeleteShortcut(shortcut)}> {t("common.delete")}
); })}
); }); export default ShortcutsSection;