@c-rex/contexts 0.1.12 → 0.1.14
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 +73 -41
- package/src/search.tsx +1 -1
package/package.json
CHANGED
package/src/config-provider.tsx
CHANGED
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
"use client"
|
|
2
2
|
|
|
3
|
-
import { CREX_TOKEN_HEADER_KEY, UI_LANG_OPTIONS } from '@c-rex/constants'
|
|
3
|
+
import { API, CREX_TOKEN_HEADER_KEY, SDK_CONFIG_KEY, UI_LANG_OPTIONS } from '@c-rex/constants'
|
|
4
4
|
import { CookiesConfigs, LanguageAndCountries, AvailableVersionsInterface } from '@c-rex/interfaces'
|
|
5
5
|
import { call } from '@c-rex/utils'
|
|
6
|
-
import { getClientConfigs } from '@c-rex/utils/next-cookies'
|
|
7
6
|
import React, { createContext, useContext, useEffect, useState } from 'react'
|
|
8
7
|
import { useLanguageStore } from '@c-rex/components/language-store'
|
|
9
8
|
|
|
@@ -29,54 +28,52 @@ export const AppConfigProvider = ({ children }: { children: React.ReactNode }) =
|
|
|
29
28
|
const [articleLang, setArticleLang] = useState<string | null>(null)
|
|
30
29
|
const [availableVersions, setAvailableVersions] = useState<AvailableVersionsInterface[] | null>(null)
|
|
31
30
|
|
|
32
|
-
|
|
33
|
-
const manageUILanguage = async (configs: CookiesConfigs): Promise<void> => {
|
|
31
|
+
const manageUILanguage = (configs: CookiesConfigs): void => {
|
|
34
32
|
const uiLang = useLanguageStore.getState().uiLang;
|
|
35
|
-
const setUiLang = useLanguageStore.getState().setUiLang;
|
|
36
|
-
let locale = uiLang
|
|
37
33
|
|
|
38
|
-
if (
|
|
34
|
+
if (uiLang.length === 0) {
|
|
35
|
+
const setUiLang = useLanguageStore.getState().setUiLang;
|
|
39
36
|
const browserLang = navigator.language;
|
|
40
37
|
|
|
41
|
-
locale = UI_LANG_OPTIONS.includes(browserLang.toLowerCase())
|
|
38
|
+
const locale = UI_LANG_OPTIONS.includes(browserLang.toLowerCase())
|
|
42
39
|
? browserLang
|
|
43
40
|
: configs.languageSwitcher.default;
|
|
41
|
+
|
|
42
|
+
setUiLang(locale)
|
|
44
43
|
}
|
|
45
|
-
setUiLang(locale)
|
|
46
44
|
}
|
|
47
45
|
|
|
48
|
-
const manageContentLanguage =
|
|
46
|
+
const manageContentLanguage = (configs: CookiesConfigs): void => {
|
|
49
47
|
const contentLang = useLanguageStore.getState().contentLang;
|
|
50
|
-
const setContentLang = useLanguageStore.getState().setContentLang;
|
|
51
|
-
const availableLanguages = useLanguageStore.getState().availableLanguages;
|
|
52
48
|
|
|
53
|
-
|
|
54
|
-
|
|
49
|
+
if (contentLang.length === 0) {
|
|
50
|
+
const setContentLang = useLanguageStore.getState().setContentLang;
|
|
51
|
+
const availableLanguages = useLanguageStore.getState().availableLanguages;
|
|
52
|
+
|
|
55
53
|
const browserLang = navigator.language;
|
|
56
54
|
const hasLang = availableLanguages.some((item) => item.value === browserLang);
|
|
57
55
|
|
|
58
|
-
locale = hasLang
|
|
56
|
+
const locale = hasLang
|
|
59
57
|
? browserLang
|
|
60
58
|
: configs.languageSwitcher.default;
|
|
61
|
-
}
|
|
62
59
|
|
|
63
|
-
|
|
60
|
+
setContentLang(locale)
|
|
61
|
+
}
|
|
64
62
|
}
|
|
65
63
|
|
|
66
|
-
const manageToken = async (
|
|
64
|
+
const manageToken = async (): Promise<void> => {
|
|
67
65
|
try {
|
|
68
|
-
const
|
|
69
|
-
const res = await fetch(`${url}/api/cookies?key=${CREX_TOKEN_HEADER_KEY}`);
|
|
66
|
+
const res = await fetch(`/api/cookies?key=${CREX_TOKEN_HEADER_KEY}`);
|
|
70
67
|
|
|
71
68
|
if (!res.ok) {
|
|
72
|
-
await requestToken(
|
|
69
|
+
await requestToken();
|
|
73
70
|
return
|
|
74
71
|
}
|
|
75
72
|
|
|
76
73
|
const hasToken = await res.json();
|
|
77
74
|
|
|
78
75
|
if (hasToken.value === null) {
|
|
79
|
-
await requestToken(
|
|
76
|
+
await requestToken();
|
|
80
77
|
}
|
|
81
78
|
} catch (error) {
|
|
82
79
|
call("CrexLogger.log", {
|
|
@@ -86,12 +83,16 @@ export const AppConfigProvider = ({ children }: { children: React.ReactNode }) =
|
|
|
86
83
|
}
|
|
87
84
|
}
|
|
88
85
|
|
|
89
|
-
const requestToken = async (
|
|
86
|
+
const requestToken = async (): Promise<void> => {
|
|
90
87
|
try {
|
|
91
|
-
await fetch(
|
|
88
|
+
const response = await fetch('/api/oidc/token', {
|
|
92
89
|
method: 'POST',
|
|
93
90
|
credentials: 'include',
|
|
94
91
|
});
|
|
92
|
+
|
|
93
|
+
const { token } = await response.json();
|
|
94
|
+
|
|
95
|
+
return token;
|
|
95
96
|
} catch (error) {
|
|
96
97
|
call("CrexLogger.log", {
|
|
97
98
|
level: "error",
|
|
@@ -100,18 +101,54 @@ export const AppConfigProvider = ({ children }: { children: React.ReactNode }) =
|
|
|
100
101
|
}
|
|
101
102
|
}
|
|
102
103
|
|
|
103
|
-
const
|
|
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) => {
|
|
104
119
|
while (true) {
|
|
105
120
|
await new Promise(resolve => setTimeout(resolve, delayMs));
|
|
106
|
-
await manageToken(
|
|
121
|
+
await manageToken();
|
|
107
122
|
}
|
|
108
123
|
}
|
|
109
124
|
|
|
110
125
|
const updateLanguages = async () => {
|
|
111
|
-
const
|
|
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
|
+
}
|
|
112
135
|
|
|
113
|
-
|
|
114
|
-
|
|
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;
|
|
115
152
|
}
|
|
116
153
|
|
|
117
154
|
useEffect(() => {
|
|
@@ -121,22 +158,17 @@ export const AppConfigProvider = ({ children }: { children: React.ReactNode }) =
|
|
|
121
158
|
try {
|
|
122
159
|
setLoading(true)
|
|
123
160
|
|
|
124
|
-
const configsResult = await
|
|
125
|
-
if (!configsResult) {
|
|
126
|
-
throw new Error("Config cookie not available");
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
await manageToken(configsResult)
|
|
161
|
+
const configsResult = await getClientConfig()
|
|
130
162
|
|
|
131
|
-
await
|
|
132
|
-
manageUILanguage(configsResult),
|
|
133
|
-
manageContentLanguage(configsResult),
|
|
134
|
-
updateLanguages()
|
|
135
|
-
])
|
|
163
|
+
await manageToken()
|
|
136
164
|
|
|
165
|
+
manageUILanguage(configsResult)
|
|
166
|
+
manageContentLanguage(configsResult)
|
|
167
|
+
updateLanguages()
|
|
168
|
+
updateIssuerMetadata()
|
|
137
169
|
setError(null)
|
|
138
170
|
setConfigs(configsResult)
|
|
139
|
-
interval(1000 * 60 * 9
|
|
171
|
+
interval(1000 * 60 * 9);
|
|
140
172
|
} catch (err) {
|
|
141
173
|
call("CrexLogger.log", {
|
|
142
174
|
level: "error",
|
package/src/search.tsx
CHANGED