From 32a65038f5a731432f1482f395c97b68f15cccc1 Mon Sep 17 00:00:00 2001 From: Loi Phan Date: Fri, 3 Nov 2023 17:30:34 +0700 Subject: [PATCH] Apply react hook form for user page --- hotel-management/package.json | 1 + hotel-management/pnpm-lock.yaml | 12 + .../src/components/Select/index.tsx | 20 +- .../src/constants/formValidateMessage.ts | 6 + hotel-management/src/constants/messages.ts | 10 - hotel-management/src/constants/path.ts | 2 +- hotel-management/src/helpers/utils.ts | 33 +- hotel-management/src/pages/Room/Form.tsx | 524 ++++++++---------- hotel-management/src/pages/User/Form.tsx | 358 ++++-------- hotel-management/src/pages/User/styled.ts | 15 +- 10 files changed, 404 insertions(+), 577 deletions(-) create mode 100644 hotel-management/src/constants/formValidateMessage.ts diff --git a/hotel-management/package.json b/hotel-management/package.json index 5e6f8ce..09732e8 100644 --- a/hotel-management/package.json +++ b/hotel-management/package.json @@ -30,6 +30,7 @@ "@emotion/is-prop-valid": "^1.2.1", "react": "^18.2.0", "react-dom": "^18.2.0", + "react-hook-form": "^7.47.0", "react-hot-toast": "^2.4.1", "react-icons": "^4.11.0", "react-router-dom": "^6.17.0", diff --git a/hotel-management/pnpm-lock.yaml b/hotel-management/pnpm-lock.yaml index 4d99aad..ab6d085 100644 --- a/hotel-management/pnpm-lock.yaml +++ b/hotel-management/pnpm-lock.yaml @@ -14,6 +14,9 @@ dependencies: react-dom: specifier: ^18.2.0 version: 18.2.0(react@18.2.0) + react-hook-form: + specifier: ^7.47.0 + version: 7.47.0(react@18.2.0) react-hot-toast: specifier: ^2.4.1 version: 2.4.1(csstype@3.1.2)(react-dom@18.2.0)(react@18.2.0) @@ -1815,6 +1818,15 @@ packages: scheduler: 0.23.0 dev: false + /react-hook-form@7.47.0(react@18.2.0): + resolution: {integrity: sha512-F/TroLjTICipmHeFlMrLtNLceO2xr1jU3CyiNla5zdwsGUGu2UOxxR4UyJgLlhMwLW/Wzp4cpJ7CPfgJIeKdSg==} + engines: {node: '>=12.22.0'} + peerDependencies: + react: ^16.8.0 || ^17 || ^18 + dependencies: + react: 18.2.0 + dev: false + /react-hot-toast@2.4.1(csstype@3.1.2)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-j8z+cQbWIM5LY37pR6uZR6D4LfseplqnuAO4co4u8917hBUvXlEqyP1ZzqVLcqoyUesZZv/ImreoCeHVDpE5pQ==} engines: {node: '>=10'} diff --git a/hotel-management/src/components/Select/index.tsx b/hotel-management/src/components/Select/index.tsx index 4f5ee25..7317b3e 100644 --- a/hotel-management/src/components/Select/index.tsx +++ b/hotel-management/src/components/Select/index.tsx @@ -1,3 +1,4 @@ +import { FieldValues, RegisterOptions, useFormContext } from 'react-hook-form'; import { StyledSelect } from './styled'; export interface ISelectOptions { @@ -6,20 +7,25 @@ export interface ISelectOptions { } interface ISelect { options: ISelectOptions[]; - value: string; - onChange: React.ChangeEventHandler; - name?: string; + optionsConfigForm?: RegisterOptions | undefined; + value?: number; + id: string; } -const Select = ({ options, value, onChange, name }: ISelect) => { +const Select = ({ options, id, optionsConfigForm }: ISelect) => { + const { register } = useFormContext() ?? {}; + + if(!register) { + return null; + } + if (!options) return; return ( {options.map((option) => (