|
1 | | -import { |
2 | | - createContext, |
3 | | - FC, |
4 | | - useCallback, |
5 | | - useContext, |
6 | | - useEffect, |
7 | | - useState, |
8 | | -} from "react"; |
| 1 | +import { createContext, FC, useContext, useEffect, useState } from "react"; |
9 | 2 | import { useParams } from "react-router-dom";
|
10 | 3 |
|
11 | 4 | import { useLanguages } from "@hooks/useLanguages";
|
12 | | -import { AppState, CategoryType, LanguageType, SnippetType } from "@types"; |
13 | | -import { defaultLanguage } from "@utils/consts"; |
14 | | -import { slugify } from "@utils/slugify"; |
| 5 | +import { AppState, LanguageType, SnippetType } from "@types"; |
| 6 | +import { configureProfile } from "@utils/configureProfile"; |
15 | 7 |
|
16 | 8 | // TODO: add custom loading and error handling
|
17 | 9 | const defaultState: AppState = {
|
@@ -39,50 +31,22 @@ export const AppProvider: FC<{ children: React.ReactNode }> = ({
|
39 | 31 | const [snippet, setSnippet] = useState<SnippetType | null>(null);
|
40 | 32 | const [searchText, setSearchText] = useState<string>("");
|
41 | 33 |
|
42 | | - const assignLanguage = useCallback(() => { |
43 | | - if (fetchedLanguages.length === 0) { |
44 | | - return; |
45 | | - } |
| 34 | + const configure = async () => { |
| 35 | + const { language, category } = await configureProfile({ |
| 36 | + languageName, |
| 37 | + categoryName, |
| 38 | + }); |
46 | 39 |
|
47 | | - const language = fetchedLanguages.find( |
48 | | - (lang) => slugify(lang.name) === languageName |
49 | | - ); |
50 | | - if (!language) { |
51 | | - setLanguage(defaultLanguage); |
52 | | - return; |
53 | | - } |
54 | 40 | setLanguage(language);
|
55 | | - }, [fetchedLanguages, languageName]); |
56 | | - |
57 | | - const assignCategory = useCallback(async () => { |
58 | | - if (!language) { |
59 | | - return; |
60 | | - } |
61 | | - |
62 | | - let category: CategoryType | undefined; |
63 | | - try { |
64 | | - const res = await fetch(`/consolidated/${slugify(language.name)}.json`); |
65 | | - const data: CategoryType[] = await res.json(); |
66 | | - category = data.find((item) => item.name === categoryName); |
67 | | - if (!category) { |
68 | | - setCategory(data[0].name); |
69 | | - return; |
70 | | - } |
71 | | - setCategory(category.name); |
72 | | - } catch (_error) { |
73 | | - // no-op |
74 | | - } |
75 | | - }, [language, categoryName]); |
76 | | - |
77 | | - useEffect(() => { |
78 | | - assignLanguage(); |
79 | | - }, [assignLanguage, languageName]); |
| 41 | + setCategory(category); |
| 42 | + }; |
80 | 43 |
|
81 | 44 | useEffect(() => {
|
82 | | - assignCategory(); |
83 | | - }, [assignCategory, categoryName]); |
| 45 | + configure(); |
| 46 | + // eslint-disable-next-line react-hooks/exhaustive-deps |
| 47 | + }, [fetchedLanguages]); |
84 | 48 |
|
85 | | - if (!language || !category) { |
| 49 | + if (language ===null|| category===null) { |
86 | 50 | return <div>Loading...</div>;
|
87 | 51 | }
|
88 | 52 |
|
|
0 commit comments