From bb08ad5377df52c50643338c71d03c23674d15ff Mon Sep 17 00:00:00 2001 From: Kwan Ho Leung Date: Thu, 27 Jun 2024 13:33:38 +1000 Subject: [PATCH] feat: add app setting page Added AppSetting page: - implemented 'language' drop down, with Eng and Chn language options - implemented 'theme' drop down, with two staic options 'light', 'dark' - drop down were wrote by custom ul li, implemented within react-hook-form - added AppSetting page into routeConfig - added entry from side nav bar - added unit tests that passed after migrate to next - changed theme hook to fit next js Resolve CP-36 --- package.json | 1 + public/img/dropdownArrow.svg | 4 + .../appsetting/AppSetting.test.tsx | 201 ++++++++++++++++++ src/app/(protected)/appsetting/page.tsx | 121 +++++++++++ src/containers/App/MainWrapper.tsx | 9 + .../Layout/sidebar/SidebarContent.tsx | 5 + src/graphql/codegen/graphql.ts | 13 -- src/routes/routeConfig.ts | 8 + src/shared/components/form/CustomDropdown.tsx | 157 ++++++++++++++ src/shared/components/form/FormElements.tsx | 5 +- src/shared/constants/storage.ts | 1 + src/shared/utils/hexToRGB.ts | 17 ++ src/shared/utils/mockThemeProvider.tsx | 34 +++ tsconfig.json | 2 +- yarn.lock | 16 +- 15 files changed, 578 insertions(+), 16 deletions(-) create mode 100644 public/img/dropdownArrow.svg create mode 100644 src/app/(protected)/appsetting/AppSetting.test.tsx create mode 100644 src/app/(protected)/appsetting/page.tsx create mode 100644 src/containers/App/MainWrapper.tsx create mode 100644 src/shared/components/form/CustomDropdown.tsx create mode 100644 src/shared/utils/hexToRGB.ts create mode 100644 src/shared/utils/mockThemeProvider.tsx diff --git a/package.json b/package.json index bac3bce..a8f67df 100644 --- a/package.json +++ b/package.json @@ -89,6 +89,7 @@ "husky": "^8.0.0", "jest": "^29.7.0", "jest-environment-jsdom": "^29.7.0", + "jest-styled-components": "^7.2.0", "jest-transform-stub": "^2.0.0", "jest-transformer-svg": "^2.0.2", "less": "^4.2.0", diff --git a/public/img/dropdownArrow.svg b/public/img/dropdownArrow.svg new file mode 100644 index 0000000..ff2feb4 --- /dev/null +++ b/public/img/dropdownArrow.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/src/app/(protected)/appsetting/AppSetting.test.tsx b/src/app/(protected)/appsetting/AppSetting.test.tsx new file mode 100644 index 0000000..8031428 --- /dev/null +++ b/src/app/(protected)/appsetting/AppSetting.test.tsx @@ -0,0 +1,201 @@ +import { BrowserRouter as Router } from 'react-router-dom'; +import { useUserContext } from '@/hooks/userHooks'; +import { render, screen } from '@/shared/utils/mockThemeProvider'; +import { hexToRgb } from '@/shared/utils/hexToRGB'; +import 'jest-styled-components'; +import userEvent from '@testing-library/user-event'; +import AppSetting from './page'; + +// Mock 404.tsx to get rid of +// 'Expression produces a union type that is too complex to represent' error from its