Files
classroomio/apps/dashboard/src/routes/reset/+page.svelte
T

115 lines
3.0 KiB
Svelte
Raw Normal View History

2025-11-01 15:49:29 +01:00
<script lang="ts">
import { untrack } from 'svelte';
import { goto } from '$app/navigation';
import TextField from '$lib/components/Form/TextField.svelte';
import PrimaryButton from '$lib/components/PrimaryButton/index.svelte';
import { getSupabase } from '$lib/utils/functions/supabase';
2025-11-01 15:49:29 +01:00
import { resetValidation, getConfirmPasswordError, getDisableSubmit } from '$lib/utils/functions/validator';
import { RESET_FIELDS } from '$lib/utils/constants/authentication';
import AuthUI from '$lib/components/AuthUI/index.svelte';
2022-12-03 22:45:01 +01:00
let supabase = getSupabase();
2025-11-01 15:49:29 +01:00
let fields = $state(Object.assign({}, RESET_FIELDS));
let loading = $state(false);
let errors: {
email?: string;
password?: string;
confirmPassword?: string;
} = $state({});
let submitError = $state();
let formRef: HTMLFormElement | undefined = $state();
2022-12-03 22:45:01 +01:00
2025-11-01 15:49:29 +01:00
const disableSubmit = $derived(getDisableSubmit(fields));
async function handleSubmit() {
2022-12-03 22:45:01 +01:00
errors = resetValidation(fields);
console.log('errors', errors);
if (Object.keys(errors).length) {
return;
}
try {
loading = true;
2023-09-17 02:33:29 +01:00
const { data, error } = await supabase.auth.updateUser({
2023-08-04 12:49:34 +01:00
password: fields.password
2022-12-03 22:45:01 +01:00
});
console.log('data', data);
if (error) throw error;
formRef?.reset();
return goto('/login');
} catch (error) {
2025-11-01 15:49:29 +01:00
submitError = error instanceof Error ? error.message : String(error);
2022-12-03 22:45:01 +01:00
} finally {
loading = false;
}
}
2025-11-01 15:49:29 +01:00
function setConfirmPasswordError(fields) {
untrack(() => {
errors.confirmPassword = getConfirmPasswordError(fields);
});
}
$effect(() => {
setConfirmPasswordError(fields);
});
2022-12-03 22:45:01 +01:00
</script>
<svelte:head>
<title>Join ClassroomIO</title>
</svelte:head>
<AuthUI
{supabase}
isLogin={false}
{handleSubmit}
showOnlyContent={true}
2023-08-04 12:49:34 +01:00
isLoading={loading}
2022-12-03 22:45:01 +01:00
showLogo={true}
bind:formRef
>
<div class="mt-4 w-full">
2025-11-01 15:49:29 +01:00
<h3 class="my-3 text-xl font-semibold dark:text-white">New Password</h3>
<p class="mb-6 text-sm dark:text-white">Enter your new password details</p>
2022-12-03 22:45:01 +01:00
<TextField
label="Your Password"
bind:value={fields.password}
type="password"
placeholder="************"
className="mb-6"
inputClassName="w-full"
isDisabled={loading}
errorMessage={errors.password}
helperMessage="Password must be more than 6 characters"
isRequired
/>
<TextField
label="Confirm Password"
bind:value={fields.confirmPassword}
type="password"
placeholder="************"
className="mb-6"
inputClassName="w-full"
isDisabled={loading}
errorMessage={errors.confirmPassword}
isRequired
/>
{#if submitError}
<p class="text-sm text-red-500">{submitError}</p>
2022-12-03 22:45:01 +01:00
{/if}
</div>
2025-11-01 15:49:29 +01:00
<div class="my-4 flex w-full items-center justify-end">
2022-12-03 22:45:01 +01:00
<PrimaryButton
label="Reset Password"
type="submit"
className="sm:w-full w-full"
isDisabled={disableSubmit || loading}
isLoading={loading}
/>
</div>
</AuthUI>