LinkList/frontend/pages/editor.tsx

80 lines
2.1 KiB
TypeScript

import Head from "next/head";
import { GetStaticProps } from "next";
import React, { useState } from "react";
import { AuthProvider, useAuth } from "components/Login/authcontext";
import LoginHead from "components/Login/loginhead";
import LoginBox from "components/Login/loginbox";
import Analytics from "components/Analytics";
import Editor from "components/Editor";
import { EditableLink } from "components/Editor/Link";
export const getStaticProps: GetStaticProps = async () => {
// TODO: Fetch links here
return {
props: {
data: [
{
name: "dummlink1",
url: "www.helloworld.com",
clicks: 0,
active: true,
},
{
name: "dummlink2",
url: "www.hiworld.com",
clicks: 0,
active: true,
},
],
}, // will be passed to the page component as props
// Next.js will attempt to re-generate the page:
// - When a request comes intype EditableLink = {
// - At most once every second
revalidate: 1,
};
};
const LoginScreen: React.FC = () => (
<div className="fixed h-screen w-full overflow-auto bg-gray-100">
<div className="m-auto h-full flex justify-center items-center">
<div className="container m-auto h-auto flex flex-col justify-center items-center p-10 space-y-20">
<Head>
<title>Login</title>
</Head>
<LoginHead />
<div className="flex justify-center items-center px-10 py-8 bg-gray-50 border-2 border-gray-300 rounded-lg">
<LoginBox />
</div>
</div>
</div>
</div>
);
interface EditorPageProps {
data: any;
}
const EditorPage: React.FC<EditorPageProps> = ({ data }) => {
const { loggedIn } = useAuth();
const [links, setLinks] = useState<EditableLink[]>(data ?? []);
console.log({ links });
return loggedIn ? (
<>
<Analytics />
<Editor links={links} setLinks={setLinks} />
</>
) : (
<LoginScreen />
);
};
export default function EditorPageWrapper({ data }: any): JSX.Element {
return (
<AuthProvider>
<EditorPage data={data} />
</AuthProvider>
);
}