@roomstay/frontend 2.0.5 → 2.0.7
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.
- package/dist/218.bundle.js +1 -1
- package/dist/882.bundle.js +1 -1
- package/dist/main.bundle.js +1 -1
- package/dist/src/api/ReservationAPI.js +2 -2
- package/dist/src/api/ReservationAPI.js.map +1 -1
- package/dist/src/components/generic/Placeholder.d.ts +4 -4
- package/dist/src/components/generic/Placeholder.js +7 -4
- package/dist/src/components/generic/Placeholder.js.map +1 -1
- package/dist/src/components/generic/RadioButtonGroup/RadioButton.d.ts +1 -1
- package/dist/src/components/generic/RadioButtonGroup/RadioButton.js.map +1 -1
- package/dist/src/components/generic/RadioButtonGroup/RadioButtonGroup.d.ts +1 -1
- package/dist/src/components/generic/RadioButtonGroup/RadioButtonGroup.js +5 -4
- package/dist/src/components/generic/RadioButtonGroup/RadioButtonGroup.js.map +1 -1
- package/dist/src/components/generic/date/DatePicker.js +4 -4
- package/dist/src/components/generic/date/DatePicker.js.map +1 -1
- package/dist/src/components/generic/date/WeekViewSkeleton.d.ts +2 -0
- package/dist/src/components/generic/date/WeekViewSkeleton.js +68 -0
- package/dist/src/components/generic/date/WeekViewSkeleton.js.map +1 -0
- package/dist/src/components/steps/confirmation/StepConfirmationCountrySelector.js +8 -2
- package/dist/src/components/steps/confirmation/StepConfirmationCountrySelector.js.map +1 -1
- package/dist/src/components/steps/room/MemberSignInModal/MemberSignInModal.js +6 -2
- package/dist/src/components/steps/room/MemberSignInModal/MemberSignInModal.js.map +1 -1
- package/dist/src/components/steps/room/StepRoomSortBy.js +7 -1
- package/dist/src/components/steps/room/StepRoomSortBy.js.map +1 -1
- package/dist/src/components/steps/room/roomBuilderProgress/RoomBuilderProgressRow.js +2 -2
- package/dist/src/components/steps/room/roomBuilderProgress/RoomBuilderProgressRow.js.map +1 -1
- package/dist/test.bundle.js +1 -1
- package/dist/tests/offline/entry/RSCompany.js +4 -0
- package/dist/tests/offline/entry/RSCompany.js.map +1 -1
- package/dist/vendors.bundle.js +1 -1
- package/package.json +2 -2
|
@@ -87,7 +87,7 @@ class ReservationAPI extends BaseAPI_1.default {
|
|
|
87
87
|
this.cancelReservation = (id, email, hotelId) => new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () {
|
|
88
88
|
var _a, _b;
|
|
89
89
|
try {
|
|
90
|
-
const response = yield this.delete(BaseAPI_1.APIEndpoint.Reservations, {}, hotelId, { email }, id);
|
|
90
|
+
const response = yield this.delete(BaseAPI_1.APIEndpoint.Reservations, {}, hotelId, { email: encodeURIComponent(email) }, id);
|
|
91
91
|
(_b = (_a = this.storedReservations[id]) === null || _a === void 0 ? void 0 : _a.reservations) === null || _b === void 0 ? void 0 : _b.forEach((reservation) => {
|
|
92
92
|
if (reservation.reservationNumber === id) {
|
|
93
93
|
reservation.status = 'Cancelled';
|
|
@@ -107,7 +107,7 @@ class ReservationAPI extends BaseAPI_1.default {
|
|
|
107
107
|
return resolve(this.storedReservations[id]);
|
|
108
108
|
}
|
|
109
109
|
try {
|
|
110
|
-
const response = yield this.get(BaseAPI_1.APIEndpoint.Reservations, { email }, id, hotelId);
|
|
110
|
+
const response = yield this.get(BaseAPI_1.APIEndpoint.Reservations, { email: encodeURIComponent(email) }, id, hotelId);
|
|
111
111
|
this.storedReservations[id] = response;
|
|
112
112
|
resolve(response);
|
|
113
113
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ReservationAPI.js","sourceRoot":"/","sources":["src/api/ReservationAPI.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"ReservationAPI.js","sourceRoot":"/","sources":["src/api/ReservationAPI.ts"],"names":[],"mappings":"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","sourcesContent":["import BaseAPI, { APIEndpoint } from 'api/BaseAPI';\nimport BasketRow from 'models/BasketRow';\nimport UserProfile from 'models/UserProfile';\nimport PaymentCard from 'models/PaymentCard';\nimport ReservationsDTO, { ReservationDTO } from 'models/Api/ReservationsDTO';\nimport BasketAddonRow from 'models/BasketAddonRow';\nimport { IBookingPayment } from '@roomstay/core';\n\nexport enum EPaymentMethod {\n PLANPAY = 'Planpay',\n CARD = 'Card',\n}\nexport interface IPayment {\n Type: EPaymentMethod;\n PlanpayCheckoutId?: string;\n PaymentCard?: PaymentCard;\n}\n\nexport default class ReservationAPI extends BaseAPI {\n private storedReservations: { [ref: string]: any } = {};\n\n public bookNow = async (\n basketRows: BasketRow[],\n userProfiles: UserProfile[],\n payment: IBookingPayment,\n addonRows: BasketAddonRow[],\n comments: string,\n hotelId: string,\n specialReq: string = undefined\n ): Promise<ReservationsDTO> => {\n const rooms: any[] = [];\n\n basketRows.forEach((row) => {\n const room = {\n RoomType: row.getRoom().code,\n RatePlan: row.getRate().code,\n PromoCode: row.getPromoCode(),\n Adults: row.getAdults(),\n Children: row.getChildren(),\n CheckInDate: row.getStartDate().format('YYYY-MM-DD'),\n CheckOutDate: row.getEndDate().format('YYYY-MM-DD'),\n };\n\n rooms.push(room);\n });\n\n const addons = addonRows.map((row) => {\n const addon = row.getAddon();\n const priceInfo = addon.availability[row.getSelectedDate()];\n\n const response: any = {\n Code: addon.code,\n StartDate: row.getSelectedDate(),\n };\n if (addon?.ratePlanCode) {\n response.RatePlanCode = row.getAddon().ratePlanCode;\n }\n if (row.getSelectedTime()) {\n response.StartTime = row.getSelectedTime();\n }\n\n if (priceInfo.price) {\n response.Quantity = row.getQuantity();\n }\n if (priceInfo.adultPrice) {\n response.Adults = row.getAdultQuantity();\n }\n if (priceInfo.childPrice) {\n response.Children = row.getChildQuantity();\n }\n\n if (addon.pricingType) {\n response.PricingType = addon.pricingType;\n }\n\n return response;\n });\n\n return this.post(\n APIEndpoint.Reservations,\n {\n Rooms: rooms,\n Services: addons,\n SpecialRequest: specialReq,\n Comments: comments,\n Profiles: userProfiles,\n Payment: payment,\n },\n hotelId\n );\n };\n\n public commit = async (reservations: string[], itineraryId: string, hotelId: string, planpayCheckoutId?: string): Promise<ReservationsDTO> => {\n return this.post(\n APIEndpoint.Reservations,\n {\n itineraryId: itineraryId,\n reservationIds: reservations,\n planpayCheckoutId,\n },\n hotelId,\n {},\n 'commit'\n );\n };\n\n public rollback = async (reservations: string[], itineraryId: string, hotelId: string): Promise<boolean> => {\n await this.post(\n APIEndpoint.Reservations,\n {\n itineraryId: itineraryId,\n reservationIds: reservations,\n },\n hotelId,\n {},\n 'rollback'\n );\n\n return true;\n };\n\n public cancelReservation = (id: string, email: string, hotelId: string): Promise<boolean> =>\n new Promise(async (resolve, reject) => {\n try {\n const response = await this.delete(APIEndpoint.Reservations, {}, hotelId, { email: encodeURIComponent(email) }, id);\n\n this.storedReservations[id]?.reservations?.forEach((reservation: ReservationDTO) => {\n if (reservation.reservationNumber === id) {\n reservation.status = 'Cancelled';\n }\n });\n\n resolve(response);\n } catch (ex) {\n reject(ex);\n }\n });\n\n public findReservation = (id: string, email: string, hotelId: string): Promise<ReservationsDTO> =>\n new Promise(async (resolve, reject) => {\n /*\n resolve with locally cached data, so we don't have to re-query this again\n */\n if (this.storedReservations[id]) {\n return resolve(this.storedReservations[id]);\n }\n\n try {\n const response = await this.get(APIEndpoint.Reservations, { email: encodeURIComponent(email) }, id, hotelId);\n\n this.storedReservations[id] = response;\n\n resolve(response);\n } catch (ex) {\n reject(ex);\n }\n });\n}\n"]}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
type StringScreenSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';
|
|
2
2
|
export interface PlaceholderProps {
|
|
3
|
-
type:
|
|
4
|
-
w?: StringScreenSize;
|
|
5
|
-
h?: StringScreenSize;
|
|
3
|
+
type: 'text' | 'circle' | 'block';
|
|
4
|
+
w?: StringScreenSize | number;
|
|
5
|
+
h?: StringScreenSize | number;
|
|
6
6
|
circleSize?: string;
|
|
7
7
|
blockSize?: string;
|
|
8
8
|
blink?: boolean;
|
|
9
|
-
rounded?:
|
|
9
|
+
rounded?: 'md' | 'lg';
|
|
10
10
|
noMarg?: boolean;
|
|
11
11
|
}
|
|
12
12
|
export default function Placeholder(props: PlaceholderProps): JSX.Element;
|
|
@@ -4,21 +4,24 @@ const React = require("react");
|
|
|
4
4
|
const classNames = require("classnames");
|
|
5
5
|
function Placeholder(props) {
|
|
6
6
|
const classes = classNames('c-placeholder', {
|
|
7
|
-
[`--${props.w}--w`]: !!props.w,
|
|
8
|
-
[`--${props.h}--h`]: !!props.h,
|
|
7
|
+
[`--${props.w}--w`]: typeof props.w !== 'number' && !!props.w,
|
|
8
|
+
[`--${props.h}--h`]: typeof props.h !== 'number' && !!props.h,
|
|
9
9
|
'u-marg': !props.noMarg,
|
|
10
10
|
'--text': props.type === 'text',
|
|
11
11
|
'--circle': props.type === 'circle',
|
|
12
|
+
'--block': props.type === 'block',
|
|
12
13
|
'--sm': props.circleSize === 'sm' || props.blockSize === 'sm',
|
|
13
14
|
'--md': props.circleSize === 'md' || props.blockSize === 'md',
|
|
14
15
|
'--lg': props.circleSize === 'lg' || props.blockSize === 'lg',
|
|
15
16
|
'--xl': props.circleSize === 'xl' || props.blockSize === 'xl',
|
|
16
|
-
'--block': props.type === 'block',
|
|
17
17
|
'--rounded-light': props.rounded === 'md',
|
|
18
18
|
'--rounded-heavy': props.rounded === 'lg',
|
|
19
19
|
'--blink': props.blink,
|
|
20
20
|
});
|
|
21
|
-
return React.createElement("div", {
|
|
21
|
+
return (React.createElement("div", { style: {
|
|
22
|
+
height: typeof props.h === 'number' && props.h,
|
|
23
|
+
width: typeof props.w === 'number' && props.w,
|
|
24
|
+
}, className: classes }));
|
|
22
25
|
}
|
|
23
26
|
exports.default = Placeholder;
|
|
24
27
|
//# sourceMappingURL=Placeholder.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Placeholder.js","sourceRoot":"/","sources":["src/components/generic/Placeholder.tsx"],"names":[],"mappings":";;AAAA,+BAA+B;AAC/B,yCAAyC;AAgBzC,SAAwB,WAAW,CAAC,KAAuB;IACvD,MAAM,OAAO,GAAG,UAAU,CAAC,eAAe,EAAE;QACxC,CAAC,KAAK,KAAK,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"Placeholder.js","sourceRoot":"/","sources":["src/components/generic/Placeholder.tsx"],"names":[],"mappings":";;AAAA,+BAA+B;AAC/B,yCAAyC;AAgBzC,SAAwB,WAAW,CAAC,KAAuB;IACvD,MAAM,OAAO,GAAG,UAAU,CAAC,eAAe,EAAE;QACxC,CAAC,KAAK,KAAK,CAAC,CAAC,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC;QAC7D,CAAC,KAAK,KAAK,CAAC,CAAC,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC;QAC7D,QAAQ,EAAE,CAAC,KAAK,CAAC,MAAM;QACvB,QAAQ,EAAE,KAAK,CAAC,IAAI,KAAK,MAAM;QAC/B,UAAU,EAAE,KAAK,CAAC,IAAI,KAAK,QAAQ;QACnC,SAAS,EAAE,KAAK,CAAC,IAAI,KAAK,OAAO;QACjC,MAAM,EAAE,KAAK,CAAC,UAAU,KAAK,IAAI,IAAI,KAAK,CAAC,SAAS,KAAK,IAAI;QAC7D,MAAM,EAAE,KAAK,CAAC,UAAU,KAAK,IAAI,IAAI,KAAK,CAAC,SAAS,KAAK,IAAI;QAC7D,MAAM,EAAE,KAAK,CAAC,UAAU,KAAK,IAAI,IAAI,KAAK,CAAC,SAAS,KAAK,IAAI;QAC7D,MAAM,EAAE,KAAK,CAAC,UAAU,KAAK,IAAI,IAAI,KAAK,CAAC,SAAS,KAAK,IAAI;QAC7D,iBAAiB,EAAE,KAAK,CAAC,OAAO,KAAK,IAAI;QACzC,iBAAiB,EAAE,KAAK,CAAC,OAAO,KAAK,IAAI;QACzC,SAAS,EAAE,KAAK,CAAC,KAAK;KACzB,CAAC,CAAC;IAEH,OAAO,CACH,6BACI,KAAK,EAAE;YACH,MAAM,EAAE,OAAO,KAAK,CAAC,CAAC,KAAK,QAAQ,IAAI,KAAK,CAAC,CAAC;YAC9C,KAAK,EAAE,OAAO,KAAK,CAAC,CAAC,KAAK,QAAQ,IAAI,KAAK,CAAC,CAAC;SAChD,EACD,SAAS,EAAE,OAAO,GACpB,CACL,CAAC;AACN,CAAC;AA1BD,8BA0BC","sourcesContent":["import * as React from 'react';\nimport * as classNames from 'classnames';\n\ntype StringScreenSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n\nexport interface PlaceholderProps {\n type: 'text' | 'circle' | 'block';\n w?: StringScreenSize | number;\n h?: StringScreenSize | number;\n circleSize?: string;\n blockSize?: string;\n blink?: boolean;\n rounded?: 'md' | 'lg';\n\n noMarg?: boolean;\n}\n\nexport default function Placeholder(props: PlaceholderProps) {\n const classes = classNames('c-placeholder', {\n [`--${props.w}--w`]: typeof props.w !== 'number' && !!props.w,\n [`--${props.h}--h`]: typeof props.h !== 'number' && !!props.h,\n 'u-marg': !props.noMarg,\n '--text': props.type === 'text',\n '--circle': props.type === 'circle',\n '--block': props.type === 'block',\n '--sm': props.circleSize === 'sm' || props.blockSize === 'sm',\n '--md': props.circleSize === 'md' || props.blockSize === 'md',\n '--lg': props.circleSize === 'lg' || props.blockSize === 'lg',\n '--xl': props.circleSize === 'xl' || props.blockSize === 'xl',\n '--rounded-light': props.rounded === 'md',\n '--rounded-heavy': props.rounded === 'lg',\n '--blink': props.blink,\n });\n\n return (\n <div\n style={{\n height: typeof props.h === 'number' && props.h,\n width: typeof props.w === 'number' && props.w,\n }}\n className={classes}\n />\n );\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RadioButton.js","sourceRoot":"/","sources":["src/components/generic/RadioButtonGroup/RadioButton.tsx"],"names":[],"mappings":";;;AAAA,+BAA+B;AAC/B,iCAA+C;AAC/C,uEAA+C;AAC/C,yCAAyC;AAWzC,MAAM,WAAW,GAAyB,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,EAAE,EAAE;IAC3G,MAAM,EAAE,GAAG,IAAA,eAAO,EAAC,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC;IAEvD,OAAO,CACH,+BACI,OAAO,EAAE,EAAE,EACX,SAAS,EAAE,UAAU,CAAC,iCAAM,CAAC,IAAI,EAAE,SAAS,EAAE;YAC1C,CAAC,iCAAM,CAAC,QAAQ,CAAC,EAAE,QAAQ;YAC3B,CAAC,iCAAM,CAAC,OAAO,CAAC,EAAE,OAAO;SAC5B,CAAC;QAEF,6BAAK,SAAS,EAAE,iCAAM,CAAC,MAAM;YACzB,+BAAO,SAAS,EAAE,iCAAM,CAAC,KAAK,EAAE,MAAM,QAAC,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAC,OAAO,EAAC,OAAO,EAAE,OAAO,GAAI;YACxH,6BAAK,SAAS,EAAE,iCAAM,CAAC,MAAM,GAAI;YACjC,6BAAK,SAAS,EAAE,iCAAM,CAAC,IAAI,IAAG,KAAK,CAAO,CACxC;QACN,iCAAM,aAAa,IAAI,OAAO,IAAI,6BAAK,SAAS,EAAE,iCAAM,CAAC,OAAO,IAAG,aAAa,EAAE,CAAO,CAAO,CAC5F,CACX,CAAC;AACN,CAAC,CAAC;AAEO,kCAAW","sourcesContent":["import * as React from 'react';\nimport { FC, ReactNode, useMemo } from 'react';\nimport styles from './RadioButton.module.scss';\nimport * as classNames from 'classnames';\n\
|
|
1
|
+
{"version":3,"file":"RadioButton.js","sourceRoot":"/","sources":["src/components/generic/RadioButtonGroup/RadioButton.tsx"],"names":[],"mappings":";;;AAAA,+BAA+B;AAC/B,iCAA+C;AAC/C,uEAA+C;AAC/C,yCAAyC;AAWzC,MAAM,WAAW,GAAyB,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,EAAE,EAAE;IAC3G,MAAM,EAAE,GAAG,IAAA,eAAO,EAAC,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC;IAEvD,OAAO,CACH,+BACI,OAAO,EAAE,EAAE,EACX,SAAS,EAAE,UAAU,CAAC,iCAAM,CAAC,IAAI,EAAE,SAAS,EAAE;YAC1C,CAAC,iCAAM,CAAC,QAAQ,CAAC,EAAE,QAAQ;YAC3B,CAAC,iCAAM,CAAC,OAAO,CAAC,EAAE,OAAO;SAC5B,CAAC;QAEF,6BAAK,SAAS,EAAE,iCAAM,CAAC,MAAM;YACzB,+BAAO,SAAS,EAAE,iCAAM,CAAC,KAAK,EAAE,MAAM,QAAC,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAC,OAAO,EAAC,OAAO,EAAE,OAAO,GAAI;YACxH,6BAAK,SAAS,EAAE,iCAAM,CAAC,MAAM,GAAI;YACjC,6BAAK,SAAS,EAAE,iCAAM,CAAC,IAAI,IAAG,KAAK,CAAO,CACxC;QACN,iCAAM,aAAa,IAAI,OAAO,IAAI,6BAAK,SAAS,EAAE,iCAAM,CAAC,OAAO,IAAG,aAAa,EAAE,CAAO,CAAO,CAC5F,CACX,CAAC;AACN,CAAC,CAAC;AAEO,kCAAW","sourcesContent":["import * as React from 'react';\nimport { FC, ReactNode, useMemo } from 'react';\nimport styles from './RadioButton.module.scss';\nimport * as classNames from 'classnames';\n\nexport interface RadioButtonProps {\n checked: boolean;\n onChange: JSX.IntrinsicElements['input']['onChange'];\n label?: ReactNode;\n disabled?: boolean;\n renderContent?: () => ReactNode;\n className?: string;\n}\n\nconst RadioButton: FC<RadioButtonProps> = ({ checked, onChange, disabled, label, renderContent, className }) => {\n const id = useMemo(() => Math.random().toString(), []);\n\n return (\n <label\n htmlFor={id}\n className={classNames(styles.root, className, {\n [styles.disabled]: disabled,\n [styles.checked]: checked,\n })}\n >\n <div className={styles.header}>\n <input className={styles.input} hidden disabled={disabled} id={id} onChange={onChange} type=\"radio\" checked={checked} />\n <div className={styles.design} />\n <div className={styles.text}>{label}</div>\n </div>\n <div>{renderContent && checked && <div className={styles.content}>{renderContent()}</div>}</div>\n </label>\n );\n};\n\nexport { RadioButton };\n"]}
|
|
@@ -7,13 +7,14 @@ const AutoAutoHeight_1 = require("animations/AutoAutoHeight");
|
|
|
7
7
|
const Tooltip_1 = require("../Tooltip/Tooltip");
|
|
8
8
|
const RadioButtonGroup = ({ options, value: valueProp, onChange }) => {
|
|
9
9
|
return (React.createElement("div", { className: RadioButtonGroup_module_scss_1.default.root }, options.map(({ value, label, disabled, disabledReason, renderContent }) => {
|
|
10
|
-
const radioButton = (React.createElement(RadioButton_1.RadioButton, { className: RadioButtonGroup_module_scss_1.default.item, key: value, checked: value === valueProp, onChange: () => {
|
|
11
|
-
|
|
10
|
+
const radioButton = (React.createElement(RadioButton_1.RadioButton, { className: RadioButtonGroup_module_scss_1.default.item, key: value, checked: !disabled && value === valueProp, onChange: () => {
|
|
11
|
+
if (!disabled)
|
|
12
|
+
onChange(value);
|
|
12
13
|
}, label: label, disabled: disabled, renderContent: () => React.createElement(AutoAutoHeight_1.default, { open: true }, renderContent()) }));
|
|
13
14
|
if (disabled && disabledReason) {
|
|
14
|
-
return React.createElement(Tooltip_1.default, { title: disabledReason }, radioButton);
|
|
15
|
+
return (React.createElement(Tooltip_1.default, { key: value, wrapperClasses: RadioButtonGroup_module_scss_1.default.wrapper, title: disabledReason }, radioButton));
|
|
15
16
|
}
|
|
16
|
-
return radioButton;
|
|
17
|
+
return (React.createElement("div", { key: value, className: RadioButtonGroup_module_scss_1.default.wrapper }, radioButton));
|
|
17
18
|
})));
|
|
18
19
|
};
|
|
19
20
|
exports.default = RadioButtonGroup;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RadioButtonGroup.js","sourceRoot":"/","sources":["src/components/generic/RadioButtonGroup/RadioButtonGroup.tsx"],"names":[],"mappings":";;AAAA,+BAA+B;AAE/B,iFAA8E;AAC9E,iFAAoD;AACpD,8DAAuD;AACvD,gDAAyC;AAiBzC,MAAM,gBAAgB,GAA8B,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE;IAC5F,OAAO,CACH,6BAAK,SAAS,EAAE,sCAAM,CAAC,IAAI,IACtB,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,aAAa,EAAE,EAAE,EAAE;QACvE,MAAM,WAAW,GAAG,CAChB,oBAAC,yBAAW,IACR,SAAS,EAAE,sCAAM,CAAC,IAAI,EACtB,GAAG,EAAE,KAAK,EACV,OAAO,EAAE,KAAK,KAAK,SAAS,
|
|
1
|
+
{"version":3,"file":"RadioButtonGroup.js","sourceRoot":"/","sources":["src/components/generic/RadioButtonGroup/RadioButtonGroup.tsx"],"names":[],"mappings":";;AAAA,+BAA+B;AAE/B,iFAA8E;AAC9E,iFAAoD;AACpD,8DAAuD;AACvD,gDAAyC;AAiBzC,MAAM,gBAAgB,GAA8B,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE;IAC5F,OAAO,CACH,6BAAK,SAAS,EAAE,sCAAM,CAAC,IAAI,IACtB,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,aAAa,EAAE,EAAE,EAAE;QACvE,MAAM,WAAW,GAAG,CAChB,oBAAC,yBAAW,IACR,SAAS,EAAE,sCAAM,CAAC,IAAI,EACtB,GAAG,EAAE,KAAK,EACV,OAAO,EAAE,CAAC,QAAQ,IAAI,KAAK,KAAK,SAAS,EACzC,QAAQ,EAAE,GAAG,EAAE;gBACX,IAAI,CAAC,QAAQ;oBAAE,QAAQ,CAAC,KAAK,CAAC,CAAC;YACnC,CAAC,EACD,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,QAAQ,EAClB,aAAa,EAAE,GAAG,EAAE,CAAC,oBAAC,wBAAc,IAAC,IAAI,UAAE,aAAa,EAAE,CAAkB,GAC9E,CACL,CAAC;QAEF,IAAI,QAAQ,IAAI,cAAc,EAAE;YAC5B,OAAO,CACH,oBAAC,iBAAO,IAAC,GAAG,EAAE,KAAK,EAAE,cAAc,EAAE,sCAAM,CAAC,OAAO,EAAE,KAAK,EAAE,cAAc,IACrE,WAAW,CACN,CACb,CAAC;SACL;QAED,OAAO,CACH,6BAAK,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,sCAAM,CAAC,OAAO,IACrC,WAAW,CACV,CACT,CAAC;IACN,CAAC,CAAC,CACA,CACT,CAAC;AACN,CAAC,CAAC;AAEF,kBAAe,gBAAgB,CAAC","sourcesContent":["import * as React from 'react';\nimport { FC, ReactNode } from 'react';\nimport { RadioButton } from 'components/generic/RadioButtonGroup/RadioButton';\nimport styles from './RadioButtonGroup.module.scss';\nimport AutoAutoHeight from 'animations/AutoAutoHeight';\nimport Tooltip from '../Tooltip/Tooltip';\n\nexport interface RadioButtonGroupProps {\n options: {\n value: string;\n label?: ReactNode;\n\n disabled?: boolean;\n /** Enabled a tooltip that gives more info on why the field is disabled */\n disabledReason?: string;\n\n renderContent?: () => ReactNode;\n }[];\n value: string;\n onChange: (value: string) => void;\n}\n\nconst RadioButtonGroup: FC<RadioButtonGroupProps> = ({ options, value: valueProp, onChange }) => {\n return (\n <div className={styles.root}>\n {options.map(({ value, label, disabled, disabledReason, renderContent }) => {\n const radioButton = (\n <RadioButton\n className={styles.item}\n key={value}\n checked={!disabled && value === valueProp}\n onChange={() => {\n if (!disabled) onChange(value);\n }}\n label={label}\n disabled={disabled}\n renderContent={() => <AutoAutoHeight open>{renderContent()}</AutoAutoHeight>}\n />\n );\n\n if (disabled && disabledReason) {\n return (\n <Tooltip key={value} wrapperClasses={styles.wrapper} title={disabledReason}>\n {radioButton}\n </Tooltip>\n );\n }\n\n return (\n <div key={value} className={styles.wrapper}>\n {radioButton}\n </div>\n );\n })}\n </div>\n );\n};\n\nexport default RadioButtonGroup;\n"]}
|
|
@@ -10,19 +10,19 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
10
10
|
};
|
|
11
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
12
|
const React = require("react");
|
|
13
|
+
const react_1 = require("react");
|
|
13
14
|
const Color_1 = require("util/Color");
|
|
14
15
|
const Icon_1 = require("components/generic/Icon/Icon");
|
|
15
|
-
const react_1 = require("react");
|
|
16
16
|
const classNames = require("classnames");
|
|
17
17
|
const dayjs = require("dayjs");
|
|
18
18
|
const contexts_1 = require("@frontend/contexts");
|
|
19
19
|
const DatePickerMonth_1 = require("components/generic/date/DatePickerMonth");
|
|
20
20
|
const BookingAPI_1 = require("api/BookingAPI");
|
|
21
|
-
const contexts_2 = require("@frontend/contexts");
|
|
22
21
|
const DataLayer_1 = require("util/DataLayer");
|
|
23
22
|
const MinimumNightStayPill_1 = require("components/steps/MinimumNightStayPill");
|
|
24
23
|
const DaysSelectedInformer_1 = require("components/steps/DaysSelectedInformer");
|
|
25
24
|
const hooks_1 = require("@frontend/hooks");
|
|
25
|
+
const WeekViewSkeleton_1 = require("components/generic/date/WeekViewSkeleton");
|
|
26
26
|
const DatePickerWeek = (0, react_1.lazy)(() => Promise.resolve().then(() => require('components/generic/date/DatePickerWeek')));
|
|
27
27
|
var DateRangePickingState;
|
|
28
28
|
(function (DateRangePickingState) {
|
|
@@ -43,7 +43,7 @@ function DatePicker(props) {
|
|
|
43
43
|
}, [hotel === null || hotel === void 0 ? void 0 : hotel.defaultDatepickerType]);
|
|
44
44
|
const [months, setMonths] = (0, react_1.useState)(props.showMultipleMonths ? [currentMonth, currentMonth.add(1, 'month')] : [currentMonth]);
|
|
45
45
|
const [maxPrice, setMaxPrice] = (0, react_1.useState)(0);
|
|
46
|
-
const basketContext = (0, react_1.useContext)(
|
|
46
|
+
const basketContext = (0, react_1.useContext)(contexts_1.BasketContext);
|
|
47
47
|
const onClickDate = (newDate) => __awaiter(this, void 0, void 0, function* () {
|
|
48
48
|
let newPickingState = null;
|
|
49
49
|
const selectedBasketRow = basketContext.selectedBasketRow;
|
|
@@ -156,7 +156,7 @@ function DatePicker(props) {
|
|
|
156
156
|
const printMonths = (0, react_1.useMemo)(() => (React.createElement(React.Fragment, null, calendarStyle === 'Month' ? (React.createElement(React.Fragment, null,
|
|
157
157
|
React.createElement(DatePickerMonth_1.default, { small: props.small, showingMonth: currentMonth }),
|
|
158
158
|
props.showMultipleMonths && React.createElement(DatePickerMonth_1.default, { showingMonth: currentMonth.add(1, 'month') }))) : (React.createElement(React.Fragment, null,
|
|
159
|
-
React.createElement(React.Suspense, { fallback:
|
|
159
|
+
React.createElement(React.Suspense, { fallback: React.createElement(WeekViewSkeleton_1.default, null) },
|
|
160
160
|
React.createElement(DatePickerWeek, null)))))), [currentMonth, props.showMultipleMonths, calendarStyle]);
|
|
161
161
|
const calendarClassNames = classNames('diji-calendar', {
|
|
162
162
|
'--single': !props.showMultipleMonths,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DatePicker.js","sourceRoot":"/","sources":["src/components/generic/date/DatePicker.tsx"],"names":[],"mappings":"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","sourcesContent":["import * as React from 'react';\n\nimport { Color } from 'util/Color';\nimport Icon, { IconType } from 'components/generic/Icon/Icon';\nimport { useEffect, useState, useRef, useLayoutEffect, useMemo, useContext, lazy } from 'react';\n\nimport * as classNames from 'classnames';\n\nimport * as dayjs from 'dayjs';\nimport { DatePickerContext } from '@frontend/contexts';\nimport DatePickerMonth from 'components/generic/date/DatePickerMonth';\nimport API from 'api/BookingAPI';\nimport { BasketContext } from '@frontend/contexts';\nimport DataLayer, { InteractionStep, InteractionType } from 'util/DataLayer';\nimport MinimumNightStayPill from 'components/steps/MinimumNightStayPill';\nimport DaysSelectedInformer from 'components/steps/DaysSelectedInformer';\nimport { useCurrentHotel } from '@frontend/hooks';\n\nconst DatePickerWeek = lazy(() => import('components/generic/date/DatePickerWeek'));\n\nexport interface DatePickerProps {\n showMonthOnLoad?: dayjs.Dayjs;\n\n selectedStartDate?: dayjs.Dayjs;\n selectedEndDate?: dayjs.Dayjs;\n\n canSelect?: boolean;\n // Includes default navigation arrows\n showArrows?: boolean;\n // Displays two side by side\n showMultipleMonths?: boolean;\n\n // Used for tight spaces\n small?: boolean;\n\n // is there support for start / end dates\n supportsMultiSelecting?: boolean;\n\n // Do or don't show mininmum night stay block\n showMinNightStay?: boolean;\n\n supportsWeek?: boolean;\n\n onDateClicked?: (date: dayjs.Dayjs) => void;\n onStartDateChanged?: (date: dayjs.Dayjs) => void;\n onEndDateChanged?: (date: dayjs.Dayjs) => void;\n}\n\ninterface DatePickerDayObject {\n value: string;\n dateObj: dayjs.Dayjs | null;\n price?: string;\n hovered: boolean;\n}\n\nenum DateRangePickingState {\n StartDate = 1,\n EndDate = 2,\n}\n\nexport default function DatePicker(props: DatePickerProps) {\n const { hotel } = useCurrentHotel();\n\n const [currentMonth, setCurrentMonth] = useState(props.showMonthOnLoad ? props.showMonthOnLoad : props.selectedStartDate ? props.selectedStartDate : dayjs());\n\n const [selectedStartDate, setSelectedStartDate] = useState(props.selectedStartDate ?? null);\n const [selectedEndDate, setSelectedEndDate] = useState(props.selectedEndDate ?? null);\n\n const [hoveringOverDate, setHoveringOverDate] = useState(null);\n\n const [pickingState, setPickingState] = useState(DateRangePickingState.StartDate);\n const [calendarStyle, setCalendarStyle] = useState<'Month' | 'Week'>(hotel?.defaultDatepickerType ? hotel?.defaultDatepickerType : 'Month');\n useEffect(() => {\n setCalendarStyle(hotel?.defaultDatepickerType ? hotel?.defaultDatepickerType : 'Month');\n }, [hotel?.defaultDatepickerType]);\n\n const [months, setMonths] = useState(props.showMultipleMonths ? [currentMonth, currentMonth.add(1, 'month')] : [currentMonth]);\n const [maxPrice, setMaxPrice] = useState(0);\n\n const basketContext = useContext(BasketContext);\n\n const onClickDate = async (newDate: dayjs.Dayjs) => {\n let newPickingState: DateRangePickingState = null;\n\n const selectedBasketRow = basketContext.selectedBasketRow;\n const adults = selectedBasketRow ? selectedBasketRow.getAdults() : 0;\n const children = selectedBasketRow ? selectedBasketRow.getChildren() : 0;\n const promoCode = selectedBasketRow ? selectedBasketRow.getPromoCode() : '';\n\n const newDatePrice = await API.Availability.getCheapestPriceForDay(newDate, adults, children, promoCode, hotel?.hotelID, false);\n\n switch (pickingState) {\n default:\n case DateRangePickingState.StartDate:\n if (newDatePrice.price || !hotel) {\n newPickingState = DateRangePickingState.EndDate;\n\n setSelectedStartDate(newDate);\n setSelectedEndDate(null);\n }\n\n break;\n case DateRangePickingState.EndDate:\n if (newDate.isBefore(selectedStartDate)) {\n setSelectedStartDate(newDate);\n newPickingState = DateRangePickingState.EndDate;\n } else {\n newPickingState = DateRangePickingState.StartDate;\n\n setHoveringOverDate(null);\n\n const nextAvailableDay = await getLastValidDay(selectedStartDate, newDate);\n\n if (newDate.isSame(selectedStartDate)) {\n setSelectedEndDate(nextAvailableDay.add(1, 'day'));\n } else {\n setSelectedEndDate(nextAvailableDay);\n }\n }\n\n break;\n }\n\n if (props.supportsMultiSelecting) {\n setPickingState(newPickingState);\n }\n };\n\n const getLastValidDay = (fromDate: dayjs.Dayjs, toDate: dayjs.Dayjs): Promise<dayjs.Dayjs> =>\n new Promise(async (resolve) => {\n const selectedBasketRow = basketContext.selectedBasketRow;\n const adults = selectedBasketRow ? selectedBasketRow.getAdults() : 0;\n const children = selectedBasketRow ? selectedBasketRow.getChildren() : 0;\n const promoCode = selectedBasketRow ? selectedBasketRow.getPromoCode() : '';\n\n const diff = toDate?.diff?.(fromDate, 'day');\n\n let nextMustBreak = false;\n for (let i = 0; i <= diff; i++) {\n const dayToCheck = fromDate.add(i, 'day');\n\n const price = await API.Availability.getCheapestPriceForDay(dayToCheck, adults, children, promoCode, hotel?.hotelID, false);\n\n if (nextMustBreak) {\n return resolve(dayToCheck.subtract(1, 'day'));\n }\n\n if (!price.price && hotel) {\n nextMustBreak = true;\n continue;\n }\n }\n\n resolve(toDate);\n });\n\n const onHoveredOverDay = (day: dayjs.Dayjs) => {\n if (selectedStartDate && !selectedEndDate) {\n getLastValidDay(selectedStartDate, day).then((lastValidDay) => {\n setHoveringOverDate(lastValidDay);\n });\n }\n };\n\n const firstUpdate = useRef();\n\n useEffect(() => {\n if (props.showMonthOnLoad) {\n setCurrentMonth(props.showMonthOnLoad);\n }\n }, [props.showMonthOnLoad]);\n\n useEffect(() => {\n if (props.showMultipleMonths) {\n setMonths([currentMonth, currentMonth.add(1, 'month')]);\n }\n }, [currentMonth, props.showMultipleMonths]);\n\n useEffect(() => {\n if (firstUpdate.current) {\n firstUpdate.current = undefined;\n return;\n }\n\n if (props.onStartDateChanged) {\n props.onStartDateChanged(selectedStartDate);\n }\n }, [selectedStartDate]);\n\n useLayoutEffect(() => {\n if (firstUpdate.current) {\n firstUpdate.current = undefined;\n return;\n }\n\n if (props.onEndDateChanged) {\n props.onEndDateChanged(selectedEndDate);\n }\n }, [selectedEndDate]);\n\n const context = {\n today: dayjs(),\n todayInUnix: dayjs().unix(),\n startDate: selectedStartDate,\n endDate: selectedEndDate,\n\n hoveredMonth: hoveringOverDate,\n maxPrice,\n\n onHoverOver: onHoveredOverDay,\n currentMonth,\n\n onDayClicked: (date: dayjs.Dayjs) => {\n onClickDate(date);\n },\n setMaxPrice,\n };\n\n const printMonths = useMemo(\n () => (\n <>\n {calendarStyle === 'Month' ? (\n <>\n <DatePickerMonth small={props.small} showingMonth={currentMonth} />\n {props.showMultipleMonths && <DatePickerMonth showingMonth={currentMonth.add(1, 'month')} />}\n </>\n ) : (\n <>\n <React.Suspense fallback=\"Loading...\">\n <DatePickerWeek />\n </React.Suspense>\n </>\n )}\n </>\n ),\n [currentMonth, props.showMultipleMonths, calendarStyle]\n );\n\n const calendarClassNames = classNames('diji-calendar', {\n '--single': !props.showMultipleMonths,\n '--small': props.small,\n '--week': calendarStyle === 'Week',\n });\n const previousMonthOnClick = () => {\n DataLayer.instance.sendInteraction('Show Previous Month', InteractionType.CALENDAR, InteractionStep.DATES);\n setCurrentMonth(currentMonth.subtract(1, 'month'));\n };\n const nextMonthOnClick = () => {\n DataLayer.instance.sendInteraction('Show Next Month', InteractionType.CALENDAR, InteractionStep.DATES);\n setCurrentMonth(currentMonth.add(1, 'month'));\n };\n const setCalendarStyleAsMonth = () => {\n DataLayer.instance.sendInteraction('Set Calendar Style - Month', InteractionType.CALENDAR, InteractionStep.DATES);\n setCalendarStyle('Month');\n };\n const setCalendarStyleAsWeek = () => {\n DataLayer.instance.sendInteraction('Set Calendar Style - Week', InteractionType.CALENDAR, InteractionStep.DATES);\n setCalendarStyle('Week');\n };\n\n return (\n <DatePickerContext.Provider value={context}>\n <div ref={firstUpdate} className={calendarClassNames}>\n {calendarStyle === 'Month' && (\n <div className=\"diji-calendar-navigation\">\n <Icon icon={IconType.ArrowLeft2} onClick={previousMonthOnClick} color={Color.White} backgroundColor={Color.Navy} borderRadius=\"round\" size=\"24px\" />\n <Icon icon={IconType.ArrowRight2} onClick={nextMonthOnClick} color={Color.White} backgroundColor={Color.Navy} borderRadius=\"round\" size=\"24px\" />\n </div>\n )}\n {props.supportsWeek && (\n <div className=\"diji-calendar-picker-type\">\n <Icon icon={IconType.ViewMonth} size=\"32px\" color={calendarStyle === 'Month' ? Color.Navy : Color.Grey} onClick={setCalendarStyleAsMonth} />\n <Icon icon={IconType.ViewWeek} size=\"32px\" color={calendarStyle === 'Week' ? Color.Navy : Color.Grey} onClick={setCalendarStyleAsWeek} />\n </div>\n )}\n {printMonths}\n {props.showMinNightStay && props.showMultipleMonths && (\n <div className=\"diji-calendar--min-night-stay u-flex u-flex-direction-column u-flex-align-center\">\n <DaysSelectedInformer />\n <div className=\"u-marg-top--light\">\n <MinimumNightStayPill />\n </div>\n </div>\n )}\n </div>\n\n {props.showMinNightStay && !props.showMultipleMonths && (\n <div className=\"diji-calendar--min-night-stay --small u-flex u-flex-direction-column u-flex-align-center u-marg-top\">\n <DaysSelectedInformer />\n <div className=\"u-marg-top--light\">\n <MinimumNightStayPill />\n </div>\n </div>\n )}\n </DatePickerContext.Provider>\n );\n}\n"]}
|
|
1
|
+
{"version":3,"file":"DatePicker.js","sourceRoot":"/","sources":["src/components/generic/date/DatePicker.tsx"],"names":[],"mappings":"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","sourcesContent":["import * as React from 'react';\nimport { lazy, useContext, useEffect, useLayoutEffect, useMemo, useRef, useState } from 'react';\n\nimport { Color } from 'util/Color';\nimport Icon, { IconType } from 'components/generic/Icon/Icon';\n\nimport * as classNames from 'classnames';\n\nimport * as dayjs from 'dayjs';\nimport { BasketContext, DatePickerContext } from '@frontend/contexts';\nimport DatePickerMonth from 'components/generic/date/DatePickerMonth';\nimport API from 'api/BookingAPI';\nimport DataLayer, { InteractionStep, InteractionType } from 'util/DataLayer';\nimport MinimumNightStayPill from 'components/steps/MinimumNightStayPill';\nimport DaysSelectedInformer from 'components/steps/DaysSelectedInformer';\nimport { useCurrentHotel } from '@frontend/hooks';\nimport WeekViewSkeleton from 'components/generic/date/WeekViewSkeleton';\n\nconst DatePickerWeek = lazy(() => import('components/generic/date/DatePickerWeek'));\n\nexport interface DatePickerProps {\n showMonthOnLoad?: dayjs.Dayjs;\n\n selectedStartDate?: dayjs.Dayjs;\n selectedEndDate?: dayjs.Dayjs;\n\n canSelect?: boolean;\n // Includes default navigation arrows\n showArrows?: boolean;\n // Displays two side by side\n showMultipleMonths?: boolean;\n\n // Used for tight spaces\n small?: boolean;\n\n // is there support for start / end dates\n supportsMultiSelecting?: boolean;\n\n // Do or don't show mininmum night stay block\n showMinNightStay?: boolean;\n\n supportsWeek?: boolean;\n\n onDateClicked?: (date: dayjs.Dayjs) => void;\n onStartDateChanged?: (date: dayjs.Dayjs) => void;\n onEndDateChanged?: (date: dayjs.Dayjs) => void;\n}\n\ninterface DatePickerDayObject {\n value: string;\n dateObj: dayjs.Dayjs | null;\n price?: string;\n hovered: boolean;\n}\n\nenum DateRangePickingState {\n StartDate = 1,\n EndDate = 2,\n}\n\nexport default function DatePicker(props: DatePickerProps) {\n const { hotel } = useCurrentHotel();\n\n const [currentMonth, setCurrentMonth] = useState(props.showMonthOnLoad ? props.showMonthOnLoad : props.selectedStartDate ? props.selectedStartDate : dayjs());\n\n const [selectedStartDate, setSelectedStartDate] = useState(props.selectedStartDate ?? null);\n const [selectedEndDate, setSelectedEndDate] = useState(props.selectedEndDate ?? null);\n\n const [hoveringOverDate, setHoveringOverDate] = useState(null);\n\n const [pickingState, setPickingState] = useState(DateRangePickingState.StartDate);\n const [calendarStyle, setCalendarStyle] = useState<'Month' | 'Week'>(hotel?.defaultDatepickerType ? hotel?.defaultDatepickerType : 'Month');\n useEffect(() => {\n setCalendarStyle(hotel?.defaultDatepickerType ? hotel?.defaultDatepickerType : 'Month');\n }, [hotel?.defaultDatepickerType]);\n\n const [months, setMonths] = useState(props.showMultipleMonths ? [currentMonth, currentMonth.add(1, 'month')] : [currentMonth]);\n const [maxPrice, setMaxPrice] = useState(0);\n\n const basketContext = useContext(BasketContext);\n\n const onClickDate = async (newDate: dayjs.Dayjs) => {\n let newPickingState: DateRangePickingState = null;\n\n const selectedBasketRow = basketContext.selectedBasketRow;\n const adults = selectedBasketRow ? selectedBasketRow.getAdults() : 0;\n const children = selectedBasketRow ? selectedBasketRow.getChildren() : 0;\n const promoCode = selectedBasketRow ? selectedBasketRow.getPromoCode() : '';\n\n const newDatePrice = await API.Availability.getCheapestPriceForDay(newDate, adults, children, promoCode, hotel?.hotelID, false);\n\n switch (pickingState) {\n default:\n case DateRangePickingState.StartDate:\n if (newDatePrice.price || !hotel) {\n newPickingState = DateRangePickingState.EndDate;\n\n setSelectedStartDate(newDate);\n setSelectedEndDate(null);\n }\n\n break;\n case DateRangePickingState.EndDate:\n if (newDate.isBefore(selectedStartDate)) {\n setSelectedStartDate(newDate);\n newPickingState = DateRangePickingState.EndDate;\n } else {\n newPickingState = DateRangePickingState.StartDate;\n\n setHoveringOverDate(null);\n\n const nextAvailableDay = await getLastValidDay(selectedStartDate, newDate);\n\n if (newDate.isSame(selectedStartDate)) {\n setSelectedEndDate(nextAvailableDay.add(1, 'day'));\n } else {\n setSelectedEndDate(nextAvailableDay);\n }\n }\n\n break;\n }\n\n if (props.supportsMultiSelecting) {\n setPickingState(newPickingState);\n }\n };\n\n const getLastValidDay = (fromDate: dayjs.Dayjs, toDate: dayjs.Dayjs): Promise<dayjs.Dayjs> =>\n new Promise(async (resolve) => {\n const selectedBasketRow = basketContext.selectedBasketRow;\n const adults = selectedBasketRow ? selectedBasketRow.getAdults() : 0;\n const children = selectedBasketRow ? selectedBasketRow.getChildren() : 0;\n const promoCode = selectedBasketRow ? selectedBasketRow.getPromoCode() : '';\n\n const diff = toDate?.diff?.(fromDate, 'day');\n\n let nextMustBreak = false;\n for (let i = 0; i <= diff; i++) {\n const dayToCheck = fromDate.add(i, 'day');\n\n const price = await API.Availability.getCheapestPriceForDay(dayToCheck, adults, children, promoCode, hotel?.hotelID, false);\n\n if (nextMustBreak) {\n return resolve(dayToCheck.subtract(1, 'day'));\n }\n\n if (!price.price && hotel) {\n nextMustBreak = true;\n continue;\n }\n }\n\n resolve(toDate);\n });\n\n const onHoveredOverDay = (day: dayjs.Dayjs) => {\n if (selectedStartDate && !selectedEndDate) {\n getLastValidDay(selectedStartDate, day).then((lastValidDay) => {\n setHoveringOverDate(lastValidDay);\n });\n }\n };\n\n const firstUpdate = useRef();\n\n useEffect(() => {\n if (props.showMonthOnLoad) {\n setCurrentMonth(props.showMonthOnLoad);\n }\n }, [props.showMonthOnLoad]);\n\n useEffect(() => {\n if (props.showMultipleMonths) {\n setMonths([currentMonth, currentMonth.add(1, 'month')]);\n }\n }, [currentMonth, props.showMultipleMonths]);\n\n useEffect(() => {\n if (firstUpdate.current) {\n firstUpdate.current = undefined;\n return;\n }\n\n if (props.onStartDateChanged) {\n props.onStartDateChanged(selectedStartDate);\n }\n }, [selectedStartDate]);\n\n useLayoutEffect(() => {\n if (firstUpdate.current) {\n firstUpdate.current = undefined;\n return;\n }\n\n if (props.onEndDateChanged) {\n props.onEndDateChanged(selectedEndDate);\n }\n }, [selectedEndDate]);\n\n const context = {\n today: dayjs(),\n todayInUnix: dayjs().unix(),\n startDate: selectedStartDate,\n endDate: selectedEndDate,\n\n hoveredMonth: hoveringOverDate,\n maxPrice,\n\n onHoverOver: onHoveredOverDay,\n currentMonth,\n\n onDayClicked: (date: dayjs.Dayjs) => {\n onClickDate(date);\n },\n setMaxPrice,\n };\n\n const printMonths = useMemo(\n () => (\n <>\n {calendarStyle === 'Month' ? (\n <>\n <DatePickerMonth small={props.small} showingMonth={currentMonth} />\n {props.showMultipleMonths && <DatePickerMonth showingMonth={currentMonth.add(1, 'month')} />}\n </>\n ) : (\n <>\n <React.Suspense fallback={<WeekViewSkeleton />}>\n <DatePickerWeek />\n </React.Suspense>\n </>\n )}\n </>\n ),\n [currentMonth, props.showMultipleMonths, calendarStyle]\n );\n\n const calendarClassNames = classNames('diji-calendar', {\n '--single': !props.showMultipleMonths,\n '--small': props.small,\n '--week': calendarStyle === 'Week',\n });\n const previousMonthOnClick = () => {\n DataLayer.instance.sendInteraction('Show Previous Month', InteractionType.CALENDAR, InteractionStep.DATES);\n setCurrentMonth(currentMonth.subtract(1, 'month'));\n };\n const nextMonthOnClick = () => {\n DataLayer.instance.sendInteraction('Show Next Month', InteractionType.CALENDAR, InteractionStep.DATES);\n setCurrentMonth(currentMonth.add(1, 'month'));\n };\n const setCalendarStyleAsMonth = () => {\n DataLayer.instance.sendInteraction('Set Calendar Style - Month', InteractionType.CALENDAR, InteractionStep.DATES);\n setCalendarStyle('Month');\n };\n const setCalendarStyleAsWeek = () => {\n DataLayer.instance.sendInteraction('Set Calendar Style - Week', InteractionType.CALENDAR, InteractionStep.DATES);\n setCalendarStyle('Week');\n };\n\n return (\n <DatePickerContext.Provider value={context}>\n <div ref={firstUpdate} className={calendarClassNames}>\n {calendarStyle === 'Month' && (\n <div className=\"diji-calendar-navigation\">\n <Icon icon={IconType.ArrowLeft2} onClick={previousMonthOnClick} color={Color.White} backgroundColor={Color.Navy} borderRadius=\"round\" size=\"24px\" />\n <Icon icon={IconType.ArrowRight2} onClick={nextMonthOnClick} color={Color.White} backgroundColor={Color.Navy} borderRadius=\"round\" size=\"24px\" />\n </div>\n )}\n {props.supportsWeek && (\n <div className=\"diji-calendar-picker-type\">\n <Icon icon={IconType.ViewMonth} size=\"32px\" color={calendarStyle === 'Month' ? Color.Navy : Color.Grey} onClick={setCalendarStyleAsMonth} />\n <Icon icon={IconType.ViewWeek} size=\"32px\" color={calendarStyle === 'Week' ? Color.Navy : Color.Grey} onClick={setCalendarStyleAsWeek} />\n </div>\n )}\n {printMonths}\n {props.showMinNightStay && props.showMultipleMonths && (\n <div className=\"diji-calendar--min-night-stay u-flex u-flex-direction-column u-flex-align-center\">\n <DaysSelectedInformer />\n <div className=\"u-marg-top--light\">\n <MinimumNightStayPill />\n </div>\n </div>\n )}\n </div>\n\n {props.showMinNightStay && !props.showMultipleMonths && (\n <div className=\"diji-calendar--min-night-stay --small u-flex u-flex-direction-column u-flex-align-center u-marg-top\">\n <DaysSelectedInformer />\n <div className=\"u-marg-top--light\">\n <MinimumNightStayPill />\n </div>\n </div>\n )}\n </DatePickerContext.Provider>\n );\n}\n"]}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const React = require("react");
|
|
4
|
+
const react_1 = require("react");
|
|
5
|
+
const Placeholder_1 = require("components/generic/Placeholder");
|
|
6
|
+
const contexts_1 = require("@frontend/contexts");
|
|
7
|
+
const ScreenSize_1 = require("util/ScreenSize");
|
|
8
|
+
const classNames = require("classnames");
|
|
9
|
+
function randomIntFromInterval(min, max) {
|
|
10
|
+
return Math.floor(Math.random() * (max - min + 1) + min);
|
|
11
|
+
}
|
|
12
|
+
const WeekViewSkeleton = () => {
|
|
13
|
+
const [ref, setRef] = (0, react_1.useState)(null);
|
|
14
|
+
const [numbers, setNumbers] = (0, react_1.useState)(0);
|
|
15
|
+
const [width, setWidth] = (0, react_1.useState)(0);
|
|
16
|
+
const context = (0, react_1.useContext)(contexts_1.BookingEngineContext);
|
|
17
|
+
const isMobile = context.screenSize <= ScreenSize_1.default.Large;
|
|
18
|
+
const isDesktop = context.screenSize <= ScreenSize_1.default.ExtraLarge;
|
|
19
|
+
const updateValues = () => {
|
|
20
|
+
if (ref) {
|
|
21
|
+
const width = ref.getBoundingClientRect().width;
|
|
22
|
+
const numbers = Math.ceil(width / (48 + 14));
|
|
23
|
+
setNumbers(numbers);
|
|
24
|
+
setWidth(width);
|
|
25
|
+
}
|
|
26
|
+
};
|
|
27
|
+
(0, react_1.useEffect)(() => {
|
|
28
|
+
updateValues();
|
|
29
|
+
}, [ref]);
|
|
30
|
+
(0, react_1.useEffect)(() => {
|
|
31
|
+
window.addEventListener('resize', updateValues);
|
|
32
|
+
return () => {
|
|
33
|
+
window.removeEventListener('resize', updateValues);
|
|
34
|
+
};
|
|
35
|
+
}, []);
|
|
36
|
+
return (React.createElement("div", { className: classNames({ 'u-pad-left-right': isMobile }), style: {
|
|
37
|
+
maxWidth: isMobile ? 350 : isDesktop ? 392 : undefined,
|
|
38
|
+
width: '100%',
|
|
39
|
+
} },
|
|
40
|
+
React.createElement("div", { style: {
|
|
41
|
+
overflow: 'hidden',
|
|
42
|
+
} },
|
|
43
|
+
React.createElement("div", { className: "u-marg-top u-flex u-flex-justify-center" },
|
|
44
|
+
React.createElement(Placeholder_1.default, { noMarg: true, type: "text", w: 75, h: 24, rounded: "md" })),
|
|
45
|
+
React.createElement("div", { style: {
|
|
46
|
+
height: 370,
|
|
47
|
+
} },
|
|
48
|
+
React.createElement("div", { className: "u-marg-top--medium" },
|
|
49
|
+
React.createElement(Placeholder_1.default, { noMarg: true, type: "text", w: 75, h: 24, rounded: "md" })),
|
|
50
|
+
React.createElement("div", { className: "u-marg-top--light" },
|
|
51
|
+
React.createElement(Placeholder_1.default, { noMarg: true, type: "text", w: width, h: 48, rounded: "md" })),
|
|
52
|
+
React.createElement("div", { className: "u-flex u-marg-top--medium", style: {
|
|
53
|
+
gap: 14,
|
|
54
|
+
}, ref: setRef }, numbers &&
|
|
55
|
+
Array(numbers)
|
|
56
|
+
.fill(undefined)
|
|
57
|
+
.map((_, index) => (React.createElement("div", { key: index, className: "u-flex u-flex-justify-between u-flex-direction-column", style: {
|
|
58
|
+
flexShrink: 0,
|
|
59
|
+
} },
|
|
60
|
+
React.createElement("div", { style: {
|
|
61
|
+
flexGrow: 1,
|
|
62
|
+
}, className: "u-flex u-flex-flex-end u-flex-direction-column" },
|
|
63
|
+
React.createElement(Placeholder_1.default, { noMarg: true, key: index, blink: true, type: "text", w: 48, h: index === 0 ? 210 : randomIntFromInterval(10, 21) * 10, rounded: "md" })),
|
|
64
|
+
React.createElement("div", { className: "u-marg-top--light" },
|
|
65
|
+
React.createElement(Placeholder_1.default, { noMarg: true, key: index, type: "text", w: 48, h: 16 }))))))))));
|
|
66
|
+
};
|
|
67
|
+
exports.default = WeekViewSkeleton;
|
|
68
|
+
//# sourceMappingURL=WeekViewSkeleton.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WeekViewSkeleton.js","sourceRoot":"/","sources":["src/components/generic/date/WeekViewSkeleton.tsx"],"names":[],"mappings":"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","sourcesContent":["import * as React from 'react';\nimport { useContext, useEffect, useState } from 'react';\nimport Placeholder from 'components/generic/Placeholder';\nimport { BookingEngineContext } from '@frontend/contexts';\nimport ScreenSize from 'util/ScreenSize';\nimport * as classNames from 'classnames';\n\nfunction randomIntFromInterval(min: number, max: number) {\n return Math.floor(Math.random() * (max - min + 1) + min);\n}\n\nconst WeekViewSkeleton = () => {\n const [ref, setRef] = useState<HTMLDivElement>(null);\n const [numbers, setNumbers] = useState<number>(0);\n const [width, setWidth] = useState<number>(0);\n const context = useContext(BookingEngineContext);\n const isMobile = context.screenSize <= ScreenSize.Large;\n const isDesktop = context.screenSize <= ScreenSize.ExtraLarge;\n\n const updateValues = () => {\n if (ref) {\n const width = ref.getBoundingClientRect().width;\n const numbers = Math.ceil(width / (48 + 14));\n setNumbers(numbers);\n setWidth(width);\n }\n };\n\n useEffect(() => {\n updateValues();\n }, [ref]);\n\n useEffect(() => {\n window.addEventListener('resize', updateValues);\n return () => {\n window.removeEventListener('resize', updateValues);\n };\n }, []);\n return (\n <div\n className={classNames({ 'u-pad-left-right': isMobile })}\n style={{\n maxWidth: isMobile ? 350 : isDesktop ? 392 : undefined,\n width: '100%',\n }}\n >\n <div\n style={{\n overflow: 'hidden',\n }}\n >\n <div className=\"u-marg-top u-flex u-flex-justify-center\">\n <Placeholder noMarg type=\"text\" w={75} h={24} rounded=\"md\" />\n </div>\n <div\n style={{\n height: 370,\n }}\n >\n <div className=\"u-marg-top--medium\">\n <Placeholder noMarg type=\"text\" w={75} h={24} rounded=\"md\" />\n </div>\n <div className=\"u-marg-top--light\">\n <Placeholder noMarg type=\"text\" w={width} h={48} rounded=\"md\" />\n </div>\n <div\n className=\"u-flex u-marg-top--medium\"\n style={{\n gap: 14,\n }}\n ref={setRef}\n >\n {numbers &&\n Array(numbers)\n .fill(undefined)\n .map((_, index) => (\n <div\n key={index}\n className=\"u-flex u-flex-justify-between u-flex-direction-column\"\n style={{\n flexShrink: 0,\n }}\n >\n <div\n style={{\n flexGrow: 1,\n }}\n className=\"u-flex u-flex-flex-end u-flex-direction-column\"\n >\n <Placeholder\n noMarg\n key={index}\n blink={true}\n type=\"text\"\n w={48}\n h={index === 0 ? 210 : randomIntFromInterval(10, 21) * 10}\n rounded=\"md\"\n />\n </div>\n <div className=\"u-marg-top--light\">\n <Placeholder noMarg key={index} type=\"text\" w={48} h={16} />\n </div>\n </div>\n ))}\n </div>\n </div>\n </div>\n </div>\n );\n};\n\nexport default WeekViewSkeleton;\n"]}
|
|
@@ -40,8 +40,14 @@ const StepConfirmationCountrySelector = (0, react_1.forwardRef)(function InnerSt
|
|
|
40
40
|
};
|
|
41
41
|
const onInputChanged = (e) => {
|
|
42
42
|
var _a;
|
|
43
|
-
|
|
44
|
-
|
|
43
|
+
const value = ((_a = e.target.value) === null || _a === void 0 ? void 0 : _a.trim()) || '';
|
|
44
|
+
if (value) {
|
|
45
|
+
const options = filterCountries(value);
|
|
46
|
+
setOptions(options);
|
|
47
|
+
const exactCountry = options.find(({ label }) => label === value);
|
|
48
|
+
if (exactCountry) {
|
|
49
|
+
onCountryClick(exactCountry);
|
|
50
|
+
}
|
|
45
51
|
}
|
|
46
52
|
else {
|
|
47
53
|
setOptions(organizedCountries);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StepConfirmationCountrySelector.js","sourceRoot":"/","sources":["src/components/steps/confirmation/StepConfirmationCountrySelector.tsx"],"names":[],"mappings":"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","sourcesContent":["import * as classNames from 'classnames';\nimport * as React from 'react';\nimport { ChangeEvent, forwardRef, useCallback, useEffect, useImperativeHandle, useMemo, useRef, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { convertCountryCodeToFlag, CountryType, ListOfCountriesAndCodes } from 'models/CountryCodesAndNumbers';\nimport { Translation } from 'translations/Translation';\nimport Icon, { IconType } from 'components/generic/Icon/Icon';\n\nimport './StepConfirmationCountrySelector.global.scss';\nimport { useAutoFocusOnSelect } from '../../../hooks/AutoFocusOnSelect';\nimport { Select } from '../../generic/Select/Select';\n\ninterface StepConfirmationCountrySelectorProps {\n validationStatus?: 'success' | 'error';\n name?: string;\n value?: string; // example: Australia\n onChange?: (e: ChangeEvent<HTMLInputElement>) => void;\n disabled?: boolean;\n}\n\nconst StepConfirmationCountrySelector = forwardRef<HTMLInputElement, StepConfirmationCountrySelectorProps>(function InnerStepConfirmationCountrySelector(props, ref) {\n const inputRef = useRef<HTMLInputElement>(null);\n useImperativeHandle(ref, () => inputRef.current);\n const { onDropdownClosed, onItemSelected, onTriggerClicked, isDropdownOpen, isFocused } = useAutoFocusOnSelect({\n ref: inputRef.current,\n focusOnSelected: false,\n });\n\n const { validationStatus, name, onChange, value = '' } = props;\n const [inputValue, setInputValue] = useState<string>(value);\n\n useEffect(() => {\n setInputValue(value);\n }, [value]);\n const organizedCountries: CountryType[] = useMemo(() => {\n return ListOfCountriesAndCodes.sort((a, b) => {\n return `${(a.suggested ? '000' : '') + a.label}`.localeCompare(`${(b.suggested ? '000' : '') + b.label}`);\n });\n }, [ListOfCountriesAndCodes]);\n const filterCountries = useCallback(\n (inputValue: string): CountryType[] => {\n return organizedCountries.filter(({ label }) => label.toUpperCase().includes(inputValue.toUpperCase()));\n },\n [organizedCountries]\n );\n const [options, setOptions] = useState<CountryType[]>(filterCountries(value));\n\n const { t } = useTranslation();\n\n const container = useRef(null);\n\n const emptyValue = () => {\n onChange?.({ target: { name, value: '' } } as any);\n setInputValue('');\n setOptions(organizedCountries);\n };\n\n const onInputChanged = (e: ChangeEvent<HTMLInputElement>) => {\n if (e.target.value?.trim()) {\n setOptions(filterCountries(e.target.value));\n } else {\n setOptions(organizedCountries);\n }\n setInputValue(e.target.value);\n };\n\n const fieldClasses = classNames('rs-enhanced-country-field', {\n [`--${validationStatus}`]: !!validationStatus,\n '--focused': isFocused,\n '--disabled': props.disabled,\n });\n\n const onCountryClick = (country: CountryType): void => {\n setInputValue(country.label);\n onItemSelected();\n onChange?.({ target: { name, value: country.label } } as any);\n };\n\n const getOption = (key: CountryType['label']): CountryType => {\n return options.find(({ label }) => label === key);\n };\n\n const onClose = (e: MouseEvent) => {\n onDropdownClosed(e);\n if (organizedCountries.every(({ label }) => label !== inputRef.current?.value)) {\n emptyValue();\n }\n };\n\n return (\n <div className={fieldClasses}>\n <div className=\"rs-enhanced-country-field--anchor\" ref={container}></div>\n\n <div className=\"rs-enhanced-country-field--search\">\n <input disabled={props.disabled} ref={inputRef} placeholder={t(Translation.Step.Confirmation.Inputs.Country) + ' *'} onChange={onInputChanged} value={inputValue} />\n <div\n onClick={() => {\n emptyValue();\n inputRef.current?.focus();\n }}\n className={classNames('rs-enhanced-country-field--close', {\n '--hide': !inputValue,\n })}\n >\n <Icon icon={IconType.Close} />\n </div>\n <div className=\"rs-enhanced-country-field--country\" onClick={onTriggerClicked}>\n <Icon icon={IconType.Dropdown} />\n </div>\n </div>\n\n <Select<CountryType, 'label'>\n offset={[0, 21]}\n open={isDropdownOpen}\n onClose={onClose}\n target={container.current}\n options={options}\n value={value}\n onChange={(value) => onCountryClick(getOption(value))}\n keyName=\"label\"\n renderOption={(country) => (\n <div className=\"rs-enhanced-country-field--suggest-list-country\">\n <div className=\"rs-enhanced-country-field--suggest-list-country-icon\">{convertCountryCodeToFlag(country.code)}</div>\n <div className=\"rs-enhanced-country-field--suggest-list-country-name\">\n {country.label} ({country.code})\n </div>\n </div>\n )}\n />\n </div>\n );\n});\n\nexport default StepConfirmationCountrySelector;\n"]}
|
|
1
|
+
{"version":3,"file":"StepConfirmationCountrySelector.js","sourceRoot":"/","sources":["src/components/steps/confirmation/StepConfirmationCountrySelector.tsx"],"names":[],"mappings":"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","sourcesContent":["import * as classNames from 'classnames';\nimport * as React from 'react';\nimport { ChangeEvent, forwardRef, useCallback, useEffect, useImperativeHandle, useMemo, useRef, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { convertCountryCodeToFlag, CountryType, ListOfCountriesAndCodes } from 'models/CountryCodesAndNumbers';\nimport { Translation } from 'translations/Translation';\nimport Icon, { IconType } from 'components/generic/Icon/Icon';\n\nimport './StepConfirmationCountrySelector.global.scss';\nimport { useAutoFocusOnSelect } from '../../../hooks/AutoFocusOnSelect';\nimport { Select } from '../../generic/Select/Select';\n\ninterface StepConfirmationCountrySelectorProps {\n validationStatus?: 'success' | 'error';\n name?: string;\n value?: string; // example: Australia\n onChange?: (e: ChangeEvent<HTMLInputElement>) => void;\n disabled?: boolean;\n}\n\nconst StepConfirmationCountrySelector = forwardRef<HTMLInputElement, StepConfirmationCountrySelectorProps>(function InnerStepConfirmationCountrySelector(props, ref) {\n const inputRef = useRef<HTMLInputElement>(null);\n useImperativeHandle(ref, () => inputRef.current);\n const { onDropdownClosed, onItemSelected, onTriggerClicked, isDropdownOpen, isFocused } = useAutoFocusOnSelect({\n ref: inputRef.current,\n focusOnSelected: false,\n });\n\n const { validationStatus, name, onChange, value = '' } = props;\n const [inputValue, setInputValue] = useState<string>(value);\n\n useEffect(() => {\n setInputValue(value);\n }, [value]);\n const organizedCountries: CountryType[] = useMemo(() => {\n return ListOfCountriesAndCodes.sort((a, b) => {\n return `${(a.suggested ? '000' : '') + a.label}`.localeCompare(`${(b.suggested ? '000' : '') + b.label}`);\n });\n }, [ListOfCountriesAndCodes]);\n const filterCountries = useCallback(\n (inputValue: string): CountryType[] => {\n return organizedCountries.filter(({ label }) => label.toUpperCase().includes(inputValue.toUpperCase()));\n },\n [organizedCountries]\n );\n const [options, setOptions] = useState<CountryType[]>(filterCountries(value));\n\n const { t } = useTranslation();\n\n const container = useRef(null);\n\n const emptyValue = () => {\n onChange?.({ target: { name, value: '' } } as any);\n setInputValue('');\n setOptions(organizedCountries);\n };\n\n const onInputChanged = (e: ChangeEvent<HTMLInputElement>) => {\n const value = e.target.value?.trim() || '';\n if (value) {\n const options = filterCountries(value);\n setOptions(options);\n const exactCountry = options.find(({ label }) => label === value);\n if (exactCountry) {\n onCountryClick(exactCountry);\n }\n } else {\n setOptions(organizedCountries);\n }\n setInputValue(e.target.value);\n };\n\n const fieldClasses = classNames('rs-enhanced-country-field', {\n [`--${validationStatus}`]: !!validationStatus,\n '--focused': isFocused,\n '--disabled': props.disabled,\n });\n\n const onCountryClick = (country: CountryType): void => {\n setInputValue(country.label);\n onItemSelected();\n onChange?.({ target: { name, value: country.label } } as any);\n };\n\n const getOption = (key: CountryType['label']): CountryType => {\n return options.find(({ label }) => label === key);\n };\n\n const onClose = (e: MouseEvent) => {\n onDropdownClosed(e);\n if (organizedCountries.every(({ label }) => label !== inputRef.current?.value)) {\n emptyValue();\n }\n };\n\n return (\n <div className={fieldClasses}>\n <div className=\"rs-enhanced-country-field--anchor\" ref={container}></div>\n\n <div className=\"rs-enhanced-country-field--search\">\n <input disabled={props.disabled} ref={inputRef} placeholder={t(Translation.Step.Confirmation.Inputs.Country) + ' *'} onChange={onInputChanged} value={inputValue} />\n <div\n onClick={() => {\n emptyValue();\n inputRef.current?.focus();\n }}\n className={classNames('rs-enhanced-country-field--close', {\n '--hide': !inputValue,\n })}\n >\n <Icon icon={IconType.Close} />\n </div>\n <div className=\"rs-enhanced-country-field--country\" onClick={onTriggerClicked}>\n <Icon icon={IconType.Dropdown} />\n </div>\n </div>\n\n <Select<CountryType, 'label'>\n offset={[0, 21]}\n open={isDropdownOpen}\n onClose={onClose}\n target={container.current}\n options={options}\n value={value}\n onChange={(value) => onCountryClick(getOption(value))}\n keyName=\"label\"\n renderOption={(country) => (\n <div className=\"rs-enhanced-country-field--suggest-list-country\">\n <div className=\"rs-enhanced-country-field--suggest-list-country-icon\">{convertCountryCodeToFlag(country.code)}</div>\n <div className=\"rs-enhanced-country-field--suggest-list-country-name\">\n {country.label} ({country.code})\n </div>\n </div>\n )}\n />\n </div>\n );\n});\n\nexport default StepConfirmationCountrySelector;\n"]}
|
|
@@ -90,6 +90,7 @@ function MemberSignInModal(props) {
|
|
|
90
90
|
const [isLoading, setIsLoading] = (0, react_1.useState)(false);
|
|
91
91
|
const [showErrors, setShowErrors] = (0, react_1.useState)(false);
|
|
92
92
|
const [captchaScriptLoaded, setCaptchaScriptLoaded] = (0, react_1.useState)(false);
|
|
93
|
+
const [captchaRendered, setCaptchaRendered] = (0, react_1.useState)(false);
|
|
93
94
|
const [reCaptchaSecret, setReCaptchaSecret] = (0, react_1.useState)();
|
|
94
95
|
const [captchaError, setCaptchaError] = (0, react_1.useState)();
|
|
95
96
|
const captchaRef = (0, react_1.useRef)(null);
|
|
@@ -111,7 +112,7 @@ function MemberSignInModal(props) {
|
|
|
111
112
|
};
|
|
112
113
|
}, [hotel]);
|
|
113
114
|
(0, react_1.useEffect)(() => {
|
|
114
|
-
if (shouldLoadCaptcha && captchaScriptLoaded &&
|
|
115
|
+
if (shouldLoadCaptcha && captchaScriptLoaded && (captchaRef === null || captchaRef === void 0 ? void 0 : captchaRef.current) && !captchaRendered && props.isOpen) {
|
|
115
116
|
try {
|
|
116
117
|
setTimeout(() => {
|
|
117
118
|
const captchaCallback = (secret) => {
|
|
@@ -123,17 +124,20 @@ function MemberSignInModal(props) {
|
|
|
123
124
|
sitekey: hotel.googleReCaptcha.siteKey,
|
|
124
125
|
callback: captchaCallback,
|
|
125
126
|
});
|
|
127
|
+
setCaptchaRendered(true);
|
|
126
128
|
}, 5);
|
|
127
129
|
}
|
|
128
130
|
catch (ex) {
|
|
131
|
+
console.log(ex);
|
|
129
132
|
Sentry.captureException(ex);
|
|
130
133
|
}
|
|
131
134
|
}
|
|
132
|
-
}, [props.isOpen, captchaScriptLoaded, captchaRef, captchaRef === null || captchaRef === void 0 ? void 0 : captchaRef.current]);
|
|
135
|
+
}, [props.isOpen, captchaScriptLoaded, captchaRef, captchaRef === null || captchaRef === void 0 ? void 0 : captchaRef.current, captchaRendered]);
|
|
133
136
|
(0, react_1.useEffect)(() => {
|
|
134
137
|
if (!props.isOpen) {
|
|
135
138
|
setReCaptchaSecret(null);
|
|
136
139
|
setCaptchaError(null);
|
|
140
|
+
setCaptchaRendered(false);
|
|
137
141
|
}
|
|
138
142
|
}, [props.isOpen]);
|
|
139
143
|
const getValidationClass = (name) => {
|