ublo-lib 1.37.20 → 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 (93) hide show
  1. package/es/common/utils/url-parameters.d.ts +1 -0
  2. package/es/common/utils/url-parameters.d.ts.map +1 -1
  3. package/es/common/utils/url-parameters.js +13 -0
  4. package/es/esf/components/period-picker/period-picker.d.ts.map +1 -1
  5. package/es/esf/components/period-picker/period-picker.js +0 -5
  6. package/es/future/components/msem-preset-editor/components/facet-selector.d.ts +6 -0
  7. package/es/future/components/msem-preset-editor/components/facet-selector.d.ts.map +1 -0
  8. package/es/future/components/msem-preset-editor/components/facet-selector.js +23 -0
  9. package/es/future/components/msem-preset-editor/components/form.d.ts +8 -0
  10. package/es/future/components/msem-preset-editor/components/form.d.ts.map +1 -0
  11. package/es/future/components/msem-preset-editor/components/form.js +9 -0
  12. package/es/future/components/msem-preset-editor/components/form.module.css +39 -0
  13. package/es/future/components/msem-preset-editor/components/resort-selector.d.ts +6 -0
  14. package/es/future/components/msem-preset-editor/components/resort-selector.d.ts.map +1 -0
  15. package/es/future/components/msem-preset-editor/components/resort-selector.js +8 -0
  16. package/es/future/components/msem-preset-editor/components/stay-picker.d.ts +14 -0
  17. package/es/future/components/msem-preset-editor/components/stay-picker.d.ts.map +1 -0
  18. package/es/future/components/msem-preset-editor/components/stay-picker.js +35 -0
  19. package/es/future/components/msem-preset-editor/components/stay-picker.module.css +5 -0
  20. package/es/future/components/msem-preset-editor/components/widget-list-item.d.ts +12 -0
  21. package/es/future/components/msem-preset-editor/components/widget-list-item.d.ts.map +1 -0
  22. package/es/future/components/msem-preset-editor/components/widget-list-item.js +55 -0
  23. package/es/future/components/msem-preset-editor/components/widget-list-item.module.css +115 -0
  24. package/es/future/components/msem-preset-editor/components/widget-list.d.ts +18 -0
  25. package/es/future/components/msem-preset-editor/components/widget-list.d.ts.map +1 -0
  26. package/es/future/components/msem-preset-editor/components/widget-list.js +34 -0
  27. package/es/future/components/msem-preset-editor/components/widget-list.module.css +21 -0
  28. package/es/future/components/msem-preset-editor/editor-dialog.d.ts +22 -0
  29. package/es/future/components/msem-preset-editor/editor-dialog.d.ts.map +1 -0
  30. package/es/future/components/msem-preset-editor/editor-dialog.js +25 -0
  31. package/es/future/components/msem-preset-editor/editor-dialog.module.css +31 -0
  32. package/es/future/components/msem-preset-editor/editors/elloha.d.ts +16 -0
  33. package/es/future/components/msem-preset-editor/editors/elloha.d.ts.map +1 -0
  34. package/es/future/components/msem-preset-editor/editors/elloha.js +79 -0
  35. package/es/future/components/msem-preset-editor/editors/elloha.module.css +14 -0
  36. package/es/future/components/msem-preset-editor/editors/index.d.ts +16 -0
  37. package/es/future/components/msem-preset-editor/editors/index.d.ts.map +1 -0
  38. package/es/future/components/msem-preset-editor/editors/index.js +15 -0
  39. package/es/future/components/msem-preset-editor/editors/lodgings.d.ts +17 -0
  40. package/es/future/components/msem-preset-editor/editors/lodgings.d.ts.map +1 -0
  41. package/es/future/components/msem-preset-editor/editors/lodgings.js +180 -0
  42. package/es/future/components/msem-preset-editor/editors/lodgings.module.css +21 -0
  43. package/es/future/components/msem-preset-editor/editors/ski-passes-jb.d.ts +17 -0
  44. package/es/future/components/msem-preset-editor/editors/ski-passes-jb.d.ts.map +1 -0
  45. package/es/future/components/msem-preset-editor/editors/ski-passes-jb.js +85 -0
  46. package/es/future/components/msem-preset-editor/editors/ski-passes.d.ts +17 -0
  47. package/es/future/components/msem-preset-editor/editors/ski-passes.d.ts.map +1 -0
  48. package/es/future/components/msem-preset-editor/editors/ski-passes.js +198 -0
  49. package/es/future/components/msem-preset-editor/editors/ski-passes.module.css +25 -0
  50. package/es/future/components/msem-preset-editor/editors/standard-products.d.ts +17 -0
  51. package/es/future/components/msem-preset-editor/editors/standard-products.d.ts.map +1 -0
  52. package/es/future/components/msem-preset-editor/editors/standard-products.js +65 -0
  53. package/es/future/components/msem-preset-editor/editors/vakario.d.ts +16 -0
  54. package/es/future/components/msem-preset-editor/editors/vakario.d.ts.map +1 -0
  55. package/es/future/components/msem-preset-editor/editors/vakario.js +186 -0
  56. package/es/future/components/msem-preset-editor/index.d.ts +3 -0
  57. package/es/future/components/msem-preset-editor/index.d.ts.map +1 -0
  58. package/es/future/components/msem-preset-editor/index.js +2 -0
  59. package/es/future/components/msem-preset-editor/msem-preset-editor.d.ts +21 -0
  60. package/es/future/components/msem-preset-editor/msem-preset-editor.d.ts.map +1 -0
  61. package/es/future/components/msem-preset-editor/msem-preset-editor.js +125 -0
  62. package/es/future/components/msem-preset-editor/msem-preset-editor.module.css +38 -0
  63. package/es/future/components/msem-preset-editor/services/api.d.ts +15 -0
  64. package/es/future/components/msem-preset-editor/services/api.d.ts.map +1 -0
  65. package/es/future/components/msem-preset-editor/services/api.js +68 -0
  66. package/es/future/components/msem-preset-editor/services/offers.d.ts +23 -0
  67. package/es/future/components/msem-preset-editor/services/offers.d.ts.map +1 -0
  68. package/es/future/components/msem-preset-editor/services/offers.js +50 -0
  69. package/es/future/components/msem-preset-editor/services/preset.d.ts +32 -0
  70. package/es/future/components/msem-preset-editor/services/preset.d.ts.map +1 -0
  71. package/es/future/components/msem-preset-editor/services/preset.js +19 -0
  72. package/es/future/components/msem-preset-editor/services/url-params.d.ts +3 -0
  73. package/es/future/components/msem-preset-editor/services/url-params.d.ts.map +1 -0
  74. package/es/future/components/msem-preset-editor/services/url-params.js +26 -0
  75. package/es/future/components/msem-preset-linker/index.d.ts +3 -0
  76. package/es/future/components/msem-preset-linker/index.d.ts.map +1 -0
  77. package/es/future/components/msem-preset-linker/index.js +2 -0
  78. package/es/future/components/msem-preset-linker/msem-preset-linker.d.ts +19 -0
  79. package/es/future/components/msem-preset-linker/msem-preset-linker.d.ts.map +1 -0
  80. package/es/future/components/msem-preset-linker/msem-preset-linker.js +17 -0
  81. package/es/future/components/msem-preset-linker/services/url-params.d.ts +2 -0
  82. package/es/future/components/msem-preset-linker/services/url-params.d.ts.map +1 -0
  83. package/es/future/components/msem-preset-linker/services/url-params.js +13 -0
  84. package/es/future/hooks/use-msem-presets.d.ts +4 -0
  85. package/es/future/hooks/use-msem-presets.d.ts.map +1 -0
  86. package/es/future/hooks/use-msem-presets.js +37 -0
  87. package/es/future/utils/fetcher.d.ts +5 -0
  88. package/es/future/utils/fetcher.d.ts.map +1 -0
  89. package/es/future/utils/fetcher.js +49 -0
  90. package/es/future/utils/url-parameters.d.ts +3 -0
  91. package/es/future/utils/url-parameters.d.ts.map +1 -0
  92. package/es/future/utils/url-parameters.js +21 -0
  93. package/package.json +1 -1
@@ -1,2 +1,3 @@
1
1
  export declare const buildURLWithoutParams: (...skipParams: string[]) => string;
2
+ export declare const build: (params: Record<string, any>) => string;
2
3
  //# sourceMappingURL=url-parameters.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"url-parameters.d.ts","sourceRoot":"","sources":["../../../src/common/utils/url-parameters.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,qBAAqB,kBAAmB,MAAM,EAAE,WAO5D,CAAC"}
1
+ {"version":3,"file":"url-parameters.d.ts","sourceRoot":"","sources":["../../../src/common/utils/url-parameters.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,qBAAqB,kBAAmB,MAAM,EAAE,WAO5D,CAAC;AAEF,eAAO,MAAM,KAAK,WAAY,OAAO,MAAM,EAAE,GAAG,CAAC,WAWhD,CAAC"}
@@ -6,3 +6,16 @@ export const buildURLWithoutParams = (...skipParams) => {
6
6
  const root = origin + pathname;
7
7
  return params.length > 0 ? root + "?" + params : root;
8
8
  };
9
+ export const build = (params) => {
10
+ return Object.keys(params)
11
+ .map((key, i) => {
12
+ const param = params[key];
13
+ if (!param)
14
+ return "";
15
+ const isObject = typeof param === "object";
16
+ const sign = i === 0 ? "?" : "&";
17
+ const value = isObject ? encodeURI(JSON.stringify(param)) : param;
18
+ return `${sign}${key}=${value}`;
19
+ })
20
+ .join("");
21
+ };
@@ -1 +1 @@
1
- {"version":3,"file":"period-picker.d.ts","sourceRoot":"","sources":["../../../../src/esf/components/period-picker/period-picker.js"],"names":[],"mappings":"AA2BA;;;;;;4CAgNC"}
1
+ {"version":3,"file":"period-picker.d.ts","sourceRoot":"","sources":["../../../../src/esf/components/period-picker/period-picker.js"],"names":[],"mappings":"AA2BA;;;;;;4CA2MC"}
@@ -81,11 +81,6 @@ export default function PeriodPicker({ setClosed = undefined, force = false, onC
81
81
  const updateStay = React.useCallback((e) => {
82
82
  setStay(e.detail);
83
83
  }, []);
84
- React.useEffect(() => {
85
- const stored = window.sessionStorage.getItem(WEEK_STORAGE);
86
- if (stored)
87
- setSelected(stored);
88
- }, []);
89
84
  React.useEffect(() => {
90
85
  getStoredStay();
91
86
  window.addEventListener("msem-stay-changed", updateStay);
@@ -0,0 +1,6 @@
1
+ export default function FacetSelector({ facet, setFacet, setPreset }: {
2
+ facet: any;
3
+ setFacet: any;
4
+ setPreset: any;
5
+ }): import("react/jsx-runtime").JSX.Element;
6
+ //# sourceMappingURL=facet-selector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"facet-selector.d.ts","sourceRoot":"","sources":["../../../../../src/future/components/msem-preset-editor/components/facet-selector.tsx"],"names":[],"mappings":"AAGA,MAAM,CAAC,OAAO,UAAU,aAAa,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE;;;;CAAA,2CA2BnE"}
@@ -0,0 +1,23 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import Select from "dt-design-system/es/select";
3
+ export default function FacetSelector({ facet, setFacet, setPreset }) {
4
+ const updateFacet = (newValue) => {
5
+ setPreset((current) => {
6
+ if (!newValue) {
7
+ return null;
8
+ }
9
+ else {
10
+ return {
11
+ ...current,
12
+ options: { ...(current?.options || {}), facet: Number(newValue) },
13
+ };
14
+ }
15
+ });
16
+ setFacet(newValue);
17
+ };
18
+ return (_jsx(Select, { value: facet, onValueChange: updateFacet, label: "Facette", options: [
19
+ { label: "Sélectionnez une facette pour continuer", value: "" },
20
+ { label: "Hiver", value: "0" },
21
+ { label: "Eté", value: "1" },
22
+ ] }));
23
+ }
@@ -0,0 +1,8 @@
1
+ export default function Form({ title, width, preset, buttonsActions, children, }: {
2
+ title: any;
3
+ width: any;
4
+ preset: any;
5
+ buttonsActions: any;
6
+ children: any;
7
+ }): import("react/jsx-runtime").JSX.Element;
8
+ //# sourceMappingURL=form.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"form.d.ts","sourceRoot":"","sources":["../../../../../src/future/components/msem-preset-editor/components/form.tsx"],"names":[],"mappings":"AAMA,MAAM,CAAC,OAAO,UAAU,IAAI,CAAC,EAC3B,KAAK,EACL,KAAK,EACL,MAAM,EACN,cAAc,EACd,QAAQ,GACT;;;;;;CAAA,2CAwCA"}
@@ -0,0 +1,9 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import Button from "dt-design-system/es/button";
3
+ import Tooltip from "dt-design-system/es/tooltip";
4
+ import * as Icons from "dt-design-system/es/icons";
5
+ import css from "./form.module.css";
6
+ export default function Form({ title, width, preset, buttonsActions, children, }) {
7
+ const { testPreset, cancelPreset, confirmPreset } = buttonsActions;
8
+ return (_jsxs("div", { className: css.form, style: { width }, children: [_jsxs("div", { className: css.title, children: [_jsx(Icons.Tune, {}), title] }), _jsx("div", { className: css.inner, children: children }), _jsxs("div", { className: css.buttons, children: [_jsx(Tooltip, { content: "Tester dans le widget MseM", children: _jsx(Button, { variant: "secondary", disabled: !preset?.widget, className: css.testButton, onClick: testPreset, children: _jsx(Icons.OpenInBrowser, {}) }) }), _jsx(Button, { type: "submit", variant: "secondary", className: css.button, onClick: cancelPreset, children: "Annuler" }), _jsx(Button, { type: "submit", variant: "primary", className: css.button, onClick: confirmPreset, disabled: !confirmPreset, children: "Confirmer" })] })] }));
9
+ }
@@ -0,0 +1,39 @@
1
+ .form {
2
+ max-width: 100%;
3
+ display: flex;
4
+ flex-direction: column;
5
+ gap: 12px;
6
+ padding: 20px;
7
+ }
8
+
9
+ .title {
10
+ display: flex;
11
+ align-items: center;
12
+ justify-content: center;
13
+ gap: 8px;
14
+ font-size: 22px;
15
+ font-weight: 700;
16
+ text-align: center;
17
+ }
18
+
19
+ .title > svg {
20
+ width: 22px;
21
+ height: 22px;
22
+ fill: currentColor;
23
+ }
24
+
25
+ .inner {
26
+ display: flex;
27
+ flex-direction: column;
28
+ gap: 8px;
29
+ }
30
+
31
+ .buttons {
32
+ display: flex;
33
+ justify-content: flex-end;
34
+ gap: 12px;
35
+ }
36
+
37
+ .testButton {
38
+ margin-right: auto;
39
+ }
@@ -0,0 +1,6 @@
1
+ export default function ResortSelector({ resorts, resort, setResort }: {
2
+ resorts: any;
3
+ resort: any;
4
+ setResort: any;
5
+ }): import("react/jsx-runtime").JSX.Element;
6
+ //# sourceMappingURL=resort-selector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resort-selector.d.ts","sourceRoot":"","sources":["../../../../../src/future/components/msem-preset-editor/components/resort-selector.tsx"],"names":[],"mappings":"AAGA,MAAM,CAAC,OAAO,UAAU,cAAc,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE;;;;CAAA,2CAYpE"}
@@ -0,0 +1,8 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import Select from "dt-design-system/es/select";
3
+ export default function ResortSelector({ resorts, resort, setResort }) {
4
+ return (_jsx(Select, { value: resort, onValueChange: setResort, label: "Destination", options: [
5
+ { label: "Sélectionnez une destination pour continuer", value: "" },
6
+ ...resorts,
7
+ ] }));
8
+ }
@@ -0,0 +1,14 @@
1
+ type Props = {
2
+ stay: {
3
+ from: string;
4
+ to: string;
5
+ };
6
+ setStay: (stay: {
7
+ from: string;
8
+ to: string;
9
+ }) => void;
10
+ setPreset: (preset: Record<string, any>) => void;
11
+ };
12
+ export default function StayPicker({ stay, setStay }: Props): import("react/jsx-runtime").JSX.Element;
13
+ export {};
14
+ //# sourceMappingURL=stay-picker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stay-picker.d.ts","sourceRoot":"","sources":["../../../../../src/future/components/msem-preset-editor/components/stay-picker.tsx"],"names":[],"mappings":"AAIA,KAAK,KAAK,GAAG;IACX,IAAI,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC;IACnC,OAAO,EAAE,CAAC,IAAI,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;IACtD,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,IAAI,CAAC;CAClD,CAAC;AAEF,MAAM,CAAC,OAAO,UAAU,UAAU,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,KAAK,2CAiD1D"}
@@ -0,0 +1,35 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import Input from "dt-design-system/es/input";
3
+ import css from "./stay-picker.module.css";
4
+ export default function StayPicker({ stay, setStay }) {
5
+ const updateStay = (key) => (value) => {
6
+ const isFrom = key === "from";
7
+ const isTo = key === "to";
8
+ if (isFrom) {
9
+ if (!stay.to && !value) {
10
+ window.sessionStorage.removeItem("stay");
11
+ return setStay({ from: "", to: "" });
12
+ }
13
+ const from = new Date(value);
14
+ const to = new Date(stay.to);
15
+ if (from > to || !stay.to) {
16
+ return setStay({ from: value, to: value });
17
+ }
18
+ return setStay({ ...stay, [key]: value });
19
+ }
20
+ if (isTo) {
21
+ if (!stay.from && !value) {
22
+ window.sessionStorage.removeItem("stay");
23
+ return setStay({ from: "", to: "" });
24
+ }
25
+ const from = new Date(stay.from);
26
+ const to = new Date(value);
27
+ if (from > to || !stay.from) {
28
+ return setStay({ to: value, from: value });
29
+ }
30
+ return setStay({ ...stay, [key]: value });
31
+ }
32
+ setStay({ ...stay, [key]: value });
33
+ };
34
+ return (_jsxs("div", { className: css.picker, children: [_jsx(Input, { type: "date", label: "Date de d\u00E9but", value: stay.from, onValueChange: updateStay("from") }), _jsx(Input, { type: "date", label: "Date de fin", value: stay.to, onValueChange: updateStay("to") })] }));
35
+ }
@@ -0,0 +1,5 @@
1
+ .picker {
2
+ display: flex;
3
+ gap: 12px;
4
+ margin-bottom: 4px;
5
+ }
@@ -0,0 +1,12 @@
1
+ import * as React from "react";
2
+ import type { Offer } from "../services/offers";
3
+ type Props = {
4
+ item: Offer;
5
+ preset: Record<string, any> | null;
6
+ updatePreset: (item: Offer, subPreset?: Offer) => void;
7
+ removePreset: () => void;
8
+ setShowPresetDialog: React.Dispatch<React.SetStateAction<boolean>>;
9
+ };
10
+ export default function WidgetListItem({ item, preset, updatePreset, removePreset, setShowPresetDialog, }: Props): import("react/jsx-runtime").JSX.Element;
11
+ export {};
12
+ //# sourceMappingURL=widget-list-item.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"widget-list-item.d.ts","sourceRoot":"","sources":["../../../../../src/future/components/msem-preset-editor/components/widget-list-item.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAK/B,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAGhD,KAAK,KAAK,GAAG;IACX,IAAI,EAAE,KAAK,CAAC;IACZ,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,mBAAmB,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC;CACpE,CAAC;AAUF,MAAM,CAAC,OAAO,UAAU,cAAc,CAAC,EACrC,IAAI,EACJ,MAAM,EACN,YAAY,EACZ,YAAY,EACZ,mBAAmB,GACpB,EAAE,KAAK,2CAkJP"}
@@ -0,0 +1,55 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import * as React from "react";
3
+ import classNames from "classnames";
4
+ import Button from "dt-design-system/es/button";
5
+ import Tooltip from "dt-design-system/es/tooltip";
6
+ import * as Icons from "dt-design-system/es/icons";
7
+ import css from "./widget-list-item.module.css";
8
+ const ALLOW_PRESETS_ON_WIDGETS = [
9
+ "lodging",
10
+ "skiPass",
11
+ "liftJb",
12
+ "elloha",
13
+ "vakario",
14
+ ];
15
+ export default function WidgetListItem({ item, preset, updatePreset, removePreset, setShowPresetDialog, }) {
16
+ const [opened, setOpened] = React.useState(false);
17
+ const { widget, logo, name, items: subs } = item;
18
+ const toggleItem = () => {
19
+ setOpened(!opened);
20
+ };
21
+ const ToggleIcon = opened ? Icons.ChevronUp : Icons.ChevronDown;
22
+ const isSelected = preset?.name === name && preset?.widget === widget;
23
+ const hasSubs = subs && subs.length > 0;
24
+ const allowAdvancedPresets = ALLOW_PRESETS_ON_WIDGETS.includes(widget);
25
+ const showEditButton = isSelected && allowAdvancedPresets;
26
+ const showRemoveButton = isSelected;
27
+ const classes = classNames(css.item, {
28
+ [css.selected]: isSelected,
29
+ [css.opened]: opened,
30
+ });
31
+ const handleItemClick = () => {
32
+ if (!isSelected) {
33
+ updatePreset(item);
34
+ }
35
+ };
36
+ return (_jsxs("div", { className: classes, children: [_jsxs(Button, { variant: "transparent", className: css.button, onClick: handleItemClick, children: [_jsx("div", { className: css.logo, children: _jsx("img", { src: logo, alt: name }) }), _jsx("div", { className: css.name, children: name })] }), (hasSubs || showEditButton || showRemoveButton) && (_jsxs("div", { className: css.actions, children: [showEditButton && (_jsx(Tooltip, { content: "Modifier", children: _jsx(Button, { variant: "primary", className: css.action, onClick: () => setShowPresetDialog(true), compact: true, children: _jsx(Icons.Edit, {}) }) })), showRemoveButton && (_jsx(Tooltip, { content: "Supprimer", children: _jsx(Button, { variant: "danger", className: css.action, onClick: removePreset, compact: true, children: _jsx(Icons.Trash, {}) }) })), hasSubs && (_jsx(Tooltip, { content: "Afficher les sous-marchands", children: _jsx(Button, { variant: "secondary", className: css.action, onClick: toggleItem, compact: true, children: _jsx(ToggleIcon, {}) }) }))] })), opened && subs && (_jsx("div", { className: css.list, children: subs.map((sub) => {
37
+ const isSelected = preset?.name === sub.name;
38
+ const allowedWidgets = [
39
+ "otherProducts",
40
+ ...ALLOW_PRESETS_ON_WIDGETS,
41
+ ];
42
+ const allowAdvancedPresets = allowedWidgets.includes(sub.widget);
43
+ const showEditButton = isSelected && allowAdvancedPresets;
44
+ const showButtons = showEditButton || isSelected;
45
+ const classes = classNames(css.subButton, {
46
+ [css.subButtonSelected]: isSelected,
47
+ });
48
+ const handleSubClick = () => {
49
+ if (!isSelected) {
50
+ updatePreset(item, sub);
51
+ }
52
+ };
53
+ return (_jsxs("div", { className: css.sub, children: [_jsx(Button, { variant: "transparent", className: classes, onClick: handleSubClick, children: sub.name }), showButtons && (_jsxs("div", { className: css.subActions, children: [showEditButton && (_jsx(Tooltip, { content: "Modifier", children: _jsx(Button, { variant: "primary", className: css.action, onClick: () => setShowPresetDialog(true), compact: true, children: _jsx(Icons.Edit, {}) }) })), isSelected && (_jsx(Tooltip, { content: "Supprimer", children: _jsx(Button, { variant: "danger", className: css.action, onClick: removePreset, compact: true, children: _jsx(Icons.Trash, {}) }) }))] }))] }, sub.name));
54
+ }) }))] }));
55
+ }
@@ -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, 8px);
16
+ }
17
+
18
+ .selected .button {
19
+ color: var(--ublo-secondary-color, #4177f6);
20
+ font-weight: 700;
21
+ background-color: var(--ublo-grey-300, #d3d3d3);
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, 8px);
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-secondary-color, #4177f6);
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, 8px) var(--ublo-radius-200, 8px);
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-secondary-color, #4177f6);
104
+ font-weight: 700;
105
+ background-color: var(--ublo-grey-300, #d3d3d3);
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,18 @@
1
+ import * as React from "react";
2
+ import type { Offer } from "../services/offers";
3
+ type Props = {
4
+ lang: "fr" | "en";
5
+ msemServicesUrl: string;
6
+ channel: string;
7
+ resort: number | string;
8
+ facet: string;
9
+ preset: Record<string, any> | null;
10
+ updatePreset: (item: Offer, subPreset?: Offer) => void;
11
+ removePreset: () => void;
12
+ error: string | null;
13
+ setError: React.Dispatch<React.SetStateAction<string | null>>;
14
+ setShowPresetDialog: React.Dispatch<React.SetStateAction<boolean>>;
15
+ };
16
+ export default function WidgetList({ lang, msemServicesUrl, channel, resort, facet, preset, updatePreset, removePreset, setError, setShowPresetDialog, }: Props): import("react/jsx-runtime").JSX.Element;
17
+ export {};
18
+ //# sourceMappingURL=widget-list.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"widget-list.d.ts","sourceRoot":"","sources":["../../../../../src/future/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,eAAe,EAAE,MAAM,CAAC;IACxB,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,eAAe,EACf,OAAO,EACP,MAAM,EACN,KAAK,EACL,MAAM,EACN,YAAY,EACZ,YAAY,EACZ,QAAQ,EACR,mBAAmB,GACpB,EAAE,KAAK,2CAkDP"}
@@ -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, msemServicesUrl, 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(msemServicesUrl, 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, msemServicesUrl, resort, setError]);
31
+ return (_jsxs("div", { className: css.list, children: [loading && _jsx(Loader, { className: css.loader }), offers?.length === 0 && !loading && (_jsx("div", { className: css.empty, children: "Aucun widget disponible" })), offers?.map((offer, i) => {
32
+ return (_jsx(WidgetListItem, { item: offer, preset: preset, updatePreset: updatePreset, removePreset: removePreset, setShowPresetDialog: setShowPresetDialog }, i));
33
+ })] }));
34
+ }
@@ -0,0 +1,21 @@
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
+ }
13
+
14
+ .empty {
15
+ padding: 8px;
16
+ font-size: 14px;
17
+ text-align: center;
18
+ background: var(--ublo-grey-100, #f5f5f5);
19
+ font-style: italic;
20
+ border-radius: var(--ublo-radius-200, 8px);
21
+ }
@@ -0,0 +1,22 @@
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;
11
+ cartUrl?: string;
12
+ analytics?: () => void;
13
+ };
14
+ urlOverride?: string;
15
+ resorts?: Resort[];
16
+ target: HTMLElement | null;
17
+ updatePreset: (preset: any) => any;
18
+ closeEditor: () => void;
19
+ };
20
+ export default function EditorDialog({ lang, msemServicesUrl, options, urlOverride, resorts, target, updatePreset, closeEditor, }: Props): import("react/jsx-runtime").JSX.Element;
21
+ export {};
22
+ //# sourceMappingURL=editor-dialog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"editor-dialog.d.ts","sourceRoot":"","sources":["../../../../src/future/components/msem-preset-editor/editor-dialog.tsx"],"names":[],"mappings":"AAMA,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,EAAE,MAAM,CAAC;QACf,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,MAAM,EAAE,WAAW,GAAG,IAAI,CAAC;IAC3B,YAAY,EAAE,CAAC,MAAM,EAAE,GAAG,KAAK,GAAG,CAAC;IACnC,WAAW,EAAE,MAAM,IAAI,CAAC;CACzB,CAAC;AAEF,MAAM,CAAC,OAAO,UAAU,YAAY,CAAC,EACnC,IAAI,EACJ,eAAe,EACf,OAAO,EACP,WAAW,EACX,OAAO,EACP,MAAM,EACN,YAAY,EACZ,WAAW,GACZ,EAAE,KAAK,2CAqDP"}
@@ -0,0 +1,25 @@
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 MseMPresetEditor from "./msem-preset-editor";
6
+ import css from "./editor-dialog.module.css";
7
+ export default function EditorDialog({ lang, msemServicesUrl, options, urlOverride, resorts, target, updatePreset, closeEditor, }) {
8
+ const selectedPreset = target?.getAttribute("data-msem-preset");
9
+ const [preset, setPreset] = React.useState(selectedPreset ? JSON.parse(selectedPreset) : null);
10
+ React.useEffect(() => {
11
+ if (selectedPreset) {
12
+ setPreset(JSON.parse(selectedPreset));
13
+ }
14
+ }, [selectedPreset]);
15
+ const updateNewPreset = React.useCallback(() => {
16
+ const anchorHasHref = target
17
+ ?.querySelector(":scope > a")
18
+ ?.hasAttribute("href");
19
+ if (!anchorHasHref && preset?.url && !preset?.openPage) {
20
+ delete preset.url;
21
+ }
22
+ updatePreset(preset);
23
+ }, [preset, updatePreset, target]);
24
+ return (_jsxs(Dialog, { className: css.dialog, isOpened: !!target, close: closeEditor, closeOnBackdropClick: false, showAsModal: false, children: [_jsx("div", { className: css.title, children: "Choisissez un widget" }), _jsx("div", { className: css.subtitle, children: "Ce dernier s'ouvrira au clic sur l'\u00E9l\u00E9ment s\u00E9lectionn\u00E9." }), _jsx(MseMPresetEditor, { lang: lang, msemServicesUrl: msemServicesUrl, options: options, urlOverride: urlOverride, resorts: resorts, selectedPreset: selectedPreset, onChange: setPreset }), _jsxs("div", { className: css.buttons, children: [_jsx(Button, { variant: "secondary", onClick: closeEditor, children: "Annuler" }), _jsx(Button, { variant: "primary", onClick: updateNewPreset, children: "Valider" })] })] }));
25
+ }
@@ -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,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 Elloha({ msemServicesUrl, preset, setPreset, stay, setShowPresetDialog, onChange, testPreset, }: Props): import("react/jsx-runtime").JSX.Element;
15
+ export {};
16
+ //# sourceMappingURL=elloha.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"elloha.d.ts","sourceRoot":"","sources":["../../../../../src/future/components/msem-preset-editor/editors/elloha.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAO/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;AAWF,MAAM,CAAC,OAAO,UAAU,MAAM,CAAC,EAC7B,eAAe,EACf,MAAM,EACN,SAAS,EACT,IAAI,EACJ,mBAAmB,EACnB,QAAQ,EACR,UAAU,GACX,EAAE,KAAK,2CAqHP"}