@c-rex/contexts 0.1.12 → 0.1.13

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.12",
3
+ "version": "0.1.13",
4
4
  "type": "module",
5
5
  "files": [
6
6
  "src"
@@ -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 (locale.length === 0) {
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 = async (configs: CookiesConfigs): Promise<void> => {
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
- let locale = contentLang
54
- if (locale.length === 0) {
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
- setContentLang(locale)
60
+ setContentLang(locale)
61
+ }
64
62
  }
65
63
 
66
- const manageToken = async (configs: CookiesConfigs): Promise<void> => {
64
+ const manageToken = async (): Promise<void> => {
67
65
  try {
68
- const url = configs.publicNextApiUrl
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(configs);
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(configs);
76
+ await requestToken();
80
77
  }
81
78
  } catch (error) {
82
79
  call("CrexLogger.log", {
@@ -86,32 +83,60 @@ export const AppConfigProvider = ({ children }: { children: React.ReactNode }) =
86
83
  }
87
84
  }
88
85
 
89
- const requestToken = async (configs: CookiesConfigs): Promise<void> => {
86
+ const requestToken = async (): Promise<void> => {
90
87
  try {
91
- await fetch(`${configs.publicNextApiUrl}/api/token`, {
88
+ const response = await fetch(`/api/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",
98
99
  message: `config-provider.requestToken error: ${error}`
99
100
  });
101
+
102
+ await new Promise(resolve => setTimeout(resolve, API.RETRY_DELAY));
100
103
  }
101
104
  }
102
105
 
103
- const interval = async (delayMs: number, configs: CookiesConfigs) => {
106
+ const interval = async (delayMs: number) => {
104
107
  while (true) {
105
108
  await new Promise(resolve => setTimeout(resolve, delayMs));
106
- await manageToken(configs);
109
+ await manageToken();
107
110
  }
108
111
  }
109
112
 
110
113
  const updateLanguages = async () => {
111
- const setAvailableLanguages = useLanguageStore.getState().setAvailableLanguages;
114
+ const availableLanguages = useLanguageStore.getState().availableLanguages;
115
+
116
+ if (availableLanguages.length === 0) {
117
+ const setAvailableLanguages = useLanguageStore.getState().setAvailableLanguages;
112
118
 
113
- const langs = await call<LanguageAndCountries[]>("LanguageService.getLanguagesAndCountries")
114
- setAvailableLanguages(langs)
119
+ const langs = await call<LanguageAndCountries[]>("LanguageService.getLanguagesAndCountries")
120
+ setAvailableLanguages(langs)
121
+ }
122
+ }
123
+
124
+ const getClientConfig = async (): Promise<CookiesConfigs> => {
125
+ const res = await fetch(`/api/cookies?key=${SDK_CONFIG_KEY}`);
126
+
127
+ if (!res.ok) {
128
+ throw new Error('Failed to fetch token from cookies API');
129
+ }
130
+
131
+ const jsonConfig = await res.json();
132
+
133
+ if (jsonConfig.value === null) {
134
+ throw new Error('Client config not found in cookies');
135
+ }
136
+
137
+ const configs: CookiesConfigs = JSON.parse(jsonConfig.value);
138
+
139
+ return configs;
115
140
  }
116
141
 
117
142
  useEffect(() => {
@@ -121,22 +146,16 @@ export const AppConfigProvider = ({ children }: { children: React.ReactNode }) =
121
146
  try {
122
147
  setLoading(true)
123
148
 
124
- const configsResult = await getClientConfigs()
125
- if (!configsResult) {
126
- throw new Error("Config cookie not available");
127
- }
128
-
129
- await manageToken(configsResult)
149
+ const configsResult = await getClientConfig()
130
150
 
131
- await Promise.all([
132
- manageUILanguage(configsResult),
133
- manageContentLanguage(configsResult),
134
- updateLanguages()
135
- ])
151
+ await manageToken()
136
152
 
153
+ manageUILanguage(configsResult)
154
+ manageContentLanguage(configsResult)
155
+ updateLanguages()
137
156
  setError(null)
138
157
  setConfigs(configsResult)
139
- interval(1000 * 60 * 9, configsResult);
158
+ interval(1000 * 60 * 9);
140
159
  } catch (err) {
141
160
  call("CrexLogger.log", {
142
161
  level: "error",
package/src/search.tsx CHANGED
@@ -1,6 +1,6 @@
1
1
  "use client"
2
2
 
3
- import { createContext, useContext, ReactNode, useState, useEffect, use } from "react";
3
+ import { createContext, useContext, ReactNode, useState } from "react";
4
4
  import { Loading } from "@c-rex/components/loading";
5
5
 
6
6
  type SearchContextProps = {