Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
C
canifa_note
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Vũ Hoàng Anh
canifa_note
Commits
eaebc6dc
Unverified
Commit
eaebc6dc
authored
Dec 01, 2022
by
Stephen Zhou
Committed by
GitHub
Dec 01, 2022
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
fix: apperance can not auto switch (#644)
parent
c5200ca3
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
25 additions
and
2 deletions
+25
-2
useApperance.ts
web/src/hooks/useApperance.ts
+4
-2
useMediaQuery.ts
web/src/hooks/useMediaQuery.ts
+21
-0
No files found.
web/src/hooks/useApperance.ts
View file @
eaebc6dc
...
...
@@ -3,24 +3,26 @@ import { useColorScheme } from "@mui/joy/styles";
import
{
APPERANCE_OPTIONS
,
APPERANCE_OPTIONS_STORAGE_KEY
}
from
"../helpers/consts"
;
import
useLocalStorage
from
"./useLocalStorage"
;
import
useMediaQuery
from
"./useMediaQuery"
;
export
type
Apperance
=
typeof
APPERANCE_OPTIONS
[
number
];
const
useApperance
=
()
=>
{
const
[
apperance
,
setApperance
]
=
useLocalStorage
<
Apperance
>
(
APPERANCE_OPTIONS_STORAGE_KEY
,
APPERANCE_OPTIONS
[
0
]);
const
prefersDarkMode
=
useMediaQuery
(
"(prefers-color-scheme: dark)"
);
const
{
setMode
}
=
useColorScheme
();
useEffect
(()
=>
{
const
root
=
document
.
documentElement
;
if
(
apperance
===
"dark"
||
(
apperance
===
"auto"
&&
window
.
matchMedia
(
"(prefers-color-scheme: dark)"
).
matches
))
{
if
(
apperance
===
"dark"
||
(
apperance
===
"auto"
&&
prefersDarkMode
))
{
root
.
classList
.
add
(
"dark"
);
setMode
(
"dark"
);
}
else
{
root
.
classList
.
remove
(
"dark"
);
setMode
(
"light"
);
}
},
[
apperance
]);
},
[
apperance
,
prefersDarkMode
]);
return
[
apperance
,
setApperance
]
as
const
;
};
...
...
web/src/hooks/useMediaQuery.ts
0 → 100644
View file @
eaebc6dc
import
{
useState
,
useEffect
}
from
"react"
;
const
useMediaQuery
=
(
query
:
string
)
=>
{
const
[
matches
,
setMatches
]
=
useState
(
false
);
useEffect
(()
=>
{
const
media
=
window
.
matchMedia
(
query
);
if
(
media
.
matches
!==
matches
)
{
setMatches
(
media
.
matches
);
}
const
listener
=
()
=>
{
setMatches
(
media
.
matches
);
};
media
.
addEventListener
(
"change"
,
listener
);
return
()
=>
media
.
removeEventListener
(
"change"
,
listener
);
},
[
query
,
matches
]);
return
matches
;
};
export
default
useMediaQuery
;
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment