@c-rex/contexts 0.1.15 → 0.1.16

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.15",
3
+ "version": "0.1.16",
4
4
  "type": "module",
5
5
  "files": [
6
6
  "src"
@@ -1,8 +1,9 @@
1
1
  "use client"
2
2
 
3
- import { API, CREX_TOKEN_HEADER_KEY, SDK_CONFIG_KEY, UI_LANG_OPTIONS } from '@c-rex/constants'
3
+ import { UI_LANG_KEY, CONTENT_LANG_KEY, AVAILABLE_CONTENT_LANG_KEY, CREX_TOKEN_HEADER_KEY } from '@c-rex/constants'
4
4
  import { CookiesConfigs, LanguageAndCountries, AvailableVersionsInterface } from '@c-rex/interfaces'
5
5
  import { call } from '@c-rex/utils'
6
+ import { setCookie } from '@c-rex/utils/cookies'
6
7
  import React, { createContext, useContext, useEffect, useState } from 'react'
7
8
  import { useLanguageStore } from '@c-rex/components/language-store'
8
9
 
@@ -19,48 +20,28 @@ type AppConfigContextType = {
19
20
  }
20
21
 
21
22
  const AppConfigContext = createContext<AppConfigContextType | undefined>(undefined)
23
+ type AppConfigProviderProps = {
24
+ children: React.ReactNode
25
+ uiLang: string
26
+ contentLang: string
27
+ availableLanguages: LanguageAndCountries[]
28
+ initialConfig: CookiesConfigs
29
+ }
30
+
31
+ export const AppConfigProvider = ({
32
+ children,
33
+ uiLang,
34
+ contentLang,
35
+ availableLanguages,
36
+ initialConfig
37
+ }: AppConfigProviderProps) => {
22
38
 
23
- export const AppConfigProvider = ({ children }: { children: React.ReactNode }) => {
24
39
  const [error, setError] = useState<Error | null>(null)
25
- const [configs, setConfigs] = useState<CookiesConfigs | null>(null)
26
40
  const [loading, setLoading] = useState(true)
27
41
  const [packageID, setPackageID] = useState<string | null>(null)
28
42
  const [articleLang, setArticleLang] = useState<string | null>(null)
29
43
  const [availableVersions, setAvailableVersions] = useState<AvailableVersionsInterface[] | null>(null)
30
44
 
31
- const manageUILanguage = (configs: CookiesConfigs): void => {
32
- const uiLang = useLanguageStore.getState().uiLang;
33
-
34
- if (uiLang.length === 0) {
35
- const setUiLang = useLanguageStore.getState().setUiLang;
36
- const browserLang = navigator.language;
37
-
38
- const locale = UI_LANG_OPTIONS.includes(browserLang.toLowerCase())
39
- ? browserLang
40
- : configs.languageSwitcher.default;
41
-
42
- setUiLang(locale)
43
- }
44
- }
45
-
46
- const manageContentLanguage = (configs: CookiesConfigs): void => {
47
- const contentLang = useLanguageStore.getState().contentLang;
48
-
49
- if (contentLang.length === 0) {
50
- const setContentLang = useLanguageStore.getState().setContentLang;
51
- const availableLanguages = useLanguageStore.getState().availableLanguages;
52
-
53
- const browserLang = navigator.language;
54
- const hasLang = availableLanguages.some((item) => item.value === browserLang);
55
-
56
- const locale = hasLang
57
- ? browserLang
58
- : configs.languageSwitcher.default;
59
-
60
- setContentLang(locale)
61
- }
62
- }
63
-
64
45
  const manageToken = async (): Promise<void> => {
65
46
  try {
66
47
  const res = await fetch(`/api/cookies?key=${CREX_TOKEN_HEADER_KEY}`);
@@ -85,14 +66,10 @@ export const AppConfigProvider = ({ children }: { children: React.ReactNode }) =
85
66
 
86
67
  const requestToken = async (): Promise<void> => {
87
68
  try {
88
- const response = await fetch('/api/oidc/token', {
69
+ await fetch('/api/oidc/token', {
89
70
  method: 'POST',
90
71
  credentials: 'include',
91
72
  });
92
-
93
- const { token } = await response.json();
94
-
95
- return token;
96
73
  } catch (error) {
97
74
  call("CrexLogger.log", {
98
75
  level: "error",
@@ -101,74 +78,20 @@ export const AppConfigProvider = ({ children }: { children: React.ReactNode }) =
101
78
  }
102
79
  }
103
80
 
104
- const updateIssuerMetadata = async (): Promise<void> => {
105
- try {
106
- await fetch('/api/oidc/issuer', {
107
- method: 'POST',
108
- credentials: 'include',
109
- });
110
- } catch (error) {
111
- call("CrexLogger.log", {
112
- level: "error",
113
- message: `config-provider.updateIssuerMetadata error: ${error}`
114
- });
115
- }
116
- }
117
-
118
- const interval = async (delayMs: number) => {
119
- while (true) {
120
- await new Promise(resolve => setTimeout(resolve, delayMs));
121
- await manageToken();
122
- }
123
- }
124
-
125
- const updateLanguages = async () => {
126
- const availableLanguages = useLanguageStore.getState().availableLanguages;
127
-
128
- if (availableLanguages.length === 0) {
129
- const setAvailableLanguages = useLanguageStore.getState().setAvailableLanguages;
130
-
131
- const langs = await call<LanguageAndCountries[]>("LanguageService.getLanguagesAndCountries")
132
- setAvailableLanguages(langs)
133
- }
134
- }
135
-
136
- const getClientConfig = async (): Promise<CookiesConfigs> => {
137
- const res = await fetch(`/api/cookies?key=${SDK_CONFIG_KEY}`);
138
-
139
- if (!res.ok) {
140
- throw new Error('Failed to fetch token from cookies API');
141
- }
142
-
143
- const jsonConfig = await res.json();
144
-
145
- if (jsonConfig.value === null) {
146
- throw new Error('Client config not found in cookies');
147
- }
148
-
149
- const configs: CookiesConfigs = JSON.parse(jsonConfig.value);
150
-
151
- return configs;
152
- }
153
-
154
81
  useEffect(() => {
155
- useLanguageStore.getState().hydrate();
82
+ useLanguageStore.getState().setUiLang(uiLang)
83
+ useLanguageStore.getState().setContentLang(contentLang)
84
+ useLanguageStore.getState().setAvailableLanguages(availableLanguages)
85
+
86
+ setCookie(UI_LANG_KEY, uiLang);
87
+ setCookie(CONTENT_LANG_KEY, contentLang);
88
+ setCookie(AVAILABLE_CONTENT_LANG_KEY, JSON.stringify(availableLanguages));
156
89
 
157
90
  const load = async () => {
158
91
  try {
159
92
  setLoading(true)
160
-
161
- const configsResult = await getClientConfig()
162
-
163
93
  await manageToken()
164
-
165
- manageUILanguage(configsResult)
166
- manageContentLanguage(configsResult)
167
- updateLanguages()
168
- updateIssuerMetadata()
169
94
  setError(null)
170
- setConfigs(configsResult)
171
- interval(1000 * 60 * 9);
172
95
  } catch (err) {
173
96
  call("CrexLogger.log", {
174
97
  level: "error",
@@ -192,7 +115,7 @@ export const AppConfigProvider = ({ children }: { children: React.ReactNode }) =
192
115
  return (
193
116
  <AppConfigContext.Provider
194
117
  value={{
195
- configs: configs!,
118
+ configs: initialConfig,
196
119
  loading,
197
120
  error,
198
121
  availableVersions,