@c-rex/contexts 0.1.5 → 0.1.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/config-provider.tsx +30 -19
- package/src/search.tsx +12 -35
package/package.json
CHANGED
package/src/config-provider.tsx
CHANGED
|
@@ -7,32 +7,34 @@ import { getConfigs } from '@c-rex/utils/next-cookies'
|
|
|
7
7
|
import React, { createContext, useContext, useEffect, useState } from 'react'
|
|
8
8
|
|
|
9
9
|
type AppConfigContextType = {
|
|
10
|
-
configs: ConfigInterface
|
|
11
|
-
availableLanguagesAndCountries: LanguageAndCountries[]
|
|
12
|
-
loading: boolean
|
|
13
10
|
error: Error | null
|
|
14
11
|
uiLang: string | null
|
|
12
|
+
configs: ConfigInterface
|
|
13
|
+
loading: boolean
|
|
14
|
+
packageID: string | null
|
|
15
15
|
contentLang: string | null
|
|
16
|
+
articleLang: string | null
|
|
16
17
|
availableVersions: SidebarAvailableVersionsInterface[] | null
|
|
17
|
-
|
|
18
|
+
availableLanguagesAndCountries: LanguageAndCountries[]
|
|
18
19
|
setUiLang: (lang: string | null) => void
|
|
19
20
|
setContentLang: (lang: string | null) => void
|
|
20
21
|
setAvailableVersions: (versions: SidebarAvailableVersionsInterface[] | null) => void
|
|
21
|
-
|
|
22
|
-
|
|
22
|
+
setPackageID: (id: string | null) => void
|
|
23
|
+
setArticleLang: (lang: string | null) => void
|
|
23
24
|
}
|
|
24
25
|
|
|
25
26
|
const AppConfigContext = createContext<AppConfigContextType | undefined>(undefined)
|
|
26
27
|
|
|
27
28
|
export const AppConfigProvider = ({ children }: { children: React.ReactNode }) => {
|
|
29
|
+
const [error, setError] = useState<Error | null>(null)
|
|
30
|
+
const [uiLang, setUiLang] = useState<string | null>(null)
|
|
28
31
|
const [configs, setConfigs] = useState<ConfigInterface | null>(null)
|
|
29
|
-
const [availableLanguagesAndCountries, setAvailableLanguagesAndCountries] = useState<LanguageAndCountries[] | null>(null)
|
|
30
|
-
const [availableVersions, setAvailableVersions] = useState<SidebarAvailableVersionsInterface[] | null>(null)
|
|
31
32
|
const [loading, setLoading] = useState(true)
|
|
32
|
-
const [uiLang, setUiLang] = useState<string | null>(null)
|
|
33
33
|
const [packageID, setPackageID] = useState<string | null>(null)
|
|
34
|
+
const [articleLang, setArticleLang] = useState<string | null>(null)
|
|
34
35
|
const [contentLang, setContentLang] = useState<string | null>(null)
|
|
35
|
-
const [
|
|
36
|
+
const [availableVersions, setAvailableVersions] = useState<SidebarAvailableVersionsInterface[] | null>(null)
|
|
37
|
+
const [availableLanguagesAndCountries, setAvailableLanguagesAndCountries] = useState<LanguageAndCountries[] | null>(null)
|
|
36
38
|
|
|
37
39
|
const manageUILanguage = async (configs: ConfigInterface): Promise<void> => {
|
|
38
40
|
let locale = getFromCookieString(document.cookie, UI_LANG_KEY)
|
|
@@ -43,7 +45,7 @@ export const AppConfigProvider = ({ children }: { children: React.ReactNode }) =
|
|
|
43
45
|
? browserLang
|
|
44
46
|
: configs.languageSwitcher.default;
|
|
45
47
|
|
|
46
|
-
setCookie(UI_LANG_KEY, locale);
|
|
48
|
+
await setCookie(UI_LANG_KEY, locale);
|
|
47
49
|
}
|
|
48
50
|
setUiLang(locale)
|
|
49
51
|
}
|
|
@@ -58,7 +60,7 @@ export const AppConfigProvider = ({ children }: { children: React.ReactNode }) =
|
|
|
58
60
|
? browserLang
|
|
59
61
|
: configs.languageSwitcher.default;
|
|
60
62
|
|
|
61
|
-
setCookie(CONTENT_LANG_KEY, locale);
|
|
63
|
+
await setCookie(CONTENT_LANG_KEY, locale);
|
|
62
64
|
}
|
|
63
65
|
|
|
64
66
|
setContentLang(locale)
|
|
@@ -96,11 +98,19 @@ export const AppConfigProvider = ({ children }: { children: React.ReactNode }) =
|
|
|
96
98
|
|
|
97
99
|
await manageToken()
|
|
98
100
|
|
|
99
|
-
const configsResult = await
|
|
100
|
-
|
|
101
|
+
const [configsResult, langs] = await Promise.all([
|
|
102
|
+
getConfigs(),
|
|
103
|
+
call<LanguageAndCountries[]>("LanguageService.getLanguagesAndCountries")
|
|
104
|
+
])
|
|
101
105
|
|
|
102
|
-
|
|
103
|
-
|
|
106
|
+
if (!configsResult) {
|
|
107
|
+
throw new Error("Config cookie not available");
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
await Promise.all([
|
|
111
|
+
manageUILanguage(configsResult),
|
|
112
|
+
manageContentLanguage(configsResult, langs)
|
|
113
|
+
])
|
|
104
114
|
|
|
105
115
|
setAvailableLanguagesAndCountries(langs)
|
|
106
116
|
setConfigs(configsResult)
|
|
@@ -132,12 +142,13 @@ export const AppConfigProvider = ({ children }: { children: React.ReactNode }) =
|
|
|
132
142
|
error,
|
|
133
143
|
uiLang,
|
|
134
144
|
contentLang,
|
|
145
|
+
availableVersions,
|
|
146
|
+
packageID,
|
|
147
|
+
articleLang,
|
|
148
|
+
setArticleLang,
|
|
135
149
|
setUiLang,
|
|
136
150
|
setContentLang,
|
|
137
|
-
availableVersions,
|
|
138
151
|
setAvailableVersions,
|
|
139
|
-
setLoading,
|
|
140
|
-
packageID,
|
|
141
152
|
setPackageID
|
|
142
153
|
}}
|
|
143
154
|
>
|
package/src/search.tsx
CHANGED
|
@@ -1,52 +1,29 @@
|
|
|
1
|
-
|
|
1
|
+
"use client"
|
|
2
|
+
|
|
3
|
+
import { createContext, useContext, ReactNode, useState, useEffect, use } from "react";
|
|
4
|
+
import { Loading } from "@c-rex/components/loading";
|
|
2
5
|
|
|
3
6
|
type SearchContextProps = {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
selectLanguage: (language: string) => void;
|
|
7
|
-
getSelectedLanguages: () => string[];
|
|
8
|
-
setLanguages: (languages: string[]) => void;
|
|
7
|
+
loading: boolean;
|
|
8
|
+
setLoading: (loading: boolean) => void;
|
|
9
9
|
}
|
|
10
10
|
|
|
11
11
|
const SearchContext = createContext<SearchContextProps | undefined>(undefined);
|
|
12
12
|
|
|
13
13
|
export const SearchProvider = ({ children }: { children: ReactNode }) => {
|
|
14
|
-
const [
|
|
15
|
-
const [availableLanguages, setAvailableLanguages] = useState<string[]>([]);
|
|
16
|
-
|
|
17
|
-
const selectLanguage = (language: string) => {
|
|
18
|
-
if (selectedLanguage.includes(language)) {
|
|
19
|
-
setSelectedLanguage(selectedLanguage.filter(l => l !== language));
|
|
20
|
-
} else {
|
|
21
|
-
setSelectedLanguage([...selectedLanguage, language]);
|
|
22
|
-
}
|
|
23
|
-
};
|
|
24
|
-
const getSelectedLanguages = () => {
|
|
25
|
-
return selectedLanguage;
|
|
26
|
-
}
|
|
27
|
-
const setLanguages = (languages: string[]) => {
|
|
28
|
-
setAvailableLanguages(languages);
|
|
29
|
-
}
|
|
14
|
+
const [loading, setLoading] = useState<boolean>(true)
|
|
30
15
|
|
|
31
16
|
return (
|
|
32
|
-
<SearchContext.Provider value={{
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
getSelectedLanguages,
|
|
37
|
-
setLanguages
|
|
38
|
-
}}>
|
|
39
|
-
<>
|
|
40
|
-
{children}
|
|
41
|
-
</>
|
|
17
|
+
<SearchContext.Provider value={{ setLoading, loading }}>
|
|
18
|
+
{loading && <Loading opacity />}
|
|
19
|
+
|
|
20
|
+
{children}
|
|
42
21
|
</SearchContext.Provider>
|
|
43
22
|
);
|
|
44
23
|
};
|
|
45
24
|
|
|
46
25
|
export const useSearchContext = () => {
|
|
47
26
|
const context = useContext(SearchContext);
|
|
48
|
-
if (!context)
|
|
49
|
-
throw new Error("useSearchContext must be used within a SearchProvider");
|
|
50
|
-
}
|
|
27
|
+
if (!context) throw new Error("useSearchContext must be used within a SearchProvider");
|
|
51
28
|
return context;
|
|
52
29
|
};
|