{"version":3,"file":"Header.chunk.bc8c6f50aa9dc3e93e3f.js","mappings":"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","sources":["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/ApplicationEvents/ApplicationEvents.ts","webpack://Kristiania.Web/./Features/CampusApplication/CampusApplicationProcessState.ts","webpack://Kristiania.Web/./Features/CampusApplication/CampusApplicationProcessUtils.ts","webpack://Kristiania.Web/./Features/CampusApplication/Events/CampusApplicationEvents.ts","webpack://Kristiania.Web/./Features/Configuration/Hooks/useLogoSettings.ts","webpack://Kristiania.Web/./Features/Messaging/MessageBroker.ts","webpack://Kristiania.Web/./Features/Messaging/types.ts","webpack://Kristiania.Web/./Features/Messaging/useMessageHandler.ts","webpack://Kristiania.Web/./Features/OnlineApplication/Events/OnlineApplicationEvents.ts","webpack://Kristiania.Web/./Features/OnlineApplication/OnlineApplicationProcessState.ts","webpack://Kristiania.Web/./Features/OnlineApplication/OnlineApplicationProcessUtils.ts","webpack://Kristiania.Web/./Features/Partials/Button/Button.tsx","webpack://Kristiania.Web/./Features/Partials/Collapse/useCollapse.ts","webpack://Kristiania.Web/./Features/Partials/Collapse/Collapse.tsx","webpack://Kristiania.Web/./Features/Partials/GoogleTagManager/Analytics/CampusAnalytics.ts","webpack://Kristiania.Web/./Features/Partials/GoogleTagManager/AnalyticsConstants.ts","webpack://Kristiania.Web/./Features/Partials/GoogleTagManager/GtmCommerceEventsHandler.ts","webpack://Kristiania.Web/./Features/Partials/GoogleTagManager/GtmEventsBase.ts","webpack://Kristiania.Web/./Features/Navigation/NavigationVariant.csharp.ts","webpack://Kristiania.Web/./Features/Partials/Header/Utils/menuColumnLayoutMapper.ts","webpack://Kristiania.Web/./Features/Partials/Nav/Components/LanguagePicker/LanguagePicker.module.css?238d","webpack://Kristiania.Web/./Features/Partials/Nav/Components/LanguagePicker/LanguagePicker.tsx","webpack://Kristiania.Web/./Features/Partials/Nav/Components/Shared/Styles/NavButton.module.css?9d65","webpack://Kristiania.Web/./Features/Partials/Nav/Components/BasketButton/BasketButton.tsx","webpack://Kristiania.Web/./Features/Partials/Nav/Components/BasketButton/BasketButton.module.css?eb98","webpack://Kristiania.Web/./Features/Partials/Nav/Components/BasketButton/BasketButtonModel.ts","webpack://Kristiania.Web/./Features/Partials/Nav/Components/BasketButton/BasketStateObserver.tsx","webpack://Kristiania.Web/./Features/Partials/Nav/Components/LanguagesPicker/LanguagesPicker.tsx","webpack://Kristiania.Web/./Features/Partials/Nav/Components/LanguagesPicker/LanguagesPicker.module.css?a3d1","webpack://Kristiania.Web/./Features/Partials/Nav/Components/MenuSection/MenuSection.tsx","webpack://Kristiania.Web/./Features/Partials/Nav/Components/MenuSection/MenuSection.module.css?658b","webpack://Kristiania.Web/./Features/Partials/Nav/Components/MenuContent/MenuContent.module.css?9266","webpack://Kristiania.Web/./Features/Partials/Nav/Components/MenuContent/MenuContent.tsx","webpack://Kristiania.Web/./Features/Partials/Nav/NavItem.ts","webpack://Kristiania.Web/./Features/Partials/Nav/Components/MenuContentButton/MenuContentButton.module.css?8c87","webpack://Kristiania.Web/./Features/Partials/Nav/Components/MenuContentButton/MenuContentButton.tsx","webpack://Kristiania.Web/./Features/Partials/Nav/Components/MyPageButton/MyPageButton.tsx","webpack://Kristiania.Web/./Features/Partials/Nav/Components/NavButtons/NavButtons.tsx","webpack://Kristiania.Web/./Features/Partials/Nav/Components/NavButtons/NavButtons.module.css?4fda","webpack://Kristiania.Web/./Features/Partials/Nav/Components/SearchButton/SearchButton.tsx","webpack://Kristiania.Web/./Features/Partials/Nav/Components/SearchButton/SearchButton.module.css?da9b","webpack://Kristiania.Web/./Features/Partials/Nav/Nav.tsx","webpack://Kristiania.Web/./Features/Partials/Nav/Nav.module.css?5007","webpack://Kristiania.Web/./Features/Partials/Header/Header.tsx","webpack://Kristiania.Web/./Features/Partials/Nav/Components/Shared/Utils.ts","webpack://Kristiania.Web/./Features/Partials/Header/Header.module.css?3e41","webpack://Kristiania.Web/./Features/Partials/Header/Hooks/useScrollDirection.ts","webpack://Kristiania.Web/./Features/Partials/InfoBanner/InfoBanner.tsx","webpack://Kristiania.Web/./Features/Partials/InfoBanner/InfoBanner.module.css?93ea","webpack://Kristiania.Web/./Features/Partials/InfoBanner/InfoBannerWithState.tsx","webpack://Kristiania.Web/./Features/Partials/KristianiaLogo/utilsLottie.client.ts","webpack://Kristiania.Web/./Features/Partials/KristianiaLogo/KristianiaLogo.module.css?9403","webpack://Kristiania.Web/./Features/Partials/KristianiaLogo/KristianiaLogo.tsx","webpack://Kristiania.Web/./Features/Partials/List/List.tsx","webpack://Kristiania.Web/./Features/Partials/Nav/ApplicationProgressState.ts","webpack://Kristiania.Web/./Features/Partials/SearchBase/Events/QueryParametersChanged.ts","webpack://Kristiania.Web/./Features/Partials/SearchBase/QueryParameterUtils.ts","webpack://Kristiania.Web/./Features/Partials/SvgIcon/FilledSvgIcon.tsx","webpack://Kristiania.Web/./Features/Txt/TxtBase.tsx","webpack://Kristiania.Web/./Features/Utils/Hooks/useIsMounted.ts","webpack://Kristiania.Web/./Features/Utils/Hooks/useIsScrollOnTop.tsx","webpack://Kristiania.Web/./Features/Utils/Hooks/useVariableWithStableRef.ts","webpack://Kristiania.Web/./Features/Utils/Hooks/useWindowWidthDetection.ts","webpack://Kristiania.Web/./Features/Utils/Hooks/useOnPageLoaded.ts","webpack://Kristiania.Web/./Features/Utils/Lazy/LazyComponent.tsx","webpack://Kristiania.Web/./Features/Utils/Logging/TelemetryLogger.ts","webpack://Kristiania.Web/./Features/Utils/MediaBreakpoints.ts","webpack://Kristiania.Web/./Features/Utils/ScrollLock/ScrollLock.tsx","webpack://Kristiania.Web/./Features/Utils/ScrollLock/ScrollLock.module.css?3254","webpack://Kristiania.Web/./Features/Utils/ScrollLock/ScrollLockUpdated.ts","webpack://Kristiania.Web/./Features/Utils/ScrollLock/useScrollLockNotifier.ts","webpack://Kristiania.Web/./Features/Utils/scrollPosition.ts"],"sourcesContent":["// 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 { Event } from '~/Features/Messaging/types';\n\nexport class ApplicationEvent extends Event {\n constructor(\n public readonly currentChoicesNumber: number,\n id: string\n ) {\n super(id);\n }\n}\n\nexport class AddingDifferentApplicationTypeAttempt extends Event {\n public static readonly id = 'AddingDifferentApplicationTypeAttempt';\n\n constructor() {\n super(AddingDifferentApplicationTypeAttempt.id);\n }\n}\n","import ExecutionContext from '../ExecutionContext';\nimport type { ApplicationChoiceDto } from '../Search/ApplicationChoice/Controller/ApplicationChoiceDto.csharp';\nimport { AddingDifferentApplicationTypeAttempt } from '~/Features/ApplicationEvents/ApplicationEvents';\nimport {\n AddingAnotherOptionAttempt,\n AddingExistingItemAttempt,\n CampusApplicationItemAdded,\n CampusApplicationItemRemoved,\n MaxNumberOfChoicesExceeded,\n} from '~/Features/CampusApplication/Events/CampusApplicationEvents';\nimport { MessageBroker } from '~/Features/Messaging/MessageBroker';\nimport { getStoredOnlineApplicationChoices } from '~/Features/OnlineApplication/OnlineApplicationProcessUtils';\nimport { CampusAnalytics } from '~/Partials/GoogleTagManager/Analytics/CampusAnalytics';\nimport {\n CampusApplicationStateStorageKey,\n getStoredCampusApplicationChoices,\n MaxChoicesNumber,\n} from './CampusApplicationProcessUtils';\n\nexport interface ICampusApplicationProcessState {\n append(item: ApplicationChoiceDto): boolean;\n\n getAll(): ApplicationChoiceDto[];\n\n clear(): void;\n\n remove(id: string): void;\n\n setAll(choices: ApplicationChoiceDto[]): boolean;\n\n isItemsLimitReached(): boolean;\n\n isOnlineApplicationInProgress(): boolean;\n}\n\nexport const CampusApplicationProcessState: () => ICampusApplicationProcessState = () => {\n const isOnlineApplicationInProgress = () => getStoredOnlineApplicationChoices().length > 0;\n\n const append = (newChoice: ApplicationChoiceDto): boolean => {\n ExecutionContext.ThrowIfServerSide();\n\n if (isOnlineApplicationInProgress()) {\n MessageBroker.publish(new AddingDifferentApplicationTypeAttempt());\n\n return false;\n }\n\n const currentChoices = getAll();\n\n for (const choice of currentChoices) {\n if (choice.id === newChoice.id) {\n MessageBroker.publish(new AddingExistingItemAttempt(currentChoices.length));\n\n return false;\n }\n\n if (choice.studyCode === newChoice.studyCode && choice.variantCode === newChoice.variantCode) {\n MessageBroker.publish(new AddingAnotherOptionAttempt(currentChoices.length));\n\n return false;\n }\n }\n\n if (currentChoices.length === MaxChoicesNumber) {\n MessageBroker.publish(new MaxNumberOfChoicesExceeded(MaxChoicesNumber));\n\n return false;\n }\n\n currentChoices.push(newChoice);\n localStorage.setItem(CampusApplicationStateStorageKey, JSON.stringify(currentChoices));\n\n MessageBroker.publish(new CampusApplicationItemAdded(currentChoices.length));\n\n // TODO: verify with handleSelectedChoiceChange implementation, considering setAll\n CampusAnalytics.addProducts([newChoice]);\n\n return true;\n };\n\n const getAll = getStoredCampusApplicationChoices;\n\n const clear = () => {\n ExecutionContext.ThrowIfServerSide();\n localStorage.removeItem(CampusApplicationStateStorageKey);\n MessageBroker.publish(new CampusApplicationItemRemoved(0));\n };\n\n const remove = (id: string) => {\n ExecutionContext.ThrowIfServerSide();\n let currentChoices: ApplicationChoiceDto[] = getAll();\n\n currentChoices = currentChoices.filter(item => item.id !== id);\n\n localStorage.setItem(CampusApplicationStateStorageKey, JSON.stringify(currentChoices));\n MessageBroker.publish(new CampusApplicationItemRemoved(currentChoices.length));\n };\n\n const setAll = (newChoices: ApplicationChoiceDto[]): boolean => {\n ExecutionContext.ThrowIfServerSide();\n\n const currentChoices = getAll();\n\n if (newChoices.length >= currentChoices.length && isOnlineApplicationInProgress()) {\n MessageBroker.publish(new AddingDifferentApplicationTypeAttempt());\n\n return false;\n }\n\n localStorage.setItem(CampusApplicationStateStorageKey, JSON.stringify(newChoices));\n MessageBroker.publish(new CampusApplicationItemAdded(newChoices.length));\n\n return true;\n };\n\n const isItemsLimitReached = () => {\n if (ExecutionContext.IsServerSide()) {\n return false;\n }\n\n return getAll().length >= MaxChoicesNumber;\n };\n\n return {\n append,\n getAll,\n clear,\n remove,\n setAll,\n isItemsLimitReached,\n isOnlineApplicationInProgress,\n };\n};\n","import ExecutionContext from '~/Features/ExecutionContext';\nimport type { ApplicationChoiceDto } from '~/Features/Search/ApplicationChoice/Controller/ApplicationChoiceDto.csharp';\n\nexport const CampusApplicationStateStorageKey = 'campusApplicationState';\nexport const MaxChoicesNumber = 3;\n\nexport const getStoredCampusApplicationChoices = (): ApplicationChoiceDto[] => {\n if (ExecutionContext.IsServerSide()) {\n return [];\n }\n\n const currentStateJson = localStorage.getItem(CampusApplicationStateStorageKey);\n\n if (currentStateJson) {\n return JSON.parse(currentStateJson);\n }\n\n return [];\n};\n","import { Event } from '~/Features/Messaging/types';\n\nexport class CampusApplicationEvent extends Event {\n constructor(\n public readonly currentChoicesNumber: number,\n id: string\n ) {\n super(id);\n }\n}\n\nexport class CampusApplicationItemRemoved extends CampusApplicationEvent {\n public static readonly id = 'CampusApplicationItemRemoved';\n\n constructor(currentChoicesNumber: number) {\n super(currentChoicesNumber, CampusApplicationItemRemoved.id);\n }\n}\n\nexport class CampusApplicationItemAdded extends CampusApplicationEvent {\n public static readonly id = 'CampusApplicationItemAdded';\n\n constructor(currentChoicesNumber: number) {\n super(currentChoicesNumber, CampusApplicationItemAdded.id);\n }\n}\n\nexport class AddingExistingItemAttempt extends CampusApplicationEvent {\n public static readonly id = 'AddingExistingItemAttempt';\n\n constructor(currentChoicesNumber: number) {\n super(currentChoicesNumber, AddingExistingItemAttempt.id);\n }\n}\n\nexport class AddingAnotherOptionAttempt extends CampusApplicationEvent {\n public static readonly id = 'AddingAnotherOptionAttempt';\n\n constructor(currentChoicesNumber: number) {\n super(currentChoicesNumber, AddingAnotherOptionAttempt.id);\n }\n}\n\nexport class MaxNumberOfChoicesExceeded extends CampusApplicationEvent {\n public static readonly id = 'MaxNumberOfChoicesExceeded';\n\n constructor(maxChoicesNumber: number) {\n super(maxChoicesNumber, MaxNumberOfChoicesExceeded.id);\n }\n}\n","import { useMemo } from 'react';\nimport { GlobalContextProvider } from '~/Features/Configuration/GlobalContextProvider';\n\nexport const useLogoSettings = () => useMemo(() => GlobalContextProvider.getLogoSettings(), []);\n","import type { Message, MessageHandler } from '~/Features/Messaging/types';\n\nexport class MessageBroker {\n private static MessageHandlersByMessageId: { [id: string]: MessageHandler[] } = {};\n\n public static subscribe(handler: MessageHandler, messageId: string): void {\n const handlers = this.MessageHandlersByMessageId[messageId];\n\n if (handlers) {\n handlers.push(handler);\n } else {\n this.MessageHandlersByMessageId[messageId] = [handler];\n }\n }\n\n public static unsubscribe(handler: MessageHandler, messageId: string): void {\n const handlers = this.MessageHandlersByMessageId[messageId];\n\n if (handlers) {\n this.MessageHandlersByMessageId[messageId] = handlers.filter(h => h !== handler);\n }\n }\n\n public static publish(message: Message): void {\n const handlers = this.GetMessageHandlers(message.id);\n\n handlers.forEach(handler => handler.handle(message));\n }\n\n public static schedulePublish(message: Message, delay: number): void {\n setTimeout(() => MessageBroker.publish(message), delay);\n }\n\n private static GetMessageHandlers(messageId: string): MessageHandler[] {\n return this.MessageHandlersByMessageId[messageId] || [];\n }\n}\n","export abstract class Message {\n protected constructor(public readonly id: string) {}\n}\n\nexport abstract class Event extends Message {}\n\nexport interface MessageHandler {\n handle(message: Message): void;\n}\n\nexport interface EventHandler {\n handle: ((event: TEvent) => void) | (() => void);\n}\n","import { useLayoutEffect } from 'react';\nimport { MessageBroker } from '~/Features/Messaging/MessageBroker';\nimport type { Message, MessageHandler } from '~/Features/Messaging/types';\nimport { useVariableWithStableRef } from '~/Utils/Hooks/useVariableWithStableRef';\n\nexport const useMessageHandler = (messageId: string, onMessage: MessageHandler['handle']) => {\n const onMessageRef = useVariableWithStableRef(onMessage);\n\n // We use LayoutEffect here because it is important that the handler is subscribed before the first message is published.\n // It could happen if the children of the component that uses this hook publish a message in their useEffect.\n useLayoutEffect(() => {\n const handler = {\n handle: (event: Message) => onMessageRef.current(event),\n };\n\n MessageBroker.subscribe(handler, messageId);\n\n return () => MessageBroker.unsubscribe(handler, messageId);\n }, [onMessageRef, messageId]);\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","import ExecutionContext from '~/Features/ExecutionContext';\nimport type { OnlineApplicationChoice } from './Model';\n\nexport const OnlineApplicationStateStorageKey = 'onlineApplicationState';\n\nexport const getStoredOnlineApplicationChoices = (): OnlineApplicationChoice[] => {\n if (ExecutionContext.IsServerSide()) {\n return [];\n }\n\n const currentStateJson = localStorage.getItem(OnlineApplicationStateStorageKey);\n\n if (currentStateJson) {\n return JSON.parse(currentStateJson) as OnlineApplicationChoice[];\n }\n\n return [];\n};\n","import classNames from 'classnames';\nimport * as React from 'react';\nimport type { ReactNode } from 'react';\nimport type { StrictOmit } from '../Utils/typeUtils';\nimport { useTheme } from '~/Features/Layouts/Theme/Context/ThemeContextProvider';\nimport type { Theme } from '~/Utils/Theme';\nimport styles from './Button.module.css';\nimport type { ButtonSize } from './ButtonSize.csharp';\nimport type { ButtonTier } from './ButtonTier.csharp';\nimport { ButtonType } from './ButtonType.csharp';\n\ntype HtmlButtonType = 'submit' | 'reset' | 'button';\n\nexport interface DefaultButtonProps {\n children: ReactNode;\n className?: string;\n htmltype?: HtmlButtonType;\n /* STYLES PROPS */\n size?: ButtonSize;\n tier?: ButtonTier;\n type?: ButtonType;\n theme?: Theme;\n}\n\ntype NativeButtonAttributes = Pick<\n React.ButtonHTMLAttributes,\n | 'aria-selected'\n | 'aria-controls'\n | 'aria-expanded'\n | 'role'\n | 'aria-haspopup'\n | 'aria-describedby'\n | 'aria-label'\n | 'tabIndex'\n | 'title'\n | 'id'\n | 'disabled'\n | 'draggable'\n | 'onClick'\n | 'onFocus'\n | 'onMouseDown'\n>;\n\nexport type ButtonProps = DefaultButtonProps & NativeButtonAttributes;\n\nexport const Button = React.forwardRef((props, ref) => {\n const { children, theme, ...passThroughProps } = props;\n const { type } = passThroughProps;\n\n if (type && type !== ButtonType.Clear) {\n return (\n \n {children}\n \n );\n }\n\n return (\n \n {children}\n \n );\n});\n\ntype RawButtonProps = StrictOmit;\n\nconst RawButton = React.forwardRef((props, ref) => {\n const { className, children, size, tier, type, htmltype = 'button', ...otherProps } = props;\n\n const getButtonClassName = () =>\n classNames(\n type && styles[`Variant--${type}`],\n tier && styles[`Variant--${tier}`],\n size && styles[`Variant--${size}`],\n className\n );\n\n return (\n \n );\n});\n\nconst ThemedButton = React.forwardRef((props, ref) => {\n const contextualTheme = useTheme();\n const { children, className, theme = contextualTheme, ...additionalProps } = props;\n\n const { withBoxShadow, withRoundedCorners } = theme;\n\n return (\n \n {children}\n \n );\n});\n","import type { RefObject } from 'react';\nimport { useEffect, useState } from 'react';\nimport { useIsMounted } from '~/Utils/Hooks/useIsMounted';\n\nexport interface UseCollapseProps {\n isOpen: boolean;\n content: RefObject;\n}\n\n// In case of nested collapse components, we need to inherit the visibility from the parent so that\n// focusable children inside expanded collapses nested inside collapsed collapses are not focusable.\n// Unfortunately, jest is not able to simulate this behavior thus we are not able to test it.\ntype InheritVisibility = undefined;\n\ntype Visibility = 'hidden' | InheritVisibility;\ntype Overflow = 'hidden' | 'visible';\n\nconst getHeight = (content: RefObject) => {\n if (content && content.current && content.current.scrollHeight) {\n return `${content.current.scrollHeight}px`;\n }\n\n return '0px';\n};\n\nexport const useCollapse = (props: UseCollapseProps) => {\n const { isOpen, content } = props;\n\n const [height, setHeight] = useState(isOpen ? 'auto' : '0');\n const [overflow, setOverflow] = useState(isOpen ? 'visible' : 'hidden');\n const [visibility, setVisibility] = useState(isOpen ? undefined : 'hidden');\n const isMounted = useIsMounted();\n\n const toggleStyles = () => {\n if (isOpen) {\n setHeight('auto');\n setOverflow('visible');\n setVisibility(undefined);\n } else {\n setVisibility('hidden');\n }\n };\n\n useEffect(() => {\n if (isOpen) {\n setVisibility(undefined);\n\n if (!isMounted) {\n setHeight('auto');\n setOverflow('visible');\n } else {\n setHeight(getHeight(content));\n }\n } else if (isMounted) {\n setHeight(getHeight(content));\n\n // The magic:\n // Setting collapsed style after setting height to enable smooth transition based on height.\n // It must be wrapped with setTimeout to ensure that the state update is not batched with the height update.\n setTimeout(() => {\n window.requestAnimationFrame(() => {\n setOverflow('hidden');\n setHeight('0');\n });\n });\n }\n }, [isOpen]);\n\n return {\n toggleStyles,\n style: {\n overflow,\n visibility,\n height,\n },\n };\n};\n","/*\n * Based on: https://github.com/SparebankenVest/react-css-collapse\n */\n\nimport * as React from 'react';\nimport type { AriaAttributes } from 'react';\nimport { useCollapse } from './useCollapse';\n\nexport interface CollapseProps extends AriaAttributes {\n children: React.ReactNode;\n isOpen?: boolean;\n onRest?: () => void;\n className?: string;\n withMarginTransition?: boolean;\n}\n\nexport const Collapse: React.FC = props => {\n const { children, onRest, isOpen = false, className, withMarginTransition, ...rest } = props;\n\n const content = React.useRef(null);\n\n const { toggleStyles, style } = useCollapse({\n isOpen,\n content,\n });\n\n const onTransitionEnd = (event: React.TransitionEvent) => {\n if (event.target === content.current && event.propertyName === 'height') {\n toggleStyles();\n\n onRest?.();\n }\n };\n\n const styles = {\n willChange: withMarginTransition ? 'height, margin' : 'height',\n ...style,\n };\n\n return (\n
\n {children}\n
\n );\n};\n","import sumBy from 'lodash/sumBy';\nimport type { CampusApplicationFormSubmissionResult } from '../../../Api/CampusApplicationForm/CampusApplicationFormSubmissionResult.csharp';\nimport type { ApplicationChoiceDto } from '../../../Search/ApplicationChoice/Controller/ApplicationChoiceDto.csharp';\nimport type { GoogleTagManagerEcommerceProduct } from '../GoogleTagManagerModels';\nimport { GtmCommerceEventsHandler } from '../GtmCommerceEventsHandler';\nimport { CampusBrand, VocationalSchoolBrand } from '~/Partials/GoogleTagManager/AnalyticsConstants';\n\nexport class CampusAnalytics {\n public static addProducts = (items: ApplicationChoiceDto[]) => {\n const products = items.map(CampusAnalytics.createProductFromApplicationChoice);\n const actionField = CampusAnalytics.createBaseActionFieldFromApplicationChoice(items);\n\n if (products.length > 0) {\n GtmCommerceEventsHandler.pushAddProducts(products, actionField);\n }\n };\n\n public static removeProducts = (items: ApplicationChoiceDto[]) => {\n const products = items.map(CampusAnalytics.createProductFromApplicationChoice);\n const actionField = CampusAnalytics.createBaseActionFieldFromApplicationChoice(items);\n\n if (products.length > 0) {\n GtmCommerceEventsHandler.pushRemoveProducts(products, actionField);\n }\n };\n\n public static checkout = (stepNumber: number, items: ApplicationChoiceDto[]) => {\n const products = items.map(CampusAnalytics.createProductFromApplicationChoice);\n const baseActionField = CampusAnalytics.createBaseActionFieldFromApplicationChoice(items);\n\n if (products.length > 0) {\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 };\n\n public static applicationResult = (data: CampusApplicationFormSubmissionResult) => {\n const products = data.choices.map(CampusAnalytics.createProductFromApplicationChoice);\n const actionField = CampusAnalytics.createPurchaseActionFieldFromCampusApplication(data);\n\n GtmCommerceEventsHandler.pushPurchase(products, actionField);\n };\n\n private static createBaseActionFieldFromApplicationChoice = (items: ApplicationChoiceDto[]) => ({\n currency: '',\n value: sumBy(items, item => item.price ?? 0),\n });\n\n private static createProductFromApplicationChoice = (choice: ApplicationChoiceDto) => {\n const studyType = choice.level === VocationalSchoolBrand ? VocationalSchoolBrand : CampusBrand;\n\n return {\n item_id: choice.id,\n item_name: choice.name,\n affiliation: studyType,\n // `?.` added to prevent errors in case of form progress stored in local storage.\n // We can probably wait 1-2 semesters to be completely safe and remove that.\n item_brand: choice.educationCategories?.join(', ') ?? '',\n item_category: choice.studyFormType,\n item_category2: choice.points,\n item_category3: choice.label,\n item_variant: choice.level,\n // default values set on a base of consultations with client\n price: 100,\n quantity: 1,\n } satisfies GoogleTagManagerEcommerceProduct;\n };\n\n private static createPurchaseActionFieldFromCampusApplication = (\n result: CampusApplicationFormSubmissionResult\n ) => ({\n currency: '',\n value: sumBy(result.choices, item => item.price ?? 0),\n transaction_id: result.requestId,\n coupon: '',\n shipping: 0,\n tax: 0,\n });\n}\n","export const OnlineStudyBrand = 'Nettstudier';\n\nexport const SingleSubject = 'Enkeltemne';\n\nexport const VocationalSchoolBrand = 'Fagskole';\n\nexport const CampusBrand = 'Stedsbasert';\n\nexport const SchoolName = 'Høyskolen Kristiania';\n","import type { ApplicationChoiceDto } from '../../Search/ApplicationChoice/Controller/ApplicationChoiceDto.csharp';\nimport { CampusBrand, OnlineStudyBrand, VocationalSchoolBrand } from '~/Partials/GoogleTagManager/AnalyticsConstants';\nimport { TelemetryLogger } from '~/Utils/Logging/TelemetryLogger';\nimport type {\n GoogleTagManagerEcommerceAdd,\n GoogleTagManagerEcommerceBaseActionField,\n GoogleTagManagerEcommerceBeginCheckout,\n GoogleTagManagerEcommerceCheckout,\n GoogleTagManagerEcommerceCheckoutActionField,\n GoogleTagManagerEcommerceCheckoutOption,\n GoogleTagManagerEcommerceProduct,\n GoogleTagManagerEcommerceProductDetail,\n GoogleTagManagerEcommercePurchase,\n GoogleTagManagerEcommercePurchaseActionField,\n GoogleTagManagerEcommerceRemove,\n} from './GoogleTagManagerModels';\nimport { GtmEventsBase } from './GtmEventsBase';\n\nexport class GtmCommerceEventsHandler extends GtmEventsBase {\n public static pushPurchase = (\n items: GoogleTagManagerEcommerceProduct[],\n actionField: GoogleTagManagerEcommercePurchaseActionField\n ) => {\n const ecommerce: GoogleTagManagerEcommercePurchase = {\n ...actionField,\n items,\n };\n\n GtmEventsBase.push({ event: 'purchase', ecommerce });\n };\n\n public static pushAddProducts = (\n items: GoogleTagManagerEcommerceProduct[],\n actionField: GoogleTagManagerEcommerceBaseActionField\n ) => {\n const ecommerce: GoogleTagManagerEcommerceAdd = {\n ...actionField,\n items,\n };\n GtmEventsBase.push({ event: 'add_to_cart', ecommerce });\n };\n\n public static pushRemoveProducts = (\n items: GoogleTagManagerEcommerceProduct[],\n actionField: GoogleTagManagerEcommerceBaseActionField\n ) => {\n const ecommerce: GoogleTagManagerEcommerceRemove = {\n ...actionField,\n items,\n };\n GtmEventsBase.push({ event: 'remove_from_cart', ecommerce });\n };\n\n public static pushBeginCheckout = (\n items: GoogleTagManagerEcommerceProduct[],\n actionField: GoogleTagManagerEcommerceBaseActionField\n ) => {\n const ecommerce: GoogleTagManagerEcommerceBeginCheckout = {\n ...actionField,\n items,\n };\n GtmEventsBase.push({ event: 'begin_checkout', ecommerce });\n };\n\n public static pushCheckout = (\n items: GoogleTagManagerEcommerceProduct[],\n actionField: GoogleTagManagerEcommerceCheckoutActionField\n ) => {\n const ecommerce: GoogleTagManagerEcommerceCheckout = {\n ...actionField,\n items,\n };\n GtmEventsBase.push({ event: 'checkout', ecommerce });\n };\n\n public static pushCheckoutOption = (checkout_step: number, option?: string) => {\n const eventName = 'checkout_option';\n const ecommerce: GoogleTagManagerEcommerceCheckoutOption = {\n checkout_option: {\n actionField: { checkout_step, option: option || eventName },\n },\n };\n\n GtmEventsBase.push({ event: eventName, ecommerce });\n };\n\n public static pushProductDetail = (newChoices: ApplicationChoiceDto[]) => {\n const ecommerce = {\n detail: {\n items: newChoices.map(GtmCommerceEventsHandler.createProductFromApplicationChoice),\n actionField: '',\n },\n } satisfies GoogleTagManagerEcommerceProductDetail;\n GtmEventsBase.push({ event: 'product_detail', ecommerce });\n };\n\n private static createProductFromApplicationChoice = (choice: ApplicationChoiceDto) => {\n const studyType =\n choice.level === VocationalSchoolBrand\n ? VocationalSchoolBrand\n : choice.variantCity === OnlineStudyBrand\n ? OnlineStudyBrand\n : CampusBrand;\n\n if (!choice.educationCategories) {\n TelemetryLogger.errorMessage(`Missing education categories for subject ${choice.id}`);\n choice.educationCategories = [];\n }\n\n return {\n item_id: choice.id,\n item_name: choice.name,\n affiliation: studyType,\n item_brand: choice.educationCategories.join(', '),\n item_category: choice.studyFormType,\n item_category2: choice.points,\n item_category3: choice.label,\n item_variant: choice.level,\n // default values set on a base of consultations with client\n price: choice.price ?? 100,\n quantity: 1,\n } satisfies GoogleTagManagerEcommerceProduct;\n };\n}\n","import ExecutionContext from '../../ExecutionContext';\nimport type { GtmPageStatsViewModel } from '../GtmPageStats/GtmPageStatsViewModel.csharp';\nimport type { GoogleTagManagerData, GoogleTagManagerProperties } from './GoogleTagManagerModels';\n\ntype DataLayerModel = GoogleTagManagerData | GoogleTagManagerProperties;\n\nexport class GtmEventsBase {\n public static pushGtmPageStats = (gtmPageStatsViewModel: GtmPageStatsViewModel) => {\n GtmEventsBase.push(gtmPageStatsViewModel.properties);\n };\n\n public static pushEvent = (eventName: string, payLoad: GoogleTagManagerProperties = []) => {\n GtmEventsBase.push({ event: eventName, ...payLoad });\n };\n\n protected static push(data: DataLayerModel) {\n if (ExecutionContext.IsServerSide()) {\n return;\n }\n\n const { dataLayer } = window as any;\n dataLayer && dataLayer.push(data);\n }\n}\n","// This code was generated by a Reinforced.Typings tool.\n// Changes to this file may cause incorrect behavior and will be lost if\n// the code is regenerated.\n\nexport enum NavigationVariant {\n\tDefault = \"default\",\n\tTransparentLight = \"transparentLight\",\n\tTransparentDark = \"transparentDark\"\n}\n","export const mapToMenuColumnsLayout = (menuColumnsCount: number) => {\n switch (menuColumnsCount) {\n case 3:\n return 'three';\n case 4:\n return 'four';\n case 5:\n return 'five';\n default:\n throw new Error(`Unsupported menu columns count: ${menuColumnsCount}`);\n }\n};\n","// extracted by mini-css-extract-plugin\nexport default {\"StickyLanguagePicker\":\"hHYYjvhDXoMKqomXygrf\",\"Content\":\"HcZDTrZQh6_UtXHJ8Fag\",\"Variant--inline\":\"mcNoknKh0N3lTZjmDixw\",\"Label\":\"OfsnrvaOl03YI9nkLaRr\",\"Icon\":\"OXRGcwJKCWDhNkthrkzL\",\"Variant--sticky\":\"DLMNb549_4OdJQQ_zknz\",\"Variant--stickyNarrow\":\"YqwOUXlVniGFmRPUIhT3\"};","import classNames from 'classnames';\nimport * as React from 'react';\nimport type { LanguageViewModel } from '~/Features/Navigation/LanguageViewModel.csharp';\nimport { Link } from '~/Partials/Link/Link';\nimport { LinkType } from '~/Partials/Link/LinkType.csharp';\nimport {\n buildAbsoluteUrlWithQueryParameters,\n useQueryParametersObserver,\n} from '~/Partials/SearchBase/QueryParameterUtils';\nimport { SvgIcon } from '~/Partials/SvgIcon/SvgIcon';\nimport styles from './LanguagePicker.module.css';\n\ninterface StickyLanguagePickerProps {\n language: LanguageViewModel;\n variant: 'sticky' | 'inline' | 'stickyNarrow';\n}\n\nexport const LanguagePicker: React.FC> = props => {\n const { language, variant } = props;\n const additionalQueryParams = useQueryParametersObserver();\n\n return (\n \n
\n \n

{language.label}

\n
\n \n );\n};\n","// extracted by mini-css-extract-plugin\nexport default {\"ButtonIcon\":\"brFFOiXiOEgw5BeGVovg\",\"Button\":\"Ze3L5TDd1MTjtWsRRoQq\",\"Variant--light\":\"DTuGnl1WKyMu475BbUvg\",\"Variant--dark\":\"BqI4GIbd_jtD7ZsMt6q5\"};","import classNames from 'classnames';\nimport * as React from 'react';\nimport navStyles from '../Shared/Styles/NavButton.module.css';\nimport ExecutionContext from '~/Features/ExecutionContext';\nimport { Button } from '~/Partials/Button/Button';\nimport type { NavButtonProps } from '~/Partials/Nav/Components/NavButtons/NavButtons';\nimport { SvgIcon } from '~/Partials/SvgIcon/SvgIcon';\nimport styles from './BasketButton.module.css';\n\ninterface BasketButtonTranslations {\n basket: string;\n youHaveNoChosenStudies: string;\n seeAllStudies: string;\n}\n\ninterface BasketButtonProps extends NavButtonProps {\n basketLinkUrl: string;\n translations: BasketButtonTranslations;\n}\n\nexport const BasketButton: React.FC> = ({\n basketLinkUrl,\n translations,\n variant,\n}) => {\n const handleButtonClick = () => {\n if (!ExecutionContext.IsServerSide()) {\n window.location.href = basketLinkUrl;\n }\n };\n\n return (\n
\n \n {translations.basket}\n \n \n
\n );\n};\n","// extracted by mini-css-extract-plugin\nexport default {\"Dot\":\"uTMhMIeN0bDXVFVIysSa\"};","import { useEffect, useState } from 'react';\nimport {\n CampusApplicationItemAdded,\n CampusApplicationItemRemoved,\n} from '~/Features/CampusApplication/Events/CampusApplicationEvents';\nimport { useMessageHandler } from '~/Features/Messaging/useMessageHandler';\nimport {\n OnlineApplicationItemAdded,\n OnlineApplicationItemRemoved,\n} from '~/Features/OnlineApplication/Events/OnlineApplicationEvents';\nimport { ApplicationProgressState, getApplicationProgressState } from '~/Partials/Nav/ApplicationProgressState';\n\nexport interface BasketButtonModelProps {\n studySearchPageUrl: string;\n campusApplicationUrl: string;\n onlineApplicationUrl: string;\n}\n\nexport const useBasketButtonModel = ({\n studySearchPageUrl,\n campusApplicationUrl,\n onlineApplicationUrl,\n}: BasketButtonModelProps) => {\n const [state, setState] = useState(ApplicationProgressState.NoApplicationInProgress);\n\n const updateState = () => setState(getApplicationProgressState());\n\n useEffect(() => {\n updateState();\n }, []);\n\n useMessageHandler(CampusApplicationItemAdded.id, updateState);\n useMessageHandler(CampusApplicationItemRemoved.id, updateState);\n useMessageHandler(OnlineApplicationItemAdded.id, updateState);\n useMessageHandler(OnlineApplicationItemRemoved.id, updateState);\n\n const getBasketLinkUrl: () => string = () => {\n switch (state) {\n case ApplicationProgressState.NoApplicationInProgress:\n return studySearchPageUrl;\n case ApplicationProgressState.CampusApplicationInProgress:\n return campusApplicationUrl;\n case ApplicationProgressState.OnlineApplicationInProgress:\n return onlineApplicationUrl;\n default:\n throw new Error(`Unrecognized ApplicationProgressState value: ${state}.`);\n }\n };\n\n const isApplicationInProgress = state !== ApplicationProgressState.NoApplicationInProgress;\n const basketLinkUrl = getBasketLinkUrl();\n\n return {\n isApplicationInProgress,\n basketLinkUrl,\n };\n};\n","import * as React from 'react';\nimport type { BasketButtonModelProps } from '~/Partials/Nav/Components/BasketButton/BasketButtonModel';\nimport { useBasketButtonModel } from '~/Partials/Nav/Components/BasketButton/BasketButtonModel';\n\ninterface BasketStateObserverProps extends BasketButtonModelProps {\n onStateChanged: (isApplicationInProgress: boolean, linkUrl: string) => void;\n}\n\nexport const BasketStateObserver: React.FC> = props => {\n const { onStateChanged, ...otherProps } = props;\n const { isApplicationInProgress, basketLinkUrl } = useBasketButtonModel(otherProps);\n\n React.useEffect(() => {\n onStateChanged(isApplicationInProgress, basketLinkUrl);\n }, [isApplicationInProgress, basketLinkUrl]);\n\n return null;\n};\n","import classNames from 'classnames';\nimport * as React from 'react';\nimport { Link } from '../../../Link/Link';\nimport {\n buildAbsoluteUrlWithQueryParameters,\n useQueryParametersObserver,\n} from '../../../SearchBase/QueryParameterUtils';\nimport type { IconName } from '../../../SvgIcon/SvgIcon';\nimport { SvgIcon } from '../../../SvgIcon/SvgIcon';\nimport type { LanguagePickerProps } from '~/Features/Navigation/LanguagePickerProps';\nimport { LinkType } from '~/Partials/Link/LinkType.csharp';\nimport styles from './LanguagesPicker.module.css';\n\nconst getIconName = (languageCode: string): IconName => {\n switch (languageCode) {\n case 'en':\n case 'no':\n return languageCode;\n default:\n throw new Error(`Language code ${languageCode} could not be mapped to an icon.`);\n }\n};\n\nexport const LanguagesPicker: React.FC> = props => {\n const { languages } = props;\n const languageEntries = [];\n\n const additionalQueryParams = useQueryParametersObserver();\n\n for (let i = 0; i < languages.length; i++) {\n languageEntries.push(\n
  • \n \n
    \n \n {languages[i].label}\n
    \n \n
  • \n );\n }\n\n return
      {languageEntries}
    ;\n};\n","// extracted by mini-css-extract-plugin\nexport default {\"List\":\"luWQc38ZR6bVeSodYy2U\",\"ListItem--active\":\"lp5DDNcOL2ea47yfyuQj\",\"ItemName\":\"tKZ5K0BtXDdVePgL2D4w\",\"ItemLink\":\"SdkGob7QqNi59xz1FypN\",\"ItemIcon\":\"MTj1s37NqtFUxmRZkd0j\",\"ListItem\":\"E7F1MuLW0l0euRlt5uBe\",\"Content\":\"rum0fyolLEIIzDim92T8\"};","import classNames from 'classnames';\nimport * as React from 'react';\nimport { useState } from 'react';\nimport type { ReactNode } from 'react';\nimport { Button } from '~/Partials/Button/Button';\nimport { Collapse } from '~/Partials/Collapse/Collapse';\nimport styles from './MenuSection.module.css';\n\ninterface MenuSectionTranslations {\n open: string;\n close: string;\n}\n\ninterface MenuSectionProps {\n heading: string;\n translations: MenuSectionTranslations;\n children?: ReactNode;\n}\n\ninterface MenuSectionState {\n isOpened: boolean;\n}\n\nexport const MenuSection: React.FC> = (props: MenuSectionProps) => {\n const [state, setState] = useState({ isOpened: false });\n\n const toggle = () => {\n setState(prevState => ({ isOpened: !prevState.isOpened }));\n };\n\n const getChangeStateText = () => (state.isOpened ? props.translations.close : props.translations.open);\n\n const { heading, children } = props;\n\n return (\n
    \n
    \n {heading}\n {children && (\n \n {getChangeStateText()}\n \n )}\n
    \n\n \n
    {children}
    \n
    \n
    \n );\n};\n","// extracted by mini-css-extract-plugin\nexport default {\"MenuSection\":\"Za5Qoh8ZEn74ZsNnJLFy\",\"Heading\":\"bD3kA5WhKQbA_3BfEMzE\",\"Button\":\"shLMBKHcUzCQODTQ0YxB\",\"Variant--opened\":\"RCO0CpT72qruyheVYzkq\",\"ContentWrapper\":\"DfLYKKG3LJCyF7VgjNTc\",\"Content\":\"duXwhomQudw9JxaYSYxp\"};","// extracted by mini-css-extract-plugin\nexport default {\"MenuSection\":\"kG8qqkep6jG7gL5yEdF3\",\"MenuContent\":\"RcQUBs6qyo7XPcZfw_RJ\",\"Link\":\"cVhwyMiPQifKEWYqkju0\",\"Variant--opened\":\"_5w4Yk8xHOwnmPhvD0qFQ\",\"Inner\":\"W1zVxI4Ztaop_Oy8tByw\",\"Content\":\"rfXJnpoddMlLY1cp7rNj\",\"Variant--closed\":\"_LX8ukq97FikyAM5oKZY\",\"Level1\":\"a5xYdl17pK4dAyeOpNue\",\"Level1--threeColumnLayout\":\"YeOWWTrXcyY0Zx2Y84Px\",\"Level1--fourColumnLayout\":\"aIVWEWeGXJaRrlTzZ8mc\",\"Level1--fiveColumnLayout\":\"mhH4IIOdVS_r404PmnMQ\",\"Level2\":\"NRM71qZlUQ73Ro8ilU3g\",\"LangPicker\":\"UwxJnqtcAiGUXpBMUMCb\",\"NavLanguagePicker\":\"c6jKR3P5w818YL3EUlWj\"};","import classNames from 'classnames';\nimport * as React from 'react';\nimport type { LanguageViewModel } from '~/Features/Navigation/LanguageViewModel.csharp';\nimport type { NavigationSectionViewModel } from '~/Features/Navigation/NavigationSectionViewModel.csharp';\nimport type { NavigationTranslations } from '~/Features/Navigation/NavigationTranslations.csharp';\nimport { FormattedText } from '~/Features/Txt/TxtBase';\nimport { Link } from '~/Partials/Link/Link';\nimport { LanguagePicker } from '~/Partials/Nav/Components/LanguagePicker/LanguagePicker';\nimport { LanguagesPicker } from '~/Partials/Nav/Components/LanguagesPicker/LanguagesPicker';\nimport { MenuSection } from '~/Partials/Nav/Components/MenuSection/MenuSection';\nimport styles from './MenuContent.module.css';\n\nexport interface MenuContentProps {\n sections: NavigationSectionViewModel[];\n translations: NavigationTranslations;\n menuColumnsLayout: MenuColumnsLayout;\n languages: LanguageViewModel[];\n isOpened: boolean;\n}\n\nexport type MenuColumnsLayout = 'three' | 'four' | 'five';\n\nexport const MenuContent: React.FC> = props => {\n const { sections, translations, menuColumnsLayout, languages, isOpened } = props;\n\n const getVisibilityClassName = (moveToHeaderOnDesktop: boolean) => (moveToHeaderOnDesktop ? 'mobileOnly' : null);\n const firstOtherAvailableLanguage = languages.filter(el => el.url !== null)[1];\n\n return (\n
    \n
    \n {firstOtherAvailableLanguage && (\n
    \n \n
    \n )}\n
      \n {sections.map((section, idx) => (\n \n \n {section.items.length > 0 && (\n
        \n {section.items.map((menuItem, index) => (\n
      • \n \n
      • \n ))}\n
      \n )}\n \n \n ))}\n
    \n \n
    \n
    \n );\n};\n","export enum NavItem {\n Menu,\n Search,\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"Button\":\"Foau9zEUF_pBL14fovyP\",\"Variant--opened\":\"Wtuk2wkKGhXT3xjaMAal\"};","import classNames from 'classnames';\nimport { FocusTrap } from 'focus-trap-react';\nimport * as React from 'react';\nimport navButtonStyles from '../Shared/Styles/NavButton.module.css';\nimport { Button } from '~/Partials/Button/Button';\nimport type { MenuContentProps } from '~/Partials/Nav/Components/MenuContent/MenuContent';\nimport { MenuContent } from '~/Partials/Nav/Components/MenuContent/MenuContent';\nimport type { NavButtonProps } from '~/Partials/Nav/Components/NavButtons/NavButtons';\nimport { NavItem } from '~/Partials/Nav/NavItem';\nimport { SvgIcon } from '~/Partials/SvgIcon/SvgIcon';\nimport styles from './MenuContentButton.module.css';\n\nexport interface MenuContentButtonProps extends NavButtonProps {\n isFirstPaint: boolean;\n isOpened: (navItem: NavItem) => boolean;\n toggleItem: (navItem: NavItem) => void;\n menuTranslation: string;\n menuContentProps: Omit;\n}\n\nexport const MenuContentButton: React.FC> = props => {\n const { isFirstPaint, isOpened, toggleItem, menuTranslation, menuContentProps, variant } = props;\n\n return (\n \n \n
    \n toggleItem(NavItem.Menu)}\n className={classNames(\n navButtonStyles.ButtonIcon,\n variant && navButtonStyles[`Variant--${variant}`]\n )}\n aria-haspopup=\"true\"\n aria-expanded={isOpened(NavItem.Menu)}\n >\n {menuTranslation}\n {isOpened(NavItem.Menu) ? : }\n \n {menuContentProps.sections && menuContentProps.sections.length > 0 && (\n \n )}\n
    \n
    \n \n );\n};\n","import classNames from 'classnames';\nimport * as React from 'react';\nimport styles from '../Shared/Styles/NavButton.module.css';\nimport type { NavButtonProps } from '~/Partials/Nav/Components/NavButtons/NavButtons';\nimport { SvgIcon } from '~/Partials/SvgIcon/SvgIcon';\n\ninterface MyPageButtonProps extends NavButtonProps {\n myPageUrl: string;\n showMyPageTranslation: string;\n}\n\nexport const MyPageButton: React.FC> = props => {\n const { myPageUrl, showMyPageTranslation, variant } = props;\n\n return (\n \n {showMyPageTranslation}\n \n \n );\n};\n","import classNames from 'classnames';\nimport * as React from 'react';\nimport styles from './NavButtons.module.css';\n\nexport type NavButtonVariant = 'light' | 'dark';\n\nexport interface NavButtonProps {\n buttonKey: string;\n className?: string;\n variant?: NavButtonVariant;\n}\n\ninterface BasketButtonProps {\n children?: (React.ReactElement | boolean)[];\n}\n\nexport const NavButtons: React.FC> = props => {\n const { children } = props;\n const childrenButtons = (children ? children.filter(c => !!c) : []) as React.ReactElement[];\n\n return (\n
      \n {children &&\n childrenButtons.map(childButton => {\n const { props: navButtonProps } = childButton;\n const { buttonKey, className } = navButtonProps;\n\n return (\n
    • \n {childButton}\n
    • \n );\n })}\n
    \n );\n};\n","// extracted by mini-css-extract-plugin\nexport default {\"List\":\"EjFwbfUtAqjtowN6S8lJ\",\"Item\":\"KA14sZ0r0qb8_TRxNj6t\"};","import classNames from 'classnames';\nimport * as React from 'react';\nimport { Key } from 'ts-keycode-enum';\nimport navButtonStyles from '../Shared/Styles/NavButton.module.css';\nimport ExecutionContext from '~/Features/ExecutionContext';\nimport { Button } from '~/Partials/Button/Button';\nimport type { NavButtonProps } from '~/Partials/Nav/Components/NavButtons/NavButtons';\nimport { NavItem } from '~/Partials/Nav/NavItem';\nimport { SvgIcon } from '~/Partials/SvgIcon/SvgIcon';\nimport { redirect } from '~/Partials/Utils/utils';\nimport styles from './SearchButton.module.css';\n\ninterface SearchButtonProps extends NavButtonProps {\n isFirstPaint: boolean;\n isOpened: (navItem: NavItem) => boolean;\n toggleItem: (navItem: NavItem) => void;\n searchPageUrl: string;\n translations: {\n search: string;\n openSearch: string;\n closeSearch: string;\n inputSearchPhrase: string;\n };\n}\n\nexport const SearchButton: React.FC> = props => {\n const { isFirstPaint, isOpened, toggleItem, translations, searchPageUrl, variant } = props;\n\n const searchInputRef = React.createRef();\n\n const handleSearchInputKeyDown = (e: React.KeyboardEvent) => {\n if (e.keyCode === Key.Enter) {\n redirectToSearch(e);\n }\n };\n\n const redirectToSearch = (e: any) => {\n e.preventDefault();\n const searchPhrase: HTMLInputElement | null = searchInputRef.current;\n\n if (!searchPhrase || !searchPhrase.value || ExecutionContext.IsServerSide()) {\n return;\n }\n\n const studySearchUrlWithSearchPhrase = `${searchPageUrl}?phrase=${encodeURIComponent(searchPhrase.value)}`;\n redirect(studySearchUrlWithSearchPhrase);\n };\n\n const onSearchElementFocus = () => {\n if (!isOpened(NavItem.Search)) {\n toggleItem(NavItem.Search);\n }\n };\n\n const handleTransitionEnd = () => {\n if (isOpened(NavItem.Search)) {\n searchInputRef.current?.focus();\n }\n };\n\n return (\n \n
    \n toggleItem(NavItem.Search)}\n aria-haspopup=\"true\"\n aria-expanded={isOpened(NavItem.Search)}\n className={classNames(\n navButtonStyles.ButtonIcon,\n styles.NavigationButton,\n variant && navButtonStyles[`Variant--${variant}`]\n )}\n tabIndex={-1}\n >\n \n {isOpened(NavItem.Search) ? translations.closeSearch : translations.openSearch}\n \n \n \n
    \n
    \n \n handleSearchInputKeyDown(e)}\n placeholder={isOpened(NavItem.Search) ? translations.search : ''}\n onFocus={onSearchElementFocus}\n onTransitionEnd={handleTransitionEnd}\n />\n redirectToSearch(e)}\n onFocus={onSearchElementFocus}\n className={styles.SearchButtonAction}\n >\n {translations.search}\n \n \n
    \n
    \n
    \n \n );\n};\n","// extracted by mini-css-extract-plugin\nexport default {\"SearchButton\":\"BI8sYl_zzmD2PosuI83q\",\"NavigationButton\":\"ZAgNSffGchMZ_tZy4qy2\",\"Container\":\"ds0uyXRnxFztxh5yGPbR\",\"Dropdown\":\"_dOEi_5x_yJPpSTxdTsg\",\"Variant--opened\":\"ZK1omoN5LcHwsJ4ZoxIJ\",\"Input\":\"nxfnFf9AyotkrPQbjf2A\",\"Variant--closed\":\"hhEYmawQHlj4GUyXwJ5H\",\"Inner\":\"QEr_NVyQFc0v_0J3CdqB\",\"SearchButtonAction\":\"Q5vGRKkR4UPctsu2Dl_3\",\"Variant--light\":\"PMSREhwld0_1cAa14yIE\"};","import classNames from 'classnames';\nimport React, { useState, useRef, useEffect } from 'react';\nimport type { NavigationViewModel } from '~/Features/Navigation/NavigationViewModel.csharp';\nimport { Link } from '~/Partials/Link/Link';\nimport { LinkType } from '~/Partials/Link/LinkType.csharp';\nimport { List } from '~/Partials/List/List';\nimport { BasketButton } from '~/Partials/Nav/Components/BasketButton/BasketButton';\nimport { BasketStateObserver } from '~/Partials/Nav/Components/BasketButton/BasketStateObserver';\nimport type { MenuContentButtonProps } from '~/Partials/Nav/Components/MenuContentButton/MenuContentButton';\nimport { MenuContentButton } from '~/Partials/Nav/Components/MenuContentButton/MenuContentButton';\nimport { MyPageButton } from '~/Partials/Nav/Components/MyPageButton/MyPageButton';\nimport type { NavButtonVariant } from '~/Partials/Nav/Components/NavButtons/NavButtons';\nimport { NavButtons } from '~/Partials/Nav/Components/NavButtons/NavButtons';\nimport { SearchButton } from '~/Partials/Nav/Components/SearchButton/SearchButton';\nimport { NavItem } from '~/Partials/Nav/NavItem';\nimport { ScrollLock } from '~/Utils/ScrollLock/ScrollLock';\nimport navButtonStyles from './Components/Shared/Styles/NavButton.module.css';\nimport styles from './Nav.module.css';\n\ninterface NavState {\n isFirstPaint: boolean;\n isApplicationInProgress: boolean;\n basketLinkUrl: string;\n openedItem?: NavItem;\n}\n\ninterface NavProps {\n navElementsColor: NavButtonVariant;\n changeSearchOpened: (searchStatus: boolean) => void;\n model: Omit & {\n menuColumnsLayout: Pick['menuContentProps']['menuColumnsLayout'];\n };\n}\n\nexport const Nav: React.FC> = props => {\n const { model, navElementsColor, changeSearchOpened } = props;\n const navContainerRef = useRef(null);\n const [navState, setNavState] = useState({\n openedItem: undefined,\n isFirstPaint: true,\n isApplicationInProgress: false,\n basketLinkUrl: '',\n });\n\n useEffect(() => {\n function handleClickOutside(event: MouseEvent) {\n if (\n navContainerRef.current &&\n event.target instanceof Node &&\n !navContainerRef.current.contains(event.target)\n ) {\n changeSearchOpened(false);\n setNavState(prevState => ({ ...prevState, openedItem: undefined }));\n }\n }\n\n document.addEventListener('click', handleClickOutside);\n\n return () => document.removeEventListener('click', handleClickOutside);\n }, []);\n\n const isOpened = (item: NavItem) => navState.openedItem === item;\n\n const toggleItem = (item: NavItem) => {\n changeSearchOpened(item === NavItem.Search && !isOpened(NavItem.Search));\n setNavState(prevState => ({\n ...prevState,\n openedItem: prevState.openedItem === item ? undefined : item,\n isFirstPaint: false,\n }));\n };\n\n const { navigationLinks, translations, languages } = model;\n const { isFirstPaint, isApplicationInProgress, basketLinkUrl } = navState;\n\n return (\n <>\n \n \n (\n
  • \n \n
  • \n )}\n className={styles.LinkList}\n />\n \n setNavState(prevState => ({\n ...prevState,\n isApplicationInProgress: inInProgress,\n basketLinkUrl: linkUrl,\n }))\n }\n {...model}\n />\n \n {isApplicationInProgress && (\n \n )}\n \n \n \n \n \n \n );\n};\n","// extracted by mini-css-extract-plugin\nexport default {\"Nav\":\"s5lUi0VozLPvqFdo1po6\",\"LangPicker\":\"LStxyVBemHemL4YRsnoW\",\"Variant--searchOpen\":\"uzSsr3eZAc6Vli04jHSY\",\"Button\":\"NlTLlTmAj2hFo0ZBlxx4\",\"Login\":\"V_bwsvvYPAhcwYPGubWB\",\"ButtonList\":\"UmtusXge016yJqCK_J2d\",\"LinkList\":\"TjB74AetASoAKKvJ9hil\",\"ListItem\":\"dPHhChy7qN_r7H0KT2Bw\"};","import classNames from 'classnames';\nimport * as React from 'react';\nimport type { InfoBannerBlockViewModel } from '~/Blocks/InfoBannerBlock/InfoBannerBlockViewModel.csharp';\nimport { useLogoSettings } from '~/Features/Configuration/Hooks/useLogoSettings';\nimport { NavigationVariant } from '~/Features/Navigation/NavigationVariant.csharp';\nimport type { NavigationViewModel } from '~/Features/Navigation/NavigationViewModel.csharp';\nimport { mapToMenuColumnsLayout } from '~/Partials/Header/Utils/menuColumnLayoutMapper';\nimport { InfoBannerWithState } from '~/Partials/InfoBanner/InfoBannerWithState';\nimport { KristianiaLogo } from '~/Partials/KristianiaLogo/KristianiaLogo';\nimport { Link } from '~/Partials/Link/Link';\nimport { LinkType } from '~/Partials/Link/LinkType.csharp';\nimport { LanguagePicker } from '~/Partials/Nav/Components/LanguagePicker/LanguagePicker';\nimport { resolveNavElementsColor } from '~/Partials/Nav/Components/Shared/Utils';\nimport { Nav } from '~/Partials/Nav/Nav';\nimport { useIsScrollOnTop } from '~/Utils/Hooks/useIsScrollOnTop';\nimport { useWindowWidthDetection } from '~/Utils/Hooks/useWindowWidthDetection';\nimport { MediaBreakpoints } from '~/Utils/MediaBreakpoints';\nimport { useScrollLockNotifier } from '~/Utils/ScrollLock/useScrollLockNotifier';\nimport styles from './Header.module.css';\nimport { useScrollDirection } from './Hooks/useScrollDirection';\n\nexport const hiddenHeaderClassName = 'PageWrapper--headerHidden';\nexport const infoBannerSettingKey = 'isInfoBannerClosed';\n\nexport interface HeaderProps {\n navigation: NavigationViewModel;\n infoBanner: InfoBannerBlockViewModel | null;\n}\n\nexport const Header: React.FC> = props => {\n const { navigation, infoBanner } = props;\n const { variant, translations, languages, startPageUrl } = navigation;\n\n const pageWrapperRef = React.useRef();\n const isMobile = useWindowWidthDetection({ condition: 'lessThan', breakpoint: MediaBreakpoints.Tablet });\n const lockState = useScrollLockNotifier();\n const { scrollDirection } = useScrollDirection(128, 'up', undefined, lockState.isLocked);\n\n const logoSettings = useLogoSettings();\n\n const isTransparent =\n variant === NavigationVariant.TransparentDark || variant === NavigationVariant.TransparentLight;\n\n React.useLayoutEffect(() => {\n pageWrapperRef.current = document.getElementById('PageWrapper') || undefined;\n updateMainClass();\n }, []);\n\n React.useEffect(() => {\n updateMainClass();\n }, [scrollDirection]);\n\n const updateMainClass = () => {\n if (scrollDirection === 'down' && isHeaderSticky && pageWrapperRef.current) {\n pageWrapperRef.current.classList.add(hiddenHeaderClassName);\n } else if (pageWrapperRef.current && pageWrapperRef.current.classList.contains(hiddenHeaderClassName)) {\n pageWrapperRef.current.classList.remove(hiddenHeaderClassName);\n }\n };\n\n const removeInfoBannerClassName = () => {\n pageWrapperRef.current?.classList.remove('InfoBanner--active');\n };\n\n const addInfoBannerClassName = () => {\n pageWrapperRef.current?.classList.add('InfoBanner--active');\n };\n const { isScrollOnTop } = useIsScrollOnTop();\n const [isSearchOpened, changeSearchOpened] = React.useState(false);\n const isHeaderSticky = !isScrollOnTop;\n\n const getHeaderInlineStyle = () => {\n if (lockState.isLocked && !lockState.isScrollBarVisible) {\n return {\n paddingRight: `${lockState.scrollBarWidth}px`,\n };\n }\n\n return undefined;\n };\n\n const navElementsColor = resolveNavElementsColor(\n variant,\n lockState.isLocked,\n isHeaderSticky || false,\n isSearchOpened,\n isMobile || false\n );\n const shouldLogoBeWhite = navElementsColor === 'light';\n\n const firstOtherAvailableLanguage = languages.filter(el => el.url !== null)[1];\n\n return (\n \n \n {translations.goToContent}\n \n \n {firstOtherAvailableLanguage && (\n
    \n \n
    \n )}\n
    \n
    \n \n \n \n \n
    \n
    \n \n );\n};\n","import { NavigationVariant } from '~/Features/Navigation/NavigationVariant.csharp';\n\nexport const resolveNavElementsColor = (\n variant: NavigationVariant,\n isScrollLocked: boolean,\n isHeaderSticky: boolean,\n isSearchOpened: boolean,\n isMobile: boolean\n) =>\n variant === NavigationVariant.TransparentLight &&\n !isScrollLocked &&\n !isHeaderSticky &&\n !(isSearchOpened && isMobile)\n ? 'light'\n : 'dark';\n","// extracted by mini-css-extract-plugin\nexport default {\"Header\":\"xWEErMIangISxKSWZpcY\",\"Variant--transparent\":\"XfLY1WJ8ER4wIs_Bdzx4\",\"Variant--searchOpened\":\"WSCRmmiz9WmBw5vQmMyZ\",\"Variant--scrollLocked\":\"BtykVc7uid7cVXAbjC2Q\",\"Variant--sticky\":\"k1FMe9gyYPyviVTIsVjg\",\"Wrapper\":\"YnAZamBGfxZI8e9d1hhp\",\"Inner\":\"e80t0DgfSzlKMRjkGI08\",\"HomeLink\":\"sACW0zug7xrsLfQuOoRw\",\"SkipLink\":\"ih6PM2XpnPnHlvxJXeyq\",\"HeaderStickyLanguagePicker\":\"d_89y0HrrEUFhleIgtw3\"};","// inspiration: https://github.com/yowainwright/scrolldir\n\nimport * as React from 'react';\nimport { getScrollY } from '~/Utils/scrollPosition';\n\nexport type ScrollDirection = 'up' | 'down';\n\nexport const useScrollDirection = (\n thresholdPixels: number,\n initialDirection: ScrollDirection = 'down',\n elementId?: string,\n off = false\n) => {\n const [scrollDirection, setScrollDirection] = React.useState(initialDirection);\n\n React.useEffect(() => {\n if (off) {\n return;\n }\n\n const scrollableElement = (elementId && window.document.getElementById(elementId)) || window;\n const threshold = thresholdPixels || 0;\n let lastScrollY = getScrollY(scrollableElement);\n let ticking = false;\n\n const updateScrollDirection = () => {\n const scrollY = getScrollY(scrollableElement);\n\n if (Math.abs(scrollY - lastScrollY) < threshold) {\n ticking = false;\n\n return;\n }\n\n setScrollDirection(scrollY > lastScrollY ? 'down' : 'up');\n lastScrollY = scrollY > 0 ? scrollY : 0;\n ticking = false;\n };\n\n const onScroll = () => {\n if (!ticking) {\n window.requestAnimationFrame(updateScrollDirection);\n ticking = true;\n }\n };\n\n scrollableElement.addEventListener('scroll', onScroll);\n\n return () => scrollableElement.removeEventListener('scroll', onScroll);\n }, [initialDirection, thresholdPixels, off, elementId]);\n\n return { scrollDirection };\n};\n","import * as React from 'react';\nimport { Button } from '../Button/Button';\nimport { Link } from '../Link/Link';\nimport { SvgIcon } from '../SvgIcon/SvgIcon';\nimport type { InfoBannerBlockViewModel } from '~/Blocks/InfoBannerBlock/InfoBannerBlockViewModel.csharp';\nimport styles from './InfoBanner.module.css';\n\nexport interface InfoBannerProps {\n model: InfoBannerBlockViewModel;\n closeInfoBanner: () => void;\n closeTranslation: string;\n}\n\nexport const InfoBanner: React.FC> = props => {\n const { model, closeInfoBanner, closeTranslation } = props;\n const { infoText, infoUrl } = model;\n\n return (\n
    \n
    \n {infoUrl ? :

    {infoText}

    }\n
    \n \n
    \n );\n};\n","// extracted by mini-css-extract-plugin\nexport default {\"InfoBanner\":\"ahVFNezQhHfbAZFMemm5\",\"Inner\":\"_0ZZJsE2TDJpZW3T_ZPR\",\"Close\":\"_199pwNIo053hZan5zdi\",\"CloseIcon\":\"Efrye57F_LNIcHmbQzWq\"};","import isEqual from 'lodash/isEqual';\nimport * as React from 'react';\nimport type { InfoBannerBlockViewModel } from '~/Blocks/InfoBannerBlock/InfoBannerBlockViewModel.csharp';\nimport { InfoBanner } from '~/Partials/InfoBanner/InfoBanner';\nimport { useVariableWithStableRef } from '~/Utils/Hooks/useVariableWithStableRef';\n\nexport interface InfoBannerWithStateProps {\n info: InfoBannerBlockViewModel | null;\n localStorageKey: string;\n onOpened: () => void;\n onClosed: () => void;\n closeTranslation: string;\n}\n\nexport const InfoBannerWithState: React.FC = props => {\n const { localStorageKey, info, onOpened, onClosed, closeTranslation } = props;\n\n const [isBannerVisible, setIsBannerVisible] = React.useState(false);\n const onOpenedRef = useVariableWithStableRef(onOpened);\n\n React.useEffect(() => {\n if (!info?.infoText) {\n return;\n }\n\n const closedInfoBanner = localStorage.getItem(localStorageKey);\n\n if (closedInfoBanner) {\n const parsedInfoBanner = JSON.parse(closedInfoBanner);\n const areEqual = isEqual(parsedInfoBanner, info);\n\n if (areEqual) {\n return;\n }\n }\n\n setIsBannerVisible(true);\n onOpenedRef.current?.();\n }, [info, localStorageKey, onOpenedRef]);\n\n const closeInfoBanner = () => {\n setIsBannerVisible(false);\n onClosed();\n localStorage.setItem(localStorageKey, JSON.stringify(info));\n };\n\n return info && isBannerVisible ? (\n \n ) : null;\n};\n","export const loadLottieComponent = async () => {\n const lottie = await import('lottie-react');\n\n return lottie.default;\n};\n","// extracted by mini-css-extract-plugin\nexport default {\"KristianiaLogo\":\"SOq3aos3MbDR1nypThpA\",\"Variant--medium\":\"NcSnoDe4vPDm93ronV7g\",\"Variant--symbol\":\"kHJBIYIb05_NFGed8mlp\",\"Variant--horizontal\":\"oZuOSvhMFNhy4NjiXFuk\",\"Variant--large\":\"G7BSPpJACr_flPdHa5Em\",\"Variant--white\":\"VvvXZuGwOP0ZVSmfdjI3\"};","import classNames from 'classnames';\nimport type { LottieComponentProps } from 'lottie-react';\nimport * as React from 'react';\nimport { SvgIcon } from '../SvgIcon/SvgIcon';\nimport type { LogoVariant } from '~/Partials/KristianiaLogo/LogoVariant';\nimport { loadLottieComponent } from '~/Partials/KristianiaLogo/utilsLottie.client';\nimport { FilledSvgIcon } from '~/Partials/SvgIcon/FilledSvgIcon';\nimport { assertNever } from '~/Partials/Utils/typeUtils';\nimport LogoHorizontalBlack from '~/Static/Images/AnimatedLogos/logo-horizontal-black.json';\nimport LogoSymbolBlack from '~/Static/Images/AnimatedLogos/logo-symbol-black.json';\nimport { LazyComponent } from '~/Utils/Lazy/LazyComponent';\nimport styles from './KristianiaLogo.module.css';\n\nexport interface KristianiaBaseLogoProps {\n label: string;\n variant?: LogoVariant;\n color?: 'white' | 'black';\n}\n\nexport interface KristianiaPredefinedSizeLogoProps {\n size: 'medium' | 'large';\n}\n\nexport interface KristianiaCustomSizeLogoProps {\n size: 'custom';\n width: number;\n height: number;\n}\n\nexport interface KristianiaFixedLogoProps {\n type: 'fixed';\n version: 'horizontal' | 'symbol';\n}\n\nexport interface KristianiaResponsiveLogoProps {\n type: 'responsive';\n}\n\nexport type KristianiaLogoProps = KristianiaBaseLogoProps &\n (KristianiaFixedLogoProps | KristianiaResponsiveLogoProps) &\n (KristianiaPredefinedSizeLogoProps | KristianiaCustomSizeLogoProps);\n\nexport const KristianiaLogo: React.FC = props => {\n const { label, type, variant = 'default', color = 'black', size } = props;\n\n const resolveStyles = (): React.CSSProperties | undefined => {\n if (size === 'custom') {\n const { width, height } = props;\n\n return {\n '--logoWidth': `${width}px`,\n '--logoHeight': `${height}px`,\n } as React.CSSProperties;\n }\n\n return undefined;\n };\n\n const isColorful = variant === 'pride';\n\n const baseClassNames = classNames(\n styles.KristianiaLogo,\n size !== 'custom' && styles[`Variant--${size}`],\n !isColorful && styles[`Variant--${color}`]\n );\n\n const isResponsive = type === 'responsive';\n\n const getSymbolClasses = () => classNames(baseClassNames, styles['Variant--symbol'], isResponsive && 'mobileOnly');\n const getHorizontalClasses = () =>\n classNames(baseClassNames, styles['Variant--horizontal'], isResponsive && 'tabletAndUp');\n\n const shouldRenderSymbol = isResponsive || (type === 'fixed' && props.version === 'symbol');\n const shouldRenderHorizontal = isResponsive || (type === 'fixed' && props.version === 'horizontal');\n\n const getContent = () => {\n switch (variant) {\n case 'default':\n return (\n <>\n {shouldRenderSymbol && }\n {shouldRenderHorizontal && }\n \n );\n case 'pride':\n return (\n <>\n {shouldRenderSymbol && (\n \n )}\n {shouldRenderHorizontal && (\n \n )}\n \n );\n case 'animated':\n return (\n <>\n {shouldRenderSymbol && (\n \n fallbackComponent={}\n componentProps={{\n animationData: LogoSymbolBlack,\n className: getSymbolClasses(),\n }}\n importComponentMethod={loadLottieComponent}\n />\n )}\n {shouldRenderHorizontal && (\n \n fallbackComponent={}\n componentProps={{\n animationData: LogoHorizontalBlack,\n className: getHorizontalClasses(),\n }}\n importComponentMethod={loadLottieComponent}\n />\n )}\n \n );\n default:\n assertNever(variant);\n }\n };\n\n return (\n \n {label}\n {getContent()}\n \n );\n};\n","import * as React from 'react';\nimport type { ReactNode } from 'react';\n\ninterface ListProps extends Pick, 'role' | 'tabIndex' | 'onKeyDown'> {\n items: ReadonlyArray;\n renderItem: (item: T, index: number) => ReactNode;\n className?: string;\n}\n\nconst ListComponent = (props: ListProps, ref?: React.Ref) => {\n const { items, renderItem, className, ...otherProps } = props;\n\n return (\n
      \n {items.map((item, index) => renderItem(item, index))}\n
    \n );\n};\n\ntype GenericForwardRefList = (\n props: ListProps & { ref?: React.Ref }\n) => React.ReactElement;\n\nexport const List = React.forwardRef(ListComponent) as GenericForwardRefList;\n","import { CampusApplicationProcessState } from '../../CampusApplication/CampusApplicationProcessState';\nimport { OnlineApplicationProcessState } from '../../OnlineApplication/OnlineApplicationProcessState';\n\nexport enum ApplicationProgressState {\n NoApplicationInProgress,\n CampusApplicationInProgress,\n OnlineApplicationInProgress,\n}\n\nexport const getApplicationProgressState: () => ApplicationProgressState = () => {\n const campusApplicationProcessState = CampusApplicationProcessState();\n const onlineApplicationProcessState = OnlineApplicationProcessState();\n\n const campusChoices = campusApplicationProcessState.getAll();\n\n if (campusChoices && campusChoices.length > 0) {\n return ApplicationProgressState.CampusApplicationInProgress;\n }\n\n const onlineChoices = onlineApplicationProcessState.getAll();\n\n if (onlineChoices && onlineChoices.length > 0) {\n return ApplicationProgressState.OnlineApplicationInProgress;\n }\n\n return ApplicationProgressState.NoApplicationInProgress;\n};\n","import type { QueryParameter } from '../QueryParameterUtils';\nimport { Event } from '~/Features/Messaging/types';\n\nexport class QueryParametersChanged extends Event {\n public static readonly id = 'QueryParametersChanged';\n\n constructor(\n public queryParams: QueryParameter[],\n public storedInHistory: boolean\n ) {\n super(QueryParametersChanged.id);\n }\n}\n","import { useState } from 'react';\nimport ExecutionContext from '../../ExecutionContext';\nimport { toUrl } from '../Utils/utils';\nimport { MessageBroker } from '~/Features/Messaging/MessageBroker';\nimport { useMessageHandler } from '~/Features/Messaging/useMessageHandler';\nimport { QueryParametersChanged } from '~/Partials/SearchBase/Events/QueryParametersChanged';\n\nexport type QueryParameter = { name: string; value: string };\n\nexport const formatQueryParameters = (params: QueryParameter[]) =>\n params.length === 0 ? '' : `?${params.map(param => `${param.name}=${param.value}`).join('&')}`;\n\nexport const getQueryParametersFromUrl = (url: string): QueryParameter[] => {\n const result = [] as QueryParameter[];\n\n if (ExecutionContext.IsServerSide()) {\n return result;\n }\n\n const params = toUrl(url).searchParams;\n params.forEach((value, key) => result.push({ name: key, value }));\n\n return result;\n};\n\nexport const buildAbsoluteUrlWithQueryParameters = (baseUrl: string, queryParams: QueryParameter[]) => {\n if (ExecutionContext.IsServerSide() || queryParams.length === 0) {\n return baseUrl;\n }\n\n const newUrl = toUrl(baseUrl);\n newUrl.search = '';\n\n queryParams.forEach(param => newUrl.searchParams.append(param.name, param.value));\n\n return newUrl.toString();\n};\n\nexport const changeQueryParametersInActiveUrl = (queryParameters: QueryParameter[], addHistoryEntry = true) => {\n ExecutionContext.ThrowIfServerSide();\n\n const urlWithSearchParams = buildAbsoluteUrlWithQueryParameters(window.location.pathname, queryParameters);\n\n if (addHistoryEntry) {\n document.URL !== urlWithSearchParams && window.history.pushState('', '', urlWithSearchParams);\n } else {\n window.history.replaceState('', '', urlWithSearchParams);\n }\n\n MessageBroker.publish(new QueryParametersChanged(queryParameters, addHistoryEntry));\n};\n\nexport const useQueryParametersObserver = (onlyStoredInHistory = true) => {\n const [queryParams, setQueryParams] = useState([]);\n\n useMessageHandler(QueryParametersChanged.id, (event: QueryParametersChanged) => {\n if (onlyStoredInHistory && !event.storedInHistory) {\n return;\n }\n\n setQueryParams(event.queryParams);\n });\n\n return queryParams;\n};\n","import type { FC } from 'react';\nimport React from 'react';\nimport type { FilledIconsEnum } from '~/Features/FilledIconsEnum.csharp';\nimport { SvgIconBase } from './SvgIconBase';\nimport { assetPathBuilder } from './Utils/Utils';\n\nexport type FilledIconName = `${FilledIconsEnum}`;\n\ninterface FilledSvgIconProps {\n iconName: FilledIconName;\n className?: string;\n}\n\nexport const FilledSvgIcon: FC> = props => {\n const { iconName, className } = props;\n const iconPath = assetPathBuilder(iconName, true);\n\n return ;\n};\n","import { getContentLocale } from '~/Features/Configuration/Utils/languageUtils';\n\nexport type FormatArgs = Record;\n\nexport interface TxtProps {\n id: keyof T;\n values?: FormatArgs;\n}\n\n/**\n * Apply variables to string with {} placeholders\n * ex. format(`{price} is {amount}`, { price: 'Price', amount: 30 })\n */\nconst format = (template: string, values: FormatArgs) =>\n template.replace(/{(\\w+)}/g, (match, index) =>\n typeof values[index] !== 'undefined' ? values[index].toLocaleString(getContentLocale()) : match\n );\n\nexport const FormattedText = (text: string, values?: FormatArgs) => (text && values ? format(text, values) : text);\n","import { useEffect, useState } from 'react';\n\nexport const useIsMounted = () => {\n const [isMounted, setIsMounted] = useState(false);\n\n useEffect(() => {\n setIsMounted(true);\n }, []);\n\n return isMounted;\n};\n","import throttle from 'lodash/throttle';\nimport * as React from 'react';\nimport { getScrollY } from '~/Utils/scrollPosition';\n\nexport function useIsScrollOnTop(element: HTMLElement | string | undefined = undefined) {\n const [isScrollOnTop, setIsScrollOnTop] = React.useState(true);\n const onScroll = (scrollableElement: HTMLElement | (Window & typeof globalThis)) => {\n setIsScrollOnTop(getScrollY(scrollableElement) === 0);\n };\n\n React.useEffect(() => {\n const getScrollableElement = () => {\n if (element === undefined) {\n return window;\n }\n\n return typeof element === 'string' ? document.getElementById(element) : element;\n };\n const scrollableElement = getScrollableElement();\n\n if (scrollableElement === null) {\n return;\n }\n\n const throttledOnScroll = throttle(() => onScroll(scrollableElement), 100);\n scrollableElement.addEventListener('scroll', throttledOnScroll);\n setIsScrollOnTop(getScrollY(scrollableElement) === 0);\n\n return () => {\n scrollableElement.removeEventListener('scroll', throttledOnScroll);\n };\n }, [element]);\n\n return { isScrollOnTop };\n}\n","import { useEffect, useRef } from 'react';\n\nexport function useVariableWithStableRef(variable: T) {\n const variableRef = useRef(variable);\n\n useEffect(() => {\n variableRef.current = variable;\n }, [variable]);\n\n return variableRef;\n}\n","import * as React from 'react';\nimport { assertNever } from '~/Partials/Utils/typeUtils';\n\nconst CheckIfWidthMatchesOptions = (width: number, options: WindowWidthDetectionOptions) => {\n switch (options.condition) {\n case 'greaterThan':\n return width > options.breakpoint;\n case 'greaterOrEqual':\n return width >= options.breakpoint;\n case 'lessThan':\n return width < options.breakpoint;\n case 'lessOrEqual':\n return width <= options.breakpoint;\n case 'inRange':\n return width >= options.lowerBreakpoint && width <= options.upperBreakpoint;\n case 'inRangeExclusive':\n return width > options.lowerBreakpoint && width < options.upperBreakpoint;\n default:\n assertNever(options);\n }\n};\n\ninterface WindowWidthDetectionOptionsSingleArgument {\n condition: 'greaterThan' | 'lessThan' | 'greaterOrEqual' | 'lessOrEqual';\n breakpoint: number;\n}\n\ninterface WindowWidthDetectionOptionsTwoArguments {\n condition: 'inRange' | 'inRangeExclusive';\n lowerBreakpoint: number;\n upperBreakpoint: number;\n}\n\nexport type WindowWidthDetectionOptions =\n | WindowWidthDetectionOptionsSingleArgument\n | WindowWidthDetectionOptionsTwoArguments;\n\nexport const useWindowWidthDetection = (options: WindowWidthDetectionOptions) => {\n const [matchesOptions, setMatchesOptions] = React.useState();\n\n const getDependencies = () => {\n switch (options.condition) {\n case 'greaterThan':\n case 'greaterOrEqual':\n case 'lessThan':\n case 'lessOrEqual':\n return [options.condition, options.breakpoint];\n case 'inRange':\n case 'inRangeExclusive':\n return [options.condition, options.lowerBreakpoint, options.upperBreakpoint];\n\n default:\n assertNever(options);\n }\n };\n\n React.useEffect(() => {\n const getWindowSize = () => {\n const { innerWidth: width, innerHeight: height } = window;\n\n return {\n width,\n height,\n };\n };\n\n const handleResize = () => {\n const size = getWindowSize();\n const matches = CheckIfWidthMatchesOptions(size.width, options);\n\n setMatchesOptions(matches);\n };\n\n window.addEventListener('resize', handleResize);\n handleResize();\n\n return () => window.removeEventListener('resize', handleResize);\n }, getDependencies());\n\n return matchesOptions;\n};\n","import { useEffect } from 'react';\n\nexport const useOnPageLoaded = (callback: () => void) => {\n useEffect(() => {\n if (document.readyState === 'complete') {\n callback();\n\n return;\n }\n\n const readyStateChangeHandler = () => {\n if (document.readyState === 'complete') {\n callback();\n }\n };\n\n document.addEventListener('readystatechange', readyStateChangeHandler);\n\n return () => {\n document.removeEventListener('readystatechange', readyStateChangeHandler);\n };\n }, []);\n};\n","import * as React from 'react';\nimport { useOnPageLoaded } from '~/Utils/Hooks/useOnPageLoaded';\n\nconst timeToInteractiveThreshold = 5000;\nconst ensureCoefficient = 1.5; // Purely heuristic value\n\ninterface LazyComponentProps {\n importComponentMethod: () => Promise>;\n componentProps: TComponentPropsType;\n fallbackComponent?: React.ReactNode;\n}\n\nexport const LazyComponent = (props: LazyComponentProps) => {\n const { importComponentMethod, fallbackComponent, componentProps } = props;\n const [Component, setComponent] = React.useState | null>(null);\n\n useOnPageLoaded(() => {\n // We delay the loading of a component to ensure that the page is already interactive.\n // This is to prevent a component from blocking the rendering of the page and increasing TBT metric.\n setTimeout(async () => {\n const loadedComponent = await importComponentMethod();\n // React executes the function passed to setState, so we cannot store the component directly.\n setComponent(() => loadedComponent);\n }, timeToInteractiveThreshold * ensureCoefficient);\n });\n\n if (!Component) {\n return fallbackComponent;\n }\n\n return ;\n};\n","export class TelemetryLogger {\n public static errorMessage = (error: string) => {\n console.error(error);\n\n const { appInsights } = window as any;\n\n appInsights?.trackException(new Error(error));\n };\n\n public static error = (error: unknown) => {\n console.error(error);\n\n const { appInsights } = window as any;\n\n appInsights?.trackException(new Error(`${error}`));\n };\n}\n","export class MediaBreakpoints {\n static readonly Mobile = 375;\n\n static readonly Tablet = 768;\n\n static readonly Desktop = 1024;\n\n static readonly DesktopHD = 1440;\n}\n","import * as React from 'react';\nimport { MessageBroker } from '~/Features/Messaging/MessageBroker';\nimport { ScrollLockUpdated } from '~/Utils/ScrollLock/ScrollLockUpdated';\nimport styles from './ScrollLock.module.css';\n\ninterface ScrollLockProps {\n isLocked: boolean;\n shouldHideMainScrollBar?: boolean;\n}\n\nconst lockedClassName = styles['ScrollLock--enabled'];\nconst hiddenScrollBarClassName = styles['ScrollLock--hiddenScrollBar'];\n\nexport const ScrollLock: React.FC = props => {\n const { isLocked, shouldHideMainScrollBar } = props;\n\n const [scrollPosition, setScrollPosition] = React.useState(undefined);\n const scrollPositionRef = React.useRef();\n\n React.useEffect(() => {\n scrollPositionRef.current = scrollPosition;\n }, [scrollPosition]);\n\n React.useEffect(() => {\n const { body } = document;\n const scrollY = window.scrollY || window.pageYOffset;\n\n const lock = (position: number) => {\n // Calculated before adding locked class, because page might not have a scrollbar before that\n const scrollBarWidth = window.innerWidth - body.offsetWidth;\n\n body.classList.add(lockedClassName);\n body.style.top = `-${position}px`;\n\n if (shouldHideMainScrollBar) {\n body.classList.add(hiddenScrollBarClassName);\n body.style.paddingRight = `${scrollBarWidth}px`;\n\n MessageBroker.publish(\n new ScrollLockUpdated({\n isLocked: true,\n isScrollBarVisible: false,\n scrollBarWidth,\n })\n );\n } else {\n MessageBroker.publish(\n new ScrollLockUpdated({\n isLocked: true,\n isScrollBarVisible: true,\n })\n );\n }\n };\n\n const unlock = (position: number) => {\n body.classList.remove(lockedClassName);\n body.style.top = '';\n\n if (shouldHideMainScrollBar) {\n body.classList.remove(hiddenScrollBarClassName);\n body.style.paddingRight = '';\n }\n\n MessageBroker.publish(new ScrollLockUpdated({ isLocked: false }));\n\n window.scrollTo(0, position);\n };\n\n const shouldLock = isLocked && !body.classList.contains(lockedClassName);\n\n if (shouldLock) {\n lock(scrollY);\n setScrollPosition(scrollY);\n } else {\n if (scrollPosition !== undefined) {\n unlock(scrollPosition);\n }\n\n setScrollPosition(undefined);\n }\n\n return () => {\n if (scrollPositionRef.current !== undefined) {\n unlock(scrollPositionRef.current);\n }\n };\n }, [shouldHideMainScrollBar, isLocked]);\n\n return null;\n};\n","// extracted by mini-css-extract-plugin\nexport default {\"ScrollLock--enabled\":\"Q0v9bFNU46mzd2ECi6p_\",\"ScrollLock--hiddenScrollBar\":\"BqUTYZ5JDn6ke9pgViA1\"};","import { Event } from '~/Features/Messaging/types';\n\ninterface LockedWithScrollBar {\n isLocked: true;\n isScrollBarVisible: true;\n}\n\ninterface LockedWithoutScrollBar {\n isLocked: true;\n isScrollBarVisible: false;\n scrollBarWidth: number;\n}\n\ninterface Unlocked {\n isLocked: false;\n}\n\nexport type ScrollLockState = LockedWithScrollBar | LockedWithoutScrollBar | Unlocked;\n\nexport class ScrollLockUpdated extends Event {\n public static readonly id = 'ScrollLockUpdated';\n\n constructor(public readonly state: ScrollLockState) {\n super(ScrollLockUpdated.id);\n }\n}\n","import { useState } from 'react';\nimport { useMessageHandler } from '~/Features/Messaging/useMessageHandler';\nimport type { ScrollLockState } from '~/Utils/ScrollLock/ScrollLockUpdated';\nimport { ScrollLockUpdated } from '~/Utils/ScrollLock/ScrollLockUpdated';\n\nexport function useScrollLockNotifier() {\n const [scrollLockState, setScrollLockState] = useState({\n isLocked: false,\n });\n\n useMessageHandler(ScrollLockUpdated.id, (event: ScrollLockUpdated) => {\n setScrollLockState(event.state);\n });\n\n return scrollLockState;\n}\n","export const getScrollY = (element: HTMLElement | (Window & typeof globalThis)) => {\n if (element instanceof HTMLElement) {\n return element.scrollTop;\n }\n\n return element.pageYOffset;\n};\n"],"names":["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","Event","AddingDifferentApplicationTypeAttempt","constructor","super","id","CampusApplicationProcessState","isOnlineApplicationInProgress","getStoredOnlineApplicationChoices","length","getAll","getStoredCampusApplicationChoices","append","newChoice","ExecutionContext","ThrowIfServerSide","MessageBroker","publish","currentChoices","AddingExistingItemAttempt","studyCode","variantCode","AddingAnotherOptionAttempt","MaxChoicesNumber","MaxNumberOfChoicesExceeded","push","CampusApplicationStateStorageKey","CampusApplicationItemAdded","CampusAnalytics","addProducts","clear","CampusApplicationItemRemoved","remove","filter","setAll","newChoices","isItemsLimitReached","IsServerSide","currentStateJson","CampusApplicationEvent","currentChoicesNumber","maxChoicesNumber","useLogoSettings","useMemo","GlobalContextProvider","getLogoSettings","subscribe","handler","messageId","handlers","this","MessageHandlersByMessageId","unsubscribe","h","message","GetMessageHandlers","forEach","handle","schedulePublish","delay","setTimeout","Message","useMessageHandler","onMessage","onMessageRef","useVariableWithStableRef","useLayoutEffect","event","current","OnlineApplicationEvent","OnlineApplicationItemRemoved","OnlineApplicationItemAdded","OnlineApplicationProcessState","isCampusApplicationInProgress","choices","choicesFromBasket","isArray","choiceShouldBeAdded","choiceFromBasket","currentChoiceIndex","currentChoice","code","parentStudy","timeType","splice","OnlineApplicationStateStorageKey","Button","React","props","ref","children","theme","passThroughProps","_objectWithoutProperties","_excluded","type","ButtonType","Clear","ThemedButton","_extends","RawButton","className","size","tier","htmltype","otherProps","_excluded2","classNames","styles","contextualTheme","useTheme","additionalProps","_excluded3","withBoxShadow","withRoundedCorners","getHeight","content","scrollHeight","Collapse","onRest","isOpen","withMarginTransition","rest","toggleStyles","style","height","setHeight","useState","overflow","setOverflow","visibility","setVisibility","isMounted","useIsMounted","useEffect","window","requestAnimationFrame","useCollapse","willChange","onTransitionEnd","target","propertyName","_CampusAnalytics","items","products","createProductFromApplicationChoice","actionField","createBaseActionFieldFromApplicationChoice","GtmCommerceEventsHandler","pushAddProducts","removeProducts","pushRemoveProducts","checkout","stepNumber","baseActionField","pushBeginCheckout","checkoutActionField","checkout_step","pushCheckout","applicationResult","data","createPurchaseActionFieldFromCampusApplication","pushPurchase","currency","value","sumBy","_item$price","price","_choice$educationCate","_choice$educationCate2","studyType","level","VocationalSchoolBrand","CampusBrand","item_id","item_name","name","affiliation","item_brand","join","item_category","studyFormType","item_category2","points","item_category3","label","item_variant","quantity","result","_item$price2","transaction_id","requestId","coupon","shipping","tax","OnlineStudyBrand","SingleSubject","SchoolName","GtmEventsBase","_GtmCommerceEventsHandler","ecommerce","pushCheckoutOption","option","eventName","checkout_option","pushProductDetail","detail","_choice$price","variantCity","dataLayer","_GtmEventsBase","pushGtmPageStats","gtmPageStatsViewModel","properties","pushEvent","payLoad","arguments","NavigationVariant","mapToMenuColumnsLayout","menuColumnsCount","Error","LanguagePicker","language","variant","additionalQueryParams","useQueryParametersObserver","Link","href","buildAbsoluteUrlWithQueryParameters","url","StickyLanguagePicker","lang","LinkType","Content","SvgIcon","Icon","iconName","Label","BasketButton","_ref","basketLinkUrl","translations","onClick","handleButtonClick","location","navStyles","ButtonIcon","basket","BasketStateObserver","onStateChanged","isApplicationInProgress","studySearchPageUrl","campusApplicationUrl","onlineApplicationUrl","setState","ApplicationProgressState","NoApplicationInProgress","updateState","getApplicationProgressState","getBasketLinkUrl","CampusApplicationInProgress","OnlineApplicationInProgress","useBasketButtonModel","getIconName","languageCode","LanguagesPicker","languages","languageEntries","i","key","MenuSection","isOpened","heading","toggle","prevState","close","open","MenuContent","sections","menuColumnsLayout","firstOtherAvailableLanguage","el","Inner","NavLanguagePicker","Level1","section","idx","moveToHeaderOnDesktop","FormattedText","openSection","closeSection","Level2","menuItem","index","linkUrl","title","NavItem","MenuContentButton","isFirstPaint","toggleItem","menuTranslation","menuContentProps","Menu","FocusTrap","active","focusTrapOptions","allowOutsideClick","navButtonStyles","MyPageButton","myPageUrl","showMyPageTranslation","NavButtons","childrenButtons","c","childButton","navButtonProps","buttonKey","SearchButton","searchPageUrl","searchInputRef","redirectToSearch","e","preventDefault","searchPhrase","studySearchUrlWithSearchPhrase","encodeURIComponent","redirect","onSearchElementFocus","Search","role","tabIndex","closeSearch","openSearch","htmlFor","inputSearchPhrase","onKeyPress","keyCode","Key","Enter","handleSearchInputKeyDown","placeholder","search","onFocus","handleTransitionEnd","_searchInputRef$curre","focus","Nav","navElementsColor","changeSearchOpened","navContainerRef","useRef","navState","setNavState","openedItem","handleClickOutside","Node","contains","document","addEventListener","removeEventListener","navigationLinks","ScrollLock","isLocked","List","renderItem","link","inInProgress","showMyPage","menu","hiddenHeaderClassName","infoBannerSettingKey","Header","navigation","infoBanner","startPageUrl","pageWrapperRef","isMobile","useWindowWidthDetection","condition","breakpoint","MediaBreakpoints","Tablet","lockState","useScrollLockNotifier","scrollDirection","useScrollDirection","logoSettings","isTransparent","TransparentDark","TransparentLight","getElementById","updateMainClass","isHeaderSticky","classList","add","isScrollOnTop","useIsScrollOnTop","isSearchOpened","resolveNavElementsColor","isScrollLocked","shouldLogoBeWhite","getHeaderInlineStyle","isScrollBarVisible","paddingRight","scrollBarWidth","goToContent","InfoBannerWithState","info","localStorageKey","onOpened","addInfoBannerClassName","_pageWrapperRef$curre2","onClosed","removeInfoBannerClassName","_pageWrapperRef$curre","closeTranslation","closeInfoBanner","KristianiaLogo","headerVariant","headerAltText","defaultAltText","color","thresholdPixels","initialDirection","elementId","off","setScrollDirection","scrollableElement","threshold","lastScrollY","getScrollY","ticking","updateScrollDirection","scrollY","Math","abs","onScroll","InfoBanner","infoText","infoUrl","external","isBannerVisible","setIsBannerVisible","onOpenedRef","_onOpenedRef$current","closedInfoBanner","parsedInfoBanner","isEqual","call","loadLottieComponent","async","default","isColorful","baseClassNames","isResponsive","getSymbolClasses","getHorizontalClasses","shouldRenderSymbol","shouldRenderHorizontal","resolveStyles","width","getContent","FilledSvgIcon","LazyComponent","fallbackComponent","componentProps","animationData","LogoSymbolBlack","importComponentMethod","LogoHorizontalBlack","ListComponent","campusApplicationProcessState","onlineApplicationProcessState","campusChoices","onlineChoices","QueryParametersChanged","queryParams","storedInHistory","formatQueryParameters","params","param","getQueryParametersFromUrl","toUrl","searchParams","baseUrl","newUrl","toString","changeQueryParametersInActiveUrl","queryParameters","addHistoryEntry","urlWithSearchParams","pathname","URL","history","pushState","replaceState","onlyStoredInHistory","setQueryParams","iconPath","assetPathBuilder","SvgIconBase","path","text","values","format","template","replace","match","toLocaleString","getContentLocale","setIsMounted","element","setIsScrollOnTop","throttledOnScroll","throttle","variable","variableRef","options","matchesOptions","setMatchesOptions","handleResize","matches","CheckIfWidthMatchesOptions","lowerBreakpoint","upperBreakpoint","getWindowSize","innerWidth","innerHeight","getDependencies","Component","setComponent","callback","loadedComponent","timeToInteractiveThreshold","readyState","readyStateChangeHandler","error","console","appInsights","trackException","Mobile","Desktop","DesktopHD","lockedClassName","hiddenScrollBarClassName","shouldHideMainScrollBar","scrollPosition","setScrollPosition","scrollPositionRef","body","pageYOffset","unlock","position","top","ScrollLockUpdated","scrollTo","offsetWidth","lock","scrollLockState","setScrollLockState","HTMLElement","scrollTop"],"sourceRoot":""}