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;