You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
95 lines
2.7 KiB
95 lines
2.7 KiB
import {
|
|
Tooltip,
|
|
TooltipArrow,
|
|
TooltipContent,
|
|
TooltipProvider,
|
|
TooltipTrigger,
|
|
} from "@components/UI/Tooltip.tsx";
|
|
import { cn } from "@core/utils/cn.ts";
|
|
import { Reply, SmilePlus } from "lucide-react";
|
|
import { useTranslation } from "react-i18next";
|
|
|
|
interface MessageActionsMenuProps {
|
|
onAddReaction?: () => void;
|
|
onReply?: () => void;
|
|
}
|
|
|
|
export const MessageActionsMenu = ({
|
|
onAddReaction,
|
|
onReply,
|
|
}: MessageActionsMenuProps) => {
|
|
const { t } = useTranslation();
|
|
const hoverIconBarClass = cn(
|
|
"absolute top-2 right-2",
|
|
"flex items-center gap-x-1",
|
|
"bg-white dark:bg-zinc-800",
|
|
"border border-gray-200 dark:border-zinc-600",
|
|
"rounded-md shadow-sm p-1",
|
|
"opacity-0 group-hover:opacity-100",
|
|
"transition-opacity duration-100 ease-in-out",
|
|
"z-10",
|
|
);
|
|
|
|
const hoverIconButtonClass = cn(
|
|
"p-1 rounded",
|
|
"text-gray-500 dark:text-gray-400",
|
|
"hover:text-gray-700 dark:hover:text-gray-300",
|
|
"hover:bg-gray-100 dark:hover:bg-zinc-700",
|
|
"cursor-pointer",
|
|
);
|
|
|
|
const iconSizeClass = "size-4";
|
|
|
|
return (
|
|
<div
|
|
className={cn(hoverIconBarClass)}
|
|
onClick={(e) => e.stopPropagation()}
|
|
>
|
|
<TooltipProvider delayDuration={300}>
|
|
<Tooltip>
|
|
<TooltipTrigger asChild>
|
|
<button
|
|
type="button"
|
|
aria-label={t("messages_actionsMenu_addReactionLabel")}
|
|
onClick={(e) => {
|
|
e.stopPropagation();
|
|
if (onAddReaction) {
|
|
onAddReaction();
|
|
}
|
|
}}
|
|
className={hoverIconButtonClass}
|
|
>
|
|
<SmilePlus className={iconSizeClass} aria-hidden="true" />
|
|
</button>
|
|
</TooltipTrigger>
|
|
<TooltipContent className="bg-gray-800 text-white px-2 py-1 rounded text-xs">
|
|
{t("messages_actionsMenu_addReactionLabel")}
|
|
<TooltipArrow className="fill-gray-800" />
|
|
</TooltipContent>
|
|
</Tooltip>
|
|
|
|
<Tooltip>
|
|
<TooltipTrigger asChild>
|
|
<button
|
|
type="button"
|
|
aria-label={t("messages_actionsMenu_replyLabel")}
|
|
onClick={(e) => {
|
|
e.stopPropagation();
|
|
if (onReply) {
|
|
onReply();
|
|
}
|
|
}}
|
|
className={hoverIconButtonClass}
|
|
>
|
|
<Reply className={iconSizeClass} aria-hidden="true" />
|
|
</button>
|
|
</TooltipTrigger>
|
|
<TooltipContent className="bg-gray-800 text-white px-2 py-1 rounded text-xs">
|
|
{t("messages_actionsMenu_replyLabel")}
|
|
<TooltipArrow className="fill-gray-800" />
|
|
</TooltipContent>
|
|
</Tooltip>
|
|
</TooltipProvider>
|
|
</div>
|
|
);
|
|
};
|
|
|