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