@roomstay/frontend 2.3.13 → 2.3.14

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 (42) hide show
  1. package/dist/87.bundle.js +1 -0
  2. package/dist/975.bundle.js +1 -1
  3. package/dist/main.bundle.js +1 -1
  4. package/dist/src/components/generic/Currency.d.ts +2 -11
  5. package/dist/src/components/generic/Currency.js +10 -62
  6. package/dist/src/components/generic/Currency.js.map +1 -1
  7. package/dist/src/components/generic/PaymentCard/InlinePaymentOption.js +23 -13
  8. package/dist/src/components/generic/PaymentCard/InlinePaymentOption.js.map +1 -1
  9. package/dist/src/components/generic/PlanpayPrice/PlanpayPrice.d.ts +7 -0
  10. package/dist/src/components/generic/PlanpayPrice/PlanpayPrice.js +50 -0
  11. package/dist/src/components/generic/PlanpayPrice/PlanpayPrice.js.map +1 -0
  12. package/dist/src/components/generic/RadioButtonGroup/RadioButtonGroup.js +34 -33
  13. package/dist/src/components/generic/RadioButtonGroup/RadioButtonGroup.js.map +1 -1
  14. package/dist/src/components/generic/Text.d.ts +1 -1
  15. package/dist/src/components/generic/Text.js.map +1 -1
  16. package/dist/src/components/steps/confirmation/PaymentInformation.js +10 -24
  17. package/dist/src/components/steps/confirmation/PaymentInformation.js.map +1 -1
  18. package/dist/src/components/steps/confirmation/PlanpayLabel.d.ts +2 -0
  19. package/dist/src/components/steps/confirmation/PlanpayLabel.js +69 -0
  20. package/dist/src/components/steps/confirmation/PlanpayLabel.js.map +1 -0
  21. package/dist/src/components/steps/room/roomDetails/RoomDetails.js +18 -2
  22. package/dist/src/components/steps/room/roomDetails/RoomDetails.js.map +1 -1
  23. package/dist/src/components/steps/room/roomDetails/roomRates/RoomRateRow.js +19 -2
  24. package/dist/src/components/steps/room/roomDetails/roomRates/RoomRateRow.js.map +1 -1
  25. package/dist/src/hooks/Currency.d.ts +16 -0
  26. package/dist/src/hooks/Currency.js +73 -0
  27. package/dist/src/hooks/Currency.js.map +1 -0
  28. package/dist/src/hooks/Planpay.d.ts +15 -0
  29. package/dist/src/hooks/Planpay.js +25 -0
  30. package/dist/src/hooks/Planpay.js.map +1 -0
  31. package/dist/src/hooks/usePlanpayRawPrice.d.ts +8 -0
  32. package/dist/src/hooks/usePlanpayRawPrice.js +48 -0
  33. package/dist/src/hooks/usePlanpayRawPrice.js.map +1 -0
  34. package/dist/src/models/Api/HotelDTO.d.ts +2 -2
  35. package/dist/src/models/Api/HotelDTO.js.map +1 -1
  36. package/dist/src/models/Client/Hotel/Hotel.d.ts +2 -2
  37. package/dist/src/models/Client/Hotel/Hotel.js.map +1 -1
  38. package/dist/test.bundle.js +1 -1
  39. package/dist/vendors.bundle.js +1 -1
  40. package/package.json +2 -2
  41. package/dist/213.bundle.js +0 -1
  42. package/dist/423.bundle.js +0 -1
@@ -1,11 +1,2 @@
1
- interface CurrencyProps {
2
- removeCurrencyAfterChar?: number;
3
- shortenThousandsAfter?: number;
4
- children: any;
5
- hideDecimals?: boolean;
6
- disableLocalization?: boolean;
7
- disableLoading?: boolean;
8
- originalCurrencyCode?: string;
9
- }
10
- export default function Currency(props: CurrencyProps): JSX.Element;
11
- export {};
1
+ import { UseCurrencyProps } from '../../hooks/Currency';
2
+ export default function Currency(props: UseCurrencyProps): JSX.Element;
@@ -22,72 +22,20 @@ var __importStar = (this && this.__importStar) || function (mod) {
22
22
  __setModuleDefault(result, mod);
23
23
  return result;
24
24
  };
25
+ var __importDefault = (this && this.__importDefault) || function (mod) {
26
+ return (mod && mod.__esModule) ? mod : { "default": mod };
27
+ };
25
28
  Object.defineProperty(exports, "__esModule", { value: true });
26
- const contexts_1 = require("../../contexts/index.js");
27
- const hooks_1 = require("../../hooks/index.js");
28
- const react_1 = __importStar(require("react"));
29
+ const react_1 = __importDefault(require("react"));
29
30
  const Icon_1 = __importStar(require("./Icon/Icon"));
31
+ const Currency_1 = __importDefault(require("../../hooks/Currency"));
30
32
  const Color_1 = require("../../util/Color");
31
- const currencyHelper = __importStar(require("../../util/CurrencyHelper"));
32
33
  function Currency(props) {
33
- var _a;
34
- const { currentCurrency } = (0, react_1.useContext)(contexts_1.CompanyContext);
35
- const { hotel } = (0, hooks_1.useCurrentHotel)();
36
- const [value, setValue] = (0, react_1.useState)(0);
37
- const [isLoading, setIsLoading] = (0, react_1.useState)(false);
38
- const toLocalString = (original, toFixed) => {
39
- if (props.disableLocalization) {
40
- return original;
41
- }
42
- if (original) {
43
- return original.toLocaleString(undefined, { minimumFractionDigits: toFixed ? 2 : 0 });
44
- }
45
- return original;
46
- };
47
- (0, react_1.useEffect)(() => {
48
- let isCancelled = false;
49
- setIsLoading(true);
50
- setTimeout(() => {
51
- var _a;
52
- if (!isCancelled) {
53
- setIsLoading(false);
54
- if (isNaN(props.children)) {
55
- setValue(props.children);
56
- }
57
- else {
58
- const totalValue = currencyHelper.convertPrice(props.children, !props.hideDecimals, currentCurrency, (_a = props.originalCurrencyCode) !== null && _a !== void 0 ? _a : hotel === null || hotel === void 0 ? void 0 : hotel.defaultCurrency);
59
- if (!isCancelled) {
60
- setValue(totalValue);
61
- }
62
- }
63
- }
64
- }, props.disableLoading ? 0 : 200);
65
- return () => {
66
- setIsLoading(false);
67
- isCancelled = true;
68
- };
69
- }, [props.children, currentCurrency, props.originalCurrencyCode, currencyHelper.getRatesForCurrencyCode((_a = props.originalCurrencyCode) !== null && _a !== void 0 ? _a : hotel === null || hotel === void 0 ? void 0 : hotel.defaultCurrency)]);
70
- return (0, react_1.useMemo)(() => {
71
- const stringVal = props.disableLocalization ? value.toString() : value === null || value === void 0 ? void 0 : value.toLocaleString();
72
- let symbol = currencyHelper.getCurrencySymbol(currentCurrency);
73
- if (props.removeCurrencyAfterChar) {
74
- const priceLength = String(value).length;
75
- if (priceLength + symbol.length > props.removeCurrencyAfterChar) {
76
- symbol = currencyHelper.getCurrencyShortSymbol(currentCurrency);
77
- if (priceLength + symbol.length > props.removeCurrencyAfterChar) {
78
- symbol = '';
79
- }
80
- }
81
- }
82
- let prettyValue = toLocalString(value, !(props.hideDecimals || typeof value !== 'number'));
83
- if (props.shortenThousandsAfter && props.shortenThousandsAfter <= String(value).length && props.hideDecimals) {
84
- prettyValue = stringVal.substring(0, stringVal.length - 3) + '…';
85
- }
86
- return isLoading && !props.disableLoading ? (react_1.default.createElement("span", { className: "u-inline-flex a-spin" },
87
- react_1.default.createElement(Icon_1.default, { icon: Icon_1.IconType.Spinner, size: "1em", color: Color_1.Color.Accent }))) : (react_1.default.createElement("span", { className: "u-ellip-overflow u-nowrap" },
88
- symbol && react_1.default.createElement("span", null, symbol),
89
- prettyValue));
90
- }, [value, isLoading]);
34
+ const { symbol, isLoading, prettyValue } = (0, Currency_1.default)(props);
35
+ return isLoading && !props.disableLoading ? (react_1.default.createElement("span", { className: "u-inline-flex a-spin" },
36
+ react_1.default.createElement(Icon_1.default, { icon: Icon_1.IconType.Spinner, size: "1em", color: Color_1.Color.Accent }))) : (react_1.default.createElement("span", { className: "u-ellip-overflow u-nowrap" },
37
+ symbol && react_1.default.createElement("span", null, symbol),
38
+ prettyValue));
91
39
  }
92
40
  exports.default = Currency;
93
41
  //# sourceMappingURL=Currency.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Currency.js","sourceRoot":"/","sources":["src/components/generic/Currency.tsx"],"names":[],"mappings":"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","sourcesContent":["import { CompanyContext } from '@frontend/contexts';\nimport { useCurrentHotel } from '@frontend/hooks';\nimport React, { useContext, useEffect, useMemo, useState } from 'react';\n\nimport Icon, { IconType } from '@/components/generic/Icon/Icon';\nimport { Color } from '@/util/Color';\nimport * as currencyHelper from '@/util/CurrencyHelper';\n\ninterface CurrencyProps {\n removeCurrencyAfterChar?: number;\n shortenThousandsAfter?: number;\n\n children: any;\n\n hideDecimals?: boolean;\n\n disableLocalization?: boolean;\n disableLoading?: boolean;\n\n originalCurrencyCode?: string;\n}\n\nexport default function Currency(props: CurrencyProps) {\n const { currentCurrency } = useContext(CompanyContext);\n const { hotel } = useCurrentHotel();\n\n const [value, setValue] = useState(0);\n const [isLoading, setIsLoading] = useState(false);\n\n const toLocalString = (original: number, toFixed?: boolean) => {\n if (props.disableLocalization) {\n return original;\n }\n\n if (original) {\n return original.toLocaleString(undefined, { minimumFractionDigits: toFixed ? 2 : 0 });\n }\n\n return original;\n };\n\n useEffect(() => {\n let isCancelled = false;\n\n setIsLoading(true);\n setTimeout(\n () => {\n if (!isCancelled) {\n setIsLoading(false);\n\n if (isNaN(props.children)) {\n setValue(props.children);\n } else {\n const totalValue = currencyHelper.convertPrice(\n props.children,\n !props.hideDecimals,\n currentCurrency,\n props.originalCurrencyCode ?? (hotel?.defaultCurrency as string)\n );\n\n if (!isCancelled) {\n setValue(totalValue);\n }\n }\n }\n },\n props.disableLoading ? 0 : 200\n );\n\n return () => {\n setIsLoading(false);\n isCancelled = true;\n };\n }, [props.children, currentCurrency, props.originalCurrencyCode, currencyHelper.getRatesForCurrencyCode(props.originalCurrencyCode ?? (hotel?.defaultCurrency as string))]);\n\n return useMemo(() => {\n const stringVal = props.disableLocalization ? value.toString() : value?.toLocaleString();\n\n let symbol = currencyHelper.getCurrencySymbol(currentCurrency);\n if (props.removeCurrencyAfterChar) {\n const priceLength = String(value).length;\n if (priceLength + symbol.length > props.removeCurrencyAfterChar) {\n symbol = currencyHelper.getCurrencyShortSymbol(currentCurrency);\n if (priceLength + symbol.length > props.removeCurrencyAfterChar) {\n symbol = '';\n }\n }\n }\n\n let prettyValue = toLocalString(value, !(props.hideDecimals || typeof value !== 'number'));\n\n if (props.shortenThousandsAfter && props.shortenThousandsAfter <= String(value).length && props.hideDecimals) {\n prettyValue = stringVal.substring(0, stringVal.length - 3) + '…';\n }\n\n return isLoading && !props.disableLoading ? (\n <span className=\"u-inline-flex a-spin\">\n <Icon icon={IconType.Spinner} size=\"1em\" color={Color.Accent} />\n </span>\n ) : (\n <span className=\"u-ellip-overflow u-nowrap\">\n {symbol && <span>{symbol}</span>}\n {prettyValue}\n </span>\n );\n }, [value, isLoading]);\n}\n"]}
1
+ {"version":3,"file":"Currency.js","sourceRoot":"/","sources":["src/components/generic/Currency.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,kDAA0B;AAE1B,uEAAgE;AAChE,gEAAiE;AACjE,wCAAqC;AAErC,SAAwB,QAAQ,CAAC,KAAuB;IACpD,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,GAAG,IAAA,kBAAW,EAAC,KAAK,CAAC,CAAC;IAC9D,OAAO,SAAS,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,CACxC,wCAAM,SAAS,EAAC,sBAAsB;QAClC,8BAAC,cAAI,IAAC,IAAI,EAAE,eAAQ,CAAC,OAAO,EAAE,IAAI,EAAC,KAAK,EAAC,KAAK,EAAE,aAAK,CAAC,MAAM,GAAI,CAC7D,CACV,CAAC,CAAC,CAAC,CACA,wCAAM,SAAS,EAAC,2BAA2B;QACtC,MAAM,IAAI,4CAAO,MAAM,CAAQ;QAC/B,WAAW,CACT,CACV,CAAC;AACN,CAAC;AAZD,2BAYC","sourcesContent":["import React from 'react';\n\nimport Icon, { IconType } from '@/components/generic/Icon/Icon';\nimport useCurrency, { UseCurrencyProps } from '@/hooks/Currency';\nimport { Color } from '@/util/Color';\n\nexport default function Currency(props: UseCurrencyProps) {\n const { symbol, isLoading, prettyValue } = useCurrency(props);\n return isLoading && !props.disableLoading ? (\n <span className=\"u-inline-flex a-spin\">\n <Icon icon={IconType.Spinner} size=\"1em\" color={Color.Accent} />\n </span>\n ) : (\n <span className=\"u-ellip-overflow u-nowrap\">\n {symbol && <span>{symbol}</span>}\n {prettyValue}\n </span>\n );\n}\n"]}
@@ -33,6 +33,7 @@ const Pill_1 = __importStar(require("../Pill"));
33
33
  const Text_1 = __importStar(require("../Text"));
34
34
  const AcceptablePaymentCard_1 = __importDefault(require("../../steps/confirmation/PaymentDetails/AcceptablePaymentCard"));
35
35
  const contexts_1 = require("../../../contexts");
36
+ const Currency_1 = __importDefault(require("../../../hooks/Currency"));
36
37
  const Translation_1 = require("../../../translations/Translation");
37
38
  const Color_1 = require("../../../util/Color");
38
39
  const TextAlignment_1 = require("../../../util/TextAlignment");
@@ -43,19 +44,28 @@ const InlinePaymentOption = ({ card, active }) => {
43
44
  const displayExpiry = (expiry) => {
44
45
  return expiry.slice(0, 2) + ' / ' + expiry.slice(2);
45
46
  };
46
- return (react_1.default.createElement("div", { className: InlinePaymentOption_module_scss_1.default.root },
47
- react_1.default.createElement("div", { className: "flex-shrink-0" }, card ? react_1.default.createElement(InlinePaymentCard_1.default, { vgsCardName: card.type, large: true }) : null),
48
- react_1.default.createElement("div", null,
49
- react_1.default.createElement(Text_1.default, { align: TextAlignment_1.TextAlign.Left, type: Text_1.TextType.Small, color: Color_1.Color.Navy }, card ? `**** **** **** ${card.cardNumber.slice(-4)}` : t(Translation_1.Translation.Step.Confirmation.CardLabel)),
50
- react_1.default.createElement(Text_1.default, { className: "u-marg-top--lighter", align: TextAlignment_1.TextAlign.Left, type: Text_1.TextType.Caption, color: Color_1.Color.DarkGrey }, card ? `Expires ${displayExpiry(card.expiry)}` : t(Translation_1.Translation.Step.Confirmation.CardSubLabel))),
51
- !card && (react_1.default.createElement("div", null,
52
- react_1.default.createElement(AcceptablePaymentCard_1.default, { style: {
53
- width: 24,
54
- height: 16,
55
- borderRadius: 1.5,
56
- border: '0.5px solid #DFE1E5',
57
- }, isCurrent: () => true }))),
58
- (roomstayMember === null || roomstayMember === void 0 ? void 0 : roomstayMember.defaultCard) && card && card.cardId === roomstayMember.defaultCard && (react_1.default.createElement(Pill_1.default, { size: "small", type: Pill_1.PillType.Primary }, "DEFAULT CARD"))));
47
+ const { getTotalPrice } = (0, contexts_1.useBasket)();
48
+ const price = getTotalPrice();
49
+ const { symbol, prettyValue } = (0, Currency_1.default)({
50
+ children: price,
51
+ });
52
+ return (react_1.default.createElement("div", { className: "u-flex u-flex-justify-between w-100 u-flex-align-center" },
53
+ react_1.default.createElement("div", { className: InlinePaymentOption_module_scss_1.default.root },
54
+ react_1.default.createElement("div", { className: "flex-shrink-0" }, card ? react_1.default.createElement(InlinePaymentCard_1.default, { vgsCardName: card.type, large: true }) : null),
55
+ react_1.default.createElement("div", null,
56
+ react_1.default.createElement(Text_1.default, { align: TextAlignment_1.TextAlign.Left, type: Text_1.TextType.Small, color: Color_1.Color.Navy }, card ? `**** **** **** ${card.cardNumber.slice(-4)}` : t(Translation_1.Translation.Step.Confirmation.CardLabel)),
57
+ react_1.default.createElement(Text_1.default, { className: "u-marg-top--lighter", align: TextAlignment_1.TextAlign.Left, type: Text_1.TextType.Caption, color: Color_1.Color.DarkGrey }, card ? `Expires ${displayExpiry(card.expiry)}` : t(Translation_1.Translation.Step.Confirmation.CardSubLabel))),
58
+ !card && (react_1.default.createElement("div", null,
59
+ react_1.default.createElement(AcceptablePaymentCard_1.default, { style: {
60
+ width: 24,
61
+ height: 16,
62
+ borderRadius: 1.5,
63
+ border: '0.5px solid #DFE1E5',
64
+ }, isCurrent: () => true }))),
65
+ (roomstayMember === null || roomstayMember === void 0 ? void 0 : roomstayMember.defaultCard) && card && card.cardId === roomstayMember.defaultCard && (react_1.default.createElement(Pill_1.default, { size: "small", type: Pill_1.PillType.Primary }, "DEFAULT CARD"))),
66
+ react_1.default.createElement(Text_1.default, { bold: true, className: "u-flex", color: Color_1.Color.Navy, type: Text_1.TextType.Small },
67
+ symbol,
68
+ prettyValue)));
59
69
  };
60
70
  exports.default = InlinePaymentOption;
61
71
  //# sourceMappingURL=InlinePaymentOption.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"InlinePaymentOption.js","sourceRoot":"/","sources":["src/components/generic/PaymentCard/InlinePaymentOption.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,kDAAkC;AAClC,iDAA+C;AAE/C,2GAAmF;AACnF,kEAA2D;AAC3D,kEAA2D;AAC3D,iIAAyG;AACzG,yCAA8C;AAE9C,4DAAyD;AACzD,wCAAqC;AACrC,wDAAiD;AAEjD,wGAAuD;AAOvD,MAAM,mBAAmB,GAAiC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE;IAC3E,MAAM,EAAE,CAAC,EAAE,GAAG,IAAA,8BAAc,GAAE,CAAC;IAC/B,MAAM,EAAE,cAAc,EAAE,GAAG,IAAA,2BAAgB,GAAE,CAAC;IAC9C,MAAM,aAAa,GAAG,CAAC,MAAc,EAAE,EAAE;QACrC,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACxD,CAAC,CAAC;IACF,OAAO,CACH,uCAAK,SAAS,EAAE,yCAAM,CAAC,IAAI;QACvB,uCAAK,SAAS,EAAC,eAAe,IAAE,IAAI,CAAC,CAAC,CAAC,8BAAC,2BAAiB,IAAC,WAAW,EAAE,IAAI,CAAC,IAAmB,EAAE,KAAK,SAAG,CAAC,CAAC,CAAC,IAAI,CAAO;QACvH;YACI,8BAAC,cAAI,IAAC,KAAK,EAAE,yBAAS,CAAC,IAAI,EAAE,IAAI,EAAE,eAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,aAAK,CAAC,IAAI,IAC/D,IAAI,CAAC,CAAC,CAAC,kBAAkB,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAC/F;YACP,8BAAC,cAAI,IAAC,SAAS,EAAC,qBAAqB,EAAC,KAAK,EAAE,yBAAS,CAAC,IAAI,EAAE,IAAI,EAAE,eAAQ,CAAC,OAAO,EAAE,KAAK,EAAE,aAAK,CAAC,QAAQ,IACrG,IAAI,CAAC,CAAC,CAAC,WAAW,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,CAC5F,CACL;QACL,CAAC,IAAI,IAAI,CACN;YACI,8BAAC,+BAAqB,IAClB,KAAK,EAAE;oBACH,KAAK,EAAE,EAAE;oBACT,MAAM,EAAE,EAAE;oBACV,YAAY,EAAE,GAAG;oBACjB,MAAM,EAAE,qBAAqB;iBAChC,EACD,SAAS,EAAE,GAAG,EAAE,CAAC,IAAI,GACvB,CACA,CACT;QACA,CAAA,cAAc,aAAd,cAAc,uBAAd,cAAc,CAAE,WAAW,KAAI,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,cAAc,CAAC,WAAW,IAAI,CAClF,8BAAC,cAAI,IAAC,IAAI,EAAC,OAAO,EAAC,IAAI,EAAE,eAAQ,CAAC,OAAO,mBAElC,CACV,CACC,CACT,CAAC;AACN,CAAC,CAAC;AAEF,kBAAe,mBAAmB,CAAC","sourcesContent":["import { IRoomstayMemberCards } from '@roomstay/core';\nimport React, { FC } from 'react';\nimport { useTranslation } from 'react-i18next';\n\nimport InlinePaymentCard from '@/components/generic/PaymentCard/InlinePaymentCard';\nimport Pill, { PillType } from '@/components/generic/Pill';\nimport Text, { TextType } from '@/components/generic/Text';\nimport AcceptablePaymentCard from '@/components/steps/confirmation/PaymentDetails/AcceptablePaymentCard';\nimport { useMemberContext } from '@/contexts';\nimport { VGSCardName } from '@/models/Api/HotelDTO';\nimport { Translation } from '@/translations/Translation';\nimport { Color } from '@/util/Color';\nimport { TextAlign } from '@/util/TextAlignment';\n\nimport styles from './InlinePaymentOption.module.scss';\n\ninterface InlinePaymentOptionProps {\n card?: IRoomstayMemberCards;\n active?: boolean;\n}\n\nconst InlinePaymentOption: FC<InlinePaymentOptionProps> = ({ card, active }) => {\n const { t } = useTranslation();\n const { roomstayMember } = useMemberContext();\n const displayExpiry = (expiry: string) => {\n return expiry.slice(0, 2) + ' / ' + expiry.slice(2);\n };\n return (\n <div className={styles.root}>\n <div className=\"flex-shrink-0\">{card ? <InlinePaymentCard vgsCardName={card.type as VGSCardName} large /> : null}</div>\n <div>\n <Text align={TextAlign.Left} type={TextType.Small} color={Color.Navy}>\n {card ? `**** **** **** ${card.cardNumber.slice(-4)}` : t(Translation.Step.Confirmation.CardLabel)}\n </Text>\n <Text className=\"u-marg-top--lighter\" align={TextAlign.Left} type={TextType.Caption} color={Color.DarkGrey}>\n {card ? `Expires ${displayExpiry(card.expiry)}` : t(Translation.Step.Confirmation.CardSubLabel)}\n </Text>\n </div>\n {!card && (\n <div>\n <AcceptablePaymentCard\n style={{\n width: 24,\n height: 16,\n borderRadius: 1.5,\n border: '0.5px solid #DFE1E5',\n }}\n isCurrent={() => true}\n />\n </div>\n )}\n {roomstayMember?.defaultCard && card && card.cardId === roomstayMember.defaultCard && (\n <Pill size=\"small\" type={PillType.Primary}>\n DEFAULT CARD\n </Pill>\n )}\n </div>\n );\n};\n\nexport default InlinePaymentOption;\n"]}
1
+ {"version":3,"file":"InlinePaymentOption.js","sourceRoot":"/","sources":["src/components/generic/PaymentCard/InlinePaymentOption.tsx"],"names":[],"mappings":"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","sourcesContent":["import { IRoomstayMemberCards } from '@roomstay/core';\nimport React, { FC } from 'react';\nimport { useTranslation } from 'react-i18next';\n\nimport InlinePaymentCard from '@/components/generic/PaymentCard/InlinePaymentCard';\nimport Pill, { PillType } from '@/components/generic/Pill';\nimport Text, { TextType } from '@/components/generic/Text';\nimport AcceptablePaymentCard from '@/components/steps/confirmation/PaymentDetails/AcceptablePaymentCard';\nimport { useBasket, useMemberContext } from '@/contexts';\nimport useCurrency from '@/hooks/Currency';\nimport { VGSCardName } from '@/models/Api/HotelDTO';\nimport { Translation } from '@/translations/Translation';\nimport { Color } from '@/util/Color';\nimport { TextAlign } from '@/util/TextAlignment';\n\nimport styles from './InlinePaymentOption.module.scss';\n\ninterface InlinePaymentOptionProps {\n card?: IRoomstayMemberCards;\n active?: boolean;\n}\n\nconst InlinePaymentOption: FC<InlinePaymentOptionProps> = ({ card, active }) => {\n const { t } = useTranslation();\n const { roomstayMember } = useMemberContext();\n const displayExpiry = (expiry: string) => {\n return expiry.slice(0, 2) + ' / ' + expiry.slice(2);\n };\n const { getTotalPrice } = useBasket();\n const price = getTotalPrice();\n const { symbol, prettyValue } = useCurrency({\n children: price,\n });\n return (\n <div className=\"u-flex u-flex-justify-between w-100 u-flex-align-center\">\n <div className={styles.root}>\n <div className=\"flex-shrink-0\">{card ? <InlinePaymentCard vgsCardName={card.type as VGSCardName} large /> : null}</div>\n <div>\n <Text align={TextAlign.Left} type={TextType.Small} color={Color.Navy}>\n {card ? `**** **** **** ${card.cardNumber.slice(-4)}` : t(Translation.Step.Confirmation.CardLabel)}\n </Text>\n <Text className=\"u-marg-top--lighter\" align={TextAlign.Left} type={TextType.Caption} color={Color.DarkGrey}>\n {card ? `Expires ${displayExpiry(card.expiry)}` : t(Translation.Step.Confirmation.CardSubLabel)}\n </Text>\n </div>\n {!card && (\n <div>\n <AcceptablePaymentCard\n style={{\n width: 24,\n height: 16,\n borderRadius: 1.5,\n border: '0.5px solid #DFE1E5',\n }}\n isCurrent={() => true}\n />\n </div>\n )}\n {roomstayMember?.defaultCard && card && card.cardId === roomstayMember.defaultCard && (\n <Pill size=\"small\" type={PillType.Primary}>\n DEFAULT CARD\n </Pill>\n )}\n </div>\n <Text bold className=\"u-flex\" color={Color.Navy} type={TextType.Small}>\n {symbol}\n {prettyValue}\n </Text>\n </div>\n );\n};\n\nexport default InlinePaymentOption;\n"]}
@@ -0,0 +1,7 @@
1
+ import { FC, PropsWithChildren } from 'react';
2
+ export interface PlanpayPriceProps extends PropsWithChildren<any> {
3
+ price: number;
4
+ checkin: string;
5
+ currency: string;
6
+ }
7
+ export declare const PlanpayPrice: FC<PlanpayPriceProps>;
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.PlanpayPrice = void 0;
27
+ const hooks_1 = require("../../../hooks/index.js");
28
+ const web_1 = require("@planpay/web");
29
+ const react_1 = __importStar(require("react"));
30
+ const Debounce_1 = require("../../../util/Debounce");
31
+ web_1.planpay.init({
32
+ // environment: hotel.planpay.env,
33
+ environment: 'prod',
34
+ showDebug: false,
35
+ });
36
+ const debounceReload = (0, Debounce_1.debounce)(() => {
37
+ web_1.planpay.pricePreview.refresh({});
38
+ }, 150);
39
+ const PlanpayPrice = ({ price, checkin, currency }) => {
40
+ var _a;
41
+ const { hotel } = (0, hooks_1.useCurrentHotel)();
42
+ (0, react_1.useEffect)(() => {
43
+ debounceReload();
44
+ }, [price, currency, checkin]);
45
+ if (!(hotel === null || hotel === void 0 ? void 0 : hotel.planpay))
46
+ return null;
47
+ return (react_1.default.createElement("div", { style: { whiteSpace: 'nowrap', marginRight: -16 }, "data-planpay-data-type": "price-preview", "data-planpay-total-cost": price, "data-planpay-currency-code": currency, "data-planpay-redemption-date": checkin, "data-planpay-payment-deadline": "0", "data-planpay-total-minimum-deposit": "0", "data-planpay-merchant-id": (_a = hotel === null || hotel === void 0 ? void 0 : hotel.planpay) === null || _a === void 0 ? void 0 : _a.username }));
48
+ };
49
+ exports.PlanpayPrice = PlanpayPrice;
50
+ //# sourceMappingURL=PlanpayPrice.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PlanpayPrice.js","sourceRoot":"/","sources":["src/components/generic/PlanpayPrice/PlanpayPrice.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,2CAAkD;AAClD,sCAAuC;AACvC,+CAAgE;AAEhE,8CAA2C;AAE3C,aAAO,CAAC,IAAI,CAAC;IACT,kCAAkC;IAClC,WAAW,EAAE,MAAM;IACnB,SAAS,EAAE,KAAK;CACnB,CAAC,CAAC;AAEH,MAAM,cAAc,GAAG,IAAA,mBAAQ,EAAC,GAAG,EAAE;IACjC,aAAO,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;AACrC,CAAC,EAAE,GAAG,CAAC,CAAC;AAQD,MAAM,YAAY,GAA0B,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE;;IAChF,MAAM,EAAE,KAAK,EAAE,GAAG,IAAA,uBAAe,GAAE,CAAC;IAEpC,IAAA,iBAAS,EAAC,GAAG,EAAE;QACX,cAAc,EAAE,CAAC;IACrB,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;IAE/B,IAAI,CAAC,CAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,OAAO,CAAA;QAAE,OAAO,IAAI,CAAC;IAEjC,OAAO,CACH,uCACI,KAAK,EAAE,EAAE,UAAU,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC,EAAE,EAAE,4BAC1B,eAAe,6BACb,KAAK,gCACF,QAAQ,kCACN,OAAO,mCACP,GAAG,wCACE,GAAG,8BACZ,MAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,OAAO,0CAAE,QAAQ,GACpD,CACL,CAAC;AACN,CAAC,CAAC;AArBW,QAAA,YAAY,gBAqBvB","sourcesContent":["import { useCurrentHotel } from '@frontend/hooks';\nimport { planpay } from '@planpay/web';\nimport React, { FC, PropsWithChildren, useEffect } from 'react';\n\nimport { debounce } from '@/util/Debounce';\n\nplanpay.init({\n // environment: hotel.planpay.env,\n environment: 'prod',\n showDebug: false,\n});\n\nconst debounceReload = debounce(() => {\n planpay.pricePreview.refresh({});\n}, 150);\n\nexport interface PlanpayPriceProps extends PropsWithChildren<any> {\n price: number;\n checkin: string;\n currency: string;\n}\n\nexport const PlanpayPrice: FC<PlanpayPriceProps> = ({ price, checkin, currency }) => {\n const { hotel } = useCurrentHotel();\n\n useEffect(() => {\n debounceReload();\n }, [price, currency, checkin]);\n\n if (!hotel?.planpay) return null;\n\n return (\n <div\n style={{ whiteSpace: 'nowrap', marginRight: -16 }}\n data-planpay-data-type=\"price-preview\"\n data-planpay-total-cost={price}\n data-planpay-currency-code={currency}\n data-planpay-redemption-date={checkin}\n data-planpay-payment-deadline=\"0\"\n data-planpay-total-minimum-deposit=\"0\"\n data-planpay-merchant-id={hotel?.planpay?.username}\n />\n );\n};\n"]}
@@ -43,40 +43,41 @@ const Overlay_1 = require("../Overlay/Overlay");
43
43
  const RadioButton_1 = require("./RadioButton");
44
44
  const Tooltip_1 = __importDefault(require("../Tooltip/Tooltip"));
45
45
  const RadioButtonGroup_module_scss_1 = __importDefault(require("./RadioButtonGroup.module.scss"));
46
+ const Option = ({ option: optionProp, value: valueProp, onChange, renderChildrenContent, }) => {
47
+ const options = optionProp.options;
48
+ const isGroup = !!(options === null || options === void 0 ? void 0 : options.length);
49
+ const [ref, setRef] = (0, react_1.useState)(null);
50
+ const [open, setOpen] = (0, react_1.useState)(false);
51
+ const option = isGroup && valueProp ? options.find(({ value }) => value === valueProp) || optionProp : optionProp;
52
+ const radioButton = (react_1.default.createElement(RadioButton_1.RadioButton, { headerRef: setRef, className: RadioButtonGroup_module_scss_1.default.item, key: option === null || option === void 0 ? void 0 : option.value, checked: !(option === null || option === void 0 ? void 0 : option.disabled) && (option === null || option === void 0 ? void 0 : option.value) === valueProp, onChange: () => {
53
+ if (option === null || option === void 0 ? void 0 : option.disabled)
54
+ return;
55
+ if (isGroup)
56
+ setOpen(!open);
57
+ else if ((option === null || option === void 0 ? void 0 : option.value) && (option === null || option === void 0 ? void 0 : option.value) !== valueProp)
58
+ onChange === null || onChange === void 0 ? void 0 : onChange(option.value);
59
+ }, label: option === null || option === void 0 ? void 0 : option.label, disabled: option === null || option === void 0 ? void 0 : option.disabled, renderContent: option === null || option === void 0 ? void 0 : option.renderContent }));
60
+ if ((option === null || option === void 0 ? void 0 : option.disabled) && (option === null || option === void 0 ? void 0 : option.disabledReason)) {
61
+ return (react_1.default.createElement(Tooltip_1.default, { key: option === null || option === void 0 ? void 0 : option.value, wrapperClasses: RadioButtonGroup_module_scss_1.default.wrapper, title: option === null || option === void 0 ? void 0 : option.disabledReason }, radioButton));
62
+ }
63
+ return (react_1.default.createElement(react_1.default.Fragment, null,
64
+ react_1.default.createElement("div", { key: option === null || option === void 0 ? void 0 : option.value, className: RadioButtonGroup_module_scss_1.default.wrapper },
65
+ radioButton,
66
+ options && (react_1.default.createElement("div", { className: RadioButtonGroup_module_scss_1.default.childrenIndicator },
67
+ react_1.default.createElement(Icon_1.default, { size: "24px", icon: Icon_1.IconType.Dropdown })))),
68
+ options && (react_1.default.createElement(Overlay_1.Overlay, { onClose: () => setOpen(false), className: RadioButtonGroup_module_scss_1.default.overlay, hideStyles: true, containerClassName: "u-w-100", open: open, followElement: ref || undefined, offset: [0, 0], placement: "top-start" },
69
+ react_1.default.createElement(RadioButtonGroup, { options: options.map((option) => {
70
+ const { renderContent } = option, rest = __rest(option, ["renderContent"]);
71
+ if (!renderChildrenContent)
72
+ return rest;
73
+ return option;
74
+ }), onChange: (value) => {
75
+ onChange === null || onChange === void 0 ? void 0 : onChange(value);
76
+ setOpen(false);
77
+ }, value: valueProp })))));
78
+ };
46
79
  const RadioButtonGroup = ({ options = [], value: valueProp, onChange, renderChildrenContent, }) => {
47
- return (react_1.default.createElement("div", { className: RadioButtonGroup_module_scss_1.default.root }, options.map((rawOption) => {
48
- const options = rawOption.options;
49
- const isGroup = !!(options === null || options === void 0 ? void 0 : options.length);
50
- const [ref, setRef] = (0, react_1.useState)(null);
51
- const [open, setOpen] = (0, react_1.useState)(false);
52
- const option = isGroup && valueProp ? options.find(({ value }) => value === valueProp) || rawOption : rawOption;
53
- const radioButton = (react_1.default.createElement(RadioButton_1.RadioButton, { headerRef: setRef, className: RadioButtonGroup_module_scss_1.default.item, key: option === null || option === void 0 ? void 0 : option.value, checked: !(option === null || option === void 0 ? void 0 : option.disabled) && (option === null || option === void 0 ? void 0 : option.value) === valueProp, onChange: () => {
54
- if (option === null || option === void 0 ? void 0 : option.disabled)
55
- return;
56
- if (isGroup)
57
- setOpen(!open);
58
- else if ((option === null || option === void 0 ? void 0 : option.value) && (option === null || option === void 0 ? void 0 : option.value) !== valueProp)
59
- onChange === null || onChange === void 0 ? void 0 : onChange(option.value);
60
- }, label: option === null || option === void 0 ? void 0 : option.label, disabled: option === null || option === void 0 ? void 0 : option.disabled, renderContent: option === null || option === void 0 ? void 0 : option.renderContent }));
61
- if ((option === null || option === void 0 ? void 0 : option.disabled) && (option === null || option === void 0 ? void 0 : option.disabledReason)) {
62
- return (react_1.default.createElement(Tooltip_1.default, { key: option === null || option === void 0 ? void 0 : option.value, wrapperClasses: RadioButtonGroup_module_scss_1.default.wrapper, title: option === null || option === void 0 ? void 0 : option.disabledReason }, radioButton));
63
- }
64
- return (react_1.default.createElement(react_1.default.Fragment, null,
65
- react_1.default.createElement("div", { key: option === null || option === void 0 ? void 0 : option.value, className: RadioButtonGroup_module_scss_1.default.wrapper },
66
- radioButton,
67
- options && (react_1.default.createElement("div", { className: RadioButtonGroup_module_scss_1.default.childrenIndicator },
68
- react_1.default.createElement(Icon_1.default, { size: "24px", icon: Icon_1.IconType.Dropdown })))),
69
- options && (react_1.default.createElement(Overlay_1.Overlay, { onClose: () => setOpen(false), className: RadioButtonGroup_module_scss_1.default.overlay, hideStyles: true, containerClassName: "u-w-100", open: open, followElement: ref || undefined, offset: [0, 0], placement: "top-start" },
70
- react_1.default.createElement(RadioButtonGroup, { options: options.map((option) => {
71
- const { renderContent } = option, rest = __rest(option, ["renderContent"]);
72
- if (!renderChildrenContent)
73
- return rest;
74
- return option;
75
- }), onChange: (value) => {
76
- onChange === null || onChange === void 0 ? void 0 : onChange(value);
77
- setOpen(false);
78
- }, value: valueProp })))));
79
- })));
80
+ return (react_1.default.createElement("div", { className: RadioButtonGroup_module_scss_1.default.root }, options.map((rawOption) => (react_1.default.createElement(Option, { key: rawOption.value, option: rawOption, value: valueProp, onChange: onChange, renderChildrenContent: renderChildrenContent })))));
80
81
  };
81
82
  exports.default = RadioButtonGroup;
82
83
  //# sourceMappingURL=RadioButtonGroup.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"RadioButtonGroup.js","sourceRoot":"/","sources":["src/components/generic/RadioButtonGroup/RadioButtonGroup.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, { ReactElement, ReactNode, useState } from 'react';\n\nimport Icon, { IconType } from '@/components/generic/Icon/Icon';\nimport { Overlay } from '@/components/generic/Overlay/Overlay';\nimport { RadioButton } from '@/components/generic/RadioButtonGroup/RadioButton';\nimport Tooltip from '@/components/generic/Tooltip/Tooltip';\n\nimport styles from './RadioButtonGroup.module.scss';\n\nexport interface IRadioButtonOption<TValue extends string = string> {\n value: TValue;\n\n label?: ReactNode;\n disabled?: boolean;\n /** Enabled a tooltip that gives more info on why the field is disabled */\n disabledReason?: string;\n renderContent?: () => ReactNode;\n options?: IRadioButtonOption<TValue>[];\n}\n\nexport interface IRadioButtonGroupProps<TValue extends string = string> {\n options?: IRadioButtonOption<TValue>[];\n value?: TValue;\n onChange?: (value: TValue) => void;\n renderChildrenContent?: boolean;\n}\n\nconst RadioButtonGroup = <TValue extends string = string>({\n options = [],\n value: valueProp,\n onChange,\n renderChildrenContent,\n}: IRadioButtonGroupProps<TValue>): ReactElement | null => {\n return (\n <div className={styles.root}>\n {options.map((rawOption) => {\n const options = rawOption.options;\n const isGroup = !!options?.length;\n const [ref, setRef] = useState<HTMLDivElement | null>(null);\n const [open, setOpen] = useState<boolean>(false);\n const option: IRadioButtonOption<TValue> | undefined = isGroup && valueProp ? options.find(({ value }) => value === valueProp) || rawOption : rawOption;\n const radioButton = (\n <RadioButton\n headerRef={setRef}\n className={styles.item}\n key={option?.value}\n checked={!option?.disabled && option?.value === valueProp}\n onChange={() => {\n if (option?.disabled) return;\n if (isGroup) setOpen(!open);\n else if (option?.value && option?.value !== valueProp) onChange?.(option.value);\n }}\n label={option?.label}\n disabled={option?.disabled}\n renderContent={option?.renderContent}\n />\n );\n\n if (option?.disabled && option?.disabledReason) {\n return (\n <Tooltip key={option?.value} wrapperClasses={styles.wrapper} title={option?.disabledReason}>\n {radioButton}\n </Tooltip>\n );\n }\n\n return (\n <>\n <div key={option?.value} className={styles.wrapper}>\n {radioButton}\n {options && (\n <div className={styles.childrenIndicator}>\n <Icon size=\"24px\" icon={IconType.Dropdown} />\n </div>\n )}\n </div>\n {options && (\n <Overlay\n onClose={() => setOpen(false)}\n className={styles.overlay}\n hideStyles\n containerClassName=\"u-w-100\"\n open={open}\n followElement={ref || undefined}\n offset={[0, 0]}\n placement=\"top-start\"\n >\n <RadioButtonGroup\n options={options.map((option) => {\n const { renderContent, ...rest } = option;\n if (!renderChildrenContent) return rest;\n return option;\n })}\n onChange={(value) => {\n onChange?.(value);\n setOpen(false);\n }}\n value={valueProp}\n />\n </Overlay>\n )}\n </>\n );\n })}\n </div>\n );\n};\n\nexport default RadioButtonGroup;\n"]}
1
+ {"version":3,"file":"RadioButtonGroup.js","sourceRoot":"/","sources":["src/components/generic/RadioButtonGroup/RadioButtonGroup.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, { ReactElement, ReactNode, useState } from 'react';\n\nimport Icon, { IconType } from '@/components/generic/Icon/Icon';\nimport { Overlay } from '@/components/generic/Overlay/Overlay';\nimport { RadioButton } from '@/components/generic/RadioButtonGroup/RadioButton';\nimport Tooltip from '@/components/generic/Tooltip/Tooltip';\n\nimport styles from './RadioButtonGroup.module.scss';\n\nexport interface IRadioButtonOption<TValue extends string = string> {\n value: TValue;\n label?: ReactNode;\n disabled?: boolean;\n /** Enabled a tooltip that gives more info on why the field is disabled */\n disabledReason?: string;\n renderContent?: () => ReactNode;\n options?: IRadioButtonOption<TValue>[];\n}\n\nexport interface IRadioButtonGroupProps<TValue extends string = string> {\n options?: IRadioButtonOption<TValue>[];\n value?: TValue;\n onChange?: (value: TValue) => void;\n renderChildrenContent?: boolean;\n}\n\nconst Option = <TValue extends string = string>({\n option: optionProp,\n value: valueProp,\n onChange,\n renderChildrenContent,\n}: {\n option: IRadioButtonOption<TValue>;\n value?: TValue;\n onChange?: (value: TValue) => void;\n renderChildrenContent?: boolean;\n}): ReactElement | null => {\n const options = optionProp.options;\n const isGroup = !!options?.length;\n const [ref, setRef] = useState<HTMLDivElement | null>(null);\n const [open, setOpen] = useState<boolean>(false);\n const option: IRadioButtonOption<TValue> | undefined = isGroup && valueProp ? options.find(({ value }) => value === valueProp) || optionProp : optionProp;\n const radioButton = (\n <RadioButton\n headerRef={setRef}\n className={styles.item}\n key={option?.value}\n checked={!option?.disabled && option?.value === valueProp}\n onChange={() => {\n if (option?.disabled) return;\n if (isGroup) setOpen(!open);\n else if (option?.value && option?.value !== valueProp) onChange?.(option.value);\n }}\n label={option?.label}\n disabled={option?.disabled}\n renderContent={option?.renderContent}\n />\n );\n\n if (option?.disabled && option?.disabledReason) {\n return (\n <Tooltip key={option?.value} wrapperClasses={styles.wrapper} title={option?.disabledReason}>\n {radioButton}\n </Tooltip>\n );\n }\n\n return (\n <>\n <div key={option?.value} className={styles.wrapper}>\n {radioButton}\n {options && (\n <div className={styles.childrenIndicator}>\n <Icon size=\"24px\" icon={IconType.Dropdown} />\n </div>\n )}\n </div>\n {options && (\n <Overlay\n onClose={() => setOpen(false)}\n className={styles.overlay}\n hideStyles\n containerClassName=\"u-w-100\"\n open={open}\n followElement={ref || undefined}\n offset={[0, 0]}\n placement=\"top-start\"\n >\n <RadioButtonGroup\n options={options.map((option) => {\n const { renderContent, ...rest } = option;\n if (!renderChildrenContent) return rest;\n return option;\n })}\n onChange={(value) => {\n onChange?.(value);\n setOpen(false);\n }}\n value={valueProp}\n />\n </Overlay>\n )}\n </>\n );\n};\n\nconst RadioButtonGroup = <TValue extends string = string>({\n options = [],\n value: valueProp,\n onChange,\n renderChildrenContent,\n}: IRadioButtonGroupProps<TValue>): ReactElement | null => {\n return (\n <div className={styles.root}>\n {options.map((rawOption) => (\n <Option key={rawOption.value} option={rawOption} value={valueProp} onChange={onChange} renderChildrenContent={renderChildrenContent} />\n ))}\n </div>\n );\n};\n\nexport default RadioButtonGroup;\n"]}
@@ -11,6 +11,7 @@ export declare enum TextTransform {
11
11
  Uppercase = "u-uppercase"
12
12
  }
13
13
  export interface TextProps extends PropsWithChildren<any> {
14
+ [x: string]: React.ReactNode;
14
15
  type?: TextType;
15
16
  color?: Color;
16
17
  align?: TextAlign;
@@ -21,7 +22,6 @@ export interface TextProps extends PropsWithChildren<any> {
21
22
  preformatted?: boolean;
22
23
  style?: React.CSSProperties;
23
24
  lineThrough?: boolean;
24
- [x: string]: React.ReactNode;
25
25
  }
26
26
  export declare const Text: React.ForwardRefExoticComponent<Pick<TextProps, keyof TextProps> & React.RefAttributes<HTMLParagraphElement>>;
27
27
  export default Text;
@@ -1 +1 @@
1
- {"version":3,"file":"Text.js","sourceRoot":"/","sources":["src/components/generic/Text.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,4DAAoC;AACpC,+CAA6D;AAK7D,IAAY,QAKX;AALD,WAAY,QAAQ;IAChB,yBAAa,CAAA;IACb,2BAAe,CAAA;IACf,+BAAmB,CAAA;IACnB,2BAAe,CAAA;AACnB,CAAC,EALW,QAAQ,GAAR,gBAAQ,KAAR,gBAAQ,QAKnB;AAED,yCAAyC;AACzC,IAAY,aAEX;AAFD,WAAY,aAAa;IACrB,0CAAyB,CAAA;AAC7B,CAAC,EAFW,aAAa,GAAb,qBAAa,KAAb,qBAAa,QAExB;AAiBY,QAAA,IAAI,GAAG,IAAA,kBAAU,EAAkC,SAAS,IAAI,CAAC,KAAK,EAAE,GAAG;IACpF,MAAM,YAAY,mBACd,IAAI,EAAE,QAAQ,CAAC,IAAI,IAChB,KAAK,CACX,CAAC;IAEF,MAAM,gBAAgB,GAAQ,EAAE,CAAC;IAEjC,IAAI,KAAK,CAAC,UAAU,EAAE;QAClB,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,gBAAgB,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;KACjF;IAED,MAAM,YAAY,GAAQ,EAAE,CAAC;IAE7B,IAAI,KAAK,CAAC,SAAS,EAAE;QACjB,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,YAAY,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;KACzE;IAED,MAAM,OAAO,GAAG,IAAA,oBAAU,EAAC,KAAK,CAAC,KAAK,gCAClC,CAAC,QAAQ,YAAY,CAAC,IAAI,EAAE,CAAC,EAAE,YAAY,CAAC,IAAI,EAChD,eAAe,EAAE,KAAK,CAAC,MAAM,EAC7B,aAAa,EAAE,KAAK,CAAC,IAAI,EACzB,YAAY,EAAE,KAAK,CAAC,YAAY,EAChC,gBAAgB,EAAE,KAAK,CAAC,WAAW,IAChC,YAAY,GACZ,gBAAgB,EACrB,CAAC;IAEH,MAAM,MAAM,qBACL,CAAC,YAAY,CAAC,KAAK,IAAI,EAAE,CAAC,CAChC,CAAC;IAEF,IAAI,YAAY,CAAC,KAAK,EAAE;QACpB,MAAM,CAAC,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC;KACrC;IAED,OAAO,CACH,qCAAG,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,IACzC,KAAK,CAAC,QAAQ,CACf,CACP,CAAC;AACN,CAAC,CAAC,CAAC;AAEH,kBAAe,YAAI,CAAC","sourcesContent":["import classNames from 'classnames';\nimport React, { forwardRef, PropsWithChildren } from 'react';\n\nimport { Color } from '@/util/Color';\nimport { TextAlign } from '@/util/TextAlignment';\n\nexport enum TextType {\n Body = 'body',\n Small = 'small',\n Caption = 'caption',\n Label = 'label',\n}\n\n// Refactor to globalize for Headings too\nexport enum TextTransform {\n Uppercase = 'u-uppercase',\n}\n\nexport interface TextProps extends PropsWithChildren<any> {\n type?: TextType;\n color?: Color;\n align?: TextAlign;\n transforms?: TextTransform[];\n className?: string;\n inline?: boolean;\n bold?: boolean;\n preformatted?: boolean;\n style?: React.CSSProperties;\n lineThrough?: boolean;\n\n [x: string]: React.ReactNode;\n}\n\nexport const Text = forwardRef<HTMLParagraphElement, TextProps>(function Text(props, ref) {\n const defaultProps: TextProps = {\n type: TextType.Body,\n ...props,\n };\n\n const transformClasses: any = {};\n\n if (props.transforms) {\n props.transforms.forEach((transform) => (transformClasses[transform] = true));\n }\n\n const extraClasses: any = {};\n\n if (props.className) {\n props.className.split(' ').forEach((it) => (extraClasses[it] = true));\n }\n\n const classes = classNames(props.align, {\n [`text-${defaultProps.type}`]: defaultProps.type,\n 'u-inline-flex': props.inline,\n 'u-text-bold': props.bold,\n 'u-pre-wrap': props.preformatted,\n 'u-line-through': props.lineThrough,\n ...extraClasses,\n ...transformClasses,\n });\n\n const styles: any = {\n ...(defaultProps.style || {}),\n };\n\n if (defaultProps.color) {\n styles.color = defaultProps.color;\n }\n\n return (\n <p className={classes} style={styles} ref={ref}>\n {props.children}\n </p>\n );\n});\n\nexport default Text;\n"]}
1
+ {"version":3,"file":"Text.js","sourceRoot":"/","sources":["src/components/generic/Text.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,4DAAoC;AACpC,+CAA6D;AAK7D,IAAY,QAKX;AALD,WAAY,QAAQ;IAChB,yBAAa,CAAA;IACb,2BAAe,CAAA;IACf,+BAAmB,CAAA;IACnB,2BAAe,CAAA;AACnB,CAAC,EALW,QAAQ,GAAR,gBAAQ,KAAR,gBAAQ,QAKnB;AAED,yCAAyC;AACzC,IAAY,aAEX;AAFD,WAAY,aAAa;IACrB,0CAAyB,CAAA;AAC7B,CAAC,EAFW,aAAa,GAAb,qBAAa,KAAb,qBAAa,QAExB;AAgBY,QAAA,IAAI,GAAG,IAAA,kBAAU,EAAkC,SAAS,IAAI,CAAC,KAAK,EAAE,GAAG;IACpF,MAAM,YAAY,mBACd,IAAI,EAAE,QAAQ,CAAC,IAAI,IAChB,KAAK,CACX,CAAC;IAEF,MAAM,gBAAgB,GAAQ,EAAE,CAAC;IAEjC,IAAI,KAAK,CAAC,UAAU,EAAE;QAClB,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,gBAAgB,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;KACjF;IAED,MAAM,YAAY,GAAQ,EAAE,CAAC;IAE7B,IAAI,KAAK,CAAC,SAAS,EAAE;QACjB,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,YAAY,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;KACzE;IAED,MAAM,OAAO,GAAG,IAAA,oBAAU,EAAC,KAAK,CAAC,KAAK,gCAClC,CAAC,QAAQ,YAAY,CAAC,IAAI,EAAE,CAAC,EAAE,YAAY,CAAC,IAAI,EAChD,eAAe,EAAE,KAAK,CAAC,MAAM,EAC7B,aAAa,EAAE,KAAK,CAAC,IAAI,EACzB,YAAY,EAAE,KAAK,CAAC,YAAY,EAChC,gBAAgB,EAAE,KAAK,CAAC,WAAW,IAChC,YAAY,GACZ,gBAAgB,EACrB,CAAC;IAEH,MAAM,MAAM,qBACL,CAAC,YAAY,CAAC,KAAK,IAAI,EAAE,CAAC,CAChC,CAAC;IAEF,IAAI,YAAY,CAAC,KAAK,EAAE;QACpB,MAAM,CAAC,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC;KACrC;IAED,OAAO,CACH,qCAAG,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,IACzC,KAAK,CAAC,QAAQ,CACf,CACP,CAAC;AACN,CAAC,CAAC,CAAC;AAEH,kBAAe,YAAI,CAAC","sourcesContent":["import classNames from 'classnames';\nimport React, { forwardRef, PropsWithChildren } from 'react';\n\nimport { Color } from '@/util/Color';\nimport { TextAlign } from '@/util/TextAlignment';\n\nexport enum TextType {\n Body = 'body',\n Small = 'small',\n Caption = 'caption',\n Label = 'label',\n}\n\n// Refactor to globalize for Headings too\nexport enum TextTransform {\n Uppercase = 'u-uppercase',\n}\n\nexport interface TextProps extends PropsWithChildren<any> {\n [x: string]: React.ReactNode;\n type?: TextType;\n color?: Color;\n align?: TextAlign;\n transforms?: TextTransform[];\n className?: string;\n inline?: boolean;\n bold?: boolean;\n preformatted?: boolean;\n style?: React.CSSProperties;\n lineThrough?: boolean;\n}\n\nexport const Text = forwardRef<HTMLParagraphElement, TextProps>(function Text(props, ref) {\n const defaultProps: TextProps = {\n type: TextType.Body,\n ...props,\n };\n\n const transformClasses: any = {};\n\n if (props.transforms) {\n props.transforms.forEach((transform) => (transformClasses[transform] = true));\n }\n\n const extraClasses: any = {};\n\n if (props.className) {\n props.className.split(' ').forEach((it) => (extraClasses[it] = true));\n }\n\n const classes = classNames(props.align, {\n [`text-${defaultProps.type}`]: defaultProps.type,\n 'u-inline-flex': props.inline,\n 'u-text-bold': props.bold,\n 'u-pre-wrap': props.preformatted,\n 'u-line-through': props.lineThrough,\n ...extraClasses,\n ...transformClasses,\n });\n\n const styles: any = {\n ...(defaultProps.style || {}),\n };\n\n if (defaultProps.color) {\n styles.color = defaultProps.color;\n }\n\n return (\n <p className={classes} style={styles} ref={ref}>\n {props.children}\n </p>\n );\n});\n\nexport default Text;\n"]}
@@ -30,26 +30,23 @@ const core_1 = require("@roomstay/core");
30
30
  const dayjs_1 = __importDefault(require("dayjs"));
31
31
  const react_1 = __importStar(require("react"));
32
32
  const react_hook_form_1 = require("react-hook-form");
33
- const react_i18next_1 = require("react-i18next");
34
- const Icon_1 = __importStar(require("../../generic/Icon/Icon"));
35
33
  const InlinePaymentOption_1 = __importDefault(require("../../generic/PaymentCard/InlinePaymentOption"));
36
34
  const RadioButtonGroup_1 = __importDefault(require("../../generic/RadioButtonGroup/RadioButtonGroup"));
37
- const Text_1 = __importDefault(require("../../generic/Text"));
38
35
  const StepConfirmationPaymentDetails_1 = require("./PaymentDetails/StepConfirmationPaymentDetails");
36
+ const PlanpayLabel_1 = __importDefault(require("./PlanpayLabel"));
39
37
  const PlanpayPaymentMethod_1 = require("./PlanpayPaymentMethod");
40
38
  const contexts_1 = require("../../../contexts");
41
39
  const hooks_1 = require("../../../hooks");
42
- const RoomstayThemeEngine_1 = __importDefault(require("../../../providers/RoomstayThemeEngine"));
43
- const Translation_1 = require("../../../translations/Translation");
44
- const Color_1 = require("../../../util/Color");
40
+ const Planpay_1 = __importDefault(require("../../../hooks/Planpay"));
45
41
  const PaymentInformation = ({ tokenizerRef, onChangeCb }) => {
46
- var _a, _b, _c, _d;
47
- const { t } = (0, react_i18next_1.useTranslation)();
42
+ var _a;
48
43
  const methods = (0, react_hook_form_1.useFormContext)();
49
44
  const { hotel } = (0, hooks_1.useCurrentHotel)();
50
45
  const basketContext = (0, contexts_1.useBasket)();
46
+ const { hasPricePreview, planpayConfig } = (0, Planpay_1.default)();
51
47
  const { cards = [], roomstayMember } = (0, contexts_1.useMemberContext)();
52
48
  const defaultCard = (0, react_1.useMemo)(() => cards.find((card) => card.cardId === (roomstayMember === null || roomstayMember === void 0 ? void 0 : roomstayMember.defaultCard)), [cards, roomstayMember]);
49
+ const { currentCurrency } = (0, react_1.useContext)(contexts_1.CompanyContext);
53
50
  const paymentMethod = methods.watch('paymentMethod');
54
51
  const vgsCardInputOption = {
55
52
  value: core_1.EBookingPaymentMethod.Card,
@@ -83,24 +80,13 @@ const PaymentInformation = ({ tokenizerRef, onChangeCb }) => {
83
80
  }
84
81
  options.push(Object.assign(Object.assign({}, defaultCardOption), { options: selectableStoredCardOptions.length > 0 ? selectableStoredCardOptions : undefined }));
85
82
  }
86
- if (((_b = hotel === null || hotel === void 0 ? void 0 : hotel.paymentMethods) === null || _b === void 0 ? void 0 : _b.includes(core_1.EBookingPaymentMethod.Planpay)) &&
87
- ((_c = hotel === null || hotel === void 0 ? void 0 : hotel.planpay) === null || _c === void 0 ? void 0 : _c.minDaysShowPlanpay) &&
88
- (0, dayjs_1.default)(basketContext.startDate).diff((0, dayjs_1.default)(), 'day') > ((_d = hotel === null || hotel === void 0 ? void 0 : hotel.planpay) === null || _d === void 0 ? void 0 : _d.minDaysShowPlanpay)) {
83
+ (0, react_1.useEffect)(() => {
84
+ methods.trigger();
85
+ }, [currentCurrency]);
86
+ if (hasPricePreview && planpayConfig && planpayConfig.minDaysShowPlanpay && (0, dayjs_1.default)(basketContext.startDate).diff((0, dayjs_1.default)(), 'day') > planpayConfig.minDaysShowPlanpay) {
89
87
  options.push({
90
88
  value: core_1.EBookingPaymentMethod.Planpay,
91
- label: (react_1.default.createElement("div", { className: "u-flex u-flex-align-center" },
92
- react_1.default.createElement("div", null, t(Translation_1.Translation.Step.Confirmation.PlanpayLabel)),
93
- react_1.default.createElement("div", { className: "u-flex u-flex-align-center u-marg-left--light", style: {
94
- borderRadius: '24px',
95
- overflow: 'hidden',
96
- } },
97
- react_1.default.createElement("img", { height: 16, src: RoomstayThemeEngine_1.default.getImageAssetUrl('planpay-logo-small.svg'), alt: "" })),
98
- !methods.formState.isValid && (react_1.default.createElement(Text_1.default, { color: Color_1.Color.Graphite, className: "u-flex u-flex-align-center", style: {
99
- color: '#313131',
100
- fontSize: 10,
101
- } },
102
- react_1.default.createElement(Icon_1.default, { color: Color_1.Color.DarkGrey, icon: Icon_1.IconType.Info, className: "u-marg-right--lighter u-marg-left--light" }),
103
- t(Translation_1.Translation.Step.Confirmation.PlanpayHelperText))))),
89
+ label: react_1.default.createElement(PlanpayLabel_1.default, null),
104
90
  disabled: !methods.formState.isValid,
105
91
  disabledReason: !methods.formState.isValid ? 'You must fill all the above details before proceeding with Planpay' : '',
106
92
  renderContent: () => react_1.default.createElement(PlanpayPaymentMethod_1.PlanpayPaymentMethod, null),
@@ -1 +1 @@
1
- {"version":3,"file":"PaymentInformation.js","sourceRoot":"/","sources":["src/components/steps/confirmation/PaymentInformation.tsx"],"names":[],"mappings":"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","sourcesContent":["import { EBookingPaymentMethod } from '@roomstay/core';\nimport dayjs from 'dayjs';\nimport React, { FC, useMemo } from 'react';\nimport { Controller, useFormContext } from 'react-hook-form';\nimport { useTranslation } from 'react-i18next';\n\nimport Icon, { IconType } from '@/components/generic/Icon/Icon';\nimport InlinePaymentOption from '@/components/generic/PaymentCard/InlinePaymentOption';\nimport RadioButtonGroup, { IRadioButtonOption } from '@/components/generic/RadioButtonGroup/RadioButtonGroup';\nimport Text from '@/components/generic/Text';\nimport { StepConfirmationVGSPaymentInput } from '@/components/steps/confirmation/PaymentDetails/StepConfirmationPaymentDetails';\nimport { PlanpayPaymentMethod } from '@/components/steps/confirmation/PlanpayPaymentMethod';\nimport { useBasket, useMemberContext } from '@/contexts';\nimport { useCurrentHotel } from '@/hooks';\nimport { ConfirmationFormValues } from '@/models/Confirmation';\nimport RoomstayThemeEngine from '@/providers/RoomstayThemeEngine';\nimport { Translation } from '@/translations/Translation';\nimport { Color } from '@/util/Color';\n\ninterface PaymentInformationProps {\n tokenizerRef: any;\n onChangeCb: (code: string) => void;\n}\n\nconst PaymentInformation: FC<PaymentInformationProps> = ({ tokenizerRef, onChangeCb }) => {\n const { t } = useTranslation();\n const methods = useFormContext<ConfirmationFormValues>();\n const { hotel } = useCurrentHotel();\n const basketContext = useBasket();\n\n const { cards = [], roomstayMember } = useMemberContext();\n const defaultCard = useMemo(() => cards.find((card) => card.cardId === roomstayMember?.defaultCard), [cards, roomstayMember]);\n\n const paymentMethod = methods.watch('paymentMethod');\n const vgsCardInputOption: IRadioButtonOption = {\n value: EBookingPaymentMethod.Card,\n label: <InlinePaymentOption active={paymentMethod === EBookingPaymentMethod.Card} />,\n renderContent: () => <StepConfirmationVGSPaymentInput ref={tokenizerRef} />,\n };\n\n const options: IRadioButtonOption[] = [];\n if (hotel?.paymentMethods?.includes(EBookingPaymentMethod.Card)) {\n let defaultCardOption: IRadioButtonOption;\n // Reason this is split up is in case someone doesn't have a default card selected\n // We still want to select the first card they have, if they have any.\n if (cards.length) {\n const selectedMemberCard = defaultCard ? defaultCard : cards[0];\n\n defaultCardOption = {\n value: selectedMemberCard.cardId,\n label: <InlinePaymentOption card={selectedMemberCard} />,\n };\n } else {\n defaultCardOption = vgsCardInputOption;\n }\n\n const selectableStoredCardOptions = [];\n\n if (cards.length) {\n for (const memberCard of cards) {\n selectableStoredCardOptions.push({\n value: memberCard.cardId,\n label: <InlinePaymentOption card={memberCard} />,\n });\n }\n selectableStoredCardOptions.push(vgsCardInputOption);\n }\n\n options.push({\n ...defaultCardOption,\n options: selectableStoredCardOptions.length > 0 ? selectableStoredCardOptions : undefined,\n });\n }\n\n if (\n hotel?.paymentMethods?.includes(EBookingPaymentMethod.Planpay) &&\n hotel?.planpay?.minDaysShowPlanpay &&\n dayjs(basketContext.startDate).diff(dayjs(), 'day') > hotel?.planpay?.minDaysShowPlanpay\n ) {\n options.push({\n value: EBookingPaymentMethod.Planpay,\n label: (\n <div className=\"u-flex u-flex-align-center\">\n <div>{t(Translation.Step.Confirmation.PlanpayLabel)}</div>\n <div\n className=\"u-flex u-flex-align-center u-marg-left--light\"\n style={{\n borderRadius: '24px',\n overflow: 'hidden',\n }}\n >\n <img height={16} src={RoomstayThemeEngine.getImageAssetUrl('planpay-logo-small.svg')} alt=\"\" />\n </div>\n {!methods.formState.isValid && (\n <Text\n color={Color.Graphite}\n className=\"u-flex u-flex-align-center\"\n style={{\n color: '#313131',\n fontSize: 10,\n }}\n >\n <Icon color={Color.DarkGrey} icon={IconType.Info} className=\"u-marg-right--lighter u-marg-left--light\" />\n {t(Translation.Step.Confirmation.PlanpayHelperText)}\n </Text>\n )}\n </div>\n ),\n disabled: !methods.formState.isValid,\n disabledReason: !methods.formState.isValid ? 'You must fill all the above details before proceeding with Planpay' : '',\n renderContent: () => <PlanpayPaymentMethod />,\n });\n }\n\n return (\n <Controller\n control={methods.control}\n name=\"paymentMethod\"\n render={({ field: { onChange, value } }) => {\n return (\n <>\n <div>\n <RadioButtonGroup\n options={options}\n value={value}\n onChange={(code) => {\n onChange(code);\n onChangeCb(code);\n }}\n />\n </div>\n </>\n );\n }}\n />\n );\n};\n\nexport default PaymentInformation;\n"]}
1
+ {"version":3,"file":"PaymentInformation.js","sourceRoot":"/","sources":["src/components/steps/confirmation/PaymentInformation.tsx"],"names":[],"mappings":"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","sourcesContent":["import { EBookingPaymentMethod } from '@roomstay/core';\nimport dayjs from 'dayjs';\nimport React, { FC, useContext, useEffect, useMemo } from 'react';\nimport { Controller, useFormContext } from 'react-hook-form';\n\nimport InlinePaymentOption from '@/components/generic/PaymentCard/InlinePaymentOption';\nimport RadioButtonGroup, { IRadioButtonOption } from '@/components/generic/RadioButtonGroup/RadioButtonGroup';\nimport { StepConfirmationVGSPaymentInput } from '@/components/steps/confirmation/PaymentDetails/StepConfirmationPaymentDetails';\nimport PlanpayLabel from '@/components/steps/confirmation/PlanpayLabel';\nimport { PlanpayPaymentMethod } from '@/components/steps/confirmation/PlanpayPaymentMethod';\nimport { CompanyContext, useBasket, useMemberContext } from '@/contexts';\nimport { useCurrentHotel } from '@/hooks';\nimport usePlanpay from '@/hooks/Planpay';\nimport { ConfirmationFormValues } from '@/models/Confirmation';\n\ninterface PaymentInformationProps {\n tokenizerRef: any;\n onChangeCb: (code: string) => void;\n}\n\nconst PaymentInformation: FC<PaymentInformationProps> = ({ tokenizerRef, onChangeCb }) => {\n const methods = useFormContext<ConfirmationFormValues>();\n const { hotel } = useCurrentHotel();\n const basketContext = useBasket();\n const { hasPricePreview, planpayConfig } = usePlanpay();\n const { cards = [], roomstayMember } = useMemberContext();\n const defaultCard = useMemo(() => cards.find((card) => card.cardId === roomstayMember?.defaultCard), [cards, roomstayMember]);\n\n const { currentCurrency } = useContext(CompanyContext);\n\n const paymentMethod = methods.watch('paymentMethod');\n const vgsCardInputOption: IRadioButtonOption = {\n value: EBookingPaymentMethod.Card,\n label: <InlinePaymentOption active={paymentMethod === EBookingPaymentMethod.Card} />,\n renderContent: () => <StepConfirmationVGSPaymentInput ref={tokenizerRef} />,\n };\n\n const options: IRadioButtonOption[] = [];\n if (hotel?.paymentMethods?.includes(EBookingPaymentMethod.Card)) {\n let defaultCardOption: IRadioButtonOption;\n // Reason this is split up is in case someone doesn't have a default card selected\n // We still want to select the first card they have, if they have any.\n if (cards.length) {\n const selectedMemberCard = defaultCard ? defaultCard : cards[0];\n\n defaultCardOption = {\n value: selectedMemberCard.cardId,\n label: <InlinePaymentOption card={selectedMemberCard} />,\n };\n } else {\n defaultCardOption = vgsCardInputOption;\n }\n\n const selectableStoredCardOptions = [];\n\n if (cards.length) {\n for (const memberCard of cards) {\n selectableStoredCardOptions.push({\n value: memberCard.cardId,\n label: <InlinePaymentOption card={memberCard} />,\n });\n }\n selectableStoredCardOptions.push(vgsCardInputOption);\n }\n\n options.push({\n ...defaultCardOption,\n options: selectableStoredCardOptions.length > 0 ? selectableStoredCardOptions : undefined,\n });\n }\n\n useEffect(() => {\n methods.trigger();\n }, [currentCurrency]);\n\n if (hasPricePreview && planpayConfig && planpayConfig.minDaysShowPlanpay && dayjs(basketContext.startDate).diff(dayjs(), 'day') > planpayConfig.minDaysShowPlanpay) {\n options.push({\n value: EBookingPaymentMethod.Planpay,\n label: <PlanpayLabel />,\n disabled: !methods.formState.isValid,\n disabledReason: !methods.formState.isValid ? 'You must fill all the above details before proceeding with Planpay' : '',\n renderContent: () => <PlanpayPaymentMethod />,\n });\n }\n\n return (\n <Controller\n control={methods.control}\n name=\"paymentMethod\"\n render={({ field: { onChange, value } }) => {\n return (\n <>\n <div>\n <RadioButtonGroup\n options={options}\n value={value}\n onChange={(code) => {\n onChange(code);\n onChangeCb(code);\n }}\n />\n </div>\n </>\n );\n }}\n />\n );\n};\n\nexport default PaymentInformation;\n"]}
@@ -0,0 +1,2 @@
1
+ declare const PlanpayLabel: () => JSX.Element;
2
+ export default PlanpayLabel;