ublo-lib 1.37.19 → 1.38.0
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/es/common/components/cart-dialog/cart-dialog-inner.module.css +3 -3
- package/es/common/utils/url-parameters.d.ts +1 -0
- package/es/common/utils/url-parameters.d.ts.map +1 -1
- package/es/common/utils/url-parameters.js +13 -0
- package/es/esf/components/period-picker/period-picker.d.ts.map +1 -1
- package/es/esf/components/period-picker/period-picker.js +0 -5
- package/es/future/components/msem-preset-editor/components/facet-selector.d.ts +6 -0
- package/es/future/components/msem-preset-editor/components/facet-selector.d.ts.map +1 -0
- package/es/future/components/msem-preset-editor/components/facet-selector.js +23 -0
- package/es/future/components/msem-preset-editor/components/form.d.ts +8 -0
- package/es/future/components/msem-preset-editor/components/form.d.ts.map +1 -0
- package/es/future/components/msem-preset-editor/components/form.js +9 -0
- package/es/future/components/msem-preset-editor/components/form.module.css +39 -0
- package/es/future/components/msem-preset-editor/components/resort-selector.d.ts +6 -0
- package/es/future/components/msem-preset-editor/components/resort-selector.d.ts.map +1 -0
- package/es/future/components/msem-preset-editor/components/resort-selector.js +8 -0
- package/es/future/components/msem-preset-editor/components/stay-picker.d.ts +14 -0
- package/es/future/components/msem-preset-editor/components/stay-picker.d.ts.map +1 -0
- package/es/future/components/msem-preset-editor/components/stay-picker.js +35 -0
- package/es/future/components/msem-preset-editor/components/stay-picker.module.css +5 -0
- package/es/future/components/msem-preset-editor/components/widget-list-item.d.ts +12 -0
- package/es/future/components/msem-preset-editor/components/widget-list-item.d.ts.map +1 -0
- package/es/future/components/msem-preset-editor/components/widget-list-item.js +55 -0
- package/es/future/components/msem-preset-editor/components/widget-list-item.module.css +115 -0
- package/es/future/components/msem-preset-editor/components/widget-list.d.ts +18 -0
- package/es/future/components/msem-preset-editor/components/widget-list.d.ts.map +1 -0
- package/es/future/components/msem-preset-editor/components/widget-list.js +34 -0
- package/es/future/components/msem-preset-editor/components/widget-list.module.css +21 -0
- package/es/future/components/msem-preset-editor/editor-dialog.d.ts +22 -0
- package/es/future/components/msem-preset-editor/editor-dialog.d.ts.map +1 -0
- package/es/future/components/msem-preset-editor/editor-dialog.js +25 -0
- package/es/future/components/msem-preset-editor/editor-dialog.module.css +31 -0
- package/es/future/components/msem-preset-editor/editors/elloha.d.ts +16 -0
- package/es/future/components/msem-preset-editor/editors/elloha.d.ts.map +1 -0
- package/es/future/components/msem-preset-editor/editors/elloha.js +79 -0
- package/es/future/components/msem-preset-editor/editors/elloha.module.css +14 -0
- package/es/future/components/msem-preset-editor/editors/index.d.ts +16 -0
- package/es/future/components/msem-preset-editor/editors/index.d.ts.map +1 -0
- package/es/future/components/msem-preset-editor/editors/index.js +15 -0
- package/es/future/components/msem-preset-editor/editors/lodgings.d.ts +17 -0
- package/es/future/components/msem-preset-editor/editors/lodgings.d.ts.map +1 -0
- package/es/future/components/msem-preset-editor/editors/lodgings.js +180 -0
- package/es/future/components/msem-preset-editor/editors/lodgings.module.css +21 -0
- package/es/future/components/msem-preset-editor/editors/ski-passes-jb.d.ts +17 -0
- package/es/future/components/msem-preset-editor/editors/ski-passes-jb.d.ts.map +1 -0
- package/es/future/components/msem-preset-editor/editors/ski-passes-jb.js +85 -0
- package/es/future/components/msem-preset-editor/editors/ski-passes.d.ts +17 -0
- package/es/future/components/msem-preset-editor/editors/ski-passes.d.ts.map +1 -0
- package/es/future/components/msem-preset-editor/editors/ski-passes.js +198 -0
- package/es/future/components/msem-preset-editor/editors/ski-passes.module.css +25 -0
- package/es/future/components/msem-preset-editor/editors/standard-products.d.ts +17 -0
- package/es/future/components/msem-preset-editor/editors/standard-products.d.ts.map +1 -0
- package/es/future/components/msem-preset-editor/editors/standard-products.js +65 -0
- package/es/future/components/msem-preset-editor/editors/vakario.d.ts +16 -0
- package/es/future/components/msem-preset-editor/editors/vakario.d.ts.map +1 -0
- package/es/future/components/msem-preset-editor/editors/vakario.js +186 -0
- package/es/future/components/msem-preset-editor/index.d.ts +3 -0
- package/es/future/components/msem-preset-editor/index.d.ts.map +1 -0
- package/es/future/components/msem-preset-editor/index.js +2 -0
- package/es/future/components/msem-preset-editor/msem-preset-editor.d.ts +21 -0
- package/es/future/components/msem-preset-editor/msem-preset-editor.d.ts.map +1 -0
- package/es/future/components/msem-preset-editor/msem-preset-editor.js +125 -0
- package/es/future/components/msem-preset-editor/msem-preset-editor.module.css +38 -0
- package/es/future/components/msem-preset-editor/services/api.d.ts +15 -0
- package/es/future/components/msem-preset-editor/services/api.d.ts.map +1 -0
- package/es/future/components/msem-preset-editor/services/api.js +68 -0
- package/es/future/components/msem-preset-editor/services/offers.d.ts +23 -0
- package/es/future/components/msem-preset-editor/services/offers.d.ts.map +1 -0
- package/es/future/components/msem-preset-editor/services/offers.js +50 -0
- package/es/future/components/msem-preset-editor/services/preset.d.ts +32 -0
- package/es/future/components/msem-preset-editor/services/preset.d.ts.map +1 -0
- package/es/future/components/msem-preset-editor/services/preset.js +19 -0
- package/es/future/components/msem-preset-editor/services/url-params.d.ts +3 -0
- package/es/future/components/msem-preset-editor/services/url-params.d.ts.map +1 -0
- package/es/future/components/msem-preset-editor/services/url-params.js +26 -0
- package/es/future/components/msem-preset-linker/index.d.ts +3 -0
- package/es/future/components/msem-preset-linker/index.d.ts.map +1 -0
- package/es/future/components/msem-preset-linker/index.js +2 -0
- package/es/future/components/msem-preset-linker/msem-preset-linker.d.ts +19 -0
- package/es/future/components/msem-preset-linker/msem-preset-linker.d.ts.map +1 -0
- package/es/future/components/msem-preset-linker/msem-preset-linker.js +17 -0
- package/es/future/components/msem-preset-linker/services/url-params.d.ts +2 -0
- package/es/future/components/msem-preset-linker/services/url-params.d.ts.map +1 -0
- package/es/future/components/msem-preset-linker/services/url-params.js +13 -0
- package/es/future/hooks/use-msem-presets.d.ts +4 -0
- package/es/future/hooks/use-msem-presets.d.ts.map +1 -0
- package/es/future/hooks/use-msem-presets.js +37 -0
- package/es/future/utils/fetcher.d.ts +5 -0
- package/es/future/utils/fetcher.d.ts.map +1 -0
- package/es/future/utils/fetcher.js +49 -0
- package/es/future/utils/url-parameters.d.ts +3 -0
- package/es/future/utils/url-parameters.d.ts.map +1 -0
- package/es/future/utils/url-parameters.js +21 -0
- package/package.json +1 -1
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import * as React from "react";
|
|
3
|
+
import classNames from "classnames";
|
|
4
|
+
import Button from "dt-design-system/es/button";
|
|
5
|
+
import Dialog from "dt-design-system/es/dialog";
|
|
6
|
+
import Input from "dt-design-system/es/input";
|
|
7
|
+
import Tooltip from "dt-design-system/es/tooltip";
|
|
8
|
+
import * as Icons from "dt-design-system/es/icons";
|
|
9
|
+
import * as MseM from "../../components/msem";
|
|
10
|
+
import ResortSelector from "./components/resort-selector";
|
|
11
|
+
import FacetSelector from "./components/facet-selector";
|
|
12
|
+
import StayPicker from "./components/stay-picker";
|
|
13
|
+
import WidgetList from "./components/widget-list";
|
|
14
|
+
import Editors from "./editors";
|
|
15
|
+
import * as UrlParams from "./services/url-params";
|
|
16
|
+
import * as Preset from "./services/preset";
|
|
17
|
+
import css from "./msem-preset-editor.module.css";
|
|
18
|
+
export default function MseMPresetEditor({ lang, msemServicesUrl, options, urlOverride, resorts, selectedPreset, onChange, }) {
|
|
19
|
+
const currentPreset = selectedPreset ? JSON.parse(selectedPreset) : undefined;
|
|
20
|
+
const defaultResort = Number(currentPreset ? currentPreset.options.resort : options.resort);
|
|
21
|
+
const [facet, setFacet] = React.useState(currentPreset?.options?.facet?.toString() || "");
|
|
22
|
+
const [stay, setStay] = React.useState(currentPreset?.presets?.stay || { from: "", to: "" });
|
|
23
|
+
const [preset, setPreset] = React.useState(currentPreset || null);
|
|
24
|
+
const [error, setError] = React.useState(null);
|
|
25
|
+
const [showPresetDialog, setShowPresetDialog] = React.useState(false);
|
|
26
|
+
const [presetUrl, setPresetUrl] = React.useState("");
|
|
27
|
+
const [resort, setResort] = React.useState(defaultResort);
|
|
28
|
+
const initialRender = React.useRef(true);
|
|
29
|
+
const showWidgetList = resort && facet !== "";
|
|
30
|
+
const updatePreset = React.useCallback((item, subPreset) => {
|
|
31
|
+
let { name, options: itemOptions, presets: itemPresets } = item;
|
|
32
|
+
const widget = subPreset?.widget || item.widget;
|
|
33
|
+
if (!widget) {
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
if (subPreset) {
|
|
37
|
+
const formattedSubPreset = Preset.format(subPreset);
|
|
38
|
+
name = subPreset.name;
|
|
39
|
+
itemOptions = formattedSubPreset.options;
|
|
40
|
+
itemPresets = formattedSubPreset.presets;
|
|
41
|
+
}
|
|
42
|
+
if (stay?.from && stay?.to) {
|
|
43
|
+
itemPresets = { ...itemPresets, stay };
|
|
44
|
+
}
|
|
45
|
+
const allOptions = {
|
|
46
|
+
facet: Number(facet),
|
|
47
|
+
...itemOptions,
|
|
48
|
+
...options,
|
|
49
|
+
resort,
|
|
50
|
+
};
|
|
51
|
+
const newPreset = {
|
|
52
|
+
name,
|
|
53
|
+
widget,
|
|
54
|
+
options: allOptions,
|
|
55
|
+
presets: itemPresets,
|
|
56
|
+
url: urlOverride || undefined,
|
|
57
|
+
};
|
|
58
|
+
onChange?.(newPreset);
|
|
59
|
+
setPreset(newPreset);
|
|
60
|
+
}, [facet, onChange, options, resort, stay, urlOverride]);
|
|
61
|
+
const removePreset = React.useCallback(() => {
|
|
62
|
+
onChange?.(null);
|
|
63
|
+
setPreset(null);
|
|
64
|
+
}, [onChange]);
|
|
65
|
+
const testPreset = () => {
|
|
66
|
+
if (!preset)
|
|
67
|
+
return;
|
|
68
|
+
const storageKeysToRemove = [
|
|
69
|
+
"msem-material-rental-state",
|
|
70
|
+
"msem-lift-jb-state",
|
|
71
|
+
];
|
|
72
|
+
storageKeysToRemove.forEach((key) => {
|
|
73
|
+
window.sessionStorage.removeItem(key);
|
|
74
|
+
});
|
|
75
|
+
const { widget, options, presets } = preset;
|
|
76
|
+
MseM.loadWidget(widget, options, presets);
|
|
77
|
+
};
|
|
78
|
+
const copyUrl = (e) => {
|
|
79
|
+
e.preventDefault();
|
|
80
|
+
const field = e.target;
|
|
81
|
+
const url = field.value;
|
|
82
|
+
field.select();
|
|
83
|
+
navigator.clipboard.writeText(url);
|
|
84
|
+
window.ubloSnackbar("URL copiée dans le presse papier", "success");
|
|
85
|
+
};
|
|
86
|
+
React.useEffect(() => {
|
|
87
|
+
if (stay?.from && stay?.to) {
|
|
88
|
+
setPreset((current = {}) => {
|
|
89
|
+
const newPreset = {
|
|
90
|
+
...current,
|
|
91
|
+
presets: { ...(current?.presets || {}), stay },
|
|
92
|
+
};
|
|
93
|
+
onChange?.(newPreset);
|
|
94
|
+
return newPreset;
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
}, [onChange, stay]);
|
|
98
|
+
React.useEffect(() => {
|
|
99
|
+
if (preset && urlOverride) {
|
|
100
|
+
const url = UrlParams.getPresetUrl(lang, preset, urlOverride);
|
|
101
|
+
setPresetUrl(url);
|
|
102
|
+
}
|
|
103
|
+
else {
|
|
104
|
+
setPresetUrl("");
|
|
105
|
+
}
|
|
106
|
+
}, [lang, preset, urlOverride]);
|
|
107
|
+
React.useEffect(() => {
|
|
108
|
+
if (initialRender.current) {
|
|
109
|
+
initialRender.current = false;
|
|
110
|
+
}
|
|
111
|
+
else {
|
|
112
|
+
removePreset();
|
|
113
|
+
}
|
|
114
|
+
}, [removePreset, resort]);
|
|
115
|
+
if (!resort)
|
|
116
|
+
return null;
|
|
117
|
+
const CurrentEditor = preset?.widget && Editors[preset.widget];
|
|
118
|
+
const showPresetUrl = Boolean(preset?.widget && presetUrl !== "");
|
|
119
|
+
const footerClasses = classNames(css.footer, {
|
|
120
|
+
[css.footerButtonOnly]: !showPresetUrl,
|
|
121
|
+
});
|
|
122
|
+
return (_jsxs("div", { className: css.editor, children: [resorts && (_jsx(ResortSelector, { resorts: resorts, resort: resort, setResort: setResort })), _jsx(FacetSelector, { facet: facet, setFacet: setFacet, setPreset: setPreset }), _jsx(StayPicker, { stay: stay, setStay: setStay, setPreset: setPreset }), showWidgetList && (_jsx(WidgetList, { lang: lang, msemServicesUrl: msemServicesUrl, resort: resort, channel: options.channel, facet: facet, preset: preset, updatePreset: updatePreset, removePreset: removePreset, error: error, setError: setError, setShowPresetDialog: setShowPresetDialog })), _jsx(Dialog, { isOpened: showPresetDialog, close: () => setShowPresetDialog(false), container: null, showAsModal: false, children: showPresetDialog && (_jsx(CurrentEditor, { stay: stay, facet: facet, preset: preset, setPreset: setPreset, setShowPresetDialog: setShowPresetDialog, testPreset: testPreset, onChange: onChange, urlOverride: urlOverride })) }), error && _jsx("div", { className: css.error, children: error }), _jsxs("div", { className: footerClasses, children: [showPresetUrl ? (_jsx(Tooltip, { content: "Tester dans le widget MseM", children: _jsx(Button, { variant: "secondary", disabled: !preset?.widget, className: css.testButton, onClick: testPreset, children: _jsx(Icons.OpenInBrowser, {}) }) })) : (_jsxs(Button, { variant: "secondary", disabled: !preset?.widget, className: css.testButton, onClick: testPreset, children: [_jsx(Icons.OpenInBrowser, {}), "Tester dans le widget MseM"] })), showPresetUrl && (_jsx(Input, { type: "text", className: css.url, value: presetUrl, onClick: copyUrl, placeholder: !preset
|
|
123
|
+
? "Aucun preset sélectionné"
|
|
124
|
+
: "Preset incompatible au format URL", readOnly: true }))] })] }));
|
|
125
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
.editor {
|
|
2
|
+
width: 420px;
|
|
3
|
+
display: flex;
|
|
4
|
+
flex-direction: column;
|
|
5
|
+
gap: 12px;
|
|
6
|
+
margin: 0 auto;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
.editor * {
|
|
10
|
+
font-family: inherit;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
.error {
|
|
14
|
+
padding: 10px;
|
|
15
|
+
font-size: 12px;
|
|
16
|
+
text-align: center;
|
|
17
|
+
color: var(--ublo-red-500, #d55858);
|
|
18
|
+
background-color: var(--ublo-red-100, #fde9e9);
|
|
19
|
+
border-radius: var(--ublo-radius-200, 8px);
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
.footer {
|
|
23
|
+
display: flex;
|
|
24
|
+
gap: 6px;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
.footerButtonOnly {
|
|
28
|
+
justify-content: center;
|
|
29
|
+
white-space: nowrap;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
.url {
|
|
33
|
+
flex: 1 1 100%;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
.testButton {
|
|
37
|
+
flex: 0 0 40px;
|
|
38
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export declare function getOffers(msemServicesUrl: string, lang: "fr" | "en", channel: string, resort: number | string, facet: string): Promise<any>;
|
|
2
|
+
export declare function getOtherOffers(msemServicesUrl: string, lang: "fr" | "en", channel: string, resort: number | string, facet: string, kind: string): Promise<any>;
|
|
3
|
+
export declare function getRenters(msemServicesUrl: string, channel: string, resort: number | string): Promise<any>;
|
|
4
|
+
export declare function getSkiPassesCatalogs(msemServicesUrl: string, merchant: string): Promise<any>;
|
|
5
|
+
export declare function getSkiPassesFilters(msemServicesUrl: string, merchant: string, catalog: string): Promise<any>;
|
|
6
|
+
export declare function getLodgings(msemServicesUrl: string, channel: string, resort: string): Promise<any>;
|
|
7
|
+
export declare function getLodgingFilters(msemServicesUrl: string, channel: string, resort: string, facet: string, language?: string): Promise<any>;
|
|
8
|
+
export declare function getLodgingRooms(msemServicesUrl: string, id: number, resort: string, facet: string, language?: string, preview?: boolean): Promise<any>;
|
|
9
|
+
export declare function getEllohaGroups(msemServicesUrl: string, merchant: string, stayFrom: string, language?: string): Promise<any>;
|
|
10
|
+
export declare function getVakarioKinds(msemServicesUrl: string, channel: string, merchant: string, language?: string): Promise<any>;
|
|
11
|
+
export declare function getVakarioAges(msemServicesUrl: string, channel: string, merchant: string, kind: string, language?: string): Promise<any>;
|
|
12
|
+
export declare function getVakarioCategories(msemServicesUrl: string, channel: string, merchant: string, kind: string, age: string, language?: string): Promise<any>;
|
|
13
|
+
export declare function getVakarioLevels(msemServicesUrl: string, channel: string, merchant: string, kind: string, age: string, category: string, language?: string): Promise<any>;
|
|
14
|
+
export declare function getOtherProductsCategories(msemServicesUrl: string, facet: string, merchant: string, lang?: string): Promise<any>;
|
|
15
|
+
//# sourceMappingURL=api.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../../../../src/future/components/msem-preset-editor/services/api.ts"],"names":[],"mappings":"AAGA,wBAAgB,SAAS,CACvB,eAAe,EAAE,MAAM,EACvB,IAAI,EAAE,IAAI,GAAG,IAAI,EACjB,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,GAAG,MAAM,EACvB,KAAK,EAAE,MAAM,gBAId;AAWD,wBAAsB,cAAc,CAClC,eAAe,EAAE,MAAM,EACvB,IAAI,EAAE,IAAI,GAAG,IAAI,EACjB,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,GAAG,MAAM,EACvB,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,gBAMb;AAED,wBAAsB,UAAU,CAC9B,eAAe,EAAE,MAAM,EACvB,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,GAAG,MAAM,gBAIxB;AAED,wBAAsB,oBAAoB,CACxC,eAAe,EAAE,MAAM,EACvB,QAAQ,EAAE,MAAM,gBAIjB;AAED,wBAAsB,mBAAmB,CACvC,eAAe,EAAE,MAAM,EACvB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,gBAIhB;AAGD,wBAAsB,WAAW,CAC/B,eAAe,EAAE,MAAM,EACvB,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,gBAIf;AAED,wBAAsB,iBAAiB,CACrC,eAAe,EAAE,MAAM,EACvB,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,QAAQ,SAAO,gBAIhB;AAED,wBAAsB,eAAe,CACnC,eAAe,EAAE,MAAM,EACvB,EAAE,EAAE,MAAM,EACV,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,QAAQ,SAAO,EACf,OAAO,UAAQ,gBAIhB;AAED,wBAAsB,eAAe,CACnC,eAAe,EAAE,MAAM,EACvB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,QAAQ,SAAO,gBAIhB;AAED,wBAAsB,eAAe,CACnC,eAAe,EAAE,MAAM,EACvB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,QAAQ,SAAO,gBAIhB;AAED,wBAAsB,cAAc,CAClC,eAAe,EAAE,MAAM,EACvB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,EACZ,QAAQ,SAAO,gBAIhB;AAED,wBAAsB,oBAAoB,CACxC,eAAe,EAAE,MAAM,EACvB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,MAAM,EACX,QAAQ,SAAO,gBAIhB;AAED,wBAAsB,gBAAgB,CACpC,eAAe,EAAE,MAAM,EACvB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,MAAM,EAChB,QAAQ,SAAO,gBAIhB;AAED,wBAAsB,0BAA0B,CAC9C,eAAe,EAAE,MAAM,EACvB,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,EAChB,IAAI,SAAO,gBAIZ"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import * as Fetcher from "../../../utils/fetcher";
|
|
2
|
+
export function getOffers(msemServicesUrl, lang, channel, resort, facet) {
|
|
3
|
+
const endpoint = `${msemServicesUrl}/api/tunnel/offers/${channel}/${resort}`;
|
|
4
|
+
return Fetcher.get(endpoint, { lang, facet });
|
|
5
|
+
}
|
|
6
|
+
const kinds = {
|
|
7
|
+
ACTIVITIES: "activities",
|
|
8
|
+
SERVICE_PLUS: "service_plus",
|
|
9
|
+
RESTAURANT: "restaurant",
|
|
10
|
+
TEXTILE: "textile",
|
|
11
|
+
SKISCHOOL: "skischool",
|
|
12
|
+
PARKING: "parking",
|
|
13
|
+
};
|
|
14
|
+
export async function getOtherOffers(msemServicesUrl, lang, channel, resort, facet, kind) {
|
|
15
|
+
const kindSlug = kinds[kind];
|
|
16
|
+
if (!kindSlug)
|
|
17
|
+
return;
|
|
18
|
+
const endpoint = `${msemServicesUrl}/api/tunnel/offers/${channel}/${resort}/${kindSlug}`;
|
|
19
|
+
return Fetcher.get(endpoint, { lang, facet });
|
|
20
|
+
}
|
|
21
|
+
export async function getRenters(msemServicesUrl, channel, resort) {
|
|
22
|
+
const endpoint = `${msemServicesUrl}/api/ski-rental/${resort}/renters`;
|
|
23
|
+
return Fetcher.post(endpoint, { channel });
|
|
24
|
+
}
|
|
25
|
+
export async function getSkiPassesCatalogs(msemServicesUrl, merchant) {
|
|
26
|
+
const endpoint = `${msemServicesUrl}/api/ski-pass/catalogs/${merchant}`;
|
|
27
|
+
return Fetcher.get(endpoint);
|
|
28
|
+
}
|
|
29
|
+
export async function getSkiPassesFilters(msemServicesUrl, merchant, catalog) {
|
|
30
|
+
const endpoint = `${msemServicesUrl}/api/ski-pass/${merchant}/filters`;
|
|
31
|
+
return Fetcher.post(endpoint, undefined, { catalog });
|
|
32
|
+
}
|
|
33
|
+
export async function getLodgings(msemServicesUrl, channel, resort) {
|
|
34
|
+
const endpoint = `${msemServicesUrl}/api/lodging/getAccommodationsStructure`;
|
|
35
|
+
return Fetcher.get(endpoint, { channel, resort });
|
|
36
|
+
}
|
|
37
|
+
export async function getLodgingFilters(msemServicesUrl, channel, resort, facet, language = "fr") {
|
|
38
|
+
const endpoint = `${msemServicesUrl}/api/lodging/resort/${resort}/${channel}`;
|
|
39
|
+
return Fetcher.get(endpoint, { facet, language });
|
|
40
|
+
}
|
|
41
|
+
export async function getLodgingRooms(msemServicesUrl, id, resort, facet, language = "fr", preview = false) {
|
|
42
|
+
const endpoint = `${msemServicesUrl}/api/lodging/accomodation/${id}`;
|
|
43
|
+
return Fetcher.post(endpoint, { resort, facet, language, preview });
|
|
44
|
+
}
|
|
45
|
+
export async function getEllohaGroups(msemServicesUrl, merchant, stayFrom, language = "fr") {
|
|
46
|
+
const endpoint = `${msemServicesUrl}/api/elloha-activity/${merchant}/${language}/kinds`;
|
|
47
|
+
return Fetcher.get(endpoint, { date: stayFrom });
|
|
48
|
+
}
|
|
49
|
+
export async function getVakarioKinds(msemServicesUrl, channel, merchant, language = "fr") {
|
|
50
|
+
const endpoint = `${msemServicesUrl}/api/vakario/${channel}/${merchant}/${language}/kinds`;
|
|
51
|
+
return Fetcher.get(endpoint);
|
|
52
|
+
}
|
|
53
|
+
export async function getVakarioAges(msemServicesUrl, channel, merchant, kind, language = "fr") {
|
|
54
|
+
const endpoint = `${msemServicesUrl}/api/vakario/${channel}/${merchant}/${language}/${kind}/ages`;
|
|
55
|
+
return Fetcher.get(endpoint);
|
|
56
|
+
}
|
|
57
|
+
export async function getVakarioCategories(msemServicesUrl, channel, merchant, kind, age, language = "fr") {
|
|
58
|
+
const endpoint = `${msemServicesUrl}/api/vakario/${channel}/${merchant}/${language}/${kind}/${age}/categories`;
|
|
59
|
+
return Fetcher.get(endpoint);
|
|
60
|
+
}
|
|
61
|
+
export async function getVakarioLevels(msemServicesUrl, channel, merchant, kind, age, category, language = "fr") {
|
|
62
|
+
const endpoint = `${msemServicesUrl}/api/vakario/${channel}/${merchant}/${language}/${kind}/${age}/${category}/levels`;
|
|
63
|
+
return Fetcher.get(endpoint);
|
|
64
|
+
}
|
|
65
|
+
export async function getOtherProductsCategories(msemServicesUrl, facet, merchant, lang = "fr") {
|
|
66
|
+
const endpoint = `${msemServicesUrl}/api/standard-product/merchant/${merchant}`;
|
|
67
|
+
return Fetcher.post(endpoint, { facet: Number(facet), lang });
|
|
68
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export type Offer = {
|
|
2
|
+
kind: string;
|
|
3
|
+
category: string;
|
|
4
|
+
image: string;
|
|
5
|
+
logo: string;
|
|
6
|
+
name: string;
|
|
7
|
+
options: Record<string, any>;
|
|
8
|
+
preset: Record<string, any>;
|
|
9
|
+
presets: Record<string, any>;
|
|
10
|
+
widget: string;
|
|
11
|
+
items?: Offer[];
|
|
12
|
+
};
|
|
13
|
+
export type OtherOffer = {
|
|
14
|
+
code: string;
|
|
15
|
+
name: string;
|
|
16
|
+
slug: string;
|
|
17
|
+
taxonomy: {
|
|
18
|
+
category: string;
|
|
19
|
+
};
|
|
20
|
+
widget: string;
|
|
21
|
+
};
|
|
22
|
+
export declare function get(msemServicesUrl: string, lang: "fr" | "en", channel: string, resort: number | string, facet: string): Promise<any[]>;
|
|
23
|
+
//# sourceMappingURL=offers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"offers.d.ts","sourceRoot":"","sources":["../../../../../src/future/components/msem-preset-editor/services/offers.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,KAAK,GAAG;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC7B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC5B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,KAAK,EAAE,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE;QACR,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,wBAAsB,GAAG,CACvB,eAAe,EAAE,MAAM,EACvB,IAAI,EAAE,IAAI,GAAG,IAAI,EACjB,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,GAAG,MAAM,EACvB,KAAK,EAAE,MAAM,kBAqDd"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import * as API from "./api";
|
|
2
|
+
export async function get(msemServicesUrl, lang, channel, resort, facet) {
|
|
3
|
+
const offers = (await API.getOffers(msemServicesUrl, lang, channel, resort, facet));
|
|
4
|
+
const formattedOffers = await Promise.all(offers.map(async (offer) => {
|
|
5
|
+
const { widget, category, kind, options, preset } = offer;
|
|
6
|
+
const isSkiSchool = kind === "SKISCHOOL";
|
|
7
|
+
const hasCategoryGroup = !!options?.categoryGroup || isSkiSchool;
|
|
8
|
+
if (hasCategoryGroup) {
|
|
9
|
+
let items = [];
|
|
10
|
+
const otherOffersKind = isSkiSchool ? kind : options?.categoryGroup;
|
|
11
|
+
const otherOffers = await API.getOtherOffers(msemServicesUrl, lang, channel, resort, facet, otherOffersKind);
|
|
12
|
+
if (otherOffers?.merchants?.length > 0) {
|
|
13
|
+
items = otherOffers.merchants;
|
|
14
|
+
}
|
|
15
|
+
return preset
|
|
16
|
+
? { ...offer, preset: undefined, presets: { ...preset }, items }
|
|
17
|
+
: { ...offer, items };
|
|
18
|
+
}
|
|
19
|
+
const isRental = widget === "skiRental";
|
|
20
|
+
if (isRental) {
|
|
21
|
+
const renters = await API.getRenters(msemServicesUrl, channel, resort);
|
|
22
|
+
const formattedRenters = renters.map((renter) => {
|
|
23
|
+
return { ...renter, widget };
|
|
24
|
+
});
|
|
25
|
+
return { ...offer, items: formattedRenters };
|
|
26
|
+
}
|
|
27
|
+
const isSkipasses = category === "SKIPASS";
|
|
28
|
+
if (isSkipasses) {
|
|
29
|
+
const mergedSkiPasses = mergeSkiPasses(offer);
|
|
30
|
+
return mergedSkiPasses;
|
|
31
|
+
}
|
|
32
|
+
return offer;
|
|
33
|
+
}));
|
|
34
|
+
return formattedOffers;
|
|
35
|
+
}
|
|
36
|
+
function mergeSkiPasses(offer) {
|
|
37
|
+
const { items = [], ...rest } = offer;
|
|
38
|
+
const uniqueItems = items.reduce((acc, item) => {
|
|
39
|
+
const { name } = item;
|
|
40
|
+
const isUnique = !acc.some((i) => i.name === name);
|
|
41
|
+
if (isUnique) {
|
|
42
|
+
return [item, ...acc];
|
|
43
|
+
}
|
|
44
|
+
return acc;
|
|
45
|
+
}, []);
|
|
46
|
+
if (uniqueItems.length === 0) {
|
|
47
|
+
return { ...rest, ...uniqueItems[0] };
|
|
48
|
+
}
|
|
49
|
+
return { ...rest, items: uniqueItems };
|
|
50
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
export type Options = {
|
|
2
|
+
merchant?: string;
|
|
3
|
+
categoryGroup?: string;
|
|
4
|
+
catalog?: string;
|
|
5
|
+
};
|
|
6
|
+
export type Presets = {
|
|
7
|
+
lodging?: string;
|
|
8
|
+
stay?: {
|
|
9
|
+
from: string;
|
|
10
|
+
to: string;
|
|
11
|
+
};
|
|
12
|
+
merchantSlug?: string;
|
|
13
|
+
productCategory?: string;
|
|
14
|
+
productId?: string;
|
|
15
|
+
nbStars?: string;
|
|
16
|
+
durations?: string;
|
|
17
|
+
domains?: string;
|
|
18
|
+
firstSkiDate?: string;
|
|
19
|
+
skiers?: string;
|
|
20
|
+
nbRooms?: string;
|
|
21
|
+
accomodation?: string;
|
|
22
|
+
options?: string;
|
|
23
|
+
type?: string;
|
|
24
|
+
meubleType?: string;
|
|
25
|
+
ageCodes?: string;
|
|
26
|
+
levelCodes?: string;
|
|
27
|
+
kindCodes?: string;
|
|
28
|
+
categoryCodes?: string;
|
|
29
|
+
groupNames?: string;
|
|
30
|
+
};
|
|
31
|
+
export declare function format(data: Record<string, any>): Record<string, any>;
|
|
32
|
+
//# sourceMappingURL=preset.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"preset.d.ts","sourceRoot":"","sources":["../../../../../src/future/components/msem-preset-editor/services/preset.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,OAAO,GAAG;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,OAAO,GAAG;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC;IACpC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,wBAAgB,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,uBAuB/C"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export function format(data) {
|
|
2
|
+
const { widget, code, taxonomy, slug } = data;
|
|
3
|
+
const isLift = ["skiPass", "liftJb"].includes(widget);
|
|
4
|
+
if (isLift) {
|
|
5
|
+
return data;
|
|
6
|
+
}
|
|
7
|
+
const isOtherProductsOrSkiRental = ["otherProducts", "skiRental"].includes(widget);
|
|
8
|
+
const merchant = isOtherProductsOrSkiRental ? slug : code;
|
|
9
|
+
const merchantSlug = isOtherProductsOrSkiRental ? slug : undefined;
|
|
10
|
+
const categoryGroup = taxonomy?.category;
|
|
11
|
+
const options = {
|
|
12
|
+
merchant,
|
|
13
|
+
categoryGroup,
|
|
14
|
+
};
|
|
15
|
+
const presets = {
|
|
16
|
+
merchantSlug,
|
|
17
|
+
};
|
|
18
|
+
return { options, presets };
|
|
19
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"url-params.d.ts","sourceRoot":"","sources":["../../../../../src/future/components/msem-preset-editor/services/url-params.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,KAAK,yBAWjB,CAAC;AAEF,eAAO,MAAM,YAAY,SACjB,MAAM,UACJ,OAAO,MAAM,EAAE,GAAG,CAAC,WAClB,MAAM,WAahB,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
export const build = (params) => {
|
|
2
|
+
return Object.keys(params)
|
|
3
|
+
.map((key, i) => {
|
|
4
|
+
const param = params[key];
|
|
5
|
+
if (!param)
|
|
6
|
+
return "";
|
|
7
|
+
const isObject = typeof param === "object";
|
|
8
|
+
const sign = i === 0 ? "?" : "&";
|
|
9
|
+
const value = isObject ? encodeURI(JSON.stringify(param)) : param;
|
|
10
|
+
return `${sign}${key}=${value}`;
|
|
11
|
+
})
|
|
12
|
+
.join("");
|
|
13
|
+
};
|
|
14
|
+
export const getPresetUrl = (lang, preset, baseUrl) => {
|
|
15
|
+
const { host, protocol } = window.location;
|
|
16
|
+
const isExternalUrl = baseUrl.startsWith("http");
|
|
17
|
+
const alreadyContainsLang = baseUrl.includes(`/${lang}`);
|
|
18
|
+
const encodedParams = build(preset);
|
|
19
|
+
if (isExternalUrl) {
|
|
20
|
+
return baseUrl.concat(encodedParams);
|
|
21
|
+
}
|
|
22
|
+
if (alreadyContainsLang) {
|
|
23
|
+
return `${protocol}//${host}${baseUrl}${encodedParams}`;
|
|
24
|
+
}
|
|
25
|
+
return `${protocol}//${host}/${lang}${baseUrl}${encodedParams}`;
|
|
26
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/future/components/msem-preset-linker/index.tsx"],"names":[],"mappings":"AAAA,OAAO,gBAAgB,MAAM,sBAAsB,CAAC;AAEpD,eAAe,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
type Resort = {
|
|
2
|
+
label: string;
|
|
3
|
+
value: string;
|
|
4
|
+
};
|
|
5
|
+
type Props = {
|
|
6
|
+
lang: "fr" | "en";
|
|
7
|
+
msemServicesUrl: string;
|
|
8
|
+
target: HTMLElement | null;
|
|
9
|
+
options: {
|
|
10
|
+
channel: string;
|
|
11
|
+
resort: string;
|
|
12
|
+
cartUrl?: string;
|
|
13
|
+
analytics?: () => void;
|
|
14
|
+
};
|
|
15
|
+
resorts?: Resort[];
|
|
16
|
+
};
|
|
17
|
+
export default function MseMPresetLinker({ lang, msemServicesUrl, target, options, resorts, }: Props): import("react/jsx-runtime").JSX.Element;
|
|
18
|
+
export {};
|
|
19
|
+
//# sourceMappingURL=msem-preset-linker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"msem-preset-linker.d.ts","sourceRoot":"","sources":["../../../../src/future/components/msem-preset-linker/msem-preset-linker.tsx"],"names":[],"mappings":"AAGA,KAAK,MAAM,GAAG;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,KAAK,KAAK,GAAG;IACX,IAAI,EAAE,IAAI,GAAG,IAAI,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC;IACxB,MAAM,EAAE,WAAW,GAAG,IAAI,CAAC;IAC3B,OAAO,EAAE;QACP,OAAO,EAAE,MAAM,CAAC;QAChB,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;KACxB,CAAC;IAEF,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB,CAAC;AAIF,MAAM,CAAC,OAAO,UAAU,gBAAgB,CAAC,EACvC,IAAI,EACJ,eAAe,EACf,MAAM,EACN,OAAO,EACP,OAAO,GACR,EAAE,KAAK,2CA0BP"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import EditorDialog from "../msem-preset-editor/editor-dialog";
|
|
3
|
+
const PRESET_ATTRIBUTE = "data-msem-preset";
|
|
4
|
+
export default function MseMPresetLinker({ lang, msemServicesUrl, target, options, resorts, }) {
|
|
5
|
+
const link = target?.querySelector(":scope > a");
|
|
6
|
+
const urlOverride = link?.getAttribute("href") || undefined;
|
|
7
|
+
const updatePreset = (newPreset) => {
|
|
8
|
+
if (newPreset) {
|
|
9
|
+
target?.setAttribute(PRESET_ATTRIBUTE, JSON.stringify(newPreset));
|
|
10
|
+
}
|
|
11
|
+
else {
|
|
12
|
+
target?.removeAttribute(PRESET_ATTRIBUTE);
|
|
13
|
+
}
|
|
14
|
+
};
|
|
15
|
+
const closeEditor = () => { };
|
|
16
|
+
return (_jsx(EditorDialog, { lang: lang, msemServicesUrl: msemServicesUrl, options: options, target: target, updatePreset: updatePreset, closeEditor: closeEditor, urlOverride: urlOverride, resorts: resorts }));
|
|
17
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"url-params.d.ts","sourceRoot":"","sources":["../../../../../src/future/components/msem-preset-linker/services/url-params.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,KAAK,WAAY,OAAO,MAAM,EAAE,GAAG,CAAC,WAWhD,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export const build = (params) => {
|
|
2
|
+
return Object.keys(params)
|
|
3
|
+
.map((key, i) => {
|
|
4
|
+
const param = params[key];
|
|
5
|
+
if (!param)
|
|
6
|
+
return "";
|
|
7
|
+
const isObject = typeof param === "object";
|
|
8
|
+
const sign = i === 0 ? "?" : "&";
|
|
9
|
+
const value = isObject ? encodeURI(JSON.stringify(param)) : param;
|
|
10
|
+
return `${sign}${key}=${value}`;
|
|
11
|
+
})
|
|
12
|
+
.join("");
|
|
13
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-msem-presets.d.ts","sourceRoot":"","sources":["../../../src/future/hooks/use-msem-presets.ts"],"names":[],"mappings":"AAQA,MAAM,CAAC,OAAO,UAAU,cAAc,CAAC,EAAE,cAAc,EAAE;;CAAA,QAyCxD"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import { useUbloContext } from "ublo/with-ublo";
|
|
3
|
+
import * as UrlParameters from "../utils/url-parameters";
|
|
4
|
+
import * as MseM from "../components/msem";
|
|
5
|
+
const PRESET_ATTRIBUTE = "data-msem-preset";
|
|
6
|
+
export default function useMsemPresets({ defaultOptions }) {
|
|
7
|
+
const { lang, cmsMode, path } = useUbloContext();
|
|
8
|
+
const widgetLang = lang === "fr" ? "fr" : "en";
|
|
9
|
+
const isEnabled = cmsMode !== "editing" && cmsMode !== "info";
|
|
10
|
+
const handleSectionClick = React.useCallback((e) => {
|
|
11
|
+
const target = e.target;
|
|
12
|
+
const section = target.closest(`section[${PRESET_ATTRIBUTE}]`);
|
|
13
|
+
const preset = section?.getAttribute(PRESET_ATTRIBUTE);
|
|
14
|
+
if (!preset)
|
|
15
|
+
return;
|
|
16
|
+
const { widget, options = {}, presets, url } = JSON.parse(preset);
|
|
17
|
+
const allOptions = { ...defaultOptions, ...options, lang: widgetLang };
|
|
18
|
+
e.preventDefault();
|
|
19
|
+
e.stopPropagation();
|
|
20
|
+
if (url) {
|
|
21
|
+
const params = UrlParameters.build({ options: allOptions, presets });
|
|
22
|
+
const endpoint = url.concat(params);
|
|
23
|
+
window.open(endpoint, "_blank");
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
MseM.loadWidget(widget, allOptions, presets);
|
|
27
|
+
}, [defaultOptions, widgetLang]);
|
|
28
|
+
React.useEffect(() => {
|
|
29
|
+
const container = document.getElementById("__next");
|
|
30
|
+
if (isEnabled && container) {
|
|
31
|
+
container.addEventListener("click", handleSectionClick);
|
|
32
|
+
return () => {
|
|
33
|
+
container.removeEventListener("click", handleSectionClick);
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
}, [lang, handleSectionClick, isEnabled, path]);
|
|
37
|
+
}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export declare function get<T = any>(url: string, params?: Record<string, any>, headers?: Record<string, any>): Promise<T>;
|
|
2
|
+
export declare const put: <T = any>(_url: string, body?: Record<string, any>, params?: {}, _headers?: {}) => Promise<T>;
|
|
3
|
+
export declare const post: <T = any>(_url: string, body?: Record<string, any>, params?: {}, _headers?: {}) => Promise<T>;
|
|
4
|
+
export declare const _delete: <T = any>(_url: string, body?: Record<string, any>, params?: {}, _headers?: {}) => Promise<T>;
|
|
5
|
+
//# sourceMappingURL=fetcher.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fetcher.d.ts","sourceRoot":"","sources":["../../../src/future/utils/fetcher.ts"],"names":[],"mappings":"AAAA,wBAAgB,GAAG,CAAC,CAAC,GAAG,GAAG,EACzB,GAAG,EAAE,MAAM,EACX,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC5B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,cAG9B;AACD,eAAO,MAAM,GAAG,kBAUN,MAAM,SACL,OAAO,MAAM,EAAE,GAAG,CAAC,2CAXG,CAAC;AAClC,eAAO,MAAM,IAAI,kBASP,MAAM,SACL,OAAO,MAAM,EAAE,GAAG,CAAC,2CAVK,CAAC;AACpC,eAAO,MAAM,OAAO,kBAQV,MAAM,SACL,OAAO,MAAM,EAAE,GAAG,CAAC,2CATU,CAAC"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
export function get(url, params, headers) {
|
|
2
|
+
return fetcher("GET")(url, undefined, params, headers);
|
|
3
|
+
}
|
|
4
|
+
export const put = fetcher("PUT");
|
|
5
|
+
export const post = fetcher("POST");
|
|
6
|
+
export const _delete = fetcher("DELETE");
|
|
7
|
+
const defaultContentType = {
|
|
8
|
+
"Content-Type": "application/json; charset=utf-8",
|
|
9
|
+
};
|
|
10
|
+
function fetcher(method) {
|
|
11
|
+
return async (_url, body, params = {}, _headers = {}) => {
|
|
12
|
+
const headers = { ...defaultContentType, ..._headers };
|
|
13
|
+
try {
|
|
14
|
+
const qs = buildQueryString(params);
|
|
15
|
+
const url = qs.length === 0 ? _url : `${_url}?${qs}`;
|
|
16
|
+
const reqOpts = {
|
|
17
|
+
method: method || "POST",
|
|
18
|
+
headers,
|
|
19
|
+
body: method !== "GET" && body !== undefined
|
|
20
|
+
? JSON.stringify(body)
|
|
21
|
+
: undefined,
|
|
22
|
+
};
|
|
23
|
+
const response = await fetch(url, reqOpts);
|
|
24
|
+
if (response.ok && response.status === 204)
|
|
25
|
+
return undefined;
|
|
26
|
+
const resJSON = await response.json();
|
|
27
|
+
if (response.ok === false)
|
|
28
|
+
return Promise.reject(resJSON.error);
|
|
29
|
+
return resJSON;
|
|
30
|
+
}
|
|
31
|
+
catch (err) {
|
|
32
|
+
throw err;
|
|
33
|
+
}
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
function buildQueryStringForObject(key, object) {
|
|
37
|
+
return Object.entries(object)
|
|
38
|
+
.filter(([, v]) => v !== undefined)
|
|
39
|
+
.map(([k, v]) => `${key}[${k}]=${encodeURIComponent(v)}`)
|
|
40
|
+
.join("&");
|
|
41
|
+
}
|
|
42
|
+
function buildQueryString(params) {
|
|
43
|
+
return Object.keys(params)
|
|
44
|
+
.filter((k) => !!params[k])
|
|
45
|
+
.map((k) => typeof params[k] === "object"
|
|
46
|
+
? buildQueryStringForObject(k, params[k])
|
|
47
|
+
: `${k}=${encodeURIComponent(params[k])}`)
|
|
48
|
+
.join("&");
|
|
49
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"url-parameters.d.ts","sourceRoot":"","sources":["../../../src/future/utils/url-parameters.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,qBAAqB,kBAAmB,MAAM,EAAE,WAO5D,CAAC;AAEF,eAAO,MAAM,KAAK,WAAY,OAAO,MAAM,EAAE,GAAG,CAAC,WAWhD,CAAC"}
|