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.
Files changed (94) hide show
  1. package/es/common/components/cart-dialog/cart-dialog-inner.module.css +3 -3
  2. package/es/common/utils/url-parameters.d.ts +1 -0
  3. package/es/common/utils/url-parameters.d.ts.map +1 -1
  4. package/es/common/utils/url-parameters.js +13 -0
  5. package/es/esf/components/period-picker/period-picker.d.ts.map +1 -1
  6. package/es/esf/components/period-picker/period-picker.js +0 -5
  7. package/es/future/components/msem-preset-editor/components/facet-selector.d.ts +6 -0
  8. package/es/future/components/msem-preset-editor/components/facet-selector.d.ts.map +1 -0
  9. package/es/future/components/msem-preset-editor/components/facet-selector.js +23 -0
  10. package/es/future/components/msem-preset-editor/components/form.d.ts +8 -0
  11. package/es/future/components/msem-preset-editor/components/form.d.ts.map +1 -0
  12. package/es/future/components/msem-preset-editor/components/form.js +9 -0
  13. package/es/future/components/msem-preset-editor/components/form.module.css +39 -0
  14. package/es/future/components/msem-preset-editor/components/resort-selector.d.ts +6 -0
  15. package/es/future/components/msem-preset-editor/components/resort-selector.d.ts.map +1 -0
  16. package/es/future/components/msem-preset-editor/components/resort-selector.js +8 -0
  17. package/es/future/components/msem-preset-editor/components/stay-picker.d.ts +14 -0
  18. package/es/future/components/msem-preset-editor/components/stay-picker.d.ts.map +1 -0
  19. package/es/future/components/msem-preset-editor/components/stay-picker.js +35 -0
  20. package/es/future/components/msem-preset-editor/components/stay-picker.module.css +5 -0
  21. package/es/future/components/msem-preset-editor/components/widget-list-item.d.ts +12 -0
  22. package/es/future/components/msem-preset-editor/components/widget-list-item.d.ts.map +1 -0
  23. package/es/future/components/msem-preset-editor/components/widget-list-item.js +55 -0
  24. package/es/future/components/msem-preset-editor/components/widget-list-item.module.css +115 -0
  25. package/es/future/components/msem-preset-editor/components/widget-list.d.ts +18 -0
  26. package/es/future/components/msem-preset-editor/components/widget-list.d.ts.map +1 -0
  27. package/es/future/components/msem-preset-editor/components/widget-list.js +34 -0
  28. package/es/future/components/msem-preset-editor/components/widget-list.module.css +21 -0
  29. package/es/future/components/msem-preset-editor/editor-dialog.d.ts +22 -0
  30. package/es/future/components/msem-preset-editor/editor-dialog.d.ts.map +1 -0
  31. package/es/future/components/msem-preset-editor/editor-dialog.js +25 -0
  32. package/es/future/components/msem-preset-editor/editor-dialog.module.css +31 -0
  33. package/es/future/components/msem-preset-editor/editors/elloha.d.ts +16 -0
  34. package/es/future/components/msem-preset-editor/editors/elloha.d.ts.map +1 -0
  35. package/es/future/components/msem-preset-editor/editors/elloha.js +79 -0
  36. package/es/future/components/msem-preset-editor/editors/elloha.module.css +14 -0
  37. package/es/future/components/msem-preset-editor/editors/index.d.ts +16 -0
  38. package/es/future/components/msem-preset-editor/editors/index.d.ts.map +1 -0
  39. package/es/future/components/msem-preset-editor/editors/index.js +15 -0
  40. package/es/future/components/msem-preset-editor/editors/lodgings.d.ts +17 -0
  41. package/es/future/components/msem-preset-editor/editors/lodgings.d.ts.map +1 -0
  42. package/es/future/components/msem-preset-editor/editors/lodgings.js +180 -0
  43. package/es/future/components/msem-preset-editor/editors/lodgings.module.css +21 -0
  44. package/es/future/components/msem-preset-editor/editors/ski-passes-jb.d.ts +17 -0
  45. package/es/future/components/msem-preset-editor/editors/ski-passes-jb.d.ts.map +1 -0
  46. package/es/future/components/msem-preset-editor/editors/ski-passes-jb.js +85 -0
  47. package/es/future/components/msem-preset-editor/editors/ski-passes.d.ts +17 -0
  48. package/es/future/components/msem-preset-editor/editors/ski-passes.d.ts.map +1 -0
  49. package/es/future/components/msem-preset-editor/editors/ski-passes.js +198 -0
  50. package/es/future/components/msem-preset-editor/editors/ski-passes.module.css +25 -0
  51. package/es/future/components/msem-preset-editor/editors/standard-products.d.ts +17 -0
  52. package/es/future/components/msem-preset-editor/editors/standard-products.d.ts.map +1 -0
  53. package/es/future/components/msem-preset-editor/editors/standard-products.js +65 -0
  54. package/es/future/components/msem-preset-editor/editors/vakario.d.ts +16 -0
  55. package/es/future/components/msem-preset-editor/editors/vakario.d.ts.map +1 -0
  56. package/es/future/components/msem-preset-editor/editors/vakario.js +186 -0
  57. package/es/future/components/msem-preset-editor/index.d.ts +3 -0
  58. package/es/future/components/msem-preset-editor/index.d.ts.map +1 -0
  59. package/es/future/components/msem-preset-editor/index.js +2 -0
  60. package/es/future/components/msem-preset-editor/msem-preset-editor.d.ts +21 -0
  61. package/es/future/components/msem-preset-editor/msem-preset-editor.d.ts.map +1 -0
  62. package/es/future/components/msem-preset-editor/msem-preset-editor.js +125 -0
  63. package/es/future/components/msem-preset-editor/msem-preset-editor.module.css +38 -0
  64. package/es/future/components/msem-preset-editor/services/api.d.ts +15 -0
  65. package/es/future/components/msem-preset-editor/services/api.d.ts.map +1 -0
  66. package/es/future/components/msem-preset-editor/services/api.js +68 -0
  67. package/es/future/components/msem-preset-editor/services/offers.d.ts +23 -0
  68. package/es/future/components/msem-preset-editor/services/offers.d.ts.map +1 -0
  69. package/es/future/components/msem-preset-editor/services/offers.js +50 -0
  70. package/es/future/components/msem-preset-editor/services/preset.d.ts +32 -0
  71. package/es/future/components/msem-preset-editor/services/preset.d.ts.map +1 -0
  72. package/es/future/components/msem-preset-editor/services/preset.js +19 -0
  73. package/es/future/components/msem-preset-editor/services/url-params.d.ts +3 -0
  74. package/es/future/components/msem-preset-editor/services/url-params.d.ts.map +1 -0
  75. package/es/future/components/msem-preset-editor/services/url-params.js +26 -0
  76. package/es/future/components/msem-preset-linker/index.d.ts +3 -0
  77. package/es/future/components/msem-preset-linker/index.d.ts.map +1 -0
  78. package/es/future/components/msem-preset-linker/index.js +2 -0
  79. package/es/future/components/msem-preset-linker/msem-preset-linker.d.ts +19 -0
  80. package/es/future/components/msem-preset-linker/msem-preset-linker.d.ts.map +1 -0
  81. package/es/future/components/msem-preset-linker/msem-preset-linker.js +17 -0
  82. package/es/future/components/msem-preset-linker/services/url-params.d.ts +2 -0
  83. package/es/future/components/msem-preset-linker/services/url-params.d.ts.map +1 -0
  84. package/es/future/components/msem-preset-linker/services/url-params.js +13 -0
  85. package/es/future/hooks/use-msem-presets.d.ts +4 -0
  86. package/es/future/hooks/use-msem-presets.d.ts.map +1 -0
  87. package/es/future/hooks/use-msem-presets.js +37 -0
  88. package/es/future/utils/fetcher.d.ts +5 -0
  89. package/es/future/utils/fetcher.d.ts.map +1 -0
  90. package/es/future/utils/fetcher.js +49 -0
  91. package/es/future/utils/url-parameters.d.ts +3 -0
  92. package/es/future/utils/url-parameters.d.ts.map +1 -0
  93. package/es/future/utils/url-parameters.js +21 -0
  94. package/package.json +1 -1
@@ -0,0 +1,198 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import * as React from "react";
3
+ import Select from "dt-design-system/es/select";
4
+ import MutlipleSelect from "dt-design-system/es/multiple-select";
5
+ import Loader from "dt-design-system/es/loader";
6
+ import Input from "dt-design-system/es/input";
7
+ import NumberPicker from "dt-design-system/es/number-picker";
8
+ import Form from "../components/form";
9
+ import * as API from "../services/api";
10
+ import css from "./ski-passes.module.css";
11
+ const ALLOWED_FILTERS = ["domains", "durations", "skiers"];
12
+ const DEFAULT_DATA = {
13
+ firstSkiDate: "",
14
+ skiers: [],
15
+ activities: [],
16
+ domains: [],
17
+ durations: [],
18
+ };
19
+ const ACTIVITIES_LABELS = {
20
+ piscine: "Piscine",
21
+ patinoire: "Patinoire",
22
+ vtt: "Télésiège VTT",
23
+ ski: "Ski",
24
+ "acces-pieton": "Télésiège piéton",
25
+ "bouee-neige": "Bouée sur neige",
26
+ "ski-activite": "Ski + Activités",
27
+ luge: "Luge sur rails",
28
+ };
29
+ export default function SkiPasses({ msemServicesUrl, preset, setPreset, stay, setShowPresetDialog, onChange, testPreset, urlOverride, }) {
30
+ const savedPreset = React.useRef(preset);
31
+ const [loading, setLoading] = React.useState(false);
32
+ const [catalogs, setCatalogs] = React.useState(null);
33
+ const [catalog, setCatalog] = React.useState(preset?.options?.catalog || "");
34
+ const [filters, setFilters] = React.useState(null);
35
+ const [data, setData] = React.useState(getDefaultData(preset));
36
+ const firstSkiDateDefaultMonth = stay?.from
37
+ ? new Date(stay.from).getMonth() + 1
38
+ : undefined;
39
+ const { merchant } = preset?.options;
40
+ const isReady = catalogs !== null;
41
+ const hasCatalog = !loading && isReady && catalogs?.length > 0 && catalog !== "";
42
+ const activities = (filters?.domains
43
+ ? [
44
+ ...new Set(filters?.domains?.reduce((acc, domain) => {
45
+ const { tags } = domain;
46
+ if (!tags?.length)
47
+ return acc;
48
+ const formattedTags = tags
49
+ .filter((tag) => {
50
+ return (Object.keys(ACTIVITIES_LABELS).includes(tag) &&
51
+ !acc.some((item) => item.value === tag));
52
+ })
53
+ .map((tag) => {
54
+ return { value: tag, label: ACTIVITIES_LABELS[tag] || tag };
55
+ });
56
+ return [...acc, ...formattedTags];
57
+ }, [])),
58
+ ]
59
+ : []);
60
+ const selectedActivities = data.activities.map((activity) => {
61
+ return activities.find((a) => a.value === activity);
62
+ });
63
+ const selectedActivitiesCodes = activities.reduce((acc, activity) => {
64
+ const { value } = activity;
65
+ return data.activities?.includes(value)
66
+ ? [...new Set([...acc, value])]
67
+ : acc;
68
+ }, []);
69
+ const filteredDomains = selectedActivitiesCodes?.length > 0 && filters
70
+ ? filters.domains?.filter((domain) => {
71
+ return domain.tags?.some((tag) => {
72
+ return selectedActivitiesCodes.includes(tag);
73
+ });
74
+ })
75
+ : filters?.domains;
76
+ const selectedDomainsIds = filters?.domains &&
77
+ filters?.domains.reduce((acc, domain) => {
78
+ const { code, catalogIds } = domain;
79
+ return data.domains.includes(code)
80
+ ? [...new Set([...acc, ...catalogIds])]
81
+ : acc;
82
+ }, []);
83
+ const filteredDurations = selectedActivitiesCodes?.length > 0 && filters
84
+ ? filters.durations?.filter((duration) => {
85
+ return duration.tags?.some((tag) => {
86
+ return (selectedActivitiesCodes.includes(tag) ||
87
+ duration.catalogIds.some((id) => selectedDomainsIds && selectedDomainsIds.includes(id)));
88
+ });
89
+ })
90
+ : filters?.durations;
91
+ const selectedDomains = data.domains.map((domain) => filters?.domains?.find((d) => d.value === domain));
92
+ const selectedDurations = data.durations.map((domain) => filters?.durations?.find((d) => d.value === domain));
93
+ const cancelPreset = () => {
94
+ setPreset(savedPreset.current);
95
+ setShowPresetDialog(false);
96
+ };
97
+ const confirmPreset = () => {
98
+ setShowPresetDialog(false);
99
+ };
100
+ const updateField = (field) => (value) => {
101
+ const isArray = Array.isArray(value);
102
+ if (isArray) {
103
+ setData((data) => ({ ...data, [field]: value.map((v) => v.value) }));
104
+ }
105
+ else {
106
+ setData((data) => ({ ...data, [field]: value }));
107
+ }
108
+ };
109
+ const updateFirstSkiDate = (value) => {
110
+ updateField("firstSkiDate")(value);
111
+ };
112
+ const updateDomains = (value) => {
113
+ if (value.length > 0) {
114
+ updateField("durations")([]);
115
+ }
116
+ updateField("domains")(value);
117
+ };
118
+ const updateSkiers = (code) => (value) => {
119
+ const filteredSkiers = data.skiers.filter((skier) => skier !== code);
120
+ const newSkiers = !value ? [] : new Array(parseInt(value)).fill(code);
121
+ setData({ ...data, skiers: [...filteredSkiers, ...newSkiers] });
122
+ };
123
+ React.useEffect(() => {
124
+ if (!isReady) {
125
+ const runEffect = async () => {
126
+ try {
127
+ const catalogs = await API.getSkiPassesCatalogs(msemServicesUrl, merchant);
128
+ setCatalogs(catalogs);
129
+ }
130
+ catch (e) {
131
+ setCatalogs([]);
132
+ }
133
+ };
134
+ runEffect();
135
+ }
136
+ }, [isReady, merchant, msemServicesUrl]);
137
+ React.useEffect(() => {
138
+ if (catalog) {
139
+ const initFilters = async () => {
140
+ setLoading(true);
141
+ const filters = await API.getSkiPassesFilters(msemServicesUrl, merchant, catalog);
142
+ const filteredFilters = Object.keys(filters).reduce((acc, key) => {
143
+ const filter = filters[key];
144
+ return ALLOWED_FILTERS.includes(key)
145
+ ? { ...acc, [key]: filter.map((f) => ({ ...f, value: f.code })) }
146
+ : acc;
147
+ }, {});
148
+ setLoading(false);
149
+ setFilters(filteredFilters);
150
+ };
151
+ initFilters();
152
+ }
153
+ else {
154
+ setFilters(null);
155
+ }
156
+ }, [catalog, merchant, msemServicesUrl]);
157
+ React.useEffect(() => {
158
+ setPreset((current = {}) => {
159
+ const newPreset = {
160
+ ...current,
161
+ options: {
162
+ ...(current?.options || {}),
163
+ catalog,
164
+ },
165
+ presets: {
166
+ ...(current?.presets || {}),
167
+ ...data,
168
+ },
169
+ url: urlOverride || undefined,
170
+ };
171
+ onChange?.(newPreset);
172
+ return newPreset;
173
+ });
174
+ }, [catalog, data, urlOverride, setPreset, onChange]);
175
+ return (_jsxs(Form, { title: "Presets forfaits", width: 420, preset: preset, buttonsActions: {
176
+ testPreset,
177
+ cancelPreset,
178
+ confirmPreset: hasCatalog ? confirmPreset : undefined,
179
+ }, children: [_jsx(Select, { label: "Catalogue", value: catalog, options: catalogs ? ["", ...catalogs] : [], onValueChange: setCatalog, loading: !isReady }), loading && _jsx(Loader, { className: css.loader }), hasCatalog && (_jsxs(_Fragment, { children: [_jsx(Input, { type: "date", label: "1er jour", value: data.firstSkiDate, onValueChange: updateFirstSkiDate, defaultMonth: firstSkiDateDefaultMonth, min: stay?.from || undefined, max: stay?.to || undefined }), filters?.skiers && filters?.skiers?.length > 1 && (_jsxs("div", { className: css.skiers, children: [_jsx("div", { className: css.label, children: "Skieurs" }), filters.skiers.map((skier) => {
180
+ const { code, label, ageMin, ageMax } = skier;
181
+ const title = `${label} (de ${ageMin} à ${ageMax} ans)`;
182
+ const value = data.skiers?.filter((skier) => skier === code)?.length || 0;
183
+ return (_jsx(NumberPicker, { label: title, min: 0, max: 20, value: value, disabled: false, onChange: updateSkiers(code), withInput: true }, code));
184
+ })] })), _jsx("div", { className: css.label, children: "Filtres" }), (activities?.length > 0 || loading) && (_jsx(MutlipleSelect, { label: "Activit\u00E9s", placeholder: "Selectionnez une ou plusieurs options", options: activities, values: selectedActivities, onChange: updateField("activities"), loading: loading })), _jsxs("div", { className: css.row, children: [((filteredDomains && filteredDomains.length > 0) || loading) && (_jsx(MutlipleSelect, { label: "Domaines", placeholder: "Selectionnez une ou plusieurs options", options: filteredDomains || [], values: selectedDomains, onChange: updateDomains, loading: loading })), ((filteredDurations && filteredDurations?.length > 0) ||
185
+ loading) && (_jsx(MutlipleSelect, { label: "Dur\u00E9es", placeholder: "Selectionnez une ou plusieurs options", options: filteredDurations || [], values: selectedDurations, onChange: updateField("durations"), disabled: data.domains?.length === 0, loading: loading }))] })] }))] }));
186
+ }
187
+ function getDefaultData(preset) {
188
+ if (!preset?.presets)
189
+ return DEFAULT_DATA;
190
+ const { skiers, firstSkiDate, activities, domains, durations } = preset.presets;
191
+ return {
192
+ skiers: skiers || DEFAULT_DATA.skiers,
193
+ firstSkiDate: firstSkiDate || DEFAULT_DATA.firstSkiDate,
194
+ activities: activities || DEFAULT_DATA.activities,
195
+ domains: domains || DEFAULT_DATA.domains,
196
+ durations: durations || DEFAULT_DATA.durations,
197
+ };
198
+ }
@@ -0,0 +1,25 @@
1
+ .loader {
2
+ --ds-loader-spinner-size: 30px;
3
+ --ds-loader-thickness: 3px;
4
+
5
+ margin-top: 10px;
6
+ }
7
+
8
+ .row {
9
+ display: flex;
10
+ gap: 8px;
11
+ }
12
+
13
+ .label {
14
+ font-size: 12px;
15
+ user-select: none;
16
+ font-weight: 700;
17
+ }
18
+
19
+ .skiers {
20
+ width: 300px;
21
+ max-width: 100%;
22
+ display: flex;
23
+ flex-direction: column;
24
+ gap: 8px;
25
+ }
@@ -0,0 +1,17 @@
1
+ import * as React from "react";
2
+ type Props = {
3
+ msemServicesUrl: string;
4
+ stay: {
5
+ from: string;
6
+ to: string;
7
+ };
8
+ facet: string;
9
+ preset: Record<string, any> | null;
10
+ setPreset: React.Dispatch<React.SetStateAction<Record<string, any> | null>>;
11
+ setShowPresetDialog: React.Dispatch<React.SetStateAction<boolean>>;
12
+ onChange?: (preset: Record<string, any> | null) => void;
13
+ testPreset: () => void;
14
+ };
15
+ export default function StandardProducts({ msemServicesUrl, preset, setPreset, facet, setShowPresetDialog, onChange, testPreset, }: Props): import("react/jsx-runtime").JSX.Element;
16
+ export {};
17
+ //# sourceMappingURL=standard-products.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"standard-products.d.ts","sourceRoot":"","sources":["../../../../../src/future/components/msem-preset-editor/editors/standard-products.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAK/B,KAAK,KAAK,GAAG;IACX,eAAe,EAAE,MAAM,CAAC;IACxB,IAAI,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC;IACnC,SAAS,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;IAC5E,mBAAmB,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC;IACnE,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,KAAK,IAAI,CAAC;IACxD,UAAU,EAAE,MAAM,IAAI,CAAC;CACxB,CAAC;AAMF,MAAM,CAAC,OAAO,UAAU,gBAAgB,CAAC,EACvC,eAAe,EACf,MAAM,EACN,SAAS,EACT,KAAK,EACL,mBAAmB,EACnB,QAAQ,EACR,UAAU,GACX,EAAE,KAAK,2CA8EP"}
@@ -0,0 +1,65 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import * as React from "react";
3
+ import Select from "dt-design-system/es/select";
4
+ import Form from "../components/form";
5
+ import * as API from "../services/api";
6
+ const DEFAULT_DATA = {
7
+ productCategory: "",
8
+ };
9
+ export default function StandardProducts({ msemServicesUrl, preset, setPreset, facet, setShowPresetDialog, onChange, testPreset, }) {
10
+ const savedPreset = React.useRef(preset);
11
+ const [loading, setLoading] = React.useState(false);
12
+ const [productCategories, setProductCategories] = React.useState([]);
13
+ const [selectedProductCategory, setSelectedProductCategory] = React.useState(getDefaultData(preset));
14
+ const formattedCategories = productCategories.map(({ name, slug }) => {
15
+ return { label: name, value: slug };
16
+ });
17
+ const { merchant } = preset?.options || {};
18
+ const cancelPreset = () => {
19
+ setPreset(savedPreset.current);
20
+ setShowPresetDialog(false);
21
+ };
22
+ const confirmPreset = () => {
23
+ setShowPresetDialog(false);
24
+ };
25
+ React.useEffect(() => {
26
+ const runEffect = async () => {
27
+ try {
28
+ setLoading(true);
29
+ const { categories } = await API.getOtherProductsCategories(msemServicesUrl, facet, merchant);
30
+ setProductCategories(categories);
31
+ }
32
+ catch (e) {
33
+ console.error(e);
34
+ }
35
+ finally {
36
+ setLoading(false);
37
+ }
38
+ };
39
+ runEffect();
40
+ }, [facet, merchant, msemServicesUrl]);
41
+ React.useEffect(() => {
42
+ setPreset((current = {}) => {
43
+ const newPreset = {
44
+ ...current,
45
+ presets: {
46
+ ...(current?.presets || {}),
47
+ productCategory: selectedProductCategory,
48
+ },
49
+ };
50
+ onChange?.(newPreset);
51
+ return newPreset;
52
+ });
53
+ }, [onChange, selectedProductCategory, setPreset]);
54
+ return (_jsx(Form, { title: "Presets activit\u00E9s autres produits", width: 420, preset: preset, buttonsActions: {
55
+ testPreset,
56
+ cancelPreset,
57
+ confirmPreset: selectedProductCategory ? confirmPreset : undefined,
58
+ }, children: _jsx(Select, { label: "Cat\u00E9gorie de produit", placeholder: "S\u00E9lectionnez une cat\u00E9gorie", options: formattedCategories, value: selectedProductCategory, onValueChange: setSelectedProductCategory, disabled: loading }) }));
59
+ }
60
+ function getDefaultData(preset) {
61
+ if (!preset?.presets)
62
+ return DEFAULT_DATA;
63
+ const { productCategory } = preset.presets;
64
+ return productCategory || DEFAULT_DATA.productCategory;
65
+ }
@@ -0,0 +1,16 @@
1
+ import * as React from "react";
2
+ type Props = {
3
+ msemServicesUrl: string;
4
+ stay: {
5
+ from: string;
6
+ to: string;
7
+ };
8
+ preset: Record<string, any> | null;
9
+ setPreset: React.Dispatch<React.SetStateAction<Record<string, any> | null>>;
10
+ setShowPresetDialog: React.Dispatch<React.SetStateAction<boolean>>;
11
+ onChange?: (preset: Record<string, any> | null) => void;
12
+ testPreset: () => void;
13
+ };
14
+ export default function Vakario({ msemServicesUrl, preset, setPreset, setShowPresetDialog, onChange, testPreset, }: Props): import("react/jsx-runtime").JSX.Element;
15
+ export {};
16
+ //# sourceMappingURL=vakario.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vakario.d.ts","sourceRoot":"","sources":["../../../../../src/future/components/msem-preset-editor/editors/vakario.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAK/B,KAAK,KAAK,GAAG;IACX,eAAe,EAAE,MAAM,CAAC;IACxB,IAAI,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC;IACnC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC;IACnC,SAAS,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;IAC5E,mBAAmB,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC;IACnE,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,KAAK,IAAI,CAAC;IACxD,UAAU,EAAE,MAAM,IAAI,CAAC;CACxB,CAAC;AASF,MAAM,CAAC,OAAO,UAAU,OAAO,CAAC,EAC9B,eAAe,EACf,MAAM,EACN,SAAS,EACT,mBAAmB,EACnB,QAAQ,EACR,UAAU,GACX,EAAE,KAAK,2CA+OP"}
@@ -0,0 +1,186 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import * as React from "react";
3
+ import Form from "../components/form";
4
+ import Select from "dt-design-system/es/select";
5
+ import * as API from "../services/api";
6
+ const DEFAULT_DATA = {
7
+ kindCodes: "",
8
+ ageCodes: "",
9
+ categoryCodes: "",
10
+ levelCodes: "",
11
+ };
12
+ export default function Vakario({ msemServicesUrl, preset, setPreset, setShowPresetDialog, onChange, testPreset, }) {
13
+ const savedPreset = React.useRef(preset);
14
+ const [loading, setLoading] = React.useState(false);
15
+ const [kindCodes, setKindCodes] = React.useState([]);
16
+ const [ageCodes, setAgeCodes] = React.useState([]);
17
+ const [categoryCodes, setCategoryCodes] = React.useState([]);
18
+ const [levelCodes, setLevelCodes] = React.useState([]);
19
+ const [data, setData] = React.useState(getDefaultData(preset));
20
+ const { channel, merchant } = preset?.options;
21
+ const cancelPreset = () => {
22
+ setPreset(savedPreset.current);
23
+ setShowPresetDialog(false);
24
+ };
25
+ const confirmPreset = () => {
26
+ setShowPresetDialog(false);
27
+ };
28
+ const updateField = (field) => (value) => {
29
+ setData((data) => {
30
+ let newData = { ...data, [field]: value };
31
+ if (field === "kindCodes" && value === "") {
32
+ newData = {
33
+ ...newData,
34
+ ageCodes: "",
35
+ categoryCodes: "",
36
+ levelCodes: "",
37
+ };
38
+ }
39
+ if (field === "ageCodes" && value === "") {
40
+ newData = { ...newData, categoryCodes: "", levelCodes: "" };
41
+ }
42
+ if (field === "categoryCodes" && value === "") {
43
+ newData = { ...newData, levelCodes: "" };
44
+ }
45
+ return newData;
46
+ });
47
+ };
48
+ React.useEffect(() => {
49
+ const runEffect = async () => {
50
+ try {
51
+ setLoading(true);
52
+ const kinds = await API.getVakarioKinds(msemServicesUrl, channel, merchant);
53
+ const formattedKinds = kinds.map(({ code, name }) => ({
54
+ label: name,
55
+ value: code,
56
+ }));
57
+ setKindCodes(formattedKinds);
58
+ setData((data) => ({
59
+ ...data,
60
+ ageCodes: "",
61
+ categoryCodes: "",
62
+ levelCodes: "",
63
+ }));
64
+ }
65
+ catch (e) {
66
+ console.error(e);
67
+ }
68
+ finally {
69
+ setLoading(false);
70
+ }
71
+ };
72
+ runEffect();
73
+ }, [channel, merchant, msemServicesUrl]);
74
+ React.useEffect(() => {
75
+ if (data.kindCodes) {
76
+ const runEffect = async () => {
77
+ try {
78
+ setLoading(true);
79
+ const ages = await API.getVakarioAges(msemServicesUrl, channel, merchant, data.kindCodes);
80
+ const formattedAges = ages.map(({ code, name }) => ({
81
+ label: name,
82
+ value: code,
83
+ }));
84
+ setAgeCodes(formattedAges);
85
+ setData((data) => ({ ...data, categoryCodes: "", levelCodes: "" }));
86
+ }
87
+ catch (e) {
88
+ console.error(e);
89
+ }
90
+ finally {
91
+ setLoading(false);
92
+ }
93
+ };
94
+ runEffect();
95
+ }
96
+ }, [merchant, data.kindCodes, channel, msemServicesUrl]);
97
+ React.useEffect(() => {
98
+ if (data.kindCodes && data.ageCodes) {
99
+ const runEffect = async () => {
100
+ try {
101
+ setLoading(true);
102
+ const categories = await API.getVakarioCategories(msemServicesUrl, channel, merchant, data.kindCodes, data.ageCodes);
103
+ const formattedCategories = categories.map(({ code, name }) => ({
104
+ label: name,
105
+ value: code,
106
+ }));
107
+ setCategoryCodes(formattedCategories);
108
+ setData((data) => ({ ...data, levelCodes: "" }));
109
+ }
110
+ catch (e) {
111
+ console.error(e);
112
+ }
113
+ finally {
114
+ setLoading(false);
115
+ }
116
+ };
117
+ runEffect();
118
+ }
119
+ }, [merchant, data.kindCodes, data.ageCodes, channel, msemServicesUrl]);
120
+ React.useEffect(() => {
121
+ if (data.kindCodes && data.ageCodes && data.categoryCodes) {
122
+ const runEffect = async () => {
123
+ try {
124
+ setLoading(true);
125
+ const levels = await API.getVakarioLevels(msemServicesUrl, channel, merchant, data.kindCodes, data.ageCodes, data.categoryCodes);
126
+ const formattedLevels = levels.map(({ code, name }) => ({
127
+ label: name,
128
+ value: code,
129
+ }));
130
+ setLevelCodes(formattedLevels);
131
+ }
132
+ catch (e) {
133
+ console.error(e);
134
+ }
135
+ finally {
136
+ setLoading(false);
137
+ }
138
+ };
139
+ runEffect();
140
+ }
141
+ }, [
142
+ merchant,
143
+ data.kindCodes,
144
+ data.ageCodes,
145
+ data.categoryCodes,
146
+ channel,
147
+ msemServicesUrl,
148
+ ]);
149
+ React.useEffect(() => {
150
+ setPreset((current = {}) => {
151
+ const { kindCodes, ageCodes, categoryCodes, levelCodes } = data;
152
+ const newPreset = {
153
+ ...current,
154
+ presets: {
155
+ ...(current?.presets || {}),
156
+ kindCodes: kindCodes ? [kindCodes] : undefined,
157
+ ageCodes: ageCodes ? [ageCodes] : undefined,
158
+ categoryCodes: categoryCodes ? [categoryCodes] : undefined,
159
+ levelCodes: levelCodes ? [levelCodes] : undefined,
160
+ },
161
+ };
162
+ onChange?.(newPreset);
163
+ return newPreset;
164
+ });
165
+ }, [data, onChange, setPreset]);
166
+ return (_jsxs(Form, { title: "Presets activit\u00E9s Vakario", width: 420, preset: preset, buttonsActions: {
167
+ testPreset,
168
+ cancelPreset,
169
+ confirmPreset,
170
+ }, children: [_jsx(Select, { label: "Activit\u00E9", placeholder: "S\u00E9lectionnez une activit\u00E9s", options: kindCodes, value: data.kindCodes, onValueChange: updateField("kindCodes"), loading: loading && !data.kindCodes }), _jsx(Select, { label: "\u00C2ge", placeholder: "S\u00E9lectionnez un \u00E2ge", options: ageCodes, value: data.ageCodes, onValueChange: updateField("ageCodes"), loading: loading && data.kindCodes && !data.ageCodes, disabled: !data.kindCodes }), _jsx(Select, { label: "Cat\u00E9gorie", placeholder: "S\u00E9lectionnez une cat\u00E9gorie", options: categoryCodes, value: data.categoryCodes, onValueChange: updateField("categoryCodes"), loading: loading && data.kindCodes && data.ageCodes && !data.categoryCodes, disabled: !data.kindCodes || !data.ageCodes }), _jsx(Select, { label: "Niveau", placeholder: "S\u00E9lectionnez un niveau", options: levelCodes, value: data.levelCodes, onValueChange: updateField("levelCodes"), loading: loading &&
171
+ data.kindCodes &&
172
+ data.ageCodes &&
173
+ data.categoryCodes &&
174
+ !data.levelCodes, disabled: !data.kindCodes || !data.ageCodes || !data.categoryCodes })] }));
175
+ }
176
+ function getDefaultData(preset) {
177
+ if (!preset?.presets && !preset?.options)
178
+ return DEFAULT_DATA;
179
+ const { kindCodes, ageCodes, categoryCodes, levelCodes } = preset?.presets || {};
180
+ return {
181
+ kindCodes: kindCodes || DEFAULT_DATA.kindCodes,
182
+ ageCodes: ageCodes || DEFAULT_DATA.ageCodes,
183
+ categoryCodes: categoryCodes || DEFAULT_DATA.categoryCodes,
184
+ levelCodes: levelCodes || DEFAULT_DATA.levelCodes,
185
+ };
186
+ }
@@ -0,0 +1,3 @@
1
+ export default MseMPresetEditor;
2
+ import MseMPresetEditor from "./msem-preset-editor";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/future/components/msem-preset-editor/index.js"],"names":[],"mappings":";6BAA6B,sBAAsB"}
@@ -0,0 +1,2 @@
1
+ import MseMPresetEditor from "./msem-preset-editor";
2
+ export default MseMPresetEditor;
@@ -0,0 +1,21 @@
1
+ type Resort = {
2
+ label: string;
3
+ value: string;
4
+ };
5
+ type Props = {
6
+ lang: "fr" | "en";
7
+ msemServicesUrl: string;
8
+ options: {
9
+ channel: string;
10
+ resort?: string | number;
11
+ cartUrl?: string;
12
+ analytics?: () => void;
13
+ };
14
+ urlOverride?: string;
15
+ resorts?: Resort[];
16
+ selectedPreset?: string | null;
17
+ onChange?: (preset: Record<string, any> | null) => void;
18
+ };
19
+ export default function MseMPresetEditor({ lang, msemServicesUrl, options, urlOverride, resorts, selectedPreset, onChange, }: Props): import("react/jsx-runtime").JSX.Element;
20
+ export {};
21
+ //# sourceMappingURL=msem-preset-editor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"msem-preset-editor.d.ts","sourceRoot":"","sources":["../../../../src/future/components/msem-preset-editor/msem-preset-editor.tsx"],"names":[],"mappings":"AAmBA,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,OAAO,EAAE;QACP,OAAO,EAAE,MAAM,CAAC;QAChB,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;QACzB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;KACxB,CAAC;IACF,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,KAAK,IAAI,CAAC;CACzD,CAAC;AAEF,MAAM,CAAC,OAAO,UAAU,gBAAgB,CAAC,EACvC,IAAI,EACJ,eAAe,EACf,OAAO,EACP,WAAW,EACX,OAAO,EACP,cAAc,EACd,QAAQ,GACT,EAAE,KAAK,2CAyNP"}