import React, { useCallback, useEffect, useRef } from "react" import { motion, AnimatePresence } from "framer-motion" import { icons } from "lucide-react" import { Button } from "@/components/ui/button" import { Tooltip, TooltipContent, TooltipTrigger } from "@/components/ui/tooltip" import { getSpecialShortcut, formatShortcut, isMacOS } from "@/lib/utils" import { LaIcon } from "@/components/custom/la-icon" import { useAtom } from "jotai" import { parseAsBoolean, useQueryState } from "nuqs" import { useConfirm } from "@omit/react-confirm-dialog" import { useAccount, useCoState } from "@/lib/providers/jazz-provider" import { PersonalLink } from "@/lib/schema" import { ID } from "jazz-tools" import { globalLinkFormExceptionRefsAtom } from "./partials/form/link-form" import { useLinkActions } from "./hooks/use-link-actions" interface ToolbarButtonProps extends React.ComponentPropsWithoutRef { icon: keyof typeof icons onClick?: (e: React.MouseEvent) => void tooltip?: string } const ToolbarButton = React.forwardRef( ({ icon, onClick, tooltip, ...props }, ref) => { const button = ( ) if (tooltip) { return ( {button}

{tooltip}

) } return button } ) ToolbarButton.displayName = "ToolbarButton" export const LinkBottomBar: React.FC = () => { const [editId, setEditId] = useQueryState("editId") const [createMode, setCreateMode] = useQueryState("create", parseAsBoolean) const [, setGlobalLinkFormExceptionRefsAtom] = useAtom(globalLinkFormExceptionRefsAtom) const { me } = useAccount({ root: { personalLinks: [] } }) const personalLink = useCoState(PersonalLink, editId as ID) const cancelBtnRef = useRef(null) const confirmBtnRef = useRef(null) const overlayRef = useRef(null) const contentRef = useRef(null) const deleteBtnRef = useRef(null) const editMoreBtnRef = useRef(null) const plusBtnRef = useRef(null) const plusMoreBtnRef = useRef(null) const { deleteLink } = useLinkActions() const confirm = useConfirm() const handleCreateMode = useCallback(() => { setEditId(null) setTimeout(() => { setCreateMode(prev => !prev) }, 100) }, [setEditId, setCreateMode]) useEffect(() => { setGlobalLinkFormExceptionRefsAtom([ overlayRef, contentRef, deleteBtnRef, editMoreBtnRef, cancelBtnRef, confirmBtnRef, plusBtnRef, plusMoreBtnRef ]) }, [setGlobalLinkFormExceptionRefsAtom]) const handleDelete = async (e: React.MouseEvent) => { if (!personalLink || !me) return const result = await confirm({ title: `Delete "${personalLink.title}"?`, description: "This action cannot be undone.", alertDialogTitle: { className: "text-base" }, alertDialogOverlay: { ref: overlayRef }, alertDialogContent: { ref: contentRef }, cancelButton: { variant: "outline", ref: cancelBtnRef }, confirmButton: { variant: "destructive", ref: confirmBtnRef } }) if (result) { deleteLink(me, personalLink) setEditId(null) } } useEffect(() => { const handleKeyDown = (event: KeyboardEvent) => { const isCreateShortcut = isMacOS() ? event.ctrlKey && event.metaKey && event.key.toLowerCase() === "n" : event.ctrlKey && event.key.toLowerCase() === "n" && (event.metaKey || event.altKey) if (isCreateShortcut) { event.preventDefault() handleCreateMode() } } window.addEventListener("keydown", handleKeyDown) return () => window.removeEventListener("keydown", handleKeyDown) }, [handleCreateMode]) const shortcutKeys = getSpecialShortcut("expandToolbar") const shortcutText = formatShortcut(shortcutKeys) return ( {editId && ( setEditId(null)} /> )} {!editId && ( {createMode && } {!createMode && ( )} {/* */} )} ) } LinkBottomBar.displayName = "LinkBottomBar" export default LinkBottomBar