{"version":3,"file":"dist/build-client/static/js/8368.a8f91ce1.chunk.js","mappings":"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","sources":["Atoms/BulletPoint/BulletPoint.tsx","Atoms/Icons/CircleBackground.tsx","Atoms/Image/ProductImage.tsx","Atoms/Input/Input.tsx","Atoms/Input/InputValidation.tsx","Atoms/Input/ValidationHelper.ts","Atoms/Label/Label.tsx","Atoms/ProductCardTitle/ProductCardTitle.tsx","Shared/Cart/Cart.ts","Shared/Common/AccountFormValidation.ts","Shared/Favorites/Favorites.ts"],"sourcesContent":["import KexIconLoader from 'Kex/KexIconLoader';\r\nimport { styled } from 'stitches.config';\r\nimport CircleBackground from '../Icons/CircleBackground';\r\nimport { CSS } from '@stitches/react';\r\n\r\ntype PropType = {\r\n text: string;\r\n css?: CSS;\r\n backgroundColor: 'primary' | 'secondary' | 'secondaryDark';\r\n large?: boolean;\r\n textCSS?: CSS;\r\n};\r\n\r\nconst Icon = KexIconLoader('Checkmark');\r\n\r\nfunction BulletPoint({\r\n text,\r\n css,\r\n backgroundColor,\r\n large = false,\r\n textCSS,\r\n}: PropType) {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n {text}\r\n \r\n \r\n );\r\n}\r\n\r\nexport default BulletPoint;\r\n\r\nconst BulletWrapper = styled('div', {});\r\nconst TextWrapper = styled('div', {\r\n display: 'flex',\r\n alignItems: 'center',\r\n color: '$textPrimary',\r\n fontFamily: '$fontSecondary400',\r\n});\r\n","import { CSS } from '@stitches/react';\r\nimport { styled } from 'stitches.config';\r\n\r\ntype PropTypes = {\r\n children: React.ReactNode;\r\n backgroundColorVariants: 'primary' | 'secondary' | 'secondaryDark';\r\n large?: boolean;\r\n css?: CSS;\r\n};\r\n\r\nfunction CircleBackground({\r\n children,\r\n backgroundColorVariants,\r\n large,\r\n css,\r\n}: PropTypes) {\r\n return (\r\n \r\n {children}\r\n \r\n );\r\n}\r\n\r\nconst CircleContainer = styled('div', {\r\n display: 'flex',\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n flexShrink: 0,\r\n br: '50%',\r\n mr: 2,\r\n marginTop: '5px',\r\n wh: 4,\r\n variants: {\r\n backgroundColorVariants: {\r\n primary: {\r\n backgroundColor: '$colors$JE68GreenPrimary',\r\n '& svg': { stroke: '$primary6' },\r\n },\r\n secondary: {\r\n backgroundColor: '$primaryLight2',\r\n '& svg': { stroke: '$primary6' },\r\n },\r\n secondaryDark: {\r\n backgroundColor: '$primary1',\r\n '& svg': { stroke: '$pureWhite' },\r\n },\r\n },\r\n large: {\r\n true: { wh: 6 },\r\n },\r\n },\r\n defaultVariants: {\r\n backgroundColorVariants: 'secondaryDark',\r\n },\r\n});\r\n\r\nexport default CircleBackground;\r\n","import { styled } from 'stitches.config';\r\n\r\ntype PropType = {\r\n src?: string;\r\n alt: string;\r\n isUsed?: boolean;\r\n lazyLoad?: 'eager' | 'lazy';\r\n objectFit?: string;\r\n};\r\n\r\nfunction ProductImage({\r\n src,\r\n alt = '',\r\n isUsed,\r\n lazyLoad = 'eager',\r\n objectFit = 'cover',\r\n}: PropType) {\r\n return (\r\n \r\n );\r\n}\r\n\r\nconst Image = styled('img', {\r\n objectFit: 'cover',\r\n w: '100%',\r\n h: '100%',\r\n filter: '$colors$imageFilter',\r\n variants: {\r\n isUsed: {\r\n true: {\r\n filter: 'none',\r\n },\r\n false: {\r\n filter: '$colors$imageFilter',\r\n },\r\n },\r\n },\r\n});\r\n\r\nexport default ProductImage;\r\n","import Label from 'Atoms/Label/Label';\r\nimport React, {\r\n useCallback,\r\n useEffect,\r\n useMemo,\r\n useRef,\r\n useState,\r\n} from 'react';\r\nimport { styled } from 'stitches.config';\r\nimport { EyeClosedIcon, EyeIcon } from 'Atoms/Icons';\r\nimport { timings, animation } from 'Theme/Settings/animation';\r\n\r\nimport { useInputValidation, ValidationParams } from './InputValidation';\r\nimport { doValidation } from './ValidationHelper';\r\n\r\ntype InputValidationType = {\r\n validation?: ValidationParams;\r\n name: string;\r\n};\r\n\r\ntype InputType = (\r\n | InputValidationType\r\n | { validation?: undefined; name?: string }\r\n) & {\r\n onChange?: (value: string) => void;\r\n onBlur?: (value: string) => void;\r\n onKeyDown?: (event: React.KeyboardEvent) => void;\r\n title: string;\r\n type?: string;\r\n disabled?: boolean;\r\n placeholder?: string;\r\n newPassword?: boolean;\r\n autoComplete?: string;\r\n defaultValue?: string;\r\n inputBackground?: 'primary6' | 'primary4' | 'primary5';\r\n noSpace?: boolean;\r\n upperCase?: boolean;\r\n inputTextColor?: 'primary' | 'secondary';\r\n showLabel?: boolean;\r\n};\r\n\r\nconst Input = ({\r\n title,\r\n type = 'Text',\r\n onChange,\r\n onBlur,\r\n onKeyDown,\r\n name,\r\n validation,\r\n disabled,\r\n placeholder,\r\n autoComplete,\r\n newPassword = false,\r\n defaultValue,\r\n inputBackground = 'primary6',\r\n noSpace,\r\n upperCase,\r\n inputTextColor = 'primary',\r\n showLabel = true,\r\n}: InputType) => {\r\n const validationDispatch = useInputValidation();\r\n const [hasTouched, setHasTouched] = useState(false);\r\n const [focus, setFocus] = useState(false);\r\n const [hasValue, setHasValue] = useState(!!defaultValue);\r\n const [inputFieldType, setInputFieldType] = useState(type);\r\n const inputRef = useRef(null);\r\n const [errorMessage, setErrorMessage] = useState(\r\n doValidation(defaultValue || '', validation)\r\n );\r\n\r\n const showError = useMemo(\r\n () => hasTouched && !focus && !!errorMessage,\r\n [errorMessage, focus, hasTouched]\r\n );\r\n\r\n useEffect(() => {\r\n if (validation?.backendValidation?.message) {\r\n setHasTouched(true);\r\n setErrorMessage(validation.backendValidation.message);\r\n }\r\n }, [validation?.backendValidation]);\r\n\r\n const handleChange = useCallback(\r\n (value: string) => {\r\n if (value) {\r\n setHasTouched(true);\r\n }\r\n setErrorMessage(doValidation(value, validation));\r\n\r\n setHasValue(!!value);\r\n onChange && onChange(value);\r\n },\r\n [onChange, validation]\r\n );\r\n\r\n const toggleVisibilityPassword = () => {\r\n if (type === 'password')\r\n if (inputFieldType === 'password') {\r\n setInputFieldType('text');\r\n } else {\r\n setInputFieldType('password');\r\n }\r\n };\r\n\r\n const passwordHidden = inputFieldType === 'password';\r\n\r\n const onInputBlur = (e: React.FocusEvent) => {\r\n setFocus(false);\r\n handleChange(e.currentTarget.value);\r\n onBlur && onBlur(e.currentTarget.value);\r\n };\r\n\r\n const onInputFocus = (e: React.FocusEvent) => {\r\n setFocus(true);\r\n setHasTouched(true);\r\n };\r\n\r\n useEffect(() => {\r\n if (!validation) return;\r\n\r\n validationDispatch({\r\n type: 'register',\r\n name: name || '',\r\n payload: {\r\n hasError: !!errorMessage,\r\n hasValue: hasValue,\r\n isRequired: !!validation.required,\r\n },\r\n });\r\n\r\n return () =>\r\n validationDispatch({ type: 'unregister', name: name || '', payload: {} });\r\n }, [\r\n validationDispatch,\r\n name,\r\n hasTouched,\r\n errorMessage,\r\n hasValue,\r\n validation,\r\n ]);\r\n\r\n const formInputStyle = {\r\n borderColor: showError ? '$errorColor' : '$secondary4',\r\n color: showError ? '$errorColor' : '$secondary4',\r\n };\r\n\r\n //to make validation work on autofill\r\n useEffect(() => {\r\n let interval = setInterval(() => {\r\n if (\r\n inputRef.current &&\r\n inputRef.current.value !== '' &&\r\n document.activeElement !== inputRef.current\r\n ) {\r\n doValidation(inputRef.current.value, validation);\r\n //do the same for all autofilled fields\r\n clearInterval(interval);\r\n } else {\r\n clearInterval(interval);\r\n }\r\n }, 300);\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [inputRef.current?.value]);\r\n\r\n const getLabelStyle = () => {\r\n let cssStyle = {};\r\n if (focus) {\r\n cssStyle = labelCss;\r\n } else {\r\n cssStyle = { ...labelCss, color: '$secondary4' };\r\n }\r\n\r\n if (showError) {\r\n cssStyle = {\r\n ...labelCss,\r\n borderColor: '$errorColor',\r\n color: '$errorColor',\r\n };\r\n }\r\n\r\n return { ...cssStyle, backgroundColor: `$${inputBackground}` };\r\n };\r\n\r\n return (\r\n \r\n {(focus || hasValue || showError) && showLabel && (\r\n \r\n )}\r\n\r\n \r\n handleChange(\r\n upperCase\r\n ? e.currentTarget.value.toLocaleUpperCase()\r\n : e.currentTarget.value\r\n )\r\n }\r\n {...(showError && { error: true })}\r\n {...(onKeyDown && { onKeyDown })}\r\n onBlur={onInputBlur}\r\n onFocus={onInputFocus}\r\n name={name}\r\n autoComplete={newPassword ? 'new-password' : autoComplete}\r\n placeholder={placeholder}\r\n disabled={disabled}\r\n style={formInputStyle}\r\n id={name}\r\n defaultValue={defaultValue}\r\n inputBackground={inputBackground}\r\n inputTextColor={inputTextColor}\r\n maxLength={1000}\r\n />\r\n\r\n {type === 'password' && (\r\n {\r\n toggleVisibilityPassword();\r\n }}\r\n >\r\n {passwordHidden ? (\r\n \r\n ) : (\r\n \r\n )}\r\n \r\n )}\r\n\r\n {showError && {errorMessage}}\r\n \r\n );\r\n};\r\n\r\nconst InputGroup = styled('div', {\r\n position: 'relative',\r\n variants: {\r\n spacing: {\r\n space: {\r\n mb: 2,\r\n },\r\n noSpace: {},\r\n },\r\n },\r\n});\r\n\r\nconst TogglePasswordIcon = styled('span', {\r\n position: 'absolute',\r\n top: '14px',\r\n r: 1,\r\n p: 2,\r\n cursor: 'pointer',\r\n});\r\n\r\nconst fontStyleCss = {\r\n fontFamily: '$fontSecondary400',\r\n letterSpacing: '$ls0',\r\n};\r\n\r\nconst ErrorText = styled('div', {\r\n ...fontStyleCss,\r\n fs: 6,\r\n lineHeight: '$lh133',\r\n color: '$errorColor',\r\n ml: '15px',\r\n});\r\n\r\nconst labelCss = {\r\n ...fontStyleCss,\r\n color: '$JE68GreenPrimary',\r\n top: 2,\r\n px: 1,\r\n fs: 5,\r\n lineHeight: '$lh12',\r\n};\r\n\r\nconst FormInput = styled('input', {\r\n ...fontStyleCss,\r\n lineHeight: 'lh1125',\r\n fs: 8,\r\n w: '100%',\r\n h: 11,\r\n px: 4,\r\n py: 3,\r\n bw: 0.25,\r\n borderRadius: 'unset',\r\n borderStyle: 'solid',\r\n borderColor: '$inputBorderColor',\r\n color: '$inputText',\r\n '&:focus': {\r\n outline: 'none',\r\n borderColor: '$JE68GreenPrimary',\r\n },\r\n '&::placeholder': {\r\n WebkitTextFillColor: '$colors$inputPlaceholderText !important',\r\n opacity: 1,\r\n transition: `opacity, opacity ${timings.threeTenths} ${animation.timingFn}`,\r\n },\r\n '&:-webkit-autofill,': {\r\n WebkitTextFillColor: '$colors$inputText !important',\r\n caretColor: '$colors$inputText',\r\n },\r\n '&:disabled': {\r\n WebkitBoxShadow: `0 0 0 1000px rgba(0, 0, 0, 0) inset !important`,\r\n borderColor: '$inputDisabledBorderColor',\r\n backgroundColor: '$inputDisabledbackground',\r\n color: '$inputDisabledText',\r\n },\r\n '&:focus::placeholder': {\r\n opacity: 0,\r\n transition: `opacity ${timings.threeTenths} ${animation.timingFn}`,\r\n },\r\n '&::-webkit-inner-spin-button': {\r\n WebkitAppearance: 'none',\r\n margin: 0,\r\n },\r\n variants: {\r\n casing: {\r\n upper: {\r\n textTransform: 'uppercase',\r\n },\r\n auto: {},\r\n },\r\n spacing: {\r\n space: {\r\n mt: 2,\r\n mb: 1,\r\n },\r\n noSpace: {\r\n height: '100%',\r\n },\r\n },\r\n error: {\r\n true: {\r\n color: '$errorColor',\r\n borderColor: '$errorColor',\r\n },\r\n },\r\n inputBackground: {\r\n primary6: {\r\n backgroundColor: '$inputBackground',\r\n '&:-webkit-autofill,': {\r\n WebkitBoxShadow: `0 0 0 1000px $colors$inputBackground inset !important`,\r\n },\r\n },\r\n primary4: {\r\n backgroundColor: '$primary4',\r\n '&:-webkit-autofill,': {\r\n WebkitBoxShadow: `0 0 0 1000px $colors$primary4 inset !important`,\r\n },\r\n },\r\n primary5: {\r\n backgroundColor: '$primary5',\r\n '&:-webkit-autofill,': {\r\n WebkitBoxShadow: `0 0 0 1000px $colors$primary5 inset !important`,\r\n },\r\n },\r\n },\r\n inputTextColor: {\r\n primary: {\r\n color: '$colors$inputText',\r\n '&:-webkit-autofill,': {\r\n WebkitTextFillColor: '$colors$inputText !important',\r\n caretColor: '$colors$inputText',\r\n },\r\n },\r\n secondary: {\r\n color: '$JE68GreenPrimary',\r\n '&:-webkit-autofill,': {\r\n WebkitTextFillColor: '$colors$JE68GreenPrimary !important',\r\n caretColor: '$colors$JE68GreenPrimary',\r\n },\r\n },\r\n },\r\n },\r\n});\r\n\r\nexport default Input;\r\n","import React, { useEffect, useReducer } from 'react';\r\n\r\ntype ValidationPropType = {\r\n children: React.ReactNode;\r\n onInputsValid?: Function;\r\n onInputsInvalid?: Function;\r\n};\r\n\r\ntype ValidationAction = {\r\n type: 'register' | 'unregister';\r\n name: string;\r\n payload: ValidationPayload;\r\n};\r\n\r\ntype ValidationPayload = {\r\n hasError?: boolean;\r\n hasValue?: boolean;\r\n isRequired?: boolean;\r\n};\r\n\r\nexport type ValidationParams = {\r\n active?: boolean;\r\n\r\n required?: boolean;\r\n minLength?: number;\r\n maxLength?: number;\r\n pattern?: RegExp;\r\n\r\n errorMessage: string;\r\n validationKey?: string;\r\n\r\n backendValidation?: { message: string; code: string };\r\n};\r\n\r\nconst reducer = (\r\n state: Map,\r\n action: ValidationAction\r\n): typeof state => {\r\n switch (action.type) {\r\n case 'register': {\r\n const newState = new Map(state);\r\n newState.set(action.name, action.payload);\r\n return newState;\r\n }\r\n case 'unregister': {\r\n const newState = new Map(state);\r\n\r\n if (action.name !== undefined && newState.get(action.name)) {\r\n newState.delete(action.name);\r\n }\r\n\r\n return newState;\r\n }\r\n default: {\r\n return state;\r\n }\r\n }\r\n};\r\n\r\nconst ValidationDispatchContext = React.createContext({});\r\n\r\nconst initialReducerState = new Map();\r\n\r\nfunction InputValidation({\r\n children,\r\n onInputsValid,\r\n onInputsInvalid,\r\n}: ValidationPropType) {\r\n const [state, dispatch] = useReducer(reducer, initialReducerState);\r\n\r\n useEffect(() => {\r\n const errors = Array.from(state).filter(\r\n ([, payload]) =>\r\n (!payload.hasValue && payload.isRequired) || payload.hasError\r\n );\r\n\r\n if (errors.length > 0) {\r\n onInputsInvalid && onInputsInvalid();\r\n } else {\r\n onInputsValid && onInputsValid();\r\n }\r\n }, [onInputsValid, onInputsInvalid, state]);\r\n\r\n return (\r\n \r\n {children}\r\n \r\n );\r\n}\r\n\r\nconst useInputValidation: () => React.Dispatch = () => {\r\n return React.useContext(\r\n ValidationDispatchContext\r\n ) as React.Dispatch;\r\n};\r\n\r\nexport { useInputValidation, InputValidation };\r\n","import { ValidationParams } from './InputValidation';\r\n\r\nexport const doValidation = (\r\n currentValue: string,\r\n validation: ValidationParams | undefined\r\n): string | null => {\r\n if (!validation) {\r\n return null;\r\n }\r\n\r\n let validationError = false;\r\n\r\n if (validation.active !== undefined && !validation.active) {\r\n return null;\r\n }\r\n\r\n if (validation.backendValidation) {\r\n return validation.backendValidation.message;\r\n }\r\n if (validation.pattern) {\r\n if (!validation.pattern.test(currentValue)) {\r\n validationError = true;\r\n }\r\n }\r\n if (validation.required) {\r\n if (!currentValue) {\r\n validationError = true;\r\n }\r\n }\r\n if (validation.minLength) {\r\n if (\r\n !currentValue ||\r\n (currentValue && currentValue.length < validation.minLength)\r\n ) {\r\n validationError = true;\r\n }\r\n }\r\n if (validation.maxLength) {\r\n if (currentValue && currentValue.length > validation.maxLength) {\r\n validationError = true;\r\n }\r\n }\r\n\r\n return validationError ? validation.errorMessage : null;\r\n};\r\n","import React from 'react';\r\nimport { styled } from 'stitches.config';\r\nimport { CSS } from '@stitches/react';\r\n\r\ntype LabelType = {\r\n hasError: boolean;\r\n children: React.ReactNode;\r\n css?: CSS;\r\n htmlFor?: string;\r\n};\r\n\r\nconst Label = ({ hasError, children, css, htmlFor }: LabelType) => (\r\n \r\n {children}\r\n \r\n);\r\n\r\nconst FormLabel = styled('label', {\r\n fs: 5,\r\n fontWeight: '$fw700',\r\n mx: 3,\r\n px: 3,\r\n position: 'absolute',\r\n backgroundColor: '$inputGroupPrimaryBackground',\r\n variants: {\r\n color: {\r\n default: {\r\n color: 'inherit',\r\n },\r\n error: {\r\n color: '$errorText',\r\n },\r\n },\r\n },\r\n});\r\n\r\nexport default Label;\r\n","import { styled } from 'stitches.config';\r\n\r\ntype ProductCardTitleTypes = {\r\n title: string;\r\n size?: 's' | 'm';\r\n onClick?: () => void;\r\n};\r\nconst ProductCardTitle = ({\r\n title,\r\n size = 'm',\r\n onClick,\r\n}: ProductCardTitleTypes) => {\r\n return (\r\n \r\n {title}\r\n \r\n );\r\n};\r\n\r\nconst Title = styled('span', {\r\n fontFamily: '$fontSecondary600',\r\n color: '$cartItemText',\r\n letterSpacing: 0,\r\n variants: {\r\n size: {\r\n s: {\r\n fs: 7,\r\n lineHeight: '$lh125',\r\n },\r\n m: {\r\n fs: 7,\r\n lineHeight: '$lh125',\r\n '@mediaMinLarge': {\r\n fs: 10,\r\n lineHeight: '$lh12',\r\n },\r\n },\r\n },\r\n },\r\n});\r\n\r\nexport default ProductCardTitle;\r\n","import KexCartModel from 'Models/Cart/KexCartModel.interface';\r\nimport { useEffect, useState } from 'react';\r\nimport { EventDispatcher, NOTIFY_ACTION } from 'Shared/Common/EventDispatcher';\r\nimport Fetcher from 'Shared/Common/Fetcher';\r\nimport { IS_PRODUCTION_ENV } from 'Shared/Configs/EnvConfig';\r\nimport { useAppSettingsData } from 'Shared/Providers/AppSettingsProvider';\r\nimport useSWR, { mutate } from 'swr';\r\nimport { ProductType } from '../../Enums/ProductType.enum';\r\n\r\nlet abortController: AbortController = new AbortController();\r\nlet hasMounted = false;\r\nexport let cartUrl = '/api/cart/';\r\n\r\ntype CartLoading = {\r\n cart: KexCartModel | null;\r\n isLoading: true;\r\n isCartEmpty: true;\r\n hasMotorCycle: false;\r\n triggerRevalidation: () => void;\r\n};\r\n\r\ntype CartNotLoading = {\r\n cart: KexCartModel;\r\n isLoading: false;\r\n isCartEmpty: boolean;\r\n hasMotorCycle: boolean;\r\n triggerRevalidation: () => void;\r\n};\r\n\r\ntype CartReturnType = CartLoading | CartNotLoading;\r\n\r\nexport function GetCart(languageRoute: string): CartReturnType {\r\n const [returnType, setReturnType] = useState({\r\n cart: null,\r\n isLoading: true,\r\n isCartEmpty: true,\r\n hasMotorCycle: false,\r\n triggerRevalidation: () => {},\r\n });\r\n const { pageCacheTime } = useAppSettingsData();\r\n const { data: fetchedCart, mutate } = useSWR(\r\n `${cartUrl}GetCart?language=` + languageRoute,\r\n (url) => {\r\n return FetchCart(url);\r\n },\r\n {\r\n fallbackData: undefined,\r\n revalidateOnFocus: IS_PRODUCTION_ENV,\r\n dedupingInterval: pageCacheTime,\r\n }\r\n );\r\n\r\n useEffect(() => {\r\n if (!hasMounted) {\r\n hasMounted = true;\r\n } else {\r\n if (fetchedCart) {\r\n setReturnType({\r\n cart: fetchedCart,\r\n isLoading: false,\r\n isCartEmpty: fetchedCart.numberOfItems === 0,\r\n hasMotorCycle: !!fetchedCart.lineItems?.some(\r\n (item) => item.productType === ProductType.MOTORCYCLES\r\n ),\r\n triggerRevalidation: () => mutate(fetchedCart),\r\n });\r\n }\r\n }\r\n }, [fetchedCart, mutate]);\r\n\r\n return returnType;\r\n}\r\n\r\nexport async function RemoveFromCart(\r\n productCode: string,\r\n languageRoute: string\r\n) {\r\n const queryParams = {\r\n language: languageRoute,\r\n code: productCode,\r\n };\r\n\r\n const queryString = new URLSearchParams(queryParams).toString();\r\n\r\n const res = await fetch(`${cartUrl}RemoveItem?${queryString}`, {\r\n method: 'DELETE',\r\n headers: { 'Content-Type': 'application/json' },\r\n });\r\n\r\n if (res.ok) {\r\n const { cart, notification } = await res.json();\r\n EventDispatcher.dispatch(NOTIFY_ACTION, notification);\r\n mutate(`${cartUrl}GetCart?language=` + languageRoute, cart, false);\r\n }\r\n}\r\n\r\nexport async function UpdateCart(\r\n productCode: string,\r\n quantity: number,\r\n languageRoute: string\r\n) {\r\n const queryParams = {\r\n language: languageRoute,\r\n code: productCode,\r\n quantity: quantity.toString(),\r\n };\r\n\r\n const queryString = new URLSearchParams(queryParams).toString();\r\n\r\n const res = await fetch(`${cartUrl}Update?${queryString}`, {\r\n method: 'PUT',\r\n headers: { 'Content-Type': 'application/json' },\r\n });\r\n if (res.ok) {\r\n const { cart, notification } = await res.json();\r\n EventDispatcher.dispatch(NOTIFY_ACTION, notification);\r\n mutate(`${cartUrl}GetCart?language=` + languageRoute, cart, false);\r\n return true;\r\n }\r\n return false;\r\n}\r\n\r\nexport async function SetQuantity(\r\n productCode: string,\r\n quantity: number,\r\n languageRoute: string,\r\n belongsTo?: string\r\n) {\r\n let queryParams: { [key: string]: string } = {\r\n language: languageRoute,\r\n code: productCode,\r\n quantity: quantity.toString(),\r\n };\r\n\r\n if (belongsTo) {\r\n queryParams = { ...queryParams, belongsTo };\r\n }\r\n\r\n const queryString = new URLSearchParams(queryParams).toString();\r\n\r\n const res = await fetch(`${cartUrl}SetQuantity?${queryString}`, {\r\n method: 'POST',\r\n headers: { 'Content-Type': 'application/json' },\r\n });\r\n if (res.ok) {\r\n const { cart, notification } = await res.json();\r\n EventDispatcher.dispatch(NOTIFY_ACTION, notification);\r\n mutate(`${cartUrl}GetCart?language=` + languageRoute, cart, false);\r\n }\r\n}\r\n\r\nexport async function UpdateQuantity(\r\n productCode: string,\r\n quantity: number,\r\n languageRoute: string,\r\n belongsTo?: string\r\n) {\r\n let queryParams: { [key: string]: string } = {\r\n language: languageRoute,\r\n code: productCode,\r\n quantity: quantity.toString(),\r\n };\r\n\r\n if (belongsTo) {\r\n queryParams = { ...queryParams, belongsTo };\r\n }\r\n\r\n const queryString = new URLSearchParams(queryParams).toString();\r\n\r\n const res = await fetch(`${cartUrl}Update?${queryString}`, {\r\n method: 'PUT',\r\n headers: { 'Content-Type': 'application/json' },\r\n });\r\n if (res.ok) {\r\n const { cart, notification } = await res.json();\r\n EventDispatcher.dispatch(NOTIFY_ACTION, notification);\r\n mutate(`${cartUrl}GetCart?language=` + languageRoute, cart, false);\r\n }\r\n}\r\n\r\nexport async function EmptyCart(languageRoute: string) {\r\n mutate(`${cartUrl}GetCart`, { numberOfItems: 0 } as KexCartModel, false);\r\n\r\n const res = await fetch(`${cartUrl}RemoveAllItems`, {\r\n method: 'DELETE',\r\n });\r\n\r\n if (res.ok) {\r\n const { cart, notification } = await res.json();\r\n\r\n EventDispatcher.dispatch(NOTIFY_ACTION, notification);\r\n\r\n mutate(`${cartUrl}GetCart?language=` + languageRoute, cart, false);\r\n }\r\n}\r\n\r\nexport async function FetchCartAndNotifyAll(languageRoute: string) {\r\n const res = await fetch(`${cartUrl}GetCart?language=` + languageRoute, {\r\n method: 'GET',\r\n headers: { 'Content-Type': 'application/json' },\r\n });\r\n\r\n if (res.ok) {\r\n const { cart } = await res.json();\r\n mutate(`${cartUrl}GetCart?language=` + languageRoute, cart, false);\r\n }\r\n}\r\n\r\nexport async function ApplyMountingCost(\r\n languageRoute: string,\r\n isApply: boolean\r\n) {\r\n const res = await fetch(\r\n `${cartUrl}ApplyMountingCosts?cartName=Default&apply=${isApply}&language=${languageRoute}`,\r\n {\r\n method: 'PUT',\r\n headers: { 'Content-Type': 'application/json' },\r\n }\r\n );\r\n\r\n if (res.ok) {\r\n const { cart } = await res.json();\r\n mutate(`${cartUrl}GetCart?language=` + languageRoute, cart, false);\r\n }\r\n}\r\n\r\nfunction FetchCart(url: string) {\r\n abortController.abort();\r\n abortController = new AbortController();\r\n const signal = abortController.signal;\r\n\r\n return Fetcher(url, signal, (data, resolve) => {\r\n resolve(data.cart);\r\n });\r\n}\r\n","/* eslint-disable */\r\n\r\nexport const accountFormValidation = {\r\n password: {\r\n minLength: 8,\r\n maxLength: 60,\r\n pattern:\r\n /^(?=.*?[A-Z\\u00c0-\\u00DF])(?=.*?[a-z\\u00e0-\\u017e])(?=.*?[0-9])(?=.*?[!@#$%^&*\\(\\)_\\+\\-\\={}<>,\\.\\|\"\"'~`:;\\\\?\\/\\[\\] ]).{8,60}$/,\r\n },\r\n personnumber: {\r\n pattern: /^(\\d{6}|\\d{8})[-|(\\s)]{0,1}\\d{4}$/,\r\n },\r\n email: {\r\n required: true,\r\n minLength: 1,\r\n maxLength: 40,\r\n pattern:\r\n /^[_a-zA-Z0-9-]+(\\.[_a-zA-Z0-9-]+)*(\\+[a-zA-Z0-9-]+)?@[a-zA-Z0-9-]+(\\.[a-zA-Z0-9-]+)*$/,\r\n },\r\n phoneNumber: {\r\n pattern: /(^[\\\\s\\-+()0-9]{0,16}$)/,\r\n },\r\n};\r\n","import FavoriteModel from 'Shared/Favorites/FavoriteModel.interface';\r\nimport { useEffect, useState } from 'react';\r\nimport Fetcher from 'Shared/Common/Fetcher';\r\nimport { IS_PRODUCTION_ENV } from 'Shared/Configs/EnvConfig';\r\nimport { useAppSettingsData } from 'Shared/Providers/AppSettingsProvider';\r\nimport { useUserStateData } from 'Shared/Providers/UserContextProvider';\r\nimport useSWR, { mutate } from 'swr';\r\n\r\nconst favoriteApiUrl = '/api/favorites';\r\n\r\nlet abortController: AbortController = new AbortController();\r\nlet hasMounted = false;\r\n\r\ntype FavoriteReturnType = {\r\n favoriteList: FavoriteModel;\r\n hasFavorites: boolean;\r\n isLoading: boolean;\r\n};\r\n\r\nexport function GetFavorites(languageRoute: string): FavoriteReturnType {\r\n const tempFavoriteObject: FavoriteModel = {} as FavoriteModel;\r\n const [favoriteList, setFavoriteList] =\r\n useState(tempFavoriteObject);\r\n const [hasFavorites, setHasFavorites] = useState(false);\r\n const { pageCacheTime } = useAppSettingsData();\r\n const {\r\n user: { authenticated },\r\n } = useUserStateData();\r\n const [isLoading, setIsLoading] = useState(true);\r\n\r\n // condition - fetch only if authenticated\r\n const { data: fetchedCart } = useSWR(\r\n authenticated\r\n ? `${favoriteApiUrl}/GetFavorites?language=${languageRoute}`\r\n : null,\r\n FetchFavorites,\r\n {\r\n fallbackData: undefined,\r\n revalidateOnFocus: IS_PRODUCTION_ENV,\r\n dedupingInterval: pageCacheTime,\r\n }\r\n );\r\n\r\n useEffect(() => {\r\n if (!hasMounted) {\r\n hasMounted = true;\r\n } else {\r\n if (fetchedCart) {\r\n const checkFavoritesLength =\r\n fetchedCart.favoriteMotorcycleConfigurations.length > 0 ||\r\n fetchedCart.favoriteProducts.length > 0;\r\n\r\n setFavoriteList(fetchedCart);\r\n\r\n setHasFavorites(checkFavoritesLength);\r\n\r\n setIsLoading(false);\r\n }\r\n }\r\n }, [fetchedCart]);\r\n\r\n return { favoriteList, hasFavorites, isLoading };\r\n}\r\n\r\nexport async function AddFavorite(code: string, languageRoute: string) {\r\n const res = await fetch(\r\n `${favoriteApiUrl}/AddFavorite?code=${code}&language=${languageRoute}`,\r\n {\r\n method: 'PUT',\r\n headers: { 'Content-Type': 'application/json' },\r\n }\r\n );\r\n\r\n if (res.ok) {\r\n const { favorites } = await res.json();\r\n mutate(\r\n `${favoriteApiUrl}/GetFavorites?language=${languageRoute}`,\r\n favorites,\r\n false\r\n );\r\n }\r\n}\r\n\r\nexport async function RemoveFavorite(code: string, languageRoute: string) {\r\n const res = await fetch(\r\n `${favoriteApiUrl}/RemoveFavorite?code=${code}&language=${languageRoute}`,\r\n {\r\n method: 'DELETE',\r\n headers: { 'Content-Type': 'application/json' },\r\n }\r\n );\r\n\r\n if (res.ok) {\r\n const { favorites } = await res.json();\r\n mutate(\r\n `${favoriteApiUrl}/GetFavorites?language=${languageRoute}`,\r\n favorites,\r\n false\r\n );\r\n }\r\n}\r\n\r\nexport async function AddFavoriteConfigurator(\r\n cartName: string,\r\n languageRoute: string\r\n) {\r\n const res = await fetch(\r\n `${favoriteApiUrl}/AddMotorcycleConfiguration?motorcycleConfiguratorCartName=${cartName}&language=${languageRoute}`,\r\n {\r\n method: 'PUT',\r\n headers: { 'Content-Type': 'application/json' },\r\n }\r\n );\r\n\r\n if (res.ok) {\r\n const { favorites } = await res.json();\r\n mutate(\r\n `${favoriteApiUrl}/GetFavorites?language=${languageRoute}`,\r\n favorites,\r\n false\r\n );\r\n }\r\n}\r\n\r\nexport async function RemoveFavoriteConfigurator(\r\n cartName: string,\r\n languageRoute: string\r\n) {\r\n const res = await fetch(\r\n `${favoriteApiUrl}/RemoveMotorcycleConfiguration?motorcycleConfiguratorCartName=${cartName}&language=${languageRoute}`,\r\n {\r\n method: 'DELETE',\r\n headers: { 'Content-Type': 'application/json' },\r\n }\r\n );\r\n\r\n if (res.ok) {\r\n const { favorites } = await res.json();\r\n mutate(\r\n `${favoriteApiUrl}/GetFavorites?language=${languageRoute}`,\r\n favorites,\r\n false\r\n );\r\n }\r\n}\r\n\r\nfunction FetchFavorites(url: string) {\r\n abortController.abort();\r\n abortController = new AbortController();\r\n const signal = abortController.signal;\r\n\r\n return Fetcher(url, signal, (data, resolve) => {\r\n resolve(data.favorites);\r\n });\r\n}\r\n"],"names":["Icon","KexIconLoader","text","css","backgroundColor","large","textCSS","BulletWrapper","TextWrapper","backgroundColorVariants","mt","size","styled","display","alignItems","color","fontFamily","CircleContainer","justifyContent","flexShrink","br","mr","marginTop","wh","variants","primary","stroke","secondary","secondaryDark","true","defaultVariants","children","Image","objectFit","w","h","filter","isUsed","false","src","alt","lazyLoad","loading","InputGroup","position","spacing","space","mb","noSpace","TogglePasswordIcon","top","r","p","cursor","fontStyleCss","letterSpacing","ErrorText","fs","lineHeight","ml","labelCss","px","FormInput","py","bw","borderRadius","borderStyle","borderColor","outline","WebkitTextFillColor","opacity","transition","timings","animation","caretColor","WebkitBoxShadow","WebkitAppearance","margin","casing","upper","textTransform","auto","height","error","inputBackground","primary6","primary4","primary5","inputTextColor","title","type","onChange","onBlur","onKeyDown","name","validation","disabled","placeholder","autoComplete","newPassword","defaultValue","upperCase","showLabel","validationDispatch","useInputValidation","useState","hasTouched","setHasTouched","focus","setFocus","hasValue","setHasValue","inputFieldType","setInputFieldType","inputRef","useRef","doValidation","errorMessage","setErrorMessage","showError","useMemo","useEffect","backendValidation","message","handleChange","useCallback","value","passwordHidden","payload","hasError","isRequired","required","formInputStyle","interval","setInterval","current","document","activeElement","clearInterval","cssStyle","getLabelStyle","ref","e","currentTarget","toLocaleUpperCase","onFocus","style","id","maxLength","onClick","reducer","state","action","newState","Map","set","undefined","get","delete","ValidationDispatchContext","React","initialReducerState","InputValidation","onInputsValid","onInputsInvalid","useReducer","dispatch","Array","from","length","Provider","currentValue","validationError","active","pattern","test","minLength","FormLabel","fontWeight","mx","default","htmlFor","Title","s","m","abortController","AbortController","hasMounted","cartUrl","GetCart","languageRoute","cart","isLoading","isCartEmpty","hasMotorCycle","triggerRevalidation","returnType","setReturnType","pageCacheTime","useAppSettingsData","useSWR","url","abort","signal","Fetcher","data","resolve","FetchCart","fallbackData","revalidateOnFocus","IS_PRODUCTION_ENV","dedupingInterval","fetchedCart","mutate","numberOfItems","lineItems","some","item","productType","ProductType","RemoveFromCart","productCode","queryString","URLSearchParams","language","code","toString","fetch","method","headers","res","ok","json","notification","EventDispatcher","NOTIFY_ACTION","SetQuantity","quantity","belongsTo","queryParams","UpdateQuantity","EmptyCart","FetchCartAndNotifyAll","ApplyMountingCost","isApply","accountFormValidation","password","personnumber","email","phoneNumber","favoriteApiUrl","GetFavorites","favoriteList","setFavoriteList","hasFavorites","setHasFavorites","authenticated","useUserStateData","user","setIsLoading","FetchFavorites","checkFavoritesLength","favoriteMotorcycleConfigurations","favoriteProducts","AddFavorite","favorites","RemoveFavorite","AddFavoriteConfigurator","cartName","RemoveFavoriteConfigurator"],"sourceRoot":""}