import { Entity, MegalodonInterface } from 'megalodon' import { useRouter } from 'next/router' import { FaBookmark, FaEllipsis, FaFaceLaughBeam, FaReply, FaRetweet, FaStar } from 'react-icons/fa6' import Picker from '@emoji-mart/react' import { data } from '@/utils/emojiData' import { Account } from '@/db' import { FormattedMessage, useIntl } from 'react-intl' import { IconButton, List, ListItem, Popover, PopoverContent, PopoverHandler } from '@material-tailwind/react' import { useState } from 'react' import { invoke } from '@/utils/invoke' type Props = { status: Entity.Status account: Account client: MegalodonInterface onRefresh: () => void } export default function Actions(props: Props) { const [popoverDetail, setPopoverDetail] = useState(false) const [popoverEmoji, setPopoverEmoji] = useState(false) const router = useRouter() const { formatMessage } = useIntl() const reply = async () => { router.push({ query: { id: router.query.id, timeline: router.query.timeline, reply_target_id: props.status.id, detail: true } }) } const reblog = async () => { if (props.status.reblogged) { await props.client.unreblogStatus(props.status.id) } else { await props.client.reblogStatus(props.status.id) } props.onRefresh() } const favourite = async () => { if (props.status.favourited) { await props.client.unfavouriteStatus(props.status.id) } else { await props.client.favouriteStatus(props.status.id) } props.onRefresh() } const bookmark = async () => { if (props.status.bookmarked) { await props.client.unbookmarkStatus(props.status.id) } else { await props.client.bookmarkStatus(props.status.id) } props.onRefresh() } const onEmojiSelect = async emoji => { await props.client.createEmojiReaction(props.status.id, emoji.native) setPopoverEmoji(false) props.onRefresh() } const original = () => { setPopoverDetail(false) invoke('open-browser', props.status.url) } const report = () => { setPopoverDetail(false) router.push({ query: { id: router.query.id, timeline: router.query.timeline, report_target_id: props.status.id, modal: true } }) } return (
{props.account.sns !== 'mastodon' && ( )}
) } const retweetColor = (status: Entity.Status) => { if (status.reblogged) { return 'text-blue-600' } else { return 'text-gray-400' } } const favouriteColor = (status: Entity.Status) => { if (status.favourited) { return 'text-orange-400' } else { return 'text-gray-400' } } const bookmarkColor = (status: Entity.Status) => { if (status.bookmarked) { return 'text-red-500' } else { return 'text-gray-400' } }