mirror of
https://github.com/Fayorg/calendrier-avant.git
synced 2026-05-28 01:28:37 +02:00
add: full authentication with NextAuth
This commit is contained in:
55
components/forms/GradingForm.tsx
Normal file
55
components/forms/GradingForm.tsx
Normal file
@@ -0,0 +1,55 @@
|
||||
'use client';
|
||||
|
||||
import { useState } from 'react';
|
||||
import Image from 'next/image';
|
||||
import YourGrade from '@images/your-grade.svg';
|
||||
import { Check } from 'lucide-react';
|
||||
import { Session } from 'next-auth';
|
||||
import { addGrade } from '@/actions/grades';
|
||||
|
||||
export function GradingForm({ session, testId }: { session: Session; testId: number }) {
|
||||
const [grade, setGrade] = useState<number>(0);
|
||||
const [hasVoted, setHasVoted] = useState<boolean>(false);
|
||||
|
||||
async function handleSubmit(event: React.FormEvent<HTMLFormElement>) {
|
||||
event.preventDefault();
|
||||
|
||||
const result = await addGrade(testId, session.user.id, grade, null);
|
||||
if (result.id) {
|
||||
console.log('ok');
|
||||
setHasVoted(true);
|
||||
setGrade(result.grade);
|
||||
} else {
|
||||
console.log('error');
|
||||
}
|
||||
}
|
||||
|
||||
if (hasVoted && grade != 0) {
|
||||
return (
|
||||
<div className={'w-full md:w-[400px]'}>
|
||||
<div className={'flex flex-row justify-evenly'}>
|
||||
<Image src={YourGrade} alt={YourGrade} width={100} />
|
||||
<span className={'w-[54px] h-[54px] bg-accent rounded-[20px] contents-none grid place-content-center'}>{grade}</span>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
return (
|
||||
<div className={'w-full md:w-[400px]'}>
|
||||
<form onSubmit={handleSubmit}>
|
||||
<div>
|
||||
<input type="range" min="2" max="12" id="gradeSelector" className={'w-full h-4 bg-white range range:bg-white text-white'} onChange={(e) => setGrade(Number(e.target.value) / 2)} />
|
||||
</div>
|
||||
<div className={'flex flex-row justify-evenly'}>
|
||||
<Image src={YourGrade} alt={YourGrade} width={100} />
|
||||
<span className={'w-[54px] h-[54px] bg-accent rounded-[20px] contents-none grid place-content-center'}>{grade}</span>
|
||||
<input type="submit" value={'Envoyer'} id="submit" className={'hidden'}></input>
|
||||
<label htmlFor="submit" className={'w-[54px] h-[54px] bg-secondary rounded-[20px] contents-none grid place-content-center'}>
|
||||
<Check width={24} height={24} color={'white'} />
|
||||
</label>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
30
components/forms/LoginForm.tsx
Normal file
30
components/forms/LoginForm.tsx
Normal file
@@ -0,0 +1,30 @@
|
||||
'use client';
|
||||
|
||||
import { signIn } from 'next-auth/react';
|
||||
import { useState } from 'react';
|
||||
import { Input } from '../ui/input';
|
||||
import { Check } from 'lucide-react';
|
||||
|
||||
export function LoginForm() {
|
||||
const [password, setPassword] = useState('');
|
||||
|
||||
async function handleSubmit(event: React.FormEvent<HTMLFormElement>) {
|
||||
event.preventDefault();
|
||||
|
||||
console.log('Trying to sign in');
|
||||
await signIn('credentials', {
|
||||
key: password,
|
||||
callbackUrl: '/play',
|
||||
});
|
||||
}
|
||||
|
||||
return (
|
||||
<form onSubmit={handleSubmit} className={'flex flex-row gap-4 w-full md:w-[400px]'}>
|
||||
<Input type="password" placeholder="Mot de passe" id="password" name="password" value={password} onChange={(e) => setPassword(e.target.value)}></Input>
|
||||
<input type="submit" value="Submit" id="submit" className={'hidden'} />
|
||||
<label htmlFor="submit" className={'w-[54px] h-[54px] bg-secondary rounded-[20px] contents-none grid place-content-center'}>
|
||||
<Check width={24} height={24} color={'white'} />
|
||||
</label>
|
||||
</form>
|
||||
);
|
||||
}
|
||||
Reference in New Issue
Block a user