'use client' // Libraries import React, { useEffect, useState } from 'react' import { useRouter, usePathname } from 'next/navigation' import { useSnapshot } from 'valtio' import { useTranslations } from 'next-intl' // Dependencies: Common import Button from '~components/common/Button' import { DropdownMenu, DropdownMenuTrigger, DropdownMenuContent, } from '~components/common/DropdownMenuContent' import DropdownMenuGroup from '~components/common/DropdownMenuGroup' import DropdownMenuItem from '~components/common/DropdownMenuItem' // Dependencies: Toasts import RemixedToast from '~components/toasts/RemixedToast' import UrlCopiedToast from '~components/toasts/UrlCopiedToast' // Dependencies: Alerts import DeleteTeamAlert from '~components/dialogs/DeleteTeamAlert' import RemixTeamAlert from '~components/dialogs/RemixTeamAlert' // Dependencies: Utils import { appState } from '~utils/appState' // Dependencies: Icons import EllipsisIcon from '~public/icons/Ellipsis.svg' // Dependencies: Props interface Props { editable: boolean deleteTeamCallback: () => void remixTeamCallback: () => void teamVisibilityCallback: () => void } const PartyDropdown = ({ editable, deleteTeamCallback, remixTeamCallback, teamVisibilityCallback, }: Props) => { // Localization const t = useTranslations('common') // Router const router = useRouter() const pathname = usePathname() const [open, setOpen] = useState(false) const [deleteAlertOpen, setDeleteAlertOpen] = useState(false) const [remixAlertOpen, setRemixAlertOpen] = useState(false) const [copyToastOpen, setCopyToastOpen] = useState(false) const [remixToastOpen, setRemixToastOpen] = useState(false) // Snapshots const { party: partySnapshot } = useSnapshot(appState) // Methods: Event handlers (Buttons) function handleButtonClicked() { setOpen(!open) } // Methods: Event handlers (Menus) function handleOpenChange(open: boolean) { setOpen(open) } function closeMenu() { setOpen(false) } // Method: Actions function copyToClipboard() { if (pathname?.split('/')[1] === 'p') { navigator.clipboard.writeText(window.location.href) setCopyToastOpen(true) } } // Methods: Event handlers // Dialogs / Visibility function visibilityCallback() { teamVisibilityCallback() } // Alerts / Delete team function openDeleteTeamAlert() { setDeleteAlertOpen(true) } function handleDeleteTeamAlertChange(open: boolean) { setDeleteAlertOpen(open) } // Alerts / Remix team function openRemixTeamAlert() { setRemixAlertOpen(true) } function handleRemixTeamAlertChange(open: boolean) { setRemixAlertOpen(open) } // Toasts / Copy URL function handleCopyToastOpenChanged(open: boolean) { setCopyToastOpen(!open) } function handleCopyToastCloseClicked() { setCopyToastOpen(false) } // Toasts: Remix team function handleRemixToastOpenChanged(open: boolean) { setRemixToastOpen(!open) } function handleRemixToastCloseClicked() { setRemixToastOpen(false) } function remixCallback() { setRemixToastOpen(true) remixTeamCallback() } const items = ( <> {t('dropdown.party.visibility')} {t('dropdown.party.copy')} {t('dropdown.party.remix')} {t('dropdown.party.delete')} ) return ( <>
) } export default PartyDropdown