{"version":3,"sources":["shared/consts/action-statuses.ts","shared/consts/consts.ts","shared/consts/currency-enum.ts","shared/consts/device-params.ts","shared/consts/font-location.ts","shared/consts/locale-enum.ts","shared/consts/owner-types.ts","shared/consts/paths.ts","shared/consts/reload-types.ts","shared/consts/wallet-types.ts","shared/consts/reload-increments.ts","shared/consts/vertical-names.ts","shared/consts/error-codes.ts","shared/consts/ld-flags.ts","store/user/selectors.ts","store/user/actions.ts","hooks/use-current-user.hook.ts","components/router/default-redirect.tsx","utils/pendo/track-event.ts","utils/pendo/flush-pendo.ts","pages/wallet/styles.ts","pages/wallet/components/emptyWallet/emptyWallet.tsx","pages/error/error.tsx","shared/consts/error-icons.ts","store/config/selectors.ts","store/config/actions.ts","hooks/use-search-params.hook.ts","components/app-root/app-root.tsx","hooks/use-view-params.hook.ts","hocs/shared-styles.ts","components/router/private/private.tsx","store/wallets/actions.ts","utils/formatCurrency.ts","pages/wallet/components/reloadButton/styles.ts","pages/wallet/components/reloadButton/reloadButton.tsx","pages/wallet/components/walletInfo/styles.ts","pages/wallet/components/walletInfo/walletInfo.tsx","pages/wallet/components/checkoutButton/styles.ts","pages/wallet/components/checkoutButton/checkoutButton.tsx","store/building/selectors.ts","store/wallets/selectors.ts","pages/loading/loading.tsx","store/auth/selectors.ts","store/theme/selectors.ts","assets/youfirst-bureau-logo.png","pages/wallet/wallet.tsx","hooks/use-theme-font.hook.ts","store/theme/actions.ts","components/head-portal/component.tsx","components/custom-fonts/component.tsx","store/building/actions.ts","components/app-content-wrapper/app-content-wrapper.styles.ts","components/app-content-wrapper/app-content-wrapper.tsx","hooks/use-building-theme.hook.ts","hooks/use-building.hook.ts","components/router/router.tsx","hooks/use-launch-darkly-identify.hook.ts","hooks/use-pendo-analytics.hook.ts","shared/consts/app-brand.ts","components/app/app.tsx","hooks/use-external-login.hook.ts","hooks/use-pendo.hook.ts","utils/pendo/initialize-pendo.ts","utils/flatten/flatten.ts","store/api-client/api-client.consts.ts","components/intl-provider/intl-provider.hooks.ts","components/intl-provider/intl-provider.tsx","store/router/history.ts","store/utils.ts","store/alt-buildings/actions.ts","store/alt-buildings/epics.ts","store/building/epics.ts","store/wallets/epics.ts","store/auth/actions.ts","store/auth/epics.ts","store/router/actions.ts","store/router/epics.ts","store/errors/actions.ts","store/errors/epics.ts","store/theme/epics.ts","store/user/errors/unauthorized.error.ts","store/user/epics.ts","store/epics.ts","store/alt-buildings/reducer.ts","store/building/reducer.ts","store/config/reducer.ts","store/config/get-default-url.util.ts","store/errors/reducer.ts","store/theme/reducer.ts","store/user/reducer.ts","store/wallets/reducer.ts","store/auth/reducer.ts","store/reducer.ts","store/api-client/api-client.ts","store/dependencies.ts","store/api-client/api-client.factory.ts","store/store.ts","components/root/root.tsx","reportWebVitals.ts","index.tsx"],"names":["ACTION_STATUSES","CurrencyEnum","FontLocation","LocaleEnum","OwnerTypesEnum","ReloadTypesEnum","WALLET_TYPES","WALLET_PATH","ROOT_PATH","ERROR_PATH","VERTICAL_NAMES","RELOAD_AMOUNTS","LDFlags","EXTERNAL_AUTH_TOKEN_NOT_FOUND","userState","state","user","currentUser","createSelector","loading","hasToken","error","token","externalLogin","createAsyncAction","getCurrentUser","useCurrentUser","useSelector","hasTokenSelector","dispatch","useDispatch","useEffect","request","DefaultRedirect","to","replace","trackPendoEvent","eventName","metadata","window","pendo","track","flushPendo","a","flushNow","Container","styled","div","WalletContainer","theme","colors","$white","greys","adminGreyLight","ReloadTitle","h4","ErrorStateComponent","CheckoutButtonWrapper","EmptyWallet","title","body","errorIcon","descriptions","useMemo","data-cy","data-testid","icon","ErrorPage","intl","useIntl","formatMessage","id","configSelector","config","saveExternalConfig","createAction","useSearchParams","search","useLocation","qs","parse","AppRoot","params","searchParams","useViewParams","buildingUuid","targetUrl","generatePath","ownerId","ownerType","props","isLoading","Private","redirectTo","children","isTokenStored","size","color","defaultTheme","$greyLight","getWallets","reloadWallet","formatCurrency","currencyValue","currencyType","locale","Intl","NumberFormat","style","currency","minimumFractionDigits","maximumFractionDigits","format","AmountButton","Button","selected","ReloadButtonComponent","amount","onClick","clickHandler","useCallback","text","data-pendoid","data-pendostate","data-pendovalue","variant","BUTTON_VARIANT","SECONDARY","ReloadButton","React","memo","WalletInfoCard","primary","BalanceTitle","BalanceAmount","BottomRow","WalletNumber","Logo","logoUrl","WalletInfo","balance","walletNumber","StyledCheckoutButton","disabled","adminBlack","primaryHover","CheckoutButton","buttonText","PRIMARY","buildingStateSelector","building","selectBuilding","buildingState","selectBuildingStatus","getBuilding","status","selectWallets","timezone","wallets","selectWalletError","selectReloadUrl","reloadUrl","selectGetWalletStatus","LoadingPage","$greyDark","authState","auth","themeSelector","selectBrandTheme","selectThemeFont","font","WalletPage","isAuthUrlLoading","useState","reloadAmount","setReloadAmount","walletLoadingStatus","wallet","themeFontTitle","location","themeFont","fontFamily","font_family","url","useThemeFont","TITLE","ldFlags","useFlags","checkoutRedirect","EUR","uuid","returnUri","origin","walletType","SODEXO","setLogoUrl","SHOW_ALTERNATE_WALLET_LOGO","gecinaLogo","length","FULFILLED","walletTypes","then","href","data","code","wallet_id","map","key","getBuildingTheme","HeadPortal","head","document","ReactDOM","createPortal","CustomFonts","brandTheme","Object","keys","entries","fontObject","rel","AppContentWrapperStyles","createGlobalStyle","customThemeFonts","join","hqoTheme","fonts","AppContentWrapper","buildingStatus","$primary","primary_color","$secondary","secondary_color","secondary","useBuildingTheme","useBuilding","PENDING","Router","path","element","initialLDUser","anonymous","usePendoAnalytics","appBrand","browser","detect","account","process","current_building_uuid","current_building_name","name","current_portfolio_id","portfolio_uuid","getAccountAnalytics","visitor","accountId","test_user","test","tenant_company_id","company_uuid","app_brand","current_user_roles","roles","os_name","os_version","version","getVisitorAnalytics","App","shouldWaitForLogin","authToken","apiUrl","useExternalLogin","ldClient","useLDClient","identify","email","custom","useLaunchDarklyIdentify","analytics","getAccountId","initialize","initializePendo","usePendo","flatten","obj","parent","reduce","result","value","resultKey","getResultKey","getValues","ApiRequestHeaders","DEFAULT_LOCALE","messagesMap","Map","messagesInEnglish","messagesInSpanish","messagesInFrench","messagesInCanadianFrench","messagesInGerman","messagesInDutch","useLocaleData","userLocale","has","split","lang","getAvailableLocale","messagesKey","messages","get","IntlProvider","navigator","language","toLowerCase","defaultLocale","history","createBrowserHistory","composeEnhancers","compose","getAltBuildings","setCurrentAltBuilding","getAltBuildingsEpic","action$","state$","apiClient","pipe","filter","isActionOf","actions","withLatestFrom","switchMap","payload","response","success","catchError","of","failure","getBuildingEpic","xhrPayload","getWalletsEpic","reloadWalletEpic","openAuthFlow","openAuthFlowEpic","fetchUiMetadata","BUILDING","toUpperCase","uiMetadataResponse","getAuthURL","ui_metadata","helix_auth_link","authURLResponse","from","redirectToAuthUrlEpic","action","EMPTY","push","goBack","goForward","pushEpic","replaceEpic","goBackEpic","back","goForwardEpic","forward","showErrorNotification","hideErrorNotifications","showGenericErrorNotification","hideGenericErrorNotifications","handleAuthErrors","mergeMap","status_code","type","handleGenericErrors","themeActions","userActions","altBuildingsActions","concatMap","getBuildingThemeEpic","UnauthorizedError","Error","AjaxError","isUnauthorizedError","externalLoginRedirect","restSearch","newSearchString","stringify","pathname","externalLoginFailureRedirect","mapTo","combineEpics","values","routerEpics","userEpics","themeEpics","errorsEpics","altBuildingsEpics","BuildingEpics","WalletsEpics","AuthEpics","altBuildingsReducer","createReducer","altBuildings","currentAltBuilding","handleAction","REJECTED","BuildingReducer","API_URL_LS_KEY","APP_BRAND_LS_KEY","BUILDING_UUID_LS_KEY","LOCALE_LS_KEY","initialState","localStorage","getItem","apiUrlReducer","_state","setItem","removeItem","getExternalConfigSaveReducer","lsKey","appBrandReducer","buildingUuidReducer","localeReducer","combineReducers","errors","v4","genericErrors","themeReducer","AUTH_TOKEN_LS_KEY","WalletsReducer","reload_url","AuthReducer","rootReducer","configReducer","userReducer","errorsReducer","ApiClient","baseUrl","hqoBuildingUuid","altBuildingUuid","CONTENT_TYPE","this","AUTHORIZATION","HQO_BUILDING_UUID","ALT_BUILDING_UUID","ajax","DefaultHeaders","building_uuid","wallet_types","arrayFormat","helixAuthLink","ownerUuid","owner_uuid","owner_type","redirect_url","vertical","WALLET","post","return_uri","rootDependencies","baseUrlOverride","authTokenOverride","altBuildingUuidOverride","alt_building_uuid","epicMiddleware","createEpicMiddleware","dependencies","enhancer","applyMiddleware","store","createStore","run","rootEpic","library","add","faAddressCard","faExclamationCircle","reportWebVitals","onPerfEntry","Function","getCLS","getFID","getFCP","getLCP","getTTFB","LDProvider","withLDProvider","clientSideID","REACT_APP_TENANT_LAUNCH_DARKLY_CLIENT_ID","render","StrictMode","getElementById"],"mappings":"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","file":"static/js/main.8c6ae135.chunk.js","sourcesContent":["export enum ACTION_STATUSES {\n PENDING = 'PENDING',\n FULFILLED = 'FULFILLED',\n REJECTED = 'REJECTED',\n}\n","export const LAUNCH_DARKLY_ANONYMOUS_EMAIL = 'anonymous@hqo.co';\n","export enum CurrencyEnum {\n CAD = 'CAD',\n EUR = 'EUR',\n GBP = 'GBP',\n USD = 'USD',\n}\n","export const SMALL_DEVICE_MAX_WIDTH = 768;\nexport const LARGE_DEVICE_MAX_WIDTH = 1080;\nexport const TINY_DEVICE_MAX_WIDTH = 280;\n","export enum FontLocation {\n TITLE = 'title',\n HEADING = 'heading',\n BODY = 'body',\n}\n","export enum LocaleEnum {\n 'de-DE' = 'de-DE',\n 'en-CA' = 'en-CA',\n 'en-GB' = 'en-GB',\n 'en-US' = 'en-US',\n 'fr-CA' = 'fr-CA',\n 'fr-FR' = 'fr-FR',\n 'nl-NL' = 'nl-NL',\n}\n","export enum OwnerTypesEnum {\n BUILDING = 'building',\n COMPANY = 'company',\n PORTFOLIO = 'portfolio',\n USER = 'user',\n}\n","export const WALLET_PATH = '/wallet' as const;\nexport const ROOT_PATH = `${WALLET_PATH}/:ownerType/:ownerId` as const;\nexport const ERROR_PATH = '/error' as const;\n","export enum ReloadTypesEnum {\n NATIVE = 'native',\n LINK = 'link',\n}\n","export enum WALLET_TYPES {\n SODEXO = 'sodexo',\n}\n","export const RELOAD_AMOUNTS = [10, 20, 30, 40, 50];\n","export enum VERTICAL_NAMES {\n SODEXO = 'sodexo-wallet',\n WALLET = 'wallet',\n}\n","export const ERR_DEFAULT = 'default';\nexport const FORBIDDEN_ERROR_CODE = 403;\nexport const INTERNAL_SERVER_ERROR = 500;\nexport const EXTERNAL_AUTH_TOKEN_NOT_FOUND = 'EXTERNAL_AUTH_TOKEN_NOT_FOUND';\n","export enum LDFlags {\n SHOW_ALTERNATE_WALLET_LOGO = 'showAlternateWalletLogo',\n}\n","import { RootState } from 'store/reducer';\nimport { User } from 'store/user/types';\nimport { createSelector } from 'reselect';\n\nexport const userState = (state: RootState): RootState['user'] => state.user;\n\nexport const userLoading = createSelector(userState, (state: RootState['user']): boolean => state.loading);\nexport const currentUser = createSelector(userState, (state: RootState['user']): User | null => state.user);\nexport const userError = createSelector(userState, (state: RootState['user']): Error | null => state.error);\nexport const hasToken = createSelector(userState, (state: RootState['user']): boolean => !!state.token);\n","import { ExternalAuthPayload, UserLoginResponse } from './types';\nimport { FailureActionPayload } from '../errors/types';\nimport { createAsyncAction } from 'typesafe-actions';\n\nexport const externalLogin = createAsyncAction(\n 'user/EXTERNAL_LOGIN_REQUEST',\n 'user/EXTERNAL_LOGIN_RESPONSE',\n 'user/EXTERNAL_LOGIN_FAILURE',\n)();\n\nexport const getCurrentUser = createAsyncAction(\n 'user/GET_CURRENT_REQUEST',\n 'user/GET_CURRENT_RESPONSE',\n 'user/GET_CURRENT_FAILURE',\n), FailureActionPayload>();\n","import { currentUser, hasToken as hasTokenSelector } from 'store/user/selectors';\nimport { useDispatch, useSelector } from 'react-redux';\n\nimport { User } from 'store/user/types';\nimport { getCurrentUser } from 'store/user/actions';\nimport { useEffect } from 'react';\n\nexport const useCurrentUser = (): [User | null, boolean] => {\n const user = useSelector(currentUser);\n const hasToken = useSelector(hasTokenSelector);\n const dispatch = useDispatch();\n\n useEffect(() => {\n if (!user && hasToken) {\n dispatch(getCurrentUser.request());\n }\n }, [user, hasToken, dispatch]);\n\n return [user, !user && hasToken];\n};\n","import React from 'react';\nimport { Navigate } from 'react-router-dom';\nimport { useCurrentUser } from 'hooks/use-current-user.hook';\nimport { ERROR_PATH, ROOT_PATH } from 'shared/consts';\n\nexport const DefaultRedirect: React.FC = (): JSX.Element => {\n const [user, loading] = useCurrentUser();\n\n if (user || loading) {\n return ;\n }\n\n return ;\n};\n","export const trackPendoEvent = (eventName: string, metadata?: pendo.Metadata): void => {\n if (window.pendo) {\n window.pendo.track(eventName, metadata);\n }\n};\n","import { from, Observable } from 'rxjs';\n\nexport const flushPendo = async (): Promise => {\n await window.pendo?.flushNow?.();\n};\n\nexport const getFlushPendoObservable = (): Observable => from(flushPendo());\n","import styled from 'styled-components';\nimport { SMALL_DEVICE_MAX_WIDTH } from 'shared/consts';\n\nexport const Container = styled.div`\n max-width: ${SMALL_DEVICE_MAX_WIDTH}px;\n`;\nexport const WalletContainer = styled.div`\n padding: 50px 60px 25px 60px;\n @media only screen and (max-width: ${SMALL_DEVICE_MAX_WIDTH}px) {\n padding: 20px 20px 10px 20px;\n }\n width: 100;\n background: ${({ theme }) => `linear-gradient(0deg, transparent 70%, ${theme.colors.$white} 30%)`};\n background-color: ${({ theme }) => theme.colors.greys.adminGreyLight};\n`;\nexport const ReloadTitle = styled.h4`\n font-size: 18px;\n font-weight: 700;\n margin-bottom: 0px;\n margin-top: 28px;\n`;\n\nexport const ErrorStateComponent = styled.div`\n display: flex;\n padding: 10% 0%;\n @media only screen and (max-width: ${SMALL_DEVICE_MAX_WIDTH}px) {\n padding: 50% 0%;\n }\n align-items: center;\n height: 20%;\n flex-direction: column;\n & svg {\n font-size: 4em;\n }\n`;\n\nexport const ErrorStateWrapper = styled.div`\n padding: 1em;\n`;\n\nexport const CheckoutButtonWrapper = styled.div`\n padding: 0px 10px;\n background: ${({ theme }) => theme.colors.$white};\n`;\n","import React, { useMemo, useEffect } from 'react';\nimport { trackPendoEvent } from 'utils/pendo';\nimport { EmptyStateTw } from '@hqo/react-components-library/dist/molecules/empty-state/emptyState';\nimport { ErrorStateComponent } from '../../styles';\n\ninterface EmptyWalletProps {\n title: string;\n body: string;\n errorIcon: string;\n}\nexport const EmptyWallet = ({ title, body, errorIcon }: EmptyWalletProps): JSX.Element => {\n const descriptions = useMemo(() => [body], [body]);\n useEffect(() => {\n trackPendoEvent('wallet-not-found');\n }, []);\n\n return (\n \n \n \n );\n};\n","import React from 'react';\nimport { useIntl } from 'react-intl';\nimport { EmptyWallet } from 'pages/wallet/components/emptyWallet';\nimport { ERROR_OCCURRED } from 'shared/consts';\n\nexport const ErrorPage = (): JSX.Element => {\n const intl = useIntl();\n const title = intl.formatMessage({ id: 'reload_error_title' });\n const body = intl.formatMessage({ id: 'reload_error_body' });\n return ;\n};\n","export const EMPTY_WALLET = 'address-card';\nexport const ERROR_OCCURRED = 'exclamation-circle';\n","import { ConfigState } from 'store/config/types';\nimport { RootState } from 'store/reducer';\n\nexport const configSelector = (state: RootState): ConfigState => state.config;\n","import { ViewParams } from 'shared/types/view-params';\nimport { createAction } from 'typesafe-actions';\n\nexport const saveExternalConfig = createAction('config/SAVE_EXTERNAL_CONFIG')>();\n","import qs, { ParsedQs } from 'qs';\n\nimport { useLocation } from 'react-router-dom';\n\nexport const useSearchParams = (): T => {\n const { search } = useLocation();\n\n return qs.parse(search?.replace(/^\\?/, '')) as T;\n};\n","import { Navigate, generatePath } from 'react-router';\n\nimport { ROOT_PATH } from 'shared/consts';\nimport React from 'react';\nimport { useViewParams } from 'hooks/use-view-params.hook';\n\nexport const AppRoot = (): JSX.Element => {\n const params = useViewParams();\n\n if (!params.buildingUuid) {\n return ;\n }\n\n const targetUrl = `${generatePath(ROOT_PATH, { ownerId: params.buildingUuid, ownerType: 'building' })}`;\n\n return ;\n};\n","import { useDispatch, useSelector } from 'react-redux';\nimport { useEffect, useMemo } from 'react';\n\nimport { Nullable } from 'shared/types';\nimport { ViewParams } from 'shared/types/view-params';\nimport { configSelector } from 'store/config/selectors';\nimport { saveExternalConfig } from 'store/config/actions';\nimport { useSearchParams } from 'hooks/use-search-params.hook';\n\nexport const useViewParams = (): Nullable> => {\n const searchParams = useSearchParams>();\n const config = useSelector(configSelector);\n const dispatch = useDispatch();\n\n useEffect(() => {\n if (searchParams) {\n dispatch(saveExternalConfig(searchParams));\n }\n }, [searchParams]);\n\n return useMemo(\n () => ({\n ...config,\n ...searchParams,\n }),\n [searchParams, config],\n );\n};\n","import styled from 'styled-components';\n\nexport const Container = styled.div`\n display: flex;\n flex-direction: column;\n justify-content: ${(props: { isLoading: boolean }) => props.isLoading && 'center'};\n height: 100vh;\n`;\n","import { Navigate } from 'react-router-dom';\nimport { Spinner } from '@hqo/react-components-library/dist/atoms/spinner';\nimport { defaultTheme } from '@hqo/react-components-library/dist/molecules/theme';\n\nimport { Container } from 'hocs/shared-styles';\nimport React from 'react';\nimport { hasToken } from 'store/user/selectors';\nimport { useCurrentUser } from 'hooks/use-current-user.hook';\nimport { useSelector } from 'react-redux';\n\ninterface PrivateProps {\n redirectTo?: string;\n children: JSX.Element;\n}\nexport const Private: React.FC = ({\n redirectTo = '/error',\n children,\n}: PrivateProps): JSX.Element | null => {\n const [currentUser, loading] = useCurrentUser();\n const isTokenStored = useSelector(hasToken);\n\n if (currentUser) {\n // eslint-disable-next-line react/jsx-no-useless-fragment\n return <>{children};\n }\n\n if (!isTokenStored && !loading) {\n return ;\n }\n\n return (\n \n \n \n );\n};\n","import { createAsyncAction } from 'typesafe-actions';\nimport { ErrorDto } from '../errors/types';\nimport { Wallet, WalletReloadUrl } from './types';\nimport { ReloadParams, WalletsParams } from 'shared/types';\n\nexport const getWallets = createAsyncAction('GET_WALLETS_REQUEST', 'GET_WALLETS_SUCCESS', 'GET_WALLETS_FAILURE')<\n WalletsParams,\n Array,\n ErrorDto\n>();\n\nexport const reloadWallet = createAsyncAction(\n 'RELOAD_WALLET_REQUEST',\n 'RELOAD_WALLET_SUCCESS',\n 'RELOAD_WALLET_FAILURE',\n)();\n","import { LocaleEnum } from 'shared/consts';\n\nexport const formatCurrency = (currencyValue: number, currencyType: string, locale?: LocaleEnum): string => {\n return new Intl.NumberFormat(locale || LocaleEnum['en-US'], {\n style: 'currency',\n currency: currencyType,\n minimumFractionDigits: 0,\n maximumFractionDigits: 0,\n }).format(currencyValue);\n};\n","import { Button } from '@hqo/react-components-library/dist/atoms/button';\nimport styled from 'styled-components';\n\ninterface ButtonProps {\n selected: boolean;\n}\n\nexport const AmountButton = styled(Button)`\n border: ${({ selected }) => (selected ? '2px solid #00aca9' : 'none')};\n border-radius: 12px;\n box-shadow: 0px 2px 10px rgba(54, 54, 54, 0.15);\n color: #122941;\n font-size: 14px;\n font-weight: 600;\n margin-bottom: 18px;\n margin-top: 18px;\n padding: 20px 0px;\n width: 100%;\n\n &:hover:not([disabled]) {\n background-color: #fff;\n }\n`;\n","import React, { useCallback } from 'react';\n\nimport { BUTTON_VARIANT } from '@hqo/react-components-library/dist/utils';\nimport { formatCurrency } from 'utils/formatCurrency';\nimport { LocaleEnum } from 'shared/consts';\nimport { AmountButton } from './styles';\n\ninterface ReloadButtonProps {\n amount: number;\n currency: string;\n locale: LocaleEnum;\n onClick?: React.Dispatch>;\n selected: boolean;\n}\n\nconst ReloadButtonComponent = ({ amount, currency, locale, onClick, selected }: ReloadButtonProps): JSX.Element => {\n const clickHandler = useCallback(() => {\n onClick(amount);\n }, []);\n\n const text = formatCurrency(amount, currency, locale);\n return (\n \n );\n};\n\nexport const ReloadButton = React.memo(ReloadButtonComponent);\n","import styled from 'styled-components';\nimport { TINY_DEVICE_MAX_WIDTH } from 'shared/consts';\n\nexport const WalletInfoCard = styled.div`\n background: ${({ theme }) => theme.colors.primary};\n border-radius: 8px;\n color: #fff;\n min-height: 129px;\n overflow: hidden;\n padding: 22px 20px;\n`;\n\nexport const BalanceTitle = styled.div`\n font-size: 16px;\n font-weight: 400;\n`;\n\nexport const BalanceAmount = styled.div`\n font-size: 28px;\n font-weight: 700;\n margin-bottom: 43px;\n margin-top: 5px;\n`;\n\nexport const BottomRow = styled.div`\n height: 42px;\n width: 100%;\n`;\n\nexport const WalletNumber = styled.div`\n display: inline;\n float: left;\n font-size: 14px;\n margin-top: 20px;\n\n @media only screen and (max-width: ${TINY_DEVICE_MAX_WIDTH}px) {\n width: 100%;\n }\n`;\n\nexport const Logo = styled.div<{ logoUrl: string }>`\n background: url(${(props) => props.logoUrl}) center/contain no-repeat;\n display: inline;\n float: right;\n height: 100%;\n width: 30%;\n\n @media only screen and (max-width: ${TINY_DEVICE_MAX_WIDTH}px) {\n float: left;\n }\n`;\n","import React from 'react';\nimport { FormattedMessage } from 'react-intl';\n\nimport { BalanceAmount, BottomRow, WalletNumber, BalanceTitle, Logo, WalletInfoCard } from './styles';\nimport { formatCurrency } from 'utils/formatCurrency';\nimport { LocaleEnum } from 'shared/consts';\n\ninterface WalletInfoProps {\n balance: number;\n currency: string;\n locale: LocaleEnum;\n logoUrl: string;\n walletNumber: string;\n}\n\nexport const WalletInfo = ({ balance, walletNumber, currency, locale, logoUrl }: WalletInfoProps): JSX.Element => {\n return (\n \n \n \n \n \n {formatCurrency(balance, currency, locale)}\n \n \n {walletNumber}\n \n \n \n );\n};\n","import { Button } from '@hqo/react-components-library/dist/atoms/button';\nimport styled from 'styled-components';\n\ninterface ButtonProps {\n disabled: boolean;\n}\nexport const StyledCheckoutButton = styled(Button)`\n background-color: ${({ disabled, theme }) => (disabled ? theme.colors.greys.adminBlack : theme.colors.primary)};\n border-color: transparent;\n font-size: 20px;\n font-weight: 600;\n margin-top: 18px;\n padding: 14px;\n width: 100%;\n &:hover:not([disabled]) {\n background-color: ${({ theme }) => theme.colors.primaryHover};\n }\n`;\n","import React, { useCallback } from 'react';\nimport { BUTTON_VARIANT } from '@hqo/react-components-library/dist/utils';\nimport { useIntl } from 'react-intl';\nimport { StyledCheckoutButton } from './styles';\n\ninterface CheckoutButtonProps {\n disabled: boolean;\n onClick?: VoidFunction;\n}\n\nconst CheckoutButtonComponent = ({ disabled, onClick }: CheckoutButtonProps): JSX.Element => {\n const intl = useIntl();\n const buttonText = intl.formatMessage({ id: 'continue_to_checkout' });\n const clickHandler = useCallback(() => onClick(), [onClick]);\n return (\n \n );\n};\n\nexport const CheckoutButton = CheckoutButtonComponent;\n","import { BuildingState, Building } from 'store/building/types';\nimport { RootState } from '../reducer';\nimport { createSelector } from 'reselect';\n\nexport const buildingStateSelector = (state: RootState): BuildingState => state.building;\n\nexport const selectBuilding = createSelector(buildingStateSelector, (buildingState) => buildingState.building);\n\nexport const selectBuildingStatus = createSelector(\n buildingStateSelector,\n (buildingState) => buildingState.getBuilding.status,\n);\n\nexport const selectBuildingTimeZone = createSelector(\n selectBuilding,\n (building: Building | null): string | null => building?.timezone ?? null,\n);\n\nexport const selectBuildingLocale = createSelector(\n selectBuilding,\n (building: Building | null): string | null => building?.locale ?? null,\n);\n","import { RootState } from '../reducer';\nimport { WalletsState } from 'store/wallets/types';\nimport { createSelector } from 'reselect';\n\nexport const selectWallets = (state: RootState): WalletsState => state.wallets;\n\nexport const selectWalletError = createSelector([selectWallets], (wallets) => wallets.getWallets.error);\n\nexport const selectReloadUrl = createSelector(selectWallets, (state: WalletsState): string => state.reloadUrl);\n\nexport const selectGetWalletStatus = createSelector([selectWallets], (wallets) => wallets.getWallets.status);\n","import React from 'react';\nimport { Container } from 'hocs/shared-styles';\nimport { defaultTheme } from '@hqo/react-components-library/dist/molecules/theme';\nimport { Spinner } from '@hqo/react-components-library/dist/atoms/spinner';\n\nexport const LoadingPage = (): JSX.Element => (\n \n \n \n);\n","import { RootState } from '../reducer';\nimport { AuthState } from 'store/auth/types';\n\nexport const authState = (state: RootState): AuthState => state.auth;\n","import { createSelector } from 'reselect';\nimport { RootState } from 'store/reducer';\n\nconst themeSelector = (state: RootState) => state.theme;\n\nexport const selectBrandTheme = createSelector([themeSelector], (theme) => theme.theme);\n\nexport const selectThemeFont = createSelector([themeSelector], (theme) => theme.theme?.font);\n","export default __webpack_public_path__ + \"static/media/youfirst-bureau-logo.f3533816.png\";","/* eslint-disable max-lines-per-function */\nimport React, { useEffect, useState, useCallback } from 'react';\nimport { FormattedMessage, useIntl } from 'react-intl';\nimport { useDispatch, useSelector } from 'react-redux';\n\nimport { Container, ReloadTitle, CheckoutButtonWrapper, WalletContainer } from './styles';\nimport {\n CurrencyEnum,\n LocaleEnum,\n WALLET_TYPES,\n RELOAD_AMOUNTS,\n ERROR_PATH,\n EXTERNAL_AUTH_TOKEN_NOT_FOUND,\n ACTION_STATUSES,\n EMPTY_WALLET,\n FontLocation,\n LDFlags,\n} from 'shared/consts';\nimport { getWallets, reloadWallet } from 'store/wallets/actions';\nimport { ReloadButton } from './components/reloadButton';\nimport { WalletInfo } from './components/walletInfo';\nimport { CheckoutButton } from './components/checkoutButton';\nimport { selectBuilding } from 'store/building/selectors';\nimport { configSelector } from 'store/config/selectors';\nimport { selectReloadUrl, selectWallets, selectGetWalletStatus, selectWalletError } from 'store/wallets/selectors';\nimport { Navigate } from 'react-router-dom';\nimport { LoadingPage } from 'pages/loading';\nimport { flushPendo, trackPendoEvent } from 'utils/pendo';\nimport { EmptyWallet } from 'pages/wallet/components/emptyWallet';\nimport { authState } from 'store/auth/selectors';\nimport { useThemeFont } from 'hooks/use-theme-font.hook';\nimport { PageTitle } from '@hqo/react-components-library/dist/page-header';\nimport { useFlags } from 'launchdarkly-react-client-sdk';\nimport * as gecinaLogo from 'assets/youfirst-bureau-logo.png';\n\nexport const WalletPage = (): JSX.Element => {\n const building = useSelector(selectBuilding);\n const dispatch = useDispatch();\n const { loading: isAuthUrlLoading } = useSelector(authState);\n const { locale } = useSelector(configSelector);\n const [reloadAmount, setReloadAmount] = useState();\n const { wallets } = useSelector(selectWallets);\n const error = useSelector(selectWalletError);\n const walletLoadingStatus = useSelector(selectGetWalletStatus);\n const wallet = wallets[0];\n const reloadUrl = useSelector(selectReloadUrl);\n const intl = useIntl();\n const themeFontTitle = useThemeFont(FontLocation.TITLE);\n const ldFlags = useFlags();\n\n const checkoutRedirect = useCallback(() => {\n trackPendoEvent('WALLET_RELOAD_CHECKOUT', {\n amount: reloadAmount,\n currency: wallet?.currency || CurrencyEnum.EUR,\n });\n\n dispatch(\n reloadWallet.request({\n amount: reloadAmount,\n buildingUuid: building.uuid,\n returnUri: window.location.origin,\n walletType: WALLET_TYPES.SODEXO,\n }),\n );\n }, [reloadAmount, wallet?.currency]);\n\n const setLogoUrl = useCallback(() => {\n const showAlternateLogo = ldFlags[LDFlags.SHOW_ALTERNATE_WALLET_LOGO];\n\n if (showAlternateLogo) {\n return undefined;\n }\n\n return gecinaLogo.default;\n }, [ldFlags]);\n\n useEffect(() => {\n if (wallets.length === 0 && error === null && walletLoadingStatus !== ACTION_STATUSES.FULFILLED && building?.uuid)\n dispatch(getWallets.request({ buildingUuid: building.uuid, walletTypes: [WALLET_TYPES.SODEXO] }));\n }, [wallets, building?.uuid]);\n\n useEffect(() => {\n if (reloadUrl) {\n trackPendoEvent('wallet-reload-redirect');\n flushPendo().then(() => {\n window.location.href = reloadUrl;\n });\n }\n }, [reloadUrl]);\n\n if (error && error?.data?.code !== EXTERNAL_AUTH_TOKEN_NOT_FOUND) {\n return ;\n }\n if (walletLoadingStatus !== ACTION_STATUSES.FULFILLED || isAuthUrlLoading) {\n return ;\n }\n if (walletLoadingStatus === ACTION_STATUSES.FULFILLED && !wallet) {\n return (\n \n );\n }\n return (\n \n \n \n \n \n \n \n \n \n {RELOAD_AMOUNTS.map((amount) => {\n return (\n \n );\n })}\n \n \n \n \n \n );\n};\n","import { useMemo } from 'react';\nimport { useSelector } from 'react-redux';\nimport { FontLocation } from 'shared/consts';\nimport { selectThemeFont } from 'store/theme/selectors';\n\nexport interface ThemeLocationFont {\n fontFamily?: string;\n url?: string;\n}\n\nexport const useThemeFont = (location: FontLocation): ThemeLocationFont | null => {\n const themeFont = useSelector(selectThemeFont);\n const font = themeFont?.[location];\n\n return useMemo(() => {\n if (font) {\n return {\n fontFamily: font.font_family,\n url: font.url,\n };\n }\n return null;\n }, [font]);\n};\n","import { BuildingTheme } from './types';\nimport { FailureActionPayload } from '../errors/types';\nimport { createAsyncAction } from 'typesafe-actions';\n\nexport const getBuildingTheme = createAsyncAction(\n 'GET_BUILDING_THEME_REQUEST',\n 'GET_BUILDING_THEME_SUCCESS',\n 'GET_BUILDING_THEME_FAILURE',\n)();\n","import React from 'react';\nimport ReactDOM from 'react-dom';\n\ninterface HeadPortalProps {\n children: React.ReactNode;\n}\n\nexport const HeadPortal = ({ children }: HeadPortalProps): JSX.Element | null => {\n const { head } = document;\n\n if (!head) {\n return null;\n }\n\n return ReactDOM.createPortal(children, head);\n};\n","import { HeadPortal } from 'components/head-portal';\nimport React from 'react';\nimport { useSelector } from 'react-redux';\nimport { selectBrandTheme } from 'store/theme/selectors';\n\nexport const CustomFonts = (): JSX.Element | null => {\n const brandTheme = useSelector(selectBrandTheme);\n\n if (!brandTheme?.font || Object.keys(brandTheme.font).length === 0) {\n return null;\n }\n\n const renderLinks = () => {\n return Object.entries(brandTheme.font).map(\n ([location, fontObject]) => fontObject.url && ,\n );\n };\n\n return {renderLinks()};\n};\n","import { Building } from 'store/building/types';\nimport { createAsyncAction } from 'typesafe-actions';\n\nexport const getBuilding = createAsyncAction('GET_BUILDING_REQUEST', 'GET_BUILDING_SUCCESS', 'GET_BUILDING_FAILURE')<\n string,\n Building,\n Error\n>();\n","import { createGlobalStyle } from 'styled-components';\nimport { hqoTheme } from '@hqo/react-components-library/dist/hqo-theme-provider';\n\nexport const AppContentWrapperStyles = createGlobalStyle<{ customThemeFonts?: string[] | null }>`\n body {\n font-family: ${({ customThemeFonts }) => customThemeFonts?.join() || hqoTheme.fonts.join()};\n }\n`;\n","import { DefaultThemeWithFonts, AppThemeProvider } from '@hqo/react-components-library/dist/molecules/theme';\n\nimport React from 'react';\nimport { useSelector } from 'react-redux';\nimport { useBuildingTheme } from 'hooks/use-building-theme.hook';\nimport { CustomFonts } from 'components/custom-fonts';\nimport { ACTION_STATUSES } from 'shared/consts';\nimport { useBuilding } from 'hooks/use-building.hook';\nimport { selectBuildingStatus } from 'store/building/selectors';\nimport { AppContentWrapperStyles } from './app-content-wrapper.styles';\nimport { LoadingPage } from 'pages/loading';\n\ninterface AppContentWrapperProps {\n children: React.ReactNode;\n}\n\nexport const AppContentWrapper = ({ children }: AppContentWrapperProps): JSX.Element => {\n const buildingStatus = useSelector(selectBuildingStatus);\n const theme = useBuildingTheme();\n useBuilding();\n\n const isDataLoading = !theme || !buildingStatus || buildingStatus === ACTION_STATUSES.PENDING;\n\n return isDataLoading ? (\n \n ) : (\n <>\n \n \n {children}\n \n );\n};\n","import { getBuildingTheme } from 'store/theme/actions';\nimport { useEffect, useMemo } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { selectBrandTheme } from 'store/theme/selectors';\nimport { defaultTheme, DefaultThemeWithFonts } from '@hqo/react-components-library/dist/molecules/theme';\nimport { hqoTheme } from '@hqo/react-components-library/dist/hqo-theme-provider';\nimport { configSelector } from 'store/config/selectors';\n\nexport const useBuildingTheme = (): DefaultThemeWithFonts => {\n const dispatch = useDispatch();\n const brandTheme = useSelector(selectBrandTheme);\n const { buildingUuid } = useSelector(configSelector);\n\n useEffect(() => {\n if (buildingUuid) {\n dispatch(getBuildingTheme.request(buildingUuid as string));\n }\n }, [dispatch, getBuildingTheme, buildingUuid]);\n\n return useMemo(() => {\n if (brandTheme) {\n return {\n colors: {\n ...defaultTheme.colors,\n $primary: brandTheme.primary_color,\n $secondary: brandTheme.secondary_color,\n primary: brandTheme.primary_color,\n secondary: brandTheme.secondary_color,\n },\n fonts: brandTheme.font?.body?.font_family ? [`${brandTheme.font?.body?.font_family}`, ...hqoTheme.fonts] : null,\n };\n }\n return defaultTheme;\n }, [brandTheme, defaultTheme, buildingUuid]);\n};\n","import { useDispatch, useSelector } from 'react-redux';\n\nimport { Building } from 'store/building/types';\nimport { getBuilding } from 'store/building/actions';\nimport { selectBuilding } from 'store/building/selectors';\nimport { useEffect } from 'react';\nimport { configSelector } from 'store/config/selectors';\n\nexport const useBuilding = (): Building | null => {\n const { buildingUuid } = useSelector(configSelector);\n const dispatch = useDispatch();\n const building = useSelector(selectBuilding);\n\n useEffect(() => {\n if (!building && buildingUuid) {\n dispatch(getBuilding.request(buildingUuid as string));\n }\n }, [building, buildingUuid, dispatch]);\n\n return building;\n};\n","import { ERROR_PATH, ROOT_PATH, WALLET_PATH } from 'shared/consts';\nimport { Route, Routes } from 'react-router-dom';\nimport { DefaultRedirect } from './default-redirect';\nimport { ErrorPage } from 'pages/error';\nimport { AppRoot } from 'components/app-root';\nimport React from 'react';\nimport { Private } from 'components/router/private';\nimport { WalletPage } from 'pages/wallet';\nimport { AppContentWrapper } from 'components/app-content-wrapper/app-content-wrapper';\n\nexport const Router: React.FC = (): JSX.Element => (\n \n \n \n \n \n \n }\n />\n } />\n } />\n } />\n } />\n \n);\n","import { LAUNCH_DARKLY_ANONYMOUS_EMAIL } from 'shared/consts';\nimport { useEffect } from 'react';\nimport { selectBuilding } from 'store/building/selectors';\nimport { currentUser } from 'store/user/selectors';\nimport { useLDClient } from 'launchdarkly-react-client-sdk';\nimport { useSelector } from 'react-redux';\nimport { LDUser } from 'launchdarkly-js-client-sdk';\n\nconst initialLDUser: LDUser = {\n key: LAUNCH_DARKLY_ANONYMOUS_EMAIL,\n anonymous: true,\n};\n\nexport const useLaunchDarklyIdentify = (): void => {\n const ldClient = useLDClient();\n const user = useSelector(currentUser);\n const building = useSelector(selectBuilding);\n\n useEffect(() => {\n if (!user || !ldClient) return;\n ldClient.identify({\n ...initialLDUser,\n email: user.email,\n key: user.email,\n anonymous: false,\n custom: {\n portfolio_uuid: building?.portfolio_uuid,\n },\n });\n }, [ldClient, user, building]);\n};\n","import { useCurrentUser } from 'hooks/use-current-user.hook';\nimport { useMemo } from 'react';\nimport { useSelector } from 'react-redux';\nimport { PendoAnalytics } from 'utils/pendo';\nimport { detect } from 'detect-browser';\nimport { User } from 'store/user/types';\nimport { configSelector } from 'store/config/selectors';\nimport { DEFAULT_APP_BRAND } from 'shared/consts';\nimport { selectBuilding } from 'store/building/selectors';\nimport { Building } from 'store/building/types';\n\nconst useBrowser = () => useMemo(() => detect(), []);\n\nconst getAccountAnalytics = (building: Building): PendoAnalytics['account'] => ({\n id: `${building.uuid}${process.env.REACT_APP_PENDO_ID_SUFFIX ?? ''}`,\n current_building_uuid: building.uuid,\n current_building_name: building.name,\n current_portfolio_id: building.portfolio_uuid,\n});\n\nconst getVisitorAnalytics = (\n accountId: string,\n building: Building,\n user: User,\n browser: ReturnType,\n appBrand: string | null,\n): PendoAnalytics['visitor'] => ({\n id: `${user.uuid}${process.env.REACT_APP_PENDO_ID_SUFFIX ?? ''}`,\n account: accountId,\n test_user: !!user.test,\n current_building_name: building.name,\n current_portfolio_id: building.portfolio_uuid,\n tenant_company_id: user.company_uuid,\n app_brand: appBrand ?? DEFAULT_APP_BRAND,\n current_user_roles: user.roles.map(({ name }) => name),\n os_name: browser?.name ?? '',\n os_version: browser?.version ?? '',\n});\n\nexport const usePendoAnalytics = (): PendoAnalytics | null => {\n const building = useSelector(selectBuilding);\n const { appBrand } = useSelector(configSelector);\n const [user] = useCurrentUser();\n const browser = useBrowser();\n\n return useMemo(() => {\n if (!building || !user) {\n return null;\n }\n\n const account = getAccountAnalytics(building);\n const visitor = getVisitorAnalytics(account.id, building, user, browser, appBrand);\n\n return {\n visitor,\n account,\n };\n }, [building, user, browser, appBrand]);\n};\n","export const DEFAULT_APP_BRAND = 'HQO';\n","import React from 'react';\nimport { Router } from 'components/router';\nimport { useExternalLogin } from 'hooks/use-external-login.hook';\nimport { useLaunchDarklyIdentify } from 'hooks/use-launch-darkly-identify.hook';\nimport { usePendo } from 'hooks/use-pendo.hook';\nimport { LoadingPage } from 'pages/loading';\n\nexport const App: React.FC = (): JSX.Element => {\n const shouldWaitForLogin = useExternalLogin();\n useLaunchDarklyIdentify();\n usePendo();\n\n if (shouldWaitForLogin) {\n return ;\n }\n\n return ;\n};\n","import { externalLogin } from 'store/user/actions';\nimport { useDispatch } from 'react-redux';\nimport { useEffect } from 'react';\nimport { useSearchParams } from './use-search-params.hook';\n\ntype AuthParams = { authToken?: string; apiUrl?: string };\n\nexport const useExternalLogin = (): boolean => {\n const dispatch = useDispatch();\n const { authToken, apiUrl } = useSearchParams();\n\n const shouldWaitForLogin = !!authToken || !!apiUrl;\n\n useEffect((): void => {\n if (shouldWaitForLogin) {\n dispatch(externalLogin.request({ authToken: authToken ?? null, apiUrl: apiUrl ?? null }));\n }\n }, [dispatch, externalLogin, shouldWaitForLogin]);\n\n return shouldWaitForLogin;\n};\n","import { usePendoAnalytics } from 'hooks/use-pendo-analytics.hook';\nimport { useEffect } from 'react';\nimport { initializePendo } from 'utils/pendo';\n\nexport const usePendo = (): void => {\n const analytics = usePendoAnalytics();\n\n useEffect(() => {\n if (window.pendo && analytics) {\n initializePendo(window.pendo, analytics);\n }\n }, [analytics]);\n};\n","export interface VisitorAnalytics extends pendo.Metadata {\n id: string;\n current_user_roles: Array;\n tenant_company_id: string;\n app_brand: string;\n current_building_name: string;\n account: string;\n current_portfolio_id: string;\n test_user: boolean;\n os_name: string;\n os_version: string;\n}\n\nexport interface AccountAnalytics extends pendo.Metadata {\n id: string;\n current_building_name: string;\n current_building_uuid: string;\n current_portfolio_id: string;\n}\n\nexport interface PendoAnalytics {\n visitor: VisitorAnalytics;\n account: AccountAnalytics;\n}\n\nexport const initializePendo = (\n pendo: Pick,\n analytics: PendoAnalytics,\n): void => {\n if (!pendo.getAccountId?.()) {\n pendo.initialize?.(analytics);\n } else {\n pendo.identify?.(analytics);\n }\n};\n","/* eslint-disable @typescript-eslint/no-use-before-define */\nconst getResultKey = (key: string, parent?: string) => (parent ? `${parent}.${key}` : key);\n\nfunction getValues(value: unknown, resultKey: string): Record | null | undefined {\n if (typeof value === 'object') {\n return flatten(value as Record | null, resultKey);\n }\n\n return {\n [resultKey]: value,\n };\n}\n\nexport function flatten(\n obj?: Record | null,\n parent?: string,\n): Record | null | undefined {\n if (!obj) {\n return obj;\n }\n\n return Object.entries(obj).reduce((result, [key, value]) => {\n const resultKey = getResultKey(key, parent);\n\n return {\n ...result,\n ...getValues(value, resultKey),\n };\n }, {});\n}\n","export const JSON_CONTENT_TYPE = 'application/json';\n\nexport enum ApiRequestHeaders {\n AUTHORIZATION = 'Authorization',\n HQO_BUILDING_UUID = 'hqo-building-uuid',\n ALT_BUILDING_UUID = 'alt-building-uuid',\n CONTENT_TYPE = 'Content-Type',\n}\n","import { flatten } from 'utils';\nimport messagesInCanadianFrench from 'lang/fr-CA.json';\nimport messagesInDutch from 'lang/nl-NL.json';\nimport messagesInEnglish from 'lang/en.json';\nimport messagesInFrench from 'lang/fr-FR.json';\nimport messagesInGerman from 'lang/de-DE.json';\nimport messagesInSpanish from 'lang/es-ES.json';\nimport { useMemo } from 'react';\n\nexport const DEFAULT_LOCALE = 'en';\n\nconst messagesMap = new Map>([\n ['en', messagesInEnglish.wallet],\n ['es-es', messagesInSpanish.wallet],\n ['fr-fr', messagesInFrench.wallet],\n ['fr-ca', messagesInCanadianFrench.wallet],\n ['de-de', messagesInGerman.wallet],\n ['nl-nl', messagesInDutch.wallet],\n]);\n\nexport const getAvailableLocale = (userLocale: string): [string, string] => {\n if (messagesMap.has(userLocale)) {\n return [userLocale, userLocale];\n }\n\n const [lang] = userLocale.split('-');\n\n if (messagesMap.has(lang)) {\n return [lang, userLocale];\n }\n\n return [DEFAULT_LOCALE, DEFAULT_LOCALE];\n};\n\ninterface LocaleData {\n messages: Record;\n locale: string;\n}\n\nexport const useLocaleData = (userLocale: string): LocaleData => {\n return useMemo(() => {\n const [messagesKey, locale] = getAvailableLocale(userLocale);\n\n return {\n locale,\n messages: flatten(messagesMap.get(messagesKey)) as Record,\n };\n }, [userLocale]);\n};\n","import { DEFAULT_LOCALE, useLocaleData } from 'components/intl-provider/intl-provider.hooks';\n\nimport React from 'react';\nimport { IntlProvider as ReactIntlProvider } from 'react-intl';\n\ninterface IntlProviderProps {\n children: React.ReactNode;\n}\n\nexport const IntlProvider: React.FC = ({ children }: IntlProviderProps): JSX.Element => {\n const { locale, messages } = useLocaleData(navigator.language.toLowerCase());\n\n return (\n \n {children}\n \n );\n};\n","import { createBrowserHistory } from 'history';\n\nexport const history = createBrowserHistory();\n","import { compose } from 'redux';\n\nconst reduxDevToolsExtensionCompose =\n process.env.NODE_ENV === 'development' && window?.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__;\nexport const composeEnhancers = reduxDevToolsExtensionCompose || compose;\n","import { createAction, createAsyncAction } from 'typesafe-actions';\n\nimport { AltBuilding } from './types';\nimport { FailureActionPayload } from '../errors/types';\n\nexport const getAltBuildings = createAsyncAction(\n 'GET_ALT_BUILDINGS_REQUEST',\n 'GET_ALT_BUILDINGS_SUCCESS',\n 'GET_ALT_BUILDINGS_FAILURE',\n), FailureActionPayload>();\n\nexport const setCurrentAltBuilding = createAction('SET_CURRENT_ALT_BUILDING')();\n","import * as actions from './actions';\n\nimport { catchError, filter, map, switchMap, withLatestFrom } from 'rxjs/operators';\n\nimport { Epic } from 'redux-observable';\nimport { RootAction } from 'store/actions';\nimport { RootDependencies } from 'store/dependencies';\nimport { RootState } from 'store/reducer';\nimport { isActionOf } from 'typesafe-actions';\nimport { of } from 'rxjs';\n\nexport const getAltBuildingsEpic: Epic = (\n action$,\n state$,\n { apiClient },\n) =>\n action$.pipe(\n filter(isActionOf(actions.getAltBuildings.request)),\n withLatestFrom(state$),\n switchMap(([{ payload }, state]) => {\n return apiClient(state)\n .getAltBuildings(payload)\n .pipe(\n map((response) => {\n return actions.getAltBuildings.success(response.response);\n }),\n catchError((error) => of(actions.getAltBuildings.failure({ error }))),\n );\n }),\n );\n","import * as actions from './actions';\n\nimport { Observable, of } from 'rxjs';\nimport { catchError, filter, map, switchMap, withLatestFrom } from 'rxjs/operators';\n\nimport { Epic } from 'redux-observable';\nimport { RootAction } from 'store/actions';\nimport { RootDependencies } from 'store/dependencies';\nimport { RootState } from 'store/reducer';\nimport { isActionOf } from 'typesafe-actions';\n\nexport const getBuildingEpic: Epic = (\n action$,\n state$,\n { apiClient },\n) =>\n action$.pipe(\n filter(isActionOf(actions.getBuilding.request)),\n withLatestFrom(state$),\n switchMap(([{ payload }, state]): Observable => {\n return apiClient(state)\n .getBuilding(payload)\n .pipe(\n map((xhrPayload) => {\n return actions.getBuilding.success(xhrPayload.response.data.building);\n }),\n catchError((error) => of(actions.getBuilding.failure(error))),\n );\n }),\n );\n","import * as actions from './actions';\nimport { catchError, filter, map, switchMap, withLatestFrom } from 'rxjs/operators';\nimport { AjaxResponse } from 'rxjs/ajax';\nimport { Epic } from 'redux-observable';\nimport { isActionOf } from 'typesafe-actions';\nimport { of } from 'rxjs';\nimport { RootAction } from 'store/actions';\nimport { RootDependencies } from 'store/dependencies';\nimport { RootState } from 'store/reducer';\nimport { ReloadWalletAPIResponse, WalletsAPIResponse } from './types';\n\nexport const getWalletsEpic: Epic = (\n action$,\n state$,\n { apiClient },\n) =>\n action$.pipe(\n filter(isActionOf(actions.getWallets.request)),\n withLatestFrom(state$),\n switchMap(([{ payload }, state]) => {\n const { buildingUuid, walletTypes } = payload;\n return apiClient(state)\n .getWallets(buildingUuid, walletTypes)\n .pipe(\n map(({ response }: AjaxResponse) => {\n return actions.getWallets.success(response.data);\n }),\n catchError(({ response }) => {\n return of(actions.getWallets.failure(response));\n }),\n );\n }),\n );\n\nexport const reloadWalletEpic: Epic = (\n action$,\n state$,\n { apiClient },\n) =>\n action$.pipe(\n filter(isActionOf(actions.reloadWallet.request)),\n withLatestFrom(state$),\n switchMap(([{ payload }, state]) => {\n return apiClient(state)\n .reloadWallet(payload)\n .pipe(\n map(({ response }: AjaxResponse) => {\n return actions.reloadWallet.success(response.data);\n }),\n catchError(({ response }) => {\n return of(actions.reloadWallet.failure(response));\n }),\n );\n }),\n );\n","import { createAsyncAction } from 'typesafe-actions';\nimport { FailureActionPayload } from '../errors/types';\n\nexport const openAuthFlow = createAsyncAction(\n 'OPEN_AUTH_FLOW_REQUEST',\n 'OPEN_AUTH_FLOW_SUCCESS',\n 'OPEN_AUTH_FLOW_FAILURE',\n)();\n","import * as actions from './actions';\nimport { catchError, filter, map, switchMap, withLatestFrom } from 'rxjs/operators';\nimport { AjaxResponse } from 'rxjs/ajax';\nimport { Epic } from 'redux-observable';\nimport { isActionOf } from 'typesafe-actions';\nimport { of, EMPTY } from 'rxjs';\nimport { RootAction } from 'store/actions';\nimport { RootDependencies } from 'store/dependencies';\nimport { RootState } from 'store/reducer';\nimport { AuthURLResponse } from './types';\nimport { UiMetadata } from 'store/ui-metadata/types';\nimport { OwnerTypesEnum } from 'shared/consts';\nimport { getFlushPendoObservable } from 'utils/pendo';\n\nexport const openAuthFlowEpic: Epic = (\n action$,\n state$,\n { apiClient },\n) =>\n action$.pipe(\n filter(isActionOf(actions.openAuthFlow.request)),\n withLatestFrom(state$),\n switchMap(([, state]) => {\n return apiClient(state)\n .fetchUiMetadata({ ownerType: OwnerTypesEnum.BUILDING.toUpperCase(), ownerId: state.building.building.uuid })\n .pipe(\n switchMap(({ response: uiMetadataResponse }: AjaxResponse) => {\n return apiClient(state)\n .getAuthURL(uiMetadataResponse.ui_metadata.helix_auth_link, state.building.building.uuid)\n .pipe(\n switchMap(({ response: authURLResponse }: AjaxResponse) =>\n getFlushPendoObservable().pipe(\n map(() => actions.openAuthFlow.success(authURLResponse.url)),\n catchError(() => of(actions.openAuthFlow.success(authURLResponse.url))),\n ),\n ),\n catchError((error: Error) => of(actions.openAuthFlow.failure({ error }))),\n );\n }),\n catchError((error: Error) => of(actions.openAuthFlow.failure({ error }))),\n );\n }),\n );\n\nexport const redirectToAuthUrlEpic: Epic = (action$) =>\n action$.pipe(\n filter(isActionOf(actions.openAuthFlow.success)),\n switchMap((action) => {\n window.location.href = action.payload as string;\n\n return EMPTY;\n }),\n );\n","import { createAction } from 'typesafe-actions';\n\nexport const push = createAction('router/PUSH')();\nexport const replace = createAction('router/REPLACE')();\nexport const goBack = createAction('router/GO_BACK')();\nexport const goForward = createAction('router/GO_FORWARD')();\n","import { Epic } from 'redux-observable';\nimport { EMPTY, filter, switchMap } from 'rxjs';\nimport { RootAction } from 'store/actions';\nimport { RootDependencies } from 'store/dependencies';\nimport { RootState } from 'store/reducer';\nimport { push, goBack, replace, goForward } from 'store/router/actions';\nimport { history } from './history';\nimport { isActionOf } from 'typesafe-actions';\n\nexport const pushEpic: Epic = (action$) =>\n action$.pipe(\n filter(isActionOf(push)),\n switchMap((action) => {\n history.push(action.payload);\n\n return EMPTY;\n }),\n );\n\nexport const replaceEpic: Epic = (action$) =>\n action$.pipe(\n filter(isActionOf(replace)),\n switchMap((action) => {\n history.replace(action.payload);\n\n return EMPTY;\n }),\n );\n\nexport const goBackEpic: Epic = (action$) =>\n action$.pipe(\n filter(isActionOf(goBack)),\n switchMap(() => {\n history.back();\n\n return EMPTY;\n }),\n );\n\nexport const goForwardEpic: Epic = (action$) =>\n action$.pipe(\n filter(isActionOf(goForward)),\n switchMap(() => {\n history.forward();\n\n return EMPTY;\n }),\n );\n","import { ErrorNotification } from './types';\nimport { createAction } from 'typesafe-actions';\n\nexport const showErrorNotification = createAction('notifications/SHOW_ERROR')>();\nexport const hideErrorNotifications = createAction('notifications/HIDE_ERRORS')();\n\nexport const showGenericErrorNotification = createAction('notifications/SHOW_GENERIC_ERROR')<\n Omit\n>();\nexport const hideGenericErrorNotifications = createAction('notifications/SHOW_GENERIC_ERRORS')();\n","import * as altBuildingsActions from 'store/alt-buildings/actions';\nimport * as themeActions from 'store/theme/actions';\nimport * as userActions from 'store/user/actions';\n\nimport { concatMap, filter, mergeMap } from 'rxjs/operators';\nimport { showGenericErrorNotification, showErrorNotification } from './actions';\n\nimport { ERROR_PATH, FORBIDDEN_ERROR_CODE, EXTERNAL_AUTH_TOKEN_NOT_FOUND } from 'shared/consts';\nimport { Epic } from 'redux-observable';\nimport { RootAction } from 'store/actions';\nimport { RootState } from 'store/reducer';\nimport { isActionOf } from 'typesafe-actions';\nimport { of } from 'rxjs';\nimport { getWallets, reloadWallet } from 'store/wallets/actions';\nimport { openAuthFlow } from 'store/auth/actions';\nimport { replace } from 'store/router/actions';\n\nexport const handleAuthErrors: Epic = (action$) =>\n action$.pipe(\n // Add failure actions to trigger error modal here and in the test file\n filter(isActionOf([getWallets.failure, reloadWallet.failure])),\n mergeMap((action) => {\n if (\n action?.payload?.status_code === FORBIDDEN_ERROR_CODE &&\n action?.payload?.data?.code === EXTERNAL_AUTH_TOKEN_NOT_FOUND\n ) {\n return of(openAuthFlow.request());\n }\n\n return of(showErrorNotification({ action: action.type, error: action?.payload?.error }));\n }),\n );\n\nexport const handleGenericErrors: Epic = (action$) =>\n action$.pipe(\n // Add failure actions to trigger error page redirects here and in the test file\n filter(\n isActionOf([\n themeActions.getBuildingTheme.failure,\n userActions.externalLogin.failure,\n userActions.getCurrentUser.failure,\n altBuildingsActions.getAltBuildings.failure,\n ]),\n ),\n concatMap((action) =>\n of(\n showGenericErrorNotification({\n action: action.type,\n error: action.payload.error,\n }),\n replace(ERROR_PATH),\n ),\n ),\n );\n","import * as actions from './actions';\n\nimport { catchError, filter, map, switchMap, withLatestFrom } from 'rxjs/operators';\n\nimport { Epic } from 'redux-observable';\nimport { RootAction } from 'store/actions';\nimport { RootDependencies } from 'store/dependencies';\nimport { RootState } from 'store/reducer';\nimport { isActionOf } from 'typesafe-actions';\nimport { of } from 'rxjs';\n\nexport const getBuildingThemeEpic: Epic = (\n action$,\n state$,\n { apiClient },\n) =>\n action$.pipe(\n filter(isActionOf(actions.getBuildingTheme.request)),\n withLatestFrom(state$),\n switchMap(([{ payload }, state]) => {\n return apiClient(state)\n .getBuildingTheme(payload)\n .pipe(\n map((data) => {\n return actions.getBuildingTheme.success(data.response);\n }),\n catchError((error: Error) => of(actions.getBuildingTheme.failure({ error }))),\n );\n }),\n );\n","export class UnauthorizedError extends Error {}\n","import * as userActions from './actions';\n\nimport { catchError, filter, map, mapTo, switchMap, withLatestFrom } from 'rxjs/operators';\n\nimport { AjaxError } from 'rxjs/ajax';\nimport { Epic } from 'redux-observable';\nimport { RootAction } from 'store/actions';\nimport { RootDependencies } from 'store/dependencies';\nimport { RootState } from 'store/reducer';\nimport { UnauthorizedError } from 'store/user/errors';\nimport { isActionOf } from 'typesafe-actions';\nimport { of } from 'rxjs';\nimport qs from 'qs';\nimport { replace } from 'store/router/actions';\n\nconst UNAUTHORIZED_ERROR_CODE = 401;\nconst NOT_FOUND_ERROR_CODE = 404;\nconst BAD_REQUEST_ERROR_CODE = 400;\nconst INTERNAL_SERVER_ERROR_CODE = 500;\n\nconst isUnauthorizedError = (error: unknown): boolean =>\n error instanceof AjaxError && error.status >= BAD_REQUEST_ERROR_CODE && error.status < INTERNAL_SERVER_ERROR_CODE;\n\nexport const externalLogin: Epic = (\n action$,\n state$,\n { apiClient },\n) =>\n action$.pipe(\n filter(isActionOf(userActions.externalLogin.request)),\n withLatestFrom(state$),\n switchMap(([{ payload }, state]) => {\n const { authToken, apiUrl } = payload;\n\n return apiClient(state, apiUrl, authToken)\n .getCurrentUser()\n .pipe(\n map((xhrPayload) => {\n return userActions.externalLogin.success({ user: xhrPayload.response, apiUrl, token: authToken });\n }),\n catchError((error: Error) => {\n if (isUnauthorizedError(error)) {\n return of(userActions.externalLogin.failure({ error: new UnauthorizedError() }));\n }\n\n return of(userActions.externalLogin.failure({ error }));\n }),\n );\n }),\n );\n\nexport const externalLoginRedirect: Epic = (action$) =>\n action$.pipe(\n filter(isActionOf(userActions.externalLogin.success)),\n map(() => {\n const search: string = window.location?.search ?? '';\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { authToken, apiUrl, ...restSearch } = qs.parse(search.replace(/^\\?/, ''));\n const newSearchString = qs.stringify(restSearch);\n const path = window.location?.pathname ?? '/';\n\n return replace(newSearchString ? `${path}?${newSearchString}` : path);\n }),\n );\n\nexport const externalLoginFailureRedirect: Epic = (action$) =>\n action$.pipe(filter(isActionOf(userActions.externalLogin.failure)), mapTo(replace('/')));\n\nexport const getCurrentUser: Epic = (\n action$,\n state$,\n { apiClient },\n) =>\n action$.pipe(\n filter(isActionOf(userActions.getCurrentUser.request)),\n withLatestFrom(state$),\n switchMap(([, state]) =>\n apiClient(state)\n .getCurrentUser()\n .pipe(\n map((xhrPayload) => {\n return userActions.getCurrentUser.success({ user: xhrPayload.response });\n }),\n catchError((error: Error) => {\n if (\n error instanceof AjaxError &&\n (error.status === UNAUTHORIZED_ERROR_CODE || error.status === NOT_FOUND_ERROR_CODE)\n ) {\n return of(userActions.getCurrentUser.failure({ error: new UnauthorizedError() }));\n }\n\n return of(userActions.getCurrentUser.failure({ error }));\n }),\n ),\n ),\n );\n","import * as altBuildingsEpics from 'store/alt-buildings/epics';\nimport * as BuildingEpics from 'store/building/epics';\nimport * as WalletsEpics from 'store/wallets/epics';\nimport * as AuthEpics from 'store/auth/epics';\nimport * as routerEpics from 'store/router/epics';\nimport * as errorsEpics from 'store/errors/epics';\nimport * as themeEpics from 'store/theme/epics';\nimport * as userEpics from 'store/user/epics';\n\nimport { combineEpics } from 'redux-observable';\n\nexport default combineEpics(\n ...Object.values(routerEpics),\n ...Object.values(userEpics),\n ...Object.values(themeEpics),\n ...Object.values(errorsEpics),\n ...Object.values(altBuildingsEpics),\n ...Object.values(BuildingEpics),\n ...Object.values(WalletsEpics),\n ...Object.values(AuthEpics),\n);\n","import * as altBuildingsActions from './actions';\n\nimport { ActionType, createReducer } from 'typesafe-actions';\n\nimport { ACTION_STATUSES } from 'shared/consts';\nimport { AltBuildingsState } from './types';\n\nexport const initialState: AltBuildingsState = {\n altBuildings: null,\n getAltBuildings: {\n status: null,\n error: null,\n },\n currentAltBuilding: null,\n};\n\nconst getAltBuildingsRequestHandler = (state: AltBuildingsState): AltBuildingsState => ({\n ...state,\n getAltBuildings: {\n error: null,\n status: ACTION_STATUSES.PENDING,\n },\n});\n\nconst getAltBuildingsSuccessHandler = (\n state: AltBuildingsState,\n { payload }: ActionType,\n): AltBuildingsState => ({\n ...state,\n altBuildings: payload,\n getAltBuildings: {\n error: null,\n status: ACTION_STATUSES.FULFILLED,\n },\n});\n\nconst getAltBuildingsFailureHandler = (\n state: AltBuildingsState,\n { payload }: ActionType,\n): AltBuildingsState => ({\n ...state,\n getAltBuildings: {\n error: payload.error,\n status: ACTION_STATUSES.REJECTED,\n },\n});\n\nconst setCurrentAltBuildingHandler = (\n state: AltBuildingsState,\n { payload }: ActionType,\n): AltBuildingsState => ({\n ...state,\n currentAltBuilding: payload,\n});\n\nconst altBuildingsReducer = createReducer(initialState)\n .handleAction(altBuildingsActions.getAltBuildings.request, getAltBuildingsRequestHandler)\n .handleAction(altBuildingsActions.getAltBuildings.success, getAltBuildingsSuccessHandler)\n .handleAction(altBuildingsActions.getAltBuildings.failure, getAltBuildingsFailureHandler)\n .handleAction(altBuildingsActions.setCurrentAltBuilding, setCurrentAltBuildingHandler);\n\nexport default altBuildingsReducer;\n","import * as actions from './actions';\n\nimport { ActionType, createReducer } from 'typesafe-actions';\n\nimport { BuildingState } from 'store/building/types';\nimport { ACTION_STATUSES } from 'shared/consts';\n\nexport const INITIAL_STATE: BuildingState = {\n building: null,\n getBuilding: {\n status: null,\n error: null,\n },\n};\n\nconst getBuildingRequestHandler = (state: BuildingState): BuildingState => ({\n ...state,\n getBuilding: {\n error: null,\n status: ACTION_STATUSES.PENDING,\n },\n});\n\nconst getBuildingSuccessHandler = (\n state: BuildingState,\n { payload }: ActionType,\n): BuildingState => ({\n ...state,\n building: payload,\n getBuilding: {\n error: null,\n status: ACTION_STATUSES.FULFILLED,\n },\n});\n\nconst getBuildingFailureHandler = (\n state: BuildingState,\n { payload }: ActionType,\n): BuildingState => ({\n ...state,\n getBuilding: {\n error: payload,\n status: ACTION_STATUSES.REJECTED,\n },\n});\n\nconst BuildingReducer = createReducer(INITIAL_STATE)\n .handleAction(actions.getBuilding.request, getBuildingRequestHandler)\n .handleAction(actions.getBuilding.success, getBuildingSuccessHandler)\n .handleAction(actions.getBuilding.failure, getBuildingFailureHandler);\n\nexport default BuildingReducer;\n","import * as userActions from '../user/actions';\n\nimport { ConfigState } from './types';\nimport { combineReducers } from 'redux';\nimport { createReducer } from 'typesafe-actions';\nimport { getDefaultApiUrl } from 'store/config/get-default-url.util';\nimport { saveExternalConfig } from './actions';\n\nconst API_URL_LS_KEY = 'apiUrl';\nconst APP_BRAND_LS_KEY = 'appBrand';\nconst BUILDING_UUID_LS_KEY = 'buildingUuid';\nconst LOCALE_LS_KEY = 'locale';\n\nexport const initialState: ConfigState = {\n apiUrl: localStorage.getItem(API_URL_LS_KEY) ?? getDefaultApiUrl(),\n appBrand: localStorage.getItem(APP_BRAND_LS_KEY) ?? null,\n buildingUuid: localStorage.getItem(BUILDING_UUID_LS_KEY) ?? null,\n locale: localStorage.getItem(LOCALE_LS_KEY) ?? null,\n};\n\nconst apiUrlReducer = createReducer(initialState.apiUrl)\n .handleAction(userActions.externalLogin.request, (_state, action) => {\n const { apiUrl } = action.payload;\n\n if (apiUrl) {\n localStorage.setItem(API_URL_LS_KEY, apiUrl);\n } else {\n localStorage.removeItem(API_URL_LS_KEY);\n }\n\n return apiUrl ?? getDefaultApiUrl();\n })\n .handleAction(userActions.externalLogin.failure, () => {\n localStorage.removeItem(API_URL_LS_KEY);\n\n return getDefaultApiUrl();\n });\n\nconst getExternalConfigSaveReducer = (key: K, lsKey: string) => {\n return (state: ConfigState[K], action: ReturnType): ConfigState[K] => {\n const value: string | undefined | null = action.payload[key];\n\n if (value) {\n localStorage.setItem(lsKey, value);\n }\n\n return value ?? state;\n };\n};\n\nconst appBrandReducer = createReducer(initialState.appBrand).handleAction(\n saveExternalConfig,\n getExternalConfigSaveReducer('appBrand', APP_BRAND_LS_KEY),\n);\n\nconst buildingUuidReducer = createReducer(initialState.buildingUuid).handleAction(\n saveExternalConfig,\n getExternalConfigSaveReducer('buildingUuid', BUILDING_UUID_LS_KEY),\n);\n\nconst localeReducer = createReducer(initialState.locale).handleAction(\n saveExternalConfig,\n getExternalConfigSaveReducer('locale', LOCALE_LS_KEY),\n);\n\nexport default combineReducers({\n apiUrl: apiUrlReducer,\n appBrand: appBrandReducer,\n buildingUuid: buildingUuidReducer,\n locale: localeReducer,\n});\n","export const getDefaultApiUrl = (): string => process.env.REACT_APP_API_URL as string;\n","import {\n hideErrorNotifications,\n hideGenericErrorNotifications,\n showErrorNotification,\n showGenericErrorNotification,\n} from './actions';\n\nimport { ErrorsState } from './types';\nimport { combineReducers } from 'redux';\nimport { createReducer } from 'typesafe-actions';\nimport { v4 } from 'uuid';\n\nexport const initialState: ErrorsState = {\n genericErrors: [],\n errors: [],\n};\n\nconst errors = createReducer(initialState.errors)\n .handleAction(showErrorNotification, (state, action) => [...state, { uuid: v4(), ...action.payload }])\n .handleAction(hideErrorNotifications, () => []);\n\nconst genericErrors = createReducer(initialState.genericErrors)\n .handleAction(showGenericErrorNotification, (state, action) => [...state, { uuid: v4(), ...action.payload }])\n .handleAction(hideGenericErrorNotifications, () => []);\n\nexport default combineReducers({ errors, genericErrors });\n","import * as themeActions from './actions';\n\nimport { ActionType, createReducer } from 'typesafe-actions';\n\nimport { ThemeState } from './types';\n\nexport const initialState: ThemeState = {\n theme: null,\n loading: false,\n error: null,\n};\n\nconst getBuildingThemeRequestHandler = (state: ThemeState) => ({\n ...state,\n loading: true,\n});\n\nconst getBuildingThemeSuccessHandler = (\n state: ThemeState,\n { payload }: ActionType,\n): ThemeState => ({\n ...state,\n theme: payload,\n loading: false,\n error: null,\n});\n\nconst getBuildingThemeFailureHandler = (\n state: ThemeState,\n { payload: error }: ActionType,\n): ThemeState => ({\n ...state,\n loading: false,\n error: error.error,\n});\n\nconst themeReducer = createReducer(initialState)\n .handleAction(themeActions.getBuildingTheme.request, getBuildingThemeRequestHandler)\n .handleAction(themeActions.getBuildingTheme.success, getBuildingThemeSuccessHandler)\n .handleAction(themeActions.getBuildingTheme.failure, getBuildingThemeFailureHandler);\n\nexport default themeReducer;\n","import * as userActions from './actions';\n\nimport { UnauthorizedError } from 'store/user/errors';\nimport { UserState } from './types';\nimport { combineReducers } from 'redux';\nimport { createReducer } from 'typesafe-actions';\n\nconst AUTH_TOKEN_LS_KEY = 'authToken';\n\nexport const initialState: UserState = {\n user: null,\n loading: false,\n token: localStorage.getItem(AUTH_TOKEN_LS_KEY),\n error: null,\n};\n\nconst loading = createReducer(initialState.loading)\n .handleAction(userActions.externalLogin.request, () => true)\n .handleAction(userActions.externalLogin.success, () => false)\n .handleAction(userActions.externalLogin.failure, () => false)\n .handleAction(userActions.getCurrentUser.request, () => true)\n .handleAction(userActions.getCurrentUser.success, () => false)\n .handleAction(userActions.getCurrentUser.failure, () => false);\n\nconst user = createReducer(initialState.user)\n .handleAction(userActions.externalLogin.success, (_state, action) => action.payload.user)\n .handleAction(userActions.externalLogin.failure, () => null)\n .handleAction(userActions.getCurrentUser.success, (_state, action) => action.payload.user)\n .handleAction(userActions.getCurrentUser.failure, () => null);\n\nconst token = createReducer(initialState.token)\n .handleAction(userActions.externalLogin.success, (_state, action) => {\n const { token: authToken } = action.payload;\n localStorage.setItem(AUTH_TOKEN_LS_KEY, authToken);\n\n return authToken;\n })\n .handleAction(userActions.externalLogin.failure, () => {\n localStorage.removeItem(AUTH_TOKEN_LS_KEY);\n\n return null;\n })\n .handleAction(userActions.getCurrentUser.failure, (_state, action) => {\n if (action.payload instanceof UnauthorizedError) {\n localStorage.removeItem(AUTH_TOKEN_LS_KEY);\n }\n\n return null;\n });\n\nconst error = createReducer(initialState.error)\n .handleAction(userActions.externalLogin.request, () => null)\n .handleAction(userActions.externalLogin.success, () => null)\n .handleAction(userActions.externalLogin.failure, (_state, action) => action.payload.error)\n .handleAction(userActions.getCurrentUser.request, () => null)\n .handleAction(userActions.getCurrentUser.success, () => null)\n .handleAction(userActions.getCurrentUser.failure, (_state, action) => action.payload.error);\n\nexport default combineReducers({\n loading,\n user,\n token,\n error,\n});\n","import * as actions from './actions';\n\nimport { ActionType, createReducer } from 'typesafe-actions';\nimport { ACTION_STATUSES } from 'shared/consts';\n\nimport { WalletsState } from './types';\n\nexport const INITIAL_STATE: WalletsState = {\n wallets: [],\n getWallets: {\n status: null,\n error: null,\n },\n reloadUrl: null,\n};\n\nconst getWalletsRequestHandler = (state: WalletsState): WalletsState => ({\n ...state,\n getWallets: {\n status: ACTION_STATUSES.PENDING,\n error: null,\n },\n});\n\nconst getWalletsSuccessHandler = (\n state: WalletsState,\n { payload }: ActionType,\n): WalletsState => ({\n ...state,\n wallets: payload,\n getWallets: {\n status: ACTION_STATUSES.FULFILLED,\n error: null,\n },\n});\n\nconst getWalletsFailureHandler = (\n state: WalletsState,\n { payload: error }: ActionType,\n): WalletsState => ({\n ...state,\n getWallets: {\n status: ACTION_STATUSES.REJECTED,\n error,\n },\n});\n\nconst reloadWalletRequestHandler = (state: WalletsState): WalletsState => ({\n ...state,\n getWallets: {\n status: ACTION_STATUSES.PENDING,\n error: null,\n },\n});\n\nconst reloadWalletSuccessHandler = (\n state: WalletsState,\n { payload }: ActionType,\n): WalletsState => ({\n ...state,\n reloadUrl: payload.reload_url,\n getWallets: {\n status: ACTION_STATUSES.FULFILLED,\n error: null,\n },\n});\n\nconst reloadWalletFailureHandler = (\n state: WalletsState,\n { payload: error }: ActionType,\n): WalletsState => ({\n ...state,\n getWallets: {\n status: ACTION_STATUSES.REJECTED,\n error,\n },\n});\n\nconst WalletsReducer = createReducer(INITIAL_STATE)\n .handleAction(actions.getWallets.request, getWalletsRequestHandler)\n .handleAction(actions.getWallets.success, getWalletsSuccessHandler)\n .handleAction(actions.getWallets.failure, getWalletsFailureHandler)\n .handleAction(actions.reloadWallet.request, reloadWalletRequestHandler)\n .handleAction(actions.reloadWallet.success, reloadWalletSuccessHandler)\n .handleAction(actions.reloadWallet.failure, reloadWalletFailureHandler);\n\nexport default WalletsReducer;\n","import * as actions from './actions';\n\nimport { ActionType, createReducer } from 'typesafe-actions';\n\nimport { AuthState } from './types';\n\nexport const INITIAL_STATE: AuthState = {\n loading: false,\n error: null,\n};\n\nconst openAuthFlowRequestHandler = (state: AuthState) => ({\n ...state,\n loading: true,\n});\n\nconst openAuthFlowSuccessHandler = (state: AuthState): AuthState => ({\n ...state,\n loading: false,\n});\n\nconst openAuthFlowFailureHandler = (\n state: AuthState,\n { payload: error }: ActionType,\n): AuthState => ({\n ...state,\n loading: false,\n error: error.error,\n});\n\nconst AuthReducer = createReducer(INITIAL_STATE)\n .handleAction(actions.openAuthFlow.request, openAuthFlowRequestHandler)\n .handleAction(actions.openAuthFlow.success, openAuthFlowSuccessHandler)\n .handleAction(actions.openAuthFlow.failure, openAuthFlowFailureHandler);\n\nexport default AuthReducer;\n","import { StateType } from 'typesafe-actions';\nimport altBuildingsReducer from 'store/alt-buildings/reducer';\nimport BuildingReducer from 'store/building/reducer';\nimport { combineReducers } from 'redux';\nimport configReducer from 'store/config/reducer';\nimport errorsReducer from 'store/errors/reducer';\nimport themeReducer from 'store/theme/reducer';\nimport userReducer from 'store/user/reducer';\nimport WalletsReducer from 'store/wallets/reducer';\nimport AuthReducer from 'store/auth/reducer';\n\nconst rootReducer = combineReducers({\n config: configReducer,\n user: userReducer,\n theme: themeReducer,\n errors: errorsReducer,\n altBuildings: altBuildingsReducer,\n building: BuildingReducer,\n wallets: WalletsReducer,\n auth: AuthReducer,\n});\n\nexport type RootState = StateType;\n\nexport default rootReducer;\n","import { AjaxResponse, ajax } from 'rxjs/ajax';\n\nimport { AltBuilding } from 'store/alt-buildings/types';\nimport { BuildingResponse } from 'store/building/types';\nimport { BuildingTheme } from 'store/theme/types';\nimport { CurrentUserResponse } from 'store/user/types';\nimport { ReloadWalletAPIResponse, WalletsAPIResponse } from 'store/wallets/types';\nimport { AuthURLResponse } from 'store/auth/types';\nimport { OwnerTypesEnum, WALLET_TYPES, VERTICAL_NAMES } from 'shared/consts';\nimport { OwnerParams, ReloadParams } from 'shared/types';\nimport { UiMetadata } from 'store/ui-metadata/types';\nimport { stringify } from 'qs';\nimport { Observable } from 'rxjs';\nimport { ApiRequestHeaders, JSON_CONTENT_TYPE } from 'store/api-client/api-client.consts';\n\nexport class ApiClient {\n constructor(\n private baseUrl: string,\n private authToken?: string | null,\n private hqoBuildingUuid?: string | null,\n private altBuildingUuid?: string | null,\n ) {}\n\n private get DefaultHeaders(): Record {\n return {\n [ApiRequestHeaders.CONTENT_TYPE]: JSON_CONTENT_TYPE,\n ...(this.authToken ? { [ApiRequestHeaders.AUTHORIZATION]: this.authToken } : {}),\n ...(this.hqoBuildingUuid ? { [ApiRequestHeaders.HQO_BUILDING_UUID]: this.hqoBuildingUuid } : {}),\n ...(this.altBuildingUuid ? { [ApiRequestHeaders.ALT_BUILDING_UUID]: this.altBuildingUuid } : {}),\n };\n }\n\n getCurrentUser(): Observable> {\n return ajax.get(`${this.baseUrl}/api/auth/current`, this.DefaultHeaders);\n }\n\n getBuildingTheme(buildingUuid: string): Observable> {\n return ajax.get(`${this.baseUrl}/api/buildings/${buildingUuid}/theme`, this.DefaultHeaders);\n }\n\n getBuilding(buildingUuid: string): Observable> {\n return ajax.get(`${this.baseUrl}/api/tenant/v1/buildings/${buildingUuid}`, this.DefaultHeaders);\n }\n\n getAltBuildings(buildingUuid: string): Observable> {\n return ajax.get(`${this.baseUrl}/api/tenant/v1/buildings/alt_buildings/${buildingUuid}`, this.DefaultHeaders);\n }\n\n getWallets(buildingUuid: string, walletTypes: Array): Observable> {\n return ajax.get(\n `${this.baseUrl}/api/wallet/v1/wallets?${stringify(\n { building_uuid: buildingUuid, wallet_types: walletTypes },\n { arrayFormat: 'brackets' },\n )}`,\n this.DefaultHeaders,\n );\n }\n\n getAuthURL(helixAuthLink: string, ownerUuid: string): Observable> {\n const params = {\n owner_uuid: ownerUuid,\n owner_type: OwnerTypesEnum.BUILDING.toUpperCase(),\n redirect_url: window.location.origin,\n vertical: VERTICAL_NAMES.WALLET.toUpperCase(),\n };\n return ajax.post(`${this.baseUrl}${helixAuthLink}`, params, this.DefaultHeaders);\n }\n\n fetchUiMetadata({ ownerType, ownerId }: OwnerParams): Observable> {\n return ajax.get(\n `${\n this.baseUrl\n }/api/verticals/${VERTICAL_NAMES.WALLET.toUpperCase()}/${ownerType.toUpperCase()}/${ownerId}/ui-metadata`,\n this.DefaultHeaders,\n );\n }\n\n reloadWallet({\n amount,\n buildingUuid,\n returnUri,\n walletType,\n }: ReloadParams): Observable> {\n return ajax.post(\n `${this.baseUrl}/api/wallet/v1/wallets/${walletType}/${buildingUuid}/reload-url`,\n {\n amount,\n return_uri: returnUri,\n },\n this.DefaultHeaders,\n );\n }\n}\n","import { apiClient } from './api-client';\n\nexport const rootDependencies = {\n apiClient,\n};\nexport type RootDependencies = typeof rootDependencies;\n","import { AltBuildingsState } from '../alt-buildings/types';\nimport { ApiClient } from './api-client';\nimport { ConfigState } from 'store/config/types';\nimport { UserState } from 'store/user/types';\n\ninterface ApiClientState {\n user: Pick;\n config: ConfigState;\n altBuildings?: Pick;\n}\n\nexport const apiClient = (\n state: ApiClientState,\n baseUrlOverride?: string | null,\n authTokenOverride?: string | null,\n altBuildingUuidOverride?: string | null,\n): ApiClient => {\n const baseUrl = baseUrlOverride ?? state.config.apiUrl;\n const authToken = authTokenOverride ?? state.user.token;\n const { buildingUuid } = state.config;\n const altBuildingUuid = altBuildingUuidOverride ?? state.altBuildings?.currentAltBuilding?.alt_building_uuid;\n\n return new ApiClient(baseUrl, authToken, buildingUuid, altBuildingUuid);\n};\n","import { applyMiddleware, createStore } from 'redux';\nimport { createEpicMiddleware } from 'redux-observable';\nimport { StateType } from 'typesafe-actions';\nimport { RootAction } from 'store/actions';\nimport { composeEnhancers } from 'store/utils';\nimport rootEpic from './epics';\nimport rootReducer, { RootState } from './reducer';\nimport { rootDependencies, RootDependencies } from 'store/dependencies';\n\nexport const epicMiddleware = createEpicMiddleware({\n dependencies: rootDependencies,\n});\nconst enhancer = composeEnhancers(applyMiddleware(epicMiddleware));\nconst initialState = {};\nconst store = createStore(rootReducer, initialState, enhancer);\n\nepicMiddleware.run(rootEpic);\n\nexport type Store = StateType;\nexport default store;\n","import { AppThemeProvider, defaultTheme } from '@hqo/react-components-library/dist/molecules/theme';\n\nimport { App } from 'components/app';\n// https://reactrouter.com/docs/en/v6/api#unstable_historyrouter\n// This API is currently prefixed as unstable_ because you may unintentionally add two versions of the history\n// library to your app, the one you have added to your package.json and whatever version React Router uses internally.\nimport { unstable_HistoryRouter as Router } from 'react-router-dom';\nimport { HqoThemeProvider } from '@hqo/react-components-library/dist/hqo-theme-provider';\nimport { IntlProvider } from 'components/intl-provider';\nimport React from 'react';\nimport { Provider as ReduxProvider } from 'react-redux';\nimport { history } from 'store/router/history';\nimport { store } from 'store';\nimport { faAddressCard, faExclamationCircle } from '@fortawesome/pro-light-svg-icons';\nimport { library } from '@fortawesome/fontawesome-svg-core';\n\nlibrary.add(faAddressCard, faExclamationCircle);\n\nexport const Root: React.FC = (): JSX.Element => (\n \n \n \n \n \n \n \n \n \n \n \n);\n","import { ReportHandler } from 'web-vitals';\n\nconst reportWebVitals = (onPerfEntry?: ReportHandler): void => {\n if (onPerfEntry && onPerfEntry instanceof Function) {\n import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {\n getCLS(onPerfEntry);\n getFID(onPerfEntry);\n getFCP(onPerfEntry);\n getLCP(onPerfEntry);\n getTTFB(onPerfEntry);\n });\n }\n};\n\nexport default reportWebVitals;\n","import './index.css';\n\nimport React from 'react';\nimport ReactDOM from 'react-dom';\nimport { Root } from 'components/root';\nimport reportWebVitals from './reportWebVitals';\n\nimport { withLDProvider } from 'launchdarkly-react-client-sdk';\n\nconst LDProvider = withLDProvider({\n clientSideID: process.env.REACT_APP_TENANT_LAUNCH_DARKLY_CLIENT_ID,\n user: {\n anonymous: true,\n },\n})(Root);\n\nReactDOM.render(\n \n \n ,\n document.getElementById('root'),\n);\n\n// If you want to start measuring performance in your app, pass a function\n// to log results (for example: reportWebVitals(console.log))\n// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals\nreportWebVitals();\n"],"sourceRoot":""}