{"version":3,"sources":["pages/EntryPoint/PlateNumberLookupForm/styles.module.scss","enums/TargetUrlParam.ts","configs/environments.ts","utils/logger.ts","configs/texts.ts","utils/searchParamsResolver.ts","services/ApplicationConfig.ts","utils/masks.ts","icons/SearchIcon/index.tsx","pages/EntryPoint/PlateNumberLookupForm/index.tsx","utils/validators.ts","configs/placeholders.ts","icons/ErrorIcon/index.tsx","components/ResponsePageTemplate/index.tsx","components/ErrorPage/index.tsx","pages/EntryPoint/index.tsx","common/ErrorBoundary/index.tsx","common/GlobalConfig/index.tsx","App.tsx","index.tsx","components/ResponsePageTemplate/styles.module.scss","components/ErrorPage/styles.module.scss","pages/EntryPoint/styles.module.scss"],"names":["module","exports","TargetUrlParam","APP_INSIGHTS_INSTRUMENTATION_KEY","process","appInsights","trackValue","value","properties","severityLevel","route","window","location","href","SeverityLevel","Critical","Error","trackException","error","trackTrace","message","console","Warning","warn","info","init","ApplicationInsights","config","instrumentationKey","loadAppInsights","trackError","trackCriticalError","trackInfo","Information","trackWarning","texts","title","common","errorPage","errors","requiredQueryParameters","validationErrors","required","plateNumber","_searchParams","parse","search","getParam","name","errorText","_theme","_targetUrl","_retrieveAppConfigValue","key","SearchParamsResolver","this","isSuccessfullyInitialized","logger","catcher","plateNumberMask","mask","SearchIcon","props","width","height","viewBox","fill","version","xmlns","d","plateNumberValidation","test","undefined","handleSubmit","params","url","URL","ApplicationConfig","targetUrl","searchParams","append","PlateNumber","open","PlateNumberLookupForm","FormProvider","onSubmit","className","styles","formFieldsWrapper","FormField","placeholder","Target","Input","validate","toUpperCase","Button","size","type","variant","Icon","ErrorIcon","ResponsePageTemplate","logoWrapperClassName","Logo","description","classNames","responsePage","logoWrapper","Typography","component","ErrorPage","icon","iconWrapper","EntryPoint","wrapper","Section","innerSection","noContentOffset","ErrorBoundary","state","hasError","children","Component","GlobalConfig","theme","App","render","document","getElementById"],"mappings":"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","file":"main.b815d559caa58c51e5f6.js","sourcesContent":["// extracted by mini-css-extract-plugin\nmodule.exports = {\"formFieldsWrapper\":\"styles_formFieldsWrapper__2rN9g\"};","enum TargetUrlParam {\n PlateNumber = 'plateNumber',\n}\n\nexport default TargetUrlParam;\n","export const APP_INSIGHTS_INSTRUMENTATION_KEY = process.env.PLATE_NUMBER_LOOKUP_FACE_APP_INSIGHTS_INSTRUMENTATION_KEY || '';\n\n","import { ApplicationInsights, SeverityLevel } from '@microsoft/applicationinsights-web';\n\nimport { APP_INSIGHTS_INSTRUMENTATION_KEY } from '^configs/environments';\nimport IAppInsightsCustomProperties from '^types/insights/IAppInsightsCustomProperties';\n\nclass Logger {\n private appInsights: ApplicationInsights | null = null;\n\n private trackValue = (value: any, properties: IAppInsightsCustomProperties, severityLevel: SeverityLevel): void => {\n if (this.appInsights) {\n properties.route = window.location.href;\n\n if (severityLevel === SeverityLevel.Critical || severityLevel === SeverityLevel.Error) {\n this.appInsights.trackException({\n properties,\n severityLevel,\n error: value,\n });\n\n return;\n }\n\n this.appInsights.trackTrace({\n properties,\n severityLevel,\n message: value,\n });\n\n return;\n }\n\n switch (severityLevel) {\n case SeverityLevel.Critical:\n case SeverityLevel.Error:\n console.error(value);\n break;\n\n case SeverityLevel.Warning:\n console.warn(value);\n break;\n\n default:\n console.info(value);\n break;\n }\n };\n\n public init = (): void => {\n if (this.appInsights || !APP_INSIGHTS_INSTRUMENTATION_KEY) {\n return;\n }\n\n this.appInsights = new ApplicationInsights({\n config: {\n instrumentationKey: APP_INSIGHTS_INSTRUMENTATION_KEY,\n },\n });\n\n this.appInsights.loadAppInsights();\n };\n\n public trackError = (error: Error, properties: IAppInsightsCustomProperties): void => {\n this.trackValue(error, properties, SeverityLevel.Error);\n };\n\n public trackCriticalError = (error: Error, properties: IAppInsightsCustomProperties): void => {\n this.trackValue(error, properties, SeverityLevel.Critical);\n };\n\n public trackInfo = (message: string, properties: IAppInsightsCustomProperties): void => {\n this.trackValue(message, properties, SeverityLevel.Information);\n };\n\n public trackWarning = (message: string, properties: IAppInsightsCustomProperties): void => {\n this.trackValue(message, properties, SeverityLevel.Warning);\n };\n}\n\nexport default new Logger();\n","const texts = {\n title: 'Nummerplade',\n common: {\n errorPage: {\n title: 'Error',\n },\n errors: {\n requiredQueryParameters: 'Required query parameters are not provided',\n },\n },\n validationErrors: {\n required: 'Udfyld venligst feltet',\n plateNumber: 'Forkert nummerplade',\n },\n};\n\nexport default texts;\n","import { parse } from 'query-string';\n\nimport ISearchParams from '^types/ISearchParams';\n\nclass SearchParamsResolver {\n private _searchParams: ISearchParams = parse(window.location.search) as unknown as ISearchParams;\n\n public getParam = (name: keyof ISearchParams): ValueType =>\n this._searchParams[name] as unknown as ValueType;\n}\n\nexport default new SearchParamsResolver();\n","import texts from '^configs/texts';\nimport Brand from '^enums/Brand';\nimport logger from '^utils/logger';\nimport SearchParamsResolver from '^utils/searchParamsResolver';\nimport ISearchParams from '^types/ISearchParams';\nimport SearchParam from '^enums/SearchParam';\n\nconst errorText = texts.common.errors.requiredQueryParameters;\n\nclass ApplicationConfig {\n private readonly _theme: Brand;\n private readonly _targetUrl: string;\n\n private _retrieveAppConfigValue = (key: keyof ISearchParams): ISearchParams[Key] => {\n const providedValue = SearchParamsResolver.getParam(key);\n\n return providedValue as ISearchParams[Key];\n };\n\n public get theme(): Brand {\n return this._theme;\n }\n public get targetUrl(): string {\n return this._targetUrl;\n }\n\n public get isSuccessfullyInitialized(): boolean {\n return !!(this._theme && this._targetUrl);\n }\n\n public constructor() {\n this._theme = this._retrieveAppConfigValue('theme');\n this._targetUrl = this._retrieveAppConfigValue('targetUrl');\n\n if (!this.isSuccessfullyInitialized) {\n logger.trackError(new Error(errorText), {\n catcher: errorText,\n });\n }\n }\n}\n\nexport default new ApplicationConfig();\n","import { AnyMaskedOptions } from 'imask';\n\nexport const plateNumberMask: AnyMaskedOptions[] = [\n {\n mask: 'aa 00 000',\n },\n {\n mask: /^[a-zA-Z0-9]{0,7}$/,\n },\n];\n","import { ReactElement } from 'react';\nimport { IIconProps } from '@interdan/public-ui';\n\nconst SearchIcon = (props: IIconProps): ReactElement => (\n \n \n \n);\n\nexport default SearchIcon;\n","import { ReactElement } from 'react';\nimport { Button, FormField, FormProvider, Input } from '@interdan/public-ui';\nimport { Validate } from 'react-hook-form';\n\nimport TargetUrlParam from '^enums/TargetUrlParam';\nimport { plateNumberPlaceholder } from '^configs/placeholders';\nimport { plateNumberMask } from '^utils/masks';\nimport { plateNumber, required } from '^utils/validators';\nimport SearchIcon from '^icons/SearchIcon';\nimport ApplicationConfig from '^services/ApplicationConfig';\n\nimport styles from './styles.module.scss';\n\nconst plateNumberValidation: Record = {\n plateNumber,\n required,\n};\n\ninterface IPlateNumberLookupFormValues {\n plateNumber: string;\n}\n\nconst handleSubmit = (params: IPlateNumberLookupFormValues): void => {\n const url = new URL(ApplicationConfig.targetUrl);\n url.searchParams.append(TargetUrlParam.PlateNumber, params.plateNumber);\n window.open(url, '_blank');\n};\n\nconst PlateNumberLookupForm = (): ReactElement => (\n \n \n\n \n \n);\n\nexport default PlateNumberLookupForm;\n","import texts from '^configs/texts';\n\nexport const required = (value: string): string | undefined => value ? undefined : texts.validationErrors.required;\n\nexport const plateNumber = (value: string): string | undefined => {\n if (!value) {\n return undefined;\n }\n\n return /^[A-Za-z0-9]{2,7}$/.test(value) ? undefined : texts.validationErrors.plateNumber;\n};\n","export const plateNumberPlaceholder = 'AA 00 000';\n","import { ReactElement } from 'react';\nimport { IIconProps } from '@interdan/public-ui';\n\nconst ErrorIcon = (props: IIconProps): ReactElement => (\n \n \n \n);\n\nexport default ErrorIcon;\n","import { ReactElement, ReactNode } from 'react';\nimport { Typography } from '@interdan/public-ui';\nimport classNames from 'classnames';\n\nimport styles from './styles.module.scss';\n\nexport interface IResponsePageTemplateProps {\n Logo: ReactNode;\n title: ReactNode;\n description?: ReactNode;\n className?: string;\n logoWrapperClassName?: string;\n}\n\nconst ResponsePageTemplate = ({ className, logoWrapperClassName, Logo, title, description }: IResponsePageTemplateProps): ReactElement => (\n
\n
\n {Logo}\n
\n\n \n {title}\n \n\n {!!description && (\n \n {description}\n \n )}\n
\n);\n\nexport default ResponsePageTemplate;\n","import { ReactElement } from 'react';\n\nimport texts from '^configs/texts';\nimport ErrorIcon from '^icons/ErrorIcon';\n\nimport ResponsePageTemplate from '../ResponsePageTemplate';\n\nimport styles from './styles.module.scss';\n\nconst ErrorPage = (): ReactElement => (\n }\n logoWrapperClassName={styles.iconWrapper}\n title={texts.common.errorPage.title}\n />\n);\n\nexport default ErrorPage;\n","import { ReactElement } from 'react';\nimport { Section } from '@interdan/public-ui';\n\nimport ApplicationConfig from '^services/ApplicationConfig';\nimport texts from '^configs/texts';\nimport PlateNumberLookupForm from '^pages/EntryPoint/PlateNumberLookupForm';\nimport ErrorPage from '^components/ErrorPage';\n\nimport styles from './styles.module.scss';\n\nconst EntryPoint = (): ReactElement => {\n if (!ApplicationConfig.isSuccessfullyInitialized) {\n return ;\n }\n\n return (\n
\n \n \n \n
\n );\n};\n\nexport default EntryPoint;\n","import { Component, ReactNode } from 'react';\n\nimport logger from '^utils/logger';\nimport ErrorPage from '^components/ErrorPage';\n\nexport interface IErrorBoundaryProps {\n children: ReactNode;\n}\n\ninterface IErrorBoundaryState {\n hasError: boolean;\n}\n\nclass ErrorBoundary extends Component {\n public state: IErrorBoundaryState = {\n hasError: false,\n };\n\n public static getDerivedStateFromError(): IErrorBoundaryState {\n return {\n hasError: true,\n };\n }\n\n public componentDidCatch(error: Error, info: Record): void {\n logger.trackCriticalError(error, {\n info,\n catcher: 'ErrorBoundary',\n });\n }\n\n public render(): ReactNode {\n const { hasError } = this.state;\n const { children } = this.props;\n\n return hasError ? : children;\n }\n}\n\nexport default ErrorBoundary;\n","import { ReactElement, ReactNode } from 'react';\nimport { GlobalConfig as GlobalConfigBase } from '@interdan/public-ui';\n\nimport ErrorBoundary from '^common/ErrorBoundary';\nimport ApplicationConfig from '^services/ApplicationConfig';\n\nexport interface IGlobalConfigProps {\n children: ReactNode;\n}\n\nconst GlobalConfig = ({ children }: IGlobalConfigProps): ReactElement => (\n \n \n {children}\n \n \n);\n\nexport default GlobalConfig;\n","import { ReactElement } from 'react';\n\nimport EntryPoint from '^pages/EntryPoint';\nimport GlobalConfig from '^common/GlobalConfig';\n\nconst App = (): ReactElement => (\n \n \n \n);\n\nexport default App;\n","import { StrictMode } from 'react';\nimport { render } from 'react-dom';\n\nimport logger from '^utils/logger';\n\nimport App from './App';\n\nimport '^scss-global';\n\nlogger.init();\n\nrender(\n \n \n ,\n document.getElementById('root'),\n);\n","// extracted by mini-css-extract-plugin\nmodule.exports = {\"responsePage\":\"styles_responsePage__2ZEpm\",\"logoWrapper\":\"styles_logoWrapper__1Xqso\",\"description\":\"styles_description__xI1AK\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"errorPage\":\"styles_errorPage__4lUSY\",\"iconWrapper\":\"styles_iconWrapper__6TfcA\",\"icon\":\"styles_icon__2SKc7\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"wrapper\":\"styles_wrapper__l2ZhF\",\"innerSection\":\"styles_innerSection__1LHyI\"};"],"sourceRoot":""}