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
|
|
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":
|
|
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
|
|
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": "
|
|
22
|
-
"1-degree": "
|
|
23
|
-
"2-degree": "
|
|
24
|
-
"3-degree": "
|
|
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
|
-
|
|
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
|
-
|
|
77
|
-
|
|
78
|
-
|
|
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
|
-
|
|
87
|
+
setDetail(content);
|
|
96
88
|
};
|
|
97
|
-
const selected = name ===
|
|
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 =
|
|
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("
|
|
115
|
-
|
|
116
|
-
|
|
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
|
-
|
|
128
|
-
|
|
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
|
-
|
|
145
|
-
|
|
146
|
-
|
|
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 [
|
|
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
|
-
|
|
269
|
+
setDetail(undefined);
|
|
248
270
|
};
|
|
249
271
|
const ageChanged = age => {
|
|
250
272
|
setSelectedAge(age);
|
|
251
273
|
setLevels([]);
|
|
252
|
-
|
|
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
|
|
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
|
-
|
|
311
|
-
|
|
329
|
+
detail: detail,
|
|
330
|
+
setDetail: setDetail,
|
|
312
331
|
levelRef: levelRef
|
|
313
|
-
}),
|
|
314
|
-
|
|
332
|
+
}), detail && _jsx(LevelDetail, {
|
|
333
|
+
detail: detail
|
|
315
334
|
})]
|
|
316
335
|
});
|
|
317
336
|
};
|