gitscope
https://dev.kronoz.win/r/marzneshin.git
dashboard/src/modules/auth/login/form.tsx · v0.7.0
Source
1 4466347 Mrdn 2y ago
2 d636f3f Dawsh 2y ago import { fetch } from "@marzneshin/common/utils"
3 7389ad0 Mardin 2y ago import { LoginSchema, useAuth } from "@marzneshin/modules/auth";
4 4466347 Mrdn 2y ago import { useNavigate } from "@tanstack/react-router";
5 4466347 Mrdn 2y ago import { useState } from "react";
6 4466347 Mrdn 2y ago import { FieldValues, useForm } from "react-hook-form";
7 4466347 Mrdn 2y ago import { zodResolver } from '@hookform/resolvers/zod';
8 7389ad0 Mardin 2y ago import {
9 7389ad0 Mardin 2y ago Button,
10 7389ad0 Mardin 2y ago Form,
11 7389ad0 Mardin 2y ago FormControl,
12 7389ad0 Mardin 2y ago FormField,
13 7389ad0 Mardin 2y ago FormItem,
14 7389ad0 Mardin 2y ago FormLabel,
15 7389ad0 Mardin 2y ago FormMessage,
16 7389ad0 Mardin 2y ago Input
17 7389ad0 Mardin 2y ago } from "@marzneshin/common/components";
18 4466347 Mrdn 2y ago import { useTranslation } from "react-i18next";
19 4466347 Mrdn 2y ago import { FormError } from "./form-error";
20 4466347 Mrdn 2y ago
21 4466347 Mrdn 2y ago export const LoginForm = () => {
22 9ddfbc8 Mardin 2y ago const { setAuthToken, setSudo } = useAuth();
23 4466347 Mrdn 2y ago const form = useForm({
24 4466347 Mrdn 2y ago resolver: zodResolver(LoginSchema),
25 4466347 Mrdn 2y ago defaultValues: {
26 4466347 Mrdn 2y ago username: '',
27 4466347 Mrdn 2y ago password: '',
28 4466347 Mrdn 2y ago }
29 4466347 Mrdn 2y ago })
30 4466347 Mrdn 2y ago const navigate = useNavigate({ from: '/login' });
31 4466347 Mrdn 2y ago const [error, setError] = useState<string>('');
32 4466347 Mrdn 2y ago const { t } = useTranslation();
33 4466347 Mrdn 2y ago
34 9ddfbc8 Mardin 2y ago const submit = async (values: FieldValues) => {
35 4466347 Mrdn 2y ago setError('');
36 4466347 Mrdn 2y ago const formData = new FormData();
37 4466347 Mrdn 2y ago formData.append('username', values.username);
38 4466347 Mrdn 2y ago formData.append('password', values.password);
39 4466347 Mrdn 2y ago formData.append('grant_type', 'password');
40 9ddfbc8 Mardin 2y ago
41 9ddfbc8 Mardin 2y ago try {
42 9ddfbc8 Mardin 2y ago const { access_token, is_sudo } = await fetch('/admins/token', { method: 'post', body: formData });
43 9ddfbc8 Mardin 2y ago setAuthToken(access_token);
44 9ddfbc8 Mardin 2y ago setSudo(is_sudo);
45 9ddfbc8 Mardin 2y ago navigate({ to: '/' });
46 9ddfbc8 Mardin 2y ago } catch (err: any) {
47 9ddfbc8 Mardin 2y ago setError(err.response._data?.detail || 'An error occurred');
48 9ddfbc8 Mardin 2y ago }
49 4466347 Mrdn 2y ago };
50 4466347 Mrdn 2y ago
51 4466347 Mrdn 2y ago return (
52 4466347 Mrdn 2y ago <Form {...form}>
53 4466347 Mrdn 2y ago <form onSubmit={form.handleSubmit(submit)}>
54 4466347 Mrdn 2y ago <FormField
55 4466347 Mrdn 2y ago control={form.control}
56 4466347 Mrdn 2y ago name="username"
57 4466347 Mrdn 2y ago render={({ field }) => (
58 4466347 Mrdn 2y ago <FormItem>
59 4466347 Mrdn 2y ago <FormLabel className="font-semibold text-primary">{t('username')}</FormLabel>
60 4466347 Mrdn 2y ago <FormControl>
61 25f60ca Mrdn 2y ago <Input type="text" {...field} />
62 4466347 Mrdn 2y ago </FormControl>
63 4466347 Mrdn 2y ago <FormMessage />
64 4466347 Mrdn 2y ago </FormItem>
65 4466347 Mrdn 2y ago )}
66 4466347 Mrdn 2y ago />
67 4466347 Mrdn 2y ago <FormField
68 4466347 Mrdn 2y ago control={form.control}
69 4466347 Mrdn 2y ago name="password"
70 4466347 Mrdn 2y ago render={({ field }) => (
71 4466347 Mrdn 2y ago <FormItem>
72 4466347 Mrdn 2y ago <FormLabel className="font-semibold text-primary">{t('password')}</FormLabel>
73 4466347 Mrdn 2y ago <FormControl>
74 25f60ca Mrdn 2y ago <Input type="password" {...field} />
75 4466347 Mrdn 2y ago </FormControl>
76 4466347 Mrdn 2y ago <FormMessage />
77 4466347 Mrdn 2y ago </FormItem>
78 4466347 Mrdn 2y ago )}
79 4466347 Mrdn 2y ago />
80 4466347 Mrdn 2y ago <Button className="mt-3 w-full" type="submit">{t('login')}</Button>
81 4466347 Mrdn 2y ago {error && <FormError className="mt-2" title='Submission failed' desc={error} />}
82 4466347 Mrdn 2y ago </form>
83 4466347 Mrdn 2y ago </Form>
84 4466347 Mrdn 2y ago )
85 4466347 Mrdn 2y ago }