diff --git a/frontend_reactjs/src/App.tsx b/frontend_reactjs/src/App.tsx index ea7f401..434d9e4 100644 --- a/frontend_reactjs/src/App.tsx +++ b/frontend_reactjs/src/App.tsx @@ -17,6 +17,7 @@ import Boilers from "./pages/Boilers" import Servers from "./pages/Servers" import { Api, Assignment, Cloud, Factory, Home, Login, People, Shield, Storage } from "@mui/icons-material" +// Определение страниц с путями и компонентом для рендера export const pages = [ { label: "", diff --git a/frontend_reactjs/src/components/modals/CreateCompanyModal.tsx b/frontend_reactjs/src/components/modals/CreateCompanyModal.tsx deleted file mode 100644 index b98cfd7..0000000 --- a/frontend_reactjs/src/components/modals/CreateCompanyModal.tsx +++ /dev/null @@ -1,125 +0,0 @@ -import { SubmitHandler, useForm } from 'react-hook-form'; -import RoleService from '../../services/RoleService'; -import { Box, Button, Modal, Select, TextField, Typography } from '@mui/material'; -import { ICompany } from '../../interfaces/documents'; -import { useCompanies } from '../../hooks/swrHooks'; - -interface Props { - open: boolean; - setOpen: (state: boolean) => void; -} - -const style = { - position: 'absolute', - top: '50%', - left: '50%', - transform: 'translate(-50%, -50%)', - width: 400, - bgcolor: 'background.paper', - boxShadow: 24, - borderRadius: 2, - p: 4, - display: "flex", - flexDirection: "column", - gap: "8px" -} - -export default function CreateCompanyModal({ - open, - setOpen -}: Props) { - const { companies } = useCompanies() - - const { register, handleSubmit, formState: { errors } } = useForm({ - defaultValues: { - name: '', - fullname: '', - description: '', - } - }) - - const onSubmit: SubmitHandler = async (data) => { - try { - await RoleService.createRole(data) - } catch (error) { - console.error(error) - } - } - - return ( - setOpen(false)} - aria-labelledby="modal-modal-title" - aria-describedby="modal-modal-description" - > -
- - - - Создание компании - - - - - - - - - {companies} - - - - - - - - - -
-
- ) -} \ No newline at end of file diff --git a/frontend_reactjs/src/components/modals/CreateDepartmentModal.tsx b/frontend_reactjs/src/components/modals/CreateDepartmentModal.tsx deleted file mode 100644 index 45f34ad..0000000 --- a/frontend_reactjs/src/components/modals/CreateDepartmentModal.tsx +++ /dev/null @@ -1,106 +0,0 @@ -import { SubmitHandler, useForm } from 'react-hook-form'; -import RoleService from '../../services/RoleService'; -import { Box, Button, Modal, TextField, Typography } from '@mui/material'; -import { ICompany } from '../../interfaces/documents'; - -interface Props { - open: boolean; - setOpen: (state: boolean) => void; -} - -const style = { - position: 'absolute', - top: '50%', - left: '50%', - transform: 'translate(-50%, -50%)', - width: 400, - bgcolor: 'background.paper', - boxShadow: 24, - borderRadius: 2, - p: 4, - display: "flex", - flexDirection: "column", - gap: "8px" -} - -export default function CreateDepartmentModal({ - open, - setOpen -}: Props) { - const { register, handleSubmit, formState: { errors } } = useForm({ - defaultValues: { - name: '', - fullname: '', - description: '', - } - }) - - const onSubmit: SubmitHandler = async (data) => { - try { - await RoleService.createRole(data) - } catch (error) { - console.error(error) - } - } - - return ( - setOpen(false)} - aria-labelledby="modal-modal-title" - aria-describedby="modal-modal-description" - > -
- - - - Создание компании - - - - - - - - - - - - - - -
-
- ) -} \ No newline at end of file diff --git a/frontend_reactjs/src/components/modals/CreateFromGridColModal.tsx b/frontend_reactjs/src/components/modals/CreateFromGridColModal.tsx deleted file mode 100644 index 492a789..0000000 --- a/frontend_reactjs/src/components/modals/CreateFromGridColModal.tsx +++ /dev/null @@ -1,7 +0,0 @@ -function CreateFromGridColModal() { - return ( -
CreateFromGridColModal
- ) -} - -export default CreateFromGridColModal \ No newline at end of file diff --git a/frontend_reactjs/src/components/modals/CreateRoleModal.tsx b/frontend_reactjs/src/components/modals/CreateRoleModal.tsx deleted file mode 100644 index b596cf1..0000000 --- a/frontend_reactjs/src/components/modals/CreateRoleModal.tsx +++ /dev/null @@ -1,94 +0,0 @@ -import { SubmitHandler, useForm } from 'react-hook-form'; -import { IRoleCreate } from '../../interfaces/role'; -import RoleService from '../../services/RoleService'; -import { Box, Button, Modal, TextField, Typography } from '@mui/material'; - -interface Props { - open: boolean; - setOpen: (state: boolean) => void; -} - -const style = { - position: 'absolute', - top: '50%', - left: '50%', - transform: 'translate(-50%, -50%)', - width: 400, - bgcolor: 'background.paper', - boxShadow: 24, - borderRadius: 2, - p: 4, - display: "flex", - flexDirection: "column", - gap: "8px" -} - -export default function CreateRoleModal({ - open, - setOpen -}: Props) { - const { register, handleSubmit, formState: { errors } } = useForm({ - defaultValues: { - name: '', - description: '' - } - }) - - const onSubmit: SubmitHandler = async (data) => { - try { - await RoleService.createRole(data) - } catch (error) { - console.error(error) - } - } - - return ( - setOpen(false)} - aria-labelledby="modal-modal-title" - aria-describedby="modal-modal-description" - > -
- - - Создание роли - - - - - - - - - - - - -
-
- ) -} \ No newline at end of file diff --git a/frontend_reactjs/src/components/modals/CreateUserModal.tsx b/frontend_reactjs/src/components/modals/CreateUserModal.tsx deleted file mode 100644 index 15f5016..0000000 --- a/frontend_reactjs/src/components/modals/CreateUserModal.tsx +++ /dev/null @@ -1,138 +0,0 @@ -import { Box, Button, Modal, TextField, Typography } from '@mui/material' -import { SubmitHandler, useForm } from 'react-hook-form'; -import UserService from '../../services/UserService'; -import { IUserCreate } from '../../interfaces/user'; - -interface Props { - open: boolean; - setOpen: (state: boolean) => void; -} - -const style = { - position: 'absolute', - top: '50%', - left: '50%', - transform: 'translate(-50%, -50%)', - width: 400, - bgcolor: 'background.paper', - boxShadow: 24, - borderRadius: 2, - p: 4, - display: "flex", - flexDirection: "column", - gap: "8px" -} - -export default function CreateUserModal({ - open, - setOpen, -}: Props) { - const { register, handleSubmit, formState: { errors } } = useForm({ - defaultValues: { - email: '', - login: '', - phone: '', - name: '', - surname: '', - is_active: true, - password: '', - } - }) - - const onSubmit: SubmitHandler = async (data) => { - try { - await UserService.createUser(data) - } catch (error) { - console.error(error) - } - } - - return ( - setOpen(false)} - aria-labelledby="modal-modal-title" - aria-describedby="modal-modal-description" - > -
- - - Создание пользователя - - - - - - - - - - - - - - - - - - - - -
-
- ) -} \ No newline at end of file diff --git a/frontend_reactjs/src/components/modals/ModalCreate.tsx b/frontend_reactjs/src/components/modals/ModalCreate.tsx new file mode 100644 index 0000000..31b2cf2 --- /dev/null +++ b/frontend_reactjs/src/components/modals/ModalCreate.tsx @@ -0,0 +1,108 @@ +import { Box, Button, Modal, TextField, Typography } from '@mui/material'; +import { SubmitHandler, useForm } from 'react-hook-form'; +import { CreateField } from '../../interfaces/create'; + +interface Props { + title?: string; + open: boolean; + setOpen: (state: boolean) => void; + submitHandler?: any; + fields: CreateField[]; + submitButtonText?: string; + mutateHandler?: any; +} + +const style = { + position: 'absolute', + top: '50%', + left: '50%', + transform: 'translate(-50%, -50%)', + width: 400, + bgcolor: 'background.paper', + boxShadow: 24, + borderRadius: 2, + p: 4, + display: "flex", + flexDirection: "column", + gap: "8px" +} + +function ModalCreate({ + title = '', + open, + setOpen, + submitHandler, + fields, + submitButtonText = 'Сохранить', + mutateHandler +}: Props) { + const getDefaultValues = (fields: CreateField[]) => { + let result: { [key: string]: string | boolean } = {} + fields.forEach((field: CreateField) => { + result[field.key] = field.defaultValue + }) + return result + } + + const { register, handleSubmit, formState: { errors } } = useForm({ + defaultValues: getDefaultValues(fields) + }) + + const onSubmit: SubmitHandler = async (data) => { + try { + await submitHandler?.(data).then(() => { + mutateHandler?.() + }) + } catch (error) { + console.error(error) + } + } + + return ( + setOpen(false)} + aria-labelledby="modal-modal-title" + aria-describedby="modal-modal-description" + > +
+ + + {title} + + + {fields.map((field: CreateField) => { + return ( + + ) + })} + + + + + + + +
+
+ ) +} + +export default ModalCreate \ No newline at end of file diff --git a/frontend_reactjs/src/interfaces/create.ts b/frontend_reactjs/src/interfaces/create.ts new file mode 100644 index 0000000..9fa2d04 --- /dev/null +++ b/frontend_reactjs/src/interfaces/create.ts @@ -0,0 +1,20 @@ +export interface CreateFieldTypes { + string: 'string'; + number: 'number'; + date: 'date'; + dateTime: 'dateTime'; + boolean: 'boolean'; + singleSelect: 'singleSelect'; + actions: 'actions'; + custom: 'custom'; +} + +export type CreateFieldType = CreateFieldTypes[keyof CreateFieldTypes] + +export interface CreateField { + key: string; + headerName?: string; + type: CreateFieldType; + required?: boolean; + defaultValue?: any; +} \ No newline at end of file diff --git a/frontend_reactjs/src/pages/Roles.tsx b/frontend_reactjs/src/pages/Roles.tsx index f9c5575..a5cc2fc 100644 --- a/frontend_reactjs/src/pages/Roles.tsx +++ b/frontend_reactjs/src/pages/Roles.tsx @@ -2,13 +2,20 @@ import { useState } from 'react' import { Box, Button, CircularProgress } from '@mui/material' import { DataGrid, GridColDef } from '@mui/x-data-grid' import { useRoles } from '../hooks/swrHooks' -import CreateRoleModal from '../components/modals/CreateRoleModal' +import { CreateField } from '../interfaces/create' +import ModalCreate from '../components/modals/ModalCreate' +import RoleService from '../services/RoleService' export default function Roles() { const { roles, isError, isLoading } = useRoles() const [open, setOpen] = useState(false) + const createFields: CreateField[] = [ + { key: 'name', headerName: 'Название', type: 'string', required: true, defaultValue: '' }, + { key: 'description', headerName: 'Описание', type: 'string', required: false, defaultValue: '' }, + ] + const columns: GridColDef[] = [ { field: 'id', headerName: 'ID', type: "number", width: 70 }, { field: 'name', headerName: 'Название', width: 90, editable: true }, @@ -30,9 +37,12 @@ export default function Roles() { Добавить роль - - - -