@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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@c-rex/contexts",
3
- "version": "0.1.5",
3
+ "version": "0.1.7",
4
4
  "type": "module",
5
5
  "files": [
6
6
  "src"
@@ -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
- packageID: string | null
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
- setLoading: (loading: boolean) => void,
22
- setPackageID: (lang: string | null) => void
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 [error, setError] = useState<Error | null>(null)
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 getConfigs()
100
- const langs = await call<LanguageAndCountries[]>("LanguageService.getLanguagesAndCountries")
101
+ const [configsResult, langs] = await Promise.all([
102
+ getConfigs(),
103
+ call<LanguageAndCountries[]>("LanguageService.getLanguagesAndCountries")
104
+ ])
101
105
 
102
- await manageUILanguage(configsResult)
103
- await manageContentLanguage(configsResult, langs)
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
- import { createContext, useContext, ReactNode, useState } from "react";
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
- selectedLanguage: string[];
5
- availableLanguages: string[];
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 [selectedLanguage, setSelectedLanguage] = useState<string[]>([]);
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
- selectedLanguage,
34
- availableLanguages,
35
- selectLanguage,
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
  };