@c-rex/contexts 0.1.6 → 0.1.8

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.6",
3
+ "version": "0.1.8",
4
4
  "type": "module",
5
5
  "files": [
6
6
  "src"
@@ -1,7 +1,7 @@
1
1
  "use client"
2
2
 
3
3
  import { CONTENT_LANG_KEY, CREX_TOKEN_HEADER_KEY, UI_LANG_KEY, UI_LANG_OPTIONS } from '@c-rex/constants'
4
- import { ConfigInterface, LanguageAndCountries, SidebarAvailableVersionsInterface } from '@c-rex/interfaces'
4
+ import { ConfigInterface, LanguageAndCountries, AvailableVersionsInterface } from '@c-rex/interfaces'
5
5
  import { call, getCookie, getFromCookieString, setCookie } from '@c-rex/utils'
6
6
  import { getConfigs } from '@c-rex/utils/next-cookies'
7
7
  import React, { createContext, useContext, useEffect, useState } from 'react'
@@ -14,12 +14,11 @@ type AppConfigContextType = {
14
14
  packageID: string | null
15
15
  contentLang: string | null
16
16
  articleLang: string | null
17
- availableVersions: SidebarAvailableVersionsInterface[] | null
17
+ availableVersions: AvailableVersionsInterface[] | null
18
18
  availableLanguagesAndCountries: LanguageAndCountries[]
19
19
  setUiLang: (lang: string | null) => void
20
20
  setContentLang: (lang: string | null) => void
21
- setAvailableVersions: (versions: SidebarAvailableVersionsInterface[] | null) => void
22
- setLoading: (loading: boolean) => void,
21
+ setAvailableVersions: (versions: AvailableVersionsInterface[] | null) => void
23
22
  setPackageID: (id: string | null) => void
24
23
  setArticleLang: (lang: string | null) => void
25
24
  }
@@ -34,7 +33,7 @@ export const AppConfigProvider = ({ children }: { children: React.ReactNode }) =
34
33
  const [packageID, setPackageID] = useState<string | null>(null)
35
34
  const [articleLang, setArticleLang] = useState<string | null>(null)
36
35
  const [contentLang, setContentLang] = useState<string | null>(null)
37
- const [availableVersions, setAvailableVersions] = useState<SidebarAvailableVersionsInterface[] | null>(null)
36
+ const [availableVersions, setAvailableVersions] = useState<AvailableVersionsInterface[] | null>(null)
38
37
  const [availableLanguagesAndCountries, setAvailableLanguagesAndCountries] = useState<LanguageAndCountries[] | null>(null)
39
38
 
40
39
  const manageUILanguage = async (configs: ConfigInterface): Promise<void> => {
@@ -46,7 +45,7 @@ export const AppConfigProvider = ({ children }: { children: React.ReactNode }) =
46
45
  ? browserLang
47
46
  : configs.languageSwitcher.default;
48
47
 
49
- setCookie(UI_LANG_KEY, locale);
48
+ await setCookie(UI_LANG_KEY, locale);
50
49
  }
51
50
  setUiLang(locale)
52
51
  }
@@ -61,7 +60,7 @@ export const AppConfigProvider = ({ children }: { children: React.ReactNode }) =
61
60
  ? browserLang
62
61
  : configs.languageSwitcher.default;
63
62
 
64
- setCookie(CONTENT_LANG_KEY, locale);
63
+ await setCookie(CONTENT_LANG_KEY, locale);
65
64
  }
66
65
 
67
66
  setContentLang(locale)
@@ -99,11 +98,19 @@ export const AppConfigProvider = ({ children }: { children: React.ReactNode }) =
99
98
 
100
99
  await manageToken()
101
100
 
102
- const configsResult = await getConfigs()
103
- const langs = await call<LanguageAndCountries[]>("LanguageService.getLanguagesAndCountries")
101
+ const [configsResult, langs] = await Promise.all([
102
+ getConfigs(),
103
+ call<LanguageAndCountries[]>("LanguageService.getLanguagesAndCountries")
104
+ ])
104
105
 
105
- await manageUILanguage(configsResult)
106
- 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
+ ])
107
114
 
108
115
  setAvailableLanguagesAndCountries(langs)
109
116
  setConfigs(configsResult)
@@ -142,7 +149,6 @@ export const AppConfigProvider = ({ children }: { children: React.ReactNode }) =
142
149
  setUiLang,
143
150
  setContentLang,
144
151
  setAvailableVersions,
145
- setLoading,
146
152
  setPackageID
147
153
  }}
148
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
  };