11import { createContext , FC , useContext , useEffect , useState } from "react" ;
2- import { useParams } from "react-router-dom" ;
2+ import { useNavigate , useParams } from "react-router-dom" ;
33
44import { useLanguages } from "@hooks/useLanguages" ;
55import { AppState , LanguageType , SnippetType } from "@types" ;
66import { configureUserSelection } from "@utils/configureUserSelection" ;
7- import { defaultState } from "@utils/consts" ;
7+ import { defaultLanguage , defaultState } from "@utils/consts" ;
8+ import { slugify } from "@utils/slugify" ;
89
910const AppContext = createContext < AppState > ( defaultState ) ;
1011
1112export const AppProvider : FC < { children : React . ReactNode } > = ( {
1213 children,
1314} ) => {
15+ const navigate = useNavigate ( ) ;
1416 const { languageName, categoryName } = useParams ( ) ;
1517
1618 const { fetchedLanguages } = useLanguages ( ) ;
@@ -35,6 +37,16 @@ export const AppProvider: FC<{ children: React.ReactNode }> = ({
3537 // eslint-disable-next-line react-hooks/exhaustive-deps
3638 } , [ fetchedLanguages ] ) ;
3739
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+
3850 if ( language === null || category === null ) {
3951 return < div > Loading...</ div > ;
4052 }
0 commit comments