Компетенции аватар и заглушка рейтинга
This commit is contained in:
@@ -9,6 +9,7 @@ import { useRouter } from "next/navigation"
|
||||
|
||||
import { Button } from "@/components/ui/button"
|
||||
import { Input } from "@/components/ui/input"
|
||||
import { Checkbox } from "@/components/ui/checkbox"
|
||||
import {
|
||||
Form,
|
||||
FormControl,
|
||||
@@ -22,11 +23,26 @@ import { useSessionStore } from "@/entities/session/store"
|
||||
|
||||
const registerSchema = z.object({
|
||||
phone: z.string().min(10, "Номер телефона должен содержать минимум 10 цифр"),
|
||||
firstName: z.string()
|
||||
.min(2, "Имя должно содержать минимум 2 символа")
|
||||
.regex(/^[^0-9]*$/, "Имя не должно содержать цифры"),
|
||||
lastName: z.string()
|
||||
.min(2, "Фамилия должна содержать минимум 2 символа")
|
||||
.regex(/^[^0-9]*$/, "Фамилия не должна содержать цифры"),
|
||||
isCompany: z.boolean(),
|
||||
companyName: z.string().optional(),
|
||||
inn: z.string().optional(),
|
||||
password: z.string().min(6, "Пароль должен быть не менее 6 символов"),
|
||||
confirmPassword: z.string().min(6),
|
||||
}).refine((data) => data.password === data.confirmPassword, {
|
||||
message: "Пароли не совпадают",
|
||||
path: ["confirmPassword"],
|
||||
}).refine((data) => !data.isCompany || (data.companyName && data.companyName.length >= 2), {
|
||||
message: "Название компании обязательно",
|
||||
path: ["companyName"],
|
||||
}).refine((data) => !data.isCompany || (data.inn && data.inn.length === 10), {
|
||||
message: "ИНН должен содержать 10 цифр",
|
||||
path: ["inn"],
|
||||
})
|
||||
|
||||
type RegisterValues = z.infer<typeof registerSchema>
|
||||
@@ -39,14 +55,40 @@ export function RegisterForm() {
|
||||
resolver: zodResolver(registerSchema),
|
||||
defaultValues: {
|
||||
phone: "",
|
||||
firstName: "",
|
||||
lastName: "",
|
||||
isCompany: false,
|
||||
companyName: "",
|
||||
inn: "",
|
||||
password: "",
|
||||
confirmPassword: "",
|
||||
},
|
||||
})
|
||||
|
||||
const isCompany = form.watch("isCompany")
|
||||
|
||||
async function onSubmit(values: RegisterValues) {
|
||||
try {
|
||||
await register(values)
|
||||
const submitData: any = {
|
||||
phone: values.phone,
|
||||
firstName: values.firstName,
|
||||
lastName: values.lastName,
|
||||
password: values.password,
|
||||
confirmPassword: values.confirmPassword,
|
||||
role: values.isCompany ? "Company" : "User"
|
||||
};
|
||||
|
||||
// Добавляем данные компании только если регистрируемся как компания
|
||||
if (values.isCompany) {
|
||||
if (values.companyName) {
|
||||
submitData.companyName = values.companyName;
|
||||
}
|
||||
if (values.inn) {
|
||||
submitData.inn = values.inn;
|
||||
}
|
||||
}
|
||||
|
||||
await register(submitData)
|
||||
router.push("/auth/login")
|
||||
} catch (error) {
|
||||
console.error(error)
|
||||
@@ -65,6 +107,35 @@ export function RegisterForm() {
|
||||
<CardContent>
|
||||
<Form {...form}>
|
||||
<form onSubmit={form.handleSubmit(onSubmit)} className="space-y-4">
|
||||
<div className="grid grid-cols-2 gap-4">
|
||||
<FormField
|
||||
control={form.control}
|
||||
name="firstName"
|
||||
render={({ field }) => (
|
||||
<FormItem>
|
||||
<FormLabel>Имя</FormLabel>
|
||||
<FormControl>
|
||||
<Input placeholder="Иван" {...field} />
|
||||
</FormControl>
|
||||
<FormMessage />
|
||||
</FormItem>
|
||||
)}
|
||||
/>
|
||||
<FormField
|
||||
control={form.control}
|
||||
name="lastName"
|
||||
render={({ field }) => (
|
||||
<FormItem>
|
||||
<FormLabel>Фамилия</FormLabel>
|
||||
<FormControl>
|
||||
<Input placeholder="Иванов" {...field} />
|
||||
</FormControl>
|
||||
<FormMessage />
|
||||
</FormItem>
|
||||
)}
|
||||
/>
|
||||
</div>
|
||||
|
||||
<FormField
|
||||
control={form.control}
|
||||
name="phone"
|
||||
@@ -78,6 +149,56 @@ export function RegisterForm() {
|
||||
</FormItem>
|
||||
)}
|
||||
/>
|
||||
|
||||
<FormField
|
||||
control={form.control}
|
||||
name="isCompany"
|
||||
render={({ field }) => (
|
||||
<FormItem className="flex flex-row items-center gap-4 space-y-0 rounded-md border p-4">
|
||||
<FormControl>
|
||||
<Checkbox
|
||||
checked={field.value}
|
||||
onCheckedChange={field.onChange}
|
||||
/>
|
||||
</FormControl>
|
||||
<FormLabel className="text-sm font-medium cursor-pointer peer-disabled:cursor-not-allowed peer-disabled:opacity-70">
|
||||
Я представитель компании
|
||||
</FormLabel>
|
||||
</FormItem>
|
||||
)}
|
||||
/>
|
||||
|
||||
{isCompany && (
|
||||
<>
|
||||
<FormField
|
||||
control={form.control}
|
||||
name="companyName"
|
||||
render={({ field }) => (
|
||||
<FormItem>
|
||||
<FormLabel>Название компании</FormLabel>
|
||||
<FormControl>
|
||||
<Input placeholder="ООО 'Ромашка'" {...field} />
|
||||
</FormControl>
|
||||
<FormMessage />
|
||||
</FormItem>
|
||||
)}
|
||||
/>
|
||||
<FormField
|
||||
control={form.control}
|
||||
name="inn"
|
||||
render={({ field }) => (
|
||||
<FormItem>
|
||||
<FormLabel>ИНН</FormLabel>
|
||||
<FormControl>
|
||||
<Input placeholder="1234567890" maxLength={10} {...field} />
|
||||
</FormControl>
|
||||
<FormMessage />
|
||||
</FormItem>
|
||||
)}
|
||||
/>
|
||||
</>
|
||||
)}
|
||||
|
||||
<FormField
|
||||
control={form.control}
|
||||
name="password"
|
||||
|
||||
Reference in New Issue
Block a user