diff --git a/src/app/(dev)/dev/mock-portal/mock-portal-content.tsx b/src/app/(dev)/dev/mock-portal/mock-portal-content.tsx new file mode 100644 index 0000000..2ab6f1a --- /dev/null +++ b/src/app/(dev)/dev/mock-portal/mock-portal-content.tsx @@ -0,0 +1,226 @@ +"use client"; + +import { useState } from "react"; +import Image from "next/image"; +import { mockMembers, isMockAdmin } from "@/lib/mock-members"; + +export default function MockPortalContent() { + const [selectedMember, setSelectedMember] = useState(mockMembers[0]); + const [email, setEmail] = useState(mockMembers[0].owneremail); + const [password, setPassword] = useState("password"); + const [loading, setLoading] = useState(false); + const [error, setError] = useState(""); + + function handleMemberSelect(ownerid: number) { + const member = mockMembers.find((m) => m.ownerid === ownerid); + if (member) { + setSelectedMember(member); + setEmail(member.owneremail); + setError(""); + } + } + + async function handleLogin(e: React.FormEvent) { + e.preventDefault(); + setError(""); + + if (!email || !password) { + setError("You must enter an email address and password."); + return; + } + + const member = mockMembers.find((m) => m.owneremail.toLowerCase() === email.toLowerCase()); + if (!member) { + setError("No member found with that email address."); + return; + } + + setLoading(true); + + const res = await fetch("/api/dev/token", { + method: "POST", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify({ ownerid: member.ownerid, isAdmin: isMockAdmin(member.ownerid) }), + }); + + if (!res.ok) { + setLoading(false); + setError("Failed to generate authentication token."); + return; + } + + const { token } = await res.json(); + + const form = document.createElement("form"); + form.method = "POST"; + form.action = "/api/auth/callback"; + + const input = document.createElement("input"); + input.type = "hidden"; + input.name = "token"; + input.value = token; + form.appendChild(input); + + document.body.appendChild(form); + form.submit(); + } + + const navItems = ["The Co-op", "News & Events", "Get Involved", "Join Now", "Donate", "Contact Us", "FAQ", "Login"]; + + return ( +
+
+
+ Paso Robles Food Co-op Logo +
+

For help or info, please contact us:

+

+ E-Mail:{" "} + + info@pasofoodcooperative.com + +

+
+
+
+ + + +
+
+

+ You must be logged in to view this page. +

+ +

+ Login to your Paso Food Co-op Member Account +

+ +
+
+ + { + setEmail(e.target.value); + if (error) setError(""); + }} + className="w-full rounded border border-prfc-border px-3 py-2 text-sm focus:border-prfc-brown focus:outline-none focus:ring-1 focus:ring-prfc-brown" + /> +
+ +
+ + setPassword(e.target.value)} + className="w-full rounded border border-prfc-border px-3 py-2 text-sm focus:border-prfc-brown focus:outline-none focus:ring-1 focus:ring-prfc-brown" + /> +
+ + {error ?

{error}

: null} + + +
+ +
+ + Need an Account? + + + Forgot Your Password? + + + Contact Paso Food Co-op + +
+
+ +
+
+ + Dev Tools - Quick Select Member + + +
+ + +
+
+ Name: {selectedMember.ownername} +
+
+ Email: {selectedMember.owneremail} +
+
+ Owner ID: {selectedMember.ownerid} +
+
+ Role: {isMockAdmin(selectedMember.ownerid) ? "Admin" : "Member"} +
+
+
+
+
+
+ +
+

+ {navItems.map((item, i) => ( + + + {item} + + {i < navItems.length - 1 ? " | " : ""} + + ))} +

+

+ Copyright © 2013-2026 by Paso Robles Food Cooperative, Inc. All Rights Reserved. +

+
+
+ ); +} diff --git a/src/app/(dev)/dev/mock-portal/page.tsx b/src/app/(dev)/dev/mock-portal/page.tsx index cb5bafb..0a89f43 100644 --- a/src/app/(dev)/dev/mock-portal/page.tsx +++ b/src/app/(dev)/dev/mock-portal/page.tsx @@ -1,16 +1,6 @@ -"use client"; - -import { useState } from "react"; -import Image from "next/image"; -import { mockMembers, isMockAdmin } from "@/lib/mock-members"; +import MockPortalContent from "./mock-portal-content"; export default function MockPortalPage() { - const [selectedMember, setSelectedMember] = useState(mockMembers[0]); - const [email, setEmail] = useState(mockMembers[0].owneremail); - const [password, setPassword] = useState("password"); - const [loading, setLoading] = useState(false); - const [error, setError] = useState(""); - if (process.env.NODE_ENV === "production" && process.env.STAGING !== "true") { return (
@@ -19,216 +9,5 @@ export default function MockPortalPage() { ); } - function handleMemberSelect(ownerid: number) { - const member = mockMembers.find((m) => m.ownerid === ownerid); - if (member) { - setSelectedMember(member); - setEmail(member.owneremail); - setError(""); - } - } - - async function handleLogin(e: React.FormEvent) { - e.preventDefault(); - setError(""); - - if (!email || !password) { - setError("You must enter an email address and password."); - return; - } - - const member = mockMembers.find((m) => m.owneremail.toLowerCase() === email.toLowerCase()); - if (!member) { - setError("No member found with that email address."); - return; - } - - setLoading(true); - - const res = await fetch("/api/dev/token", { - method: "POST", - headers: { "Content-Type": "application/json" }, - body: JSON.stringify({ ownerid: member.ownerid, isAdmin: isMockAdmin(member.ownerid) }), - }); - - if (!res.ok) { - setLoading(false); - setError("Failed to generate authentication token."); - return; - } - - const { token } = await res.json(); - - const form = document.createElement("form"); - form.method = "POST"; - form.action = "/api/auth/callback"; - - const input = document.createElement("input"); - input.type = "hidden"; - input.name = "token"; - input.value = token; - form.appendChild(input); - - document.body.appendChild(form); - form.submit(); - } - - const navItems = ["The Co-op", "News & Events", "Get Involved", "Join Now", "Donate", "Contact Us", "FAQ", "Login"]; - - return ( -
-
-
- Paso Robles Food Co-op Logo -
-

For help or info, please contact us:

-

- E-Mail:{" "} - - info@pasofoodcooperative.com - -

-
-
-
- - - -
-
-

- You must be logged in to view this page. -

- -

- Login to your Paso Food Co-op Member Account -

- -
-
- - { - setEmail(e.target.value); - if (error) setError(""); - }} - className="w-full rounded border border-prfc-border px-3 py-2 text-sm focus:border-prfc-brown focus:outline-none focus:ring-1 focus:ring-prfc-brown" - /> -
- -
- - setPassword(e.target.value)} - className="w-full rounded border border-prfc-border px-3 py-2 text-sm focus:border-prfc-brown focus:outline-none focus:ring-1 focus:ring-prfc-brown" - /> -
- - {error ?

{error}

: null} - - -
- - -
- -
-
- - Dev Tools - Quick Select Member - - -
- - -
-
- Name: {selectedMember.ownername} -
-
- Email: {selectedMember.owneremail} -
-
- Owner ID: {selectedMember.ownerid} -
-
- Role: {isMockAdmin(selectedMember.ownerid) ? "Admin" : "Member"} -
-
-
-
-
-
- -
-

- {navItems.map((item, i) => ( - - - {item} - - {i < navItems.length - 1 ? " | " : ""} - - ))} -

-

- Copyright © 2013-2026 by Paso Robles Food Cooperative, Inc. All Rights Reserved. -

-
-
- ); + return ; }