ublo-lib 1.36.31 → 1.37.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 (67) hide show
  1. package/es/common/components/cross-selling-editor/cross-selling-editor.d.ts +3 -1
  2. package/es/common/components/cross-selling-editor/cross-selling-editor.d.ts.map +1 -1
  3. package/es/common/components/cross-selling-editor/cross-selling-editor.js +4 -2
  4. package/es/common/components/cross-selling-editor/editor.d.ts +3 -1
  5. package/es/common/components/cross-selling-editor/editor.d.ts.map +1 -1
  6. package/es/common/components/cross-selling-editor/editor.js +2 -2
  7. package/es/common/components/cross-selling-editor/esf/index.d.ts +3 -0
  8. package/es/common/components/cross-selling-editor/esf/index.d.ts.map +1 -0
  9. package/es/common/components/cross-selling-editor/esf/index.js +2 -0
  10. package/es/common/components/cross-selling-editor/esf/special-rule-form.d.ts +12 -0
  11. package/es/common/components/cross-selling-editor/esf/special-rule-form.d.ts.map +1 -0
  12. package/es/common/components/cross-selling-editor/esf/special-rule-form.js +27 -0
  13. package/es/common/components/cross-selling-editor/esf/special-rule-form.module.css +4 -0
  14. package/es/common/components/cross-selling-editor/esf/step-1.d.ts +12 -0
  15. package/es/common/components/cross-selling-editor/esf/step-1.d.ts.map +1 -0
  16. package/es/common/components/cross-selling-editor/esf/step-1.js +78 -0
  17. package/es/common/components/cross-selling-editor/esf/step-1.module.css +35 -0
  18. package/es/common/components/cross-selling-editor/esf/step-2.d.ts +12 -0
  19. package/es/common/components/cross-selling-editor/esf/step-2.d.ts.map +1 -0
  20. package/es/common/components/cross-selling-editor/esf/step-2.js +157 -0
  21. package/es/common/components/cross-selling-editor/esf/step-2.module.css +72 -0
  22. package/es/common/components/cross-selling-editor/hooks/use-custom-offers.d.ts.map +1 -1
  23. package/es/common/components/cross-selling-editor/hooks/use-custom-offers.js +8 -4
  24. package/es/common/components/cross-selling-editor/hooks/use-fetch.d.ts +12 -0
  25. package/es/common/components/cross-selling-editor/hooks/use-fetch.d.ts.map +1 -0
  26. package/es/common/components/cross-selling-editor/hooks/use-fetch.js +35 -0
  27. package/es/common/components/cross-selling-editor/hooks/use-tunnel-offers.d.ts.map +1 -1
  28. package/es/common/components/cross-selling-editor/hooks/use-tunnel-offers.js +6 -4
  29. package/es/common/components/cross-selling-editor/override-trigger-form.d.ts.map +1 -1
  30. package/es/common/components/cross-selling-editor/override-trigger-form.js +4 -2
  31. package/es/common/components/cross-selling-editor/override-trigger-form.module.css +1 -0
  32. package/es/common/components/cross-selling-editor/override.d.ts +2 -1
  33. package/es/common/components/cross-selling-editor/override.d.ts.map +1 -1
  34. package/es/common/components/cross-selling-editor/override.js +12 -6
  35. package/es/common/components/cross-selling-editor/overrides-list.d.ts.map +1 -1
  36. package/es/common/components/cross-selling-editor/overrides-list.js +9 -6
  37. package/es/common/components/cross-selling-editor/overrides-list.module.css +24 -8
  38. package/es/common/components/cross-selling-editor/rules.d.ts +3 -2
  39. package/es/common/components/cross-selling-editor/rules.d.ts.map +1 -1
  40. package/es/common/components/cross-selling-editor/rules.js +18 -7
  41. package/es/common/components/cross-selling-editor/services/api.d.ts +7 -0
  42. package/es/common/components/cross-selling-editor/services/api.d.ts.map +1 -1
  43. package/es/common/components/cross-selling-editor/services/api.js +101 -3
  44. package/es/common/components/cross-selling-editor/services/utils.d.ts +12 -6
  45. package/es/common/components/cross-selling-editor/services/utils.d.ts.map +1 -1
  46. package/es/common/components/cross-selling-editor/services/utils.js +80 -13
  47. package/es/common/components/cross-selling-editor/tester/index.d.ts +3 -0
  48. package/es/common/components/cross-selling-editor/tester/index.d.ts.map +1 -0
  49. package/es/common/components/cross-selling-editor/tester/index.js +2 -0
  50. package/es/common/components/cross-selling-editor/tester/tester.d.ts +11 -0
  51. package/es/common/components/cross-selling-editor/tester/tester.d.ts.map +1 -0
  52. package/es/common/components/cross-selling-editor/{tester.js → tester/tester.js} +72 -27
  53. package/es/common/components/cross-selling-editor/{tester.module.css → tester/tester.module.css} +1 -0
  54. package/es/common/components/cross-selling-editor/{tester-tunnel-offer.d.ts → tester/tunnel-offer.d.ts} +4 -3
  55. package/es/common/components/cross-selling-editor/tester/tunnel-offer.d.ts.map +1 -0
  56. package/es/common/components/cross-selling-editor/tester/tunnel-offer.js +54 -0
  57. package/es/common/components/cross-selling-editor/{tester-tunnel-offer.module.css → tester/tunnel-offer.module.css} +16 -3
  58. package/es/common/components/cross-selling-editor/types.d.ts +66 -0
  59. package/es/common/components/cross-selling-editor/types.d.ts.map +1 -1
  60. package/es/lbm/components/instant-search/services/api.d.ts +0 -1
  61. package/es/lbm/components/instant-search/services/api.d.ts.map +1 -1
  62. package/es/lbm/components/instant-search/services/api.js +1 -12
  63. package/package.json +1 -1
  64. package/es/common/components/cross-selling-editor/tester-tunnel-offer.d.ts.map +0 -1
  65. package/es/common/components/cross-selling-editor/tester-tunnel-offer.js +0 -21
  66. package/es/common/components/cross-selling-editor/tester.d.ts +0 -10
  67. package/es/common/components/cross-selling-editor/tester.d.ts.map +0 -1
@@ -14,16 +14,18 @@ export default function useTunnelOffers(zone, path, cart) {
14
14
  const items = Utils.formatCartContent(cart);
15
15
  const merchants = Utils.getMerchantsFromCart(cart);
16
16
  const stay = Utils.getStayFromCart(cart);
17
- const [skiPassDurations, durationTags] = await Promise.all([
18
- Utils.getSkiPassDurationFromCart(cart),
19
- Utils.getDurationTagsFromCart(cart),
20
- ]);
17
+ const skiPassDurations = Utils.getSkiPassDurationFromCart(cart);
18
+ const durationTags = Utils.getDurationTagsFromCart(cart);
19
+ const ellohaGroups = Utils.getEllohaGroupsFromCart(cart);
20
+ const esfOffersContent = Utils.getEsfOffersFromCart(cart);
21
21
  const content = {
22
22
  items,
23
23
  merchants,
24
24
  stay,
25
25
  skiPassDurations,
26
26
  durationTags,
27
+ ellohaGroups,
28
+ esfOffersContent,
27
29
  };
28
30
  const storedConfig = Utils.getConfig(container);
29
31
  const sortedOffers = Utils.getSortedOffers(container, content, storedConfig);
@@ -1 +1 @@
1
- {"version":3,"file":"override-trigger-form.d.ts","sourceRoot":"","sources":["../../../../src/common/components/cross-selling-editor/override-trigger-form.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAO/B,OAAO,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAa,MAAM,SAAS,CAAC;AAEtE,KAAK,KAAK,GAAG;IACX,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,QAAQ,CAAC;IACnB,SAAS,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC;IACxD,SAAS,EAAE,SAAS,CAAC;CACtB,CAAC;AAEF,MAAM,CAAC,OAAO,UAAU,mBAAmB,CAAC,EAC1C,YAAY,EACZ,QAAQ,EACR,SAAS,EACT,SAAS,GACV,EAAE,KAAK,2CAuJP"}
1
+ {"version":3,"file":"override-trigger-form.d.ts","sourceRoot":"","sources":["../../../../src/common/components/cross-selling-editor/override-trigger-form.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAO/B,OAAO,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAa,MAAM,SAAS,CAAC;AAEtE,KAAK,KAAK,GAAG;IACX,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,QAAQ,CAAC;IACnB,SAAS,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC;IACxD,SAAS,EAAE,SAAS,CAAC;CACtB,CAAC;AAEF,MAAM,CAAC,OAAO,UAAU,mBAAmB,CAAC,EAC1C,YAAY,EACZ,QAAQ,EACR,SAAS,EACT,SAAS,GACV,EAAE,KAAK,2CA6KP"}
@@ -7,7 +7,9 @@ import Tooltip from "dt-design-system/es/tooltip";
7
7
  import NumberPicker from "dt-design-system/es/number-picker";
8
8
  export default function OverrideTriggerForm({ currentOffer, override, setConfig, durations, }) {
9
9
  const triggers = override?.triggers || {};
10
- const { stayFrom, stayTo, stayDuration = 0, merchant, skiPassDuration, skiPassDurationOperator = ">", durationTag, } = triggers;
10
+ const isOtherProducts = currentOffer === "STAND";
11
+ const isSkiPasses = currentOffer === "LIFT";
12
+ const { stayFrom, stayTo, stayDuration = 0, merchant, skiPassDuration, skiPassDurationOperator = ">", durationTag, ellohaGroup, } = triggers;
11
13
  const updateEntry = (key, value) => {
12
14
  setConfig((config = {}) => {
13
15
  const itemConfig = (config[currentOffer] || {});
@@ -50,5 +52,5 @@ export default function OverrideTriggerForm({ currentOffer, override, setConfig,
50
52
  { value: "<=", label: "Inférieur ou égal à" },
51
53
  { value: "=", label: "Égal à" },
52
54
  ];
53
- return (_jsxs("form", { className: styles.form, onSubmit: submitForm, onClick: stopPropagation, children: [_jsx("div", { className: styles.title, children: "D\u00E9clencheur(s)" }), _jsx("div", { className: styles.subTitle, children: "S\u00E9jour" }), _jsx(Input, { className: styles.input, type: "date", label: "Inclu entre", value: stayFrom || "", onValueChange: (value) => updateEntry("stayFrom", value), compact: true }), _jsx(Input, { className: styles.input, type: "date", label: "et", value: stayTo || "", onValueChange: (value) => updateEntry("stayTo", value), compact: true }), _jsx(NumberPicker, { label: _jsxs(_Fragment, { children: ["Nombre de jour(s)", _jsx(Tooltip, { content: "S\u00E9jour d'une dur\u00E9e sup\u00E9rieur ou \u00E9gal \u00E0...", children: _jsx("span", { className: styles.labelIconContainer, children: _jsx(Icons.Info, { className: styles.labelIcon }) }) })] }), min: 0, max: 40, value: stayDuration || 0, onChange: (value) => updateEntry("stayDuration", value), withInput: true, compact: true }), _jsx("div", { className: styles.subTitle, children: "G\u00E9n\u00E9ral" }), _jsx(Input, { className: styles.input, label: _jsxs(_Fragment, { children: ["Code(s) marchand(s)", _jsx(Tooltip, { content: "Si plusieurs codes marchands, les s\u00E9parer par une virgule", children: _jsx("span", { className: styles.labelIconContainer, children: _jsx(Icons.Info, { className: styles.labelIcon }) }) })] }), value: merchant || "", onValueChange: (value) => updateEntry("merchant", value), compact: true }), _jsx("div", { className: styles.subTitle, children: "Forfaits" }), _jsx(NumberPicker, { className: styles.input, label: "Dur\u00E9e", min: 0, max: 40, value: skiPassDuration || 0, onChange: (value) => updateEntry("skiPassDuration", value), withInput: true, compact: true }), _jsx(Select, { className: styles.input, label: "Op\u00E9rateur de comparaison", options: operatorOptions, value: skiPassDurationOperator || ">", onValueChange: (value) => updateEntry("skiPassDurationOperator", value), compact: true }), durations && (_jsx(Select, { className: styles.input, label: durations?.title, placeholder: " ", options: durations?.tags, value: durationTag || "", onValueChange: (value) => updateEntry("durationTag", value), compact: true }))] }));
55
+ return (_jsxs("form", { className: styles.form, onSubmit: submitForm, onClick: stopPropagation, children: [_jsx("div", { className: styles.title, children: "D\u00E9clencheur(s)" }), _jsx("div", { className: styles.subTitle, children: "S\u00E9jour" }), _jsx(Input, { className: styles.input, type: "date", label: "Inclu entre", value: stayFrom || "", onValueChange: (value) => updateEntry("stayFrom", value), compact: true }), _jsx(Input, { className: styles.input, type: "date", label: "et", value: stayTo || "", onValueChange: (value) => updateEntry("stayTo", value), compact: true }), _jsx(NumberPicker, { label: _jsxs(_Fragment, { children: ["Nombre de jour(s)", _jsx(Tooltip, { content: "S\u00E9jour d'une dur\u00E9e sup\u00E9rieur ou \u00E9gal \u00E0...", children: _jsx("span", { className: styles.labelIconContainer, children: _jsx(Icons.Info, { className: styles.labelIcon }) }) })] }), min: 0, max: 40, value: stayDuration || 0, onChange: (value) => updateEntry("stayDuration", value), withInput: true, compact: true }), _jsx("div", { className: styles.subTitle, children: "G\u00E9n\u00E9ral" }), _jsx(Input, { className: styles.input, label: _jsxs(_Fragment, { children: ["Code(s) marchand(s)", _jsx(Tooltip, { content: "Si plusieurs codes marchands, les s\u00E9parer par une virgule", children: _jsx("span", { className: styles.labelIconContainer, children: _jsx(Icons.Info, { className: styles.labelIcon }) }) })] }), value: merchant || "", onValueChange: (value) => updateEntry("merchant", value), compact: true }), isSkiPasses && (_jsxs(_Fragment, { children: [_jsx("div", { className: styles.subTitle, children: "Forfaits" }), _jsx(NumberPicker, { className: styles.input, label: "Dur\u00E9e", min: 0, max: 40, value: skiPassDuration || 0, onChange: (value) => updateEntry("skiPassDuration", value), withInput: true, compact: true }), _jsx(Select, { className: styles.input, label: "Op\u00E9rateur de comparaison", options: operatorOptions, value: skiPassDurationOperator || ">", onValueChange: (value) => updateEntry("skiPassDurationOperator", value), compact: true }), durations && (_jsx(Select, { className: styles.input, label: durations?.title, placeholder: " ", options: durations?.tags, value: durationTag || "", onValueChange: (value) => updateEntry("durationTag", value), compact: true }))] })), isOtherProducts && (_jsxs(_Fragment, { children: [_jsx("div", { className: styles.subTitle, children: "Activit\u00E9s Elloha" }), _jsx(Input, { className: styles.input, label: "Groupe", value: ellohaGroup || "", onValueChange: (value) => updateEntry("ellohaGroup", value), compact: true })] }))] }));
54
56
  }
@@ -15,6 +15,7 @@
15
15
  align-items: center;
16
16
  gap: 8px;
17
17
  font-size: 14px;
18
+ white-space: nowrap;
18
19
  }
19
20
 
20
21
  .subTitle::after {
@@ -11,7 +11,8 @@ type Props = {
11
11
  setConfig: React.Dispatch<React.SetStateAction<Config>>;
12
12
  closeCreationForm: () => void;
13
13
  durations: Durations;
14
+ isEsf: boolean;
14
15
  };
15
- export default function Override({ index, currentOffer, overrides, override, currentOverride, setCurrentOverride, config, setConfig, closeCreationForm, durations, }: Props): import("react/jsx-runtime").JSX.Element;
16
+ export default function Override({ index, currentOffer, overrides, override, currentOverride, setCurrentOverride, config, setConfig, closeCreationForm, durations, isEsf, }: Props): import("react/jsx-runtime").JSX.Element;
16
17
  export {};
17
18
  //# sourceMappingURL=override.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"override.d.ts","sourceRoot":"","sources":["../../../../src/common/components/cross-selling-editor/override.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAS/B,OAAO,KAAK,EACV,MAAM,EACN,SAAS,EAET,QAAQ,IAAI,YAAY,EACzB,MAAM,SAAS,CAAC;AAEjB,KAAK,KAAK,GAAG;IACX,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,YAAY,EAAE,CAAC;IAC1B,QAAQ,EAAE,YAAY,CAAC;IACvB,eAAe,EAAE,YAAY,CAAC;IAC9B,kBAAkB,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC,CAAC;IACvE,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC;IACxD,iBAAiB,EAAE,MAAM,IAAI,CAAC;IAC9B,SAAS,EAAE,SAAS,CAAC;CACtB,CAAC;AAEF,MAAM,CAAC,OAAO,UAAU,QAAQ,CAAC,EAC/B,KAAK,EACL,YAAY,EACZ,SAAS,EACT,QAAQ,EACR,eAAe,EACf,kBAAkB,EAClB,MAAM,EACN,SAAS,EACT,iBAAiB,EACjB,SAAS,GACV,EAAE,KAAK,2CAkKP"}
1
+ {"version":3,"file":"override.d.ts","sourceRoot":"","sources":["../../../../src/common/components/cross-selling-editor/override.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAU/B,OAAO,KAAK,EACV,MAAM,EACN,SAAS,EAET,QAAQ,IAAI,YAAY,EACzB,MAAM,SAAS,CAAC;AAEjB,KAAK,KAAK,GAAG;IACX,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,YAAY,EAAE,CAAC;IAC1B,QAAQ,EAAE,YAAY,CAAC;IACvB,eAAe,EAAE,YAAY,CAAC;IAC9B,kBAAkB,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC,CAAC;IACvE,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC;IACxD,iBAAiB,EAAE,MAAM,IAAI,CAAC;IAC9B,SAAS,EAAE,SAAS,CAAC;IACrB,KAAK,EAAE,OAAO,CAAC;CAChB,CAAC;AAEF,MAAM,CAAC,OAAO,UAAU,QAAQ,CAAC,EAC/B,KAAK,EACL,YAAY,EACZ,SAAS,EACT,QAAQ,EACR,eAAe,EACf,kBAAkB,EAClB,MAAM,EACN,SAAS,EACT,iBAAiB,EACjB,SAAS,EACT,KAAK,GACN,EAAE,KAAK,2CAyLP"}
@@ -1,4 +1,4 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
2
  import * as React from "react";
3
3
  import classNames from "classnames";
4
4
  import Popover from "dt-design-system/es/popover";
@@ -7,9 +7,11 @@ import Input from "dt-design-system/es/input";
7
7
  import Tooltip from "dt-design-system/es/tooltip";
8
8
  import * as Icons from "dt-design-system/es/icons";
9
9
  import OverrideTriggerForm from "./override-trigger-form";
10
+ import ESFSpecialRuleForm from "./esf/special-rule-form";
10
11
  import styles from "./override.module.css";
11
- export default function Override({ index, currentOffer, overrides, override, currentOverride, setCurrentOverride, config, setConfig, closeCreationForm, durations, }) {
12
+ export default function Override({ index, currentOffer, overrides, override, currentOverride, setCurrentOverride, config, setConfig, closeCreationForm, durations, isEsf, }) {
12
13
  const [formOpen, setFormOpen] = React.useState(false);
14
+ const [esfDialogOpen, setEsfDialogOpen] = React.useState(false);
13
15
  const isFirst = index === 0;
14
16
  const isLast = index === overrides.length - 1;
15
17
  const toggleFormOpen = (e) => {
@@ -19,6 +21,13 @@ export default function Override({ index, currentOffer, overrides, override, cur
19
21
  const updateFormOpen = (open) => {
20
22
  setFormOpen(open);
21
23
  };
24
+ const openEsfDialog = (e) => {
25
+ e.stopPropagation();
26
+ setEsfDialogOpen(true);
27
+ };
28
+ const closeEsfDialog = () => {
29
+ setEsfDialogOpen(false);
30
+ };
22
31
  const updateCurrentOverride = () => {
23
32
  const isSelected = currentOverride && override.id === currentOverride.id;
24
33
  setCurrentOverride(isSelected ? null : override);
@@ -62,9 +71,6 @@ export default function Override({ index, currentOffer, overrides, override, cur
62
71
  });
63
72
  closeCreationForm();
64
73
  };
65
- const stopPropagation = (e) => {
66
- e.stopPropagation();
67
- };
68
74
  const updateOverrideName = (e) => {
69
75
  e.stopPropagation();
70
76
  const target = e.target;
@@ -97,5 +103,5 @@ export default function Override({ index, currentOffer, overrides, override, cur
97
103
  const classes = classNames(styles.override, {
98
104
  [styles.current]: currentOverride && override.id === currentOverride.id,
99
105
  });
100
- return (_jsxs("div", { className: classes, onClick: updateCurrentOverride, children: [_jsxs("div", { className: styles.sortControls, children: [_jsx(Button, { variant: "transparent", className: styles.sortControl, disabled: isFirst, onClick: sort("up"), compact: true, children: _jsx(Icons.ChevronUp, {}) }), _jsx(Button, { variant: "transparent", className: styles.sortControl, disabled: isLast, onClick: sort("down"), compact: true, children: _jsx(Icons.ChevronDown, {}) })] }), _jsx(Input, { className: styles.input, value: override.name, onChange: updateOverrideName, onClick: stopPropagation, onBlur: updateOverrideName, compact: true }), _jsx(Popover, { trigger: _jsx(Button, { className: styles.edit, compact: true, onClick: toggleFormOpen, children: _jsx(Icons.Tune, {}) }), open: formOpen, onOpenChange: updateFormOpen, children: _jsx(OverrideTriggerForm, { currentOffer: currentOffer, override: override, setConfig: setConfig, durations: durations }) }), _jsx(Tooltip, { content: "Supprimer", children: _jsx(Button, { className: styles.delete, variant: "danger", compact: true, onClick: removeOverride, children: _jsx(Icons.Bin, {}) }) })] }));
106
+ return (_jsxs(_Fragment, { children: [_jsxs("div", { className: classes, onClick: updateCurrentOverride, children: [_jsxs("div", { className: styles.sortControls, children: [_jsx(Button, { variant: "transparent", className: styles.sortControl, disabled: isFirst, onClick: sort("up"), compact: true, children: _jsx(Icons.ChevronUp, {}) }), _jsx(Button, { variant: "transparent", className: styles.sortControl, disabled: isLast, onClick: sort("down"), compact: true, children: _jsx(Icons.ChevronDown, {}) })] }), _jsx(Input, { className: styles.input, value: override.name, onChange: updateOverrideName, onClick: (e) => e.stopPropagation(), onBlur: updateOverrideName, compact: true }), isEsf ? (_jsx(Button, { className: styles.edit, compact: true, onClick: openEsfDialog, children: _jsx(Icons.Tune, {}) })) : (_jsx(Popover, { trigger: _jsx(Button, { className: styles.edit, compact: true, onClick: toggleFormOpen, children: _jsx(Icons.Tune, {}) }), open: formOpen, onOpenChange: updateFormOpen, children: _jsx(OverrideTriggerForm, { currentOffer: currentOffer, override: override, setConfig: setConfig, durations: durations }) })), _jsx(Tooltip, { content: "Supprimer", children: _jsx(Button, { className: styles.delete, variant: "danger", compact: true, onClick: removeOverride, children: _jsx(Icons.Bin, {}) }) })] }), isEsf && (_jsx(ESFSpecialRuleForm, { open: esfDialogOpen, close: closeEsfDialog, currentOffer: currentOffer, override: override, setConfig: setConfig }))] }));
101
107
  }
@@ -1 +1 @@
1
- {"version":3,"file":"overrides-list.d.ts","sourceRoot":"","sources":["../../../../src/common/components/cross-selling-editor/overrides-list.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAQ/B,OAAO,KAAK,EACV,MAAM,EACN,SAAS,EAET,QAAQ,IAAI,YAAY,EACzB,MAAM,SAAS,CAAC;AAEjB,KAAK,KAAK,GAAG;IACX,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,YAAY,EAAE,CAAC;IAC1B,eAAe,EAAE,YAAY,CAAC;IAC9B,kBAAkB,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC,CAAC;IACvE,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC;IACxD,SAAS,EAAE,SAAS,CAAC;CACtB,CAAC;AAEF,MAAM,CAAC,OAAO,UAAU,aAAa,CAAC,EACpC,YAAY,EACZ,SAAS,EACT,eAAe,EACf,kBAAkB,EAClB,MAAM,EACN,SAAS,EACT,SAAS,GACV,EAAE,KAAK,2CAoIP"}
1
+ {"version":3,"file":"overrides-list.d.ts","sourceRoot":"","sources":["../../../../src/common/components/cross-selling-editor/overrides-list.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAQ/B,OAAO,KAAK,EACV,MAAM,EACN,SAAS,EAET,QAAQ,IAAI,YAAY,EACzB,MAAM,SAAS,CAAC;AAEjB,KAAK,KAAK,GAAG;IACX,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,YAAY,EAAE,CAAC;IAC1B,eAAe,EAAE,YAAY,CAAC;IAC9B,kBAAkB,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC,CAAC;IACvE,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC;IACxD,SAAS,EAAE,SAAS,CAAC;CACtB,CAAC;AAEF,MAAM,CAAC,OAAO,UAAU,aAAa,CAAC,EACpC,YAAY,EACZ,SAAS,EACT,eAAe,EACf,kBAAkB,EAClB,MAAM,EACN,SAAS,EACT,SAAS,GACV,EAAE,KAAK,2CA2IP"}
@@ -1,4 +1,4 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
1
+ import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
2
2
  import * as React from "react";
3
3
  import Button from "dt-design-system/es/button";
4
4
  import Collapsible from "dt-design-system/es/collapsible";
@@ -38,7 +38,7 @@ export default function OverridesList({ currentOffer, overrides, currentOverride
38
38
  ...itemConfig,
39
39
  overrides: [
40
40
  ...itemOverrides,
41
- { id: newId, name: newOverrideName, trigger: {}, rules: {} },
41
+ { id: newId, name: newOverrideName, triggers: {}, rules: {} },
42
42
  ],
43
43
  },
44
44
  };
@@ -48,8 +48,11 @@ export default function OverridesList({ currentOffer, overrides, currentOverride
48
48
  setNewOverride("");
49
49
  closeCreationForm();
50
50
  };
51
- const title = (_jsxs("span", { className: styles.title, children: [overrides.length, " surcharges", _jsxs(Popover, { className: styles.titlePopover, trigger: _jsx(Button, { variant: "transparent", compact: true, children: _jsx(Icons.Info, {}) }), children: [_jsx("b", { children: "Si plusieurs surcharges" }), " correspondent au contenu du panier,", " ", _jsx("b", { children: "seule la premi\u00E8re est appliqu\u00E9e" }), ".", _jsx("br", {}), "Vous pouvez changer l'ordre des surcharges \u00E0 l'aide des fl\u00E8ches visibible \u00E0 gauche de chaque surcharge au survol de ces derni\u00E8res."] })] }));
52
- return (_jsxs("div", { className: styles.overrides, children: [hasOverrides ? (_jsx(Collapsible, { title: title, className: styles.collapsible, compact: true, open: opened, toggleTooltip: "Afficher toutes les surcharges", onOpenChange: setOpened, hiddenContent: overrides.map((override, index) => {
53
- return (_jsx(Override, { index: index, currentOffer: currentOffer, overrides: overrides, override: override, currentOverride: currentOverride, setCurrentOverride: setCurrentOverride, config: config, setConfig: setConfig, closeCreationForm: closeCreationForm, durations: durations }, override.id));
54
- }) })) : null, _jsxs("div", { className: styles.addOverride, children: ["Ajouter une surcharge", " ", _jsx(Popover, { className: styles.popover, trigger: _jsx(Button, { compact: true, onClick: toggleCreationForm, children: _jsx(Icons.Plus, {}) }), open: creationFormOpened, children: _jsxs("form", { className: styles.createForm, onSubmit: createOverride, children: [_jsx(Input, { placeholder: "Nom", value: newOverride, onValueChange: setNewOverride, error: error, compact: true, autoFocus: true }), _jsx(Button, { className: styles.createSubmit, type: "submit", disabled: newOverrideIsInvalid, children: "Ajouter" })] }) })] })] }));
51
+ const isEsf = currentOffer === "ESF";
52
+ const labelPlural = isEsf ? "règles" : "surcharges";
53
+ const labelSingular = isEsf ? "règle" : "surcharge";
54
+ const title = (_jsxs("span", { className: styles.title, children: [overrides.length, " ", overrides.length === 1 ? labelSingular : labelPlural, _jsxs(Popover, { className: styles.titlePopover, trigger: _jsx(Button, { variant: "transparent", compact: true, children: _jsx(Icons.Info, {}) }), children: [_jsxs("b", { children: ["Si plusieurs ", labelPlural] }), " correspondent au contenu du panier,", " ", _jsx("b", { children: "seule la premi\u00E8re est appliqu\u00E9e" }), ".", _jsx("br", {}), "Vous pouvez changer l'ordre des ", labelPlural, " \u00E0 l'aide des fl\u00E8ches visible \u00E0 gauche de chaque ", labelSingular, " au survol de ces derni\u00E8res."] })] }));
55
+ return (_jsxs("div", { className: styles.overrides, children: [hasOverrides ? (_jsx(Collapsible, { title: title, className: styles.collapsible, compact: true, open: opened, toggleTooltip: `Afficher toutes les ${labelPlural}`, onOpenChange: setOpened, hiddenContent: overrides.map((override, index) => {
56
+ return (_jsx(Override, { index: index, currentOffer: currentOffer, overrides: overrides, override: override, currentOverride: currentOverride, setCurrentOverride: setCurrentOverride, config: config, setConfig: setConfig, closeCreationForm: closeCreationForm, durations: durations, isEsf: isEsf }, override.id));
57
+ }) })) : null, _jsx(Popover, { className: styles.popover, trigger: _jsxs(Button, { className: styles.addOverride, onClick: toggleCreationForm, variant: "transparent", compact: true, children: ["Ajouter une ", labelSingular, " ", _jsx(Icons.Plus, {})] }), open: creationFormOpened, children: _jsxs("form", { className: styles.createForm, onSubmit: createOverride, children: [_jsx(Input, { placeholder: "Nom", value: newOverride, onValueChange: setNewOverride, error: error, compact: true, autoFocus: true }), _jsx(Button, { className: styles.createSubmit, type: "submit", disabled: newOverrideIsInvalid, children: "Ajouter" })] }) })] }));
55
58
  }
@@ -21,15 +21,30 @@
21
21
  border-radius: var(--ds-radius-100, 4px);
22
22
  }
23
23
 
24
- .addOverride {
25
- display: flex;
26
- align-items: center;
27
- justify-content: space-between;
28
- gap: 6px;
29
- padding: 6px;
24
+ button.addOverride {
25
+ --ds-button-compact-padding: 7px;
26
+ --ds-button-font-weight: 400;
27
+ --ds-button-font-size: 13px;
28
+ --ds-button-radius: var(--ds-radius-100, 4px);
29
+
30
+ width: 100%;
31
+ justify-content: flex-start;
32
+ text-align: left;
30
33
  background-color: var(--ds-grey-100, #f8f8f8);
31
- font-size: 13px;
32
- border-radius: var(--ds-radius-100, 4px);
34
+ }
35
+
36
+ button.addOverride:hover {
37
+ background-color: var(--ds-grey-200, #ededed);
38
+ }
39
+
40
+ button.addOverride > svg {
41
+ --size: 22px;
42
+
43
+ margin-left: auto;
44
+ padding: 4px;
45
+ fill: var(--ds-grey-100, #f8f8f8);
46
+ background-color: var(--ds-primary, var(--ds-blue-500, #002dcc));
47
+ border-radius: var(--ds-radius-200, 8px);
33
48
  }
34
49
 
35
50
  .collapsible {
@@ -45,6 +60,7 @@
45
60
  .title {
46
61
  display: flex;
47
62
  align-items: center;
63
+ gap: 3px;
48
64
  }
49
65
 
50
66
  .titlePopover {
@@ -4,9 +4,10 @@ type Props = {
4
4
  container: HTMLElement;
5
5
  config: Config;
6
6
  setConfig: React.Dispatch<React.SetStateAction<Config>>;
7
- tunnelOffers: Record<string, string>;
8
7
  durations: Durations;
8
+ tunnelOffersOrder?: string[];
9
+ displayedTunnelOffers?: string[];
9
10
  };
10
- export default function Rules({ container, config, setConfig, tunnelOffers, durations, }: Props): import("react/jsx-runtime").JSX.Element;
11
+ export default function Rules({ container, config, setConfig, durations, tunnelOffersOrder, displayedTunnelOffers, }: Props): import("react/jsx-runtime").JSX.Element;
11
12
  export {};
12
13
  //# sourceMappingURL=rules.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"rules.d.ts","sourceRoot":"","sources":["../../../../src/common/components/cross-selling-editor/rules.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAS/B,OAAO,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAEjD,KAAK,KAAK,GAAG;IACX,SAAS,EAAE,WAAW,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC;IACxD,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,SAAS,EAAE,SAAS,CAAC;CACtB,CAAC;AAEF,MAAM,CAAC,OAAO,UAAU,KAAK,CAAC,EAC5B,SAAS,EACT,MAAM,EACN,SAAS,EACT,YAAY,EACZ,SAAS,GACV,EAAE,KAAK,2CAyFP"}
1
+ {"version":3,"file":"rules.d.ts","sourceRoot":"","sources":["../../../../src/common/components/cross-selling-editor/rules.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAS/B,OAAO,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAEjD,KAAK,KAAK,GAAG;IACX,SAAS,EAAE,WAAW,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC;IACxD,SAAS,EAAE,SAAS,CAAC;IACrB,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC7B,qBAAqB,CAAC,EAAE,MAAM,EAAE,CAAC;CAClC,CAAC;AAEF,MAAM,CAAC,OAAO,UAAU,KAAK,CAAC,EAC5B,SAAS,EACT,MAAM,EACN,SAAS,EACT,SAAS,EACT,iBAAiB,EACjB,qBAAqB,GACtB,EAAE,KAAK,2CAuGP"}
@@ -8,8 +8,23 @@ import Rule from "./rule";
8
8
  import OverridesList from "./overrides-list";
9
9
  import * as Utils from "./services/utils";
10
10
  import styles from "./rules.module.css";
11
- export default function Rules({ container, config, setConfig, tunnelOffers, durations, }) {
12
- const [currentOffer, setCurrentOffer] = React.useState("");
11
+ export default function Rules({ container, config, setConfig, durations, tunnelOffersOrder, displayedTunnelOffers, }) {
12
+ const tunnelOptions = Object.keys(Utils.tunnelOffers)
13
+ .map((key) => {
14
+ const label = Utils.tunnelOffers[key];
15
+ return { value: key, label };
16
+ })
17
+ .filter(({ value }) => {
18
+ if (!displayedTunnelOffers)
19
+ return true;
20
+ return displayedTunnelOffers.includes(value);
21
+ })
22
+ .sort((a, b) => {
23
+ if (!tunnelOffersOrder)
24
+ return 0;
25
+ return (tunnelOffersOrder.indexOf(a.value) - tunnelOffersOrder.indexOf(b.value));
26
+ });
27
+ const [currentOffer, setCurrentOffer] = React.useState(tunnelOptions.length === 1 ? tunnelOptions[0].value : "");
13
28
  const [currentOverride, setCurrentOverride] = React.useState(null);
14
29
  const overrides = config[currentOffer]?.overrides || [];
15
30
  const showOverrides = currentOffer && Utils.hasAllowedOverrides(currentOffer);
@@ -19,11 +34,7 @@ export default function Rules({ container, config, setConfig, tunnelOffers, dura
19
34
  setCurrentOffer(newCurrentOffer);
20
35
  setCurrentOverride(null);
21
36
  };
22
- const tunnelOptions = Object.keys(tunnelOffers).map((key) => {
23
- const label = tunnelOffers[key];
24
- return { value: key, label };
25
- });
26
- return (_jsxs("div", { className: styles.container, children: [_jsxs("div", { className: styles.title, children: ["Configuration", _jsx(Popover, { className: styles.popover, trigger: _jsx(Button, { variant: "transparent", children: _jsx(Icons.Info, {}) }), children: "La configuration vous permet de personnaliser l'ordre d'affichage des produits sugg\u00E9r\u00E9s dans le panier en fonction des produits pr\u00E9sents dans le panier de l'utilisateur." })] }), _jsx("div", { className: styles.explanation, children: "Configurez les suggestions de produit en fonction du contenu du panier" }), _jsx(Select, { className: styles.select, label: "Produit ajout\u00E9 au panier", placeholder: "S\u00E9lectionnez un produit", value: currentOffer, options: tunnelOptions, onValueChange: updateCurrentOffer }), showOverrides && (_jsx(OverridesList, { currentOffer: currentOffer, overrides: overrides, currentOverride: currentOverride, setCurrentOverride: setCurrentOverride, config: config, setConfig: setConfig, durations: durations })), currentOffer && (_jsxs(_Fragment, { children: [_jsx("div", { className: styles.subTitle, children: "Priorisation par types de produit" }), sections.map((section) => {
37
+ return (_jsxs("div", { className: styles.container, children: [_jsxs("div", { className: styles.title, children: ["Configuration", _jsx(Popover, { className: styles.popover, trigger: _jsx(Button, { variant: "transparent", children: _jsx(Icons.Info, {}) }), children: "La configuration vous permet de personnaliser l'ordre d'affichage des produits sugg\u00E9r\u00E9s dans le panier en fonction des produits pr\u00E9sents dans le panier de l'utilisateur." })] }), _jsx("div", { className: styles.explanation, children: "Configurez les suggestions de produit en fonction du contenu du panier" }), _jsx(Select, { className: styles.select, label: "Produit ajout\u00E9 au panier", placeholder: "S\u00E9lectionnez un produit", value: currentOffer, options: tunnelOptions, onValueChange: updateCurrentOffer, disabled: tunnelOptions.length <= 1 }), showOverrides && (_jsx(OverridesList, { currentOffer: currentOffer, overrides: overrides, currentOverride: currentOverride, setCurrentOverride: setCurrentOverride, config: config, setConfig: setConfig, durations: durations })), currentOffer && (_jsxs(_Fragment, { children: [_jsx("div", { className: styles.subTitle, children: "Priorisation par types de produit" }), sections.map((section) => {
27
38
  const uuid = section.getAttribute("data-uuid");
28
39
  const title = section.querySelector(".tunnel-offer__title").textContent;
29
40
  return (_jsx(Rule, { uuid: uuid, uuids: uuids, title: title, currentOffer: currentOffer, currentOverride: currentOverride, config: config, setConfig: setConfig }, title));
@@ -1,3 +1,10 @@
1
1
  export declare function fetchTunnelOffers(lang: string, facet: 0 | 1): Promise<any>;
2
2
  export declare function fetchMseMCart(cartId: string, lang: string): Promise<any>;
3
+ export declare function fetchEsfWelcome(lang: string, abortController: AbortController): Promise<any>;
4
+ export declare function fetchEsfKinds(lang: string, season: string, stayFrom: string, stayTo: string, period: number, abortController: AbortController): Promise<any>;
5
+ export declare function fetchEsfAges(lang: string, season: string, stayFrom: string, stayTo: string, period: number, abortController: AbortController): Promise<any>;
6
+ export declare function fetchEsfActivities(lang: string, season: string, stayFrom: string, stayTo: string, period: number, ages: string[], kinds: string[], abortController: AbortController): Promise<any>;
7
+ export declare function fetchEsfLevels(lang: string, season: string, stayFrom: string, stayTo: string, period: number, activities: string[], ages: string[], kinds: string[], abortController: AbortController): Promise<any>;
8
+ export declare function fetchEsfMeetings(lang: string, season: string, stayFrom: string, stayTo: string, period: number, activities: string[], ages: string[], kinds: string[], levels: string[], abortController: AbortController): Promise<any>;
9
+ export declare function fetchEsfProducts(lang: string, season: string, stayFrom: string, stayTo: string, period: number, activities: string[], ages: string[], kinds: string[], levels: string[], meetings: string[], abortController: AbortController): Promise<any>;
3
10
  //# sourceMappingURL=api.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../../../../src/common/components/cross-selling-editor/services/api.ts"],"names":[],"mappings":"AAOA,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,gBAIjE;AAED,wBAAsB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,gBAM/D"}
1
+ {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../../../../src/common/components/cross-selling-editor/services/api.ts"],"names":[],"mappings":"AAOA,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,gBASjE;AAED,wBAAsB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,gBAW/D;AAED,wBAAsB,eAAe,CACnC,IAAI,EAAE,MAAM,EACZ,eAAe,EAAE,eAAe,gBAWjC;AAED,wBAAsB,aAAa,CACjC,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,eAAe,EAAE,eAAe,gBAqBjC;AAED,wBAAsB,YAAY,CAChC,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,eAAe,EAAE,eAAe,gBAmBjC;AAED,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EAAE,EACd,KAAK,EAAE,MAAM,EAAE,EACf,eAAe,EAAE,eAAe,gBAqBjC;AAED,wBAAsB,cAAc,CAClC,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,EAAE,EACpB,IAAI,EAAE,MAAM,EAAE,EACd,KAAK,EAAE,MAAM,EAAE,EACf,eAAe,EAAE,eAAe,gBAsBjC;AAED,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,EAAE,EACpB,IAAI,EAAE,MAAM,EAAE,EACd,KAAK,EAAE,MAAM,EAAE,EACf,MAAM,EAAE,MAAM,EAAE,EAChB,eAAe,EAAE,eAAe,gBAuBjC;AAED,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,EAAE,EACpB,IAAI,EAAE,MAAM,EAAE,EACd,KAAK,EAAE,MAAM,EAAE,EACf,MAAM,EAAE,MAAM,EAAE,EAChB,QAAQ,EAAE,MAAM,EAAE,EAClB,eAAe,EAAE,eAAe,gBAwBjC"}
@@ -4,13 +4,111 @@ const { publicRuntimeConfig } = getConfig();
4
4
  const { msemServicesUrl, esfplusUrl, channel, resort } = publicRuntimeConfig;
5
5
  export async function fetchTunnelOffers(lang, facet) {
6
6
  const endpoint = `${msemServicesUrl}/api/tunnel/offers/${channel}/${resort}`;
7
- const result = await Fetcher.get(endpoint, { lang, facet });
7
+ const result = await Fetcher.get(endpoint, { lang, facet }, undefined, undefined);
8
8
  return result;
9
9
  }
10
10
  export async function fetchMseMCart(cartId, lang) {
11
11
  const endpoint = `${esfplusUrl}/api/esfplus/cart`;
12
12
  const id = JSON.parse(cartId);
13
- const payload = { cartId: id, lang, resort };
14
- const result = await Fetcher.post(endpoint, payload);
13
+ const result = await Fetcher.post(endpoint, { cartId: id, lang, resort }, undefined, undefined, undefined);
14
+ return result;
15
+ }
16
+ export async function fetchEsfWelcome(lang, abortController) {
17
+ const endpoint = `${msemServicesUrl}/api/esf/welcome`;
18
+ const result = await Fetcher.post(endpoint, { lang, resort: String(resort) }, { skipValidation: true }, undefined, abortController.signal);
19
+ return result;
20
+ }
21
+ export async function fetchEsfKinds(lang, season, stayFrom, stayTo, period, abortController) {
22
+ const endpoint = `${msemServicesUrl}/api/esf/kinds`;
23
+ const result = await Fetcher.post(endpoint, {
24
+ duplicateCP: true,
25
+ editor: true,
26
+ lang,
27
+ period,
28
+ preview: true,
29
+ resort: String(resort),
30
+ season,
31
+ stayFrom,
32
+ stayTo,
33
+ }, { skipValidation: true }, undefined, abortController.signal);
34
+ return result;
35
+ }
36
+ export async function fetchEsfAges(lang, season, stayFrom, stayTo, period, abortController) {
37
+ const endpoint = `${msemServicesUrl}/api/esf/ages`;
38
+ const result = await Fetcher.post(endpoint, {
39
+ editor: true,
40
+ lang,
41
+ period,
42
+ resort: String(resort),
43
+ season,
44
+ stayFrom,
45
+ stayTo,
46
+ }, { skipValidation: true }, undefined, abortController.signal);
47
+ return result;
48
+ }
49
+ export async function fetchEsfActivities(lang, season, stayFrom, stayTo, period, ages, kinds, abortController) {
50
+ const endpoint = `${msemServicesUrl}/api/esf/activities`;
51
+ const result = await Fetcher.post(endpoint, {
52
+ ages,
53
+ editor: true,
54
+ kinds,
55
+ lang,
56
+ period,
57
+ resort: String(resort),
58
+ season,
59
+ stayFrom,
60
+ stayTo,
61
+ }, { skipValidation: true }, undefined, abortController.signal);
62
+ return result;
63
+ }
64
+ export async function fetchEsfLevels(lang, season, stayFrom, stayTo, period, activities, ages, kinds, abortController) {
65
+ const endpoint = `${msemServicesUrl}/api/esf/levels`;
66
+ const result = await Fetcher.post(endpoint, {
67
+ activities,
68
+ ages,
69
+ editor: true,
70
+ kinds,
71
+ lang,
72
+ period,
73
+ resort: String(resort),
74
+ season,
75
+ stayFrom,
76
+ stayTo,
77
+ }, { skipValidation: true }, undefined, abortController.signal);
78
+ return result;
79
+ }
80
+ export async function fetchEsfMeetings(lang, season, stayFrom, stayTo, period, activities, ages, kinds, levels, abortController) {
81
+ const endpoint = `${msemServicesUrl}/api/esf/meetings`;
82
+ const result = await Fetcher.post(endpoint, {
83
+ activities,
84
+ ages,
85
+ editor: true,
86
+ kinds,
87
+ lang,
88
+ levels,
89
+ period,
90
+ resort: String(resort),
91
+ season,
92
+ stayFrom,
93
+ stayTo,
94
+ }, { skipValidation: true }, undefined, abortController.signal);
95
+ return result;
96
+ }
97
+ export async function fetchEsfProducts(lang, season, stayFrom, stayTo, period, activities, ages, kinds, levels, meetings, abortController) {
98
+ const endpoint = `${msemServicesUrl}/api/esf/products`;
99
+ const result = await Fetcher.post(endpoint, {
100
+ activities,
101
+ ages,
102
+ editor: true,
103
+ kinds,
104
+ lang,
105
+ levels,
106
+ period,
107
+ resort: String(resort),
108
+ season,
109
+ stayFrom,
110
+ stayTo,
111
+ filters: { codesLieuRendezVous: meetings },
112
+ }, { skipValidation: true }, undefined, abortController.signal);
15
113
  return result;
16
114
  }
@@ -1,4 +1,4 @@
1
- import type { Config, Override } from "../types";
1
+ import type { Config, EsfOffersContent, Override } from "../types";
2
2
  type Stay = {
3
3
  from?: string;
4
4
  to?: string;
@@ -10,6 +10,8 @@ type CartContent = {
10
10
  stay?: Stay;
11
11
  skiPassDurations?: number[];
12
12
  durationTags?: string[];
13
+ ellohaGroups?: string[];
14
+ esfOffersContent?: EsfOffersContent[];
13
15
  };
14
16
  export declare const tunnelOffers: {
15
17
  HOT: string;
@@ -20,19 +22,20 @@ export declare const tunnelOffers: {
20
22
  STAND: string;
21
23
  };
22
24
  type OrderKey = keyof typeof tunnelOffers;
23
- export declare function getSortedOffers(container: HTMLElement, cartContent: CartContent, config: Config): {
25
+ export declare function getSortedOffers(container: HTMLElement, cartContent: CartContent, config: Config, forcedEsfOverride?: string): {
24
26
  title: string;
25
27
  weight: number;
26
28
  elementHTML: string;
27
29
  isHidden: boolean;
28
30
  }[];
29
- export declare function getActiveOverride(key: string | OrderKey, cartContent: CartContent, config: Config): Override;
31
+ export declare function getActiveOverride(key: string | OrderKey, cartContent: CartContent, config: Config, forcedEsfOverride?: string): Override;
30
32
  export declare const allowedOverrides: string[];
31
33
  export declare function hasAllowedOverrides(kind: string): boolean;
32
34
  type Inscription = {
33
- skipassCatalog: string;
34
35
  duration: string;
35
36
  durationTags?: string[];
37
+ categoryGroupCode?: string;
38
+ codes: EsfOffersContent;
36
39
  };
37
40
  type Order = {
38
41
  merchant: string;
@@ -54,9 +57,12 @@ export declare function getStayFromCart(cart: Cart): {
54
57
  to: string;
55
58
  duration: number;
56
59
  };
57
- export declare function getSkiPassDurationFromCart(cart: Cart): Promise<number[]>;
58
- export declare function getDurationTagsFromCart(cart: Cart): Promise<string[]>;
60
+ export declare function getSkiPassDurationFromCart(cart: Cart): number[];
61
+ export declare function getDurationTagsFromCart(cart: Cart): string[];
62
+ export declare function getEllohaGroupsFromCart(cart: Cart): string[];
63
+ export declare function getEsfOffersFromCart(cart: Cart): EsfOffersContent[];
59
64
  export declare const CONFIG_ID = "cross-selling-editor";
60
65
  export declare function getConfig(container: HTMLElement): any;
66
+ export declare function getIntervalLengthFromDates(from: string, to: string): number;
61
67
  export {};
62
68
  //# sourceMappingURL=utils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../../../src/common/components/cross-selling-editor/services/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAa,MAAM,UAAU,CAAC;AAE5D,KAAK,IAAI,GAAG;IACV,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CAC5B,CAAC;AAEF,KAAK,WAAW,GAAG;IACjB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9B,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,IAAI,CAAC,EAAE,IAAI,CAAC;IACZ,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;CACzB,CAAC;AAEF,eAAO,MAAM,YAAY;;;;;;;CAOxB,CAAC;AAEF,KAAK,QAAQ,GAAG,MAAM,OAAO,YAAY,CAAC;AAE1C,wBAAgB,eAAe,CAC7B,SAAS,EAAE,WAAW,EACtB,WAAW,EAAE,WAAW,EACxB,MAAM,EAAE,MAAM;;;;;IAmDf;AAED,wBAAgB,iBAAiB,CAC/B,GAAG,EAAE,MAAM,GAAG,QAAQ,EACtB,WAAW,EAAE,WAAW,EACxB,MAAM,EAAE,MAAM,YAgBf;AAgGD,eAAO,MAAM,gBAAgB,UAAyC,CAAC;AAEvE,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,WAE/C;AAED,KAAK,WAAW,GAAG;IACjB,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;CACzB,CAAC;AAEF,KAAK,KAAK,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,WAAW,EAAE,CAAA;CAAE,CAAC;AAE/D,KAAK,IAAI,GAAG;IACV,MAAM,CAAC,EAAE,MAAM,CAAC,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;IACnC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,IAAI,MAY3C;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,IAAI,YAS9C;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,IAAI;;;;;;;;EAMzC;AAED,wBAAsB,0BAA0B,CAAC,IAAI,EAAE,IAAI,qBAK1D;AAcD,wBAAsB,uBAAuB,CAAC,IAAI,EAAE,IAAI,qBAQvD;AAED,eAAO,MAAM,SAAS,yBAAyB,CAAC;AAEhD,wBAAgB,SAAS,CAAC,SAAS,EAAE,WAAW,OAI/C"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../../../src/common/components/cross-selling-editor/services/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,gBAAgB,EAAE,QAAQ,EAAa,MAAM,UAAU,CAAC;AAE9E,KAAK,IAAI,GAAG;IACV,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CAC5B,CAAC;AAEF,KAAK,WAAW,GAAG;IACjB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9B,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,IAAI,CAAC,EAAE,IAAI,CAAC;IACZ,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,gBAAgB,CAAC,EAAE,gBAAgB,EAAE,CAAC;CACvC,CAAC;AAEF,eAAO,MAAM,YAAY;;;;;;;CAOxB,CAAC;AAEF,KAAK,QAAQ,GAAG,MAAM,OAAO,YAAY,CAAC;AAE1C,wBAAgB,eAAe,CAC7B,SAAS,EAAE,WAAW,EACtB,WAAW,EAAE,WAAW,EACxB,MAAM,EAAE,MAAM,EACd,iBAAiB,CAAC,EAAE,MAAM;;;;;IA6D3B;AAED,wBAAgB,iBAAiB,CAC/B,GAAG,EAAE,MAAM,GAAG,QAAQ,EACtB,WAAW,EAAE,WAAW,EACxB,MAAM,EAAE,MAAM,EACd,iBAAiB,CAAC,EAAE,MAAM,YAoB3B;AAgJD,eAAO,MAAM,gBAAgB,UAAgD,CAAC;AAE9E,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,WAE/C;AAED,KAAK,WAAW,GAAG;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,KAAK,EAAE,gBAAgB,CAAC;CACzB,CAAC;AAEF,KAAK,KAAK,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,WAAW,EAAE,CAAA;CAAE,CAAC;AAE/D,KAAK,IAAI,GAAG;IACV,MAAM,CAAC,EAAE,MAAM,CAAC,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;IACnC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,IAAI,MAY3C;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,IAAI,YAS9C;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,IAAI;;;;;;;;EAMzC;AAED,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,IAAI,YAKpD;AAcD,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,IAAI,YAQjD;AAED,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,IAAI,YAMjD;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,IAAI,GAAG,gBAAgB,EAAE,CAUnE;AAED,eAAO,MAAM,SAAS,yBAAyB,CAAC;AAEhD,wBAAgB,SAAS,CAAC,SAAS,EAAE,WAAW,OAc/C;AAED,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,UAOlE"}