1
1
import { createContext , FC , useContext , useEffect , useState } from "react" ;
2
- import { useParams } from "react-router-dom" ;
2
+ import { useNavigate , useParams } from "react-router-dom" ;
3
3
4
4
import { useLanguages } from "@hooks/useLanguages" ;
5
5
import { AppState , LanguageType , SnippetType } from "@types" ;
6
6
import { configureUserSelection } from "@utils/configureUserSelection" ;
7
- import { defaultState } from "@utils/consts" ;
7
+ import { defaultLanguage , defaultState } from "@utils/consts" ;
8
+ import { slugify } from "@utils/slugify" ;
8
9
9
10
const AppContext = createContext < AppState > ( defaultState ) ;
10
11
11
12
export const AppProvider : FC < { children : React . ReactNode } > = ( {
12
13
children,
13
14
} ) => {
15
+ const navigate = useNavigate ( ) ;
14
16
const { languageName, categoryName } = useParams ( ) ;
15
17
16
18
const { fetchedLanguages } = useLanguages ( ) ;
@@ -35,6 +37,16 @@ export const AppProvider: FC<{ children: React.ReactNode }> = ({
35
37
// eslint-disable-next-line react-hooks/exhaustive-deps
36
38
} , [ fetchedLanguages ] ) ;
37
39
40
+ /**
41
+ * Set the default language if the language is not found in the URL.
42
+ */
43
+ useEffect ( ( ) => {
44
+ if ( languageName === undefined ) {
45
+ navigate ( `/${ slugify ( defaultLanguage . name ) } ` , { replace : true } ) ;
46
+ }
47
+ // eslint-disable-next-line react-hooks/exhaustive-deps
48
+ } , [ ] ) ;
49
+
38
50
if ( language === null || category === null ) {
39
51
return < div > Loading...</ div > ;
40
52
}
0 commit comments