From a9aa246f58dcb2664c4e7a1bd98e69c19e7d7000 Mon Sep 17 00:00:00 2001
From: Sam Nystrom <sam@samnystrom.dev>
Date: Tue, 12 Mar 2024 14:52:25 +0000
Subject: Add rudimentary backend and auth

---
 src/pages/SignUp.tsx | 53 ++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 53 insertions(+)
 create mode 100644 src/pages/SignUp.tsx

(limited to 'src/pages/SignUp.tsx')

diff --git a/src/pages/SignUp.tsx b/src/pages/SignUp.tsx
new file mode 100644
index 0000000..99cc7d6
--- /dev/null
+++ b/src/pages/SignUp.tsx
@@ -0,0 +1,53 @@
+import { useContext } from 'preact/hooks';
+import { useSignal } from '@preact/signals';
+import { route } from 'preact-router';
+import { Pb } from '../pb.ts';
+
+export const SignUp = () => {
+	const pb = useContext(Pb);
+
+	const username = useSignal('');
+	const email = useSignal('');
+	const password = useSignal('');
+	const confirm = useSignal('');
+
+	const onSubmit = async (event: SubmitEvent) => {
+		event.preventDefault();
+		const user = await pb.collection('users').create({
+			username: username.value,
+			email: email.value,
+			emailVisibility: true,
+			password: password.value,
+			passwordConfirm: confirm.value,
+		});
+		if (pb.authStore.isValid) {
+			route('/' + user.username);
+		}
+	};
+
+	return (
+		<main class="container">
+			<article>
+				<form onSubmit={onSubmit}>
+					<label>
+						Username:
+						<input type="text" value={username} onInput={e => username.value = e.target.value} />
+					</label>
+					<label>
+						Email:
+						<input type="text" value={email} onInput={e => email.value = e.target.value} />
+					</label>
+					<label>
+						Password:
+						<input type="password" value={password} onInput={e => password.value = e.target.value} />
+					</label>
+					<label>
+						Confirm Password:
+						<input type="password" value={confirm} onInput={e => confirm.value = e.target.value} />
+					</label>
+					<button>Sign Up</button>
+				</form>
+			</article>
+		</main>
+	);
+};
\ No newline at end of file
-- 
cgit v1.2.3

