From 396d3888dbea356c767f53fc4f723fc7206ff41f Mon Sep 17 00:00:00 2001 From: smanylov Date: Fri, 23 Jan 2026 17:33:48 +0700 Subject: [PATCH] add confirm mail modal window --- src/app/actions/auth.ts | 111 ++++++++++++++++++++++++----- src/app/ui/forms/register-form.tsx | 46 ++++++++++-- 2 files changed, 135 insertions(+), 22 deletions(-) diff --git a/src/app/actions/auth.ts b/src/app/actions/auth.ts index bd6a870..8af2ee2 100644 --- a/src/app/actions/auth.ts +++ b/src/app/actions/auth.ts @@ -139,6 +139,7 @@ export type FormState = { agree: string; }, mailConfirm?: boolean, + userId?: number, error: Record | null }; @@ -219,11 +220,27 @@ export async function registration( if (response.ok) { let parsed = await response.json() as { message_desc: string, - message_body: { token: string }, + message_body: { token: string, userId: number }, message_code: string }; + console.log(parsed); if (parsed.message_desc === 'Operation successful') { - await createSession(parsed.message_body.token, email as string); + + /* await createSession(parsed.message_body.token, email as string); */ + return { + previousState: { + fullName, + email, + password, + confirm_password, + phone, + companyName, + agree + }, + mailConfirm: true, + userId: parsed.message_body.userId, + error: null + }; } else { throw parsed; } @@ -231,19 +248,6 @@ export async function registration( throw (`${response.status}`); } - /* return { - previousState: { - fullName, - email, - password, - confirm_password, - phone, - companyName, - agree - }, - mailConfirm: true, - error: null - }; */ } catch (error: unknown) { if (error) { const typedError = error as any; @@ -282,6 +286,7 @@ export async function registration( companyName, agree }, + mailConfirm: false, error: errors }; } @@ -327,9 +332,81 @@ export async function tokenLifeExtension() { export async function confirmEmail( state: any | undefined, - formData: any, + formData: any ) { console.log('confirmEmail'); const emailConfirm = formData.get('emailConfirm') as string || ''; - console.log(emailConfirm); + const userId = formData.get('userId') as string || ''; + + try { + const response = await fetch(`${API_BASE_URL}/api/v1/data`, { + method: 'POST', + headers: { + "Content-Type": "application/json", + "Accept": "application/json", + }, + body: JSON.stringify({ + version: 1, + msg_id: 20009, + message_body: { + resend: 0, + user_id: userId, + verify_token: emailConfirm + } + }), + }); + + if (response.ok) { + const parsed = await response.json(); + console.log(parsed); + + if (parsed.message_code === 0) { + await createSession(parsed.message_body.token, parsed.message_body.email as string); + } + } + } catch (error) { + return { + error: 'error' + } + } + + redirect('/pages/dashboard'); +} + +export async function resendConfirmEmail(userId: number) { + console.log('resendConfirmEmail'); + + + try { + const response = await fetch(`${API_BASE_URL}/api/v1/data`, { + method: 'POST', + headers: { + "Content-Type": "application/json", + "Accept": "application/json", + }, + body: JSON.stringify({ + version: 1, + msg_id: 20009, + message_body: { + resend: 1, + user_id: userId, + } + }), + }); + + if (response.ok) { + const parsed = await response.json(); + console.log(parsed); + + if (parsed.message_code === 0) { + return { + fine: true + } + } + } + } catch (error) { + return { + fine: false + } + } } \ No newline at end of file diff --git a/src/app/ui/forms/register-form.tsx b/src/app/ui/forms/register-form.tsx index ca9c6ce..48f9d8a 100644 --- a/src/app/ui/forms/register-form.tsx +++ b/src/app/ui/forms/register-form.tsx @@ -1,8 +1,8 @@ 'use client' import styles from '@/app/styles/module/login.module.scss'; -import { ChangeEvent, useActionState, useEffect, useRef, useState } from 'react'; -import { registration, FormState, confirmEmail } from '@/app/actions/auth'; +import { ChangeEvent, useActionState, useEffect, useRef, useState, MouseEvent } from 'react'; +import { registration, FormState, confirmEmail, resendConfirmEmail } from '@/app/actions/auth'; import PhoneInput from '@/app/ui/inputs/phone-input'; import Link from 'next/link'; import { useTranslations } from 'next-intl'; @@ -113,8 +113,23 @@ export default function RegisterForm() { } } + async function reSendEmailConfirmCode(e: MouseEvent) { + e.preventDefault(); + console.log(state?.userId ? state?.userId : ''); + if (state?.userId) { + await resendConfirmEmail(state?.userId); + } + } + return ( <> + {showMailConfirmWindow && (
{ }} /> +
- +
+ {stateEmailConfrim?.error} +
+
+ + +
+