>,\n RestAxiosError\n >({\n queryKey: [EAccountRouteKeys.ACCOUNT_REGISTER, UserTypes.Company],\n queryFn: () => registerCompany(form.getFieldsValue(true)),\n enabled: false,\n retry: false\n });\n\n const { fireEvent } = useEventbus(\n {\n onEvent: ({ key, id }) => {\n if (id !== eventId) return;\n switch (key) {\n case StepViewerEvents.InitiateNextViewRender:\n form\n .validateFields()\n .then(() => {\n refetch();\n })\n .catch(() => {});\n break;\n }\n }\n },\n [form]\n );\n\n const handleBankAccountChange = (e: { target: { value: string } }) => {\n const inputValue = e.target.value;\n const onlyNumbers = inputValue.replace(/\\D/g, '');\n const formattedValue = onlyNumbers.slice(0, 16);\n form.setFieldValue(AccountFormFields.BankAccount, formattedValue);\n };\n\n const returnFormFields = (field: IFormField | IFormField[]) => {\n if (Array.isArray(field)) {\n return (\n \n {field.map(f => returnFormFields(f))}\n \n );\n }\n switch (field.name) {\n case AccountFormFields.ContactPhone:\n return (\n \n {field.label}\n {field.tooltip && {field.tooltip}}\n >\n }\n name={field.name}\n rules={field.rules}\n >\n \n \n );\n case AccountFormFields.BankAccount:\n return (\n \n {field.label}\n {field.tooltip && {field.tooltip}}\n >\n }\n name={field.name}\n rules={field.rules}\n isWhitespaceForbidden\n >\n \n \n );\n case AccountFormFields.CeoCountry:\n return (\n \n {field.label}\n {field.tooltip && {field.tooltip}}\n >\n }\n name={field.name}\n rules={field.rules}\n >\n \n {COUNTRIES.map(country => (\n \n ))}\n \n \n );\n default:\n return (\n \n {field.label}\n {field.tooltip && {field.tooltip}}\n >\n }\n name={field.name}\n rules={field.rules}\n /*\n * Exclude contact email as the whitespace condition is already\n * handled for it. This is to avoid showing two type of error for\n * contact email\n */\n isWhitespaceForbidden={\n field.name !== AccountFormFields.ContactEmail\n }\n >\n \n \n );\n }\n };\n\n const formFields = useReturnFormFields(form, [\n AccountFormFields.BankAccount,\n AccountFormFields.ContactName,\n AccountFormFields.ContactEmail,\n AccountFormFields.ContactPhone,\n AccountFormFields.RegisterGoal\n ]);\n\n const endingFormFields = useReturnFormFields(form, [\n AccountFormFields.CeoAddress,\n AccountFormFields.CeoCity,\n [AccountFormFields.CeoState, AccountFormFields.CeoPostCode],\n AccountFormFields.CeoCountry\n ]);\n\n const mediaFields: IRegisterCompanyMediaParams[] = [\n {\n title: t('account.companyMediaTitleOne'),\n type: 'application/pdf',\n description: t('generic.uploadDocumentRestrictionsDescription', {\n formats: 'pdf',\n maxFileSize: '30'\n }),\n rules: [\n {\n required: true,\n message: `${t('account.companyMediaTitleOneRequired')}`\n }\n ]\n },\n {\n title: t('account.companyMediaTitleTwo'),\n type: 'application/pdf,application/vnd.openxmlformats-officedocument.wordprocessingml.document',\n description: t('generic.uploadDocumentRestrictionsDescription', {\n formats: 'pdf, doc',\n maxFileSize: '30'\n }),\n rules: []\n },\n {\n title: t('account.companyMediaTitleThree'),\n type: 'application/pdf',\n description: t('generic.uploadDocumentRestrictionsDescription', {\n formats: 'pdf',\n maxFileSize: '30'\n }),\n rules: []\n },\n {\n title: t('account.companyMediaTitleFour'),\n type: 'application/pdf,image/jpg,image/jpeg,image/png',\n description: t('generic.uploadDocumentRestrictionsDescription', {\n formats: 'pdf, jpg, png',\n maxFileSize: '30'\n }),\n rules: [\n {\n required: true,\n message: `${t('account.companyMediaTitleFourRequired')}`\n }\n ]\n }\n ];\n\n useEffect(() => {\n fireEvent({\n key: isFetching\n ? StepViewerEvents.SetNextLoading\n : StepViewerEvents.UnsetNextLoading,\n id: eventId\n });\n }, [isFetching]);\n\n useEffect(() => {\n if (data) {\n dispatch(fetchCompanySuccess(data.data.data));\n fireEvent({\n key: StepViewerEvents.RenderNextView,\n id: eventId\n });\n }\n }, [data, eventId]);\n\n useEffect(() => {\n if (error) {\n message.error(error.response?.data.message);\n }\n }, [error]);\n\n return (\n \n \n \n );\n};\n","import styled from 'styled-components';\nimport { Button as ButtonComponent } from 'components/Button';\n\nexport const Wrapper = styled.div`\n position: absolute;\n top: 0;\n left: 0;\n border-radius: 24px;\n border: 1px solid var(--v3-black-2);\n background: var(--v3-black-0);\n z-index: 50;\n display: flex;\n width: 100%;\n height: 100%;\n padding: 32px;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n gap: 32px;\n flex-shrink: 0;\n`;\n\nexport const TextIconWrapper = styled.div`\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 20px;\n img {\n margin: 0 auto;\n width: 100px;\n }\n`;\n\nexport const TextWrapper = styled.div`\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 12px;\n`;\n\nexport const TextHeading = styled.div`\n display: flex;\n width: 364px;\n flex-direction: column;\n color: var(--v3-text-color);\n text-align: center;\n font-size: 2rem;\n font-weight: 700;\n line-height: 36px;\n letter-spacing: -0.32px;\n`;\n\nexport const TextDescription = styled.div`\n color: var(--v3-black-45);\n text-align: center;\n font-size: 16px;\n line-height: 24px;\n letter-spacing: -0.16px;\n`;\n\nexport const Button = styled(ButtonComponent)`\n &&& {\n font-weight: 500;\n font-size: 18px;\n line-height: 24px;\n padding: 0 24px;\n margin: 12px 0;\n display: flex;\n justify-content: center;\n }\n`;\n","import { useTranslation } from 'react-i18next';\nimport { Image } from 'antd';\nimport * as Styled from './styles';\nimport { getPath } from 'utils';\nimport registrationSuccess from 'assets/images/Reward.png';\n\nexport const RegisterCompanyStepThree = () => {\n const { t } = useTranslation();\n\n return (\n <>\n \n \n \n \n \n \n {t('account.thankYouForTheSubmission')}\n \n \n {t('account.weWillGetBackAfterReviewingSubmission')}\n \n \n (window.location.href = getPath('/'))}\n >\n {t('account.goHome')}\n \n \n \n >\n );\n};\n","import styled from 'styled-components';\nimport { Spin as AntSpin } from 'components/UI/Spin';\n\nexport const Spin = styled(AntSpin)`\n height: 52px;\n display: inline-flex !important;\n align-items: center;\n`;\n","import * as Styled from './styles';\n\nexport const RegisterSpinner = () => {\n return ;\n};\n","import { Fragment, useEffect, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useRegisterValues } from 'elements/Account/providers/RegisterProvider';\nimport { InfoBlock } from 'components/Shared/InfoBlock';\nimport { Tooltip } from 'components/Shared/Tooltip';\nimport { Form, FormItem } from 'components/UI/Form';\nimport { Input } from 'components/UI/Input';\nimport { useReturnFormFields } from '../../../hooks/useReturnFormFields';\nimport { RegisterSpinner } from '../RegisterSpinner';\nimport { useAppSelector } from 'appRedux/hooks';\nimport { AccountFormFields } from 'constants/account/account-form-fields';\n\nexport const RegisterCompanyPhaseTwo = () => {\n const { form } = useRegisterValues();\n const { t } = useTranslation();\n const formFields = useReturnFormFields(form, [\n AccountFormFields.Password,\n AccountFormFields.PasswordConfirmation,\n AccountFormFields.UserName\n ]);\n const { loading: companyLoading, data: companyData } = useAppSelector(\n ({ company }) => company\n );\n const [isCompanyDataPresent, setIsCompanyDataPresent] = useState(false);\n\n useEffect(() => {\n if (Object.keys(companyData).length > 0) {\n setIsCompanyDataPresent(true);\n form.setFieldsValue({\n terms_and_conditions: true,\n email: companyData.contact_email\n });\n }\n }, [companyData]);\n\n return companyLoading ? (\n \n ) : isCompanyDataPresent ? (\n \n ) : (\n \n );\n};\n","import { Fragment } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Checkbox } from 'antd';\nimport 'react-phone-input-2/lib/style.css';\nimport { useReturnFormFields } from '../../../../hooks/useReturnFormFields';\nimport { useRegisterValues } from '../../../../providers/RegisterProvider';\nimport { Tooltip } from 'components/Shared/Tooltip';\nimport { Form, FormItem } from 'components/UI/Form';\nimport { Input } from 'components/UI/Input';\nimport { useEventbus } from 'hooks/useEventbus';\nimport * as StyledShared from '../../styles';\nimport { useAppDispatch } from 'appRedux/hooks';\nimport { getCreatorsList } from 'appRedux/restApi';\nimport { AccountFormFields } from 'constants/account/account-form-fields';\nimport { IS_KIOSK_AM_MODE } from 'constants/app/configs';\nimport { StepViewerEvents } from 'constants/app/eventbus-events';\nimport { IFormField } from 'interfaces';\n\nconst returnFormFields = (field: IFormField) => {\n switch (field.name) {\n case AccountFormFields.Phone:\n return (\n \n \n \n );\n case AccountFormFields.Password:\n case AccountFormFields.PasswordConfirmation:\n return (\n \n \n \n );\n case AccountFormFields.TermsAndConditions:\n return (\n \n \n \n \n \n );\n case AccountFormFields.PromotionalEmails:\n return (\n \n \n \n \n \n );\n\n default:\n return (\n \n {field.label}\n {field.tooltip && {field.tooltip}}\n >\n }\n name={field.name}\n rules={field.rules}\n /*\n * Exclusion of UserName is needed as the field already has a pattern\n * which covers the white space scenario. Exclusion of Email is needed\n * as email already handles isWhitespaceForbidden scenario.\n */\n isWhitespaceForbidden={\n field.name !== AccountFormFields.UserName &&\n field.name !== AccountFormFields.Email\n }\n >\n \n \n );\n }\n};\n\nexport const RegisterCreatorStepTwo = () => {\n const { form, eventId } = useRegisterValues();\n const { t } = useTranslation();\n const dispatch = useAppDispatch();\n const { fireEvent } = useEventbus(\n {\n onEvent: ({ key, id }) => {\n if (id !== eventId) return;\n switch (key) {\n case StepViewerEvents.InitiateNextViewRender:\n form\n .validateFields()\n .then(() => {\n const requestParams = {\n user_name: form.getFieldValue(AccountFormFields.UserName)\n };\n dispatch(getCreatorsList(requestParams))\n .then(data => {\n if (data?.payload?.data?.length > 0) {\n form.setFields([\n {\n name: AccountFormFields.UserName,\n errors: [t('account.userNameAlreadyTaken')]\n }\n ]);\n } else {\n fireEvent({\n key: StepViewerEvents.RenderNextView,\n id: eventId\n });\n }\n })\n .catch(() => {});\n })\n .catch(() => {});\n break;\n }\n }\n },\n [form]\n );\n\n const formFields = useReturnFormFields(form, [\n AccountFormFields.UserName,\n AccountFormFields.Email,\n AccountFormFields.Phone,\n AccountFormFields.Occupation,\n AccountFormFields.Password,\n AccountFormFields.PasswordConfirmation,\n AccountFormFields.TermsAndConditions,\n AccountFormFields.PromotionalEmails\n ]);\n\n return (\n \n \n \n );\n};\n","import styled from 'styled-components';\n\nexport const RegisterCreatorStepThreeWrapper = styled.div`\n display: flex;\n flex-direction: column;\n gap: 36px;\n`;\n","import { useTranslation } from 'react-i18next';\nimport { Checkbox } from 'antd';\nimport { useRegisterValues } from '../../../../providers/RegisterProvider';\nimport { AttentionHint } from 'components/UI/AttentionHint';\nimport { Form, FormItem } from 'components/UI/Form';\nimport { Input } from 'components/UI/Input';\nimport * as Styled from './styles';\nimport * as StyledShared from '../../styles';\nimport { Pattern } from 'constants/validation';\n\nexport const RegisterCreatorStepThree = () => {\n const { form } = useRegisterValues();\n\n const { t } = useTranslation();\n\n return (\n \n \n \n \n );\n};\n","import styled, { css } from 'styled-components';\n\nexport const UserCardWrapper = styled.div<{ $isActive?: boolean }>`\n &&& {\n .ant-card {\n box-sizing: border-box;\n display: flex;\n align-items: center;\n padding: 20px;\n gap: 8px;\n background: var(--v3-black-0);\n border-radius: 16px;\n flex: none;\n order: 0;\n align-self: stretch;\n flex-grow: 0;\n margin-bottom: 16px;\n cursor: pointer;\n border: 1px solid var(--v3-black-2);\n\n ${props =>\n props.$isActive &&\n css`\n border: 1px solid var(--v3-primary-color);\n `}\n .ant-card-body {\n padding: 0;\n }\n\n .ant-card-meta {\n align-items: center;\n }\n\n .ant-card-meta-avatar {\n width: 72px;\n height: 72px;\n padding: 0;\n margin-right: 12px;\n\n & > img {\n width: 100%;\n height: 100%;\n }\n }\n\n .ant-card-meta-title {\n font-weight: 800;\n font-size: 20px;\n line-height: 24px;\n letter-spacing: -0.01em;\n color: var(--v3-black);\n flex: none;\n order: 0;\n flex-grow: 0;\n margin-bottom: 4px;\n white-space: break-spaces;\n }\n\n .ant-card-meta-description {\n font-weight: 400;\n font-size: 16px;\n line-height: 24px;\n letter-spacing: -0.01em;\n color: var(--v3-black-45);\n flex: none;\n order: 1;\n align-self: stretch;\n flex-grow: 0;\n }\n\n .ant-card-meta-detail {\n display: flex;\n flex-direction: column;\n justify-content: center;\n }\n }\n }\n`;\n","import { Fragment, useEffect } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Card } from 'antd';\nimport { useRegisterValues } from 'elements/Account/providers/RegisterProvider';\nimport { useFireEvent } from 'hooks/useFireEvent';\nimport * as Styled from './styles';\nimport { UserTypes } from 'constants/account/user-types';\nimport { StepViewerEvents } from 'constants/app/eventbus-events';\nimport BriefCase from 'assets/images/briefcase.png';\nimport Layers from 'assets/images/layers.png';\nimport Roller from 'assets/images/roller.png';\n\nconst { Meta } = Card;\n\nconst REGISTRATION_OPTIONS = [\n {\n id: 1,\n type: UserTypes.Collector,\n label: 'account.userType',\n description: 'account.registerCollectorDescription',\n image: Layers\n },\n {\n id: 2,\n type: UserTypes.Creator,\n label: 'account.creatorType',\n description: 'account.registerCreatorDescription',\n image: Roller\n },\n {\n id: 3,\n type: UserTypes.Company,\n label: 'account.companyType',\n description: 'account.registerCompanyDescription',\n image: BriefCase\n }\n];\n\nexport const RegisterFirstStep = () => {\n const { t } = useTranslation();\n const { selectedUserType, setSelectedUserType, eventId } =\n useRegisterValues();\n const { fireEvent } = useFireEvent();\n const handleClick = (id: number) => {\n setSelectedUserType(id);\n };\n\n useEffect(() => {\n fireEvent({\n key: selectedUserType\n ? StepViewerEvents.EnableProceeding\n : StepViewerEvents.DisableProceeding,\n id: eventId\n });\n }, [selectedUserType]);\n\n return (\n \n {REGISTRATION_OPTIONS.map(option => (\n \n \n handleClick(option.id)}>\n }\n title={t(option.label)}\n description={t(option.description)}\n />\n \n \n \n ))}\n
\n );\n};\n","import styled from 'styled-components';\n\nexport const ResendHint = styled.div`\n display: flex;\n gap: 8px;\n margin: 0 auto 16px;\n`;\n\nexport const Counter = styled.div`\n color: var(--v3-text-color);\n text-align: center;\n font-size: 15px;\n font-style: normal;\n font-weight: 500;\n line-height: 20px;\n letter-spacing: -0.3px;\n`;\n","import { FC, useCallback, useEffect, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useQuery } from '@tanstack/react-query';\nimport { message } from 'antd';\nimport { useCountdown } from 'usehooks-ts';\nimport { ConfirmModal } from 'components/Shared/ConfirmModal';\nimport { Spin } from 'components/UI/Spin';\nimport * as Styled from './styles';\nimport { resendVerificationEmail } from 'appRedux/restApi';\nimport { getPath } from 'utils';\nimport { ReactQueryKeys } from 'constants/app/react-query-keys';\nimport BellImage from 'assets/images/bell.png';\nimport { RestAxiosError } from 'interfaces';\n\ntype CheckEmailModalProps = {\n checkEmailModalVisible: boolean;\n email: string;\n resendOnMount?: boolean;\n};\n\nconst COUNT_START = 30;\nconst INTERVAL = 1000;\n\nexport const CheckEmailModal: FC = ({\n checkEmailModalVisible,\n email,\n resendOnMount = false\n}) => {\n const { t } = useTranslation();\n const [count, { startCountdown, resetCountdown }] = useCountdown({\n countStart: COUNT_START,\n intervalMs: INTERVAL\n });\n const [goToHomeButtonLoading, setGoToHomeButtonLoading] = useState(false);\n const {\n refetch,\n isRefetching: resendButtonLoading,\n data,\n error\n } = useQuery<\n Awaited>,\n RestAxiosError\n >({\n queryKey: [ReactQueryKeys.RESEND_EMAIL, email],\n queryFn: () => resendVerificationEmail(email),\n enabled: false,\n retry: false\n });\n\n const transitionToHome = useCallback(() => {\n setGoToHomeButtonLoading(true);\n window.location.href = getPath('/');\n }, []);\n\n const resendEmail = useCallback(() => {\n refetch();\n }, [email]);\n\n useEffect(() => {\n resetCountdown();\n startCountdown();\n }, [data]);\n\n useEffect(() => {\n if (checkEmailModalVisible && resendOnMount) {\n resendEmail();\n }\n }, [resendOnMount, checkEmailModalVisible]);\n\n useEffect(() => {\n if (error) {\n message.error(error.response?.data.message);\n }\n }, [error]);\n\n return (\n {}}\n cancelWithButton\n visible={checkEmailModalVisible}\n onSubmit={transitionToHome}\n loading={{\n submit: goToHomeButtonLoading,\n cancel: resendButtonLoading\n }}\n disabled={{\n cancel: !!count\n }}\n closable={false}\n >\n {!!count && (\n \n \n \n \n )}\n \n );\n};\n","import { FC } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { InfoBlock } from 'components/Shared/InfoBlock';\nimport { StepViewer } from 'components/Shared/StepViewer';\nimport { Spin } from 'components/UI/Spin';\nimport { useHistory } from 'hooks/generic/useHistory';\nimport { isMobile } from 'utils';\nimport { EAccountRouteKeys } from 'constants/account/account-route-keys';\n\ntype InfoBlockLoggedInProps = {\n className?: string;\n loading?: boolean;\n};\n\nexport const InfoBlockLoggedIn: FC = ({\n className,\n loading\n}) => {\n const { t } = useTranslation();\n const { push } = useHistory();\n\n const handleOpenAccount = () => {\n push(EAccountRouteKeys.ACCOUNT_PROFILE_INFO);\n };\n\n return (\n (\n <>\n {loading && }\n \n >\n )\n }\n ]}\n />\n );\n};\n","import { useEffect, useId, useMemo, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useQuery } from '@tanstack/react-query';\nimport { message } from 'antd';\nimport { ConfirmModal } from 'components/Shared/ConfirmModal';\nimport { StepProps, StepViewer } from 'components/Shared/StepViewer';\nimport { useForm, useWatch } from 'components/UI/Form';\nimport { useOpenAccountAuth } from 'hooks/account/useOpenAccountAuth';\nimport { useHistory } from 'hooks/generic/useHistory';\nimport { useFireEvent } from 'hooks/useFireEvent';\nimport { useIsLoggedIn } from 'hooks/user/useIsLoggedIn';\nimport { useSearchParams } from 'hooks/useSearchParams';\nimport { RegisterCollectorStepTwo } from './RegisterCollector';\nimport {\n RegisterCompanyStepThree,\n RegisterCompanyStepTwo\n} from './RegisterCompany';\nimport { RegisterCompanyPhaseTwo } from './RegisterCompanyPhaseTwo';\nimport {\n RegisterCreatorStepThree,\n RegisterCreatorStepTwo\n} from './RegisterCreator';\nimport { RegisterFirstStep } from './RegisterFirstStep';\nimport { RegisterProvider } from '../../providers/RegisterProvider';\nimport { CheckEmailModal } from '../components/CheckEmailModal';\nimport { InfoBlockLoggedIn } from '../components/InfoBlockLoggedIn';\nimport { useAppDispatch } from 'appRedux/hooks';\nimport {\n getCompanyToken,\n registerUser as registerUserRequest\n} from 'appRedux/restApi';\nimport { isMobile } from 'utils';\nimport { getCurrentLanguage } from 'utils/app/get-lang';\nimport { addQuery } from 'utils/generic/query-route';\nimport { EAccountRouteKeys } from 'constants/account/account-route-keys';\nimport { StepViewerEvents } from 'constants/app/eventbus-events';\nimport Success from 'assets/images/success-rocket.png';\nimport { AccountType, RestAxiosError } from 'interfaces';\nimport { IRegisterProps } from 'interfaces/Auth';\n\nexport const Register = () => {\n const registerId = useId();\n const searchParams = useSearchParams();\n const { isLoggedIn, isLoginPending } = useIsLoggedIn();\n const { openAccountLogin } = useOpenAccountAuth();\n const [searchValue, setSearchValue] = useState(searchParams['token']);\n const [selectedUserType, setSelectedUserType] = useState(0);\n const [checkEmailModalVisible, setCheckEmailModalVisible] = useState(false);\n const [companySuccessModalVisible, setCompanySuccessModalVisible] =\n useState(false);\n const { t } = useTranslation();\n const { history } = useHistory();\n const dispatch = useAppDispatch();\n const { fireEvent } = useFireEvent();\n const [form] = useForm();\n const email = useWatch('email', { form, preserve: true });\n const registerUserParams = (\n inputParams: Partial\n ): ReturnType => {\n let _inputParams = { first_name: '', last_name: '', ...inputParams }; // first_name and last_name are required for backend\n switch (selectedUserType) {\n case 1:\n _inputParams.account_type = AccountType.User;\n break;\n case 2:\n _inputParams.account_type = AccountType.Creator;\n break;\n default:\n // For create company\n _inputParams = {\n ..._inputParams,\n account_type: AccountType.Company,\n token: searchValue\n };\n break;\n }\n _inputParams.locale = getCurrentLanguage();\n return registerUserRequest(_inputParams);\n };\n\n const { refetch, error, isFetching, data } = useQuery<\n Awaited>,\n RestAxiosError\n >({\n queryKey: [EAccountRouteKeys.ACCOUNT_REGISTER, selectedUserType],\n queryFn: () => registerUserParams(form.getFieldsValue(true)),\n enabled: false,\n retry: false\n });\n\n const onSubmitRegister = () => {\n form\n .validateFields()\n .then(() => void refetch())\n .catch(({ errorFields }) => {\n const firstErrorField = errorFields[0].name[0];\n form.scrollToField(firstErrorField, {\n behavior: 'smooth',\n scrollMode: 'if-needed',\n block: 'center'\n });\n });\n };\n\n useEffect(() => {\n if (data) {\n if (selectedUserType === 3) {\n return;\n }\n if (selectedUserType === 0) {\n setCompanySuccessModalVisible(true);\n } else {\n setCheckEmailModalVisible(true);\n }\n }\n }, [data, selectedUserType]);\n\n useEffect(() => {\n if (error) {\n message.error(error?.response?.data.message);\n }\n }, [error]);\n\n useEffect(() => {\n fireEvent({\n key: isFetching\n ? StepViewerEvents.SetNextLoading\n : StepViewerEvents.UnsetNextLoading,\n id: registerId\n });\n }, [registerId, isFetching]);\n\n // TODO: refactor this\n useEffect(() => {\n if (searchParams['token'] && searchParams['token'].length > 0) {\n // If token is present in url then\n history.push(addQuery({ token: undefined }));\n dispatch(getCompanyToken({ token: searchParams['token'] }));\n setSearchValue(searchParams['token']);\n }\n return () => {\n setSearchValue('');\n };\n }, []);\n\n const companySteps = useMemo(() => {\n const _steps: StepProps[] = [\n {\n title: {\n text: t('account.createCompanyAccount'),\n shortText: ''\n },\n subtitle: t('account.fillCompanyInformation'),\n component: RegisterCompanyPhaseTwo,\n info: {\n show: !isMobile()\n },\n nextBtnText: t('account.submit'),\n loaderSize: 'large' as StepProps['loaderSize']\n }\n ];\n return _steps;\n }, []);\n\n const steps = useMemo(() => {\n const _steps: StepProps[] = [\n {\n title: {\n text: t('account.chooseYourUserType'),\n shortText: ''\n },\n subtitle: t('account.registerDescription'),\n component: RegisterFirstStep,\n info: {\n show: !isMobile(),\n text: selectedUserType ? undefined : ''\n },\n loaderSize: 'large' as StepProps['loaderSize']\n }\n ];\n switch (selectedUserType) {\n case 1:\n _steps.push({\n title: {\n text: t('account.registerAsCollector'),\n shortText: ''\n },\n subtitle: t('account.fillUserInformationAndMoveForward'),\n component: RegisterCollectorStepTwo,\n info: {\n show: !isMobile()\n },\n loaderSize: 'large' as StepProps['loaderSize'],\n handleToNextStepItself: true\n });\n break;\n case 2:\n _steps.push({\n title: {\n text: t('account.registerAsCreator'),\n shortText: ''\n },\n subtitle: t('account.fillUserGeneralInformation'),\n component: RegisterCreatorStepTwo,\n info: {\n show: !isMobile()\n },\n loaderSize: 'large' as StepProps['loaderSize'],\n handleToNextStepItself: true\n });\n _steps.push({\n title: {\n text: t('account.registerAsCreator'),\n shortText: ''\n },\n subtitle: t('account.fillUserPayoutInformation'),\n component: RegisterCreatorStepThree,\n info: {\n show: !isMobile()\n },\n loaderSize: 'large' as StepProps['loaderSize']\n });\n break;\n case 3:\n _steps.push({\n title: {\n text: t('account.registerAsCompany'),\n shortText: ''\n },\n subtitle: t('account.fillCompanyInformationAndMoveForward'),\n component: RegisterCompanyStepTwo,\n info: {\n show: !isMobile()\n },\n loaderSize: 'large' as StepProps['loaderSize'],\n handleToNextStepItself: true\n });\n _steps.push({\n title: {\n text: '',\n shortText: ''\n },\n subtitle: '',\n component: RegisterCompanyStepThree,\n info: {\n show: !isMobile()\n },\n loaderSize: 'large' as StepProps['loaderSize']\n });\n break;\n default:\n break;\n }\n return _steps;\n }, [selectedUserType]);\n\n const openLoginModal = () => {\n setCompanySuccessModalVisible(false);\n openAccountLogin();\n };\n\n if (isLoggedIn || isLoginPending) {\n return ;\n }\n\n return (\n \n \n {/* TODO: outside click checker works wrong in Modal component */}\n \n setCompanySuccessModalVisible(false)}\n onSubmit={openLoginModal}\n confirmText={t('account.login')}\n />\n \n );\n};\n","import { createContext, ReactElement, ReactNode, useContext } from 'react';\nimport { FormInstance } from 'antd';\n\ntype RegisterCompleteProviderProps = {\n children: ReactNode;\n value: {\n form: FormInstance;\n email?: string;\n eventId: string;\n };\n};\n\nconst RegisterCompleteContext = createContext<\n RegisterCompleteProviderProps['value']\n>({\n form: {} as FormInstance,\n email: undefined,\n eventId: ''\n});\n\nexport const RegisterCompleteProvider = (\n props: RegisterCompleteProviderProps\n): ReactElement => {\n return (\n \n {props.children}\n \n );\n};\n\nexport const useRegisterCompleteValues =\n (): RegisterCompleteProviderProps['value'] => {\n return useContext(RegisterCompleteContext);\n };\n","import PhoneInput from 'react-phone-input-2';\nimport styled, { css } from 'styled-components';\n\nexport const PhoneNumberInput = styled(PhoneInput)`\n .country-list {\n border-radius: 3px 3px 0px 0px !important;\n :not(.bottom) {\n bottom: 45px;\n }\n }\n`;\n\nexport const Wrapper = styled.div`\n .ant-input,\n .ant-select .ant-select-selector {\n height: auto;\n }\n && {\n .phone-input-container {\n &.react-tel-input .form-control {\n &:hover,\n &:focus {\n border-color: var(--v3-primary-color);\n box-shadow: none;\n }\n }\n .flag-dropdown {\n margin: 1px;\n border-radius: 10px 0 0 10px;\n border-color: var(--v3-black-2);\n background-color: transparent;\n .selected-flag {\n border-radius: 10px 0 0 10px;\n border-color: var(--v3-black-2);\n background-color: var(--v3-black-0);\n }\n .country-list {\n background-color: var(--v3-black-0);\n .country.highlight {\n background-color: var(--v3-black-2);\n }\n .country {\n &:hover,\n &:focus {\n background-color: var(--v3-black-1);\n }\n }\n }\n }\n }\n }\n`;\n\nexport const Label = styled.h3<{ $required?: boolean }>`\n margin: 0;\n color: var(--v3-text-color);\n font-size: 15px;\n font-style: normal;\n font-weight: 500;\n line-height: 20px;\n letter-spacing: -0.3px;\n\n & a {\n color: var(--v3-primary-color);\n }\n\n ${({ $required }) =>\n $required &&\n css`\n &::after {\n content: '*';\n position: relative;\n top: -3px;\n color: var(--v3-error-color);\n font-size: 14px;\n font-family: SimSun, sans-serif;\n }\n `}\n`;\n","import { Fragment } from 'react';\nimport { Checkbox } from 'antd';\nimport 'react-phone-input-2/lib/style.css';\nimport { Tooltip } from 'components/Shared/Tooltip';\nimport { Form, FormItem } from 'components/UI/Form';\nimport { Input } from 'components/UI/Input';\nimport { useReturnFormFields } from '../../../hooks/useReturnFormFields';\nimport { useRegisterCompleteValues } from '../../../providers/RegisterCompleteProvider';\nimport * as StyledShared from '../styles';\nimport { AccountFormFields } from 'constants/account/account-form-fields';\nimport { IFormField } from 'interfaces';\n\nconst returnFormFields = (field: IFormField) => {\n switch (field.name) {\n case AccountFormFields.Phone:\n return (\n \n \n \n );\n case AccountFormFields.Password:\n case AccountFormFields.PasswordConfirmation:\n return (\n \n \n \n );\n case AccountFormFields.TermsAndConditions:\n return (\n \n \n \n \n \n );\n default:\n return (\n \n {field.label}\n {field.tooltip && {field.tooltip}}\n >\n }\n name={field.name}\n rules={field.rules}\n initialValue={field.defaultValue}\n isWhitespaceForbidden\n >\n \n \n );\n }\n};\n\nexport const RegisterCollectorComplete = () => {\n const { form, email } = useRegisterCompleteValues();\n\n const formFields = useReturnFormFields(\n form,\n [\n AccountFormFields.Email,\n AccountFormFields.UserName,\n AccountFormFields.Phone,\n AccountFormFields.Occupation,\n AccountFormFields.Password,\n AccountFormFields.PasswordConfirmation,\n AccountFormFields.TermsAndConditions\n ],\n false,\n { [AccountFormFields.Email]: email }\n );\n\n return (\n \n \n \n );\n};\n","import { useEffect, useId, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useQuery } from '@tanstack/react-query';\nimport { message } from 'antd';\nimport { StepProps, StepViewer } from 'components/Shared/StepViewer';\nimport { useForm } from 'components/UI/Form';\nimport { useOpenAccountAuth } from 'hooks/account/useOpenAccountAuth';\nimport { useHistory } from 'hooks/generic/useHistory';\nimport { useFireEvent } from 'hooks/useFireEvent';\nimport { useIsLoggedIn } from 'hooks/user/useIsLoggedIn';\nimport { useSearchParams } from 'hooks/useSearchParams';\nimport { RegisterCollectorComplete } from './RegisterCollectorComplete';\nimport { RegisterCompleteProvider } from '../../providers/RegisterCompleteProvider';\nimport { InfoBlockLoggedIn } from '../components/InfoBlockLoggedIn';\nimport { completeRegisterUser as completeRegisterUserRequest } from 'appRedux/restApi';\nimport { getCurrentLanguage } from 'utils/app/get-lang';\nimport { addQuery } from 'utils/generic/query-route';\nimport { EAccountRouteKeys } from 'constants/account/account-route-keys';\nimport { StepViewerEvents } from 'constants/app/eventbus-events';\nimport { AccountType, RestAxiosError, RestBoolean } from 'interfaces';\nimport { IRegisterProps } from 'interfaces/Auth';\n\nexport const RegisterComplete = () => {\n const registerId = useId();\n const searchParams = useSearchParams();\n const { history } = useHistory();\n const { isLoggedIn, isLoginPending } = useIsLoggedIn();\n const { openAccountLogin } = useOpenAccountAuth();\n const [{ token, email }] = useState(() => {\n history.replace(addQuery({ token: undefined, email: undefined }));\n return searchParams;\n });\n const { t } = useTranslation();\n const { fireEvent } = useFireEvent();\n const [form] = useForm();\n const completeRegisterUserParams = (\n inputParams: Partial\n ): ReturnType => {\n const _inputParams = { first_name: '', last_name: '', ...inputParams }; // first_name and last_name are required for backend\n _inputParams.account_type = AccountType.User;\n _inputParams.locale = getCurrentLanguage();\n _inputParams.token = token;\n _inputParams.email = email;\n _inputParams.only_validate_token = RestBoolean.False;\n return completeRegisterUserRequest(_inputParams);\n };\n\n const { refetch, error, isFetching, data } = useQuery<\n Awaited>,\n RestAxiosError\n >({\n queryKey: [EAccountRouteKeys.ACCOUNT_REGISTER_COMPLETE],\n queryFn: () => completeRegisterUserParams(form.getFieldsValue(true)),\n enabled: false,\n retry: false\n });\n\n const onSubmitRegister = () => {\n form\n .validateFields()\n .then(() => void refetch())\n .catch(({ errorFields }) => {\n const firstErrorField = errorFields[0].name[0];\n form.scrollToField(firstErrorField, {\n behavior: 'smooth',\n scrollMode: 'if-needed',\n block: 'center'\n });\n });\n };\n\n useEffect(() => {\n if (!data) {\n return;\n }\n const isRedirecting = openAccountLogin();\n if (!isRedirecting) {\n return;\n }\n fireEvent({\n key: StepViewerEvents.SetNextLoading,\n id: registerId\n });\n }, [data]);\n\n useEffect(() => {\n if (error) {\n const _message = error?.response?.data?.message;\n _message && message.error(_message);\n }\n }, [error]);\n\n useEffect(() => {\n fireEvent({\n key: isFetching\n ? StepViewerEvents.SetNextLoading\n : StepViewerEvents.UnsetNextLoading,\n id: registerId\n });\n }, [registerId, isFetching]);\n\n if (!(token && email)) {\n return null;\n }\n\n if (isLoggedIn || isLoginPending) {\n return ;\n }\n\n return (\n \n \n \n );\n};\n","import { KeyboardEvent, useCallback } from 'react';\nimport { useStepViewerNavigation } from './useStepViewerNavigation';\n\ntype UseStepViewerNavigateOnEnterProps = {\n eventId?: string;\n callback?: () => void;\n};\n\nexport const useStepViewerNavigateOnEnter = ({\n eventId,\n callback\n}: UseStepViewerNavigateOnEnterProps) => {\n const { next } = useStepViewerNavigation({ eventId });\n\n const handleKeyUp = useCallback(\n (e: KeyboardEvent) => {\n if (e.key === 'Enter') {\n callback?.();\n }\n },\n [callback, eventId, next]\n );\n\n return {\n handleKeyUp\n };\n};\n","import { useCallback } from 'react';\nimport { useFireEvent } from 'hooks/useFireEvent';\nimport { StepViewerEvents } from 'constants/app/eventbus-events';\n\ntype UseStepViewerNavigationProps = {\n eventId?: string;\n};\n\nexport const useStepViewerNavigation = ({\n eventId\n}: UseStepViewerNavigationProps) => {\n const { fireEvent } = useFireEvent();\n const next = useCallback(() => {\n fireEvent({\n key: StepViewerEvents.NextAction,\n id: eventId\n });\n }, [eventId]);\n const previous = useCallback(() => {\n fireEvent({\n key: StepViewerEvents.PreviousAction,\n id: eventId\n });\n }, [eventId]);\n\n return {\n next,\n previous\n };\n};\n","let token = '';\n\nexport const useToken = () => {\n const setUserToken = (_token: string) => {\n token = _token;\n };\n\n const getUserToken = () => {\n return token;\n };\n\n return {\n setUserToken,\n getUserToken\n };\n};\n","import styled from 'styled-components';\nimport { isMobile } from 'utils';\n\nexport const LoginForgotPassword = styled.h4`\n display: inline;\n cursor: pointer;\n color: var(--v3-text-color);\n font-size: 14px;\n font-weight: 400;\n line-height: 16px;\n text-align: right;\n float: right;\n margin: 0;\n`;\n\nexport const LoginInfoBlock = styled.div`\n color: var(--v3-text-color-secondary);\n font-size: 15px;\n font-weight: 400;\n line-height: 20px;\n letter-spacing: -0.32px;\n`;\n\nexport const LoginInfoSignUp = styled.span`\n cursor: pointer;\n color: var(--v3-text-color);\n font-size: 15px;\n text-decoration: underline;\n font-weight: 400;\n line-height: 20px;\n letter-spacing: -0.32px;\n white-space: nowrap;\n`;\n\nexport const LoginBodySpace = styled.div`\n padding-top: ${isMobile() ? '80px' : '120px'};\n`;\n","export enum ESumsubKeys {\n GET_APPLICATION_STATUS = 'Get applicant status',\n CREATE_APPLICANT = 'create applicant',\n SUMSUB_ACCESS_TOKEN = 'sumsub access token'\n}\n\nexport enum ESumsubApplicantStatus {\n INIT = 'init',\n PENDING = 'pending',\n PRECHECKED = 'prechecked',\n QUEUED = 'queued',\n COMPLETED = 'completed',\n ONHOLD = 'onHold'\n}\n","import { FC, useEffect, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport SumsubWebSdk from '@sumsub/websdk-react';\nimport { useQuery } from '@tanstack/react-query';\nimport { Drawer, message } from 'antd';\nimport { useHistory } from 'hooks/generic/useHistory';\nimport { useToken } from 'hooks/user/useToken';\nimport { useAppDispatch } from 'appRedux/hooks';\nimport { getAccountCreatorData, getUserData } from 'appRedux/restApi';\nimport { createApplicant, getSumsubAccessToken } from 'appRedux/restApi/SumSub';\nimport { setSession } from 'services/ApiClient';\nimport { getDocumentLanguage } from 'utils/bom-dom';\nimport { EAccountRouteKeys } from 'constants/account/account-route-keys';\nimport {\n ESumsubApplicantStatus,\n ESumsubKeys\n} from 'constants/account/sumsub-keys';\nimport { RestAxiosError } from 'interfaces';\n\ntype KYCDrawerProps = {\n closePage: () => void;\n currentApplicantStatus?: string;\n};\n\nexport const KYCDrawer: FC = ({\n closePage,\n currentApplicantStatus\n}) => {\n const [callCreateApplicant, setCallCreateApplicant] = useState(false);\n const [callGetSumsubToken, setCallGetSumsubToken] = useState(false);\n const [sumsubToken, setSumsubToken] = useState('');\n const { getUserToken } = useToken();\n const { t } = useTranslation();\n const { push } = useHistory();\n const dispatch = useAppDispatch();\n const userToken = getUserToken();\n\n const {\n data,\n error,\n refetch: refetchApplicant\n } = useQuery>, RestAxiosError>({\n queryKey: [ESumsubKeys.CREATE_APPLICANT, userToken],\n queryFn: () => createApplicant(userToken as string),\n retry: false,\n refetchOnWindowFocus: false,\n enabled: callCreateApplicant\n });\n\n const {\n data: sumsubData,\n error: sumsubError,\n refetch\n } = useQuery<\n Awaited>,\n RestAxiosError\n >({\n queryKey: [ESumsubKeys.SUMSUB_ACCESS_TOKEN, userToken],\n queryFn: () => getSumsubAccessToken(userToken as string),\n retry: false,\n refetchOnWindowFocus: false,\n enabled: callGetSumsubToken\n });\n\n const onCompleted = () => {\n setSession(userToken);\n dispatch(getAccountCreatorData());\n dispatch(getUserData());\n push(EAccountRouteKeys.ACCOUNT_PROFILE_INFO);\n };\n\n const messageHandler = (data: any, payload: any) => {\n if (\n data === 'idCheck.onApplicantStatusChanged' &&\n payload?.reviewStatus === ESumsubApplicantStatus.COMPLETED &&\n payload?.reviewResult?.reviewAnswer === 'GREEN'\n ) {\n message.success(t('account.accountVerified'));\n onCompleted();\n }\n };\n\n const errorHandler = (error: any) => {\n message.error(error);\n closePage();\n };\n\n const accessTokenExpirationHandler = () => {\n refetch();\n return Promise.resolve('');\n };\n\n useEffect(() => {\n if (currentApplicantStatus) {\n setCallGetSumsubToken(true);\n refetch();\n } else {\n setCallCreateApplicant(true);\n refetchApplicant();\n }\n }, [currentApplicantStatus]);\n\n useEffect(() => {\n if (data) {\n setCallGetSumsubToken(true);\n refetch();\n }\n }, [data]);\n\n useEffect(() => {\n if (error) {\n message.error(error.response?.data?.message);\n closePage();\n }\n }, [error]);\n\n useEffect(() => {\n if (sumsubError) {\n message.error(sumsubError.response?.data?.message);\n closePage();\n }\n }, [sumsubError]);\n\n useEffect(() => {\n if (sumsubData) {\n setSumsubToken(sumsubData.data.token);\n }\n }, [sumsubData]);\n\n return sumsubToken ? (\n \n \n \n ) : null;\n};\n","import { ApiClient } from 'services/ApiClient';\n\nexport const createApplicant = (token: string) => {\n return ApiClient.post(`/sumsub/create-applicant`, null, {\n headers: {\n accept: 'application/json',\n authorization: `Bearer ${token}`\n }\n });\n};\n\nexport const getSumsubAccessToken = (token: string) => {\n return ApiClient.post(`/sumsub/access-token`, null, {\n headers: {\n accept: 'application/json',\n authorization: `Bearer ${token}`\n }\n });\n};\n\nexport const applicantStatus = (token: string) => {\n return ApiClient.get(`/sumsub/applicant-status`, {\n headers: {\n accept: 'application/json',\n authorization: `Bearer ${token}`\n }\n });\n};\n","import { useEffect, useId, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useQuery } from '@tanstack/react-query';\nimport { message } from 'antd';\nimport { StepViewer } from 'components/Shared/StepViewer';\nimport { useStepViewerNavigateOnEnter } from 'components/Shared/StepViewer/hooks/useStepViewerNavigateOnEnter';\nimport { Form, FormItem, useForm, useWatch } from 'components/UI/Form';\nimport { Input } from 'components/UI/Input';\nimport { useOpenAccountAuth } from 'hooks/account/useOpenAccountAuth';\nimport { useHistory } from 'hooks/generic/useHistory';\nimport { useFireEvent } from 'hooks/useFireEvent';\nimport { useIsLoggedIn } from 'hooks/user/useIsLoggedIn';\nimport { useToken } from 'hooks/user/useToken';\nimport * as Styled from './styles';\nimport { useReturnFormFields } from '../../hooks/useReturnFormFields';\nimport {\n AccountLayout,\n useAccountValues\n} from '../../providers/AccountProvider';\nimport { CheckEmailModal } from '../components/CheckEmailModal';\nimport { InfoBlockLoggedIn } from '../components/InfoBlockLoggedIn';\nimport { KYCDrawer } from '../components/KYCDrawer';\nimport { setUserData } from 'appRedux/actions';\nimport { useAppDispatch } from 'appRedux/hooks';\nimport { loginUser } from 'appRedux/restApi';\nimport { applicantStatus } from 'appRedux/restApi/SumSub';\nimport { setSession } from 'services/ApiClient';\nimport { getPath } from 'utils';\nimport { AccountFormFields } from 'constants/account/account-form-fields';\nimport { EAccountRouteKeys } from 'constants/account/account-route-keys';\nimport {\n ESumsubApplicantStatus,\n ESumsubKeys\n} from 'constants/account/sumsub-keys';\nimport { StepViewerEvents } from 'constants/app/eventbus-events';\nimport { RestAxiosError } from 'interfaces';\n\nexport const Login = () => {\n const loginId = useId();\n const { t } = useTranslation();\n const [form] = useForm();\n const { history, goBack } = useHistory();\n const { isLoggedIn, isLoginPending } = useIsLoggedIn();\n const { configs } = useAccountValues();\n\n const [showKYC, setShowKYC] = useState(false);\n const [showEmailVerificationModal, setShowEmailVerificationModal] =\n useState(false);\n const [token, setToken] = useState('');\n const [currentApplicantStatus, setCurrentApplicantStatus] = useState('');\n const email = useWatch('email', form);\n\n const { refetch, error, isFetching, data, remove } = useQuery<\n Awaited>,\n RestAxiosError\n >({\n queryKey: [EAccountRouteKeys.ACCOUNT_LOGIN],\n queryFn: () => loginUser(form.getFieldsValue(true)),\n enabled: false,\n retry: false\n });\n\n const {\n data: applicantData,\n refetch: applicantRefetch,\n error: applicantError\n } = useQuery({\n queryKey: [ESumsubKeys.GET_APPLICATION_STATUS, token],\n queryFn: () => applicantStatus(token as string),\n retry: false,\n enabled: false\n });\n\n const onSubmitLogin = () => {\n form\n .validateFields()\n .then(() => void refetch())\n .catch(() => {});\n };\n\n const { handleKeyUp } = useStepViewerNavigateOnEnter({\n eventId: loginId,\n callback: onSubmitLogin\n });\n const { openAccountRegister, openAccountForgotPassword } =\n useOpenAccountAuth();\n const dispatch = useAppDispatch();\n const { fireEvent } = useFireEvent();\n const { setUserToken } = useToken();\n\n const formFields = useReturnFormFields(\n form,\n [AccountFormFields.Email, AccountFormFields.Password],\n true\n );\n\n const closePage = () => {\n setShowKYC(false);\n setUserToken('');\n history.push('/');\n remove();\n };\n\n useEffect(() => {\n fireEvent({\n key: isFetching\n ? StepViewerEvents.SetNextLoading\n : StepViewerEvents.UnsetNextLoading,\n id: loginId\n });\n }, [loginId, isFetching]);\n\n const onSuccess = () => {\n if (data) {\n const { data: userData, token } = data.data;\n dispatch(setUserData(userData));\n setSession(token);\n if (configs?.accountLayout === AccountLayout.ONPAGE) {\n window.location.href = getPath('/');\n } else {\n goBack();\n }\n }\n };\n\n useEffect(() => {\n if (applicantData) {\n setCurrentApplicantStatus(applicantData?.data?.review_status);\n if (\n applicantData?.data?.review_status ===\n ESumsubApplicantStatus.COMPLETED &&\n applicantData?.data?.review_result?.review_answer === 'GREEN'\n ) {\n setShowKYC(false);\n onSuccess();\n } else {\n setUserToken(token);\n setShowKYC(true);\n }\n }\n }, [applicantData]);\n\n useEffect(() => {\n if (applicantError) {\n setUserToken(token);\n setShowKYC(true);\n }\n }, [applicantError]);\n\n useEffect(() => {\n if (error) {\n // check if user is not verified\n if (error?.response?.status === 403) {\n setShowEmailVerificationModal(true);\n return;\n }\n message.error(error?.response?.data?.message);\n }\n }, [error]);\n\n useEffect(() => {\n if (data) {\n const { data: userData, token } = data.data;\n if (userData.is_kyc_verified || userData.is_company_verified) {\n onSuccess();\n } else {\n setToken(token);\n }\n }\n }, [data]);\n\n useEffect(() => {\n if (token) {\n applicantRefetch();\n }\n }, [token]);\n\n if ((isLoggedIn && !data) || isLoginPending) {\n return ;\n }\n\n return (\n <>\n \n {t('account.loginStepSignupText')}{' '}\n \n {t('account.loginStepSignup')}\n \n \n )\n },\n nextBtnText: t('account.login'),\n render: () => (\n <>\n \n \n {t('account.loginResetPassword')}\n \n \n >\n )\n }\n ]}\n />\n \n {showKYC && (\n \n )}\n >\n );\n};\n","import styled from 'styled-components';\n\nexport const SignUpInfoBlock = styled.div`\n color: var(--v3-text-color-secondary);\n font-size: 15px;\n font-weight: 400;\n line-height: 20px;\n letter-spacing: -0.32px;\n`;\n\nexport const SignUpInfoLink = styled.span`\n cursor: pointer;\n color: var(--v3-text-color);\n font-size: 15px;\n text-decoration: underline;\n font-weight: 400;\n line-height: 20px;\n letter-spacing: -0.32px;\n white-space: nowrap;\n`;\n\nexport const SpinWrapper = styled.div`\n position: relative;\n width: 100%;\n height: 100%;\n display: flex;\n`;\n","import { FC, useEffect, useId, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useQuery } from '@tanstack/react-query';\nimport { message } from 'antd';\nimport { ConfirmModal } from 'components/Shared/ConfirmModal';\nimport { StepViewer } from 'components/Shared/StepViewer';\nimport { Form, FormItem, useForm } from 'components/UI/Form';\nimport { Input } from 'components/UI/Input';\nimport { Spin } from 'components/UI/Spin';\nimport { useOpenAccountAuth } from 'hooks/account/useOpenAccountAuth';\nimport { useHistory } from 'hooks/generic/useHistory';\nimport { useFireEvent } from 'hooks/useFireEvent';\nimport { useIsLoggedIn } from 'hooks/user/useIsLoggedIn';\nimport { useSearchParams } from 'hooks/useSearchParams';\nimport * as Styled from './styles';\nimport { useReturnFormFields } from '../../hooks/useReturnFormFields';\nimport { InfoBlockLoggedIn } from '../components/InfoBlockLoggedIn';\nimport { resetPassword } from 'appRedux/restApi';\nimport { isMobile } from 'utils';\nimport { addQuery } from 'utils/generic/query-route';\nimport { AccountFormFields } from 'constants/account/account-form-fields';\nimport { EAccountRouteKeys } from 'constants/account/account-route-keys';\nimport { StepViewerEvents } from 'constants/app/eventbus-events';\n\nexport const ResetPassword: FC = () => {\n const resetPasswordId = useId();\n const { t } = useTranslation();\n const [form] = useForm();\n const { email, token } = useSearchParams();\n const [params, setParams] = useState({ email, token });\n const { goBack, history } = useHistory();\n const { isLoggedIn, isLoginPending } = useIsLoggedIn();\n const { openAccountRegister } = useOpenAccountAuth();\n const { fireEvent } = useFireEvent();\n const formFields = useReturnFormFields(form, [\n AccountFormFields.Password,\n AccountFormFields.PasswordConfirmation\n ]);\n const { refetch, error, isFetching, data } = useQuery({\n queryKey: [\n EAccountRouteKeys.ACCOUNT_RESET_PASSWORD,\n params.token,\n params.email\n ],\n queryFn: () =>\n resetPassword({\n token: params.token as string,\n email: params.email as string,\n password: form.getFieldValue(AccountFormFields.Password),\n password_confirmation: form.getFieldValue(\n AccountFormFields.PasswordConfirmation\n )\n }),\n enabled: false,\n retry: false\n });\n\n const submitResetPassword = () => {\n if (!params.email || !params.token) return;\n form\n .validateFields()\n .then(() => void refetch())\n .catch(() => {});\n };\n\n useEffect(() => {\n fireEvent({\n key: isFetching\n ? StepViewerEvents.SetNextLoading\n : StepViewerEvents.UnsetNextLoading,\n id: resetPasswordId\n });\n }, [isFetching]);\n\n useEffect(() => {\n if (error) {\n message.error(t('account.resetPasswordError'));\n }\n }, [error]);\n\n useEffect(() => {\n if (token && email) {\n history.push(addQuery({ token: undefined, email: undefined }));\n setParams({ email, token });\n }\n }, [token, email]);\n\n useEffect(() => {\n if (!params.token || !params.email) {\n fireEvent({\n key: StepViewerEvents.DisableProceeding,\n id: resetPasswordId\n });\n }\n }, [params]);\n\n if (isLoginPending) {\n return (\n \n \n \n );\n }\n\n if (isLoggedIn) {\n return ;\n }\n\n if (data) {\n return (\n \n );\n }\n\n return (\n \n {t('account.loginStepSignupText')}{' '}\n \n {t('account.loginStepSignup')}\n \n \n )\n },\n nextBtnText: t('account.resetPasswordBtn'),\n render: () => (\n \n )\n }\n ]}\n />\n );\n};\n","import styled from 'styled-components';\nimport { isMobile } from 'utils';\n\nexport const SignUpInfoBlock = styled.div`\n color: var(--v3-text-color-secondary);\n font-size: 15px;\n font-weight: 400;\n line-height: 20px;\n letter-spacing: -0.32px;\n`;\n\nexport const SignUpInfoLink = styled.span`\n cursor: pointer;\n color: var(--v3-text-color);\n font-size: 15px;\n text-decoration: underline;\n font-weight: 400;\n line-height: 20px;\n letter-spacing: -0.32px;\n white-space: nowrap;\n`;\n\nexport const SpinWrapper = styled.div`\n position: relative;\n width: 100%;\n height: 100%;\n display: flex;\n`;\n\nexport const ModalBody = styled.div`\n width: ${isMobile() ? '100vw' : '500px'};\n min-height: 500px;\n max-height: ${isMobile() ? '100vh' : '90vh'};\n`;\n","import { useEffect, useId } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useQuery } from '@tanstack/react-query';\nimport { message } from 'antd';\nimport { ConfirmModal } from 'components/Shared/ConfirmModal';\nimport { StepViewer } from 'components/Shared/StepViewer';\nimport { Form, FormItem, useForm } from 'components/UI/Form';\nimport { Input } from 'components/UI/Input';\nimport { Spin } from 'components/UI/Spin';\nimport { useOpenAccountAuth } from 'hooks/account/useOpenAccountAuth';\nimport { useHistory } from 'hooks/generic/useHistory';\nimport { useFireEvent } from 'hooks/useFireEvent';\nimport { useIsLoggedIn } from 'hooks/user/useIsLoggedIn';\nimport * as Styled from './styles';\nimport { useReturnFormFields } from '../../hooks/useReturnFormFields';\nimport { InfoBlockLoggedIn } from '../components/InfoBlockLoggedIn';\nimport { forgotPassword } from 'appRedux/restApi';\nimport { AccountFormFields } from 'constants/account/account-form-fields';\nimport { EAccountRouteKeys } from 'constants/account/account-route-keys';\nimport { StepViewerEvents } from 'constants/app/eventbus-events';\n\nexport const ForgotPassword = () => {\n const forgotPasswordId = useId();\n const { t } = useTranslation();\n const [form] = useForm();\n const { goBack } = useHistory();\n const { isLoggedIn, isLoginPending } = useIsLoggedIn();\n const { openAccountRegister } = useOpenAccountAuth();\n const formFields = useReturnFormFields(form, [AccountFormFields.Email]);\n const { fireEvent } = useFireEvent();\n const { refetch, error, data, isFetching } = useQuery({\n queryKey: [EAccountRouteKeys.ACCOUNT_FORGOT_PASSWORD],\n queryFn: () =>\n forgotPassword({\n email: form.getFieldValue(AccountFormFields.Email)\n }),\n enabled: false,\n retry: false\n });\n\n const submitForgotPassword = () => {\n form\n .validateFields()\n .then(() => void refetch())\n .catch(() => {});\n };\n\n useEffect(() => {\n fireEvent({\n key: isFetching\n ? StepViewerEvents.SetNextLoading\n : StepViewerEvents.UnsetNextLoading,\n id: forgotPasswordId\n });\n }, [isFetching]);\n\n useEffect(() => {\n if (error) {\n message.error(t('account.forgotPasswordError'));\n }\n }, [error]);\n\n if (isLoggedIn) {\n return ;\n }\n\n if (isLoginPending) {\n return (\n \n \n \n );\n }\n\n if (data) {\n return (\n \n );\n }\n return (\n \n \n {t('account.loginStepSignupText')}{' '}\n \n {t('account.loginStepSignup')}\n \n \n )\n },\n nextBtnText: t('account.submit'),\n render: () => (\n \n )\n }\n ]}\n />\n \n );\n};\n","import { FC, useEffect, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useQuery } from '@tanstack/react-query';\nimport { ConfirmModal } from 'components/Shared/ConfirmModal';\nimport { useHistory } from 'hooks/generic/useHistory';\nimport { useToken } from 'hooks/user/useToken';\nimport { useSearchParams } from 'hooks/useSearchParams';\nimport { KYCDrawer } from '../components/KYCDrawer';\nimport { verifyEmail } from 'appRedux/restApi';\nimport { addQuery } from 'utils/generic/query-route';\nimport { EAccountRouteKeys } from 'constants/account/account-route-keys';\nimport User from 'assets/images/avatars/user.png';\nimport NoData from 'assets/images/generic/no-data.png';\n\nconst CONFIRM_MODAL_DATA = {\n success: {\n title: 'account.verifiedEmailNotificationSuccessTitle',\n description: 'account.verifiedEmailNotificationSuccessDescription',\n image: User\n },\n error: {\n title: 'account.verifiedEmailNotificationFailTitle',\n description: 'account.verifiedEmailNotificationFailDescription',\n image: NoData\n }\n};\n\nexport const VerifyEmail: FC = () => {\n const { t } = useTranslation();\n const { goBack, history } = useHistory();\n const { token: queryToken } = useSearchParams();\n const [token, setToken] = useState(queryToken);\n const { setUserToken } = useToken();\n const { data, error } = useQuery({\n queryKey: [EAccountRouteKeys.ACCOUNT_VERIFY_EMAIL, token],\n queryFn: () => verifyEmail(token as string),\n retry: false,\n refetchOnWindowFocus: false\n });\n const [confirmModalVisible, setConfirmModalVisible] = useState(false);\n const [showKYC, setShowKYC] = useState(false);\n\n const info = error ? CONFIRM_MODAL_DATA.error : CONFIRM_MODAL_DATA.success;\n\n const handleCloseConfirmModal = () => {\n setConfirmModalVisible(false);\n goBack();\n };\n\n const closePage = () => {\n setShowKYC(false);\n setUserToken('');\n history.push('/');\n };\n\n useEffect(() => {\n if (!data && !error) return;\n if (data) {\n setShowKYC(true);\n setUserToken(data.data.token);\n }\n if (error) {\n setConfirmModalVisible(true);\n setShowKYC(false);\n }\n }, [data, error]);\n\n useEffect(() => {\n if (queryToken) {\n history.push(addQuery({ token: undefined }));\n setToken(queryToken);\n }\n }, [queryToken]);\n\n if (!token) return null;\n\n if (!data && !error) return null;\n\n return (\n <>\n {showKYC && }\n \n >\n );\n};\n","import { Skeleton } from 'antd';\nimport styled from 'styled-components';\nimport { Button } from 'components/Button';\nimport { isMobile } from 'utils';\n\nexport const AuthButton = styled(Button)`\n &&& {\n justify-content: center;\n align-items: center;\n padding: 0 16px;\n min-width: 135px;\n height: var(--ft-btn-height-sm);\n border-radius: 10px;\n font-weight: 500;\n font-size: var(--ft-font-size-300);\n line-height: var(--ft-line-height-100);\n letter-spacing: -0.02em;\n text-align: center;\n }\n`;\n\nexport const AuthSignUpButton = styled(AuthButton)`\n &&& {\n background: var(--v3-primary-color);\n color: var(--v3-black-0);\n :hover {\n color: var(--v3-black-0);\n background: var(--v3-primary-color);\n }\n }\n`;\n\nexport const AuthButtonSkeleton = styled(Skeleton.Button)`\n &&& {\n justify-content: center;\n align-items: center;\n min-width: 135px;\n height: 40px;\n border-radius: 10px;\n font-weight: 500;\n font-size: 15px;\n line-height: 20px;\n letter-spacing: -0.02em;\n text-align: center;\n }\n`;\n\nexport const AuthButtonsWrapper = styled.div`\n display: flex;\n align-items: center;\n gap: 16px;\n`;\n\nexport const ModalBody = styled.div`\n width: ${isMobile() ? '100vw' : '500px'};\n min-height: 500px;\n max-height: ${isMobile() ? '100vh' : '90vh'};\n`;\n","import { useMemo } from 'react';\nimport { useIsTerminalMode } from 'hooks/useIsTerminalMode';\nimport { UserPanelTerminalViewSkeleton } from './views/Terminal/Skeleton';\nimport { UserPanelWebViewSkeleton } from './views/Web/Skeleton';\n\nexport enum EScreenType {\n WEB = 'web',\n TERMINAL = 'terminal'\n}\n\nconst VIEWS = {\n [EScreenType.WEB]: UserPanelWebViewSkeleton,\n [EScreenType.TERMINAL]: UserPanelTerminalViewSkeleton\n};\n\nexport const UserPanelSkeleton = () => {\n const { isTerminalMode } = useIsTerminalMode();\n const screenType = isTerminalMode ? EScreenType.TERMINAL : EScreenType.WEB;\n const View = useMemo(() => VIEWS[screenType], [screenType]);\n\n return ;\n};\n","import { Skeleton } from 'antd';\nimport * as Styled from './styles';\nimport { IS_DEFAULT_MODE } from 'constants/app/configs';\n\nexport const UserPanelWebViewSkeleton = () => {\n return (\n \n {IS_DEFAULT_MODE && (\n \n \n \n \n \n \n \n \n )}\n \n \n \n );\n};\n","import { Skeleton } from 'antd';\nimport * as Styled from './styles';\n\nexport const UserPanelTerminalViewSkeleton = () => {\n return (\n \n \n \n );\n};\n","import styled from 'styled-components';\n\nexport const UserPanelTerminalViewWrapper = styled.div`\n display: flex;\n flex-direction: row;\n align-items: center;\n cursor: pointer;\n gap: 12px;\n overflow: hidden;\n\n & svg {\n font-size: 60px;\n }\n`;\n","import { Link as LinkComponent } from 'react-router-dom';\nimport styled from 'styled-components';\n\nexport const Wrapper = styled.div`\n display: flex;\n padding: 7px;\n justify-content: center;\n align-items: center;\n gap: 8px;\n border-radius: 36px;\n background: var(--v3-black-2);\n`;\n\nexport const WalletInfo = styled.div`\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: flex-start;\n gap: 2px;\n`;\n\nexport const Link = styled(LinkComponent)`\n text-decoration: none;\n color: var(--v3-text-color-secondary);\n &:hover {\n color: var(--v3-primary-color);\n }\n`;\n\nexport const Balance = styled.div`\n align-self: stretch;\n color: var(--v3-primary-color);\n opacity: 0.8;\n font-size: 15px;\n font-style: normal;\n font-weight: 500;\n line-height: 20px;\n`;\n\nexport const Username = styled.div`\n align-self: stretch;\n color: var(--v3-text-color);\n font-size: 15px;\n font-style: normal;\n font-weight: 600;\n line-height: 20px;\n letter-spacing: -0.15px;\n`;\n","import * as StyledShared from '../../styles';\n\nexport const AuthButtonsKioskLayoutSkeleton = () => {\n return ;\n};\n","import { ComponentType, FC, Suspense } from 'react';\nimport { AuthButtonsDefaultLayoutSkeleton } from './layouts/Default/Skeleton';\nimport { AuthButtonsFtnftAmLayoutSkeleton } from './layouts/FtnftAm/Skeleton';\nimport { AuthButtonsKioskLayoutSkeleton } from './layouts/Kiosk/Skeleton';\nimport * as Styled from './styles';\nimport { lazy } from 'utils/generic/lazy';\nimport { Configs } from 'constants/app/configs';\nimport { ViewModes } from 'interfaces';\n\nconst { AuthButtonsDefaultLayout } = lazy(\n () =>\n import(\n /* webpackChunkName: \"AuthButtonsDefaultLayout\" */ './layouts/Default'\n )\n);\nconst { AuthButtonsFtnftAmLayout } = lazy(\n () =>\n import(\n /* webpackChunkName: \"AuthButtonsFtnftAmLayout\" */ './layouts/FtnftAm'\n )\n);\nconst { AuthButtonsKioskLayout } = lazy(\n () =>\n import(/* webpackChunkName: \"AuthButtonsKioskLayout\" */ './layouts/Kiosk')\n);\n\nconst AUTH_BUTTONS_LAYOUTS: Record<\n ViewModes,\n {\n component: ComponentType;\n skeleton: ComponentType;\n }\n> = {\n [ViewModes.DEFAULT]: {\n component: AuthButtonsDefaultLayout,\n skeleton: AuthButtonsDefaultLayoutSkeleton\n },\n [ViewModes.KIOSK]: {\n component: AuthButtonsKioskLayout,\n skeleton: AuthButtonsKioskLayoutSkeleton\n },\n [ViewModes.FTNFT_AM]: {\n component: AuthButtonsFtnftAmLayout,\n skeleton: AuthButtonsFtnftAmLayoutSkeleton\n },\n [ViewModes.KIOSK_AM]: {\n component: AuthButtonsKioskLayout,\n skeleton: AuthButtonsKioskLayoutSkeleton\n },\n [ViewModes.KIOSK_VENICE]: {\n component: AuthButtonsKioskLayout,\n skeleton: AuthButtonsKioskLayoutSkeleton\n }\n};\n\nexport const AuthButtons: FC = () => {\n const View = AUTH_BUTTONS_LAYOUTS[Configs.VIEW_MODE];\n\n return (\n \n }>\n \n \n \n );\n};\n","import * as StyledShared from '../../styles';\n\nexport const AuthButtonsDefaultLayoutSkeleton = () => {\n return ;\n};\n","import { useAccountValues } from '../../../../providers/AccountProvider';\nimport * as StyledShared from '../../styles';\n\nexport const AuthButtonsFtnftAmLayoutSkeleton = () => {\n const { configs } = useAccountValues();\n\n return (\n <>\n {!configs?.joinWithOneButton && (\n \n )}\n \n >\n );\n};\n","import { FC, Suspense, useMemo } from 'react';\nimport { useIsTerminalMode } from 'hooks/useIsTerminalMode';\nimport { EScreenType, UserPanelSkeleton } from './Skeleton';\nimport { lazy } from 'utils/generic/lazy';\nimport { IS_KIOSK_AM_MODE, IS_KIOSK_VENICE_MODE } from 'constants/app/configs';\n\nconst { UserPanelWebView } = lazy(\n () => import(/* webpackChunkName: \"UserPanelWebView\" */ './views/Web')\n);\n\nconst { UserPanelTerminalView } = lazy(\n () =>\n import(/* webpackChunkName: \"UserPanelTerminalView\" */ './views/Terminal')\n);\n\nconst VIEWS = {\n [EScreenType.WEB]: UserPanelWebView,\n [EScreenType.TERMINAL]: UserPanelTerminalView\n};\n\nexport const UserPanel: FC = () => {\n const { isTerminalMode } = useIsTerminalMode();\n const screenType =\n isTerminalMode || IS_KIOSK_AM_MODE || IS_KIOSK_VENICE_MODE\n ? EScreenType.TERMINAL\n : EScreenType.WEB;\n const View = useMemo(() => VIEWS[screenType], [screenType]);\n\n return }>{};\n};\n","import { Suspense, useEffect } from 'react';\nimport { Redirect, Route, Switch, useRouteMatch } from 'react-router-dom';\nimport { DrawerPage } from 'components/DrawerPage';\nimport { Spin } from 'components/UI/Spin';\nimport { useHistory } from 'hooks/generic/useHistory';\nimport { useIsLoggedIn } from 'hooks/user/useIsLoggedIn';\nimport { useSearchParams } from 'hooks/useSearchParams';\nimport { useOpenCreateNftModal } from './hooks/useOpenCreateNftModal';\nimport { Configs } from '../../../constants/app/configs';\nimport { lazy } from 'utils/generic/lazy';\nimport {\n AccountQueryKey,\n EAccountRouteKeys\n} from 'constants/account/account-route-keys';\nimport {\n ELsKeyAuthReachedFromOptions,\n ELsKeys\n} from 'constants/app/storage-keys';\n\nconst { ProfileLayout } = lazy(\n () =>\n import(/* webpackChunkName: \"ProfileLayout\" */ './layouts/ProfileLayout')\n);\n\nconst { Merchandise } = lazy(\n () => import(/* webpackChunkName: \"Merchandise\" */ './views/Merchandise')\n);\n\nconst { Transactions } = lazy(\n () => import(/* webpackChunkName: \"Transactions\" */ './views/Transactions')\n);\n\nconst { MyPayments } = lazy(\n () => import(/* webpackChunkName: \"MyPayments\" */ './views/MyPayments')\n);\n\nconst { CreatedNfts } = lazy(\n () => import(/* webpackChunkName: \"CreatedNfts\" */ './views/CreatedNfts')\n);\n\nconst { CollectedNfts } = lazy(\n () => import(/* webpackChunkName: \"CollectedNfts\" */ './views/CollectedNfts')\n);\n\nconst { CollectionNftList } = lazy(\n () =>\n import(\n /* webpackChunkName: \"CollectionNftList\" */ './views/CreatedNfts/components/CollectionNftList'\n )\n);\n\nconst { ProfileOverview } = lazy(\n () =>\n import(/* webpackChunkName: \"ProfileOverview\" */ './views/ProfileOverview')\n);\n\nconst { CreateNft } = lazy(\n () => import(/* webpackChunkName: \"CreateNft\" */ './views/CreateNft')\n);\n\nconst { CreateNftModal } = lazy(\n () =>\n import(/* webpackChunkName: \"CreateNftModal\" */ './views/CreateNftModal')\n);\n\nconst { ListNftModal } = lazy(\n () => import(/* webpackChunkName: \"ListNftModal\" */ './views/ListNftModal')\n);\n\nconst { NftMintSuccessModal } = lazy(\n () =>\n import(\n /* webpackChunkName: \"NftMintSuccessModal\" */ './components/NftMintSuccessModal'\n )\n);\n\nconst { NftMintFailModal } = lazy(\n () =>\n import(\n /* webpackChunkName: \"NftMintFailModal\" */ './components/NftMintFailModal'\n )\n);\n\nconst { PrintNftModal } = lazy(\n () =>\n import(/* webpackChunkName: \"PrintNftModal\" */ './components/PrintNftModal')\n);\n\nconst { PrintNft } = lazy(\n () => import(/* webpackChunkName: \"PrintNft\" */ './components/PrintNft')\n);\n\nconst { BecomeCreatorModal } = lazy(\n () =>\n import(\n /* webpackChunkName: \"BecomeCreatorModal\" */ './components/BecomeCreatorModal'\n )\n);\n\nconst { ImportNftsModal } = lazy(\n () =>\n import(\n /* webpackChunkName: \"ImportNftsModal\" */ './components/ImportNftsModal'\n )\n);\n\nconst MODALS = {\n [AccountQueryKey.modal.option.CHOOSE_CREATE_NFT]: CreateNftModal,\n [AccountQueryKey.modal.option.BECOME_CREATOR]: BecomeCreatorModal,\n [AccountQueryKey.modal.option.LIST_NFT]: ListNftModal,\n [AccountQueryKey.modal.option.MINT_SUCCESS_NFT]: NftMintSuccessModal,\n [AccountQueryKey.modal.option.MINT_FAIL_NFT]: NftMintFailModal,\n [AccountQueryKey.modal.option.CHOOSE_PRINT_NFT]: PrintNftModal,\n [AccountQueryKey.modal.option.PRINT_NFT]: PrintNft,\n ...(Configs.IS_CONNECT_METAMASK_AVAILABLE && {\n [AccountQueryKey.modal.option.IMPORT_NFTS]: ImportNftsModal\n }),\n default: () => null\n};\n\nexport const Profile = () => {\n const match = useRouteMatch({ path: EAccountRouteKeys.ACCOUNT_PROFILE });\n const { modal } = useSearchParams();\n const { location } = useHistory();\n const isModalOpen = !!modal;\n const { isLoggedIn } = useIsLoggedIn();\n const { openCreateNftModal } = useOpenCreateNftModal();\n\n const isDrawerOpen =\n !!match &&\n !location.pathname.includes(\n EAccountRouteKeys.ACCOUNT_PROFILE_WALLET_CALLBACK\n );\n\n const ModalComponent = MODALS[modal || 'default'];\n\n /*\n * this effect handles storage values updates in case of user had journey with\n * non history redirections\n */\n useEffect(() => {\n if (!isLoggedIn) return;\n const authReachedFrom = JSON.parse(\n JSON.stringify(localStorage.getItem(ELsKeys.AUTH_REACHED_FROM)) || 'null'\n );\n if (authReachedFrom === ELsKeyAuthReachedFromOptions.CREATE_NFT) {\n const createNftModalOpened = openCreateNftModal({\n includeAccountPath: true\n });\n if (createNftModalOpened) {\n localStorage.removeItem(ELsKeys.AUTH_REACHED_FROM);\n }\n }\n }, [isLoggedIn, openCreateNftModal]);\n\n return (\n \n }>\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n};\n","import styled from 'styled-components';\n\nexport const AccountWrapper = styled.div`\n display: flex;\n align-items: center;\n gap: 12px;\n justify-content: flex-end;\n`;\n","import { FC } from 'react';\nimport { OmniSearch } from 'elements/OmniSearch';\nimport { Cart } from 'components/Shared/Cart';\nimport { useIsLoggedIn } from 'hooks/user/useIsLoggedIn';\nimport { Login, Register } from './authorization';\nimport { AuthButtons } from './components/AuthButtons';\nimport { UserPanel } from './components/UserPanel';\nimport { Profile } from './profile';\nimport {\n AccountLayout,\n AccountProps,\n AccountProvider,\n AccountView,\n defaultProps\n} from './providers/AccountProvider';\nimport * as Styled from './styles';\nimport { IS_DEFAULT_MODE, IS_FTNFT_AM_MODE } from '../../constants/app/configs';\n\nexport const Account: FC = ({ configs } = defaultProps) => {\n const { isLoggedIn } = useIsLoggedIn();\n const _layout = configs?.accountLayout || AccountLayout.POPUP;\n const _view = configs?.accountView || AccountView.DEFAULT;\n const _showCart = configs?.showCart || false;\n const _joinWithOneButton = configs?.joinWithOneButton || false;\n const isOnPage = _layout === AccountLayout.ONPAGE;\n const isRegisterView = _view === AccountView.REGISTER;\n const isLoginView = _view === AccountView.LOGIN;\n\n return (\n \n {isOnPage && isRegisterView && }\n {isOnPage && isLoginView && }\n {!isOnPage && (\n \n {!isLoggedIn && }\n {isLoggedIn && }\n {configs?.showCart && }\n {IS_FTNFT_AM_MODE || IS_DEFAULT_MODE ? : null}\n \n \n )}\n \n );\n};\n","import { useCallback, useLayoutEffect } from 'react';\nimport { useHistory } from 'hooks/generic/useHistory';\nimport { useAppSelector } from 'appRedux/hooks';\nimport { updateQuery } from 'utils/generic/query-route';\nimport { isEmptyObject } from 'utils/object-methods/is-empty';\nimport {\n AccountQueryKey,\n EAccountRouteKeys\n} from 'constants/account/account-route-keys';\nimport { IS_KIOSK_GENERIC } from 'constants/app/configs';\nimport { AccountType } from 'interfaces';\n\nexport const useCheckUserForNftCreation = (\n shouldGoToCreatedNfts = false,\n shouldSkipEffectCheck = false\n) => {\n const { history } = useHistory();\n const { data: accountCreatorData } = useAppSelector(\n ({ accountCreator }) => accountCreator\n );\n\n const creatorLoaded = !!accountCreatorData;\n\n const checkUserForNftCreation = useCallback(() => {\n if (IS_KIOSK_GENERIC) {\n history.push(EAccountRouteKeys.ACCOUNT_PROFILE_MY_NFTS_OWNED);\n }\n if (isEmptyObject(accountCreatorData)) return;\n /*\n * in Default mode there is no type collector, rather it is a user type.\n * However, we are checking reverse logic, not user or collector\n */\n const canCreateNft = [AccountType.Creator, AccountType.Company].includes(\n accountCreatorData?.account_type\n );\n if (!canCreateNft) {\n const nextLocation = updateQuery({\n [AccountQueryKey.modal.value]:\n AccountQueryKey.modal.option.BECOME_CREATOR\n });\n if (shouldGoToCreatedNfts) {\n nextLocation.pathname = EAccountRouteKeys.ACCOUNT_PROFILE_MY_NFTS;\n }\n history.push(nextLocation);\n return false;\n }\n return true;\n }, [accountCreatorData, shouldGoToCreatedNfts]);\n\n useLayoutEffect(() => {\n if (shouldSkipEffectCheck) {\n return;\n }\n checkUserForNftCreation();\n }, [shouldSkipEffectCheck, checkUserForNftCreation]);\n\n return { creatorLoaded, checkUserForNftCreation };\n};\n","export const isEmptyObject = (obj: Record | null | undefined) => {\n if (!obj) {\n return true;\n }\n\n for (const key in obj) {\n return false;\n }\n\n return true;\n};\n","import { useCallback } from 'react';\nimport { useHistory } from 'hooks/generic/useHistory';\nimport { useCheckUserForNftCreation } from './useCheckUserForNftCreation';\nimport { addQuery } from 'utils/generic/query-route';\nimport {\n AccountQueryKey,\n EAccountRouteKeys\n} from 'constants/account/account-route-keys';\n\ntype TOpenCreateNftModal =\n | {\n includeAccountPath?: boolean;\n }\n | undefined;\n\nexport const useOpenCreateNftModal = () => {\n const { history } = useHistory();\n const { checkUserForNftCreation, creatorLoaded } = useCheckUserForNftCreation(\n false,\n true\n );\n\n const openCreateNftModal = useCallback(\n (\n { includeAccountPath }: TOpenCreateNftModal = {\n includeAccountPath: false\n }\n ) => {\n if (!creatorLoaded) return false;\n if (!checkUserForNftCreation()) return false;\n const createNftUrlQuery = addQuery({\n [AccountQueryKey.modal.value]:\n AccountQueryKey.modal.option.CHOOSE_CREATE_NFT\n });\n\n if (includeAccountPath) {\n history.push({\n pathname: EAccountRouteKeys.ACCOUNT_PROFILE_MY_NFTS_NFTS,\n search: createNftUrlQuery.search\n });\n return true;\n }\n\n history.push(createNftUrlQuery);\n return true;\n },\n [checkUserForNftCreation, creatorLoaded]\n );\n\n const closeCreateNftModal = useCallback(() => {\n history.push(addQuery({ [AccountQueryKey.modal.value]: undefined }));\n }, []);\n\n return { openCreateNftModal, closeCreateNftModal };\n};\n","import { createContext, ReactElement, ReactNode, useContext } from 'react';\n\nexport enum AccountLayout {\n POPUP = 'popup',\n ONPAGE = 'onpage'\n}\n\nexport enum AccountView {\n REGISTER = 'register',\n LOGIN = 'login',\n DEFAULT = 'default'\n}\n\nexport type AccountProps = {\n configs?: {\n showCart?: boolean;\n accountLayout?: AccountLayout;\n accountView?: AccountView;\n joinWithOneButton?: boolean;\n };\n};\n\ntype AccountProviderProps = {\n children: ReactNode;\n value: {\n configs: AccountProps['configs'];\n };\n};\n\nexport const defaultProps: AccountProps = {\n configs: {\n showCart: false,\n accountLayout: AccountLayout.POPUP,\n accountView: AccountView.DEFAULT,\n joinWithOneButton: false\n }\n};\n\nexport const AccountContext = createContext({\n configs: defaultProps.configs\n});\n\nexport const AccountProvider = (props: AccountProviderProps): ReactElement => {\n return (\n \n {props.children}\n \n );\n};\n\nexport const useAccountValues = (): AccountProviderProps['value'] => {\n return useContext(AccountContext);\n};\n","import styled, { css } from 'styled-components';\nimport { Button } from 'components/Button';\nimport { ButtonBaseProps } from 'components/Modal/styles';\nimport { isMobile } from 'utils';\n\nexport const SearchWrapper = styled.div`\n width: 35vw;\n position: relative;\n padding: 10px;\n display: flex;\n flex-direction: column;\n gap: 10px;\n background: var(--v3-white);\n border-radius: 20px;\n margin-bottom: 5px;\n\n ${isMobile() &&\n css`\n width: 96vw;\n top: 30%;\n `}\n\n & .ant-input-group-wrapper {\n background: var(--v3-black-6);\n border-radius: 16px;\n padding: 8px 12px;\n width: ${isMobile() && `91vw`};\n }\n\n && .ant-input-group-addon {\n border-radius: 12px;\n background: var(--v3-black-0);\n border: none;\n box-shadow: 0px 3px 3px rgba(119, 110, 171, 0.08);\n }\n\n & .ant-select-selection-item {\n font-weight: 500;\n font-size: 14px;\n line-height: 16px;\n color: var(--v3-text-color);\n }\n\n &&& .ant-input {\n font-weight: 500;\n font-size: 15px;\n line-height: 20px;\n color: var(--v3-text-color);\n margin-left: 12px;\n background: none;\n &:hover {\n background: none;\n }\n }\n\n & .ant-select-arrow {\n color: var(--v3-text-color);\n }\n`;\n\nexport const SearchTitleWrapper = styled.div`\n padding: 10px;\n display: flex;\n justify-content: space-between;\n`;\nexport const SearchTitle = styled.div`\n font-weight: 800;\n font-size: 22px;\n line-height: 28px;\n`;\n\nexport const InputWrapper = styled.div`\n display: flex;\n align-items: center;\n justify-content: space-between;\n`;\n\nexport const SearchResults = styled.div`\n z-index: 9999;\n width: 100%;\n height: 80vh;\n border: 1px solid var(--v3-black-2);\n box-shadow: 0 16px 33px rgba(119, 110, 171, 0.11);\n border-radius: 20px;\n padding: 20px;\n display: flex;\n gap: 20px;\n flex-direction: column;\n align-content: center;\n background: var(--v3-white);\n overflow-x: hidden;\n overflow-y: scroll;\n &::-webkit-scrollbar {\n display: none;\n }\n ${isMobile() &&\n css`\n width: 92vw;\n top: 100%;\n position: relative;\n left: 1.5vw;\n height: 29vh;\n `}\n`;\n\nexport const CategoryHeader = styled.h3`\n margin: 0;\n font-weight: 500;\n font-size: 15px;\n line-height: 20px;\n text-align: left;\n`;\n\nexport const CollectionCounter = styled.p`\n margin: 0;\n font-weight: 500;\n font-size: 15px;\n line-height: 24px;\n`;\n\nexport const CancelButton = styled(Button)`\n &&& {\n border: none;\n }\n`;\n\nexport const EmptyWrapper = styled.div`\n height: 100%;\n width: 100%;\n display: flex;\n justify-content: center;\n margin-bottom: 20px;\n background: var(--v3-white);\n border: 1px solid var(--v3-black-2);\n border-radius: 20px;\n\n .ant-empty-description {\n color: var(--v3-text-color);\n }\n ${isMobile() &&\n css`\n box-shadow: 0 16px 33px rgba(119, 110, 171, 0.11);\n position: relative;\n top: 29vh;\n width: 93vw;\n left: 1vw;\n `}\n`;\n\nexport const Portal = styled.div`\n display: flex;\n flex-direction: column;\n`;\n\nexport const CloseButton = styled.button`\n position: absolute;\n background: var(--v3-black-4);\n color: var(--v3-text-color);\n border-radius: 50%;\n top: 15px;\n right: 14px;\n width: 30px;\n height: 30px;\n font-size: 22px;\n display: flex;\n -webkit-box-pack: center;\n justify-content: center;\n -webkit-box-align: center;\n align-items: center;\n z-index: 51;\n border: none;\n &:hover {\n cursor: pointer;\n }\n`;\n","import { useTranslation } from 'react-i18next';\nimport { Select } from 'antd';\nimport { TExploreProductType } from 'interfaces/explore';\n\ntype CategoryPickerProps = {\n handleCategoryChange: (\n arg:\n | Extract\n | 'artists'\n | 'all'\n ) => void;\n};\n\nexport const CategoryPicker = ({\n handleCategoryChange\n}: CategoryPickerProps) => {\n const { t } = useTranslation();\n\n return (\n \n );\n};\n","import styled from 'styled-components';\n\nexport const RedirectFooter = styled.p`\n margin: 0;\n font-weight: 500;\n font-size: 16px;\n line-height: 20px;\n color: var(--v3-primary-color);\n text-align: left;\n\n &:hover {\n cursor: pointer;\n }\n`;\n","import { ReactNode } from 'react';\nimport * as Styled from './styles';\n\ntype RedirectFooterProps = {\n children: ReactNode;\n handleRedirect: () => void;\n};\n\nexport const RedirectFooter = ({\n children,\n handleRedirect\n}: RedirectFooterProps) => (\n \n {children}\n \n);\n","import { Image } from 'antd';\nimport styled from 'styled-components';\n\nexport const ItemWrapper = styled.div`\n width: 450px;\n padding: 12px 0;\n border-radius: 12px;\n height: 56px;\n display: flex;\n align-items: center;\n\n &:hover {\n cursor: pointer;\n }\n`;\n\nexport const ItemName = styled.p`\n margin: 0;\n font-weight: 600;\n font-size: 16px;\n line-height: 24px;\n // to truncate string using ellipsis\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n text-align: left;\n`;\n\nexport const ItemCaption = styled.div`\n display: block;\n margin-left: 12px;\n min-width: 0;\n`;\n\nexport const ItemImage = styled(Image)`\n && {\n width: 52px;\n height: 52px;\n border-radius: 16px;\n }\n`;\n","var _rect, _path, _path2, _path3, _path4, _path5, _path6, _path7, _path8, _path9, _path10, _path11;\nvar _excluded = [\"title\", \"titleId\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport * as React from \"react\";\nfunction SvgLogoImagePlaceholder(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 32,\n height: 32,\n viewBox: \"0 0 32 32\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _rect || (_rect = /*#__PURE__*/React.createElement(\"rect\", {\n width: 32,\n height: 32,\n fill: \"#F4F3F6\"\n })), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M19.375 4H7.75C6.92162 4 6.25 4.67162 6.25 5.5V26.5C6.25 27.3284 6.92162 28 7.75 28H24.25C25.0784 28 25.75 27.3284 25.75 26.5V10L19.375 4Z\",\n fill: \"#82BCF4\"\n })), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M25.75 14.5935V26.4998C25.7493 26.8005 25.6593 27.0941 25.4913 27.3435H9.625L14.0237 20.7435C14.4831 20.0543 15.4146 19.8679 16.1039 20.3273C16.1133 20.3333 16.1223 20.3397 16.1313 20.346L17.9125 21.5948C18.2519 21.8325 18.7195 21.7504 18.9573 21.411C18.979 21.3799 18.9985 21.3473 19.015 21.3135L22.57 14.2035C22.9412 13.4629 23.8428 13.1637 24.583 13.5349C24.7259 13.6065 24.8567 13.7007 24.97 13.8135L25.75 14.5935Z\",\n fill: \"#6FABE6\"\n })), _path3 || (_path3 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M12.25 16.75C13.6997 16.75 14.875 15.5747 14.875 14.125C14.875 12.6753 13.6997 11.5 12.25 11.5C10.8003 11.5 9.625 12.6753 9.625 14.125C9.625 15.5747 10.8003 16.75 12.25 16.75Z\",\n fill: \"#6FABE6\"\n })), _path4 || (_path4 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M20.1737 4.75H8.875C8.04662 4.75 7.375 5.42162 7.375 6.25C7.375 6.25 6.25 19.7688 6.25 19V5.5C6.25 4.67162 6.92162 4 7.75 4H19.375L20.1737 4.75Z\",\n fill: \"#95CCF9\"\n })), _path5 || (_path5 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M19.375 4L25.75 10V11.125H20.6875C19.7556 11.125 19 10.3694 19 9.4375V4H19.375Z\",\n fill: \"#6FABE6\"\n })), _path6 || (_path6 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M19.375 4V8.5C19.375 9.32837 20.0466 10 20.875 10H25.75L19.375 4Z\",\n fill: \"#DAD7E5\"\n })), _path7 || (_path7 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M11.6763 16C13.126 16 14.3013 14.8247 14.3013 13.375C14.3013 11.9253 13.126 10.75 11.6763 10.75C10.2265 10.75 9.05127 11.9253 9.05127 13.375C9.05127 14.8247 10.2265 16 11.6763 16Z\",\n fill: \"#FFDE76\"\n })), _path8 || (_path8 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M14.301 13.3749C14.301 14.8246 13.1258 15.9999 11.676 15.9999C11.076 16.001 10.4944 15.7944 10.0298 15.4149C10.3782 15.554 10.7498 15.6253 11.1248 15.6249C12.7815 15.6249 14.1248 14.2816 14.1248 12.6249C14.1248 12.5536 14.121 12.4824 14.1173 12.4111C14.2399 12.7175 14.3025 13.0449 14.301 13.3749Z\",\n fill: \"#FFBA55\"\n })), _path9 || (_path9 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M13.5813 11.575C13.1294 11.2806 12.6018 11.1243 12.0625 11.125C10.5093 11.125 9.25004 12.3843 9.25004 13.9375C9.24966 14.1265 9.26841 14.3148 9.30629 14.5C9.13716 14.1494 9.04979 13.7646 9.05129 13.375C9.05129 11.9253 10.2265 10.75 11.6763 10.75C12.3985 10.747 13.0893 11.0463 13.5813 11.575Z\",\n fill: \"#FFE8A9\"\n })), _path10 || (_path10 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M8.125 27.9998L12.5237 21.4017C12.9831 20.7124 13.9146 20.5261 14.6039 20.9858C14.6133 20.9922 14.6226 20.9986 14.632 21.0049L16.4125 22.2514C16.7519 22.4892 17.2195 22.4067 17.4569 22.0673C17.4779 22.0373 17.497 22.0054 17.5135 21.9724L21.0689 14.8613C21.4394 14.1203 22.3401 13.8199 23.0811 14.1904C23.2255 14.2624 23.3571 14.3573 23.4711 14.4713L25.75 16.7498V26.4998C25.75 27.3282 25.0784 27.9998 24.25 27.9998H8.125Z\",\n fill: \"#EDEBF2\"\n })), _path11 || (_path11 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M25.75 16.7498V17.1248L23.845 15.2198C23.2585 14.6348 22.3086 14.6363 21.7236 15.2228C21.6108 15.336 21.5166 15.4665 21.445 15.6098L17.89 22.7235C17.7029 23.0944 17.2502 23.2433 16.8794 23.0562C16.8475 23.04 16.8168 23.0216 16.7875 23.001L15.0063 21.756C14.3279 21.2805 13.3926 21.4448 12.9171 22.1231C12.9111 22.1318 12.9047 22.1408 12.8987 22.1498L8.99875 27.9998H8.125L12.5237 21.3998C12.9846 20.7113 13.9161 20.5268 14.6046 20.9876C14.6136 20.9936 14.6223 20.9996 14.6313 21.006L16.4125 22.251C16.753 22.4891 17.2221 22.4059 17.4599 22.0654C17.4805 22.0361 17.4989 22.0054 17.515 21.9735L21.07 14.8598C21.4412 14.1191 22.3428 13.8199 23.083 14.1912C23.2259 14.2628 23.3567 14.3569 23.47 14.4698L25.75 16.7498Z\",\n fill: \"#F5F4F9\"\n })));\n}\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgLogoImagePlaceholder);\nexport default __webpack_public_path__ + \"static/media/logo-image-placeholder.8570b6b1860d292a418ba6d629adb411.svg\";\nexport { ForwardRef as ReactComponent };","import { ReactNode, useCallback } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useOpenArtistView } from 'hooks/artist/useOpenArtistView';\nimport { useOpenCollectionView } from 'hooks/collection/useOpenCollectionView';\nimport { useOpenNftView } from 'hooks/nft/useOpenNftView';\nimport * as Styled from './styles';\nimport placeholderImage from 'assets/images/collections/logo-image-placeholder.svg';\nimport { ICollection, ICreatorInfo, INft } from 'interfaces';\n\ntype SearchListItemProps = {\n nft?: INft;\n collection?: ICollection;\n creator?: ICreatorInfo;\n children?: ReactNode;\n};\n\nexport const SearchListItem = ({\n nft,\n collection,\n creator,\n children\n}: SearchListItemProps): JSX.Element => {\n const { handleOpenNft } = useOpenNftView();\n const { handleOpenCollection } = useOpenCollectionView();\n const { handleOpenArtist } = useOpenArtistView();\n const { t } = useTranslation();\n\n const handleOpenItem = useCallback(() => {\n if (nft) {\n handleOpenNft(nft.url_key);\n }\n if (collection) {\n handleOpenCollection(collection.slug);\n }\n if (creator) {\n handleOpenArtist(creator.user_name.toString());\n }\n }, [nft, collection, creator]);\n return (\n \n \n \n \n {nft?.name || collection?.name || creator?.user_name}\n \n {children}\n \n \n );\n};\n","import { Skeleton } from 'antd';\nimport * as Styled from './styles';\n\nexport const SearchListItemSkeleton = () => (\n \n \n\n \n \n \n \n);\n","import { useEffect, useRef, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useHistory, useLocation } from 'react-router-dom';\nimport { useQuery } from '@tanstack/react-query';\nimport { Skeleton } from 'antd';\nimport { Empty } from 'components/Empty';\nimport { Modal } from 'components/Modal';\nimport { Portal } from 'components/Shared/Portal';\nimport { Input } from 'components/UI/Input';\nimport { useDebounce } from 'hooks/useDebounce';\nimport * as Styled from './styles';\nimport { CategoryPicker } from '../CategoryPicker';\nimport { RedirectFooter } from '../RedirectFooter';\nimport { SearchListItem } from '../SearchListItem';\nimport { SearchListItemSkeleton } from '../SearchListItem/Skeleton';\nimport {\n getOmniSearchCollections,\n getOmniSearchCreator,\n getOmniSearchNfts\n} from 'appRedux/restApi';\nimport { Close } from 'icons';\nimport { isMobile } from 'utils';\nimport { updateQuery } from 'utils/generic/query-route';\nimport { getPath } from 'utils/navigation/navigate';\nimport { Configs } from 'constants/app/configs';\nimport { ReactQueryKeys } from 'constants/app/react-query-keys';\nimport { INft } from 'interfaces';\nimport { TExploreProductType } from 'interfaces/explore';\n\ntype SearchModalProps = {\n isModalOpen: boolean;\n setIsModalOpen: (arg: boolean) => void;\n};\n\nexport const SearchModal = ({\n isModalOpen,\n setIsModalOpen\n}: SearchModalProps): JSX.Element => {\n const { t } = useTranslation();\n const [searchValue, setSearchValue] = useState('');\n const [searchCategory, setSearchCategory] = useState<\n Extract | 'artists' | 'all'\n >('all');\n const [isInputActive, setIsInputActive] = useState(false);\n const searchLimitRef = useRef();\n const history = useHistory();\n const location = useLocation();\n\n const {\n data: nfts,\n isRefetching: nftsIsLoading,\n refetch: nftsRefetch\n } = useQuery({\n queryKey: [ReactQueryKeys.SEARCH_NFT_LIST],\n queryFn: () =>\n getOmniSearchNfts({ name: searchValue, limit: searchLimitRef.current }),\n retry: false,\n enabled: false,\n staleTime: Infinity\n });\n\n const {\n data: collections,\n isRefetching: collectionsIsLoading,\n refetch: collectionsRefetch\n } = useQuery({\n queryKey: [ReactQueryKeys.SEARCH_COLLECTION_LIST],\n queryFn: () =>\n getOmniSearchCollections({\n name: searchValue,\n limit: searchLimitRef.current,\n is_empty_total_saleable_supply: 0\n }),\n retry: false,\n enabled: false,\n staleTime: Infinity\n });\n\n const {\n data: creator,\n isRefetching: creatorIsLoading,\n refetch: creatorRefetch\n } = useQuery({\n queryKey: [ReactQueryKeys.SEARCH_CREATOR_LIST],\n queryFn: () =>\n getOmniSearchCreator({\n user_name: searchValue,\n limit: searchLimitRef.current,\n is_empty_total_owned_saleable_supply: 0\n }),\n retry: false,\n enabled: false,\n staleTime: Infinity\n });\n\n const refetchData = () => {\n if (searchCategory === 'nfts') {\n searchLimitRef.current = 4;\n nftsRefetch();\n }\n if (searchCategory === 'collections') {\n searchLimitRef.current = 4;\n collectionsRefetch();\n }\n if (searchCategory === 'artists') {\n searchLimitRef.current = 4;\n creatorRefetch();\n }\n if (searchCategory === 'all') {\n searchLimitRef.current = 2;\n nftsRefetch();\n collectionsRefetch();\n creatorRefetch();\n }\n };\n\n const debounceTime = 1000;\n\n useDebounce(\n () => {\n refetchData();\n },\n debounceTime,\n [searchValue],\n true\n );\n\n useEffect(() => {\n refetchData();\n }, [searchCategory]);\n\n const handleCategoryChange = (\n value:\n | Extract\n | 'artists'\n | 'all'\n ) => {\n setSearchCategory(value);\n };\n\n const handleInputChange = (e: { target: { value: string } }) => {\n setIsInputActive(true);\n setSearchValue(e.target.value.toLowerCase());\n };\n\n const isSlugInUrl = (slug: string): boolean => {\n const path = location.pathname;\n const parts = path.split('/');\n return parts.some(el => el === slug);\n };\n\n const handleRedirect = (isForNft?: boolean, isCollections?: boolean) => {\n const searchQueryMap = {\n nfts: 'searchNft',\n collections: 'searchCollection',\n artists: 'searchArtist',\n all: ''\n };\n const newSearchCategory =\n searchCategory === 'all'\n ? isForNft\n ? 'nfts'\n : isCollections\n ? 'collections'\n : 'artists'\n : searchCategory;\n\n const searchFunction = searchQueryMap[newSearchCategory];\n\n const url = `${\n isSlugInUrl(Configs.PAGE_URLS.EXPLORE)\n ? ''\n : getPath(Configs.PAGE_URLS.EXPLORE)\n }/${newSearchCategory}${\n updateQuery({\n [searchFunction]: searchValue\n }).search\n }`;\n resetState();\n history.push(url);\n if (!isSlugInUrl(Configs.PAGE_URLS.EXPLORE)) {\n window.location.reload();\n }\n };\n\n const handleCancelClick = () => {\n resetState();\n };\n\n const resetState = () => {\n setIsModalOpen(false);\n setSearchValue('');\n setSearchCategory('all');\n setIsInputActive(false);\n };\n\n useEffect(() => {\n if (\n (searchCategory === 'all' &&\n !nftsIsLoading &&\n !collectionsIsLoading &&\n !creatorIsLoading &&\n nfts?.data.data.length === 0 &&\n collections?.data.data.length === 0 &&\n creator?.data.data.length === 0) ||\n (searchCategory === 'nfts' &&\n !nftsIsLoading &&\n nfts?.data.data.length === 0) ||\n (searchCategory === 'collections' &&\n !collectionsIsLoading &&\n collections?.data.data.length === 0) ||\n (searchCategory === 'artists' &&\n !creatorIsLoading &&\n creator?.data.data.length === 0)\n ) {\n setIsInputActive(false);\n } else {\n setIsInputActive(true);\n }\n }, [nfts, collections, creator]);\n\n const NftSearchResults = () => (\n <>\n {t('generic.nfts')}\n {nfts?.data.data.map((nft: INft) => (\n \n ))}\n handleRedirect(true, false)}>\n {t('generic.searchAllResults', { count: nfts?.data.meta.total })}\n \n >\n );\n\n const CollectionSearchResults = () => (\n <>\n \n {t('collection.collections')}\n \n {collections?.data.data.map(collection => (\n \n \n {collection.total_supply} {t('generic.nfts')}\n \n \n ))}\n handleRedirect(false, true)}>\n {t('generic.searchAllResults', {\n count: collections?.data.meta.total\n })}\n \n >\n );\n\n const CreatorSearchResults = () => (\n <>\n {t('artist.creators')}\n {creator?.data.data.map(creator => (\n \n ))}\n handleRedirect(false, false)}>\n {t('generic.searchAllResults', {\n count: creator?.data.meta.total\n })}\n \n >\n );\n\n const SearchBody = (\n \n {isMobile() && (\n \n {t('generic.search')}\n \n \n \n \n )}\n\n \n \n }\n bordered={false}\n name=\"omni-search-input\"\n placeholder={t('generic.tryTyping')}\n style={{ flexGrow: '1' }}\n />\n {!isMobile() && (\n \n {t('generic.cancel')}\n \n )}\n \n \n {isInputActive ? (\n \n {nftsIsLoading || collectionsIsLoading || creatorIsLoading ? (\n <>\n \n {Array.from({ length: 4 }, (_, index) => (\n \n ))}\n \n >\n ) : (\n <>\n {!!nfts?.data.data.length && searchCategory === 'nfts' && (\n \n )}\n {!!collections?.data.data.length &&\n searchCategory === 'collections' && (\n \n )}\n {!!creator?.data.data.length &&\n searchCategory === 'artists' && }\n {(!!nfts?.data.data.length ||\n !!collections?.data.data.length ||\n !!creator?.data.data.length) &&\n searchCategory === 'all' && (\n <>\n \n \n \n >\n )}\n >\n )}\n \n ) : searchValue ? (\n \n \n \n ) : null}\n \n \n );\n\n return (\n setIsModalOpen(false)}\n hideCloseIcon\n bodyTransparent\n >\n \n {SearchBody}\n \n \n \n );\n};\n","import styled from 'styled-components';\nimport { Button as ButtonComponent } from 'components/Button';\n\nexport const SearchButtonWrapper = styled.div`\n display: flex;\n gap: 25px;\n align-items: center;\n`;\n\nexport const LeftWrapper = styled.div`\n display: flex;\n gap: 5px;\n align-items: center;\n`;\n\nexport const SearchText = styled.div`\n font-weight: 400;\n font-size: 12px;\n line-height: 16px;\n`;\n\nexport const Button = styled(ButtonComponent)`\n &&& {\n height: 40px;\n }\n`;\n","import { useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { SearchModal } from './components/SearchModal';\nimport * as Styled from './styles';\nimport { Search } from 'icons';\nimport { isMobile } from 'utils';\n\nexport const OmniSearch = () => {\n const { t } = useTranslation();\n const [isModalOpen, setIsModalOpen] = useState(false);\n\n return (\n <>\n setIsModalOpen(true)} type=\"secondary\">\n \n \n \n {!isMobile() && (\n {t('generic.search')}\n )}\n \n \n \n {isModalOpen && (\n \n )}\n >\n );\n};\n","import { useCallback } from 'react';\nimport { useRouteMatch } from 'react-router-dom';\nimport { useHistory } from 'hooks/generic/useHistory';\nimport { getPath } from 'utils/navigation/navigate';\nimport { EAccountRouteKeys } from 'constants/account/account-route-keys';\nimport { Configs } from 'constants/app/configs';\nimport {\n ELsKeyAuthReachedFromOptions,\n ELsKeys\n} from 'constants/app/storage-keys';\nimport { ViewModes } from 'interfaces';\n\nexport const useOpenAccountAuth = () => {\n const { push, goBack } = useHistory();\n const _isLoginRoute = useRouteMatch({\n path: ViewModes.DEFAULT\n ? EAccountRouteKeys.ACCOUNT_AUTH\n : EAccountRouteKeys.ACCOUNT_LOGIN\n });\n\n const _isRegisterRoute = useRouteMatch({\n path: ViewModes.DEFAULT\n ? EAccountRouteKeys.ACCOUNT_AUTH\n : EAccountRouteKeys.ACCOUNT_REGISTER\n });\n\n const openAccountLoginModal = useCallback(\n (isFromCartAuth?: boolean) => {\n switch (Configs.VIEW_MODE) {\n case ViewModes.DEFAULT:\n push(EAccountRouteKeys.ACCOUNT_AUTH);\n break;\n case ViewModes.FTNFT_AM:\n if (isFromCartAuth) {\n push(EAccountRouteKeys.ACCOUNT_AUTH);\n } else {\n push(EAccountRouteKeys.ACCOUNT_LOGIN);\n }\n break;\n case ViewModes.KIOSK:\n case ViewModes.KIOSK_AM:\n case ViewModes.KIOSK_VENICE:\n default:\n push(EAccountRouteKeys.ACCOUNT_LOGIN);\n break;\n }\n },\n [push]\n );\n\n const openAccountLogin = useCallback(() => {\n if (Configs.PAGE_URLS.LOGIN) {\n const authReachedFrom = JSON.parse(\n JSON.stringify(localStorage.getItem(ELsKeys.AUTH_REACHED_FROM)) ||\n 'null'\n );\n if (authReachedFrom === ELsKeyAuthReachedFromOptions.CREATE_NFT) {\n openAccountLoginModal();\n } else {\n window.location.href = getPath(Configs.PAGE_URLS.LOGIN);\n // returning true for indicating redirecting to another page\n return true;\n }\n }\n openAccountLoginModal();\n }, [openAccountLoginModal]);\n\n const openAccountRegisterModal = useCallback(() => {\n switch (Configs.VIEW_MODE) {\n case ViewModes.DEFAULT:\n push(EAccountRouteKeys.ACCOUNT_AUTH);\n break;\n case ViewModes.KIOSK:\n case ViewModes.FTNFT_AM:\n case ViewModes.KIOSK_AM:\n case ViewModes.KIOSK_VENICE:\n default:\n push(EAccountRouteKeys.ACCOUNT_REGISTER);\n break;\n }\n }, [push]);\n\n const openAccountRegister = useCallback(() => {\n if (Configs.PAGE_URLS.REGISTER) {\n window.location.href = getPath(Configs.PAGE_URLS.REGISTER);\n // returning true for indicating redirecting to another page\n return true;\n }\n openAccountRegisterModal();\n }, [openAccountRegisterModal]);\n\n const openAccountAuth = useCallback(() => {\n push(EAccountRouteKeys.ACCOUNT_AUTH);\n }, [push]);\n\n const openAccountResetPassword = useCallback(() => {\n switch (Configs.VIEW_MODE) {\n case ViewModes.DEFAULT:\n case ViewModes.KIOSK:\n case ViewModes.KIOSK_AM:\n case ViewModes.KIOSK_VENICE:\n break;\n case ViewModes.FTNFT_AM:\n push(EAccountRouteKeys.ACCOUNT_RESET_PASSWORD);\n break;\n default:\n break;\n }\n }, [push]);\n\n const openAccountForgotPassword = useCallback(() => {\n switch (Configs.VIEW_MODE) {\n case ViewModes.DEFAULT:\n case ViewModes.KIOSK:\n case ViewModes.KIOSK_AM:\n case ViewModes.KIOSK_VENICE:\n break;\n case ViewModes.FTNFT_AM:\n push(EAccountRouteKeys.ACCOUNT_FORGOT_PASSWORD);\n break;\n default:\n break;\n }\n }, [push]);\n\n return {\n openAccountLogin,\n openAccountLoginModal,\n openAccountRegister,\n openAccountRegisterModal,\n openAccountAuth,\n openAccountResetPassword,\n openAccountForgotPassword,\n goBack,\n isLoginRoute: !!_isLoginRoute,\n isRegisterRoute: !!_isRegisterRoute\n };\n};\n","import { useCallback, useEffect, useRef } from 'react';\nimport { FormInstance } from 'antd';\nimport { useWatch } from 'components/UI/Form';\nimport { usePrevious } from 'hooks/usePrevious';\n\ntype InitFormValues = {\n [key: string]: string | undefined;\n};\n\nexport const useSetInitialValues = (\n form?: FormInstance,\n /*\n * TODO: functionality must be changed to support falling back to previous\n * value automatically\n */\n previous?: { fieldName: string; fieldFallback?: any }\n) => {\n const fieldToWatch = useWatch(previous?.fieldName || '', form);\n const fieldPreviousValue = usePrevious(fieldToWatch);\n const fieldPreviousValueRef = useRef(fieldPreviousValue);\n\n useEffect(() => {\n fieldPreviousValueRef.current = fieldPreviousValue;\n }, [fieldPreviousValue]);\n\n const applyInitialValues = useCallback(\n (changedValue: string) => {\n if (!form) {\n return;\n }\n const initialValue: InitFormValues = {};\n if (previous?.fieldName) {\n initialValue[previous.fieldName] =\n fieldPreviousValueRef.current || previous.fieldFallback;\n } else {\n initialValue[changedValue] = undefined;\n }\n form.setFieldsValue(initialValue);\n },\n [previous?.fieldName, previous?.fieldFallback]\n );\n\n return { applyInitialValues };\n};\n","import { useCallback } from 'react';\nimport { setCartOpen } from 'appRedux/actions';\nimport { useAppDispatch } from 'appRedux/hooks';\n\nexport const useToggleCart = () => {\n const dispatch = useAppDispatch();\n\n const handleToggleCart = useCallback(\n (open: boolean) => dispatch(setCartOpen(open)),\n []\n );\n\n return {\n handleToggleCart\n };\n};\n","import { useCallback } from 'react';\nimport { useHistory } from 'hooks/generic/useHistory';\nimport { useIsImportBlockchainNft } from './useIsImportBlockchainNft';\n\nexport const useOpenNftView = () => {\n const { push } = useHistory();\n const isImportBlockchainNft = useIsImportBlockchainNft();\n\n const handleOpenNft = useCallback((nftUrlKey: string) => {\n return isImportBlockchainNft ? undefined : push(`/nfts/${nftUrlKey}`);\n }, []);\n\n return { handleOpenNft };\n};\n","import { useEffect } from 'react';\nimport { Subject } from 'rxjs';\n\n/*\n * event type in order to (listen to) or (fire) // Here we can use any type for\n * payload eslint-disable-next-line @typescript-eslint/no-explicit-any\n */\nexport type EventbusEvent = {\n /*\n * naming convention for key is: [scope].[action] ex.\n * StepViewerEvents.InitiateNextViewRender\n */\n key: string;\n id?: string | Symbol;\n payload?: T;\n};\n\ntype UseEventbusProps = {\n onEvent: (event: EventbusEvent) => void;\n};\n\n// eventloop Subject Observable\nexport const eventbusSubject = new Subject();\n\nexport const fireEvent = (event: EventbusEvent) => {\n eventbusSubject.next(event);\n};\n\n/**\n * Hook allows fire and list events between components\n * @param props - onEvent callback to fire on Subject Observable subscribed\n * event\n * @param deps - dependencies for onEvent\n * @returns Function (fireEvent callback)\n */\n// Here we can use any type for dependencies\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const useEventbus = (props?: UseEventbusProps, deps: any[] = []) => {\n const { onEvent } = props || {};\n\n useEffect(() => {\n // skip useEffect if onEvent is empty\n if (!onEvent) {\n return;\n }\n\n // subscribe to the Subject Observable\n const subscription = eventbusSubject.subscribe(onEvent);\n\n /*\n * we should unsubscribe after component's unmount to remove extra\n * subscribes\n */\n return () => {\n subscription.unsubscribe();\n };\n }, deps);\n\n return {\n /*\n * on fireEvent, we should push the event into the eventbus subject's\n * observer\n */\n fireEvent\n };\n};\n","import { useEventbus } from 'hooks/useEventbus';\n\nexport const useFireEvent = () => {\n const { fireEvent } = useEventbus(undefined, []);\n\n return { fireEvent };\n};\n","import { useHistory } from 'hooks/generic/useHistory';\n\nexport const useHandleCloseModalOrDrawer = () => {\n const { goBack } = useHistory();\n\n return goBack;\n};\n","import { useMemo } from 'react';\nimport { getTerminalMode } from 'utils/terminal';\n\nexport const useIsTerminalMode = () => {\n const isTerminalMode = useMemo(() => {\n return getTerminalMode();\n }, []);\n\n return { isTerminalMode };\n};\n","import { useRef } from 'react';\n\nexport const usePrevious = (value: T, initial?: T): T | undefined => {\n const ref = useRef({ target: value, previous: initial });\n\n if (JSON.stringify(ref.current.target) !== JSON.stringify(value)) {\n // The value changed.\n ref.current.previous = ref.current.target;\n ref.current.target = value;\n }\n\n return ref.current.previous as T;\n};\n","import qs from 'qs';\n\nexport const addQuery = (\n params: Record\n): { search: string } => {\n const currentParams = qs.parse(window.location.search, {\n ignoreQueryPrefix: true\n });\n\n return {\n search: qs.stringify(\n { ...currentParams, ...params },\n { addQueryPrefix: true }\n )\n };\n};\n\nexport const updateQuery = (\n params: Record\n): { search: string; pathname?: string } => {\n return {\n search: qs.stringify({ ...params }, { addQueryPrefix: true })\n };\n};\n","export const isImage = (type: string) => {\n return type.startsWith('image/');\n};\n","import { IFile } from 'interfaces';\n\ntype ImageArrayItem = IFile['file']['originFileObj'];\n\nexport const getImagesObject = (\n imagesArray: ImageArrayItem[],\n isEditingPhysicalNft: boolean\n): Record => {\n let newFileIndex = 0;\n return imagesArray.reduce((acc, cur) => {\n let newKey: string | number = 0;\n if (cur instanceof File) {\n newKey = `new_${newFileIndex}`;\n newFileIndex++;\n } else {\n newKey = cur.uid;\n }\n const key = isEditingPhysicalNft\n ? `images[${newKey}]`\n : `product[images][${newKey}]`;\n acc[key] = cur;\n return acc;\n }, {} as Record);\n};\n"],"names":["addNftToCart","nft","type","ADD_NFT_TO_CART","payload","removeNftFromCart","id","REMOVE_NFT_FROM_CART","setCartOpen","open","SET_CART_OPEN","setCartLoading","loading","SET_CART_LOADING","updateCartData","data","UPDATE_CART_DATA","DrawerPage","_ref","bodyStyle","children","delegated","_objectWithoutProperties","_excluded","usePageNoScroll","useHooryWidgetHiderCount","hiderType","handleCloseDrawer","useHandleCloseModalOrDrawer","_jsx","_Drawer","_objectSpread","push","headerStyle","top","left","zIndex","background","padding","border","marginLeft","marginRight","closeIcon","_Space","style","width","height","fontSize","justifyContent","borderRadius","Close","destroyOnClose","placement","overflow","onClose","_path","_path2","_path3","_path4","_path5","_path6","_path7","_path8","_path9","_path10","_path11","_path12","_path13","_extends","Object","assign","bind","target","i","arguments","length","source","key","prototype","hasOwnProperty","call","apply","this","excluded","sourceKeys","keys","indexOf","_objectWithoutPropertiesLoose","getOwnPropertySymbols","sourceSymbolKeys","propertyIsEnumerable","SvgEmptyImg","svgRef","title","titleId","props","viewBox","fill","xmlns","ref","d","ForwardRef","Empty","t","useTranslation","_Empty","image","EmptyImage","description","SIZE_STYLES","huge","wrapper","css","_templateObject","_taggedTemplateLiteral","icon","_templateObject2","count","_templateObject3","large","_templateObject4","_templateObject5","_templateObject6","medium","_templateObject7","_templateObject8","_templateObject9","small","_templateObject10","_templateObject11","_templateObject12","CartIcon","styled","Cart","_templateObject13","CartCountChip","div","_templateObject14","CartWrapper","_templateObject15","$size","_ref2","_ref3","_ref$size","size","items_count","useAppSelector","cart","info","handleToggleCart","useToggleCart","_jsxs","Styled","onClick","FtAnimations","POP_FROM_BOTTOM","keyframes","close","Wrapper","$isLargeWidth","$withCloseIcon","isMobile","TextCol","DEVICE","xl","Title","h3","$colored","$color","Text","p","ButtonWrapper","ButtonContainer","ConfirmationButton","Button","PopupBody","Popup","PopupCloseIcon","ImageWrapper","_templateObject16","Image","_Image","_templateObject17","ConfirmModal","memo","className","confirmText","_ref$imageSizes","imageSizes","visible","onCancel","_onClose","onSubmit","_ref$loading","cancel","submit","_ref$disabled","disabled","cancelText","_ref$cancelWithButton","cancelWithButton","_ref$closable","closable","_ref$submitAsCancel","submitAsCancel","_ref$showCancelButton","showCancelButton","_ref$showConfirmButto","showConfirmButton","_ref$blockButtons","blockButtons","_ref$coloredTitle","coloredTitle","_ref$isLargeWidth","isLargeWidth","titleColor","_useState","useState","_useState2","_slicedToArray","animation","setAnimation","_useState3","_useState4","display","setDisplay","timeoutRef","useRef","isFirstRender","hide","_asyncToGenerator","_regeneratorRuntime","mark","_callee","wrap","_context","prev","next","clearTimeout","current","Promise","r","setTimeout","stop","useEffect","BodyContent","preview","src","objectFit","dangerouslySetInnerHTML","__html","block","btnheight","Portal","isOpen","Modal","closeIconSize","concat","EGlobalClassnames","ConfirmPopup","e","stopPropagation","StepViewerLazyLoader","eventId","fireEvent","useFireEvent","StepViewerEvents","DisableControls","EnableControls","StepViewerProgressNavigation","$withoutWrapper","StepViewerProgressNavigationInfo","StepViewerProgressNavigationButtonsGroup","$block","StepViewerProgressNavigationButton","forwardRef","nextBtnText","prevBtnText","withoutWrapper","_ref$handleToNextStep","handleToNextStep","fixedFooterId","nextBtnDisabled","setNextBtnDisabled","controlsDisabled","setControlsDisabled","_useState5","_useState6","controlsHidden","setControlsHidden","_useState7","_useState8","nextBtnLoading","setNextBtnLoading","useEventbus","onEvent","DisableProceeding","EnableProceeding","SetNextLoading","UnsetNextLoading","HideControls","ShowControls","NextAction","nextBtnOnClick","PreviousAction","prevBtnOnClick","GoToStep","goToStep","_info$show","show","infoShow","infoText","text","currentStep","totalSteps","RenderPreviousView","RenderNextView","InitiateNextViewRender","FinishSteps","step","RenderStep","total","renderInfoBlock","ConditionalWrapper","condition","rootId","StepViewerWrapper","StepViewer","$width","numericToPx","$height","StepViewerHeader","$isSticky","StepViewerHeaderTitle","StepViewerHeaderSubtitle","h4","StepsWrapper","_ref4","$isStepsText","StepsWrapperLeft","StepsAsText","Steps","UiSteps","StepViewerBody","StepViewerBodyStepWrapper","StepViewerBodyLoaderFallback","_templateObject18","StepViewerFooter","_templateObject19","$contentFixed","_templateObject20","observer","IntersectionObserver","entry","isIntersecting","fireEventVanilla","StepperStepFinishedScrolling","scrollIntoView","behavior","inline","addEventListener","once","unobserve","disconnect","threshold","_currentStepProps$inf","_currentStepProps$inf2","header","_ref3$hideFooter","hideFooter","steps","_ref3$withoutWrapper","_ref3$hideProgressOnL","hideProgressOnLastStep","onFinish","_ref3$cacheable","cacheable","fixedHeaderId","footer","showStepsProgress","showNavigation","isSticky","_ref4$show","headerShow","_ref4$showStepsProgre","_ref4$showNavigation","_ref4$title","stepViewerTitle","_ref4$isSticky","_ref5$navigationButto","navigationButtonsFullWidth","setCurrentStep","cachedSteps","setCachedSteps","currentStepProps","stepsWrapperRef","footerMounted","setFooterMounted","showPlainStep","eventbusId","useId","_ref6","stepperStepObserver","headerSteps","map","index","shortText","toString","StepView","useMemo","render","component","loaderSize","loader","Spin","Suspense","fallback","showHeaderStepsOrNavigation","_stepsElement$hasChil","stepsElement","hasChildNodes","currentStepElement","observe","newRenderedViews","_toConsumableArray","renderedSteps","CachedStep","array","subtitle","items","labelPlacement","responsive","onChange","handleToNextStepItself","TooltipIconWrapper","$forLabel","TooltipIcon","Tooltip","_ref$isForLabel","isForLabel","_Tooltip","color","overlayInnerStyle","alt","MultiFileWrapper","FileImage","OverlayWrapper","FileName","RightWrapper","TrashIcon","Trash","MultipleFileListItem","file","handleDelete","_ref$showTrash","showTrash","isPreviewOpen","setIsPreviewOpen","isImage","name","onVisibleChange","FileOutlined","StyledShared","$darkTheme","uid","convertToBase64","resolve","reject","reader","FileReader","readAsDataURL","onload","result","onerror","error","UploadDocument","accept","maxFileSize","_ref$multiSelect","multiSelect","_ref$maxFileUpload","maxFileUpload","handleReturnPreview","externalFileList","_ref$uploadButton","uploadButton","handleUploadError","minWidth","minHeigth","landscapeOnly","allowedType","nftId","externalPromise","restProps","canUploadDialogOpen","setCanUploadDialogOpen","fileList","setFileList","singleFilePreviewOpen","setSingleFilePreviewOpen","customRequestErroredFileIdReference","fileListPresentable","_fileListPresentable$","_fileListPresentable$2","every","_file$preview","_file$preview$startsW","_file$preview2","_file$preview2$starts","startsWith","filesUpdatedEvent","CustomEvent","CustomEvents","filesUpdated","value","bubbles","detail","_defineProperty","document","dispatchEvent","constructErrorMessage","minHeight","additionalDimensions","validateFileDimensions","docTypes","_args","undefined","split","URL","createObjectURL","Error","includes","readAsArrayBuffer","_x","validateFileType","validateFileSize","generateFilePreview","_callee2","_context2","url","sent","_x2","updateFileStates","prevState","customRequest","_callee3","_context3","t0","_message","message","abrupt","handleSuccess","onSuccess","_x3","handleChange","_callee4","_ref5","newFileList","response","_params","currentFileList","_context4","params","getImagesObject","originFileObj","singleFile","filter","_x4","useCallback","updatedData","item","UploadButton","singleItemRender","_fileListPresentable$3","_fileListPresentable$4","_fileListPresentable$5","_Fragment","onMouseEnter","onMouseLeave","$multiSelect","_Upload","showUploadList","beforeUpload","_file","_fileList","some","LIST_IGNORE","openFileDialogOnClick","AddIcon","withIcon","x","y","Eye","clipPath","transform","FileUpload","fillRule","clipRule","TopWrapper","UploadButtonWrapper","UploadIcon","UploadTitle","DescriptionWrapper","ImageContainer","_ref7","_ref8","_ref9","FileImageSingle","Overlay","PreviewIcon","_templateObject21","UploadEditIcon","_templateObject22","UploadMultipleBtn","_templateObject23","ButtonText","_templateObject24","ListWrapper","_templateObject25","UploadEditWrapper","_templateObject26","_templateObject27","AttentionHintWrapper","AttentionHintTopWrapper","AttentionHintTextWrapper","AttentionText","AttentionHintIcon","AttentionHintText","span","$sameLine","AttentionHintInnerWrapper","AttentionHint","subText","sameLine","AttentionImg","FormComponent","_Form","Form","FormItem","rulesWithWhiteSpaceRule","rules","isWhitespaceForbidden","whitespace","allRules","mergedProps","Item","isRequiredHidden","useForm","useWatch","InputWrapper","$withClear","$fullwidth","InputLabel","InputErrorText","ClearIcon","CloseSecondary","Input","_props$value","label","errorText","withClear","fullWidth","prefix","onClear","_props$onChange","_Input","Password","bordered","status","TYPE_STYLES","fit","static","fixed","absolute","SpinWrapper","$withBackground","$type","_ref$type","_ref$withBackground","withBackground","_Spin","STYLES","getTerminalMode","AntSteps","_Steps","COUNTRIES","ReactQueryKeys","Pattern","email","password","alphanumericKey","phone","number","username","walletAddress","materialName","AccountFormFields","useReturnFormFields","form","fieldNames","isForLogin","defaultValues","formFields","ArtistName","required","tooltip","defaultValue","UserName","pattern","DisplayName","Email","Phone","Occupation","PasswordConfirmation","getFieldValue","validator","_","BankAccount","ContactName","ContactEmail","ContactPhone","RegExp","CeoAddress","CeoCity","CeoState","CeoPostCode","CeoCountry","RegisterGoal","TermsAndConditions","PromotionalEmails","field","Array","isArray","f","find","RegisterContext","createContext","selectedUserType","setSelectedUserType","RegisterProvider","Provider","useRegisterValues","useContext","PhoneNumberInput","PhoneInput","Label","$required","AgeLimitMessage","returnFormFields","containerClass","inputProps","autoFocus","dropdownClass","country","initialValue","valuePropName","marginBottom","_Checkbox","RegisterCollectorStepTwo","layout","position","Fragment","IS_KIOSK_AM_MODE","UploadsWrapper","CheckboxGroup","Select","SelectComponent","GroupWrapper","FormItemLabel","UserTypes","UploadFile","mediaDetails","applyInitialValues","useSetInitialValues","getValueFromEvent","RegisterCompanyStepTwo","_useRegisterValues","dispatch","useAppDispatch","_useQuery","useQuery","queryKey","EAccountRouteKeys","ACCOUNT_REGISTER","Company","queryFn","registerCompany","getFieldsValue","enabled","retry","refetch","isFetching","validateFields","then","catch","handleBankAccountChange","formattedValue","replace","slice","setFieldValue","placeholder","Option","endingFormFields","mediaFields","formats","fetchCompanySuccess","_error$response","singleMedia","TextIconWrapper","TextWrapper","TextHeading","TextDescription","ButtonComponent","RegisterCompanyStepThree","window","location","href","getPath","AntSpin","RegisterSpinner","RegisterCompanyPhaseTwo","_useAppSelector","company","companyLoading","companyData","isCompanyDataPresent","setIsCompanyDataPresent","setFieldsValue","terms_and_conditions","contact_email","InfoBlock","imageType","RegisterCreatorStepTwo","requestParams","user_name","getCreatorsList","_data$payload","_data$payload$data","setFields","errors","RegisterCreatorStepThreeWrapper","RegisterCreatorStepThree","UserCardWrapper","$isActive","Meta","_Card","REGISTRATION_OPTIONS","Collector","Layers","Creator","Roller","BriefCase","RegisterFirstStep","option","avatar","ResendHint","Counter","CheckEmailModal","checkEmailModalVisible","_ref$resendOnMount","resendOnMount","_useCountdown","useCountdown","countStart","intervalMs","_useCountdown2","_useCountdown2$","startCountdown","resetCountdown","goToHomeButtonLoading","setGoToHomeButtonLoading","RESEND_EMAIL","resendVerificationEmail","resendButtonLoading","isRefetching","transitionToHome","resendEmail","BellImage","InfoBlockLoggedIn","useHistory","handleOpenAccount","ACCOUNT_PROFILE_INFO","buttonProps","Register","registerId","searchParams","useSearchParams","_useIsLoggedIn","useIsLoggedIn","isLoggedIn","isLoginPending","openAccountLogin","useOpenAccountAuth","searchValue","setSearchValue","setCheckEmailModalVisible","companySuccessModalVisible","setCompanySuccessModalVisible","history","_useForm","preserve","inputParams","_inputParams","first_name","last_name","account_type","AccountType","User","token","locale","getCurrentLanguage","registerUserRequest","registerUserParams","addQuery","getCompanyToken","companySteps","_steps","firstErrorField","errorFields","scrollToField","scrollMode","Success","RegisterCompleteContext","RegisterCompleteProvider","RegisterCollectorComplete","_useRegisterCompleteV","RegisterComplete","_useState2$","ACCOUNT_REGISTER_COMPLETE","only_validate_token","RestBoolean","False","completeRegisterUserRequest","completeRegisterUserParams","_error$response$data","_message2","useStepViewerNavigateOnEnter","callback","_useStepViewerNavigat","previous","useStepViewerNavigation","handleKeyUp","useToken","setUserToken","_token","getUserToken","LoginForgotPassword","LoginInfoBlock","LoginInfoSignUp","LoginBodySpace","ESumsubKeys","ESumsubApplicantStatus","KYCDrawer","closePage","currentApplicantStatus","callCreateApplicant","setCallCreateApplicant","callGetSumsubToken","setCallGetSumsubToken","sumsubToken","setSumsubToken","userToken","CREATE_APPLICANT","ApiClient","post","headers","authorization","createApplicant","refetchOnWindowFocus","refetchApplicant","_useQuery2","SUMSUB_ACCESS_TOKEN","getSumsubAccessToken","sumsubData","sumsubError","_sumsubError$response","_sumsubError$response2","SumsubWebSdk","accessToken","expirationHandler","config","lang","getDocumentLanguage","onMessage","_payload$reviewResult","reviewStatus","COMPLETED","reviewResult","reviewAnswer","success","setSession","getAccountCreatorData","getUserData","onError","Login","loginId","_useHistory","goBack","configs","useAccountValues","showKYC","setShowKYC","showEmailVerificationModal","setShowEmailVerificationModal","setToken","setCurrentApplicantStatus","ACCOUNT_LOGIN","loginUser","remove","GET_APPLICATION_STATUS","get","applicantStatus","applicantData","applicantRefetch","applicantError","onSubmitLogin","_useOpenAccountAuth","openAccountRegister","openAccountForgotPassword","_data$data","userData","setUserData","accountLayout","AccountLayout","ONPAGE","_applicantData$data","_applicantData$data2","_applicantData$data3","_applicantData$data3$","review_status","review_result","review_answer","_error$response2","_error$response2$data","_data$data2","is_kyc_verified","is_company_verified","onKeyUp","SignUpInfoBlock","SignUpInfoLink","ResetPassword","resetPasswordId","_useSearchParams","setParams","ACCOUNT_RESET_PASSWORD","resetPassword","password_confirmation","ModalBody","ForgotPassword","forgotPasswordId","ACCOUNT_FORGOT_PASSWORD","forgotPassword","CONFIRM_MODAL_DATA","VerifyEmail","queryToken","ACCOUNT_VERIFY_EMAIL","verifyEmail","confirmModalVisible","setConfirmModalVisible","AuthButton","AuthSignUpButton","AuthButtonSkeleton","_Skeleton","AuthButtonsWrapper","EScreenType","VIEWS","_VIEWS","WEB","IS_DEFAULT_MODE","active","margin","Avatar","TERMINAL","UserPanelSkeleton","screenType","useIsTerminalMode","isTerminalMode","View","UserPanelTerminalViewWrapper","WalletInfo","Link","LinkComponent","Balance","Username","AuthButtonsKioskLayoutSkeleton","AuthButtonsDefaultLayout","lazy","AuthButtonsFtnftAmLayout","AuthButtonsKioskLayout","AUTH_BUTTONS_LAYOUTS","_AUTH_BUTTONS_LAYOUTS","ViewModes","DEFAULT","skeleton","KIOSK","FTNFT_AM","joinWithOneButton","KIOSK_AM","KIOSK_VENICE","AuthButtons","Configs","VIEW_MODE","UserPanelWebView","UserPanelTerminalView","UserPanel","IS_KIOSK_VENICE_MODE","ProfileLayout","Merchandise","Transactions","MyPayments","CreatedNfts","CollectedNfts","CollectionNftList","ProfileOverview","CreateNft","CreateNftModal","ListNftModal","NftMintSuccessModal","NftMintFailModal","PrintNftModal","PrintNft","BecomeCreatorModal","ImportNftsModal","MODALS","_objectSpread2","AccountQueryKey","modal","CHOOSE_CREATE_NFT","BECOME_CREATOR","LIST_NFT","MINT_SUCCESS_NFT","MINT_FAIL_NFT","CHOOSE_PRINT_NFT","PRINT_NFT","IS_CONNECT_METAMASK_AVAILABLE","IMPORT_NFTS","default","Profile","match","useRouteMatch","path","ACCOUNT_PROFILE","isModalOpen","openCreateNftModal","useOpenCreateNftModal","isDrawerOpen","pathname","ACCOUNT_PROFILE_WALLET_CALLBACK","ModalComponent","JSON","parse","stringify","localStorage","getItem","ELsKeys","AUTH_REACHED_FROM","ELsKeyAuthReachedFromOptions","CREATE_NFT","includeAccountPath","removeItem","Route","Switch","Redirect","exact","from","to","ACCOUNT_PROFILE_MY_NFTS_COLLECTION","ACCOUNT_PROFILE_MY_NFTS","ACCOUNT_PROFILE_MY_NFTS_OWNED","ACCOUNT_PROFILE_CREATE_NFT","ACCOUNT_PROFILE_EDIT_NFT","ACCOUNT_PROFILE_TRANSACTIONS","ACCOUNT_PROFILE_MERCHANDISE","ACCOUNT_PROFILE_MY_PAYMENTS","AccountWrapper","Account","defaultProps","_layout","POPUP","_view","accountView","AccountView","_showCart","showCart","_joinWithOneButton","isOnPage","isRegisterView","REGISTER","isLoginView","LOGIN","AccountProvider","IS_FTNFT_AM_MODE","OmniSearch","useCheckUserForNftCreation","shouldGoToCreatedNfts","shouldSkipEffectCheck","accountCreatorData","accountCreator","creatorLoaded","checkUserForNftCreation","IS_KIOSK_GENERIC","obj","isEmptyObject","nextLocation","updateQuery","useLayoutEffect","_useCheckUserForNftCr","createNftUrlQuery","ACCOUNT_PROFILE_MY_NFTS_NFTS","search","closeCreateNftModal","AccountContext","SearchWrapper","SearchTitleWrapper","SearchTitle","SearchResults","CategoryHeader","CollectionCounter","CancelButton","EmptyWrapper","CloseButton","button","CategoryPicker","handleCategoryChange","_Select","options","RedirectFooter","handleRedirect","ItemWrapper","ItemName","ItemCaption","ItemImage","SearchListItem","_nft$media","collection","creator","handleOpenNft","useOpenNftView","handleOpenCollection","useOpenCollectionView","handleOpenArtist","useOpenArtistView","handleOpenItem","url_key","slug","logo_image","media","logo_url","placeholderImage","SearchListItemSkeleton","maxWidth","shape","SearchModal","setIsModalOpen","searchCategory","setSearchCategory","isInputActive","setIsInputActive","searchLimitRef","useLocation","SEARCH_NFT_LIST","getOmniSearchNfts","limit","staleTime","Infinity","nfts","nftsIsLoading","nftsRefetch","SEARCH_COLLECTION_LIST","getOmniSearchCollections","is_empty_total_saleable_supply","collections","collectionsIsLoading","collectionsRefetch","_useQuery3","SEARCH_CREATOR_LIST","getOmniSearchCreator","is_empty_total_owned_saleable_supply","creatorIsLoading","creatorRefetch","refetchData","useDebounce","isSlugInUrl","el","isForNft","isCollections","newSearchCategory","searchFunction","artists","all","PAGE_URLS","EXPLORE","resetState","reload","handleCancelClick","NftSearchResults","meta","CollectionSearchResults","total_supply","CreatorSearchResults","SearchBody","toLowerCase","addonBefore","flexGrow","hideCloseIcon","bodyTransparent","SearchButtonWrapper","LeftWrapper","SearchText","Search","_isLoginRoute","ACCOUNT_AUTH","_isRegisterRoute","openAccountLoginModal","isFromCartAuth","openAccountRegisterModal","openAccountAuth","openAccountResetPassword","isLoginRoute","isRegisterRoute","fieldToWatch","fieldName","fieldPreviousValue","usePrevious","fieldPreviousValueRef","changedValue","fieldFallback","isImportBlockchainNft","useIsImportBlockchainNft","nftUrlKey","eventbusSubject","Subject","event","deps","subscription","subscribe","unsubscribe","initial","currentParams","qs","ignoreQueryPrefix","addQueryPrefix","imagesArray","isEditingPhysicalNft","newFileIndex","reduce","acc","cur","newKey","File"],"sourceRoot":""}