Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit f205b88

Browse files
committed
language persisted in localStorage
1 parent 4ce57e5 commit f205b88

File tree

3 files changed

+36
-5
lines changed

3 files changed

+36
-5
lines changed

‎src/components/LanguageSelector.tsx‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import { SelectorOption } from "@types";
77
import Selector from "./Selector";
88

99
const LanguageSelector = () => {
10-
const { language, setLanguage } = useAppContext();
10+
const { language, toggleLanguage } = useAppContext();
1111
const { fetchedLanguages, loading, error } = useLanguages();
1212

1313
const options = useMemo(
@@ -24,7 +24,7 @@ const LanguageSelector = () => {
2424
if (!selected) {
2525
return;
2626
}
27-
setLanguage(selected);
27+
toggleLanguage(selected);
2828
};
2929

3030
if (loading) {

‎src/contexts/AppContext.tsx‎

Lines changed: 33 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import {
99
import { oneDark } from "react-syntax-highlighter/dist/esm/styles/prism";
1010

1111
import { highlighterStyles } from "@consts/highlighter-styles";
12+
import { useLanguages } from "@hooks/useLanguages";
1213
import {
1314
AppState,
1415
HighlighterStyleType,
@@ -30,7 +31,7 @@ const defaultHighlighterStyle: HighlighterStyleType = {
3031
// TODO: add custom loading and error handling
3132
const defaultState: AppState = {
3233
language: defaultLanguage,
33-
setLanguage: () => {},
34+
toggleLanguage: () => {},
3435
category: "",
3536
setCategory: () => {},
3637
snippet: null,
@@ -46,6 +47,8 @@ const AppContext = createContext<AppState>(defaultState);
4647
export const AppProvider: FC<{ children: React.ReactNode }> = ({
4748
children,
4849
}) => {
50+
const { fetchedLanguages } = useLanguages();
51+
4952
const [language, setLanguage] = useState<LanguageType>(defaultLanguage);
5053
const [category, setCategory] = useState<string>("");
5154
const [snippet, setSnippet] = useState<SnippetType | null>(null);
@@ -65,6 +68,11 @@ export const AppProvider: FC<{ children: React.ReactNode }> = ({
6568
: defaultHighlighterStyle
6669
);
6770

71+
const toggleLanguage = (newLanguage: LanguageType) => {
72+
setLanguage(newLanguage);
73+
localStorage.setItem("languageName", newLanguage.lang);
74+
};
75+
6876
const toggleTheme = useCallback(() => {
6977
const newTheme = theme === "dark" ? "light" : "dark";
7078
setTheme(newTheme);
@@ -79,6 +87,29 @@ export const AppProvider: FC<{ children: React.ReactNode }> = ({
7987
localStorage.setItem("highlighterStyleName", newHighlighterStyle.name);
8088
};
8189

90+
/**
91+
* check if the language is saved in local storage
92+
*/
93+
useEffect(() => {
94+
if (fetchedLanguages.length === 0) {
95+
return;
96+
}
97+
98+
const languageName = localStorage.getItem("languageName");
99+
if (!languageName) {
100+
return;
101+
}
102+
103+
const selected = fetchedLanguages.find(
104+
(lang) => lang.lang === languageName
105+
);
106+
if (!selected) {
107+
return;
108+
}
109+
110+
setLanguage(selected);
111+
}, [fetchedLanguages]);
112+
82113
/**
83114
* set the theme on initial load
84115
*/
@@ -91,7 +122,7 @@ export const AppProvider: FC<{ children: React.ReactNode }> = ({
91122
<AppContext.Provider
92123
value={{
93124
language,
94-
setLanguage,
125+
toggleLanguage,
95126
category,
96127
setCategory,
97128
snippet,

‎src/types/index.ts‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ export type HighlighterStyleType = {
2323

2424
export type AppState = {
2525
language: LanguageType;
26-
setLanguage: React.Dispatch<React.SetStateAction<LanguageType>>;
26+
toggleLanguage: (_: LanguageType)=>void;
2727
category: string;
2828
setCategory: React.Dispatch<React.SetStateAction<string>>;
2929
snippet: SnippetType | null;

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /