()
- const { roles } = useRoles()
+ const fetchCurrentUser = async () => {
+ if (token) {
+ await UserService.getCurrentUser(token).then(response => {
+ setCurrentUser(response.data)
+ })
+ }
+ }
- const columns: GridColDef[] = [
- { field: 'id', headerName: 'ID', type: "number", width: 70 },
- { field: 'email', headerName: 'Email', width: 130, editable: true },
- { field: 'login', headerName: 'Логин', width: 130, editable: true },
- { field: 'phone', headerName: 'Телефон', width: 90, editable: true },
- { field: 'name', headerName: 'Имя', width: 90, editable: true },
- { field: 'surname', headerName: 'Фамилия', width: 90, editable: true },
- { field: 'is_active', headerName: 'Активен', type: "boolean", width: 90, editable: true },
- {
- field: 'role_id',
- headerName: 'Роль',
- valueGetter: (value) => {
- if (roles) {
- const roleName = roles.find((role: IRole) => role.id === value).name
- return roleName
- } else {
- return value
- }
- },
- width: 90
- },
- ];
+ useEffect(() => {
+ if (token) {
+ fetchCurrentUser()
+ }
+ }, [token])
- if (isError) return Произошла ошибка при получении данных.
- if (isLoading) return
+ const profileFields: CreateField[] = [
+ { key: 'email', headerName: 'E-mail', type: 'string', required: true },
+ { key: 'login', headerName: 'Логин', type: 'string', required: true },
+ { key: 'phone', headerName: 'Телефон', type: 'string', required: false },
+ { key: 'name', headerName: 'Имя', type: 'string', required: true },
+ { key: 'surname', headerName: 'Фамилия', type: 'string', required: true },
+ ]
+
+ const passwordFields: CreateField[] = [
+ { key: 'password', headerName: 'Новый пароль', type: 'string', required: true, inputType: 'password' },
+ { key: 'password_confirm', headerName: 'Подтверждение пароля', type: 'string', required: true, inputType: 'password', watch: 'password', watchMessage: 'Пароли не совпадают' },
+ ]
return (
-
+
+
+
+
+
+
+
- processRowUpdate={(updatedRow) => {
- return updatedRow
- }}
-
- onProcessRowUpdateError={() => {
- }}
- />
+ }
)
}
\ No newline at end of file
diff --git a/frontend_reactjs/src/pages/Users.tsx b/frontend_reactjs/src/pages/Users.tsx
index 4fee583..5d8262b 100644
--- a/frontend_reactjs/src/pages/Users.tsx
+++ b/frontend_reactjs/src/pages/Users.tsx
@@ -1,11 +1,11 @@
-import { Box, Button, CircularProgress } from "@mui/material"
+import { Box, Button, CircularProgress, Modal } from "@mui/material"
import { DataGrid, GridColDef } from "@mui/x-data-grid"
import { useRoles, useUsers } from "../hooks/swrHooks"
import { IRole } from "../interfaces/role"
import { useState } from "react"
import { CreateField } from "../interfaces/create"
-import ModalCreate from "../components/modals/ModalCreate"
import UserService from "../services/UserService"
+import FormFields from "../components/FormFields"
export default function Users() {
const { users, isError, isLoading } = useUsers()
@@ -56,13 +56,16 @@ export default function Users() {
Добавить пользователя
-
+ onClose={() => setOpen(false)}
+ >
+
+
({
+ defaultValues: {
+ email: ''
+ }
+ })
+
+ const onSubmit: SubmitHandler = async (data) => {
+ await AuthService.resetPassword(data.email).then(response => {
+ if (response.status === 200) {
+ //setError('email', { message: response.data.msg })
+ setSuccess(true)
+ } else if (response.status === 422) {
+ setError('email', { message: response.statusText })
+ }
+ }).catch((error: Error) => {
+ setError('email', { message: error.message })
+ })
+ }
+
+ return (
+
+
+
+ Восстановление пароля
+
+
+
+
+
+ )
+}
+
+export default PasswordReset
\ No newline at end of file
diff --git a/frontend_reactjs/src/pages/auth/SignIn.tsx b/frontend_reactjs/src/pages/auth/SignIn.tsx
index d8c74d2..1ea53ea 100644
--- a/frontend_reactjs/src/pages/auth/SignIn.tsx
+++ b/frontend_reactjs/src/pages/auth/SignIn.tsx
@@ -1,5 +1,5 @@
import { useForm, SubmitHandler } from 'react-hook-form';
-import { TextField, Button, Container, Typography, Box } from '@mui/material';
+import { TextField, Button, Container, Typography, Box, Stack, Link } from '@mui/material';
import { AxiosResponse } from 'axios';
import { ApiResponse, LoginFormData } from '../../interfaces/auth';
import { login, setUserData } from '../../store/auth';
@@ -50,32 +50,48 @@ const SignIn = () => {
Вход
+
diff --git a/frontend_reactjs/src/pages/auth/SignUp.tsx b/frontend_reactjs/src/pages/auth/SignUp.tsx
index 3c5c7d9..8813dc5 100644
--- a/frontend_reactjs/src/pages/auth/SignUp.tsx
+++ b/frontend_reactjs/src/pages/auth/SignUp.tsx
@@ -1,10 +1,10 @@
import { useForm, SubmitHandler } from 'react-hook-form';
import { TextField, Button, Container, Typography, Box } from '@mui/material';
import UserService from '../../services/UserService';
-import { IUserCreate } from '../../interfaces/user';
+import { IUser } from '../../interfaces/user';
const SignUp = () => {
- const { register, handleSubmit, formState: { errors } } = useForm({
+ const { register, handleSubmit, formState: { errors } } = useForm({
defaultValues: {
email: '',
login: '',
@@ -17,7 +17,7 @@ const SignUp = () => {
})
- const onSubmit: SubmitHandler = async (data) => {
+ const onSubmit: SubmitHandler = async (data) => {
try {
await UserService.createUser(data)
} catch (error) {
diff --git a/frontend_reactjs/src/services/AuthService.ts b/frontend_reactjs/src/services/AuthService.ts
index 49509ce..56d9c61 100644
--- a/frontend_reactjs/src/services/AuthService.ts
+++ b/frontend_reactjs/src/services/AuthService.ts
@@ -1,6 +1,7 @@
import { AxiosRequestConfig } from "axios";
import { BASE_URL } from "../constants";
import axiosInstance from "../http/axiosInstance";
+import { IUser } from "../interfaces/user";
const config: AxiosRequestConfig = {
baseURL: BASE_URL.auth,
@@ -21,4 +22,12 @@ export default class AuthService {
static async getCurrentUser(token: string) {
return await axiosInstance.get(`/auth/get_current_user/${token}`, config)
}
+
+ static async resetPassword(email: string) {
+ return await axiosInstance.put(`/auth/user/reset_password?email=${email}`, null, config)
+ }
+
+ static async updatePassword(data: IUser) {
+ return await axiosInstance.put(`/auth/user/password_change`, data, config)
+ }
}
\ No newline at end of file
diff --git a/frontend_reactjs/src/services/UserService.ts b/frontend_reactjs/src/services/UserService.ts
index 83b62f8..e88c922 100644
--- a/frontend_reactjs/src/services/UserService.ts
+++ b/frontend_reactjs/src/services/UserService.ts
@@ -2,14 +2,14 @@ import { AxiosRequestConfig } from "axios";
import axiosInstance from "../http/axiosInstance";
import { UserCreds, UserData } from "../interfaces/auth";
import { BASE_URL } from "../constants";
-import { IUserCreate } from "../interfaces/user";
+import { IUser } from "../interfaces/user";
const config: AxiosRequestConfig = {
baseURL: BASE_URL.auth
}
export default class UserService {
- static async createUser(data: IUserCreate) {
+ static async createUser(data: IUser) {
return await axiosInstance.post(`/auth/user`, data, config)
}