ublo-lib 1.8.3 → 1.8.5

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.
@@ -10,11 +10,9 @@ const {
10
10
  plausibleDomain,
11
11
  disableClientRouting
12
12
  } = publicRuntimeConfig;
13
- console.log(publicRuntimeConfig);
14
13
  const DEFAULT_SOURCE = "https://plausible.io/js/script.file-downloads.outbound-links.js";
15
14
  const PlausibleScript = ({
16
15
  lang,
17
- domain,
18
16
  source = DEFAULT_SOURCE
19
17
  }) => {
20
18
  const [loaded, setLoaded] = React.useState(false);
@@ -23,7 +21,7 @@ const PlausibleScript = ({
23
21
  if (hasI18n && !lang) {
24
22
  console.warn("PlausibleScript: the lang props is mandatory if you want to use a specific domain for each lang");
25
23
  }
26
- const _domain = domain || hasI18n ? plausibleDomain[lang] : plausibleDomain;
24
+ const domain = hasI18n ? plausibleDomain[lang] : plausibleDomain;
27
25
  const sendPageView = React.useCallback(() => {
28
26
  window.plausible("pageview", {
29
27
  url: window.location.href,
@@ -44,7 +42,7 @@ const PlausibleScript = ({
44
42
  return null;
45
43
  }
46
44
  return _jsx(Script, {
47
- "data-domain": _domain,
45
+ "data-domain": domain,
48
46
  src: source,
49
47
  onLoad: () => setLoaded(true)
50
48
  });
@@ -2,7 +2,7 @@ import * as React from "react";
2
2
  import classnames from "classnames";
3
3
  import Detail from "./detail";
4
4
  import { useUbloContext } from "ublo/with-ublo";
5
- import { fetchMenus, fetchZones } from "ublo/fetcher";
5
+ import { fetchMenus } from "ublo/fetcher";
6
6
  import { jsx as _jsx } from "react/jsx-runtime";
7
7
  import { jsxs as _jsxs } from "react/jsx-runtime";
8
8
  const LEVELS = {
@@ -18,10 +18,16 @@ const LEVELS = {
18
18
  "bronze-star": "ALPETB",
19
19
  "silver-star": "ALPETA",
20
20
  "gold-star": "ALPETO",
21
- "1-ski": "ALPCL1",
22
- "1-degree": "ALPCL2",
23
- "2-degree": "ALPCL3",
24
- "3-degree": "ALPCL4",
21
+ "1-ski": "ALPDEB",
22
+ "1-degree": "ALPCL1",
23
+ "2-degree": "ALPCL2",
24
+ "3-degree": "ALPCL3",
25
+ chamois: "",
26
+ fleche: "",
27
+ fusee: "",
28
+ record: "",
29
+ "saut-bronze": "",
30
+ skiercross: "",
25
31
  "goomie-rider": "SNOGOO",
26
32
  "rookie-rider": "SNOROO",
27
33
  "izzy-rider": "SNOIZZ",
@@ -30,6 +36,9 @@ const LEVELS = {
30
36
  "2-snowboard": "SNOEN2",
31
37
  "3-snowboard": "SNOEN3",
32
38
  "snowboard-expert": "SNOEXP",
39
+ "x-boarder": "",
40
+ "ptit-freestyler": "",
41
+ "freestyler-inter": "",
33
42
  freestyler: "FREE",
34
43
  "freestyler-expert": "FREEXP",
35
44
  "freestyler-pro": "FREPRO",
@@ -44,28 +53,12 @@ const LEVELS = {
44
53
  "1-degree-nordic": "NORCL1",
45
54
  "2-degree-nordic": "NORCL2",
46
55
  "3-degree-nordic": "NORCL3",
47
- "biathlon-level": "BIAAR"
56
+ "biathlon-level": "BIAAR",
57
+ "nordic-cross": ""
48
58
  };
49
-
50
59
  const LevelDetail = ({
51
- code
60
+ detail
52
61
  }) => {
53
- const {
54
- lang
55
- } = useUbloContext();
56
- const [detail, setDetail] = React.useState();
57
- const levelLang = lang === "fr" ? lang : "en";
58
- React.useEffect(() => {
59
- if (code) {
60
- const getDetail = async () => {
61
- const endpoint = `https://services.msem.tech/api/esf-wiki/${levelLang}/niveau/${code}`;
62
- const result = await fetch(endpoint);
63
- const json = await result.json();
64
- setDetail(json);
65
- };
66
- getDetail();
67
- }
68
- }, [code, levelLang]);
69
62
  if (!detail) return null;
70
63
  return _jsx(Detail, {
71
64
  detail: detail
@@ -73,17 +66,16 @@ const LevelDetail = ({
73
66
  };
74
67
  const Level = ({
75
68
  level,
76
- contents,
77
- setSelectedLevel,
78
- selectedLevel,
69
+ content,
70
+ detail,
71
+ setDetail,
79
72
  levelRef
80
73
  }) => {
74
+ if (!content) return null;
81
75
  const {
82
76
  name,
83
77
  title
84
78
  } = level;
85
- const zoneId = `photo-${name}`;
86
- const content = contents[zoneId];
87
79
  const clicked = name => e => {
88
80
  if (levelRef.current) {
89
81
  levelRef.current.scrollIntoView({
@@ -92,18 +84,19 @@ const Level = ({
92
84
  inline: "center"
93
85
  });
94
86
  }
95
- setSelectedLevel(name);
87
+ setDetail(content);
96
88
  };
97
- const selected = name === selectedLevel;
89
+ const selected = name === detail?.code;
98
90
  const levelClasses = classnames("evaluate-level__level", {
99
91
  "evaluate-level__level--selected": selected
100
92
  });
101
- const hasContent = (name in LEVELS);
93
+ const hasContent = name in LEVELS && Boolean(LEVELS[name]);
102
94
  const styles = hasContent ? undefined : {
103
95
  pointerEvents: "none",
104
96
  touchAction: "none"
105
97
  };
106
98
  const onClick = hasContent ? clicked(name) : undefined;
99
+ const image = content.image ? `https://widget.msem.tech/images/esf/level/${content.image}` : "https://widget.msem.tech/images/esf/product/default.svg";
107
100
  return _jsxs("div", {
108
101
  className: levelClasses,
109
102
  style: styles,
@@ -111,23 +104,53 @@ const Level = ({
111
104
  children: [_jsx("h3", {
112
105
  className: "evaluate-level__level-title",
113
106
  children: title
114
- }), _jsx("div", {
115
- className: "evaluate-level__level-medal",
116
- dangerouslySetInnerHTML: {
117
- __html: content
118
- }
107
+ }), _jsx("img", {
108
+ src: image,
109
+ alt: title
119
110
  })]
120
111
  });
121
112
  };
122
113
  const Levels = ({
123
114
  levels,
124
- contents,
125
115
  selectedActivity,
126
116
  selectedAge,
127
- setSelectedLevel,
128
- selectedLevel,
117
+ detail,
118
+ setDetail,
129
119
  levelRef
130
120
  }) => {
121
+ const {
122
+ lang
123
+ } = useUbloContext();
124
+ const [ready, setReady] = React.useState(false);
125
+ const [contents, setContents] = React.useState({});
126
+ const levelLang = lang === "fr" ? lang : "en";
127
+ const getContents = React.useCallback(async () => {
128
+ const contents = levels.reduce(async (promiseAcc, level) => {
129
+ const acc = await promiseAcc;
130
+ const code = level.name in LEVELS && LEVELS[level.name];
131
+ if (code) {
132
+ const endpoint = `https://services.msem.tech/api/esf-wiki/${levelLang}/niveau/${code}`;
133
+ const result = await fetch(endpoint);
134
+ const json = await result.json();
135
+ return {
136
+ ...acc,
137
+ code,
138
+ [level.name]: json
139
+ };
140
+ }
141
+ return acc;
142
+ }, Promise.resolve({}));
143
+ return contents;
144
+ }, [levelLang, levels]);
145
+ React.useEffect(() => {
146
+ const runEffect = async () => {
147
+ const result = await getContents();
148
+ setContents(result);
149
+ setReady(true);
150
+ };
151
+ runEffect();
152
+ }, [getContents]);
153
+ if (!ready) return null;
131
154
  return _jsxs("div", {
132
155
  className: "evaluate-level__levels",
133
156
  children: [_jsxs("div", {
@@ -141,9 +164,9 @@ const Levels = ({
141
164
  children: levels.map(level => {
142
165
  return _jsx(Level, {
143
166
  level: level,
144
- contents: contents,
145
- setSelectedLevel: setSelectedLevel,
146
- selectedLevel: selectedLevel,
167
+ content: contents[level.name],
168
+ detail: detail,
169
+ setDetail: setDetail,
147
170
  levelRef: levelRef
148
171
  }, level.name);
149
172
  })
@@ -232,10 +255,9 @@ const EvaluateLevel = ({
232
255
  const levelRef = React.useRef(null);
233
256
  const [activities, setActivities] = React.useState([]);
234
257
  const [levels, setLevels] = React.useState([]);
235
- const [contents, setContents] = React.useState({});
258
+ const [detail, setDetail] = React.useState();
236
259
  const [selectedActivity, setSelectedActivity] = React.useState({});
237
260
  const [selectedAge, setSelectedAge] = React.useState({});
238
- const [selectedLevel, setSelectedLevel] = React.useState();
239
261
  const activityChanged = activity => {
240
262
  const {
241
263
  name
@@ -244,12 +266,12 @@ const EvaluateLevel = ({
244
266
  setSelectedActivity(activity);
245
267
  setSelectedAge(isFreestyle ? activity : {});
246
268
  setLevels([]);
247
- setSelectedLevel();
269
+ setDetail(undefined);
248
270
  };
249
271
  const ageChanged = age => {
250
272
  setSelectedAge(age);
251
273
  setLevels([]);
252
- setSelectedLevel();
274
+ setDetail(undefined);
253
275
  };
254
276
  React.useEffect(() => {
255
277
  const activitiesLoaded = activities.length > 0;
@@ -286,14 +308,12 @@ const EvaluateLevel = ({
286
308
  } = selectedAge;
287
309
  if (menu !== undefined) {
288
310
  const getLevels = async () => {
289
- const [levels, contents] = await Promise.all([fetchMenus(ubloApi, site, lang, menu), fetchZones(ubloApi, site, lang, menu)]);
311
+ const levels = await fetchMenus(ubloApi, site, lang, menu);
290
312
  setLevels(levels);
291
- setContents(contents);
292
313
  };
293
314
  getLevels();
294
315
  }
295
316
  }, [lang, selectedAge, site, ubloApi]);
296
- const selectedLevelCode = LEVELS[selectedLevel];
297
317
  return _jsxs("div", {
298
318
  className: "evaluate-level",
299
319
  children: [!menu && _jsx(Activities, {
@@ -304,14 +324,13 @@ const EvaluateLevel = ({
304
324
  ageChanged: ageChanged
305
325
  }), selectedAge.path && _jsx(Levels, {
306
326
  levels: levels,
307
- contents: contents,
308
327
  selectedActivity: selectedActivity,
309
328
  selectedAge: selectedAge,
310
- setSelectedLevel: setSelectedLevel,
311
- selectedLevel: selectedLevel,
329
+ detail: detail,
330
+ setDetail: setDetail,
312
331
  levelRef: levelRef
313
- }), selectedLevel && _jsx(LevelDetail, {
314
- code: selectedLevelCode
332
+ }), detail && _jsx(LevelDetail, {
333
+ detail: detail
315
334
  })]
316
335
  });
317
336
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ublo-lib",
3
- "version": "1.8.3",
3
+ "version": "1.8.5",
4
4
  "peerDependencies": {
5
5
  "dt-design-system": "^2.1.0",
6
6
  "next": "^12.0.0 || ^13.0.0",