@roomstay/frontend 2.6.18 → 2.6.20
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/166.bundle.js +1 -1
- package/dist/279.bundle.js +1 -1
- package/dist/370.bundle.js +1 -1
- package/dist/449.bundle.js +1 -1
- package/dist/586.bundle.js +1 -0
- package/dist/736.bundle.js +1 -1
- package/dist/873.bundle.js +1 -1
- package/dist/903.bundle.js +1 -1
- package/dist/927.bundle.js +1 -0
- package/dist/972.bundle.js +1 -1
- package/dist/978.bundle.js +1 -0
- package/dist/e2e/data/checkoutTestData.d.ts +16 -0
- package/dist/e2e/data/checkoutTestData.js +32 -0
- package/dist/e2e/data/checkoutTestData.js.map +1 -0
- package/dist/e2e/goBackAndCheckoutAgain.spec.d.ts +1 -0
- package/dist/e2e/goBackAndCheckoutAgain.spec.js +72 -0
- package/dist/e2e/goBackAndCheckoutAgain.spec.js.map +1 -0
- package/dist/e2e/helpers/checkoutHelpers.d.ts +7 -0
- package/dist/e2e/helpers/checkoutHelpers.js +164 -0
- package/dist/e2e/helpers/checkoutHelpers.js.map +1 -0
- package/dist/e2e/price.spec.d.ts +1 -0
- package/dist/e2e/price.spec.js +154 -0
- package/dist/e2e/price.spec.js.map +1 -0
- package/dist/main.bundle.js +1 -1
- package/dist/src/api/MemberAPI.d.ts +2 -3
- package/dist/src/api/MemberAPI.js +2 -6
- package/dist/src/api/MemberAPI.js.map +1 -1
- package/dist/src/components/User/Forms/ForgotPasswordForm.js +6 -2
- package/dist/src/components/User/Forms/ForgotPasswordForm.js.map +1 -1
- package/dist/src/components/generic/InputGroup/InputGroup.js +6 -0
- package/dist/src/components/generic/InputGroup/InputGroup.js.map +1 -1
- package/dist/src/components/generic/InputGroup/InputGroup.types.d.ts +1 -1
- package/dist/src/components/generic/InputGroup/InputGroup.types.js.map +1 -1
- package/dist/src/components/generic/Select/InputSelect.js +1 -1
- package/dist/src/components/generic/Select/InputSelect.js.map +1 -1
- package/dist/src/components/members/EditMyProfile.js +3 -3
- package/dist/src/components/members/EditMyProfile.js.map +1 -1
- package/dist/src/components/steps/addons/AddonList.js +2 -2
- package/dist/src/components/steps/addons/AddonList.js.map +1 -1
- package/dist/src/components/steps/addons/AddonsNotFoundBlock.d.ts +2 -0
- package/dist/src/components/steps/addons/{AddonsNotFound.js → AddonsNotFoundBlock.js} +9 -3
- package/dist/src/components/steps/addons/AddonsNotFoundBlock.js.map +1 -0
- package/dist/src/components/steps/confirmation/RoomContactDetails.js +53 -29
- package/dist/src/components/steps/confirmation/RoomContactDetails.js.map +1 -1
- package/dist/src/components/steps/confirmation/StepConfirmationAcknowledgement.js +3 -1
- package/dist/src/components/steps/confirmation/StepConfirmationAcknowledgement.js.map +1 -1
- package/dist/src/components/steps/confirmation/StepConfirmationForm.js +1 -1
- package/dist/src/components/steps/confirmation/StepConfirmationForm.js.map +1 -1
- package/dist/src/components/steps/room/MemberSignInModal/EmailAndFullnameMemberModal.d.ts +4 -0
- package/dist/src/components/steps/room/MemberSignInModal/EmailAndFullnameMemberModal.js +37 -0
- package/dist/src/components/steps/room/MemberSignInModal/EmailAndFullnameMemberModal.js.map +1 -0
- package/dist/src/components/steps/room/MemberSignInModal/ExternalMemberModal.d.ts +16 -5
- package/dist/src/components/steps/room/MemberSignInModal/ExternalMemberModal.js +51 -54
- package/dist/src/components/steps/room/MemberSignInModal/ExternalMemberModal.js.map +1 -1
- package/dist/src/components/steps/room/MemberSignInModal/FamilyNameMemberModal.d.ts +8 -0
- package/dist/src/components/steps/room/MemberSignInModal/FamilyNameMemberModal.js +27 -0
- package/dist/src/components/steps/room/MemberSignInModal/FamilyNameMemberModal.js.map +1 -0
- package/dist/src/components/steps/room/MemberSignInModal/InternalMemberSignInModal.d.ts +6 -0
- package/dist/src/components/steps/room/MemberSignInModal/InternalMemberSignInModal.js +318 -0
- package/dist/src/components/steps/room/MemberSignInModal/InternalMemberSignInModal.js.map +1 -0
- package/dist/src/components/steps/room/MemberSignInModal/{MemberSignInModal.types.d.ts → InternalMemberSignInModal.types.d.ts} +1 -1
- package/dist/src/components/steps/room/MemberSignInModal/{MemberSignInModal.types.js → InternalMemberSignInModal.types.js} +1 -1
- package/dist/src/components/steps/room/MemberSignInModal/InternalMemberSignInModal.types.js.map +1 -0
- package/dist/src/components/steps/room/MemberSignInModal/MemberSignInModal.d.ts +1 -6
- package/dist/src/components/steps/room/MemberSignInModal/MemberSignInModal.js +28 -284
- package/dist/src/components/steps/room/MemberSignInModal/MemberSignInModal.js.map +1 -1
- package/dist/src/components/steps/room/StepRoomBestRateAlert.js +22 -3
- package/dist/src/components/steps/room/StepRoomBestRateAlert.js.map +1 -1
- package/dist/src/contexts/BasketContext/BasketContextWrapper.js +9 -6
- package/dist/src/contexts/BasketContext/BasketContextWrapper.js.map +1 -1
- package/dist/src/contexts/CompanyContext/CompanyContextType.type.d.ts +9 -3
- package/dist/src/contexts/CompanyContext/CompanyContextType.type.js.map +1 -1
- package/dist/src/contexts/CompanyContext/CompanyContextWrapper.js +51 -44
- package/dist/src/contexts/CompanyContext/CompanyContextWrapper.js.map +1 -1
- package/dist/src/contexts/ConfirmationStepContext/ConfirmationStepContextWrapper.js +5 -3
- package/dist/src/contexts/ConfirmationStepContext/ConfirmationStepContextWrapper.js.map +1 -1
- package/dist/src/contexts/Members/AuthenticationContext/AuthenticationContext.d.ts +8 -1
- package/dist/src/contexts/Members/AuthenticationContext/AuthenticationContext.js +2 -0
- package/dist/src/contexts/Members/AuthenticationContext/AuthenticationContext.js.map +1 -1
- package/dist/src/contexts/Members/AuthenticationContext/AuthenticationContextProvider.js +16 -4
- package/dist/src/contexts/Members/AuthenticationContext/AuthenticationContextProvider.js.map +1 -1
- package/dist/src/contexts/Members/RoomstayMemberContext/RoomstayMemberContextProvider.js +2 -12
- package/dist/src/contexts/Members/RoomstayMemberContext/RoomstayMemberContextProvider.js.map +1 -1
- package/dist/src/engines/MemberPortalWidget/MemberPortalWidget.d.ts +1 -0
- package/dist/src/engines/MemberPortalWidget/MemberPortalWidget.js.map +1 -1
- package/dist/src/engines/MemberPortalWidget/MemberPortalWidgetElement.js +17 -9
- package/dist/src/engines/MemberPortalWidget/MemberPortalWidgetElement.js.map +1 -1
- package/dist/src/events/{views → actions}/PlacedBookingEvent.d.ts +3 -1
- package/dist/src/events/{views → actions}/PlacedBookingEvent.js +2 -1
- package/dist/src/events/actions/PlacedBookingEvent.js.map +1 -0
- package/dist/src/events/views/StepThanksViewEvent.d.ts +3 -1
- package/dist/src/events/views/StepThanksViewEvent.js +3 -1
- package/dist/src/events/views/StepThanksViewEvent.js.map +1 -1
- package/dist/src/hooks/useExternalMember.d.ts +1 -1
- package/dist/src/hooks/useNextStepAction.js +1 -1
- package/dist/src/hooks/useNextStepAction.js.map +1 -1
- package/dist/src/index.d.ts +3 -0
- package/dist/src/index.js +9 -2
- package/dist/src/index.js.map +1 -1
- package/dist/src/models/Api/HotelDTO.d.ts +2 -6
- package/dist/src/models/Api/HotelDTO.js +1 -7
- package/dist/src/models/Api/HotelDTO.js.map +1 -1
- package/dist/src/models/BasketRow.d.ts +3 -3
- package/dist/src/models/BasketRow.js +0 -3
- package/dist/src/models/BasketRow.js.map +1 -1
- package/dist/src/models/Client/Hotel/Hotel.d.ts +5 -4
- package/dist/src/models/Client/Hotel/Hotel.js.map +1 -1
- package/dist/src/models/Confirmation.d.ts +3 -0
- package/dist/src/models/Confirmation.js +2 -0
- package/dist/src/models/Confirmation.js.map +1 -1
- package/dist/src/models/RoomstaySession.d.ts +5 -0
- package/dist/src/models/RoomstaySession.js.map +1 -1
- package/dist/src/pages/account/AccountRouter.js +2 -0
- package/dist/src/pages/account/AccountRouter.js.map +1 -1
- package/dist/src/pages/account/AccountRoutes.d.ts +3 -0
- package/dist/src/pages/account/AccountRoutes.js +3 -0
- package/dist/src/pages/account/AccountRoutes.js.map +1 -1
- package/dist/src/pages/account/ChangePassword/AccountChangePasswordPage.d.ts +1 -0
- package/dist/src/pages/account/ChangePassword/AccountChangePasswordPage.js +143 -0
- package/dist/src/pages/account/ChangePassword/AccountChangePasswordPage.js.map +1 -0
- package/dist/src/pages/account/Details/AccountDetailsProfilePage.js +11 -16
- package/dist/src/pages/account/Details/AccountDetailsProfilePage.js.map +1 -1
- package/dist/src/pages/steps/StepDate/StepDateComponent.js +7 -0
- package/dist/src/pages/steps/StepDate/StepDateComponent.js.map +1 -1
- package/dist/src/pages/steps/StepThanks/StepThanksComponent.js +1 -1
- package/dist/src/pages/steps/StepThanks/StepThanksComponent.js.map +1 -1
- package/dist/src/providers/FeatureProvider.d.ts +1 -1
- package/dist/src/providers/FeatureProvider.js +6 -2
- package/dist/src/providers/FeatureProvider.js.map +1 -1
- package/dist/src/providers/SessionProvider.js +5 -1
- package/dist/src/providers/SessionProvider.js.map +1 -1
- package/dist/src/providers/feature/DerbysoftClickTrackingFeature.d.ts +7 -0
- package/dist/src/providers/feature/DerbysoftClickTrackingFeature.js +32 -0
- package/dist/src/providers/feature/DerbysoftClickTrackingFeature.js.map +1 -0
- package/dist/src/providers/feature/Feature.d.ts +3 -3
- package/dist/src/providers/feature/Feature.js +3 -3
- package/dist/src/providers/feature/Feature.js.map +1 -1
- package/dist/src/providers/feature/GuestTitleFieldFeature.d.ts +21 -0
- package/dist/src/providers/feature/GuestTitleFieldFeature.js +37 -0
- package/dist/src/providers/feature/GuestTitleFieldFeature.js.map +1 -0
- package/dist/src/providers/storage/LocalStorageProvider.js +1 -1
- package/dist/src/providers/storage/LocalStorageProvider.js.map +1 -1
- package/dist/src/translations/Translation.d.ts +19 -3
- package/dist/src/translations/Translation.js +19 -3
- package/dist/src/translations/Translation.js.map +1 -1
- package/dist/src/translations/languages/en-gb.js +20 -4
- package/dist/src/translations/languages/en-gb.js.map +1 -1
- package/dist/src/util/DerbysoftPixel.d.ts +4 -0
- package/dist/src/util/DerbysoftPixel.js +56 -0
- package/dist/src/util/DerbysoftPixel.js.map +1 -0
- package/dist/test.bundle.js +1 -1
- package/dist/tests/offline/entry/OfflineEngineDefaults.js +5 -0
- package/dist/tests/offline/entry/OfflineEngineDefaults.js.map +1 -1
- package/dist/vendors.bundle.js +1 -1
- package/dist/vendors.bundle.js.LICENSE.txt +2 -0
- package/package.json +2 -2
- package/dist/201.bundle.js +0 -1
- package/dist/457.bundle.js +0 -1
- package/dist/468.bundle.js +0 -1
- package/dist/src/components/steps/addons/AddonsNotFound.d.ts +0 -1
- package/dist/src/components/steps/addons/AddonsNotFound.js.map +0 -1
- package/dist/src/components/steps/room/MemberSignInModal/MemberSignInModal.types.js.map +0 -1
- package/dist/src/events/views/PlacedBookingEvent.js.map +0 -1
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import type { EnvironmentName } from '@planpay/web';
|
|
2
|
-
import { EBookingPaymentMethod, EHotelCardProcessor, IHotelColorScheme } from '@roomstay/core';
|
|
2
|
+
import { EBookingPaymentMethod, EHotelCardProcessor, EIntegration, EHotelStateFieldConfiguration, IHotelColorScheme } from '@roomstay/core';
|
|
3
3
|
import type { ReactChild } from 'react';
|
|
4
|
-
import type {
|
|
5
|
-
import type {
|
|
4
|
+
import type { InternalMemberSignInInputs } from '../../../components/steps/room/MemberSignInModal/InternalMemberSignInModal.types';
|
|
5
|
+
import type { HotelRoomGroupsDTO, HotelRoomsDTO, HotelServiceDTO } from '../../Api/HotelDTO';
|
|
6
6
|
import type { HotelInfoPageProps, TransportDistances } from '../../Api/HotelOverrideDTO';
|
|
7
7
|
import type { HasDatalayerTags } from './Company';
|
|
8
8
|
import type { DistanceUnitType } from './DistanceUnitType.types';
|
|
@@ -89,6 +89,7 @@ export interface AdminHotelConfig {
|
|
|
89
89
|
};
|
|
90
90
|
};
|
|
91
91
|
preventCancellation?: boolean;
|
|
92
|
+
stateFieldConfiguration?: EHotelStateFieldConfiguration;
|
|
92
93
|
}
|
|
93
94
|
/**
|
|
94
95
|
* This config comes from hard static local file
|
|
@@ -104,7 +105,7 @@ export interface ClientHotelConfig {
|
|
|
104
105
|
bestRateNoBSUrl?: string;
|
|
105
106
|
memberOnlyRates?: string[];
|
|
106
107
|
memberOnlyPromoCode?: string;
|
|
107
|
-
memberOnlySignupInputs?:
|
|
108
|
+
memberOnlySignupInputs?: InternalMemberSignInInputs;
|
|
108
109
|
googleMapsImage?: string;
|
|
109
110
|
/**
|
|
110
111
|
* Whether to show the Breakfast / Lunch / Dinner included
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Hotel.js","sourceRoot":"/","sources":["src/models/Client/Hotel/Hotel.ts"],"names":[],"mappings":";;;AAiBA,IAAY,gBAOX;AAPD,WAAY,gBAAgB;IACxB,+BAAW,CAAA;IACX,qCAAiB,CAAA;IACjB,8BAAU,CAAA;IACV,0CAAsB,CAAA;IACtB,qCAAiB,CAAA;IACjB,mCAAe,CAAA;AACnB,CAAC,EAPW,gBAAgB,GAAhB,wBAAgB,KAAhB,wBAAgB,QAO3B","sourcesContent":["import type { EnvironmentName } from '@planpay/web';\nimport { EBookingPaymentMethod, EHotelCardProcessor, IHotelColorScheme } from '@roomstay/core';\nimport type { ReactChild } from 'react';\n\nimport type {
|
|
1
|
+
{"version":3,"file":"Hotel.js","sourceRoot":"/","sources":["src/models/Client/Hotel/Hotel.ts"],"names":[],"mappings":";;;AAiBA,IAAY,gBAOX;AAPD,WAAY,gBAAgB;IACxB,+BAAW,CAAA;IACX,qCAAiB,CAAA;IACjB,8BAAU,CAAA;IACV,0CAAsB,CAAA;IACtB,qCAAiB,CAAA;IACjB,mCAAe,CAAA;AACnB,CAAC,EAPW,gBAAgB,GAAhB,wBAAgB,KAAhB,wBAAgB,QAO3B","sourcesContent":["import type { EnvironmentName } from '@planpay/web';\nimport { EBookingPaymentMethod, EHotelCardProcessor, EIntegration, EHotelStateFieldConfiguration, IHotelColorScheme } from '@roomstay/core';\nimport type { ReactChild } from 'react';\n\nimport type { InternalMemberSignInInputs } from '@/components/steps/room/MemberSignInModal/InternalMemberSignInModal.types';\nimport type { HotelRoomGroupsDTO, HotelRoomsDTO, HotelServiceDTO } from '@/models/Api/HotelDTO';\nimport type { HotelInfoPageProps, TransportDistances } from '@/models/Api/HotelOverrideDTO';\nimport type { HasDatalayerTags } from '@/models/Client/Hotel/Company';\nimport type { DistanceUnitType } from '@/models/Client/Hotel/DistanceUnitType.types';\nimport type HotelAddress from '@/models/Client/Hotel/HotelAddress';\nimport type { HotelDataSource } from '@/models/Client/Hotel/HotelDataSource.types';\nimport type { HotelPerk } from '@/models/Client/Hotel/HotelPerk';\nimport type { HotelRoomOverwrite } from '@/models/Client/Hotel/HotelRoomOverwrite';\nimport type { WeekdayStartsOn } from '@/models/Client/Hotel/WeekdayStartsOn.types';\nimport type { Language } from '@/providers/LanguageProvider';\nimport { RoomSort } from '@/providers/RoomSortProvider';\n\nexport enum EPaymentCardType {\n Visa = 'VI',\n Mastercard = 'MC',\n JCB = 'JC',\n AmericanExpress = 'AX',\n DinersClub = 'DN',\n UnionPay = 'UP',\n}\n\nexport interface IVGSVaultNames {\n standard: string;\n members: string;\n}\n\n/**\n * This config comes from admin\n */\nexport interface AdminHotelConfig {\n hotelID: string;\n name: string;\n address?: HotelAddress;\n latitude?: number;\n longitude?: number;\n phone?: string;\n email?: string;\n checkInTime?: string;\n checkOutTime?: string;\n paymentCardTypes?: EPaymentCardType[];\n description?: string;\n locationDescription?: string;\n policies?: string;\n hotelServices: HotelServiceDTO[];\n businessServices: HotelServiceDTO[];\n rooms: HotelRoomsDTO;\n hasLoadedDetails?: boolean;\n dataSource: HotelDataSource;\n defaultCurrency: string;\n paymentMethods: EBookingPaymentMethod[];\n planpay?: {\n username: string;\n minDaysShowPlanpay: number;\n env: EnvironmentName;\n };\n hotelUrl: string;\n heroImage: string;\n memberOnlyModalImage?: string;\n images?: string[];\n logo: string | ReactChild;\n colors: IHotelColorScheme;\n distanceUnitType: DistanceUnitType;\n startsWeekOnDay?: WeekdayStartsOn;\n crossSellHotelIds?: string[];\n maxOccupancy?: number;\n maxAdults?: number;\n maxChildren?: number;\n maxInfants?: number;\n hideByLine?: boolean;\n transportDistances?: TransportDistances;\n roomGroups: HotelRoomGroupsDTO;\n cardProcessor: EHotelCardProcessor;\n\n requireDeposit?: boolean;\n availableCountries?: { name: string; value: string }[];\n\n childConfiguration?: {\n supportChildren?: boolean;\n supportInfants: boolean;\n childRange: { min: number; max: number };\n infantRange: { min: number; max: number };\n };\n preventCancellation?: boolean;\n\n stateFieldConfiguration?: EHotelStateFieldConfiguration;\n}\n\n/**\n * This config comes from hard static local file\n */\nexport interface ClientHotelConfig {\n providerHotelID: string;\n shortName?: string;\n defaultDatepickerType?: 'Month' | 'Week';\n // TODO: need to do magic to see if we need to append / prepend stuff, for now we assume that it's only used while on the site.\n checkoutUrl?: string;\n defaultLanguage: Language;\n privacyPolicyUrl: string;\n bookNowPayLaterUrl?: string;\n bestRateNoBSUrl?: string;\n\n memberOnlyRates?: string[];\n memberOnlyPromoCode?: string;\n memberOnlySignupInputs?: InternalMemberSignInInputs;\n googleMapsImage?: string;\n /**\n * Whether to show the Breakfast / Lunch / Dinner included\n */\n showMealPill?: boolean;\n perks: HotelPerk[];\n /**\n * Hide perks on room row\n */\n perksHideOnRoomRow?: boolean;\n /**\n * Hide perks on room detail modal\n */\n perksHideOnRoomDetail?: boolean;\n perksShowDisclaimer?: boolean;\n /** @deprecated Use the vgs.vaultNames.standard property now */\n vgsVaultName?: string;\n vgs?: {\n vaultNames: IVGSVaultNames;\n };\n showAddonLoader: boolean;\n overwrites?: { [code: string]: Partial<HotelRoomOverwrite> };\n forwardFindReservationToSynxis?: boolean;\n additionalOptions?: { [name: string]: any };\n googleReCaptcha?: {\n loadForMembers?: boolean;\n siteKey?: string;\n };\n /**\n * Show description on RoomDetails\n */\n showDescriptionOnRoomDetails?: boolean;\n /**\n * Customize the Member modal colours. Specifically replacing the green (success) with the primary color of hotel (accent)\n */\n memberOnlyModalUsePrimaryColor?: boolean;\n /**\n * Callback to trigger specific events on load of a hotel.\n *\n * This is where you can specify custom fields, language overrides, feature toggles etc.\n */\n onLoad?: () => void;\n currentRoomSort?: RoomSort; //override default room sort\n}\n\nexport interface ConfigHotel extends ClientHotelConfig, AdminHotelConfig, HasDatalayerTags {}\n\nexport type Hotel = ConfigHotel & {\n lowestPrice?: {\n value: number;\n isLoading: boolean;\n };\n integrations?: EIntegration[];\n maxAdults?: number; //fixed from frontend\n hotelInfo?: HotelInfoPageProps; //fixed from frontend\n};\n\n/**\n * Used for DetailsHotel event\n */\nexport type InitialHotelDetailsEventPayload = {\n name: string;\n hotelID: number | string;\n hotelUrl: string;\n currency: string;\n language: Language;\n address?: HotelAddress;\n};\n"]}
|
|
@@ -2,6 +2,7 @@ import { EBookingPaymentMethod, IBookingPayment } from '@roomstay/core';
|
|
|
2
2
|
import ReservationsDTO from './Api/ReservationsDTO';
|
|
3
3
|
import BasketRowDifferences from './BasketRowDifferences';
|
|
4
4
|
export declare enum EUserProfileFormKey {
|
|
5
|
+
Title = "Title",
|
|
5
6
|
Forename = "Forename",
|
|
6
7
|
Surname = "Surname",
|
|
7
8
|
Email = "Email",
|
|
@@ -9,6 +10,7 @@ export declare enum EUserProfileFormKey {
|
|
|
9
10
|
Address = "Address",
|
|
10
11
|
City = "City",
|
|
11
12
|
PostCode = "PostCode",
|
|
13
|
+
State = "State",
|
|
12
14
|
Country = "Country",
|
|
13
15
|
CountryId = "CountryId",
|
|
14
16
|
CountryCode = "CountryCode"
|
|
@@ -25,6 +27,7 @@ export interface ConfirmationFormValues {
|
|
|
25
27
|
userProfiles: TUserProfileFormValues[];
|
|
26
28
|
copyCheckBox?: boolean;
|
|
27
29
|
paymentMethod: EBookingPaymentMethod;
|
|
30
|
+
marketingOptIn: boolean;
|
|
28
31
|
}
|
|
29
32
|
export interface IBookValidationResult {
|
|
30
33
|
differences: BasketRowDifferences[];
|
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.EUserProfileFormKey = void 0;
|
|
4
4
|
var EUserProfileFormKey;
|
|
5
5
|
(function (EUserProfileFormKey) {
|
|
6
|
+
EUserProfileFormKey["Title"] = "Title";
|
|
6
7
|
EUserProfileFormKey["Forename"] = "Forename";
|
|
7
8
|
EUserProfileFormKey["Surname"] = "Surname";
|
|
8
9
|
EUserProfileFormKey["Email"] = "Email";
|
|
@@ -10,6 +11,7 @@ var EUserProfileFormKey;
|
|
|
10
11
|
EUserProfileFormKey["Address"] = "Address";
|
|
11
12
|
EUserProfileFormKey["City"] = "City";
|
|
12
13
|
EUserProfileFormKey["PostCode"] = "PostCode";
|
|
14
|
+
EUserProfileFormKey["State"] = "State";
|
|
13
15
|
EUserProfileFormKey["Country"] = "Country";
|
|
14
16
|
EUserProfileFormKey["CountryId"] = "CountryId";
|
|
15
17
|
EUserProfileFormKey["CountryCode"] = "CountryCode";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Confirmation.js","sourceRoot":"/","sources":["src/models/Confirmation.ts"],"names":[],"mappings":";;;AAKA,IAAY,
|
|
1
|
+
{"version":3,"file":"Confirmation.js","sourceRoot":"/","sources":["src/models/Confirmation.ts"],"names":[],"mappings":";;;AAKA,IAAY,mBAaX;AAbD,WAAY,mBAAmB;IAC3B,sCAAe,CAAA;IACf,4CAAqB,CAAA;IACrB,0CAAmB,CAAA;IACnB,sCAAe,CAAA;IACf,sCAAe,CAAA;IACf,0CAAmB,CAAA;IACnB,oCAAa,CAAA;IACb,4CAAqB,CAAA;IACrB,sCAAe,CAAA;IACf,0CAAmB,CAAA;IACnB,8CAAuB,CAAA;IACvB,kDAA2B,CAAA;AAC/B,CAAC,EAbW,mBAAmB,GAAnB,2BAAmB,KAAnB,2BAAmB,QAa9B","sourcesContent":["import { EBookingPaymentMethod, IBookingPayment } from '@roomstay/core';\n\nimport ReservationsDTO from './Api/ReservationsDTO';\nimport BasketRowDifferences from './BasketRowDifferences';\n\nexport enum EUserProfileFormKey {\n Title = 'Title',\n Forename = 'Forename',\n Surname = 'Surname',\n Email = 'Email',\n Phone = 'Phone',\n Address = 'Address',\n City = 'City',\n PostCode = 'PostCode',\n State = 'State',\n Country = 'Country',\n CountryId = 'CountryId',\n CountryCode = 'CountryCode',\n}\n\nexport type TUserProfileFormValues = {\n [userProfileKey in EUserProfileFormKey]: string;\n} & { AuxInputs?: { [key: string]: string | number } };\n\nexport interface ConfirmationFormValues {\n IATANumber?: string;\n userProfiles: TUserProfileFormValues[];\n copyCheckBox?: boolean;\n paymentMethod: EBookingPaymentMethod;\n marketingOptIn: boolean;\n}\n\nexport interface IBookValidationResult {\n differences: BasketRowDifferences[];\n warnings: string[];\n}\n\nexport type FBookValidationCallback = (validationResult?: IBookValidationResult) => void;\nexport type FBookSuccessCallback = (data: ReservationsDTO) => Promise<void>;\nexport type FBookValidateFunction = () => Promise<boolean>;\nexport type FBookGetPaymentDetails = () => Promise<IBookingPayment>;\n"]}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { SignInUser } from '../contexts/index.js';
|
|
1
2
|
import { IBookingPayment } from '@roomstay/core';
|
|
2
3
|
import dayjs from 'dayjs';
|
|
3
4
|
import type BasketRow from './BasketRow';
|
|
@@ -15,6 +16,8 @@ export type RoomstaySession = {
|
|
|
15
16
|
endDate: dayjs.Dayjs | null;
|
|
16
17
|
hotelID: number | string;
|
|
17
18
|
source: string;
|
|
19
|
+
user?: SignInUser;
|
|
20
|
+
memberId?: string;
|
|
18
21
|
basketRows: BasketRow[];
|
|
19
22
|
reservationRequest?: {
|
|
20
23
|
userProfiles: UserProfile[];
|
|
@@ -30,6 +33,8 @@ export type SerializedRoomstaySession = {
|
|
|
30
33
|
endDate: string;
|
|
31
34
|
hotelID: number | string;
|
|
32
35
|
source: string;
|
|
36
|
+
user?: string;
|
|
37
|
+
memberId?: string;
|
|
33
38
|
basketRows: SerializedRoomstaySessionBasketRow[];
|
|
34
39
|
reservation?: ReservationsDTO;
|
|
35
40
|
reservationRequest?: RoomstaySession['reservationRequest'];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RoomstaySession.js","sourceRoot":"/","sources":["src/models/RoomstaySession.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"RoomstaySession.js","sourceRoot":"/","sources":["src/models/RoomstaySession.ts"],"names":[],"mappings":";;;AAkEa,QAAA,sBAAsB,GAAG,YAAY,CAAC","sourcesContent":["import { SignInUser } from '@frontend/contexts';\nimport { IBookingPayment } from '@roomstay/core';\nimport dayjs from 'dayjs';\n\nimport type BasketRow from '@/models/BasketRow';\nimport type { IRoom } from '@/models/Room/Room';\nimport type { IRoomRate } from '@/models/Room/RoomRate';\nimport UserProfile from '@/models/UserProfile';\n\nimport ReservationsDTO from './Api/ReservationsDTO';\n\n/**\n * Booking engine state object, that is stored, can be loaded and unloaded\n */\nexport type RoomstaySession = {\n id: number;\n step: string;\n startDate: dayjs.Dayjs | null;\n endDate: dayjs.Dayjs | null;\n hotelID: number | string;\n source: string;\n user?: SignInUser;\n memberId?: string;\n\n basketRows: BasketRow[];\n\n reservationRequest?: {\n userProfiles: UserProfile[];\n payment: IBookingPayment;\n comments: string;\n };\n reservation?: ReservationsDTO;\n};\n\nexport type SerializedRoomstaySession = {\n id: number;\n step: string;\n startDate: string;\n endDate: string;\n hotelID: number | string;\n source: string;\n user?: string;\n memberId?: string;\n\n basketRows: SerializedRoomstaySessionBasketRow[];\n\n reservation?: ReservationsDTO;\n reservationRequest?: RoomstaySession['reservationRequest'];\n};\n\nexport type SerializedRoomstaySessionBasketRow = {\n uniqId: string;\n startDate: string;\n endDate: string;\n\n adults: number;\n children: number;\n infants: number;\n\n promoCode: string;\n promoCodeStatus: string;\n\n room: IRoom;\n rate: IRoomRate;\n};\n\nexport const SERIALIZED_DATE_FORMAT = 'YYYY/MM/DD';\n"]}
|
|
@@ -14,6 +14,7 @@ const AccountHelpPage_1 = require("./Help/AccountHelpPage");
|
|
|
14
14
|
const AccountReservationSinglePage_1 = require("./Reservations/AccountReservationSinglePage");
|
|
15
15
|
const AccountReservationsPage_1 = require("./Reservations/AccountReservationsPage");
|
|
16
16
|
const AccountRoutes_1 = require("./AccountRoutes");
|
|
17
|
+
const AccountChangePasswordPage_1 = require("./ChangePassword/AccountChangePasswordPage");
|
|
17
18
|
const AccountRouter = () => {
|
|
18
19
|
return (react_1.default.createElement(react_1.default.Fragment, null,
|
|
19
20
|
react_1.default.createElement(AccountOutlet_1.AccountOutlet, null,
|
|
@@ -21,6 +22,7 @@ const AccountRouter = () => {
|
|
|
21
22
|
react_1.default.createElement(react_router_dom_1.Route, { path: AccountRoutes_1.AccountRoutes.Reservations.matchPath, component: AccountReservationsPage_1.AccountReservationPage, exact: true }),
|
|
22
23
|
react_1.default.createElement(react_router_dom_1.Route, { path: AccountRoutes_1.AccountRoutes.SingleReservation.matchPath, component: AccountReservationSinglePage_1.AccountReservationSinglePage }),
|
|
23
24
|
react_1.default.createElement(react_router_dom_1.Route, { path: AccountRoutes_1.AccountRoutes.ProfileDetails.path, component: AccountDetailsProfilePage_1.AccountDetailsProfilePage }),
|
|
25
|
+
react_1.default.createElement(react_router_dom_1.Route, { path: AccountRoutes_1.AccountRoutes.ChangePassword.path, component: AccountChangePasswordPage_1.AccountChangePasswordPage }),
|
|
24
26
|
react_1.default.createElement(react_router_dom_1.Route, { path: AccountRoutes_1.AccountRoutes.CardDetails.path, component: AccountDetailsCardsPage_1.AccountDetailsCardsPage }),
|
|
25
27
|
react_1.default.createElement(react_router_dom_1.Route, { path: AccountRoutes_1.AccountRoutes.Help.path, component: AccountHelpPage_1.AccountHelpPage }))));
|
|
26
28
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AccountRouter.js","sourceRoot":"/","sources":["src/pages/account/AccountRouter.tsx"],"names":[],"mappings":";;;;;;AAAA,kDAA0B;AAC1B,uDAAyC;AAEzC,iFAA8E;AAC9E,iEAA8D;AAC9D,6FAA0F;AAC1F,iGAA8F;AAC9F,0EAAuE;AACvE,4GAAyG;AACzG,kGAA8F;AAE9F,mDAAgD;
|
|
1
|
+
{"version":3,"file":"AccountRouter.js","sourceRoot":"/","sources":["src/pages/account/AccountRouter.tsx"],"names":[],"mappings":";;;;;;AAAA,kDAA0B;AAC1B,uDAAyC;AAEzC,iFAA8E;AAC9E,iEAA8D;AAC9D,6FAA0F;AAC1F,iGAA8F;AAC9F,0EAAuE;AACvE,4GAAyG;AACzG,kGAA8F;AAE9F,mDAAgD;AAChD,0FAAuF;AAEhF,MAAM,aAAa,GAAG,GAAG,EAAE;IAC9B,OAAO,CACH;QACI,8BAAC,6BAAa;YACV,8BAAC,wBAAK,IAAC,IAAI,EAAE,6BAAa,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,iCAAe,GAAI;YACpE,8BAAC,wBAAK,IAAC,IAAI,EAAE,6BAAa,CAAC,YAAY,CAAC,SAAS,EAAE,SAAS,EAAE,gDAAsB,EAAE,KAAK,SAAG;YAE9F,8BAAC,wBAAK,IAAC,IAAI,EAAE,6BAAa,CAAC,iBAAiB,CAAC,SAAS,EAAE,SAAS,EAAE,2DAA4B,GAAI;YAEnG,8BAAC,wBAAK,IAAC,IAAI,EAAE,6BAAa,CAAC,cAAc,CAAC,IAAI,EAAE,SAAS,EAAE,qDAAyB,GAAI;YACxF,8BAAC,wBAAK,IAAC,IAAI,EAAE,6BAAa,CAAC,cAAc,CAAC,IAAI,EAAE,SAAS,EAAE,qDAAyB,GAAI;YACxF,8BAAC,wBAAK,IAAC,IAAI,EAAE,6BAAa,CAAC,WAAW,CAAC,IAAI,EAAE,SAAS,EAAE,iDAAuB,GAAI;YAEnF,8BAAC,wBAAK,IAAC,IAAI,EAAE,6BAAa,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,iCAAe,GAAI,CACxD,CACjB,CACN,CAAC;AACN,CAAC,CAAC;AAjBW,QAAA,aAAa,iBAiBxB","sourcesContent":["import React from 'react';\nimport { Route } from 'react-router-dom';\n\nimport { AccountHomePage } from '@/pages/account/AccountHome/AccountHomePage';\nimport { AccountOutlet } from '@/pages/account/AccountOutlet';\nimport { AccountDetailsCardsPage } from '@/pages/account/Details/AccountDetailsCardsPage';\nimport { AccountDetailsProfilePage } from '@/pages/account/Details/AccountDetailsProfilePage';\nimport { AccountHelpPage } from '@/pages/account/Help/AccountHelpPage';\nimport { AccountReservationSinglePage } from '@/pages/account/Reservations/AccountReservationSinglePage';\nimport { AccountReservationPage } from '@/pages/account/Reservations/AccountReservationsPage';\n\nimport { AccountRoutes } from './AccountRoutes';\nimport { AccountChangePasswordPage } from './ChangePassword/AccountChangePasswordPage';\n\nexport const AccountRouter = () => {\n return (\n <>\n <AccountOutlet>\n <Route path={AccountRoutes.Home.path} component={AccountHomePage} />\n <Route path={AccountRoutes.Reservations.matchPath} component={AccountReservationPage} exact />\n\n <Route path={AccountRoutes.SingleReservation.matchPath} component={AccountReservationSinglePage} />\n\n <Route path={AccountRoutes.ProfileDetails.path} component={AccountDetailsProfilePage} />\n <Route path={AccountRoutes.ChangePassword.path} component={AccountChangePasswordPage} />\n <Route path={AccountRoutes.CardDetails.path} component={AccountDetailsCardsPage} />\n\n <Route path={AccountRoutes.Help.path} component={AccountHelpPage} />\n </AccountOutlet>\n </>\n );\n};\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AccountRoutes.js","sourceRoot":"/","sources":["src/pages/account/AccountRoutes.ts"],"names":[],"mappings":";;;AAAa,QAAA,aAAa,GAAG;IACzB,IAAI,EAAE;QACF,IAAI,EAAE,eAAe;KACxB;IACD,YAAY,EAAE;QACV,SAAS,EAAE,iCAAiC;QAC5C,IAAI,EAAE,uBAAuB;KAChC;IACD,iBAAiB,EAAE;QACf,SAAS,EAAE,mCAAmC;QAC9C,IAAI,EAAE,wBAAwB;KACjC;IACD,cAAc,EAAE;QACZ,IAAI,EAAE,0BAA0B;KACnC;IACD,WAAW,EAAE;QACT,IAAI,EAAE,wBAAwB;KACjC;IACD,IAAI,EAAE;QACF,IAAI,EAAE,eAAe;KACxB;CACJ,CAAC","sourcesContent":["export const AccountRoutes = {\n Home: {\n path: '/account/home',\n },\n Reservations: {\n matchPath: '/account/reservations/:tabPath?',\n path: '/account/reservations',\n },\n SingleReservation: {\n matchPath: '/account/reservations/:resId/item',\n path: '/account/reservations/',\n },\n ProfileDetails: {\n path: '/account/details/profile',\n },\n CardDetails: {\n path: '/account/details/cards',\n },\n Help: {\n path: '/account/help',\n },\n};\n"]}
|
|
1
|
+
{"version":3,"file":"AccountRoutes.js","sourceRoot":"/","sources":["src/pages/account/AccountRoutes.ts"],"names":[],"mappings":";;;AAAa,QAAA,aAAa,GAAG;IACzB,IAAI,EAAE;QACF,IAAI,EAAE,eAAe;KACxB;IACD,YAAY,EAAE;QACV,SAAS,EAAE,iCAAiC;QAC5C,IAAI,EAAE,uBAAuB;KAChC;IACD,iBAAiB,EAAE;QACf,SAAS,EAAE,mCAAmC;QAC9C,IAAI,EAAE,wBAAwB;KACjC;IACD,cAAc,EAAE;QACZ,IAAI,EAAE,0BAA0B;KACnC;IACD,WAAW,EAAE;QACT,IAAI,EAAE,wBAAwB;KACjC;IACD,IAAI,EAAE;QACF,IAAI,EAAE,eAAe;KACxB;IACD,cAAc,EAAE;QACZ,IAAI,EAAE,kCAAkC;KAC3C;CACJ,CAAC","sourcesContent":["export const AccountRoutes = {\n Home: {\n path: '/account/home',\n },\n Reservations: {\n matchPath: '/account/reservations/:tabPath?',\n path: '/account/reservations',\n },\n SingleReservation: {\n matchPath: '/account/reservations/:resId/item',\n path: '/account/reservations/',\n },\n ProfileDetails: {\n path: '/account/details/profile',\n },\n CardDetails: {\n path: '/account/details/cards',\n },\n Help: {\n path: '/account/help',\n },\n ChangePassword: {\n path: '/account/details/change-password',\n },\n};\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const AccountChangePasswordPage: () => JSX.Element;
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
26
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
27
|
+
};
|
|
28
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
|
+
exports.AccountChangePasswordPage = void 0;
|
|
30
|
+
const contexts_1 = require("../../../contexts/index.js");
|
|
31
|
+
const hooks_1 = require("../../../hooks/index.js");
|
|
32
|
+
const react_1 = __importStar(require("react"));
|
|
33
|
+
const react_hook_form_1 = require("react-hook-form");
|
|
34
|
+
const react_i18next_1 = require("react-i18next");
|
|
35
|
+
const react_router_dom_1 = require("react-router-dom");
|
|
36
|
+
const Translation_1 = require("translations/Translation");
|
|
37
|
+
const BEButton_1 = __importDefault(require("../../../components/generic/BEButton"));
|
|
38
|
+
const Headline_1 = __importDefault(require("../../../components/generic/Headline"));
|
|
39
|
+
const Icon_1 = require("../../../components/generic/Icon/Icon");
|
|
40
|
+
const PasswordBox_1 = require("../../../components/generic/PasswordBox/PasswordBox");
|
|
41
|
+
const Text_1 = __importStar(require("../../../components/generic/Text"));
|
|
42
|
+
const Color_1 = require("../../../util/Color");
|
|
43
|
+
const Validation_1 = require("../../../util/Validation");
|
|
44
|
+
const AutoAutoHeight_1 = __importDefault(require("../../../animations/AutoAutoHeight"));
|
|
45
|
+
const Alert_1 = __importStar(require("../../../components/generic/Alert"));
|
|
46
|
+
const AccountRoutes_1 = require("../AccountRoutes");
|
|
47
|
+
const LabelAndInputGroup = (props) => {
|
|
48
|
+
const { label, component, hint, error } = props;
|
|
49
|
+
return (react_1.default.createElement("div", { className: "row u-marg-bottom--heavy" },
|
|
50
|
+
react_1.default.createElement("div", { className: "col-md-4" },
|
|
51
|
+
react_1.default.createElement(Text_1.default, { type: Text_1.TextType.Small, bold: true }, label)),
|
|
52
|
+
react_1.default.createElement("div", { className: "col-md-8" },
|
|
53
|
+
component,
|
|
54
|
+
!!error && (react_1.default.createElement("p", { className: "text-small", style: { color: '#ED4362' } }, error.message)),
|
|
55
|
+
!!hint && (react_1.default.createElement(Text_1.default, { type: Text_1.TextType.Label, color: Color_1.Color.Grey }, hint)))));
|
|
56
|
+
};
|
|
57
|
+
const AccountChangePasswordPage = () => {
|
|
58
|
+
const { loading: isLoadingMember, changePassword } = (0, react_1.useContext)(contexts_1.AuthenticationContext);
|
|
59
|
+
const { hotel } = (0, hooks_1.useCurrentHotel)();
|
|
60
|
+
const { t } = (0, react_i18next_1.useTranslation)();
|
|
61
|
+
const { trigger, watch, register, formState: { errors, isDirty }, handleSubmit, } = (0, react_hook_form_1.useForm)({
|
|
62
|
+
mode: 'onChange',
|
|
63
|
+
reValidateMode: 'onChange',
|
|
64
|
+
defaultValues: {
|
|
65
|
+
currentPassword: '',
|
|
66
|
+
newPassword: '',
|
|
67
|
+
confirmPassword: '',
|
|
68
|
+
},
|
|
69
|
+
});
|
|
70
|
+
const newPasswordWatch = watch('newPassword');
|
|
71
|
+
(0, react_1.useEffect)(() => {
|
|
72
|
+
trigger('confirmPassword');
|
|
73
|
+
}, [newPasswordWatch, trigger]);
|
|
74
|
+
const getErrorValidationClass = (name) => (errors[name] ? 'error' : undefined);
|
|
75
|
+
const [alert, setAlert] = (0, react_1.useState)(null);
|
|
76
|
+
const notificationMap = {
|
|
77
|
+
[contexts_1.CognitoLoginState.Success]: {
|
|
78
|
+
type: Alert_1.AlertType.Success,
|
|
79
|
+
icon: Icon_1.IconType.Check,
|
|
80
|
+
message: t(Translation_1.Translation.UserPortal.ChangePassword.ChangePasswordSuccessfully),
|
|
81
|
+
},
|
|
82
|
+
[contexts_1.CognitoLoginState.NotAuthorizedException]: {
|
|
83
|
+
type: Alert_1.AlertType.Danger,
|
|
84
|
+
icon: Icon_1.IconType.Error,
|
|
85
|
+
message: t(Translation_1.Translation.UserPortal.ChangePassword.NotAuthorizedException),
|
|
86
|
+
},
|
|
87
|
+
[contexts_1.CognitoLoginState.LimitExceededException]: {
|
|
88
|
+
type: Alert_1.AlertType.Danger,
|
|
89
|
+
icon: Icon_1.IconType.Error,
|
|
90
|
+
message: t(Translation_1.Translation.UserPortal.ChangePassword.LimitExceededException),
|
|
91
|
+
},
|
|
92
|
+
};
|
|
93
|
+
const onChangePassword = ({ currentPassword, newPassword }) => {
|
|
94
|
+
setAlert(null);
|
|
95
|
+
changePassword === null || changePassword === void 0 ? void 0 : changePassword(currentPassword, newPassword, { hotel }).then((state) => {
|
|
96
|
+
if (state) {
|
|
97
|
+
const notification = notificationMap[state];
|
|
98
|
+
if (notification) {
|
|
99
|
+
setAlert(notification);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
});
|
|
103
|
+
};
|
|
104
|
+
const saveButtonDisabled = !isDirty || isLoadingMember || !!Object.keys(errors).length;
|
|
105
|
+
return (react_1.default.createElement(react_1.default.Fragment, null,
|
|
106
|
+
react_1.default.createElement("div", { className: "u-marg-top--heavy@m u-marg-top@- u-marg-bottom--heavy" },
|
|
107
|
+
react_1.default.createElement(react_router_dom_1.Link, { to: AccountRoutes_1.AccountRoutes.ProfileDetails.path },
|
|
108
|
+
react_1.default.createElement(BEButton_1.default, { isText: true, icon: Icon_1.IconType.ArrowLeft, size: "small" }, t(Translation_1.Translation.UserPortal.ChangePassword.BackToProfile)))),
|
|
109
|
+
react_1.default.createElement("div", { className: "u-marg-bottom--heavy@m" },
|
|
110
|
+
react_1.default.createElement(Headline_1.default, { size: "extra-large", bold: true }, t(Translation_1.Translation.Navigation.Menu.ChangePassword))),
|
|
111
|
+
react_1.default.createElement("div", { className: "u-marg-bottom--heavy@m" },
|
|
112
|
+
react_1.default.createElement(AutoAutoHeight_1.default, { open: !!alert },
|
|
113
|
+
react_1.default.createElement("div", { className: "row" },
|
|
114
|
+
react_1.default.createElement("div", { className: "col-md-8" },
|
|
115
|
+
react_1.default.createElement(Alert_1.default, { type: alert === null || alert === void 0 ? void 0 : alert.type, icon: alert === null || alert === void 0 ? void 0 : alert.icon },
|
|
116
|
+
react_1.default.createElement(Text_1.default, { type: Text_1.TextType.Small }, alert === null || alert === void 0 ? void 0 : alert.message)))))),
|
|
117
|
+
react_1.default.createElement("form", { onSubmit: handleSubmit(onChangePassword) },
|
|
118
|
+
react_1.default.createElement("div", { className: "row" },
|
|
119
|
+
react_1.default.createElement("div", { className: "col-md-8" },
|
|
120
|
+
react_1.default.createElement("div", null,
|
|
121
|
+
react_1.default.createElement(LabelAndInputGroup, { label: t(Translation_1.Translation.UserPortal.ChangePassword.Field.CurrentPassword), component: react_1.default.createElement(PasswordBox_1.PasswordBox, Object.assign({ placeholder: "\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022" }, register('currentPassword', {
|
|
122
|
+
pattern: (0, Validation_1.makePasswordPatternRule)(t),
|
|
123
|
+
required: (0, Validation_1.makeRequiredRule)(t)(true, t(Translation_1.Translation.UserPortal.ChangePassword.Field.CurrentPassword)),
|
|
124
|
+
}), { validationStatus: getErrorValidationClass('currentPassword') })), error: errors.currentPassword }),
|
|
125
|
+
react_1.default.createElement(LabelAndInputGroup, { label: t(Translation_1.Translation.UserPortal.ChangePassword.Field.NewPassword), component: react_1.default.createElement(PasswordBox_1.PasswordBox, Object.assign({ placeholder: "\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022" }, register('newPassword', {
|
|
126
|
+
pattern: (0, Validation_1.makePasswordPatternRule)(t),
|
|
127
|
+
required: (0, Validation_1.makeRequiredRule)(t)(true, t(Translation_1.Translation.UserPortal.ChangePassword.Field.NewPassword)),
|
|
128
|
+
}), { validationStatus: getErrorValidationClass('newPassword') })), error: errors.newPassword }),
|
|
129
|
+
react_1.default.createElement(LabelAndInputGroup, { label: t(Translation_1.Translation.UserPortal.ChangePassword.Field.ConfirmPassword), component: react_1.default.createElement(PasswordBox_1.PasswordBox, Object.assign({ placeholder: "\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022" }, register('confirmPassword', {
|
|
130
|
+
required: (0, Validation_1.makeRequiredRule)(t)(!!newPasswordWatch, t(Translation_1.Translation.Step.Confirmation.Inputs.ConfirmPassword)),
|
|
131
|
+
validate: {
|
|
132
|
+
isSame: (0, Validation_1.isPasswordMatch)(t)(newPasswordWatch),
|
|
133
|
+
},
|
|
134
|
+
}), { validationStatus: getErrorValidationClass('confirmPassword') })), error: errors.confirmPassword })))),
|
|
135
|
+
react_1.default.createElement("div", { className: "row" },
|
|
136
|
+
react_1.default.createElement("div", { className: "col-md-8" },
|
|
137
|
+
react_1.default.createElement("div", { className: "u-flex justify-content-start u-marg-top--heavy" },
|
|
138
|
+
react_1.default.createElement(react_router_dom_1.Link, { to: "/account/home", className: "u-marg-right" },
|
|
139
|
+
react_1.default.createElement(BEButton_1.default, null, t(Translation_1.Translation.Misc.Cancel))),
|
|
140
|
+
react_1.default.createElement(BEButton_1.default, { disabled: saveButtonDisabled, isLoading: isLoadingMember, primary: true, filled: true, htmlType: "submit" }, t(Translation_1.Translation.Misc.Save))))))));
|
|
141
|
+
};
|
|
142
|
+
exports.AccountChangePasswordPage = AccountChangePasswordPage;
|
|
143
|
+
//# sourceMappingURL=AccountChangePasswordPage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AccountChangePasswordPage.js","sourceRoot":"/","sources":["src/pages/account/ChangePassword/AccountChangePasswordPage.tsx"],"names":[],"mappings":"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","sourcesContent":["import { AuthenticationContext, CognitoLoginState, IMemberChangePassword } from '@frontend/contexts';\nimport { useCurrentHotel } from '@frontend/hooks';\nimport React, { useContext, useEffect, useState } from 'react';\nimport { FieldError, useForm } from 'react-hook-form';\nimport { useTranslation } from 'react-i18next';\nimport { Link } from 'react-router-dom';\nimport { Translation } from 'translations/Translation';\n\nimport BEButton from '@/components/generic/BEButton';\nimport Headline from '@/components/generic/Headline';\nimport { IconType } from '@/components/generic/Icon/Icon';\nimport { PasswordBox } from '@/components/generic/PasswordBox/PasswordBox';\nimport Text, { TextType } from '@/components/generic/Text';\nimport { Color } from '@/util/Color';\nimport { isPasswordMatch, makePasswordPatternRule, makeRequiredRule } from '@/util/Validation';\n\nimport AutoAutoHeight from '../../../animations/AutoAutoHeight';\nimport Alert, { AlertType } from '../../../components/generic/Alert';\nimport { AccountRoutes } from '../AccountRoutes';\n\ntype LabelAndInputGroupProps = {\n component: React.ReactNode;\n label: string;\n hint?: string;\n error?: FieldError;\n};\n\nconst LabelAndInputGroup = (props: LabelAndInputGroupProps) => {\n const { label, component, hint, error } = props;\n return (\n <div className=\"row u-marg-bottom--heavy\">\n <div className=\"col-md-4\">\n <Text type={TextType.Small} bold>\n {label}\n </Text>\n </div>\n <div className=\"col-md-8\">\n {component}\n {!!error && (\n <p className=\"text-small\" style={{ color: '#ED4362' }}>\n {error.message}\n </p>\n )}\n\n {!!hint && (\n <Text type={TextType.Label} color={Color.Grey}>\n {hint}\n </Text>\n )}\n </div>\n </div>\n );\n};\n\ntype FormValues = IMemberChangePassword;\n\nexport const AccountChangePasswordPage = () => {\n const { loading: isLoadingMember, changePassword } = useContext(AuthenticationContext);\n const { hotel } = useCurrentHotel();\n const { t } = useTranslation();\n\n const {\n trigger,\n watch,\n register,\n formState: { errors, isDirty },\n handleSubmit,\n } = useForm<FormValues>({\n mode: 'onChange',\n reValidateMode: 'onChange',\n defaultValues: {\n currentPassword: '',\n newPassword: '',\n confirmPassword: '',\n } as FormValues,\n });\n\n const newPasswordWatch = watch('newPassword');\n\n useEffect(() => {\n trigger('confirmPassword');\n }, [newPasswordWatch, trigger]);\n\n const getErrorValidationClass = (name: keyof FormValues): 'error' | undefined => (errors[name] ? 'error' : undefined);\n\n const [alert, setAlert] = useState<{ type: AlertType; icon: IconType; message: string } | null>(null);\n const notificationMap: Partial<Record<CognitoLoginState, { type: AlertType; icon: IconType; message: string }>> = {\n [CognitoLoginState.Success]: {\n type: AlertType.Success,\n icon: IconType.Check,\n message: t(Translation.UserPortal.ChangePassword.ChangePasswordSuccessfully),\n },\n [CognitoLoginState.NotAuthorizedException]: {\n type: AlertType.Danger,\n icon: IconType.Error,\n message: t(Translation.UserPortal.ChangePassword.NotAuthorizedException),\n },\n [CognitoLoginState.LimitExceededException]: {\n type: AlertType.Danger,\n icon: IconType.Error,\n message: t(Translation.UserPortal.ChangePassword.LimitExceededException),\n },\n };\n\n const onChangePassword = ({ currentPassword, newPassword }: FormValues) => {\n setAlert(null);\n changePassword?.(currentPassword, newPassword, { hotel }).then((state: CognitoLoginState | undefined) => {\n if (state) {\n const notification = notificationMap[state];\n if (notification) {\n setAlert(notification);\n }\n }\n });\n };\n\n const saveButtonDisabled = !isDirty || isLoadingMember || !!Object.keys(errors).length;\n\n return (\n <>\n <div className=\"u-marg-top--heavy@m u-marg-top@- u-marg-bottom--heavy\">\n <Link to={AccountRoutes.ProfileDetails.path}>\n <BEButton isText icon={IconType.ArrowLeft} size=\"small\">\n {t(Translation.UserPortal.ChangePassword.BackToProfile)}\n </BEButton>\n </Link>\n </div>\n <div className=\"u-marg-bottom--heavy@m\">\n <Headline size=\"extra-large\" bold>\n {t(Translation.Navigation.Menu.ChangePassword)}\n </Headline>\n </div>\n <div className=\"u-marg-bottom--heavy@m\">\n <AutoAutoHeight open={!!alert}>\n <div className=\"row\">\n <div className=\"col-md-8\">\n <Alert type={alert?.type} icon={alert?.icon}>\n <Text type={TextType.Small}>{alert?.message}</Text>\n </Alert>\n </div>\n </div>\n </AutoAutoHeight>\n </div>\n <form onSubmit={handleSubmit(onChangePassword)}>\n <div className=\"row\">\n <div className=\"col-md-8\">\n <div>\n <LabelAndInputGroup\n label={t(Translation.UserPortal.ChangePassword.Field.CurrentPassword)}\n component={\n <PasswordBox\n placeholder=\"•••••••••••••••\"\n {...register('currentPassword', {\n pattern: makePasswordPatternRule(t),\n required: makeRequiredRule(t)(true, t(Translation.UserPortal.ChangePassword.Field.CurrentPassword)),\n })}\n validationStatus={getErrorValidationClass('currentPassword')}\n />\n }\n error={errors.currentPassword}\n />\n <LabelAndInputGroup\n label={t(Translation.UserPortal.ChangePassword.Field.NewPassword)}\n component={\n <PasswordBox\n placeholder=\"•••••••••••••••\"\n {...register('newPassword', {\n pattern: makePasswordPatternRule(t),\n required: makeRequiredRule(t)(true, t(Translation.UserPortal.ChangePassword.Field.NewPassword)),\n })}\n validationStatus={getErrorValidationClass('newPassword')}\n />\n }\n error={errors.newPassword}\n />\n <LabelAndInputGroup\n label={t(Translation.UserPortal.ChangePassword.Field.ConfirmPassword)}\n component={\n <PasswordBox\n placeholder=\"•••••••••••••••\"\n {...register('confirmPassword', {\n required: makeRequiredRule(t)(!!newPasswordWatch, t(Translation.Step.Confirmation.Inputs.ConfirmPassword)),\n validate: {\n isSame: isPasswordMatch(t)(newPasswordWatch),\n },\n })}\n validationStatus={getErrorValidationClass('confirmPassword')}\n />\n }\n error={errors.confirmPassword}\n />\n </div>\n </div>\n </div>\n <div className=\"row\">\n <div className=\"col-md-8\">\n <div className=\"u-flex justify-content-start u-marg-top--heavy\">\n <Link to=\"/account/home\" className=\"u-marg-right\">\n <BEButton>{t(Translation.Misc.Cancel)}</BEButton>\n </Link>\n <BEButton disabled={saveButtonDisabled} isLoading={isLoadingMember} primary filled htmlType=\"submit\">\n {t(Translation.Misc.Save)}\n </BEButton>\n </div>\n </div>\n </div>\n </form>\n </>\n );\n};\n"]}
|
|
@@ -49,7 +49,6 @@ const EnhancedPhoneNumberField_1 = __importDefault(require("../../../components/
|
|
|
49
49
|
const Headline_1 = __importDefault(require("../../../components/generic/Headline"));
|
|
50
50
|
const Icon_1 = require("../../../components/generic/Icon/Icon");
|
|
51
51
|
const LineBreak_1 = __importDefault(require("../../../components/generic/LineBreak"));
|
|
52
|
-
const PasswordBox_1 = require("../../../components/generic/PasswordBox/PasswordBox");
|
|
53
52
|
const Text_1 = __importStar(require("../../../components/generic/Text"));
|
|
54
53
|
const TextBox_1 = __importDefault(require("../../../components/generic/TextBox"));
|
|
55
54
|
const StepConfirmationCountrySelector_1 = __importDefault(require("../../../components/steps/confirmation/StepConfirmationCountrySelector"));
|
|
@@ -70,7 +69,7 @@ const AccountDetailsProfilePage = () => {
|
|
|
70
69
|
const { roomstayMember, loading: isLoadingMember, updateMemberDetails } = (0, react_1.useContext)(contexts_1.RoomstayMemberContext);
|
|
71
70
|
const notifications = (0, react_1.useContext)(contexts_1.NotificationContext);
|
|
72
71
|
const { t } = (0, react_i18next_1.useTranslation)();
|
|
73
|
-
const {
|
|
72
|
+
const { register, formState: { errors, isDirty }, handleSubmit, reset: resetFormValues, control, } = (0, react_hook_form_1.useForm)({
|
|
74
73
|
mode: 'onChange',
|
|
75
74
|
});
|
|
76
75
|
const getErrorValidationClass = (name) => (errors[name] ? 'error' : undefined);
|
|
@@ -113,16 +112,6 @@ const AccountDetailsProfilePage = () => {
|
|
|
113
112
|
}, validationStatus: getErrorValidationClass('phoneNumber') })));
|
|
114
113
|
} }), error: errors.phoneNumber }),
|
|
115
114
|
react_1.default.createElement(LineBreak_1.default, null),
|
|
116
|
-
react_1.default.createElement(LabelAndInputGroup, { label: t(Translation_1.Translation.Step.Confirmation.Inputs.Password), component: react_1.default.createElement(PasswordBox_1.PasswordBox, Object.assign({ placeholder: "\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022" }, register('password', {
|
|
117
|
-
pattern: (0, Validation_1.makePasswordPatternRule)(t),
|
|
118
|
-
}), { validationStatus: getErrorValidationClass('password') })), hint: "At least 8 characters long, case sensitive, can contain all symbols., no spaces.", error: errors.password }),
|
|
119
|
-
react_1.default.createElement(LabelAndInputGroup, { label: t(Translation_1.Translation.Step.Confirmation.Inputs.ConfirmPassword), component: react_1.default.createElement(PasswordBox_1.PasswordBox, Object.assign({ placeholder: "\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022" }, register('passwordRepeat', {
|
|
120
|
-
required: (0, Validation_1.makeRequiredRule)(t)(!!watch('password'), t(Translation_1.Translation.Step.Confirmation.Inputs.ConfirmPassword)),
|
|
121
|
-
validate: {
|
|
122
|
-
isSame: (0, Validation_1.isPasswordMatch)(t)(watch('password')),
|
|
123
|
-
},
|
|
124
|
-
}), { validationStatus: getErrorValidationClass('passwordRepeat') })), error: errors.passwordRepeat }),
|
|
125
|
-
react_1.default.createElement(LineBreak_1.default, null),
|
|
126
115
|
react_1.default.createElement(LabelAndInputGroup, { label: t(Translation_1.Translation.Step.Confirmation.Inputs.Address), component: react_1.default.createElement(TextBox_1.default, Object.assign({}, register('address.address'))) }),
|
|
127
116
|
react_1.default.createElement(LabelAndInputGroup, { label: t(Translation_1.Translation.Step.Confirmation.Inputs.City), component: react_1.default.createElement(TextBox_1.default, Object.assign({}, register('address.city'))) }),
|
|
128
117
|
react_1.default.createElement(LabelAndInputGroup, { label: t(Translation_1.Translation.Step.Confirmation.Inputs.PostCode), component: react_1.default.createElement(TextBox_1.default, Object.assign({}, register('address.zip'))) }),
|
|
@@ -130,10 +119,16 @@ const AccountDetailsProfilePage = () => {
|
|
|
130
119
|
const { ref } = field, rest = __rest(field, ["ref"]);
|
|
131
120
|
return react_1.default.createElement(StepConfirmationCountrySelector_1.default, Object.assign({}, rest));
|
|
132
121
|
} }) })))),
|
|
133
|
-
react_1.default.createElement("div", { className: "
|
|
134
|
-
react_1.default.createElement(
|
|
135
|
-
react_1.default.createElement(
|
|
136
|
-
|
|
122
|
+
react_1.default.createElement("div", { className: "row" },
|
|
123
|
+
react_1.default.createElement("div", { className: "col-md-8" },
|
|
124
|
+
react_1.default.createElement("div", { className: "u-flex u-marg-top--heavy" },
|
|
125
|
+
react_1.default.createElement("div", { className: "u-flex" },
|
|
126
|
+
react_1.default.createElement(react_router_dom_1.Link, { to: "/account/home", className: "u-marg-right" },
|
|
127
|
+
react_1.default.createElement(BEButton_1.default, null, t(Translation_1.Translation.Misc.Cancel))),
|
|
128
|
+
react_1.default.createElement(BEButton_1.default, { disabled: saveButtonDisabled, isLoading: isLoadingMember, primary: true, filled: true, htmlType: "submit", className: "u-marg-right" }, t(Translation_1.Translation.Misc.SaveAllChanges))),
|
|
129
|
+
react_1.default.createElement("div", { className: "u-flex-grow" },
|
|
130
|
+
react_1.default.createElement(react_router_dom_1.Link, { to: AccountRoutes_1.AccountRoutes.ChangePassword.path },
|
|
131
|
+
react_1.default.createElement(BEButton_1.default, null, t(Translation_1.Translation.Navigation.Menu.ChangePassword))))))))));
|
|
137
132
|
};
|
|
138
133
|
exports.AccountDetailsProfilePage = AccountDetailsProfilePage;
|
|
139
134
|
//# sourceMappingURL=AccountDetailsProfilePage.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AccountDetailsProfilePage.js","sourceRoot":"/","sources":["src/pages/account/Details/AccountDetailsProfilePage.tsx"],"names":[],"mappings":"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","sourcesContent":["import { NotificationContext, RoomstayMemberContext } from '@frontend/contexts';\nimport type { IRoomstayMember } from '@roomstay/core';\nimport React, { useContext, useEffect } from 'react';\nimport { Controller, FieldError, useForm } from 'react-hook-form';\nimport { useTranslation } from 'react-i18next';\nimport { Link } from 'react-router-dom';\nimport { Translation } from 'translations/Translation';\n\nimport BEButton from '@/components/generic/BEButton';\nimport EnhancedPhoneNumberField from '@/components/generic/custom/EnhancedPhoneNumberField/EnhancedPhoneNumberField';\nimport Headline from '@/components/generic/Headline';\nimport { IconType } from '@/components/generic/Icon/Icon';\nimport LineBreak from '@/components/generic/LineBreak';\nimport { PasswordBox } from '@/components/generic/PasswordBox/PasswordBox';\nimport Text, { TextType } from '@/components/generic/Text';\nimport TextBox from '@/components/generic/TextBox';\nimport StepConfirmationCountrySelector from '@/components/steps/confirmation/StepConfirmationCountrySelector';\nimport { Color } from '@/util/Color';\nimport { isPasswordMatch, makePasswordPatternRule, makePhonePatternRule, makeRequiredRule } from '@/util/Validation';\n\nimport { AccountRoutes } from '../AccountRoutes';\n\ntype LabelAndInputGroupProps = {\n component: React.ReactNode;\n label: string;\n hint?: string;\n error?: FieldError;\n};\n\nconst LabelAndInputGroup = (props: LabelAndInputGroupProps) => {\n const { label, component, hint, error } = props;\n return (\n <div className=\"row u-marg-bottom--heavy\">\n <div className=\"col-md-4\">\n <Text type={TextType.Small} bold>\n {label}\n </Text>\n </div>\n <div className=\"col-md-8\">\n {component}\n {!!error && (\n <p className=\"text-small\" style={{ color: '#ED4362' }}>\n {error.message}\n </p>\n )}\n\n {!!hint && (\n <Text type={TextType.Label} color={Color.Grey}>\n {hint}\n </Text>\n )}\n </div>\n </div>\n );\n};\n\ntype FormValues = IRoomstayMember & {\n password: string;\n passwordRepeat: string;\n};\n\nexport const AccountDetailsProfilePage = () => {\n const { roomstayMember, loading: isLoadingMember, updateMemberDetails } = useContext(RoomstayMemberContext);\n const notifications = useContext(NotificationContext);\n\n const { t } = useTranslation();\n\n const {\n watch,\n register,\n formState: { errors, isDirty },\n handleSubmit,\n reset: resetFormValues,\n control,\n } = useForm<FormValues>({\n mode: 'onChange',\n });\n\n const getErrorValidationClass = (name: keyof FormValues): 'error' | undefined => (errors[name] ? 'error' : undefined);\n\n useEffect(() => {\n if (roomstayMember) {\n resetFormValues(roomstayMember);\n }\n }, [roomstayMember]);\n\n const onSaveDetails = (values: FormValues) => {\n updateMemberDetails?.(values).then(() => {\n notifications.addNotification({\n icon: IconType.Check,\n children: <Text>{t(Translation.UserPortal.ProfileScreen.DetailsSavedSuccessfully)}</Text>,\n });\n });\n };\n\n const saveButtonDisabled = !isDirty || isLoadingMember || !!Object.keys(errors).length;\n\n return (\n <>\n <div className=\"u-marg-top--heavy@m u-marg-top@- u-marg-bottom--heavy\">\n <Link to={AccountRoutes.Home.path}>\n <BEButton isText icon={IconType.ArrowLeft} size=\"small\">\n {t(Translation.Reservation.BackToYourAccount)}\n </BEButton>\n </Link>\n </div>\n <div className=\"u-marg-bottom--heavy@m\">\n <Headline size=\"extra-large\" bold>\n {t(Translation.Navigation.Menu.ProfileInformation)}\n </Headline>\n </div>\n <form onSubmit={handleSubmit(onSaveDetails)}>\n <div className=\"row\">\n <div className=\"col-md-8\">\n <div>\n <LabelAndInputGroup\n label={t(Translation.Step.Confirmation.Inputs.Forename)}\n component={\n <TextBox\n validationStatus={getErrorValidationClass('forename')}\n {...register('forename', {\n required: makeRequiredRule(t)(true, t(Translation.Step.Confirmation.Inputs.Forename)),\n })}\n />\n }\n error={errors.forename}\n />\n <LabelAndInputGroup\n label={t(Translation.Step.Confirmation.Inputs.Surname)}\n component={\n <TextBox\n validationStatus={getErrorValidationClass('surname')}\n {...register('surname', {\n required: makeRequiredRule(t)(true, t(Translation.Step.Confirmation.Inputs.Surname)),\n })}\n />\n }\n error={errors.surname}\n />\n <LabelAndInputGroup\n label={t(Translation.Step.Confirmation.Inputs.Email)}\n component={<TextBox validationStatus={getErrorValidationClass('email')} inputProps={{ disabled: true }} value={roomstayMember?.email} />}\n error={errors.email}\n />\n <LabelAndInputGroup\n label={t(Translation.Step.Confirmation.Inputs.Phone)}\n component={\n <Controller\n rules={{\n pattern: makePhonePatternRule(t),\n }}\n control={control}\n name=\"phoneNumber\"\n render={({ field }) => {\n return (\n <EnhancedPhoneNumberField\n {...field}\n onChange={(e: any) => {\n field.onChange(e);\n }}\n validationStatus={getErrorValidationClass('phoneNumber')}\n />\n );\n }}\n />\n }\n error={errors.phoneNumber}\n />\n\n <LineBreak />\n\n <LabelAndInputGroup\n label={t(Translation.Step.Confirmation.Inputs.Password)}\n component={\n <PasswordBox\n placeholder=\"•••••••••••••••\"\n {...register('password', {\n pattern: makePasswordPatternRule(t),\n })}\n validationStatus={getErrorValidationClass('password')}\n />\n }\n hint=\"At least 8 characters long, case sensitive, can contain all symbols., no spaces.\"\n error={errors.password}\n />\n <LabelAndInputGroup\n label={t(Translation.Step.Confirmation.Inputs.ConfirmPassword)}\n component={\n <PasswordBox\n placeholder=\"•••••••••••••••\"\n {...register('passwordRepeat', {\n required: makeRequiredRule(t)(!!watch('password'), t(Translation.Step.Confirmation.Inputs.ConfirmPassword)),\n validate: {\n isSame: isPasswordMatch(t)(watch('password')),\n },\n })}\n validationStatus={getErrorValidationClass('passwordRepeat')}\n />\n }\n error={errors.passwordRepeat}\n />\n\n <LineBreak />\n\n <LabelAndInputGroup label={t(Translation.Step.Confirmation.Inputs.Address)} component={<TextBox {...register('address.address')} />} />\n <LabelAndInputGroup label={t(Translation.Step.Confirmation.Inputs.City)} component={<TextBox {...register('address.city')} />} />\n <LabelAndInputGroup label={t(Translation.Step.Confirmation.Inputs.PostCode)} component={<TextBox {...register('address.zip')} />} />\n <LabelAndInputGroup\n label={t(Translation.Step.Confirmation.Inputs.Country)}\n component={\n <Controller\n control={control}\n name=\"address.country\"\n render={({ field }) => {\n const { ref, ...rest } = field;\n return <StepConfirmationCountrySelector {...rest} />;\n }}\n />\n }\n />\n </div>\n </div>\n </div>\n\n <div className=\"u-flex justify-content-start u-marg-top--heavy\">\n <Link to=\"/account/home\" className=\"u-marg-right\">\n <BEButton>{t(Translation.Misc.Cancel)}</BEButton>\n </Link>\n <BEButton disabled={saveButtonDisabled} isLoading={isLoadingMember} primary filled htmlType=\"submit\">\n {t(Translation.Misc.SaveAllChanges)}\n </BEButton>\n </div>\n </form>\n </>\n );\n};\n"]}
|
|
1
|
+
{"version":3,"file":"AccountDetailsProfilePage.js","sourceRoot":"/","sources":["src/pages/account/Details/AccountDetailsProfilePage.tsx"],"names":[],"mappings":"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","sourcesContent":["import { NotificationContext, RoomstayMemberContext } from '@frontend/contexts';\nimport type { IRoomstayMember } from '@roomstay/core';\nimport React, { useContext, useEffect } from 'react';\nimport { Controller, FieldError, useForm } from 'react-hook-form';\nimport { useTranslation } from 'react-i18next';\nimport { Link } from 'react-router-dom';\nimport { Translation } from 'translations/Translation';\n\nimport BEButton from '@/components/generic/BEButton';\nimport EnhancedPhoneNumberField from '@/components/generic/custom/EnhancedPhoneNumberField/EnhancedPhoneNumberField';\nimport Headline from '@/components/generic/Headline';\nimport { IconType } from '@/components/generic/Icon/Icon';\nimport LineBreak from '@/components/generic/LineBreak';\nimport Text, { TextType } from '@/components/generic/Text';\nimport TextBox from '@/components/generic/TextBox';\nimport StepConfirmationCountrySelector from '@/components/steps/confirmation/StepConfirmationCountrySelector';\nimport { Color } from '@/util/Color';\nimport { makePhonePatternRule, makeRequiredRule } from '@/util/Validation';\n\nimport { AccountRoutes } from '../AccountRoutes';\n\ntype LabelAndInputGroupProps = {\n component: React.ReactNode;\n label: string;\n hint?: string;\n error?: FieldError;\n};\n\nconst LabelAndInputGroup = (props: LabelAndInputGroupProps) => {\n const { label, component, hint, error } = props;\n return (\n <div className=\"row u-marg-bottom--heavy\">\n <div className=\"col-md-4\">\n <Text type={TextType.Small} bold>\n {label}\n </Text>\n </div>\n <div className=\"col-md-8\">\n {component}\n {!!error && (\n <p className=\"text-small\" style={{ color: '#ED4362' }}>\n {error.message}\n </p>\n )}\n\n {!!hint && (\n <Text type={TextType.Label} color={Color.Grey}>\n {hint}\n </Text>\n )}\n </div>\n </div>\n );\n};\n\ntype FormValues = IRoomstayMember;\n\nexport const AccountDetailsProfilePage = () => {\n const { roomstayMember, loading: isLoadingMember, updateMemberDetails } = useContext(RoomstayMemberContext);\n const notifications = useContext(NotificationContext);\n\n const { t } = useTranslation();\n\n const {\n register,\n formState: { errors, isDirty },\n handleSubmit,\n reset: resetFormValues,\n control,\n } = useForm<FormValues>({\n mode: 'onChange',\n });\n\n const getErrorValidationClass = (name: keyof FormValues): 'error' | undefined => (errors[name] ? 'error' : undefined);\n\n useEffect(() => {\n if (roomstayMember) {\n resetFormValues(roomstayMember);\n }\n }, [roomstayMember]);\n\n const onSaveDetails = (values: FormValues) => {\n updateMemberDetails?.(values).then(() => {\n notifications.addNotification({\n icon: IconType.Check,\n children: <Text>{t(Translation.UserPortal.ProfileScreen.DetailsSavedSuccessfully)}</Text>,\n });\n });\n };\n\n const saveButtonDisabled = !isDirty || isLoadingMember || !!Object.keys(errors).length;\n\n return (\n <>\n <div className=\"u-marg-top--heavy@m u-marg-top@- u-marg-bottom--heavy\">\n <Link to={AccountRoutes.Home.path}>\n <BEButton isText icon={IconType.ArrowLeft} size=\"small\">\n {t(Translation.Reservation.BackToYourAccount)}\n </BEButton>\n </Link>\n </div>\n <div className=\"u-marg-bottom--heavy@m\">\n <Headline size=\"extra-large\" bold>\n {t(Translation.Navigation.Menu.ProfileInformation)}\n </Headline>\n </div>\n <form onSubmit={handleSubmit(onSaveDetails)}>\n <div className=\"row\">\n <div className=\"col-md-8\">\n <div>\n <LabelAndInputGroup\n label={t(Translation.Step.Confirmation.Inputs.Forename)}\n component={\n <TextBox\n validationStatus={getErrorValidationClass('forename')}\n {...register('forename', {\n required: makeRequiredRule(t)(true, t(Translation.Step.Confirmation.Inputs.Forename)),\n })}\n />\n }\n error={errors.forename}\n />\n <LabelAndInputGroup\n label={t(Translation.Step.Confirmation.Inputs.Surname)}\n component={\n <TextBox\n validationStatus={getErrorValidationClass('surname')}\n {...register('surname', {\n required: makeRequiredRule(t)(true, t(Translation.Step.Confirmation.Inputs.Surname)),\n })}\n />\n }\n error={errors.surname}\n />\n <LabelAndInputGroup\n label={t(Translation.Step.Confirmation.Inputs.Email)}\n component={<TextBox validationStatus={getErrorValidationClass('email')} inputProps={{ disabled: true }} value={roomstayMember?.email} />}\n error={errors.email}\n />\n <LabelAndInputGroup\n label={t(Translation.Step.Confirmation.Inputs.Phone)}\n component={\n <Controller\n rules={{\n pattern: makePhonePatternRule(t),\n }}\n control={control}\n name=\"phoneNumber\"\n render={({ field }) => {\n return (\n <EnhancedPhoneNumberField\n {...field}\n onChange={(e: any) => {\n field.onChange(e);\n }}\n validationStatus={getErrorValidationClass('phoneNumber')}\n />\n );\n }}\n />\n }\n error={errors.phoneNumber}\n />\n\n <LineBreak />\n\n <LabelAndInputGroup label={t(Translation.Step.Confirmation.Inputs.Address)} component={<TextBox {...register('address.address')} />} />\n <LabelAndInputGroup label={t(Translation.Step.Confirmation.Inputs.City)} component={<TextBox {...register('address.city')} />} />\n <LabelAndInputGroup label={t(Translation.Step.Confirmation.Inputs.PostCode)} component={<TextBox {...register('address.zip')} />} />\n <LabelAndInputGroup\n label={t(Translation.Step.Confirmation.Inputs.Country)}\n component={\n <Controller\n control={control}\n name=\"address.country\"\n render={({ field }) => {\n const { ref, ...rest } = field;\n return <StepConfirmationCountrySelector {...rest} />;\n }}\n />\n }\n />\n </div>\n </div>\n </div>\n <div className=\"row\">\n <div className=\"col-md-8\">\n <div className=\"u-flex u-marg-top--heavy\">\n <div className=\"u-flex\">\n <Link to=\"/account/home\" className=\"u-marg-right\">\n <BEButton>{t(Translation.Misc.Cancel)}</BEButton>\n </Link>\n <BEButton disabled={saveButtonDisabled} isLoading={isLoadingMember} primary filled htmlType=\"submit\" className=\"u-marg-right\">\n {t(Translation.Misc.SaveAllChanges)}\n </BEButton>\n </div>\n <div className=\"u-flex-grow\">\n <Link to={AccountRoutes.ChangePassword.path}>\n <BEButton>{t(Translation.Navigation.Menu.ChangePassword)}</BEButton>\n </Link>\n </div>\n </div>\n </div>\n </div>\n </form>\n </>\n );\n};\n"]}
|
|
@@ -43,6 +43,7 @@ const StepOneDateRangePicker_1 = __importDefault(require("../../../components/st
|
|
|
43
43
|
const StepOneDateRangePickerLegend_1 = __importDefault(require("../../../components/steps/date/StepOneDateRangePickerLegend"));
|
|
44
44
|
const StepOneNextStepButton_1 = __importDefault(require("../../../components/steps/date/StepOneNextStepButton"));
|
|
45
45
|
const StepOneStatusPeople_1 = __importDefault(require("../../../components/steps/date/StepOneStatusPeople"));
|
|
46
|
+
const BasketRow_1 = __importDefault(require("../../../models/BasketRow"));
|
|
46
47
|
const Color_1 = require("../../../util/Color");
|
|
47
48
|
const ScreenSize_1 = __importDefault(require("../../../util/ScreenSize"));
|
|
48
49
|
const BEMobileSummary = (0, react_1.lazy)(() => Promise.resolve().then(() => __importStar(require('../../../components/summary/BEMobileSummary'))));
|
|
@@ -54,6 +55,7 @@ const StepDate = () => {
|
|
|
54
55
|
const { hotel } = (0, hooks_1.useCurrentHotel)();
|
|
55
56
|
const { t } = (0, react_i18next_1.useTranslation)();
|
|
56
57
|
const peopleRef = (0, react_1.useRef)(null);
|
|
58
|
+
const { selectedBasketRow, addBasketRow } = basketContext;
|
|
57
59
|
(0, react_1.useEffect)(() => {
|
|
58
60
|
if (context.screenSize <= ScreenSize_1.default.Medium && basketContext.endDate) {
|
|
59
61
|
if (peopleRef) {
|
|
@@ -69,6 +71,11 @@ const StepDate = () => {
|
|
|
69
71
|
const event = new events_1.StepDateViewEvent();
|
|
70
72
|
raise(event);
|
|
71
73
|
}, []);
|
|
74
|
+
(0, react_1.useEffect)(() => {
|
|
75
|
+
if (!selectedBasketRow) {
|
|
76
|
+
addBasketRow(new BasketRow_1.default());
|
|
77
|
+
}
|
|
78
|
+
}, [selectedBasketRow]);
|
|
72
79
|
return (react_1.default.createElement("div", { className: "container" },
|
|
73
80
|
context.screenSize <= ScreenSize_1.default.Medium && react_1.default.createElement(BEMobileSummary, null),
|
|
74
81
|
context.screenSize >= ScreenSize_1.default.Large && (react_1.default.createElement(react_1.default.Fragment, null,
|