@roomstay/frontend 2.0.11 → 2.0.12
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/main.bundle.js +1 -1
- package/dist/src/components/generic/date/DatePicker.js +2 -1
- package/dist/src/components/generic/date/DatePicker.js.map +1 -1
- package/dist/src/hooks/VGSHooks.js +1 -1
- package/dist/src/hooks/VGSHooks.js.map +1 -1
- package/dist/test.bundle.js +1 -1
- package/dist/vendors.bundle.js +1 -1
- package/package.json +1 -1
|
@@ -24,6 +24,7 @@ const MinimumNightStayPill_1 = require("components/steps/MinimumNightStayPill");
|
|
|
24
24
|
const DaysSelectedInformer_1 = require("components/steps/DaysSelectedInformer");
|
|
25
25
|
const hooks_1 = require("@frontend/hooks");
|
|
26
26
|
const DatePickerTypeFeature_1 = require("providers/feature/DatePickerTypeFeature");
|
|
27
|
+
const WeekViewSkeleton_1 = require("./WeekViewSkeleton");
|
|
27
28
|
const DatePickerWeek = (0, react_1.lazy)(() => Promise.resolve().then(() => require('components/generic/date/DatePickerWeek')));
|
|
28
29
|
var DateRangePickingState;
|
|
29
30
|
(function (DateRangePickingState) {
|
|
@@ -163,7 +164,7 @@ function DatePicker(props) {
|
|
|
163
164
|
const printMonths = (0, react_1.useMemo)(() => (React.createElement(React.Fragment, null, calendarStyle === 'Month' ? (React.createElement(React.Fragment, null,
|
|
164
165
|
React.createElement(DatePickerMonth_1.default, { small: props.small, showingMonth: currentMonth }),
|
|
165
166
|
props.showMultipleMonths && React.createElement(DatePickerMonth_1.default, { showingMonth: currentMonth.add(1, 'month') }))) : (React.createElement(React.Fragment, null,
|
|
166
|
-
React.createElement(React.Suspense, { fallback:
|
|
167
|
+
React.createElement(React.Suspense, { fallback: React.createElement(WeekViewSkeleton_1.default, null) },
|
|
167
168
|
React.createElement(DatePickerWeek, null)))))), [currentMonth, props.showMultipleMonths, calendarStyle]);
|
|
168
169
|
const calendarClassNames = classNames('diji-calendar', {
|
|
169
170
|
'--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';\nimport DatePickerTypeFeature from 'providers/feature/DatePickerTypeFeature';\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 // TODO: Perhaps refactor this later to not depend on non-state items\n useEffect(() => {\n if (DatePickerTypeFeature?.isActive() && props.supportsWeek) {\n setCalendarStyle('Week');\n }\n }, [DatePickerTypeFeature?.isActive()]);\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":";;;;;;;;;;;AAAA,+BAA+B;AAE/B,sCAAmC;AACnC,uDAA8D;AAC9D,iCAAgG;AAEhG,yCAAyC;AAEzC,+BAA+B;AAC/B,iDAAuD;AACvD,6EAAsE;AACtE,+CAAiC;AACjC,iDAAmD;AACnD,8CAA6E;AAC7E,gFAAyE;AACzE,gFAAyE;AACzE,2CAAkD;AAClD,mFAA4E;AAC5E,yDAAkD;AAElD,MAAM,cAAc,GAAG,IAAA,YAAI,EAAC,GAAG,EAAE,sCAAQ,wCAAwC,EAAC,CAAC,CAAC;AAqCpF,IAAK,qBAGJ;AAHD,WAAK,qBAAqB;IACtB,2EAAa,CAAA;IACb,uEAAW,CAAA;AACf,CAAC,EAHI,qBAAqB,KAArB,qBAAqB,QAGzB;AAED,SAAwB,UAAU,CAAC,KAAsB;;IACrD,MAAM,EAAE,KAAK,EAAE,GAAG,IAAA,uBAAe,GAAE,CAAC;IAEpC,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,IAAA,gBAAQ,EAAC,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;IAE9J,MAAM,CAAC,iBAAiB,EAAE,oBAAoB,CAAC,GAAG,IAAA,gBAAQ,EAAC,MAAA,KAAK,CAAC,iBAAiB,mCAAI,IAAI,CAAC,CAAC;IAC5F,MAAM,CAAC,eAAe,EAAE,kBAAkB,CAAC,GAAG,IAAA,gBAAQ,EAAC,MAAA,KAAK,CAAC,eAAe,mCAAI,IAAI,CAAC,CAAC;IAEtF,MAAM,CAAC,gBAAgB,EAAE,mBAAmB,CAAC,GAAG,IAAA,gBAAQ,EAAC,IAAI,CAAC,CAAC;IAE/D,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,IAAA,gBAAQ,EAAC,qBAAqB,CAAC,SAAS,CAAC,CAAC;IAClF,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,IAAA,gBAAQ,EAAmB,CAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,qBAAqB,EAAC,CAAC,CAAC,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,qBAAqB,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IAC5I,IAAA,iBAAS,EAAC,GAAG,EAAE;QACX,gBAAgB,CAAC,CAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,qBAAqB,EAAC,CAAC,CAAC,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,qBAAqB,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IAC5F,CAAC,EAAE,CAAC,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,qBAAqB,CAAC,CAAC,CAAC;IAEnC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,IAAA,gBAAQ,EAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,YAAY,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC;IAC/H,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,IAAA,gBAAQ,EAAC,CAAC,CAAC,CAAC;IAE5C,MAAM,aAAa,GAAG,IAAA,kBAAU,EAAC,wBAAa,CAAC,CAAC;IAEhD,MAAM,WAAW,GAAG,CAAO,OAAoB,EAAE,EAAE;QAC/C,IAAI,eAAe,GAA0B,IAAI,CAAC;QAElD,MAAM,iBAAiB,GAAG,aAAa,CAAC,iBAAiB,CAAC;QAC1D,MAAM,MAAM,GAAG,iBAAiB,CAAC,CAAC,CAAC,iBAAiB,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QACrE,MAAM,QAAQ,GAAG,iBAAiB,CAAC,CAAC,CAAC,iBAAiB,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QACzE,MAAM,SAAS,GAAG,iBAAiB,CAAC,CAAC,CAAC,iBAAiB,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAE5E,MAAM,YAAY,GAAG,MAAM,oBAAG,CAAC,YAAY,CAAC,sBAAsB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,OAAO,EAAE,KAAK,CAAC,CAAC;QAEhI,QAAQ,YAAY,EAAE;YAClB,QAAQ;YACR,KAAK,qBAAqB,CAAC,SAAS;gBAChC,IAAI,YAAY,CAAC,KAAK,IAAI,CAAC,KAAK,EAAE;oBAC9B,eAAe,GAAG,qBAAqB,CAAC,OAAO,CAAC;oBAEhD,oBAAoB,CAAC,OAAO,CAAC,CAAC;oBAC9B,kBAAkB,CAAC,IAAI,CAAC,CAAC;iBAC5B;gBAED,MAAM;YACV,KAAK,qBAAqB,CAAC,OAAO;gBAC9B,IAAI,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAC,EAAE;oBACrC,oBAAoB,CAAC,OAAO,CAAC,CAAC;oBAC9B,eAAe,GAAG,qBAAqB,CAAC,OAAO,CAAC;iBACnD;qBAAM;oBACH,eAAe,GAAG,qBAAqB,CAAC,SAAS,CAAC;oBAElD,mBAAmB,CAAC,IAAI,CAAC,CAAC;oBAE1B,MAAM,gBAAgB,GAAG,MAAM,eAAe,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC;oBAE3E,IAAI,OAAO,CAAC,MAAM,CAAC,iBAAiB,CAAC,EAAE;wBACnC,kBAAkB,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;qBACtD;yBAAM;wBACH,kBAAkB,CAAC,gBAAgB,CAAC,CAAC;qBACxC;iBACJ;gBAED,MAAM;SACb;QAED,IAAI,KAAK,CAAC,sBAAsB,EAAE;YAC9B,eAAe,CAAC,eAAe,CAAC,CAAC;SACpC;IACL,CAAC,CAAA,CAAC;IAEF,MAAM,eAAe,GAAG,CAAC,QAAqB,EAAE,MAAmB,EAAwB,EAAE,CACzF,IAAI,OAAO,CAAC,CAAO,OAAO,EAAE,EAAE;;QAC1B,MAAM,iBAAiB,GAAG,aAAa,CAAC,iBAAiB,CAAC;QAC1D,MAAM,MAAM,GAAG,iBAAiB,CAAC,CAAC,CAAC,iBAAiB,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QACrE,MAAM,QAAQ,GAAG,iBAAiB,CAAC,CAAC,CAAC,iBAAiB,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QACzE,MAAM,SAAS,GAAG,iBAAiB,CAAC,CAAC,CAAC,iBAAiB,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAE5E,MAAM,IAAI,GAAG,MAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,IAAI,uDAAG,QAAQ,EAAE,KAAK,CAAC,CAAC;QAE7C,IAAI,aAAa,GAAG,KAAK,CAAC;QAC1B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE,EAAE;YAC5B,MAAM,UAAU,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;YAE1C,MAAM,KAAK,GAAG,MAAM,oBAAG,CAAC,YAAY,CAAC,sBAAsB,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,OAAO,EAAE,KAAK,CAAC,CAAC;YAE5H,IAAI,aAAa,EAAE;gBACf,OAAO,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;aACjD;YAED,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,KAAK,EAAE;gBACvB,aAAa,GAAG,IAAI,CAAC;gBACrB,SAAS;aACZ;SACJ;QAED,OAAO,CAAC,MAAM,CAAC,CAAC;IACpB,CAAC,CAAA,CAAC,CAAC;IAEP,MAAM,gBAAgB,GAAG,CAAC,GAAgB,EAAE,EAAE;QAC1C,IAAI,iBAAiB,IAAI,CAAC,eAAe,EAAE;YACvC,eAAe,CAAC,iBAAiB,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,YAAY,EAAE,EAAE;gBAC1D,mBAAmB,CAAC,YAAY,CAAC,CAAC;YACtC,CAAC,CAAC,CAAC;SACN;IACL,CAAC,CAAC;IAEF,MAAM,WAAW,GAAG,IAAA,cAAM,GAAE,CAAC;IAE7B,qEAAqE;IACrE,IAAA,iBAAS,EAAC,GAAG,EAAE;QACX,IAAI,CAAA,+BAAqB,aAArB,+BAAqB,uBAArB,+BAAqB,CAAE,QAAQ,EAAE,KAAI,KAAK,CAAC,YAAY,EAAE;YACzD,gBAAgB,CAAC,MAAM,CAAC,CAAC;SAC5B;IACL,CAAC,EAAE,CAAC,+BAAqB,aAArB,+BAAqB,uBAArB,+BAAqB,CAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;IAExC,IAAA,iBAAS,EAAC,GAAG,EAAE;QACX,IAAI,KAAK,CAAC,eAAe,EAAE;YACvB,eAAe,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;SAC1C;IACL,CAAC,EAAE,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC;IAE5B,IAAA,iBAAS,EAAC,GAAG,EAAE;QACX,IAAI,KAAK,CAAC,kBAAkB,EAAE;YAC1B,SAAS,CAAC,CAAC,YAAY,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;SAC3D;IACL,CAAC,EAAE,CAAC,YAAY,EAAE,KAAK,CAAC,kBAAkB,CAAC,CAAC,CAAC;IAE7C,IAAA,iBAAS,EAAC,GAAG,EAAE;QACX,IAAI,WAAW,CAAC,OAAO,EAAE;YACrB,WAAW,CAAC,OAAO,GAAG,SAAS,CAAC;YAChC,OAAO;SACV;QAED,IAAI,KAAK,CAAC,kBAAkB,EAAE;YAC1B,KAAK,CAAC,kBAAkB,CAAC,iBAAiB,CAAC,CAAC;SAC/C;IACL,CAAC,EAAE,CAAC,iBAAiB,CAAC,CAAC,CAAC;IAExB,IAAA,uBAAe,EAAC,GAAG,EAAE;QACjB,IAAI,WAAW,CAAC,OAAO,EAAE;YACrB,WAAW,CAAC,OAAO,GAAG,SAAS,CAAC;YAChC,OAAO;SACV;QAED,IAAI,KAAK,CAAC,gBAAgB,EAAE;YACxB,KAAK,CAAC,gBAAgB,CAAC,eAAe,CAAC,CAAC;SAC3C;IACL,CAAC,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC;IAEtB,MAAM,OAAO,GAAG;QACZ,KAAK,EAAE,KAAK,EAAE;QACd,WAAW,EAAE,KAAK,EAAE,CAAC,IAAI,EAAE;QAC3B,SAAS,EAAE,iBAAiB;QAC5B,OAAO,EAAE,eAAe;QAExB,YAAY,EAAE,gBAAgB;QAC9B,QAAQ;QAER,WAAW,EAAE,gBAAgB;QAC7B,YAAY;QAEZ,YAAY,EAAE,CAAC,IAAiB,EAAE,EAAE;YAChC,WAAW,CAAC,IAAI,CAAC,CAAC;QACtB,CAAC;QACD,WAAW;KACd,CAAC;IAEF,MAAM,WAAW,GAAG,IAAA,eAAO,EACvB,GAAG,EAAE,CAAC,CACF,0CACK,aAAa,KAAK,OAAO,CAAC,CAAC,CAAC,CACzB;QACI,oBAAC,yBAAe,IAAC,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,YAAY,EAAE,YAAY,GAAI;QAClE,KAAK,CAAC,kBAAkB,IAAI,oBAAC,yBAAe,IAAC,YAAY,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,GAAI,CAC7F,CACN,CAAC,CAAC,CAAC,CACA;QACI,oBAAC,KAAK,CAAC,QAAQ,IAAC,QAAQ,EAAE,oBAAC,0BAAgB,OAAG;YAC1C,oBAAC,cAAc,OAAG,CACL,CAClB,CACN,CACF,CACN,EACD,CAAC,YAAY,EAAE,KAAK,CAAC,kBAAkB,EAAE,aAAa,CAAC,CAC1D,CAAC;IAEF,MAAM,kBAAkB,GAAG,UAAU,CAAC,eAAe,EAAE;QACnD,UAAU,EAAE,CAAC,KAAK,CAAC,kBAAkB;QACrC,SAAS,EAAE,KAAK,CAAC,KAAK;QACtB,QAAQ,EAAE,aAAa,KAAK,MAAM;KACrC,CAAC,CAAC;IACH,MAAM,oBAAoB,GAAG,GAAG,EAAE;QAC9B,mBAAS,CAAC,QAAQ,CAAC,eAAe,CAAC,qBAAqB,EAAE,2BAAe,CAAC,QAAQ,EAAE,2BAAe,CAAC,KAAK,CAAC,CAAC;QAC3G,eAAe,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;IACvD,CAAC,CAAC;IACF,MAAM,gBAAgB,GAAG,GAAG,EAAE;QAC1B,mBAAS,CAAC,QAAQ,CAAC,eAAe,CAAC,iBAAiB,EAAE,2BAAe,CAAC,QAAQ,EAAE,2BAAe,CAAC,KAAK,CAAC,CAAC;QACvG,eAAe,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;IAClD,CAAC,CAAC;IACF,MAAM,uBAAuB,GAAG,GAAG,EAAE;QACjC,mBAAS,CAAC,QAAQ,CAAC,eAAe,CAAC,4BAA4B,EAAE,2BAAe,CAAC,QAAQ,EAAE,2BAAe,CAAC,KAAK,CAAC,CAAC;QAClH,gBAAgB,CAAC,OAAO,CAAC,CAAC;IAC9B,CAAC,CAAC;IACF,MAAM,sBAAsB,GAAG,GAAG,EAAE;QAChC,mBAAS,CAAC,QAAQ,CAAC,eAAe,CAAC,2BAA2B,EAAE,2BAAe,CAAC,QAAQ,EAAE,2BAAe,CAAC,KAAK,CAAC,CAAC;QACjH,gBAAgB,CAAC,MAAM,CAAC,CAAC;IAC7B,CAAC,CAAC;IAEF,OAAO,CACH,oBAAC,4BAAiB,CAAC,QAAQ,IAAC,KAAK,EAAE,OAAO;QACtC,6BAAK,GAAG,EAAE,WAAW,EAAE,SAAS,EAAE,kBAAkB;YAC/C,aAAa,KAAK,OAAO,IAAI,CAC1B,6BAAK,SAAS,EAAC,0BAA0B;gBACrC,oBAAC,cAAI,IAAC,IAAI,EAAE,eAAQ,CAAC,UAAU,EAAE,OAAO,EAAE,oBAAoB,EAAE,KAAK,EAAE,aAAK,CAAC,KAAK,EAAE,eAAe,EAAE,aAAK,CAAC,IAAI,EAAE,YAAY,EAAC,OAAO,EAAC,IAAI,EAAC,MAAM,GAAG;gBACpJ,oBAAC,cAAI,IAAC,IAAI,EAAE,eAAQ,CAAC,WAAW,EAAE,OAAO,EAAE,gBAAgB,EAAE,KAAK,EAAE,aAAK,CAAC,KAAK,EAAE,eAAe,EAAE,aAAK,CAAC,IAAI,EAAE,YAAY,EAAC,OAAO,EAAC,IAAI,EAAC,MAAM,GAAG,CAC/I,CACT;YACA,KAAK,CAAC,YAAY,IAAI,CACnB,6BAAK,SAAS,EAAC,2BAA2B;gBACtC,oBAAC,cAAI,IAAC,IAAI,EAAE,eAAQ,CAAC,SAAS,EAAE,IAAI,EAAC,MAAM,EAAC,KAAK,EAAE,aAAa,KAAK,OAAO,CAAC,CAAC,CAAC,aAAK,CAAC,IAAI,CAAC,CAAC,CAAC,aAAK,CAAC,IAAI,EAAE,OAAO,EAAE,uBAAuB,GAAI;gBAC5I,oBAAC,cAAI,IAAC,IAAI,EAAE,eAAQ,CAAC,QAAQ,EAAE,IAAI,EAAC,MAAM,EAAC,KAAK,EAAE,aAAa,KAAK,MAAM,CAAC,CAAC,CAAC,aAAK,CAAC,IAAI,CAAC,CAAC,CAAC,aAAK,CAAC,IAAI,EAAE,OAAO,EAAE,sBAAsB,GAAI,CACvI,CACT;YACA,WAAW;YACX,KAAK,CAAC,gBAAgB,IAAI,KAAK,CAAC,kBAAkB,IAAI,CACnD,6BAAK,SAAS,EAAC,kFAAkF;gBAC7F,oBAAC,8BAAoB,OAAG;gBACxB,6BAAK,SAAS,EAAC,mBAAmB;oBAC9B,oBAAC,8BAAoB,OAAG,CACtB,CACJ,CACT,CACC;QAEL,KAAK,CAAC,gBAAgB,IAAI,CAAC,KAAK,CAAC,kBAAkB,IAAI,CACpD,6BAAK,SAAS,EAAC,qGAAqG;YAChH,oBAAC,8BAAoB,OAAG;YACxB,6BAAK,SAAS,EAAC,mBAAmB;gBAC9B,oBAAC,8BAAoB,OAAG,CACtB,CACJ,CACT,CACwB,CAChC,CAAC;AACN,CAAC;AAnPD,6BAmPC","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';\nimport DatePickerTypeFeature from 'providers/feature/DatePickerTypeFeature';\nimport WeekViewSkeleton from './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 // TODO: Perhaps refactor this later to not depend on non-state items\n useEffect(() => {\n if (DatePickerTypeFeature?.isActive() && props.supportsWeek) {\n setCalendarStyle('Week');\n }\n }, [DatePickerTypeFeature?.isActive()]);\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"]}
|
|
@@ -103,7 +103,7 @@ const useVgsCollect = (fields) => {
|
|
|
103
103
|
const config = fields[index];
|
|
104
104
|
if (!field)
|
|
105
105
|
return '';
|
|
106
|
-
return classNames('c-input', extendedClasses, {
|
|
106
|
+
return classNames('c-input', 'c-input--vgs', extendedClasses, {
|
|
107
107
|
'--selected': field.isFocused,
|
|
108
108
|
'--success': field.isValid !== null && field.isValid,
|
|
109
109
|
'--error': field.isValid !== null && !field.isValid,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VGSHooks.js","sourceRoot":"/","sources":["src/hooks/VGSHooks.tsx"],"names":[],"mappings":"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","sourcesContent":["import { Auth } from '@aws-amplify/auth';\nimport { ECardType } from 'models/PaymentCard';\nimport RoomstayThemeEngine from 'providers/RoomstayThemeEngine';\nimport { useEffect, useRef, useState } from 'react';\nimport * as classNames from 'classnames';\nimport { useCurrentHotel } from './CurrentHotelHook';\n\nlet vgsShowLoader: Promise<any> | null = null;\nlet VGSShow: any;\n\nlet vgsCollectLoader: Promise<any> | null = null;\n\ndeclare global {\n interface Window {\n VGSCollect: any;\n }\n}\n\nwindow.VGSCollect = window.VGSCollect || {};\n\ntype UseVgsShowProps = {\n name: string;\n value: string;\n\n styles?: {};\n};\n\nexport const useVgsShow = (props: UseVgsShowProps) => {\n const { hotel } = useCurrentHotel();\n\n const [randomId, setRandomId] = useState(btoa((Math.random() * Math.random() * Date.now()).toString()).replace(/\\=/gi, ''));\n const [isLoading, setIsLoading] = useState(false);\n\n const targetRef = useRef(null);\n\n useEffect(() => {\n if (vgsShowLoader === null) {\n vgsShowLoader = (async () => {\n try {\n await RoomstayThemeEngine.loadScript('https://js.verygoodvault.com/vgs-show/2.0.2/show.js', 'vgs-show');\n\n // TODO: Load this ID dynamically\n VGSShow = window.VGSShow.create(hotel.vgsVaultName, (state: any) => {}).setEnvironment('live');\n } catch (ex) {\n console.error('Unable to load vgs-show ' + ex.message);\n }\n })();\n }\n }, []);\n\n useEffect(() => {\n let cancelled = false;\n\n if (VGSShow && targetRef?.current) {\n targetRef.current.classList.add(randomId);\n setIsLoading(true);\n\n Auth.currentAuthenticatedUser().then((cognitoData) => {\n const jwtToken = cognitoData.signInUserSession.idToken.jwtToken;\n\n const revealer = VGSShow.request({\n name: props.name,\n method: 'POST',\n path: '/members/vgs-auth',\n payload: {\n [props.name]: `${props.value}`,\n },\n headers: {\n Authorization: jwtToken,\n },\n serializers: [VGSShow.SERIALIZERS.replace('(\\\\d{4})(\\\\d{4})(\\\\d{4})(\\\\d{4})', '$1 $2 $3 $4')],\n htmlWrapper: 'text',\n jsonPathSelector: `${props.name}`,\n });\n\n // TODO: Handle failure on reveal\n revealer.on('revealSuccess', () => {\n setIsLoading(false);\n });\n\n revealer.on('revealFail', () => {\n setIsLoading(false);\n });\n\n targetRef.current.innerHTML = '';\n revealer.render(`.${randomId}`, props.styles);\n });\n }\n\n return () => {\n cancelled = true;\n };\n }, [VGSShow, targetRef, props.name, props.value]);\n\n return { targetRef, isLoading };\n};\n\ntype VGSCollectProps = {\n name: string;\n type: 'card-expiration-date' | 'text' | 'card-number' | 'card-security-code';\n label: string;\n\n vgsProps: {\n validations?: ('required' | 'validCardNumber' | 'validCardExpirationDate' | 'validCardSecurityCode')[];\n disabled?: boolean;\n css: object;\n placeholder?: string;\n\n [name: string]: any;\n };\n};\n\ntype VGSCollectInputState = {\n name: string;\n label: string;\n type: string;\n\n isFocused: boolean;\n isValid: boolean;\n\n vgsInput: any;\n\n cardType?: ECardType;\n};\n\nexport const useVgsCollect = (fields: VGSCollectProps[]) => {\n const { hotel } = useCurrentHotel();\n\n const refs = fields.map(() => {\n return useRef();\n });\n\n const getDefaultStateFromFields: () => VGSCollectInputState[] = () => {\n return fields.map((field) => {\n return {\n isFocused: null,\n isValid: null,\n\n name: field.name,\n label: field.label,\n type: field.type,\n\n vgsInput: null,\n };\n });\n };\n\n const mapInputConfigToVGS = (config: VGSCollectProps) => {\n return { name: config.name, type: config.type, ...config.vgsProps, disabled: config.vgsProps.disabled || undefined };\n };\n\n const getClassesFormInput = (index: number, extendedClasses?: string) => {\n const field: VGSCollectInputState = inputState[index];\n const config = fields[index];\n\n if (!field) return '';\n\n return classNames('c-input', extendedClasses, {\n '--selected': field.isFocused,\n '--success': field.isValid !== null && field.isValid,\n '--error': field.isValid !== null && !field.isValid,\n '--disabled': !!config?.vgsProps?.disabled,\n });\n };\n\n const [vgsLoaded, setVgsLoaded] = useState(false);\n const [vgsForm, setVgsForm] = useState(null);\n const [inputState, setInputState] = useState<VGSCollectInputState[]>(getDefaultStateFromFields());\n\n /** Loading VGS, or seeing if it's been loaded before, and binding onto that. */\n useEffect(() => {\n let cancelled = false;\n\n if (vgsCollectLoader === null) {\n vgsCollectLoader = (async () => {\n await RoomstayThemeEngine.loadScript('https://js.verygoodvault.com/vgs-collect/2.18.1/vgs-collect.js', 'vgs-collect');\n\n if (!cancelled) {\n setVgsLoaded(true);\n }\n })();\n } else {\n vgsCollectLoader.then(() => {\n if (!cancelled) {\n setVgsLoaded(true);\n }\n });\n }\n\n return () => {\n cancelled = true;\n };\n }, []);\n\n useEffect(() => {\n for (const ref of refs) {\n if (!ref?.current) {\n // Means we've still to wait for all the refs to bind\n return;\n }\n }\n\n if (vgsLoaded && !vgsForm) {\n const form = window.VGSCollect.create(hotel.vgsVaultName, 'live', (state: any) => {\n setInputState((oldState) => {\n const newState = [...oldState];\n\n for (const input of newState) {\n const vgsState = state[input.name];\n\n if (vgsState) {\n input.isFocused = vgsState.isFocused;\n input.isValid = !vgsState.isEmpty ? vgsState.isValid : null;\n\n if (input.type === 'card-number') {\n input.cardType = vgsState.cardType;\n }\n }\n }\n\n return newState;\n });\n });\n\n setVgsForm(form);\n\n setInputState((oldState) => {\n const newState = [...oldState];\n\n for (let i = 0; i < newState.length; i++) {\n const input = newState[i];\n const inputConfig = fields[i];\n\n input.vgsInput = form.field(refs[i].current, mapInputConfigToVGS(inputConfig));\n }\n\n return newState;\n });\n }\n }, [vgsLoaded, vgsForm, refs]);\n\n const triggerFieldUpdate = () => {\n for (const ref of refs) {\n if (!ref?.current) {\n // Means we've still to wait for all the refs to bind\n return;\n }\n }\n\n if (!vgsForm) {\n // Means VGS Collect has not loaded yet.\n return;\n }\n\n for (let i = 0; i < inputState.length; i++) {\n const input = inputState[i];\n const inputConfig = fields[i];\n\n if (input.vgsInput) {\n input.vgsInput.update?.(mapInputConfigToVGS(inputConfig));\n }\n }\n };\n\n return {\n fields: fields.map((item, index) => {\n return {\n ref: refs[index],\n state: inputState[index],\n getClasses: (extendedClasses?: string) => getClassesFormInput(index, extendedClasses),\n };\n }),\n triggerFieldUpdate,\n vgsForm,\n };\n};\n"]}
|
|
1
|
+
{"version":3,"file":"VGSHooks.js","sourceRoot":"/","sources":["src/hooks/VGSHooks.tsx"],"names":[],"mappings":"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","sourcesContent":["import { Auth } from '@aws-amplify/auth';\nimport { ECardType } from 'models/PaymentCard';\nimport RoomstayThemeEngine from 'providers/RoomstayThemeEngine';\nimport { useEffect, useRef, useState } from 'react';\nimport * as classNames from 'classnames';\nimport { useCurrentHotel } from './CurrentHotelHook';\n\nlet vgsShowLoader: Promise<any> | null = null;\nlet VGSShow: any;\n\nlet vgsCollectLoader: Promise<any> | null = null;\n\ndeclare global {\n interface Window {\n VGSCollect: any;\n }\n}\n\nwindow.VGSCollect = window.VGSCollect || {};\n\ntype UseVgsShowProps = {\n name: string;\n value: string;\n\n styles?: {};\n};\n\nexport const useVgsShow = (props: UseVgsShowProps) => {\n const { hotel } = useCurrentHotel();\n\n const [randomId, setRandomId] = useState(btoa((Math.random() * Math.random() * Date.now()).toString()).replace(/\\=/gi, ''));\n const [isLoading, setIsLoading] = useState(false);\n\n const targetRef = useRef(null);\n\n useEffect(() => {\n if (vgsShowLoader === null) {\n vgsShowLoader = (async () => {\n try {\n await RoomstayThemeEngine.loadScript('https://js.verygoodvault.com/vgs-show/2.0.2/show.js', 'vgs-show');\n\n // TODO: Load this ID dynamically\n VGSShow = window.VGSShow.create(hotel.vgsVaultName, (state: any) => {}).setEnvironment('live');\n } catch (ex) {\n console.error('Unable to load vgs-show ' + ex.message);\n }\n })();\n }\n }, []);\n\n useEffect(() => {\n let cancelled = false;\n\n if (VGSShow && targetRef?.current) {\n targetRef.current.classList.add(randomId);\n setIsLoading(true);\n\n Auth.currentAuthenticatedUser().then((cognitoData) => {\n const jwtToken = cognitoData.signInUserSession.idToken.jwtToken;\n\n const revealer = VGSShow.request({\n name: props.name,\n method: 'POST',\n path: '/members/vgs-auth',\n payload: {\n [props.name]: `${props.value}`,\n },\n headers: {\n Authorization: jwtToken,\n },\n serializers: [VGSShow.SERIALIZERS.replace('(\\\\d{4})(\\\\d{4})(\\\\d{4})(\\\\d{4})', '$1 $2 $3 $4')],\n htmlWrapper: 'text',\n jsonPathSelector: `${props.name}`,\n });\n\n // TODO: Handle failure on reveal\n revealer.on('revealSuccess', () => {\n setIsLoading(false);\n });\n\n revealer.on('revealFail', () => {\n setIsLoading(false);\n });\n\n targetRef.current.innerHTML = '';\n revealer.render(`.${randomId}`, props.styles);\n });\n }\n\n return () => {\n cancelled = true;\n };\n }, [VGSShow, targetRef, props.name, props.value]);\n\n return { targetRef, isLoading };\n};\n\ntype VGSCollectProps = {\n name: string;\n type: 'card-expiration-date' | 'text' | 'card-number' | 'card-security-code';\n label: string;\n\n vgsProps: {\n validations?: ('required' | 'validCardNumber' | 'validCardExpirationDate' | 'validCardSecurityCode')[];\n disabled?: boolean;\n css: object;\n placeholder?: string;\n\n [name: string]: any;\n };\n};\n\ntype VGSCollectInputState = {\n name: string;\n label: string;\n type: string;\n\n isFocused: boolean;\n isValid: boolean;\n\n vgsInput: any;\n\n cardType?: ECardType;\n};\n\nexport const useVgsCollect = (fields: VGSCollectProps[]) => {\n const { hotel } = useCurrentHotel();\n\n const refs = fields.map(() => {\n return useRef();\n });\n\n const getDefaultStateFromFields: () => VGSCollectInputState[] = () => {\n return fields.map((field) => {\n return {\n isFocused: null,\n isValid: null,\n\n name: field.name,\n label: field.label,\n type: field.type,\n\n vgsInput: null,\n };\n });\n };\n\n const mapInputConfigToVGS = (config: VGSCollectProps) => {\n return { name: config.name, type: config.type, ...config.vgsProps, disabled: config.vgsProps.disabled || undefined };\n };\n\n const getClassesFormInput = (index: number, extendedClasses?: string) => {\n const field: VGSCollectInputState = inputState[index];\n const config = fields[index];\n\n if (!field) return '';\n\n return classNames('c-input', 'c-input--vgs', extendedClasses, {\n '--selected': field.isFocused,\n '--success': field.isValid !== null && field.isValid,\n '--error': field.isValid !== null && !field.isValid,\n '--disabled': !!config?.vgsProps?.disabled,\n });\n };\n\n const [vgsLoaded, setVgsLoaded] = useState(false);\n const [vgsForm, setVgsForm] = useState(null);\n const [inputState, setInputState] = useState<VGSCollectInputState[]>(getDefaultStateFromFields());\n\n /** Loading VGS, or seeing if it's been loaded before, and binding onto that. */\n useEffect(() => {\n let cancelled = false;\n\n if (vgsCollectLoader === null) {\n vgsCollectLoader = (async () => {\n await RoomstayThemeEngine.loadScript('https://js.verygoodvault.com/vgs-collect/2.18.1/vgs-collect.js', 'vgs-collect');\n\n if (!cancelled) {\n setVgsLoaded(true);\n }\n })();\n } else {\n vgsCollectLoader.then(() => {\n if (!cancelled) {\n setVgsLoaded(true);\n }\n });\n }\n\n return () => {\n cancelled = true;\n };\n }, []);\n\n useEffect(() => {\n for (const ref of refs) {\n if (!ref?.current) {\n // Means we've still to wait for all the refs to bind\n return;\n }\n }\n\n if (vgsLoaded && !vgsForm) {\n const form = window.VGSCollect.create(hotel.vgsVaultName, 'live', (state: any) => {\n setInputState((oldState) => {\n const newState = [...oldState];\n\n for (const input of newState) {\n const vgsState = state[input.name];\n\n if (vgsState) {\n input.isFocused = vgsState.isFocused;\n input.isValid = !vgsState.isEmpty ? vgsState.isValid : null;\n\n if (input.type === 'card-number') {\n input.cardType = vgsState.cardType;\n }\n }\n }\n\n return newState;\n });\n });\n\n setVgsForm(form);\n\n setInputState((oldState) => {\n const newState = [...oldState];\n\n for (let i = 0; i < newState.length; i++) {\n const input = newState[i];\n const inputConfig = fields[i];\n\n input.vgsInput = form.field(refs[i].current, mapInputConfigToVGS(inputConfig));\n }\n\n return newState;\n });\n }\n }, [vgsLoaded, vgsForm, refs]);\n\n const triggerFieldUpdate = () => {\n for (const ref of refs) {\n if (!ref?.current) {\n // Means we've still to wait for all the refs to bind\n return;\n }\n }\n\n if (!vgsForm) {\n // Means VGS Collect has not loaded yet.\n return;\n }\n\n for (let i = 0; i < inputState.length; i++) {\n const input = inputState[i];\n const inputConfig = fields[i];\n\n if (input.vgsInput) {\n input.vgsInput.update?.(mapInputConfigToVGS(inputConfig));\n }\n }\n };\n\n return {\n fields: fields.map((item, index) => {\n return {\n ref: refs[index],\n state: inputState[index],\n getClasses: (extendedClasses?: string) => getClassesFormInput(index, extendedClasses),\n };\n }),\n triggerFieldUpdate,\n vgsForm,\n };\n};\n"]}
|