diff --git a/src/components/header.tsx b/src/components/header.tsx
index 3560833..f2f7479 100644
--- a/src/components/header.tsx
+++ b/src/components/header.tsx
@@ -2,15 +2,22 @@ import {useSession, signIn, signOut} from 'next-auth/react';
import HeaderItem from "./HeaderItem";
export default function Header() {
- const { data: session, status } = useSession()
+ const { status } = useSession()
return (
<>
-
+
alex
+
+ { status === "authenticated" &&
+
+ }
{
if (status == "unauthenticated") {
await signIn()
diff --git a/src/pages/create.tsx b/src/pages/create.tsx
new file mode 100644
index 0000000..cdcd9c1
--- /dev/null
+++ b/src/pages/create.tsx
@@ -0,0 +1,118 @@
+// react modules
+import {useState} from 'react'
+import type {FormEvent} from 'react';
+
+// trpc api
+import { api } from "@/utils/api";
+
+// components
+import RootLayout from '@/components/RootLayout';
+import InputOption from '@/components/InputOption';
+
+export default function CreatePage() {
+ // ui states
+ const [message, setMessage] = useState(null)
+
+ // trpc hooks
+ const postMutation = api.post.create.useMutation()
+ const linksMutation = api.links.create.useMutation()
+
+ function sanitizeTitleForLink(title: string) {
+ return title.replaceAll(" ", "-").toLowerCase()
+ }
+
+ function onPostSubmit(event: FormEvent) {
+ const form = event.target as HTMLFormElement
+
+ const titleElement = form.elements.namedItem('title') as HTMLInputElement;
+ const reviewElement = form.elements.namedItem('review') as HTMLInputElement;
+ const imageElement = form.elements.namedItem('image') as HTMLInputElement;
+ const typeElement = form.elements.namedItem('type') as HTMLInputElement;
+
+ if (!titleElement.value || !reviewElement.value || !imageElement.value || !typeElement.value) {
+ event.preventDefault();
+
+ setMessage("One or more values were missing!")
+ setTimeout(() => setMessage(null), 5000)
+ } else {
+ const object = {
+ name: sanitizeTitleForLink(titleElement.value),
+ reviewContents: reviewElement.value,
+ image: imageElement.value,
+ type: typeElement.value
+ }
+
+ postMutation.mutate(object)
+ }
+ }
+
+ function onLinkSubmit(event: FormEvent) {
+ const form = event.target as HTMLFormElement
+ const urlRegex = new RegExp("^((https):\/\/)?(www.)?[a-z0-9]+\.[a-z]+(\/[a-zA-Z0-9#]+\/?)*$")
+
+ const titleElement = form.elements.namedItem('title') as HTMLInputElement;
+ const urlElement = form.elements.namedItem('url') as HTMLInputElement;
+ const urlMatches = urlElement.value.match(urlRegex)
+
+ if (!titleElement.value || !urlElement.value) {
+ event.preventDefault();
+
+ setMessage("One or more values were missing!")
+ setTimeout(() => setMessage(null), 5000)
+ } else if (urlMatches != null && !urlMatches[1]) {
+ event.preventDefault();
+
+ setMessage("An invalid URL was provided!")
+ setTimeout(() => setMessage(null), 5000)
+ } else {
+ const object = {
+ name: titleElement.value,
+ url: urlElement.value
+ }
+
+ linksMutation.mutate(object)
+ }
+ }
+
+ return (
+
+
+
+
Create Review Post
+
+
+
+
+
+
+
+
{message}
+
+
+
+
Create Link
+
+
+
+
+
+
+
+
{message}
+
+
+
+ )
+}
\ No newline at end of file
diff --git a/src/pages/index.tsx b/src/pages/index.tsx
index 934d1fb..9296cef 100644
--- a/src/pages/index.tsx
+++ b/src/pages/index.tsx
@@ -1,22 +1,17 @@
-import Header from "@/components/header";
-import Footer from "@/components/footer";
+import RootLayout from "@/components/RootLayout";
import Dropdown from "@/components/Dropdown";
import ProjectCard from "@/components/ProjectsCard";
import Image from 'next/image';
export default function Home() {
return (
-
+