Merge pull request #39 from Nez27/feat/impl-pagination-for-page

Implement pagination for table user and room
This commit is contained in:
Loi Phan
2023-11-29 16:58:25 +07:00
committed by GitHub
8 changed files with 38 additions and 49 deletions
@@ -4,9 +4,6 @@ import renderer from 'react-test-renderer';
import Form from '.';
import Input from '@commonStyle/Input';
// Styled
import { FormBtn } from '@page/User/styled';
describe('Form ', () => {
const isDisable = true;
const errorMessage = 'This is error message';
@@ -24,12 +21,12 @@ describe('Form ', () => {
</Form.Row>
<Form.Action>
<FormBtn type="submit" name="submit" disabled={isDisable}>
<Form.Button type="submit" name="submit" disabled={isDisable}>
Confirm
</FormBtn>
<FormBtn type="button" variations="secondary" onClick={handleOnClick}>
</Form.Button>
<Form.Button type="button" variations="secondary" onClick={handleOnClick}>
Close
</FormBtn>
</Form.Button>
</Form.Action>
</Form>
);
@@ -7,6 +7,7 @@ import {
Error,
Label,
StyledFormRow,
FormBtn,
} from './styled';
interface IFormProps {
@@ -29,7 +30,6 @@ const Form = ({ children, onSubmit, id }: IFormProps) => {
);
};
const FormRow = ({ label, error, children }: IFormRow) => {
return (
<StyledFormRow>
@@ -44,5 +44,6 @@ const FormRow = ({ label, error, children }: IFormRow) => {
Form.Row = FormRow;
Form.Action = StyledActionBtn;
Form.Button = FormBtn;
export default Form;
+13 -1
View File
@@ -1,5 +1,8 @@
import styled from 'styled-components';
// Styled
import Button from '@commonStyle/Button';
const StyledForm = styled.form`
display: flex;
flex-direction: column;
@@ -35,4 +38,13 @@ const Error = styled.p`
width: 220px;
`;
export { StyledForm, StyledActionBtn, StyledFormRow, Label, Error };
const FormBtn = styled(Button)`
width: 100%;
&:disabled,
&[disabled] {
background-color: var(--disabled-btn-color);
}
`;
export { StyledForm, StyledActionBtn, StyledFormRow, Label, Error, FormBtn };
+4 -17
View File
@@ -1,7 +1,4 @@
import styled from 'styled-components';
// Styled
import Button from '@commonStyle/Button.ts';
import Input from '@commonStyle/Input.ts';
// Types
@@ -25,16 +22,6 @@ import { useForm } from 'react-hook-form';
import { useCreateRoom } from '@hook/rooms/useCreateRoom.ts';
import { useUpdateRoom } from '@hook/rooms/useUpdateRoom.ts';
const FormBtn = styled(Button)`
width: 100%;
&:disabled,
&[disabled] {
background-color: var(--disabled-btn-color);
cursor: no-drop;
}
`;
interface IRoomFormProp {
onCloseModal?: () => void;
room?: IRoom;
@@ -115,7 +102,7 @@ const RoomForm = ({ onCloseModal, room }: IRoomFormProp) => {
</Form.Row>
<Form.Action>
<FormBtn
<Form.Button
type="submit"
name="submit"
disabled={!isDirty || !isValid || isLoading}
@@ -125,10 +112,10 @@ const RoomForm = ({ onCloseModal, room }: IRoomFormProp) => {
? 'Add'
: 'Save'
}
</FormBtn>
<FormBtn type="button" variations="secondary" onClick={onCloseModal}>
</Form.Button>
<Form.Button type="button" variations="secondary" onClick={onCloseModal}>
Close
</FormBtn>
</Form.Button>
</Form.Action>
</Form>
);
@@ -22,10 +22,11 @@ import Spinner from '@commonStyle/Spinner';
// Hooks
import { useRooms } from '@hook/rooms/useRooms';
import Pagination from '@component/Pagination';
const RoomTable = () => {
const columnName = ['Id', 'Name', 'Price', 'Status'];
const { isLoading, rooms } = useRooms();
const { isLoading, rooms, count } = useRooms();
const renderRoomRow = useCallback(
(room: IRoom) => <RoomRow room={room} key={room.id} />,
@@ -49,6 +50,9 @@ const RoomTable = () => {
<Table columns="10% 40% 20% 20% 5%">
<Table.Header headerColumn={columnName} />
<Table.Body<IRoom> data={rooms} render={renderRoomRow} />
<Table.Footer>
<Pagination count={count!}/>
</Table.Footer>
</Table>
</Menus>
) : (
+4 -7
View File
@@ -19,9 +19,6 @@ import {
} from '@constant/formValidateMessage.ts';
import { REGEX } from '@constant/commons.ts';
// Styled
import { FormBtn } from './styled.ts';
// Types
import { IUser } from '@type/users.ts';
@@ -106,7 +103,7 @@ const UserForm = ({ onCloseModal, user }: IUserFormProp) => {
</Form.Row>
<Form.Action>
<FormBtn
<Form.Button
type="submit"
name="submit"
disabled={!isDirty || !isValid || isLoading}
@@ -116,10 +113,10 @@ const UserForm = ({ onCloseModal, user }: IUserFormProp) => {
? 'Add'
: 'Save'
}
</FormBtn>
<FormBtn type="button" variations="secondary" onClick={onCloseModal}>
</Form.Button>
<Form.Button type="button" variations="secondary" onClick={onCloseModal}>
Close
</FormBtn>
</Form.Button>
</Form.Action>
</Form>
</FormProvider>
@@ -22,10 +22,11 @@ import Spinner from '@commonStyle/Spinner';
// Hooks
import { useUsers } from '@hook/users/useUsers';
import Pagination from '@component/Pagination';
const UserTable = () => {
const columnName = ['Id', 'Name', 'Phone', 'Is Booked'];
const { isLoading, users } = useUsers();
const { isLoading, users, count } = useUsers();
const renderUserRow = useCallback(
(user: IUser) => (
@@ -54,6 +55,9 @@ const UserTable = () => {
<Table columns="10% 35% 30% 15% 10%">
<Table.Header headerColumn={columnName} />
<Table.Body<IUser> data={users} render={renderUserRow} />
<Table.Footer>
<Pagination count={count!}/>
</Table.Footer>
</Table>
</Menus>
) : (
+1 -14
View File
@@ -1,8 +1,5 @@
import styled from 'styled-components';
// Components
import Button from '../../commons/styles/Button';
const StyledUser = styled.main`
padding: 20px;
padding-bottom: 100px;
@@ -24,14 +21,4 @@ const StyledOperationTable = styled.div`
justify-content: flex-end;
`;
const FormBtn = styled(Button)`
width: 100%;
&:disabled,
&[disabled] {
background-color: var(--disabled-btn-color);
cursor: no-drop;
}
`;
export { StyledUser, Title, StyledOperationTable, FormBtn };
export { StyledUser, Title, StyledOperationTable };