@@ -2,10 +2,11 @@ import { Button } from "@chakra-ui/button";
22import { useDisclosure } from "@chakra-ui/hooks" ;
33import { Box , Heading , HStack } from "@chakra-ui/layout" ;
44import { Modal , ModalBody , ModalCloseButton , ModalContent , ModalFooter , ModalHeader , ModalOverlay } from "@chakra-ui/modal" ;
5- import { Badge , ButtonGroup , Center , Stack } from "@chakra-ui/react" ;
5+ import { Badge , Center , Stack } from "@chakra-ui/react" ;
66import { useEffect , useState } from "react" ;
77import { BsFillPenFill , BsTrash2 } from 'react-icons/bs' ;
88import { Template } from "../../components/page" ;
9+ import { Pagination , PaginationProps } from "../../components/pagination" ;
910import { Table } from "../../components/table" ;
1011import { User } from "../../services/models/user" ;
1112import { UsersApi } from "../../services/users" ;
@@ -14,19 +15,30 @@ export const Users = () => {
1415
1516 const { isOpen, onOpen, onClose } = useDisclosure ( )
1617
18+ const [ { page, size, totalPages } , setPagination ] = useState < PaginationProps > ( {
19+ page : 0 ,
20+ size : 10 ,
21+ totalPages : 0
22+ } ) ;
23+
1724 const [ users , setUsers ] = useState < User [ ] > ( [ ] ) ;
25+ const [ loading , setLoading ] = useState ( false ) ;
1826
19- const getUsers = async ( ) => {
27+ const fetchUsers = async ( page ?: number , size ?: number ) => {
28+ setLoading ( true ) ;
2029 try {
21- const { data : page } = await UsersApi . findAll ( ) ;
22- setUsers ( page . content ) ;
30+ const { data : { content, ...pagination } } = await UsersApi . findAll ( page , size ) ;
31+ setUsers ( content ) ;
32+ setPagination ( pagination ) ;
2333 } catch ( error ) {
2434 console . error ( 'error on find all users' ) ;
35+ } finally {
36+ setLoading ( false ) ;
2537 }
2638 }
2739
2840 useEffect ( ( ) => {
29- getUsers ( ) ;
41+ fetchUsers ( ) ;
3042 } , [ ] )
3143
3244 return (
@@ -42,6 +54,8 @@ export const Users = () => {
4254 </ Box >
4355 < Box >
4456 < Table
57+ loading = { loading }
58+ size = "sm"
4559 content = { users }
4660 columns = { [
4761 {
@@ -56,7 +70,7 @@ export const Users = () => {
5670 title : 'Roles' ,
5771 render : ( { roles } ) => (
5872 < Stack direction = 'row' >
59- { roles . map ( role => < Badge > { role } </ Badge > ) }
73+ { roles . map ( role => < Badge key = { role } > { role } </ Badge > ) }
6074 </ Stack >
6175 )
6276 } ,
@@ -71,14 +85,17 @@ export const Users = () => {
7185 options : {
7286 w : '28'
7387 } ,
88+ disableSkeleton : true ,
7489 render : ( ) => (
7590 < HStack >
7691 < Button
92+ disabled = { loading }
7793 size = "sm"
7894 variant = "outline" >
7995 < BsFillPenFill />
8096 </ Button >
8197 < Button
98+ disabled = { loading }
8299 size = "sm"
83100 variant = "outline"
84101 onClick = { onOpen } >
@@ -89,36 +106,13 @@ export const Users = () => {
89106 }
90107 ] }
91108 />
92- < Center mt = "12" >
93- < ButtonGroup size = 'md' isAttached variant = "outline" >
94- < Button disabled >
95- Primeira
96- </ Button >
97- < Button >
98- Anterior
99- </ Button >
100- < Button >
101- 1
102- </ Button >
103- < Button >
104- 2
105- </ Button >
106- < Button variant = "solid" >
107- 3
108- </ Button >
109- < Button >
110- 4
111- </ Button >
112- < Button >
113- 5
114- </ Button >
115- < Button >
116- Proxima
117- </ Button >
118- < Button >
119- Ultima
120- </ Button >
121- </ ButtonGroup >
109+ < Center my = "12" >
110+ < Pagination
111+ page = { page }
112+ size = { size }
113+ totalPages = { totalPages }
114+ onChange = { ( page , size ) => fetchUsers ( page , size ) }
115+ />
122116 </ Center >
123117 </ Box >
124118
0 commit comments