users of list

This commit is contained in:
hamid zarghami
2026-02-03 11:26:03 +03:30
parent acec9c7d5c
commit 7e30143268
9 changed files with 78 additions and 10 deletions
+1 -1
View File
@@ -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'
+3
View File
@@ -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/',
+2 -1
View File
@@ -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,
+58
View File
@@ -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
+3 -3
View File
@@ -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),
}); });
}; };
+4 -2
View File
@@ -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;
}; };
+3 -2
View File
@@ -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[]>;
+3
View File
@@ -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 />} />
+1 -1
View File
@@ -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