ublo-lib 1.16.5 → 1.17.1

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 (137) hide show
  1. package/es/common/components/admin-links/admin-links.d.ts +3 -4
  2. package/es/common/components/admin-links/admin-links.d.ts.map +1 -1
  3. package/es/common/components/breadcrumb.d.ts +3 -4
  4. package/es/common/components/breadcrumb.d.ts.map +1 -1
  5. package/es/common/components/editable-map/icons/esf.js +0 -5
  6. package/es/common/components/editable-map/icons/sata-huez.js +0 -4
  7. package/es/common/components/editable-map/index.js +0 -1
  8. package/es/common/components/editable-map/marker-list.js +0 -1
  9. package/es/common/components/instant-search/hooks/use-search.d.ts +1 -1
  10. package/es/common/components/instant-search/hooks/use-search.d.ts.map +1 -1
  11. package/es/common/components/instant-search/input.d.ts +3 -4
  12. package/es/common/components/instant-search/input.d.ts.map +1 -1
  13. package/es/common/components/instant-search/instant-search.d.ts +2 -3
  14. package/es/common/components/instant-search/instant-search.d.ts.map +1 -1
  15. package/es/common/components/instant-search/links.d.ts +2 -3
  16. package/es/common/components/instant-search/links.d.ts.map +1 -1
  17. package/es/common/components/instant-search/no-product.d.ts +2 -3
  18. package/es/common/components/instant-search/no-product.d.ts.map +1 -1
  19. package/es/common/components/instant-search/products.d.ts +2 -2
  20. package/es/common/components/instant-search/products.d.ts.map +1 -1
  21. package/es/common/components/instant-search/results.d.ts +10 -11
  22. package/es/common/components/instant-search/results.d.ts.map +1 -1
  23. package/es/common/components/instant-search/services/dates.js +0 -1
  24. package/es/common/components/msem-preset-editor/components/facet-selector.d.ts +6 -0
  25. package/es/common/components/msem-preset-editor/components/facet-selector.d.ts.map +1 -0
  26. package/es/common/components/msem-preset-editor/components/facet-selector.js +23 -0
  27. package/es/common/components/msem-preset-editor/components/form.d.ts +8 -0
  28. package/es/common/components/msem-preset-editor/components/form.d.ts.map +1 -0
  29. package/es/common/components/msem-preset-editor/components/form.js +8 -0
  30. package/es/common/components/msem-preset-editor/components/form.module.css +39 -0
  31. package/es/common/components/msem-preset-editor/components/stay-picker.d.ts +14 -0
  32. package/es/common/components/msem-preset-editor/components/stay-picker.d.ts.map +1 -0
  33. package/es/common/components/msem-preset-editor/components/stay-picker.js +35 -0
  34. package/es/common/components/msem-preset-editor/components/stay-picker.module.css +5 -0
  35. package/es/common/components/msem-preset-editor/components/widget-list-item.d.ts +12 -0
  36. package/es/common/components/msem-preset-editor/components/widget-list-item.d.ts.map +1 -0
  37. package/es/common/components/msem-preset-editor/components/widget-list-item.js +48 -0
  38. package/es/common/components/msem-preset-editor/components/widget-list-item.module.css +115 -0
  39. package/es/common/components/msem-preset-editor/components/widget-list.d.ts +17 -0
  40. package/es/common/components/msem-preset-editor/components/widget-list.d.ts.map +1 -0
  41. package/es/common/components/msem-preset-editor/components/widget-list.js +34 -0
  42. package/es/common/components/msem-preset-editor/components/widget-list.module.css +12 -0
  43. package/es/common/components/msem-preset-editor/editor-dialog.d.ts +29 -0
  44. package/es/common/components/msem-preset-editor/editor-dialog.d.ts.map +1 -0
  45. package/es/common/components/msem-preset-editor/editor-dialog.js +16 -0
  46. package/es/common/components/msem-preset-editor/editor-dialog.module.css +31 -0
  47. package/es/common/components/msem-preset-editor/editors/elloha.d.ts +14 -0
  48. package/es/common/components/msem-preset-editor/editors/elloha.d.ts.map +1 -0
  49. package/es/common/components/msem-preset-editor/editors/elloha.js +69 -0
  50. package/es/common/components/msem-preset-editor/editors/elloha.module.css +8 -0
  51. package/es/common/components/msem-preset-editor/editors/index.d.ts +14 -0
  52. package/es/common/components/msem-preset-editor/editors/index.d.ts.map +1 -0
  53. package/es/common/components/msem-preset-editor/editors/index.js +13 -0
  54. package/es/common/components/msem-preset-editor/editors/lodgings.d.ts +16 -0
  55. package/es/common/components/msem-preset-editor/editors/lodgings.d.ts.map +1 -0
  56. package/es/common/components/msem-preset-editor/editors/lodgings.js +199 -0
  57. package/es/common/components/msem-preset-editor/editors/lodgings.module.css +21 -0
  58. package/es/common/components/msem-preset-editor/editors/ski-passes.d.ts +15 -0
  59. package/es/common/components/msem-preset-editor/editors/ski-passes.d.ts.map +1 -0
  60. package/es/common/components/msem-preset-editor/editors/ski-passes.js +196 -0
  61. package/es/common/components/msem-preset-editor/editors/ski-passes.module.css +25 -0
  62. package/es/common/components/msem-preset-editor/editors/standard-products.d.ts +15 -0
  63. package/es/common/components/msem-preset-editor/editors/standard-products.d.ts.map +1 -0
  64. package/es/common/components/msem-preset-editor/editors/standard-products.js +64 -0
  65. package/es/common/components/msem-preset-editor/editors/vakario.d.ts +14 -0
  66. package/es/common/components/msem-preset-editor/editors/vakario.d.ts.map +1 -0
  67. package/es/common/components/msem-preset-editor/editors/vakario.js +181 -0
  68. package/es/common/components/msem-preset-editor/index.js +2 -0
  69. package/es/common/components/msem-preset-editor/msem-preset-editor.d.ts +27 -0
  70. package/es/common/components/msem-preset-editor/msem-preset-editor.d.ts.map +1 -0
  71. package/es/common/components/msem-preset-editor/msem-preset-editor.js +130 -0
  72. package/es/common/components/msem-preset-editor/msem-preset-editor.module.css +49 -0
  73. package/es/common/components/msem-preset-editor/services/api.d.ts +15 -0
  74. package/es/common/components/msem-preset-editor/services/api.d.ts.map +1 -0
  75. package/es/common/components/msem-preset-editor/services/api.js +74 -0
  76. package/es/common/components/msem-preset-editor/services/offers.d.ts +47 -0
  77. package/es/common/components/msem-preset-editor/services/offers.d.ts.map +1 -0
  78. package/es/common/components/msem-preset-editor/services/offers.js +39 -0
  79. package/es/common/components/msem-preset-editor/services/preset.d.ts +40 -0
  80. package/es/common/components/msem-preset-editor/services/preset.d.ts.map +1 -0
  81. package/es/common/components/msem-preset-editor/services/preset.js +15 -0
  82. package/es/common/components/msem-preset-editor/services/url-params.d.ts +3 -0
  83. package/es/common/components/msem-preset-editor/services/url-params.d.ts.map +1 -0
  84. package/es/common/components/msem-preset-editor/services/url-params.js +26 -0
  85. package/es/common/components/msem-preset-linker/components/actions.d.ts +11 -0
  86. package/es/common/components/msem-preset-linker/components/actions.d.ts.map +1 -0
  87. package/es/common/components/msem-preset-linker/components/actions.js +43 -0
  88. package/es/common/components/msem-preset-linker/components/actions.module.css +66 -0
  89. package/es/common/components/msem-preset-linker/components/overlays.d.ts +8 -0
  90. package/es/common/components/msem-preset-linker/components/overlays.d.ts.map +1 -0
  91. package/es/common/components/msem-preset-linker/components/overlays.js +47 -0
  92. package/es/common/components/msem-preset-linker/components/overlays.module.css +64 -0
  93. package/es/common/components/msem-preset-linker/components/resort-selector.d.ts +6 -0
  94. package/es/common/components/msem-preset-linker/components/resort-selector.d.ts.map +1 -0
  95. package/es/common/components/msem-preset-linker/components/resort-selector.js +12 -0
  96. package/es/common/components/msem-preset-linker/hooks/use-msem-presets.d.ts +4 -0
  97. package/es/common/components/msem-preset-linker/hooks/use-msem-presets.d.ts.map +1 -0
  98. package/es/common/components/msem-preset-linker/hooks/use-msem-presets.js +36 -0
  99. package/es/common/components/msem-preset-linker/index.d.ts +3 -0
  100. package/es/common/components/msem-preset-linker/index.d.ts.map +1 -0
  101. package/es/common/components/msem-preset-linker/index.js +2 -0
  102. package/es/common/components/msem-preset-linker/msem-preset-linker.d.ts +29 -0
  103. package/es/common/components/msem-preset-linker/msem-preset-linker.d.ts.map +1 -0
  104. package/es/common/components/msem-preset-linker/msem-preset-linker.js +54 -0
  105. package/es/common/components/msem-preset-linker/msem-preset-linker.module.css +23 -0
  106. package/es/common/components/msem-preset-linker/services/url-params.d.ts +2 -0
  107. package/es/common/components/msem-preset-linker/services/url-params.d.ts.map +1 -0
  108. package/es/common/components/msem-preset-linker/services/url-params.js +13 -0
  109. package/es/common/components/plausible/services/callback.js +0 -1
  110. package/es/common/components/scrolling-carousel/scrolling-carousel.d.ts +2 -2
  111. package/es/common/components/scrolling-carousel/scrolling-carousel.d.ts.map +1 -1
  112. package/es/common/components/tabbed-zones.d.ts +3 -4
  113. package/es/common/components/tabbed-zones.d.ts.map +1 -1
  114. package/es/common/hooks/use-in-view.d.ts +1 -1
  115. package/es/common/hooks/use-in-view.d.ts.map +1 -1
  116. package/es/common/hooks/use-scroll-direction.d.ts +2 -2
  117. package/es/common/hooks/use-scroll-direction.d.ts.map +1 -1
  118. package/es/common/hooks/use-tunnel.d.ts +1 -1
  119. package/es/common/hooks/use-tunnel.d.ts.map +1 -1
  120. package/es/common/hooks/use-window-sizes.d.ts +1 -1
  121. package/es/common/hooks/use-window-sizes.d.ts.map +1 -1
  122. package/es/common/utils/fetcher.js +0 -1
  123. package/es/common/utils/msem-widget.d.ts +3 -4
  124. package/es/common/utils/msem-widget.d.ts.map +1 -1
  125. package/es/esf/components/covid-link/index.js +0 -6
  126. package/es/esf/components/cp-form.js +0 -1
  127. package/es/esf/components/magic-box/magic-box.d.ts +3 -3
  128. package/es/esf/components/magic-box/magic-box.d.ts.map +1 -1
  129. package/es/esf/components/parcours-esf/parcours-esf.d.ts +2 -3
  130. package/es/esf/components/parcours-esf/parcours-esf.d.ts.map +1 -1
  131. package/es/esf/components/period-picker/services/dates.js +0 -1
  132. package/es/esf/components/village-maps/utils.js +0 -1
  133. package/es/esf/components/week-picker/index.js +1 -2
  134. package/es/esf/components/week-picker/utils.js +0 -1
  135. package/es/esf/components/week-picker-2/index.js +1 -2
  136. package/es/esf/components/week-picker-2/utils.js +0 -1
  137. package/package.json +34 -30
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ski-passes.d.ts","sourceRoot":"","sources":["../../../../../src/common/components/msem-preset-editor/editors/ski-passes.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAU/B,KAAK,KAAK,GAAG;IACX,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,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AA4DF,MAAM,CAAC,OAAO,UAAU,SAAS,CAAC,EAChC,MAAM,EACN,SAAS,EACT,IAAI,EACJ,mBAAmB,EACnB,UAAU,EACV,OAAO,GACR,EAAE,KAAK,2CAmRP"}
@@ -0,0 +1,196 @@
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({ preset, setPreset, stay, setShowPresetDialog, testPreset, baseUrl, }) {
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 formatedTags = 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, ...formatedTags];
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(merchant);
128
+ setCatalogs(catalogs);
129
+ }
130
+ catch (e) {
131
+ setCatalogs([]);
132
+ }
133
+ };
134
+ runEffect();
135
+ }
136
+ }, [isReady, merchant]);
137
+ React.useEffect(() => {
138
+ if (catalog) {
139
+ const initFilters = async () => {
140
+ setLoading(true);
141
+ const filters = await API.getSkiPassesFilters(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]);
157
+ React.useEffect(() => {
158
+ setPreset((current = {}) => {
159
+ return {
160
+ ...current,
161
+ options: {
162
+ ...(current?.options || {}),
163
+ catalog,
164
+ },
165
+ presets: {
166
+ ...(current?.presets || {}),
167
+ ...data,
168
+ },
169
+ url: baseUrl || undefined,
170
+ };
171
+ });
172
+ }, [catalog, data, baseUrl, setPreset]);
173
+ return (_jsxs(Form, { title: "Presets forfaits", width: 420, preset: preset, buttonsActions: {
174
+ testPreset,
175
+ cancelPreset,
176
+ confirmPreset: hasCatalog ? confirmPreset : undefined,
177
+ }, 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) => {
178
+ const { code, label, ageMin, ageMax } = skier;
179
+ const title = `${label} (de ${ageMin} à ${ageMax} ans)`;
180
+ const value = data.skiers?.filter((skier) => skier === code)?.length || 0;
181
+ return (_jsx(NumberPicker, { label: title, min: 0, max: 20, value: value, disabled: false, onChange: updateSkiers(code), withInput: true }, code));
182
+ })] })), _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) ||
183
+ 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 }))] })] }))] }));
184
+ }
185
+ function getDefaultData(preset) {
186
+ if (!preset?.presets)
187
+ return DEFAULT_DATA;
188
+ const { skiers, firstSkiDate, activities, domains, durations } = preset.presets;
189
+ return {
190
+ skiers: skiers || DEFAULT_DATA.skiers,
191
+ firstSkiDate: firstSkiDate || DEFAULT_DATA.firstSkiDate,
192
+ activities: activities || DEFAULT_DATA.activities,
193
+ domains: domains || DEFAULT_DATA.domains,
194
+ durations: durations || DEFAULT_DATA.durations,
195
+ };
196
+ }
@@ -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,15 @@
1
+ import * as React from "react";
2
+ type Props = {
3
+ stay: {
4
+ from: string;
5
+ to: string;
6
+ };
7
+ facet: string;
8
+ preset: Record<string, any> | null;
9
+ setPreset: React.Dispatch<React.SetStateAction<Record<string, any> | null>>;
10
+ setShowPresetDialog: React.Dispatch<React.SetStateAction<boolean>>;
11
+ testPreset: () => void;
12
+ };
13
+ export default function StandardProducts({ preset, setPreset, facet, setShowPresetDialog, testPreset, }: Props): import("react/jsx-runtime").JSX.Element;
14
+ export {};
15
+ //# sourceMappingURL=standard-products.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"standard-products.d.ts","sourceRoot":"","sources":["../../../../../src/common/components/msem-preset-editor/editors/standard-products.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAK/B,KAAK,KAAK,GAAG;IACX,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,UAAU,EAAE,MAAM,IAAI,CAAC;CACxB,CAAC;AAMF,MAAM,CAAC,OAAO,UAAU,gBAAgB,CAAC,EACvC,MAAM,EACN,SAAS,EACT,KAAK,EACL,mBAAmB,EACnB,UAAU,GACX,EAAE,KAAK,2CA2EP"}
@@ -0,0 +1,64 @@
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({ preset, setPreset, facet, setShowPresetDialog, 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 formatedCategories = 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(facet, merchant);
30
+ setProductCategories(categories);
31
+ }
32
+ catch (e) {
33
+ // eslint-disable-next-line no-console
34
+ console.error(e);
35
+ }
36
+ finally {
37
+ setLoading(false);
38
+ }
39
+ };
40
+ runEffect();
41
+ }, [facet, merchant]);
42
+ React.useEffect(() => {
43
+ setPreset((current = {}) => {
44
+ return {
45
+ ...current,
46
+ presets: {
47
+ ...(current?.presets || {}),
48
+ productCategory: selectedProductCategory,
49
+ },
50
+ };
51
+ });
52
+ }, [selectedProductCategory, setPreset]);
53
+ return (_jsx(Form, { title: "Presets activit\u00E9s Elloha", width: 420, preset: preset, buttonsActions: {
54
+ testPreset,
55
+ cancelPreset,
56
+ confirmPreset: selectedProductCategory ? confirmPreset : undefined,
57
+ }, children: _jsx(Select, { label: "Cat\u00E9gorie de produit", placeholder: "S\u00E9lectionnez une cat\u00E9gorie", options: formatedCategories, value: selectedProductCategory, onValueChange: setSelectedProductCategory, disabled: loading }) }));
58
+ }
59
+ function getDefaultData(preset) {
60
+ if (!preset?.presets)
61
+ return DEFAULT_DATA;
62
+ const { productCategory } = preset.presets;
63
+ return productCategory || DEFAULT_DATA.productCategory;
64
+ }
@@ -0,0 +1,14 @@
1
+ import * as React from "react";
2
+ type Props = {
3
+ stay: {
4
+ from: string;
5
+ to: string;
6
+ };
7
+ preset: Record<string, any> | null;
8
+ setPreset: React.Dispatch<React.SetStateAction<Record<string, any> | null>>;
9
+ setShowPresetDialog: React.Dispatch<React.SetStateAction<boolean>>;
10
+ testPreset: () => void;
11
+ };
12
+ export default function Vakario({ preset, setPreset, setShowPresetDialog, testPreset, }: Props): import("react/jsx-runtime").JSX.Element;
13
+ export {};
14
+ //# sourceMappingURL=vakario.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vakario.d.ts","sourceRoot":"","sources":["../../../../../src/common/components/msem-preset-editor/editors/vakario.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAK/B,KAAK,KAAK,GAAG;IACX,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,UAAU,EAAE,MAAM,IAAI,CAAC;CACxB,CAAC;AASF,MAAM,CAAC,OAAO,UAAU,OAAO,CAAC,EAC9B,MAAM,EACN,SAAS,EACT,mBAAmB,EACnB,UAAU,GACX,EAAE,KAAK,2CAyNP"}
@@ -0,0 +1,181 @@
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({ preset, setPreset, setShowPresetDialog, 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 { 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(merchant);
53
+ const formatedKinds = kinds.map(({ code, name }) => ({
54
+ label: name,
55
+ value: code,
56
+ }));
57
+ setKindCodes(formatedKinds);
58
+ setData((data) => ({
59
+ ...data,
60
+ ageCodes: "",
61
+ categoryCodes: "",
62
+ levelCodes: "",
63
+ }));
64
+ }
65
+ catch (e) {
66
+ // eslint-disable-next-line no-console
67
+ console.error(e);
68
+ }
69
+ finally {
70
+ setLoading(false);
71
+ }
72
+ };
73
+ runEffect();
74
+ }, [merchant]);
75
+ React.useEffect(() => {
76
+ if (data.kindCodes) {
77
+ const runEffect = async () => {
78
+ try {
79
+ setLoading(true);
80
+ const ages = await API.getVakarioAges(merchant, data.kindCodes);
81
+ const formatedAges = ages.map(({ code, name }) => ({
82
+ label: name,
83
+ value: code,
84
+ }));
85
+ setAgeCodes(formatedAges);
86
+ setData((data) => ({ ...data, categoryCodes: "", levelCodes: "" }));
87
+ }
88
+ catch (e) {
89
+ // eslint-disable-next-line no-console
90
+ console.error(e);
91
+ }
92
+ finally {
93
+ setLoading(false);
94
+ }
95
+ };
96
+ runEffect();
97
+ }
98
+ }, [merchant, data.kindCodes]);
99
+ React.useEffect(() => {
100
+ if (data.kindCodes && data.ageCodes) {
101
+ const runEffect = async () => {
102
+ try {
103
+ setLoading(true);
104
+ const categories = await API.getVakarioCategories(merchant, data.kindCodes, data.ageCodes);
105
+ const formatedCategories = categories.map(({ code, name }) => ({
106
+ label: name,
107
+ value: code,
108
+ }));
109
+ setCategoryCodes(formatedCategories);
110
+ setData((data) => ({ ...data, levelCodes: "" }));
111
+ }
112
+ catch (e) {
113
+ // eslint-disable-next-line no-console
114
+ console.error(e);
115
+ }
116
+ finally {
117
+ setLoading(false);
118
+ }
119
+ };
120
+ runEffect();
121
+ }
122
+ }, [merchant, data.kindCodes, data.ageCodes]);
123
+ React.useEffect(() => {
124
+ if (data.kindCodes && data.ageCodes && data.categoryCodes) {
125
+ const runEffect = async () => {
126
+ try {
127
+ setLoading(true);
128
+ const levels = await API.getVakarioLevels(merchant, data.kindCodes, data.ageCodes, data.categoryCodes);
129
+ const formatedLevels = levels.map(({ code, name }) => ({
130
+ label: name,
131
+ value: code,
132
+ }));
133
+ setLevelCodes(formatedLevels);
134
+ }
135
+ catch (e) {
136
+ // eslint-disable-next-line no-console
137
+ console.error(e);
138
+ }
139
+ finally {
140
+ setLoading(false);
141
+ }
142
+ };
143
+ runEffect();
144
+ }
145
+ }, [merchant, data.kindCodes, data.ageCodes, data.categoryCodes]);
146
+ React.useEffect(() => {
147
+ setPreset((current = {}) => {
148
+ const { kindCodes, ageCodes, categoryCodes, levelCodes } = data;
149
+ return {
150
+ ...current,
151
+ presets: {
152
+ ...(current?.presets || {}),
153
+ kindCodes: kindCodes ? [kindCodes] : undefined,
154
+ ageCodes: ageCodes ? [ageCodes] : undefined,
155
+ categoryCodes: categoryCodes ? [categoryCodes] : undefined,
156
+ levelCodes: levelCodes ? [levelCodes] : undefined,
157
+ },
158
+ };
159
+ });
160
+ }, [data, setPreset]);
161
+ return (_jsxs(Form, { title: "Presets activit\u00E9s Vakario", width: 420, preset: preset, buttonsActions: {
162
+ testPreset,
163
+ cancelPreset,
164
+ confirmPreset,
165
+ }, 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 &&
166
+ data.kindCodes &&
167
+ data.ageCodes &&
168
+ data.categoryCodes &&
169
+ !data.levelCodes, disabled: !data.kindCodes || !data.ageCodes || !data.categoryCodes })] }));
170
+ }
171
+ function getDefaultData(preset) {
172
+ if (!preset?.presets && !preset?.options)
173
+ return DEFAULT_DATA;
174
+ const { kindCodes, ageCodes, categoryCodes, levelCodes } = preset?.presets || {};
175
+ return {
176
+ kindCodes: kindCodes || DEFAULT_DATA.kindCodes,
177
+ ageCodes: ageCodes || DEFAULT_DATA.ageCodes,
178
+ categoryCodes: categoryCodes || DEFAULT_DATA.categoryCodes,
179
+ levelCodes: levelCodes || DEFAULT_DATA.levelCodes,
180
+ };
181
+ }
@@ -0,0 +1,2 @@
1
+ import MseMPresetEditor from "./msem-preset-editor";
2
+ export default MseMPresetEditor;
@@ -0,0 +1,27 @@
1
+ import * as React from "react";
2
+ type Props = {
3
+ lang: "fr" | "en";
4
+ options: {
5
+ channel: string;
6
+ resort?: string | number;
7
+ cartUrl?: string;
8
+ analytics?: () => void;
9
+ };
10
+ urls?: {
11
+ override?: string;
12
+ skiPasses?: {
13
+ winter: string;
14
+ summer: string;
15
+ };
16
+ lodgings?: {
17
+ winter: string;
18
+ summer: string;
19
+ };
20
+ };
21
+ selectedPreset?: string | null;
22
+ onChange?: (preset: Record<string, any> | null) => void;
23
+ children?: React.ReactNode;
24
+ };
25
+ export default function MseMPresetEditor({ lang, options, urls, selectedPreset, onChange, children, }: Props): import("react/jsx-runtime").JSX.Element | null;
26
+ export {};
27
+ //# sourceMappingURL=msem-preset-editor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"msem-preset-editor.d.ts","sourceRoot":"","sources":["../../../../src/common/components/msem-preset-editor/msem-preset-editor.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAoB/B,KAAK,KAAK,GAAG;IACX,IAAI,EAAE,IAAI,GAAG,IAAI,CAAC;IAClB,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,IAAI,CAAC,EAAE;QACL,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,SAAS,CAAC,EAAE;YAAE,MAAM,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAA;SAAE,CAAC;QAC/C,QAAQ,CAAC,EAAE;YAAE,MAAM,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAA;SAAE,CAAC;KAC/C,CAAC;IACF,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;IACxD,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC5B,CAAC;AAEF,MAAM,CAAC,OAAO,UAAU,gBAAgB,CAAC,EACvC,IAAI,EACJ,OAAO,EACP,IAAI,EACJ,cAAc,EACd,QAAQ,EACR,QAAQ,GACT,EAAE,KAAK,kDA6KP"}