@@ -8,15 +8,24 @@ import {
8
8
} from "react" ;
9
9
import { oneDark } from "react-syntax-highlighter/dist/esm/styles/prism" ;
10
10
11
- import { AppState , LanguageType , SnippetType } from "@types" ;
11
+ import { highlighterStyles } from "@consts/highlighter-styles" ;
12
+ import {
13
+ AppState ,
14
+ HighlighterStyleType ,
15
+ LanguageType ,
16
+ SnippetType ,
17
+ } from "@types" ;
12
18
13
19
// tokens
14
20
const defaultLanguage : LanguageType = {
15
21
lang : "JavaScript" ,
16
22
icon : "/icons/javascript.svg" ,
17
23
} ;
18
24
19
- const defaultHighlighterStyle = { name : "oneDark" , style : oneDark } ;
25
+ const defaultHighlighterStyle : HighlighterStyleType = {
26
+ name : "oneDark" ,
27
+ style : oneDark ,
28
+ } ;
20
29
21
30
// TODO: add custom loading and error handling
22
31
const defaultState : AppState = {
@@ -29,7 +38,7 @@ const defaultState: AppState = {
29
38
theme : "dark" ,
30
39
toggleTheme : ( ) => { } ,
31
40
highlighterStyle : defaultHighlighterStyle ,
32
- setHighlighterStyle : ( ) => { } ,
41
+ toggleHighlighterStyle : ( ) => { } ,
33
42
} ;
34
43
35
44
const AppContext = createContext < AppState > ( defaultState ) ;
@@ -48,7 +57,13 @@ export const AppProvider: FC<{ children: React.ReactNode }> = ({
48
57
) ;
49
58
const [ highlighterStyle , setHighlighterStyle ] = useState <
50
59
AppState [ "highlighterStyle" ]
51
- > ( defaultHighlighterStyle ) ;
60
+ > (
61
+ localStorage . getItem ( "highlighterStyleName" )
62
+ ? highlighterStyles . find (
63
+ ( style ) => style . name === localStorage . getItem ( "highlighterStyleName" )
64
+ ) || defaultHighlighterStyle
65
+ : defaultHighlighterStyle
66
+ ) ;
52
67
53
68
const toggleTheme = useCallback ( ( ) => {
54
69
const newTheme = theme === "dark" ? "light" : "dark" ;
@@ -57,6 +72,13 @@ export const AppProvider: FC<{ children: React.ReactNode }> = ({
57
72
document . documentElement . setAttribute ( "data-theme" , newTheme ) ;
58
73
} , [ theme ] ) ;
59
74
75
+ const toggleHighlighterStyle = (
76
+ newHighlighterStyle : HighlighterStyleType
77
+ ) => {
78
+ setHighlighterStyle ( newHighlighterStyle ) ;
79
+ localStorage . setItem ( "highlighterStyleName" , newHighlighterStyle . name ) ;
80
+ } ;
81
+
60
82
/**
61
83
* set the theme on initial load
62
84
*/
@@ -77,7 +99,7 @@ export const AppProvider: FC<{ children: React.ReactNode }> = ({
77
99
theme,
78
100
toggleTheme,
79
101
highlighterStyle,
80
- setHighlighterStyle ,
102
+ toggleHighlighterStyle ,
81
103
} }
82
104
>
83
105
{ children }
0 commit comments