{"version":3,"file":"BuySubjectButton.chunk.4c767f061a0ed831e136.js","mappings":"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","sources":["webpack://Kristiania.Web/./Features/ApplicationApplets/Online/OnlineApplicationAppletContext.tsx","webpack://Kristiania.Web/./Features/ApplicationApplets/Online/OnlineApplicationForm/FormProgressState/v1/ApplicationFormProgressState.ts","webpack://Kristiania.Web/./Features/ApplicationApplets/Online/OnlineApplicationForm/FormProgressState/v4/ApplicationFormProgressState.ts","webpack://Kristiania.Web/./Features/ApplicationApplets/Online/OnlineApplicationForm/FormProgressState/v4/MapperV1.ts","webpack://Kristiania.Web/./Features/ApplicationApplets/Online/OnlineApplicationForm/FormProgressState/v2/ApplicationFormProgressState.ts","webpack://Kristiania.Web/./Features/ApplicationApplets/Online/OnlineApplicationForm/FormProgressState/v4/MapperV2.ts","webpack://Kristiania.Web/./Features/ApplicationApplets/Online/OnlineApplicationForm/FormProgressState/ApplicationFormProgressStateManager.ts","webpack://Kristiania.Web/./Features/ApplicationApplets/Online/OnlineApplicationForm/FormProgressState/v4/MapperV3.ts","webpack://Kristiania.Web/./Features/ApplicationApplets/Online/OnlineApplicationForm/useApplicationFormFlow.tsx","webpack://Kristiania.Web/./Features/ApplicationApplets/Shared/FormProgressBar/Online/OnlineProgress.ts","webpack://Kristiania.Web/./Features/OnlineApplication/Events/OnlineApplicationEvents.ts","webpack://Kristiania.Web/./Features/OnlineApplication/OnlineApplicationProcessState.ts","webpack://Kristiania.Web/./Features/Pages/OnlineStudyPage/Semester/ParentStudyViewModel.ts","webpack://Kristiania.Web/./Features/Partials/BuySubjectButton/BuySubjectButton.tsx","webpack://Kristiania.Web/./Features/Partials/BuySubjectButton/BuySubjectButton.module.css?a6f3","webpack://Kristiania.Web/./Features/Partials/GoogleTagManager/Analytics/OnlineAnalytics.ts"],"sourcesContent":["import * as React from 'react';\nimport type { OnlineApplicationAppletContextType } from './models';\n\nexport const OnlineApplicationAppletContext = React.createContext(\n {} as OnlineApplicationAppletContextType\n);\n","// All types are snapshots from the V1 form progress state in order to be independent of the auto-generated code and application logic.\n\nenum Page {\n OrderDetails = 'OrderDetails',\n Login = 'Login',\n Registration = 'Registration',\n PaymentOptions = 'PaymentOptions',\n Payment = 'Payment',\n StartDate = 'StartDate',\n Confirmation = 'Confirmation',\n}\n\ninterface Money {\n amount: number;\n currencyCode: string;\n currencySymbol: string;\n}\n\ninterface OnlineStudySubject {\n code: string;\n name: string;\n credits: number;\n creditsLabel: string;\n price: Money;\n url: string;\n startDate?: string;\n}\n\ninterface ParentStudy {\n code: string;\n}\n\ninterface OnlineApplicationChoice {\n subject: OnlineStudySubject;\n parentStudy: ParentStudy;\n}\n\ninterface OrderLineItem {\n choice: OnlineApplicationChoice;\n parentStudyCode: string;\n subjectCode: string;\n subjectName: string;\n subjectCredits: number;\n subjectCreditsLabel: string;\n subjectOriginalPrice: Money;\n startDate?: string;\n}\n\ninterface Installments {\n numberOfInstallments: number;\n}\n\nexport enum Payer {\n Self = 0,\n Other = 1,\n}\n\ninterface InvoiceOtherPayer {\n name: string;\n address: string;\n postalCode: string;\n organizationNumber: string;\n city: string;\n contactPersonName: string;\n contactPersonPhone: string;\n contactPersonEmail: string;\n}\n\ninterface InvoiceSelfPaid {\n additionalFee: Money;\n paymentDueDays: number;\n}\n\ninterface Invoice {\n payer: Payer;\n otherPayer?: InvoiceOtherPayer;\n selfPaid?: InvoiceSelfPaid;\n}\n\ninterface OnlineApplicationOrder {\n orderReference: string;\n orderLineItems: OrderLineItem[];\n payeeReference: string;\n isPaid: boolean;\n discountCode: string;\n totalPoints: number;\n totalScotcat: number;\n personalInfo: PersonalInfo;\n withLoanFund: boolean;\n isFree: boolean;\n installments?: Installments;\n invoice?: Invoice;\n creditCard?: object;\n totalPrice?: Money;\n originalPrice?: Money;\n totalDiscount?: Money;\n additionalFee?: Money;\n}\n\ninterface PaymentMethod {\n isSupportedByPayEx: boolean;\n isInvoicePaymentOptionEnabled: boolean;\n isInstallmentsPaymentOptionEnabled: boolean;\n isCreditCardPaymentOptionEnabled: boolean;\n priceType?: string;\n urlPart?: string;\n}\n\nexport interface PersonalInfo {\n firstName: string;\n lastName: string;\n personalNumber: string;\n phoneCountryCode: string;\n phoneNumber: string;\n email: string;\n address: string;\n postalCode: string;\n postOffice: string;\n privacyConsent: boolean;\n countryCode: string;\n repeatedEmail?: string;\n isFormerStudent?: boolean;\n}\n\nexport interface ApplicationFormProgressState {\n paymentMethod: PaymentMethod;\n onlineStudiesTermsConsent: boolean;\n dataProtectionConsent: boolean;\n order: Partial;\n activePage: Page;\n version: undefined;\n paymentResourceUri?: string;\n}\n","// All types are snapshots from the V4 form progress state in order to be independent of the auto-generated code and application logic.\n\nexport enum Payer {\n Self = 'self',\n Other = 'other',\n}\n\nenum Page {\n OrderDetails = 'OrderDetails',\n Login = 'Login',\n Registration = 'Registration',\n PaymentOptions = 'PaymentOptions',\n Payment = 'Payment',\n StartDate = 'StartDate',\n Confirmation = 'Confirmation',\n}\n\ninterface Money {\n amount: number;\n currencyCode: string;\n currencySymbol: string;\n}\n\ninterface OnlineStudySubject {\n code: string;\n name: string;\n educationCategories: string[];\n credits: number;\n creditsLabel: string;\n price: Money;\n url: string;\n startDate?: string;\n}\n\ninterface OrderedSubjectItem {\n subject: OnlineStudySubject;\n subjectCode: string;\n subjectName: string;\n subjectCredits: number;\n subjectCreditsLabel: string;\n subjectOriginalPrice: Money;\n startDate?: string;\n}\n\ninterface Installments {\n numberOfInstallments: number;\n}\n\ninterface InvoiceOtherPayer {\n name: string;\n address: string;\n postalCode: string;\n organizationNumber: string;\n city: string;\n contactPersonName: string;\n contactPersonPhone: string;\n contactPersonEmail: string;\n}\n\ninterface InvoiceSelfPaid {\n additionalFee: Money;\n paymentDueDays: number;\n}\n\ninterface Invoice {\n payer: Payer;\n otherPayer?: InvoiceOtherPayer;\n selfPaid?: InvoiceSelfPaid;\n}\n\ninterface OnlineApplicationOrder {\n orderReference: string;\n orderedSubjectItems: OrderedSubjectItem[];\n payeeReference: string;\n isPaid: boolean;\n discountCode: string;\n parentStudyCode: string;\n totalPoints: number;\n totalScotcat: number;\n personalInfo: PersonalInfo;\n withLoanFund: boolean;\n isFree: boolean;\n installments?: Installments;\n invoice?: Invoice;\n creditCard?: object;\n totalPrice?: Money;\n originalPrice?: Money;\n totalDiscount?: Money;\n additionalFee?: Money;\n}\n\ninterface PaymentMethod {\n isSupportedByPayEx: boolean;\n isInvoicePaymentOptionEnabled: boolean;\n isInstallmentsPaymentOptionEnabled: boolean;\n isCreditCardPaymentOptionEnabled: boolean;\n priceType?: string;\n urlPart?: string;\n}\n\nexport interface PersonalInfo {\n firstName: string;\n lastName: string;\n personalNumber: string;\n phoneCountryCode: string;\n phoneNumber: string;\n email: string;\n address: string;\n postalCode: string;\n postOffice: string;\n privacyConsent: boolean;\n countryCode: string;\n repeatedEmail?: string;\n isFormerStudent?: boolean;\n}\n\nexport interface ApplicationFormProgressState {\n paymentMethod: PaymentMethod;\n onlineStudiesTermsConsent: boolean;\n dataProtectionConsent: boolean;\n order: Partial;\n activePage: Page;\n version: 'v4';\n paymentResourceUri?: string;\n}\n","import type {\n ApplicationFormProgressState as ApplicationFormProgressStateV1,\n PersonalInfo as PersonalInfoV1,\n} from '../v1/ApplicationFormProgressState';\nimport { Payer as PayerV1 } from '../v1/ApplicationFormProgressState';\nimport { Payer as PayerV4 } from '../v4/ApplicationFormProgressState';\nimport { assertNever } from '~/Partials/Utils/typeUtils';\nimport type { ApplicationFormProgressState as ApplicationFormProgressStateV4 } from './ApplicationFormProgressState';\n\nconst mapPayer = (payer: PayerV1): PayerV4 => {\n switch (payer) {\n case PayerV1.Self:\n return PayerV4.Self;\n case PayerV1.Other:\n return PayerV4.Other;\n default:\n assertNever(payer);\n }\n};\n\nexport const map = (\n progressState: ApplicationFormProgressStateV1,\n personalInfo: PersonalInfoV1 | undefined\n): ApplicationFormProgressStateV4 => {\n const { order } = progressState;\n const invoice = progressState.order &&\n order.invoice && {\n ...order.invoice,\n payer: mapPayer(order.invoice.payer ?? PayerV1.Self),\n };\n\n return {\n ...progressState,\n version: 'v4',\n order: {\n ...order,\n personalInfo,\n parentStudyCode: progressState.order.orderLineItems?.[0]?.parentStudyCode ?? '',\n orderedSubjectItems:\n progressState.order.orderLineItems?.map(item => ({\n subject: {\n ...item.choice.subject,\n educationCategories: [],\n },\n subjectCode: item.subjectCode,\n subjectName: item.subjectName,\n subjectCredits: item.subjectCredits,\n subjectCreditsLabel: item.subjectCreditsLabel,\n subjectOriginalPrice: item.subjectOriginalPrice,\n startDate: item.startDate,\n })) ?? [],\n invoice,\n },\n };\n};\n","// All types are snapshots from the V2 form progress state in order to be independent of the auto-generated code and application logic.\n\nenum Page {\n OrderDetails = 'OrderDetails',\n Login = 'Login',\n Registration = 'Registration',\n PaymentOptions = 'PaymentOptions',\n Payment = 'Payment',\n StartDate = 'StartDate',\n Confirmation = 'Confirmation',\n}\n\ninterface Money {\n amount: number;\n currencyCode: string;\n currencySymbol: string;\n}\n\ninterface OnlineStudySubject {\n code: string;\n name: string;\n credits: number;\n creditsLabel: string;\n price: Money;\n url: string;\n startDate?: string;\n}\n\ninterface OrderedSubjectItem {\n subject: OnlineStudySubject;\n subjectCode: string;\n subjectName: string;\n subjectCredits: number;\n subjectCreditsLabel: string;\n subjectOriginalPrice: Money;\n startDate?: string;\n}\n\ninterface Installments {\n numberOfInstallments: number;\n}\n\nexport enum Payer {\n Self = 0,\n Other = 1,\n}\n\ninterface InvoiceOtherPayer {\n name: string;\n address: string;\n postalCode: string;\n organizationNumber: string;\n city: string;\n contactPersonName: string;\n contactPersonPhone: string;\n contactPersonEmail: string;\n}\n\ninterface InvoiceSelfPaid {\n additionalFee: Money;\n paymentDueDays: number;\n}\n\ninterface Invoice {\n payer: Payer;\n otherPayer?: InvoiceOtherPayer;\n selfPaid?: InvoiceSelfPaid;\n}\n\ninterface OnlineApplicationOrder {\n orderReference: string;\n orderedSubjectItems: OrderedSubjectItem[];\n payeeReference: string;\n isPaid: boolean;\n discountCode: string;\n parentStudyCode: string;\n totalPoints: number;\n totalScotcat: number;\n personalInfo: PersonalInfo;\n withLoanFund: boolean;\n isFree: boolean;\n installments?: Installments;\n invoice?: Invoice;\n creditCard?: object;\n totalPrice?: Money;\n originalPrice?: Money;\n totalDiscount?: Money;\n additionalFee?: Money;\n}\n\ninterface PaymentMethod {\n isSupportedByPayEx: boolean;\n isInvoicePaymentOptionEnabled: boolean;\n isInstallmentsPaymentOptionEnabled: boolean;\n isCreditCardPaymentOptionEnabled: boolean;\n priceType?: string;\n urlPart?: string;\n}\n\nexport interface PersonalInfo {\n firstName: string;\n lastName: string;\n personalNumber: string;\n phoneCountryCode: string;\n phoneNumber: string;\n email: string;\n address: string;\n postalCode: string;\n postOffice: string;\n privacyConsent: boolean;\n countryCode: string;\n repeatedEmail?: string;\n isFormerStudent?: boolean;\n}\n\nexport interface ApplicationFormProgressState {\n paymentMethod: PaymentMethod;\n onlineStudiesTermsConsent: boolean;\n dataProtectionConsent: boolean;\n order: Partial;\n activePage: Page;\n version: 'v2';\n paymentResourceUri?: string;\n}\n","import type {\n ApplicationFormProgressState as ApplicationFormProgressStateV2,\n PersonalInfo as PersonalInfoV2,\n} from '../v2/ApplicationFormProgressState';\nimport { Payer as PayerV2 } from '../v2/ApplicationFormProgressState';\nimport { assertNever } from '~/Partials/Utils/typeUtils';\nimport { Payer as PayerV4 } from './ApplicationFormProgressState';\nimport type { ApplicationFormProgressState as ApplicationFormProgressStateV4 } from './ApplicationFormProgressState';\n\nconst mapPayer = (payer: PayerV2): PayerV4 => {\n switch (payer) {\n case PayerV2.Self:\n return PayerV4.Self;\n case PayerV2.Other:\n return PayerV4.Other;\n default:\n assertNever(payer);\n }\n};\n\nexport const map = (\n progressState: ApplicationFormProgressStateV2,\n personalInfo: PersonalInfoV2 | undefined\n): ApplicationFormProgressStateV4 => {\n const { order } = progressState;\n const invoice = progressState.order &&\n order.invoice && {\n ...order.invoice,\n payer: mapPayer(order.invoice.payer ?? PayerV2.Self),\n };\n\n return {\n ...progressState,\n version: 'v4',\n order: {\n ...order,\n orderedSubjectItems:\n progressState.order.orderedSubjectItems?.map(item => ({\n ...item,\n subject: {\n ...item.subject,\n educationCategories: [],\n },\n })) ?? [],\n personalInfo,\n invoice,\n },\n };\n};\n","import type { ApplicationFormModelProgress } from '../useApplicationFormProgress';\nimport { TelemetryLogger } from '~/Utils/Logging/TelemetryLogger';\nimport type {\n ApplicationFormProgressState as ApplicationFormProgressStateV1,\n PersonalInfo as PersonalInfoV1,\n} from './v1/ApplicationFormProgressState';\nimport type {\n ApplicationFormProgressState as ApplicationFormProgressStateV2,\n PersonalInfo as PersonalInfoV2,\n} from './v2/ApplicationFormProgressState';\nimport type {\n ApplicationFormProgressState as ApplicationFormProgressStateV3,\n PersonalInfo as PersonalInfoV3,\n} from './v3/ApplicationFormProgressState';\nimport type {\n ApplicationFormProgressState as ApplicationFormProgressStateV4,\n PersonalInfo as PersonalInfoV4,\n} from './v4/ApplicationFormProgressState';\nimport { map as mapV1toV4 } from './v4/MapperV1';\nimport { map as mapV2toV4 } from './v4/MapperV2';\nimport { map as mapV3toV4 } from './v4/MapperV3';\n\nconst activeApplicationFormVersion = 'v4';\ntype ActiveApplicationFormProgressState = ApplicationFormProgressStateV4;\n\ntype ApplicationFormModelState =\n | ApplicationFormProgressStateV1\n | ApplicationFormProgressStateV2\n | ApplicationFormProgressStateV3\n | ApplicationFormProgressStateV4;\n\ntype PersonalInfo = PersonalInfoV1 | PersonalInfoV2 | PersonalInfoV3 | PersonalInfoV4;\n\nconst isVersionOne = (model: ApplicationFormModelState): model is ApplicationFormProgressStateV1 =>\n model.version === undefined;\n\nconst isVersionTwo = (model: ApplicationFormModelState): model is ApplicationFormProgressStateV2 =>\n model.version === 'v2';\n\nconst isVersionThree = (model: ApplicationFormModelState): model is ApplicationFormProgressStateV3 =>\n model.version === 'v3';\n\nconst isVersionFour = (model: ApplicationFormModelState): model is ApplicationFormProgressStateV4 =>\n model.version === 'v4';\n\nconst map = (model: ApplicationFormModelState, personalInfo: PersonalInfo | undefined) => {\n if (isVersionOne(model)) {\n return mapV1toV4(model, personalInfo);\n }\n\n if (isVersionTwo(model)) {\n return mapV2toV4(model, personalInfo);\n }\n\n if (isVersionThree(model)) {\n return mapV3toV4(model, personalInfo);\n }\n\n if (isVersionFour(model)) {\n model.order.personalInfo = personalInfo;\n\n return model;\n }\n\n TelemetryLogger.errorMessage(\n `Unrecognized application form progress state version '${(model as ApplicationFormModelState).version}'. Clearing state.`\n );\n\n setApplicationFormProgressState(undefined);\n\n return undefined;\n};\n\nexport const applicationFormProgressKey = 'applicationFormProgress';\n\nexport const getRawApplicationFormState = (): ApplicationFormModelState | undefined => {\n const modelJson = localStorage.getItem(applicationFormProgressKey);\n\n if (!modelJson) {\n return undefined;\n }\n\n return JSON.parse(modelJson) as ApplicationFormModelState;\n};\n\nexport const getApplicationFormProgressState = (): ApplicationFormModelProgress | undefined => {\n const model = getRawApplicationFormState();\n\n if (!model) {\n return undefined;\n }\n\n const personalInfoJson = sessionStorage.getItem(applicationFormProgressKey);\n const personalInfo = personalInfoJson ? (JSON.parse(personalInfoJson) as PersonalInfo) : undefined;\n\n return map(model, personalInfo);\n};\n\nexport const setApplicationFormProgressState = (progressState: ApplicationFormModelProgress | undefined) => {\n if (!progressState) {\n localStorage.removeItem(applicationFormProgressKey);\n sessionStorage.removeItem(applicationFormProgressKey);\n\n return;\n }\n\n if (progressState.order) {\n const personalInfo: ActiveApplicationFormProgressState['order']['personalInfo'] =\n progressState.order.personalInfo;\n\n personalInfo && sessionStorage.setItem(applicationFormProgressKey, JSON.stringify(personalInfo));\n }\n\n const state: ActiveApplicationFormProgressState = {\n ...progressState,\n order: {\n ...progressState.order,\n personalInfo: undefined,\n },\n version: activeApplicationFormVersion,\n };\n\n localStorage.setItem(applicationFormProgressKey, JSON.stringify(state));\n};\n","import type {\n ApplicationFormProgressState as ApplicationFormProgressStateV3,\n PersonalInfo as PersonalInfoV3,\n} from '../v3/ApplicationFormProgressState';\nimport type { ApplicationFormProgressState as ApplicationFormProgressStateV4 } from './ApplicationFormProgressState';\n\nexport const map = (\n progressState: ApplicationFormProgressStateV3,\n personalInfo: PersonalInfoV3 | undefined\n): ApplicationFormProgressStateV4 => {\n const { order } = progressState;\n\n return {\n ...progressState,\n version: 'v4',\n order: {\n ...order,\n orderedSubjectItems:\n progressState.order.orderedSubjectItems?.map(item => ({\n ...item,\n subject: {\n ...item.subject,\n educationCategories: [],\n },\n })) ?? [],\n personalInfo,\n },\n };\n};\n","import * as React from 'react';\nimport { OnlineApplicationAppletContext } from '../OnlineApplicationAppletContext';\nimport type { ApplicationFormModelProgress } from './useApplicationFormProgress';\n\nexport enum Page {\n OrderDetails = 'OrderDetails',\n Login = 'Login',\n Registration = 'Registration',\n PaymentOptions = 'PaymentOptions',\n Payment = 'Payment',\n StartDate = 'StartDate',\n Confirmation = 'Confirmation',\n}\n\nexport interface ApplicationFormFlow {\n activePage: Readonly;\n goToNextPage: () => void;\n goToPreviousPage: () => void;\n switchPage: (page: Page) => void;\n getNextPage: (activePage: Page) => Page;\n getPreviousPage: (activePage: Page) => Page;\n}\n\nexport const useApplicationFormFlow = (\n initModelProgress: ApplicationFormModelProgress | undefined,\n defaultActivePage: Page,\n isPaymentSupportedByPayEx: boolean,\n isOrderPaid: boolean,\n isOrderFree: boolean\n): Readonly => {\n const context = React.useContext(OnlineApplicationAppletContext);\n\n const getNextPage = (activePage: Page) => {\n switch (activePage) {\n case Page.OrderDetails:\n return context.isUserLoggedIn ? Page.Registration : Page.Login;\n case Page.Login:\n return Page.Registration;\n case Page.Registration:\n return Page.StartDate;\n case Page.StartDate:\n return Page.PaymentOptions;\n case Page.PaymentOptions: {\n if (isOrderFree) {\n return Page.Confirmation;\n }\n\n return isPaymentSupportedByPayEx ? Page.Payment : Page.Confirmation;\n }\n case Page.Payment:\n return Page.Confirmation;\n default:\n throw new Error(`Unrecognized Page value: ${activePage}.`);\n }\n };\n\n const getPreviousPage = (activePage: Page) => {\n switch (activePage) {\n case Page.Confirmation: {\n if (isOrderFree) {\n return Page.PaymentOptions;\n }\n\n return isPaymentSupportedByPayEx && !isOrderPaid ? Page.Payment : Page.PaymentOptions;\n }\n case Page.Payment:\n return Page.PaymentOptions;\n case Page.PaymentOptions:\n return Page.StartDate;\n case Page.StartDate:\n return Page.Registration;\n case Page.Registration:\n return context.isUserLoggedIn ? Page.OrderDetails : Page.Login;\n case Page.Login:\n return Page.OrderDetails;\n default:\n throw new Error(`Unrecognized Page value: ${activePage}.`);\n }\n };\n\n const [activePage, setActivePage] = React.useState(() => {\n const initActivePage = initModelProgress && initModelProgress.activePage;\n\n if (initActivePage) {\n return initActivePage === Page.Login && context.isUserLoggedIn\n ? getNextPage(initActivePage)\n : initActivePage;\n }\n\n return defaultActivePage;\n });\n\n const goToNextPage = () => {\n setActivePage(getNextPage(activePage));\n };\n\n const goToPreviousPage = () => {\n setActivePage(getPreviousPage(activePage));\n };\n\n const switchPage = (page: Page) => {\n setActivePage(page);\n };\n\n return {\n activePage,\n goToNextPage,\n goToPreviousPage,\n switchPage,\n getNextPage,\n getPreviousPage,\n };\n};\n","import uniqBy from 'lodash/uniqBy';\nimport { Page } from '../../../Online/OnlineApplicationForm/useApplicationFormFlow';\n\nexport enum OnlineStep {\n OrderDetails = 'formProgressBar_OrderDetails',\n UserDetails = 'formPageRegistration_YourDetails',\n Payment = 'formProgressBar_Payment',\n StartDate = 'formProgressBar_StartDate',\n Confirmation = 'formProgressBar_Confirmation',\n}\n\nexport class OnlineProgress {\n private static readonly ProgressBarDictionary: Record = {\n [Page.OrderDetails]: OnlineStep.OrderDetails,\n [Page.Login]: OnlineStep.UserDetails,\n [Page.Registration]: OnlineStep.UserDetails,\n [Page.StartDate]: OnlineStep.StartDate,\n [Page.PaymentOptions]: OnlineStep.Payment,\n [Page.Payment]: OnlineStep.Payment,\n [Page.Confirmation]: OnlineStep.Confirmation,\n };\n\n public static readonly ProgressDictionaryKeys = Object.keys(OnlineProgress.ProgressBarDictionary) as Page[];\n\n private static readonly Steps = OnlineProgress.ProgressDictionaryKeys.map(\n key => OnlineProgress.ProgressBarDictionary[key]\n );\n\n public static readonly UniqueSteps = uniqBy(OnlineProgress.Steps, e => e);\n\n public static getActiveStep = (activePage: Page) => OnlineProgress.ProgressBarDictionary[activePage];\n\n public static getActiveStepIndex = (activePage: Page) =>\n OnlineProgress.UniqueSteps.indexOf(OnlineProgress.getActiveStep(activePage));\n}\n","import { Event } from '~/Features/Messaging/types';\n\nexport class OnlineApplicationEvent extends Event {}\n\nexport class OnlineApplicationItemRemoved extends OnlineApplicationEvent {\n public static readonly id = 'OnlineApplicationItemRemoved';\n\n constructor() {\n super(OnlineApplicationItemRemoved.id);\n }\n}\n\nexport class OnlineApplicationItemAdded extends OnlineApplicationEvent {\n public static readonly id = 'OnlineApplicationItemAdded';\n\n constructor() {\n super(OnlineApplicationItemAdded.id);\n }\n}\n","import isArray from 'lodash/isArray';\nimport { applicationFormProgressKey } from '../ApplicationApplets/Online/OnlineApplicationForm/FormProgressState/ApplicationFormProgressStateManager';\nimport ExecutionContext from '../ExecutionContext';\nimport { AddingDifferentApplicationTypeAttempt } from '~/Features/ApplicationEvents/ApplicationEvents';\nimport { getStoredCampusApplicationChoices } from '~/Features/CampusApplication/CampusApplicationProcessUtils';\nimport { MessageBroker } from '~/Features/Messaging/MessageBroker';\nimport { OnlineApplicationItemAdded, OnlineApplicationItemRemoved } from './Events/OnlineApplicationEvents';\nimport type { OnlineApplicationChoice } from './Model';\nimport { getStoredOnlineApplicationChoices, OnlineApplicationStateStorageKey } from './OnlineApplicationProcessUtils';\n\nexport interface IOnlineApplicationProcessState {\n append(items: OnlineApplicationChoice | OnlineApplicationChoice[]): boolean;\n\n getAll(): OnlineApplicationChoice[];\n\n clear(): void;\n\n remove(subjectCode: string): void;\n\n setAll(items: OnlineApplicationChoice[]): boolean;\n}\n\nexport const OnlineApplicationProcessState: () => IOnlineApplicationProcessState = () => {\n const isCampusApplicationInProgress = () => getStoredCampusApplicationChoices().length > 0;\n\n const append = (choices: OnlineApplicationChoice | OnlineApplicationChoice[]): boolean => {\n ExecutionContext.ThrowIfServerSide();\n\n if (isCampusApplicationInProgress()) {\n MessageBroker.publish(new AddingDifferentApplicationTypeAttempt());\n\n return false;\n }\n\n const currentChoices = getAll();\n const choicesFromBasket = isArray(choices) ? choices : [choices];\n\n let choiceShouldBeAdded = true;\n for (const choiceFromBasket of choicesFromBasket) {\n let currentChoiceIndex = -1;\n for (const currentChoice of currentChoices) {\n currentChoiceIndex++;\n\n if (currentChoice.subject.code !== choiceFromBasket.subject.code) {\n continue;\n }\n\n if (currentChoice.parentStudy.timeType !== choiceFromBasket.parentStudy.timeType) {\n currentChoices.splice(currentChoiceIndex, 1);\n break;\n }\n\n choiceShouldBeAdded = false;\n break;\n }\n\n if (choiceShouldBeAdded) {\n currentChoices.push(choiceFromBasket);\n }\n }\n\n localStorage.setItem(OnlineApplicationStateStorageKey, JSON.stringify(currentChoices));\n MessageBroker.publish(new OnlineApplicationItemAdded());\n localStorage.removeItem(applicationFormProgressKey);\n\n return true;\n };\n\n const getAll = getStoredOnlineApplicationChoices;\n\n const clear = (): void => {\n ExecutionContext.ThrowIfServerSide();\n localStorage.removeItem(OnlineApplicationStateStorageKey);\n MessageBroker.publish(new OnlineApplicationItemRemoved());\n localStorage.removeItem(applicationFormProgressKey);\n };\n\n const remove = (subjectCode: string): void => {\n ExecutionContext.ThrowIfServerSide();\n let currentChoices = getAll();\n\n currentChoices = currentChoices.filter(choice => choice.subject.code !== subjectCode);\n\n localStorage.setItem(OnlineApplicationStateStorageKey, JSON.stringify(currentChoices));\n MessageBroker.publish(new OnlineApplicationItemRemoved());\n localStorage.removeItem(applicationFormProgressKey);\n };\n\n const setAll = (newChoices: OnlineApplicationChoice[]): boolean => {\n ExecutionContext.ThrowIfServerSide();\n\n const currentChoices = getAll();\n\n if (newChoices.length >= currentChoices.length && isCampusApplicationInProgress()) {\n MessageBroker.publish(new AddingDifferentApplicationTypeAttempt());\n\n return false;\n }\n\n localStorage.setItem(OnlineApplicationStateStorageKey, JSON.stringify(newChoices));\n MessageBroker.publish(new OnlineApplicationItemAdded());\n\n return true;\n };\n\n return { append, getAll, clear, remove, setAll };\n};\n","export enum TimeType {\n fullTime = 40,\n partTime = 20,\n}\n\nexport interface ParentStudyViewModel {\n code: string;\n timeType: TimeType;\n}\n","import * as React from 'react';\nimport type { OnlineApplicationChoice } from '../../OnlineApplication/Model';\nimport { OnlineApplicationProcessState } from '../../OnlineApplication/OnlineApplicationProcessState';\nimport { redirect } from '../Utils/utils';\nimport { TimeType } from '~/Pages/OnlineStudyPage/Semester/ParentStudyViewModel';\nimport { Button } from '~/Partials/Button/Button';\nimport { ButtonSize } from '~/Partials/Button/ButtonSize.csharp';\nimport { ButtonTier } from '~/Partials/Button/ButtonTier.csharp';\nimport { ButtonType } from '~/Partials/Button/ButtonType.csharp';\nimport { OnlineAnalytics } from '~/Partials/GoogleTagManager/Analytics/OnlineAnalytics';\nimport styles from './BuySubjectButton.module.css';\nimport type { BuySubjectButtonViewModel } from './BuySubjectButtonViewModel.csharp';\n\nexport const BuySubjectButton: React.FC> = props => {\n const { text, subject, onlineApplicationUrl } = props;\n const onlineApplicationProcessState = OnlineApplicationProcessState();\n\n const addSubjectToOnlineApplication = () => {\n const onlineApplicationChoiceViewModel = {\n subject,\n parentStudy: {\n code: '',\n timeType: TimeType.partTime,\n },\n } satisfies OnlineApplicationChoice;\n\n OnlineAnalytics.addProducts([onlineApplicationChoiceViewModel]);\n const appendingSucceeded = onlineApplicationProcessState.append(onlineApplicationChoiceViewModel);\n\n if (appendingSucceeded) {\n redirect(onlineApplicationUrl);\n }\n };\n\n return (\n \n {text}\n \n );\n};\n","// extracted by mini-css-extract-plugin\nexport default {\"BuySubjectButton\":\"_hULBNV6mmaa6vO49PEW\"};","import sumBy from 'lodash/sumBy';\nimport type { OnlineApplicationOrder } from '../../../Api/OnlineApplicationForm/Orders/OnlineApplicationOrder.csharp';\nimport { Page } from '../../../ApplicationApplets/Online/OnlineApplicationForm/useApplicationFormFlow';\nimport { OnlineProgress } from '../../../ApplicationApplets/Shared/FormProgressBar/Online/OnlineProgress';\nimport ExecutionContext from '../../../ExecutionContext';\nimport type { OnlineApplicationChoice } from '../../../OnlineApplication/Model';\nimport type { GoogleTagManagerEcommerceProduct } from '../GoogleTagManagerModels';\nimport { GtmCommerceEventsHandler } from '../GtmCommerceEventsHandler';\nimport type { OrderedSubjectItem } from '~/Features/Api/OnlineApplicationForm/Orders/OrderedSubjectItem.csharp';\nimport { getRawApplicationFormState } from '~/Features/ApplicationApplets/Online/OnlineApplicationForm/FormProgressState/ApplicationFormProgressStateManager';\nimport { getContentLocale } from '~/Features/Configuration/Utils/languageUtils';\nimport type { SelectedSubject } from '~/Features/StudyPage/Online/Components/Planner/Context/types';\nimport { OnlineStudyBrand, SchoolName, SingleSubject } from '~/Partials/GoogleTagManager/AnalyticsConstants';\nimport { TelemetryLogger } from '~/Utils/Logging/TelemetryLogger';\n\nexport class OnlineAnalytics {\n public static addOnlinePlannerProducts = (items: SelectedSubject[]) => {\n const products = OnlineAnalytics.createProductsFromOnlinePlanner(items);\n const actionField = OnlineAnalytics.createBaseActionFieldFromSelectedSubject(items);\n\n if (products.length > 0) {\n GtmCommerceEventsHandler.pushAddProducts(products, actionField);\n }\n };\n\n public static removeOnlinePlannerProducts = (items: SelectedSubject[]) => {\n const products = OnlineAnalytics.createProductsFromOnlinePlanner(items);\n const actionField = OnlineAnalytics.createBaseActionFieldFromSelectedSubject(items);\n\n if (products.length > 0) {\n GtmCommerceEventsHandler.pushRemoveProducts(products, actionField);\n }\n };\n\n public static addProducts = (items: OnlineApplicationChoice[]) => {\n const products = OnlineAnalytics.createProductsFromOnlineChoice(items);\n const actionField = OnlineAnalytics.createBaseActionFieldFromOnlineApplicationChoice(items);\n\n if (products.length > 0) {\n GtmCommerceEventsHandler.pushAddProducts(products, actionField);\n }\n };\n\n public static removeLineProducts = (items: OrderedSubjectItem[], parentStudyCode: string) => {\n const products = OnlineAnalytics.createProductsFromApplication(items, parentStudyCode);\n const actionField = OnlineAnalytics.createBaseActionFieldFromOrderedSubjectItem(items);\n\n GtmCommerceEventsHandler.pushRemoveProducts(products, actionField);\n };\n\n public static removeChoiceProducts = (choices: OnlineApplicationChoice[]) => {\n const products = OnlineAnalytics.createProductsFromOnlineChoice(choices);\n const actionField = OnlineAnalytics.createBaseActionFieldFromOnlineApplicationChoice(choices);\n GtmCommerceEventsHandler.pushRemoveProducts(products, actionField);\n };\n\n public static pushCheckout = (currentPage: Page, order: OnlineApplicationOrder) => {\n const stepNumber = OnlineAnalytics.getStepNumber(currentPage);\n const products = OnlineAnalytics.createProductsFromApplication(\n order.orderedSubjectItems,\n order.parentStudyCode\n );\n const baseActionField = OnlineAnalytics.createBaseActionFieldFromApplication(order);\n\n if (products.length > 0 && stepNumber) {\n if (stepNumber === 1) {\n GtmCommerceEventsHandler.pushBeginCheckout(products, baseActionField);\n } else {\n const checkoutActionField = {\n ...baseActionField,\n checkout_step: stepNumber,\n };\n GtmCommerceEventsHandler.pushCheckout(products, checkoutActionField);\n }\n\n if (currentPage === Page.Confirmation) {\n if (!ExecutionContext.IsServerSide()) {\n history.pushState({}, '', 'confirmation/');\n }\n\n const purchaseActionField = OnlineAnalytics.createPurchaseActionFieldFromApplication(order);\n GtmCommerceEventsHandler.pushPurchase(products, purchaseActionField);\n }\n }\n };\n\n public static checkoutOption = (currentPage: Page, option: string) => {\n const stepNumber = OnlineAnalytics.getStepNumber(currentPage);\n GtmCommerceEventsHandler.pushCheckoutOption(stepNumber, option);\n };\n\n private static createProductsFromOnlinePlanner = (items: SelectedSubject[]): GoogleTagManagerEcommerceProduct[] => {\n const resolveCategory = (item: SelectedSubject) => {\n if (item.electiveGroupCode) {\n return item.electiveGroupCode;\n }\n\n if (item.tab === 'fullTime') {\n return item.parentStudies?.fullTimeCode;\n }\n\n return item.parentStudies?.partTimeCode;\n };\n\n return items.map(item => {\n if (!item.educationCategories) {\n TelemetryLogger.errorMessage(\n `Missing education categories for subject ${item.subjectCode} [${this.getStateVersion()}]`\n );\n item.educationCategories = [];\n }\n\n return {\n item_id: item.subjectCode,\n item_name: item.subjectName,\n price: item.price.amount,\n affiliation: OnlineStudyBrand,\n item_brand: item.educationCategories.join(', '),\n item_category: resolveCategory(item) ?? '',\n item_category2: item.points.amount.toLocaleString(getContentLocale()),\n item_category3: SchoolName,\n item_variant: SingleSubject,\n quantity: 1,\n };\n }) satisfies GoogleTagManagerEcommerceProduct[];\n };\n\n private static createProductsFromApplication = (items: OrderedSubjectItem[], parentStudyCode: string) =>\n items.map(item => {\n if (!item.subject.educationCategories) {\n TelemetryLogger.errorMessage(\n `Missing education categories for subject ${item.subjectCode} [${this.getStateVersion()}]`\n );\n item.subject.educationCategories = [];\n }\n\n return {\n item_id: item.subjectCode,\n item_name: item.subjectName,\n price: item.subject.price.amount,\n affiliation: OnlineStudyBrand,\n item_brand: item.subject.educationCategories.join(', '),\n item_category: parentStudyCode,\n item_category2: item.subjectCredits.toLocaleString(getContentLocale()),\n item_category3: SchoolName,\n item_variant: SingleSubject,\n quantity: 1,\n };\n }) satisfies GoogleTagManagerEcommerceProduct[];\n\n private static createProductsFromOnlineChoice = (choices: OnlineApplicationChoice[]) =>\n choices.map(choice => {\n if (!choice.subject.educationCategories) {\n TelemetryLogger.errorMessage(\n `Missing education categories for subject ${choice.subject.code} [${this.getStateVersion()}]`\n );\n choice.subject.educationCategories = [];\n }\n\n return {\n item_id: choice.subject.code,\n item_name: choice.subject.name,\n price: choice.subject.price.amount,\n affiliation: OnlineStudyBrand,\n item_brand: choice.subject.educationCategories.join(', '),\n item_category: choice.parentStudy?.code ?? '',\n item_category2: choice.subject.credits.toLocaleString(getContentLocale()),\n item_category3: SchoolName,\n item_variant: SingleSubject,\n quantity: 1,\n };\n }) satisfies GoogleTagManagerEcommerceProduct[];\n\n private static createBaseActionFieldFromApplication = (order: OnlineApplicationOrder) => ({\n currency: order.totalPrice?.currencyCode ?? '',\n value: order.totalPrice ? order.totalPrice.amount : 0,\n });\n\n private static createPurchaseActionFieldFromApplication = (order: OnlineApplicationOrder) => ({\n ...OnlineAnalytics.createBaseActionFieldFromApplication(order),\n transaction_id: order.orderReference ?? '',\n coupon: order.discountCode,\n shipping: 0,\n tax: 0,\n });\n\n private static getStepNumber = (activePage: Page) => OnlineProgress.getActiveStepIndex(activePage) + 1;\n\n private static createBaseActionFieldFromSelectedSubject = (items: SelectedSubject[]) => ({\n currency: items[0].price.currencyCode,\n value: sumBy(items, item => item.price.amount),\n });\n\n private static createBaseActionFieldFromOnlineApplicationChoice = (items: OnlineApplicationChoice[]) => ({\n currency: items[0].subject.price.currencyCode,\n value: sumBy(items, item => item.subject.price.amount),\n });\n\n private static createBaseActionFieldFromOrderedSubjectItem = (items: OrderedSubjectItem[]) => ({\n currency: items[0].subject.price.currencyCode,\n value: sumBy(items, item => item.subject.price.amount),\n });\n\n private static getStateVersion = () => getRawApplicationFormState()?.version;\n}\n"],"names":["OnlineApplicationAppletContext","React","Payer","mapPayer","payer","PayerV1","Self","PayerV4","Other","assertNever","PayerV2","applicationFormProgressKey","getRawApplicationFormState","modelJson","localStorage","getItem","JSON","parse","getApplicationFormProgressState","model","personalInfoJson","sessionStorage","map","personalInfo","undefined","version","isVersionOne","progressState","_order$invoice$payer","_progressState$order$","_progressState$order$2","_progressState$order$3","_progressState$order$4","order","invoice","_objectSpread","parentStudyCode","orderLineItems","orderedSubjectItems","item","subject","choice","educationCategories","subjectCode","subjectName","subjectCredits","subjectCreditsLabel","subjectOriginalPrice","startDate","mapV1toV4","isVersionTwo","mapV2toV4","isVersionThree","mapV3toV4","isVersionFour","TelemetryLogger","errorMessage","concat","setApplicationFormProgressState","removeItem","setItem","stringify","state","Page","useApplicationFormFlow","initModelProgress","defaultActivePage","isPaymentSupportedByPayEx","isOrderPaid","isOrderFree","context","getNextPage","activePage","OrderDetails","isUserLoggedIn","Registration","Login","StartDate","PaymentOptions","Confirmation","Payment","Error","getPreviousPage","setActivePage","initActivePage","goToNextPage","goToPreviousPage","switchPage","page","OnlineStep","OnlineProgress","_OnlineProgress","ProgressBarDictionary","UserDetails","ProgressDictionaryKeys","Object","keys","Steps","key","UniqueSteps","uniqBy","e","getActiveStep","getActiveStepIndex","indexOf","OnlineApplicationEvent","Event","OnlineApplicationItemRemoved","constructor","super","id","OnlineApplicationItemAdded","OnlineApplicationProcessState","isCampusApplicationInProgress","getStoredCampusApplicationChoices","length","getAll","getStoredOnlineApplicationChoices","append","choices","ExecutionContext","ThrowIfServerSide","MessageBroker","publish","AddingDifferentApplicationTypeAttempt","currentChoices","choicesFromBasket","isArray","choiceShouldBeAdded","choiceFromBasket","currentChoiceIndex","currentChoice","code","parentStudy","timeType","splice","push","OnlineApplicationStateStorageKey","clear","remove","filter","setAll","newChoices","TimeType","BuySubjectButton","props","text","onlineApplicationUrl","onlineApplicationProcessState","Button","onClick","addSubjectToOnlineApplication","onlineApplicationChoiceViewModel","partTime","OnlineAnalytics","addProducts","redirect","className","size","ButtonSize","Large","tier","ButtonTier","LegacyPrimary","type","ButtonType","Solid","_OnlineAnalytics","addOnlinePlannerProducts","items","products","createProductsFromOnlinePlanner","actionField","createBaseActionFieldFromSelectedSubject","GtmCommerceEventsHandler","pushAddProducts","removeOnlinePlannerProducts","pushRemoveProducts","createProductsFromOnlineChoice","createBaseActionFieldFromOnlineApplicationChoice","removeLineProducts","createProductsFromApplication","createBaseActionFieldFromOrderedSubjectItem","removeChoiceProducts","pushCheckout","currentPage","stepNumber","getStepNumber","baseActionField","createBaseActionFieldFromApplication","pushBeginCheckout","checkoutActionField","checkout_step","IsServerSide","history","pushState","purchaseActionField","createPurchaseActionFieldFromApplication","pushPurchase","checkoutOption","option","pushCheckoutOption","resolveCategory","_item$parentStudies2","_item$parentStudies","electiveGroupCode","tab","parentStudies","fullTimeCode","partTimeCode","_resolveCategory","getStateVersion","item_id","item_name","price","amount","affiliation","OnlineStudyBrand","item_brand","join","item_category","item_category2","points","toLocaleString","getContentLocale","item_category3","SchoolName","item_variant","SingleSubject","quantity","_choice$parentStudy$c","_choice$parentStudy","name","credits","_order$totalPrice$cur","_order$totalPrice","currency","totalPrice","currencyCode","value","_order$orderReference","transaction_id","orderReference","coupon","discountCode","shipping","tax","sumBy","_getRawApplicationFor"],"sourceRoot":""}