users of list
This commit is contained in:
@@ -1,3 +1,3 @@
|
|||||||
VITE_API_BASE_URL = 'http://10.86.60.88:4000'
|
VITE_API_BASE_URL = 'http://192.168.99.218:4000'
|
||||||
VITE_TOKEN_NAME = 'negareh_at'
|
VITE_TOKEN_NAME = 'negareh_at'
|
||||||
VITE_REFRESH_TOKEN_NAME = 'negareh_art'
|
VITE_REFRESH_TOKEN_NAME = 'negareh_art'
|
||||||
@@ -20,6 +20,9 @@ export const Paths = {
|
|||||||
list: '/product/attribute-value/'
|
list: '/product/attribute-value/'
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
users: {
|
||||||
|
list: '/users/list'
|
||||||
|
},
|
||||||
formBuilder: {
|
formBuilder: {
|
||||||
list: '/form-builder/list/',
|
list: '/form-builder/list/',
|
||||||
create: '/form-builder/create/',
|
create: '/form-builder/create/',
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
import { type BaseResponse } from "@/shared/types/Types";
|
import { type BaseResponse } from "@/shared/types/Types";
|
||||||
import type { FieldTypeEnum } from "../enum/Enum";
|
import type { FieldTypeEnum } from "../enum/Enum";
|
||||||
|
import type { RowDataType } from "@/components/types/TableTypes";
|
||||||
|
|
||||||
export type CreateFieldType = {
|
export type CreateFieldType = {
|
||||||
name: string,
|
name: string,
|
||||||
@@ -10,7 +11,7 @@ export type CreateFieldType = {
|
|||||||
entityType:string, // 'product' | 'print'
|
entityType:string, // 'product' | 'print'
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface FieldType {
|
export interface FieldType extends RowDataType {
|
||||||
createdAt: string,
|
createdAt: string,
|
||||||
id: number,
|
id: number,
|
||||||
isRequired: boolean,
|
isRequired: boolean,
|
||||||
|
|||||||
@@ -0,0 +1,58 @@
|
|||||||
|
import { useState, type FC } from 'react'
|
||||||
|
import { useGetUsers } from './hooks/useUserData'
|
||||||
|
import Table from '@/components/Table'
|
||||||
|
import moment from 'moment-jalaali'
|
||||||
|
|
||||||
|
const UsersList: FC = () => {
|
||||||
|
|
||||||
|
const [page, setPage] = useState<number>(1)
|
||||||
|
const { data } = useGetUsers(page)
|
||||||
|
|
||||||
|
return (
|
||||||
|
<div className='mt-5'>
|
||||||
|
<div className='flex justify-between items-center'>
|
||||||
|
<h1 className='text-lg font-light'>کاربران</h1>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<Table
|
||||||
|
columns={[
|
||||||
|
{
|
||||||
|
key: 'fullName',
|
||||||
|
title: 'نام و نام خانوادگی',
|
||||||
|
render: (item) => {
|
||||||
|
if (item.firstName)
|
||||||
|
return (
|
||||||
|
<div>{item.firstName + ' ' + item.lastName}</div>
|
||||||
|
)
|
||||||
|
else return (
|
||||||
|
<div>{item.phone}</div>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
key: 'phone',
|
||||||
|
title: 'موبایل'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
key: 'createdAt',
|
||||||
|
title: 'تاریخ ثبت نام',
|
||||||
|
render: (item) => {
|
||||||
|
return (
|
||||||
|
<div>{moment(item.createdAt).format('jYYYY-jMM-jDD')}</div>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
},
|
||||||
|
]}
|
||||||
|
data={data?.data}
|
||||||
|
pagination={{
|
||||||
|
currentPage: page,
|
||||||
|
onPageChange: setPage,
|
||||||
|
totalPages: data?.meta?.totalPages as number
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
export default UsersList
|
||||||
@@ -1,9 +1,9 @@
|
|||||||
import { useQuery } from "@tanstack/react-query";
|
import { useQuery } from "@tanstack/react-query";
|
||||||
import * as api from "../service/UserService";
|
import * as api from "../service/UserService";
|
||||||
|
|
||||||
export const useGetUsers = () => {
|
export const useGetUsers = (page: number = 1) => {
|
||||||
return useQuery({
|
return useQuery({
|
||||||
queryKey: ["users"],
|
queryKey: ["users", page],
|
||||||
queryFn: api.getUsers,
|
queryFn: () => api.getUsers(page),
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,7 +1,9 @@
|
|||||||
import axios from "@/config/axios";
|
import axios from "@/config/axios";
|
||||||
import type { UsersResponseType } from "../types/Types";
|
import type { UsersResponseType } from "../types/Types";
|
||||||
|
|
||||||
export const getUsers = async () => {
|
export const getUsers = async (page: number) => {
|
||||||
const { data } = await axios.get<UsersResponseType>(`/admin/users`);
|
const { data } = await axios.get<UsersResponseType>(
|
||||||
|
`/admin/users?page=${page}`
|
||||||
|
);
|
||||||
return data;
|
return data;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
|
import type { RowDataType } from "@/components/types/TableTypes";
|
||||||
import type { BaseResponse } from "@/shared/types/Types";
|
import type { BaseResponse } from "@/shared/types/Types";
|
||||||
|
|
||||||
export type UserType = {
|
export interface UserType extends RowDataType {
|
||||||
id: string;
|
id: string;
|
||||||
firstName: string | null;
|
firstName: string | null;
|
||||||
lastName: string | null;
|
lastName: string | null;
|
||||||
@@ -11,6 +12,6 @@ export type UserType = {
|
|||||||
isActive: boolean;
|
isActive: boolean;
|
||||||
createdAt: string;
|
createdAt: string;
|
||||||
deletedAt: string | null;
|
deletedAt: string | null;
|
||||||
};
|
}
|
||||||
|
|
||||||
export type UsersResponseType = BaseResponse<UserType[]>;
|
export type UsersResponseType = BaseResponse<UserType[]>;
|
||||||
|
|||||||
@@ -44,6 +44,7 @@ import SectionList from '@/pages/print/List'
|
|||||||
import CreateSection from '@/pages/print/Create'
|
import CreateSection from '@/pages/print/Create'
|
||||||
import UpdateSection from '@/pages/print/Update'
|
import UpdateSection from '@/pages/print/Update'
|
||||||
import PrintForm from '@/pages/print/Form'
|
import PrintForm from '@/pages/print/Form'
|
||||||
|
import UsersList from '@/pages/user/List'
|
||||||
|
|
||||||
const MainRouter: FC = () => {
|
const MainRouter: FC = () => {
|
||||||
return (
|
return (
|
||||||
@@ -87,6 +88,8 @@ const MainRouter: FC = () => {
|
|||||||
<Route path={Paths.print.update + ':id'} element={<UpdateSection />} />
|
<Route path={Paths.print.update + ':id'} element={<UpdateSection />} />
|
||||||
<Route path={Paths.print.form + ':itemId/:orderId'} element={<PrintForm />} />
|
<Route path={Paths.print.form + ':itemId/:orderId'} element={<PrintForm />} />
|
||||||
|
|
||||||
|
<Route path={Paths.users.list} element={<UsersList />} />
|
||||||
|
|
||||||
<Route path={Paths.features.list} element={<FeaturesList />} />
|
<Route path={Paths.features.list} element={<FeaturesList />} />
|
||||||
<Route path={Paths.features.create} element={<CreateFeature />} />
|
<Route path={Paths.features.create} element={<CreateFeature />} />
|
||||||
<Route path={Paths.service.print} element={<PrintService />} />
|
<Route path={Paths.service.print} element={<PrintService />} />
|
||||||
|
|||||||
@@ -82,7 +82,7 @@ const SideBar: FC = () => {
|
|||||||
icon={<People size={iconSizeSideBar} color='#4F5260' />}
|
icon={<People size={iconSizeSideBar} color='#4F5260' />}
|
||||||
title={'مشتریان'}
|
title={'مشتریان'}
|
||||||
isActive={isActive('customer')}
|
isActive={isActive('customer')}
|
||||||
link={'Paths.'}
|
link={Paths.users.list}
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<SideBarItem
|
<SideBarItem
|
||||||
|
|||||||
Reference in New Issue
Block a user