fix: styles

This commit is contained in:
Koosha Lahouti
2025-08-13 17:59:40 +03:30
parent 881e6384d3
commit f82fed54d5
11 changed files with 289 additions and 196 deletions

View File

@@ -1,5 +1,5 @@
import { useEffect, useState } from 'react';
import { Box, Typography } from '@mui/material';
import { Box, Typography, Button } from '@mui/material';
import { useTranslation } from 'react-i18next';
import Logo from '@/components/Logo';
import { PersonalInfoFields } from './PersonalInfoFields';
@@ -11,7 +11,13 @@ import { useToast } from '@rkheftan/harmony-ui';
import { AxiosError } from 'axios';
import { regex } from '../../../utils/regex';
import { toLocaleDigits } from '../../../utils/persianDigit';
import axios, { isAxiosError } from 'axios';
import i18n from '@/config/i18n';
import { Gender } from './types'; // ✅ Added
interface TokenApiResponse {
access_token: string;
}
export function UserCompletionForm() {
const { t } = useTranslation('completionForm');
@@ -20,7 +26,9 @@ export function UserCompletionForm() {
const [lastName, setLastName] = useState('');
const [nationalId, setNationalId] = useState('');
const [birthDate, setBirthDate] = useState<Date | null>(null);
const [sex, setSex] = useState<'female' | 'male'>('female');
// ✅ Corrected section: use Gender enum
const [sex, setSex] = useState<Gender>(Gender.Female);
const [country, setCountry] = useState('');
const [showPasswordSection, setShowPasswordSection] = useState(false);
@@ -38,15 +46,14 @@ export function UserCompletionForm() {
const [emailVerified, setEmailVerified] = useState(false);
const [isVerifyingCode, setIsVerifyingCode] = useState(false);
const correctEmail = /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(email);
const {
hasNumber,
hasMinLength,
hasUpperAndLower,
hasSpecialChar,
validPassword,
} = regex(password);
correctEmail,
} = regex(password, email);
const matchPassword = password === confirmPassword;
const [showPasswordValidations, setShowPasswordValidations] = useState(false);
@@ -95,6 +102,42 @@ export function UserCompletionForm() {
return t('completion.vericationCodeButton');
};
const [tokenError, setTokenError] = useState<string | null>(null);
const apiUrl = 'https://accounts.business-harmony.com';
const tokenEndpoint = `${apiUrl}/connect/token`;
const getToken = async () => {
setTokenError(null);
try {
const body = new URLSearchParams();
body.set('grant_type', 'password');
body.set('username', 'zareian.1381@gmail.com');
body.set('password', '123@Qweasd');
body.set('client_id', 'harmony_identity');
body.set('scope', 'openid harmony_identity profile offline_access');
const response = await axios.post<TokenApiResponse>(
tokenEndpoint,
body.toString(),
{
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
},
},
);
if (response.data?.access_token) {
localStorage.setItem('authToken', response.data.access_token);
} else {
throw new Error('No access token in response');
}
} catch (error: unknown) {
let message = 'Failed to get token';
if (isAxiosError(error) && error.response) {
message = `Request failed with status ${error.response.status}`;
} else if (error instanceof Error) {
message = error.message;
}
setTokenError(message);
}
};
const storedToken = localStorage.getItem('authToken');
const handleSendCode = async () => {
@@ -218,7 +261,7 @@ export function UserCompletionForm() {
userId: '3fa85f64-5717-4562-b3fc-2c963f66afa6',
firstName,
lastName,
gender: sex === 'female' ? 2 : 1,
gender: sex === Gender.Female ? 2 : 1, // ✅ Corrected
nationalId,
savePassword: showPasswordSection,
password: showPasswordSection ? password : undefined,
@@ -302,8 +345,8 @@ export function UserCompletionForm() {
setNationalId={setNationalId}
birthDate={birthDate}
setBirthDate={setBirthDate}
sex={sex}
setSex={setSex}
sex={sex} // ✅ Corrected
setSex={setSex} // ✅ Corrected
country={country}
setCountry={setCountry}
/>
@@ -338,7 +381,7 @@ export function UserCompletionForm() {
handleSendCode={handleSendCode}
handleVerifyCode={handleVerifyCode}
emailVerified={emailVerified}
isVerifyingCode={isVerifyingCode}
loading={isVerifyingCode}
handleEditEmail={handleEditEmail}
/>
<SubmitSection
@@ -347,6 +390,15 @@ export function UserCompletionForm() {
error={error}
success={success}
/>
<Button
variant="contained"
color="secondary"
onClick={getToken}
size="large"
sx={{ textTransform: 'none' }}
>
Get Token
</Button>
</Box>
</Box>
);