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,115 @@
1
+ .item {
2
+ position: relative;
3
+ display: flex;
4
+ flex-direction: column;
5
+ }
6
+
7
+ .button {
8
+ width: 100%;
9
+ justify-content: flex-start;
10
+ gap: 10px;
11
+ font-weight: 400;
12
+ text-align: left;
13
+ padding-right: 100px;
14
+ background-color: var(--ublo-grey-100, #f5f5f5);
15
+ border-radius: var(--ublo-radius-200, 10px);
16
+ }
17
+
18
+ .selected .button {
19
+ color: var(--ublo-primary-color, #073ff8);
20
+ font-weight: 700;
21
+ background-color: var(--ublo-blue-100, #e8f0fc);
22
+ }
23
+
24
+ .opened .button {
25
+ border-bottom-right-radius: 0;
26
+ }
27
+
28
+ .logo {
29
+ flex: 0 0 36px;
30
+ width: 36px;
31
+ height: 36px;
32
+ display: flex;
33
+ align-items: center;
34
+ justify-content: center;
35
+ background-color: var(--ublo-secondary-color, #4177f6);
36
+ border-radius: var(--ublo-radius-200, 10px);
37
+ }
38
+
39
+ .logo img {
40
+ width: 24px;
41
+ height: 24px;
42
+ filter: brightness(0) invert(1);
43
+ }
44
+
45
+ .name {
46
+ color: var(--ublo-grey-600, #1b1b1b);
47
+ }
48
+
49
+ .selected .name {
50
+ color: var(--ublo-primary-color, #073ff8);
51
+ }
52
+
53
+ .actions {
54
+ position: absolute;
55
+ top: 12px;
56
+ right: 12px;
57
+ display: flex;
58
+ gap: 4px;
59
+ }
60
+
61
+ .action {
62
+ border-radius: var(--ublo-radius-100, 3px);
63
+ }
64
+
65
+ .list {
66
+ width: calc(100% - 28px);
67
+ max-height: 140px;
68
+ display: flex;
69
+ flex-direction: column;
70
+ margin-left: auto;
71
+ padding: 6px;
72
+ border-radius: 0 0 var(--ublo-radius-200, 10px) var(--ublo-radius-200, 10px);
73
+ overflow: auto;
74
+ overscroll-behavior: contain;
75
+ background: linear-gradient(
76
+ var(--ublo-grey-100, #f5f5f5) 30%,
77
+ hsla(0, 0%, 100%, 0)
78
+ ),
79
+ linear-gradient(hsla(0, 0%, 100%, 0), var(--ublo-grey-100, #f5f5f5) 70%) 0
80
+ 100%,
81
+ radial-gradient(farthest-side at 50% 0, rgba(0, 0, 0, 0.2), transparent),
82
+ radial-gradient(farthest-side at 50% 100%, rgba(0, 0, 0, 0.2), transparent)
83
+ 0 100%;
84
+ background-repeat: no-repeat;
85
+ background-size: 100% 40px, 100% 40px, 100% 14px, 100% 14px;
86
+ background-attachment: local, local, scroll, scroll;
87
+ background-color: var(--ublo-grey-100, #f5f5f5);
88
+ }
89
+
90
+ .sub {
91
+ position: relative;
92
+ }
93
+
94
+ .subButton {
95
+ width: 100%;
96
+ justify-content: flex-start;
97
+ padding-right: 68px;
98
+ font-weight: 400;
99
+ text-align: left;
100
+ }
101
+
102
+ .subButtonSelected {
103
+ color: var(--ublo-primary-color, #073ff8);
104
+ font-weight: 700;
105
+ background-color: var(--ublo-blue-100, #e8f0fc);
106
+ }
107
+
108
+ .subActions {
109
+ position: absolute;
110
+ top: 50%;
111
+ right: 8px;
112
+ display: flex;
113
+ gap: 4px;
114
+ transform: translateY(-50%);
115
+ }
@@ -0,0 +1,17 @@
1
+ import * as React from "react";
2
+ import type { Offer } from "../services/offers";
3
+ type Props = {
4
+ lang: "fr" | "en";
5
+ channel: string;
6
+ resort: number | string;
7
+ facet: string;
8
+ preset: Record<string, any> | null;
9
+ updatePreset: (item: Offer, subPreset?: Offer) => void;
10
+ removePreset: () => void;
11
+ error: string | null;
12
+ setError: React.Dispatch<React.SetStateAction<string | null>>;
13
+ setShowPresetDialog: React.Dispatch<React.SetStateAction<boolean>>;
14
+ };
15
+ export default function WidgetList({ lang, channel, resort, facet, preset, updatePreset, removePreset, setError, setShowPresetDialog, }: Props): import("react/jsx-runtime").JSX.Element;
16
+ export {};
17
+ //# sourceMappingURL=widget-list.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"widget-list.d.ts","sourceRoot":"","sources":["../../../../../src/common/components/msem-preset-editor/components/widget-list.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAGhD,KAAK,KAAK,GAAG;IACX,IAAI,EAAE,IAAI,GAAG,IAAI,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC;IACnC,YAAY,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,SAAS,CAAC,EAAE,KAAK,KAAK,IAAI,CAAC;IACvD,YAAY,EAAE,MAAM,IAAI,CAAC;IACzB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC;IAC9D,mBAAmB,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC;CACpE,CAAC;AAEF,MAAM,CAAC,OAAO,UAAU,UAAU,CAAC,EACjC,IAAI,EACJ,OAAO,EACP,MAAM,EACN,KAAK,EACL,MAAM,EACN,YAAY,EACZ,YAAY,EACZ,QAAQ,EACR,mBAAmB,GACpB,EAAE,KAAK,2CA8CP"}
@@ -0,0 +1,34 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import * as React from "react";
3
+ import Loader from "dt-design-system/es/loader";
4
+ import WidgetListItem from "./widget-list-item";
5
+ import * as Offers from "../services/offers";
6
+ import css from "./widget-list.module.css";
7
+ export default function WidgetList({ lang, channel, resort, facet, preset, updatePreset, removePreset, setError, setShowPresetDialog, }) {
8
+ const [offers, setOffers] = React.useState(null);
9
+ const [loading, setLoading] = React.useState(false);
10
+ React.useEffect(() => {
11
+ const runEffect = async () => {
12
+ setError(null);
13
+ setOffers(null);
14
+ setLoading(true);
15
+ try {
16
+ const offers = (await Offers.get(lang, channel, resort, facet));
17
+ const filteredOffers = offers.filter(({ kind }) => {
18
+ return kind !== "FFS" && kind !== "ASSU";
19
+ });
20
+ setOffers(filteredOffers);
21
+ }
22
+ catch (e) {
23
+ setError("Une erreur est survenue lors de la récupération des offres");
24
+ }
25
+ finally {
26
+ setLoading(false);
27
+ }
28
+ };
29
+ runEffect();
30
+ }, [channel, facet, lang, resort, setError]);
31
+ return (_jsxs("div", { className: css.list, children: [loading && _jsx(Loader, { className: css.loader }), offers?.map((offer, i) => {
32
+ return (_jsx(WidgetListItem, { item: offer, preset: preset, updatePreset: updatePreset, removePreset: removePreset, setShowPresetDialog: setShowPresetDialog }, i));
33
+ })] }));
34
+ }
@@ -0,0 +1,12 @@
1
+ .list {
2
+ display: flex;
3
+ flex-direction: column;
4
+ gap: 4px;
5
+ }
6
+
7
+ .loader {
8
+ --ds-loader-spinner-size: 30px;
9
+ --ds-loader-thickness: 3px;
10
+
11
+ margin-top: 10px;
12
+ }
@@ -0,0 +1,29 @@
1
+ import * as React from "react";
2
+ type Props = {
3
+ lang: "fr" | "en";
4
+ options: {
5
+ channel: string;
6
+ resort: string;
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
+ target: HTMLElement | null;
22
+ updatePreset: (preset: any) => any;
23
+ closeEditor: () => void;
24
+ removeObsoletePreset: () => void;
25
+ children?: React.ReactNode;
26
+ };
27
+ export default function EditorDialog({ lang, options, urls, target, updatePreset, closeEditor, removeObsoletePreset, children, }: Props): import("react/jsx-runtime").JSX.Element;
28
+ export {};
29
+ //# sourceMappingURL=editor-dialog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"editor-dialog.d.ts","sourceRoot":"","sources":["../../../../src/common/components/msem-preset-editor/editor-dialog.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAO/B,KAAK,KAAK,GAAG;IACX,IAAI,EAAE,IAAI,GAAG,IAAI,CAAC;IAClB,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;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,MAAM,EAAE,WAAW,GAAG,IAAI,CAAC;IAC3B,YAAY,EAAE,CAAC,MAAM,EAAE,GAAG,KAAK,GAAG,CAAC;IACnC,WAAW,EAAE,MAAM,IAAI,CAAC;IACxB,oBAAoB,EAAE,MAAM,IAAI,CAAC;IACjC,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC5B,CAAC;AAEF,MAAM,CAAC,OAAO,UAAU,YAAY,CAAC,EACnC,IAAI,EACJ,OAAO,EACP,IAAI,EACJ,MAAM,EACN,YAAY,EACZ,WAAW,EACX,oBAAoB,EACpB,QAAQ,GACT,EAAE,KAAK,2CAqDP"}
@@ -0,0 +1,16 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import * as React from "react";
3
+ import Dialog from "dt-design-system/es/dialog";
4
+ import Button from "dt-design-system/es/button";
5
+ import * as Icons from "dt-design-system/es/icons";
6
+ import MseMPresetEditor from "./msem-preset-editor";
7
+ import css from "./editor-dialog.module.css";
8
+ export default function EditorDialog({ lang, options, urls, target, updatePreset, closeEditor, removeObsoletePreset, children, }) {
9
+ const selectedPreset = target?.getAttribute("data-msem-preset");
10
+ const [preset, setPreset] = React.useState(selectedPreset ? JSON.parse(selectedPreset) : null);
11
+ const hasObsoletePreset = target?.hasAttribute("data-config");
12
+ const updateNewPreset = React.useCallback(() => {
13
+ updatePreset(preset);
14
+ }, [preset, updatePreset]);
15
+ return (_jsxs(Dialog, { className: css.dialog, isOpened: !!target, container: null, close: closeEditor, showAsModal: false, closeOnBackdropClick: false, children: [_jsx("div", { className: css.title, children: "Choisissez un widget" }), _jsx("div", { className: css.subtitle, children: "Ce dernier s'ouvrira au clic sur la section selectionn\u00E9e." }), _jsx(MseMPresetEditor, { lang: lang, options: options, urls: urls, selectedPreset: selectedPreset, onChange: setPreset, children: children }), _jsxs("div", { className: css.buttons, children: [hasObsoletePreset && (_jsxs(Button, { variant: "danger", className: css.removeObsolete, onClick: removeObsoletePreset, children: [_jsx(Icons.MdOutlineCleaningServices, {}), "Nettoyer le preset obsol\u00E8te"] })), _jsx(Button, { variant: "secondary", onClick: closeEditor, children: "Annuler" }), _jsx(Button, { variant: "primary", onClick: updateNewPreset, children: "Valider" })] })] }));
16
+ }
@@ -0,0 +1,31 @@
1
+ .dialog {
2
+ display: flex;
3
+ flex-direction: column;
4
+ padding: 16px;
5
+ pointer-events: auto;
6
+ }
7
+
8
+ .title {
9
+ margin-bottom: 8px;
10
+ font-size: 24px;
11
+ font-weight: 700;
12
+ line-height: 1;
13
+ }
14
+
15
+ .subtitle {
16
+ margin-bottom: 16px;
17
+ padding-right: 48px;
18
+ font-size: 14px;
19
+ line-height: 1;
20
+ }
21
+
22
+ .buttons {
23
+ display: flex;
24
+ justify-content: flex-end;
25
+ gap: 8px;
26
+ margin-top: 22px;
27
+ }
28
+
29
+ .removeObsolete {
30
+ margin-right: auto;
31
+ }
@@ -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 Elloha({ preset, setPreset, stay, setShowPresetDialog, testPreset, }: Props): import("react/jsx-runtime").JSX.Element;
13
+ export {};
14
+ //# sourceMappingURL=elloha.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"elloha.d.ts","sourceRoot":"","sources":["../../../../../src/common/components/msem-preset-editor/editors/elloha.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAM/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;AAWF,MAAM,CAAC,OAAO,UAAU,MAAM,CAAC,EAC7B,MAAM,EACN,SAAS,EACT,IAAI,EACJ,mBAAmB,EACnB,UAAU,GACX,EAAE,KAAK,2CAyFP"}
@@ -0,0 +1,69 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import * as React from "react";
3
+ import MultipleSelect from "dt-design-system/es/multiple-select";
4
+ import Form from "../components/form";
5
+ import * as API from "../services/api";
6
+ import css from "./elloha.module.css";
7
+ const DEFAULT_DATA = {
8
+ groupNames: [],
9
+ };
10
+ export default function Elloha({ preset, setPreset, stay, setShowPresetDialog, testPreset, }) {
11
+ const savedPreset = React.useRef(preset);
12
+ const [loading, setLoading] = React.useState(false);
13
+ const [groupNames, setGroupNames] = React.useState([]);
14
+ const [selectedGroups, setSelectedGroups] = React.useState(getDefaultData(preset));
15
+ const { merchant } = preset?.options || {};
16
+ const error = !stay?.from || !stay?.to;
17
+ const cancelPreset = () => {
18
+ setPreset(savedPreset.current);
19
+ setShowPresetDialog(false);
20
+ };
21
+ const confirmPreset = () => {
22
+ setShowPresetDialog(false);
23
+ };
24
+ React.useEffect(() => {
25
+ if (!error) {
26
+ const runEffect = async () => {
27
+ try {
28
+ setLoading(true);
29
+ const { kinds } = await API.getEllohaGroups(merchant, stay.from);
30
+ const allGroups = kinds.map((k) => k.group).filter(Boolean);
31
+ const groups = [...new Set(allGroups)];
32
+ setGroupNames(groups);
33
+ }
34
+ catch (e) {
35
+ // eslint-disable-next-line no-console
36
+ console.error(e);
37
+ }
38
+ finally {
39
+ setLoading(false);
40
+ }
41
+ };
42
+ runEffect();
43
+ }
44
+ }, [error, merchant, stay.from]);
45
+ React.useEffect(() => {
46
+ setPreset((current = {}) => {
47
+ return {
48
+ ...current,
49
+ presets: {
50
+ ...(current?.presets || {}),
51
+ groupNames: selectedGroups,
52
+ },
53
+ };
54
+ });
55
+ }, [selectedGroups, setPreset]);
56
+ return (_jsxs(Form, { title: "Presets activit\u00E9s Elloha", width: 420, preset: preset, buttonsActions: {
57
+ testPreset,
58
+ cancelPreset,
59
+ confirmPreset: error || groupNames.length === 0 ? undefined : confirmPreset,
60
+ }, children: [!error && (_jsx(MultipleSelect, { label: "Groupes", options: groupNames, values: selectedGroups, onChange: setSelectedGroups, placeholder: "S\u00E9lectionnez un ou plusieurs groupes", loading: loading, disabled: groupNames.length === 0, error: !loading &&
61
+ groupNames.length === 0 &&
62
+ "Aucun groupe disponible à ces dates" })), error && (_jsx("div", { className: css.error, children: "Vous devez renseigner des dates de s\u00E9jour pour afficher les groupes" }))] }));
63
+ }
64
+ function getDefaultData(preset) {
65
+ if (!preset?.presets)
66
+ return DEFAULT_DATA;
67
+ const { groupNames } = preset.presets;
68
+ return groupNames || DEFAULT_DATA.groupNames;
69
+ }
@@ -0,0 +1,8 @@
1
+ .error {
2
+ padding: 10px;
3
+ font-size: 12px;
4
+ text-align: center;
5
+ color: var(--ds-red-500, #990700);
6
+ background-color: var(--ds-red-200, #fde7e7);
7
+ border-radius: var(--ublo-radius-200, 10px);
8
+ }
@@ -0,0 +1,14 @@
1
+ import SkiPasses from "./ski-passes";
2
+ import Lodgings from "./lodgings";
3
+ import Elloha from "./elloha";
4
+ import Vakario from "./vakario";
5
+ import StandardProducts from "./standard-products";
6
+ declare const Editor: {
7
+ lodging: typeof Lodgings;
8
+ skiPass: typeof SkiPasses;
9
+ elloha: typeof Elloha;
10
+ vakario: typeof Vakario;
11
+ otherProducts: typeof StandardProducts;
12
+ };
13
+ export default Editor;
14
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/common/components/msem-preset-editor/editors/index.tsx"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,cAAc,CAAC;AACrC,OAAO,QAAQ,MAAM,YAAY,CAAC;AAClC,OAAO,MAAM,MAAM,UAAU,CAAC;AAC9B,OAAO,OAAO,MAAM,WAAW,CAAC;AAChC,OAAO,gBAAgB,MAAM,qBAAqB,CAAC;AAEnD,QAAA,MAAM,MAAM;;;;;;CAMX,CAAC;AAEF,eAAe,MAAM,CAAC"}
@@ -0,0 +1,13 @@
1
+ import SkiPasses from "./ski-passes";
2
+ import Lodgings from "./lodgings";
3
+ import Elloha from "./elloha";
4
+ import Vakario from "./vakario";
5
+ import StandardProducts from "./standard-products";
6
+ const Editor = {
7
+ lodging: Lodgings,
8
+ skiPass: SkiPasses,
9
+ elloha: Elloha,
10
+ vakario: Vakario,
11
+ otherProducts: StandardProducts,
12
+ };
13
+ export default Editor;
@@ -0,0 +1,16 @@
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
+ onChange: (preset: Record<string, any>) => void;
12
+ baseUrl: string;
13
+ };
14
+ export default function Lodgings({ preset, setPreset, setShowPresetDialog, testPreset, onChange, baseUrl, }: Props): import("react/jsx-runtime").JSX.Element;
15
+ export {};
16
+ //# sourceMappingURL=lodgings.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lodgings.d.ts","sourceRoot":"","sources":["../../../../../src/common/components/msem-preset-editor/editors/lodgings.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAS/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,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,IAAI,CAAC;IAChD,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAsCF,MAAM,CAAC,OAAO,UAAU,QAAQ,CAAC,EAC/B,MAAM,EACN,SAAS,EACT,mBAAmB,EACnB,UAAU,EACV,QAAQ,EACR,OAAO,GACR,EAAE,KAAK,2CAmSP"}
@@ -0,0 +1,199 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import * as React from "react";
3
+ import Checkbox from "dt-design-system/es/checkbox";
4
+ import NumberPicker from "dt-design-system/es/number-picker";
5
+ import Select from "dt-design-system/es/select";
6
+ import MultipleSelect from "dt-design-system/es/multiple-select";
7
+ import Form from "../components/form";
8
+ import * as API from "../services/api";
9
+ import css from "./lodgings.module.css";
10
+ const DEFAULT_DATA = {
11
+ adults: 0,
12
+ children: 0,
13
+ lodging: "",
14
+ standings: [],
15
+ options: [],
16
+ districts: [],
17
+ nbRooms: [],
18
+ roomType: "",
19
+ type: "",
20
+ openPage: false,
21
+ };
22
+ export default function Lodgings({ preset, setPreset, setShowPresetDialog, testPreset, onChange, baseUrl, }) {
23
+ const savedPreset = React.useRef(preset);
24
+ const [ready, setReady] = React.useState(false);
25
+ const [lodgings, setLogings] = React.useState([]);
26
+ const [filters, setFilters] = React.useState({
27
+ standings: [],
28
+ options: [],
29
+ districts: [],
30
+ });
31
+ const [rooms, setRooms] = React.useState([]);
32
+ const [loading, setLoading] = React.useState(false);
33
+ const [data, setData] = React.useState(getDefaultData(preset));
34
+ const kinds = [...new Set(lodgings.map(({ kind }) => kind))];
35
+ const { channel, resort, facet } = preset?.options || {};
36
+ const showLodgingPageCheckbox = !!data.lodging;
37
+ const showFilters = !data.lodging;
38
+ const updateField = (field) => (value) => {
39
+ setData({ ...data, [field]: value });
40
+ };
41
+ const updateRoomNb = (value) => {
42
+ setData({ ...data, nbRooms: value ? [value] : DEFAULT_DATA.nbRooms });
43
+ };
44
+ const updateFilter = (kind) => (newValue) => {
45
+ setData((data) => ({ ...data, [kind]: newValue.map((v) => v.value) }));
46
+ };
47
+ const formatedLodgings = lodgings.map((lodging) => ({
48
+ value: lodging.slug,
49
+ label: lodging.name,
50
+ }));
51
+ const formatedRooms = rooms.map((room) => ({
52
+ label: room.title,
53
+ value: room.type,
54
+ }));
55
+ const selectedStandings = data.standings?.map((standing) => filters?.standings?.find((d) => d.value === standing));
56
+ const selectedOptions = data.options?.map((option) => filters?.options?.find((d) => d.value === option));
57
+ const selectedDistricts = data.districts?.map((district) => filters?.districts?.find((d) => d.value === district));
58
+ const cancelPreset = () => {
59
+ setPreset(savedPreset.current);
60
+ setShowPresetDialog(false);
61
+ };
62
+ const confirmPreset = () => {
63
+ setShowPresetDialog(false);
64
+ };
65
+ React.useEffect(() => {
66
+ if (!ready) {
67
+ const init = async () => {
68
+ try {
69
+ setLoading(true);
70
+ const filters = await API.getLodgingFilters(channel, resort, facet);
71
+ const formatedFilters = Object.keys(filters).reduce((acc, key) => {
72
+ if (key === "accomodations")
73
+ return acc;
74
+ const filter = filters[key];
75
+ if (key === "districts") {
76
+ const entries = filter.map((entry) => ({
77
+ value: entry.id,
78
+ label: entry.name,
79
+ }));
80
+ return { ...acc, [key]: entries };
81
+ }
82
+ else {
83
+ const entries = filter.map((entry) => ({
84
+ value: entry.code,
85
+ label: entry.label,
86
+ }));
87
+ return { ...acc, [key]: entries };
88
+ }
89
+ }, {});
90
+ setLogings(filters.accomodations);
91
+ setFilters(formatedFilters);
92
+ setReady(true);
93
+ }
94
+ catch (e) {
95
+ // eslint-disable-next-line no-console
96
+ console.error(e);
97
+ }
98
+ finally {
99
+ setLoading(false);
100
+ }
101
+ };
102
+ init();
103
+ }
104
+ }, [channel, facet, ready, resort]);
105
+ React.useEffect(() => {
106
+ if (!data.lodging) {
107
+ setData((data) => ({ ...data, openPage: false }));
108
+ }
109
+ else {
110
+ const getRoomTypes = async () => {
111
+ try {
112
+ setLoading(true);
113
+ const id = lodgings.find((lodging) => lodging.slug === data.lodging)?.id;
114
+ if (id) {
115
+ const { rooms } = await API.getLodgingRooms(id, resort, facet);
116
+ if (rooms) {
117
+ setRooms(rooms);
118
+ }
119
+ }
120
+ }
121
+ catch (e) {
122
+ // eslint-disable-next-line no-console
123
+ console.error(e);
124
+ }
125
+ finally {
126
+ setLoading(false);
127
+ }
128
+ setData((data) => ({
129
+ ...data,
130
+ openPage: data.openPage ?? true,
131
+ standings: DEFAULT_DATA.standings,
132
+ options: DEFAULT_DATA.options,
133
+ districts: DEFAULT_DATA.districts,
134
+ type: DEFAULT_DATA.type,
135
+ }));
136
+ };
137
+ getRoomTypes();
138
+ }
139
+ }, [data.lodging, facet, lodgings, resort]);
140
+ React.useEffect(() => {
141
+ setPreset((current = {}) => {
142
+ const { lodging } = data;
143
+ const adults = parseInt(data.adults);
144
+ const children = parseInt(data.children);
145
+ const accomodation = lodging || undefined;
146
+ const openPage = lodging ? data.openPage : undefined;
147
+ const agesChildren = [...new Array(children)].map((_) => 12);
148
+ const paxPlan = adults ? { adults, children, agesChildren } : undefined;
149
+ const standings = data.standings?.length ? data.standings : undefined;
150
+ const options = data.options?.length ? data.options : undefined;
151
+ const districts = data.districts?.length ? data.districts : undefined;
152
+ const type = data.type || undefined;
153
+ const roomType = data.roomType || undefined;
154
+ const nbRooms = data.nbRooms[0] > 0 ? data.nbRooms : undefined;
155
+ const previewDetails = { paxPlan, roomType };
156
+ const presets = {
157
+ accomodation,
158
+ standings,
159
+ options,
160
+ districts,
161
+ nbRooms,
162
+ type,
163
+ };
164
+ const newPreset = {
165
+ ...current,
166
+ options: { ...(current?.options || {}), previewDetails },
167
+ presets: { ...(current?.presets || {}), ...presets },
168
+ openPage,
169
+ url: baseUrl || undefined,
170
+ };
171
+ onChange?.(newPreset);
172
+ return newPreset;
173
+ });
174
+ }, [data, onChange, baseUrl, setPreset]);
175
+ return (_jsxs(Form, { title: "Presets h\u00E9bergements", width: 580, preset: preset, buttonsActions: {
176
+ testPreset,
177
+ cancelPreset,
178
+ confirmPreset,
179
+ }, children: [_jsx("div", { className: css.label, children: "Nombre de personnes" }), _jsxs("div", { className: css.row, children: [_jsx(NumberPicker, { className: css.peopleInput, label: "Adultes", min: 0, max: 20, value: data.adults, onChange: updateField("adults"), withInput: true }), _jsx(NumberPicker, { className: css.peopleInput, label: "Enfants", min: 0, max: 9, value: data.children, onChange: updateField("children"), withInput: true })] }), _jsx("div", { className: css.label, children: "H\u00E9bergement" }), _jsx(Select, { placeholder: "S\u00E9lectionnez un h\u00E9bergement", options: formatedLodgings, value: data.lodging, onValueChange: updateField("lodging"), loading: loading }), showLodgingPageCheckbox && (_jsx(Checkbox, { label: "Ouvrir la page du site", checked: data.openPage, disabled: !showLodgingPageCheckbox, onCheckedChange: updateField("openPage") })), !showFilters && (_jsxs(_Fragment, { children: [_jsx("div", { className: css.label, children: "Chambres" }), (formatedRooms?.length > 0 || loading) && (_jsx(Select, { label: "Type de chambre", placeholder: "S\u00E9lectionnez un type de chambre", value: data.roomType, options: formatedRooms, loading: loading, onValueChange: updateField("roomType") })), _jsx(NumberPicker, { label: "Nombre de chambres", min: 0, max: 20, value: data.nbRooms?.[0] || 0, onChange: updateRoomNb, withInput: true })] })), showFilters && (_jsxs(_Fragment, { children: [_jsx("div", { className: css.label, children: "Filtres" }), kinds.length > 1 && (_jsx(Select, { label: "Type", placeholder: "S\u00E9lectionnez un type", options: kinds, value: data.type, onValueChange: updateField("type"), loading: loading })), filters?.standings && filters?.standings?.length > 1 && (_jsx(MultipleSelect, { placeholder: "Selectionnez une ou plusieurs options", label: "Standing", options: filters.standings, values: selectedStandings, onChange: updateFilter("standings"), loading: loading })), filters?.options && filters?.options?.length > 1 && (_jsx(MultipleSelect, { placeholder: "Selectionnez une ou plusieurs options", label: "Options", options: filters.options, values: selectedOptions, onChange: updateFilter("options"), loading: loading })), filters?.districts && filters?.districts?.length > 1 && (_jsx(MultipleSelect, { placeholder: "Selectionnez une ou plusieurs options", label: "Quartiers", options: filters.districts, values: selectedDistricts, onChange: updateFilter("districts"), loading: loading }))] }))] }));
180
+ }
181
+ function getDefaultData(preset) {
182
+ if (!preset?.presets && !preset?.options)
183
+ return DEFAULT_DATA;
184
+ const { accomodation, nbRooms, standings, options, districts, type } = preset?.presets || {};
185
+ const { openPage } = preset;
186
+ const { paxPlan, roomType } = preset?.options?.previewDetails || {};
187
+ return {
188
+ adults: paxPlan?.adults || DEFAULT_DATA.adults,
189
+ children: paxPlan?.children || DEFAULT_DATA.children,
190
+ lodging: accomodation || DEFAULT_DATA.lodging,
191
+ nbRooms: nbRooms || DEFAULT_DATA.nbRooms,
192
+ roomType: roomType || DEFAULT_DATA.roomType,
193
+ standings: standings || DEFAULT_DATA.standings,
194
+ options: options || DEFAULT_DATA.options,
195
+ districts: districts || DEFAULT_DATA.districts,
196
+ type: type || DEFAULT_DATA.type,
197
+ openPage: openPage ?? DEFAULT_DATA.openPage,
198
+ };
199
+ }
@@ -0,0 +1,21 @@
1
+ .row {
2
+ display: flex;
3
+ gap: 8px;
4
+ }
5
+
6
+ .rowWrap {
7
+ display: flex;
8
+ flex-wrap: wrap;
9
+ justify-content: space-between;
10
+ gap: 8px;
11
+ }
12
+
13
+ .rowWrap > * {
14
+ flex: 0 0 auto;
15
+ }
16
+
17
+ .label {
18
+ font-size: 12px;
19
+ user-select: none;
20
+ font-weight: 700;
21
+ }
@@ -0,0 +1,15 @@
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
+ baseUrl: string;
12
+ };
13
+ export default function SkiPasses({ preset, setPreset, stay, setShowPresetDialog, testPreset, baseUrl, }: Props): import("react/jsx-runtime").JSX.Element;
14
+ export {};
15
+ //# sourceMappingURL=ski-passes.d.ts.map