feat(client): add create user
This commit is contained in:
parent
448e4264a5
commit
8f5dd07bf5
5
Makefile
5
Makefile
@ -64,5 +64,6 @@ check-api:
|
|||||||
poetry run ruff format . --check
|
poetry run ruff format . --check
|
||||||
|
|
||||||
regenerate-openapi-local:
|
regenerate-openapi-local:
|
||||||
rm client/src/types/openapi-types.ts \
|
cd client \
|
||||||
npx openapi-typescript http://localhost:8000/openapi -o client/src/types/openapi-types.ts
|
rm src/types/openapi-types.ts \
|
||||||
|
npx openapi-typescript http://localhost:8000/openapi -o src/types/openapi-types.ts
|
||||||
|
@ -4,7 +4,7 @@ import axiosRetry from 'axios-retry';
|
|||||||
import { Auth, Tokens } from '@/types/auth';
|
import { Auth, Tokens } from '@/types/auth';
|
||||||
import { useAuthStore } from '@/store/authStore';
|
import { useAuthStore } from '@/store/authStore';
|
||||||
import { AuthService } from '@/services/authService';
|
import { AuthService } from '@/services/authService';
|
||||||
import { User } from '@/types/user';
|
import { User, UserUpdate } from '@/types/user';
|
||||||
|
|
||||||
const baseURL = `${import.meta.env.VITE_APP_HTTP_PROTOCOL}://${
|
const baseURL = `${import.meta.env.VITE_APP_HTTP_PROTOCOL}://${
|
||||||
import.meta.env.VITE_APP_API_URL
|
import.meta.env.VITE_APP_API_URL
|
||||||
@ -114,6 +114,11 @@ const api = {
|
|||||||
const response = await base.get<User>(`/account/${userId}`);
|
const response = await base.get<User>(`/account/${userId}`);
|
||||||
return response.data;
|
return response.data;
|
||||||
},
|
},
|
||||||
|
|
||||||
|
async createUser(user: UserUpdate): Promise<User> {
|
||||||
|
const response = await base.post<User>('/account', user);
|
||||||
|
return response.data;
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
export default api;
|
export default api;
|
||||||
|
@ -12,6 +12,8 @@ import {
|
|||||||
import { useState } from 'react';
|
import { useState } from 'react';
|
||||||
import { useTranslation } from 'react-i18next';
|
import { useTranslation } from 'react-i18next';
|
||||||
import { useUserSelector } from '@/store/userStore';
|
import { useUserSelector } from '@/store/userStore';
|
||||||
|
import { UserUpdate } from '@/types/user';
|
||||||
|
import { UserService } from '@/services/userService';
|
||||||
|
|
||||||
const { Option } = Select;
|
const { Option } = Select;
|
||||||
|
|
||||||
@ -25,7 +27,11 @@ const getBase64 = (file: FileType): Promise<string> =>
|
|||||||
reader.onerror = (error) => reject(error);
|
reader.onerror = (error) => reject(error);
|
||||||
});
|
});
|
||||||
|
|
||||||
export default function UserCreate() {
|
interface UserCreateProps {
|
||||||
|
closeDrawer: () => void;
|
||||||
|
}
|
||||||
|
|
||||||
|
export default function UserCreate({ closeDrawer }: UserCreateProps) {
|
||||||
const user = useUserSelector();
|
const user = useUserSelector();
|
||||||
const { t } = useTranslation();
|
const { t } = useTranslation();
|
||||||
const [previewOpen, setPreviewOpen] = useState(false);
|
const [previewOpen, setPreviewOpen] = useState(false);
|
||||||
@ -45,6 +51,12 @@ export default function UserCreate() {
|
|||||||
const handleChange: UploadProps['onChange'] = ({ fileList: newFileList }) =>
|
const handleChange: UploadProps['onChange'] = ({ fileList: newFileList }) =>
|
||||||
setFileList(newFileList);
|
setFileList(newFileList);
|
||||||
|
|
||||||
|
const onFinish = async (values: UserUpdate) => {
|
||||||
|
console.log(values);
|
||||||
|
await UserService.createUser(values);
|
||||||
|
closeDrawer();
|
||||||
|
};
|
||||||
|
|
||||||
const customUploadButton = (
|
const customUploadButton = (
|
||||||
<div>
|
<div>
|
||||||
<div
|
<div
|
||||||
@ -128,7 +140,7 @@ export default function UserCreate() {
|
|||||||
<Form
|
<Form
|
||||||
name="user-edit-form"
|
name="user-edit-form"
|
||||||
layout="vertical"
|
layout="vertical"
|
||||||
// onFinish={onFinish}
|
onFinish={onFinish}
|
||||||
initialValues={{
|
initialValues={{
|
||||||
name: '',
|
name: '',
|
||||||
login: '',
|
login: '',
|
||||||
|
@ -35,6 +35,7 @@ export default function AccountsPage() {
|
|||||||
amountPages: 0,
|
amountPages: 0,
|
||||||
users: [],
|
users: [],
|
||||||
currentPage: 1,
|
currentPage: 1,
|
||||||
|
limit: 10,
|
||||||
});
|
});
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
@ -160,11 +161,12 @@ export default function AccountsPage() {
|
|||||||
}
|
}
|
||||||
/>
|
/>
|
||||||
<Table
|
<Table
|
||||||
|
size="small"
|
||||||
onChange={onTableChange}
|
onChange={onTableChange}
|
||||||
columns={columns}
|
columns={columns}
|
||||||
dataSource={accounts.users}
|
dataSource={accounts.users}
|
||||||
pagination={{
|
pagination={{
|
||||||
pageSize: 10,
|
pageSize: accounts.limit,
|
||||||
current: accounts.currentPage,
|
current: accounts.currentPage,
|
||||||
total: accounts.amountCount,
|
total: accounts.amountCount,
|
||||||
}}
|
}}
|
||||||
@ -176,7 +178,7 @@ export default function AccountsPage() {
|
|||||||
closeDrawer={closeCreateDrawer}
|
closeDrawer={closeCreateDrawer}
|
||||||
type="create"
|
type="create"
|
||||||
>
|
>
|
||||||
<UserCreate />
|
<UserCreate closeDrawer={closeCreateDrawer} />
|
||||||
</ContentDrawer>
|
</ContentDrawer>
|
||||||
<ContentDrawer
|
<ContentDrawer
|
||||||
login={activeAccount?.login}
|
login={activeAccount?.login}
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import api from '@/api/api';
|
import api from '@/api/api';
|
||||||
import { AllUserResponse, User } from '@/types/user';
|
import { AllUserResponse, User, UserUpdate } from '@/types/user';
|
||||||
|
|
||||||
export class UserService {
|
export class UserService {
|
||||||
static async getProfile(): Promise<User> {
|
static async getProfile(): Promise<User> {
|
||||||
@ -23,4 +23,10 @@ export class UserService {
|
|||||||
const user = api.getUserById(userId);
|
const user = api.getUserById(userId);
|
||||||
return user;
|
return user;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static async createUser(user: UserUpdate): Promise<User> {
|
||||||
|
console.log('createUser');
|
||||||
|
const createdUser = api.createUser(user);
|
||||||
|
return createdUser;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -193,6 +193,8 @@ export interface components {
|
|||||||
amountPages: number;
|
amountPages: number;
|
||||||
/** Currentpage */
|
/** Currentpage */
|
||||||
currentPage: number;
|
currentPage: number;
|
||||||
|
/** Limit */
|
||||||
|
limit: number;
|
||||||
};
|
};
|
||||||
/** Auth */
|
/** Auth */
|
||||||
Auth: {
|
Auth: {
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
import { components } from "./openapi-types";
|
import { components } from './openapi-types';
|
||||||
|
|
||||||
export type User = components['schemas']['User'];
|
export type User = components['schemas']['User'];
|
||||||
export type AllUserResponse = components['schemas']['AllUserResponse'];
|
export type AllUserResponse = components['schemas']['AllUserResponse'];
|
||||||
export type AllUser = components['schemas']['AllUser'];
|
export type AllUser = components['schemas']['AllUser'];
|
||||||
export type AccountStatus = components['schemas']['AccountStatus'];
|
export type AccountStatus = components['schemas']['AccountStatus'];
|
||||||
export type AccountRole = components['schemas']['AccountRole'];
|
export type AccountRole = components['schemas']['AccountRole'];
|
||||||
|
export type UserUpdate = components['schemas']['UserUpdate'];
|
||||||
|
Loading…
Reference in New Issue
Block a user