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' ? (
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}
)
}
export default EditorNavigation