import React, { useState, useEffect, useRef, ReactNode, } from "react"; import { Share, DownloadSimple, Gear, X, GithubLogo, SignOut, ArrowSquareOut, CloudArrowUp, CaretDown, User, FilePlus, } from "phosphor-react"; import Image from "next/image"; import { DropdownMenu, DropdownMenuTrigger, DropdownMenuContent, DropdownMenuItem, DropdownMenuArrow, DropdownMenuSeparator, } from "./DropdownMenu"; import NewWindow from "react-new-window"; import { signOut, useSession } from "next-auth/react"; import { useSnapshot } from "valtio"; import toast from "react-hot-toast"; import { syncToGist, updateEditorSettings, downloadAsZip, } from "../state/actions"; import state from "../state"; import Box from "./Box"; import Button from "./Button"; import Container from "./Container"; import { Dialog, DialogTrigger, DialogContent, DialogTitle, DialogDescription, DialogClose, } from "./Dialog"; import Flex from "./Flex"; import Stack from "./Stack"; import { Input, Label } from "./Input"; import Tooltip from "./Tooltip"; import { showAlert } from "../state/actions/showAlert"; const EditorNavigation = ({ renderNav }: { renderNav?: () => ReactNode }) => { const snap = useSnapshot(state); const [editorSettingsOpen, setEditorSettingsOpen] = useState(false); const { data: session, status } = useSession(); const [popup, setPopUp] = useState(false); const [editorSettings, setEditorSettings] = useState(snap.editorSettings); useEffect(() => { if (session && session.user && popup) { setPopUp(false); } }, [session, popup]); const showNewGistAlert = () => { showAlert("Are you sure?", { body: ( <> This action will create new public Github Gist from your current saved files. You can delete gist anytime from your GitHub Gists page. ), cancelText: "Cancel", confirmText: "Create new Gist", confirmPrefix: , onConfirm: () => syncToGist(session, true), }); }; const scrollRef = useRef(null); const containerRef = useRef(null); return ( { if (scrollRef.current) { scrollRef.current.scrollLeft += e.deltaY; } }} > {renderNav?.()} {status === "authenticated" ? ( User avatar signOut()}> {session?.user?.username} ( {session?.user.name}) window.open( `http://gist.github.com/${session?.user.username}` ) } > Go to your Gist signOut({ callbackUrl: "/" })}> Log out ) : ( )} Download as ZIP { navigator.clipboard.writeText( `${window.location.origin}/develop/${snap.gistId}` ); toast.success("Copied share link to clipboard!"); }} > Copy share link to clipboard { syncToGist(session); }} > Push to Gist { showNewGistAlert(); }} > Create as a new Gist setEditorSettingsOpen(true)}> Editor Settings {popup && !session ? ( ) : null} {/* */} Editor settings setEditorSettings(curr => ({ ...curr, tabSize: Number(e.target.value), })) } /> ); }; export default EditorNavigation;