File tree Expand file tree Collapse file tree 9 files changed +125
-5
lines changed Expand file tree Collapse file tree 9 files changed +125
-5
lines changed Original file line number Diff line number Diff line change @@ -26,7 +26,7 @@ const avatars = names.map(name => ({
26
26
alt : name ,
27
27
} ) ) ;
28
28
29
- describe ( 'AvatarGroup component ' , ( ) => {
29
+ describe ( 'AvatarGroup' , ( ) => {
30
30
it ( 'renders the AvatarGroup component properly' , ( ) => {
31
31
const { getByText } = render ( < AvatarGroup avatars = { avatars } limit = { 2 } /> ) ;
32
32
Original file line number Diff line number Diff line change 1
- .iconWrapper {
1
+ .languageDropdown {
2
2
@apply h-9
3
3
w-9
4
4
rounded-md
5
- bg-neutral-100
6
5
p-2
7
6
text-neutral-700
8
- dark:bg-neutral-900
9
7
dark:text-neutral-300;
8
+
9
+ & : hover {
10
+ @apply bg-neutral-100
11
+ dark:bg-neutral-900;
12
+ }
10
13
}
11
14
12
15
.dropDownContent {
Original file line number Diff line number Diff line change @@ -30,7 +30,7 @@ const LanguageDropdown: FC<LanguageDropDownProps> = ({
30
30
return (
31
31
< DropdownMenu . Root >
32
32
< DropdownMenu . Trigger asChild >
33
- < button className = { styles . iconWrapper } aria-label = { ariaLabel } >
33
+ < button className = { styles . languageDropdown } aria-label = { ariaLabel } >
34
34
< LanguageIcon height = "20" />
35
35
</ button >
36
36
</ DropdownMenu . Trigger >
Original file line number Diff line number Diff line change
1
+ import { render , screen } from '@testing-library/react' ;
2
+ import userEvent from '@testing-library/user-event' ;
3
+
4
+ import { LocaleProvider } from '@/providers/localeProvider' ;
5
+
6
+ import ThemeToggle from '../' ;
7
+
8
+ let mockCurrentTheme = 'light' ;
9
+
10
+ const toggleTheme = ( ) => {
11
+ mockCurrentTheme = mockCurrentTheme === 'light' ? 'dark' : 'light' ;
12
+ } ;
13
+
14
+ describe ( 'ThemeToggle' , ( ) => {
15
+ let toggle ;
16
+
17
+ beforeEach ( ( ) => {
18
+ mockCurrentTheme = 'light' ;
19
+
20
+ render (
21
+ < LocaleProvider >
22
+ < ThemeToggle onClick = { toggleTheme } />
23
+ </ LocaleProvider >
24
+ ) ;
25
+ toggle = screen . getByRole ( 'button' ) ;
26
+ } ) ;
27
+
28
+ it ( 'switches dark theme to light theme' , async ( ) => {
29
+ mockCurrentTheme = 'dark' ;
30
+ await userEvent . click ( toggle ) ;
31
+ expect ( mockCurrentTheme ) . toBe ( 'light' ) ;
32
+ } ) ;
33
+
34
+ it ( 'switches light theme to dark theme' , async ( ) => {
35
+ await userEvent . click ( toggle ) ;
36
+ expect ( mockCurrentTheme ) . toBe ( 'dark' ) ;
37
+ } ) ;
38
+ } ) ;
Original file line number Diff line number Diff line change
1
+ .themeToggle {
2
+ @apply h-9
3
+ w-9
4
+ rounded-md
5
+ p-2
6
+ text-neutral-700
7
+ dark:text-neutral-300;
8
+
9
+ & : hover {
10
+ @apply bg-neutral-100
11
+ dark:bg-neutral-900;
12
+ }
13
+ }
Original file line number Diff line number Diff line change
1
+ import type { Meta as MetaObj , StoryObj } from '@storybook/react' ;
2
+
3
+ import ThemeToggle from '@/components/Common/ThemeToggle' ;
4
+
5
+ type Story = StoryObj < typeof ThemeToggle > ;
6
+ type Meta = MetaObj < typeof ThemeToggle > ;
7
+
8
+ export const Default : Story = { } ;
9
+
10
+ export default { component : ThemeToggle } as Meta ;
Original file line number Diff line number Diff line change
1
+ import { MoonIcon , SunIcon } from '@heroicons/react/24/outline' ;
2
+ import type { FC , MouseEvent } from 'react' ;
3
+ import { useIntl } from 'react-intl' ;
4
+
5
+ import styles from './index.module.css' ;
6
+
7
+ type ThemeToggleProps = {
8
+ onClick ?: ( event : MouseEvent < HTMLButtonElement > ) => void ;
9
+ } ;
10
+
11
+ const ThemeToggle : FC < ThemeToggleProps > = ( { onClick = ( ) => { } } ) => {
12
+ const { formatMessage } = useIntl ( ) ;
13
+
14
+ const ariaLabel = formatMessage ( {
15
+ id : 'components.header.buttons.toggleDarkMode' ,
16
+ } ) ;
17
+
18
+ return (
19
+ < button
20
+ type = "button"
21
+ onClick = { onClick }
22
+ className = { styles . themeToggle }
23
+ aria-label = { ariaLabel }
24
+ >
25
+ < MoonIcon className = "block dark:hidden" height = "20" />
26
+ < SunIcon className = "hidden dark:block" height = "20" />
27
+ </ button >
28
+ ) ;
29
+ } ;
30
+
31
+ export default ThemeToggle ;
Original file line number Diff line number Diff line change 43
43
"@heroicons/react" : " ~2.0.18" ,
44
44
"@mdx-js/react" : " ^2.3.0" ,
45
45
"@nodevu/core" : " ~0.1.0" ,
46
+ "@radix-ui/react-accessible-icon" : " ^1.0.3" ,
46
47
"@radix-ui/react-avatar" : " ^1.0.4" ,
47
48
"@radix-ui/react-dropdown-menu" : " ^2.0.6" ,
48
49
"@radix-ui/react-select" : " ^2.0.0" ,
You can’t perform that action at this time.
0 commit comments