{"version":3,"file":"app.aa13952956ab4493d0ad.js","mappings":"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","sources":["webpack:///./pages/login/consts.ts","webpack:///./pages/login/login.png","webpack:///./pages/login/styled.ts","webpack:///./pages/login/components/styled.ts","webpack:///./pages/login/components/SignInForm.tsx","webpack:///./pages/login/store/selectors.ts","webpack:///./pages/login/store/index.ts","webpack:///./pages/login/components/PersonalDataForm.tsx","webpack:///./pages/login/components/RegistrationTitle.tsx","webpack:///./pages/login/components/SideModalContent.tsx","webpack:///./pages/login/components/ResetPasswordForm.tsx","webpack:///./pages/login/components/RestorePasswordForm.tsx","webpack:///./utils/tab.tsx","webpack:///./pages/offers/consts.ts","webpack:///./pages/offers/store/utils.ts","webpack:///./pages/offers/store/selectors.ts","webpack:///./pages/offers/store/index.ts","webpack:///./pages/offers/offers-tabs/offers-card/styled.ts","webpack:///./pages/offers/offers-tabs/offers-card/OfferCardHeader.tsx","webpack:///./pages/offers/offers-tabs/offers-card/OfferCard.tsx","webpack:///./pages/offers/offers-tabs/styled.ts","webpack:///./pages/offers/offers-tabs/EmptyOffers.tsx","webpack:///./pages/offers/offers-tabs/OffersTab.tsx","webpack:///./pages/offers/offers-tabs/OffersTabs.tsx","webpack:///./pages/offers/styled.ts","webpack:///./pages/offers/sagas/api.ts","webpack:///./pages/offers/sagas/offersSagas.ts","webpack:///./pages/offers/sagas/offerSagas.ts","webpack:///./pages/offers/offer/styled.ts","webpack:///./pages/offers/offer/links-and-landings/styled.ts","webpack:///./pages/offers/offer/links-and-landings/Links.tsx","webpack:///./pages/offers/offer/links-and-landings/LandingCard.tsx","webpack:///./pages/offers/offer/links-and-landings/Landings.tsx","webpack:///./pages/offers/offer/links-and-landings/LinkAndLandingTab.tsx","webpack:///./pages/offers/offer/Badge.tsx","webpack:///./pages/offers/offer/information/ic_chevron.png","webpack:///./pages/offers/offer/information/ic_chevron_up.png","webpack:///./pages/offers/offer/information/styled.ts","webpack:///./pages/offers/offer/information/MarkdownContent.tsx","webpack:///./pages/offers/offer/information/Advertiser.tsx","webpack:///./pages/offers/offer/information/InformationTab.tsx","webpack:///./pages/offers/OfferPage.tsx","webpack:///./components/payment-request/styled.ts","webpack:///./components/payment-request/store.ts","webpack:///./components/payment-request/selectors.tsx","webpack:///./components/payment-request/consts.ts","webpack:///./components/payment-request/PaymentRequest.tsx","webpack:///./components/payment-request/sagas/api.ts","webpack:///./components/payment-request/sagas/saga.ts","webpack:///./components/payment-request/sagas/index.ts","webpack:///./components/payment-request/index.tsx","webpack:///./pages/dashboard/styled.ts","webpack:///./pages/dashboard/components/steps/styled.ts","webpack:///./pages/dashboard/components/steps/Step.tsx","webpack:///./pages/dashboard/components/steps/Steps.tsx","webpack:///./pages/dashboard/consts.ts","webpack:///./pages/dashboard/store/selectors.ts","webpack:///./pages/dashboard/store/index.ts","webpack:///./pages/dashboard/components/statistics/styled.ts","webpack:///./pages/dashboard/components/statistics/Percent.tsx","webpack:///./pages/dashboard/components/statistics/StatisticBlock.tsx","webpack:///./pages/dashboard/components/statistics/consts.ts","webpack:///./pages/dashboard/components/statistics/_StatisticBlockSkeleton.tsx","webpack:///./pages/dashboard/components/statistics/Statistics.tsx","webpack:///./pages/dashboard/components/top-offers/styled.ts","webpack:///./pages/dashboard/components/top-offers/TopOffer.tsx","webpack:///./pages/dashboard/components/top-offers/TopOffers.tsx","webpack:///./pages/dashboard/_DashboardSkeleton.tsx","webpack:///./pages/dashboard/utils.ts","webpack:///./pages/statistics/styled.ts","webpack:///./pages/statistics/columns.tsx","webpack:///./pages/statistics/consts.ts","webpack:///./pages/statistics/api.ts","webpack:///./pages/dashboard/sagas/api.ts","webpack:///./pages/dashboard/sagas/index.ts","webpack:///./store.ts","webpack:///./pages/login/sagas/api.ts","webpack:///./pages/login/sagas/validation.ts","webpack:///./pages/login/sagas/sagas.ts","webpack:///./pages/login/sagas/utils.ts","webpack:///./pages/login/sagas/resetPasswordSagas.ts","webpack:///./pages/account-settings/consts.ts","webpack:///./pages/account-settings/store/store.ts","webpack:///./pages/account-settings/store/selectors.ts","webpack:///./pages/account-settings/sagas/api.ts","webpack:///./pages/account-settings/sagas/changePasswordSagas.ts","webpack:///./pages/account-settings/sagas/validation.ts","webpack:///./pages/account-settings/sagas/personalInfoSagas.ts","webpack:///./pages/account-settings/sagas/paymentSettingsSagas.ts","webpack:///./sagas/index.ts","webpack:///./pages/login/sagas/index.ts","webpack:///./pages/offers/sagas/index.ts","webpack:///./pages/account-settings/sagas/index.ts","webpack:///./components/regular-payouts/store.ts","webpack:///./components/regular-payouts/selectors.tsx","webpack:///./components/regular-payouts/consts.ts","webpack:///./components/regular-payouts/sagas/api.ts","webpack:///./components/regular-payouts/sagas/saga.ts","webpack:///./components/regular-payouts/sagas/index.ts","webpack:///./components/regular-payouts/styled.ts","webpack:///./components/regular-payouts/RegularPayout.tsx","webpack:///./components/regular-payouts/PayoutDate.tsx","webpack:///./components/regular-payouts/index.tsx","webpack:///./components/regular-payouts/RegularRequestStub.tsx","webpack:///./components/header/styles.ts","webpack:///./components/header/Header.tsx","webpack:///./pages/test-modals/TestModals.tsx","webpack:///./pages/account-settings/styled.ts","webpack:///./pages/account-settings/account-settings-tabs/styled.ts","webpack:///./pages/account-settings/account-settings-tabs/SecurityTab.tsx","webpack:///./pages/account-settings/account-settings-tabs/_PersonalInfoTabSkeleton.tsx","webpack:///./pages/account-settings/account-settings-tabs/PersonalInfoTab.tsx","webpack:///./pages/account-settings/account-settings-tabs/payment-settings/styled.ts","webpack:///./pages/account-settings/account-settings-tabs/payment-settings/PaymentMethod.tsx","webpack:///./pages/account-settings/account-settings-tabs/payment-settings/PaymentsInfo.tsx","webpack:///./pages/account-settings/account-settings-tabs/payment-settings/_PaymentSettingsTabSkeleton.tsx","webpack:///./pages/account-settings/account-settings-tabs/payment-settings/PaymentSettingsTab.tsx","webpack:///./pages/account-settings/AccountSettings.tsx","webpack:///./pages/payouts/types.ts","webpack:///./pages/payouts/styled.ts","webpack:///./pages/payouts/PayoutsRequest.tsx","webpack:///./pages/payouts/columns.tsx","webpack:///./pages/payouts/api.ts","webpack:///./pages/payouts/History.tsx","webpack:///./pages/payouts/Payouts.tsx","webpack:///./config.tsx","webpack:///./pages/dashboard/Dashboard.tsx","webpack:///./pages/offers/Offers.tsx","webpack:///./pages/statistics/Statistics.tsx","webpack:///./pages/login/SignIn.tsx","webpack:///./pages/login/Registration.tsx","webpack:///./pages/login/ForgotPassword.tsx","webpack:///./pages/login/RestorePassword.tsx","webpack:///./pages/test-buttons/TestButtons.tsx","webpack:///./pages/test-dropdowns/TestDropdowns.tsx","webpack:///./pages/test-filters/TestFilters.tsx","webpack:///./components/navigation/styles.ts","webpack:///./components/navigation/Navigation.tsx","webpack:///./components/sidebar-account-info/styled.ts","webpack:///./components/sidebar-account-info/SidebarAccountInfo.tsx","webpack:///./components/sidebar/styles.ts","webpack:///./components/sidebar/Sidebar.tsx","webpack:///./components/layout/styles.ts","webpack:///./index.tsx","webpack:///./components/layout/AuthLayout.tsx","webpack:///./components/layout/ProtectedLayout.tsx"],"sourcesContent":["export const STORE_NAME = 'login';\n\nexport const HEADER = 'AffShore';\nexport const SIGN_IN_FORM = 'loginForm';\nexport const PERSONAL_DATA_REGISTER_FORM = 'personalDataForm';\nexport const RESET_PASSWORD_FORM = 'resetPasswordForm';\nexport const RESTORE_PASSWORD_FORM = 'restorePasswordForm';\n\nexport const SIGN_IN_FORM_FIELDS = {\n email: 'email',\n password: 'password',\n isTermsAccepted: 'isTermsAccepted',\n};\n\nexport const RESTORE_PASSWORD_FORM_FIELDS = {\n password: 'password',\n confirmPassword: 'confirmPassword',\n};\n\nexport const RESET_PASSWORD_FORM_FIELDS = {\n email: 'email',\n};\n\nexport const PERSONAL_DATA_FORM_FIELDS = {\n firstname: 'firstname',\n lastname: 'lastname',\n messengerType: 'messengerType',\n contactValue: 'contactValue',\n};\n\nexport enum MESSENGER_TYPE {\n WhatsApp = 'WhatsApp',\n Telegram = 'Telegram',\n Skype = 'Skype',\n}\nexport const MESSENGER_TYPE_DICTIONARY = ['WhatsApp', 'Telegram', 'Skype'].map(\n (type) => ({ id: type, label: type, value: type })\n);\n","export default __webpack_public_path__ + \"images/login.png\";","import styled from 'styled-components';\n\nimport { classNameWithPrefix } from '@crm-framework/utils';\n\nimport background from './login.png';\n\nconst blockName = 'login';\n\nexport const ContentWrapper = styled.div.attrs({\n className: classNameWithPrefix(blockName, 'content-wrapper'),\n})`\n width: 100%;\n height: inherit;\n display: flex;\n flex-direction: column;\n border-radius: var(--default-border-radius);\n align-content: space-between;\n`;\n\nexport const LoginHeader = styled.h1.attrs({\n className: classNameWithPrefix(blockName, 'header'),\n})`\n position: fixed;\n left: 100px;\n bottom: 100px;\n font-family: Montserrat;\n font-size: 128px;\n font-weight: 700;\n line-height: 120%;\n width: 590px;\n overflow-wrap: break-word;\n color: var(--hover-light-color);\n z-index: 11;\n`;\n\nexport const LabelWithLinkWrapper = styled.div.attrs({\n className: classNameWithPrefix(blockName, 'label-with-link-wrapper'),\n})`\n display: flex;\n justify-content: space-between;\n align-items: center;\n`;\n\nexport const ForgotPasswordLinkWrapper = styled.a.attrs({\n className: classNameWithPrefix(blockName, 'forgot-password-link-wrapper'),\n})`\n color: var(--description-text-color) !important;\n font-size: 14px;\n font-weight: 400;\n line-height: 130%;\n margin-bottom: 8px;\n`;\n\nexport const TermsAndConditionsWrapper = styled(\n ForgotPasswordLinkWrapper\n).attrs({\n className: classNameWithPrefix(blockName, 'terms-and-conditions-wrapper'),\n})`\n text-decoration: underline;\n margin-bottom: 0px;\n line-height: 100%;\n`;\n\nexport const BackButtonWrapper = styled.button.attrs({\n className: classNameWithPrefix(blockName, 'back-button-wrapper'),\n})`\n width: 32px;\n height: 32px;\n flex-shrink: 0;\n border-radius: 8px;\n background: var(--hover-secondary-color);\n border: var(--hover-secondary-color);\n margin-right: 16px;\n cursor: pointer;\n`;\n\nexport const LoginPageWrapper = styled.h1.attrs({\n className: classNameWithPrefix(blockName, 'page-wrapper'),\n})`\n position: relative;\n overflow: hidden;\n width: 100vw;\n height: 100vh;\n\n &:before {\n position: absolute;\n content: '';\n width: 100vw;\n height: 100vh;\n opacity: 0.3;\n z-index: -1;\n background-color: transparent;\n background-repeat: round;\n background-image: url(${background});\n transform: scale(1, -1);\n }\n`;\n\nexport const StatusMessageWrapper = styled.div.attrs({\n className: classNameWithPrefix(blockName, 'status-message-wrapper'),\n})`\n position: absolute;\n top: 35%;\n text-align: center;\n width: 90%;\n`;\n","import styled from 'styled-components';\n\nimport { classNameWithPrefix } from '@crm-framework/utils';\n\nimport { generateFontStyle } from '@ams-package/theme';\n\nconst blockName = 'login';\n\nexport const StepCounterWrapper = styled.div.attrs({\n className: classNameWithPrefix(blockName, 'step-counter-wrapper'),\n})`\n color: var(--hover-secondary-color);\n display: flex;\n justify-content: flex-end;\n align-items: center;\n gap: 10px;\n`;\n\nconst ProgressBar = styled.div.attrs({\n className: classNameWithPrefix(blockName, 'progress-bar'),\n})`\n display: flex;\n width: 32px;\n height: 6px;\n flex-direction: column;\n justify-content: center;\n align-items: flex-start;\n gap: 10px;\n border-radius: 100px;\n`;\n\nexport const ProgressEmpty = styled(ProgressBar).attrs({\n className: classNameWithPrefix(blockName, 'progress-empty'),\n})`\n background: var(--hover-secondary-color);\n`;\n\nexport const ProgressBarFull = styled(ProgressBar).attrs({\n className: classNameWithPrefix(blockName, 'progress-full'),\n})`\n background: var(--primary-color);\n`;\n\nexport const ProgressBarHalf = styled.div.attrs({\n className: classNameWithPrefix(blockName, 'progress-half'),\n})`\n width: 19px;\n height: 6px;\n border-radius: 100px;\n background: var(--primary-color);\n`;\n\nexport const BottomContentWrapper = styled.div.attrs({\n className: classNameWithPrefix(blockName, 'bottom-content-wrapper'),\n})`\n margin-top: auto;\n`;\n\nexport const DescriptionWrapper = styled.div.attrs({\n className: classNameWithPrefix(blockName, 'description-wrapper'),\n})`\n line-height: 22px;\n padding-bottom: 24px;\n color: var(--description-text-color);\n`;\n\nexport const BottomDescriptionWrapper = styled.div.attrs({\n className: classNameWithPrefix(blockName, 'bottom-description-wrapper'),\n})`\n line-height: 22px;\n padding-top: 12px;\n text-align: center;\n color: var(--description-text-color);\n`;\n\nexport const CheckboxWrapper = styled.div.attrs({\n className: classNameWithPrefix(blockName, 'checkbox-wrapper'),\n})`\n display: flex;\n width: 377px;\n align-items: center;\n gap: 8px;\n font-size: 14px;\n font-weight: 400;\n color: var(--description-text-color);\n`;\n\nexport const SideModalTitleWrapper = styled.div.attrs({\n className: classNameWithPrefix(blockName, 'side-modal-title-wrapper'),\n})`\n width: 100%;\n ${generateFontStyle('h1')}\n`;\n","import React from 'react';\nimport { useSelector } from 'react-redux';\nimport { useNavigate } from 'react-router';\nimport { Grid } from 'styled-css-grid';\n\nimport Form, { FormField } from '@xcritical/forms';\n\nimport {\n PasswordFormField,\n InputFormField,\n PasswordValidationFormField,\n} from '@ams-package/input';\nimport { Label } from '@ams-package/label';\nimport { CheckboxFormField } from '@ams-package/checkbox';\nimport { getAppConfig } from '@ams-package/app';\n\nimport { SIGN_IN_FORM, SIGN_IN_FORM_FIELDS } from '../consts';\nimport {\n ForgotPasswordLinkWrapper,\n LabelWithLinkWrapper,\n TermsAndConditionsWrapper,\n} from '../styled';\n\nimport { CheckboxWrapper } from './styled';\n\nexport const SignInForm: React.FC<{\n canResetPassword?: boolean;\n isSignUp?: boolean;\n}> = ({ canResetPassword = false, isSignUp = false }) => {\n const config = useSelector(getAppConfig);\n const navigate = useNavigate();\n\n const goToReset = () => {\n navigate('/reset-password');\n };\n\n return (\n
\n \n
\n \n \n
\n
\n \n \n {canResetPassword && (\n \n Forgot Password?\n \n )}\n \n \n
\n {isSignUp && (\n \n \n I have read and agreed to the\n \n Terms and Conditions\n \n \n )}\n
\n
\n );\n};\n","import { formSelector } from '@xcritical/forms';\n\nimport {\n SIGN_IN_FORM,\n STORE_NAME,\n PERSONAL_DATA_REGISTER_FORM,\n RESET_PASSWORD_FORM,\n RESTORE_PASSWORD_FORM,\n} from '../consts';\nimport {\n ISignInFormState,\n IPersonalDataFormState,\n IResetPasswordFormState,\n IRestorePasswordFormState,\n} from '../types';\n\nexport const signInFormSelector = (state): ISignInFormState =>\n formSelector(state, SIGN_IN_FORM);\n\nexport const signUpFormSelector = (state): IPersonalDataFormState =>\n formSelector(state, PERSONAL_DATA_REGISTER_FORM);\n\nexport const resetPasswordFormSelector = (state): IResetPasswordFormState =>\n formSelector(state, RESET_PASSWORD_FORM);\n\nexport const restorePasswordFormSelector = (state): IRestorePasswordFormState =>\n formSelector(state, RESTORE_PASSWORD_FORM);\n\nexport const messengerTypeSelector = (state): string | undefined =>\n signUpFormSelector(state).model.messengerType?.id;\n\nexport const signUpInProgress = (state): boolean =>\n state[STORE_NAME]?.isRegistrationInfoValidated ?? false;\n\nexport const getIsLoading = (state): boolean => state[STORE_NAME].isLoading;\nexport const getIsPasswordReset = (state): boolean =>\n state[STORE_NAME].isPasswordReset;\nexport const getIsPasswordRestored = (state): boolean =>\n state[STORE_NAME].isPasswordRestored;\n","import { createAction, createSlice, PayloadAction } from '@reduxjs/toolkit';\n\nimport { STORE_NAME } from '../consts';\nimport { ILoginState } from '../types';\n\nexport * from './selectors';\nexport const SIGN_IN = `${STORE_NAME}/sign-in`;\nexport const SIGN_UP = `${STORE_NAME}/sign-up`;\nexport const RESET_PASSWORD = `${STORE_NAME}/reset-password`;\nexport const RESTORE_PASSWORD = `${STORE_NAME}/restore-password`;\nexport const VALIDATE_REGISTER_FORM = `${STORE_NAME}/validate-register-form`;\n\nexport const initialState: ILoginState = {\n isLoading: false,\n isRegistrationInfoValidated: false,\n isPasswordReset: false,\n isPasswordRestored: false,\n};\n\nconst loginStore = createSlice({\n name: STORE_NAME,\n initialState,\n reducers: {\n setIsLoading: (state, { payload }: PayloadAction) => {\n state.isLoading = payload;\n },\n setIsRegistrationInfoValidated: (state) => {\n state.isRegistrationInfoValidated = true;\n },\n setIsPasswordReset: (state, { payload }: PayloadAction) => {\n state.isPasswordReset = payload;\n },\n setIsPasswordRestored: (state, { payload }: PayloadAction) => {\n state.isPasswordRestored = payload;\n },\n },\n});\n\nexport const loginActions = {\n ...loginStore.actions,\n signIn: createAction(SIGN_IN),\n resetPassword: createAction(RESET_PASSWORD),\n validateRegisterForm: createAction(VALIDATE_REGISTER_FORM),\n signUp: createAction(SIGN_UP),\n restorePassword: createAction(RESTORE_PASSWORD),\n};\n\nexport const loginReducer = loginStore.reducer;\n","import React from 'react';\nimport { useSelector } from 'react-redux';\nimport { Grid } from 'styled-css-grid';\n\nimport Form, { FormField } from '@xcritical/forms';\n\nimport { InputFormField } from '@ams-package/input';\nimport { Label } from '@ams-package/label';\nimport { Select } from '@ams-package/select';\n\nimport {\n PERSONAL_DATA_REGISTER_FORM,\n PERSONAL_DATA_FORM_FIELDS,\n MESSENGER_TYPE,\n MESSENGER_TYPE_DICTIONARY,\n} from '../consts';\nimport { messengerTypeSelector } from '../store';\n\nexport const PersonalDataForm: React.FC = () => {\n const messengerType = useSelector(messengerTypeSelector);\n const isWhatsApp = messengerType === MESSENGER_TYPE.WhatsApp;\n\n return (\n
\n \n
\n \n \n
\n
\n \n \n
\n
\n \n \n
\n {messengerType && (\n
\n \n \n
\n )}\n
\n
\n );\n};\n","import React from 'react';\nimport { useSelector } from 'react-redux';\n\nimport { signUpInProgress } from '../store';\n\nimport {\n StepCounterWrapper,\n ProgressBarFull,\n ProgressEmpty,\n ProgressBarHalf,\n SideModalTitleWrapper,\n} from './styled';\n\nexport const RegistrationTitle: React.FC = () => {\n const isInProgress = useSelector(signUpInProgress);\n\n return (\n <>\n \n {isInProgress ? 'A bit more to go' : \"Let's get started\"}\n \n \n {isInProgress ? '2/2' : '1/2'}\n {isInProgress ? (\n \n ) : (\n \n \n \n )}\n \n \n );\n};\n","import React from 'react';\nimport { useSelector } from 'react-redux';\n\nimport { signUpInProgress } from '../store';\n\nimport { PersonalDataForm } from './PersonalDataForm';\nimport { SignInForm } from './SignInForm';\nimport {\n DescriptionWrapper,\n BottomDescriptionWrapper,\n BottomContentWrapper,\n} from './styled';\n\nconst FIRST_STEP_DESCRIPTION = 'Enter your email and password to register';\nconst SECOND_STEP_DESCRIPTION =\n 'Their implementation is important. You can change them later in your personal account';\n\nexport const SideModalContent: React.VFC<{ pageButton?: React.ReactNode }> = ({\n pageButton,\n}) => {\n const isInProgress = useSelector(signUpInProgress);\n\n return (\n <>\n \n {!isInProgress ? FIRST_STEP_DESCRIPTION : SECOND_STEP_DESCRIPTION}\n \n {!isInProgress ? : }\n \n {pageButton}\n \n Already have an account?{' '}\n Sign in\n \n \n \n );\n};\n","import React from 'react';\nimport { Grid } from 'styled-css-grid';\n\nimport Form, { FormField } from '@xcritical/forms';\n\nimport { InputFormField } from '@ams-package/input';\nimport { Label } from '@ams-package/label';\n\nimport { RESET_PASSWORD_FORM, RESET_PASSWORD_FORM_FIELDS } from '../consts';\n\nexport const ResetPasswordForm: React.FC = () => (\n
\n \n
\n \n \n
\n
\n
\n);\n","import React from 'react';\nimport { Grid } from 'styled-css-grid';\n\nimport Form, { FormField } from '@xcritical/forms';\n\nimport {\n PasswordFormField,\n PasswordValidationFormField,\n} from '@ams-package/input';\nimport { Label } from '@ams-package/label';\n\nimport { RESTORE_PASSWORD_FORM, RESTORE_PASSWORD_FORM_FIELDS } from '../consts';\n\nexport const RestorePasswordForm: React.FC = () => (\n
\n \n
\n \n \n
\n
\n \n Confirm password\n \n \n
\n
\n
\n);\n","import React from 'react';\n\nimport { HeaderItemType, ITabPanel } from '@ams-package/tabs/types';\n\nexport type Tab = {\n TabIcon?: React.ElementType;\n key?: string;\n title?: string;\n HeaderItem?: React.FC;\n Content: React.ElementType;\n disabled?: boolean;\n TitleBadge?: React.ElementType;\n url?: string;\n};\n\nexport const createTabsConfig = (formattedData: Tab[]): ITabPanel[] | null => {\n if (!formattedData.length) return null;\n\n return formattedData.reduce(\n (\n tabs,\n {\n TabIcon,\n title,\n Content,\n disabled = false,\n TitleBadge,\n HeaderItem,\n key,\n url,\n },\n index\n ) => [\n ...tabs,\n {\n key: key ?? title ?? index,\n url,\n header: (\n <>\n {TabIcon && }\n {title}\n {TitleBadge && }\n \n ),\n HeaderItem,\n content: ,\n disabled,\n },\n ],\n []\n );\n};\n","export const STORE_NAME = 'offers';\n\nexport const OFFER_ACTIVATION_MODAL_NAME = 'offer-activation-modal';\n","import { IOffer } from '../types';\n\nexport const sortByIsTopOffer = (offers: IOffer[]) =>\n [...offers].sort((a, b) =>\n // eslint-disable-next-line no-nested-ternary\n a.isTopOffer === b.isTopOffer ? 0 : a.isTopOffer ? -1 : 1\n );\n","import { createSelector } from 'reselect';\n\nimport { getAffiliateId } from '@ams-package/app';\n\nimport { STORE_NAME } from '../consts';\nimport { IOffer, ILandingPage, IAdvertiser } from '../types';\n\nexport const offersSelector = (state) => state[STORE_NAME];\n\nexport const myOffersSelector = (state): IOffer[] =>\n state[STORE_NAME].myOffersData;\n\nconst myOffersCountSelector = (state): number =>\n state[STORE_NAME].myOffersDataCount;\n\nexport const allOffersSelector = (state): IOffer[] =>\n state[STORE_NAME].allOffersData;\n\nconst allOffersCountSelector = (state): number =>\n state[STORE_NAME].allOffersDataCount;\n\nexport const availableOffersSelector = (state): IOffer[] =>\n state[STORE_NAME].availableOffersData;\n\nconst availableOffersCountSelector = (state): number =>\n state[STORE_NAME].availableOffersDataCount;\n\nexport const isReadySelector = (state): boolean => state[STORE_NAME].isReady;\n\nexport const offersDataSelector = createSelector(\n allOffersCountSelector,\n myOffersCountSelector,\n availableOffersCountSelector,\n allOffersSelector,\n myOffersSelector,\n availableOffersSelector,\n (\n allOffersCount,\n myOffersCount,\n availableOffersCount,\n allOffers,\n myOffers,\n availableOffers\n ) => ({\n allOffersCount,\n myOffersCount,\n availableOffersCount,\n allOffers,\n myOffers,\n availableOffers,\n })\n);\n\n// offer\nexport const offerLinksSelector = (state): string =>\n state[STORE_NAME].offerData?.links?.mixedTraffic;\n\nexport const offerNameSelector = (state): string =>\n state[STORE_NAME].offerData?.name ?? '';\n\nexport const landingPageDisabledSelector = (state): boolean =>\n !state[STORE_NAME].offerData?.isActivated;\n\nexport const allOfferLandingsSelector = (state): ILandingPage[] | null =>\n state[STORE_NAME].landingPages;\n\nexport const offerLandingsSelector = createSelector(\n allOfferLandingsSelector,\n landingPageDisabledSelector,\n (landingPages, isDisabled): ILandingPage[] | null => {\n if (!landingPages) return null;\n\n return isDisabled\n ? landingPages\n : landingPages.filter((lp) => lp.isActivated);\n }\n);\n\nexport const lastCopiedLinkSelector = (state): string | null =>\n state[STORE_NAME].lastCopiedLink;\n\nexport const offersLinkQuerySelector = createSelector(\n offerLinksSelector,\n getAffiliateId,\n landingPageDisabledSelector,\n lastCopiedLinkSelector,\n (url, affId, isDisabled, lastCopiedLink) => ({\n url,\n affId,\n isDisabled,\n lastCopiedLink,\n })\n);\n\n// info\nexport const markdownOfferDataSelector = (\n state\n): { rates?: string; rules?: string } => ({\n rates: state[STORE_NAME].offerData?.rates,\n rules: state[STORE_NAME].offerData?.rules,\n});\n\nexport const advertiserSelector = (state): IAdvertiser | undefined => {\n const ad: IAdvertiser | undefined = state[STORE_NAME].offerData?.advertiser;\n\n if (!ad) return undefined;\n\n return Object.keys(ad).reduce(\n (res, key) => ({\n ...res,\n [key]: typeof ad[key] === 'string' ? ad[key] : ad[key].join(', '),\n }),\n ad\n );\n};\n","import { createSlice, PayloadAction, createAction } from '@reduxjs/toolkit';\n\nimport { STORE_NAME } from '../consts';\nimport {\n IOffer,\n IOffersState,\n IOfferData,\n ILandingPage,\n ILandingPagesPayload,\n IOfferInitPayload,\n} from '../types';\n\nimport { sortByIsTopOffer } from './utils';\nexport * from './selectors';\n\nexport const initialState: IOffersState = {\n myOffersData: [],\n myOffersDataCount: 0,\n allOffersData: [],\n allOffersDataCount: 0,\n availableOffersData: [],\n availableOffersDataCount: 0,\n offerData: null,\n landingPages: null,\n lastCopiedLink: null,\n isReady: false,\n};\n\nconst offersStore = createSlice({\n name: STORE_NAME,\n initialState,\n reducers: {\n setIsReady: (state, { payload }: PayloadAction) => {\n state.isReady = payload;\n },\n // offers\n setMyOffersData: (state, { payload }: PayloadAction) => {\n state.myOffersData = sortByIsTopOffer(payload);\n state.myOffersDataCount = payload.length;\n },\n setAllOffersData: (state, { payload }: PayloadAction) => {\n state.allOffersData = sortByIsTopOffer(payload);\n state.allOffersDataCount = payload.length;\n },\n setAvailableOffersData: (state, { payload }: PayloadAction) => {\n state.availableOffersData = sortByIsTopOffer(payload);\n state.availableOffersDataCount = payload.length;\n },\n // offer\n setSelectedOffer: (state, { payload }: PayloadAction) => {\n state.offerData = payload;\n },\n setLandingPages: (state, { payload }: PayloadAction) => {\n state.landingPages = [...payload].sort((a, b) =>\n // eslint-disable-next-line no-nested-ternary\n a.isDefault === b.isDefault ? 0 : a.isDefault ? -1 : 1\n );\n },\n setLastCopiedLink: (state, { payload }: PayloadAction) => {\n state.lastCopiedLink = payload;\n },\n resetSelectedOffer: (state) => {\n state.offerData = null;\n state.landingPages = null;\n },\n },\n});\n\nconst OFFERS_INIT = `${STORE_NAME}/offers-init`;\nconst OFFER_INIT = `${STORE_NAME}/offer-init`;\nconst GET_LANDING_PAGES = `${STORE_NAME}/get-landing-pages`;\n\nexport const offersActions = {\n ...offersStore.actions,\n initOffers: createAction(OFFERS_INIT),\n initOffer: createAction(OFFER_INIT),\n getLandingPages: createAction(GET_LANDING_PAGES),\n};\n\nexport const offersReducer = offersStore.reducer;\n","import styled from 'styled-components';\nimport { NavLink } from 'react-router-dom';\n\nimport { classNameWithPrefix } from '@crm-framework/utils';\n\nimport { generateFontStyle } from '@ams-package/theme';\n\nconst blockName = 'offers-card';\n\nexport const CardWrapper = styled.div.attrs({\n className: classNameWithPrefix(blockName, 'wrapper'),\n})`\n width: 100%;\n border-radius: 20px;\n background-color: var(--modal-background-color);\n border: 1px solid var(--modal-background-color);\n padding: var(--offers-card-wrapper-padding);\n cursor: pointer;\n\n &:hover {\n border: 1px solid var(--primary-color);\n }\n`;\n\nexport const CardHeader = styled.div.attrs({\n className: classNameWithPrefix(blockName, 'header'),\n})`\n display: grid;\n grid-template-columns: 2fr 2fr;\n align-items: center;\n padding-bottom: var(--offers-card-header-padding-bottom);\n`;\n\nexport const CardTitleWrapper = styled.h3.attrs({\n className: classNameWithPrefix(blockName, 'title-wrapper'),\n})`\n display: flex;\n align-items: center;\n gap: var(--offers-card-title-wrapper-gap);\n`;\n\nexport const CardTitle = styled.h3.attrs({\n className: classNameWithPrefix(blockName, 'title'),\n})`\n display: flex;\n align-items: center;\n gap: var(--offers-card-title-gap);\n`;\n\nexport const CardButtonsWrapper = styled.div.attrs({\n className: classNameWithPrefix(blockName, 'buttons-wrapper'),\n})`\n display: flex;\n justify-content: flex-end;\n gap: var(--offers-card-buttons-wrapper-gap);\n`;\n\nexport const Link = styled(NavLink).attrs({\n className: classNameWithPrefix(blockName, 'link'),\n})`\n display: flex;\n align-items: center;\n text-decoration: underline;\n text-underline-offset: 2px;\n color: var(--link-color);\n ${generateFontStyle('body-2m')};\n`;\n\nexport const CardBody = styled.div.attrs({\n className: classNameWithPrefix(blockName, 'body'),\n})`\n display: grid;\n grid-template-columns: 1fr 1fr 1fr 2fr;\n grid-template-rows: auto;\n gap: 80px;\n padding-top: var(--offers-card-body-padding-top);\n border-top: 1px solid var(--secondary-border-color);\n`;\n\nexport const CardBodyColumn = styled.div.attrs({\n className: classNameWithPrefix(blockName, 'body-column'),\n})`\n display: flex;\n flex-direction: column;\n justify-content: space-between;\n gap: 12px;\n`;\n\nexport const CardColumnTitle = styled.div.attrs({\n className: classNameWithPrefix(blockName, 'column-title'),\n})`\n ${generateFontStyle('body-2r')};\n color: var(--description-text-color);\n`;\n\nexport const CardColumnValue = styled.h3.attrs({\n className: classNameWithPrefix(blockName, 'column-value'),\n})`\n max-width: 300px;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n`;\n\nexport const CardStatusColumnValue = styled(CardColumnValue).attrs({\n className: classNameWithPrefix(blockName, 'status-column-value'),\n})<{\n isActive: boolean;\n}>`\n font-weight: 700;\n color: ${({ isActive }) =>\n isActive ? 'var(--active-color)' : 'var(--danger-text-color)'};\n`;\n","import React, { SyntheticEvent, useCallback, useEffect } from 'react';\nimport { useCopyToClipboard } from 'react-use';\nimport { useNavigate } from 'react-router';\n\nimport Badge from '@xcritical/badge';\nimport { notify } from '@xcritical/notification';\n\nimport { PathNames } from '@ams-package/router';\nimport { Button } from '@ams-package/button';\nimport { CopySuccessContent } from '@ams-package/utils';\n\nimport {\n CardHeader,\n CardTitleWrapper,\n CardTitle,\n // CardIcon,\n CardButtonsWrapper,\n Link,\n} from './styled';\n\nexport const OfferCardHeader: React.FC<{\n id: number;\n name: string;\n isTopOffer: boolean;\n isActive: boolean;\n hasOneLanding: boolean;\n link: string | null;\n handlerOpenCard: () => void;\n}> = ({\n id,\n name,\n isTopOffer,\n isActive,\n hasOneLanding,\n link,\n handlerOpenCard,\n}) => {\n const navigate = useNavigate();\n const [copiedText, copyToClipboard] = useCopyToClipboard();\n\n useEffect(() => {\n if (copiedText.value) {\n notify.success();\n }\n }, [copiedText]);\n\n const copyButton = useCallback(\n (e: SyntheticEvent) => {\n e.stopPropagation();\n\n if (link && hasOneLanding) {\n copyToClipboard(link);\n } else {\n navigate(PathNames.offer.replace(':id', String(id)));\n }\n },\n [id, link, hasOneLanding]\n );\n\n return (\n \n \n \n {/* TODO: add logo after it will be decided where it should be came from */}\n {/* \n \n */}\n {name}\n \n {isTopOffer && (\n \n TOP OFFER\n \n )}\n \n \n {isActive ? (\n <>\n e.stopPropagation()}>\n View statistics\n \n \n Copy link\n \n \n ) : (\n \n Activate\n \n )}\n \n \n );\n};\n","import React, { useCallback, useMemo } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { useNavigate } from 'react-router';\n\nimport { getUser } from '@ams-package/app';\nimport { PathNames } from '@ams-package/router';\n\nimport { IOffer } from '../../types';\nimport { offersActions } from '../../store';\n\nimport {\n CardWrapper,\n CardBody,\n CardBodyColumn,\n CardColumnTitle,\n CardColumnValue,\n CardStatusColumnValue,\n} from './styled';\nimport { OfferCardHeader } from './OfferCardHeader';\n\nexport const OffersCard: React.FC = ({\n id,\n name,\n // TODO: change isActivated & isOfferActive to one boolean prop after backend will change it\n isActivated,\n isOfferActive,\n offerDealType,\n offerDealValue,\n offerDealKey,\n isTopOffer,\n countries,\n landingPagesRedirectLinks,\n links: { mixedTraffic },\n}) => {\n const dispatch = useDispatch();\n const user = useSelector(getUser);\n\n const navigate = useNavigate();\n const dealAmount = () => {\n if (!offerDealKey) return '';\n\n return offerDealValue;\n };\n const COLUMN_VALUES = {\n offerDealAmount: dealAmount(),\n offerDealType,\n countries,\n isOfferActive: isOfferActive && isActivated ? 'Active' : 'Not Active',\n };\n\n const TITLES = useMemo(\n () => ({\n isOfferActive: 'Status',\n offerDealType: 'Offer Type',\n offerDealAmount: offerDealKey ? `${offerDealKey}` : '',\n countries: 'Countries',\n }),\n [offerDealKey]\n );\n\n const linkOfFirstLanding = useMemo(() => {\n if (!landingPagesRedirectLinks?.[0] || !user) return null;\n\n const { campaignId, landingPageId } = landingPagesRedirectLinks[0];\n\n return !landingPageId || !campaignId\n ? ''\n : `${mixedTraffic}/?affiliateId=${user.id}${\n campaignId ? `&campaignId=${campaignId}` : ''\n }${landingPageId ? `&landingPageId=${landingPageId}` : ''}`;\n }, [mixedTraffic, landingPagesRedirectLinks, user]);\n\n const handleOpenCard = useCallback(() => {\n dispatch(offersActions.resetSelectedOffer());\n navigate(PathNames.offer.replace(':id', String(id)));\n }, [id]);\n\n return (\n \n \n \n {Object.keys(TITLES).map((column) => (\n \n {TITLES[column]}\n {TITLES[column] === TITLES.isOfferActive ? (\n \n {COLUMN_VALUES[column]}\n \n ) : (\n \n {COLUMN_VALUES[column]}\n \n )}\n \n ))}\n \n \n );\n};\n","import styled from 'styled-components';\n\nimport { classNameWithPrefix } from '@crm-framework/utils';\n\nconst blockName = 'offers-tabs';\n\nexport const EmptyOffersWrapper = styled.div.attrs({\n className: classNameWithPrefix(blockName, 'empty-offers-wrapper'),\n})`\n flex: auto;\n display: flex;\n justify-content: center;\n align-items: center;\n`;\n\nexport const EmptyOffersContentWrapper = styled.div.attrs({\n className: classNameWithPrefix(blockName, 'empty-offers-content-wrapper'),\n})`\n width: 340px;\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n gap: 32px;\n`;\n\nexport const EmptyOffersTextWrapper = styled.div.attrs({\n className: classNameWithPrefix(blockName, 'empty-offers-text-wrapper'),\n})`\n color: var(--hover-secondary-color);\n`;\n","import React from 'react';\n\nimport { Button } from '@ams-package/button';\n\nimport {\n EmptyOffersContentWrapper,\n EmptyOffersWrapper,\n EmptyOffersTextWrapper,\n} from './styled';\n\nexport const EmptyOffers: React.FC = () => (\n \n \n \n You have no accepted offers yet\n \n \n Choose available offers\n \n \n \n);\n","import React, { memo } from 'react';\nimport { useSelector } from 'react-redux';\n\nimport { Skeleton } from '@ams-package/skeleton';\n\nimport { IOffer } from '../types';\nimport { isReadySelector } from '../store';\n\nimport { OffersCard } from './offers-card';\nimport { EmptyOffers } from './EmptyOffers';\n\nexport const OffersTab: React.FC<{\n data: IOffer[];\n order: number;\n}> = memo(({ data, order }) => {\n const isReady = useSelector(isReadySelector);\n\n if (!isReady) return ;\n\n if (order === 2 && !data.length) return ;\n\n return (\n <>\n {data.map(({ id, ...props }) => (\n \n ))}\n \n );\n});\n","import React, { useMemo } from 'react';\nimport { useSelector } from 'react-redux';\n\nimport { TabsWithNavigation } from '@ams-package/tabs';\nimport { svgComponents } from '@ams-package/icons';\nimport { PathNames } from '@ams-package/router';\n\nimport { createTabsConfig } from '../../../utils';\nimport { offersDataSelector } from '../store';\n\nimport { OffersTab } from './OffersTab';\n\nconst TAB_PATHS = {\n allOffers: `${PathNames.offers}?tabName=allOffers`,\n availableOffers: `${PathNames.offers}?tabName=availableOffers`,\n myOffers: `${PathNames.offers}?tabName=myOffers`,\n};\n\nexport const OffersTabs: React.FC = () => {\n const {\n allOffersCount,\n myOffersCount,\n availableOffersCount,\n allOffers,\n availableOffers,\n myOffers,\n } = useSelector(offersDataSelector);\n\n const tabData = useMemo(\n () => [\n {\n TabIcon: svgComponents.AllOffersIcon,\n title: `All offers (${allOffersCount})`,\n Content: () => ,\n key: 'allOffers',\n url: TAB_PATHS.allOffers,\n },\n {\n TabIcon: svgComponents.AvailableOffersIcon,\n title: `Available offers (${availableOffersCount})`,\n Content: () => ,\n key: 'availableOffers',\n url: TAB_PATHS.availableOffers,\n },\n {\n TabIcon: svgComponents.MyOffersIcon,\n title: `My offers (${myOffersCount})`,\n Content: () => ,\n key: 'myOffers',\n url: TAB_PATHS.myOffers,\n },\n ],\n [\n allOffersCount,\n myOffersCount,\n availableOffersCount,\n allOffers,\n availableOffers,\n myOffers,\n ]\n );\n\n const tabPanels = useMemo(() => createTabsConfig(tabData), [tabData]);\n\n return tabPanels ? : <>;\n};\n","import styled, { createGlobalStyle } from 'styled-components';\n\nimport { classNameWithPrefix } from '@crm-framework/utils';\n\nconst blockName = 'offers';\n\nexport const OfferCssStyles = createGlobalStyle`\n :root {\n // size:\n --offers-card-icon-size: 40px;\n --offers-card-button-max-width: 160px;\n\n // gap:\n --offers-card-title-wrapper-gap: 24px;\n --offers-card-title-gap: 16px;\n --offers-card-buttons-wrapper-gap: 32px;\n\n // padding:\n --offers-card-wrapper-padding: 24px;\n --offers-card-header-padding-bottom: 16px;\n --offers-card-body-padding-top: 16px;\n\n @media (min-width: 1700px) {\n //size:\n --offers-card-icon-size: 48px;\n --offers-card-button-max-width: 300px;\n\n // gap:\n --offers-card-title-wrapper-gap: 32px;\n --offers-card-title-gap: 20px;\n --offers-card-buttons-wrapper-gap: 40px;\n\n // padding:\n --offers-card-wrapper-padding: 32px;\n --offers-card-header-padding-bottom: 20px;\n --offers-card-body-padding-top: 20px;\n }\n\n @media (max-width: 1200px) {\n //size:\n --offers-card-icon-size: 32px;\n\n // gap:\n --offers-card-title-wrapper-gap: 20px;\n --offers-card-buttons-wrapper-gap: 24px;\n\n // padding:\n --offers-card-wrapper-padding: 20px;\n --offers-card-header-padding-bottom: 12px;\n --offers-card-body-padding-top: 12px;\n }\n }\n`;\n\nexport const OffersWrapper = styled.div.attrs({\n className: classNameWithPrefix(blockName, 'wrapper'),\n})`\n display: flex;\n flex-direction: column;\n`;\n","import { authorizedWretch } from '@ams-package/utils';\n\nimport { IOffer, IOffersRequest, IOfferData, ILandingPage } from '../types';\n\nexport const getOffers = async (payload: IOffersRequest): Promise =>\n authorizedWretch('/api/offers/list').post(payload).json();\n\nexport const getOffer = async (id: string): Promise =>\n authorizedWretch(`/api/offers/${id}`).get().json();\n\nexport const getLandingPages = async (id: string): Promise =>\n authorizedWretch(`/api/offers/${id}/linked-landing-pages`).get().json();\n","import { put } from 'redux-saga/effects';\nimport { call } from 'typed-redux-saga';\n\nimport { handleServerError } from '@ams-package/utils';\n\nimport { offersActions } from '../store';\n\nimport { getOffers } from './api';\n\nexport function* handleOffersInit(): Generator {\n try {\n yield put(offersActions.setIsReady(false));\n yield handleAllOffersInit();\n yield handleMyOffersInit();\n yield handleAvailableOffersInit();\n } catch (error) {\n handleServerError({ error });\n } finally {\n yield put(offersActions.setIsReady(true));\n }\n}\n\nfunction* handleAllOffersInit(): Generator {\n try {\n const allOffers = yield* call(getOffers, { isMine: null });\n\n yield put(offersActions.setAllOffersData(allOffers));\n } catch (error) {\n handleServerError({ error });\n }\n}\n\nfunction* handleMyOffersInit(): Generator {\n try {\n const myOffers = yield* call(getOffers, { isMine: true });\n\n yield put(offersActions.setMyOffersData(myOffers));\n } catch (error) {\n handleServerError({ error });\n }\n}\n\nfunction* handleAvailableOffersInit(): Generator {\n try {\n const availableOffers = yield* call(getOffers, { isMine: false });\n\n yield put(offersActions.setAvailableOffersData(availableOffers));\n } catch (error) {\n handleServerError({ error });\n }\n}\n","import { put } from 'redux-saga/effects';\nimport { PayloadAction } from '@reduxjs/toolkit';\nimport { call } from 'typed-redux-saga';\n\nimport { xcriticalModalOpen } from '@xcritical/modal';\n\nimport { handleServerError } from '@ams-package/utils';\n\nimport { offersActions } from '../store';\nimport { ILandingPagesPayload, IOfferInitPayload } from '../types';\nimport { OFFER_ACTIVATION_MODAL_NAME } from '../consts';\n\nimport { getOffer, getLandingPages } from './api';\n\nexport function* handleOfferInit({\n payload,\n}: PayloadAction) {\n try {\n const { offerId } = payload;\n\n yield put(offersActions.setIsReady(false));\n\n const offerData = yield* call(getOffer, offerId);\n\n if (!(offerData.isActivated && offerData.isActive)) {\n yield put(xcriticalModalOpen(OFFER_ACTIVATION_MODAL_NAME));\n }\n\n yield put(offersActions.setSelectedOffer(offerData));\n yield put(offersActions.getLandingPages({ offerId }));\n } catch (error) {\n handleServerError({ error });\n } finally {\n yield put(offersActions.setIsReady(true));\n }\n}\n\nexport function* handleGetLandingPages({\n payload,\n}: PayloadAction) {\n try {\n const landingPages = yield* call(getLandingPages, payload.offerId);\n\n yield put(offersActions.setLandingPages(landingPages));\n } catch (error) {\n yield handleServerError({ error });\n }\n}\n","import styled from 'styled-components';\n\nimport { classNameWithPrefix } from '@crm-framework/utils';\n\nimport { generateFontStyle } from '@ams-package/theme';\n\nconst blockName = 'offer';\n\nexport const BackButtonWrapper = styled.button.attrs({\n className: classNameWithPrefix(blockName, 'back-button'),\n})`\n width: 32px;\n height: 32px;\n flex-shrink: 0;\n border-radius: 8px;\n background: var(--hover-secondary-color);\n border: var(--hover-secondary-color);\n cursor: pointer;\n`;\n\nexport const HeaderWrapper = styled.div.attrs({\n className: classNameWithPrefix(blockName, 'header-wrapper'),\n})`\n display: inline-flex;\n align-items: center;\n gap: 16px;\n`;\n\nexport const BadgeWrapper = styled.div.attrs({\n className: classNameWithPrefix(blockName, 'badge-wrapper'),\n})`\n font-size: var(--body-1m-font-size);\n`;\n\nexport const LandingDescription = styled.div.attrs({\n className: classNameWithPrefix(blockName, 'landing-description'),\n})`\n ${generateFontStyle('body-3r')}\n color: var(--description-text-color);\n`;\n\nexport const DescriptionTitleWrapper = styled.div.attrs({\n className: classNameWithPrefix(blockName, 'description-title-wrapper'),\n})`\n ${generateFontStyle('body-2r')}\n color: var(--description-text-color);\n`;\n\nexport const ColumnWrapper = styled.div.attrs({\n className: classNameWithPrefix(blockName, 'column-wrapper'),\n})`\n display: flex;\n flex: 49%;\n flex-direction: column;\n`;\n\nexport const InfoColumnWrapper = styled.div.attrs({\n className: classNameWithPrefix(blockName, 'info-column-wrapper'),\n})`\n display: flex;\n gap: 20px;\n flex-direction: column;\n`;\n\nexport const CellWrapper = styled.div.attrs({\n className: classNameWithPrefix(blockName, 'cell-wrapper'),\n})`\n display: flex;\n gap: 8px;\n flex-direction: column;\n`;\n","import styled from 'styled-components';\n\nimport { classNameWithPrefix } from '@crm-framework/utils';\n\nimport { generateFontStyle } from '@ams-package/theme';\n\nconst blockName = 'links-and-landings';\n\nexport const TabWrapper = styled.div.attrs({\n className: classNameWithPrefix(blockName, 'tab-wrapper'),\n})`\n width: 100%;\n display: flex;\n position: relative;\n flex: auto auto auto;\n justify-content: space-between;\n gap: 100px;\n`;\n\n// modal\nexport const ModalContentWrapper = styled.div.attrs({\n className: classNameWithPrefix(blockName, 'modal-content-wrapper'),\n})`\n display: flex;\n flex-direction: column;\n gap: 32px;\n`;\n\nexport const ModalDescriptionWrapper = styled.div.attrs({\n className: classNameWithPrefix(blockName, 'modal-description-wrapper'),\n})`\n display: flex;\n flex-direction: column;\n justify-content: center;\n text-align: center;\n align-items: center;\n gap: 16px;\n`;\n\nexport const ModalButtonsWrapper = styled.div.attrs({\n className: classNameWithPrefix(blockName, 'modal-buttons-wrapper'),\n})`\n display: flex;\n width: 100%;\n flex-direction: column;\n gap: 10px;\n button {\n padding: var(--account-info-buttons-padding);\n }\n`;\n\n// card\nexport const BodyWrapper = styled.div.attrs({\n className: classNameWithPrefix(blockName, 'body-wrapper'),\n})`\n margin-top: 8px;\n display: flex;\n flex-direction: column;\n gap: 16px;\n`;\n\nexport const CardWrapper = styled.div.attrs({\n className: classNameWithPrefix(blockName, 'card-wrapper'),\n})`\n border-radius: 20px;\n background-color: var(--dark-grey);\n border: 1px solid var(--dark-grey);\n padding: 16px;\n display: flex;\n flex-direction: column;\n`;\n\nexport const CardHeaderWrapper = styled.div.attrs({\n className: classNameWithPrefix(blockName, 'card-header-wrapper'),\n})`\n display: flex;\n gap: var(--offers-card-title-wrapper-gap);\n border-bottom: 1px solid var(--secondary-border-color);\n padding-bottom: 16px;\n justify-content: space-between;\n`;\n\nexport const LandingTitleWrapper = styled.div.attrs({\n className: classNameWithPrefix(blockName, 'landing-title-wrapper'),\n})`\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 8px;\n`;\n\nexport const LandingInfoWrapper = styled.div.attrs({\n className: classNameWithPrefix(blockName, 'landing-info-wrapper'),\n})`\n display: flex;\n flex-direction: column;\n width: 100%;\n gap: 8px;\n`;\n\nexport const LandingPageButtonWrapper = styled.div.attrs({\n className: classNameWithPrefix(blockName, 'landing-page-button-wrapper'),\n})`\n width: 250px;\n min-width: 250px;\n`;\n\nexport const DescriptionWrapper = styled.div.attrs({\n className: classNameWithPrefix(blockName, 'description-wrapper'),\n})`\n display: flex;\n gap: 4px;\n flex-direction: column;\n ${generateFontStyle('body-2m')};\n`;\n\n// Link\nexport const LinksWrapper = styled.div.attrs({\n className: classNameWithPrefix(blockName, 'links-wrapper'),\n})`\n margin-top: 16px;\n display: flex;\n flex-direction: column;\n gap: 8px;\n`;\n\nexport const CopyInputIconWrapper = styled.div.attrs({\n className: classNameWithPrefix(blockName, 'copy-input-icon-wrapper'),\n})`\n margin: 8px 0 0 -40px;\n cursor: pointer;\n`;\n","import React, { useCallback, useMemo } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\n\nimport Input from '@xcritical/input';\n\nimport { CopyIconButton } from '@ams-package/button';\nimport { InputWrapper } from '@ams-package/input';\n\nimport { offersActions, offersLinkQuerySelector } from '../../store';\nimport { ColumnWrapper } from '../styled';\n\nimport { CopyInputIconWrapper, LinksWrapper } from './styled';\n\nexport type LinksProps = {\n landingPageId: number;\n campaignId: number;\n};\n\nexport const Links: React.FC = ({ landingPageId, campaignId }) => {\n const dispatch = useDispatch();\n const { url, affId, isDisabled, lastCopiedLink } = useSelector(\n offersLinkQuerySelector\n );\n\n const urlWithQuery = useMemo(\n () =>\n isDisabled || !landingPageId || !campaignId\n ? ''\n : `${url}/?affiliateId=${affId}${\n campaignId ? `&campaignId=${campaignId}` : ''\n }${landingPageId ? `&landingPageId=${landingPageId}` : ''}`,\n [url, landingPageId, affId, campaignId, isDisabled]\n );\n\n const onCopyClick = useCallback((value: string) => {\n dispatch(offersActions.setLastCopiedLink(value));\n }, []);\n\n if (!url) return ;\n\n return (\n \n \n
Link for mixed traffic
\n \n \n \n \n \n \n
\n
\n );\n};\n","import React from 'react';\nimport { useSelector } from 'react-redux';\n\nimport { Button } from '@ams-package/button';\n\nimport { ILandingPage } from '../../types';\nimport { offersLinkQuerySelector } from '../../store';\nimport { LandingDescription } from '../styled';\n\nimport {\n CardWrapper,\n CardHeaderWrapper,\n LandingInfoWrapper,\n LandingPageButtonWrapper,\n LandingTitleWrapper,\n} from './styled';\nimport { Links } from './Links';\n\ninterface ILandingPageProps extends ILandingPage {\n offerId: string;\n}\n\nexport const LandingCard: React.FC = ({\n landingPageId,\n description,\n name,\n campaignId,\n url,\n}) => {\n const { isDisabled } = useSelector(offersLinkQuerySelector);\n\n return (\n \n \n \n \n {name}\n \n \n Preview\n \n \n \n {description && (\n {description}\n )}\n \n \n \n \n );\n};\n","import React from 'react';\nimport { useSelector } from 'react-redux';\nimport { useParams } from 'react-router';\n\nimport { offerLandingsSelector } from '../../store';\nimport { ColumnWrapper } from '../styled';\n\nimport { LandingCard } from './LandingCard';\nimport { BodyWrapper } from './styled';\n\nexport const Landings: React.FC = () => {\n const landings = useSelector(offerLandingsSelector);\n const { id } = useParams();\n\n return (\n \n {id && (\n \n {landings?.map((landing) => (\n \n ))}\n \n )}\n \n );\n};\n","import React from 'react';\nimport { useSelector } from 'react-redux';\n\nimport { WithoutHeaderModal } from '@ams-package/modal';\nimport {\n SocialMediaButtons,\n SocialMediaButton,\n ContactInfoButtonsBlock,\n} from '@ams-package/button';\nimport { EmailIcon } from '@ams-package/icons';\nimport { getManagerContacts } from '@ams-package/app';\nimport { Loader } from '@ams-package/loader';\n\nimport { OFFER_ACTIVATION_MODAL_NAME } from '../../consts';\nimport { isReadySelector } from '../../store';\n\nimport { Landings } from './Landings';\nimport {\n TabWrapper,\n ModalButtonsWrapper,\n ModalContentWrapper,\n ModalDescriptionWrapper,\n} from './styled';\n\nexport const LinkAndLandingTab: React.FC = () => {\n const manager = useSelector(getManagerContacts);\n const isReady = useSelector(isReadySelector);\n\n // TODO add skeleton for new design\n if (!isReady) return ;\n\n return (\n \n \n \n \n

Offer activation

\n
\n
Please contact the manager to activate
\n
the offer in a convenient way
\n
\n
\n \n {manager?.email && (\n \n }\n appearance=\"lightSecondary\"\n />\n \n )}\n \n \n
\n
\n \n
\n );\n};\n","import React from 'react';\n\nimport Badge from '@xcritical/badge';\n\nimport { BadgeWrapper } from './styled';\n\nexport const PromoBadge: React.FC = () => (\n \n \n SOON\n \n \n);\n","export default __webpack_public_path__ + \"images/ic_chevron.png\";","export default __webpack_public_path__ + \"images/ic_chevron_up.png\";","import styled from 'styled-components';\n\nimport { classNameWithPrefix } from '@crm-framework/utils';\n\nimport { h3Style } from '@ams-package/theme';\n\nimport icon from './ic_chevron.png';\nimport iconUp from './ic_chevron_up.png';\n\nconst blockName = 'offer-information';\n\nexport const ButtonsWrapper = styled.div.attrs({\n className: classNameWithPrefix(blockName, 'buttons-wrapper'),\n})`\n display: flex;\n gap: 10px;\n button {\n padding: 8px 20px;\n }\n`;\n\nexport const ImgWrapper = styled.h1.attrs({\n className: classNameWithPrefix(blockName, 'img-wrapper'),\n})`\n display: flex;\n padding: 10px 0;\n background-color: var(--black);\n justify-content: center;\n width: 100%;\n align-content: center;\n align-items: center;\n gap: 10px;\n`;\n\nexport const MarkdownWrapper = styled.div.attrs({\n className: classNameWithPrefix(blockName, 'markdown-wrapper'),\n})`\n table {\n margin: 20px 0;\n border-collapse: collapse;\n svg,\n img {\n color: var(--primary-color);\n }\n }\n tr {\n background: var(--dark-grey);\n padding: 12px 24px;\n }\n\n th {\n padding: 12px 24px;\n border-top: none;\n font-size: var(--body-2r-font-size);\n font-family: var(--body-2r-font-family);\n font-weight: var(--body-2r-font-weight);\n line-height: var(--body-2r-line-height);\n }\n td {\n background: var(--grid-background);\n padding: 12px 24px;\n border-top: 1px solid var(--dark-grey);\n }\n\n th:first-of-type {\n border-top-left-radius: 12px;\n }\n th:last-of-type {\n border-top-right-radius: 12px;\n }\n tr:last-of-type td:first-of-type {\n border-bottom-left-radius: 12px;\n }\n tr:last-of-type td:last-of-type {\n border-bottom-right-radius: 12px;\n }\n details {\n border-bottom: 1px solid var(--dark-grey);\n color: var(--popover-text-color);\n padding: 20px 0;\n }\n details > summary {\n ${h3Style}\n color: var(--base-white);\n position: relative;\n list-style: none;\n }\n details > summary::marker {\n display: none;\n }\n details > summary::after {\n padding-left: 12px;\n content: url(${icon});\n }\n details[open] > summary::after {\n padding-left: 12px;\n content: url(${iconUp});\n }\n details[open] > summary {\n padding-bottom: 20px;\n }\n details > ul > li {\n list-style: disc inside;\n padding-top: 10px;\n }\n`;\n","import React from 'react';\nimport Markdown from 'react-markdown';\nimport remarkGfm from 'remark-gfm';\nimport rehypeRaw from 'rehype-raw';\n\nimport { MarkdownWrapper } from './styled';\n\nexport const MarkdownContent: React.FC<{ data?: string }> = ({ data }) => {\n if (!data) return <>;\n\n return (\n \n \n {data}\n \n \n );\n};\n","import React, { useMemo } from 'react';\nimport { useSelector } from 'react-redux';\nimport { Grid } from 'styled-css-grid';\n\nimport { advertiserSelector } from '../../store';\nimport {\n DescriptionTitleWrapper,\n CellWrapper,\n InfoColumnWrapper,\n} from '../styled';\nimport { IAdvertiser } from '../../types';\n\nimport { MarkdownContent } from './MarkdownContent';\nimport { ImgWrapper } from './styled';\n\nconst enum ADVERTISER_FIELDS {\n description = 'description',\n countries = 'countries',\n logo = 'logo',\n name = 'name',\n platforms = 'platforms',\n tradingInstruments = 'tradingInstruments',\n webSite = 'webSite',\n}\n\nconst FIRST_COLUMN_ADVERTISER_HEADERS = {\n [ADVERTISER_FIELDS.webSite]: 'Web site',\n [ADVERTISER_FIELDS.description]: 'Description',\n [ADVERTISER_FIELDS.countries]: 'Countries',\n};\nconst SECOND_COLUMN_ADVERTISER_HEADERS = {\n [ADVERTISER_FIELDS.platforms]: 'Platform',\n [ADVERTISER_FIELDS.tradingInstruments]: 'Trading Instruments',\n};\n\nconst mapAdvertiserFields = (\n titles: Record,\n values?: IAdvertiser\n) =>\n Object.keys(titles).reduce((acc, key) => {\n if (!values?.[key]) return acc;\n\n return [\n ...acc,\n {\n label: titles[key],\n value: values[key],\n },\n ];\n }, []);\n\nexport const AdvertiserContent: React.FC = () => {\n const ad = useSelector(advertiserSelector);\n const { firstColumn, secondColumn } = useMemo(\n () => ({\n firstColumn: mapAdvertiserFields(FIRST_COLUMN_ADVERTISER_HEADERS, ad),\n secondColumn: mapAdvertiserFields(SECOND_COLUMN_ADVERTISER_HEADERS, ad),\n }),\n [ad]\n );\n\n if (!ad) return <>;\n\n return (\n <>\n \n {ad.logo && \"\"}\n {ad.name ?? ''}\n \n \n {[firstColumn, secondColumn].map(\n (column) =>\n column.length && (\n \n {column.map((cell) => (\n \n \n {cell.label}\n \n \n \n ))}\n \n )\n )}\n \n \n );\n};\n","import React, { useState, useMemo } from 'react';\nimport { useSelector } from 'react-redux';\n\nimport { Button } from '@ams-package/button';\n\nimport { markdownOfferDataSelector } from '../../store';\n\nimport { ButtonsWrapper } from './styled';\nimport { AdvertiserContent } from './Advertiser';\nimport { MarkdownContent } from './MarkdownContent';\n\nenum TAB_LIST_NAMES {\n advertiser = 'Advertiser',\n rates = 'Rates',\n rules = 'Rules',\n}\n\nconst INFORMATION_TAB_NAMES = Object.values(TAB_LIST_NAMES);\n\nexport const InformationTab: React.FC = () => {\n const [currentName, setCurrentName] = useState(\n INFORMATION_TAB_NAMES[0]\n );\n const { rates, rules } = useSelector(markdownOfferDataSelector);\n\n const TAB_LIST_CONTENT = useMemo(\n () => ({\n [TAB_LIST_NAMES.advertiser]: ,\n [TAB_LIST_NAMES.rates]: ,\n [TAB_LIST_NAMES.rules]: ,\n }),\n [rates, rules]\n );\n\n return (\n <>\n \n {INFORMATION_TAB_NAMES.map((name) => (\n setCurrentName(name)}\n selected={currentName === name}>\n {name}\n \n ))}\n \n {TAB_LIST_CONTENT[currentName]}\n \n );\n};\n","import React, { useEffect, useMemo } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { useNavigate, useParams } from 'react-router';\n\nimport { Tabs } from '@ams-package/tabs';\nimport { svgComponents, ChevronIcon } from '@ams-package/icons';\nimport { IconWrapper } from '@ams-package/utils';\n\nimport { createTabsConfig } from '../../utils';\n\nimport { offerNameSelector, offersActions } from './store';\nimport { OfferCssStyles } from './styled';\nimport {\n LinkAndLandingTab,\n BackButtonWrapper,\n HeaderWrapper,\n PromoBadge,\n InformationTab,\n} from './offer';\n\nconst PromoTab: React.FC = () => <>;\n\nexport const OfferPage: React.FC = () => {\n const dispatch = useDispatch();\n const navigate = useNavigate();\n const { id } = useParams();\n const offerName = useSelector(offerNameSelector);\n\n useEffect(() => {\n if (id) dispatch(offersActions.initOffer({ offerId: id }));\n }, [id]);\n\n const handleGoToOffers = () => {\n navigate('/offers');\n };\n\n const tabData = useMemo(\n () => [\n {\n TabIcon: svgComponents.LinkAndLandingIcon,\n title: 'Links & Landing pages',\n Content: LinkAndLandingTab,\n key: 'landings',\n },\n {\n TabIcon: svgComponents.InformationIcon,\n title: 'Information',\n Content: InformationTab,\n key: 'information',\n },\n {\n TabIcon: svgComponents.Promo,\n title: 'Promo',\n Content: PromoTab,\n disabled: true,\n TitleBadge: PromoBadge,\n key: 'promo',\n },\n ],\n []\n );\n\n const tabPanels = useMemo(() => createTabsConfig(tabData), [tabData]);\n\n return (\n <>\n \n \n \n \n \n \n \n

{offerName}

\n
\n {tabPanels && }\n \n );\n};\n","import styled from 'styled-components';\nimport { CloseCircle, TickCircle } from 'iconsax-react';\n\nimport Button from '@xcritical/button';\n\nimport { classNameWithPrefix } from '@crm-framework/utils';\n\nimport Panel from '@ams-package/panel';\nimport { generateFontStyle } from '@ams-package/theme';\n\nconst blockName = 'payment-request';\n\nexport const PaymentRequestContainer = styled(Panel)`\n display: grid;\n grid-template-columns: 40% 60%;\n grid-template-rows: repeat(5, auto);\n grid-column-gap: 12px;\n grid-row-gap: 20px;\n min-width: 350px;\n`;\n\nexport const PaymentRequestTitle = styled.h3.attrs({\n className: classNameWithPrefix(blockName, 'title'),\n})`\n grid-area: 1 / 1 / 2 / 2;\n`;\n\nexport const PaymentRequestCheckStatus = styled.div.attrs({\n className: classNameWithPrefix(blockName, 'check-status'),\n})`\n grid-area: 1 / 2 / 2 / 2;\n display: flex;\n justify-content: flex-end;\n`;\n\nexport const PaymentCheckMessage = styled.div.attrs({\n className: classNameWithPrefix(blockName, 'check-message'),\n})`\n grid-area: 2 / 1 / 3 / 3;\n color: var(--description-text-color);\n ${generateFontStyle('body-2r')}\n`;\n\nexport const PaymentAvailableBalance = styled.div.attrs({\n className: classNameWithPrefix(blockName, 'available-balance'),\n})`\n grid-area: 3 / 1 / 4 / 3;\n`;\n\nexport const PaymentAmount = styled.div.attrs({\n className: classNameWithPrefix(blockName, 'amount'),\n})`\n grid-area: 4 / 1 / 5 / 2;\n`;\n\nexport const PaymentMethod = styled.div.attrs({\n className: classNameWithPrefix(blockName, 'method'),\n})`\n grid-area: 4 / 2 / 5 / 3;\n`;\n\nexport const PaymentButton = styled(Button).attrs({\n className: classNameWithPrefix(blockName, 'button'),\n})`\n grid-area: 5 / 1 / 6 / 3;\n margin-top: 10px;\n`;\n\nexport const CloseCircleIcon = styled(CloseCircle).attrs({\n className: classNameWithPrefix(blockName, 'close-circle-icon'),\n})`\n line-height: 1.2;\n vertical-align: top;\n margin: 2px;\n color: var(--danger-text-color);\n`;\n\nexport const TickCircleIcon = styled(TickCircle).attrs({\n className: classNameWithPrefix(blockName, 'tick-circle-icon'),\n})`\n line-height: 1.2;\n vertical-align: top;\n margin: 2px;\n color: var(--primary-color);\n`;\n\nexport const MinimumAmountWrapper = styled.div.attrs({\n className: classNameWithPrefix(blockName, 'minimum-amount-wrapper'),\n})`\n ${generateFontStyle('body-3r')}\n color: var(--description-text-color);\n padding-left: 6px;\n`;\n","import { PayloadAction, createAction, createSlice } from '@reduxjs/toolkit';\n\nimport { IUserBalanceModel } from '@ams-package/app';\n\nimport { IPaymentRequestState } from './types';\nconst initialState: IPaymentRequestState = {\n amount: 0,\n dateTime: '',\n isReady: false,\n};\nexport const PAYMENT_REQUEST_FORM = 'PAYMENT_REQUEST_FORM';\nexport const STORE_NAME = '@payment-request';\nconst paymentRequestStore = createSlice({\n name: STORE_NAME,\n initialState,\n reducers: {\n finishInit: {\n reducer: (_, { payload }: PayloadAction) => ({\n ...payload,\n isReady: true,\n }),\n prepare: (balance: IUserBalanceModel) => ({\n payload: balance,\n }),\n },\n },\n});\n\nconst INITIALIZE = `${STORE_NAME}/initialize` as const;\nconst SUBMIT = `${STORE_NAME}/submit` as const;\n\nexport const paymentRequestActions = {\n ...paymentRequestStore.actions,\n init: createAction(INITIALIZE),\n submit: createAction(SUBMIT),\n};\n\nexport const paymentRequestReducer = paymentRequestStore.reducer;\n","import { createSelector } from '@reduxjs/toolkit';\n\nimport { IFormState, formSelector } from '@xcritical/forms';\n\nimport { getDictionarySelect } from '@ams-package/dictionaries';\nimport { getLimits, getUser } from '@ams-package/app';\n\nimport { PAYMENT_REQUEST_FORM, STORE_NAME } from './store';\nimport {\n IPaymentRequestState,\n ISubmitPaymentModel,\n IUserPaymentMethodModel,\n} from './types';\n\nexport const requestPaymentFormSelector = (\n state\n): IFormState<{ amount: number; methodId?: number }> =>\n formSelector(state, PAYMENT_REQUEST_FORM);\n\nexport const requestPaymentSelector = (state): IPaymentRequestState =>\n state[STORE_NAME];\n\nexport const availablePaymentsSelector = createSelector(\n getDictionarySelect('paymentMethods'),\n getDictionarySelect('payoutPaymentMethods'),\n (paymentMethods, payoutPaymentMethods) =>\n paymentMethods.map((method) => ({\n ...method,\n id: method.id as number,\n postfix: method.number.toString(),\n payoutByRequestMinAmount: payoutPaymentMethods.find(\n (payoutMethod) => payoutMethod.id === method.code\n )!.payoutByRequestMinAmount,\n })) as IUserPaymentMethodModel[]\n);\n\nexport const amountSelector = (state) => requestPaymentSelector(state).amount;\n\nexport const manualMinBalanceLimitSelector = (state) =>\n getLimits(state)?.manualPayoutRequestMinBalanceLimit ?? 0;\n\nexport const isReadySelector = (state) => requestPaymentSelector(state).isReady;\n\nexport const selectedPaymentSelector = createSelector(\n availablePaymentsSelector,\n requestPaymentFormSelector,\n (payments, { model }) =>\n payments.find((payment) => payment.id === model.methodId)\n);\n\nexport const submitSelector = createSelector(\n selectedPaymentSelector,\n amountSelector,\n requestPaymentFormSelector,\n (currentPayment, amount, { model }) =>\n ({\n currentPayment,\n balance: amount,\n methodId: model.methodId,\n amount: model.amount,\n } as ISubmitPaymentModel)\n);\n\nexport const viewSelector = createSelector(\n amountSelector,\n manualMinBalanceLimitSelector,\n getUser,\n selectedPaymentSelector,\n isReadySelector,\n (amount, minBalance, user, selectedPayment, isReady) => ({\n balance: amount,\n availableWithdrawal:\n amount && amount >= minBalance && user?.status === 'Active' && isReady,\n minBalance,\n selectedPayment,\n isReady,\n })\n);\n","export const PAYMENT_REQUEST_FIELDS = {\n amount: 'amount',\n methodId: 'methodId',\n};\n","import React, { useCallback, useEffect } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\n\nimport Badge from '@xcritical/badge';\nimport Form, { FormField, xcriticalFormError } from '@xcritical/forms';\n\nimport { toCurrency } from '@ams-package/utils';\nimport { Label } from '@ams-package/label';\nimport { InputFormField } from '@ams-package/input';\nimport { SelectPaymentMethod } from '@ams-package/payment-method-editor';\nimport { getUser } from '@ams-package/app';\nimport { Skeleton } from '@ams-package/skeleton';\n\nimport {\n CloseCircleIcon,\n PaymentAmount,\n PaymentAvailableBalance,\n PaymentButton,\n PaymentCheckMessage,\n PaymentMethod,\n PaymentRequestCheckStatus,\n PaymentRequestContainer,\n PaymentRequestTitle,\n TickCircleIcon,\n MinimumAmountWrapper,\n} from './styled';\nimport { PAYMENT_REQUEST_FORM, paymentRequestActions } from './store';\nimport { viewSelector } from './selectors';\nimport { PAYMENT_REQUEST_FIELDS } from './consts';\n\nexport const PaymentRequest = () => {\n const user = useSelector(getUser);\n const { balance, availableWithdrawal, minBalance, selectedPayment, isReady } =\n useSelector(viewSelector);\n\n const dispatch = useDispatch();\n useEffect(() => {\n dispatch(paymentRequestActions.init());\n }, []);\n\n const handleSubmit = useCallback(() => {\n dispatch(paymentRequestActions.submit());\n }, []);\n\n const handleChangeMethod = useCallback(() => {\n dispatch(\n xcriticalFormError(PAYMENT_REQUEST_FORM, {\n [PAYMENT_REQUEST_FIELDS.amount]: '',\n })\n );\n }, []);\n\n return (\n
\n \n Payout Requests\n \n {isReady ? (\n \n {availableWithdrawal ? 'Activated' : 'Not available'}\n \n ) : (\n \n )}\n \n \n {availableWithdrawal ? (\n \n ) : (\n \n )}\n  Have at least ${minBalance} in available balance\n \n \n Available for withdrawal\n

$ {toCurrency(balance) || user?.balance}

\n
\n \n \n \n \n\n \n \n \n \n {selectedPayment\n ? `The minimum payout amount for ${selectedPayment.name} is $${selectedPayment.payoutByRequestMinAmount}`\n : ''}\n \n \n \n Withdraw money\n \n
\n
\n );\n};\n","import { WretchResponse } from 'wretch/types';\n\nimport { authorizedWretch } from '@ams-package/utils';\n\nimport { IPayoutCreateModel } from '../types';\n\nexport const apiCreatePayout = async (\n model: IPayoutCreateModel\n): Promise =>\n authorizedWretch('/api/payouts/manual')\n .post({\n paymentMethodId: model.methodId,\n amount: model.amount,\n })\n .res();\n","import { call, put, all, select } from 'typed-redux-saga';\nimport { getObjectWithoutUndefinedPropsFrom } from 'utilitify';\nimport isEmpty from 'lodash/isEmpty';\nimport { PayloadAction } from '@reduxjs/toolkit';\n\nimport {\n xcriticalFormShowErrors,\n xcriticalFormError,\n xcriticalFormPropertyChange,\n} from '@xcritical/forms';\nimport { xcriticalModalOpen } from '@xcritical/modal';\n\nimport { handleServerError } from '@ams-package/utils';\nimport {\n IDictionaries,\n loadAndSaveDictionariesByName,\n} from '@ams-package/dictionaries';\nimport { StatusModalTypes } from '@ams-package/status-message';\nimport { OnSuccessActionPayload } from '@ams-package/payment-method-editor';\nimport { handleUpdateBalanceUser } from '@ams-package/app/sagas';\nimport { IUserBalanceModel } from '@ams-package/app';\n\nimport { PAYMENT_REQUEST_FORM, paymentRequestActions } from '../store';\nimport { ISubmitPaymentModel } from '../types';\nimport { submitSelector } from '../selectors';\nimport { PAYMENT_REQUEST_FIELDS } from '../consts';\n\nimport { apiCreatePayout } from './api';\n\nexport function* handleStartInit() {\n try {\n const [balance] = (yield* all([\n call(handleUpdateBalanceUser),\n loadAndSaveDictionariesByName([\n 'paymentMethods',\n 'payoutPaymentMethods',\n 'texts',\n 'payoutStatus',\n ]),\n ])) as unknown as readonly [IUserBalanceModel, IDictionaries];\n\n yield put(paymentRequestActions.finishInit(balance));\n } catch (e) {\n console.error(e);\n yield* handleServerError({ error: e });\n }\n}\n\nexport function* handleAddPaymentMethod({\n payload,\n}: PayloadAction) {\n if (payload.formName === PAYMENT_REQUEST_FORM) {\n yield put(\n xcriticalFormPropertyChange(\n PAYMENT_REQUEST_FORM,\n PAYMENT_REQUEST_FIELDS.methodId,\n payload.id\n )\n );\n }\n}\n\nexport function* handleSubmit() {\n try {\n const model = yield* select(submitSelector);\n\n const validationErrors = validateAmountModel(model);\n\n if (!isEmpty(validationErrors)) {\n yield* put(xcriticalFormShowErrors(PAYMENT_REQUEST_FORM, true));\n yield* put(xcriticalFormError(PAYMENT_REQUEST_FORM, validationErrors));\n\n return;\n }\n\n try {\n yield* call(apiCreatePayout, model);\n } catch (e) {\n yield* handleServerError({\n error: e,\n formName: PAYMENT_REQUEST_FORM,\n statusModalName: 'global',\n });\n\n return;\n }\n\n yield* put(\n xcriticalModalOpen('global', {\n message: {\n type: StatusModalTypes.Success,\n title: 'Request successfully accepted',\n description:\n 'We have accepted the withdrawal request, when we approve it, the funds will be credited to your account. Keep in touch with your manager',\n },\n })\n );\n } catch (e) {\n yield* handleServerError({\n error: e,\n });\n }\n\n yield* put(paymentRequestActions.init());\n}\n\nexport const validateAmountModel = ({\n currentPayment,\n balance,\n amount,\n}: ISubmitPaymentModel) => {\n const errors = {};\n\n if (!currentPayment) {\n errors[PAYMENT_REQUEST_FIELDS.methodId] = 'Required Field';\n }\n\n if (!amount) {\n errors[PAYMENT_REQUEST_FIELDS.amount] = 'Required Field';\n } else if (\n currentPayment &&\n amount < currentPayment.payoutByRequestMinAmount\n ) {\n errors[\n PAYMENT_REQUEST_FIELDS.amount\n ] = `The amount for withdrawal must exceed $ ${currentPayment.payoutByRequestMinAmount}`;\n } else if (amount > balance) {\n errors[PAYMENT_REQUEST_FIELDS.amount] =\n 'The amount exceeds available for withdrawal';\n }\n\n return getObjectWithoutUndefinedPropsFrom(errors);\n};\n","import { takeLatest, takeEvery } from 'redux-saga/effects';\n\nimport { paymentEditorActions } from '@ams-package/payment-method-editor';\n\nimport { paymentRequestActions } from '../store';\n\nimport { handleAddPaymentMethod, handleStartInit, handleSubmit } from './saga';\n\nexport function* watchers() {\n yield takeLatest(paymentRequestActions.init, handleStartInit);\n yield takeEvery(paymentRequestActions.submit, handleSubmit);\n yield takeEvery(paymentEditorActions.onSuccess, handleAddPaymentMethod);\n}\n","import React from 'react';\n\nimport { ReduxInject } from '@crm-framework/saga-injector';\n\nimport { PaymentRequest } from './PaymentRequest';\nimport { STORE_NAME, paymentRequestReducer } from './store';\nimport { watchers } from './sagas';\n\nconst PaymentRequestInject = ({ ...props }) => (\n \n \n \n);\n\nexport default PaymentRequestInject;\n","import styled from 'styled-components';\nimport { NavLink } from 'react-router-dom';\n\nimport { classNameWithPrefix } from '@crm-framework/utils';\n\nimport { generateFontStyle } from '@ams-package/theme';\n\nconst blockName = 'dashboard-page';\n\nexport const DashboardWrapper = styled.div.attrs({\n className: classNameWithPrefix(blockName, 'wrapper'),\n})`\n display: flex;\n flex-direction: column;\n gap: 16px;\n`;\n\nexport const GetStartedTitle = styled.h2.attrs({\n className: classNameWithPrefix(blockName, 'get-started-title'),\n})`\n margin-top: 16px;\n`;\n\nexport const Link = styled(NavLink).attrs({\n className: classNameWithPrefix(blockName, 'link'),\n})`\n color: var(--secondary-light-grey);\n text-decoration: underline;\n text-underline-offset: 2px;\n ${generateFontStyle('body-2m')}\n`;\n","import styled from 'styled-components';\n\nimport { classNameWithPrefix } from '@crm-framework/utils';\n\nimport Panel from '@ams-package/panel';\nimport { generateFontStyle } from '@ams-package/theme';\n\nconst blockName = 'steps';\n\nexport const StepsWrapper = styled.div.attrs({\n className: classNameWithPrefix(blockName, 'wrapper'),\n})`\n display: flex;\n gap: 16px;\n`;\n\nexport const StepCard = styled(Panel)`\n display: flex;\n flex-direction: column;\n justify-content: space-between;\n gap: 16px;\n padding: 16px;\n height: 100%;\n cursor: pointer;\n border: 1px solid transparent;\n\n &:hover {\n border: 1px solid var(--active-color);\n }\n`;\n\nexport const StepCardInfo = styled.div.attrs({\n className: classNameWithPrefix(blockName, 'card-info'),\n})`\n display: flex;\n flex-direction: column;\n justify-content: flex-start;\n gap: 16px;\n`;\n\nexport const StepHeader = styled.div.attrs({\n className: classNameWithPrefix(blockName, 'header'),\n})`\n display: flex;\n gap: 12px;\n align-items: center;\n`;\n\nexport const Order = styled.h3.attrs({\n className: classNameWithPrefix(blockName, 'order'),\n})`\n display: flex;\n width: 40px;\n height: 40px;\n justify-content: center;\n align-items: center;\n border-radius: 40px;\n background: var(--base-black);\n color: var(--active-color);\n`;\n\nexport const Description = styled.h3.attrs({\n className: classNameWithPrefix(blockName, 'description'),\n})`\n color: var(--secondary-light-grey);\n ${generateFontStyle('body-2r')}\n`;\n","import React from 'react';\n\nimport { Link } from '../../styled';\n\nimport {\n Description,\n Order,\n StepCard,\n StepHeader,\n StepCardInfo,\n} from './styled';\n\nexport type StepType = {\n id: number;\n title: string;\n description: string;\n linkText?: string;\n linkUrl?: string;\n};\n\nexport const Step: React.FC = ({\n title,\n id,\n description,\n linkUrl,\n linkText,\n}) => (\n \n \n \n {id}\n

{title}

\n
\n {description}\n
\n {linkText && linkUrl && {linkText}}\n
\n);\n","import React from 'react';\n\nimport { Step, StepType } from './Step';\nimport { StepsWrapper } from './styled';\n\nexport type StepsProps = {\n steps: StepType[];\n};\n\nexport const Steps: React.FC = ({ steps }) => (\n \n {steps.map(({ ...props }) => (\n \n ))}\n \n);\n","import { PathNames } from '@ams-package/router';\n\nimport { StepType } from './components';\n\nexport const steps: StepType[] = [\n {\n id: 1,\n title: 'Choose Offer',\n description:\n 'To set up an advertising campaign, you must first select an offer',\n linkText: 'Select offer',\n linkUrl: PathNames.offers,\n },\n {\n id: 2,\n title: 'Get a Promo',\n description:\n 'After the offer is selected, you need to select a landing page',\n },\n {\n id: 3,\n title: 'Get a Link',\n description:\n 'In accordance with the selected landing page, you need to select and copy the link',\n },\n {\n id: 4,\n title: 'Take Money',\n description:\n 'As a result of the implemented advertising campaign, you will be able to withdraw funds',\n linkText: 'Go to Payouts',\n linkUrl: PathNames.payouts,\n },\n];\n\nexport const STORE_NAME = '@main-dashboard';\n","import { AffStatisticsType, IDashboardConfig } from '../types';\nimport { IOffer } from '../../offers';\n\nexport const affStatisticsSelector = (state): AffStatisticsType | null =>\n state.mainDashboard.affStatistics;\n\nexport const isDashboardReadySelector = (state): boolean =>\n state.mainDashboard.isReady;\n\nexport const topOffersSelector = (state): IOffer[] =>\n state.mainDashboard.topOffers;\n\nexport const dashboardConfigSelector = (state): IDashboardConfig | null =>\n state.mainDashboard.config;\n","import { createSlice, PayloadAction, createAction } from '@reduxjs/toolkit';\n\nimport { STORE_NAME } from '../consts';\nimport {\n AffStatisticsType,\n IDashboardConfig,\n IMainDashboardState,\n} from '../types';\nimport { IOffer } from '../../offers';\n\nexport * from './selectors';\n\nexport const initialState: IMainDashboardState = {\n affStatistics: null,\n isReady: false,\n topOffers: [],\n config: null,\n};\n\nconst mainDashboardStore = createSlice({\n name: STORE_NAME,\n initialState,\n reducers: {\n setAffStatistics: (\n state,\n { payload }: PayloadAction\n ) => {\n state.affStatistics = payload;\n },\n setTopOffers: (state, { payload }: PayloadAction) => {\n state.topOffers = payload;\n },\n setIsReady: (state, { payload }: PayloadAction) => {\n state.isReady = payload;\n },\n setConfig: (state, { payload }: PayloadAction) => {\n state.config = payload;\n },\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n getAffStatistics: (state, _action: PayloadAction) => {\n state.affStatistics = null;\n },\n },\n});\n\nconst MAIN_DASHBOARD_INIT = `${STORE_NAME}/init`;\n\nexport const mainDashboardActions = {\n ...mainDashboardStore.actions,\n init: createAction(MAIN_DASHBOARD_INIT),\n};\n\nexport const mainDashboardReducer = mainDashboardStore.reducer;\n","import styled from 'styled-components';\n\nimport { classNameWithPrefix } from '@crm-framework/utils';\n\nimport Panel from '@ams-package/panel';\nimport { HeaderItemType } from '@ams-package/tabs';\nimport { generateFontStyle } from '@ams-package/theme';\n\nconst blockName = 'statistics';\n\nexport const StatisticsCard = styled(Panel)`\n display: flex;\n flex-direction: column;\n gap: 16px;\n height: 100%;\n justify-content: flex-start;\n`;\n\nexport const HeaderWrapper = styled.div.attrs({\n className: classNameWithPrefix(blockName, 'header-wrapper'),\n})`\n display: flex;\n justify-content: space-between;\n width: 100%;\n align-items: center;\n`;\n\nexport const TabsWrapper = styled.div.attrs({\n className: classNameWithPrefix(blockName, 'tabs-wrapper'),\n})`\n display: flex;\n flex-direction: column;\n width: 100%;\n gap: 32px;\n`;\n\nexport const TabsHeaderWrapper = styled.div.attrs({\n className: classNameWithPrefix(blockName, 'tabs-header-wrapper'),\n})`\n display: grid;\n width: 100%;\n grid-template-columns: 1fr 1fr 1fr 1fr 1fr;\n gap: 7px;\n border-radius: 10px;\n background: var(--tabs-background);\n padding: 6px;\n`;\n\nexport const StatisticTab = styled.div.attrs({\n className: classNameWithPrefix(blockName, 'statistic-tab'),\n})`\n ${generateFontStyle('body-1m')}\n height: 26px;\n display: flex;\n justify-content: center;\n align-items: center;\n border-radius: 6px;\n cursor: pointer;\n background: ${({ isActive }) =>\n isActive ? 'var(--primary-color)' : 'var(--tabs-background)'};\n color: ${({ isActive }) =>\n isActive ? 'var(--tabs-background)' : 'var(--tabs-color)'};\n`;\n\nexport const StatisticBlockWrapper = styled.div.attrs({\n className: classNameWithPrefix(blockName, 'statistic-block-wrapper'),\n})`\n display: flex;\n`;\n\nexport const IconWrapper = styled.div.attrs({\n className: classNameWithPrefix(blockName, 'icon-wrapper'),\n})`\n width: 44px;\n height: 44px;\n display: flex;\n justify-content: center;\n align-items: center;\n border-radius: 44px;\n background: var(--base-black);\n margin-right: 8px;\n\n svg {\n width: 24px;\n height: 24px;\n }\n`;\n\nexport const InfoWrapper = styled.div.attrs({\n className: classNameWithPrefix(blockName, 'info-wrapper'),\n})`\n display: flex;\n gap: 4px;\n flex-direction: column;\n color: var(--statistic-label-color);\n ${generateFontStyle('body-1r')}\n`;\n\nexport const StatisticValue = styled.h3`\n display: flex;\n align-items: flex-end;\n gap: 8px;\n`;\n\nexport const PercentWrapper = styled.div.attrs({\n className: classNameWithPrefix(blockName, 'percent-wrapper'),\n})<{ isPositive: boolean }>`\n display: flex;\n align-items: center;\n color: ${({ isPositive }) =>\n isPositive ? 'var(--primary-color)' : 'var(--danger-text-color)'};\n ${generateFontStyle('body-1sb')}\n\n svg {\n width: 18px;\n height: 18px;\n fill: ${({ isPositive }) =>\n isPositive ? 'var(--primary-color)' : 'var(--danger-text-color)'};\n path {\n stroke: ${({ isPositive }) =>\n isPositive ? 'var(--primary-color)' : 'var(--danger-text-color)'};\n }\n }\n`;\n","import React from 'react';\nimport { ArrowDown3, ArrowUp3 } from 'iconsax-react';\n\nimport { PercentWrapper } from './styled';\n\nexport enum PercentDirections {\n plus = 'plus',\n minus = 'minus',\n}\n\nexport type PercentType = {\n direction: PercentDirections;\n value: number;\n};\n\nexport const Percent: React.FC = ({ direction, value }) => {\n if (value === 0) return null;\n\n return (\n \n {direction === PercentDirections.plus ? : }\n {value === Infinity ? '' : `${value} %`}\n \n );\n};\n","import React from 'react';\nimport { IconProps } from 'iconsax-react';\n\nimport { colors } from '@ams-package/theme';\n\nimport {\n IconWrapper,\n InfoWrapper,\n StatisticBlockWrapper,\n StatisticValue,\n} from './styled';\nimport { Percent, PercentType } from './Percent';\n\nexport type StatisticBlockPropsType = {\n Icon: React.FC;\n title: string;\n value: number | string;\n percent: PercentType;\n};\n\nexport const StatisticBlock: React.FC = ({\n title,\n Icon,\n value,\n percent,\n}) => (\n \n \n \n \n \n {title}\n \n {value}\n \n \n \n \n);\n","import { DollarCircle, TagUser, WalletMoney, People } from 'iconsax-react';\nimport {\n subDays,\n subMonths,\n subWeeks,\n startOfDay,\n endOfDay,\n startOfWeek,\n endOfWeek,\n startOfMonth,\n endOfMonth,\n format,\n} from 'date-fns';\n\nimport { FTDIcon } from '@ams-package/icons';\nimport { toCurrency } from '@ams-package/utils';\n\nconst DATE_FORMAT = 'yyyy/MM/dd';\n\nexport const statisticPeriods = {\n day: {\n name: 'day',\n title: 'Today',\n start: format(startOfDay(new Date()), DATE_FORMAT),\n end: format(new Date(), DATE_FORMAT),\n startPrevious: format(startOfDay(subDays(new Date(), 1)), DATE_FORMAT),\n endPrevious: format(endOfDay(subDays(new Date(), 1)), DATE_FORMAT),\n },\n week: {\n name: 'week',\n title: 'Week',\n start: format(startOfWeek(new Date()), DATE_FORMAT),\n end: format(new Date(), DATE_FORMAT),\n startPrevious: format(startOfWeek(subWeeks(new Date(), 1)), DATE_FORMAT),\n endPrevious: format(endOfWeek(subWeeks(new Date(), 1)), DATE_FORMAT),\n },\n month: {\n name: 'month',\n title: 'Month',\n start: format(startOfMonth(new Date()), DATE_FORMAT),\n end: format(new Date(), DATE_FORMAT),\n startPrevious: format(startOfMonth(subMonths(new Date(), 1)), DATE_FORMAT),\n endPrevious: format(endOfMonth(subMonths(new Date(), 1)), DATE_FORMAT),\n },\n threeMonths: {\n name: 'threeMonths',\n title: '3 Months',\n start: format(startOfMonth(subMonths(new Date(), 2)), DATE_FORMAT),\n end: format(new Date(), DATE_FORMAT),\n startPrevious: format(startOfMonth(subMonths(new Date(), 5)), DATE_FORMAT),\n endPrevious: format(endOfMonth(subMonths(new Date(), 3)), DATE_FORMAT),\n },\n allTime: {\n name: 'allTime',\n title: 'All Time',\n },\n};\n\nexport enum StatisticFields {\n regs = 'regs',\n ftd = 'ftd',\n deposits = 'deposits',\n profit = 'profit',\n hits = 'hits',\n}\n\nexport const statisticBlocks = [\n {\n name: StatisticFields.regs,\n title: 'Registrations',\n Icon: TagUser,\n },\n {\n name: StatisticFields.ftd,\n title: 'FTD',\n Icon: FTDIcon,\n },\n {\n name: StatisticFields.deposits,\n title: 'Deposits',\n Icon: WalletMoney,\n },\n {\n name: StatisticFields.profit,\n title: 'Profit',\n Icon: DollarCircle,\n render: (value?: string | number): string => toCurrency(value),\n },\n {\n name: StatisticFields.hits,\n title: 'Hits',\n Icon: People,\n },\n];\n","import React from 'react';\n\nimport { colors } from '@ams-package/theme';\nimport { Skeleton } from '@ams-package/skeleton';\n\nimport {\n StatisticBlockWrapper,\n IconWrapper,\n InfoWrapper,\n StatisticValue,\n} from './styled';\nimport { StatisticBlockPropsType } from './StatisticBlock';\n\nexport const StatisticBlockSkeleton: React.FC<\n Omit\n> = ({ title, Icon }) => (\n \n \n \n \n \n {title}\n \n \n \n \n \n);\n","import React, { useCallback, useMemo, useState } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { Grid } from 'styled-css-grid';\n\nimport { Tabs } from '@ams-package/tabs';\nimport { PathNames } from '@ams-package/router';\n\nimport { createTabsConfig } from '../../../../utils';\nimport { Link } from '../../styled';\nimport { affStatisticsSelector, mainDashboardActions } from '../../store';\n\nimport {\n StatisticsCard,\n TabsHeaderWrapper,\n StatisticTab,\n TabsWrapper,\n HeaderWrapper,\n} from './styled';\nimport { StatisticBlock } from './StatisticBlock';\nimport { statisticBlocks, statisticPeriods } from './consts';\nimport { StatisticBlockSkeleton } from './_StatisticBlockSkeleton';\n\nexport const Statistics: React.FC = () => {\n const dispatch = useDispatch();\n const [selectedPeriod, setSelectedPeriod] = useState(statisticPeriods.day);\n const statistics = useSelector(affStatisticsSelector);\n\n const tabData = useMemo(\n () =>\n Object.values(statisticPeriods).map(({ title: tabTitle, name: key }) => ({\n key,\n title: tabTitle,\n HeaderItem: StatisticTab,\n Content: () => (\n \n {statisticBlocks.map(({ name, title, Icon, render }) => {\n if (!statistics) {\n return (\n \n );\n }\n\n const { value, percent } = statistics[name] ?? {};\n\n return (\n \n );\n })}\n \n ),\n })),\n [statistics]\n );\n\n const onChangeHandler = useCallback((activeTabKey: number | string) => {\n dispatch(mainDashboardActions.getAffStatistics(activeTabKey));\n setSelectedPeriod(statisticPeriods[activeTabKey]);\n }, []);\n\n const tabPanels = useMemo(() => createTabsConfig(tabData), [tabData]);\n\n const { start, end } = selectedPeriod;\n\n return (\n \n \n

Statistics

\n \n View all statistics\n \n
\n {tabPanels?.length && (\n \n )}\n
\n );\n};\n","import styled from 'styled-components';\nimport { Chart } from 'iconsax-react';\nimport { NavLink } from 'react-router-dom';\n\nimport { classNameWithPrefix } from '@crm-framework/utils';\n\nimport Panel from '@ams-package/panel';\nimport { generateFontStyle } from '@ams-package/theme';\n\nconst blockName = 'top-offers';\n\nexport const TopOffersCard = styled(Panel)`\n display: grid;\n grid-template-columns: 1fr;\n flex-direction: column;\n gap: 4px;\n`;\n\nexport const HeaderWrapper = styled.div.attrs({\n className: classNameWithPrefix(blockName, 'header-wrapper'),\n})`\n display: flex;\n justify-content: space-between;\n width: 100%;\n align-items: center;\n margin-bottom: 8px;\n`;\n\nexport const ListWrapper = styled.div.attrs({\n className: classNameWithPrefix(blockName, 'list-wrapper'),\n})`\n display: flex;\n flex-direction: column;\n width: 100%;\n`;\n\nexport const TopOfferWrapper = styled.div.attrs({\n className: classNameWithPrefix(blockName, 'offer-wrapper'),\n})`\n display: grid;\n grid-template-columns: 1.5fr 1fr 1fr 1fr;\n column-gap: 8px;\n align-items: center;\n padding: 12px 0;\n border-bottom: 1px solid var(--secondary-border-color);\n\n &:last-child {\n border: none;\n margin-bottom: 0;\n }\n`;\n\nexport const OfferName = styled.div.attrs({\n className: classNameWithPrefix(blockName, 'offer-name'),\n})`\n display: flex;\n align-items: center;\n gap: 12px;\n\n h4 {\n word-break: break-word;\n }\n`;\n\nexport const IconWrapper = styled.div.attrs({\n className: classNameWithPrefix(blockName, 'icon-wrapper'),\n})`\n width: 32px;\n height: 32px;\n border-radius: 8px;\n background: var(--orange);\n display: flex;\n justify-content: center;\n align-items: center;\n`;\n\nexport const OfferInfo = styled.div.attrs({\n className: classNameWithPrefix(blockName, 'offer-info'),\n})`\n ${generateFontStyle('body-1m')}\n color: var(--secondary-light-grey);\n word-break: break-word;\n`;\n\nexport const ChartIcon = styled(Chart).attrs({\n className: classNameWithPrefix(blockName, 'chart-icon'),\n})`\n width: 24px;\n height: 24px;\n fill: var(--base-white);\n stroke: var(--base-white);\n`;\n\nexport const ButtonWrapper = styled(NavLink).attrs({\n className: classNameWithPrefix(blockName, 'button-wrapper'),\n})`\n margin-left: auto;\n`;\n","import React from 'react';\n\nimport { Button } from '@ams-package/button';\nimport { PathNames } from '@ams-package/router';\n\nimport { IOffer } from '../../../offers';\n\nimport {\n OfferName,\n TopOfferWrapper,\n IconWrapper,\n ChartIcon,\n OfferInfo,\n ButtonWrapper,\n} from './styled';\n\nexport const TopOffer: React.FC = ({\n id,\n name,\n offerDealValue,\n offerDealType,\n}) => (\n \n \n {/* TODO render icon by link from BE instead mock */}\n \n \n \n

{name}

\n
\n {offerDealType}\n {offerDealValue}\n \n \n \n
\n);\n","import React from 'react';\nimport { useSelector } from 'react-redux';\n\nimport { PathNames } from '@ams-package/router';\n\nimport { Link } from '../../styled';\nimport { topOffersSelector } from '../../store';\n\nimport { TopOffersCard, HeaderWrapper, ListWrapper } from './styled';\nimport { TopOffer } from './TopOffer';\n\nexport const TopOffers: React.FC = () => {\n const offers = useSelector(topOffersSelector);\n\n if (!offers.length) return <>;\n\n return (\n \n \n

Top offers

\n View all offers\n
\n \n {offers.map((offer) => (\n \n ))}\n \n
\n );\n};\n","import React from 'react';\nimport { Grid } from 'styled-css-grid';\n\nimport { Skeleton } from '@ams-package/skeleton';\n\nimport { DashboardWrapper } from './styled';\n\nexport const DashboardSkeleton = () => (\n \n

Dashboard

\n \n \n \n \n \n
\n);\n","import { PercentDirections, StatisticFields } from './components';\nimport { AffStatisticsType } from './types';\n\nexport const formatPercent = (percentValue: number) =>\n parseFloat(Number(percentValue).toFixed(2));\n\nexport const mapStatisticModel = (\n statisticModel: Record,\n prevStatisticModel: Record\n) =>\n Object.values(StatisticFields).reduce((acc, field) => {\n const value = statisticModel[field] ? parseFloat(statisticModel[field]) : 0;\n const prevValue = prevStatisticModel[field]\n ? parseFloat(prevStatisticModel[field])\n : 0;\n const percentValue =\n value > prevValue\n ? ((value - prevValue) / prevValue) * 100\n : ((prevValue - value) / prevValue) * 100;\n\n return {\n ...acc,\n [field]: {\n value: value ?? 0,\n percent: {\n value: formatPercent(percentValue || 0),\n direction:\n value < prevValue\n ? PercentDirections.minus\n : PercentDirections.plus,\n },\n },\n };\n }, {} as AffStatisticsType);\n","import styled from 'styled-components';\n\nimport { classNameWithPrefix } from '@crm-framework/utils';\n\nconst blockName = 'statistics-page';\n\nexport const PageWrapper = styled.div.attrs({\n className: classNameWithPrefix(blockName, 'wrapper'),\n})`\n display: flex;\n flex-direction: column;\n height: 100%;\n gap: 24px;\n`;\n\nexport const CalendarIconWrapper = styled.div.attrs({\n className: classNameWithPrefix(blockName, 'calendar-icon-wrapper'),\n})`\n margin-right: 6px;\n width: auto !important;\n`;\n","import React from 'react';\n\nimport { DashboardSettingsType } from '@ams-package/dashboard';\nimport { FilterTypes } from '@ams-package/filters';\nimport { BaseCell } from '@ams-package/grid';\nimport { svgComponents } from '@ams-package/icons';\nimport { toCurrency } from '@ams-package/utils';\n\nimport { CalendarIconWrapper } from './styled';\n\nexport const settings: DashboardSettingsType[] = [\n {\n name: 'groupKey',\n field: 'group',\n displayName: 'Group By',\n inGrid: false,\n inFilter: true,\n replaceDisplayNameToSelectedValue: true,\n replaceGridColumn: 'date',\n filterType: FilterTypes.SingleSelect,\n inSort: true,\n defaultVal: 'day',\n prefix: 'Group by',\n isClearable: false,\n options: [\n // { label: 'Platform', value: 'platform' },\n { label: 'Country', value: 'country' },\n { label: 'Brand', value: 'brand' },\n { label: 'Offer', value: 'offer' },\n { label: 'Month', value: 'month' },\n { label: 'Week', value: 'week' },\n { label: 'Day', value: 'day' },\n ],\n },\n {\n name: 'campaign',\n displayName: 'campaign',\n inGrid: false,\n isHidden: true,\n inFilter: true,\n filterType: FilterTypes.SingleSelect,\n },\n {\n name: 'date',\n displayName: 'Date',\n filterType: FilterTypes.Date,\n inGrid: true,\n inFilter: true,\n inSort: true,\n render: (value: string) => (\n \n \n \n \n {new Date(value).toLocaleDateString()}\n \n ),\n },\n {\n name: 'country',\n displayName: 'Country',\n filterType: FilterTypes.MultiSelect,\n dictionaryName: 'country',\n inGrid: false,\n inFilter: true,\n },\n {\n name: 'deviceType',\n dictionaryName: 'deviceType',\n displayName: 'Device type',\n filterType: FilterTypes.MultiSelect,\n inGrid: false,\n inFilter: true,\n },\n {\n name: 'platform',\n displayName: 'Platform',\n dictionaryName: 'devicePlatform',\n filterType: FilterTypes.MultiSelect,\n inGrid: false,\n inFilter: false,\n },\n {\n name: 'hits',\n displayName: 'Hits',\n inGrid: true,\n inFilter: false,\n inSort: true,\n },\n {\n name: 'uniques',\n displayName: 'Uniques',\n inGrid: true,\n inFilter: false,\n inSort: true,\n },\n {\n name: 'regs',\n displayName: 'Regs',\n inGrid: true,\n inFilter: false,\n inSort: true,\n },\n {\n name: 'ftd',\n displayName: 'FTD',\n inGrid: true,\n inFilter: false,\n inSort: true,\n },\n {\n name: 'deposits',\n displayName: 'Deposits',\n inGrid: true,\n inFilter: false,\n inSort: true,\n },\n {\n name: 'profit',\n displayName: 'Profit',\n inGrid: true,\n inFilter: false,\n inSort: true,\n render: (value: string) => {`$ ${toCurrency(value)}`},\n },\n];\n","// TODO: return 'platform' to list after filter will be ready\nexport const UNIVERSAL_FILTERS = [\n // 'platform',\n 'country',\n 'deviceType',\n 'campaign',\n];\n","import { authorizedWretch, formatDateForServer } from '@ams-package/utils';\nimport { parseUniversalFilters } from '@ams-package/filters';\nimport {\n APIGetItemsCallbackResponseType,\n IDashboardGridControllers,\n} from '@ams-package/dashboard';\n\nimport { IStatisticFilters, IStatisticRequestModel } from './types';\nimport { UNIVERSAL_FILTERS } from './consts';\n\nexport const getAffiliatesStatistics = async (\n payload: IStatisticRequestModel\n): Promise =>\n authorizedWretch('/api/affiliates-offers-statistics').post(payload).json();\n\nexport const getStatistic = async (\n $filters: IStatisticFilters,\n { sorting, pageSize, page }: IDashboardGridControllers\n): Promise => {\n const { platform, date, groupKey, country, deviceType, campaign } =\n $filters || {};\n const filters = parseUniversalFilters(UNIVERSAL_FILTERS, {\n country,\n platform,\n deviceType,\n campaign,\n });\n const [dateFrom, dateTo] = date || [];\n\n const requestModel: IStatisticRequestModel = {\n filters,\n sorting: sorting ? [sorting] : undefined,\n dateFrom: dateFrom ? formatDateForServer(dateFrom) : undefined,\n dateTo: dateTo ? formatDateForServer(dateTo) : undefined,\n groupKey: groupKey ? String(groupKey) : undefined,\n limit: pageSize,\n offset: (page - 1) * pageSize,\n };\n\n return getAffiliatesStatistics(requestModel);\n};\n","import { authorizedWretch } from '@ams-package/utils';\n\nimport { IDashboardConfig } from '../types';\n\nexport const getDashboardConfig = async (): Promise =>\n authorizedWretch('/api/summary/dashboard').get().json();\n","import { put, takeLatest } from 'redux-saga/effects';\nimport { call } from 'typed-redux-saga';\nimport { PayloadAction } from '@reduxjs/toolkit';\n\nimport { handleServerError } from '@ams-package/utils';\n\nimport { mainDashboardActions } from '../store';\nimport { getOffers } from '../../offers';\nimport { statisticPeriods } from '../components';\nimport { mapStatisticModel } from '../utils';\nimport { getAffiliatesStatistics } from '../../statistics';\n\nimport { getDashboardConfig } from './api';\n\nexport function* watchMainDashboardSagas() {\n yield takeLatest(mainDashboardActions.init.type, handleInit);\n yield takeLatest(\n mainDashboardActions.getAffStatistics,\n handleGetAffStatistics\n );\n}\n\nexport function* handleInit() {\n try {\n const config = yield* call(getDashboardConfig);\n yield put(mainDashboardActions.setConfig(config));\n\n if (!config.signups) return;\n\n const topOffers = yield* call(getOffers, { isTopOffer: true });\n yield put(mainDashboardActions.setTopOffers(topOffers));\n\n yield call(\n handleGetAffStatistics,\n mainDashboardActions.getAffStatistics(statisticPeriods.day.name)\n );\n } catch (error) {\n handleServerError({ error });\n } finally {\n yield put(mainDashboardActions.setIsReady(true));\n }\n}\n\nexport function* handleGetAffStatistics({\n payload: period,\n}: PayloadAction) {\n try {\n const selectedPeriod = statisticPeriods[period];\n\n if (!selectedPeriod) return;\n\n const { end, start, endPrevious, startPrevious } = selectedPeriod;\n\n const fixedRequestOptions = {\n groupKey: 'allTime',\n limit: 1,\n offset: 0,\n };\n\n const affStatistics = yield* call(getAffiliatesStatistics, {\n dateFrom: start,\n dateTo: end,\n ...fixedRequestOptions,\n });\n\n const prevPeriodAffStatistics =\n startPrevious && endPrevious\n ? yield* call(getAffiliatesStatistics, {\n dateFrom: startPrevious,\n dateTo: endPrevious,\n ...fixedRequestOptions,\n })\n : null;\n\n const statisticModel = affStatistics.data[0] ?? {};\n const prevStatisticModel = prevPeriodAffStatistics?.data[0] ?? {};\n\n const statistics = mapStatisticModel(statisticModel, prevStatisticModel);\n\n yield put(mainDashboardActions.setAffStatistics(statistics));\n } catch (error) {\n handleServerError({ error });\n }\n}\n","import { reducer as formReducer } from '@xcritical/forms';\nimport { modalReducer } from '@xcritical/modal';\n\nimport { createStore } from '@crm-framework/saga-injector';\nimport { registryReducer } from '@crm-framework/registry';\nimport { dictionariesReducer } from '@crm-framework/dictionaries';\n\nimport { appReducer } from '@ams-package/app';\nimport { filtersReducer } from '@ams-package/filters';\n\nimport { loginReducer } from './pages/login';\nimport { offersReducer } from './pages/offers';\nimport { mainDashboardReducer } from './pages/dashboard';\n\nexport const store = createStore(\n {\n form: formReducer,\n modal: modalReducer,\n login: loginReducer,\n app: appReducer,\n offers: offersReducer,\n registry: registryReducer,\n filters: filtersReducer,\n dictionaries: dictionariesReducer,\n mainDashboard: mainDashboardReducer,\n },\n {}\n);\n","import wretch from 'wretch';\n\nimport {\n IResetPasswordModel,\n ISignInModel,\n ISignInResponse,\n ISignUpModel,\n IRestorePasswordModel,\n} from '../types';\n\nexport const apiSignIn = async (model: ISignInModel) =>\n wretch(`/api/token/by-email`).post(model).json();\n\nexport const apiResetPassword = async (\n model: IResetPasswordModel\n): Promise => wretch(`/api/reset-password/by-email`).post(model).res();\n\nexport const apiRestorePassword = async (\n model: IRestorePasswordModel\n): Promise => wretch(`/api/confirm-reset`).post(model).res();\n\nexport const apiSignUp = async (model: ISignUpModel) =>\n wretch(`/api/register/external`).post(model).json();\n\nexport const apiValidateRegData = async (model: ISignInModel) =>\n wretch(`/api/register/validate`).post(model).res();\n","import { getObjectWithoutUndefinedPropsFrom } from 'utilitify';\n\nimport {\n validateEmail,\n validateIsRequired,\n validatePassword,\n} from '@ams-package/utils';\n\nimport {\n IPersonalDataModel,\n IRestorePasswordModel,\n ISignInModel,\n} from '../types';\nimport {\n SIGN_IN_FORM_FIELDS,\n PERSONAL_DATA_FORM_FIELDS,\n RESTORE_PASSWORD_FORM_FIELDS,\n} from '../consts';\n\nexport const validateSignInModel = (model: ISignInModel) => {\n const errors = {};\n\n errors[SIGN_IN_FORM_FIELDS.email] = validateEmail({ value: model.email });\n errors[SIGN_IN_FORM_FIELDS.password] = validateIsRequired({\n value: model.password,\n });\n\n return getObjectWithoutUndefinedPropsFrom(errors);\n};\n\nexport const validatePersonalDataModel = (model: IPersonalDataModel) => {\n const errors = Object.keys(PERSONAL_DATA_FORM_FIELDS).reduce((err, key) => {\n err[key] = validateIsRequired({ value: model[key] });\n\n return err;\n }, {});\n\n return getObjectWithoutUndefinedPropsFrom(errors);\n};\n\nexport const validateResetPasswordModel = (model: ISignInModel) => {\n const errors = {};\n\n errors[SIGN_IN_FORM_FIELDS.email] = validateIsRequired({\n value: model.email,\n });\n\n return getObjectWithoutUndefinedPropsFrom(errors);\n};\n\nexport const validateRestorePasswordModel = (model: IRestorePasswordModel) => {\n const errors = {};\n\n errors[RESTORE_PASSWORD_FORM_FIELDS.password] = validatePassword({\n value: model.password,\n });\n errors[RESTORE_PASSWORD_FORM_FIELDS.confirmPassword] = validateIsRequired({\n value: model.confirmPassword,\n });\n\n if (\n model.confirmPassword &&\n model.password &&\n model.confirmPassword !== model.password\n ) {\n errors[RESTORE_PASSWORD_FORM_FIELDS.confirmPassword] =\n \"Passwords don't match\";\n }\n\n return getObjectWithoutUndefinedPropsFrom(errors);\n};\n","import { call, select } from 'typed-redux-saga';\nimport { put } from 'redux-saga/effects';\nimport isEmpty from 'lodash/isEmpty';\n\nimport { xcriticalFormError, xcriticalFormShowErrors } from '@xcritical/forms';\n\nimport {\n LSHelper,\n LSKeys,\n getErrorTextFromArray,\n getQueryObject,\n} from '@ams-package/utils';\n\nimport { loginActions, signInFormSelector, signUpFormSelector } from '../store';\nimport { PERSONAL_DATA_REGISTER_FORM, SIGN_IN_FORM } from '../consts';\n\nimport { apiSignIn, apiSignUp, apiValidateRegData } from './api';\nimport { validatePersonalDataModel, validateSignInModel } from './validation';\nimport { redirect } from './utils';\n\nexport function* handleSignIn() {\n try {\n yield put(loginActions.setIsLoading(true));\n const { model } = yield* select(signInFormSelector);\n const validationErrors = validateSignInModel(model);\n\n if (!isEmpty(validationErrors)) {\n yield put(xcriticalFormShowErrors(SIGN_IN_FORM, true));\n yield put(xcriticalFormError(SIGN_IN_FORM, validationErrors));\n\n return;\n }\n\n const authData = yield* call(apiSignIn, {\n email: model.email,\n password: model.password,\n });\n const { access_token: accessToken, expires_in: expiresIn } = authData;\n yield call(LSHelper.setItem, LSKeys.token, accessToken);\n yield call(LSHelper.setItem, LSKeys.tokenHealth, expiresIn);\n\n redirect();\n } catch (error) {\n console.error(error);\n const errorMessage = JSON.parse(error.message);\n yield put(\n xcriticalFormError(SIGN_IN_FORM, {\n email: errorMessage.error,\n password: errorMessage.error,\n })\n );\n } finally {\n yield put(loginActions.setIsLoading(false));\n }\n}\n\nexport function* handleValidate() {\n try {\n yield put(loginActions.setIsLoading(true));\n const { model } = yield* select(signInFormSelector);\n const validationErrors = validateSignInModel(model);\n\n if (!isEmpty(validationErrors)) {\n yield put(xcriticalFormShowErrors(SIGN_IN_FORM, true));\n yield put(xcriticalFormError(SIGN_IN_FORM, validationErrors));\n\n return;\n }\n\n yield* call(apiValidateRegData, {\n email: model.email,\n password: model.password,\n });\n\n yield put(loginActions.setIsRegistrationInfoValidated());\n } catch (error) {\n console.error(error);\n const errorMessage = JSON.parse(error.message);\n yield put(\n xcriticalFormError(SIGN_IN_FORM, {\n email: errorMessage.email,\n password: errorMessage.password\n ? 'Password is invalid, please read the hint'\n : null,\n })\n );\n } finally {\n yield put(loginActions.setIsLoading(false));\n }\n}\n\nexport function* handleSignUp() {\n try {\n yield put(loginActions.setIsLoading(true));\n const { model: signInModel } = yield* select(signInFormSelector);\n const { model: personalDataModel } = yield* select(signUpFormSelector);\n const validationErrors = validatePersonalDataModel(personalDataModel);\n\n if (!isEmpty(validationErrors)) {\n yield put(xcriticalFormShowErrors(PERSONAL_DATA_REGISTER_FORM, true));\n yield put(\n xcriticalFormError(PERSONAL_DATA_REGISTER_FORM, validationErrors)\n );\n\n return;\n }\n\n const { refAff, managerId } = getQueryObject();\n\n yield* call(apiSignUp, {\n ...signInModel,\n ...personalDataModel,\n parentAffiliateId: refAff,\n managerId,\n messengerType: personalDataModel.messengerType?.id,\n });\n\n yield put(loginActions.signIn());\n } catch (error) {\n console.error(error);\n const errorMessage = JSON.parse(error.message);\n yield put(\n xcriticalFormError(\n PERSONAL_DATA_REGISTER_FORM,\n Object.keys(errorMessage).reduce(\n (errors, key) => ({\n ...errors,\n [key]: getErrorTextFromArray(errorMessage[key]),\n }),\n {}\n )\n )\n );\n } finally {\n yield put(loginActions.setIsLoading(false));\n }\n}\n","import URL from 'url-parse';\n\nexport const createUrlObject = (urlString = window.location.href): URL =>\n new URL(urlString, true);\n\nexport const redirect = () => {\n const { query } = createUrlObject();\n\n if (query.returnUrl) {\n const decodedReturnUrl = decodeURIComponent(query.returnUrl);\n window.location.replace(decodedReturnUrl);\n } else {\n window.location.replace('/');\n }\n};\n","import { call, select } from 'typed-redux-saga';\nimport { put } from 'redux-saga/effects';\nimport isEmpty from 'lodash/isEmpty';\nimport queryString from 'query-string';\n\nimport { xcriticalFormError, xcriticalFormShowErrors } from '@xcritical/forms';\n\nimport {\n loginActions,\n resetPasswordFormSelector,\n restorePasswordFormSelector,\n} from '../store';\nimport { RESET_PASSWORD_FORM, RESTORE_PASSWORD_FORM } from '../consts';\n\nimport { apiResetPassword, apiRestorePassword } from './api';\nimport {\n validateResetPasswordModel,\n validateRestorePasswordModel,\n} from './validation';\n\nexport function* handleResetPassword() {\n try {\n yield put(loginActions.setIsLoading(true));\n const { model } = yield* select(resetPasswordFormSelector);\n const validationErrors = validateResetPasswordModel(model);\n\n if (!isEmpty(validationErrors)) {\n yield put(xcriticalFormShowErrors(RESET_PASSWORD_FORM, true));\n yield put(xcriticalFormError(RESET_PASSWORD_FORM, validationErrors));\n\n return;\n }\n\n yield* call(apiResetPassword, model);\n\n yield put(loginActions.setIsPasswordReset(true));\n } catch (error) {\n console.error(error);\n const errorMessage = JSON.parse(error.message);\n yield put(\n xcriticalFormError(RESET_PASSWORD_FORM, {\n email: errorMessage.email,\n })\n );\n } finally {\n yield put(loginActions.setIsLoading(false));\n }\n}\n\nexport function* handleRestorePassword() {\n try {\n yield put(loginActions.setIsLoading(true));\n const { model } = yield* select(restorePasswordFormSelector);\n const validationErrors = validateRestorePasswordModel(model);\n\n if (!isEmpty(validationErrors)) {\n yield put(xcriticalFormShowErrors(RESTORE_PASSWORD_FORM, true));\n yield put(xcriticalFormError(RESTORE_PASSWORD_FORM, validationErrors));\n\n return;\n }\n\n const { token } = queryString.parse(window.location.search);\n yield* call(apiRestorePassword, { code: token as string, ...model });\n\n yield put(loginActions.setIsPasswordRestored(true));\n } catch (error) {\n console.error(error);\n const errorMessage = JSON.parse(error.message);\n yield put(\n xcriticalFormError(RESTORE_PASSWORD_FORM, {\n confirmPassword: errorMessage.error,\n })\n );\n } finally {\n yield put(loginActions.setIsLoading(false));\n }\n}\n","export const STORE_NAME = '@account-settings';\n\nexport const CHANGE_PASSWORD_FORM = 'changePasswordForm';\n\nexport const CHANGE_PASSWORD_FORM_FIELDS = {\n oldPassword: 'oldPassword',\n newPassword: 'newPassword',\n confirmPassword: 'confirmPassword',\n};\n\nexport const PERSONAL_INFO_FORM = 'personalInfoForm';\nexport const ACCOUNT_SETTINGS_STATUS_MODAL_NAME = 'accountSettingsStatusModal';\n\nexport const CHANGE_PASSWORD_IS_LOADING = 'changePasswordIsLoading';\nexport const PERSONAL_INFO_IS_READY = 'personalInfoIsReady';\nexport const PERSONAL_INFO_IS_LOADING = 'personalInfoIsLoading';\nexport const PAYMENT_SETTINGS_IS_LOADING = 'paymentSettingsIsLoading';\n\nexport const PERSONAL_INFO_FORM_FIELDS = {\n email: 'email',\n firstname: 'firstname',\n lastname: 'lastname',\n phone: 'phone',\n birthday: 'birthday',\n country: 'country',\n whatsApp: 'whatsApp',\n viber: 'viber',\n telegram: 'telegram',\n skype: 'skype',\n} as const;\n\nexport const PERSONAL_INFO_REQUIRED_FIELDS: Record<\n keyof typeof PERSONAL_INFO_FORM_FIELDS,\n boolean\n> = {\n [PERSONAL_INFO_FORM_FIELDS.email]: true,\n [PERSONAL_INFO_FORM_FIELDS.firstname]: true,\n [PERSONAL_INFO_FORM_FIELDS.lastname]: true,\n [PERSONAL_INFO_FORM_FIELDS.phone]: true,\n [PERSONAL_INFO_FORM_FIELDS.birthday]: true,\n [PERSONAL_INFO_FORM_FIELDS.country]: true,\n [PERSONAL_INFO_FORM_FIELDS.whatsApp]: false,\n [PERSONAL_INFO_FORM_FIELDS.telegram]: false,\n [PERSONAL_INFO_FORM_FIELDS.viber]: false,\n [PERSONAL_INFO_FORM_FIELDS.skype]: false,\n};\n\nexport const PERSONAL_INFO_GRID_SETTINGS = {\n columns: '342px 342px',\n rowGap: '20px',\n columnGap: '78px',\n};\n","import { createAction } from '@reduxjs/toolkit';\n\nimport { STORE_NAME } from '../consts';\n\nexport const CHANGE_PASSWORD = `${STORE_NAME}/change-password`;\nexport const INIT_PERSONAL_INFO = `${STORE_NAME}/init-personal-info`;\nexport const INIT_PAYMENT_SETTINGS = `${STORE_NAME}/init-payment-settings`;\nexport const SAVE_PERSONAL_INFO = `${STORE_NAME}/save-personal-info`;\n\nexport const accountSettingsActions = {\n changePassword: createAction(CHANGE_PASSWORD),\n initPersonalInfo: createAction(INIT_PERSONAL_INFO),\n savePersonalInfo: createAction(SAVE_PERSONAL_INFO),\n initPaymentSettings: createAction(INIT_PAYMENT_SETTINGS),\n};\n","import { createSelector } from 'reselect';\n\nimport { formSelector } from '@xcritical/forms';\n\nimport { formatDateForServer } from '@ams-package/utils';\n\nimport { CHANGE_PASSWORD_FORM, PERSONAL_INFO_FORM } from '../consts';\nimport {\n IChangePasswordFormState,\n IPersonalInfoFormState,\n IPersonalInfoRequestModel,\n} from '../types';\n\nexport const changePasswordFormSelector = (state): IChangePasswordFormState =>\n formSelector(state, CHANGE_PASSWORD_FORM);\n\nexport const personalInfoFormSelector = (state): IPersonalInfoFormState =>\n formSelector(state, PERSONAL_INFO_FORM);\n\nexport const personalInfoRequestModelSelector = createSelector(\n personalInfoFormSelector,\n ({ model }): IPersonalInfoRequestModel => ({\n ...model,\n country: model.country ? String(model.country) : '',\n birthday: model.birthday ? formatDateForServer(model.birthday) : '',\n })\n);\n","import { authorizedWretch } from '@ams-package/utils';\n\nimport { IChangePasswordModel, IPersonalInfoRequestModel } from '../types';\n\nexport const changePassword = async (\n payload: IChangePasswordModel\n): Promise => authorizedWretch(`/api/password`).put(payload).res();\n\nexport const savePersonalInfo = async (\n payload: IPersonalInfoRequestModel\n): Promise =>\n authorizedWretch(`/api/me/personal-info`).put(payload).res();\n","import { call, select } from 'typed-redux-saga';\nimport isEmpty from 'lodash/isEmpty';\nimport { put } from 'redux-saga/effects';\n\nimport { notify } from '@xcritical/notification';\nimport {\n xcriticalFormError,\n xcriticalFormReset,\n xcriticalFormShowErrors,\n} from '@xcritical/forms';\n\nimport { registryActions } from '@crm-framework/registry';\n\nimport { handleServerError } from '@ams-package/utils';\n\nimport { changePasswordFormSelector } from '../store';\nimport { CHANGE_PASSWORD_FORM, CHANGE_PASSWORD_IS_LOADING } from '../consts';\n\nimport { changePassword } from './api';\nimport { validateChangePasswordModel } from './validation';\n\nexport function* handleChangePassword(): Generator {\n try {\n yield put(registryActions.set(CHANGE_PASSWORD_IS_LOADING, true));\n const { model } = yield* select(changePasswordFormSelector);\n\n const validationErrors = validateChangePasswordModel(model);\n\n if (!isEmpty(validationErrors)) {\n yield put(xcriticalFormShowErrors(CHANGE_PASSWORD_FORM, true));\n yield put(xcriticalFormError(CHANGE_PASSWORD_FORM, validationErrors));\n\n return;\n }\n\n yield* call(changePassword, model);\n\n notify.success('New password saved successfully');\n yield put(xcriticalFormReset(CHANGE_PASSWORD_FORM));\n } catch (error) {\n yield call(handleServerError, { error, formName: CHANGE_PASSWORD_FORM });\n } finally {\n yield put(registryActions.set(CHANGE_PASSWORD_IS_LOADING, false));\n }\n}\n","import { getObjectWithoutUndefinedPropsFrom } from 'utilitify';\n\nimport {\n Conditions,\n validateIsRequired,\n validatePassword,\n validatePhone,\n} from '@ams-package/utils';\n\nimport { IChangePasswordModel, IPersonalInfoRequestModel } from '../types';\nimport {\n CHANGE_PASSWORD_FORM_FIELDS,\n PERSONAL_INFO_FORM_FIELDS,\n PERSONAL_INFO_REQUIRED_FIELDS,\n} from '../consts';\n\nexport const validateChangePasswordModel = (model: IChangePasswordModel) => {\n const errors = {};\n\n errors[CHANGE_PASSWORD_FORM_FIELDS.oldPassword] = validatePassword({\n value: model.oldPassword,\n message: {\n isValidMessage: 'Password is invalid',\n },\n });\n errors[CHANGE_PASSWORD_FORM_FIELDS.newPassword] = validatePassword({\n value: model.newPassword,\n });\n errors[CHANGE_PASSWORD_FORM_FIELDS.confirmPassword] = validateIsRequired({\n value: model.confirmPassword,\n });\n\n if (\n model.confirmPassword &&\n model.newPassword &&\n model.confirmPassword !== model.newPassword\n ) {\n errors[CHANGE_PASSWORD_FORM_FIELDS.confirmPassword] =\n \"Passwords don't match\";\n }\n\n return getObjectWithoutUndefinedPropsFrom(errors);\n};\n\nexport const validatePersonalInfoModel = (model: IPersonalInfoRequestModel) => {\n const errors = {};\n\n Object.keys(model).forEach((key) => {\n if (PERSONAL_INFO_REQUIRED_FIELDS[key]) {\n errors[key] = validateIsRequired({ value: model[key] });\n }\n });\n\n errors[PERSONAL_INFO_FORM_FIELDS.phone] = validatePhone({\n value: model.phone,\n });\n\n errors[PERSONAL_INFO_FORM_FIELDS.viber] = validatePhone({\n value: model.viber,\n conditions: [Conditions.isPhone],\n });\n errors[PERSONAL_INFO_FORM_FIELDS.whatsApp] = validatePhone({\n value: model.whatsApp,\n conditions: [Conditions.isPhone],\n });\n\n return getObjectWithoutUndefinedPropsFrom(errors);\n};\n","import { call, select } from 'typed-redux-saga';\nimport { put } from 'redux-saga/effects';\nimport isEmpty from 'lodash/isEmpty';\n\nimport {\n xcriticalFormError,\n xcriticalFormInit,\n xcriticalFormShowErrors,\n} from '@xcritical/forms';\nimport { xcriticalModalOpen } from '@xcritical/modal';\n\nimport { registryActions } from '@crm-framework/registry';\n\nimport { loadAndSaveDictionariesByName } from '@ams-package/dictionaries';\nimport { getUser, handleGetUser } from '@ams-package/app';\nimport { handleServerError } from '@ams-package/utils';\nimport { StatusModalTypes } from '@ams-package/status-message';\n\nimport {\n ACCOUNT_SETTINGS_STATUS_MODAL_NAME,\n PERSONAL_INFO_FORM,\n PERSONAL_INFO_IS_LOADING,\n PERSONAL_INFO_IS_READY,\n} from '../consts';\nimport { personalInfoRequestModelSelector } from '../store';\n\nimport { validatePersonalInfoModel } from './validation';\nimport { savePersonalInfo } from './api';\n\nexport function* handleInitPersonalInfo(): Generator {\n try {\n yield* loadAndSaveDictionariesByName(['country']);\n const currentUser = yield* select(getUser);\n\n if (currentUser) {\n const contacts = currentUser.contacts || {};\n yield put(\n xcriticalFormInit(PERSONAL_INFO_FORM, {\n ...contacts,\n ...currentUser,\n birthday: currentUser.birthday\n ? new Date(currentUser.birthday)\n : null,\n })\n );\n }\n } catch (error) {\n console.error(error);\n } finally {\n yield put(registryActions.set(PERSONAL_INFO_IS_READY, true));\n }\n}\n\nexport function* handleChangePersonalInfo(): Generator {\n try {\n yield put(registryActions.set(PERSONAL_INFO_IS_LOADING, true));\n\n const requestModel = yield* select(personalInfoRequestModelSelector);\n const validationErrors = validatePersonalInfoModel(requestModel);\n\n if (!isEmpty(validationErrors)) {\n yield put(xcriticalFormShowErrors(PERSONAL_INFO_FORM, true));\n yield put(xcriticalFormError(PERSONAL_INFO_FORM, validationErrors));\n\n return;\n }\n\n yield* call(savePersonalInfo, requestModel);\n yield* call(handleGetUser);\n\n yield put(\n xcriticalModalOpen(ACCOUNT_SETTINGS_STATUS_MODAL_NAME, {\n message: {\n type: StatusModalTypes.Success,\n title: 'Your data has been successfully saved',\n },\n })\n );\n } catch (error) {\n yield call(handleServerError, {\n error,\n formName: PERSONAL_INFO_FORM,\n statusModalName: ACCOUNT_SETTINGS_STATUS_MODAL_NAME,\n });\n } finally {\n yield put(registryActions.set(PERSONAL_INFO_IS_LOADING, false));\n }\n}\n","import { put } from 'redux-saga/effects';\n\nimport { registryActions } from '@crm-framework/registry';\n\nimport { loadAndSaveDictionariesByName } from '@ams-package/dictionaries';\n\nimport { PAYMENT_SETTINGS_IS_LOADING } from '../consts';\n\nexport function* handleInitPaymentSettings(): Generator {\n try {\n yield put(registryActions.set(PAYMENT_SETTINGS_IS_LOADING, true));\n\n yield* loadAndSaveDictionariesByName(['paymentMethods', 'texts']);\n } catch (error) {\n console.error(error);\n } finally {\n yield put(registryActions.set(PAYMENT_SETTINGS_IS_LOADING, false));\n }\n}\n","import { all } from 'redux-saga/effects';\n\nimport { watchApp } from '@ams-package/app';\n\nimport { watchLoginSagas } from '../pages/login/sagas';\nimport { watchOffersSagas } from '../pages/offers/sagas';\nimport { watchAccountSettingsSagas } from '../pages/account-settings/sagas';\nimport { watchMainDashboardSagas } from '../pages/dashboard';\n\nconst appSagas: any = [\n watchLoginSagas,\n watchApp,\n watchOffersSagas,\n watchAccountSettingsSagas,\n watchMainDashboardSagas,\n];\n\nexport function* watchAppSaga() {\n yield all(appSagas.map((saga) => saga()));\n}\n","import { takeLatest } from 'redux-saga/effects';\n\nimport { loginActions } from '../store';\n\nimport { handleSignIn, handleValidate, handleSignUp } from './sagas';\nimport {\n handleResetPassword,\n handleRestorePassword,\n} from './resetPasswordSagas';\n\nexport function* watchLoginSagas() {\n yield takeLatest(loginActions.signIn, handleSignIn);\n yield takeLatest(loginActions.validateRegisterForm, handleValidate);\n yield takeLatest(loginActions.signUp, handleSignUp);\n yield takeLatest(loginActions.resetPassword, handleResetPassword);\n yield takeLatest(loginActions.restorePassword, handleRestorePassword);\n}\n","import { takeLatest } from 'redux-saga/effects';\n\nimport { offersActions } from '../store';\n\nimport { handleOffersInit } from './offersSagas';\nimport { handleOfferInit, handleGetLandingPages } from './offerSagas';\n\nexport * from './api';\n\nexport function* watchOffersSagas() {\n yield takeLatest(offersActions.initOffers, handleOffersInit);\n yield takeLatest(offersActions.initOffer, handleOfferInit);\n yield takeLatest(offersActions.getLandingPages, handleGetLandingPages);\n}\n","import { takeLatest } from 'redux-saga/effects';\n\nimport { accountSettingsActions } from '../store';\n\nimport { handleChangePassword } from './changePasswordSagas';\nimport {\n handleChangePersonalInfo,\n handleInitPersonalInfo,\n} from './personalInfoSagas';\nimport { handleInitPaymentSettings } from './paymentSettingsSagas';\n\nexport function* watchAccountSettingsSagas() {\n yield takeLatest(accountSettingsActions.changePassword, handleChangePassword);\n yield takeLatest(\n accountSettingsActions.initPersonalInfo,\n handleInitPersonalInfo\n );\n yield takeLatest(\n accountSettingsActions.savePersonalInfo,\n handleChangePersonalInfo\n );\n yield takeLatest(\n accountSettingsActions.initPaymentSettings,\n handleInitPaymentSettings\n );\n}\n","import { createAction, createSlice, PayloadAction } from '@reduxjs/toolkit';\n\nimport { IPayoutDetails, IRegularPayoutState } from './types';\n\nconst initialState: IRegularPayoutState = {\n isReady: false,\n payoutDetails: null,\n};\n\nexport const REGULAR_PAYOUT_FORM = 'REGULAR_PAYOUT_FORM';\nexport const STORE_NAME = '@regular-payouts';\n\nconst regularPayoutStore = createSlice({\n name: STORE_NAME,\n initialState,\n reducers: {\n finishInit: (state) => {\n state.isReady = true;\n },\n setPayoutDetails: (state, action: PayloadAction) => {\n state.payoutDetails = action.payload;\n },\n },\n});\n\nconst INIT_WIDGET = `${STORE_NAME}/init-widget` as const;\nconst INIT_PAYMENT_DATES = `${STORE_NAME}/init-payment-dates` as const;\nconst SELECT = `${STORE_NAME}/select` as const;\nconst DELETE = `${STORE_NAME}/delete` as const;\nconst CONFIRM_DELETE = `${STORE_NAME}/confirm-delete` as const;\n\nexport const regularPayoutActions = {\n ...regularPayoutStore.actions,\n initWidget: createAction(INIT_WIDGET),\n select: createAction(SELECT),\n delete: createAction(DELETE),\n confirmDelete: createAction(CONFIRM_DELETE),\n initPaymentDates: createAction(INIT_PAYMENT_DATES),\n};\n\nexport const regularPayoutReducer = regularPayoutStore.reducer;\n","import { createSelector } from '@reduxjs/toolkit';\nimport { parseISO } from 'date-fns';\n\nimport {\n getDictionarySelect,\n IPaymentMethodsModel,\n} from '@ams-package/dictionaries';\nimport { getDateRangeString } from '@ams-package/utils';\nimport { getLimits, getUser } from '@ams-package/app';\n\nimport { STORE_NAME } from './store';\nimport { IRegularPayoutState } from './types';\n\nexport const regularPayoutSelector = (state): IRegularPayoutState =>\n state[STORE_NAME];\n\nexport const isReadySelector = (state) => regularPayoutSelector(state).isReady;\n\nexport const regularPaymentMethodSelector = createSelector(\n getDictionarySelect('paymentMethods'),\n (paymentMethods?: IPaymentMethodsModel[]): IPaymentMethodsModel | undefined =>\n paymentMethods?.find((method) => method.isRegular)\n);\n\nexport const regularPaymentMethodIdSelector = createSelector(\n regularPaymentMethodSelector,\n (paymentMethod: IPaymentMethodsModel | undefined): number | undefined =>\n paymentMethod?.id\n);\n\nexport const selectedPayoutPaymentSelector = createSelector(\n regularPaymentMethodSelector,\n getDictionarySelect('payoutPaymentMethods'),\n (selectedMethod, paymentMethods) =>\n paymentMethods.find((method) => method.name === selectedMethod?.name)\n);\n\nexport const payoutDetailsSelector = (state) =>\n regularPayoutSelector(state).payoutDetails;\n\nexport const payoutDateSelector = createSelector(\n payoutDetailsSelector,\n (payoutDetails) => {\n const { minUpcomingPayoutDate, maxUpcomingPayoutDate } =\n payoutDetails ?? {};\n\n if (!minUpcomingPayoutDate || !maxUpcomingPayoutDate) return '';\n\n return getDateRangeString(\n parseISO(minUpcomingPayoutDate),\n parseISO(maxUpcomingPayoutDate)\n );\n }\n);\n\nexport const regularPayoutMinBalanceLimitSelector = (state) =>\n getLimits(state)?.regularPayoutRequestMinBalanceLimit ?? 0;\n\nexport const regularPayoutsViewSelector = createSelector(\n isReadySelector,\n payoutDateSelector,\n regularPayoutMinBalanceLimitSelector,\n getUser,\n selectedPayoutPaymentSelector,\n (isReady, payoutDate, minBalance, user, selectedPayment) => ({\n isReady,\n payoutDate,\n minBalance,\n availableWithdrawal:\n user?.balance &&\n user.balance >= minBalance &&\n user.status === 'Active' &&\n isReady,\n selectedPayment,\n })\n);\n","export const REGULAR_PAYOUT_FIELDS = {\n methodId: 'methodId',\n};\n\nexport const REGULAR_PAYOUT_STATUS_MESSAGES = {\n regularPayouts:\n 'Your payment method has been successfully saved. This method will be used when creating the next Regular payout',\n};\n","import { WretchResponse } from 'wretch';\n\nimport { authorizedWretch } from '@ams-package/utils';\n\nimport { IPayoutDetails } from '../types';\n\nexport const apiSelectRegularPaymentMethod = async (\n paymentMethodId: number\n): Promise =>\n authorizedWretch(`/api/payment-methods/${paymentMethodId}/regular`)\n .put()\n .res();\n\nexport const apiClearRegularPaymentMethod = async (): Promise =>\n authorizedWretch(`/api/payment-methods/regular`).delete().res();\n\nexport const apiGetPayoutDetails = async (): Promise =>\n authorizedWretch('/api/summary/payouts').get().json();\n","import { call, put, select } from 'typed-redux-saga';\nimport { PayloadAction } from '@reduxjs/toolkit';\n\nimport { xcriticalModalClose, xcriticalModalOpen } from '@xcritical/modal';\nimport {\n xcriticalFormPropertyChange,\n xcriticalFormReset,\n} from '@xcritical/forms';\nimport { notify } from '@xcritical/notification';\n\nimport { handleServerError } from '@ams-package/utils';\nimport { ButtonsTypes } from '@ams-package/modal';\nimport { loadAndSaveDictionariesByName } from '@ams-package/dictionaries';\nimport { OnSuccessActionPayload } from '@ams-package/payment-method-editor';\n\nimport { REGULAR_PAYOUT_FORM, regularPayoutActions } from '../store';\nimport { regularPaymentMethodIdSelector } from '../selectors';\nimport { REGULAR_PAYOUT_FIELDS } from '../consts';\n\nimport {\n apiClearRegularPaymentMethod,\n apiGetPayoutDetails,\n apiSelectRegularPaymentMethod,\n} from './api';\n\nexport function* handleStartInit() {\n try {\n yield call(loadAndSaveDictionariesByName, [\n 'paymentMethods',\n 'payoutStatus',\n 'payoutPaymentMethods',\n ]);\n yield call(handleSetSelectedPaymentMethod);\n yield put(regularPayoutActions.finishInit());\n } catch (e) {\n console.error(e);\n yield handleServerError({ error: e });\n }\n}\n\nexport function* handleSelectRegularPaymentMethod(\n { payload }: PayloadAction,\n withoutNotify?: boolean\n) {\n try {\n yield call(apiSelectRegularPaymentMethod, payload);\n\n yield loadAndSaveDictionariesByName(['paymentMethods'], undefined, [\n 'paymentMethods',\n ]);\n\n if (!withoutNotify) {\n notify.success('Your payment method has been successfully saved');\n }\n } catch (e) {\n yield handleServerError({\n error: e,\n statusModalName: 'global',\n });\n }\n}\n\nexport function* handleDeleteRegularPaymentMethod() {\n yield call(handleSetSelectedPaymentMethod);\n\n yield put(\n xcriticalModalOpen('confirm', {\n message: {\n title: 'Delete payment method',\n description:\n 'Are you sure you want to remove the payment method? If the payment method is not selected, the next regular payout will not be executed.',\n },\n buttons: [\n {\n type: ButtonsTypes.primary,\n title: 'Delete',\n callback: (dispatcher) => {\n dispatcher(regularPayoutActions.confirmDelete());\n },\n },\n {\n type: ButtonsTypes.secondary,\n title: 'Cancel',\n callback: (dispatcher) => {\n dispatcher(xcriticalModalClose('confirm'));\n },\n },\n ],\n })\n );\n}\n\nexport function* handleConfirmDeleteRegularPaymentMethod() {\n try {\n yield call(apiClearRegularPaymentMethod);\n yield loadAndSaveDictionariesByName(['paymentMethods'], undefined, [\n 'paymentMethods',\n ]);\n yield put(xcriticalFormReset(REGULAR_PAYOUT_FORM));\n yield put(xcriticalModalClose('confirm'));\n } catch (e) {\n yield handleServerError({\n error: e,\n statusModalName: 'global',\n });\n }\n}\n\nexport function* handleInitPayoutDetails() {\n try {\n const payoutDetails = yield* call(apiGetPayoutDetails);\n yield put(regularPayoutActions.setPayoutDetails(payoutDetails));\n } catch (e) {\n console.error(e);\n yield handleServerError({ error: e });\n }\n}\n\nexport function* handleSetSelectedPaymentMethod() {\n const methodId = yield* select(regularPaymentMethodIdSelector);\n\n yield put(\n xcriticalFormPropertyChange(\n REGULAR_PAYOUT_FORM,\n REGULAR_PAYOUT_FIELDS.methodId,\n methodId\n )\n );\n}\n\nexport function* handleSelectRegularPaymentMethodOnCreate({\n payload,\n}: PayloadAction) {\n if (payload.formName === REGULAR_PAYOUT_FORM && payload.id) {\n yield call(handleSelectRegularPaymentMethod, { payload: payload.id }, true);\n yield call(handleSetSelectedPaymentMethod);\n }\n}\n","import { takeEvery, takeLatest } from 'redux-saga/effects';\n\nimport { paymentEditorActions } from '@ams-package/payment-method-editor';\n\nimport { regularPayoutActions } from '../store';\n\nimport {\n handleStartInit,\n handleDeleteRegularPaymentMethod,\n handleConfirmDeleteRegularPaymentMethod,\n handleSelectRegularPaymentMethod,\n handleInitPayoutDetails,\n handleSelectRegularPaymentMethodOnCreate,\n} from './saga';\n\nexport function* watchers() {\n yield takeLatest(regularPayoutActions.initWidget, handleStartInit);\n yield takeLatest(\n regularPayoutActions.select,\n handleSelectRegularPaymentMethod\n );\n yield takeLatest(\n regularPayoutActions.delete,\n handleDeleteRegularPaymentMethod\n );\n yield takeLatest(\n regularPayoutActions.confirmDelete,\n handleConfirmDeleteRegularPaymentMethod\n );\n yield takeEvery(\n paymentEditorActions.onSuccess,\n handleSelectRegularPaymentMethodOnCreate\n );\n}\n\nexport function* payoutDetailsWatchers() {\n yield takeLatest(\n regularPayoutActions.initPaymentDates,\n handleInitPayoutDetails\n );\n}\n","import styled from 'styled-components';\nimport { CloseCircle, TickCircle } from 'iconsax-react';\n\nimport { classNameWithPrefix } from '@crm-framework/utils';\n\nimport Panel from '@ams-package/panel';\nimport { generateFontStyle } from '@ams-package/theme';\n\nconst blockName = 'regular-payouts';\n\nexport const RegularPayoutGrid = styled.div.attrs({\n className: classNameWithPrefix(blockName, 'grid'),\n})`\n display: grid;\n grid-template-rows: repeat(5, auto);\n grid-column-gap: 12px;\n grid-row-gap: 20px;\n`;\n\nexport const RegularPayoutContainer = styled(Panel)`\n display: block;\n height: 100%;\n`;\n\nexport const PaymentRequestTitle = styled.h3.attrs({\n className: classNameWithPrefix(blockName, 'title'),\n})`\n grid-area: 1 / 1 / 2 / 2;\n`;\n\nexport const PaymentRequestCheckStatus = styled.div.attrs({\n className: classNameWithPrefix(blockName, 'check-status'),\n})`\n grid-area: 1 / 2 / 2 / 2;\n display: flex;\n justify-content: flex-end;\n`;\n\nexport const PaymentCheckMessage = styled.div.attrs({\n className: classNameWithPrefix(blockName, 'check-message'),\n})`\n grid-area: 2 / 1 / 3 / 3;\n color: var(--description-text-color);\n ${generateFontStyle('body-2r')}\n`;\n\nexport const RegularPayoutField = styled.div.attrs({\n className: classNameWithPrefix(blockName, 'field'),\n})`\n grid-area: 4 / 1 / 4 / 3;\n`;\n\nexport const UpcomingDate = styled.div.attrs({\n className: classNameWithPrefix(blockName, 'upcoming-date'),\n})`\n grid-area: 3 / 1 / 3 / 3;\n`;\n\nexport const UpcomingDateLabel = styled.div.attrs({\n className: classNameWithPrefix(blockName, 'upcoming-date-label'),\n})`\n ${generateFontStyle('body-2m')}\n`;\n\nexport const CloseCircleIcon = styled(CloseCircle).attrs({\n className: classNameWithPrefix(blockName, 'close-circle-icon'),\n})`\n line-height: 1.2;\n vertical-align: top;\n margin: 2px;\n color: var(--danger-text-color);\n`;\n\nexport const TickCircleIcon = styled(TickCircle).attrs({\n className: classNameWithPrefix(blockName, 'tick-circle-icon'),\n})`\n line-height: 1.2;\n vertical-align: top;\n margin: 2px;\n color: var(--primary-color);\n`;\n\nexport const HeaderPayoutDate = styled.div.attrs({\n className: classNameWithPrefix(blockName, 'header-payout-date'),\n})`\n font-family: Satoshi;\n font-size: var(--header-payout-date-font-size);\n font-weight: 700;\n`;\n\nexport const HeaderPayoutWrapper = styled.div.attrs({\n className: classNameWithPrefix(blockName, 'header-payout-wrapper'),\n})`\n display: flex;\n flex-direction: column;\n gap: 6px;\n`;\n\nexport const HeaderPayoutTitle = styled.div.attrs({\n className: classNameWithPrefix(blockName, 'header-payout-title'),\n})`\n display: flex;\n align-items: center;\n ${generateFontStyle('body-3r')}\n color: var(--primary-color);\n gap: 8px;\n`;\n\nexport const MinimumAmountWrapper = styled.div.attrs({\n className: classNameWithPrefix(blockName, 'minimum-amount-wrapper'),\n})`\n ${generateFontStyle('body-3r')}\n color: var(--description-text-color);\n padding-left: 6px;\n`;\n","import React, { useCallback, useEffect } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\n\nimport Badge from '@xcritical/badge';\nimport Form, { FormField } from '@xcritical/forms';\n\nimport { Label } from '@ams-package/label';\nimport { SelectPaymentMethod } from '@ams-package/payment-method-editor';\nimport { Skeleton } from '@ams-package/skeleton';\n\nimport {\n CloseCircleIcon,\n PaymentCheckMessage,\n PaymentRequestCheckStatus,\n PaymentRequestTitle,\n RegularPayoutField,\n RegularPayoutContainer,\n TickCircleIcon,\n UpcomingDate,\n UpcomingDateLabel,\n MinimumAmountWrapper,\n RegularPayoutGrid,\n} from './styled';\nimport { regularPayoutActions, REGULAR_PAYOUT_FORM } from './store';\nimport { regularPayoutsViewSelector } from './selectors';\nimport { REGULAR_PAYOUT_FIELDS } from './consts';\n\nexport const RegularPayout = () => {\n const dispatch = useDispatch();\n const {\n availableWithdrawal,\n minBalance,\n isReady,\n payoutDate,\n selectedPayment,\n } = useSelector(regularPayoutsViewSelector);\n\n useEffect(() => {\n dispatch(regularPayoutActions.initWidget());\n }, []);\n\n const handleChangeMethod = useCallback((paymentMethodId: number) => {\n if (paymentMethodId) {\n dispatch(regularPayoutActions.select(paymentMethodId));\n } else {\n dispatch(regularPayoutActions.delete());\n }\n }, []);\n\n return (\n
\n \n \n Regular Payouts\n \n {isReady ? (\n \n {availableWithdrawal ? 'Activated' : 'Not available'}\n \n ) : (\n \n )}\n \n \n {availableWithdrawal ? (\n \n ) : (\n \n )}\n  Have at least ${minBalance} in available balance\n \n {payoutDate && (\n \n Upcoming payout\n

{payoutDate}

\n
\n )}\n \n \n \n \n {selectedPayment\n ? `The minimum payout amount for ${selectedPayment.name} is $${selectedPayment.payoutByRequestMinAmount}`\n : ''}\n \n \n
\n
\n
\n );\n};\n","import React, { useEffect } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\n\nimport { Icon } from '@ams-package/icons';\n\nimport {\n HeaderPayoutDate,\n HeaderPayoutTitle,\n HeaderPayoutWrapper,\n} from './styled';\nimport { regularPayoutActions } from './store';\nimport { payoutDateSelector } from './selectors';\n\nexport const PayoutDate = () => {\n const dispatch = useDispatch();\n const payoutDate = useSelector(payoutDateSelector);\n\n useEffect(() => {\n dispatch(regularPayoutActions.initPaymentDates());\n }, []);\n\n return payoutDate ? (\n \n \n \n Upcoming payout:\n \n {payoutDate}\n \n ) : null;\n};\n","import React from 'react';\n\nimport { ReduxInject } from '@crm-framework/saga-injector';\n\nimport { STORE_NAME, regularPayoutReducer } from './store';\nimport { payoutDetailsWatchers, watchers } from './sagas';\nimport { RegularPayout } from './RegularPayout';\nimport { PayoutDate } from './PayoutDate';\nexport { RegularRequestStub } from './RegularRequestStub';\nexport { payoutDateSelector } from './selectors';\nexport { REGULAR_PAYOUT_STATUS_MESSAGES } from './consts';\n\nexport const RegularPayoutInject = ({ ...props }) => (\n \n \n \n);\n\nexport default RegularPayoutInject;\n\nexport const PayoutDateInject = ({ ...props }) => (\n \n \n \n);\n","import React from 'react';\nimport styled from 'styled-components';\n\nimport Badge from '@xcritical/badge';\n\nimport Panel from '@ams-package/panel';\n\nconst RegularRequestStubWrapper = styled(Panel)`\n display: flex;\n justify-content: center;\n align-items: center;\n height: 100%;\n`;\n\nconst ContentWrapper = styled.div`\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 16px;\n`;\n\nexport const RegularRequestStub = () => (\n \n \n

Regular Payouts

\n \n SOON\n \n
\n
\n);\n","import styled from 'styled-components';\n\nimport { classNameWithPrefix } from '@crm-framework/utils';\n\nimport { generateFontStyle } from '@ams-package/theme';\n\nconst blockName = 'header';\n\nexport const HeaderSection = styled.div.attrs({\n className: classNameWithPrefix(blockName, 'section'),\n})`\n position: sticky;\n top: 0;\n left: 0;\n right: 0;\n padding: var(--header-section-padding);\n background-color: var(--background-color);\n z-index: 2;\n`;\n\nexport const HeaderWrapper = styled.div.attrs({\n className: classNameWithPrefix(blockName, 'wrapper'),\n})`\n display: grid;\n grid-auto-flow: row dense;\n grid-template-columns: 3fr 9fr;\n grid-template-rows: 100%;\n gap: 0px 0px;\n align-items: center;\n border-radius: 16px;\n background: var(--modal-background-color);\n padding: 8px 8px 8px 20px;\n`;\n\nexport const HeaderInfoWrapper = styled.div.attrs({\n className: classNameWithPrefix(blockName, 'info-wrapper'),\n})`\n display: flex;\n justify-content: end;\n align-items: center;\n gap: 32px;\n`;\n\nexport const HeaderButtonContent = styled.div.attrs({\n className: classNameWithPrefix(blockName, 'button-content'),\n})`\n display: flex;\n align-items: center;\n ${generateFontStyle('body-1m')}\n gap: 20px;\n`;\n","import React from 'react';\nimport { useSelector } from 'react-redux';\n\nimport { Button } from '@ams-package/button';\nimport { getUser } from '@ams-package/app';\nimport { toCurrency } from '@ams-package/utils';\n\nimport { PayoutDateInject } from '../regular-payouts';\n\nimport {\n HeaderSection,\n HeaderWrapper,\n HeaderInfoWrapper,\n HeaderButtonContent,\n} from './styles';\n\nexport const Header: React.FC = () => {\n const user = useSelector(getUser);\n\n return (\n \n \n

{`${user?.firstname} ${user?.lastname}`}

\n \n \n \n \n
\n
\n );\n};\n","import React from 'react';\nimport { useDispatch } from 'react-redux';\n\nimport { xcriticalModalClose, xcriticalModalOpen } from '@xcritical/modal';\n\nimport { StatusModalTypes } from '@ams-package/status-message';\nimport {\n Modal,\n StatusModal,\n WithoutHeaderModal,\n ButtonsTypes,\n} from '@ams-package/modal';\nimport { SideModal } from '@ams-package/side-modal';\n\nexport const TestModals: React.FC = (): any => {\n const dispatch = useDispatch();\n const [isOpen, setIsOpen] = React.useState(false);\n\n const showModal = (name) => {\n dispatch(xcriticalModalOpen(name));\n };\n const showSuccessModal = (name) => {\n dispatch(\n xcriticalModalOpen(name, {\n message: {\n type: StatusModalTypes.Success,\n title: 'Request successfully accepted',\n description:\n 'We have accepted the withdrawal request, when we approve it, the funds will be credited to your account. Keep in touch with your manager',\n },\n })\n );\n };\n const showFailureModal = (name) => {\n dispatch(\n xcriticalModalOpen(name, {\n message: {\n type: StatusModalTypes.Failure,\n title: 'Connection error',\n description:\n 'No internet connection. Check your connection and try again',\n },\n buttons: {\n type: ButtonsTypes.primary,\n title: 'Try again',\n callback: (dispatcher) => {\n dispatcher(xcriticalModalClose(name));\n },\n },\n })\n );\n };\n\n return (\n
\n \n {\n setIsOpen(false);\n }}>\n hello\n \n \n \n \n\n \n \n Default\n \n\n \n \n WithoutHeaderModal\n \n
\n );\n};\n","import styled, { createGlobalStyle } from 'styled-components';\n\nimport { classNameWithPrefix } from '@crm-framework/utils';\n\nexport const blockName = 'account-settings';\n\nexport const AccountSettingsWrapper = styled.div.attrs({\n className: classNameWithPrefix(blockName, 'wrapper'),\n})`\n display: flex;\n flex-direction: column;\n`;\n\nexport const AccountSettingsCssStyles = createGlobalStyle`\n :root {\n --add-payment-method-button-size: 24px;\n \n @media (max-width: 1200px) {\n --add-payment-method-button-size: 16px;\n }\n }\n`;\n","import styled from 'styled-components';\n\nimport { classNameWithPrefix } from '@crm-framework/utils';\n\nimport { blockName } from '../styled';\n\nexport const SecurityTabWrapper = styled.div.attrs({\n className: classNameWithPrefix(blockName, 'security-tab-wrapper'),\n})`\n display: flex;\n flex-direction: column;\n max-width: 342px;\n gap: 20px;\n`;\n\nexport const SubmitButtonWrapper = styled.div.attrs({\n className: classNameWithPrefix(blockName, 'submit-button-wrapper'),\n})`\n margin-top: 12px;\n`;\n","import React, { useCallback } from 'react';\nimport { useDispatch } from 'react-redux';\n\nimport Form, { FormField } from '@xcritical/forms';\n\nimport { useRegistry } from '@crm-framework/registry';\n\nimport { Label } from '@ams-package/label';\nimport {\n PasswordFormField,\n PasswordValidationFormField,\n} from '@ams-package/input';\nimport { Button } from '@ams-package/button';\n\nimport {\n CHANGE_PASSWORD_FORM,\n CHANGE_PASSWORD_FORM_FIELDS,\n CHANGE_PASSWORD_IS_LOADING,\n} from '../consts';\nimport { accountSettingsActions } from '../store';\n\nimport { SubmitButtonWrapper, SecurityTabWrapper } from './styled';\n\nexport const SecurityTab: React.FC = () => {\n const dispatch = useDispatch();\n const isLoading = useRegistry(CHANGE_PASSWORD_IS_LOADING, false);\n\n const onChangePassword = useCallback(() => {\n dispatch(accountSettingsActions.changePassword());\n }, []);\n\n return (\n
\n \n

Change current password

\n\n
\n \n \n
\n
\n \n \n
\n
\n \n Confirm Password\n \n \n
\n \n \n Save\n \n \n
\n
\n );\n};\n","import React from 'react';\nimport { Grid } from 'styled-css-grid';\n\nimport { Label } from '@ams-package/label';\nimport { Button } from '@ams-package/button';\nimport { Skeleton } from '@ams-package/skeleton';\n\nimport {\n PERSONAL_INFO_GRID_SETTINGS,\n PERSONAL_INFO_REQUIRED_FIELDS,\n} from '../consts';\n\nimport { SubmitButtonWrapper } from './styled';\n\nexport const PersonalInfoTabSkeleton: React.FC = () => (\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
\n
\n \n \n
\n
\n \n \n
\n
\n \n \n
\n
\n \n \n
\n \n \n \n
\n);\n","import React, { useCallback, useEffect } from 'react';\nimport { useDispatch } from 'react-redux';\nimport { Grid } from 'styled-css-grid';\nimport { LockCircle } from 'iconsax-react';\n\nimport Form, { FormField } from '@xcritical/forms';\n\nimport { useRegistry } from '@crm-framework/registry';\n\nimport { Label } from '@ams-package/label';\nimport { InputFormField } from '@ams-package/input';\nimport { Button } from '@ams-package/button';\nimport { DictionarySelect } from '@ams-package/select';\nimport { DatePickerFormField } from '@ams-package/datepicker';\nimport {\n getEighteenYearsAgoDate,\n MAX_PHONE_LENGTH,\n PHONE_VALIDATION_PATTERN,\n} from '@ams-package/utils';\n\nimport {\n PERSONAL_INFO_FORM,\n PERSONAL_INFO_FORM_FIELDS,\n PERSONAL_INFO_GRID_SETTINGS,\n PERSONAL_INFO_IS_LOADING,\n PERSONAL_INFO_IS_READY,\n PERSONAL_INFO_REQUIRED_FIELDS,\n} from '../consts';\nimport { accountSettingsActions } from '../store';\n\nimport { SubmitButtonWrapper } from './styled';\nimport { PersonalInfoTabSkeleton } from './_PersonalInfoTabSkeleton';\n\nexport const PersonalInfoTab: React.FC = () => {\n const dispatch = useDispatch();\n const isReady = useRegistry(PERSONAL_INFO_IS_READY, false);\n const isLoading = useRegistry(PERSONAL_INFO_IS_LOADING, false);\n\n useEffect(() => {\n dispatch(accountSettingsActions.initPersonalInfo());\n }, []);\n\n const onChangePersonalInfo = useCallback(() => {\n dispatch(accountSettingsActions.savePersonalInfo());\n }, []);\n\n if (!isReady) return ;\n\n return (\n
\n \n
\n \n Email address\n \n }\n component={InputFormField}\n placeholder=\"Enter email address\"\n />\n
\n
\n \n First Name\n \n \n
\n
\n \n Last Name\n \n \n
\n
\n \n Phone\n \n \n
\n
\n \n Date of Birth\n \n \n
\n
\n \n Country\n \n \n
\n
\n \n WhatsApp\n \n \n
\n
\n \n Viber\n \n \n
\n
\n \n Telegram\n \n \n
\n
\n \n Skype\n \n \n
\n \n \n Save\n \n \n
\n
\n );\n};\n","import styled from 'styled-components';\nimport { Add, More } from 'iconsax-react';\n\nimport { classNameWithPrefix } from '@crm-framework/utils';\n\nimport { generateFontStyle } from '@ams-package/theme';\nimport Panel from '@ams-package/panel';\n\nimport { blockName } from '../../styled';\n\nexport const Wrapper = styled.div.attrs({\n className: classNameWithPrefix(blockName, 'payment-settings-wrapper'),\n})`\n display: flex;\n flex-direction: column;\n gap: 24px;\n`;\n\nexport const WrapperWithBorder = styled.div.attrs({\n className: classNameWithPrefix(blockName, 'wrapper-with-border'),\n})`\n display: flex;\n flex-direction: column;\n border-bottom: 1px solid var(--secondary-border-color);\n padding-bottom: 24px;\n gap: 16px;\n max-width: 740px;\n`;\n\nexport const EmptyMessage = styled.h3.attrs({\n className: classNameWithPrefix(blockName, 'empty-message'),\n})`\n color: var(--hover-secondary-color);\n padding: 12px 0 16px 0;\n display: flex;\n justify-content: center;\n align-items: center;\n`;\n\nexport const PlusIcon = styled(Add).attrs({\n className: classNameWithPrefix(blockName, 'plus-icon'),\n})`\n width: var(--add-payment-method-button-size);\n height: var(--add-payment-method-button-size);\n`;\n\nexport const PaymentMethodWrapper = styled(Panel)`\n display: grid;\n grid-template-columns: 1fr 1fr;\n row-gap: 20px;\n padding: 12px;\n`;\n\nexport const PopoverWrapper = styled.div.attrs({\n className: classNameWithPrefix(blockName, 'popover-wrapper'),\n})`\n margin-left: auto;\n`;\n\nexport const MenuItem = styled.div.attrs({\n className: classNameWithPrefix(blockName, 'menu-item'),\n})`\n ${generateFontStyle('body-2r')}\n margin: 0 16px;\n padding: 12px 0;\n color: var(--base-white);\n\n &:not(:last-child) {\n border-bottom: 1px solid var(--secondary-light-grey);\n }\n`;\n\nexport const Status = styled.div.attrs({\n className: classNameWithPrefix(blockName, 'status'),\n})<{ isConfirmed: boolean }>`\n white-space: pre;\n ${generateFontStyle('body-2r')}\n color: ${({ isConfirmed }) =>\n isConfirmed ? 'var(--primary-color)' : 'var(--danger-text-color)'};\n`;\n\nexport const MoreIcon = styled(More).attrs({\n className: classNameWithPrefix(blockName, 'more-icon'),\n})`\n cursor: pointer;\n fill: var(--hover-light-color);\n stroke: var(--hover-light-color);\n`;\n\nexport const Identification = styled.div.attrs({\n className: classNameWithPrefix(blockName, 'identification'),\n})`\n ${generateFontStyle('body-2r')}\n color: var(--secondary-light-grey);\n display: flex;\n align-items: flex-end;\n height: 100%;\n`;\n\nexport const PaymentIconWrapper = styled.div.attrs({\n className: classNameWithPrefix(blockName, 'payment-icon-wrapper'),\n})`\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 5px 15px;\n background: var(--hover-light-color);\n max-width: 80px;\n max-height: 30px;\n min-height: 30px;\n border-radius: 52px;\n`;\n\nexport const PaymentIcon = styled.div.attrs({\n className: classNameWithPrefix(blockName, 'payment-icon'),\n})<{ src: string }>`\n width: 60px;\n height: 20px;\n background: url(${({ src }) => src}) no-repeat center;\n background-size: contain;\n`;\n\nexport const SupportedPaymentsWrapper = styled.div.attrs({\n className: classNameWithPrefix(blockName, 'supported-payments-wrapper'),\n})`\n display: flex;\n width: fit-content;\n gap: 8px;\n border-radius: 12px;\n padding: 16px;\n background: var(--dark-grey);\n`;\n\nexport const SupportedPaymentIconWrapper = styled.div.attrs({\n className: classNameWithPrefix(blockName, 'supported-payment-icon-wrapper'),\n})`\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 5px 12px;\n background: var(--hover-light-color);\n max-width: 60px;\n max-height: 32px;\n min-height: 32px;\n border-radius: 8px;\n`;\n\nexport const PaymentMethodsInformationWrapper = styled.div.attrs({\n className: classNameWithPrefix(\n blockName,\n 'payment-methods-information-wrapper'\n ),\n})`\n display: flex;\n flex-direction: column;\n`;\n\nexport const PaymentsInfoTitle = styled.div.attrs({\n className: classNameWithPrefix(blockName, 'payments-info-title'),\n})`\n ${generateFontStyle('body-1r')}\n display: flex;\n align-items: center;\n cursor: pointer;\n gap: 8px;\n`;\n\nexport const PaymentMethodsInformation = styled.div.attrs({\n className: classNameWithPrefix(blockName, 'payment-methods-information'),\n})`\n margin-top: 10px;\n ${generateFontStyle('body-2r')}\n`;\n","import React, { useCallback, useMemo, useState } from 'react';\nimport { useDispatch } from 'react-redux';\n\nimport { Popover } from '@xcritical/popover';\n\nimport { paymentEditorActions } from '@ams-package/payment-method-editor';\nimport { IPaymentMethodsModel } from '@ams-package/dictionaries';\nimport { defaultImages } from '@ams-package/icons';\n\nimport {\n Identification,\n MenuItem,\n MoreIcon,\n PaymentIcon,\n PaymentIconWrapper,\n PaymentMethodWrapper,\n PopoverWrapper,\n Status,\n} from './styled';\n\nexport type PaymentMethodProps = IPaymentMethodsModel & {\n isConfirmed?: boolean;\n};\n\nexport const PaymentMethod: React.FC = ({\n id,\n number,\n code,\n // isConfirmed = false,\n}) => {\n const dispatch = useDispatch();\n const [isOpen, setIsOpen] = useState(false);\n\n const togglePopover = useCallback(() => {\n setIsOpen(!isOpen);\n }, [isOpen]);\n\n const menuItems = useMemo(\n () => [\n {\n label: 'Edit',\n onClick: () => {\n dispatch(\n paymentEditorActions.addOrEdit({\n selectedId: id,\n })\n );\n },\n },\n {\n label: 'Delete',\n onClick: () => {\n dispatch(paymentEditorActions.delete(id));\n },\n },\n ],\n [id]\n );\n\n const isConfirmed = !!(id % 2);\n\n return (\n \n \n {/* TODO add status in future releases */}\n \n \n setIsOpen(false)}\n appearance=\"menu\"\n withArrow={false}\n trigger=\"click\"\n shouldFitContainer\n content={\n <>\n {menuItems.map(({ label, onClick }) => (\n \n {label}\n \n ))}\n \n }>\n \n \n \n\n {number}\n \n \n \n \n );\n};\n","import React, { useCallback, useEffect, useMemo, useState } from 'react';\nimport { useDispatch } from 'react-redux';\nimport { Add, Minus } from 'iconsax-react';\n\nimport { useDictionary } from '@crm-framework/dictionaries';\n\nimport { IPayoutPaymentMethodConfigurationModel } from '@ams-package/dictionaries';\n\nimport { accountSettingsActions } from '../../store';\n\nimport {\n PaymentMethodsInformation,\n PaymentMethodsInformationWrapper,\n PaymentsInfoTitle,\n} from './styled';\n\nexport const PaymentsInfo: React.FC<{ shouldInit?: boolean }> = ({\n shouldInit = false,\n}) => {\n const dispatch = useDispatch();\n const [isExpanded, setIsExpanded] = useState(false);\n const availablePaymentMethods = useDictionary(\n 'payoutPaymentMethods'\n ) as IPayoutPaymentMethodConfigurationModel[];\n const texts = useDictionary('texts') as Record;\n const paymentMethodsTextLimits = texts['payouts.paymentMethods.limits.text'];\n\n useEffect(() => {\n if (shouldInit) dispatch(accountSettingsActions.initPaymentSettings());\n }, []);\n\n const toggleExpand = useCallback(() => {\n setIsExpanded(!isExpanded);\n }, [isExpanded]);\n\n const paymentMethodsDescription = useMemo(\n () =>\n availablePaymentMethods?.reduce(\n (result, method) =>\n result\n ?.replace(\n ` {${method.name}_Amount}`,\n `${method.payoutByRequestMinAmount || 0}`\n )\n ?.replace(\n ` {${method.id}_Amount}`,\n `${method.payoutByRequestMinAmount || 0}`\n ),\n paymentMethodsTextLimits\n ),\n [availablePaymentMethods, paymentMethodsTextLimits]\n );\n\n return (\n \n \n Information about payment methods\n {isExpanded ? : }\n \n {isExpanded && (\n \n )}\n \n );\n};\n","import React from 'react';\nimport { Grid } from 'styled-css-grid';\n\nimport { Button } from '@ams-package/button';\nimport { Skeleton } from '@ams-package/skeleton';\n\nimport { PlusIcon, Wrapper, WrapperWithBorder } from './styled';\n\nexport const PaymentSettingsTabSkeleton: React.FC = () => (\n \n \n

My payment methods

\n \n \n \n
\n \n

Add payment methods

\n \n \n \n
\n \n \n
\n);\n","import React, { useCallback, useEffect } from 'react';\nimport { Grid } from 'styled-css-grid';\nimport { useDispatch } from 'react-redux';\n\nimport { useDictionary } from '@crm-framework/dictionaries';\nimport { useRegistry } from '@crm-framework/registry';\n\nimport { Button } from '@ams-package/button';\nimport { paymentEditorActions } from '@ams-package/payment-method-editor';\nimport {\n IPayoutPaymentMethodConfigurationModel,\n IPaymentMethodsModel,\n} from '@ams-package/dictionaries';\nimport { defaultImages } from '@ams-package/icons';\n\nimport { accountSettingsActions } from '../../store';\nimport { PAYMENT_SETTINGS_IS_LOADING } from '../../consts';\n\nimport {\n EmptyMessage,\n PaymentIcon,\n PlusIcon,\n SupportedPaymentIconWrapper,\n SupportedPaymentsWrapper,\n Wrapper,\n WrapperWithBorder,\n} from './styled';\nimport { PaymentMethod } from './PaymentMethod';\nimport { PaymentsInfo } from './PaymentsInfo';\nimport { PaymentSettingsTabSkeleton } from './_PaymentSettingsTabSkeleton';\n\nexport const PaymentSettingsTab: React.FC = () => {\n const dispatch = useDispatch();\n const paymentMethods = useDictionary(\n 'paymentMethods'\n ) as IPaymentMethodsModel[];\n const availablePaymentMethods = useDictionary(\n 'payoutPaymentMethods'\n ) as IPayoutPaymentMethodConfigurationModel[];\n const isLoading = useRegistry(PAYMENT_SETTINGS_IS_LOADING, true);\n\n useEffect(() => {\n dispatch(accountSettingsActions.initPaymentSettings());\n }, []);\n\n const onClick = useCallback(() => {\n dispatch(paymentEditorActions.addOrEdit());\n }, []);\n\n if (isLoading) return ;\n\n return (\n \n \n

My payment methods

\n {paymentMethods.length ? (\n \n {paymentMethods.map((item) => (\n \n ))}\n \n ) : (\n \n You don't have any payment methods added yet\n \n )}\n
\n \n

Add payment methods

\n \n }\n onClick={onClick}\n appearance=\"addPaymentMethod\">\n Add payment method\n \n \n
\n \n {availablePaymentMethods.map((item) => (\n \n \n \n ))}\n \n \n
\n );\n};\n","import React, { useMemo } from 'react';\nimport { CardEdit, Lock1, User } from 'iconsax-react';\n\nimport { TabsWithNavigation } from '@ams-package/tabs';\nimport { StatusModal } from '@ams-package/modal';\nimport { PathNames } from '@ams-package/router';\n\nimport { createTabsConfig } from '../../utils';\n\nimport {\n PersonalInfoTab,\n SecurityTab,\n PaymentSettingsTab,\n} from './account-settings-tabs';\nimport { AccountSettingsCssStyles, AccountSettingsWrapper } from './styled';\nimport { ACCOUNT_SETTINGS_STATUS_MODAL_NAME } from './consts';\n\nconst TAB_PATHS = {\n personalInfo: `${PathNames.accountSettings}?tabName=personalInfo`,\n security: `${PathNames.accountSettings}?tabName=security`,\n paymentSettings: `${PathNames.accountSettings}?tabName=paymentSettings`,\n};\n\nexport const AccountSettings: React.FC = () => {\n const tabData = useMemo(\n () => [\n {\n TabIcon: () => ,\n title: `Personal Info`,\n Content: PersonalInfoTab,\n key: 'personalInfo',\n url: TAB_PATHS.personalInfo,\n },\n {\n TabIcon: () => ,\n title: `Security`,\n Content: SecurityTab,\n key: 'security',\n url: TAB_PATHS.security,\n },\n {\n TabIcon: () => ,\n title: `Payment Settings`,\n Content: PaymentSettingsTab,\n key: 'paymentSettings',\n url: TAB_PATHS.paymentSettings,\n },\n ],\n []\n );\n\n const tabPanels = useMemo(() => createTabsConfig(tabData), [tabData]);\n\n return (\n \n \n

Account Settings

\n {tabPanels && }\n \n
\n );\n};\n","export interface IStatistic {\n hits: number;\n uniques: number;\n regs: number;\n ftd: number;\n deposits: number;\n profit: number;\n date: string;\n group: string;\n}\n\nexport enum StatusTypes {\n Pending = 'Pending',\n InProgress = 'InProgress',\n Approved = 'Approved',\n Confirmed = 'Confirmed',\n Rejected = 'Rejected',\n WaitingForPayment = 'WaitingForPayment',\n Paid = 'Paid',\n}\n","import { styled } from 'styled-components';\nimport { NavLink } from 'react-router-dom';\n\nimport { classNameWithPrefix } from '@crm-framework/utils';\n\nimport { StatusTypes } from './types';\n\nconst blockName = 'payouts';\n\nexport const PayoutsRequestWrapper = styled.div.attrs({\n className: classNameWithPrefix(blockName, 'request-wrapper'),\n})`\n display: grid;\n grid-auto-flow: row dense;\n grid-template-columns: 7fr 5fr;\n grid-template-rows: 100%;\n gap: 16px;\n`;\n\nexport const CalendarIconWrapper = styled.div.attrs({\n className: classNameWithPrefix(blockName, 'calendar-icon-wrapper'),\n})`\n margin-right: 6px;\n width: auto !important;\n`;\n\nexport const StatusSnippet = styled.div.attrs({\n className: classNameWithPrefix(blockName, 'status-snippet'),\n})<{ status: StatusTypes }>`\n &::marker {\n padding-right: 4px;\n }\n display: list-item;\n list-style-type: disc;\n list-style-position: inside;\n color: ${({ status }) => {\n switch (status) {\n case StatusTypes.Pending:\n return '#59A8D4';\n case StatusTypes.Confirmed:\n case StatusTypes.InProgress:\n return '#FFC555';\n case StatusTypes.WaitingForPayment:\n case StatusTypes.Approved:\n case StatusTypes.Paid:\n return '#4AA785';\n case StatusTypes.Rejected:\n return 'var(--danger-text-color)';\n default:\n return 'var(--white)';\n }\n }};\n`;\n\nexport const AdditionalInfoWrapper = styled.div.attrs({\n className: classNameWithPrefix(blockName, 'additional-info-wrapper'),\n})`\n margin-top: 20px;\n`;\n\nexport const PaymentMethodLinkWrapper = styled(NavLink).attrs({\n className: classNameWithPrefix(blockName, 'payment-method-link-wrapper'),\n})`\n color: var(--default-text-color);\n display: flex;\n gap: 16px;\n border-bottom: 1px solid var(--light-grey);\n padding-bottom: 20px;\n\n svg {\n transform: rotate(-45deg);\n }\n`;\n","import React from 'react';\nimport { ArrowRight } from 'iconsax-react';\n\nimport { PaymentsInfo } from '../account-settings';\nimport { PaymentRequest, RegularPayout } from '../../components';\n\nimport {\n PayoutsRequestWrapper,\n AdditionalInfoWrapper,\n PaymentMethodLinkWrapper,\n} from './styled';\n\nexport const PayoutsRequest = () => (\n <>\n \n \n \n \n \n \n

Manage payment methods

\n \n
\n \n \n \n
\n \n);\n","import React from 'react';\n\nimport { DashboardSettingsType } from '@ams-package/dashboard';\nimport { FilterTypes } from '@ams-package/filters';\nimport { BaseCell } from '@ams-package/grid';\nimport { svgComponents } from '@ams-package/icons';\n\nimport { CalendarIconWrapper, StatusSnippet } from './styled';\n\nexport const settings: DashboardSettingsType[] = [\n {\n name: 'id',\n displayName: 'Id',\n width: 80,\n inGrid: true,\n inFilter: false,\n },\n {\n name: 'date',\n displayName: 'Date',\n filterType: FilterTypes.Date,\n inGrid: true,\n width: 150,\n inFilter: true,\n inSort: true,\n render: (value: string) => (\n \n \n \n \n {new Date(value).toLocaleDateString()}\n \n ),\n },\n {\n name: 'type',\n displayName: 'Type',\n filterType: FilterTypes.SingleSelect,\n dictionaryName: 'payoutType',\n width: 150,\n inGrid: true,\n inFilter: true,\n render(_, __, row) {\n return {row.typeName};\n },\n },\n {\n name: 'method',\n width: 150,\n displayName: 'Method',\n filterType: FilterTypes.MultiSelect,\n inGrid: true,\n inFilter: false,\n },\n {\n name: 'status',\n displayName: 'Status',\n width: 150,\n filterType: FilterTypes.MultiSelect,\n dictionaryName: 'payoutStatus',\n inGrid: true,\n inFilter: true,\n render(_, __, row) {\n return (\n \n {row.statusName === 'Rejected' ? 'Cancelled' : row.statusName}\n \n );\n },\n },\n {\n name: 'amount',\n displayName: 'Amount',\n inGrid: true,\n inFilter: false,\n },\n];\n","import { addDays } from 'date-fns';\n\nimport { authorizedWretch, formatDateForServer } from '@ams-package/utils';\nimport {\n FilterRequestModelType,\n FilterValuesType,\n parseUniversalFilters,\n} from '@ams-package/filters';\nimport {\n APIGetItemsCallbackResponseType,\n IDashboardGridControllers,\n IDashboardRequestModel,\n} from '@ams-package/dashboard';\n\nexport const apiGetPayoutsHistory = async (\n filters: FilterValuesType,\n { sorting, pageSize, page }: IDashboardGridControllers\n): Promise => {\n const $filters = Object.entries(filters || {}).reduce(\n (acc, [name, value]) => {\n if (name === 'date' && value) {\n acc[name] = [\n formatDateForServer(value[0]),\n formatDateForServer(addDays(value[1], 1)),\n ];\n } else {\n acc[name] = value;\n }\n\n return acc;\n },\n {}\n );\n const filtersRequestModel: FilterRequestModelType[] = parseUniversalFilters(\n ['date', 'type', 'status'],\n $filters,\n { date: 'Between' }\n );\n const requestModel: IDashboardRequestModel = {\n filters: filtersRequestModel,\n sorting: sorting ? [sorting] : undefined,\n limit: pageSize,\n offset: (page - 1) * pageSize,\n };\n\n return authorizedWretch('/api/payouts-history').post(requestModel).json();\n};\n","import React, { useEffect } from 'react';\nimport { useDispatch } from 'react-redux';\n\nimport { filtersActions } from '@ams-package/filters';\nimport { Dashboard } from '@ams-package/dashboard';\n\nimport { settings } from './columns';\nimport { apiGetPayoutsHistory } from './api';\n\nexport const History = () => {\n const dispatch = useDispatch();\n\n useEffect(() => {\n dispatch(filtersActions.clearFilters());\n }, []);\n\n return (\n \n );\n};\n","import React from 'react';\n\nimport { TabsWithNavigation } from '@ams-package/tabs';\nimport { PaymentIcon, HistoryIcon } from '@ams-package/icons';\nimport { PathNames } from '@ams-package/router';\n\nimport { createTabsConfig } from '../../utils';\n\nimport { PayoutsRequest } from './PayoutsRequest';\nimport { History } from './History';\n\nconst TAB_PATHS = {\n payments: `${PathNames.payouts}?tabName=payments`,\n history: `${PathNames.payouts}?tabName=history`,\n};\n\nexport const Payouts: React.FC = () => {\n const tabData = [\n {\n TabIcon: PaymentIcon,\n title: `Payments`,\n Content: PayoutsRequest,\n key: 'payments',\n url: TAB_PATHS.payments,\n },\n {\n TabIcon: HistoryIcon,\n title: `History`,\n Content: History,\n key: 'history',\n url: TAB_PATHS.history,\n },\n ];\n\n const tabPanels = createTabsConfig(tabData);\n\n return (\n <>\n

Payouts

\n {tabPanels && }\n \n );\n};\n","import React from 'react';\n\nimport { PathNames, IRouterConfig } from '@ams-package/router';\n\nimport {\n Offers,\n TestModals,\n SignIn,\n Registration,\n TestButtons,\n TestDropdowns,\n TestFilters,\n Statistics,\n ForgotPassword,\n RestorePassword,\n OfferPage,\n Payouts,\n AccountSettings,\n Dashboard,\n} from './pages';\n\nexport const routerConfig: IRouterConfig[] = [\n {\n name: 'Dashboard',\n icon: 'Dashboard',\n path: PathNames.dashboard,\n component: Dashboard,\n disabled: false,\n protected: true,\n isMenu: true,\n },\n {\n name: 'Offers',\n icon: 'Offers',\n path: PathNames.offers,\n component: Offers,\n disabled: false,\n protected: true,\n isMenu: true,\n },\n {\n name: 'Offer',\n icon: 'Offer',\n path: PathNames.offer,\n component: OfferPage,\n disabled: false,\n protected: true,\n isMenu: false,\n },\n {\n name: 'Statistics',\n icon: 'Statistics',\n path: PathNames.statistics,\n component: Statistics,\n disabled: false,\n protected: true,\n isMenu: true,\n },\n {\n name: 'Promo',\n icon: 'Promo',\n path: '/promo',\n component: () => <>,\n disabled: true,\n protected: true,\n isMenu: true,\n },\n {\n name: 'Payouts',\n icon: 'Payouts',\n path: PathNames.payouts,\n component: Payouts,\n disabled: false,\n protected: true,\n isMenu: true,\n },\n {\n name: 'Account Settings',\n icon: 'AccountSettings',\n path: PathNames.accountSettings,\n component: AccountSettings,\n disabled: false,\n protected: true,\n isMenu: true,\n },\n {\n name: 'Login',\n path: PathNames.login,\n component: SignIn,\n protected: false,\n },\n {\n name: 'Registration',\n path: PathNames.registration,\n component: Registration,\n protected: false,\n },\n {\n name: 'Forgot Password',\n path: PathNames.resetPassword,\n component: ForgotPassword,\n protected: false,\n },\n {\n name: 'Restore Password',\n path: PathNames.restorePassword,\n component: RestorePassword,\n protected: false,\n },\n {\n // TODO: remove after adding storybook\n name: 'Test Modals',\n icon: 'testModals',\n path: PathNames.testModals,\n component: TestModals,\n protected: false,\n isMenu: false,\n },\n {\n // TODO: remove after adding storybook\n name: 'Test Buttons',\n path: PathNames.testButtons,\n component: TestButtons,\n protected: true,\n isMenu: false,\n },\n {\n // TODO: remove after adding storybook\n name: 'Test Modals',\n path: PathNames.testModals,\n component: TestModals,\n protected: true,\n isMenu: false,\n },\n {\n // TODO: remove after adding storybook\n name: 'Test Dropdowns',\n path: PathNames.testDropdowns,\n component: TestDropdowns,\n protected: true,\n isMenu: false,\n },\n {\n // TODO: remove after adding storybook\n name: 'Test Filters',\n path: PathNames.testFilters,\n component: TestFilters,\n protected: true,\n isMenu: false,\n },\n];\n","import React, { useEffect } from 'react';\nimport { Grid } from 'styled-css-grid';\nimport { useDispatch, useSelector } from 'react-redux';\n\nimport PaymentRequest from '../../components/payment-request';\n\nimport { DashboardWrapper, GetStartedTitle } from './styled';\nimport { Statistics, Steps, TopOffers } from './components';\nimport {\n dashboardConfigSelector,\n isDashboardReadySelector,\n mainDashboardActions,\n} from './store';\nimport { steps } from './consts';\nimport { DashboardSkeleton } from './_DashboardSkeleton';\n\nexport const Dashboard = () => {\n const dispatch = useDispatch();\n const config = useSelector(dashboardConfigSelector);\n const isReady = useSelector(isDashboardReadySelector);\n\n useEffect(() => {\n dispatch(mainDashboardActions.init());\n }, []);\n\n if (!isReady) {\n return ;\n }\n\n return (\n \n

Dashboard

\n {!config?.signups ? (\n <>\n Get started in 4 easy steps:\n \n \n ) : (\n <>\n \n \n \n \n \n \n )}\n
\n );\n};\n","import React, { useEffect } from 'react';\nimport { useDispatch } from 'react-redux';\n\nimport { OffersTabs } from './offers-tabs';\nimport { offersActions } from './store';\nimport { OffersWrapper, OfferCssStyles } from './styled';\n\nexport const Offers: React.FC = () => {\n const dispatch = useDispatch();\n\n useEffect(() => {\n dispatch(offersActions.initOffers());\n }, []);\n\n return (\n \n \n

Offers

\n \n
\n );\n};\n","import React from 'react';\n\nimport { Dashboard } from '@ams-package/dashboard';\nimport { useQueryParam } from '@ams-package/utils';\n\nimport { PageWrapper } from './styled';\nimport { settings } from './columns';\nimport { getStatistic } from './api';\n\nexport const Statistics: React.FC = () => {\n const offerName = useQueryParam('campaign');\n\n return (\n \n

\n Statistics\n {offerName && ` by offer ${offerName}`}\n

\n \n
\n );\n};\n","import React, { useCallback } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\n\nimport { SideModal } from '@ams-package/side-modal';\nimport { getAppConfig } from '@ams-package/app';\nimport { Button } from '@ams-package/button';\nimport { useKeyPress } from '@ams-package/utils';\n\nimport {\n SignInForm,\n DescriptionWrapper,\n BottomDescriptionWrapper,\n BottomContentWrapper,\n SideModalTitleWrapper,\n} from './components';\nimport { loginActions } from './store';\nimport { LoginPageWrapper, LoginHeader } from './styled';\nimport { HEADER } from './consts';\n\nexport const SignIn: React.FC = () => {\n const dispatch = useDispatch();\n const config = useSelector(getAppConfig);\n\n const handlerSignIn = useCallback(() => {\n dispatch(loginActions.signIn());\n }, []);\n // TODO handle case when we have few forms on the page\n useKeyPress('Enter', handlerSignIn);\n\n return (\n <>\n {HEADER}\n \n Sign in}\n appearance=\"login\"\n withCloseButton={false}>\n <>\n \n Enter your email address and password to login\n \n \n \n \n \n Don't have an account yet?{' '}\n \n Sign up\n \n \n \n \n \n \n \n );\n};\n","import React from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\n\nimport { SideModal } from '@ams-package/side-modal';\nimport { Button } from '@ams-package/button';\nimport { useKeyPress } from '@ams-package/utils';\n\nimport { RegistrationTitle, SideModalContent } from './components';\nimport {\n loginActions,\n signUpInProgress,\n signInFormSelector,\n getIsLoading,\n} from './store';\nimport { LoginPageWrapper, LoginHeader } from './styled';\nimport { HEADER } from './consts';\n\nexport const Registration: React.FC = () => {\n const dispatch = useDispatch();\n const isInProgress = useSelector(signUpInProgress);\n const { model } = useSelector(signInFormSelector);\n const isLoading = useSelector(getIsLoading);\n\n const handlerValidateRegistrationData = () => {\n dispatch(loginActions.validateRegisterForm());\n };\n\n const handlerSignUp = () => {\n dispatch(loginActions.signUp());\n };\n // TODO handle case when we have few forms on the page\n useKeyPress(\n 'Enter',\n isInProgress ? handlerSignUp : handlerValidateRegistrationData\n );\n\n return (\n <>\n {HEADER}\n \n }\n withCloseButton={false}>\n \n Get Started\n \n ) : (\n \n Continue\n \n )\n }\n />\n \n \n \n );\n};\n","import React from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { useNavigate } from 'react-router';\n\nimport { SideModal } from '@ams-package/side-modal';\nimport { Button } from '@ams-package/button';\nimport { StatusMessage, StatusModalTypes } from '@ams-package/status-message';\nimport { IconWrapper, useKeyPress } from '@ams-package/utils';\nimport { ChevronIcon } from '@ams-package/icons';\n\nimport {\n DescriptionWrapper,\n BottomContentWrapper,\n ResetPasswordForm,\n SideModalTitleWrapper,\n} from './components';\nimport { getIsPasswordReset, loginActions } from './store';\nimport {\n LoginPageWrapper,\n LoginHeader,\n BackButtonWrapper,\n StatusMessageWrapper,\n} from './styled';\nimport { HEADER } from './consts';\n\nexport const ForgotPassword: React.FC = () => {\n const dispatch = useDispatch();\n const navigate = useNavigate();\n const isReset = useSelector(getIsPasswordReset);\n\n const handlerResetPassword = () => {\n dispatch(loginActions.resetPassword());\n };\n\n const handlerGoToLogin = () => {\n dispatch(loginActions.setIsPasswordReset(false));\n navigate('/login');\n };\n\n // TODO handle case when we have few forms on the page\n useKeyPress('Enter', isReset ? handlerGoToLogin : handlerResetPassword);\n\n return (\n <>\n {HEADER}\n \n \n \n \n \n \n \n \n Forgot your password?\n \n \n )\n }\n appearance=\"login\"\n withCloseButton={false}>\n {isReset ? (\n <>\n \n \n \n \n \n \n \n ) : (\n <>\n
\n \n Enter your registered email below to receive password reset\n instruction\n \n \n
\n \n \n \n \n )}\n \n
\n \n );\n};\n","import React from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { useNavigate } from 'react-router';\n\nimport { SideModal } from '@ams-package/side-modal';\nimport { Button } from '@ams-package/button';\nimport { StatusMessage, StatusModalTypes } from '@ams-package/status-message';\nimport { useKeyPress } from '@ams-package/utils';\n\nimport {\n DescriptionWrapper,\n BottomContentWrapper,\n RestorePasswordForm,\n SideModalTitleWrapper,\n} from './components';\nimport { getIsPasswordRestored, loginActions } from './store';\nimport { LoginPageWrapper, LoginHeader, StatusMessageWrapper } from './styled';\nimport { HEADER } from './consts';\n\nexport const RestorePassword: React.FC = () => {\n const dispatch = useDispatch();\n const navigate = useNavigate();\n const isRestored = useSelector(getIsPasswordRestored);\n\n const handlerRestorePassword = () => {\n dispatch(loginActions.restorePassword());\n };\n\n const handlerGoToLogin = () => {\n dispatch(loginActions.setIsPasswordRestored(false));\n navigate('/login');\n };\n // TODO handle case when we have few forms on the page\n useKeyPress('Enter', isRestored ? handlerGoToLogin : handlerRestorePassword);\n\n return (\n <>\n {HEADER}\n \n \n Change current password\n \n )\n }\n appearance=\"login\"\n withCloseButton={false}>\n {isRestored ? (\n <>\n \n \n \n \n \n \n \n ) : (\n <>\n Create a new password\n \n \n \n \n \n )}\n \n \n \n );\n};\n","import React from 'react';\nimport PlusIcon from 'mdi-react/PlusIcon';\n\nimport { FormField } from '@xcritical/forms';\n\nimport {\n PasswordFormField,\n PasswordValidationFormField,\n} from '@ams-package/input';\nimport { BaseButton, Button } from '@ams-package/button';\n\nexport const TestButtons: React.FC = (): any => (\n \n
\n \n \n Withdraw money\n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n);\n","import React from 'react';\n\nimport { Select } from '@ams-package/select';\nimport { SelectPaymentMethod } from '@ams-package/payment-method-editor';\nimport { Icon } from '@ams-package/icons';\n\nexport const TestDropdowns: React.FC = (): any => {\n const [value, setValue] = React.useState(null);\n const [value1, setValue1] = React.useState(null);\n const [value2, setValue2] = React.useState(null);\n const [value3, setValue3] = React.useState(null);\n\n return (\n \n \n \n postfix\n ),\n },\n { label: 'test1', value: 'test1' },\n { label: 'test2', value: 'test2' },\n { label: 'test3', value: 'test3' },\n ]}\n />\n ,\n label: 'Visa',\n value: '12342134',\n postfix: '4149',\n },\n {\n prefix: ,\n label: 'Web Money',\n value: '423142314',\n postfix: '4148',\n },\n {\n prefix: ,\n label: 'Visa',\n value: '321423423',\n postfix: '4147',\n },\n {\n prefix: ,\n label: 'Qiwi',\n value: '4234234',\n postfix: '4146',\n },\n {\n prefix: ,\n label: 'Visa',\n value: '12342134',\n postfix: '4149',\n },\n {\n prefix: ,\n label: 'Web Money',\n value: '423142314',\n postfix: '4148',\n },\n {\n prefix: ,\n label: 'Visa',\n value: '321423423',\n postfix: '4147',\n },\n {\n prefix: ,\n label: 'Qiwi',\n value: '4234234',\n postfix: '4146',\n },\n ]}\n />\n
\n ,\n label: 'Visa',\n value: '12342134',\n postfix: '4149',\n },\n {\n prefix: ,\n label: 'Web Money',\n value: '423142314',\n postfix: '4148',\n },\n {\n prefix: ,\n label: 'Visa',\n value: '321423423',\n postfix: '4147',\n },\n {\n prefix: ,\n label: 'Qiwi',\n value: '4234234',\n postfix: '4146',\n },\n {\n prefix: ,\n label: 'Visa',\n value: '12342134',\n postfix: '4149',\n },\n {\n prefix: ,\n label: 'Web Money',\n value: '423142314',\n postfix: '4148',\n },\n {\n prefix: ,\n label: 'Visa',\n value: '321423423',\n postfix: '4147',\n },\n {\n prefix: ,\n label: 'Qiwi',\n value: '4234234',\n postfix: '4146',\n },\n ]}\n />\n
\n \n );\n};\n","import React from 'react';\n\nimport { Filters, FilterTypes } from '@ams-package/filters';\n\nexport const TestFilters: React.FC = (): any => (\n
\n \n
\n);\n","import styled, { css } from 'styled-components';\nimport { NavLink } from 'react-router-dom';\n\nimport { classNameWithPrefix } from '@crm-framework/utils';\n\nimport { h3Style } from '@ams-package/theme';\n\nconst blockName = 'navigation';\n\nconst NavLinkStyles = css`\n display: flex;\n align-items: center;\n gap: 12px;\n ${h3Style}\n color: var(--main-menu-color);\n`;\n\nexport const StyledNavUl = styled.ul.attrs({\n className: classNameWithPrefix(blockName, 'nav-ul'),\n})`\n display: flex;\n flex-direction: column;\n gap: 16px;\n`;\n\nexport const StyledNavLink = styled(NavLink).attrs({\n className: classNameWithPrefix(blockName, 'nav-link'),\n})`\n ${NavLinkStyles}\n\n svg {\n width: var(--navigation-icon-size);\n height: var(--navigation-icon-size);\n stroke: var(--main-menu-icon-color);\n fill: var(--main-menu-icon-color);\n }\n\n &:hover {\n color: var(--main-menu-hover-color);\n svg {\n stroke: var(--main-menu-hover-icon-color);\n fill: var(--main-menu-hover-icon-color);\n }\n }\n &.active {\n color: var(--main-menu-hover-icon-color);\n svg {\n stroke: var(--main-menu-hover-icon-color);\n fill: var(--main-menu-hover-icon-color);\n }\n }\n`;\n\nexport const DisabledNavLink = styled.div.attrs({\n className: classNameWithPrefix(blockName, 'disabled-nav-link'),\n})`\n ${NavLinkStyles}\n pointer-events: none;\n opacity: 0.5;\n svg {\n stroke: var(--main-menu-icon-color);\n fill: var(--main-menu-icon-color);\n }\n`;\n\nexport const NavIconWrapper = styled.div.attrs({\n className: classNameWithPrefix(blockName, 'nav-icon-wrapper'),\n})`\n display: flex;\n justify-content: center;\n align-items: center;\n width: var(--nav-icon-wrapper-size);\n height: var(--nav-icon-wrapper-size);\n border-radius: 100px;\n padding: var(--nav-icon-wrapper-padding);\n background: var(--modal-background-color);\n`;\n","import React from 'react';\n\nimport Badge from '@xcritical/badge';\n\nimport { svgComponents } from '@ams-package/icons';\n\nimport { routerConfig } from '../../config';\n\nimport {\n StyledNavUl,\n StyledNavLink,\n DisabledNavLink,\n NavIconWrapper,\n} from './styles';\n\nexport const Navigation = (): any => (\n \n);\n","import styled from 'styled-components';\n\nimport { classNameWithPrefix } from '@crm-framework/utils';\n\nimport { generateFontStyle } from '@ams-package/theme';\n\nconst blockName = 'sidebar-account-info';\n\nexport const AccountInfo = styled.div.attrs({\n className: classNameWithPrefix(blockName, 'info'),\n})`\n display: flex;\n flex-direction: column;\n gap: var(--sidebar-account-info-gap);\n padding: var(--sidebar-account-info-padding);\n`;\n\nexport const AccountInfoWrapper = styled.div.attrs({\n className: classNameWithPrefix(blockName, 'wrapper'),\n})`\n display: flex;\n align-items: center;\n gap: 12px;\n`;\n\nexport const AccountInfoAvatar = styled.img.attrs({\n className: classNameWithPrefix(blockName, 'avatar'),\n})`\n width: var(--sidebar-avatar-size);\n height: var(--sidebar-avatar-size);\n border-radius: 100px;\n object-fit: cover;\n background: var(--modal-background-color);\n`;\n\nexport const AccountInfoDescription = styled.div.attrs({\n className: classNameWithPrefix(blockName, 'description'),\n})`\n display: flex;\n flex-direction: column;\n gap: 8px;\n`;\n\nexport const AccountInfoEmail = styled.div.attrs({\n className: classNameWithPrefix(blockName, 'email'),\n})`\n overflow: hidden;\n text-overflow: ellipsis;\n max-width: 192px;\n ${generateFontStyle('body-1r')}\n`;\n\nexport const EmailWrapper = styled.div.attrs({\n className: classNameWithPrefix(blockName, 'email-wrapper'),\n})`\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 8px;\n`;\n","import React from 'react';\nimport { useSelector } from 'react-redux';\n\nimport { getManagerContacts } from '@ams-package/app';\nimport { CopyIconButton, SocialMediaButtons } from '@ams-package/button';\nimport { defaultImages } from '@ams-package/icons';\n\nimport {\n AccountInfo,\n AccountInfoWrapper,\n AccountInfoAvatar,\n AccountInfoDescription,\n AccountInfoEmail,\n EmailWrapper,\n} from './styled';\n\nexport const SidebarAccountInfo: React.FC = () => {\n const manager = useSelector(getManagerContacts);\n\n if (!manager) return <>;\n\n return (\n \n \n \n \n

{`${manager.firstname} ${manager.lastname}`}

\n {manager.email && (\n \n {manager.email}\n \n \n )}\n
\n
\n \n
\n );\n};\n","import styled from 'styled-components';\nimport { NavLink } from 'react-router-dom';\n\nimport { classNameWithPrefix } from '@crm-framework/utils';\n\nimport { h4Style } from '@ams-package/theme';\nimport { affShoreLogo } from '@ams-package/app';\n\nconst blockName = 'sidebar';\n\nexport const SidebarWrapper = styled.div.attrs({\n className: classNameWithPrefix(blockName, 'wrapper'),\n})`\n position: sticky;\n top: 0;\n bottom: 0;\n left: 0;\n display: flex;\n flex-direction: column;\n justify-content: space-between;\n height: 100vh;\n background: var(--sidebar-background-color);\n padding: var(--sidebar-padding);\n`;\n\nexport const SidebarHeader = styled.div.attrs({\n className: classNameWithPrefix(blockName, 'header'),\n})`\n display: flex;\n flex-direction: column;\n gap: var(--sidebar-header-gap);\n`;\n\nexport const SidebarFooter = styled.div.attrs({\n className: classNameWithPrefix(blockName, 'footer'),\n})`\n display: flex;\n flex-direction: column;\n`;\n\nexport const SidebarLogout = styled.div.attrs({\n className: classNameWithPrefix(blockName, 'logout'),\n})`\n padding: var(--sidebar-logout-padding);\n border-top: 1px solid var(--border-color);\n`;\n\nexport const SidebarLogoutLink = styled(NavLink).attrs({\n className: classNameWithPrefix(blockName, 'logout-link'),\n})`\n display: flex;\n align-items: center;\n gap: var(--sidebar-logout-link-gap);\n color: var(--logout-text-color);\n ${h4Style}\n\n svg {\n width: var(--sidebar-logout-link-size);\n height: var(--sidebar-logout-link-size);\n stroke: var(--logout-text-color);\n fill: var(--logout-text-color);\n }\n\n &:hover {\n color: var(--logout-hover-text-color);\n svg {\n stroke: var(--logout-hover-text-color);\n fill: var(--logout-hover-text-color);\n }\n }\n`;\n\nexport const HeaderWrapper = styled.img.attrs({\n className: classNameWithPrefix(blockName, 'header-wrapper'),\n})`\n content: url(${affShoreLogo});\n width: 150px;\n`;\n","import React from 'react';\nimport { NavLink } from 'react-router-dom';\n\nimport { svgComponents } from '@ams-package/icons';\nimport { LSHelper, LSKeys } from '@ams-package/utils';\nimport { PathNames } from '@ams-package/router';\n\nimport { Navigation } from '../navigation';\nimport { SidebarAccountInfo } from '../sidebar-account-info';\n\nimport {\n SidebarWrapper,\n SidebarHeader,\n SidebarFooter,\n SidebarLogout,\n SidebarLogoutLink,\n HeaderWrapper,\n} from './styles';\n\nexport const Sidebar: React.FC = () => {\n const { LogoutIcon } = svgComponents;\n\n const removeToken = () => {\n LSHelper.removeItem(LSKeys.token);\n LSHelper.removeItem(LSKeys.tokenHealth);\n };\n\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n Log out\n \n \n \n \n );\n};\n","import styled, { css } from 'styled-components';\n\nimport { classNameWithPrefix } from '@crm-framework/utils';\n\nconst blockName = 'layout';\n\nconst baseLayoutStyles = css`\n display: grid;\n gap: 0px 0px;\n min-height: 100vh;\n`;\n\nexport const ProtectedLayoutContainer = styled.div`\n ${baseLayoutStyles}\n grid-template-columns: 2fr 9fr;\n`;\n\nexport const Main = styled.div`\n display: flex;\n flex-flow: column;\n height: 100%;\n`;\n\nexport const Content = styled.div.attrs({\n className: classNameWithPrefix(blockName, 'content'),\n})`\n padding: var(--layout-content-padding);\n margin: var(--layout-content-margin);\n flex: auto;\n display: flex;\n flex-direction: column;\n overflow: auto;\n max-height: calc(100vh - 120px);\n`;\n\nexport const AuthLayoutContainer = styled.div.attrs({\n className: classNameWithPrefix(blockName, 'auth-layout-container'),\n})`\n ${baseLayoutStyles}\n grid-template-columns: 1fr;\n`;\n","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport ReactGA from 'react-ga4';\nimport { RouterProvider } from 'react-router-dom';\nimport { Provider } from 'react-redux';\n\nimport { Notification } from '@xcritical/notification';\n\nimport App from '@ams-package/app';\nimport { getRouter } from '@ams-package/router';\n\nimport { store } from './store';\nimport { watchAppSaga } from './sagas';\nimport { AuthLayout, ProtectedLayout } from './components';\nimport { routerConfig } from './config';\n\nstore.runSaga(watchAppSaga);\n\nReactGA.initialize('G-9LYK22MG2C');\n\nReactDOM.render(\n \n \n \n \n \n ,\n document.getElementById('root')\n);\n","import React from 'react';\nimport { Outlet } from 'react-router-dom';\n\nimport { AuthLayoutContainer } from './styles';\n\nexport const AuthLayout: React.FC = () => (\n \n \n \n);\n","import React from 'react';\nimport { Outlet, useNavigate } from 'react-router-dom';\n\nimport { StatusModal, ConfirmModal } from '@ams-package/modal';\nimport PaymentEditor from '@ams-package/payment-method-editor';\n\nimport { Header } from '../header';\nimport { Sidebar } from '../sidebar';\nimport { REGULAR_PAYOUT_STATUS_MESSAGES } from '../regular-payouts';\n\nimport { Main, Content, ProtectedLayoutContainer } from './styles';\n\nexport const ProtectedLayout: React.FC = () => {\n const navigate = useNavigate();\n\n // TODO: make method to check if user is authenticated\n const isAuthenticated = true;\n\n if (!isAuthenticated) {\n navigate('/login');\n }\n\n return (\n \n \n
\n
\n \n \n \n
\n \n \n \n
\n );\n};\n"],"names":["HEADER","SIGN_IN_FORM","PERSONAL_DATA_REGISTER_FORM","RESET_PASSWORD_FORM","RESTORE_PASSWORD_FORM","SIGN_IN_FORM_FIELDS","RESTORE_PASSWORD_FORM_FIELDS","RESET_PASSWORD_FORM_FIELDS","PERSONAL_DATA_FORM_FIELDS","firstname","lastname","messengerType","contactValue","MESSENGER_TYPE","MESSENGER_TYPE_DICTIONARY","map","type","id","label","value","blockName","LoginHeader","div","attrs","className","classNameWithPrefix","h1","LabelWithLinkWrapper","ForgotPasswordLinkWrapper","a","TermsAndConditionsWrapper","BackButtonWrapper","button","LoginPageWrapper","StatusMessageWrapper","StepCounterWrapper","ProgressBar","ProgressEmpty","ProgressBarFull","ProgressBarHalf","BottomContentWrapper","DescriptionWrapper","BottomDescriptionWrapper","CheckboxWrapper","SideModalTitleWrapper","SignInForm","canResetPassword","isSignUp","config","useSelector","navigate","name","columns","gap","isRequired","htmlFor","shouldFitContainer","component","isClearable","placeholder","onClick","href","TermsAndConditionsLink","target","signInFormSelector","state","signUpFormSelector","resetPasswordFormSelector","restorePasswordFormSelector","messengerTypeSelector","model","signUpInProgress","isRegistrationInfoValidated","getIsLoading","isLoading","getIsPasswordReset","isPasswordReset","getIsPasswordRestored","isPasswordRestored","SIGN_IN","SIGN_UP","RESET_PASSWORD","RESTORE_PASSWORD","VALIDATE_REGISTER_FORM","loginStore","createSlice","initialState","reducers","setIsLoading","payload","setIsRegistrationInfoValidated","setIsPasswordReset","setIsPasswordRestored","loginActions","actions","signIn","createAction","resetPassword","validateRegisterForm","signUp","restorePassword","loginReducer","reducer","PersonalDataForm","isWhatsApp","WhatsApp","options","RegistrationTitle","isInProgress","SideModalContent","pageButton","window","location","origin","ResetPasswordForm","RestorePasswordForm","createTabsConfig","formattedData","length","reduce","tabs","TabIcon","title","Content","disabled","TitleBadge","HeaderItem","key","url","index","header","content","OFFER_ACTIVATION_MODAL_NAME","sortByIsTopOffer","offers","sort","b","isTopOffer","isReadySelector","isReady","offersDataSelector","createSelector","allOffersDataCount","myOffersDataCount","availableOffersDataCount","allOffersData","myOffersData","availableOffersData","allOffersCount","myOffersCount","availableOffersCount","allOffers","myOffers","availableOffers","offerNameSelector","offerData","landingPageDisabledSelector","isActivated","offerLandingsSelector","landingPages","isDisabled","filter","lp","offersLinkQuerySelector","links","mixedTraffic","lastCopiedLink","affId","markdownOfferDataSelector","rates","rules","advertiserSelector","ad","advertiser","Object","keys","res","join","offersStore","setIsReady","setMyOffersData","setAllOffersData","setAvailableOffersData","setSelectedOffer","setLandingPages","isDefault","setLastCopiedLink","resetSelectedOffer","OFFERS_INIT","OFFER_INIT","GET_LANDING_PAGES","offersActions","initOffers","initOffer","getLandingPages","offersReducer","CardWrapper","CardHeader","CardTitleWrapper","h3","CardTitle","CardButtonsWrapper","Link","CardBody","CardBodyColumn","CardColumnTitle","CardColumnValue","CardStatusColumnValue","isActive","OfferCardHeader","hasOneLanding","link","handlerOpenCard","copiedText","copyToClipboard","useCopyToClipboard","useEffect","notify","success","copyButton","useCallback","e","stopPropagation","offer","replace","String","baseAppearance","appearance","to","statistics","OffersCard","isOfferActive","offerDealType","offerDealValue","offerDealKey","countries","landingPagesRedirectLinks","dispatch","useDispatch","user","COLUMN_VALUES","offerDealAmount","TITLES","useMemo","linkOfFirstLanding","campaignId","landingPageId","handleOpenCard","column","EmptyOffersWrapper","EmptyOffersContentWrapper","EmptyOffersTextWrapper","EmptyOffers","shouldFitContent","OffersTab","memo","data","order","props","height","amount","TAB_PATHS","OffersTabs","tabData","svgComponents","tabPanels","OfferCssStyles","createGlobalStyle","OffersWrapper","getOffers","post","json","getOffer","get","handleOffersInit","put","call","isMine","error","handleAllOffersInit","handleMyOffersInit","handleAvailableOffersInit","handleOfferInit","offerId","handleGetLandingPages","HeaderWrapper","BadgeWrapper","LandingDescription","DescriptionTitleWrapper","ColumnWrapper","InfoColumnWrapper","CellWrapper","TabWrapper","ModalContentWrapper","ModalDescriptionWrapper","ModalButtonsWrapper","BodyWrapper","CardHeaderWrapper","LandingTitleWrapper","LandingInfoWrapper","LandingPageButtonWrapper","LinksWrapper","CopyInputIconWrapper","Links","urlWithQuery","onCopyClick","selected","text","LandingCard","description","rel","Landings","landings","landing","LinkAndLandingTab","manager","email","numberOfButtons","icon","center","PromoBadge","ButtonsWrapper","ImgWrapper","MarkdownWrapper","MarkdownContent","remarkPlugins","rehypePlugins","unwrapDisallowed","FIRST_COLUMN_ADVERTISER_HEADERS","SECOND_COLUMN_ADVERTISER_HEADERS","mapAdvertiserFields","titles","values","acc","AdvertiserContent","firstColumn","secondColumn","logo","src","alt","cell","TAB_LIST_NAMES","INFORMATION_TAB_NAMES","InformationTab","currentName","setCurrentName","useState","TAB_LIST_CONTENT","PromoTab","PaymentRequestContainer","PaymentRequestTitle","PaymentRequestCheckStatus","PaymentCheckMessage","PaymentAvailableBalance","PaymentAmount","PaymentMethod","PaymentButton","CloseCircleIcon","CloseCircle","TickCircleIcon","TickCircle","MinimumAmountWrapper","PAYMENT_REQUEST_FORM","paymentRequestStore","dateTime","finishInit","_","prepare","balance","INITIALIZE","SUBMIT","paymentRequestActions","init","submit","paymentRequestReducer","requestPaymentFormSelector","requestPaymentSelector","availablePaymentsSelector","paymentMethods","payoutPaymentMethods","method","postfix","number","toString","payoutByRequestMinAmount","find","payoutMethod","code","amountSelector","selectedPaymentSelector","payments","payment","methodId","submitSelector","currentPayment","viewSelector","manualPayoutRequestMinBalanceLimit","minBalance","selectedPayment","availableWithdrawal","status","PAYMENT_REQUEST_FIELDS","PaymentRequest","handleSubmit","handleChangeMethod","width","color","size","formName","onChange","apiCreatePayout","paymentMethodId","handleStartInit","all","console","handleAddPaymentMethod","select","validationErrors","validateAmountModel","statusModalName","message","Success","errors","getObjectWithoutUndefinedPropsFrom","watchers","takeLatest","takeEvery","onSuccess","ReduxInject","keyName","saga","DashboardWrapper","GetStartedTitle","h2","StepsWrapper","StepCard","StepCardInfo","StepHeader","Order","Description","Step","linkUrl","linkText","Steps","steps","payouts","affStatisticsSelector","mainDashboard","affStatistics","isDashboardReadySelector","topOffersSelector","topOffers","dashboardConfigSelector","mainDashboardStore","setAffStatistics","setTopOffers","setConfig","getAffStatistics","_action","MAIN_DASHBOARD_INIT","mainDashboardActions","mainDashboardReducer","StatisticsCard","TabsWrapper","TabsHeaderWrapper","StatisticTab","StatisticBlockWrapper","IconWrapper","InfoWrapper","StatisticValue","PercentWrapper","isPositive","PercentDirections","Percent","direction","plus","ArrowUp3","ArrowDown3","Infinity","StatisticBlock","Icon","percent","DATE_FORMAT","statisticPeriods","day","start","format","startOfDay","Date","end","startPrevious","subDays","endPrevious","endOfDay","week","startOfWeek","subWeeks","endOfWeek","month","startOfMonth","subMonths","endOfMonth","threeMonths","allTime","StatisticFields","statisticBlocks","regs","TagUser","ftd","deposits","WalletMoney","profit","DollarCircle","render","hits","People","StatisticBlockSkeleton","Statistics","selectedPeriod","setSelectedPeriod","tabTitle","rowGap","columnGap","onChangeHandler","activeTabKey","Wrapper","TopOffersCard","ListWrapper","TopOfferWrapper","OfferName","OfferInfo","ChartIcon","Chart","ButtonWrapper","TopOffer","TopOffers","DashboardSkeleton","formatPercent","percentValue","parseFloat","Number","toFixed","mapStatisticModel","statisticModel","prevStatisticModel","field","prevValue","minus","PageWrapper","CalendarIconWrapper","settings","displayName","inGrid","inFilter","replaceDisplayNameToSelectedValue","replaceGridColumn","filterType","SingleSelect","inSort","defaultVal","prefix","isHidden","toLocaleDateString","MultiSelect","dictionaryName","UNIVERSAL_FILTERS","getAffiliatesStatistics","getStatistic","$filters","sorting","pageSize","page","platform","date","groupKey","country","deviceType","campaign","filters","dateFrom","dateTo","requestModel","undefined","limit","offset","getDashboardConfig","handleInit","signups","handleGetAffStatistics","period","fixedRequestOptions","prevPeriodAffStatistics","store","createStore","form","modal","login","app","registry","registryReducer","dictionaries","dictionariesReducer","apiSignIn","apiResetPassword","apiRestorePassword","apiSignUp","apiValidateRegData","validateSignInModel","password","handleSignIn","authData","access_token","accessToken","expires_in","expiresIn","setItem","token","tokenHealth","query","urlString","createUrlObject","returnUrl","decodedReturnUrl","decodeURIComponent","redirect","errorMessage","JSON","parse","handleValidate","handleSignUp","signInModel","personalDataModel","err","validatePersonalDataModel","refAff","managerId","parentAffiliateId","handleResetPassword","validateResetPasswordModel","handleRestorePassword","confirmPassword","validateRestorePasswordModel","search","CHANGE_PASSWORD_FORM","CHANGE_PASSWORD_FORM_FIELDS","PERSONAL_INFO_FORM","ACCOUNT_SETTINGS_STATUS_MODAL_NAME","CHANGE_PASSWORD_IS_LOADING","PERSONAL_INFO_IS_READY","PERSONAL_INFO_IS_LOADING","PAYMENT_SETTINGS_IS_LOADING","PERSONAL_INFO_FORM_FIELDS","PERSONAL_INFO_REQUIRED_FIELDS","PERSONAL_INFO_GRID_SETTINGS","CHANGE_PASSWORD","INIT_PERSONAL_INFO","INIT_PAYMENT_SETTINGS","SAVE_PERSONAL_INFO","accountSettingsActions","changePassword","initPersonalInfo","savePersonalInfo","initPaymentSettings","changePasswordFormSelector","personalInfoRequestModelSelector","birthday","handleChangePassword","registryActions","set","oldPassword","isValidMessage","newPassword","validateChangePasswordModel","handleInitPersonalInfo","currentUser","contacts","handleChangePersonalInfo","forEach","phone","viber","conditions","isPhone","whatsApp","validatePersonalInfoModel","handleInitPaymentSettings","appSagas","REGULAR_PAYOUT_FORM","regularPayoutStore","payoutDetails","setPayoutDetails","action","INIT_WIDGET","INIT_PAYMENT_DATES","SELECT","DELETE","CONFIRM_DELETE","regularPayoutActions","initWidget","delete","confirmDelete","initPaymentDates","regularPayoutReducer","regularPayoutSelector","regularPaymentMethodSelector","isRegular","regularPaymentMethodIdSelector","paymentMethod","selectedPayoutPaymentSelector","selectedMethod","payoutDateSelector","minUpcomingPayoutDate","maxUpcomingPayoutDate","parseISO","regularPayoutsViewSelector","regularPayoutRequestMinBalanceLimit","payoutDate","REGULAR_PAYOUT_FIELDS","REGULAR_PAYOUT_STATUS_MESSAGES","regularPayouts","apiSelectRegularPaymentMethod","apiClearRegularPaymentMethod","apiGetPayoutDetails","handleSetSelectedPaymentMethod","handleSelectRegularPaymentMethod","withoutNotify","handleDeleteRegularPaymentMethod","buttons","primary","callback","dispatcher","secondary","handleConfirmDeleteRegularPaymentMethod","handleInitPayoutDetails","handleSelectRegularPaymentMethodOnCreate","payoutDetailsWatchers","RegularPayoutGrid","RegularPayoutContainer","RegularPayoutField","UpcomingDate","UpcomingDateLabel","HeaderPayoutDate","HeaderPayoutWrapper","HeaderPayoutTitle","RegularPayout","statusMessageKey","PayoutDate","sagaKey","PayoutDateInject","HeaderSection","HeaderInfoWrapper","HeaderButtonContent","Header","TestModals","isOpen","setIsOpen","showModal","style","display","flexDirection","onClose","showFailureModal","Failure","AccountSettingsWrapper","AccountSettingsCssStyles","SecurityTabWrapper","SubmitButtonWrapper","SecurityTab","useRegistry","onChangePassword","position","PersonalInfoTabSkeleton","telegram","skype","PersonalInfoTab","onChangePersonalInfo","LockCircle","pattern","maxLength","maxDate","isSearchable","WrapperWithBorder","EmptyMessage","Add","PaymentMethodWrapper","PopoverWrapper","MenuItem","Status","isConfirmed","MoreIcon","More","Identification","PaymentIconWrapper","PaymentIcon","SupportedPaymentsWrapper","SupportedPaymentIconWrapper","PaymentMethodsInformationWrapper","PaymentsInfoTitle","PaymentMethodsInformation","togglePopover","menuItems","addOrEdit","selectedId","visible","onOutsideClick","withArrow","trigger","PaymentsInfo","shouldInit","isExpanded","setIsExpanded","availablePaymentMethods","useDictionary","paymentMethodsTextLimits","toggleExpand","paymentMethodsDescription","result","Minus","dangerouslySetInnerHTML","__html","PaymentSettingsTabSkeleton","PaymentSettingsTab","item","personalInfo","accountSettings","security","paymentSettings","StatusTypes","PayoutsRequestWrapper","styled","StatusSnippet","Pending","Confirmed","InProgress","WaitingForPayment","Approved","Paid","Rejected","AdditionalInfoWrapper","PaymentMethodLinkWrapper","PayoutsRequest","ArrowRight","__","row","typeName","statusName","apiGetPayoutsHistory","entries","addDays","History","clearFilters","api","apiGetGridData","withoutUrlChanging","history","routerConfig","path","dashboard","protected","isMenu","offerName","User","variant","Lock1","CardEdit","handlerSignIn","withCloseButton","ResetPassword","registration","handlerValidateRegistrationData","handlerSignUp","isTermsAccepted","isReset","handlerResetPassword","handlerGoToLogin","isRestored","handlerRestorePassword","testModals","testButtons","padding","backgroundColor","testDropdowns","setValue","value1","setValue1","value2","setValue2","value3","setValue3","background","marginLeft","testFilters","NavLinkStyles","css","StyledNavUl","ul","StyledNavLink","DisabledNavLink","NavIconWrapper","Navigation","menuItem","CustomIcon","AccountInfo","AccountInfoWrapper","AccountInfoAvatar","img","AccountInfoDescription","AccountInfoEmail","EmailWrapper","SidebarAccountInfo","managerAvatar","SidebarWrapper","SidebarHeader","SidebarFooter","SidebarLogout","SidebarLogoutLink","Sidebar","LogoutIcon","removeItem","baseLayoutStyles","ProtectedLayoutContainer","Main","AuthLayoutContainer","runSaga","initialize","Provider","router","AuthLayout","ProtectedLayout","statusMessages","Notification","document","getElementById"],"sourceRoot":""}