{"version":3,"sources":["constants/routes.constants.js","utils/deviceUtils.js","embeddedImages/ShortsImage.jsx","utils/dateUtils.js","assets/woman_display_image.png","embeddedImages/InsightsImage.jsx","embeddedImages/ShoppingBagImage1.jsx","embeddedImages/ShoppingBagImage2.jsx","embeddedImages/ShoppingBagImage3.jsx","embeddedImages/InfluencersImage.jsx","constants/general.constants.js","constants/api.constants.js","constants/storage.constants.js","services/SharedPreferences.js","services/LocalStorage.js","services/RequestWrapper.js","conf.js","services/CloudLogger.js","api/logger/logger.js","utils/Stack.js","contexts/History.js","layouts/RouteWrapper.js","components/Loader/Loader.jsx","dialogs/PopupDialog/PopupDialog.jsx","constants/regex.constants.js","services/SystemService.js","components/LoaderButton/LoaderButton.jsx","dialogs/PaydinDialog/PaydinDialog.jsx","dialogs/ImageDialog/ImageDialog.jsx","components/ImageBox/ImageBox.jsx","api/links/links.js","api/auth/auth.js","api/influencers/influencers.js","components/ApprovalMessage/ApprovalMessage.jsx","components/PaydinDrawer/PaydinDrawer.jsx","api/shopboard/shopboard.js","utils/dataUtils.js","components/FreeTrialStrip/FreeTrialStrip.js","embeddedImages/SpeechBubbleLightningBoltImage.jsx","dialogs/FreeModeDialog/FreeModeDialog.jsx","api/products/products.js","api/store/store.js","contexts/User.js","components/BoxedMessage/BoxedMessage.jsx","components/ShopifyConnectStore/ShopifyConnectStore.jsx","components/ShopifyConnect/ShopifyConnect.jsx","components/PaydinMenu/PaydinMenu.jsx","embeddedImages/MobileSimulatorTopBarMenuImage.jsx","components/MobileSimulatorProduct/MobileSimulatorProduct.jsx","components/MobileLinkPreviewSimulator/MobileLinkPreviewSimulator.jsx","components/MultiLineText/MultiLineText.jsx","components/ColorSelect/ColorSelect.jsx","components/AddProductsDialogProduct/AddProductsDialogProduct.jsx","components/PaydinCheckbox/PaydinCheckbox.jsx","components/BackButton/BackButton.jsx","components/ContentDialogTopbar/ContentDialogTopbar.jsx","hooks/useOnScreen.js","dialogs/MultiSelectDialog/MultiSelectDialog.jsx","components/FloatingElement/FloatingElement.jsx","components/AddProductsFilters/AddProductsFilters.jsx","dialogs/AddProductsDialog/AddProductsDialog.jsx","components/PaydinSlider/PaydinSlider.jsx","services/imageUtils.js","components/PaydinImageCropper/PaydinImageCropper.jsx","dialogs/ImageCropDialog/ImageCropDialog.jsx","components/Tooltip/Tooltip.jsx","components/EditFieldSectionInput/EditFieldSectionInput.jsx","components/PaydinSelectRenderedValue/PaydinSelectRenderedValue.jsx","components/PaydinSelect/PaydinSelect.jsx","components/AddInfluencerOption/AddInfluencerOption.jsx","components/AddInfluencerSelect/AddInfluencerSelect.jsx","components/UTMFormInput/UTMFormInput.jsx","components/PaydinSwitch/PaydinSwitch.jsx","components/CollapsingElement/CollapsingElement.jsx","components/ExpandHideButton/ExpandHideButton.jsx","components/UTMForm/UTMForm.jsx","components/MultiSelectStatusButton/MultiSelectStatusButton.jsx","components/ItemsView/ItemsView.jsx","utils/utils.js","api/files/files.js","components/ItemsViewSection/ItemsViewSection.jsx","components/PreviewLinkProductsListItem/PreviewLinkProductsListItem.jsx","components/AlertMessage/AlertMessage.jsx","components/EditLinkSection/EditLinkSection.jsx","components/AnimatedStringLoader/AnimatedStringLoader.jsx","pages/LoaderPage/LoaderPage.jsx","components/ContentDialogLoader/ContentDialogLoader.jsx","components/LinkView/LinkView.jsx","components/UrlSelectionType/UrlSelectionType.jsx","embeddedImages/ShortUrlSelectionCollectionTypeImage.jsx","components/AddCollectionsDialogCollection/AddCollectionsDialogCollection.jsx","api/collections/collections.js","dialogs/AddCollectionsDialog/AddCollectionsDialog.jsx","components/EditShortSection/EditShortSection.jsx","components/ShortView/ShortView.jsx","components/EditInfluencerSection/EditInfluencerSection.jsx","components/InfluencerView/InfluencerView.jsx","components/LinkAnalyticsSection/LinkAnalyticsSection.jsx","services/currency.js","components/InfluencerStrip/InfluencerStrip.jsx","components/ColorfulTag/ColorfulTag.jsx","components/LinkUrlTypeTag/LinkUrlTypeTag.jsx","components/PreviewItemDataSection/PreviewItemDataSection.jsx","components/NoItemsFound/NoItemsFound.jsx","components/PaydinTable/PaydinTable.jsx","components/ProductsTableHeaderView/ProductsTableHeaderView.jsx","components/CircularProgressBar/CircularProgressBar.jsx","components/ProductsTableRowView/ProductsTableRowView.jsx","components/ProductsTable/ProductsTable.jsx","components/PaydinChartControlSection/PaydinChartControlSection.jsx","components/PaydinChart/PaydinChart.jsx","components/ActivityChart/ActivityChart.jsx","components/CommerceChart/CommerceChart.jsx","components/LinkAnalyticsCharts/LinkAnalyticsCharts.jsx","components/LinkOrdersTableHeaderView/LinkOrdersTableHeaderView.jsx","components/OrderProduct/OrderProduct.jsx","components/LinkOrdersTableRowView/LinkOrdersTableRowView.jsx","components/LinkOrdersTable/LinkOrdersTable.jsx","components/DrawerStyledButtonList/DrawerStyledButtonList.jsx","components/PreviewLinkSection/PreviewLinkSection.jsx","components/DateIntervalOption/DateIntervalOption.jsx","components/DatePicker/DatePicker.jsx","components/TimeSelect/TimeSelect.jsx","components/PaydinDrawerListContent/PaydinDrawerListContent.jsx","components/TabOption/TabOption.jsx","components/Tabs/Tabs.jsx","components/ShortItem/ShortItem.jsx","components/InfluencerAnalyticsLoader/InfluencerAnalyticsLoader.jsx","components/InfluencerLinksShortsLoader/InfluencerLinksShortsLoader.jsx","components/DashboardDataContainer/DashboardDataContainer.jsx","components/BusinessAnalyticsDataLoader/BusinessAnalyticsDataLoader.jsx","components/DashboardDataSingleValue/DashboardDataSingleValue.jsx","components/DashboardDataMultiValue/DashboardDataMultiValue.jsx","components/DashboardDataValueBreakdown/DashboardDataValueBreakdown.jsx","components/PaydinPieChart/PaydinPieChart.jsx","components/SalesBreakdownChart/SalesBreakdownChart.jsx","components/InfluencerInsights/InfluencerInsights.jsx","components/AddLInkFlow/AddLInkFlow.jsx","pages/InfluencerPreviewPage/InfluencerPreviewPage.jsx","components/MultilinkExperiencesTableRowView/MultilinkExperiencesTableRowView.jsx","components/MultilinkExperiencesTableHeaderView/MultilinkExperiencesTableHeaderView.jsx","components/MultilinkExperiencesTable/MultilinkExperiencesTable.jsx","components/PreviewMultilinkSection/PreviewMultilinkSection.jsx","embeddedImages/InstantStoresImage.jsx","components/EditMultilinkSection/EditMultilinkSection.jsx","components/MultilinkView/MultilinkView.jsx","dialogs/ContentDialog/ContentDialog.jsx","components/LinkItem/LinkItem.jsx","components/AnalyticsStrip/AnalyticsStrip.jsx","components/DashboardLoader/DashboardLoader.jsx","pages/LinksPage/LinksPage.jsx","components/ProductItem/ProductItem.jsx","pages/TrendsPage/TrendsPage.js","layouts/GeneralLayout/GeneralLayout.jsx","layouts/RequiredAuthLayout.js","pages/NotFound/NotFound.js","pages/Splash/Splash.jsx","components/PrivaciesFooterText/PrivaciesFooterText.jsx","components/PasswordInputRule/PasswordInputRule.jsx","components/PasswordInput/PasswordInput.jsx","components/AlreadyHaveAccount/AlreadyHaveAccount.jsx","components/CheckYourEmail/CheckYourEmail.jsx","pages/SignUpPage/SignUpPage.jsx","pages/ExternalAuthPage/ExternalAuthPage.jsx","pages/CreateNewPasswordPage/CreateNewPasswordPage.jsx","pages/PrivacyPolicyPage/PrivacyPolicyPage.jsx","pages/TermsAndConditionsPage/TermsAndConditionsPage.jsx","pages/ShopifyHelpPage/ShopifyHelpPage.jsx","components/Card/Card.jsx","components/AnalyticsDataCard/AnalyticsDataCard.jsx","pages/AnalyticsPage/AnalyticsPage.jsx","components/AccountSection/AccountSection.jsx","components/SettingsInput/SettingsInput.jsx","dialogs/ConfirmDisconnectDialog/ConfirmDisconnectDialog.jsx","components/SocialConnectButton/SocialConnectButton.jsx","components/ShopboardSocialStatus/ShopboardSocialStatus.jsx","pages/AccountPage/AccountPage.jsx","components/AddMedia/AddMedia.jsx","components/PaydinColorPicker/PaydinColorPicker.jsx","components/StoreSettingsLinkStyleSection/StoreSettingsLinkStyleSection.jsx","components/AppearanceOptionPicker/AppearanceOptionPicker.jsx","components/RunningMessagesStrip/RunningMessagesStrip.jsx","components/SaveChangesStrip/SaveChangesStrip.jsx","embeddedImages/CheckImage.jsx","embeddedImages/ErrorImage.jsx","components/OptionValueMapperEntry/OptionValueMapperEntry.jsx","components/OptionValueMapper/OptionValueMapper.jsx","components/ToggleSection/ToggleSection.js","assets/filter.svg","components/MultiSelectDropdown/MultiSelectDropdown.jsx","components/InfluencerMultiselectDropdown/InfluencerMultiselectDropdown.jsx","pages/AppearancePage/AppearancePage.jsx","components/LayoutTopbarRightSection/LayoutTopbarRightSection.jsx","components/FloatingMenu/FloatingMenu.jsx","components/MinimizedAddButton/MinimizedAddButton.jsx","embeddedImages/HomePageImage.jsx","components/MobileButtonStrip/MobileButtonStrip.jsx","embeddedImages/MagicStoreImage.jsx","embeddedImages/MultilinksImage.jsx","embeddedImages/ShopboardImage.jsx","components/DashboardTopBar/DashboardTopBar.jsx","components/UserMenuListItem/UserMenuListItem.jsx","components/UserMenu/UserMenu.jsx","embeddedImages/TrendsImage.jsx","components/DashboardSidebar/DashboardSidebar.jsx","layouts/DashboardLayout/DashboardLayout.jsx","components/PricingPlan/PricingPlan.jsx","pages/PricingPlansPage/PricingPlansPage.jsx","components/BaseTopBar/BaseTopBar.jsx","layouts/BaseLayout/BaseLayout.jsx","pages/AccountVerificationPage/AccountVerificationPage.jsx","pages/SignUpRequestPage/SignUpRequestPage.jsx","components/InfluencerItem/InfluencerItem.jsx","embeddedImages/NoInfluencersFoundImage.jsx","pages/InfluencersPage/InfluencersPage.jsx","pages/ForgotPasswordPage/ForgotPasswordPage.jsx","pages/ForgotInfluencerPassword/ForgotInfluencerPassword.jsx","pages/ForgotMerchantPassword/ForgotMerchantPassword.jsx","components/DontHaveAccount/DontHaveAccount.jsx","pages/LoginPage/LoginPage.jsx","pages/InfluencerLoginPage/InfluencerLoginPage.jsx","pages/AdminLoginPage/AdminLoginPage.jsx","pages/ShortsPage/ShortsPage.jsx","pages/RegisterStorePage/RegisterStorePage.jsx","pages/LoginStorePage/LoginStorePage.jsx","components/PaydinRadioButtonGroup/PaydinRadioButtonGroup.jsx","components/AutoSwapRadioGroup/AutoSwapRadioGroup.jsx","components/MultipleSelectHoizontalLine/MultipleSelectHoizontalLine.jsx","pages/SettingsPage/SettingsPage.jsx","components/HomePageSection/HomePageSection.jsx","components/MobileRecentActivitySection/MobileRecentActivitySection.jsx","components/PaydinMuiAccordion/PaydinMuiAccordion.jsx","components/PaydinAccordion/PaydinAccordion.jsx","components/TodoList/TodoList.jsx","components/StoreOrdersTableRowView/StoreOrdersTableRowView.jsx","components/StoreOrdersTableHeaderView/StoreOrdersTableHeaderView.jsx","components/StoreOrdersTable/StoreOrdersTable.jsx","components/FloatingButton/FloatingButton.jsx","pages/HomePage/HomePage.jsx","dialogs/ProgressDialog/ProgressDialog.jsx","embeddedImages/PostcardImage.jsx","embeddedImages/SparkleSmartphoneImage.jsx","embeddedImages/MenuCheckImage.jsx","components/SmartStoreVideo.jsx","pages/MagicStorePage/MagicStorePage.jsx","components/ShopboardSocials/ShopboardSocials.jsx","components/ShopboardConnectComp/ShopboardConnectComp.jsx","components/ShopboardSocialMediaPostProduct/ShopboardSocialMediaPostProduct.jsx","components/ShopboardSocialMediaPostProductsTag/ShopboardSocialMediaPostProductsTag.jsx","assets/bookmark_ai_tag_gradient.svg","components/AiBadge/AiBadge.js","components/ShopboardSocialMediaPost/ShopboardSocialMediaPost.jsx","pages/ShopboardPage/ShopboardPage.jsx","pages/ShopboardAuthPage/ShopboardAuthPage.jsx","hooks/useQueryParams.js","embeddedImages/MultilinksImage2.jsx","components/MultilinkItem/MultilinkItem.jsx","pages/MultilinksPage/MultilinksPage.jsx","App.js","i18n.js","index.js"],"names":["HTTPS_HOST_URL_PREFIX","ADMIN_PAGES_URL_PREFIX","LINKS_URL_PREFIX","SHORTS_URL_PREFIX","PREVIEW_LINK_PAGE_SUFFIX","PREVIEW_INFLUECNER_PAGE_SUFFIX","EDIT_URL_SUFFIX","INFLUENCERS_PAGE_URL_PREFIX","INFLUENCERS_URL_PREFIX","PAYLINK_SITE_URL","HOME_PAGE_URL","SHOPBOARD_PAGE_URL","MAGIC_STORE_PAGE_URL","GOTO_HOMEPAGE_URLS","LOGIN_PAGE_URL","LOGIN_STORE_PAGE_URL","LOGIN_INFLUENCER_PAGE_URL","SIGN_UP_PAGE_URL","REGISTER_STORE_PAGE_URL","SIGN_UP_REQUEST_PAGE_URL","SHORTS_PAGE_URL","LINKS_PAGE_URL","INFLUENCERS_PAGE_URL","MULTILINKS_PAGE_URL","TRENDS_PAGE_URL","ANALYTICS_PAGE_URL","ACCOUNT_PAGE_URL","FORGOT_PASSWORD_PAGE_URL","INFLUENCER_FORGOT_PASSWORD_PAGE_URL","CREATE_NEW_PASSWORD_PAGE_URL","EXTERNAL_AUTH_PAGE_URL","PRIVACY_POLICY_PAGE_URL","PRIVACY_POLICY_PAYLINK_SITE_URL","TERMS_PAGE_URL","TERMS_PAYLINK_SITE_URL","SETTINGS_PAGE_URL","concat","APPEARANCE_PAGE_URL","PRICING_PLANS_PAGE_URL","SHOPIFY_HELP_PAGE_URL","ACCOUNT_VERIFICATION_PAGE_URL","AUTH_QUERY_PARAMETER_KEY","RESET_PASSWORD_TOKEN_QUERY_PARAMETER_KEY","PRODUCT_STATUS_QUERY_PARAMETER","IS_OUT_OF_STOCK_QUERY_PARAMETER","IS_SEARCH_IN_TAGS_QUERY_PARAMETER","LOGIN_INFLUENCER_MERCHANT_NAME_QUERY_PARAMETER","LOGIN_INFLUENCER_INFLUENCER_USERNAME_QUERY_PARAMETER","LOGIN_INFLUENCER_INFLUENCER_PASSWORD_QUERY_PARAMETER","SHOPBOARD_AUTH_PAGE_CODE_QUERY_PARAMETER","isMobile","window","innerWidth","ShortsImage","props","_jsx","_objectSpread","fill","viewBox","height","width","children","fillRule","d","clipRule","calculateDateRange","timeIntervalName","timeIntervalTimeUnit","timeIntervalTimeValue","todayDate","targetDate","ANALYTICS_PAGE_RETROACTIVE_DATA_REPORT_TIME_INTERVALS_NAMES","LIFETIME","Date","addTimeToDate","getAnalyticsDateString","date","getFullYear","getMonth","getDate","timeUnit","value","TIME_UNITS","SECOND","setSeconds","getSeconds","MINUTE","setMinutes","getMinutes","HOUR","setHours","getHours","DAY","setDate","MONTH","setMonth","setFullYear","getFormattedDate","Intl","DateTimeFormat","day","month","year","format","getFormattedShortYearDate","getFormattedShortDate","getFormattedDateRange","fromDate","toDate","getFormattedShortDateRange","getFormattedShortYearDateRange","getFormattedDateTime","shouldShowYear","arguments","length","undefined","hour","minute","hour12","InsightsImage","id","_jsxs","ShoppingBagImage1","ShoppingBagImage2","ShoppingBagImage3","enableBackground","InfluencersImage","x","y","REQUEST_TIMEOUT_MILLISECONDS","IMAGE_UPLOAD_REQUEST_TIMEOUT_MILLISECONDS","TOP_BAR_HEIGHT_PX","ANIMATIED_STRING_LOADER_ANIMATION_DURATION_SECONDS","APPLICATION_READY_TIMEOUT_MILISECONDS","MAX_ITEMS_SEARCH_RESULT_NUMBER","SHOPEAKS_CDN_DOMAIN","APPLICATION_RESOURCES_DOMAIN","SHOPEAKS_LOGO_URL","SHOPEAKS_LOGO_WHITE_URL","SHOPEAKS_SMALL_LOGO_URL","SHOPEAKS_SMALL_LOGO_WHITE_URL","NO_IMAGE_PLACEHOLDER_URL","SHOPIFY_LOGO_URL","NO_IMAGE_GLOBE_PLACEHOLDER_URL","HOME_PAGE_TODO_TASK_LOGO_IMAGE_URL","HOME_PAGE_TODO_TASK_ANALYTICS_IMAGE_URL","HOME_PAGE_TODO_TASK_INSTANT_IMAGE_URL","HOME_PAGE_TODO_TASK_SHIPPING_IMAGE_URL","HOME_PAGE_TODO_TASK_UTM_IMAGE_URL","SHOPBOARD_PAGE_IMAGE","INSTAGRAM_LOGO_URL","TIKTOK_LOGO_URL","PINTEREST_LOGO_URL","INSTAGRAM_BLACK_WHITE_LOGO_URL","TIKTOK_BLACK_WHITE_LOGO_URL","PINTEREST_BLACK_WHITE_LOGO_URL","FREE_MODE_DIALOG_IMAGE_URL","PAYDIN_DIALOG_CONTENT_PADDING_PX","EDIT_LINK_PAGE_PRODUCT_SEARCH_REQUEST_SEND_DELAY_MILLISECONDS","SIGN_UP_PAGE_VALIDATE_FIELD_REQUEST_SEND_DELAY_MILLISECONDS","PAGE_DEFAULT_MAX_WIDTH","LINK_EDIT_PREVIEW_PAGE_MAX_WIDTH","LINK_PAGES_MAX_WIDTH","MULTILINK_PAGES_MAX_WIDTH","ANALYTICS_PAGE_MAX_WIDTH","ACCOUNT_PAGE_MAX_WIDTH","PRICING_PLANS_PAGE_MAX_WIDTH","TRENDS_PAGE_MAX_WIDTH","SHOPIFY_HELP_PAGE_MAX_WIDTH","CREATE_INFLUENCER_PAGE_MAX_WIDTH","PREVIEW_SHORT_PAGE_MAX_WIDTH","CREATE_NEW_PASSWORD_PAGE_MAX_WIDTH","USER_PASSWORD_MIN_LENGTH","INFLUENCER_PREVIEW_DIALOG_MAX_WIDTH","NO_AUTH_PAGES","PADDED_PAGES","UNLIMITED_WIDTH_PAGES","ACCOUNT_PAGE_SHOP_SHIPPING_AND_RETURNS_INPUT_NAME","ACCOUNT_PAGE_USERNAME_INPUT_NAME","ACCOUNT_PAGE_EMAIL_INPUT_NAME","ACCOUNT_PAGE_FACEBOOK_PIXEL_ID_INPUT_NAME","ACCOUNT_PAGE_GOOGLE_ANALYTICS_ID_INPUT_NAME","PRICING_PLAN_DATA","FREE","name","presentedName","color","price","pricingPeriod","ordinal","features","content","description","STARTER","BUSINESS","PRO","ENTERPRISE","subtitle","PRICING_PLANS_ENTERPRISE_PLAN_CONTACT_US_EMAIL","UNAVAILABLE_PLANS","CONTACT_US_PLANS","BOXED_MESSAGE_TYPES","ERROR","INFO","SHOPIFY_CONNECT_NAVIGATE_TO_ADMIN_PAGE_DELAY","PAYDIN_MENU_DEFAULT_WIDTH_PX","PAYDIN_MENU_OPENING_DIRECTIONS","LEFT","RIGHT","DASHBOARD_TOPBAR_USER_MENU_BORDER_RADIUS_PX","DASHBOARD_TOPBAR_USER_MENU_WIDTH_PX","PAYDIN_DRAWER_DIRECTION","TOP","BOTTOM","LINKS_PAGE_MOBILE_OPTIONS_DRAWER_TOP_BORDER_RADIUS_PX","CREATE_LINK_REDIRECT_TO_PAGE_DELAY","SEPERATE_GO_BACK_FOR_SAFARY_DELAY","LINKS_PAGE_MOBILE_OPTIONS_DRAWER_CLOSING_DELAY","MOBILE_DASHBOARD_TOPBAR_OPTIONS_DRAWER_CLOSING_DELAY","VIEW_MODES","PREVIEW","EDIT","CREATE","ADD_PRODUCTS_DIALOG_PRODUCTS_IN_COLUMNS","DASHBOARD_LAYOUT_PAGES_WITH_DASHBOARD_TOPBAR","LINK_ITEM_HEIGHT_PX","SHORT_ITEM_HEIGHT_PX","LINKS_PAGE_FETCH_NEXT_LINKS_THRESHOLD_ROW_COUNT","YEAR","ADMIN_PAGES","PROMOCODE_INPUT_MAX_LENGTH","SALES_AND_DISCOUNT_STRIP_SENTENCE_1_INPUT_MAX_LENGTH","SALES_AND_DISCOUNT_STRIP_SENTENCE_2_INPUT_MAX_LENGTH","PREORDER_TEXT_INPUT_MAX_LENGTH","ACCOUNT_VERIFICATION_PAGE_DISPLAY_VERIFY_RESULT_DELAY_MILLISECONDS","ACCOUNT_VERIFICATION_PAGE_PROCEED_DELAY_MILLISECONDS","EDIT_LINK_SECTION_LINK_DESCRIPTION_CHARACTER_LIMIT","IMAGE_BOX_DEFAULT_BORDER_RADIUS_PX","PAYDIN_IMAGE_CROPPER_ASPECT_RATIOS_MENU_WIDTH_PX","PAYDIN_IMAGE_CROP_DIALOG_WIDTH","PAYDIN_IMAGE_CROP_DIALOG_MAX_HEIGHT","PAYDIN_IMAGE_CROP_DIALOG_INFLUENCER_WIDTH","PAYDIN_IMAGE_CROP_DIALOG_INFLUENCER_MAX_HEIGHT","PAYDIN_IMAGE_CROPPER_OBJECT_FITS","CONTAIN","VERTICAL_COVER","HORIZONTAL_COVER","PAYDIN_IMAGE_CROPPER_ASPECT_RATIOS","text","ratio","PAYDIN_IMAGE_CROPPER_LOGO_ASPECT_RATIO","LINKS_PAGE_LINKS_FILTER_COUNT","SHORTS_PAGE_SHORTS_FILTER_COUNT","MULTILINKS_PAGE_MULTILINKS_FILTER_COUNT","SETTINGS_PAGES_BUTTON_LOADER_CIRCLE_COLOR","SHOPBOARD_PAGE_BUTTON_LOADER_CIRCLE_COLOR","DEFAULT_CURRENCY_CODE","APPROVAL_MESSAGE_HIDDING_DELAY_MILLISECONDS","APPEARANCE_PAGE_LINK_STYLE_CHECKOUT_BUTTON_SHAPE_KEYS","APPEARANCE_PAGE_LINK_STYLE_CHECKOUT_BUTTON_SHAPE_OPTIONS","key","image","style","backgroundColor","border","borderRadius","PRODUCT_IMAGE_STYLE_BORDER_RADIUS_OPTION_WIDTH_PX","PRODUCT_IMAGE_STYLE_BORDER_RADIUS_OPTION_HEIGHT_PX","APPEARNACE_PAGE_PRODUCT_IMAGE_STYLE_BORDER_RADIUS_KEYS","APPEARNACE_PAGE_PRODUCT_IMAGE_STYLE_BORDER_RADIUS_OPTIONS","src","ProductImageStyleDisplayImage","objectFit","styles","PRODUCT_IMAGE_STYLE_BORDER_RADIUS_OPTIONS_BORDER_WIDTH_PX","cursor","PRODUCT_IMAGE_STYLE_BORDER_RADIUS_SEMI_ROUNDED_OPTION_BORDER_RADIUS_PX","PRODUCT_IMAGE_STYLE_BORDER_RADIUS_ROUNDED_OPTION_BORDER_RADIUS_PX","APPEARANCE_PAGE_LINK_STYLE_CART_BUTTON_IMAGE_KEYS","APPEARANCE_PAGE_LINK_STYLE_CART_BUTTON_IMAGE_OPTIONS","RESIZE_IMAGE_MAX_WIDTH","RESIZE_IMAGE_MAX_HEIGHT","INFLUENCER_LINK_PAGINATION_COUNT","INFLUENCER_SHORT_PAGINATION_COUNT","INPUT_VALIDATION_INDICATIONS","NO_INDICATION","VALID","INVALID","INFLUENCER_PROMOCODE_LENGTH_LIMIT","EDIT_INFLUENCER_SECTION_VALIDATION_TIMEOUT_MILLISECONDS","EDIT_LINK_SECTION_OPTIONS_MENU_ITEM_HEIGHT_PX","EDIT_LINK_SECTION_OPTIONS_MENU_ITEM_MAX_COUNT","RUNNING_MESSAGES_STRIP_TEXT_SWAP_DELAY_MILLISECONDS","RUNNING_MESSAGES_STRIP_TEXT_ANIMATION_DURATION","RUNNING_MESSAGES_STRIP_TEXT_NO_ANIMATION_NAME","RUNNING_MESSAGES_STRIP_TEXT_ANIMATION_IN_NAME","RUNNING_MESSAGES_STRIP_TEXT_ANIMATION_OUT_NAME","NO_BOTTOM_PADDING_PAGES","ADD_PRODUCTS_DIALOG_PRODUCT_STATUS","ACTIVE","DRAFT","USERNAME_FIELD_PREFIX","EDIT_SHORT_PROMOCODE_INPUT_MAX_LENGTH","EDIT_SHORT_SECTION_URL_TEST_DELAY_MILLISECONDS","LINK_TYPES","LOOK","SHORT","SHOPBOARD","TAB_OPTIONS_ICON_SIZE","ANALYTICS_TAB_OPTIONS_WITH_SHOPBOARD","BiLink","LiaShoppingBagSolid","INFLUENCER_TAB_OPTIONS","INFLUENCER_TAB_OPTIONS_COMMISSION_ONLY","SHOPBOARD_TAB_OPTIONS","_Fragment","LAST_24_HOURS","LAST_7_DAYS","LAST_30_DAYS","LAST_90_DAYS","THIS_MONTH","PREVIOUS_MONTH","TODAY_DATE","ANALYTICS_PAGE_RETROACTIVE_DATA_REPORT_TIME_INTERVALS","timeRange","NOTIFY_STORE_CONNECT_FINISH_MESSAGE","ANALYTICS_STRIP_LIFETIME_REVENUE_DISPLAY_THRESHOLD","PAYDIN_CHART_TYPES","LINE","BAR","PIE","PAYDIN_CHART_CONTENT_PADDING_PX","PAYDIN_CHART_CONTENT_GAP_PX","PAYDIN_CHART_CONTENT_MOBILE_GAP_PX","UTM_FORM_INPUT_UTM_PARAM_ADDITIONS_OPTIONS_LIST","template","PAYDIN_CHART_GRAPH_HEIGHT_PX","PAYDIN_RADIO_BUTTON_GROUP_ALIGNMENTS","ROW","COLUMN","APPEARANCE_OPTION_PICKER_DEFAULT_BORDER_WIDTH_PX","APPEARANCE_OPTION_PICKER_PRODUCT_IMAGE_STYLE_BORDER_WIDTH_PX","APPEARANCE_OPTION_PICKER_PRODUCT_IMAGE_STYLE_SELECTED_BORDER_WIDTH_PX","PAYDIN_DIALOG_ON_BUTTON_CLICKED_CALLBACK_DELAY_MILLISECONDS","MOBILE_DASHBOARD_TOPBAR_RIGHT_SECTION_BUTTON_HEIGHT_PX","DATE_PICKER_DESKTOP_WIDTH_PX","DATE_PICKER_DESKTOP_BORDER_RADIUS_PX","DATE_PICKER_DESKTOP_BORDER_COLOR","ITEMS_VIEW_SECTION_MORE_ITEMS_LOADER_HEIGHT_PX","ITEM_DESIGN_PATTERNS","INSIDE","OUTSIDE","SECTION_TYPES","SINGLE","STRIP","GRID","PAYDIN_DRAWER_TRANSITION_DURATION","PAYDIN_DRAWER_TRANSITION_DURATION_WITH_BUFFER","PAYDIN_DIALOG_TRANSITION_DURATION","MULTI_SELECT_DIALOG_DESKTOP_HEIGHT_PX","MULTI_SELECT_DIALOG_DONE_BUTTON_STRIP_HEIGHT_PX","MULTI_SELECT_DIALOG_SELECTION_LIMIT_REACHED_ALERT_HIDE_DELAY_MILLISECONDS","ADD_PRODUCTS_DIALOG_RESET_FILTER_TRIGGER_DELAY_MILLISECONDS","ADD_PRODUCTS_DIALOG_DESKTOP_COLUMN_COUNT","ADD_PRODUCTS_DIALOG_MOBILE_COLUMN_COUNT","ADD_COLLECTIONS_DIALOG_DESKTOP_COLUMN_COUNT","ADD_COLLECTIONS_DIALOG_MOBILE_COLUMN_COUNT","COLOR_SELECT_CIRCLE_DIMENSIONS","COLOR_SELECT_DEFAULT_DIMENSIONS","OPTION_TYPES","COLOR","TEXT","SHORT_URL_SELECTION_TYPE","CUSTOM","PRODUCT","COLLECTION","ORGANIC","MULTILINK_SUBLINK_SELECTION_TYPE","MULTILINK_SUBLINK_TYPES","MULTILINK_SUBLINK_DEVICE_OPTIONS_VALUE_ELEMENT","element","MULTILINK_SUBLINK_DEVICE_OPTIONS","ALL","MOBILE","PC","SHORT_URL_SELECTION_TYPE_ELEMENT_IMAGE_BORDER_RADIUS","SHORT_URL_SELECTION_TYPE_SELECTED_ELEMENT_BORDER_WIDTH","SHORT_INFO_URL_NO_CUSTOM_IMAGE_DIMENS_PX","INFLUENCER_INSIGHTS_AOV_HEIGHT","INFLUENCER_INSIGHTS_CR_HEIGHT","INFLUENCER_INSIGHTS_SALES_BREAKDOWN_PIE_WIDTH","INFLUENCER_INSIGHTS_SALES_BREAKDOWN_CHART_WIDTH","INFLUENCER_INSIGHTS_SALES_BREAKDOWN_CHART_HEIGHT","INFLUENCER_INSIGHTS_SALES_BREAKDOWN_CONTAINER_WIDTH","INFLUENCER_INSIGHTS_SALES_BREAKDOWN_CONTAINER_INFLUNECER_WIDTH","INFLUENCER_INSIGHTS_AOV_BREAKDOWN_CONTAINER_WIDTH","INFLUENCER_INSIGHTS_CR_BREAKDOWN_CONTAINER_WIDTH","INFLUENCER_INSIGHTS_SALES_BREAKDOWN_CONTAINER_HEIGHT","INFLUENCER_INSIGHTS_SINGLE_VALUE_CONTAINER_WIDTH","INFLUENCER_INSIGHTS_COMMISSION_VALUE_CONTAINER_WIDTH","INFLUENCER_INSIGHTS_COMMISSION_VALUE_CONTAINER_NOT_ADMIN_WIDTH","INFLUENCER_INSIGHTS_SINGLE_VALUE_CONTAINER_HEIGHT","INFLUENCER_INSIGHTS_LINKS_COLOR","INFLUENCER_INSIGHTS_SHORTS_COLOR","INFLUENCER_INSIGHTS_ORGANIC_COLOR","HOME_PAGE_RECENT_ACTIVITIES_TABS","INSTANTS","SHORTS","INFLUENCERS","HOME_PAGE_TASKS","ADD_LOGO","CUSTOMIZE_THEME","ADD_ANALYTICS","ADD_SHIPPING_AND_RETURN","ADD_UTM","PAYDIN_ACCORDION_HEADER_GAP_PX","HOME_PAGE_GET_LINKS_API_COUNT","HOME_PAGE_DESKTOP_GET_SHORTS_API_COUNT","HOME_PAGE_MOBILE_GET_SHORTS_API_COUNT","HOME_PAGE_DESKTOP_GET_INFLUENCERS_API_COUNT","APPEARANCE_PAGE_LOGO_SECTION_ID","APPEARANCE_PAGE_THEME_SECTION_ID","APPEARANCE_PAGE_PROMOCODE_SETTINGS_SECTION_ID","SETTINGS_PAGE_UTM_SECTION_ID","SETTINGS_PAGE_SHIPPING_AND_RETURN_SECTION_ID","SETTINGS_PAGE_SI_TAGGING_SECTION_ID","SETTINGS_PAGE_ANALYTICS_SECTION_ID","SCROLL_TO_ID_DELAY_MILLISECONDS","DASHBOARD_TOPBAR_HEIGHT_PX","MOBILE_PAGE_VIEW_TOPBAR_HEIGHT_PX","PRODUCT_TABLE_HEADERS_IDS","IMAGE","TITLE","VIEW","ADD","BUY","RANK","ORDERS_TABLE_HEADERS_IDS","DATE","SOURCE","INFLUENCER","TOTAL_PRODUCTS_COUNT","TOTAL_PRICE","STATUS","ACTIONS","LINK_SOURCE_TITLE","ORDERS_TABLE_STATUS_OPTIONS","PAID","REFUNDED","PARTIALLY_REFUNDED","MULTILINK_EXPERIENCES_TABLE_HEADERS_IDS","NAME","TYPE","DEVICE","TRAFFIC","CLICKS","SALES","REVENUE","CR","CART_AVERAGE","PRODUCTS_TABLE_ROW_HEIGHT_PX","MOBILE_PRODUCTS_TABLE_ROW_HEIGHT_PX","ORDERS_TABLE_ROW_HEIGHT_PX","MULTILINK_EXPERIENCES_TABLE_ROW_HEIGHT_PX","STORE_ORDERS_TABLE_ROW_HEIGHT_PX","ORDERS_TABLE_PRODUCT_ROW_HEIGHT_PX","ORDERS_TABLE_PRODUCT_LIST_GAP","MOBILE_ORDERS_TABLE_ROW_HEIGHT_PX","MOBILE_STORE_ORDERS_TABLE_ROW_HEIGHT_PX","MOBILE_MULTILINK_EXPERIENCES_TABLE_ROW_HEIGHT_PX","PRODUCTS_TABLE_ROW_HEIGHT","ORDERS_TABLE_ROW_HEIGHT","PRODUCTS_TABLE_ROWS_PER_PAGE","ORDERS_TABLE_ROWS_PER_PAGE","STORE_ORDERS_TABLE_ROWS_PER_PAGE","STORE_ORDERS_TABLE_COUNT","DATE_PICKER_DATE_INTERVAL_OPTION_WIDTH_PX","OPTION_VALUE_MAPPER_OPTION_TYPES","OPTION_VALUE_MAPPER_PAGE_COUNT","OPTION_VALUE_MAPPER_ROW_HEIGHT","OPTION_VALUE_MAPPER_ROW_GAP","DASHBOARD_SIDEBAR_WIDTH_PX","DASHBOARD_SIDEBAR_MINIMIZED_WIDTH_PX","DASHBOARD_SIDEBAR_USER_MENU_WIDTH","DASHBOARD_SIDEBAR_USER_MENU_BORDER_RADIUS_PX","PAYDI_MENU_TRANSITION_DURATION_MILLISECONDS","CONTENT_TYPES","LINK","MULTILINK","ALERT_MESSAGE_TYPES","SUCCESS","WARNING","SHOPBOARD_SOCIALS","INSTAGRAM","TIKTOK","PINTEREST","SHOPBOARD_POST_LIST_COUNT","NUMBER_TYPES","PERCENTAGE","NORMAL","PRICE","LINK_PRODUCT_SELECT_MAX_LIMIT","FREE_TRIAL_STRIP_HEIGHT","INFLUENCER_PREVIEW_LINKS_PAGINATION_OFFSET","INFLUENCER_PREVIEW_SHORTS_PAGINATION_OFFSET","TRENDS_PAGE_PRODUCT_IMAGE_HEIGHT_PX","TRENDS_PAGE_PRODUCT_IMAGE_WIDTH_PX","IMAGE_LOADING_IMAGE_SRV_TEXT","SHOPEAKS_AI_TAGGING_SENSITIVITY_OPTIONS","OFF","title","HIGH","MEDIUM","LOW","REQUEST_HEADER_AUTH_KEY","AUTH_API_URL","REGISTER_CONNECT_STORE_API_ROUTE","LOGIN_CONNECT_STORE_API_ROUTE","LOGIN_API_URL","REGISTER_API_URL","PASSWORD_RESET_REQUEST_API_ROUTE","PASSWORD_RESET_REQUEST_API_URL","PASSWORD_RESET_API_URL","USER_RESET_API_URL","LINKS_API_ROUTE","MULTILINKS_API_ROUTE","EDIT_LINK_API_URL_SUFFIX","DELETE_LINK_API_URL_SUFFIX","CREATE_LINK_API_URL_SUFFIX","UPLOAD_FILE_API_URL","PRODUCT_SEARCH_API_URL","PRODUCT_OPTIONS_IMAGE_API_URL","PRODUCT_TOP_PERFORMING_API_URL","PRODUCT_TOP_COMBINATIONS_API_URL","PRODUCT_COMPLEMENTARY_API_URL","PRODUCT_SEARCH_IN_MEDIA_API_URL","AUTH_STORE_CONNECT_API_URL_PREFIX","AUTH_STORE_CONNECT_API_URL","STORE_DISCONNECT_API_URL","UPGRADE_PRICING_PLAN_API_URL","CANCEL_PRICING_PLAN_API_URL","LINK_ANALYTICS_API_URL_PREFIX","OVERVIEW_API_URL_SUFFIX","VALIDATE_USERNAME_API_URL","VALIDATE_EMAIL_API_URL","STORE_SETTINGS_API_URL_PREFIX","STORE_SETTINGS_API_URL_SUFFIX","STORE_APPEARANCE_SETTINGS_API_URL_SUFFIX","STORE_ORDERS_API_URL_SUFFIX","STORE_ORDER_DETAILS_API_URL_SUFFIX","APPEARANCE_SETTINGS_OPTIONS_API_URL_SUFFIX","STORE_SETTINGS_PRODUCT_SYNC_API_URL_SUFFIX","STORE_SETTINGS_THEME_UPDATE_API_URL_SUFFIX","ARCHIVE_LINKS_API_URL_PREFIX","ACCOUNT_VERIFICATION_API_URL","REGISTRATION_REQUEST_API_URL","INSIGHTS_REQUEST_API_URL","ANALYTICS_API_SUFFIX","ANALYTICS_REPORT_API_SUFFIX","VISIBLE_API_SUFFIX","TAG_PRODUCTS_API_SUFFIX","POSTS_API_SUFFIX","SYNC_POSTS_API_SUFFIX","CONNECT_API_SUFFIX","DISCONNECT_API_SUFFIX","INFLUENCERS_ACTIVATE_INFLUENCER_API_SUFFIX","INFLUENCERS_CREATE_INFLUENCER_API_SUFFIX","INFLUENCERS_EDIT_INFLUENCER_API_SUFFIX","INFLUENCERS_LOGIN_API_LOGIN_ROUTE","INFLUENCERS_VALIDATE_INFLUENCER_USERNAME_API_SUFFIX","INFLUENCERS_PASSWORD_RESET_API_ROUTE","AUTH_API_ROUTE","SEARCH_ROUTE","AUTH_TOKEN_KEY_LOCAL_STORAGE","LocalSharedPreferences","constructor","this","archive","keys","Object","localStorage","forEach","getItem","get_key","hasOwnProperty","initialValue","item","LocalStorageGetItem","set_key","setItem","error","console","LocalStorageSetItem","remove_key","removeItem","LocalStorageRemoveItem","async","parseResponse","res","data","ok","logger","log","status","Error","json","simple_request","url","options","timeout","isFile","shouldParseResponse","headers","query","method","body","extraOpts","_objectWithoutProperties","_excluded","reqOptions","JSON","stringify","queryString","URLSearchParams","toString","Promise","resolve","reject","race","fetch","_","setTimeout","fetchWithTimeout","then","catch","request","_excluded2","request_post_file","auth_token","formData","_excluded3","request_auth","environment","terminal_name","response_language","base_url","frontend_url","dashboard_url","app_proxy_path","max_logs","logs","count","is_committing","is_comminting_needed","debug","message","_len","optionalParams","Array","_key","full_message","_commit","total_logs","start","arr1","splice","arr2","orderd_logs","store_id","cart_id","push","finally","Stack","storage","pop","isEmpty","historyContext","React","createContext","useHistoryContext","useContext","HistoryProvider","Component","super","onHistoryEvent","e","history","action","popAndPerform","stack","listen","backHandler","popBackHandler","step","i","goBackStepsNoPerform","replaceBackHandler","go","goBack","onBackClicked","replace","addBackHandler","location","pathname","search","render","Provider","withRouter","RouteWrapper","_ref","component","layout","Layout","redirect","rest","Route","Redirect","to","heigth","Loader","className","PopupDialog","isOpen","onDialogClose","childClassName","hasNoWidthLimit","hasNoHeightLimit","maxWidth","maxHeight","minHeight","backdropColor","borderRadiusPx","margin","dialogHeight","setDialogHeight","useState","dialogRef","useRef","useEffect","_dialogRef$current","dialogContentElement","current","querySelector","clientHeight","getDialogHeight","dialogContentStyles","dialogStyles","Dialog","ref","open","onClose","fullScreen","sx","PaperProps","disableScrollLock","transitionDuration","EMAIL_PATTERN_REGEX","HEBREW_CHARACTERS_REGEX","URL_REGEX","NUMBERS_WITH_SYMBOLS_REGEX","PHONE_NUMBER_REGEX","INFLUENCER_USERNAME_REGEX","getQueryVariable","variable","defaultValue","vars","substring","split","pair","copyToClipboard","navigator","clipboard","writeText","isInputValueValid","test","scrollToId","href","lastIndexOf","document","getElementById","scrollTo","top","offsetTop","behavior","LoaderButton","buttonText","isLoading","renderAsButton","isDisabled","loaderCircleColor","loaderArchColor","onClick","loaderDimensPx","setLoaderDimensPx","buttonHeight","setButtonHeight","buttonRef","onSubmitButtonClick","preventDefault","renderButtonContent","borderColor","borderTopColor","animationDuration","visibility","computedStyles","getComputedStyle","parseFloat","paddingTop","paddingBottom","getElementHeight","type","disabled","PAYDIN_DIALOG_BUTTON_TYPES","PRIMARY","SECONDARY","UNDERLINED","PaydinDialog","isDialogOpen","titleFontSizePx","messageFontSizePx","isCloseButtonShown","isCloseOnTouchOutside","handleDialogClose","closeButtonHandler","leftButtonText","rightButtonText","onLeftButtonClick","onRightButtonClick","isLeftButtonWithLoader","isRightButtonWithLoader","closeOnLeftClick","closeOnRightClick","leftButtonType","rightButtonType","hasButtons","dialogLayout","paddingPx","onDialogClosedRightButton","onDialogClosedLeftButton","t","useTranslation","isLeftButtonOperationPerforming","setIsLeftButtonOperationPerforming","isRightButtonOperationPerforming","setIsRightButtonOperationPerforming","closeButtonStyle","left","right","titleStyle","fontSize","messageStyle","closeDialog","dir","padding","AiOutlineClose","ImageDialog","overflow","GrClose","ImageBox","enlargeImageOnClick","IMAGE_EXTENSIONS","VIDEO_EXTENSIONS","imageClassName","alt","showImageLoader","showGreyLoaderBackground","showGreyImageBackground","showImageBorderRadius","showImageMask","showBorder","isImageFitCover","containerHeightPx","containerWidthPx","loaderWidth","loaderHeight","loaderBorderWidth","isWidthPercentage","isHeightPercentage","onImageClickCallback","roundImage","allowVideo","isImageLoading","setIsImageLoading","imageDialogState","setImageDialogState","prev","imageUrl","imageRef","containerStyles","onImageLoad","onImageError","includes","complete","setAttribute","borderWidth","extension","isVideo","display","autoPlay","muted","playsInline","loop","onLoad","onError","GetLinksAPI","businessId","searchQuery","skip","linkType","response","GetLinkDetailsAPI","linkId","GetMultilinkDetailsAPI","multilinkId","UpdateLinkDetailsAPI","images","inventoryIds","selectedOptions","collectionsIds","promocode","linkDescription","shoppingRedirectURL","influencerUsername","utmParams","inventory_ids","selected_options","collection_ids","business_id","shopping_redirect_url","influencer_username","utm_params","utm_source","UTMSource","utm_medium","UTMMedium","utm_campaign","UTMCampaign","utm_term","UTMTerm","utm_content","UTMContent","link_type","CreateLinkDetailsAPI","shoppingURL","_utmParams$UTMSource2","_utmParams$UTMMedium2","_utmParams$UTMCampaig2","_utmParams$UTMTerm2","_utmParams$UTMContent2","DeleteLinkAPI","DeleteMultilinkAPI","GetBusinessAnalytics","GetInfluencerLinks","ValidateUsername","username","baseUrl","GetInfluencers","GetInfluencer","GetInfluencersAnalytics","ApprovalMessage","isUp","isMessageShown","closeMessage","userDetails","useUserDetailsContext","sidebarExpanded","PaydinDrawer","onOpen","direction","topRightBorderRadiusPx","topLeftBorderRadiusPx","bottomRightBorderRadiusPx","bottomLeftBorderRadiusPx","hasPadding","paddingTopPx","paddingRightPx","paddingLeftPx","paddingBottomPx","disableBackdrop","zIndex","SwipeableDrawer","borderTopRightRadius","borderTopLeftRadius","borderBottomRightRadius","borderBottomLeftRadius","opacity","anchor","swipeAreaWidth","extractLinkData","link","_link$description","_link$images","_link$link_default_im","_link$checkouts","_link$shopping_redire","_link$url_type","_link$link_type","link_id","createdAt","created_at","defaultImage","link_default_image","currency","revenue","views","visits","checkouts","influencerImage","shoppingRedirectUrl","urlType","url_type","extractMultilinkPreviewData","multilink","_multilink$title2","multilink_id","splitterType","splitter_type","linksOptions","links_options","extractProductData","product","_product$options","_product$inventory_id","_product$title","_product$handle","_product$image$src","_product$image","_product$product_stat","_product$url","_product$selling_scor","_product$variant_avai","sort","optionA","optionB","position","inventory_id","handle","productStatus","product_status","hasNoQuantity","total_quantity","sellingScore","selling_score","variantAvailabilityRatio","variant_availability_ratio","extractCollectionData","collection","_collection$collectio","_collection$title","_collection$image","_collection$products_","_collection$descripti","_collection$url","collection_id","productsCount","products_count","extractInfluencerData","_data$username","_data$profile_image_u","_data$email","_data$promocode","_data$password","_data$is_active","profile_image_url","email","commissionRate","commission","password","isActive","is_active","extractBasicInfluencerAnalytics","influencer","_influencer$username","_influencer$total_cli","_influencer$total_sal","_influencer$total_rev","_influencer$currency","totalClicks","total_clicks","totalSales","total_sales","totalRevenue","total_revenue","extractExtendedInfluencerAnalytics","_influencer$clicks_lo","_influencer$clicks_sh","_influencer$clicks_lo2","_influencer$clicks_sh2","_influencer$commissio","_influencer$currency2","_influencer$influence","_influencer$revenue_e","_influencer$revenue_l","_influencer$revenue_s","_influencer$sales_ext","_influencer$sales_loo","_influencer$sales_sho","_influencer$sales_ext2","_influencer$sales_loo2","_influencer$sales_sho2","_influencer$total_sal2","_influencer$total_ref","_influencer$influence2","clicks","clicks_looks","clicks_shorts","linksClicks","shortsClicks","revenueOrganic","revenue_external","revenueLinks","revenue_looks","revenueShorts","revenue_shorts","salesOrganic","sales_external","salesLinks","sales_looks","salesShorts","sales_shorts","totalRefunded","total_refunded","influencerAttributedRevenue","influencer_attributed_revenue","extractOrderProduct","orderDetailsProduct","_orderDetailsProduct$","_orderDetailsProduct$2","_orderDetailsProduct$3","_orderDetailsProduct$4","_orderDetailsProduct$5","_orderDetailsProduct$6","_orderDetailsProduct$7","small","quantity","variantTitle","variant_title","extractShopboardSocialMediaPost","post","_post$selected_option","_post$post_id","_post$image_url","_post$visible","post_id","image_url","products","map","autoTaggedProducts","auto_tagged_products","isVisible","visible","selectOptions","cloneObject","obj","parse","FreeTrialStrip","daysLeft","isStripShown","setIsStripShown","dialogState","setDialogState","rightButtonClickHandler","leftButtonClickHandler","CiTimer","fontWeight","isAdmin","startsWith","LuCrown","SpeechBubbleLightningBoltImage","focusable","stroke","FreeModeDialog","replace_text_to_max_breach","goToPricingPlans","IoIosPeople","BiCategory","Trans","i18nKey","components","mark","ProductSearchAPI","q","filters","next","fetchProductsInfo","filterQuery","active","draft","outOfStock","searchInTags","getFiltersQuery","info","getSearchProductsInfoQuery","verifyStore","auth","userDetailsContext","generalDataContext","AuthContext","fetchLinksContext","isReadyContext","isUserLoadedContext","generalDataInitialState","pageMaxWidthPx","userDetailsInsitialState","influencerImageUrl","brand","businessName","businessLogo","businessCurrency","subscriptionPlan","freeTrialDaysLeft","domain","shopUrl","isEditing","recentActivitiesData","links","shorts","influencers","items","analytics","linksData","linkAnalytics","theme","isInitial","cartButtonImage","checkoutButtonShape","checkoutButtonBackgroundColor","checkoutButtonBorderColor","checkoutButtonFontColor","promocodeButtonShape","promocodeButtonBackgroundColor","promocodeButtonBorderColor","promocodeButtonFontColor","isPromocodeShadowShown","isInfluencerShown","productImageStyle","imageBorderRadius","find","option","salesAndDiscountStrip","isSalesAndDiscountStripShown","salesAndDiscountStripBackgroundColor","salesAndDiscountStripFontColor","salesAndDiscountStripSentence1","salesAndDiscountStripSentence2","inventorySettings","isPreorderTextShown","preorderText","permissions","commissionEnabled","clicksEnabled","revenueEnabled","salesEnabled","isActiveInfluencer","isVerified","isAuthenticated","linksLifetimeAnalytics","shortsLifetimeAnalytics","settings","shippingAndReturnsUrl","facebookPixelId","googleAnalyticsId","autoSwapEnabled","productVisionConfigurations","isEnabled","productCategory","sensitivity","shopboard","synced","socialMedias","connected","numberOfPosts","posts","sales","cr","trends","topPerformingProducts","topProductsCombinations","combinations","complementaryProducts","useAuthContext","useFetchLinksContext","useIsUserLoadedContext","useGeneralDataContext","UserProvider","_freeTrialDialogState","_freeTrialDialogState2","onUserLoaded","onReady","setUserDetails","generalData","setGeneralData","productsOptionsMap","setProductsOptionsMap","isReady","setIsReady","isUserLoaded","setIsUserLoaded","approvalMessageState","setApprovalMessageState","optionsDrawerState","setOptionsDrawerState","closeDrawer","finishedUpdatingObject","setFinishedUpdatingObject","finishedCreatingObject","setFinishedCreatingObject","objectToSave","setObjectToSave","freeTrialDialogState","setFreeTrialDialogState","closeFreeTrialDialog","getOptionType","optionName","_productsOptionsMap$o","isFreeUser","toUpperCase","isFreeUserAndTrialEnded","isBusinessFeatureEnabled","getThemeValue","valueOptions","_valueOptions$value$k","_valueOptions$find$ke","getThemeObject","userData","_userData$brand","_userData$brand2","_userData$brand2$them","_userData$brand3","_userData$brand3$them","_userData$brand$theme","_userData$brand4","_userData$brand4$them","_userData$brand$theme2","_userData$brand5","_userData$brand5$them","_userData$brand$theme3","_userData$brand6","_userData$brand6$them","_userData$brand7","_userData$brand7$them","_userData$brand$theme4","_userData$brand8","_userData$brand8$them","_userData$brand$theme5","_userData$brand9","_userData$brand9$them","_userData$brand$theme6","_userData$brand10","_userData$brand10$the","_userData$brand$theme7","_userData$brand11","_userData$brand11$the","_userData$brand$theme8","_userData$brand12","_userData$brand12$the","_userData$brand13","_userData$brand13$the","_userData$brand$theme9","_userData$brand14","_userData$brand14$the","_userData$brand$theme10","_userData$brand15","_userData$brand15$the","_userData$brand$theme11","_userData$brand16","_userData$brand16$the","_userData$brand17","_userData$brand17$the","_userData$brand17$the2","_userData$brand18","_userData$brand18$the","_userData$brand19","_userData$brand19$the","_userData$brand19$the2","_userData$brand20","_userData$brand20$the","_userData$brand$theme12","_userData$brand21","_userData$brand21$the","_userData$brand$theme13","_userData$brand22","_userData$brand22$the","cart_button_icon","checkout_button_shape","checkout_button_background_color","checkout_button_border_color","checkout_button_font_color","promo_code_display_border_radius","promo_code_display_background_color","promo_code_display_border_color","promo_code_display_font_color","is_promo_code_display_shadow_shown","is_influencer_display_shown","image_border_radius","is_shipping_and_sales_strip_shown","shipping_and_sales_strip_background_color","shipping_and_sales_strip_font_color","shipping_and_sales_strip_sentences","is_preorder_text_shown","preorder_text","getPermissionsObject","_userData$user","_userData$user$permis","_userData$user2","_userData$user2$permi","_userData$user$permis2","_userData$user3","_userData$user3$permi","_userData$user$permis3","_userData$user4","_userData$user4$permi","_userData$user$permis4","_userData$user5","_userData$user5$permi","_userData$user$permis5","_userData$user6","_userData$user6$permi","_userData$user$permis6","_userData$user7","_userData$user7$permi","_userData$user$permis7","_userData$user8","_userData$user8$permi","user","analytics_commission_enabled","analytics_clicks_enabled","analytics_revenue_enabled","analytics_sales_enabled","crEnabled","analytics_cr_enabled","aovEnabled","analytics_aov_enabled","allow_creating_and_editing_links","getUtmParamsObject","_userData$brand23","_userData$brand$utm_p","_userData$brand24","_userData$brand24$utm","_userData$brand$utm_p2","_userData$brand25","_userData$brand25$utm","_userData$brand$utm_p3","_userData$brand26","_userData$brand26$utm","_userData$brand$utm_p4","_userData$brand27","_userData$brand27$utm","_userData$brand$utm_p5","_userData$brand28","_userData$brand28$utm","getSettingsObject","_userData$brand$shipp","_userData$brand29","_userData$brand$faceb","_userData$brand30","_userData$brand$googl","_userData$brand31","_userData$brand$auto_","_userData$brand32","shipping_and_return_url","facebook_pixel_id","google_analytics_id","auto_swap_enabled","getProductVisionConfigurationsObject","_userData$brand$produ","_userData$brand33","_userData$brand33$pro","_userData$brand$produ2","_userData$brand34","_userData$brand34$pro","_userData$brand$produ3","_userData$brand35","_userData$brand35$pro","product_vision_configurations","is_enabled","product_category","setUserProperties","_userData$user$name","_userData$user9","_userData$user$admin_","_userData$user10","_userData$user$userna","_userData$user11","_userData$user$profil","_userData$user12","_userData$user$email","_userData$user13","_userData$brand36","_userData$brand$busin","_userData$brand37","_userData$brand$busin2","_userData$brand38","_userData$brand$logo_","_userData$brand39","_userData$brand$curre","_userData$brand40","_userData$brand$subsc","_userData$brand41","_userData$brand$free_","_userData$brand42","_userData$brand$domai","_userData$brand43","_userData$is_admin","_userData$user$promoc","_userData$user14","admin_username","business_name","logo_url","subscription_plan","free_trial_days_left","is_admin","setUnauthenticatedUserProperties","verify","onSuccess","onFailure","token","getFrontendUrl","onDrawerClosed","URL","searchParams","delete","pushState","deleteQueryFromUrl","shouldVerify","setRecentLinks","setRecentShorts","setRecentInfluencers","isFreeUserAndTrialPastLastWeek","maxInfleuncersAllowed","Infinity","getShopboardUrl","hasShopifyStore","beginEditing","endEditing","setSidebarExpanded","expanded","shopboardConnect","social","connectShopboardSocialMedia","_response$redirect_ur","redirect_url","shopboardAuthenticate","code","authenticateShopboardSocialMedia","shopboardDisconnect","disconnectShopboardSocialMedia","isShopboardConnected","_userDetails$shopboar7","_userDetails$shopboar8","_userDetails$shopboar","_userDetails$shopboar2","_userDetails$shopboar3","_userDetails$shopboar4","_userDetails$shopboar5","_userDetails$shopboar6","checkShopboardStatus","_status$shopboard_url","_status$social_medias","_status$social_medias2","_status$social_medias3","_status$social_medias4","_status$social_medias5","_status$social_medias6","_status$social_medias7","_status$social_medias8","_status$social_medias9","_status$social_medias10","_status$social_medias11","_status$social_medias12","_status$social_medias13","_status$social_medias14","_status$social_medias15","_status$social_medias16","_status$social_medias17","_status$social_medias18","_status$social_medias19","_status$social_medias20","_status$social_medias21","_status$social_medias22","_status$social_medias23","_status$social_medias24","_status$social_medias25","_status$social_medias26","_status$social_medias27","shopboard_url","social_medias","Instagram","number_of_posts","Tiktok","Pinterest","isShopboardConnectedSyncing","_userDetails$shopboar15","_userDetails$shopboar16","_userDetails$shopboar9","_userDetails$shopboar10","_userDetails$shopboar11","_userDetails$shopboar12","_userDetails$shopboar13","_userDetails$shopboar14","isShopboardConnectedSynced","_userDetails$shopboar23","_userDetails$shopboar24","_userDetails$shopboar17","_userDetails$shopboar18","_userDetails$shopboar19","_userDetails$shopboar20","_userDetails$shopboar21","_userDetails$shopboar22","fetchShopboardLifeTimeAnalytics","getShopboardAnalytics","_response$analytics$v","_response$analytics","_response$analytics$c","_response$analytics2","_response$analytics$r","_response$analytics3","_response$analytics4","_response$analytics5","_response$analytics$c2","_response$analytics6","_response$analytics7","_response$analytics$r2","_response$analytics8","_response$analytics$d","_response$analytics9","_response$currency","requested_checkouts","fetchShopboardPosts","shouldOverridePostList","getShopboardPosts","_prev$shopboard$socia","hasSocialMediaPosts","_userDetails$shopboar25","_userDetails$shopboar26","togglePostVisibility","postId","_userDetails$shopboar27","_userDetails$shopboar28","is_visible","toggleShopboardPostVisibility","updatedPosts","updatedPost","updatedPostIndex","findIndex","tagPostProducts","_products$reduce","_userDetails$shopboar29","_userDetails$shopboar30","productIds","selectedProductsOptions","reduce","acc","selectedProduct","product_ids","tagShopboardPostProducts","fetchTopPerformingProducts","fetchTopProductsCombinations","_response$top_combina","_response$products","top_combinations","fetchComplementaryProducts","inventoryId","_userDetails$trends","GetComplementaryProductsAPI","_product$combination_","combinationScore","combination_score","_prev$trends","login","isInfluencerLogin","onLoggedIn","merchantUsername","influencerPassword","influencerLoginAPI","LoginAPI","register","RegisterAPI","logout","fetchLinks","shouldUpdateContext","onFinish","lastKey","fetchMultilinks","GetMultilinksAPI","multilinksData","showApprovalMessage","openDrawer","openFreeTrialDialog","fetchProductsOptionsMap","getCopy","updateProductsOptionsMap","newProducsMap","getOptionValue","optionValueName","_productsOptionsMap$o2","_productsOptionsMap$o3","shouldReturnTextValue","values","optionValueObject","isOptionColor","hex_value","_optionValueObject$te","noWhiteSpaceColor","text_value","toLowerCase","replaceAll","stc","BoxedMessage","IoWarningOutline","BiInfoCircle","ShopifyConnectStore","isConnectingStore","isShopifyConnectionFail","connectShopifyStoreFunction","ShopifyConnect","isPageLoading","setIsPageLoading","isBoxedMessageShown","setIsBoxedMessageShown","boxedMessage","setBoxedMessage","notifyProcessFinished","opener","postMessage","IoIosArrowForward","shopUrlPrefix","PaydinMenu","anchorElement","widthPx","Menu","anchorEl","elevation","anchorOrigin","vertical","horizontal","transformOrigin","boxShadow","_option$className","MobileSimulatorTopBarMenuImage","strokeWidth","xmlns","MobileSimulatorProduct","MobileLinkPreviewSimulator","hasBorder","isFullScreen","MultiLineText","lines","treatAsHtml","divRef","innerHTML","innerText","WebkitLineClamp","ColorSelect","_Object$keys","_Object$keys2","selectedColor","setSelectedColor","colorCounter","colorSelectDisplayedColorsCount","colors","setColors","setAnchorEl","Boolean","onColorClick","isColorSelected","renderColorCircle","BsCheck","tempColors","slice","event","currentTarget","handleMoreClose","MenuListProps","slotProps","paper","minWidth","MenuItem","Typography","variant","noWrap","AddProductsDialogProduct","elementRef","isItemSelected","onItemClick","allowColorOptionSelect","colorOption","setColorOption","setColorCounter","currentImageUrl","setCurrentImageUrl","_option$values","_option$values2","tempColorCounter","updatedItem","product_options","_image$src","newImagUrl","colorCircleDimensionsPx","onMoreColorsButtonClick","PaydinCheckbox","checked","setChecked","label","labelClassName","Checkbox","BackButton","disableHistoryPopOnClick","MdArrowBack","ContentDialogTopbar","onBackButtonClick","rightElement","leftElement","showLeftElement","oneWord","useOnScreen","isIntersecting","setIntersecting","observer","useMemo","IntersectionObserver","entry","observe","disconnect","MultiSelectDialog","selectedItems","setSelectedItems","itemName","viewItemComponent","ViewItemComponent","selectMaxLimit","selectMinLimit","filterComponent","FilterComponent","columnsCount","dataGenerator","dataExtractor","rawItem","filtersChanged","searchResultFilter","onFinishProductsSelection","onCancel","hasContentTopbar","resetSelectedOnFinish","resetCacheOnClose","tempSelectedItems","setTempSelectedItems","itemsResult","setItemsResult","cachedItemsResult","setCachedItemsResult","setSearchQuery","hasSearchFailed","setHasSearchFailed","hasMoreItems","setHasMoreItems","allItemsSelected","setAllItemsSelected","isSearchingItems","setIsSearchingItems","isSearchingMoreItems","setIsSearchingMoreItems","returnedRequestParams","setReturnedRequestParams","currentRequestId","setCurrentRequestId","shouldShowNoItems","setShouldShowNoItems","isLimitReachedAlertShown","setIsLimitReachedAlertShown","searchBoxInputRef","itemsListRef","productsDetailsRef","productsTopBarRef","filtersRef","productsStatusBarRef","typingTimeoutRef","isSelectionChangedRef","paginationTriggeringElementRef","isOnScreen","itemsHeight","_productsTopBarRef$cu","_filtersRef$current","_productsStatusBarRef","itemsListHeightPx","_productsTopBarRef$cu2","_filtersRef$current2","_productsStatusBarRef2","calculateItemsContainerHeight","itemsListColumnWidth","setTemporaryItems","clearTypingTimeout","clearTimeout","calculateItemsArrayUnion","array1","array2","unionArray","currentProduct","filter","resetItemsListScroll","delay","_itemsListRef$current2","_itemsListRef$current","itemSearch","onResultsReceived","result","currentItem","itemToRemove","currentIndex","hasSelectionMaxLimit","addItem","_searchBoxInputRef$cu","blur","handleScroll","filterRef","onChange","target","placeholder","CiSearch","IoCloseOutline","selected","limit","gridTemplateColumns","index","inset","FloatingElement","isShown","hide","AddProductsFilters","setFilters","onFilterChange","isFiltersMenuShown","setIsFiltersMenuShown","resetFilters","setActiveSearchFilter","setDraftSearchFilter","setOutOfStockSearchFilter","setSearchInTagsSearchFilter","hasNoFilterApplied","noFilterApplied","filterStatus","getFilterStatus","MdKeyboardArrowDown","AddProductsDialog","selectedProducts","setSelectedProducts","didFiltersChange","setDidFiltersChange","searchFilters","setSearchFilters","nextKey","setNextKey","triggerFilterChange","_ref2","PaydinSlider","onValueChange","minValue","maxValue","zoom","setZoom","Slider","onZoom","min","max","getCroppedImage","imageSrc","pixelCrop","rotation","Image","addEventListener","canvas","createElement","ctx","getContext","safeArea","Math","sqrt","translate","rotate","PI","drawImage","getImageData","putImageData","round","toBlob","file","createObjectURL","resizeImage","img","reader","FileReader","onload","readAsDataURL","naturalWidth","naturalHeight","PaydinImageCropper","crop","setCrop","aspectRatio","setAspectRatio","setCroppedAreaPixels","aspectRatiosArray","isLogoCropper","isInfluencerImageCropper","isRoundCrop","userMenuState","setUserMenuState","setObjectFit","aspectRatios","setAspectRatios","selectedAspectRatio","setSelectedAspectRatio","objectFitRef","handleAspectRatioChange","onAspectRatioChange","closeMenu","onZoomChange","imageDimens","onerror","originalAspectRatio","logoRatio","addOriginalAspectRatio","Cropper","aspect","cropShape","onCropChange","onCropComplete","croppedArea","croppedAreaPixels","minZoom","maxZoom","BiExpandAlt","SlMagnifierAdd","paddingLeft","paddingRight","ImageCropDialog","initialCrop","initialZoom","initialAspectRatio","onCropDone","BsArrowLeft","croppedImage","Tooltip","tooltipText","swapHorizontal","displayBubble","oneLine","RxQuestionMark","whiteSpace","EditFieldSectionInput","_inputStyles$border","setValue","isMultiline","prefix","prefixStart","inputRef","enlargedTextField","isEmbeddedPrefix","maxLength","rows","hasValidation","shouldResetValidation","isValidating","isPassword","validationErrorMessage","validationStatus","shouldTestValidationStatus","showValidationIcon","showTopSection","onInputChange","titleButton","titleStyles","inputStyles","isOptional","isFramed","inputType","showPassword","setShowPassword","inputValidationStatusStyle","setInputValidationStatusStyle","themeColor","helperText","setHelperText","markAsError","hasMaxLength","handleInputChange","togglePasswordVisibility","renderInput","autoComplete","AiOutlineEye","AiOutlineEyeInvisible","BsCheckCircle","CgCloseO","_inputStyles$border2","_inputStyles$border3","PaydinSelectRenderedValue","PaydinSelect","optionState","textColor","hideArrow","onOptionClick","selectedOptionSuffix","outlineStyles","menuProps","renderValue","_options$find","Select","fullWidth","displayEmpty","inputProps","IconComponent","MenuProps","AddInfluencerOption","AddInfluencerSelect","isAddInfluencerSelectOpen","setIsAddInfluencerSelectOpen","normalizedOptions","unshift","normalizeOptions","UTMFormInput","inputClassName","isParametersMenuOpen","setIsParametersMenuOpen","hideUTMAdditionsMenu","onUTMParamAdditionClick","UTMAddition","PaydinSwitch","checkedBackgroundColor","Switch","transform","boxSizing","transition","CollapsingElement","collapsedSize","unmountOnExit","Collapse","in","ExpandHideButton","isExpanded","UTMForm","inlinePadding","shouldDisplayControlBar","inputsHasPadding","shouldAddUTMs","setShouldAddUTMs","setUTMSource","setUTMMedium","setUTMCampaign","setUTMTerm","setUTMContent","isUTMParamsShown","setIsUTMParamsShown","generateUTMTag","isUTMInputsShown","paddingInline","MultiSelectStatusButton","ItemsView","gap","displayAsGrid","itemsSliderClassName","paddingVertical","itemsSliderRef","generateRandomInteger","maxNumber","floor","random","formatNumber","number","numberFormat","isAverage","shortNumberMaxBondary","num","decimalCount","getDecimalCount","decimalDigits","si","v","s","toFixed","shortenNumber","Number","isInteger","toLocaleString","uploadFile","customName","onUrlReceive","FormData","append","UploadFileAPI","r","blob","blobFile","fileExtension","substr","fixSomeFileExtensions","File","containsWhitespace","str","formatUsername","isNumberInRange","isObjectEmpty","object","filenameExtension","ItemsViewSection","itemWidth","itemAspectRatio","bgColor","isLoadingItems","isLoadingMoreItems","sectionRef","hasTitlePadding","alignEnd","isExpandingFullHeight","justifyContent","designPattern","sectionType","PreviewLinkProductsListItem","AlertMessage","background","onButtonClick","Alert","severity","Button","size","AlertTitle","EditLinkSection","mode","setImage","selectedCollections","setSelectedCollections","setDescription","setPromocode","linkPropertiesModified","originalInfluencerUsername","selectedInfluencerUsername","setSelectedInfluencerUsername","hasSavedInfluencer","setIsInfluencerChanged","preferedSearchProductIds","multiSelectDialogsState","setMultiSelectDialogsState","productsDialogShown","collectionsDialogShown","isImageCropDialogOpen","setIsImageCropDialogOpen","cropperTempImage","setCropperTempImage","displayImage","setDisplayImage","fileInputRef","openAddProductsDialog","closeImageCropDialog","renderTitleHeader","selectedInfluencer","accept","files","resizedImage","prefered_product_ids","AnimatedStringLoader","string","resetAnimation","els","querySelectorAll","el","animationName","requestAnimationFrame","intervalId","setInterval","clearInterval","character","animation","animationDelay","LoaderPage","animatedString","isSplash","marginBottom","isContained","disableOverflow","marginTop","ContentDialogLoader","LinkView","_data$linkData$produc","_data$linkData","_linkData$images$3","isLoadingLink","setIsLoadingLink","linkData","setLinkData","setUtmParams","userSelectedProducts","setUserSelectedProducts","userSelectedCollections","setUserSelectedCollections","promocodeState","setPromocodeState","setLinkDescription","shoppingUrl","setShoppingUrl","isSavingLink","setIsSavingLink","setLinkPropertiesModified","isAbleToSaveChanges","setIsAbleToSaveChanges","setInfluencers","setOriginalInfluencerUsername","selectedInfluencerImage","setSelectedInfluencerImage","didUploadImages","setDidUploadImages","setHasSavedInfluencer","isInfluencerChanged","addDiscardChangesDialogBackHandler","populateLinkData","_linkData$description","_linkData$utmParams","_linkData$utm_params$","_linkData$utm_params","_linkData$utmParams2","_linkData$utm_params$2","_linkData$utm_params2","_linkData$utmParams3","_linkData$utm_params$3","_linkData$utm_params3","_linkData$utmParams4","_linkData$utm_params$4","_linkData$utm_params4","_linkData$utmParams5","_linkData$utm_params$5","_linkData$utm_params5","_linkData$products","_linkData$preferedPro","_linkData$link_id","_linkData$description2","_linkData$link_analyt","_linkData$link_analyt2","_linkData$analytics","_linkData$link_analyt3","_linkData$link_analyt4","_linkData$analytics2","_linkData$link_analyt5","_linkData$link_analyt6","_linkData$analytics3","_linkData$link_analyt7","_linkData$link_analyt8","_linkData$analytics4","_linkData$link_analyt9","_linkData$link_analyt10","_linkData$promocode","_linkData$promocode$c","_linkData$promocode2","_ref3","_linkData$collections","fromProdefinedData","imagesWithIds","_linkData$images","_linkData$images$","_linkData$images2","uuidV4","linkTitle","linkProductsSelectedOptions","linkProducts","preferedProductIds","_linkData$promocode3","link_analytics","checkoutRequests","predefinedPromocode","_response$username","_response$is_active","_response$promocode","_response$promocode$c","_response$promocode2","loadInfluencer","_response$filter2","_influencer$profile_i2","_influencer$username2","_influencer$is_active2","_influencer$promocode3","collections","_linkData$promocode$c2","_linkData$promocode4","hasUtmParams","_utmParams$UTMSource","_utmParams$UTMMedium","_utmParams$UTMCampaig","_utmParams$UTMTerm","_utmParams$UTMContent","showSaveDetailsErrorMessage","setLinkUTMSource","UTMValue","setLinkUTMMedium","setLinkUTMCampaign","setLinkUTMTerm","setLinkUTMContent","setSelectedLinkInfluencerUsername","imageFile","imagesToSave","uploadedimages","all","uploadImages","setShouldAddUTMParams","renderContent","_linkData$images$2","_userDetails$settings","_userDetails$settings2","_userDetails$settings3","_userDetails$settings4","_userDetails$settings5","_userDetails$settings6","_userDetails$settings7","_userDetails$settings8","_userDetails$settings9","_userDetails$settings10","_userDetails$settings11","_userDetails$settings12","_userDetails$settings13","_userDetails$settings14","_userDetails$settings15","_userDetails$promocod","_response$filter","_influencer$profile_i","_influencer$is_active","_influencer$promocode2","_influencer$promocode","loadLinkDetails","productsIds","selectedCollection","some","_linkData$images3","createLookDetails","newLink","updateLookDetails","updatedLink","performSaveLink","getTopbarCenterTitle","renderTopbarSaveButton","mainImageUrl","UrlSelectionType","dimens","isSelected","hasChangedData","pointerEvents","ShortUrlSelectionCollectionTypeImage","version","dataoriginal","AddCollectionsDialogCollection","_data$images","_data$images$medium","medium","AddCollectionsDialog","getCollections","EditShortSection","_selectedProducts$3","_selectedProducts$4","_selectedCollections$3","_selectedCollections$4","_selectedCollections$5","_selectedCollections$6","setTitle","setURL","urlInputValidationState","setUrlInputValidationState","urlSelectionType","setUrlSelectionType","shortPropertiesModified","urlSelectionOptionDimension","setUrlSelectionOptionDimension","urlTypingTimeoutRef","urlSelectionOptionsRef","isProductUrlTypeSelected","isCollectionUrlTypeSelected","_urlSelectionOptionsR","clientWidth","urlToTest","match","IoShirtOutline","HiOutlineLink","outline","_selectedProducts$","_selectedProducts$2","_selectedCollections$","_selectedCollections$2","ShortView","isLoadingShort","setIsLoadingShort","isButtonProcessing","setIsButtonProcessing","isAbleToSaveShort","setIsAbleToSaveShort","setShortPropertiesModified","setUrl","shortData","setShortData","populateShortData","_shortData$shoppingRe","_shortData$shopping_r","_shortData$descriptio","_shortData$utmParams$","_shortData$utmParams","_shortData$utm_params","_shortData$utm_params2","_shortData$utmParams$2","_shortData$utmParams2","_shortData$utm_params3","_shortData$utm_params4","_shortData$utmParams$3","_shortData$utmParams3","_shortData$utm_params5","_shortData$utm_params6","_shortData$utmParams$4","_shortData$utmParams4","_shortData$utm_params7","_shortData$utm_params8","_shortData$utmParams$5","_shortData$utmParams5","_shortData$utm_params9","_shortData$utm_params10","_shortData$linkId","_shortData$link_id","_shortData$descriptio2","_shortData$currency","_shortData$link_analy","_shortData$link_analy2","_shortData$analytics$","_shortData$analytics","_shortData$link_analy3","_shortData$link_analy4","_shortData$analytics$2","_shortData$analytics2","_shortData$link_analy5","_shortData$link_analy6","_shortData$analytics$3","_shortData$analytics3","_shortData$link_analy7","_shortData$link_analy8","_shortData$analytics$4","_shortData$analytics4","_shortData$link_analy9","_shortData$link_analy10","_shortData$promocode","_shortData$promocode$","_shortData$promocode2","_shortData$products","_shortData$influencer","_shortData$products2","_shortData$collection","_shortData$promocode$2","_shortData$promocode4","shortTitle","_shortData$promocode3","_shortData$products3","_shortData$collection2","getUrlSelectionType","setShortTitle","setShortPromocode","setShortURL","setShortUTMSource","setShortUTMMedium","setShortUTMCampaign","setShortUTMTerm","setShortUTMContent","getShortImage","loadShortDetails","getTitle","collectionIds","promocodeToSave","urlToSave","prepareShortUrl","shortDescription","shortImage","selectedProductIds","selectedCollectionIds","createShortDetails","newShort","updateShortDetails","updatedShort","EditInfluencerSection","setUsername","originalEmail","setEmail","setCommission","commissionHelperText","setCommissionHelperText","commissionValidationStatus","setCommissionValidationStatus","phoneNumber","setPhoneNumber","phoneNumberValidationStatus","setPhoneNumberValidationStatus","phoneNumberHelperText","setPhoneNumberHelperText","setIsActiveInfluencer","setIsUsernameValid","setIsEmailValid","influencerPermissions","setInfluencerCommissionPermission","setInfluencerClicksPermission","setInfluencerSalesPermission","setInfluencerRevenuePermission","setInfluencerAovEnabledPermission","setInfluencerCrEnabledPermission","commissionRules","setReduceRefundsFromCommission","setReduceVatFromCommission","revenueRules","setNetRevenueRatio","netRevenueRatioValidationStatus","setNetRevenueRatioValidationStatus","netRevenueRatioHelperText","setNetRevenueRatioHelperText","shouldTestEmailValidationStatus","validationIndicatorState","setValidationIndicatorState","validationErrorMessagesState","setValidationErrorMessagesState","shouldMarkImageRequired","setShouldMarkImageRequired","isAnalyticsPermissionsShown","setIsAnalyticsPermissionsShown","wasEmailFilledBefore","setWasEmailFilledBefore","netRevenueRatioToggle","setNetRevenueRatioToggle","usernameValidationTimeoutRef","emailValidationTimeoutRef","setUsernameValidatingState","state","setEmailValidatingState","setUsernameValidationStatus","setEmailValidationStatus","renderAddMediaFrame","isCommissionValid","fractionalNumberPart","isUsernameFormatValid","validateInfluencerUsername","validateUsername","netRevenueRatio","isEmailFormatValid","click","reduceRefundsFromCommission","reduceVatFromCommission","isOn","setProfileImage","InfluencerView","influencerData","setInfluencerData","utm","isLoadingInfluencer","setIsLoadingInfluencer","isAbleToSaveInfluencer","setIsAbleToSaveInfluencer","influencerPropertiesModified","setInfluencerPropertiesModified","isUsernameValid","isEmailValid","setOriginalEmail","setInfluencerPermissions","influencerCommissionRules","setInfluencerCommissionRules","influencerRevenueRules","setInfluencerRevenueRules","setShouldTestEmailValidationStatus","allowPermission","setInfluencerProfileImage","setInfluencerUsername","setInfluencerEmail","setInfluencerPromocode","setInfluencerCommission","setInfluencerPhoneNumber","phone","setInfluencerCommissionReduceRefund","reduceRefunds","setInfluencerCommissionReduceVat","reduceVat","setInfluencerNetRevenueRatio","setInfluencerActivity","_response$profile_ima","_response$email","_response$email2","_response$phone","_response$permissions","_response$permissions2","_response$permissions3","_response$permissions4","_response$permissions5","_response$permissions6","_response$permissions7","_response$permissions8","_response$permissions9","_response$permissions10","_response$permissions11","_response$permissions12","_response$permissions13","_response$permissions14","_response$commission_","_response$commission_2","_response$commission_3","_response$commission_4","_response$revenue_rul","_response$revenue_rul2","commission_rules","reduce_refunds_from_commission","reduce_vat_from_commission","revenue_rules","net_revenue_ratio","imageToSave","profileImageUrl","createInfluencer","newInfluencer","updateInfluencer","updatedInfluencer","LinkAnalyticsSection","getCurrencySymbol","currencyCode","_getSymbolFromCurrenc","getSymbolFromCurrency","InfluencerStrip","ColorfulTag","isSmall","textSize","hasHorizontalMargin","showBullet","marginLeft","LinkUrlTypeTag","showTooltip","urlTypeData","getUrlTypeTagData","PreviewItemDataSection","NoBackgroundColor","NoItemsFound","buttonStyles","isEmbeddedIcon","showButton","addItemButtonClickHandler","PaydinTable","headerBackgroundColor","headerTextColor","visibleRowsCount","totalCount","rowHeightPx","noItemsImage","noItemsText","rowView","RowView","headerView","HeaderView","hideHeaderInMobile","removedColumnIds","shouldPaginate","showTotalCount","showPagesSection","isDataLoading","setIsDataLoading","order","setOrder","orderBy","setOrderBy","page","setPage","setContent","shouldCheckItemsAvailability","setShouldCheckItemsAvailability","visibleRows","array","comparator","stabilizedThis","a","b","stableSort","descendingComparator","getComparator","emptyRows","EnhancedTableHead","onRequestSort","TableHead","TableRow","createSortHandler","property","Paper","TableContainer","Table","handleRequestSort","TableBody","row","rowData","TableCell","colSpan","TablePagination","rowsPerPageOptions","rowsPerPage","onPageChange","handleChangePage","newPage","pagesLoadedCount","ceil","labelDisplayedRows","from","_ref4","ProductsTableHeaderView","headerContentMap","BsBoxSeam","StyledTableCell","styled","tableCellClasses","head","textAlign","ProductsTableHeaderCell","align","sortDirection","TableSortLabel","Box","visuallyHidden","columnId","CircularProgressBar","archColor","percentage","role","ProductsTableRowView","_rowData$viewCount","_rowData$addCount","_rowData$buyCount","_rowData$addCount2","_rowData$buyCount2","_rowData$buyCount3","_rowData$viewCount2","_rowData$addCount3","_rowData$buyCount4","_rowData$addCount4","_rowData$buyCount5","_rowData$buyCount6","StyledTableRow","productTableCellStyle","getRankColor","rank","renderRankCircle","ranking","hasValue","productImage","productName","viewCount","addCount","buyCount","ProductsTable","setHasProducts","totalProductsCount","setTotalProductsCount","nextSkip","setNextSkip","createData","getLinkProductsCount","_data$count","getLinkProducts","_data$next_skip","next_skip","normalizedData","_product$images","_product$images$small","view","add","buy","normalizeTableData","productRow","_productRow$product_i","_productRow$title","_productRow$view","_productRow$add","_productRow$buy","_productRow$image","_productRow$rank","product_id","extractProductRowData","PaydinChartControlSection","dotColor","PaydinChart","chartData","chartDataLabels","setChartDataLabels","timeRangeName","isMultiLabelSelect","chartDimensPx","setChartDimensPx","labelsDimensPx","setLabelsDimensPx","chartContainerRef","chartLabelsRef","_chartContainerRef$cu","_chartContainerRef$cu2","_chartLabelsRef$curre","_chartLabelsRef$curre2","_chartLabelsRef$curre3","_chartDataLabels$labe","_chartDataLabels$labe2","_chartDataLabels$labe3","_chartDataLabels$labe4","_chartDataLabels$labe5","labelColor","totalValue","_chartDataLabels$labe6","dataLabels","dataLabel","_dataLabels$dataLabel","onChartControlClick","ComposedChart","CartesianGrid","strokeDasharray","chartWidth","XAxis","dataKey","tickMargin","interval","minTickGap","YAxis","yAxisId","orientation","rawLabel","_chartDataLabels$rawL","_chartDataLabels$labe7","_chartDataLabels$labe8","_chartDataLabels$labe9","chartType","chartColor","Line","scale","activeDot","dot","Bar","barSize","renderChart","ActivityChart","setChartData","isClicksPermissionEnabled","labelTooltip","isCrPermissionEnabled","isSalesPermissionEnabled","isCalculatingData","setIsCalculatingData","_userDetails$permissi","_userDetails$permissi2","_userDetails$permissi3","_userDetails$permissi4","dataArray","entries","dataObject","Clicks","Sales","formattedFilledData","filledData","_normalizedData$i","_normalizedData","fillZeroData","normalizeChartData","CommerceChart","isRevenuePermissionEnabled","isAovPermissionEnabled","_userDetails$permissi5","totalTax","total_tax","dailyRevenue","Revenue","AOV","LinkAnalyticsCharts","chartsData","isLoadingChartsData","noBackgroundColor","isValueEnabled","LinkOrdersTableHeaderView","HiOutlineShoppingBag","headerStyle","StyledDateTableCell","OrdersTableHeaderCell","tableCellView","TableCellView","OrderProduct","getVariantTitle","LinkOrdersTableRowView","setIsExpanded","isLoadingMoreDetails","setIsLoadingMoreDetails","orderProducts","setOrderProducts","productLineHeight","product3LineHeight","OpenInStoreLink","redirectUrl","RiShareBoxLine","actionsCellStyle","alignItems","orderProductsListStyle","overflowY","orderProductsListLoaderStyle","onExpandOrder","orderId","orderProduct","getStatusBackgroundColor","getStatusTextColor","renderRowContent","allowOrderDetails","IoIosArrowDown","totalPrice","actions","borderBottom","LinkOrdersTable","salesCount","getLinkOrders","orders","orderRow","_orderRow$order_id","_orderRow$created_at","_orderRow$currency","_orderRow$order_statu","_orderRow$order_url","_orderRow$products_co","_orderRow$total_price","order_id","getStatusDisplayName","order_status","order_url","total_price","extractOrderRowData","DrawerStyledButtonList","buttons","button","PreviewLinkSection","_userDetails$permissi12","_data$allowOrderDetai","_userDetails$permissi13","_userDetails$permissi14","onDeleteLink","onSaveSuccess","contentDialogState","setContentDialogState","contentType","shouldDisplayProductsTable","setShouldDisplayProductsTable","linkAnalyticsData","setLinkAnalyticsData","optionsMenuState","setOptionsMenuState","loadLink","_linkData$shopping_re","_linkData$selected_op","_linkData$products$ma","_linkData$products2","GetLinkAnalytics","analyticsResponse","_analyticsResponse$sh","_analyticsResponse$lo","_analyticsResponse$cu","_analyticsResponse$lo2","_analyticsResponse$sh2","_analyticsResponse$lo3","_analyticsResponse$sh3","_ref5","_analyticsResponse$lo4","_analyticsResponse$sh4","_ref6","_analyticsResponse$lo5","_analyticsResponse$sh5","_ref7","_analyticsResponse$lo6","_analyticsResponse$sh6","_ref8","_analyticsResponse$lo7","_analyticsResponse$sh7","shorts_analytics","looks_analytics","_linkData$products3","_linkData$collections2","hasLinkImages","getPreviewImage","edit","copyLink","onDeleteClick","showDeleteConfirmationDialog","deleteLink","renderLinkAnalytics","_linkAnalyticsData$vi","_userDetails$permissi6","_userDetails$permissi7","_userDetails$permissi8","_userDetails$permissi9","_userDetails$permissi10","_userDetails$permissi11","BiDotsHorizontalRounded","MdOutlineContentCopy","MdOutlineEdit","RiDeleteBin6Line","isLinkExpired","ContentDialog","DateIntervalOption","DatePicker","_selectedDates$select","selectedStartDate","selectedEndDate","dateIntervals","selectedDateInterval","onCancelClick","onUpdateClick","isAbleToUpdate","setIsAbleToUpdate","selectedDates","setSelectedDates","dateIntervalsStripRef","isLifetimeRangeSelected","selectDateInterval","interval1","onUpdate","_dateIntervalsStripRe","selectedDateIntervalIndex","scrollBy","ReactDatePicker","subDays","startDate","endDate","newStartDate","newEndDate","handleDateIntervalSelection","inline","selectsRange","monthsShown","maxDate","minDate","TimeSelect","setStartEndDates","selectedTimeInterval","onTimeIntervalSelect","setShouldApplyDateRange","timeIntervals","displayShortDates","menuState","setMenuState","closeDatePicker","getFormattedShortTimeRange","handleDatePickerUpdate","tempDateInterval","handleDatePickerCancel","renderDatePicker","TbCalendarEvent","PaydinDrawerListContent","TabOption","selectedTabOptionIndex","selectedBottomLine","optionPadding","Tabs","tabs","setSelectedTabOptionIndex","hasTopLine","isCentered","onTabOptionClick","tab","onTabClicked","ShortItem","shortId","onUpdateLink","isShortDeletionDialogOpen","setIsShortDeletionDialogOpen","linkContentDialogState","setLinkContentDialogState","linkItemTitlesContainerRef","linkItemTitleRef","editShort","previewShort","copyShort","openDeleteLinkConfirmationDialog","_linkItemTitlesContai","getDisplayImage","BiDotsVerticalRounded","MdOpenInNew","BsCalendar","epochTime","toLocaleDateString","FaChartSimple","hasSalesPermission","BsCartCheck","LiaCoinsSolid","onDelete","InfluencerAnalyticsLoader","InfluencerLinksShortsLoader","DashboardDataContainer","shouldSpreadItems","BusinessAnalyticsDataLoader","DashboardDataSingleValue","secondaryValue","secondaryValueTranslationString","isLoadingData","DashboardDataMultiValue","bulletColor","DashboardDataValueBreakdown","breakdownData","PaydinPieChart","showLegend","pieValue","displayableData","PieChart","Pie","cx","cy","labelLine","midAngle","innerRadius","outerRadius","RADIAN","radius","cos","sin","textAnchor","dominantBaseline","Cell","SalesBreakdownChart","linksRevenue","shortsRevenue","organicRevenue","linksColor","shortsColor","organicColor","showValues","InfluencerInsights","totalLinksSales","totalShortsSales","totalOrganicSales","totalLinksRevenue","totalShortsRevenue","totalOrganicRevenue","showCommission","isGeneralAnalytics","hasValuePermission","permission","renderRevenueItems","renderCommission","renderSales","renderSalesBreakdown","renderAOVBreakdown","renderCR","AddLInkFlow","trigger","setTrigger","onAddLinkFlowDone","isLinkContentDialogOpen","setIsLinkContentDialogOpen","isProductsDialogOpen","setIsProductsDialogOpen","resetData","onCreateSuccess","InfluencerPreviewPage","onDeleteInfluencer","onInfluencerSaveSuccess","overviewTimeIntervalName","setOverviewTimeIntervalName","datePickerState","setDatePickerState","shouldApplyDateRange","isLoadingInfluencerLinks","setIsLoadingInfluencerLinks","isLoadingInfluencerLinksAnalytics","setIsLoadingInfluencerAnalytics","isLoadingInfluencerReport","setIsLoadingInfluencerReport","shouldPopulateLinksContent","setShouldPopulateLinksContent","hasMoreItemsState","setHasMoreItemsState","loadingMoreItems","setLoadingMoreItems","addFlowTrigger","setAddFlowTrigger","linksListRef","tabsRef","analyticsStripRef","paginationTriggeringLinkRef","isTargetLinkInView","loadInfluencerDetails","_influencerData$links","_influencerData$short","reset","isLinksTabSelected","_response$links","_response$links2","isShortsTabSelected","_response$links3","_response$links4","downloadInfluencerReport","from_date","to_date","report_name","localTimezone","resolvedOptions","timeZone","timezone","filename","appendChild","removeChild","revokeObjectURL","GetInfluencerAnalyticsReport","onDateRangeSelected","hasNoInfluencerLinks","hasNoInfluencerShorts","showResetInfluencerPasswordConfirmationDialog","influencerResetPassword","editInfluencer","copyInfluencerLoginInformation","host","showDeleteInfluencerConfirmationDialog","deleteInfluencer","activate","renderTabs","renderDateRangeSelect","renderInfluencerAnalytics","createNewLink","createNewShort","_data$datePickerRange3","_data$datePickerRange4","datePickerRange","_data$datePickerRange","_data$datePickerRange2","_influencerData$links2","_influencerData$short2","_linksData$links","_linksData$links2","handlePageScroll","loadInfluencerAnalytics","MdEdit","TbFileDownload","MdOutlineLockReset","MdDeleteOutline","LinkItem","short","renderTabContent","marginInline","MultilinkExperiencesTableRowView","previewLink","openLinkPreview","_MULTILINK_SUBLINK_DE","device","traffic","aov","MultilinkExperiencesTableHeaderView","MultilinkExperiencesTableHeaderCell","MultilinkExperiencesTable","linkOption","_linkOption$linkData11","_linkOption$linkData12","_linkOption$linkData13","_linkOption$linkData14","_linkOption$linkData15","_linkOption$linkData16","_linkOption$linkData17","openLinkContentDialog","_linkOption$linkData18","_linkOption$linkData","_linkOption$linkData$","_linkOption$linkData2","_linkOption$linkData$2","_linkOption$linkData3","_linkOption$linkData$3","_linkOption$linkData4","_linkOption$linkData5","_linkOption$linkData6","_linkOption$linkData7","_linkOption$linkData8","_linkOption$linkData9","_linkOption$linkData10","String","fromCharCode","deviceOption","MdOutlineLinkOff","PreviewMultilinkSection","_multilinkData$linksO","onDeleteMultilink","MULTILINKLINK","isLoadingMultilink","setIsLoadingMultilink","multilinkData","setMultilinkData","urlSelectionTypes","setUrlSelectionTypes","multilinkAnalyticsData","setMultilinkAnalyticsData","loadMultilink","_multilinkData$links_","_multilinkData$links_2","_multilinkData$links_3","_multilinkData$links_4","_multilinkData$links_5","_multilinkData$links_6","_multilinkData$links_7","_multilinkData$links_8","_multilinkData$links_9","_multilinkData$links_10","_multilinkData$links_11","_multilinkData$links_12","_multilinkData$links_13","_multilinkData$links_14","_multilinkData$links_15","_multilinkData$links_16","_multilinkData$links_17","_multilinkData$links_18","_multilinkData$links_19","_multilinkData$links_20","_multilinkData$links_21","_multilinkData$links_22","_multilinkData$links_23","_multilinkData$links_24","_multilinkData$links_25","_multilinkData$links_26","_multilinkData$links_37","_multilinkData$multil","_multilinkData$multil2","_multilinkData$title","_multilinkData$curren","_multilinkData$link_a","_multilinkData$link_a2","_multilinkData$title2","link_data","_multilinkData$links_27","_multilinkData$links_28","_multilinkData$links_31","_multilinkData$links_32","_multilinkData$links_33","_multilinkData$links_29","_multilinkData$links_30","_multilinkData$links_34","_multilinkData$links_35","_multilinkData$links_36","_linkOption$link_data","_linkOption$link_data2","_linkOption$link_data3","_linkOption$link_data4","_linkOption$link_data5","_linkOption$link_data6","_linkOption$link_data7","_linkOption$link_data8","_linkOption$link_data9","_linkOption$link_data10","_linkOption$link_data11","_linkOption$link_data12","_linkOption$link_data13","_linkOption$link_data14","_linkOption$link_data15","_linkOption$link_data16","_linkOption$link_data17","_linkOption$link_data18","_linkOption$link_data19","_linkOption$link_data20","_linkOption$link_data21","_linkOption$link_data22","_linkOption$link_data23","_linkOption$link_data24","_linkOption$link_data25","_linkOption$link_data26","_linkOption$value","_linkOption$link_data27","_linkOption$link_data28","_linkOption$deviceOpt","_linkOption$device_op","linkDefaultImage","device_option","getUrlSelectionTypes","_parseInt","parseInt","_parseInt2","_parseFloat","_parseFloat2","copyMultilink","deleteMultilink","renderMultilinkAnalytics","_multilinkAnalyticsDa","updatedMultilink","InstantStoresImage","EditMultilinkSection","_selectedProducts$0$","_selectedProducts$0$2","_selectedProducts$1$","_selectedProducts$1$2","_selectedCollections$7","_selectedCollections$8","_selectedCollections$9","urls","urlIndex","urlsInputValidationState","linkIndex","multilinkPropertiesModified","splittingValues","setSplittingValue","deviceOptions","setDeviceOptions","maxLimit","tempSelectedProducts","isDeviceSelectOpen","setIsDeviceSelectOpen","urlTypingTimeoutRefs","urlSelectionOptionsRefs","updateSplittingValue","intValue","abs","openAddCollectionsDialog","selectCustomUrl","isCustomUrlTypeSelected","allowLinkTypeSelection","_urlSelectionOptionsR2","_urlSelectionOptionsR3","_urlSelectionOptionsR4","_urlSelectionOptionsR5","_urlSelectionOptionsR6","_urlSelectionOptionsR7","_urlSelectionOptionsR8","_urlTypingTimeoutRefs","pattern","AiOutlinePercentage","newValue","MultilinkView","isAbleToSaveMultilink","setIsAbleToSaveMultilink","setMultilinkPropertiesModified","setUrls","setSplittingValues","setUrlsInputValidationState","populateMultilinkData","_multilinkData$utmPar","_multilinkData$utmPar2","_multilinkData$linksO2","_multilinkData$linksO3","_multilinkData$linksO4","_multilinkData$utmPar3","_multilinkData$utmPar4","_multilinkData$linksO5","_multilinkData$linksO6","_multilinkData$linksO7","_multilinkData$linksO8","_multilinkData$utmPar5","_multilinkData$utmPar6","_multilinkData$linksO9","_multilinkData$linksO10","_multilinkData$linksO11","_multilinkData$linksO12","_multilinkData$utmPar7","_multilinkData$utmPar8","_multilinkData$linksO13","_multilinkData$linksO14","_multilinkData$linksO15","_multilinkData$linksO16","_multilinkData$utmPar9","_multilinkData$utmPar10","_multilinkData$linksO17","_multilinkData$linksO18","_multilinkData$linksO19","_multilinkData$linksO20","_multilinkData$promoc","_multilinkData$promoc2","_multilinkData$linksO21","_multilinkData$linksO22","_multilinkData$linksO23","_multilinkData$linksO24","_multilinkData$linksO25","_multilinkData$linksO26","_multilinkData$linksO27","_multilinkData$linksO28","_multilinkData$linksO29","_multilinkData$title3","_linkOption$linkData$4","_linkOption$linkData$5","_linkOption$linkData$6","_linkOption$linkData$7","_linkOption$linkData$8","_linkOption$linkData$9","_linkOption$linkData$10","_linkOption$linkData$11","_linkOption$linkData$12","_linkOption$linkData19","_linkOption$linkData20","_linkOption$linkData21","_linkOption$linkData22","getLinkImage","_selectedProducts$ind","setMultilinkTitle","setMultilinkPromocode","setMultilinkURL","currentUrl","newStateIndex","currentInputValidationState","newType","currentUrlType","setMultilinkLinkSelectedProducts","currentProducts","setMultilinkLinkSelectedCollections","currentCollections","setMultilinkDeviceOptions","currentDeviceOption","setMultilinkSplittingValue","newValues","currentValue","valuesSum","accumulator","_newValues","delta","valueIndex","oldValue","setMultilinkUTMSource","setMultilinkUTMMedium","setMultilinkUTMCampaign","setMultilinkUTMTerm","setMultilinkUTMContent","prepareMultilinkLinkUrl","getLinkType","loadMultilinkDetails","every","isInstantStoreTypeSelected","_selectedProducts$ind2","_multilinkData$linksO30","_selectedProducts$ind3","_utmParams$UTMSource3","_utmParams$UTMMedium3","_utmParams$UTMCampaig3","_utmParams$UTMTerm3","_utmParams$UTMContent3","link_resource","CreateMultilinkDetailsAPI","newMultilink","UpdateMultilinkDetailsAPI","getDialogWidth","renderDialogContent","isLinkDeletionDialogOpen","setIsLinkDeletionDialogOpen","editLink","MdContentCopy","createdAtDate","AnalyticsStrip","isLoadingAnalytics","containerRef","showClicks","leftComponent","renderAnalyticsValue","hasClicksPermission","shouldDisplayRevenue","DashboardLoader","LinksPage","_userDetails$business","isLoadingLinks","setIsLoadingLinks","isLoadingMoreLinks","setIsLoadingMoreLinks","setSkip","defaultLinks","setDefaultLinks","linkSearchResult","setLinkSearchResult","hasMoreLinks","setHasMoreLinks","shouldShowNoLinks","setShouldShowNoLinks","lifetimeAnalyticsState","setLifetimeAnalyticsState","isFirstRender","setIsFirstRender","topbarRef","setLinks","shouldResetSkip","clearSearchQuery","handleChange","onAddLinkButtonClick","hasNoLinks","renderLinksContent","handleLinksScroll","_linksListRef$current2","_topbarRef$current","_analyticsStripRef$cu","scrollPosition","scrollTop","thresholdScrollHeight","innerHeight","renderLoaderRow","renderAnalyticsStrip","_userDetails$analytic","_linksListRef$current","_userDetails$analytic2","_userDetails$analytic3","_userDetails$analytic4","_userDetails$analytic5","_userDetails$analytic6","_userDetails$analytic7","_userDetails$analytic8","_userDetails$analytic9","_userDetails$analytic10","_userDetails$analytic11","_userDetails$analytic12","_userDetails$analytic13","_userDetails$analytic14","_response$looks_analy","_response$looks_analy2","_response$looks_analy3","_response$looks_analy4","_response$looks_analy5","_response$looks_analy6","_response$looks_analy7","_response$looks_analy8","_response$looks_analy9","_response$looks_analy10","_response$looks_analy11","_response$looks_analy12","_response$shorts_anal","_response$shorts_anal2","_response$shorts_anal3","_response$shorts_anal4","_response$shorts_anal5","_response$shorts_anal6","_response$shorts_anal7","_response$shorts_anal8","_response$shorts_anal9","_response$shorts_anal10","_response$shorts_anal11","_response$shorts_anal12","linksSales","linksCheckouts","linksTotalTax","shortsSales","shortsCheckouts","shortsTotalTax","shortsData","_response$influencers","influencerInsights","influencers_insights","influencer_insight","onScroll","ProductItem","imageWidth","imageHeight","showSellingScore","score","times","TrendsPage","_userDetails$trends27","_userDetails$trends28","_userDetails$trends29","_userDetails$trends30","_userDetails$trends31","_userDetails$trends32","isLoadingTopPreforming","setIsLoadingTopPerforming","isLoadingTopCombinations","setIsLoadingTopCombinations","isLoadingComplementary","setIsLoadingComplementary","topPerformingProductsExpended","setTopPerformingProductsExpended","topCombinationsExpended","setTopCombinationsExpended","complementaryExpended","setComplementaryExpended","complementaryMainProduct","setComplementaryMainProduct","setComplementaryProducts","quickInstantProducts","setQuickInstantProducts","allowComplementaryExpand","setAllowComplementaryExpand","setProductsDialogShown","loadComplementaryProducts","productId","_userDetails$trends10","_userDetails$trends11","quickInstantStore","renderTopPerformingProducts","_userDetails$trends12","_userDetails$trends13","_userDetails$trends14","_userDetails$trends15","BsInfoCircle","_userDetails$trends2","_userDetails$trends3","_userDetails$trends3$","_userDetails$trends4","_userDetails$trends4$","_userDetails$trends5","_userDetails$trends6","_userDetails$trends7","_userDetails$trends8","_userDetails$trends9","complementaryProductsLineRef","useCallback","node","_userDetails$trends16","_userDetails$trends17","_userDetails$trends18","_userDetails$trends19","_userDetails$trends20","_userDetails$trends21","combination","combinationIndex","_userDetails$trends25","_userDetails$trends26","combinationProducts","_userDetails$trends22","_userDetails$trends23","_userDetails$trends24","productIndex","FaPlus","renderTopCombinations","VscArrowSwap","_products$","GeneralLayout","getMaxWidth","baseLayoutStyles","endsWith","AuthLayout","NotFound","Splash","PrivaciesFooterText","p","Link","PasswordInputRule","fulfilled","BiCheck","GrFormClose","PasswordInput","setValidationStatus","passwordContract","setPasswordContract","rule1","instruction","lengthLimit","rule2","rule","AlreadyHaveAccount","navigationUrl","CheckYourEmail","onBackClick","BsEnvelope","SignUpPage","isSignUpInProcess","setIsSignUpInProcess","inputState","setInputState","boxedMessageState","setBoxedMessageState","usernameValidationState","setUsernameValidationState","validationResult","emailValidationState","setEmailValidationState","isPasswordValid","setIsPasswordValid","validationErrorState","setValidationErrorState","isRegisteredSuccessfully","setIsRegisteredSuccessfully","ValidateEmail","validateEmail","ExternalAuthPage","CreateNewPasswordPage","isAbleToResetPassword","setIsAbleToResetPassword","isResetPasswordInProgress","setIsResetPasswordInProgress","resetPasswordToken","newPassword","new_password","PrivacyPolicyPage","MdOutlineArrowBackIos","TermsAndConditionsPage","ShopifyHelpPage","Card","AnalyticsDataCard","isTooltipHorizontalSwap","numberStyles","MdOutlineInfo","AnalyticsPage","overviewData","setOverviewData","timeInterval","setIsLoadingAnalytics","isLoadingTabs","setIsLoadingTabs","getLinkDataOverviewForCurrentTab","_userDetails$analytic15","_userDetails$analytic16","_userDetails$analytic17","_userDetails$analytic18","_userDetails$analytic19","_userDetails$analytic20","_userDetails$analytic21","_userDetails$analytic22","_userDetails$analytic23","_userDetails$analytic24","_userDetails$analytic25","_userDetails$analytic26","_userDetails$analytic27","_userDetails$analytic28","_userDetails$analytic29","_userDetails$analytic30","_userDetails$analytic31","_userDetails$analytic32","_userDetails$analytic33","_userDetails$analytic34","_userDetails$analytic35","_userDetails$analytic36","_userDetails$analytic37","_userDetails$analytic38","_userDetails$analytic39","_userDetails$analytic40","_userDetails$analytic41","_userDetails$analytic42","_userDetails$shopboar31","_userDetails$shopboar32","_userDetails$shopboar33","_userDetails$shopboar34","_userDetails$shopboar35","_userDetails$analytic43","_userDetails$analytic44","_userDetails$analytic45","_userDetails$analytic46","_userDetails$analytic47","_userDetails$analytic48","completedCheckouts","requestedCheckouts","_response$looks_analy13","_response$looks_analy14","_response$looks_analy15","_response$looks_analy16","_response$looks_analy17","_response$looks_analy18","_response$looks_analy19","_response$shorts_anal13","_response$shorts_anal14","_response$shorts_anal15","_response$shorts_anal16","_response$shorts_anal17","_response$shorts_anal18","_response$shorts_anal19","_response$shopboard_a","_response$shopboard_a2","_response$shopboard_a3","_response$shopboard_a4","_response$shopboard_a5","_response$shopboard_a6","_response$shopboard_a7","_response$shopboard_a8","_response$shopboard_a9","_response$shopboard_a10","_response$shopboard_a11","_response$shopboard_a12","_response$shopboard_a13","_response$shopboard_a14","_response$shopboard_a15","_response$shopboard_a16","_response$shopboard_a17","_response$shopboard_a18","_response$shopboard_a19","overviewAnalytics","shopboard_analytics","_overviewAnalytics$li","_overviewAnalytics$li2","_overviewAnalytics$li3","_overviewAnalytics$li4","_overviewAnalytics$li5","_overviewAnalytics$li6","_overviewAnalytics$li7","_overviewAnalytics$sh","_overviewAnalytics$sh2","_overviewAnalytics$sh3","_overviewAnalytics$sh4","_overviewAnalytics$sh5","_overviewAnalytics$sh6","_overviewAnalytics$sh7","_overviewAnalytics$sh8","_overviewAnalytics$sh9","_overviewAnalytics$sh10","_overviewAnalytics$sh11","_overviewAnalytics$sh12","_overviewAnalytics$sh13","_overviewAnalytics$sh14","_overviewAnalytics$sh15","_overviewAnalytics$sh16","_overviewAnalytics$sh17","_overviewAnalytics$sh18","_overviewAnalytics$sh19","_overviewAnalytics$sh20","_overviewAnalytics$sh21","_overviewAnalytics$sh22","_overviewAnalytics$sh23","influencerTabsPermissionsAllowed","_overviewData$influen","_overviewData$influen2","_overviewData$influen3","_overviewData$influen4","_overviewData$influen5","_overviewData$influen6","_overviewData$influen7","_overviewData$influen8","_overviewData$influen9","_overviewData$influen10","_overviewData$influen11","_overviewData$influen12","_getLinkDataOverviewF","_getLinkDataOverviewF2","_getLinkDataOverviewF3","_getLinkDataOverviewF4","_getLinkDataOverviewF5","_getLinkDataOverviewF6","_getLinkDataOverviewF7","_getLinkDataOverviewF8","totalRevenueSum","_influencer$totalReve","totalRefundedSum","_influencer$totalRefu","influencerAttributedRevenueSum","commissionSum","salesLinksSum","_influencer$salesLink","salesShortsSum","_influencer$salesShor","salesOrganicSum","_influencer$salesOrga","revenueLinksSum","_influencer$revenueLi","revenueShortsSum","_influencer$revenueSh","revenueOrganicSum","_influencer$revenueOr","linksClicksSum","_influencer$linksClic","shortsClicksSum","_influencer$shortsCli","renderAnalyticsContent","AccountSection","sectionContentClassName","hasToggleSwitch","shouldControlContent","isContentShown","setIsContentShown","rightTopCornerContent","renderTitleRow","SettingsInput","ConfirmDisconnectDialog","isDisconnecting","onDisconnectClick","disconnectConfirmText","setDisconnectConfirmText","SocialConnectButton","stretchWidth","isConnecting","setIsConnecting","buttonContainerStyles","backgroundImage","getButtonBackgroundColor","getButtonImageUrl","getButtonText","ShopboardSocialStatus","postsCount","showStyledButton","showImage","onConnetClick","AccountPage","setIsConnectingStore","setIsShopifyConnectionFail","buttonsLoadingState","setButtonsLoadingState","saveAnalyticsIntegrations","saveUtmParams","saveShippingAndReturnUrl","forceProductSync","resetPassword","deleteAccount","instagramDisconnect","tiktokDisconnect","pinterestDisconnect","isConfirmDisconnectDialogOpen","setIsConfirmDisconnectDialogOpen","upgradePlan","disconnectSocial","subscriptedPricingPlanName","pricingPlanName","getPlanTitle","flexDirection","AddMedia","withBorder","onAddMedia","PaydinColorPicker","showDescription","setColor","isColorPickerShown","setIsColorPickerShown","ChromePicker","hex","disableAlpha","StoreSettingsLinkStyleSection","AppearanceOptionPicker","selectedOptionBorderColor","selectedOption","setSelectedOption","valueAsBorderRadius","borderWidthPx","RunningMessagesStrip","fontColor","messages","setCurrentIndex","displayMessageState","setDisplayMessageState","currentMessageRef","intervalRef","_currentMessageRef$cu","_currentMessageRef$cu2","SaveChangesStrip","isSaving","onDiscardClick","onSaveClick","shouldAddLeavePageCallbackToHistory","setShouldAddLeavePageCallbackToHistory","addLeavePageCallbackToHistory","showLeavePageDialog","discardChanges","onStripHidden","PiWarning","CheckImage","space","strokeLinecap","strokeLinejoin","ErrorImage","OptionValueMapperEntry","optionValue","isColor","updateOptionMap","selectedOptionValue","setSelectedOptionValue","updateTimeoutRef","handleValueChange","FaArrowRightLong","OptionValueMapper","_JSON$parse","isDiscardTriggered","optionTypes","currentOption","setCurrentOption","selectedOptionType","setSelectedOptionType","currentPage","setCurrentPage","contentExpanded","setContentExpanded","parsedOption","getNotVerifiedValuesCount","totalValuesRawOrdered","isSelectedTypeColor","isSelectedTypeText","valueName","_currentOption$values","_currentOption$values2","_currentOption$values3","_currentOption$values4","totalValues","valueObject","getValue","renderValueRow","visibleValues","_valueObject$hex_valu","_valueObject$text_val","counter","getOptionMapperStatus","notVerifiedValuesCount","IoIosCheckmarkCircleOutline","allValuesVerified","notVerifiedCount","total","PiWarningCircle","optionType","onOptionTypeChange","fromValueRow","toValueRow","totalRows","MdArrowForwardIos","ToggleSection","fullRow","isDescriptionOpen","_path","_extends","assign","bind","n","call","apply","SvgFilter","svgRef","titleId","o","indexOf","_objectWithoutPropertiesLoose","getOwnPropertySymbols","propertyIsEnumerable","ForwardRef","MultiSelectDropdown","toggleDropdown","buttonLabel","handleSelectAll","isAllSelected","handleClear","handleSelectAllClick","FormControl","FilterIcon","multiple","disableAutoFocusItem","onMouseDown","stopPropagation","InfluencerMultiSelectDropdown","selectedInfluencers","setOpen","dropdownRef","handleClose","_influencers$index","buildInfluencersMultiselectOptionsList","AddInfluencerOptionMultiselect","selectedValues","checkThemeChanges","_userDetails$theme","_userDetails$theme$li","_userDetails$theme2","_userDetails$theme2$l","_userDetails$theme3","_userDetails$theme3$l","_userDetails$theme4","_userDetails$theme4$l","_userDetails$theme5","_userDetails$theme5$l","_userDetails$theme6","_userDetails$theme6$l","_userDetails$theme7","_userDetails$theme7$l","_userDetails$theme8","_userDetails$theme8$l","_userDetails$theme9","_userDetails$theme9$l","_userDetails$theme10","_userDetails$theme10$","_userDetails$theme11","_userDetails$theme11$","_userDetails$theme12","_userDetails$theme12$","_userDetails$theme13","_userDetails$theme13$","_userDetails$theme14","_userDetails$theme14$","_userDetails$theme15","_userDetails$theme15$","_userDetails$theme16","_userDetails$theme16$","_userDetails$theme17","_userDetails$theme17$","_userDetails$theme18","_userDetails$theme18$","_userDetails$theme19","_userDetails$theme19$","_userDetails$theme20","_userDetails$theme20$","_userDetails$theme21","_userDetails$theme21$","linkStyle","AppearancePage","_userDetails$theme22","_userDetails$theme23","_userDetails$theme24","_userDetails$theme25","_inputState$linkStyle","_inputState$linkStyle2","_inputState$linkStyle4","_inputState$linkStyle5","_APPEARANCE_PAGE_LINK","_inputState$linkStyle7","originalShopWebsite","originalShippingAndReturnUrl","businessDataState","setBusinessDataState","logoUrl","internationalRedirectUrl","buttonLoadersState","setButtonLoadersState","uploadLogoUrl","removeLogoUrl","didChangesSaved","saveChangesStripState","setSaveChangesStripState","saveButtonState","setSaveButtonState","isAbleToSave","mobileSaveButtonState","setMobileSaveButtonState","optionMap","setOptionMap","isOptionMapChanged","setIsOptionMapChanged","isThemeChanged","setIsThemeChanged","setIsDiscardTriggered","checkoutButtonPreviewStyles","_inputState$linkStyle3","promocodeButtonPreviewStyles","_inputState$linkStyle6","originalOptionMap","debouncedStateUpdate","debounce","showDialog","updateStoreData","appearance","UpdateStoreAppearanceSettings","saveAppearance","updateOptionsMap","_inputState$salesAndD","_inputState$salesAndD2","themeObject","promo_code_display_shadow_shown","is_discount_strip_shown","isDiscountStripShown","discount_background_color","discountBackgroundColor","discount_font_color","discountFontColor","uploadLogoFromDevice","_fileInputRef$current","removeLogo","updatedBusinessData","cancel","setIsInfluencerShown","setPromocodeButtonShapeKey","setPromocodeButtonBackgroundColor","setPromocodeButtonBorderColor","setPromocodeButtonFontColor","setIsPromocodeShadowShown","_userDetails$theme26","_userDetails$theme27","_userDetails$theme28","_userDetails$theme29","Divider","selectedBorderWidthPx","modifiedObjectKey","newOptionMap","importedFile","LayoutTopbarRightSection","_userDetails$subscrip","isLogoutConfirmationDialogOpen","setIsLogoutConfirmationDialogOpen","closeMoreOptionsDrawer","goToHome","closeDrawerAndGoToRoute","goToSignUp","goToAppearance","goToMyAccount","openMoreOptionsDrawer","FiUser","RiPaletteLine","showLoginConfirmationDialog","CiLogout","BsCurrencyDollar","CiLogin","AiOutlineUserAdd","openUserMenu","renderUserCircle","FiMenu","MdOutlinePrivacyTip","GrDocumentText","SlQuestion","FloatingMenu","menuLayout","menuOptions","menuClassName","onClickHandle","textClassName","MinimizedAddButton","addImageClassName","adjustButtonTop","isAddOptionsMenuShown","setIsAddOptionsMenuShown","addButtonHeight","setAddButtonHeight","addButtonImageRef","_addButtonImageRef$cu","BsPlusSquare","HomePageImage","dataname","MobileButtonStrip","hasBottomLine","stripButtonTextSize","isFixed","stripStyles","stripButtonTextStyles","MagicStoreImage","x1","x2","y1","y2","offset","stopColor","MultilinksImage","ShopboardImage","DashboardTopBar","goToLinks","goToShorts","goToMultilinks","goToTrends","goToAnalytics","triggeredFromDrawer","goToShopboard","goToInfluencers","goToMagicStore","createNewInfluencer","maxInfleuncers","_userDetails$recentAc","_userDetails$recentAc2","_userDetails$recentAc5","_userDetails$recentAc6","_data$map","loadedInfluencers","_userDetails$recentAc3","_userDetails$recentAc4","createNewMultilink","openSettingsPage","_userDetails$username","TbDeviceDesktopAnalytics","TbSettings2","hasAnalyticsPermission","renderRightSection","FiUsers","UserMenuListItem","subscriptedPricingPlan","UserMenu","minimized","navigateTo","getUserImage","getUserUsername","FaCaretDown","TrendsImage","strokeMiterlimit","DashboardSidebar","callback","showDiscardChangesDialog","openedMixin","transitions","create","easing","sharp","duration","enteringScreen","overflowX","closedMixin","leavingScreen","breakpoints","up","spacing","Drawer","MuiDrawer","shouldForwardProp","prop","flexShrink","FaRegCalendarCheck","DashboardLayout","checkWindowSize","rootElement","resizeObserver","ResizeObserver","getBackgroundColor","PricingPlan","isChangingPlan","setIsChangingPlan","upgrade","planName","store_subscription_plan","feature","GiConfirmed","PricingPlansPage","BaseTopBar","BaseLayout","AccountVerificationPage","isAccountVerified","setIsAccountVerified","verificationLoaderRef","verificationResultIndicatorRef","classList","IoIosCheckmarkCircle","IoCloseCircle","SignUpRequestPage","isProceeding","setIsProceeding","navigateToPaylinkshopSite","InfluencerItem","NoInfluencersFoundImage","FaPodcast","InfluencersPage","defaultSelectedInterval","influencersList","setInfluencersList","influencersAnalytics","setInfluencersAnalytics","isLoadingInfluencers","setIsLoadingInfluencers","isLoadingInfluencersAnalytics","setIsLoadingInfluencersAnalytics","shouldCheckForInfluncers","setShouldCheckForInfluncers","isInfluencerContentDialogOpen","setIsInfluencerContentDialogOpen","setSelectedInfluencers","addNewInfluencer","hasNoInfluencers","addInfluencer","activeInfluencers","activeWithData","influencersDataAnalytics","displayedInfluencers","inf","totalSalesSum","_influencer$totalSale","InfluencerMultiselectDropdown","_influencersAnalytics","_influencersAnalytics2","influencerAnalytics","ForgotPasswordPage","isInfluencer","merchantUsernameOrEmail","influencerUsernameOrEmail","dialogProperties","setDialogProperties","resetAllFields","showPasswordResetEmailSentDialog","showPasswordResetErrorDialog","ForgotInfluencerPassword","ForgotMerchantPassword","DontHaveAccount","LoginPage","isAbleToLogin","setIsAbleToLogin","isLoginInProcess","setIsLoginInProcess","loginFailed","setLoginFailed","shouldAutoLogin","setShouldAutoLogin","passwordInputRef","handleLogin","isSuccess","merchant","InfluencerLoginPage","AdminLoginPage","ShortsPage","isLoadingShorts","setIsLoadingShorts","isLoadingMoreShorts","setIsLoadingMoreShorts","defaultShorts","setDefaultShorts","shortSearchResult","setShortSearchResult","hasMoreShorts","setHasMoreShorts","shouldShowNoShorts","setShouldShowNoShorts","hasNoShorts","renderShortsContent","deleteShort","RegisterStorePage","isVerifyingStore","setIsVerifyingStore","isStoreVerified","setIsStoreVerified","setAuth","navigate","getLoginStoreNavigationUrl","authParam","_response$data$email","_response$data","isAbleToSignUp","registerAndConnectStore","_response$data2","_window","LoginStorePage","loginAndConnectStore","PaydinRadioButtonGroup","selectedValue","onSelectedValueChange","radioButtons","alignemnet","RadioGroup","radio","_radio$placement","_radio$disabled","FormControlLabel","control","Radio","labelPlacement","placement","AutoSwapRadioGroup","setAutoSwap","MultipleSelectHoizontalLine","setSelectedValue","_Object$keys3","icon","RadioButtonUncheckedIcon","checkedIcon","RadioButtonCheckedIcon","SettingsPage","_userDetails$settings39","_userDetails$settings40","_inputState$utmParams6","_inputState$utmParams7","_inputState$utmParams8","_inputState$utmParams9","_inputState$utmParams10","productVisionSensitivity","_userDetails$settings25","_userDetails$settings26","_userDetails$settings27","_userDetails$settings28","_userDetails$settings29","_userDetails$settings30","_userDetails$settings31","_userDetails$settings32","_userDetails$settings33","_userDetails$settings34","hasUTMParams","shouldTestUTMParams","setShouldTestUTMParams","saveBusinessSettings","finalShippingAndReturnUrl","shippingAndReturnUrl","product_search_sensitivity","_prev$settings","navigateToPricingPlans","_userDetails$settings16","_inputState$utmParams","_userDetails$settings17","_userDetails$settings18","_inputState$utmParams2","_userDetails$settings19","_userDetails$settings20","_inputState$utmParams3","_userDetails$settings21","_userDetails$settings22","_inputState$utmParams4","_userDetails$settings23","_userDetails$settings24","_inputState$utmParams5","_userDetails$settings35","_userDetails$settings36","_userDetails$settings37","_userDetails$settings38","sup","HorizontalCheckboxSelect","HomePageSection","MobileRecentActivitySection","PaydinMuiAccordion","header","expandedState","setExpandedState","allowZeroExpands","contentBackgroundColor","contentTopBorderColor","contentTopBorderWidthPx","headerPadding","contentPadding","headerContentArrowGapPx","MuiAccordion","disableGutters","square","accordionName","newExpanded","MuiAccordionSummary","MuiAccordionDetails","PaydinAccordion","openAccordionName","onExpanded","accordions","expandedAccordionName","setExpandedAccordionName","accordion","_accordion$name","_accordion$header","_accordion$content","_accordion$name2","_accordion$expandedSt","_accordion$setExpande","TodoList","tasks","expandedTaskName","onTaskClick","task","isDone","GoCheckCircleFill","buttonClickHandler","StoreOrdersTableRowView","viewLink","openShortContentDialog","_orderProducts$data","_rowData$linkDetails","_rowData$linkDetails2","_rowData$linkDetails3","linkDetails","linkImage","getLinkSource","_rowData$linkDetails6","_rowData$linkDetails7","_rowData$linkDetails8","_rowData$linkDetails9","_rowData$linkDetails10","_rowData$linkDetails11","_rowData$linkDetails12","_rowData$linkDetails13","_rowData$linkDetails14","_rowData$linkDetails15","_rowData$linkDetails16","_rowData$linkDetails17","_rowData$linkDetails18","_rowData$linkDetails19","_rowData$linkDetails20","_rowData$linkDetails21","_rowData$linkDetails22","_rowData$linkDetails23","_rowData$linkDetails4","_rowData$linkDetails5","source","SiShopify","StoreOrdersTableHeaderView","StoreOrdersTable","getStoreOrders","influencerProfileImage","storeOrderRow","_storeOrderRow$order_","_storeOrderRow$create","_storeOrderRow$curren","_storeOrderRow$influe","_storeOrderRow$order_2","_storeOrderRow$order_3","_storeOrderRow$produc","_storeOrderRow$total_","_storeOrderRow$link_d","_storeOrderRow$link_d2","_storeOrderRow$link_d3","_storeOrderRow$link_d4","_storeOrderRow$link_d5","_storeOrderRow$link_d6","_storeOrderRow$link_d7","_storeOrderRow$link_d8","_storeOrderRow$link_d9","_storeOrderRow$link_d10","_storeOrderRow$link_d11","_storeOrderRow$link_d12","influencer_profile_image_url","link_details","extractStoreOrderRowData","FloatingButton","clickFunction","shown","setShown","Slide","mountOnEnter","Fab","HomePage","_taskList$find","_userDetails$recentAc14","taskList","navigateToLogoAddition","navigateToThemeCustomization","navigateToShippingAndReturnURLAddition","navigateToURLParamsAddition","navigateToAnalyticsIDsAddition","hasAnalyticsIDs","recentActivitiesTab","setRecentActivitiesTab","isLoadingDisplayContent","setIsLoadingDisplayContent","isLoadingFinished","setIsLoadingFinished","recentActivitiesItems","setRecentActivitiesItems","mobileRecentActivitiesItems","setMobileRecentActivitiesItems","mobileRecentActivitiesLoadingState","setMobileRecentActivitiesLoadingState","expandedTask","setExpandedTask","loadLinksFromServer","getLinks","loadShortsFromServer","getShorts","loadInfluencersFromServer","getInfluencers","getInfluencersAnalytics","linksCount","_data$links","loadedLinks","shortsCount","_data$links2","loadedShorts","loadedInfluencersAnalytics","reloadAfterCreation","tabType","loadItemsCallback","createLink","createShort","_userDetails$recentAc12","_userDetails$recentAc13","isAbleToCreateFirstInfluencer","seeAllLinks","seeAllShorts","seeAllInfluencers","renderSecondaryButtons","renderLoaderContainer","isMobileActiveInfluencer","_userDetails$recentAc7","_userDetails$recentAc8","_userDetails$recentAc9","_userDetails$recentAc10","_userDetails$recentAc11","hasRemainingTasks","displayName","renderMobileNoRecentLinks","renderMobileNoRecentShorts","_mobileRecentActiviti","renderMobileRecentInfluencers","renderMobileNoRecentInfluencers","_influencersAnalytics3","_influencersAnalytics4","renderRecentActivityItem","noItemsData","getNoItemsData","renderItemsList","EventAvailableIcon","ProgressDialog","setHasDoneProcessing","progressValue","setProgressValue","close","BorderLinearProgress","LinearProgress","linearProgressClasses","colorPrimary","palette","grey","bar","IoMdClose","PostcardImage","SparkleSmartphoneImage","MenuCheckImage","SmartStoreVideo","MagicStorePage","isProgressDialogOpen","setIsProgressDialogOpen","hasFinishedProcessingImage","setHasFinishedProcessingImage","newLinkData","setNewLinkData","isContentDialogOpen","setIsContentDialogOpen","closeProgressDialog","alert","fileBlob","Blob","convertImageToPng","media","ProductSearchInMediaAPI","uploaded_media_url","selected_products","product_tag_result_ids","onApplyProductSearch","ShopboardSocials","instagramPostsCount","instagramUsername","tiktokPostsCount","tiktokUsername","pinterestPostsCount","pinterestUsername","ShopboardConnectComp","getSubtitle","ShopboardSocialMediaPostProduct","ShopboardSocialMediaPostProductsTag","taggedProducts","isAITagged","onTagProducts","FiPlusCircle","AiBadge","aiBadgeSvg","ShopboardSocialMediaPost","setVisible","toggleVisibility","onTagProductsClicked","AiFillEye","AiFillEyeInvisible","TAB_INDEX_SOCIAL","ShopboardPage","_userDetails$shopboar36","_userDetails$shopboar37","_userDetails$shopboar38","_userDetails$shopboar39","_userDetails$shopboar40","_userDetails$shopboar41","_userDetails$shopboar42","_userDetails$shopboar43","_userDetails$shopboar44","_userDetails$shopboar45","_userDetails$shopboar46","_userDetails$shopboar47","_userDetails$shopboar48","_userDetails$shopboar49","_userDetails$shopboar50","_userDetails$shopboar51","_userDetails$shopboar52","_userDetails$shopboar53","_userDetails$shopboar54","_userDetails$shopboar55","_userDetails$shopboar56","_userDetails$shopboar57","_userDetails$shopboar58","_userDetails$shopboar59","_userDetails$shopboar60","_userDetails$shopboar61","_userDetails$shopboar62","_userDetails$shopboar63","_userDetails$shopboar64","_userDetails$shopboar65","_userDetails$shopboar66","_userDetails$shopboar67","_userDetails$shopboar68","_userDetails$shopboar69","_userDetails$shopboar70","_userDetails$shopboar71","_userDetails$shopboar72","_userDetails$shopboar73","_userDetails$shopboar74","_userDetails$shopboar75","_userDetails$shopboar76","_userDetails$shopboar77","_userDetails$shopboar78","_userDetails$shopboar79","_userDetails$shopboar80","_userDetails$shopboar81","_userDetails$shopboar82","_userDetails$shopboar83","_userDetails$shopboar84","_userDetails$shopboar85","_userDetails$shopboar86","tabContent","setTabContent","postListState","setPostListState","tagProductsDialogState","setTagProductsDialogState","hasMoreDataState","setHasMoreDataState","isLoadingMoreData","setIsLoadingMoreData","isLoadingShopboardStatus","setIsLoadingShopboardStatus","isLoadingShopboardPosts","setIsLoadingShopboardPosts","isLoadingSyncSocialButton","setIsLoadingSyncSocialButton","shopboardContentRef","noConnectionsContentTitlesRef","postListRef","topSectionRef","analyticsRef","socialsRef","fetchPosts","extractedPosts","postsToDisplay","triggerSyncJob","getCurrentlySelectedSocial","isInstagramTabSelected","isTiktokTabSelected","isPinterestTabSelected","renderConnectedSyncingTabContent","handlePostsScroll","_postListRef$current","_tabsRef$current","_analyticsRef$current","_topSectionRef$curren","copyShopboardLink","newTab","focus","openUrl","GoSync","socialMediasWaiting","syncingSocials","getSyncingSocials","loadCurrentMediaPosts","_postListState$SHOPBO","_postListState$SHOPBO2","_postListState$SHOPBO3","renderMobileNoConnectionsContent","renderMobileContent","ShopboardAuthPage","queryParams","useLocation","useQueryParams","useParams","get","MultilinksImage2","MultilinkItem","onUpdateMultilink","isMultilinkDeletionDialogOpen","setIsMultilinkDeletionDialogOpen","multilinkContentDialogState","setMultilinkContentDialogState","multilinkItemTitlesContainerRef","multilinkItemTitleRef","editMultilink","previewMultilink","openDeleteMultilinkConfirmationDialog","_multilinkItemTitlesC","TbArrowsSplit","MultilinksPage","isLoadingMultilinks","setIsLoadingMultilinks","isLoadingMoreMultilinks","setIsLoadingMoreMultilinks","defaultMultilinks","setDefaultMultilinks","multilinkSearchResult","setMultilinkSearchResult","hasMoreMultilinks","setHasMoreMultilinks","shouldShowNoMultilinks","setShouldShowNoMultilinks","isMultilinkContentDialogOpen","setIsMultilinkContentDialogOpen","multilinksListRef","setMultilinks","multilinks","onAddMultilinkButtonClick","hasNoMultilinks","renderMultilinksContent","handleMultilinksScroll","_multilinksListRef$cu2","_multilinksListRef$cu","App","isRecovery","setIsRecovery","isError","setIsError","elHead","getElementsByTagName","elStyle","_window2","BrowserRouter","path","exact","resources","he","translation","en","i18n","use","LanguageDetector","initReactI18next","init","lng","fallbackLng","interpolation","escapeValue","ReactDOM","createRoot"],"mappings":"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","file":"static/js/main.36fb4112.chunk.js","sourcesContent":["export const HTTPS_HOST_URL_PREFIX = 'https://'\nexport const ADMIN_PAGES_URL_PREFIX = '/admin'\nexport const LINKS_URL_PREFIX = '/links'\nexport const MULTILINKS_URL_PREFIX = '/multilinks'\nexport const SHORTS_URL_PREFIX = '/shorts'\nexport const SPECIFIC_SHORT_URL_PREFIX = SHORTS_URL_PREFIX + '/:shortId'\nexport const SPECIFIC_LINK_URL_PREFIX = LINKS_URL_PREFIX + '/:linkId'\nexport const PREVIEW_LINK_PAGE_SUFFIX = '/preview'\nexport const PREVIEW_INFLUECNER_PAGE_SUFFIX = '/preview'\nexport const EDIT_URL_SUFFIX = '/edit'\nexport const INFLUENCERS_PAGE_URL_PREFIX = '/influencers'\nexport const SPECIFIC_INFLUENCER_URL_PREFIX = '/:influencerUsername'\nexport const CREATE_INFLUENCER_URL_SUFFIX = '/new'\nexport const INFLUENCERS_URL_PREFIX = ADMIN_PAGES_URL_PREFIX + INFLUENCERS_PAGE_URL_PREFIX\n\nexport const PAYLINK_SITE_URL = 'https://www.shopeaks.com'\n\nexport const HOME_PAGE_URL = ADMIN_PAGES_URL_PREFIX + '/home'\nexport const SHOPBOARD_AUTH_PAGE_URL = '/:social/auth'\nexport const SHOPBOARD_PAGE_URL = ADMIN_PAGES_URL_PREFIX + '/shopboard'\nexport const MAGIC_STORE_PAGE_URL = ADMIN_PAGES_URL_PREFIX + '/magic-store'\nexport const GOTO_HOMEPAGE_URLS = ['/', ADMIN_PAGES_URL_PREFIX]\n\nexport const LOGIN_PAGE_URL = '/login'\nexport const LOGIN_STORE_PAGE_URL = '/login-store'\nexport const LOGIN_INFLUENCER_PAGE_URL = '/login/influencer'\n\nexport const SIGN_UP_PAGE_URL = '/register'\nexport const REGISTER_STORE_PAGE_URL = '/register-store'\nexport const SIGN_UP_REQUEST_PAGE_URL = '/register-request'\n\nexport const SHORTS_PAGE_URL = ADMIN_PAGES_URL_PREFIX + SHORTS_URL_PREFIX\n\nexport const LINKS_PAGE_URL = ADMIN_PAGES_URL_PREFIX + LINKS_URL_PREFIX\nexport const PREVIEW_LINK_PAGE_URL = ADMIN_PAGES_URL_PREFIX + SPECIFIC_LINK_URL_PREFIX + PREVIEW_LINK_PAGE_SUFFIX\n\nexport const INFLUENCERS_PAGE_URL = INFLUENCERS_URL_PREFIX\n\nexport const MULTILINKS_PAGE_URL = ADMIN_PAGES_URL_PREFIX + MULTILINKS_URL_PREFIX\n\nexport const TRENDS_PAGE_URL = ADMIN_PAGES_URL_PREFIX + '/trends'\n\nexport const ANALYTICS_PAGE_URL = ADMIN_PAGES_URL_PREFIX + '/analytics'\n\nexport const ACCOUNT_PAGE_URL = ADMIN_PAGES_URL_PREFIX + '/my-account'\n\nexport const FORGOT_PASSWORD_PAGE_URL = '/forgot-password'\n\nexport const INFLUENCER_FORGOT_PASSWORD_PAGE_URL = '/forgot-password/influencer'\n\nexport const CREATE_NEW_PASSWORD_PAGE_URL = '/reset-password'\n\nexport const EXTERNAL_AUTH_PAGE_URL = '/auth'\n\nexport const PRIVACY_POLICY_PAGE_URL = '/privacy-policy'\nexport const PRIVACY_POLICY_PAYLINK_SITE_URL = PAYLINK_SITE_URL + '/privacy'\n\nexport const TERMS_PAGE_URL = '/terms'\nexport const TERMS_PAYLINK_SITE_URL = PAYLINK_SITE_URL + '/terms'\n\nexport const SETTINGS_PAGE_URL = `${ADMIN_PAGES_URL_PREFIX}/settings`\n\nexport const APPEARANCE_PAGE_URL = `${ADMIN_PAGES_URL_PREFIX}/appearance`\n\nexport const PRICING_PLANS_PAGE_URL = '/pricing-plans'\n\nexport const SHOPIFY_HELP_PAGE_URL = '/help/shopify'\n\nexport const ACCOUNT_VERIFICATION_PAGE_URL = '/verify-account'\n\nexport const ROLE_QUERY_PARAMETER_KEY = 'role'\nexport const ROLE_QUERY_PARAMETER_EDIT_VALUE = 'edit'\nexport const ROLE_QUERY_PARAMETER_CREATE_VALUE = 'create'\nexport const LINK_ID_QUERY_PARAMETER_KEY = 'linkId'\nexport const AUTH_QUERY_PARAMETER_KEY = 'auth'\nexport const RESET_PASSWORD_TOKEN_QUERY_PARAMETER_KEY = 'token'\nexport const PRODUCT_STATUS_QUERY_PARAMETER = 'product_status'\nexport const IS_OUT_OF_STOCK_QUERY_PARAMETER = 'include_out_of_stock'\nexport const IS_SEARCH_IN_TAGS_QUERY_PARAMETER = 'include_search_tags'\nexport const LOGIN_INFLUENCER_MERCHANT_NAME_QUERY_PARAMETER = 'merchant'\nexport const LOGIN_INFLUENCER_INFLUENCER_USERNAME_QUERY_PARAMETER = 'influencer'\nexport const LOGIN_INFLUENCER_INFLUENCER_PASSWORD_QUERY_PARAMETER = 'password'\nexport const SELECTED_INFLUENCER_USERNAME_QUERY_PARAMETER = 'selected_influencer_username'\nexport const SHOPBOARD_AUTH_PAGE_CODE_QUERY_PARAMETER = 'code'","// import { isMobile as deviceDetectMobile, isTablet } from \"react-device-detect\";\n\n// Dynamically determine if it's mobile, excluding tablets with width > 1000px\n\n// const isMobile = deviceDetectMobile && !(isTablet && window.innerWidth > 1000);\nconst isMobile = window.innerWidth < 1000;\n\nexport { isMobile };","import React from 'react'\n\nexport default function ShortsImage(props) {\n return (\n <svg\n {...props}\n fill=\"none\"\n viewBox=\"0 0 20 20\"\n height=\"15\"\n width=\"15\"\n >\n <path\n fill=\"#273144\"\n fillRule=\"evenodd\"\n d=\"M4.167 10.833H7.5c.917 0 1.667-.75 1.667-1.666v-5c0-.917-.75-1.667-1.667-1.667H4.167C3.25 2.5 2.5 3.25 2.5 4.167v5c0 .916.75 1.666 1.667 1.666zm0-1.666v-5H7.5v5H4.167zM4.167 17.5H7.5c.917 0 1.667-.75 1.667-1.667v-1.666c0-.917-.75-1.667-1.667-1.667H4.167c-.917 0-1.667.75-1.667 1.667v1.666c0 .917.75 1.667 1.667 1.667zm0-1.667v-1.666H7.5v1.666H4.167zM15.833 7.5H12.5c-.917 0-1.667-.75-1.667-1.667V4.167c0-.917.75-1.667 1.667-1.667h3.333c.917 0 1.667.75 1.667 1.667v1.666c0 .917-.75 1.667-1.667 1.667zM12.5 4.167v1.666h3.333V4.167H12.5zM12.5 17.5h3.333c.917 0 1.667-.75 1.667-1.667v-5c0-.916-.75-1.666-1.667-1.666H12.5c-.917 0-1.667.75-1.667 1.666v5c0 .917.75 1.667 1.667 1.667zm0-1.667v-5h3.333v5H12.5z\"\n clipRule=\"evenodd\"></path>\n </svg>\n )\n}","import { ANALYTICS_PAGE_RETROACTIVE_DATA_REPORT_TIME_INTERVALS_NAMES, TIME_UNITS } from \"constants/general.constants\"\n\nexport function calculateDateRange(timeIntervalName, timeIntervalTimeUnit, timeIntervalTimeValue) {\n let todayDate = null\n let targetDate = null\n if (timeIntervalName !== ANALYTICS_PAGE_RETROACTIVE_DATA_REPORT_TIME_INTERVALS_NAMES.LIFETIME) {\n todayDate = new Date()\n targetDate = addTimeToDate(todayDate, timeIntervalTimeUnit, -timeIntervalTimeValue)\n }\n\n return [targetDate, todayDate]\n}\n\nexport function getAnalyticsDateString(date) {\n if (!date)\n return null\n return `${date.getFullYear()}-${date.getMonth() + 1 < 10 ? `0${date.getMonth() + 1}` : date.getMonth() + 1}-${date.getDate() < 10 ? `0${date.getDate()}` : date.getDate()}`\n}\n\nexport function addTimeToDate(date, timeUnit, value) {\n const targetDate = new Date(date)\n switch (timeUnit) {\n case TIME_UNITS.SECOND:\n targetDate.setSeconds(targetDate.getSeconds() + value)\n break\n\n case TIME_UNITS.MINUTE:\n targetDate.setMinutes(targetDate.getMinutes() + value)\n break\n\n case TIME_UNITS.HOUR:\n targetDate.setHours(targetDate.getHours() + value)\n break\n\n case TIME_UNITS.DAY:\n targetDate.setDate(targetDate.getDate() + value)\n break\n\n case TIME_UNITS.MONTH:\n targetDate.setMonth(targetDate.getMonth() + value)\n targetDate.setDate(targetDate.getDate() + 1)\n break;\n\n default: // TIME_UNITS.YEAR\n targetDate.setFullYear(targetDate.getFullYear() + value)\n targetDate.setDate(targetDate.getDate() + 1)\n break\n }\n\n return targetDate\n}\n\n/**\n * Turns a given date into a string description of it in the following format:\n * MMM dd, YYYY - e.g., Jan 3, 2013; Sep 6, 2021 etc.\n * @param {Date} date - The date to format\n * @returns a string representation of the formatted date\n */\nexport function getFormattedDate(date) {\n return new Intl.DateTimeFormat(\"en-US\", { day: 'numeric', month: 'short', year: 'numeric' }).format(date)\n}\n\n/**\n * Turns a given date into a string description of it in the following format:\n * MMM dd, YY - e.g., Jan 3, 13; Sep 6, 21 etc.\n * @param {Date} date - The date to format\n * @returns a string representation of the formatted date\n */\nexport function getFormattedShortYearDate(date) {\n return new Intl.DateTimeFormat(\"en-US\", { day: 'numeric', month: 'short', year: '2-digit' }).format(date)\n}\n\n/**\n * Returns a string representation of a date range from \"fromDate\" to \"toDate\".\n * It formats each given date using {@link getFormattedShortYearDate} function and returns their range.\n * @param {string} fromDate - The date at the start of the range\n * @param {string} toDate - The date at the end of the range\n */\nexport function getFormattedShortYearDateRange(fromDate, toDate) {\n return `${getFormattedShortYearDate(fromDate)} - ${getFormattedShortYearDate(toDate)}`\n}\n\n/**\n * Turns a given date into a string description of it in the following format:\n * MMM dd - e.g., Jan 3, Sep 6 etc.\n * @param {Date} date - The date to format\n * @returns a string representation of the formatted date\n */\nexport function getFormattedShortDate(date) {\n return new Intl.DateTimeFormat(\"en-US\", { day: 'numeric', month: 'short' }).format(date)\n}\n\n/**\n * Returns a string representation of a date range from \"fromDate\" to \"toDate\".\n * It formats each given date using {@link getFormattedDate} function and returns their range.\n * @param {string} fromDate - The date at the start of the range\n * @param {string} toDate - The date at the end of the range\n*/\nexport function getFormattedDateRange(fromDate, toDate) {\n if (fromDate === null || toDate === null) {\n return `${fromDate ? getFormattedDate(fromDate) : ''} - ${toDate ? getFormattedDate(toDate) : ''}`\n }\n \n return `${getFormattedDate(fromDate)} - ${getFormattedDate(toDate)}`\n}\n\n/**\n * Returns a string representation of a date range from \"fromDate\" to \"toDate\".\n * It formats each given date using {@link getFormattedShortDate} function and returns their range.\n * If the start & end date has a different year, the formatted dates will have 2 digit year\n * @param {string} fromDate - The date at the start of the range\n * @param {string} toDate - The date at the end of the range\n*/\nexport function getFormattedShortDateRange(fromDate, toDate) {\n if (fromDate === null || toDate === null || fromDate.getFullYear() === toDate.getFullYear()) {\n return `${fromDate ? getFormattedShortDate(fromDate) : ''} - ${toDate ? getFormattedShortDate(toDate) : ''}`\n }\n \n return getFormattedShortYearDateRange(fromDate, toDate)\n}\n\nexport function getFormattedDateTime(date, shouldShowYear = true) {\n return new Intl.DateTimeFormat(\"en-US\", { ...(shouldShowYear ? { year: \"numeric\" } : {}), month: \"short\", day: \"numeric\", hour: \"numeric\", minute: \"numeric\", hour12: false }).format(date)\n}\n\nexport function getTimezone() {\n return Intl.DateTimeFormat().resolvedOptions().timeZone\n}","export default __webpack_public_path__ + \"static/media/woman_display_image.91e240e6.png\";","import React from 'react'\n\nexport default function InsightsImage(props) {\n return (\n <svg {...props} id=\"Layer_1\" height=\"512\" viewBox=\"0 0 512 512\" width=\"512\">\n <g>\n <path d=\"m63.021 465.151h43.499c22.357 0 40.546-18.189 40.546-40.546v-183.933c0-22.357-18.189-40.546-40.546-40.546h-43.499c-22.357 0-40.546 18.189-40.546 40.546v183.932c0 22.358 18.189 40.547 40.546 40.547zm-10.546-224.479c0-5.815 4.731-10.546 10.546-10.546h43.499c5.815 0 10.546 4.731 10.546 10.546v183.932c0 5.815-4.731 10.546-10.546 10.546h-43.499c-5.815 0-10.546-4.731-10.546-10.546z\" />\n <path d=\"m234.251 465.151h43.499c22.357 0 40.546-18.189 40.546-40.546v-257.439c0-22.357-18.189-40.546-40.546-40.546h-43.499c-22.357 0-40.546 18.189-40.546 40.546v257.439c0 22.357 18.189 40.546 40.546 40.546zm-10.546-297.985c0-5.815 4.731-10.546 10.546-10.546h43.499c5.815 0 10.546 4.731 10.546 10.546v257.439c0 5.815-4.731 10.546-10.546 10.546h-43.499c-5.815 0-10.546-4.731-10.546-10.546z\" />\n <path d=\"m405.48 465.151h43.499c22.357 0 40.546-18.189 40.546-40.546v-337.209c0-22.357-18.189-40.546-40.546-40.546h-43.499c-22.357 0-40.546 18.189-40.546 40.546v337.209c0 22.357 18.189 40.546 40.546 40.546zm-10.546-377.755c0-5.815 4.731-10.546 10.546-10.546h43.499c5.815 0 10.546 4.731 10.546 10.546v337.209c0 5.815-4.731 10.546-10.546 10.546h-43.499c-5.815 0-10.546-4.731-10.546-10.546z\" />\n </g>\n </svg>\n )\n}","import React from 'react'\n\nexport default function ShoppingBagImage1(props) {\n return (\n <svg {...props} fill=\"none\" height=\"24\" viewBox=\"0 0 24 24\" width=\"24\">\n <g fill=\"rgb(0,0,0)\">\n <path d=\"m5 7.75c-.13807 0-.25.11193-.25.25v13c0 .1381.11193.25.25.25h14c.1381 0 .25-.1119.25-.25v-13c0-.13807-.1119-.25-.25-.25zm-1.75.25c0-.9665.7835-1.75 1.75-1.75h14c.9665 0 1.75.7835 1.75 1.75v13c0 .9665-.7835 1.75-1.75 1.75h-14c-.9665 0-1.75-.7835-1.75-1.75z\" />\n <path d=\"m12 2.75c-1.5188 0-2.75 1.23122-2.75 2.75v3.5c0 .41421-.33579.75-.75.75s-.75-.33579-.75-.75v-3.5c0-2.34721 1.90279-4.25 4.25-4.25 2.3472 0 4.25 1.90279 4.25 4.25v3.5c0 .41421-.3358.75-.75.75s-.75-.33579-.75-.75v-3.5c0-1.51878-1.2312-2.75-2.75-2.75z\" />\n </g>\n </svg>\n // <svg {...props} fill=\"none\" height=\"512\" viewBox=\"0 0 32 32\" width=\"512\">\n // <g stroke=\"rgb(0,0,0)\">\n // <path d=\"m11 13.25v-2.5c0-3.03757 2.2386-5.5 5-5.5s5 2.46243 5 5.5v2.5\" strokeLinecap=\"round\" />\n // <path d=\"m7.3884 12.9119c.04664-.7928.7032-1.4119 1.49741-1.4119h14.22839c.7942 0 1.4508.6191 1.4974 1.4119l.6402 10.8826c.1182 2.0103-1.4802 3.7055-3.494 3.7055h-11.5156c-2.0138 0-3.61221-1.6952-3.49395-3.7055z\" />\n // </g>\n // </svg>\n )\n}\n","import React from 'react'\n\nexport default function ShoppingBagImage2(props) {\n return (\n <svg {...props} viewBox=\"0 0 64 64\">\n <path d=\"m7.53 62h46.94a2 2 0 0 0 1.47-.64 2 2 0 0 0 .52-1.52l-3.46-43a2 2 0 0 0 -2-1.84h-7a13 13 0 0 0 -26 0h-7a2 2 0 0 0 -2 1.84l-3.47 43a2 2 0 0 0 .52 1.52 2 2 0 0 0 1.48.64zm23.47-56a9 9 0 0 1 9 9h-18a9 9 0 0 1 9-9zm-18.16 13h36.32l3.14 39h-42.6z\" />\n </svg>\n )\n}\n","import React from 'react'\n\nexport default function ShoppingBagImage3(props) {\n return (\n <svg {...props} id=\"dfew\" enableBackground=\"new 0 0 512 512\" height=\"512\" viewBox=\"0 0 512 512\" width=\"512\">\n <g>\n <path d=\"m387.525 128h-41.925v-38.4c0-49.4-40.2-89.6-89.6-89.6s-89.6 40.2-89.6 89.6v38.4h-41.925c-33.425 0-61.45 26.1-63.838 59.438l-18.287 256c-1.262 17.662 4.925 35.212 17 48.162 12.063 12.962 29.125 20.4 46.838 20.4h299.625c17.712 0 34.775-7.438 46.838-20.4 12.075-12.95 18.262-30.5 17-48.162l-18.287-256c-2.389-33.338-30.414-59.438-63.839-59.438zm-195.525-38.4c0-35.287 28.713-64 64-64s64 28.713 64 64v38.4h-128zm241.925 384.562c-7.35 7.888-17.325 12.238-28.113 12.238h-299.625c-10.787 0-20.763-4.35-28.113-12.238-7.338-7.888-10.95-18.15-10.187-28.9l18.287-256c1.425-20 18.25-35.662 38.3-35.662h263.05c20.05 0 36.875 15.662 38.3 35.663l18.287 256c.764 10.749-2.849 21.012-10.186 28.899z\" fill=\"rgb(0,0,0)\" />\n </g>\n </svg>\n )\n}\n","import React from 'react'\n\nexport default function InfluencersImage(props) {\n return (\n <svg \n {...props} \n x=\"0px\" \n y=\"0px\"\n viewBox=\"0 0 477.869 477.869\">\n <g>\n <g>\n <path d=\"M387.415,233.496c48.976-44.029,52.987-119.424,8.958-168.4C355.991,20.177,288.4,12.546,239.02,47.332\n c-53.83-37.99-128.264-25.149-166.254,28.68c-34.859,49.393-27.259,117.054,17.689,157.483\n c-55.849,29.44-90.706,87.481-90.453,150.613v51.2c0,9.426,7.641,17.067,17.067,17.067h443.733\n c9.426,0,17.067-7.641,17.067-17.067v-51.2C478.121,320.976,443.264,262.935,387.415,233.496z M307.201,59.842\n c47.062-0.052,85.256,38.057,85.309,85.119c0.037,33.564-19.631,64.023-50.237,77.799c-1.314,0.597-2.628,1.143-3.959,1.707\n c-4.212,1.699-8.556,3.051-12.988,4.045c-0.853,0.188-1.707,0.29-2.577,0.461c-4.952,0.949-9.977,1.457-15.019,1.519\n c-2.27,0-4.557-0.171-6.827-0.375c-0.853,0-1.707,0-2.56-0.171c-9.7-1.142-19.136-3.923-27.904-8.226\n c-0.324-0.154-0.7-0.137-1.024-0.273c-1.707-0.819-3.413-1.536-4.932-2.458c0.137-0.171,0.222-0.358,0.358-0.529\n c7.826-10.056,13.996-21.296,18.278-33.297l0.529-1.434c1.947-5.732,3.459-11.602,4.523-17.562c0.154-0.87,0.273-1.707,0.41-2.645\n c0.987-6.067,1.506-12.2,1.553-18.347c-0.049-6.135-0.568-12.257-1.553-18.313c-0.137-0.887-0.256-1.707-0.41-2.645\n c-1.064-5.959-2.576-11.83-4.523-17.562l-0.529-1.434c-4.282-12.001-10.453-23.241-18.278-33.297\n c-0.137-0.171-0.222-0.358-0.358-0.529C277.449,63.831,292.19,59.843,307.201,59.842z M85.335,145.176\n c-0.121-47.006,37.886-85.21,84.892-85.331c22.034-0.057,43.232,8.434,59.134,23.686c0.99,0.956,1.963,1.911,2.918,2.901\n c2.931,3.071,5.634,6.351,8.09,9.813c0.751,1.058,1.434,2.185,2.133,3.277c2.385,3.671,4.479,7.523,6.263,11.52\n c0.427,0.973,0.751,1.963,1.126,2.935c1.799,4.421,3.215,8.989,4.233,13.653c0.12,0.512,0.154,1.024,0.256,1.553\n c2.162,10.597,2.162,21.522,0,32.119c-0.102,0.529-0.137,1.041-0.256,1.553c-1.017,4.664-2.433,9.232-4.233,13.653\n c-0.375,0.973-0.7,1.963-1.126,2.935c-1.786,3.991-3.88,7.837-6.263,11.503c-0.7,1.092-1.382,2.219-2.133,3.277\n c-2.455,3.463-5.159,6.742-8.09,9.813c-0.956,0.99-1.929,1.946-2.918,2.901c-6.91,6.585-14.877,11.962-23.569,15.906\n c-1.382,0.631-2.782,1.212-4.198,1.707c-4.114,1.633-8.347,2.945-12.663,3.925c-1.075,0.239-2.185,0.375-3.277,0.563\n c-4.634,0.863-9.333,1.336-14.046,1.417h-1.877c-4.713-0.08-9.412-0.554-14.046-1.417c-1.092-0.188-2.202-0.324-3.277-0.563\n c-4.316-0.98-8.55-2.292-12.663-3.925c-1.417-0.563-2.816-1.143-4.198-1.707C105.013,209.057,85.374,178.677,85.335,145.176z\n M307.201,418.242H34.135v-34.133c-0.25-57.833,36.188-109.468,90.76-128.614c29.296,12.197,62.249,12.197,91.546,0\n c5.698,2.082,11.251,4.539,16.623,7.356c3.55,1.826,6.827,3.908,10.24,6.007c2.219,1.382,4.471,2.731,6.605,4.25\n c3.294,2.338,6.4,4.881,9.455,7.492c1.963,1.707,3.908,3.413,5.751,5.12c2.816,2.662,5.461,5.478,8.004,8.363\n c1.826,2.082,3.601,4.198,5.291,6.383c2.236,2.867,4.369,5.803,6.349,8.823c1.707,2.56,3.226,5.222,4.727,7.885\n c1.707,2.935,3.277,5.871,4.71,8.926c1.434,3.055,2.697,6.4,3.925,9.66c1.075,2.833,2.219,5.649,3.106,8.533\n c1.195,3.959,2.031,8.055,2.867,12.151c0.512,2.423,1.178,4.796,1.553,7.253c1.011,6.757,1.53,13.579,1.553,20.412V418.242z\n M443.735,418.242h-102.4v-34.133c0-5.342-0.307-10.633-0.785-15.872c-0.137-1.536-0.375-3.055-0.546-4.591\n c-0.461-3.772-0.99-7.509-1.707-11.213c-0.307-1.581-0.631-3.169-0.973-4.762c-0.819-3.8-1.769-7.566-2.85-11.298\n c-0.358-1.229-0.683-2.475-1.058-3.686c-4.779-15.277-11.704-29.797-20.565-43.127l-0.666-0.973\n c-2.935-4.358-6.07-8.573-9.404-12.646l-0.119-0.154c-3.413-4.232-7.117-8.346-11.008-12.237c0.222,0,0.461,0,0.7,0\n c4.816,0.633,9.666,0.975,14.524,1.024h0.939c4.496-0.039,8.985-0.33,13.449-0.87c1.399-0.171,2.782-0.427,4.181-0.649\n c3.63-0.557,7.214-1.28,10.752-2.167c1.007-0.256,2.031-0.495,3.055-0.785c4.643-1.263,9.203-2.814,13.653-4.642\n c54.612,19.127,91.083,70.785,90.829,128.649V418.242z\"/>\n </g>\n </g>\n <g>\n </g>\n <g>\n </g>\n <g>\n </g>\n <g>\n </g>\n <g>\n </g>\n <g>\n </g>\n <g>\n </g>\n <g>\n </g>\n <g>\n </g>\n <g>\n </g>\n <g>\n </g>\n <g>\n </g>\n <g>\n </g>\n <g>\n </g>\n <g>\n </g>\n </svg>\n\n )\n}","import { isMobile } from 'utils/deviceUtils'\nimport {\n ACCOUNT_PAGE_URL,\n ANALYTICS_PAGE_URL,\n CREATE_NEW_PASSWORD_PAGE_URL,\n FORGOT_PASSWORD_PAGE_URL,\n HOME_PAGE_URL,\n INFLUENCERS_PAGE_URL,\n INFLUENCER_FORGOT_PASSWORD_PAGE_URL,\n LINKS_PAGE_URL,\n LOGIN_INFLUENCER_PAGE_URL,\n LOGIN_PAGE_URL,\n LOGIN_STORE_PAGE_URL,\n MAGIC_STORE_PAGE_URL,\n MULTILINKS_PAGE_URL,\n PRICING_PLANS_PAGE_URL,\n PRIVACY_POLICY_PAGE_URL,\n REGISTER_STORE_PAGE_URL,\n SHOPBOARD_PAGE_URL,\n SHORTS_PAGE_URL,\n SIGN_UP_PAGE_URL,\n SIGN_UP_REQUEST_PAGE_URL,\n TERMS_PAGE_URL,\n} from \"./routes.constants\"\nimport { BiLink } from \"react-icons/bi\"\nimport ShortsImage from \"embeddedImages/ShortsImage\"\nimport { addTimeToDate, calculateDateRange } from \"utils/dateUtils\"\nimport ProductImageStyleDisplayImage from 'assets/woman_display_image.png'\nimport InsightsImage from \"embeddedImages/InsightsImage\"\nimport ShoppingBagImage1 from \"embeddedImages/ShoppingBagImage1\"\nimport ShoppingBagImage2 from \"embeddedImages/ShoppingBagImage2\"\nimport ShoppingBagImage3 from \"embeddedImages/ShoppingBagImage3\"\nimport { LiaShoppingBagSolid } from \"react-icons/lia\"\nimport InfluencersImage from \"embeddedImages/InfluencersImage\"\n\nexport const REQUEST_TIMEOUT_MILLISECONDS = 20000\nexport const IMAGE_UPLOAD_REQUEST_TIMEOUT_MILLISECONDS = 60000\nexport const TOP_BAR_HEIGHT_PX = 50\nexport const APPLICATION_RECOVERY_TIMEOUT_MILISECONDS = 20000\nexport const ANIMATIED_STRING_LOADER_ANIMATION_DURATION_SECONDS = 0.25\nexport const APPLICATION_READY_TIMEOUT_MILISECONDS = 500\nexport const MAX_ITEMS_SEARCH_RESULT_NUMBER = 50\n\nexport const SHOPEAKS_CDN_DOMAIN = 'cdn.paylink.cloudfront.payli.in'\n\nconst APPLICATION_RESOURCES_DOMAIN = 'https://cdn.paylink.cloudfront.payli.in/application_resources'\nexport const SHOPEAKS_LOGO_URL = APPLICATION_RESOURCES_DOMAIN + \"/shopeaks-logo.webp\"\nexport const SHOPEAKS_LOGO_WHITE_URL = APPLICATION_RESOURCES_DOMAIN + \"/shopeaks-logo-white.webp\"\nexport const SHOPEAKS_SMALL_LOGO_URL = APPLICATION_RESOURCES_DOMAIN + \"/shopeaks_icon.webp\"\nexport const SHOPEAKS_SMALL_LOGO_WHITE_URL = APPLICATION_RESOURCES_DOMAIN + \"/shopeaks_icon.webp\"\nexport const NO_IMAGE_PLACEHOLDER_URL = APPLICATION_RESOURCES_DOMAIN + \"/no_image.webp\"\nexport const SHOPIFY_LOGO_URL = APPLICATION_RESOURCES_DOMAIN + \"/shopify-logo.svg\"\nexport const SHORTS_LOGO_URL = APPLICATION_RESOURCES_DOMAIN + \"/shorts_icon.svg\"\nexport const NO_IMAGE_GLOBE_PLACEHOLDER_URL = APPLICATION_RESOURCES_DOMAIN + \"/short_link_icon.png\"\n\nexport const WELCOME_PAGE_FIRST_SECTION_IMAGE_URL = APPLICATION_RESOURCES_DOMAIN + '/WelcomePage1.png'\nexport const WELCOME_PAGE_SECOND_SECTION_IMAGE_URL = APPLICATION_RESOURCES_DOMAIN + '/WelcomePage2.png'\nexport const WELCOME_PAGE_THIRD_SECTION_IMAGE_URL = APPLICATION_RESOURCES_DOMAIN + '/WelcomePage3.jpg'\n\nexport const HOME_PAGE_TODO_TASK_LOGO_IMAGE_URL = APPLICATION_RESOURCES_DOMAIN + '/todo-logo.png'\nexport const HOME_PAGE_TODO_TASK_ANALYTICS_IMAGE_URL = APPLICATION_RESOURCES_DOMAIN + '/todo-analytic.png'\nexport const HOME_PAGE_TODO_TASK_INSTANT_IMAGE_URL = APPLICATION_RESOURCES_DOMAIN + '/todo-instant.png'\nexport const HOME_PAGE_TODO_TASK_SHIPPING_IMAGE_URL = APPLICATION_RESOURCES_DOMAIN + '/todo-shipping.png'\nexport const HOME_PAGE_TODO_TASK_UTM_IMAGE_URL = APPLICATION_RESOURCES_DOMAIN + '/todo-utm.png'\n\nexport const SHOPBOARD_PAGE_IMAGE = APPLICATION_RESOURCES_DOMAIN + '/Shopboard.png'\n\nexport const INSTAGRAM_LOGO_URL = APPLICATION_RESOURCES_DOMAIN + '/instagram_color.svg'\nexport const TIKTOK_LOGO_URL = APPLICATION_RESOURCES_DOMAIN + '/tik-tok_color.svg'\nexport const PINTEREST_LOGO_URL = APPLICATION_RESOURCES_DOMAIN + '/pinterest_color.svg'\n\nexport const INSTAGRAM_BLACK_WHITE_LOGO_URL = APPLICATION_RESOURCES_DOMAIN + '/instagram_black.svg'\nexport const TIKTOK_BLACK_WHITE_LOGO_URL = APPLICATION_RESOURCES_DOMAIN + '/tik-tok_black.svg'\nexport const PINTEREST_BLACK_WHITE_LOGO_URL = APPLICATION_RESOURCES_DOMAIN + '/pinterest_black.svg'\n\nexport const FREE_MODE_DIALOG_IMAGE_URL = APPLICATION_RESOURCES_DOMAIN + '/paylinkshop-exmple.png'\n\nexport const ADMIN_PAGE_MENU_OPTION_HEIGHT_PX = 50\nexport const PAYDIN_DIALOG_CONTENT_PADDING_PX = 15\nexport const EDIT_LINK_PAGE_PRODUCT_SEARCH_REQUEST_SEND_DELAY_MILLISECONDS = 400\nexport const SIGN_UP_PAGE_VALIDATE_FIELD_REQUEST_SEND_DELAY_MILLISECONDS = 400\nexport const SIGN_UP_PAGE_USERNAME_INPUT_NAME = 'username'\nexport const SIGN_UP_PAGE_EMAIL_INPUT_NAME = 'email'\nexport const SHOPIFY_CONNECT_SHOPIFY_SHOP_URL_SUFFIX = \".myshopify.com\"\nexport const PAGE_DEFAULT_MAX_WIDTH = 750\nexport const ADMIN_PAGE_LINKS_MAX_WIDTH = 1000\nexport const LINK_EDIT_PREVIEW_PAGE_MAX_WIDTH = 1100\nexport const LINK_PAGES_MAX_WIDTH = 1000\nexport const MULTILINK_PAGES_MAX_WIDTH = 1000\nexport const ANALYTICS_PAGE_MAX_WIDTH = 900\nexport const ACCOUNT_PAGE_MAX_WIDTH = 750\nexport const PRICING_PLANS_PAGE_MAX_WIDTH = 1230\nexport const TRENDS_PAGE_MAX_WIDTH = 1500\nexport const SHOPIFY_HELP_PAGE_MAX_WIDTH = 1200\nexport const CREATE_INFLUENCER_PAGE_MAX_WIDTH = 630\nexport const PREVIEW_SHORT_PAGE_MAX_WIDTH = 700\nexport const CREATE_NEW_PASSWORD_PAGE_MAX_WIDTH = 500\nexport const USER_PASSWORD_MIN_LENGTH = 6\nexport const PAYLINK_LOGO_MAX_WIDTH_PX = 120\nexport const EDIT_LINK_PAGE_PRODUCT_SEARCH_QUERY_MIN_LENGTH = 2\nexport const INFLUENCER_PREVIEW_DIALOG_MAX_WIDTH = 1000\nexport const NO_AUTH_PAGES = [\n LOGIN_STORE_PAGE_URL,\n LOGIN_PAGE_URL,\n LOGIN_INFLUENCER_PAGE_URL,\n REGISTER_STORE_PAGE_URL,\n SIGN_UP_PAGE_URL,\n SIGN_UP_REQUEST_PAGE_URL,\n FORGOT_PASSWORD_PAGE_URL,\n INFLUENCER_FORGOT_PASSWORD_PAGE_URL,\n CREATE_NEW_PASSWORD_PAGE_URL\n]\nexport const PADDED_PAGES = [\n LOGIN_PAGE_URL,\n LOGIN_STORE_PAGE_URL,\n REGISTER_STORE_PAGE_URL,\n LOGIN_INFLUENCER_PAGE_URL,\n SIGN_UP_PAGE_URL,\n SIGN_UP_REQUEST_PAGE_URL,\n FORGOT_PASSWORD_PAGE_URL,\n INFLUENCER_FORGOT_PASSWORD_PAGE_URL,\n CREATE_NEW_PASSWORD_PAGE_URL,\n // This is nessecary for matching the url that's been redirected from server with and without '/'.\n // FIX - define all URLs as regex for optimizations\n CREATE_NEW_PASSWORD_PAGE_URL + '/',\n HOME_PAGE_URL\n]\nexport const UNLIMITED_WIDTH_PAGES = [\n PRIVACY_POLICY_PAGE_URL,\n TERMS_PAGE_URL,\n MAGIC_STORE_PAGE_URL\n]\nexport const ACCOUNT_PAGE_DANGER_ZONE_SECTION_PADDING_TOP_PX = 20\nexport const ACCOUNT_PAGE_DANGER_ZONE_SECTION_PADDING_BOTTON_PX = 20\n\nexport const ACCOUNT_PAGE_SHOP_WEBSITE_INPUT_NAME = 'shop-website'\nexport const ACCOUNT_PAGE_SHOP_SHIPPING_AND_RETURNS_INPUT_NAME = 'shipping-and-returns'\nexport const ACCOUNT_PAGE_NAME_INPUT_NAME = 'name'\nexport const ACCOUNT_PAGE_USERNAME_INPUT_NAME = 'username'\nexport const ACCOUNT_PAGE_EMAIL_INPUT_NAME = 'email'\nexport const ACCOUNT_PAGE_FACEBOOK_PIXEL_ID_INPUT_NAME = 'facebook-pixel-id'\nexport const ACCOUNT_PAGE_GOOGLE_ANALYTICS_ID_INPUT_NAME = 'google-analytics-id'\nexport const ACCOUNT_PAGE_URL_PARAMS_INPUT_NAME = 'url-params'\n\nexport const PRICING_PLAN_DATA = {\n FREE: {\n name: 'free',\n presentedName: 'Lite',\n color: '#cccccc',\n price: '0',\n pricingPeriod: 'month',\n ordinal: 1,\n features: [\n {\n id: 'Forever Free',\n content: 'Forever Free'\n },\n {\n id: 'Shorts',\n content: 'Trackable Shorts links'\n },\n {\n id: 'Data sync',\n content: 'Sync every 24 hours'\n }\n ],\n description: \"You will not lose your free trial when upgrading\"\n },\n STARTER: {\n name: 'starter',\n presentedName: 'Starter',\n color: '#ffdfb0',\n price: 39,\n pricingPeriod: 'month',\n ordinal: 2,\n features: [\n {\n id: '30 days free trial',\n content: '30 days free trial'\n },\n {\n id: 'Everything in Lite',\n content: 'Everything in Lite'\n },\n {\n id: 'Shopboard',\n content: 'Shop the Feed'\n },\n {\n id: 'Instant-Store links',\n content: 'Instant-Store links'\n },\n {\n id: 'Customization',\n content: 'Customization'\n },\n {\n id: 'Up to 3 influencers',\n content: 'Up to 3 influencers'\n },\n {\n id: 'Data sync',\n content: 'Live inventory sync'\n }\n ],\n description: '1.5 USD transaction fee\\non smart multi-products links'\n },\n BUSINESS: {\n name: 'business',\n presentedName: 'Business',\n color: '#93d9b4',\n price: 99,\n pricingPeriod: 'month',\n ordinal: 3,\n features: [\n {\n id: '30 days free trial',\n content: '30 days free trial'\n },\n {\n id: 'Everything in Starter',\n content: 'Everything in Starter'\n },\n {\n id: 'Up to 15 influencers',\n content: 'Up to 15 influencers'\n },\n {\n id: \"Brand's domain\",\n content: \"Brand's domain\"\n }\n ],\n description: '1 USD transaction fee\\non smart multi-products links'\n },\n PRO: {\n name: 'pro',\n presentedName: 'pro',\n color: '#a3d6f7',\n price: 399,\n pricingPeriod: 'month',\n ordinal: 4,\n features: [\n {\n id: '30 days free trial',\n content: '30 days free trial'\n },\n {\n id: 'Everything in Business',\n content: 'Everything in Business'\n },\n {\n id: 'Influencers platform',\n content: 'Unlimited influencers'\n },\n {\n id: 'VIP priority support',\n content: 'VIP priority support'\n }\n ],\n description: '0.75 USD transaction fee\\non smart multi-products links'\n },\n ENTERPRISE: {\n name: 'enterprise',\n presentedName: 'Enterprise',\n color: '#fcbdbd',\n price: null,\n pricingPeriod: 'month',\n ordinal: 5,\n features: [],\n subtitle: \"Let's talk\"\n }\n}\n\nexport const PRICING_PLANS_ENTERPRISE_PLAN_CONTACT_US_EMAIL = 'mailto:sales@shopeaks.com'\n\nexport const UNAVAILABLE_PLANS = []\nexport const CONTACT_US_PLANS = [PRICING_PLAN_DATA.ENTERPRISE.name]\n\nexport const BOXED_MESSAGE_TYPES = {\n ERROR: 'error',\n INFO: 'info'\n}\n\nexport const SHOPIFY_CONNECT_NAVIGATE_TO_ADMIN_PAGE_DELAY = 2000\n\nexport const PAYDIN_MENU_DEFAULT_WIDTH_PX = 250\nexport const PAYDIN_MENU_OPENING_DIRECTIONS = {\n LEFT: 'left',\n RIGHT: 'right'\n}\n\nexport const DASHBOARD_TOPBAR_USER_MENU_BORDER_RADIUS_PX = 15\nexport const DASHBOARD_TOPBAR_USER_MENU_WIDTH_PX = 350\n\nexport const PAYDIN_DRAWER_DIRECTION = {\n TOP: 'top',\n RIGHT: 'right',\n LEFT: 'left',\n BOTTOM: 'bottom',\n}\n\nexport const LINKS_PAGE_MOBILE_OPTIONS_DRAWER_TOP_BORDER_RADIUS_PX = 15\n\nconst PAYDIN_DRAWER_TRANSLATION_ANIMATION_DURATION_MILLISECONDS = 250\nexport const CREATE_LINK_REDIRECT_TO_PAGE_DELAY = 250\nexport const SEPERATE_GO_BACK_FOR_SAFARY_DELAY = 100\nexport const LINKS_PAGE_MOBILE_OPTIONS_DRAWER_CLOSING_DELAY = PAYDIN_DRAWER_TRANSLATION_ANIMATION_DURATION_MILLISECONDS\nexport const LINK_ITEM_MOBILE_OPTIONS_DRAWER_PADDING_PX = 20\nexport const DATE_PICKER_MOBILE_DRAWER_PADDING_PX = 10\nexport const MOBILE_DASHBOARD_TOPBAR_OPTIONS_DRAWER_CLOSING_DELAY = PAYDIN_DRAWER_TRANSLATION_ANIMATION_DURATION_MILLISECONDS\nexport const LINK_ID_ROUTE_PARAMETER_INDEX = 3\nexport const INFLUENCER_USERNAME_ROUTE_PARAMETER_INDEX = 3\n\nexport const VIEW_MODES = {\n PREVIEW: 'preview',\n EDIT: 'edit',\n CREATE: 'create'\n}\n\nexport const ADD_PRODUCTS_DIALOG_PRODUCTS_LIST_ITEM_HEIGHT_PX = 190\nexport const ADD_PRODUCTS_DIALOG_FETCH_NEXT_PRODUCTS_COLUMN_THRESHOLD_COUNT = 1\nexport const ADD_PRODUCTS_DIALOG_PRODUCTS_IN_COLUMNS = isMobile ? 3 : 7\n\nexport const CREATE_LINK_PHASES = {\n ADD_IMAGE_PHASE: 0,\n ADD_LINK_PROPERTIES_PHASE: 1\n}\n\nexport const DASHBOARD_LAYOUT_PAGES_WITH_DASHBOARD_TOPBAR = [\n LINKS_PAGE_URL,\n INFLUENCERS_PAGE_URL,\n SHORTS_PAGE_URL,\n HOME_PAGE_URL,\n PRICING_PLANS_PAGE_URL,\n MULTILINKS_PAGE_URL,\n]\n\nexport const LINK_ITEM_HEIGHT_PX = isMobile ? 340 : 275\nexport const SHORT_ITEM_HEIGHT_PX = 85\nexport const LINKS_PAGE_FETCH_NEXT_LINKS_THRESHOLD_ROW_COUNT = 1\nexport const SHORTS_PAGE_FETCH_NEXT_LINKS_THRESHOLD_ROW_COUNT = 1\nexport const LINKS_PAGE_LINK_COLUMN_COUNT = isMobile ? 2 : 4\n\nexport const SHOPIFY_HELP_CENTER_URL = 'https://help.shopify.com/en'\n\nexport const TIME_UNITS = {\n SECOND: 'second',\n MINUTE: 'minute',\n HOUR: 'hour',\n DAY: 'day',\n MONTH: 'month',\n YEAR: 'year'\n}\n\nexport const CONTACT_SUPPORT_EMAIL = 'support@shopeaks.com'\nexport const CONTACT_SUPPORT_ADDRESS = 'Yosef Lishanski 27, Rishon LeTsiyon'\n\nexport const ADMIN_PAGES = [\n LINKS_PAGE_URL,\n ACCOUNT_PAGE_URL\n]\n\nexport const PROMOCODE_INPUT_MAX_LENGTH = 20\nexport const SALES_AND_DISCOUNT_STRIP_SENTENCE_1_INPUT_MAX_LENGTH = 50\nexport const SALES_AND_DISCOUNT_STRIP_SENTENCE_2_INPUT_MAX_LENGTH = 50\nexport const PREORDER_TEXT_INPUT_MAX_LENGTH = 100\n\nexport const ACCOUNT_VERIFICATION_PAGE_DISPLAY_VERIFY_RESULT_DELAY_MILLISECONDS = 700\nexport const ACCOUNT_VERIFICATION_PAGE_PROCEED_DELAY_MILLISECONDS = 2500\n\nexport const EDIT_LINK_SECTION_LINK_DESCRIPTION_CHARACTER_LIMIT = 50\n\nexport const WELCOME_PAGE_FIRST_SECTION_BACKGROUND_COLOR = '#2dc2df'\nexport const WELCOME_PAGE_SECOND_SECTION_BACKGROUND_COLOR = '#8497b0'\nexport const WELCOME_PAGE_SECTION_IMAGE_BORDER_RADIUS_PX = 5\nexport const WELCOME_PAGE_THIRD_SECTION_BACKGROUND_COLOR = '#dfe2ed'\n\nexport const IMAGE_BOX_DEFAULT_BORDER_RADIUS_PX = 10\n\nexport const PAYDIN_IMAGE_CROPPER_ASPECT_RATIOS_MENU_WIDTH_PX = 'fit-content'\n\nexport const PAYDIN_IMAGE_CROP_DIALOG_WIDTH = '90vmin'\nexport const PAYDIN_IMAGE_CROP_DIALOG_MAX_HEIGHT = '650px'\nexport const PAYDIN_IMAGE_CROP_DIALOG_INFLUENCER_WIDTH = '450px'\nexport const PAYDIN_IMAGE_CROP_DIALOG_INFLUENCER_MAX_HEIGHT = '500px'\n\nexport const PAYDIN_IMAGE_CROPPER_OBJECT_FITS = {\n CONTAIN: 'contain',\n VERTICAL_COVER: 'vertical-cover',\n HORIZONTAL_COVER: 'horizontal-cover'\n}\n\nexport const PAYDIN_IMAGE_CROPPER_ASPECT_RATIOS = [\n {\n text: '1:1',\n ratio: 1 / 1\n },\n {\n text: '16:9',\n ratio: 16 / 9\n },\n {\n text: '4:5',\n ratio: 4 / 5\n }\n]\n\nexport const PAYDIN_IMAGE_CROPPER_DEFAULT_ASPECT_RATIO = 1 / 1\n\nexport const PAYDIN_IMAGE_CROPPER_LOGO_ASPECT_RATIO = 4 / 1\n\nexport const LINKS_PAGE_LINKS_FILTER_COUNT = 28\nexport const SHORTS_PAGE_SHORTS_FILTER_COUNT = 28\nexport const MULTILINKS_PAGE_MULTILINKS_FILTER_COUNT = 28\nexport const INFLUENCER_PAGINATION_COUNT = 28\n\nexport const SETTINGS_PAGES_BUTTON_LOADER_CIRCLE_COLOR = '#6B718E'\nexport const SHOPBOARD_PAGE_BUTTON_LOADER_CIRCLE_COLOR = '#6B718E'\nexport const DEFAULT_CURRENCY_CODE = 'USD'\n\nexport const APPROVAL_MESSAGE_HIDDING_DELAY_MILLISECONDS = 2000\n\nexport const APPEARANCE_PAGE_LINK_STYLE_CHECKOUT_BUTTON_SHAPE_KEYS = {\n OPTION1: 'shape1',\n OPTION2: 'shape2',\n OPTION3: 'shape3',\n}\n\nexport const APPEARANCE_PAGE_LINK_STYLE_CHECKOUT_BUTTON_SHAPE_OPTIONS = [\n {\n key: APPEARANCE_PAGE_LINK_STYLE_CHECKOUT_BUTTON_SHAPE_KEYS.OPTION1,\n value: '0px',\n width: '60px',\n image: <div\n style={{\n width: '25px',\n height: '25px',\n backgroundColor: '#f6f6f6',\n border: '2px solid #b6b6b8',\n borderRadius: '0px'\n }}>\n </div>\n },\n {\n key: APPEARANCE_PAGE_LINK_STYLE_CHECKOUT_BUTTON_SHAPE_KEYS.OPTION2,\n value: '10px',\n width: '60px',\n image: <div\n style={{\n width: '25px',\n height: '25px',\n backgroundColor: '#f6f6f6',\n border: '2px solid #b6b6b8',\n borderRadius: '5px'\n }}>\n </div>\n },\n {\n key: APPEARANCE_PAGE_LINK_STYLE_CHECKOUT_BUTTON_SHAPE_KEYS.OPTION3,\n value: '25px',\n width: '60px',\n image: <div\n style={{\n width: '40px',\n height: '25px',\n backgroundColor: '#f6f6f6',\n border: '2px solid #b6b6b8',\n borderRadius: '25px'\n }}>\n </div>\n }\n]\n\nconst PRODUCT_IMAGE_STYLE_BORDER_RADIUS_OPTION_WIDTH_PX = isMobile ? 90 : 100\nconst PRODUCT_IMAGE_STYLE_BORDER_RADIUS_OPTION_HEIGHT_PX = isMobile ? 140 : 150\nconst PRODUCT_IMAGE_STYLE_BORDER_RADIUS_OPTIONS_BORDER_WIDTH_PX = 1\n\nconst PRODUCT_IMAGE_STYLE_BORDER_RADIUS_SHARP_OPTION_BORDER_RADIUS_PX = 0\nconst PRODUCT_IMAGE_STYLE_BORDER_RADIUS_SEMI_ROUNDED_OPTION_BORDER_RADIUS_PX = 6\nconst PRODUCT_IMAGE_STYLE_BORDER_RADIUS_ROUNDED_OPTION_BORDER_RADIUS_PX = 10\n\nexport const APPEARNACE_PAGE_PRODUCT_IMAGE_STYLE_BORDER_RADIUS_KEYS = {\n OPTION1: 'shape1',\n OPTION2: 'shape2',\n OPTION3: 'shape3',\n}\nexport const APPEARNACE_PAGE_PRODUCT_IMAGE_STYLE_BORDER_RADIUS_OPTIONS = [\n {\n key: APPEARNACE_PAGE_PRODUCT_IMAGE_STYLE_BORDER_RADIUS_KEYS.OPTION1,\n value: `${PRODUCT_IMAGE_STYLE_BORDER_RADIUS_SHARP_OPTION_BORDER_RADIUS_PX}px`,\n image: <img\n src={ProductImageStyleDisplayImage}\n style={{\n width: `${PRODUCT_IMAGE_STYLE_BORDER_RADIUS_OPTION_WIDTH_PX}px`,\n height: `${PRODUCT_IMAGE_STYLE_BORDER_RADIUS_OPTION_HEIGHT_PX}px`,\n borderRadius: '0px',\n objectFit: 'cover'\n }}\n />,\n styles: {\n width: `${PRODUCT_IMAGE_STYLE_BORDER_RADIUS_OPTION_WIDTH_PX + (PRODUCT_IMAGE_STYLE_BORDER_RADIUS_OPTIONS_BORDER_WIDTH_PX * 2)}px`,\n height: `${PRODUCT_IMAGE_STYLE_BORDER_RADIUS_OPTION_HEIGHT_PX + (PRODUCT_IMAGE_STYLE_BORDER_RADIUS_OPTIONS_BORDER_WIDTH_PX * 2)}px`,\n cursor: 'pointer'\n },\n text: 'Sharp'\n },\n {\n key: APPEARNACE_PAGE_PRODUCT_IMAGE_STYLE_BORDER_RADIUS_KEYS.OPTION2,\n value: `${PRODUCT_IMAGE_STYLE_BORDER_RADIUS_SEMI_ROUNDED_OPTION_BORDER_RADIUS_PX}px`,\n image: <img\n src={ProductImageStyleDisplayImage}\n style={{\n width: `${PRODUCT_IMAGE_STYLE_BORDER_RADIUS_OPTION_WIDTH_PX}px`,\n height: `${PRODUCT_IMAGE_STYLE_BORDER_RADIUS_OPTION_HEIGHT_PX}px`,\n borderRadius: `${PRODUCT_IMAGE_STYLE_BORDER_RADIUS_SEMI_ROUNDED_OPTION_BORDER_RADIUS_PX - PRODUCT_IMAGE_STYLE_BORDER_RADIUS_OPTIONS_BORDER_WIDTH_PX}px`,\n objectFit: 'cover'\n }}\n />,\n styles: {\n width: `${PRODUCT_IMAGE_STYLE_BORDER_RADIUS_OPTION_WIDTH_PX + (PRODUCT_IMAGE_STYLE_BORDER_RADIUS_OPTIONS_BORDER_WIDTH_PX * 2)}px`,\n height: `${PRODUCT_IMAGE_STYLE_BORDER_RADIUS_OPTION_HEIGHT_PX + (PRODUCT_IMAGE_STYLE_BORDER_RADIUS_OPTIONS_BORDER_WIDTH_PX * 2)}px`,\n cursor: 'pointer'\n },\n text: 'Semi-rounded'\n },\n {\n key: APPEARNACE_PAGE_PRODUCT_IMAGE_STYLE_BORDER_RADIUS_KEYS.OPTION3,\n value: `${PRODUCT_IMAGE_STYLE_BORDER_RADIUS_ROUNDED_OPTION_BORDER_RADIUS_PX}px`,\n image: <img\n src={ProductImageStyleDisplayImage}\n style={{\n width: `${PRODUCT_IMAGE_STYLE_BORDER_RADIUS_OPTION_WIDTH_PX}px`,\n height: `${PRODUCT_IMAGE_STYLE_BORDER_RADIUS_OPTION_HEIGHT_PX}px`,\n borderRadius: `${PRODUCT_IMAGE_STYLE_BORDER_RADIUS_ROUNDED_OPTION_BORDER_RADIUS_PX - PRODUCT_IMAGE_STYLE_BORDER_RADIUS_OPTIONS_BORDER_WIDTH_PX}px`,\n objectFit: 'cover'\n }}\n />,\n styles: {\n width: `${PRODUCT_IMAGE_STYLE_BORDER_RADIUS_OPTION_WIDTH_PX + (PRODUCT_IMAGE_STYLE_BORDER_RADIUS_OPTIONS_BORDER_WIDTH_PX * 2)}px`,\n height: `${PRODUCT_IMAGE_STYLE_BORDER_RADIUS_OPTION_HEIGHT_PX + (PRODUCT_IMAGE_STYLE_BORDER_RADIUS_OPTIONS_BORDER_WIDTH_PX * 2)}px`,\n cursor: 'pointer'\n },\n text: 'Rounded'\n }\n]\n\nexport const APPEARANCE_PAGE_LINK_STYLE_CART_BUTTON_IMAGE_KEYS = {\n OPTION1: 'cart1',\n OPTION2: 'cart2',\n OPTION3: 'cart3',\n}\n\nexport const APPEARANCE_PAGE_LINK_STYLE_CART_BUTTON_IMAGE_OPTIONS = [\n {\n key: APPEARANCE_PAGE_LINK_STYLE_CART_BUTTON_IMAGE_KEYS.OPTION1,\n image: <ShoppingBagImage1\n style={{\n width: '30px',\n height: '30px'\n }} />\n },\n {\n key: APPEARANCE_PAGE_LINK_STYLE_CART_BUTTON_IMAGE_KEYS.OPTION2,\n image: <ShoppingBagImage2\n style={{\n width: '30px',\n height: '30px'\n }} />\n },\n {\n key: APPEARANCE_PAGE_LINK_STYLE_CART_BUTTON_IMAGE_KEYS.OPTION3,\n image: <ShoppingBagImage3\n style={{\n width: '30px',\n height: '30px',\n }} />\n }\n]\n\nexport const RESIZE_IMAGE_MAX_WIDTH = 1500\nexport const RESIZE_IMAGE_MAX_HEIGHT = 1500\n\nexport const INFLUENCER_LINK_PAGINATION_COUNT = 28\nexport const INFLUENCER_SHORT_PAGINATION_COUNT = 28\n\nexport const INPUT_VALIDATION_INDICATIONS = {\n NO_INDICATION: 'no-indication',\n VALID: 'valid',\n INVALID: 'invalid'\n}\n\nexport const INFLUENCER_PROMOCODE_LENGTH_LIMIT = PROMOCODE_INPUT_MAX_LENGTH\n\nexport const EDIT_INFLUENCER_SECTION_VALIDATION_TIMEOUT_MILLISECONDS = 400\n\nexport const EDIT_LINK_SECTION_OPTIONS_MENU_ITEM_HEIGHT_PX = 50\nexport const EDIT_LINK_SECTION_OPTIONS_MENU_ITEM_MAX_COUNT = 7\n\nexport const RUNNING_MESSAGES_STRIP_TEXT_SWAP_DELAY_MILLISECONDS = 5000\nexport const RUNNING_MESSAGES_STRIP_TEXT_ANIMATION_DURATION = 500\nexport const RUNNING_MESSAGES_STRIP_TEXT_NO_ANIMATION_NAME = 'none'\nexport const RUNNING_MESSAGES_STRIP_TEXT_ANIMATION_IN_NAME = 'in-message-anim'\nexport const RUNNING_MESSAGES_STRIP_TEXT_ANIMATION_OUT_NAME = 'out-message-anim'\n\nexport const PASSWORD_INPUT_RULESET = [\n 'Must contain at least 6 characters',\n 'Must contain at least 1 number',\n 'Must contain at least 1 uppercase letter'\n]\nexport const REDUCED_PADDING_PAGES = [\n LINKS_PAGE_URL,\n SHORTS_PAGE_URL,\n INFLUENCERS_PAGE_URL,\n ANALYTICS_PAGE_URL\n]\nexport const NO_BOTTOM_PADDING_PAGES = [\n LINKS_PAGE_URL,\n SHORTS_PAGE_URL,\n INFLUENCERS_PAGE_URL,\n SHOPBOARD_PAGE_URL,\n PRICING_PLANS_PAGE_URL\n]\n\nexport const ADD_PRODUCTS_DIALOG_PRODUCT_STATUS = {\n ACTIVE: 'active',\n DRAFT: 'draft'\n}\nexport const URL_PARAMETERS_LINK_TYPE_OPTIONS = {\n ORGANIC: 'Organic',\n INFLUENCERS: 'Influencers',\n}\nexport const USERNAME_FIELD_PREFIX = 'shopeaks.com/'\n\nexport const EDIT_SHORT_PROMOCODE_INPUT_MAX_LENGTH = 20\n\nexport const EDIT_SHORT_SECTION_URL_TEST_DELAY_MILLISECONDS = 400\n\nexport const LINK_TYPES = {\n LOOK: 'LOOK',\n SHORT: 'SHORT',\n SHOPBOARD: 'SHOPBOARD'\n}\n\nexport const TAB_OPTIONS_ICON_SIZE = isMobile ? '15px' : '20px'\n\nexport const ANALYTICS_TAB_OPTIONS = [\n {\n text: 'Instants',\n image: <BiLink style={{ width: TAB_OPTIONS_ICON_SIZE, height: TAB_OPTIONS_ICON_SIZE }} />\n },\n {\n text: 'Shorts',\n image: <ShortsImage style={{ width: TAB_OPTIONS_ICON_SIZE, height: TAB_OPTIONS_ICON_SIZE }} />\n },\n {\n text: 'Influencers',\n image: <InfluencersImage style={{ width: TAB_OPTIONS_ICON_SIZE, height: TAB_OPTIONS_ICON_SIZE }} />\n }\n]\n\nexport const ANALYTICS_TAB_OPTIONS_WITH_SHOPBOARD = [\n {\n text: 'Instants',\n image: <BiLink style={{ width: TAB_OPTIONS_ICON_SIZE, height: TAB_OPTIONS_ICON_SIZE }} />\n },\n {\n text: 'Shorts',\n image: <ShortsImage style={{ width: TAB_OPTIONS_ICON_SIZE, height: TAB_OPTIONS_ICON_SIZE }} />\n },\n {\n text: isMobile ? 'Shop Feed' : 'Shop the Feed',\n image: <LiaShoppingBagSolid style={{ width: TAB_OPTIONS_ICON_SIZE, height: TAB_OPTIONS_ICON_SIZE }} />\n },\n {\n text: 'Influencers',\n image: <InfluencersImage style={{ width: TAB_OPTIONS_ICON_SIZE, height: TAB_OPTIONS_ICON_SIZE }} />\n }\n]\n\nexport const INFLUENCER_TAB_OPTIONS = [\n {\n text: 'Insights',\n image: <InsightsImage style={{ width: TAB_OPTIONS_ICON_SIZE, height: TAB_OPTIONS_ICON_SIZE }} />\n },\n {\n text: 'Instants',\n image: <BiLink style={{ width: TAB_OPTIONS_ICON_SIZE, height: TAB_OPTIONS_ICON_SIZE }} />\n },\n {\n text: 'Shorts',\n image: <ShortsImage style={{ width: TAB_OPTIONS_ICON_SIZE, height: TAB_OPTIONS_ICON_SIZE }} />\n }\n]\n\n\nexport const INFLUENCER_TAB_OPTIONS_COMMISSION_ONLY = [\n {\n text: 'Insights',\n image: <InsightsImage style={{ width: TAB_OPTIONS_ICON_SIZE, height: TAB_OPTIONS_ICON_SIZE }} />\n }\n]\n\nexport const SHOPBOARD_TAB_OPTIONS = [\n {\n text: 'Instagram',\n image: <></>\n },\n {\n text: 'TikTok',\n image: <></>\n },\n {\n text: 'Pinterest',\n image: <></>\n }\n]\n\nexport const ANALYTICS_PAGE_RETROACTIVE_DATA_REPORT_TIME_INTERVALS_NAMES = {\n LAST_24_HOURS: 'Last 24 hours',\n LAST_7_DAYS: 'Last 7 days',\n LAST_30_DAYS: 'Last 30 days',\n LAST_90_DAYS: 'Last 90 days',\n THIS_MONTH: 'This month',\n PREVIOUS_MONTH: 'Previous month',\n LIFETIME: 'Lifetime',\n}\n\nconst TODAY_DATE = new Date()\n\nexport const ANALYTICS_PAGE_RETROACTIVE_DATA_REPORT_TIME_INTERVALS = [\n {\n id: 1,\n name: ANALYTICS_PAGE_RETROACTIVE_DATA_REPORT_TIME_INTERVALS_NAMES.LAST_24_HOURS,\n timeRange: calculateDateRange(\n ANALYTICS_PAGE_RETROACTIVE_DATA_REPORT_TIME_INTERVALS_NAMES.LAST_24_HOURS,\n TIME_UNITS.DAY,\n 1\n )\n },\n {\n id: 2,\n name: ANALYTICS_PAGE_RETROACTIVE_DATA_REPORT_TIME_INTERVALS_NAMES.LAST_7_DAYS,\n timeRange: calculateDateRange(\n ANALYTICS_PAGE_RETROACTIVE_DATA_REPORT_TIME_INTERVALS_NAMES.LAST_7_DAYS,\n TIME_UNITS.DAY,\n 7\n )\n },\n {\n id: 3,\n name: ANALYTICS_PAGE_RETROACTIVE_DATA_REPORT_TIME_INTERVALS_NAMES.LAST_30_DAYS,\n timeRange: calculateDateRange(\n ANALYTICS_PAGE_RETROACTIVE_DATA_REPORT_TIME_INTERVALS_NAMES.LAST_30_DAYS,\n TIME_UNITS.DAY,\n 30\n )\n },\n {\n id: 4,\n name: ANALYTICS_PAGE_RETROACTIVE_DATA_REPORT_TIME_INTERVALS_NAMES.LAST_90_DAYS,\n timeRange: calculateDateRange(\n ANALYTICS_PAGE_RETROACTIVE_DATA_REPORT_TIME_INTERVALS_NAMES.LAST_90_DAYS,\n TIME_UNITS.DAY,\n 90\n )\n },\n {\n id: 5,\n name: ANALYTICS_PAGE_RETROACTIVE_DATA_REPORT_TIME_INTERVALS_NAMES.THIS_MONTH,\n timeRange: [\n new Date(TODAY_DATE.getFullYear(), TODAY_DATE.getMonth(), 1),\n TODAY_DATE\n ]\n },\n {\n id: 6,\n name: ANALYTICS_PAGE_RETROACTIVE_DATA_REPORT_TIME_INTERVALS_NAMES.PREVIOUS_MONTH,\n timeRange: [\n new Date(TODAY_DATE.getFullYear(), TODAY_DATE.getMonth() - 1, 1),\n addTimeToDate(new Date(TODAY_DATE.getFullYear(), TODAY_DATE.getMonth(), 1), TIME_UNITS.DAY, -1)\n ]\n },\n {\n id: 7,\n name: ANALYTICS_PAGE_RETROACTIVE_DATA_REPORT_TIME_INTERVALS_NAMES.LIFETIME,\n timeRange: [null, null]\n }\n]\n\nexport const NOTIFY_STORE_CONNECT_FINISH_MESSAGE = 'CompletedPaylinkProcess'\nexport const NOTIFY_STORE_SUBSCRIPTION_FINISHED_MESSAGE = 'CompletedPaylinkSubscription'\n\nexport const ANALYTICS_STRIP_LIFETIME_REVENUE_DISPLAY_THRESHOLD = 1000\nexport const PAYDIN_CHART_TYPES = {\n LINE: 'line',\n BAR: 'bar',\n PIE: 'pie'\n}\n\nexport const PAYDIN_CHART_CONTENT_PADDING_PX = 20\nexport const PAYDIN_CHART_CONTENT_GAP_PX = 35\nexport const PAYDIN_CHART_CONTENT_MOBILE_GAP_PX = 25\n\nexport const PREVIEW_LINK_SECTIONS_BACKGROUND_COLOR = '#F6F7FA'\n\nexport const UTM_FORM_INPUT_UTM_PARAM_ADDITIONS_OPTIONS_LIST = [\n {\n template: '{{link.influencer_username}}',\n description: 'The influencer associated to link (if exist)'\n },\n {\n template: '{{link.title}}',\n description: 'Link title'\n },\n {\n template: '{{link.id}}',\n description: 'Link ID'\n }\n]\nexport const PAYDIN_CHART_GRAPH_HEIGHT_PX = 280\n\nexport const ADD_PRODUCTS_DIALOG_PRODUCTS_FRAME_DESKTOP_HEIGHT_PX = 440\n\nexport const PAYDIN_RADIO_BUTTON_GROUP_ALIGNMENTS = {\n ROW: 'row',\n COLUMN: 'column'\n}\n\nexport const APPEARANCE_OPTION_PICKER_DEFAULT_BORDER_WIDTH_PX = 3\nexport const APPEARANCE_OPTION_PICKER_PRODUCT_IMAGE_STYLE_BORDER_WIDTH_PX = 1\nexport const APPEARANCE_OPTION_PICKER_PRODUCT_IMAGE_STYLE_SELECTED_BORDER_WIDTH_PX = 2\n\nexport const DASHBOARD_PAGE_HORIZONTAL_PADDING_PX = 15\n\nexport const PAYDIN_DIALOG_ON_BUTTON_CLICKED_CALLBACK_DELAY_MILLISECONDS = 100\n\nexport const MOBILE_DASHBOARD_TOPBAR_RIGHT_SECTION_BUTTON_HEIGHT_PX = 50\n\nexport const DATE_PICKER_DESKTOP_WIDTH_PX = 660\nexport const DATE_PICKER_DESKTOP_BORDER_RADIUS_PX = 6\nexport const DATE_PICKER_DESKTOP_BORDER_COLOR = 'black'\n\nexport const ITEMS_VIEW_SECTION_MORE_ITEMS_LOADER_HEIGHT_PX = 60\n\nexport const ITEM_DESIGN_PATTERNS = {\n INSIDE: 'INSIDE',\n OUTSIDE: 'OUTSIDE'\n}\n\nexport const SECTION_TYPES = {\n SINGLE: 'SINGLE',\n STRIP: 'STRIP',\n GRID: 'GRID'\n}\n\nexport const PAYDIN_DRAWER_TRANSITION_DURATION = 250\nexport const PAYDIN_DRAWER_TRANSITION_DURATION_WITH_BUFFER = PAYDIN_DRAWER_TRANSITION_DURATION + 100\n\nexport const PAYDIN_DIALOG_TRANSITION_DURATION = 250\n\nexport const MULTI_SELECT_DIALOG_DESKTOP_HEIGHT_PX = 700\nexport const MULTI_SELECT_DIALOG_DONE_BUTTON_STRIP_HEIGHT_PX = 70\nexport const MULTI_SELECT_DIALOG_SELECTION_LIMIT_REACHED_ALERT_HIDE_DELAY_MILLISECONDS = 1500\n\nexport const EDIT_LINK_SECTION_ADD_COLLECTIONS_DIALOG_SELECTION_LIMIT = 5\n\nexport const ADD_PRODUCTS_DIALOG_RESET_FILTER_TRIGGER_DELAY_MILLISECONDS = 100\nexport const ADD_PRODUCTS_DIALOG_DESKTOP_COLUMN_COUNT = 7\nexport const ADD_PRODUCTS_DIALOG_MOBILE_COLUMN_COUNT = 3\n\nexport const ADD_COLLECTIONS_DIALOG_DESKTOP_COLUMN_COUNT = 6\nexport const ADD_COLLECTIONS_DIALOG_MOBILE_COLUMN_COUNT = 3\n\nexport const COLOR_SELECT_CIRCLE_DIMENSIONS = 25\nexport const COLOR_SELECT_CIRCLE_CONTAINER_GAP = 15\nexport const COLOR_SELECT_DEFAULT_DIMENSIONS = 18\n\nexport const OPTION_TYPES = {\n COLOR: 'COLOR',\n TEXT: 'TEXT'\n}\n\nexport const SHORT_URL_SELECTION_TYPE = {\n CUSTOM: 'CUSTOM',\n PRODUCT: 'PRODUCT',\n COLLECTION: 'COLLECTION',\n ORGANIC: 'ORGANIC'\n}\n\nexport const MULTILINK_SUBLINK_SELECTION_TYPE = {\n CUSTOM: 'CUSTOM',\n PRODUCT: 'PRODUCT',\n COLLECTION: 'COLLECTION',\n LOOK: 'LOOK',\n}\n\n\nexport const MULTILINK_SUBLINK_TYPES = {\n SHORT: 'SHORT',\n LOOK: 'LOOK',\n}\n\nexport const MULTILINK_SUBLINK_DEVICE_OPTIONS_VALUE_ELEMENT = [\n {\n value: 'ALL',\n element: 'All devices'\n }, \n {\n value: 'MOBILE', \n element: 'Mobile only'\n }, \n {\n value: 'PC', \n element: 'Desktop only'\n }\n]\nexport const MULTILINK_SUBLINK_DEVICE_OPTIONS = {\n ALL: 'All devices',\n MOBILE: 'Mobile only',\n PC: 'Desktop only'\n}\n\nexport const SHORT_URL_SELECTION_TYPE_ELEMENT_IMAGE_BORDER_RADIUS = 20\nexport const SHORT_URL_SELECTION_TYPE_SELECTED_ELEMENT_BORDER_WIDTH = 3\n\nexport const SHORT_INFO_URL_NO_CUSTOM_IMAGE_DIMENS_PX = 118\nexport const SHORT_INFO_URL_CUSTOM_IMAGE_DIMENS_PX = 70\n\nexport const INFLUENCER_INSIGHTS_AOV_HEIGHT = isMobile ? 240 : 320\nexport const INFLUENCER_INSIGHTS_CR_HEIGHT = 115\nexport const INFLUENCER_INSIGHTS_SALES_BREAKDOWN_PIE_WIDTH = 230\nexport const INFLUENCER_INSIGHTS_SALES_BREAKDOWN_CHART_WIDTH = isMobile ? '100%' : 320\nexport const INFLUENCER_INSIGHTS_SALES_BREAKDOWN_CHART_HEIGHT = 320\nexport const INFLUENCER_INSIGHTS_SALES_BREAKDOWN_CONTAINER_WIDTH = isMobile ? '100%' : 320\nexport const INFLUENCER_INSIGHTS_SALES_BREAKDOWN_CONTAINER_INFLUNECER_WIDTH = isMobile ? '100%' : 580\nexport const INFLUENCER_INSIGHTS_AOV_BREAKDOWN_CONTAINER_WIDTH = isMobile ? '100%' : 245\nexport const INFLUENCER_INSIGHTS_CR_BREAKDOWN_CONTAINER_WIDTH = isMobile ? '100%' : 245\nexport const INFLUENCER_INSIGHTS_SALES_BREAKDOWN_CONTAINER_HEIGHT = 115\nexport const INFLUENCER_INSIGHTS_ROW_COLUMN_GAP = 15\nexport const INFLUENCER_INSIGHTS_SINGLE_VALUE_CONTAINER_WIDTH = isMobile ? '50%' : 185\nexport const INFLUENCER_INSIGHTS_COMMISSION_VALUE_CONTAINER_WIDTH = isMobile ? '100%' : 185\nexport const INFLUENCER_INSIGHTS_COMMISSION_VALUE_CONTAINER_NOT_ADMIN_WIDTH = isMobile ? '50%' : 185\nexport const INFLUENCER_INSIGHTS_SINGLE_VALUE_CONTAINER_HEIGHT = 125\nexport const INFLUENCER_INSIGHTS_LINKS_COLOR = '#28B2AF'\nexport const INFLUENCER_INSIGHTS_SHORTS_COLOR = '#3596FF'\nexport const INFLUENCER_INSIGHTS_ORGANIC_COLOR = '#B900D8'\n\nexport const HOME_PAGE_RECENT_ACTIVITIES_TABS = {\n INSTANTS: 'INSTANTS',\n SHORTS: 'SHORTS',\n INFLUENCERS: 'INFLUENCERS'\n}\nexport const HOME_PAGE_TASKS = {\n ADD_LOGO: 'ADD_LOGO',\n CUSTOMIZE_THEME: 'CUSTOMIZE_THEME',\n ADD_ANALYTICS: 'ADD_ANALYTICS',\n ADD_SHIPPING_AND_RETURN: 'ADD_SHIPPING_AND_RETURN',\n ADD_UTM: 'ADD_UTM'\n}\n\nexport const PAYDIN_ACCORDION_HEADER_GAP_PX = 5\n\nexport const HOME_PAGE_GET_LINKS_API_COUNT = 4\nexport const HOME_PAGE_DESKTOP_GET_SHORTS_API_COUNT = 6\nexport const HOME_PAGE_MOBILE_GET_SHORTS_API_COUNT = 3\nexport const HOME_PAGE_DESKTOP_GET_INFLUENCERS_API_COUNT = 4\nexport const HOME_PAGE_MOBILE_GET_INFLUENCERS_API_COUNT = 4\n\nexport const APPEARANCE_PAGE_LOGO_SECTION_ID = 'appearance_page__logo_section'\nexport const APPEARANCE_PAGE_THEME_SECTION_ID = 'appearance_page__theme_section'\nexport const APPEARANCE_PAGE_PROMOCODE_SETTINGS_SECTION_ID = 'appearance_page_promocode_settings_section'\n\nexport const SETTINGS_PAGE_UTM_SECTION_ID = 'settings-page-utm-section'\nexport const SETTINGS_PAGE_SHIPPING_AND_RETURN_SECTION_ID = 'settings-page-shipping-and-return-section'\nexport const SETTINGS_PAGE_SI_TAGGING_SECTION_ID = 'settings-page-ai-tagging-section'\nexport const SETTINGS_PAGE_ANALYTICS_SECTION_ID = 'settings-page-analytics-section'\n\nexport const SCROLL_TO_ID_DELAY_MILLISECONDS = 100\n\nexport const DASHBOARD_TOPBAR_HEIGHT_PX = 70\nexport const MOBILE_PAGE_VIEW_TOPBAR_HEIGHT_PX = 45\n\nexport const PRODUCT_TABLE_HEADERS_IDS = {\n IMAGE: \"productImage\",\n TITLE: \"productName\",\n VIEW: \"viewCount\",\n ADD: \"addCount\",\n BUY: \"buyCount\",\n RANK: \"ranking\",\n}\nexport const ORDERS_TABLE_HEADERS_IDS = {\n DATE: 'createdAt',\n SOURCE: 'source',\n INFLUENCER: 'influencer',\n TOTAL_PRODUCTS_COUNT: 'totalProductsCount',\n TOTAL_PRICE: 'totalPrice',\n STATUS: 'status',\n ACTIONS: 'actions',\n LINK_SOURCE_TITLE: 'linkTitle'\n}\nexport const ORDERS_TABLE_STATUS_OPTIONS = {\n PAID: 'PAID',\n REFUNDED: 'REFUNDED',\n PARTIALLY_REFUNDED: 'PARTIALLY_REFUNDED'\n}\n\nexport const MULTILINK_EXPERIENCES_TABLE_HEADERS_IDS = {\n NAME: 'name',\n TYPE: 'type',\n DEVICE: 'device',\n TRAFFIC: 'traffic',\n CLICKS: 'clicks',\n SALES: 'sales',\n REVENUE: 'revenue',\n CR: 'cr',\n CART_AVERAGE: 'aov',\n}\n\n\nexport const PRODUCTS_TABLE_ROW_HEIGHT_PX = 105\nexport const MOBILE_PRODUCTS_TABLE_ROW_HEIGHT_PX = 95\nexport const ORDERS_TABLE_ROW_HEIGHT_PX = 62\nexport const MULTILINK_EXPERIENCES_TABLE_ROW_HEIGHT_PX = 62\nexport const STORE_ORDERS_TABLE_ROW_HEIGHT_PX = 100\nexport const ORDERS_TABLE_PRODUCT_ROW_HEIGHT_PX = isMobile ? 70 : 80\nexport const ORDERS_TABLE_PRODUCT_LIST_GAP = isMobile ? 10 : 15\nexport const MOBILE_ORDERS_TABLE_ROW_HEIGHT_PX = 76\nexport const MOBILE_STORE_ORDERS_TABLE_ROW_HEIGHT_PX = 90\nexport const MOBILE_MULTILINK_EXPERIENCES_TABLE_ROW_HEIGHT_PX = 62\nexport const PRODUCTS_TABLE_ROW_HEIGHT = isMobile ? MOBILE_PRODUCTS_TABLE_ROW_HEIGHT_PX : PRODUCTS_TABLE_ROW_HEIGHT_PX\nexport const ORDERS_TABLE_ROW_HEIGHT = isMobile ? MOBILE_ORDERS_TABLE_ROW_HEIGHT_PX : ORDERS_TABLE_ROW_HEIGHT_PX\n\nexport const PRODUCTS_TABLE_ROWS_PER_PAGE = 4\nexport const ORDERS_TABLE_ROWS_PER_PAGE = 5\nexport const STORE_ORDERS_TABLE_ROWS_PER_PAGE = ORDERS_TABLE_ROWS_PER_PAGE\nexport const STORE_ORDERS_TABLE_COUNT = 20\n\nexport const DATE_PICKER_DATE_INTERVAL_OPTION_WIDTH_PX = 115\n\nexport const OPTION_VALUE_MAPPER_VALUE_STATUS = {\n VERIFIED: 'VERIFIED',\n NOT_VERIFIED: 'NOT_VERIFIED'\n}\nexport const OPTION_VALUE_MAPPER_OPTION_TYPES = {\n COLOR: 'COLOR',\n TEXT: 'TEXT'\n}\n\nexport const OPTION_VALUE_MAPPER_PAGE_COUNT = 8\nexport const OPTION_VALUE_MAPPER_ROW_HEIGHT = 30\nexport const OPTION_VALUE_MAPPER_ROW_GAP = 10\n\nexport const DASHBOARD_SIDEBAR_WIDTH_PX = 240\nexport const DASHBOARD_SIDEBAR_MINIMIZED_WIDTH_PX = 65\nexport const DASHBOARD_SIDEBAR_USER_MENU_WIDTH = DASHBOARD_SIDEBAR_WIDTH_PX + 110\nexport const DASHBOARD_SIDEBAR_USER_MENU_BORDER_RADIUS_PX = 8\n\nexport const PAYDI_MENU_TRANSITION_DURATION_MILLISECONDS = 300\n\nexport const CONTENT_TYPES = {\n LINK: 'LINK',\n SHORT: 'SHORT',\n INFLUENCER: 'INFLUENCER',\n MULTILINK: 'MULTILINK',\n}\n\nexport const ALERT_MESSAGE_TYPES = {\n SUCCESS: 'success',\n INFO: 'info',\n WARNING: 'warning',\n ERROR: 'error'\n}\n\nexport const SHOPBOARD_SOCIALS = {\n INSTAGRAM: 'instagram',\n TIKTOK: 'tiktok',\n PINTEREST: 'pinterest'\n}\n\nexport const SHOPBOARD_POST_LIST_COUNT = 24\nexport const NUMBER_TYPES = {\n PERCENTAGE: 'PERCENTAGE',\n SHORT: 'SHORT',\n NORMAL: 'NORMAL',\n PRICE: 'PRICE'\n}\n\nexport const LINK_PRODUCT_SELECT_MAX_LIMIT = 15\n\nexport const FREE_TRIAL_STRIP_HEIGHT = 50\n\nexport const INFLUENCER_PREVIEW_LINKS_PAGINATION_OFFSET = 4\nexport const INFLUENCER_PREVIEW_SHORTS_PAGINATION_OFFSET = 2\n\nexport const NOT_PRO_MAX_INFLUENCER_NUMBER = 3\n\nexport const TRENDS_PAGE_PRODUCT_IMAGE_HEIGHT_PX = 110\nexport const TRENDS_PAGE_PRODUCT_IMAGE_WIDTH_PX = 100\n\nexport const IMAGE_LOADING_IMAGE_SRV_TEXT = \"LOADING\"\n\nexport const SHOPEAKS_AI_TAGGING_SENSITIVITY_OPTIONS = {\n OFF: {\n title: 'OFF',\n subtitle: 'No products detection',\n },\n HIGH: {\n title: 'High',\n subtitle: '',\n },\n MEDIUM: {\n title: 'Medium',\n subtitle: '',\n },\n LOW: {\n title: 'Low',\n subtitle: 'Max products detection',\n }\n\n}","export const REQUEST_HEADER_AUTH_KEY = 'Authorization'\nexport const COMMIT_LOGS_API_URL = '/api/logs/commit'\nexport const AUTH_API_URL = '/auth/verify'\nexport const REGISTER_CONNECT_STORE_API_ROUTE = '/auth/register/connect'\nexport const LOGIN_CONNECT_STORE_API_ROUTE = '/auth/login/connect'\nexport const LOGIN_API_URL = '/auth/login'\nexport const REGISTER_API_URL = '/auth/register'\nexport const PASSWORD_RESET_REQUEST_API_ROUTE = '/password/reset/request'\nexport const PASSWORD_RESET_REQUEST_API_URL = '/auth' + PASSWORD_RESET_REQUEST_API_ROUTE\nexport const PASSWORD_RESET_API_URL = '/auth/password/reset'\nexport const USER_RESET_API_URL = '/auth/user/password/reset/request'\nexport const UPDATE_USER_INFO_API_URL = '/auth/update/info'\nexport const LINKS_API_ROUTE = '/admin/v1/links'\nexport const MULTILINKS_API_ROUTE = '/admin/v1/links/multi'\nexport const EDIT_LINK_API_URL_SUFFIX = 'edit'\nexport const DELETE_LINK_API_URL_SUFFIX = 'close'\nexport const CREATE_LINK_API_URL_SUFFIX = 'create'\nexport const UPLOAD_FILE_API_URL = '/admin/v1/file/upload'\nexport const PRODUCT_SEARCH_API_URL = '/admin/v1/products/search'\nexport const PRODUCT_OPTIONS_IMAGE_API_URL = '/admin/v1/products/options/image'\nexport const PRODUCT_TOP_PERFORMING_API_URL = '/admin/v1/products/trends/top-performing'\nexport const PRODUCT_TOP_COMBINATIONS_API_URL = '/admin/v1/products/trends/top-combinations'\nexport const PRODUCT_COMPLEMENTARY_API_URL = '/admin/v1/products/trends/complementary'\nexport const PRODUCT_SEARCH_IN_MEDIA_API_URL = '/admin/v1/products/media/search'\nexport const AUTH_STORE_CONNECT_API_URL_PREFIX = '/admin/v1/store'\nexport const AUTH_STORE_CONNECT_API_URL = '/auth/connect'\nexport const STORE_CONNECT_API_URL = '/connect'\nexport const STORE_DISCONNECT_API_URL = '/disconnect'\nexport const BUSINESS_SETTINGS_API_URL = '/admin/v1/businesses/settings'\nexport const UPGRADE_PRICING_PLAN_API_URL = AUTH_STORE_CONNECT_API_URL_PREFIX + '/plan/upgrade/request'\nexport const CANCEL_PRICING_PLAN_API_URL = AUTH_STORE_CONNECT_API_URL_PREFIX + '/plan/cancel'\nexport const BUSINESS_ANALYTICS_API_URL_PREFIX = LINKS_API_ROUTE + '/analytics/business'\nexport const LINK_ANALYTICS_API_URL_PREFIX = LINKS_API_ROUTE + '/analytics'\nexport const OVERVIEW_API_URL_SUFFIX = '/overview'\nexport const VALIDATE_USERNAME_API_URL = '/auth/validate/username'\nexport const VALIDATE_EMAIL_API_URL = '/auth/validate/email'\nexport const STORE_SETTINGS_API_URL_PREFIX = AUTH_STORE_CONNECT_API_URL_PREFIX\nexport const STORE_SETTINGS_API_URL_SUFFIX = '/settings'\nexport const STORE_APPEARANCE_SETTINGS_API_URL_SUFFIX = '/appearance'\nexport const STORE_ORDERS_API_URL_SUFFIX = '/orders'\nexport const STORE_ORDER_DETAILS_API_URL_SUFFIX = '/details'\nexport const APPEARANCE_SETTINGS_OPTIONS_API_URL_SUFFIX = '/options'\nexport const STORE_SETTINGS_PRODUCT_SYNC_API_URL_SUFFIX = '/sync'\nexport const STORE_SETTINGS_THEME_UPDATE_API_URL_SUFFIX = '/theme'\nexport const ARCHIVE_LINKS_API_URL_PREFIX = LINKS_API_ROUTE\nexport const ARCHIVE_LINKS_API_URL_SUFFIX = '/archive'\nexport const ACCOUNT_VERIFICATION_API_URL = '/auth/account/verify'\nexport const REGISTRATION_REQUEST_API_URL = '/auth/register/request'\nexport const INSIGHTS_REQUEST_API_URL = '/admin/v1/insights'\n\nexport const COLLECTIONS_API_BASE_URL = '/admin/v1/collections'\nexport const INFLUENCERS_API_BASE_URL = '/admin/v1/influencers'\nexport const SHOPBOARD_API_BASE_URL = '/admin/v1/shopboard'\nexport const ANALYTICS_API_SUFFIX = '/analytics'\nexport const ANALYTICS_REPORT_API_SUFFIX = ANALYTICS_API_SUFFIX + '/report'\nexport const VISIBLE_API_SUFFIX = '/visible'\nexport const TAG_PRODUCTS_API_SUFFIX = '/tag_products'\nexport const POSTS_API_SUFFIX = '/posts'\nexport const SYNC_POSTS_API_SUFFIX = '/sync'\nexport const CONNECT_API_SUFFIX = '/connect'\nexport const DISCONNECT_API_SUFFIX = '/disconnect'\nexport const INFLUENCERS_ACTIVATE_INFLUENCER_API_SUFFIX = '/activate'\nexport const INFLUENCERS_CREATE_INFLUENCER_API_SUFFIX = '/create'\nexport const INFLUENCERS_EDIT_INFLUENCER_API_SUFFIX = '/edit'\nexport const INFLUENCERS_LOGIN_API_LOGIN_ROUTE = '/login'\nexport const INFLUENCERS_VALIDATE_INFLUENCER_USERNAME_API_SUFFIX = '/validate/username'\nexport const INFLUENCERS_PASSWORD_RESET_API_ROUTE = '/password/reset'\nexport const AUTH_API_ROUTE = '/auth'\n\nexport const SEARCH_ROUTE = '/search'\nexport const STORE_API_BASE_URL = '/admin/v1/store'","export const AUTH_TOKEN_KEY_LOCAL_STORAGE = 'token'","import { \n LocalStorageGetItem, \n LocalStorageRemoveItem, \n LocalStorageSetItem \n} from \"../services/LocalStorage\";\n\nclass SharedPreferences {\n constructor() {\n this.archive = {};\n this.keys = Object.keys(window.localStorage);\n this.keys.forEach(key => {\n this.archive[key] = window.localStorage.getItem(key);\n });\n };\n\n get_key(key) {\n if(this.archive.hasOwnProperty(key)){\n let value = this.archive[key];\n return value;\n } else {\n let value = LocalStorageGetItem(key, null);\n if(!value)\n this.archive[key] = value;\n return value;\n }\n }\n\n set_key(key, value){\n LocalStorageSetItem(key, value);\n this.archive[key] = value;\n }\n \n remove_key(key){\n if(this.archive.hasOwnProperty(key)){\n delete this.archive[key];\n }\n LocalStorageRemoveItem(key);\n }\n}\n\nexport const LocalSharedPreferences = new SharedPreferences()","\nexport function LocalStorageGetItem(key, initialValue) {\n\tconst item = window.localStorage.getItem(key);\n\treturn item ? item : initialValue;\n}\n\nexport function LocalStorageSetItem(key, value) {\n\ttry {\n\t\twindow.localStorage.setItem(key, value);\n\t\treturn true;\n\t} catch (error) {\n\t\tconsole.error(error);\n\t\treturn false;\n\t}\n}\n\nexport function LocalStorageRemoveItem(key) {\n\twindow.localStorage.removeItem(key);\n}\n\nexport function LocalStorageClear() {\n\twindow.localStorage.clear();\n}\n","import { logger } from '../services/CloudLogger'\nimport { REQUEST_TIMEOUT_MILLISECONDS } from '../constants/general.constants'\nimport { REQUEST_HEADER_AUTH_KEY } from '../constants/api.constants'\nimport { AUTH_TOKEN_KEY_LOCAL_STORAGE } from '../constants/storage.constants'\nimport { LocalSharedPreferences } from '../services/SharedPreferences';\n\n\n/**\n * This function is called on everey request response.\n * Returns the reponse data.\n * In Case of an error, throws an error with the error status.\n */\nasync function parseResponse(res) {\n let data = {};\n // If a body response exists, parse anx extract the possible properties\n if (res.ok) {\n data = res.status !== 204 ? await res.json() : {};\n } else {\n logger.log(\"Request Error: \", res.status);\n if (res.status === \"401\") {\n //window.location.reload(false);\n // TODO: handle it\n }\n throw new Error(res.status);\n }\n return data;\n}\n\nfunction fetchWithTimeout(url, options, timeout) {\n return Promise.race([\n fetch(url, options),\n new Promise((_, reject) =>\n setTimeout(() => reject(\"REQUEST_TIMEOUT_ERROR_MESSAGE\"), timeout)\n )\n ]);\n}\n/**\n * This function is a wrpper function for the a simple fetch request.\n * In case of a successful request, returns the response.json() promise.\n * params:\n * url - The full http server url for which the request will be sent.\n * options - A dectionary defining the request:\n * headers: The custom headers.\n * query: custom queries.\n * method: 'GET', 'POST, etc.\n * body: The custom body.\n * any extra options will be added as is to the request.\n */\n export function simple_request(url, options = {}, timeout = REQUEST_TIMEOUT_MILLISECONDS, isFile=false, shouldParseResponse=true) {\n const {\n headers,\n query = null,\n method = 'GET',\n body,\n ...extraOpts\n } = options;\n\n // Compose the request configuration object\n const reqOptions = method === 'GET' ? {\n method,\n headers,\n query,\n ...extraOpts,\n } : {\n method,\n headers,\n body,\n query,\n ...extraOpts,\n };\n\n // If a body object is passed, automatically stringify it.\n if (reqOptions.body && !isFile) {\n reqOptions.body = JSON.stringify(reqOptions.body);\n }\n\n let queryString = '';\n if (query) {\n // Convert to encoded string and prepend with ?\n queryString = new URLSearchParams(query).toString();\n queryString = queryString && `?${queryString}`;\n }\n\n if (timeout) {\n return new Promise((resolve, reject) => {\n fetchWithTimeout(`${url}${queryString}`, reqOptions, timeout)\n .then((res) => resolve(shouldParseResponse ? parseResponse(res): res))\n .catch((error) => reject(error))\n })\n }\n \n return new Promise((resolve, reject) => {\n fetch(`${url}${queryString}`, reqOptions)\n .then((res) => resolve(shouldParseResponse ? parseResponse(res): res))\n .catch((error) => reject(error))\n })\n}\n\n/**\n * This function is a wrpper function for the a simple fetch request.\n * In case of a successful request, returns the response.json() promise.\n * params:\n * url - The full http server url for which the request will be sent.\n * options - A dectionary defining the request:\n * headers: The custom headers.\n * query: custom queries.\n * method: 'GET', 'POST, etc.\n * body: The custom body.\n * any extra options will be added as is to the request.\n */\nexport function request(url, options = {}, timeout = REQUEST_TIMEOUT_MILLISECONDS, shouldParseResponse=true) {\n const {\n headers,\n query = null,\n method = 'GET',\n body,\n ...extraOpts\n } = options;\n\n // Compose the request configuration object\n const reqOptions = {\n method,\n headers: {\n 'Content-Type': 'application/json',\n ...headers,\n },\n query,\n body: {\n // 'store_id': getStoreID(),\n ...body,\n },\n ...extraOpts,\n };\n\n return new Promise((resolve, reject) => {\n simple_request(url, reqOptions, timeout, false, shouldParseResponse).then(resolve).catch(reject);\n });\n}\n\n// For uploading files\nexport function request_post_file(url, options = {}, timeout = REQUEST_TIMEOUT_MILLISECONDS, shouldParseResponse=true) {\n const auth_token = LocalSharedPreferences.get_key(AUTH_TOKEN_KEY_LOCAL_STORAGE)\n if (auth_token) {\n options[\"headers\"] = {\n ...options[\"headers\"],\n [REQUEST_HEADER_AUTH_KEY]: auth_token,\n }\n }\n \n const {\n headers,\n query = null,\n method = 'GET',\n formData,\n ...extraOpts\n } = options;\n\n // formData.append('store_id', getStoreID());\n\n const reqOptions = {\n method,\n query,\n headers,\n body: formData,\n ...extraOpts,\n };\n\n return new Promise((resolve, reject) => {\n simple_request(url, reqOptions, timeout, true, shouldParseResponse).then(resolve).catch(reject);\n });\n}\n\n/**\n * This function is a wrpper function for the a fetch request.\n * It uses the Cognity Auth as an authentication service to get the authentication tokens and add them to the request.\n * In case of a successful request, returns the response.json() promise.\n * params:\n * url - The full http server url for which the request will be sent.\n * options - A dectionary defining the request:\n * headers: The custom headers.\n * query: custom queries.\n * method: 'GET', 'POST, etc.\n * body: The custom body.\n * any extra options will be added as is to the request.\n * isFile - If sending a file or regular jsonify data.\n * timeour - The maximum time to process and get an answer.\n */\nexport function request_auth(url, options = {}, isFile=false, timeout = REQUEST_TIMEOUT_MILLISECONDS, shouldParseResponse=true) {\n return new Promise((resolve, reject) => {\n\n const auth_token = LocalSharedPreferences.get_key(AUTH_TOKEN_KEY_LOCAL_STORAGE)\n if (auth_token) {\n options[\"headers\"] = {\n ...options[\"headers\"],\n [REQUEST_HEADER_AUTH_KEY]: auth_token,\n }\n }\n\n if (isFile) {\n request_post_file(url, options, timeout, shouldParseResponse).then(resolve).catch(reject);\n } else {\n request(url, options, timeout, shouldParseResponse).then(resolve).catch(reject);\n }\n });\n}","const debug = {\n terminal_name: \"paydin\",\n response_language: \"english\",\n base_url: \"http://127.0.0.1:5001\",\n frontend_url: \"http://127.0.0.1:3000/\",\n dashboard_url: \"http://127.0.0.1:3000/\",\n app_proxy_path: \"/apps/shopeaks-dev/\",\n}\n\nconst dev = {\n terminal_name: \"paydin\",\n response_language: \"english\",\n base_url: `https://api-dev.payli.in`,\n frontend_url: `https://l-dev.shopeaks.com/`,\n dashboard_url: `https://dev.payli.in/`,\n app_proxy_path: \"/apps/shopeaks-dev/\",\n}\n\nconst staging = {\n terminal_name: \"paydin\",\n response_language: \"english\",\n base_url: `https://api-staging.payli.in`,\n frontend_url: `https://l-staging.shopeaks.com/`,\n dashboard_url: `https://staging.payli.in/`,\n app_proxy_path: \"/apps/shopeaks-staging/\",\n}\n\nconst prod = {\n terminal_name: \"paydin\",\n response_language: \"english\",\n base_url: `https://api.payli.in`,\n frontend_url: `https://l.shopeaks.com/`,\n dashboard_url: `https://payli.in/`,\n app_proxy_path: \"/apps/shopeaks/\",\n}\n\nexport const environment = (() => {\n switch (process.env.REACT_APP_STAGE) {\n case \"debug\":\n return debug;\n case \"dev\":\n return dev;\n case \"staging\":\n return staging;\n case \"prod\":\n return prod;\n default:\n return null;\n }\n})()","import { CommitLogsAPI } from '../api/logger/logger'\n\nclass CloudLogger {\n /**\n * Class for logging frontend logs to cloud. The logger object helds an array of logs if the array hit max_logs or\n an error log recieved the logger commits the logs to cloud. \n * @param {*} max_logs \n */\n constructor(max_logs = 50) {\n this.logs = [];\n this.count = 0;\n this.max_logs = max_logs;\n this.is_committing = false;\n this.is_comminting_needed = false;\n };\n\n /**\n * Debug log to console\n * @param {*} message - The log message\n * @param {...any} optionalParams - More logs \n */\n debug(message) {\n console.log(message)\n }\n\n /**\n * Log to cloud\n * \n * @param {*} message - The log message\n * @param {*} force_commit - Is need to force commit to cloud\n */\n log(message, ...optionalParams) {\n let full_message = message + (optionalParams.length > 0 ? \"\\n\" + JSON.stringify(optionalParams) : \"\");\n this.debug(full_message)\n this.logs[this.count % this.max_logs] = full_message;\n // if ((this.logs.length >= this.max_logs) && !this.is_committing) {\n // this._commit();\n // }\n this.count++;\n }\n\n /**\n * Log error message. After error message all the logs is committed to cloud\n * @param {*} message - The log message\n */\n error(message) {\n this.log(\"ERROR:\\n\" + message + \"\\n\");\n this._commit();\n }\n\n /**\n * Commits the logs to cloud\n */\n _commit() {\n this.is_committing = true;\n let total_logs = this.logs.length;\n let start = this.count < total_logs ? 0 : this.count % total_logs + 1;\n let arr1 = this.logs.splice(start, total_logs);\n let arr2 = this.logs.splice(0, start - 1);\n let orderd_logs = arr1.concat(arr2);\n\n CommitLogsAPI(orderd_logs, null, null)\n .then(()=>{\n this.count = 0;\n this.start = 0;\n this.logs = [];\n })\n .catch((error)=>{\n this.logs.push(error);\n })\n .finally(() => {\n this.is_committing = false;\n });\n\n return orderd_logs;\n }\n}\n\nexport const logger = new CloudLogger()","import { request } from '../../services/RequestWrapper';\nimport { environment } from \"../../conf\";\nimport { COMMIT_LOGS_API_URL } from '../../constants/api.constants';\n\nexport function CommitLogsAPI(logs, store_id, cart_id) {\n return new Promise((resolve, reject) => {\n const options = {\n method: 'POST',\n body: {\n \"logs\": logs,\n \"store_id\": store_id,\n \"cart_id\": cart_id,\n },\n }\n request(environment.base_url + COMMIT_LOGS_API_URL, options)\n .then(resolve)\n .catch(reject)\n });\n}","import { logger } from '../services/CloudLogger'\n\nexport default class Stack {\n constructor() {\n this.storage = [];\n };\n \n push(element) {\n this.storage.push(element);\n };\n \n pop() {\n if (!this.isEmpty()) {\n // LIFO - pop, FIFO - shift\n return this.storage.pop();\n }\n else {\n logger.log('Stack is empty');\n }\n };\n \n isEmpty() {\n if (this.storage.length === 0) {\n return true;\n }\n else {\n return false;\n }\n };\n }","import React, { useContext } from 'react'\nimport { withRouter } from \"react-router-dom\"\nimport Stack from '../utils/Stack'\n\nconst historyContext = React.createContext();\n\nexport function useHistoryContext() {\n return useContext(historyContext);\n}\n\n\n// Origin: https://stackoverflow.com/a/62178171\n// 'onBackButton' is called when the back button is pressed.\n/**\n * Providing an storeProperties context to all children components.\n */\nclass HistoryProvider extends React.Component {\n constructor(props) {\n super(props);\n this.stack = new Stack()\n this.props.history.listen(this.onHistoryEvent);\n }\n\n onHistoryEvent = (e) => {\n if (this.props.history.action === 'PUSH') {\n }\n else if (this.props.history.action === 'POP') {\n this.popAndPerform()\n }\n }\n\n popAndPerform() {\n let backHandler = this.popBackHandler()\n if (backHandler != null)\n backHandler()\n }\n\n popBackHandler(step = 1) {\n for (let i = 0 ; i < step - 1 ; i++) {\n this.stack.pop()\n }\n return this.stack.pop()\n }\n\n goBackStepsNoPerform(step = 1) {\n for (let i = 0 ; i < step - 1 ; i++) {\n this.stack.pop()\n }\n this.replaceBackHandler(() => { })\n this.props.history.go(-step)\n }\n\n goBack(step = null) {\n if (!step)\n this.props.history.goBack();\n else {\n this.props.history.go(-step)\n for (let i = 0; i < step; i++) {\n this.popAndPerform()\n }\n }\n }\n\n push(url, onBackClicked = () => { }) {\n this.stack.push(onBackClicked);\n this.props.history.push(url);\n }\n\n replace(url, onBackClicked = () => { }) {\n this.stack.pop()\n this.stack.push(onBackClicked);\n this.props.history.replace(url);\n }\n\n replaceBackHandler(onBackClicked = () => { }) {\n this.stack.pop()\n this.stack.push(onBackClicked);\n }\n \n addBackHandler(onBackClicked) {\n this.stack.push(onBackClicked);\n this.props.history.push(this.props.history.location.pathname + this.props.history.location.search); //full url\n }\n\n render() {\n return (\n <historyContext.Provider value={this}>\n {this.props.children}\n </historyContext.Provider>\n );\n }\n}\n\nexport default withRouter(HistoryProvider);","import React from \"react\";\nimport { Route, Redirect } from \"react-router-dom\";\n\nfunction RouteWrapper({\n component: Component,\n layout: Layout,\n redirect = null,\n ...rest\n}) {\n\n return (\n <Route\n {...rest}\n render={(props) => {\n return redirect ? <Redirect to={redirect} /> : <>\n {Layout ? <Layout {...props}>\n <Component style={{ heigth: \"100%\" }} {...props} />\n </Layout> : <Component style={{ heigth: \"100%\" }} {...props} />}\n </>\n }}\n />\n );\n}\n\nexport default RouteWrapper;","import React from 'react'\nimport './Loader.css'\n\n/**\n * Represents a circular spinning loader used by {@link LoaderPage} component.\n * @param {object} styles A style object for styling customizations\n */\nexport default function Loader({ styles }) {\n\treturn (\n\t\t<div className='loader' style={{ ...styles }}></div>\n\t)\n}\n","import React, { useEffect, useRef, useState } from 'react'\nimport { Dialog } from '@mui/material'\nimport './PopupDialog.css'\nimport { PAYDIN_DIALOG_TRANSITION_DURATION } from 'constants/general.constants'\n\n/**\n * Represents a custom popup dialog.\n * @param {DOMElement} children - The content for this dialog\n * @param {boolean} isOpen - Determins whether the dialog is open or not\n * @param {function} onDialogClose - A callback to perform when closing the dialog\n * @param {object} styles - A custom styles object\n * @param {string} childClassName - A class name for the children's container element. Used to set the dialog's height dynamically\n * @param {boolean} hasNoWidthLimit - Determins whether the dialog has limited width (or maximum width property) or not\n * @param {string} backdropColor - The color of the dialog's background\n * @param {number} borderRadiusPx - The border radius of the dialog in pixels\n * @param {number} width - The width of the dialog in pixels. If non given, its width is set to 100%\n */\nexport default function PopupDialog({\n children,\n isOpen,\n onDialogClose,\n styles = {},\n childClassName = '',\n hasNoWidthLimit = false,\n hasNoHeightLimit = false,\n maxWidth = '600px',\n maxHeight = '600px',\n minHeight = '600px',\n backdropColor = 'rgba(0, 0, 0, 0.5)',\n borderRadiusPx = 20,\n width = null,\n margin = '15px'\n}) { \n const [dialogHeight, setDialogHeight] = useState(0)\n const dialogRef = useRef(null)\n\n useEffect(() => {\n setDialogHeight(getDialogHeight())\n })\n\n function getDialogHeight() {\n const dialogContentElement = dialogRef?.current?.querySelector(`.${childClassName}`)\n return dialogContentElement?.clientHeight\n }\n\n function getWidth() {\n if (!width) return '100%'\n if (typeof width !== 'number') return width\n return `${width}px`\n }\n\n const dialogContentStyles = {\n width: getWidth(),\n backgroundColor: 'white',\n margin,\n borderRadius: `${borderRadiusPx}px`,\n height: `${dialogHeight}px`,\n ...{ maxWidth: hasNoWidthLimit ? 'unset' : maxWidth },\n ...{ maxHeight: hasNoHeightLimit ? 'unset' : maxHeight },\n ...{ minHeight },\n ...styles\n }\n\n const dialogStyles = {\n '& .MuiBackdrop-root': {\n backgroundColor: backdropColor, // Set your desired backdrop color here\n },\n }\n\n return (\n <Dialog\n ref={dialogRef}\n open={isOpen}\n onClose={onDialogClose}\n fullScreen={false}\n sx={dialogStyles}\n PaperProps={{\n style: dialogContentStyles\n }}\n disableScrollLock={false}\n transitionDuration={PAYDIN_DIALOG_TRANSITION_DURATION}\n >\n {children}\n </Dialog>\n )\n}","export const EMAIL_PATTERN_REGEX = /^[\\w-\\.]+@([\\w-]+\\.)+[\\w-]{2,4}$/\nexport const URL_PARAMS_REGEX = /{{[\\w+_\\w+]+[\\|\\w+_\\w+]*}}/gi\nexport const HEBREW_CHARACTERS_REGEX = /[\\u0590-\\u05FF]/i\nexport const URL_REGEX = /[(http(s)?):\\/\\/(www\\.)?a-zA-Z0-9@:%._\\+~#=]{2,256}\\.[a-z]{2,6}\\b([-a-zA-Z0-9@:%_\\+.~#?&//=]*)/g\nexport const ONLY_NUMBERS_REGEX = /^[0-9.]*$/\nexport const NUMBERS_WITH_SYMBOLS_REGEX = /^[0-9.+]*$/\nexport const PHONE_NUMBER_REGEX = /^\\+?[0-9][0-9]{7,14}$/\nexport const INFLUENCER_USERNAME_REGEX = /^[0-9a-zA-Z_-]*$/","import { DASHBOARD_TOPBAR_HEIGHT_PX, MOBILE_PAGE_VIEW_TOPBAR_HEIGHT_PX, SCROLL_TO_ID_DELAY_MILLISECONDS } from \"constants/general.constants\";\nimport { HEBREW_CHARACTERS_REGEX } from \"constants/regex.constants\";\nimport { isMobile } from 'utils/deviceUtils'\n\n\n// Gets the mobile's OS - iOS/Android/Windows\nexport function getMobileOperatingSystem() {\n\tvar userAgent = navigator.userAgent || navigator.vendor || window.opera;\n\n\t// Windows Phone must come first because its UA also contains \"Android\"\n\tif (/windows phone/i.test(userAgent)) {\n\t\treturn \"Windows Phone\";\n\t}\n\n\tif (/android/i.test(userAgent)) {\n\t\treturn \"Android\";\n\t}\n\n\t// iOS detection from: http://stackoverflow.com/a/9039885/177710\n\tif (/iPad|iPhone|iPod/.test(userAgent) && !window.MSStream) {\n\t\treturn \"iOS\";\n\t}\n\n\treturn \"unknown\";\n}\n\n// Gets the value of a query variable in the current URL \nexport function getQueryVariable(variable, defaultValue = '') {\n\tvar query = window.location.search.substring(1);\n\tvar vars = query.split(\"&\");\n\tfor (var i = 0; i < vars.length; i++) {\n\t\tvar pair = vars[i].split(\"=\");\n\t\tif (pair[0] === variable) { return pair[1]; }\n\t}\n\treturn defaultValue;\n}\n\nexport function deleteQueryFromUrl(variable) {\n\tif (getQueryVariable(variable, null)) {\n\t\tconst url = new URL(window.location.href)\n\t\turl.searchParams.delete(variable);\n\t\twindow.history.pushState(null, '', url.toString())\n\t}\n}\n\n\nexport function getValueFromSet(key, set, defaultValue) {\n\treturn (!(key in set) || set[key] === undefined || set[key] === null) ? defaultValue : set[key];\n}\n\n/**\n * Calculates the pure height of an element, excluding padding.\n * @param {DOMElement} element - The element to calculate its pure height\n */\nexport function getElementHeight(element) {\n\tconst computedStyles = window.getComputedStyle(element, null)\n\treturn element.clientHeight - parseFloat(computedStyles.paddingTop) - parseFloat(computedStyles.paddingBottom)\n}\n\n/**\n * Copies text to the clipboard.\n * @param {string} text - The text to copy\n */\nexport async function copyToClipboard(text) {\n\ttry {\n\t\tawait navigator.clipboard.writeText(text);\n\t\tconsole.log('Text copied to clipboard');\n\t} catch (error) {\n\t\tconsole.error('Failed to copy text to clipboard:', error);\n\t}\n}\n\nexport function isInputValueValid(value) {\n\treturn !HEBREW_CHARACTERS_REGEX.test(value)\n}\n\n/**\n * Scrolls to a specific id via # in the page's URL.\n */\nexport function scrollToId() {\n\tsetTimeout(() => {\n\t\tconst id = window.location.href.substring(window.location.href.lastIndexOf('#') + 1)\n\t\tconst element = document.getElementById(id)\n\t\tif (element) {\n\t\t\twindow.scrollTo({ top: element.offsetTop - ((isMobile ? MOBILE_PAGE_VIEW_TOPBAR_HEIGHT_PX : DASHBOARD_TOPBAR_HEIGHT_PX) + 25), behavior: 'smooth' })\n\t\t}\n\t}, SCROLL_TO_ID_DELAY_MILLISECONDS)\n}\n\nexport function openUrl(url, newTab = true) {\n\twindow.open(url, newTab ? '_blank' : '_self').focus();\n}","import React, { useEffect, useRef, useState } from 'react'\nimport './LoaderButton.css'\nimport Loader from '../../components/Loader/Loader'\nimport { getElementHeight } from '../../services/SystemService'\n\n/**\n * Represents a button with a loader.\n * Its loader is shown after clicking on it.\n * @param {string} className - A class name for this button's frame\n * @param {string} buttonText - The text of this button\n * @param {boolean} isLoading - Determins whether the loader should be shown or not\n * @param {boolean} renderAsButton - If true, renders the button container as a 'button' element, otherwise, renders it as a 'div' element\n * @param {boolean} isDisabled - Determins whether the button is disabled or not\n * @param {string} loaderCircleColor - The color of the button's loader circle\n * @param {string} loaderArchColor - The color of the button's loader arch\n * @param {function} onClick - A function to invoke when clicking the button\n */\nexport default function LoaderButton({\n className = '',\n buttonText = '',\n isLoading = false,\n renderAsButton = false,\n isDisabled = false,\n loaderCircleColor = 'white',\n loaderArchColor = 'transparent',\n onClick = () => { },\n styles = {}\n}) {\n const [loaderDimensPx, setLoaderDimensPx] = useState(0)\n const [buttonHeight, setButtonHeight] = useState(0)\n const buttonRef = useRef(null)\n\n useEffect(() => {\n setButtonHeight(buttonRef.current.clientHeight)\n setLoaderDimensPx(getElementHeight(buttonRef.current))\n }, [])\n\n function onSubmitButtonClick(e) {\n e.preventDefault()\n if (isDisabled || isLoading) return\n onClick()\n }\n\n function renderButtonContent() {\n return <>\n {\n isLoading && <div style={{ height: buttonHeight }} className='loader-button-loader-container'>\n <Loader styles={{ width: `${loaderDimensPx}px`, height: `${loaderDimensPx}px`, margin: 'auto', borderColor: loaderCircleColor, borderTopColor: loaderArchColor, animationDuration: '500ms' }} />\n </div>\n }\n <div style={{ visibility: isLoading ? 'hidden' : 'visible' }} className=\"loader-button-text\">{buttonText}</div>\n </>\n }\n\n return (\n <>\n {\n renderAsButton ?\n <button style={styles} type='submit' disabled={isDisabled} ref={buttonRef} className={`loader-button-container ${className} ${isDisabled ? 'disabled' : ''}`} onClick={onSubmitButtonClick}>\n {renderButtonContent()}\n </button> : <div style={styles} ref={buttonRef} className={`loader-button-container ${className} ${isDisabled ? 'disabled' : ''}`} onClick={onSubmitButtonClick}>\n {renderButtonContent()}\n </div>\n }\n </>\n )\n}","import React, { useEffect, useState } from 'react'\nimport './PaydinDialog.css'\nimport { useTranslation } from 'react-i18next'\nimport {\n PAYDIN_DIALOG_CONTENT_PADDING_PX,\n PAYDIN_DIALOG_ON_BUTTON_CLICKED_CALLBACK_DELAY_MILLISECONDS\n} from 'constants/general.constants'\nimport PopupDialog from 'dialogs/PopupDialog/PopupDialog'\nimport { useHistoryContext } from 'contexts/History'\nimport LoaderButton from 'components/LoaderButton/LoaderButton'\nimport { isMobile } from 'utils/deviceUtils'\nimport { AiOutlineClose } from 'react-icons/ai'\n\nexport const PAYDIN_DIALOG_BUTTON_TYPES = {\n PRIMARY: 'dialog-button-primary',\n SECONDARY: 'dialog-button-secondary',\n UNDERLINED: 'dialog-button-underlined',\n}\n\n/**\n * Represents a custom dialog.\n * It displays a message and/or title and/or buttons for asking the user to take action.\n * \n * @param {string} title - A title for this dialog\n * @param {string} message - A message for this dialog \n * @param {boolean} isDialogOpen - Determines whether the dialog is shown or not\n * @param {number} titleFontSizePx - The font size of the title in pixels\n * @param {number} messageFontSizePx - The font size of the message in pixels\n * @param {number} dialogHeightPx - The height of the dialog in pixels\n * @param {boolean} isCloseButtonShown - Determines whether the close button is shown or not\n * @param {boolean} isCloseOnTouchOutside - Determines whether or not the dialog will be closed if the user touches outside\n * @param {function} handleDialogClose - A handler function for clicking this dialog's close button\n * @param {function} closeButtonHandler - A callback function to perform when clicking the X button. If no callback defined, \"handleDialogClose\" is used\n * @param {string} leftButtonText - The text for the left button, if is required\n * @param {string} rightButtonText - The text for the right button, if is required\n * @param {function} onLeftButtonClick - A handler function for clicking this dialog's left button\n * @param {function} onRightButtonClick - A handler function for clicking this dialog's right button\n * @param {boolean} isLeftButtonWithLoader - Determins whether the left button loader will be shown on click or not\n * @param {boolean} isRightButtonWithLoader - Determins whether the right button loader will be shown on click or not\n * @param {boolean} closeOnLeftClick - Determins whether to close the dialog after clicking left button or not\n * @param {boolean} closeOnRightClick - Determins whether to close the dialog after clicking right button or not\n * @param {string} leftButtonType - The button type that defines the styling for left button, can be one of PAYDIN_DIALOG_BUTTON_TYPES.PRIMARY, PAYDIN_DIALOG_BUTTON_TYPES.SECONDARY or PAYDIN_DIALOG_BUTTON_TYPES.UNDERLINED\n * @param {string} rightButtonType - The button type that defines the styling for right button, can be one of PAYDIN_DIALOG_BUTTON_TYPES.PRIMARY, PAYDIN_DIALOG_BUTTON_TYPES.SECONDARY or PAYDIN_DIALOG_BUTTON_TYPES.UNDERLINED\n * @param {boolean} hasButtons - Determins whether the dialog has buttons or not\n * @param {DOMElement} dialogLayout - A complete custom layout for the dialog\n */\nexport default function PaydinDialog({\n title,\n message,\n isDialogOpen,\n titleFontSizePx = 24,\n messageFontSizePx = 16,\n isCloseButtonShown = true,\n isCloseOnTouchOutside = true,\n handleDialogClose = null,\n closeButtonHandler = null,\n leftButtonText = '',\n rightButtonText = '',\n onLeftButtonClick = () => { },\n onRightButtonClick = () => { },\n isLeftButtonWithLoader = true,\n isRightButtonWithLoader = true,\n closeOnLeftClick = true,\n closeOnRightClick = true,\n leftButtonType = PAYDIN_DIALOG_BUTTON_TYPES.PRIMARY,\n rightButtonType = PAYDIN_DIALOG_BUTTON_TYPES.SECONDARY,\n hasButtons = true,\n dialogLayout = null,\n hasNoWidthLimit = false,\n hasNoHeightLimit = false,\n maxHeight = '600px',\n maxWidth = '600px',\n minHeight = null,\n backdropColor = 'rgba(0, 0, 0, 0.5)',\n backgroundColor = 'white',\n borderRadiusPx = 12,\n paddingPx = PAYDIN_DIALOG_CONTENT_PADDING_PX,\n width = null,\n height = null,\n margin = '15px',\n styles = {},\n onDialogClosedRightButton = () => { },\n onDialogClosedLeftButton = () => { }\n}) {\n const { t } = useTranslation()\n const history = useHistoryContext()\n\n const [isLeftButtonOperationPerforming, setIsLeftButtonOperationPerforming] = useState(false)\n const [isRightButtonOperationPerforming, setIsRightButtonOperationPerforming] = useState(false)\n\n const closeButtonStyle = {\n ...(t('direction.dir') === 'rtl' ? { left: `${PAYDIN_DIALOG_CONTENT_PADDING_PX}px` } : { right: `${PAYDIN_DIALOG_CONTENT_PADDING_PX}px` }),\n top: `${PAYDIN_DIALOG_CONTENT_PADDING_PX}px`\n }\n\n const titleStyle = {\n fontSize: `${titleFontSizePx}px`\n }\n\n const messageStyle = {\n fontSize: `${messageFontSizePx}px`\n }\n\n useEffect(() => {\n if (isDialogOpen && handleDialogClose) {\n history.addBackHandler(handleDialogClose)\n }\n }, [isDialogOpen])\n\n function handleLeftButtonClick() {\n if (isLeftButtonWithLoader) {\n setIsLeftButtonOperationPerforming(true)\n }\n onLeftButtonClick()\n if (closeOnLeftClick) {\n setTimeout(() => {\n closeDialog()\n }, PAYDIN_DIALOG_ON_BUTTON_CLICKED_CALLBACK_DELAY_MILLISECONDS / 2) // in order for Safari to work properly\n }\n setTimeout(() => {\n onDialogClosedLeftButton()\n }, PAYDIN_DIALOG_ON_BUTTON_CLICKED_CALLBACK_DELAY_MILLISECONDS) // making sure that the dialog is closed before going back again\n }\n\n function handleRightButtonClick() {\n if (isRightButtonWithLoader) {\n setIsRightButtonOperationPerforming(true)\n }\n onRightButtonClick()\n if (closeOnRightClick) {\n setTimeout(() => {\n closeDialog()\n }, PAYDIN_DIALOG_ON_BUTTON_CLICKED_CALLBACK_DELAY_MILLISECONDS / 2) // in order for Safari to work properly\n }\n setTimeout(() => {\n onDialogClosedRightButton()\n }, PAYDIN_DIALOG_ON_BUTTON_CLICKED_CALLBACK_DELAY_MILLISECONDS) // making sure that the dialog is closed before going back again\n }\n\n function closeDialog() { \n history.goBack()\n }\n\n return (\n <PopupDialog \n childClassName='paydin-dialog' \n isOpen={isDialogOpen} \n onDialogClose={isCloseOnTouchOutside ? closeDialog : null}\n hasNoWidthLimit={hasNoWidthLimit}\n hasNoHeightLimit={hasNoHeightLimit}\n maxHeight={maxHeight}\n maxWidth={maxWidth}\n backdropColor={backdropColor}\n borderRadiusPx={borderRadiusPx}\n width={width}\n margin={margin}\n minHeight={minHeight}\n styles={styles}\n >\n <div dir={t('direction.dir')} className='paydin-dialog' style={{ padding: `${paddingPx}px`, backgroundColor, ...(height ? { height } : {}), minHeight: minHeight ?? 'unset' }}>\n {\n dialogLayout ?? <>\n <div className=\"paydin-dialog-content\">\n {isCloseButtonShown && <AiOutlineClose style={{ ...closeButtonStyle }} className=\"close-dialog-image\" onClick={closeButtonHandler != null ? closeButtonHandler : closeDialog} />}\n {title && <h4 className='paydin-dialog-title' style={{ ...titleStyle }}>{title}</h4>}\n {message && <div className=\"paydin-dialog-message\" style={{ ...messageStyle }}>{message}</div>}\n </div>\n {\n hasButtons && <div className={isMobile ? 'mobile-paydin-dialog-buttons-container' : 'paydin-dialog-buttons-container'}>\n {\n leftButtonText && <LoaderButton\n isLoading={isLeftButtonOperationPerforming}\n loaderArchColor='grey'\n onClick={handleLeftButtonClick}\n className={`paydin-dialog-left-button general-dialog-button ${leftButtonType}`}\n buttonText={leftButtonText} />\n }\n {\n rightButtonText && <LoaderButton\n isLoading={isRightButtonOperationPerforming}\n loaderArchColor='grey'\n onClick={handleRightButtonClick}\n className={`paydin-dialog-right-button general-dialog-button ${rightButtonType}`}\n buttonText={rightButtonText} />\n }\n </div>\n }\n </>\n }\n </div>\n </PopupDialog>\n )\n}","import React from 'react'\nimport './ImageDialog.css'\nimport PaydinDialog from 'dialogs/PaydinDialog/PaydinDialog'\nimport ImageBox from 'components/ImageBox/ImageBox'\nimport { GrClose } from 'react-icons/gr'\nimport { useHistoryContext } from 'contexts/History'\nimport { isMobile } from 'utils/deviceUtils'\n\nexport default function ImageDialog({\n isDialogOpen,\n handleDialogClose,\n image\n}) {\n const history = useHistoryContext()\n\n function closeDialog() {\n if (handleDialogClose)\n handleDialogClose()\n history.goBack()\n }\n\n return (\n <PaydinDialog\n isDialogOpen={isDialogOpen}\n handleDialogClose={handleDialogClose}\n borderRadiusPx={10}\n maxHeight={isMobile ? '100vh' : '900px'}\n maxWidth={isMobile ? '100vw' : '900px'}\n backgroundColor='black'\n paddingPx={0}\n margin={isMobile ? 0 : '15px'}\n styles={{ overflow: 'hidden' }}\n dialogLayout={<>\n <GrClose className='image-dialog-close-button' onClick={closeDialog} />\n <ImageBox\n image={image}\n className='image-dialog-image-container'\n enlargeImageOnClick={false}\n />\n </>}\n />\n )\n}","import Loader from '../../components/Loader/Loader'\nimport React, { useEffect, useRef, useState } from 'react'\nimport './ImageBox.css'\nimport { IMAGE_BOX_DEFAULT_BORDER_RADIUS_PX, IMAGE_LOADING_IMAGE_SRV_TEXT, NO_IMAGE_PLACEHOLDER_URL } from 'constants/general.constants'\nimport ImageDialog from 'dialogs/ImageDialog/ImageDialog'\n\nconst IMAGE_EXTENSIONS = ['jpg', 'jpeg', 'png', 'gif', 'svg', 'webp']\nconst VIDEO_EXTENSIONS = ['mp4', 'webm', 'mov', 'avi', 'wmv']\n\n/**\n * Represents an image container with an optional loder to diaplay while the image is being loaded.\n * @param {Image/string} image - The image object or image url of the requested image\n * @param {string} className - A class name for the image container\n * @param {string} imageClassName - A class name for the image\n * @param {string} alt - An alternative text for the image\n * @param {boolean} showImageLoader - Determins whether to show the loader or not\n * @param {boolean} showGreyLoaderBackground - Determins whether to show grey background to the loader or not\n * @param {boolean} showGreyImageBackground - Determins whether to show grey background to the image or not\n * @param {boolean} showImageBorderRadius - Determins whether to show the image's border radius or not\n * @param {number} borderRadiusPx - The border radius of this image\n * @param {number} border - The border of this image\n * @param {boolean} isImageFitCover - Determins whether the image object fit css preperty is cover (if true) or not\n * @param {number} containerHeightPx - Overrides the image's original height, in pixels\n * @param {number} containerWidthPx - Overrides the image's original width, in pixels\n * @param {number} loaderWidth - The width of the loader in pixels\n * @param {number} loaderHeight - The height of the loader in pixels\n * @param {number} loaderBorderWidth - The width of the loader's circumference in pixels\n * @param {boolean} isWidthPercentage - Determins whether the width of the loader will be set as percentage or not\n * @param {boolean} isHeightPercentage - Determins whether the height of the loader will be set as percentage or not\n * @param {boolean} enlargeImageOnClick - Determins whether a click on the image opens a large dialog that contains the image in the center of the screen or not\n * @param {function} onImageClickCallback - A callback to perform when the image was clicked\n * @param {boolean} roundImage - Determins whether the image will be round or squared\n * @param {object} styles - Additional styles for the image container\n */\nexport default function ImageBox({\n image,\n className = '',\n imageClassName = '',\n alt = '',\n showImageLoader = false,\n showGreyLoaderBackground = false,\n showGreyImageBackground = false,\n showImageBorderRadius = false,\n showImageMask = false,\n borderRadiusPx = IMAGE_BOX_DEFAULT_BORDER_RADIUS_PX,\n showBorder = false,\n border = null,\n isImageFitCover = false,\n containerHeightPx = null,\n containerWidthPx = null,\n loaderWidth = 30,\n loaderHeight = 30,\n loaderBorderWidth = 2,\n isWidthPercentage = false,\n isHeightPercentage = false,\n enlargeImageOnClick = false,\n onImageClickCallback = null,\n roundImage = false,\n styles = {},\n allowVideo = false\n}) {\n\n const [isImageLoading, setIsImageLoading] = useState(false)\n const [imageDialogState, setImageDialogState] = useState({\n isOpen: false,\n handleDialogClose: closeImageDialog,\n imageUrl: ''\n })\n\n const imageRef = useRef(null)\n\n const containerStyles = {\n ...styles,\n ...(containerHeightPx != null ? { height: containerHeightPx } : {}),\n ...(containerWidthPx != null ? { width: containerWidthPx } : {}),\n cursor: enlargeImageOnClick || onImageClickCallback ? 'pointer' : 'initial'\n }\n\n useEffect(() => {\n if (showImageLoader) {\n if (image === IMAGE_LOADING_IMAGE_SRV_TEXT) {\n setIsImageLoading(true)\n } else if ([null, undefined].includes(image) || imageRef.current.complete) {\n setIsImageLoading(false)\n } else {\n imageRef.current.setAttribute('src', null)\n imageRef.current.setAttribute('src', image)\n setIsImageLoading(true)\n }\n }\n }, [image])\n\n function onImageLoad() {\n if (image !== IMAGE_LOADING_IMAGE_SRV_TEXT) {\n setIsImageLoading(false)\n }\n }\n\n function onImageError() {\n if (image !== IMAGE_LOADING_IMAGE_SRV_TEXT) {\n setIsImageLoading(false)\n }\n }\n\n function closeImageDialog() {\n setImageDialogState(prev => ({\n ...prev,\n isOpen: false\n }))\n }\n\n function showImageDialog() {\n setImageDialogState(prev => ({\n ...prev,\n isOpen: true,\n imageUrl: image\n }))\n }\n\n function onImageClick(e) {\n if (enlargeImageOnClick) {\n showImageDialog()\n } else {\n onImageClickCallback?.(e)\n }\n }\n\n function isVideo() {\n if (!image) return false\n const extension = image.split('.').pop()\n if (IMAGE_EXTENSIONS.includes(extension)) {\n return false\n } else if (VIDEO_EXTENSIONS.includes(extension)) {\n return true\n }\n return false\n }\n\n return (\n <div className={`image-box-container ${className}`} onClick={onImageClick} style={containerStyles}>\n {showImageMask && <div className=\"image-box-mask\" style={{ borderRadius: `${borderRadiusPx}px` }}></div>}\n {\n (isImageLoading && showImageLoader) && <div className=\"image-box-loader-container\" style={{ backgroundColor: showGreyLoaderBackground ? 'hsl(0, 0%, 90%)' : 'transparent' }}>\n <Loader styles={{\n width: `${loaderWidth}${isWidthPercentage ? '%' : 'px'}`,\n height: `${loaderHeight}${isHeightPercentage ? '%' : 'px'}`,\n borderWidth: `${loaderBorderWidth}px`\n }} />\n </div>\n }\n {\n allowVideo && isVideo() ? <video\n className={`image-box-image ${imageClassName}`}\n style={{\n display: isImageLoading ? 'none' : 'block',\n backgroundColor: showGreyImageBackground ? 'hsl(0, 0%, 90%)' : 'transparent',\n borderRadius: roundImage ? '50%' : (showImageBorderRadius ? `${borderRadiusPx}px` : 0),\n border: showBorder ? (border ?? '1px solid #cccccc') : '',\n objectFit: isImageFitCover ? 'cover' : 'contain'\n }}\n autoPlay\n muted\n playsInline\n loop\n onLoad={onImageLoad}\n onError={onImageError}\n >\n <source\n src={image}\n type=\"video/mp4\"\n />\n </video> : <img ref={imageRef}\n src={image ? image : NO_IMAGE_PLACEHOLDER_URL}\n alt={alt}\n className={`image-box-image ${imageClassName}`}\n style={{\n display: isImageLoading ? 'none' : 'block',\n backgroundColor: showGreyImageBackground ? 'hsl(0, 0%, 90%)' : 'transparent',\n borderRadius: roundImage ? '50%' : (showImageBorderRadius ? `${borderRadiusPx}px` : 0),\n border: showBorder ? (border ?? '1px solid #cccccc') : '',\n objectFit: isImageFitCover ? 'cover' : 'contain'\n }}\n onLoad={onImageLoad}\n onError={onImageError}\n />\n } \n {\n enlargeImageOnClick && <ImageDialog\n isDialogOpen={imageDialogState.isOpen}\n handleDialogClose={imageDialogState.handleDialogClose}\n image={imageDialogState.imageUrl}\n />\n }\n </div>\n )\n}\n","import { request_auth } from 'services/RequestWrapper';\nimport { environment } from \"conf\";\nimport {\n LINKS_API_ROUTE,\n EDIT_LINK_API_URL_SUFFIX,\n CREATE_LINK_API_URL_SUFFIX,\n DELETE_LINK_API_URL_SUFFIX,\n OVERVIEW_API_URL_SUFFIX,\n LINK_ANALYTICS_API_URL_PREFIX,\n ARCHIVE_LINKS_API_URL_PREFIX,\n ARCHIVE_LINKS_API_URL_SUFFIX,\n INSIGHTS_REQUEST_API_URL,\n ANALYTICS_API_SUFFIX,\n MULTILINKS_API_ROUTE\n} from 'constants/api.constants';\n\nexport function GetLinksAPI(businessId, searchQuery, count, skip, linkType) {\n return new Promise((resolve, reject) => {\n const options = {\n method: 'POST'\n }\n\n const url = `${environment.base_url}${LINKS_API_ROUTE}/${businessId}?q=${searchQuery}&count=${count}&skip=${skip}&link_type=${linkType}`\n request_auth(url, options)\n .then(response => {\n if (response.status) {\n resolve(response.data)\n } else {\n reject(response.error)\n }\n })\n .catch(error => {\n reject(error)\n })\n })\n}\n\nexport function GetMultilinksAPI(businessId, searchQuery, count, skip) {\n return new Promise((resolve, reject) => {\n const options = {\n method: 'POST'\n }\n\n const url = `${environment.base_url}${MULTILINKS_API_ROUTE}/${businessId}?q=${searchQuery}&count=${count}&skip=${skip}`\n request_auth(url, options)\n .then(response => {\n if (response.status) {\n resolve(response.data)\n } else {\n reject(response.error)\n }\n })\n .catch(error => {\n reject(error)\n })\n })\n}\n\nexport function GetLinkDetailsAPI(linkId) {\n return new Promise((resolve, reject) => {\n const options = {\n method: 'GET',\n }\n request_auth(environment.base_url + LINKS_API_ROUTE + `/${linkId}`, options)\n .then(response => {\n if (response.status) {\n resolve(response.data);\n } else {\n reject(response.error);\n }\n })\n .catch(error => {\n reject(error);\n });\n });\n}\n\n\nexport function GetMultilinkDetailsAPI(multilinkId) {\n return new Promise((resolve, reject) => {\n const options = {\n method: 'GET',\n }\n request_auth(environment.base_url + MULTILINKS_API_ROUTE + `/${multilinkId}`, options)\n .then(response => {\n if (response.status) {\n resolve(response.data);\n } else {\n reject(response.error);\n }\n })\n .catch(error => {\n reject(error);\n });\n });\n}\n\nexport function updateLookDetails(businessId, linkId, images, inventoryIds, selectedOptions, collectionsIds, promocode, linkDescription, shoppingRedirectURL, influencerUsername, utmParams, linkType) {\n return UpdateLinkDetailsAPI(businessId, linkId, images, inventoryIds, selectedOptions, collectionsIds, promocode, linkDescription, shoppingRedirectURL, influencerUsername, utmParams, linkType)\n}\n\nexport function updateShortDetails(businessId, linkId, promocode, linkDescription, shortImage, selectedProductIds, selectedCollectionIds, shoppingRedirectURL, influencerUsername, utmParams, linkType) {\n return UpdateLinkDetailsAPI(businessId, linkId, [shortImage], selectedProductIds, {}, selectedCollectionIds, promocode, linkDescription, shoppingRedirectURL, influencerUsername, utmParams, linkType)\n}\n\nfunction UpdateLinkDetailsAPI(businessId, linkId, images, inventoryIds, selectedOptions, collectionsIds, promocode, linkDescription, shoppingRedirectURL, influencerUsername, utmParams, linkType) {\n return new Promise((resolve, reject) => {\n const options = {\n method: 'POST',\n body: {\n images,\n inventory_ids: inventoryIds,\n selected_options: selectedOptions,\n collection_ids: collectionsIds,\n promocode,\n description: linkDescription,\n business_id: businessId,\n shopping_redirect_url: shoppingRedirectURL,\n influencer_username: influencerUsername,\n utm_params: {\n utm_source: utmParams.UTMSource,\n utm_medium: utmParams.UTMMedium,\n utm_campaign: utmParams.UTMCampaign,\n utm_term: utmParams.UTMTerm,\n utm_content: utmParams.UTMContent\n },\n link_type: linkType\n }\n }\n request_auth(environment.base_url + LINKS_API_ROUTE + `/${linkId}/` + EDIT_LINK_API_URL_SUFFIX, options)\n .then(response => {\n if (response.status) {\n resolve(response.data)\n } else {\n reject(response.error)\n }\n })\n .catch(error => {\n reject(error)\n });\n });\n}\n\nexport function UpdateMultilinkDetailsAPI(businessId, multilinkId, title, splitterType, promocode, utmParams, linksOptions) {\n return new Promise((resolve, reject) => {\n const options = {\n method: 'POST',\n body: {\n business_id: businessId,\n title,\n splitter_type: splitterType,\n promocode,\n utm_params: {\n utm_source: utmParams?.UTMSource ?? '',\n utm_medium: utmParams?.UTMMedium ?? '',\n utm_campaign: utmParams?.UTMCampaign ?? '',\n utm_term: utmParams?.UTMTerm ?? '',\n utm_content: utmParams?.UTMContent ?? '',\n },\n links_options: linksOptions?.map(linkOption => {\n return {\n value: linkOption?.value,\n device_option: linkOption?.deviceOption,\n link_id: linkOption?.linkId,\n link_resource: {\n images: linkOption?.linkData?.images,\n inventory_ids: linkOption?.linkData?.inventoryIds,\n collection_ids: linkOption?.linkData?.collectionIds,\n shopping_redirect_url: linkOption?.linkData?.shoppingRedirectUrl,\n link_type: linkOption?.linkData?.linkType,\n selected_options: linkOption?.linkData?.selectedOptions\n },\n }\n })\n }\n }\n request_auth(environment.base_url + MULTILINKS_API_ROUTE + `/${multilinkId}/` + EDIT_LINK_API_URL_SUFFIX, options)\n .then(response => {\n if (response.status) {\n resolve(response.data)\n } else {\n reject(response.error)\n }\n })\n .catch(error => {\n reject(error)\n });\n });\n}\n\nexport function createLookDetails(businessId, images, inventoryIds, selectedOptions, collectionsIds, promocode, linkDescription, shoppingRedirectURL, influencerUsername, utmParams, linkType) {\n return CreateLinkDetailsAPI(businessId, images, inventoryIds, selectedOptions, collectionsIds, promocode, linkDescription, shoppingRedirectURL, influencerUsername, utmParams, linkType)\n}\n\nexport function createShortDetails(businessId, promocode, shortDescription, shortImage, selectedProductIds, selectedCollectionIds, shoppingRedirectURL, influencerUsername, utmParams, linkType) {\n return CreateLinkDetailsAPI(businessId, [shortImage], selectedProductIds, {}, selectedCollectionIds, promocode, shortDescription, shoppingRedirectURL, influencerUsername, utmParams, linkType)\n}\n\n\n\nfunction CreateLinkDetailsAPI(businessId, images, inventoryIds, selectedOptions, collectionsIds, promocode, linkDescription, shoppingURL, influencerUsername, utmParams, linkType) {\n return new Promise((resolve, reject) => {\n const options = {\n method: 'POST',\n body: {\n images,\n inventory_ids: inventoryIds,\n selected_options: selectedOptions,\n collection_ids: collectionsIds,\n promocode,\n description: linkDescription,\n business_id: businessId,\n shopping_redirect_url: shoppingURL,\n influencer_username: influencerUsername,\n utm_params: {\n utm_source: utmParams?.UTMSource ?? '',\n utm_medium: utmParams?.UTMMedium ?? '',\n utm_campaign: utmParams?.UTMCampaign ?? '',\n utm_term: utmParams?.UTMTerm ?? '',\n utm_content: utmParams?.UTMContent ?? '',\n },\n link_type: linkType\n }\n }\n request_auth(environment.base_url + LINKS_API_ROUTE + '/' + CREATE_LINK_API_URL_SUFFIX, options)\n .then(response => {\n if (response.status) {\n resolve(response.data)\n } else {\n reject(response.error)\n }\n })\n .catch(error => {\n reject(error)\n });\n });\n}\n\n\nexport function CreateMultilinkDetailsAPI(businessId, title, splitterType, promocode, utmParams, linksOptions) {\n return new Promise((resolve, reject) => {\n const options = {\n method: 'POST',\n body: {\n business_id: businessId,\n title,\n splitter_type: splitterType,\n promocode,\n utm_params: {\n utm_source: utmParams?.UTMSource ?? '',\n utm_medium: utmParams?.UTMMedium ?? '',\n utm_campaign: utmParams?.UTMCampaign ?? '',\n utm_term: utmParams?.UTMTerm ?? '',\n utm_content: utmParams?.UTMContent ?? '',\n },\n links_options: linksOptions?.map(linkOption => {\n return {\n value: linkOption?.value,\n device_option: linkOption?.deviceOption,\n link_resource: {\n images: linkOption?.linkData?.images,\n inventory_ids: linkOption?.linkData?.inventoryIds,\n collection_ids: linkOption?.linkData?.collectionIds,\n shopping_redirect_url: linkOption?.linkData?.shoppingRedirectUrl,\n link_type: linkOption?.linkData?.linkType,\n selected_options: linkOption?.linkData?.selectedOptions\n },\n }\n })\n }\n }\n request_auth(environment.base_url + MULTILINKS_API_ROUTE + '/' + CREATE_LINK_API_URL_SUFFIX, options)\n .then(response => {\n if (response.status) {\n resolve(response.data)\n } else {\n reject(response.error)\n }\n })\n .catch(error => {\n reject(error)\n });\n });\n}\n\n\n/*\n Deletes a link.\n\n Method: [POST]\n URL: /admin/v1/links/<linkId>/close\n\n Route params:\n =============\n (*) linkId - The id of the link\n*/\nexport function DeleteLinkAPI(linkId) {\n return new Promise((resolve, reject) => {\n const options = {\n method: 'POST'\n }\n\n request_auth(environment.base_url + LINKS_API_ROUTE + `/${linkId}` + '/' + DELETE_LINK_API_URL_SUFFIX, options)\n .then(response => {\n if (response.status) {\n resolve()\n } else {\n reject(response.error)\n }\n })\n .catch(error => {\n reject(error)\n })\n })\n}\n\n\n/*\n Deletes a multilink.\n\n Method: [POST]\n URL: /admin/v1/links/multi/<linkId>/close\n\n Route params:\n =============\n (*) linkId - The id of the link\n*/\nexport function DeleteMultilinkAPI(multilinkId) {\n return new Promise((resolve, reject) => {\n const options = {\n method: 'POST'\n }\n\n request_auth(environment.base_url + MULTILINKS_API_ROUTE + `/${multilinkId}` + '/' + DELETE_LINK_API_URL_SUFFIX, options)\n .then(response => {\n if (response.status) {\n resolve()\n } else {\n reject(response.error)\n }\n })\n .catch(error => {\n reject(error)\n })\n })\n}\n\n\n/*\n Retrieves analytics' data of a specific business.\n\n Method: [GET]\n URL: /admin/v1/insights/overview\n\n Query params:\n ==============\n (*) fromDate - The start of the time range of the analytics data\n (*) toDate - The end of the time range of the analytics data\n*/\nexport function GetBusinessAnalytics(businessId, fromDate = null, toDate = null) {\n return new Promise((resolve, reject) => {\n const options = {\n method: 'GET'\n }\n\n const url = `${environment.base_url}${INSIGHTS_REQUEST_API_URL}${OVERVIEW_API_URL_SUFFIX}${fromDate !== null && toDate !== null ? `?from_date=${fromDate}&to_date=${toDate}` : ''}`\n\n request_auth(url, options)\n .then(response => {\n if (response.status) {\n resolve(response.data)\n } else {\n reject(response.error)\n }\n })\n .catch(reject)\n })\n}\n\n/*\n Retrieves analytics' data of a specific link.\n\n Method: [GET]\n URL: /admin/v1/links/analytics/<linkId>/overview\n\n Route params:\n =============\n (*) linkId - The id of the link\n \n Query params:\n ==============\n (*) fromDate - The start of the time range of the analytics data\n (*) toDate - The end of the time range of the analytics data\n*/\nexport function GetLinkAnalytics(linkId, fromDate = null, toDate = null) {\n return new Promise((resolve, reject) => {\n const options = {\n method: 'GET'\n }\n\n const url = `${environment.base_url}${LINK_ANALYTICS_API_URL_PREFIX}/${linkId}${OVERVIEW_API_URL_SUFFIX}${fromDate !== null && toDate !== null ? `?from_date=${fromDate}&to_date=${toDate}` : ''}`\n\n request_auth(url, options)\n .then(response => {\n if (response.status) {\n resolve(response.data)\n } else {\n reject(response.error)\n }\n })\n .catch(reject)\n })\n}\n\n/*\n Retreives the archived links.\n\n Method: [PUT]\n URL: /admin/v1/links/<businessId>/archive\n\n Route params:\n =============\n (*) businessId - The id of the current business\n\n Body params:\n ============\n (*) lastKey - A key indicating whether there are more links left to retreive\n*/\nexport function GetArchiveLinks(businessId, lastKey) {\n return new Promise((resolve, reject) => {\n const options = {\n method: 'PUT',\n body: {\n last_key: lastKey\n }\n }\n\n const url = `${environment.base_url}${ARCHIVE_LINKS_API_URL_PREFIX}/${businessId}${ARCHIVE_LINKS_API_URL_SUFFIX}`\n\n request_auth(url, options)\n .then(response => {\n if (response.status) {\n resolve(response.data)\n } else {\n reject(response.error)\n }\n })\n .catch(reject)\n })\n}\n\n/*\n Retreives the links of a specific influencer.\n\n Method: [POST]\n URL: /admin/v1/links/<businessId>/influencer/<influencerUsername>\n\n Route params:\n =============\n (*) businessId - The id of the current business\n (*) influencerUsername - The username of the requested influencer\n \n Body params:\n ============\n (*) count - The amount of links to retreive in every page\n (*) skip - The amount of links the server should skip before retreiving links\n (*) linkType - The requested links' type\n*/\nexport function GetInfluencerLinks(businessId, influencerUsername, count, skip, linkType = null) {\n return new Promise((resolve, reject) => {\n const options = {\n method: 'POST',\n body: {\n count,\n skip,\n ...(linkType ? { link_type: linkType } : {})\n }\n }\n\n const url = `${environment.base_url}${ARCHIVE_LINKS_API_URL_PREFIX}/${businessId}/influencer/${influencerUsername}`\n\n request_auth(url, options)\n .then(response => {\n if (response.status) {\n resolve(response.data)\n } else {\n reject(response.error)\n }\n })\n .catch(reject)\n })\n}\n\n/*\n Retreives the link's products.\n\n Method: [GET]\n URL: /admin/v1/links/analytics/{linkId}/products\n\n Query params:\n =============\n (*) count - The number of products in a single page\n (*) skip - The number of products to skip\n*/\nexport function getLinkProducts(linkId, count, skip) {\n return new Promise((resolve, reject) => {\n const options = {\n method: 'GET'\n }\n\n const url = `${environment.base_url}${LINKS_API_ROUTE}${ANALYTICS_API_SUFFIX}/${linkId}/products?count=${count}&skip=${skip}`\n request_auth(url, options)\n .then(response => {\n if (response.status) {\n resolve(response.data)\n } else {\n reject(response.error)\n }\n })\n .catch(reject)\n })\n}\n\n/*\n Retreives the link's products' total count.\n\n Method: [GET]\n URL: /admin/v1/links/analytics/{linkId}/products/count\n*/\nexport function getLinkProductsCount(linkId) {\n return new Promise((resolve, reject) => {\n const options = {\n method: 'GET'\n }\n\n const url = `${environment.base_url}${LINKS_API_ROUTE}${ANALYTICS_API_SUFFIX}/${linkId}/products/count`\n request_auth(url, options)\n .then(response => {\n if (response.status) {\n resolve(response.data)\n } else {\n reject(response.error)\n }\n })\n .catch(reject)\n })\n}\n\n/*\n Retreives the link's orders.\n\n Method: [GET]\n URL: /admin/v1/links/analytics/{linkId}/orders\n\n Query params:\n =============\n (*) count - The number of products in a single page\n (*) skip - The number of products to skip\n*/\nexport function getLinkOrders(linkId, count, skip) {\n return new Promise((resolve, reject) => {\n const options = {\n method: 'GET'\n }\n\n const url = `${environment.base_url}${LINKS_API_ROUTE}${ANALYTICS_API_SUFFIX}/${linkId}/orders?count=${count}&skip=${skip}`\n request_auth(url, options)\n .then(response => {\n if (response.status) {\n resolve(response.data)\n } else {\n reject(response.error)\n }\n })\n .catch(reject)\n })\n}\n\n/*\n Retreives a specific order of a link.\n\n Method: [GET]\n URL: /admin/v1/links/analytics/{linkId}/orders/{orderId}/details\n\n*/\nexport function getLinkOrder(linkId, orderId) {\n return new Promise((resolve, reject) => {\n const options = {\n method: 'GET'\n }\n\n const url = `${environment.base_url}${LINKS_API_ROUTE}${ANALYTICS_API_SUFFIX}/${linkId}/orders/${orderId}/details`\n request_auth(url, options)\n .then(response => {\n if (response.status) {\n resolve(response.data)\n } else {\n reject(response.error)\n }\n })\n .catch(reject)\n })\n}","import { request_auth } from 'services/RequestWrapper'\nimport { environment } from 'conf'\nimport { \n AUTH_API_URL, \n LOGIN_API_URL, \n REGISTER_API_URL, \n PASSWORD_RESET_REQUEST_API_URL, \n PASSWORD_RESET_API_URL, \n UPDATE_USER_INFO_API_URL, \n USER_RESET_API_URL, \n VALIDATE_EMAIL_API_URL,\n VALIDATE_USERNAME_API_URL,\n ACCOUNT_VERIFICATION_API_URL,\n REGISTRATION_REQUEST_API_URL\n} from 'constants/api.constants'\n\n/*\n Verifies the user and recieves the data about the business and user.\n\n Method: [POST]\n URL: /auth/verify\n\n*/\nexport function AuthAPI() {\n return new Promise((resolve, reject) => {\n const options = {\n method: 'POST'\n }\n request_auth(environment.base_url + AUTH_API_URL, options)\n .then(response => {\n if (response.status) {\n resolve(response.data);\n } else {\n reject(response.error);\n }\n })\n .catch(error => {\n reject(error);\n });\n });\n}\n\n/*\n Performs a user login using username and password.\n\n Method: [POST]\n URL: /auth/login\n\n Body params:\n ============\n (*) username - The username of the user\n (*) password - The password of the user\n*/\nexport function LoginAPI(username, password) {\n return new Promise((resolve, reject) => {\n const options = {\n method: 'POST',\n body: {\n username,\n password\n }\n }\n request_auth(environment.base_url + LOGIN_API_URL, options)\n .then(response => {\n if (response.status) {\n resolve(response.data);\n } else {\n reject(response.error);\n }\n })\n .catch(error => {\n reject(error);\n });\n });\n}\n\n/*\n Performs a user registration using username and password.\n\n Method: [POST]\n URL: /auth/register\n\n Body params:\n ============\n (*) username - The username of the user\n (*) password - The password of the user\n (*) name - The name of the user\n (*) email - The email of the user\n*/\nexport function RegisterAPI(username, password, email) {\n return new Promise((resolve, reject) => {\n const options = {\n method: 'POST',\n body: {\n username, \n password,\n name: username,\n email,\n }\n }\n request_auth(environment.base_url + REGISTER_API_URL, options)\n .then(response => {\n if (response.status) {\n resolve(response.data);\n } else {\n reject(response.error);\n }\n })\n .catch(error => {\n reject(error);\n });\n });\n}\n\n/*\n Sends a request for resetting the user's password.\n\n Method: [POST]\n URL: /auth/password/reset/request\n\n Body params:\n ============\n (*) username - The username of the user\n*/\nexport function ResetPasswordRequestAPI(username) {\n return new Promise((resolve, reject) => {\n const options = {\n method: 'POST',\n body: {\n username,\n }\n }\n request_auth(environment.base_url + PASSWORD_RESET_REQUEST_API_URL, options)\n .then(response => {\n if (response.status) {\n resolve();\n } else {\n reject();\n }\n })\n .catch(error => {\n reject(error);\n });\n });\n}\n\n/*\n Resets the user's password and creates a new one.\n\n Method: [POST]\n URL: /auth/password/reset\n\n Body params:\n ============\n (*) token - The reset password token\n (*) new_password - The new password of the user\n*/\nexport function ResetPasswordAPI(token, newPassword) {\n return new Promise((resolve, reject) => {\n const options = {\n method: 'POST',\n body: {\n token,\n new_password: newPassword\n }\n }\n request_auth(environment.base_url + PASSWORD_RESET_API_URL, options)\n .then(response => {\n if (response.status) {\n resolve()\n } else {\n reject(response.error)\n }\n })\n .catch(error => {\n reject(error)\n });\n });\n}\n\n/*\n Updates the user's information.\n\n Method: [PUT]\n URL: /auth/update/info\n\n Body params:\n ============\n (*) name - The new name for the user\n*/\nexport function UpdateUserInfo(name) {\n return new Promise((resolve, reject) => {\n const options = {\n method: 'PUT',\n body: {\n name\n }\n }\n\n const url = environment.base_url + UPDATE_USER_INFO_API_URL\n request_auth(url, options)\n .then(response => {\n if (response.status) {\n resolve(response.data);\n } else {\n reject(response.error);\n }\n })\n .catch(reject)\n })\n}\n\n/*\n Sends a request for resetting the user's password.\n Used inside the user's account page.\n\n Method: [GET]\n URL: /auth/user/password/reset/request\n\n*/\nexport function ResetUserPassword() {\n return new Promise((resolve, reject) => {\n const options = {\n method: 'GET'\n }\n\n const url = environment.base_url + USER_RESET_API_URL\n request_auth(url, options)\n .then(response => {\n if (response.status) {\n resolve(response.data);\n } else {\n reject(response.error);\n }\n })\n .catch(reject)\n })\n}\n\n/*\n Checks the existance of the given username when signing up.\n\n Method: [POST]\n URL: /auth/validate/username\n\n Body params:\n ============\n (*) username - The new username\n*/\nexport function ValidateUsername(username) {\n return new Promise((resolve, reject) => {\n const options = {\n method: 'POST',\n body: {\n username\n }\n }\n\n const url = `${environment.base_url}${VALIDATE_USERNAME_API_URL}`\n\n request_auth(url, options)\n .then(response => {\n if (response.status) {\n resolve(response.data)\n } else {\n reject(response.error)\n }\n })\n .catch(reject)\n })\n}\n\n/*\n Checks the existance of the given email when signing up.\n\n Method: [POST]\n URL: /auth/validate/email\n\n Body params:\n ============\n (*) email - The new email\n*/\nexport function ValidateEmail(email) {\n return new Promise((resolve, reject) => {\n const options = {\n method: 'POST',\n body: {\n email\n }\n }\n\n const url = `${environment.base_url}${VALIDATE_EMAIL_API_URL}`\n\n request_auth(url, options)\n .then(response => {\n if (response.status) {\n resolve(response.data)\n } else {\n reject(response.error)\n }\n })\n .catch(reject)\n })\n}\n\n/*\n Verifies the newly created account.\n\n Method: [POST]\n URL: auth/account/verify\n\n Body params:\n ============\n (*) token = The verification token received from the verification email\n*/\nexport function VerifyAccount(token) {\n return new Promise((resolve, reject) => {\n const options = {\n method: 'POST',\n body: {\n token\n }\n }\n\n const url = environment.base_url + ACCOUNT_VERIFICATION_API_URL\n request_auth(url, options)\n .then(response => {\n if (response.status) {\n resolve()\n } else {\n reject(response.error)\n }\n })\n .catch(reject) \n })\n}\n\n/*\n Makes a registration request for a new user.\n\n Method: [POST]\n URL: /auth/register/request\n\n Body params:\n ============\n (*) name - The name of the new user\n (*) email - The email of the new user\n (*) description - The description of the new user\n*/\nexport function RequestRegistration(name, email, description) {\n return new Promise((resolve, reject) => {\n const options = {\n method: 'POST',\n body: {\n name,\n email,\n description\n }\n }\n\n const url = environment.base_url + REGISTRATION_REQUEST_API_URL\n request_auth(url, options)\n .then(response => {\n if (response.status) {\n resolve(response.data)\n } else {\n reject(response.error)\n }\n })\n .catch(reject)\n })\n}","import { environment } from \"conf\";\nimport { \n INFLUENCERS_ACTIVATE_INFLUENCER_API_SUFFIX, \n INFLUENCERS_API_BASE_URL, \n INFLUENCERS_CREATE_INFLUENCER_API_SUFFIX, \n INFLUENCERS_EDIT_INFLUENCER_API_SUFFIX, \n ANALYTICS_API_SUFFIX, \n INFLUENCERS_LOGIN_API_LOGIN_ROUTE, \n PASSWORD_RESET_REQUEST_API_ROUTE, \n INFLUENCERS_VALIDATE_INFLUENCER_USERNAME_API_SUFFIX, \n INFLUENCERS_PASSWORD_RESET_API_ROUTE,\n ANALYTICS_REPORT_API_SUFFIX\n} from \"constants/api.constants\";\nimport { REQUEST_TIMEOUT_MILLISECONDS } from \"constants/general.constants\";\nimport { request_auth } from \"services/RequestWrapper\";\n\n\nconst baseUrl = environment.base_url + INFLUENCERS_API_BASE_URL\n\n/*\n Retrieves all the influencers of the current logged in user.\n\n Method: [GET]\n URL: /admin/v1/influencers\n*/\nexport function GetInfluencers() {\n return new Promise((resolve, reject) => {\n const options = {\n method: 'GET'\n }\n\n const url = baseUrl\n request_auth(url, options)\n .then(response => {\n if (response.status) {\n resolve(response.data)\n } else {\n reject(response.error)\n }\n })\n .catch(reject)\n })\n}\n\n/*\n Retrieves a specific influencer.\n\n Method: [GET]\n URL: /admin/v1/influencers/<influencerUsername>\n\n Route params:\n =============\n (*) influencerUsername - The username of the requested influencer\n*/\nexport function GetInfluencer(influencerUsername) {\n return new Promise((resolve, reject) => {\n const options = {\n method: 'GET'\n }\n\n const url = `${baseUrl}/${influencerUsername}`\n request_auth(url, options)\n .then(response => {\n if (response.status) {\n resolve(response.data)\n } else {\n reject(response.error)\n }\n })\n .catch(reject)\n })\n}\n\n/*\n Retrieves analytics data for a specific influencer.\n\n Method: [GET]\n URL: /admin/v1/influencers/<influencerUsername>/analytics\n\n Route params:\n =============\n (*) influencerUsername - The username of the influencer\n \n Query params:\n ==============\n (*) fromDate - The start of the time range of the analytics data\n (*) toDate - The end of the time range of the analytics data\n*/\nexport function GetInfluencerAnalytics(influencerUsername, fromDate, toDate) {\n return new Promise((resolve, reject) => {\n const options = {\n method: 'GET'\n }\n\n const url = `${baseUrl}/${influencerUsername}${ANALYTICS_API_SUFFIX}${fromDate !== null && toDate !== null ? `?from_date=${fromDate}&to_date=${toDate}` : ''}`\n request_auth(url, options)\n .then(response => {\n if (response.status) {\n resolve(response.data)\n } else {\n reject(response.error)\n }\n })\n .catch(reject)\n })\n}\n\n/*\n Retrieves analytics data for all influencers.\n\n Method: [GET]\n URL: /admin/v1/influencers/analytics\n\n Query params:\n ==============\n (*) fromDate - The start of the time range of the analytics data, defaults to null\n (*) toDate - The end of the time range of the analytics data, defaults to null\n*/\nexport function GetInfluencersAnalytics(fromDate = null, toDate = null) {\n return new Promise((resolve, reject) => {\n const options = {\n method: 'GET'\n }\n\n const url = `${baseUrl}${ANALYTICS_API_SUFFIX}${fromDate !== null && toDate !== null ? `?from_date=${fromDate}&to_date=${toDate}` : ''}`\n request_auth(url, options)\n .then(response => {\n if (response.status) {\n resolve(response.data)\n } else {\n reject(response.error)\n }\n })\n .catch(reject)\n })\n}\n\n/*\n Deactivates an influencer.\n\n Method: [POST]\n URL: /admin/v1/influencers/<influencerUsername>/activate\n\n Route params:\n =============\n (*) influencerUsername - The username of the influencer\n*/\nexport function deactivateInfluencer(influencerUsername) {\n return new Promise((resolve, reject) => {\n const options = {\n method: 'POST',\n body: {\n activate: false\n }\n }\n\n const url = `${baseUrl}/${influencerUsername}${INFLUENCERS_ACTIVATE_INFLUENCER_API_SUFFIX}`\n request_auth(url, options)\n .then(response => {\n if (response.status) {\n resolve(response.data)\n } else {\n reject(response.error)\n }\n })\n .catch(reject)\n })\n}\n\n/*\n Activates an influencer.\n\n Method: [POST]\n URL: /admin/v1/influencers/<influencerUsername>/activate\n\n Route params:\n =============\n (*) influencerUsername - The username of the influencer\n*/\nexport function activateInfluencer(influencerUsername) {\n return new Promise((resolve, reject) => {\n const options = {\n method: 'POST',\n body: {\n activate: true\n }\n }\n\n const url = `${baseUrl}/${influencerUsername}${INFLUENCERS_ACTIVATE_INFLUENCER_API_SUFFIX}`\n request_auth(url, options)\n .then(response => {\n if (response.status) {\n resolve(response.data)\n } else {\n reject(response.error)\n }\n })\n .catch(reject)\n })\n}\n\n/*\n Creates an influencer.\n\n Method: [POST]\n URL: /admin/v1/influencers/create\n\n Body params:\n =============\n (*) influencerUsername - The username of the influencer\n (*) email - The email of the influencer\n (*) profileImageUrl - The profile image url of the influencer\n (*) promocode - The promocode of the influencer\n (*) commission - The commission of the influencer\n (*) influencerPermissions - The analytics permissions of the influencer\n*/\nexport function createInfluencer(influencerUsername, email, profileImageUrl, promocode, commission, phoneNumber, influencerPermissions, influencerCommissionRules, influencerRevenueRules) {\n return new Promise((resolve, reject) => {\n const options = {\n method: 'POST',\n body: {\n username: influencerUsername,\n email,\n profile_image_url: profileImageUrl,\n promocode,\n commission: commission === '' ? 0 : Number(commission),\n phone: phoneNumber,\n permissions: {\n analytics_commission_enabled: influencerPermissions?.commissionEnabled,\n analytics_clicks_enabled: influencerPermissions?.clicksEnabled,\n analytics_sales_enabled: influencerPermissions?.salesEnabled,\n analytics_cr_enabled: influencerPermissions?.crEnabled,\n analytics_revenue_enabled: influencerPermissions?.revenueEnabled,\n analytics_aov_enabled: influencerPermissions?.aovEnabled,\n allow_creating_and_editing_links: influencerPermissions?.isActiveInfluencer\n },\n commission_rules: {\n reduce_refunds_from_commission: influencerCommissionRules?.reduceRefundsFromCommission,\n reduce_vat_from_commission: influencerCommissionRules?.reduceVatFromCommission\n },\n revenue_rules: {\n net_revenue_ratio: influencerRevenueRules?.netRevenueRatio === '' ? 100 : Number(influencerRevenueRules?.netRevenueRatio)\n }\n }\n }\n\n const url = `${baseUrl}${INFLUENCERS_CREATE_INFLUENCER_API_SUFFIX}`\n request_auth(url, options)\n .then(response => {\n if (response.status) {\n resolve(response.data)\n } else {\n reject(response.error)\n }\n })\n .catch(reject)\n })\n}\n\n/*\n Edits an influencer.\n\n Method: [POST]\n URL: /admin/v1/influencers/<influencerUsername>/edit\n\n Route params:\n =============\n (*) influencerUsername - The username of the influencer\n\n Body params:\n =============\n (*) email - The email of the influencer\n (*) profileImageUrl - The profile image url of the influencer\n (*) promocode - The promocode of the influencer\n (*) commission - The commission of the influencer\n (*) influencerPermissions - The analytics permissions of the influencer\n*/\nexport function updateInfluencer(influencerUsername, email, profileImageUrl, promocode, commission, phoneNumber, influencerPermissions, influencerCommissionRules, influencerRevenueRules) {\n return new Promise((resolve, reject) => {\n const options = {\n method: 'POST',\n body: {\n email,\n profile_image_url: profileImageUrl,\n promocode,\n commission: commission === '' ? 0 : Number(commission),\n phone: phoneNumber,\n permissions: {\n analytics_commission_enabled: influencerPermissions?.commissionEnabled,\n analytics_clicks_enabled: influencerPermissions?.clicksEnabled,\n analytics_sales_enabled: influencerPermissions?.salesEnabled,\n analytics_cr_enabled: influencerPermissions?.crEnabled,\n analytics_revenue_enabled: influencerPermissions?.revenueEnabled,\n analytics_aov_enabled: influencerPermissions?.aovEnabled,\n allow_creating_and_editing_links: influencerPermissions?.isActiveInfluencer\n },\n commission_rules: {\n reduce_refunds_from_commission: influencerCommissionRules?.reduceRefundsFromCommission,\n reduce_vat_from_commission: influencerCommissionRules?.reduceVatFromCommission\n },\n revenue_rules: {\n net_revenue_ratio: influencerRevenueRules?.netRevenueRatio === '' ? 100 : Number(influencerRevenueRules?.netRevenueRatio)\n }\n }\n }\n\n const url = `${baseUrl}/${influencerUsername}${INFLUENCERS_EDIT_INFLUENCER_API_SUFFIX}`\n request_auth(url, options)\n .then(response => {\n if (response.status) {\n resolve(response.data)\n } else {\n reject(response.error)\n }\n })\n .catch(reject)\n })\n}\n\n/*\n Validates the given influencer's username.\n\n Method: [POST]\n URL: /admin/v1/influencers/validate/username\n\n Body params:\n =============\n (*) username - The influencer's username for validation\n*/\nexport function validateInfluencerUsername(username) {\n return new Promise((resolve, reject) => {\n const options = {\n method: 'POST',\n body: {\n username\n }\n }\n\n const url = `${baseUrl}${INFLUENCERS_VALIDATE_INFLUENCER_USERNAME_API_SUFFIX}`\n request_auth(url, options)\n .then(response => {\n if (response.status) {\n resolve(response.data)\n } else {\n reject(response.error)\n }\n })\n .catch(reject)\n })\n}\n\n/*\n Sends a request for resetting the influencer's password.\n\n Method: [POST]\n URL: /admin/v1/influencers/password/reset/request\n\n Body params:\n =============\n (*) merchantUsername - The mechant's username\n (*) influencerUsername - The mechant's influencer's username\n*/\nexport function resetInfluencerPasswordRequest(merchantUsername, influencerUsername) {\n return new Promise((resolve, reject) => {\n const options = {\n method: 'POST',\n body: {\n username: merchantUsername,\n influencer_username: influencerUsername\n }\n }\n\n const url = `${baseUrl}${PASSWORD_RESET_REQUEST_API_ROUTE}` \n request_auth(url, options)\n .then(response => {\n if (response.status) {\n resolve(response.data)\n } else {\n reject(response.error)\n }\n })\n .catch(reject)\n })\n}\n\n\n/*\n Resets the influencer's password and sends it the info to the mail.\n\n Method: [POST]\n URL: /admin/v1/influencers/password/reset/request\n\n Body params:\n =============\n (*) influencerUsername - The mechant's influencer's username\n*/\nexport function resetInfluencerPassword(influencerUsername) {\n return new Promise((resolve, reject) => {\n const options = {\n method: 'GET',\n }\n\n const url = `${baseUrl}/${influencerUsername}${INFLUENCERS_PASSWORD_RESET_API_ROUTE}` \n request_auth(url, options)\n .then(response => {\n if (response.status) {\n resolve(response.data)\n } else {\n reject(response.error)\n }\n })\n .catch(reject)\n })\n}\n\n/*\n Logs in as an influencer.\n\n Method: [POST]\n URL: /admin/v1/influencers/login\n\n Body params:\n =============\n (*) email - The influencer's email for validation \n*/\nexport function influencerLoginAPI(merchantUsername, influencerUsername, influencerPassword) {\n return new Promise((resolve, reject) => {\n const options = {\n method: 'POST',\n body: {\n admin_username: merchantUsername,\n username: influencerUsername,\n password: influencerPassword\n }\n }\n\n const url = `${baseUrl}${INFLUENCERS_LOGIN_API_LOGIN_ROUTE}`\n request_auth(url, options)\n .then(response => {\n if (response.status) {\n resolve(response.data)\n } else {\n reject(response.error)\n }\n })\n .catch(reject)\n })\n}\n\n\n/*\n Retrieves influencer analytics report between dates.\n\n Method: [GET]\n URL: /admin/v1/influencers/<influencerUsername>/analytics\n\n Route params:\n =============\n (*) influencerUsername - The username of the influencer\n \n Query params:\n ==============\n (*) fromDate - The start of the time range of the analytics data\n (*) toDate - The end of the time range of the analytics data\n*/\nexport function GetInfluencerAnalyticsReport(influencerUsername, fromDate, toDate, timezone, filename=\"download.csv\") {\n return new Promise((resolve, reject) => {\n const options = {\n method: 'GET'\n }\n\n const url = `${baseUrl}/${influencerUsername}${ANALYTICS_REPORT_API_SUFFIX}?timezone=${timezone ?? \"UTC\"}${fromDate !== null && toDate !== null ? `&from_date=${fromDate}&to_date=${toDate}` : ''}`\n request_auth(url, options, false, 0, false)\n .then(async response => {\n try {\n const blob = await response.blob()\n const url = window.URL.createObjectURL(blob)\n\n // Create a hidden <a> and programmatically click\n const link = document.createElement(\"a\")\n link.href = url\n link.setAttribute(\"download\", filename)\n document.body.appendChild(link)\n link.click()\n\n // Cleanup\n document.body.removeChild(link)\n window.URL.revokeObjectURL(url)\n resolve()\n } catch (error) {\n console.log(error)\n reject(response.error)\n }\n })\n .catch(reject)\n })\n}","import React, { useEffect } from 'react'\nimport './ApprovalMessage.css'\nimport { GrClose } from 'react-icons/gr'\nimport { APPROVAL_MESSAGE_HIDDING_DELAY_MILLISECONDS, DASHBOARD_SIDEBAR_MINIMIZED_WIDTH_PX, DASHBOARD_SIDEBAR_WIDTH_PX } from 'constants/general.constants'\nimport { isMobile } from 'utils/deviceUtils'\nimport { useUserDetailsContext } from 'contexts/User'\n\n/**\n * Represents an approval message for saving changes scenarios.\n * The message is entering the screen with a nice translation animation.\n * @param {string} text - The text to display \n * @param {boolean} isUp - Determins whether the message is entering the screen from the top or bottom\n * @param {boolean} isMessageShown - Determins whether the message is shown or not\n * @param {function} closeMessage - A function for hiding the message\n */\nexport default function ApprovalMessage({\n text = '',\n isUp = false,\n isMessageShown = false,\n closeMessage = () => { }\n}) {\n const {\n userDetails\n } = useUserDetailsContext()\n\n useEffect(() => {\n if (isMessageShown) {\n setTimeout(() => {\n closeMessage()\n }, APPROVAL_MESSAGE_HIDDING_DELAY_MILLISECONDS)\n }\n }, [isMessageShown])\n\n return (\n <div style={{ left: !isMobile && (userDetails?.sidebarExpanded ? DASHBOARD_SIDEBAR_WIDTH_PX : DASHBOARD_SIDEBAR_MINIMIZED_WIDTH_PX) }} className={`${isMobile ? 'mobile-approval-message-container' : 'approval-message-container'} ${isMessageShown ? 'show' : ''} ${isUp ? 'up' : ''}`}>\n <div className=\"approval-message-text\">{text}</div>\n <GrClose className='approval-message-close-button' onClick={closeMessage} />\n </div>\n )\n}","import React, { useEffect } from 'react'\nimport './PaydinDrawer.css'\nimport { SwipeableDrawer } from '@mui/material'\nimport { PAYDIN_DRAWER_DIRECTION, PAYDIN_DRAWER_TRANSITION_DURATION } from 'constants/general.constants'\nimport { useHistoryContext } from 'contexts/History'\n\n/**\n * Represents a drawer.\n * It can be opened from any direction: top, left, right or bottom.\n * It can be closed by swiping the menu down or clicking/touching outside the drawer.\n * \n * @param {boolean} isOpen - Determins whether the drawer is open or not \n * @param {function} onOpen - A function that opens the drawer\n * @param {function} onClose - A function that closes the drawer\n * @param {string} direction - The direction from which the drawer will be opened, can be one of the following: \n * PAYDIN_DRAWER_DIRECTION.BOTTOM, PAYDIN_DRAWER_DIRECTION.TOP, PAYDIN_DRAWER_DIRECTION.RIGHT or PAYDIN_DRAWER_DIRECTION.LEFT\n * @param {number} topRightBorderRadiusPx - The top right border radius in pixels\n * @param {number} topLeftBorderRadiusPx - The top left border radius in pixels\n * @param {number} bottomRightBorderRadiusPx - The bottom right border radius in pixels\n * @param {number} bottomLeftBorderRadiusPx - The bottom left border radius in pixels\n * @param {boolean} hasPadding - Determins whether the drawer has padding or not\n * @param {number} paddingTopPx - The top padding of the drawer in pixels, ignored when 'hasPadding' is false\n * @param {number} paddingRightPx - The right padding of the drawer in pixels, ignored when 'hasPadding' is false\n * @param {number} paddingLeftPx - The left padding of the drawer in pixels, ignored when 'hasPadding' is false\n * @param {number} paddingBottomPx - The bottom padding of the drawer in pixels, ignored when 'hasPadding' is false\n * @param {boolean} disableBackdrop - Determins whether the grey background, which appears when the drawer is open, is shown or not\n * @param {string} height - A custom height for this drawer\n */\nexport default function PaydinDrawer({\n children,\n isOpen,\n onOpen,\n onClose,\n direction = PAYDIN_DRAWER_DIRECTION.BOTTOM,\n topRightBorderRadiusPx = 0,\n topLeftBorderRadiusPx = 0,\n bottomRightBorderRadiusPx = 0,\n bottomLeftBorderRadiusPx = 0,\n hasPadding = true,\n paddingTopPx = 20,\n paddingRightPx = 20,\n paddingLeftPx = 20,\n paddingBottomPx = 20,\n disableBackdrop = false,\n height = null,\n zIndex = null\n}) {\n const history = useHistoryContext()\n\n\n useEffect(() => {\n if (isOpen) {\n history.addBackHandler(onClose)\n }\n }, [isOpen])\n\n function isDirectionHorizontal() {\n return [\n PAYDIN_DRAWER_DIRECTION.RIGHT,\n PAYDIN_DRAWER_DIRECTION.LEFT\n ].includes(direction)\n }\n\n function closeDrawer() {\n history.goBack()\n }\n\n return (\n <SwipeableDrawer\n sx={{\n ...(zIndex ? { zIndex } : {}),\n \".MuiDrawer-paper\": {\n ...(height ? { height } : {}),\n width: isDirectionHorizontal() ? '90% !important' : '100% !important',\n borderTopRightRadius: `${topRightBorderRadiusPx}px`,\n borderTopLeftRadius: `${topLeftBorderRadiusPx}px`,\n borderBottomRightRadius: `${bottomRightBorderRadiusPx}px`,\n borderBottomLeftRadius: `${bottomLeftBorderRadiusPx}px`,\n },\n \".MuiBackdrop-root\": {\n opacity: disableBackdrop ? '0 !important' : 1\n }\n }}\n anchor={direction}\n open={isOpen}\n onClose={closeDrawer}\n onOpen={onOpen}\n swipeAreaWidth={0}\n transitionDuration={PAYDIN_DRAWER_TRANSITION_DURATION}\n >\n <div className=\"paydin-drawer-swiper\"></div>\n <div className=\"paydin-drawer-content\" style={{ padding: `${hasPadding ? paddingTopPx : 0}px ${hasPadding ? paddingRightPx : 0}px ${hasPadding ? paddingBottomPx : 0}px ${hasPadding ? paddingLeftPx : 0}px` }}>\n {children}\n </div>\n </SwipeableDrawer>\n )\n}","import { environment } from \"conf\"\nimport { ANALYTICS_API_SUFFIX, AUTH_API_ROUTE, CONNECT_API_SUFFIX, DISCONNECT_API_SUFFIX, POSTS_API_SUFFIX, SHOPBOARD_API_BASE_URL, SYNC_POSTS_API_SUFFIX, TAG_PRODUCTS_API_SUFFIX, VISIBLE_API_SUFFIX } from \"constants/api.constants\"\nimport { request_auth } from \"services/RequestWrapper\"\n\nconst baseUrl = environment.base_url + SHOPBOARD_API_BASE_URL\n\n/*\n Retrieves the shopboard status for the current user in all social medias.\n\n Method: [GET]\n URL: /admin/v1/shopboard\n\n*/\nexport function getShopboardStatus() {\n return new Promise((resolve, reject) => {\n const options = {\n method: 'GET'\n }\n\n const url = `${baseUrl}`\n request_auth(url, options)\n .then(response => {\n if (response.status) {\n resolve(response.data)\n } else {\n reject(response.error)\n }\n })\n .catch(reject)\n })\n}\n\n/*\n Retrieves the shopboard analytics for the current user in all social medias.\n\n Method: [GET]\n URL: /admin/v1/shopboard/analytics\n\n Query params:\n =============\n (*) fromDate - The start date of the shopboard analytics' date range\n (*) toDate - The end date of the shopboard analytics' date range, inclusive\n\n*/\nexport function getShopboardAnalytics(fromDate = null, toDate = null) {\n return new Promise((resolve, reject) => {\n const options = {\n method: 'GET'\n }\n\n const url = `${baseUrl}${ANALYTICS_API_SUFFIX}${fromDate !== null && toDate !== null ? `?from_date=${fromDate}&to_date=${toDate}` : ''}`\n request_auth(url, options)\n .then(response => {\n if (response.status) {\n resolve(response.data)\n } else {\n reject(response.error)\n }\n })\n .catch(reject)\n })\n}\n\n/*\n Toggles the shopboard post visibility in a specific post of a social media.\n\n Method: [POST]\n URL: /admin/v1/shopboard/<social>/<postId>/visible\n\n Route params:\n =============\n (*) social - The name of the social media containing the post\n (*) postId - The post id\n\n*/\nexport function toggleShopboardPostVisibility(social, postId, isVisible) {\n return new Promise((resolve, reject) => {\n const options = {\n method: 'POST',\n body: {\n is_visible: isVisible\n }\n }\n\n const url = `${baseUrl}/${social}/${postId}${VISIBLE_API_SUFFIX}`\n request_auth(url, options)\n .then(response => {\n if (response.status) {\n resolve(response.data)\n } else {\n reject(response.error)\n }\n })\n .catch(reject)\n })\n}\n\n/*\n Tags products for a specific post of a social media.\n\n Method: [POST]\n URL: /admin/v1/shopboard/<social>/<postId>/tag_products\n\n Route params:\n =============\n (*) social - The name of the social media containing the post\n (*) postId - The post id\n\n Body params:\n ============\n (*) productIds - An array of products' ids to tag\n\n*/\nexport function tagShopboardPostProducts(social, postId, productIds, selectedOptions={}) {\n return new Promise((resolve, reject) => {\n const options = {\n method: 'POST',\n body: {\n product_ids: productIds,\n selected_options: selectedOptions\n }\n }\n\n const url = `${baseUrl}/${social}/${postId}${TAG_PRODUCTS_API_SUFFIX}`\n request_auth(url, options)\n .then(response => {\n if (response.status) {\n resolve(response.data)\n } else {\n reject(response.error)\n }\n })\n .catch(reject)\n })\n}\n\n/*\n Retrieves the list of posts in a specific social media (paginated).\n\n Method: [POST]\n URL: /admin/v1/shopboard/<social>/posts\n\n Route params:\n =============\n (*) social - The name of the social media containing the post\n\n Body params:\n ============\n (*) count - The number of items per page\n (*) skip - The number of items to skip\n\n*/\nexport function getShopboardPosts(social, count, skip) {\n return new Promise((resolve, reject) => {\n const options = {\n method: 'GET',\n }\n\n const url = `${baseUrl}/${social}${POSTS_API_SUFFIX}?count=${count}&skip=${skip}`\n request_auth(url, options)\n .then(response => {\n if (response.status) {\n resolve(response.data)\n } else {\n reject(response.error)\n }\n })\n .catch(reject)\n })\n}\n\n/*\n Connects the current user to the requested social media.\n\n Method: [GET]\n URL: /admin/v1/shopboard/<social>/connect\n\n Route params:\n ==============\n (*) social - The social media name (lowercased) to which the user requests to connect\n*/\nexport function connectShopboardSocialMedia(social) {\n return new Promise((resolve, reject) => {\n const options = {\n method: 'GET'\n }\n\n const url = `${baseUrl}/${social}${CONNECT_API_SUFFIX}`\n request_auth(url, options)\n .then(response => {\n if (response.status) {\n resolve(response.data)\n } else {\n reject(response.error)\n }\n })\n .catch(reject)\n })\n}\n\n/*\n Disconnects the current user from the requested social media.\n\n Method: [POST]\n URL: /admin/v1/shopboard/<social>/auth/disconnect\n\n Route params:\n ==============\n (*) social - The social media name (lowercased) to which the user requests to connect\n*/\nexport function disconnectShopboardSocialMedia(social) {\n return new Promise((resolve, reject) => {\n const options = {\n method: 'POST'\n }\n\n const url = `${baseUrl}/${social}${AUTH_API_ROUTE}${DISCONNECT_API_SUFFIX}`\n request_auth(url, options)\n .then(response => {\n if (response.status) {\n resolve(response.data)\n } else {\n reject(response.error)\n }\n })\n .catch(reject)\n })\n}\n\n/*\n Connects the current user to the requested social media.\n\n Method: [POST]\n URL: /admin/v1/shopboard/<social>/auth/connect\n\n Route params:\n ==============\n (*) social - The social media name (lowercased) to which the user requests to connect\n\n Query params:\n =============\n (*) code - The connection code for the authentication\n*/\nexport function authenticateShopboardSocialMedia(social, code) {\n return new Promise((resolve, reject) => {\n const options = {\n method: 'POST',\n body: {\n code\n }\n }\n\n const url = `${baseUrl}/${social}${AUTH_API_ROUTE}${CONNECT_API_SUFFIX}`\n request_auth(url, options)\n .then(response => {\n if (response.status) {\n resolve(response.data)\n } else {\n reject(response.error)\n }\n })\n .catch(reject)\n })\n}\n\n/*\n Trigger a sync job to sync the posts in a specific social media.\n\n Method: [GET]\n URL: /admin/v1/shopboard/<social>/posts\n\n Route params:\n =============\n (*) social - The name of the social media containing the post\n*/\nexport function triggerSyncShopboardPosts(social) {\n return new Promise((resolve, reject) => {\n const options = {\n method: 'GET',\n }\n\n const url = `${baseUrl}/${social}${SYNC_POSTS_API_SUFFIX}`\n request_auth(url, options)\n .then(response => {\n if (response.status) {\n resolve(response.data)\n } else {\n reject(response.error)\n }\n })\n .catch(reject)\n })\n}","import { selectClasses } from \"@mui/material\"\nimport { DEFAULT_CURRENCY_CODE, NO_IMAGE_PLACEHOLDER_URL, ORDERS_TABLE_STATUS_OPTIONS } from \"constants/general.constants\"\n\n/**\n * Extracts data from the given link\n * @param {object} link - The given link\n * @returns The extracted link\n */\nexport function extractLinkData(link) {\n return {\n linkId: link?.link_id,\n title: link?.description ?? '',\n description: link?.description,\n createdAt: link?.created_at,\n image: link?.images && link?.images.length > 0 ? link?.images[0] : null,\n images: link?.images && link?.images?.length > 0 ? link?.images : [],\n defaultImage: link?.link_default_image ?? '',\n currency: link?.currency,\n revenue: link?.revenue,\n views: link?.visits,\n checkouts: link?.checkouts ?? 0,\n influencerUsername: link?.influencer_username,\n influencerImage: link?.influencerImage,\n shoppingRedirectUrl: link?.shopping_redirect_url ?? '',\n urlType: link?.url_type ?? '',\n linkType: link?.link_type ?? '',\n }\n}\n\n\n/**\n * Extracts data from the given multilink\n * @param {object} link - The given multilink\n * @returns The extracted multilink\n */\nexport function extractMultilinkData(multilink) {\n return {\n multilinkId: multilink?.multilink_id,\n title: multilink?.title ?? '',\n createdAt: multilink?.created_at,\n currency: multilink?.currency,\n splitterType: multilink?.splitter_type,\n linksOptions: multilink?.links_options?.map((linkOption, index) => {\n return {\n value: linkOption?.value,\n linkData: extractLinkData(linkOption?.link_resource)\n }\n }),\n }\n}\n\n\n/**\n * Extracts data from the given multilink\n * @param {object} link - The given multilink\n * @returns The extracted multilink\n */\nexport function extractMultilinkPreviewData(multilink) {\n return {\n multilinkId: multilink?.multilink_id,\n title: multilink?.title ?? '',\n createdAt: multilink?.created_at,\n currency: multilink?.currency,\n splitterType: multilink?.splitter_type,\n linksOptions: multilink?.links_options,\n }\n}\n\nexport function extractProductData(product, selectedOptions={}) {\n function compareByPosition(optionA, optionB) {\n return optionA.position - optionB.position\n } \n let options = product?.options ?? []\n options?.sort(compareByPosition)\n\n return {\n id: product?.inventory_id ?? '',\n title: product?.title ?? '',\n handle: product?.handle ?? '',\n imageUrl: product?.image?.src ?? '',\n productStatus: product?.product_status ?? '',\n hasNoQuantity: ![null, undefined].includes(product?.total_quantity) && product?.total_quantity <= 0,\n url: product?.url ?? '',\n sellingScore: product?.selling_score ?? 0,\n variantAvailabilityRatio: product?.variant_availability_ratio ?? 0,\n options: options ?? [],\n selectedOptions: selectedOptions,\n }\n}\n\nexport function extractProductRowData(productRow) {\n return {\n id: productRow?.product_id ?? '',\n title: productRow?.title ?? '',\n view: productRow?.view ?? 0,\n add: productRow?.add ?? 0,\n buy: productRow?.buy ?? 0,\n images: productRow?.image ?? {},\n rank: productRow?.rank ?? 0\n }\n}\n\nexport function extractCollectionData(collection) {\n return {\n id: collection?.collection_id ?? '',\n title: collection?.title ?? '',\n images: collection?.image ?? {},\n productsCount: collection?.products_count ?? 0,\n description: collection?.description ?? '',\n url: collection?.url ?? ''\n }\n}\n\nexport function extractInfluencerData(data) {\n return {\n username: data?.username ?? '',\n image: data?.profile_image_url ?? NO_IMAGE_PLACEHOLDER_URL,\n email: data?.email ?? '',\n promocode: data?.promocode ?? '',\n commissionRate: data?.commission,\n password: data?.password ?? '',\n isActive: data?.is_active ?? false\n }\n}\n\nexport function extractBasicInfluencerAnalytics(influencer) {\n return {\n username: influencer?.username ?? '',\n totalClicks: influencer?.total_clicks ?? 0,\n totalSales: influencer?.total_sales ?? 0,\n totalRevenue: influencer?.total_revenue ?? 0,\n currency: influencer?.currency ?? ''\n }\n}\n\nexport function extractExtendedInfluencerAnalytics(influencer) {\n return {\n clicks: (influencer?.clicks_looks ?? 0) + (influencer?.clicks_shorts ?? 0),\n linksClicks: influencer?.clicks_looks ?? 0,\n shortsClicks: influencer?.clicks_shorts ?? 0,\n commission: influencer?.commission ?? 0,\n currency: influencer?.currency ?? '',\n username: influencer?.influencer_username ?? '',\n revenueOrganic: influencer?.revenue_external ?? 0,\n revenueLinks: influencer?.revenue_looks ?? 0,\n revenueShorts: influencer?.revenue_shorts ?? 0,\n salesOrganic: influencer?.sales_external ?? 0,\n salesLinks: influencer?.sales_looks ?? 0,\n salesShorts: influencer?.sales_shorts ?? 0,\n totalSales: (influencer?.sales_external ?? 0) + (influencer?.sales_looks ?? 0) + (influencer?.sales_shorts ?? 0),\n totalRevenue: influencer?.total_sales ?? 0,\n totalRefunded: influencer?.total_refunded ?? 0,\n influencerAttributedRevenue: influencer?.influencer_attributed_revenue ?? 0,\n }\n}\n\nexport function extractOrderRowData(orderRow) {\n function getStatusDisplayName(status) {\n switch (status) {\n case ORDERS_TABLE_STATUS_OPTIONS.PAID: return 'PAID'\n case ORDERS_TABLE_STATUS_OPTIONS.REFUNDED: return 'REFUNDED'\n case ORDERS_TABLE_STATUS_OPTIONS.PARTIALLY_REFUNDED: return 'PARTIALLY REFUNDED'\n default: return ''\n }\n }\n return {\n id: orderRow?.order_id ?? '',\n createdAt: orderRow?.created_at ?? 0,\n currency: orderRow?.currency ?? '',\n status: getStatusDisplayName(orderRow?.order_status ?? ''),\n url: orderRow?.order_url ?? '',\n totalProductsCount: orderRow?.products_count ?? 0,\n totalPrice: orderRow?.total_price ?? 0.0\n }\n}\n\nexport function extractStoreOrderRowData(storeOrderRow) {\n function getStatusDisplayName(status) {\n switch (status) {\n case ORDERS_TABLE_STATUS_OPTIONS.PAID: return 'PAID'\n case ORDERS_TABLE_STATUS_OPTIONS.REFUNDED: return 'REFUNDED'\n case ORDERS_TABLE_STATUS_OPTIONS.PARTIALLY_REFUNDED: return 'PARTIALLY REFUNDED'\n default: return ''\n }\n }\n\n return {\n id: storeOrderRow?.order_id ?? '',\n createdAt: storeOrderRow?.created_at ?? 0,\n currency: storeOrderRow?.currency ?? DEFAULT_CURRENCY_CODE,\n influencerProfileImage: storeOrderRow?.influencer_profile_image_url ?? '',\n status: getStatusDisplayName(storeOrderRow?.order_status ?? ''),\n url: storeOrderRow?.order_url ?? '',\n totalProductsCount: storeOrderRow?.products_count ?? 0,\n totalPrice: storeOrderRow?.total_price ?? 0,\n linkDetails: storeOrderRow?.link_details ? {\n linkId: storeOrderRow?.link_details?.link_id ?? '',\n linkTitle: storeOrderRow?.link_details?.description ?? '',\n linkImage: storeOrderRow?.link_details?.images ? storeOrderRow?.link_details?.images[0] : '',\n linkDefaultImage: storeOrderRow?.link_details?.link_default_image ?? '',\n linkType: storeOrderRow?.link_details?.link_type ?? '',\n urlType: storeOrderRow?.link_details?.url_type ?? ''\n } : null\n }\n}\n\nexport function extractOrderProduct(orderDetailsProduct) {\n return {\n title: orderDetailsProduct?.title ?? '',\n imageUrl: orderDetailsProduct?.image?.small?.src ?? '',\n price: orderDetailsProduct?.price ?? 0,\n quantity: orderDetailsProduct?.quantity ?? 0,\n variantTitle: orderDetailsProduct?.variant_title ?? ''\n }\n}\n\nexport function extractShopboardSocialMediaPost(post) {\n const selectedOptions = post?.selected_options ?? {}\n return {\n id: post?.post_id ?? '',\n imageUrl: post?.image_url ?? '',\n products: post?.products ? post.products.map(product => {\n if (Object.keys(selectedOptions).includes(product?.inventory_id)) {\n return extractProductData(product, selectedOptions[product?.inventory_id])\n } else {\n return extractProductData(product)\n }\n }) : [],\n autoTaggedProducts: post?.auto_tagged_products ? post.auto_tagged_products.map(product => {\n return extractProductData(product)\n }) : [],\n isVisible: post?.visible ?? false,\n selectOptions: selectedOptions\n }\n}\n\nexport function cloneObject(obj) {\n return JSON.parse(JSON.stringify(obj))\n}","import React, { useEffect, useState } from 'react'\nimport './FreeTrialStrip.css'\nimport { useTranslation } from 'react-i18next'\nimport LoaderButton from 'components/LoaderButton/LoaderButton'\nimport { isMobile } from 'utils/deviceUtils'\nimport ImageBox from 'components/ImageBox/ImageBox'\nimport { useHistoryContext } from 'contexts/History'\nimport { PRICING_PLANS_PAGE_URL } from 'constants/routes.constants'\nimport { CiTimer } from \"react-icons/ci\";\nimport { LuCrown } from \"react-icons/lu\";\nimport { FREE_TRIAL_STRIP_HEIGHT, SHOPEAKS_LOGO_WHITE_URL } from 'constants/general.constants'\nimport { useUserDetailsContext } from 'contexts/User'\n\nexport default function FreeTrialStrip({\n daysLeft = 0\n}) {\n const { t } = useTranslation()\n const history = useHistoryContext()\n const { userDetails } = useUserDetailsContext()\n const [isStripShown, setIsStripShown] = useState(false)\n\n const [dialogState, setDialogState] = useState({\n isOpen: false,\n handleDialogClose: closeDialog,\n title: '',\n leftButtonText: '',\n rightButtonText: '',\n rightButtonClickHandler: () => { },\n leftButtonClickHandler: () => { },\n onDialogClosedLeftButton: () => { },\n onDialogClosedRightButton: () => { }\n })\n\n useEffect(() => {\n setTimeout(() => setIsStripShown(true), 1000)\n }, [])\n\n function goToPricingPlans() {\n if (!window.location.pathname.startsWith(PRICING_PLANS_PAGE_URL)) {\n history.push(PRICING_PLANS_PAGE_URL)\n }\n }\n\n function closeDialog() {\n setDialogState(prev => ({\n ...prev,\n isOpen: false\n }))\n }\n\n return (\n <>\n {\n !isMobile && <div className={`free-trial-strip ${isStripShown ? 'shown' : ''}`} style={{height: `${FREE_TRIAL_STRIP_HEIGHT}px`}}>\n <ImageBox\n className='free-trial-strip-logo-image'\n image={SHOPEAKS_LOGO_WHITE_URL}\n />\n <div className=\"free-trial-strip-content\">\n <div className=\"free-trial-strip-titles-section\">\n <CiTimer className='free-trial-strip-title-image' />\n {\n daysLeft > 0 ? <div className=\"free-trial-strip-title\"><span style={{fontWeight: 'bold'}}>{t('FREE_TRIAL_STRIP_FIRST_PART_TITLE', { daysLeft })}</span> - {t('FREE_TRIAL_STRIP_SECOND_PART_TITLE')}</div> :\n <div className=\"free-trial-strip-title ended\">{t('FREE_TRIAL_STRIP_TRIAL_ENDED_TITLE')}</div>\n } \n </div>\n {\n userDetails?.isAdmin && <div className=\"free-trial-strip-buttons-section\">\n <LoaderButton\n className=\"free-trial-strip-upgrade-button\"\n onClick={goToPricingPlans}\n buttonText={<span><LuCrown className='free-trial-strip-title-image'/> {t('FREE_TRIAL_STRIP_UPGRADE_BUTTON_TEXT')}</span>}\n /> \n </div>\n }\n </div>\n </div>\n }\n </>\n )\n}","import React from 'react'\n\nexport default function SpeechBubbleLightningBoltImage(props) {\n return (\n <svg\n {...props}\n width=\"16\"\n height=\"16\"\n focusable=\"false\"\n viewBox=\"0 0 16 16\"\n >\n <path fill=\"none\" stroke=\"currentColor\" d=\"M1 .5h14c.28 0 .5.22.5.5v10c0 .28-.22.5-.5.5H8l-3.65 3.65a.5.5 0 01-.85-.35v-3.3H1c-.28 0-.5-.22-.5-.5V1C.5.72.72.5 1 .5z\" />\n <path fill=\"currentColor\" d=\"M10.03 6H8.52l1.96-3.72c.06-.15-.01-.28-.17-.28H7.39c-.16 0-.34.13-.4.28l-1.46 3.4c-.07.16 0 .32.16.32H7l-1.42 4.07c-.11.29-.03.54.34.21l4.13-3.89c.23-.23.22-.39-.02-.39z\" />\n </svg>\n )\n}","import ImageBox from 'components/ImageBox/ImageBox'\nimport { FREE_MODE_DIALOG_IMAGE_URL, PAYDIN_DIALOG_TRANSITION_DURATION } from 'constants/general.constants'\nimport PaydinDialog from 'dialogs/PaydinDialog/PaydinDialog'\nimport React from 'react'\nimport { isMobile } from 'utils/deviceUtils'\nimport './FreeModeDialog.css'\nimport { Trans, useTranslation } from 'react-i18next'\nimport SpeechBubbleLightningBoltImage from 'embeddedImages/SpeechBubbleLightningBoltImage'\nimport { IoIosPeople } from 'react-icons/io'\nimport { BiCategory } from 'react-icons/bi'\nimport { LuCrown } from 'react-icons/lu'\nimport { useHistoryContext } from 'contexts/History'\nimport { PRICING_PLANS_PAGE_URL } from 'constants/routes.constants'\nimport { useUserDetailsContext } from 'contexts/User'\n\nexport default function FreeModeDialog({\n isDialogOpen,\n handleDialogClose = () => { },\n replace_text_to_max_breach = false,\n title='',\n subtitle='',\n}) {\n const { t } = useTranslation()\n const history = useHistoryContext()\n const { userDetails } = useUserDetailsContext()\n\n function goToPricingPlans() {\n history.goBack()\n setTimeout(() => {\n history.push(PRICING_PLANS_PAGE_URL)\n }, PAYDIN_DIALOG_TRANSITION_DURATION)\n }\n\n return (\n <PaydinDialog\n isDialogOpen={isDialogOpen}\n handleDialogClose={handleDialogClose}\n height={!isMobile ? \"70dvh\" : \"100dvh\"}\n minHeight={!isMobile ? \"70dvh\" : \"100dvh\"}\n width={!isMobile ? \"65vw\" : \"100vw\"}\n hasNoWidthLimit={true}\n hasNoHeightLimit={true}\n borderRadiusPx={isMobile ? 0 : 12}\n paddingPx={0}\n margin='0px'\n dialogLayout={<>\n <div className={isMobile ? \"mobile-free-mode-dialog-content\" : \"free-mode-dialog-content\"}>\n <div className={isMobile ? \"mobile-free-mode-dialog-content-left-section\" : \"free-mode-dialog-content-left-section\"}>\n <div className={isMobile ? \"mobile-free-mode-dialog-content-left-section-top-section\" : \"free-mode-dialog-content-left-section-top-section\"}>\n {\n replace_text_to_max_breach ? \n <>\n <div className={isMobile ? \"mobile-free-mode-dialog-content-left-section-title\" : \"free-mode-dialog-content-left-section-title\"}>{title}</div>\n <div className={isMobile ? \"mobile-free-mode-dialog-content-left-section-subtitle\" : \"free-mode-dialog-content-left-section-subtitle\"}>{subtitle}</div>\n </> : <>\n <div className={isMobile ? \"mobile-free-mode-dialog-content-left-section-title\" : \"free-mode-dialog-content-left-section-title\"}>{t('FREE_MODE_DIALOG_TITLE')}</div>\n <div className={isMobile ? \"mobile-free-mode-dialog-content-left-section-subtitle\" : \"free-mode-dialog-content-left-section-subtitle\"}>{t('FREE_MODE_DIALOG_SUBTITLE')}</div>\n <div className=\"free-mode-dialog-content-options-container\">\n <div className=\"free-mode-dialog-content-option\">\n <SpeechBubbleLightningBoltImage className='free-mode-dialog-content-option-image' />\n <div className={isMobile ? \"mobile-free-mode-dialog-content-option-text\" : \"free-mode-dialog-content-option-text\"}>{t('FREE_MODE_DIALOG_INFO_OPTION_1_TEXT')}</div>\n </div>\n <div className=\"free-mode-dialog-content-option\">\n <IoIosPeople className='free-mode-dialog-content-option-image' />\n <div className={isMobile ? \"mobile-free-mode-dialog-content-option-text\" : \"free-mode-dialog-content-option-text\"}>{t('FREE_MODE_DIALOG_INFO_OPTION_2_TEXT')}</div>\n </div>\n <div className=\"free-mode-dialog-content-option\">\n <BiCategory className='free-mode-dialog-content-option-image' />\n <div className={isMobile ? \"mobile-free-mode-dialog-content-option-text\" : \"free-mode-dialog-content-option-text\"}>{t('FREE_MODE_DIALOG_INFO_OPTION_3_TEXT')}</div>\n </div>\n {\n userDetails?.isAdmin && <div className=\"free-mode-dialog-content-option\">\n <div className='free-mode-dialog-content-option-image' />\n <div className={isMobile ? \"mobile-free-mode-dialog-content-option-text\" : \"free-mode-dialog-content-option-text\"}>\n <Trans\n i18nKey={'FREE_MODE_DIALOG_INFO_OPTION_4_TEXT'}\n components={{\n mark: <div className='free-mode-dialog-content-option-4-learn-more-text' onClick={goToPricingPlans} />\n }}\n />\n </div>\n </div>\n }\n </div>\n </>\n }\n { userDetails?.isAdmin && <div className=\"free-mode-dialog-content-cancel-anytime-text\">{t('FREE_MODE_DIALOG_CANCEL_ANYTIME_TEXT')}</div> }\n </div>\n {\n userDetails?.isAdmin && <div className={isMobile ? \"mobile-free-mode-dialog-content-upgrade-button\" : \"free-mode-dialog-content-upgrade-button\"} onClick={goToPricingPlans}>\n <LuCrown className='free-mode-dialog-content-upgrade-button-image' />\n <div className={isMobile ? \"mobile-free-mode-dialog-content-upgrade-button-text\" : \"free-mode-dialog-content-upgrade-button-text\"}>{t('FREE_MODE_DIALOG_UPGRADE_BUTTON_TEXT')}</div>\n </div>\n }\n </div>\n <div className={isMobile ? \"mobile-free-mode-dialog-content-right-section\" : \"free-mode-dialog-content-right-section\"}>\n <ImageBox\n image={FREE_MODE_DIALOG_IMAGE_URL}\n className='free-mode-dialog-content-image'\n />\n </div>\n </div>\n </>}\n />\n )\n}","import { request_auth, request_post_file } from 'services/RequestWrapper';\nimport { environment } from \"conf\";\nimport { PRODUCT_COMPLEMENTARY_API_URL, PRODUCT_OPTIONS_IMAGE_API_URL, PRODUCT_SEARCH_API_URL, PRODUCT_SEARCH_IN_MEDIA_API_URL, PRODUCT_TOP_COMBINATIONS_API_URL, PRODUCT_TOP_PERFORMING_API_URL } from 'constants/api.constants';\nimport { IS_OUT_OF_STOCK_QUERY_PARAMETER, PRODUCT_STATUS_QUERY_PARAMETER, IS_SEARCH_IN_TAGS_QUERY_PARAMETER } from 'constants/routes.constants';\nimport { IMAGE_UPLOAD_REQUEST_TIMEOUT_MILLISECONDS } from 'constants/general.constants';\n\n/*\n Retrieves all products.\n Method: [GET]\n URL: /admin/v1/products/search\n\n Query params:\n =============\n (*) q - The search query string\n (*) count - The page capacity\n (*) filters - Input to the getFiletersQuery function\n (*) next - The next page key\n (*) fetchProductsInfo - An input to the getSearchProductsInfoQuery function\n*/\nexport function ProductSearchAPI(q, count, filters, next=null, fetchProductsInfo=null) {\n return new Promise((resolve, reject) => {\n const options = {\n method: 'GET'\n }\n \n request_auth(environment.base_url + PRODUCT_SEARCH_API_URL + `?q=${q}&count=${count}${next ? `&next=${next}` : ''}${getFiltersQuery(filters)}${getSearchProductsInfoQuery(fetchProductsInfo)}`, options)\n .then(response => {\n if (response.status) {\n resolve(response.data)\n } else {\n reject(response.error)\n }\n })\n .catch(error => {\n reject(error)\n })\n });\n}\n\n\n/*\n Retrieves product options image.\n Method: [GET]\n URL: /admin/v1/products/options/image\n*/\nexport function ProductOptionsImageAPI(inventoryId, product_options) {\n return new Promise((resolve, reject) => {\n const options = {\n method: 'POST',\n body: {\n inventory_id: inventoryId,\n selected_options: product_options,\n }\n }\n request_auth(environment.base_url + PRODUCT_OPTIONS_IMAGE_API_URL, options)\n .then(response => {\n if (response.status) {\n resolve(response.data)\n } else {\n reject(response.error)\n }\n })\n .catch(error => {\n reject(error)\n })\n });\n}\n\n\nfunction getFiltersQuery(filters) {\n let filterQuery = ''\n if (filters?.active !== filters?.draft) {\n if (filters?.active) {\n filterQuery += `&${PRODUCT_STATUS_QUERY_PARAMETER}=active`\n } else {\n filterQuery += `&${PRODUCT_STATUS_QUERY_PARAMETER}=draft`\n }\n }\n\n if (filters?.outOfStock) {\n filterQuery += `&${IS_OUT_OF_STOCK_QUERY_PARAMETER}=${filters?.outOfStock}`\n }\n\n if (filters?.searchInTags) {\n filterQuery += `&${IS_SEARCH_IN_TAGS_QUERY_PARAMETER}=${filters?.searchInTags}`\n }\n\n return filterQuery\n}\n\nfunction getSearchProductsInfoQuery(info) {\n if (!info) {\n return ''\n }\n return `&${new URLSearchParams(info)}`\n}\n\n\n/*\n Retrieves best sellers.\n Method: [GET]\n URL: /admin/v1/products/trends/top-performing\n*/\nexport function GetTopPerformingProductsAPI() {\n return new Promise((resolve, reject) => {\n const options = {\n method: 'GET'\n }\n request_auth(environment.base_url + PRODUCT_TOP_PERFORMING_API_URL, options)\n .then(response => {\n if (response.status) {\n resolve(response.data)\n } else {\n reject(response.error)\n }\n })\n .catch(error => {\n reject(error)\n })\n });\n}\n\n/*\n Retrieves best combinations.\n Method: [GET]\n URL: /admin/v1/products/trends/top-combinations\n*/\nexport function GetTopProductsCombinationsAPI() {\n return new Promise((resolve, reject) => {\n const options = {\n method: 'GET'\n }\n request_auth(environment.base_url + PRODUCT_TOP_COMBINATIONS_API_URL, options)\n .then(response => {\n if (response.status) {\n resolve(response.data)\n } else {\n reject(response.error)\n }\n })\n .catch(error => {\n reject(error)\n })\n });\n}\n\n\n/*\n Retrieves complementary producgts.\n Method: [GET]\n URL: /admin/v1/products/trends/complementary/<inventory_id>\n*/\nexport function GetComplementaryProductsAPI(inventoryId) {\n return new Promise((resolve, reject) => {\n const options = {\n method: 'GET'\n }\n request_auth(environment.base_url + PRODUCT_COMPLEMENTARY_API_URL + `/${inventoryId}`, options)\n .then(response => {\n if (response.status) {\n resolve(response.data)\n } else {\n reject(response.error)\n }\n })\n .catch(error => {\n reject(error)\n })\n });\n}\n\n/*\n Retrieves all products.\n Method: [GET]\n URL: /admin/v1/products/search\n\n Query params:\n =============\n (*) q - The search query string\n (*) count - The page capacity\n (*) filters - Input to the getFiletersQuery function\n (*) next - The next page key\n (*) fetchProductsInfo - An input to the getSearchProductsInfoQuery function\n*/\nexport function ProductSearchInMediaAPI(file) {\n return new Promise((resolve, reject) => {\n const formData = new FormData()\n formData.append('media_file', file)\n\n const options = {\n method: 'POST',\n formData,\n }; \n request_post_file(environment.base_url + PRODUCT_SEARCH_IN_MEDIA_API_URL, options, IMAGE_UPLOAD_REQUEST_TIMEOUT_MILLISECONDS)\n .then(response => {\n if (response.status) {\n resolve(response.data)\n } else {\n reject(response.error)\n }\n })\n .catch(error => {\n reject(error)\n });\n });\n}","import { environment } from \"conf\"\nimport {\n APPEARANCE_SETTINGS_OPTIONS_API_URL_SUFFIX,\n AUTH_API_URL,\n AUTH_STORE_CONNECT_API_URL,\n AUTH_STORE_CONNECT_API_URL_PREFIX,\n CANCEL_PRICING_PLAN_API_URL,\n LOGIN_CONNECT_STORE_API_ROUTE,\n REGISTER_CONNECT_STORE_API_ROUTE,\n STORE_API_BASE_URL,\n STORE_APPEARANCE_SETTINGS_API_URL_SUFFIX,\n STORE_CONNECT_API_URL,\n STORE_DISCONNECT_API_URL,\n STORE_ORDERS_API_URL_SUFFIX,\n STORE_ORDER_DETAILS_API_URL_SUFFIX,\n STORE_SETTINGS_API_URL_PREFIX,\n STORE_SETTINGS_API_URL_SUFFIX,\n STORE_SETTINGS_PRODUCT_SYNC_API_URL_SUFFIX,\n STORE_SETTINGS_THEME_UPDATE_API_URL_SUFFIX,\n UPGRADE_PRICING_PLAN_API_URL\n} from \"constants/api.constants\"\nimport { request_auth } from \"services/RequestWrapper\"\n\nconst baseUrl = environment.base_url + STORE_API_BASE_URL\n\nexport function AuthConnectStoreAPI(auth) {\n return new Promise((resolve, reject) => {\n const options = {\n method: 'POST',\n body: {\n auth\n }\n }\n\n const url = environment.base_url + AUTH_STORE_CONNECT_API_URL_PREFIX + AUTH_STORE_CONNECT_API_URL\n request_auth(url, options)\n .then(response => {\n if (response.status) {\n resolve(response.data)\n } else {\n reject(response.error)\n }\n })\n .catch(error => {\n reject(error)\n })\n })\n}\n\nexport function ConnectStoreAPI(shopUrl) {\n return new Promise((resolve, reject) => {\n const options = {\n method: 'POST',\n body: {\n shop_url: shopUrl\n }\n }\n\n const url = environment.base_url + AUTH_STORE_CONNECT_API_URL_PREFIX + STORE_CONNECT_API_URL\n request_auth(url, options)\n .then(response => {\n if (response.status) {\n resolve(response.data)\n } else {\n reject(response.error)\n }\n })\n .catch(error => {\n reject(error)\n })\n })\n}\n\nexport function UpgradePlanAPI(planName, businessId) {\n return new Promise((resolve, reject) => {\n const options = {\n method: 'POST',\n body: {\n store_subscription_plan: planName,\n business_id: businessId\n }\n }\n\n const url = environment.base_url + UPGRADE_PRICING_PLAN_API_URL\n request_auth(url, options)\n .then(response => {\n if (response.status) {\n resolve(response.data)\n } else {\n reject(response.error)\n }\n })\n .catch(error => {\n reject(error)\n })\n })\n}\n\nexport function CancelPlanAPI(businessId) {\n return new Promise((resolve, reject) => {\n const options = {\n method: 'POST',\n body: {\n business_id: businessId\n }\n }\n\n const url = environment.base_url + CANCEL_PRICING_PLAN_API_URL\n request_auth(url, options)\n .then(response => {\n if (response.status) {\n resolve()\n } else {\n reject(response.error)\n }\n })\n .catch(error => {\n reject(error)\n })\n })\n}\n\nexport function DisconnectStore(businessId) {\n return new Promise((resolve, reject) => {\n const options = {\n method: 'POST',\n body: {\n business_id: businessId\n }\n }\n\n const url = environment.base_url + AUTH_STORE_CONNECT_API_URL_PREFIX + STORE_DISCONNECT_API_URL\n request_auth(url, options)\n .then(response => {\n if (response.status) {\n resolve()\n } else {\n reject(response.error)\n }\n })\n .catch(reject)\n })\n}\n\n/*\n Updates the business's settings.\n\n Method: [PUT]\n URL: /admin/v1/store/<business_id>/settings\n\n Body params:\n ============\n (*) businessId - The business id\n (*) shippingAndReturnUrl - The shipping and return URL of the business\n (*) facebookPixelId - The id of the business for facebook pixel analytics\n (*) googleAnalyticsId - The id of the business for google analytics\n (*) utmParams - The UTM parameters object for monitoring and analyzing shopeaks app visits\n*/\nexport function UpdateStoreSettings(businessId, shippingAndReturnUrl, facebookPixelId, googleAnalyticsId, utmParams, autoSwapEnabled, productVisionSensitivity) {\n return new Promise((resolve, reject) => {\n const options = {\n method: 'PUT',\n body: {\n settings: {\n shipping_and_return_url: shippingAndReturnUrl,\n facebook_pixel_id: facebookPixelId,\n google_analytics_id: googleAnalyticsId,\n auto_swap_enabled: autoSwapEnabled,\n product_search_sensitivity: productVisionSensitivity,\n utm_params: {\n utm_source: utmParams?.UTMSource ?? '',\n utm_medium: utmParams?.UTMMedium ?? '',\n utm_campaign: utmParams?.UTMCampaign ?? '',\n utm_term: utmParams?.UTMTerm ?? '',\n utm_content: utmParams?.UTMContent ?? '',\n }\n }\n }\n }\n\n const url = `${environment.base_url}${STORE_SETTINGS_API_URL_PREFIX}/${businessId}${STORE_SETTINGS_API_URL_SUFFIX}`\n\n request_auth(url, options)\n .then(response => {\n if (response.status) {\n resolve(response.data)\n } else {\n reject(response.error)\n }\n })\n .catch(reject)\n })\n}\n\n/*\n Updates the business's appearance settings.\n\n Method: [PUT]\n URL: /admin/v1/store/<business_id>/appearance\n\n Body params:\n ============\n (*) businessId - The business id\n (*) logoUrl - The url of the new logo\n*/\nexport function UpdateStoreAppearanceSettings(businessId, logoUrl) {\n return new Promise((resolve, reject) => {\n const options = {\n method: 'PUT',\n body: {\n appearance: {\n logo_url: logoUrl\n }\n }\n }\n\n const url = `${environment.base_url}${STORE_SETTINGS_API_URL_PREFIX}/${businessId}${STORE_APPEARANCE_SETTINGS_API_URL_SUFFIX}`\n\n request_auth(url, options)\n .then(response => {\n if (response.status) {\n resolve(response.data)\n } else {\n reject(response.error)\n }\n })\n .catch(reject)\n })\n}\n\n/*\n Performs a full products and inventory sync to all the user's stores.\n\n Method: [POST]\n URL: /admin/v1/store/sync\n*/\nexport function SyncProducts(businessId) {\n return new Promise((resolve, reject) => {\n const options = {\n method: 'POST',\n body: {\n business_id: businessId\n }\n }\n\n const url = `${environment.base_url}${STORE_SETTINGS_API_URL_PREFIX}${STORE_SETTINGS_PRODUCT_SYNC_API_URL_SUFFIX}`\n\n request_auth(url, options, false, null)\n .then(resolve)\n .catch(reject)\n })\n}\n\n/*\n Updates the link's theme customization settings.\n\n Method: [PUT]\n URL: /admin/v1/store/<business_id>/theme\n*/\nexport function UpdateLinkStyles(businessId, theme) {\n return new Promise((resolve, reject) => {\n const options = {\n method: 'PUT',\n body: {\n theme: {\n checkout_button_shape: theme?.checkoutButtonShape,\n checkout_button_background_color: theme?.checkoutButtonBackgroundColor,\n checkout_button_font_color: theme?.checkoutButtonFontColor,\n checkout_button_border_color: theme?.checkoutButtonBorderColor,\n\n // Promocode\n promo_code_display_border_radius: theme?.promocodeButtonShape,\n promo_code_display_background_color: theme?.promocodeButtonBackgroundColor,\n promo_code_display_font_color: theme?.promocodeButtonFontColor,\n promo_code_display_border_color: theme?.promocodeButtonBorderColor,\n promo_code_display_shadow_shown: theme?.isPromocodeShadowShown,\n\n // Influencer\n is_influencer_display_shown: theme?.isInfluencerShown,\n\n cart_button_icon: theme?.cartButtonImage,\n is_discount_strip_shown: theme?.isDiscountStripShown,\n discount_background_color: theme?.discountBackgroundColor,\n discount_font_color: theme?.discountFontColor,\n is_shipping_and_sales_strip_shown: theme?.isSalesAndDiscountStripShown,\n shipping_and_sales_strip_background_color: theme?.salesAndDiscountStripBackgroundColor,\n shipping_and_sales_strip_font_color: theme?.salesAndDiscountStripFontColor,\n shipping_and_sales_strip_sentences: [\n theme?.salesAndDiscountStripSentence1,\n theme?.salesAndDiscountStripSentence2\n ],\n image_border_radius: theme?.imageBorderRadius,\n is_preorder_text_shown: theme?.isPreorderTextShown,\n preorder_text: theme?.preorderText\n\n }\n }\n }\n\n const url = `${environment.base_url}${STORE_SETTINGS_API_URL_PREFIX}/${businessId}${STORE_SETTINGS_THEME_UPDATE_API_URL_SUFFIX}`\n\n request_auth(url, options)\n .then(response => {\n if (response.status) {\n resolve(response.data)\n } else {\n reject(response.error)\n }\n })\n .catch(reject)\n })\n}\n\n/*\n Verifies the user's online store or creates it (when needed) with the given 'auth' params came from the store's provider.\n\n Method: [POST]\n URL: /admin/v1/store/auth/verify\n\n Body params:\n ============\n (*) auth - The auth parameter given by the store provider\n*/\nexport function verifyStore(auth) {\n return new Promise((resolve, reject) => {\n const options = {\n method: 'POST',\n body: {\n auth\n }\n }\n\n const url = baseUrl + AUTH_API_URL\n request_auth(url, options)\n .then(response => {\n if (response.status) {\n resolve(response)\n } else {\n reject(response.error)\n }\n })\n .catch(reject)\n })\n}\n\n/*\n Registers and connects to the user's online store.\n\n Method: [POST]\n URL: /admin/v1/store/auth/register/connect\n\n Body params:\n ============\n (*) auth - The auth parameter given by the store provider\n*/\nexport function registerAndConnectStore(auth, username, email, password) {\n return new Promise((resolve, reject) => {\n const options = {\n method: 'POST',\n body: {\n auth,\n username,\n email,\n password\n }\n }\n\n const url = baseUrl + REGISTER_CONNECT_STORE_API_ROUTE\n request_auth(url, options)\n .then(response => {\n if (response.status) {\n resolve(response)\n } else {\n reject(response.error)\n }\n })\n .catch(reject)\n })\n}\n\n/*\n Logs in and connects to the user's online store.\n\n Method: [POST]\n URL: /admin/v1/store/auth/login/connect\n\n Body params:\n ============\n (*) auth - The auth parameter given by the store provider\n*/\nexport function loginAndConnectStore(auth, username, password) {\n return new Promise((resolve, reject) => {\n const options = {\n method: 'POST',\n body: {\n auth,\n username,\n password\n }\n }\n\n const url = baseUrl + LOGIN_CONNECT_STORE_API_ROUTE\n request_auth(url, options)\n .then(response => {\n if (response.status) {\n resolve(response)\n } else {\n reject(response.error)\n }\n })\n .catch(reject)\n })\n}\n\n/*\n Retreives the business' options map json.\n\n Method: [GET]\n URL: /admin/v1/store/appearance/options\n*/\nexport function getOptionsMap() {\n return new Promise((resolve, reject) => {\n const options = {\n method: 'GET'\n }\n\n const url = baseUrl + STORE_APPEARANCE_SETTINGS_API_URL_SUFFIX + APPEARANCE_SETTINGS_OPTIONS_API_URL_SUFFIX\n request_auth(url, options)\n .then(response => {\n if (response.status) {\n resolve(response)\n } else {\n reject(response.error)\n }\n })\n .catch(reject)\n })\n}\n\n/*\n updates the business' options map json.\n\n Method: [PUT]\n URL: /admin/v1/store/appearance/options\n*/\nexport function updateOptionsMap(optionMap) {\n return new Promise((resolve, reject) => {\n const options = {\n method: 'PUT',\n body: optionMap\n }\n\n const url = baseUrl + STORE_APPEARANCE_SETTINGS_API_URL_SUFFIX + APPEARANCE_SETTINGS_OPTIONS_API_URL_SUFFIX\n request_auth(url, options)\n .then(response => {\n if (response.status) {\n resolve(response)\n } else {\n reject(response.error)\n }\n })\n .catch(reject)\n })\n}\n\n/*\n Retrieves all the store orders.\n\n Method: [GET]\n URL: /admin/v1/store/orders\n*/\nexport function getStoreOrders(count, skip) {\n return new Promise((resolve, reject) => {\n const options = {\n method: 'GET'\n }\n\n const url = baseUrl + STORE_ORDERS_API_URL_SUFFIX + `?count=${count}&skip=${skip}`\n request_auth(url, options)\n .then(response => {\n if (response.status) {\n resolve(response)\n } else {\n reject(response.error)\n }\n })\n .catch(reject)\n })\n}\n\n/*\n Retrieves a store order by its ID.\n\n Method: [GET]\n URL: /admin/v1/store/orders/<orderId>/details\n*/\nexport function getStoreOrderDetails(orderId) {\n return new Promise((resolve, reject) => {\n const options = {\n method: 'GET'\n }\n\n const url = baseUrl + STORE_ORDERS_API_URL_SUFFIX + `/${orderId}` + STORE_ORDER_DETAILS_API_URL_SUFFIX\n request_auth(url, options)\n .then(response => {\n if (response.status) {\n resolve(response)\n } else {\n reject(response.error)\n }\n })\n .catch(reject)\n })\n}","import { AUTH_TOKEN_KEY_LOCAL_STORAGE } from 'constants/storage.constants'\nimport React, { useContext, useState, useEffect } from 'react'\nimport { LocalSharedPreferences } from 'services/SharedPreferences'\nimport { GetLinksAPI, GetMultilinksAPI } from 'api/links/links'\nimport { AuthAPI, LoginAPI, RegisterAPI } from 'api/auth/auth'\nimport { environment } from \"conf\"\nimport {\n APPEARANCE_PAGE_LINK_STYLE_CART_BUTTON_IMAGE_KEYS,\n APPEARANCE_PAGE_LINK_STYLE_CART_BUTTON_IMAGE_OPTIONS,\n APPEARANCE_PAGE_LINK_STYLE_CHECKOUT_BUTTON_SHAPE_KEYS,\n APPEARANCE_PAGE_LINK_STYLE_CHECKOUT_BUTTON_SHAPE_OPTIONS,\n APPEARNACE_PAGE_PRODUCT_IMAGE_STYLE_BORDER_RADIUS_KEYS,\n APPEARNACE_PAGE_PRODUCT_IMAGE_STYLE_BORDER_RADIUS_OPTIONS,\n APPLICATION_READY_TIMEOUT_MILISECONDS,\n DEFAULT_CURRENCY_CODE,\n LINKS_PAGE_LINKS_FILTER_COUNT,\n LINKS_PAGE_MOBILE_OPTIONS_DRAWER_TOP_BORDER_RADIUS_PX,\n MULTILINKS_PAGE_MULTILINKS_FILTER_COUNT,\n NO_AUTH_PAGES,\n OPTION_TYPES,\n PAYDIN_DRAWER_DIRECTION,\n PAYDIN_DRAWER_TRANSITION_DURATION,\n PRICING_PLAN_DATA,\n SHOPBOARD_SOCIALS\n} from 'constants/general.constants'\nimport { deleteQueryFromUrl, getQueryVariable } from 'services/SystemService'\nimport { ACCOUNT_VERIFICATION_PAGE_URL, AUTH_QUERY_PARAMETER_KEY, HTTPS_HOST_URL_PREFIX, PRICING_PLANS_PAGE_URL } from 'constants/routes.constants'\nimport { influencerLoginAPI } from 'api/influencers/influencers'\nimport ApprovalMessage from 'components/ApprovalMessage/ApprovalMessage'\nimport PaydinDrawer from 'components/PaydinDrawer/PaydinDrawer'\nimport { useHistoryContext } from './History'\nimport { authenticateShopboardSocialMedia, connectShopboardSocialMedia, disconnectShopboardSocialMedia, getShopboardAnalytics, getShopboardPosts, getShopboardStatus, tagShopboardPostProducts, toggleShopboardPostVisibility } from 'api/shopboard/shopboard'\nimport { extractProductData, extractShopboardSocialMediaPost } from 'utils/dataUtils'\nimport { isMobile } from 'utils/deviceUtils'\nimport FreeTrialStrip from 'components/FreeTrialStrip/FreeTrialStrip'\nimport FreeModeDialog from 'dialogs/FreeModeDialog/FreeModeDialog'\nimport { GetComplementaryProductsAPI, GetTopPerformingProductsAPI, GetTopProductsCombinationsAPI } from 'api/products/products'\nimport { getOptionsMap } from 'api/store/store'\nimport stc from 'string-to-color'\n\nconst userDetailsContext = React.createContext()\nconst generalDataContext = React.createContext()\nconst AuthContext = React.createContext()\nconst fetchLinksContext = React.createContext()\nconst fetchMultilinksContext = React.createContext()\nconst isReadyContext = React.createContext()\nconst isUserLoadedContext = React.createContext()\n\nconst generalDataInitialState = {\n pageMaxWidthPx: 0\n}\nconst userDetailsInsitialState = {\n name: '',\n username: '',\n influencerUsername: '',\n influencerImageUrl: '',\n brand: {},\n businessName: '',\n businessLogo: '',\n businessCurrency: DEFAULT_CURRENCY_CODE,\n subscriptionPlan: 'FREE',\n freeTrialDaysLeft: 0,\n domain: '',\n shopUrl: '',\n isEditing: false,\n sidebarExpanded: true,\n recentActivitiesData: {\n links: [],\n shorts: [],\n influencers: {\n items: [],\n analytics: []\n }\n },\n linksData: {\n links: [\n {\n linkId: '',\n images: [],\n createdAt: 0,\n linkAnalytics: {\n views: 0,\n revenue: 0,\n checkouts: 0,\n currency: DEFAULT_CURRENCY_CODE\n }\n }\n ]\n },\n theme: {\n isInitial: true,\n link: {\n cartButtonImage: APPEARANCE_PAGE_LINK_STYLE_CART_BUTTON_IMAGE_KEYS.OPTION1,\n checkoutButtonShape: APPEARANCE_PAGE_LINK_STYLE_CHECKOUT_BUTTON_SHAPE_KEYS.OPTION1,\n checkoutButtonBackgroundColor: '#000000',\n checkoutButtonBorderColor: '#000000',\n checkoutButtonFontColor: '#ffffff',\n\n // Promocode\n promocodeButtonShape: APPEARANCE_PAGE_LINK_STYLE_CHECKOUT_BUTTON_SHAPE_KEYS.OPTION2,\n promocodeButtonBackgroundColor: '#ffffff',\n promocodeButtonBorderColor: '#909090',\n promocodeButtonFontColor: '#4e4e4e',\n isPromocodeShadowShown: false,\n isInfluencerShown: true\n },\n productImageStyle: {\n imageBorderRadius: APPEARNACE_PAGE_PRODUCT_IMAGE_STYLE_BORDER_RADIUS_OPTIONS.find(option => option?.key === APPEARNACE_PAGE_PRODUCT_IMAGE_STYLE_BORDER_RADIUS_KEYS.OPTION1).key\n },\n salesAndDiscountStrip: {\n isSalesAndDiscountStripShown: false,\n salesAndDiscountStripBackgroundColor: '#000000',\n salesAndDiscountStripFontColor: '#ffffff',\n salesAndDiscountStripSentence1: '',\n salesAndDiscountStripSentence2: ''\n },\n inventorySettings: {\n isPreorderTextShown: false,\n preorderText: '',\n }\n },\n promocode: null,\n permissions: {\n commissionEnabled: false,\n clicksEnabled: false,\n revenueEnabled: false,\n salesEnabled: false,\n isActiveInfluencer: false\n },\n isAdmin: true,\n isVerified: false,\n isAuthenticated: false,\n utmParams: {\n UTMSource: '',\n UTMMedium: '',\n UTMCampaign: '',\n UTMTerm: '',\n UTMContent: '',\n },\n analytics: {\n linksLifetimeAnalytics: null,\n shortsLifetimeAnalytics: null\n },\n settings: {\n shippingAndReturnsUrl: '',\n facebookPixelId: '',\n googleAnalyticsId: '',\n autoSwapEnabled: false,\n productVisionConfigurations: {\n isEnabled: false,\n productCategory: null,\n sensitivity: \"OFF\"\n },\n },\n shopboard: {\n synced: false,\n url: '',\n socialMedias: {\n [SHOPBOARD_SOCIALS.INSTAGRAM]: {\n connected: false,\n numberOfPosts: -1,\n posts: []\n },\n [SHOPBOARD_SOCIALS.TIKTOK]: {\n connected: false,\n numberOfPosts: -1,\n posts: []\n },\n [SHOPBOARD_SOCIALS.PINTEREST]: {\n connected: false,\n numberOfPosts: -1,\n posts: []\n }\n },\n analytics: {\n synced: false,\n currency: DEFAULT_CURRENCY_CODE,\n visits: 0,\n checkouts: 0,\n sales: 0,\n cr: 0,\n revenue: 0,\n data: [],\n }\n },\n trends: {\n topPerformingProducts: [],\n topProductsCombinations: {\n combinations: [],\n products: []\n },\n complementaryProducts: {}\n }\n}\n\nexport function useUserDetailsContext() {\n return useContext(userDetailsContext)\n}\n\nexport function useAuthContext() {\n return useContext(AuthContext)\n}\n\nexport function useFetchLinksContext() {\n return useContext(fetchLinksContext)\n}\n\n\nexport function useFetchMultilinksContext() {\n return useContext(fetchMultilinksContext)\n}\n\nexport function useIsReadyContext() {\n return useContext(isReadyContext)\n}\n\nexport function useIsUserLoadedContext() {\n return useContext(isUserLoadedContext)\n}\n\nexport function useGeneralDataContext() {\n return useContext(generalDataContext)\n}\n\n/**\n * Providing an userDetails context to all children components.\n */\nexport default function UserProvider({ children, onUserLoaded, onReady }) {\n const history = useHistoryContext()\n const [userDetails, setUserDetails] = useState(userDetailsInsitialState)\n const [generalData, setGeneralData] = useState(generalDataInitialState)\n const [productsOptionsMap, setProductsOptionsMap] = useState(null)\n const [isReady, setIsReady] = useState(false)\n const [isUserLoaded, setIsUserLoaded] = useState(false)\n const [approvalMessageState, setApprovalMessageState] = useState({\n isOpen: false,\n message: ''\n })\n const [optionsDrawerState, setOptionsDrawerState] = useState({\n isOpen: false,\n onOpen: () => { },\n onClose: closeDrawer,\n hasPadding: true,\n children: <></>\n })\n const [finishedUpdatingObject, setFinishedUpdatingObject] = useState(false)\n const [finishedCreatingObject, setFinishedCreatingObject] = useState(false)\n const [objectToSave, setObjectToSave] = useState(false)\n\n const [freeTrialDialogState, setFreeTrialDialogState] = useState({\n isOpen: false,\n onOpen: () => { },\n onClose: closeFreeTrialDialog,\n onRightButtonClick: upgradeFreeTrialDialog,\n children: <></>,\n replace_text_to_max_breach: null,\n text: {}\n })\n\n useEffect(() => {\n setTimeout(() => {\n onReady(true)\n setIsReady(true)\n }, APPLICATION_READY_TIMEOUT_MILISECONDS)\n if (shouldVerify()) { // checking if the authentication token exists because the verify request always sends the authentication token, if not exists, verify fails.\n verify()\n } else {\n setIsUserLoaded(true)\n onUserLoaded(true)\n }\n }, [])\n\n function setRecentLinks(links) {\n setUserDetails(prev => ({\n ...prev,\n recentActivitiesData: {\n ...prev.recentActivitiesData,\n links\n }\n }))\n }\n\n function setRecentShorts(shorts) {\n setUserDetails(prev => ({\n ...prev,\n recentActivitiesData: {\n ...prev.recentActivitiesData,\n shorts\n }\n }))\n }\n\n function setRecentInfluencers(influencers) {\n setUserDetails(prev => ({\n ...prev,\n recentActivitiesData: {\n ...prev.recentActivitiesData,\n influencers: {\n ...prev.recentActivitiesData.influencers,\n items: influencers\n }\n }\n }))\n }\n\n function fetchProductsOptionsMap(onSuccess = () => {}, getCopy = false) {\n if (!productsOptionsMap) {\n getOptionsMap()\n .then(data => {\n setProductsOptionsMap(data?.data)\n if (getCopy) {\n onSuccess(JSON.parse(JSON.stringify(data?.data)))\n } else {\n onSuccess(data?.data)\n }\n })\n .catch(onSuccess({}))\n } else {\n if (getCopy) {\n onSuccess(JSON.parse(JSON.stringify(productsOptionsMap)))\n } else {\n onSuccess(productsOptionsMap)\n }\n }\n }\n\n function updateProductsOptionsMap(newProducsMap) {\n setProductsOptionsMap(JSON.parse(JSON.stringify(newProducsMap)))\n }\n\n function hasOptionsMap() {\n return Object.keys(productsOptionsMap).length > 0\n }\n\n function getOptionType(optionName) {\n if (!hasOptionsMap() || !productsOptionsMap[optionName]) {\n return OPTION_TYPES.TEXT\n }\n return productsOptionsMap[optionName]?.type\n }\n\n function isOptionColor(optionName) {\n return getOptionType(optionName) === OPTION_TYPES.COLOR\n }\n\n function getOptionValue(optionName, optionValueName, shouldReturnTextValue = false) {\n // if there's no options map json or the requested option doesn't exist or the requested option value doesn't exist\n if (!Object.keys(productsOptionsMap).length > 0 || !productsOptionsMap[optionName] || !productsOptionsMap[optionName]?.values[optionValueName]) {\n return null\n }\n\n const optionValueObject = productsOptionsMap[optionName]?.values[optionValueName]\n if (!shouldReturnTextValue && isOptionColor(optionName)) {\n if (!optionValueObject?.hex_value) {\n const noWhiteSpaceColor = optionValueObject?.text_value?.toLowerCase().replaceAll(/\\s/g, '')\n return stc(noWhiteSpaceColor)\n }\n\n return optionValueObject?.hex_value\n } else {\n if (!optionValueObject?.text_value) {\n return optionValueName\n }\n\n return optionValueObject?.text_value\n }\n }\n\n function isFreeUser() {\n return userDetails?.subscriptionPlan === PRICING_PLAN_DATA.FREE.name.toUpperCase()\n }\n\n function isFreeUserAndTrialEnded() {\n return isFreeUser() && !(userDetails?.freeTrialDaysLeft > 0)\n }\n\n function isFreeUserAndTrialPastLastWeek() {\n return isFreeUser() && !(userDetails?.freeTrialDaysLeft > 7)\n }\n \n function isBusinessFeatureEnabled() {\n if (userDetails?.subscriptionPlan === PRICING_PLAN_DATA.PRO.name.toUpperCase() || userDetails?.subscriptionPlan === PRICING_PLAN_DATA.BUSINESS.name.toUpperCase()) {\n return true\n } \n else if (userDetails?.subscriptionPlan === PRICING_PLAN_DATA.FREE.name.toUpperCase() && userDetails.freeTrialDaysLeft > 0) {\n return true\n }\n return false\n }\n\n function maxInfleuncersAllowed() {\n if (userDetails?.subscriptionPlan === PRICING_PLAN_DATA.FREE.name.toUpperCase() && userDetails?.freeTrialDaysLeft > 0) {\n return 3 // same as starter\n } else if (userDetails?.subscriptionPlan === PRICING_PLAN_DATA.STARTER.name.toUpperCase()) {\n return 3\n } else if (userDetails?.subscriptionPlan === PRICING_PLAN_DATA.BUSINESS.name.toUpperCase()) {\n return 15\n } else if (userDetails?.subscriptionPlan === PRICING_PLAN_DATA.PRO.name.toUpperCase()) {\n return Infinity\n }\n return 0\n }\n\n function shouldVerify() {\n let token = getQueryVariable(AUTH_QUERY_PARAMETER_KEY, null)\n if (token) {\n LocalSharedPreferences.set_key(AUTH_TOKEN_KEY_LOCAL_STORAGE, token)\n deleteQueryFromUrl(AUTH_QUERY_PARAMETER_KEY)\n } else {\n token = LocalSharedPreferences.get_key(AUTH_TOKEN_KEY_LOCAL_STORAGE, null)\n }\n return token && isNotInAuthPage()\n }\n\n function isNotInAuthPage() {\n return !NO_AUTH_PAGES.includes(window.location.pathname) && !window.location.pathname.startsWith(ACCOUNT_VERIFICATION_PAGE_URL)\n }\n\n function hasShopifyStore() {\n return userDetails.brand && Object.keys(userDetails.brand).length > 0\n }\n\n function getThemeValue(initialValue, value, valueOptions) {\n if (value) {\n if (typeof value === 'number') {\n return valueOptions[value].key ?? initialValue\n }\n\n if (typeof value === 'string') {\n return valueOptions.find(option => option?.key === value).key ?? initialValue\n }\n }\n\n return initialValue\n }\n\n function getThemeObject(userData) {\n return userData?.brand?.theme ? {\n isInitial: false,\n link: {\n cartButtonImage: getThemeValue(userDetailsInsitialState.theme.link.cartButtonImage, userData?.brand?.theme?.cart_button_icon, APPEARANCE_PAGE_LINK_STYLE_CART_BUTTON_IMAGE_OPTIONS),\n checkoutButtonShape: getThemeValue(userDetailsInsitialState.theme.link.checkoutButtonShape, userData?.brand?.theme?.checkout_button_shape, APPEARANCE_PAGE_LINK_STYLE_CHECKOUT_BUTTON_SHAPE_OPTIONS),\n checkoutButtonBackgroundColor: userData?.brand?.theme?.checkout_button_background_color ?? userDetailsInsitialState.theme.link.checkoutButtonBackgroundColor,\n checkoutButtonBorderColor: userData?.brand?.theme?.checkout_button_border_color ?? userDetailsInsitialState.theme.link.checkoutButtonBorderColor,\n checkoutButtonFontColor: userData?.brand?.theme?.checkout_button_font_color ?? userDetailsInsitialState.theme.link.checkoutButtonFontColor,\n\n // Promocode\n promocodeButtonShape: getThemeValue(userDetailsInsitialState.theme.link.promocodeButtonShape, userData?.brand?.theme?.promo_code_display_border_radius, APPEARANCE_PAGE_LINK_STYLE_CHECKOUT_BUTTON_SHAPE_OPTIONS),\n promocodeButtonBackgroundColor: userData?.brand?.theme?.promo_code_display_background_color ?? userDetailsInsitialState.theme.link.promocodeButtonBackgroundColor,\n promocodeButtonBorderColor: userData?.brand?.theme?.promo_code_display_border_color ?? userDetailsInsitialState.theme.link.promocodeButtonBorderColor,\n promocodeButtonFontColor: userData?.brand?.theme?.promo_code_display_font_color ?? userDetailsInsitialState.theme.link.promocodeButtonFontColor,\n isPromocodeShadowShown: userData?.brand?.theme?.is_promo_code_display_shadow_shown ?? userDetailsInsitialState.theme.link.isPromocodeShadowShown,\n isInfluencerShown: userData?.brand?.theme?.is_influencer_display_shown ?? userDetailsInsitialState.theme.link.isInfluencerShown \n },\n productImageStyle: {\n imageBorderRadius: getThemeValue(userDetailsInsitialState.theme.productImageStyle.imageBorderRadius, userData?.brand?.theme?.image_border_radius, APPEARNACE_PAGE_PRODUCT_IMAGE_STYLE_BORDER_RADIUS_OPTIONS)\n },\n salesAndDiscountStrip: {\n isSalesAndDiscountStripShown: userData?.brand?.theme?.is_shipping_and_sales_strip_shown ?? userDetailsInsitialState.theme.salesAndDiscountStrip.isSalesAndDiscountStripShown,\n salesAndDiscountStripBackgroundColor: userData?.brand?.theme?.shipping_and_sales_strip_background_color ?? userDetailsInsitialState.theme.salesAndDiscountStrip.salesAndDiscountStripBackgroundColor,\n salesAndDiscountStripFontColor: userData?.brand?.theme?.shipping_and_sales_strip_font_color ?? userDetailsInsitialState.theme.salesAndDiscountStrip.salesAndDiscountStripFontColor,\n salesAndDiscountStripSentence1: userData?.brand?.theme?.shipping_and_sales_strip_sentences?.length > 0 ? userData?.brand?.theme?.shipping_and_sales_strip_sentences[0] : userDetailsInsitialState.theme.salesAndDiscountStrip.salesAndDiscountStripSentence1,\n salesAndDiscountStripSentence2: userData?.brand?.theme?.shipping_and_sales_strip_sentences?.length > 1 ? userData?.brand?.theme?.shipping_and_sales_strip_sentences[1] : userDetailsInsitialState.theme.salesAndDiscountStrip.salesAndDiscountStripSentence2\n },\n inventorySettings: {\n isPreorderTextShown: userData?.brand?.theme?.is_preorder_text_shown ?? userDetailsInsitialState.theme.inventorySettings.isPreorderTextShown,\n preorderText: userData?.brand?.theme?.preorder_text ?? userDetailsInsitialState.theme.inventorySettings.preorderText\n }\n } : userDetailsInsitialState.theme\n }\n\n function getPermissionsObject(userData) {\n return userData?.user?.permissions ? {\n commissionEnabled: userData?.user?.permissions?.analytics_commission_enabled ?? userDetailsInsitialState.permissions.commissionEnabled,\n clicksEnabled: userData?.user?.permissions?.analytics_clicks_enabled ?? userDetailsInsitialState.permissions.clicksEnabled,\n revenueEnabled: userData?.user?.permissions?.analytics_revenue_enabled ?? userDetailsInsitialState.permissions.revenueEnabled,\n salesEnabled: userData?.user?.permissions?.analytics_sales_enabled ?? userDetailsInsitialState.permissions.salesEnabled,\n crEnabled: userData?.user?.permissions?.analytics_cr_enabled ?? userDetailsInsitialState.permissions.crEnabled,\n aovEnabled: userData?.user?.permissions?.analytics_aov_enabled ?? userDetailsInsitialState.permissions.aovEnabled,\n isActiveInfluencer: userData?.user?.permissions?.allow_creating_and_editing_links ?? userDetailsInsitialState.permissions.isActiveInfluencer\n } : userDetailsInsitialState.permissions\n }\n\n function getUtmParamsObject(userData) {\n return userData?.brand?.utm_params ? {\n UTMSource: userData?.brand?.utm_params?.utm_source ?? '',\n UTMMedium: userData?.brand?.utm_params?.utm_medium ?? '',\n UTMCampaign: userData?.brand?.utm_params?.utm_campaign ?? '',\n UTMTerm: userData?.brand?.utm_params?.utm_term ?? '',\n UTMContent: userData?.brand?.utm_params?.utm_content ?? '',\n } : userDetailsInsitialState?.utmParams\n }\n\n function getSettingsObject(userData) {\n return {\n shippingAndReturnsUrl: userData?.brand?.shipping_and_return_url ?? userDetailsInsitialState.settings.shippingAndReturnsUrl,\n facebookPixelId: userData?.brand?.facebook_pixel_id ?? userDetailsInsitialState.settings.facebookPixelId,\n googleAnalyticsId: userData?.brand?.google_analytics_id ?? userDetailsInsitialState.settings.googleAnalyticsId,\n utmParams: getUtmParamsObject(userData),\n autoSwapEnabled: userData?.brand?.auto_swap_enabled ?? userDetailsInsitialState.settings.autoSwapEnabled,\n productVisionConfigurations: getProductVisionConfigurationsObject(userData),\n }\n }\n\n\n function getProductVisionConfigurationsObject(userData) {\n return {\n isEnabled: userData?.brand?.product_vision_configurations?.is_enabled ?? userDetailsInsitialState.settings.productVisionConfigurations.isEnabled,\n productCategory: userData?.brand?.product_vision_configurations?.product_category ?? userDetailsInsitialState.settings.productVisionConfigurations.productCategory,\n sensitivity: userData?.brand?.product_vision_configurations?.sensitivity ?? userDetailsInsitialState.settings.productVisionConfigurations.sensitivity,\n }\n }\n\n function setUserProperties(userData) {\n setUserDetails(prev => ({\n ...prev,\n name: userData?.user?.name ?? \"\",\n username: userData?.user?.admin_username ?? \"\",\n influencerUsername: userData?.user?.username ?? \"\",\n influencerImageUrl: userData?.user?.profile_image_url ?? \"\",\n email: userData?.user?.email ?? \"\",\n brand: userData?.brand ?? {},\n businessId: userData?.brand?.business_id ?? \"\",\n businessName: userData?.brand?.business_name ?? \"\",\n businessLogo: userData?.brand?.logo_url ?? \"\",\n businessCurrency: userData?.brand?.currency ?? userDetailsInsitialState.businessCurrency,\n subscriptionPlan: userData?.brand?.subscription_plan ?? userDetailsInsitialState.subscriptionPlan,\n freeTrialDaysLeft: userData?.brand?.free_trial_days_left ?? userDetailsInsitialState.freeTrialDaysLeft,\n domain: userData?.brand?.domain ?? \"\",\n settings: getSettingsObject(userData),\n theme: getThemeObject(userData),\n isAdmin: userData?.is_admin ?? false,\n permissions: getPermissionsObject(userData),\n promocode: userData?.user?.promocode ?? '',\n isVerified: true,\n isAuthenticated: true\n }))\n }\n\n function setUnauthenticatedUserProperties() {\n setUserDetails({\n ...userDetailsInsitialState\n })\n }\n\n function fetchLinks(searchQuery, skip, shouldUpdateContext, linkType, onFinish = () => { }) {\n GetLinksAPI(userDetails?.businessId, searchQuery, LINKS_PAGE_LINKS_FILTER_COUNT, skip, linkType)\n .then((linksData) => {\n onFinish(linksData)\n }).catch((error) => {\n setUserDetails(prev => {\n return {\n ...prev,\n linksData: {\n links: [],\n lastKey: null,\n },\n }\n })\n onFinish(null)\n })\n }\n\n\n function fetchMultilinks(searchQuery, skip, onFinish = () => { }) {\n GetMultilinksAPI(userDetails?.businessId, searchQuery, MULTILINKS_PAGE_MULTILINKS_FILTER_COUNT, skip)\n .then((multilinksData) => {\n onFinish(multilinksData)\n }).catch((error) => {\n onFinish(null)\n })\n }\n\n function register(username, password, email, onSuccess = () => { }, onFailure = () => { }) {\n RegisterAPI(username, password, email)\n .then(onSuccess)\n .catch(onFailure)\n }\n\n function login(username, influencerUsername, password, isInfluencerLogin, onLoggedIn) {\n if (isInfluencerLogin) {\n influencerLoginAPI(username, influencerUsername, password)\n .then((userData) => {\n LocalSharedPreferences.set_key(AUTH_TOKEN_KEY_LOCAL_STORAGE, userData.token)\n setUserProperties(userData)\n setIsUserLoaded(true)\n onUserLoaded(true)\n onLoggedIn(true)\n }).catch((error) => {\n console.log(error)\n setUnauthenticatedUserProperties()\n setIsUserLoaded(true)\n onUserLoaded(true)\n onLoggedIn(false)\n })\n } else {\n LoginAPI(username, password)\n .then((userData) => {\n LocalSharedPreferences.set_key(AUTH_TOKEN_KEY_LOCAL_STORAGE, userData.token)\n setUserProperties(userData)\n setIsUserLoaded(true)\n onUserLoaded(true)\n onLoggedIn(true)\n }).catch((error) => {\n console.log(error)\n setUnauthenticatedUserProperties()\n setIsUserLoaded(true)\n onUserLoaded(true)\n onLoggedIn(false)\n })\n }\n }\n\n function verify(onSuccess = () => { }, onFailure = () => { }) {\n AuthAPI()\n .then((userData) => {\n LocalSharedPreferences.set_key(AUTH_TOKEN_KEY_LOCAL_STORAGE, userData.token)\n setUserProperties(userData)\n setIsUserLoaded(true)\n onUserLoaded(true)\n onSuccess(userData)\n }).catch((error) => {\n setUnauthenticatedUserProperties()\n setIsUserLoaded(true)\n onUserLoaded(true)\n onFailure(error)\n })\n }\n\n function logout() {\n LocalSharedPreferences.remove_key(AUTH_TOKEN_KEY_LOCAL_STORAGE)\n setUserDetails({\n ...userDetailsInsitialState\n })\n setProductsOptionsMap(null)\n }\n\n function getFrontendUrl() {\n if (!isBusinessFeatureEnabled() || !userDetails.domain) {\n return environment.frontend_url\n }\n\n if (userDetails.domain.startsWith(\"http\")) {\n return `${userDetails.domain}${environment.app_proxy_path}`\n } \n return `${HTTPS_HOST_URL_PREFIX}${userDetails.domain}${environment.app_proxy_path}`\n }\n\n function getShopboardUrl() {\n return `${getFrontendUrl()}${userDetails?.username}`\n }\n\n function beginEditing() {\n setUserDetails(prev => ({\n ...prev,\n isEditing: true\n }))\n }\n\n function endEditing() {\n setUserDetails(prev => ({\n ...prev,\n isEditing: false\n }))\n }\n\n function isEditing() {\n return userDetails?.isEditing\n }\n\n function showApprovalMessage(message) {\n setApprovalMessageState({\n isOpen: true,\n message\n })\n }\n\n function onDrawerClosed() {\n setOptionsDrawerState(prev => ({\n ...prev,\n isOpen: false\n }))\n setTimeout(() => {\n setOptionsDrawerState(prev => ({\n ...prev,\n children: <></>\n }))\n }, PAYDIN_DRAWER_TRANSITION_DURATION)\n }\n\n function closeDrawer() {\n history.goBack()\n }\n\n function openDrawer(hasPadding, content, height = null) {\n setOptionsDrawerState({\n isOpen: true,\n onOpen: () => { },\n onClose: onDrawerClosed,\n hasPadding,\n children: content,\n height\n })\n }\n\n function closeFreeTrialDialog() {\n setFreeTrialDialogState(prev => ({\n ...prev,\n isOpen: false,\n replace_text_to_max_breach: false\n }))\n }\n\n function upgradeFreeTrialDialog() {\n setTimeout(() => {\n history.push(PRICING_PLANS_PAGE_URL)\n }, 200)\n }\n\n function openFreeTrialDialog(replace_text_to_max_breach=false, title='', subtitle='') {\n setFreeTrialDialogState(prev => ({\n ...prev,\n isOpen: true,\n replace_text_to_max_breach,\n text: {\n title,\n subtitle,\n }\n\n }))\n }\n\n function setSidebarExpanded(expanded) {\n setUserDetails(prev => ({\n ...prev,\n sidebarExpanded: expanded\n }))\n }\n\n function shopboardConnect(social = null, onFailure = () => { }) {\n if (social !== null) {\n connectShopboardSocialMedia(social)\n .then(response => {\n window.location.href = response?.redirect_url ?? ''\n })\n .catch(error => {\n console.log(error)\n onFailure(error)\n })\n }\n }\n\n function shopboardAuthenticate(social = null, code = '', onSuccess = () => { }, onFailure = () => { }) {\n if (social !== null) {\n authenticateShopboardSocialMedia(social, code)\n .then(response => {\n onSuccess(response)\n })\n .catch(error => {\n console.log(error)\n onFailure(error)\n })\n }\n }\n\n function shopboardDisconnect(social = null, onSuccess = () => { }, onFailure = () => { }) {\n if (social !== null) {\n disconnectShopboardSocialMedia(social)\n .then(() => {\n setUserDetails(prev => ({\n ...prev,\n shopboard: {\n ...prev.shopboard,\n socialMedias: {\n ...prev.shopboard.socialMedias,\n [social]: {\n ...prev.shopboard.socialMedias[social],\n connected: false\n }\n }\n }\n }))\n onSuccess()\n })\n .catch(error => {\n console.log(error)\n onFailure(error)\n })\n }\n }\n\n function isShopboardConnected(social = null) {\n if (social === null) {\n return (\n userDetails?.shopboard?.socialMedias[SHOPBOARD_SOCIALS.INSTAGRAM]?.connected ||\n userDetails?.shopboard?.socialMedias[SHOPBOARD_SOCIALS.TIKTOK]?.connected ||\n userDetails?.shopboard?.socialMedias[SHOPBOARD_SOCIALS.PINTEREST]?.connected\n )\n }\n\n return userDetails?.shopboard?.socialMedias[social]?.connected\n }\n\n function isShopboardConnectedSyncing(social = null) {\n if (social === null) {\n return (\n userDetails?.shopboard?.socialMedias[SHOPBOARD_SOCIALS.INSTAGRAM]?.numberOfPosts === -1 ||\n userDetails?.shopboard?.socialMedias[SHOPBOARD_SOCIALS.TIKTOK]?.numberOfPosts === -1 ||\n userDetails?.shopboard?.socialMedias[SHOPBOARD_SOCIALS.PINTEREST]?.numberOfPosts === -1\n )\n }\n return userDetails?.shopboard?.socialMedias[social]?.numberOfPosts === -1\n }\n\n function isShopboardConnectedSynced(social = null) {\n if (social === null) {\n return (\n userDetails?.shopboard?.socialMedias[SHOPBOARD_SOCIALS.INSTAGRAM]?.numberOfPosts >= 0 ||\n userDetails?.shopboard?.socialMedias[SHOPBOARD_SOCIALS.TIKTOK]?.numberOfPosts >= 0 ||\n userDetails?.shopboard?.socialMedias[SHOPBOARD_SOCIALS.PINTEREST]?.numberOfPosts >= 0\n )\n }\n return userDetails?.shopboard?.socialMedias[social]?.numberOfPosts >= 0\n }\n\n function checkShopboardStatus(onSuccess = () => { }, onFailure = () => { }) {\n getShopboardStatus()\n .then(status => {\n setUserDetails(prev => ({\n ...prev,\n shopboard: {\n ...prev.shopboard,\n synced: true,\n url: status?.shopboard_url ?? '',\n socialMedias: {\n [SHOPBOARD_SOCIALS.INSTAGRAM]: {\n ...prev.shopboard.socialMedias[SHOPBOARD_SOCIALS.INSTAGRAM],\n connected: status?.social_medias?.Instagram?.connected ?? false,\n numberOfPosts: status?.social_medias?.Instagram?.number_of_posts ?? -1,\n username: status?.social_medias?.Instagram?.username ?? \"\"\n },\n [SHOPBOARD_SOCIALS.TIKTOK]: {\n ...prev.shopboard.socialMedias[SHOPBOARD_SOCIALS.TIKTOK],\n connected: status?.social_medias?.Tiktok?.connected ?? false,\n numberOfPosts: status?.social_medias?.Tiktok?.number_of_posts ?? -1,\n username: status?.social_medias?.Tiktok?.username ?? \"\"\n },\n [SHOPBOARD_SOCIALS.PINTEREST]: {\n ...prev.shopboard.socialMedias[SHOPBOARD_SOCIALS.PINTEREST],\n connected: status?.social_medias?.Pinterest?.connected ?? false,\n numberOfPosts: status?.social_medias?.Pinterest?.number_of_posts ?? -1,\n username: status?.social_medias?.Pinterest?.username ?? \"\"\n }\n }\n }\n }))\n onSuccess()\n })\n .catch(error => {\n console.log(error)\n onFailure()\n })\n }\n\n function fetchShopboardLifeTimeAnalytics() {\n getShopboardAnalytics()\n .then(response => {\n setUserDetails(prev => ({\n ...prev,\n shopboard: {\n ...prev.shopboard,\n analytics: {\n ...prev.shopboard.analytics,\n synced: true,\n visits: response?.analytics?.visits ?? '-',\n sales: response?.analytics?.checkouts ?? '-',\n checkouts: response?.analytics?.requested_checkouts ?? '-',\n cr: (response?.analytics?.visits && response?.analytics?.visits > 0) ? ((response?.analytics?.checkouts ?? 0) / (response?.analytics?.visits)) * 100 : '-',\n revenue: response?.analytics?.revenue ?? '-',\n data: response?.analytics?.data ?? [],\n currency: response?.currency ?? DEFAULT_CURRENCY_CODE\n }\n }\n }))\n })\n .catch(error => {\n console.log(error)\n })\n }\n\n function fetchShopboardPosts(social, count, skip, shouldOverridePostList = true, onSuccess = () => { }, onFailure = () => { }) {\n getShopboardPosts(social, count, skip)\n .then(response => {\n setUserDetails(prev => ({\n ...prev,\n shopboard: {\n ...prev.shopboard,\n socialMedias: {\n ...prev.shopboard.socialMedias,\n [social]: {\n ...prev.shopboard.socialMedias[social],\n posts: shouldOverridePostList ? response?.posts.map(post => extractShopboardSocialMediaPost(post)) : [...prev.shopboard.socialMedias[social]?.posts, ...response?.posts.map(post => extractShopboardSocialMediaPost(post))]\n }\n }\n }\n }))\n onSuccess(response?.posts)\n })\n .catch(error => {\n console.log(error)\n onFailure(error)\n })\n }\n\n function hasSocialMediaPosts(social) {\n return userDetails?.shopboard?.socialMedias[social]?.posts.length > 0\n }\n\n function togglePostVisibility(social, postId, isVisible) {\n toggleShopboardPostVisibility(social, postId, isVisible)\n\n const updatedPosts = [...userDetails?.shopboard?.socialMedias[social]?.posts]\n const updatedPost = updatedPosts.find(post => post?.id === postId) ? { ...updatedPosts.find(post => post?.id === postId) } : {}\n const updatedPostIndex = updatedPosts.findIndex(post => post?.id === postId)\n\n updatedPost.isVisible = !updatedPost?.isVisible\n updatedPosts.splice(updatedPostIndex, 1, updatedPost)\n\n setUserDetails(prev => ({\n ...prev,\n shopboard: {\n ...prev.shopboard,\n socialMedias: {\n ...prev.shopboard.socialMedias,\n [social]: {\n ...prev.shopboard.socialMedias[social],\n posts: updatedPosts\n }\n }\n }\n }))\n }\n\n function tagPostProducts(social, postId, products) {\n const productIds = products?.map(product => product?.id)\n const selectedProductsOptions = products?.reduce((acc, selectedProduct) => {\n if (Object.keys(selectedProduct?.selectedOptions).length > 0)\n return { ...acc, [selectedProduct.id]: selectedProduct?.selectedOptions}\n return acc\n }, {}) ?? {}\n tagShopboardPostProducts(social, postId, productIds, selectedProductsOptions)\n\n const updatedPosts = [...userDetails?.shopboard?.socialMedias[social]?.posts]\n const updatedPostIndex = updatedPosts.findIndex(post => post?.id === postId)\n \n if (updatedPostIndex !== -1) {\n const updatedPost = {...updatedPosts[updatedPostIndex]}\n \n updatedPost.products = products\n updatedPosts.splice(updatedPostIndex, 1, updatedPost)\n \n setUserDetails(prev => ({\n ...prev,\n shopboard: {\n ...prev.shopboard,\n socialMedias: {\n ...prev.shopboard.socialMedias,\n [social]: {\n ...prev.shopboard.socialMedias[social],\n posts: updatedPosts\n }\n }\n }\n }))\n }\n }\n\n function fetchTopPerformingProducts(onSuccess = () => { }, onFailure = () => { }) {\n GetTopPerformingProductsAPI()\n .then(response => {\n setUserDetails(prev => ({\n ...prev,\n trends: {\n ...prev?.trends,\n topPerformingProducts: response ? response?.map(product => extractProductData(product)) : []\n }\n }))\n onSuccess()\n })\n .catch(error => {\n console.log(error)\n onFailure(error)\n })\n }\n\n\n function fetchTopProductsCombinations(onSuccess = () => { }, onFailure = () => { }) {\n GetTopProductsCombinationsAPI()\n .then(response => {\n setUserDetails(prev => ({\n ...prev,\n trends: {\n ...prev?.trends,\n topProductsCombinations: {\n combinations: response?.top_combinations ?? [],\n products: response?.products ? response?.products?.map(product => extractProductData(product)) : []\n }\n }\n }))\n onSuccess()\n })\n .catch(error => {\n console.log(error)\n onFailure(error)\n })\n }\n\n\n function fetchComplementaryProducts(inventoryId, onSuccess = () => { }, onFailure = () => { }) {\n if (Object.keys(userDetails?.trends?.complementaryProducts).includes(inventoryId)) {\n onSuccess()\n } else {\n GetComplementaryProductsAPI(inventoryId)\n .then(response => {\n const complementaryProducts = response?.map(product => {\n return {\n combinationScore: product?.combination_score ?? 0,\n product: extractProductData(product)\n }\n })\n setUserDetails(prev => ({\n ...prev,\n trends: {\n ...prev?.trends,\n complementaryProducts: {\n ...prev?.trends?.complementaryProducts,\n [inventoryId]: complementaryProducts\n }\n }\n }))\n onSuccess(complementaryProducts)\n })\n .catch(error => {\n console.log(error)\n onFailure(error)\n })\n }\n }\n\n return (\n <userDetailsContext.Provider value={{\n userDetails,\n setUserDetails,\n setRecentLinks,\n setRecentShorts,\n setRecentInfluencers,\n isFreeUser,\n isFreeUserAndTrialEnded,\n isFreeUserAndTrialPastLastWeek,\n isBusinessFeatureEnabled,\n maxInfleuncersAllowed,\n getFrontendUrl,\n getShopboardUrl,\n hasShopifyStore,\n beginEditing,\n endEditing,\n isEditing,\n setSidebarExpanded,\n shopboardConnect,\n shopboardAuthenticate,\n shopboardDisconnect,\n isShopboardConnected,\n checkShopboardStatus,\n isShopboardConnectedSyncing,\n isShopboardConnectedSynced,\n fetchShopboardLifeTimeAnalytics,\n fetchShopboardPosts,\n hasSocialMediaPosts,\n togglePostVisibility,\n tagPostProducts,\n fetchTopPerformingProducts,\n fetchTopProductsCombinations,\n fetchComplementaryProducts\n }}>\n <AuthContext.Provider value={{ setUserProperties, login, register, verify, logout }}>\n <fetchLinksContext.Provider value={{fetchLinks, fetchMultilinks}}>\n <isReadyContext.Provider value={isReady}>\n <isUserLoadedContext.Provider value={isUserLoaded}>\n <generalDataContext.Provider value={{\n generalData,\n setGeneralData,\n showApprovalMessage,\n openDrawer,\n closeDrawer,\n finishedUpdatingObject,\n finishedCreatingObject,\n objectToSave,\n setObjectToSave,\n setFinishedCreatingObject,\n setFinishedUpdatingObject,\n openFreeTrialDialog,\n closeFreeTrialDialog,\n productsOptionsMap,\n fetchProductsOptionsMap,\n updateProductsOptionsMap,\n getOptionValue,\n }}>\n {children}\n <ApprovalMessage\n isMessageShown={approvalMessageState.isOpen}\n closeMessage={() => setApprovalMessageState(prev => ({ ...prev, isOpen: false }))}\n text={approvalMessageState.message}\n />\n\n <PaydinDrawer\n zIndex={3000}\n height={optionsDrawerState.height}\n direction={PAYDIN_DRAWER_DIRECTION.BOTTOM}\n isOpen={optionsDrawerState.isOpen}\n onOpen={optionsDrawerState.onOpen}\n onClose={optionsDrawerState.onClose}\n hasPadding={optionsDrawerState.hasPadding}\n topRightBorderRadiusPx={LINKS_PAGE_MOBILE_OPTIONS_DRAWER_TOP_BORDER_RADIUS_PX}\n topLeftBorderRadiusPx={LINKS_PAGE_MOBILE_OPTIONS_DRAWER_TOP_BORDER_RADIUS_PX}\n >\n {optionsDrawerState.children}\n </PaydinDrawer>\n {\n (!isMobile && isFreeUser() && (userDetails?.isAdmin || isFreeUserAndTrialEnded()) && userDetails.isAuthenticated) && <FreeTrialStrip daysLeft={userDetails.freeTrialDaysLeft}/>\n }\n {\n <FreeModeDialog \n isDialogOpen={freeTrialDialogState.isOpen}\n handleDialogClose={freeTrialDialogState.onClose}\n replace_text_to_max_breach={freeTrialDialogState?.replace_text_to_max_breach ? freeTrialDialogState?.replace_text_to_max_breach : false}\n title={freeTrialDialogState?.replace_text_to_max_breach ? freeTrialDialogState?.text?.title : ''}\n subtitle={freeTrialDialogState?.replace_text_to_max_breach ? freeTrialDialogState.text?.subtitle : ''}\n />\n }\n </generalDataContext.Provider>\n </isUserLoadedContext.Provider>\n </isReadyContext.Provider>\n </fetchLinksContext.Provider>\n </AuthContext.Provider>\n </userDetailsContext.Provider>\n );\n}\n","import React from 'react'\nimport './BoxedMessage.css'\nimport { BOXED_MESSAGE_TYPES } from 'constants/general.constants'\nimport { IoWarningOutline } from 'react-icons/io5'\nimport { BiInfoCircle } from 'react-icons/bi'\n\n/**\n * Represents a boxed message.\n * @param {string} message - The message to display\n * @param {string} type - The type of message to display\n */\nexport default function BoxedMessage({\n message,\n type = BOXED_MESSAGE_TYPES.ERROR\n}) {\n return (\n <div className={`boxed-message-container ${type}`}>\n { type === BOXED_MESSAGE_TYPES.ERROR ? <IoWarningOutline className='boxed-message-image' /> : <BiInfoCircle className='boxed-message-image' /> }\n <div className=\"boxed-message-text\">{message}</div>\n </div>\n )\n}","import React from 'react'\nimport './ShopifyConnectStore.css'\nimport LoaderButton from 'components/LoaderButton/LoaderButton'\nimport ImageBox from 'components/ImageBox/ImageBox'\nimport { useTranslation } from 'react-i18next'\nimport BoxedMessage from 'components/BoxedMessage/BoxedMessage'\nimport { BOXED_MESSAGE_TYPES, SHOPIFY_LOGO_URL } from 'constants/general.constants'\n\n/**\n * Represents a portion of the Shopify store connect interface.\n * It displays the Shopify store provider and allows input for Shopify store url with a connection button.\n * @param {boolean} isConnectingStore - Determins whether the store connection request is in progress or not\n * @param {boolean} isShopifyConnectionFail - Determins whether the store connection request has failed or not\n * @param {function} connectShopifyStoreFunction - A callback function to perform when clicking on the store connection button\n */\nexport default function ShopifyConnectStore({\n isConnectingStore = false,\n isShopifyConnectionFail = false,\n connectShopifyStoreFunction = () => { }\n}) {\n const { t } = useTranslation()\n\n return (\n <>\n <div className=\"shopify-connect-store-provider-section\">\n <div className=\"shopify-connect-store-provider\">\n <ImageBox\n className=\"shopify-connect-store-provider-image-container\"\n imageClassName=\"shopify-connect-store-provider-image\"\n image={SHOPIFY_LOGO_URL} />\n <div className=\"shopify-connect-store-provider-name\">{t('SHOPIFY_CONNECT_STORE_PROVIDER_NAME')}</div>\n </div>\n </div>\n {\n isShopifyConnectionFail && <BoxedMessage\n type={BOXED_MESSAGE_TYPES.ERROR}\n message={t('SHOPIFY_CONNECT_CONNECTION_FAILED_ERROR_MESSAGE')}\n />\n }\n <div className=\"shopify-connect-buttons-box\">\n {/* TODO - shopify review not allowing myshopify url so changed to redirect to shopify app store */}\n <LoaderButton\n className=\"shopify-connect-connect-shopify-store-button shopify-connect-button\"\n buttonText={\"Install the shopeaks app on Shopify app store\"}\n isLoading={isConnectingStore}\n renderAsButton={false}\n onClick={() => connectShopifyStoreFunction()} />\n </div>\n </>\n )\n}","import React, { useState } from 'react'\nimport './ShopifyConnect.css'\nimport ImageBox from 'components/ImageBox/ImageBox'\nimport { IoIosArrowForward } from 'react-icons/io'\nimport { Trans, useTranslation } from 'react-i18next'\nimport { AuthConnectStoreAPI, ConnectStoreAPI } from 'api/store/store'\nimport { getQueryVariable } from 'services/SystemService'\nimport { AUTH_QUERY_PARAMETER_KEY, EXTERNAL_AUTH_PAGE_URL, HOME_PAGE_URL, LINKS_PAGE_URL, LOGIN_PAGE_URL } from 'constants/routes.constants'\nimport { useHistoryContext } from 'contexts/History'\nimport { BOXED_MESSAGE_TYPES, SHOPEAKS_SMALL_LOGO_URL, SHOPIFY_CONNECT_NAVIGATE_TO_ADMIN_PAGE_DELAY, SHOPIFY_CONNECT_SHOPIFY_SHOP_URL_SUFFIX, SHOPIFY_LOGO_URL } from 'constants/general.constants'\nimport { useAuthContext, useUserDetailsContext } from 'contexts/User'\nimport LoaderButton from 'components/LoaderButton/LoaderButton'\nimport ShopifyConnectStore from 'components/ShopifyConnectStore/ShopifyConnectStore'\nimport BoxedMessage from 'components/BoxedMessage/BoxedMessage'\nimport { isMobile } from 'utils/deviceUtils'\n\n/**\n * Represents a Shopify connection interface.\n * @param {boolean} hasShopifyStore - Determins whether the user is connected to a shopify store or not\n */\nexport default function ShopifyConnect({\n hasShopifyStore = false\n}) {\n const { t } = useTranslation()\n const history = useHistoryContext()\n const { userDetails } = useUserDetailsContext()\n const { verify } = useAuthContext()\n\n const [isPageLoading, setIsPageLoading] = useState(false)\n const [isBoxedMessageShown, setIsBoxedMessageShown] = useState(false)\n const [boxedMessage, setBoxedMessage] = useState('')\n\n function connectToShopifyAccount() {\n setIsPageLoading(true)\n AuthConnectStoreAPI(getQueryVariable(AUTH_QUERY_PARAMETER_KEY))\n .then(response => {\n verify(data => {\n notifyProcessFinished()\n }, error => {\n console.log(error)\n setIsPageLoading(false)\n })\n })\n .catch(error => {\n console.log(error)\n setBoxedMessage(t('SHOPIFY_CONNECT_CONNECTION_FAILED_ERROR_MESSAGE'))\n setIsBoxedMessageShown(true)\n setIsPageLoading(false)\n })\n }\n\n function navigateToLogin() {\n history.push(LOGIN_PAGE_URL + window.location.search)\n }\n\n function notifyProcessFinished() {\n window.opener.postMessage('CompletedPaylinkProcess', '*')\n setTimeout(() => {\n history.push(HOME_PAGE_URL)\n }, SHOPIFY_CONNECT_NAVIGATE_TO_ADMIN_PAGE_DELAY)\n }\n\n function connectShopifyStore(shopUrlPrefix) {\n // TODO change to the paily listing url when available\n window.open(\"https://apps.shopify.com/shopeaks\", \"_blank\", \"noreferrer\")\n // TODO - shopify review don't allow requesting myshopify url. So for now redirecting to app store.\n // setIsPageLoading(true)\n // ConnectStoreAPI(shopUrlPrefix + SHOPIFY_CONNECT_SHOPIFY_SHOP_URL_SUFFIX)\n // .then(redirectUrl => {\n // setIsPageLoading(false)\n // window.open(redirectUrl, \"_blank\", \"noreferrer\")\n // })\n // .catch(error => {\n // console.log(error)\n // setIsPageLoading(false)\n // setBoxedMessage(t('SHOPIFY_CONNECT_CONNECTION_FAILED_ERROR_MESSAGE'))\n // setIsBoxedMessageShown(true)\n // })\n }\n\n return (\n <>\n <form className='shopify-connect-container'>\n <div className=\"shopify-connect-content\" style={{ padding: isMobile ? '20px' : '30px 60px' }}>\n {\n window.location.pathname === EXTERNAL_AUTH_PAGE_URL ? <>\n <div className=\"shopify-connect-upper-frame\">\n <div className=\"shopify-connect-connection-frame\">\n <ImageBox\n className='shopify-connect-connection-frame-shopify-logo'\n imageClassName='shopify-connect-connection-frame-image'\n image={SHOPIFY_LOGO_URL} />\n <IoIosArrowForward className=\"shopify-connect-connection-frame-arrow-separator\" />\n <ImageBox\n className='shopify-connect-connection-frame-paylink-small-logo'\n imageClassName='shopify-connect-connection-frame-image'\n image={SHOPEAKS_SMALL_LOGO_URL} />\n </div>\n <div className=\"shopify-connect-title\">{t('SHOPIFY_CONNECT_TITLE')}</div>\n <div className=\"shopify-connect-you-are-logged-in-as-title\">{t('SHOPIFY_CONNECT_LOGGED_IN_AS_LABEL', { username: userDetails.username })}</div>\n </div>\n {\n hasShopifyStore ? <>\n <BoxedMessage\n type={BOXED_MESSAGE_TYPES.INFO}\n message={\n <Trans\n i18nKey={t('SHOPIFY_CONNECT_ALREADY_CONNECTED_TO_STORE_LABEL', { businessName: userDetails?.businessName })}\n />\n }\n />\n <div className=\"shopify-connect-you-can-disconnect-text\">{t('SHOPIFY_CONNECT_YOU_CAN_DISCONNECT_AND_TRY_AGAIN_LABEL')}</div>\n <div className=\"shopify-connect-buttons-box\">\n <div className=\"shopify-connect-connect-to-different-account-button shopify-connect-button\" onClick={navigateToLogin}>{t('SHOPIFY_CONNECT_CONTINUE_BUTTON_TEXT')}</div>\n <div className=\"shopify-connect-cancel-button shopify-connect-button\" onClick={notifyProcessFinished}>{t('SHOPIFY_CONNECT_CANCEL_BUTTON_TEXT')}</div>\n </div>\n </> : <>\n <div className=\"shopify-connect-agree-to-share-information-title\">{t('SHOPIFY_CONNECT_AGREE_TO_SHARE_INFORMATION_LABEL')}</div>\n {isBoxedMessageShown && <BoxedMessage type={BOXED_MESSAGE_TYPES.ERROR} message={boxedMessage} />}\n <div className=\"shopify-connect-buttons-box\">\n <LoaderButton\n buttonText={t('SHOPIFY_CONNECT_CONNECT_SHOPIFY_BUTTON_TEXT')}\n isLoading={isPageLoading}\n className='shopify-connect-connect-shopify-account-button shopify-connect-button'\n onClick={connectToShopifyAccount}\n />\n <div className=\"shopify-connect-cancel-button shopify-connect-button\" onClick={notifyProcessFinished}>{t('SHOPIFY_CONNECT_CANCEL_BUTTON_TEXT')}</div>\n </div>\n </>\n }\n\n </> : <>\n <div className=\"shopify-connect-launch-title-section\">\n <div className=\"shopify-connect-launch-store-title\">{t('SHOPIFY_CONNECT_LAUNCH_STORE_TITLE')}</div>\n <div className=\"shopify-connect-launch-store-subtitle\">{t('SHOPIFY_CONNECT_LAUNCH_STORE_SUBTITLE')}</div>\n </div>\n <div className=\"shopify-connect-store-provider-title\">{t('SHOPIFY_CONNECT_STORE_PROVIDER_TITLE')}</div>\n <ShopifyConnectStore\n isConnectingStore={isPageLoading}\n isShopifyConnectionFail={isBoxedMessageShown}\n connectShopifyStoreFunction={connectShopifyStore}\n />\n </>\n }\n </div>\n </form>\n </>\n )\n}","import React from 'react'\nimport './PaydinMenu.css'\nimport { \n PAYDIN_MENU_DEFAULT_WIDTH_PX, \n PAYDIN_MENU_OPENING_DIRECTIONS, \n PAYDI_MENU_TRANSITION_DURATION_MILLISECONDS\n} from 'constants/general.constants'\nimport { Menu } from '@mui/material'\n\n/**\n * Represents a custom menu using the MUI {@link Menu}.\n * It's content can be a list of options or a custom layout given as children.\n * @param {boolean} isOpen - Determins whether the menu is opened or not \n * @param {DOMElement} anchorElement - The element which the menu is attached to\n * @param {function} onClose - The callback function for closing the menu\n * @param {number} borderRadius - The border radius for the menu container\n * @param {string} direction - The direction from which the menu is opened\n * @param {string} backgroundColor - The background color of this menu\n * @param {array} options - The options list for this menu. Must contain an array of objects \n * that each one of them has 'text' and 'onClick' fields. \n * If this list is empty, the children will be rendered\n */\nexport default function PaydinMenu({\n children,\n isOpen,\n anchorElement,\n onClose,\n borderRadius = 0,\n borderColor = null,\n direction = PAYDIN_MENU_OPENING_DIRECTIONS.LEFT,\n backgroundColor = 'white',\n options = [],\n widthPx = PAYDIN_MENU_DEFAULT_WIDTH_PX,\n paddingTopPx = 0,\n paddingBottomPx = 0,\n paddingLeftPx = 0,\n paddingRightPx = 0\n}) {\n return (\n <Menu\n open={isOpen}\n anchorEl={anchorElement}\n onClose={onClose}\n elevation={0}\n anchorOrigin={{\n vertical: 'bottom',\n horizontal: direction,\n }}\n transformOrigin={{\n vertical: 'top',\n horizontal: direction,\n }}\n transitionDuration={PAYDI_MENU_TRANSITION_DURATION_MILLISECONDS}\n sx={{\n '& .MuiMenu-paper': {\n borderRadius: `${borderRadius}px`,\n ...(borderColor ? {border: `1px solid ${borderColor}`} : {}),\n width: widthPx,\n backgroundColor,\n boxShadow: '0px 5px 20px 5px rgba(0, 0, 0, 0.1)'\n },\n '& .MuiList-root': {\n padding: `${paddingTopPx}px ${paddingRightPx}px ${paddingBottomPx}px ${paddingLeftPx}px`,\n }\n }}\n >\n {options.length === 0 ? children : options.map(option => <div className={`paydin-menu-item ${option?.className ?? ''}`} key={option.text} onClick={option.onClick}>{option.text}</div>)}\n </Menu>\n )\n}","import React from 'react'\n\nexport default function MobileSimulatorTopBarMenuImage(props) {\n return (\n <svg\n {...props}\n stroke=\"currentColor\"\n fill=\"currentColor\"\n strokeWidth=\"0\"\n viewBox=\"0 0 24 24\"\n height=\"1em\"\n width=\"1em\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n fill=\"none\"\n stroke=\"#000\" \n strokeWidth=\"2\" \n d=\"M2,19 L22,19 M2,5 M2,12 L22,12\"></path>\n </svg>\n )\n}","import React from 'react'\nimport { useTranslation } from 'react-i18next'\nimport './MobileSimulatorProduct.css'\nimport ImageBox from 'components/ImageBox/ImageBox'\n\n/**\n * Represents a cart item row inside the cart display in the home screen.\n * @param {string} imageUrl - The image url of the item\n * @param {string} title - The title of the item\n */\nexport default function MobileSimulatorProduct({\n imageUrl,\n title\n}) {\n const { t } = useTranslation()\n\n return (\n <div dir={t('direction.dir')} className='mobile-simulator-product-container'>\n <div className='mobile-simulator-product-content'>\n <ImageBox\n className='mobile-simulator-product-image'\n image={imageUrl}\n showImageLoader={true}\n showGreyLoaderBackground={true}\n isImageFitCover={true}\n showImageBorderRadius={true}\n borderRadius={'6px'}\n border='1px solid #ececec'\n />\n <div className=\"mobile-simulator-product-details-container\">\n <div className=\"mobile-simulator-product-details-upper-section\">\n <div className=\"mobile-simulator-product-title-price-container\">\n <div className=\"mobile-simulator-product-title\">{title}</div>\n </div>\n </div>\n <div className=\"mobile-simulator-product-details-lower-section\">\n <div className={`mobile-simulator-product-add-to-cart-more-info-container`}>\n <div className='mobile-simulator-product-add-to-cart-button'>{t('MOBILE_SIMULATOR_PRODUCT_ADD_TO_CART_BUTTON_TEXT')}</div>\n </div>\n </div>\n </div>\n </div>\n </div>\n )\n}","import React from 'react'\nimport './MobileLinkPreviewSimulator.css'\nimport ImageBox from 'components/ImageBox/ImageBox'\nimport { useTranslation } from 'react-i18next'\nimport { useUserDetailsContext } from 'contexts/User'\nimport MobileSimulatorTopBarMenuImage from 'embeddedImages/MobileSimulatorTopBarMenuImage'\nimport MobileSimulatorProduct from 'components/MobileSimulatorProduct/MobileSimulatorProduct'\n\n/**\n * Represents a simulator for preview link on a mobile device.\n * @param {string} mainImageUrl - The image url of the large main image on the simulator display\n * @param {array} products - The products' list which their images will be shown under the main image\n * @param {boolean} hasBorder - Determins whether the simulator has a bold border or not \n * @param {boolean} isFullScreen - Determins whether the simulator will be displayed as fullscreen or not \n */\nexport default function MobileLinkPreviewSimulator({\n products,\n hasBorder = true,\n isFullScreen = false\n}) {\n const { t } = useTranslation()\n const { userDetails } = useUserDetailsContext()\n\n return (\n <div className='mobile-link-preview-simulator-container'\n style={{\n border: hasBorder ? '12px solid black' : 'none',\n maxHeight: isFullScreen ? 'unset' : '560px'\n }}\n >\n <div className=\"mobile-link-preview-simulator-content\">\n <div className=\"mobile-link-preview-simulator-upper-container\">\n <div className=\"mobile-link-preview-simulator-topbar\">\n <MobileSimulatorTopBarMenuImage className=\"mobile-link-preview-simulator-topbar-menu-image mobile-link-preview-simulator-topbar-image\" />\n {\n userDetails?.businessLogo ? <ImageBox\n className=\"mobile-link-preview-simulator-mobile-simulator-topbar-image\"\n image={userDetails?.businessLogo}\n /> : <div className=\"mobile-link-preview-simulator-topbar-store-name\">{userDetails?.businessName}</div>\n }\n <div style={{ width: '20px' }}></div>\n </div>\n <div className=\"mobile-link-preview-simulator-products-list\">\n {\n products && products?.map(product => <MobileSimulatorProduct\n key={product?.title + '__' + product?.imageUrl}\n title={product?.title}\n imageUrl={product?.imageUrl}\n />)\n }\n </div>\n </div>\n </div>\n </div>\n )\n}","import React, { useEffect, useRef } from 'react'\nimport './MultiLineText.css'\n\n/**\n * Represents a text which can spread over a given number of lines.\n * @param {string} text - The displayed text\n * @param {string} className - The displayed text's class name\n * @param {number} lines - The given number of lines to spread the text over\n */\nexport default function MultiLineText({\n text = '',\n className = '',\n lines = 1,\n treatAsHtml = false,\n style = {},\n onClick = () => {}\n}) {\n const divRef = useRef(null)\n\n useEffect(() => {\n if (divRef?.current) {\n if (treatAsHtml) {\n divRef.current.innerHTML = text\n } else {\n divRef.current.innerText = text\n }\n }\n }, [text])\n \n return (\n <div \n ref={divRef} \n className={lines === 1 ? `one-line-text ${className}` : `multi-line-text one-word ${className}`} \n style={{ ...style, WebkitLineClamp: lines }}\n onClick={onClick}\n >\n </div>\n )\n}","import React, { useEffect, useState } from 'react'\nimport './ColorSelect.css'\nimport { BsCheck } from 'react-icons/bs'\nimport { COLOR_SELECT_DEFAULT_DIMENSIONS } from 'constants/general.constants'\nimport { useTranslation } from 'react-i18next'\nimport { useGeneralDataContext } from \"contexts/User\"\nimport Menu from '@mui/material/Menu';\nimport MenuItem from '@mui/material/MenuItem';\nimport { Typography } from '@mui/material'\n\n/**\n * Represents a color option selector.\n * @param {string} selectedColor - The state of the selected color\n * @param {function} setSelectedColor - A function for setting the state of the selected color\n * @param {object} colorCounter - The color option values quantities object\n */\nexport default function ColorSelect({\n optionName,\n selectedColor,\n setSelectedColor = () => { },\n colorCounter = {},\n colorSelectDisplayedColorsCount = 0\n}) {\n const { t } = useTranslation()\n const { \n getOptionValue,\n productsOptionsMap\n } = useGeneralDataContext()\n\n const [colors, setColors] = useState([])\n\n const [anchorEl, setAnchorEl] = useState(null);\n const open = Boolean(anchorEl);\n const handleMoreClick = (event) => {\n setAnchorEl(event.currentTarget);\n };\n const handleMoreClose = () => {\n setAnchorEl(null);\n };\n\n useEffect(() => {\n let tempColors = Object.keys(colorCounter)\n\n if (tempColors?.length > colorSelectDisplayedColorsCount) {\n if (selectedColor && colorSelectDisplayedColorsCount > 0 && tempColors.includes(selectedColor) && !tempColors?.slice(0, colorSelectDisplayedColorsCount - 1).includes(selectedColor)) {\n setColors([...tempColors?.slice(0, colorSelectDisplayedColorsCount - 2), selectedColor])\n } else {\n setColors(tempColors?.slice(0, colorSelectDisplayedColorsCount - 1))\n }\n } else {\n setColors(tempColors?.slice(0, colorSelectDisplayedColorsCount))\n }\n\n }, [colorCounter, selectedColor, productsOptionsMap])\n\n function onColorClick(color) {\n if (colorCounter[color] > 0) {\n if (selectedColor === color) {\n setSelectedColor(\"\")\n } else {\n setSelectedColor(color)\n setAnchorEl(null)\n }\n }\n }\n\n function isColorSelected(color) {\n return selectedColor === color\n }\n\n function renderColorCircle(color, onClick = () => {}) {\n return <div key={color} className='color-select-item-frame' style={{height: `${COLOR_SELECT_DEFAULT_DIMENSIONS + 8}px`}} onClick={() => onClick(color)}>\n <div\n className={`color-select-item ${isColorSelected(color) ? 'selected' : ''} ${colorCounter[color] === 0 ? 'out-of-stock' : ''}`}\n style={{\n backgroundColor: getOptionValue(optionName, color),\n boxShadow: `0 0 0 2px white, 0 0 0 4px ${isColorSelected(color) ? 'black' : '#cccccc'}`,\n width: `${COLOR_SELECT_DEFAULT_DIMENSIONS}px`,\n height: `${COLOR_SELECT_DEFAULT_DIMENSIONS}px`\n }}\n >\n {isColorSelected(color) && <BsCheck className='color-select-item-selected-v-mark' style={{\n width: `${COLOR_SELECT_DEFAULT_DIMENSIONS - 5}px`,\n height: `${COLOR_SELECT_DEFAULT_DIMENSIONS - 5}px`\n }} />}\n </div>\n </div>\n }\n\n return (\n <div className='color-select-container'>\n {\n (Object.keys(colorCounter)?.length >= 2 && Object.keys(colorCounter)?.length <= colorSelectDisplayedColorsCount) ?\n colors?.map(color => renderColorCircle(color, onColorClick)) : <>\n {colors?.map(color => renderColorCircle(color, onColorClick))}\n <div className=\"color-select-item-more-colors\" onClick={handleMoreClick}>{t('COLOR_SELECT_MORE_COLORS_BUTTON_TEXT')}</div>\n </>\n }\n <Menu\n id=\"basic-menu\"\n anchorEl={anchorEl}\n open={open}\n onClose={handleMoreClose}\n MenuListProps={{\n 'dense': true,\n }}\n slotProps={{\n paper: {\n style: {\n maxHeight: '190px',\n width: 'fit-content',\n minWidth: '200px',\n maxWidth: '400px'\n },\n },\n }}\n >\n {\n Object.keys(colorCounter).map(color => <MenuItem key={color} onClick={() => onColorClick(color)}>\n <div className='color-select-menu-item'>\n {renderColorCircle(color)}\n <Typography variant=\"inherit\" noWrap>{color}</Typography>\n </div>\n </MenuItem>)\n }\n </Menu>\n </div>\n )\n}","import React, { useEffect, useState } from 'react'\nimport './AddProductsDialogProduct.css'\nimport { ADD_PRODUCTS_DIALOG_PRODUCT_STATUS, COLOR_SELECT_CIRCLE_DIMENSIONS, IMAGE_LOADING_IMAGE_SRV_TEXT, OPTION_TYPES } from 'constants/general.constants'\nimport { useTranslation } from 'react-i18next'\nimport { BsCheck } from 'react-icons/bs'\nimport ImageBox from 'components/ImageBox/ImageBox'\nimport MultiLineText from 'components/MultiLineText/MultiLineText'\nimport { useGeneralDataContext } from 'contexts/User'\nimport ColorSelect from 'components/ColorSelect/ColorSelect'\nimport { cloneObject } from 'utils/dataUtils'\nimport { ProductOptionsImageAPI } from 'api/products/products'\nimport { isMobile } from 'utils/deviceUtils'\n\n/**\n * Represents a product list item inside {@link AddProductsDialog} component.\n * @param {object} data - The data of this product\n * @param {boolean} isItemSelected - Determins whether this item is selected or not\n * @param {function} onItemClick - A function to perfomr whenever this item is clicked\n */\nexport default function AddProductsDialogProduct({\n elementRef,\n data = {},\n isItemSelected = false,\n onItemClick = () => { },\n allowColorOptionSelect = false,\n}) {\n const {\n productsOptionsMap,\n } = useGeneralDataContext()\n \n const { t } = useTranslation()\n \n const [colorOption, setColorOption] = useState({\n name: \"\",\n position: 0,\n values: [],\n })\n const [colorCounter, setColorCounter] = useState({})\n const [selectedColor, setSelectedColor] = useState(\"\")\n const [currentImageUrl, setCurrentImageUrl] = useState(data?.imageUrl)\n\n\n useEffect(() => {\n if (allowColorOptionSelect && productsOptionsMap && !colorOption?.name && data?.options) {\n data?.options.map(option => {\n if (productsOptionsMap[option.name]?.type === OPTION_TYPES.COLOR && option?.values?.length > 1) {\n if (!colorOption?.name || colorOption?.position > option?.position)\n setColorOption(option)\n let tempColorCounter = {}\n option?.values?.forEach(value => tempColorCounter[value] = 1)\n setColorCounter(tempColorCounter)\n if (data?.selectedOptions[option.name]) {\n setSelectedColor(data?.selectedOptions[option.name])\n }\n }\n })\n } \n }, [data, productsOptionsMap, allowColorOptionSelect])\n\n useEffect(() => {\n if (!isItemSelected && selectedColor) {\n setSelectedColor(\"\")\n }\n }, [isItemSelected])\n\n function onColorSelected(color) {\n if (color) {\n // First choose and make current picture IMAGE_LOADING_IMAGE_SRV_TEXT to show loader\n let updatedItem = cloneObject(data)\n updatedItem.selectedOptions = {[colorOption?.name]: color}\n setCurrentImageUrl(IMAGE_LOADING_IMAGE_SRV_TEXT)\n onItemClick(updatedItem)\n setSelectedColor(color)\n ProductOptionsImageAPI(data?.id, {[colorOption?.name]: color})\n .then(image => {\n // Second update picture\n let updatedItem = cloneObject(data)\n const newImagUrl = image?.src ?? data?.imageUrl\n updatedItem.selectedOptions = {[colorOption?.name]: color}\n updatedItem.imageUrl = newImagUrl\n setCurrentImageUrl(newImagUrl)\n onItemClick(updatedItem)\n })\n .catch(error => {\n setCurrentImageUrl(data?.imageUrl)\n })\n } else {\n onItemClick()\n setSelectedColor(color)\n }\n }\n \n return (\n <div className='add-products-dialog-product-container' ref={elementRef}>\n <div className='add-products-dialog-product-image-frame' onClick={() => onItemClick()}>\n <ImageBox\n className='add-products-dialog-product-image'\n image={currentImageUrl}\n isImageFitCover={true}\n showGreyImageBackground={true}\n showImageLoader={true}\n />\n {isItemSelected && <div className='selected-item-mask'>\n <BsCheck className='add-products-dialog-product-selected-v-mark' />\n </div>}\n <div className=\"add-products-dialog-product-tags\">\n {data?.productStatus === ADD_PRODUCTS_DIALOG_PRODUCT_STATUS.DRAFT && <div className=\"add-products-dialog-product-draft-tag\">{t('ADD_PRODUCTS_DIALOG_DRAFT_PRODUCT_TAG_TEXT')}</div>}\n {data?.hasNoQuantity && <div className=\"add-products-dialog-product-out-of-stock-tag\">{t('ADD_PRODUCTS_DIALOG_OUT_OF_STOCK_PRODUCT_TAG_TEXT')}</div>}\n </div>\n </div>\n <div className='add-products-dialog-product-details'>\n <MultiLineText\n text={data?.title}\n className='add-products-dialog-product-title'\n lines={2}\n onClick={() => onItemClick()}\n treatAsHtml={true}\n />\n {data?.handle && <MultiLineText\n text={data?.handle}\n className='add-products-dialog-product-handle'\n lines={1}\n onClick={() => onItemClick()}\n />}\n {colorOption?.name && <ColorSelect\n optionName={colorOption?.name}\n selectedColor={selectedColor}\n setSelectedColor={onColorSelected}\n colorCounter={colorCounter}\n colorCircleDimensionsPx={COLOR_SELECT_CIRCLE_DIMENSIONS}\n onMoreColorsButtonClick={() => {}}\n colorSelectDisplayedColorsCount={isMobile ? 3 : 4}\n />}\n </div>\n </div>\n )\n}","import React from 'react'\nimport './PaydinCheckbox.css'\nimport { Checkbox } from '@mui/material'\n\n/**\n * Represents a custom checkbox with a label.\n * @param {boolean} checked - The checkbox checked state\n * @param {function} setChecked - A function for setting the checkbox checked state\n * @param {string} label - The label of the checkbox\n * @param {string} labelClassName - A class name for the checkbox's label\n */\nexport default function PaydinCheckbox({\n checked,\n setChecked,\n label = '',\n labelClassName = '',\n onClick = () => { }\n}) {\n function onCheckboxClick() {\n setChecked(!checked)\n onClick()\n }\n\n return (\n <div className='paydin-checkbox-container' onClick={onCheckboxClick}>\n <Checkbox\n checked={checked}\n sx={{\n padding: '0px'\n }}\n />\n {label && <div className={`paydin-checkbox-label ${labelClassName}`}>{label}</div>}\n </div>\n )\n}","import React from 'react'\nimport './BackButton.css'\nimport { isMobile } from 'utils/deviceUtils'\nimport { MdArrowBack } from 'react-icons/md'\nimport { useHistoryContext } from 'contexts/History'\n\n/**\n * Represents the back button for the dashboard pages.\n * @param {boolean} disableHistoryPopOnClick - If true, clicking on the back button will not trigger history pop, otherwise, it will\n * @param {function} onClick - A function for perforing addition logic when clicking on the back button\n */\nexport default function BackButton({\n disableHistoryPopOnClick = false,\n onClick = () => { }\n}) {\n const history = useHistoryContext()\n\n function backButtonClick() {\n onClick()\n if (!disableHistoryPopOnClick)\n history.goBack()\n }\n\n return (\n <div className=\"back-button-container\" onClick={backButtonClick}>\n <MdArrowBack className={isMobile ? \"mobile-back-button-image\" : \"back-button-image\"} />\n </div>\n )\n}","import React from 'react'\nimport './ContentDialogTopbar.css'\nimport BackButton from 'components/BackButton/BackButton'\nimport { isMobile } from 'utils/deviceUtils'\nimport MultiLineText from 'components/MultiLineText/MultiLineText'\n\n/**\n * Represents a topbar for all the view components: LinkView, ShortView and InfluencerView.\n * @param {string} title - The title of the topbar\n * @param {string} buttonText - The text for the button of the topbar\n * @param {boolean} isButtonDisabled - Determins whether the topbar's button is disabled or not\n * @param {function} onBackButtonClick - A callback to perform when the topbar's back button is clicked\n * @param {function} onButtonClick - A callback to perform when the topbar's button is clicked\n * @param {Node} rightElement - The right element of the topbar\n */\nexport default function ContentDialogTopbar({\n title = '',\n onBackButtonClick = () => { },\n rightElement = null,\n leftElement = null,\n showLeftElement = true,\n}) {\n return (\n <div className={isMobile ? \"mobile-page-view-topbar\" : \"page-view-topbar\"} >\n <div style={{ width: isMobile ? '20%' : '33.3%' }}>\n {\n showLeftElement && (\n leftElement ?? <BackButton\n disableHistoryPopOnClick={true}\n onClick={onBackButtonClick}\n />\n )\n }\n </div>\n\n <div style={{ width: isMobile ? '60%' : '33.3%' }}>\n <MultiLineText\n text={title}\n className='page-view-title'\n lines={1}\n oneWord={true}\n />\n </div>\n\n <div style={{ width: isMobile ? '20%' : '33.3%' }}>\n { rightElement }\n </div>\n </div>\n )\n}","import { useEffect, useMemo, useState } from \"react\"\n\nexport default function useOnScreen(elementRef) {\n\n\tconst [isIntersecting, setIntersecting] = useState(false)\n\n\tconst observer = useMemo(() => new IntersectionObserver(\n\t\t([entry]) => setIntersecting(entry.isIntersecting)\n\t), [elementRef])\n\n\n\tuseEffect(() => {\n\t\tif (elementRef?.current) {\n\t\t\tobserver.observe(elementRef.current)\n\t\t}\n\t\treturn () => observer.disconnect()\n\t})\n\n\treturn isIntersecting\n}","import React, { useEffect, useMemo, useRef, useState } from 'react'\nimport './MultiSelectDialog.css'\nimport { isMobile } from 'utils/deviceUtils'\nimport { useTranslation } from 'react-i18next'\nimport { useHistoryContext } from 'contexts/History'\nimport { ADD_PRODUCTS_DIALOG_PRODUCTS_IN_COLUMNS, EDIT_LINK_PAGE_PRODUCT_SEARCH_REQUEST_SEND_DELAY_MILLISECONDS, LINK_PAGES_MAX_WIDTH, MAX_ITEMS_SEARCH_RESULT_NUMBER, MULTI_SELECT_DIALOG_DESKTOP_HEIGHT_PX, MULTI_SELECT_DIALOG_DONE_BUTTON_STRIP_HEIGHT_PX, MULTI_SELECT_DIALOG_SELECTION_LIMIT_REACHED_ALERT_HIDE_DELAY_MILLISECONDS } from 'constants/general.constants'\nimport PaydinCheckbox from 'components/PaydinCheckbox/PaydinCheckbox'\nimport { CiSearch } from 'react-icons/ci'\nimport { IoCloseOutline } from 'react-icons/io5'\nimport Loader from 'components/Loader/Loader'\nimport PaydinDialog from 'dialogs/PaydinDialog/PaydinDialog'\nimport ContentDialogTopbar from 'components/ContentDialogTopbar/ContentDialogTopbar'\nimport LoaderButton from 'components/LoaderButton/LoaderButton'\nimport { AiOutlineClose } from 'react-icons/ai'\nimport useOnScreen from 'hooks/useOnScreen'\nimport { cloneObject } from 'utils/dataUtils'\n\n/**\n * Represents a dialog for multi-selecting elements.\n * @param {boolean} isDialogOpen - Determins whether this dialog is shown or not\n * @param {function} handleDialogClose - A function to perform whenever this dialog is closed\n * @param {array} selectedItems - The list of selected items\n * @param {function} setSelectedItems - A function for setting the list of selected items\n * @param {string} title - The title of this dialog\n * @param {string} itemName - The name of the displayed item type\n * @param {component} viewItemComponent - The component of the rendered item\n * @param {number} selectMaxLimit - The upper bound of items the user can select from the list. If equals to 0, then no limit applied\n * @param {number} selectMinLimit - The lower bound of items the user can select from the list. If equals to 0, then no limit applied\n * @param {component} filterComponent - The component of the rendered filters for this dialog's items list. If equals non provided, then no filters are included\n * @param {number} columnsCount - The number of columns to display\n * @param {function} dataGenerator - This function generates the data to display. \n * It accepts 3 parameters: q - The search query text, count - The max number of the elements retrieved per request, skip - The starting point of the elements retrieval.\n * @param {function} dataExtractor - This function extracts and parses data for a single raw element\n * @param {boolean} filtersChanged - A boolean flag that triggers a filter change\n */\nexport default function MultiSelectDialog({\n isDialogOpen = false,\n handleDialogClose = () => { },\n selectedItems = [],\n setSelectedItems = () => { },\n title = '',\n leftButtonText = 'Cancel',\n rightButtonText = 'Done',\n itemName = '',\n viewItemComponent: ViewItemComponent,\n selectMaxLimit = 0,\n selectMinLimit = 0,\n filterComponent: FilterComponent = null,\n columnsCount = 7,\n dataGenerator = (q, count, skip) => { },\n dataExtractor = (rawItem) => { },\n filtersChanged = false,\n searchResultFilter = items => items,\n onFinishProductsSelection = () => { },\n onCancel = () => { },\n hasContentTopbar = true,\n resetSelectedOnFinish = false,\n allowColorOptionSelect = false,\n resetCacheOnClose = false,\n}) {\n const { t } = useTranslation()\n const history = useHistoryContext()\n\n const [tempSelectedItems, setTempSelectedItems] = useState(selectedItems)\n const [itemsResult, setItemsResult] = useState([])\n const [cachedItemsResult, setCachedItemsResult] = useState([])\n const [searchQuery, setSearchQuery] = useState('')\n const [hasSearchFailed, setHasSearchFailed] = useState(false)\n const [hasMoreItems, setHasMoreItems] = useState(true)\n const [allItemsSelected, setAllItemsSelected] = useState(false)\n const [isSearchingItems, setIsSearchingItems] = useState(false)\n const [isSearchingMoreItems, setIsSearchingMoreItems] = useState(false)\n const [returnedRequestParams, setReturnedRequestParams] = useState({\n id: 0,\n skip: 0,\n items: []\n })\n const [currentRequestId, setCurrentRequestId] = useState(0)\n const [shouldShowNoItems, setShouldShowNoItems] = useState(false)\n const [isLimitReachedAlertShown, setIsLimitReachedAlertShown] = useState(false)\n\n const searchBoxInputRef = useRef(null)\n const itemsListRef = useRef(null)\n const productsDetailsRef = useRef(null)\n const productsTopBarRef = useRef(null)\n const filtersRef = useRef(null)\n const productsStatusBarRef = useRef(null)\n const typingTimeoutRef = useRef(null)\n const isSelectionChangedRef = useRef(false)\n\n const paginationTriggeringElementRef = useRef(null)\n const isOnScreen = useOnScreen(paginationTriggeringElementRef)\n\n const itemsHeight = useMemo(() => calculateItemsContainerHeight(), [itemsResult])\n const itemsListColumnWidth = `calc((${isMobile ? '100vw' : `${LINK_PAGES_MAX_WIDTH}px`} - 20px - ${isMobile ? 0 : 15}px - ${10 * (columnsCount - 1)}px) / ${columnsCount})`\n\n useEffect(() => {\n if (filtersChanged) {\n setHasSearchFailed(false)\n setItemsResult([])\n setHasMoreItems(true)\n setShouldShowNoItems(false)\n setIsSearchingItems(true)\n itemSearch(searchQuery, 0, () => {\n resetItemsListScroll(30)\n })\n }\n }, [filtersChanged])\n\n useEffect(() => {\n setTempSelectedItems(selectedItems.map(item => cloneObject(item)))\n setItemsResult(calculateItemsArrayUnion(selectedItems, cachedItemsResult))\n }, [selectedItems, cachedItemsResult])\n\n useEffect(() => {\n if (currentRequestId !== 0 && currentRequestId === returnedRequestParams.id) {\n if (returnedRequestParams.skip > 0) {\n setItemsResult(prev => ([\n ...prev,\n ...returnedRequestParams.items\n ]))\n } else {\n if (cachedItemsResult.length === 0) {\n setCachedItemsResult(returnedRequestParams.items)\n } else {\n setItemsResult(returnedRequestParams.items)\n }\n }\n setHasMoreItems(returnedRequestParams.items.length === MAX_ITEMS_SEARCH_RESULT_NUMBER)\n setShouldShowNoItems(returnedRequestParams.items.length === 0)\n }\n if (currentRequestId === returnedRequestParams.id) {\n setIsSearchingItems(false)\n setIsSearchingMoreItems(false)\n }\n }, [returnedRequestParams])\n\n useEffect(() => {\n if (isDialogOpen) {\n setHasSearchFailed(false)\n setItemsResult([])\n setHasMoreItems(true)\n clearTypingTimeout(typingTimeoutRef.current)\n setShouldShowNoItems(false)\n if (searchQuery) {\n setIsSearchingItems(true)\n typingTimeoutRef.current = setTimeout(() => {\n itemSearch(searchQuery, 0, () => {\n resetItemsListScroll(30)\n })\n }, EDIT_LINK_PAGE_PRODUCT_SEARCH_REQUEST_SEND_DELAY_MILLISECONDS)\n } else {\n if (cachedItemsResult.length === 0) {\n setIsSearchingItems(true)\n itemSearch('', 0, items => {\n setHasMoreItems(items.length === MAX_ITEMS_SEARCH_RESULT_NUMBER)\n resetItemsListScroll(30)\n })\n } else {\n setShouldShowNoItems(true)\n resetItemsListScroll()\n setItemsResult(calculateItemsArrayUnion(selectedItems, cachedItemsResult))\n setIsSearchingItems(false)\n setHasMoreItems(cachedItemsResult.length === MAX_ITEMS_SEARCH_RESULT_NUMBER)\n }\n }\n } else {\n setSearchQuery(\"\")\n if (resetCacheOnClose) {\n setCachedItemsResult([])\n }\n }\n\n return () => {\n clearTypingTimeout(typingTimeoutRef.current)\n }\n }, [isDialogOpen, searchQuery])\n\n\n useEffect(() => {\n if (isOnScreen) {\n handleScroll()\n }\n }, [isOnScreen])\n\n function setTemporaryItems(items) {\n isSelectionChangedRef.current = true\n setTempSelectedItems(items)\n }\n\n function calculateItemsContainerHeight() {\n const itemsListHeightPx = `${MULTI_SELECT_DIALOG_DESKTOP_HEIGHT_PX - 30 - productsTopBarRef?.current?.clientHeight - (filtersRef?.current ? filtersRef?.current?.clientHeight : 0) - productsStatusBarRef?.current?.clientHeight - (!isMobile ? MULTI_SELECT_DIALOG_DONE_BUTTON_STRIP_HEIGHT_PX : 0)}px`\n if (isMobile) {\n return `calc(100dvh - 30px - ${productsTopBarRef?.current?.clientHeight + (filtersRef?.current ? filtersRef?.current?.clientHeight : 0) + productsStatusBarRef?.current?.clientHeight}px)`\n }\n\n return itemsListHeightPx\n }\n\n function clearTypingTimeout(timeout) {\n timeout && clearTimeout(timeout)\n }\n\n function calculateItemsArrayUnion(array1, array2) {\n const unionArray = []\n\n for (let i = 0; i < array1.length; i++) {\n const currentProduct = array1[i]\n if (unionArray.filter(item => item?.id === currentProduct?.id).length === 0) {\n unionArray.push(array1[i])\n }\n }\n\n for (let i = 0; i < array2.length; i++) {\n const currentProduct = array2[i]\n if (unionArray.filter(item => item?.id === currentProduct?.id).length === 0) {\n unionArray.push(array2[i])\n }\n }\n\n return unionArray\n }\n\n function clearSearchQuery() {\n setSearchQuery('')\n }\n\n function handleSearchChange(e) {\n setSearchQuery(e.target.value)\n }\n\n function handleDialogCloseInnerFunction() {\n if (handleDialogClose)\n handleDialogClose()\n if (resetSelectedOnFinish) {\n setTimeout(() => {\n setTempSelectedItems([])\n setItemsResult([])\n }, 250)\n }\n }\n\n function closeDialog() {\n if (handleDialogClose)\n handleDialogClose()\n if (resetSelectedOnFinish) {\n setTimeout(() => {\n setTempSelectedItems([])\n setItemsResult([])\n }, 250)\n }\n history.goBack()\n }\n\n function onItemsSelectionFinish() {\n setSelectedItems(tempSelectedItems)\n closeDialog()\n onFinishProductsSelection(tempSelectedItems)\n }\n\n function onCancelClick() {\n isSelectionChangedRef.current = false\n onCancel()\n closeDialog()\n if (!resetSelectedOnFinish) {\n setTimeout(() => {\n setTempSelectedItems(selectedItems.map(item => cloneObject(item)))\n }, 250)\n }\n }\n\n function handleScroll() {\n searchBoxInputRef?.current?.blur()\n if (!isSearchingMoreItems && hasMoreItems) {\n setIsSearchingMoreItems(true)\n itemSearch(searchQuery, itemsResult.length)\n }\n }\n\n function resetItemsListScroll(delay = null) {\n if (delay !== null) {\n setTimeout(() => {\n if (itemsListRef?.current) {\n itemsListRef?.current?.scrollTo(0, 0)\n }\n }, delay)\n } else {\n if (itemsListRef?.current) {\n itemsListRef?.current?.scrollTo(0, 0)\n }\n }\n }\n\n function selectAllItems() {\n if (allItemsSelected) {\n setTemporaryItems([])\n } else {\n setTemporaryItems(itemsResult)\n }\n }\n\n function itemSearch(query, skip, onResultsReceived = () => { }) {\n let id = currentRequestId + 1\n setCurrentRequestId(prev => prev + 1)\n dataGenerator(query, MAX_ITEMS_SEARCH_RESULT_NUMBER, skip)\n .then(items => {\n const result = searchResultFilter(items.map(item => dataExtractor(item)))\n setReturnedRequestParams({\n id,\n items: result,\n skip\n })\n onResultsReceived(items)\n }).catch(error => {\n console.log(error)\n setIsSearchingItems(false)\n setHasSearchFailed(true)\n })\n }\n\n function isItemSelected(item) {\n const selectedItem = tempSelectedItems.find(currentItem => currentItem?.id === item?.id)\n if (selectedItem) return true\n return false\n }\n\n function onItemClick(item, forceAdd = false) {\n if (!forceAdd && isItemSelected(item)) {\n removeItem(item)\n } else {\n addItem(item)\n }\n }\n\n function addItem(item) {\n const currentIndex = tempSelectedItems.findIndex(currentItem => currentItem.id === item.id)\n if (currentIndex > -1) {\n // Update the item\n setTemporaryItems(tempSelectedItems.map(currentItem => {\n if (currentItem.id === item.id)\n return item\n return currentItem\n }))\n } else if (hasSelectionMaxLimit() && tempSelectedItems.length + 1 > selectMaxLimit) {\n // Too many items\n if (selectMaxLimit === 1) {\n setTemporaryItems([item])\n } else {\n setIsLimitReachedAlertShown(true)\n setTimeout(() => {\n setIsLimitReachedAlertShown(false)\n }, MULTI_SELECT_DIALOG_SELECTION_LIMIT_REACHED_ALERT_HIDE_DELAY_MILLISECONDS)\n }\n } else {\n // Add the item\n setTemporaryItems([...tempSelectedItems, item])\n }\n }\n\n function removeItem(itemToRemove) {\n setTemporaryItems(tempSelectedItems.filter(item => item.id !== itemToRemove.id))\n }\n\n function renderItems() {\n return <div className={`${isMobile ? 'mobile-multi-select-dialog-items' : 'multi-select-dialog-items'}`} style={{ height: itemsHeight }}>\n {\n (isSearchingItems || hasSearchFailed) && <div className={isMobile ? 'mobile-multi-select-dialog-loader-cell' : 'multi-select-dialog-loader-cell'} style={{ backgroundColor: itemsResult.length > 0 ? '#ffffffaa' : '#ffffff', height: itemsHeight }}>\n {hasSearchFailed ? <div className='multi-select-dialog-no-results-found-container'>\n <div className=\"multi-select-dialog-no-results-found-content\">\n <div className=\"multi-select-dialog-no-results-found-text\">{t('ADD_PRODUCTS_DIALOG_SEARCH_FAILED_TEXT')}</div>\n </div>\n </div> : <Loader styles={{ height: '20px', width: '20px', position: 'absolute', top: '20px', zIndex: 60 }} />}\n </div>\n }\n {\n isLimitReachedAlertShown && <div className='multi-select-dialog-limit-reached-alert' style={{ height: itemsHeight }}>\n <div className=\"multi-select-dialog-limit-reached-alert-message\">{t('MULTI_SELECT_DIALOG_SELECTION_LIMIT_REACHED_ALERT_MESSAGE', { limit: selectMaxLimit, itemName })}</div>\n </div>\n }\n {\n cachedItemsResult.length === 0 ? <div className='multi-select-dialog-no-results-found-container' style={{ height: itemsHeight }}>\n <div className=\"multi-select-dialog-no-results-found-content\">\n <div className=\"multi-select-dialog-no-results-found-text\">{t('ADD_PRODUCTS_DIALOG_SYNCING_PRODUCTS_TEXT')}</div>\n </div>\n </div> : (\n itemsResult.length > 0 ? <div ref={itemsListRef} className={`${isMobile ? 'mobile-multi-select-dialog-items-list' : 'multi-select-dialog-items-list'} ${hasContentTopbar ? 'has-topbar' : ''}`} style={{ height: itemsHeight }}>\n <div className={isMobile ? 'mobile-multi-select-dialog-items-list-content' : 'multi-select-dialog-items-list-content'} style={{ gridTemplateColumns: `repeat(${columnsCount}, ${itemsListColumnWidth})` }}>\n {\n itemsResult.map((item, index) => {\n if (index === itemsResult.length - 1 - ADD_PRODUCTS_DIALOG_PRODUCTS_IN_COLUMNS) {\n return <ViewItemComponent\n key={item?.id}\n data={item}\n isItemSelected={isItemSelected(item)}\n onItemClick={(updatedItem) => onItemClick(updatedItem ?? item, updatedItem ? true : false)}\n elementRef={paginationTriggeringElementRef}\n allowColorOptionSelect={allowColorOptionSelect}\n />\n }\n return <ViewItemComponent\n key={item?.id}\n data={item}\n isItemSelected={isItemSelected(item)}\n onItemClick={(updatedItem) => onItemClick(updatedItem ?? item, updatedItem ? true : false)}\n allowColorOptionSelect={allowColorOptionSelect}\n />\n })\n }\n </div>\n {\n hasMoreItems && <div className={isMobile ? 'mobile-multi-select-dialog-pagination-loader-cell' : 'multi-select-dialog-pagination-loader-cell'}>\n <Loader styles={{ height: '20px', width: '20px', position: 'absolute', inset: 0, margin: 'auto', zIndex: 60 }} />\n </div>\n }\n </div> : (shouldShowNoItems && <div className='multi-select-dialog-no-results-found-container' style={{ height: itemsHeight }}>\n <div className=\"multi-select-dialog-no-results-found-content\">\n <div className=\"multi-select-dialog-no-results-found-text\">{t('ADD_PRODUCTS_DIALOG_NO_RESULTS_FOUND_TEXT')}</div>\n </div>\n </div>)\n )\n }\n </div>\n }\n\n function hasSelectionMaxLimit() {\n return selectMaxLimit > 0\n }\n\n function hasSelectionMinLimit() {\n return selectMinLimit > 0\n }\n\n function isDoneButtonDisabled() {\n return hasSelectionMinLimit() && tempSelectedItems?.length < selectMinLimit\n }\n\n return (\n <>\n {(!isMobile && isDialogOpen) && <AiOutlineClose className=\"content-dialog-close-button\" onClick={() => history.goBack()} />}\n <PaydinDialog\n isDialogOpen={isDialogOpen}\n handleDialogClose={handleDialogCloseInnerFunction}\n hasNoWidthLimit={true}\n backdropColor='rgba(0, 0, 0, 0.75)'\n borderRadiusPx={isMobile ? 0 : 5}\n paddingPx={0}\n width={LINK_PAGES_MAX_WIDTH}\n minHeight={isMobile ? '100dvh' : '84dvh'}\n height={isMobile ? '100dvh' : '84dvh'}\n margin='0px'\n dialogLayout={<>\n <div className={isMobile ? \"mobile-multi-select-dialog-content\" : \"multi-select-dialog-content\"}>\n <ContentDialogTopbar\n title={title}\n leftElement={<>\n <LoaderButton\n className='page-view-topbar-cancel-button'\n buttonText={leftButtonText}\n onClick={onCancelClick}\n />\n </>}\n rightElement={<>\n <LoaderButton\n className='page-view-topbar-save-button'\n buttonText={rightButtonText}\n isDisabled={isDoneButtonDisabled()}\n onClick={onItemsSelectionFinish}\n />\n </>}\n />\n <div ref={productsDetailsRef} className={`${isMobile ? \"mobile-multi-select-dialog-details\" : \"multi-select-dialog-details\"} ${hasContentTopbar ? 'has-topbar' : ''}`}>\n <div className={isMobile ? \"mobile-multi-select-dialog-filter-container\" : \"multi-select-dialog-filter-container\"}>\n {FilterComponent && <FilterComponent filterRef={filtersRef} />}\n <div className=\"multi-select-dialog-topbar-search-box\" style={{ width: isMobile ? '100%' : '300px' }}>\n <input ref={searchBoxInputRef} className='multi-select-dialog-topbar-search-box-input' value={searchQuery} type='text' onChange={handleSearchChange} placeholder={t('ADD_PRODUCTS_DIALOG_TOPBAR_SEARCH_BOX_PLACEHOLDER')} />\n {\n searchQuery.length === 0 ?\n <CiSearch className='add-products-dialog-topbar-search-box-image' /> :\n <IoCloseOutline className='add-products-dialog-topbar-search-box-image close' onClick={clearSearchQuery} />\n }\n </div>\n </div>\n <div ref={productsStatusBarRef} className=\"multi-select-dialog-status-bar\">\n {\n !hasSelectionMaxLimit() && <PaydinCheckbox\n checked={allItemsSelected}\n setChecked={setAllItemsSelected}\n onClick={selectAllItems}\n />\n }\n <div className=\"multi-select-dialog-topbar-selected-items-count\">{\n hasSelectionMaxLimit() ? (\n tempSelectedItems.length > 0 ? t('MULTI_SELECT_DIALOG_ITEMS_SELECTED_WITH_LIMIT', { selected: tempSelectedItems.length, limit: selectMaxLimit }) : t('MULTI_SELECT_DIALOG_SELECT_OUT_OF_LIMIT_INSTRUCTION', { limit: selectMaxLimit, itemName })\n ) : t('MULTI_SELECT_DIALOG_SELECTED_ITEMS_COUNT', { count: tempSelectedItems.length })\n }</div>\n </div>\n <div className={isMobile ? \"mobile-multi-select-dialog-lower-section\" : \"multi-select-dialog-lower-section\"}>\n {renderItems()}\n </div>\n </div>\n </div>\n </>}\n />\n </>\n )\n}","import React from 'react'\nimport './FloatingElement.css'\n\n/**\n * Represents an element which has a modal behind it.\n * @param {boolean} isShown - Determins whether the element is shown or not\n * @param {function} hide - A function for hiding the element\n */\nexport default function FloatingElement({\n children,\n isShown,\n hide = () => { }\n}) {\n return (<>\n {isShown && <div className='floating-element-container'>\n {children}\n <div className=\"floating-element-modal\" onClick={hide}></div>\n </div>}\n </>)\n}","import React, { useState } from 'react'\nimport './AddProductsFilters.css'\nimport { MdKeyboardArrowDown } from 'react-icons/md'\nimport FloatingElement from 'components/FloatingElement/FloatingElement'\nimport { useTranslation } from 'react-i18next'\nimport PaydinCheckbox from 'components/PaydinCheckbox/PaydinCheckbox'\n\n/**\n * Represetns the filters for the {@link AddProductsDialog}\n * @param {object} filters - The filters data object\n * @param {function} setFilters - A function for setting the filters data object\n * @param {Ref} filtersRef - A reference for this filter component container\n * @param {function} onFilterChange - A function to perform whenever a filter has changed\n */\nexport default function AddProductsFilters({\n filters,\n setFilters,\n filtersRef,\n onFilterChange = () => { }\n}) {\n const { t } = useTranslation()\n const [isFiltersMenuShown, setIsFiltersMenuShown] = useState(false)\n\n function renderFiltersMenu() {\n return <div className=\"add-products-filters-menu\">\n <div className=\"add-products-filters-menu-filters\">\n <div className=\"add-products-filters-menu-filters-section\">\n <div className=\"add-products-filters-menu-filters-section-title\">{t('ADD_PRODUCTS_DIALOG_FILTERS_MENU_STATUS_SECTION_TITLE')}</div>\n <div className=\"add-products-filters-menu-filters-list\">\n <PaydinCheckbox\n checked={filters?.active}\n setChecked={setActiveSearchFilter}\n label={t('ADD_PRODUCTS_DIALOG_FILTERS_MENU_ACTIVE_OPTION_TEXT')}\n labelClassName='add-products-filters-menu-filter-label'\n />\n <PaydinCheckbox\n checked={filters?.draft}\n setChecked={setDraftSearchFilter}\n label={t('ADD_PRODUCTS_DIALOG_FILTERS_MENU_DRAFT_OPTION_TEXT')}\n labelClassName='add-products-filters-menu-filter-label'\n />\n </div>\n </div>\n <div className=\"add-products-filters-menu-filters-section\">\n <div className=\"add-products-filters-menu-filters-section-title\">{t('ADD_PRODUCTS_DIALOG_FILTERS_MENU_INVENTORY_SECTION_TITLE')}</div>\n <div className=\"add-products-filters-menu-filters-list\">\n <PaydinCheckbox\n checked={filters?.outOfStock}\n setChecked={setOutOfStockSearchFilter}\n label={t('ADD_PRODUCTS_DIALOG_FILTERS_MENU_OUT_OF_STOCK_OPTION_TEXT')}\n labelClassName='add-products-filters-menu-filter-label'\n />\n </div>\n </div>\n <div className=\"add-products-filters-menu-filters-section\">\n <div className=\"add-products-filters-menu-filters-section-title\">{t('ADD_PRODUCTS_DIALOG_FILTERS_MENU_OPTIONS_SECTION_TITLE')}</div>\n <div className=\"add-products-filters-menu-filters-list\">\n <PaydinCheckbox\n checked={filters?.searchInTags}\n setChecked={setSearchInTagsSearchFilter}\n label={t('ADD_PRODUCTS_DIALOG_FILTERS_MENU_SEARCH_IN_TAGS_OPTION_TEXT')}\n labelClassName='add-products-filters-menu-filter-label'\n />\n </div>\n </div>\n </div>\n <div className=\"add-products-filters-menu-clear-button\" onClick={resetFilters}>{t('ADD_PRODUCTS_DIALOG_FILTERS_MENU_CLEAR_BUTTON_TEXT')}</div>\n </div>\n }\n\n function resetFilters() {\n setFilters({\n active: false,\n draft: false,\n outOfStock: false,\n searchInTags: false\n })\n }\n \n function openFiltersMenu() {\n setIsFiltersMenuShown(true)\n }\n \n function closeFiltersMenu() {\n setIsFiltersMenuShown(false)\n }\n \n function setActiveSearchFilter(value) {\n setFilters(prev => ({\n ...prev,\n active: value\n }))\n onFilterChange()\n }\n \n function setDraftSearchFilter(value) {\n setFilters(prev => ({\n ...prev,\n draft: value\n }))\n onFilterChange()\n }\n \n function setOutOfStockSearchFilter(value) {\n setFilters(prev => ({\n ...prev,\n outOfStock: value\n }))\n onFilterChange()\n }\n \n function setSearchInTagsSearchFilter(value) {\n setFilters(prev => ({\n ...prev,\n searchInTags: value\n }))\n onFilterChange()\n }\n\n function noFilterApplied() {\n let hasNoFilterApplied = true\n for (const filter in filters) {\n if (filters[filter]) {\n hasNoFilterApplied = false\n }\n }\n\n return hasNoFilterApplied\n }\n\n function getFilterStatus() {\n if (noFilterApplied()) {\n return t('ADD_PRODUCTS_DIALOG_FILTERS_STATUS_NO_FILTERS')\n }\n\n let filterStatus = ''\n\n if (filters.active) {\n filterStatus = t('ADD_PRODUCTS_DIALOG_FILTERS_STATUS_FILTER_ACTIVE')\n }\n if (filters.draft) {\n filterStatus = (filters.active ? t('ADD_PRODUCTS_DIALOG_FILTERS_STATUS_FILTER_ALL') : t('ADD_PRODUCTS_DIALOG_FILTERS_STATUS_FILTER_DRAFT'))\n }\n if (filters.outOfStock) {\n filterStatus += `${(filters.active || filters.draft) ? ', ' : ''}${t('ADD_PRODUCTS_DIALOG_FILTERS_STATUS_FILTER_OUT_OF_STOCK')}`\n }\n if (filters.searchInTags) {\n filterStatus += `${(filters.active || filters.draft || filters.outOfStock) ? ', ' : ''}${t('ADD_PRODUCTS_DIALOG_FILTERS_STATUS_FILTER_SEARCH_IN_TAGS')}`\n }\n\n return t('ADD_PRODUCTS_DIALOG_FILTERS_STATUS_ACTIVE_FILTERS_PREFIX') + filterStatus\n }\n \n return (\n <div ref={filtersRef} className=\"add-products-filters-status-container\">\n <div className=\"add-products-filters-status\" onClick={openFiltersMenu}>\n <div className=\"add-products-filters-status-text\">{getFilterStatus()}</div>\n <MdKeyboardArrowDown className='add-products-filters-status-image' />\n </div>\n <FloatingElement\n isShown={isFiltersMenuShown}\n hide={closeFiltersMenu}\n >\n {renderFiltersMenu()}\n </FloatingElement>\n </div>\n )\n}","import React, { useEffect, useState } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport './AddProductsDialog.css'\nimport { ProductSearchAPI } from 'api/products/products'\nimport { isMobile } from 'utils/deviceUtils'\nimport AddProductsDialogProduct from 'components/AddProductsDialogProduct/AddProductsDialogProduct'\nimport MultiSelectDialog from 'dialogs/MultiSelectDialog/MultiSelectDialog'\nimport { extractProductData } from 'utils/dataUtils'\nimport AddProductsFilters from 'components/AddProductsFilters/AddProductsFilters'\nimport { ADD_PRODUCTS_DIALOG_DESKTOP_COLUMN_COUNT, ADD_PRODUCTS_DIALOG_MOBILE_COLUMN_COUNT, ADD_PRODUCTS_DIALOG_RESET_FILTER_TRIGGER_DELAY_MILLISECONDS } from 'constants/general.constants'\nimport { useGeneralDataContext } from 'contexts/User'\n\n/**\n * Represents the dialog for adding products to the link.\n * @param {boolean} isDialogOpen - Determins whether this dialog is open or not\n * @param {function} handleDialogClose - A function for closing this dialog\n * @param {array} selectedProducts - The list of products the user selected\n * @param {function} setSelectedProducts - A function that sets the list of selected products\n * @param {number} selectMaxLimit - The upper bound of items the user can select from the list. If equals to 0, then no limit applied\n * @param {number} selectMinLimit - The lower bound of items the user can select from the list. If equals to 0, then no limit applied\n * @param {function} searchResultFilter - A function for filtering the search results\n */\nexport default function AddProductsDialog({\n isDialogOpen,\n handleDialogClose,\n selectedProducts,\n setSelectedProducts,\n selectMaxLimit = 0,\n selectMinLimit = 0,\n searchResultFilter = items => items,\n onFinishProductsSelection = () => { },\n onCancel = () => { },\n leftButtonText = 'Cancel',\n rightButtonText = 'Done',\n hasContentTopbar = true,\n resetSelectedOnFinish = false,\n allowColorOptionSelect = false,\n resetCacheOnClose = false,\n fetchProductsInfo = null,\n}) {\n const { t } = useTranslation()\n const {\n fetchProductsOptionsMap,\n } = useGeneralDataContext()\n\n const [didFiltersChange, setDidFiltersChange] = useState(false)\n const [searchFilters, setSearchFilters] = useState({\n active: true,\n draft: false,\n outOfStock: true,\n searchInTags: false\n })\n const[nextKey, setNextKey] = useState(null)\n\n useEffect(() => {\n // In case not fetched before, fetch it before loading products\n if (allowColorOptionSelect) {\n fetchProductsOptionsMap()\n }\n }, [allowColorOptionSelect])\n\n function triggerFilterChange() {\n setDidFiltersChange(true)\n setTimeout(() => { // This is used to reset the filter triggering prop for reuse\n setDidFiltersChange(false)\n }, ADD_PRODUCTS_DIALOG_RESET_FILTER_TRIGGER_DELAY_MILLISECONDS)\n }\n\n const filterComponent = ({ filterRef }) => {\n return <AddProductsFilters\n filters={searchFilters}\n setFilters={setSearchFilters}\n filtersRef={filterRef}\n onFilterChange={triggerFilterChange}\n />\n }\n\n function fetchProducts(q, count, skip) {\n return new Promise((resolve, reject) => {\n const options = {\n method: 'GET'\n }\n ProductSearchAPI(q, count, searchFilters, skip > 0 ? nextKey : null, fetchProductsInfo)\n .then(data => {\n setNextKey(data.next)\n resolve(data.products)\n })\n .catch(error => {\n reject(error)\n })\n });\n return \n }\n \n return (\n <MultiSelectDialog\n selectedItems={selectedProducts}\n setSelectedItems={setSelectedProducts}\n isDialogOpen={isDialogOpen}\n handleDialogClose={handleDialogClose}\n title={t('ADD_PRODUCTS_DIALOG_TITLE')}\n itemName={t('PRODUCT_ITEM_NAME', { count: selectMaxLimit})}\n viewItemComponent={AddProductsDialogProduct}\n filterComponent={filterComponent}\n columnsCount={isMobile ? ADD_PRODUCTS_DIALOG_MOBILE_COLUMN_COUNT : ADD_PRODUCTS_DIALOG_DESKTOP_COLUMN_COUNT}\n dataGenerator={fetchProducts}\n dataExtractor={extractProductData}\n filtersChanged={didFiltersChange}\n selectMaxLimit={selectMaxLimit}\n selectMinLimit={selectMinLimit}\n searchResultFilter={searchResultFilter}\n onFinishProductsSelection={onFinishProductsSelection}\n onCancel={onCancel}\n rightButtonText={rightButtonText}\n leftButtonText={leftButtonText}\n hasContentTopbar={hasContentTopbar}\n resetSelectedOnFinish={resetSelectedOnFinish}\n allowColorOptionSelect={allowColorOptionSelect}\n resetCacheOnClose={resetCacheOnClose}\n />\n )\n}","import React, { useState } from 'react'\nimport './PaydinSlider.css'\nimport { Slider } from '@mui/material'\n\n/**\n * Represents a custom slider based on the material UI Slider.\n * see docs: https://mui.com/material-ui/react-slider/\n * @param {number} initialValue - The initial value of the slider \n * @param {function} onValueChange - The initial value of the slider \n */\nexport default function PaydinSlider({\n initialValue,\n onValueChange,\n minValue=1,\n maxValue=3\n}) {\n const [zoom, setZoom] = useState(initialValue ? initialValue : 1)\n\n function onZoom(zoom) {\n onValueChange(zoom)\n setZoom(zoom)\n }\n\n return (\n <div className='paydin-slider-container'>\n <Slider \n value={zoom} \n onChange={e => onZoom(e.target.value)} \n min={minValue} \n max={maxValue}\n step={0.02}\n />\n </div>\n )\n}","\nfunction createImage(url) {\n return new Promise((resolve, reject) => {\n const image = new Image();\n image.addEventListener(\"load\", () => resolve(image));\n image.addEventListener(\"error\", (error) => reject(error));\n image.setAttribute(\"crossOrigin\", \"anonymous\"); // needed to avoid cross-origin issues on CodeSandbox\n image.src = url;\n });\n}\n\nfunction getRadianAngle(degreeValue) {\n return (degreeValue * Math.PI) / 180;\n}\n\n/**\n * This function was adapted from the one in the ReadMe of https://github.com/DominicTobias/react-image-crop\n * @param {File} image - Image File url\n * @param {Object} pixelCrop - pixelCrop Object provided by react-easy-crop\n * @param {number} rotation - optional rotation parameter\n */\nexport default async function getCroppedImage(imageSrc, pixelCrop, rotation = 0) {\n const image = await createImage(imageSrc)\n const canvas = document.createElement(\"canvas\")\n const ctx = canvas.getContext(\"2d\")\n\n const maxSize = Math.max(image.width, image.height)\n const safeArea = 2 * ((maxSize / 2) * Math.sqrt(2))\n\n // set each dimensions to double largest dimension to allow for a safe area for the\n // image to rotate in without being clipped by canvas context\n canvas.width = safeArea\n canvas.height = safeArea\n\n // translate canvas context to a central location on image to allow rotating around the center.\n ctx.translate(safeArea / 2, safeArea / 2)\n ctx.rotate(getRadianAngle(rotation))\n ctx.translate(-safeArea / 2, -safeArea / 2)\n\n // draw rotated image and store data.\n ctx.drawImage(\n image,\n safeArea / 2 - image.width * 0.5,\n safeArea / 2 - image.height * 0.5\n )\n const data = ctx.getImageData(0, 0, safeArea, safeArea)\n\n // set canvas width to final desired crop size - this will clear existing context\n canvas.width = pixelCrop.width;\n canvas.height = pixelCrop.height;\n\n // paste generated rotate image with correct offsets for x,y crop values.\n ctx.putImageData(\n data,\n Math.round(0 - safeArea / 2 + image.width * 0.5 - pixelCrop.x),\n Math.round(0 - safeArea / 2 + image.height * 0.5 - pixelCrop.y)\n )\n\n // As Base64 string\n // return canvas.toDataURL('image/jpeg');\n\n // As a blob\n return new Promise((resolve) => {\n canvas.toBlob((file) => {\n resolve(URL.createObjectURL(file))\n }, \"image/png\")\n })\n}\n\n/**\n * Creates an image from the given url and calculates the image's ratio.\n * @param {string} imageUrl - The given image url\n * @returns the aspect ratio of the given image\n */\nexport function getImageRatio(imageUrl) {\n return new Promise((resolve, reject) => {\n const img = new Image()\n img.src = imageUrl\n \n img.onload = () => {\n resolve({ width: img.width, height: img.height })\n }\n\n img.onerror = (error) => {\n console.log(error)\n reject(error)\n }\n })\n}\n\nexport async function resizeImage(file, maxWidth, maxHeight) {\n let img = document.createElement(\"img\");\n img.src = await new Promise(resolve => {\n let reader = new FileReader();\n reader.onload = (e) => resolve(e.target.result);\n reader.readAsDataURL(file)\n });\n await new Promise(resolve => img.onload = resolve)\n let canvas = document.createElement(\"canvas\")\n let ctx = canvas.getContext(\"2d\")\n ctx.drawImage(img, 0, 0)\n let width = img.naturalWidth\n let height = img.naturalHeight\n if (width > height) {\n if (width > maxWidth) {\n height *= maxWidth / width;\n width = maxWidth;\n }\n } else {\n if (height > maxHeight) {\n width *= maxHeight / height;\n height = maxHeight;\n }\n }\n canvas.width = width\n canvas.height = height\n ctx = canvas.getContext(\"2d\")\n ctx.drawImage(img, 0, 0, width, height)\n let result = await new Promise(resolve => { canvas.toBlob(resolve, 'image/png', 0.95); })\n return result\n}","import React, { useEffect, useRef, useState } from 'react'\nimport './PaydinImageCropper.css'\nimport Cropper from 'react-easy-crop'\nimport { BiExpandAlt } from 'react-icons/bi'\nimport { SlMagnifierAdd } from 'react-icons/sl'\nimport PaydinMenu from 'components/PaydinMenu/PaydinMenu'\nimport {\n DASHBOARD_TOPBAR_USER_MENU_BORDER_RADIUS_PX,\n PAYDIN_IMAGE_CROPPER_ASPECT_RATIOS_MENU_WIDTH_PX,\n PAYDIN_IMAGE_CROPPER_LOGO_ASPECT_RATIO,\n PAYDIN_IMAGE_CROPPER_OBJECT_FITS,\n PAYDIN_MENU_OPENING_DIRECTIONS\n} from 'constants/general.constants'\nimport PaydinSlider from 'components/PaydinSlider/PaydinSlider'\nimport { getImageRatio } from 'services/imageUtils'\n\n/**\n * Represents an image cropper that allows image manipulation.\n * @param {string} image - The image to crop \n * @param {object} crop - The crop coordinates of the image \n * @param {fucntion} setCrop - A function for setting the image crop \n * @param {number} zoom - The zoom value of the image\n * @param {function} setZoom - A function for setting the image zoom \n * @param {number} aspectRatio - The aspect ratio of the image \n * @param {function} setAspectRatio - A function for setting the aspect ratio of the image \n * @param {function} setCroppedAreaPixels - A function for setting the cropped area of the image, in pixels\n * @param {array} aspectRatiosArray - The aspect ratio options list \n * @param {boolean} isLogoCropper - Determins whether the cropper is used for logo image or for general image\n */\nexport default function PaydinImageCropper({\n image,\n crop,\n setCrop,\n zoom,\n setZoom,\n aspectRatio,\n setAspectRatio,\n setCroppedAreaPixels,\n aspectRatiosArray,\n isLogoCropper = false,\n isInfluencerImageCropper = false,\n isRoundCrop = false,\n}) {\n const [userMenuState, setUserMenuState] = useState({\n isOpen: false,\n anchorElement: null,\n onClose: () => { }\n })\n const [objectFit, setObjectFit] = useState(null)\n const [aspectRatios, setAspectRatios] = useState([])\n const [selectedAspectRatio, setSelectedAspectRatio] = useState({\n text: '',\n ratio: 1\n })\n\n const objectFitRef = useRef(null) // used to store the ideal object fit of the cropper\n\n useEffect(() => {\n async function addOriginalAspectRatio() {\n const imageDimens = await getImageRatio(image)\n const originalAspectRatio = imageDimens ? imageDimens.width / imageDimens.height : 1\n objectFitRef.current = isLogoCropper ? PAYDIN_IMAGE_CROPPER_OBJECT_FITS.HORIZONTAL_COVER : (imageDimens.width >= imageDimens.height ? PAYDIN_IMAGE_CROPPER_OBJECT_FITS.VERTICAL_COVER : PAYDIN_IMAGE_CROPPER_OBJECT_FITS.HORIZONTAL_COVER)\n\n if (isLogoCropper) {\n const logoRatio = {\n text: '4 / 1',\n ratio: PAYDIN_IMAGE_CROPPER_LOGO_ASPECT_RATIO\n }\n setAspectRatios([logoRatio])\n setTimeout(() => {\n handleAspectRatioChange(logoRatio)\n }, 200)\n } else {\n const ratio = isInfluencerImageCropper ? {\n text: '1:1',\n ratio: 1\n } : {\n text: 'original',\n ratio: originalAspectRatio\n }\n setAspectRatios([\n ratio,\n ...aspectRatiosArray\n ])\n setTimeout(() => {\n handleAspectRatioChange(ratio)\n }, 200)\n }\n }\n\n addOriginalAspectRatio()\n }, [])\n\n function handleAspectRatioChange(aspectRatio) {\n setSelectedAspectRatio(aspectRatio)\n onAspectRatioChange(aspectRatio)\n closeMenu()\n }\n\n function onCropChange(crop) {\n setCrop(crop)\n }\n\n function onZoomChange(zoom) {\n setZoom(zoom)\n }\n\n function onCropComplete(croppedArea, croppedAreaPixels) {\n setCroppedAreaPixels(croppedAreaPixels)\n }\n\n function onAspectRatioChange(aspectRatio) {\n setAspectRatio(aspectRatio.ratio)\n if (aspectRatio.text === 'original')\n setObjectFit(PAYDIN_IMAGE_CROPPER_OBJECT_FITS.CONTAIN)\n else\n setObjectFit(objectFitRef?.current)\n }\n\n function openRatiosMenu(e) {\n setUserMenuState({\n isOpen: true,\n anchorElement: e.currentTarget,\n width: PAYDIN_IMAGE_CROPPER_ASPECT_RATIOS_MENU_WIDTH_PX,\n borderRadius: DASHBOARD_TOPBAR_USER_MENU_BORDER_RADIUS_PX,\n onClose: closeMenu,\n children: aspectRatios.map(aspectRatio => <div\n key={aspectRatio.text + aspectRatio.ratio}\n className={`paydin-image-cropper-aspect-ratio-option ${aspectRatio?.text === selectedAspectRatio?.text ? 'selected' : ''}`}\n onClick={() => handleAspectRatioChange(aspectRatio)}>{aspectRatio.text}</div>\n )\n })\n }\n\n function openZoomMenu(e) {\n setUserMenuState({\n isOpen: true,\n anchorElement: e.currentTarget,\n width: '150px',\n paddingLeft: 10,\n paddingRight: 10,\n borderRadius: 5,\n onClose: closeMenu,\n children: <PaydinSlider initialValue={zoom} onValueChange={onZoomChange} />\n })\n }\n\n function closeMenu() {\n setUserMenuState(prev => ({\n ...prev,\n isOpen: false\n }))\n }\n\n return (\n <div className='paydin-image-cropper-container' style={{ maxHeight: isInfluencerImageCropper ? '450px' : '600px', maxWidth: isInfluencerImageCropper ? '450px' : '600px' }}>\n {\n objectFit && <><Cropper\n image={image}\n zoom={zoom}\n crop={crop}\n aspect={aspectRatio}\n cropShape={isRoundCrop ? 'round' : 'rect'}\n onCropChange={onCropChange}\n onZoomChange={onZoomChange}\n onCropComplete={onCropComplete}\n objectFit={objectFit}\n minZoom={1}\n maxZoom={3}\n />\n <div className=\"paydin-image-cropper-controls\">\n {/* if isLogoCropper is true, then the aspect ratio picker button is irrelevant */}\n {(!isLogoCropper && !isInfluencerImageCropper) && <BiExpandAlt className='paydin-image-cropper-aspect-ratio-button paydin-image-cropper-button' onClick={openRatiosMenu} />}\n <SlMagnifierAdd className='paydin-image-cropper-zoom-button paydin-image-cropper-button' onClick={openZoomMenu} />\n </div>\n </>\n }\n <PaydinMenu\n widthPx={userMenuState.width}\n isOpen={userMenuState.isOpen}\n anchorElement={userMenuState.anchorElement}\n onClose={userMenuState.onClose}\n direction={PAYDIN_MENU_OPENING_DIRECTIONS.LEFT}\n borderRadius={userMenuState.borderRadius}\n paddingLeftPx={userMenuState.paddingLeft}\n paddingRightPx={userMenuState.paddingRight}\n >\n {userMenuState.children}\n </PaydinMenu>\n </div>\n )\n}","import React, { useState } from 'react'\nimport './ImageCropDialog.css'\nimport PaydinImageCropper from 'components/PaydinImageCropper/PaydinImageCropper'\nimport PaydinDialog from 'dialogs/PaydinDialog/PaydinDialog'\nimport { PAYDIN_IMAGE_CROP_DIALOG_INFLUENCER_MAX_HEIGHT, PAYDIN_IMAGE_CROP_DIALOG_INFLUENCER_WIDTH, PAYDIN_IMAGE_CROP_DIALOG_MAX_HEIGHT, PAYDIN_IMAGE_CROP_DIALOG_WIDTH } from 'constants/general.constants'\nimport { BsArrowLeft } from 'react-icons/bs'\nimport { useTranslation } from 'react-i18next'\nimport getCroppedImage from 'services/imageUtils'\nimport { useHistoryContext } from 'contexts/History'\n\n/**\n * Represents a dialog that displays the {@link PaydinImageCropper}.\n * @param {boolean} isDialogOpen - Determins whether the dialog is open or not \n * @param {function} handleDialogClose - A function for closing the dialog\n * @param {string} image - The image to crop\n * @param {object} initialCrop - The initial value of the image crop\n * @param {number} initialZoom - The initial value of the image zoom\n * @param {number} initialAspectRatio - The initial value of the image aspect ratio\n * @param {array} aspectRatiosArray - The aspect ratio options list\n * @param {boolean} isLogoCropper - Determins whether the cropper is used for logo image or for general image\n * @param {function} onCropDone - A function for applying the image cropping\n */\nexport default function ImageCropDialog({\n isDialogOpen,\n handleDialogClose,\n image,\n initialCrop = { x: 0, y: 0 },\n initialZoom = 1,\n initialAspectRatio = 1 / 1,\n aspectRatiosArray,\n isLogoCropper = false,\n isInfluencerImageCropper = false,\n isRoundCrop = false,\n onCropDone = () => { },\n rightButtonText = null\n}) {\n const { t } = useTranslation()\n const history = useHistoryContext()\n\n const [crop, setCrop] = useState(initialCrop)\n const [zoom, setZoom] = useState(initialZoom)\n const [aspectRatio, setAspectRatio] = useState(initialAspectRatio)\n const [croppedAreaPixels, setCroppedAreaPixels] = useState(null)\n\n async function applyCrop() {\n const croppedImage = await getCroppedImage(image, croppedAreaPixels)\n onCropDone(croppedImage, crop, zoom, aspectRatio)\n closeDialog()\n }\n\n function closeDialog() {\n if (handleDialogClose) {\n handleDialogClose()\n }\n \n history.goBack()\n }\n\n return (\n <PaydinDialog\n isDialogOpen={isDialogOpen}\n handleDialogClose={handleDialogClose}\n maxHeight={isInfluencerImageCropper ? PAYDIN_IMAGE_CROP_DIALOG_INFLUENCER_MAX_HEIGHT : PAYDIN_IMAGE_CROP_DIALOG_MAX_HEIGHT}\n backdropColor='rgba(255, 255, 255, 0.85)'\n borderRadiusPx={10}\n paddingPx={0}\n width={isInfluencerImageCropper ? PAYDIN_IMAGE_CROP_DIALOG_INFLUENCER_WIDTH : PAYDIN_IMAGE_CROP_DIALOG_WIDTH}\n styles={{ overflow: 'hidden' }}\n dialogLayout={<>\n <div className='image-crop-dialog-container'>\n <div className=\"image-crop-dialog-topbar\">\n <BsArrowLeft className='image-crop-dialog-topbar-back-button' onClick={closeDialog} />\n <div className=\"image-crop-dialog-topbar-title\">{t('IMAGE_CROP_DIALOG_TOPBAR_TITLE')}</div>\n <div className=\"image-crop-dialog-topbar-done-button\" onClick={applyCrop}>{rightButtonText ?? t('IMAGE_CROP_DIALOG_TOPBAR_DONE_BUTTON_TEXT')}</div>\n </div>\n <PaydinImageCropper\n image={image}\n isRoundCrop={isRoundCrop}\n crop={crop}\n setCrop={setCrop}\n zoom={zoom}\n setZoom={setZoom}\n aspectRatio={aspectRatio}\n setAspectRatio={setAspectRatio}\n setCroppedAreaPixels={setCroppedAreaPixels}\n aspectRatiosArray={aspectRatiosArray}\n isLogoCropper={isLogoCropper}\n isInfluencerImageCropper={isInfluencerImageCropper}\n />\n </div>\n </>}\n />\n )\n}","import React from 'react'\nimport './Tooltip.css'\nimport { RxQuestionMark } from 'react-icons/rx'\nimport { isMobile } from 'utils/deviceUtils'\n\n/**\n * Represents a tooltip element that displays an information bubble when hovering over it.\n * @param {string} tooltipText - The information bubble text content\n */\nexport default function Tooltip({\n image,\n tooltipText,\n width = null,\n height = null,\n swapHorizontal = false,\n displayBubble = true,\n oneLine = false\n}) {\n return (\n <>\n {\n tooltipText && <div className=\"tooltip-container\" style={{ width: width ?? '20px', height: height ?? '20px' }}>\n {image ? <div className='tooltip-content'>{image}</div> : <RxQuestionMark className=\"tooltip-image\" />}\n {\n displayBubble && <div \n className={`${isMobile ? 'mobile-tooltip-bubble' : 'tooltip-bubble'} ${swapHorizontal ? 'horizontal-swap' : ''}`}\n style={oneLine ? {width: 'auto', whiteSpace: 'nowrap'} : {}}\n >\n {tooltipText}\n </div>\n }\n </div>\n }\n </>\n )\n}","import React, { useEffect, useState } from 'react'\nimport './EditFieldSectionInput.css'\nimport { BsCheckCircle } from 'react-icons/bs'\nimport { AiOutlineEye, AiOutlineEyeInvisible } from 'react-icons/ai'\nimport { CgCloseO } from 'react-icons/cg'\nimport { useTranslation } from 'react-i18next'\nimport { isMobile } from 'utils/deviceUtils'\nimport Loader from 'components/Loader/Loader'\nimport { INPUT_VALIDATION_INDICATIONS } from 'constants/general.constants'\nimport Tooltip from 'components/Tooltip/Tooltip'\n\n/**\n * Represents a field editing section.\n * @param {*} value - The value state of the input content\n * @param {function} setValue - A function for setting the value state of the input\n * @param {string} title - The input's title\n * @param {string} placeholder - The input's placeholder\n * @param {string} tooltipText - The input's tooltip text\n * @param {boolean} isMultiline - Determins whether the input is a multiline or not\n * @param {string} prefix - A prefix for the input. If non given, the prefix is not shown\n * @param {boolean} prefixStart - Determins whether the prefix will be shown at the start of the input or at the end\n * @param {boolean} enlargedTextField - Determins whether this input will be large (50px) or normal size (40px)\n * @param {boolean} isEmbeddedPrefix - Determins whether the prefix will be inside the input frame or not\n * @param {number} maxLength - The length limit for the input's value state. \n * Shows a character count in the right top corner of the input. \n * If non given, the character count is not shown\n * @param {number} rows - The number of rows for a multiline input. Ignored when \"isMultiline\" is false\n * @param {boolean} isDisabled - Determins whether the input field is disabled or not\n * @param {boolean} hasValidation - Determins whether the input field has a validation mechanism or not\n * @param {boolean} isValidating - Determins whether the validation machanism of the input field is in progress or not\n * @param {string} validationErrorMessage - An error message to display on validation error\n * @param {string} validationStatus - The validation status for the recently completed validation process\n * @param {boolean} shouldTestValidationStatus - Determins whether this input section should test its validation status when its value is empty or not\n * @param {boolean} showValidationIcon - Determins whether the validation icon will be shown or not\n * @param {boolean} showTopSection - Determins whether the top section of the input - which contains the title and character limit - will be shown or not\n * @param {function} onInputChange - A function for handling an input change\n * @param {string} id - An id for the input\n * @param {Node} titleButton - A JSX node representing the button in the same row as the input title\n * @param {object} titleStyles - A style object for the title element\n * @param {object} inputStyles - A style object for the input element\n * @param {boolean} isOptional - Detrermins whether this input field is optional or not\n * @param {boolean} isFramed - Detrermins whether this input field has a frame or it is blended into its container\n * @param {string} inputType - The type of this input\n */\nexport default function EditFieldSectionInput({\n value,\n setValue,\n title,\n placeholder,\n tooltipText,\n isMultiline,\n prefix,\n prefixStart = true,\n inputRef,\n enlargedTextField = false,\n isEmbeddedPrefix = true,\n maxLength = 0,\n rows = 2,\n isDisabled = false,\n hasValidation = false,\n shouldResetValidation = true,\n isValidating = false,\n isPassword = false,\n validationErrorMessage = '',\n validationStatus = INPUT_VALIDATION_INDICATIONS.NO_INDICATION,\n shouldTestValidationStatus = true,\n showValidationIcon = true,\n showTopSection = true,\n onInputChange = () => { },\n id = \"\",\n titleButton = null,\n titleStyles = {},\n inputStyles = {},\n isOptional = false,\n isFramed = false,\n inputType = ''\n}) {\n const { t } = useTranslation()\n\n const [showPassword, setShowPassword] = useState(false)\n const [inputValidationStatusStyle, setInputValidationStatusStyle] = useState({\n border: inputStyles?.border ?? '1px solid hsl(231, 24%, 90%)',\n themeColor: 'transparent'\n })\n const [helperText, setHelperText] = useState(validationErrorMessage)\n\n useEffect(() => {\n if (shouldTestValidationStatus)\n setHelperText(validationErrorMessage)\n }, [validationErrorMessage])\n\n useEffect(() => {\n if (hasValidation) {\n if (value) {\n switch (validationStatus) {\n case INPUT_VALIDATION_INDICATIONS.NO_INDICATION:\n setInputValidationStatusStyle(prev => ({\n ...prev,\n border: inputStyles?.border ?? '1px solid hsl(231, 24%, 90%)',\n themeColor: 'transparent'\n }))\n setHelperText('')\n break\n\n case INPUT_VALIDATION_INDICATIONS.VALID:\n setInputValidationStatusStyle(prev => ({\n ...prev,\n border: '2px solid green',\n themeColor: 'green'\n }))\n setHelperText('')\n break\n\n default: // INPUT_VALIDATION_INDICATIONS.INVALID\n markAsError()\n }\n } else {\n if (shouldTestValidationStatus) {\n if (shouldResetValidation) {\n resetValidationMarks()\n } else {\n markAsError()\n }\n }\n }\n }\n }, [validationStatus, helperText])\n\n function markAsError() {\n setInputValidationStatusStyle(prev => ({\n ...prev,\n border: '2px solid red',\n themeColor: 'red'\n }))\n setHelperText(validationErrorMessage)\n }\n\n function resetValidationMarks() {\n setInputValidationStatusStyle(prev => ({\n ...prev,\n border: inputStyles?.border ?? '1px solid hsl(231, 24%, 90%)',\n themeColor: 'transparent'\n }))\n setHelperText('')\n }\n\n function hasMaxLength() {\n return maxLength > 0\n }\n\n function handleInputChange(e) {\n onInputChange(e.target.value)\n setValue(e.target.value)\n }\n\n function togglePasswordVisibility() {\n setShowPassword(prev => !prev)\n }\n\n function renderValidationStatusIndicator() {\n if (validationStatus !== INPUT_VALIDATION_INDICATIONS.NO_INDICATION) {\n if (validationStatus === INPUT_VALIDATION_INDICATIONS.VALID) {\n return <BsCheckCircle className='edit-field-section-input-validation-indicator' style={{ color: inputValidationStatusStyle.themeColor }} />\n } else {\n return <CgCloseO className='edit-field-section-input-validation-indicator' style={{ color: inputValidationStatusStyle.themeColor }} />\n }\n } else {\n return isEmbeddedPrefix && prefix && !prefixStart ? <></> : <div style={{ width: '20px' }}></div>\n }\n }\n\n function renderInput() {\n return <div className='edit-field-section-input-input-with-text-container'>\n <div className={`edit-field-section-input-input-container ${isDisabled ? 'disabled' : ''} ${enlargedTextField ? 'enlarged' : ''}`} style={{ ...inputStyles, border: inputValidationStatusStyle.border }}>\n <div className=\"edit-field-section-input-input-prefix-container\">\n {\n (isEmbeddedPrefix && prefix && prefixStart) && <div className={`${isMobile ? \"mobile-edit-field-section-input-prefix\" : \"edit-field-section-input-prefix\"} embedded-prefix`}>{prefix}</div>\n }\n <input ref={inputRef} id={id} autoComplete='off' className='edit-field-section-input-input' disabled={isDisabled} maxLength={hasMaxLength() ? maxLength : null} onChange={handleInputChange} value={value} type={isPassword ? (showPassword ? 'text' : 'password') : inputType} placeholder={placeholder} />\n {\n (isEmbeddedPrefix && prefix && !prefixStart) && <div className={`${isMobile ? \"mobile-edit-field-section-input-prefix\" : \"edit-field-section-input-prefix\"} embedded-prefix`}>{prefix}</div>\n }\n </div>\n {\n (showValidationIcon && hasValidation) && (<div className=\"edit-field-section-input-validation-container\">\n {\n isValidating ? <Loader styles={{ width: '20px', height: '20px', position: 'absolute', inset: 0, margin: 'auto' }} /> : (isPassword ? (\n showPassword ? <AiOutlineEye className='sign-up-page-password-field-show-hide-password-image' onClick={togglePasswordVisibility} />\n : <AiOutlineEyeInvisible className='sign-up-page-password-field-show-hide-password-image' onClick={togglePasswordVisibility} />\n ) : renderValidationStatusIndicator())\n }\n </div>)\n }\n </div>\n {helperText && <div className=\"edit-field-section-input-helper-text\">{helperText}</div>}\n </div>\n }\n\n return (\n <div className={isMobile ? 'mobile-edit-link-section-input-container' : \"edit-link-section-input-container\"}>\n {showTopSection && <div className=\"edit-link-section-input-title-container\">\n <div className=\"edit-link-section-link-data-input-title-info-container\">\n {title && <div className=\"edit-link-section-input-title\" style={titleStyles}>{title} {isOptional ? t('OPTIONAL_INPUT_TITLE_SUFFIX') : ''}</div>}\n <Tooltip\n tooltipText={tooltipText}\n />\n </div>\n {\n titleButton ?? (\n hasMaxLength() && <div className=\"edit-link-section-link-data-input-character-limit\">{t('EDIT_LINK_SECTION_LINK_DESCRIPTION_TEXTFIELD_CHARACTER_LIMIT', { length: value.length, limit: maxLength })}</div>\n )\n }\n </div>}\n {\n isMultiline ?\n <div className={`edit-field-section-input-input-container ${isDisabled ? 'disabled' : ''} ${isFramed ? '' : 'multiline'}`} style={inputStyles}>\n <textarea id={id} autoComplete='off' className={`edit-field-section-input-input ${isDisabled ? 'disabled' : ''}`} disabled={isDisabled} rows={rows} maxLength={hasMaxLength() ? maxLength : null} onChange={handleInputChange} value={value} type=\"text\" placeholder={placeholder} />\n </div> : (\n isEmbeddedPrefix ? renderInput() : (\n prefix ? <div className={isMobile ? \"mobile-edit-field-section-input-prefix-row\" : \"edit-field-section-input-prefix-row\"}>\n <div className={isMobile ? \"mobile-edit-field-section-input-prefix\" : \"edit-field-section-input-prefix\"}>{prefix}</div>\n {renderInput()}\n </div> : renderInput()\n )\n )\n }\n </div>\n )\n}","import React from 'react'\nimport './PaydinSelectRenderedValue.css'\n\n/**\n * Represents a rendered display value of a selected option of {@link PaydinSelect}.\n */\nexport default function PaydinSelectRenderedValue({\n children\n}) {\n return (\n <div className='paydin-select-rendered-value-container'>\n {children}\n </div>\n )\n}","import './PaydinSelect.css'\nimport { MenuItem, Select } from '@mui/material'\nimport { EDIT_LINK_SECTION_OPTIONS_MENU_ITEM_HEIGHT_PX, EDIT_LINK_SECTION_OPTIONS_MENU_ITEM_MAX_COUNT } from 'constants/general.constants'\nimport PaydinSelectRenderedValue from 'components/PaydinSelectRenderedValue/PaydinSelectRenderedValue'\n\n/**\n * Represents a custom drop down menu.\n * @param {string} optionState - The current selected option\n * @param {array} options - The options array for the drop down menu\n * @param {string} border - The border of this select element\n * @param {string} width - The width of this select element\n * @param {number} paddingTopPx - The top padding of the select element in pixels\n * @param {number} paddingBottomPx - The bottom padding of the select element in pixels\n * @param {number} paddingRightPx - The right padding of the select element in pixels\n * @param {number} paddingLeftPx - The left padding of the select element in pixels\n * @param {string} textColor - The text color of the select element\n * @param {boolean} hideArrow - Determins whether the default arrow of the select element is hidden or not\n * @param {function} onOptionClick - A callback to perform when an option from the drop down menu was clicked\n */\nexport default function PaydinSelect({\n isOpen,\n optionState,\n placeholder = null,\n options = [],\n border = null,\n width = '300px',\n paddingTopPx = 5,\n paddingBottomPx = 5,\n paddingRightPx = 10,\n paddingLeftPx = 10,\n textColor = 'black',\n hideArrow = false,\n isDisabled = false,\n onOptionClick = option => { },\n selectedOptionSuffix = '',\n}) {\n\n const outlineStyles = {\n border: border ? border : 'none'\n }\n\n const inputStyles = {\n width: '200px',\n padding: `${paddingTopPx}px ${paddingRightPx}px ${paddingBottomPx}px ${paddingLeftPx}px`,\n color: textColor\n }\n\n const menuProps = {\n PaperProps: {\n style: {\n maxHeight: (EDIT_LINK_SECTION_OPTIONS_MENU_ITEM_HEIGHT_PX * EDIT_LINK_SECTION_OPTIONS_MENU_ITEM_MAX_COUNT) + 15\n }\n }\n }\n\n function renderValue(selected) {\n if (placeholder && !selected) {\n return placeholder\n }\n\n return <PaydinSelectRenderedValue>\n {options.find(option => option.value === selected)?.element}\n <div>{selectedOptionSuffix}</div>\n </PaydinSelectRenderedValue>\n }\n\n return (\n hideArrow ?\n <Select\n disabled={isDisabled}\n open={isOpen}\n fullWidth\n displayEmpty={placeholder ? true : false}\n value={optionState}\n onChange={e => onOptionClick(e.target.value)}\n sx={{\n '.MuiOutlinedInput-notchedOutline': outlineStyles,\n '.MuiInputBase-input': inputStyles\n }}\n inputProps={{ IconComponent: () => null }}\n renderValue={(selected) => renderValue(selected)}\n MenuProps={menuProps}\n >\n {\n options.map(option => <MenuItem key={option.value} value={option.value}>{option.element}</MenuItem>)\n }\n </Select> : <Select\n disabled={isDisabled}\n open={isOpen}\n fullWidth\n displayEmpty={placeholder ? true : false}\n value={optionState}\n onChange={e => onOptionClick(e.target.value)}\n sx={{\n '.MuiOutlinedInput-notchedOutline': outlineStyles,\n '.MuiInputBase-input': inputStyles\n }}\n renderValue={(selected) => renderValue(selected)}\n MenuProps={menuProps}\n >\n {\n options.map(option => <MenuItem key={option.value} value={option.value}>{option.element}</MenuItem>)\n }\n </Select>\n )\n}","import React from 'react'\nimport './AddInfluencerOption.css'\nimport ImageBox from 'components/ImageBox/ImageBox'\n\n/**\n * Represents an option inside {@link AddInfluencerSelect} options list.\n * @param {string} image - The image of the influencer\n * @param {string} username - The username of the influencer\n */\nexport default function AddInfluencerOption({\n image,\n username\n}) {\n return (\n <div className='add-influencer-option'>\n <ImageBox\n image={image}\n className='add-influencer-option-image'\n roundImage={true}\n />\n <div className=\"add-influencer-option-username\">{username}</div>\n </div>\n )\n}\n","import React, { useState } from 'react'\nimport './AddInfluencerSelect.css'\nimport PaydinSelect from 'components/PaydinSelect/PaydinSelect'\nimport AddInfluencerOption from 'components/AddInfluencerOption/AddInfluencerOption'\nimport { IoIosArrowForward } from 'react-icons/io'\nimport { useTranslation } from 'react-i18next'\nimport { isMobile } from 'utils/deviceUtils'\n\n/**\n * Represents a customized select element for picking an influencer.\n * @param {*} optionState - The select value state\n * @param {function} onOptionClick - A function for setting the select's value state\n * @param {array} options - The select's options list\n * @param {boolean} fullWidth - Determins whether the select element will stretch to the entire width available or not\n * @param {boolean} isDisabled - Detrermins whether this select is disabled or not\n * @param {boolean} isOptional - Detrermins whether this select is optional or not\n */\nexport default function AddInfluencerSelect({\n optionState,\n onOptionClick = () => { },\n options = [],\n fullWidth = false,\n isDisabled = false,\n isOptional = false\n}) {\n const { t } = useTranslation()\n\n const [isAddInfluencerSelectOpen, setIsAddInfluencerSelectOpen] = useState(false)\n\n function normalizeOptions() {\n if (!options) {\n return []\n }\n\n const normalizedOptions = options.map(option => ({\n value: option.username,\n element: <AddInfluencerOption\n image={option?.image}\n username={option?.username}\n />\n }))\n\n normalizedOptions.unshift({\n value: '',\n element: <div className='add-influencer-select-no-influencer-option'>\n <div className=\"add-influencer-select-no-influencer-option-text\">{t('ADD_INFLUENCER_SELECT_NO_INFLUENCER_SELECTED_TEXT')}</div>\n </div>\n })\n\n return normalizedOptions\n }\n\n function onClick() {\n setIsAddInfluencerSelectOpen(prev => {\n return !isDisabled && !prev && options?.length > 0\n })\n }\n\n function renderNoInfluencersPlaceholderElement() {\n return <div className=\"add-influencer-select-no-influencers-placeholder-element\">{t('ADD_INFLUENCER_SELECT_NO_INFLUENCERS_PLACEHOLDER_TEXT')}</div>\n }\n\n function renderPlaceholderElement() {\n return <div className={isMobile ? \"mobile-add-influencer-select-placeholder-element\" : \"add-influencer-select-placeholder-element\"}>{t('ADD_INFLUENCER_SELECT_PLACEHOLDER_TEXT')} {isOptional ? t('OPTIONAL_INPUT_TITLE_SUFFIX') : ''}</div>\n }\n\n return (\n <div className={isMobile ? 'mobile-add-influencer-select-container' : 'add-influencer-select-container'} style={{ width: fullWidth ? '100%' : '300px' }} onClick={onClick}>\n <div className={isMobile ? \"mobile-add-influencer-select-content\" : \"add-influencer-select-content\"} style={{ padding: optionState ? '5px 20px' : '15px 20px' }}>\n <PaydinSelect\n isOpen={isAddInfluencerSelectOpen}\n isDisabled={isDisabled || options.length === 0}\n placeholder={((options && options.length > 0) ? renderPlaceholderElement() : renderNoInfluencersPlaceholderElement())}\n options={normalizeOptions()}\n optionState={optionState}\n onOptionClick={onOptionClick}\n hideArrow={true}\n textColor='hsl(229, 23%, 72%)'\n />\n {(!isDisabled && options.length > 0) && <IoIosArrowForward className=\"add-influencer-select-image\" />}\n </div>\n </div>\n )\n}","import React, { useState } from 'react'\nimport './UTMFormInput.css'\nimport { useTranslation } from 'react-i18next'\nimport { isMobile } from 'utils/deviceUtils'\nimport FloatingElement from 'components/FloatingElement/FloatingElement'\nimport { UTM_FORM_INPUT_UTM_PARAM_ADDITIONS_OPTIONS_LIST } from 'constants/general.constants'\n\n/**\n * Represents a UTM parameter input field inside the {@link UTMForm} component.\n * @param {string} title - The title for this input field\n * @param {string} placeholder - The placeholder for this input field\n * @param {string} value - The value state for this input field\n * @param {string} setValue - A function for setting the value state for this input field\n * @param {string} isOptional - Determins whether this input field is optional or not\n * @param {string} inputClassName - A class for the input\n */\nexport default function UTMFormInput({\n title,\n placeholder,\n value,\n setValue,\n isOptional = false,\n inputClassName = ''\n}) {\n const { t } = useTranslation()\n\n const [isParametersMenuOpen, setIsParametersMenuOpen] = useState(false)\n\n function handleInput(e) {\n setValue(e.target.value)\n }\n\n function onAddParameterButtonClick() {\n setIsParametersMenuOpen(prev => !prev)\n }\n\n function onUTMParamAdditionClick(UTMAddition) {\n setValue(`${value}${UTMAddition?.template}`)\n hideUTMAdditionsMenu()\n }\n\n function hideUTMAdditionsMenu() {\n setIsParametersMenuOpen(false)\n }\n\n return (\n <div className={isMobile ? 'mobile-utm-form-input-container' : 'utm-form-input-container'}>\n <div className=\"utm-form-input-title-container\">\n <div className=\"utm-form-input-title\">{title} {isOptional ? t('OPTIONAL_INPUT_TITLE_SUFFIX') : ''}</div>\n <div className=\"utm-form-input-add-parameter-button-container\">\n <div className=\"utm-form-input-add-parameter-button\" onClick={onAddParameterButtonClick}>{t('UTM_FORM_INPUT_ADD_PARAMETER_BUTTON_TEXT')}</div>\n <FloatingElement\n isShown={isParametersMenuOpen}\n hide={hideUTMAdditionsMenu}\n >\n <div className=\"utm-form-input-utm-param-additions-menu\">\n {\n UTM_FORM_INPUT_UTM_PARAM_ADDITIONS_OPTIONS_LIST.map(option => <div\n className={isMobile ? \"mobile-utm-form-input-utm-param-addition\" : \"utm-form-input-utm-param-addition\"}\n key={option?.template + \"__\" + option?.description}\n onClick={() => onUTMParamAdditionClick(option)}\n >\n <div className={isMobile ? \"mobile-utm-form-input-utm-param-addition-title\" : \"utm-form-input-utm-param-addition-title\"}>{option?.template}</div>\n <div className={isMobile ? \"mobile-utm-form-input-utm-param-addition-description\" : \"utm-form-input-utm-param-addition-description\"}>{option?.description}</div>\n </div>)\n }\n </div>\n </FloatingElement>\n </div>\n </div>\n <input\n className={`${isMobile ? 'mobile-utm-form-input' : 'utm-form-input'} ${inputClassName}`}\n value={value}\n onChange={handleInput}\n placeholder={placeholder}\n />\n </div>\n )\n}","import React from 'react'\nimport './PaydinSwitch.css'\nimport Switch from '@mui/material/Switch';\n\n/**\n * Represents a custom switch base on MUI {@link Switch}.\n * @param {number} label - The label for this switch\n * @param {number} labelClassName - A class for the switch's label\n * @param {boolean} disabled - Determins whether the switch is disabled or not\n * @param {boolean} checked - Determins whether the switch is checked or not\n * @param {function} setChecked - A function that sets the checked status of this switch\n */\nexport default function PaydinSwitch({\n label = '',\n className = '',\n labelClassName = null,\n disabled = false,\n checked = false,\n setChecked = () => { },\n checkedBackgroundColor = \"#65C466\"\n}) {\n return (\n <div className={`paydin-switch-container ${className}`} onClick={disabled ? () => { } : () => setChecked(!checked)}>\n <Switch\n disabled={disabled}\n checked={checked}\n onChange={event => setChecked(event.target.checked)}\n sx={{\n width: '46px',\n height: '26px',\n padding: '0',\n \"& .MuiSwitch-switchBase\": {\n padding: 0,\n margin: 0.3,\n transitionDuration: '300ms',\n '&.Mui-checked': {\n transform: 'translateX(20px)',\n color: '#fff',\n '& + .MuiSwitch-track': {\n backgroundColor: checkedBackgroundColor,\n opacity: 1,\n border: 0,\n },\n '&.Mui-disabled + .MuiSwitch-track': {\n opacity: 0.5,\n },\n },\n '&.Mui-focusVisible .MuiSwitch-thumb': {\n color: '#33cf4d',\n border: '6px solid #fff',\n },\n '&.Mui-disabled .MuiSwitch-thumb': {\n color: '#f5f5f5',\n },\n '&.Mui-disabled + .MuiSwitch-track': {\n opacity: 0.7,\n },\n },\n '& .MuiSwitch-thumb': {\n boxSizing: 'border-box',\n width: 22,\n height: 22,\n },\n '& .MuiSwitch-track': {\n borderRadius: 26 / 2,\n backgroundColor: '#E9E9EA',\n opacity: 1,\n transition: 'background-color 500ms',\n },\n }}\n />\n {label && <div className={`paydin-switch-label ${labelClassName ?? ''}`}>{label}</div>}\n </div>\n )\n}","import { Collapse } from '@mui/material'\nimport React from 'react'\nimport './CollapsingElement.css'\n/**\n * Represents a collapsing or expanding element.\n * @param {boolean} expanded - If true, the container is expanded, otherwise the container is collapsed\n */\nexport default function CollapsingElement({\n children,\n expanded,\n collapsedSize='0px',\n unmountOnExit=true\n}) {\n\n return (\n <Collapse in={expanded} timeout=\"auto\" collapsedSize={collapsedSize} unmountOnExit={unmountOnExit}>\n {children}\n </Collapse>\n )\n}","import React from 'react'\nimport './ExpandHideButton.css'\nimport { useTranslation } from 'react-i18next'\nimport { MdKeyboardArrowDown } from 'react-icons/md'\n\n/**\n * Represents the expand/hide button.\n * @param {boolean} isExpanded - A state value that determins whether the button text is \"Expand\" or \"Hide\"\n * @param {function} onClick - A function for setting \"isExpanded\" state value\n */\nexport default function ExpandHideButton({\n isExpanded = false,\n onClick = () => { }\n}) {\n const { t } = useTranslation()\n\n return (\n <div className=\"expand-hide-button\" onClick={onClick}>\n <div className=\"expand-hide-button-text\">{isExpanded ? t('EXPAND_HIDE_BUTTON_HIDE_TEXT') : t('EXPAND_HIDE_BUTTON_EXPAND_TEXT')}</div>\n <MdKeyboardArrowDown className={`expand-hide-button-image ${isExpanded ? 'expanded' : ''}`} />\n </div>\n )\n}","import React, { useEffect, useState } from 'react'\nimport './UTMForm.css'\nimport UTMFormInput from 'components/UTMFormInput/UTMFormInput'\nimport { useTranslation } from 'react-i18next'\nimport Tooltip from 'components/Tooltip/Tooltip'\nimport { isMobile } from 'utils/deviceUtils'\nimport PaydinSwitch from 'components/PaydinSwitch/PaydinSwitch'\nimport CollapsingElement from 'components/CollapsingElement/CollapsingElement'\nimport ExpandHideButton from 'components/ExpandHideButton/ExpandHideButton'\n\n/**\n * Represents a form for assigning UTM parameters.\n * @param {string} UTMSource - The UTM source parameter\n * @param {function} setUTMSource - A function for setting the UTM source parameter\n * @param {string} UTMMedium - The UTM source parameter\n * @param {function} setUTMMedium - A function for setting the UTM medium parameter\n * @param {string} UTMCampaign - The UTM source parameter\n * @param {function} setUTMCampaign - A function for setting the UTM campaign parameter\n * @param {string} UTMTerm - The UTM source parameter\n * @param {function} setUTMTerm - A function for setting the UTM term parameter\n * @param {string} UTMContent - The UTM source parameter\n * @param {function} setUTMContent - A function for setting the UTM content parameter\n */\nexport default function UTMForm({\n inlinePadding = '10px',\n shouldDisplayControlBar = true,\n inputsHasPadding = true,\n shouldAddUTMs = false,\n setShouldAddUTMs = () => { },\n UTMSource = '',\n setUTMSource = () => { },\n UTMMedium = '',\n setUTMMedium = () => { },\n UTMCampaign = '',\n setUTMCampaign = () => { },\n UTMTerm = '',\n setUTMTerm = () => { },\n UTMContent = '',\n setUTMContent = () => { }\n}) {\n const { t } = useTranslation()\n\n const [isUTMParamsShown, setIsUTMParamsShown] = useState(false)\n\n useEffect(() => {\n generateUTMTag()\n }, [UTMSource, UTMMedium, UTMCampaign, UTMTerm, UTMContent])\n\n function generateUTMTag() {\n if (!UTMSource && !UTMMedium && !UTMCampaign && !UTMTerm && !UTMContent) {\n return '-'\n }\n\n return `?${UTMSource ? `utm_source=${UTMSource}` : ''}${(UTMMedium) ? `${UTMSource ? '&' : ''}utm_medium=${UTMMedium}` : ''}${(UTMCampaign) ? `${(UTMSource || UTMMedium) ? '&' : ''}utm_campaign=${UTMCampaign}` : ''}${(UTMTerm) ? `${(UTMSource || UTMMedium || UTMCampaign) ? '&' : ''}utm_term=${UTMTerm}` : ''}${(UTMContent) ? `${(UTMSource || UTMMedium || UTMCampaign || UTMTerm) ? '&' : ''}utm_content=${UTMContent}` : ''}`\n }\n\n function setShouldAddUTMParameters(value) {\n setIsUTMParamsShown(true)\n setShouldAddUTMs(value)\n }\n\n function toggleUTMParams() {\n setIsUTMParamsShown(prev => !prev)\n }\n\n function isUTMInputsShown() {\n if (shouldDisplayControlBar) {\n return isUTMParamsShown && shouldAddUTMs\n }\n return shouldAddUTMs\n }\n\n return (\n <div className='utm-form-container'>\n {\n shouldDisplayControlBar && <div className={isMobile ? \"mobile-utm-form-control-bar-container\" : \"utm-form-control-bar-container\"}>\n <PaydinSwitch\n checked={shouldAddUTMs}\n setChecked={setShouldAddUTMParameters}\n label={t('UTM_FORM_UTMS_SWITCH_LABEL')}\n labelClassName='utm-form-switch-label'\n />\n {\n shouldAddUTMs ? <ExpandHideButton\n isExpanded={isUTMInputsShown()}\n onClick={toggleUTMParams}\n /> : <div style={{ width: '50px' }}></div>\n }\n </div>\n }\n <CollapsingElement expanded={isUTMInputsShown()}>\n <div className=\"utm-form-inputs\" style={{ padding: inputsHasPadding ? '10px' : '0', paddingInline: inlinePadding }}>\n <UTMFormInput\n title={t('UTM_FORM_SOURCE_INPUT_TITLE')}\n placeholder={t('UTM_FORM_SOURCE_INPUT_PLACEHOLDER')}\n value={UTMSource}\n setValue={(setUTMSource)}\n />\n <UTMFormInput\n title={t('UTM_FORM_MEDIUM_INPUT_TITLE')}\n placeholder={t('UTM_FORM_MEDIUM_INPUT_PLACEHOLDER')}\n value={UTMMedium}\n setValue={(setUTMMedium)}\n />\n <UTMFormInput\n title={t('UTM_FORM_CAMPAIGN_INPUT_TITLE')}\n placeholder={t('UTM_FORM_CAMPAIGN_INPUT_PLACEHOLDER')}\n value={UTMCampaign}\n setValue={(setUTMCampaign)}\n inputClassName={isMobile ? 'mobile-utm-form-campaign-input' : 'utm-form-campaign-input'}\n />\n <UTMFormInput\n title={t('UTM_FORM_TERM_INPUT_TITLE')}\n placeholder={t('UTM_FORM_TERM_INPUT_PLACEHOLDER')}\n value={UTMTerm}\n setValue={(setUTMTerm)}\n />\n <UTMFormInput\n title={t('UTM_FORM_CONTENT_INPUT_TITLE')}\n placeholder={t('UTM_FORM_CONTENT_INPUT_PLACEHOLDER')}\n value={UTMContent}\n setValue={(setUTMContent)}\n />\n <div className=\"utm-form-utm-tag-preview-container\">\n <div className=\"utm-form-utm-tag-preview-title-container\">\n <div className=\"utm-form-utm-tag-preview-title\">{t('UTM_FORM_UTM_TAG_PREVIEW_TITLE')}</div>\n <Tooltip tooltipText={t('UTM_FORM_UTM_TAG_PREVIEW_TOOLTIP_TEXT')} />\n </div>\n <div className=\"utm-form-utm-tag-preview\">{generateUTMTag()}</div>\n </div>\n </div>\n </CollapsingElement>\n </div>\n )\n}","import React from 'react'\nimport './MultiSelectStatusButton.css'\nimport { IoIosArrowForward } from 'react-icons/io'\nimport { isMobile } from 'utils/deviceUtils'\nimport MultiLineText from 'components/MultiLineText/MultiLineText'\n\n/**\n * Represents a button that opens a {@link MultiSelectDialog} component\n * and displays the status of the selected elements.\n * @param {string} title - The button's title\n * @param {string} status - The button's status\n * @param {function} onClick - The click handler of the button\n */\nexport default function MultiSelectStatusButton({\n title = '',\n status = '',\n onClick = () => { },\n className = ''\n}) {\n return (\n <div className={`${isMobile ? \"mobile-multi-select-status-button\" : \"multi-select-status-button\"} ${className}`} onClick={onClick}>\n <div className={isMobile ? \"mobile-multi-select-status-button-title\" : \"multi-select-status-button-title\"}>{title}</div>\n <div className={isMobile ? \"mobile-multi-select-status-button-right-section\" : \"multi-select-status-button-right-section\"}>\n <MultiLineText\n text={status}\n className={isMobile ? \"mobile-multi-select-status-button-right-section-quantity\" : \"multi-select-status-button-right-section-quantity\"}\n lines={1}\n oneWord={true}\n />\n <IoIosArrowForward className=\"multi-select-status-button-right-section-image\" />\n </div>\n </div>\n )\n}","import React from 'react'\nimport './ItemsView.css'\n\n/**\n * Represents an item container view.\n * It can display a list of items in a sliding row or a grid.\n * @param {array} items - The array of items to display\n * @param {string} width - The width for each rendered item\n * @param {string} gap - The space between each item\n * @param {boolean} hasPadding - If true, adds horizontal padding at both sides of the item container view\n * @param {boolean} displayAsGrid - If true, displays the items in a grid, otherwise, displays them in a sliding row\n * @param {number} columnsCount - Defines the number of columns for this view, only when displayAsGrid = true, otherwise, ignores this prop\n * @param {ref} itemsSliderRef - A reference to the items slider element\n */\nexport default function ItemsView({\n items,\n width = '0px',\n gap = '10px',\n displayAsGrid = false,\n hasPadding = true,\n columnsCount = 'auto-fit',\n itemsSliderClassName = '',\n paddingInline = '10px',\n paddingVertical = '10px',\n itemsSliderRef\n}) {\n return (\n <div ref={itemsSliderRef} className={`${displayAsGrid ? 'items-view-container-grid' : 'items-view-container-slider'} ${itemsSliderClassName}`} style={{\n ...(!displayAsGrid ? { gap } : {}),\n ...(displayAsGrid ? { gridTemplateColumns: `repeat(${columnsCount}, minmax(${width}, 1fr))` } : {}),\n paddingInline: hasPadding ? paddingInline : '0px',\n paddingTop: paddingVertical,\n paddingBottom: paddingVertical\n }}>\n {items}\n </div>\n )\n}","import { UploadFileAPI } from \"api/files/files\"\nimport { NUMBER_TYPES } from \"constants/general.constants\"\nimport { toFixed } from \"services/SystemService\"\n\nexport function generateRandomInteger(maxNumber) {\n return Math.floor(Math.random() * maxNumber)\n}\n\n/**\n * Tests the password security.\n * It checks if the password has al least 1 digit, 1 lower case letter\n * and 1 upper case letter.\n * @param {string} password - The password to test\n * @returns true if the password is secure and false otherwise.\n */\nexport function isPasswordSecure(password) {\n return /[0-9]/.test(password) &&\n /[a-z]/.test(password)\n}\n\n/**\n * Formats a number to be displayed with 'decimalCount' decimal places.\n * If numberFormat is equal to NUMBER_TYPES.SHORT, then it calls the {@link shortenNumber} function.\n * @param {number} number - The number to format\n * @param {string} numberFormat - The format/type of the number, can be either NUMBER_TYPES.NORMAL, NUMBER_TYPES.PERCENTAGE, NUMBER_TYPES.SHORT or NUMBER_TYPES.PRICE\n * @param {boolean} isAverage - Determins whether the number represents an average or not\n * @param {boolean} shortNumberMaxBondary - The maximum number from which the notation of 1K/1M/1B will be used. If numberFormat is not equal to NUMBER_TYPES.SHORT, this parameter is ignored\n * @returns The formatted number\n */\nexport function formatNumber(number, numberFormat = NUMBER_TYPES.NORMAL, isAverage = false, shortNumberMaxBondary = 1_000) {\n function getDecimalCount(numberFormat) {\n switch (true) {\n case numberFormat === NUMBER_TYPES.PERCENTAGE || numberFormat === NUMBER_TYPES.PRICE: return 2\n case isAverage && num < shortNumberMaxBondary: return 1\n default: return 0\n }\n }\n\n if (typeof number !== 'number' || !number)\n return 0.00\n \n const num = number.toString().replace(/[^0-9.]/g, '')\n const decimalCount = getDecimalCount(numberFormat)\n if (numberFormat === NUMBER_TYPES.SHORT && num >= shortNumberMaxBondary) {\n return shortenNumber(number, 2)\n }\n return Number(number.toFixed(Number.isInteger(number) ? 0 : decimalCount)).toLocaleString('en-US')\n}\n\n/**\n * Shortens a large number (larger than 10,000) with a notation that indicates the amount, as shown below:\n * \n * 1,000 ==> 1,000\n * 10,000 ==> 10K\n * 10,836 ==> 10.8K\n * 102,432 ==> 102.4K\n * 4,243,521 ==> 4.2M\n * .\n * .\n * .\n * @param {number} number - The number to shorten\n * @param {number} maxBoundry - The maximum number from which the notation of 1K/1M/1B will be used\n * @returns the shortened number\n */\nexport function shortenNumber(number, decimalDigits = 2) {\n const num = number.toString().replace(/[^0-9.]/g, '');\n let si = [\n { v: 1E3, s: \"K\" },\n { v: 1E6, s: \"M\" },\n { v: 1E9, s: \"B\" },\n { v: 1E12, s: \"T\" },\n { v: 1E15, s: \"P\" },\n { v: 1E18, s: \"E\" }\n ];\n let index;\n for (index = si.length - 1; index > 0; index--) {\n if (num >= si[index].v) {\n break;\n }\n }\n return (decimalDigits === 0 ? Math.floor(num / si[index].v) : (num / si[index].v).toFixed(decimalDigits).replace(/\\.0+$|(\\.[0-9]*[1-9])0+$/, \"$1\")) + si[index].s;\n}\n\n/**\n * Uploads a file to the server\n * @param {string} imageUrl - The image url of the uploaded image\n * @param {function} onUrlReceive - A callback to call if the request was successful\n * @param {function} onFailure - A callback to call if the request was failed\n */\nexport async function uploadFile(imageUrl, customName = null, onUrlReceive = () => { }, onFailure = () => { }) {\n if (imageUrl.startsWith('blob')) {\n try {\n const url = await UploadFileAPI(\n await fetch(imageUrl).then(r => r.blob())\n .then(blobFile => {\n let fileExtension = blobFile.type.substr(blobFile.type.lastIndexOf('/') + 1)\n fileExtension = fixSomeFileExtensions(fileExtension)\n return new File([blobFile], `${imageUrl.substr(imageUrl.lastIndexOf('/') + 1)}.${fileExtension}`, {type: blobFile.type})\n }),\n customName,\n )\n onUrlReceive(url)\n } catch (error) {\n onFailure(error)\n }\n }\n}\n\n/**\n * Tests the given string 'str' for existance of whitespaces.\n * @param {string} str - The given string\n * @returns true if the given string includes whitespaces, otherwise, returns false\n */\nexport function containsWhitespace(str) {\n return /\\s/.test(str)\n}\n\n/**\n * Tests the given string 'str' for existance of numbers.\n * @param {string} str - The given string\n * @returns true if the given string includes numbers, otherwise, returns false\n */\nexport function containsNumbers(str) {\n return /\\d/.test(str)\n}\n\n/**\n * Tests the given string 'str' for existance of uppercase letters.\n * @param {string} str - The given string\n * @returns true if the given string includes uppercase letters, otherwise, returns false\n */\nexport function containsUppercaseLetters(str) {\n return /[A-Z]/.test(str)\n}\n\n/**\n * Formats the given username.\n * Used in all username inputs.\n * @param {string} username - The given username\n * @returns the formatted username\n */\nexport function formatUsername(username) {\n if (!username)\n return ''\n return username.replace(/\\s/g, \"\").toLowerCase()\n}\n\nexport function isNumberInRange(number, min, max) {\n if (typeof min !== 'number' || typeof max !== 'number' || typeof number !== 'number') {\n return false\n }\n\n return number <= max && number >= min\n}\n\n// Since 2020 all major browsers ensure sort stability with Array.prototype.sort().\n// stableSort() brings sort stability to non-modern browsers (notably IE11). If you\n// only support modern browsers you can replace stableSort(exampleArray, exampleComparator)\n// with exampleArray.slice().sort(exampleComparator)\nexport function stableSort(array, comparator) {\n const stabilizedThis = array.map((el, index) => [el, index])\n stabilizedThis.sort((a, b) => {\n const order = comparator(a[0], b[0])\n if (order !== 0) {\n return order\n }\n return a[1] - b[1]\n });\n return stabilizedThis.map((el) => el[0])\n}\n\nexport function isObjectEmpty(object) {\n return Object.keys(object).length === 0\n}\n\nexport async function convertImageToPng(imageFile) {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.readAsDataURL(imageFile);\n\n reader.onload = (event) => {\n const img = new Image();\n img.src = event.target.result;\n\n img.onload = () => {\n const canvas = document.createElement(\"canvas\");\n canvas.width = img.width;\n canvas.height = img.height;\n\n const ctx = canvas.getContext(\"2d\");\n ctx.drawImage(img, 0, 0);\n\n canvas.toBlob((blob) => {\n resolve(blob);\n }, \"image/png\");\n };\n\n img.onerror = reject;\n };\n\n reader.onerror = reject;\n });\n}\n\n\n\nexport function fixSomeFileExtensions(filenameExtension) {\n if (filenameExtension === 'jpeg') {\n return 'jpg'\n } else if (filenameExtension === 'svg+xml') {\n return 'svg'\n } else if (filenameExtension === 'quicktime') {\n return 'mov'\n } else if (filenameExtension === 'x-ms-wmv') {\n return 'wmv'\n }\n return filenameExtension\n}","import { request_post_file } from 'services/RequestWrapper'\nimport { environment } from \"conf\"\nimport { UPLOAD_FILE_API_URL } from 'constants/api.constants'\nimport { IMAGE_UPLOAD_REQUEST_TIMEOUT_MILLISECONDS } from 'constants/general.constants';\n\nexport function UploadFileAPI(file, customName = null) {\n return new Promise((resolve, reject) => {\n const formData = new FormData()\n formData.append('file_resource', file)\n\n const options = {\n method: 'POST',\n formData,\n }; \n request_post_file(environment.base_url + UPLOAD_FILE_API_URL + `${customName ? `?custom_name=${customName}` : ''}`, options, IMAGE_UPLOAD_REQUEST_TIMEOUT_MILLISECONDS)\n .then(response => {\n if (response.status) {\n resolve(response.data)\n } else {\n reject(response.error)\n }\n })\n .catch(error => {\n reject(error)\n });\n });\n}","import React from 'react'\nimport './ItemsViewSection.css'\nimport { useTranslation } from 'react-i18next'\nimport { \n SECTION_TYPES, \n ITEM_DESIGN_PATTERNS,\n ITEMS_VIEW_SECTION_MORE_ITEMS_LOADER_HEIGHT_PX\n} from 'constants/general.constants'\nimport ItemsView from 'components/ItemsView/ItemsView'\nimport Loader from 'components/Loader/Loader'\nimport { generateRandomInteger } from 'utils/utils'\n\n/**\n * Represetns an item container view wrapper which contains a title and\n * a general item view with items to display\n * @param {string} title - The title for this container view\n * @param {array} data - The data for display in this section. It contains an array of data objects.\n * @param {string} itemWidth - The width of each item in this section\n * @param {string} itemAspectRatio - The aspect ratio of each item/item's image in this section\n * @param {string} gap - The gap between each element in this section, ignores this when SECTION_TYPES.SINGLE\n * @param {string} type - The section type for this section, can accepts either SECTION_TYPES.SINGLE, SECTION_TYPES.GRID or SECTION_TYPES.STRIP\n * @param {component} viewItemComponent - A general item view component for displaying the items \n * @param {string} bgColor - The background color for this view container\n * @param {boolean} isLoadingItems - Determins whether the items' data are being loaded or not\n * @param {boolean} isLoadingMoreItems - Determins whether the items' data are being loaded as part of pagination or not\n * @param {function} onItemClick - A function to perform when clicking on an item\n * @param {ref} sectionRef - A reference to this section's container\n * @param {boolean} hasPadding - If true, adds horizontal (left & right) padding to this item view container\n * @param {number} columnsCount - Defines the number of columns for this view, only when type = SECTION_TYPES.GRID, otherwise, ignores this prop\n * @param {ref} itemsSliderRef - A reference to the items slider element\n */\nexport default function ItemsViewSection({\n title,\n data,\n itemWidth = `0px`,\n itemAspectRatio = 1,\n gap = '10px',\n type = SECTION_TYPES.STRIP,\n viewItemComponent: ViewItemComponent,\n bgColor = 'white',\n isLoadingItems = false,\n isLoadingMoreItems = false,\n onItemClick = null,\n sectionRef = null,\n hasPadding = true,\n paddingInline = '10px',\n paddingVertical = '10px',\n columnsCount = 'auto-fit',\n hasTitlePadding = true,\n alignEnd = false,\n isExpandingFullHeight = false,\n itemsSliderClassName = '',\n itemsSliderRef\n}) {\n const { t } = useTranslation()\n \n return (\n <div ref={sectionRef} dir={t('direction.dir')} className='items-view-section-container' style={{ backgroundColor: bgColor, padding: hasPadding ? '10px 0' : '0', justifyContent: alignEnd ? 'end' : 'start', ...(isExpandingFullHeight ? { height: '100%' } : {}) }}>\n {title && <div className={`items-view-section-title ${!hasTitlePadding ? 'no-padding' : ''}`}>{title}</div>}\n {\n (type === SECTION_TYPES.SINGLE && data && data?.length > 0) ? <>\n <ViewItemComponent\n item={data[0]}\n onItemClick={onItemClick}\n width={itemWidth}\n aspectRatio={itemAspectRatio}\n designPattern={ITEM_DESIGN_PATTERNS.INSIDE}\n hasPadding={true}\n />\n </> : <>\n {\n isLoadingItems && <div className=\"items-view-section-loader-container\">\n <Loader styles={{\n height: '30px',\n width: '30px',\n position: 'absolute',\n zIndex: 90,\n top: 0,\n left: 0,\n right: 0,\n margin: '20% auto 0 auto'\n }} />\n </div>\n }\n <ItemsView\n gap={gap}\n displayAsGrid={type === SECTION_TYPES.GRID}\n width={itemWidth}\n hasPadding={hasPadding}\n paddingInline={paddingInline}\n columnsCount={columnsCount}\n itemsSliderRef={itemsSliderRef}\n itemsSliderClassName={itemsSliderClassName}\n paddingVertical={paddingVertical}\n items={<>\n {data && data?.map(item => <ViewItemComponent\n key={generateRandomInteger(1000)}\n item={item}\n onItemClick={onItemClick}\n width={itemWidth}\n aspectRatio={itemAspectRatio}\n designPattern={ITEM_DESIGN_PATTERNS.OUTSIDE}\n sectionType={type}\n />)}\n </>}\n />\n {\n isLoadingMoreItems && <div className=\"items-view-section-more-items-loader-loader-container\" style={{ height: `${ITEMS_VIEW_SECTION_MORE_ITEMS_LOADER_HEIGHT_PX}px` }}>\n <Loader styles={{\n height: '25px',\n width: '25px'\n }} />\n </div>\n }\n </>\n }\n </div>\n )\n}","import ImageBox from 'components/ImageBox/ImageBox'\nimport React from 'react'\nimport './PreviewLinkProductsListItem.css'\n\nexport default function PreviewLinkProductsListItem({\n item\n}) {\n return (\n <div className='preview-link-products-list-item'>\n <ImageBox\n image={item?.imageUrl}\n className='preview-link-products-list-item-image'\n showBorder={true}\n isImageFitCover={true}\n />\n </div>\n )\n}","import { Alert, AlertTitle, Button } from '@mui/material'\nimport { ALERT_MESSAGE_TYPES } from 'constants/general.constants'\nimport React from 'react'\nimport './AlertMessage.css'\n\nexport default function AlertMessage({\n title = '',\n message = '',\n type = ALERT_MESSAGE_TYPES.INFO,\n background = '',\n buttonText = '',\n onButtonClick = () => { }\n}) {\n return (\n <Alert\n severity={type}\n sx={{\n width: '100%',\n backgroundColor: background\n }}\n action={<>\n {\n buttonText && <div className='alert-message-button-container'>\n <Button color=\"inherit\" size=\"small\" onClick={onButtonClick}>\n {buttonText}\n </Button>\n </div>\n }\n </>}\n >\n {title && <AlertTitle sx={{ fontWeight: 600 }}>{title}</AlertTitle>}\n {message}\n </Alert>\n )\n}","import React, { useEffect, useRef, useState } from 'react'\nimport './EditLinkSection.css'\nimport { useTranslation } from 'react-i18next'\nimport ImageBox from 'components/ImageBox/ImageBox'\nimport AddProductsDialog from 'dialogs/AddProductsDialog/AddProductsDialog'\nimport { isMobile } from 'utils/deviceUtils'\nimport {\n EDIT_LINK_SECTION_LINK_DESCRIPTION_CHARACTER_LIMIT,\n VIEW_MODES,\n PAYDIN_IMAGE_CROPPER_ASPECT_RATIOS,\n PROMOCODE_INPUT_MAX_LENGTH,\n RESIZE_IMAGE_MAX_HEIGHT,\n RESIZE_IMAGE_MAX_WIDTH,\n SECTION_TYPES,\n ALERT_MESSAGE_TYPES,\n LINK_PRODUCT_SELECT_MAX_LIMIT\n} from 'constants/general.constants'\nimport { useUserDetailsContext } from 'contexts/User'\nimport { PRICING_PLANS_PAGE_URL } from 'constants/routes.constants'\nimport { useHistoryContext } from 'contexts/History'\nimport PaydinDialog, { PAYDIN_DIALOG_BUTTON_TYPES } from 'dialogs/PaydinDialog/PaydinDialog'\nimport ImageCropDialog from 'dialogs/ImageCropDialog/ImageCropDialog'\nimport EditFieldSectionInput from 'components/EditFieldSectionInput/EditFieldSectionInput'\nimport { resizeImage } from 'services/imageUtils'\nimport AddInfluencerSelect from 'components/AddInfluencerSelect/AddInfluencerSelect'\nimport UTMForm from 'components/UTMForm/UTMForm'\nimport MultiSelectStatusButton from 'components/MultiSelectStatusButton/MultiSelectStatusButton'\nimport ItemsViewSection from 'components/ItemsViewSection/ItemsViewSection'\nimport PreviewLinkProductsListItem from 'components/PreviewLinkProductsListItem/PreviewLinkProductsListItem'\nimport MultiLineText from 'components/MultiLineText/MultiLineText'\nimport AlertMessage from 'components/AlertMessage/AlertMessage'\n\n/**\n * Represents the section in which the link data can be both displayed and edited.\n * @param {string} mode - The mode in which the user is in. Can be either one of VIEW_MODES.EDIT or VIEW_MODES.CREATE. \n * It is useful due to the fact that this component can be either in edit link page and in create link page.\n * @param {string} image - The image url of the link\n * @param {function} setImage - A function that sets the user's selected image\n * @param {array} selectedProducts - The list of products selected by the user\n * @param {function} setSelectedProducts - A function that sets the list of products selected by the user\n * @param {string} description - The description of the current link\n * @param {function} setDescription - A function that sets the description of the current link\n * @param {string} promocode - A promocode for the current link\n * @param {function} setPromocode - A function that sets the promocode for the current link\n * @param {string} promocodeDescription - The description of the promocode for the current link\n * @param {function} setPromocodeDescription - A function that sets the description of the promocode for the current link\n * @param {string} shoppingUrl - The shopping URL of the current link\n * @param {function} setShoppingUrl - A function that sets the shopping URL of the current link\n * @param {boolean} linkPropertiesModified - Determins whether any change was made in the link details or not\n * @param {array} influencers - The array of all the influencers for the current user\n * @param {string} originalInfluencerUsername - The currently saved influencer's username\n * @param {string} selectedInfluencerUsername - The currently selected influencer's username\n * @param {function} setSelectedInfluencerUsername - A function for setting the currently selected influencer's username \n */\nexport default function EditLinkSection({\n mode,\n image = '',\n setImage = () => { },\n selectedProducts = [],\n setSelectedProducts = () => { },\n selectedCollections = [],\n setSelectedCollections = () => { },\n description = '',\n setDescription = () => { },\n promocode = '',\n setPromocode = () => { },\n shouldAddUTMs = false,\n setShouldAddUTMs = () => { },\n utmParams = {},\n setUTMSource = () => { },\n setUTMMedium = () => { },\n setUTMCampaign = () => { },\n setUTMTerm = () => { },\n setUTMContent = () => { },\n linkPropertiesModified = false,\n influencers = [],\n originalInfluencerUsername = '',\n selectedInfluencerUsername = '',\n setSelectedInfluencerUsername = () => { },\n hasSavedInfluencer = false,\n setIsInfluencerChanged = () => { },\n preferedSearchProductIds = [],\n}) {\n const { t } = useTranslation()\n const { \n userDetails,\n endEditing \n } = useUserDetailsContext()\n const history = useHistoryContext()\n\n const [dialogState, setDialogState] = useState({\n isOpen: false,\n title: '',\n message: '',\n leftButtonText: '',\n rightButtonText: '',\n rightButtonClickHandler: () => { }\n })\n const [multiSelectDialogsState, setMultiSelectDialogsState] = useState({\n productsDialogShown: false,\n collectionsDialogShown: false\n })\n const [isImageCropDialogOpen, setIsImageCropDialogOpen] = useState(false)\n const [cropperTempImage, setCropperTempImage] = useState('')\n const [displayImage, setDisplayImage] = useState(image)\n\n const fileInputRef = useRef(null)\n\n useEffect(() => {\n setDisplayImage(image)\n }, [image])\n\n function openAddProductsDialog() {\n setMultiSelectDialogsState(prev => ({\n ...prev,\n productsDialogShown: true\n }))\n }\n\n function closeAddProductDialog() {\n setMultiSelectDialogsState(prev => ({\n ...prev,\n productsDialogShown: false\n }))\n }\n\n function openAddCollectionsDialog() {\n setMultiSelectDialogsState(prev => ({\n ...prev,\n collectionsDialogShown: true\n }))\n }\n\n function closeAddCollectionsDialog() {\n setMultiSelectDialogsState(prev => ({\n ...prev,\n collectionsDialogShown: false\n }))\n }\n\n async function onImageChange(event) {\n if (event.target.files && event.target.files[0]) {\n const resizedImage = await resizeImage(event.target.files[0], RESIZE_IMAGE_MAX_WIDTH, RESIZE_IMAGE_MAX_HEIGHT)\n setCropperTempImage(URL.createObjectURL(resizedImage))\n setIsImageCropDialogOpen(true)\n }\n }\n\n function addMedia() {\n fileInputRef.current.value = null\n fileInputRef.current.click()\n }\n\n function showDiscardChangesDialog() {\n setDialogState({\n isOpen: true,\n handleDialogClose: closeDialog,\n title: t('LINK_VIEW_DISCARD_LINK_DETAILS_CONFIRMATION_DIALOG_TITLE'),\n message: t('LINK_VIEW_DISCARD_LINK_DETAILS_CONFIRMATION_DIALOG_MESSAGE'),\n leftButtonText: t('LINK_VIEW_DISCARD_LINK_DETAILS_CONFIRMATION_DIALOG_LEFT_BUTTON_TEXT'),\n rightButtonText: t('LINK_VIEW_DISCARD_LINK_DETAILS_CONFIRMATION_DIALOG_RIGHT_BUTTON_TEXT'),\n rightButtonClickHandler: () => {\n if (linkPropertiesModified) {\n history.goBackStepsNoPerform(3)\n endEditing()\n }\n setTimeout(goToPricingPlans, 200)\n }\n })\n }\n\n function closeDialog() {\n setDialogState(prev => ({\n ...prev,\n isOpen: false\n }))\n }\n\n function goToPricingPlans() {\n history.push(PRICING_PLANS_PAGE_URL)\n }\n\n function onApplyCrop(croppedImage, crop, zoom, aspectRatio) {\n setImage(croppedImage)\n closeImageCropDialog()\n }\n\n function closeImageCropDialog() {\n setIsImageCropDialogOpen(false)\n }\n\n function onSelectInfluencer(selectedInfluencerUsername) {\n const selectedInfluencer = influencers.find(influencer => influencer?.username === selectedInfluencerUsername)\n setPromocode(selectedInfluencer?.promocode)\n setSelectedInfluencerUsername(selectedInfluencerUsername)\n setIsInfluencerChanged(true)\n }\n\n function renderAddMediaFrame(className = '') {\n return <div className={`${isMobile ? 'mobile-edit-link-section-add-media-button' : 'edit-link-section-add-media-button'} ${className}`}>\n <div className=\"edit-link-section-add-media-button-inner-container\">\n <div className={isMobile ? \"mobile-edit-link-section-add-media-button-plus\" : \"edit-link-section-add-media-button-plus\"}>+</div>\n <div className=\"edit-link-section-add-media-button-text\">{t('EDIT_LINK_SECTION_ADD_MEDIA_BUTTON_TEXT')}</div>\n </div>\n </div>\n }\n\n function renderTitleHeader() {\n return <div className=\"edit-link-section-link-title-header\">\n {\n userDetails?.businessLogo && <ImageBox\n image={userDetails?.businessLogo}\n className='edit-link-section-link-title-header-image'\n showBorder={true}\n roundImage={true}\n />\n }\n {\n userDetails?.businessName && <MultiLineText\n text={userDetails?.businessName}\n className='edit-link-section-link-title'\n lines={1}\n />\n }\n </div>\n }\n\n return (\n <div className={isMobile ? 'mobile-edit-link-section-container' : 'edit-link-section-container'}>\n {\n isMobile ? <div className='mobile-edit-link-section-top-container'>\n <div className=\"mobile-edit-link-section-image-section\">\n <div className=\"mobile-edit-link-section-image-section-data\">\n <div className={isMobile ? \"mobile-edit-link-section-add-products-button-padding-container\" : \"edit-link-section-add-products-button-padding-container\"}>\n <MultiSelectStatusButton\n title={t('EDIT_LINK_SECTION_ADD_PRODUCTS_BUTTON_TITLE')}\n status={t('EDIT_LINK_SECTION_ADD_PRODUCTS_BUTTON_QUANTITY', { count: selectedProducts?.length })}\n onClick={openAddProductsDialog}\n />\n </div>\n {\n (selectedProducts && selectedProducts.length > 0) && <ItemsViewSection\n data={selectedProducts}\n viewItemComponent={PreviewLinkProductsListItem}\n type={SECTION_TYPES.STRIP}\n hasPadding={false}\n hasTitlePadding={false}\n itemsSliderClassName='mobile-edit-link-section-link-products-slider'\n />\n }\n </div>\n </div>\n <div className=\"mobile-edit-link-section-link-title-container\">\n {renderTitleHeader()}\n <EditFieldSectionInput\n title={t('EDIT_LINK_SECTION_LINK_DESCRIPTION_TEXTFIELD_TITLE')}\n placeholder={t('EDIT_LINK_SECTION_LINK_DESCRIPTION_TEXTFIELD_PLACEHOLDER')}\n maxLength={EDIT_LINK_SECTION_LINK_DESCRIPTION_CHARACTER_LIMIT}\n tooltipText={t('EDIT_LINK_SECTION_LINK_DESCRIPTION_TOOLTIP_TEXT')}\n value={description}\n setValue={setDescription}\n isMultiline={true}\n rows={2}\n showTopSection={false}\n id=\"title\"\n />\n </div>\n </div> : <>\n <div className={\"edit-link-section-link-details\"}>\n {\n displayImage && <div className={\"edit-link-section-link-image-container\"} /*onClick={addMedia}*/>\n <ImageBox\n className=\"edit-link-section-link-image\"\n image={displayImage}\n allowVideo={true}\n />\n {/* {renderAddMediaFrame('has-image')} */}\n </div>\n }\n <div className=\"edit-link-section-link-title-container\">\n {renderTitleHeader()}\n <EditFieldSectionInput\n title={t('EDIT_LINK_SECTION_LINK_DESCRIPTION_TEXTFIELD_TITLE')}\n placeholder={t('EDIT_LINK_SECTION_LINK_DESCRIPTION_TEXTFIELD_PLACEHOLDER')}\n maxLength={EDIT_LINK_SECTION_LINK_DESCRIPTION_CHARACTER_LIMIT}\n tooltipText={t('EDIT_LINK_SECTION_LINK_DESCRIPTION_TOOLTIP_TEXT')}\n value={description}\n setValue={setDescription}\n isMultiline={true}\n rows={2}\n showTopSection={false}\n id=\"title\"\n />\n </div>\n </div>\n <MultiSelectStatusButton\n title={t('EDIT_LINK_SECTION_ADD_PRODUCTS_BUTTON_TITLE')}\n status={t('EDIT_LINK_SECTION_ADD_PRODUCTS_BUTTON_QUANTITY', { count: selectedProducts?.length })}\n onClick={openAddProductsDialog}\n className='edit-link-section-add-products-button'\n />\n </>\n }\n {/* TODO Leave this code in comment until we'll find a solution to description for this feature */}\n {/* <MultiSelectStatusButton\n title={t('EDIT_LINK_SECTION_ADD_COLLECTIONS_BUTTON_TITLE', { count: selectedCollections?.length })}\n status={t('EDIT_LINK_SECTION_ADD_COLLECTIONS_BUTTON_QUANTITY', { count: selectedCollections?.length, collectionName: selectedCollections?.length > 0 && selectedCollections[0]?.title })}\n onClick={openAddCollectionsDialog}\n /> */}\n <div className=\"edit-link-section-link-fields\">\n {\n (userDetails?.isAdmin && influencers && influencers.length > 0) && <div className={isMobile ? \"mobile-edit-link-section-add-products-button-container\" : \"edit-link-section-add-products-button-container\"}>\n <AddInfluencerSelect\n isDisabled={originalInfluencerUsername !== '' || hasSavedInfluencer}\n options={influencers}\n optionState={selectedInfluencerUsername}\n onOptionClick={onSelectInfluencer}\n fullWidth={true}\n isOptional={true}\n />\n </div>\n }\n <div className=\"edit-link-section-link-data-form-inputs\">\n <div className={isMobile ? \"mobile-edit-link-section-promocode-input-container\" : \"edit-link-section-promocode-input-container\"}>\n <EditFieldSectionInput\n title={t('EDIT_LINK_SECTION_PROMOCODE_INPUT_TITLE')}\n placeholder={t('EDIT_LINK_SECTION_PROMOCODE_INPUT_PLACEHOLDER')}\n maxLength={PROMOCODE_INPUT_MAX_LENGTH}\n tooltipText={t('EDIT_LINK_SECTION_PROMOCODE_TOOLTIP_TEXT')}\n value={promocode}\n setValue={setPromocode}\n id={t('EDIT_LINK_SECTION_PROMOCODE_INPUT_TITLE')}\n isOptional={true}\n />\n </div>\n </div>\n <div className={isMobile ? \"mobile-edit-link-section-utm-container\" : \"edit-link-section-utm-container\"}>\n {\n userDetails?.isAdmin && <UTMForm\n inlinePadding='20px'\n shouldAddUTMs={shouldAddUTMs}\n setShouldAddUTMs={setShouldAddUTMs}\n UTMSource={utmParams.UTMSource}\n setUTMSource={setUTMSource}\n UTMMedium={utmParams.UTMMedium}\n setUTMMedium={setUTMMedium}\n UTMCampaign={utmParams.UTMCampaign}\n setUTMCampaign={setUTMCampaign}\n UTMTerm={utmParams.UTMTerm}\n setUTMTerm={setUTMTerm}\n UTMContent={utmParams.UTMContent}\n setUTMContent={setUTMContent}\n />\n }\n </div>\n </div>\n <input ref={fileInputRef} type=\"file\" accept=\"image/*\" onChange={onImageChange} style={{ display: 'none' }} />\n <AddProductsDialog\n isDialogOpen={multiSelectDialogsState.productsDialogShown}\n handleDialogClose={closeAddProductDialog}\n selectedProducts={selectedProducts}\n setSelectedProducts={setSelectedProducts}\n selectMaxLimit={LINK_PRODUCT_SELECT_MAX_LIMIT}\n allowColorOptionSelect={true}\n fetchProductsInfo={preferedSearchProductIds && preferedSearchProductIds.length > 0 ? {prefered_product_ids: preferedSearchProductIds} : null}\n />\n {/* TODO Leave this code in comment until we'll find a solution to description for this feature */}\n {/* {\n multiSelectDialogsState.collectionsDialogShown && <AddCollectionsDialog\n isDialogOpen={multiSelectDialogsState.collectionsDialogShown}\n handleDialogClose={closeAddCollectionsDialog}\n selectedCollections={selectedCollections}\n setSelectedCollections={setSelectedCollections}\n selectMaxLimit={EDIT_LINK_SECTION_ADD_COLLECTIONS_DIALOG_SELECTION_LIMIT}\n />\n } */}\n <ImageCropDialog\n isDialogOpen={isImageCropDialogOpen}\n handleDialogClose={closeImageCropDialog}\n image={cropperTempImage}\n aspectRatiosArray={PAYDIN_IMAGE_CROPPER_ASPECT_RATIOS}\n onCropDone={onApplyCrop}\n />\n <PaydinDialog\n isDialogOpen={dialogState.isOpen}\n handleDialogClose={dialogState.handleDialogClose}\n title={dialogState.title}\n message={dialogState.message}\n closeOnRightClick={false}\n rightButtonType={PAYDIN_DIALOG_BUTTON_TYPES.SECONDARY}\n leftButtonText={dialogState.leftButtonText}\n rightButtonText={dialogState.rightButtonText}\n isLeftButtonWithLoader={false}\n isRightButtonWithLoader={false}\n onRightButtonClick={dialogState.rightButtonClickHandler}\n />\n </div>\n )\n}","import React, { useEffect } from 'react'\nimport './AnimatedStringLoader.css'\nimport { ANIMATIED_STRING_LOADER_ANIMATION_DURATION_SECONDS } from '../../constants/general.constants';\n\n/**\n * Represents an animated string loader used by {@link LoaderPage} component.\n * It takes the given string, wraps each letter with <h1> tag and applies fade-in & fade-out animations on each letter\n * in a way that the first letter is turning black, then the second, then the third etc., until all letters are turned black\n * and finally, turns all letters to white again at the same time.\n * @param {string} string The string to animate\n */\nexport default function AnimatedStringLoader({ string }) {\n\n const resetAnimation = () => {\n const els = document.querySelectorAll('h1');\n for (const el of els) {\n el.style.animationName = \"none\";\n setTimeout(() => {\n requestAnimationFrame(() => {\n el.style.animationName = \"fade-in, fade-out\";\n })\n }, 50)\n }\n }\n\n useEffect(() => {\n const intervalId = setInterval(resetAnimation, ((string.length * ANIMATIED_STRING_LOADER_ANIMATION_DURATION_SECONDS) + ANIMATIED_STRING_LOADER_ANIMATION_DURATION_SECONDS) * 1000)\n return () => clearInterval(intervalId)\n }, [string])\n\n return (\n <div className=\"animated-string-loader-container\">\n {[...string].map((character, index) =>\n <h1 className='animated-char' key={character + index} style={{\n animation: `fade-in ${ANIMATIED_STRING_LOADER_ANIMATION_DURATION_SECONDS}s forwards, fade-out ${ANIMATIED_STRING_LOADER_ANIMATION_DURATION_SECONDS}s forwards `,\n animationDelay: `${index * ANIMATIED_STRING_LOADER_ANIMATION_DURATION_SECONDS}s, ${((string.length) * ANIMATIED_STRING_LOADER_ANIMATION_DURATION_SECONDS)}s`\n }}>{character.toUpperCase()}</h1>\n )}\n </div>\n )\n}","import Loader from 'components/Loader/Loader'\nimport { TOP_BAR_HEIGHT_PX } from 'constants/general.constants'\nimport React, { useEffect } from 'react'\nimport './LoaderPage.css'\nimport AnimatedStringLoader from 'components/AnimatedStringLoader/AnimatedStringLoader'\n\n/**\n * Represents a loading page for displaying while performing background tasks, such as API requests.\n * A modular loading page which can be either an indeterminate spinning circular loader or an animated string loader.\n * By default, this loader page displays an indeterminate spinning circular loader.\n * The animation of the animated string is explained in {@link AnimatedStringLoader} component documentation.\n * @param {string} animatedString The string to animate, transforms this page's circular loader to an animated string loader\n * @param {object} styles A style object for styling customizations\n */\nexport default function LoaderPage({\n animatedString,\n isSplash = false,\n styles = {},\n marginBottom = '30%',\n isFullScreen = false,\n isContained = false,\n disableOverflow = true\n}) {\n\n useEffect(() => {\n if (disableOverflow) {\n document.querySelector('#root').style.overflow = 'hidden'\n return () => document.querySelector('#root').style.overflow = 'unset'\n }\n })\n\n return (\n <div className={`loader-container ${isSplash ? 'splash' : ''}`} style={{ height: isFullScreen ? (isContained ? '100%' : '100vh') : `calc(100vh - ${TOP_BAR_HEIGHT_PX})`, marginTop: isFullScreen ? '0' : `${TOP_BAR_HEIGHT_PX}px`, ...styles }}>\n {animatedString && animatedString.length !== 0 ? <AnimatedStringLoader string={animatedString} /> : <Loader styles={{ marginBottom: marginBottom }} />}\n </div>\n )\n}","import LoaderPage from 'pages/LoaderPage/LoaderPage'\nimport React from 'react'\n\nexport default function ContentDialogLoader() {\n return (\n <LoaderPage\n styles={{ backgroundColor: '#ffffffaa', height: '100%' }}\n marginBottom='0px'\n isFullScreen={true}\n disableOverflow={false}\n />\n )\n}","import React, { useEffect, useState } from 'react'\nimport './LinkView.css'\nimport { isMobile } from 'utils/deviceUtils'\nimport MobileLinkPreviewSimulator from 'components/MobileLinkPreviewSimulator/MobileLinkPreviewSimulator'\nimport { NO_IMAGE_PLACEHOLDER_URL, VIEW_MODES, LINK_TYPES, CREATE_LINK_REDIRECT_TO_PAGE_DELAY, SEPERATE_GO_BACK_FOR_SAFARY_DELAY, SHOPEAKS_CDN_DOMAIN } from 'constants/general.constants'\nimport EditLinkSection from 'components/EditLinkSection/EditLinkSection'\nimport { isInputValueValid } from 'services/SystemService'\nimport { useTranslation } from 'react-i18next'\nimport PaydinDialog, { PAYDIN_DIALOG_BUTTON_TYPES } from 'dialogs/PaydinDialog/PaydinDialog'\nimport {\n INFLUENCERS_PAGE_URL,\n LINKS_PAGE_URL,\n} from 'constants/routes.constants'\nimport { useGeneralDataContext, useUserDetailsContext } from 'contexts/User'\nimport { useHistoryContext } from 'contexts/History'\nimport { GetLinkDetailsAPI, createLookDetails, updateLookDetails } from 'api/links/links'\nimport { isObjectEmpty, uploadFile } from 'utils/utils'\nimport { logger } from 'services/CloudLogger'\nimport { v4 as uuidV4 } from 'uuid'\nimport { GetInfluencer, GetInfluencers } from 'api/influencers/influencers'\nimport ContentDialogTopbar from 'components/ContentDialogTopbar/ContentDialogTopbar'\nimport { addTimeToDate } from 'utils/dateUtils'\nimport LoaderButton from 'components/LoaderButton/LoaderButton'\nimport { extractCollectionData, extractLinkData, extractProductData } from 'utils/dataUtils'\nimport ContentDialogLoader from 'components/ContentDialogLoader/ContentDialogLoader'\n\n/**\n * Represents the portion of the screen that displays the preview/edit/create section and the mobile simulator section.\n * @param {string} mode - The mode for this view. It controls what will be displayed. Can accept one the following: VIEW_MODES.PREVIEW, VIEW_MODES.EDIT & VIEW_MODES.CREATE\n */\nexport default function LinkView({\n mode,\n data\n}) {\n const { t } = useTranslation()\n const {\n userDetails,\n setRecentLinks,\n // isFreeUser,\n beginEditing,\n endEditing\n } = useUserDetailsContext()\n const {\n showApprovalMessage,\n setObjectToSave,\n setFinishedCreatingObject,\n setFinishedUpdatingObject\n } = useGeneralDataContext()\n const history = useHistoryContext()\n\n const [isLoadingLink, setIsLoadingLink] = useState(true)\n const [dialogState, setDialogState] = useState({\n isOpen: false,\n title: '',\n message: '',\n leftButtonText: '',\n rightButtonText: '',\n rightButtonClickHandler: () => { },\n leftButtonClickHandler: () => { },\n })\n const [linkData, setLinkData] = useState({\n images: []\n })\n const [shouldAddUTMs, setShouldAddUTMs] = useState(false)\n const [utmParams, setUtmParams] = useState({\n UTMSource: '',\n UTMMedium: '',\n UTMCampaign: '',\n UTMTerm: '',\n UTMContent: ''\n })\n const [userSelectedProducts, setUserSelectedProducts] = useState(data?.linkData?.products ?? [])\n const [userSelectedCollections, setUserSelectedCollections] = useState([])\n const [promocodeState, setPromocodeState] = useState({\n code: '',\n })\n const [linkDescription, setLinkDescription] = useState('')\n const [shoppingUrl, setShoppingUrl] = useState('')\n const [isSavingLink, setIsSavingLink] = useState(false)\n const [linkPropertiesModified, setLinkPropertiesModified] = useState(hasLinkData())\n const [isAbleToSaveChanges, setIsAbleToSaveChanges] = useState(false)\n const [influencers, setInfluencers] = useState([])\n const [originalInfluencerUsername, setOriginalInfluencerUsername] = useState(userDetails?.isAdmin ? '' : userDetails?.influencerUsername)\n const [selectedInfluencerUsername, setSelectedInfluencerUsername] = useState(userDetails?.isAdmin ? '' : userDetails?.influencerUsername)\n const [selectedInfluencerImage, setSelectedInfluencerImage] = useState('')\n const [didUploadImages, setDidUploadImages] = useState(null)\n const [hasSavedInfluencer, setHasSavedInfluencer] = useState(false)\n const [isInfluencerChanged, setIsInfluencerChanged] = useState(false)\n\n useEffect(() => {\n loadLinkDetails()\n }, [])\n\n useEffect(() => {\n if (linkPropertiesModified) {\n beginEditing()\n addDiscardChangesDialogBackHandler()\n } else {\n endEditing()\n }\n }, [linkPropertiesModified])\n\n useEffect(() => {\n setIsAbleToSaveChanges(\n linkPropertiesModified &&\n userSelectedProducts && userSelectedProducts.length > 0\n )\n }, [linkPropertiesModified, userSelectedProducts, linkDescription, shoppingUrl, linkData.images, selectedInfluencerUsername])\n\n function addDiscardChangesDialogBackHandler() {\n setTimeout(() => {\n history.addBackHandler(() => {\n setDialogState({\n isOpen: true,\n handleDialogClose: closeDialog,\n title: t('LINK_VIEW_DISCARD_LINK_DETAILS_CONFIRMATION_DIALOG_TITLE'),\n message: t('LINK_VIEW_DISCARD_LINK_DETAILS_CONFIRMATION_DIALOG_MESSAGE'),\n leftButtonText: t('LINK_VIEW_DISCARD_LINK_DETAILS_CONFIRMATION_DIALOG_LEFT_BUTTON_TEXT'),\n rightButtonText: t('LINK_VIEW_DISCARD_LINK_DETAILS_CONFIRMATION_DIALOG_RIGHT_BUTTON_TEXT'),\n leftButtonClickHandler: addDiscardChangesDialogBackHandler,\n rightButtonClickHandler: () => {\n endEditing()\n history.goBack()\n },\n isRightButtonWithLoader: false\n })\n })\n }, 300)\n }\n\n function hasLinkData() {\n return !isObjectEmpty(data) && 'linkId' in data && Object.keys(data).length > 1 && mode !== VIEW_MODES.EDIT\n }\n\n function loadLinkDetails() {\n if (mode !== VIEW_MODES.CREATE) {\n if (data?.linkData && !isObjectEmpty(data?.linkData)) {\n populateLinkData(data?.linkData, true)\n } else {\n GetLinkDetailsAPI(data?.linkId)\n .then(linkData => {\n populateLinkData(linkData)\n })\n .catch(error => {\n console.log(error)\n history.push(LINKS_PAGE_URL)\n })\n }\n } else if (mode === VIEW_MODES.CREATE) {\n if (data?.linkData && !isObjectEmpty(data?.linkData)) {\n populateLinkData(data?.linkData, true)\n }\n\n const utmParams = {\n UTMSource: userDetails?.settings?.utmParams?.UTMSource ?? '',\n UTMMedium: userDetails?.settings?.utmParams?.UTMMedium ?? '',\n UTMCampaign: userDetails?.settings?.utmParams?.UTMCampaign ?? '',\n UTMTerm: userDetails?.settings?.utmParams?.UTMTerm ?? '',\n UTMContent: userDetails?.settings?.utmParams?.UTMContent ?? '',\n }\n setUtmParams(utmParams)\n setShouldAddUTMs(hasUtmParams(utmParams))\n\n if (userDetails?.isAdmin) {\n GetInfluencers()\n .then(response => {\n if (data?.influencerUsername) {\n setSelectedInfluencerUsername(data?.influencerUsername)\n }\n setInfluencers(response?.filter(influencer => influencer?.is_active)?.map(influencer => {\n if (data?.influencerUsername === influencer?.username) {\n setPromocodeState({\n code: influencer?.promocode ?? ''\n })\n }\n return {\n image: influencer?.profile_image_url ?? NO_IMAGE_PLACEHOLDER_URL,\n username: influencer?.username ?? '',\n isActive: influencer?.is_active ?? false,\n promocode: influencer?.promocode ?? ''\n }\n }))\n })\n .finally(() => {\n setIsLoadingLink(false)\n })\n } else {\n setPromocodeState({\n code: userDetails?.promocode ?? ''\n })\n setIsLoadingLink(false)\n }\n } else {\n setIsLoadingLink(false)\n }\n }\n\n function populateLinkData(linkData, fromProdefinedData = false) {\n if (mode === VIEW_MODES.CREATE && fromProdefinedData && ('linkId' in linkData && Object.keys(linkData).length > 1 || !('linkId' in linkData) && Object.keys(linkData).length > 0)) {\n setLinkPropertiesModified(true)\n }\n\n let imagesWithIds = []\n if (mode === VIEW_MODES.CREATE) {\n if (linkData?.images && linkData.images?.length > 0) {\n setImage(typeof linkData?.images[0] === 'string' ? linkData?.images[0] : linkData?.images[0]?.src)\n }\n } else {\n if (linkData?.images && linkData.images?.length > 0) {\n imagesWithIds = linkData.images.map(image => {\n if (typeof image === 'string') {\n return {\n src: image,\n id: uuidV4()\n }\n }\n return image\n })\n }\n }\n const shoppingRedirectUrl = fromProdefinedData ? linkData?.shoppingRedirectUrl : linkData?.shopping_redirect_url\n const linkTitle = linkData?.description ?? \"\" // consider the description as the shorts's title\n const utmParams = {\n UTMSource: fromProdefinedData ? linkData?.utmParams?.UTMSource : (linkData?.utm_params?.utm_source ?? ''),\n UTMMedium: fromProdefinedData ? linkData?.utmParams?.UTMMedium : (linkData?.utm_params?.utm_medium ?? ''),\n UTMCampaign: fromProdefinedData ? linkData?.utmParams?.UTMCampaign : (linkData?.utm_params?.utm_campaign ?? ''),\n UTMTerm: fromProdefinedData ? linkData?.utmParams?.UTMTerm : (linkData?.utm_params?.utm_term ?? ''),\n UTMContent: fromProdefinedData ? linkData?.utmParams?.UTMContent : (linkData?.utm_params?.utm_content ?? ''),\n }\n const influencerUsername = fromProdefinedData ? linkData?.influencerUsername : linkData?.influencer_username\n const linkProductsSelectedOptions = fromProdefinedData ? linkData?.selectedOptions : linkData?.selected_options\n const linkProducts = (fromProdefinedData ? linkData?.products : linkData?.products?.map(product => {\n if (Object.keys(linkProductsSelectedOptions).includes(product?.inventory_id)) {\n return extractProductData(product, linkProductsSelectedOptions[product?.inventory_id])\n } else {\n return extractProductData(product)\n }\n })) ?? []\n // This ids will be sent in the search request to get them in the start of the search results\n const preferedSearchProductIds = fromProdefinedData ? linkData?.preferedProductIds : linkData?.preferedProductIds ?? []\n \n setLinkData({\n linkId: fromProdefinedData ? linkData?.linkId : (linkData?.link_id ?? ''),\n images: imagesWithIds,\n description: linkData.description ?? '',\n currency: fromProdefinedData ? linkData?.currency : (linkData?.link_analytics?.currency ?? userDetails?.businessCurrency),\n analytics: {\n views: fromProdefinedData ? linkData?.analytics?.views : (linkData?.link_analytics?.visits ?? 0),\n checkouts: fromProdefinedData ? linkData?.analytics?.checkouts : (linkData?.link_analytics?.checkouts ?? 0),\n revenue: fromProdefinedData ? linkData?.analytics?.revenue : (linkData?.link_analytics?.revenue ?? 0),\n checkoutRequests: fromProdefinedData ? linkData?.analytics?.checkoutRequests : (linkData?.link_analytics?.requested_checkouts ?? 0)\n },\n promocode: fromProdefinedData ? linkData?.promocode?.code : (linkData?.promocode?.code ?? ''),\n products: linkProducts,\n preferedSearchProductIds,\n title: linkTitle,\n shoppingRedirectUrl,\n influencerUsername,\n utmParams,\n selectedOptions: linkProductsSelectedOptions,\n })\n\n if (userDetails?.isAdmin && influencerUsername) {\n loadInfluencer(influencerUsername, linkData?.promocode?.code)\n } else if (userDetails?.isAdmin && !influencerUsername) {\n GetInfluencers()\n .then(response => {\n setInfluencers(response?.filter(influencer => influencer?.is_active)?.map(influencer => ({\n image: influencer?.profile_image_url ?? NO_IMAGE_PLACEHOLDER_URL,\n username: influencer?.username ?? '',\n isActive: influencer?.is_active ?? false,\n promocode: influencer?.promocode ?? ''\n })))\n })\n .finally(() => {\n setIsLoadingLink(false)\n })\n }\n\n setUserSelectedProducts(linkProducts)\n setUserSelectedCollections((fromProdefinedData ? linkData?.collections : linkData?.collections?.map(collection => extractCollectionData(collection))) ?? [])\n setPromocodeState(prev => ({\n ...prev,\n code: linkData?.promocode?.code ?? ''\n }))\n setLinkDescription(linkTitle)\n setShoppingUrl(shoppingRedirectUrl)\n setUtmParams(utmParams)\n setShouldAddUTMs(hasUtmParams(utmParams))\n setIsLoadingLink(false)\n }\n\n function loadInfluencer(influencerUsername, predefinedPromocode) {\n GetInfluencer(influencerUsername)\n .then(response => {\n setOriginalInfluencerUsername(influencerUsername)\n setSelectedInfluencerUsername(influencerUsername)\n setSelectedInfluencerImage(response?.profile_image_url)\n setInfluencers([{\n image: response?.profile_image_url,\n username: response?.username ?? '',\n isActive: response?.is_active ?? false,\n promocode: response?.promocode ?? ''\n }])\n setPromocodeState({\n code: predefinedPromocode ? predefinedPromocode : (response?.promocode?.code ?? '')\n })\n })\n .finally(() => {\n setIsLoadingLink(false)\n })\n }\n\n function hasUtmParams(utmParams) {\n return (\n (![null, undefined].includes(utmParams?.UTMSource) && utmParams?.UTMSource?.length > 0) ||\n (![null, undefined].includes(utmParams?.UTMMedium) && utmParams?.UTMMedium?.length > 0) ||\n (![null, undefined].includes(utmParams?.UTMCampaign) && utmParams?.UTMCampaign?.length > 0) ||\n (![null, undefined].includes(utmParams?.UTMTerm) && utmParams?.UTMTerm?.length > 0) ||\n (![null, undefined].includes(utmParams?.UTMContent) && utmParams?.UTMContent?.length > 0)\n )\n }\n\n function hasLinkImages() {\n return linkData?.images && linkData.images.length > 0\n }\n\n async function uploadImages(images) {\n new Promise(async (resolve, _) => {\n const imagesToSave = images?.map(image => image?.src)\n let uploadedimages = []\n await Promise.all(imagesToSave.map(async (image, i) => {\n if (typeof image === 'string' && image.includes(SHOPEAKS_CDN_DOMAIN)) {\n uploadedimages.push(image)\n } else {\n await uploadFile(image, null, url => {\n if (url) {\n uploadedimages.push(url)\n }\n }, () => {\n console.log('an error as occurred during file upload...')\n })\n }\n }))\n\n setLinkData(prev => ({\n ...prev,\n images: uploadedimages?.map(url => ({\n src: url,\n id: uuidV4()\n }))\n }))\n\n setDidUploadImages(true)\n resolve()\n })\n }\n\n useEffect(() => { // triggered by clicking on save button or by uploading the images\n if (didUploadImages !== false && isSavingLink) {\n performSaveLink()\n }\n }, [didUploadImages, isSavingLink])\n\n function performSaveLink() {\n const productsIds = userSelectedProducts?.map(selectedProduct => selectedProduct.id)\n const selectedProductsOptions = userSelectedProducts?.reduce((acc, selectedProduct) => {\n if (Object.keys(selectedProduct?.selectedOptions).length > 0)\n return { ...acc, [selectedProduct.id]: selectedProduct?.selectedOptions}\n return acc\n }, {})\n const collectionsIds = userSelectedCollections?.map(selectedCollection => selectedCollection.id)\n const shopUrl = shoppingUrl ? shoppingUrl : `${t('EDIT_LINK_SECTION_SHOPPING_URL_INPUT_PREFIX')}${userDetails?.domain}`\n\n if (!linkData?.images.some(image => image?.src?.startsWith('blob'))) {\n const promocode = {\n code: promocodeState.code === '' ? null : promocodeState.code\n }\n\n const imagesToSave = linkData?.images?.filter(image => ![null, undefined, ''].includes(image?.src)).map(image => image?.src)\n\n if (mode === VIEW_MODES.CREATE) {\n\n createLookDetails(userDetails.businessId, imagesToSave, productsIds, selectedProductsOptions, collectionsIds, promocode, linkDescription, shopUrl, selectedInfluencerUsername, utmParams, LINK_TYPES.LOOK)\n .then(newLink => {\n setObjectToSave(extractLinkData(newLink))\n setLinkPropertiesModified(false)\n history.goBackStepsNoPerform()\n setTimeout(() => {\n history.goBack()\n }, SEPERATE_GO_BACK_FOR_SAFARY_DELAY)\n setTimeout(() => {\n setRecentLinks([])\n if (window.location.pathname !== LINKS_PAGE_URL && window.location.pathname !== INFLUENCERS_PAGE_URL) {\n history.push(LINKS_PAGE_URL)\n } else {\n setFinishedCreatingObject(true)\n setTimeout(() => {\n setFinishedCreatingObject(false)\n }, 200)\n }\n }, CREATE_LINK_REDIRECT_TO_PAGE_DELAY)\n }).catch((error) => {\n logger.error(`Error - edit link failure - ${error}`)\n showSaveDetailsErrorMessage()\n setIsSavingLink(false)\n })\n } else {\n updateLookDetails(userDetails.businessId, linkData.linkId, imagesToSave, productsIds, selectedProductsOptions, collectionsIds, promocode, linkDescription, shopUrl, selectedInfluencerUsername, utmParams, LINK_TYPES.LOOK)\n .then(updatedLink => {\n setObjectToSave(extractLinkData(updatedLink))\n setIsSavingLink(false)\n showApprovalMessage(t('EDIT_LINK_SECTION_CHANGES_SAVED_APPROVAL_MESSAGE_TEXT'))\n setLinkPropertiesModified(false)\n history.goBackStepsNoPerform()\n if (isInfluencerChanged) {\n setHasSavedInfluencer(true)\n }\n setFinishedUpdatingObject(true)\n setTimeout(() => {\n setFinishedUpdatingObject(false)\n }, 200)\n }).catch((error) => {\n logger.error(`Error - edit link failure - ${error}`)\n showSaveDetailsErrorMessage()\n setIsSavingLink(false)\n })\n }\n } else {\n setDialogState({\n isOpen: true,\n handleDialogClose: closeDialog,\n title: t('UPLOAD_FILE_ERROR_DIALOG_TITLE'),\n leftButtonText: t('UPLOAD_FILE_ERROR_DIALOG_RIGHT_BUTTON_TEXT'),\n rightButtonText: null,\n rightButtonClickHandler: () => { },\n isRightButtonWithLoader: false\n })\n setIsSavingLink(false)\n }\n }\n\n async function save() {\n setIsSavingLink(true) // only changes the state of the loader of the save button in order to trigger the useEffect that's listening to this state\n }\n\n function showSaveDetailsErrorMessage() {\n setDialogState({\n isOpen: true,\n handleDialogClose: closeDialog,\n title: t('EDIT_LINK_PAGE_SAVE_DETAILS_ERROR_DIALOG_TITLE'),\n leftButtonText: t('EDIT_LINK_PAGE_SAVE_DETAILS_ERROR_DIALOG_RIGHT_BUTTON_TEXT'),\n rightButtonText: null,\n rightButtonClickHandler: () => { },\n isRightButtonWithLoader: false\n })\n }\n\n function setLinkUTMSource(UTMValue) {\n if (isInputValueValid(UTMValue)) {\n setLinkPropertiesModified(true)\n setUtmParams(prev => ({\n ...prev,\n UTMSource: UTMValue\n }))\n }\n }\n\n function setLinkUTMMedium(UTMValue) {\n if (isInputValueValid(UTMValue)) {\n setLinkPropertiesModified(true)\n setUtmParams(prev => ({\n ...prev,\n UTMMedium: UTMValue\n }))\n }\n }\n\n function setLinkUTMCampaign(UTMValue) {\n if (isInputValueValid(UTMValue)) {\n setLinkPropertiesModified(true)\n setUtmParams(prev => ({\n ...prev,\n UTMCampaign: UTMValue\n }))\n }\n }\n\n function setLinkUTMTerm(UTMValue) {\n if (isInputValueValid(UTMValue)) {\n setLinkPropertiesModified(true)\n setUtmParams(prev => ({\n ...prev,\n UTMTerm: UTMValue\n }))\n }\n }\n\n function setLinkUTMContent(UTMValue) {\n if (isInputValueValid(UTMValue)) {\n setLinkPropertiesModified(true)\n setUtmParams(prev => ({\n ...prev,\n UTMContent: UTMValue\n }))\n }\n }\n\n function setSelectedLinkInfluencerUsername(username) {\n setLinkPropertiesModified(true)\n setSelectedInfluencerUsername(username)\n }\n\n function setSelectedProducts(products) {\n setLinkPropertiesModified(true)\n setUserSelectedProducts(products)\n }\n\n function setSelectedCollections(collections) {\n setLinkPropertiesModified(true)\n setUserSelectedCollections(collections)\n }\n\n function setDescription(linkDescription) {\n setLinkPropertiesModified(true)\n setLinkDescription(linkDescription)\n }\n\n function setPromocode(promocode) {\n setLinkPropertiesModified(true)\n setPromocodeState(prev => ({\n ...prev,\n code: promocode\n }))\n }\n\n function setImage(imageFile) {\n setDidUploadImages(false)\n setLinkPropertiesModified(true)\n setLinkData(prev => {\n const imagesToSave = [{\n // Determins here whether the imageFile is a blob image url or a shopeaks cdn url or an image file object\n src: typeof imageFile === 'string' && (imageFile.startsWith('blob') || imageFile.includes(SHOPEAKS_CDN_DOMAIN)) ? imageFile : URL.createObjectURL(imageFile),\n id: uuidV4()\n }]\n uploadImages(imagesToSave)\n\n return ({\n ...prev,\n images: imagesToSave\n })\n })\n }\n\n function closeDialog() {\n setDialogState(prev => ({\n ...prev,\n isOpen: false\n }))\n }\n\n function resetUTMParams() {\n setUtmParams({\n UTMSource: '',\n UTMMedium: '',\n UTMCampaign: '',\n UTMTerm: '',\n UTMContent: ''\n })\n setLinkPropertiesModified(true)\n }\n\n function setShouldAddUTMParams(value) {\n if (!value) {\n resetUTMParams()\n }\n\n setShouldAddUTMs(value)\n }\n\n function renderContent() {\n return <EditLinkSection\n image={linkData?.images[0]?.src}\n setImage={setImage}\n selectedProducts={userSelectedProducts}\n setSelectedProducts={setSelectedProducts}\n selectedCollections={userSelectedCollections}\n setSelectedCollections={setSelectedCollections}\n description={linkDescription}\n setDescription={setDescription}\n promocode={promocodeState.code}\n setPromocode={setPromocode}\n linkPropertiesModified={linkPropertiesModified}\n influencers={influencers}\n originalInfluencerUsername={originalInfluencerUsername}\n selectedInfluencerUsername={selectedInfluencerUsername}\n setSelectedInfluencerUsername={setSelectedLinkInfluencerUsername}\n mode={mode}\n shouldAddUTMs={shouldAddUTMs}\n setShouldAddUTMs={setShouldAddUTMParams}\n utmParams={utmParams}\n setUTMSource={setLinkUTMSource}\n setUTMMedium={setLinkUTMMedium}\n setUTMCampaign={setLinkUTMCampaign}\n setUTMTerm={setLinkUTMTerm}\n setUTMContent={setLinkUTMContent}\n hasSavedInfluencer={hasSavedInfluencer}\n setIsInfluencerChanged={setIsInfluencerChanged}\n preferedSearchProductIds={linkData?.preferedSearchProductIds}\n />\n }\n\n function getTopbarCenterTitle() {\n switch (mode) {\n case VIEW_MODES.EDIT: return t('LINK_VIEW_TOPBAR_CENTER_TITLE_EDIT_LINK')\n case VIEW_MODES.CREATE: return t('LINK_VIEW_TOPBAR_CENTER_TITLE_CREATE_LINK')\n default: return t('LINK_VIEW_TOPBAR_CENTER_TITLE_PREVIEW_LINK')\n }\n }\n\n function renderTopbarSaveButton() {\n switch (mode) {\n case VIEW_MODES.CREATE: return t('LINK_VIEW_TOPBAR_CREATE_BUTTON_TEXT')\n case VIEW_MODES.EDIT: return t('LINK_VIEW_TOPBAR_SAVE_BUTTON_TEXT')\n default: return ''\n }\n }\n\n return (\n <>\n {isLoadingLink && <ContentDialogLoader />}\n <div className={isMobile ? \"mobile-link-view-container\" : \"link-view-container\"}>\n <ContentDialogTopbar\n title={getTopbarCenterTitle()}\n onBackButtonClick={() => history.goBack()}\n rightElement={<>\n <LoaderButton\n className='page-view-topbar-save-button'\n buttonText={renderTopbarSaveButton()}\n isLoading={isSavingLink}\n loaderCircleColor='#0095f6'\n isDisabled={!isAbleToSaveChanges || isSavingLink}\n onClick={save}\n />\n </>}\n />\n <div className={isMobile ? \"mobile-link-view-content\" : \"link-view-content\"}>\n <div className={isMobile ? \"mobile-link-view-details-and-simulator\" : \"link-view-details-and-simulator\"}>\n <div className={`${isMobile ? \"mobile-link-view-details-container\" : \"link-view-details-container\"}`}>\n {\n isMobile ? renderContent() : <div className=\"link-view-details-content\">{renderContent()}</div>\n }\n </div>\n {\n !isMobile && <div className=\"link-view-preview-container\">\n <MobileLinkPreviewSimulator\n mainImageUrl={hasLinkImages() ? linkData?.images[0]?.src : ''}\n products={userSelectedProducts}\n />\n </div>\n }\n </div>\n </div>\n <PaydinDialog\n isDialogOpen={dialogState.isOpen}\n handleDialogClose={dialogState.handleDialogClose}\n title={dialogState.title}\n message={dialogState.message}\n closeOnRightClick={true}\n rightButtonType={PAYDIN_DIALOG_BUTTON_TYPES.SECONDARY}\n leftButtonText={dialogState.leftButtonText}\n rightButtonText={dialogState.rightButtonText}\n isLeftButtonWithLoader={false}\n isRightButtonWithLoader={dialogState.isRightButtonWithLoader}\n onRightButtonClick={dialogState.rightButtonClickHandler}\n onLeftButtonClick={dialogState.leftButtonClickHandler}\n />\n </div>\n </>\n )\n}","import React from 'react'\nimport './UrlSelectionType.css'\nimport { isMobile } from 'utils/deviceUtils'\nimport ImageBox from 'components/ImageBox/ImageBox'\nimport { SHORT_URL_SELECTION_TYPE_ELEMENT_IMAGE_BORDER_RADIUS, SHORT_URL_SELECTION_TYPE_SELECTED_ELEMENT_BORDER_WIDTH } from 'constants/general.constants'\nimport MultiLineText from 'components/MultiLineText/MultiLineText'\n\nexport default function UrlSelectionType({\n image: Image,\n dimens = 0,\n title = '',\n isSelected = false,\n imageClassName = '',\n onClick = () => { },\n hasChangedData = false,\n isDisabled = false,\n \n}) {\n const containerStyles = {\n width: dimens,\n height: dimens,\n borderRadius: `${SHORT_URL_SELECTION_TYPE_ELEMENT_IMAGE_BORDER_RADIUS}px`,\n borderWidth: `${SHORT_URL_SELECTION_TYPE_SELECTED_ELEMENT_BORDER_WIDTH}px`,\n background: `${isDisabled ? 'linear-gradient(to right top, white, white 48.6%, #e1e1e1 49.3%, #e1e1e1 50.7%, white 51.4%, white)' : 'white'}`,\n pointerEvents: isDisabled ? 'none' : 'auto',\n cursor: isDisabled ? 'auto' : 'pointer',\n }\n\n return (\n hasChangedData ? <div className='selected-url-selection-type' onClick={!isDisabled ? onClick : null} style={containerStyles}>\n <ImageBox\n image={Image}\n className='selected-url-selection-type-image'\n isImageFitCover={true}\n showImageBorderRadius={true}\n showImageMask={true}\n borderRadiusPx={SHORT_URL_SELECTION_TYPE_ELEMENT_IMAGE_BORDER_RADIUS - SHORT_URL_SELECTION_TYPE_SELECTED_ELEMENT_BORDER_WIDTH}\n />\n {title && <MultiLineText\n text={title}\n className={isMobile ? 'mobile-selected-url-selection-type-title' : 'selected-url-selection-type-title'}\n lines={2}\n oneWord={true}\n />}\n </div> : <div className={`url-selection-type ${isSelected ? 'selected' : ''}`} onClick={!isDisabled ? onClick : null} style={containerStyles}>\n {Image && <Image className={`url-selection-type-image ${imageClassName}`} />}\n {title && <div className={isMobile ? \"mobile-url-selection-type-title\" : \"url-selection-type-title\"}>{title}</div>}\n </div>\n )\n}","import React from 'react'\n\nexport default function ShortUrlSelectionCollectionTypeImage(props) {\n return (\n <svg\n {...props}\n version=\"1.1\"\n width=\"512\"\n height=\"512\"\n x=\"0\"\n y=\"0\"\n viewBox=\"0 0 4000 4000\"\n >\n <g transform=\"matrix(-6.123233995736766e-17,1,-1,-6.123233995736766e-17,3990,4.547473508864641e-13)\">\n <path\n d=\"M2437.5 2525h-1925c-144.74 0-262.5-117.749-262.5-262.5v-1575C250 542.749 367.76 425 512.5 425h1925c144.74 0 262.5 117.749 262.5 262.5v1575c0 144.751-117.76 262.5-262.5 262.5zM512.5 600c-48.247 0-87.5 39.243-87.5 87.5v1575c0 48.257 39.253 87.5 87.5 87.5h1925c48.247 0 87.5-39.243 87.5-87.5v-1575c0-48.257-39.253-87.5-87.5-87.5z\"\n fill=\"#000000\"\n opacity=\"1\"\n dataoriginal=\"#000000\"\n className=\"\"></path>\n <path\n d=\"M2962.5 3050h-1925c-144.74 0-262.5-117.749-262.5-262.5 0-48.322 39.178-87.5 87.5-87.5s87.5 39.178 87.5 87.5c0 48.257 39.253 87.5 87.5 87.5h1925c48.247 0 87.5-39.243 87.5-87.5v-1575c0-48.257-39.253-87.5-87.5-87.5-48.322 0-87.5-39.178-87.5-87.5s39.178-87.5 87.5-87.5c144.74 0 262.5 117.749 262.5 262.5v1575c0 144.751-117.76 262.5-262.5 262.5z\"\n fill=\"#000000\"\n opacity=\"1\"\n dataoriginal=\"#000000\"\n className=\"\"></path>\n <path\n d=\"M3487.5 3575h-1925c-144.74 0-262.5-117.749-262.5-262.5 0-48.322 39.178-87.5 87.5-87.5s87.5 39.178 87.5 87.5c0 48.257 39.253 87.5 87.5 87.5h1925c48.247 0 87.5-39.243 87.5-87.5v-1575c0-48.257-39.253-87.5-87.5-87.5-48.322 0-87.5-39.178-87.5-87.5s39.178-87.5 87.5-87.5c144.74 0 262.5 117.749 262.5 262.5v1575c0 144.751-117.76 262.5-262.5 262.5z\"\n fill=\"#000000\"\n opacity=\"1\"\n dataoriginal=\"#000000\"\n className=\"\"></path>\n </g>\n </svg>\n )\n}\n","import React from 'react'\nimport './AddCollectionsDialogCollection.css'\nimport ImageBox from 'components/ImageBox/ImageBox'\nimport { BsCheck } from 'react-icons/bs'\nimport { useTranslation } from 'react-i18next'\nimport MultiLineText from 'components/MultiLineText/MultiLineText'\nimport { isMobile } from 'utils/deviceUtils'\n\n/**\n * Represents a collection item inside the {@link AddCollectionsDialog} component\n * @param {object} data - The data of this collection\n * @param {boolean} isItemSelected - Determins whether this item is selected or not\n * @param {function} onItemClick - A function to perfomr whenever this item is clicked\n */\nexport default function AddCollectionsDialogCollection({\n elementRef,\n data = {},\n isItemSelected = false,\n onItemClick = () => { },\n}) {\n const { t } = useTranslation()\n \n return (\n <div className='add-collections-dialog-collection-container' onClick={() => onItemClick()} ref={elementRef}>\n <div className=\"add-collections-dialog-collection-image-frame\">\n <ImageBox\n image={data?.images?.medium?.src}\n className='add-collections-dialog-collection-image'\n showBorder={true}\n border='1px solid #979797'\n isImageFitCover={true}\n showImageMask={true}\n borderRadiusPx={0}\n />\n {data?.title && <MultiLineText \n text={data?.title}\n className={isMobile ? 'mobile-add-collections-dialog-collection-title' : 'add-collections-dialog-collection-title'}\n lines={3}\n treatAsHtml={true}\n oneWord={true}\n />}\n {isItemSelected && <div className='selected-item-mask'>\n <BsCheck className='add-collections-dialog-collection-selected-v-mark' />\n </div>}\n {data?.productsCount && <div className='add-collections-dialog-collection-products-count'>{t('ADD_COLLECTIONS_DIALOG_COLLECTION_PRODUCTS_COUNT', { count: data?.productsCount })}</div>}\n </div>\n </div>\n )\n}","import { environment } from \"conf\"\nimport { COLLECTIONS_API_BASE_URL, SEARCH_ROUTE } from 'constants/api.constants'\nimport { request_auth } from \"services/RequestWrapper\"\n\nconst baseUrl = environment.base_url + COLLECTIONS_API_BASE_URL\n\n/*\n Retrieves all collections.\n Method: [GET]\n URL: /admin/v1/collections/search\n\n Query params:\n =============\n (*) q - The search query string\n (*) count - The page capacity\n (*) skip - The number of elements skiped\n*/\nexport function getCollections(q, count, skip) {\n return new Promise((resolve, reject) => {\n const options = {\n method: 'GET'\n }\n\n const url = `${baseUrl}${SEARCH_ROUTE}?q=${q}&count=${count}&skip=${skip}`\n request_auth(url, options)\n .then(response => {\n if (response.status) {\n resolve(response.data)\n } else {\n reject(response.error)\n }\n })\n .catch(reject)\n })\n}","import React from 'react'\nimport MultiSelectDialog from 'dialogs/MultiSelectDialog/MultiSelectDialog'\nimport { useTranslation } from 'react-i18next'\nimport AddCollectionsDialogCollection from 'components/AddCollectionsDialogCollection/AddCollectionsDialogCollection'\nimport { getCollections } from 'api/collections/collections'\nimport { extractCollectionData } from 'utils/dataUtils'\nimport { \n ADD_COLLECTIONS_DIALOG_DESKTOP_COLUMN_COUNT, \n ADD_COLLECTIONS_DIALOG_MOBILE_COLUMN_COUNT \n} from 'constants/general.constants'\nimport { isMobile } from 'utils/deviceUtils'\n\n/**\n * Represents the dialog for adding collections to the link.\n * @param {boolean} isDialogOpen - Determins whether this dialog is open or not\n * @param {function} handleDialogClose - A function for closing this dialog\n * @param {array} selectedCollections - The list of collections the user selected\n * @param {function} setSelectedCollections - A function that sets the list of selected collections\n * @param {number} selectMaxLimit - The upper bound of items the user can select from the list. If equals to 0, then no limit applied\n * @param {number} selectMinLimit - The lower bound of items the user can select from the list. If equals to 0, then no limit applied\n * @param {function} searchResultFilter - A function for filtering the search results\n */\nexport default function AddCollectionsDialog({\n isDialogOpen,\n handleDialogClose,\n selectedCollections,\n setSelectedCollections,\n selectMaxLimit = 0,\n selectMinLimit = 0,\n searchResultFilter = items => items,\n resetCacheOnClose = false,\n}) {\n const { t } = useTranslation()\n\n function fetchCollections(q, count, skip) {\n return getCollections(q, count, skip)\n }\n\n return (\n <MultiSelectDialog\n selectedItems={selectedCollections}\n setSelectedItems={setSelectedCollections}\n isDialogOpen={isDialogOpen}\n handleDialogClose={handleDialogClose}\n title={t('ADD_COLLECTIONS_DIALOG_TITLE')}\n itemName={t('COLLECTION_ITEM_NAME', { count: selectMaxLimit})}\n viewItemComponent={AddCollectionsDialogCollection}\n selectMaxLimit={selectMaxLimit}\n selectMinLimit={selectMinLimit}\n columnsCount={isMobile ? ADD_COLLECTIONS_DIALOG_MOBILE_COLUMN_COUNT : ADD_COLLECTIONS_DIALOG_DESKTOP_COLUMN_COUNT}\n dataGenerator={fetchCollections}\n dataExtractor={extractCollectionData}\n searchResultFilter={searchResultFilter}\n resetCacheOnClose={resetCacheOnClose}\n />\n )\n}","import React, { useEffect, useRef, useState } from 'react'\nimport './EditShortSection.css'\nimport AddInfluencerSelect from 'components/AddInfluencerSelect/AddInfluencerSelect'\nimport { ALERT_MESSAGE_TYPES, EDIT_LINK_SECTION_LINK_DESCRIPTION_CHARACTER_LIMIT, EDIT_SHORT_PROMOCODE_INPUT_MAX_LENGTH, EDIT_SHORT_SECTION_URL_TEST_DELAY_MILLISECONDS, INPUT_VALIDATION_INDICATIONS, PRICING_PLAN_DATA, SHORT_URL_SELECTION_TYPE, VIEW_MODES } from 'constants/general.constants'\nimport EditFieldSectionInput from 'components/EditFieldSectionInput/EditFieldSectionInput'\nimport { useTranslation } from 'react-i18next'\nimport UTMForm from 'components/UTMForm/UTMForm'\nimport { isMobile } from 'utils/deviceUtils'\nimport { useUserDetailsContext } from 'contexts/User'\nimport { URL_REGEX } from 'constants/regex.constants'\nimport { IoShirtOutline } from 'react-icons/io5'\nimport UrlSelectionType from 'components/UrlSelectionType/UrlSelectionType'\nimport { HiOutlineLink } from 'react-icons/hi'\nimport ShortUrlSelectionCollectionTypeImage from 'embeddedImages/ShortUrlSelectionCollectionTypeImage'\nimport AddProductsDialog from 'dialogs/AddProductsDialog/AddProductsDialog'\nimport AddCollectionsDialog from 'dialogs/AddCollectionsDialog/AddCollectionsDialog'\nimport CollapsingElement from 'components/CollapsingElement/CollapsingElement'\nimport AlertMessage from 'components/AlertMessage/AlertMessage'\nimport { PRICING_PLANS_PAGE_URL } from 'constants/routes.constants'\nimport { useHistoryContext } from 'contexts/History'\nimport PaydinDialog, { PAYDIN_DIALOG_BUTTON_TYPES } from 'dialogs/PaydinDialog/PaydinDialog'\n\n/**\n * Represents the section for editing/creating a short.\n * @param {string} mode - The mode of this section, it determins whether it is creating or editing a short, accepts VIEW_MODES.CREATE or VIEW_MODES.EDIT\n * @param {array} influencers - The list of influencers to allow influencer select\n * @param {string} title - The title of this short\n * @param {function} setTitle - A function for setting the title of this short\n * @param {string} url - The currently displayed url\n * @param {function} setURL - A function for setting the currently displayed url\n * @param {string} originalInfluencerUsername - The currently saved influencer's username\n * @param {string} selectedInfluencerUsername - The currently selected influencer's username\n * @param {function} setSelectedInfluencerUsername - A function for setting the currently seelcted influencer's username\n * @param {string} promocode - The promocode state\n * @param {function} setPromocode - A function for setting the promocode state\n * @param {boolean} shouldAddUTMs - Determins whether the {@link UTMForm} component is visible or not, also determins whether to ignore the UTM fields or not\n * @param {function} setShouldAddUTMs - A function for setting the 'shouldAddUTMs' state\n * @param {string} UTMSource - The UTM source value state\n * @param {function} setUTMSource - A function for setting the UTM source value state\n * @param {string} UTMMedium - The UTM medium value state\n * @param {function} setUTMMedium - A function for setting the UTM medium value state\n * @param {string} UTMCampaign - The UTM campaign value state\n * @param {function} setUTMCampaign - A function for setting the UTM campaign value state\n * @param {string} UTMTerm - The UTM term value state\n * @param {function} setUTMTerm - A function for setting the UTM term value state\n * @param {string} UTMContent - The UTM content value state\n * @param {function} setUTMContent - A function for setting the UTM content value state\n * @param {string} urlInputValidationState - The validation status of the url\n * @param {function} setUrlInputValidationState - A function for setting the validation status of the url\n * @param {boolean} hasSavedInfluencer - Determins whether an influencer was already saved or not\n * @param {function} setIsInfluencerChanged - A function to perform whenever an influencer has changed\n * @param {string} urlSelectionType - The type of url selection for this short\n * @param {function} setUrlSelectionType - A function for setting the type of url selection for this short\n * @param {array} selectedProducts - The list of selected products for this short\n * @param {function} setSelectedProducts - A function for setting the list of selected products for this short\n * @param {array} selectedCollections - The list of selected collections for this short\n * @param {function} setSelectedCollections - A function for setting the list of selected collections for this short\n */\nexport default function EditShortSection({\n mode,\n influencers = [],\n title = '',\n setTitle = () => { },\n url = '',\n setURL = () => { },\n originalInfluencerUsername = '',\n selectedInfluencerUsername = '',\n setSelectedInfluencerUsername = () => { },\n promocode = '',\n setPromocode = () => { },\n shouldAddUTMs = false,\n setShouldAddUTMs = () => { },\n utmParams = {},\n setUTMSource = () => { },\n setUTMMedium = () => { },\n setUTMCampaign = () => { },\n setUTMTerm = () => { },\n setUTMContent = () => { },\n urlInputValidationState = {},\n setUrlInputValidationState = () => { },\n hasSavedInfluencer = false,\n setIsInfluencerChanged = () => { },\n urlSelectionType = SHORT_URL_SELECTION_TYPE.CUSTOM,\n setUrlSelectionType = () => { },\n selectedProducts = [],\n setSelectedProducts = () => { },\n selectedCollections = [],\n setSelectedCollections = () => { },\n shortPropertiesModified = false,\n}) {\n const { t } = useTranslation()\n const { \n userDetails,\n } = useUserDetailsContext()\n const history = useHistoryContext()\n\n const [multiSelectDialogsState, setMultiSelectDialogsState] = useState({\n productsDialogShown: false,\n collectionsDialogShown: false\n })\n const [urlSelectionOptionDimension, setUrlSelectionOptionDimension] = useState(0)\n const [dialogState, setDialogState] = useState({\n isOpen: false,\n title: '',\n message: '',\n leftButtonText: '',\n rightButtonText: '',\n rightButtonClickHandler: () => { }\n })\n\n const urlTypingTimeoutRef = useRef(null)\n const urlSelectionOptionsRef = useRef(null)\n\n function onSelectInfluencer(influencerUsername) {\n const selectedInfluencer = influencers?.find(influencer => influencer?.username === influencerUsername)\n setPromocode(selectedInfluencer?.promocode)\n setSelectedInfluencerUsername(influencerUsername)\n setIsInfluencerChanged(true)\n }\n\n function removeTimeout(timeout) {\n timeout && clearTimeout(timeout)\n }\n\n useEffect(() => {\n if (urlSelectionOptionsRef?.current) {\n setUrlSelectionOptionDimension(`min(calc((${urlSelectionOptionsRef?.current?.clientWidth}px - 30px) / 3), 150px)`)\n }\n }, [])\n\n useEffect(() => {\n if (isCustomUrlTypeSelected()) {\n removeTimeout(urlTypingTimeoutRef?.current)\n if (!url) {\n setUrlInputValidationState({\n status: INPUT_VALIDATION_INDICATIONS.NO_INDICATION,\n isValidating: false\n })\n } else {\n setUrlInputValidationState(prev => ({\n ...prev,\n isValidating: true\n }))\n urlTypingTimeoutRef.current = setTimeout(() => {\n const urlToTest = url.startsWith('https://') || url.startsWith('http://') ? url : `https://${url}`\n const hasBusinessDomain = urlToTest.startsWith('https://' + userDetails?.domain) || urlToTest.startsWith('http://' + userDetails?.domain)\n if (hasBusinessDomain && urlToTest.match(URL_REGEX) != null) {\n setUrlInputValidationState({\n status: INPUT_VALIDATION_INDICATIONS.VALID,\n isValidating: false\n })\n } else {\n setUrlInputValidationState({\n status: INPUT_VALIDATION_INDICATIONS.INVALID,\n isValidating: false\n })\n }\n }, EDIT_SHORT_SECTION_URL_TEST_DELAY_MILLISECONDS)\n }\n }\n }, [url])\n\n function openAddProductsDialog() {\n setMultiSelectDialogsState(prev => ({\n ...prev,\n productsDialogShown: true\n }))\n }\n\n function closeAddProductDialog() {\n setMultiSelectDialogsState(prev => ({\n ...prev,\n productsDialogShown: false\n }))\n }\n\n function openAddCollectionsDialog() {\n setMultiSelectDialogsState(prev => ({\n ...prev,\n collectionsDialogShown: true\n }))\n }\n\n function closeAddCollectionsDialog() {\n setMultiSelectDialogsState(prev => ({\n ...prev,\n collectionsDialogShown: false\n }))\n }\n\n function selectCustomUrl() {\n setSelectedProducts([])\n setSelectedCollections([])\n setURL('')\n setTitle('')\n setUrlSelectionType(SHORT_URL_SELECTION_TYPE.CUSTOM)\n }\n\n function setUserSelectedProducts(selectedProducts) {\n if (selectedProducts?.length > 0) {\n setSelectedCollections([])\n setUrlSelectionType(SHORT_URL_SELECTION_TYPE.PRODUCT)\n setURL(selectedProducts[0]?.url)\n setTitle(selectedProducts[0]?.title)\n }\n setSelectedProducts(selectedProducts)\n }\n\n function setUserSelectedCollections(selectedCollections) {\n if (selectedCollections?.length > 0) {\n setSelectedProducts([])\n setUrlSelectionType(SHORT_URL_SELECTION_TYPE.COLLECTION)\n setURL(selectedCollections[0]?.url)\n setTitle(selectedCollections[0]?.title)\n }\n setSelectedCollections(selectedCollections)\n }\n\n function isProductUrlTypeSelected() {\n return urlSelectionType === SHORT_URL_SELECTION_TYPE.PRODUCT\n }\n\n function isCollectionUrlTypeSelected() {\n return urlSelectionType === SHORT_URL_SELECTION_TYPE.COLLECTION\n }\n\n function isCustomUrlTypeSelected() {\n return urlSelectionType === SHORT_URL_SELECTION_TYPE.CUSTOM\n }\n\n return (\n <div className={isMobile ? 'mobile-edit-short-section-container' : 'edit-short-section-container'}>\n <div ref={urlSelectionOptionsRef} className=\"edit-short-section-url-selection-types\">\n <UrlSelectionType\n title={isProductUrlTypeSelected() ? selectedProducts[0]?.title : t('EDIT_SHORT_SECTION_URL_SELECTION_PRODUCT_TYPE_TITLE')}\n image={isProductUrlTypeSelected() ? selectedProducts[0]?.imageUrl : IoShirtOutline}\n isSelected={isProductUrlTypeSelected()}\n imageClassName='edit-short-section-url-selection-type-image'\n onClick={openAddProductsDialog}\n dimens={urlSelectionOptionDimension}\n hasChangedData={isProductUrlTypeSelected()}\n />\n <UrlSelectionType\n title={isCollectionUrlTypeSelected() ? selectedCollections[0]?.title : t('EDIT_SHORT_SECTION_URL_SELECTION_COLLECTION_TYPE_TITLE')}\n image={isCollectionUrlTypeSelected() ? selectedCollections[0]?.images?.medium?.src : ShortUrlSelectionCollectionTypeImage}\n isSelected={isCollectionUrlTypeSelected()}\n imageClassName='edit-short-section-url-selection-type-image edit-short-section-url-selection-collection-type-image'\n onClick={openAddCollectionsDialog}\n dimens={urlSelectionOptionDimension}\n hasChangedData={isCollectionUrlTypeSelected()}\n />\n <UrlSelectionType\n title={t('EDIT_SHORT_SECTION_URL_SELECTION_CUSTOM_TYPE_TITLE')}\n image={HiOutlineLink}\n isSelected={urlSelectionType === SHORT_URL_SELECTION_TYPE.CUSTOM}\n imageClassName='edit-short-section-url-selection-type-image'\n onClick={selectCustomUrl}\n dimens={urlSelectionOptionDimension}\n />\n </div>\n <CollapsingElement expanded={urlSelectionType === SHORT_URL_SELECTION_TYPE.CUSTOM}>\n <div className={isMobile ? \"mobile-edit-short-section-url-container\" : \"edit-short-section-url-container\"}>\n <EditFieldSectionInput\n value={url}\n setValue={setURL}\n title={t('EDIT_SHORT_URL_INPUT_TITLE')}\n placeholder={t('EDIT_SHORT_URL_INPUT_PLACEHOLDER', { domain: userDetails?.domain })}\n hasValidation={true}\n validationStatus={urlInputValidationState.status}\n validationErrorMessage={t('EDIT_SHORT_URL_ERROR_MESSAGE', { domain: `https://${userDetails?.domain}` })}\n isValidating={urlInputValidationState.isValidating}\n titleStyles={{\n fontSize: isMobile ? '15px' : '17px',\n color: '#7f859e'\n }}\n inputStyles={{\n width: '100%',\n outline: 'none',\n border: '1px solid black',\n borderRadius: '25px',\n }}\n />\n </div>\n </CollapsingElement>\n <div className={isMobile ? \"mobile-edit-short-section-title-container\" : \"edit-short-section-title-container\"}>\n <EditFieldSectionInput\n value={title}\n setValue={setTitle}\n isFramed={true}\n maxLength={EDIT_LINK_SECTION_LINK_DESCRIPTION_CHARACTER_LIMIT}\n title={t('EDIT_SHORT_TITLE_INPUT_TITLE')}\n isOptional={true}\n />\n </div>\n {(userDetails?.isAdmin && influencers && influencers.length > 0) && <div className={isMobile ? \"mobile-edit-short-section-influencer-select-container\" : \"edit-short-section-influencer-select-container\"}>\n <AddInfluencerSelect\n isDisabled={originalInfluencerUsername !== '' || hasSavedInfluencer}\n optionState={selectedInfluencerUsername}\n onOptionClick={onSelectInfluencer}\n options={influencers}\n fullWidth={true}\n isOptional={true}\n />\n </div>}\n <div className={isMobile ? \"mobile-edit-short-section-promocode-container\" : \"edit-short-section-promocode-container\"}>\n <EditFieldSectionInput\n title={t('EDIT_SHORT_PROMOCODE_INPUT_TITLE')}\n value={promocode}\n setValue={setPromocode}\n placeholder={t('EDIT_SHORT_PROMOCODE_INPUT_PLACEHOLDER')}\n maxLength={EDIT_SHORT_PROMOCODE_INPUT_MAX_LENGTH}\n isOptional={true}\n id=\"promocode\"\n />\n </div>\n <div className={isMobile ? \"mobile-edit-short-section-utm-container\" : \"edit-short-section-utm-container\"}>\n {\n userDetails?.isAdmin && <UTMForm\n inlinePadding='20px'\n shouldAddUTMs={shouldAddUTMs}\n setShouldAddUTMs={setShouldAddUTMs}\n UTMSource={utmParams.UTMSource}\n setUTMSource={setUTMSource}\n UTMMedium={utmParams.UTMMedium}\n setUTMMedium={setUTMMedium}\n UTMCampaign={utmParams.UTMCampaign}\n setUTMCampaign={setUTMCampaign}\n UTMTerm={utmParams.UTMTerm}\n setUTMTerm={setUTMTerm}\n UTMContent={utmParams.UTMContent}\n setUTMContent={setUTMContent}\n />\n }\n </div>\n <AddProductsDialog\n isDialogOpen={multiSelectDialogsState.productsDialogShown}\n handleDialogClose={closeAddProductDialog}\n selectedProducts={selectedProducts}\n setSelectedProducts={setUserSelectedProducts}\n selectMaxLimit={1}\n selectMinLimit={1}\n searchResultFilter={products => products.filter(product => product?.url !== '')}\n />\n <AddCollectionsDialog\n isDialogOpen={multiSelectDialogsState.collectionsDialogShown}\n handleDialogClose={closeAddCollectionsDialog}\n selectedCollections={selectedCollections}\n setSelectedCollections={setUserSelectedCollections}\n selectMaxLimit={1}\n selectMinLimit={1}\n searchResultFilter={collections => collections.filter(collection => collection?.url !== '')}\n />\n <PaydinDialog\n isDialogOpen={dialogState.isOpen}\n handleDialogClose={dialogState.handleDialogClose}\n title={dialogState.title}\n message={dialogState.message}\n closeOnRightClick={false}\n rightButtonType={PAYDIN_DIALOG_BUTTON_TYPES.SECONDARY}\n leftButtonText={dialogState.leftButtonText}\n rightButtonText={dialogState.rightButtonText}\n isLeftButtonWithLoader={false}\n isRightButtonWithLoader={false}\n onRightButtonClick={dialogState.rightButtonClickHandler}\n />\n </div>\n )\n}","import React, { useEffect, useState } from 'react'\nimport './ShortView.css'\nimport {\n NO_IMAGE_PLACEHOLDER_URL,\n INPUT_VALIDATION_INDICATIONS,\n LINK_TYPES,\n VIEW_MODES,\n SHORT_URL_SELECTION_TYPE,\n CONTENT_TYPES,\n CREATE_LINK_REDIRECT_TO_PAGE_DELAY,\n SEPERATE_GO_BACK_FOR_SAFARY_DELAY,\n} from 'constants/general.constants'\nimport { isMobile } from 'utils/deviceUtils'\nimport { useTranslation } from 'react-i18next'\nimport PaydinDialog, { PAYDIN_DIALOG_BUTTON_TYPES } from 'dialogs/PaydinDialog/PaydinDialog'\nimport { useHistoryContext } from 'contexts/History'\nimport EditShortSection from 'components/EditShortSection/EditShortSection'\nimport { GetInfluencer, GetInfluencers } from 'api/influencers/influencers'\nimport { GetLinkDetailsAPI, createShortDetails, updateShortDetails } from 'api/links/links'\nimport { useGeneralDataContext, useUserDetailsContext } from 'contexts/User'\nimport { INFLUENCERS_PAGE_URL, SHORTS_PAGE_URL } from 'constants/routes.constants'\nimport { logger } from 'services/CloudLogger'\nimport { isInputValueValid } from 'services/SystemService'\nimport ContentDialogTopbar from 'components/ContentDialogTopbar/ContentDialogTopbar'\nimport { addTimeToDate } from 'utils/dateUtils'\nimport LoaderButton from 'components/LoaderButton/LoaderButton'\nimport { extractCollectionData, extractLinkData, extractProductData } from 'utils/dataUtils'\nimport ContentDialog from 'dialogs/ContentDialog/ContentDialog'\nimport ContentDialogLoader from 'components/ContentDialogLoader/ContentDialogLoader'\nimport { isObjectEmpty } from 'utils/utils'\n\n/**\n * epresents a portion of the screen that displays the short's edit/create panel.\n * @param {string} mode - The mode of this view, it determins whether it is creating or editing a short, accepts VIEW_MODES.CREATE or VIEW_MODES.EDIT\n */\nexport default function ShortView({\n mode,\n data\n}) {\n const { t } = useTranslation()\n const history = useHistoryContext()\n const {\n userDetails,\n setRecentShorts,\n // isFreeUser,\n beginEditing,\n endEditing\n } = useUserDetailsContext()\n const {\n showApprovalMessage,\n setObjectToSave,\n setFinishedCreatingObject,\n setFinishedUpdatingObject\n } = useGeneralDataContext()\n\n const [isLoadingShort, setIsLoadingShort] = useState(true)\n const [isButtonProcessing, setIsButtonProcessing] = useState(false)\n const [isAbleToSaveShort, setIsAbleToSaveShort] = useState(false)\n const [shortPropertiesModified, setShortPropertiesModified] = useState(false)\n const [title, setTitle] = useState('')\n const [url, setUrl] = useState('')\n const [promocode, setPromocode] = useState('')\n const [influencers, setInfluencers] = useState([])\n const [originalInfluencerUsername, setOriginalInfluencerUsername] = useState(userDetails?.isAdmin ? '' : userDetails?.influencerUsername)\n const [selectedInfluencerUsername, setSelectedInfluencerUsername] = useState(userDetails?.isAdmin ? '' : userDetails?.influencerUsername)\n const [selectedInfluencerImage, setSelectedInfluencerImage] = useState(userDetails?.isAdmin ? '' : userDetails?.influencerUsername)\n const [shouldAddUTMs, setShouldAddUTMs] = useState(false)\n const [utmParams, setUtmParams] = useState({\n UTMSource: '',\n UTMMedium: '',\n UTMCampaign: '',\n UTMTerm: '',\n UTMContent: ''\n })\n const [urlInputValidationState, setUrlInputValidationState] = useState({\n status: INPUT_VALIDATION_INDICATIONS.NO_INDICATION,\n isValidating: false\n })\n const [shortData, setShortData] = useState(data?.shortData)\n\n const [dialogState, setDialogState] = useState({\n isOpen: false,\n handleDialogClose: closeDialog,\n title: '',\n message: '',\n leftButtonText: '',\n rightButtonText: '',\n rightButtonClickHandler: () => { },\n leftButtonClickHandler: () => { }\n })\n const [hasSavedInfluencer, setHasSavedInfluencer] = useState(false)\n const [isInfluencerChanged, setIsInfluencerChanged] = useState(false)\n const [urlSelectionType, setUrlSelectionType] = useState('')\n const [selectedProducts, setSelectedProducts] = useState([])\n const [selectedCollections, setSelectedCollections] = useState([])\n\n useEffect(() => {\n loadShortDetails()\n }, [])\n\n useEffect(() => {\n if (shortPropertiesModified) {\n beginEditing()\n addDiscardChangesDialogBackHandler()\n } else {\n endEditing()\n }\n }, [shortPropertiesModified])\n\n useEffect(() => {\n setIsAbleToSaveShort(\n shortPropertiesModified &&\n (\n (isCustomUrlTypeSelected() && urlInputValidationState.status === INPUT_VALIDATION_INDICATIONS.VALID) ||\n isProductUrlTypeSelected() ||\n isCollectionUrlTypeSelected()\n )\n )\n }, [shortPropertiesModified, urlInputValidationState, urlSelectionType])\n\n function populateShortData(shortData) {\n const shoppingRedirectUrl = shortData?.shoppingRedirectUrl ?? (shortData?.shopping_redirect_url ?? '')\n const shortTitle = shortData?.description ?? \"\" // consider the description as the shorts's title\n const utmParams = {\n UTMSource: shortData?.utmParams?.UTMSource ?? (shortData?.utm_params?.utm_source ?? ''),\n UTMMedium: shortData?.utmParams?.UTMMedium ?? (shortData?.utm_params?.utm_medium ?? ''),\n UTMCampaign: shortData?.utmParams?.UTMCampaign ?? (shortData?.utm_params?.utm_campaign ?? ''),\n UTMTerm: shortData?.utmParams?.UTMTerm ?? (shortData?.utm_params?.utm_term ?? ''),\n UTMContent: shortData?.utmParams?.UTMContent ?? (shortData?.utm_params?.utm_content ?? ''),\n }\n\n setShortData({\n linkId: shortData?.linkId ?? (shortData?.link_id ?? ''),\n images: [],\n description: shortData.description ?? '',\n currency: shortData?.currency ?? (shortData?.link_analytics?.currency ?? userDetails?.businessCurrency),\n analytics: {\n views: shortData?.analytics?.views ?? (shortData?.link_analytics?.visits ?? 0),\n checkouts: shortData?.analytics?.checkouts ?? (shortData?.link_analytics?.checkouts ?? 0),\n revenue: shortData?.analytics?.revenue ?? (shortData?.link_analytics?.revenue ?? 0),\n checkoutRequests: shortData?.analytics?.checkoutRequests ?? (shortData?.link_analytics?.requested_checkouts ?? 0)\n },\n promocode: shortData?.promocode ?? (shortData?.promocode?.code ?? ''),\n products: shortData?.products?.map(product => extractProductData(product)),\n title: shortTitle,\n shoppingRedirectUrl,\n influencerUsername: shortData?.influencerUsername ?? (shortData?.influencer_username),\n utmParams\n })\n\n if (userDetails?.isAdmin && shortData?.influencer_username) {\n loadInfluencer(shortData?.influencer_username, shortData?.promocode?.code)\n } else if (userDetails?.isAdmin && !shortData?.influencer_username) {\n GetInfluencers()\n .then(response => {\n setInfluencers(response?.filter(influencer => influencer?.is_active)?.map(influencer => ({\n image: influencer?.profile_image_url ?? NO_IMAGE_PLACEHOLDER_URL,\n username: influencer?.username ?? '',\n isActive: influencer?.is_active ?? false,\n promocode: influencer?.promocode ?? ''\n })))\n })\n .finally(() => {\n setIsLoadingShort(false)\n })\n }\n\n setUrlSelectionType(getUrlSelectionType(shortData))\n setSelectedProducts(shortData?.products ? shortData?.products?.map(product => extractProductData(product)) : [])\n setSelectedCollections(shortData?.collections ? shortData?.collections?.map(collection => extractCollectionData(collection)) : [])\n setPromocode(shortData?.promocode?.code ?? '')\n setTitle(shortTitle)\n setUrl(shoppingRedirectUrl)\n setUtmParams(utmParams)\n setShouldAddUTMs(hasUtmParams(utmParams))\n setIsLoadingShort(false)\n }\n\n function loadShortDetails() {\n if (mode !== VIEW_MODES.CREATE) {\n if (data?.shortData && !isObjectEmpty(data?.shortData)) {\n populateShortData(data?.linkData)\n }\n GetLinkDetailsAPI(data?.linkId)\n .then(shortData => {\n populateShortData(shortData)\n })\n .catch(error => {\n console.log(error)\n history.push(SHORTS_PAGE_URL)\n })\n } else {\n const utmParams = {\n UTMSource: userDetails?.settings?.utmParams?.UTMSource ?? '',\n UTMMedium: userDetails?.settings?.utmParams?.UTMMedium ?? '',\n UTMCampaign: userDetails?.settings?.utmParams?.UTMCampaign ?? '',\n UTMTerm: userDetails?.settings?.utmParams?.UTMTerm ?? '',\n UTMContent: userDetails?.settings?.utmParams?.UTMContent ?? '',\n }\n setUtmParams(utmParams)\n setShouldAddUTMs(hasUtmParams(utmParams))\n\n if (userDetails?.isAdmin) {\n GetInfluencers()\n .then(response => {\n if (data?.influencerUsername) {\n setSelectedInfluencerUsername(data?.influencerUsername)\n }\n setInfluencers(response?.filter(influencer => influencer?.is_active)?.map(influencer => {\n if (data?.influencerUsername === influencer?.username) {\n setPromocode(influencer?.promocode ?? '')\n }\n return {\n image: influencer?.profile_image_url ?? NO_IMAGE_PLACEHOLDER_URL,\n username: influencer?.username ?? '',\n isActive: influencer?.is_active ?? false,\n promocode: influencer?.promocode ?? ''\n }\n }))\n })\n .finally(() => {\n setIsLoadingShort(false)\n })\n } else {\n setPromocode(userDetails?.promocode ?? '')\n setIsLoadingShort(false)\n }\n }\n }\n\n function loadInfluencer(influencerUsername, predefinedPromocode) {\n GetInfluencer(influencerUsername)\n .then(response => {\n setOriginalInfluencerUsername(influencerUsername)\n setSelectedInfluencerUsername(influencerUsername)\n setSelectedInfluencerImage(response?.profile_image_url)\n setInfluencers([{\n image: response?.profile_image_url,\n username: response?.username ?? '',\n isActive: response?.is_active ?? false,\n promocode: response?.promocode ?? ''\n }])\n setPromocode(predefinedPromocode ? predefinedPromocode : (response?.promocode ?? ''))\n })\n .finally(() => {\n setIsLoadingShort(false)\n })\n }\n\n function getUrlSelectionType(shortData) {\n if (shortData?.products && shortData?.products?.length > 0) {\n return SHORT_URL_SELECTION_TYPE.PRODUCT\n }\n\n if (shortData?.collections && shortData?.collections?.length > 0) {\n return SHORT_URL_SELECTION_TYPE.COLLECTION\n }\n\n return SHORT_URL_SELECTION_TYPE.CUSTOM\n }\n\n function hasUtmParams(utmParams) {\n return (\n (![null, undefined].includes(utmParams?.UTMSource) && utmParams?.UTMSource?.length > 0) ||\n (![null, undefined].includes(utmParams?.UTMMedium) && utmParams?.UTMMedium?.length > 0) ||\n (![null, undefined].includes(utmParams?.UTMCampaign) && utmParams?.UTMCampaign?.length > 0) ||\n (![null, undefined].includes(utmParams?.UTMTerm) && utmParams?.UTMTerm?.length > 0) ||\n (![null, undefined].includes(utmParams?.UTMContent) && utmParams?.UTMContent?.length > 0)\n )\n }\n\n function getTitle() {\n switch (mode) {\n case VIEW_MODES.CREATE: return t('SHORT_VIEW_CREATE_NEW_SHORT_TITLE')\n case VIEW_MODES.EDIT: return t('SHORT_VIEW_EDIT_SHORT_TITLE')\n default: return t('SHORT_VIEW_PREVIEW_SHORT_TITLE')\n }\n }\n\n function setShortTitle(title) {\n setShortPropertiesModified(true)\n setTitle(title)\n }\n\n function setShortPromocode(promocode) {\n setShortPropertiesModified(true)\n setPromocode(promocode)\n }\n\n function setShortURL(url) {\n setShortPropertiesModified(true)\n setUrl(url)\n }\n\n function setShortUTMSource(UTMValue) {\n if (isInputValueValid(UTMValue)) {\n setShortPropertiesModified(true)\n setUtmParams(prev => ({\n ...prev,\n UTMSource: UTMValue\n }))\n }\n }\n\n function setShortUTMMedium(UTMValue) {\n if (isInputValueValid(UTMValue)) {\n setShortPropertiesModified(true)\n setUtmParams(prev => ({\n ...prev,\n UTMMedium: UTMValue\n }))\n }\n }\n\n function setShortUTMCampaign(UTMValue) {\n if (isInputValueValid(UTMValue)) {\n setShortPropertiesModified(true)\n setUtmParams(prev => ({\n ...prev,\n UTMCampaign: UTMValue\n }))\n }\n }\n\n function setShortUTMTerm(UTMValue) {\n if (isInputValueValid(UTMValue)) {\n setShortPropertiesModified(true)\n setUtmParams(prev => ({\n ...prev,\n UTMTerm: UTMValue\n }))\n }\n }\n\n function setShortUTMContent(UTMValue) {\n if (isInputValueValid(UTMValue)) {\n setShortPropertiesModified(true)\n setUtmParams(prev => ({\n ...prev,\n UTMContent: UTMValue\n }))\n }\n }\n\n function getShortImage() {\n if (isProductUrlTypeSelected()) {\n return selectedProducts[0]?.imageUrl\n }\n\n if (isCollectionUrlTypeSelected()) {\n return selectedCollections[0]?.images?.medium?.src\n }\n\n return null\n }\n\n function prepareShortUrl(url) {\n if (!url.startsWith('https://') && !url.startsWith('http://')) {\n return 'https://' + url\n }\n\n return url\n }\n\n async function save() {\n setIsButtonProcessing(true)\n const productIds = selectedProducts?.map(product => product?.id)\n const collectionIds = selectedCollections?.map(collection => collection?.id)\n const promocodeToSave = {\n code: promocode\n }\n const urlToSave = prepareShortUrl(url)\n\n if (mode === VIEW_MODES.CREATE) {\n\n createShortDetails(userDetails.businessId, promocodeToSave, title, getShortImage(), productIds, collectionIds, urlToSave, selectedInfluencerUsername, utmParams, LINK_TYPES.SHORT)\n .then(newShort => {\n setObjectToSave(extractLinkData(newShort))\n setShortPropertiesModified(false)\n history.goBackStepsNoPerform()\n setTimeout(() => {\n history.goBack()\n }, SEPERATE_GO_BACK_FOR_SAFARY_DELAY)\n setTimeout(() => {\n setRecentShorts([])\n if (window.location.pathname !== SHORTS_PAGE_URL && window.location.pathname !== INFLUENCERS_PAGE_URL) {\n history.replace(SHORTS_PAGE_URL)\n } else {\n setFinishedCreatingObject(true)\n setTimeout(() => {\n setFinishedCreatingObject(false)\n }, 200)\n }\n }, CREATE_LINK_REDIRECT_TO_PAGE_DELAY)\n }).catch((error) => {\n logger.error(`Error - edit link failure - ${error}`)\n showSaveDetailsErrorMessage()\n setIsButtonProcessing(false)\n })\n } else {\n updateShortDetails(userDetails.businessId, data?.linkId, promocodeToSave, title, getShortImage(), productIds, collectionIds, urlToSave, selectedInfluencerUsername, utmParams, LINK_TYPES.SHORT)\n .then(updatedShort => {\n setObjectToSave(extractLinkData(updatedShort))\n setIsButtonProcessing(false)\n showApprovalMessage(t('EDIT_SHORT_SECTION_CHANGES_SAVED_APPROVAL_MESSAGE_TEXT'))\n setShortPropertiesModified(false)\n history.goBackStepsNoPerform()\n if (isInfluencerChanged) {\n setHasSavedInfluencer(true)\n }\n setFinishedUpdatingObject(true)\n setTimeout(() => {\n setFinishedUpdatingObject(false)\n }, 200)\n }).catch((error) => {\n logger.error(`Error - edit link failure - ${error}`)\n showSaveDetailsErrorMessage()\n setIsButtonProcessing(false)\n })\n }\n }\n\n function closeDialog() {\n setDialogState(prev => ({\n ...prev,\n isOpen: false\n }))\n }\n\n function showSaveDetailsErrorMessage() {\n setDialogState(prev => ({\n ...prev,\n isOpen: true,\n title: t('EDIT_LINK_PAGE_SAVE_DETAILS_ERROR_DIALOG_TITLE'),\n leftButtonText: t('EDIT_LINK_PAGE_SAVE_DETAILS_ERROR_DIALOG_RIGHT_BUTTON_TEXT'),\n rightButtonText: null,\n rightButtonClickHandler: () => { },\n isRightButtonWithLoader: false\n }))\n }\n\n function addDiscardChangesDialogBackHandler() {\n setTimeout(() => {\n history.addBackHandler(() => {\n setDialogState(prev => ({\n ...prev,\n isOpen: true,\n title: t('EDIT_INFLUENCER_SECTION_DISCARD_CHANGES_DIALOG_TITLE'),\n message: t('EDIT_INFLUENCER_SECTION_DISCARD_CHANGES_DIALOG_MESSAGE'),\n leftButtonText: t('EDIT_INFLUENCER_SECTION_DISCARD_CHANGES_DIALOG_LEFT_BUTTON_TEXT'),\n rightButtonText: t('EDIT_INFLUENCER_SECTION_DISCARD_CHANGES_DIALOG_RIGHT_BUTTON_TEXT'),\n leftButtonClickHandler: addDiscardChangesDialogBackHandler,\n rightButtonClickHandler: () => {\n endEditing()\n history.goBack()\n },\n isRightButtonWithLoader: false\n }))\n })\n }, 300)\n }\n\n function goBack() {\n history.goBack()\n }\n\n function renderTopbarSaveButton() {\n switch (mode) {\n case VIEW_MODES.CREATE: return t('SHORT_VIEW_TOPBAR_CREATE_BUTTON_TEXT')\n case VIEW_MODES.EDIT: return t('SHORT_VIEW_TOPBAR_SAVE_BUTTON_TEXT')\n default: return ''\n }\n }\n\n function resetUTMParams() {\n setUtmParams({\n UTMSource: '',\n UTMMedium: '',\n UTMCampaign: '',\n UTMTerm: '',\n UTMContent: ''\n })\n setShortPropertiesModified(true)\n }\n\n function setShouldAddUTMParams(value) {\n if (!value) {\n resetUTMParams()\n }\n\n setShouldAddUTMs(value)\n }\n\n function isProductUrlTypeSelected() {\n return urlSelectionType === SHORT_URL_SELECTION_TYPE.PRODUCT\n }\n\n function isCollectionUrlTypeSelected() {\n return urlSelectionType === SHORT_URL_SELECTION_TYPE.COLLECTION\n }\n\n function isCustomUrlTypeSelected() {\n return urlSelectionType === SHORT_URL_SELECTION_TYPE.CUSTOM\n }\n\n function renderContent() {\n return <EditShortSection\n mode={mode}\n influencers={influencers}\n originalInfluencerUsername={originalInfluencerUsername}\n selectedInfluencerUsername={selectedInfluencerUsername}\n setSelectedInfluencerUsername={setSelectedInfluencerUsername}\n title={title}\n setTitle={setShortTitle}\n url={url}\n setURL={setShortURL}\n promocode={promocode}\n setPromocode={setShortPromocode}\n shouldAddUTMs={shouldAddUTMs}\n setShouldAddUTMs={setShouldAddUTMParams}\n utmParams={utmParams}\n setUTMSource={setShortUTMSource}\n setUTMMedium={setShortUTMMedium}\n setUTMCampaign={setShortUTMCampaign}\n setUTMTerm={setShortUTMTerm}\n setUTMContent={setShortUTMContent}\n urlInputValidationState={urlInputValidationState}\n setUrlInputValidationState={setUrlInputValidationState}\n hasSavedInfluencer={hasSavedInfluencer}\n setIsInfluencerChanged={setIsInfluencerChanged}\n urlSelectionType={urlSelectionType}\n setUrlSelectionType={setUrlSelectionType}\n selectedProducts={selectedProducts}\n setSelectedProducts={setSelectedProducts}\n selectedCollections={selectedCollections}\n setSelectedCollections={setSelectedCollections}\n shortPropertiesModified={shortPropertiesModified}\n />\n }\n\n return (\n <div className={isMobile ? 'mobile-short-view-container' : 'short-view-container'}>\n <ContentDialogTopbar\n title={getTitle()}\n onBackButtonClick={goBack}\n rightElement={\n <LoaderButton\n className='page-view-topbar-save-button'\n isDisabled={!isAbleToSaveShort || isButtonProcessing}\n buttonText={renderTopbarSaveButton()}\n isLoading={isButtonProcessing}\n loaderCircleColor='#0095f6'\n onClick={save}\n />\n }\n />\n <div className={isMobile ? \"mobile-short-view-content\" : \"short-view-content\"} style={{ height: isMobile ? `100dvh` : `calc(var(--content-dialog-height) - var(--content-dialog-topbar-height))` }}>\n {isLoadingShort && <ContentDialogLoader />}\n {renderContent()}\n </div>\n <PaydinDialog\n isDialogOpen={dialogState.isOpen}\n handleDialogClose={dialogState.handleDialogClose}\n title={dialogState.title}\n message={dialogState.message}\n closeOnRightClick={true}\n rightButtonType={PAYDIN_DIALOG_BUTTON_TYPES.SECONDARY}\n leftButtonText={dialogState.leftButtonText}\n rightButtonText={dialogState.rightButtonText}\n isLeftButtonWithLoader={false}\n isRightButtonWithLoader={dialogState.isRightButtonWithLoader}\n onRightButtonClick={dialogState.rightButtonClickHandler}\n onLeftButtonClick={dialogState.leftButtonClickHandler}\n />\n </div>\n )\n}","import React, { useEffect, useRef, useState } from 'react'\nimport './EditInfluencerSection.css'\nimport ImageBox from 'components/ImageBox/ImageBox'\nimport EditFieldSectionInput from 'components/EditFieldSectionInput/EditFieldSectionInput'\nimport { isMobile } from 'utils/deviceUtils'\nimport { useTranslation } from 'react-i18next'\nimport ImageCropDialog from 'dialogs/ImageCropDialog/ImageCropDialog'\nimport { EDIT_INFLUENCER_SECTION_VALIDATION_TIMEOUT_MILLISECONDS, INFLUENCER_PROMOCODE_LENGTH_LIMIT, INPUT_VALIDATION_INDICATIONS, PAYDIN_IMAGE_CROPPER_ASPECT_RATIOS, RESIZE_IMAGE_MAX_HEIGHT, RESIZE_IMAGE_MAX_WIDTH, VIEW_MODES } from 'constants/general.constants'\nimport { resizeImage } from 'services/imageUtils'\nimport { validateInfluencerUsername } from 'api/influencers/influencers'\nimport { EMAIL_PATTERN_REGEX, INFLUENCER_USERNAME_REGEX, NUMBERS_WITH_SYMBOLS_REGEX, PHONE_NUMBER_REGEX } from 'constants/regex.constants'\nimport { containsWhitespace, formatUsername, isNumberInRange } from 'utils/utils'\nimport PaydinSwitch from 'components/PaydinSwitch/PaydinSwitch'\nimport ExpandHideButton from 'components/ExpandHideButton/ExpandHideButton'\nimport CollapsingElement from 'components/CollapsingElement/CollapsingElement'\nimport Tooltip from 'components/Tooltip/Tooltip'\n\n/**\n * Represents the section for editing/creating an influencer.\n * @param {string} mode - The mode of this section, it determins whether it is creating or editing an influencer, accepts VIEW_MODES.CREATE or VIEW_MODES.EDIT\n * @param {boolean} isButtonDisabled - Determins whether the button is disabled or not\n * @param {boolean} isButtonProcessing - Determins whether the button's loader is shown or not\n * @param {string} image - The influencer's image\n * @param {function} setImage - A function for setting the influencer's image\n * @param {string} username - The influencer's username\n * @param {function} setUsername - A function for setting the influencer's username\n * @param {string} email - The influencer's email\n * @param {function} setEmail - A function for setting the influencer's email\n * @param {string} promocode - The influencer's promocode\n * @param {function} setPromocode - A function for setting the influencer's promocode\n * @param {string} commission - The influencer's commission\n * @param {function} setCommission - A function for setting the influencer's commission\n * @param {string} commissionHelperText - A helper text for the commission input\n * @param {function} setCommissionHelperText - A function for setting the helper text for the commission input\n * @param {string} commissionValidationStatus - The validation status for the commission input\n * @param {function} setCommissionValidationStatus - A function for setting the validation status for the commission input\n * @param {string} phoneNumber - The influencer's phone number\n * @param {function} setPhoneNumber - A function for setting the influencer's phone number\n * @param {string} phoneNumberValidationStatus - The validation status of the phone number input\n * @param {function} setPhoneNumberValidationStatus - A function for setting the validation status of the phone number input\n * @param {string} phoneNumberHelperText - A helper text for the phone number input\n * @param {function} setPhoneNumberHelperText - A function for setting the helper text for the phone number input\n * @param {function} isActiveInfluencer - If true, it means that the influencer can edit and create links, otherwise he can't\n * @param {function} setIsActiveInfluencer - A function for setting the influencer's activity\n * @param {function} setIsUsernameValid - A function for setting the validity of the influencer's username\n * @param {function} setIsEmailValid - A function for setting the validity of the influencer's email\n * @param {object} influencerPermissions - The analytics permissions object of the influencer\n * @param {function} setInfluencerClicksPermission - A function for setting the influencer's clicks permission\n * @param {function} setInfluencerSalesPermission - A function for setting the influencer's sales permission\n * @param {function} setInfluencerRevenuePermission - A function for setting the influencer's revenue permission\n */\nexport default function EditInfluencerSection({\n mode,\n image,\n setImage,\n username,\n setUsername,\n email,\n originalEmail,\n setEmail,\n promocode,\n setPromocode,\n commission,\n setCommission,\n commissionHelperText,\n setCommissionHelperText,\n commissionValidationStatus,\n setCommissionValidationStatus,\n phoneNumber,\n setPhoneNumber,\n phoneNumberValidationStatus,\n setPhoneNumberValidationStatus,\n phoneNumberHelperText,\n setPhoneNumberHelperText,\n isActiveInfluencer,\n setIsActiveInfluencer,\n setIsUsernameValid = () => { },\n setIsEmailValid = () => { },\n influencerPermissions = {},\n setInfluencerCommissionPermission = () => { },\n setInfluencerClicksPermission = () => { },\n setInfluencerSalesPermission = () => { },\n setInfluencerRevenuePermission = () => { },\n setInfluencerAovEnabledPermission = () => { },\n setInfluencerCrEnabledPermission = () => { },\n commissionRules = {},\n setReduceRefundsFromCommission = () => { },\n setReduceVatFromCommission = () => { },\n revenueRules = {},\n setNetRevenueRatio = () => { },\n netRevenueRatioValidationStatus = INPUT_VALIDATION_INDICATIONS.NO_INDICATION,\n setNetRevenueRatioValidationStatus = () => {},\n netRevenueRatioHelperText = \"\",\n setNetRevenueRatioHelperText = () => {},\n shouldTestEmailValidationStatus = true,\n}) {\n const { t } = useTranslation()\n const [isImageCropDialogOpen, setIsImageCropDialogOpen] = useState(false)\n const [cropperTempImage, setCropperTempImage] = useState(false)\n const [validationIndicatorState, setValidationIndicatorState] = useState({\n username: {\n validationStatus: INPUT_VALIDATION_INDICATIONS.NO_INDICATION,\n isValidating: false\n },\n email: {\n validationStatus: INPUT_VALIDATION_INDICATIONS.NO_INDICATION,\n isValidating: false\n }\n })\n const [validationErrorMessagesState, setValidationErrorMessagesState] = useState({\n username: '',\n email: ''\n })\n const [shouldMarkImageRequired, setShouldMarkImageRequired] = useState(false)\n const [isAnalyticsPermissionsShown, setIsAnalyticsPermissionsShown] = useState(true)\n const [wasEmailFilledBefore, setWasEmailFilledBefore] = useState(false)\n\n const [netRevenueRatioToggle, setNetRevenueRatioToggle] = useState(false)\n\n const fileInputRef = useRef(null)\n const usernameValidationTimeoutRef = useRef(null)\n const emailValidationTimeoutRef = useRef(null)\n\n useEffect(() => {\n if (mode === VIEW_MODES.CREATE) {\n if (usernameValidationTimeoutRef?.current)\n clearTimeout(usernameValidationTimeoutRef?.current)\n\n if (username) {\n usernameValidationTimeoutRef.current = setTimeout(() => {\n if (username) {\n if (isUsernameFormatValid(username)) {\n validateUsername(username)\n } else {\n setUsernameValidationStatus(INPUT_VALIDATION_INDICATIONS.INVALID)\n setUsernameValidatingState(false)\n setValidationErrorMessagesState(prev => ({\n ...prev,\n username: t('EDIT_INFLUENCER_SECTION_INVALID_USERNAME_FORMAT_HELPER_TEXT')\n }))\n }\n } else {\n setUsernameValidationStatus(INPUT_VALIDATION_INDICATIONS.NO_INDICATION)\n setUsernameValidatingState(false)\n }\n }, EDIT_INFLUENCER_SECTION_VALIDATION_TIMEOUT_MILLISECONDS)\n } else {\n setUsernameValidationStatus(INPUT_VALIDATION_INDICATIONS.NO_INDICATION)\n setUsernameValidatingState(false)\n setIsUsernameValid(false)\n }\n } else {\n setNetRevenueRatioToggle(!(revenueRules?.netRevenueRatio === 100 || revenueRules?.netRevenueRatio === null))\n }\n }, [username])\n\n useEffect(() => {\n if (emailValidationTimeoutRef?.current)\n clearTimeout(emailValidationTimeoutRef?.current)\n\n if (email === originalEmail) {\n setEmailValidationStatus(INPUT_VALIDATION_INDICATIONS.NO_INDICATION)\n setIsEmailValid(true)\n return\n }\n\n if (email) {\n setWasEmailFilledBefore(true)\n emailValidationTimeoutRef.current = setTimeout(() => {\n if (email) {\n if (isEmailFormatValid(email)) {\n setEmailValidationStatus(INPUT_VALIDATION_INDICATIONS.VALID)\n setEmailValidatingState(false)\n setIsEmailValid(true)\n } else {\n setEmailValidationStatus(INPUT_VALIDATION_INDICATIONS.INVALID)\n setIsEmailValid(false)\n setValidationErrorMessagesState(prev => ({\n ...prev,\n email: t('EDIT_INFLUENCER_SECTION_INVALID_EAMIL_FORMAT_HELPER_TEXT')\n }))\n }\n } else {\n setEmailValidationStatus(INPUT_VALIDATION_INDICATIONS.NO_INDICATION)\n setEmailValidatingState(false)\n }\n }, EDIT_INFLUENCER_SECTION_VALIDATION_TIMEOUT_MILLISECONDS)\n } else {\n if (mode === VIEW_MODES.EDIT || wasEmailFilledBefore) {\n setEmailValidationStatus(INPUT_VALIDATION_INDICATIONS.INVALID)\n setValidationErrorMessagesState(prev => ({\n ...prev,\n email: t('EDIT_INFLUENCER_SECTION_INVALID_EAMIL_FORMAT_HELPER_TEXT')\n }))\n }\n }\n }, [email])\n\n function isUsernameFormatValid(username) {\n return !containsWhitespace(username)\n }\n\n function isEmailFormatValid(email) {\n return EMAIL_PATTERN_REGEX.test(email)\n }\n\n function closeImageCropDialog() {\n setIsImageCropDialogOpen(false)\n }\n\n function addMedia() {\n fileInputRef.current.value = null\n fileInputRef.current.click()\n }\n\n function onApplyCrop(croppedImage, crop, zoom, aspectRatio) {\n setProfileImage(croppedImage)\n setIsImageCropDialogOpen(false)\n }\n\n async function onImageChange(event) {\n if (event.target.files && event.target.files[0]) {\n const resizedImage = await resizeImage(event.target.files[0], RESIZE_IMAGE_MAX_WIDTH, RESIZE_IMAGE_MAX_HEIGHT)\n setCropperTempImage(URL.createObjectURL(resizedImage))\n setIsImageCropDialogOpen(true)\n }\n }\n\n function setUsernameValidatingState(state) {\n setValidationIndicatorState(prev => ({\n ...prev,\n username: {\n ...prev.username,\n isValidating: state\n }\n }))\n }\n\n function setEmailValidatingState(state) {\n setValidationIndicatorState(prev => ({\n ...prev,\n email: {\n ...prev.email,\n isValidating: state\n }\n }))\n }\n\n function setUsernameValidationStatus(validationStatus) {\n setValidationIndicatorState(prev => ({\n ...prev,\n username: {\n ...prev.username,\n validationStatus\n }\n }))\n }\n\n function setEmailValidationStatus(validationStatus) {\n setValidationIndicatorState(prev => ({\n ...prev,\n email: {\n ...prev.email,\n validationStatus\n }\n }))\n }\n\n function validateUsername(username) {\n setUsernameValidationStatus(INPUT_VALIDATION_INDICATIONS.NO_INDICATION)\n setUsernameValidatingState(true)\n validateInfluencerUsername(username)\n .then(() => {\n if (username) {\n setUsernameValidationStatus(INPUT_VALIDATION_INDICATIONS.VALID)\n setUsernameValidatingState(false)\n setIsUsernameValid(true)\n }\n })\n .catch(error => {\n if (username) {\n setUsernameValidationStatus(INPUT_VALIDATION_INDICATIONS.INVALID)\n setUsernameValidatingState(false)\n setIsUsernameValid(false)\n setValidationErrorMessagesState(prev => ({\n ...prev,\n username: t('EDIT_INFLUENCER_SECTION_INVALID_USERNAME_HELPER_TEXT')\n }))\n }\n })\n }\n\n function renderAddMediaFrame(className = '') {\n return <div className={`${isMobile ? 'mobile-edit-influencer-section-add-media-button' : 'edit-influencer-section-add-media-button'} ${className}`}>\n <div className=\"edit-influencer-section-add-media-button-inner-container\">\n <div className={isMobile ? \"mobile-edit-influencer-section-add-media-button-plus\" : \"edit-influencer-section-add-media-button-plus\"}>+</div>\n <div className=\"edit-influencer-section-add-media-button-text\">{t('EDIT_LINK_SECTION_ADD_MEDIA_BUTTON_TEXT')}</div>\n </div>\n </div>\n }\n\n function setProfileImage(image) {\n setShouldMarkImageRequired(false)\n setImage(image)\n }\n\n function setInfluencerUsername(value) {\n setShouldMarkImageRequired(!image ? true : false)\n if (INFLUENCER_USERNAME_REGEX.test(value)) {\n setUsername(formatUsername(value))\n }\n }\n\n function setInfluencerEmail(value) {\n setShouldMarkImageRequired(!image ? true : false)\n setEmail(value)\n }\n\n function setInfluencerPromocode(value) {\n setShouldMarkImageRequired(!image ? true : false)\n setPromocode(value)\n }\n\n function isCommissionValid(commission) {\n if (commission.includes('.')) {\n const fractionalNumberPart = commission?.split('.')[1]\n return NUMBERS_WITH_SYMBOLS_REGEX.test(commission) && fractionalNumberPart.length <= 2\n } else {\n return NUMBERS_WITH_SYMBOLS_REGEX.test(commission)\n }\n }\n\n function setInfluencerCommission(value) {\n setShouldMarkImageRequired(!image ? true : false)\n if (isCommissionValid(value)) {\n setCommission(value?.length > 1 && value?.startsWith('0') ? value?.slice(1) : value)\n }\n\n if (value === '' || isNumberInRange(Number(value), 0, 100)) {\n setCommissionValidationStatus(INPUT_VALIDATION_INDICATIONS.NO_INDICATION)\n setCommissionHelperText('')\n } else {\n setCommissionValidationStatus(INPUT_VALIDATION_INDICATIONS.INVALID)\n setCommissionHelperText(t('EDIT_INFLUENCER_SECTION_INVALID_COMMISSION_ERROR_TEXT'))\n }\n }\n\n function setInfluencerPhoneNumber(value) {\n setShouldMarkImageRequired(!image ? true : false)\n setPhoneNumber(value)\n\n if (value === '' || PHONE_NUMBER_REGEX.test(value)) {\n setPhoneNumberValidationStatus(INPUT_VALIDATION_INDICATIONS.NO_INDICATION)\n setPhoneNumberHelperText('')\n } else {\n setPhoneNumberValidationStatus(INPUT_VALIDATION_INDICATIONS.INVALID)\n setPhoneNumberHelperText(t('EDIT_INFLUENCER_SECTION_INVALID_PHONE_NUMBER_ERROR_TEXT'))\n }\n }\n\n function setInfluencerActivity(isActive) {\n setShouldMarkImageRequired(!image ? true : false)\n setIsActiveInfluencer(isActive)\n }\n\n function toggleAnalyticsPermissionsDisplay() {\n setIsAnalyticsPermissionsShown(prev => !prev)\n }\n\n function setInfluencerNetRevenueRatio(value) {\n setShouldMarkImageRequired(!image ? true : false)\n if (isCommissionValid(value)) { // Same rules as commission\n setNetRevenueRatio(value?.length > 1 && value?.startsWith('0') ? value?.slice(1) : value)\n }\n\n if (value === '' || isNumberInRange(Number(value), 0, 100)) {\n setNetRevenueRatioValidationStatus(INPUT_VALIDATION_INDICATIONS.NO_INDICATION)\n setNetRevenueRatioHelperText('')\n } else {\n setNetRevenueRatioValidationStatus(INPUT_VALIDATION_INDICATIONS.INVALID)\n setNetRevenueRatioHelperText(t('EDIT_INFLUENCER_SECTION_INVALID_NET_REVENUE_RATIO_ERROR_TEXT'))\n }\n }\n\n function switchNetRevenueRatioToggle(isOn) {\n setNetRevenueRatio(100)\n setNetRevenueRatioToggle(isOn)\n }\n\n return (\n <div className={isMobile ? 'mobile-edit-influencer-section' : 'edit-influencer-section'}>\n <div className={isMobile ? \"mobile-edit-influencer-section-image-frame\" : \"edit-influencer-section-image-frame\"}>\n <div className=\"edit-influencer-section-image-frame-title\">{t('EDIT_INFLUENCER_SECTION_PROFILE_IMAGE_TITLE')}</div>\n <div className={`edit-influencer-section-image-container ${shouldMarkImageRequired ? 'required' : ''}`} onClick={addMedia}>\n {\n image ? <>\n <ImageBox\n image={image}\n className={isMobile ? 'mobile-edit-influencer-section-image' : 'edit-influencer-section-image'}\n roundImage={true}\n isImageFitCover={true}\n showImageLoader={true}\n showBorder={true}\n />\n {renderAddMediaFrame('has-image')}\n </> : <>\n {renderAddMediaFrame()}\n </>\n }\n </div>\n </div>\n {shouldMarkImageRequired && <div className='edit-influencer-section-image-container-error-message'>{t('EDIT_INFLUENCER_SECTION_PROFILE_IMAGE_ERROR_MESSAGE')}</div>}\n <form className=\"edit-influencer-section-form\">\n <EditFieldSectionInput\n title={t('EDIT_INFLUENCER_SECTION_USERNAME_INPUT_TITLE')}\n value={username}\n setValue={setInfluencerUsername}\n isDisabled={mode === VIEW_MODES.EDIT}\n hasValidation={mode === VIEW_MODES.CREATE}\n isValidating={validationIndicatorState.username.isValidating}\n validationStatus={validationIndicatorState.username.validationStatus}\n validationErrorMessage={validationErrorMessagesState.username}\n id=\"username\"\n />\n <EditFieldSectionInput\n title={t('EDIT_INFLUENCER_SECTION_EMAIL_INPUT_TITLE')}\n value={email}\n setValue={setInfluencerEmail}\n hasValidation={true}\n shouldTestValidationStatus={shouldTestEmailValidationStatus}\n shouldResetValidation={!(mode === VIEW_MODES.EDIT || wasEmailFilledBefore)}\n isValidating={validationIndicatorState.email.isValidating}\n validationStatus={validationIndicatorState.email.validationStatus}\n validationErrorMessage={validationErrorMessagesState.email}\n id=\"email\"\n />\n <EditFieldSectionInput\n title={t('EDIT_INFLUENCER_SECTION_PHONE_NUMBER_INPUT_TITLE')}\n value={phoneNumber}\n setValue={setInfluencerPhoneNumber}\n isOptional={true}\n hasValidation={true}\n validationStatus={phoneNumberValidationStatus}\n validationErrorMessage={phoneNumberHelperText}\n id=\"phone-number\"\n />\n <PaydinSwitch\n checked={isActiveInfluencer}\n setChecked={setInfluencerActivity}\n label={t('EDIT_LINK_SECTION_INFLUENCER_ACTIVITY_SWITCH_LABEL')}\n className='edit-influencer-switch'\n labelClassName='edit-influencer-switch-label'\n />\n <EditFieldSectionInput\n title={t('EDIT_INFLUENCER_SECTION_PROMOCODE_INPUT_TITLE')}\n value={promocode}\n setValue={setInfluencerPromocode}\n isOptional={true}\n maxLength={INFLUENCER_PROMOCODE_LENGTH_LIMIT}\n id=\"promocode\"\n />\n <EditFieldSectionInput\n title={t('EDIT_INFLUENCER_SECTION_COMMISSION_INPUT_TITLE')}\n value={commission}\n setValue={setInfluencerCommission}\n isOptional={true}\n inputType='number'\n hasValidation={true}\n validationStatus={commissionValidationStatus}\n validationErrorMessage={commissionHelperText}\n prefixStart={false}\n prefix='%'\n showValidationIcon={false}\n id=\"commission\"\n />\n <div className=\"edit-influencer-section-influencer-commission-calculation-sections-container\">\n <div className=\"edit-influencer-section-influencer-commission-calculation-section\">\n <PaydinSwitch\n checked={commissionRules?.reduceRefundsFromCommission}\n setChecked={setReduceRefundsFromCommission}\n label={t('EDIT_LINK_SECTION_INFLUENCER_COMMISSION_REDUCE_REFUNDS_LABEL')}\n labelClassName='edit-influencer-switch-label'\n />\n </div>\n <div className=\"edit-influencer-section-influencer-commission-calculation-section\">\n <PaydinSwitch\n checked={commissionRules?.reduceVatFromCommission}\n setChecked={setReduceVatFromCommission}\n label={t('EDIT_LINK_SECTION_INFLUENCER_COMMISSION_REDUCE_VAT_LABEL')}\n labelClassName='edit-influencer-switch-label'\n />\n </div>\n <div className=\"edit-influencer-section-influencer-commission-calculation-section\">\n <PaydinSwitch\n checked={netRevenueRatioToggle}\n setChecked={switchNetRevenueRatioToggle}\n label={t('EDIT_LINK_SECTION_INFLUENCER_COMMISSION_NET_REVENUE_RATIO')}\n labelClassName='edit-influencer-switch-label'\n />\n <Tooltip\n tooltipText={t('EDIT_LINK_SECTION_INFLUENCER_COMMISSION_NET_REVENUE_RATIO_TOOLTIP_TEXT')}\n swapHorizontal={true}\n />\n </div>\n <CollapsingElement\n expanded={netRevenueRatioToggle}\n > \n <div className=\"edit-influencer-section-influencer-commission-calculation-section\" style={{width: 'min(100%, max(50%, 200px))'}}>\n <EditFieldSectionInput\n title={t('EDIT_INFLUENCER_SECTION_COMMISSION_INPUT_TITLE')}\n value={revenueRules?.netRevenueRatio}\n setValue={setInfluencerNetRevenueRatio}\n isOptional={true}\n inputType='number'\n hasValidation={true}\n validationStatus={netRevenueRatioValidationStatus}\n validationErrorMessage={netRevenueRatioHelperText}\n prefixStart={false}\n prefix='%'\n showValidationIcon={false}\n id=\"commission\"\n />\n </div>\n </CollapsingElement>\n </div>\n <div className=\"edit-influencer-section-influencer-permissions\">\n <div className=\"edit-influencer-section-influencer-permissions-title-container\">\n <div className=\"edit-influencer-section-influencer-permissions-title\">{t('EDIT_LINK_SECTION_LINK_PERMISSIONS_TITLE') + ' ' + t('OPTIONAL_INPUT_TITLE_SUFFIX')}</div>\n <ExpandHideButton\n isExpanded={isAnalyticsPermissionsShown}\n onClick={toggleAnalyticsPermissionsDisplay}\n />\n </div>\n <CollapsingElement\n expanded={isAnalyticsPermissionsShown}\n >\n <div className=\"edit-influencer-section-influencer-permissions-sections-container\">\n <div className=\"edit-influencer-section-influencer-permissions-section\">\n <PaydinSwitch\n checked={influencerPermissions?.commissionEnabled}\n setChecked={setInfluencerCommissionPermission}\n label={t('EDIT_LINK_SECTION_LINK_PERMISSIONS_COMMISSION_LABEL')}\n labelClassName='edit-influencer-switch-label'\n />\n </div>\n <div className=\"edit-influencer-section-influencer-permissions-section\">\n <PaydinSwitch\n checked={influencerPermissions?.clicksEnabled}\n setChecked={setInfluencerClicksPermission}\n label={t('EDIT_LINK_SECTION_LINK_PERMISSIONS_CLICKS_LABEL')}\n labelClassName='edit-influencer-switch-label'\n />\n </div>\n <div className=\"edit-influencer-section-influencer-permissions-section\">\n <PaydinSwitch\n checked={influencerPermissions?.salesEnabled}\n setChecked={setInfluencerSalesPermission}\n label={t('EDIT_LINK_SECTION_LINK_PERMISSIONS_SALES_LABEL')}\n labelClassName='edit-influencer-switch-label'\n />\n </div>\n\n <CollapsingElement expanded={influencerPermissions?.salesEnabled}>\n <div className=\"edit-influencer-section-influencer-permissions-section sub-permission\">\n <PaydinSwitch\n checked={influencerPermissions?.crEnabled}\n setChecked={setInfluencerCrEnabledPermission}\n label={t('EDIT_LINK_SECTION_LINK_PERMISSIONS_CR_ENABLED_LABEL')}\n labelClassName='edit-influencer-switch-label'\n checkedBackgroundColor='#658dc4'\n />\n </div>\n </CollapsingElement>\n <div className=\"edit-influencer-section-influencer-permissions-section\">\n <PaydinSwitch\n checked={influencerPermissions?.revenueEnabled}\n setChecked={setInfluencerRevenuePermission}\n label={t('EDIT_LINK_SECTION_LINK_PERMISSIONS_REVENUE_LABEL')}\n labelClassName='edit-influencer-switch-label'\n />\n </div>\n <CollapsingElement expanded={influencerPermissions?.revenueEnabled}>\n <div className=\"edit-influencer-section-influencer-permissions-sections-container\">\n <div className=\"edit-influencer-section-influencer-permissions-section sub-permission\">\n <PaydinSwitch\n checked={influencerPermissions?.aovEnabled}\n setChecked={setInfluencerAovEnabledPermission}\n label={t('EDIT_LINK_SECTION_LINK_PERMISSIONS_AOV_ENABLED_LABEL')}\n labelClassName='edit-influencer-switch-label'\n checkedBackgroundColor='#658dc4'\n />\n </div>\n </div>\n </CollapsingElement>\n </div>\n </CollapsingElement>\n </div>\n </form>\n <ImageCropDialog\n isDialogOpen={isImageCropDialogOpen}\n handleDialogClose={closeImageCropDialog}\n image={cropperTempImage}\n aspectRatiosArray={PAYDIN_IMAGE_CROPPER_ASPECT_RATIOS}\n onCropDone={onApplyCrop}\n isRoundCrop={true}\n isInfluencerImageCropper={true}\n />\n <input ref={fileInputRef} type=\"file\" accept=\"image/*\" onChange={onImageChange} style={{ display: 'none' }} />\n </div>\n )\n}","import React, { useEffect, useState } from 'react'\nimport './InfluencerView.css'\nimport { CONTENT_TYPES, CREATE_LINK_REDIRECT_TO_PAGE_DELAY, INPUT_VALIDATION_INDICATIONS, MOBILE_DASHBOARD_TOPBAR_OPTIONS_DRAWER_CLOSING_DELAY, PAYDIN_MENU_OPENING_DIRECTIONS, SEPERATE_GO_BACK_FOR_SAFARY_DELAY, VIEW_MODES } from 'constants/general.constants'\nimport { t } from 'i18next'\nimport EditInfluencerSection from 'components/EditInfluencerSection/EditInfluencerSection'\nimport { useHistoryContext } from 'contexts/History'\nimport { GetInfluencer, createInfluencer, deactivateInfluencer, resetInfluencerPassword, updateInfluencer } from 'api/influencers/influencers'\nimport PaydinDialog, { PAYDIN_DIALOG_BUTTON_TYPES } from 'dialogs/PaydinDialog/PaydinDialog'\nimport { isMobile } from 'utils/deviceUtils'\nimport { uploadFile } from 'utils/utils'\nimport { logger } from 'services/CloudLogger'\nimport ContentDialogTopbar from 'components/ContentDialogTopbar/ContentDialogTopbar'\nimport LoaderButton from 'components/LoaderButton/LoaderButton'\nimport { useGeneralDataContext, useUserDetailsContext } from 'contexts/User'\nimport PaydinMenu from 'components/PaydinMenu/PaydinMenu'\nimport ContentDialog from 'dialogs/ContentDialog/ContentDialog'\nimport {\n extractInfluencerData\n} from 'utils/dataUtils'\nimport { copyToClipboard } from 'services/SystemService'\nimport { INFLUENCERS_PAGE_URL, LOGIN_INFLUENCER_INFLUENCER_PASSWORD_QUERY_PARAMETER, LOGIN_INFLUENCER_INFLUENCER_USERNAME_QUERY_PARAMETER, LOGIN_INFLUENCER_MERCHANT_NAME_QUERY_PARAMETER, LOGIN_INFLUENCER_PAGE_URL } from 'constants/routes.constants'\nimport ContentDialogLoader from 'components/ContentDialogLoader/ContentDialogLoader'\n\n/**\n * Represents a portion of the screen that displays the influencer's edit/create panel.\n * @param {string} mode - The mode of this view, it determins whether it is creating or editing an influencer, accepts VIEW_MODES.CREATE or VIEW_MODES.EDIT\n */\nexport default function InfluencerView({\n mode,\n data\n}) {\n const history = useHistoryContext()\n const {\n userDetails,\n setRecentInfluencers,\n beginEditing,\n endEditing\n } = useUserDetailsContext()\n const {\n showApprovalMessage,\n setObjectToSave,\n setFinishedCreatingObject,\n setFinishedUpdatingObject\n } = useGeneralDataContext()\n\n const [influencerData, setInfluencerData] = useState({\n username: '',\n image: '',\n email: '',\n utm: '',\n promocode: '',\n commission: null,\n password: '',\n analytics: {\n clicks: 0,\n sales: 0,\n revenue: 0\n },\n links: [],\n shorts: []\n })\n const [isLoadingInfluencer, setIsLoadingInfluencer] = useState(false)\n const [isButtonProcessing, setIsButtonProcessing] = useState(false)\n const [isAbleToSaveInfluencer, setIsAbleToSaveInfluencer] = useState(false)\n const [influencerPropertiesModified, setInfluencerPropertiesModified] = useState(false)\n const [image, setImage] = useState('')\n const [username, setUsername] = useState('')\n const [isUsernameValid, setIsUsernameValid] = useState(false)\n const [isEmailValid, setIsEmailValid] = useState(false)\n const [email, setEmail] = useState('')\n const [originalEmail, setOriginalEmail] = useState(null)\n const [promocode, setPromocode] = useState('')\n const [phoneNumber, setPhoneNumber] = useState('')\n const [phoneNumberValidationStatus, setPhoneNumberValidationStatus] = useState(INPUT_VALIDATION_INDICATIONS.NO_INDICATION)\n const [phoneNumberHelperText, setPhoneNumberHelperText] = useState('')\n const [commission, setCommission] = useState(0)\n const [commissionValidationStatus, setCommissionValidationStatus] = useState(INPUT_VALIDATION_INDICATIONS.NO_INDICATION)\n const [commissionHelperText, setCommissionHelperText] = useState('')\n const [dialogState, setDialogState] = useState({\n isOpen: false,\n handleDialogClose: closeDialog,\n title: '',\n message: '',\n leftButtonText: '',\n rightButtonText: '',\n rightButtonClickHandler: () => { },\n leftButtonClickHandler: () => { },\n })\n const [influencerPermissions, setInfluencerPermissions] = useState({\n commissionEnabled: false,\n clicksEnabled: false,\n salesEnabled: false,\n crEnabled: false,\n revenueEnabled: false,\n aovEnabled: false,\n isActiveInfluencer: false\n })\n const [influencerCommissionRules, setInfluencerCommissionRules] = useState({\n reduceRefundsFromCommission: false,\n reduceVatFromCommission: false,\n })\n const [influencerRevenueRules, setInfluencerRevenueRules] = useState({\n netRevenueRatio: 100,\n })\n const [netRevenueRatioValidationStatus, setNetRevenueRatioValidationStatus] = useState(INPUT_VALIDATION_INDICATIONS.NO_INDICATION)\n const [netRevenueRatioHelperText, setNetRevenueRatioHelperText] = useState('')\n const [shouldTestEmailValidationStatus, setShouldTestEmailValidationStatus] = useState(false)\n\n useEffect(() => {\n if (mode === VIEW_MODES.EDIT) {\n setIsLoadingInfluencer(true)\n GetInfluencer(data?.influencerUsername)\n .then(response => {\n setImage(response?.profile_image_url ?? '')\n setUsername(response?.username ?? '')\n setEmail(response?.email ?? '')\n setOriginalEmail(response?.email ?? '')\n setPromocode(response?.promocode ?? '')\n setPhoneNumber(response?.phone ?? '')\n setCommission(!response?.commission ? 0 : response?.commission)\n setInfluencerPermissions({\n commissionEnabled: response?.permissions?.analytics_commission_enabled ?? false,\n clicksEnabled: response?.permissions?.analytics_clicks_enabled ?? false,\n salesEnabled: response?.permissions?.analytics_sales_enabled ?? false,\n crEnabled: response?.permissions?.analytics_cr_enabled ?? false,\n revenueEnabled: response?.permissions?.analytics_revenue_enabled ?? false,\n aovEnabled: response?.permissions?.analytics_aov_enabled ?? false,\n isActiveInfluencer: response?.permissions?.allow_creating_and_editing_links ?? false,\n })\n setInfluencerCommissionRules({\n reduceRefundsFromCommission: response?.commission_rules?.reduce_refunds_from_commission ?? false,\n reduceVatFromCommission: response?.commission_rules?.reduce_vat_from_commission ?? false,\n })\n setInfluencerRevenueRules({\n netRevenueRatio: response?.revenue_rules?.net_revenue_ratio ?? 100,\n })\n })\n .catch(error => {\n console.log(error)\n })\n .finally(() => {\n setIsLoadingInfluencer(false)\n setShouldTestEmailValidationStatus(true)\n })\n }\n }, [])\n\n useEffect(() => {\n if (influencerPropertiesModified) {\n beginEditing()\n addDiscardChangesDialogBackHandler()\n } else {\n endEditing()\n }\n }, [influencerPropertiesModified])\n\n useEffect(() => {\n setIsAbleToSaveInfluencer(\n influencerPropertiesModified &&\n (mode === VIEW_MODES.CREATE ? (isUsernameValid && isEmailValid) : (username && username.length > 0 && email && email.length > 0)) &&\n image &&\n commissionValidationStatus !== INPUT_VALIDATION_INDICATIONS.INVALID &&\n phoneNumberValidationStatus !== INPUT_VALIDATION_INDICATIONS.INVALID &&\n netRevenueRatioValidationStatus !== INPUT_VALIDATION_INDICATIONS.INVALID\n )\n }, [influencerPropertiesModified, image, username, email, isUsernameValid, isEmailValid, commissionValidationStatus, phoneNumberValidationStatus, netRevenueRatioValidationStatus])\n\n function setInfluencerCommissionPermission(allowPermission) {\n setInfluencerPropertiesModified(true)\n setInfluencerPermissions(prev => ({\n ...prev,\n commissionEnabled: allowPermission\n }))\n }\n\n function setInfluencerClicksPermission(allowPermission) {\n setInfluencerPropertiesModified(true)\n setInfluencerPermissions(prev => ({\n ...prev,\n clicksEnabled: allowPermission\n }))\n }\n\n function setInfluencerSalesPermission(allowPermission) {\n setInfluencerPropertiesModified(true)\n setInfluencerPermissions(prev => ({\n ...prev,\n salesEnabled: allowPermission,\n ...(!allowPermission ? { crEnabled: true } : {})\n }))\n }\n\n function setInfluencerRevenuePermission(allowPermission) {\n setInfluencerPropertiesModified(true)\n setInfluencerPermissions(prev => ({\n ...prev,\n revenueEnabled: allowPermission,\n ...(!allowPermission ? { aovEnabled: true } : {})\n }))\n }\n\n function setInfluencerAovEnabledPermission(allowPermission) {\n setInfluencerPropertiesModified(true)\n setInfluencerPermissions(prev => ({\n ...prev,\n aovEnabled: allowPermission\n }))\n }\n \n function setInfluencerCrEnabledPermission(allowPermission) {\n setInfluencerPropertiesModified(true)\n setInfluencerPermissions(prev => ({\n ...prev,\n crEnabled: allowPermission\n }))\n }\n\n function getTitle() {\n switch (mode) {\n case VIEW_MODES.PREVIEW: return data?.influencerUsername\n case VIEW_MODES.CREATE: return t('INFLUENCER_VIEW_CREATE_TITLE')\n default: return t('INFLUENCER_VIEW_EDIT_TITLE')\n }\n }\n\n function setInfluencerProfileImage(image) {\n setInfluencerPropertiesModified(true)\n setImage(typeof image === 'string' && image.startsWith('blob') ? image : URL.createObjectURL(image),)\n }\n\n function setInfluencerUsername(username) {\n setInfluencerPropertiesModified(true)\n setUsername(username)\n }\n\n function setInfluencerEmail(email) {\n setInfluencerPropertiesModified(true)\n setEmail(email)\n }\n\n function setInfluencerPromocode(promocode) {\n setInfluencerPropertiesModified(true)\n setPromocode(promocode)\n }\n\n function setInfluencerCommission(commission) {\n setInfluencerPropertiesModified(true)\n setCommission(commission)\n }\n\n function setInfluencerPhoneNumber(phone) {\n setInfluencerPropertiesModified(true)\n setPhoneNumber(phone)\n }\n\n function setInfluencerCommissionReduceRefund(reduceRefunds) {\n setInfluencerPropertiesModified(true)\n setInfluencerCommissionRules(prev => ({\n ...prev,\n reduceRefundsFromCommission: reduceRefunds\n }))\n }\n\n function setInfluencerCommissionReduceVat(reduceVat) {\n setInfluencerPropertiesModified(true)\n setInfluencerCommissionRules(prev => ({\n ...prev,\n reduceVatFromCommission: reduceVat\n }))\n }\n\n function setInfluencerNetRevenueRatio(netRevenueRatio) {\n setInfluencerPropertiesModified(true)\n setInfluencerRevenueRules(prev => ({\n ...prev,\n netRevenueRatio: netRevenueRatio\n }))\n }\n\n function setInfluencerActivity(isActive) {\n setInfluencerPropertiesModified(true)\n setInfluencerPermissions(prev => ({\n ...prev,\n isActiveInfluencer: isActive\n }))\n }\n\n function renderContent() {\n if (mode === VIEW_MODES.EDIT) {\n return <EditInfluencerSection\n mode={mode}\n image={image}\n setImage={setInfluencerProfileImage}\n username={username}\n email={email}\n originalEmail={originalEmail}\n setEmail={setInfluencerEmail}\n setIsEmailValid={setIsEmailValid}\n promocode={promocode}\n setPromocode={setInfluencerPromocode}\n commission={commission}\n setCommission={setInfluencerCommission}\n commissionValidationStatus={commissionValidationStatus}\n setCommissionValidationStatus={setCommissionValidationStatus}\n commissionHelperText={commissionHelperText}\n setCommissionHelperText={setCommissionHelperText}\n phoneNumber={phoneNumber}\n setPhoneNumber={setInfluencerPhoneNumber}\n phoneNumberValidationStatus={phoneNumberValidationStatus}\n setPhoneNumberValidationStatus={setPhoneNumberValidationStatus}\n phoneNumberHelperText={phoneNumberHelperText}\n setPhoneNumberHelperText={setPhoneNumberHelperText}\n influencerPermissions={influencerPermissions}\n isActiveInfluencer={influencerPermissions?.isActiveInfluencer}\n setIsActiveInfluencer={setInfluencerActivity}\n setInfluencerCommissionPermission={setInfluencerCommissionPermission}\n setInfluencerClicksPermission={setInfluencerClicksPermission}\n setInfluencerSalesPermission={setInfluencerSalesPermission}\n setInfluencerRevenuePermission={setInfluencerRevenuePermission}\n setInfluencerAovEnabledPermission={setInfluencerAovEnabledPermission}\n setInfluencerCrEnabledPermission={setInfluencerCrEnabledPermission}\n commissionRules={influencerCommissionRules}\n setReduceRefundsFromCommission={setInfluencerCommissionReduceRefund}\n setReduceVatFromCommission={setInfluencerCommissionReduceVat}\n revenueRules={influencerRevenueRules}\n setNetRevenueRatio={setInfluencerNetRevenueRatio}\n netRevenueRatioValidationStatus={netRevenueRatioValidationStatus}\n setNetRevenueRatioValidationStatus={setNetRevenueRatioValidationStatus}\n netRevenueRatioHelperText={netRevenueRatioHelperText}\n setNetRevenueRatioHelperText={setNetRevenueRatioHelperText}\n shouldTestEmailValidationStatus={shouldTestEmailValidationStatus}\n />\n } else {\n return <EditInfluencerSection\n mode={mode}\n image={image}\n setImage={setInfluencerProfileImage}\n username={username}\n setUsername={setInfluencerUsername}\n setIsUsernameValid={setIsUsernameValid}\n email={email}\n originalEmail={originalEmail}\n setEmail={setInfluencerEmail}\n setIsEmailValid={setIsEmailValid}\n promocode={promocode}\n setPromocode={setInfluencerPromocode}\n commission={commission}\n setCommission={setInfluencerCommission}\n commissionValidationStatus={commissionValidationStatus}\n setCommissionValidationStatus={setCommissionValidationStatus}\n commissionHelperText={commissionHelperText}\n setCommissionHelperText={setCommissionHelperText}\n phoneNumber={phoneNumber}\n setPhoneNumber={setInfluencerPhoneNumber}\n phoneNumberValidationStatus={phoneNumberValidationStatus}\n setPhoneNumberValidationStatus={setPhoneNumberValidationStatus}\n phoneNumberHelperText={phoneNumberHelperText}\n setPhoneNumberHelperText={setPhoneNumberHelperText}\n influencerPermissions={influencerPermissions}\n isActiveInfluencer={influencerPermissions?.isActiveInfluencer}\n setIsActiveInfluencer={setInfluencerActivity}\n setInfluencerCommissionPermission={setInfluencerCommissionPermission}\n setInfluencerClicksPermission={setInfluencerClicksPermission}\n setInfluencerSalesPermission={setInfluencerSalesPermission}\n setInfluencerRevenuePermission={setInfluencerRevenuePermission}\n setInfluencerAovEnabledPermission={setInfluencerAovEnabledPermission}\n setInfluencerCrEnabledPermission={setInfluencerCrEnabledPermission}\n commissionRules={influencerCommissionRules}\n setReduceRefundsFromCommission={setInfluencerCommissionReduceRefund}\n setReduceVatFromCommission={setInfluencerCommissionReduceVat}\n revenueRules={influencerRevenueRules}\n netRevenueRatioValidationStatus={netRevenueRatioValidationStatus}\n setNetRevenueRatioValidationStatus={setNetRevenueRatioValidationStatus}\n netRevenueRatioHelperText={netRevenueRatioHelperText}\n setNetRevenueRatioHelperText={setNetRevenueRatioHelperText}\n setNetRevenueRatio={setInfluencerNetRevenueRatio}\n />\n }\n }\n\n function resetValidations() {\n setCommissionValidationStatus(INPUT_VALIDATION_INDICATIONS.NO_INDICATION)\n setCommissionHelperText('')\n setPhoneNumberValidationStatus(INPUT_VALIDATION_INDICATIONS.NO_INDICATION)\n setPhoneNumberHelperText('')\n setNetRevenueRatioValidationStatus(INPUT_VALIDATION_INDICATIONS.NO_INDICATION)\n setNetRevenueRatioHelperText('')\n }\n\n async function save() {\n resetValidations()\n setIsButtonProcessing(true)\n let imageToSave = image\n await uploadFile(image, null, url => {\n imageToSave = url\n }, () => {\n console.log('an error as occurred during file upload...')\n })\n\n if (!imageToSave.startsWith('blob')) {\n if (mode === VIEW_MODES.CREATE) {\n createInfluencer(username, email, imageToSave, promocode, commission, phoneNumber, influencerPermissions, influencerCommissionRules, influencerRevenueRules)\n .then(newInfluencer => {\n setObjectToSave(extractInfluencerData(newInfluencer))\n setInfluencerPropertiesModified(false)\n history.goBackStepsNoPerform()\n setTimeout(() => {\n history.goBack()\n }, SEPERATE_GO_BACK_FOR_SAFARY_DELAY)\n setTimeout(() => {\n setRecentInfluencers([])\n if (window.location.pathname !== INFLUENCERS_PAGE_URL) {\n history.push(INFLUENCERS_PAGE_URL)\n } else {\n setFinishedCreatingObject(true)\n setTimeout(() => {\n setFinishedCreatingObject(false)\n }, 200)\n }\n }, CREATE_LINK_REDIRECT_TO_PAGE_DELAY)\n // TODO create 1 context data to store all the loaded links, shorts and influencers\n }).catch((error) => {\n logger.error(`Error - create influencer failure - ${error}`)\n showSaveDetailsErrorMessage()\n setIsButtonProcessing(false)\n })\n } else {\n updateInfluencer(username, email, imageToSave, promocode, commission, phoneNumber, influencerPermissions, influencerCommissionRules,influencerRevenueRules)\n .then(updatedInfluencer => {\n setObjectToSave(extractInfluencerData(updatedInfluencer))\n showApprovalMessage(t('EDIT_INFLUENCER_SECTION_CHANGES_SAVED_APPROVAL_MESSAGE_TEXT'))\n setIsButtonProcessing(false)\n setInfluencerPropertiesModified(false)\n history.goBackStepsNoPerform()\n setFinishedUpdatingObject(true)\n setTimeout(() => {\n setFinishedUpdatingObject(false)\n }, 200)\n }).catch((error) => {\n logger.error(`Error - edit influencer failure - ${error}`)\n showSaveDetailsErrorMessage()\n setIsButtonProcessing(false)\n })\n }\n } else {\n setDialogState(prev => ({\n ...prev,\n isOpen: true,\n title: t('UPLOAD_FILE_ERROR_DIALOG_TITLE'),\n leftButtonText: t('UPLOAD_FILE_ERROR_DIALOG_RIGHT_BUTTON_TEXT'),\n rightButtonText: null,\n rightButtonClickHandler: () => { },\n isRightButtonWithLoader: false\n }))\n setIsButtonProcessing(false)\n }\n }\n\n function closeDialog() {\n setDialogState(prev => ({\n ...prev,\n isOpen: false\n }))\n }\n\n function showSaveDetailsErrorMessage() {\n setDialogState(prev => ({\n ...prev,\n isOpen: true,\n title: t('EDIT_LINK_PAGE_SAVE_DETAILS_ERROR_DIALOG_TITLE'),\n leftButtonText: t('EDIT_LINK_PAGE_SAVE_DETAILS_ERROR_DIALOG_RIGHT_BUTTON_TEXT'),\n rightButtonText: null,\n rightButtonClickHandler: () => { },\n isRightButtonWithLoader: false\n }))\n }\n\n function addDiscardChangesDialogBackHandler() {\n setTimeout(() => {\n history.addBackHandler(() => {\n setDialogState(prev => ({\n ...prev,\n isOpen: true,\n title: t('EDIT_INFLUENCER_SECTION_DISCARD_CHANGES_DIALOG_TITLE'),\n message: t('EDIT_INFLUENCER_SECTION_DISCARD_CHANGES_DIALOG_MESSAGE'),\n leftButtonText: t('EDIT_INFLUENCER_SECTION_DISCARD_CHANGES_DIALOG_LEFT_BUTTON_TEXT'),\n rightButtonText: t('EDIT_INFLUENCER_SECTION_DISCARD_CHANGES_DIALOG_RIGHT_BUTTON_TEXT'),\n leftButtonClickHandler: addDiscardChangesDialogBackHandler,\n rightButtonClickHandler: () => {\n endEditing()\n history.goBack()\n },\n isRightButtonWithLoader: false\n }))\n })\n }, 300)\n }\n\n function goBack() {\n history.goBack()\n }\n\n function renderTopbarSaveButton() {\n switch (mode) {\n case VIEW_MODES.CREATE: return t('SHORT_VIEW_TOPBAR_CREATE_BUTTON_TEXT')\n case VIEW_MODES.EDIT: return t('SHORT_VIEW_TOPBAR_SAVE_BUTTON_TEXT')\n default: return ''\n }\n }\n\n return (\n <div className={isMobile ? 'mobile-influencer-view-container' : 'influencer-view-container'}>\n <ContentDialogTopbar\n title={getTitle()}\n onBackButtonClick={goBack}\n rightElement={<>\n <LoaderButton\n className='page-view-topbar-save-button'\n buttonText={renderTopbarSaveButton()}\n isLoading={isButtonProcessing}\n loaderCircleColor='#0095f6'\n isDisabled={!isAbleToSaveInfluencer || isButtonProcessing}\n onClick={save}\n />\n </>}\n />\n <div className={isMobile ? \"mobile-influencer-view-content\" : \"influencer-view-content\"}>\n {isLoadingInfluencer && <ContentDialogLoader />}\n {renderContent()}\n </div>\n <PaydinDialog\n isDialogOpen={dialogState.isOpen}\n handleDialogClose={dialogState.handleDialogClose}\n title={dialogState.title}\n message={dialogState.message}\n closeOnRightClick={true}\n rightButtonType={PAYDIN_DIALOG_BUTTON_TYPES.SECONDARY}\n leftButtonText={dialogState.leftButtonText}\n rightButtonText={dialogState.rightButtonText}\n isLeftButtonWithLoader={false}\n isRightButtonWithLoader={dialogState.isRightButtonWithLoader}\n onRightButtonClick={dialogState.rightButtonClickHandler}\n onLeftButtonClick={dialogState.leftButtonClickHandler}\n />\n </div>\n )\n}","import React from 'react'\nimport './LinkAnalyticsSection.css'\n\n/**\n * Represents an analytics section inside the link preview page to display a piece of data about the link.\n * @param {string} title - The title for this section\n * @param {string} value - The value for this section\n */\nexport default function LinkAnalyticsSection({\n title = '',\n value = ''\n}) {\n return (\n <div className='link-analytics-section'>\n <div className=\"link-analytics-title\">{title}</div>\n <div className=\"link-analytics-value\">{value}</div>\n </div>\n )\n}","import { DEFAULT_CURRENCY_CODE } from \"constants/general.constants\";\nimport getSymbolFromCurrency from \"currency-symbol-map\";\n\nexport function getCurrencySymbol(currencyCode) {\n if (!currencyCode) return getCurrencySymbol(DEFAULT_CURRENCY_CODE)\n return getSymbolFromCurrency(currencyCode) ?? \"\"\n}","import React from 'react'\nimport './InfluencerStrip.css'\nimport ImageBox from 'components/ImageBox/ImageBox'\nimport { useTranslation } from 'react-i18next'\nimport { isMobile } from 'utils/deviceUtils'\n\n/**\n * Represents a strip of display for an influencer.\n * Used in link/short preview pages.\n * @param {string} image - The image url of the influencer\n * @param {string} username - The username of the influencer\n */\nexport default function InfluencerStrip({\n image,\n username,\n promocode\n}) {\n const { t } = useTranslation()\n\n return (\n <div className={isMobile ? \"mobile-influencer-strip-container\" : \"influencer-strip-container\"}>\n <div className=\"influencer-strip-title\">{t('INFLUENCER_STRIP_TITLE')}</div>\n <div className={isMobile ? \"mobile-influencer-strip-content\" : \"influencer-strip-content\"}>\n {image && <ImageBox\n image={image}\n className='influencer-strip-image-container'\n imageClassName='influencer-strip-image'\n roundImage={true}\n />}\n <div className=\"influencer-strip-username\">{username}{promocode ? ` (${promocode})` : ''}</div>\n </div>\n </div>\n )\n}","import React from 'react'\nimport './ColorfulTag.css'\n\n/**\n * Represents a colorful tag which displays a text with a bullet.\n * @param {string} text - The text of this tag\n * @param {string} backgroundColor - The background color of this tag\n * @param {boolean} isSmall - Determins whether this tag has reduced padding or not\n * @param {string} textColor - The text color of the tag\n * @param {string} textSize - The text size of the tag\n */\nexport default function ColorfulTag({\n text,\n backgroundColor,\n isSmall,\n textColor = '#555555',\n textSize = null,\n hasHorizontalMargin = false,\n showBullet = true,\n}) {\n return (\n <div className={`colorful-tag ${isSmall ? 'small' : ''}`} style={{ marginLeft: hasHorizontalMargin && '20px', backgroundColor, fontSize: textSize ?? (isSmall ? '11px' : '13px') }}>\n {showBullet && <div className={`colorful-tag-bullet ${isSmall ? 'small' : ''}`}></div>}\n <div className=\"colorful-tag-text\" style={{ color: textColor }}>{text}</div>\n </div>\n )\n}","import React, { useMemo } from 'react'\nimport { LINK_TYPES, SHORT_URL_SELECTION_TYPE } from 'constants/general.constants'\nimport ColorfulTag from 'components/ColorfulTag/ColorfulTag'\nimport Tooltip from 'components/Tooltip/Tooltip'\nimport { isMobile } from 'utils/deviceUtils'\n\n/**\n * Represents a tag that is labled on a short to describe which type of url is this\n * Uses {@link ColorfulTag} to display the styled tag.\n * @param {string} type - The type of the short url\n * @param {boolean} isSmall - Determins whether this tag has reduced padding or not\n */\nexport default function LinkUrlTypeTag({\n type,\n isSmall = false,\n hasHorizontalMargin = false,\n showTooltip = false,\n tooltipText = ''\n}) {\n\n const urlTypeData = useMemo(() => getUrlTypeTagData(type), [type])\n\n function getUrlTypeTagData(type) {\n switch (type) {\n case SHORT_URL_SELECTION_TYPE.PRODUCT: return { backgroundColor: '#d0e5fd', text: 'Short' }\n case SHORT_URL_SELECTION_TYPE.COLLECTION: return { backgroundColor: '#d0e5fd', text: 'Short' }\n case SHORT_URL_SELECTION_TYPE.ORGANIC: return { backgroundColor: '#f3d1bb', text: 'Promocode' }\n case LINK_TYPES.SHOPBOARD: return { backgroundColor: '#d9f2d5', text: 'Shop the Feed' }\n case LINK_TYPES.LOOK: return { backgroundColor: '#f2f1d5', text: 'Instant Store' }\n default: return { backgroundColor: '#d0e5fd', text: 'Short' }\n }\n }\n if (showTooltip && !isMobile) {\n return (\n <Tooltip\n image={<ColorfulTag\n text={urlTypeData.text}\n backgroundColor={urlTypeData.backgroundColor}\n isSmall={isSmall}\n hasHorizontalMargin={hasHorizontalMargin}\n />}\n tooltipText={tooltipText}\n oneLine={true}\n />\n )}\n return (\n <ColorfulTag\n text={urlTypeData.text}\n backgroundColor={urlTypeData.backgroundColor}\n isSmall={isSmall}\n hasHorizontalMargin={hasHorizontalMargin}\n />\n )\n}","import React from 'react'\nimport './PreviewItemDataSection.css'\nimport { isMobile } from 'utils/deviceUtils'\n\n/**\n * Represents a section for displaying data in ShortView and LinkView pages\n * @param {string} title - The title of the section\n * @param {boolean} NoBackgroundColor - If true, the background color of this section is removed\n * @param {boolean} hasPadding - If true, this section has padding\n * @param {string} width - The string representing the width for this section\n */\nexport default function PreviewItemDataSection({\n children,\n title = '',\n NoBackgroundColor = false,\n hasPadding = true,\n width\n}) {\n return (\n <div className={isMobile ? 'mobile-preview-item-data-section' : 'preview-item-data-section'} style={{ width: width ?? null, backgroundColor: NoBackgroundColor && 'transparent', padding: !hasPadding && '0' }}>\n {title && <div className='preview-item-data-section-title'>{title}</div>}\n {children}\n </div>\n )\n}","import React from 'react'\nimport './NoItemsFound.css'\nimport ImageBox from 'components/ImageBox/ImageBox'\nimport { isMobile } from 'utils/deviceUtils'\n\n/**\n * Represents a generic \"no items found\" view for indicating that there's no entries available to display.\n * This component can be customized\n * @param {string} className - The view's class name\n * @param {string/DOMElement} image - The image to display on the upper side of the view\n * @param {string} title - The view's title\n * @param {string} subtitle - The view's subtitle\n * @param {string} buttonText - The view's button's text\n * @param {boolean} isEmbeddedIcon - Determins whether the image is passed as a standalone component or as an image url\n * @param {boolean} showButton - Determins whether the lower button will be shown or not\n * @param {string} addItemButtonClickHandler - A function to perform when clicking on the bottom button\n */\nexport default function NoItemsFound({\n className = '',\n image = '',\n title = '',\n subtitle = '',\n buttonText = '',\n buttonStyles = {},\n isEmbeddedIcon = false,\n showButton = true,\n addItemButtonClickHandler = () => { }\n}) {\n return (\n <div className={`no-items-found-container ${className}`}>\n {\n isEmbeddedIcon ?\n image :\n <ImageBox\n image={image}\n className=\"no-items-found-container-image\"\n />\n }\n <div className=\"no-items-found-titles-container\">\n <div className={isMobile ? \"mobile-no-items-found-titles-container-title\" : \"no-items-found-titles-container-title\"}>{title}</div>\n {subtitle && <div className=\"no-items-found-titles-container-subtitle\">{subtitle}</div>}\n </div>\n {showButton && <div className=\"no-items-found-add-item-button\" onClick={addItemButtonClickHandler} style={buttonStyles}>{buttonText}</div>}\n </div>\n )\n}","import React, { useEffect, useMemo, useState } from 'react'\nimport './PaydinTable.css'\nimport Table from '@mui/material/Table'\nimport TableBody from '@mui/material/TableBody'\nimport TableCell from '@mui/material/TableCell'\nimport TableContainer from '@mui/material/TableContainer'\nimport TableHead from '@mui/material/TableHead'\nimport TablePagination from '@mui/material/TablePagination'\nimport TableRow from '@mui/material/TableRow'\nimport Paper from '@mui/material/Paper'\nimport { generateRandomInteger, stableSort } from 'utils/utils'\nimport Loader from 'components/Loader/Loader'\nimport { isMobile } from 'utils/deviceUtils'\nimport NoItemsFound from 'components/NoItemsFound/NoItemsFound'\n\n/**\n * Represents a basic table.\n * @param {string} headerBackgroundColor - The background color for the headers\n * @param {string} headerTextColor - The text color for the headers\n * @param {string} border - A border for the table\n * @param {string} borderRadius - A border radius for the table\n * @param {string} boxShadow - A box shadow for the table\n * @param {number} visibleRowsCount - The number of visible rows at a time in the table\n * @param {number} totalCount - The total quantity of items to display in the table\n * @param {number} rowHeightPx - The height of a single row in the table, in pixels\n * @param {function} dataGenerator - The function that generates data to display in the table\n * @param {Node} noItemsImage - The image to display when there are no items to display\n * @param {Node} noItemsText - The text to display when there are no items to display\n * @param {component} rowView - A generic view that represents a row in the table\n * @param {component} headerView - A generic view that represents a header in the table\n * @param {array} removedColumnIds - An array of column IDs to remove from display\n * @param {boolean} shouldPaginate - If true, the table will perform pagination, otherwise not\n */\nexport default function PaydinTable({\n headerBackgroundColor = '#dadada',\n headerTextColor = 'black',\n border = '',\n borderRadius = '0',\n boxShadow = '0 0 3px 3px #cccccc',\n visibleRowsCount = 5,\n totalCount = null,\n rowHeightPx = 0,\n dataGenerator = () => { },\n noItemsImage = [],\n noItemsText,\n rowView: RowView,\n headerView: HeaderView,\n hideHeaderInMobile = false,\n removedColumnIds,\n shouldPaginate = true,\n showTotalCount = true,\n showPagesSection = true,\n}) {\n const [isDataLoading, setIsDataLoading] = useState(true)\n const [order, setOrder] = useState('asc')\n const [orderBy, setOrderBy] = useState('')\n const [page, setPage] = useState(0)\n const [content, setContent] = useState([])\n const [shouldCheckItemsAvailability, setShouldCheckItemsAvailability] = useState(false)\n\n const visibleRows = useMemo(() => {\n return stableSort(content, getComparator(order, orderBy)).slice(\n page * visibleRowsCount,\n page * visibleRowsCount + visibleRowsCount,\n )\n }, [content, order, orderBy, page])\n\n const emptyRows = useMemo(() => {\n return (isDataLoading || (shouldCheckItemsAvailability && visibleRows.length === 0)) ? visibleRowsCount : (visibleRows.length === visibleRowsCount ? 0 : visibleRowsCount - (visibleRows.length % visibleRowsCount))\n }, [visibleRows])\n \n useEffect(() => {\n dataGenerator(visibleRowsCount * 2, 0, data => {\n setContent(data)\n setIsDataLoading(false)\n setShouldCheckItemsAvailability(true)\n }, error => {\n setIsDataLoading(false)\n setShouldCheckItemsAvailability(true)\n })\n }, [])\n\n function descendingComparator(a, b, orderBy) {\n if (b[orderBy] < a[orderBy]) {\n return -1\n }\n if (b[orderBy] > a[orderBy]) {\n return 1\n }\n return 0\n }\n\n function getComparator(order, orderBy) {\n return order === 'desc'\n ? (a, b) => descendingComparator(a, b, orderBy)\n : (a, b) => -descendingComparator(a, b, orderBy)\n }\n\n const handleRequestSort = (event, property) => {\n const isAsc = orderBy === property && order === 'asc'\n setOrder(isAsc ? 'desc' : 'asc')\n setOrderBy(property)\n }\n\n const handleChangePage = (event, newPage) => {\n const pagesLoadedCount = Math.ceil(content.length / visibleRowsCount)\n if ((newPage + 1) - pagesLoadedCount > 1) {\n return\n } else if ((newPage + 1) - pagesLoadedCount === 1 && totalCount > content.length) {\n setIsDataLoading(true)\n } else if (newPage + 1 === pagesLoadedCount && totalCount > content.length) {\n if (shouldPaginate) {\n dataGenerator(visibleRowsCount * 2, visibleRowsCount * (newPage + 1), data => {\n setContent(prev => [...prev, ...data])\n setIsDataLoading(false)\n })\n }\n }\n setPage(newPage)\n }\n\n function EnhancedTableHead({ order, orderBy, onRequestSort }) {\n const createSortHandler = (property) => (event) => {\n onRequestSort(event, property)\n }\n\n return (\n <TableHead>\n <TableRow>\n <HeaderView\n order={order}\n orderBy={orderBy}\n headerBackgroundColor={headerBackgroundColor}\n headerTextColor={headerTextColor}\n createSortHandler={createSortHandler}\n removedColumnIds={removedColumnIds}\n />\n </TableRow>\n </TableHead>\n );\n }\n\n function getDisplayedRowsLabelFunction() {\n return showTotalCount ?\n ({ from, to, count }) => `${from}–${to} of ${count !== -1 ? count : `more than ${to}`}` :\n ({ from, to }) => `${from} - ${to}`\n }\n\n return (\n <Paper sx={{\n width: '100%',\n borderRadius,\n ...(boxShadow ? { boxShadow } : {}),\n position: 'relative'\n }}>\n <TableContainer sx={{\n ...(border ? { border } : {}),\n borderRadius\n }}>\n <Table>\n {\n !(hideHeaderInMobile && isMobile) && <EnhancedTableHead\n order={order}\n orderBy={orderBy}\n onRequestSort={handleRequestSort}\n />\n }\n <TableBody>\n {\n visibleRows.map(row => <RowView key={generateRandomInteger(1_000_000)} rowData={row} />)\n }\n {emptyRows > 0 && (\n <TableRow\n style={{\n height: rowHeightPx * emptyRows,\n }}\n >\n <TableCell colSpan={6} />\n </TableRow>\n )}\n </TableBody>\n </Table>\n </TableContainer>\n {showPagesSection && <TablePagination\n rowsPerPageOptions={[5]}\n component=\"div\"\n count={totalCount ?? content?.length}\n rowsPerPage={visibleRowsCount}\n page={page}\n onPageChange={handleChangePage}\n labelDisplayedRows={getDisplayedRowsLabelFunction()}\n />}\n {\n isDataLoading && <div className={isMobile ? \"mobile-paydin-table-loader-container\" : \"paydin-table-loader-container\"} style={{ height: `${rowHeightPx * visibleRowsCount}px` }}>\n <Loader\n styles={{\n width: '20px',\n height: '20px',\n position: 'absolute',\n inset: 0,\n margin: 'auto'\n }}\n />\n </div>\n }\n {\n (shouldCheckItemsAvailability && !isDataLoading && visibleRows.length === 0) && <div className={isMobile ? 'mobile-paydin-table-no-items-container' : 'paydin-table-no-items-container'}>\n <NoItemsFound\n className='paydin-table-no-items'\n image={noItemsImage}\n isEmbeddedIcon={true}\n title={noItemsText}\n showButton={false}\n />\n </div>\n }\n </Paper>\n )\n}","import { Box, TableCell, TableSortLabel, tableCellClasses } from '@mui/material'\nimport React from 'react'\nimport './ProductsTableHeaderView.css'\nimport { visuallyHidden } from '@mui/utils'\nimport { styled } from '@mui/system'\nimport { PRODUCT_TABLE_HEADERS_IDS } from 'constants/general.constants'\nimport { BsBoxSeam } from 'react-icons/bs'\nimport { useTranslation } from 'react-i18next'\nimport { isMobile } from 'utils/deviceUtils'\n\n/**\n * Represents a header view for the products table\n * @param {string} order - The way of ordering the column data, e.g., asc or desc\n * @param {string} orderBy - The column to order the data by\n * @param {string} headerBackgroundColor - The background color of the header view\n * @param {string} headerTextColor - The text color of the header view\n * @param {string} createSortHandler - A function for creating the sort function for the data ordering\n */\nexport default function ProductsTableHeaderView({\n order,\n orderBy,\n headerBackgroundColor = '',\n headerTextColor = '',\n createSortHandler = () => { },\n removedColumnIds = []\n}) {\n const { t } = useTranslation()\n\n const headerContentMap = {\n [PRODUCT_TABLE_HEADERS_IDS.TITLE]: <div className='product-table-header-view product-table-header-view-product'>\n <BsBoxSeam className=\"product-table-header-view-product-image\" />\n <div className=\"product-table-header-view-product-text\">{t('PRODUCTS_TABLE_HEADER_PRODUCT_NAME')}</div>\n </div>,\n [PRODUCT_TABLE_HEADERS_IDS.VIEW]: <div className='table-header-view product-table-header-view'>{t('PRODUCTS_TABLE_HEADER_PRODUCT_VIEW_COUNT')}</div>,\n [PRODUCT_TABLE_HEADERS_IDS.ADD]: <div className='table-header-view product-table-header-view'>{t('PRODUCTS_TABLE_HEADER_PRODUCT_ADD_COUNT')}</div>,\n [PRODUCT_TABLE_HEADERS_IDS.BUY]: <div className='table-header-view product-table-header-view'>{t('PRODUCTS_TABLE_HEADER_PRODUCT_BUY_COUNT')}</div>,\n [PRODUCT_TABLE_HEADERS_IDS.RANK]: <div className='table-header-view product-table-header-view'>{t('PRODUCTS_TABLE_HEADER_PRODUCT_RANKING')}</div>\n }\n\n const StyledTableCell = styled(TableCell)(({ theme }) => ({\n [`&.${tableCellClasses.head}`]: {\n backgroundColor: headerBackgroundColor,\n color: headerTextColor,\n textAlign: 'start'\n },\n }))\n\n const ProductsTableHeaderCell = ({ id, label, align }) => <StyledTableCell\n key={id}\n align={align}\n padding={'normal'}\n sortDirection={orderBy === id ? order : false}\n >\n <TableSortLabel\n active={orderBy === id}\n direction={orderBy === id ? order : 'asc'}\n onClick={createSortHandler(id)}\n >\n {label}\n {orderBy === id ? (\n <Box component=\"span\" sx={visuallyHidden}>\n {order === 'desc' ? 'sorted descending' : 'sorted ascending'}\n </Box>\n ) : null}\n </TableSortLabel>\n </StyledTableCell>\n\n return (\n isMobile ? <ProductsTableHeaderCell id={PRODUCT_TABLE_HEADERS_IDS.TITLE} align={'left'} label={\n <div className='product-table-header-view product-table-header-view-product'>\n <BsBoxSeam className=\"product-table-header-view-product-image\" />\n <div className=\"product-table-header-view-product-text\">{t('PRODUCTS_TABLE_HEADER_PRODUCT_NAME')}</div>\n </div>\n } /> : <>\n {\n removedColumnIds?.length > 0 ? Object.keys(headerContentMap).filter(columnId => !removedColumnIds.includes(columnId)).map(columnId => <ProductsTableHeaderCell key={columnId} id={columnId} align={'left'} label={\n headerContentMap[columnId]\n } />) : <>\n <ProductsTableHeaderCell id={PRODUCT_TABLE_HEADERS_IDS.TITLE} align={'left'} label={\n headerContentMap[PRODUCT_TABLE_HEADERS_IDS.TITLE]\n } />\n <ProductsTableHeaderCell id={PRODUCT_TABLE_HEADERS_IDS.VIEW} align={'left'} label={\n headerContentMap[PRODUCT_TABLE_HEADERS_IDS.VIEW]\n } />\n <ProductsTableHeaderCell id={PRODUCT_TABLE_HEADERS_IDS.ADD} align={'left'} label={\n headerContentMap[PRODUCT_TABLE_HEADERS_IDS.ADD]\n } />\n <ProductsTableHeaderCell id={PRODUCT_TABLE_HEADERS_IDS.BUY} align={'left'} label={\n headerContentMap[PRODUCT_TABLE_HEADERS_IDS.BUY]\n } />\n <ProductsTableHeaderCell id={PRODUCT_TABLE_HEADERS_IDS.RANK} align={'left'} label={\n headerContentMap[PRODUCT_TABLE_HEADERS_IDS.RANK]\n } />\n </>\n }\n </>\n )\n}\n","import React from 'react'\nimport './CircularProgressBar.css'\nimport { isMobile } from 'utils/deviceUtils'\n\n/**\n * Represents a circular progress bar\n * @param {number} value - The value to diaplay\n * @param {string} width - The width of the progress bar\n * @param {string} height - The height of the progress bar\n * @param {string} archColor - The color of the filling arch\n * @param {number} min - The lower bound of the progress range\n * @param {number} max - The upper bound of the progress range\n */\nexport default function CircularProgressBar({\n value,\n width,\n height,\n archColor = 'black',\n min = 0,\n max = 100,\n}) {\n const percentage = Math.floor(((value - min) / (max - min)) * 100)\n\n return (\n <div className=\"circular-progress-bar\" role=\"progressbar\" style={{\n background: `radial-gradient(closest-side, white 79%, transparent 80% 100%), conic-gradient(${archColor} ${percentage}%, #e8e8e8 0)`,\n width,\n height\n }}>\n <div className=\"circular-progress-bar-text\" style={{ fontSize: isMobile ? '15px' : '18px' }}>{value}</div>\n </div>\n )\n}","import { TableCell, TableRow } from '@mui/material'\nimport ImageBox from 'components/ImageBox/ImageBox'\nimport React from 'react'\nimport './ProductsTableRowView.css'\nimport MultiLineText from 'components/MultiLineText/MultiLineText'\nimport { isMobile } from 'utils/deviceUtils'\nimport { useTranslation } from 'react-i18next'\nimport CircularProgressBar from 'components/CircularProgressBar/CircularProgressBar'\nimport { styled } from '@mui/system'\nimport { PRODUCTS_TABLE_ROW_HEIGHT } from 'constants/general.constants'\n\n/**\n * Represents a row view for the products table\n * @param {object} rowData - The data object of a specific row\n */\nexport default function ProductsTableRowView({\n rowData\n}) {\n const { t } = useTranslation()\n\n const StyledTableRow = styled(TableRow)(({ theme }) => ({\n // hide all borders\n '&:not(:last-child) td, & th': {\n border: 0,\n }\n }))\n\n const productTableCellStyle = {\n padding: '8px'\n }\n\n function getRankColor(rank) {\n switch (true) {\n case rank >= 0 && rank <= 20: return 'red'\n case rank >= 21 && rank <= 40: return '#b4c7e7'\n case rank >= 41 && rank <= 60: return '#ffc000'\n case rank >= 61 && rank <= 80: return '#ed7d31'\n case rank >= 81 && rank <= 100: return '#00b050'\n }\n }\n\n function renderRankCircle() {\n return <CircularProgressBar\n min={0}\n max={100}\n width={isMobile ? '50px' : '70px'}\n height={isMobile ? '50px' : '70px'}\n value={rowData?.ranking}\n archColor={getRankColor(rowData?.ranking)}\n />\n }\n\n function hasValue(value) {\n return ![null, undefined].includes(value)\n }\n\n return (\n <StyledTableRow style={{ height: `${PRODUCTS_TABLE_ROW_HEIGHT}px` }}>\n {\n isMobile ? <TableCell padding=\"normal\" align={'left'} sx={productTableCellStyle}>\n <div className='mobile-product-table-row-view'>\n <div className=\"mobile-product-table-row-content\">\n {\n <ImageBox\n image={rowData?.productImage}\n isImageFitCover={true}\n className='mobile-product-table-row-view-image'\n showBorder={true}\n />\n }\n <div className=\"mobile-product-table-row-content-details\">\n {\n hasValue(rowData?.productName) && <MultiLineText\n text={rowData?.productName}\n className='mobile-product-table-row-view-title'\n lines={2}\n treatAsHtml={true}\n />\n }\n <div className=\"mobile-product-table-row-content-details-analytics\">\n {\n hasValue(rowData?.viewCount) && <div className=\"mobile-product-table-row-content-details-analytics-data\">\n <div className=\"mobile-product-table-row-content-details-analytics-data-value\">{Math.max(rowData?.viewCount ?? 0, rowData?.addCount ?? 0, rowData?.buyCount ?? 0)}</div>\n <div className=\"mobile-product-table-row-content-details-analytics-data-label\">{t('MOBILE_PRODUCTS_TABLE_ROW_VIEW_ANALYTICS_VIEW_LABEL')}</div>\n </div>\n }\n {\n hasValue(rowData?.addCount) && <div className=\"mobile-product-table-row-content-details-analytics-data\">\n <div className=\"mobile-product-table-row-content-details-analytics-data-value\">{Math.max(rowData?.addCount ?? 0, rowData?.buyCount ?? 0)}</div>\n <div className=\"mobile-product-table-row-content-details-analytics-data-label\">{t('MOBILE_PRODUCTS_TABLE_ROW_VIEW_ANALYTICS_ADD_LABEL')}</div>\n </div>\n }\n {\n hasValue(rowData?.buyCount) && <div className=\"mobile-product-table-row-content-details-analytics-data\">\n <div className=\"mobile-product-table-row-content-details-analytics-data-value\">{rowData?.buyCount ?? 0}</div>\n <div className=\"mobile-product-table-row-content-details-analytics-data-label\">{t('MOBILE_PRODUCTS_TABLE_ROW_VIEW_ANALYTICS_BUY_LABEL')}</div>\n </div>\n }\n </div>\n </div>\n </div>\n <div className=\"mobile-product-table-row-rank-container\">\n {renderRankCircle()}\n </div>\n </div>\n </TableCell> : <>\n {(rowData?.productImage || rowData?.productName) && <TableCell padding=\"normal\" align={'left'} sx={productTableCellStyle}>\n <div className=\"product-table-row-view product-table-row-view-product\">\n <ImageBox\n image={rowData?.productImage}\n isImageFitCover={true}\n className='product-table-row-view-image'\n showBorder={true}\n />\n {\n hasValue(rowData?.productName) && <MultiLineText\n text={rowData?.productName}\n className='product-table-row-view-title'\n lines={3}\n treatAsHtml={true}\n />\n }\n </div>\n </TableCell>}\n {\n hasValue(rowData?.viewCount) && <TableCell padding=\"normal\" align='right'>\n <div className='product-table-row-view product-table-row-view-view-count'>{Math.max(rowData?.viewCount ?? 0, rowData?.addCount ?? 0, rowData?.buyCount ?? 0)}</div>\n </TableCell>\n }\n {\n hasValue(rowData?.addCount) && <TableCell padding=\"normal\" align='right'>\n <div className='product-table-row-view product-table-row-view-add-count'>{Math.max(rowData?.addCount ?? 0, rowData?.buyCount ?? 0)}</div>\n </TableCell>\n }\n {\n hasValue(rowData?.buyCount) && <TableCell padding=\"normal\" align='right'>\n <div className='product-table-row-view product-table-row-view-buy-count'>{rowData?.buyCount ?? 0}</div>\n </TableCell>\n }\n {\n hasValue(rowData?.ranking) && <TableCell padding=\"normal\" align='right'>\n {renderRankCircle()}\n </TableCell>\n }\n </>\n }\n </StyledTableRow>\n )\n}\n","import { getLinkProducts, getLinkProductsCount } from 'api/links/links'\nimport PaydinTable from 'components/PaydinTable/PaydinTable'\nimport ProductsTableHeaderView from 'components/ProductsTableHeaderView/ProductsTableHeaderView'\nimport ProductsTableRowView from 'components/ProductsTableRowView/ProductsTableRowView'\nimport { MOBILE_PRODUCTS_TABLE_ROW_HEIGHT_PX, PRODUCTS_TABLE_ROWS_PER_PAGE, PRODUCTS_TABLE_ROW_HEIGHT_PX, PRODUCT_TABLE_HEADERS_IDS } from 'constants/general.constants'\nimport React, { useEffect, useState } from 'react'\nimport { isMobile } from 'utils/deviceUtils'\nimport { extractProductRowData } from 'utils/dataUtils'\nimport { BsBoxSeam } from 'react-icons/bs'\nimport { useTranslation } from 'react-i18next'\nimport './ProductsTable.css'\n\n/**\n * Represents a products table for a specific link.\n * @param {string} linkId - The id of the link \n * @param {array} removedColumnIds - An array of column IDs that are required to remove from display\n */\nexport default function ProductsTable({\n linkId,\n removedColumnIds = [],\n setHasProducts = () => { }\n}) {\n const { t } = useTranslation()\n\n const [totalProductsCount, setTotalProductsCount] = useState(0)\n const [nextSkip, setNextSkip] = useState(0)\n\n useEffect(() => {\n getLinkProductsCount(linkId)\n .then(data => {\n setTotalProductsCount(data?.count ?? 0)\n setHasProducts(data?.count > 0)\n })\n .catch(console.log)\n }, [])\n\n function createData(productImage, productName, viewCount, addCount, buyCount, ranking) {\n let data = {\n [PRODUCT_TABLE_HEADERS_IDS.IMAGE]: productImage,\n [PRODUCT_TABLE_HEADERS_IDS.TITLE]: productName,\n [PRODUCT_TABLE_HEADERS_IDS.VIEW]: viewCount,\n [PRODUCT_TABLE_HEADERS_IDS.ADD]: addCount,\n [PRODUCT_TABLE_HEADERS_IDS.BUY]: buyCount,\n [PRODUCT_TABLE_HEADERS_IDS.RANK]: ranking\n }\n\n if (removedColumnIds.length > 0) {\n Object.keys(data).forEach(columnId => {\n if (removedColumnIds.includes(columnId)) {\n delete data[columnId]\n }\n })\n }\n\n return data\n }\n\n function normalizeTableData(items) {\n const normalizedData = []\n\n for (const product of items) {\n normalizedData.push(\n createData(\n product?.images?.small?.src,\n product?.title,\n product?.view,\n product?.add,\n product?.buy,\n product?.rank\n )\n )\n }\n\n return normalizedData\n }\n\n function getProductsData(count, skip, onSuccess = () => { }, onFailure = () => { }) {\n if (skip === 0) {\n count = count + 1\n }\n getLinkProducts(linkId, count, nextSkip)\n .then(data => {\n setNextSkip(data?.next_skip ?? skip)\n onSuccess(normalizeTableData(data?.products ? data.products.map(product => extractProductRowData(product)) : []))\n })\n .catch(error => {\n console.log(error)\n onFailure(error)\n })\n }\n\n return (\n <PaydinTable\n visibleRowsCount={PRODUCTS_TABLE_ROWS_PER_PAGE}\n borderRadius='10px'\n totalCount={totalProductsCount}\n rowHeightPx={isMobile ? MOBILE_PRODUCTS_TABLE_ROW_HEIGHT_PX : PRODUCTS_TABLE_ROW_HEIGHT_PX}\n rowView={ProductsTableRowView}\n headerView={ProductsTableHeaderView}\n hideHeaderInMobile={true}\n dataGenerator={getProductsData}\n noItemsImage={<BsBoxSeam className='products-table-no-items-image' />}\n noItemsText={t('PRODUCTS_TABLE_NO_ITEMS_TO_DISPLAY_MESSAGE')}\n removedColumnIds={removedColumnIds}\n />\n )\n}","import React from 'react'\nimport './PaydinChartControlSection.css'\nimport { isMobile } from 'utils/deviceUtils'\n\n/**\n * Represents a view for toggling the display for a single chart and contains data for that chart: title, color and total value\n * @param {string} title - The title for this view\n * @param {string} dotColor - The color for this view's dot (next to the title)\n * @param {string} value - The value for this view\n * @param {boolean} selected - Determins whether this view is selected or not\n * @param {function} onClick - A function to perform when a view is clicked\n */\nexport default function PaydinChartControlSection({\n title,\n dotColor,\n value,\n selected = false,\n onClick = () => { }\n}) {\n return (\n <div className={`${isMobile ? 'mobile-paydin-chart-control-section' : 'paydin-chart-control-section'} ${selected ? 'selected' : ''}`} onClick={onClick}>\n <div className=\"paydin-chart-control-section-title-container\">\n <div className=\"paydin-chart-control-section-dot\" style={{ backgroundColor: selected ? dotColor : '#a5a5a5' }}></div>\n <div className={`${isMobile ? 'mobile-paydin-chart-control-section-title' : 'paydin-chart-control-section-title'} ${selected ? 'selected' : ''}`}>{title}</div>\n </div>\n <div className={`${isMobile ? 'mobile-paydin-chart-control-section-value' : 'paydin-chart-control-section-value'} ${selected ? 'selected' : ''}`}>{value}</div>\n </div>\n )\n}","import PaydinChartControlSection from 'components/PaydinChartControlSection/PaydinChartControlSection'\nimport './PaydinChart.css'\nimport { Line, XAxis, YAxis, CartesianGrid, Tooltip, Bar, ComposedChart } from 'recharts'\nimport { PAYDIN_CHART_CONTENT_GAP_PX, PAYDIN_CHART_CONTENT_MOBILE_GAP_PX, PAYDIN_CHART_CONTENT_PADDING_PX, PAYDIN_CHART_GRAPH_HEIGHT_PX, PAYDIN_CHART_TYPES } from 'constants/general.constants'\nimport { useEffect, useRef, useState } from 'react'\nimport { isMobile } from 'utils/deviceUtils'\nimport Loader from 'components/Loader/Loader'\nimport { useTranslation } from 'react-i18next'\n\n/**\n * Represents a chart with a title and a frame.\n * @param {string} title - The title for this chart\n * @param {array} chartData - An array of object representing the normalized data for each point of the chart. \n * @param {object} chartDataLabels - An object containing configuration data for each chart point\n * @param {function} setChartDataLabels - A function for setting the configuration data for each chart point\n */\nexport default function PaydinChart({\n chartData = [],\n chartDataLabels = {},\n setChartDataLabels = () => { },\n isDataLoading = false,\n timeRangeName = '',\n isMultiLabelSelect = true\n}) {\n const { t } = useTranslation()\n\n const [chartDimensPx, setChartDimensPx] = useState({\n width: 0,\n height: 0\n })\n const [labelsDimensPx, setLabelsDimensPx] = useState({\n width: 0,\n height: 0\n })\n\n const chartContainerRef = useRef(null)\n const chartLabelsRef = useRef(null)\n\n useEffect(() => {\n if (chartContainerRef?.current && chartLabelsRef?.current) {\n setChartDimensPx({\n width: chartContainerRef?.current?.clientWidth,\n height: chartContainerRef?.current?.clientHeight - chartLabelsRef?.current?.clientHeight\n })\n setLabelsDimensPx({\n width: chartLabelsRef?.current?.clientWidth,\n height: chartLabelsRef?.current?.clientHeight\n })\n }\n \n }, [])\n\n function onChartControlClick(label) {\n const dataLabels = { ...chartDataLabels }\n Object.keys(dataLabels).forEach(dataLabel => {\n if (dataLabels[dataLabel]?.label === label) {\n dataLabels[dataLabel].selected = !dataLabels[dataLabel].selected\n } else if (!isMultiLabelSelect) {\n dataLabels[dataLabel].selected = false\n }\n })\n setChartDataLabels(dataLabels)\n }\n\n function renderChart(chartType, dataKey, chartColor, yAxisId = \"left\") {\n if (chartType === PAYDIN_CHART_TYPES.LINE) {\n return <Line\n key={dataKey}\n yAxisId={yAxisId}\n scale='time'\n type=\"monotone\"\n dataKey={dataKey}\n strokeWidth={4}\n stroke={chartColor}\n activeDot={{ r: 8 }}\n dot={chartData?.length === 1}\n />\n }\n\n return <Bar\n key={dataKey}\n dataKey={dataKey}\n barSize={20}\n yAxisId={yAxisId}\n fill={chartColor}\n />\n }\n\n return (\n <div className={isMobile ? 'mobile-paydin-chart-container' : 'paydin-chart-container'}>\n <div ref={chartContainerRef} className={isMobile ? \"mobile-paydin-chart\" : \"paydin-chart\"}>\n <div ref={chartLabelsRef} className={isMobile ? \"mobile-paydin-chart-displayed-graphs-labels\" : \"paydin-chart-displayed-graphs-labels\"}>\n {\n Object.keys(chartDataLabels).length > 0 && Object.keys(chartDataLabels).map(label => <PaydinChartControlSection\n key={chartDataLabels[label]?.label}\n title={chartDataLabels[label]?.label}\n dotColor={chartDataLabels[label]?.labelColor}\n value={chartDataLabels[label]?.totalValue}\n selected={chartDataLabels[label]?.selected}\n onClick={() => onChartControlClick(chartDataLabels[label]?.label)}\n />)\n }\n </div>\n <div className={isMobile ? \"mobile-paydin-chart-content\" : \"paydin-chart-content\"} style={{ width: `${chartDimensPx.width}px`, height: `${PAYDIN_CHART_GRAPH_HEIGHT_PX}px` }}>\n {\n (isDataLoading ? <Loader styles={{ width: '25px', height: '25px', position: 'absolute', inset: 0, margin: 'auto' }} /> : (chartData.length > 0 && Object.keys(chartDataLabels).length > 0) && <ComposedChart\n width={chartDimensPx.width}\n height={PAYDIN_CHART_GRAPH_HEIGHT_PX}\n data={chartData}\n >\n <CartesianGrid strokeDasharray=\"3 3\" chartWidth={chartDimensPx.width} />\n <XAxis\n dataKey=\"date\"\n tickMargin={10}\n interval={'preserveStartEnd'}\n minTickGap={30}\n />\n <YAxis yAxisId=\"left\" orientation=\"left\" />\n <YAxis yAxisId='right' orientation='right' />\n <Tooltip />\n {\n Object.keys(chartDataLabels)\n .filter(rawLabel => chartDataLabels[rawLabel]?.selected)\n .map(label => renderChart(chartDataLabels[label]?.chartType, label, chartDataLabels[label]?.labelColor, chartDataLabels[label]?.yAxisId))\n }\n </ComposedChart>)\n }\n </div>\n {\n !isDataLoading && (chartData?.length === 0 && <div className=\"paydin-chart-no-data-frame\" style={{ height: `${PAYDIN_CHART_GRAPH_HEIGHT_PX + labelsDimensPx.height + ((PAYDIN_CHART_CONTENT_PADDING_PX * 2) + 15) + (isMobile ? PAYDIN_CHART_CONTENT_MOBILE_GAP_PX : PAYDIN_CHART_CONTENT_GAP_PX)}px` }}>\n <div className={isMobile ? \"mobile-paydin-chart-no-data-message\" : \"paydin-chart-no-data-message\"}>{t('PAYDIN_CHART_NO_DATA_MESSAGE', { timeRange: timeRangeName })}</div>\n </div>)\n }\n </div>\n </div>\n )\n}","import PaydinChart from \"components/PaydinChart/PaydinChart\";\nimport { NUMBER_TYPES, PAYDIN_CHART_TYPES } from \"constants/general.constants\";\nimport React, { useEffect, useState } from \"react\"\nimport { getFormattedShortDate } from \"utils/dateUtils\"\nimport './ActivityChart.css'\nimport { isMobile } from 'utils/deviceUtils'\nimport { useUserDetailsContext } from \"contexts/User\";\nimport { formatNumber } from \"utils/utils\";\n\n/**\n * Represents the activity chart for the analytics page.\n * @param {object} data - The raw data for the chart\n * @param {boolean} isDataLoading - Determins whether the data is being loaded or not\n * @param {string} containerBgColor - A background color for this chart\n */\nexport default function ActivityChart({\n data = {},\n timeRangeName = '',\n isDataLoading = false\n}) {\n const { userDetails } = useUserDetailsContext()\n\n const [chartData, setChartData] = useState([])\n const [chartDataLabels, setChartDataLabels] = useState({\n ...(isClicksPermissionEnabled() ? {\n 'Clicks': {\n label: 'Total Clicks',\n labelTooltip: 'Clicks',\n labelColor: '#2c78e7',\n totalValue: 0,\n selected: true,\n chartType: PAYDIN_CHART_TYPES.LINE,\n yAxisId: 'left'\n }\n } : {}),\n ...(isCrPermissionEnabled() ? {\n 'CR': {\n label: 'CR',\n labelTooltip: 'CR',\n labelColor: '#8708a0',\n totalValue: 0,\n selected: !isClicksPermissionEnabled(),\n chartType: PAYDIN_CHART_TYPES.LINE,\n yAxisId: 'left'\n }\n } : {}),\n ...(isSalesPermissionEnabled() ? {\n 'Sales': {\n label: 'Total Sales',\n labelTooltip: 'Sales',\n labelColor: 'green',\n totalValue: 0,\n selected: !isClicksPermissionEnabled(),\n chartType: PAYDIN_CHART_TYPES.LINE,\n yAxisId: 'left'\n }\n } : {})\n })\n const [isCalculatingData, setIsCalculatingData] = useState(true)\n\n useEffect(() => {\n normalizeChartData()\n }, [data])\n\n function isClicksPermissionEnabled() {\n return userDetails?.isAdmin || userDetails?.permissions?.clicksEnabled\n }\n\n function isCrPermissionEnabled() {\n return userDetails?.isAdmin || (userDetails?.permissions?.salesEnabled && userDetails?.permissions?.crEnabled)\n }\n\n function isSalesPermissionEnabled() {\n return userDetails?.isAdmin || userDetails?.permissions?.salesEnabled\n }\n\n function normalizeChartData() {\n if (data.length === 0) {\n return []\n }\n\n const dataArray = Object.entries(data).map(([date, analytics]) => ({\n date,\n clicks: analytics?.visits,\n sales: analytics?.checkouts\n }))\n\n dataArray.sort((a, b) => (a.date < b.date ? -1 : a.date > b.date ? 1 : 0))\n\n let totalClicks = 0, totalSales = 0\n let dataLabels = { ...chartDataLabels }\n const normalizedData = dataArray?.map(dataObject => {\n totalClicks += dataObject?.clicks\n totalSales += dataObject?.sales\n return {\n date: new Date(dataObject?.date.split(' ')[0]),\n Clicks: dataObject?.clicks,\n Sales: dataObject?.sales,\n CR: dataObject?.clicks > 0 ? formatNumber((dataObject?.sales / dataObject?.clicks) * 100, NUMBER_TYPES.PERCENTAGE) : 0\n }\n })\n\n if (isClicksPermissionEnabled()) {\n dataLabels['Clicks'].totalValue = totalClicks\n }\n\n if (isSalesPermissionEnabled()) {\n dataLabels['Sales'].totalValue = totalSales\n }\n \n if (isCrPermissionEnabled()) {\n dataLabels['CR'].totalValue = totalClicks > 0 ? `${formatNumber((totalSales / totalClicks) * 100, NUMBER_TYPES.PERCENTAGE)}%` : '0%'\n }\n\n const filledData = fillZeroData(normalizedData)\n const formattedFilledData = filledData.map(data => ({ ...data, date: getFormattedShortDate(data.date) }))\n\n setChartData(formattedFilledData)\n setChartDataLabels(dataLabels)\n setIsCalculatingData(false)\n }\n\n function fillZeroData(normalizedData) {\n let filledData = []\n for (let i = 0; i < normalizedData?.length - 1; i++) {\n filledData.push(normalizedData[i])\n let current = new Date(normalizedData[i]?.date)\n const next = normalizedData[i + 1]?.date\n current.setDate(current.getDate() + 1)\n while (current < next) {\n filledData.push({\n date: current,\n Clicks: 0,\n Sales: 0,\n CR: 0\n })\n current = new Date(current)\n current.setDate(current.getDate() + 1)\n }\n }\n if (normalizedData?.length > 1) {\n filledData.push(normalizedData[normalizedData.length - 1])\n }\n return filledData\n }\n\n return (\n <div className={isMobile ? 'mobile-paydin-activity-chart-container' : 'paydin-activity-chart-container'}>\n <PaydinChart\n chartData={chartData}\n chartDataLabels={chartDataLabels}\n setChartDataLabels={setChartDataLabels}\n isDataLoading={isCalculatingData || isDataLoading}\n timeRangeName={timeRangeName}\n isMultiLabelSelect={false}\n />\n </div>\n )\n}","import PaydinChart from 'components/PaydinChart/PaydinChart'\nimport { NUMBER_TYPES, PAYDIN_CHART_TYPES } from 'constants/general.constants'\nimport React, { useEffect, useState } from 'react'\nimport { getFormattedShortDate } from 'utils/dateUtils'\nimport './CommerceChart.css'\nimport { isMobile } from 'utils/deviceUtils'\nimport { useUserDetailsContext } from 'contexts/User'\nimport { formatNumber } from 'utils/utils'\n\n/**\n * Represents the commerce chart for the analytics page.\n * @param {string} currency - The currency symbol related to the given data\n * @param {object} data - The raw data for the chart\n * @param {boolean} isDataLoading - Determins whether the data is being loaded or not\n * @param {string} containerBgColor - A background color for this chart\n */\nexport default function CommerceChart({\n currency,\n data = {},\n timeRangeName = '',\n isDataLoading = false\n}) {\n const { \n userDetails,\n } = useUserDetailsContext()\n\n const [chartData, setChartData] = useState([])\n const [chartDataLabels, setChartDataLabels] = useState({\n ...(isRevenuePermissionEnabled() ? {\n 'Revenue': {\n label: 'Total Revenue',\n labelTooltip: 'Revenue',\n labelColor: '#df9a3a',\n totalValue: 0,\n selected: true,\n chartType: PAYDIN_CHART_TYPES.BAR,\n yAxisId: 'left'\n }\n } : {}),\n ...(isSalesPermissionEnabled() ? {\n 'Sales': {\n label: 'Total Sales',\n labelTooltip: 'Sales',\n labelColor: '#b834cf',\n totalValue: 0,\n selected: false,\n chartType: PAYDIN_CHART_TYPES.LINE,\n yAxisId: 'right'\n }\n } : {}),\n ...((isAovPermissionEnabled()) ? {\n 'AOV': {\n label: 'Average Sale',\n labelTooltip: 'AOV',\n labelColor: '#434543',\n totalValue: 0,\n selected: true,\n chartType: PAYDIN_CHART_TYPES.BAR,\n yAxisId: 'left'\n }\n } : {}),\n })\n const [isCalculatingData, setIsCalculatingData] = useState(true)\n\n useEffect(() => {\n normalizeChartData()\n }, [data])\n\n function isRevenuePermissionEnabled() {\n return userDetails?.isAdmin || userDetails?.permissions?.revenueEnabled\n }\n\n function isAovPermissionEnabled() {\n return userDetails?.isAdmin || (userDetails?.permissions?.salesEnabled && userDetails?.permissions?.revenueEnabled && userDetails?.permissions?.aovEnabled)\n }\n\n function isSalesPermissionEnabled() {\n return userDetails?.isAdmin || userDetails?.permissions?.salesEnabled\n }\n\n function normalizeChartData() {\n if (data.length === 0) {\n return []\n }\n\n const dataArray = Object.entries(data).map(([date, analytics]) => ({\n date,\n sales: analytics.checkouts,\n revenue: analytics.revenue,\n totalTax: analytics.total_tax\n }))\n\n dataArray.sort((a, b) => (a.date < b.date ? -1 : a.date > b.date ? 1 : 0))\n\n let totalRevenue = 0, totalSales = 0\n let dataLabels = { ...chartDataLabels }\n const normalizedData = dataArray?.map(dataObject => {\n const dailyRevenue = Number(dataObject.revenue.toFixed(2))\n totalRevenue += dailyRevenue\n totalSales += dataObject.sales\n\n return {\n date: new Date(dataObject?.date.split(' ')[0]),\n Revenue: dailyRevenue,\n Sales: dataObject.sales,\n AOV: dataObject.sales > 0 ? Number((dailyRevenue / dataObject.sales).toFixed(2)) : 0\n }\n })\n\n if (isRevenuePermissionEnabled()) {\n dataLabels['Revenue'].totalValue = `${currency}${formatNumber(totalRevenue, NUMBER_TYPES.SHORT)}`\n }\n\n if (isSalesPermissionEnabled()) {\n dataLabels['Sales'].totalValue = totalSales\n }\n\n if (isAovPermissionEnabled()) {\n dataLabels['AOV'].totalValue = `${currency}${totalSales > 0 ? formatNumber(totalRevenue / totalSales, NUMBER_TYPES.SHORT, true) : 0}`\n }\n\n const filledData = fillZeroData(normalizedData)\n const formattedFilledData = filledData.map(data => ({ ...data, date: getFormattedShortDate(data.date) }))\n\n setChartData(formattedFilledData)\n setChartDataLabels(dataLabels)\n setIsCalculatingData(false)\n }\n\n function fillZeroData(normalizedData) {\n let filledData = []\n for (let i = 0; i < normalizedData?.length - 1; i++) {\n filledData.push(normalizedData[i])\n let current = new Date(normalizedData[i]?.date)\n const next = normalizedData[i + 1]?.date\n current.setDate(current.getDate() + 1)\n while (current < next) {\n filledData.push({\n date: current,\n Revenue: 0,\n Sales: 0,\n AOV: 0\n })\n current = new Date(current)\n current.setDate(current.getDate() + 1)\n }\n }\n if (normalizedData?.length > 1) {\n filledData.push(normalizedData[normalizedData.length - 1])\n }\n return filledData\n }\n\n return (\n <div className={isMobile ? 'mobile-paydin-commerce-chart-container' : 'paydin-commerce-chart-container'}>\n <PaydinChart\n chartData={chartData}\n chartDataLabels={chartDataLabels}\n setChartDataLabels={setChartDataLabels}\n isDataLoading={isCalculatingData || isDataLoading}\n timeRangeName={timeRangeName}\n />\n </div>\n )\n}","import React from 'react'\nimport './LinkAnalyticsCharts.css'\nimport { isMobile } from 'utils/deviceUtils'\nimport ActivityChart from 'components/ActivityChart/ActivityChart'\nimport CommerceChart from 'components/CommerceChart/CommerceChart'\nimport { useUserDetailsContext } from 'contexts/User'\nimport { useTranslation } from 'react-i18next'\nimport PreviewItemDataSection from 'components/PreviewItemDataSection/PreviewItemDataSection'\n\n/**\n * Represents an analytics charts data for a specific look or short.\n * @param {array} chartsData - The array of the data to present in the charts\n * @param {boolean} isLoadingChartsData - Determins whether the charts data is loading or not\n * @param {string} currency - The currency symbol for the charts display\n * @param {string} width - The width for the charts display\n * @param {string} timeRangeName - The display name for the selected time range\n * @param {boolean} noBackgroundColor - If true, the graphs background color is removed\n */\nexport default function LinkAnalyticsCharts({\n chartsData,\n isLoadingChartsData,\n currency,\n width = '100%',\n timeRangeName = '',\n noBackgroundColor = false,\n hasPadding = true\n}) {\n const { t } = useTranslation()\n const { userDetails } = useUserDetailsContext()\n\n function isValueEnabled(value) {\n return userDetails?.isAdmin || value\n }\n\n return (\n <div className={isMobile ? \"mobile-link-analytics-charts\" : \"link-analytics-charts\"} style={{ width: width ?? null, padding: hasPadding ? '20px' : '0' }}>\n {\n (isValueEnabled(userDetails?.permissions?.clicksEnabled) || isValueEnabled(userDetails?.permissions?.salesEnabled)) && <PreviewItemDataSection\n title={t('ACTIVITY_CHART_TITLE')}\n NoBackgroundColor={isMobile || noBackgroundColor}\n hasPadding={!isMobile}\n >\n <ActivityChart\n data={chartsData}\n isDataLoading={isLoadingChartsData}\n timeRangeName={timeRangeName}\n />\n </PreviewItemDataSection>\n }\n {\n // This chart is only displayed if the user is an admin\n userDetails?.isAdmin && <PreviewItemDataSection\n title={t('COMMERCE_CHART_TITLE')}\n NoBackgroundColor={isMobile || noBackgroundColor}\n hasPadding={!isMobile}\n >\n <CommerceChart\n data={chartsData}\n currency={currency}\n isDataLoading={isLoadingChartsData}\n timeRangeName={timeRangeName}\n />\n </PreviewItemDataSection>\n }\n </div>\n )\n}","import React from 'react'\nimport './LinkOrdersTableHeaderView.css'\nimport { useTranslation } from 'react-i18next'\nimport { Box, TableCell, TableSortLabel, tableCellClasses } from '@mui/material'\nimport { styled } from '@mui/system'\nimport { visuallyHidden } from '@mui/utils'\nimport { ORDERS_TABLE_HEADERS_IDS } from 'constants/general.constants'\nimport { isMobile } from 'utils/deviceUtils'\nimport { HiOutlineShoppingBag } from 'react-icons/hi'\n\n/**\n * Represents a header view for the orders table\n * @param {string} order - The way of ordering the column data, e.g., asc or desc\n * @param {string} orderBy - The column to order the data by\n * @param {string} headerBackgroundColor - The background color of the header view\n * @param {string} headerTextColor - The text color of the header view\n * @param {string} createSortHandler - A function for creating the sort function for the data ordering\n * @param {array} removedColumnIds - An array of column IDs that are required to remove from display\n */\nexport default function LinkOrdersTableHeaderView({\n order,\n orderBy,\n headerBackgroundColor = '',\n headerTextColor = '',\n createSortHandler = () => { },\n removedColumnIds = []\n}) {\n const { t } = useTranslation()\n\n const headerContentMap = {\n [ORDERS_TABLE_HEADERS_IDS.DATE]: <div className='orders-table-header-view orders-table-header-view-product'>\n <HiOutlineShoppingBag className=\"orders-table-header-view-product-image\" />\n <div className=\"orders-table-header-text orders-table-header-view-product-text\">{t('ORDERS_TABLE_HEADER_DATE')}</div>\n </div>,\n [ORDERS_TABLE_HEADERS_IDS.TOTAL_PRODUCTS_COUNT]: <div className='orders-table-header-view orders-table-header-text orders-table-header-view-total-products-count'>{t('ORDERS_TABLE_HEADER_TOTAL_PRODUCTS_COUNT')}</div>,\n [ORDERS_TABLE_HEADERS_IDS.TOTAL_PRICE]: <div className='orders-table-header-view orders-table-header-text orders-table-header-view-total-price'>{t('ORDERS_TABLE_HEADER_TOTAL_PRICE')}</div>,\n [ORDERS_TABLE_HEADERS_IDS.STATUS]: <div className='orders-table-header-view orders-table-header-text orders-table-header-view-status'>{t('ORDERS_TABLE_HEADER_STATUS')}</div>,\n [ORDERS_TABLE_HEADERS_IDS.ACTIONS]: <div className='orders-table-header-view orders-table-header-text orders-table-header-view-actions'>{t('ORDERS_TABLE_HEADER_ACTIONS')}</div>\n }\n\n const headerStyle = {\n backgroundColor: headerBackgroundColor,\n color: headerTextColor\n }\n\n const StyledTableCell = styled(TableCell)(({ theme }) => ({\n [`&.${tableCellClasses.head}`]: headerStyle,\n }))\n\n const StyledDateTableCell = styled(TableCell)(({ theme }) => ({\n [`&.${tableCellClasses.head}`]: {\n ...headerStyle,\n textAlign: 'start'\n },\n }))\n\n const OrdersTableHeaderCell = ({ id, label, align, tableCellView: TableCellView = StyledTableCell }) => <TableCellView\n key={id}\n align={align}\n padding={'none'}\n sortDirection={orderBy === id ? order : false}\n >\n <TableSortLabel\n active={orderBy === id}\n direction={orderBy === id ? order : 'asc'}\n onClick={createSortHandler(id)}\n >\n {label}\n {orderBy === id ? (\n <Box component=\"span\" sx={visuallyHidden}>\n {order === 'desc' ? 'sorted descending' : 'sorted ascending'}\n </Box>\n ) : null}\n </TableSortLabel>\n </TableCellView>\n\n return (\n isMobile ? <OrdersTableHeaderCell id={ORDERS_TABLE_HEADERS_IDS.DATE} align={'left'} tableCellView={StyledDateTableCell} label={\n <div className='orders-table-header-view orders-table-header-view-product'>\n <HiOutlineShoppingBag className=\"orders-table-header-view-product-image\" />\n <div className=\"orders-table-header-text orders-table-header-view-product-text\">{t('ORDERS_TABLE_HEADER_DATE')}</div>\n </div>\n } /> : <>\n {\n removedColumnIds?.length > 0 ? Object.keys(headerContentMap).filter(columnId => !removedColumnIds.includes(columnId)).map(columnId => <OrdersTableHeaderCell key={columnId} id={columnId} align={'left'} label={\n headerContentMap[columnId]\n } />) : <>\n <OrdersTableHeaderCell id={ORDERS_TABLE_HEADERS_IDS.DATE} align={'left'} label={\n headerContentMap[ORDERS_TABLE_HEADERS_IDS.DATE]\n } />\n <OrdersTableHeaderCell id={ORDERS_TABLE_HEADERS_IDS.TOTAL_PRODUCTS_COUNT} align={'left'} label={\n headerContentMap[ORDERS_TABLE_HEADERS_IDS.TOTAL_PRODUCTS_COUNT]\n } />\n <OrdersTableHeaderCell id={ORDERS_TABLE_HEADERS_IDS.TOTAL_PRICE} align={'left'} label={\n headerContentMap[ORDERS_TABLE_HEADERS_IDS.TOTAL_PRICE]\n } />\n <OrdersTableHeaderCell id={ORDERS_TABLE_HEADERS_IDS.STATUS} align={'left'} label={\n headerContentMap[ORDERS_TABLE_HEADERS_IDS.STATUS]\n } />\n <OrdersTableHeaderCell id={ORDERS_TABLE_HEADERS_IDS.ACTIONS} align={'left'} label={\n headerContentMap[ORDERS_TABLE_HEADERS_IDS.ACTIONS]\n } />\n </>\n }\n </>\n )\n}","import React from 'react'\nimport './OrderProduct.css'\nimport ImageBox from 'components/ImageBox/ImageBox'\nimport { getCurrencySymbol } from 'services/currency'\nimport MultiLineText from 'components/MultiLineText/MultiLineText'\nimport { isMobile } from 'utils/deviceUtils'\nimport { formatNumber } from 'utils/utils'\nimport { NUMBER_TYPES } from 'constants/general.constants'\n\n/**\n * Represents a product of a link order transaction.\n * @param {string} title - The product's title\n * @param {string} imageUrl - The product's image URL\n * @param {number} price - The product's price\n * @param {number} quantity - The product's quantity\n * @param {string} variantTitle - The product's variant's title\n * @param {string} currency - The product's currency code\n */\nexport default function OrderProduct({\n title,\n imageUrl,\n price,\n quantity,\n variantTitle,\n currency\n}) {\n\n function getVariantTitle(variantTitle) {\n if (variantTitle && variantTitle.toLowerCase() !== 'none') {\n return variantTitle\n }\n return \"\"\n }\n\n return (\n <div className={isMobile ? 'mobile-link-order-product' : 'link-order-product'}>\n <div className={isMobile ? \"mobile-link-order-product-image-titles-container\" : \"link-order-product-image-titles-container\"}>\n {\n isMobile ? <>\n <ImageBox\n image={imageUrl}\n className='mobile-link-order-product-image'\n showBorder={true}\n isImageFitCover={true}\n />\n <div className=\"mobile-link-order-product-titles-container\">\n <MultiLineText\n text={title}\n className='mobile-link-order-product-title'\n lines={2}\n oneWord={true}\n treatAsHtml={true}\n />\n <div className='mobile-link-order-product-variant-title-container'>\n {\n getVariantTitle(variantTitle) && <MultiLineText\n text={getVariantTitle(variantTitle)}\n className='mobile-link-order-product-variant-title'\n lines={1}\n oneWord={true}\n />\n }\n </div>\n </div>\n </> : <>\n <ImageBox\n image={imageUrl}\n className='link-order-product-image'\n showBorder={true}\n isImageFitCover={true}\n />\n <MultiLineText\n text={title}\n className='link-order-product-title'\n lines={2}\n oneWord={true}\n treatAsHtml={true}\n />\n </>\n }\n </div>\n {\n !isMobile && <div className='link-order-product-variant-title-container'>\n {\n (variantTitle && variantTitle !== 'None') && <MultiLineText\n text={variantTitle}\n className='link-order-product-variant-title'\n lines={2}\n oneWord={true}\n />\n }\n </div>\n }\n <div className={isMobile ? 'mobile-link-order-product-price-details' : \"link-order-product-price-details\"}>{`${getCurrencySymbol(currency)}${formatNumber(price / quantity, NUMBER_TYPES.PRICE)} x ${quantity}`}</div>\n <div className={isMobile ? 'mobile-link-order-product-total-price' : \"link-order-product-total-price\"}>{`${getCurrencySymbol(currency)}${formatNumber(price, NUMBER_TYPES.PRICE)}`}</div>\n </div>\n )\n}","import React, { useState } from 'react'\nimport './LinkOrdersTableRowView.css'\nimport { isMobile } from 'utils/deviceUtils'\nimport { TableCell, TableRow, tableCellClasses } from '@mui/material'\nimport { useTranslation } from 'react-i18next'\nimport { getFormattedDateTime } from 'utils/dateUtils'\nimport { getCurrencySymbol } from 'services/currency'\nimport { formatNumber } from 'utils/utils'\nimport { NUMBER_TYPES, ORDERS_TABLE_PRODUCT_LIST_GAP, ORDERS_TABLE_PRODUCT_ROW_HEIGHT_PX, ORDERS_TABLE_ROW_HEIGHT, ORDERS_TABLE_STATUS_OPTIONS } from 'constants/general.constants'\nimport { RiShareBoxLine } from 'react-icons/ri'\nimport { styled } from '@mui/system'\nimport ColorfulTag from 'components/ColorfulTag/ColorfulTag'\nimport { getLinkOrder } from 'api/links/links'\nimport CollapsingElement from 'components/CollapsingElement/CollapsingElement'\nimport Loader from 'components/Loader/Loader'\nimport { IoIosArrowDown } from 'react-icons/io'\nimport { extractOrderProduct } from 'utils/dataUtils'\nimport OrderProduct from 'components/OrderProduct/OrderProduct'\n\n/**\n * Represents a row view for the orders table\n * @param {object} rowData - The data object of a specific row\n */\nexport default function LinkOrdersTableRowView({\n rowData\n}) {\n const { t } = useTranslation()\n\n const [isExpanded, setIsExpanded] = useState(false)\n const [isLoadingMoreDetails, setIsLoadingMoreDetails] = useState(true)\n const [orderProducts, setOrderProducts] = useState([])\n\n const StyledTableRow = styled(TableRow)(({ theme }) => ({\n // hide all borders\n '&:not(:last-child) td, & th': {\n border: 0,\n }\n }))\n\n const StyledTableCell = styled(TableCell)(({ theme }) => ({\n [`&.${tableCellClasses.body}`]: {\n textAlign: 'center',\n padding: '0'\n },\n }))\n\n const productLineHeight = (ORDERS_TABLE_PRODUCT_ROW_HEIGHT_PX * rowData?.totalProductsCount) + (ORDERS_TABLE_PRODUCT_LIST_GAP * (rowData?.totalProductsCount - 1)) + 20\n const product3LineHeight = (ORDERS_TABLE_PRODUCT_ROW_HEIGHT_PX * 3) + (ORDERS_TABLE_PRODUCT_LIST_GAP * (rowData?.totalProductsCount - 1)) + 20\n\n const OpenInStoreLink = ({ redirectUrl }) => {\n return redirectUrl ? <a href={redirectUrl} target=\"_blank\" className={isMobile ? 'mobile-orders-table-row-view-actions' : 'orders-table-row-view orders-table-row-view-actions'}>\n {!isMobile && <div className={isMobile ? \"mobile-orders-table-row-view-view-in-shopify-action-text\" : \"orders-table-row-view-view-in-shopify-action-text\"}>{redirectUrl ? t('ORDERS_TABLE_ROW_ACTION_TEXT') : ''}</div>}\n <RiShareBoxLine className={isMobile ? 'mobile-orders-table-row-view-view-in-shopify-action-image' : 'orders-table-row-view-view-in-shopify-action-image'} />\n </a> : <div className={isMobile ? 'mobile-orders-table-row-view-actions' : 'orders-table-row-view orders-table-row-view-actions'}>\n {!isMobile && <div className={isMobile ? \"mobile-orders-table-row-view-view-in-shopify-action-text\" : \"orders-table-row-view-view-in-shopify-action-text\"}>{redirectUrl ? t('ORDERS_TABLE_ROW_ACTION_TEXT') : ''}</div>}\n <div className={isMobile ? 'mobile-orders-table-row-view-view-in-shopify-action-image' : 'orders-table-row-view-view-in-shopify-action-image'} />\n </div>\n }\n\n const actionsCellStyle = {\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n padding: '19px'\n }\n\n const orderProductsListStyle = {\n ...(rowData?.totalProductsCount > 3 ? { \n height: `${product3LineHeight}px`,\n overflowY: 'scroll'\n } : {\n height: `${productLineHeight}px`,\n }),\n }\n\n const orderProductsListLoaderStyle = {\n height: rowData?.totalProductsCount > 3 ? `${product3LineHeight}px` : `${productLineHeight}px`\n }\n\n function onExpandOrder() {\n setIsExpanded(prev => !prev)\n if (orderProducts.length === 0) {\n getLinkOrder(rowData?.linkId, rowData?.id)\n .then(orderProducts => {\n setOrderProducts(orderProducts?.map(orderProduct => extractOrderProduct(orderProduct)))\n })\n .catch(console.log)\n .finally(() => {\n setIsLoadingMoreDetails(false)\n })\n }\n }\n\n function getStatusBackgroundColor(status) {\n switch (status) {\n case ORDERS_TABLE_STATUS_OPTIONS.PAID: return '#00af50'\n case ORDERS_TABLE_STATUS_OPTIONS.REFUNDED: return '#f4b184'\n // PARTIALLY REFUNDED\n default: return '#ffd95e'\n }\n }\n\n function getStatusTextColor(status) {\n switch (status) {\n case ORDERS_TABLE_STATUS_OPTIONS.PAID: return 'white'\n case ORDERS_TABLE_STATUS_OPTIONS.REFUNDED: return '#432704'\n // PARTIALLY REFUNDED\n default: return '#987c1a'\n }\n }\n\n function renderRowContent() {\n return isMobile ? <StyledTableCell padding=\"normal\" align={'left'}>\n <div className='mobile-orders-table-row-view'>\n {rowData?.allowOrderDetails && <IoIosArrowDown className={`orders-table-row-view-expand-button-image ${isExpanded ? 'expanded' : ''}`} onClick={onExpandOrder} />}\n <div className=\"mobile-orders-table-row-view-content\">\n <div className=\"mobile-orders-table-row-view-details\">\n <div className=\"mobile-orders-table-row-view-created-at\">{getFormattedDateTime(new Date(rowData?.createdAt))}</div>\n <div className=\"mobile-orders-table-row-view-total-price-container\">\n <div className=\"mobile-orders-table-row-view-total-price\">{`${getCurrencySymbol(rowData?.currency)}${formatNumber(rowData?.totalPrice, NUMBER_TYPES.PRICE)}`}</div>\n {rowData?.actions && <OpenInStoreLink redirectUrl={rowData?.actions} />}\n </div>\n </div>\n <div className=\"mobile-orders-table-row-view-products-count-container\">\n <div className=\"mobile-orders-table-row-view-total-products-count\">{t('ORDERS_TABLE_ROW_TOTAL_PRODUCTS_COUNT', { count: rowData?.totalProductsCount })}</div>\n <ColorfulTag\n text={rowData?.status}\n textColor={getStatusTextColor(rowData?.status)}\n backgroundColor={getStatusBackgroundColor(rowData?.status)}\n isSmall={true}\n textSize='10px'\n />\n </div>\n </div>\n </div>\n </StyledTableCell> : <>\n <StyledTableCell padding=\"normal\" align={'left'}>\n <div className=\"orders-table-row-view orders-table-row-view-date-container\">\n {rowData?.allowOrderDetails && <IoIosArrowDown className={`orders-table-row-view-expand-button-image ${isExpanded ? 'expanded' : ''}`} onClick={onExpandOrder} />}\n <div className=\"orders-table-row-view-date\">{getFormattedDateTime(new Date(rowData?.createdAt))}</div>\n </div>\n </StyledTableCell>\n <StyledTableCell padding=\"normal\" align='right'>\n <div className='orders-table-row-view orders-table-row-view-items'>{t('ORDERS_TABLE_ROW_TOTAL_PRODUCTS_COUNT', { count: rowData?.totalProductsCount })}</div>\n </StyledTableCell>\n <StyledTableCell padding=\"normal\" align='right'>\n <div className='orders-table-row-view orders-table-row-view-total'>{`${getCurrencySymbol(rowData?.currency)}${formatNumber(rowData?.totalPrice, NUMBER_TYPES.PRICE)}`}</div>\n </StyledTableCell>\n <StyledTableCell padding=\"none\" align='right'>\n <div className=\"orders-table-row-view orders-table-row-view-status-container\">\n <div className='orders-table-row-view-status' style={{ backgroundColor: getStatusBackgroundColor(rowData?.status), color: getStatusTextColor(rowData?.status) }}>{rowData?.status}</div>\n </div>\n </StyledTableCell>\n <StyledTableCell padding=\"normal\" align='right' sx={actionsCellStyle}>\n <OpenInStoreLink redirectUrl={rowData?.actions} />\n </StyledTableCell>\n </>\n }\n\n return (\n <>\n {\n isMobile ? <StyledTableRow style={{ height: `${ORDERS_TABLE_ROW_HEIGHT}px` }}>\n {renderRowContent()}\n </StyledTableRow> : <>\n <StyledTableRow style={{ height: `${ORDERS_TABLE_ROW_HEIGHT}px` }}>\n {renderRowContent()}\n </StyledTableRow>\n </>\n }\n <TableRow sx={{ '& > *': { borderBottom: !isMobile && 'unset' } }}>\n <TableCell style={{ padding: 0 }} colSpan={isMobile ? 1 : 6}>\n <CollapsingElement\n expanded={isExpanded}\n >\n {\n isLoadingMoreDetails ? <div className=\"orders-table-row-view-more-details-loader-container\" style={orderProductsListLoaderStyle}>\n <Loader styles={{\n width: '20px',\n height: '20px',\n position: 'absolute',\n inset: 0,\n margin: 'auto'\n }} />\n </div> : <div className={isMobile ? \"mobile-orders-table-row-view-more-details\" : \"orders-table-row-view-more-details\"} style={orderProductsListStyle}>\n {\n orderProducts?.map(orderProduct => <OrderProduct\n key={orderProduct?.title + '__' + orderProduct?.variantTitle}\n title={orderProduct?.title}\n imageUrl={orderProduct?.imageUrl}\n variantTitle={orderProduct?.variantTitle}\n price={orderProduct?.price}\n quantity={orderProduct?.quantity}\n currency={rowData?.currency}\n />)\n }\n </div>\n }\n </CollapsingElement>\n </TableCell>\n </TableRow>\n </>\n )\n}","import { getLinkOrders } from 'api/links/links'\nimport LinkOrdersTableHeaderView from 'components/LinkOrdersTableHeaderView/LinkOrdersTableHeaderView'\nimport LinkOrdersTableRowView from 'components/LinkOrdersTableRowView/LinkOrdersTableRowView'\nimport PaydinTable from 'components/PaydinTable/PaydinTable'\nimport { MOBILE_ORDERS_TABLE_ROW_HEIGHT_PX, MOBILE_PRODUCTS_TABLE_ROW_HEIGHT_PX, ORDERS_TABLE_HEADERS_IDS, ORDERS_TABLE_ROWS_PER_PAGE, ORDERS_TABLE_ROW_HEIGHT_PX, PRODUCTS_TABLE_ROW_HEIGHT_PX } from 'constants/general.constants'\nimport React from 'react'\nimport { isMobile } from 'utils/deviceUtils'\nimport { HiOutlineShoppingBag } from 'react-icons/hi'\nimport { extractOrderRowData } from 'utils/dataUtils'\nimport './LinkOrdersTable.css'\nimport { useTranslation } from 'react-i18next'\n\n/**\n * Represents an orders table for a specific link.\n * @param {string} linkId - The id of the link \n * @param {number} salesCount - The total number of sale made with the link \n * @param {array} removedColumnIds - An array of column IDs that are required to remove from display\n */\nexport default function LinkOrdersTable({\n linkId,\n salesCount,\n removedColumnIds = [],\n allowOrderDetails = false\n}) {\n const { t } = useTranslation()\n \n function createData(id, createdAt, productsCount, totalPrice, status, url, currency, totalProductsCount, allowOrderDetails) {\n const data = {\n [ORDERS_TABLE_HEADERS_IDS.DATE]: createdAt,\n [ORDERS_TABLE_HEADERS_IDS.TOTAL_PRODUCTS_COUNT]: productsCount,\n [ORDERS_TABLE_HEADERS_IDS.TOTAL_PRICE]: totalPrice,\n [ORDERS_TABLE_HEADERS_IDS.STATUS]: status,\n [ORDERS_TABLE_HEADERS_IDS.ACTIONS]: url,\n currency,\n id,\n linkId,\n totalProductsCount,\n allowOrderDetails,\n }\n\n if (removedColumnIds.length > 0) {\n Object.keys(data).forEach(columnId => {\n if (removedColumnIds.includes(columnId)) {\n delete data[columnId]\n }\n })\n }\n\n return data\n }\n\n function normalizeTableData(items) {\n const normalizedData = []\n\n for (const item of items) {\n normalizedData.push(\n createData(\n item?.id,\n item?.createdAt,\n item?.totalProductsCount,\n item?.totalPrice,\n item?.status,\n item?.url,\n item?.currency,\n item?.totalProductsCount,\n allowOrderDetails,\n )\n )\n }\n\n return normalizedData\n }\n\n function getOrdersData(count, skip, onSuccess = () => { }, onFailure = () => { }) {\n getLinkOrders(linkId, count, skip)\n .then(orders => {\n onSuccess(normalizeTableData(orders ? orders.map(order => extractOrderRowData(order)) : []))\n })\n .catch(error => {\n console.log(error)\n onFailure(error)\n })\n }\n \n return (\n <PaydinTable\n visibleRowsCount={ORDERS_TABLE_ROWS_PER_PAGE}\n borderRadius='10px'\n totalCount={salesCount}\n rowHeightPx={isMobile ? MOBILE_ORDERS_TABLE_ROW_HEIGHT_PX : ORDERS_TABLE_ROW_HEIGHT_PX}\n rowView={LinkOrdersTableRowView}\n headerView={LinkOrdersTableHeaderView}\n hideHeaderInMobile={true}\n dataGenerator={getOrdersData}\n noItemsImage={<HiOutlineShoppingBag className='orders-table-no-items-image' />}\n noItemsText={t('ORDERS_TABLE_NO_ITEMS_TO_DISPLAY_MESSAGE')}\n removedColumnIds={removedColumnIds}\n />\n )\n}\n","import React from 'react'\nimport './DrawerStyledButtonList.css'\n\nexport default function DrawerStyledButtonList({\n buttons = []\n}) {\n return (\n <div className=\"drawer-styled-button-list\">\n {\n buttons.map(button => <div key={button?.text} className=\"drawer-styled-button-list-item-container\" onClick={button?.onClick} style={button?.color && { color: button?.color }}>\n <div className={`drawer-styled-button-list-item ${button?.className}`}>\n {button?.image}\n <div className=\"drawer-styled-button-list-item-text\">{button?.text}</div>\n </div>\n </div>)\n }\n </div>\n )\n}","import React, { useEffect, useState } from 'react'\nimport './PreviewLinkSection.css'\nimport ImageBox from 'components/ImageBox/ImageBox'\nimport LinkAnalyticsSection from 'components/LinkAnalyticsSection/LinkAnalyticsSection'\nimport { useTranslation } from 'react-i18next'\nimport { formatNumber } from 'utils/utils'\nimport { getCurrencySymbol } from 'services/currency'\nimport { isMobile } from 'utils/deviceUtils'\nimport { RiDeleteBin6Line } from 'react-icons/ri'\nimport { BiDotsHorizontalRounded } from 'react-icons/bi'\nimport { copyToClipboard } from 'services/SystemService'\nimport { useHistoryContext } from 'contexts/History'\nimport { environment } from 'conf'\nimport { useGeneralDataContext, useUserDetailsContext } from 'contexts/User'\nimport PaydinDialog, { PAYDIN_DIALOG_BUTTON_TYPES } from 'dialogs/PaydinDialog/PaydinDialog'\nimport { DeleteLinkAPI, GetLinkAnalytics, GetLinkDetailsAPI } from 'api/links/links'\nimport { CONTENT_TYPES, LINKS_PAGE_MOBILE_OPTIONS_DRAWER_CLOSING_DELAY, LINK_TYPES, NUMBER_TYPES, PAYDIN_DRAWER_TRANSITION_DURATION, PAYDIN_MENU_OPENING_DIRECTIONS, PRODUCT_TABLE_HEADERS_IDS, SECTION_TYPES, SHORT_INFO_URL_NO_CUSTOM_IMAGE_DIMENS_PX, SHORT_URL_SELECTION_TYPE, VIEW_MODES } from 'constants/general.constants'\nimport InfluencerStrip from 'components/InfluencerStrip/InfluencerStrip'\nimport MultiLineText from 'components/MultiLineText/MultiLineText'\nimport LinkUrlTypeTag from 'components/LinkUrlTypeTag/LinkUrlTypeTag'\nimport ContentDialog from 'dialogs/ContentDialog/ContentDialog'\nimport { GetInfluencer } from 'api/influencers/influencers'\nimport ContentDialogLoader from 'components/ContentDialogLoader/ContentDialogLoader'\nimport { extractCollectionData, extractProductData } from 'utils/dataUtils'\nimport PreviewItemDataSection from 'components/PreviewItemDataSection/PreviewItemDataSection'\nimport ProductsTable from 'components/ProductsTable/ProductsTable'\nimport LinkAnalyticsCharts from 'components/LinkAnalyticsCharts/LinkAnalyticsCharts'\nimport { LINKS_PAGE_URL, SHORTS_PAGE_URL } from 'constants/routes.constants'\nimport LinkOrdersTable from 'components/LinkOrdersTable/LinkOrdersTable'\nimport ContentDialogTopbar from 'components/ContentDialogTopbar/ContentDialogTopbar'\nimport PaydinMenu from 'components/PaydinMenu/PaydinMenu'\nimport { MdOutlineContentCopy, MdOutlineEdit } from 'react-icons/md'\nimport MobileLinkPreviewSimulator from 'components/MobileLinkPreviewSimulator/MobileLinkPreviewSimulator'\nimport { v4 as uuidV4 } from 'uuid'\nimport ItemsViewSection from 'components/ItemsViewSection/ItemsViewSection'\nimport PreviewLinkProductsListItem from 'components/PreviewLinkProductsListItem/PreviewLinkProductsListItem'\nimport DrawerStyledButtonList from 'components/DrawerStyledButtonList/DrawerStyledButtonList'\n\n/**\n * Represents the section in which the link data is displayed.\n * @param {string} image - The image url of the link \n * @param {string} description - The description of the link \n * @param {number} linkViews - The number of views the link has\n * @param {number} linkViews - The number of views the link has\n * @param {number} linkRevenue - The total revenue of the link\n * @param {number} linkCheckoutsCompleted - The number of checkouts done on the link's products\n * @param {number} linkCheckoutRequests - The number of checkouts requests done on the link's products\n * @param {String} promocode - The link's promocode\n * @param {string} influencerUsername - The link's influencer username\n * @param {string} influencerImage - The link's influencer image\n * @param {string} urlSelectionType - Represents the way a url was picked. Relevant only for shorts\n * @param {string} linkCurrency - The currency of the link's products price which is set on link's creation\n */\nexport default function PreviewLinkSection({\n type,\n data = {},\n onDeleteLink = () => { },\n onSaveSuccess = () => { }\n}) {\n const { t } = useTranslation()\n const history = useHistoryContext()\n const { \n userDetails,\n isFreeUserAndTrialEnded,\n getFrontendUrl,\n } = useUserDetailsContext()\n const {\n showApprovalMessage,\n openDrawer,\n closeDrawer,\n openFreeTrialDialog,\n finishedUpdatingObject\n } = useGeneralDataContext()\n\n const [dialogState, setDialogState] = useState({\n isOpen: false,\n title: '',\n message: '',\n leftButtonText: '',\n rightButtonText: '',\n rightButtonClickHandler: () => { }\n })\n const [contentDialogState, setContentDialogState] = useState({\n isOpen: false,\n contentType: CONTENT_TYPES.LINK\n })\n const [isLoadingLink, setIsLoadingLink] = useState(true)\n const [url, setUrl] = useState('')\n const [promocode, setPromocode] = useState('')\n const [selectedInfluencerUsername, setSelectedInfluencerUsername] = useState(userDetails?.isAdmin ? '' : userDetails?.influencerUsername)\n const [selectedInfluencerImage, setSelectedInfluencerImage] = useState(userDetails?.isAdmin ? '' : userDetails?.influencerUsername)\n const [linkData, setLinkData] = useState({\n products: []\n })\n const [urlSelectionType, setUrlSelectionType] = useState('')\n const [selectedProducts, setSelectedProducts] = useState([])\n const [selectedCollections, setSelectedCollections] = useState([])\n const [shouldDisplayProductsTable, setShouldDisplayProductsTable] = useState(true)\n const [linkAnalyticsData, setLinkAnalyticsData] = useState({\n isLoading: true,\n data: {},\n currency: '',\n views: 0,\n checkouts: 0,\n revenue: 0,\n checkoutRequests: 0,\n totalTax: 0\n })\n const [optionsMenuState, setOptionsMenuState] = useState({\n isOpen: false,\n anchorElement: null,\n onClose: () => { }\n })\n\n useEffect(() => {\n loadLink()\n }, [])\n\n\n useEffect(() => {\n if (finishedUpdatingObject) {\n loadLink()\n }\n }, [finishedUpdatingObject, ])\n\n function loadLink() {\n GetLinkDetailsAPI(data?.linkId)\n .then(linkData => {\n let imagesWithIds = []\n if (type === LINK_TYPES.LOOK && linkData?.images && linkData.images?.length > 0) {\n imagesWithIds = linkData.images.map(image => {\n return {\n src: image,\n id: uuidV4()\n }\n })\n }\n const shoppingRedirectUrl = linkData?.shopping_redirect_url ?? ''\n const utmParams = {\n UTMSource: linkData?.utm_params?.utm_source ?? '',\n UTMMedium: linkData?.utm_params?.utm_medium ?? '',\n UTMCampaign: linkData?.utm_params?.utm_campaign ?? '',\n UTMTerm: linkData?.utm_params?.utm_term ?? '',\n UTMContent: linkData?.utm_params?.utm_content ?? '',\n }\n const linkProductsSelectedOptions = linkData?.selected_options ?? {}\n const linkProducts = linkData?.products?.map(product => {\n if (Object.keys(linkProductsSelectedOptions).includes(product?.inventory_id)) {\n return extractProductData(product, linkProductsSelectedOptions[product?.inventory_id])\n } else {\n return extractProductData(product)\n }\n }) ?? []\n\n setLinkData({\n linkId: linkData?.link_id ?? '',\n images: imagesWithIds,\n description: linkData.description ?? '',\n currency: linkData?.link_analytics?.currency ?? userDetails?.businessCurrency,\n analytics: {\n views: linkData?.link_analytics?.visits ?? 0,\n checkouts: linkData?.link_analytics?.checkouts ?? 0,\n revenue: linkData?.link_analytics?.revenue ?? 0,\n checkoutRequests: linkData?.link_analytics?.requested_checkouts ?? 0\n },\n promocode: {\n code: linkData?.promocode?.code ?? ''\n },\n products: linkProducts,\n title: linkData?.description ?? \"\", // consider the description as the shorts's title\n shoppingRedirectUrl,\n influencerUsername: linkData?.influencer_username,\n utmParams,\n selectedOptions: linkProductsSelectedOptions,\n })\n\n GetLinkAnalytics(linkData?.link_id)\n .then(analyticsResponse => {\n setLinkAnalyticsData({\n isLoading: false,\n data: (type === LINK_TYPES.SHORT ? analyticsResponse?.shorts_analytics?.data : analyticsResponse?.looks_analytics?.data) ?? {},\n currency: analyticsResponse?.currency ?? '',\n views: (type === LINK_TYPES.LOOK ? analyticsResponse?.looks_analytics?.visits : analyticsResponse?.shorts_analytics?.visits) ?? 0,\n checkouts: (type === LINK_TYPES.LOOK ? analyticsResponse?.looks_analytics?.checkouts : analyticsResponse?.shorts_analytics?.checkouts) ?? 0,\n revenue: (type === LINK_TYPES.LOOK ? analyticsResponse?.looks_analytics?.revenue : analyticsResponse?.shorts_analytics?.revenue) ?? 0,\n checkoutRequests: (type === LINK_TYPES.LOOK ? analyticsResponse?.looks_analytics?.requested_checkouts : analyticsResponse?.shorts_analytics?.requested_checkouts) ?? 0,\n totalTax: (type === LINK_TYPES.LOOK ? analyticsResponse?.looks_analytics?.total_tax : analyticsResponse?.shorts_analytics?.total_tax) ?? 0,\n influencerAttributedRevenue: (type === LINK_TYPES.LOOK ? analyticsResponse?.looks_analytics?.influencer_attributed_revenue : analyticsResponse?.shorts_analytics?.influencer_attributed_revenue) ?? 0\n })\n })\n .catch(error => {\n console.log(error)\n setLinkAnalyticsData(prev => ({\n ...prev,\n isLoading: false\n }))\n })\n\n\n setUrlSelectionType(getUrlSelectionType(linkData))\n setSelectedProducts(linkData?.products ? linkData?.products?.map(product => extractProductData(product)) : [])\n setSelectedCollections(linkData?.collections ? linkData?.collections?.map(collection => extractCollectionData(collection)) : [])\n setPromocode(linkData?.promocode?.code ?? '')\n setUrl(shoppingRedirectUrl)\n \n if (userDetails?.isAdmin && linkData?.influencer_username) {\n loadInfluencer(linkData?.influencer_username, linkData?.promocode?.code)\n } else {\n setIsLoadingLink(false)\n }\n })\n .catch(error => {\n console.log(error)\n history.push(type === LINK_TYPES.SHORT ? SHORTS_PAGE_URL : LINKS_PAGE_URL)\n })\n }\n\n function openOptionsMenu(e) {\n setOptionsMenuState({\n isOpen: true,\n anchorElement: e.currentTarget,\n onClose: () => setOptionsMenuState(prev => ({\n ...prev,\n isOpen: false\n }))\n })\n }\n\n function getUrlSelectionType(linkData) {\n if (linkData?.products && linkData?.products?.length > 0) {\n return SHORT_URL_SELECTION_TYPE.PRODUCT\n }\n\n if (linkData?.collections && linkData?.collections?.length > 0) {\n return SHORT_URL_SELECTION_TYPE.COLLECTION\n }\n\n return SHORT_URL_SELECTION_TYPE.CUSTOM\n }\n\n function loadInfluencer(influencerUsername, predefinedPromocode) {\n GetInfluencer(influencerUsername)\n .then(response => {\n setSelectedInfluencerUsername(influencerUsername)\n setSelectedInfluencerImage(response?.profile_image_url)\n setPromocode(predefinedPromocode ? predefinedPromocode : (response?.promocode ?? ''))\n })\n .finally(() => {\n setIsLoadingLink(false)\n })\n }\n\n function isValueEnabled(isValueEnabled) {\n return userDetails?.isAdmin || isValueEnabled\n }\n\n function closeContentDialog() {\n setContentDialogState(prev => ({\n ...prev,\n isOpen: false\n }))\n }\n\n function closeDialog() {\n setDialogState(prev => ({\n ...prev,\n isOpen: false\n }))\n }\n\n function hasLinkImages() {\n return linkData?.images && linkData.images.length > 0\n }\n\n function isProductUrlTypeSelected() {\n return urlSelectionType === SHORT_URL_SELECTION_TYPE.PRODUCT\n }\n\n function isCollectionUrlTypeSelected() {\n return urlSelectionType === SHORT_URL_SELECTION_TYPE.COLLECTION\n }\n\n function getPreviewImage() {\n if (type === LINK_TYPES.LOOK) {\n if (hasLinkImages()) {\n return linkData?.images[0]?.src\n }\n } else {\n if (isProductUrlTypeSelected()) {\n return selectedProducts[0]?.imageUrl\n }\n\n if (isCollectionUrlTypeSelected()) {\n return selectedCollections[0]?.images?.medium?.src\n }\n }\n\n return ''\n }\n\n function edit() {\n if (isMobile) {\n closeDrawer()\n } else {\n optionsMenuState.onClose()\n }\n\n setTimeout(() => {\n if (isFreeUserAndTrialEnded()) {\n openFreeTrialDialog()\n } else {\n setContentDialogState({\n isOpen: true,\n contentType: type === LINK_TYPES.LOOK ? CONTENT_TYPES.LINK : CONTENT_TYPES.SHORT\n })\n }\n }, PAYDIN_DRAWER_TRANSITION_DURATION)\n }\n\n function copyLink() {\n if (isMobile) {\n closeDrawer()\n } else {\n optionsMenuState.onClose()\n }\n\n setTimeout(async () => {\n let url = ''\n let message = ''\n url = `${getFrontendUrl()}${userDetails?.username}/${linkData?.linkId}`\n if (type === LINK_TYPES.LOOK) {\n message = t('LINK_COPIED_TO_CLIPBOARD')\n } else {\n message = t('SHORT_COPIED_TO_CLIPBOARD')\n }\n\n await copyToClipboard(url)\n showApprovalMessage(message)\n }, PAYDIN_DRAWER_TRANSITION_DURATION)\n }\n\n function onDeleteClick() {\n if (isMobile) {\n history.goBack()\n setTimeout(() => {\n showDeleteConfirmationDialog()\n }, LINKS_PAGE_MOBILE_OPTIONS_DRAWER_CLOSING_DELAY)\n } else {\n optionsMenuState.onClose()\n showDeleteConfirmationDialog()\n }\n }\n\n function showDeleteConfirmationDialog() {\n setDialogState(prev => ({\n ...prev,\n isOpen: true,\n title: t('PREVIEW_SHORT_DELETE_SHORT_DIALOG_TITLE'),\n message: type === LINK_TYPES.LOOK? t('PREVIEW_LINK_PAGE_DELETE_LINK_DIALOG_MESSAGE') : t('PREVIEW_SHORT_DELETE_SHORT_DIALOG_MESSAGE'),\n leftButtonText: t('PREVIEW_SHORT_DELETE_SHORT_DIALOG_LEFT_BUTTON_TEXT'),\n rightButtonText: t('PREVIEW_SHORT_DELETE_SHORT_DIALOG_RIGHT_BUTTON_TEXT'),\n rightButtonClickHandler: deleteLink\n }))\n }\n\n function deleteLink() {\n DeleteLinkAPI(data?.linkId)\n .then(_ => {\n onDeleteLink(data?.linkId)\n setTimeout(() => {\n history.goBack()\n }, 200)\n })\n .catch(error => {\n console.log(error)\n setDialogState(prev => ({\n ...prev,\n title: t('GENERAL_ERROR_DIALOG_TITLE'),\n message: t('GENERAL_ERROR_DIALOG_MESSAGE'),\n leftButtonText: t('GENERAL_ERROR_DIALOG_LEFT_BUTTON_TEXT'),\n rightButtonText: ''\n }))\n })\n }\n\n function openOptionsDrawer() {\n openDrawer(true, <>\n <div className=\"mobile-short-item-more-options-menu-container\">\n <div className=\"mobile-short-item-more-options-menu-item-line\">\n <div className=\"mobile-short-item-more-options-menu-single-item\" onClick={copyLink}>\n <MdOutlineContentCopy className=\"mobile-short-item-more-options-menu-single-item-image\" />\n <div className=\"mobile-short-item-more-options-menu-single-item-text\">{t('LINKS_PAGE_OPTIONS_MENU_ITEM_COPY_LINK')}</div>\n </div>\n </div>\n <DrawerStyledButtonList\n buttons={[\n ...((userDetails?.isAdmin || (!userDetails?.isAdmin && userDetails?.permissions?.isActiveInfluencer)) ? [{\n text: t('LINKS_PAGE_OPTIONS_MENU_ITEM_EDIT'),\n image: <MdOutlineEdit className=\"mobile-short-item-more-options-menu-section-item-image\" />,\n onClick: edit\n }] : []),\n ...((userDetails?.isAdmin || (!userDetails?.isAdmin && userDetails?.permissions?.isActiveInfluencer)) ? [{\n text: t('LINKS_PAGE_OPTIONS_MENU_ITEM_DELETE'),\n image: <RiDeleteBin6Line className=\"mobile-short-item-more-options-menu-section-item-image\" />,\n className: 'mobile-short-item-more-options-menu-section-item-delete-short',\n onClick: onDeleteClick\n }] : [])\n ]}\n />\n </div>\n </>)\n }\n\n function renderLinkAnalytics() {\n return <div className=\"preview-link-section-link-analytics\">\n <div className={isMobile ? \"mobile-preview-link-section-link-analytics-data\" : \"preview-link-section-link-analytics-data\"}>\n {isValueEnabled(userDetails?.permissions?.clicksEnabled) && <LinkAnalyticsSection\n title={t('PREVIEW_LINK_SECTION_ANALYTICS_SECTION_VIEWS_TITLE')}\n value={formatNumber(Math.max(linkAnalyticsData?.views ?? 0, linkAnalyticsData?.checkoutRequests, linkAnalyticsData?.checkouts), NUMBER_TYPES.SHORT)}\n />}\n {type === LINK_TYPES.LOOK && isValueEnabled(userDetails?.permissions?.salesEnabled) && <LinkAnalyticsSection\n title={t('PREVIEW_LINK_SECTION_ANALYTICS_SECTION_CHECKOUTS_REQUESTED_TITLE')}\n value={formatNumber(Math.max(linkAnalyticsData?.checkoutRequests, linkAnalyticsData?.checkouts), NUMBER_TYPES.SHORT)}\n />}\n {isValueEnabled(userDetails?.permissions?.salesEnabled) && <LinkAnalyticsSection\n title={t('PREVIEW_LINK_SECTION_ANALYTICS_SECTION_CHECKOUTS_COMPLETED_TITLE')}\n value={formatNumber(linkAnalyticsData?.checkouts, NUMBER_TYPES.SHORT)}\n />}\n {isValueEnabled(userDetails?.permissions?.revenueEnabled) && <LinkAnalyticsSection\n title={userDetails?.isAdmin ? t('PREVIEW_LINK_SECTION_ANALYTICS_SECTION_REVENUE_TITLE') : t('PREVIEW_LINK_SECTION_ANALYTICS_SECTION_INFLUENCER_REVENUE_TITLE')}\n value={`${getCurrencySymbol(linkAnalyticsData?.currency)}${formatNumber(userDetails?.isAdmin ? linkAnalyticsData?.revenue : linkAnalyticsData?.influencerAttributedRevenue, NUMBER_TYPES.SHORT)}`}\n />}\n {isValueEnabled(userDetails?.permissions?.salesEnabled && userDetails?.permissions?.clicksEnabled && userDetails?.permissions?.crEnabled) && <LinkAnalyticsSection\n title={t('PREVIEW_LINK_SECTION_ANALYTICS_SECTION_CR_TITLE')}\n value={`${formatNumber((linkAnalyticsData?.checkouts / linkAnalyticsData?.views) * 100, NUMBER_TYPES.PERCENTAGE)}%`}\n />}\n {isValueEnabled(userDetails?.permissions?.revenueEnabled && userDetails?.permissions?.aovEnabled) && <LinkAnalyticsSection\n title={t('PREVIEW_LINK_SECTION_ANALYTICS_SECTION_CART_AVERAGE_TITLE')}\n value={`${getCurrencySymbol(linkAnalyticsData?.currency)}${formatNumber(linkAnalyticsData?.revenue / linkAnalyticsData?.checkouts, NUMBER_TYPES.SHORT, true)}`}\n />}\n </div>\n </div>\n }\n\n function getTitle() {\n return type === LINK_TYPES.LOOK ? t('LINK_VIEW_TOPBAR_CENTER_TITLE_PREVIEW_LINK') : t('SHORT_VIEW_PREVIEW_SHORT_TITLE')\n }\n\n return (\n <div className={isMobile ? 'mobile-preview-link-container' : 'preview-link-container'}>\n <div className={isMobile ? 'mobile-preview-link-section-container' : 'preview-link-section-container'}>\n <div className={isMobile ? 'mobile-preview-link-section-details' : 'preview-link-section-details'} style={{ width: isMobile ? '100%' : (type === LINK_TYPES.SHORT ? '100%' : '70%') }}>\n <ContentDialogTopbar\n title={getTitle()}\n onBackButtonClick={() => history.goBack()}\n rightElement={\n <BiDotsHorizontalRounded className='short-view-more-options-button' onClick={isMobile ? openOptionsDrawer : openOptionsMenu} />\n }\n />\n {isLoadingLink && <ContentDialogLoader />}\n <div className={`${isMobile ? \"mobile-preview-link-section-link-details-container\" : \"preview-link-section-link-details-container\"} ${type === LINK_TYPES.SHORT ? 'short' : ''}`}>\n <div className={isMobile ? \"mobile-preview-link-section-link-details\" : \"preview-link-section-link-details\"} style={{ height: !getPreviewImage() && 'fit-content' }}>\n {\n getPreviewImage() && <ImageBox\n className={`${isMobile ? 'mobile-preview-link-section-link-image' : 'preview-link-section-link-image'} ${urlSelectionType !== SHORT_URL_SELECTION_TYPE.CUSTOM ? 'enlarge' : ''}`}\n image={getPreviewImage()}\n enlargeImageOnClick={true}\n showBorder={type === LINK_TYPES.LOOK || urlSelectionType !== SHORT_URL_SELECTION_TYPE.CUSTOM}\n allowVideo={true}\n />\n }\n <div className='preview-short-section-link-description-container' style={{ width: `calc(100% - (${getPreviewImage() ? SHORT_INFO_URL_NO_CUSTOM_IMAGE_DIMENS_PX : 0}px + ${getPreviewImage() ? '10px' : ''}))` }}>\n {\n linkData?.description && <MultiLineText\n text={linkData?.description}\n className='preview-short-section-link-description'\n lines={1}\n oneWord={true}\n />\n }\n {\n !isMobile ? renderLinkAnalytics() : (type === LINK_TYPES.LOOK && <div className='mobile-preview-link-section-link-products-list'>\n <ItemsViewSection\n title={t('PREVIEW_LINK_PAGE_PRODUCTS_LIST_TITLE', { productsCount: linkData?.products.length })}\n data={linkData?.products}\n viewItemComponent={PreviewLinkProductsListItem}\n type={SECTION_TYPES.STRIP}\n hasPadding={false}\n paddingVertical='0px'\n hasTitlePadding={false}\n alignEnd={true}\n isExpandingFullHeight={true}\n />\n </div>)\n }\n </div>\n </div>\n {\n type === LINK_TYPES.SHORT && <div className={isMobile ? 'mobile-preview-link-section-url-container' : 'preview-link-section-url-container'}>\n <LinkUrlTypeTag\n type={urlSelectionType}\n hasHorizontalMargin={!isMobile}\n />\n <MultiLineText\n text={url}\n className='preview-link-section-url'\n lines={isMobile ? 2 : 1}\n />\n </div>\n }\n {isMobile && renderLinkAnalytics()}\n {\n !isLoadingLink && (\n (userDetails?.isAdmin && (selectedInfluencerImage || selectedInfluencerUsername)) ? (\n <InfluencerStrip\n image={selectedInfluencerImage}\n username={selectedInfluencerUsername}\n promocode={promocode}\n />\n ) : (\n promocode && <div className={isMobile ? \"mobile-preview-link-section-promocode\" : \"preview-link-section-promocode\"}>\n <div className='preview-link-section-promocode-label'>{t('PREVIEW_LINK_SECTION_PROMOCODE_SECTION_TITLE')}</div>\n <div className='preview-link-section-promocode-value'>{promocode}</div>\n </div>\n )\n )\n }\n </div>\n <div className={isMobile ? \"mobile-preview-link-section-link-graphs\" : \"preview-link-section-link-graphs\"} style={type === LINK_TYPES.SHORT ? { maxWidth: isMobile ? '100vw' : '55vw', paddingInline: isMobile ? '0' : '2.5vw' } : {}}>\n {\n shouldDisplayProductsTable && <PreviewItemDataSection\n title={t('TOP_PERFORMING_PRODUCTS_SECTION_TITLE')}\n NoBackgroundColor={true}\n hasPadding={true}\n width='100%'\n >\n <ProductsTable\n linkId={data?.linkId}\n setHasProducts={setShouldDisplayProductsTable}\n removedColumnIds={[\n ...(type === LINK_TYPES.LOOK ? [] : [PRODUCT_TABLE_HEADERS_IDS.VIEW, PRODUCT_TABLE_HEADERS_IDS.ADD]),\n ...(!userDetails?.isAdmin && !userDetails?.permissions?.revenueEnabled ? [PRODUCT_TABLE_HEADERS_IDS.BUY] : []),\n ]}\n />\n </PreviewItemDataSection>\n }\n {\n userDetails?.isAdmin && <PreviewItemDataSection\n title={t('RECENT_ORDERS_SECTION_TITLE')}\n NoBackgroundColor={true}\n hasPadding={true}\n width='100%'\n >\n <LinkOrdersTable\n linkId={data?.linkId}\n salesCount={linkData?.analytics?.checkouts}\n allowOrderDetails={data?.allowOrderDetails ?? true} //Check if not None or undefined, if so default is true\n />\n </PreviewItemDataSection>\n }\n <LinkAnalyticsCharts\n width='100%'\n hasPadding={false}\n noBackgroundColor={true}\n chartsData={linkAnalyticsData.data}\n isLoadingChartsData={linkAnalyticsData.isLoading}\n currency={getCurrencySymbol(linkData?.currency)}\n timeRangeName={type === LINK_TYPES.LOOK ? t('PAGE_VIEW_LINK_ANALYTICS_CHART_NO_DATA_TEXT_SUFFIX') : t('PAGE_VIEW_SHORT_ANALYTICS_CHART_NO_DATA_TEXT_SUFFIX')}\n />\n </div>\n </div>\n {\n (!isMobile && type === LINK_TYPES.LOOK) && <div className=\"preview-link-section-mobile-preview\">\n <MobileLinkPreviewSimulator\n mainImageUrl={hasLinkImages() ? linkData?.images[0]?.src : ''}\n products={selectedProducts}\n isLinkExpired={linkData?.isLinkExpired}\n />\n </div>\n }\n </div>\n {\n !isMobile && <PaydinMenu\n anchorElement={optionsMenuState.anchorElement}\n isOpen={optionsMenuState.isOpen}\n onClose={optionsMenuState.onClose}\n direction={PAYDIN_MENU_OPENING_DIRECTIONS.RIGHT}\n options={[\n ...((userDetails?.isAdmin || (!userDetails?.isAdmin && userDetails?.permissions?.isActiveInfluencer)) ? [{\n text: t('LINKS_PAGE_OPTIONS_MENU_ITEM_EDIT'),\n onClick: edit\n }] : []),\n {\n text: t('LINKS_PAGE_OPTIONS_MENU_ITEM_COPY_LINK'),\n onClick: copyLink\n },\n ...((userDetails?.isAdmin || (!userDetails?.isAdmin && userDetails?.permissions?.isActiveInfluencer)) ? [{\n className: 'short-view-options-menu-delete-option',\n text: t('LINKS_PAGE_OPTIONS_MENU_ITEM_DELETE'),\n onClick: onDeleteClick\n }] : [])\n ]}\n />\n }\n <PaydinDialog\n isDialogOpen={dialogState.isOpen}\n title={dialogState.title}\n message={dialogState.message}\n handleDialogClose={closeDialog}\n closeOnRightClick={false}\n rightButtonType={PAYDIN_DIALOG_BUTTON_TYPES.SECONDARY}\n leftButtonText={dialogState.leftButtonText}\n isLeftButtonWithLoader={false}\n rightButtonText={dialogState.rightButtonText}\n onRightButtonClick={dialogState.rightButtonClickHandler}\n isRightButtonWithLoader={dialogState.isRightButtonWithLoader}\n />\n <ContentDialog\n isDialogOpen={contentDialogState.isOpen}\n handleDialogClose={closeContentDialog}\n data={{\n linkId: linkData?.linkId,\n linkData\n }}\n contentType={contentDialogState.contentType}\n mode={VIEW_MODES.EDIT}\n onSaveSuccess={updatedLink => {\n loadLink()\n onSaveSuccess(updatedLink)\n }}\n />\n </div>\n )\n}","import React from 'react'\nimport './DateIntervalOption.css'\nimport { isMobile } from 'utils/deviceUtils'\n\n/**\n * Represents a predefined date interval option that can be translated to a date range.\n * Used in @see DatePicker component.\n * @param {object} item - The data object of this item\n * @param {function} onItemClick - A function to perform whenever this item is clicked\n */\nexport default function DateIntervalOption({\n item,\n onItemClick = () => { }\n}) {\n return (\n <div\n className={`${isMobile ? 'mobile-date-interval-option' : 'date-interval-option'} ${item?.isSelected ? 'selected' : ''}`}\n onClick={() => onItemClick(item?.name)}\n >\n {item?.name}\n </div>\n )\n}","import React, { useEffect, useRef, useState } from 'react'\nimport './DatePicker.css'\nimport ReactDatePicker from 'react-datepicker'\nimport { subDays } from 'date-fns'\nimport \"react-datepicker/dist/react-datepicker.css\"\nimport { getFormattedDateRange, getFormattedShortDateRange } from 'utils/dateUtils'\nimport { useTranslation } from 'react-i18next'\nimport { isMobile } from 'utils/deviceUtils'\nimport ItemsViewSection from 'components/ItemsViewSection/ItemsViewSection'\nimport DateIntervalOption from 'components/DateIntervalOption/DateIntervalOption'\nimport { ANALYTICS_PAGE_RETROACTIVE_DATA_REPORT_TIME_INTERVALS_NAMES, DATE_PICKER_DATE_INTERVAL_OPTION_WIDTH_PX, SECTION_TYPES } from 'constants/general.constants'\n\nimport './GeneralReactDatePickerCustomStyles.css'\nif (isMobile) { // This imports a custom stylings for the core component of the date picker wrapper component, that are required only in mobile mode.\n import('./MobileReactDatePickerCustomStyles.css')\n}\n\n/**\n * Represents a date picker.\n * Used to select a date range by either the displayed calendar or\n * a predefined date interval options.\n * @param {date} selectedStartDate - The currently selected start date\n * @param {date} selectedEndDate - The currently selected end date\n * @param {array} dateIntervals - The array of the date interval options\n * @param {string} selectedDateInterval - The currently selected date interval option name\n * @param {function} onCancelClick - A function to perform whenever the cancel button is clicked\n * @param {function} onUpdateClick - A function to perform whenever the update button is clicked\n */\nexport default function DatePicker({\n selectedStartDate = null,\n selectedEndDate = null,\n dateIntervals = [],\n selectedDateInterval = '',\n onCancelClick = () => { },\n onUpdateClick = () => { }\n}) {\n const { t } = useTranslation()\n\n const [isAbleToUpdate, setIsAbleToUpdate] = useState(false)\n const [selectedDates, setSelectedDates] = useState({\n selectedStartDate,\n selectedEndDate,\n selectedDateInterval,\n })\n\n const dateIntervalsStripRef = useRef(null)\n\n useEffect(() => {\n if (dateIntervalsStripRef?.current) {\n const selectedDateIntervalIndex = dateIntervals.findIndex(interval => interval?.name === selectedDateInterval)\n dateIntervalsStripRef?.current?.scrollBy(selectedDateIntervalIndex * DATE_PICKER_DATE_INTERVAL_OPTION_WIDTH_PX, 0)\n }\n }, [])\n\n useEffect(() => {\n setIsAbleToUpdate(\n selectedDateInterval === ANALYTICS_PAGE_RETROACTIVE_DATA_REPORT_TIME_INTERVALS_NAMES.LIFETIME ||\n Object.values(ANALYTICS_PAGE_RETROACTIVE_DATA_REPORT_TIME_INTERVALS_NAMES).includes(selectedDateInterval) || (\n selectedStartDate !== null && selectedEndDate !== null\n )\n\n )\n }, [selectedDateInterval, selectedStartDate, selectedEndDate])\n\n function handleDateIntervalSelection(newStartDate, newEndDate) {\n setIsAbleToUpdate(true)\n setSelectedDates({\n selectedDateInterval: t('DATE_PICKER_CUSTOM_DATE_RANGE_SELECTED_INTERVAL_NAME'),\n selectedStartDate: newStartDate,\n selectedEndDate: newEndDate\n })\n }\n\n function isLifetimeRangeSelected() {\n return selectedDateInterval === ANALYTICS_PAGE_RETROACTIVE_DATA_REPORT_TIME_INTERVALS_NAMES.LIFETIME\n }\n\n function getDateRangeDisplayText() {\n return isLifetimeRangeSelected() ? ANALYTICS_PAGE_RETROACTIVE_DATA_REPORT_TIME_INTERVALS_NAMES.LIFETIME : getFormattedDateRange(selectedDates.selectedStartDate, selectedDates.selectedEndDate)\n }\n\n function getShortDateRangeDisplayText() {\n return isLifetimeRangeSelected() ? ANALYTICS_PAGE_RETROACTIVE_DATA_REPORT_TIME_INTERVALS_NAMES.LIFETIME : getFormattedShortDateRange(selectedDates.selectedStartDate, selectedDates.selectedEndDate)\n }\n\n function selectDateInterval(interval) {\n const selectedDateInterval = dateIntervals.find(interval1 => interval1?.name === interval)\n if (selectedDateInterval) {\n setSelectedDates(prev => ({\n ...prev,\n selectedStartDate: selectedDateInterval?.timeRange[0],\n selectedEndDate: selectedDateInterval?.timeRange[1],\n selectedDateInterval: interval\n }))\n }\n }\n\n function onUpdate() {\n onUpdateClick(selectedDates.selectedStartDate, selectedDates.selectedEndDate, selectedDates.selectedDateInterval)\n }\n\n return (\n <div className={isMobile ? \"mobile-date-picker-container\" : \"date-picker-container\"}>\n {\n isMobile && <div className=\"date-picker-top-bar\">\n <div style={{ width: '25%' }}>\n <div className=\"date-picker-top-bar-cancel-button\" onClick={onCancelClick}>{t('DATE_PICKER_CANCEL_BUTTON_TEXT')}</div>\n </div>\n <div style={{ width: '50%' }}>\n <div className='date-picker-top-bar-status'>{getShortDateRangeDisplayText()}</div>\n </div>\n <div style={{ width: '25%' }}>\n <div className={`date-picker-top-bar-update-button ${!isAbleToUpdate ? 'disabled' : ''}`} onClick={onUpdate}>{t('DATE_PICKER_UPDATE_BUTTON_TEXT')}</div>\n </div>\n </div>\n }\n <div className={isMobile ? \"mobile-date-picker-predefined-date-intervals\" : \"date-picker-predefined-date-intervals\"}>\n {\n isMobile ? <ItemsViewSection\n data={dateIntervals.map(interval => ({ ...interval, isSelected: interval?.name === selectedDates.selectedDateInterval }))}\n viewItemComponent={DateIntervalOption}\n type={SECTION_TYPES.STRIP}\n hasPadding={false}\n onItemClick={selectDateInterval}\n itemsSliderRef={dateIntervalsStripRef}\n /> : dateIntervals.map(interval => <DateIntervalOption\n key={interval.id}\n item={{\n name: interval?.name,\n isSelected: interval?.name === selectedDates.selectedDateInterval\n }}\n onItemClick={selectDateInterval}\n />)\n }\n </div>\n <div className={isMobile ? \"mobile-date-picker-selection-panel\" : \"date-picker-selection-panel\"}>\n <ReactDatePicker\n selected={selectedDates.selectedStartDate ?? subDays(new Date(), 30)}\n startDate={selectedDates.selectedStartDate}\n endDate={selectedDates.selectedEndDate}\n onChange={([newStartDate, newEndDate]) => handleDateIntervalSelection(newStartDate, newEndDate)}\n inline\n selectsRange\n monthsShown={2}\n maxDate={new Date()}\n minDate={new Date('2023/01/01')}\n />\n {\n !isMobile && <div className=\"date-picker-bottom-bar\">\n <div className=\"date-picker-status-bar\">{getDateRangeDisplayText()}</div>\n <div className=\"date-picker-buttons\">\n <div className=\"date-picker-cancel-button\" onClick={onCancelClick}>{t('DATE_PICKER_CANCEL_BUTTON_TEXT')}</div>\n <div className={`date-picker-update-button ${!isAbleToUpdate ? 'disabled' : ''}`} onClick={onUpdate}>{t('DATE_PICKER_UPDATE_BUTTON_TEXT')}</div>\n </div>\n </div>\n }\n </div>\n </div>\n )\n}","import React, { useState } from 'react'\nimport './TimeSelect.css'\nimport { TbCalendarEvent } from 'react-icons/tb'\nimport { isMobile } from 'utils/deviceUtils'\nimport { ANALYTICS_PAGE_RETROACTIVE_DATA_REPORT_TIME_INTERVALS_NAMES, DATE_PICKER_DESKTOP_BORDER_COLOR, DATE_PICKER_DESKTOP_BORDER_RADIUS_PX, DATE_PICKER_DESKTOP_WIDTH_PX, PAYDIN_MENU_OPENING_DIRECTIONS } from 'constants/general.constants'\nimport { getFormattedDateRange, getFormattedShortDateRange } from 'utils/dateUtils'\nimport PaydinMenu from 'components/PaydinMenu/PaydinMenu'\nimport DatePicker from 'components/DatePicker/DatePicker'\nimport { useTranslation } from 'react-i18next'\nimport { useGeneralDataContext } from 'contexts/User'\n\n/**\n * Represents a select element for selecting time periods for business analytics.\n * @param {date} selectedStartDate - The currently selected start date\n * @param {date} selectedEndDate - The currently selected end date\n * @param {function} setStartEndDates - A function for setting the start and end dates\n * @param {function} onTimeIntervalSelect - A function to perform whenever a date interval is selected\n * @param {function} setShouldApplyDateRange - A function for setting the \"shouldApplyUpdateDateRange\" state which determins whether the user has finished selecting a date range\n * @param {array} timeIntervals - The select's time intervals list\n */\nexport default function TimeSelect({\n selectedStartDate = null,\n selectedEndDate = null,\n setStartEndDates = () => { },\n selectedTimeInterval = ANALYTICS_PAGE_RETROACTIVE_DATA_REPORT_TIME_INTERVALS_NAMES.THIS_MONTH,\n onTimeIntervalSelect = () => { },\n setShouldApplyDateRange = () => { },\n timeIntervals = [],\n displayShortDates = false\n}) {\n const { t } = useTranslation()\n const {\n openDrawer,\n closeDrawer\n } = useGeneralDataContext()\n\n const [menuState, setMenuState] = useState({\n isOpen: false,\n anchorElement: null,\n onClose: closeDatePicker\n })\n function getFormattedShortTimeRange() {\n return isLifetimeRangeSelected() ? ANALYTICS_PAGE_RETROACTIVE_DATA_REPORT_TIME_INTERVALS_NAMES.LIFETIME : getFormattedShortDateRange(selectedStartDate, selectedEndDate)\n }\n\n function getTimeRangeDescription() {\n if (Object.values(ANALYTICS_PAGE_RETROACTIVE_DATA_REPORT_TIME_INTERVALS_NAMES).includes(selectedTimeInterval)) {\n if (isMobile || selectedTimeInterval === ANALYTICS_PAGE_RETROACTIVE_DATA_REPORT_TIME_INTERVALS_NAMES.LIFETIME) {\n return selectedTimeInterval\n }\n return selectedTimeInterval + ': ' + getFormattedDateRange(selectedStartDate, selectedEndDate)\n } else {\n if (isMobile) {\n return t('DATE_PICKER_CUSTOM_DATE_RANGE_SELECTED_INTERVAL_DISPLAY_NAME')\n }\n return getFormattedDateRange(selectedStartDate, selectedEndDate)\n }\n }\n \n function closeDatePicker() {\n if (isMobile) {\n closeDrawer()\n } else {\n setMenuState(prev => ({\n ...prev,\n isOpen: false\n }))\n }\n }\n\n function openDatePicker(e) {\n if (isMobile) {\n openDrawer(false, renderDatePicker(), '95dvh')\n } else {\n setMenuState({\n isOpen: true,\n anchorElement: e.currentTarget,\n onClose: () => setMenuState(prev => ({\n ...prev,\n isOpen: false\n }))\n })\n }\n }\n \n function handleDatePickerUpdate(newStartDate, newEndDate, tempDateInterval) {\n onTimeIntervalSelect(tempDateInterval)\n setStartEndDates(newStartDate, newEndDate)\n setShouldApplyDateRange(true)\n closeDatePicker()\n }\n \n function handleDatePickerCancel() {\n closeDatePicker()\n }\n\n function renderDatePicker() {\n return <DatePicker\n selectedStartDate={selectedStartDate}\n selectedEndDate={selectedEndDate}\n dateIntervals={timeIntervals}\n onCancelClick={handleDatePickerCancel}\n onUpdateClick={handleDatePickerUpdate}\n selectedDateInterval={selectedTimeInterval}\n />\n }\n\n function isLifetimeRangeSelected() {\n return selectedTimeInterval === ANALYTICS_PAGE_RETROACTIVE_DATA_REPORT_TIME_INTERVALS_NAMES.LIFETIME\n }\n\n return (\n <div className={isMobile ? 'mobile-time-select-container' : 'time-select-container'}>\n <div className={isMobile ? \"mobile-time-select\" : \"time-select\"} onClick={openDatePicker}>\n <div className='time-select-display'>{displayShortDates ? getFormattedShortTimeRange() : getTimeRangeDescription()}</div>\n <TbCalendarEvent className='time-select-image' />\n </div>\n {isMobile && <div className=\"mobile-time-select-time-desc\">{getFormattedShortTimeRange()}</div>}\n {\n !isMobile && <PaydinMenu\n anchorElement={menuState.anchorElement}\n isOpen={menuState.isOpen}\n onClose={menuState.onClose}\n direction={PAYDIN_MENU_OPENING_DIRECTIONS.RIGHT}\n widthPx={DATE_PICKER_DESKTOP_WIDTH_PX}\n borderRadius={DATE_PICKER_DESKTOP_BORDER_RADIUS_PX}\n borderColor={DATE_PICKER_DESKTOP_BORDER_COLOR}\n >\n {renderDatePicker()}\n </PaydinMenu>\n }\n </div>\n )\n}","import React from 'react'\nimport './PaydinDrawerListContent.css'\n\n/**\n * Represents an option list for a mobile options drawer.\n * @param {array} options - The option list for display\n */\nexport default function PaydinDrawerListContent({ options }) {\n return (\n <>\n {\n options?.map(option => <div\n key={option?.text}\n className={`mobile-paydin-drawer-list-content-option ${option?.className}`}\n onClick={option?.onClick}\n >\n {option?.image}\n <div className=\"mobile-paydin-drawer-list-content-option-text\">{option?.text}</div>\n </div>\n )\n }\n </>\n )\n}","import React from 'react'\nimport './TabOption.css'\nimport { isMobile } from 'utils/deviceUtils'\nimport { TAB_OPTIONS_ICON_SIZE } from 'constants/general.constants'\n\nexport default function TabOption({\n text = '',\n image = <></>,\n onClick = () => { },\n currentIndex = 0,\n selectedTabOptionIndex = 0,\n selectedBottomLine = false,\n optionPadding = isMobile ? '10px' : '20px 10px'\n}) {\n return (\n <div className={`${isMobile ? 'mobile-tab-option-container' : 'tab-option-container'} ${currentIndex === selectedTabOptionIndex ? 'selected' : ''} ${selectedBottomLine ? 'selected-bottom-line' : ''}`} onClick={onClick}\n style={{ padding: optionPadding }}>\n <span style={{minWidth: TAB_OPTIONS_ICON_SIZE, color: 'black'}}>{image}</span>{text}\n </div>\n )\n}","import React from 'react'\nimport './Tabs.css'\nimport TabOption from 'components/TabOption/TabOption'\nimport { isMobile } from 'utils/deviceUtils'\n\nexport default function Tabs({\n tabs = [],\n selectedTabOptionIndex,\n setSelectedTabOptionIndex,\n inputRef = null,\n hasTopLine = true,\n selectedBottomLine = false,\n optionPadding = isMobile ? '10px' : '20px 10px',\n isCentered = true,\n onTabOptionClick = () => { }\n}) {\n function onTabClicked(tab, index) {\n setSelectedTabOptionIndex(index)\n onTabOptionClick(tab, index)\n }\n\n return (\n tabs.length > 0 && <div ref={inputRef} className={`${isMobile ? 'mobile-tabs-container' : 'tabs-container'} ${hasTopLine ? '' : 'no-top-line'}`}\n style={{ justifyContent: isCentered ? 'center' : 'start' }}>\n {\n tabs.map((tab, index) => <TabOption\n key={index + tab?.text}\n text={tab?.text}\n image={tab?.image}\n onClick={() => onTabClicked(tab, index)}\n currentIndex={index}\n selectedTabOptionIndex={selectedTabOptionIndex}\n selectedBottomLine={selectedBottomLine}\n optionPadding={optionPadding}\n />)\n }\n </div>\n )\n}","import React, { useEffect, useRef, useState } from 'react'\nimport './ShortItem.css'\nimport ImageBox from 'components/ImageBox/ImageBox'\nimport { useTranslation } from 'react-i18next'\nimport { BiDotsVerticalRounded } from 'react-icons/bi'\nimport { FaChartSimple } from 'react-icons/fa6'\nimport { useGeneralDataContext, useUserDetailsContext } from 'contexts/User'\nimport PaydinMenu from 'components/PaydinMenu/PaydinMenu'\nimport {\n CONTENT_TYPES,\n LINKS_PAGE_MOBILE_OPTIONS_DRAWER_CLOSING_DELAY,\n NO_IMAGE_GLOBE_PLACEHOLDER_URL,\n NUMBER_TYPES,\n PAYDIN_MENU_OPENING_DIRECTIONS,\n SHORT_URL_SELECTION_TYPE,\n VIEW_MODES\n} from 'constants/general.constants'\nimport { formatNumber } from 'utils/utils'\nimport { useHistoryContext } from 'contexts/History'\nimport PaydinDialog, { PAYDIN_DIALOG_BUTTON_TYPES } from 'dialogs/PaydinDialog/PaydinDialog'\nimport { isMobile } from 'utils/deviceUtils'\nimport { environment } from 'conf'\nimport { DeleteLinkAPI } from 'api/links/links'\nimport { copyToClipboard } from 'services/SystemService'\nimport { MdOpenInNew, MdOutlineContentCopy, MdOutlineEdit } from 'react-icons/md'\nimport { RiDeleteBin6Line } from 'react-icons/ri'\nimport { BsCalendar, BsCartCheck } from 'react-icons/bs'\nimport { getCurrencySymbol } from 'services/currency'\nimport { LiaCoinsSolid } from 'react-icons/lia'\nimport LinkUrlTypeTag from 'components/LinkUrlTypeTag/LinkUrlTypeTag'\nimport ContentDialog from 'dialogs/ContentDialog/ContentDialog'\nimport DrawerStyledButtonList from 'components/DrawerStyledButtonList/DrawerStyledButtonList'\n\n/**\n * Represents a short item.\n * @param {string} shortId - The id of this short item \n * @param {Image/string} image - The image of this short item \n * @param {Image/string} influencerImage - The image of this short's influencer \n * @param {number} createdAt - The epoch time number representing the creation date of this short\n * @param {number} views - The number of views for this short\n * @param {number} revenue - The revenue of this short\n * @param {string} currency - The currency of this short\n * @param {string} influencerUsername - The currency of this short\n * @param {function} onDeleteLink - A callback function to invoke after the short was deleted\n */\nexport default function ShortItem({\n shortId,\n image,\n defaultImage,\n influencerImage,\n createdAt,\n views,\n revenue,\n checkouts,\n currency,\n isLinkExpired,\n title,\n url,\n urlType,\n influencerUsername,\n onDeleteLink = () => { },\n onUpdateLink = () => { },\n allowOrderDetails = true,\n elementRef = null\n}) {\n const { t } = useTranslation()\n const { userDetails } = useUserDetailsContext()\n const history = useHistoryContext()\n const {\n showApprovalMessage,\n openDrawer,\n closeDrawer,\n } = useGeneralDataContext()\n\n const {\n getFrontendUrl,\n } = useUserDetailsContext()\n\n const [isShortDeletionDialogOpen, setIsShortDeletionDialogOpen] = useState(false)\n const [optionsMenuState, setOptionsMenuState] = useState({\n isOpen: false,\n anchorElement: null,\n onClose: () => { }\n })\n const [linkContentDialogState, setLinkContentDialogState] = useState({\n isOpen: false,\n mode: VIEW_MODES.PREVIEW\n })\n\n const linkItemTitlesContainerRef = useRef(null)\n const linkItemTitleRef = useRef(null)\n\n useEffect(() => {\n linkItemTitleRef.current.style.maxWidth = `${linkItemTitlesContainerRef?.current?.clientWidth}px`\n }, [])\n\n function getFormattedDate(epochTime) {\n const date = new Date(epochTime)\n return date.toLocaleDateString('en-us', { year: \"numeric\", month: \"short\", day: \"numeric\" })\n }\n\n function openOptionsMenu(e) {\n setOptionsMenuState({\n isOpen: true,\n anchorElement: e.currentTarget,\n onClose: () => setOptionsMenuState(prev => ({\n ...prev,\n isOpen: false\n }))\n })\n }\n\n function editShort() {\n if (isMobile) {\n history.goBack()\n } else {\n optionsMenuState.onClose()\n }\n\n setTimeout(() => {\n setLinkContentDialogState({\n isOpen: true,\n mode: VIEW_MODES.EDIT\n })\n }, 200)\n }\n\n function previewShort(closeDialog = false) {\n if (isMobile) {\n if (closeDialog) {\n history.goBack()\n }\n } else {\n if (closeDialog) {\n optionsMenuState.onClose()\n }\n }\n\n if (closeDialog) {\n setTimeout(() => {\n setLinkContentDialogState({\n isOpen: true,\n mode: VIEW_MODES.PREVIEW\n })\n }, 200)\n } else {\n setLinkContentDialogState({\n isOpen: true,\n mode: VIEW_MODES.PREVIEW\n })\n }\n }\n\n async function copyShort(closeDialog = false) {\n if (isMobile && closeDialog) {\n closeDrawer()\n }\n\n const url = `${getFrontendUrl()}${userDetails?.username}/${shortId}`\n await copyToClipboard(url)\n showApprovalMessage(t('SHORT_COPIED_TO_CLIPBOARD'))\n }\n\n function openDeleteLinkConfirmationDialog() {\n if (isMobile) {\n closeDrawer()\n setTimeout(() => {\n setIsShortDeletionDialogOpen(true)\n }, LINKS_PAGE_MOBILE_OPTIONS_DRAWER_CLOSING_DELAY)\n } else {\n optionsMenuState.onClose()\n setIsShortDeletionDialogOpen(true)\n history.addBackHandler(() => setIsShortDeletionDialogOpen(false))\n }\n }\n\n function deleteLink() {\n DeleteLinkAPI(shortId)\n .then(response => {\n closeDialog()\n onDeleteLink(shortId)\n })\n .catch(error => {\n console.log(error)\n })\n }\n\n function closeDialog() {\n setIsShortDeletionDialogOpen(false)\n }\n\n function openOptionsDrawer() {\n openDrawer(true, <>\n <div className=\"mobile-short-item-more-options-menu-container\">\n <div className=\"mobile-short-item-more-options-menu-item-line\">\n <div className=\"mobile-short-item-more-options-menu-single-item\" onClick={() => copyShort(true)}>\n <MdOutlineContentCopy className=\"mobile-short-item-more-options-menu-single-item-image\" />\n <div className=\"mobile-short-item-more-options-menu-single-item-text\">{t('LINKS_PAGE_OPTIONS_MENU_ITEM_COPY_LINK')}</div>\n </div>\n <div className=\"mobile-short-item-more-options-menu-single-item\" onClick={() => previewShort(true)}>\n <MdOpenInNew className=\"mobile-short-item-more-options-menu-single-item-image\" />\n <div className=\"mobile-short-item-more-options-menu-single-item-text\">{t('LINKS_PAGE_OPTIONS_MENU_ITEM_OPEN')}</div>\n </div>\n </div>\n <DrawerStyledButtonList\n buttons={[\n ...((userDetails?.isAdmin || (!userDetails?.isAdmin && userDetails?.permissions?.isActiveInfluencer)) ? [{\n text: t('LINKS_PAGE_OPTIONS_MENU_ITEM_EDIT'),\n image: <MdOutlineEdit className=\"mobile-short-item-more-options-menu-section-item-image\" />,\n onClick: editShort\n }] : []),\n ...((userDetails?.isAdmin || (!userDetails?.isAdmin && userDetails?.permissions?.isActiveInfluencer)) ? [{\n text: t('LINKS_PAGE_OPTIONS_MENU_ITEM_DELETE'),\n image: <RiDeleteBin6Line className=\"mobile-short-item-more-options-menu-section-item-image\" />,\n onClick: openDeleteLinkConfirmationDialog,\n color: 'red'\n }] : [])\n ]}\n />\n </div>\n </>)\n }\n\n function getTitle() {\n return !title || title?.length === 0 ? url : title\n }\n\n function hasSalesPermission() {\n return userDetails?.isAdmin || userDetails?.permissions?.salesEnabled\n }\n\n function closeLinkContentDialog() {\n setLinkContentDialogState(prev => ({\n ...prev,\n isOpen: false\n }))\n }\n\n function getDisplayImage(image, defaultImage) {\n if (image) {\n return image\n }\n if (defaultImage) {\n return defaultImage\n }\n return NO_IMAGE_GLOBE_PLACEHOLDER_URL\n }\n\n return (\n <div ref={elementRef} className={isMobile ? 'mobile-short-item-container' : 'short-item-container'}>\n <div className=\"short-item-content\">\n <div className={isMobile ? 'mobile-short-item-details-container' : 'short-item-details-container'}>\n <ImageBox\n image={getDisplayImage(image, defaultImage)}\n alt='short image'\n className='short-item-image'\n isImageFitCover={true}\n onImageClickCallback={() => previewShort(false)}\n />\n <div ref={linkItemTitlesContainerRef} className=\"short-item-details\">\n <div className=\"short-item-buttons\">\n <div className=\"short-item-copy-to-clipboard-button\" onClick={() => copyShort(false)}>\n <MdOutlineContentCopy className='short-item-copy-to-clipboard-button-image' />\n <div className=\"short-item-copy-to-clipboard-button-text\">{t('SHORTS_ITEM_COPY_TO_CLIPBOARD_BUTTON_TEXT')}</div>\n </div>\n <BiDotsVerticalRounded className={isMobile ? 'mobile-short-item-statistics-more-options-button' : 'short-item-statistics-more-options-button'} onClick={isMobile ? openOptionsDrawer : openOptionsMenu} />\n </div>\n <div className=\"short-item-details-lower-row\">\n <div className=\"short-item-created-at-expired-container\">\n <div className=\"short-item-titles-container\">\n <div ref={linkItemTitleRef} className={isMobile ? \"mobile-short-item-title\" : \"short-item-title\"} onClick={() => previewShort(false)}>{getTitle()}</div>\n </div>\n </div>\n <div className='show-item-statistics' onClick={() => previewShort(false)}>\n <div className=\"short-item-created-at-container\">\n <div className=\"short-item-statistics-created-at-container short-item-detail-container\">\n <BsCalendar className='short-item-statistics-created-at-image short-item-statistics-image' />\n <div className={`short-item-statistics-created-at-value ${isMobile ? 'mobile-short-item-statistics-value' : 'short-item-statistics-value'}`}>{getFormattedDate(createdAt)}</div>\n </div>\n {\n urlType !== SHORT_URL_SELECTION_TYPE.CUSTOM && <LinkUrlTypeTag\n type={urlType}\n isSmall={true}\n />\n }\n </div>\n <div className=\"short-item-statistics-container\">\n <div className=\"short-item-statistics-views-container short-item-detail-container\">\n <FaChartSimple className='short-item-statistics-clicks-image short-item-statistics-image' />\n <div className={`short-item-statistics-views-value ${isMobile ? 'mobile-short-item-statistics-value' : 'short-item-statistics-value'}`}>{formatNumber(Math.max(views ?? 0, checkouts), NUMBER_TYPES.SHORT)}</div>\n <div className={`short-item-statistics-views-value-suffix ${isMobile ? 'mobile-short-item-statistics-value-suffix' : 'short-item-statistics-value-suffix'}`}>{t('SHORTS_ITEM_STATISTICS_CLICKS_VALUE_SUFFIX')}</div>\n </div>\n {\n hasSalesPermission() && <div className=\"short-item-statistics-checkouts-container short-item-detail-container\">\n <BsCartCheck className='short-item-statistics-checkouts-image short-item-statistics-image' />\n <div className={`short-item-statistics-checkouts-value ${isMobile ? 'mobile-short-item-statistics-value' : 'short-item-statistics-value'}`}>{formatNumber(checkouts, NUMBER_TYPES.SHORT)}</div>\n <div className={`short-item-statistics-checkouts-value-suffix ${isMobile ? 'mobile-short-item-statistics-value-suffix' : 'short-item-statistics-value-suffix'}`}>{t('SHORTS_ITEM_STATISTICS_CHECKOUTS_VALUE_SUFFIX')}</div>\n </div>\n }\n {\n userDetails?.isAdmin && <div className=\"short-item-statistics-revenue-container short-item-detail-container\">\n <LiaCoinsSolid className='short-item-statistics-revenue-image short-item-statistics-image' />\n <div className={`short-item-statistics-revenue-value ${isMobile ? 'mobile-short-item-statistics-value' : 'short-item-statistics-value'}`}>{getCurrencySymbol(currency)}{formatNumber(revenue, NUMBER_TYPES.SHORT, false, isMobile ? 1000 : 10_000)}</div>\n </div>\n }\n </div>\n </div>\n {influencerImage && <ImageBox\n image={influencerImage}\n className=\"short-item-attached-influencer-image\"\n roundImage={true}\n />}\n </div>\n </div>\n </div>\n </div>\n {!isMobile &&\n <PaydinMenu\n anchorElement={optionsMenuState.anchorElement}\n isOpen={optionsMenuState.isOpen}\n onClose={optionsMenuState.onClose}\n direction={PAYDIN_MENU_OPENING_DIRECTIONS.LEFT}\n options={[\n {\n text: t('LINKS_PAGE_OPTIONS_MENU_ITEM_OPEN'),\n onClick: previewShort\n },\n ...((userDetails?.isAdmin || (!userDetails?.isAdmin && userDetails?.permissions?.isActiveInfluencer)) ? [{\n text: t('LINKS_PAGE_OPTIONS_MENU_ITEM_EDIT'),\n onClick: editShort\n }] : []),\n ...((userDetails?.isAdmin || (!userDetails?.isAdmin && userDetails?.permissions?.isActiveInfluencer)) ? [{\n className: 'short-item-options-menu-delete-option',\n text: t('LINKS_PAGE_OPTIONS_MENU_ITEM_DELETE'),\n onClick: openDeleteLinkConfirmationDialog\n }] : [])\n ]}\n />\n }\n <PaydinDialog\n title={t('LINKS_PAGE_LINK_DELETION_CONFIRMATION_DIALOG_TITLE')}\n message={t('LINKS_PAGE_LINK_DELETION_CONFIRMATION_DIALOG_MESSAGE')}\n isDialogOpen={isShortDeletionDialogOpen}\n handleDialogClose={closeDialog}\n leftButtonText={t('LINKS_PAGE_LINK_DELETION_CONFIRMATION_DIALOG_LEFT_BUTTON_TEXT')}\n rightButtonText={t('LINKS_PAGE_LINK_DELETION_CONFIRMATION_DIALOG_RIGHT_BUTTON_TEXT')}\n rightButtonType={PAYDIN_DIALOG_BUTTON_TYPES.SECONDARY}\n onRightButtonClick={deleteLink}\n closeOnRightClick={false}\n isLeftButtonWithLoader={false}\n />\n <ContentDialog\n isDialogOpen={linkContentDialogState.isOpen}\n handleDialogClose={closeLinkContentDialog}\n data={{\n linkId: shortId,\n allowOrderDetails,\n }}\n mode={linkContentDialogState.mode}\n contentType={CONTENT_TYPES.SHORT}\n onDelete={onDeleteLink}\n onSaveSuccess={onUpdateLink}\n />\n </div>\n )\n}","import Loader from 'components/Loader/Loader'\nimport React from 'react'\n\n/**\n * Represents a loader for a value while it is being loading.\n */\nexport default function InfluencerAnalyticsLoader() {\n return (\n <Loader\n styles={{\n width: '15px',\n height: '15px'\n }}\n />\n )\n}","import Loader from 'components/Loader/Loader'\nimport React from 'react'\nimport { isMobile } from 'utils/deviceUtils'\n\n/**\n * Represents the loader of the influencer's links/shorts list.\n */\nexport default function InfluencerLinksShortsLoader() {\n return (\n <Loader styles={{\n width: isMobile ? '20px' : '30px',\n height: isMobile ? '20px' : '30px',\n position: 'absolute',\n left: 0,\n right: 0,\n margin: `${isMobile ? '20px' : '30px'} auto 0 auto`,\n zIndex: 80\n }} />\n )\n}\n","import React from 'react'\nimport './DashboardDataContainer.css'\nimport { isMobile } from 'utils/deviceUtils'\n\n/**\n * Represents a container for dashboard data\n * @param {string/number} width - The width of this container\n * @param {string/number} height - The height of this container\n * @param {string} title - The title of this container\n * @param {boolean} shouldSpreadItems - If true, the title and the content will be spread to the vertical edges.\n */\nexport default function DashboardDataContainer({\n width,\n height,\n title= '',\n shouldSpreadItems = false,\n children\n}) {\n return (\n <div className='dashboard-data-container' style={{ width, height, justifyContent: shouldSpreadItems && 'space-between' }}>\n {title && <div className={isMobile ? 'mobile-dashboard-data-container-title' : 'dashboard-data-container-title'}>{title}</div>}\n {children}\n </div>\n )\n}","import Loader from 'components/Loader/Loader'\nimport React from 'react'\n\n/**\n * Represents a loader for a value while it is being loading.\n */\nexport default function BusinessAnalyticsDataLoader({\n width='25px',\n height='25px',\n}) {\n return (\n <Loader\n styles={{\n width: width,\n height: height\n }}\n />\n )\n}","import React from 'react'\nimport './DashboardDataSingleValue.css'\nimport DashboardDataContainer from 'components/DashboardDataContainer/DashboardDataContainer'\nimport { isMobile } from 'utils/deviceUtils'\nimport BusinessAnalyticsDataLoader from 'components/BusinessAnalyticsDataLoader/BusinessAnalyticsDataLoader'\nimport { useTranslation } from 'react-i18next'\n\n/**\n * Represents a single-value dashboard data view. Uses {@link DashboardDataContainer}.\n * @param {string/number} width - The width of this container\n * @param {string/number} height - The height of this container\n * @param {string} title - The title of this view\n * @param {string} value - The value of this view\n */\nexport default function DashboardDataSingleValue({\n width,\n height,\n title = '',\n value = '',\n secondaryValue=null,\n secondaryValueTranslationString=null,\n isLoadingData = false,\n}) {\n\n const { t } = useTranslation()\n\n return (\n <DashboardDataContainer\n title={title}\n width={width}\n height={height}\n >\n <div className='dashboard-analytics-single-value-container'>\n <div className={isMobile ? \"mobile-dashboard-analytics-single-value-text\" : \"dashboard-analytics-single-value-text\"}>{isLoadingData ? <BusinessAnalyticsDataLoader /> : value}</div>\n {secondaryValue && secondaryValueTranslationString && !isLoadingData && <div className={isMobile ? 'mobile-dashboard-analytics-single-value-secondary-text' : 'dashboard-analytics-single-value-secondary-text'}>{t(secondaryValueTranslationString, { value: secondaryValue })}</div>}\n </div>\n </DashboardDataContainer>\n )\n}","import React from 'react'\nimport './DashboardDataMultiValue.css'\nimport DashboardDataContainer from 'components/DashboardDataContainer/DashboardDataContainer'\nimport BusinessAnalyticsDataLoader from 'components/BusinessAnalyticsDataLoader/BusinessAnalyticsDataLoader'\n\n/**\n * Represents a multiple-value dashboard data view. Uses {@link DashboardDataContainer}.\n * @param {string/number} width - The width of this container\n * @param {string/number} height - The height of this container\n * @param {string} title - The title of this view\n * @param {boolean} shouldSpreadItems - If true, the title and the content will be spread to the vertical edges.\n * @param {array} dataArray - The array of values to display\n */\nexport default function DashboardDataMultiValue({\n width,\n height,\n title = '',\n shouldSpreadItems = false,\n dataArray = [],\n isLoadingData = false,\n}) {\n return (\n <DashboardDataContainer\n title={title}\n width={width}\n height={height}\n shouldSpreadItems={shouldSpreadItems}\n >\n <div className=\"dashboard-data-multi-value-values-container\">\n {\n dataArray.map(data => <div key={data?.name} className='dashboard-data-multi-value-data-container'>\n <div className=\"dashboard-data-multi-value-data-value\">{isLoadingData ? <BusinessAnalyticsDataLoader width='20px' height='20px' /> : data?.value}</div>\n <div className=\"dashboard-data-multi-value-data-value-container\">\n <div className=\"dashboard-data-multi-value-data-value-bullet\" style={{ backgroundColor: data?.bulletColor }}></div>\n <div className=\"dashboard-data-multi-value-data-value-text\">{data?.name}</div>\n </div>\n </div>)\n }\n </div>\n </DashboardDataContainer>\n )\n}","import React from 'react'\nimport './DashboardDataValueBreakdown.css'\nimport DashboardDataContainer from 'components/DashboardDataContainer/DashboardDataContainer'\nimport BusinessAnalyticsDataLoader from 'components/BusinessAnalyticsDataLoader/BusinessAnalyticsDataLoader'\n\n/**\n * Represents a value breakdown dashboard data view. Uses {@link DashboardDataContainer}.\n * @param {string/number} width - The width of this container\n * @param {string/number} height - The height of this container\n * @param {string} title - The title of this view\n * @param {boolean} shouldSpreadItems - If true, the title and the content will be spread to the vertical edges.\n * @param {array} dataArray - The array of values to display\n */\nexport default function DashboardDataValueBreakdown({\n width,\n height,\n title = '',\n value = '',\n breakdownData = [],\n isLoadingData = false,\n}) {\n return (\n <DashboardDataContainer\n title={title}\n width={width}\n height={height}\n >\n <div className=\"dashboard-data-value-breakdown-container\">\n <div className=\"dashboard-data-value-breakdown-value\">{isLoadingData ? <BusinessAnalyticsDataLoader width='25px' height='25px' /> : value}</div>\n <div className=\"dashboard-data-value-breakdown-content\">\n {\n breakdownData.map(data => <div key={data?.name} className='dashboard-data-value-breakdown-item'>\n <div className=\"dashboard-data-value-breakdown-item-title-container\">\n <div className=\"dashboard-data-value-breakdown-item-bullet\" style={{ backgroundColor: data?.bulletColor }}></div>\n <div className=\"dashboard-data-value-breakdown-item-title\">{data?.name}</div>\n </div>\n <div className=\"dashboard-data-value-breakdown-item-value\">{isLoadingData ? <BusinessAnalyticsDataLoader width='15px' height='15px' /> : data?.value}</div>\n </div>)\n }\n </div>\n </div>\n </DashboardDataContainer>\n )\n}","import React, { useMemo } from 'react'\nimport {\n Cell,\n Pie,\n PieChart\n} from 'recharts'\nimport './PaydinPieChart.css'\nimport { useTranslation } from 'react-i18next'\n\n/**\n * Represents a pie chart.\n * @param {array} chartData - The data for the pie chart\n * @param {string/number} dimens - The dimensions for the pie chart\n * @param {boolean} showLegend - Determins whether the pie chart legend is shown or not\n * @param {function} pieValue - A function for rendering the pie chart chunk label\n */\nexport default function PaydinPieChart({\n chartData = [],\n dimens = 400,\n showLegend = true,\n pieValue = () => { }\n}) {\n const { t } = useTranslation()\n\n const displayableData = useMemo(() => chartData.filter(data => data?.value > 0), [chartData])\n\n const renderCustomizedLabel = ({ cx, cy, midAngle, innerRadius, outerRadius, value }) => {\n const RADIAN = Math.PI / 180\n const radius = innerRadius + (outerRadius - innerRadius) * 0.5\n const x = cx + radius * Math.cos(-midAngle * RADIAN)\n const y = cy + radius * Math.sin(-midAngle * RADIAN)\n\n return (\n <text x={x} y={y} fill=\"white\" textAnchor='middle' dominantBaseline=\"central\">\n {pieValue(value)}\n </text>\n )\n }\n\n return (\n <div className=\"paydin-pie-chart-container\">\n <div className='paydin-pie-chart-pie-container' style={{ height: `${dimens}px` }}>\n {\n displayableData.length > 0 ? <PieChart width={dimens} height={dimens}>\n <Pie\n data={displayableData}\n cx=\"50%\"\n cy=\"50%\"\n labelLine={false}\n label={renderCustomizedLabel}\n outerRadius={(dimens / 2) - 15}\n fill=\"#8884d8\"\n dataKey=\"value\"\n >\n {displayableData.map((entry, index) => {\n return <Cell key={`cell-${index}`} fill={entry?.color} />\n })}\n </Pie>\n </PieChart> : <div className='paydin-pie-chart-no-data-container' style={{ height: `${dimens}px` }}>\n <div className='paydin-pie-chart-no-data-message'>{t('PAYDIN_PIE_CHART_NO_DATA_MESSAGE')}</div>\n </div>\n }\n </div>\n {\n (showLegend && displayableData.length > 0) && <div className=\"paydin-pie-chart-legend\">\n {\n chartData.map(entry => <div key={entry?.name} className='paydin-pie-chart-legend-item'>\n <div className=\"paydin-pie-chart-legend-item-color\" style={{ backgroundColor: entry?.color }}></div>\n <div className=\"paydin-pie-chart-legend-item-title\">{entry?.name}</div>\n </div>)\n }\n </div>\n }\n </div>\n )\n}","import PaydinPieChart from 'components/PaydinPieChart/PaydinPieChart'\nimport React from 'react'\nimport { getCurrencySymbol } from 'services/currency'\nimport './SalesBreakdownChart.css'\nimport Loader from 'components/Loader/Loader'\nimport { formatNumber } from 'utils/utils'\nimport { NUMBER_TYPES } from 'constants/general.constants'\nimport { useTranslation } from 'react-i18next'\n\n/**\n * Represents the sales breakdown chart for a specific influencer.\n * @param {number} linksRevenue - The links revenue of the influencer\n * @param {number} shortsRevenue - The shorts revenue of the influencer\n * @param {number} organicRevenue - The externals revenue of the influencer\n * @param {number} linksColor - The marking color for the links' data\n * @param {number} shortsColor - The marking color for the shorts' data\n * @param {number} organicColor - The marking color for the externals' data\n * @param {number} currency - The required currency to display\n * @param {number} dimens - The dimensions of the sales breakdown pie chart\n * @param {number} isLoadingData - Determins whether the influencer's data is being loaded or not\n */\nexport default function SalesBreakdownChart({\n linksRevenue,\n shortsRevenue,\n organicRevenue,\n linksColor,\n shortsColor,\n organicColor,\n currency,\n dimens = 400,\n isLoadingData = true,\n showValues = true,\n}) {\n\n const { t } = useTranslation()\n\n function normalizeChartData() {\n if ([null, undefined].includes(linksRevenue) || [null, undefined].includes(shortsRevenue) || [null, undefined].includes(organicRevenue)) {\n return []\n }\n\n const dataArray = [\n {\n name: 'Links',\n value: linksRevenue,\n color: linksColor\n },\n {\n name: 'Shorts',\n value: shortsRevenue,\n color: shortsColor\n },\n {\n name: t('INFLUENCER_INSIGHTS_SALES_BREAKDOWN_ORGANIC_TITLE'),\n value: organicRevenue,\n color: organicColor\n },\n ]\n\n return dataArray\n }\n\n function renderPieValue(value) {\n return showValues ? `${getCurrencySymbol(currency)}${formatNumber(value, NUMBER_TYPES.SHORT)}` : ''\n }\n\n return (\n <div className=\"sales-breakdown-chart\">\n {\n !isLoadingData ? <PaydinPieChart\n chartData={normalizeChartData()}\n pieValue={renderPieValue}\n dimens={dimens}\n /> : <div className='sales-breakdown-chart-loader-container' style={{ minWidth: dimens, minHeight: dimens }}>\n <Loader styles={{ width: '25px', height: '25px', position: 'absolute', inset: 0, margin: 'auto' }} />\n </div>\n }\n </div>\n )\n}\n","import React from 'react'\nimport './InfluencerInsights.css'\nimport DashboardDataSingleValue from 'components/DashboardDataSingleValue/DashboardDataSingleValue'\nimport DashboardDataMultiValue from 'components/DashboardDataMultiValue/DashboardDataMultiValue'\nimport DashboardDataValueBreakdown from 'components/DashboardDataValueBreakdown/DashboardDataValueBreakdown'\nimport SalesBreakdownChart from 'components/SalesBreakdownChart/SalesBreakdownChart'\nimport DashboardDataContainer from 'components/DashboardDataContainer/DashboardDataContainer'\nimport { useTranslation } from 'react-i18next'\nimport { getCurrencySymbol } from 'services/currency'\nimport { formatNumber } from 'utils/utils'\nimport { INFLUENCER_INSIGHTS_AOV_BREAKDOWN_CONTAINER_WIDTH, INFLUENCER_INSIGHTS_AOV_HEIGHT, INFLUENCER_INSIGHTS_COMMISSION_VALUE_CONTAINER_NOT_ADMIN_WIDTH, INFLUENCER_INSIGHTS_COMMISSION_VALUE_CONTAINER_WIDTH, INFLUENCER_INSIGHTS_CR_BREAKDOWN_CONTAINER_WIDTH, INFLUENCER_INSIGHTS_CR_HEIGHT, INFLUENCER_INSIGHTS_LINKS_COLOR, INFLUENCER_INSIGHTS_ORGANIC_COLOR, INFLUENCER_INSIGHTS_ROW_COLUMN_GAP, INFLUENCER_INSIGHTS_SALES_BREAKDOWN_CHART_HEIGHT, INFLUENCER_INSIGHTS_SALES_BREAKDOWN_CHART_WIDTH, INFLUENCER_INSIGHTS_SALES_BREAKDOWN_CONTAINER_HEIGHT, INFLUENCER_INSIGHTS_SALES_BREAKDOWN_CONTAINER_INFLUNECER_WIDTH, INFLUENCER_INSIGHTS_SALES_BREAKDOWN_CONTAINER_WIDTH, INFLUENCER_INSIGHTS_SALES_BREAKDOWN_PIE_WIDTH, INFLUENCER_INSIGHTS_SHORTS_COLOR, INFLUENCER_INSIGHTS_SINGLE_VALUE_CONTAINER_HEIGHT, INFLUENCER_INSIGHTS_SINGLE_VALUE_CONTAINER_WIDTH, NUMBER_TYPES } from 'constants/general.constants'\nimport { isMobile } from 'utils/deviceUtils'\nimport { useUserDetailsContext } from 'contexts/User'\n\n/**\n * Represents an insights dashboard for a specific influencer's overall data.\n * @param {number} totalRevenue - The total revenue of the influencer\n * @param {number} commission - The commission of the influencer\n * @param {number} totalLinksSales - The total link sales transactions of the influencer\n * @param {number} totalShortsSales - The total short sales transactions of the influencer\n * @param {number} totalOrganicSales - The total external sales transactions of the influencer\n * @param {number} totalLinksRevenue - The total links revenue of the influencer\n * @param {number} totalShortsRevenue - The total shorts revenue of the influencer\n * @param {number} totalOrganicRevenue - The total external revenue of the influencer\n * @param {number} linksClicks - The total link clicks of the influencer\n * @param {number} shortsClicks - The total short clicks of the influencer\n * @param {string} currency - The required currency for display\n * @param {boolean} isLoadingData - Determins whether the influencer's data is being loaded or not\n */\nexport default function InfluencerInsights({\n totalRevenue,\n totalRefunded,\n influencerAttributedRevenue,\n commission,\n totalLinksSales,\n totalShortsSales,\n totalOrganicSales,\n totalLinksRevenue,\n totalShortsRevenue,\n totalOrganicRevenue,\n linksClicks,\n shortsClicks,\n currency = 'USD',\n isLoadingData = true,\n showCommission = true,\n isGeneralAnalytics = true\n}) {\n const { t } = useTranslation()\n const { userDetails } = useUserDetailsContext()\n\n function hasValuePermission(permission) {\n return userDetails?.isAdmin || permission\n }\n\n function renderRevenueItems() {\n return <>\n {\n hasValuePermission(userDetails?.permissions?.revenueEnabled) && <DashboardDataSingleValue\n title={userDetails?.isAdmin ? t('INFLUENCER_INSIGHTS_TOTAL_REVENUE_TITLE') : t('INFLUENCER_INSIGHTS_CALCULATED_REVENUE_TITLE')}\n value={`${getCurrencySymbol(currency)} ${formatNumber(userDetails?.isAdmin ? totalRevenue: influencerAttributedRevenue, NUMBER_TYPES.SHORT, false, 100_000)}`}\n secondaryValue={userDetails?.isAdmin && `${getCurrencySymbol(currency)} ${formatNumber(totalRefunded, NUMBER_TYPES.SHORT, false, 100_000)}`}\n secondaryValueTranslationString={userDetails?.isAdmin && 'INFLUENCER_INSIGHTS_TOTAL_REFUNDED_TEXT'}\n width={isMobile ? INFLUENCER_INSIGHTS_SINGLE_VALUE_CONTAINER_WIDTH : INFLUENCER_INSIGHTS_SINGLE_VALUE_CONTAINER_WIDTH * (userDetails?.isAdmin ? 1 : 1.72)}\n height={INFLUENCER_INSIGHTS_SINGLE_VALUE_CONTAINER_HEIGHT}\n isLoadingData={isLoadingData}\n />\n }\n {\n userDetails?.isAdmin && <DashboardDataSingleValue\n title={t(isGeneralAnalytics ? 'INFLUENCERS_INSIGHTS_TOTAL_CALCULATED_REVENUE_TITLE' : 'INFLUENCER_INSIGHTS_TOTAL_CALCULATED_REVENUE_TITLE')}\n value={`${getCurrencySymbol(currency)} ${formatNumber(influencerAttributedRevenue, NUMBER_TYPES.SHORT, false, 100_000)}`}\n width={INFLUENCER_INSIGHTS_SINGLE_VALUE_CONTAINER_WIDTH}\n height={INFLUENCER_INSIGHTS_SINGLE_VALUE_CONTAINER_HEIGHT}\n isLoadingData={isLoadingData}\n />\n }\n </>\n }\n\n function renderCommission() {\n return <>\n { hasValuePermission(userDetails?.permissions?.commissionEnabled) && (\n showCommission ? <DashboardDataSingleValue\n title={t('INFLUENCER_INSIGHTS_COMMISSION_TITLE')}\n value={`${getCurrencySymbol(currency)} ${formatNumber(commission, NUMBER_TYPES.SHORT, false, 100_000)}`}\n width={isMobile ? (userDetails?.isAdmin ? INFLUENCER_INSIGHTS_COMMISSION_VALUE_CONTAINER_WIDTH: INFLUENCER_INSIGHTS_COMMISSION_VALUE_CONTAINER_NOT_ADMIN_WIDTH) : INFLUENCER_INSIGHTS_COMMISSION_VALUE_CONTAINER_WIDTH * (userDetails?.isAdmin ? 1 : 1.33)}\n height={INFLUENCER_INSIGHTS_SINGLE_VALUE_CONTAINER_HEIGHT}\n isLoadingData={isLoadingData}\n /> : !isMobile && <DashboardDataSingleValue\n title={t('INFLUENCER_INSIGHTS_TOTAL_SALES_TITLE')}\n value={`${formatNumber(totalLinksSales + totalShortsSales + totalOrganicSales, NUMBER_TYPES.SHORT, false, 10_000)}`}\n width={INFLUENCER_INSIGHTS_SINGLE_VALUE_CONTAINER_WIDTH}\n height={INFLUENCER_INSIGHTS_SINGLE_VALUE_CONTAINER_HEIGHT}\n isLoadingData={isLoadingData}\n />\n )}\n </>\n }\n\n function renderSales() {\n return hasValuePermission(userDetails?.permissions?.salesEnabled) && <DashboardDataMultiValue\n title={t('INFLUENCER_INSIGHTS_SALES_TITLE')}\n dataArray={[\n {\n name: t('INFLUENCER_INSIGHTS_SALES_BREAKDOWN_LINKS_TITLE'),\n value: totalLinksSales,\n bulletColor: INFLUENCER_INSIGHTS_LINKS_COLOR\n },\n {\n name: t('INFLUENCER_INSIGHTS_SALES_BREAKDOWN_SHORTS_TITLE'),\n value: totalShortsSales,\n bulletColor: INFLUENCER_INSIGHTS_SHORTS_COLOR\n },\n {\n name: t('INFLUENCER_INSIGHTS_SALES_BREAKDOWN_ORGANIC_TITLE'),\n value: totalOrganicSales,\n bulletColor: INFLUENCER_INSIGHTS_ORGANIC_COLOR\n }\n ]}\n width={INFLUENCER_INSIGHTS_SALES_BREAKDOWN_CONTAINER_WIDTH}\n height={INFLUENCER_INSIGHTS_SALES_BREAKDOWN_CONTAINER_HEIGHT}\n isLoadingData={isLoadingData}\n />\n }\n\n function renderSalesBreakdown() {\n return userDetails?.isAdmin && <DashboardDataContainer // currently showing only for admin\n title={t('INFLUENCER_INSIGHTS_SALES_BREAKDOWN_CHART_TITLE')}\n width={INFLUENCER_INSIGHTS_SALES_BREAKDOWN_CHART_WIDTH}\n height={INFLUENCER_INSIGHTS_SALES_BREAKDOWN_CHART_HEIGHT}\n >\n <SalesBreakdownChart\n linksRevenue={totalLinksRevenue}\n shortsRevenue={totalShortsRevenue}\n organicRevenue={totalOrganicRevenue}\n linksColor={INFLUENCER_INSIGHTS_LINKS_COLOR}\n shortsColor={INFLUENCER_INSIGHTS_SHORTS_COLOR}\n organicColor={INFLUENCER_INSIGHTS_ORGANIC_COLOR}\n currency={currency}\n dimens={INFLUENCER_INSIGHTS_SALES_BREAKDOWN_PIE_WIDTH}\n isLoadingData={isLoadingData}\n showValues={userDetails?.isAdmin}\n />\n </DashboardDataContainer>\n }\n\n function renderAOVBreakdown() {\n return hasValuePermission(userDetails?.permissions?.revenueEnabled && userDetails?.permissions?.aovEnabled) && <DashboardDataValueBreakdown\n title={t('INFLUENCER_INSIGHTS_AOV_TITLE')}\n value={`${getCurrencySymbol(currency)} ${formatNumber(totalRevenue / (totalLinksSales + totalShortsSales + totalOrganicSales), NUMBER_TYPES.SHORT, true)}`}\n breakdownData={[\n {\n name: t('INFLUENCER_INSIGHTS_SALES_BREAKDOWN_LINKS_TITLE'),\n value: `${getCurrencySymbol(currency)} ${formatNumber(totalLinksRevenue / totalLinksSales, NUMBER_TYPES.SHORT)}`,\n bulletColor: INFLUENCER_INSIGHTS_LINKS_COLOR\n },\n {\n name: t('INFLUENCER_INSIGHTS_SALES_BREAKDOWN_SHORTS_TITLE'),\n value: `${getCurrencySymbol(currency)} ${formatNumber(totalShortsRevenue / totalShortsSales, NUMBER_TYPES.SHORT)}`,\n bulletColor: INFLUENCER_INSIGHTS_SHORTS_COLOR\n },\n {\n name: t('INFLUENCER_INSIGHTS_SALES_BREAKDOWN_ORGANIC_TITLE'),\n value: `${getCurrencySymbol(currency)} ${formatNumber(totalOrganicRevenue / totalOrganicSales, NUMBER_TYPES.SHORT)}`,\n bulletColor: INFLUENCER_INSIGHTS_ORGANIC_COLOR\n }\n ]}\n width={userDetails?.isAdmin ? INFLUENCER_INSIGHTS_AOV_BREAKDOWN_CONTAINER_WIDTH : INFLUENCER_INSIGHTS_SALES_BREAKDOWN_CONTAINER_INFLUNECER_WIDTH}\n height={INFLUENCER_INSIGHTS_AOV_HEIGHT}\n isLoadingData={isLoadingData}\n />\n }\n\n function renderCR() {\n return hasValuePermission(userDetails?.permissions?.salesEnabled && userDetails?.permissions?.crEnabled) && <DashboardDataMultiValue\n title={t('INFLUENCER_INSIGHTS_CR_TITLE')}\n shouldSpreadItems={true}\n dataArray={[\n {\n name: t('INFLUENCER_INSIGHTS_SALES_BREAKDOWN_LINKS_TITLE'),\n value: `${formatNumber(totalLinksSales / linksClicks * 100, NUMBER_TYPES.PERCENTAGE)}%`,\n bulletColor: INFLUENCER_INSIGHTS_LINKS_COLOR\n },\n {\n name: t('INFLUENCER_INSIGHTS_SALES_BREAKDOWN_SHORTS_TITLE'),\n value: `${formatNumber(totalShortsSales / shortsClicks * 100, NUMBER_TYPES.PERCENTAGE)}%`,\n bulletColor: INFLUENCER_INSIGHTS_SHORTS_COLOR\n }\n ]}\n width={INFLUENCER_INSIGHTS_CR_BREAKDOWN_CONTAINER_WIDTH}\n height={INFLUENCER_INSIGHTS_CR_HEIGHT}\n isLoadingData={isLoadingData}\n />\n }\n\n function renderDesktopInfluencerInsights() {\n return (<>\n <div className=\"influencer-insights-row\">\n {renderRevenueItems()}\n {renderCommission()}\n </div>\n <div className=\"influencer-insights-row\">\n {renderSales()}\n {renderCR()}\n </div>\n <div className=\"influencer-insights-row\">\n {renderSalesBreakdown()}\n {renderAOVBreakdown()}\n </div>\n </>)\n }\n\n function renderMobileInfluencerInsights() {\n return (<>\n {userDetails?.isAdmin ? <>\n <div className=\"mobile-influencer-insights-row\">\n {renderRevenueItems()}\n </div>\n {renderCommission()}\n </> : <div className=\"mobile-influencer-insights-row\">\n {renderRevenueItems()}\n {renderCommission()}\n </div>\n }\n {renderSales()}\n {renderAOVBreakdown()}\n {renderCR()}\n {renderSalesBreakdown()}\n </>)\n }\n\n return (\n <div className={isMobile ? 'mobile-influencer-insights' : 'influencer-insights'}>\n {isMobile ? renderMobileInfluencerInsights() : renderDesktopInfluencerInsights()}\n </div>\n )\n}","import { CONTENT_TYPES, LINK_PRODUCT_SELECT_MAX_LIMIT, VIEW_MODES } from 'constants/general.constants'\nimport { useUserDetailsContext } from 'contexts/User'\nimport AddProductsDialog from 'dialogs/AddProductsDialog/AddProductsDialog'\nimport ContentDialog from 'dialogs/ContentDialog/ContentDialog'\nimport React, { useEffect, useState } from 'react'\n\nexport default function AddLInkFlow({\n trigger,\n setTrigger = () => { },\n onAddLinkFlowDone = () => { },\n data = {}\n}) {\n const {\n endEditing\n } = useUserDetailsContext()\n const [isLinkContentDialogOpen, setIsLinkContentDialogOpen] = useState(false)\n const [isProductsDialogOpen, setIsProductsDialogOpen] = useState(false)\n const [selectedProducts, setSelectedProducts] = useState([])\n\n useEffect(() => {\n if (trigger) {\n setIsProductsDialogOpen(true)\n setTrigger(false)\n }\n }, [trigger])\n\n function closeProductsDialog() {\n endEditing()\n setIsProductsDialogOpen(false)\n }\n\n function onProductsSelected() {\n setTimeout(() => {\n setIsLinkContentDialogOpen(true)\n }, 200)\n }\n\n function closeLinkContentDialog() {\n resetData()\n endEditing()\n setIsLinkContentDialogOpen(false)\n }\n\n function resetData() {\n setSelectedProducts([])\n }\n\n function onAddLink(newLink) {\n resetData()\n onAddLinkFlowDone(newLink)\n }\n\n return (\n <>\n <AddProductsDialog\n isDialogOpen={isProductsDialogOpen}\n handleDialogClose={closeProductsDialog}\n selectedProducts={selectedProducts}\n setSelectedProducts={setSelectedProducts}\n onFinishProductsSelection={onProductsSelected}\n onCancel={resetData}\n leftButtonText='Cancel'\n rightButtonText='Next'\n hasContentTopbar={true}\n selectMinLimit={1}\n selectMaxLimit={LINK_PRODUCT_SELECT_MAX_LIMIT}\n allowColorOptionSelect={true}\n />\n <ContentDialog\n isDialogOpen={isLinkContentDialogOpen}\n handleDialogClose={closeLinkContentDialog}\n mode={VIEW_MODES.CREATE}\n data={{\n linkData: {\n products: selectedProducts\n },\n influencerUsername: data?.influencerUsername\n }}\n contentType={CONTENT_TYPES.LINK}\n onCreateSuccess={onAddLink}\n />\n </>\n )\n}","import React, { useEffect, useRef, useState } from 'react'\nimport './InfluencerPreviewPage.css'\nimport TimeSelect from 'components/TimeSelect/TimeSelect'\nimport { useTranslation } from 'react-i18next'\nimport {\n INFLUENCER_LINK_PAGINATION_COUNT,\n LINK_TYPES,\n MOBILE_DASHBOARD_TOPBAR_OPTIONS_DRAWER_CLOSING_DELAY,\n PAYDIN_MENU_OPENING_DIRECTIONS,\n SHOPEAKS_SMALL_LOGO_URL,\n ANALYTICS_PAGE_RETROACTIVE_DATA_REPORT_TIME_INTERVALS,\n ANALYTICS_PAGE_RETROACTIVE_DATA_REPORT_TIME_INTERVALS_NAMES,\n INFLUENCER_SHORT_PAGINATION_COUNT,\n INFLUENCER_TAB_OPTIONS,\n CONTENT_TYPES,\n VIEW_MODES,\n PAYDIN_DRAWER_TRANSITION_DURATION,\n NUMBER_TYPES,\n INFLUENCER_PREVIEW_LINKS_PAGINATION_OFFSET,\n INFLUENCER_PREVIEW_SHORTS_PAGINATION_OFFSET\n} from 'constants/general.constants'\nimport ImageBox from 'components/ImageBox/ImageBox'\nimport { BiDotsHorizontalRounded, BiDotsVerticalRounded, BiLink } from 'react-icons/bi'\nimport { AiOutlineClose } from 'react-icons/ai'\nimport { TbFileDownload } from \"react-icons/tb\";\nimport {\n MdEdit,\n MdDeleteOutline,\n MdOutlineLockReset,\n MdOutlineContentCopy\n} from 'react-icons/md'\nimport { formatNumber } from 'utils/utils'\nimport NoItemsFound from 'components/NoItemsFound/NoItemsFound'\nimport LinkItem from 'components/LinkItem/LinkItem'\nimport { GetInfluencerLinks } from 'api/links/links'\nimport { useGeneralDataContext, useUserDetailsContext } from 'contexts/User'\nimport {\n GetInfluencer,\n GetInfluencerAnalytics,\n GetInfluencerAnalyticsReport,\n deactivateInfluencer,\n resetInfluencerPassword\n} from 'api/influencers/influencers'\nimport PaydinMenu from 'components/PaydinMenu/PaydinMenu'\nimport PaydinDialog, { PAYDIN_DIALOG_BUTTON_TYPES } from 'dialogs/PaydinDialog/PaydinDialog'\nimport { isMobile } from 'utils/deviceUtils'\nimport { useHistoryContext } from 'contexts/History'\nimport {\n LOGIN_INFLUENCER_INFLUENCER_PASSWORD_QUERY_PARAMETER,\n LOGIN_INFLUENCER_INFLUENCER_USERNAME_QUERY_PARAMETER,\n LOGIN_INFLUENCER_MERCHANT_NAME_QUERY_PARAMETER,\n LOGIN_INFLUENCER_PAGE_URL,\n} from 'constants/routes.constants'\nimport PaydinDrawerListContent from 'components/PaydinDrawerListContent/PaydinDrawerListContent'\nimport Tabs from 'components/Tabs/Tabs'\nimport ShortItem from 'components/ShortItem/ShortItem'\nimport { getAnalyticsDateString, getTimezone } from 'utils/dateUtils'\nimport InfluencerAnalyticsLoader from 'components/InfluencerAnalyticsLoader/InfluencerAnalyticsLoader'\nimport { getCurrencySymbol } from 'services/currency'\nimport { copyToClipboard } from 'services/SystemService'\nimport ShortsImage from 'embeddedImages/ShortsImage'\nimport {\n extractLinkData,\n extractExtendedInfluencerAnalytics,\n extractInfluencerData\n} from 'utils/dataUtils'\nimport InfluencerLinksShortsLoader from 'components/InfluencerLinksShortsLoader/InfluencerLinksShortsLoader'\nimport InfluencerInsights from 'components/InfluencerInsights/InfluencerInsights'\nimport ContentDialog from 'dialogs/ContentDialog/ContentDialog'\nimport ContentDialogTopbar from 'components/ContentDialogTopbar/ContentDialogTopbar'\nimport useOnScreen from 'hooks/useOnScreen'\nimport Loader from 'components/Loader/Loader'\nimport AddLInkFlow from 'components/AddLInkFlow/AddLInkFlow'\n\n/**\n * Represents a preview page for a specific influencer's data.\n */\nexport default function InfluencerPreviewPage({\n data,\n onDeleteInfluencer = () => { },\n onInfluencerSaveSuccess = () => { }\n}) {\n const { t } = useTranslation()\n const {\n userDetails,\n isFreeUserAndTrialEnded\n } = useUserDetailsContext()\n const {\n showApprovalMessage,\n openDrawer,\n closeDrawer,\n finishedUpdatingObject,\n finishedCreatingObject,\n objectToSave,\n openFreeTrialDialog,\n } = useGeneralDataContext()\n const history = useHistoryContext()\n\n const [selectedTabOptionIndex, setSelectedTabOptionIndex] = useState(0)\n\n const [overviewTimeIntervalName, setOverviewTimeIntervalName] = useState(ANALYTICS_PAGE_RETROACTIVE_DATA_REPORT_TIME_INTERVALS_NAMES.THIS_MONTH)\n const [datePickerState, setDatePickerState] = useState({\n startDate: ANALYTICS_PAGE_RETROACTIVE_DATA_REPORT_TIME_INTERVALS.find(interval => interval?.name === ANALYTICS_PAGE_RETROACTIVE_DATA_REPORT_TIME_INTERVALS_NAMES.THIS_MONTH).timeRange[0],\n endDate: ANALYTICS_PAGE_RETROACTIVE_DATA_REPORT_TIME_INTERVALS.find(interval => interval?.name === ANALYTICS_PAGE_RETROACTIVE_DATA_REPORT_TIME_INTERVALS_NAMES.THIS_MONTH).timeRange[1]\n })\n const [shouldApplyDateRange, setShouldApplyDateRange] = useState(false)\n const [influencerData, setInfluencerData] = useState({\n username: '',\n image: '',\n email: '',\n utm: '',\n promocode: '',\n commission: null,\n password: '',\n analytics: {\n clicks: 0,\n sales: 0,\n revenue: 0\n },\n links: [],\n shorts: []\n })\n const [isLoadingInfluencerLinks, setIsLoadingInfluencerLinks] = useState(true)\n const [isLoadingInfluencerLinksAnalytics, setIsLoadingInfluencerAnalytics] = useState(true)\n const [isLoadingInfluencerReport, setIsLoadingInfluencerReport] = useState(false)\n const [optionsMenuState, setOptionsMenuState] = useState({\n isOpen: false,\n anchorElement: null,\n onClose: closeOptionsMenu\n })\n const [dialogState, setDialogState] = useState({\n isOpen: false,\n title: '',\n message: '',\n leftButtonText: '',\n rightButtonText: '',\n rightButtonClickHandler: () => { }\n })\n const [shouldPopulateLinksContent, setShouldPopulateLinksContent] = useState(false)\n const [hasMoreItemsState, setHasMoreItemsState] = useState({\n links: true,\n shorts: true\n })\n const [loadingMoreItems, setLoadingMoreItems] = useState(false)\n const [contentDialogState, setContentDialogState] = useState({\n isOpen: false,\n mode: VIEW_MODES.CREATE,\n onSaveSuccess: () => { }\n })\n\n const [addFlowTrigger, setAddFlowTrigger] = useState(false)\n\n const linksListRef = useRef(null)\n const tabsRef = useRef(null)\n const analyticsStripRef = useRef(null)\n const paginationTriggeringLinkRef = useRef(null)\n\n const isTargetLinkInView = useOnScreen(paginationTriggeringLinkRef)\n\n useEffect(() => {\n if (data?.datePickerRange) {\n // If timerange came from the parent page, set it and then trigger the analytics load\n setDatePickerState(prev => {\n return {\n startDate: data?.datePickerRange?.startDate,\n endDate: data?.datePickerRange?.endDate,\n }\n })\n if (data?.datePickerRange?.timeIntervalName) {\n setOverviewTimeIntervalName(data?.datePickerRange?.timeIntervalName)\n }\n }\n setTimeout(() => setShouldApplyDateRange(true), 100) // Load analytics after setting time range\n loadInfluencer()\n }, [])\n\n useEffect(() => {\n if (isTargetLinkInView) {\n handlePageScroll()\n }\n }, [isTargetLinkInView])\n\n useEffect(() => {\n if (shouldApplyDateRange) {\n loadInfluencerAnalytics()\n }\n }, [shouldApplyDateRange, datePickerState])\n\n useEffect(() => {\n loadInfluencerDetails()\n }, [selectedTabOptionIndex])\n\n useEffect(() => {\n if (finishedUpdatingObject) {\n loadInfluencer()\n }\n }, [finishedUpdatingObject])\n\n function loadInfluencer() {\n GetInfluencer(data?.influencerUsername)\n .then(response => {\n setInfluencerData(prev => ({\n ...prev,\n ...extractInfluencerData(response)\n }))\n })\n .catch(error => {\n console.log(error)\n })\n }\n\n function loadInfluencerDetails(reset=false) {\n if (isLinksTabSelected() && (influencerData?.links?.length === 0 || reset)) {\n setShouldPopulateLinksContent(false)\n setIsLoadingInfluencerLinks(true)\n GetInfluencerLinks(userDetails?.businessId, data?.influencerUsername, INFLUENCER_LINK_PAGINATION_COUNT, 0, LINK_TYPES.LOOK)\n .then(response => {\n setInfluencerData(prev => ({\n ...prev,\n links: response?.links?.map(link => extractLinkData(link))\n }))\n\n setHasMoreItemsState(prev => ({\n ...prev,\n links: response?.links?.length === INFLUENCER_LINK_PAGINATION_COUNT\n }))\n })\n .catch(error => {\n console.log(error)\n })\n .finally(() => {\n setIsLoadingInfluencerLinks(false)\n setShouldPopulateLinksContent(true)\n })\n } else if (isShortsTabSelected() && (influencerData?.shorts?.length === 0 || reset)) {\n setShouldPopulateLinksContent(false)\n setIsLoadingInfluencerLinks(true)\n GetInfluencerLinks(userDetails?.businessId, data?.influencerUsername, INFLUENCER_SHORT_PAGINATION_COUNT, 0, LINK_TYPES.SHORT)\n .then(response => {\n setInfluencerData(prev => ({\n ...prev,\n shorts: response?.links?.map(link => extractLinkData(link))\n }))\n\n setHasMoreItemsState(prev => ({\n ...prev,\n shorts: response?.links?.length === INFLUENCER_SHORT_PAGINATION_COUNT\n }))\n })\n .catch(error => {\n console.log(error)\n })\n .finally(() => {\n setIsLoadingInfluencerLinks(false)\n setShouldPopulateLinksContent(true)\n })\n }\n }\n\n function loadInfluencerAnalytics() {\n if (shouldApplyDateRange) {\n setIsLoadingInfluencerAnalytics(true)\n GetInfluencerAnalytics(data?.influencerUsername, getAnalyticsDateString(datePickerState.startDate), getAnalyticsDateString(datePickerState.endDate))\n .then(influencer => {\n setInfluencerData(prev => ({\n ...prev,\n ...extractExtendedInfluencerAnalytics(influencer)\n }))\n setIsLoadingInfluencerAnalytics(false)\n })\n .catch(error => {\n console.log(error)\n setIsLoadingInfluencerAnalytics(false)\n })\n setShouldApplyDateRange(false)\n }\n }\n\n function downloadInfluencerReport() {\n if (isLoadingInfluencerReport) {\n return\n }\n\n if (isMobile) {\n closeDrawer()\n }\n\n setIsLoadingInfluencerReport(true)\n const from_date = getAnalyticsDateString(datePickerState.startDate)\n const to_date = getAnalyticsDateString(datePickerState.endDate)\n const report_name = `${data?.influencerUsername}_report${from_date ? `_${from_date}` : ''}${to_date ? `_to_${to_date}` : ''}.csv`\n const localTimezone = getTimezone()\n GetInfluencerAnalyticsReport(data?.influencerUsername, from_date, to_date, localTimezone? localTimezone : \"UTC\", report_name)\n .then(() => {\n setIsLoadingInfluencerReport(false)\n })\n .catch(error => {\n console.log(error)\n setIsLoadingInfluencerReport(false)\n })\n }\n\n function onDateRangeSelected(startDate, endDate) {\n setDatePickerState({\n startDate,\n endDate\n })\n }\n\n function hasNoInfluencerLinks() {\n return influencerData?.links && influencerData?.links.length === 0\n }\n\n function hasNoInfluencerShorts() {\n return influencerData?.shorts && influencerData?.shorts.length === 0\n }\n\n function closeDialog() {\n setDialogState(prev => ({\n ...prev,\n isOpen: false\n }))\n }\n\n function openOptionsMenu(e) {\n setOptionsMenuState({\n isOpen: true,\n anchorElement: e.currentTarget,\n onClose: () => setOptionsMenuState(prev => ({\n ...prev,\n isOpen: false\n }))\n })\n }\n\n function closeOptionsMenu() {\n setOptionsMenuState(prev => ({\n ...prev,\n isOpen: false\n }))\n }\n\n function showResetInfluencerPasswordConfirmationDialog() {\n if (isMobile)\n closeDrawer()\n else\n optionsMenuState.onClose()\n\n setTimeout(() => {\n setDialogState({\n isOpen: true,\n handleDialogClose: closeDialog,\n title: t('PREVIEW_INFLUENCER_RESET_INFLUENCER_PASSWORD_CONFIRMATION_DIALOG_TITLE'),\n message: t('PREVIEW_INFLUENCER_RESET_INFLUENCER_PASSWORD_CONFIRMATION_DIALOG_MESSAGE', { name: data?.influencerUsername }),\n leftButtonText: t('PREVIEW_INFLUENCER_RESET_INFLUENCER_PASSWORD_CONFIRMATION_DIALOG_LEFT_BUTTON_TEXT'),\n rightButtonText: t('PREVIEW_INFLUENCER_RESET_INFLUENCER_PASSWORD_CONFIRMATION_DIALOG_RIGHT_BUTTON_TEXT'),\n rightButtonClickHandler: influencerResetPassword\n })\n }, MOBILE_DASHBOARD_TOPBAR_OPTIONS_DRAWER_CLOSING_DELAY)\n }\n\n function influencerResetPassword() {\n resetInfluencerPassword(data?.influencerUsername)\n .then((response) => {\n history.goBack()\n setInfluencerData(prev => ({\n ...prev,\n ...extractInfluencerData(response)\n }))\n showApprovalMessage(t('PREVIEW_INFLUENCER_RESET_INFLUENCER_PASSWORD_SUCCESS_APPROVAL_MESSAGE', { name: data?.influencerUsername }))\n })\n .catch(error => {\n console.log(error)\n setDialogState({\n isOpen: true,\n handleDialogClose: closeDialog,\n title: t('PREVIEW_INFLUENCER_RESET_INFLUENCER_PASSWORD_FAIL_DIALOG_TITLE'),\n leftButtonText: t('PREVIEW_INFLUENCER_RESET_INFLUENCER_PASSWORD_FAIL_DIALOG_LEFT_BUTTON_TEXT'),\n leftButtonClickHandler: () => { }\n })\n })\n }\n\n function openOptionsDrawer() {\n openDrawer(false, <PaydinDrawerListContent\n options={[\n {\n text: t('PREVIEW_INFLUENCER_MORE_OPTIONS_MENU_EDIT_OPTION_TEXT'),\n image: <MdEdit className='mobile-influencer-preview-more-options-drawer-option-image' />,\n onClick: editInfluencer\n },\n {\n text: t('HOME_PAGE_CREATE_LINK_BUTTON_TEXT'),\n image: <BiLink className=\"mobile-dashboard-topbar-add-options-menu-option-image\" />,\n onClick: createNewLink\n },\n {\n text: t('HOME_PAGE_CREATE_SHORT_BUTTON_TEXT'),\n image: <ShortsImage className=\"mobile-dashboard-topbar-add-options-menu-option-image\" />,\n onClick: createNewShort\n },\n {\n text: t('PREVIEW_INFLUENCER_MORE_OPTIONS_MENU_COPY_INFLUENCER_LOGIN_LINK_OPTION_TEXT'),\n image: <MdOutlineContentCopy className='mobile-influencer-preview-more-options-drawer-option-image' />,\n onClick: copyInfluencerLoginInformation\n },\n {\n text: t('PREVIEW_INFLUENCER_MORE_OPTIONS_MENU_DOWNLOAD_INFLUENCER_REPORT_OPTION_TEXT'),\n image: <TbFileDownload className='mobile-influencer-preview-more-options-drawer-option-image' />,\n onClick: downloadInfluencerReport\n },\n {\n text: t('PREVIEW_INFLUENCER_MORE_OPTIONS_MENU_RESET_INFLUENCER_PASSWORD_OPTION_TEXT'),\n image: <MdOutlineLockReset className='mobile-influencer-preview-more-options-drawer-option-image' />,\n onClick: showResetInfluencerPasswordConfirmationDialog\n },\n {\n text: t('PREVIEW_INFLUENCER_MORE_OPTIONS_MENU_DELETE_OPTION_TEXT'),\n className: 'mobile-influencer-preview-more-options-drawer-delete-option-image',\n image: <MdDeleteOutline className='mobile-influencer-preview-more-options-drawer-option-image' />,\n onClick: showDeleteInfluencerConfirmationDialog\n },\n {\n text: t('PREVIEW_INFLUENCER_MORE_OPTIONS_MENU_CANCEL_OPTION_TEXT'),\n image: <AiOutlineClose className='mobile-influencer-preview-more-options-drawer-option-image' />,\n onClick: closeDrawer\n }\n ]}\n />)\n }\n\n function editInfluencer() {\n if (isMobile)\n closeDrawer()\n else\n optionsMenuState.onClose()\n\n setTimeout(() => {\n if (isFreeUserAndTrialEnded()) {\n openFreeTrialDialog()\n } else {\n setContentDialogState({\n isOpen: true,\n mode: VIEW_MODES.EDIT,\n contentType: CONTENT_TYPES.INFLUENCER,\n data: {\n influencerUsername: data?.influencerUsername\n },\n onSaveSuccess: updatedInfluencer => {\n loadInfluencer()\n onInfluencerSaveSuccess(updatedInfluencer)\n }\n })\n }\n }, PAYDIN_DRAWER_TRANSITION_DURATION)\n }\n\n async function copyInfluencerLoginInformation() {\n if (isMobile)\n closeDrawer()\n else\n optionsMenuState.onClose()\n\n const link = `${window.location.host}${LOGIN_INFLUENCER_PAGE_URL}?${LOGIN_INFLUENCER_MERCHANT_NAME_QUERY_PARAMETER}=${userDetails?.username}&${LOGIN_INFLUENCER_INFLUENCER_USERNAME_QUERY_PARAMETER}=${influencerData?.username}&${LOGIN_INFLUENCER_INFLUENCER_PASSWORD_QUERY_PARAMETER}=${influencerData?.password}`\n await copyToClipboard(link)\n showApprovalMessage(t('PREVIEW_INFLUENCER_INFLUENCER_LOGIN_LINK_COPIED_TO_CLIPBOARD'))\n }\n\n function showDeleteInfluencerConfirmationDialog() {\n if (isMobile)\n closeDrawer()\n else\n optionsMenuState.onClose()\n\n setTimeout(() => {\n setDialogState({\n isOpen: true,\n handleDialogClose: closeDialog,\n title: t('PREVIEW_INFLUENCER_DELETE_INFLUENCER_CONFIRMATION_DIALOG_TITLE'),\n message: t('PREVIEW_INFLUENCER_DELETE_INFLUENCER_CONFIRMATION_DIALOG_MESSAGE', { name: data?.influencerUsername }),\n leftButtonText: t('PREVIEW_INFLUENCER_DELETE_INFLUENCER_CONFIRMATION_DIALOG_LEFT_BUTTON_TEXT'),\n rightButtonText: t('PREVIEW_INFLUENCER_DELETE_INFLUENCER_CONFIRMATION_DIALOG_RIGHT_BUTTON_TEXT'),\n rightButtonClickHandler: deleteInfluencer\n })\n }, PAYDIN_DRAWER_TRANSITION_DURATION)\n }\n\n function deleteInfluencer() {\n deactivateInfluencer(data?.influencerUsername)\n .then(_ => {\n onDeleteInfluencer(data?.influencerUsername)\n history.goBack(2)\n })\n .catch(error => {\n console.log(error)\n history.goBack()\n })\n }\n\n function renderTabs() {\n return <Tabs\n selectedTabOptionIndex={selectedTabOptionIndex}\n setSelectedTabOptionIndex={setSelectedTabOptionIndex}\n tabs={INFLUENCER_TAB_OPTIONS}\n inputRef={tabsRef}\n />\n }\n\n function isInsightsTabSelected() {\n return selectedTabOptionIndex === 0\n }\n\n function isLinksTabSelected() {\n return selectedTabOptionIndex === 1\n }\n\n function goToLinksTab() {\n return setSelectedTabOptionIndex(1)\n }\n\n function isShortsTabSelected() {\n return selectedTabOptionIndex === 2\n }\n\n function goToShortsTab() {\n return setSelectedTabOptionIndex(2)\n }\n\n function getNoLinksElementClassName() {\n if (isLinksTabSelected()) {\n return hasNoInfluencerLinks() ? 'no-influencer-links' : ''\n } else if (isShortsTabSelected()) {\n return hasNoInfluencerShorts() ? 'no-influencer-shorts' : ''\n } else {\n return ''\n }\n }\n\n function getItemsListClassName() {\n if (isLinksTabSelected()) {\n return `${isMobile ? 'mobile-' : ''}influencer-preview-links-list`\n } else if (isShortsTabSelected()) {\n return `${isMobile ? 'mobile-' : ''}influencer-preview-shorts-list`\n } else {\n return 'influencer-preview-influencer-insights'\n }\n }\n\n function renderDateRangeSelect() {\n return <TimeSelect\n selectedStartDate={datePickerState.startDate}\n selectedEndDate={datePickerState.endDate}\n timeIntervals={ANALYTICS_PAGE_RETROACTIVE_DATA_REPORT_TIME_INTERVALS}\n setStartEndDates={onDateRangeSelected}\n selectedTimeInterval={overviewTimeIntervalName}\n onTimeIntervalSelect={setOverviewTimeIntervalName}\n setShouldApplyDateRange={setShouldApplyDateRange}\n />\n }\n\n function renderInfluencerAnalytics() {\n return <div ref={analyticsStripRef} className={isMobile ? \"mobile-influencer-preview-influencer-analytics\" : \"influencer-preview-influencer-analytics\"}>\n <div className=\"influencer-preview-influencer-analytics-section\">\n <div className=\"influencer-preview-influencer-analytics-section-value-container\">\n {\n isLoadingInfluencerLinksAnalytics ? <InfluencerAnalyticsLoader /> : <div className=\"influencer-preview-influencer-analytics-section-value\">{formatNumber(influencerData?.clicks, NUMBER_TYPES.SHORT)}</div>\n }\n </div>\n <div className=\"influencer-preview-influencer-analytics-section-label\">{t('PREVIEW_INFLUENCER_ANALYTICS_CLICKS_LABEL')}</div>\n </div>\n <div className=\"influencer-preview-influencer-analytics-section\">\n <div className=\"influencer-preview-influencer-analytics-section-value-container\">\n {\n isLoadingInfluencerLinksAnalytics ? <InfluencerAnalyticsLoader /> : <div className=\"influencer-preview-influencer-analytics-section-value\">{formatNumber(influencerData?.totalSales, NUMBER_TYPES.SHORT)}</div>\n }\n </div>\n <div className=\"influencer-preview-influencer-analytics-section-label\">{t('PREVIEW_INFLUENCER_ANALYTICS_SALES_LABEL')}</div>\n </div>\n <div className=\"influencer-preview-influencer-analytics-section\">\n <div className=\"influencer-preview-influencer-analytics-section-value-container\">\n {\n isLoadingInfluencerLinksAnalytics ? <InfluencerAnalyticsLoader /> : <div className=\"influencer-preview-influencer-analytics-section-value\">{getCurrencySymbol(influencerData?.currency)}{formatNumber(influencerData?.totalRevenue, NUMBER_TYPES.SHORT)}</div>\n }\n </div>\n <div className=\"influencer-preview-influencer-analytics-section-label\">{t('PREVIEW_INFLUENCER_ANALYTICS_REVENUE_LABEL')}</div>\n </div>\n </div>\n }\n\n function handlePageScroll() {\n if (isLinksTabSelected() || isShortsTabSelected()) {\n if (!isLoadingInfluencerLinks && (isLinksTabSelected() ? hasMoreItemsState.links : hasMoreItemsState.shorts)) {\n setLoadingMoreItems(true)\n GetInfluencerLinks(userDetails?.businessId, data?.influencerUsername, isLinksTabSelected() ? INFLUENCER_LINK_PAGINATION_COUNT : INFLUENCER_SHORT_PAGINATION_COUNT, isLinksTabSelected() ? influencerData?.links?.length : influencerData?.shorts?.length, isLinksTabSelected() ? LINK_TYPES.LOOK : LINK_TYPES.SHORT)\n .then(linksData => {\n setInfluencerData(prev => ({\n ...prev,\n ...(isLinksTabSelected() ? { links: [...prev.links, ...(linksData?.links?.map(link => extractLinkData(link)))] } : { shorts: [...prev.shorts, ...(linksData?.links?.map(link => extractLinkData(link)))] })\n }))\n setHasMoreItemsState(prev => ({\n ...prev,\n ...(isLinksTabSelected() ? { links: linksData?.links.length === INFLUENCER_LINK_PAGINATION_COUNT } : { shorts: linksData?.links.length === INFLUENCER_SHORT_PAGINATION_COUNT })\n }))\n })\n .catch(error => {\n console.log(error)\n })\n .finally(() => {\n setLoadingMoreItems(false)\n })\n }\n }\n }\n\n function createNewLink() {\n if (isMobile) {\n closeDrawer()\n }\n\n setTimeout(() => {\n if (isFreeUserAndTrialEnded()) {\n openFreeTrialDialog()\n } else {\n setAddFlowTrigger(true)\n }\n }, PAYDIN_DRAWER_TRANSITION_DURATION)\n }\n\n function createNewShort() {\n if (isMobile) {\n closeDrawer()\n }\n\n setTimeout(() => {\n if (isFreeUserAndTrialEnded()) {\n openFreeTrialDialog()\n } else {\n setContentDialogState({\n isOpen: true,\n mode: VIEW_MODES.CREATE,\n contentType: CONTENT_TYPES.SHORT,\n data: {\n influencerUsername: data?.influencerUsername\n },\n onSaveSuccess: () => loadInfluencerDetails(true)\n })\n }\n }, PAYDIN_DRAWER_TRANSITION_DURATION)\n }\n\n useEffect(() => {\n // Check if of type influencer\n if (objectToSave && objectToSave?.influencerUsername && objectToSave?.influencerUsername === data?.influencerUsername) {\n if (finishedUpdatingObject || finishedCreatingObject) {\n if (objectToSave && objectToSave?.linkId && objectToSave?.linkType) {\n if (objectToSave?.linkType == LINK_TYPES.LOOK) {\n goToLinksTab()\n } else if (objectToSave?.linkType == LINK_TYPES.SHORT) {\n goToShortsTab()\n }\n }\n loadInfluencerDetails(true)\n }\n }\n }, [finishedUpdatingObject, finishedCreatingObject])\n\n function renderTabContent() {\n if (isLinksTabSelected()) {\n if (shouldPopulateLinksContent) {\n if (hasNoInfluencerLinks()) {\n return <NoItemsFound\n image={SHOPEAKS_SMALL_LOGO_URL}\n title={t('LINKS_PAGE_NO_LINKS_TITLE')}\n buttonText={t('LINKS_PAGE_NO_LINKS_CREATE_LINK_BUTTON_TEXT')}\n showButton={false}\n />\n } else {\n return influencerData?.links.map((link, index) => {\n return <LinkItem\n key={link?.linkId}\n linkId={link?.linkId}\n image={link?.image}\n defaultImage={link?.defaultImage}\n views={link?.views}\n createdAt={link?.createdAt}\n title={link?.title}\n influencerUsername={link?.influencerUsername}\n allowOrderDetails={false} //TODO - Fix bug in influencer preview link order details state not updating on click, for now removing the details options from and inner influencer link orders table.\n {...(index === influencerData?.links.length - 1 - INFLUENCER_PREVIEW_LINKS_PAGINATION_OFFSET && (isLinksTabSelected() ? hasMoreItemsState.links : hasMoreItemsState.shorts) ? { elementRef: paginationTriggeringLinkRef } : {})}\n />\n })\n }\n }\n } else if (isShortsTabSelected()) {\n if (shouldPopulateLinksContent) {\n if (hasNoInfluencerShorts()) {\n return <NoItemsFound\n image={SHOPEAKS_SMALL_LOGO_URL}\n title={t('SHORTS_PAGE_NO_SHORTS_TITLE')}\n showButton={false}\n />\n } else {\n return influencerData?.shorts.map((short, index) => <ShortItem\n key={short?.linkId}\n shortId={short?.linkId}\n image={short?.image}\n defaultImage={short?.defaultImage}\n views={short?.views}\n checkouts={short?.checkouts}\n revenue={short?.revenue}\n createdAt={short?.createdAt}\n currency={short?.currency}\n isLinkExpired={short?.isLinkExpired}\n title={short?.title}\n url={short?.shoppingRedirectUrl}\n urlType={short?.urlType}\n influencerUsername={short?.influencerUsername}\n allowOrderDetails={false} //TODO - Fix bug in influencer preview link order details state not updating on click, for now removing the details options from and inner influencer link orders table.\n {...(index === influencerData?.shorts.length - 1 - INFLUENCER_PREVIEW_SHORTS_PAGINATION_OFFSET && (isLinksTabSelected() ? hasMoreItemsState.links : hasMoreItemsState.shorts) ? { elementRef: paginationTriggeringLinkRef } : {})}\n />)\n }\n }\n } else {\n return <div className={isMobile ? 'mobile-infuencer-preview-page-insights-container' : 'infuencer-preview-page-insights-container'}>\n {!isMobile && renderDateRangeSelect()}\n <InfluencerInsights\n totalRevenue={influencerData?.totalRevenue}\n totalRefunded={influencerData?.totalRefunded}\n influencerAttributedRevenue={influencerData?.influencerAttributedRevenue}\n commission={influencerData?.commission}\n totalLinksSales={influencerData?.salesLinks}\n totalShortsSales={influencerData?.salesShorts}\n totalOrganicSales={influencerData?.salesOrganic}\n totalLinksRevenue={influencerData?.revenueLinks}\n totalShortsRevenue={influencerData?.revenueShorts}\n totalOrganicRevenue={influencerData?.revenueOrganic}\n linksClicks={influencerData?.linksClicks}\n shortsClicks={influencerData?.shortsClicks}\n currency={influencerData?.currency}\n isLoadingData={isLoadingInfluencerLinksAnalytics}\n isGeneralAnalytics={false}\n />\n </div>\n }\n }\n\n function closeLinkContentDialog() {\n setContentDialogState(prev => ({\n ...prev,\n isOpen: false\n }))\n }\n\n return (\n <>\n <div className={isMobile ? 'mobile-influencer-preview-page-container' : 'influencer-preview-page-container'}>\n {\n isMobile && <div className='mobile-influencer-preview-page-fixed-section'>\n <div className=\"mobile-influencer-preview-topbar-right-section-container\">\n {renderDateRangeSelect()}\n </div>\n </div>\n }\n\n <div className={isMobile ? 'mobile-influencer-preview-page-content' : 'influencer-preview-page-content'}>\n <ContentDialogTopbar\n title={data?.influencerUsername}\n onBackButtonClick={() => history.goBack()}\n rightElement={<>\n <BiDotsHorizontalRounded className='link-view-more-options-button' onClick={isMobile ? openOptionsDrawer : openOptionsMenu} />\n </>}\n />\n <div className={isMobile ? \"mobile-influencer-preview-influencer-overview\" : \"influencer-preview-influencer-overview\"}>\n <ImageBox\n image={influencerData?.image}\n className={isMobile ? 'mobile-influencer-preview-influencer-image' : 'influencer-preview-influencer-image'}\n showImageLoader={true}\n isImageFitCover={true}\n roundImage={true}\n />\n <div className={isMobile ? \"mobile-influencer-preview-influencer-details\" : \"influencer-preview-influencer-details\"}>\n {!isMobile && renderInfluencerAnalytics()}\n <div className=\"influencer-preview-influencer-data\">\n <div className=\"influencer-preview-influencer-email\">{influencerData?.email}</div>\n {influencerData?.utm && <div className=\"influencer-preview-influencer-utm-container\">\n <div className=\"influencer-preview-influencer-utm-label\">{t('PREVIEW_INFLUENCER_DATA_UTM_LABEL')}</div>\n <div className=\"influencer-preview-influencer-utm-value\">{influencerData?.utm}</div>\n </div>}\n {influencerData?.promocode && <div className=\"influencer-preview-influencer-promocode-container\">\n <div className=\"influencer-preview-influencer-promocode-label\">{t('PREVIEW_INFLUENCER_DATA_PROMOCODE_LABEL')}</div>\n <div className=\"influencer-preview-influencer-promocode-value\">{influencerData?.promocode}</div>\n </div>}\n {![null, undefined].includes(influencerData?.commissionRate) && <div className=\"influencer-preview-influencer-commission-container\">\n <div className=\"influencer-preview-influencer-commission-label\">{t('PREVIEW_INFLUENCER_DATA_COMMISSION_LABEL')}</div>\n <div className=\"influencer-preview-influencer-commission-value\">{influencerData?.commissionRate}%</div>\n </div>}\n </div>\n {\n (!isMobile && userDetails?.permissions?.isActiveInfluencer) && <div className='influencer-preview-buttons-section'>\n <div className='home-page-header-button home-page-header-create-link-button' onClick={createNewLink}>\n <BiLink className='home-page-header-button-image' />\n <div className=\"home-page-header-button-text\">{t('HOME_PAGE_CREATE_LINK_BUTTON_TEXT')}</div>\n </div>\n <div className='home-page-header-button home-page-header-create-short-button' onClick={createNewShort}>\n <ShortsImage className='home-page-header-button-image' />\n <div className={isMobile ? \"mobile-home-page-header-button-text\" : \"home-page-header-button-text\"}>{t('HOME_PAGE_CREATE_SHORT_BUTTON_TEXT')}</div>\n </div>\n </div>\n }\n </div>\n </div>\n {!isMobile && renderTabs()}\n {isMobile && renderInfluencerAnalytics()}\n {\n isMobile && renderTabs()\n }\n <div ref={linksListRef} className='influencer-preview-links-shorts-list-container'>\n {\n (isLoadingInfluencerLinks && !isInsightsTabSelected()) && <div className=\"influencer-preview-links-shorts-list-loader-container\">\n <InfluencerLinksShortsLoader />\n </div>\n }\n <div className={`${getItemsListClassName()} ${getNoLinksElementClassName()}`}>\n {renderTabContent()}\n </div>\n {\n (loadingMoreItems && (isLinksTabSelected() || isShortsTabSelected())) && <div className=\"influencer-preview-links-shorts-list-pagination-loader-container\">\n <Loader\n styles={{\n height: '25px',\n width: '25px',\n margin: '0'\n }}\n />\n </div>\n }\n </div>\n </div>\n {!isMobile &&\n <PaydinMenu\n anchorElement={optionsMenuState.anchorElement}\n isOpen={optionsMenuState.isOpen}\n onClose={optionsMenuState.onClose}\n direction={PAYDIN_MENU_OPENING_DIRECTIONS.RIGHT}\n options={[\n {\n text: t('PREVIEW_INFLUENCER_MORE_OPTIONS_MENU_EDIT_OPTION_TEXT'),\n onClick: editInfluencer\n },\n {\n text: t('PREVIEW_INFLUENCER_MORE_OPTIONS_MENU_COPY_INFLUENCER_LOGIN_LINK_OPTION_TEXT'),\n onClick: copyInfluencerLoginInformation\n },\n {\n text: isLoadingInfluencerReport ? <Loader styles={{ height: '20px', width: '20px', marginInline: '50px' }} /> : t('PREVIEW_INFLUENCER_MORE_OPTIONS_MENU_DOWNLOAD_INFLUENCER_REPORT_OPTION_TEXT'),\n onClick: isLoadingInfluencerReport ? () => {} : downloadInfluencerReport\n },\n {\n text: t('PREVIEW_INFLUENCER_MORE_OPTIONS_MENU_RESET_INFLUENCER_PASSWORD_OPTION_TEXT'),\n onClick: showResetInfluencerPasswordConfirmationDialog\n },\n {\n text: t('PREVIEW_INFLUENCER_MORE_OPTIONS_MENU_DELETE_OPTION_TEXT'),\n onClick: showDeleteInfluencerConfirmationDialog,\n className: 'influencer-preview-more-options-menu-delete-option'\n },\n {\n text: t('PREVIEW_INFLUENCER_MORE_OPTIONS_MENU_CANCEL_OPTION_TEXT'),\n onClick: optionsMenuState.onClose\n }\n ]}\n />\n }\n </div>\n <PaydinDialog\n isDialogOpen={dialogState.isOpen}\n handleDialogClose={dialogState.handleDialogClose}\n title={dialogState.title}\n message={dialogState.message}\n closeOnRightClick={false}\n rightButtonType={PAYDIN_DIALOG_BUTTON_TYPES.SECONDARY}\n leftButtonText={dialogState.leftButtonText}\n rightButtonText={dialogState.rightButtonText}\n isLeftButtonWithLoader={false}\n isRightButtonWithLoader={true}\n onRightButtonClick={dialogState.rightButtonClickHandler}\n />\n <ContentDialog\n isDialogOpen={contentDialogState.isOpen}\n handleDialogClose={closeLinkContentDialog}\n data={contentDialogState.data}\n mode={contentDialogState.mode}\n contentType={contentDialogState.contentType}\n onSaveSuccess={contentDialogState.onSaveSuccess}\n />\n <AddLInkFlow\n trigger={addFlowTrigger}\n setTrigger={setAddFlowTrigger}\n data={{\n influencerUsername: data?.influencerUsername\n }}\n />\n </>\n )\n}","import React from 'react'\nimport './MultilinkExperiencesTableRowView.css'\nimport { isMobile } from 'utils/deviceUtils'\nimport { TableCell, TableRow, tableCellClasses } from '@mui/material'\nimport { useTranslation } from 'react-i18next'\nimport { getCurrencySymbol } from 'services/currency'\nimport { formatNumber } from 'utils/utils'\nimport { MOBILE_MULTILINK_EXPERIENCES_TABLE_ROW_HEIGHT_PX, MULTILINK_EXPERIENCES_TABLE_ROW_HEIGHT_PX, MULTILINK_SUBLINK_DEVICE_OPTIONS, NUMBER_TYPES, SHORT_URL_SELECTION_TYPE} from 'constants/general.constants'\nimport { styled } from '@mui/system'\nimport LinkUrlTypeTag from 'components/LinkUrlTypeTag/LinkUrlTypeTag'\n\n/**\n * Represents a row view for the orders table\n * @param {object} rowData - The data object of a specific row\n */\nexport default function MultilinkExperiencesTableRowView({\n rowData\n}) {\n const { t } = useTranslation()\n\n const StyledTableRow = styled(TableRow)(({ theme }) => ({\n // hide all borders\n '&:not(:last-child) td, & th': {\n border: 0,\n }\n }))\n\n const StyledTableCell = styled(TableCell)(({ theme }) => ({\n [`&.${tableCellClasses.body}`]: {\n textAlign: 'center',\n padding: '0'\n },\n }))\n\n function previewLink() {\n rowData.openLinkPreview(rowData.linkId)\n }\n\n function renderRowContent() {\n return <>\n <StyledTableCell padding=\"normal\" align='right' onClick={previewLink}>\n <div className='multilink-experiences-table-row-view multilink-experiences-table-row-view-items multilink-experiences-table-row-view-clickable'>{rowData?.name}</div>\n </StyledTableCell>\n <StyledTableCell padding=\"normal\" align='right'>\n <div className='multilink-experiences-table-row-view multilink-experiences-table-row-view-items'>\n <LinkUrlTypeTag\n type={rowData?.type}\n isSmall={true}\n showTooltip={Object.keys(SHORT_URL_SELECTION_TYPE).includes(rowData?.type)}\n tooltipText={rowData.url}\n />\n </div>\n </StyledTableCell>\n <StyledTableCell padding=\"normal\" align='right'>\n <div className='multilink-experiences-table-row-view multilink-experiences-table-row-view-items'>{MULTILINK_SUBLINK_DEVICE_OPTIONS[rowData?.device] ?? \"\"}</div>\n </StyledTableCell>\n <StyledTableCell padding=\"normal\" align='right'>\n <div className='multilink-experiences-table-row-view multilink-experiences-table-row-view-items'>{t('MULTILINK_EXPERIENCES_TABLE_ROW_TRAFFIC_TEXT', { value: rowData?.traffic })}</div>\n </StyledTableCell>\n <StyledTableCell padding=\"normal\" align='right'>\n <div className='multilink-experiences-table-row-view multilink-experiences-table-row-view-total'>{`${formatNumber(rowData?.clicks, NUMBER_TYPES.SHORT)}`}</div>\n </StyledTableCell>\n <StyledTableCell padding=\"normal\" align='right'>\n <div className='multilink-experiences-table-row-view multilink-experiences-table-row-view-total'>{`${formatNumber(rowData?.sales, NUMBER_TYPES.SHORT)}`}</div>\n </StyledTableCell>\n <StyledTableCell padding=\"normal\" align='right'>\n <div className='multilink-experiences-table-row-view multilink-experiences-table-row-view-total'>{`${getCurrencySymbol(rowData?.currency)}${formatNumber(rowData?.revenue, NUMBER_TYPES.SHORT)}`}</div>\n </StyledTableCell>\n <StyledTableCell padding=\"normal\" align='right'>\n <div className='multilink-experiences-table-row-view multilink-experiences-table-row-view-total'>{`${formatNumber(rowData?.cr, NUMBER_TYPES.PERCENTAGE)}%`}</div>\n </StyledTableCell>\n <StyledTableCell padding=\"normal\" align='right'>\n <div className='multilink-experiences-table-row-view multilink-experiences-table-row-view-total'>{`${getCurrencySymbol(rowData?.currency)}${formatNumber(rowData?.aov, NUMBER_TYPES.SHORT, true)}`}</div>\n </StyledTableCell>\n </>\n }\n\n\n return (\n <>\n {\n isMobile ? <StyledTableRow style={{ height: `${MOBILE_MULTILINK_EXPERIENCES_TABLE_ROW_HEIGHT_PX}px` }}>\n {renderRowContent()}\n </StyledTableRow> : <>\n <StyledTableRow style={{ height: `${MULTILINK_EXPERIENCES_TABLE_ROW_HEIGHT_PX}px` }}>\n {renderRowContent()}\n </StyledTableRow>\n </>\n }\n </>\n )\n}","import React from 'react'\nimport './MultilinkExperiencesTableHeaderView.css'\nimport { useTranslation } from 'react-i18next'\nimport { Box, TableCell, TableSortLabel, tableCellClasses } from '@mui/material'\nimport { styled } from '@mui/system'\nimport { visuallyHidden } from '@mui/utils'\nimport { MULTILINK_EXPERIENCES_TABLE_HEADERS_IDS } from 'constants/general.constants'\n\n/**\n * Represents a header view for the orders table\n * @param {string} order - The way of ordering the column data, e.g., asc or desc\n * @param {string} orderBy - The column to order the data by\n * @param {string} headerBackgroundColor - The background color of the header view\n * @param {string} headerTextColor - The text color of the header view\n * @param {string} createSortHandler - A function for creating the sort function for the data ordering\n * @param {array} removedColumnIds - An array of column IDs that are required to remove from display\n */\nexport default function MultilinkExperiencesTableHeaderView({\n order,\n orderBy,\n headerBackgroundColor = '',\n headerTextColor = '',\n createSortHandler = () => { },\n}) {\n const { t } = useTranslation()\n\n const headerContentMap = {\n [MULTILINK_EXPERIENCES_TABLE_HEADERS_IDS.NAME]: <div className='multilink-experiences-table-header-view name'>{t('MULTILINK_EXPERIENCES_TABLE_HEADER_NAME')}</div>,\n [MULTILINK_EXPERIENCES_TABLE_HEADERS_IDS.TYPE]: <div className='multilink-experiences-table-header-view link-type'>{t('MULTILINK_EXPERIENCES_TABLE_HEADER_TYPE')}</div>,\n [MULTILINK_EXPERIENCES_TABLE_HEADERS_IDS.DEVICE]: <div className='multilink-experiences-table-header-view'>{t('MULTILINK_EXPERIENCES_TABLE_HEADER_DEVICE')}</div>,\n [MULTILINK_EXPERIENCES_TABLE_HEADERS_IDS.TRAFFIC]: <div className='multilink-experiences-table-header-view'>{t('MULTILINK_EXPERIENCES_TABLE_HEADER_TRAFFIC')}</div>,\n [MULTILINK_EXPERIENCES_TABLE_HEADERS_IDS.CLICKS]: <div className='multilink-experiences-table-header-view'>{t('MULTILINK_EXPERIENCES_TABLE_HEADER_CLICKS')}</div>,\n [MULTILINK_EXPERIENCES_TABLE_HEADERS_IDS.SALES]: <div className='multilink-experiences-table-header-view'>{t('MULTILINK_EXPERIENCES_TABLE_HEADER_SALES')}</div>,\n [MULTILINK_EXPERIENCES_TABLE_HEADERS_IDS.REVENUE]: <div className='multilink-experiences-table-header-view'>{t('MULTILINK_EXPERIENCES_TABLE_HEADER_REVENUE')}</div>,\n [MULTILINK_EXPERIENCES_TABLE_HEADERS_IDS.CR]: <div className='multilink-experiences-table-header-view'>{t('MULTILINK_EXPERIENCES_TABLE_HEADER_CR')}</div>,\n [MULTILINK_EXPERIENCES_TABLE_HEADERS_IDS.CART_AVERAGE]: <div className='multilink-experiences-table-header-view'>{t('MULTILINK_EXPERIENCES_TABLE_HEADER_CART_AVERAGE')}</div>\n }\n\n const headerStyle = {\n backgroundColor: headerBackgroundColor,\n color: headerTextColor\n }\n\n const StyledTableCell = styled(TableCell)(({ theme }) => ({\n [`&.${tableCellClasses.head}`]: headerStyle,\n }))\n\n const MultilinkExperiencesTableHeaderCell = ({ id, label, align, tableCellView: TableCellView = StyledTableCell }) => <TableCellView\n key={id}\n align={align}\n padding={'none'}\n sortDirection={orderBy === id ? order : false}\n >\n <TableSortLabel\n active={orderBy === id}\n direction={orderBy === id ? order : 'asc'}\n onClick={createSortHandler(id)}\n >\n {label}\n {orderBy === id ? (\n <Box component=\"span\" sx={visuallyHidden}>\n {order === 'desc' ? 'sorted descending' : 'sorted ascending'}\n </Box>\n ) : null}\n </TableSortLabel>\n </TableCellView>\n\n return (\n <>\n <MultilinkExperiencesTableHeaderCell id={MULTILINK_EXPERIENCES_TABLE_HEADERS_IDS.NAME} align={'left'} label={\n headerContentMap[MULTILINK_EXPERIENCES_TABLE_HEADERS_IDS.NAME]\n } />\n <MultilinkExperiencesTableHeaderCell id={MULTILINK_EXPERIENCES_TABLE_HEADERS_IDS.TYPE} align={'left'} label={\n headerContentMap[MULTILINK_EXPERIENCES_TABLE_HEADERS_IDS.TYPE]\n } />\n <MultilinkExperiencesTableHeaderCell id={MULTILINK_EXPERIENCES_TABLE_HEADERS_IDS.DEVICE} align={'left'} label={\n headerContentMap[MULTILINK_EXPERIENCES_TABLE_HEADERS_IDS.DEVICE]\n } />\n <MultilinkExperiencesTableHeaderCell id={MULTILINK_EXPERIENCES_TABLE_HEADERS_IDS.TRAFFIC} align={'left'} label={\n headerContentMap[MULTILINK_EXPERIENCES_TABLE_HEADERS_IDS.TRAFFIC]\n } />\n <MultilinkExperiencesTableHeaderCell id={MULTILINK_EXPERIENCES_TABLE_HEADERS_IDS.CLICKS} align={'left'} label={\n headerContentMap[MULTILINK_EXPERIENCES_TABLE_HEADERS_IDS.CLICKS]\n } />\n <MultilinkExperiencesTableHeaderCell id={MULTILINK_EXPERIENCES_TABLE_HEADERS_IDS.SALES} align={'left'} label={\n headerContentMap[MULTILINK_EXPERIENCES_TABLE_HEADERS_IDS.SALES]\n } />\n <MultilinkExperiencesTableHeaderCell id={MULTILINK_EXPERIENCES_TABLE_HEADERS_IDS.REVENUE} align={'left'} label={\n headerContentMap[MULTILINK_EXPERIENCES_TABLE_HEADERS_IDS.REVENUE]\n } />\n <MultilinkExperiencesTableHeaderCell id={MULTILINK_EXPERIENCES_TABLE_HEADERS_IDS.CR} align={'left'} label={\n headerContentMap[MULTILINK_EXPERIENCES_TABLE_HEADERS_IDS.CR]\n } />\n <MultilinkExperiencesTableHeaderCell id={MULTILINK_EXPERIENCES_TABLE_HEADERS_IDS.CART_AVERAGE} align={'left'} label={\n headerContentMap[MULTILINK_EXPERIENCES_TABLE_HEADERS_IDS.CART_AVERAGE]\n } />\n </>\n )\n}","import PaydinTable from 'components/PaydinTable/PaydinTable'\nimport { CONTENT_TYPES, MOBILE_MULTILINK_EXPERIENCES_TABLE_ROW_HEIGHT_PX, MULTILINK_EXPERIENCES_TABLE_HEADERS_IDS, MULTILINK_EXPERIENCES_TABLE_ROW_HEIGHT_PX, MULTILINK_SUBLINK_SELECTION_TYPE, MULTILINK_SUBLINK_TYPES, VIEW_MODES } from 'constants/general.constants'\nimport React, { useState } from 'react'\nimport { isMobile } from 'utils/deviceUtils'\nimport { HiOutlineShoppingBag } from 'react-icons/hi'\nimport './MultilinkExperiencesTable.css'\nimport { useTranslation } from 'react-i18next'\nimport MultilinkExperiencesTableRowView from 'components/MultilinkExperiencesTableRowView/MultilinkExperiencesTableRowView'\nimport MultilinkExperiencesTableHeaderView from 'components/MultilinkExperiencesTableHeaderView/MultilinkExperiencesTableHeaderView'\nimport ContentDialog from 'dialogs/ContentDialog/ContentDialog'\nimport { MdOutlineLinkOff } from \"react-icons/md\";\n\n/**\n * Represents an orders table for a specific link.\n * @param {string} linkId - The id of the link \n * @param {number} salesCount - The total number of sale made with the link \n * @param {array} removedColumnIds - An array of column IDs that are required to remove from display\n */\nexport default function MultilinkExperiencesTable({\n linksOptions=[],\n currency=\"USD\",\n}) {\n const { t } = useTranslation()\n const [linkContentDialogState, setLinkContentDialogState] = useState({\n isOpen: false,\n data: {},\n linkType: \"\",\n })\n\n function getExperiencesData(count, skip, onSuccess = () => { }, onFailure = () => { }) {\n onSuccess(linksOptions.map((linkOption, index) => {\n return {\n linkId: linkOption?.linkId,\n openLinkPreview: openLinkContentDialog,\n currency,\n url: linkOption?.linkData?.shoppingRedirectUrl,\n [MULTILINK_EXPERIENCES_TABLE_HEADERS_IDS.NAME]: `Experience ${String.fromCharCode(index + 65)}`,\n [MULTILINK_EXPERIENCES_TABLE_HEADERS_IDS.TYPE]: getUrlSelectionType(linkOption),\n [MULTILINK_EXPERIENCES_TABLE_HEADERS_IDS.DEVICE]: linkOption?.deviceOption,\n [MULTILINK_EXPERIENCES_TABLE_HEADERS_IDS.TRAFFIC]: linkOption?.value,\n [MULTILINK_EXPERIENCES_TABLE_HEADERS_IDS.CLICKS]: linkOption?.linkData?.views ?? 0,\n [MULTILINK_EXPERIENCES_TABLE_HEADERS_IDS.SALES]: linkOption?.linkData?.checkouts ?? 0,\n [MULTILINK_EXPERIENCES_TABLE_HEADERS_IDS.REVENUE]: linkOption?.linkData?.revenue ?? 0,\n [MULTILINK_EXPERIENCES_TABLE_HEADERS_IDS.CR]: linkOption?.linkData?.views > 0 ? (linkOption?.linkData?.checkouts / linkOption?.linkData?.views) * 100 : 0,\n [MULTILINK_EXPERIENCES_TABLE_HEADERS_IDS.CART_AVERAGE]: linkOption?.linkData?.checkouts > 0 ? linkOption?.linkData?.revenue / linkOption?.linkData?.checkouts : 0,\n }\n }))\n }\n\n function getUrlSelectionType(linkOption) {\n if (linkOption?.linkData?.linkType == MULTILINK_SUBLINK_TYPES.SHORT) {\n if (linkOption?.linkData?.products && linkOption?.linkData?.products?.length > 0) {\n return MULTILINK_SUBLINK_SELECTION_TYPE.PRODUCT\n }\n \n if (linkOption?.linkData?.collections && linkOption?.linkData?.collections?.length > 0) {\n return MULTILINK_SUBLINK_SELECTION_TYPE.COLLECTION\n }\n \n return MULTILINK_SUBLINK_SELECTION_TYPE.CUSTOM\n }\n return MULTILINK_SUBLINK_SELECTION_TYPE.LOOK\n }\n\n function closeLinkContentDialog() {\n setLinkContentDialogState(prev => ({\n ...prev,\n isOpen: false\n }))\n }\n\n function openLinkContentDialog(linkId) {\n let linkType = CONTENT_TYPES.LINK\n linksOptions.map(linkOption => {\n if (linkOption?.linkId === linkId && linkOption?.linkData?.linkType == MULTILINK_SUBLINK_TYPES.SHORT) {\n linkType = CONTENT_TYPES.SHORT\n }\n })\n setLinkContentDialogState(prev => ({\n ...prev,\n isOpen: true,\n data: {\n linkId,\n },\n linkType\n }))\n }\n \n return <>\n <PaydinTable\n visibleRowsCount={linksOptions.length}\n borderRadius='10px'\n totalCount={linksOptions.length}\n rowHeightPx={isMobile ? MOBILE_MULTILINK_EXPERIENCES_TABLE_ROW_HEIGHT_PX : MULTILINK_EXPERIENCES_TABLE_ROW_HEIGHT_PX}\n rowView={MultilinkExperiencesTableRowView}\n headerView={MultilinkExperiencesTableHeaderView}\n dataGenerator={getExperiencesData}\n noItemsImage={!isMobile ? <MdOutlineLinkOff className='multilinks-expeirences-table-no-items-image' /> : null}\n noItemsText={t('MULTILINK_EXPERIENCES_TABLE_NO_ITEMS_TO_DISPLAY_MESSAGE')}\n shouldPaginate={false}\n showTotalCount={false}\n showPagesSection={false}\n />\n <ContentDialog\n isDialogOpen={linkContentDialogState.isOpen}\n handleDialogClose={closeLinkContentDialog}\n data={linkContentDialogState.data}\n mode={VIEW_MODES.PREVIEW}\n contentType={linkContentDialogState.linkType}\n />\n </>\n}\n","import React, { useEffect, useState } from 'react'\nimport './PreviewMultilinkSection.css'\nimport LinkAnalyticsSection from 'components/LinkAnalyticsSection/LinkAnalyticsSection'\nimport { useTranslation } from 'react-i18next'\nimport { formatNumber } from 'utils/utils'\nimport { getCurrencySymbol } from 'services/currency'\nimport { isMobile } from 'utils/deviceUtils'\nimport { RiDeleteBin6Line } from 'react-icons/ri'\nimport { BiDotsHorizontalRounded } from 'react-icons/bi'\nimport { copyToClipboard } from 'services/SystemService'\nimport { useHistoryContext } from 'contexts/History'\nimport { environment } from 'conf'\nimport { useGeneralDataContext, useUserDetailsContext } from 'contexts/User'\nimport PaydinDialog, { PAYDIN_DIALOG_BUTTON_TYPES } from 'dialogs/PaydinDialog/PaydinDialog'\nimport { DeleteMultilinkAPI, GetMultilinkDetailsAPI } from 'api/links/links'\nimport { CONTENT_TYPES, LINKS_PAGE_MOBILE_OPTIONS_DRAWER_CLOSING_DELAY, MULTILINK_SUBLINK_SELECTION_TYPE, MULTILINK_SUBLINK_TYPES, NUMBER_TYPES, PAYDIN_DRAWER_TRANSITION_DURATION, PAYDIN_MENU_OPENING_DIRECTIONS, VIEW_MODES } from 'constants/general.constants'\nimport MultiLineText from 'components/MultiLineText/MultiLineText'\nimport ContentDialog from 'dialogs/ContentDialog/ContentDialog'\nimport ContentDialogLoader from 'components/ContentDialogLoader/ContentDialogLoader'\nimport { extractCollectionData, extractProductData } from 'utils/dataUtils'\nimport PreviewItemDataSection from 'components/PreviewItemDataSection/PreviewItemDataSection'\nimport { MULTILINKS_PAGE_URL } from 'constants/routes.constants'\nimport ContentDialogTopbar from 'components/ContentDialogTopbar/ContentDialogTopbar'\nimport PaydinMenu from 'components/PaydinMenu/PaydinMenu'\nimport { MdOutlineContentCopy, MdOutlineEdit } from 'react-icons/md'\nimport DrawerStyledButtonList from 'components/DrawerStyledButtonList/DrawerStyledButtonList'\nimport MultilinkExperiencesTable from 'components/MultilinkExperiencesTable/MultilinkExperiencesTable'\n\n/**\n * Represents the section in which the multilink data is displayed.\n */\nexport default function PreviewMultilinkSection({\n type,\n data = {},\n onDeleteMultilink = () => { },\n onSaveSuccess = () => { }\n}) {\n const { t } = useTranslation()\n const history = useHistoryContext()\n const { \n userDetails,\n isFreeUserAndTrialEnded,\n getFrontendUrl,\n } = useUserDetailsContext()\n const {\n showApprovalMessage,\n openDrawer,\n closeDrawer,\n openFreeTrialDialog,\n finishedUpdatingObject,\n } = useGeneralDataContext()\n\n const [dialogState, setDialogState] = useState({\n isOpen: false,\n title: '',\n message: '',\n leftButtonText: '',\n rightButtonText: '',\n rightButtonClickHandler: () => { }\n })\n const [contentDialogState, setContentDialogState] = useState({\n isOpen: false,\n contentType: CONTENT_TYPES.MULTILINKLINK\n })\n const [isLoadingMultilink, setIsLoadingMultilink] = useState(true)\n const [multilinkData, setMultilinkData] = useState({})\n const [urlSelectionTypes, setUrlSelectionTypes] = useState(['',''])\n const [multilinkAnalyticsData, setMultilinkAnalyticsData] = useState({\n isLoading: true,\n views: 0,\n checkouts: 0,\n revenue: 0\n })\n const [optionsMenuState, setOptionsMenuState] = useState({\n isOpen: false,\n anchorElement: null,\n onClose: () => { }\n })\n\n useEffect(() => {\n loadMultilink()\n }, [])\n\n\n useEffect(() => {\n if (finishedUpdatingObject) {\n loadMultilink()\n }\n }, [finishedUpdatingObject, ])\n\n function loadMultilink() {\n GetMultilinkDetailsAPI(data?.multilinkId)\n .then(multilinkData => {\n const utmParams = {\n UTMSource: multilinkData?.links_options && multilinkData?.links_options?.length > 0 ? (multilinkData?.links_options[0]?.link_data?.utm_params?.utm_source ?? '') : '',\n UTMMedium: multilinkData?.links_options && multilinkData?.links_options?.length > 0 ? (multilinkData?.links_options[0]?.link_data?.utm_params?.utm_medium ?? '') : '',\n UTMCampaign: multilinkData?.links_options && multilinkData?.links_options?.length > 0 ? (multilinkData?.links_options[0]?.link_data?.utm_params?.utm_campaign ?? '') : '',\n UTMTerm: multilinkData?.links_options && multilinkData?.links_options?.length > 0 ? (multilinkData?.links_options[0]?.link_data?.utm_params?.utm_term ?? '') : '',\n UTMContent: multilinkData?.links_options && multilinkData?.links_options?.length > 0 ? (multilinkData?.links_options[0]?.link_data?.utm_params?.utm_content ?? '') : '',\n }\n let promocode = ''\n if (multilinkData?.links_options && multilinkData?.links_options?.length > 0) {\n if (typeof multilinkData?.links_options[0]?.link_data?.promocode === 'string') {\n promocode = multilinkData?.links_options[0]?.link_data?.promocode\n } else if (typeof multilinkData?.links_options[0]?.link_data?.promocode?.code === 'string') {\n promocode = multilinkData?.links_options[0]?.link_data?.promocode?.code\n }\n }\n\n const linksOptions = (multilinkData?.links_options ?? []).map((linkOption, index) => {\n return {\n linkData: {\n shoppingRedirectUrl: linkOption?.link_data?.shopping_redirect_url ?? '',\n description: linkOption.link_data?.description ?? '',\n views: linkOption?.link_data?.link_analytics?.visits ?? 0,\n checkouts: linkOption?.link_data?.link_analytics?.checkouts ?? 0,\n revenue: linkOption?.link_data?.link_analytics?.revenue ?? 0,\n totalTax: linkOption?.link_data?.link_analytics?.total_tax ?? 0,\n linkType: linkOption?.link_data?.link_type ?? '',\n urlType: linkOption?.link_data?.url_type ?? '',\n linkDefaultImage: linkOption?.link_data?.link_default_image ?? '',\n products: (linkOption?.link_data?.products ?? []).map(product => extractProductData(product)),\n collections: (linkOption?.link_data?.collections ?? []).map(collection => extractCollectionData(collection))\n },\n value: linkOption?.value ?? 0,\n linkId: linkOption?.linkData?.linkId ?? (linkOption?.link_data?.link_id ?? ''),\n deviceOption: linkOption.deviceOption ?? (linkOption?.device_option ?? ''),\n }\n })\n \n setMultilinkData({\n multilinkId: multilinkData?.multilinkId ?? (multilinkData?.multilink_id ?? ''),\n title: multilinkData.title ?? '',\n currency: multilinkData?.currency ?? (multilinkData?.link_analytics?.currency ?? userDetails?.businessCurrency),\n promocode: promocode,\n title: multilinkData?.title ?? \"\",\n linksOptions,\n utmParams\n })\n \n setIsLoadingMultilink(false)\n setUrlSelectionTypes(getUrlSelectionTypes(linksOptions))\n setMultilinkAnalyticsData({\n isLoading: false,\n views: linksOptions.reduce((acc, linkOption) => acc + (parseInt(linkOption?.linkData?.views) ?? 0), 0),\n checkouts: linksOptions.reduce((acc, linkOption) => acc + (parseInt(linkOption?.linkData?.checkouts) ?? 0), 0),\n revenue: linksOptions.reduce((acc, linkOption) => acc + (parseFloat(linkOption?.linkData?.revenue) ?? 0), 0),\n totalTax: linksOptions.reduce((acc, linkOption) => acc + (parseFloat(linkOption?.linkData?.totalTax) ?? 0), 0)\n })\n })\n .catch(error => {\n console.log(error)\n history.push(MULTILINKS_PAGE_URL)\n })\n }\n\n function openOptionsMenu(e) {\n setOptionsMenuState({\n isOpen: true,\n anchorElement: e.currentTarget,\n onClose: () => setOptionsMenuState(prev => ({\n ...prev,\n isOpen: false\n }))\n })\n }\n\n function getUrlSelectionTypes(linksOptions) {\n return linksOptions?.map(linkOption => {\n if (linkOption?.linkData?.linkType == MULTILINK_SUBLINK_TYPES.SHORT) {\n if (linkOption?.linkData?.products && linkOption?.linkData?.products?.length > 0) {\n return MULTILINK_SUBLINK_SELECTION_TYPE.PRODUCT\n }\n \n if (linkOption?.linkData?.collections && linkOption?.linkData?.collections?.length > 0) {\n return MULTILINK_SUBLINK_SELECTION_TYPE.COLLECTION\n }\n \n return MULTILINK_SUBLINK_SELECTION_TYPE.CUSTOM\n }\n return MULTILINK_SUBLINK_SELECTION_TYPE.LOOK\n })\n }\n\n function closeContentDialog() {\n setContentDialogState(prev => ({\n ...prev,\n isOpen: false\n }))\n }\n\n function closeDialog() {\n setDialogState(prev => ({\n ...prev,\n isOpen: false\n }))\n }\n\n function edit() {\n if (isMobile) {\n closeDrawer()\n } else {\n optionsMenuState.onClose()\n }\n\n setTimeout(() => {\n if (isFreeUserAndTrialEnded()) {\n openFreeTrialDialog()\n } else {\n setContentDialogState({\n isOpen: true,\n contentType: CONTENT_TYPES.MULTILINK\n })\n }\n }, PAYDIN_DRAWER_TRANSITION_DURATION)\n }\n\n function copyMultilink() {\n if (isMobile) {\n closeDrawer()\n } else {\n optionsMenuState.onClose()\n }\n\n setTimeout(async () => {\n await copyToClipboard(`${getFrontendUrl()}${userDetails?.username}/${multilinkData?.multilinkId}`)\n showApprovalMessage(t('MULTILINK_COPIED_TO_CLIPBOARD'))\n }, PAYDIN_DRAWER_TRANSITION_DURATION)\n }\n\n function onDeleteClick() {\n if (isMobile) {\n history.goBack()\n setTimeout(() => {\n showDeleteConfirmationDialog()\n }, LINKS_PAGE_MOBILE_OPTIONS_DRAWER_CLOSING_DELAY)\n } else {\n optionsMenuState.onClose()\n showDeleteConfirmationDialog()\n }\n }\n\n function showDeleteConfirmationDialog() {\n setDialogState(prev => ({\n ...prev,\n isOpen: true,\n title: t('PREVIEW_MULTILINK_PAGE_DELETE_MULTILINK_DIALOG_TITLE'),\n message: t('PREVIEW_MULTILINK_PAGE_DELETE_MULTILINK_DIALOG_MESSAGE'),\n leftButtonText: t('PREVIEW_MULTILINK_PAGE_DELETE_MULTILINK_DIALOG_LEFT_BUTTON_TEXT'),\n rightButtonText: t('PREVIEW_MULTILINK_PAGE_DELETE_MULTILINK_DIALOG_RIGHT_BUTTON_TEXT'),\n rightButtonClickHandler: deleteMultilink\n }))\n }\n\n function deleteMultilink() {\n DeleteMultilinkAPI(data?.multilinkId)\n .then(_ => {\n onDeleteMultilink(data?.multilinkId)\n setTimeout(() => {\n history.goBack()\n }, 200)\n })\n .catch(error => {\n console.log(error)\n setDialogState(prev => ({\n ...prev,\n title: t('GENERAL_ERROR_DIALOG_TITLE'),\n message: t('GENERAL_ERROR_DIALOG_MESSAGE'),\n leftButtonText: t('GENERAL_ERROR_DIALOG_LEFT_BUTTON_TEXT'),\n rightButtonText: ''\n }))\n })\n }\n\n function openOptionsDrawer() {\n openDrawer(true, <>\n <div className=\"mobile-multilink-item-more-options-menu-container\">\n <div className=\"mobile-multilink-item-more-options-menu-item-line\">\n <div className=\"mobile-multilink-item-more-options-menu-single-item\" onClick={copyMultilink}>\n <MdOutlineContentCopy className=\"mobile-multilink-item-more-options-menu-single-item-image\" />\n <div className=\"mobile-multilink-item-more-options-menu-single-item-text\">{t('LINKS_PAGE_OPTIONS_MENU_ITEM_COPY_LINK')}</div>\n </div>\n </div>\n <DrawerStyledButtonList\n buttons={[\n {\n text: t('LINKS_PAGE_OPTIONS_MENU_ITEM_EDIT'),\n image: <MdOutlineEdit className=\"mobile-multilink-item-more-options-menu-section-item-image\" />,\n onClick: edit\n },\n {\n text: t('LINKS_PAGE_OPTIONS_MENU_ITEM_DELETE'),\n image: <RiDeleteBin6Line className=\"mobile-multilink-item-more-options-menu-section-item-image\" />,\n className: 'mobile-multilink-item-more-options-menu-section-item-delete-multilink',\n onClick: onDeleteClick\n }\n ]}\n />\n </div>\n </>)\n }\n\n function renderMultilinkAnalytics() {\n return <div className=\"preview-multilink-section-multilink-analytics\">\n <div className={isMobile ? \"mobile-preview-multilink-section-multilink-analytics-data\" : \"preview-multilink-section-multilink-analytics-data\"}>\n <LinkAnalyticsSection\n title={t('PREVIEW_LINK_SECTION_ANALYTICS_SECTION_VIEWS_TITLE')}\n value={formatNumber(Math.max(multilinkAnalyticsData?.views ?? 0, multilinkAnalyticsData?.checkouts), NUMBER_TYPES.SHORT)}\n />\n <LinkAnalyticsSection\n title={t('PREVIEW_LINK_SECTION_ANALYTICS_SECTION_CHECKOUTS_COMPLETED_TITLE')}\n value={formatNumber(multilinkAnalyticsData?.checkouts, NUMBER_TYPES.SHORT)}\n />\n <LinkAnalyticsSection\n title={t('PREVIEW_LINK_SECTION_ANALYTICS_SECTION_REVENUE_TITLE')}\n value={`${getCurrencySymbol(multilinkData?.currency)}${formatNumber(multilinkAnalyticsData?.revenue, NUMBER_TYPES.SHORT)}`}\n />\n <LinkAnalyticsSection\n title={t('PREVIEW_LINK_SECTION_ANALYTICS_SECTION_CR_TITLE')}\n value={`${formatNumber((multilinkAnalyticsData?.checkouts / multilinkAnalyticsData?.views) * 100, NUMBER_TYPES.PERCENTAGE)}%`}\n />\n <LinkAnalyticsSection\n title={t('PREVIEW_LINK_SECTION_ANALYTICS_SECTION_CART_AVERAGE_TITLE')}\n value={`${getCurrencySymbol(multilinkData?.currency)}${formatNumber(multilinkAnalyticsData?.revenue / multilinkAnalyticsData?.checkouts, NUMBER_TYPES.SHORT, true)}`}\n />\n </div>\n </div>\n }\n\n return (\n <div className={isMobile ? 'mobile-preview-multilink-container' : 'preview-multilink-container'}>\n <div className={isMobile ? 'mobile-preview-multilink-section-container' : 'preview-multilink-section-container'}>\n <div className={isMobile ? 'mobile-preview-multilink-section-details' : 'preview-multilink-section-details'} style={{ width: '100%' }}>\n <ContentDialogTopbar\n title={t('MULTILINK_VIEW_TOPBAR_CENTER_TITLE_PREVIEW_MULTILINK')}\n onBackButtonClick={() => history.goBack()}\n rightElement={\n <BiDotsHorizontalRounded className='multilink-view-more-options-button' onClick={isMobile ? openOptionsDrawer : openOptionsMenu} />\n }\n />\n {isLoadingMultilink && <ContentDialogLoader />}\n <div className={isMobile ? \"mobile-preview-multilink-section-multilink-details-container\" : \"preview-multilink-section-multilink-details-container\"}>\n <div className={isMobile ? \"mobile-preview-multilink-section-multilink-details\" : \"preview-multilink-section-multilink-details\"} style={{ height: 'fit-content' }}>\n <div className='preview-multilink-section-multilink-description-container' style={{ width: '100%' }}>\n {\n multilinkData?.title && <MultiLineText\n text={multilinkData?.title}\n className='preview-multilink-section-multilink-description'\n lines={1}\n oneWord={true}\n />\n }\n {\n !isMobile && renderMultilinkAnalytics()\n }\n </div>\n </div>\n {isMobile && renderMultilinkAnalytics()}\n {\n !isLoadingMultilink && multilinkData?.promocode && <div className={isMobile ? \"mobile-preview-multilink-section-promocode\" : \"preview-multilink-section-promocode\"}>\n <div className='preview-multilink-section-promocode-label'>{t('PREVIEW_LINK_SECTION_PROMOCODE_SECTION_TITLE')}</div>\n <div className='preview-multilink-section-promocode-value'>{multilinkData?.promocode}</div>\n </div>\n }\n </div>\n <div className={isMobile ? \"mobile-preview-multilink-section-multilink-graphs\" : \"preview-multilink-section-multilink-graphs\"} style={{ maxWidth: isMobile ? '100vw' : '65vw', paddingInline: isMobile ? '0' : '2.5vw' }}>\n {\n !isLoadingMultilink && <PreviewItemDataSection\n title={t('MULTILINKS_PREVIEW_SUBLINKS_TABLE_TITLE')}\n NoBackgroundColor={true}\n hasPadding={true}\n width='100%'\n >\n <MultilinkExperiencesTable\n linksOptions={multilinkData?.linksOptions ?? []}\n currency={multilinkData?.currency}\n />\n </PreviewItemDataSection>\n }\n </div>\n </div>\n </div>\n {\n !isMobile && <PaydinMenu\n anchorElement={optionsMenuState.anchorElement}\n isOpen={optionsMenuState.isOpen}\n onClose={optionsMenuState.onClose}\n direction={PAYDIN_MENU_OPENING_DIRECTIONS.RIGHT}\n options={[\n {\n text: t('LINKS_PAGE_OPTIONS_MENU_ITEM_EDIT'),\n onClick: edit\n },\n {\n text: t('LINKS_PAGE_OPTIONS_MENU_ITEM_COPY_LINK'),\n onClick: copyMultilink\n },\n {\n className: 'multilink-view-options-menu-delete-option',\n text: t('LINKS_PAGE_OPTIONS_MENU_ITEM_DELETE'),\n onClick: onDeleteClick\n }\n ]}\n />\n }\n <PaydinDialog\n isDialogOpen={dialogState.isOpen}\n title={dialogState.title}\n message={dialogState.message}\n handleDialogClose={closeDialog}\n closeOnRightClick={false}\n rightButtonType={PAYDIN_DIALOG_BUTTON_TYPES.SECONDARY}\n leftButtonText={dialogState.leftButtonText}\n isLeftButtonWithLoader={false}\n rightButtonText={dialogState.rightButtonText}\n onRightButtonClick={dialogState.rightButtonClickHandler}\n isRightButtonWithLoader={dialogState.isRightButtonWithLoader}\n />\n <ContentDialog\n isDialogOpen={contentDialogState.isOpen}\n handleDialogClose={closeContentDialog}\n data={{\n multilinkId: multilinkData?.multilinkId,\n multilinkData\n }}\n contentType={contentDialogState.contentType}\n mode={VIEW_MODES.EDIT}\n onSaveSuccess={updatedMultilink => {\n loadMultilink()\n onSaveSuccess(updatedMultilink)\n }}\n />\n </div>\n )\n}","import React from 'react'\n\nexport default function InstantStoresImage(props) {\n return (\n \n <svg \n {...props}\n height=\"512\" \n viewBox=\"0 0 24 24\" \n width=\"512\"\n >\n <path d=\"m15 8h-6c-.2 0-.5.2-.5.4l-1 7c0 .1 0 .3.1.4s.3.2.4.2h8c.1 0 .3-.1.4-.2s.1-.3.1-.4l-1-7c0-.2-.3-.4-.5-.4zm-6.4 7 .9-6h5.1l.9 6z\"/><path d=\"m16.5 2h-9c-1.4 0-2.5 1.1-2.5 2.5v15c0 1.4 1.1 2.5 2.5 2.5h9c1.4 0 2.5-1.1 2.5-2.5v-15c0-1.4-1.1-2.5-2.5-2.5zm-1.5 1c-.3.3-.7.5-1.1.5h-3.9c-.4 0-.8-.2-1-.5zm-9 1.5c0-.8.7-1.5 1.5-1.5h.2l.3.4c.5.7 1.2 1.1 2.1 1.1h3.9c.8 0 1.6-.4 2.1-1.1l.2-.4h.2c.8 0 1.5.7 1.5 1.5v15h-12zm10.5 16.5h-9c-.4 0-.8-.2-1.1-.5h11.2c-.3.3-.7.5-1.1.5z\"/><path d=\"m13.5 9.5c-.3 0-.5.2-.5.5v1c0 .6-.4 1-1 1s-1-.4-1-1v-1c0-.3-.2-.5-.5-.5s-.5.2-.5.5v1c0 1.1.9 2 2 2s2-.9 2-2v-1c0-.3-.2-.5-.5-.5z\"/>\n </svg>\n )\n}","import React, { useEffect, useRef, useState } from 'react'\nimport './EditMultilinkSection.css'\nimport { EDIT_LINK_SECTION_LINK_DESCRIPTION_CHARACTER_LIMIT, EDIT_SHORT_PROMOCODE_INPUT_MAX_LENGTH, EDIT_SHORT_SECTION_URL_TEST_DELAY_MILLISECONDS, INPUT_VALIDATION_INDICATIONS, MULTILINK_SUBLINK_SELECTION_TYPE, VIEW_MODES, MULTILINK_SUBLINK_TYPES, MULTILINK_SUBLINK_DEVICE_OPTIONS_VALUE_ELEMENT } from 'constants/general.constants'\nimport EditFieldSectionInput from 'components/EditFieldSectionInput/EditFieldSectionInput'\nimport { useTranslation } from 'react-i18next'\nimport UTMForm from 'components/UTMForm/UTMForm'\nimport { isMobile } from 'utils/deviceUtils'\nimport { useUserDetailsContext } from 'contexts/User'\nimport { URL_REGEX } from 'constants/regex.constants'\nimport { IoShirtOutline } from 'react-icons/io5'\nimport UrlSelectionType from 'components/UrlSelectionType/UrlSelectionType'\nimport { HiOutlineLink } from 'react-icons/hi'\nimport ShortUrlSelectionCollectionTypeImage from 'embeddedImages/ShortUrlSelectionCollectionTypeImage'\nimport AddProductsDialog from 'dialogs/AddProductsDialog/AddProductsDialog'\nimport AddCollectionsDialog from 'dialogs/AddCollectionsDialog/AddCollectionsDialog'\nimport CollapsingElement from 'components/CollapsingElement/CollapsingElement'\nimport { PRICING_PLANS_PAGE_URL } from 'constants/routes.constants'\nimport { useHistoryContext } from 'contexts/History'\nimport PaydinDialog, { PAYDIN_DIALOG_BUTTON_TYPES } from 'dialogs/PaydinDialog/PaydinDialog'\nimport { AiOutlinePercentage } from \"react-icons/ai\";\nimport PaydinSelect from 'components/PaydinSelect/PaydinSelect'\nimport InstantStoresImage from 'embeddedImages/InstantStoresImage'\nimport MultiSelectStatusButton from 'components/MultiSelectStatusButton/MultiSelectStatusButton'\n\n/**\n * Represents the section for editing/creating a multilink.\n * @param {string} mode - The mode of this section, it determins whether it is creating or editing a short, accepts VIEW_MODES.CREATE or VIEW_MODES.EDIT\n * @param {array} influencers - The list of influencers to allow influencer select\n * @param {string} title - The title of this short\n * @param {function} setTitle - A function for setting the title of this short\n * @param {string} url - The currently displayed url\n * @param {function} setURL - A function for setting the currently displayed url\n * @param {string} originalInfluencerUsername - The currently saved influencer's username\n * @param {string} selectedInfluencerUsername - The currently selected influencer's username\n * @param {function} setSelectedInfluencerUsername - A function for setting the currently seelcted influencer's username\n * @param {string} promocode - The promocode state\n * @param {function} setPromocode - A function for setting the promocode state\n * @param {boolean} shouldAddUTMs - Determins whether the {@link UTMForm} component is visible or not, also determins whether to ignore the UTM fields or not\n * @param {function} setShouldAddUTMs - A function for setting the 'shouldAddUTMs' state\n * @param {string} UTMSource - The UTM source value state\n * @param {function} setUTMSource - A function for setting the UTM source value state\n * @param {string} UTMMedium - The UTM medium value state\n * @param {function} setUTMMedium - A function for setting the UTM medium value state\n * @param {string} UTMCampaign - The UTM campaign value state\n * @param {function} setUTMCampaign - A function for setting the UTM campaign value state\n * @param {string} UTMTerm - The UTM term value state\n * @param {function} setUTMTerm - A function for setting the UTM term value state\n * @param {string} UTMContent - The UTM content value state\n * @param {function} setUTMContent - A function for setting the UTM content value state\n * @param {string} urlsInputValidationState - The validation status of the urls\n * @param {function} setUrlInputValidationState - A function for setting the validation status of the url\n * @param {boolean} hasSavedInfluencer - Determins whether an influencer was already saved or not\n * @param {function} setIsInfluencerChanged - A function to perform whenever an influencer has changed\n * @param {string} urlSelectionType - The type of url selection for this short\n * @param {function} setUrlSelectionType - A function for setting the type of url selection for this short\n * @param {array} selectedProducts - The list of selected products for this short\n * @param {function} setSelectedProducts - A function for setting the list of selected products for this short\n * @param {array} selectedCollections - The list of selected collections for this short\n * @param {function} setSelectedCollections - A function for setting the list of selected collections for this short\n */\nexport default function EditMultilinkSection({\n mode,\n title = '',\n setTitle = () => { },\n urls = [],\n setURL = (urlIndex) => { },\n promocode = '',\n setPromocode = () => { },\n shouldAddUTMs = false,\n setShouldAddUTMs = () => { },\n utmParams = {},\n setUTMSource = () => { },\n setUTMMedium = () => { },\n setUTMCampaign = () => { },\n setUTMTerm = () => { },\n setUTMContent = () => { },\n urlsInputValidationState = [{}, {}],\n setUrlInputValidationState = (urlIndex) => { },\n urlSelectionTypes = [MULTILINK_SUBLINK_SELECTION_TYPE.CUSTOM, MULTILINK_SUBLINK_SELECTION_TYPE.CUSTOM],\n setUrlSelectionType = (urlIndex) => { },\n selectedProducts = [[], []],\n setSelectedProducts = (linkIndex) => { },\n selectedCollections = [[], []],\n setSelectedCollections = (linkIndex) => { },\n multilinkPropertiesModified = false,\n splittingValues = [100, 0],\n setSplittingValue = (linkIndex) => { },\n deviceOptions = ['ALL', 'ALL'],\n setDeviceOptions = (linkIndex) => { }\n}) {\n const { t } = useTranslation()\n const {\n userDetails,\n endEditing\n } = useUserDetailsContext()\n const history = useHistoryContext()\n\n const [multiSelectDialogsState, setMultiSelectDialogsState] = useState({\n productsDialogShown: false,\n collectionsDialogShown: false,\n index: 0,\n urlSelectionType: '',\n maxLimit: 1,\n tempSelectedProducts: [],\n })\n const [urlSelectionOptionDimension, setUrlSelectionOptionDimension] = useState([0, 0])\n const [dialogState, setDialogState] = useState({\n isOpen: false,\n title: '',\n message: '',\n leftButtonText: '',\n rightButtonText: '',\n rightButtonClickHandler: () => { }\n })\n\n const [isDeviceSelectOpen, setIsDeviceSelectOpen] = useState([false, false])\n\n const urlTypingTimeoutRefs = [useRef(null), useRef(null)]\n const urlSelectionOptionsRefs = [useRef(null), useRef(null)]\n\n function removeTimeout(timeout) {\n timeout && clearTimeout(timeout)\n }\n\n useEffect(() => {\n if (urlSelectionOptionsRefs[0]?.current || urlSelectionOptionsRefs[1]?.current) {\n setUrlSelectionOptionDimension(prev => [\n urlSelectionOptionsRefs[0]?.current ? `min(calc((${urlSelectionOptionsRefs[0]?.current?.clientWidth}px - 55px) / 4), 120px)` : prev[0],\n urlSelectionOptionsRefs[1]?.current ? `min(calc((${urlSelectionOptionsRefs[1]?.current?.clientWidth}px - 55px) / 4), 120px)` : prev[1],\n ])\n }\n }, [])\n\n useEffect(() => {\n urls.map((url, index) => {\n if (isCustomUrlTypeSelected(index)) {\n removeTimeout(urlTypingTimeoutRefs[index]?.current)\n if (!url) {\n setUrlInputValidationState(index, {\n status: INPUT_VALIDATION_INDICATIONS.NO_INDICATION,\n isValidating: false\n })\n } else {\n setUrlInputValidationState(prev => ({\n status: INPUT_VALIDATION_INDICATIONS.NO_INDICATION,\n isValidating: true\n }))\n urlTypingTimeoutRefs[index].current = setTimeout(() => {\n const urlToTest = url.startsWith('https://') || url.startsWith('http://') ? url : `https://${url}`\n const hasBusinessDomain = urlToTest.startsWith('https://' + userDetails?.domain) || urlToTest.startsWith('http://' + userDetails?.domain)\n if (hasBusinessDomain && urlToTest.match(URL_REGEX) != null) {\n setUrlInputValidationState(index, {\n status: INPUT_VALIDATION_INDICATIONS.VALID,\n isValidating: false\n })\n } else {\n setUrlInputValidationState(index, {\n status: INPUT_VALIDATION_INDICATIONS.INVALID,\n isValidating: false\n })\n }\n }, EDIT_SHORT_SECTION_URL_TEST_DELAY_MILLISECONDS)\n }\n }\n })\n }, [urls])\n\n function updateSplittingValue(index, e) {\n const intValue = parseInt(e.target.value)\n if (intValue <= 100 && intValue >= 0) {\n setSplittingValue(index, intValue)\n } else {\n setSplittingValue(index, Math.abs(100 - intValue) < intValue ? 100 : 0)\n }\n }\n\n function openAddProductsDialog(index, urlSelectionType) {\n setMultiSelectDialogsState(prev => ({\n ...prev,\n productsDialogShown: true,\n index,\n urlSelectionType,\n maxLimit: urlSelectionType === MULTILINK_SUBLINK_SELECTION_TYPE.LOOK ? 15 : 1,\n tempSelectedProducts: urlSelectionTypes[index] !== urlSelectionType ? [] : selectedProducts[index],\n }))\n }\n\n function closeAddProductDialog() {\n setMultiSelectDialogsState(prev => ({\n ...prev,\n productsDialogShown: false\n }))\n }\n\n function openAddCollectionsDialog(index) {\n setMultiSelectDialogsState(prev => ({\n ...prev,\n collectionsDialogShown: true,\n index,\n maxLimit: 1,\n }))\n }\n\n function closeAddCollectionsDialog() {\n setMultiSelectDialogsState(prev => ({\n ...prev,\n collectionsDialogShown: false\n }))\n }\n\n function selectCustomUrl(index) {\n setSelectedProducts(index, [])\n setSelectedCollections(index, [])\n setURL(index, '')\n setUrlSelectionType(index, MULTILINK_SUBLINK_SELECTION_TYPE.CUSTOM)\n }\n\n function setUserSelectedProducts(index, selectedProducts, urlSelectionType) {\n if (selectedProducts?.length > 0) {\n setSelectedCollections(index, [])\n setUrlSelectionType(index, urlSelectionType)\n setURL(index, selectedProducts[0]?.url)\n }\n setSelectedProducts(index, selectedProducts)\n }\n\n function setUserSelectedCollections(index, selectedCollections) {\n if (selectedCollections?.length > 0) {\n setSelectedProducts(index, [])\n setUrlSelectionType(index, MULTILINK_SUBLINK_SELECTION_TYPE.COLLECTION)\n setURL(index, selectedCollections[0]?.url)\n }\n setSelectedCollections(index, selectedCollections)\n }\n\n function isProductUrlTypeSelected(index) {\n return urlSelectionTypes[index] === MULTILINK_SUBLINK_SELECTION_TYPE.PRODUCT\n }\n\n function isCollectionUrlTypeSelected(index) {\n return urlSelectionTypes[index] === MULTILINK_SUBLINK_SELECTION_TYPE.COLLECTION\n }\n\n function isCustomUrlTypeSelected(index) {\n return urlSelectionTypes[index] === MULTILINK_SUBLINK_SELECTION_TYPE.CUSTOM\n }\n\n function showDiscardChangesDialog() {\n setDialogState({\n isOpen: true,\n handleDialogClose: closeDialog,\n title: t('LINK_VIEW_DISCARD_LINK_DETAILS_CONFIRMATION_DIALOG_TITLE'),\n message: t('LINK_VIEW_DISCARD_LINK_DETAILS_CONFIRMATION_DIALOG_MESSAGE'),\n leftButtonText: t('LINK_VIEW_DISCARD_LINK_DETAILS_CONFIRMATION_DIALOG_LEFT_BUTTON_TEXT'),\n rightButtonText: t('LINK_VIEW_DISCARD_LINK_DETAILS_CONFIRMATION_DIALOG_RIGHT_BUTTON_TEXT'),\n rightButtonClickHandler: () => {\n if (multilinkPropertiesModified) {\n history.goBackStepsNoPerform(3)\n endEditing()\n }\n setTimeout(goToPricingPlans, 200)\n }\n })\n }\n\n function closeDialog() {\n setDialogState(prev => ({\n ...prev,\n isOpen: false\n }))\n }\n\n function goToPricingPlans() {\n history.push(PRICING_PLANS_PAGE_URL)\n }\n \n\n function allowLinkTypeSelection(index, linkType) {\n if (mode !== VIEW_MODES.CREATE) {\n if (isProductUrlTypeSelected(index) || isCollectionUrlTypeSelected(index) || isCustomUrlTypeSelected(index)) {\n return linkType === MULTILINK_SUBLINK_TYPES.SHORT ? true : false\n }\n return linkType === MULTILINK_SUBLINK_TYPES.LOOK ? true : false\n }\n return true\n }\n\n return (\n <div className={isMobile ? 'mobile-edit-multilink-section-container' : 'edit-multilink-section-container'}>\n <div className=\"edit-multilink-section-header-container\">\n <div className=\"edit-multilink-section-header\">{t(\"EDIT_MULTILINK_SECTION_HEADER\")}</div>\n <div className=\"edit-multilink-section-subheader\">{t(\"EDIT_MULTILINK_SECTION_SUBHEADER\")}</div>\n </div>\n <div className={isMobile ? \"mobile-edit-multilink-section-title-container\" : \"edit-multilink-section-title-container\"}>\n <EditFieldSectionInput\n value={title}\n setValue={setTitle}\n isFramed={true}\n maxLength={EDIT_LINK_SECTION_LINK_DESCRIPTION_CHARACTER_LIMIT}\n title={t('EDIT_MULTILINK_TITLE_INPUT_TITLE')}\n isOptional={false}\n />\n </div>\n <div className='edit-multilink-sublink-sections-container'>\n {urls.length > 0 && <div className='edit-multilink-sublink-section'>\n <div className=\"edit-multilink-section-experience-header-container\">\n <div className=\"edit-multilink-section-experience-header\">{t(\"EDIT_MULTILINK_SECTION_EXPERIENCE_HEADER\", { index: \"A\" })}</div>\n <div className={isMobile ? \"mobile-edit-multilink-section-experience-options\" : \"edit-multilink-section-experience-options\"}>\n <div className=\"edit-multilink-section-device-select\" onClick={() => setIsDeviceSelectOpen(prev => [!prev[0], prev[1]])}>\n <div className=\"edit-multilink-section-experience-device-option-header\">{t(\"EDIT_MULTILINK_SECTION_DEVICE_HEADER\")}</div>\n <div className=\"edit-multilink-section-experience-device-option-box\">\n <PaydinSelect\n isOpen={isDeviceSelectOpen[0]}\n options={MULTILINK_SUBLINK_DEVICE_OPTIONS_VALUE_ELEMENT}\n optionState={deviceOptions[0]}\n onOptionClick={(option) => setDeviceOptions(0, option)}\n hideArrow={false}\n textColor='hsl(229, 23%, 72%)'\n width='200px'\n />\n </div>\n </div>\n <div className=\"edit-multilink-section-experience-search-container\">\n <div className=\"edit-multilink-section-experience-search-box-header\">{t(\"EDIT_MULTILINK_SECTION_TRAFFIC_HEADER\")}</div>\n <div className=\"edit-multilink-section-search-box\">\n <input className='edit-multilink-section-search-box-input' value={splittingValues[0]} pattern=\"[0-9]*\" onChange={(value) => updateSplittingValue(0, value)} placeholder={t('ADD_PRODUCTS_DIALOG_TOPBAR_SEARCH_BOX_PLACEHOLDER')} />\n <AiOutlinePercentage className='edit-multilink-section-search-box-image' />\n </div>\n </div>\n </div>\n </div>\n <div ref={urlSelectionOptionsRefs[0]} className=\"edit-multilink-section-url-selection-types\">\n <UrlSelectionType\n title={t(isMobile ? 'EDIT_MULTILINK_SECTION_URL_SELECTION_LOOK_TYPE_TITLE_MOBILE' : 'EDIT_MULTILINK_SECTION_URL_SELECTION_LOOK_TYPE_TITLE')}\n image={InstantStoresImage}\n isSelected={urlSelectionTypes[0] === MULTILINK_SUBLINK_SELECTION_TYPE.LOOK}\n imageClassName='edit-multilink-section-url-selection-type-image edit-multilink-section-url-selection-svg-type-image'\n onClick={() => openAddProductsDialog(0, MULTILINK_SUBLINK_SELECTION_TYPE.LOOK)}\n dimens={urlSelectionOptionDimension[0]}\n isDisabled={!allowLinkTypeSelection(0, MULTILINK_SUBLINK_TYPES.LOOK)}\n />\n <UrlSelectionType\n title={isProductUrlTypeSelected(0) ? selectedProducts[0][0]?.title : t('EDIT_MULTILINK_SECTION_URL_SELECTION_PRODUCT_TYPE_TITLE')}\n image={isProductUrlTypeSelected(0) ? selectedProducts[0][0]?.imageUrl : IoShirtOutline}\n isSelected={isProductUrlTypeSelected(0)}\n imageClassName='edit-multilink-section-url-selection-type-image'\n onClick={() => openAddProductsDialog(0, MULTILINK_SUBLINK_SELECTION_TYPE.PRODUCT)}\n dimens={urlSelectionOptionDimension[0]}\n hasChangedData={isProductUrlTypeSelected(0)}\n isDisabled={!allowLinkTypeSelection(0, MULTILINK_SUBLINK_TYPES.SHORT)}\n />\n <UrlSelectionType\n title={isCollectionUrlTypeSelected(0) ? selectedCollections[0][0]?.title : t('EDIT_MULTILINK_SECTION_URL_SELECTION_COLLECTION_TYPE_TITLE')}\n image={isCollectionUrlTypeSelected(0) ? selectedCollections[0][0]?.images?.medium?.src : ShortUrlSelectionCollectionTypeImage}\n isSelected={isCollectionUrlTypeSelected(0)}\n imageClassName='edit-multilink-section-url-selection-type-image edit-multilink-section-url-selection-svg-type-image'\n onClick={() => openAddCollectionsDialog(0)}\n dimens={urlSelectionOptionDimension[0]}\n hasChangedData={isCollectionUrlTypeSelected(0)}\n isDisabled={!allowLinkTypeSelection(0, MULTILINK_SUBLINK_TYPES.SHORT)}\n />\n <UrlSelectionType\n title={t(isMobile ? 'EDIT_MULTILINK_SECTION_URL_SELECTION_CUSTOM_TYPE_TITLE_MOBILE' : 'EDIT_MULTILINK_SECTION_URL_SELECTION_CUSTOM_TYPE_TITLE')}\n image={HiOutlineLink}\n isSelected={urlSelectionTypes[0] === MULTILINK_SUBLINK_SELECTION_TYPE.CUSTOM}\n imageClassName='edit-multilink-section-url-selection-type-image'\n onClick={() => selectCustomUrl(0)}\n dimens={urlSelectionOptionDimension[0]}\n isDisabled={!allowLinkTypeSelection(0, MULTILINK_SUBLINK_TYPES.SHORT)}\n />\n </div>\n <CollapsingElement expanded={urlSelectionTypes[0] === MULTILINK_SUBLINK_SELECTION_TYPE.CUSTOM}>\n <div className={isMobile ? \"mobile-edit-multilink-section-url-container\" : \"edit-multilink-section-url-container\"}>\n <EditFieldSectionInput\n value={urls[0]}\n setValue={(newValue) => setURL(0, newValue)}\n title={t('EDIT_SHORT_URL_INPUT_TITLE')}\n placeholder={t('EDIT_SHORT_URL_INPUT_PLACEHOLDER', { domain: userDetails?.domain })}\n hasValidation={true}\n validationStatus={urlsInputValidationState[0].status}\n validationErrorMessage={t('EDIT_SHORT_URL_ERROR_MESSAGE', { domain: `https://${userDetails?.domain}` })}\n isValidating={urlsInputValidationState[0].isValidating}\n titleStyles={{\n fontSize: isMobile ? '15px' : '17px',\n color: '#7f859e'\n }}\n inputStyles={{\n width: '100%',\n outline: 'none',\n border: '1px solid black',\n borderRadius: '25px',\n }}\n />\n </div>\n </CollapsingElement>\n <CollapsingElement expanded={urlSelectionTypes[0] === MULTILINK_SUBLINK_SELECTION_TYPE.LOOK}>\n <div className={\"edit-multilink-section-add-products-button-padding-container first\"}>\n <MultiSelectStatusButton\n title={t('EDIT_MULTILINK_SECTION_ADDED_PRODUCTS_BUTTON_TITLE')}\n status={t('EDIT_MULTILINK_SECTION_ADDED_PRODUCTS_BUTTON_QUANTITY', { count: selectedProducts[0]?.length })}\n onClick={() => openAddProductsDialog(0, MULTILINK_SUBLINK_SELECTION_TYPE.LOOK)}\n className={\"edit-multilink-section-add-products-button\"}\n />\n </div>\n </CollapsingElement>\n </div>}\n {urls.length > 1 && <div className='edit-multilink-sublink-section'>\n <div className=\"edit-multilink-section-experience-header-container\">\n <div className=\"edit-multilink-section-experience-header\">{t(\"EDIT_MULTILINK_SECTION_EXPERIENCE_HEADER\", { index: \"B\" })}</div>\n <div className={isMobile ? \"mobile-edit-multilink-section-experience-options\" : \"edit-multilink-section-experience-options\"}>\n <div className=\"edit-multilink-section-device-select\" onClick={() => setIsDeviceSelectOpen(prev => [prev[0], !prev[1]])}>\n <div className=\"edit-multilink-section-experience-device-option-header\">{t(\"EDIT_MULTILINK_SECTION_DEVICE_HEADER\")}</div>\n <div className=\"edit-multilink-section-experience-device-option-box\">\n <PaydinSelect\n isOpen={isDeviceSelectOpen[1]}\n options={MULTILINK_SUBLINK_DEVICE_OPTIONS_VALUE_ELEMENT}\n optionState={deviceOptions[1]}\n onOptionClick={(option) => setDeviceOptions(1, option)}\n hideArrow={false}\n textColor='hsl(229, 23%, 72%)'\n width='200px'\n />\n </div>\n </div>\n <div className=\"edit-multilink-section-experience-search-container\">\n <div className=\"edit-multilink-section-experience-search-box-header\">{t(\"EDIT_MULTILINK_SECTION_TRAFFIC_HEADER\")}</div>\n <div className=\"edit-multilink-section-search-box\">\n <input className='edit-multilink-section-search-box-input' value={splittingValues[1]} pattern=\"[0-9]*\" onChange={(value) => updateSplittingValue(1, value)} placeholder={t('ADD_PRODUCTS_DIALOG_TOPBAR_SEARCH_BOX_PLACEHOLDER')} />\n <AiOutlinePercentage className='edit-multilink-section-search-box-image' />\n </div>\n </div>\n </div>\n </div>\n <div ref={urlSelectionOptionsRefs[1]} className=\"edit-multilink-section-url-selection-types\">\n <UrlSelectionType\n title={t(isMobile ? 'EDIT_MULTILINK_SECTION_URL_SELECTION_LOOK_TYPE_TITLE_MOBILE' : 'EDIT_MULTILINK_SECTION_URL_SELECTION_LOOK_TYPE_TITLE')}\n image={InstantStoresImage}\n isSelected={urlSelectionTypes[1] === MULTILINK_SUBLINK_SELECTION_TYPE.LOOK}\n imageClassName='edit-multilink-section-url-selection-type-image edit-multilink-section-url-selection-svg-type-image'\n onClick={() => openAddProductsDialog(1, MULTILINK_SUBLINK_SELECTION_TYPE.LOOK)}\n dimens={urlSelectionOptionDimension[1]}\n isDisabled={!allowLinkTypeSelection(1, MULTILINK_SUBLINK_TYPES.LOOK)}\n />\n <UrlSelectionType\n title={isProductUrlTypeSelected(1) ? selectedProducts[1][0]?.title : t('EDIT_MULTILINK_SECTION_URL_SELECTION_PRODUCT_TYPE_TITLE')}\n image={isProductUrlTypeSelected(1) ? selectedProducts[1][0]?.imageUrl : IoShirtOutline}\n isSelected={isProductUrlTypeSelected(1)}\n imageClassName='edit-multilink-section-url-selection-type-image'\n onClick={() => openAddProductsDialog(1, MULTILINK_SUBLINK_SELECTION_TYPE.PRODUCT)}\n dimens={urlSelectionOptionDimension[1]}\n hasChangedData={isProductUrlTypeSelected(1)}\n isDisabled={!allowLinkTypeSelection(1, MULTILINK_SUBLINK_TYPES.SHORT)}\n />\n <UrlSelectionType\n title={isCollectionUrlTypeSelected(1) ? selectedCollections[1][0]?.title : t('EDIT_MULTILINK_SECTION_URL_SELECTION_COLLECTION_TYPE_TITLE')}\n image={isCollectionUrlTypeSelected(1) ? selectedCollections[1][0]?.images?.medium?.src : ShortUrlSelectionCollectionTypeImage}\n isSelected={isCollectionUrlTypeSelected(1)}\n imageClassName='edit-multilink-section-url-selection-type-image edit-multilink-section-url-selection-svg-type-image'\n onClick={() => openAddCollectionsDialog(1)}\n dimens={urlSelectionOptionDimension[1]}\n hasChangedData={isCollectionUrlTypeSelected(1)}\n isDisabled={!allowLinkTypeSelection(1, MULTILINK_SUBLINK_TYPES.SHORT)}\n />\n <UrlSelectionType\n title={t(isMobile ? 'EDIT_MULTILINK_SECTION_URL_SELECTION_CUSTOM_TYPE_TITLE_MOBILE' : 'EDIT_MULTILINK_SECTION_URL_SELECTION_CUSTOM_TYPE_TITLE')}\n image={HiOutlineLink}\n isSelected={urlSelectionTypes[1] === MULTILINK_SUBLINK_SELECTION_TYPE.CUSTOM}\n imageClassName='edit-multilink-section-url-selection-type-image'\n onClick={() => selectCustomUrl(1)}\n dimens={urlSelectionOptionDimension[1]}\n isDisabled={!allowLinkTypeSelection(1, MULTILINK_SUBLINK_TYPES.SHORT)}\n />\n </div>\n <CollapsingElement expanded={urlSelectionTypes[1] === MULTILINK_SUBLINK_SELECTION_TYPE.CUSTOM}>\n <div className={isMobile ? \"mobile-edit-multilink-section-url-container second\" : \"edit-multilink-section-url-container second\"}>\n <EditFieldSectionInput\n value={urls[1]}\n setValue={(newValue) => setURL(1, newValue)}\n title={t('EDIT_SHORT_URL_INPUT_TITLE')}\n placeholder={t('EDIT_SHORT_URL_INPUT_PLACEHOLDER', { domain: userDetails?.domain })}\n hasValidation={true}\n validationStatus={urlsInputValidationState[1].status}\n validationErrorMessage={t('EDIT_SHORT_URL_ERROR_MESSAGE', { domain: `https://${userDetails?.domain}` })}\n isValidating={urlsInputValidationState[1].isValidating}\n titleStyles={{\n fontSize: isMobile ? '15px' : '17px',\n color: '#7f859e'\n }}\n inputStyles={{\n width: '100%',\n outline: 'none',\n border: '1px solid black',\n borderRadius: '25px',\n }}\n />\n </div>\n </CollapsingElement>\n <CollapsingElement expanded={urlSelectionTypes[1] === MULTILINK_SUBLINK_SELECTION_TYPE.LOOK}>\n <div className={\"edit-multilink-section-add-products-button-padding-container second\"}>\n <MultiSelectStatusButton\n title={t('EDIT_MULTILINK_SECTION_ADDED_PRODUCTS_BUTTON_TITLE')}\n status={t('EDIT_MULTILINK_SECTION_ADDED_PRODUCTS_BUTTON_QUANTITY', { count: selectedProducts[1]?.length })}\n onClick={() => openAddProductsDialog(1, MULTILINK_SUBLINK_SELECTION_TYPE.LOOK)}\n className={\"edit-multilink-section-add-products-button\"}\n />\n </div>\n </CollapsingElement>\n </div>}\n </div>\n <div className={isMobile ? \"mobile-edit-multilink-section-promocode-container\" : \"edit-multilink-section-promocode-container\"}>\n <EditFieldSectionInput\n title={t('EDIT_SHORT_PROMOCODE_INPUT_TITLE')}\n value={promocode}\n setValue={setPromocode}\n placeholder={t('EDIT_SHORT_PROMOCODE_INPUT_PLACEHOLDER')}\n maxLength={EDIT_SHORT_PROMOCODE_INPUT_MAX_LENGTH}\n isOptional={true}\n id=\"promocode\"\n />\n </div>\n <div className={isMobile ? \"mobile-edit-multilink-section-utm-container\" : \"edit-multilink-section-utm-container\"}>\n {\n userDetails?.isAdmin && <UTMForm\n inlinePadding='20px'\n shouldAddUTMs={shouldAddUTMs}\n setShouldAddUTMs={setShouldAddUTMs}\n UTMSource={utmParams.UTMSource}\n setUTMSource={setUTMSource}\n UTMMedium={utmParams.UTMMedium}\n setUTMMedium={setUTMMedium}\n UTMCampaign={utmParams.UTMCampaign}\n setUTMCampaign={setUTMCampaign}\n UTMTerm={utmParams.UTMTerm}\n setUTMTerm={setUTMTerm}\n UTMContent={utmParams.UTMContent}\n setUTMContent={setUTMContent}\n />\n }\n </div>\n <AddProductsDialog\n isDialogOpen={multiSelectDialogsState.productsDialogShown}\n handleDialogClose={closeAddProductDialog}\n selectedProducts={multiSelectDialogsState.tempSelectedProducts}\n setSelectedProducts={(products) => setUserSelectedProducts(multiSelectDialogsState.index, products, multiSelectDialogsState.urlSelectionType)}\n selectMaxLimit={multiSelectDialogsState.maxLimit}\n selectMinLimit={1}\n searchResultFilter={products => products.filter(product => product?.url !== '')}\n resetSelectedOnFinish={true}\n allowColorOptionSelect={multiSelectDialogsState.maxLimit > 1} // means instantStore\n />\n <AddCollectionsDialog\n isDialogOpen={multiSelectDialogsState.collectionsDialogShown}\n handleDialogClose={closeAddCollectionsDialog}\n selectedCollections={selectedCollections[multiSelectDialogsState.index]}\n setSelectedCollections={(collections) => setUserSelectedCollections(multiSelectDialogsState.index, collections)}\n selectMaxLimit={1}\n selectMinLimit={1}\n searchResultFilter={collections => collections.filter(collection => collection?.url !== '')}\n />\n <PaydinDialog\n isDialogOpen={dialogState.isOpen}\n handleDialogClose={dialogState.handleDialogClose}\n title={dialogState.title}\n message={dialogState.message}\n closeOnRightClick={false}\n rightButtonType={PAYDIN_DIALOG_BUTTON_TYPES.SECONDARY}\n leftButtonText={dialogState.leftButtonText}\n rightButtonText={dialogState.rightButtonText}\n isLeftButtonWithLoader={false}\n isRightButtonWithLoader={false}\n onRightButtonClick={dialogState.rightButtonClickHandler}\n />\n </div>\n )\n}","import React, { useEffect, useState } from 'react'\nimport './MultilinkView.css'\nimport {\n INPUT_VALIDATION_INDICATIONS,\n VIEW_MODES,\n CREATE_LINK_REDIRECT_TO_PAGE_DELAY,\n SEPERATE_GO_BACK_FOR_SAFARY_DELAY,\n MULTILINK_SUBLINK_SELECTION_TYPE,\n MULTILINK_SUBLINK_TYPES,\n} from 'constants/general.constants'\nimport { isMobile } from 'utils/deviceUtils'\nimport { useTranslation } from 'react-i18next'\nimport PaydinDialog, { PAYDIN_DIALOG_BUTTON_TYPES } from 'dialogs/PaydinDialog/PaydinDialog'\nimport { useHistoryContext } from 'contexts/History'\nimport { CreateMultilinkDetailsAPI, GetMultilinkDetailsAPI, UpdateMultilinkDetailsAPI } from 'api/links/links'\nimport { useGeneralDataContext, useUserDetailsContext } from 'contexts/User'\nimport { MULTILINKS_PAGE_URL } from 'constants/routes.constants'\nimport { logger } from 'services/CloudLogger'\nimport { isInputValueValid } from 'services/SystemService'\nimport ContentDialogTopbar from 'components/ContentDialogTopbar/ContentDialogTopbar'\nimport LoaderButton from 'components/LoaderButton/LoaderButton'\nimport { extractCollectionData, extractMultilinkPreviewData, extractProductData } from 'utils/dataUtils'\nimport ContentDialogLoader from 'components/ContentDialogLoader/ContentDialogLoader'\nimport { isObjectEmpty } from 'utils/utils'\nimport EditMultilinkSection from 'components/EditMultilinkSection/EditMultilinkSection'\n\n/**\n * epresents a portion of the screen that displays the multilink's edit/create panel.\n * @param {string} mode - The mode of this view, it determins whether it is creating or editing a multilink, accepts VIEW_MODES.CREATE or VIEW_MODES.EDIT\n */\nexport default function MultilinkView({\n mode,\n data\n}) {\n const { t } = useTranslation()\n const history = useHistoryContext()\n const {\n userDetails,\n // isFreeUser,\n beginEditing,\n endEditing\n } = useUserDetailsContext()\n const {\n showApprovalMessage,\n setObjectToSave,\n setFinishedCreatingObject,\n setFinishedUpdatingObject\n } = useGeneralDataContext()\n\n const [isLoadingMultilink, setIsLoadingMultilink] = useState(true)\n const [isButtonProcessing, setIsButtonProcessing] = useState(false)\n const [isAbleToSaveMultilink, setIsAbleToSaveMultilink] = useState(false)\n const [multilinkPropertiesModified, setMultilinkPropertiesModified] = useState(false)\n const [title, setTitle] = useState('')\n const [urls, setUrls] = useState(['', ''])\n const [splittingValues, setSplittingValues] = useState([50,50])\n const [deviceOptions, setDeviceOptions] = useState(['ALL','ALL'])\n const [promocode, setPromocode] = useState('')\n const [shouldAddUTMs, setShouldAddUTMs] = useState(false)\n const [utmParams, setUtmParams] = useState({\n UTMSource: '',\n UTMMedium: '',\n UTMCampaign: '',\n UTMTerm: '',\n UTMContent: ''\n })\n const [urlsInputValidationState, setUrlsInputValidationState] = useState([{\n status: INPUT_VALIDATION_INDICATIONS.NO_INDICATION,\n isValidating: false\n }, {\n status: INPUT_VALIDATION_INDICATIONS.NO_INDICATION,\n isValidating: false\n }])\n const [multilinkData, setMultilinkData] = useState(data?.multilinkData)\n\n\n const [dialogState, setDialogState] = useState({\n isOpen: false,\n handleDialogClose: closeDialog,\n title: '',\n message: '',\n leftButtonText: '',\n rightButtonText: '',\n rightButtonClickHandler: () => { },\n leftButtonClickHandler: () => { }\n })\n const [urlSelectionTypes, setUrlSelectionTypes] = useState(['',''])\n const [selectedProducts, setSelectedProducts] = useState([[],[]])\n const [selectedCollections, setSelectedCollections] = useState([[],[]])\n\n useEffect(() => {\n loadMultilinkDetails()\n }, [])\n\n useEffect(() => {\n if (multilinkPropertiesModified) {\n beginEditing()\n addDiscardChangesDialogBackHandler()\n } else {\n endEditing()\n }\n }, [multilinkPropertiesModified])\n\n useEffect(() => {\n setIsAbleToSaveMultilink(\n multilinkPropertiesModified && title &&\n urls.every((url, index) => (\n isCustomUrlTypeSelected(index) && \n urlsInputValidationState[index].status === INPUT_VALIDATION_INDICATIONS.VALID) || \n isProductUrlTypeSelected(index) || \n isCollectionUrlTypeSelected(index) || \n isInstantStoreTypeSelected(index)\n )\n )\n }, [multilinkPropertiesModified, urlsInputValidationState, urlSelectionTypes, title])\n\n function populateMultilinkData(multilinkData) {\n const utmParams = {\n UTMSource: multilinkData?.utmParams?.UTMSource ?? (multilinkData?.linksOptions && multilinkData?.linksOptions?.length > 0 ? multilinkData?.linksOptions[0]?.linkData?.utmParams?.UTMSource : (multilinkData?.links_options && multilinkData?.links_options?.length > 0 ? (multilinkData?.links_options[0]?.link_data?.utm_params?.utm_source ?? '') : '')),\n UTMMedium: multilinkData?.utmParams?.UTMMedium ?? (multilinkData?.linksOptions && multilinkData?.linksOptions?.length > 0 ? multilinkData?.linksOptions[0]?.linkData?.utmParams?.UTMMedium : (multilinkData?.links_options && multilinkData?.links_options?.length > 0 ? (multilinkData?.links_options[0]?.link_data?.utm_params?.utm_medium ?? '') : '')),\n UTMCampaign: multilinkData?.utmParams?.UTMCampaign ?? (multilinkData?.linksOptions && multilinkData?.linksOptions?.length > 0 ? multilinkData?.linksOptions[0]?.linkData?.utmParams?.UTMCampaign : (multilinkData?.links_options && multilinkData?.links_options?.length > 0 ? (multilinkData?.links_options[0]?.link_data?.utm_params?.utm_campaign ?? '') : '')),\n UTMTerm: multilinkData?.utmParams?.UTMTerm ?? (multilinkData?.linksOptions && multilinkData?.linksOptions?.length > 0 ? multilinkData?.linksOptions[0]?.linkData?.utmParams?.UTMTerm : (multilinkData?.links_options && multilinkData?.links_options?.length > 0 ? (multilinkData?.links_options[0]?.link_data?.utm_params?.utm_term ?? '') : '')),\n UTMContent: multilinkData?.utmParams?.UTMContent ?? (multilinkData?.linksOptions && multilinkData?.linksOptions?.length > 0 ? multilinkData?.linksOptions[0]?.linkData?.utmParams?.UTMContent : (multilinkData?.links_options && multilinkData?.links_options?.length > 0 ? (multilinkData?.links_options[0]?.link_data?.utm_params?.utm_content ?? '') : '')),\n }\n const promocode = (multilinkData?.promocode?.code ?? multilinkData?.promocode) ?? (multilinkData?.linksOptions && multilinkData?.linksOptions?.length > 0 ? (multilinkData?.linksOptions[0]?.linkData?.promocode?.code ?? (multilinkData?.linksOptions[0]?.linkData?.promocode ?? '')) : (multilinkData?.links_options && multilinkData?.links_options?.length > 0 ? (multilinkData?.links_options[0]?.link_data?.promocode?.code ?? (multilinkData?.links_options[0]?.link_data?.promocode ?? '')) : ''))\n\n const linksOptions = (multilinkData?.linksOptions ?? (multilinkData?.links_options ?? [])).map((linkOption, index) => {\n const linkProductsSelectedOptions = linkOption?.linkData?.selectedOptions ?? linkOption?.link_data?.selected_options\n const linkProducts = (linkOption?.linkData?.products ?? linkOption?.link_data?.products?.map(product => {\n if (Object.keys(linkProductsSelectedOptions).includes(product?.inventory_id)) {\n return extractProductData(product, linkProductsSelectedOptions[product?.inventory_id])\n } else {\n return extractProductData(product)\n }\n })) ?? []\n return {\n linkData: {\n shoppingRedirectUrl: linkOption?.linkData?.shoppingRedirectUrl ?? (linkOption?.link_data?.shopping_redirect_url ?? ''),\n description: linkOption.linkData?.description ?? (linkOption.link_data?.description ?? ''),\n views: linkOption?.linkData?.views ?? (linkOption?.link_data?.visits ?? 0),\n checkouts: linkOption?.linkData?.checkouts ?? (linkOption?.link_data?.checkouts ?? 0),\n revenue: linkOption?.linkData?.revenue ?? (linkOption?.link_data?.revenue ?? 0),\n linkType: linkOption?.linkData?.linkType ?? (linkOption?.link_data?.link_type ?? ''),\n urlType: linkOption?.linkData?.urlType ?? (linkOption?.link_data?.url_type ?? ''),\n linkDefaultImage: linkOption?.linkData?.linkDefaultImage ?? (linkOption?.link_data?.link_default_image ?? ''),\n products: linkProducts,\n collections: (linkOption?.linkData?.collections ?? (linkOption?.link_data?.collections ?? [])).map(collection => extractCollectionData(collection)),\n selectedOptions: linkProductsSelectedOptions,\n },\n value: linkOption?.value ?? 0,\n linkId: linkOption?.linkData?.linkId ?? (linkOption?.link_data?.link_id ?? ''),\n deviceOption: linkOption.deviceOption ?? (linkOption?.device_option ?? 'ALL'),\n }\n })\n\n setMultilinkData({\n multilinkId: multilinkData?.multilinkId ?? (multilinkData?.multilink_id ?? ''),\n title: multilinkData.title ?? '',\n currency: multilinkData?.currency ?? (multilinkData?.link_analytics?.currency ?? userDetails?.businessCurrency),\n promocode: promocode,\n title: multilinkData?.title ?? \"\",\n linksOptions,\n utmParams\n })\n\n \n setUrlSelectionTypes(getUrlSelectionTypes(linksOptions))\n setSelectedProducts(linksOptions?.map(linkOption => linkOption?.linkData?.products))\n setSelectedCollections(linksOptions?.map(linkOption => linkOption?.linkData?.collections))\n setPromocode(promocode)\n setTitle(multilinkData?.title ?? '')\n setUrls(linksOptions?.map(linkOption => linkOption?.linkData?.shoppingRedirectUrl))\n setDeviceOptions(linksOptions?.map(linkOption => linkOption?.deviceOption))\n setSplittingValues(linksOptions?.map(linkOption => linkOption?.value))\n setUtmParams(utmParams)\n setShouldAddUTMs(hasUtmParams(utmParams))\n setIsLoadingMultilink(false)\n }\n\n function loadMultilinkDetails() {\n if (mode !== VIEW_MODES.CREATE) {\n if (data?.multilinkData && !isObjectEmpty(data?.multilinkData)) {\n populateMultilinkData(data?.multilinkData)\n }\n GetMultilinkDetailsAPI(data?.multilinkId)\n .then(multilinkData => {\n populateMultilinkData(multilinkData)\n })\n .catch(error => {\n console.log(error)\n history.push(MULTILINKS_PAGE_URL)\n })\n } else {\n const utmParams = {\n UTMSource: userDetails?.settings?.utmParams?.UTMSource ?? '',\n UTMMedium: userDetails?.settings?.utmParams?.UTMMedium ?? '',\n UTMCampaign: userDetails?.settings?.utmParams?.UTMCampaign ?? '',\n UTMTerm: userDetails?.settings?.utmParams?.UTMTerm ?? '',\n UTMContent: userDetails?.settings?.utmParams?.UTMContent ?? '',\n }\n setUtmParams(utmParams)\n setShouldAddUTMs(hasUtmParams(utmParams))\n setIsLoadingMultilink(false)\n }\n }\n\n function getUrlSelectionTypes(linksOptions) {\n return linksOptions?.map(linkOption => {\n if (linkOption?.linkData?.linkType == MULTILINK_SUBLINK_TYPES.SHORT) {\n if (linkOption?.linkData?.products && linkOption?.linkData?.products?.length > 0) {\n return MULTILINK_SUBLINK_SELECTION_TYPE.PRODUCT\n }\n \n if (linkOption?.linkData?.collections && linkOption?.linkData?.collections?.length > 0) {\n return MULTILINK_SUBLINK_SELECTION_TYPE.COLLECTION\n }\n \n return MULTILINK_SUBLINK_SELECTION_TYPE.CUSTOM\n }\n return MULTILINK_SUBLINK_SELECTION_TYPE.LOOK\n })\n }\n\n function hasUtmParams(utmParams) {\n return (\n (![null, undefined].includes(utmParams?.UTMSource) && utmParams?.UTMSource?.length > 0) ||\n (![null, undefined].includes(utmParams?.UTMMedium) && utmParams?.UTMMedium?.length > 0) ||\n (![null, undefined].includes(utmParams?.UTMCampaign) && utmParams?.UTMCampaign?.length > 0) ||\n (![null, undefined].includes(utmParams?.UTMTerm) && utmParams?.UTMTerm?.length > 0) ||\n (![null, undefined].includes(utmParams?.UTMContent) && utmParams?.UTMContent?.length > 0)\n )\n }\n\n function getTitle() {\n switch (mode) {\n case VIEW_MODES.CREATE: return t('MULTILINKS_VIEW_CREATE_NEW_MULTILINKS_TITLE')\n case VIEW_MODES.EDIT: return t('MULTILINKS_VIEW_EDIT_MULTILINKS_TITLE')\n default: return t('MULTILINKS_VIEW_PREVIEW_MULTILINKS_TITLE')\n }\n }\n function getLinkImage(index) {\n if (isProductUrlTypeSelected(index)) {\n return selectedProducts[index][0]?.imageUrl\n }\n\n if (isCollectionUrlTypeSelected(index)) {\n return selectedCollections[index][0]?.images?.medium?.src\n }\n\n return null\n }\n\n function setMultilinkTitle(title) {\n setMultilinkPropertiesModified(true)\n setTitle(title)\n }\n\n function setMultilinkPromocode(promocode) {\n setMultilinkPropertiesModified(true)\n setPromocode(promocode)\n }\n\n function setMultilinkURL(index, url) {\n setMultilinkPropertiesModified(true)\n setUrls(prev => prev.map((currentUrl, urlIndex) => index === urlIndex ? url : currentUrl))\n }\n\n function setUrlInputValidationState(newStateIndex, urlInputValidationState) {\n setUrlsInputValidationState(prev => prev.map((currentInputValidationState, index) => index === newStateIndex ? urlInputValidationState : currentInputValidationState))\n }\n\n function setUrlSelectionType(index, newType) {\n setUrlSelectionTypes(prev => prev.map((currentUrlType, urlIndex) => index === urlIndex ? newType : currentUrlType))\n }\n\n function setMultilinkLinkSelectedProducts(index, products) {\n setSelectedProducts(prev => prev.map((currentProducts, linkIndex) => linkIndex == index ? products : currentProducts))\n }\n\n\n function setMultilinkLinkSelectedCollections(index, collections) {\n setSelectedCollections(prev => prev.map((currentCollections, linkIndex) => linkIndex == index ? collections : currentCollections))\n }\n\n\n function setMultilinkDeviceOptions(index, deviceOption) {\n setMultilinkPropertiesModified(true)\n setDeviceOptions(prev => prev.map((currentDeviceOption, linkIndex) => linkIndex == index ? deviceOption : currentDeviceOption))\n }\n\n\n function setMultilinkSplittingValue(index, value) {\n setMultilinkPropertiesModified(true)\n setSplittingValues(prev => {\n let newValues = prev.map((currentValue, linkIndex) => linkIndex == index ? value : currentValue)\n const valuesSum = newValues.reduce((accumulator, currentValue) => accumulator + currentValue ,0)\n if (valuesSum !== 100) {\n let delta = 100 - valuesSum\n newValues = newValues?.map((newValue, valueIndex) => {\n if (valueIndex != index) {\n let oldValue = newValue\n newValue = Math.max(0, Math.min(100, newValue + delta))\n delta = delta - newValue + oldValue\n }\n return newValue\n })\n }\n return newValues\n })\n }\n\n function setMultilinkUTMSource(UTMValue) {\n if (isInputValueValid(UTMValue)) {\n setMultilinkPropertiesModified(true)\n setUtmParams(prev => ({\n ...prev,\n UTMSource: UTMValue\n }))\n }\n }\n\n function setMultilinkUTMMedium(UTMValue) {\n if (isInputValueValid(UTMValue)) {\n setMultilinkPropertiesModified(true)\n setUtmParams(prev => ({\n ...prev,\n UTMMedium: UTMValue\n }))\n }\n }\n\n function setMultilinkUTMCampaign(UTMValue) {\n if (isInputValueValid(UTMValue)) {\n setMultilinkPropertiesModified(true)\n setUtmParams(prev => ({\n ...prev,\n UTMCampaign: UTMValue\n }))\n }\n }\n\n function setMultilinkUTMTerm(UTMValue) {\n if (isInputValueValid(UTMValue)) {\n setMultilinkPropertiesModified(true)\n setUtmParams(prev => ({\n ...prev,\n UTMTerm: UTMValue\n }))\n }\n }\n\n function setMultilinkUTMContent(UTMValue) {\n if (isInputValueValid(UTMValue)) {\n setMultilinkPropertiesModified(true)\n setUtmParams(prev => ({\n ...prev,\n UTMContent: UTMValue\n }))\n }\n }\n\n function prepareMultilinkLinkUrl(url) {\n if (!url) {\n url = `${t('EDIT_LINK_SECTION_SHOPPING_URL_INPUT_PREFIX')}${userDetails?.domain}`\n return url\n }\n if (!url.startsWith('https://') && !url.startsWith('http://')) {\n return 'https://' + url\n }\n\n return url\n }\n\n async function save() {\n setIsButtonProcessing(true)\n const promocodeToSave = {\n code: promocode\n }\n // const urlToSave = prepareMultilinkUrl(url)\n const linksOptions = urls?.map((url, index) => {\n const selectedProductsOptions = selectedProducts[index]?.reduce((acc, selectedProduct) => {\n if (Object.keys(selectedProduct?.selectedOptions).length > 0)\n return { ...acc, [selectedProduct.id]: selectedProduct?.selectedOptions}\n return acc\n }, {})\n return {\n value: splittingValues[index],\n linkId: multilinkData?.linksOptions[index]?.linkId,\n linkData: {\n images: getLinkImage(index) ? [getLinkImage(index)] : [],\n inventoryIds: selectedProducts[index]?.map(product => product?.id),\n collectionIds: selectedCollections[index]?.map(collection => collection?.id),\n shoppingRedirectUrl: prepareMultilinkLinkUrl(url),\n linkType: getLinkType(index),\n selectedOptions: selectedProductsOptions,\n },\n deviceOption: deviceOptions[index]\n }\n })\n\n if (mode === VIEW_MODES.CREATE) {\n CreateMultilinkDetailsAPI(userDetails.businessId, title, \"PERCENTAGE\", promocodeToSave, utmParams, linksOptions)\n .then(newMultilink => {\n setObjectToSave(extractMultilinkPreviewData(newMultilink))\n setMultilinkPropertiesModified(false)\n history.goBackStepsNoPerform()\n setTimeout(() => {\n history.goBack()\n }, SEPERATE_GO_BACK_FOR_SAFARY_DELAY)\n setTimeout(() => {\n if (window.location.pathname !== MULTILINKS_PAGE_URL) {\n history.replace(MULTILINKS_PAGE_URL)\n } else {\n setFinishedCreatingObject(true)\n setTimeout(() => {\n setFinishedCreatingObject(false)\n }, 200)\n }\n }, CREATE_LINK_REDIRECT_TO_PAGE_DELAY)\n }).catch((error) => {\n logger.error(`Error - edit multilink failure - ${error}`)\n showSaveDetailsErrorMessage()\n setIsButtonProcessing(false)\n })\n } else {\n UpdateMultilinkDetailsAPI(userDetails.businessId, data?.multilinkId, title, \"PERCENTAGE\", promocodeToSave, utmParams, linksOptions)\n .then(updatedMultilink => {\n setObjectToSave(extractMultilinkPreviewData(updatedMultilink))\n setIsButtonProcessing(false)\n showApprovalMessage(t('EDIT_MULTILINK_SECTION_CHANGES_SAVED_APPROVAL_MESSAGE_TEXT'))\n setMultilinkPropertiesModified(false)\n history.goBackStepsNoPerform()\n setFinishedUpdatingObject(true)\n setTimeout(() => {\n setFinishedUpdatingObject(false)\n }, 200)\n }).catch((error) => {\n logger.error(`Error - edit multilink failure - ${error}`)\n showSaveDetailsErrorMessage()\n setIsButtonProcessing(false)\n })\n }\n }\n\n function closeDialog() {\n setDialogState(prev => ({\n ...prev,\n isOpen: false\n }))\n }\n\n function showSaveDetailsErrorMessage() {\n setDialogState(prev => ({\n ...prev,\n isOpen: true,\n title: t('EDIT_LINK_PAGE_SAVE_DETAILS_ERROR_DIALOG_TITLE'),\n leftButtonText: t('EDIT_LINK_PAGE_SAVE_DETAILS_ERROR_DIALOG_RIGHT_BUTTON_TEXT'),\n rightButtonText: null,\n rightButtonClickHandler: () => { },\n isRightButtonWithLoader: false\n }))\n }\n\n function addDiscardChangesDialogBackHandler() {\n setTimeout(() => {\n history.addBackHandler(() => {\n setDialogState(prev => ({\n ...prev,\n isOpen: true,\n title: t('EDIT_INFLUENCER_SECTION_DISCARD_CHANGES_DIALOG_TITLE'),\n message: t('EDIT_INFLUENCER_SECTION_DISCARD_CHANGES_DIALOG_MESSAGE'),\n leftButtonText: t('EDIT_INFLUENCER_SECTION_DISCARD_CHANGES_DIALOG_LEFT_BUTTON_TEXT'),\n rightButtonText: t('EDIT_INFLUENCER_SECTION_DISCARD_CHANGES_DIALOG_RIGHT_BUTTON_TEXT'),\n leftButtonClickHandler: addDiscardChangesDialogBackHandler,\n rightButtonClickHandler: () => {\n endEditing()\n history.goBack()\n },\n isRightButtonWithLoader: false\n }))\n })\n }, 300)\n }\n\n function goBack() {\n history.goBack()\n }\n\n function renderTopbarSaveButton() {\n switch (mode) {\n case VIEW_MODES.CREATE: return t('MULTILINKS_VIEW_TOPBAR_CREATE_BUTTON_TEXT')\n case VIEW_MODES.EDIT: return t('MULTILINKS_VIEW_TOPBAR_SAVE_BUTTON_TEXT')\n default: return ''\n }\n }\n\n function resetUTMParams() {\n setUtmParams({\n UTMSource: '',\n UTMMedium: '',\n UTMCampaign: '',\n UTMTerm: '',\n UTMContent: ''\n })\n setMultilinkPropertiesModified(true)\n }\n\n function setShouldAddUTMParams(value) {\n if (!value) {\n resetUTMParams()\n }\n\n setShouldAddUTMs(value)\n }\n\n function isProductUrlTypeSelected(index) {\n return urlSelectionTypes[index] === MULTILINK_SUBLINK_SELECTION_TYPE.PRODUCT\n }\n\n function isCollectionUrlTypeSelected(index) {\n return urlSelectionTypes[index] === MULTILINK_SUBLINK_SELECTION_TYPE.COLLECTION\n }\n\n function isCustomUrlTypeSelected(index) {\n return urlSelectionTypes[index] === MULTILINK_SUBLINK_SELECTION_TYPE.CUSTOM\n }\n\n function isInstantStoreTypeSelected(index) {\n return urlSelectionTypes[index] === MULTILINK_SUBLINK_SELECTION_TYPE.LOOK\n }\n\n function getLinkType(index) {\n if (isProductUrlTypeSelected(index) || isCollectionUrlTypeSelected(index) || isCustomUrlTypeSelected(index)) {\n return MULTILINK_SUBLINK_TYPES.SHORT\n } else {\n return MULTILINK_SUBLINK_TYPES.LOOK\n }\n }\n\n function renderContent() {\n return <EditMultilinkSection\n mode={mode}\n title={title}\n setTitle={setMultilinkTitle}\n urls={urls}\n setURL={setMultilinkURL}\n promocode={promocode}\n setPromocode={setMultilinkPromocode}\n shouldAddUTMs={shouldAddUTMs}\n setShouldAddUTMs={setShouldAddUTMParams}\n utmParams={utmParams}\n setUTMSource={setMultilinkUTMSource}\n setUTMMedium={setMultilinkUTMMedium}\n setUTMCampaign={setMultilinkUTMCampaign}\n setUTMTerm={setMultilinkUTMTerm}\n setUTMContent={setMultilinkUTMContent}\n urlsInputValidationState={urlsInputValidationState}\n setUrlInputValidationState={setUrlInputValidationState}\n urlSelectionTypes={urlSelectionTypes}\n setUrlSelectionType={setUrlSelectionType}\n selectedProducts={selectedProducts}\n setSelectedProducts={setMultilinkLinkSelectedProducts}\n selectedCollections={selectedCollections}\n setSelectedCollections={setMultilinkLinkSelectedCollections}\n multilinkPropertiesModified={multilinkPropertiesModified}\n splittingValues={splittingValues}\n setSplittingValue={setMultilinkSplittingValue}\n deviceOptions={deviceOptions}\n setDeviceOptions={setMultilinkDeviceOptions}\n />\n }\n\n return (\n <div className={isMobile ? 'mobile-multilink-view-container' : 'multilink-view-container'}>\n <ContentDialogTopbar\n title={getTitle()}\n onBackButtonClick={goBack}\n rightElement={\n <LoaderButton\n className='page-view-topbar-save-button'\n isDisabled={!isAbleToSaveMultilink || isButtonProcessing}\n buttonText={renderTopbarSaveButton()}\n isLoading={isButtonProcessing}\n loaderCircleColor='#0095f6'\n onClick={save}\n />\n }\n />\n <div className={isMobile ? \"mobile-multilink-view-content\" : \"multilink-view-content\"} style={{ height: isMobile ? `100dvh` : `calc(var(--content-dialog-height) - var(--content-dialog-topbar-height))` }}>\n {isLoadingMultilink && <ContentDialogLoader />}\n {renderContent()}\n </div>\n <PaydinDialog\n isDialogOpen={dialogState.isOpen}\n handleDialogClose={dialogState.handleDialogClose}\n title={dialogState.title}\n message={dialogState.message}\n closeOnRightClick={true}\n rightButtonType={PAYDIN_DIALOG_BUTTON_TYPES.SECONDARY}\n leftButtonText={dialogState.leftButtonText}\n rightButtonText={dialogState.rightButtonText}\n isLeftButtonWithLoader={false}\n isRightButtonWithLoader={dialogState.isRightButtonWithLoader}\n onRightButtonClick={dialogState.rightButtonClickHandler}\n onLeftButtonClick={dialogState.leftButtonClickHandler}\n />\n </div>\n )\n}","import React from 'react'\nimport './ContentDialog.css'\nimport { isMobile } from 'utils/deviceUtils'\nimport { CONTENT_TYPES, INFLUENCER_PREVIEW_DIALOG_MAX_WIDTH, LINK_TYPES, VIEW_MODES } from 'constants/general.constants'\nimport PaydinDialog from 'dialogs/PaydinDialog/PaydinDialog'\nimport LinkView from 'components/LinkView/LinkView'\nimport ShortView from 'components/ShortView/ShortView'\nimport InfluencerView from 'components/InfluencerView/InfluencerView'\nimport { AiOutlineClose } from 'react-icons/ai'\nimport { useHistoryContext } from 'contexts/History'\nimport PreviewLinkSection from 'components/PreviewLinkSection/PreviewLinkSection'\nimport InfluencerPreviewPage from 'pages/InfluencerPreviewPage/InfluencerPreviewPage'\nimport PreviewMultilinkSection from 'components/PreviewMultilinkSection/PreviewMultilinkSection'\nimport MultilinkView from 'components/MultilinkView/MultilinkView'\n\nexport default function ContentDialog({\n mode = VIEW_MODES.CREATE,\n isDialogOpen = false,\n handleDialogClose = () => { },\n data = {},\n contentType = CONTENT_TYPES.LINK,\n onSaveSuccess = () => { },\n onDelete = () => { },\n onCreateSuccess = () => { }\n}) { \n const history = useHistoryContext()\n\n function renderDialogContent(contentType) {\n switch (contentType) {\n case CONTENT_TYPES.LINK:\n if (mode === VIEW_MODES.PREVIEW) {\n return <PreviewLinkSection\n type={LINK_TYPES.LOOK}\n data={data}\n onSaveSuccess={onSaveSuccess}\n onDeleteLink={onDelete}\n />\n }\n return <LinkView\n mode={mode}\n data={data}\n onSaveSuccess={onSaveSuccess}\n onCreateSuccess={onCreateSuccess}\n />\n case CONTENT_TYPES.SHORT:\n if (mode === VIEW_MODES.PREVIEW) {\n return <PreviewLinkSection\n type={LINK_TYPES.SHORT}\n data={data}\n onSaveSuccess={onSaveSuccess}\n onDeleteLink={onDelete}\n />\n }\n return <ShortView\n mode={mode}\n data={data}\n onSaveSuccess={onSaveSuccess}\n onCreateSuccess={onCreateSuccess}\n />\n case CONTENT_TYPES.MULTILINK:\n if (mode === VIEW_MODES.PREVIEW) {\n return <PreviewMultilinkSection\n data={data}\n onSaveSuccess={onSaveSuccess} \n onDeleteMultilink={onDelete}\n />\n }\n return <MultilinkView\n mode={mode}\n data={data}\n onSaveSuccess={onSaveSuccess}\n onCreateSuccess={onCreateSuccess}\n />\n default: \n if (mode === VIEW_MODES.PREVIEW) {\n return <InfluencerPreviewPage\n data={data}\n onDeleteInfluencer={onDelete}\n onInfluencerSaveSuccess={onSaveSuccess}\n />\n }\n return <InfluencerView // influencer\n mode={mode}\n data={data}\n onSaveSuccess={onSaveSuccess}\n onDeleteInfluencer={onDelete}\n onCreateSuccess={onCreateSuccess}\n />\n }\n }\n\n function getDialogWidth() {\n if (isMobile) {\n return '100vw'\n } else {\n switch (contentType) {\n case CONTENT_TYPES.LINK: return 1100\n case CONTENT_TYPES.SHORT: {\n if (mode === VIEW_MODES.PREVIEW) {\n return '55vw'\n }\n\n return 700\n }\n case CONTENT_TYPES.MULTILINK: {\n if (mode === VIEW_MODES.PREVIEW) {\n return '65vw'\n }\n\n return 700\n }\n default: { // INFLUENCER\n if (mode !== VIEW_MODES.PREVIEW) {\n return '50vw'\n }\n\n return `min(${INFLUENCER_PREVIEW_DIALOG_MAX_WIDTH}px, 60vw)` // Avoid more the 1000 px width\n }\n }\n }\n }\n\n function getDialogHeight() {\n if (isMobile) {\n return '100dvh'\n } else {\n return 'var(--content-dialog-height)'\n }\n }\n\n return (\n <>\n {(!isMobile && isDialogOpen) && <AiOutlineClose className=\"content-dialog-close-button\" onClick={() => history.goBack()} />}\n <PaydinDialog\n isDialogOpen={isDialogOpen}\n handleDialogClose={handleDialogClose}\n hasNoWidthLimit={true}\n backdropColor='rgba(0, 0, 0, 0.65)'\n borderRadiusPx={isMobile ? 0 : 12}\n paddingPx={0}\n width={getDialogWidth()}\n height={getDialogHeight()}\n minHeight={getDialogHeight()}\n margin='0px'\n dialogLayout={renderDialogContent(contentType)}\n isCloseOnTouchOutside={true}\n styles={{\n overflow: 'hidden'\n }}\n />\n </>\n )\n}","import React, { useEffect, useRef, useState } from 'react'\nimport './LinkItem.css'\nimport ImageBox from 'components/ImageBox/ImageBox'\nimport { useTranslation } from 'react-i18next'\nimport { BiDotsVerticalRounded } from 'react-icons/bi'\nimport { useGeneralDataContext, useUserDetailsContext } from 'contexts/User'\nimport PaydinMenu from 'components/PaydinMenu/PaydinMenu'\nimport {\n CONTENT_TYPES,\n EDIT_LINK_SECTION_LINK_DESCRIPTION_CHARACTER_LIMIT,\n LINKS_PAGE_MOBILE_OPTIONS_DRAWER_CLOSING_DELAY,\n NUMBER_TYPES,\n PAYDIN_DRAWER_TRANSITION_DURATION,\n PAYDIN_MENU_OPENING_DIRECTIONS,\n VIEW_MODES\n} from 'constants/general.constants'\nimport { useHistoryContext } from 'contexts/History'\nimport PaydinDialog, { PAYDIN_DIALOG_BUTTON_TYPES } from 'dialogs/PaydinDialog/PaydinDialog'\nimport { isMobile } from 'utils/deviceUtils'\nimport { environment } from 'conf'\nimport { DeleteLinkAPI } from 'api/links/links'\nimport { copyToClipboard } from 'services/SystemService'\nimport { MdContentCopy, MdOpenInNew, MdOutlineContentCopy, MdOutlineEdit } from 'react-icons/md'\nimport { RiDeleteBin6Line } from 'react-icons/ri'\nimport ContentDialog from 'dialogs/ContentDialog/ContentDialog'\nimport { formatNumber } from 'utils/utils'\nimport DrawerStyledButtonList from 'components/DrawerStyledButtonList/DrawerStyledButtonList'\n\n/**\n * Represents a link item.\n * @param {string} linkId - The id of this link item \n * @param {Image/string} image - The image of this link item \n * @param {number} createdAt - The epoch time number representing the creation date of this link\n * @param {number} views - The number of views for this link\n * @param {number} revenue - The revenue of this link\n * @param {string} currency - The currency of this link\n * @param {string} influencerUsername - The currency of this link\n * @param {function} onDeleteLink - A callback function to invoke after the link was deleted\n */\nexport default function LinkItem({\n linkId,\n image,\n defaultImage,\n createdAt,\n views,\n title,\n influencerUsername,\n influencerImage,\n elementRef = null,\n onDeleteLink = () => { },\n onUpdateLink = () => { },\n allowOrderDetails = true,\n}) {\n const { t } = useTranslation()\n const { \n userDetails,\n isFreeUserAndTrialEnded, \n getFrontendUrl,\n } = useUserDetailsContext()\n const history = useHistoryContext()\n const {\n showApprovalMessage,\n openDrawer,\n closeDrawer,\n openFreeTrialDialog,\n } = useGeneralDataContext()\n\n const [isLinkDeletionDialogOpen, setIsLinkDeletionDialogOpen] = useState(false)\n const [optionsMenuState, setOptionsMenuState] = useState({\n isOpen: false,\n anchorElement: null,\n onClose: () => { }\n })\n const [linkContentDialogState, setLinkContentDialogState] = useState({\n isOpen: false,\n mode: VIEW_MODES.PREVIEW\n })\n\n const linkItemTitlesContainerRef = useRef(null)\n const linkItemTitleRef = useRef(null)\n\n useEffect(() => {\n linkItemTitleRef.current.style.maxWidth = `${linkItemTitlesContainerRef?.current?.clientWidth}px`\n }, [])\n\n function getDisplayImage(image, defaultImage) {\n if (image) {\n return image\n }\n\n if (defaultImage) {\n return defaultImage\n }\n\n return ''\n }\n\n function getFormattedDate(epochTime) {\n const date = new Date(epochTime)\n return `${date.getDate()}/${date.getMonth() + 1}/${date.getFullYear()}`\n }\n\n function openOptionsMenu(e) {\n setOptionsMenuState({\n isOpen: true,\n anchorElement: e.currentTarget,\n onClose: () => setOptionsMenuState(prev => ({\n ...prev,\n isOpen: false\n }))\n })\n }\n\n function previewLink(closeDialog = false) {\n if (isMobile) {\n if (closeDialog) {\n history.goBack()\n }\n } else {\n if (closeDialog) {\n optionsMenuState.onClose()\n }\n }\n\n if (closeDialog) {\n setTimeout(() => {\n setLinkContentDialogState({\n isOpen: true,\n mode: VIEW_MODES.PREVIEW\n })\n }, 200)\n } else {\n setLinkContentDialogState({\n isOpen: true,\n mode: VIEW_MODES.PREVIEW\n })\n }\n }\n\n function editLink() {\n if (isMobile) {\n history.goBack()\n } else {\n optionsMenuState.onClose()\n }\n \n setTimeout(() => {\n if (isFreeUserAndTrialEnded()) {\n openFreeTrialDialog()\n } else {\n setLinkContentDialogState({\n isOpen: true,\n mode: VIEW_MODES.EDIT\n })\n }\n }, PAYDIN_DRAWER_TRANSITION_DURATION)\n }\n\n async function copyLink(closeDialog = false) {\n if (isMobile) {\n if (closeDialog)\n closeDrawer()\n } else {\n if (closeDialog)\n optionsMenuState.onClose()\n }\n\n const url = `${getFrontendUrl()}${userDetails?.username}/${linkId}`\n await copyToClipboard(url)\n showApprovalMessage(t('LINK_COPIED_TO_CLIPBOARD'))\n }\n\n function openDeleteLinkConfirmationDialog() {\n if (isMobile) {\n closeDrawer()\n setTimeout(() => {\n setIsLinkDeletionDialogOpen(true)\n }, LINKS_PAGE_MOBILE_OPTIONS_DRAWER_CLOSING_DELAY)\n } else {\n optionsMenuState.onClose()\n setIsLinkDeletionDialogOpen(true)\n history.addBackHandler(() => setIsLinkDeletionDialogOpen(false))\n }\n }\n\n function deleteLink() {\n DeleteLinkAPI(linkId)\n .then(response => {\n onDeleteLink(linkId)\n history.goBack()\n })\n .catch(error => {\n console.log(error)\n })\n }\n\n function closeDialog() {\n setIsLinkDeletionDialogOpen(false)\n }\n\n function openOptionsDrawer() {\n openDrawer(true, <>\n <div className=\"mobile-link-item-more-options-menu-container\">\n <div className=\"mobile-link-item-more-options-menu-item-line\">\n <div className=\"mobile-link-item-more-options-menu-single-item\" onClick={() => copyLink(true)}>\n <MdOutlineContentCopy className=\"mobile-link-item-more-options-menu-single-item-image\" />\n <div className=\"mobile-link-item-more-options-menu-single-item-text\">{t('LINKS_PAGE_OPTIONS_MENU_ITEM_COPY_LINK')}</div>\n </div>\n <div className=\"mobile-link-item-more-options-menu-single-item\" onClick={() => previewLink(true)}>\n <MdOpenInNew className=\"mobile-link-item-more-options-menu-single-item-image\" />\n <div className=\"mobile-link-item-more-options-menu-single-item-text\">{t('LINKS_PAGE_OPTIONS_MENU_ITEM_OPEN')}</div>\n </div>\n </div>\n <DrawerStyledButtonList\n buttons={[\n ...((userDetails?.isAdmin || (!userDetails?.isAdmin && userDetails?.permissions?.isActiveInfluencer)) ? [{\n text: t('LINKS_PAGE_OPTIONS_MENU_ITEM_EDIT'),\n image: <MdOutlineEdit className=\"mobile-link-item-more-options-menu-section-item-image\" />,\n onClick: editLink\n }] : []),\n ...((userDetails?.isAdmin || (!userDetails?.isAdmin && userDetails?.permissions?.isActiveInfluencer)) ? [{\n text: t('LINKS_PAGE_OPTIONS_MENU_ITEM_DELETE'),\n image: <RiDeleteBin6Line className=\"mobile-link-item-more-options-menu-section-item-image\" />,\n onClick: openDeleteLinkConfirmationDialog,\n color: 'red'\n }] : [])\n ]}\n />\n </div>\n </>)\n }\n\n function getTitle() {\n if (!title)\n return 'L' // a random letter for giving the containing div a content to preserve its height\n return title?.length > EDIT_LINK_SECTION_LINK_DESCRIPTION_CHARACTER_LIMIT ? title?.slice(0, EDIT_LINK_SECTION_LINK_DESCRIPTION_CHARACTER_LIMIT) : title\n }\n\n function closeLinkContentDialog() {\n setLinkContentDialogState(prev => ({\n ...prev,\n isOpen: false\n }))\n }\n\n return (\n <div ref={elementRef} className={isMobile ? 'mobile-link-item-container' : 'link-item-container'}>\n <div className=\"link-item-content\">\n <div className={isMobile ? 'mobile-link-item-details-container' : 'link-item-details-container'}>\n <ImageBox\n image={getDisplayImage(image, defaultImage)}\n alt='link image'\n className='link-item-image'\n showGreyImageBackground={true}\n onImageClickCallback={() => previewLink(false)}\n isImageFitCover={true}\n allowVideo={true}\n />\n <div className=\"link-item-details\">\n <div className=\"link-item-details-lower-row\">\n <div className=\"link-item-created-at-expired-container\">\n <div ref={linkItemTitlesContainerRef} className=\"link-item-titles-container\">\n <div className=\"link-item-title-container\">\n <div ref={linkItemTitleRef} className={isMobile ? \"mobile-link-item-title\" : \"link-item-title\"} onClick={() => previewLink(false)} style={{ visibility: title ? 'visible' : 'hidden' }}>{getTitle()}</div>\n <div className=\"link-item-buttons-container\">\n <MdContentCopy className='link-item-copy-link-button-image' onClick={() => copyLink(false)} />\n <BiDotsVerticalRounded className={isMobile ? 'mobile-link-item-statistics-more-options-button' : 'link-item-statistics-more-options-button'} onClick={isMobile ? openOptionsDrawer : openOptionsMenu} />\n </div>\n </div>\n <div className={isMobile ? \"mobile-link-item-created-at-text\" : \"link-item-created-at-text\"}>{t('LINKS_PAGE_CREATED_AT_TEXT', { createdAtDate: getFormattedDate(createdAt) })}</div>\n </div>\n </div>\n <div className=\"link-item-bottom-container\">\n <div className=\"link-item-statistics-container\" onClick={() => previewLink(false)}>\n <div className=\"link-item-statistics-views-container detail-container\">\n <div className=\"link-item-statistics-views-title link-item-statistics-title\">{t('LINKS_PAGE_STATISTICS_VIEWS_TITLE')}</div>\n <div className='link-item-statistics-views-value link-item-statistics-value' style={{ fontSize: isMobile ? '19px' : '21px' }}>{formatNumber(views, NUMBER_TYPES.SHORT)}</div>\n </div>\n </div>\n {influencerImage && <ImageBox\n image={influencerImage}\n className='preview-link-section-influencer-image-container'\n imageClassName='preview-link-section-influencer-image'\n roundImage={true}\n />}\n </div>\n </div>\n </div>\n </div>\n </div>\n {!isMobile &&\n <PaydinMenu\n anchorElement={optionsMenuState.anchorElement}\n isOpen={optionsMenuState.isOpen}\n onClose={optionsMenuState.onClose}\n direction={PAYDIN_MENU_OPENING_DIRECTIONS.LEFT}\n options={[\n {\n text: t('LINKS_PAGE_OPTIONS_MENU_ITEM_OPEN'),\n onClick: () => previewLink(true)\n },\n ...((userDetails?.isAdmin || (!userDetails?.isAdmin && userDetails?.permissions?.isActiveInfluencer)) ? [{\n text: t('LINKS_PAGE_OPTIONS_MENU_ITEM_EDIT'),\n onClick: editLink\n }] : []),\n {\n text: t('LINKS_PAGE_OPTIONS_MENU_ITEM_COPY_LINK'),\n onClick: () => copyLink(true)\n },\n ...((userDetails?.isAdmin || (!userDetails?.isAdmin && userDetails?.permissions?.isActiveInfluencer)) ? [{\n className: 'link-item-options-menu-delete-option',\n text: t('LINKS_PAGE_OPTIONS_MENU_ITEM_DELETE'),\n onClick: openDeleteLinkConfirmationDialog\n }] : [])\n ]}\n />\n }\n <PaydinDialog\n title={t('LINKS_PAGE_LINK_DELETION_CONFIRMATION_DIALOG_TITLE')}\n message={t('LINKS_PAGE_LINK_DELETION_CONFIRMATION_DIALOG_MESSAGE')}\n isDialogOpen={isLinkDeletionDialogOpen}\n handleDialogClose={closeDialog}\n leftButtonText={t('LINKS_PAGE_LINK_DELETION_CONFIRMATION_DIALOG_LEFT_BUTTON_TEXT')}\n rightButtonText={t('LINKS_PAGE_LINK_DELETION_CONFIRMATION_DIALOG_RIGHT_BUTTON_TEXT')}\n rightButtonType={PAYDIN_DIALOG_BUTTON_TYPES.SECONDARY}\n onRightButtonClick={deleteLink}\n closeOnRightClick={false}\n isLeftButtonWithLoader={false}\n />\n <ContentDialog\n isDialogOpen={linkContentDialogState.isOpen}\n handleDialogClose={closeLinkContentDialog}\n data={{\n linkId,\n allowOrderDetails,\n }}\n mode={linkContentDialogState.mode}\n onDelete={onDeleteLink}\n onSaveSuccess={onUpdateLink}\n contentType={CONTENT_TYPES.LINK}\n />\n </div>\n )\n}","import React from 'react'\nimport './AnalyticsStrip.css'\nimport { isMobile } from 'utils/deviceUtils'\nimport { useTranslation } from 'react-i18next'\nimport Loader from 'components/Loader/Loader'\nimport { formatNumber } from 'utils/utils'\nimport { ANALYTICS_STRIP_LIFETIME_REVENUE_DISPLAY_THRESHOLD, NUMBER_TYPES } from 'constants/general.constants'\nimport { useUserDetailsContext } from 'contexts/User'\n\n/**\n * Represents an analytics strip which shows the given analytics.\n * @param {object} analytics - The analytics data to display\n * @param {string} currency - The currency for the given analytics\n * @param {boolean} isLoadingAnalytics - Determins whether the analytics data is being loaded\n * @param {ref} containerRef - A ref for the container element\n */\nexport default function AnalyticsStrip({\n analytics = {},\n currency = '',\n isLoadingAnalytics = true,\n containerRef = null,\n showClicks = true,\n leftComponent = false\n}) {\n const { t } = useTranslation()\n const { \n userDetails,\n } = useUserDetailsContext()\n\n\n\n function renderAnalyticsValue(value) {\n return isLoadingAnalytics ? <Loader styles={{ width: '15px', height: '15px' }} /> : value\n }\n\n function hasClicksPermission() {\n return userDetails?.isAdmin || userDetails?.permissions?.clicksEnabled\n }\n\n function hasSalesPermission() {\n return userDetails?.isAdmin || userDetails?.permissions?.salesEnabled\n }\n\n function shouldDisplayRevenue() {\n // Display revenue only if the user is an admin\n return userDetails?.isAdmin && analytics?.revenue >= ANALYTICS_STRIP_LIFETIME_REVENUE_DISPLAY_THRESHOLD\n }\n\n function hasAnalyticsPermissions() {\n return hasClicksPermission() || hasSalesPermission() || shouldDisplayRevenue()\n }\n\n return (\n <>\n {\n hasAnalyticsPermissions() && <div ref={containerRef} className={isMobile ? \"mobile-analytics-strip-lifetime-analytics-brief\" : \"analytics-strip-lifetime-analytics-brief\"}>\n {\n leftComponent && (\n <div className='analytics-strip-lifetime-analytics-brief-left-component'>\n {leftComponent}\n </div>\n )\n }\n {\n showClicks && hasClicksPermission() && <div className={isMobile ? \"mobile-links-page-lifetime-analytics-brief-data-container\" : \"links-page-lifetime-analytics-brief-data-container\"}>\n <div className=\"links-page-lifetime-analytics-brief-clicks-dot\"></div>\n <div className={isMobile ? \"mobile-links-page-lifetime-analytics-brief-data\" : \"links-page-lifetime-analytics-brief-data\"}>\n <div className=\"links-page-lifetime-analytics-brief-data-value\">{renderAnalyticsValue(formatNumber(analytics?.clicks, NUMBER_TYPES.NORMAL))}</div>\n <div className=\"links-page-lifetime-analytics-brief-data-title\">{t('LINKS_PAGE_STATISTICS_VIEWS_TITLE')}</div>\n </div>\n </div>\n }\n {\n hasSalesPermission() && <div className={isMobile ? \"mobile-links-page-lifetime-analytics-brief-data-container\" : \"links-page-lifetime-analytics-brief-data-container\"}>\n <div className=\"links-page-lifetime-analytics-brief-sales-dot\"></div>\n <div className={isMobile ? \"mobile-links-page-lifetime-analytics-brief-data\" : \"links-page-lifetime-analytics-brief-data\"}>\n <div className=\"links-page-lifetime-analytics-brief-data-value\">{renderAnalyticsValue(formatNumber(analytics?.sales, NUMBER_TYPES.NORMAL))}</div>\n <div className=\"links-page-lifetime-analytics-brief-data-title\">{t('LINKS_PAGE_STATISTICS_SALES_TITLE')}</div>\n </div>\n </div>\n }\n {\n shouldDisplayRevenue() && <div className={isMobile ? \"mobile-links-page-lifetime-analytics-brief-data-container\" : \"links-page-lifetime-analytics-brief-data-container\"}>\n <div className=\"links-page-lifetime-analytics-brief-revenue-dot\"></div>\n <div className={isMobile ? \"mobile-links-page-lifetime-analytics-brief-data\" : \"links-page-lifetime-analytics-brief-data\"}>\n <div className=\"links-page-lifetime-analytics-brief-data-value\">{renderAnalyticsValue(`${currency}${formatNumber(analytics?.revenue, NUMBER_TYPES.NORMAL)}`)}</div>\n <div className=\"links-page-lifetime-analytics-brief-data-title\">{t('LINKS_PAGE_STATISTICS_REVENUE_TITLE')}</div>\n </div>\n </div>\n }\n </div>\n }\n </>\n )\n}","import { DASHBOARD_SIDEBAR_MINIMIZED_WIDTH_PX, DASHBOARD_SIDEBAR_WIDTH_PX } from 'constants/general.constants'\nimport { useUserDetailsContext } from 'contexts/User'\nimport LoaderPage from 'pages/LoaderPage/LoaderPage'\nimport React from 'react'\nimport { isMobile } from 'utils/deviceUtils'\n\n/**\n * Represents a loader of the dashboard pages.\n * It covers the whole screen except the dashboard topbar.\n */\nexport default function DashboardLoader() {\n const {\n userDetails\n } = useUserDetailsContext()\n \n return (\n <LoaderPage\n styles={{ \n backgroundColor: '#ffffffaa', \n width: `calc(100vw - ${userDetails?.sidebarExpanded ? DASHBOARD_SIDEBAR_WIDTH_PX : DASHBOARD_SIDEBAR_MINIMIZED_WIDTH_PX})`,\n height: `calc(100dvh - ${isMobile ? 'var(--mobile-dashboard-topbar-height))' : '0'}`, \n marginTop: `${isMobile ? 'var(--mobile-dashboard-topbar-height)' : '0'}` \n }} \n marginBottom={0} \n isFullScreen={true} \n />\n )\n}","import React, { useEffect, useRef, useState } from 'react'\nimport './LinksPage.css'\nimport ImageBox from 'components/ImageBox/ImageBox'\nimport { useHistoryContext } from 'contexts/History'\nimport {\n HOME_PAGE_URL\n} from 'constants/routes.constants'\nimport {\n useFetchLinksContext,\n useGeneralDataContext,\n useIsUserLoadedContext,\n useUserDetailsContext,\n} from 'contexts/User'\nimport { useTranslation } from 'react-i18next'\nimport {\n DEFAULT_CURRENCY_CODE,\n EDIT_LINK_PAGE_PRODUCT_SEARCH_REQUEST_SEND_DELAY_MILLISECONDS,\n LINKS_PAGE_FETCH_NEXT_LINKS_THRESHOLD_ROW_COUNT,\n LINKS_PAGE_LINKS_FILTER_COUNT,\n LINK_ITEM_HEIGHT_PX,\n LINK_PAGES_MAX_WIDTH,\n LINK_TYPES,\n PAGE_DEFAULT_MAX_WIDTH,\n SHOPEAKS_SMALL_LOGO_URL\n} from 'constants/general.constants'\nimport ShopifyConnect from 'components/ShopifyConnect/ShopifyConnect'\nimport { isMobile } from 'utils/deviceUtils'\nimport LinkItem from 'components/LinkItem/LinkItem'\nimport { CiSearch } from 'react-icons/ci'\nimport { IoCloseOutline } from 'react-icons/io5'\nimport NoItemsFound from 'components/NoItemsFound/NoItemsFound'\nimport { GetBusinessAnalytics } from 'api/links/links'\nimport AnalyticsStrip from 'components/AnalyticsStrip/AnalyticsStrip'\nimport DashboardLoader from 'components/DashboardLoader/DashboardLoader'\nimport Loader from 'components/Loader/Loader'\nimport { getCurrencySymbol } from 'services/currency'\nimport { extractExtendedInfluencerAnalytics, extractLinkData } from 'utils/dataUtils'\nimport AddLInkFlow from 'components/AddLInkFlow/AddLInkFlow'\n\n/**\n * Represents the user's links page.\n */\nexport default function LinksPage() {\n const { t } = useTranslation()\n const history = useHistoryContext()\n const {\n userDetails,\n setUserDetails,\n setRecentLinks,\n isFreeUserAndTrialEnded\n } = useUserDetailsContext()\n const {\n finishedUpdatingObject,\n finishedCreatingObject,\n objectToSave,\n openFreeTrialDialog\n } = useGeneralDataContext()\n const { fetchLinks } = useFetchLinksContext()\n const isUserLoaded = useIsUserLoadedContext()\n\n const [isLoadingLinks, setIsLoadingLinks] = useState(true)\n const [isLoadingMoreLinks, setIsLoadingMoreLinks] = useState(false)\n const [searchQuery, setSearchQuery] = useState('')\n const [skip, setSkip] = useState(0)\n const [defaultLinks, setDefaultLinks] = useState([])\n const [linkSearchResult, setLinkSearchResult] = useState([])\n const [hasMoreLinks, setHasMoreLinks] = useState(true)\n const [shouldShowNoLinks, setShouldShowNoLinks] = useState(false)\n const [lifetimeAnalyticsState, setLifetimeAnalyticsState] = useState({\n isLoading: true,\n clicks: 0,\n sales: 0,\n checkouts: 0,\n revenue: 0,\n totalTax: 0\n })\n const [isFirstRender, setIsFirstRender] = useState(true) // used to control the appearance of the loader only in the first render\n const [addFlowTrigger, setAddFlowTrigger] = useState(false)\n\n const typingTimeoutRef = useRef(null)\n const topbarRef = useRef(null)\n const linksListRef = useRef(null)\n const analyticsStripRef = useRef(null)\n\n useEffect(() => {\n if (hasShopifyStore()) {\n if (!isMobile) {\n topbarRef.current.style.width = `${linksListRef?.current?.clientWidth}px`\n }\n\n if (isUserLoaded) {\n // when the splash is no longer shown, load the links again to refresh the links collection\n fetchFirstLinks()\n }\n\n if (userDetails?.analytics?.linksLifetimeAnalytics) {\n setLifetimeAnalyticsState({\n isLoading: false,\n clicks: userDetails?.analytics?.linksLifetimeAnalytics?.clicks,\n sales: userDetails?.analytics?.linksLifetimeAnalytics?.sales,\n checkouts: userDetails?.analytics?.linksLifetimeAnalytics?.checkouts,\n revenue: userDetails?.analytics?.linksLifetimeAnalytics?.revenue,\n totalTax: userDetails?.analytics?.linksLifetimeAnalytics?.totalTax,\n data: userDetails?.analytics?.linksLifetimeAnalytics?.data,\n currency: getCurrencySymbol(userDetails?.analytics?.currency)\n })\n } else {\n GetBusinessAnalytics(userDetails?.businessId)\n .then(response => {\n const linksClicks = response?.looks_analytics?.visits ?? 0\n const linksSales = response?.looks_analytics?.checkouts ?? 0\n const linksCheckouts = response?.looks_analytics?.requested_checkouts ?? 0\n const linksTotalTax = response?.looks_analytics?.total_tax ?? 0\n const linksRevenue = response?.looks_analytics?.revenue ?? 0\n const linksData = response?.looks_analytics?.data ?? []\n\n const shortsClicks = response?.shorts_analytics?.visits ?? 0\n const shortsSales = response?.shorts_analytics?.checkouts ?? 0\n const shortsCheckouts = response?.shorts_analytics?.requested_checkouts ?? 0\n const shortsRevenue = response?.shorts_analytics?.revenue ?? 0\n const shortsTotalTax = response?.shorts_analytics?.total_tax ?? 0\n const shortsData = response?.shorts_analytics?.data ?? []\n\n const currency = response?.currency ?? DEFAULT_CURRENCY_CODE\n setLifetimeAnalyticsState({\n isLoading: false,\n clicks: linksClicks,\n sales: linksSales,\n checkouts: linksCheckouts,\n revenue: linksRevenue,\n totalTax: linksTotalTax,\n currency: getCurrencySymbol(currency)\n })\n setUserDetails(prev => ({\n ...prev,\n analytics: {\n ...prev.analytics,\n currency: currency,\n linksLifetimeAnalytics: {\n clicks: linksClicks,\n sales: linksSales,\n checkouts: linksCheckouts,\n revenue: linksRevenue,\n totalTax: linksTotalTax,\n data: linksData\n },\n shortsLifetimeAnalytics: {\n clicks: shortsClicks,\n sales: shortsSales,\n checkouts: shortsCheckouts,\n revenue: shortsRevenue,\n totalTax: shortsTotalTax,\n data: shortsData\n },\n influencerInsights: response?.influencers_insights?.map(influencer_insight => extractExtendedInfluencerAnalytics(influencer_insight))\n }\n }))\n })\n .catch(error => {\n console.log(error)\n })\n }\n } else {\n history.replace(HOME_PAGE_URL)\n }\n }, [])\n\n useEffect(() => {\n setShouldShowNoLinks(false)\n setLinks([], true, true)\n setIsLoadingLinks(true)\n setHasMoreLinks(true)\n clearTypingTimeout(typingTimeoutRef.current)\n if (searchQuery) {\n typingTimeoutRef.current = setTimeout(() => {\n fetchLinks(searchQuery, 0, false, LINK_TYPES.LOOK, linksData => {\n setShouldShowNoLinks(true)\n setLinks(linksData?.links, true, true)\n setHasMoreLinks(linksData?.links.length === LINKS_PAGE_LINKS_FILTER_COUNT)\n setIsLoadingLinks(false)\n })\n }, EDIT_LINK_PAGE_PRODUCT_SEARCH_REQUEST_SEND_DELAY_MILLISECONDS)\n } else {\n setLinkSearchResult(defaultLinks)\n if (!isFirstRender) { // On the first render, the next line will be executed unless we check for first render, because in this case 'searchQuery' is falsy\n setIsLoadingLinks(false)\n }\n }\n setIsFirstRender(false)\n\n return () => {\n clearTypingTimeout(typingTimeoutRef.current)\n }\n }, [searchQuery])\n\n useEffect(() => {\n if (finishedUpdatingObject) {\n updateLink(objectToSave)\n } else if (finishedCreatingObject) {\n addNewLink(objectToSave)\n }\n }, [finishedUpdatingObject, finishedCreatingObject])\n\n function fetchFirstLinks() {\n setIsLoadingLinks(true)\n fetchLinks(searchQuery, 0, true, LINK_TYPES.LOOK, linksData => {\n setShouldShowNoLinks(true)\n setDefaultLinkList(linksData?.links)\n setLinks(linksData?.links, false, true)\n setHasMoreLinks(linksData?.links.length === LINKS_PAGE_LINKS_FILTER_COUNT)\n setIsLoadingLinks(false)\n })\n }\n\n function setDefaultLinkList(links) {\n if (!links) {\n return\n }\n\n setDefaultLinks([...(links.map(link => extractLinkData(link)))])\n }\n\n function setLinks(links, shouldResetSkip = false, shouldOverrideLinks = false) {\n if (!links) {\n return\n }\n\n if (shouldOverrideLinks) {\n setLinkSearchResult([...(links.map(link => extractLinkData(link)))])\n } else {\n setLinkSearchResult(prev => ([\n ...prev,\n ...(links.map(link => extractLinkData(link)))\n ]))\n }\n if (shouldResetSkip)\n setSkip(0)\n else\n setSkip(prev => prev + links.length)\n }\n\n function clearTypingTimeout(timeout) {\n timeout && clearTimeout(timeout)\n }\n\n function clearSearchQuery() {\n setSearchQuery('')\n }\n\n function handleChange(e) {\n setSearchQuery(e.target.value)\n }\n\n function onAddLinkButtonClick() {\n if (isFreeUserAndTrialEnded()) {\n openFreeTrialDialog()\n } else {\n setAddFlowTrigger(true)\n }\n }\n\n function hasShopifyStore() {\n return userDetails.brand && Object.keys(userDetails.brand).length > 0\n }\n\n function hasNoLinks() {\n return !defaultLinks || defaultLinks.length === 0\n }\n\n function hasNoLinksResults() {\n return !linkSearchResult || linkSearchResult.length === 0\n }\n\n function renderLinksContent() {\n if (hasNoLinks()) {\n return <>\n {\n shouldShowNoLinks && <NoItemsFound\n image={SHOPEAKS_SMALL_LOGO_URL}\n title={t('LINKS_PAGE_NO_LINKS_TITLE')}\n buttonText={t('LINKS_PAGE_NO_LINKS_CREATE_LINK_BUTTON_TEXT')}\n showButton={userDetails?.isAdmin}\n addItemButtonClickHandler={onAddLinkButtonClick}\n />\n }\n </>\n }\n\n if (searchQuery && hasNoLinksResults()) {\n return <>\n {\n shouldShowNoLinks && <div className={isMobile ? 'mobile-links-page-no-results-found-container' : 'links-page-no-results-found-container'}>\n <div className=\"links-page-no-results-found-content\">\n <div className=\"links-page-no-results-found-text\">{t('ADD_PRODUCTS_DIALOG_NO_RESULTS_FOUND_TEXT')}</div>\n </div>\n </div>\n }\n </>\n }\n\n return <div className={isMobile ? 'mobile-links-page-content-links-list' : 'links-page-content-links-list'}>\n {\n linkSearchResult?.map(link => <LinkItem\n key={link?.linkId}\n linkId={link?.linkId}\n image={link?.images && link.images?.length > 0 ? link?.images[0] : ''}\n defaultImage={link?.defaultImage}\n views={link?.views}\n createdAt={link?.createdAt}\n influencerUsername={link?.influencerUsername}\n influencerImage={link?.influencerImage}\n title={link?.description}\n onDeleteLink={deleteLink}\n />)\n }\n </div>\n }\n\n function deleteLink(linkId) {\n setLinkSearchResult(prev => prev.filter(link => link?.linkId !== linkId))\n setDefaultLinks(prev => prev.filter(link => link?.linkId !== linkId))\n setIsLoadingLinks(false)\n setRecentLinks([])\n }\n\n function updateLink(updatedLink) {\n setLinkSearchResult(prev => prev.map(link => link?.linkId === updatedLink.linkId ? updatedLink : link))\n setDefaultLinks(prev => prev.map(link => link?.linkId === updatedLink.linkId ? updatedLink : link))\n }\n\n function addNewLink(newLink) {\n setLinkSearchResult(prev => [newLink, ...prev])\n setDefaultLinks(prev => [newLink, ...prev])\n }\n\n function handleLinksScroll(e) {\n const scrollPosition = e.target.scrollTop\n const thresholdScrollHeight = linksListRef?.current?.clientHeight - (LINKS_PAGE_FETCH_NEXT_LINKS_THRESHOLD_ROW_COUNT * LINK_ITEM_HEIGHT_PX) + (topbarRef?.current?.clientHeight + analyticsStripRef?.current?.clientHeight) - (isMobile ? 0.4 * window.innerHeight : 0)\n if (!isLoadingMoreLinks && hasMoreLinks && scrollPosition + e.target.clientHeight >= thresholdScrollHeight) {\n setIsLoadingMoreLinks(true)\n fetchLinks(searchQuery, linkSearchResult?.length, false, LINK_TYPES.LOOK, linksData => {\n setLinks(linksData?.links, false, false)\n setHasMoreLinks(linksData?.links.length === LINKS_PAGE_LINKS_FILTER_COUNT)\n setIsLoadingMoreLinks(false)\n })\n }\n }\n\n function renderLoaderRow() {\n return <div className={isMobile ? 'mobile-links-page-loader-row' : 'links-page-loader-row'}>\n <Loader styles={{\n width: isMobile ? '25px' : '30px',\n height: isMobile ? '25px' : '30px'\n }} />\n </div>\n }\n\n function renderAnalyticsStrip() {\n return <AnalyticsStrip\n analytics={lifetimeAnalyticsState}\n currency={lifetimeAnalyticsState?.currency}\n isLoadingAnalytics={lifetimeAnalyticsState.isLoading}\n containerRef={analyticsStripRef}\n />\n }\n\n return (\n <>\n {!isMobile ?\n <div onScroll={handleLinksScroll} className='links-page-container' style={{ height: hasShopifyStore() ? null : '100vh', maxWidth: hasShopifyStore() ? `${LINK_PAGES_MAX_WIDTH}px` : `${PAGE_DEFAULT_MAX_WIDTH}px`, margin: !hasShopifyStore() && '0 auto' }}>\n {\n hasShopifyStore() ? (\n <>\n {isLoadingLinks && <DashboardLoader />}\n <div ref={topbarRef} className=\"links-page-topbar\">\n <div className=\"links-page-topbar-store-name-container\">\n {\n userDetails?.businessLogo ? <ImageBox\n className='links-page-topbar-store-image'\n image={userDetails?.businessLogo}\n /> : <div className=\"links-page-topbar-store-name\">{userDetails?.businessName ?? \"\"}</div>\n }\n </div>\n <div className=\"links-page-topbar-buttons-container\">\n {\n !hasNoLinks() && <>\n <div className=\"links-page-topbar-search-box\" style={{ width: isMobile ? '100%' : '300px' }}>\n <input className='links-page-topbar-search-box-input' value={searchQuery} type='text' onChange={handleChange} placeholder={t('ADD_PRODUCTS_DIALOG_TOPBAR_SEARCH_BOX_PLACEHOLDER')} />\n {\n searchQuery.length === 0 ?\n <CiSearch className='links-page-topbar-search-box-image' /> :\n <IoCloseOutline className='edit-link-section-add-products-dialog-topbar-search-box-image close' onClick={clearSearchQuery} />\n }\n </div>\n </>\n }\n {(userDetails?.isAdmin || (!userDetails?.isAdmin && userDetails?.permissions?.isActiveInfluencer)) && <div className=\"links-page-topbar-create-new-link-button links-page-topbar-button\" onClick={onAddLinkButtonClick}>{t('LINKS_PAGE_CREATE_NEW_LINK_BUTTON_TEXT')}</div>}\n </div>\n </div>\n {renderAnalyticsStrip()}\n <div ref={linksListRef} className={`links-page-content ${hasNoLinks() ? 'no-links-content' : ''}`}>\n {renderLinksContent()}\n {isLoadingMoreLinks && renderLoaderRow()}\n </div>\n </>\n ) : <ShopifyConnect hasShopifyStore={false} />\n }\n </div> : \n hasShopifyStore() ? <>\n {isLoadingLinks && <DashboardLoader />}\n <div onScroll={handleLinksScroll} className='mobile-links-page-container'>\n {\n !hasNoLinks() && <>\n <div ref={topbarRef} className='mobile-links-page-topbar-search-box-container'>\n <div className=\"mobile-links-page-topbar-search-box\">\n <input className='links-page-topbar-search-box-input' value={searchQuery} type='text' onChange={handleChange} placeholder={t('ADD_PRODUCTS_DIALOG_TOPBAR_SEARCH_BOX_PLACEHOLDER')} />\n {\n searchQuery.length === 0 ?\n <CiSearch className='links-page-topbar-search-box-image' /> :\n <IoCloseOutline className='links-page-topbar-search-box-image close' onClick={clearSearchQuery} />\n }\n </div>\n </div>\n <div className=\"separator-line\"></div>\n </>\n }\n {renderAnalyticsStrip()}\n <div ref={linksListRef} className={`mobile-links-page-content ${hasNoLinks() ? 'mobile-no-links-content' : ''}`}>\n {renderLinksContent()}\n {isLoadingMoreLinks && renderLoaderRow()}\n </div>\n </div>\n </> : <ShopifyConnect hasShopifyStore={false} />\n }\n <AddLInkFlow\n trigger={addFlowTrigger}\n setTrigger={setAddFlowTrigger}\n />\n </>\n )\n}","import React from 'react'\nimport './ProductItem.css'\nimport { useTranslation } from 'react-i18next'\nimport { BsCheck } from 'react-icons/bs'\nimport ImageBox from 'components/ImageBox/ImageBox'\nimport MultiLineText from 'components/MultiLineText/MultiLineText'\nimport { isMobile } from 'utils/deviceUtils'\nimport { height } from '@mui/system'\nimport ColorfulTag from 'components/ColorfulTag/ColorfulTag'\n\n/**\n * Represents a product item inside component.\n * @param {object} data - The data of this product\n * @param {function} onItemClick - A function to perfomr whenever this item is clicked\n */\nexport default function ProductItem({\n elementRef,\n data = {},\n imageWidth = '100px',\n imageHeight = '100px',\n showSellingScore = false,\n score = null,\n}) {\n const { t } = useTranslation()\n\n function getVariantAvailabilityColor(ratio) {\n if (ratio >= 75) {\n return 'rgb(212 243 187)'\n } else if (ratio >= 50) {\n return 'rgb(243 224 187)'\n } else {\n return 'rgb(243 192 187)'\n }\n }\n\n return (\n <div \n className={isMobile ? 'mobile-product-item-container' : 'product-item-container'} \n ref={elementRef} \n style={{\n width: isMobile ? imageWidth : `calc(2.5 * ${imageWidth}`, \n minWidth: imageWidth, \n height: isMobile ? `calc(${showSellingScore ? 1.8 : 1.6} * ${imageHeight}` : imageHeight\n }}\n >\n <div className='product-item-image-frame' style={{width: isMobile ? '100%' : `40%`, height: isMobile ? (showSellingScore ? '55%' : '62%') : `100%`}}>\n <ImageBox\n className='product-item-image'\n image={data?.imageUrl}\n isImageFitCover={true}\n showGreyImageBackground={true}\n styles={{width: imageWidth, height: imageHeight}}\n showImageBorderRadius={true}\n />\n </div>\n <div className='product-item-details' style={{width: isMobile ? '100%' : `60%`, height: isMobile ? (showSellingScore ? '45%' : '38%') : `100%`}}>\n <MultiLineText\n text={data?.title}\n className='product-item-title'\n lines={2}\n style={{height: '2lh'}}\n treatAsHtml={true}\n />\n {score !== null && showSellingScore && <MultiLineText\n text={t(score === 1 ? \"PRODUCT_ITEM_BOUGHT_ONE_TIME_TEXT\" : \"PRODUCT_ITEM_BOUGHT_MULTIPLE_TIMES_TEXT\",{times: score})}\n className='product-item-selling-score-title'\n lines={1}\n style={{fontSize: isMobile ? '12px' : '14px'}}\n />}\n <div className=\"product-item-tag-container\">\n <ColorfulTag\n text={t(\"PRODUCT_ITEM_AVAILABILITY_TAG_TEXT\", {score: Math.round(data?.variantAvailabilityRatio * 100)})}\n backgroundColor={getVariantAvailabilityColor(Math.round(data?.variantAvailabilityRatio * 100))}\n isSmall={true}\n textSize={isMobile ? '10px' : '13px'}\n showBullet={!isMobile}\n />\n </div>\n </div>\n </div>\n )\n}","import React, { useCallback, useEffect, useState } from 'react'\nimport './TrendsPage.css'\nimport { useTranslation } from 'react-i18next'\nimport { useGeneralDataContext, useUserDetailsContext } from 'contexts/User'\nimport { useHistoryContext } from 'contexts/History'\nimport ProductItem from 'components/ProductItem/ProductItem'\nimport Loader from 'components/Loader/Loader'\nimport { isMobile } from 'utils/deviceUtils'\nimport CollapsingElement from 'components/CollapsingElement/CollapsingElement'\nimport { CONTENT_TYPES, TRENDS_PAGE_PRODUCT_IMAGE_HEIGHT_PX, TRENDS_PAGE_PRODUCT_IMAGE_WIDTH_PX, VIEW_MODES } from 'constants/general.constants'\nimport { generateRandomInteger } from 'utils/utils'\nimport { FaPlus } from \"react-icons/fa6\";\nimport ContentDialog from 'dialogs/ContentDialog/ContentDialog'\nimport { LINKS_PAGE_URL } from 'constants/routes.constants'\nimport MultiLineText from 'components/MultiLineText/MultiLineText'\nimport { VscArrowSwap } from \"react-icons/vsc\";\nimport ImageBox from 'components/ImageBox/ImageBox'\nimport { BsInfoCircle } from \"react-icons/bs\";\nimport Tooltip from 'components/Tooltip/Tooltip'\nimport AddProductsDialog from 'dialogs/AddProductsDialog/AddProductsDialog'\nimport ContentDialogTopbar from 'components/ContentDialogTopbar/ContentDialogTopbar'\n\n\nexport default function TrendsPage() {\n const { t } = useTranslation()\n\n const {\n userDetails,\n fetchTopPerformingProducts,\n fetchTopProductsCombinations,\n fetchComplementaryProducts,\n isFreeUserAndTrialEnded,\n } = useUserDetailsContext()\n const {\n openFreeTrialDialog,\n } = useGeneralDataContext()\n const history = useHistoryContext()\n\n const [isLoadingTopPreforming, setIsLoadingTopPerforming] = useState(true)\n const [isLoadingTopCombinations, setIsLoadingTopCombinations] = useState(true)\n const [isLoadingComplementary, setIsLoadingComplementary] = useState(true)\n\n const [topPerformingProductsExpended, setTopPerformingProductsExpended] = useState(false)\n const [topCombinationsExpended, setTopCombinationsExpended] = useState(false)\n const [complementaryExpended, setComplementaryExpended] = useState(false)\n\n const [complementaryMainProduct, setComplementaryMainProduct] = useState(null)\n const [complementaryProducts, setComplementaryProducts] = useState([])\n\n const [quickInstantProducts, setQuickInstantProducts] = useState([])\n const [contentDialogState, setContentDialogState] = useState({ isOpen: false })\n\n const [allowComplementaryExpand, setAllowComplementaryExpand] = useState(false)\n\n const [productsDialogShown, setProductsDialogShown] = useState(false)\n\n useEffect(() => {\n if (userDetails?.trends?.topPerformingProducts && userDetails?.trends?.topPerformingProducts.length > 0) {\n setIsLoadingTopPerforming(false)\n } else {\n fetchTopPerformingProducts(() => setIsLoadingTopPerforming(false), () => setIsLoadingTopPerforming(false))\n }\n if (userDetails?.trends?.topProductsCombinations?.combinations && userDetails?.trends?.topProductsCombinations?.combinations.length > 0) {\n setIsLoadingTopCombinations(false)\n } else {\n fetchTopProductsCombinations(() => setIsLoadingTopCombinations(false), () => setIsLoadingTopCombinations(false))\n }\n }, [])\n\n useEffect(() => {\n if (!isLoadingTopPreforming && userDetails?.trends?.topPerformingProducts && userDetails?.trends?.topPerformingProducts.length > 0) {\n let index = generateRandomInteger(Math.min(3, userDetails?.trends?.topPerformingProducts.length))\n setIsLoadingComplementary(true)\n setAllowComplementaryExpand(false)\n setComplementaryMainProduct(userDetails?.trends?.topPerformingProducts[index])\n loadComplementaryProducts(userDetails?.trends?.topPerformingProducts[index].id)\n }\n }, [isLoadingTopPreforming])\n\n function loadComplementaryProducts(productId) {\n if (Object.keys(userDetails?.trends?.complementaryProducts).includes(productId)) {\n setComplementaryProducts(userDetails?.trends?.complementaryProducts[productId])\n setIsLoadingComplementary(false)\n } else {\n fetchComplementaryProducts(productId, (combinations) => {\n setComplementaryProducts(combinations)\n setIsLoadingComplementary(false)\n }, () => {\n setIsLoadingComplementary(false)\n })\n }\n }\n\n\n function quickInstantStore(products) {\n if (isFreeUserAndTrialEnded()) {\n openFreeTrialDialog()\n } else {\n setQuickInstantProducts(products)\n setContentDialogState({isOpen: true})\n }\n }\n\n function closeContentDialog() {\n setContentDialogState({isOpen: false})\n }\n\n function onQuickInstantSuccess() {\n history.push(LINKS_PAGE_URL)\n }\n\n function closeAddProductDialog() {\n setProductsDialogShown(false)\n }\n\n function updateComplementaryMainProduct(products) {\n if (products && products?.length > 0) {\n setIsLoadingComplementary(true)\n setAllowComplementaryExpand(false)\n setComplementaryMainProduct(products[0])\n loadComplementaryProducts(products[0]?.id)\n }\n }\n\n\n function renderTopPerformingProducts() {\n return userDetails?.trends?.topPerformingProducts?.length > 0 ? userDetails?.trends?.topPerformingProducts?.map(product => <ProductItem\n key={product?.id}\n data={product}\n onItemClick={() => {}}\n imageWidth={`${TRENDS_PAGE_PRODUCT_IMAGE_WIDTH_PX}px`}\n imageHeight={`${TRENDS_PAGE_PRODUCT_IMAGE_HEIGHT_PX}px`}\n showSellingScore={true}\n score={product?.sellingScore}\n />) : (\n !isLoadingTopPreforming ? <div className=\"top-performing-products-no-items-found-container\" style={{height: `${TRENDS_PAGE_PRODUCT_IMAGE_HEIGHT_PX}px`}}>\n <BsInfoCircle className={isMobile ? 'mobile-trends-page-no-items-icon' : 'trends-page-no-items-icon'}/>\n <div className={isMobile ? \"mobile-trends-page-no-items-found-title\" : \"trends-page-no-items-found-title\"}>{t(\"TRENDS_PAGE_NO_TOP_PERFORMING_PRODUCTS\")}</div>\n </div> :\n <div className='top-performing-products-loader-container' style={{height: `${TRENDS_PAGE_PRODUCT_IMAGE_HEIGHT_PX}px`}}>\n <Loader styles={{ height: '20px', width: '20px', margin: 'auto' }} />\n </div>\n )\n }\n\n function renderTopCombinations() {\n return userDetails?.trends?.topProductsCombinations?.combinations?.length > 0 ? userDetails?.trends?.topProductsCombinations?.combinations?.map((combination, combinationIndex) => {\n let combinationProducts = combination?.map(productId => userDetails?.trends?.topProductsCombinations?.products?.find(product => product?.id === productId))\n return <div className='trends-page-top-combinations-conatainer' key={generateRandomInteger(1_000_000)}>\n <div className={isMobile ? 'mobile-trends-page-top-combinations-line-conatainer' : 'trends-page-top-combinations-line-conatainer'}>\n <div className={isMobile? 'mobile-trends-page-top-combinations-products-conatainer' : 'trends-page-top-combinations-products-conatainer'}>\n {\n combinationProducts?.map((product, productIndex) => {\n return <div className='trends-page-top-combinations-product-container' key={generateRandomInteger(1_000_000)} style={{width: `calc(${isMobile ? 2.5 : 1} * ${TRENDS_PAGE_PRODUCT_IMAGE_WIDTH_PX}`}}>\n <ProductItem\n key={product.id}\n data={product}\n onItemClick={() => {}}\n imageWidth={`${TRENDS_PAGE_PRODUCT_IMAGE_WIDTH_PX}px`}\n imageHeight={`${TRENDS_PAGE_PRODUCT_IMAGE_HEIGHT_PX}px`}\n />\n {productIndex < combination.length - 1 && <FaPlus className='trends-page-top-combination-plus-icon' style={isMobile ? {marginBottom: `calc(0.6 * ${TRENDS_PAGE_PRODUCT_IMAGE_HEIGHT_PX}px)`} : {}}/>}\n </div>\n })\n }\n </div>\n <div className='trends-page-top-combinations-button-conatainer'>\n <div className=\"trends-page-quick-instant-store-button\" onClick={() => quickInstantStore(combinationProducts)}>{t('TRENDS_PAGE_QUICK_LINK_BUTTON_TEXT')}</div>\n </div>\n </div>\n {combinationIndex < userDetails?.trends?.topProductsCombinations?.combinations.length - 1 && <div className=\"trends-page-horizontal-line\"></div>}\n </div>\n }) : (\n !isLoadingTopCombinations ? <div className=\"top-performing-products-no-items-found-container\" style={{height: `${TRENDS_PAGE_PRODUCT_IMAGE_HEIGHT_PX}px`}}>\n <BsInfoCircle className={isMobile ? 'mobile-trends-page-no-items-icon' : 'trends-page-no-items-icon'}/>\n <div className={isMobile ? \"mobile-trends-page-no-items-found-title\" : \"trends-page-no-items-found-title\"}>{t(\"TRENDS_PAGE_NO_TOP_PERFORMING_PRODUCTS\")}</div>\n </div> :\n <div className='top-performing-products-loader-container' style={{height: `${TRENDS_PAGE_PRODUCT_IMAGE_HEIGHT_PX}px`}}>\n <Loader styles={{ height: '20px', width: '20px', margin: 'auto' }} />\n </div>\n )\n }\n\n\n const complementaryProductsLineRef = useCallback(node => {\n // Callbeck on ref to \n if (node && node?.clientHeight > TRENDS_PAGE_PRODUCT_IMAGE_HEIGHT_PX + 37) {\n setAllowComplementaryExpand(true)\n }\n }, [])\n\n\n function renderProductComplementary() {\n return <div className={isMobile ? 'mobile-complementary-products-container' : 'complementary-products-container'}>\n <div className={isMobile ? 'mobile-trends-page-complementary-main-product-container' : 'trends-page-complementary-main-product-container'}>\n <ImageBox\n className='trends-page-complementary-main-product-image'\n image={complementaryMainProduct?.imageUrl}\n isImageFitCover={true}\n showGreyImageBackground={true}\n styles={isMobile ? {width: '160px', height: '200px'} : {width: '200px', height: '240px'}}\n />\n <div className={isMobile ? 'mobile-trends-page-complementary-main-product-title-container' : 'trends-page-complementary-main-product-title-container'}>\n <MultiLineText\n text={complementaryMainProduct?.title}\n className='trends-page-complementary-main-product-title'\n lines={3}\n treatAsHtml={true}\n />\n {!isMobile ? <Tooltip\n image={<VscArrowSwap className='trends-page-complementary-main-product-swap-icon' onClick={() => setProductsDialogShown(true)} />}\n tooltipText={t(\"TRENDS_PAGE_COMPLEMENTARY_SWAP_ICON_TOOLTIP_TEXT\")}\n displayBubble={!isMobile}\n /> : <div className='trends-page-complementary-switch-product-button-conatainer'>\n <div className=\"trends-page-complementary-swap-product-swap-button\" onClick={() => setProductsDialogShown(true)}>\n <VscArrowSwap className='trends-page-complementary-main-button-product-swap-icon' onClick={() => setProductsDialogShown(true)} />\n {t('TRENDS_PAGE_CHANGE_PRODUCT_BUTTON_TEXT')}\n </div>\n </div>}\n </div>\n </div>\n {\n !isLoadingComplementary ? <div className={isMobile ? 'mobile-trends-page-complementary-complementary-products-container' : 'trends-page-complementary-complementary-products-container'}>\n <CollapsingElement\n expanded={isMobile ? true : complementaryExpended}\n collapsedSize={`${TRENDS_PAGE_PRODUCT_IMAGE_HEIGHT_PX + 37}px`}\n unmountOnExit={false}\n > \n <div className={isMobile ? 'mobile-trends-page-complementary-line-conatainer' : 'trends-page-complementary-line-conatainer'} ref={complementaryProductsLineRef}>\n {\n complementaryProducts?.length > 0 ? complementaryProducts?.map(combination => {\n return <div className='trends-page-complementary-product-container' key={generateRandomInteger(1_000_000)} style={{width: `calc(${isMobile ? 2.5 : 1} * ${TRENDS_PAGE_PRODUCT_IMAGE_WIDTH_PX}`}}>\n <ProductItem\n key={combination?.product.id}\n data={combination?.product}\n onItemClick={() => {}}\n imageWidth={`${TRENDS_PAGE_PRODUCT_IMAGE_WIDTH_PX}px`}\n imageHeight={`${TRENDS_PAGE_PRODUCT_IMAGE_HEIGHT_PX}px`}\n showSellingScore={true}\n score={combination?.combinationScore}\n />\n <div className='trends-page-complementary-button-conatainer'>\n <div className=\"trends-page-quick-complementary-instant-store-button\" onClick={() => quickInstantStore([complementaryMainProduct, combination?.product])}>{t(isMobile ? 'TRENDS_PAGE_QUICK_LINK_BUTTON_MOBILE_TEXT' : 'TRENDS_PAGE_QUICK_LINK_BUTTON_TEXT')}</div>\n </div>\n </div>\n }) : <div className=\"complementary-products-no-items-found-container\" style={{height: `${(isMobile ? 1.6 * TRENDS_PAGE_PRODUCT_IMAGE_HEIGHT_PX : TRENDS_PAGE_PRODUCT_IMAGE_HEIGHT_PX) + 37}px`}}>\n <BsInfoCircle className={isMobile ? 'mobile-trends-page-no-items-icon' : 'trends-page-no-items-icon'}/>\n <div className={isMobile ? \"mobile-trends-page-no-items-found-title\" : \"trends-page-no-items-found-title\"}>{t(\"TRENDS_PAGE_NO_COMPLEMENTARY_PRODUCTS\")}</div>\n </div>\n }\n </div> \n </CollapsingElement>\n {!isMobile && complementaryProducts?.length > 0 && allowComplementaryExpand && <div className=\"trends-page-content-toggle-button\" onClick={() => setComplementaryExpended(prev => !prev)}>{complementaryExpended ? 'Hide' : 'See all'}</div>}\n </div> : <div className={isMobile ? 'mobile-complementary-products-loader-container' : 'complementary-products-loader-container'} style={{height: `${(isMobile ? 1.6 * TRENDS_PAGE_PRODUCT_IMAGE_HEIGHT_PX : TRENDS_PAGE_PRODUCT_IMAGE_HEIGHT_PX) + 37}px`}}>\n <Loader styles={{ height: '20px', width: '20px', margin: 'auto' }} />\n </div>\n }\n </div>\n }\n\n\n\n return (\n <div className={isMobile ? \"mobile-trends-page-container\" : \"trends-page-container\"}>\n {\n !isMobile ? <div className=\"trends-page-topbar\">\n <div className=\"trends-page-topbar-store-name-container\">\n <div className={\"trends-page-topbar-title\"}>{t('TRENDS_PAGE_TITLE')}</div>\n </div>\n </div> : <ContentDialogTopbar\n title={t('TRENDS_PAGE_TITLE')}\n onBackButtonClick={() => history.goBack()}\n rightElement={<></>}\n />\n }\n <div className='trends-page-section' style={isMobile ? {marginTop: '20px'} : null}>\n <div className=\"trends-page-section-titles-container\">\n <div className=\"trends-page-section-titles-div\">\n <div className=\"trends-page-section-title\">{\"Top Performing Products\"}</div>\n <div className=\"trends-page-section-description\">{\"See your top performing products based on your last orders.\"}</div>\n </div>\n {!isMobile && userDetails?.trends?.topPerformingProducts?.length > 0 && <div className=\"trends-page-content-toggle-button\" onClick={() => setTopPerformingProductsExpended(prev => !prev)}>{topPerformingProductsExpended ? 'Hide' : 'See all'}</div>}\n </div>\n {isMobile ? <div className='mobile-top-performing-products-container'>\n <div className='mobile-top-performing-products-strip'>\n {renderTopPerformingProducts()}\n </div>\n </div> : <CollapsingElement\n expanded={topPerformingProductsExpended}\n collapsedSize={`${TRENDS_PAGE_PRODUCT_IMAGE_HEIGHT_PX + 5}px`}\n unmountOnExit={false}\n > \n <div className='top-performing-products-container'>\n {renderTopPerformingProducts()}\n </div>\n </CollapsingElement>}\n </div>\n <div className='trends-page-section'>\n <div className=\"trends-page-section-titles-container\">\n <div className=\"trends-page-section-titles-div\">\n <div className=\"trends-page-section-title\">{\"Best Combinations\"}</div>\n <div className=\"trends-page-section-description\">{\"Identify common products bundeles and enhance cross-selling strategies.\"}</div>\n </div>\n {!isMobile && userDetails?.trends?.topPerformingProducts?.length > 0 && <div className=\"trends-page-content-toggle-button\" onClick={() => setTopCombinationsExpended(prev => !prev)}>{topCombinationsExpended ? 'Hide' : 'See all'}</div>}\n </div>\n <CollapsingElement\n expanded={topCombinationsExpended}\n collapsedSize={`calc(${userDetails?.trends?.topPerformingProducts?.length > 1 ? (isMobile ? 3 : 2) : 1} * ${isMobile ? 1.8 : 1} * ${TRENDS_PAGE_PRODUCT_IMAGE_HEIGHT_PX + 30}px)`}\n unmountOnExit={false}\n > \n <div className='top-combinations-products-container'>\n {renderTopCombinations()}\n </div>\n </CollapsingElement>\n </div>\n {\n complementaryMainProduct && <div className='trends-page-section'>\n <div className=\"trends-page-section-titles-container\">\n <div className=\"trends-page-section-titles-div\">\n <div className=\"trends-page-section-title\">{\"Complementary Products\"}</div>\n <div className=\"trends-page-section-description\">{\"List the top products frequently bought alongside.\"}</div>\n </div>\n </div>\n {renderProductComplementary()}\n </div>\n }\n <ContentDialog\n isDialogOpen={contentDialogState.isOpen}\n handleDialogClose={closeContentDialog}\n mode={VIEW_MODES.CREATE}\n data={{\n linkData: {\n products: quickInstantProducts\n },\n }}\n contentType={CONTENT_TYPES.LINK}\n onSaveSuccess={onQuickInstantSuccess}\n />\n <AddProductsDialog\n isDialogOpen={productsDialogShown}\n handleDialogClose={closeAddProductDialog}\n selectedProducts={[complementaryMainProduct]}\n setSelectedProducts={updateComplementaryMainProduct}\n selectMaxLimit={1}\n selectMinLimit={1}\n />\n </div>\n )\n}","import {\n\tACCOUNT_PAGE_MAX_WIDTH,\n\tANALYTICS_PAGE_MAX_WIDTH,\n\tCREATE_INFLUENCER_PAGE_MAX_WIDTH,\n\tCREATE_NEW_PASSWORD_PAGE_MAX_WIDTH,\n\tLINK_EDIT_PREVIEW_PAGE_MAX_WIDTH,\n\tLINK_PAGES_MAX_WIDTH,\n\tPADDED_PAGES,\n\tPAGE_DEFAULT_MAX_WIDTH,\n\tPREVIEW_SHORT_PAGE_MAX_WIDTH,\n\tPRICING_PLANS_PAGE_MAX_WIDTH,\n\tSHOPIFY_HELP_PAGE_MAX_WIDTH,\n\tTRENDS_PAGE_MAX_WIDTH,\n\tUNLIMITED_WIDTH_PAGES\n} from \"constants/general.constants\"\nimport {\n\tACCOUNT_PAGE_URL,\n\tADMIN_PAGES_URL_PREFIX,\n\tANALYTICS_PAGE_URL,\n\tCREATE_NEW_PASSWORD_PAGE_URL,\n\tEDIT_URL_SUFFIX,\n\tINFLUENCERS_PAGE_URL,\n\tINFLUENCERS_PAGE_URL_PREFIX,\n\tLINKS_PAGE_URL,\n\tLINKS_URL_PREFIX,\n\tPREVIEW_INFLUECNER_PAGE_SUFFIX,\n\tPREVIEW_LINK_PAGE_SUFFIX,\n\tPRICING_PLANS_PAGE_URL,\n\tSHOPIFY_HELP_PAGE_URL,\n\tSHORTS_PAGE_URL,\n\tSHORTS_URL_PREFIX,\n\tAPPEARANCE_PAGE_URL,\n\tHOME_PAGE_URL,\n\tMAGIC_STORE_PAGE_URL,\n\tSHOPBOARD_PAGE_URL,\n\tMULTILINKS_PAGE_URL,\n\tTRENDS_PAGE_URL,\n} from 'constants/routes.constants'\nimport React, { useEffect } from \"react\"\nimport './GeneralLayout.css'\nimport { useGeneralDataContext } from \"contexts/User\"\nimport { isMobile } from 'utils/deviceUtils'\n\nexport default function GeneralLayout({ children }) {\n\tconst { setGeneralData } = useGeneralDataContext()\n\n\tuseEffect(() => {\n\t\twindow.scrollTo(0, 0)\n\t\tsetGeneralData(prev => ({\n\t\t\t...prev,\n\t\t\tpageMaxWidthPx: getMaxWidth()\n\t\t}))\n\t}, [])\n\n\tconst baseLayoutStyles = {\n\t\t...(isLimitedPage() ? { maxWidth: `${getMaxWidth()}px` } : {}),\n\t\t...getPaddingProperty()\n\t}\n\n\tfunction getPaddingProperty() {\n\t\tif (isMobile) {\n\t\t\tif (PADDED_PAGES.includes(window.location.pathname)) {\n\t\t\t\treturn { padding: '0 20px 20px 20px' }\n\t\t\t} else {\n\t\t\t\treturn { padding: '0' }\n\t\t\t}\n\t\t} else {\n\t\t\tif (window.location.pathname === MAGIC_STORE_PAGE_URL) {\n\t\t\t\treturn { padding: 0 }\n\t\t\t}\n\t\t\tif ([LINKS_PAGE_URL, SHORTS_PAGE_URL, MULTILINKS_PAGE_URL, SHOPBOARD_PAGE_URL, TRENDS_PAGE_URL].includes(window.location.pathname)) {\n\t\t\t\treturn { padding: '0px 20px 0px 20px' }\n\t\t\t}\n\t\t\treturn { padding: '40px 20px 20px 20px' }\n\t\t}\n\t}\n\n\tfunction isLimitedPage() {\n\t\treturn !UNLIMITED_WIDTH_PAGES.includes(window.location.pathname)\n\t}\n\n\tfunction getMaxWidth() {\n\t\tif ((window.location.pathname.startsWith(ADMIN_PAGES_URL_PREFIX + LINKS_URL_PREFIX))\n\t\t\t&& (window.location.pathname.endsWith(PREVIEW_LINK_PAGE_SUFFIX) || window.location.pathname.endsWith(EDIT_URL_SUFFIX))) {\n\t\t\treturn LINK_EDIT_PREVIEW_PAGE_MAX_WIDTH\n\t\t}\n\n\t\tif ((window.location.pathname.startsWith(ADMIN_PAGES_URL_PREFIX + INFLUENCERS_PAGE_URL_PREFIX) && window.location.pathname.endsWith(PREVIEW_INFLUECNER_PAGE_SUFFIX))) {\n\t\t\treturn LINK_PAGES_MAX_WIDTH\n\t\t}\n\n\t\tif ((window.location.pathname.startsWith(ADMIN_PAGES_URL_PREFIX + INFLUENCERS_PAGE_URL_PREFIX) && window.location.pathname.endsWith(EDIT_URL_SUFFIX))) {\n\t\t\treturn CREATE_INFLUENCER_PAGE_MAX_WIDTH\n\t\t}\n\n\t\tif (window.location.pathname.startsWith(ADMIN_PAGES_URL_PREFIX + SHORTS_URL_PREFIX) && window.location.pathname.endsWith(PREVIEW_LINK_PAGE_SUFFIX)) {\n\t\t\treturn PREVIEW_SHORT_PAGE_MAX_WIDTH\n\t\t}\n\n\t\tif (window.location.pathname.startsWith(ADMIN_PAGES_URL_PREFIX + SHORTS_URL_PREFIX) && window.location.pathname.endsWith(EDIT_URL_SUFFIX)) {\n\t\t\treturn CREATE_INFLUENCER_PAGE_MAX_WIDTH\n\t\t}\n\n\t\tswitch (window.location.pathname) {\n\t\t\tcase ACCOUNT_PAGE_URL:\n\t\t\tcase APPEARANCE_PAGE_URL:\n\t\t\t\treturn ACCOUNT_PAGE_MAX_WIDTH\n\n\t\t\tcase LINKS_PAGE_URL:\n\t\t\tcase MULTILINKS_PAGE_URL:\n\t\t\tcase INFLUENCERS_PAGE_URL:\n\t\t\tcase SHORTS_PAGE_URL:\n\t\t\tcase HOME_PAGE_URL:\n\t\t\tcase SHOPBOARD_PAGE_URL:\n\t\t\t\treturn LINK_PAGES_MAX_WIDTH\n\t\t\t\t\n\t\t\tcase TRENDS_PAGE_URL:\n\t\t\t\treturn TRENDS_PAGE_MAX_WIDTH\n\t\t\t\t\n\t\t\tcase PRICING_PLANS_PAGE_URL:\n\t\t\t\treturn PRICING_PLANS_PAGE_MAX_WIDTH\n\n\t\t\tcase SHOPIFY_HELP_PAGE_URL:\n\t\t\t\treturn SHOPIFY_HELP_PAGE_MAX_WIDTH\n\n\t\t\tcase CREATE_NEW_PASSWORD_PAGE_URL:\n\t\t\t\treturn CREATE_NEW_PASSWORD_PAGE_MAX_WIDTH\n\n\t\t\tcase ANALYTICS_PAGE_URL:\n\t\t\t\treturn ANALYTICS_PAGE_MAX_WIDTH\n\n\t\t\tdefault: return PAGE_DEFAULT_MAX_WIDTH\n\t\t}\n\t}\n\n\treturn (\n\t\t<div className=\"general-layout-container\">\n\t\t\t<div className=\"general-layout-content-container\" style={baseLayoutStyles}>\n\t\t\t\t{children}\n\t\t\t</div>\n\t\t</div>\n\t)\n}","import React from \"react\"\nimport { useUserDetailsContext } from 'contexts/User'\nimport { Redirect } from \"react-router-dom\"\nimport { EXTERNAL_AUTH_PAGE_URL, LOGIN_PAGE_URL } from 'constants/routes.constants'\nimport GeneralLayout from \"./GeneralLayout/GeneralLayout\";\n\nconst AuthLayout = ({ children }) => {\n\tconst {\n\t\tuserDetails\n\t} = useUserDetailsContext()\n\n\tif (!userDetails?.isAuthenticated) {\n\t\treturn (\n\t\t\t<Redirect to={{ pathname: LOGIN_PAGE_URL, search: window.location.pathname === EXTERNAL_AUTH_PAGE_URL ? window.location.search : \"\" }} />\n\t\t)\n\t}\n\t\n\treturn (\n\t\t<GeneralLayout>\n\t\t\t{children}\n\t\t</GeneralLayout>\n\t)\n};\n\nexport default AuthLayout","import React from 'react'\nimport { useTranslation } from 'react-i18next';\n\nexport default function NotFound() {\n const { t } = useTranslation();\n\n return (\n\n <div>\n <br></br>\n <br></br>\n <br></br>\n <p style={{ fontSize: \"60px\", textAlign: \"center\" }}>{t(\"NOT_FOUND_PAGE_WELCOME_TITLE\")}</p>\n <p style={{ fontSize: \"40px\", textAlign: \"center\" }}>{t(\"NOT_FOUND_PAGE_WRONG_TITLE\")}</p>\n <br></br>\n <br></br>\n <br></br>\n <br></br>\n <br></br>\n <br></br>\n <p style={{ fontSize: \"30px\", textAlign: \"center\" }}>{t(\"NOT_FOUND_PAGE_TRY_AGIAN_TITLE\")}</p>\n </div>\n );\n}","import React from 'react'\nimport './Splash.css'\nimport LoaderPage from '../LoaderPage/LoaderPage'\n\n/**\n * Represents the splash screen (first screen of the app).\n */\nexport default function Splash() {\n return (\n <div className=\"splash-container\">\n <LoaderPage isSplash={true} animatedString=\"Shopeaks\" isFullScreen={true} />\n </div>\n )\n}","import React from 'react'\nimport './PrivaciesFooterText.css'\nimport { Trans } from 'react-i18next'\nimport { LOGIN_PAGE_URL, PRIVACY_POLICY_PAGE_URL, TERMS_PAGE_URL } from 'constants/routes.constants'\nimport { Link } from 'react-router-dom'\nimport { isMobile } from 'utils/deviceUtils'\n\n/**\n * Represents a privacy policy instruction text.\n */\nexport default function PrivaciesFooterText() {\n\n function getPoliciesFooterTextI18NextKey() {\n if (window.location.pathname === LOGIN_PAGE_URL)\n return \"LOGIN_PAGE_POLICIES_FOOTER_TEXT\"\n return \"SIGN_UP_PAGE_POLICIES_FOOTER_TEXT\"\n }\n\n return (\n <div className={isMobile ? \"mobile-policies-footer-text\" : \"policies-footer-text\"}>\n <div className={isMobile ? 'mobile-policies-footer-text-space-block' : 'policies-footer-text-space-block'}></div>\n <Trans\n i18nKey={getPoliciesFooterTextI18NextKey()}\n components={{ \n p: <Link to={PRIVACY_POLICY_PAGE_URL} className='policies-footer-text-link' />,\n t: <Link to={TERMS_PAGE_URL} className='policies-footer-text-link' /> \n }}\n />\n </div>\n )\n}","import React from 'react'\nimport './PasswordInputRule.css'\nimport { GrFormClose } from 'react-icons/gr'\nimport { BiCheck } from 'react-icons/bi'\n\n/**\n * Represents a rule for {@link PasswordInput} component.\n * Displays the rule text and an image indicating its validation status.\n * @param {string} text - The text of this rule\n * @param {boolean} fulfilled - Determins whether this rule is fulfilled or not\n */\nexport default function PasswordInputRule({\n text,\n fulfilled\n}) {\n return (\n <div className={`password-input-rule-container ${fulfilled ? 'fulfilled' : ''}`}>\n {\n fulfilled ? \n <BiCheck className='password-input-rule-validation-image-fulfilled password-input-rule-image' /> : \n <GrFormClose className='password-input-rule-validation-image password-input-rule-image' />\n }\n <div className=\"password-input-rule-text\">{text}</div>\n </div>\n )\n}","import React, { useEffect, useState } from 'react'\nimport './PasswordInput.css'\nimport EditFieldSectionInput from 'components/EditFieldSectionInput/EditFieldSectionInput'\nimport { useTranslation } from 'react-i18next'\nimport PasswordInputRule from 'components/PasswordInputRule/PasswordInputRule'\nimport { containsNumbers } from 'utils/utils'\nimport { USER_PASSWORD_MIN_LENGTH } from 'constants/general.constants'\n\n/**\n * Represents a password input field with password guidelines.\n * Uses {@link EditFieldSectionInput} component for rendering the input field.\n * @param {string} title - The title for this password input field\n * @param {string} value - The value state for this input field\n * @param {function} setValue - A function for setting the value state of this input field\n * @param {function} setValidationStatus - A function for setting the validation status of the password input field\n */\nexport default function PasswordInput({\n title,\n value,\n setValue = () => { },\n setValidationStatus = () => { }\n}) {\n const { t } = useTranslation()\n const [passwordContract, setPasswordContract] = useState({\n rule1: {\n instruction: t('PASSWORD_INPUT_RULE_1_INSTRUCTION', { lengthLimit: USER_PASSWORD_MIN_LENGTH }),\n fulfilled: false\n },\n rule2: {\n instruction: t('PASSWORD_INPUT_RULE_2_INSTRUCTION'),\n fulfilled: false\n }\n })\n\n useEffect(() => {\n // checking rule 1\n if (value?.length >= USER_PASSWORD_MIN_LENGTH) {\n setPasswordContract(prev => ({\n ...prev,\n rule1: {\n ...prev.rule1,\n fulfilled: true\n }\n }))\n } else {\n setPasswordContract(prev => ({\n ...prev,\n rule1: {\n ...prev.rule1,\n fulfilled: false\n }\n }))\n }\n\n // checking rule 2\n if (containsNumbers(value)) {\n setPasswordContract(prev => ({\n ...prev,\n rule2: {\n ...prev.rule2,\n fulfilled: true\n }\n }))\n } else {\n setPasswordContract(prev => ({\n ...prev,\n rule2: {\n ...prev.rule2,\n fulfilled: false\n }\n }))\n }\n }, [value])\n\n useEffect(() => {\n setValidationStatus(\n passwordContract.rule1.fulfilled &&\n passwordContract.rule2.fulfilled\n )\n }, [passwordContract])\n\n return (\n <div className='password-input-container'>\n <EditFieldSectionInput\n title={title}\n value={value}\n setValue={setValue}\n isPassword={true}\n hasValidation={true}\n enlargedTextField={true}\n id=\"password\"\n />\n {\n value ? <div className='password-input-instruction-list'>\n {\n Object.keys(passwordContract).map(rule => <PasswordInputRule\n key={passwordContract[rule].instruction + '_' + passwordContract[rule].fulfilled}\n text={passwordContract[rule].instruction}\n fulfilled={passwordContract[rule].fulfilled}\n />)\n }\n </div> : <div className=\"password-input-instruction\">{t('PASSWORD_INPUT_INSTRUCTION', { lengthLimit: USER_PASSWORD_MIN_LENGTH })}</div>\n }\n </div>\n )\n}","import React from 'react'\nimport './AlreadyHaveAccount.css'\nimport { useHistoryContext } from 'contexts/History'\nimport { LOGIN_PAGE_URL } from 'constants/routes.constants'\nimport { useTranslation } from 'react-i18next'\n\n/**\n * Represents the line \"Already have an account? Log in\" inside authentication pages.\n */\nexport default function AlreadyHaveAccount({\n navigationUrl = LOGIN_PAGE_URL\n}) {\n const { t } = useTranslation()\n const history = useHistoryContext()\n\n function navigate() {\n history.push(navigationUrl)\n }\n\n return (\n <div className=\"already-have-account-container\">\n <div className=\"already-have-account-label\">{t('ALREADY_HAVE_ACCOUNT_LABEL_TEXT')}</div>\n <div className=\"already-have-account-login-button\" onClick={navigate}>{t('ALREADY_HAVE_ACCOUNT_LOGIN_BUTTON_TEXT')}</div>\n </div>\n )\n}","import React from 'react'\nimport './CheckYourEmail.css'\nimport { BsEnvelope } from \"react-icons/bs\"\nimport { useTranslation } from 'react-i18next'\nimport AlreadyHaveAccount from 'components/AlreadyHaveAccount/AlreadyHaveAccount'\n\n/**\n * Represents a page that notifies the user about a validation email sent to his mailbox.\n * @param {string} username - The username to display\n * @param {string} email - The email to display\n * @param {function} onBackClick - A function to perform whenever the \"Go back\" button was clicked\n */\nexport default function CheckYourEmail({\n username,\n email,\n onBackClick = () => { }\n}) {\n const { t } = useTranslation()\n\n return (\n <div className='check-your-email-container'>\n <div className=\"check-your-email-message-section check-your-email-section\">\n <BsEnvelope className='check-your-email-image' />\n <div className=\"check-your-email-message\">{t('CHECK_YOUR_EMAIL_MESSAGE_TEXT', { username, email })}</div>\n <div className=\"check-your-email-go-back-button\" onClick={onBackClick}>{t('CHECK_YOUR_EMAIL_GO_BACK_BUTTON_TEXT')}</div>\n </div>\n <div className=\"check-your-email-lower-section check-your-email-section\">\n <AlreadyHaveAccount />\n </div>\n </div>\n )\n}","import React, { useRef, useState } from 'react'\nimport './SignUpPage.css'\nimport { useTranslation } from 'react-i18next'\nimport { EMAIL_PATTERN_REGEX } from 'constants/regex.constants'\nimport {\n BOXED_MESSAGE_TYPES,\n INPUT_VALIDATION_INDICATIONS,\n USERNAME_FIELD_PREFIX,\n SIGN_UP_PAGE_VALIDATE_FIELD_REQUEST_SEND_DELAY_MILLISECONDS,\n} from 'constants/general.constants'\nimport LoaderButton from 'components/LoaderButton/LoaderButton'\nimport { useAuthContext } from 'contexts/User'\nimport BoxedMessage from 'components/BoxedMessage/BoxedMessage'\nimport { containsWhitespace, formatUsername } from 'utils/utils'\nimport PrivaciesFooterText from 'components/PrivaciesFooterText/PrivaciesFooterText'\nimport { ValidateEmail, ValidateUsername } from 'api/auth/auth'\nimport PaydinDialog from 'dialogs/PaydinDialog/PaydinDialog'\nimport EditFieldSectionInput from 'components/EditFieldSectionInput/EditFieldSectionInput'\nimport PasswordInput from 'components/PasswordInput/PasswordInput'\nimport CheckYourEmail from 'components/CheckYourEmail/CheckYourEmail'\nimport AlreadyHaveAccount from 'components/AlreadyHaveAccount/AlreadyHaveAccount'\n\nexport default function SignUpPage() {\n const { t } = useTranslation()\n const { register } = useAuthContext()\n\n const [isSignUpInProcess, setIsSignUpInProcess] = useState(false)\n const [inputState, setInputState] = useState({\n username: '',\n email: '',\n password: ''\n })\n const [boxedMessageState, setBoxedMessageState] = useState({\n isOpen: false,\n message: ''\n })\n const [usernameValidationState, setUsernameValidationState] = useState({\n isValidating: false,\n validationResult: INPUT_VALIDATION_INDICATIONS.NO_INDICATION\n })\n const [emailValidationState, setEmailValidationState] = useState({\n isValidating: false,\n validationResult: INPUT_VALIDATION_INDICATIONS.NO_INDICATION\n })\n const [isPasswordValid, setIsPasswordValid] = useState(false)\n const [dialogState, setDialogState] = useState({\n isOpen: false,\n handleDialogClose: closeDialog,\n title: '',\n message: '',\n leftButtonText: '',\n rightButtonText: '',\n rightButtonClickHandler: () => { }\n })\n const [validationErrorState, setValidationErrorState] = useState({\n username: '',\n email: ''\n })\n const [isRegisteredSuccessfully, setIsRegisteredSuccessfully] = useState(false)\n\n const typingTimeoutRef = useRef(null)\n\n function closeDialog() {\n setDialogState(prev => ({\n ...prev,\n isOpen: false\n }))\n }\n\n function clearTypingTimeout(timeout) {\n timeout && clearTimeout(timeout)\n }\n\n function setUsername(username) {\n clearTypingTimeout(typingTimeoutRef.current)\n\n setInputState(prev => {\n return {\n ...prev,\n username: formatUsername(username),\n }\n })\n\n if (username.length === 0) {\n setUsernameValidationState(prev => ({\n ...prev,\n validationResult: INPUT_VALIDATION_INDICATIONS.NO_INDICATION\n }))\n return\n }\n\n typingTimeoutRef.current = setTimeout(() => {\n validateUsername(username)\n }, SIGN_UP_PAGE_VALIDATE_FIELD_REQUEST_SEND_DELAY_MILLISECONDS)\n }\n\n function setEmail(email) {\n clearTypingTimeout(typingTimeoutRef.current)\n\n setInputState(prev => {\n return {\n ...prev,\n email: email.replace(/\\s/g, ''),\n }\n })\n\n if (email.length === 0) {\n setEmailValidationState(prev => ({\n ...prev,\n validationResult: INPUT_VALIDATION_INDICATIONS.NO_INDICATION\n }))\n return\n }\n\n typingTimeoutRef.current = setTimeout(() => {\n validateEmail(email)\n }, SIGN_UP_PAGE_VALIDATE_FIELD_REQUEST_SEND_DELAY_MILLISECONDS)\n }\n\n function setPassword(password) {\n setInputState(prev => {\n return {\n ...prev,\n password,\n }\n })\n }\n\n function resetAllFields() {\n setInputState({\n username: '',\n email: '',\n password: ''\n })\n setUsernameValidationState(prev => ({\n ...prev,\n validationResult: INPUT_VALIDATION_INDICATIONS.NO_INDICATION\n }))\n setEmailValidationState(prev => ({\n ...prev,\n validationResult: INPUT_VALIDATION_INDICATIONS.NO_INDICATION\n }))\n }\n\n function handleSignUp() {\n setBoxedMessageState(prev => ({\n ...prev,\n isOpen: false\n }))\n setIsSignUpInProcess(true)\n register(inputState.username, inputState.password, inputState.email, () => {\n setIsSignUpInProcess(false)\n setIsRegisteredSuccessfully(true)\n }, _ => {\n setIsSignUpInProcess(false)\n setBoxedMessageState({\n isOpen: true,\n message: t('SIGN_UP_PAGE_SIGN_UP_ERROR_MESSAGE_TEXT')\n })\n })\n }\n\n function isUsernameValid() {\n return !containsWhitespace(inputState.username)\n }\n\n function isEmailValid(email) {\n return EMAIL_PATTERN_REGEX.test(email)\n }\n\n function isAbleToSignUp() {\n return (\n usernameValidationState.validationResult === INPUT_VALIDATION_INDICATIONS.VALID &&\n emailValidationState.validationResult === INPUT_VALIDATION_INDICATIONS.VALID &&\n isPasswordValid\n )\n }\n\n function validateUsername(username) {\n if (!isUsernameValid(username)) {\n setUsernameValidationState({\n isValidating: false,\n validationResult: INPUT_VALIDATION_INDICATIONS.INVALID\n })\n setValidationErrorState(prev => ({\n ...prev,\n username: t('SIGN_UP_PAGE_INCORRECT_USERNAME_FORMAT_VALIDATION_ERROR_MESSAGE')\n }))\n } else {\n setUsernameValidationState(prev => ({\n ...prev,\n isValidating: true\n }))\n ValidateUsername(username)\n .then(_ => {\n setUsernameValidationState({\n isValidating: false,\n validationResult: INPUT_VALIDATION_INDICATIONS.VALID\n })\n })\n .catch(error => {\n setUsernameValidationState({\n isValidating: false,\n validationResult: INPUT_VALIDATION_INDICATIONS.INVALID\n })\n setValidationErrorState(prev => ({\n username: t('SIGN_UP_PAGE_DUPLICATE_USERNAME_VALIDATION_ERROR_MESSAGE')\n }))\n })\n }\n }\n\n function validateEmail(email) {\n if (!isEmailValid(email)) {\n setEmailValidationState({\n isValidating: false,\n validationResult: INPUT_VALIDATION_INDICATIONS.INVALID\n })\n setValidationErrorState(prev => ({\n ...prev,\n email: t('SIGN_UP_PAGE_INCORRECT_EMAIL_FORMAT_VALIDATION_ERROR_MESSAGE')\n }))\n } else {\n setEmailValidationState(prev => ({\n ...prev,\n isValidating: true\n }))\n ValidateEmail(email)\n .then(response => {\n setEmailValidationState({\n isValidating: false,\n validationResult: INPUT_VALIDATION_INDICATIONS.VALID\n })\n })\n .catch(error => {\n setEmailValidationState({\n isValidating: false,\n validationResult: INPUT_VALIDATION_INDICATIONS.INVALID\n })\n setValidationErrorState(prev => ({\n ...prev,\n email: t('SIGN_UP_PAGE_DUPLICATE_EMAIL_VALIDATION_ERROR_MESSAGE')\n }))\n })\n }\n }\n\n function onSignUpSuccessGoBackClick() {\n resetAllFields()\n setIsRegisteredSuccessfully(false)\n }\n\n return (\n <div className={`sign-up-page-container ${isRegisteredSuccessfully ? 'register-success' : ''}`}>\n {isRegisteredSuccessfully ? <CheckYourEmail\n username={inputState.username}\n email={inputState.email}\n onBackClick={onSignUpSuccessGoBackClick}\n /> : <form dir={t('direction.dir')} className=\"sign-up-page-content\">\n <div className=\"sign-up-page-title auth-page-title\">{t('SIGN_UP_PAGE_TITLE')}</div>\n {\n boxedMessageState.isOpen && <BoxedMessage\n message={boxedMessageState.message}\n type={BOXED_MESSAGE_TYPES.ERROR} />\n }\n <div className=\"sign-up-page-fields-form\">\n <EditFieldSectionInput\n placeholder={t('SIGN_UP_PAGE_USERNAME_INPUT_PLACEHOLDER')}\n prefix={USERNAME_FIELD_PREFIX}\n isEmbeddedPrefix={true}\n value={inputState.username}\n setValue={setUsername}\n hasValidation={true}\n isValidating={usernameValidationState.isValidating}\n validationStatus={usernameValidationState.validationResult}\n validationErrorMessage={validationErrorState.username}\n enlargedTextField={true}\n id=\"username\"\n />\n <EditFieldSectionInput\n title={t('SIGN_UP_PAGE_EMAIL_INPUT_PLACEHOLDER')}\n value={inputState.email}\n setValue={setEmail}\n hasValidation={true}\n isValidating={emailValidationState.isValidating}\n validationStatus={emailValidationState.validationResult}\n validationErrorMessage={validationErrorState.email}\n enlargedTextField={true}\n id=\"email\"\n />\n <PasswordInput\n title={t('SIGN_UP_PAGE_PASSWORD_INPUT_PLACEHOLDER')}\n value={inputState.password}\n setValue={setPassword}\n setValidationStatus={setIsPasswordValid}\n />\n </div>\n <LoaderButton\n className=\"sign-up-page-sign-up-button\"\n buttonText={t('SIGN_UP_PAGE_SIGN_UP_BUTTON_TEXT')}\n isLoading={isSignUpInProcess}\n renderAsButton={true}\n isDisabled={!isAbleToSignUp()}\n onClick={handleSignUp}\n />\n <AlreadyHaveAccount />\n <PrivaciesFooterText />\n </form>}\n <PaydinDialog\n isDialogOpen={dialogState.isOpen}\n handleDialogClose={dialogState.handleDialogClose}\n title={dialogState.title}\n message={dialogState.message}\n closeOnRightClick={false}\n leftButtonText={dialogState.leftButtonText}\n isLeftButtonWithLoader={false}\n />\n </div>\n )\n}","import React from 'react'\nimport './ExternalAuthPage.css'\nimport ShopifyConnect from 'components/ShopifyConnect/ShopifyConnect'\nimport { useUserDetailsContext } from 'contexts/User'\n\nexport default function ExternalAuthPage() {\n const { \n hasShopifyStore\n } = useUserDetailsContext()\n\n return (\n <div className='external-auth-page-container'>\n <div className=\"external-auth-page-content top-bar-page\">\n <ShopifyConnect hasShopifyStore={hasShopifyStore()} />\n </div>\n </div>\n )\n}","import React, { useState } from 'react'\nimport './CreateNewPasswordPage.css'\nimport { useTranslation } from 'react-i18next'\nimport { BOXED_MESSAGE_TYPES } from 'constants/general.constants'\nimport LoaderButton from 'components/LoaderButton/LoaderButton'\nimport BoxedMessage from 'components/BoxedMessage/BoxedMessage'\nimport { getQueryVariable } from 'services/SystemService'\nimport { LOGIN_PAGE_URL, RESET_PASSWORD_TOKEN_QUERY_PARAMETER_KEY } from 'constants/routes.constants'\nimport { ResetPasswordAPI } from 'api/auth/auth'\nimport { useHistoryContext } from 'contexts/History'\nimport PasswordInput from 'components/PasswordInput/PasswordInput'\n\nexport default function CreateNewPasswordPage() {\n const history = useHistoryContext()\n const { t } = useTranslation()\n\n const [isAbleToResetPassword, setIsAbleToResetPassword] = useState(false)\n const [inputState, setInputState] = useState({\n password: ''\n })\n const [boxedMessageState, setBoxedMessageState] = useState({\n isOpen: false,\n message: '',\n type: BOXED_MESSAGE_TYPES.ERROR\n })\n const [isResetPasswordInProgress, setIsResetPasswordInProgress] = useState(false)\n\n function createNewPassword() {\n setIsResetPasswordInProgress(true)\n const resetPasswordToken = getQueryVariable(RESET_PASSWORD_TOKEN_QUERY_PARAMETER_KEY, \"\")\n ResetPasswordAPI(resetPasswordToken, inputState.password)\n .then(() => {\n history.replace(LOGIN_PAGE_URL)\n }).catch(error => {\n console.log(error)\n setIsResetPasswordInProgress(false)\n setBoxedMessageState({\n isOpen: true,\n message: t('CREATE_NEW_PASSWORD_PAGE_RESET_PASSWORD_ERROR_DIALOG_TITLE'),\n type: BOXED_MESSAGE_TYPES.ERROR\n })\n })\n }\n\n function setPassword(value) {\n setInputState(prev => ({\n ...prev,\n password: value\n }))\n }\n\n return (\n <div className='create-new-password-page-container'>\n <form className=\"create-new-password-page-content\">\n <h1 className=\"create-new-password-page-title\">{t('CREATE_NEW_PASSWORD_PAGE_TITLE')}</h1>\n {\n boxedMessageState.isOpen && <BoxedMessage\n message={boxedMessageState.isOpen}\n type={boxedMessageState.type} />\n }\n <div className=\"create-new-password-page-password-input-button-section\">\n <PasswordInput\n title={t('SIGN_UP_PAGE_PASSWORD_INPUT_PLACEHOLDER')}\n value={inputState.password}\n setValue={setPassword}\n setValidationStatus={setIsAbleToResetPassword}\n />\n <LoaderButton\n className='create-new-password-reset-password-button'\n buttonText={t('CREATE_NEW_PASSWORD_PAGE_RESET_PASSWORD_BUTTON_TEXT')}\n isLoading={isResetPasswordInProgress}\n isDisabled={!isAbleToResetPassword}\n onClick={createNewPassword}\n renderAsButton={true} />\n </div>\n </form>\n </div>\n )\n}","import React from 'react'\nimport './PrivacyPolicyPage.css'\nimport { MdOutlineArrowBackIos } from 'react-icons/md'\nimport { useHistoryContext } from 'contexts/History'\nimport { environment } from 'conf'\n\nexport default function PrivacyPolicyPage() {\n const history = useHistoryContext()\n\n function goBack() {\n history.goBack()\n }\n\n return (\n <div className='privacy-policy-page-container'>\n <div className=\"privacy-policy-page-back-button-container\">\n <MdOutlineArrowBackIos className='privacy-policy-page-back-button' onClick={goBack} />\n </div>\n <div className=\"privacy-policy-page-content\">\n <h2 className=\"privacy-policy-page-title\">Privacy Policy</h2>\n <div className=\"privacy-policy-page-subtitle\">Last updated: 9 May 2023</div>\n <div className=\"privacy-policy-page-subtitle\">What does Shopeaks do?</div>\n <p>\n Shopeaks is the platform for you creating a better experience in the for your customers in your social networks. With Shopeaks you can create links to multiple items and connect them to you social media posts. Our Website (located at <a href={`${environment.dashboard_url}`}>{`${environment.dashboard_url}`}</a>) and other digital properties (together our “Platformâ€) provides information about us and allows individuals and businesses to sign-up as Shopeaks Users.\n The links that Shopeaks Users are able to create using the Shopeaks Services are referred to in this Privacy Notice as “shopeaks“. Shopeaks links are accessible by the public.\n We are headquartered in Israel.\n </p>\n <div className=\"privacy-policy-page-subtitle\">How does this Privacy Notice apply to me?</div>\n <p>This Privacy Notice only applies to personal information we collect as a controller from:</p>\n <ul>\n <li>Visitors to our Platform (“Platform Visitors“);</li>\n <li>Individuals, representatives of individuals, or companies that sign up to use our Shopeaks Services via a paid plan (“Paid Plan Users“) or free plan (“Free Plan Users“), together our “Shopeaks Users“;</li>\n <li>Individuals that sign up to subscribe to and/or follow User Profiles (“Subscribers“);</li>\n <li>individuals that visit and interact with User Profiles (“Profile Visitors“);</li>\n </ul>\n <p>\n This Privacy Notice, applies to the processing of personal information by Shopeaks as a controller. When we talk about Shopeaks acting as a “controllerâ€, we mean that Shopeaks determines the purpose and the means of the processing (i.e. we make decisions about how we will handle your personal information). Because of the nature of our services, we can also act as a “processor†on behalf of Shopeaks Users. This means that, when we are instructed by a Shopeaks User, we can facilitate processing of Profile Visitors’ and Subscribers’ personal information on behalf of that Shopeaks User (“Processor Services“). This Privacy Notice does not address Processor Services. If you are a Profile Visitor or Subscriber and want to know how a Shopeaks User handles your personal information, please get in touch with the Shopeaks User directly and/or refer to any privacy notice on the relevant User Shop.\n If you provide us with information about another person (if, for example, you are a representative of an individual), you must provide them with a copy of this Privacy Notice and let that other person know that we use their personal information in the ways set out in this Privacy Notice.\n\n </p>\n <div className=\"privacy-policy-page-subtitle\">What personal information do we collect?</div>\n <p>The personal information that we may collect about you broadly falls into the following categories:</p>\n <ul>\n <li>\n <div className='privacy-policy-page-list-item-header'>Information you provide voluntarily</div>\n When you sign up to become a Shopeaks User, a Subscriber, use or interact with our Shopeaks Services or staff, visit our Platform, visit a User link, respond to a survey or participate in a trade promotion we may ask you to provide personal information voluntarily. For example, if you are a Free Plan User we will ask you to provide your email address, name, username, hashed password, vertical (industry to which your account relates) and marketing preferences. If you are a Paid Plan User we will also ask for your full name, billing email address, billing address and payment method in order to facilitate billing. If you are a Subscriber, we will ask you to provide your email address or SMS number. To opt-out of marketing communications we send you at any time. You can exercise this right by clicking on the “unsubscribe†or “opt-out†link in the marketing e-mails or SMS we may send you or completing our Data Request Form. You may also provide us with your personal data when you submit queries or make a report to us (such as an Intellectual Property Report or Counter Notice). For example, we may ask you to provide your name and email address so that we can respond to your queries. If you are making an Intellectual Property Report or Counter Notice, we ask you to provide your name, address, email address, phone number and details regarding the intellectual property rights concerned. If you are a Profile Visitor, a User might request that you provide your email address, mobile number, date of birth or age, or other personal information in order to access elements of a User Profile (such as locked content). We may use the results of such access (i.e. successful or unsuccessful access attempts) to produce aggregated statistics for our own internal purposes and to improve the Shopeaks Services. You may also provide personal information voluntarily if you respond to our surveys, marketing materials, or through your participation in trade promotions and competitions we may run from time to time.\n </li>\n <li>\n <div className='privacy-policy-page-list-item-header'>Information that we collect automatically</div>\n When you visit our Platform, use our Shopeaks Services, interact with a User link, respond to a survey or participate in a trade promotion we collect certain information automatically from your device. In some countries, including countries in the European Economic Area and UK, this information may be considered personal information under applicable data protection laws. Specifically, the information we collect automatically may include information like your IP address, device type, unique device identification numbers, browser-type, broad geographic location (e.g. country or city-level location), time zone, usage data, diagnostic data and other technical information. We may also collect information about how your device has interacted with our Platform, Shopeaks Service or links, including the pages accessed. Collecting this information enables us to better understand you, where you come from, and what content is of interest to you. We use this information for our internal analytics purposes, to improve the quality and relevance of our Platform and Palink Services, to provide hints and tips to our Shopeaks Users and to make recommendations of Shopeaks links you might be interested in viewing. Some of this information may be collected using cookies and similar tracking technology, as explained further under the heading “How do we use cookies and similar tracking technology†below. Further, we may undertake automatic scanning of User Profiles and links to determine whether mandatory or default sensitive content warnings should be applied and presented to Profile Visitors who wish to access the relevant User Profile or linked content, and to determine if any content should be removed or any User Profiles should be suspended in line with our Community Standards and/or Terms of Service. Where a User changes their User Profile, we will also notify relevant Subscribers to that User Profile that updates have been made.\n </li>\n <li>\n <div className='privacy-policy-page-list-item-header'>Information that we obtain from third party sources</div>\n From time to time, we may receive personal information about you from third party sources (including from service providers that help us run marketing campaigns or competitions and our partners who help us provide our Shopeaks Services). In all cases, we will only receive such data where we have checked that these third parties either have your consent or are otherwise legally permitted or required to disclose your personal information to us.\n </li>\n <li>\n <div className='privacy-policy-page-list-item-header'>Children’s data</div>\n Our services are not intended for use by children under the age of 18 (the “Age Limitâ€). If you are under the Age Limit, please do not use the Shopeaks Services and do not provide us with your personal information. If you are a parent or guardian and you are aware that an individual (of whom you are a parent or guardian) under the Age Limit has provided us with personal information, please contact us. We will, upon notice or discovery, take all reasonable efforts to erase or destroy any personal information that may have been collected or stored by us about that individual.\n </li>\n </ul>\n <div className=\"privacy-policy-page-subtitle\">Why do we collect your personal information?</div>\n <p>\n In general, we will use the information we collect for the purposes described in this Privacy Notice or for purposes that we explain to you at the time we collect your personal information. These include:\n </p>\n <ul>\n <li>To provide and deliver the Shopeaks Services and to assess, maintain and improve the performance and functionality of the Shopeaks Services.</li>\n <li>To ensure the Shopeaks Services are relevant to you and your device, to notify you about changes to the Shopeaks Services, and to deliver targeted and/or localized content based on your user data, location and preferences.</li>\n <li>For consumer research and to allow you to participate in surveys or interactive features of the Shopeaks Services when you choose to do so.</li>\n <li>To provide customer support and to process and respond to a request, complaint or Intellectual Property Report or Counter Notice that you may have made.</li>\n <li>To monitor the usage of the Shopeaks Services and to detect, prevent and address technical issues.</li>\n <li>To process payments for Paid Plan Users.</li>\n <li>To conduct business planning, reporting, and forecasting.</li>\n <li>To deliver promotional materials, special offers and general information about other goods, services and events which we offer that are similar to those that you have already purchased or enquired about unless you have opted out of receiving such information.</li>\n <li>For the administration of our business including for fulfilling and exercising our obligations and rights, exercising or defending legal claims, to comply with our legal obligations and law enforcement requests, and managing the relationship with you.</li>\n <li>To verify your identity and to detect fraud and potential fraud, including fraudulent payments and fraudulent use of the Shopeaks Services.</li>\n <li>To include Shopeaks User content as part of our advertising and marketing campaigns to promote Shopeaks.</li>\n <li>To inform our algorithms so we can deliver the most relevant recommendations to you, including of User Profiles that you may be interested in.</li>\n </ul>\n <div className=\"privacy-policy-page-subtitle\">Legal basis for processing personal information</div>\n <p>\n Our legal basis for collecting and using personal information described above will depend on the personal information concerned and the specific circumstances in which we collect it.\n </p>\n <p>\n However, we will normally collect personal information from you only where we have your consent, where we need the personal information to perform a contract with you, or where the processing is in our legitimate interests and not overridden by your data protection interests or fundamental rights and freedoms. In some cases, we may also have a legal obligation to collect personal information from you, or may otherwise need the personal information to protect your vital interests or those of another person.\n If we ask you to provide personal information to comply with a legal requirement we will make this clear at the relevant time and advise you whether the provision of your personal information is mandatory or not (as well as of the possible consequences if you do not provide your personal information). As indicated above, we require certain personal information to enter into a contract with you as a Shopeaks User. Without your personal information, we will be unable to provide you with Shopeaks Services available to Shopeaks Users.\n </p>\n <p>\n If we collect and use your personal information in reliance on our legitimate interests (or those of any third party), this interest will normally be to develop and improve the Shopeaks Services, to provide additional functionality, to ensure appropriate security or to implement sensitive content warnings and content moderation. We may have other legitimate interests, and if appropriate, we will make clear to you at the relevant time what those legitimate interests are.\n </p>\n <p>\n If you have questions about or need further information concerning the legal basis on which we collect and use your personal information, please contact us using the contact details provided under the “Contact Us†heading below.\n </p>\n <div className=\"privacy-policy-page-subtitle\">Who may we disclose your personal information to?</div>\n <p>\n We may disclose your personal information to the following categories of recipients:\n </p>\n <ul>\n <li>to our group companies, third party services providers (for example, to support the delivery of, provide functionality on, or help to enhance the security of our Platform or Shopeaks Services), or who otherwise process personal information for purposes that are described in this Privacy Notice or notified to you when we collect your personal information. A list of our current group companies and a list of our current service providers and partners are available below. We also facilitate third party payment providers and this is set out in more detail below;</li>\n <li>to the extent we introduce social media log-ins in the future, we may provide personal data to the relevant social media provider to facilitate such log-in;</li>\n <li>to any competent law enforcement body, regulatory, government agency, court or other third party where we believe disclosure is necessary (i) as a matter of applicable law or regulation, (ii) to exercise, establish or defend our legal rights, or (iii) to protect your vital interests or those of any other person;</li>\n <li>to an actual or potential buyer (and its agents and advisers) in connection with any actual or proposed purchase, merger or acquisition of any part of our business, provided that we inform the buyer it must use your personal information only for the purposes disclosed in this Privacy Notice;</li>\n <li>to any other person with your consent to the disclosure.</li>\n </ul>\n <p>\n In order to facilitate paid products and/or services within the Shopeaks Service, we may use third party payment processors. We will not store or collect your payment card details. That information is provided directly to our third party payment processors whose use of your personal information is governed by their privacy policies and their own terms and conditions. These payment processors adhere to the standards set by payment card industry data security standards (“PCI-DSSâ€) as managed by the Payment Card Industry Security Standards Council, which is a joint effort of brands like Visa, Mastercard, American Express and Discover. PCI-DSS requirements help ensure the secure handling of payment information. The payment processors we work with are:\n </p>\n <ul>\n <li>None for now</li>\n </ul>\n <div className=\"privacy-policy-page-subtitle\">Disclosure of personal information to other countries</div>\n <p>Your personal information may be transferred to, and processed in, countries other than the country in which you are a resident. These countries may have data protection laws that are different to the laws of your country (and, in some cases, may not be as protective).</p>\n <p>Specifically, Shopeaks may transfer personal information to the United States and other countries in which we do business. Shopeaks may also subcontract certain activities and share your personal information with third parties located outside of Israel (which is where we are headquartered).</p>\n <p>The countries in which these organisations are located will vary, but, in the course of our business operations, we generally disclose personal information to organisations located in Israel, or the United States. Such transfers are made in order to provide the Shopeaks Services and carry out the activities specified in this Privacy Notice.</p>\n <p>However, we have taken appropriate safeguards to ensure that your personal information will remain protected in accordance with this Privacy Notice and applicable data protection laws. These include entering into data transfer agreements between our group companies and these can be provided on request. We have implemented similar appropriate safeguards with our third party service providers and partners and further details can be provided upon request. No transfer of your personal information will take place to an organisation or another country unless we believe there to be adequate controls in place including the security of your data and other personal information. For more details please see the “How do we secure your personal information†section below.</p>\n <div className=\"privacy-policy-page-subtitle\">How do we use cookies and similar tracking technology?</div>\n <p>\n We use cookies and similar tracking technology (collectively, “Cookiesâ€) to collect and use personal information about you. For further information about the types of Cookies we use, why, and how you can control Cookies, please see our Cookie Notice.\n </p>\n <div className=\"privacy-policy-page-subtitle\">How long do we retain your personal information?</div>\n <p>\n We will retain your personal information for the period necessary to fulfil the purposes outlined in this Privacy Notice and in each case in accordance with applicable legal and regulatory requirements in respect of permitted or required retention periods and limitation periods relevant to legal action.\n </p>\n <div className=\"privacy-policy-page-subtitle\">How do we secure your personal information?</div>\n <p>We have put in place appropriate security measures to prevent your personal information from being accidentally lost, used or accessed in an unauthorised way, altered or disclosed.</p>\n <p>In addition we limit access to your personal information to employees, agents, contractors and other third parties who have a business need for access. They will only process your personal information on our instructions and they are subject to a duty of confidentiality.</p>\n <p>While we strive to use commercially acceptable means to protect your personal information, we cannot guarantee its absolute security. Therefore, we have put in place procedures to deal with any suspected personal information breach and will notify you and any applicable regulator of a breach where we are legally required to do so.</p>\n <div className=\"privacy-policy-page-subtitle\">What are your rights in relation to personal information?</div>\n <p>You have the following data protection rights:</p>\n <ul>\n <li>If you wish for us to delete your personal data, you can do so but contacting us directly by mail.</li>\n <li></li>\n </ul>\n <p>Depending on the country which you live in and the laws that apply to you, you may also have additional data protection rights. If you are resident in the UK or the European Economic Area, these rights include:</p>\n <ul>\n <li>To request deletion of your personal information. You can do so at any time by contacting us by mail.</li>\n <li>To object to processing of your personal information, ask us to restrict processing of your personal information or request portability of your personal information. Again, you can exercise these rights by contacting us by mail.</li>\n <li>To opt-out of marketing communications we send you at any time. You can exercise this right by clicking on the “unsubscribe†or “opt-out†link in the marketing e-mails we send you.</li>\n <li>If we have collected and process your personal information with your consent, then you can withdraw your consent at any time. Withdrawing your consent will not affect the lawfulness of any processing we conducted prior to your withdrawal, nor will it affect processing of your personal information conducted in reliance on lawful processing grounds other than consent.</li>\n <li>The right to complain to a data protection authority about our collection and use of your personal information. For more information, please contact your local data protection authority. </li>\n </ul>\n <p>We respond to all requests we receive from individuals wishing to exercise their data protection rights in accordance with applicable data protection laws.</p>\n <div className=\"privacy-policy-page-subtitle\">Complaints</div>\n <p>\n We take your privacy concerns seriously. If you have a complaint regarding our handling of your personal information or concerning our privacy practices, you may file a complaint with us using the contact details provided under the “Contact Us†heading. We will confirm receipt of your complaint and, if we believe necessary, we will open an investigation.\n We may need to contact you to request further details of your complaint. If an investigation has been opened following a complaint made by you, then we will contact you with the result as soon as possible. In the unlikely circumstances we are unable to resolve your complaint to your satisfaction, you may contact the local privacy and data protection authorities in your jurisdiction.\n </p>\n <div className=\"privacy-policy-page-subtitle\">Changes to This Privacy Notice</div>\n <p>\n We may update our Privacy Notice from time to time in response to changing legal, technical or business developments. When we update our Privacy notice, we will take appropriate measures to inform you, consistent with the significance of the changes we make. We will obtain your consent to any material Privacy Notice changes if and where this is required by applicable data protection laws.\n You can see when this Privacy Notice was last updated by checking the “last updated†date displayed at the top of this Privacy Notice.\n </p>\n <div className=\"privacy-policy-page-subtitle\">Contact Us</div>\n <p>\n If you have any questions about this Privacy Notice, our privacy practices or if you would like to make a request about any personal information we may hold about you, including correction of personal information, please contact us:\n </p>\n <ul>\n <li>By email using: support@shopeaks.com</li>\n </ul>\n <div className=\"privacy-policy-page-subtitle\">Supplemental Information for California Residents</div>\n <p>\n The following section provides supplemental information to California residents, whose personal information we have collected. This section applies to the personal information we collected from California residents during the 12 months prior to the effective date of this Privacy Notice, depending on interactions with us.\n </p>\n <p>1. Collection and Use of Personal Information</p>\n <p>\n (a) Categories of Personal Information We Have Collected:\n </p>\n <ul>\n <li>Identifiers such as name, alias, postal address, online identifier (e.g. cookies) and other similar identifiers;</li>\n <li>Personal records such as payment information;</li>\n <li>Characteristics such as age, gender and other demographic data;</li>\n <li>Customer Accounts / Commercial information such as the User Profile, records of products or services purchased, obtained, or considered;</li>\n <li>Online usage information such as Internet and other network activity information, such as, but not limited to, browsing history, search history and information on interactions with the Paydin Services;</li>\n <li>Geolocation data such as country and zip code;</li>\n <li>Sensory information such as recordings of customer service calls; and</li>\n <li>Inferences derived from personal information such as purchase preferences, interests and characteristics.There may be additional information that we collect that meets the definition of personal information under California law but is not reflected in a category, in which case we will treat it as personal information as required under California law, but will not include it when we are required to describe our practices by category of personal information.</li>\n </ul>\n <p>\n (b) Categories of Sources of Personal Information that We Collect:\n </p>\n <ul>\n <li>Directly from you. For example, when you create an account, make a purchase, browse our Platform, or use the Shopeaks Services.</li>\n <li>Directly and indirectly from activity on the Platform and/or using the Shopeaks Services.</li>\n <li>Social networks (to the extent we introduce social media log-ins in the future).</li>\n <li>Service Providers who provide services on our behalf such as those used to fulfill orders, process your payments and requests, verify your information, monitor activity on the Platform and/or using the Shopeaks Services, provide analysis and analytics, maintain databases, administer and monitor emails and marketing, administer and send mobile messages, serve ads on this and other services, and provide consulting services.</li>\n </ul>\n <p>2. Categories of Personal Information Disclosed</p>\n <p>We may disclose the following categories of personal information to service providers for a business purpose, or, at your direction, with third parties such as sponsors of promotions, sweepstakes, or contests. We have disclosed the following:</p>\n <p>Category of Personal Information Disclosed for a Business Purpose</p>\n <ul>\n <li>Identifiers;</li>\n <li>Personal records;</li>\n <li>Characteristics;</li>\n <li>Customer Accounts / Commercial information;</li>\n <li>Online usage information;</li>\n <li>Geolocation data;</li>\n <li>Sensory information; and</li>\n <li>Inferences derived from personal information.</li>\n </ul>\n <div className=\"privacy-policy-page-subtitle\">Categories of Recipients</div>\n <ul>\n <li>Service Providers</li>\n <li>Group companies</li>\n <li>Governmental authorities and agencies</li>\n </ul>\n <p>We do not sell personal information and we do not believe that our sharing of information would qualify as a sale under California law.</p>\n <p>For the avoidance of doubt, we also do not sell personal information of individuals under 16 years of age.</p>\n <p>3. California Privacy Rights</p>\n <p>\n (a) Right to Know <br />\n You have the right to request that we disclose to you the following information about personal information we collect from you:</p>\n <ul>\n <li>categories of personal information collected;</li>\n <li>categories of sources of personal information collected;</li>\n <li>the business or commercial purpose for collecting or selling personal information;</li>\n <li>the categories of third parties with whom we share personal information; and</li>\n <li>the specific pieces of personal information we have collected about you over the past 12 months.</li>\n </ul>\n <p>\n (b) Right to Request Deletion of Personal Information <br />\n You have the right to request the deletion of your personal information collected or maintained by us, subject to certain exceptions permitted by law.</p>\n <p>\n (c) Right to Opt-Out of Sale of Personal Information <br />\n As mentioned above, we do not sell personal information and we do not believe that our sharing of information would qualify as a sale under California law. Nonetheless, if you are a California resident who has purchased products or services from us, you may submit a request to record your preference to opt out by emailing us at support@shopeaks.com.\n </p>\n <p>\n (d) Right to Non-Discrimination <br />\n You have the right to not be treated in a discriminatory manner for exercising your privacy rights. We do not use the fact that you have exercised or requested to exercise any privacy rights for any purpose other than facilitating a response to your request.\n </p>\n <p>4. Exercising Your California Privacy Rights</p>\n <p>To exercise your rights, you can contact us:</p>\n <ul>\n <li>By email at support@shopeaks.com</li>\n <li>If you want to request any information about how we process, store or use your data or anything relating to personal information and privacy laws, please email us.</li>\n </ul>\n <p>Once we receive your request, we are required to verify that you are the person that is the subject of the request. This verification process consists of matching identifying information provided by you with the information we have about you in our records. Upon making a request, you will be asked to provide your name, email address, and request details. A confirmation email will be sent to the email address you provide to begin the process to verify your identity. If we cannot verify your identity, we will not be able to respond to your request.</p>\n <p>You may designate an authorized agent to exercise any of the above privacy rights on your behalf, subject to the agent request requirements under California law.</p>\n <p>Please note, for your safety and security, we will require authorized agents to provide proof of consent and designation of the authorized agent for the purpose of making the request, and will require authorized agents to provide information necessary to verify the identity of the individual who is the subject of the request. We may also require that an individual verify his/her own identity directly with us before we respond to an authorized agent’s request.</p>\n <p>We reserve the right to deny requests in certain circumstances, such as where we have a reasonable belief that the request is fraudulent.</p>\n <p>5. Do Not Track</p>\n <p>California law requires us to let you know how we respond to web browser Do Not Track (DNT) signals. Because there currently isn’t an industry standard for recognizing or honoring DNT signals, we do not respond to them at this time.</p>\n <p>6. California’s Shine the Light law</p>\n <p>We do not share personal information with third parties for their direct marketing purposes absent your consent as defined by California Civil Code Section 1798.83 (“Shine the Light lawâ€). To opt-out of future sharing with third parties for their direct marking purposes, contact us at support@shopeaks.com. Any such request must include “California Privacy Rights Request†in the first line of the description and include your name, street address, city, state, and ZIP code. Please note that we are only required to respond to one request per customer each year.</p>\n <p>7. Changes</p>\n <p>We reserve the right to change this Supplemental Information for California Residents from time to time. Changes shall become effective on the date they are posted.</p>\n <div style={{ margin: '30px 0' }}>Shopeaks, Inc.</div>\n <div className=\"privacy-policy-page-subtitle\">Shopeaks Service Providers and Partners</div>\n <ul>\n <li>Amazon Web Services</li>\n <li>Payme</li>\n <li>Shibolet</li>\n <li>Shopify</li>\n <li>Airtable</li>\n <li>Google Analytics</li>\n </ul>\n </div>\n </div>\n )\n}","import React from 'react'\nimport './TermsAndConditionsPage.css'\nimport { MdOutlineArrowBackIos } from 'react-icons/md'\nimport { useHistoryContext } from 'contexts/History'\nimport { environment } from 'conf'\n\nexport default function TermsAndConditionsPage() {\n const history = useHistoryContext()\n\n function goBack() {\n history.goBack()\n }\n\n return (\n <div className='terms-and-conditions-page-container'>\n <div className=\"terms-and-conditions-page-back-button-container\">\n <MdOutlineArrowBackIos className='terms-and-conditions-page-back-button' onClick={goBack} />\n </div>\n <div className=\"terms-and-conditions-page-content\">\n <h2 className=\"terms-and-conditions-page-title\">Terms and conditions</h2>\n <div className=\"terms-and-conditions-page-subtitle\">Effective 25 May, 2023</div>\n <p>\n Shopeaks is the platform for you creating a better experience in the for your customers in your social networks.\n One of our core values is to pursue deliberate simplicity — so we've tried to distill our terms and conditions into their simplest form here.\n </p>\n <div className=\"terms-and-conditions-page-subtitle\">Welcome to Shopeaks!</div>\n <p>\n It's great to have you here. By using Shopeaks, you agree to these Terms & Conditions (“Termsâ€) and the other policies that we link to here and on the Platform.\n </p>\n <p>\n These Terms (and the policies we link to) apply to your use of our website (<a href={`${environment.dashboard_url}`}>{`${environment.dashboard_url}`}</a>), apps and any other software or features provided in connection with our services (collectively the “Platform†or “Shopeaksâ€). When we say “weâ€, “our†or “us†in these Terms, we're referring to SHOPEAKS LTD.\n Please read these Terms carefully and reach out if you have any questions. If you don't agree with them, please don't use Shopeaks.\n </p>\n <div className=\"terms-and-conditions-page-subtitle\">Your account</div>\n <p>\n To create an account and become a Shopeaks user, you must be at least 18. If you're creating an account on behalf of someone else, you must have their permission to do so.\n You're responsible for your account and using it in a lawful way.\n </p>\n <p>\n When you create an account, you agree to comply with these Terms and that you're (i) over 18, and (ii) legally able to enter these Terms with us. You must provide us with accurate info about yourself — if anything changes, please let us know so we can update your details.\n </p>\n <p>\n If you're using Shopeaks on behalf of a business or individual, you agree that you're authorised by them to act and agree to these Terms on their behalf.\n </p>\n <p>\n You're responsible for anything that happens to your account, so keep your login details and password safe and don't share them with anyone. If you think your account has been compromised, please contact us immediately.\n </p>\n <p>\n You must not assign or transfer your account to someone else, or use your account (or allow it to be used by anyone) in a way which in our reasonable opinion, causes damage to Shopeaks or our reputation, or infringes another's rights or applicable laws and regulations.\n </p>\n <div className=\"terms-and-conditions-page-subtitle\">Your username</div>\n <p>\n The username you choose must be appropriate for everyone and cannot infringe someone else's rights.\n </p>\n <p>\n We know the username you choose is very important to you. But it's also important that your username is appropriate for all audiences and doesn't infringe anyone's rights, including intellectual property rights (such as copyright and trade marks) (“IP Rightsâ€).\n </p>\n <p>\n You can't use the name of another person (such as a celebrity), brand or company, have a username that is offensive, vulgar or obscene, or create an account with a username that you have no connection with just to profit from it in the future (known as “Domain Squattingâ€).\n </p>\n <p>\n If any of these issues occur over your username, we'll consider the circumstances reasonably and may require you to change it (and we may reassign it to someone else). If you refuse, we may suspend or cancel your account. \n <br/>\n If you've not signed in or added new links or had any traffic to your account in the last 6 months we may reclaim or reassign your username (but never without contacting you first).\n </p>\n <div className=\"terms-and-conditions-page-subtitle\">Your content — what is and isn't allowed</div>\n <p>\n We love the variety of content that our users post on Shopeaks! However, we want to ensure that everyone who visits the Platform can do so safely.\n <br/>\n You are responsible for your content. When we talk about your “contentâ€, we mean the text, graphics, videos, links, and any other materials you add to your Shopeaks account. You're responsible for your content and you warrant that:\n </p>\n <ul>\n <li>it's yours or if you're using third party content, you have all of the rights needed to post it on Shopeaks (and to let us use it in accordance with these Terms);</li>\n <li>none of your content will violate the privacy, publicity, IP or other rights of anyone else;</li>\n <li>your content will not (i) be misleading or deceptive, intended or designed to misinform, or likely to misinform a reasonable person, (ii) cause either of us to break any laws or legal obligations, and (iii) bring us into disrepute or damage our reputation;</li>\n <li>your content doesn't contain any viruses or other harmful code, files, or programs designed to interrupt or damage the functionality of the Platform or any other software, hardware or device;</li>\n <li>you will not use, or authorise others to use, automated scripts or other scraping tools to collect information from your profile, or the Platform;</li>\n <li>you won't post any unauthorised advertising, solicitations or endorsements on Shopeaks; </li>\n </ul>\n <p>\n Since laws and regulations differ from country to country, we may ban content that might be legal in some countries, and to take whatever action we think necessary, including removing content or restricting access to it or the Platform.\n </p>\n <div className=\"terms-and-conditions-page-subtitle\">Your content — what we can do with it</div>\n <p>\n We love your content and want to show it off. When you post content on Shopeaks, you give us the right to display, use, and share it.\n </p>\n <p>\n When you post content on your profile, you grant us a licence to (i) use, publicly display, distribute, modify, adapt and create derivative works of such content; and (ii) use your name, image, voice, photograph, likeness and any other personal attributes in the content; on the Platform and in our marketing in all media (such as our social channels and any other advertising). This licence is worldwide, royalty-free and perpetual, which means we can use your content anywhere in the world, without paying you fees, for as long as we like. You agree that you have all third party rights necessary to post the content on Shopeaks and to grant us this licence.\n </p>\n <p>\n You'll retain all of your rights in your content. But keep in mind that your content will be publicly accessible, and may be used and re-shared by others on Shopeaks and across the internet.\n </p>\n <p>\n Please don't share personal info that you don't want visible to the world, and never post social security numbers, passport details or similar info that could cause harm in the wrong hands. You may only post personal info relating to others where you have their consent and have kept a record of it.\n </p>\n <p>\n We don't have to monitor the accuracy, reliability or legality of your content, but we may choose to do so. We may modify, remove or restrict access to content at any time in line with these Terms or apply a sensitive content warning to content that we deem unsuitable for all audiences.\n </p>\n <div className=\"terms-and-conditions-page-subtitle\">Our Platform</div>\n <p>\n We own the Platform, but give you a limited right to use it for sharing content and viewing and interacting with other users' content. We're not responsible for any content, products or services made available via other users' profiles.\n </p>\n <p>\n All rights (including IP Rights) in and to the Platform (excluding your content) (the “Shopeaks IPâ€) are and will remain exclusively owned by Shopeaks or our licensors. You won't acquire any rights in the Shopeaks IP and you're not allowed to use it (including our brand name or logo) for any purpose (such as to imply a partnership with, or endorsement from Shopeaks), without our prior written approval.\n </p>\n <p>\n As a user, we grant you a limited, revocable, non-exclusive, non-transferable right to use the Platform to create, display, use, play, and upload content in accordance with these Terms. If we provide you with any images, icons, themes, fonts, videos, graphics, or other content, you must only use them on your profile and comply with any guidelines we make available to you.\n </p>\n <p>\n You must not remove, obscure or alter any proprietary notices or trade marks on the Platform, or make unauthorised copies of, reproduce, distribute, licence, sell, resell, modify, translate, disassemble, decompile, decrypt, reverse engineer, create any derivative works from, or attempt to derive the source code of, the Platform or any part of it. If you visit Shopeaks profiles (a “profile visitorâ€), we grant you a limited, non-exclusive, non-transferable right to view and interact with the Platform via user profiles.\n </p>\n <p>\n To the extent allowed by law, we're not responsible for any opinions, advice, statements, products, services, offers or other content posted by other users on their profiles.\n </p>\n <div className=\"terms-and-conditions-page-subtitle\">Your plan</div>\n <p>\n You can sign up to Shopeaks on a free or paid plan and cancel at any time.\n </p>\n <p>\n Your plan will start when you accept these Terms and continue until you cancel it. If you cancel a paid plan it will ordinarily continue until the end of your current billing cycle and then automatically convert to a free plan.\n </p>\n <p>\n To cancel, visit the billing page (<a href={`${environment.dashboard_url}/pricing-plans`}>{`${environment.dashboard_url}`}/pricing-plans</a>). To the extent permitted by applicable law, payments are non-refundable. But we know that sometimes your requirements may change. So, if you've selected a paid plan, but cancel within 72 hours, we may make an exception (please email us at support@shopeaks.com).\n </p>\n <p>\n You must pay all subscription fees when they become due. Shopeaks transaction fees as well as processing fees will be deducted automatically from the proceeds of any transactions you make on your profile.\n </p>\n <ul>\n <li>Subscription fees — If you've chosen a paid plan, you must pay your subscription fees when they fall due. Unless otherwise stated, fees are in USD and are inclusive of transactional taxes (e.g. GST/VAT).</li>\n </ul>\n <p>\n All subscription fees will be billed in advance on a recurring basis, based on your chosen billing cycle. Your paid plan will automatically renew under these Terms (as updated at the time of the renewal) at the end of your billing cycle unless you've cancelled your plan.\n </p>\n <p>\n You must provide a valid payment method (i.e. credit card or shopify admin billing) and accurate billing information when you join. In doing so, you authorise us to charge all fees to such payment method. If automatic billing fails, we'll issue you an online invoice, which you must pay within the time indicated.\n </p>\n <p>\n You agree that if we charge transaction fees, they will be deducted from the proceeds of your transaction prior to receipt. You're responsible for paying any external fees and taxes (including withholding taxes) if they apply, and income taxes, associated with payments you receive through the Platform.\n </p>\n <ul>\n <li>•\tProcessing fees — We use third party payment processing services (including PayPal, Stripe and Square or shopify billing) to power your transactions on Shopeaks. These services are subject to a processing fee. Each payment processor charges its own processing fees in accordance with its terms and conditions, which you are responsible for reviewing, accepting and complying with.</li>\n </ul>\n <p>\n You agree that processing fees will be deducted from the proceeds of your transaction prior to receipt and that Shopeaks is not responsible for these fees.\n </p>\n <p>\n We may change our subscription or transaction fees from time to time, but we'll always give you prior notice (and we will aim to do so at least 1 month in advance). If you don't agree to the revised fees, you can cancel your plan before your next billing cycle starts.\n </p>\n <div className=\"terms-and-conditions-page-subtitle\">Privacy & data</div>\n <p>\n We care about the privacy of our users and Profile Visitors.\n </p>\n <p>\n Our Privacy Policy explains how we handle your personal data for our own purposes. In creating your account, you agree you have read, understood and agreed to it. \n <br/>\n All data (and any IP rights in data) that we or the Platform create or generate based on your use (or profile visitors', or other users' use) of the Platform or content (“Dataâ€) will be owned by us. We may provide Data or visualisations of Data to you as part of the service we offer on the Platform (we call this “Data Analyticsâ€). We make no representations or warranties as to the accuracy or completeness of the Data Analytics, but we'll try to make it as accurate and complete as we can.\n </p>\n <div className=\"terms-and-conditions-page-subtitle\">Your visitors & customers</div>\n <p>\n You're responsible for your profile visitors, including customers who purchase goods or services through your Shopeaks (collectively “End Usersâ€).\n </p>\n <p>\n You're solely responsible for (i) the way in which End Users use and interact with your profile and your content; (ii) complying with all laws in relation to your End Users, and all transactions between you and End Users made through your Shopeaks.\n </p>\n <div className=\"terms-and-conditions-page-subtitle\">Confidentiality</div>\n <p>\n If we share any confidential information about us or the Platform with you, you must keep it secret and secure.\n </p>\n <p>\n From time to time, we may share info with you that is confidential (e.g. we may reveal new and upcoming features to you if you take part in beta testing with us). You must keep this info secret and secure and use reasonable measures to prevent others from accessing it.\n </p>\n <div className=\"terms-and-conditions-page-subtitle\">Feedback</div>\n <p>\n We love hearing your ideas on how we can make Shopeaks even better! Sometimes, we may make “beta†functionality available to you and seek your feedback.\n </p>\n <p>\n Keep in mind that if you share feedback with us, we're free to use it however we like, without payment to you (or to not use it at all). We may from time to time make certain functionality of the Platform available to you in “beta†(or similar). You acknowledge that we are still evaluating and testing such beta functionality and it may not be as reliable as other parts of the Platform.\n </p>\n <div className=\"terms-and-conditions-page-subtitle\">Open Source</div>\n <p>\n The app contains open source software.\n </p>\n <p>\n The app contains open source software. Certain open source software components are subject to their own applicable licence terms, which are available in our Open-Source Content library (accessible under the ‘Legal' section in the app). To the extent that any such licence terms do not permit the relevant open source component to be licensed to you under these Terms, these Terms will not apply to that component, and your rights and obligations in respect of that component will be governed by the applicable licence terms.\n </p>\n <div className=\"terms-and-conditions-page-subtitle\">Liability</div>\n <p>\n We are not liable for your use of the Platform and you're responsible for keeping backups of your own content.\n </p>\n <ul>\n <li>We are not liable for any damages suffered as a result of downloading, installing, or using the Platform, or copying, distributing, or downloading any content from the Platform. You have sole responsibility for the adequate protection and backup of your data, content, and devices used in connection with the Platform.</li>\n <li>You will indemnify us against any loss arising out of a breach by you of these Terms, or a third party claim made against us in relation to your content.</li>\n <li>Neither of us will be liable for any indirect, punitive, special, incidental or consequential damage (including loss of business, revenue, profits, use, privacy, data, goodwill or other economic advantage), whether for breach of contract, in tort (including negligence) or otherwise, even if we know such damage is possible.</li>\n <li>Our liability to you under or in connection with these Terms or the Platform will not exceed the greater of the fees you paid to us at the time the liability arose, or $100.</li>\n </ul>\n <div className=\"terms-and-conditions-page-subtitle\">Disclaimer</div>\n <p>\n There's a few things we disclaim under these Terms.\n </p>\n <p>\n Your use of Shopeaks and any content contained on the Platform is at your sole risk. The Platform is provided on an “AS IS†and “AS AVAILABLE†basis, without warranties of any kind, whether express or implied, including (but not limited to), up-time or availability, or any implied warranties of merchantability, fitness for a particular purpose, non-infringement or course of performance.\n </p>\n <p>\n Shopeaks, its affiliates and its licensors do not make any express or implied warranties or representations, including that:\n </p>\n <ul>\n <li>the Platform will function uninterrupted, securely or be available at any time or place;</li>\n <li>any errors or defects will be corrected;</li>\n <li>the Platform is free of viruses or other harmful components;</li>\n <li>the Platform is effective or the results of using the Platform will meet your needs; or</li>\n <li>any content on the Platform (including any user content) is complete, accurate, reliable, suitable or available for any purpose.</li>\n </ul>\n <p>\n These Terms apply to the maximum extent permitted by law and nothing in them is intended to exclude, restrict or modify legal rights that you may have, which cannot be excluded, restricted or modified by contract. If these Terms are governed by the Israeli Consumer Law, our liability to you for not complying with a consumer guarantee is limited to re-supply of the services or payment.\n </p>\n <div className=\"terms-and-conditions-page-subtitle\">Third Party Services</div>\n <p>\n We may include in the Platform, access to specific functionality or services which are provided by third parties (e.g. a payment portal or online store front).\n </p>\n <p>\n Shopeaks integrates with various third party products and services. Unless we say otherwise, we do not endorse (or make any warranties or representations in relation to) any third party product or service and do not offer refunds for any amounts you've paid to a third party.\n </p>\n <p>\n Your use of any third party product or service may be subject to separate terms and conditions, which you're responsible for reviewing, accepting and complying with. If you don't accept or comply with those third party terms, we may suspend or cancel your account, or limit your access to such services within our Platform.\n </p>\n <div className=\"terms-and-conditions-page-subtitle\">Cancelling your account</div>\n <p>\n If you don't comply with these Terms, we may suspend or cancel your account or limit the functionality of the Platform, which you have access to (e.g. if you don't pay your fees on time, we may convert your paid plan to a free plan with less features).\n </p>\n <p>\n Depending on what the non-compliance is, we may not use this right to suspend or cancel your account, but if there is repeat non-compliance, or a material non-compliance, we are likely to. If we suspend or cancel your account, we will usually notify you beforehand (but we don't have to) and you will not receive a refund of any fees paid upfront.\n </p>\n <p>\n If you think your account has been cancelled by mistake or you have an issue with these Terms or the Platform, please email support@shopeaks.com. Both us and you will use all reasonable efforts to resolve the issue in good faith, and neither of us will bring any legal action on the issue until we have spent at least 1 month trying to work it out.\n </p>\n <div className=\"terms-and-conditions-page-subtitle\">Changes</div>\n <p>\n Shopeaks is constantly evolving and improving. From time to time we may make changes to the Platform or these Terms. If the change will have a significant negative impact on you, we'll notify you beforehand.\n </p>\n <p>\n We may need to change these Terms from time-to-time to reflect business updates, changes to the Platform (including if we decide to discontinue any functionality, features or part of the Platform), legal or commercial reasons, or otherwise to protect our legitimate interests.\n </p>\n <p>\n We can make these changes at any time and it's your responsibility to check these Terms now and then for any changes. However, if a change will have a material negative effect on you, we'll use our best efforts to notify you at least 1 month before the change takes effect (e.g. via a notification on the Platform).\n </p>\n <p>\n Your continued use of the Platform after any changes to the Terms is taken as your acceptance of the revised Terms. If you don't agree with the changes, we ask you to stop using Shopeaks and cancel your account.\n </p>\n <div className=\"terms-and-conditions-page-subtitle\">A few other things</div>\n <p>\n There's a few more things we need to say before you can use Shopeaks.\n </p>\n <p>\n Laws may apply to you or us as a result of your specific location. If this is the case, and if those laws are inconsistent with any part of these Terms, those laws will take precedence to the extent of the inconsistency.\n </p>\n <p>\n These Terms (along with the Privacy Policy and any other policies we link to) make up the entire agreement between you and us in connection with the Platform. No other term is to be included, except where required by law. All implied terms except those implied by statute which cannot be excluded are expressly excluded.\n <br/>\n If any provision of these Terms is invalid under the law of any country, then it will be severed from these Terms in that country and the remainder of these Terms will continue to apply.\n </p>\n <p>\n These Terms are governed by the laws of Israel. Both you and we submit to the exclusive jurisdiction of the courts of those jurisdictions.\n </p>\n <p>\n Our failure to insist upon or enforce any provision of these Terms will not be considered a waiver of any provision or right. Neither these Terms, nor the Platform, create a relationship of agent / principal between you and us.\n </p>\n </div>\n </div>\n )\n}","import React from 'react'\nimport './ShopifyHelpPage.css'\nimport { MdOutlineArrowBackIos } from 'react-icons/md'\nimport { useHistoryContext } from 'contexts/History'\n\nexport default function ShopifyHelpPage() {\n const history = useHistoryContext()\n\n function goBack() {\n history.goBack()\n }\n\n return (\n <div className='shopify-help-page-container'>\n <div className=\"shopify-help-page-back-button-container\">\n <MdOutlineArrowBackIos className='shopify-help-page-back-button' onClick={goBack} />\n </div>\n <div className=\"shopify-help-page-title\">How to connect your Shopify store to your Shopeaks account</div>\n <div className='shopify-help-page-section'>\n <ol>\n <li>\n <div className=\"shopify-help-page-section-title\">Install the Shopeaks sales channel app on your shopify store from the <a target=\"_blank\" href=\"https://apps.shopify.com/shopeaks\">Shopify Appstore</a>.</div>\n </li>\n <li>\n <div className=\"shopify-help-page-section-title\">Subscribe to one of the plans and start your 30 days free trial.</div>\n <div className=\"shopify-help-page-section-image-container\">\n <img className=\"shopify-help-page-section-image\" src={\"https://cdn.paylink.cloudfront.payli.in/application_resources/shopify-screenshots/Subscribe_page.png\"} alt={\"helper1\"} />\n </div>\n </li>\n <li>\n <div className=\"shopify-help-page-section-title\">We will not charge you anything during your free trial.</div>\n <div className=\"shopify-help-page-section-title\">You will not be asked to put you payment methods details. All charges are made through Shopify and you can unsubscribe at any time. </div>\n <div className=\"shopify-help-page-section-title\">The tab will close after succesfully approving your subscription.</div>\n </li>\n <li>\n <div className=\"shopify-help-page-section-title\">The tab will close after succesfully connecting your shopify store to your Shopeaks account</div>\n <div className=\"shopify-help-page-section-title\">On the shopify admin panel you can now see the account status.</div>\n <div className=\"shopify-help-page-section-title\">In the background, Shopeaks is syncing your products to your account.</div>\n <div className=\"shopify-help-page-section-image-container\">\n <img className=\"shopify-help-page-section-image\" src={\"https://cdn.paylink.cloudfront.payli.in/application_resources/shopify-screenshots/shopify_admin.png\"} alt={\"helper1\"} />\n </div>\n </li>\n <li>\n <div className=\"shopify-help-page-section-title\">In the admin page in Shopeaks you will now be able to create shoppable links and connect all your products to each link per your choise.</div>\n <div className=\"shopify-help-page-section-title\">Start your Shopeaks journey!</div>\n </li>\n </ol>\n <div className=\"shopify-help-page-section-title\">Contact us on <a href=\"mailto: support@shopeaks.com\">support@shopeaks.com</a> for any further help needed.</div>\n </div>\n </div>\n )\n}","import React from 'react'\nimport './Card.css'\n\n/**\n * Represents a card-like container.\n * @param {number} paddingPx - The padding of the card's content \n */\nexport default function Card({\n children,\n paddingPx = 15\n}) {\n return (\n <div className='card-container' style={{ padding: `${paddingPx}px`}}>\n {children}\n </div>\n )\n}","import React from 'react'\nimport './AnalyticsDataCard.css'\nimport Card from 'components/Card/Card'\nimport Tooltip from 'components/Tooltip/Tooltip'\nimport { MdOutlineInfo } from 'react-icons/md'\nimport BusinessAnalyticsDataLoader from 'components/BusinessAnalyticsDataLoader/BusinessAnalyticsDataLoader'\n\n/**\n * Represents an analytics data, card-like container.\n * Uses the {@link Card} component for card looking style.\n * @param {string} title - The container's title\n * @param {string} value - The container's data value state\n * @param {string} tooltipText - The text for the tooltip of this card\n * @param {number} paddingPx - The container's padding in pixels\n * @param {boolean} isTooltipHorizontalSwap - Determins whether the tooltip text bubble is inversed horizontally or not\n * @param {boolean} isDataLoading - Determins whether the analytics data is loading or not\n * @param {object} numberStyles - Determins styles override for the value\n */\nexport default function AnalyticsDataCard({\n title,\n value,\n tooltipText,\n paddingPx = 25,\n isTooltipHorizontalSwap = false,\n isDataLoading = false,\n numberStyles = {}\n}) {\n\n function renderValue() {\n return isDataLoading ? <BusinessAnalyticsDataLoader /> : value\n }\n\n return (\n <Card\n paddingPx={paddingPx}\n >\n <div className=\"analytics-data-card-title-container\">\n <div className=\"analytics-data-card-title\">{title}</div>\n <Tooltip\n image={<MdOutlineInfo className='analytics-data-card-image' />}\n tooltipText={tooltipText}\n swapHorizontal={isTooltipHorizontalSwap}\n />\n </div>\n <div className=\"analytics-data-card-value\" style={numberStyles}>{renderValue()}</div>\n </Card>\n )\n}","import React, { useEffect, useState } from 'react'\nimport './AnalyticsPage.css'\nimport { isMobile } from 'utils/deviceUtils'\nimport { useTranslation } from 'react-i18next'\nimport { formatNumber } from 'utils/utils'\nimport { GetBusinessAnalytics } from 'api/links/links'\nimport { useUserDetailsContext } from 'contexts/User'\nimport {\n ANALYTICS_PAGE_RETROACTIVE_DATA_REPORT_TIME_INTERVALS,\n ANALYTICS_PAGE_RETROACTIVE_DATA_REPORT_TIME_INTERVALS_NAMES,\n ANALYTICS_TAB_OPTIONS,\n ANALYTICS_TAB_OPTIONS_WITH_SHOPBOARD,\n DEFAULT_CURRENCY_CODE,\n INFLUENCER_TAB_OPTIONS,\n INFLUENCER_TAB_OPTIONS_COMMISSION_ONLY,\n NUMBER_TYPES\n} from 'constants/general.constants'\nimport AnalyticsDataCard from 'components/AnalyticsDataCard/AnalyticsDataCard'\nimport { getCurrencySymbol } from 'services/currency'\nimport TimeSelect from 'components/TimeSelect/TimeSelect'\nimport Tabs from 'components/Tabs/Tabs'\nimport { getAnalyticsDateString } from 'utils/dateUtils'\nimport ContentDialogTopbar from 'components/ContentDialogTopbar/ContentDialogTopbar'\nimport { useHistoryContext } from 'contexts/History'\nimport InfluencerInsights from 'components/InfluencerInsights/InfluencerInsights'\nimport { extractExtendedInfluencerAnalytics } from 'utils/dataUtils'\nimport LinkAnalyticsCharts from 'components/LinkAnalyticsCharts/LinkAnalyticsCharts'\nimport { HOME_PAGE_URL } from 'constants/routes.constants'\nimport { getShopboardAnalytics } from 'api/shopboard/shopboard'\nimport DashboardLoader from 'components/DashboardLoader/DashboardLoader'\n\nexport default function AnalyticsPage() {\n const { t } = useTranslation()\n const { \n userDetails, \n setUserDetails,\n hasShopifyStore,\n checkShopboardStatus,\n } = useUserDetailsContext()\n const history = useHistoryContext()\n\n const [overviewData, setOverviewData] = useState({\n currency: DEFAULT_CURRENCY_CODE,\n links: {\n visits: 0,\n checkouts: 0,\n cr: 0,\n revenue: 0,\n data: []\n },\n shorts: {\n visits: 0,\n checkouts: 0,\n cr: 0,\n revenue: 0,\n data: []\n },\n shopboard: {\n visits: 0,\n checkouts: 0,\n cr: 0,\n revenue: 0,\n data: []\n },\n influencerInsights: []\n })\n const [overviewTimeIntervalName, setOverviewTimeIntervalName] = useState(userDetails?.isAdmin ? ANALYTICS_PAGE_RETROACTIVE_DATA_REPORT_TIME_INTERVALS_NAMES.LAST_30_DAYS : ANALYTICS_PAGE_RETROACTIVE_DATA_REPORT_TIME_INTERVALS_NAMES.THIS_MONTH)\n const [datePickerState, setDatePickerState] = useState({\n startDate: ANALYTICS_PAGE_RETROACTIVE_DATA_REPORT_TIME_INTERVALS.find(timeInterval => timeInterval?.name === (userDetails?.isAdmin ? ANALYTICS_PAGE_RETROACTIVE_DATA_REPORT_TIME_INTERVALS_NAMES.LAST_30_DAYS : ANALYTICS_PAGE_RETROACTIVE_DATA_REPORT_TIME_INTERVALS_NAMES.THIS_MONTH)).timeRange[0],\n endDate: ANALYTICS_PAGE_RETROACTIVE_DATA_REPORT_TIME_INTERVALS.find(timeInterval => timeInterval?.name === (userDetails?.isAdmin ? ANALYTICS_PAGE_RETROACTIVE_DATA_REPORT_TIME_INTERVALS_NAMES.LAST_30_DAYS : ANALYTICS_PAGE_RETROACTIVE_DATA_REPORT_TIME_INTERVALS_NAMES.THIS_MONTH)).timeRange[1]\n })\n const [shouldApplyDateRange, setShouldApplyDateRange] = useState(true)\n const [isLoadingAnalytics, setIsLoadingAnalytics] = useState(false)\n const [selectedTabOptionIndex, setSelectedTabOptionIndex] = useState(0)\n const [isLoadingTabs, setIsLoadingTabs] = useState(true)\n\n useEffect(() => {\n if (!hasShopifyStore()) {\n history.replace(HOME_PAGE_URL)\n }\n }, [])\n\n useEffect(() => {\n if (shouldApplyDateRange) {\n // In case shopboard status was not yet checked\n if (userDetails?.isAdmin && !userDetails?.shopboard?.synced) {\n setShouldApplyDateRange(false)\n checkShopboardStatus(() => {\n setShouldApplyDateRange(true)\n })\n return\n } \n\n if (isLifetimeRangeSelected() && userDetails?.analytics?.linksLifetimeAnalytics && userDetails?.analytics?.shortsLifetimeAnalytics && userDetails?.shopboard?.analytics?.synced) {\n setOverviewData({\n links: {\n visits: userDetails?.analytics?.linksLifetimeAnalytics?.clicks,\n completedCheckouts: userDetails?.analytics?.linksLifetimeAnalytics?.sales,\n requestedCheckouts: userDetails?.analytics?.linksLifetimeAnalytics?.checkouts,\n revenue: userDetails?.analytics?.linksLifetimeAnalytics?.revenue,\n cr: userDetails?.analytics?.linksLifetimeAnalytics?.clicks > 0 ? (userDetails?.analytics?.linksLifetimeAnalytics?.sales / userDetails?.analytics?.linksLifetimeAnalytics?.clicks) * 100 : 0,\n data: userDetails?.analytics?.linksLifetimeAnalytics?.data,\n totalTax: userDetails?.analytics?.linksLifetimeAnalytics?.totalTax,\n influencerAttributedRevenue: userDetails?.analytics?.linksLifetimeAnalytics?.influencerAttributedRevenue\n },\n shorts: {\n visits: userDetails?.analytics?.shortsLifetimeAnalytics?.clicks,\n completedCheckouts: userDetails?.analytics?.shortsLifetimeAnalytics?.sales,\n requestedCheckouts: userDetails?.analytics?.shortsLifetimeAnalytics?.checkouts,\n revenue: userDetails?.analytics?.shortsLifetimeAnalytics?.revenue,\n cr: userDetails?.analytics?.shortsLifetimeAnalytics?.clicks > 0 ? (userDetails?.analytics?.shortsLifetimeAnalytics?.sales / userDetails?.analytics?.shortsLifetimeAnalytics?.clicks) * 100 : 0,\n data: userDetails?.analytics?.shortsLifetimeAnalytics?.data,\n totalTax: userDetails?.analytics?.shortsLifetimeAnalytics?.totalTax,\n influencerAttributedRevenue: userDetails?.analytics?.linksLifetimeAnalytics?.influencerAttributedRevenue,\n },\n shopboard: {\n visits: typeof userDetails?.shopboard?.analytics?.visits === 'number' ? userDetails?.shopboard?.analytics?.visits : 0,\n completedCheckouts: typeof userDetails?.shopboard?.analytics?.sales === 'number' ? userDetails?.shopboard?.analytics?.sales : 0,\n requestedCheckouts: typeof userDetails?.shopboard?.analytics?.checkouts === 'number' ? userDetails?.shopboard?.analytics?.checkouts : 0,\n revenue: typeof userDetails?.shopboard?.analytics?.revenue === 'number' ? userDetails?.shopboard?.analytics?.revenue : 0,\n cr: typeof userDetails?.shopboard?.analytics?.visits === 'number' && typeof userDetails?.shopboard?.analytics?.sales === 'number' && userDetails?.shopboard?.analytics?.visits > 0 ? (userDetails?.shopboard?.analytics?.sales / userDetails?.shopboard?.analytics?.visits) * 100 : 0,\n data: userDetails?.shopboard?.analytics?.data,\n totalTax: typeof userDetails?.shopboard?.analytics?.totalTax === 'number' ? userDetails?.shopboard?.analytics?.totalTax : 0,\n influencerAttributedRevenue: typeof userDetails?.analytics?.linksLifetimeAnalytics?.influencerAttributedRevenue === 'number' ? userDetails?.analytics?.linksLifetimeAnalytics?.influencerAttributedRevenue : 0,\n },\n influencerInsights: userDetails?.analytics?.influencerInsights,\n currency: userDetails?.analytics?.currency\n })\n } else {\n setIsLoadingAnalytics(true)\n GetBusinessAnalytics(userDetails?.businessId, getAnalyticsDateString(datePickerState.startDate), getAnalyticsDateString(datePickerState.endDate))\n .then(response => {\n const overviewAnalytics = {\n links: {\n visits: response?.looks_analytics?.visits ?? 0,\n completedCheckouts: response?.looks_analytics?.checkouts ?? 0,\n requestedCheckouts: response?.looks_analytics?.requested_checkouts ?? 0,\n revenue: response?.looks_analytics?.revenue ?? 0,\n cr: (response?.looks_analytics?.visits && response?.looks_analytics?.visits > 0) ? ((response?.looks_analytics?.checkouts ?? 0) / (response?.looks_analytics?.visits)) * 100 : 0,\n data: response?.looks_analytics?.data ?? [],\n totalTax: response?.looks_analytics?.total_tax ?? 0,\n influencerAttributedRevenue: response?.looks_analytics?.influencer_attributed_revenue ?? 0\n },\n shorts: {\n visits: response?.shorts_analytics?.visits ?? 0,\n completedCheckouts: response?.shorts_analytics?.checkouts ?? 0,\n requestedCheckouts: response?.shorts_analytics?.requested_checkouts ?? 0,\n revenue: response?.shorts_analytics?.revenue ?? 0,\n cr: (response?.shorts_analytics?.visits && response?.shorts_analytics?.visits > 0) ? ((response?.shorts_analytics?.checkouts ?? 0) / (response?.shorts_analytics?.visits)) * 100 : 0,\n data: response?.shorts_analytics?.data ?? [],\n totalTax: response?.shorts_analytics?.total_tax ?? 0,\n influencerAttributedRevenue: response?.shorts_analytics?.influencer_attributed_revenue ?? 0\n },\n shopboard: {\n visits: response?.shopboard_analytics?.visits ?? 0,\n completedCheckouts: response?.shopboard_analytics?.checkouts ?? 0,\n requestedCheckouts: response?.shopboard_analytics?.requested_checkouts ?? 0,\n revenue: response?.shopboard_analytics?.revenue ?? 0,\n cr: (response?.shopboard_analytics?.visits && response?.shopboard_analytics?.visits > 0) ? ((response?.shopboard_analytics?.checkouts ?? 0) / (response?.shopboard_analytics?.visits)) * 100 : 0,\n data: response?.shopboard_analytics?.data ?? [],\n totalTax: response?.shopboard_analytics?.total_tax ?? 0,\n influencerAttributedRevenue: response?.shopboard_analytics?.influencer_attributed_revenue ?? 0\n },\n influencerInsights: response?.influencers_insights?.map(influencer_insight => extractExtendedInfluencerAnalytics(influencer_insight)),\n currency: response?.currency ?? DEFAULT_CURRENCY_CODE,\n }\n setOverviewData(overviewAnalytics)\n if (isLifetimeRangeSelected()) {\n setUserDetails(prev => ({\n ...prev,\n analytics: {\n ...prev.analytics,\n currency: overviewAnalytics?.currency,\n linksLifetimeAnalytics: {\n clicks: overviewAnalytics?.links?.visits,\n sales: overviewAnalytics?.links?.completedCheckouts,\n checkouts: overviewAnalytics?.links?.requestedCheckouts,\n revenue: overviewAnalytics?.links?.revenue,\n totalTax: overviewAnalytics?.links?.totalTax,\n influencerAttributedRevenue: overviewAnalytics?.links?.influencerAttributedRevenue,\n data: overviewAnalytics?.links?.data\n },\n shortsLifetimeAnalytics: {\n clicks: overviewAnalytics?.shorts?.visits,\n sales: overviewAnalytics?.shorts?.completedCheckouts,\n checkouts: overviewAnalytics?.shorts?.requestedCheckouts,\n revenue: overviewAnalytics?.shorts?.revenue,\n totalTax: overviewAnalytics?.shorts?.totalTax,\n influencerAttributedRevenue: overviewAnalytics?.shorts?.influencerAttributedRevenue,\n data: overviewAnalytics?.shorts?.data\n },\n influencerInsights: overviewAnalytics?.influencerInsights,\n },\n shopboard: {\n ...prev.shopboard,\n analytics: {\n ...prev.shopboard.analytics,\n synced: true,\n visits: overviewAnalytics?.shopboard?.visits ?? '-',\n sales: overviewAnalytics?.shopboard?.completedCheckouts ?? '-',\n checkouts: overviewAnalytics?.shopboard?.requestedCheckouts ?? '-',\n cr: overviewAnalytics?.shopboard?.cr ?? '-',\n revenue: overviewAnalytics?.shopboard?.revenue ?? '-',\n totalTax: overviewAnalytics?.shopboard?.totalTax ?? '-',\n influencerAttributedRevenue: overviewAnalytics?.shopboard?.influencerAttributedRevenue ?? '-',\n data: overviewAnalytics?.shopboard?.data ?? [],\n currency: overviewAnalytics?.currency,\n },\n }\n }))\n }\n })\n .finally(error => {\n setIsLoadingAnalytics(false)\n })\n }\n setShouldApplyDateRange(false)\n setIsLoadingTabs(false)\n }\n }, [shouldApplyDateRange])\n\n function isLifetimeRangeSelected() {\n return datePickerState.startDate === null && datePickerState.endDate === null\n }\n\n function isLinksTabSelected() {\n return selectedTabOptionIndex === (userDetails?.isAdmin ? 0 : 1)\n }\n\n function isShortsTabSelected() {\n return selectedTabOptionIndex === (userDetails?.isAdmin ? 1 : 2)\n }\n\n function isShopboardTabSelected() {\n return userDetails?.isAdmin && selectedTabOptionIndex === 2\n }\n\n function isNotLast24HoursSelected() {\n return overviewTimeIntervalName !== ANALYTICS_PAGE_RETROACTIVE_DATA_REPORT_TIME_INTERVALS_NAMES.LAST_24_HOURS\n }\n\n function influencerTabsPermissionsAllowed() {\n return userDetails?.permissions?.clicksEnabled || userDetails?.permissions?.salesEnabled || userDetails?.permissions?.revenueEnabled\n }\n\n function isValueEnabled(isValueEnabled) {\n return userDetails?.isAdmin || isValueEnabled\n }\n\n function onDateRangeSelected(startDate, endDate) {\n setDatePickerState({\n startDate,\n endDate\n })\n }\n\n function getLinkDataOverviewForCurrentTab() {\n if (isLinksTabSelected()) {\n return overviewData?.links\n } else if (isShortsTabSelected()) {\n return overviewData?.shorts\n } else {\n return overviewData?.shopboard\n }\n }\n\n function renderAnalyticsContent() {\n if (isLinksTabSelected() || isShortsTabSelected() || isShopboardTabSelected()) {\n return <>\n <div className={isMobile ? \"mobile-analytics-page-overall-statistics\" : \"analytics-page-overall-statistics\"}>\n {isValueEnabled(userDetails?.permissions?.clicksEnabled) && <AnalyticsDataCard\n title={t('ANALYTICS_PAGE_OVERVIEW_SECTION_FRAME_VISITS')}\n value={formatNumber(getLinkDataOverviewForCurrentTab()?.visits, NUMBER_TYPES.SHORT)}\n tooltipText={t('ANALYTICS_PAGE_OVERVIEW_SECTION_FRAME_VISITS_TOOLTIP_TEXT')}\n isDataLoading={isLoadingAnalytics}\n />}\n {/* {(isValueEnabled(userDetails?.permissions?.salesEnabled) && isLinksTabSelected()) && <AnalyticsDataCard\n title={t('ANALYTICS_PAGE_OVERVIEW_SECTION_FRAME_REQUESTED_CHECKOUTS')}\n value={formatNumber(Math.max(getLinkDataOverviewForCurrentTab()?.requestedCheckouts, getLinkDataOverviewForCurrentTab()?.completedCheckouts), NUMBER_TYPES.SHORT)}\n tooltipText={t('ANALYTICS_PAGE_OVERVIEW_SECTION_FRAME_REQUESTED_CHECKOUTS_TOOLTIP_TEXT')}\n isTooltipHorizontalSwap={isMobile}\n isDataLoading={isLoadingAnalytics}\n />} */}\n {isValueEnabled(userDetails?.permissions?.salesEnabled) && <AnalyticsDataCard\n title={t('ANALYTICS_PAGE_OVERVIEW_SECTION_FRAME_COMPLETED_CHECKOUTS')}\n value={formatNumber(getLinkDataOverviewForCurrentTab()?.completedCheckouts, NUMBER_TYPES.SHORT)}\n tooltipText={t('ANALYTICS_PAGE_OVERVIEW_SECTION_FRAME_COMPLETED_CHECKOUTS_TOOLTIP_TEXT')}\n isDataLoading={isLoadingAnalytics}\n />}\n {isValueEnabled(userDetails?.permissions?.salesEnabled && userDetails?.permissions?.clicksEnabled && userDetails?.permissions?.crEnabled) && <AnalyticsDataCard\n title={t('ANALYTICS_PAGE_OVERVIEW_SECTION_FRAME_CR')}\n value={`${formatNumber(getLinkDataOverviewForCurrentTab()?.cr, NUMBER_TYPES.PERCENTAGE)}%`}\n tooltipText={t('ANALYTICS_PAGE_OVERVIEW_SECTION_FRAME_CR_TOOLTIP_TEXT')}\n isTooltipHorizontalSwap={isMobile}\n isDataLoading={isLoadingAnalytics}\n />}\n {isValueEnabled(userDetails?.permissions?.revenueEnabled) && <AnalyticsDataCard\n title={userDetails?.isAdmin ? t('ANALYTICS_PAGE_OVERVIEW_SECTION_FRAME_REVENUE') : t('ANALYTICS_PAGE_OVERVIEW_SECTION_FRAME_INFLIUENCER_REVENUE')}\n value={`${getCurrencySymbol(overviewData?.currency)}${formatNumber((userDetails?.isAdmin ? getLinkDataOverviewForCurrentTab()?.revenue : getLinkDataOverviewForCurrentTab()?.influencerAttributedRevenue), NUMBER_TYPES.SHORT)}`}\n tooltipText={userDetails?. isAdmin ? t('ANALYTICS_PAGE_OVERVIEW_SECTION_FRAME_REVENUE_TOOLTIP_TEXT') : t(\"ANALYTICS_PAGE_OVERVIEW_SECTION_FRAME_INFLIUENCER_REVENUE_TOOLTIP_TEXT\")}\n isDataLoading={isLoadingAnalytics}\n />}\n {isValueEnabled(userDetails?.permissions?.salesEnabled && userDetails?.permissions?.revenueEnabled && userDetails?.permissions?.aovEnabled) && <AnalyticsDataCard\n title={t('ANALYTICS_PAGE_OVERVIEW_SECTION_FRAME_AOV')}\n value={`${getCurrencySymbol(overviewData?.currency)}${formatNumber(getLinkDataOverviewForCurrentTab()?.revenue / getLinkDataOverviewForCurrentTab()?.completedCheckouts, NUMBER_TYPES.SHORT, true)}`}\n tooltipText={t('ANALYTICS_PAGE_OVERVIEW_SECTION_FRAME_AOV_TOOLTIP_TEXT')}\n isTooltipHorizontalSwap={isMobile}\n isDataLoading={isLoadingAnalytics}\n />}\n </div>\n <div className={isMobile ? \"mobile-analytics-page-charts-container\" : \"analytics-page-charts-container\"}>\n {\n isNotLast24HoursSelected() && <LinkAnalyticsCharts\n chartsData={getLinkDataOverviewForCurrentTab()?.data}\n isLoadingChartsData={isLoadingAnalytics}\n currency={getCurrencySymbol(overviewData?.currency)}\n timeRangeName={overviewTimeIntervalName.toLowerCase()}\n noBackgroundColor={true}\n />\n }\n </div>\n </>\n }\n \n return <InfluencerInsights\n totalRevenue={overviewData?.influencerInsights?.reduce((totalRevenueSum, influencer) => (influencer?.totalRevenue ?? 0) + totalRevenueSum, 0)}\n totalRefunded={overviewData?.influencerInsights?.reduce((totalRefundedSum, influencer) => (influencer?.totalRefunded ?? 0) + totalRefundedSum, 0)}\n influencerAttributedRevenue={overviewData?.influencerInsights?.reduce((influencerAttributedRevenueSum, influencer) => (influencer?.influencerAttributedRevenue ?? 0) + influencerAttributedRevenueSum, 0)}\n commission={overviewData?.influencerInsights?.reduce((commissionSum, influencer) => (influencer?.commission ?? 0) + commissionSum, 0)}\n totalLinksSales={overviewData?.influencerInsights?.reduce((salesLinksSum, influencer) => (influencer?.salesLinks ?? 0) + salesLinksSum, 0)}\n totalShortsSales={overviewData?.influencerInsights?.reduce((salesShortsSum, influencer) => (influencer?.salesShorts ?? 0) + salesShortsSum, 0)}\n totalOrganicSales={overviewData?.influencerInsights?.reduce((salesOrganicSum, influencer) => (influencer?.salesOrganic ?? 0) + salesOrganicSum, 0)}\n totalLinksRevenue={overviewData?.influencerInsights?.reduce((revenueLinksSum, influencer) => (influencer?.revenueLinks ?? 0) + revenueLinksSum, 0)}\n totalShortsRevenue={overviewData?.influencerInsights?.reduce((revenueShortsSum, influencer) => (influencer?.revenueShorts ?? 0) + revenueShortsSum, 0)}\n totalOrganicRevenue={overviewData?.influencerInsights?.reduce((revenueOrganicSum, influencer) => (influencer?.revenueOrganic ?? 0) + revenueOrganicSum, 0)}\n linksClicks={overviewData?.influencerInsights?.reduce((linksClicksSum, influencer) => (influencer?.linksClicks ?? 0) + linksClicksSum, 0)}\n shortsClicks={overviewData?.influencerInsights?.reduce((shortsClicksSum, influencer) => (influencer?.shortsClicks ?? 0) + shortsClicksSum, 0)}\n currency={overviewData?.currency}\n isLoadingData={isLoadingAnalytics}\n showCommission={!userDetails?.isAdmin} // Not showing comission on admin analytics page, instead showing total sales\n isGeneralAnalytics={true}\n />\n }\n\n return (\n <>\n <div className={isMobile ? 'mobile-analytics-page-container' : 'analytics-page-container'}>\n {isLoadingTabs && <DashboardLoader />}\n <div className={isMobile ? \"mobile-analytics-page-title-container\" : \"analytics-page-title-container\"}>\n {\n isMobile ? <ContentDialogTopbar\n title={t('ANALYTICS_PAGE_TITLE')}\n onBackButtonClick={() => history.goBack()}\n rightElement={<></>}\n /> : <div className=\"analytics-page-title dashboard-page-title\">{t('ANALYTICS_PAGE_TITLE')}</div>\n }\n <TimeSelect\n selectedStartDate={datePickerState.startDate}\n selectedEndDate={datePickerState.endDate}\n timeIntervals={ANALYTICS_PAGE_RETROACTIVE_DATA_REPORT_TIME_INTERVALS}\n setStartEndDates={onDateRangeSelected}\n selectedTimeInterval={overviewTimeIntervalName}\n onTimeIntervalSelect={setOverviewTimeIntervalName}\n setShouldApplyDateRange={setShouldApplyDateRange}\n />\n </div>\n <Tabs\n selectedTabOptionIndex={selectedTabOptionIndex}\n setSelectedTabOptionIndex={setSelectedTabOptionIndex}\n tabs={userDetails?.isAdmin ? ANALYTICS_TAB_OPTIONS_WITH_SHOPBOARD : (influencerTabsPermissionsAllowed() ? INFLUENCER_TAB_OPTIONS : INFLUENCER_TAB_OPTIONS_COMMISSION_ONLY)}\n />\n <div className=\"analytics-page-content\">\n {renderAnalyticsContent()}\n </div>\n </div>\n </>\n )\n}","import React, { useState } from 'react'\nimport './AccountSection.css'\nimport Card from 'components/Card/Card'\nimport { isMobile } from 'utils/deviceUtils'\nimport PaydinSwitch from 'components/PaydinSwitch/PaydinSwitch'\n\n/**\n * Represents an account page section.\n * @param {DOMElement} buttons - The node element for the buttons section \n * @param {string} title - The title for this section \n * @param {string} id - The id for this section \n * @param {string} sectionContentClassName - A class name for this section's content \n * @param {boolean} hasTitle - Determins whether this section has a title or not\n * @param {boolean} hasToggleSwitch - Determins whether this section has a switch for this section or not\n * @param {boolean} shouldControlContent - Determins whether this section's switch controls the content's appearance or not. If false, then isContentShown is ignored\n * @param {boolean} isContentShown - Determins whether this section's content is shown or not\n * @param {function} setIsContentShown - A function for setting the section's content's appearance\n * @param {Node} rightTopCornerContent - An optional element for display in the right top corner of this section\n */\nexport default function AccountSection({\n children,\n title = '',\n id = '',\n sectionContentClassName = '',\n hasToggleSwitch = false,\n shouldControlContent = true,\n isContentShown = true,\n setIsContentShown = () => { },\n rightTopCornerContent = <></>\n}) {\n function renderTitleRow() {\n return <div className=\"account-page-section-title-container\">\n {title && <div className=\"account-page-section-title\">{title}</div>}\n <div className=\"account-page-section-right-top-corner-content\">\n {rightTopCornerContent}\n {renderSwitch()}\n </div>\n </div>\n }\n\n function renderSwitch() {\n return hasToggleSwitch && <PaydinSwitch\n checked={isContentShown}\n setChecked={setIsContentShown}\n />\n }\n\n return (\n isMobile ? <div className='mobile-account-page-section' id={id}>\n {renderTitleRow()}\n <div className={`account-page-section-content ${sectionContentClassName}`}>\n {children}\n </div>\n </div> : <Card>\n <div className='account-page-section' id={id}>\n {renderTitleRow()}\n {\n !shouldControlContent ? <div className={`account-page-section-content ${sectionContentClassName}`}>\n {children}\n </div> : isContentShown && <div className={`account-page-section-content ${sectionContentClassName}`}>\n {children}\n </div>\n }\n </div>\n </Card>\n )\n}","import React from 'react'\nimport './SettingsInput.css'\n\n/**\n * Represents an input for a settings page.\n * @param {string} name - The name of the input\n * @param {string} value - The value of the input\n * @param {boolean} isDisabled - If true, disables the input, otherwise, enables the input\n * @param {string} prefix - A prefix for the input. If it's non-empty value, prepends it to the start of the input, otherwise, hides the prefix\n * @param {string} placeholder - A placeholder text for the input\n * @param {function} onValueChange - A function to perform whenever the input value was changed\n */\nexport default function SettingsInput({\n name,\n value,\n content,\n isDisabled = false,\n prefix = null,\n placeholder = '',\n onValueChange = () => { }\n}) {\n return (\n <div className=\"settings-input-container\">\n {\n content ?? (\n <>\n {prefix && <div className=\"settings-input-prefix\">{prefix}</div>}\n <input className=\"settings-input\" disabled={isDisabled} placeholder={placeholder} value={value} name={name} onChange={onValueChange} />\n </>\n )\n }\n </div>\n )\n}","import React, { useState } from 'react'\nimport './ConfirmDisconnectDialog.css'\nimport PaydinDialog from 'dialogs/PaydinDialog/PaydinDialog'\nimport { Trans, useTranslation } from 'react-i18next'\nimport EditFieldSectionInput from 'components/EditFieldSectionInput/EditFieldSectionInput'\nimport LoaderButton from 'components/LoaderButton/LoaderButton'\nimport { useHistoryContext } from 'contexts/History'\nimport { isMobile } from 'utils/deviceUtils'\n\nexport default function ConfirmDisconnectDialog({\n isDialogOpen,\n handleDialogClose,\n isDisconnecting = false,\n onDisconnectClick = () => { }\n}) {\n const { t } = useTranslation()\n const history = useHistoryContext()\n\n const [disconnectConfirmText, setDisconnectConfirmText] = useState('')\n\n return (\n <PaydinDialog\n isDialogOpen={isDialogOpen}\n handleDialogClose={handleDialogClose}\n dialogLayout={<>\n <div className='disconnect-confirm-dialog'>\n <div className=\"disconnect-confirm-dialog-titles-container\">\n <div className=\"disconnect-confirm-dialog-title\">{t('ACCOUNT_PAGE_CONFIRM_DISCONNECT_STORE_DIALOG_TITLE')}</div>\n <div className=\"disconnect-confirm-dialog-subtitle\">\n <Trans\n i18nKey={'ACCOUNT_PAGE_CONFIRM_DISCONNECT_STORE_DIALOG_SUBTITLE'}\n components={{\n p: <b />\n }}\n />\n </div>\n </div>\n <EditFieldSectionInput\n value={disconnectConfirmText}\n setValue={setDisconnectConfirmText}\n placeholder={t('ACCOUNT_PAGE_CONFIRM_DISCONNECT_STORE_DIALOG_CONFIRM_TEXT')}\n enlargedTextField={true}\n showTopSection={false}\n id='confirm-text'\n />\n <div className={isMobile ? \"mobile-disconnect-confirm-dialog-buttons\" : \"disconnect-confirm-dialog-buttons\"}>\n <LoaderButton\n onClick={() => history.goBack()}\n className=\"disconnect-confirm-dialog-left-button\"\n buttonText={t('ACCOUNT_PAGE_CONFIRM_DISCONNECT_STORE_DIALOG_LEFT_BUTTON_TEXT')}\n />\n <LoaderButton\n isLoading={isDisconnecting}\n loaderArchColor='grey'\n onClick={onDisconnectClick}\n isDisabled={disconnectConfirmText !== t('ACCOUNT_PAGE_CONFIRM_DISCONNECT_STORE_DIALOG_CONFIRM_TEXT')}\n className=\"disconnect-confirm-dialog-right-button\"\n buttonText={t('ACCOUNT_PAGE_CONFIRM_DISCONNECT_STORE_DIALOG_RIGHT_BUTTON_TEXT')}\n />\n </div>\n </div>\n </>}\n />\n )\n}","import React, { useState } from 'react'\nimport './SocialConnectButton.css'\nimport LoaderButton from 'components/LoaderButton/LoaderButton'\nimport { useTranslation } from 'react-i18next'\nimport { INSTAGRAM_BLACK_WHITE_LOGO_URL, PINTEREST_BLACK_WHITE_LOGO_URL, SHOPBOARD_SOCIALS, TIKTOK_BLACK_WHITE_LOGO_URL } from 'constants/general.constants'\nimport { useUserDetailsContext } from 'contexts/User'\nimport ImageBox from 'components/ImageBox/ImageBox'\n\nexport default function SocialConnectButton({\n social = SHOPBOARD_SOCIALS.INSTAGRAM,\n stretchWidth = true\n}) {\n const { t } = useTranslation()\n const {\n shopboardConnect,\n } = useUserDetailsContext()\n\n const [isConnecting, setIsConnecting] = useState(false)\n\n const buttonContainerStyles = {\n width: stretchWidth ? '100%' : 'fit-content',\n ...(social === SHOPBOARD_SOCIALS.INSTAGRAM ? {backgroundImage: 'linear-gradient(45deg, #405de6, #5851db, #833ab4, #c13584, #e1306c, #fd1d1d)'} : {backgroundColor: getButtonBackgroundColor(social)})\n }\n\n function onConnectClick() {\n setIsConnecting(true)\n shopboardConnect(social)\n }\n\n function getButtonImageUrl(social) {\n switch (social) {\n case SHOPBOARD_SOCIALS.INSTAGRAM: return INSTAGRAM_BLACK_WHITE_LOGO_URL\n case SHOPBOARD_SOCIALS.TIKTOK: return TIKTOK_BLACK_WHITE_LOGO_URL\n default: return PINTEREST_BLACK_WHITE_LOGO_URL\n }\n }\n\n function getButtonBackgroundColor(social) {\n switch (social) {\n case SHOPBOARD_SOCIALS.TIKTOK: return 'black'\n default: return '#d13d3a'\n }\n }\n\n function getButtonText(social) {\n switch (social) {\n case SHOPBOARD_SOCIALS.INSTAGRAM: return t('SHOPBOARD_PAGE_INSTAGRAM_TAB_TEXT')\n case SHOPBOARD_SOCIALS.TIKTOK: return t('SHOPBOARD_PAGE_TIKTOK_TAB_TEXT')\n default: return t('SHOPBOARD_PAGE_PINTEREST_TAB_TEXT')\n }\n }\n\n return (\n <LoaderButton\n className='shopboard-connect-button'\n styles={buttonContainerStyles}\n buttonText={<div style={{\n display: 'flex',\n gap: '15px'\n }}>\n <ImageBox\n image={getButtonImageUrl(social)}\n className='shopboard-connect-button-image'\n />\n {/* TODO - Add comment part if for disabling pinterest */}\n <div className=\"shopboard-connect-button-text\">{/* social === SHOPBOARD_SOCIALS.PINTEREST ? \"Coming soon\" : */t('SHOPBOARD_CONNECT_BUTTON_TEXT', { social: getButtonText(social) })}</div>\n </div>}\n isLoading={isConnecting}\n // TODO - Add comment part for disabling pinterest\n onClick={/* social === SHOPBOARD_SOCIALS.PINTEREST ? () => {} : */onConnectClick}\n />\n )\n}\n","import React, { useState } from 'react'\nimport './ShopboardSocialStatus.css'\nimport { useTranslation } from 'react-i18next'\nimport { useUserDetailsContext } from 'contexts/User'\nimport { SHOPBOARD_SOCIALS } from 'constants/general.constants'\nimport Loader from 'components/Loader/Loader'\nimport { isMobile } from 'utils/deviceUtils'\nimport SocialConnectButton from 'components/SocialConnectButton/SocialConnectButton'\n\nexport default function ShopboardSocialStatus({\n title = '',\n image = '',\n postsCount = null,\n social = SHOPBOARD_SOCIALS.INSTAGRAM,\n showStyledButton = true,\n showImage = true,\n username = \"\",\n titleStyles={}\n}) {\n const { t } = useTranslation()\n const {\n shopboardConnect\n } = useUserDetailsContext()\n\n const [isConnecting, setIsConnecting] = useState(false)\n\n function onConnetClick() {\n setIsConnecting(true)\n shopboardConnect(social, error => setIsConnecting(false))\n }\n\n function renderStatus() {\n if (!isMobile && isConnecting) {\n return <div className='shopboard-social-status-loader-container'>\n <Loader styles={{ width: '15px', height: '15px', margin: 'auto' }} />\n </div>\n }\n\n if (postsCount === null) {\n // TODO - Add when disabling pinterest\n // if (social === SHOPBOARD_SOCIALS.PINTEREST) {\n // return <div className='shopboard-social-status-username-count'>\n // {(isMobile && showStyledButton) ? <SocialConnectButton social={social} stretchWidth={true} /> : <div className=\"shopboard-social-status-connect-button-disabled\">{\"Coming soon\"}</div>}\n // </div>\n // }\n return <div className='shopboard-social-status-username-count'>\n {(isMobile && showStyledButton) ? <SocialConnectButton social={social} stretchWidth={true} /> : <div onClick={onConnetClick} className=\"shopboard-social-status-connect-button\">{t('SHOPBOARD_SOCIALS_STATUS_CONNECT_BUTTON_TEXT')}</div>}\n </div>\n }\n\n if (postsCount === -1) {\n return <div className='shopboard-social-status-username-count'>\n <div className=\"shopboard-social-status-posts-count\">{username.slice(0, 15)}</div>\n <div className=\"shopboard-social-status-posts-count\">Syncing</div>\n </div>\n }\n\n return <div className='shopboard-social-status-username-count'>\n <div className=\"shopboard-social-status-posts-count\">{username.slice(0, 15)}</div>\n <div className=\"shopboard-social-status-posts-count\">{t('SHOPBOARD_SOCIALS_STATUS_POSTS_QUANTITY_TEXT', { postsCount })}</div>\n </div>\n }\n\n return (\n <div className='shopboard-social-status'>\n {title && <div className=\"shopboard-social-status-title\" style={titleStyles}>{title}</div>}\n <div className=\"shopboard-social-status-content\">\n {(!isMobile || showImage) && image}\n {renderStatus()}\n </div>\n </div>\n )\n}","import React, { useEffect, useState } from 'react'\nimport './AccountPage.css'\nimport { useTranslation } from 'react-i18next'\nimport AccountSection from 'components/AccountSection/AccountSection'\nimport PaydinDialog, { PAYDIN_DIALOG_BUTTON_TYPES } from 'dialogs/PaydinDialog/PaydinDialog'\nimport { useHistoryContext } from 'contexts/History'\nimport { isMobile } from 'utils/deviceUtils'\nimport { useAuthContext, useUserDetailsContext } from 'contexts/User'\nimport ShopifyConnectStore from 'components/ShopifyConnectStore/ShopifyConnectStore'\nimport { ACCOUNT_PAGE_EMAIL_INPUT_NAME, SETTINGS_PAGES_BUTTON_LOADER_CIRCLE_COLOR, SHOPIFY_CONNECT_SHOPIFY_SHOP_URL_SUFFIX, SHOPIFY_LOGO_URL, ACCOUNT_PAGE_USERNAME_INPUT_NAME, INSTAGRAM_LOGO_URL, PINTEREST_LOGO_URL, TIKTOK_LOGO_URL, SHOPBOARD_SOCIALS, PRICING_PLAN_DATA } from 'constants/general.constants'\nimport { ConnectStoreAPI, DisconnectStore, SyncProducts } from 'api/store/store'\nimport { LINKS_PAGE_URL, PRICING_PLANS_PAGE_URL, APPEARANCE_PAGE_URL, HOME_PAGE_URL } from 'constants/routes.constants'\nimport { ResetUserPassword, UpdateUserInfo } from 'api/auth/auth'\nimport LoaderButton from 'components/LoaderButton/LoaderButton'\nimport ImageBox from 'components/ImageBox/ImageBox'\nimport ApprovalMessage from 'components/ApprovalMessage/ApprovalMessage'\nimport SettingsInput from 'components/SettingsInput/SettingsInput'\nimport ConfirmDisconnectDialog from 'dialogs/ConfirmDisconnectDialog/ConfirmDisconnectDialog'\nimport ContentDialogTopbar from 'components/ContentDialogTopbar/ContentDialogTopbar'\nimport ShopboardSocialStatus from 'components/ShopboardSocialStatus/ShopboardSocialStatus'\n\n/**\n * Represents the account page.\n */\nexport default function AccountPage() {\n const { t } = useTranslation()\n const history = useHistoryContext()\n const {\n userDetails,\n hasShopifyStore,\n shopboardDisconnect,\n isShopboardConnected,\n checkShopboardStatus\n } = useUserDetailsContext()\n const { verify } = useAuthContext()\n\n const [inputState, setInputState] = useState({\n name: userDetails.name,\n email: userDetails.email\n })\n\n const [isConnectingStore, setIsConnectingStore] = useState(false)\n const [isShopifyConnectionFail, setIsShopifyConnectionFail] = useState(false)\n const [dialogState, setDialogState] = useState({\n isOpen: false,\n handleDialogClose: closeDialog,\n title: '',\n leftButtonText: '',\n rightButtonText: '',\n rightButtonClickHandler: () => { }\n })\n const [buttonsLoadingState, setButtonsLoadingState] = useState({\n saveAnalyticsIntegrations: false,\n saveUtmParams: false,\n saveShippingAndReturnUrl: false,\n disconnect: false,\n forceProductSync: false,\n resetPassword: false,\n deleteAccount: false,\n instagramDisconnect: false,\n tiktokDisconnect: false,\n pinterestDisconnect: false\n })\n const [approvalMessageState, setApprovalMessageState] = useState({\n isMessageShown: false,\n text: t('')\n })\n const [isConfirmDisconnectDialogOpen, setIsConfirmDisconnectDialogOpen] = useState(false)\n\n useEffect(() => {\n if (!userDetails?.shopboard?.synced) {\n checkShopboardStatus()\n }\n }, [])\n\n function connectShopifyStore(shopUrlPrefix) {\n window.open(\"https://apps.shopify.com/shopeaks\", \"_blank\", \"noreferrer\")\n // TODO - shopify review don't allow requesting myshopify url. So for now redirecting to app store.\n // setIsConnectingStore(true)\n // ConnectStoreAPI(shopUrlPrefix + SHOPIFY_CONNECT_SHOPIFY_SHOP_URL_SUFFIX)\n // .then(redirectUrl => {\n // setIsConnectingStore(false)\n // window.open(redirectUrl, \"_blank\", \"noreferrer\")\n // })\n // .catch(error => {\n // console.log(error)\n // setIsConnectingStore(false)\n // setIsShopifyConnectionFail(true)\n // })\n }\n\n function hideApprovalMassage() {\n setApprovalMessageState(prev => ({\n ...prev,\n isMessageShown: false\n }))\n }\n\n function showApprovalMessage(text) {\n setApprovalMessageState(prev => ({\n ...prev,\n isMessageShown: true,\n text\n }))\n }\n\n function upgradePlan() {\n history.push(PRICING_PLANS_PAGE_URL)\n }\n\n function closeConfirmDisconnectDialog() {\n setIsConfirmDisconnectDialogOpen(false)\n }\n\n function openDisconnectConfirmDialog() {\n setIsConfirmDisconnectDialogOpen(true)\n }\n\n function disconnect() {\n setButtonsLoadingState(prev => ({\n ...prev,\n disconnect: true\n }))\n DisconnectStore(userDetails?.businessId)\n .then(response => {\n verify(data => {\n history.push(HOME_PAGE_URL)\n }, error => {\n setButtonsLoadingState(prev => ({\n ...prev,\n disconnect: false\n }))\n console.log(error)\n })\n })\n .catch(error => {\n setButtonsLoadingState(prev => ({\n ...prev,\n disconnect: false\n }))\n console.log(error)\n })\n }\n\n function syncProducts() {\n setButtonsLoadingState(prev => ({\n ...prev,\n forceProductSync: true\n }))\n SyncProducts(userDetails?.businessId)\n .then(response => {\n if (response.status) {\n showApprovalMessage(t('ACCOUNT_PAGE_PRODUCTS_SYNCED_APPROVAL_MESSAGE_TEXT'))\n } else {\n showApprovalMessage(t('ACCOUNT_PAGE_PRODUCTS_SYNCED_ERROR_MESSAGE_TEXT'))\n }\n setButtonsLoadingState(prev => ({\n ...prev,\n forceProductSync: false\n }))\n })\n .catch(error => {\n showApprovalMessage(t('ACCOUNT_PAGE_PRODUCTS_SYNCED_APPROVAL_MESSAGE_TEXT'))\n setButtonsLoadingState(prev => ({\n ...prev,\n forceProductSync: false\n }))\n })\n }\n\n function resetPassword() {\n setButtonsLoadingState(prev => ({\n ...prev,\n resetPassword: true\n }))\n ResetUserPassword()\n .then(response => {\n setButtonsLoadingState(prev => ({\n ...prev,\n resetPassword: false\n }))\n setDialogState(prev => ({\n ...prev,\n isOpen: true,\n title: t('RESET_PASSWORD_EMAIL_SENT_DIALOG_TITLE'),\n rightButtonText: null,\n leftButtonText: t('ACCOUNT_PAGE_RESET_PASSWORD_EMAIL_SENT_DIALOG_LEFT_BUTTON_TEXT')\n }))\n })\n .catch(error => {\n setButtonsLoadingState(prev => ({\n ...prev,\n resetPassword: false\n }))\n console.log(error)\n })\n }\n\n function deleteAccount() {\n // TODO add delete account logic\n console.log('deleting account...')\n }\n\n function onDeleteAccountButtonClick() {\n setDialogState(prev => ({\n ...prev,\n isOpen: true,\n title: t('ACCOUNT_PAGE_DELETE_ACCOUNT_CONFIRMATION_DIALOG_TITLE'),\n leftButtonText: t('ACCOUNT_PAGE_DELETE_ACCOUNT_CONFIRMATION_DIALOG_LEFT_BUTTON_TEXT'),\n rightButtonText: t('ACCOUNT_PAGE_DELETE_ACCOUNT_CONFIRMATION_DIALOG_RIGHT_BUTTON_TEXT'),\n rightButtonClickHandler: deleteAccount,\n dialogLayout: null\n }))\n }\n\n function closeDialog() {\n setDialogState(prev => ({\n ...prev,\n isOpen: false\n }))\n }\n\n function handleInputChange(e) {\n switch (e.target.name) {\n case ACCOUNT_PAGE_EMAIL_INPUT_NAME:\n setInputState(prev => ({\n ...prev,\n email: e.target.value\n }))\n break\n }\n }\n\n function goToLinks() {\n history.push(LINKS_PAGE_URL)\n }\n\n function goToAppearance() {\n history.push(APPEARANCE_PAGE_URL)\n }\n\n function disconnectSocial(social) {\n setButtonsLoadingState(prev => ({\n ...prev,\n [`${social}Disconnect`]: true\n }))\n shopboardDisconnect(social, () => {\n setButtonsLoadingState(prev => ({\n ...prev,\n [`${social}Disconnect`]: false\n }))\n }, error => {\n setButtonsLoadingState(prev => ({\n ...prev,\n [`${social}Disconnect`]: false\n }))\n })\n }\n\n function getPlanTitle(name) {\n console.log(name)\n const subscriptedPricingPlanName = Object.keys(PRICING_PLAN_DATA).find(pricingPlanName => PRICING_PLAN_DATA[pricingPlanName].name === name.toLowerCase())\n const subscriptedPricingPlan = PRICING_PLAN_DATA[subscriptedPricingPlanName]\n\n return subscriptedPricingPlan.presentedName.toUpperCase()\n }\n\n return (\n <div className={isMobile ? 'mobile-account-page-container' : 'account-page-container'}>\n {\n isMobile ? <ContentDialogTopbar\n title={t('ACCOUNT_PAGE_TITLE')}\n onBackButtonClick={() => history.goBack()}\n rightElement={<></>}\n /> : <div className=\"account-page-title dashboard-page-title\">{t('ACCOUNT_PAGE_TITLE')}</div>\n }\n <div className=\"account-page-content\">\n <AccountSection\n title={t('ACCOUNT_PAGE_MY_INFORMATION_SECTION_TITLE')}\n sectionContentClassName='account-page-my-information-section-content'\n >\n <>\n {\n !userDetails?.isAdmin && <ImageBox\n image={userDetails?.influencerImageUrl}\n className='account-page-influencer-profile-image-container'\n imageClassName='account-page-influencer-profile-image'\n roundImage={true}\n />\n }\n <div className='store-settings-page-shop-website-section-subtitle-input-container'>\n <div className=\"settings-pages-subsection-title\">{t('ACCOUNT_PAGE_MY_INFORMATION_SECTION_USERNAME_INPUT_LABEL')}</div>\n <SettingsInput\n name={ACCOUNT_PAGE_USERNAME_INPUT_NAME}\n value={userDetails?.isAdmin ? userDetails?.username : userDetails?.influencerUsername}\n isDisabled={true}\n onValueChange={handleInputChange}\n />\n </div>\n <div className='store-settings-page-shop-website-section-subtitle-input-container'>\n <div className=\"settings-pages-subsection-title\">{t('ACCOUNT_PAGE_MY_INFORMATION_SECTION_EMAIL_INPUT_LABEL')}</div>\n <SettingsInput\n name={ACCOUNT_PAGE_EMAIL_INPUT_NAME}\n value={inputState.email}\n isDisabled={true}\n onValueChange={handleInputChange}\n />\n </div>\n {\n !userDetails?.isAdmin && <div className='store-settings-page-shop-website-section-subtitle-input-container'>\n <div className=\"settings-pages-subsection-title\">{t('ACCOUNT_PAGE_MY_INFORMATION_SECTION_MERCHANT_INPUT_LABEL')}</div>\n <SettingsInput\n content={<div className='account-page-merchant'>\n {\n userDetails?.businessLogo && <ImageBox\n image={userDetails?.businessLogo}\n className='account-page-merchant-logo'\n />\n }\n <div className=\"account-page-merchant-username\">{userDetails?.username}</div>\n </div>}\n />\n </div>\n }\n </>\n </AccountSection>\n {\n userDetails?.isAdmin && <>\n <AccountSection\n title={t('ACCOUNT_PAGE_CURRENT_ACCOUNT_SECTION_TITLE')}\n sectionContentClassName='account-page-current-account-section-content'\n >\n <>\n <div className=\"account-page-current-account-section-username\">@{userDetails?.username}</div>\n <div className=\"account-page-current-account-section-plan-details-container\">\n <div className=\"account-page-current-account-section-plan-details\">\n <div className=\"settings-pages-subsection-title\">{t('ACCOUNT_PAGE_CURRENT_ACCOUNT_SECTION_PLAN_DETAILS_TITLE')}</div>\n <div className=\"account-page-current-account-section-plan-details-plan-name\">{getPlanTitle(userDetails?.subscriptionPlan)}</div>\n </div>\n {!isMobile && <div className=\"account-page-current-account-section-upgrade-button\" onClick={upgradePlan}>{t('ACCOUNT_PAGE_CURRENT_ACCOUNT_SECTION_UPGRADE_BUTTON_TEXT')}</div>}\n </div>\n {isMobile && <div className=\"mobile-account-page-current-account-section-upgrade-button\" onClick={upgradePlan}>{t('ACCOUNT_PAGE_CURRENT_ACCOUNT_SECTION_UPGRADE_BUTTON_TEXT')}</div>}\n </>\n </AccountSection>\n <AccountSection\n title={t('ACCOUNT_PAGE_STORE_PROFILE_SECTION_TITLE')}\n sectionContentClassName='account-page-store-profile-section-content'\n >\n <>\n {\n hasShopifyStore() ? <>\n <div className=\"account-page-store-profile-section-content-row\">\n <div className=\"account-page-store-profile-section-logo-name-container\">\n <ImageBox\n image={SHOPIFY_LOGO_URL}\n className='account-page-store-profile-section-logo-container'\n />\n <div className=\"account-page-store-profile-section-store-name\">{userDetails?.businessName}</div>\n </div>\n <div className=\"account-page-store-profile-section-buttons-container\">\n <div className=\"account-page-store-profile-section-links-button account-page-store-profile-section-button\" onClick={goToLinks}>{t('ACCOUNT_PAGE_STORE_PROFILE_SECTION_LINKS_BUTTON_TEXT')}</div>\n <div className=\"account-page-store-profile-section-links-button account-page-store-profile-section-button\" onClick={goToAppearance}>{t('ACCOUNT_PAGE_STORE_PROFILE_SECTION_APPEARANCE_BUTTON_TEXT')}</div>\n </div>\n </div>\n </> : <ShopifyConnectStore\n isConnectingStore={isConnectingStore}\n isShopifyConnectionFail={isShopifyConnectionFail}\n connectShopifyStoreFunction={connectShopifyStore} />\n }\n {\n hasShopifyStore() && <>\n <div className=\"account-page-store-profile-section-spacer\"></div>\n <div className='account-page-store-profile-section-buttons-section' style={isMobile ? { flexDirection: 'column-reverse' } : { flexDirection: 'row' }}>\n <LoaderButton\n buttonText={t('ACCOUNT_PAGE_STORE_PROFILE_SECTION_FORCE_PRODUCT_SYNC_BUTTON_TEXT')}\n className='account-page-store-profile-section-force-product-sync-button'\n isLoading={buttonsLoadingState.forceProductSync}\n onClick={syncProducts}\n loaderCircleColor={SETTINGS_PAGES_BUTTON_LOADER_CIRCLE_COLOR}\n />\n <div className=\"account-page-store-profile-section-force-product-sync-instruction\">{t('ACCOUNT_PAGE_STORE_PROFILE_SECTION_FORCE_PRODUCT_SYNC_INSTRUCTION')}</div>\n </div>\n </>\n }\n {/* {\n hasShopifyStore() && <>\n <div className=\"account-page-store-profile-section-spacer\"></div>\n <div className='account-page-store-profile-section-buttons-section' style={isMobile ? { flexDirection: 'column-reverse' } : { flexDirection: 'row' }}>\n <LoaderButton\n buttonText={t('ACCOUNT_PAGE_STORE_PROFILE_SECTION_DISCONNECT_BUTTON_TEXT')}\n className='account-page-store-profile-section-disconnect-button'\n onClick={openDisconnectConfirmDialog}\n loaderCircleColor={SETTINGS_PAGES_BUTTON_LOADER_CIRCLE_COLOR}\n />\n <div className=\"account-page-store-profile-section-disconnection-instruction\">{t('ACCOUNT_PAGE_STORE_PROFILE_SECTION_DISCONNECTION_INSTRUCTION')}</div>\n </div>\n </>\n } */}\n </>\n </AccountSection>\n <AccountSection\n title={t('ACCOUNT_PAGE_PASSWORD_SECTION_TITLE')}\n sectionContentClassName='account-page-account-actions-section-content'\n >\n <>\n <div className=\"account-page-account-actions-section-container\">\n <div className=\"settings-pages-subsection-title\">{t('ACCOUNT_PAGE_ACCOUNT_ACTIONS_SECTION_RESET_PASSWORD_SUBTITLE')}</div>\n <LoaderButton\n buttonText={t('ACCOUNT_PAGE_ACCOUNT_ACTIONS_SECTION_RESET_PASSWORD_BUTTON_TEXT')}\n isLoading={buttonsLoadingState.resetPassword}\n className={`${isMobile ? 'mobile-account-page-account-actions-section-reset-password-button' : 'account-page-account-actions-section-reset-password-button'} account-page-store-profile-section-button`}\n onClick={resetPassword}\n loaderCircleColor={SETTINGS_PAGES_BUTTON_LOADER_CIRCLE_COLOR}\n />\n </div>\n </>\n </AccountSection>\n <AccountSection\n title={t('ACCOUNT_PAGE_SOCIAL_SECTION_TITLE')}\n sectionContentClassName='account-page-social-section-content'\n >\n <div className=\"account-page-social-section-social-status-container\">\n <ShopboardSocialStatus\n title={t('SHOPBOARD_SOCIALS_INSTAGRAM_TITLE')}\n showStyledButton={false}\n showImage={true}\n image={<ImageBox\n image={INSTAGRAM_LOGO_URL}\n className='account-page-social-section-status-image'\n />}\n postsCount={!isShopboardConnected(SHOPBOARD_SOCIALS.INSTAGRAM) ? null : userDetails?.shopboard?.socialMedias[SHOPBOARD_SOCIALS.INSTAGRAM]?.numberOfPosts}\n social={SHOPBOARD_SOCIALS.INSTAGRAM}\n username={!isShopboardConnected(SHOPBOARD_SOCIALS.INSTAGRAM) ? \"\" : userDetails?.shopboard?.socialMedias[SHOPBOARD_SOCIALS.INSTAGRAM]?.username}\n titleStyles={{fontWeight: '500'}}\n />\n {\n isShopboardConnected(SHOPBOARD_SOCIALS.INSTAGRAM) && <LoaderButton\n buttonText={t('ACCOUNT_PAGE_STORE_PROFILE_SECTION_DISCONNECT_BUTTON_TEXT')}\n isLoading={buttonsLoadingState.instagramDisconnect}\n className={'account-page-social-section-social-status-disconnect-button'}\n onClick={() => disconnectSocial(SHOPBOARD_SOCIALS.INSTAGRAM)}\n loaderCircleColor={SETTINGS_PAGES_BUTTON_LOADER_CIRCLE_COLOR}\n />\n }\n </div>\n <div className=\"account-page-social-section-social-status-container\">\n <ShopboardSocialStatus\n title={t('SHOPBOARD_SOCIALS_TIKTOK_TITLE')}\n showStyledButton={false}\n showImage={true}\n image={<ImageBox\n image={TIKTOK_LOGO_URL}\n className='account-page-social-section-status-image'\n />}\n postsCount={!isShopboardConnected(SHOPBOARD_SOCIALS.TIKTOK) ? null : userDetails?.shopboard?.socialMedias[SHOPBOARD_SOCIALS.TIKTOK]?.numberOfPosts}\n social={SHOPBOARD_SOCIALS.TIKTOK}\n username={!isShopboardConnected(SHOPBOARD_SOCIALS.TIKTOK) ? \"\" : userDetails?.shopboard?.socialMedias[SHOPBOARD_SOCIALS.TIKTOK]?.username}\n titleStyles={{fontWeight: '500'}}\n />\n {\n isShopboardConnected(SHOPBOARD_SOCIALS.TIKTOK) && <LoaderButton\n buttonText={t('ACCOUNT_PAGE_STORE_PROFILE_SECTION_DISCONNECT_BUTTON_TEXT')}\n isLoading={buttonsLoadingState.tiktokDisconnect}\n className={'account-page-social-section-social-status-disconnect-button'}\n onClick={() => disconnectSocial(SHOPBOARD_SOCIALS.TIKTOK)}\n loaderCircleColor={SETTINGS_PAGES_BUTTON_LOADER_CIRCLE_COLOR}\n />\n }\n </div>\n <div className=\"account-page-social-section-social-status-container\">\n <ShopboardSocialStatus\n title={t('SHOPBOARD_SOCIALS_PINTEREST_TITLE')}\n showStyledButton={false}\n showImage={true}\n image={<ImageBox\n image={PINTEREST_LOGO_URL}\n className='account-page-social-section-status-image'\n />}\n postsCount={!isShopboardConnected(SHOPBOARD_SOCIALS.PINTEREST) ? null : userDetails?.shopboard?.socialMedias[SHOPBOARD_SOCIALS.PINTEREST]?.numberOfPosts}\n social={SHOPBOARD_SOCIALS.PINTEREST}\n username={!isShopboardConnected(SHOPBOARD_SOCIALS.PINTEREST) ? \"\" : userDetails?.shopboard?.socialMedias[SHOPBOARD_SOCIALS.PINTEREST]?.username}\n titleStyles={{fontWeight: '500'}}\n />\n {\n isShopboardConnected(SHOPBOARD_SOCIALS.PINTEREST) && <LoaderButton\n buttonText={t('ACCOUNT_PAGE_STORE_PROFILE_SECTION_DISCONNECT_BUTTON_TEXT')}\n isLoading={buttonsLoadingState.pinterestDisconnect}\n className={'account-page-social-section-social-status-disconnect-button'}\n onClick={() => disconnectSocial(SHOPBOARD_SOCIALS.PINTEREST)}\n loaderCircleColor={SETTINGS_PAGES_BUTTON_LOADER_CIRCLE_COLOR}\n />\n }\n </div>\n </AccountSection>\n <AccountSection\n sectionContentClassName='account-page-danger-zone-section-content'\n >\n <div className='account-page-danger-zone-section-container' style={{ flexDirection: isMobile ? 'column-reverse' : 'row' }}>\n <LoaderButton\n buttonText={t('ACCOUNT_PAGE_DANGER_ZONE_SECTION_DELETE_ACCOUNT_BUTTON_TEXT')}\n isLoading={buttonsLoadingState.deleteAccount}\n className={isMobile ? 'mobile-account-page-danger-zone-section-delete-account-button' : 'account-page-danger-zone-section-delete-account-button'}\n onClick={onDeleteAccountButtonClick}\n loaderCircleColor={SETTINGS_PAGES_BUTTON_LOADER_CIRCLE_COLOR}\n />\n <div className=\"account-page-danger-zone-section-instruction\">{t('ACCOUNT_PAGE_DANGER_ZONE_SECTION_DELETE_ACCOUNT_INSTRUCTION')}</div>\n </div>\n </AccountSection>\n </>\n }\n </div>\n <ConfirmDisconnectDialog\n isDialogOpen={isConfirmDisconnectDialogOpen}\n handleDialogClose={closeConfirmDisconnectDialog}\n isDisconnecting={buttonsLoadingState.disconnect}\n onDisconnectClick={disconnect}\n />\n <PaydinDialog\n title={dialogState.title}\n isDialogOpen={dialogState.isOpen}\n handleDialogClose={dialogState.handleDialogClose}\n leftButtonText={dialogState.leftButtonText}\n rightButtonText={dialogState.rightButtonText}\n leftButtonType={PAYDIN_DIALOG_BUTTON_TYPES.PRIMARY}\n rightButtonType={PAYDIN_DIALOG_BUTTON_TYPES.SECONDARY}\n onRightButtonClick={dialogState.rightButtonClickHandler}\n isLeftButtonWithLoader={false}\n dialogLayout={dialogState.dialogLayout}\n />\n <ApprovalMessage\n isMessageShown={approvalMessageState.isMessageShown}\n closeMessage={hideApprovalMassage}\n text={approvalMessageState.text}\n />\n </div >\n )\n}","import React from 'react'\nimport './AddMedia.css'\nimport { useTranslation } from 'react-i18next'\n\nexport default function AddMedia({ \n withBorder = false,\n aspectRatio = '1',\n onAddMedia = () => {} \n}) {\n const { t } = useTranslation()\n \n return (\n <div className='add-media-container' style={{ border: withBorder ? '2px solid #d6d6d6' : null, aspectRatio: aspectRatio }}>\n <div className=\"add-media-button\" onClick={onAddMedia}>\n <div className=\"add-media-button-plus\">+</div>\n <div className=\"add-media-button-text\">{t('EDIT_LINK_PAGE_ADD_MEDIA_BUTTON_TEXT')}</div>\n </div>\n </div>\n )\n}","import React, { useState } from 'react'\nimport './PaydinColorPicker.css'\nimport { ChromePicker } from 'react-color'\nimport FloatingElement from 'components/FloatingElement/FloatingElement'\n\n/**\n * Represents a color picker for the store settings.\n * @param {string} title - The color title\n * @param {string} color - The current color\n * @param {function} setColor - A function for setting the current color\n */\nexport default function PaydinColorPicker({\n title,\n color,\n showDescription = true,\n dimens = null,\n setColor = () => { }\n}) {\n\n const [isColorPickerShown, setIsColorPickerShown] = useState(false)\n\n function onColorChange(color) {\n setColor(color.hex)\n }\n\n return (\n <div className='store-settings-color-picker'>\n <div className=\"store-settings-color-frame-container\">\n <div className=\"store-settings-color-frame\" style={{ backgroundColor: color, height: `${dimens}px` }} onClick={() => setIsColorPickerShown(true)}></div>\n <FloatingElement\n isShown={isColorPickerShown}\n hide={() => setIsColorPickerShown(false)}\n >\n <div className='store-settings-color-picker-dialog-container'>\n <ChromePicker\n color={color}\n onChange={onColorChange}\n disableAlpha={true}\n />\n </div>\n </FloatingElement>\n </div>\n {\n showDescription && <div className=\"store-settings-color-description\">\n <div className=\"store-settings-color-description-title\">{title}</div>\n <div className=\"store-settings-color-description-value\">{color}</div>\n </div>\n }\n </div>\n )\n}","import React from 'react'\nimport './StoreSettingsLinkStyleSection.css'\n\n/**\n * Represents a section inside the link style section for the store settings.\n * @param {string} title - The section's title\n */\nexport default function StoreSettingsLinkStyleSection({ \n title,\n children\n}) {\n return (\n <div className='store-settings-link-style-section-container'>\n <div className=\"store-settings-link-style-section-title\">{title}</div>\n <div className=\"store-settings-link-style-section-content\">{children}</div>\n </div>\n )\n}","import React from 'react'\nimport './AppearanceOptionPicker.css'\nimport { APPEARANCE_OPTION_PICKER_DEFAULT_BORDER_WIDTH_PX } from 'constants/general.constants'\n\n/**\n * Represents an options' picker for the store settings.\n * @param {DOMElement} selectedOption - The selected option's index\n * @param {function} setSelectedOption - A function for setting the selected option's index\n * @param {array} options - An options array to pick from\n */\nexport default function AppearanceOptionPicker({\n selectedOptionBorderColor,\n selectedOption,\n setSelectedOption,\n valueAsBorderRadius = false,\n gap = '10px',\n justifyContent = null,\n borderWidthPx = APPEARANCE_OPTION_PICKER_DEFAULT_BORDER_WIDTH_PX,\n options = []\n}) {\n return (\n <div className='appearance-option-picker-container' style={{ gap, justifyContent }}>\n {\n options.map((option, index) => <div key={option?.key} className={`appearance-option-picker-option-container ${selectedOption === option?.key ? 'selected' : ''}`}>\n <div\n className={`appearance-option-picker-option ${selectedOption === index ? 'selected' : ''}`}\n onClick={() => setSelectedOption(option?.key)}\n style={{\n border: `${borderWidthPx}px solid ${selectedOption === option?.key ? (selectedOptionBorderColor ?? '#cccccc') : '#cccccc'}`,\n borderRadius: valueAsBorderRadius ? option?.value : 0,\n ...(option?.styles)\n }}\n >\n {option?.image}\n </div>\n {option?.text && <div className=\"appearance-option-picker-option-text\" style={{ fontWeight: selectedOption === option?.key ? 600 : 400 }}>{option?.text}</div>}\n </div>\n )\n }\n </div>\n )\n}","import React, { useEffect, useRef, useState } from 'react'\nimport './RunningMessagesStrip.css'\nimport { RUNNING_MESSAGES_STRIP_TEXT_ANIMATION_DURATION, RUNNING_MESSAGES_STRIP_TEXT_ANIMATION_IN_NAME, RUNNING_MESSAGES_STRIP_TEXT_ANIMATION_OUT_NAME, RUNNING_MESSAGES_STRIP_TEXT_NO_ANIMATION_NAME, RUNNING_MESSAGES_STRIP_TEXT_SWAP_DELAY_MILLISECONDS } from 'constants/general.constants'\nimport { isMobile } from 'utils/deviceUtils'\n\n/**\n * Represents a strip of swapping messages.\n * @param {string} backgroundColor - The background color of this strip\n * @param {string} fontColor - The font color of this strip\n * @param {array} messages - The list of messages to display\n */\nexport default function RunningMessagesStrip({\n backgroundColor,\n fontColor,\n messages = [],\n}) {\n const [currentIndex, setCurrentIndex] = useState(0)\n const [displayMessageState, setDisplayMessageState] = useState({\n current: ''\n })\n\n const currentMessageRef = useRef(null)\n const intervalRef = useRef(null)\n\n useEffect(() => {\n if (!messages || messages.length === 0) {\n setDisplayMessageState({ current: '' })\n return\n }\n\n if (messages.length === 1) {\n setDisplayMessageState({ current: messages[0] })\n return\n }\n\n if (intervalRef.current)\n clearInterval(intervalRef.current)\n\n currentMessageRef.current.style.animationName = RUNNING_MESSAGES_STRIP_TEXT_NO_ANIMATION_NAME\n setCurrentIndex(0)\n if (messages.length > 0) {\n intervalRef.current = setInterval(() => {\n setCurrentIndex(prev => (prev + 1) % messages.length)\n }, RUNNING_MESSAGES_STRIP_TEXT_SWAP_DELAY_MILLISECONDS)\n }\n }, [messages])\n\n useEffect(() => {\n if (messages?.length > 1) {\n setDisplayMessageState({\n current: messages[currentIndex]\n })\n }\n }, [currentIndex])\n\n useEffect(() => {\n setTimeout(() => {\n requestAnimationFrame(() => {\n if (currentMessageRef?.current?.style?.animationName)\n currentMessageRef.current.style.animationName = RUNNING_MESSAGES_STRIP_TEXT_ANIMATION_OUT_NAME\n setTimeout(() => {\n if (currentMessageRef?.current) {\n currentMessageRef.current.innerText = displayMessageState.current\n currentMessageRef.current.style.animationName = RUNNING_MESSAGES_STRIP_TEXT_ANIMATION_IN_NAME\n }\n }, RUNNING_MESSAGES_STRIP_TEXT_ANIMATION_DURATION)\n })\n }, 50)\n }, [displayMessageState])\n\n return (\n <div className='running-messages-strip-container' style={{ backgroundColor, color: fontColor }}>\n <div ref={currentMessageRef} className={`${isMobile ? \"mobile-running-messages-strip-current-message\" : \"running-messages-strip-current-message\"} ${isMobile ? \"mobile-running-message\" : \"running-message\"}`}></div>\n </div>\n )\n}","import React, { useEffect, useState } from 'react'\nimport './SaveChangesStrip.css'\nimport { PiWarning } from 'react-icons/pi'\nimport { useTranslation } from 'react-i18next'\nimport LoaderButton from 'components/LoaderButton/LoaderButton'\nimport { isMobile } from 'utils/deviceUtils'\nimport ImageBox from 'components/ImageBox/ImageBox'\nimport PaydinDialog from 'dialogs/PaydinDialog/PaydinDialog'\nimport { useHistoryContext } from 'contexts/History'\nimport { useUserDetailsContext } from 'contexts/User'\nimport { FREE_TRIAL_STRIP_HEIGHT, SHOPEAKS_LOGO_WHITE_URL } from 'constants/general.constants'\n\nexport default function SaveChangesStrip({\n isStripShown = false,\n isSaving = false,\n onDiscardClick = () => { },\n onSaveClick = () => { }\n}) {\n const { t } = useTranslation()\n const history = useHistoryContext()\n const {\n beginEditing,\n endEditing,\n isFreeUser,\n } = useUserDetailsContext()\n\n const [shouldAddLeavePageCallbackToHistory, setShouldAddLeavePageCallbackToHistory] = useState(true)\n const [dialogState, setDialogState] = useState({\n isOpen: false,\n handleDialogClose: closeDialog,\n title: '',\n leftButtonText: '',\n rightButtonText: '',\n rightButtonClickHandler: () => { },\n leftButtonClickHandler: () => { },\n onDialogClosedLeftButton: () => { },\n onDialogClosedRightButton: () => { }\n })\n\n useEffect(() => {\n if (isStripShown) {\n beginEditing()\n } else {\n endEditing()\n }\n\n if (isStripShown && shouldAddLeavePageCallbackToHistory) {\n addLeavePageCallbackToHistory()\n setShouldAddLeavePageCallbackToHistory(false)\n } else if (!isStripShown && !shouldAddLeavePageCallbackToHistory) {\n onStripHidden()\n }\n }, [isStripShown])\n\n function onSave() {\n onSaveClick()\n onStripHidden()\n }\n\n function addLeavePageCallbackToHistory() {\n history.addBackHandler(showLeavePageDialog)\n }\n\n function discardChanges() {\n setShouldAddLeavePageCallbackToHistory(true)\n onDiscardClick()\n }\n\n function closeDialog() {\n setDialogState(prev => ({\n ...prev,\n isOpen: false\n }))\n }\n\n function onStripHidden() {\n setShouldAddLeavePageCallbackToHistory(true)\n history.replaceBackHandler()\n history.goBack()\n }\n\n function showDiscardChangesDialog() {\n setDialogState(prev => ({\n ...prev,\n isOpen: true,\n title: t('SAVE_CHNAGES_STRIP_DISCARD_CHANGES_DIALOG_TITLE'),\n message: t('SAVE_CHNAGES_STRIP_DISCARD_CHANGES_DIALOG_MESSAGE'),\n leftButtonText: t('SAVE_CHNAGES_STRIP_DISCARD_CHANGES_DIALOG_LEFT_BUTTON_TEXT'),\n rightButtonText: t('SAVE_CHNAGES_STRIP_DISCARD_CHANGES_DIALOG_RIGHT_BUTTON_TEXT'),\n rightButtonClickHandler: discardChanges,\n onDialogClosedRightButton: onStripHidden,\n onDialogClosedLeftButton: () => { }\n }))\n }\n\n function showLeavePageDialog() {\n setDialogState(prev => ({\n ...prev,\n isOpen: true,\n title: t('SAVE_CHNAGES_STRIP_LEAVE_PAGE_DIALOG_TITLE'),\n message: t('SAVE_CHNAGES_STRIP_LEAVE_PAGE_DIALOG_MESSAGE'),\n leftButtonText: t('SAVE_CHNAGES_STRIP_LEAVE_PAGE_DIALOG_LEFT_BUTTON_TEXT'),\n rightButtonText: t('SAVE_CHNAGES_STRIP_LEAVE_PAGE_DIALOG_RIGHT_BUTTON_TEXT'),\n rightButtonClickHandler: () => history.goBack(),\n onDialogClosedLeftButton: addLeavePageCallbackToHistory,\n onDialogClosedRightButton: () => { }\n }))\n }\n\n return (\n <>\n {\n !isMobile && <div className={`save-changes-strip ${isStripShown ? 'shown' : ''}`} style={(isStripShown && isFreeUser()) ? {translate: `0 ${FREE_TRIAL_STRIP_HEIGHT}px`} : null}>\n <ImageBox\n className='save-changes-strip-logo-image'\n image={SHOPEAKS_LOGO_WHITE_URL}\n />\n <div className=\"save-changes-strip-content\">\n <div className=\"save-changes-strip-titles-section\">\n <PiWarning className='save-changes-strip-title-image' />\n <div className=\"save-changes-strip-title\">{t('SAVE_CHNAGES_STRIP_TITLE')}</div>\n </div>\n <div className=\"save-changes-strip-buttons-section\">\n <LoaderButton\n className=\"save-changes-strip-discard-button\"\n onClick={showDiscardChangesDialog}\n buttonText={t('SAVE_CHNAGES_STRIP_DISCARD_BUTTON_TEXT')}\n />\n <LoaderButton\n className=\"save-changes-strip-save-button\"\n isLoading={isSaving}\n isDisabled={isSaving}\n onClick={onSave}\n buttonText={t('SAVE_CHNAGES_STRIP_SAVE_BUTTON_TEXT')}\n />\n </div>\n </div>\n </div>\n }\n <PaydinDialog\n title={dialogState.title}\n message={dialogState.message}\n isDialogOpen={dialogState.isOpen}\n handleDialogClose={dialogState.handleDialogClose}\n leftButtonText={dialogState.leftButtonText}\n rightButtonText={dialogState.rightButtonText}\n onRightButtonClick={dialogState.rightButtonClickHandler}\n onLeftButtonClick={dialogState.leftButtonClickHandler}\n onDialogClosedLeftButton={dialogState.onDialogClosedLeftButton}\n onDialogClosedRightButton={dialogState.onDialogClosedRightButton}\n isLeftButtonWithLoader={false}\n isRightButtonWithLoader={false}\n />\n </>\n )\n}","import React from 'react'\n\nexport default function CheckImage(props) {\n return (\n <svg {...props} version=\"1.1\" width=\"512\" height=\"512\" x=\"0\" y=\"0\" viewBox=\"0 0 24 24\" style={{ enableBackground: 'new 0 0 512 512' }} space=\"preserve\">\n <g>\n <g strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path fill=\"#11bb1d\" d=\"M12 2C6.483 2 2 6.483 2 12s4.483 10 10 10 10-4.483 10-10S17.517 2 12 2z\" opacity=\"1\" dataoriginal=\"#66bb6a\">\n </path>\n <path fill=\"#11bb1d\" d=\"M12 2c-.163 0-.325.006-.486.014C16.792 2.282 21 6.655 21 12c0 5.345-4.208 9.718-9.486 9.986.161.008.323.014.486.014 5.517 0 10-4.483 10-10S17.517 2 12 2z\" opacity=\"1\" data-original=\"#4caf50\">\n </path>\n <path fill=\"#e8f5e9\" d=\"m17.146 8.146-6.5 6.5a.2.2 0 0 1-.292 0l-3.5-3.5a.5.5 0 0 0-.708 0 .5.5 0 0 0 0 .708l3.5 3.5c.468.467 1.24.467 1.708 0l6.5-6.5a.5.5 0 0 0 0-.708.5.5 0 0 0-.708 0z\" opacity=\"1\" data-original=\"#e8f5e9\">\n </path>\n </g>\n </g>\n </svg>\n )\n}\n","import React from 'react'\n\nexport default function ErrorImage(props) {\n return (\n <svg {...props} version=\"1.1\" width=\"512\" height=\"512\" x=\"0\" y=\"0\" viewBox=\"0 0 455.111 455.111\" style={{ enableBackground: 'new 0 0 512 512' }}>\n <g>\n <circle cx=\"227.556\" cy=\"227.556\" r=\"227.556\" fill=\"#d1403f\" dataoriginal=\"#e24c4b\" opacity=\"1\">\n </circle>\n <path d=\"M455.111 227.556c0 125.156-102.4 227.556-227.556 227.556-72.533 0-136.533-32.711-177.778-85.333 38.4 31.289 88.178 49.778 142.222 49.778 125.156 0 227.556-102.4 227.556-227.556 0-54.044-18.489-103.822-49.778-142.222 52.623 41.243 85.334 105.243 85.334 177.777z\" fill=\"#d1403f\" data-original=\"#d1403f\" opacity=\"1\">\n </path>\n <path d=\"M331.378 331.378c-8.533 8.533-22.756 8.533-31.289 0l-72.533-72.533-72.533 72.533c-8.533 8.533-22.756 8.533-31.289 0-8.533-8.533-8.533-22.756 0-31.289l72.533-72.533-72.533-72.533c-8.533-8.533-8.533-22.756 0-31.289 8.533-8.533 22.756-8.533 31.289 0l72.533 72.533 72.533-72.533c8.533-8.533 22.756-8.533 31.289 0 8.533 8.533 8.533 22.756 0 31.289l-72.533 72.533 72.533 72.533c8.533 8.533 8.533 22.755 0 31.289z\" fill=\"#ffffff\" data-original=\"#ffffff\">\n </path>\n </g>\n </svg>\n )\n}\n","import React, { useEffect, useRef, useState } from 'react'\nimport './OptionValueMapperEntry.css'\nimport { FaArrowRightLong } from \"react-icons/fa6\"\nimport CheckImage from 'embeddedImages/CheckImage'\nimport ErrorImage from 'embeddedImages/ErrorImage'\nimport PaydinColorPicker from 'components/PaydinColorPicker/PaydinColorPicker'\nimport { isMobile } from 'utils/deviceUtils'\nimport MultiLineText from 'components/MultiLineText/MultiLineText'\n\n/**\n * Represents an entry inside a {@link OptionValueMapper}.\n * @param {string} optionValueName - The entry name\n * @param {string} optionValue - The entry value \n * @param {boolean} isColor - Determins whether the entry is of type color or not\n * @param {function} updateOptionMap - A function for updating the option map\n */\nexport default function OptionValueMapperEntry({\n optionValueName,\n optionValue,\n isColor,\n updateOptionMap = () => { }\n}) {\n const [selectedOptionValue, setSelectedOptionValue] = useState(optionValue)\n \n useEffect(() => {\n setSelectedOptionValue(optionValue)\n }, [optionValue])\n\n const updateTimeoutRef = useRef(null)\n\n function handleValueChange(value, hasUpdateDelay = false) {\n if (hasUpdateDelay) {\n if (updateTimeoutRef?.current) {\n clearTimeout(updateTimeoutRef?.current)\n }\n updateTimeoutRef.current = setTimeout(() => {\n updateOptionMap(value)\n }, 300)\n } else {\n updateOptionMap(value)\n }\n setSelectedOptionValue(value)\n }\n\n return (\n <div className={isMobile ? 'mobile-option-value-mapper-value-container' : 'option-value-mapper-value-container'}>\n <div className={isMobile ? \"mobile-option-value-mapper-value-name-section\" : \"option-value-mapper-value-name-section\"} style={{ width: (isMobile && !isColor) && '45vw' }}>\n <MultiLineText\n text={optionValueName}\n className={isMobile ? 'mobile-option-value-mapper-value-name-section-title' : 'option-value-mapper-value-name-section-title'}\n lines={1}\n oneWord={true}\n />\n <FaArrowRightLong className='option-value-mapper-value-name-section-image' />\n </div>\n <div className={isMobile ? \"mobile-option-value-mapper-value-value-section\" : \"option-value-mapper-value-value-section\"} style={{ width: (isMobile && !isColor) && '55vw' }}>\n {isColor && <PaydinColorPicker\n color={selectedOptionValue}\n setColor={value => handleValueChange(value, false)}\n showDescription={false}\n dimens={isMobile ? 25 : 30}\n />}\n <input type='text' disabled={isColor} className={`${isMobile ? 'mobile-option-value-mapper-value-value-section-input' : 'option-value-mapper-value-value-section-input'} ${!selectedOptionValue ? 'error' : ''}`} style={{ width: (isMobile && !isColor) && '100%' }} value={selectedOptionValue} onChange={e => handleValueChange(e.target.value, true)} />\n {!isMobile && (selectedOptionValue ? <CheckImage className=\"option-value-mapper-value-value-section-status-image\" /> : <ErrorImage className=\"option-value-mapper-value-value-section-status-image\" />)}\n </div>\n </div>\n )\n}","import React, { useEffect, useMemo, useState } from 'react'\nimport './OptionValueMapper.css'\nimport { useTranslation } from 'react-i18next'\nimport OptionValueMapperEntry from 'components/OptionValueMapperEntry/OptionValueMapperEntry'\nimport { OPTION_VALUE_MAPPER_OPTION_TYPES, OPTION_VALUE_MAPPER_PAGE_COUNT, OPTION_VALUE_MAPPER_ROW_GAP, OPTION_VALUE_MAPPER_ROW_HEIGHT } from 'constants/general.constants'\nimport { IoIosCheckmarkCircleOutline } from 'react-icons/io'\nimport { PiWarningCircle } from 'react-icons/pi'\nimport { MdArrowForwardIos } from 'react-icons/md'\nimport { isMobile } from 'utils/deviceUtils'\nimport CollapsingElement from 'components/CollapsingElement/CollapsingElement'\n\n/**\n * Represents an option mapper that enables customizing the option's data.\n * @param {object} option - The displayed option\n * @param {function} updateOptionMap - A function for updating the option map\n * @param {boolean} isDiscardTriggered - A flag indicating that all changes done in this mapper should be discarded\n */\nexport default function OptionValueMapper({\n option = {},\n updateOptionMap = () => { },\n isDiscardTriggered = false\n}) {\n const { t } = useTranslation()\n const optionTypes = [\n {\n type: OPTION_VALUE_MAPPER_OPTION_TYPES.COLOR,\n name: t('OPTION_VALUE_MAPPER_OPTION_TYPE_COLOR')\n },\n {\n type: OPTION_VALUE_MAPPER_OPTION_TYPES.TEXT,\n name: t('OPTION_VALUE_MAPPER_OPTION_TYPE_TEXT')\n },\n ]\n\n const [currentOption, setCurrentOption] = useState(JSON.parse(option))\n const [selectedOptionType, setSelectedOptionType] = useState(JSON.parse(option)?.type)\n const [currentPage, setCurrentPage] = useState(0)\n const [contentExpanded, setContentExpanded] = useState(true)\n\n useEffect(() => {\n const parsedOption = JSON.parse(option)\n setCurrentOption(parsedOption)\n setSelectedOptionType(parsedOption?.type)\n }, [option])\n\n // This opens or closes every time type is changed in case not all are verified\n useEffect(() => {\n if (currentOption && selectedOptionType) {\n setContentExpanded(getNotVerifiedValuesCount(selectedOptionType) > 0)\n }\n }, [selectedOptionType])\n\n // This closes or opens on first render if all is verified\n useEffect(() => {\n if (currentOption && selectedOptionType) {\n setContentExpanded(getNotVerifiedValuesCount(selectedOptionType) > 0)\n }\n }, [])\n\n const totalValuesRawOrdered = useMemo(() => {\n const isSelectedTypeColor = selectedOptionType === OPTION_VALUE_MAPPER_OPTION_TYPES.COLOR\n const isSelectedTypeText = selectedOptionType === OPTION_VALUE_MAPPER_OPTION_TYPES.TEXT\n\n return [\n ...(Object.keys(currentOption.values).filter(valueName => ((isSelectedTypeColor && !currentOption?.values[valueName]?.hex_value) || (isSelectedTypeText && !currentOption?.values[valueName]?.text_value)))),\n ...(Object.keys(currentOption.values).filter(valueName => ((isSelectedTypeColor && currentOption?.values[valueName]?.hex_value) || (isSelectedTypeText && currentOption?.values[valueName]?.text_value))))\n ]\n }, [isDiscardTriggered, selectedOptionType])\n\n const totalValues = useMemo(() => {\n const isSelectedTypeColor = selectedOptionType === OPTION_VALUE_MAPPER_OPTION_TYPES.COLOR\n\n return totalValuesRawOrdered?.map(valueName => renderValueRow(selectedOptionType, valueName, currentOption.values[valueName], isSelectedTypeColor))\n }, [currentOption, totalValuesRawOrdered, selectedOptionType])\n\n const visibleValues = useMemo(() => {\n return totalValues.slice(currentPage * OPTION_VALUE_MAPPER_PAGE_COUNT, currentPage * OPTION_VALUE_MAPPER_PAGE_COUNT + OPTION_VALUE_MAPPER_PAGE_COUNT > totalValues?.length ? totalValues?.length : currentPage * OPTION_VALUE_MAPPER_PAGE_COUNT + OPTION_VALUE_MAPPER_PAGE_COUNT)\n }, [currentPage, totalValues])\n\n function getValue(selectedOptionType, valueObject) {\n switch (selectedOptionType) {\n case OPTION_VALUE_MAPPER_OPTION_TYPES.COLOR: return valueObject?.hex_value ?? ''\n case OPTION_VALUE_MAPPER_OPTION_TYPES.TEXT: return valueObject?.text_value ?? ''\n default: return ''\n }\n }\n\n function renderValueRow(selectedOptionType, valueName, valueObject, isColor) {\n return <OptionValueMapperEntry\n key={valueName}\n optionValueName={valueName}\n optionValue={getValue(selectedOptionType, valueObject)}\n isColor={isColor}\n updateOptionMap={value => updateOptionMap(selectedOptionType, valueName, value)}\n />\n }\n\n function onOptionTypeChange(type) {\n if (selectedOptionType !== type) {\n setSelectedOptionType(type)\n updateOptionMap(type)\n setCurrentPage(0)\n }\n }\n\n // TODO instead of counting all the non verified values every time, count it once and maintain it in a state and update it when updating the options map.\n function getNotVerifiedValuesCount(selectedOptionType) {\n if (!selectedOptionType || Object.keys(currentOption?.values).length === 0) {\n return 0\n }\n\n let counter = 0\n\n for (const valueObject of Object.values(currentOption?.values)) {\n if ((selectedOptionType === OPTION_VALUE_MAPPER_OPTION_TYPES.COLOR && !valueObject?.hex_value) || (selectedOptionType === OPTION_VALUE_MAPPER_OPTION_TYPES.TEXT && !valueObject?.text_value)) {\n counter++\n }\n }\n\n return counter\n }\n\n function getOptionMapperStatus(selectedOptionType) {\n const notVerifiedValuesCount = getNotVerifiedValuesCount(selectedOptionType)\n if (notVerifiedValuesCount === 0) {\n return {\n message: t('OPTION_VALUE_MAPPER_ALL_VERIFIED_STATUS'),\n image: <IoIosCheckmarkCircleOutline className='option-value-mapper-status-image' style={{ color: 'green' }} />,\n allValuesVerified: true\n }\n }\n\n return {\n message: t('OPTION_VALUE_MAPPER_NOT_ALL_VERIFIED_STATUS', { notVerifiedCount: notVerifiedValuesCount, total: (!currentOption || Object.keys(currentOption).length === 0 || Object.keys(currentOption?.values).length === 0) ? 0 : Object.keys(currentOption.values).length }),\n image: <PiWarningCircle className=\"option-value-mapper-status-image\" />,\n allValuesVerified: false\n }\n }\n\n function goToNextPage() {\n setCurrentPage(prev => prev + 1)\n }\n \n function goToPreviousPage() {\n setCurrentPage(prev => prev - 1)\n }\n return (\n <div className='option-value-mapper-container'>\n <div className={isMobile ? \"mobile-option-value-mapper-type-picker-container\" : \"option-value-mapper-type-picker-container\"}>\n <div className=\"option-value-mapper-type-picker\">\n {\n optionTypes.map(optionType => <div\n key={optionType?.name}\n className={`option-value-mapper-option-type ${selectedOptionType === optionType?.type ? 'selected' : ''}`}\n onClick={() => onOptionTypeChange(optionType?.type)}\n >\n {optionType?.name}\n </div>)\n }\n </div>\n <div className=\"option-value-mapper-status\">\n {getOptionMapperStatus(selectedOptionType).image}\n <div className=\"option-value-mapper-status-message\" style={{ color: getOptionMapperStatus(selectedOptionType).allValuesVerified && 'green' }}>{getOptionMapperStatus(selectedOptionType).message}</div>\n </div>\n </div>\n <CollapsingElement\n expanded={contentExpanded}\n >\n <div className=\"option-value-mapper-values\" style={{ height: totalValues.length > OPTION_VALUE_MAPPER_PAGE_COUNT && `${(OPTION_VALUE_MAPPER_ROW_HEIGHT * OPTION_VALUE_MAPPER_PAGE_COUNT) + (OPTION_VALUE_MAPPER_ROW_GAP * (OPTION_VALUE_MAPPER_PAGE_COUNT - 1))}px` }}>\n {visibleValues}\n </div>\n <div className=\"option-value-mapper-pagination-section\">\n <div className=\"option-value-mapper-pagination\">\n <div className=\"option-value-mapper-pagination-state\">{t('OPTION_VALUE_MAPPER_PAGINATION_STATE_TEXT', { fromValueRow: (currentPage * OPTION_VALUE_MAPPER_PAGE_COUNT) + 1, toValueRow: currentPage * OPTION_VALUE_MAPPER_PAGE_COUNT + visibleValues.length, totalRows: totalValues?.length })}</div>\n <div className=\"option-value-mapper-pagination-controls\">\n <MdArrowForwardIos className={`option-value-mapper-pagination-control-image option-value-mapper-pagination-previous-page-image ${currentPage === 0 ? 'disabled' : ''}`} onClick={goToPreviousPage} />\n <MdArrowForwardIos className={`option-value-mapper-pagination-control-image option-value-mapper-pagination-next-page-image ${visibleValues.length % OPTION_VALUE_MAPPER_PAGE_COUNT !== 0 || ((currentPage + 1) * OPTION_VALUE_MAPPER_PAGE_COUNT === totalValues.length) ? 'disabled' : ''}`} onClick={goToNextPage} />\n </div>\n </div>\n </div>\n </CollapsingElement>\n <div className=\"option-value-mapper-content-toggle-button\" onClick={() => setContentExpanded(prev => !prev)}>{contentExpanded ? 'Hide all' : 'See all'}</div>\n </div>\n )\n}\n","import { Box, Switch } from \"@mui/material\";\nimport CollapsingElement from \"../CollapsingElement/CollapsingElement\";\nimport \"./ToggleSection.css\";\n\nexport default function ToggleSection({\n title,\n description,\n text,\n fullRow = false,\n isEnabled = true,\n isDescriptionOpen = false,\n onChange,\n}) {\n return (\n <Box\n className={`toggle-section-wrapper ${\n fullRow ? \"toggle-section-full-row\" : \"\"\n }`}\n >\n <Box className=\"toggle-section-container\">\n {title && <div className=\"toggle-section-title\">{title}</div>}\n {text && <div className=\"toggle-section-text\">{text}</div>}\n <Switch\n checked={isEnabled}\n onChange={onChange}\n sx={{\n width: \"46px\",\n height: \"26px\",\n padding: 0,\n \"& .MuiSwitch-switchBase\": {\n padding: 0,\n margin: 0.3,\n \"&.Mui-checked\": {\n transform: \"translateX(20px)\",\n color: \"#fff\",\n \"& + .MuiSwitch-track\": {\n backgroundColor: \"#65C466\",\n opacity: 1,\n border: 0,\n },\n },\n },\n \"& .MuiSwitch-thumb\": {\n width: 22,\n height: 22,\n },\n \"& .MuiSwitch-track\": {\n borderRadius: \"13px\",\n backgroundColor: \"#E9E9EA\",\n opacity: 1,\n },\n }}\n />\n </Box>\n {description && (\n <CollapsingElement expanded={isEnabled || isDescriptionOpen}>\n <div\n className={`toggle-section-description ${\n isDescriptionOpen\n ? \"toggle-section-description-open\"\n : \"\"\n }`}\n >\n {description}\n </div>\n </CollapsingElement>\n )}\n </Box>\n );\n}\n","var _path;\nconst _excluded = [\"title\", \"titleId\"];\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nfunction _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }\nfunction _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }\nimport * as React from \"react\";\nfunction SvgFilter(_ref, svgRef) {\n let {\n title,\n titleId\n } = _ref,\n props = _objectWithoutProperties(_ref, _excluded);\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n id: \"Layer_1\",\n enableBackground: \"new 0 0 512 512\",\n height: 512,\n viewBox: \"0 0 512 512\",\n width: 512,\n xmlns: \"http://www.w3.org/2000/svg\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"m16 90.259h243.605c7.342 33.419 37.186 58.508 72.778 58.508s65.436-25.088 72.778-58.508h90.839c8.836 0 16-7.164 16-16s-7.164-16-16-16h-90.847c-7.356-33.402-37.241-58.507-72.77-58.507-35.548 0-65.419 25.101-72.772 58.507h-243.611c-8.836 0-16 7.164-16 16s7.164 16 16 16zm273.877-15.958c0-.057.001-.115.001-.172.07-23.367 19.137-42.376 42.505-42.376 23.335 0 42.403 18.983 42.504 42.339l.003.235c-.037 23.407-19.091 42.441-42.507 42.441-23.406 0-42.454-19.015-42.507-42.408zm206.123 347.439h-90.847c-7.357-33.401-37.241-58.507-72.77-58.507-35.548 0-65.419 25.102-72.772 58.507h-243.611c-8.836 0-16 7.163-16 16s7.164 16 16 16h243.605c7.342 33.419 37.186 58.508 72.778 58.508s65.436-25.089 72.778-58.508h90.839c8.836 0 16-7.163 16-16s-7.164-16-16-16zm-163.617 58.508c-23.406 0-42.454-19.015-42.507-42.408l.001-.058c0-.058.001-.115.001-.172.07-23.367 19.137-42.377 42.505-42.377 23.335 0 42.403 18.983 42.504 42.338l.003.235c-.034 23.41-19.089 42.442-42.507 42.442zm163.617-240.248h-243.605c-7.342-33.419-37.186-58.507-72.778-58.507s-65.436 25.088-72.778 58.507h-90.839c-8.836 0-16 7.164-16 16 0 8.837 7.164 16 16 16h90.847c7.357 33.401 37.241 58.507 72.77 58.507 35.548 0 65.419-25.102 72.772-58.507h243.611c8.836 0 16-7.163 16-16 0-8.836-7.164-16-16-16zm-273.877 15.958c0 .058-.001.115-.001.172-.07 23.367-19.137 42.376-42.505 42.376-23.335 0-42.403-18.983-42.504-42.338l-.003-.234c.035-23.41 19.09-42.441 42.507-42.441 23.406 0 42.454 19.014 42.507 42.408z\"\n })));\n}\nconst ForwardRef = /*#__PURE__*/React.forwardRef(SvgFilter);\nexport default __webpack_public_path__ + \"static/media/filter.361e865b.svg\";\nexport { ForwardRef as ReactComponent };","import { useCallback } from \"react\"; \nimport { Box, Checkbox, FormControl, MenuItem, Select } from \"@mui/material\";\nimport { IoIosArrowForward } from \"react-icons/io\";\nimport { isMobile } from 'utils/deviceUtils'\nimport { ReactComponent as FilterIcon } from \"../../assets/filter.svg\";\nimport \"./MultiSelectDropdown.css\";\n\n/**\n * MultiSelectDropdown component provides a customizable dropdown for selecting multiple options.\n * Features include select all/none functionality, individual item selection, and mobile/desktop responsive design.\n * \n * @component\n * @param {Object} props - Component props\n * @param {boolean} props.open - Controls the visibility state of the dropdown menu\n * @param {(isOpen: boolean) => void} props.toggleDropdown - Function to toggle the dropdown's open state\n * @param {Array<OptionType>} props.options - Array of option objects to display in the dropdown\n * @param {(index: number) => void} props.onChange - Callback function triggered when an option's selection state changes\n * @param {string} props.buttonLabel - Text displayed on the dropdown trigger button\n * @param {(clearAll?: boolean) => void} props.handleSelectAll - Function to handle selecting/deselecting all options\n * @param {boolean} props.isAllSelected - Indicates if all available options are currently selected\n * @param {() => void} props.handleClear - Function to clear all selected options\n * @param {() => void} props.onClose - Callback function triggered when the dropdown menu closes\n * @returns {JSX.Element} Rendered dropdown component with selection functionality\n */\nconst MultiSelectDropdown = ({\n open,\n toggleDropdown,\n options,\n onChange,\n buttonLabel,\n handleSelectAll,\n isAllSelected,\n handleClear,\n onClose,\n}) => {\n /**\n * Handles the \"Select All\" or \"Deselect All\" action when clicked.\n * If all items are currently selected, it will clear all selections by calling handleSelectAll(true).\n * If not all items are selected, it will select all items by calling handleSelectAll().\n * \n * @function\n * @returns {void}\n */\n const handleSelectAllClick = useCallback(() => {\n if (isAllSelected) {\n handleSelectAll(true);\n } else {\n handleSelectAll();\n }\n }, [isAllSelected, handleSelectAll]);\n\n return (\n <FormControl fullWidth style={{ width: \"100%\" }}>\n <Box className=\"multi-select-dropdown-button-box\">\n {/* Button */}\n <div\n className={`multi-select-dropdown-button ${isMobile ? 'mobile' : 'desktop'}`}\n onClick={() => toggleDropdown(!open)}\n >\n {!isMobile ? (\n <>\n {buttonLabel}\n <IoIosArrowForward\n className={`multi-select-dropdown-button-icon ${open ? 'open' : ''}`}\n />\n </>\n ) : (\n <FilterIcon\n width={24}\n height={24}\n className={`multi-select-dropdown-button-icon-mobile ${open ? 'open-icon' : 'close-icon'}`}\n />\n )}\n </div>\n\n <Select\n onClose={onClose} \n multiple\n open={open}\n displayEmpty={false}\n value={[]}\n sx={{\n \".MuiSelect-select\": { display: \"none\" },\n width: \"200px\",\n position: \"absolute\",\n border: \"none\",\n \".MuiOutlinedInput-notchedOutline\": {\n border: \"none\",\n display: \"none\",\n height: \"0px\",\n minHeight: \"0px\",\n visibility: \"hidden\",\n },\n }}\n inputProps={{ IconComponent: () => null }}\n MenuProps={{\n disableAutoFocusItem: true,\n PaperProps: {\n sx: {\n maxHeight: isMobile ? \"min(65svh, 320px)\" : \"min(65svh, 370px)\",\n overflowY: \"auto\",\n margin: \"0px 0px 0px 80px\",\n borderRadius: \"4px\",\n \"@media (max-width: 600px)\": {\n width: \"100%\",\n margin: \"5px 0px\",\n },\n },\n },\n \n }}\n >\n <MenuItem\n onMouseDown={(e) => {\n e.preventDefault(); // Prevent closing\n e.stopPropagation(); // Stop event bubbling\n }}\n >\n <div\n onClick={handleSelectAllClick}\n className=\"multi-select-dropdown-button-select-all-option\"\n >\n <div\n className=\"multi-select-dropdown-button-select-all-option-box\" \n >\n <Box>\n <Checkbox\n checked={isAllSelected}\n sx={{\n background: \"white\",\n padding: \"0px\",\n \"&:hover\": {\n background: \"white\",\n },\n \"&.Mui-checked\": {\n background: \"white\",\n },\n }}\n />\n </Box>\n {isAllSelected ? \"Unselect All\" : \"Select All\"}\n </div>\n\n <div\n className=\"multi-select-dropdown-button-select-all-option-clear-button\"\n onClick={(e) => {\n e.stopPropagation(); // Prevent MenuItem click\n e.preventDefault(); // Stop default browser actions\n handleClear(); // Clear selection\n }}\n >\n Clear\n </div>\n </div>\n </MenuItem>\n\n {options.map((option, index) => (\n <MenuItem\n key={index}\n value={option.value}\n onMouseDown={(e) => {\n e.preventDefault(); // Prevent closing\n e.stopPropagation(); // Stop event bubbling\n }}\n onClick={() => onChange(index)} // Ensures selection works\n >\n {option.element}\n </MenuItem>\n ))}\n </Select>\n </Box>\n </FormControl>\n );\n};\n\nexport default MultiSelectDropdown;\n","import { useState, useRef, useCallback } from \"react\";\nimport { MultiSelectDropdown, ImageBox } from \"components\";\nimport { Box, Checkbox } from \"@mui/material\";\nimport { useTranslation } from \"react-i18next\";\nimport \"./InfluencerMultiselectDropdown.css\";\n\n/**\n * InfluencerMultiSelectDropdown component allows users to select multiple influencers from a dropdown list.\n * It displays a button that toggles the visibility of the dropdown, and allows for selecting/deselecting all influencers.\n *\n * @component\n * @param {Object} props - The component props.\n * @param {boolean} [props.isOpen=false] - Determines if the dropdown is open , default set to false.\n * @param {function} props.toggleDropdown - Function to toggle the dropdown visibility.\n * @param {Array} props.influencers - Array of influencer objects to be displayed in the dropdown.\n * @param {Array} props.selected - Array of selected influencers.\n * @param {function} props.onChange - Function to handle changes in selected influencers.\n * @param {function} props.handleSelectAll - Function to handle selecting all influencers.\n * @param {function} props.handleClear - Function to handle clearing all selections.\n * @returns {JSX.Element} The rendered component.\n *\n * @example\n * const influencers = [\n * { username: 'influencer1', image: 'url1' },\n * { username: 'influencer2', image: 'url2' },\n * ];\n *\n * <InfluencerMultiSelectDropdown\n * isOpen={true}\n * toggleDropdown={(isOpen) => console.log(isOpen)}\n * influencers={influencers}\n * />\n */\nconst InfluencerMultiSelectDropdown = ({\n isOpen = false,\n toggleDropdown,\n influencers = [],\n selectedInfluencers = [],\n onChange = () => {},\n handleSelectAll = () => {},\n handleClear = () => {},\n}) => {\n const { t } = useTranslation();\n const [open, setOpen] = useState(isOpen);\n const dropdownRef = useRef(null);\n\n const handleClose = useCallback(() => {\n setOpen(false);\n toggleDropdown(false);\n }, [toggleDropdown]);\n\n const handleChange = useCallback(\n (index) => {\n onChange((prev) => {\n const username = influencers[index]?.username;\n if (!username) return prev;\n return prev.includes(username)\n ? prev.filter((user) => user !== username)\n : [...prev, username];\n });\n },\n [influencers, onChange]\n );\n\n const buildInfluencersMultiselectOptionsList = useCallback(() => {\n return influencers.map((option) => ({\n value: option.username,\n element: (\n <AddInfluencerOptionMultiselect\n image={option?.image}\n username={option?.username}\n isSelected={selectedInfluencers.includes(option.username)}\n />\n ),\n }));\n }, [influencers, selectedInfluencers]);\n\n const buttonLabel = useCallback(() => {\n if (selectedInfluencers.length === influencers.length) {\n return t(\"INFLUENCERS_PAGE_TOPBAR_ADD_INFLUENCER_BUTTON_ALL_TEXT\");\n }\n return selectedInfluencers.length === 0\n ? t(\"INFLUENCERS_PAGE_TOPBAR_ADD_INFLUENCER_BUTTON_NONE_TEXT\")\n : t(\"INFLUENCERS_PAGE_TOPBAR_ADD_INFLUENCER_BUTTON_CUSTOM_TEXT\");\n }, [selectedInfluencers.length, influencers.length, t]);\n\n return (\n <div ref={dropdownRef}>\n <MultiSelectDropdown\n open={open}\n toggleDropdown={setOpen}\n options={buildInfluencersMultiselectOptionsList()}\n selectedValues={selectedInfluencers}\n onChange={handleChange}\n buttonLabel={buttonLabel()}\n handleSelectAll={handleSelectAll}\n isAllSelected={\n selectedInfluencers.length === influencers.length\n }\n handleClear={handleClear}\n onClose={handleClose}\n />\n </div>\n );\n};\n\nexport default InfluencerMultiSelectDropdown;\n\n/**\n * AddInfluencerOptionMultiselect component renders an individual influencer option\n * for selection in the multiselect dropdown.\n *\n * @param {Object} props - The component props.\n * @param {string} props.image - The URL of the influencer's image.\n * @param {string} props.username - The username of the influencer.\n * @param {Array<string>} props.selectedInfluencers - The list of currently selected influencers.\n * @returns {JSX.Element} The rendered component.\n */\nfunction AddInfluencerOptionMultiselect({ image, username, isSelected }) {\n return (\n <div className=\"influencer-multiselect-dropdown-add-influencer-option\">\n <Box className=\"influencer-multiselect-dropdown-checkbox-box\">\n <Checkbox\n checked={isSelected}\n sx={{\n padding: \"0px\",\n }}\n />\n </Box>\n\n <Box className=\"influencer-multiselect-dropdown-add-influencer-option-box\">\n <ImageBox\n image={image}\n roundImage={true}\n containerHeightPx={45}\n containerWidthPx={45}\n />\n <div className=\"influencer-multiselect-dropdown-add-influencer-option-username\">\n {username}\n </div>\n </Box>\n </div>\n );\n}\n","import React, { useCallback, useEffect, useRef, useState } from 'react'\nimport './AppearancePage.css'\nimport { useTranslation } from 'react-i18next'\nimport AccountSection from 'components/AccountSection/AccountSection'\nimport ImageBox from 'components/ImageBox/ImageBox'\nimport { isMobile } from 'utils/deviceUtils'\nimport {\n APPEARNACE_PAGE_PRODUCT_IMAGE_STYLE_BORDER_RADIUS_OPTIONS,\n PAYDIN_IMAGE_CROPPER_ASPECT_RATIOS,\n RESIZE_IMAGE_MAX_HEIGHT,\n RESIZE_IMAGE_MAX_WIDTH,\n SALES_AND_DISCOUNT_STRIP_SENTENCE_1_INPUT_MAX_LENGTH,\n SALES_AND_DISCOUNT_STRIP_SENTENCE_2_INPUT_MAX_LENGTH,\n SETTINGS_PAGES_BUTTON_LOADER_CIRCLE_COLOR,\n APPEARANCE_PAGE_LINK_STYLE_CHECKOUT_BUTTON_SHAPE_OPTIONS,\n APPEARANCE_OPTION_PICKER_PRODUCT_IMAGE_STYLE_BORDER_WIDTH_PX,\n APPEARANCE_OPTION_PICKER_PRODUCT_IMAGE_STYLE_SELECTED_BORDER_WIDTH_PX,\n APPEARANCE_PAGE_LOGO_SECTION_ID,\n APPEARANCE_PAGE_THEME_SECTION_ID,\n OPTION_VALUE_MAPPER_OPTION_TYPES,\n APPEARANCE_PAGE_LINK_STYLE_CART_BUTTON_IMAGE_OPTIONS,\n PREORDER_TEXT_INPUT_MAX_LENGTH,\n APPEARANCE_PAGE_PROMOCODE_SETTINGS_SECTION_ID\n} from 'constants/general.constants'\nimport LoaderButton from 'components/LoaderButton/LoaderButton'\nimport { uploadFile } from 'utils/utils'\nimport { useGeneralDataContext, useUserDetailsContext } from 'contexts/User'\nimport AddMedia from 'components/AddMedia/AddMedia'\nimport PaydinDialog, { PAYDIN_DIALOG_BUTTON_TYPES } from 'dialogs/PaydinDialog/PaydinDialog'\nimport { \n UpdateLinkStyles, \n UpdateStoreAppearanceSettings,\n updateOptionsMap \n} from 'api/store/store'\nimport ImageCropDialog from 'dialogs/ImageCropDialog/ImageCropDialog'\nimport ApprovalMessage from 'components/ApprovalMessage/ApprovalMessage'\nimport PaydinColorPicker from 'components/PaydinColorPicker/PaydinColorPicker'\nimport StoreSettingsLinkStyleSection from 'components/StoreSettingsLinkStyleSection/StoreSettingsLinkStyleSection'\nimport AppearanceOptionPicker from 'components/AppearanceOptionPicker/AppearanceOptionPicker'\nimport { resizeImage } from 'services/imageUtils'\nimport EditFieldSectionInput from 'components/EditFieldSectionInput/EditFieldSectionInput'\nimport RunningMessagesStrip from 'components/RunningMessagesStrip/RunningMessagesStrip'\nimport ContentDialogTopbar from 'components/ContentDialogTopbar/ContentDialogTopbar'\nimport { useHistoryContext } from 'contexts/History'\nimport SaveChangesStrip from 'components/SaveChangesStrip/SaveChangesStrip'\nimport CollapsingElement from 'components/CollapsingElement/CollapsingElement'\nimport { scrollToId } from 'services/SystemService'\nimport OptionValueMapper from 'components/OptionValueMapper/OptionValueMapper'\nimport { HOME_PAGE_URL } from 'constants/routes.constants'\nimport { Box, Divider } from '@mui/material'\nimport debounce from 'lodash/debounce';\nimport { ToggleSection } from 'components'\n\nconst checkThemeChanges = (userDetails, inputState) => {\n return (\n userDetails?.theme?.link?.cartButtonImage !== inputState.linkStyle.cartButtonImage ||\n userDetails?.theme?.link?.checkoutButtonShape !== inputState.linkStyle.checkoutButtonShape ||\n userDetails?.theme?.link?.checkoutButtonBackgroundColor !== inputState.linkStyle.checkoutButtonBackgroundColor ||\n userDetails?.theme?.link?.checkoutButtonBorderColor !== inputState.linkStyle.checkoutButtonBorderColor ||\n userDetails?.theme?.link?.checkoutButtonFontColor !== inputState.linkStyle.checkoutButtonFontColor ||\n // Promocode\n userDetails?.theme?.link?.promocodeButtonShape !== inputState.linkStyle.promocodeButtonShape ||\n userDetails?.theme?.link?.promocodeButtonBackgroundColor !== inputState.linkStyle.promocodeButtonBackgroundColor ||\n userDetails?.theme?.link?.promocodeButtonBorderColor !== inputState.linkStyle.promocodeButtonBorderColor ||\n userDetails?.theme?.link?.promocodeButtonFontColor !== inputState.linkStyle.promocodeButtonFontColor ||\n userDetails?.theme?.link?.isInfluencerShown !== inputState.linkStyle.isInfluencerShown ||\n userDetails?.theme?.link?.isPromocodeShadowShown !== inputState.linkStyle.isPromocodeShadowShown ||\n\n userDetails?.theme?.productImageStyle?.imageBorderRadius !== inputState.productImageStyle.imageBorderRadius ||\n (\n userDetails?.theme?.salesAndDiscountStrip?.isSalesAndDiscountStripShown !== inputState.salesAndDiscountStrip.isSalesAndDiscountStripShown ||\n userDetails?.theme?.salesAndDiscountStrip?.isSalesAndDiscountStripShown === inputState.salesAndDiscountStrip.isSalesAndDiscountStripShown && (\n ![userDetails?.theme?.salesAndDiscountStrip?.salesAndDiscountStripSentence1].includes(inputState.salesAndDiscountStrip.salesAndDiscountStripSentence1) ||\n ![userDetails?.theme?.salesAndDiscountStrip?.salesAndDiscountStripSentence2].includes(inputState.salesAndDiscountStrip.salesAndDiscountStripSentence2)\n )\n ) ||\n userDetails?.theme?.salesAndDiscountStrip?.salesAndDiscountStripBackgroundColor !== inputState.salesAndDiscountStrip.salesAndDiscountStripBackgroundColor ||\n userDetails?.theme?.salesAndDiscountStrip?.salesAndDiscountStripFontColor !== inputState.salesAndDiscountStrip.salesAndDiscountStripFontColor ||\n (\n userDetails?.theme?.inventorySettings?.isPreorderTextShown !== inputState.inventorySettings.isPreorderTextShown ||\n (\n userDetails?.theme?.inventorySettings?.isPreorderTextShown === inputState.inventorySettings.isPreorderTextShown &&\n userDetails?.theme?.inventorySettings?.preorderText !== inputState.inventorySettings.preorderText\n )\n )\n );\n};\n\nexport default function AppearancePage() {\n const { t } = useTranslation()\n const {\n userDetails,\n setUserDetails,\n hasShopifyStore\n } = useUserDetailsContext()\n const {\n fetchProductsOptionsMap,\n updateProductsOptionsMap,\n } = useGeneralDataContext()\n const history = useHistoryContext()\n\n const originalShopWebsite = (userDetails?.domain && userDetails?.domain !== '') ? `${userDetails?.domain}` : ''\n const originalShippingAndReturnUrl = (userDetails?.shippingAndReturnsUrl && userDetails?.shippingAndReturnsUrl !== '') ? userDetails?.shippingAndReturnsUrl.replace(t('HTTPS_HOST_URL_PREFIX'), '') : ''\n\n const [businessDataState, setBusinessDataState] = useState({\n logoUrl: userDetails?.businessLogo,\n internationalRedirectUrl: originalShopWebsite,\n shippingAndReturnsUrl: originalShippingAndReturnUrl\n })\n const [buttonLoadersState, setButtonLoadersState] = useState({\n uploadLogoUrl: false,\n removeLogoUrl: false\n })\n const [dialogState, setDialogState] = useState({\n isOpen: false,\n title: '',\n leftButtonText: '',\n rightButtonText: ''\n })\n const [isImageCropDialogOpen, setIsImageCropDialogOpen] = useState(false)\n const [cropperTempImage, setCropperTempImage] = useState('')\n const [approvalMessageState, setApprovalMessageState] = useState({\n didChangesSaved: false,\n message: ''\n })\n\n const [inputState, setInputState] = useState({\n linkStyle: userDetails?.theme?.link,\n productImageStyle: userDetails?.theme?.productImageStyle,\n salesAndDiscountStrip: userDetails?.theme?.salesAndDiscountStrip,\n inventorySettings: userDetails?.theme?.inventorySettings\n })\n const [saveChangesStripState, setSaveChangesStripState] = useState({\n isSaving: false,\n isShown: false\n })\n const [saveButtonState, setSaveButtonState] = useState({\n isAbleToSave: false,\n isSaving: false\n })\n const [mobileSaveButtonState, setMobileSaveButtonState] = useState({\n isAbleToSave: false,\n isSaving: false\n })\n const [optionMap, setOptionMap] = useState({})\n const [isOptionMapChanged, setIsOptionMapChanged] = useState(false)\n const [isThemeChanged, setIsThemeChanged] = useState(false)\n const [isDiscardTriggered, setIsDiscardTriggered] = useState(false)\n\n const fileInputRef = useRef(null)\n\n const checkoutButtonPreviewStyles = {\n backgroundColor: inputState?.linkStyle.checkoutButtonBackgroundColor,\n color: inputState?.linkStyle?.checkoutButtonFontColor,\n borderColor: inputState?.linkStyle?.checkoutButtonBorderColor,\n borderRadius: APPEARANCE_PAGE_LINK_STYLE_CHECKOUT_BUTTON_SHAPE_OPTIONS.find(option => option?.key === inputState?.linkStyle?.checkoutButtonShape).value\n }\n\n const promocodeButtonPreviewStyles = {\n backgroundColor: inputState?.linkStyle.promocodeButtonBackgroundColor,\n color: inputState?.linkStyle?.promocodeButtonFontColor,\n borderColor: inputState?.linkStyle?.promocodeButtonBorderColor,\n borderRadius: APPEARANCE_PAGE_LINK_STYLE_CHECKOUT_BUTTON_SHAPE_OPTIONS.find(option => option?.key === inputState?.linkStyle?.promocodeButtonShape)?.value,\n boxShadow: inputState?.linkStyle?.isPromocodeShadowShown ? '0px 0px 10px 0px rgba(0, 0, 0, 0.1)' : 'none'\n }\n\n useEffect(() => {\n if (hasShopifyStore()) {\n scrollToId()\n fetchProductsOptionsMap(originalOptionMap => setOptionMap(originalOptionMap), true)\n } else {\n history.replace(HOME_PAGE_URL)\n }\n }, [])\n\n const debouncedStateUpdate = useCallback(\n debounce((isThemeChanged, isOptionMapChanged) => {\n setIsThemeChanged(isThemeChanged);\n setSaveChangesStripState(prev => ({\n ...prev,\n isShown: isThemeChanged || isOptionMapChanged\n }));\n }, 500), // 500ms delay\n [] // Empty dependency array since we don't want to recreate this function\n );\n\n useEffect(() => {\n const isThemeChanged = checkThemeChanges(userDetails, inputState);\n debouncedStateUpdate(isThemeChanged, isOptionMapChanged);\n\n // Cleanup function to cancel any pending debounced calls\n return () => {\n debouncedStateUpdate.cancel();\n };\n }, [inputState, isOptionMapChanged, debouncedStateUpdate, userDetails]);\n\n useEffect(() => {\n setSaveButtonState(prev => ({\n ...prev,\n isAbleToSave: saveChangesStripState.isShown\n }))\n setMobileSaveButtonState(prev => ({\n ...prev,\n isAbleToSave: saveChangesStripState.isShown\n }))\n }, [saveChangesStripState])\n\n function showDialog(title, message, leftButtonText, rightButtonText, rightButtonClickHandler = () => { }) {\n setDialogState({\n isOpen: true,\n title,\n message,\n leftButtonText,\n rightButtonText,\n rightButtonClickHandler\n })\n }\n\n function closeDialog() {\n setDialogState(prev => ({\n ...prev,\n isOpen: false\n }))\n }\n\n function updateStoreData(logoUrl, onSuccess = () => { }, onFailure = () => { }) {\n UpdateStoreAppearanceSettings(userDetails?.businessId, logoUrl)\n .then(onSuccess)\n .catch(onFailure)\n }\n\n function onStripSaveClick() {\n setSaveChangesStripState(prev => ({\n ...prev,\n isSaving: true\n }))\n\n saveAppearance()\n }\n\n function onSaveButtonClick() {\n setSaveButtonState(prev => ({\n ...prev,\n isSaving: true\n }))\n\n saveAppearance()\n }\n\n function onMobileSaveButtonClick() {\n setMobileSaveButtonState(prev => ({\n ...prev,\n isSaving: true\n }))\n\n saveAppearance()\n }\n\n function saveAppearance() {\n if (isOptionMapChanged) {\n updateOptionsMap(optionMap)\n .then(() => {\n setSaveChangesStripState({\n isSaving: false,\n isShown: false\n })\n setMobileSaveButtonState(prev => ({\n ...prev,\n isSaving: false\n }))\n showApprovalMessage(t('APPEARANCE_PAGE_SHOP_LINK_STYLE_SECTION_SAVED_CHANGES_APPROVAL_MESSAGE'))\n updateProductsOptionsMap(optionMap)\n setIsOptionMapChanged(false)\n })\n .catch(error => {\n setSaveChangesStripState({\n isSaving: false,\n isShown: false\n })\n showDialog(\n t('APPEARANCE_PAGE_GENERAL_ERROR_DIALOG_TITLE'),\n t('APPEARANCE_PAGE_GENERAL_ERROR_DIALOG_MESSAGE'),\n t('APPEARANCE_PAGE_GENERAL_ERROR_DIALOG_LEFT_BUTTON_TEXT'),\n null\n )\n })\n .finally(() => {\n if (!isThemeChanged) {\n setSaveChangesStripState(prev => ({\n ...prev,\n isSaving: false\n }))\n setSaveButtonState(prev => ({\n ...prev,\n isSaving: false\n }))\n setMobileSaveButtonState(prev => ({\n ...prev,\n isSaving: false\n }))\n }\n })\n }\n\n if (isThemeChanged) {\n if (inputState.salesAndDiscountStrip?.salesAndDiscountStripSentence1 === '' && inputState.salesAndDiscountStrip?.salesAndDiscountStripSentence2 === '') {\n inputState.salesAndDiscountStrip.isSalesAndDiscountStripShown = false\n inputState.salesAndDiscountStrip.salesAndDiscountStripSentence1 = ''\n inputState.salesAndDiscountStrip.salesAndDiscountStripSentence2 = ''\n }\n\n const themeObject = {\n ...inputState.linkStyle,\n ...inputState.salesAndDiscountStrip,\n ...inputState.productImageStyle,\n ...inputState.inventorySettings,\n }\n UpdateLinkStyles(userDetails?.businessId, themeObject)\n .then(_ => {\n setSaveChangesStripState({\n isSaving: false,\n isShown: false\n })\n showApprovalMessage(t('APPEARANCE_PAGE_SHOP_LINK_STYLE_SECTION_SAVED_CHANGES_APPROVAL_MESSAGE'))\n setUserDetails(prev => ({\n ...prev,\n theme: {\n ...prev.theme,\n isInitial: false,\n link: inputState.linkStyle,\n productImageStyle: inputState.productImageStyle,\n salesAndDiscountStrip: inputState.salesAndDiscountStrip,\n inventorySettings: inputState.inventorySettings,\n }\n }))\n })\n .catch(error => {\n setSaveChangesStripState({\n isSaving: false,\n isShown: false\n })\n showDialog(\n t('APPEARANCE_PAGE_GENERAL_ERROR_DIALOG_TITLE'),\n t('APPEARANCE_PAGE_GENERAL_ERROR_DIALOG_MESSAGE'),\n t('APPEARANCE_PAGE_GENERAL_ERROR_DIALOG_LEFT_BUTTON_TEXT'),\n null\n )\n })\n .finally(() => {\n setSaveChangesStripState(prev => ({\n ...prev,\n isSaving: false\n }))\n setSaveButtonState(prev => ({\n ...prev,\n isSaving: false\n }))\n setMobileSaveButtonState(prev => ({\n ...prev,\n isSaving: false\n }))\n })\n }\n }\n\n async function onImageChange(event) {\n if (event.target.files && event.target.files[0]) {\n const resizedImage = await resizeImage(event.target.files[0], RESIZE_IMAGE_MAX_WIDTH, RESIZE_IMAGE_MAX_HEIGHT)\n setCropperTempImage(URL.createObjectURL(resizedImage))\n setIsImageCropDialogOpen(true)\n }\n }\n\n function uploadLogoFromDevice() {\n fileInputRef.current.value = null\n fileInputRef?.current?.click()\n }\n\n function uploadLogo(importedFile) {\n setButtonLoadersState(prev => ({\n ...prev,\n uploadLogoUrl: true\n }))\n setBusinessDataState(prev => ({\n ...prev,\n logoUrl: importedFile\n }))\n\n uploadFile(importedFile, userDetails.username, url => {\n updateStoreData(url, response => {\n setButtonLoadersState(prev => ({\n ...prev,\n uploadLogoUrl: false\n }))\n setUserDetails(prev => ({\n ...prev,\n businessLogo: url\n }))\n showApprovalMessage(t('APPEARANCE_PAGE_SHOP_LOGO_SECTION_SAVED_CHANGES_APPROVAL_MESSAGE'))\n }, error => {\n console.log(error)\n setButtonLoadersState(prev => ({\n ...prev,\n uploadLogoUrl: false\n }))\n showDialog(\n t('APPEARANCE_PAGE_UPLOAD_LOGO_ERROR_DIALOG_TITLE'),\n '',\n t('APPEARANCE_PAGE_UPLOAD_LOGO_ERROR_DIALOG_RIGHT_BUTTON_TEXT'),\n null\n )\n })\n }, error => {\n console.log(error)\n setButtonLoadersState(prev => ({\n ...prev,\n uploadLogoUrl: false\n }))\n showDialog(\n t('APPEARANCE_PAGE_UPLOAD_LOGO_ERROR_DIALOG_TITLE'),\n '',\n t('APPEARANCE_PAGE_UPLOAD_LOGO_ERROR_DIALOG_RIGHT_BUTTON_TEXT'),\n null\n )\n })\n }\n\n function removeLogo() {\n setButtonLoadersState(prev => ({\n ...prev,\n removeLogoUrl: true\n }))\n setBusinessDataState(prev => {\n const updatedBusinessData = {\n ...prev,\n logoUrl: ''\n }\n fileInputRef.current.value = null\n\n updateStoreData(updatedBusinessData.logoUrl, response => {\n setButtonLoadersState(prev => ({\n ...prev,\n removeLogoUrl: false\n }))\n setUserDetails(prev => ({\n ...prev,\n businessLogo: ''\n }))\n }, error => {\n console.log(error)\n setButtonLoadersState(prev => ({\n ...prev,\n removeLogoUrl: false\n }))\n })\n\n return updatedBusinessData\n })\n }\n\n function showRemoveLogoConfirmationDialog() {\n showDialog(\n t('APPEARANCE_PAGE_REMOVE_LOGO_CONFIRMATION_DIALOG_TITLE'),\n '',\n t('APPEARANCE_PAGE_REMOVE_LOGO_CONFIRMATION_DIALOG_LEFT_BUTTON_TEXT'),\n t('APPEARANCE_PAGE_REMOVE_LOGO_CONFIRMATION_DIALOG_RIGHT_BUTTON_TEXT'),\n removeLogo\n )\n }\n\n function onApplyCrop(croppedImage, crop, zoom, aspectRatio) {\n uploadLogo(croppedImage)\n setIsImageCropDialogOpen(false)\n }\n\n function closeImageCropDialog() {\n setIsImageCropDialogOpen(false)\n }\n\n function setCheckoutBackgroundColor(color) {\n setInputState(prev => ({\n ...prev,\n linkStyle: {\n ...prev.linkStyle,\n checkoutButtonBackgroundColor: color\n }\n }))\n }\n\n function setCheckoutBorderColor(color) {\n setInputState(prev => ({\n ...prev,\n linkStyle: {\n ...prev.linkStyle,\n checkoutButtonBorderColor: color\n }\n }))\n }\n\n function setCartButtonImageKey(key) {\n setInputState(prev => ({\n ...prev,\n linkStyle: {\n ...prev.linkStyle,\n cartButtonImage: key\n }\n }))\n }\n\n function setCheckoutButtonShapeKey(key) {\n setInputState(prev => ({\n ...prev,\n linkStyle: {\n ...prev.linkStyle,\n checkoutButtonShape: key\n }\n }))\n }\n\n // Promocode button appearance settings\n\n const setIsInfluencerShown = useCallback((value) => {\n setInputState(prev => ({\n ...prev,\n linkStyle: {\n ...prev.linkStyle,\n isInfluencerShown: value\n }\n }))\n }, [setInputState])\n \n const setPromocodeButtonShapeKey = useCallback((key) => {\n setInputState(prev => ({\n ...prev,\n linkStyle: {\n ...prev.linkStyle,\n promocodeButtonShape: key\n }\n }))\n }, [setInputState])\n\n const setPromocodeButtonBackgroundColor = useCallback((color) => {\n setInputState(prev => ({\n ...prev,\n linkStyle: {\n ...prev.linkStyle,\n promocodeButtonBackgroundColor: color\n }\n }))\n }, [setInputState])\n\n const setPromocodeButtonBorderColor = useCallback((color) => {\n setInputState(prev => ({\n ...prev,\n linkStyle: {\n ...prev.linkStyle,\n promocodeButtonBorderColor: color\n }\n }))\n }, [setInputState])\n\n const setPromocodeButtonFontColor = useCallback((color) => {\n setInputState(prev => ({\n ...prev,\n linkStyle: {\n ...prev.linkStyle,\n promocodeButtonFontColor: color\n }\n }))\n }, [setInputState])\n\n const setIsPromocodeShadowShown = useCallback((value) => {\n setInputState(prev => ({\n ...prev,\n linkStyle: { ...prev.linkStyle, isPromocodeShadowShown: value }\n }))\n }, [setInputState])\n\n\n function setProductImageStyleKey(key) {\n setInputState(prev => ({\n ...prev,\n productImageStyle: {\n ...prev.productImageStyle,\n imageBorderRadius: key\n }\n }))\n }\n\n function setCheckoutButtonFontColor(color) {\n setInputState(prev => ({\n ...prev,\n linkStyle: {\n ...prev.linkStyle,\n checkoutButtonFontColor: color\n }\n }))\n }\n\n\n function setSalesAndDiscountStripBackgroundColor(color) {\n setInputState(prev => ({\n ...prev,\n salesAndDiscountStrip: {\n ...prev.salesAndDiscountStrip,\n salesAndDiscountStripBackgroundColor: color\n }\n }))\n }\n\n function setSalesAndDiscountStripFontColor(color) {\n setInputState(prev => ({\n ...prev,\n salesAndDiscountStrip: {\n ...prev.salesAndDiscountStrip,\n salesAndDiscountStripFontColor: color\n }\n }))\n }\n\n function setSalesAndDiscountStripSentence1(text) {\n setInputState(prev => ({\n ...prev,\n salesAndDiscountStrip: {\n ...prev.salesAndDiscountStrip,\n salesAndDiscountStripSentence1: text\n }\n }))\n }\n\n function setSalesAndDiscountStripSentence2(text) {\n setInputState(prev => ({\n ...prev,\n salesAndDiscountStrip: {\n ...prev.salesAndDiscountStrip,\n salesAndDiscountStripSentence2: text\n }\n }))\n }\n\n function showApprovalMessage(message) {\n setApprovalMessageState({\n message,\n didChangesSaved: true\n })\n }\n\n function hideApprovalMessage() {\n setApprovalMessageState(prev => ({\n ...prev,\n didChangesSaved: false\n }))\n }\n\n function setIsSalesAndDiscountStripSectionContentShown(value) {\n setInputState(prev => ({\n ...prev,\n salesAndDiscountStrip: {\n ...prev.salesAndDiscountStrip,\n isSalesAndDiscountStripShown: value\n }\n }))\n }\n\n function setIsPreorderSectionContentShown(value) {\n setInputState(prev => ({\n ...prev,\n inventorySettings: {\n ...prev.inventorySettings,\n isPreorderTextShown: value\n }\n }))\n }\n\n function setPreorderText(text) {\n setInputState(prev => ({\n ...prev,\n inventorySettings: {\n ...prev.inventorySettings,\n preorderText: text\n }\n }))\n }\n\n function resetData() {\n fetchProductsOptionsMap(originalOptionMap => setOptionMap(originalOptionMap), true)\n setIsOptionMapChanged(false)\n setIsDiscardTriggered(true)\n setTimeout(() => {\n setIsDiscardTriggered(false)\n }, 100)\n setInputState({\n linkStyle: userDetails?.theme?.link,\n productImageStyle: userDetails?.theme?.productImageStyle,\n salesAndDiscountStrip: userDetails?.theme?.salesAndDiscountStrip,\n inventorySettings: userDetails?.theme?.inventorySettings\n })\n }\n\n function updateOptionMap(optionName, selectedOptionType, modifiedObjectKey, value) {\n if (!optionName) {\n return\n }\n\n if (selectedOptionType) {\n setIsOptionMapChanged(true)\n setOptionMap(prev => {\n const newOptionMap = { ...prev }\n\n newOptionMap[optionName].type = selectedOptionType\n if (modifiedObjectKey && value) {\n if (selectedOptionType === OPTION_VALUE_MAPPER_OPTION_TYPES.TEXT) {\n newOptionMap[optionName].values[modifiedObjectKey].text_value = value\n } else {\n newOptionMap[optionName].values[modifiedObjectKey].hex_value = value\n }\n }\n\n return newOptionMap\n })\n }\n }\n\n return (\n <div className={isMobile ? 'mobile-appearance-page-container' : 'appearance-page-container'}>\n <SaveChangesStrip\n isStripShown={saveChangesStripState.isShown}\n isSaving={saveChangesStripState.isSaving}\n onDiscardClick={resetData}\n onSaveClick={onStripSaveClick}\n />\n {\n isMobile ? <ContentDialogTopbar\n title={t('APPEARANCE_PAGE_TITLE')}\n onBackButtonClick={() => history.goBack()}\n rightElement={<>\n <LoaderButton\n className='page-view-topbar-save-button'\n buttonText={t('LINK_VIEW_TOPBAR_SAVE_BUTTON_TEXT')}\n isLoading={mobileSaveButtonState.isSaving}\n loaderCircleColor='#0095f6'\n isDisabled={!mobileSaveButtonState.isAbleToSave || mobileSaveButtonState.isSaving}\n onClick={onMobileSaveButtonClick}\n />\n </>}\n /> : <div className=\"appearance-page-title dashboard-page-title\">{t('APPEARANCE_PAGE_TITLE')}</div>\n }\n <div className='appearance-page-content'>\n <AccountSection\n title={t('APPEARANCE_PAGE_STORE_DETAILS_SECTION_TITLE')}\n id={APPEARANCE_PAGE_LOGO_SECTION_ID}\n >\n <>\n <div className=\"appearance-page-store-details-section-store-logo-container\">\n <div className=\"settings-pages-subsection-title\">{t('APPEARANCE_PAGE_STORE_DETAILS_SECTION_STORE_LOGO_TITLE')}</div>\n <div className=\"appearance-page-store-details-section-update-logo-container\">\n <div className=\"appearance-page-store-details-section-update-logo-add-logo-restriction-container\">\n <div className={`${isMobile ? 'mobile-appearance-page-store-details-section-update-logo-add-logo-container' : 'appearance-page-store-details-section-update-logo-add-logo-container'} settings-pages-subsection-frame`}>\n {\n businessDataState.logoUrl ? <ImageBox\n image={businessDataState.logoUrl}\n className='appearance-page-store-details-section-update-logo-image-container'\n imageClassName='appearance-page-store-details-section-update-logo-image'\n /> : <AddMedia onAddMedia={uploadLogoFromDevice} aspectRatio='5 / 2' />\n }\n </div>\n <div className=\"appearance-page-store-details-section-update-logo-restriction\">{t('APPEARANCE_PAGE_STORE_DETAILS_SECTION_LOGO_SIZE_INSTRACTION')}</div>\n <div className=\"appearance-page-store-details-section-update-logo-restriction\">{t('APPEARANCE_PAGE_STORE_DETAILS_SECTION_LOGO_RESTRICTION_TEXT')}</div>\n </div>\n <div className=\"appearance-page-store-details-section-update-logo-buttons-container\" style={{ ...(isMobile ? { width: '100%' } : {}) }}>\n <LoaderButton\n className='appearance-page-store-details-section-update-logo-button'\n buttonText={t('APPEARANCE_PAGE_STORE_DETAILS_SECTION_UPLOAD_LOGO_BUTTON_TEXT')}\n isLoading={buttonLoadersState.uploadLogoUrl}\n onClick={uploadLogoFromDevice}\n loaderCircleColor={SETTINGS_PAGES_BUTTON_LOADER_CIRCLE_COLOR}\n />\n <LoaderButton\n className='appearance-page-store-details-section-remove-button'\n buttonText={t('APPEARANCE_PAGE_STORE_DETAILS_SECTION_REMOVE_BUTTON_TEXT')}\n isDisabled={!businessDataState.logoUrl}\n isLoading={buttonLoadersState.removeLogoUrl}\n onClick={showRemoveLogoConfirmationDialog}\n />\n </div>\n </div>\n </div>\n </>\n </AccountSection>\n <AccountSection\n title={t('APPEARANCE_PAGE_SHOP_LINK_STYLE_SECTION_TITLE')}\n id={APPEARANCE_PAGE_THEME_SECTION_ID}\n sectionContentClassName='appearance-page-link-style-section'\n >\n <>\n <div className='appearance-checkout-button-style-container'>\n <div className=\"appearance-checkout-button-style-fields\">\n <StoreSettingsLinkStyleSection\n title={t('APPEARANCE_PAGE_SHOP_LINK_STYLE_SECTION_CHECKOUT_BUTTON_SHAPE_SUBSECTION_TITLE')}\n >\n <AppearanceOptionPicker\n selectedOption={inputState.linkStyle.checkoutButtonShape}\n setSelectedOption={setCheckoutButtonShapeKey}\n options={APPEARANCE_PAGE_LINK_STYLE_CHECKOUT_BUTTON_SHAPE_OPTIONS}\n selectedOptionBorderColor='#2c6ecb'\n />\n </StoreSettingsLinkStyleSection>\n <StoreSettingsLinkStyleSection\n title={t('APPEARANCE_PAGE_SHOP_LINK_STYLE_SECTION_CHECKOUT_BUTTON_BACKGROUND_COLOR_SECTION_TITLE')}\n >\n <PaydinColorPicker\n title={t('APPEARANCE_PAGE_SHOP_LINK_STYLE_SECTION_CHECKOUT_BUTTON_BACKGROUND_COLOR_SUBSECTION_SUBTITLE')}\n color={inputState.linkStyle.checkoutButtonBackgroundColor}\n setColor={setCheckoutBackgroundColor}\n />\n </StoreSettingsLinkStyleSection>\n <StoreSettingsLinkStyleSection\n title={t('APPEARANCE_PAGE_SHOP_LINK_STYLE_SECTION_CHECKOUT_BUTTON_BORDER_COLOR_SECTION_TITLE')}\n >\n <PaydinColorPicker\n title={t('APPEARANCE_PAGE_SHOP_LINK_STYLE_SECTION_CHECKOUT_BUTTON_BORDER_COLOR_SUBSECTION_SUBTITLE')}\n color={inputState.linkStyle.checkoutButtonBorderColor}\n setColor={setCheckoutBorderColor}\n />\n </StoreSettingsLinkStyleSection>\n <StoreSettingsLinkStyleSection\n title={t('APPEARANCE_PAGE_SHOP_LINK_STYLE_SECTION_CHECKOUT_BUTTON_FONT_COLOR_SUBSECTION_TITLE')}\n >\n <PaydinColorPicker\n title={t('APPEARANCE_PAGE_SHOP_LINK_STYLE_SECTION_CHECKOUT_BUTTON_FONT_COLOR_SUBSECTION_SUBTITLE')}\n color={inputState.linkStyle.checkoutButtonFontColor}\n setColor={setCheckoutButtonFontColor}\n />\n </StoreSettingsLinkStyleSection>\n </div>\n {!isMobile && <div className=\"appearance-preview\">\n <div className=\"appearance-preview-frame\">\n <div className=\"appearance-checkout-button-preview-element appearance-preview-element\" style={checkoutButtonPreviewStyles}>\n <div className=\"appearance-checkout-button-preview-element-text\">Checkout</div>\n <div className=\"appearance-checkout-button-preview-element-dot\" style={{ backgroundColor: checkoutButtonPreviewStyles.color }}></div>\n <div className=\"appearance-checkout-button-preview-element-price\">$456</div>\n </div>\n </div>\n </div>}\n </div>\n </>\n <Divider/>\n <>\n {/* Influencer toggle section */}\n <Box className=\"influencer-toggle-container-wrapper\">\n <ToggleSection\n title={t(\"APPEARANCE_PAGE_SETTINGS_SECTION_INFLUENCER_APPEARENCE_TOGGLE_TITLE\")}\n description={t(\"APPEARANCE_PAGE_SETTINGS_SECTION_INFLUENCER_APPEARENCE_TOGGLE_DESCRIPTION\")}\n isEnabled={inputState.linkStyle.isInfluencerShown}\n onChange={(e) => setIsInfluencerShown(e.target.checked)}\n />\n </Box>\n <Divider />\n {/* Promocode appearance settings section */}\n <Box id={APPEARANCE_PAGE_PROMOCODE_SETTINGS_SECTION_ID}>\n <div className=\"account-page-section-title appearance-page-account-page-section-margin-bottom-30\">\n {t(\"APPEARANCE_PAGE_SHOP_PROMOCODE_SETTINGS_SECTION_TITLE\")}\n </div>\n <div className=\"appearance-checkout-button-style-container\">\n <div className=\"appearance-checkout-button-style-fields\">\n <StoreSettingsLinkStyleSection\n title={t(\n \"APPEARANCE_PAGE_SHOP_PROMOCODE_SETTINGS_SECTION_PROMOCODE_SHAPE_SUBSECTION_TITLE\"\n )}\n >\n <AppearanceOptionPicker\n selectedOption={\n inputState.linkStyle.promocodeButtonShape\n }\n setSelectedOption={setPromocodeButtonShapeKey}\n options={\n APPEARANCE_PAGE_LINK_STYLE_CHECKOUT_BUTTON_SHAPE_OPTIONS\n }\n selectedOptionBorderColor=\"#2c6ecb\"\n />\n </StoreSettingsLinkStyleSection>\n <StoreSettingsLinkStyleSection\n title={t(\n \"APPEARANCE_PAGE_SHOP_PROMOCODE_SETTINGS_SECTION_PROMOCODE_BACKGROUND_COLOR_SECTION_TITLE\"\n )}\n >\n <PaydinColorPicker\n title={t(\n \"APPEARANCE_PAGE_SHOP_PROMOCODE_SETTINGS_SECTION_PROMOCODE_BACKGROUND_COLOR_SUBSECTION_SUBTITLE\"\n )}\n color={\n inputState.linkStyle.promocodeButtonBackgroundColor\n }\n setColor={setPromocodeButtonBackgroundColor}\n />\n </StoreSettingsLinkStyleSection>\n <StoreSettingsLinkStyleSection\n title={t(\n \"APPEARANCE_PAGE_SHOP_PROMOCODE_SETTINGS_SECTION_PROMOCODE_BORDER_COLOR_SECTION_TITLE\"\n )}\n >\n <PaydinColorPicker\n title={t(\n \"APPEARANCE_PAGE_SHOP_PROMOCODE_SETTINGS_SECTION_PROMOCODE_BORDER_COLOR_SUBSECTION_SUBTITLE\"\n )}\n color={inputState.linkStyle.promocodeButtonBorderColor}\n setColor={setPromocodeButtonBorderColor}\n />\n </StoreSettingsLinkStyleSection>\n <StoreSettingsLinkStyleSection\n title={t(\n \"APPEARANCE_PAGE_SHOP_PROMOCODE_SETTINGS_SECTION_PROMOCODE_FONT_COLOR_SECTION_TITLE\"\n )}\n >\n <PaydinColorPicker\n title={t(\n \"APPEARANCE_PAGE_SHOP_PROMOCODE_SETTINGS_SECTION_PROMOCODE_FONT_COLOR_SUBSECTION_SUBTITLE\"\n )}\n color={inputState.linkStyle.promocodeButtonFontColor}\n setColor={setPromocodeButtonFontColor}\n />\n </StoreSettingsLinkStyleSection>\n </div>\n {!isMobile && (\n <div className=\"appearance-preview\">\n <div className=\"appearance-preview-promocode-frame\">\n <div\n className=\"appearance-promocode-button-preview-element appearance-preview-element\"\n style={promocodeButtonPreviewStyles}\n >\n <div className=\"appearance-promocode-button-preview-element-text\">\n {t(\"CART_PROMOCODE_TITLE\")}\n </div>\n <div className=\"appearance-promocode-button-preview-element-price\">\n (OFF15)\n </div>\n <div className=\"appearance-promocode-button-preview-element-applied-at-checkout\">\n {t(\"CART_PROMOCODE_APPLIED_AT_CHECKOUT\")}\n </div>\n </div>\n </div>\n </div>\n )}\n </div>\n <Box className=\"appearance-toggle-section-wrapper appearance-page-account-page-section-margin-top-30\" >\n <ToggleSection\n text={t(\"APPEARANCE_PAGE_SHOP_PROMOCODE_SETTINGS_SECTION_PROMOCODE_BACKGROUND_SHADOW_TITLE\")}\n description={t(\"APPEARANCE_PAGE_SHOP_PROMOCODE_SETTINGS_SECTION_PROMOCODE_BACKGROUND_SHADOW_DESCRIPTION\")}\n onChange={(e) => setIsPromocodeShadowShown(e.target.checked)}\n isEnabled={inputState.linkStyle.isPromocodeShadowShown}\n isDescriptionOpen={true}\n fullRow={true}\n />\n </Box>\n </Box>\n </>\n </AccountSection>\n\n <AccountSection\n title={t('APPEARANCE_PAGE_CART_STYLE_SECTION_TITLE')}\n sectionContentClassName='appearance-page-link-style-section'\n >\n <StoreSettingsLinkStyleSection\n title={t('APPEARANCE_PAGE_SHOP_LINK_STYLE_SECTION_CART_BUTTON_IMAGE_SUBSECTION_TITLE')}\n >\n <AppearanceOptionPicker\n selectedOption={inputState.linkStyle.cartButtonImage}\n setSelectedOption={setCartButtonImageKey}\n options={APPEARANCE_PAGE_LINK_STYLE_CART_BUTTON_IMAGE_OPTIONS}\n selectedOptionBorderColor='#2c6ecb'\n />\n </StoreSettingsLinkStyleSection>\n </AccountSection>\n <AccountSection\n title={t('APPEARANCE_PAGE_PRODUCT_IMAGE_STYLE_SECTION_TITLE')}\n sectionContentClassName='appearance-page-link-style-section'\n >\n <>\n <div className='appearance-product-image-style-container'>\n <AppearanceOptionPicker\n selectedOption={inputState.productImageStyle.imageBorderRadius}\n setSelectedOption={setProductImageStyleKey}\n options={APPEARNACE_PAGE_PRODUCT_IMAGE_STYLE_BORDER_RADIUS_OPTIONS}\n selectedOptionBorderColor='green'\n gap={isMobile ? '10px' : '25px'}\n justifyContent={isMobile && 'space-around'}\n valueAsBorderRadius={true}\n borderWidthPx={APPEARANCE_OPTION_PICKER_PRODUCT_IMAGE_STYLE_BORDER_WIDTH_PX}\n selectedBorderWidthPx={APPEARANCE_OPTION_PICKER_PRODUCT_IMAGE_STYLE_SELECTED_BORDER_WIDTH_PX}\n />\n </div>\n </>\n </AccountSection>\n <AccountSection\n title={t('APPEARANCE_PAGE_SHOP_SALES_AND_DISCOUNT_STYLE_SECTION_TITLE')}\n sectionContentClassName='appearance-page-sales-and-discount-strip-style-section'\n hasToggleSwitch={true}\n isContentShown={inputState.salesAndDiscountStrip.isSalesAndDiscountStripShown}\n setIsContentShown={setIsSalesAndDiscountStripSectionContentShown}\n shouldControlContent={false}\n >\n <div className=\"appearance-sales-and-discount-strip-style-container\">\n <div className=\"appearance-subsection-description-container\">\n <div className=\"appearance-subsection-description\">{t('APPEARANCE_PAGE_SHOP_SALES_AND_DISCOUNT_STYLE_SECTION_STRIP_PREVIEW_DESCRIPTION')}</div>\n </div>\n <CollapsingElement\n expanded={inputState.salesAndDiscountStrip.isSalesAndDiscountStripShown}\n >\n <StoreSettingsLinkStyleSection\n title={t('APPEARANCE_PAGE_SHOP_SALES_AND_DISCOUNT_STYLE_SECTION_STRIP_PREVIEW_SUBSECTION_TITLE')}\n >\n <div className=\"appearance-sales-and-discount-strip-preview\">\n <div className=\"appearance-sales-and-discount-strip-preview-frame\">\n <RunningMessagesStrip\n messages={\n inputState.salesAndDiscountStrip.salesAndDiscountStripSentence1 || inputState.salesAndDiscountStrip.salesAndDiscountStripSentence2 ? [\n ...(inputState.salesAndDiscountStrip.salesAndDiscountStripSentence1 ? [inputState.salesAndDiscountStrip.salesAndDiscountStripSentence1] : []),\n ...(inputState.salesAndDiscountStrip.salesAndDiscountStripSentence2 ? [inputState.salesAndDiscountStrip.salesAndDiscountStripSentence2] : [])\n ] : [\n t('APPEARANCE_PAGE_SHOP_SALES_AND_DISCOUNT_STYLE_SECTION_STRIP_EXAMPLE_SENTENCE_1'),\n t('APPEARANCE_PAGE_SHOP_SALES_AND_DISCOUNT_STYLE_SECTION_STRIP_EXAMPLE_SENTENCE_2')\n ]}\n backgroundColor={inputState.salesAndDiscountStrip.salesAndDiscountStripBackgroundColor}\n fontColor={inputState.salesAndDiscountStrip.salesAndDiscountStripFontColor}\n />\n </div>\n </div>\n </StoreSettingsLinkStyleSection>\n <div className=\"appearance-sales-and-discount-strip-style-fields\">\n <div className={isMobile ? \"mobile-appearance-sales-and-discount-strip-style-colors-container\" : \"appearance-sales-and-discount-strip-style-colors-container\"}>\n <StoreSettingsLinkStyleSection\n title={t('APPEARANCE_PAGE_SHOP_SALES_AND_DISCOUNT_STYLE_SECTION_STRIP_BACKGROUND_COLOR_SUBSECTION_TITLE')}\n >\n <PaydinColorPicker\n title={t('APPEARANCE_PAGE_SHOP_SALES_AND_DISCOUNT_STYLE_SECTION_STRIP_BACKGROUND_COLOR_SUBSECTION_SUBTITLE')}\n color={inputState.salesAndDiscountStrip.salesAndDiscountStripBackgroundColor}\n setColor={setSalesAndDiscountStripBackgroundColor}\n />\n </StoreSettingsLinkStyleSection>\n <StoreSettingsLinkStyleSection\n title={t('APPEARANCE_PAGE_SHOP_SALES_AND_DISCOUNT_STYLE_SECTION_STRIP_FONT_COLOR_SUBSECTION_TITLE')}\n >\n <PaydinColorPicker\n title={t('APPEARANCE_PAGE_SHOP_SALES_AND_DISCOUNT_STYLE_SECTION_STRIP_FONT_COLOR_SUBSECTION_SUBTITLE')}\n color={inputState.salesAndDiscountStrip.salesAndDiscountStripFontColor}\n setColor={setSalesAndDiscountStripFontColor}\n />\n </StoreSettingsLinkStyleSection>\n </div>\n <StoreSettingsLinkStyleSection\n title={t('APPEARANCE_PAGE_SHOP_SALES_AND_DISCOUNT_STYLE_SECTION_STRIP_SENTENCES_SUBSECTION_TITLE')}\n >\n <div className=\"appearance-sales-and-discount-strip-style-sentences-container\">\n <EditFieldSectionInput\n placeholder={t('APPEARANCE_PAGE_SHOP_SALES_AND_DISCOUNT_STYLE_SECTION_STRIP_SENTENCE_1_PLACEHOLDER')}\n maxLength={SALES_AND_DISCOUNT_STRIP_SENTENCE_1_INPUT_MAX_LENGTH}\n value={inputState.salesAndDiscountStrip.salesAndDiscountStripSentence1}\n setValue={setSalesAndDiscountStripSentence1}\n id=\"appearance-sales-and-discount-strip-style-sentences-container-1\"\n />\n <EditFieldSectionInput\n placeholder={t('APPEARANCE_PAGE_SHOP_SALES_AND_DISCOUNT_STYLE_SECTION_STRIP_SENTENCE_2_PLACEHOLDER')}\n maxLength={SALES_AND_DISCOUNT_STRIP_SENTENCE_2_INPUT_MAX_LENGTH}\n value={inputState.salesAndDiscountStrip.salesAndDiscountStripSentence2}\n setValue={setSalesAndDiscountStripSentence2}\n id=\"appearance-sales-and-discount-strip-style-sentences-container-2\"\n />\n </div>\n </StoreSettingsLinkStyleSection>\n </div>\n </CollapsingElement>\n </div>\n </AccountSection>\n <AccountSection\n title={t('APPEARANCE_PAGE_PRODUCT_PREORDER_SETTINGS_SECTION_TITLE')}\n sectionContentClassName='appearance-page-preorder-style-section'\n hasToggleSwitch={true}\n isContentShown={inputState.inventorySettings.isPreorderTextShown}\n setIsContentShown={setIsPreorderSectionContentShown}\n shouldControlContent={false}\n >\n <div className='appearance-page-preorder-style-container'>\n <div className=\"appearance-subsection-description-container\">\n <div className=\"appearance-subsection-description\">{t('APPEARANCE_PAGE_PRODUCT_PREORDER_SETTINGS_SECTION_PREVIEW_DESCRIPTION')}</div>\n </div>\n <CollapsingElement\n expanded={inputState.inventorySettings.isPreorderTextShown}\n >\n <div className=\"appearance-page-preorder-style-text-container\">\n <EditFieldSectionInput\n placeholder={t('APPEARANCE_PAGE_PRODUCT_PREORDER_SETTINGS_SECTION_INPUT_PLACEHOLDER')}\n maxLength={PREORDER_TEXT_INPUT_MAX_LENGTH}\n value={inputState.inventorySettings.preorderText}\n setValue={setPreorderText}\n id=\"appearance-page-preorder-style-text\"\n />\n </div>\n </CollapsingElement>\n </div>\n </AccountSection>\n {\n Object.keys(optionMap).map(optionName => <AccountSection\n key={optionName}\n title={t('OPTION_VALUE_MAPPER_TITLE', { optionName })}\n >\n <OptionValueMapper\n option={JSON.stringify(optionMap[optionName])}\n updateOptionMap={(selectedOptionType, valueName = null, value = null) => updateOptionMap(optionName, selectedOptionType, valueName, value)}\n isDiscardTriggered={isDiscardTriggered}\n />\n </AccountSection>)\n }\n {\n !isMobile && <LoaderButton\n className={'save-changes-button'}\n isLoading={saveButtonState.isSaving}\n isDisabled={!saveButtonState.isAbleToSave || saveButtonState.isSaving}\n buttonText={t('SETTINGS_PAGE_SAVE_CHANGES_BUTTON_TEXT')}\n onClick={onSaveButtonClick}\n />\n }\n </div>\n <input ref={fileInputRef} type=\"file\" accept=\"image/jpeg,image/png,image/webp\" onChange={onImageChange} style={{ display: 'none' }} />\n <ImageCropDialog\n isDialogOpen={isImageCropDialogOpen}\n handleDialogClose={closeImageCropDialog}\n image={cropperTempImage}\n aspectRatiosArray={PAYDIN_IMAGE_CROPPER_ASPECT_RATIOS}\n isLogoCropper={true}\n onCropDone={onApplyCrop}\n />\n <PaydinDialog\n title={dialogState.title}\n message={dialogState.message}\n isDialogOpen={dialogState.isOpen}\n handleDialogClose={closeDialog}\n leftButtonText={dialogState.leftButtonText}\n rightButtonText={dialogState.rightButtonText}\n leftButtonType={PAYDIN_DIALOG_BUTTON_TYPES.PRIMARY}\n rightButtonType={PAYDIN_DIALOG_BUTTON_TYPES.SECONDARY}\n onRightButtonClick={dialogState.rightButtonClickHandler}\n isLeftButtonWithLoader={false}\n />\n <ApprovalMessage\n isMessageShown={approvalMessageState.didChangesSaved}\n closeMessage={hideApprovalMessage}\n text={approvalMessageState.message}\n />\n </div>\n )\n}","import React, { useState } from 'react'\nimport './LayoutTopbarRightSection.css'\nimport { useAuthContext, useUserDetailsContext } from 'contexts/User'\nimport { useHistoryContext } from 'contexts/History'\nimport PaydinMenu from 'components/PaydinMenu/PaydinMenu'\nimport {\n ADMIN_PAGES,\n DASHBOARD_TOPBAR_USER_MENU_BORDER_RADIUS_PX,\n DASHBOARD_TOPBAR_USER_MENU_WIDTH_PX,\n LINKS_PAGE_MOBILE_OPTIONS_DRAWER_TOP_BORDER_RADIUS_PX,\n MOBILE_DASHBOARD_TOPBAR_OPTIONS_DRAWER_CLOSING_DELAY,\n PAYDIN_DRAWER_DIRECTION,\n PAYDIN_DRAWER_TRANSITION_DURATION_WITH_BUFFER,\n PAYDIN_MENU_OPENING_DIRECTIONS,\n SHOPIFY_LOGO_URL\n} from 'constants/general.constants'\nimport { CiLogout, CiLogin } from 'react-icons/ci'\nimport { BiLink } from 'react-icons/bi'\nimport { MdOutlinePrivacyTip } from 'react-icons/md'\nimport { GrDocumentText } from 'react-icons/gr'\nimport { SlQuestion } from 'react-icons/sl'\nimport { AiOutlineClose, AiOutlineUserAdd } from 'react-icons/ai'\nimport { FiUser, FiMenu } from 'react-icons/fi'\nimport { RiPaletteLine } from 'react-icons/ri'\nimport { BsCurrencyDollar } from 'react-icons/bs'\nimport { isMobile } from 'utils/deviceUtils'\nimport { useTranslation } from 'react-i18next'\nimport {\n ACCOUNT_PAGE_URL,\n ADMIN_PAGES_URL_PREFIX,\n HOME_PAGE_URL,\n LINKS_PAGE_URL,\n LOGIN_PAGE_URL,\n PRICING_PLANS_PAGE_URL,\n PRIVACY_POLICY_PAGE_URL,\n SHOPIFY_HELP_PAGE_URL,\n SIGN_UP_REQUEST_PAGE_URL,\n TERMS_PAGE_URL,\n APPEARANCE_PAGE_URL\n} from 'constants/routes.constants'\nimport PaydinDialog, { PAYDIN_DIALOG_BUTTON_TYPES } from 'dialogs/PaydinDialog/PaydinDialog'\nimport ImageBox from 'components/ImageBox/ImageBox'\nimport PaydinDrawer from 'components/PaydinDrawer/PaydinDrawer'\n\n/**\n * Represents the right section of the welcome/dashboard topbar.\n * It can be either an element with 2 buttons: \"Log in\" & \"Sign up for free\" (if the user is not authenticated)\n * or user button that opens a menu and an \"Admin\" button next to it.\n */\nexport default function LayoutTopbarRightSection() {\n const { t } = useTranslation()\n const {\n userDetails,\n hasShopifyStore\n } = useUserDetailsContext()\n const history = useHistoryContext()\n const { logout } = useAuthContext()\n\n const [isLogoutConfirmationDialogOpen, setIsLogoutConfirmationDialogOpen] = useState(false)\n const [userMenuState, setUserMenuState] = useState({\n isOpen: false,\n anchorElement: null,\n onClose: () => { }\n })\n const [optionsDrawerState, setOptionsDrawerState] = useState({\n isOpen: false,\n onOpen: () => { },\n onClose: closeMoreOptionsDrawer,\n children: <></>\n })\n\n function closeMoreOptionsDrawer() {\n setOptionsDrawerState(prev => ({\n ...prev,\n isOpen: false\n }))\n }\n\n function goToHome() {\n closeDrawerAndGoToRoute(HOME_PAGE_URL)\n }\n\n function goToLinks() {\n closeDrawerAndGoToRoute(LINKS_PAGE_URL)\n }\n\n function goToSignUp() {\n closeDrawerAndGoToRoute(SIGN_UP_REQUEST_PAGE_URL)\n }\n\n function goToAppearance() {\n closeDrawerAndGoToRoute(APPEARANCE_PAGE_URL)\n }\n\n function goToPricingPlans() {\n closeDrawerAndGoToRoute(PRICING_PLANS_PAGE_URL)\n }\n\n function goToMyAccount() {\n closeDrawerAndGoToRoute(ACCOUNT_PAGE_URL)\n }\n\n function closeDrawerAndGoToRoute(url) {\n if (isMobile) {\n history.goBack()\n if (window.location.pathname !== url) {\n setTimeout(() => { // wait for the drawer to close\n history.push(url)\n }, PAYDIN_DRAWER_TRANSITION_DURATION_WITH_BUFFER)\n }\n } else {\n if (window.location.pathname !== url) {\n history.push(url)\n }\n }\n }\n\n function openMoreOptionsDrawer() {\n setOptionsDrawerState(prev => ({\n ...prev,\n isOpen: true,\n children:\n ADMIN_PAGES.includes(window.location.pathname) ? <>\n <div className=\"mobile-dashboard-topbar-more-options-drawer-option-my-account mobile-dashboard-topbar-more-options-drawer-option\" onClick={goToMyAccount}>\n <div className=\"mobile-dashboard-topbar-more-options-drawer-image-container\">\n <FiUser className=\"mobile-dashboard-topbar-more-options-drawer-image\" />\n </div>\n <div className=\"mobile-dashboard-topbar-more-options-drawer-text-container\">\n <div className=\"mobile-dashboard-topbar-more-options-drawer-text\">{t('MOBILE_DASHBOARD_TOPBAR_MORE_OPTIONS_DRAWER_OPTION_MY_ACCOUNT')}</div>\n </div>\n </div>\n <div className={`mobile-dashboard-topbar-more-options-drawer-option-appearance mobile-dashboard-topbar-more-options-drawer-option ${!hasShopifyStore() ? 'disabled' : ''}`} onClick={goToAppearance}>\n <div className=\"mobile-dashboard-topbar-more-options-drawer-image-container\">\n <RiPaletteLine className=\"mobile-dashboard-topbar-more-options-drawer-image\" />\n </div>\n <div className=\"mobile-dashboard-topbar-more-options-drawer-text-container\">\n <div className=\"mobile-dashboard-topbar-more-options-drawer-text\">{t('MOBILE_DASHBOARD_TOPBAR_MORE_OPTIONS_DRAWER_OPTION_APPEARANCE')}</div>\n </div>\n </div>\n {/* TODO leave this comment untill the public app is approved */}\n {/* <div className=\"mobile-dashboard-topbar-more-options-drawer-option-billing mobile-dashboard-topbar-more-options-drawer-option disabled\">{t('MOBILE_DASHBOARD_TOPBAR_MORE_OPTIONS_DRAWER_OPTION_BILLING')}</div> */}\n {/* TODO leave this comment until re-adding the archive page */}\n {/* <div className=\"mobile-dashboard-topbar-more-options-drawer-option-archive mobile-dashboard-topbar-more-options-drawer-option\">{t('MOBILE_DASHBOARD_TOPBAR_MORE_OPTIONS_DRAWER_OPTION_ARCHIVE')}</div> */}\n <div className=\"mobile-dashboard-topbar-more-options-drawer-option-logout mobile-dashboard-topbar-more-options-drawer-option\" onClick={showLoginConfirmationDialog}>\n <div className=\"mobile-dashboard-topbar-more-options-drawer-image-container\">\n <CiLogout className=\"mobile-dashboard-topbar-more-options-drawer-image\" />\n </div>\n <div className=\"mobile-dashboard-topbar-more-options-drawer-text-container\">\n <div className=\"mobile-dashboard-topbar-more-options-drawer-text\">{t('MOBILE_DASHBOARD_TOPBAR_MORE_OPTIONS_DRAWER_OPTION_LOGOUT')}</div>\n </div>\n </div>\n <div className=\"mobile-dashboard-topbar-more-options-drawer-option-cancel mobile-dashboard-topbar-more-options-drawer-option\" onClick={closeMoreOptionsDrawer}>\n <div className=\"mobile-dashboard-topbar-more-options-drawer-image-container\">\n <AiOutlineClose className=\"mobile-dashboard-topbar-more-options-drawer-image\" />\n </div>\n <div className=\"mobile-dashboard-topbar-more-options-drawer-text-container\">\n <div className=\"mobile-dashboard-topbar-more-options-drawer-text\">{t('MOBILE_DASHBOARD_TOPBAR_MORE_OPTIONS_DRAWER_OPTION_CANCEL')}</div>\n </div>\n </div>\n </> : (\n userDetails?.isAuthenticated ? <>\n <div className=\"mobile-dashboard-topbar-more-options-drawer-option-admin mobile-dashboard-topbar-more-options-drawer-option\" onClick={goToHome}>\n <div className=\"mobile-dashboard-topbar-more-options-drawer-image-container\">\n <BiLink className=\"mobile-dashboard-topbar-more-options-drawer-image\" />\n </div>\n <div className=\"mobile-dashboard-topbar-more-options-drawer-text-container\">\n <div className=\"mobile-dashboard-topbar-more-options-drawer-text\">{t('MOBILE_DASHBOARD_TOPBAR_MORE_OPTIONS_DRAWER_OPTION_ADMIN')}</div>\n </div>\n </div>\n <div className=\"mobile-dashboard-topbar-more-options-drawer-option-pricing mobile-dashboard-topbar-more-options-drawer-option\" onClick={goToPricingPlans}>\n <div className=\"mobile-dashboard-topbar-more-options-drawer-image-container\">\n <BsCurrencyDollar className=\"mobile-dashboard-topbar-more-options-drawer-image\" />\n </div>\n <div className=\"mobile-dashboard-topbar-more-options-drawer-text-container\">\n <div className=\"mobile-dashboard-topbar-more-options-drawer-text\">{t('MOBILE_DASHBOARD_TOPBAR_MORE_OPTIONS_DRAWER_OPTION_PRICING')}</div>\n </div>\n </div>\n {/* TODO leave this comment untill the public app is approved */}\n {/* <div className=\"mobile-dashboard-topbar-more-options-drawer-option-learn mobile-dashboard-topbar-more-options-drawer-option disabled\">{t('MOBILE_DASHBOARD_TOPBAR_MORE_OPTIONS_DRAWER_OPTION_BILLING')}</div> */}\n <div className=\"mobile-dashboard-topbar-more-options-drawer-option-logout mobile-dashboard-topbar-more-options-drawer-option\" onClick={showLoginConfirmationDialog}>\n <div className=\"mobile-dashboard-topbar-more-options-drawer-image-container\">\n <CiLogout className=\"mobile-dashboard-topbar-more-options-drawer-image\" />\n </div>\n <div className=\"mobile-dashboard-topbar-more-options-drawer-text-container\">\n <div className=\"mobile-dashboard-topbar-more-options-drawer-text\">{t('MOBILE_DASHBOARD_TOPBAR_MORE_OPTIONS_DRAWER_OPTION_LOGOUT')}</div>\n </div>\n </div>\n <div className=\"mobile-dashboard-topbar-more-options-drawer-option-cancel mobile-dashboard-topbar-more-options-drawer-option\" onClick={closeMoreOptionsDrawer}>\n <div className=\"mobile-dashboard-topbar-more-options-drawer-image-container\">\n <AiOutlineClose className=\"mobile-dashboard-topbar-more-options-drawer-image\" />\n </div>\n <div className=\"mobile-dashboard-topbar-more-options-drawer-text-container\">\n <div className=\"mobile-dashboard-topbar-more-options-drawer-text\">{t('MOBILE_DASHBOARD_TOPBAR_MORE_OPTIONS_DRAWER_OPTION_CANCEL')}</div>\n </div>\n </div>\n </> : <>\n <div className=\"mobile-dashboard-topbar-more-options-drawer-option-login mobile-dashboard-topbar-more-options-drawer-option\" onClick={goToHome}>\n <div className=\"mobile-dashboard-topbar-more-options-drawer-image-container\">\n <CiLogin className=\"mobile-dashboard-topbar-more-options-drawer-image\" />\n </div>\n <div className=\"mobile-dashboard-topbar-more-options-drawer-text-container\">\n <div className=\"mobile-dashboard-topbar-more-options-drawer-text\">{t('MOBILE_DASHBOARD_TOPBAR_MORE_OPTIONS_DRAWER_OPTION_LOGIN')}</div>\n </div>\n </div>\n <div className=\"mobile-dashboard-topbar-more-options-drawer-option-signin mobile-dashboard-topbar-more-options-drawer-option\" onClick={goToSignUp}>\n <div className=\"mobile-dashboard-topbar-more-options-drawer-image-container\">\n <AiOutlineUserAdd className=\"mobile-dashboard-topbar-more-options-drawer-image\" />\n </div>\n <div className=\"mobile-dashboard-topbar-more-options-drawer-text-container\">\n <div className=\"mobile-dashboard-topbar-more-options-drawer-text\">{t('MOBILE_DASHBOARD_TOPBAR_MORE_OPTIONS_DRAWER_OPTION_SIGNUP_FOR_FREE')}</div>\n </div>\n </div>\n <div className=\"mobile-dashboard-topbar-more-options-drawer-option-pricing mobile-dashboard-topbar-more-options-drawer-option\" onClick={goToPricingPlans}>\n <div className=\"mobile-dashboard-topbar-more-options-drawer-image-container\">\n <BsCurrencyDollar className=\"mobile-dashboard-topbar-more-options-drawer-image\" />\n </div>\n <div className=\"mobile-dashboard-topbar-more-options-drawer-text-container\">\n <div className=\"mobile-dashboard-topbar-more-options-drawer-text\">{t('MOBILE_DASHBOARD_TOPBAR_MORE_OPTIONS_DRAWER_OPTION_PRICING')}</div>\n </div>\n </div>\n {/* TODO leave this comment untill the public app is approved */}\n\n {/* <div className=\"mobile-dashboard-topbar-more-options-drawer-option-learn mobile-dashboard-topbar-more-options-drawer-option disabled\">{t('MOBILE_DASHBOARD_TOPBAR_MORE_OPTIONS_DRAWER_OPTION_BILLING')}</div> */}\n <div className=\"mobile-dashboard-topbar-more-options-drawer-option-cancel mobile-dashboard-topbar-more-options-drawer-option\" onClick={closeMoreOptionsDrawer}>\n <div className=\"mobile-dashboard-topbar-more-options-drawer-image-container\">\n <AiOutlineClose className=\"mobile-dashboard-topbar-more-options-drawer-image\" />\n </div>\n <div className=\"mobile-dashboard-topbar-more-options-drawer-text-container\">\n <div className=\"mobile-dashboard-topbar-more-options-drawer-text\">{t('MOBILE_DASHBOARD_TOPBAR_MORE_OPTIONS_DRAWER_OPTION_CANCEL')}</div>\n </div>\n </div>\n </>\n )\n }))\n }\n\n function openUserMenu(e) {\n if (isMobile) {\n openMoreOptionsDrawer()\n } else {\n setUserMenuState({\n isOpen: true,\n anchorElement: e.currentTarget,\n onClose: () => setUserMenuState(prev => ({\n ...prev,\n isOpen: false\n }))\n })\n }\n }\n\n function showLoginConfirmationDialog() {\n if (isMobile)\n optionsDrawerState.onClose()\n else\n userMenuState.onClose()\n\n setTimeout(() => {\n setIsLogoutConfirmationDialogOpen(true)\n }, MOBILE_DASHBOARD_TOPBAR_OPTIONS_DRAWER_CLOSING_DELAY)\n }\n\n function openPrivacyPolicyPage() {\n history.push(PRIVACY_POLICY_PAGE_URL)\n }\n\n function openTermsAndConditionsPage() {\n history.push(TERMS_PAGE_URL)\n }\n\n function openShopifyHelpPage() {\n history.push(SHOPIFY_HELP_PAGE_URL)\n }\n\n function logOut() {\n logout()\n history.push(LOGIN_PAGE_URL)\n }\n\n function closeDialog() {\n setIsLogoutConfirmationDialogOpen(false)\n }\n\n function getDisplayUsername() {\n return userDetails?.isAdmin ? userDetails?.username : userDetails?.influencerUsername\n }\n\n function renderUserCircle() {\n if (userDetails?.isAdmin) {\n return <div className=\"dashboard-topbar-username-circle\" onClick={openUserMenu}>\n <div className=\"dashboard-topbar-username-initials\">{userDetails?.username[0]}</div>\n </div>\n }\n\n return <ImageBox\n image={userDetails?.influencerImageUrl}\n roundImage={true}\n className='dashboard-topbar-username-image'\n onImageClickCallback={openUserMenu}\n />\n }\n\n return (\n <div className='layout-topbar-right-section'>\n {\n !isMobile ? <>\n {\n userDetails?.isAuthenticated ? <>\n {!window.location.pathname.startsWith(ADMIN_PAGES_URL_PREFIX) && <div className=\"welcome-topbar-admin-button welcome-topbar-right-button welcome-login-button\" onClick={goToHome}>{t('WELCOME_TOPBAR_ADMIN_BUTTON_TEXT')}</div>}\n {renderUserCircle()}\n </> : <div className=\"welcome-topbar-right-buttons-container\">\n <div className=\"welcome-topbar-signin-button welcome-topbar-right-button welcome-login-button\" onClick={goToLinks}>{t('WELCOME_PAGE_SIGN_IN_BUTTON_TEXT')}</div>\n <div className=\"welcome-topbar-signup-button welcome-topbar-right-button welcome-signup-button\" onClick={goToSignUp}>{t('WELCOME_PAGE_SIGN_UP_BUTTON_TEXT')}</div>\n </div>\n }\n <PaydinMenu\n widthPx={DASHBOARD_TOPBAR_USER_MENU_WIDTH_PX}\n isOpen={userMenuState.isOpen}\n anchorElement={userMenuState.anchorElement}\n onClose={userMenuState.onClose}\n direction={PAYDIN_MENU_OPENING_DIRECTIONS.RIGHT}\n borderRadius={DASHBOARD_TOPBAR_USER_MENU_BORDER_RADIUS_PX}\n >\n <div className=\"dashboard-topbar-user-menu-container\">\n <div className=\"dashboard-topbar-user-menu-titles-container\">\n {renderUserCircle()}\n <div className=\"dashboard-topbar-user-menu-names-container\">\n <div className=\"dashboard-topbar-user-menu-username\">@{getDisplayUsername()}</div>\n </div>\n </div>\n {\n userDetails?.isAdmin && <div className=\"dashboard-topbar-user-menu-plan-section dashboard-topbar-user-menu-section\">\n <div className=\"dashboard-topbar-user-menu-plan-section-title dashboard-topbar-user-menu-section-title\">{t('DASHBOARD_TOPBAR_USER_MENU_PLAN_SECTION_TITLE')}</div>\n <div className=\"dashboard-topbar-user-menu-plan-section-content dashboard-topbar-user-menu-section-content\">\n <div className=\"dashboard-topbar-user-menu-plan-section-plan-name-container\">\n <div className=\"dashboard-topbar-user-menu-plan-section-plan-name\">{userDetails?.subscriptionPlan ?? ''}</div>\n <div className=\"dashboard-topbar-user-menu-plan-section-plan-upgrade-button\" onClick={goToPricingPlans}>{t('DASHBOARD_TOPBAR_USER_MENU_PLAN_SECTION_UPGRADE_BUTTON_TEXT')}</div>\n </div>\n </div>\n </div>\n }\n {\n (!userDetails?.isAdmin || (userDetails?.isAdmin && hasShopifyStore())) && <div className=\"dashboard-topbar-user-menu-store-section dashboard-topbar-user-menu-section\">\n <div className=\"dashboard-topbar-user-menu-store-section-title dashboard-topbar-user-menu-section-title\">{userDetails?.isAdmin ? t('DASHBOARD_TOPBAR_USER_MENU_STORE_SECTION_TITLE') : t('DASHBOARD_TOPBAR_USER_MENU_MERCHANT_SECTION_TITLE')}</div>\n <div className=\"dashboard-topbar-user-menu-store-section-content dashboard-topbar-user-menu-section-content\">\n <div className=\"dashboard-topbar-user-menu-store-section-shopify-provider-container\">\n {\n userDetails?.isAdmin ? <>\n <ImageBox\n className=\"dashboard-topbar-user-menu-store-section-store-provider-image-container\"\n imageClassName=\"dashboard-topbar-user-menu-store-section-store-provider-image\"\n image={SHOPIFY_LOGO_URL} />\n <div className=\"dashboard-topbar-user-menu-store-section-store-name\">{userDetails?.businessName}</div>\n </> : <>\n <>\n {userDetails?.businessLogo && <ImageBox\n className=\"dashboard-topbar-influencer-menu-store-section-store-provider-image-container\"\n imageClassName=\"dashboard-topbar-influencer-menu-store-section-store-provider-image\"\n image={userDetails?.businessLogo}\n />}\n </>\n <div className=\"dashboard-topbar-user-menu-store-section-store-name\">{userDetails?.username}</div>\n </>\n }\n </div>\n </div>\n </div>\n }\n <div className=\"dashboard-topbar-user-menu-account-section dashboard-topbar-user-menu-section\">\n <div className=\"dashboard-topbar-user-menu-account-section-title dashboard-topbar-user-menu-section-title\">{t('DASHBOARD_TOPBAR_USER_MENU_ACCOUNT_SECTION_TITLE')}</div>\n <div className=\"dashboard-topbar-user-menu-account-section-content dashboard-topbar-user-menu-section-content\">\n <div className=\"dashboard-topbar-user-menu-account-section-option-my-account-container dashboard-topbar-user-menu-option-container\" onClick={goToMyAccount}>\n <FiUser className='dashboard-topbar-user-menu-option-image' />\n <div className=\"dashboard-topbar-user-menu-account-section-option-my-account-text dashboard-topbar-user-menu-option-text\">{t('DASHBOARD_TOPBAR_USER_MENU_ACCOUNT_SECTION_MY_ACCOUNT_OPTION_TEXT')}</div>\n </div>\n {/* <div className=\"dashboard-topbar-user-menu-account-section-option-billing-container disabled dashboard-topbar-user-menu-option-container\">\n <HiOutlineCurrencyDollar className='dashboard-topbar-user-menu-option-image' />\n <div className=\"dashboard-topbar-user-menu-account-section-option-billing-text dashboard-topbar-user-menu-option-text\">{t('DASHBOARD_TOPBAR_USER_MENU_ACCOUNT_SECTION_BILLING_OPTION_TEXT')}</div>\n </div> */}\n <div className=\"dashboard-topbar-user-menu-account-section-option-logout-container dashboard-topbar-user-menu-option-container\" onClick={showLoginConfirmationDialog}>\n <CiLogout className='dashboard-topbar-user-menu-option-image' />\n <div className=\"dashboard-topbar-user-menu-account-section-option-logout-text dashboard-topbar-user-menu-option-text\">{t('DASHBOARD_TOPBAR_USER_MENU_ACCOUNT_SECTION_LOGOUT_OPTION_TEXT')}</div>\n </div>\n </div>\n </div>\n <div className=\"dashboard-topbar-user-menu-support-section dashboard-topbar-user-menu-section\">\n <div className=\"dashboard-topbar-user-menu-support-section-title dashboard-topbar-user-menu-section-title\">{t('DASHBOARD_TOPBAR_USER_MENU_SUPPORT_SECTION_TITLE')}</div>\n <div className=\"dashboard-topbar-user-menu-support-section-content dashboard-topbar-user-menu-section-content\">\n <div className=\"dashboard-topbar-user-menu-support-section-option-privacy-policy-container dashboard-topbar-user-menu-option-container\" onClick={openPrivacyPolicyPage}>\n <MdOutlinePrivacyTip className='dashboard-topbar-user-menu-option-image' />\n <div className=\"dashboard-topbar-user-menu-support-section-option-privacy-policy-text dashboard-topbar-user-menu-option-text\">{t('DASHBOARD_TOPBAR_USER_MENU_SUPPORT_SECTION_PRIVACY_POLICY_OPTION_TEXT')}</div>\n </div>\n <div className=\"dashboard-topbar-user-menu-support-section-option-terms-and-conditions-container dashboard-topbar-user-menu-option-container\" onClick={openTermsAndConditionsPage}>\n <GrDocumentText className='dashboard-topbar-user-menu-support-section-option-terms-and-conditions-image dashboard-topbar-user-menu-option-image' />\n <div className=\"dashboard-topbar-user-menu-support-section-option-terms-and-conditions-text dashboard-topbar-user-menu-option-text\">{t('DASHBOARD_TOPBAR_USER_MENU_SUPPORT_SECTION_TERMS_AND_CONDICTIONS_OPTION_TEXT')}</div>\n </div>\n <div className=\"dashboard-topbar-user-menu-support-section-option-help-container dashboard-topbar-user-menu-option-container\" onClick={openShopifyHelpPage}>\n <SlQuestion className='dashboard-topbar-user-menu-option-image' />\n <div className=\"dashboard-topbar-user-menu-support-section-option-help-text dashboard-topbar-user-menu-option-text\">{t('DASHBOARD_TOPBAR_USER_MENU_SUPPORT_SECTION_HELP_OPTION_TEXT')}</div>\n </div>\n </div>\n </div>\n </div>\n </PaydinMenu>\n </> : <>\n <FiMenu className='layout-topbar-right-section-menu-image' onClick={openMoreOptionsDrawer} />\n <PaydinDrawer\n direction={PAYDIN_DRAWER_DIRECTION.BOTTOM}\n isOpen={optionsDrawerState.isOpen}\n onOpen={optionsDrawerState.onOpen}\n onClose={optionsDrawerState.onClose}\n hasPadding={false}\n topRightBorderRadiusPx={LINKS_PAGE_MOBILE_OPTIONS_DRAWER_TOP_BORDER_RADIUS_PX}\n topLeftBorderRadiusPx={LINKS_PAGE_MOBILE_OPTIONS_DRAWER_TOP_BORDER_RADIUS_PX}\n >\n {optionsDrawerState.children}\n </PaydinDrawer>\n </>\n }\n <PaydinDialog\n title={t('DASHBOARD_TOPBAR_LOGOUT_CONFIRMATION_DIALOG_TITLE')}\n message={t('DASHBOARD_TOPBAR_LOGOUT_CONFIRMATION_DIALOG_MESSAGE')}\n isDialogOpen={isLogoutConfirmationDialogOpen}\n handleDialogClose={closeDialog}\n leftButtonText={t('DASHBOARD_TOPBAR_LOGOUT_CONFIRMATION_DIALOG_LEFT_BUTTON_TEXT')}\n rightButtonText={t('DASHBOARD_TOPBAR_LOGOUT_CONFIRMATION_DIALOG_RIGHT_BUTTON_TEXT')}\n rightButtonType={PAYDIN_DIALOG_BUTTON_TYPES.SECONDARY}\n onRightButtonClick={logOut}\n closeOnRightClick={false}\n isLeftButtonWithLoader={false}\n />\n </div>\n )\n}","import FloatingElement from 'components/FloatingElement/FloatingElement'\nimport React from 'react'\nimport './FloatingMenu.css'\n\n/**\n * Represents a floating menu.\n * Uses {@link FloatingElement} to display a menu inside it.\n * @param {JSX} menuLayout - A custom jsx element to display as the menu's content. Ignores 'menuOptions' if provided\n * @param {array} menuOptions - An array of options to display as the menu's content. Ignored if 'menuLayout' is provided\n * @param {boolean} isShown - Determins whether the floating menu is shown or not\n * @param {function} hide - A function for hiding the floating menu\n * @param {number} buttonHeight - The height of the triggering button, in pixels. Used to adjust the 'top' property of the floating menu accordingly.\n */\nexport default function FloatingMenu({\n menuLayout = null,\n menuOptions = [],\n isShown = false,\n hide = () => { },\n buttonHeight = 0,\n menuClassName = ''\n}) {\n\n const onClickHandle = (option) => {\n hide()\n option?.onClick()\n }\n\n return (\n <FloatingElement\n isShown={isShown}\n hide={hide}\n >\n {\n menuLayout ?? (\n <div className={`floating-menu-container ${menuClassName}`} style={{ top: `${buttonHeight}px` }}>\n {\n menuOptions.map(option => <div key={option?.text} className={`floating-menu-option ${option?.className ?? ''}`} onClick={() => onClickHandle(option)}>\n {option?.image}\n <div className={`floating-menu-option-text ${option?.textClassName}`}>{option?.text}</div>\n </div>)\n }\n </div>\n )\n }\n </FloatingElement>\n )\n}\n","import FloatingMenu from 'components/FloatingMenu/FloatingMenu'\nimport React, { useEffect, useRef, useState } from 'react'\nimport { BsPlusSquare } from 'react-icons/bs'\nimport './MinimizedAddButton.css'\nimport { MOBILE_DASHBOARD_TOPBAR_RIGHT_SECTION_BUTTON_HEIGHT_PX } from 'constants/general.constants'\n\n/**\n * Represents a minimized (represented only as an image) add button.\n * Uses {@link FloatingMenu} to display a customizable menu when clicked.\n * @param {JSX} menuLayout - A custom jsx element to display as the menu's content. Ignores 'menuOptions' if provided\n * @param {array} menuOptions - An array of options to display as the menu's content. Ignored if 'menuLayout' is provided\n * @param {string} addImageClassName - A class name for the add button image\n * @param {boolean} adjustButtonTop - Determins whether the floating menu should be adjusted according to the add button's height or not\n */\nexport default function MinimizedAddButton({\n menuLayout = null,\n menuOptions = [],\n addImageClassName = '',\n adjustButtonTop = false,\n menuClassName = ''\n}) {\n const [isAddOptionsMenuShown, setIsAddOptionsMenuShown] = useState(false)\n const [addButtonHeight, setAddButtonHeight] = useState(0)\n\n const addButtonImageRef = useRef(null)\n\n useEffect(() => {\n if (addButtonImageRef?.current) {\n setAddButtonHeight(addButtonImageRef?.current?.clientHeight)\n }\n }, [])\n\n function closeAddingOptionsMenu() {\n setIsAddOptionsMenuShown(false)\n }\n\n function openAddingOptionsMenu() {\n setIsAddOptionsMenuShown(true)\n }\n\n return (\n <div className='minimized-add-button-container'>\n <FloatingMenu\n menuClassName={menuClassName}\n menuLayout={menuLayout} \n menuOptions={menuOptions} \n isShown={isAddOptionsMenuShown} \n hide={closeAddingOptionsMenu} \n buttonHeight={adjustButtonTop ? addButtonHeight : MOBILE_DASHBOARD_TOPBAR_RIGHT_SECTION_BUTTON_HEIGHT_PX}\n />\n <div ref={addButtonImageRef}>\n <BsPlusSquare \n className={`minimized-add-button-image ${addImageClassName}`} \n onClick={openAddingOptionsMenu} \n />\n </div>\n </div>\n )\n}\n","import React from 'react'\n\nexport default function HomePageImage(props) {\n return (\n <svg\n {...props}\n height=\"512\"\n viewBox=\"0 0 32 32\"\n width=\"512\"\n >\n <g\n id=\"_9-Home\"\n dataname=\"9-Home\"\n >\n <path d=\"m21.82 30h-11.64a5 5 0 0 1 -5.18-4.76v-6.24a1 1 0 0 1 2 0v6.24a3 3 0 0 0 3.18 2.76h11.64a3 3 0 0 0 3.18-2.76v-6.24a1 1 0 0 1 2 0v6.24a5 5 0 0 1 -5.18 4.76zm7.89-13.29a1 1 0 0 0 0-1.42l-13-13a1 1 0 0 0 -1.42 0l-13 13a1 1 0 0 0 1.42 1.42l12.29-12.3 12.29 12.3a1 1 0 0 0 1.42 0z\" />\n </g>\n </svg>\n )\n}\n","import React from 'react'\nimport './MobileButtonStrip.css'\n\nexport default function MobileButtonStrip({\n buttons = [],\n length = 4,\n paddingInline = '8px',\n hasBottomLine = false,\n stripButtonTextSize = '13px',\n isFixed = false,\n top = '0px'\n}) {\n const stripStyles = {\n ...(isFixed ? {\n position: 'fixed',\n top,\n right: 0,\n left: 0,\n zIndex: 300,\n backgroundColor: 'white'\n } : {}),\n gridTemplateColumns: `repeat(${length}, 1fr)`,\n paddingInline\n }\n\n const stripButtonTextStyles = {\n fontSize: stripButtonTextSize\n }\n\n return (\n <div style={stripStyles} className={`mobile-button-strip ${hasBottomLine ? 'bottom-line' : ''}`}>\n {\n buttons.map(button => <div key={button?.text} onClick={button?.onClick} className={`mobile-button-strip-button ${button?.isDisabled ? 'disabled' : ''} ${button?.isSelected ? 'selected' : ''}`}>\n {button?.image}\n <div className=\"mobile-button-strip-button-text\" style={stripButtonTextStyles}>{button?.text}</div>\n </div>)\n }\n </div>\n )\n}","import React from 'react'\n\nexport default function MagicStoreImage(props) {\n return (\n <svg\n {...props}\n strokeWidth=\"0\"\n viewBox=\"0 0 24 24\"\n height=\"1em\"\n width=\"1em\"\n >\n <defs>\n <linearGradient id=\"grad1\" x1=\"0%\" x2=\"100%\" y1=\"0%\" y2=\"100%\">\n <stop offset=\"0%\" stopColor=\"#03a5ab\" />\n <stop offset=\"50%\" stopColor=\"#8b3dff\" />\n </linearGradient>\n </defs>\n <path fill=\"url(#grad1)\" d=\"M17.0007 1.20801 18.3195 3.68083 20.7923 4.99968 18.3195 6.31852 17.0007 8.79134 15.6818 6.31852 13.209 4.99968 15.6818 3.68083 17.0007 1.20801ZM8.00065 4.33301 10.6673 9.33301 15.6673 11.9997 10.6673 14.6663 8.00065 19.6663 5.33398 14.6663.333984 11.9997 5.33398 9.33301 8.00065 4.33301ZM19.6673 16.333 18.0007 13.208 16.334 16.333 13.209 17.9997 16.334 19.6663 18.0007 22.7913 19.6673 19.6663 22.7923 17.9997 19.6673 16.333Z\">\n </path>\n </svg>\n )\n}\n","import React from 'react'\n\nexport default function MultilinksImage(props) {\n return (\n <svg \n {...props} \n viewBox=\"0 0 32 32\" \n width=\"512\" \n height=\"512\"\n >\n <path d=\"M21.12,18.93h-3a1.07,1.07,0,0,1-1.07-1.07v-8a1.07,1.07,0,0,1,1.07-1.07h3a3.2,3.2,0,0,1,3.2,3.2v3.72A3.2,3.2,0,0,1,21.12,18.93ZM19.2,16.8h1.92a1.07,1.07,0,0,0,1.07-1.07V12a1.07,1.07,0,0,0-1.07-1.07H19.2Z\"/><path d=\"M11.64,8.81A3.2,3.2,0,0,0,8.44,12v5.85a1.07,1.07,0,1,0,2.13,0v-.75H12.8v.75a1.07,1.07,0,1,0,2.13,0V12A3.23,3.23,0,0,0,11.64,8.81ZM10.57,15V12a1.09,1.09,0,0,1,1.16-1.07A1.07,1.07,0,0,1,12.8,12v3Z\"/><path d=\"M26.67,2.13H5.33A5.34,5.34,0,0,0,0,7.46V20.27a5.34,5.34,0,0,0,5.33,5.33h9.6v2.13H12.8a1.07,1.07,0,0,0,0,2.13h6.4a1.07,1.07,0,0,0,0-2.13H17.07v-3.2h0A1.07,1.07,0,0,0,16,23.47H5.33a3.2,3.2,0,0,1-3.2-3.2V7.46a3.2,3.2,0,0,1,3.2-3.2H26.67a3.2,3.2,0,0,1,3.2,3.2V20.27a3.2,3.2,0,0,1-3.2,3.2H19.2a1.07,1.07,0,0,0,0,2.13h7.47A5.34,5.34,0,0,0,32,20.27V7.46A5.34,5.34,0,0,0,26.67,2.13Z\"/>\n </svg>\n \n )\n}","import React from 'react'\n\nexport default function ShopboardImage(props) {\n return ( \n <svg \n {...props}\n height=\"512pt\" \n viewBox=\"0 0 512 512\" \n width=\"512pt\"\n >\n <path d=\"m476.855469 307.148438-29.9375-29.933594-42.425781 42.425781 29.9375 29.933594c23.390624 23.394531 23.390624 61.464843 0 84.855469-23.390626 23.390624-61.460938 23.390624-84.855469 0l-157.214844-157.214844-42.425781 42.425781 157.214844 157.214844c46.859374 46.859375 122.847656 46.859375 169.707031 0s46.859375-122.847657 0-169.707031zm0 0\"/><path d=\"m162.425781 434.429688c-23.394531 23.390624-61.464843 23.390624-84.855469 0-23.390624-23.390626-23.390624-61.460938 0-84.855469l157.214844-157.214844-42.425781-42.425781-157.214844 157.214844c-46.859375 46.859374-46.859375 122.847656 0 169.707031s122.847657 46.859375 169.707031 0l29.933594-29.9375-42.425781-42.425781zm0 0\"/><path d=\"m349.574219 77.570312c23.394531-23.390624 61.464843-23.390624 84.855469 0 23.390624 23.390626 23.390624 61.460938 0 84.855469l-157.214844 157.214844 42.425781 42.425781 157.214844-157.214844c46.859375-46.859374 46.859375-122.847656 0-169.707031s-122.847657-46.859375-169.707031 0l-29.933594 29.9375 42.425781 42.425781zm0 0\"/><path d=\"m65.082031 234.785156 42.425781-42.425781-29.9375-29.933594c-23.390624-23.394531-23.390624-61.464843 0-84.855469 23.390626-23.390624 61.460938-23.390624 84.855469 0l163.425781 163.425782 42.425782-42.425782-163.425782-163.425781c-46.859374-46.859375-122.847656-46.859375-169.707031 0s-46.859375 122.847657 0 169.707031zm0 0\"/>\n </svg>\n )\n}","import React, { useState } from 'react'\nimport './DashboardTopBar.css'\nimport ImageBox from 'components/ImageBox/ImageBox'\nimport {\n CONTENT_TYPES,\n HOME_PAGE_DESKTOP_GET_INFLUENCERS_API_COUNT,\n LINKS_PAGE_MOBILE_OPTIONS_DRAWER_TOP_BORDER_RADIUS_PX,\n MOBILE_DASHBOARD_TOPBAR_OPTIONS_DRAWER_CLOSING_DELAY,\n NOT_PRO_MAX_INFLUENCER_NUMBER,\n PAYDIN_DRAWER_DIRECTION,\n PAYDIN_DRAWER_TRANSITION_DURATION_WITH_BUFFER,\n SHOPEAKS_SMALL_LOGO_URL,\n SHOPEAKS_SMALL_LOGO_WHITE_URL,\n VIEW_MODES,\n} from 'constants/general.constants'\nimport { BiLink } from 'react-icons/bi'\nimport { RiPaletteLine } from 'react-icons/ri'\nimport { TbDeviceDesktopAnalytics, TbSettings2 } from 'react-icons/tb'\nimport { FiUsers, FiUser } from 'react-icons/fi'\nimport { CiLogout, CiTimer } from 'react-icons/ci'\nimport { MdOutlinePrivacyTip } from 'react-icons/md'\nimport { GrDocumentText } from 'react-icons/gr'\nimport { SlQuestion } from 'react-icons/sl'\nimport { AiOutlineClose } from 'react-icons/ai'\nimport { useTranslation } from 'react-i18next'\nimport { useAuthContext, useGeneralDataContext, useUserDetailsContext } from 'contexts/User'\nimport {\n ACCOUNT_PAGE_URL,\n ANALYTICS_PAGE_URL,\n INFLUENCERS_PAGE_URL,\n LINKS_PAGE_URL,\n LOGIN_PAGE_URL,\n PRIVACY_POLICY_PAGE_URL,\n TERMS_PAGE_URL,\n SHOPIFY_HELP_PAGE_URL,\n SHORTS_PAGE_URL,\n SETTINGS_PAGE_URL,\n APPEARANCE_PAGE_URL,\n HOME_PAGE_URL,\n MAGIC_STORE_PAGE_URL,\n SHOPBOARD_PAGE_URL,\n PRICING_PLANS_PAGE_URL,\n MULTILINKS_PAGE_URL,\n TRENDS_PAGE_URL,\n} from 'constants/routes.constants'\nimport { useHistoryContext } from 'contexts/History'\nimport { isMobile } from 'utils/deviceUtils'\nimport PaydinDialog from 'dialogs/PaydinDialog/PaydinDialog'\nimport { PAYDIN_DIALOG_BUTTON_TYPES } from 'dialogs/PaydinDialog/PaydinDialog'\nimport PaydinDrawer from 'components/PaydinDrawer/PaydinDrawer'\nimport LayoutTopbarRightSection from 'components/LayoutTopbarRightSection/LayoutTopbarRightSection'\nimport PaydinDrawerListContent from 'components/PaydinDrawerListContent/PaydinDrawerListContent'\nimport ShortsImage from 'embeddedImages/ShortsImage'\nimport MinimizedAddButton from 'components/MinimizedAddButton/MinimizedAddButton'\nimport HomePageImage from 'embeddedImages/HomePageImage'\nimport ContentDialog from 'dialogs/ContentDialog/ContentDialog'\nimport AddLInkFlow from 'components/AddLInkFlow/AddLInkFlow'\nimport MobileButtonStrip from 'components/MobileButtonStrip/MobileButtonStrip'\nimport MagicStoreImage from 'embeddedImages/MagicStoreImage'\nimport { GetInfluencers } from 'api/influencers/influencers'\nimport { extractInfluencerData } from 'utils/dataUtils'\nimport MultilinksImage from 'embeddedImages/MultilinksImage'\nimport ShopboardImage from 'embeddedImages/ShopboardImage'\nimport InfluencersImage from 'embeddedImages/InfluencersImage'\n\n/**\n * Represents the dashboard top bar for all admin pages.\n */\nexport default function DashboardTopBar() {\n const { t } = useTranslation()\n const {\n userDetails,\n hasShopifyStore,\n setRecentInfluencers,\n isFreeUser,\n isFreeUserAndTrialEnded,\n isBusinessFeatureEnabled,\n maxInfleuncersAllowed,\n } = useUserDetailsContext()\n const {\n openFreeTrialDialog,\n } = useGeneralDataContext()\n const history = useHistoryContext()\n const { logout } = useAuthContext()\n\n const [isLogoutConfirmationDialogOpen, setIsLogoutConfirmationDialogOpen] = useState(false)\n const [optionsDrawerState, setOptionsDrawerState] = useState({\n isOpen: false,\n onOpen: openMoreOptionsDrawer,\n onClose: closeMoreOptionsDrawer,\n children: <></>\n })\n const [contentDialogState, setContentDialogState] = useState({\n isOpen: false,\n mode: VIEW_MODES.CREATE,\n onSaveSuccess: () => { }\n })\n const [addFlowTrigger, setAddFlowTrigger] = useState(false)\n\n function closeLinkContentDialog() {\n setContentDialogState(prev => ({\n ...prev,\n isOpen: false\n }))\n }\n\n function showLoginConfirmationDialog() {\n optionsDrawerState.onClose()\n\n setTimeout(() => {\n setIsLogoutConfirmationDialogOpen(true)\n }, MOBILE_DASHBOARD_TOPBAR_OPTIONS_DRAWER_CLOSING_DELAY)\n }\n\n function goToHome() {\n if (window.location.pathname !== HOME_PAGE_URL) {\n history.push(HOME_PAGE_URL)\n }\n }\n\n function goToLinks() {\n if (window.location.pathname !== LINKS_PAGE_URL) {\n history.push(LINKS_PAGE_URL)\n }\n }\n\n function goToShorts() {\n if (window.location.pathname !== SHORTS_PAGE_URL) {\n history.push(SHORTS_PAGE_URL)\n }\n }\n\n function goToMultilinks() {\n if (window.location.pathname !== MULTILINKS_PAGE_URL) {\n history.push(MULTILINKS_PAGE_URL)\n }\n }\n\n function goToAppearance() {\n closeDrawerAndGoToRoute(APPEARANCE_PAGE_URL)\n }\n\n function goToTrends() {\n if (isBusinessFeatureEnabled()) {\n closeDrawerAndGoToRoute(TRENDS_PAGE_URL)\n } else {\n history.goBack()\n setTimeout(() => { // wait for the drawer to close\n openFreeTrialDialog(true, t('TRENDS_PAGE_UPGRADE_TO_GET_ACCESS_TITLE'), t('TRENDS_PAGE_UPGRADE_TO_GET_ACCESS_SUBTITLE'))\n }, PAYDIN_DRAWER_TRANSITION_DURATION_WITH_BUFFER)\n }\n }\n\n function goToAnalytics(triggeredFromDrawer) {\n closeDrawerAndGoToRoute(ANALYTICS_PAGE_URL, triggeredFromDrawer)\n }\n\n function goToShopboard(triggeredFromDrawer) {\n closeDrawerAndGoToRoute(SHOPBOARD_PAGE_URL, triggeredFromDrawer)\n }\n\n function goToInfluencers() {\n if (window.location.pathname !== INFLUENCERS_PAGE_URL) {\n history.push(INFLUENCERS_PAGE_URL)\n }\n }\n\n function logOut() {\n logout()\n history.push(LOGIN_PAGE_URL)\n }\n\n function goToMyAccount() {\n closeDrawerAndGoToRoute(ACCOUNT_PAGE_URL)\n }\n\n function closeDialog() {\n setIsLogoutConfirmationDialogOpen(false)\n }\n\n function closeMoreOptionsDrawer() {\n setOptionsDrawerState(prev => ({\n ...prev,\n isOpen: false\n }))\n }\n \n function createNewLink() {\n setAddFlowTrigger(true)\n }\n \n function goToMagicStore() {\n history.push(MAGIC_STORE_PAGE_URL)\n }\n \n function goToPricingPlans() {\n if (!window.location.pathname.startsWith(PRICING_PLANS_PAGE_URL)) {\n history.push(PRICING_PLANS_PAGE_URL)\n }\n }\n \n function createNewInfluencer() {\n const maxInfleuncers = maxInfleuncersAllowed()\n if (maxInfleuncers == 0) {\n openFreeTrialDialog()\n } else {\n if (userDetails?.recentActivitiesData?.influencers?.items.length == 0) {\n GetInfluencers()\n .then(data => {\n const loadedInfluencers = data?.map(item => extractInfluencerData(item))?.filter(influencer => influencer?.isActive)\n setRecentInfluencers(loadedInfluencers)\n if (loadedInfluencers.length >= maxInfleuncers) {\n if (userDetails?.recentActivitiesData?.influencers?.items.length >= maxInfleuncers) {\n if (maxInfleuncers > 3) {\n openFreeTrialDialog(true, t('TOO_MANY_INFLUENCER_15_DIALOG_TITLE'), t('TOO_MANY_INFLUENCER_15_DIALOG_SUBTITLE'))\n } else if (maxInfleuncers > 0) {\n openFreeTrialDialog(true, t('TOO_MANY_INFLUENCER_3_DIALOG_TITLE'), t('TOO_MANY_INFLUENCER_3_DIALOG_SUBTITLE'))\n } else {\n openFreeTrialDialog()\n }\n }\n } else {\n setContentDialogState({\n isOpen: true,\n mode: VIEW_MODES.CREATE,\n contentType: CONTENT_TYPES.INFLUENCER,\n data: {},\n onSaveSuccess: () => {\n setTimeout(() => { // gives some time to perform going back in history (inside the corresponding 'View' component) first and then navigating to the appropriate screen\n goToInfluencers()\n }, 200)\n }\n })\n }\n })\n } else if (userDetails?.recentActivitiesData?.influencers?.items.length >= maxInfleuncers) {\n if (maxInfleuncers > 3) {\n openFreeTrialDialog(true, t('TOO_MANY_INFLUENCER_15_DIALOG_TITLE'), t('TOO_MANY_INFLUENCER_15_DIALOG_SUBTITLE'))\n } else if (maxInfleuncers > 0) {\n openFreeTrialDialog(true, t('TOO_MANY_INFLUENCER_3_DIALOG_TITLE'), t('TOO_MANY_INFLUENCER_3_DIALOG_SUBTITLE'))\n } else {\n openFreeTrialDialog()\n }\n } else {\n setContentDialogState({\n isOpen: true,\n mode: VIEW_MODES.CREATE,\n contentType: CONTENT_TYPES.INFLUENCER,\n data: {},\n onSaveSuccess: () => {\n setTimeout(() => { // gives some time to perform going back in history (inside the corresponding 'View' component) first and then navigating to the appropriate screen\n goToInfluencers()\n }, 200)\n }\n })\n }\n }\n }\n\n function createNewShort() {\n setContentDialogState({\n isOpen: true,\n mode: VIEW_MODES.CREATE,\n contentType: CONTENT_TYPES.SHORT,\n data: {},\n onSaveSuccess: () => {\n setTimeout(() => { // gives some time to perform going back in history (inside the corresponding 'View' component) first and then navigating to the appropriate screen\n goToShorts()\n }, 200)\n }\n })\n }\n\n\n function createNewMultilink() {\n setContentDialogState({\n isOpen: true,\n mode: VIEW_MODES.CREATE,\n contentType: CONTENT_TYPES.MULTILINK,\n data: {},\n onSaveSuccess: () => {\n setTimeout(() => { // gives some time to perform going back in history (inside the corresponding 'View' component) first and then navigating to the appropriate screen\n goToMultilinks()\n }, 200)\n }\n })\n }\n\n function goToPrivacyPolicy() {\n closeDrawerAndGoToRoute(PRIVACY_POLICY_PAGE_URL)\n }\n\n function goToTermsAndConditions() {\n closeDrawerAndGoToRoute(TERMS_PAGE_URL)\n }\n\n function openShopifyHelpPage() {\n closeDrawerAndGoToRoute(SHOPIFY_HELP_PAGE_URL)\n }\n\n function openSettingsPage() {\n closeDrawerAndGoToRoute(SETTINGS_PAGE_URL)\n }\n\n function closeDrawerAndGoToRoute(url, triggeredFromDrawer = true) {\n if (isMobile) {\n if (triggeredFromDrawer) {\n history.goBack()\n if (window.location.pathname !== url) {\n setTimeout(() => { // wait for the drawer to close\n history.push(url)\n }, PAYDIN_DRAWER_TRANSITION_DURATION_WITH_BUFFER)\n }\n } else {\n history.push(url)\n }\n } else {\n if (window.location.pathname !== url) {\n history.push(url)\n }\n }\n }\n\n function renderUserCircle() {\n if (userDetails?.isAdmin) {\n return <div onClick={openMoreOptionsDrawer} className='mobile-dashboard-topbar-user-circle-button mobile-dashboard-button'>\n <div onClick={openMoreOptionsDrawer} className='mobile-dashboard-topbar-user-circle-button-image mobile-dashboard-topbar-button-image'>\n <div className={`mobile-dashboard-topbar-user-circle-button-username-initials-cirlce ${isFreeUser() ? \"free\" : \"\"}`}>\n <div className=\"mobile-dashboard-topbar-user-circle-button-text\">{userDetails?.username[0] ?? ''}</div>\n </div>\n </div>\n </div>\n }\n\n return <ImageBox\n image={userDetails?.influencerImageUrl}\n roundImage={true}\n showBorder={true}\n className='mobile-dashboard-topbar-user-circle-image'\n imageClassName='mobile-dashboard-topbar-user-circle-image'\n onImageClickCallback={openMoreOptionsDrawer}\n />\n }\n\n function renderRightSection() {\n return (<>\n <div className='mobile-dashboard-topbar-right-section'>\n {\n hasShopifyStore() && (userDetails?.isAdmin || userDetails?.permissions?.isActiveInfluencer) && <MinimizedAddButton\n addImageClassName='mobile-dashboard-topbar-add-button mobile-dashboard-topbar-add-button'\n menuClassName='mobile-dashboard-topbar-add-button-menu'\n menuOptions={[\n ...(!isFreeUser() && userDetails?.settings?.productVisionConfigurations?.isEnabled ? [{\n text: t('MOBILE_DASHBOARD_TOPBAR_ADD_OPTIONS_MENU_MAGIC_STORE_OPTION_TEXT'),\n image: <MagicStoreImage className=\"mobile-dashboard-topbar-add-options-menu-option-image\" />,\n onClick: goToMagicStore,\n textClassName: 'mobile-dashboard-topbar-add-options-menu-magic-store-option'\n }] : []),\n ...(!isFreeUserAndTrialEnded() ? [{\n text: t('MOBILE_DASHBOARD_TOPBAR_ADD_OPTIONS_MENU_LINK_OPTION_TEXT'),\n image: <BiLink className=\"mobile-dashboard-topbar-add-options-menu-option-image\" />,\n onClick: createNewLink\n }] : []),\n {\n text: t('MOBILE_DASHBOARD_TOPBAR_ADD_OPTIONS_MENU_SHORT_OPTION_TEXT'),\n image: <ShortsImage className=\"mobile-dashboard-topbar-add-options-menu-option-image\" />,\n onClick: createNewShort\n },\n ...((userDetails?.isAdmin && !isFreeUserAndTrialEnded()) ? [{\n text: t('MOBILE_DASHBOARD_TOPBAR_ADD_OPTIONS_MENU_MULTILINK_OPTION_TEXT'),\n image: <MultilinksImage className=\"mobile-dashboard-topbar-add-options-menu-option-image\" />,\n onClick: createNewMultilink\n }] : []),\n ...((userDetails?.isAdmin && !isFreeUserAndTrialEnded()) ? [{\n text: t('MOBILE_DASHBOARD_TOPBAR_ADD_OPTIONS_MENU_INFLUENCER_OPTION_TEXT'),\n image: <InfluencersImage className=\"mobile-dashboard-topbar-add-options-menu-option-image\" />,\n onClick: createNewInfluencer\n }] : [])\n ]}\n />\n }\n {renderUserCircle()}\n </div>\n </>)\n }\n\n function openMoreOptionsDrawer() {\n setOptionsDrawerState(prev => ({\n ...prev,\n isOpen: true,\n onClose: closeMoreOptionsDrawer,\n children: <>\n <PaydinDrawerListContent\n options={[\n ...((userDetails?.isAdmin && hasShopifyStore()) ? [{\n text: t('MOBILE_DASHBOARD_TOPBAR_MORE_OPTIONS_DRAWER_OPTION_SHOPBOARD'),\n image: <ShopboardImage className='mobile-dashboard-topbar-more-options-drawer-option-image' />,\n onClick: goToShopboard\n }] : []),\n ...((userDetails?.isAdmin && hasShopifyStore()) ? [{\n text: t('MOBILE_DASHBOARD_TOPBAR_MORE_OPTIONS_DRAWER_OPTION_MULTILINKS'),\n image: <MultilinksImage className='mobile-dashboard-topbar-more-options-drawer-option-image' />,\n onClick: goToMultilinks\n }] : []),\n ...((userDetails?.isAdmin && hasShopifyStore()) ? [{\n text: t('MOBILE_DASHBOARD_TOPBAR_MORE_OPTIONS_DRAWER_OPTION_TRENDS'),\n image: <RiPaletteLine className='mobile-dashboard-topbar-more-options-drawer-option-image' />,\n onClick: goToTrends\n }] : []),\n ...((userDetails?.isAdmin && hasShopifyStore()) ? [{\n text: t('MOBILE_DASHBOARD_TOPBAR_MORE_OPTIONS_DRAWER_OPTION_ANALYTICS'),\n image: <TbDeviceDesktopAnalytics className='mobile-dashboard-topbar-more-options-drawer-option-image' />,\n onClick: goToAnalytics\n }] : []),\n ...(hasShopifyStore() ? [{\n text: t('MOBILE_DASHBOARD_TOPBAR_MORE_OPTIONS_DRAWER_OPTION_MY_ACCOUNT'),\n image: <FiUser className='mobile-dashboard-topbar-more-options-drawer-option-image' />,\n onClick: goToMyAccount\n }] : []),\n ...((userDetails?.isAdmin && hasShopifyStore()) ? [{\n text: t('MOBILE_DASHBOARD_TOPBAR_MORE_OPTIONS_DRAWER_OPTION_APPEARANCE'),\n image: <RiPaletteLine className='mobile-dashboard-topbar-more-options-drawer-option-image' />,\n onClick: goToAppearance\n }] : []),\n // {\n // text: t('MOBILE_DASHBOARD_TOPBAR_MORE_OPTIONS_DRAWER_OPTION_PRIVACY_POLICY'),\n // image: <MdOutlinePrivacyTip className='mobile-dashboard-topbar-more-options-drawer-option-image' />,\n // onClick: goToPrivacyPolicy\n // },\n // {\n // text: t('MOBILE_DASHBOARD_TOPBAR_MORE_OPTIONS_DRAWER_OPTION_TERMS_AND_CONDITIONS'),\n // image: <GrDocumentText className='mobile-dashboard-topbar-more-options-drawer-option-image' />,\n // onClick: goToTermsAndConditions\n // },\n // {\n // text: t('MOBILE_DASHBOARD_TOPBAR_MORE_OPTIONS_DRAWER_OPTION_HELP'),\n // image: <SlQuestion className='mobile-dashboard-topbar-more-options-drawer-option-image' />,\n // onClick: openShopifyHelpPage\n // },\n ...((userDetails?.isAdmin && hasShopifyStore()) ? [{\n text: t('MOBILE_DASHBOARD_TOPBAR_MORE_OPTIONS_DRAWER_OPTION_SETTINGS'),\n image: <TbSettings2 className='mobile-dashboard-topbar-more-options-drawer-option-image' />,\n onClick: openSettingsPage\n }] : []),\n {\n text: t('MOBILE_DASHBOARD_TOPBAR_MORE_OPTIONS_DRAWER_OPTION_LOGOUT'),\n className: 'mobile-dashboard-topbar-more-options-drawer-option-logout',\n image: <CiLogout className='mobile-dashboard-topbar-more-options-drawer-option-image' />,\n onClick: showLoginConfirmationDialog\n },\n // {\n // text: t('MOBILE_DASHBOARD_TOPBAR_MORE_OPTIONS_DRAWER_OPTION_CANCEL'),\n // image: <AiOutlineClose className='mobile-dashboard-topbar-more-options-drawer-option-image' />,\n // onClick: closeMoreOptionsDrawer\n // }\n ]}\n />\n </>\n }))\n }\n\n function hasAnalyticsPermission() {\n return userDetails?.permissions?.clicksEnabled ||\n userDetails?.permissions?.salesEnabled ||\n userDetails?.permissions?.revenueEnabled ||\n userDetails?.permissions?.commissionEnabled\n }\n\n return (\n <>\n {!isMobile ?\n <div className='dashboard-topbar-container'>\n <div className=\"dashboard-topbar-content\">\n <LayoutTopbarRightSection />\n </div>\n <div className=\"dashboard-topbar-bottom-line\" />\n </div> :\n <div className='mobile-dashboard-topbar-container'>\n <div className=\"mobile-dashboard-topbar-content\">\n <div className={`mobile-dashboard-topbar-paylink-title-container ${isFreeUser() && (userDetails?.isAdmin || isFreeUserAndTrialEnded()) ? \"free\" : \"\"}`}>\n <div className=\"mobile-dashboard-topbar-paylink-logo-container\">\n <ImageBox\n image={isFreeUser() && (userDetails?.isAdmin || isFreeUserAndTrialEnded()) ? SHOPEAKS_SMALL_LOGO_WHITE_URL : SHOPEAKS_SMALL_LOGO_URL}\n className='mobile-dashboard-topbar-paylink-logo'\n />\n <div className=\"mobile-dashboard-topbar-store-name-container\">\n { \n (!isFreeUser() || (!userDetails?.isAdmin && !isFreeUserAndTrialEnded())) && <div className=\"mobile-dashboard-topbar-store-name\">{hasShopifyStore() ? (userDetails?.isAdmin ? userDetails?.businessName : userDetails?.influencerUsername) : userDetails?.username}</div>\n }\n {\n isFreeUser() && (userDetails?.isAdmin || isFreeUserAndTrialEnded()) && <div className='mobile-dashboard-topbar-free-trial-section'>\n <div className=\"mobile-dashboard-topbar-store-free-trial-container\" onClick={goToPricingPlans}>\n <div>{isFreeUserAndTrialEnded() ? t(\"FREE_TRIAL_STRIP_TRIAL_ENDED_TITLE\") : t(\"FREE_TRIAL_STRIP_FREE_DAYS_LEFT_MOBILE\", {daysLeft: userDetails.freeTrialDaysLeft})}</div>\n {\n userDetails?.isAdmin && <div className='free-trial-upgrade-button'>{t(\"FREE_TRIAL_STRIP_UPGRADE_BUTTON_TEXT\")}</div>\n }\n </div>\n </div>\n }\n </div>\n </div>\n {renderRightSection()}\n </div>\n <MobileButtonStrip\n length={userDetails?.isAdmin || hasAnalyticsPermission() ? 4 : 3}\n buttons={[\n {\n text: t('DASHBOARD_TOPBAR_HOME_BUTTON_TEXT'),\n image: <HomePageImage className='mobile-dashboard-topbar-links-button-image mobile-dashboard-topbar-button-image' />,\n onClick: goToHome,\n isSelected: window.location.pathname === HOME_PAGE_URL,\n isDisabled: false\n },\n {\n text: t('DASHBOARD_TOPBAR_LINKS_BUTTON_TEXT'),\n image: <BiLink className='mobile-dashboard-topbar-links-button-image mobile-dashboard-topbar-button-image' />,\n onClick: goToLinks,\n isSelected: window.location.pathname === LINKS_PAGE_URL,\n isDisabled: !hasShopifyStore()\n },\n {\n text: t('DASHBOARD_TOPBAR_SHORTS_BUTTON_TEXT'),\n image: <ShortsImage className={`mobile-dashboard-topbar-shorts-button-image mobile-dashboard-topbar-button-image ${!hasShopifyStore() ? 'disabled' : ''}`} />,\n onClick: goToShorts,\n isSelected: window.location.pathname === SHORTS_PAGE_URL,\n isDisabled: !hasShopifyStore()\n },\n ...(userDetails?.isAdmin ? [{\n text: t('DASHBOARD_TOPBAR_INFLUENCERS_BUTTON_TEXT'),\n image: <FiUsers className='mobile-dashboard-topbar-influencers-button-image mobile-dashboard-topbar-button-image' />,\n onClick: goToInfluencers,\n isSelected: window.location.pathname === INFLUENCERS_PAGE_URL,\n isDisabled: !hasShopifyStore()\n }] : (hasAnalyticsPermission() ? [{\n text: t('DASHBOARD_TOPBAR_ANALYTICS_BUTTON_TEXT'),\n image: <TbDeviceDesktopAnalytics className='mobile-dashboard-topbar-influencers-button-image mobile-dashboard-topbar-button-image' />,\n onClick: () => goToAnalytics(false),\n isSelected: window.location.pathname === ANALYTICS_PAGE_URL,\n isDisabled: false\n }] : []))\n ]}\n />\n </div>\n <PaydinDrawer\n direction={PAYDIN_DRAWER_DIRECTION.BOTTOM}\n isOpen={optionsDrawerState.isOpen}\n onOpen={optionsDrawerState.onOpen}\n onClose={optionsDrawerState.onClose}\n hasPadding={false}\n topRightBorderRadiusPx={LINKS_PAGE_MOBILE_OPTIONS_DRAWER_TOP_BORDER_RADIUS_PX}\n topLeftBorderRadiusPx={LINKS_PAGE_MOBILE_OPTIONS_DRAWER_TOP_BORDER_RADIUS_PX}\n >\n {optionsDrawerState.children}\n </PaydinDrawer>\n </div>\n }\n <PaydinDialog\n title={t('DASHBOARD_TOPBAR_LOGOUT_CONFIRMATION_DIALOG_TITLE')}\n message={t('DASHBOARD_TOPBAR_LOGOUT_CONFIRMATION_DIALOG_MESSAGE')}\n isDialogOpen={isLogoutConfirmationDialogOpen}\n handleDialogClose={closeDialog}\n leftButtonText={t('DASHBOARD_TOPBAR_LOGOUT_CONFIRMATION_DIALOG_LEFT_BUTTON_TEXT')}\n rightButtonText={t('DASHBOARD_TOPBAR_LOGOUT_CONFIRMATION_DIALOG_RIGHT_BUTTON_TEXT')}\n rightButtonType={PAYDIN_DIALOG_BUTTON_TYPES.SECONDARY}\n onRightButtonClick={logOut}\n closeOnRightClick={false}\n isLeftButtonWithLoader={false}\n />\n <ContentDialog\n isDialogOpen={contentDialogState.isOpen}\n handleDialogClose={closeLinkContentDialog}\n data={contentDialogState.data}\n mode={contentDialogState.mode}\n contentType={contentDialogState.contentType}\n onSaveSuccess={contentDialogState.onSaveSuccess}\n />\n <AddLInkFlow // FIX - check the current page you're on. If you're on the links page, re-fetch the links list.\n onAddLinkFlowDone={() => {\n setTimeout(() => { // gives some time to perform going back in history (inside the corresponding 'View' component) first and then navigating to the appropriate screen\n goToLinks()\n }, 200)\n }}\n trigger={addFlowTrigger}\n setTrigger={setAddFlowTrigger}\n />\n </>\n )\n}","import React from 'react'\nimport './UserMenuListItem.css'\nimport ImageBox from 'components/ImageBox/ImageBox'\nimport MultiLineText from 'components/MultiLineText/MultiLineText'\nimport { useUserDetailsContext } from 'contexts/User'\nimport { PRICING_PLAN_DATA } from 'constants/general.constants'\n\nexport default function UserMenuListItem({\n title = '',\n image = <></>,\n subscriptionPlan = '',\n buttonText = '',\n onButtonClick = () => { }\n}) {\n const {\n userDetails\n } = useUserDetailsContext()\n\n function getTitle() {\n const subscriptedPricingPlanName = Object.keys(PRICING_PLAN_DATA).find(pricingPlanName => PRICING_PLAN_DATA[pricingPlanName].name === subscriptionPlan.toLowerCase())\n const subscriptedPricingPlan = PRICING_PLAN_DATA[subscriptedPricingPlanName]\n\n if (!subscriptedPricingPlan) return ''\n\n return subscriptedPricingPlan.presentedName.toUpperCase()\n }\n\n return (\n <div className='user-menu-list-item'>\n <div className={`user-menu-list-item-data ${!userDetails?.isAdmin ? 'stretch' : ''}`}>\n {image}\n <div className=\"user-menu-list-item-titles-container\">\n {\n title && <MultiLineText\n text={title}\n className='user-menu-list-item-title'\n lines={1}\n oneWord={true}\n />\n }\n {userDetails?.isAdmin && <div className=\"user-menu-list-item-subscription-plan\">{getTitle()}</div>}\n </div>\n </div>\n {\n userDetails?.isAdmin && <div className=\"user-menu-list-item-button-container\">\n <div className=\"user-menu-list-item-button\" onClick={onButtonClick}>{buttonText}</div>\n </div>\n }\n </div>\n )\n}","import React, { useState } from 'react'\nimport './UserMenu.css'\nimport { FaCaretDown } from 'react-icons/fa6'\nimport PaydinMenu from 'components/PaydinMenu/PaydinMenu'\nimport { DASHBOARD_SIDEBAR_USER_MENU_BORDER_RADIUS_PX, DASHBOARD_SIDEBAR_USER_MENU_WIDTH, PAYDIN_MENU_OPENING_DIRECTIONS, PAYDI_MENU_TRANSITION_DURATION_MILLISECONDS, SHOPIFY_LOGO_URL } from 'constants/general.constants'\nimport { useTranslation } from 'react-i18next'\nimport { useAuthContext, useUserDetailsContext } from 'contexts/User'\nimport { ACCOUNT_PAGE_URL, LOGIN_PAGE_URL, PRICING_PLANS_PAGE_URL, PRIVACY_POLICY_PAYLINK_SITE_URL, TERMS_PAYLINK_SITE_URL } from 'constants/routes.constants'\nimport ImageBox from 'components/ImageBox/ImageBox'\nimport { useHistoryContext } from 'contexts/History'\nimport UserMenuListItem from 'components/UserMenuListItem/UserMenuListItem'\nimport MultiLineText from 'components/MultiLineText/MultiLineText'\n\nexport default function UserMenu({\n minimized = false\n}) {\n const { t } = useTranslation()\n const history = useHistoryContext()\n const {\n userDetails\n } = useUserDetailsContext()\n const {\n logout\n } = useAuthContext()\n\n const [userMenuState, setUserMenuState] = useState({\n isOpen: false,\n anchorElement: null,\n onClose: () => { }\n })\n\n function openMenu(e) {\n setUserMenuState({\n isOpen: true,\n anchorElement: e.currentTarget,\n onClose: closeMenu\n })\n }\n\n function closeMenu() {\n setUserMenuState(prev => ({\n ...prev,\n isOpen: false\n }))\n }\n\n function navigateTo(url, redirect = false) {\n if (window.location.pathname !== url) {\n closeMenu()\n setTimeout(() => {\n if (redirect) {\n window.location.href = url\n } else {\n history.push(url)\n }\n }, PAYDI_MENU_TRANSITION_DURATION_MILLISECONDS)\n }\n }\n\n function openTerms() {\n navigateTo(TERMS_PAYLINK_SITE_URL, true)\n }\n\n function openPrivacy() {\n navigateTo(PRIVACY_POLICY_PAYLINK_SITE_URL, true)\n }\n\n function openMyAccount() {\n navigateTo(ACCOUNT_PAGE_URL)\n }\n\n function openPlansPage() {\n navigateTo(PRICING_PLANS_PAGE_URL)\n }\n\n function onLogout() {\n logout()\n history.replace(LOGIN_PAGE_URL)\n }\n\n function getUserImage() {\n return userDetails?.isAdmin ? userDetails?.businessLogo : userDetails?.influencerImageUrl\n }\n\n function getUserUsername() {\n return userDetails?.isAdmin ? userDetails?.username : userDetails?.influencerUsername\n }\n\n return (\n <>\n <div className={`user-strip ${minimized ? 'minimized' : ''}`} onClick={openMenu}>\n <div className={`user-strip-data ${minimized ? 'minimized' : ''}`}>\n {\n getUserImage() ? <ImageBox\n image={getUserImage()}\n className={`user-strip-business-logo ${minimized ? 'minimized' : ''}`}\n showBorder={true}\n roundImage={true}\n /> : <div className={`user-strip-business-logo ${minimized ? 'minimized' : ''}`}>\n <div className=\"user-strip-user-initials\">{getUserUsername() ? getUserUsername()[0] : ''}</div>\n </div>\n }\n {!minimized && <MultiLineText\n text={userDetails?.isAdmin ? userDetails?.username : userDetails?.influencerUsername}\n className='user-strip-username'\n lines={1}\n oneWord={true}\n />}\n </div>\n {!minimized && <FaCaretDown className='user-strip-arrow-image' />}\n </div>\n <PaydinMenu\n widthPx={DASHBOARD_SIDEBAR_USER_MENU_WIDTH}\n isOpen={userMenuState.isOpen}\n anchorElement={userMenuState.anchorElement}\n onClose={userMenuState.onClose}\n direction={PAYDIN_MENU_OPENING_DIRECTIONS.RIGHT}\n borderRadius={DASHBOARD_SIDEBAR_USER_MENU_BORDER_RADIUS_PX}\n >\n <div className=\"user-menu-container\">\n <div className=\"user-menu-section\">\n <div className=\"user-menu-section-title\">{userDetails?.isAdmin ? t('USER_MENU_ACCOUNTS_SECTION_TITLE') : t('USER_INFUENCER_MENU_ACCOUNTS_SECTION_TITLE')}</div>\n <div className=\"user-menu-section-list\">\n <UserMenuListItem\n title={userDetails?.isAdmin ? userDetails?.businessName : userDetails?.username}\n image={\n userDetails?.isAdmin ? <ImageBox\n className=\"user-menu-section-list-item-image-container\"\n imageClassName=\"user-menu-section-list-item-image\"\n image={SHOPIFY_LOGO_URL}\n showBorder={true}\n showImageBorderRadius={true}\n borderRadiusPx={7}\n /> : (userDetails?.businessLogo && <ImageBox\n className=\"user-menu-section-list-item-image-container merchant-logo\"\n imageClassName=\"user-menu-section-list-item-image\"\n image={userDetails?.businessLogo}\n borderRadiusPx={7}\n />)\n }\n subscriptionPlan={userDetails?.subscriptionPlan}\n buttonText={t('USER_MENU_ACCOUNTS_LIST_ITEM_UPGRADE_BUTTON_TEXT')}\n onButtonClick={openPlansPage}\n />\n </div>\n </div>\n <div className=\"separator-line user-menu-separator-line\"></div>\n <div className=\"user-menu-buttons-section\">\n <div className=\"user-menu-privacy-terms-container\">\n <div className=\"user-menu-privacy-terms-button\" onClick={openPrivacy}>{t('USER_MENU_PRIVACY_BUTTON_TEXT')}</div>\n <div className=\"user-menu-privacy-terms-button\" onClick={openTerms}>{t('USER_MENU_TERMS_BUTTON_TEXT')}</div>\n </div>\n <div className=\"user-menu-buttons-container\">\n <div className=\"user-menu-button\" onClick={openMyAccount}>{t('USER_MENU_ACCOUNT_BUTTON_TEXT')}</div>\n <div className=\"user-menu-button\" onClick={onLogout}>{t('USER_MENU_LOGOUT_BUTTON_TEXT')}</div>\n </div>\n </div>\n </div>\n </PaydinMenu>\n </>\n )\n}","import React from 'react'\n\nexport default function TrendsImage(props) {\n return (\n <svg \n {...props} \n clipRule=\"evenodd\" \n fillRule=\"evenodd\" \n height=\"512\" \n strokeLinejoin=\"round\" \n strokeMiterlimit=\"2\" \n viewBox=\"0 0 48 48\" \n width=\"512\" \n >\n <g transform=\"translate(-336 -144)\">\n <g id=\"Icon\">\n <path d=\"m366.305 179.962 9.867 9.866c1.561 1.561 4.095 1.561 5.656 0s1.561-4.095 0-5.656l-9.866-9.867c1.922-2.969 3.038-6.508 3.038-10.305 0-3.716-1.069-7.184-2.916-10.114-.295-.467-.913-.607-1.38-.313-.467.295-.607.913-.312 1.38 1.652 2.621 2.608 5.723 2.608 9.047 0 9.383-7.617 17-17 17s-17-7.617-17-17 7.617-17 17-17c3.324 0 6.426.956 9.047 2.608.467.295 1.085.155 1.38-.312.294-.467.154-1.085-.313-1.38-2.93-1.847-6.398-2.916-10.114-2.916-10.486 0-19 8.514-19 19s8.514 19 19 19c3.797 0 7.336-1.116 10.305-3.038zm7.816-.669-2.828 2.828 6.293 6.293c.78.781 2.048.781 2.828 0 .781-.78.781-2.048 0-2.828zm-1.414-1.414-1.935-1.935c-.841 1.039-1.789 1.987-2.828 2.828l1.935 1.935z\"/>\n <path d=\"m371.586 147-17.586 17.586s-3.293-3.293-3.293-3.293c-.39-.391-1.024-.391-1.414 0l-5.898 5.898c-.258-1.022-.395-2.09-.395-3.191 0-7.175 5.825-13 13-13 2.237 0 4.344.566 6.182 1.563.485.263 1.093.083 1.356-.402s.083-1.093-.402-1.356c-2.122-1.151-4.553-1.805-7.136-1.805-8.279 0-15 6.721-15 15s6.721 15 15 15 15-6.721 15-15c0-2.583-.654-5.014-1.805-7.136-.263-.485-.871-.665-1.356-.402s-.665.871-.402 1.356c.997 1.838 1.563 3.945 1.563 6.182 0 7.175-5.825 13-13 13-5.291 0-9.849-3.168-11.877-7.709l5.877-5.877s3.293 3.293 3.293 3.293c.39.391 1.024.391 1.414 0l18.293-18.293v3.586c0 .552.448 1 1 1s1-.448 1-1v-6c0-.552-.448-1-1-1h-6c-.552 0-1 .448-1 1s.448 1 1 1z\"/>\n </g>\n </g>\n </svg>\n )\n}","import React, { useState } from 'react'\nimport './DashboardSidebar.css'\nimport ImageBox from 'components/ImageBox/ImageBox'\nimport { DASHBOARD_SIDEBAR_MINIMIZED_WIDTH_PX, DASHBOARD_SIDEBAR_WIDTH_PX, SHOPEAKS_LOGO_URL, SHOPEAKS_SMALL_LOGO_URL } from 'constants/general.constants'\nimport HomePageImage from 'embeddedImages/HomePageImage'\nimport { styled } from '@mui/material/styles'\nimport {\n ANALYTICS_PAGE_URL,\n APPEARANCE_PAGE_URL,\n HOME_PAGE_URL,\n INFLUENCERS_PAGE_URL,\n LINKS_PAGE_URL,\n MAGIC_STORE_PAGE_URL,\n MULTILINKS_PAGE_URL,\n SETTINGS_PAGE_URL,\n SHOPBOARD_PAGE_URL,\n SHOPIFY_HELP_PAGE_URL,\n SHORTS_PAGE_URL,\n TRENDS_PAGE_URL\n} from 'constants/routes.constants'\nimport { useGeneralDataContext, useUserDetailsContext } from 'contexts/User'\nimport { useTranslation } from 'react-i18next'\nimport { BiLink } from 'react-icons/bi'\nimport ShortsImage from 'embeddedImages/ShortsImage'\nimport { FiUsers } from 'react-icons/fi'\nimport { RiPaletteLine } from 'react-icons/ri'\nimport { TbDeviceDesktopAnalytics, TbSettings2 } from 'react-icons/tb'\nimport { useHistoryContext } from 'contexts/History'\nimport MuiDrawer from '@mui/material/Drawer'\nimport UserMenu from 'components/UserMenu/UserMenu'\nimport { SlQuestion } from 'react-icons/sl'\nimport PaydinDialog from 'dialogs/PaydinDialog/PaydinDialog'\nimport { LiaShoppingBagSolid } from 'react-icons/lia'\nimport MagicStoreImage from 'embeddedImages/MagicStoreImage'\nimport { FaRegCalendarCheck } from \"react-icons/fa\";\nimport MultilinksImage from 'embeddedImages/MultilinksImage'\nimport ShopboardImage from 'embeddedImages/ShopboardImage'\nimport InfluencersImage from 'embeddedImages/InfluencersImage'\nimport TrendsImage from 'embeddedImages/TrendsImage'\n\n\nexport default function DashboardSidebar({\n open\n}) {\n const { t } = useTranslation()\n const history = useHistoryContext()\n const {\n userDetails,\n hasShopifyStore,\n isEditing,\n endEditing,\n isBusinessFeatureEnabled,\n isFreeUser\n } = useUserDetailsContext()\n\n const {\n openFreeTrialDialog,\n } = useGeneralDataContext()\n\n const [dialogState, setDialogState] = useState({\n isOpen: false,\n handleDialogClose: closeDialog,\n title: '',\n message: '',\n leftButtonText: '',\n rightButtonText: '',\n rightButtonClickHandler: () => { }\n })\n\n function closeDialog() {\n setDialogState(prev => ({\n ...prev,\n isOpen: false\n }))\n }\n\n function showDiscardChangesDialog(callback = () => { }) {\n setDialogState(prev => ({\n ...prev,\n isOpen: true,\n title: t('EDIT_INFLUENCER_SECTION_DISCARD_CHANGES_DIALOG_TITLE'),\n message: t('EDIT_INFLUENCER_SECTION_DISCARD_CHANGES_DIALOG_MESSAGE'),\n leftButtonText: t('EDIT_INFLUENCER_SECTION_DISCARD_CHANGES_DIALOG_LEFT_BUTTON_TEXT'),\n rightButtonText: t('EDIT_INFLUENCER_SECTION_DISCARD_CHANGES_DIALOG_RIGHT_BUTTON_TEXT'),\n rightButtonClickHandler: () => {\n history.goBack()\n setTimeout(() => {\n callback()\n }, 100)\n }\n }))\n }\n\n function goToHome() {\n navigateTo(HOME_PAGE_URL)\n }\n\n function goToShopboard() {\n navigateTo(SHOPBOARD_PAGE_URL)\n }\n\n function goToMultilinks() {\n navigateTo(MULTILINKS_PAGE_URL)\n }\n\n function goToMagicStore() {\n navigateTo(MAGIC_STORE_PAGE_URL)\n }\n\n function goToLinks() {\n navigateTo(LINKS_PAGE_URL)\n }\n\n function goToShorts() {\n navigateTo(SHORTS_PAGE_URL)\n }\n\n function goToAppearance() {\n navigateTo(APPEARANCE_PAGE_URL)\n }\n\n function goToAnalytics() {\n navigateTo(ANALYTICS_PAGE_URL)\n }\n\n function goToTrends() {\n if (isBusinessFeatureEnabled()) {\n navigateTo(TRENDS_PAGE_URL)\n } else {\n openFreeTrialDialog(true, t('TRENDS_PAGE_UPGRADE_TO_GET_ACCESS_TITLE'), t('TRENDS_PAGE_UPGRADE_TO_GET_ACCESS_SUBTITLE'))\n }\n }\n\n function goToInfluencers() {\n navigateTo(INFLUENCERS_PAGE_URL)\n }\n\n function openSettingsPage() {\n navigateTo(SETTINGS_PAGE_URL)\n }\n\n function openHelpPage() {\n navigateTo(SHOPIFY_HELP_PAGE_URL)\n }\n\n function navigateTo(url) {\n if (window.location.pathname !== url) {\n if (isEditing()) {\n showDiscardChangesDialog(() => {\n endEditing()\n history.push(url)\n })\n } else {\n history.push(url)\n }\n }\n }\n\n function hasAnalyticsPermission() {\n return userDetails?.permissions?.clicksEnabled ||\n userDetails?.permissions?.salesEnabled ||\n userDetails?.permissions?.revenueEnabled ||\n userDetails?.permissions?.commissionEnabled\n }\n\n const openedMixin = (theme) => ({\n width: DASHBOARD_SIDEBAR_WIDTH_PX,\n transition: theme.transitions.create('width', {\n easing: theme.transitions.easing.sharp,\n duration: theme.transitions.duration.enteringScreen,\n }),\n overflowX: 'hidden',\n })\n\n const closedMixin = (theme) => ({\n transition: theme.transitions.create('width', {\n easing: theme.transitions.easing.sharp,\n duration: theme.transitions.duration.leavingScreen,\n }),\n overflowX: 'hidden',\n width: `${DASHBOARD_SIDEBAR_MINIMIZED_WIDTH_PX}px !important`,\n [theme.breakpoints.up('sm')]: {\n width: `calc(${theme.spacing(8)} + 1px)`,\n },\n })\n\n const Drawer = styled(MuiDrawer, { shouldForwardProp: (prop) => prop !== 'open' })(\n ({ theme, open }) => ({\n width: DASHBOARD_SIDEBAR_WIDTH_PX,\n flexShrink: 0,\n whiteSpace: 'nowrap',\n boxSizing: 'border-box',\n ...(open && {\n ...openedMixin(theme),\n '& .MuiDrawer-paper': openedMixin(theme),\n }),\n ...(!open && {\n ...closedMixin(theme),\n '& .MuiDrawer-paper': closedMixin(theme),\n }),\n }),\n )\n\n return (\n <>\n <Drawer\n variant=\"permanent\"\n anchor=\"left\"\n open={open}\n >\n <div className=\"dashboard-sidebar-container\">\n {open ? <ImageBox\n className='dashboard-sidebar-image'\n image={SHOPEAKS_LOGO_URL}\n /> : <ImageBox\n className='dashboard-sidebar-image sidebar-closed'\n image={SHOPEAKS_SMALL_LOGO_URL}\n />}\n <UserMenu minimized={!open} />\n <div className=\"dashboard-sidebar-content\">\n <div className=\"dashboard-sidebar-buttons-container\">\n <div onClick={goToHome} className={`dashboard-sidebar-button dashboard-sidebar-custom-button ${open ? '' : 'sidebar-closed'} ${window.location.pathname.startsWith(HOME_PAGE_URL) ? 'selected' : ''}`}>\n <HomePageImage className='dashboard-sidebar-button-image' />\n <div className={`dashboard-sidebar-button-label ${open ? '' : 'sidebar-closed'}`}>{t('DASHBOARD_TOPBAR_HOME_BUTTON_TEXT')}</div>\n </div>\n {(userDetails?.isAdmin) &&<div className=\"dashboard-sidebar-horizontal-line\"></div>}\n {!isFreeUser() && userDetails?.settings?.productVisionConfigurations?.isEnabled && <div onClick={goToMagicStore} className={`dashboard-sidebar-color-button dashboard-sidebar-button dashboard-sidebar-custom-button ${open ? '' : 'sidebar-closed'} ${window.location.pathname.startsWith(MAGIC_STORE_PAGE_URL) ? 'selected' : ''}`}>\n <MagicStoreImage className='dashboard-sidebar-grad-button-image dashboard-sidebar-button-image' />\n <div className={`dashboard-sidebar-grad-button-label dashboard-sidebar-button-label ${open ? '' : 'sidebar-closed'}`}>{t('DASHBOARD_TOPBAR_MAGIC_STORE_BUTTON_TEXT')}</div>\n </div>}\n <div className='dashboard-sidebar-color-button-with-line-container'>\n <div onClick={goToLinks} className={`dashboard-sidebar-color-button dashboard-sidebar-button ${open ? '' : 'sidebar-closed'} ${!hasShopifyStore() ? 'disabled' : ''} ${window.location.pathname.startsWith(LINKS_PAGE_URL) ? 'selected' : ''}`}>\n <BiLink className='dashboard-sidebar-button-image' />\n <div className={` dashboard-sidebar-color-button-label dashboard-sidebar-button-label ${open ? '' : 'sidebar-closed'}`}>{t('DASHBOARD_SIDEBAR_LINKS_BUTTON_TEXT')}</div>\n </div>\n </div>\n <div className='dashboard-sidebar-color-button-with-line-container'>\n <div onClick={goToShorts} className={`dashboard-sidebar-color-button dashboard-sidebar-shorts-button dashboard-sidebar-button dashboard-sidebar-custom-button ${open ? '' : 'sidebar-closed'} ${!hasShopifyStore() ? 'disabled' : ''} ${window.location.pathname.startsWith(SHORTS_PAGE_URL) ? 'selected' : ''}`}>\n <ShortsImage className={`dashboard-sidebar-shorts-button-image dashboard-sidebar-button-image ${!hasShopifyStore() ? 'disabled' : ''}`} />\n <div className={`dashboard-sidebar-color-button-label dashboard-sidebar-button-label ${open ? '' : 'sidebar-closed'}`}>{t('DASHBOARD_TOPBAR_SHORTS_BUTTON_TEXT')}</div>\n </div>\n </div>\n {\n userDetails?.isAdmin && <div className='dashboard-sidebar-color-button-with-line-container'>\n <div onClick={goToMultilinks} className={`dashboard-sidebar-color-button dashboard-sidebar-button dashboard-sidebar-custom-button ${open ? '' : 'sidebar-closed'} ${!hasShopifyStore() ? 'disabled' : ''} ${window.location.pathname.startsWith(MULTILINKS_PAGE_URL) ? 'selected' : ''}`}>\n <MultilinksImage className={`dashboard-sidebar-color-button-image dashboard-sidebar-button-image ${!hasShopifyStore() ? 'disabled' : ''}`} />\n <div className={`dashboard-sidebar-color-button-label dashboard-sidebar-button-label ${open ? '' : 'sidebar-closed'}`}>{t('DASHBOARD_TOPBAR_MULTILINKS_BUTTON_TEXT')}</div>\n </div>\n </div>\n }\n {\n userDetails?.isAdmin && <div className='dashboard-sidebar-color-button-with-line-container'>\n <div onClick={goToShopboard} className={`dashboard-sidebar-color-button dashboard-sidebar-button dashboard-sidebar-custom-button ${open ? '' : 'sidebar-closed'} ${!hasShopifyStore() ? 'disabled' : ''} ${window.location.pathname.startsWith(SHOPBOARD_PAGE_URL) ? 'selected' : ''}`}>\n <ShopboardImage className={`dashboard-sidebar-color-button-image dashboard-sidebar-button-image ${!hasShopifyStore() ? 'disabled' : ''}`} />\n <div className={`dashboard-sidebar-color-button-label dashboard-sidebar-button-label ${open ? '' : 'sidebar-closed'}`}>{t('DASHBOARD_TOPBAR_SHOPBOARD_BUTTON_TEXT')}</div>\n </div>\n </div>\n }\n {\n userDetails?.isAdmin && <div className='dashboard-sidebar-color-button-with-line-container'>\n <div onClick={goToInfluencers} className={`dashboard-sidebar-color-button dashboard-sidebar-button ${open ? '' : 'sidebar-closed'} ${!hasShopifyStore() ? 'disabled' : ''} ${window.location.pathname.startsWith(INFLUENCERS_PAGE_URL) ? 'selected' : ''}`}>\n <InfluencersImage className='dashboard-sidebar-color-button-image dashboard-sidebar-button-image' />\n <div className={`dashboard-sidebar-color-button-label dashboard-sidebar-button-label ${open ? '' : 'sidebar-closed'}`}>{t('DASHBOARD_TOPBAR_INFLUENCERS_BUTTON_TEXT')}</div>\n </div>\n </div>\n }\n {(userDetails?.isAdmin) &&<div className=\"dashboard-sidebar-horizontal-line\"></div>}\n {\n (userDetails?.isAdmin) && <div onClick={() => goToTrends(false)} className={`dashboard-sidebar-trends-button dashboard-sidebar-button dashboard-sidebar-custom-button ${open ? '' : 'sidebar-closed'} ${!hasShopifyStore() ? 'disabled' : ''} ${window.location.pathname.startsWith(TRENDS_PAGE_URL) ? 'selected' : ''}`}>\n <TrendsImage className={`dashboard-sidebar-trends-button-image dashboard-sidebar-button-image ${!hasShopifyStore() ? 'disabled' : ''}`} />\n <div className={`dashboard-sidebar-button-label ${open ? '' : 'sidebar-closed'}`}>{t('DASHBOARD_TOPBAR_TRENDS_BUTTON_TEXT')}</div>\n </div>\n }\n {\n (userDetails?.isAdmin || hasAnalyticsPermission()) && <div onClick={() => goToAnalytics(false)} className={`dashboard-sidebar-analytics-button dashboard-sidebar-button ${open ? '' : 'sidebar-closed'} ${!hasShopifyStore() ? 'disabled' : ''} ${window.location.pathname.startsWith(ANALYTICS_PAGE_URL) ? 'selected' : ''}`}>\n <TbDeviceDesktopAnalytics className='dashboard-sidebar-analytics-button-image dashboard-sidebar-button-image' />\n <div className={`dashboard-sidebar-button-label ${open ? '' : 'sidebar-closed'}`}>{t('DASHBOARD_TOPBAR_ANALYTICS_BUTTON_TEXT')}</div>\n </div>\n }\n </div>\n <div className=\"dashboard-sidebar-buttons-container\">\n {\n userDetails?.isAdmin && <div onClick={() => window.open('https://calendly.com/shopeaks-support/15min','_blank')} className={`dashboard-sidebar-button dashboard-sidebar-button-link ${open ? '' : 'sidebar-closed'} ${!hasShopifyStore() ? 'disabled' : ''} ${window.location.pathname.startsWith(SETTINGS_PAGE_URL) ? 'selected' : ''}`}>\n <FaRegCalendarCheck className='dashboard-sidebar-button-image link' />\n <div className={`dashboard-sidebar-button-label ${open ? '' : 'sidebar-closed'} link`} >{t(\"DASHBOARD_TOPBAR_BOOK_AN_EXPERT_BUTTON_TEXT\")}</div>\n </div>\n }\n {\n userDetails?.isAdmin && <div onClick={goToAppearance} className={`dashboard-sidebar-button ${open ? '' : 'sidebar-closed'} ${!hasShopifyStore() ? 'disabled' : ''} ${window.location.pathname.startsWith(APPEARANCE_PAGE_URL) ? 'selected' : ''}`}>\n <RiPaletteLine className='dashboard-sidebar-button-image' />\n <div className={`dashboard-sidebar-button-label ${open ? '' : 'sidebar-closed'}`}>{t('DASHBOARD_TOPBAR_APPEARANCE_BUTTON_TEXT')}</div>\n </div>\n }\n {\n userDetails?.isAdmin && <div onClick={openSettingsPage} className={`dashboard-sidebar-settings-button dashboard-sidebar-button ${open ? '' : 'sidebar-closed'} ${!hasShopifyStore() ? 'disabled' : ''} ${window.location.pathname.startsWith(SETTINGS_PAGE_URL) ? 'selected' : ''}`}>\n <TbSettings2 className='dashboard-sidebar-settings-button-image dashboard-sidebar-button-image' />\n <div className={`dashboard-sidebar-button-label ${open ? '' : 'sidebar-closed'}`}>{t('DASHBOARD_TOPBAR_SETTINGS_BUTTON_TEXT')}</div>\n </div>\n }\n <div onClick={openHelpPage} className={`dashboard-sidebar-button ${open ? '' : 'sidebar-closed'} ${!hasShopifyStore() ? 'disabled' : ''} ${window.location.pathname.startsWith(SHOPIFY_HELP_PAGE_URL) ? 'selected' : ''}`}>\n <SlQuestion className={`dashboard-sidebar-button-image ${!hasShopifyStore() ? 'disabled' : ''}`} />\n <div className={`dashboard-sidebar-button-label ${open ? '' : 'sidebar-closed'}`}>{t('DASHBOARD_SIDEBAR_BUTTON_HELP')}</div>\n </div>\n </div>\n </div>\n </div>\n </Drawer>\n <PaydinDialog\n isDialogOpen={dialogState.isOpen}\n handleDialogClose={dialogState.handleDialogClose}\n title={dialogState.title}\n message={dialogState.message}\n closeOnRightClick={false}\n leftButtonText={dialogState.leftButtonText}\n rightButtonText={dialogState.rightButtonText}\n isLeftButtonWithLoader={false}\n isRightButtonWithLoader={false}\n onRightButtonClick={dialogState.rightButtonClickHandler}\n />\n </>\n )\n}","import React, { useEffect, useState } from \"react\"\nimport './DashboardLayout.css'\nimport DashboardTopBar from \"components/DashboardTopBar/DashboardTopBar\"\nimport AuthLayout from \"layouts/RequiredAuthLayout\"\nimport { isMobile } from 'utils/deviceUtils'\nimport { DASHBOARD_LAYOUT_PAGES_WITH_DASHBOARD_TOPBAR, DASHBOARD_SIDEBAR_MINIMIZED_WIDTH_PX, DASHBOARD_SIDEBAR_WIDTH_PX, NO_BOTTOM_PADDING_PAGES } from \"constants/general.constants\"\nimport { ADMIN_PAGES_URL_PREFIX, INFLUENCERS_URL_PREFIX, LINKS_URL_PREFIX, SHOPBOARD_PAGE_URL, SHORTS_URL_PREFIX } from \"constants/routes.constants\"\nimport DashboardSidebar from \"components/DashboardSidebar/DashboardSidebar\"\nimport { useUserDetailsContext } from \"contexts/User\"\n\n/**\n * Represents a layout for all main dashboard screens.\n */\nexport default function DashboardLayout({ children }) {\n\n const {\n setSidebarExpanded\n } = useUserDetailsContext()\n\n const [open, setOpen] = useState(window.innerWidth >= 1200)\n\n useEffect(() => {\n const rootElement = document.querySelector('#root')\n\n const resizeObserver = new ResizeObserver(checkWindowSize)\n resizeObserver.observe(rootElement)\n\n return () => resizeObserver.disconnect()\n }, [])\n\n useEffect(() => {\n setSidebarExpanded(open)\n }, [open])\n\n function checkWindowSize() {\n setOpen(window.innerWidth >= 1200)\n }\n\n function isBottomPaddingPage() {\n if (window.location.pathname.startsWith(ADMIN_PAGES_URL_PREFIX + SHORTS_URL_PREFIX) && window.location.pathname.endsWith('/edit')) { // currently on edit short page\n return false\n }\n\n if (window.location.pathname.startsWith(ADMIN_PAGES_URL_PREFIX + LINKS_URL_PREFIX) && window.location.pathname.endsWith('/edit')) { // currently on edit link page\n return false\n }\n\n if (window.location.pathname.startsWith(INFLUENCERS_URL_PREFIX) && window.location.pathname.endsWith('/preview')) { // currently on preview influencer page\n return false\n }\n\n if (window.location.pathname.startsWith(ADMIN_PAGES_URL_PREFIX + SHORTS_URL_PREFIX) && window.location.pathname.endsWith('/preview')) { // currently on preview short page\n return !isMobile\n }\n\n return !NO_BOTTOM_PADDING_PAGES.includes(window.location.pathname)\n }\n\n function isDashboardTopbarShown() {\n return isMobile && DASHBOARD_LAYOUT_PAGES_WITH_DASHBOARD_TOPBAR.includes(window.location.pathname)\n }\n\n function getBackgroundColor() {\n if (window.location.pathname === SHOPBOARD_PAGE_URL) {\n return '#f6f6f6'\n }\n }\n\n return (\n <div className={isMobile ? 'mobile-dashboard-layout-container' : 'dashboard-layout-container'} style={{ width: isMobile ? '100%' : `calc(100% - ${open ? DASHBOARD_SIDEBAR_WIDTH_PX : DASHBOARD_SIDEBAR_MINIMIZED_WIDTH_PX}px)`, paddingTop: isDashboardTopbarShown() ? (isMobile ? `var(--mobile-dashboard-topbar-height)` : `var(--dashboard-topbar-height)`) : '0px', backgroundColor: !isMobile && getBackgroundColor() }}>\n {\n isMobile ? (\n DASHBOARD_LAYOUT_PAGES_WITH_DASHBOARD_TOPBAR.includes(window.location.pathname) && <DashboardTopBar />\n ) : <DashboardSidebar open={open} />\n }\n <AuthLayout>\n <div className={isMobile ? \"mobile-dashboard-layout-content\" : \"dashboard-layout-content\"} style={{ paddingBottom: isBottomPaddingPage() ? '20dvh' : 0 }}>\n {children}\n </div>\n </AuthLayout>\n </div>\n )\n}","import React, { useState } from 'react'\nimport './PricingPlan.css'\nimport { formatNumber } from 'utils/utils'\nimport { useAuthContext, useUserDetailsContext } from 'contexts/User'\nimport LoaderButton from 'components/LoaderButton/LoaderButton'\nimport { useTranslation } from 'react-i18next'\nimport { CONTACT_US_PLANS, NUMBER_TYPES, PRICING_PLANS_ENTERPRISE_PLAN_CONTACT_US_EMAIL, PRICING_PLAN_DATA, UNAVAILABLE_PLANS } from 'constants/general.constants'\nimport { CancelPlanAPI, UpgradePlanAPI } from 'api/store/store'\nimport { useHistoryContext } from 'contexts/History'\nimport { GiConfirmed } from 'react-icons/gi'\nimport { HOME_PAGE_URL } from 'constants/routes.constants'\n\n/**\n * Represents a pricing plan.\n * @param {string} name - The name of the pricing plan\n * @param {string} color - The color of this plan, shown as a colored bar on the top\n * @param {number} price - The price of this plan\n * @param {string} pricingPeriod - The subscription period of this plan, e.g. every week, month, year etc.\n * @param {array} features - The features of this plan\n * @param {string} description - The description of this plan\n * @param {number} ordinal - The ordinal number of this plan, preserve an order between pricing plans\n * @param {number} subtitle - The ordinal level of this plan\n */\nexport default function PricingPlan({\n name,\n color,\n price,\n pricingPeriod,\n features,\n description,\n ordinal,\n subtitle\n}) {\n const { t } = useTranslation()\n const {\n userDetails,\n isFreeUser,\n isFreeUserAndTrialEnded,\n } = useUserDetailsContext()\n const history = useHistoryContext()\n const { verify } = useAuthContext()\n\n const [isChangingPlan, setIsChangingPlan] = useState(false)\n\n function getButtonText() {\n const subscriptedPricingPlanName = Object.keys(PRICING_PLAN_DATA).find(pricingPlanName => PRICING_PLAN_DATA[pricingPlanName].name === userDetails?.subscriptionPlan.toLowerCase())\n const subscriptedPricingPlan = PRICING_PLAN_DATA[subscriptedPricingPlanName]\n\n if (ordinal < subscriptedPricingPlan.ordinal) {\n return t('PRICING_PLANS_PAGE_DOWNGRADE_BUTTON_TEXT')\n } else {\n return isFreeUser() && !isFreeUserAndTrialEnded() ? t('PRICING_PLANS_PAGE_UPGRADE_BUTTON_FREE_USER_TEXT') : t('PRICING_PLANS_PAGE_UPGRADE_BUTTON_TEXT')\n }\n }\n\n function getTitle() {\n const subscriptedPricingPlanName = Object.keys(PRICING_PLAN_DATA).find(pricingPlanName => PRICING_PLAN_DATA[pricingPlanName].name === name)\n const subscriptedPricingPlan = PRICING_PLAN_DATA[subscriptedPricingPlanName]\n\n return subscriptedPricingPlan.presentedName\n }\n\n function getButtonClickHandler() {\n if (name === PRICING_PLAN_DATA.FREE.name)\n return cancel\n return upgrade\n }\n\n function upgrade() {\n setIsChangingPlan(true)\n UpgradePlanAPI(name.toUpperCase(), userDetails?.businessId)\n .then(url => {\n window.location.href = url\n })\n .catch(error => {\n console.log(error)\n setIsChangingPlan(false)\n })\n }\n\n function cancel() {\n setIsChangingPlan(true)\n CancelPlanAPI(userDetails?.businessId)\n .then(() => {\n // TODO - replace with updating plan to FREE without verify\n verify(data => {\n history.push(HOME_PAGE_URL)\n }, error => {\n console.log(error)\n history.push(HOME_PAGE_URL)\n })\n })\n .catch(error => {\n console.log(error)\n setIsChangingPlan(false)\n })\n }\n\n function renderPlanButton() {\n if (userDetails?.isAuthenticated && userDetails?.isAdmin) {\n if (name.toUpperCase() === userDetails?.subscriptionPlan) {\n return <div className='pricing-plan-active-plan-label'>{t('PRICING_PLANS_PAGE_ACTIVE_PLAN_LABEL')}</div>\n } else if (UNAVAILABLE_PLANS.includes(name)) {\n return <div className='pricing-plan-unavailable-plan-label'>{t('PRICING_PLANS_PAGE_UNAVAILABLE_PLAN_LABEL')}</div>\n } else if (CONTACT_US_PLANS.includes(name)) {\n return <a href={PRICING_PLANS_ENTERPRISE_PLAN_CONTACT_US_EMAIL} className='pricing-plan-contact-us-plan-label'>{t('PRICING_PLANS_PAGE_CONTACT_US_BUTTON_TEXT')}</a>\n } else {\n return <LoaderButton\n buttonText={getButtonText()}\n className='pricing-plan-bottom-button'\n isLoading={isChangingPlan}\n onClick={getButtonClickHandler()}\n />\n }\n }\n\n return <></>\n }\n\n return (\n <div className='pricing-plan-container'>\n <div className=\"pricing-plan-color-bar\" style={{ backgroundColor: color }}></div>\n <div className=\"pricing-plan-content\">\n <div className=\"pricing-plan-name\">{getTitle(name)}</div>\n {\n subtitle ? <div className='pricing-plan-subtitle' style={{ color }}>{subtitle}</div> : <div className=\"pricing-plan-pricing-method\" style={{ visibility: price ? 'visible' : 'hidden' }}>\n <div className=\"pricing-plan-price\" style={{ color }}>${formatNumber(price, NUMBER_TYPES.PRICE)}</div>\n <div className=\"pricing-plan-price-separator\">/</div>\n <div className=\"pricing-plan-pricing-period\">{pricingPeriod}</div>\n </div>\n }\n <div className=\"pricing-plan-separator\"></div>\n {\n features.map(feature => <div key={feature?.id} className='pricing-plan-feature-row'>\n <GiConfirmed className='pricing-plan-feature-v' />\n <div className='pricing-plan-feature'>{feature?.content}</div>\n </div>\n )\n }\n <div className=\"pricing-plan-bottom-section\">\n {\n description && <div className='pricing-plan-description'>{description}</div>\n }\n {renderPlanButton()}\n </div>\n </div>\n </div>\n )\n}","import React from 'react'\nimport './PricingPlansPage.css'\nimport { useTranslation } from 'react-i18next'\nimport PricingPlan from 'components/PricingPlan/PricingPlan'\nimport { PRICING_PLAN_DATA } from 'constants/general.constants'\nimport { isMobile } from 'utils/deviceUtils'\n\nexport default function PricingPlansPage() {\n const { t } = useTranslation()\n\n return (\n <div className='pricing-plans-page-container'>\n <div className=\"pricing-plans-page-content\">\n {!isMobile && <div className=\"pricing-plans-page-title\">{t('PRICING_PLANS_PAGE_TITLE')}</div>}\n <div className=\"pricing-plans-page-plans-container\">\n {/* <PricingPlan\n name={PRICING_PLAN_DATA.FREE.name}\n color={PRICING_PLAN_DATA.FREE.color}\n price={PRICING_PLAN_DATA.FREE.price}\n pricingPeriod={PRICING_PLAN_DATA.FREE.pricingPeriod}\n features={PRICING_PLAN_DATA.FREE.features}\n description={PRICING_PLAN_DATA.FREE.description}\n ordinal={PRICING_PLAN_DATA.FREE.ordinal}\n /> */}\n <PricingPlan\n name={PRICING_PLAN_DATA.STARTER.name}\n color={PRICING_PLAN_DATA.STARTER.color}\n price={PRICING_PLAN_DATA.STARTER.price}\n pricingPeriod={PRICING_PLAN_DATA.STARTER.pricingPeriod}\n features={PRICING_PLAN_DATA.STARTER.features}\n description={PRICING_PLAN_DATA.STARTER.description}\n ordinal={PRICING_PLAN_DATA.STARTER.ordinal}\n />\n <PricingPlan\n name={PRICING_PLAN_DATA.BUSINESS.name}\n color={PRICING_PLAN_DATA.BUSINESS.color}\n price={PRICING_PLAN_DATA.BUSINESS.price}\n pricingPeriod={PRICING_PLAN_DATA.BUSINESS.pricingPeriod}\n features={PRICING_PLAN_DATA.BUSINESS.features}\n description={PRICING_PLAN_DATA.BUSINESS.description}\n ordinal={PRICING_PLAN_DATA.BUSINESS.ordinal}\n />\n <PricingPlan\n name={PRICING_PLAN_DATA.PRO.name}\n color={PRICING_PLAN_DATA.PRO.color}\n price={PRICING_PLAN_DATA.PRO.price}\n pricingPeriod={PRICING_PLAN_DATA.PRO.pricingPeriod}\n features={PRICING_PLAN_DATA.PRO.features}\n description={PRICING_PLAN_DATA.PRO.description}\n ordinal={PRICING_PLAN_DATA.PRO.ordinal}\n />\n <PricingPlan\n name={PRICING_PLAN_DATA.ENTERPRISE.name}\n color={PRICING_PLAN_DATA.ENTERPRISE.color}\n price={PRICING_PLAN_DATA.ENTERPRISE.price}\n pricingPeriod={PRICING_PLAN_DATA.ENTERPRISE.pricingPeriod}\n features={PRICING_PLAN_DATA.ENTERPRISE.features}\n description={PRICING_PLAN_DATA.ENTERPRISE.description}\n ordinal={PRICING_PLAN_DATA.ENTERPRISE.ordinal}\n subtitle={PRICING_PLAN_DATA.ENTERPRISE.subtitle}\n />\n </div>\n </div>\n </div>\n )\n}","import React from 'react'\nimport './BaseTopBar.css'\nimport ImageBox from 'components/ImageBox/ImageBox'\nimport { SHOPEAKS_LOGO_URL } from 'constants/general.constants'\nimport { isMobile } from 'utils/deviceUtils'\n\n\n/**\n * Represents a base topbar with a logo.\n */\nexport default function BaseTopBar() {\n return (\n <div className={`${isMobile ? 'mobile-base-topbar-container' : 'base-topbar-container'}`}>\n <ImageBox\n image={SHOPEAKS_LOGO_URL}\n className='base-topbar-logo-image'\n />\n </div>\n )\n}","import React from 'react'\nimport './BaseLayout.css'\nimport GeneralLayout from 'layouts/GeneralLayout/GeneralLayout'\nimport BaseTopBar from 'components/BaseTopBar/BaseTopBar'\nimport { ACCOUNT_VERIFICATION_PAGE_URL } from 'constants/routes.constants'\nimport { NO_BOTTOM_PADDING_PAGES } from 'constants/general.constants'\n\n/**\n * Represents a layout for all authentication pages.\n */\nexport default function BaseLayout({ children }) {\n\n function getLayoutClassName() {\n if (window.location.pathname.startsWith(ACCOUNT_VERIFICATION_PAGE_URL)) return 'no-padding-page'\n return ''\n }\n\n function isBottomPaddingPage() {\n return !NO_BOTTOM_PADDING_PAGES.includes(window.location.pathname)\n }\n \n return (\n <GeneralLayout>\n <BaseTopBar />\n <div className={`base-layout-content ${getLayoutClassName()}`} style={{ paddingBottom: isBottomPaddingPage() ? '20dvh' : 0 }}>\n {children}\n </div>\n </GeneralLayout>\n )\n}","import React, { useEffect, useRef, useState } from 'react'\nimport './AccountVerificationPage.css'\nimport Loader from 'components/Loader/Loader'\nimport { useTranslation } from 'react-i18next'\nimport { IoIosCheckmarkCircle } from 'react-icons/io'\nimport { IoCloseCircle } from 'react-icons/io5'\nimport { VerifyAccount } from 'api/auth/auth'\nimport { getQueryVariable } from 'services/SystemService'\nimport { LOGIN_PAGE_URL, RESET_PASSWORD_TOKEN_QUERY_PARAMETER_KEY } from 'constants/routes.constants'\nimport { useHistoryContext } from 'contexts/History'\nimport {\n ACCOUNT_VERIFICATION_PAGE_DISPLAY_VERIFY_RESULT_DELAY_MILLISECONDS,\n ACCOUNT_VERIFICATION_PAGE_PROCEED_DELAY_MILLISECONDS\n} from 'constants/general.constants'\n\nexport default function AccountVerificationPage() {\n const { t } = useTranslation()\n const history = useHistoryContext()\n\n const [isAccountVerified, setIsAccountVerified] = useState(null)\n\n const verificationLoaderRef = useRef(null)\n const verificationResultIndicatorRef = useRef(null)\n\n useEffect(() => {\n VerifyAccount(getQueryVariable(RESET_PASSWORD_TOKEN_QUERY_PARAMETER_KEY, null))\n .then(response => {\n setTimeout(() => {\n setIsAccountVerified(true)\n verificationLoaderRef.current.style.display = 'none'\n verificationResultIndicatorRef.current.classList.add('has-result')\n setTimeout(() => {\n history.push(LOGIN_PAGE_URL)\n }, ACCOUNT_VERIFICATION_PAGE_PROCEED_DELAY_MILLISECONDS)\n }, ACCOUNT_VERIFICATION_PAGE_DISPLAY_VERIFY_RESULT_DELAY_MILLISECONDS)\n })\n .catch(error => {\n console.log(error)\n setTimeout(() => {\n setIsAccountVerified(false)\n verificationLoaderRef.current.style.display = 'none'\n verificationResultIndicatorRef.current.classList.add('has-result')\n }, ACCOUNT_VERIFICATION_PAGE_DISPLAY_VERIFY_RESULT_DELAY_MILLISECONDS)\n })\n }, [])\n\n return (\n <div className='account-verification-page-container'>\n <div className=\"account-verification-central-container\">\n <div ref={verificationLoaderRef} className=\"account-verification-loader\">\n <div className=\"account-verification-loader-title\">{t('ACCOUNT_VERIFICATION_PAGE_LOADER_TITLE')}</div>\n <Loader styles={{ width: '35px', height: '35px' }} />\n </div>\n <div ref={verificationResultIndicatorRef} className=\"account-verification-result-indication\">\n {isAccountVerified ? <>\n <div className=\"account-verification-verified-title\">{t('ACCOUNT_VERIFICATION_PAGE_VERIFIED_TITLE')}</div>\n <IoIosCheckmarkCircle className='account-verification-verified-indication account-verification-indication' />\n </> : <>\n <div className=\"account-verification-not-verified-title\">{t('ACCOUNT_VERIFICATION_PAGE_NOT_VERIFIED_TITLE')}</div>\n <IoCloseCircle className='account-verification-not-verified-indication account-verification-indication' />\n </>}\n </div>\n </div>\n </div>\n )\n}","import React, { useState } from 'react'\nimport './SignUpRequestPage.css'\nimport { useTranslation } from 'react-i18next'\nimport { useHistoryContext } from 'contexts/History'\nimport { EMAIL_PATTERN_REGEX } from 'constants/regex.constants'\nimport {\n BOXED_MESSAGE_TYPES\n} from 'constants/general.constants'\nimport { LOGIN_PAGE_URL, PAYLINK_SITE_URL } from 'constants/routes.constants'\nimport LoaderButton from 'components/LoaderButton/LoaderButton'\nimport BoxedMessage from 'components/BoxedMessage/BoxedMessage'\nimport { RequestRegistration } from 'api/auth/auth'\nimport PaydinDialog from 'dialogs/PaydinDialog/PaydinDialog'\nimport AlreadyHaveAccount from 'components/AlreadyHaveAccount/AlreadyHaveAccount'\n\nexport default function SignUpRequestPage() {\n const { t } = useTranslation()\n const history = useHistoryContext()\n\n const [isProceeding, setIsProceeding] = useState(false)\n const [inputState, setInputState] = useState({\n name: '',\n email: '',\n description: ''\n })\n\n const [boxedMessageState, setBoxedMessageState] = useState({\n isOpen: false,\n message: ''\n })\n\n const [dialogState, setDialogState] = useState({\n isOpen: false,\n handleDialogClose: closeDialog,\n title: '',\n message: '',\n leftButtonText: '',\n rightButtonText: '',\n rightButtonClickHandler: () => { },\n leftButtonClickHandler: () => { }\n })\n\n function closeDialog() {\n setDialogState(prev => ({\n ...prev,\n isOpen: false\n }))\n }\n\n function handleInputChange(e) {\n setInputState(prev => {\n return {\n ...prev,\n [e.target.name]: e.target.value,\n }\n })\n }\n\n function sendContactInfo() {\n setIsProceeding(true)\n RequestRegistration(inputState.name, inputState.email, inputState.description)\n .then(response => {\n setIsProceeding(false)\n setDialogState(prev => ({\n ...prev,\n isOpen: true,\n title: t('SIGN_UP_TEMP_LANDING_PAGE_REGISTRATION_REQUEST_SUCCESS_DIALOG_TITLE'),\n message: t('SIGN_UP_TEMP_LANDING_PAGE_REGISTRATION_REQUEST_SUCCESS_DIALOG_MESSAGE'),\n leftButtonText: t('SIGN_UP_TEMP_LANDING_PAGE_REGISTRATION_REQUEST_SUCCESS_DIALOG_LEFT_BUTTON_TEXT'),\n leftButtonClickHandler: navigateToPaylinkshopSite\n }))\n })\n .catch(error => {\n setIsProceeding(false)\n setBoxedMessageState({\n isOpen: true,\n message: t('SIGN_UP_TEMP_LANDING_PAGE_SEND_CONTACT_INFO_ERROR_MESSAGE_TEXT')\n })\n })\n }\n\n function navigateToPaylinkshopSite() {\n window.location.href = PAYLINK_SITE_URL\n }\n\n function isNameValid() {\n return inputState.name.length > 0\n }\n\n function isDescriptionValid() {\n return inputState.description.length > 0\n }\n\n function isEmailValid() {\n return EMAIL_PATTERN_REGEX.test(inputState.email)\n }\n\n function isAbleToProceed() {\n return (\n isNameValid() &&\n isEmailValid() &&\n isDescriptionValid()\n )\n }\n\n function goToLogin() {\n history.push(LOGIN_PAGE_URL)\n }\n\n return (\n <div className='sign-up-temp-landing-page-container'>\n <form dir={t('direction.dir')} className=\"sign-up-temp-landing-page-content\">\n <div className=\"sign-up-temp-landing-page-titles-container\">\n <div className=\"sign-up-temp-landing-page-title auth-page-title\">{t('SIGN_UP_TEMP_LANDING_PAGE_TITLE')}</div>\n <div className=\"sign-up-temp-landing-page-subtitle\">{t('SIGN_UP_TEMP_LANDING_PAGE_SUBTITLE')}</div>\n </div>\n {\n boxedMessageState.isOpen && <BoxedMessage\n message={boxedMessageState.message}\n type={BOXED_MESSAGE_TYPES.ERROR} />\n }\n <div className=\"sign-up-temp-landing-page-fields-form\">\n <div className=\"sign-up-temp-landing-page-fields-form-name-input-container input-field-container\">\n <input className='input-field' placeholder={t('SIGN_UP_TEMP_LANDING_PAGE_INPUT_NAME_PLACEHOLDER')} name='name' type='text' onChange={handleInputChange} />\n </div>\n <div className=\"sign-up-temp-landing-page-fields-form-email-input-container input-field-container\">\n <input className='input-field' placeholder={t('SIGN_UP_TEMP_LANDING_PAGE_INPUT_EMAIL_PLACEHOLDER')} name='email' type='email' onChange={handleInputChange} />\n </div>\n <div className=\"sign-up-temp-landing-page-fields-form-description-input-container textarea-input-field-container\">\n <textarea className='textarea-input-field' rows={10} placeholder={t('SIGN_UP_TEMP_LANDING_PAGE_INPUT_DESCRIPTION_PLACEHOLDER')} name='description' type='text' onChange={handleInputChange} />\n </div>\n </div>\n <LoaderButton\n className=\"sign-up-temp-landing-page-sign-up-button\"\n buttonText={t('SIGN_UP_TEMP_LANDING_PAGE_BUTTON_TEXT')}\n isLoading={isProceeding}\n renderAsButton={true}\n isDisabled={!isAbleToProceed()}\n onClick={sendContactInfo}\n />\n\n <AlreadyHaveAccount />\n </form>\n <PaydinDialog\n isDialogOpen={dialogState.isOpen}\n handleDialogClose={dialogState.handleDialogClose}\n title={dialogState.title}\n message={dialogState.message}\n closeOnLeftClick={false}\n leftButtonText={dialogState.leftButtonText}\n onLeftButtonClick={dialogState.leftButtonClickHandler}\n isLeftButtonWithLoader={false}\n />\n </div>\n )\n}","import React, { useState } from 'react'\nimport './InfluencerItem.css'\nimport ImageBox from 'components/ImageBox/ImageBox'\nimport { useTranslation } from 'react-i18next'\nimport Loader from 'components/Loader/Loader'\nimport { isMobile } from 'utils/deviceUtils'\nimport { formatNumber } from 'utils/utils'\nimport ContentDialog from 'dialogs/ContentDialog/ContentDialog'\nimport { CONTENT_TYPES, NUMBER_TYPES, VIEW_MODES } from 'constants/general.constants'\n\n/**\n * Represents an influencer card displaying its details.\n * @param {string} image - The image of the influencer\n * @param {string} username - The username of the influencer\n * @param {number} clicks - The amount of the clicks for the influencer\n * @param {number} sales - The amount of sales for the influencer\n * @param {boolean} isLoadingAnalytics - Determins whether the influencer's analytics are being loaded or not\n */\nexport default function InfluencerItem({\n image,\n username,\n clicks,\n sales,\n isLoadingAnalytics,\n onDelete = () => { },\n onUpdate = () => { },\n datePickerRange = null,\n}) {\n const { t } = useTranslation()\n\n const [linkContentDialogState, setLinkContentDialogState] = useState({\n isOpen: false,\n mode: VIEW_MODES.PREVIEW\n })\n\n function previewInfluencer() {\n setLinkContentDialogState({\n isOpen: true,\n mode: VIEW_MODES.PREVIEW\n })\n }\n\n function closeLinkContentDialog() {\n setLinkContentDialogState(prev => ({\n ...prev,\n isOpen: false\n }))\n }\n\n return (\n <div className={isMobile ? 'mobile-influencer-item-container' : 'influencer-item-container'} onClick={previewInfluencer}>\n <ImageBox\n image={image}\n className='influencer-item-image'\n roundImage={true}\n isImageFitCover={true}\n onImageClickCallback={() => { }}\n />\n <div className=\"influencer-item-content\">\n <div className=\"influencer-item-name\">{username}</div>\n <div className=\"influencer-item-analytics\">\n {/* <div className=\"influencer-item-analytics-section-container\">\n <div className=\"influencer-item-analytics-section-title\">{t('INFLUENCERS_ITEM_CLICKS_COUNT_TITLE')}</div>\n <div className=\"influencer-item-analytics-section-value-container\">\n {\n isLoadingAnalytics ? <Loader\n styles={{\n width: '15px',\n height: '15px',\n }}\n /> : <div className=\"influencer-item-analytics-section-value\">{formatNumber(clicks, NUMBER_TYPES.SHORT)}</div>\n }\n </div>\n </div> */}\n <div className=\"influencer-item-analytics-section-container\">\n <div className=\"influencer-item-analytics-section-title\">{t('INFLUENCERS_ITEM_SALES_COUNT_TITLE')}</div>\n <div className=\"influencer-item-analytics-section-value-container\">\n {\n isLoadingAnalytics ? <Loader\n styles={{\n width: '15px',\n height: '15px',\n }}\n /> : <div className=\"influencer-item-analytics-section-value\">{formatNumber(sales, NUMBER_TYPES.SHORT)}</div>\n }\n </div>\n </div>\n </div>\n </div>\n <ContentDialog\n isDialogOpen={linkContentDialogState.isOpen}\n handleDialogClose={closeLinkContentDialog}\n data={{\n influencerUsername: username,\n datePickerRange: datePickerRange,\n }}\n contentType={CONTENT_TYPES.INFLUENCER}\n mode={linkContentDialogState.mode}\n onDelete={onDelete}\n onSaveSuccess={onUpdate}\n />\n </div>\n )\n}","import React from 'react'\nimport { FaPodcast } from 'react-icons/fa'\n\n/**\n * Represents the image for indicating that no influencers found.\n * @param {string} className - The class name for this image\n */\nexport default function NoInfluencersFoundImage(props) {\n return (\n <FaPodcast {...props} />\n )\n}","import React, { useEffect, useState } from 'react'\nimport './InfluencersPage.css'\nimport { ANALYTICS_PAGE_RETROACTIVE_DATA_REPORT_TIME_INTERVALS, ANALYTICS_PAGE_RETROACTIVE_DATA_REPORT_TIME_INTERVALS_NAMES, CONTENT_TYPES, VIEW_MODES } from 'constants/general.constants'\nimport { t } from 'i18next'\nimport InfluencerItem from 'components/InfluencerItem/InfluencerItem'\nimport { isMobile } from 'utils/deviceUtils'\nimport NoItemsFound from 'components/NoItemsFound/NoItemsFound'\nimport { useHistoryContext } from 'contexts/History'\nimport { HOME_PAGE_URL, PRICING_PLANS_PAGE_URL } from 'constants/routes.constants'\nimport NoInfluencersFoundImage from 'embeddedImages/NoInfluencersFoundImage'\nimport { GetInfluencers, GetInfluencersAnalytics } from 'api/influencers/influencers'\nimport DashboardLoader from 'components/DashboardLoader/DashboardLoader'\nimport { useGeneralDataContext, useUserDetailsContext } from 'contexts/User'\nimport { extractBasicInfluencerAnalytics, extractInfluencerData } from 'utils/dataUtils'\nimport { getAnalyticsDateString } from 'utils/dateUtils'\nimport ContentDialog from 'dialogs/ContentDialog/ContentDialog'\nimport TimeSelect from 'components/TimeSelect/TimeSelect'\nimport AnalyticsStrip from 'components/AnalyticsStrip/AnalyticsStrip'\nimport { getCurrencySymbol } from 'services/currency'\nimport { InfluencerMultiselectDropdown } from 'components'\n\n/**\n * Represents the main influencers screen.\n */\nexport default function InfluencersPage() {\n const history = useHistoryContext()\n const {\n userDetails,\n maxInfleuncersAllowed,\n isFreeUserAndTrialEnded,\n hasShopifyStore,\n setRecentInfluencers,\n } = useUserDetailsContext()\n const {\n finishedUpdatingObject,\n finishedCreatingObject,\n objectToSave,\n openFreeTrialDialog,\n } = useGeneralDataContext()\n\n const defaultSelectedInterval = ANALYTICS_PAGE_RETROACTIVE_DATA_REPORT_TIME_INTERVALS_NAMES.THIS_MONTH\n\n const [influencersList, setInfluencersList] = useState([])\n const [influencersAnalytics, setInfluencersAnalytics] = useState([])\n const [isLoadingInfluencers, setIsLoadingInfluencers] = useState(true)\n const [isLoadingInfluencersAnalytics, setIsLoadingInfluencersAnalytics] = useState(false)\n const [shouldCheckForInfluncers, setShouldCheckForInfluncers] = useState(false)\n const [isInfluencerContentDialogOpen, setIsInfluencerContentDialogOpen] = useState(false)\n const [overviewTimeIntervalName, setOverviewTimeIntervalName] = useState(defaultSelectedInterval)\n const [datePickerState, setDatePickerState] = useState({\n startDate: ANALYTICS_PAGE_RETROACTIVE_DATA_REPORT_TIME_INTERVALS.find(timeInterval => timeInterval?.name === defaultSelectedInterval).timeRange[0],\n endDate: ANALYTICS_PAGE_RETROACTIVE_DATA_REPORT_TIME_INTERVALS.find(timeInterval => timeInterval?.name === defaultSelectedInterval).timeRange[1]\n })\n\n const [isAddInfluencerSelectOpen, setIsAddInfluencerSelectOpen] = useState(false)\n const [selectedInfluencers, setSelectedInfluencers] = useState([]);\n\n useEffect(() => {\n if (hasShopifyStore()) {\n fetchInflueners()\n setIsLoadingInfluencersAnalytics(false)\n setShouldCheckForInfluncers(true)\n } else {\n history.push(HOME_PAGE_URL)\n }\n }, [])\n\n useEffect(() => {\n setIsLoadingInfluencersAnalytics(true)\n GetInfluencersAnalytics(\n getAnalyticsDateString(datePickerState.startDate),\n getAnalyticsDateString(datePickerState.endDate)\n )\n .then(response => {\n calculateInfluencerAnalytics(response)\n })\n .catch(console.log)\n .finally(() => {\n setIsLoadingInfluencersAnalytics(false)\n })\n }, [datePickerState])\n\n useEffect(() => {\n // Check if of type influencer\n if (objectToSave && objectToSave?.username) {\n if (finishedUpdatingObject) {\n updateInfluencer(objectToSave)\n } else if (finishedCreatingObject) {\n addNewInfluencer(objectToSave)\n }\n }\n }, [finishedUpdatingObject, finishedCreatingObject])\n\n function calculateInfluencerAnalytics(influencersDataAnalytics) {\n return setInfluencersAnalytics(influencersDataAnalytics?.map(influencer => extractBasicInfluencerAnalytics(influencer)))\n }\n\n function onDateRangeSelected(startDate, endDate) {\n setDatePickerState({\n startDate,\n endDate\n })\n }\n\n function fetchInflueners() {\n setIsLoadingInfluencers(true)\n\n GetInfluencers()\n .then(response => {\n const activeInfluencers = response\n ?.filter((influencer) => influencer?.is_active)\n setSelectedInfluencers(activeInfluencers?.map((influencer) => influencer?.username))\n\n const activeWithData = activeInfluencers\n ?.map((influencer) => extractInfluencerData(influencer));\n setInfluencersList(activeWithData);\n })\n .catch(console.log)\n .finally(() => {\n setShouldCheckForInfluncers(true)\n setIsLoadingInfluencers(false)\n })\n }\n\n function closeInfluencerContentDialog() {\n setIsInfluencerContentDialogOpen(false)\n }\n\n function deleteInfluencer(influencerUsername) {\n setInfluencersList(prev => prev.filter(influencer => influencer?.username !== influencerUsername))\n setRecentInfluencers([])\n setSelectedInfluencers(prev => prev.filter(influencer => influencer !== influencerUsername))\n setIsLoadingInfluencers(false)\n }\n\n function updateInfluencer(updatedInfluencer) {\n setInfluencersList(prev => prev.map(influencer => influencer?.username === updatedInfluencer?.username ? updatedInfluencer : influencer))\n }\n\n function addNewInfluencer(newInfluencer) {\n setInfluencersList(prev => [newInfluencer, ...prev])\n setSelectedInfluencers(prev => [newInfluencer?.username, ...prev])\n setIsInfluencerContentDialogOpen(false)\n }\n\n function hasNoInfluencers() {\n return influencersList?.length === 0\n }\n\n function addInfluencer() {\n const maxInfleuncers = maxInfleuncersAllowed()\n if (influencersList?.length >= maxInfleuncers) {\n if (maxInfleuncers === 3) {\n openFreeTrialDialog(true, t('TOO_MANY_INFLUENCER_3_DIALOG_TITLE'), t('TOO_MANY_INFLUENCER_3_DIALOG_SUBTITLE'))\n } else {\n openFreeTrialDialog(true, t('TOO_MANY_INFLUENCER_15_DIALOG_TITLE'), t('TOO_MANY_INFLUENCER_15_DIALOG_SUBTITLE'))\n }\n } else {\n setIsInfluencerContentDialogOpen(true)\n }\n }\n\n function upgradePlan() {\n history.push(PRICING_PLANS_PAGE_URL)\n }\n\n function handleToggleAddInfluencerSelect() {\n setIsAddInfluencerSelectOpen((prev)=>{\n return !prev\n })\n }\n\n const handleInfluencersSales = () => {\n return influencersAnalytics\n ?.filter(influencer => selectedInfluencers.includes(influencer.username))\n .reduce((totalSalesSum, influencer) => (influencer?.totalSales ?? 0) + totalSalesSum, 0);\n }\n\n const handleInfluencersRevenue = () => {\n return influencersAnalytics\n ?.filter(influencer => selectedInfluencers.includes(influencer.username))\n .reduce((totalRevenueSum, influencer) => (influencer?.totalRevenue ?? 0) + totalRevenueSum, 0)\n }\n\n function handleInfluencerSelection(selected) {\n setSelectedInfluencers(selected);\n }\n\n\n const handleSelectAll = (unselect = false) => {\n if (unselect) {\n return setSelectedInfluencers([]);\n }\n return setSelectedInfluencers(influencersList.map(influencer => influencer.username));\n };\n\n const handleClear = () => {\n setSelectedInfluencers([]);\n };\n\n const displayedInfluencers = influencersList.filter((inf) => selectedInfluencers.includes(inf.username))\n\n return (\n <div className='influencers-page-container'>\n {\n !isMobile && <div className={\"influencers-page-topbar-container\"}>\n <div className={\"influencers-page-topbar-titles-container\"}>\n <div className=\"influencers-page-topbar-page-title\">\n <div className={\"influencers-page-topbar-title\"}>{t('INFLUENCERS_PAGE_TITLE')}</div>\n <TimeSelect\n selectedStartDate={datePickerState.startDate}\n selectedEndDate={datePickerState.endDate}\n timeIntervals={ANALYTICS_PAGE_RETROACTIVE_DATA_REPORT_TIME_INTERVALS}\n setStartEndDates={onDateRangeSelected}\n selectedTimeInterval={overviewTimeIntervalName}\n onTimeIntervalSelect={setOverviewTimeIntervalName}\n displayShortDates={true}\n />\n </div>\n <div className={\"influencers-page-topbar-subtitle\"}>{t('INFLUENCERS_PAGE_TOPBAR_SUBTITLE_TEXT')}</div>\n </div>\n {\n (!isFreeUserAndTrialEnded() && !hasNoInfluencers()) && <div className=\"influencers-page-topbar-add-influencer-button\" onClick={addInfluencer}>{t('INFLUENCERS_PAGE_TOPBAR_ADD_INFLUENCER_BUTTON_TEXT')}</div>\n }\n </div>\n }\n <div className={`${isMobile ? \"mobile-influencers-page-content\" : \"influencers-page-content\"} ${hasNoInfluencers() ? 'no-influencers-content' : ''}`}>\n <div className=\"separator-line\"></div>\n \n <AnalyticsStrip\n analytics={{\n sales: handleInfluencersSales(),\n revenue: handleInfluencersRevenue(),\n }}\n currency={getCurrencySymbol(userDetails.businessCurrency)}\n isLoadingAnalytics={isLoadingInfluencersAnalytics}\n showClicks={false}\n leftComponent={(\n <InfluencerMultiselectDropdown \n influencers={influencersList}\n selectedInfluencers={selectedInfluencers}\n onChange={handleInfluencerSelection}\n isOpen={isAddInfluencerSelectOpen}\n toggleDropdown={handleToggleAddInfluencerSelect}\n handleSelectAll={handleSelectAll}\n handleClear={handleClear}\n />)\n }\n />\n\n \n {isLoadingInfluencers && <DashboardLoader />}\n {\n (!isLoadingInfluencers && shouldCheckForInfluncers && hasNoInfluencers()) ? <div className='influenceres-page-no-influencers-container'>\n <NoItemsFound\n isEmbeddedIcon={true}\n image={<NoInfluencersFoundImage className='no-items-found-container-image' />}\n title={t('INFLUENCERS_ITEM_NO_INFLUENCERS_FOUND_TITLE')}\n subtitle={isFreeUserAndTrialEnded() ? t('INFLUENCERS_ITEM_NO_INFLUENCERS_FOUND_FREE_USER_SUBTITLE') : t('INFLUENCERS_ITEM_NO_INFLUENCERS_FOUND_SUBTITLE')}\n buttonText={isFreeUserAndTrialEnded() ? t('INFLUENCERS_PAGE_TOPBAR_ADD_INFLUENCER_BUTTON_FREE_SUBSCRIPTION_TEXT') : t('INFLUENCERS_ITEM_NO_INFLUENCERS_FOUND_ADD_INFLUENCER_BUTTON_TEXT')}\n buttonStyles={{\n backgroundColor: isFreeUserAndTrialEnded() ? 'black' : 'white',\n color: isFreeUserAndTrialEnded() ? 'white' : 'black'\n }}\n addItemButtonClickHandler={isFreeUserAndTrialEnded() ? upgradePlan : addInfluencer}\n />\n </div> : <div className={isMobile ? \"mobile-influencers-page-content-influencers-list\" : \"influencers-page-content-influencers-list\"}>\n\n {displayedInfluencers.map((influencer) => (\n <InfluencerItem\n key={influencer?.username}\n image={influencer?.image}\n username={influencer?.username}\n isLoadingAnalytics={isLoadingInfluencersAnalytics}\n clicks={influencersAnalytics?.find(influencerAnalytics => influencerAnalytics?.username === influencer?.username)?.totalClicks}\n sales={influencersAnalytics?.find(influencerAnalytics => influencerAnalytics?.username === influencer?.username)?.totalSales}\n onDelete={deleteInfluencer}\n onUpdate={updateInfluencer}\n datePickerRange={{...datePickerState, timeIntervalName: overviewTimeIntervalName}}\n />\n ))}\n </div>\n }\n </div>\n <ContentDialog\n isDialogOpen={isInfluencerContentDialogOpen}\n handleDialogClose={closeInfluencerContentDialog}\n mode={VIEW_MODES.CREATE}\n contentType={CONTENT_TYPES.INFLUENCER}\n onCreateSuccess={addNewInfluencer}\n />\n </div>\n )\n}","import React, { useEffect, useState } from 'react'\nimport './ForgotPasswordPage.css'\nimport { useTranslation } from 'react-i18next'\nimport { useHistoryContext } from 'contexts/History'\nimport LoaderButton from 'components/LoaderButton/LoaderButton'\nimport { ResetPasswordRequestAPI } from 'api/auth/auth'\nimport PaydinDialog, { PAYDIN_DIALOG_BUTTON_TYPES } from 'dialogs/PaydinDialog/PaydinDialog'\nimport { resetInfluencerPasswordRequest } from 'api/influencers/influencers'\nimport EditFieldSectionInput from 'components/EditFieldSectionInput/EditFieldSectionInput'\nimport { formatUsername } from 'utils/utils'\n\n/**\n * Represents the forgot password page.\n * Accepts the 'isInfluencer' to determine whether this page requests a password reset for a merchant or influencer.\n * @param {boolean} isInfluencer - Determins whether this page requests a password reset for a merchant or influencer\n */\nexport default function ForgotPasswordPage({\n isInfluencer\n}) {\n const { t } = useTranslation()\n const history = useHistoryContext()\n\n const [isAbleToResetPassword, setIsAbleToResetPassword] = useState(false)\n const [inputState, setInputState] = useState({\n // If 'isInfluencer' is true then 'merchantUsernameOrEmail' can be only a username, otherwise, 'merchantUsernameOrEmail' can be either a username or email\n merchantUsernameOrEmail: '',\n influencerUsernameOrEmail: ''\n })\n const [isResetPasswordInProgress, setIsResetPasswordInProgress] = useState(false)\n const [dialogProperties, setDialogProperties] = useState({\n isOpen: false,\n title: '',\n message: '',\n leftButtonText: '',\n rightButtonText: ''\n })\n\n useEffect(() => {\n setIsAbleToResetPassword(\n inputState.merchantUsernameOrEmail !== '' &&\n (isInfluencer ? inputState.influencerUsernameOrEmail !== '' : true)\n )\n }, [inputState])\n\n function resetAllFields() {\n setInputState({\n merchantUsernameOrEmail: '',\n influencerUsernameOrEmail: ''\n })\n }\n\n function resetPassword() {\n setIsResetPasswordInProgress(true)\n if (isInfluencer) {\n resetInfluencerPasswordRequest(inputState.merchantUsernameOrEmail, inputState.influencerUsernameOrEmail)\n .then(() => {\n resetAllFields()\n showPasswordResetEmailSentDialog()\n setIsResetPasswordInProgress(false)\n })\n .catch(error => {\n setIsResetPasswordInProgress(false)\n console.log(error)\n showPasswordResetErrorDialog()\n })\n } else {\n ResetPasswordRequestAPI(inputState.merchantUsernameOrEmail)\n .then(() => {\n resetAllFields()\n showPasswordResetEmailSentDialog()\n setIsResetPasswordInProgress(false)\n }).catch(error => {\n setIsResetPasswordInProgress(false)\n console.log(error)\n showPasswordResetErrorDialog()\n })\n }\n }\n\n function showPasswordResetEmailSentDialog() {\n setDialogProperties(prev => ({\n ...prev,\n isOpen: true,\n title: t('RESET_PASSWORD_EMAIL_SENT_DIALOG_TITLE'),\n message: '',\n leftButtonText: t('FORGOT_PASSWORD_PAGE_RESET_PASSWORD_EMAIL_SENT_DIALOG_LEFT_BUTTON_TEXT')\n }))\n history.addBackHandler(closeDialog)\n }\n\n function showPasswordResetErrorDialog() {\n setDialogProperties(prev => ({\n ...prev,\n isOpen: true,\n title: t('GENERAL_ERROR_DIALOG_TITLE'),\n message: t('GENERAL_ERROR_DIALOG_MESSAGE'),\n leftButtonText: t('GENERAL_ERROR_DIALOG_LEFT_BUTTON_TEXT')\n }))\n }\n\n function handleMerchantUsernameOrEmail(value) {\n setInputState(prev => ({\n ...prev,\n merchantUsernameOrEmail: formatUsername(value)\n }))\n }\n\n function handleInfluecnerUsernameOrEmail(value) {\n setInputState(prev => ({\n ...prev,\n influencerUsernameOrEmail: formatUsername(value)\n }))\n }\n\n function backToLogin() {\n history.goBack()\n }\n\n function closeDialog() {\n setDialogProperties(prev => ({\n ...prev,\n isOpen: false\n }))\n }\n\n return (\n <form className='forgot-password-page-container'>\n <div className=\"forgot-password-page-content\">\n <div className=\"forgot-password-page-title-section\">\n <div className=\"forgot-password-page-title auth-page-title\">{t('FORGOT_PASSWORD_PAGE_TITLE')}</div>\n </div>\n <div className=\"forgot-password-page-input-button-section\">\n <EditFieldSectionInput\n title={isInfluencer ? t('FORGOT_PASSWORD_PAGE_MERCHANT_USERNAME_INPUT_TITLE') : t('FORGOT_PASSWORD_PAGE_USERNAME_INPUT_TITLE')}\n value={inputState.merchantUsernameOrEmail}\n setValue={handleMerchantUsernameOrEmail}\n id=\"merchant-username\"\n />\n {\n isInfluencer && <EditFieldSectionInput\n title={t('FORGOT_PASSWORD_PAGE_INFLUENCER_USERNAME_INPUT_TITLE')}\n value={inputState.influencerUsernameOrEmail}\n setValue={handleInfluecnerUsernameOrEmail}\n id=\"influecner-username-or-email\"\n />\n }\n <LoaderButton\n className='forgot-password-reset-password-button'\n isLoading={isResetPasswordInProgress}\n buttonText={t('FORGOT_PASSWORD_PAGE_RESET_PASSWORD_BUTTON_TEXT')}\n isDisabled={!isAbleToResetPassword}\n renderAsButton={true}\n onClick={resetPassword} />\n </div>\n <div className=\"forgot-password-page-back-to-login-button\" onClick={backToLogin}>{t('FORGOT_PASSWORD_PAGE_BACK_TO_LOGIN_BUTTON_TEXT')}</div>\n </div>\n <PaydinDialog\n title={dialogProperties.title}\n message={dialogProperties.message}\n isDialogOpen={dialogProperties.isOpen}\n handleDialogClose={closeDialog}\n leftButtonText={dialogProperties.leftButtonText}\n rightButtonText={dialogProperties.rightButtonText}\n leftButtonType={PAYDIN_DIALOG_BUTTON_TYPES.PRIMARY}\n rightButtonType={PAYDIN_DIALOG_BUTTON_TYPES.SECONDARY}\n isLeftButtonWithLoader={false}\n isRightButtonWithLoader={false}\n />\n </form>\n )\n}","import React from 'react'\nimport './ForgotInfluencerPassword.css'\nimport ForgotPasswordPage from 'pages/ForgotPasswordPage/ForgotPasswordPage'\n\nexport default function ForgotInfluencerPassword() {\n return (\n <ForgotPasswordPage isInfluencer={true} />\n )\n}","import React from 'react'\nimport './ForgotMerchantPassword.css'\nimport ForgotPasswordPage from 'pages/ForgotPasswordPage/ForgotPasswordPage'\n\nexport default function ForgotMerchantPassword() {\n return (\n <ForgotPasswordPage isInfluencer={false} />\n )\n}","import React from 'react'\nimport './DontHaveAccount.css'\nimport { SIGN_UP_REQUEST_PAGE_URL } from 'constants/routes.constants'\nimport { useHistoryContext } from 'contexts/History'\nimport { useTranslation } from 'react-i18next'\n\n/**\n * Represents the line \"Don't have an account? Sign up\" inside authentication pages.\n */\nexport default function DontHaveAccount({\n navigationUrl = SIGN_UP_REQUEST_PAGE_URL\n}) {\n const { t } = useTranslation()\n const history = useHistoryContext()\n\n function navigate() {\n history.push(navigationUrl)\n }\n\n return (\n <div className=\"dont-have-account-container\">\n <div className=\"dont-have-account-text\">{t('DONT_HAVE_ACCOUNT_TEXT')}</div>\n <div className=\"dont-have-account-sign-up-button\" onClick={navigate}>{t('DONT_HAVE_ACCOUNT_SIGN_UP_BUTTON_TEXT')}</div>\n </div>\n )\n}","import React, { useEffect, useRef, useState } from 'react'\nimport './LoginPage.css'\nimport { useTranslation } from 'react-i18next'\nimport { useHistoryContext } from 'contexts/History'\nimport {\n AUTH_QUERY_PARAMETER_KEY,\n EXTERNAL_AUTH_PAGE_URL,\n FORGOT_PASSWORD_PAGE_URL,\n HOME_PAGE_URL,\n INFLUENCER_FORGOT_PASSWORD_PAGE_URL,\n LOGIN_INFLUENCER_INFLUENCER_PASSWORD_QUERY_PARAMETER,\n LOGIN_INFLUENCER_INFLUENCER_USERNAME_QUERY_PARAMETER,\n LOGIN_INFLUENCER_MERCHANT_NAME_QUERY_PARAMETER,\n LOGIN_INFLUENCER_PAGE_URL,\n LOGIN_PAGE_URL,\n} from 'constants/routes.constants'\nimport {\n BOXED_MESSAGE_TYPES,\n USERNAME_FIELD_PREFIX,\n USER_PASSWORD_MIN_LENGTH\n} from 'constants/general.constants'\nimport { getQueryVariable } from 'services/SystemService'\nimport LoaderButton from 'components/LoaderButton/LoaderButton'\nimport { useAuthContext } from 'contexts/User'\nimport BoxedMessage from 'components/BoxedMessage/BoxedMessage'\nimport PrivaciesFooterText from 'components/PrivaciesFooterText/PrivaciesFooterText'\nimport EditFieldSectionInput from 'components/EditFieldSectionInput/EditFieldSectionInput'\nimport { formatUsername } from 'utils/utils'\nimport DontHaveAccount from 'components/DontHaveAccount/DontHaveAccount'\n\nexport default function LoginPage({\n isInfluencerLogin = false\n}) {\n const { t } = useTranslation()\n const history = useHistoryContext()\n const { login } = useAuthContext()\n\n const [isAbleToLogin, setIsAbleToLogin] = useState(false)\n const [isLoginInProcess, setIsLoginInProcess] = useState(false)\n const [inputState, setInputState] = useState({\n username: '',\n influencerUsername: '',\n password: ''\n })\n const [loginFailed, setLoginFailed] = useState(false)\n const [shouldAutoLogin, setShouldAutoLogin] = useState(false)\n\n const passwordInputRef = useRef(null)\n\n useEffect(() => {\n if (isInfluencerLogin) {\n const merchant = getQueryVariable(LOGIN_INFLUENCER_MERCHANT_NAME_QUERY_PARAMETER, \"\")\n const influencerUsername = getQueryVariable(LOGIN_INFLUENCER_INFLUENCER_USERNAME_QUERY_PARAMETER, \"\")\n const influencerPassword = getQueryVariable(LOGIN_INFLUENCER_INFLUENCER_PASSWORD_QUERY_PARAMETER, \"\")\n setShouldAutoLogin(merchant && influencerUsername && influencerPassword)\n\n setInputState(prev => ({\n ...prev,\n username: merchant,\n influencerUsername,\n password: influencerPassword\n }))\n }\n }, [])\n\n useEffect(() => {\n if (isInfluencerLogin && shouldAutoLogin) {\n handleLogin(() => {\n const merchant = getQueryVariable(LOGIN_INFLUENCER_MERCHANT_NAME_QUERY_PARAMETER, \"\")\n const influencerUsername = getQueryVariable(LOGIN_INFLUENCER_INFLUENCER_USERNAME_QUERY_PARAMETER, \"\")\n\n setInputState({\n username: merchant,\n influencerUsername,\n password: ''\n })\n })\n return\n }\n\n setIsAbleToLogin(\n isUsernameValid() &&\n isPasswordValid() &&\n (isInfluencerLogin ? isInfluencerUsernameValid() : true) // conditionally depend on the influencer username to allow login\n )\n }, [inputState])\n\n function isUsernameValid() {\n return inputState.username.length > 0\n }\n\n function isInfluencerUsernameValid() {\n return inputState.influencerUsername.length > 0\n }\n\n function isPasswordValid() {\n return inputState.password.length >= USER_PASSWORD_MIN_LENGTH\n }\n\n function resetAllFields() {\n setInputState({\n username: '',\n influencerUsername: '',\n password: ''\n })\n }\n\n function handleLogin(onFailure = () => { }) {\n passwordInputRef.current.blur()\n\n setIsLoginInProcess(true)\n setLoginFailed(false)\n login(inputState.username, inputState.influencerUsername, inputState.password, isInfluencerLogin, (isSuccess) => {\n if (isSuccess) {\n if (!isInfluencerLogin && getQueryVariable(AUTH_QUERY_PARAMETER_KEY)) {\n history.push(EXTERNAL_AUTH_PAGE_URL + window.location.search)\n } else {\n history.push(HOME_PAGE_URL)\n }\n } else {\n setLoginFailed(true)\n setIsLoginInProcess(false)\n setShouldAutoLogin(false)\n onFailure()\n }\n })\n }\n\n function navigateToForgotPassword() {\n history.push(isInfluencerLogin ? INFLUENCER_FORGOT_PASSWORD_PAGE_URL : FORGOT_PASSWORD_PAGE_URL)\n }\n\n function setPassword(password) {\n setInputState(prev => {\n return {\n ...prev,\n password,\n }\n })\n }\n\n function setUsername(username) {\n setInputState(prev => {\n return {\n ...prev,\n username: formatUsername(username),\n }\n })\n }\n\n function setInfluencerUsername(influencerUsername) {\n setInputState(prev => {\n return {\n ...prev,\n influencerUsername: formatUsername(influencerUsername),\n }\n })\n }\n\n function switchToMerchantLogin() {\n resetAllFields()\n history.push(LOGIN_PAGE_URL)\n }\n\n function switchToInfluencerLogin() {\n resetAllFields()\n history.push(LOGIN_INFLUENCER_PAGE_URL)\n }\n\n return (\n <>\n <div className='login-page-container'>\n <form dir={t('direction.dir')} className=\"login-page-content\">\n <div className=\"login-page-title auth-page-title\">{t('LOGIN_PAGE_TITLE')}</div>\n {\n loginFailed && <BoxedMessage\n message={t('LOGIN_PAGE_LOGIN_ERROR_MESSAGE_TEXT')}\n type={BOXED_MESSAGE_TYPES.ERROR} />\n }\n <div className=\"login-page-fields-form\">\n <EditFieldSectionInput\n title={isInfluencerLogin ? t('LOGIN_PAGE_INFLUENCER_LOGIN_MERCHANT_INPUT_PLACEHOLDER') : t('LOGIN_PAGE_USERNAME_INPUT_PLACEHOLDER')}\n prefix={isInfluencerLogin ? null : USERNAME_FIELD_PREFIX}\n isEmbeddedPrefix={true}\n value={inputState.username}\n setValue={setUsername}\n enlargedTextField={true}\n id=\"username\"\n />\n {\n isInfluencerLogin && <EditFieldSectionInput\n title={t('LOGIN_PAGE_INFLUENCER_USERNAME_INPUT_PLACEHOLDER')}\n value={inputState.influencerUsername}\n setValue={setInfluencerUsername}\n enlargedTextField={true}\n id=\"influencer-username\"\n />\n }\n <EditFieldSectionInput\n title={t('LOGIN_PAGE_PASSWORD_INPUT_PLACEHOLDER')}\n inputRef={passwordInputRef}\n value={inputState.password}\n setValue={setPassword}\n isPassword={true}\n hasValidation={true}\n enlargedTextField={true}\n id=\"password\"\n titleButton={<>\n <div className=\"login-page-forgot-password-button\" onClick={navigateToForgotPassword}>{t('LOGIN_PAGE_FORGOT_PASSWORD_BUTTON_TEXT')}</div>\n </>}\n />\n </div>\n <LoaderButton\n className=\"login-page-login-button\"\n buttonText={t('LOGIN_PAGE_LOGIN_BUTTON_TEXT')}\n isLoading={isLoginInProcess}\n renderAsButton={true}\n isDisabled={!isAbleToLogin}\n onClick={handleLogin} />\n\n <div className=\"login-page-login-mode-switch-button\" onClick={isInfluencerLogin ? switchToMerchantLogin : switchToInfluencerLogin}>{isInfluencerLogin ? t('LOGIN_PAGE_MERCHANT_LOGIN_BUTTON_TEXT') : t('LOGIN_PAGE_INFLUENCER_LOGIN_BUTTON_TEXT')}</div>\n <DontHaveAccount />\n </form>\n <PrivaciesFooterText />\n </div>\n </>\n )\n}","import React from 'react'\nimport './InfluencerLoginPage.css'\nimport LoginPage from 'pages/LoginPage/LoginPage'\n\nexport default function InfluencerLoginPage() {\n return (\n <LoginPage isInfluencerLogin={true} />\n )\n}","import React from 'react'\nimport './AdminLoginPage.css'\nimport LoginPage from 'pages/LoginPage/LoginPage'\n\nexport default function AdminLoginPage() {\n return (\n <LoginPage isInfluencerLogin={false} />\n )\n}","import React, { useEffect, useRef, useState } from 'react'\nimport './ShortsPage.css'\nimport { isMobile } from 'utils/deviceUtils'\nimport ImageBox from 'components/ImageBox/ImageBox'\nimport { CiSearch } from 'react-icons/ci'\nimport { IoCloseOutline } from 'react-icons/io5'\nimport AnalyticsStrip from 'components/AnalyticsStrip/AnalyticsStrip'\nimport ShopifyConnect from 'components/ShopifyConnect/ShopifyConnect'\nimport { useFetchLinksContext, useGeneralDataContext, useIsUserLoadedContext, useUserDetailsContext } from 'contexts/User'\nimport ShortItem from 'components/ShortItem/ShortItem'\nimport { useTranslation } from 'react-i18next'\nimport { HOME_PAGE_URL } from 'constants/routes.constants'\nimport { useHistoryContext } from 'contexts/History'\nimport NoItemsFound from 'components/NoItemsFound/NoItemsFound'\nimport { EDIT_LINK_PAGE_PRODUCT_SEARCH_REQUEST_SEND_DELAY_MILLISECONDS, NO_IMAGE_PLACEHOLDER_URL, LINKS_PAGE_FETCH_NEXT_LINKS_THRESHOLD_ROW_COUNT, LINK_TYPES, PAGE_DEFAULT_MAX_WIDTH, SHORT_ITEM_HEIGHT_PX, SHORTS_PAGE_SHORTS_FILTER_COUNT, VIEW_MODES, CONTENT_TYPES, DEFAULT_CURRENCY_CODE } from 'constants/general.constants'\nimport { GetBusinessAnalytics } from 'api/links/links'\nimport DashboardLoader from 'components/DashboardLoader/DashboardLoader'\nimport ShortsImage from 'embeddedImages/ShortsImage'\nimport Loader from 'components/Loader/Loader'\nimport { getCurrencySymbol } from 'services/currency'\nimport { extractExtendedInfluencerAnalytics, extractLinkData } from 'utils/dataUtils'\nimport ContentDialog from 'dialogs/ContentDialog/ContentDialog'\n\n/**\n * Represents the user's shorts page.\n */\nexport default function ShortsPage() {\n\n const { t } = useTranslation()\n const history = useHistoryContext()\n const { \n userDetails, \n setUserDetails,\n setRecentShorts,\n isFreeUserAndTrialEnded\n } = useUserDetailsContext()\n const {\n finishedUpdatingObject,\n finishedCreatingObject,\n objectToSave,\n openFreeTrialDialog\n } = useGeneralDataContext()\n const { fetchLinks } = useFetchLinksContext()\n const isUserLoaded = useIsUserLoadedContext()\n\n const [isLoadingShorts, setIsLoadingShorts] = useState(true)\n const [isLoadingMoreShorts, setIsLoadingMoreShorts] = useState(false)\n const [searchQuery, setSearchQuery] = useState('')\n const [skip, setSkip] = useState(0)\n const [defaultShorts, setDefaultShorts] = useState([])\n const [shortSearchResult, setShortSearchResult] = useState([])\n const [hasMoreShorts, setHasMoreShorts] = useState(true)\n const [shouldShowNoShorts, setShouldShowNoShorts] = useState(false)\n const [lifetimeAnalyticsState, setLifetimeAnalyticsState] = useState({\n isLoading: true,\n clicks: 0,\n sales: 0,\n revenue: 0,\n totalTax: 0\n })\n const [isFirstRender, setIsFirstRender] = useState(true) // used to control the appearance of the loader only in the first render\n const [isLinkContentDialogOpen, setIsLinkContentDialogOpen] = useState(false)\n\n const typingTimeoutRef = useRef(null)\n const topbarRef = useRef(null)\n const linksListRef = useRef(null)\n const analyticsStripRef = useRef(null)\n\n useEffect(() => {\n if (hasShopifyStore()) {\n if (isUserLoaded) {\n // when the splash is no longer shown, load the short again to refresh the short collection\n fetchFirstShorts()\n }\n\n if (userDetails?.analytics?.shortsLifetimeAnalytics) {\n setLifetimeAnalyticsState({\n isLoading: false,\n clicks: userDetails?.analytics?.shortsLifetimeAnalytics?.clicks,\n sales: userDetails?.analytics?.shortsLifetimeAnalytics?.sales,\n revenue: userDetails?.analytics?.shortsLifetimeAnalytics?.revenue,\n totalTax: userDetails?.analytics?.shortsLifetimeAnalytics?.totalTax,\n currency: getCurrencySymbol(userDetails?.analytics?.currency)\n })\n } else {\n GetBusinessAnalytics(userDetails?.businessId)\n .then(response => {\n const linksClicks = response?.looks_analytics?.visits ?? 0\n const linksSales = response?.looks_analytics?.checkouts ?? 0\n const linksCheckouts = response?.looks_analytics?.requested_checkouts ?? 0\n const linksRevenue = response?.looks_analytics?.revenue ?? 0\n const linksTotalTax = response?.looks_analytics?.total_tax ?? 0\n const linksData = response?.looks_analytics?.data ?? []\n\n const shortsClicks = response?.shorts_analytics?.visits ?? 0\n const shortsSales = response?.shorts_analytics?.checkouts ?? 0\n const shortsCheckouts = response?.shorts_analytics?.requested_checkouts ?? 0\n const shortsRevenue = response?.shorts_analytics?.revenue ?? 0\n const shortsTotalTax = response?.shorts_analytics?.total_tax ?? 0\n const shortsData = response?.shorts_analytics?.data ?? []\n\n const currency = response?.currency ?? DEFAULT_CURRENCY_CODE\n setLifetimeAnalyticsState({\n isLoading: false,\n clicks: shortsClicks,\n sales: shortsSales,\n checkouts: shortsCheckouts,\n revenue: shortsRevenue,\n totalTax: shortsTotalTax,\n currency: getCurrencySymbol(currency)\n })\n setUserDetails(prev => ({\n ...prev,\n analytics: {\n ...prev.analytics,\n currency: currency,\n linksLifetimeAnalytics: {\n clicks: linksClicks,\n sales: linksSales,\n checkouts: linksCheckouts,\n revenue: linksRevenue,\n totalTax: linksTotalTax,\n data: linksData\n },\n shortsLifetimeAnalytics: {\n clicks: shortsClicks,\n sales: shortsSales,\n checkouts: shortsCheckouts,\n revenue: shortsRevenue,\n totalTax: shortsTotalTax,\n data: shortsData\n },\n influencerInsights: response?.influencers_insights?.map(influencer_insight => extractExtendedInfluencerAnalytics(influencer_insight))\n }\n }))\n })\n .catch(error => {\n console.log(error)\n })\n }\n } else {\n history.replace(HOME_PAGE_URL)\n }\n }, [])\n\n useEffect(() => {\n setShouldShowNoShorts(false)\n setLinks([], true, true)\n setIsLoadingShorts(true)\n setHasMoreShorts(true)\n clearTypingTimeout(typingTimeoutRef.current)\n if (searchQuery) {\n typingTimeoutRef.current = setTimeout(() => {\n fetchLinks(searchQuery, 0, false, LINK_TYPES.SHORT, linksData => {\n setShouldShowNoShorts(true)\n setLinks(linksData?.links, true, true)\n setHasMoreShorts(linksData?.links.length === SHORTS_PAGE_SHORTS_FILTER_COUNT)\n setIsLoadingShorts(false)\n })\n }, EDIT_LINK_PAGE_PRODUCT_SEARCH_REQUEST_SEND_DELAY_MILLISECONDS)\n } else {\n setShortSearchResult(defaultShorts)\n if (!isFirstRender) { // On the first render, the next line will be executed unless we check for first render, because in this case 'searchQuery' is falsy\n setIsLoadingShorts(false)\n }\n }\n setIsFirstRender(false)\n\n return () => {\n clearTypingTimeout(typingTimeoutRef.current)\n }\n }, [searchQuery])\n\n useEffect(() => {\n if (finishedUpdatingObject) {\n updateShort(objectToSave)\n } else if (finishedCreatingObject) {\n addNewShort(objectToSave)\n }\n }, [finishedUpdatingObject, finishedCreatingObject])\n\n function fetchFirstShorts() {\n setIsLoadingShorts(true)\n fetchLinks(searchQuery, 0, true, LINK_TYPES.SHORT, linksData => {\n setShouldShowNoShorts(true)\n setDefaultShortsList(linksData?.links)\n setLinks(linksData?.links, false, true)\n setHasMoreShorts(linksData?.links.length === SHORTS_PAGE_SHORTS_FILTER_COUNT)\n setIsLoadingShorts(false)\n })\n }\n\n function setDefaultShortsList(links) {\n setDefaultShorts([...(links.map(link => extractLinkData(link)))])\n }\n\n function setLinks(links, shouldResetSkip = false, shouldOverrideLinks = false) {\n if (!links) {\n return\n }\n\n if (shouldOverrideLinks) {\n setShortSearchResult([...(links.map(link => extractLinkData(link)))])\n } else {\n setShortSearchResult(prev => ([\n ...prev,\n ...(links.map(link => extractLinkData(link)))\n ]))\n }\n if (shouldResetSkip)\n setSkip(0)\n else\n setSkip(prev => prev + links.length)\n }\n\n function clearTypingTimeout(timeout) {\n timeout && clearTimeout(timeout)\n }\n\n function clearSearchQuery() {\n setSearchQuery('')\n }\n\n function handleChange(e) {\n setSearchQuery(e.target.value)\n }\n\n function onAddLinkButtonClick() {\n setIsLinkContentDialogOpen(true)\n }\n\n function hasShopifyStore() {\n return userDetails.brand && Object.keys(userDetails.brand).length > 0\n }\n\n function hasNoShorts() {\n return !defaultShorts || defaultShorts.length === 0\n }\n\n function hasNoShortsResults() {\n return !shortSearchResult || shortSearchResult.length === 0\n }\n\n function renderShortsContent() {\n if (hasNoShorts()) {\n return <>\n {\n shouldShowNoShorts && <NoItemsFound\n isEmbeddedIcon={true}\n image={<ShortsImage className='shorts-page-no-shorts-image' />}\n title={t('SHORTS_PAGE_NO_SHORTS_TITLE')}\n buttonText={t('SHORTS_PAGE_NO_SHORTS_CREATE_LINK_BUTTON_TEXT')}\n showButton={userDetails?.isAdmin}\n addItemButtonClickHandler={onAddLinkButtonClick}\n />\n }\n </>\n } else {\n if (searchQuery && hasNoShortsResults()) {\n return <>\n {\n shouldShowNoShorts && <div className={isMobile ? 'mobile-shorts-page-no-results-found-container' : 'shorts-page-no-results-found-container'}>\n <div className=\"shorts-page-no-results-found-content\">\n <div className=\"shorts-page-no-results-found-text\">{t('ADD_PRODUCTS_DIALOG_NO_RESULTS_FOUND_TEXT')}</div>\n </div>\n </div>\n }\n </>\n }\n return <div className={isMobile ? 'mobile-shorts-page-content-shorts-list' : 'shorts-page-content-shorts-list'}>\n {\n shortSearchResult?.map(short => <ShortItem\n key={short?.linkId}\n shortId={short?.linkId}\n image={short?.images ? short?.images[0] : ''}\n defaultImage={short?.defaultImage}\n influencerImage={short?.influencerImage}\n views={short?.views}\n checkouts={short?.checkouts}\n revenue={short?.revenue}\n createdAt={short?.createdAt}\n currency={short?.currency}\n isLinkExpired={short?.isLinkExpired}\n influencerUsername={short?.influencerUsername}\n title={short?.title}\n url={short?.shoppingRedirectUrl}\n urlType={short?.urlType}\n onDeleteLink={deleteShort}\n />)\n }\n </div>\n }\n }\n\n function deleteShort(shortId) {\n setShortSearchResult(prev => prev.filter(short => short?.linkId !== shortId))\n setDefaultShorts(prev => prev.filter(short => short?.linkId !== shortId))\n setIsLoadingShorts(false)\n setRecentShorts([])\n }\n\n function updateShort(updatedShort) {\n setShortSearchResult(prev => prev.map(short => short?.linkId === updatedShort.linkId ? updatedShort : short))\n setDefaultShorts(prev => prev.map(short => short?.linkId === updatedShort.linkId ? updatedShort : short))\n }\n\n function addNewShort(newShort) {\n setShortSearchResult(prev => [newShort, ...prev])\n setDefaultShorts(prev => [newShort, ...prev])\n }\n\n function handleLinksScroll(e) {\n const scrollPosition = e.target.scrollTop\n const thresholdScrollHeight = linksListRef?.current?.clientHeight - (LINKS_PAGE_FETCH_NEXT_LINKS_THRESHOLD_ROW_COUNT * SHORT_ITEM_HEIGHT_PX) + (topbarRef?.current?.clientHeight + analyticsStripRef?.current?.clientHeight) - (isMobile ? 0.4 * window.innerHeight : 0)\n if (!isLoadingMoreShorts && hasMoreShorts && scrollPosition + e.target.clientHeight >= thresholdScrollHeight) {\n setIsLoadingMoreShorts(true)\n fetchLinks(searchQuery, shortSearchResult?.length, false, LINK_TYPES.SHORT, linksData => {\n setLinks(linksData?.links, false, false)\n setHasMoreShorts(linksData?.links.length === SHORTS_PAGE_SHORTS_FILTER_COUNT)\n setIsLoadingMoreShorts(false)\n })\n }\n }\n\n function renderLoaderRow() {\n return <div className={isMobile ? 'mobile-shorts-page-loader-row' : 'shorts-page-loader-row'}>\n <Loader styles={{\n width: isMobile ? '25px' : '30px',\n height: isMobile ? '25px' : '30px'\n }} />\n </div>\n }\n\n function closeContentDialog() {\n setIsLinkContentDialogOpen(false)\n }\n\n return (\n <>\n {!isMobile ?\n <div onScroll={handleLinksScroll} className='shorts-page-container' style={{ height: hasShopifyStore() ? null : '100vh', maxWidth: hasShopifyStore() ? '100%' : `${PAGE_DEFAULT_MAX_WIDTH}px`, margin: '0 auto' }}>\n {\n hasShopifyStore() ? (\n <>\n {isLoadingShorts && <DashboardLoader />}\n <div ref={topbarRef} className=\"shorts-page-topbar\">\n <div className=\"shorts-page-topbar-store-name-container\">\n {\n userDetails?.businessLogo ? <ImageBox\n className='shorts-page-topbar-store-image'\n image={userDetails?.businessLogo}\n /> : <div className=\"shorts-page-topbar-store-name\">{userDetails?.businessName ?? \"\"}</div>\n }\n </div>\n <div className=\"shorts-page-topbar-buttons-container\">\n {\n !hasNoShorts() && <>\n <div className=\"shorts-page-topbar-search-box\" style={{ width: isMobile ? '100%' : '300px' }}>\n <input className='shorts-page-topbar-search-box-input' value={searchQuery} type='text' onChange={handleChange} placeholder={t('ADD_PRODUCTS_DIALOG_TOPBAR_SEARCH_BOX_PLACEHOLDER')} />\n {\n searchQuery.length === 0 ?\n <CiSearch className='shorts-page-topbar-search-box-image' /> :\n <IoCloseOutline className='edit-link-section-add-products-dialog-topbar-search-box-image close' onClick={clearSearchQuery} />\n }\n </div>\n </>\n }\n {(userDetails?.isAdmin || (!userDetails?.isAdmin && userDetails?.permissions?.isActiveInfluencer)) && <div className=\"shorts-page-topbar-create-new-link-button shorts-page-topbar-button\" onClick={onAddLinkButtonClick}>{t('SHORTS_PAGE_CREATE_NEW_SHORT_BUTTON_TEXT')}</div>}\n </div>\n </div>\n <AnalyticsStrip\n analytics={lifetimeAnalyticsState}\n currency={lifetimeAnalyticsState?.currency}\n isLoadingAnalytics={lifetimeAnalyticsState.isLoading}\n containerRef={analyticsStripRef}\n />\n <div ref={linksListRef} className={`shorts-page-content ${hasNoShorts() ? 'no-shorts-content' : ''}`}>\n {renderShortsContent()}\n {isLoadingMoreShorts && renderLoaderRow()}\n </div>\n </>\n ) : <ShopifyConnect hasShopifyStore={false} />\n }\n </div> \n :\n hasShopifyStore() ? <>\n {isLoadingShorts && <DashboardLoader />}\n <div onScroll={handleLinksScroll} className='mobile-shorts-page-container'>\n {\n !hasNoShorts() && <>\n <div ref={topbarRef} className='mobile-shorts-page-topbar-search-box-container'>\n <div className=\"mobile-shorts-page-topbar-search-box\">\n <input className='shorts-page-topbar-search-box-input' value={searchQuery} type='text' onChange={handleChange} placeholder={t('ADD_PRODUCTS_DIALOG_TOPBAR_SEARCH_BOX_PLACEHOLDER')} />\n {\n searchQuery.length === 0 ?\n <CiSearch className='shorts-page-topbar-search-box-image' /> :\n <IoCloseOutline className='shorts-page-topbar-search-box-image close' onClick={clearSearchQuery} />\n }\n </div>\n </div>\n <div className=\"separator-line\"></div>\n </>\n }\n <AnalyticsStrip\n analytics={lifetimeAnalyticsState}\n currency={lifetimeAnalyticsState?.currency}\n isLoadingAnalytics={lifetimeAnalyticsState.isLoading}\n containerRef={analyticsStripRef}\n />\n <div ref={linksListRef} className={`mobile-shorts-page-content ${hasNoShorts() ? 'mobile-no-shorts-content' : ''}`}>\n {renderShortsContent()}\n {isLoadingMoreShorts && renderLoaderRow()}\n </div>\n </div>\n </> : <ShopifyConnect hasShopifyStore={false} />\n }\n <ContentDialog\n isDialogOpen={isLinkContentDialogOpen}\n handleDialogClose={closeContentDialog}\n mode={VIEW_MODES.CREATE}\n contentType={CONTENT_TYPES.SHORT}\n />\n </>\n )\n}","import React, { useEffect, useRef, useState } from 'react'\nimport './RegisterStorePage.css'\nimport { Trans, useTranslation } from 'react-i18next'\nimport { useHistoryContext } from 'contexts/History'\nimport { EMAIL_PATTERN_REGEX } from 'constants/regex.constants'\nimport {\n BOXED_MESSAGE_TYPES,\n INPUT_VALIDATION_INDICATIONS,\n USERNAME_FIELD_PREFIX,\n SIGN_UP_PAGE_VALIDATE_FIELD_REQUEST_SEND_DELAY_MILLISECONDS,\n NOTIFY_STORE_CONNECT_FINISH_MESSAGE,\n} from 'constants/general.constants'\nimport LoaderButton from 'components/LoaderButton/LoaderButton'\nimport { useAuthContext } from 'contexts/User'\nimport BoxedMessage from 'components/BoxedMessage/BoxedMessage'\nimport { containsWhitespace, formatUsername } from 'utils/utils'\nimport PrivaciesFooterText from 'components/PrivaciesFooterText/PrivaciesFooterText'\nimport { ValidateUsername } from 'api/auth/auth'\nimport PaydinDialog from 'dialogs/PaydinDialog/PaydinDialog'\nimport EditFieldSectionInput from 'components/EditFieldSectionInput/EditFieldSectionInput'\nimport PasswordInput from 'components/PasswordInput/PasswordInput'\nimport AlreadyHaveAccount from 'components/AlreadyHaveAccount/AlreadyHaveAccount'\nimport { registerAndConnectStore, verifyStore } from 'api/store/store'\nimport { getQueryVariable } from 'services/SystemService'\nimport { AUTH_QUERY_PARAMETER_KEY, LOGIN_STORE_PAGE_URL, PAYLINK_SITE_URL } from 'constants/routes.constants'\nimport { LocalSharedPreferences } from 'services/SharedPreferences'\nimport { AUTH_TOKEN_KEY_LOCAL_STORAGE } from 'constants/storage.constants'\nimport LoaderPage from 'pages/LoaderPage/LoaderPage'\n\nexport default function RegisterStorePage() {\n const { t } = useTranslation()\n const history = useHistoryContext()\n const { verify } = useAuthContext()\n\n const [isSignUpInProcess, setIsSignUpInProcess] = useState(false)\n const [isVerifyingStore, setIsVerifyingStore] = useState(true)\n const [isStoreVerified, setIsStoreVerified] = useState(false)\n const [inputState, setInputState] = useState({\n username: '',\n email: '',\n password: ''\n })\n const [boxedMessageState, setBoxedMessageState] = useState({\n isOpen: false,\n message: '',\n type: BOXED_MESSAGE_TYPES.ERROR\n })\n const [usernameValidationState, setUsernameValidationState] = useState({\n isValidating: false,\n validationResult: INPUT_VALIDATION_INDICATIONS.NO_INDICATION\n })\n const [isPasswordValid, setIsPasswordValid] = useState(false)\n const [dialogState, setDialogState] = useState({\n isOpen: false,\n handleDialogClose: closeDialog,\n title: '',\n message: '',\n leftButtonText: '',\n rightButtonText: '',\n rightButtonClickHandler: () => { }\n })\n const [validationErrorState, setValidationErrorState] = useState({\n username: '',\n email: ''\n })\n const [auth, setAuth] = useState('')\n\n const typingTimeoutRef = useRef(null)\n\n useEffect(() => {\n const authParam = getQueryVariable(AUTH_QUERY_PARAMETER_KEY, \"\")\n if (!authParam) {\n navigateToPaylinkshopSite()\n return\n }\n\n setAuth(authParam)\n setIsVerifyingStore(true)\n verifyStore(authParam)\n .then(response => {\n setEmail(response?.data?.email ?? '')\n setIsVerifyingStore(false)\n setIsStoreVerified(true)\n })\n .catch(error => {\n console.log(error)\n setIsVerifyingStore(false)\n setDialogState(prev => ({\n ...prev,\n isOpen: true,\n title: t('REGISTER_STORE_PAGE_VERIFY_STORE_FAILED_DIALOG_TITLE'),\n message: t('REGISTER_STORE_PAGE_VERIFY_STORE_FAILED_DIALOG_MESSAGE'),\n leftButtonText: t('REGISTER_STORE_PAGE_VERIFY_STORE_FAILED_DIALOG_RIGHT_BUTTON_TEXT'),\n onLeftButtonClick: navigateToPaylinkshopSite\n }))\n })\n }, [])\n\n function navigateToPaylinkshopSite() {\n window.location.href = PAYLINK_SITE_URL\n }\n\n function closeDialog() {\n setDialogState(prev => ({\n ...prev,\n isOpen: false\n }))\n }\n\n function clearTypingTimeout(timeout) {\n timeout && clearTimeout(timeout)\n }\n\n function setUsername(username) {\n clearTypingTimeout(typingTimeoutRef.current)\n\n setInputState(prev => {\n return {\n ...prev,\n username: formatUsername(username),\n }\n })\n\n if (username.length === 0) {\n setUsernameValidationState(prev => ({\n ...prev,\n validationResult: INPUT_VALIDATION_INDICATIONS.NO_INDICATION\n }))\n return\n }\n\n typingTimeoutRef.current = setTimeout(() => {\n validateUsername(username)\n }, SIGN_UP_PAGE_VALIDATE_FIELD_REQUEST_SEND_DELAY_MILLISECONDS)\n }\n\n function setEmail(email) {\n setInputState(prev => {\n return {\n ...prev,\n email: email.replace(/\\s/g, ''),\n }\n })\n }\n\n function setPassword(password) {\n setInputState(prev => {\n return {\n ...prev,\n password,\n }\n })\n }\n\n function handleSignUp() {\n setBoxedMessageState(prev => ({\n ...prev,\n isOpen: false\n }))\n setIsSignUpInProcess(true)\n registerAndConnectStore(auth, inputState.username, inputState.email, inputState.password)\n .then(response => {\n LocalSharedPreferences.set_key(AUTH_TOKEN_KEY_LOCAL_STORAGE, response?.data?.token)\n setBoxedMessageState({\n isOpen: true,\n message: t('REGISTER_STORE_PAGE_REGISTER_SUCCESS_MESSAGE_TEXT'),\n type: BOXED_MESSAGE_TYPES.INFO\n })\n if (window?.opener) {\n window.opener.postMessage(NOTIFY_STORE_CONNECT_FINISH_MESSAGE, '*')\n }\n navigateToPaylinkshopSite()\n })\n .catch(_ => {\n setIsSignUpInProcess(false)\n setBoxedMessageState({\n isOpen: true,\n message: t('REGISTER_STORE_PAGE_REGISTER_ERROR_MESSAGE_TEXT'),\n type: BOXED_MESSAGE_TYPES.ERROR\n })\n })\n }\n\n function isUsernameValid() {\n return !containsWhitespace(inputState.username)\n }\n\n function isEmailValid(email) {\n return EMAIL_PATTERN_REGEX.test(email)\n }\n\n function isAbleToSignUp() {\n return (\n usernameValidationState.validationResult === INPUT_VALIDATION_INDICATIONS.VALID &&\n isEmailValid(inputState.email) &&\n isPasswordValid\n )\n }\n\n function validateUsername(username) {\n if (!isUsernameValid(username)) {\n setUsernameValidationState({\n isValidating: false,\n validationResult: INPUT_VALIDATION_INDICATIONS.INVALID\n })\n setValidationErrorState(prev => ({\n ...prev,\n username: t('REGISTER_STORE_PAGE_INCORRECT_USERNAME_FORMAT_VALIDATION_ERROR_MESSAGE')\n }))\n } else {\n setUsernameValidationState(prev => ({\n ...prev,\n isValidating: true\n }))\n ValidateUsername(username)\n .then(_ => {\n setUsernameValidationState({\n isValidating: false,\n validationResult: INPUT_VALIDATION_INDICATIONS.VALID\n })\n })\n .catch(error => {\n setUsernameValidationState({\n isValidating: false,\n validationResult: INPUT_VALIDATION_INDICATIONS.INVALID\n })\n setValidationErrorState(prev => ({\n username: <Trans\n i18nKey='REGISTER_STORE_PAGE_DUPLICATE_USERNAME_VALIDATION_ERROR_MESSAGE'\n components={{\n p: <div onClick={navigate} className='register-store-page-username-validation-login-button' />\n }}\n />\n }))\n })\n }\n }\n\n function navigate() {\n history.push(getLoginStoreNavigationUrl())\n }\n\n function getLoginStoreNavigationUrl() {\n return `${LOGIN_STORE_PAGE_URL}?${AUTH_QUERY_PARAMETER_KEY}=${auth}`\n }\n\n return (\n <div className='register-store-page-container'>\n {isVerifyingStore && <LoaderPage isFullScreen={true} />}\n {isStoreVerified &&\n <form dir={t('direction.dir')} className=\"register-store-page-content\">\n <div className=\"register-store-page-title auth-page-title\">{t('REGISTER_STORE_PAGE_TITLE')}</div>\n {\n boxedMessageState.isOpen && <BoxedMessage\n message={boxedMessageState.message}\n type={boxedMessageState.type}\n />\n }\n <div className=\"register-store-page-fields-form\">\n <EditFieldSectionInput\n title={t('REGISTER_STORE_EMAIL_INPUT_PLACEHOLDER')}\n value={inputState.email}\n setValue={setEmail}\n enlargedTextField={true}\n isDisabled={true}\n id=\"email\"\n />\n <EditFieldSectionInput\n title={t('REGISTER_STORE_USERNAME_INPUT_TITLE')}\n placeholder={t('REGISTER_STORE_USERNAME_INPUT_PLACEHOLDER')}\n prefix={USERNAME_FIELD_PREFIX}\n isEmbeddedPrefix={true}\n value={inputState.username}\n setValue={setUsername}\n hasValidation={true}\n isValidating={usernameValidationState.isValidating}\n validationStatus={usernameValidationState.validationResult}\n validationErrorMessage={validationErrorState.username}\n enlargedTextField={true}\n id=\"username\"\n />\n <PasswordInput\n title={t('REGISTER_STORE_PASSWORD_INPUT_PLACEHOLDER')}\n value={inputState.password}\n setValue={setPassword}\n setValidationStatus={setIsPasswordValid}\n />\n </div>\n <LoaderButton\n className=\"register-store-page-register-button\"\n buttonText={t('REGISTER_STORE_PAGE_SIGN_UP_BUTTON_TEXT')}\n isLoading={isSignUpInProcess}\n renderAsButton={true}\n isDisabled={!isAbleToSignUp()}\n onClick={handleSignUp}\n />\n <AlreadyHaveAccount navigationUrl={getLoginStoreNavigationUrl()} />\n <PrivaciesFooterText />\n </form>\n }\n <PaydinDialog\n isDialogOpen={dialogState.isOpen}\n handleDialogClose={dialogState.handleDialogClose}\n title={dialogState.title}\n message={dialogState.message}\n leftButtonText={dialogState.leftButtonText}\n onLeftButtonClick={dialogState.onLeftButtonClick}\n isLeftButtonWithLoader={false}\n closeOnLeftClick={false}\n isCloseOnTouchOutside={false}\n />\n </div>\n )\n}","import React, { useEffect, useRef, useState } from 'react'\nimport './LoginStorePage.css'\nimport EditFieldSectionInput from 'components/EditFieldSectionInput/EditFieldSectionInput'\nimport { useTranslation } from 'react-i18next'\nimport { useHistoryContext } from 'contexts/History'\nimport { useAuthContext } from 'contexts/User'\nimport LoaderButton from 'components/LoaderButton/LoaderButton'\nimport PrivaciesFooterText from 'components/PrivaciesFooterText/PrivaciesFooterText'\nimport { BOXED_MESSAGE_TYPES, NOTIFY_STORE_CONNECT_FINISH_MESSAGE, USERNAME_FIELD_PREFIX, USER_PASSWORD_MIN_LENGTH } from 'constants/general.constants'\nimport { formatUsername } from 'utils/utils'\nimport { AUTH_QUERY_PARAMETER_KEY, FORGOT_PASSWORD_PAGE_URL, HOME_PAGE_URL, PAYLINK_SITE_URL, REGISTER_STORE_PAGE_URL } from 'constants/routes.constants'\nimport { getQueryVariable } from 'services/SystemService'\nimport { loginAndConnectStore, verifyStore } from 'api/store/store'\nimport LoaderPage from 'pages/LoaderPage/LoaderPage'\nimport { LocalSharedPreferences } from 'services/SharedPreferences'\nimport BoxedMessage from 'components/BoxedMessage/BoxedMessage'\nimport { AUTH_TOKEN_KEY_LOCAL_STORAGE } from 'constants/storage.constants'\nimport DontHaveAccount from 'components/DontHaveAccount/DontHaveAccount'\nimport PaydinDialog from 'dialogs/PaydinDialog/PaydinDialog'\n\nexport default function LoginStorePage() {\n const { t } = useTranslation()\n const history = useHistoryContext()\n const { verify } = useAuthContext()\n\n const [isAbleToLogin, setIsAbleToLogin] = useState(false)\n const [isLoginInProcess, setIsLoginInProcess] = useState(false)\n const [isVerifyingStore, setIsVerifyingStore] = useState(true)\n const [isStoreVerified, setIsStoreVerified] = useState(false)\n const [inputState, setInputState] = useState({\n username: '',\n password: ''\n })\n const [auth, setAuth] = useState('')\n const [boxedMessageState, setBoxedMessageState] = useState({\n isOpen: false,\n message: ''\n })\n const [dialogState, setDialogState] = useState({\n isOpen: false,\n handleDialogClose: closeDialog,\n title: '',\n message: '',\n leftButtonText: '',\n rightButtonText: '',\n onLeftButtonClick: () => { }\n })\n\n const passwordInputRef = useRef(null)\n\n useEffect(() => {\n const authParam = getQueryVariable(AUTH_QUERY_PARAMETER_KEY, \"\")\n if (!authParam) {\n navigateToPaylinkshopSite()\n return\n }\n\n setAuth(authParam)\n setIsVerifyingStore(true)\n verifyStore(authParam)\n .then(_ => {\n setIsVerifyingStore(false)\n setIsStoreVerified(true)\n })\n .catch(error => {\n console.log(error)\n setIsVerifyingStore(false)\n setDialogState(prev => ({\n ...prev,\n isOpen: true,\n title: t('LOGIN_STORE_PAGE_VERIFY_STORE_FAILED_DIALOG_TITLE'),\n message: t('LOGIN_STORE_PAGE_VERIFY_STORE_FAILED_DIALOG_MESSAGE'),\n leftButtonText: t('LOGIN_STORE_PAGE_VERIFY_STORE_FAILED_DIALOG_RIGHT_BUTTON_TEXT'),\n onLeftButtonClick: navigateToPaylinkshopSite\n }))\n })\n }, [])\n\n useEffect(() => {\n setIsAbleToLogin(\n isUsernameValid() &&\n isPasswordValid()\n )\n }, [inputState])\n\n function navigateToPaylinkshopSite() {\n window.location.href = PAYLINK_SITE_URL\n }\n\n function closeDialog() {\n setDialogState(prev => ({\n ...prev,\n isOpen: false\n }))\n }\n\n function isUsernameValid() {\n return inputState.username.length > 0\n }\n\n function isPasswordValid() {\n return inputState.password.length >= USER_PASSWORD_MIN_LENGTH\n }\n\n function handleLogin() {\n passwordInputRef.current.blur()\n\n setIsLoginInProcess(true)\n loginAndConnectStore(auth, inputState.username, inputState.password)\n .then(response => {\n LocalSharedPreferences.set_key(AUTH_TOKEN_KEY_LOCAL_STORAGE, response?.data?.token)\n verify(() => {\n if (window?.opener) {\n window.opener.postMessage(NOTIFY_STORE_CONNECT_FINISH_MESSAGE, '*')\n }\n setIsLoginInProcess(false)\n history.push(HOME_PAGE_URL)\n }, () => {\n setIsLoginInProcess(false)\n navigateToPaylinkshopSite()\n })\n })\n .catch(_ => {\n setIsLoginInProcess(false)\n setBoxedMessageState({\n isOpen: true,\n message: t('LOGIN_STORE_PAGE_REGISTER_ERROR_MESSAGE_TEXT')\n })\n })\n }\n\n function navigateToForgotPassword() {\n history.push(FORGOT_PASSWORD_PAGE_URL)\n }\n\n function setPassword(password) {\n setInputState(prev => {\n return {\n ...prev,\n password,\n }\n })\n }\n\n function setUsername(username) {\n setInputState(prev => {\n return {\n ...prev,\n username: formatUsername(username),\n }\n })\n }\n\n return (\n <div className='login-store-page-container'>\n {isVerifyingStore && <LoaderPage isFullScreen={true} />}\n {\n isStoreVerified && <form dir={t('direction.dir')} className=\"login-page-content\">\n <div className=\"login-page-title auth-page-title\">{t('LOGIN_PAGE_TITLE')}</div>\n {\n boxedMessageState.isOpen && <BoxedMessage\n message={boxedMessageState.message}\n type={BOXED_MESSAGE_TYPES.ERROR}\n />\n }\n <div className=\"login-page-fields-form\">\n <EditFieldSectionInput\n title={t('LOGIN_PAGE_USERNAME_INPUT_PLACEHOLDER')}\n prefix={USERNAME_FIELD_PREFIX}\n isEmbeddedPrefix={true}\n value={inputState.username}\n setValue={setUsername}\n enlargedTextField={true}\n id=\"username\"\n />\n <EditFieldSectionInput\n title={t('LOGIN_PAGE_PASSWORD_INPUT_PLACEHOLDER')}\n inputRef={passwordInputRef}\n value={inputState.password}\n setValue={setPassword}\n isPassword={true}\n hasValidation={true}\n enlargedTextField={true}\n id=\"password\"\n titleButton={<>\n <div className=\"login-page-forgot-password-button\" onClick={navigateToForgotPassword}>{t('LOGIN_PAGE_FORGOT_PASSWORD_BUTTON_TEXT')}</div>\n </>}\n />\n </div>\n <LoaderButton\n className=\"login-page-login-button\"\n buttonText={t('LOGIN_STORE_PAGE_LOGIN_BUTTON_TEXT')}\n isLoading={isLoginInProcess}\n renderAsButton={true}\n isDisabled={!isAbleToLogin}\n onClick={handleLogin} />\n\n <DontHaveAccount navigationUrl={`${REGISTER_STORE_PAGE_URL}?${AUTH_QUERY_PARAMETER_KEY}=${auth}`} />\n <PrivaciesFooterText />\n </form>\n }\n <PaydinDialog\n isDialogOpen={dialogState.isOpen}\n handleDialogClose={dialogState.handleDialogClose}\n title={dialogState.title}\n message={dialogState.message}\n leftButtonText={dialogState.leftButtonText}\n onLeftButtonClick={dialogState.onLeftButtonClick}\n isLeftButtonWithLoader={false}\n closeOnLeftClick={false}\n isCloseOnTouchOutside={false}\n />\n </div>\n )\n}","import { FormControlLabel, Radio, RadioGroup } from '@mui/material'\nimport { PAYDIN_RADIO_BUTTON_GROUP_ALIGNMENTS } from 'constants/general.constants'\nimport React from 'react'\n\n/**\n * Represents a generic radio button group.\n * @param {string} selectedValue - The currently selected radio button's value\n * @param {function} onSelectedValueChange - A function for setting currently selected radio button's value\n * @param {array} radioButtons - The list of radio buttons for display\n * @param {string} alignemnet - A description of the radio buttons alignment\n */\nexport default function PaydinRadioButtonGroup({\n selectedValue,\n onSelectedValueChange = () => { },\n radioButtons = [],\n alignemnet = PAYDIN_RADIO_BUTTON_GROUP_ALIGNMENTS.COLUMN\n}) {\n \n function handleChange(e) {\n onSelectedValueChange(e.target.value)\n }\n\n return (\n <RadioGroup\n row={alignemnet === PAYDIN_RADIO_BUTTON_GROUP_ALIGNMENTS.ROW}\n value={selectedValue}\n onChange={handleChange}\n >\n {\n radioButtons?.map(radio => <FormControlLabel\n key={radio?.value}\n value={radio?.value}\n control={<Radio color=\"primary\" />}\n label={radio?.label}\n labelPlacement={radio?.placement ?? 'end'}\n disabled={radio?.disabled ?? false}\n />)\n }\n </RadioGroup>\n )\n}","import PaydinRadioButtonGroup from 'components/PaydinRadioButtonGroup/PaydinRadioButtonGroup'\nimport React from 'react'\nimport { useTranslation } from 'react-i18next'\n\n/**\n * Represents a radio group for the shop swap section in settings page.\n * Uses {@link PaydinRadioButtonGroup} component.\n * @param {string} autoSwapEnabled - The currently selected radio button's value\n * @param {function} setAutoSwap - A function for setting currently selected radio button's value\n */\nexport default function AutoSwapRadioGroup({\n autoSwapEnabled,\n setAutoSwap = () => { }\n}) {\n const { t } = useTranslation()\n\n function onSelectedValueChange(value) {\n setAutoSwap(value === 'on')\n }\n\n return (\n <PaydinRadioButtonGroup\n selectedValue={autoSwapEnabled ? 'on' : 'off'}\n onSelectedValueChange={onSelectedValueChange}\n radioButtons={[\n {\n label: t('AUTO_SWAP_RADIO_GROUP_BUTTON_OFF_LABEL'),\n value: 'off'\n },\n {\n label: t('AUTO_SWAP_RADIO_GROUP_BUTTON_ON_LABEL'),\n value: 'on'\n }\n ]}\n />\n )\n}","import React from \"react\";\nimport \"./MultipleSelectHoizontalLine.css\"; // Import the CSS for styling\nimport Checkbox from '@mui/material/Checkbox';\nimport RadioButtonCheckedIcon from '@mui/icons-material/RadioButtonChecked';\nimport RadioButtonUncheckedIcon from '@mui/icons-material/RadioButtonUnchecked';\n\nexport default function MultipleSelectHoizontalLine({ options, selectedValue, setSelectedValue }) {\n return (\n <div className=\"multiple-select-hoizontal-line-container\">\n <div className=\"multiple-select-hoizontal-line-line\"></div> {/* Horizontal line */}\n {Object.keys(options).map((option, index) => (\n <label key={options[option].title} className={`multiple-select-hoizontal-line-option ${index === 0 && Object.keys(options)?.length > 1 ? \"first\" : \"\"}${index === Object.keys(options)?.length - 1 && Object.keys(options)?.length > 1 ? \"last\" : \"\"}`} style={{ width: `100px` }}>\n <Checkbox\n icon={<RadioButtonUncheckedIcon />}\n checkedIcon={<RadioButtonCheckedIcon />}\n checked={selectedValue === option}\n onChange={() => setSelectedValue(option)}\n sx={{\n background: \"white\", // Ensures hover background color white\n padding: \"0px\",\n \"&:hover\": {\n background: \"white\", // Ensures hover background color white\n },\n \"&.Mui-checked\": {\n background: \"white\", // Ensures the selected state remains white\n },\n }}\n />\n <span className=\"multiple-select-hoizontal-line-option-label\">{options[option].title}</span>\n <span className=\"multiple-select-hoizontal-line-option-sublabel allow-2-lines\">{options[option].subtitle}</span>\n </label>\n ))}\n </div>\n );\n};\n\n","import React, { useEffect, useState } from 'react'\nimport './SettingsPage.css'\nimport { isMobile } from 'utils/deviceUtils'\nimport ContentDialogTopbar from 'components/ContentDialogTopbar/ContentDialogTopbar'\nimport AccountSection from 'components/AccountSection/AccountSection'\nimport { ACCOUNT_PAGE_FACEBOOK_PIXEL_ID_INPUT_NAME, ACCOUNT_PAGE_GOOGLE_ANALYTICS_ID_INPUT_NAME, ACCOUNT_PAGE_SHOP_SHIPPING_AND_RETURNS_INPUT_NAME, ACCOUNT_PAGE_URL_PARAMS_INPUT_NAME, DASHBOARD_SIDEBAR_USER_MENU_WIDTH, PRICING_PLAN_DATA, SETTINGS_PAGES_BUTTON_LOADER_CIRCLE_COLOR, SETTINGS_PAGE_ANALYTICS_SECTION_ID, SETTINGS_PAGE_AUTO_SWAP_DEFAULT_VALUE, SETTINGS_PAGE_SHIPPING_AND_RETURN_SECTION_ID, SETTINGS_PAGE_SI_TAGGING_SECTION_ID, SETTINGS_PAGE_UTM_SECTION_ID, SHOPBOARD_SOCIALS, SHOPEAKS_AI_TAGGING_SENSITIVITY_OPTIONS } from 'constants/general.constants'\nimport SettingsInput from 'components/SettingsInput/SettingsInput'\nimport PaydinSwitch from 'components/PaydinSwitch/PaydinSwitch'\nimport UTMForm from 'components/UTMForm/UTMForm'\nimport { useUserDetailsContext } from 'contexts/User'\nimport { Trans, useTranslation } from 'react-i18next'\nimport { UpdateStoreSettings } from 'api/store/store'\nimport { useHistoryContext } from 'contexts/History'\nimport { isInputValueValid, scrollToId } from 'services/SystemService'\nimport PaydinDialog, { PAYDIN_DIALOG_BUTTON_TYPES } from 'dialogs/PaydinDialog/PaydinDialog'\nimport ApprovalMessage from 'components/ApprovalMessage/ApprovalMessage'\nimport AutoSwapRadioGroup from 'components/AutoSwapRadioGroup/AutoSwapRadioGroup'\nimport { HOME_PAGE_URL, PRICING_PLANS_PAGE_URL } from 'constants/routes.constants'\nimport SaveChangesStrip from 'components/SaveChangesStrip/SaveChangesStrip'\nimport LoaderButton from 'components/LoaderButton/LoaderButton'\nimport HorizontalCheckboxSelect from 'components/MultipleSelectHoizontalLine/MultipleSelectHoizontalLine'\nimport { FaRegCalendarCheck } from 'react-icons/fa'\n\nexport default function SettingsPage() {\n const { t } = useTranslation()\n const {\n userDetails,\n setUserDetails,\n hasShopifyStore,\n isFreeUserAndTrialEnded,\n isFreeUser,\n } = useUserDetailsContext()\n const history = useHistoryContext()\n\n const originalShippingAndReturnUrl = (userDetails?.settings?.shippingAndReturnsUrl && userDetails?.settings?.shippingAndReturnsUrl !== '') ? userDetails?.settings?.shippingAndReturnsUrl.replace(t('HTTPS_HOST_URL_PREFIX'), '') : ''\n\n const [inputState, setInputState] = useState({\n shippingAndReturnsUrl: originalShippingAndReturnUrl,\n facebookPixelId: userDetails?.settings?.facebookPixelId,\n googleAnalyticsId: userDetails?.settings?.googleAnalyticsId,\n utmParams: { ...userDetails?.settings?.utmParams },\n autoSwapEnabled: userDetails?.settings?.autoSwapEnabled,\n productVisionSensitivity: userDetails?.settings?.productVisionConfigurations?.sensitivity\n })\n const [saveChangesStripState, setSaveChangesStripState] = useState({\n isSaving: false,\n isShown: false\n })\n const [saveButtonState, setSaveButtonState] = useState({\n isAbleToSave: false,\n isSaving: false\n })\n const [mobileSaveButtonState, setMobileSaveButtonState] = useState({\n isAbleToSave: false,\n isSaving: false\n })\n const [shouldAddUTMs, setShouldAddUTMs] = useState(hasUTMParams())\n const [shouldTestUTMParams, setShouldTestUTMParams] = useState(false)\n const [approvalMessageState, setApprovalMessageState] = useState({\n isMessageShown: false,\n text: ''\n })\n const [dialogState, setDialogState] = useState({\n isOpen: false,\n handleDialogClose: closeDialog,\n title: '',\n leftButtonText: '',\n rightButtonText: '',\n rightButtonClickHandler: () => { }\n })\n\n useEffect(() => {\n if (hasShopifyStore()) {\n setShouldTestUTMParams(true)\n scrollToId()\n } else {\n history.replace(HOME_PAGE_URL)\n }\n }, [])\n\n useEffect(() => {\n setSaveChangesStripState(prev => ({\n ...prev,\n isShown:\n ![originalShippingAndReturnUrl, ''].includes(inputState?.shippingAndReturnsUrl) ||\n ![userDetails?.settings?.facebookPixelId].includes(inputState?.facebookPixelId) ||\n ![userDetails?.settings?.googleAnalyticsId].includes(inputState?.googleAnalyticsId) ||\n\n ![userDetails?.settings?.autoSwapEnabled].includes(inputState?.autoSwapEnabled) ||\n\n ![userDetails?.settings?.productVisionConfigurations?.sensitivity].includes(inputState?.productVisionSensitivity) ||\n\n ![userDetails?.settings?.utmParams?.UTMSource].includes(inputState?.utmParams?.UTMSource) ||\n ![userDetails?.settings?.utmParams?.UTMMedium].includes(inputState?.utmParams?.UTMMedium) ||\n ![userDetails?.settings?.utmParams?.UTMCampaign].includes(inputState?.utmParams?.UTMCampaign) ||\n ![userDetails?.settings?.utmParams?.UTMTerm].includes(inputState?.utmParams?.UTMTerm) ||\n ![userDetails?.settings?.utmParams?.UTMContent].includes(inputState?.utmParams?.UTMContent)\n }))\n }, [inputState])\n\n useEffect(() => {\n if (shouldTestUTMParams && !shouldAddUTMs) {\n resetUTMParams()\n }\n }, [shouldAddUTMs])\n\n useEffect(() => {\n setSaveButtonState(prev => ({\n ...prev,\n isAbleToSave: saveChangesStripState.isShown\n }))\n setMobileSaveButtonState(prev => ({\n ...prev,\n isAbleToSave: saveChangesStripState.isShown\n }))\n }, [saveChangesStripState])\n\n function resetUTMParams() {\n setInputState(prev => ({\n ...prev,\n utmParams: {\n UTMSource: '',\n UTMMedium: '',\n UTMCampaign: '',\n UTMTerm: '',\n UTMContent: ''\n }\n }))\n }\n\n function closeDialog() {\n setDialogState(prev => ({\n ...prev,\n isOpen: false\n }))\n }\n\n function hasUTMParams() {\n return userDetails?.settings?.utmParams?.UTMSource.length > 0 ||\n userDetails?.settings?.utmParams?.UTMMedium.length > 0 ||\n userDetails?.settings?.utmParams?.UTMCampaign.length > 0 ||\n userDetails?.settings?.utmParams?.UTMTerm.length > 0 ||\n userDetails?.settings?.utmParams?.UTMContent.length > 0\n }\n\n function showApprovalMessage(text) {\n setApprovalMessageState(prev => ({\n ...prev,\n isMessageShown: true,\n text\n }))\n }\n\n function resetData() {\n setInputState({\n shippingAndReturnsUrl: originalShippingAndReturnUrl,\n facebookPixelId: userDetails?.settings?.facebookPixelId,\n googleAnalyticsId: userDetails?.settings?.googleAnalyticsId,\n utmParams: { ...userDetails?.settings?.utmParams },\n autoSwapEnabled: userDetails?.settings?.autoSwapEnabled\n })\n }\n\n function onStripSaveClick() {\n setSaveChangesStripState(prev => ({\n ...prev,\n isSaving: true\n }))\n saveBusinessSettings()\n }\n\n function onSaveButtonClick() {\n setSaveButtonState(prev => ({\n ...prev,\n isSaving: true\n }))\n saveBusinessSettings()\n }\n\n function onMobileSaveButtonClick() {\n setMobileSaveButtonState(prev => ({\n ...prev,\n isSaving: true\n }))\n saveBusinessSettings()\n }\n\n function saveBusinessSettings() {\n const finalShippingAndReturnUrl = inputState?.shippingAndReturnsUrl ? t('HTTPS_HOST_URL_PREFIX') + inputState?.shippingAndReturnsUrl : ''\n\n UpdateStoreSettings(userDetails?.businessId, finalShippingAndReturnUrl, inputState?.facebookPixelId, inputState?.googleAnalyticsId, inputState?.utmParams, inputState?.autoSwapEnabled, inputState?.productVisionSensitivity)\n .then(_ => {\n setSaveChangesStripState({\n isSaving: false,\n isShown: false\n })\n showApprovalMessage(t('SETTINGS_PAGE_CHANGES_SAVED_APPROVAL_MESSAGE_TEXT'))\n setUserDetails(prev => ({\n ...prev,\n settings: {\n shippingAndReturnsUrl: inputState?.shippingAndReturnsUrl,\n facebookPixelId: inputState?.facebookPixelId,\n googleAnalyticsId: inputState?.googleAnalyticsId,\n utmParams: inputState?.utmParams,\n autoSwapEnabled: inputState?.autoSwapEnabled,\n productVisionConfigurations: {\n ...prev?.settings?.productVisionConfigurations,\n sensitivity: inputState?.productVisionSensitivity,\n }\n },\n shopboard: {\n ...prev.shopboard,\n socialMedias: {\n ...prev.shopboard.socialMedias,\n [SHOPBOARD_SOCIALS.INSTAGRAM]: {\n ...prev.shopboard.socialMedias[SHOPBOARD_SOCIALS.INSTAGRAM],\n posts: []\n },\n [SHOPBOARD_SOCIALS.TIKTOK]: {\n ...prev.shopboard.socialMedias[SHOPBOARD_SOCIALS.TIKTOK],\n posts: []\n },\n [SHOPBOARD_SOCIALS.PINTEREST]: {\n ...prev.shopboard.socialMedias[SHOPBOARD_SOCIALS.PINTEREST],\n posts: []\n },\n \n }\n }\n }))\n })\n .catch(error => {\n console.log(error)\n showDialog(t('SETTINGS_PAGE_UPLOAD_GENERAL_ERROR_DIALOG_TITLE'), t('SETTINGS_PAGE_UPLOAD_GENERAL_ERROR_DIALOG_RIGHT_BUTTON_TEXT'))\n })\n .finally(() => {\n setSaveChangesStripState(prev => ({\n ...prev,\n isSaving: false\n }))\n setSaveButtonState(prev => ({\n ...prev,\n isSaving: false\n }))\n setMobileSaveButtonState(prev => ({\n ...prev,\n isSaving: false\n }))\n })\n }\n\n function showDialog(title, leftButtonText, rightButtonText, rightButtonClickHandler = () => { }) {\n setDialogState(prev => ({\n ...prev,\n isOpen: true,\n title,\n leftButtonText,\n rightButtonText,\n rightButtonClickHandler\n }))\n }\n\n function handleInputChange(e) {\n switch (e.target.name) {\n case ACCOUNT_PAGE_SHOP_SHIPPING_AND_RETURNS_INPUT_NAME: {\n setInputState(prev => ({\n ...prev,\n shippingAndReturnsUrl: e.target.value\n }))\n break\n }\n\n case ACCOUNT_PAGE_FACEBOOK_PIXEL_ID_INPUT_NAME:\n setInputState(prev => ({\n ...prev,\n facebookPixelId: e.target.value\n }))\n break\n\n case ACCOUNT_PAGE_GOOGLE_ANALYTICS_ID_INPUT_NAME:\n setInputState(prev => ({\n ...prev,\n googleAnalyticsId: e.target.value\n }))\n break\n }\n }\n\n function setAutoSwap(value) {\n setInputState(prev => {\n return {\n ...prev,\n autoSwapEnabled: value\n }\n })\n }\n\n function setProductVisionSensitivity(value) {\n setInputState(prev => {\n return {\n ...prev,\n productVisionSensitivity: value\n }\n })\n }\n\n function setUTMSource(value) {\n if (isInputValueValid(value)) {\n setInputState(prev => ({\n ...prev,\n utmParams: {\n ...prev.utmParams,\n UTMSource: value\n }\n }))\n }\n }\n\n function setUTMMedium(value) {\n if (isInputValueValid(value)) {\n setInputState(prev => ({\n ...prev,\n utmParams: {\n ...prev.utmParams,\n UTMMedium: value\n }\n }))\n }\n }\n\n function setUTMTerm(value) {\n if (isInputValueValid(value)) {\n setInputState(prev => ({\n ...prev,\n utmParams: {\n ...prev.utmParams,\n UTMTerm: value\n }\n }))\n }\n }\n\n function setUTMCampaign(value) {\n if (isInputValueValid(value)) {\n setInputState(prev => ({\n ...prev,\n utmParams: {\n ...prev.utmParams,\n UTMCampaign: value\n }\n }))\n }\n }\n\n function setUTMContent(value) {\n if (isInputValueValid(value)) {\n setInputState(prev => ({\n ...prev,\n utmParams: {\n ...prev.utmParams,\n UTMContent: value\n }\n }))\n }\n }\n\n function hideApprovalMassage() {\n setApprovalMessageState(prev => ({\n ...prev,\n isMessageShown: false\n }))\n }\n\n function navigateToPricingPlans() {\n history.push(PRICING_PLANS_PAGE_URL)\n }\n\n return (\n <div className={isMobile ? 'mobile-settings-page-container' : 'settings-page-container'}>\n <SaveChangesStrip\n isStripShown={saveChangesStripState.isShown}\n isSaving={saveChangesStripState.isSaving}\n onDiscardClick={resetData}\n onSaveClick={onStripSaveClick}\n />\n {\n isMobile ? <ContentDialogTopbar\n title={t('SETTINGS_PAGE_TITLE')}\n onBackButtonClick={() => history.goBack()}\n rightElement={<>\n <LoaderButton\n className='page-view-topbar-save-button'\n buttonText={t('LINK_VIEW_TOPBAR_SAVE_BUTTON_TEXT')}\n isLoading={mobileSaveButtonState.isSaving}\n loaderCircleColor='#0095f6'\n isDisabled={!mobileSaveButtonState.isAbleToSave || mobileSaveButtonState.isSaving}\n onClick={onMobileSaveButtonClick}\n />\n </>}\n /> : <div className=\"settings-page-title dashboard-page-title\">{t('SETTINGS_PAGE_TITLE')}</div>\n }\n <div className=\"settings-page-content\">\n <AccountSection\n title={t('SETTINGS_PAGE_ANALYTICS_INTEGRATIONS_SECTION_TITLE')}\n id={SETTINGS_PAGE_ANALYTICS_SECTION_ID}\n sectionContentClassName='account-page-analytics-integrations-section'\n >\n <>\n <div className=\"settings-page-input-section\">\n <div className='settings-page-subtitle-input-container'>\n <div className=\"settings-page-subtitle-input-titles-container\">\n <div className=\"settings-page-input-title\">{t('SETTINGS_PAGE_ANALYTICS_INTEGRATIONS_SECTION_FACEBOOK_PIXEL_ID_TITLE')}</div>\n </div>\n <SettingsInput\n name={ACCOUNT_PAGE_FACEBOOK_PIXEL_ID_INPUT_NAME}\n value={inputState?.facebookPixelId}\n placeholder={t('SETTINGS_PAGE_ANALYTICS_INTEGRATIONS_SECTION_FACEBOOK_PIXEL_ID_INPUT_PLACEHOLDER')}\n onValueChange={handleInputChange}\n />\n </div>\n </div>\n <div className=\"settings-page-input-section\">\n <div className='settings-page-subtitle-input-container'>\n <div className=\"settings-page-subtitle-input-titles-container\">\n <div className=\"settings-page-input-title\">{t('SETTINGS_PAGE_ANALYTICS_INTEGRATIONS_SECTION_GOOGLE_ANALYTICS_ID_TITLE')}</div>\n </div>\n <SettingsInput\n name={ACCOUNT_PAGE_GOOGLE_ANALYTICS_ID_INPUT_NAME}\n value={inputState?.googleAnalyticsId}\n placeholder={t('SETTINGS_PAGE_ANALYTICS_INTEGRATIONS_SECTION_GOOGLE_ANALYTICS_ID_INPUT_PLACEHOLDER')}\n onValueChange={handleInputChange}\n />\n </div>\n </div>\n </>\n </AccountSection>\n <AccountSection\n title={\n <Trans\n i18nKey='SETTINGS_PAGE_AUTO_SWAP_SECTION_TITLE'\n components={{\n sup: <div className='superscript' />\n }}\n />\n }\n sectionContentClassName='store-settings-page-shipping-and-returns-section'\n >\n <div className=\"settings-page-auto-swap-subsection settings-pages-subsection-title\">\n <Trans\n i18nKey='SETTINGS_PAGE_AUTO_SWAP_SUBSECTION_TITLE'\n components={{\n sup: <div className='superscript' />\n }}\n />\n </div>\n {\n isFreeUserAndTrialEnded() ?\n <div className='settings-page-auto-swap-section-try-for-free-button' onClick={navigateToPricingPlans}>{t('SETTINGS_PAGE_AUTO_SWAP_SECTION_TRY_FOR_FREE_BUTTON_TEXT')}</div> :\n <AutoSwapRadioGroup\n autoSwapEnabled={inputState?.autoSwapEnabled}\n setAutoSwap={setAutoSwap}\n />\n }\n </AccountSection>\n {\n userDetails?.isAdmin && !isFreeUser() && <AccountSection\n title={\n <Trans\n i18nKey='SETTINGS_PAGE_AI_TAGGING_SENSITIVITY_SECTION_TITLE'\n />\n }\n sectionContentClassName='store-settings-page-shipping-and-returns-section'\n id={SETTINGS_PAGE_SI_TAGGING_SECTION_ID}\n >\n <div className=\"settings-page-input-subtitle\">{t('SETTINGS_PAGE_AI_TAGGING_SENSITIVITY_SECTION_SUBTITLE')}</div>\n {\n isFreeUserAndTrialEnded() ?\n <div className='settings-page-auto-swap-section-try-for-free-button' onClick={navigateToPricingPlans}>{t('SETTINGS_PAGE_AUTO_SWAP_SECTION_TRY_FOR_FREE_BUTTON_TEXT')}</div> :\n userDetails?.settings?.productVisionConfigurations?.isEnabled ? \n <div className='settings-page-subtitle-horizontal-checkbox-container'>\n <div className=\"settings-page-input-title\">{t('SETTINGS_PAGE_AI_TAGGING_SENSITIVITY_INPUT_TITLE_TEXT')}</div>\n <HorizontalCheckboxSelect options={SHOPEAKS_AI_TAGGING_SENSITIVITY_OPTIONS} selectedValue={inputState?.productVisionSensitivity} setSelectedValue={setProductVisionSensitivity}/>\n </div> :\n <div className='settings-page-auto-swap-section-book-a-demo-button' onClick={() => window.open('https://calendly.com/shopeaks-support/15min','_blank')}>\n <FaRegCalendarCheck />\n {t('SETTINGS_PAGE_AI_TAGGING_SENSITIVITY_BOOK_A_DEMO_TEXT')}\n </div>\n }\n </AccountSection>\n }\n <AccountSection\n title={t('SETTINGS_PAGE_UTM_PARAMETERS_SECTION_TITLE')}\n id={SETTINGS_PAGE_UTM_SECTION_ID}\n sectionContentClassName='account-page-utm-parameters-section'\n >\n <div className=\"settings-page-input-section\">\n <div className='account-page-utm-params-subtitle-input-container settings-page-subtitle-input-container'>\n <div className=\"settings-page-subtitle-input-titles-container\">\n <div className=\"settings-page-input-title-container\">\n <div className=\"settings-page-input-title\">{t('SETTINGS_PAGE_UTM_PARAMETERS_SECTION_UTM_PARAMETERS_TITLE')}</div>\n <PaydinSwitch\n checked={shouldAddUTMs}\n setChecked={setShouldAddUTMs}\n labelClassName='account-page-add-utms-switch-label'\n />\n </div>\n <div className=\"settings-page-input-subtitle\">{t('ACCOUNT_PAGE_URL_PARAMETERS_SECTION_UTM_VALUES_SUBTITLE')}</div>\n </div>\n </div>\n <UTMForm\n shouldDisplayControlBar={false}\n inputsHasPadding={false}\n shouldAddUTMs={shouldAddUTMs}\n UTMSource={inputState?.utmParams?.UTMSource}\n setUTMSource={setUTMSource}\n UTMMedium={inputState?.utmParams?.UTMMedium}\n setUTMMedium={setUTMMedium}\n UTMCampaign={inputState?.utmParams?.UTMCampaign}\n setUTMCampaign={setUTMCampaign}\n UTMTerm={inputState?.utmParams?.UTMTerm}\n setUTMTerm={setUTMTerm}\n UTMContent={inputState?.utmParams?.UTMContent}\n setUTMContent={setUTMContent}\n />\n </div>\n </AccountSection>\n <AccountSection\n title={t('SETTINGS_PAGE_SHOP_SHIPPING_AND_RETURNS_SECTION_TITLE')}\n id={SETTINGS_PAGE_SHIPPING_AND_RETURN_SECTION_ID}\n sectionContentClassName='store-settings-page-shipping-and-returns-section'\n >\n <div className='settings-page-subtitle-input-container'>\n <div className=\"settings-page-input-subtitle\">{t('SETTINGS_PAGE_SHOP_SHIPPING_AND_RETURN_SECTION_REDIRECT_SUBTITLE')}</div>\n <SettingsInput\n name={ACCOUNT_PAGE_SHOP_SHIPPING_AND_RETURNS_INPUT_NAME}\n value={inputState?.shippingAndReturnsUrl}\n prefix={t('HTTPS_HOST_URL_PREFIX')}\n onValueChange={handleInputChange}\n />\n </div>\n </AccountSection>\n {\n !isMobile && <LoaderButton\n className={isMobile ? 'mobile-save-changes-button' : 'save-changes-button'}\n isLoading={saveButtonState.isSaving}\n isDisabled={!saveButtonState.isAbleToSave || saveButtonState.isSaving}\n buttonText={t('SETTINGS_PAGE_SAVE_CHANGES_BUTTON_TEXT')}\n onClick={onSaveButtonClick}\n />\n }\n <PaydinDialog\n title={dialogState.title}\n isDialogOpen={dialogState.isOpen}\n handleDialogClose={dialogState.handleDialogClose}\n leftButtonText={dialogState.leftButtonText}\n rightButtonText={dialogState.rightButtonText}\n leftButtonType={PAYDIN_DIALOG_BUTTON_TYPES.PRIMARY}\n rightButtonType={PAYDIN_DIALOG_BUTTON_TYPES.SECONDARY}\n onRightButtonClick={dialogState.rightButtonClickHandler}\n isLeftButtonWithLoader={false}\n dialogLayout={dialogState.dialogLayout}\n />\n <ApprovalMessage\n isMessageShown={approvalMessageState.isMessageShown}\n closeMessage={hideApprovalMassage}\n text={approvalMessageState.text}\n />\n </div>\n </div>\n )\n}","import React from 'react'\nimport './HomePageSection.css'\n\n/**\n * Represents a section used inside the home page\n * @param {string} title - The section's title\n * @param {string} description - The section's description\n */\nexport default function HomePageSection({\n title,\n description,\n children\n}) {\n return (\n <div className='home-page-section'>\n <div className=\"home-page-section-titles-container\">\n {title && <div className=\"home-page-section-title\">{title}</div>}\n {description && <div className=\"home-page-section-description\">{description}</div>}\n </div>\n {children}\n </div>\n )\n}","import React from 'react'\nimport './MobileRecentActivitySection.css'\n\n/**\n * Represents a recent activity section for mobile mode only.\n * @param {string} title - The section's title\n * @param {string} buttonText - The section's button's text\n * @param {function} onButtonClick - A function to perform whenever this section's button is clicked\n */\nexport default function MobileRecentActivitySection({\n title,\n buttonText,\n onButtonClick = () => { },\n children\n}) {\n return (\n <div className='mobile-recent-activity-section'>\n <div className=\"mobile-recent-activity-section-titles-container\">\n <div className=\"mobile-recent-activity-section-title\">{title}</div>\n <div className=\"mobile-recent-activity-section-button\" onClick={onButtonClick}>{buttonText}</div>\n </div>\n <div className=\"mobile-recent-activity-section-content\">\n {children}\n </div>\n </div>\n )\n}","import './PaydinMuiAccordion.css'\nimport MuiAccordion from '@mui/material/Accordion';\nimport MuiAccordionSummary from '@mui/material/AccordionSummary';\nimport MuiAccordionDetails from '@mui/material/AccordionDetails';\nimport { useTranslation } from 'react-i18next';\nimport { IoIosArrowBack, IoIosArrowForward } from 'react-icons/io'\nimport { PAYDIN_ACCORDION_HEADER_GAP_PX } from 'constants/general.constants';\n\n/**\n * Represents a single accordion, based on the material UI accordion.\n * \n * @param {string} name - The name of this accordion\n * @param {DOMElement} header - The header of this accordion\n * @param {DOMElement} content - The content of this accordion\n * @param {string} expandedState - The state that controlls the opening & closing of this accordion\n * @param {function} setExpandedState - The setter function of the 'expandedState' state.\n * The value for this prop can be given from 3 different sources:\n * 1. The 'setExpandedState' field inside an object passed through the 'accordions' array, see {@link PaydinAccordion}\n * 2. The 'onExpanded' prop given to {@link PaydinAccordion}\n * 3. The 'setExpandedAccordionName' setter function for the inner state inside {@link PaydinAccordion} component\n * \n * NOTE: Make sure that whatever function is passed for this prop, it eventually must change the 'expandedState'.\n * \n * @param {boolean} allowZeroExpands - Determins whether all the accordions can be closed at the same time or not\n * @param {string} borderColor - The border color of this accordion\n * @param {string} headerBackgroundColor - The background color of this accorion's header\n * @param {string} contentBackgroundColor - The background color of this accorion's content\n * @param {boolean} hasBorder - Determins whether this accordion has border or not\n * @param {number} borderRadiusPx - The border radius of this accordion in pixels\n * @param {number} borderWidthPx - The border width of this accordion in pixels\n * @param {string} headerTextColor - The text color of this accordion's header\n * @param {number} headerHeightPx - The height of this accordion's header in pixels\n * @param {string} contentTopBorderColor - The color of the top border of this accordion's content\n * @param {number} contentTopBorderWidthPx - The width of the top border of this accordion's content in pixels\n * @param {number} contentPaddingPx - The padding of this accordion's content in pixels\n * @param {boolean} disabled - Determins whether this accordion is disabled or not\n * @param {number} headerContentArrowGapPx - The gap between the header content and the arrow, in pixels\n */\nexport default function PaydinMuiAccordion({\n name,\n header,\n content,\n expandedState,\n setExpandedState,\n allowZeroExpands = true,\n borderColor = 'black',\n headerBackgroundColor = 'white',\n contentBackgroundColor = 'white',\n hasBorder = true,\n borderRadiusPx = 0,\n borderWidthPx = 1,\n headerTextColor = 'black',\n contentTopBorderColor = '#e3e3e3',\n contentTopBorderWidthPx = 1,\n headerPadding = '',\n contentPadding = '',\n disabled = false,\n headerContentArrowGapPx = PAYDIN_ACCORDION_HEADER_GAP_PX\n}) {\n const { t } = useTranslation()\n\n function handleChange(accordionName) {\n return (event, newExpanded) => {\n if (allowZeroExpands)\n setExpandedState(newExpanded ? accordionName : '')\n else \n setExpandedState(accordionName)\n }\n }\n\n return (\n <MuiAccordion\n disabled={disabled}\n disableGutters={true}\n elevation={0}\n square={false}\n expanded={(expandedState === name)}\n onChange={handleChange(name)}\n sx={{\n ...(hasBorder ? { border: `${borderWidthPx}px solid ${borderColor}` } : {}),\n width: '100%',\n margin: 'auto',\n direction: t('direction.dir'),\n '&:not(:last-child)': {\n borderBottom: 0,\n },\n '&:before': {\n display: 'none',\n }\n }}>\n <MuiAccordionSummary\n // expandIcon={t('direction.dir') === 'rtl' ? <IoIosArrowBack className='paydin-mui-accordion-expand-image' /> : <IoIosArrowForward className='paydin-mui-accordion-expand-image' />}\n sx={{\n // gap: headerContentArrowGapPx * 0.125,\n // color: headerTextColor,\n // height: `${headerHeightPx}px`,\n padding: headerPadding,\n borderTopLeftRadius: `${borderRadiusPx}px`,\n borderTopRightRadius: `${borderRadiusPx}px`,\n ...((expandedState !== name) ? {\n borderBottomLeftRadius: `${borderRadiusPx}px`,\n borderBottomRightRadius: `${borderRadiusPx}px`,\n backgroundColor: 'transparent',\n } : {\n backgroundColor: headerBackgroundColor,\n }),\n minHeight: 0,\n '& .MuiAccordionSummary-expandIconWrapper.Mui-expanded': {\n transform: t('direction.dir') === 'rtl' ? 'rotate(-90deg)' : 'rotate(90deg)',\n },\n '& .MuiAccordionSummary-content': {\n margin: '0',\n },\n }}>\n {header}\n </MuiAccordionSummary>\n <MuiAccordionDetails\n sx={{\n padding: contentPadding,\n // borderTop: `${contentTopBorderWidthPx}px solid ${contentTopBorderColor}`,\n backgroundColor: contentBackgroundColor,\n borderBottomLeftRadius: `${borderRadiusPx}px`,\n borderBottomRightRadius: `${borderRadiusPx}px`\n }}>\n {content}\n </MuiAccordionDetails>\n </MuiAccordion>\n )\n}","import PaydinMuiAccordion from 'components/PaydinMuiAccordion/PaydinMuiAccordion'\nimport { useEffect, useState } from 'react'\n\n/**\n * Represents an accordion, each accordion consists of data as described in {@link PaydinMuiAccordion}.\n * There's maximum 1 accordion opened at a time.\n * @param {string} borderColor - The border color of each accordion\n * @param {number} headerBorderRadiusPx - The border radius of the header of the order summary\n * @param {boolean} hasBorder - Determins whether the accordions will have border or not\n * @param {string} headerBackgroundColor - The header background color of each accordion\n * @param {string} contentBackgroundColor - The content background color of each accordion\n * @param {string} openAccordionName - Automatically opens the accordion with the name \"openAccordionName\", if none given, then all the accordions will be closed on start\n * @param {function} onExpanded - A callback function to perform when the expand state of the accordion is changed. Used as a fallback in case it doesn't get a callback from the \"accordions\" object array\n * @param {boolean} allowZeroExpands - Determins whether all the accordions can be closed at the same time or not\n * @param {array} accordions - The accordion objects array which describes the displayed accordions\n * \n * Accordion object structure: \n * {\n * name: string, \n * header: DOMElement,\n * content: DOMElement,\n * contentPaddingPx: number\n * }\n * \n * name ==> The name of the accordion, necessary for the accordion functioning\n * header ==> The header of the accordion\n * content ==> The content of the accordion\n * contentPaddingPx ==> The padding of the accordion's content in pixels\n */\nexport default function PaydinAccordion({\n borderColor = '',\n borderRadiusPx = 0,\n hasBorder = true,\n headerBackgroundColor = 'white',\n contentBackgroundColor = 'white',\n headerPadding = '10px',\n contentPadding = '10px',\n openAccordionName = '',\n onExpanded = null,\n allowZeroExpands = true,\n accordions = []\n}) {\n const [expandedAccordionName, setExpandedAccordionName] = useState(openAccordionName)\n\n useEffect(() => {\n setExpandedAccordionName(openAccordionName)\n }, [openAccordionName])\n\n return (\n <div className='paydin-accordion-container'>\n {\n accordions.map(accordion => {\n return <PaydinMuiAccordion\n key={accordion?.name ?? ''}\n header={accordion?.header ?? <></>}\n content={accordion?.content ?? <></>}\n name={accordion?.name ?? ''}\n borderColor={borderColor}\n hasBorder={hasBorder}\n borderRadiusPx={borderRadiusPx}\n headerPadding={headerPadding}\n contentPadding={contentPadding}\n headerBackgroundColor={headerBackgroundColor}\n contentBackgroundColor={contentBackgroundColor}\n allowZeroExpands={allowZeroExpands}\n expandedState={accordion.expandedState ?? expandedAccordionName}\n setExpandedState={accordion.setExpandedState ?? (onExpanded ?? setExpandedAccordionName)} />\n })\n }\n </div>\n )\n}","import React from 'react'\nimport './TodoList.css'\nimport PaydinAccordion from 'components/PaydinAccordion/PaydinAccordion'\nimport { isMobile } from 'utils/deviceUtils'\nimport { GoCheckCircleFill } from 'react-icons/go'\n\n/**\n * Represents a todo list.\n * @param {array} tasks - The list of tasks to perform\n * @param {string} expandedTaskName - The currently expanded task. A task is expanded after clicking on it\n * @param {function} onTaskClick - A function to perform whenever a task is clicked\n */\nexport default function TodoList({\n tasks = [],\n expandedTaskName = '',\n onTaskClick = () => { }\n}) {\n\n function renderTaskHeader(title, isDone) {\n return <div className='todo-list-task-header'>\n {isDone ? <GoCheckCircleFill className=\"todo-list-task-header-checked-mark\" /> : <div className=\"todo-list-task-header-unchecked-mark\"></div>}\n <div className=\"todo-list-task-header-title\">{title}</div>\n </div>\n }\n\n function renderTaskContent(description, buttonText, buttonClickHandler, image) {\n return <div className='todo-list-task-content'>\n <div className=\"todo-list-task-details\">\n <div className=\"todo-list-task-content-description\">{description}</div>\n <div className=\"todo-list-task-content-button\" onClick={buttonClickHandler}>{buttonText}</div>\n </div>\n {\n (!isMobile && image) && <div className=\"todo-list-task-image\">\n {image}\n </div>\n }\n </div>\n }\n\n return (\n <div className={isMobile ? \"mobile-todo-list-container\" : \"todo-list-container\"}>\n <PaydinAccordion\n allowZeroExpands={false}\n borderColor={'transparent'}\n headerBackgroundColor={'#f3f3f3'}\n contentBackgroundColor={'#f3f3f3'}\n openAccordionName={expandedTaskName}\n borderRadiusPx={7}\n headerPadding={'0 5px'}\n contentPadding={'0 5px 10px 5px'}\n onExpanded={onTaskClick}\n accordions={tasks.map(task => ({\n name: task?.name,\n header: renderTaskHeader(task?.title, task?.isDone),\n content: renderTaskContent(task?.description, task?.buttonText, task?.onButtonClick, task?.image)\n }))}\n />\n </div>\n )\n}","import React, { useState } from 'react'\nimport './StoreOrdersTableRowView.css'\nimport { isMobile } from 'utils/deviceUtils'\nimport { TableCell, TableRow, tableCellClasses } from '@mui/material'\nimport { useTranslation } from 'react-i18next'\nimport { getFormattedDateTime } from 'utils/dateUtils'\nimport { getCurrencySymbol } from 'services/currency'\nimport { formatNumber } from 'utils/utils'\nimport { LINK_TYPES, NUMBER_TYPES, ORDERS_TABLE_PRODUCT_LIST_GAP, ORDERS_TABLE_PRODUCT_ROW_HEIGHT_PX, ORDERS_TABLE_ROW_HEIGHT, ORDERS_TABLE_STATUS_OPTIONS, SHORT_URL_SELECTION_TYPE } from 'constants/general.constants'\nimport { styled } from '@mui/system'\nimport ImageBox from 'components/ImageBox/ImageBox'\nimport LinkUrlTypeTag from 'components/LinkUrlTypeTag/LinkUrlTypeTag'\nimport ShortsImage from 'embeddedImages/ShortsImage'\nimport { SiShopify } from \"react-icons/si\";\nimport { BiLink } from 'react-icons/bi'\nimport { SHOPBOARD_PAGE_URL } from 'constants/routes.constants'\nimport { useHistoryContext } from 'contexts/History'\nimport MultiLineText from 'components/MultiLineText/MultiLineText'\nimport { IoIosArrowDown } from 'react-icons/io'\nimport Loader from 'components/Loader/Loader'\nimport OrderProduct from 'components/OrderProduct/OrderProduct'\nimport { extractOrderProduct } from 'utils/dataUtils'\nimport CollapsingElement from 'components/CollapsingElement/CollapsingElement'\nimport { getStoreOrderDetails } from 'api/store/store'\nimport Tooltip from 'components/Tooltip/Tooltip'\n\n/**\n * Represents a row view for the orders table\n * @param {object} rowData - The data object of a specific row\n */\nexport default function StoreOrdersTableRowView({\n rowData\n}) {\n const { t } = useTranslation()\n const history = useHistoryContext()\n\n const [isExpanded, setIsExpanded] = useState(false)\n const [isLoadingMoreDetails, setIsLoadingMoreDetails] = useState(true)\n const [orderProducts, setOrderProducts] = useState([])\n\n const productLineHeight = (ORDERS_TABLE_PRODUCT_ROW_HEIGHT_PX * rowData?.totalProductsCount) + (ORDERS_TABLE_PRODUCT_LIST_GAP * (rowData?.totalProductsCount - 1)) + 20\n const product3LineHeight = (ORDERS_TABLE_PRODUCT_ROW_HEIGHT_PX * 3) + (ORDERS_TABLE_PRODUCT_LIST_GAP * (rowData?.totalProductsCount - 1)) + 20\n\n const StyledTableRow = styled(TableRow)(({ theme }) => ({\n // hide all borders\n '&:not(:last-child) td, & th': {\n border: 0,\n }\n }))\n\n const StyledTableCell = styled(TableCell)(({ theme }) => ({\n [`&.${tableCellClasses.body}`]: {\n textAlign: 'center',\n padding: '0',\n },\n }))\n\n const orderProductsListStyle = {\n ...(rowData?.totalProductsCount > 3 ? {\n height: `${product3LineHeight}px`,\n overflowY: 'scroll'\n } : {\n height: `${productLineHeight}px`,\n }),\n }\n\n const orderProductsListLoaderStyle = {\n height: rowData?.totalProductsCount > 3 ? `${product3LineHeight}px` : `${productLineHeight}px`\n }\n\n function renderGoToLinkImage(linkId, linkType) {\n if (linkType === LINK_TYPES.SHORT) {\n return <ShortsImage className='store-orders-table-row-view-view-link-button' onClick={() => viewLink(linkId, linkType)} />\n }\n\n return <BiLink className='store-orders-table-row-view-view-link-button' onClick={() => viewLink(linkId, linkType)} />\n }\n\n function getStatusBackgroundColor(status) {\n switch (status) {\n case ORDERS_TABLE_STATUS_OPTIONS.PAID: return '#00af50'\n case ORDERS_TABLE_STATUS_OPTIONS.REFUNDED: return '#f4b184'\n // PARTIALLY REFUNDED\n default: return '#ffd95e'\n }\n }\n\n function getStatusTextColor(status) {\n switch (status) {\n case ORDERS_TABLE_STATUS_OPTIONS.PAID: return 'white'\n case ORDERS_TABLE_STATUS_OPTIONS.REFUNDED: return '#432704'\n // PARTIALLY REFUNDED\n default: return '#987c1a'\n }\n }\n\n function viewLink(linkId, linkType) {\n if (linkType === LINK_TYPES.LOOK) {\n rowData?.openLinkContentDialog(linkId)\n } else if (linkType === LINK_TYPES.SHORT) {\n rowData?.openShortContentDialog(linkId)\n } else if (linkType === LINK_TYPES.SHOPBOARD) {\n history.push(SHOPBOARD_PAGE_URL)\n }\n }\n\n function onExpandOrder() {\n setIsExpanded(prev => !prev)\n if (orderProducts.length === 0) {\n getStoreOrderDetails(rowData?.id)\n .then(orderProducts => {\n setOrderProducts(orderProducts?.data?.map(orderProduct => extractOrderProduct(orderProduct)))\n })\n .catch(console.log)\n .finally(() => {\n setIsLoadingMoreDetails(false)\n })\n }\n }\n\n function hasImage(image) {\n return ![null, undefined, ''].includes(image)\n }\n\n function getLinkImage() {\n return hasImage(rowData?.linkDetails?.linkImage) ? rowData?.linkDetails?.linkImage : rowData?.linkDetails?.linkDefaultImage\n }\n\n function getLinkSource(linkType) {\n switch (linkType) {\n case LINK_TYPES.LOOK: return 'Instant Store'\n case LINK_TYPES.SHORT: return 'Short'\n default: return 'Shop the Feed'\n }\n }\n\n function renderRowContent() {\n return isMobile ? <StyledTableCell padding=\"normal\" align={'left'}>\n <div className='mobile-store-orders-table-row-view'>\n <IoIosArrowDown className={`mobile-store-orders-table-row-view-expand-button-image ${isExpanded ? 'expanded' : ''}`} onClick={onExpandOrder} />\n <div className='mobile-store-orders-table-row-view-content' onClick={() => viewLink(rowData?.linkDetails?.linkId, rowData?.linkDetails?.linkType)}>\n <div className=\"mobile-store-orders-table-row-view-order-details\">\n <div className=\"mobile-store-orders-table-row-view-order-details-date\">{getFormattedDateTime(new Date(rowData?.createdAt), false)}</div>\n <div className='mobile-store-orders-table-row-view-items'>{t('ORDERS_TABLE_ROW_TOTAL_PRODUCTS_COUNT', { count: rowData?.totalProductsCount })}</div>\n <div className='mobile-store-orders-table-row-view-total'>{`${getCurrencySymbol(rowData?.currency)}${formatNumber(rowData?.totalPrice, NUMBER_TYPES.PRICE)}`}</div>\n </div>\n <div className=\"mobile-store-orders-table-row-view-source\">\n {\n rowData?.linkDetails ?\n rowData?.linkDetails?.linkType == LINK_TYPES.SHOPBOARD ? <LinkUrlTypeTag\n type={LINK_TYPES.SHOPBOARD}\n isSmall={false}\n /> : <>\n {\n getLinkImage() && <ImageBox\n image={getLinkImage()}\n className='store-orders-table-row-view-link-image'\n isImageFitCover={true}\n showBorder={true}\n allowVideo={true}\n />\n }\n <div className=\"store-orders-table-row-view-link-details\">\n {\n rowData?.linkDetails?.linkTitle && <MultiLineText\n text={rowData?.linkDetails?.linkTitle}\n lines={2}\n className='mobile-store-orders-table-row-view-link-title'\n />\n }\n {\n rowData?.linkDetails?.linkType === LINK_TYPES.SHORT && <LinkUrlTypeTag\n type={rowData?.linkDetails?.urlType}\n isSmall={true}\n />\n }\n {\n rowData?.linkDetails?.linkType === LINK_TYPES.LOOK && <LinkUrlTypeTag\n type={rowData?.linkDetails?.linkType}\n isSmall={true}\n />\n }\n </div>\n </> : <>\n <LinkUrlTypeTag\n type={SHORT_URL_SELECTION_TYPE.ORGANIC}\n isSmall={true}\n />\n </>\n }\n </div>\n <div className=\"mobile-store-orders-table-row-view-influencer\">\n {\n rowData?.influencerImage ? <ImageBox\n image={rowData?.influencerImage}\n className='store-orders-table-row-view-influencer-image'\n roundImage={true}\n showBorder={true}\n /> : <div className='store-orders-table-row-view-influencer-image'></div>\n }\n </div>\n </div>\n </div>\n </StyledTableCell> : <>\n <StyledTableCell padding=\"normal\" align={'left'}>\n <div className=\"store-orders-table-row-view store-orders-table-row-view-date-frame\">\n <IoIosArrowDown className={`store-orders-table-row-view-expand-button-image ${isExpanded ? 'expanded' : ''}`} onClick={onExpandOrder} />\n <div className=\"store-orders-table-row-view-date-container\">\n <div className=\"store-orders-table-row-view-date\">{getFormattedDateTime(new Date(rowData?.createdAt))}</div>\n <div className='store-orders-table-row-view-status' style={{ backgroundColor: getStatusBackgroundColor(rowData?.status), color: getStatusTextColor(rowData?.status) }}>{rowData?.status}</div>\n </div>\n </div>\n </StyledTableCell>\n <StyledTableCell padding=\"normal\" align={'left'}>\n <div className=\"store-orders-table-row-view store-orders-table-row-view-source\">\n {\n rowData?.linkDetails ? \n rowData?.linkDetails?.linkType == LINK_TYPES.SHOPBOARD ? <LinkUrlTypeTag\n type={LINK_TYPES.SHOPBOARD}\n isSmall={false}\n /> : <>\n {\n getLinkImage() && <ImageBox\n image={getLinkImage()}\n className='store-orders-table-row-view-link-image'\n isImageFitCover={true}\n showBorder={true}\n allowVideo={true}\n />\n }\n <div className=\"store-orders-table-row-view-link-details\">\n {\n rowData?.linkDetails?.linkTitle && <MultiLineText\n text={rowData?.linkDetails?.linkTitle}\n lines={2}\n className='store-orders-table-row-view-link-title'\n />\n }\n {\n rowData?.linkDetails?.linkType === LINK_TYPES.SHORT && <LinkUrlTypeTag\n type={rowData?.linkDetails?.urlType}\n isSmall={true}\n />\n }\n {\n rowData?.linkDetails?.linkType === LINK_TYPES.LOOK && <LinkUrlTypeTag\n type={rowData?.linkDetails?.linkType}\n isSmall={true}\n />\n }\n </div>\n </> : \n <LinkUrlTypeTag\n type={SHORT_URL_SELECTION_TYPE.ORGANIC}\n isSmall={false}\n />\n }\n </div>\n </StyledTableCell>\n <StyledTableCell padding=\"normal\" align='right'>\n <div className='store-orders-table-row-view store-orders-table-row-view-items'>{t('ORDERS_TABLE_ROW_TOTAL_PRODUCTS_COUNT', { count: rowData?.totalProductsCount })}</div>\n </StyledTableCell>\n <StyledTableCell padding=\"normal\" align='right'>\n <div className='store-orders-table-row-view store-orders-table-row-view-total'>{`${getCurrencySymbol(rowData?.currency)}${formatNumber(rowData?.totalPrice, NUMBER_TYPES.PRICE)}`}</div>\n </StyledTableCell>\n <StyledTableCell padding=\"normal\" align={'left'}>\n <div className=\"store-orders-table-row-view store-orders-table-row-view-influencer\">\n {\n rowData?.influencerImage && <ImageBox\n image={rowData?.influencerImage}\n className='store-orders-table-row-view-influencer-image'\n roundImage={true}\n showBorder={true}\n />\n }\n </div>\n </StyledTableCell>\n <StyledTableCell padding=\"normal\" align='right'>\n <div className=\"store-orders-table-row-view store-orders-table-row-view-actions\">\n {\n rowData?.linkDetails?.linkId ? <Tooltip\n image={renderGoToLinkImage(rowData?.linkDetails?.linkId, rowData?.linkDetails?.linkType)}\n tooltipText={t('STORE_ORDERS_TABLE_ROW_ACTIONS_OPEN_LINK_TOOLTIP_TEXT', { source: getLinkSource(rowData?.linkDetails?.linkType) })}\n width='30px'\n height='30px'\n swapHorizontal={true}\n /> : <div className='store-orders-table-row-view-view-link-button-placeholder'></div>\n }\n {\n rowData?.url && <Tooltip\n image={\n <a href={rowData?.url} target='_blank'>\n <div className=\"store-orders-table-row-view-view-in-shopify-button-container\">\n <SiShopify className='store-orders-table-row-view-view-in-shopify-button' />\n </div>\n </a>\n }\n width='30px'\n height='30px'\n swapHorizontal={true}\n tooltipText={t('STORE_ORDERS_TABLE_ROW_ACTIONS_OPEN_IN_SHOPIFY_TOOLTIP_TEXT')}\n />\n }\n </div>\n </StyledTableCell>\n </>\n }\n\n return (\n <>\n {\n isMobile ? <TableRow style={{ height: `${ORDERS_TABLE_ROW_HEIGHT}px` }}>\n {renderRowContent()}\n </TableRow> : <StyledTableRow style={{ height: `${ORDERS_TABLE_ROW_HEIGHT}px` }}>\n {renderRowContent()}\n </StyledTableRow>\n }\n <TableRow>\n <TableCell style={{ padding: 0 }} colSpan={isMobile ? 1 : 6}>\n <CollapsingElement\n expanded={isExpanded}\n >\n {\n isLoadingMoreDetails ? <div className=\"orders-table-row-view-more-details-loader-container\" style={orderProductsListLoaderStyle}>\n <Loader styles={{\n width: '20px',\n height: '20px',\n position: 'absolute',\n inset: 0,\n margin: 'auto'\n }} />\n </div> : <div className={isMobile ? \"mobile-orders-table-row-view-more-details\" : \"orders-table-row-view-more-details\"} style={orderProductsListStyle}>\n {\n orderProducts?.map(orderProduct => <OrderProduct\n key={orderProduct?.title + '__' + orderProduct?.variantTitle}\n title={orderProduct?.title}\n imageUrl={orderProduct?.imageUrl}\n variantTitle={orderProduct?.variantTitle}\n price={orderProduct?.price}\n quantity={orderProduct?.quantity}\n currency={rowData?.currency}\n />)\n }\n </div>\n }\n </CollapsingElement>\n </TableCell>\n </TableRow>\n </>\n )\n}","import React from 'react'\nimport './StoreOrdersTableHeaderView.css'\nimport { useTranslation } from 'react-i18next'\nimport { Box, TableCell, TableSortLabel, tableCellClasses } from '@mui/material'\nimport { styled } from '@mui/system'\nimport { visuallyHidden } from '@mui/utils'\nimport { ORDERS_TABLE_HEADERS_IDS } from 'constants/general.constants'\nimport { isMobile } from 'utils/deviceUtils'\nimport { HiOutlineShoppingBag } from 'react-icons/hi'\n\n/**\n * Represents a header view for the orders table\n * @param {string} order - The way of ordering the column data, e.g., asc or desc\n * @param {string} orderBy - The column to order the data by\n * @param {string} headerBackgroundColor - The background color of the header view\n * @param {string} headerTextColor - The text color of the header view\n * @param {string} createSortHandler - A function for creating the sort function for the data ordering\n * @param {array} removedColumnIds - An array of column IDs that are required to remove from display\n */\nexport default function StoreOrdersTableHeaderView({\n order,\n orderBy,\n headerBackgroundColor = '',\n headerTextColor = '',\n createSortHandler = () => { },\n removedColumnIds = []\n}) {\n const { t } = useTranslation()\n\n const headerContentMap = {\n [ORDERS_TABLE_HEADERS_IDS.DATE]: <div className='store-orders-table-header-view store-orders-table-header-view-date'>\n <HiOutlineShoppingBag className=\"store-orders-table-header-view-date-image\" />\n <div className=\"store-orders-table-header-text store-orders-table-header-view-date-text\">{t('STORE_ORDERS_TABLE_HEADER_DATE')}</div>\n </div>,\n [ORDERS_TABLE_HEADERS_IDS.SOURCE]: <div className='store-orders-table-header-view store-orders-table-header-text store-orders-table-header-view-source'>{t('STORE_ORDERS_TABLE_HEADER_SOURCE')}</div>,\n [ORDERS_TABLE_HEADERS_IDS.TOTAL_PRODUCTS_COUNT]: <div className='store-orders-table-header-view store-orders-table-header-text store-orders-table-header-view-total-products-count'>{t('STORE_ORDERS_TABLE_HEADER_TOTAL_PRODUCTS_COUNT')}</div>,\n [ORDERS_TABLE_HEADERS_IDS.TOTAL_PRICE]: <div className='store-orders-table-header-view store-orders-table-header-text store-orders-table-header-view-total-price'>{t('STORE_ORDERS_TABLE_HEADER_TOTAL_PRICE')}</div>,\n [ORDERS_TABLE_HEADERS_IDS.INFLUENCER]: <div className='store-orders-table-header-view store-orders-table-header-text store-orders-table-header-view-influencer'>{t('STORE_ORDERS_TABLE_HEADER_INFLUENCER')}</div>,\n [ORDERS_TABLE_HEADERS_IDS.ACTIONS]: <div className='store-orders-table-header-view store-orders-table-header-text store-orders-table-header-view-actions'>{t('STORE_ORDERS_TABLE_HEADER_ACTIONS')}</div>\n }\n\n const headerStyle = {\n backgroundColor: headerBackgroundColor,\n color: headerTextColor\n }\n\n const StyledTableCell = styled(TableCell)(({ theme }) => ({\n [`&.${tableCellClasses.head}`]: headerStyle,\n }))\n\n const StyledDateTableCell = styled(TableCell)(({ theme }) => ({\n [`&.${tableCellClasses.head}`]: {\n ...headerStyle,\n textAlign: 'start'\n },\n }))\n\n const OrdersTableHeaderCell = ({ id, label, align, tableCellView: TableCellView = StyledTableCell }) => <TableCellView\n key={id}\n align={align}\n padding={'none'}\n sortDirection={orderBy === id ? order : false}\n >\n <TableSortLabel\n active={orderBy === id}\n direction={orderBy === id ? order : 'asc'}\n onClick={createSortHandler(id)}\n >\n {label}\n {orderBy === id ? (\n <Box component=\"span\" sx={visuallyHidden}>\n {order === 'desc' ? 'sorted descending' : 'sorted ascending'}\n </Box>\n ) : null}\n </TableSortLabel>\n </TableCellView>\n\n return (\n isMobile ? <OrdersTableHeaderCell align={'left'} tableCellView={StyledDateTableCell} label={\n <div className='orders-table-header-view orders-table-header-view-product'>\n <HiOutlineShoppingBag className=\"orders-table-header-view-product-image\" />\n <div className=\"orders-table-header-text orders-table-header-view-product-text\">{t('ORDERS_TABLE_HEADER_DATE')}</div>\n </div>\n } /> : <>\n {\n removedColumnIds?.length > 0 ? Object.keys(headerContentMap).filter(columnId => !removedColumnIds.includes(columnId)).map(columnId => <OrdersTableHeaderCell key={columnId} align={'left'} label={\n headerContentMap[columnId]\n } />) : <>\n <OrdersTableHeaderCell id={ORDERS_TABLE_HEADERS_IDS.DATE} align={'left'} label={\n headerContentMap[ORDERS_TABLE_HEADERS_IDS.DATE]\n } />\n <OrdersTableHeaderCell id={ORDERS_TABLE_HEADERS_IDS.SOURCE} align={'left'} label={\n headerContentMap[ORDERS_TABLE_HEADERS_IDS.SOURCE]\n } />\n <OrdersTableHeaderCell id={ORDERS_TABLE_HEADERS_IDS.TOTAL_PRODUCTS_COUNT} align={'left'} label={\n headerContentMap[ORDERS_TABLE_HEADERS_IDS.TOTAL_PRODUCTS_COUNT]\n } />\n <OrdersTableHeaderCell id={ORDERS_TABLE_HEADERS_IDS.TOTAL_PRICE} align={'left'} label={\n headerContentMap[ORDERS_TABLE_HEADERS_IDS.TOTAL_PRICE]\n } />\n <OrdersTableHeaderCell id={ORDERS_TABLE_HEADERS_IDS.INFLUENCER} align={'left'} label={\n headerContentMap[ORDERS_TABLE_HEADERS_IDS.INFLUENCER]\n } />\n <OrdersTableHeaderCell id={ORDERS_TABLE_HEADERS_IDS.ACTIONS} align={'left'} label={\n headerContentMap[ORDERS_TABLE_HEADERS_IDS.ACTIONS]\n } />\n </>\n }\n </>\n )\n}","import PaydinTable from 'components/PaydinTable/PaydinTable'\nimport { MOBILE_STORE_ORDERS_TABLE_ROW_HEIGHT_PX, ORDERS_TABLE_HEADERS_IDS, ORDERS_TABLE_ROWS_PER_PAGE, STORE_ORDERS_TABLE_ROW_HEIGHT_PX, PRODUCTS_TABLE_ROW_HEIGHT_PX, STORE_ORDERS_TABLE_COUNT, STORE_ORDERS_TABLE_ROWS_PER_PAGE, VIEW_MODES, CONTENT_TYPES } from 'constants/general.constants'\nimport React, { useState } from 'react'\nimport { isMobile } from 'utils/deviceUtils'\nimport { HiOutlineShoppingBag } from 'react-icons/hi'\nimport { extractStoreOrderRowData } from 'utils/dataUtils'\nimport './StoreOrdersTable.css'\nimport { useTranslation } from 'react-i18next'\nimport { getStoreOrders } from 'api/store/store'\nimport StoreOrdersTableRowView from 'components/StoreOrdersTableRowView/StoreOrdersTableRowView'\nimport StoreOrdersTableHeaderView from 'components/StoreOrdersTableHeaderView/StoreOrdersTableHeaderView'\nimport ContentDialog from 'dialogs/ContentDialog/ContentDialog'\nimport { useHistoryContext } from 'contexts/History'\n\n/**\n * Represents an orders table for a specific link.\n * @param {array} removedColumnIds - An array of column IDs to remove from display\n */\nexport default function StoreOrdersTable({\n removedColumnIds = []\n}) {\n const { t } = useTranslation()\n const history = useHistoryContext()\n\n const [contentDialogState, setContentDialogState] = useState({\n isOpen: false,\n type: CONTENT_TYPES.LINK\n })\n\n function createData(\n id,\n createdAt,\n totalProductsCount,\n totalPrice,\n status,\n url,\n influencerImage,\n linkDetails,\n currency\n ) {\n const data = {\n id,\n [ORDERS_TABLE_HEADERS_IDS.DATE]: createdAt,\n [ORDERS_TABLE_HEADERS_IDS.TOTAL_PRODUCTS_COUNT]: totalProductsCount,\n [ORDERS_TABLE_HEADERS_IDS.TOTAL_PRICE]: totalPrice,\n status,\n url,\n influencerImage,\n linkDetails,\n [ORDERS_TABLE_HEADERS_IDS.SOURCE]: linkDetails?.linkTitle,\n currency,\n openLinkContentDialog,\n openShortContentDialog\n }\n\n if (removedColumnIds.length > 0) {\n Object.keys(data).forEach(columnId => {\n if (removedColumnIds.includes(columnId)) {\n delete data[columnId]\n }\n })\n }\n\n return data\n }\n\n function normalizeTableData(items) {\n const normalizedData = []\n\n for (const item of items) {\n normalizedData.push(\n createData(\n item?.id,\n item?.createdAt,\n item?.totalProductsCount,\n item?.totalPrice,\n item?.status,\n item?.url,\n item?.influencerProfileImage,\n item?.linkDetails,\n item?.currency\n )\n )\n }\n\n return normalizedData\n }\n\n function getStoreOrdersData(count, skip, onSuccess = () => { }, onFailure = () => { }) {\n getStoreOrders(STORE_ORDERS_TABLE_COUNT, skip)\n .then(orders => {\n onSuccess(normalizeTableData(orders?.data ? orders?.data.map(order => extractStoreOrderRowData(order)) : []))\n })\n .catch(error => {\n console.log(error)\n onFailure(error)\n })\n }\n\n function closeContentDialog() {\n setContentDialogState(prev => ({\n ...prev,\n isOpen: false\n }))\n }\n\n function openLinkContentDialog(linkId) {\n setContentDialogState({\n isOpen: true,\n type: CONTENT_TYPES.LINK,\n linkId\n })\n }\n\n function openShortContentDialog(shortId) {\n setContentDialogState({\n isOpen: true,\n type: CONTENT_TYPES.SHORT,\n linkId: shortId\n })\n }\n\n return (\n <>\n <PaydinTable\n visibleRowsCount={STORE_ORDERS_TABLE_ROWS_PER_PAGE}\n borderRadius='10px'\n rowHeightPx={isMobile ? MOBILE_STORE_ORDERS_TABLE_ROW_HEIGHT_PX : STORE_ORDERS_TABLE_ROW_HEIGHT_PX}\n rowView={StoreOrdersTableRowView}\n headerView={StoreOrdersTableHeaderView}\n hideHeaderInMobile={true}\n dataGenerator={getStoreOrdersData}\n noItemsImage={<HiOutlineShoppingBag className='orders-table-no-items-image' />}\n noItemsText={t('ORDERS_TABLE_NO_ITEMS_TO_DISPLAY_MESSAGE')}\n removedColumnIds={removedColumnIds}\n shouldPaginate={false}\n showTotalCount={false}\n />\n <ContentDialog\n isDialogOpen={contentDialogState.isOpen}\n handleDialogClose={closeContentDialog}\n data={{\n linkId: contentDialogState.linkId\n }}\n mode={VIEW_MODES.PREVIEW}\n onDelete={() => history.goBack()}\n contentType={contentDialogState.type}\n />\n </>\n )\n}\n","\nimport Fab from \"@mui/material/Fab\"; \nimport './FloatingButton.css'\nimport { useEffect, useState } from \"react\";\nimport { Slide } from \"@mui/material\";\n\nexport default function FloatingButton({\n icon = null,\n text = '',\n clickFunction = () => {}\n}) {\n\n const [shown, setShown] = useState(false)\n\n useEffect(() => {\n setTimeout(() => setShown(true), 300)\n }, [])\n\n return (\n <Slide direction=\"up\" in={shown} mountOnEnter unmountOnExit>\n <div className=\"floating-button-container\">\n <Fab onClick={clickFunction} variant=\"extended\" style={{background: \"linear-gradient(135deg, rgb(42, 39, 218), rgb(0, 204, 255))\", boxShadow: \"rgba(0, 77, 255, 0.5) 0px 2px 16px\"}}> \n <div className=\"floating-button-content\">\n {icon ?? null}\n <div className=\"floating-button-container-text\">{text}</div>\n </div>\n </Fab> \n </div>\n </Slide>\n )\n}","import React, { useEffect, useMemo, useState } from 'react'\nimport './HomePage.css'\nimport { useGeneralDataContext, useUserDetailsContext } from 'contexts/User'\nimport ImageBox from 'components/ImageBox/ImageBox'\nimport { isMobile } from 'utils/deviceUtils'\nimport { useTranslation } from 'react-i18next'\nimport { BiLink } from 'react-icons/bi'\nimport ShortsImage from 'embeddedImages/ShortsImage'\nimport { FiUsers } from 'react-icons/fi'\nimport { useHistoryContext } from 'contexts/History'\nimport {\n APPEARANCE_PAGE_URL,\n INFLUENCERS_PAGE_URL,\n LINKS_PAGE_URL,\n PRICING_PLANS_PAGE_URL,\n SETTINGS_PAGE_URL,\n SHORTS_PAGE_URL\n} from 'constants/routes.constants'\nimport { ALERT_MESSAGE_TYPES, APPEARANCE_PAGE_LOGO_SECTION_ID, APPEARANCE_PAGE_THEME_SECTION_ID, CONTENT_TYPES, HOME_PAGE_DESKTOP_GET_INFLUENCERS_API_COUNT, HOME_PAGE_DESKTOP_GET_SHORTS_API_COUNT, HOME_PAGE_GET_LINKS_API_COUNT, HOME_PAGE_MOBILE_GET_INFLUENCERS_API_COUNT, HOME_PAGE_MOBILE_GET_SHORTS_API_COUNT, HOME_PAGE_RECENT_ACTIVITIES_TABS, HOME_PAGE_TASKS, HOME_PAGE_TODO_TASK_ANALYTICS_IMAGE_URL, HOME_PAGE_TODO_TASK_INSTANT_IMAGE_URL, HOME_PAGE_TODO_TASK_LOGO_IMAGE_URL, HOME_PAGE_TODO_TASK_SHIPPING_IMAGE_URL, HOME_PAGE_TODO_TASK_UTM_IMAGE_URL, LINK_TYPES, NOT_PRO_MAX_INFLUENCER_NUMBER, SETTINGS_PAGE_ANALYTICS_SECTION_ID, SETTINGS_PAGE_SHIPPING_AND_RETURN_SECTION_ID, SETTINGS_PAGE_UTM_SECTION_ID, VIEW_MODES } from 'constants/general.constants'\nimport { GetLinksAPI } from 'api/links/links'\nimport { GetInfluencers, GetInfluencersAnalytics } from 'api/influencers/influencers'\nimport Loader from 'components/Loader/Loader'\nimport LinkItem from 'components/LinkItem/LinkItem'\nimport ShortItem from 'components/ShortItem/ShortItem'\nimport InfluencerItem from 'components/InfluencerItem/InfluencerItem'\nimport { extractBasicInfluencerAnalytics, extractInfluencerData, extractLinkData } from 'utils/dataUtils'\nimport HomePageSection from 'components/HomePageSection/HomePageSection'\nimport MobileRecentActivitySection from 'components/MobileRecentActivitySection/MobileRecentActivitySection'\nimport TodoList from 'components/TodoList/TodoList'\n\nimport NoInfluencersFoundImage from 'embeddedImages/NoInfluencersFoundImage'\nimport NoItemsFound from 'components/NoItemsFound/NoItemsFound'\nimport ShopifyConnect from 'components/ShopifyConnect/ShopifyConnect'\nimport StoreOrdersTable from 'components/StoreOrdersTable/StoreOrdersTable'\nimport ContentDialog from 'dialogs/ContentDialog/ContentDialog'\nimport AddLInkFlow from 'components/AddLInkFlow/AddLInkFlow'\nimport AlertMessage from 'components/AlertMessage/AlertMessage'\nimport EventAvailableIcon from '@mui/icons-material/EventAvailable';\nimport FloatingButton from 'components/FloatingButton/FloatingButton'\n\n/**\n * Represents the home page.\n */\nexport default function HomePage() {\n const { t } = useTranslation()\n const {\n userDetails,\n setUserDetails,\n setRecentLinks,\n setRecentShorts,\n setRecentInfluencers,\n hasShopifyStore,\n isFreeUser,\n isFreeUserAndTrialEnded,\n isFreeUserAndTrialPastLastWeek,\n maxInfleuncersAllowed,\n } = useUserDetailsContext()\n const {\n openFreeTrialDialog,\n } = useGeneralDataContext()\n const history = useHistoryContext()\n\n const taskList = useMemo(() => ([\n {\n name: HOME_PAGE_TASKS.ADD_LOGO,\n title: t('HOME_PAGE_TODO_LIST_ADD_LOGO_TASK_TITLE'),\n description: t('HOME_PAGE_TODO_LIST_ADD_LOGO_TASK_DESCRIPTION'),\n buttonText: t('HOME_PAGE_TODO_LIST_ADD_LOGO_TASK_BUTTON_TEXT'),\n onButtonClick: navigateToLogoAddition,\n image: <ImageBox className='home-page-task-image' image={HOME_PAGE_TODO_TASK_LOGO_IMAGE_URL} />,\n isDone: ![null, undefined, ''].includes(userDetails?.businessLogo)\n },\n {\n name: HOME_PAGE_TASKS.CUSTOMIZE_THEME,\n title: t('HOME_PAGE_TODO_LIST_CUSTOMIZE_THEME_TASK_TITLE'),\n description: t('HOME_PAGE_TODO_LIST_CUSTOMIZE_THEME_TASK_DESCRIPTION'),\n buttonText: t('HOME_PAGE_TODO_LIST_CUSTOMIZE_THEME_TASK_BUTTON_TEXT'),\n onButtonClick: navigateToThemeCustomization,\n image: <ImageBox className='home-page-task-image' image={HOME_PAGE_TODO_TASK_INSTANT_IMAGE_URL} />,\n isDone: !userDetails?.theme?.isInitial\n },\n {\n name: HOME_PAGE_TASKS.ADD_SHIPPING_AND_RETURN,\n title: t('HOME_PAGE_TODO_LIST_ADD_SHIPPING_AND_RETURN_TASK_TITLE'),\n description: t('HOME_PAGE_TODO_LIST_ADD_SHIPPING_AND_RETURN_TASK_DESCRIPTION'),\n buttonText: t('HOME_PAGE_TODO_LIST_ADD_SHIPPING_AND_RETURN_TASK_BUTTON_TEXT'),\n onButtonClick: navigateToShippingAndReturnURLAddition,\n image: <ImageBox className='home-page-task-image' image={HOME_PAGE_TODO_TASK_SHIPPING_IMAGE_URL} />,\n isDone: userDetails?.settings?.shippingAndReturnsUrl !== ''\n },\n {\n name: HOME_PAGE_TASKS.ADD_UTM,\n title: t('HOME_PAGE_TODO_LIST_ADD_UTM_PARAMS_TASK_TITLE'),\n description: t('HOME_PAGE_TODO_LIST_ADD_UTM_PARAMS_TASK_DESCRIPTION'),\n buttonText: t('HOME_PAGE_TODO_LIST_ADD_UTM_PARAMS_TASK_BUTTON_TEXT'),\n onButtonClick: navigateToURLParamsAddition,\n image: <ImageBox className='home-page-task-image' image={HOME_PAGE_TODO_TASK_UTM_IMAGE_URL} />,\n isDone: hasUTMParams()\n },\n {\n name: HOME_PAGE_TASKS.ADD_ANALYTICS,\n title: t('HOME_PAGE_TODO_LIST_ADD_ANALYTICS_TASK_TITLE'),\n description: t('HOME_PAGE_TODO_LIST_ADD_ANALYTICS_TASK_DESCRIPTION'),\n buttonText: t('HOME_PAGE_TODO_LIST_ADD_ANALYTICS_TASK_BUTTON_TEXT'),\n onButtonClick: navigateToAnalyticsIDsAddition,\n image: <ImageBox className='home-page-task-image' image={HOME_PAGE_TODO_TASK_ANALYTICS_IMAGE_URL} />,\n isDone: hasAnalyticsIDs()\n }\n ]), [userDetails])\n\n const [recentActivitiesTab, setRecentActivitiesTab] = useState(HOME_PAGE_RECENT_ACTIVITIES_TABS.INSTANTS)\n const [isLoadingDisplayContent, setIsLoadingDisplayContent] = useState(false)\n const [isLoadingFinished, setIsLoadingFinished] = useState({\n links: false,\n shorts: false,\n influencers: false\n })\n const [recentActivitiesItems, setRecentActivitiesItems] = useState([])\n const [mobileRecentActivitiesItems, setMobileRecentActivitiesItems] = useState({\n links: [],\n shorts: [],\n influencers: []\n })\n const [mobileRecentActivitiesLoadingState, setMobileRecentActivitiesLoadingState] = useState({\n links: false,\n shorts: false,\n influencers: false\n })\n const [isLoadingInfluencersAnalytics, setIsLoadingInfluencersAnalytics] = useState(false)\n const [influencersAnalytics, setInfluencersAnalytics] = useState([])\n const [expandedTask, setExpandedTask] = useState(taskList.find(task => !task?.isDone)?.name)\n const [contentDialogState, setContentDialogState] = useState({\n isOpen: false,\n mode: VIEW_MODES.CREATE,\n onSaveSuccess: () => { }\n })\n const [addFlowTrigger, setAddFlowTrigger] = useState(false)\n\n useEffect(() => {\n if (isMobile) {\n getLinks(links => {\n setMobileRecentActivitiesItems(prev => ({\n ...prev,\n links\n }))\n })\n getShorts(shorts => {\n setMobileRecentActivitiesItems(prev => ({\n ...prev,\n shorts\n }))\n })\n }\n // Get influencer anyway\n if (userDetails?.isAdmin) {\n getInfluencers(influencers => {\n setMobileRecentActivitiesItems(prev => ({\n ...prev,\n influencers\n }))\n })\n getInfluencersAnalytics()\n }\n }, [])\n\n useEffect(() => {\n if (!isMobile) {\n switch (recentActivitiesTab) {\n case HOME_PAGE_RECENT_ACTIVITIES_TABS.INSTANTS:\n if (userDetails?.recentActivitiesData?.links.length > 0) {\n setRecentActivitiesItems(userDetails?.recentActivitiesData?.links)\n setIsLoadingFinished(prev => ({\n ...prev,\n links: true\n }))\n } else {\n loadLinksFromServer()\n }\n break\n\n case HOME_PAGE_RECENT_ACTIVITIES_TABS.SHORTS:\n if (userDetails?.recentActivitiesData?.shorts.length > 0) {\n setRecentActivitiesItems(userDetails?.recentActivitiesData?.shorts)\n setIsLoadingFinished(prev => ({\n ...prev,\n shorts: true\n }))\n } else {\n loadShortsFromServer()\n }\n break\n\n default: // influencers\n if (userDetails?.recentActivitiesData?.influencers?.items.length > 0) {\n setRecentActivitiesItems(userDetails?.recentActivitiesData?.influencers?.items?.slice(0, HOME_PAGE_DESKTOP_GET_INFLUENCERS_API_COUNT))\n setInfluencersAnalytics(userDetails?.recentActivitiesData?.influencers?.analytics)\n setIsLoadingFinished(prev => ({\n ...prev,\n influencers: true\n }))\n } else {\n loadInfluencersFromServer()\n }\n break\n }\n }\n }, [recentActivitiesTab])\n\n function loadLinksFromServer() {\n if (isMobile) {\n setMobileRecentActivitiesLoadingState(prev => ({\n ...prev,\n links: true\n }))\n getLinks(links => {\n setMobileRecentActivitiesItems(prev => ({\n ...prev,\n links\n }))\n setMobileRecentActivitiesLoadingState(prev => ({\n ...prev,\n links: false\n }))\n })\n } else {\n setRecentActivitiesItems([])\n setIsLoadingDisplayContent(true)\n getLinks(links => setRecentActivitiesItems(links))\n }\n }\n\n function loadShortsFromServer() {\n if (isMobile) {\n setMobileRecentActivitiesLoadingState(prev => ({\n ...prev,\n shorts: true\n }))\n getShorts(shorts => {\n setMobileRecentActivitiesItems(prev => ({\n ...prev,\n shorts\n }))\n setMobileRecentActivitiesLoadingState(prev => ({\n ...prev,\n shorts: false\n }))\n })\n }\n setRecentActivitiesItems([])\n setIsLoadingDisplayContent(true)\n getShorts(shorts => setRecentActivitiesItems(shorts))\n }\n\n function loadInfluencersFromServer() {\n if (isMobile) {\n getInfluencers(influencers => {\n setMobileRecentActivitiesItems(prev => ({\n ...prev,\n influencers\n }))\n })\n getInfluencersAnalytics()\n } else {\n setRecentActivitiesItems([])\n getInfluencers(influencers => setRecentActivitiesItems(influencers))\n getInfluencersAnalytics()\n }\n }\n\n function getLinks(onSuccess = () => { }) {\n setIsLoadingFinished(prev => ({\n ...prev,\n links: false\n }))\n setIsLoadingDisplayContent(true)\n setMobileRecentActivitiesLoadingState(prev => ({\n ...prev,\n links: true\n }))\n const linksCount = HOME_PAGE_GET_LINKS_API_COUNT\n GetLinksAPI(userDetails?.businessId, '', linksCount, 0, LINK_TYPES.LOOK)\n .then(data => {\n const loadedLinks = data?.links?.map(item => extractLinkData(item))\n onSuccess(loadedLinks)\n setRecentLinks(loadedLinks)\n })\n .catch(console.log)\n .finally(() => {\n setIsLoadingDisplayContent(false)\n setMobileRecentActivitiesLoadingState(prev => ({\n ...prev,\n links: false\n }))\n setIsLoadingFinished(prev => ({\n ...prev,\n links: true\n }))\n })\n }\n\n function getShorts(onSuccess = () => { }) {\n setIsLoadingFinished(prev => ({\n ...prev,\n shorts: false\n }))\n setIsLoadingDisplayContent(true)\n setMobileRecentActivitiesLoadingState(prev => ({\n ...prev,\n shorts: true\n }))\n const shortsCount = isMobile ? HOME_PAGE_MOBILE_GET_SHORTS_API_COUNT : HOME_PAGE_DESKTOP_GET_SHORTS_API_COUNT\n GetLinksAPI(userDetails?.businessId, '', shortsCount, 0, LINK_TYPES.SHORT)\n .then(data => {\n const loadedShorts = data?.links?.map(item => extractLinkData(item))\n onSuccess(loadedShorts)\n setRecentShorts(loadedShorts)\n })\n .catch(console.log)\n .finally(() => {\n setIsLoadingDisplayContent(false)\n setMobileRecentActivitiesLoadingState(prev => ({\n ...prev,\n shorts: false\n }))\n setIsLoadingFinished(prev => ({\n ...prev,\n shorts: true\n }))\n })\n }\n\n function getInfluencers(onSuccess = () => { }) {\n setIsLoadingFinished(prev => ({\n ...prev,\n influencers: false\n }))\n setIsLoadingDisplayContent(true)\n setMobileRecentActivitiesLoadingState(prev => ({\n ...prev,\n influencers: true\n }))\n GetInfluencers()\n .then(data => {\n const loadedInfluencers = data?.map(item => extractInfluencerData(item))?.filter(influencer => influencer?.isActive)\n onSuccess(loadedInfluencers)\n setRecentInfluencers(loadedInfluencers)\n })\n .catch(console.log)\n .finally(() => {\n setIsLoadingDisplayContent(false)\n setMobileRecentActivitiesLoadingState(prev => ({\n ...prev,\n influencers: false\n }))\n setIsLoadingFinished(prev => ({\n ...prev,\n influencers: true\n }))\n })\n }\n\n function getInfluencersAnalytics() {\n setIsLoadingInfluencersAnalytics(true)\n GetInfluencersAnalytics()\n .then(response => {\n const loadedInfluencersAnalytics = response?.map(influencer => extractBasicInfluencerAnalytics(influencer))\n setInfluencersAnalytics(loadedInfluencersAnalytics)\n setUserDetails(prev => ({\n ...prev,\n recentActivitiesData: {\n ...prev.recentActivitiesData,\n influencers: {\n ...prev.recentActivitiesData.influencers,\n analytics: loadedInfluencersAnalytics\n }\n }\n }))\n })\n .catch(console.log)\n .finally(() => {\n setIsLoadingInfluencersAnalytics(false)\n })\n }\n\n function hasUTMParams() {\n const utmParams = userDetails?.settings?.utmParams\n return (\n utmParams?.UTMSource !== '' ||\n utmParams?.UTMCampaign !== '' ||\n utmParams?.UTMMedium !== '' ||\n utmParams?.UTMTerm !== '' ||\n utmParams?.UTMContent !== ''\n )\n }\n\n function hasAnalyticsIDs() {\n const settings = userDetails?.settings\n return (\n settings?.facebookPixelId !== '' ||\n settings?.googleAnalyticsId !== ''\n )\n }\n\n function navigateToLogoAddition() {\n history.push(`${APPEARANCE_PAGE_URL}#${APPEARANCE_PAGE_LOGO_SECTION_ID}`)\n }\n\n function navigateToThemeCustomization() {\n history.push(`${APPEARANCE_PAGE_URL}#${APPEARANCE_PAGE_THEME_SECTION_ID}`)\n }\n\n function navigateToShippingAndReturnURLAddition() {\n history.push(`${SETTINGS_PAGE_URL}#${SETTINGS_PAGE_SHIPPING_AND_RETURN_SECTION_ID}`)\n }\n\n function navigateToURLParamsAddition() {\n history.push(`${SETTINGS_PAGE_URL}#${SETTINGS_PAGE_UTM_SECTION_ID}`)\n }\n\n function navigateToAnalyticsIDsAddition() {\n history.push(`${SETTINGS_PAGE_URL}#${SETTINGS_PAGE_ANALYTICS_SECTION_ID}`)\n }\n\n function reloadAfterCreation(tabType, loadItemsCallback = () => { }) {\n if (isMobile) {\n loadItemsCallback()\n } else {\n if (recentActivitiesTab === tabType) {\n loadItemsCallback()\n } else {\n switch (tabType) {\n case HOME_PAGE_RECENT_ACTIVITIES_TABS.INSTANTS:\n setRecentLinks([])\n break\n case HOME_PAGE_RECENT_ACTIVITIES_TABS.SHORTS:\n setRecentShorts([])\n break\n default:\n setRecentInfluencers([])\n break\n }\n }\n }\n }\n\n function createLink() {\n if (isFreeUserAndTrialEnded()) {\n openFreeTrialDialog()\n } else {\n setAddFlowTrigger(true)\n }\n }\n\n function createShort() {\n setContentDialogState({\n isOpen: true,\n contentType: CONTENT_TYPES.SHORT,\n onSaveSuccess: () => reloadAfterCreation(HOME_PAGE_RECENT_ACTIVITIES_TABS.SHORTS, loadShortsFromServer)\n })\n }\n\n function createInfluencer() {\n const maxInfleuncers = maxInfleuncersAllowed()\n if (userDetails?.recentActivitiesData?.influencers?.items.length >= maxInfleuncers) {\n if (maxInfleuncers > 3) {\n openFreeTrialDialog(true, t('TOO_MANY_INFLUENCER_15_DIALOG_TITLE'), t('TOO_MANY_INFLUENCER_15_DIALOG_SUBTITLE'))\n } else if (maxInfleuncers > 0) {\n openFreeTrialDialog(true, t('TOO_MANY_INFLUENCER_3_DIALOG_TITLE'), t('TOO_MANY_INFLUENCER_3_DIALOG_SUBTITLE'))\n } else {\n openFreeTrialDialog()\n }\n } else {\n setContentDialogState({\n isOpen: true,\n contentType: CONTENT_TYPES.INFLUENCER,\n onSaveSuccess: () => reloadAfterCreation(HOME_PAGE_RECENT_ACTIVITIES_TABS.INFLUENCERS, loadInfluencersFromServer)\n })\n }\n }\n \n function isAbleToCreateFirstInfluencer() {\n const maxInfleuncers = maxInfleuncersAllowed()\n if (maxInfleuncers === 0) {\n return false\n }\n return true\n }\n\n function displayRecentLinks() {\n setIsLoadingFinished(prev => ({\n ...prev,\n links: false\n }))\n setRecentActivitiesTab(HOME_PAGE_RECENT_ACTIVITIES_TABS.INSTANTS)\n }\n\n function displayRecentShorts() {\n setIsLoadingFinished(prev => ({\n ...prev,\n shorts: false\n }))\n setRecentActivitiesTab(HOME_PAGE_RECENT_ACTIVITIES_TABS.SHORTS)\n }\n\n function displayRecentInfluencers() {\n setIsLoadingFinished(prev => ({\n ...prev,\n influencers: false\n }))\n setRecentActivitiesTab(HOME_PAGE_RECENT_ACTIVITIES_TABS.INFLUENCERS)\n }\n\n function renderMobileNoRecentLinks() {\n return <NoItemsFound\n image={<BiLink className='home-page-no-recent-activity-image' />}\n title={t('HOME_PAGE_RECENT_ACTIVITIES_NO_RECENT_LINKS_TITLE')}\n subtitle={t('HOME_PAGE_RECENT_ACTIVITIES_NO_RECENT_LINKS_SUBTITLE')}\n buttonText={t('HOME_PAGE_RECENT_ACTIVITIES_NO_RECENT_LINKS_BUTTON_TEXT')}\n addItemButtonClickHandler={createLink}\n isEmbeddedIcon={true}\n showButton={userDetails?.permissions?.isActiveInfluencer}\n />\n }\n\n function renderMobileNoRecentShorts() {\n return <NoItemsFound\n image={<ShortsImage className='home-page-no-recent-activity-image' />}\n title={t('HOME_PAGE_RECENT_ACTIVITIES_NO_RECENT_SHORTS_TITLE')}\n subtitle={t('HOME_PAGE_RECENT_ACTIVITIES_NO_RECENT_SHORTS_SUBTITLE')}\n buttonText={t('HOME_PAGE_RECENT_ACTIVITIES_NO_RECENT_SHORTS_BUTTON_TEXT')}\n addItemButtonClickHandler={createShort}\n isEmbeddedIcon={true}\n showButton={userDetails?.permissions?.isActiveInfluencer}\n />\n }\n\n function renderMobileNoRecentInfluencers() {\n return <NoItemsFound\n image={<NoInfluencersFoundImage className='home-page-no-recent-activity-image' />}\n title={t('HOME_PAGE_RECENT_ACTIVITIES_NO_RECENT_INFLUENCERS_TITLE')}\n subtitle={!isAbleToCreateFirstInfluencer() ? t('INFLUENCERS_ITEM_NO_INFLUENCERS_FOUND_FREE_USER_SUBTITLE') : t('INFLUENCERS_ITEM_NO_INFLUENCERS_FOUND_SUBTITLE')}\n buttonText={!isAbleToCreateFirstInfluencer() ? t('INFLUENCERS_PAGE_TOPBAR_ADD_INFLUENCER_BUTTON_FREE_SUBSCRIPTION_TEXT') : t('INFLUENCERS_ITEM_NO_INFLUENCERS_FOUND_ADD_INFLUENCER_BUTTON_TEXT')}\n addItemButtonClickHandler={!isAbleToCreateFirstInfluencer() ? upgradePlan : createInfluencer}\n isEmbeddedIcon={true}\n showButton={userDetails?.permissions?.isActiveInfluencer}\n buttonStyles={{\n backgroundColor: !isAbleToCreateFirstInfluencer() ? 'black' : 'white',\n color: !isAbleToCreateFirstInfluencer() ? 'white' : 'black'\n }}\n />\n }\n\n function renderMobileRecentLinks() {\n return mobileRecentActivitiesItems.links.map(link => <LinkItem\n key={link?.linkId}\n linkId={link?.linkId}\n image={link?.image}\n defaultImage={link?.defaultImage}\n views={link?.views}\n revenue={link?.revenue}\n createdAt={link?.createdAt}\n currency={link?.currency}\n isLinkExpired={link?.isLinkExpired}\n title={link?.title}\n influencerUsername={link?.influencerUsername}\n onDeleteLink={loadLinksFromServer}\n onUpdateLink={loadLinksFromServer}\n />)\n }\n\n function renderMobileRecentShorts() {\n return mobileRecentActivitiesItems.shorts.map(short => <ShortItem\n key={short?.linkId}\n shortId={short?.linkId}\n image={short?.image}\n defaultImage={short?.defaultImage}\n views={short?.views}\n checkouts={short?.checkouts}\n revenue={short?.revenue}\n createdAt={short?.createdAt}\n currency={short?.currency}\n isLinkExpired={short?.isLinkExpired}\n title={short?.title}\n url={short?.shoppingRedirectUrl}\n urlType={short?.urlType}\n influencerUsername={short?.influencerUsername}\n onDeleteLink={loadShortsFromServer}\n onUpdate={loadShortsFromServer}\n />)\n }\n\n function renderMobileRecentInfluencers() {\n return mobileRecentActivitiesItems.influencers?.slice(0, HOME_PAGE_DESKTOP_GET_INFLUENCERS_API_COUNT).map(influencer => <InfluencerItem\n key={influencer?.username}\n image={influencer?.image}\n username={influencer?.username}\n isLoadingAnalytics={isLoadingInfluencersAnalytics}\n clicks={influencersAnalytics?.find(influencerAnalytics => influencerAnalytics?.username === influencer?.username)?.totalClicks}\n sales={influencersAnalytics?.find(influencerAnalytics => influencerAnalytics?.username === influencer?.username)?.totalSales}\n onDelete={loadInfluencersFromServer}\n onUpdate={loadInfluencersFromServer}\n />)\n }\n\n function renderRecentActivityItem(item) {\n switch (recentActivitiesTab) {\n case HOME_PAGE_RECENT_ACTIVITIES_TABS.INSTANTS:\n return <LinkItem\n key={item?.linkId}\n linkId={item?.linkId}\n image={item?.image}\n defaultImage={item?.defaultImage}\n views={item?.views}\n createdAt={item?.createdAt}\n title={item?.title}\n influencerUsername={item?.influencerUsername}\n onDeleteLink={loadLinksFromServer}\n />\n\n case HOME_PAGE_RECENT_ACTIVITIES_TABS.SHORTS:\n return <ShortItem\n key={item?.linkId}\n shortId={item?.linkId}\n image={item?.image}\n defaultImage={item?.defaultImage}\n views={item?.views}\n checkouts={item?.checkouts}\n revenue={item?.revenue}\n createdAt={item?.createdAt}\n currency={item?.currency}\n isLinkExpired={item?.isLinkExpired}\n title={item?.title}\n url={item?.shoppingRedirectUrl}\n urlType={item?.urlType}\n influencerUsername={item?.influencerUsername}\n onDeleteLink={loadShortsFromServer}\n />\n\n default:\n return <InfluencerItem\n key={item?.username}\n image={item?.image}\n username={item?.username}\n isLoadingAnalytics={isLoadingInfluencersAnalytics}\n clicks={influencersAnalytics?.find(influencerAnalytics => influencerAnalytics?.username === item?.username)?.totalClicks}\n sales={influencersAnalytics?.find(influencerAnalytics => influencerAnalytics?.username === item?.username)?.totalSales}\n />\n }\n }\n\n function seeAllLinks() {\n history.push(LINKS_PAGE_URL)\n }\n\n function seeAllShorts() {\n history.push(SHORTS_PAGE_URL)\n }\n\n function seeAllInfluencers() {\n history.push(INFLUENCERS_PAGE_URL)\n }\n\n function seeAll() {\n switch (recentActivitiesTab) {\n case HOME_PAGE_RECENT_ACTIVITIES_TABS.INSTANTS:\n seeAllLinks()\n break\n case HOME_PAGE_RECENT_ACTIVITIES_TABS.SHORTS:\n seeAllShorts()\n break\n default:\n seeAllInfluencers()\n break\n }\n }\n\n function renderSecondaryButtons() {\n return <>\n {\n userDetails?.permissions?.isActiveInfluencer && <div className={`${isMobile ? 'mobile-home-page-header-button' : 'home-page-header-button'} home-page-header-create-short-button`} onClick={createShort}>\n <ShortsImage className='home-page-header-button-image' />\n <div className={isMobile ? \"mobile-home-page-header-button-text\" : \"home-page-header-button-text\"}>{t('HOME_PAGE_CREATE_SHORT_BUTTON_TEXT')}</div>\n </div>\n }\n {\n !isFreeUserAndTrialEnded() && userDetails?.isAdmin && <div className={`${isMobile ? 'mobile-home-page-header-button' : 'home-page-header-button'} home-page-header-create-influencer-button`} onClick={createInfluencer}>\n <FiUsers className='home-page-header-button-image' />\n <div className={isMobile ? \"mobile-home-page-header-button-text\" : \"home-page-header-button-text\"}>{t('HOME_PAGE_CREATE_INFLUENCER_BUTTON_TEXT')}</div>\n </div>\n }\n </>\n }\n\n function upgradePlan() {\n history.push(PRICING_PLANS_PAGE_URL)\n }\n\n function getNoItemsData() {\n switch (recentActivitiesTab) {\n case HOME_PAGE_RECENT_ACTIVITIES_TABS.INSTANTS: return {\n title: t('HOME_PAGE_RECENT_ACTIVITIES_NO_RECENT_LINKS_TITLE'),\n buttonText: t('HOME_PAGE_RECENT_ACTIVITIES_NO_RECENT_LINKS_BUTTON_TEXT'),\n image: <BiLink className='home-page-no-recent-activity-image' />,\n buttonStyles: null,\n onButtonClick: createLink\n }\n\n case HOME_PAGE_RECENT_ACTIVITIES_TABS.SHORTS: return {\n title: t('HOME_PAGE_RECENT_ACTIVITIES_NO_RECENT_SHORTS_TITLE'),\n buttonText: t('HOME_PAGE_RECENT_ACTIVITIES_NO_RECENT_SHORTS_BUTTON_TEXT'),\n image: <ShortsImage className='home-page-no-recent-activity-image' />,\n buttonStyles: null,\n onButtonClick: createShort\n }\n\n default: return { // influencers\n title: t('HOME_PAGE_RECENT_ACTIVITIES_NO_RECENT_INFLUENCERS_TITLE'),\n subtitle: !isAbleToCreateFirstInfluencer() ? t('INFLUENCERS_ITEM_NO_INFLUENCERS_FOUND_FREE_USER_SUBTITLE') : t('INFLUENCERS_ITEM_NO_INFLUENCERS_FOUND_SUBTITLE'),\n buttonText: !isAbleToCreateFirstInfluencer() ? t('INFLUENCERS_PAGE_TOPBAR_ADD_INFLUENCER_BUTTON_FREE_SUBSCRIPTION_TEXT') : t('INFLUENCERS_ITEM_NO_INFLUENCERS_FOUND_ADD_INFLUENCER_BUTTON_TEXT'),\n image: <NoInfluencersFoundImage className='home-page-no-recent-activity-image' />,\n buttonStyles: {\n backgroundColor: !isAbleToCreateFirstInfluencer() ? 'black' : 'white',\n color: !isAbleToCreateFirstInfluencer() ? 'white' : 'black'\n },\n onButtonClick: !isAbleToCreateFirstInfluencer() ? upgradePlan : createInfluencer\n }\n }\n }\n\n function renderItemsList() {\n if (\n recentActivitiesTab === HOME_PAGE_RECENT_ACTIVITIES_TABS.INSTANTS && !isLoadingFinished.links ||\n recentActivitiesTab === HOME_PAGE_RECENT_ACTIVITIES_TABS.SHORTS && !isLoadingFinished.shorts ||\n recentActivitiesTab === HOME_PAGE_RECENT_ACTIVITIES_TABS.INFLUENCERS && !isLoadingFinished.influencers\n ) {\n return\n }\n\n if (recentActivitiesItems.length > 0) {\n return recentActivitiesItems.map(item => renderRecentActivityItem(item))\n }\n\n const noItemsData = getNoItemsData()\n return <NoItemsFound\n image={noItemsData.image}\n title={noItemsData.title}\n subtitle={noItemsData.subtitle}\n buttonText={noItemsData.buttonText}\n addItemButtonClickHandler={noItemsData.onButtonClick}\n isEmbeddedIcon={true}\n buttonStyles={noItemsData.buttonStyles}\n showButton={userDetails?.isAdmin || userDetails?.permissions?.isActiveInfluencer}\n />\n }\n\n function renderLoaderContainer(isLoading) {\n return isLoading && <div className={isMobile ? \"mobile-home-page-recent-activities-content-display-loader-container\" : \"home-page-recent-activities-content-display-loader-container\"}>\n <Loader styles={{\n width: isMobile ? '20px' : '30px',\n height: isMobile ? '20px' : '30px',\n position: 'absolute',\n inset: 0,\n margin: 'auto'\n }} />\n </div>\n }\n\n function onTaskClick(task) {\n setExpandedTask(task)\n }\n\n function hasRemainingTasks() {\n return (\n [null, undefined, ''].includes(userDetails?.businessLogo) ||\n userDetails?.theme?.isInitial ||\n userDetails?.settings?.shippingAndReturnsUrl === '' ||\n !hasUTMParams() ||\n !hasAnalyticsIDs()\n )\n }\n\n function isMobileActiveInfluencer() {\n return isMobile &&\n !userDetails?.isAdmin &&\n userDetails?.permissions?.isActiveInfluencer\n }\n\n function closeContentDialog() {\n setContentDialogState(prev => ({\n ...prev,\n isOpen: false\n }))\n }\n\n return (\n <div className={`${isMobile ? 'mobile-home-page-container' : 'home-page-container'} ${!hasShopifyStore() ? 'no-store-connected' : ''}`}>\n {\n hasShopifyStore() ? <>\n {(!isMobile || userDetails?.permissions?.isActiveInfluencer || userDetails?.isAdmin) && <div className=\"home-page-header\">\n {\n !isMobile && <div className=\"home-page-logo-header\">\n {\n userDetails?.businessLogo ? <ImageBox\n image={userDetails?.businessLogo}\n className='home-page-logo'\n showBorder={true}\n roundImage={true}\n /> : <div className=\"home-page-logo-placeholder\">\n {\n userDetails?.isAdmin ? (userDetails?.username ? userDetails?.username[0] : '') : (userDetails?.influencerUsername ? userDetails?.influencerUsername[0] : '')\n }\n </div>\n }\n {\n userDetails?.isAdmin ? (userDetails?.username && <div className=\"home-page-header-username\">@{userDetails?.username}</div>) : (userDetails?.influencerUsername && <div className=\"home-page-header-username\">@{userDetails?.influencerUsername}</div>)\n }\n </div>\n }\n {\n isFreeUser() && !isMobile && ((userDetails?.isAdmin && isFreeUserAndTrialPastLastWeek()) || isFreeUserAndTrialEnded()) && <div className='home-page-free-trial-alert-message-container'>\n <AlertMessage\n title={userDetails.freeTrialDaysLeft > 0 ? t('HOME_PAGE_FREE_TRIAL_WARNING_TITLE', {daysLeft: userDetails.freeTrialDaysLeft}) : t('HOME_PAGE_FREE_TRIAL_ENDED_TITLE')}\n message={userDetails.freeTrialDaysLeft > 0 ? t('HOME_PAGE_FREE_TRIAL_WARNING_MESSAGE') : (userDetails?.isAdmin ? t('HOME_PAGE_FREE_TRIAL_ENDED_MESSAGE') : t('HOME_PAGE_FREE_TRIAL_ENDED_INFLUENCER_MESSAGE'))}\n buttonText={userDetails?.isAdmin && t('HOME_PAGE_FREE_TRIAL_UPGRADE_BUTTON_TEXT')}\n onButtonClick={upgradePlan}\n type={userDetails.freeTrialDaysLeft > 0 ? ALERT_MESSAGE_TYPES.WARNING : ALERT_MESSAGE_TYPES.ERROR }\n />\n </div> \n }\n <div className={isMobile ? \"mobile-home-page-header-create-buttons\" : \"home-page-header-create-buttons\"} style={{ flexDirection: isMobileActiveInfluencer() && 'row' }}>\n {\n userDetails?.permissions?.isActiveInfluencer && <div className={`${isMobile ? 'mobile-home-page-header-button' : 'home-page-header-button'} home-page-header-create-link-button`} onClick={createLink} style={{ width: isMobileActiveInfluencer() && '60%', minWidth: isMobileActiveInfluencer() && 0 }}>\n <BiLink className='home-page-header-button-image' />\n <div className=\"home-page-header-button-text\">{t('HOME_PAGE_CREATE_LINK_BUTTON_TEXT')}</div>\n </div>\n }\n {\n isMobile ? <div className=\"mobile-home-page-header-create-buttons-row\" style={{ width: isMobileActiveInfluencer() && '40%' }}>\n {renderSecondaryButtons()}\n </div> : <>\n {renderSecondaryButtons()}\n </>\n }\n </div>\n </div>}\n {\n (userDetails?.isAdmin && hasRemainingTasks()) && <HomePageSection\n title={t('HOME_PAGE_TODO_LIST_SECTION_TITLE')}\n description={t('HOME_PAGE_TODO_LIST_SECTION_DESCRIPTION')}\n >\n <TodoList\n tasks={taskList}\n expandedTaskName={expandedTask}\n onTaskClick={onTaskClick}\n />\n </HomePageSection>\n }\n <div className=\"home-page-recent-activities\">\n {\n isMobile ? <>\n <MobileRecentActivitySection\n title={t('MOBILE_HOME_PAGE_RECENT_ACTIVITIES_TITLE', { displayName: HOME_PAGE_RECENT_ACTIVITIES_TABS.INSTANTS.toLowerCase() })}\n buttonText={t('MOBILE_HOME_PAGE_RECENT_ACTIVITIES_SEE_ALL_BUTTON_TEXT')}\n onButtonClick={seeAllLinks}\n >\n {renderLoaderContainer(mobileRecentActivitiesLoadingState.links)}\n {\n isLoadingFinished.links && (\n mobileRecentActivitiesItems.links.length > 0 ? <div className=\"mobile-home-page-recent-activities-content mobile-home-page-recent-instants\">\n {renderMobileRecentLinks()}\n </div> : <div className=\"mobile-home-page-recent-activities-content-no-items\">\n {renderMobileNoRecentLinks()}\n </div>\n )\n }\n </MobileRecentActivitySection>\n <MobileRecentActivitySection\n title={t('MOBILE_HOME_PAGE_RECENT_ACTIVITIES_TITLE', { displayName: HOME_PAGE_RECENT_ACTIVITIES_TABS.SHORTS.toLowerCase() })}\n buttonText={t('MOBILE_HOME_PAGE_RECENT_ACTIVITIES_SEE_ALL_BUTTON_TEXT')}\n onButtonClick={seeAllShorts}\n >\n {renderLoaderContainer(mobileRecentActivitiesLoadingState.shorts)}\n {\n isLoadingFinished.shorts && (\n mobileRecentActivitiesItems.shorts.length > 0 ? <div className=\"mobile-home-page-recent-activities-content mobile-home-page-recent-shorts\">\n {renderMobileRecentShorts()}\n </div> : <div className=\"mobile-home-page-recent-activities-content-no-items\">\n {renderMobileNoRecentShorts()}\n </div>\n )\n }\n </MobileRecentActivitySection>\n {\n userDetails?.isAdmin && <MobileRecentActivitySection\n title={t('MOBILE_HOME_PAGE_RECENT_ACTIVITIES_TITLE', { displayName: HOME_PAGE_RECENT_ACTIVITIES_TABS.INFLUENCERS.toLowerCase() })}\n buttonText={t('MOBILE_HOME_PAGE_RECENT_ACTIVITIES_SEE_ALL_BUTTON_TEXT')}\n onButtonClick={seeAllInfluencers}\n >\n {renderLoaderContainer(mobileRecentActivitiesLoadingState.influencers)}\n {\n isLoadingFinished.influencers && (\n mobileRecentActivitiesItems.influencers.length > 0 ? <div className=\"mobile-home-page-recent-activities-content mobile-home-page-recent-influencers\">\n {renderMobileRecentInfluencers()}\n </div> : <div className=\"mobile-home-page-recent-activities-content-no-items\">\n {renderMobileNoRecentInfluencers()}\n </div>\n )\n }\n </MobileRecentActivitySection>\n }\n </> : <>\n <HomePageSection\n title={t('HOME_PAGE_RECENT_ACTIVITIES_TITLE')}\n description={t('HOME_PAGE_RECENT_ACTIVITIES_DESCRIPTION')}\n >\n <div className=\"home-page-recent-activities-content\">\n <div className=\"home-page-recent-activities-content-header\">\n <div className={`home-page-recent-activities-content-header-tab ${recentActivitiesTab === HOME_PAGE_RECENT_ACTIVITIES_TABS.INSTANTS ? 'selected' : ''}`} onClick={displayRecentLinks}>{t('HOME_PAGE_RECENT_ACTIVITIES_TAB_LINKS')}</div>\n <div className={`home-page-recent-activities-content-header-tab ${recentActivitiesTab === HOME_PAGE_RECENT_ACTIVITIES_TABS.SHORTS ? 'selected' : ''}`} onClick={displayRecentShorts}>{t('HOME_PAGE_RECENT_ACTIVITIES_TAB_SHORTS')}</div>\n {userDetails?.isAdmin && <div className={`home-page-recent-activities-content-header-tab ${recentActivitiesTab === HOME_PAGE_RECENT_ACTIVITIES_TABS.INFLUENCERS ? 'selected' : ''}`} onClick={displayRecentInfluencers}>{t('HOME_PAGE_RECENT_ACTIVITIES_TAB_INFLUENCERS')}</div>}\n </div>\n <div className=\"home-page-recent-activities-content-body\">\n <div className={`home-page-recent-activities-content-display ${(!isLoadingDisplayContent && recentActivitiesItems?.length === 0) ? 'no-items' : ''}`}>\n <div className={`home-page-recent-activities-content-display-items ${recentActivitiesTab.toLowerCase()} ${(!isLoadingDisplayContent && recentActivitiesItems.length === 0) ? 'no-items' : ''}`}>\n {renderItemsList()}\n </div>\n {renderLoaderContainer(isLoadingDisplayContent)}\n </div>\n {recentActivitiesItems.length > 0 && <div className=\"home-page-recent-activities-content-see-all-button\" onClick={seeAll}>{t('HOME_PAGE_RECENT_ACTIVITIES_SEE_ALL_BUTTON_TEXT', { displayName: recentActivitiesTab.toLowerCase() })}</div>}\n </div>\n </div>\n </HomePageSection>\n </>\n }\n {\n userDetails?.isAdmin && <HomePageSection\n title={t('HOME_PAGE_RECENT_ORDERS_TITLE')}\n description={!isMobile && t('HOME_PAGE_RECENT_ORDERS_SUBTITLE')}\n >\n <StoreOrdersTable />\n </HomePageSection>\n }\n </div>\n </> : <ShopifyConnect hasShopifyStore={false} />\n }\n <AddLInkFlow\n onAddLinkFlowDone={() => reloadAfterCreation(HOME_PAGE_RECENT_ACTIVITIES_TABS.INSTANTS, loadLinksFromServer)}\n trigger={addFlowTrigger}\n setTrigger={setAddFlowTrigger}\n />\n <ContentDialog\n isDialogOpen={contentDialogState.isOpen}\n handleDialogClose={closeContentDialog}\n mode={VIEW_MODES.CREATE}\n contentType={contentDialogState.contentType}\n onSaveSuccess={contentDialogState.onSaveSuccess}\n />\n {\n isMobile && userDetails.isAdmin && isFreeUser() && isLoadingFinished.links && userDetails?.recentActivitiesData?.links.length < 3 && <FloatingButton icon={<EventAvailableIcon/>}text={t(\"DASHBOARD_TOPBAR_BOOK_AN_EXPERT_BUTTON_TEXT\")} clickFunction={() => window.open('https://calendly.com/shopeaks-support/15min','_blank')}/>\n }\n </div>\n )\n}","import React, { useEffect, useRef, useState } from 'react'\nimport './ProgressDialog.css'\nimport PaydinDialog from 'dialogs/PaydinDialog/PaydinDialog'\nimport { Trans, useTranslation } from 'react-i18next'\nimport { isMobile } from 'utils/deviceUtils'\nimport LinearProgress, { linearProgressClasses } from '@mui/material/LinearProgress'\nimport { styled } from '@mui/material/styles'\nimport { IoMdClose } from 'react-icons/io'\nimport { useHistoryContext } from 'contexts/History'\n\nexport default function ProgressDialog({\n isDialogOpen,\n handleDialogClose,\n setHasDoneProcessing = () => { }\n}) {\n const { t } = useTranslation()\n const history = useHistoryContext()\n\n const [progressValue, setProgressValue] = useState(0)\n\n const intervalRef = useRef(null)\n\n useEffect(() => {\n if (isDialogOpen) {\n intervalRef.current = setInterval(() => {\n setProgressValue(prev => {\n if (prev < 200) {\n return prev + 5\n } else {\n return 0\n }\n })\n }, 50)\n }\n return () => {close()}\n }, [isDialogOpen])\n\n const BorderLinearProgress = styled(LinearProgress)(({ theme }) => ({\n height: 10,\n borderRadius: 5,\n [`&.${linearProgressClasses.colorPrimary}`]: {\n backgroundColor: theme.palette.grey[theme.palette.mode === 'light' ? 200 : 800],\n },\n [`& .${linearProgressClasses.bar}`]: {\n borderRadius: 5,\n background: 'linear-gradient(to right, var(--magic-purple-color), #84BFDE, #94f2f7)',\n },\n }))\n\n function close() {\n if (intervalRef?.current) {\n clearInterval(intervalRef.current)\n }\n setProgressValue(0)\n setHasDoneProcessing(false)\n }\n\n return (\n <PaydinDialog\n isDialogOpen={isDialogOpen}\n handleDialogClose={handleDialogClose}\n maxHeight={500}\n backdropColor='rgba(255, 255, 255, 0.85)'\n borderRadiusPx={10}\n paddingPx={0}\n width={isMobile ? '100dvh' : 1000}\n isCloseOnTouchOutside={false}\n dialogLayout={<>\n <div className='progress-dialog-container'>\n <IoMdClose className='progress-dialog-close-button' onClick={close} />\n <div className=\"progress-dialog-progress-container\">\n <div className=\"progress-dialog-progress-title\">{t('PROGRESS_DIALOG_PROGRESS_TITLE')}</div>\n <BorderLinearProgress variant='determinate' value={progressValue} />\n <div className=\"progress-dialog-progress-text\">\n <Trans\n i18nKey={'PROGRESS_DIALOG_PROGRESS_TEXT'}\n components={{\n b: <b />\n }}\n />\n </div>\n\n </div>\n </div>\n </>}\n />\n )\n}","import React from 'react'\n\nexport default function PostcardImage(props) {\n return (\n <svg\n {...props}\n fill=\"none\"\n height=\"512\"\n viewBox=\"0 0 24 24\"\n width=\"512\"\n >\n <g\n fill=\"rgb(0,0,0)\"\n >\n <path d=\"m9 10.75c-1.52 0-2.75-1.23-2.75-2.75s1.23-2.75 2.75-2.75 2.75 1.23 2.75 2.75-1.23 2.75-2.75 2.75zm0-4c-.69 0-1.25.56-1.25 1.25s.56 1.25 1.25 1.25 1.25-.56 1.25-1.25-.56-1.25-1.25-1.25z\"></path><path d=\"m15 22.75h-6c-5.43 0-7.75-2.32-7.75-7.75v-6c0-5.43 2.32-7.75 7.75-7.75h4c.41 0 .75.34.75.75s-.34.75-.75.75h-4c-4.61 0-6.25 1.64-6.25 6.25v6c0 4.61 1.64 6.25 6.25 6.25h6c4.61 0 6.25-1.64 6.25-6.25v-5c0-.41.34-.75.75-.75s.75.34.75.75v5c0 5.43-2.32 7.75-7.75 7.75z\"></path><path d=\"m18 8.74994c-.41 0-.75-.34-.75-.75v-6c0-.3.18-.58.46-.69s.6-.05.82.16l2 2c.29.29.29.77 0 1.06s-.77.29-1.06 0l-.72-.72v4.19c0 .41-.34.75-.75.75z\"></path><path d=\"m15.9999 4.74994c-.19 0-.38-.07-.53-.22-.29-.29-.29-.77 0-1.06l2-2c.29-.29.77-.29 1.06 0s.29.77 0 1.06l-2 2c-.15.15-.34.22-.53.22z\"></path><path d=\"m2.6698 19.7001c-.24 0-.48-.12-.62-.33-.23-.34-.14-.81.2-1.04l4.93-3.31c1.08-.72 2.57-.64 3.55.19l.33.29c.5.43 1.35.43 1.84 0l4.16-3.57c1.06-.91 2.73-.91 3.8 0l1.63 1.4c.31.27.35.74.08 1.06-.27.31-.75.35-1.06.08l-1.63-1.4c-.5-.43-1.34-.43-1.84 0l-4.16 3.57c-1.06.91-2.73.91-3.8 0l-.33-.29c-.46-.39-1.21999-.43-1.72999-.08l-4.92001 3.31c-.14.08-.29.12-.43.12z\">\n </path>\n </g>\n </svg>\n )\n}\n","import React from 'react'\n\nexport default function SparkleSmartphoneImage(props) {\n return (\n <svg\n {...props}\n id=\"fi_4768958\"\n enableBackground=\"new 0 0 512 512\"\n height=\"512\"\n viewBox=\"0 0 512 512\"\n width=\"512\"\n >\n <g>\n <g id=\"Page-1_62_\">\n <g id=\"_x30_63---Shiny-New-Phone\">\n <path id=\"Shape_158_\" d=\"m501.82 300.314-59.733-25.404-25.6-59.938c-1.412-3.245-3.825-5.954-6.886-7.731v-173.108c-.001-18.851-15.283-34.133-34.134-34.133h-238.934c-18.851 0-34.133 15.282-34.133 34.133v28.041c-3.058 1.778-5.468 4.487-6.878 7.731l-25.421 59.733-59.93 25.6c-6.169 2.64-10.17 8.705-10.17 15.415 0 6.711 4.001 12.775 10.17 15.415l59.733 25.404 25.6 59.938c1.41 3.244 3.82 5.953 6.878 7.731v198.724c0 18.851 15.282 34.133 34.133 34.133h238.95c18.851 0 34.133-15.282 34.133-34.133v-53.641c3.058-1.778 5.468-4.487 6.878-7.731l25.421-59.733 59.93-25.6c6.169-2.64 10.17-8.705 10.17-15.415s-4.001-12.775-10.17-15.415zm-180.182-283.247-10.94 11.674c-3.233 3.436-7.74 5.387-12.459 5.393h-84.48c-4.717 0-9.224-1.952-12.45-5.393l-10.94-11.674zm-185.105 0h30.438l21.879 23.339c6.461 6.876 15.473 10.782 24.909 10.795h84.48c9.436-.013 18.448-3.918 24.909-10.795l21.879-23.339h30.438c9.426 0 17.067 7.641 17.067 17.067v173.107c-3.058 1.778-5.468 4.487-6.878 7.731l-25.421 59.733-59.93 25.6c-6.169 2.64-10.17 8.705-10.17 15.415s4.001 12.775 10.17 15.415l59.733 25.404 25.6 59.938c1.41 3.244 3.82 5.953 6.878 7.731v10.992c0 9.426-7.641 17.067-17.067 17.067h-238.914c-9.426 0-17.067-7.641-17.067-17.067v-156.041c3.058-1.778 5.468-4.487 6.878-7.731l25.421-59.733 59.93-25.6c6.169-2.64 10.17-8.705 10.17-15.415 0-6.711-4.001-12.775-10.17-15.415l-59.733-25.404-25.6-59.938c-1.412-3.253-3.828-5.968-6.895-7.748v-28.042c0-9.425 7.641-17.066 17.066-17.066zm-50.892 187.733c-1.689-3.982-4.859-7.152-8.841-8.841l-59.921-25.011 59.93-25.6c3.973-1.685 7.139-4.845 8.832-8.815l24.994-59.955 25.6 59.955c1.687 3.98 4.853 7.15 8.832 8.841l59.921 25.011-59.93 25.6c-3.973 1.685-7.139 4.845-8.832 8.815l-25.003 59.93zm289.826 290.133h-238.934c-9.426 0-17.067-7.641-17.067-17.067v-13.278c5.166 3.071 11.057 4.709 17.067 4.745h238.933c6.01-.035 11.901-1.673 17.067-4.745v13.278c0 9.426-7.641 17.067-17.066 17.067zm59.733-153.907c-3.981 1.689-7.151 4.859-8.841 8.841l-25.003 59.93-25.6-59.93c-1.685-3.979-4.848-7.148-8.823-8.841l-59.921-25.011 59.93-25.6c3.973-1.685 7.139-4.845 8.832-8.815l24.994-59.955 25.6 59.955c1.687 3.98 4.853 7.15 8.832 8.841l59.921 25.011z\">\n </path>\n <path id=\"Shape_157_\" d=\"m247.031 148.796 33.579 14.327 14.327 33.57c2.094 4.915 6.92 8.104 12.262 8.104s10.168-3.19 12.262-8.104l14.327-33.579 33.579-14.327c4.915-2.094 8.104-6.92 8.104-12.262s-3.19-10.168-8.104-12.262l-33.579-14.327-14.327-33.57c-2.094-4.915-6.92-8.104-12.262-8.104s-10.168 3.19-12.262 8.104l-14.327 33.579-33.579 14.327c-4.915 2.094-8.104 6.92-8.104 12.262s3.19 10.168 8.104 12.262zm41.643-23.749c3.17-1.338 5.695-3.856 7.04-7.023l11.486-26.905 11.494 26.931c1.347 3.151 3.861 5.658 7.014 6.997l26.906 11.486-26.889 11.486c-3.17 1.338-5.695 3.856-7.04 7.023l-11.485 26.906-11.494-26.931c-1.347-3.151-3.861-5.658-7.014-6.997l-26.906-11.486z\">\n </path>\n <path id=\"Shape_156_\" d=\"m204.8 298.667c-5.341-.003-10.168 3.184-12.262 8.098l-14.327 33.579-33.579 14.327c-4.915 2.094-8.104 6.92-8.104 12.262s3.19 10.168 8.104 12.262l33.579 14.327 14.327 33.57c2.094 4.915 6.92 8.104 12.262 8.104s10.168-3.19 12.262-8.104l14.327-33.579 33.579-14.327c4.915-2.094 8.104-6.92 8.104-12.262s-3.19-10.168-8.104-12.262l-33.579-14.327-14.327-33.579c-2.093-4.913-6.921-8.099-12.262-8.089zm18.509 56.78 26.906 11.486-26.889 11.486c-3.17 1.338-5.695 3.856-7.04 7.023l-11.486 26.906-11.494-26.931c-1.347-3.151-3.861-5.658-7.014-6.997l-26.906-11.486 26.889-11.486c3.17-1.338 5.695-3.856 7.04-7.023l11.486-26.906 11.494 26.931c1.346 3.151 3.86 5.658 7.014 6.997z\">\n </path>\n </g>\n </g>\n </g>\n </svg>\n )\n}\n","import React from 'react'\n\nexport default function MenuCheckImage(props) {\n return (\n <svg\n {...props}\n height=\"512\"\n viewBox=\"0 0 32 32\"\n width=\"512\"\n xmlns=\"http://www.w3.org/2000/svg\"\n id=\"fi_2989815\"\n >\n <g id=\"e2f8f9b8-a03e-411f-8bbd-6147d54aeeb4\" dataname=\"Layer 22\">\n <path d=\"m17 9h-14a1 1 0 0 1 0-2h14a1 1 0 0 1 0 2zm1 4a1 1 0 0 0 -1-1h-14a1 1 0 0 0 0 2h14a1 1 0 0 0 1-1zm-7 5a1 1 0 0 0 -1-1h-7a1 1 0 0 0 0 2h7a1 1 0 0 0 1-1zm9 7a1 1 0 0 0 .77-.37l9-11a1 1 0 1 0 -1.54-1.26l-8.23 10.06-4.22-5.07a1 1 0 1 0 -1.54 1.28l5 6a1 1 0 0 0 .76.36z\">\n </path>\n </g>\n </svg>\n )\n}\n","import React from \"react\";\r\n\r\nexport default function SmartStoreVideo(props) {\r\n\treturn <video\r\n\t\t{...props}\r\n\t\tautoPlay\r\n\t\tmuted\r\n\t\tplaysInline\r\n\t\tloop\r\n\t>\r\n\t\t<source\r\n\t\t\tsrc=\"https://pub-ab2b59c67330413fae1987888f9776df.r2.dev/home/home-hero.mp4\"\r\n\t\t\ttype=\"video/mp4\"\r\n\t\t/>\r\n\t</video>\r\n}\r\n","import React, { useEffect, useRef, useState } from 'react'\nimport './MagicStorePage.css'\nimport { useTranslation } from 'react-i18next'\nimport { CONTENT_TYPES, VIEW_MODES } from 'constants/general.constants'\nimport { LINKS_PAGE_URL } from 'constants/routes.constants'\nimport { useHistoryContext } from 'contexts/History'\nimport ContentDialog from 'dialogs/ContentDialog/ContentDialog'\nimport ProgressDialog from 'dialogs/ProgressDialog/ProgressDialog'\nimport PostcardImage from 'embeddedImages/PostcardImage'\nimport SparkleSmartphoneImage from 'embeddedImages/SparkleSmartphoneImage'\nimport MenuCheckImage from 'embeddedImages/MenuCheckImage'\nimport SmartStoreVideo from 'components/SmartStoreVideo'\nimport { isMobile } from 'utils/deviceUtils'\nimport ContentDialogTopbar from 'components/ContentDialogTopbar/ContentDialogTopbar'\nimport { useGeneralDataContext, useUserDetailsContext } from 'contexts/User'\nimport { ProductSearchInMediaAPI } from 'api/products/products'\nimport { extractProductData } from 'utils/dataUtils'\nimport { convertImageToPng, fixSomeFileExtensions } from 'utils/utils'\n\nexport default function MagicStorePage() {\n const { t } = useTranslation()\n const history = useHistoryContext()\n\n const {\n isFreeUserAndTrialEnded,\n } = useUserDetailsContext()\n const {\n openFreeTrialDialog,\n } = useGeneralDataContext()\n\n const [isProgressDialogOpen, setIsProgressDialogOpen] = useState(false)\n const [hasFinishedProcessingImage, setHasFinishedProcessingImage] = useState(false)\n const [newLinkData, setNewLinkData] = useState({})\n const [isContentDialogOpen, setIsContentDialogOpen] = useState(false)\n\n const fileInputRef = useRef(null)\n\n useEffect(() => {\n if (hasFinishedProcessingImage) {\n history.goBack()\n setTimeout(() => {\n setIsContentDialogOpen(true)\n setHasFinishedProcessingImage(false)\n }, 200)\n }\n }, [hasFinishedProcessingImage])\n\n function closeProgressDialog() {\n setIsProgressDialogOpen(false)\n }\n\n function closeContentDialog() {\n setIsContentDialogOpen(false)\n }\n\n async function onImageChange(event) {\n\n const MAX_FILE_SIZE = 10 * 1024 * 1024; // 10MB\n\n if (event.target.files && event.target.files[0]) {\n // const resizedImage = await resizeImage(event.target.files[0], RESIZE_IMAGE_MAX_WIDTH, RESIZE_IMAGE_MAX_HEIGHT)\n // setCropperTempImage(URL.createObjectURL(resizedImage))\n // setIsImageCropDialogOpen(true)\n const file = event.target.files[0];\n\n if (!file) return;\n\n // Check file size\n if (file.size > MAX_FILE_SIZE) {\n alert(\"File is too large! Please select a file under 10MB.\");\n return;\n }\n \n // Convert file to Blob\n let fileBlob = new Blob([file], { type: file.type })\n if (file.type.startsWith('image')) {\n // Conver image to png\n fileBlob = await convertImageToPng(file)\n }\n\n const blobURL = URL.createObjectURL(fileBlob)\n\n onApplyProductSearch(blobURL)\n }\n }\n\n async function onApplyProductSearch(media) {\n setTimeout(() => { // this code prevents the progress dialog from closing\n setIsProgressDialogOpen(true)\n }, 200)\n ProductSearchInMediaAPI(\n await fetch(media).then(r => r.blob())\n .then(blobFile => {\n let fileExtension = blobFile.type.substr(blobFile.type.lastIndexOf('/') + 1)\n fileExtension = fixSomeFileExtensions(fileExtension)\n return new File([blobFile], `${media.substr(media.lastIndexOf('/') + 1)}.${fileExtension}`, {type: blobFile.type})\n })\n ).then(data => {\n setNewLinkData({\n images: [data?.uploaded_media_url],\n products: data?.selected_products.map(product => extractProductData(product)),\n preferedProductIds: data?.product_tag_result_ids,\n })\n closeProgressDialog()\n setTimeout(setHasFinishedProcessingImage(true), 200)\n }).catch(error => {\n closeProgressDialog()\n console.log('ProductSearchInMediaAPI error: ', error)\n })\n }\n\n function goToLinks() {\n history.goBack()\n setTimeout(() => {\n history.push(LINKS_PAGE_URL)\n }, 200)\n }\n\n function uploadImageFromDevice() {\n if (isFreeUserAndTrialEnded()) {\n openFreeTrialDialog()\n } else {\n fileInputRef.current.value = null\n fileInputRef?.current?.click()\n }\n }\n\n return (\n <div className='magic-store-page'>\n <div className=\"magic-store-gradient-background\"></div>\n <div className={isMobile ? \"mobile-magic-store-page-content\" : \"magic-store-page-content\"}>\n {\n isMobile && <ContentDialogTopbar\n title={t('MAGIC_STORE_PAGE_TOPBAR_TITLE')}\n onBackButtonClick={() => history.goBack()}\n />\n }\n <div className={isMobile ? \"mobile-magic-store-page-title\" : \"magic-store-page-title\"}>{t('MAGIC_STORE_PAGE_TITLE')}</div>\n <div className={isMobile ? \"mobile-magic-store-page-body\" : \"magic-store-page-body\"}>\n <div className={isMobile ? \"mobile-magic-store-page-left-section\" : \"magic-store-page-left-section\"}>\n <div className={isMobile ? \"mobile-magic-store-page-left-section-title\" : \"magic-store-page-left-section-title\"}>{t('MAGIC_STORE_PAGE_BODY_LEFT_SECTION_TITLE')}</div>\n <div className= {isMobile ? \"magic-store-page-left-section-content-mobile\" : \"magic-store-page-left-section-content\"}>\n <div className=\"magic-store-page-left-section-content-option\">\n <PostcardImage className='magic-store-page-left-section-content-option-image' />\n <div className={isMobile ? \"mobile-magic-store-page-left-section-content-option-text\" : \"magic-store-page-left-section-content-option-text\"}>{t('MAGIC_STORE_PAGE_BODY_LEFT_SECTION_OPTION_1_TEXT')}</div>\n </div>\n <div className=\"magic-store-page-left-section-content-option\">\n <SparkleSmartphoneImage className='magic-store-page-left-section-content-option-image' />\n <div className={isMobile ? \"mobile-magic-store-page-left-section-content-option-text\" : \"magic-store-page-left-section-content-option-text\"}>{t('MAGIC_STORE_PAGE_BODY_LEFT_SECTION_OPTION_2_TEXT')}</div>\n </div>\n <div className=\"magic-store-page-left-section-content-option\">\n <MenuCheckImage className='magic-store-page-left-section-content-option-image' />\n <div className={isMobile ? \"mobile-magic-store-page-left-section-content-option-text\" : \"magic-store-page-left-section-content-option-text\"}>{t('MAGIC_STORE_PAGE_BODY_LEFT_SECTION_OPTION_3_TEXT')}</div>\n </div>\n </div>\n <div className={isMobile ? \"mobile-magic-store-page-create-button\" : \"magic-store-page-create-button\"} onClick={uploadImageFromDevice}>{t('MAGIC_STORE_PAGE_CREATE_BUTTON_TEXT')}</div>\n </div>\n <div className={isMobile ? \"mobile-magic-store-page-right-section\" : \"magic-store-page-right-section\"}>\n <SmartStoreVideo className='magic-store-video-frame' />\n </div>\n </div>\n </div>\n <input ref={fileInputRef} type=\"file\" accept=\"image/*,video/mp4,video/quicktime,video/webm,video/ogg\" onChange={onImageChange} style={{ display: 'none' }} />\n <ProgressDialog\n isDialogOpen={isProgressDialogOpen}\n handleDialogClose={closeProgressDialog}\n setHasDoneProcessing={setHasFinishedProcessingImage}\n />\n <ContentDialog\n isDialogOpen={isContentDialogOpen}\n handleDialogClose={closeContentDialog}\n mode={VIEW_MODES.CREATE}\n data={{\n linkData: newLinkData\n }}\n contentType={CONTENT_TYPES.LINK}\n onSaveSuccess={goToLinks}\n />\n </div>\n )\n}","import React from 'react'\nimport './ShopboardSocials.css'\nimport ShopboardSocialStatus from 'components/ShopboardSocialStatus/ShopboardSocialStatus'\nimport { useTranslation } from 'react-i18next'\nimport { INSTAGRAM_LOGO_URL, PINTEREST_LOGO_URL, SHOPBOARD_SOCIALS, TIKTOK_LOGO_URL } from 'constants/general.constants'\nimport ImageBox from 'components/ImageBox/ImageBox'\nimport { isMobile } from 'utils/deviceUtils'\n\nexport default function ShopboardSocials({\n instagramPostsCount = null,\n instagramUsername = \"\",\n tiktokPostsCount = null,\n tiktokUsername = \"\",\n pinterestPostsCount = null,\n pinterestUsername = \"\",\n showImage = true\n}) {\n const { t } = useTranslation()\n\n return (\n <div className={isMobile ? 'mobile-shopboard-socials' : 'shopboard-socials'}>\n <ShopboardSocialStatus\n title={!isMobile ? t('SHOPBOARD_SOCIALS_INSTAGRAM_TITLE') : ''}\n image={<ImageBox \n image={INSTAGRAM_LOGO_URL}\n className='shopboard-social-status-image'\n />}\n postsCount={instagramPostsCount}\n social={SHOPBOARD_SOCIALS.INSTAGRAM}\n showImage={showImage}\n username={instagramUsername}\n />\n\n {!isMobile && <div className=\"vertical-separator-line\"></div>}\n\n <ShopboardSocialStatus\n title={!isMobile ? t('SHOPBOARD_SOCIALS_TIKTOK_TITLE') : ''}\n image={<ImageBox \n image={TIKTOK_LOGO_URL}\n className='shopboard-social-status-image'\n />}\n postsCount={tiktokPostsCount}\n social={SHOPBOARD_SOCIALS.TIKTOK}\n showImage={showImage}\n username={tiktokUsername}\n />\n\n {!isMobile && <div className=\"vertical-separator-line\"></div>}\n\n <ShopboardSocialStatus\n title={!isMobile ? t('SHOPBOARD_SOCIALS_PINTEREST_TITLE') : ''}\n image={<ImageBox \n image={PINTEREST_LOGO_URL}\n className='shopboard-social-status-image'\n />}\n postsCount={pinterestPostsCount}\n social={SHOPBOARD_SOCIALS.PINTEREST}\n showImage={showImage}\n username={pinterestUsername}\n />\n\n </div>\n )\n}\n","import React from 'react'\nimport './ShopboardConnectComp.css'\nimport { SHOPBOARD_SOCIALS } from 'constants/general.constants'\nimport { useTranslation } from 'react-i18next'\nimport SocialConnectButton from 'components/SocialConnectButton/SocialConnectButton'\n\nexport default function ShopboardConnectComp({\n social = SHOPBOARD_SOCIALS.INSTAGRAM\n}) {\n const { t } = useTranslation()\n\n function getTitle(social) {\n switch (social) {\n case SHOPBOARD_SOCIALS.INSTAGRAM: return t('SHOPBOARD_CONNECT_INSTAGRAM_TITLE')\n case SHOPBOARD_SOCIALS.TIKTOK: return t('SHOPBOARD_CONNECT_TIKTOK_TITLE')\n default: return t('SHOPBOARD_CONNECT_PINTEREST_TITLE')\n }\n }\n\n function getSubtitle(social) {\n switch (social) {\n case SHOPBOARD_SOCIALS.INSTAGRAM: return t('SHOPBOARD_CONNECT_INSTAGRAM_SUBTITLE')\n case SHOPBOARD_SOCIALS.TIKTOK: return t('SHOPBOARD_CONNECT_TIKTOK_SUBTITLE')\n default: return t('SHOPBOARD_CONNECT_PINTEREST_SUBTITLE')\n }\n }\n\n return (\n <div className='shopboard-connect'>\n <div className=\"shopboard-connect-title\">{getTitle(social)}</div>\n <div className=\"shopboard-connect-subtitle\">{getSubtitle(social)}</div>\n <SocialConnectButton social={social} stretchWidth={false} />\n </div>\n )\n}","import React from 'react'\nimport './ShopboardSocialMediaPostProduct.css'\nimport ImageBox from 'components/ImageBox/ImageBox'\nimport { isMobile } from 'utils/deviceUtils'\n\nexport default function ShopboardSocialMediaPostProduct({\n item\n}) {\n return (\n <div className='shopboard-social-media-post-product'>\n <ImageBox\n image={item?.imageUrl}\n className={isMobile ? 'mobile-shopboard-social-media-post-product-image' : 'shopboard-social-media-post-product-image'}\n isImageFitCover={true}\n />\n </div>\n )\n}","import React from 'react'\nimport './ShopboardSocialMediaPostProductsTag.css'\nimport { useTranslation } from 'react-i18next'\nimport { FiPlusCircle } from 'react-icons/fi'\nimport ItemsViewSection from 'components/ItemsViewSection/ItemsViewSection'\nimport { SECTION_TYPES } from 'constants/general.constants'\nimport ShopboardSocialMediaPostProduct from 'components/ShopboardSocialMediaPostProduct/ShopboardSocialMediaPostProduct'\nimport { isMobile } from 'utils/deviceUtils'\n\nexport default function ShopboardSocialMediaPostProductsTag({\n taggedProducts = [],\n isAITagged = false,\n onTagProducts = () => { },\n}) {\n const { t } = useTranslation()\n\n return (\n <div className={isMobile ? 'mobile-shopboard-social-media-post-products-tag-container' : 'shopboard-social-media-post-products-tag-container'}>\n <div className=\"shopboard-social-media-post-products-tag-title-container\">\n <div className={isMobile ? \"mobile-shopboard-social-media-post-products-tag-title\" : \"shopboard-social-media-post-products-tag-title\"}>{isAITagged && \"AI \"}{isMobile ? t('MOBILE_SHOPBOARD_SOCIAL_MEDIA_POST_PRODUCTS_TAG_TITLE', { productsCount: taggedProducts.length }) : t('SHOPBOARD_SOCIAL_MEDIA_POST_PRODUCTS_TAG_TITLE')}</div>\n <FiPlusCircle className='shopboard-social-media-post-products-tag-tag-products-button' onClick={onTagProducts} />\n </div>\n <ItemsViewSection\n data={taggedProducts}\n viewItemComponent={ShopboardSocialMediaPostProduct}\n type={SECTION_TYPES.STRIP}\n hasPadding={false}\n paddingVertical='0px'\n />\n </div>\n )\n}","export default __webpack_public_path__ + \"static/media/bookmark_ai_tag_gradient.d8c21859.svg\";","import React from 'react'\nimport aiBadgeSvg from 'assets/bookmark_ai_tag_gradient.svg'\n\nexport default function AiBadge({ width='50px', height='50px', fontSize='20px', fontWeight='400' }) {\n\n\n return (\n <div style={{position: \"absolute\", width, height}}>\n <img src={aiBadgeSvg} alt=\"AI Icon\" style={{ width: \"100%\", height: \"100%\" }} />\n <div\n style={{\n position: \"absolute\",\n top: \"45%\",\n left: \"50%\",\n transform: \"translate(-50%, -50%)\",\n color: \"white\",\n fontSize,\n fontWeight,\n }}\n >\n AI\n </div>\n </div>\n );\n}","import React, { useState } from 'react'\nimport './ShopboardSocialMediaPost.css'\nimport { AiFillEye, AiFillEyeInvisible } from 'react-icons/ai'\nimport ImageBox from 'components/ImageBox/ImageBox'\nimport { useTranslation } from 'react-i18next'\nimport { useGeneralDataContext, useUserDetailsContext } from 'contexts/User'\nimport ShopboardSocialMediaPostProductsTag from 'components/ShopboardSocialMediaPostProductsTag/ShopboardSocialMediaPostProductsTag'\nimport { isMobile } from 'utils/deviceUtils'\nimport Tooltip from 'components/Tooltip/Tooltip'\nimport AiBadge from 'components/AiBadge/AiBadge'\n\nexport default function ShopboardSocialMediaPost({\n id = '',\n social = '',\n image = '',\n isVisible = true,\n taggedProducts = [],\n autoTaggedProducts = [],\n onTagProducts = () => { }\n}) {\n const { t } = useTranslation()\n const {\n userDetails,\n } = useUserDetailsContext()\n const {\n togglePostVisibility,\n isFreeUserAndTrialEnded,\n } = useUserDetailsContext()\n\n const {\n openFreeTrialDialog,\n } = useGeneralDataContext()\n\n const [visible, setVisible] = useState(isVisible)\n\n function toggleVisibility() {\n if (isFreeUserAndTrialEnded()) {\n openFreeTrialDialog()\n } else {\n setVisible(prev => !prev)\n togglePostVisibility(social, id, !isVisible)\n }\n }\n\n function onTagProductsClicked() {\n if (isFreeUserAndTrialEnded()) {\n openFreeTrialDialog()\n } else {\n onTagProducts(social, id, taggedProducts?.length > 0 ? taggedProducts : userDetails?.settings?.productVisionConfigurations?.isEnabled ? autoTaggedProducts : [])\n }\n }\n\n return (\n <div className={isMobile ? 'mobile-shopboard-social-media-post' : 'shopboard-social-media-post'}>\n {!visible && <div className='shopboard-social-media-post-mask'></div>}\n {\n userDetails?.settings?.productVisionConfigurations?.isEnabled && taggedProducts?.length === 0 && autoTaggedProducts?.length > 0 && <div className='shopboard-social-media-post-ai-badge-container'>\n <Tooltip\n image={<AiBadge />}\n tooltipText={t('SHOPBOARD_PAGE_POST_AI_TAGGING_TOOLTIP_TEXT')}\n displayBubble={!isMobile}\n swapHorizontal={true}\n />\n </div>\n }\n <div className={isMobile ? \"mobile-shopboard-social-media-post-top-section\" : \"shopboard-social-media-post-top-section\"}>\n <Tooltip\n image={visible ? <AiFillEye className='shopboard-social-media-post-visible-image' onClick={toggleVisibility} /> : <AiFillEyeInvisible className='shopboard-social-media-post-visible-image invisible' onClick={toggleVisibility} />}\n tooltipText={visible ? t('SHOPBOARD_PAGE_POST_VISIBLE_TOOLTIP_TEXT') : t('SHOPBOARD_PAGE_POST_UNVISIBLE_TOOLTIP_TEXT')}\n displayBubble={!isMobile}\n />\n <ImageBox\n image={image}\n className={isMobile ? \"mobile-shopboard-social-media-post-image\" : \"shopboard-social-media-post-image\"}\n isImageFitCover={true}\n showImageBorderRadius={true}\n borderRadiusPx={5}\n showBorder={true}\n border='1px solid #e2e2e2'\n />\n </div>\n {\n taggedProducts.length > 0 ?\n <ShopboardSocialMediaPostProductsTag\n taggedProducts={taggedProducts}\n onTagProducts={onTagProductsClicked}\n /> : userDetails?.settings?.productVisionConfigurations?.isEnabled && autoTaggedProducts.length > 0 ? <ShopboardSocialMediaPostProductsTag\n taggedProducts={autoTaggedProducts}\n isAITagged={true}\n onTagProducts={onTagProductsClicked}\n /> : <div className={isMobile ? 'mobile-shopboard-social-media-post-tag-products-button' : 'shopboard-social-media-post-tag-products-button'} onClick={onTagProductsClicked}>{t('SHOPBOARD_SOCIAL_MEDIA_POST_TAG_PRODUCTS_BUTTON_TEXT')}</div>\n }\n </div>\n )\n}","import React, { useEffect, useRef, useState } from 'react'\nimport './ShopboardPage.css'\nimport { Trans, useTranslation } from 'react-i18next'\nimport ShopboardSocials from 'components/ShopboardSocials/ShopboardSocials'\nimport ImageBox from 'components/ImageBox/ImageBox'\nimport { INSTAGRAM_BLACK_WHITE_LOGO_URL, LINKS_PAGE_MOBILE_OPTIONS_DRAWER_TOP_BORDER_RADIUS_PX, NUMBER_TYPES, PAYDIN_DRAWER_DIRECTION, PAYDIN_DRAWER_TRANSITION_DURATION, PINTEREST_BLACK_WHITE_LOGO_URL, SETTINGS_PAGE_SI_TAGGING_SECTION_ID, SHOPBOARD_PAGE_BUTTON_LOADER_CIRCLE_COLOR, SHOPBOARD_PAGE_IMAGE, SHOPBOARD_POST_LIST_COUNT, SHOPBOARD_SOCIALS, SHOPBOARD_TAB_OPTIONS, TIKTOK_BLACK_WHITE_LOGO_URL } from 'constants/general.constants'\nimport { useGeneralDataContext, useUserDetailsContext } from 'contexts/User'\nimport { isMobile } from 'utils/deviceUtils'\nimport AnalyticsDataCard from 'components/AnalyticsDataCard/AnalyticsDataCard'\nimport { formatNumber } from 'utils/utils'\nimport { MdOutlineContentCopy } from 'react-icons/md'\nimport Tabs from 'components/Tabs/Tabs'\nimport ShopboardConnectComp from 'components/ShopboardConnectComp/ShopboardConnectComp'\nimport { extractShopboardSocialMediaPost } from 'utils/dataUtils'\nimport ShopboardSocialMediaPost from 'components/ShopboardSocialMediaPost/ShopboardSocialMediaPost'\nimport AddProductsDialog from 'dialogs/AddProductsDialog/AddProductsDialog'\nimport { getCurrencySymbol } from 'services/currency'\nimport { copyToClipboard, openUrl } from 'services/SystemService'\nimport { useHistoryContext } from 'contexts/History'\nimport ContentDialogTopbar from 'components/ContentDialogTopbar/ContentDialogTopbar'\nimport MobileButtonStrip from 'components/MobileButtonStrip/MobileButtonStrip'\nimport DashboardLoader from 'components/DashboardLoader/DashboardLoader'\nimport LoaderPage from 'pages/LoaderPage/LoaderPage'\nimport Loader from 'components/Loader/Loader'\nimport SocialConnectButton from 'components/SocialConnectButton/SocialConnectButton'\nimport PaydinDrawer from 'components/PaydinDrawer/PaydinDrawer'\nimport { BiDotsHorizontalRounded } from 'react-icons/bi'\nimport { AiOutlineClose } from 'react-icons/ai'\nimport { RiShareBoxLine } from 'react-icons/ri'\nimport DrawerStyledButtonList from 'components/DrawerStyledButtonList/DrawerStyledButtonList'\nimport LoaderButton from 'components/LoaderButton/LoaderButton'\nimport { GoSync } from 'react-icons/go';\nimport { triggerSyncShopboardPosts } from 'api/shopboard/shopboard'\nimport { SETTINGS_PAGE_URL } from 'constants/routes.constants'\nimport AiBadge from 'components/AiBadge/AiBadge'\n\nconst TAB_INDEX_SOCIAL = [SHOPBOARD_SOCIALS.INSTAGRAM, SHOPBOARD_SOCIALS.TIKTOK, SHOPBOARD_SOCIALS.PINTEREST]\n\nexport default function ShopboardPage() {\n const { t } = useTranslation()\n const history = useHistoryContext()\n const {\n userDetails,\n isShopboardConnected,\n checkShopboardStatus,\n isShopboardConnectedSyncing,\n isShopboardConnectedSynced,\n fetchShopboardLifeTimeAnalytics,\n fetchShopboardPosts,\n hasSocialMediaPosts,\n tagPostProducts,\n getShopboardUrl,\n } = useUserDetailsContext()\n\n const {showApprovalMessage} = useGeneralDataContext()\n\n const [selectedTabOptionIndex, setSelectedTabOptionIndex] = useState(0)\n const [tabContent, setTabContent] = useState(<></>)\n const [postListState, setPostListState] = useState({\n [SHOPBOARD_SOCIALS.INSTAGRAM]: userDetails?.shopboard?.socialMedias[SHOPBOARD_SOCIALS.INSTAGRAM]?.posts,\n [SHOPBOARD_SOCIALS.TIKTOK]: userDetails?.shopboard?.socialMedias[SHOPBOARD_SOCIALS.TIKTOK]?.posts,\n [SHOPBOARD_SOCIALS.PINTEREST]: userDetails?.shopboard?.socialMedias[SHOPBOARD_SOCIALS.PINTEREST]?.posts\n })\n const [tagProductsDialogState, setTagProductsDialogState] = useState({\n isOpen: false,\n selectedProducts: [],\n social: '',\n postId: ''\n })\n const [hasMoreDataState, setHasMoreDataState] = useState({\n [SHOPBOARD_SOCIALS.INSTAGRAM]: true,\n [SHOPBOARD_SOCIALS.TIKTOK]: true,\n [SHOPBOARD_SOCIALS.PINTEREST]: true\n })\n const [isLoadingMoreData, setIsLoadingMoreData] = useState({\n [SHOPBOARD_SOCIALS.INSTAGRAM]: false,\n [SHOPBOARD_SOCIALS.TIKTOK]: false,\n [SHOPBOARD_SOCIALS.PINTEREST]: false\n })\n const [isLoadingShopboardStatus, setIsLoadingShopboardStatus] = useState(true)\n const [isLoadingShopboardPosts, setIsLoadingShopboardPosts] = useState(false)\n const [isLoadingSyncSocialButton, setIsLoadingSyncSocialButton] = useState(false)\n const [optionsDrawerState, setOptionsDrawerState] = useState({\n isOpen: false,\n onOpen: openMoreOptionsDrawer,\n onClose: closeMoreOptionsDrawer,\n children: <></>\n })\n\n const shopboardContentRef = useRef(null)\n const noConnectionsContentTitlesRef = useRef(null)\n const postListRef = useRef(null)\n const topSectionRef = useRef(null)\n const analyticsRef = useRef(null)\n const tabsRef = useRef(null)\n const socialsRef = useRef(null)\n const intervalRef = useRef(null)\n\n useEffect(() => {\n if (!userDetails?.shopboard?.synced) {\n checkShopboardStatus(() => {\n setIsLoadingShopboardStatus(false)\n })\n } else {\n setIsLoadingShopboardStatus(false)\n }\n\n return () => {\n // clean interval for geting social media wating\n if (intervalRef.current) {\n clearInterval(intervalRef.current)\n }\n }\n }, [])\n\n useEffect(() => {\n if (isShopboardConnected() && !userDetails?.shopboard?.analytics?.synced) {\n fetchShopboardLifeTimeAnalytics()\n }\n\n if (userDetails?.shopboard?.synced && !intervalRef?.current && isShopboardConnected() && isShopboardConnectedSyncing()) {\n if (isShopboardConnected() && isShopboardConnectedSyncing()) {\n const socialMediasWaiting = getSyncingSocials()\n\n intervalRef.current = setInterval(socialMediasWaiting => {\n checkShopboardStatus(() => {\n if (!isShopboardConnected() || !isShopboardConnectedSyncing()) {\n if (intervalRef?.current) {\n clearInterval(intervalRef.current)\n }\n }\n\n socialMediasWaiting.forEach(social => {\n if (isShopboardConnectedSynced(social)) {\n fetchPosts(social)\n }\n })\n })\n }, 3 * 1000, socialMediasWaiting)\n }\n }\n\n return () => {\n // clean interval for geting social media waiting\n if (intervalRef.current && (!isShopboardConnected() || !isShopboardConnectedSyncing())) {\n clearInterval(intervalRef.current)\n }\n }\n }, [userDetails])\n\n useEffect(() => {\n // updating posts when updated for rendering\n if (isShopboardConnected() && isShopboardConnectedSynced()) {\n setPostListState({\n [SHOPBOARD_SOCIALS.INSTAGRAM]: userDetails?.shopboard?.socialMedias[SHOPBOARD_SOCIALS.INSTAGRAM]?.posts,\n [SHOPBOARD_SOCIALS.TIKTOK]: userDetails?.shopboard?.socialMedias[SHOPBOARD_SOCIALS.TIKTOK]?.posts,\n [SHOPBOARD_SOCIALS.PINTEREST]: userDetails?.shopboard?.socialMedias[SHOPBOARD_SOCIALS.PINTEREST]?.posts\n })\n }\n }, [userDetails])\n\n useEffect(() => {\n if (isShopboardConnected() && isShopboardConnectedSynced() && hasMoreDataState[TAB_INDEX_SOCIAL[selectedTabOptionIndex]]) {\n loadCurrentMediaPosts()\n }\n }, [selectedTabOptionIndex, userDetails, isLoadingMoreData])\n\n useEffect(() => {\n setTabContent(renderTabContent())\n }, [selectedTabOptionIndex, userDetails, isLoadingMoreData, postListState])\n\n function getSyncingSocials() {\n const syncingSocials = []\n Object.values(SHOPBOARD_SOCIALS).forEach(social => {\n if (isShopboardConnectedSyncing(social)) {\n syncingSocials.push(social)\n }\n })\n\n return syncingSocials\n }\n\n function navigateAITaggingSettingSection() {\n history.push(`${SETTINGS_PAGE_URL}#${SETTINGS_PAGE_SI_TAGGING_SECTION_ID}`)\n }\n\n function fetchPosts(social, skip = 0, shouldOverridePostList = true, onSuccess = () => { }) {\n fetchShopboardPosts(social, SHOPBOARD_POST_LIST_COUNT, skip, shouldOverridePostList, posts => {\n const extractedPosts = posts.map(post => extractShopboardSocialMediaPost(post))\n const postsToDisplay = shouldOverridePostList ? extractedPosts : [...postListState[social], ...extractedPosts]\n setPostListState(prev => ({\n ...prev,\n [social]: postsToDisplay\n }))\n setHasMoreDataState(prev => ({\n ...prev,\n [social]: extractedPosts.length === SHOPBOARD_POST_LIST_COUNT\n }))\n onSuccess(postsToDisplay)\n setIsLoadingShopboardPosts(false)\n }, error => {\n setIsLoadingShopboardPosts(false)\n })\n }\n\n function triggerSyncJob() {\n closeMoreOptionsDrawer()\n setIsLoadingSyncSocialButton(true)\n triggerSyncShopboardPosts(getCurrentlySelectedSocial()).then(() => {\n setIsLoadingSyncSocialButton(false)\n showApprovalMessage(t('SHOPBOARD_PAGE_SYNC_SOCIAL_APPROVAL_MESSAGE'))\n }).catch(() => {\n setIsLoadingSyncSocialButton(false)\n })\n }\n\n function loadCurrentMediaPosts() {\n if (isInstagramTabSelected() && isShopboardConnected(SHOPBOARD_SOCIALS.INSTAGRAM) && !isLoadingShopboardPosts && !isShopboardConnectedSyncing(SHOPBOARD_SOCIALS.INSTAGRAM) && !hasSocialMediaPosts(SHOPBOARD_SOCIALS.INSTAGRAM)) {\n setIsLoadingShopboardPosts(true)\n fetchPosts(SHOPBOARD_SOCIALS.INSTAGRAM)\n }\n if (isTiktokTabSelected() && isShopboardConnected(SHOPBOARD_SOCIALS.TIKTOK) && !isLoadingShopboardPosts && !isShopboardConnectedSyncing(SHOPBOARD_SOCIALS.TIKTOK) && !hasSocialMediaPosts(SHOPBOARD_SOCIALS.TIKTOK)) {\n setIsLoadingShopboardPosts(true)\n fetchPosts(SHOPBOARD_SOCIALS.TIKTOK)\n }\n\n if (isPinterestTabSelected() && isShopboardConnected(SHOPBOARD_SOCIALS.PINTEREST) && !isLoadingShopboardPosts && !isShopboardConnectedSyncing(SHOPBOARD_SOCIALS.PINTEREST) && !hasSocialMediaPosts(SHOPBOARD_SOCIALS.PINTEREST)) {\n setIsLoadingShopboardPosts(true)\n fetchPosts(SHOPBOARD_SOCIALS.PINTEREST)\n }\n }\n\n function isInstagramTabSelected() {\n return selectedTabOptionIndex === 0\n }\n\n function isTiktokTabSelected() {\n return selectedTabOptionIndex === 1\n }\n\n function isPinterestTabSelected() {\n return selectedTabOptionIndex === 2\n }\n\n function renderContent() {\n if (!userDetails?.shopboard?.synced) {\n return\n }\n if (isShopboardConnected()) {\n return renderConnectedContent()\n }\n return renderNoConnectionsContent()\n }\n\n function renderMobileContent() {\n if (!userDetails?.shopboard?.synced) {\n return\n }\n\n if (isShopboardConnected()) {\n return renderMobileConnectedContent()\n }\n\n return renderMobileNoConnectionsContent()\n }\n\n function renderMobileConnectedContent() {\n return <div className=\"mobile-shopboard-page-content-connected\">\n <MobileButtonStrip\n hasBottomLine={true}\n length={3}\n paddingInline='0px'\n stripButtonTextSize='14px'\n isFixed={true}\n top='var(--content-dialog-topbar-height)'\n buttons={[\n {\n text: t('SHOPBOARD_PAGE_INSTAGRAM_TAB_TEXT'),\n image: <ImageBox\n className='mobile-dashboard-topbar-button-image'\n image={INSTAGRAM_BLACK_WHITE_LOGO_URL}\n />,\n onClick: () => setSelectedTabOptionIndex(0),\n isSelected: isInstagramTabSelected(),\n isDisabled: false\n },\n {\n text: t('SHOPBOARD_PAGE_TIKTOK_TAB_TEXT'),\n image: <ImageBox\n className='mobile-dashboard-topbar-button-image'\n image={TIKTOK_BLACK_WHITE_LOGO_URL}\n />,\n onClick: () => setSelectedTabOptionIndex(1),\n isSelected: isTiktokTabSelected(),\n isDisabled: false\n },\n {\n text: t('SHOPBOARD_PAGE_PINTEREST_TAB_TEXT'),\n image: <ImageBox\n className='mobile-dashboard-topbar-button-image'\n image={PINTEREST_BLACK_WHITE_LOGO_URL}\n />,\n onClick: () => setSelectedTabOptionIndex(2),\n isSelected: isPinterestTabSelected(),\n isDisabled: false\n }\n ]}\n />\n <div className={`mobile-shopboard-page-content-connected-tab-content ${!isShopboardConnected(getCurrentlySelectedSocial()) || isShopboardConnectedSyncing(getCurrentlySelectedSocial()) ? 'no-list' : ''}`} onScroll={handlePostsScroll}>\n {(isLoadingShopboardPosts && isShopboardConnected(getCurrentlySelectedSocial()) && isShopboardConnectedSynced(getCurrentlySelectedSocial())) && <LoaderPage isFullScreen={false} isContained={true} styles={{ marginTop: '110px' }} />}\n {tabContent}\n </div>\n </div>\n }\n\n function renderConnectedContent() {\n return <div className=\"shopboard-page-content-connected\">\n <div className='shopboard-page-content-connected-tabs-bar'>\n <Tabs\n selectedTabOptionIndex={selectedTabOptionIndex}\n setSelectedTabOptionIndex={setSelectedTabOptionIndex}\n tabs={SHOPBOARD_TAB_OPTIONS}\n hasTopLine={false}\n selectedBottomLine={true}\n optionPadding={'5px'}\n isCentered={false}\n inputRef={tabsRef}\n />\n {isShopboardConnected(getCurrentlySelectedSocial()) && <LoaderButton\n buttonText={<div className='shopboard-page-sync-button-content'><GoSync className='shopboard-page-sync-button-icon' />{t('SHOPBOARD_PAGE_SYNC_SOCIAL_BUTTON_TEXT')}</div>}\n className='shopboard-page-sync-social-button'\n isLoading={isLoadingSyncSocialButton}\n onClick={triggerSyncJob}\n loaderCircleColor={SHOPBOARD_PAGE_BUTTON_LOADER_CIRCLE_COLOR}\n />}\n </div>\n <div className=\"shopboard-page-content-connected-tab-content\">\n {/* TODO - Consider using Loader instead of LoaderPage */}\n {(isLoadingShopboardPosts && isShopboardConnected(getCurrentlySelectedSocial()) && isShopboardConnectedSynced(getCurrentlySelectedSocial())) && <LoaderPage isFullScreen={false} isContained={true} styles={{ marginTop: '40px', height: '90%' }} />}\n {tabContent}\n </div>\n </div>\n }\n\n function renderTabContent() {\n switch (true) {\n case isInstagramTabSelected(): {\n if (!isShopboardConnected(SHOPBOARD_SOCIALS.INSTAGRAM)) {\n return <div className='shopboard-page-content-connected-tab-content-connected'>\n <ShopboardConnectComp social={SHOPBOARD_SOCIALS.INSTAGRAM} />\n </div>\n }\n\n if (isShopboardConnectedSynced(SHOPBOARD_SOCIALS.INSTAGRAM)) {\n return <>\n <div ref={postListRef} className={isMobile ? \"mobile-shopboard-page-content-connected-tab-content-list-container\" : \"shopboard-page-content-connected-tab-content-list-container\"}>\n {postListState[SHOPBOARD_SOCIALS.INSTAGRAM]?.map(post => <ShopboardSocialMediaPost\n key={post?.id}\n id={post?.id}\n social={SHOPBOARD_SOCIALS.INSTAGRAM}\n image={post?.imageUrl}\n isVisible={post?.isVisible}\n taggedProducts={post?.products}\n autoTaggedProducts={post?.autoTaggedProducts}\n onTagProducts={openAddProductsDialog}\n />)}\n </div>\n {isLoadingMoreData[SHOPBOARD_SOCIALS.INSTAGRAM] && renderLoaderRow()}\n </>\n }\n return renderConnectedSyncingTabContent()\n }\n\n case isTiktokTabSelected(): {\n if (!isShopboardConnected(SHOPBOARD_SOCIALS.TIKTOK)) {\n return <div className='shopboard-page-content-connected-tab-content-connected'>\n <ShopboardConnectComp social={SHOPBOARD_SOCIALS.TIKTOK} />\n </div>\n }\n\n if (isShopboardConnectedSynced(SHOPBOARD_SOCIALS.TIKTOK)) {\n return <>\n <div ref={postListRef} className={isMobile ? \"mobile-shopboard-page-content-connected-tab-content-list-container\" : \"shopboard-page-content-connected-tab-content-list-container\"}>\n {postListState[SHOPBOARD_SOCIALS.TIKTOK]?.map(post => <ShopboardSocialMediaPost\n key={post?.id}\n id={post?.id}\n social={SHOPBOARD_SOCIALS.TIKTOK}\n image={post?.imageUrl}\n isVisible={post?.isVisible}\n taggedProducts={post?.products}\n autoTaggedProducts={post?.autoTaggedProducts}\n onTagProducts={openAddProductsDialog}\n />)}\n </div>\n {isLoadingMoreData[SHOPBOARD_SOCIALS.TIKTOK] && renderLoaderRow()}\n </>\n }\n return renderConnectedSyncingTabContent()\n }\n\n default: { // pinterest is selected\n if (!isShopboardConnected(SHOPBOARD_SOCIALS.PINTEREST)) {\n return <div className='shopboard-page-content-connected-tab-content-connected'>\n <ShopboardConnectComp social={SHOPBOARD_SOCIALS.PINTEREST} />\n </div>\n }\n\n if (isShopboardConnectedSynced(SHOPBOARD_SOCIALS.PINTEREST)) {\n return <>\n <div ref={postListRef} className={isMobile ? \"mobile-shopboard-page-content-connected-tab-content-list-container\" : \"shopboard-page-content-connected-tab-content-list-container\"}>\n {postListState[SHOPBOARD_SOCIALS.PINTEREST]?.map(post => <ShopboardSocialMediaPost\n key={post?.id}\n id={post?.id}\n social={SHOPBOARD_SOCIALS.PINTEREST}\n image={post?.imageUrl}\n isVisible={post?.isVisible}\n taggedProducts={post?.products}\n autoTaggedProducts={post?.autoTaggedProducts}\n onTagProducts={openAddProductsDialog}\n />)}\n </div>\n {isLoadingMoreData[SHOPBOARD_SOCIALS.PINTEREST] && renderLoaderRow()}\n </>\n }\n return renderConnectedSyncingTabContent()\n }\n }\n }\n\n function renderLoaderRow() {\n return <div className={isMobile ? 'mobile-shopboard-page-loader-row' : 'shopboard-page-loader-row'}>\n <Loader styles={{\n width: isMobile ? '25px' : '30px',\n height: isMobile ? '25px' : '30px'\n }} />\n </div>\n }\n\n function openAddProductsDialog(social, postId, products) {\n setTagProductsDialogState({\n isOpen: true,\n social,\n postId,\n selectedProducts: products\n })\n }\n\n function tagProducts(selectedProducts) {\n tagPostProducts(tagProductsDialogState.social, tagProductsDialogState.postId, selectedProducts)\n }\n\n function renderConnectedSyncingTabContent() {\n return <div className=\"shopboard-page-content-connected-tab-content-syncing\">\n <div className=\"shopboard-page-content-connected-tab-content-syncing-titles-container\">\n <div className=\"shopboard-page-content-connected-tab-content-syncing-title\">{t('SHOPBOARD_PAGE_CONTENT_CONNECTED_SYNCING_TITLE')}</div>\n <div className=\"shopboard-page-content-connected-tab-content-syncing-subtitle\">{t('SHOPBOARD_PAGE_CONTENT_CONNECTED_SYNCING_SUBTITLE')}</div>\n </div>\n <div className=\"shopboard-page-content-no-connections-image\">\n <ImageBox\n image={SHOPBOARD_PAGE_IMAGE}\n className='shopboard-page-content-image'\n />\n </div>\n </div>\n }\n\n function closeAddProductDialog() {\n setTagProductsDialogState(prev => ({\n ...prev,\n isOpen: false,\n selectedProducts: [],\n social: '',\n postId: ''\n }))\n }\n\n function setSelectedProducts(products) {\n setTagProductsDialogState(prev => ({\n ...prev,\n selectedProducts: products\n }))\n }\n\n function renderMobileNoConnectionsContent() {\n return <div className='mobile-shopboard-page-content-no-connections'>\n <div ref={noConnectionsContentTitlesRef} className=\"mobile-shopboard-page-content-no-connections-titles\">\n <div className=\"mobile-shopboard-page-content-no-connections-title\">{t('SHOPBOARD_PAGE_CONTENT_NO_CONNECTIONS_TITLE')}</div>\n <div className=\"mobile-shopboard-page-content-no-connections-subtitle\">\n {\n <Trans\n i18nKey='SHOPBOARD_PAGE_CONTENT_NO_CONNECTIONS_SUBTITLE'\n components={{\n a: <div className='superscript' />\n }}\n />\n }\n </div>\n </div>\n <div ref={socialsRef} className=\"mobile-shopboard-page-content-no-connections-socials\">\n <ShopboardSocials\n instagramPostsCount={!isShopboardConnected(SHOPBOARD_SOCIALS.INSTAGRAM) ? null : userDetails?.shopboard?.socialMedias[SHOPBOARD_SOCIALS.INSTAGRAM]?.numberOfPosts}\n tiktokPostsCount={!isShopboardConnected(SHOPBOARD_SOCIALS.TIKTOK) ? null : userDetails?.shopboard?.socialMedias[SHOPBOARD_SOCIALS.TIKTOK]?.numberOfPosts}\n pinterestPostsCount={!isShopboardConnected(SHOPBOARD_SOCIALS.PINTEREST) ? null : userDetails?.shopboard?.socialMedias[SHOPBOARD_SOCIALS.PINTEREST]?.numberOfPosts}\n showImage={false}\n />\n </div>\n <div className=\"mobile-shopboard-page-content-no-connections-image\">\n <ImageBox\n image={SHOPBOARD_PAGE_IMAGE}\n className='shopboard-page-content-image'\n />\n </div>\n </div>\n }\n\n function renderNoConnectionsContent() {\n return <div className='shopboard-page-content-no-connections'>\n <div ref={noConnectionsContentTitlesRef} className=\"shopboard-page-content-no-connections-titles\">\n <div className=\"shopboard-page-content-no-connections-title\">{t('SHOPBOARD_PAGE_CONTENT_NO_CONNECTIONS_TITLE')}</div>\n <div className=\"shopboard-page-content-no-connections-subtitle\">\n {\n <Trans\n i18nKey='SHOPBOARD_PAGE_CONTENT_NO_CONNECTIONS_SUBTITLE'\n components={{\n a: <div className='superscript' />\n }}\n />\n }\n </div>\n </div>\n <div className=\"shopboard-page-content-no-connections-image-container\">\n <div className=\"shopboard-page-content-no-connections-connect-buttons\">\n <SocialConnectButton social={SHOPBOARD_SOCIALS.INSTAGRAM} />\n <SocialConnectButton social={SHOPBOARD_SOCIALS.TIKTOK} />\n <SocialConnectButton social={SHOPBOARD_SOCIALS.PINTEREST} />\n </div>\n <ImageBox\n image={SHOPBOARD_PAGE_IMAGE}\n className='shopboard-page-content-image'\n />\n </div>\n </div>\n }\n\n function handlePostsScroll(e) {\n if (((!isMobile && isShopboardConnected()) || (isMobile && isShopboardConnected(getCurrentlySelectedSocial()))) && isShopboardConnectedSynced(getCurrentlySelectedSocial())) {\n const scrollPosition = e.target.scrollTop\n const thresholdScrollHeight = postListRef?.current?.clientHeight - ((isMobile ? 300 : 400) * 1) - 25 - (isMobile ? 40 + 70 : tabsRef?.current?.clientHeight + 20 + 10 + analyticsRef?.current?.clientHeight + 30 + topSectionRef?.current?.clientHeight + 40) - (isMobile ? 0.4 * window.innerHeight : 0)\n\n if (!isLoadingMoreData[getCurrentlySelectedSocial()] && hasMoreDataState[getCurrentlySelectedSocial()] && scrollPosition >= thresholdScrollHeight) {\n setIsLoadingMoreData(prev => ({\n ...prev,\n [getCurrentlySelectedSocial()]: true\n }))\n fetchPosts(getCurrentlySelectedSocial(), userDetails?.shopboard?.socialMedias[getCurrentlySelectedSocial()]?.posts.length, false, extractedPosts => {\n setIsLoadingMoreData(prev => ({\n ...prev,\n [getCurrentlySelectedSocial()]: false\n }))\n })\n }\n }\n }\n\n function getCurrentlySelectedSocial() {\n switch (selectedTabOptionIndex) {\n case 0: return SHOPBOARD_SOCIALS.INSTAGRAM\n case 1: return SHOPBOARD_SOCIALS.TIKTOK\n default: return SHOPBOARD_SOCIALS.PINTEREST\n }\n }\n\n async function copyShopboardLink() {\n if (isMobile) {\n history.goBack()\n\n setTimeout(async () => {\n await copyToClipboard(getShopboardUrl())\n showApprovalMessage(t('SHOPBOARD_PAGE_APPROVAL_MESSAGE_SHOPBOARD_LINK_COPIED'))\n }, PAYDIN_DRAWER_TRANSITION_DURATION)\n } else {\n await copyToClipboard(getShopboardUrl())\n showApprovalMessage(t('SHOPBOARD_PAGE_APPROVAL_MESSAGE_SHOPBOARD_LINK_COPIED'))\n }\n }\n\n function closeMoreOptionsDrawer() {\n setOptionsDrawerState(prev => ({\n ...prev,\n isOpen: false\n }))\n }\n\n function openMoreOptionsDrawer() {\n setOptionsDrawerState(prev => ({\n ...prev,\n isOpen: true,\n onClose: closeMoreOptionsDrawer,\n children: <>\n <DrawerStyledButtonList\n buttons={[\n {\n text: t('SHOPBOARD_PAGE_MORE_OPTIONS_DRAWER_OPEN_LINK_OPTION'),\n image: <RiShareBoxLine className='mobile-dashboard-topbar-more-options-drawer-option-image' />,\n onClick: () => openUrl(getShopboardUrl())\n },\n {\n text: t('SHOPBOARD_PAGE_MORE_OPTIONS_DRAWER_COPY_OPTION'),\n image: <MdOutlineContentCopy className='mobile-dashboard-topbar-more-options-drawer-option-image' />,\n onClick: copyShopboardLink\n }].concat(isShopboardConnected(getCurrentlySelectedSocial()) ? [{\n text: t('SHOPBOARD_PAGE_MORE_OPTIONS_DRAWER_SYNC_SOCIAL_OPTION', {social: getCurrentlySelectedSocial()}),\n image: <GoSync className='mobile-dashboard-topbar-more-options-drawer-option-image' />,\n onClick: triggerSyncJob\n }] : []).concat([{\n text: t('MOBILE_DASHBOARD_TOPBAR_MORE_OPTIONS_DRAWER_OPTION_CANCEL'),\n image: <AiOutlineClose className='mobile-dashboard-topbar-more-options-drawer-option-image' />,\n onClick: () => history.goBack()\n }])\n }\n />\n </>\n }))\n }\n\n return (\n <div className={isMobile ? 'mobile-shopboard-page-container' : 'shopboard-page-container'} onScroll={!isMobile ? handlePostsScroll : null}>\n {isLoadingShopboardStatus && <DashboardLoader />}\n {\n isMobile ? <>\n <ContentDialogTopbar\n title={t('MOBILE_SHOPBOARD_PAGE_TITLE')}\n onBackButtonClick={() => history.goBack()}\n rightElement={<>\n <BiDotsHorizontalRounded className='mobile-shopboard-page-more-options-button' onClick={openMoreOptionsDrawer} />\n </>}\n />\n <div ref={shopboardContentRef} className=\"mobile-shopboard-page-content\">{renderMobileContent()}</div>\n </> : <>\n <div ref={topSectionRef} className=\"shopboard-page-top-section\">\n <div className=\"shopboard-page-title-container\">\n <div className=\"shopboard-page-title\">\n <Trans\n i18nKey='SHOPBOARD_PAGE_TITLE'\n components={{\n a: <div className='superscript' />\n }}\n />\n </div>\n {\n isShopboardConnected() && <div className=\"shopboard-page-link-url-field\">\n <a href={getShopboardUrl()} target='_blank' className=\"shopboard-page-link-url-field-text\">{getShopboardUrl()}</a>\n <MdOutlineContentCopy className=\"shopboard-page-link-url-field-image\" onClick={copyShopboardLink} />\n </div>\n }\n {\n isShopboardConnected() && <div className='shopboard-page-ai-badge-explanation-container'>\n <div className='shopboard-page-ai-badge-explanation-icon'>\n <AiBadge width='30px' height='30px' fontSize='12px' fontWeight='300'/>\n </div>\n <div className=\"shopboard-page-ai-badge-explanation-text\">\n {t('SHOPBOARD_PAGE_POST_AI_TAGGIN_EXPLANATION_TEXT', {status: userDetails?.settings?.productVisionConfigurations?.isEnabled ? 'enabled!\\n' : 'disabled.'})}\n {\n userDetails?.settings?.productVisionConfigurations?.isEnabled ?\n t('SHOPBOARD_PAGE_POST_AI_TAGGIN_EXPLANATION_SECONDARY_TEXT') :\n <div className=\"shopboard-page-ai-badge-explanation-to-enable-text\">\n {t('SHOPBOARD_PAGE_POST_AI_TAGGIN_GO_TO_SETTINGS_SECONDARY_TEXT')}\n <div onClick={navigateAITaggingSettingSection} className=\"shopboard-page-link-button\">{t('SHOPBOARD_PAGE_POST_AI_TAGGIN_GO_TO_SETTINGS_LINK_TEXT')}</div>\n </div>\n }\n </div>\n </div>\n }\n </div>\n {\n isShopboardConnected() && <ShopboardSocials\n instagramPostsCount={!userDetails?.shopboard?.socialMedias[SHOPBOARD_SOCIALS.INSTAGRAM]?.connected ? null : userDetails?.shopboard?.socialMedias[SHOPBOARD_SOCIALS.INSTAGRAM]?.numberOfPosts}\n instagramUsername={!userDetails?.shopboard?.socialMedias[SHOPBOARD_SOCIALS.INSTAGRAM]?.connected ? \"\" : userDetails?.shopboard?.socialMedias[SHOPBOARD_SOCIALS.INSTAGRAM]?.username}\n tiktokPostsCount={!userDetails?.shopboard?.socialMedias[SHOPBOARD_SOCIALS.TIKTOK]?.connected ? null : userDetails?.shopboard?.socialMedias[SHOPBOARD_SOCIALS.TIKTOK]?.numberOfPosts}\n tiktokUsername={!userDetails?.shopboard?.socialMedias[SHOPBOARD_SOCIALS.TIKTOK]?.connected ? \"\" : userDetails?.shopboard?.socialMedias[SHOPBOARD_SOCIALS.TIKTOK]?.username}\n pinterestPostsCount={!userDetails?.shopboard?.socialMedias[SHOPBOARD_SOCIALS.PINTEREST]?.connected ? null : userDetails?.shopboard?.socialMedias[SHOPBOARD_SOCIALS.PINTEREST]?.numberOfPosts}\n pinterestUsername={!userDetails?.shopboard?.socialMedias[SHOPBOARD_SOCIALS.PINTEREST]?.connected ? \"\" : userDetails?.shopboard?.socialMedias[SHOPBOARD_SOCIALS.PINTEREST]?.username}\n />\n }\n </div>\n <div ref={shopboardContentRef} className=\"shopboard-page-content\" style={{ paddingBottom: (!isShopboardConnected() && !isMobile) && '20px' }}>\n {\n (isShopboardConnected() && !isMobile) && <div ref={analyticsRef} className='shopboard-page-analytics'>\n {userDetails?.permissions?.clicksEnabled && <AnalyticsDataCard\n title={t('ANALYTICS_PAGE_OVERVIEW_SECTION_FRAME_VISITS')}\n value={typeof userDetails?.shopboard?.analytics?.visits === 'number' ? formatNumber(userDetails?.shopboard?.analytics?.visits, NUMBER_TYPES.SHORT) : userDetails?.shopboard?.analytics?.visits}\n tooltipText={t('ANALYTICS_PAGE_OVERVIEW_SECTION_FRAME_VISITS_TOOLTIP_TEXT')}\n numberStyles={{ fontSize: '24px' }}\n />}\n {userDetails?.permissions?.salesEnabled && <AnalyticsDataCard\n title={t('ANALYTICS_PAGE_OVERVIEW_SECTION_FRAME_COMPLETED_CHECKOUTS')}\n value={typeof userDetails?.shopboard?.analytics?.sales === 'number' ? formatNumber(userDetails?.shopboard?.analytics?.sales, NUMBER_TYPES.SHORT) : userDetails?.shopboard?.analytics?.sales}\n tooltipText={t('ANALYTICS_PAGE_OVERVIEW_SECTION_FRAME_COMPLETED_CHECKOUTS_TOOLTIP_TEXT')}\n numberStyles={{ fontSize: '24px' }}\n />}\n {(userDetails?.permissions?.salesEnabled && userDetails?.permissions?.clicksEnabled) && <AnalyticsDataCard\n title={t('ANALYTICS_PAGE_OVERVIEW_SECTION_FRAME_CR')}\n value={typeof userDetails?.shopboard?.analytics?.cr === 'number' ? `${formatNumber(userDetails?.shopboard?.analytics?.cr, NUMBER_TYPES.PERCENTAGE)}%` : userDetails?.shopboard?.analytics?.cr}\n tooltipText={t('ANALYTICS_PAGE_OVERVIEW_SECTION_FRAME_CR_TOOLTIP_TEXT')}\n isTooltipHorizontalSwap={isMobile}\n numberStyles={{ fontSize: '24px' }}\n />}\n {userDetails?.permissions?.revenueEnabled && <AnalyticsDataCard\n title={t('ANALYTICS_PAGE_OVERVIEW_SECTION_FRAME_REVENUE')}\n value={typeof userDetails?.shopboard?.analytics?.revenue === 'number' ? `${getCurrencySymbol(userDetails?.shopboard?.analytics?.currency)}${formatNumber(userDetails?.shopboard?.analytics?.revenue, NUMBER_TYPES.SHORT)}` : userDetails?.shopboard?.analytics?.revenue}\n tooltipText={t('ANALYTICS_PAGE_OVERVIEW_SECTION_FRAME_REVENUE_TOOLTIP_TEXT')}\n numberStyles={{ fontSize: '24px' }}\n />}\n {userDetails?.permissions?.revenueEnabled && <AnalyticsDataCard\n isTooltipHorizontalSwap={true}\n title={t('ANALYTICS_PAGE_OVERVIEW_SECTION_FRAME_AOV')}\n value={typeof userDetails?.shopboard?.analytics?.revenue === 'number' && typeof userDetails?.shopboard?.analytics?.sales === 'number' ? `${getCurrencySymbol(userDetails?.shopboard?.analytics?.currency)}${formatNumber(userDetails?.shopboard?.analytics?.revenue / userDetails?.shopboard?.analytics?.sales, NUMBER_TYPES.SHORT, true)}` : '-'}\n tooltipText={t('ANALYTICS_PAGE_OVERVIEW_SECTION_FRAME_AOV_TOOLTIP_TEXT')}\n numberStyles={{ fontSize: '24px' }}\n />}\n </div>\n }\n <div className=\"shopboard-page-content-body\" style={{ padding: !isShopboardConnected() && '30px 40px 0px 40px' }}>{renderContent()}</div>\n </div>\n </>\n }\n <AddProductsDialog\n isDialogOpen={tagProductsDialogState.isOpen}\n handleDialogClose={closeAddProductDialog}\n selectedProducts={tagProductsDialogState.selectedProducts}\n setSelectedProducts={setSelectedProducts}\n onFinishProductsSelection={tagProducts}\n selectMaxLimit={5}\n resetSelectedOnFinish={true}\n allowColorOptionSelect={true}\n resetCacheOnClose={true}\n fetchProductsInfo={{social: tagProductsDialogState.social, post_id: tagProductsDialogState.postId}}\n />\n {isMobile &&\n <PaydinDrawer\n direction={PAYDIN_DRAWER_DIRECTION.BOTTOM}\n isOpen={optionsDrawerState.isOpen}\n onOpen={optionsDrawerState.onOpen}\n onClose={optionsDrawerState.onClose}\n hasPadding={true}\n topRightBorderRadiusPx={LINKS_PAGE_MOBILE_OPTIONS_DRAWER_TOP_BORDER_RADIUS_PX}\n topLeftBorderRadiusPx={LINKS_PAGE_MOBILE_OPTIONS_DRAWER_TOP_BORDER_RADIUS_PX}\n >\n {optionsDrawerState.children}\n </PaydinDrawer>\n }\n </div>\n )\n}","import React, { useEffect, useState } from 'react'\nimport LoaderPage from 'pages/LoaderPage/LoaderPage'\nimport useQueryParams from 'hooks/useQueryParams'\nimport { useUserDetailsContext } from 'contexts/User'\nimport { useParams } from 'react-router-dom'\nimport { useHistoryContext } from 'contexts/History'\nimport { SHOPBOARD_AUTH_PAGE_CODE_QUERY_PARAMETER, SHOPBOARD_PAGE_URL } from 'constants/routes.constants'\nimport PaydinDialog, { PAYDIN_DIALOG_BUTTON_TYPES } from 'dialogs/PaydinDialog/PaydinDialog'\nimport { useTranslation } from 'react-i18next'\n\nexport default function ShopboardAuthPage() {\n const { t } = useTranslation()\n const {\n shopboardAuthenticate\n } = useUserDetailsContext()\n const queryParams = useQueryParams()\n const { social } = useParams()\n const history = useHistoryContext()\n\n const [dialogState, setDialogState] = useState({\n isOpen: false,\n title: '',\n message: '',\n leftButtonText: '',\n rightButtonText: '',\n leftButtonClickHandler: () => { }\n })\n\n useEffect(() => {\n if (!queryParams.get(SHOPBOARD_AUTH_PAGE_CODE_QUERY_PARAMETER)) {\n history.replace(SHOPBOARD_PAGE_URL)\n return\n }\n\n shopboardAuthenticate(social, queryParams.get(SHOPBOARD_AUTH_PAGE_CODE_QUERY_PARAMETER), () => {\n history.replace(SHOPBOARD_PAGE_URL)\n }, () => {\n console.log('authentication instagram failed')\n setDialogState(prev => ({\n ...prev,\n isOpen: true,\n title: t('SHOPBOARD_AUTH_PAGE_AUTH_FAILURE_DIALOG_MESSAGE', { social }),\n leftButtonText: t('SHOPBOARD_AUTH_PAGE_AUTH_FAILURE_DIALOG_LEFT_BUTTON_TEXT'),\n rightButtonText: '',\n leftButtonClickHandler: () => history.replace(SHOPBOARD_PAGE_URL)\n }))\n })\n }, [])\n\n function closeDialog() {\n setDialogState(prev => ({\n ...prev,\n isOpen: false\n }))\n }\n\n return (\n <div className='shopboard-auth-page'>\n {\n queryParams.get(SHOPBOARD_AUTH_PAGE_CODE_QUERY_PARAMETER) && <LoaderPage\n isContained={true}\n isFullScreen={true}\n />\n }\n <PaydinDialog\n isDialogOpen={dialogState.isOpen}\n title={dialogState.title}\n message={dialogState.message}\n handleDialogClose={closeDialog}\n rightButtonType={PAYDIN_DIALOG_BUTTON_TYPES.SECONDARY}\n leftButtonText={dialogState.leftButtonText}\n isLeftButtonWithLoader={false}\n closeOnLeftClick={false}\n rightButtonText={dialogState.rightButtonText}\n onLeftButtonClick={dialogState.leftButtonClickHandler}\n />\n </div>\n )\n}","import { useMemo } from 'react'\nimport { useLocation } from 'react-router-dom'\n\n/**\n * A custom hook that simplifies usage of query parameters.\n * @returns the current page's query parameters\n */\nexport default function useQueryParams() {\n const location = useLocation()\n const queryParams = useMemo(() => new URLSearchParams(location.search), [location])\n\n return queryParams\n}","import React from 'react'\n\nexport default function MultilinksImage2(props) {\n return (\n <svg \n {...props}\n height=\"512pt\" \n viewBox=\"-54 0 512 512\" \n width=\"512pt\"\n >\n <path d=\"m89.929688 108.378906c-1.859376 1.859375-2.929688 4.441406-2.929688 7.070313 0 2.640625 1.070312 5.210937 2.929688 7.070312 1.859374 1.859375 4.441406 2.929688 7.070312 2.929688 2.640625 0 5.210938-1.070313 7.070312-2.929688 1.859376-1.859375 2.929688-4.429687 2.929688-7.070312 0-2.628907-1.070312-5.210938-2.929688-7.070313-1.859374-1.859375-4.429687-2.929687-7.070312-2.929687-2.628906 0-5.210938 1.070312-7.070312 2.929687zm0 0\"/><path d=\"m368.683594 105.453125h-231.683594c-5.523438 0-10 4.476563-10 10s4.476562 10 10 10h231.683594c8.445312 0 15.316406 6.867187 15.316406 15.3125v205.234375h-66.460938c-5.523437 0-10 4.476562-10 10s4.476563 10 10 10h66.460938v4.683594c0 8.445312-6.871094 15.316406-15.316406 15.316406h-292.054688c-2.355468 0-4.636718.832031-6.441406 2.351562l-50.1875 42.261719v-289.847656c0-8.445313 6.871094-15.3125 15.316406-15.3125h21.6875c5.519532 0 10-4.476563 10-10s-4.480468-10-10-10h-21.6875c-19.472656 0-35.316406 15.839844-35.316406 35.3125v311.34375c0 3.890625 2.253906 7.425781 5.78125 9.066406 1.347656.625 2.785156.933594 4.214844.933594 2.316406 0 4.605468-.804687 6.445312-2.351563l63.835938-53.757812h288.40625c19.472656 0 35.316406-15.84375 35.316406-35.316406v-229.917969c0-19.472656-15.84375-35.3125-35.316406-35.3125zm0 0\"/><path d=\"m202 69.96875c5.523438 0 10-4.476562 10-10v-49.96875c0-5.523438-4.476562-10-10-10s-10 4.476562-10 10v49.96875c0 5.523438 4.476562 10 10 10zm0 0\"/><path d=\"m277.371094 74.027344c2.5625 0 5.117187-.976563 7.070312-2.929688l34.960938-34.957031c3.90625-3.90625 3.90625-10.238281 0-14.144531s-10.238282-3.90625-14.144532 0l-34.957031 34.957031c-3.90625 3.90625-3.90625 10.238281 0 14.144531 1.953125 1.953125 4.511719 2.929688 7.070313 2.929688zm0 0\"/><path d=\"m119.558594 71.03125c1.953125 1.953125 4.511718 2.929688 7.070312 2.929688s5.117188-.976563 7.070313-2.929688c3.90625-3.90625 3.90625-10.238281 0-14.144531l-34.960938-34.957031c-3.902343-3.90625-10.234375-3.90625-14.140625 0s-3.90625 10.234374 0 14.140624zm0 0\"/><path d=\"m202 442.03125c-5.523438 0-10 4.476562-10 10v49.96875c0 5.523438 4.476562 10 10 10s10-4.476562 10-10v-49.96875c0-5.523438-4.476562-10-10-10zm0 0\"/><path d=\"m284.441406 440.902344c-3.90625-3.90625-10.234375-3.90625-14.140625 0s-3.90625 10.238281 0 14.144531l34.957031 34.957031c1.953126 1.953125 4.511719 2.929688 7.070313 2.929688 2.5625 0 5.121094-.976563 7.074219-2.929688 3.902344-3.90625 3.902344-10.238281 0-14.144531zm0 0\"/><path d=\"m119.558594 440.96875-34.960938 34.960938c-3.90625 3.90625-3.90625 10.234374 0 14.140624 1.953125 1.953126 4.511719 2.929688 7.070313 2.929688 2.558593 0 5.117187-.976562 7.070312-2.929688l34.960938-34.957031c3.90625-3.90625 3.90625-10.238281 0-14.144531s-10.234375-3.90625-14.140625 0zm0 0\"/><path d=\"m293.917969 249.652344c0-26.207032-21.316407-47.523438-47.523438-47.523438h-21.695312c-5.519531 0-10 4.476563-10 10v88c0 5.519532 4.480469 10 10 10h21.695312c26.203125 0 47.523438-21.320312 47.523438-47.527344zm-20 12.949218c0 15.179688-12.347657 27.527344-27.523438 27.527344h-11.695312v-68h11.695312c15.175781 0 27.523438 12.34375 27.523438 27.523438zm0 0\"/><path d=\"m119.0625 271.796875-8.457031 25.140625c-1.761719 5.234375 1.050781 10.90625 6.285156 12.667969 5.242187 1.761719 10.90625-1.054688 12.667969-6.289063l6.242187-18.550781h27.78125l6.242188 18.550781c1.402343 4.175782 5.296875 6.8125 9.476562 6.8125 1.058594 0 2.132813-.167968 3.1875-.523437 5.234375-1.761719 8.050781-7.433594 6.289063-12.667969l-29.609375-88c-1.367188-4.070312-5.183594-6.808594-9.476563-6.808594-4.292968 0-8.109375 2.738282-9.476562 6.808594l-21.144532 62.839844c-.003906.007812-.007812.011718-.007812.019531zm30.628906-28.3125 7.160156 21.28125h-14.320312zm0 0\"/><path d=\"m270.96875 348.929688c-1.859375 1.859374-2.929688 4.441406-2.929688 7.070312 0 2.640625 1.070313 5.210938 2.929688 7.070312 1.863281 1.859376 4.441406 2.929688 7.070312 2.929688 2.632813 0 5.210938-1.070312 7.070313-2.929688 1.859375-1.859374 2.929687-4.441406 2.929687-7.070312s-1.070312-5.210938-2.929687-7.070312c-1.859375-1.859376-4.4375-2.929688-7.070313-2.929688-2.628906 0-5.210937 1.070312-7.070312 2.929688zm0 0\"/>\n </svg>\n )\n}","import React, { useEffect, useRef, useState } from 'react'\nimport './MultilinkItem.css'\nimport { useTranslation } from 'react-i18next'\nimport { BiDotsVerticalRounded } from 'react-icons/bi'\nimport { TbArrowsSplit } from \"react-icons/tb\";\nimport { useGeneralDataContext, useUserDetailsContext } from 'contexts/User'\nimport PaydinMenu from 'components/PaydinMenu/PaydinMenu'\nimport {\n CONTENT_TYPES,\n LINKS_PAGE_MOBILE_OPTIONS_DRAWER_CLOSING_DELAY,\n NUMBER_TYPES,\n PAYDIN_MENU_OPENING_DIRECTIONS,\n VIEW_MODES\n} from 'constants/general.constants'\nimport { formatNumber } from 'utils/utils'\nimport { useHistoryContext } from 'contexts/History'\nimport PaydinDialog, { PAYDIN_DIALOG_BUTTON_TYPES } from 'dialogs/PaydinDialog/PaydinDialog'\nimport { isMobile } from 'utils/deviceUtils'\nimport { environment } from 'conf'\nimport { DeleteMultilinkAPI } from 'api/links/links'\nimport { copyToClipboard } from 'services/SystemService'\nimport { MdOpenInNew, MdOutlineContentCopy, MdOutlineEdit } from 'react-icons/md'\nimport { RiDeleteBin6Line } from 'react-icons/ri'\nimport { BsCalendar } from 'react-icons/bs'\nimport ContentDialog from 'dialogs/ContentDialog/ContentDialog'\nimport DrawerStyledButtonList from 'components/DrawerStyledButtonList/DrawerStyledButtonList'\nimport MultilinksImage2 from 'embeddedImages/MultilinksImage2'\n\n/**\n * Represents a short item.\n * @param {string} shortId - The id of this short item \n * @param {Image/string} image - The image of this short item \n * @param {Image/string} influencerImage - The image of this short's influencer \n * @param {number} createdAt - The epoch time number representing the creation date of this short\n * @param {number} views - The number of views for this short\n * @param {number} revenue - The revenue of this short\n * @param {string} currency - The currency of this short\n * @param {string} influencerUsername - The currency of this short\n * @param {function} onDeleteLink - A callback function to invoke after the short was deleted\n */\nexport default function MultilinkItem({\n multilinkId,\n createdAt,\n currency,\n title,\n linksOptions,\n splitterType,\n onDeleteMultilink = () => { },\n onUpdateMultilink = () => { },\n elementRef = null\n}) {\n const { t } = useTranslation()\n const { userDetails } = useUserDetailsContext()\n const history = useHistoryContext()\n const {\n showApprovalMessage,\n openDrawer,\n closeDrawer,\n } = useGeneralDataContext()\n\n const {\n getFrontendUrl,\n } = useUserDetailsContext()\n\n const [isMultilinkDeletionDialogOpen, setIsMultilinkDeletionDialogOpen] = useState(false)\n const [optionsMenuState, setOptionsMenuState] = useState({\n isOpen: false,\n anchorElement: null,\n onClose: () => { }\n })\n const [multilinkContentDialogState, setMultilinkContentDialogState] = useState({\n isOpen: false,\n mode: VIEW_MODES.PREVIEW\n })\n\n const multilinkItemTitlesContainerRef = useRef(null)\n const multilinkItemTitleRef = useRef(null)\n\n useEffect(() => {\n multilinkItemTitleRef.current.style.maxWidth = `${multilinkItemTitlesContainerRef?.current?.clientWidth}px`\n }, [])\n\n function getFormattedDate(epochTime) {\n const date = new Date(epochTime)\n return date.toLocaleDateString('en-us', { year: \"numeric\", month: \"short\", day: \"numeric\" })\n }\n\n function openOptionsMenu(e) {\n setOptionsMenuState({\n isOpen: true,\n anchorElement: e.currentTarget,\n onClose: () => setOptionsMenuState(prev => ({\n ...prev,\n isOpen: false\n }))\n })\n }\n\n function editMultilink() {\n if (isMobile) {\n history.goBack()\n } else {\n optionsMenuState.onClose()\n }\n\n setTimeout(() => {\n setMultilinkContentDialogState({\n isOpen: true,\n mode: VIEW_MODES.EDIT\n })\n }, 200)\n }\n\n function previewMultilink(closeDialog = false) {\n if (isMobile) {\n if (closeDialog) {\n history.goBack()\n }\n } else {\n if (closeDialog) {\n optionsMenuState.onClose()\n }\n }\n\n if (closeDialog) {\n setTimeout(() => {\n setMultilinkContentDialogState({\n isOpen: true,\n mode: VIEW_MODES.PREVIEW\n })\n }, 200)\n } else {\n setMultilinkContentDialogState({\n isOpen: true,\n mode: VIEW_MODES.PREVIEW\n })\n }\n }\n\n async function copyMultilink(closeDialog = false) {\n if (isMobile && closeDialog) {\n closeDrawer()\n }\n\n const url = `${getFrontendUrl()}${userDetails?.username}/${multilinkId}`\n await copyToClipboard(url)\n showApprovalMessage(t('MULTILINK_COPIED_TO_CLIPBOARD'))\n }\n\n function openDeleteMultilinkConfirmationDialog() {\n if (isMobile) {\n closeDrawer()\n setTimeout(() => {\n setIsMultilinkDeletionDialogOpen(true)\n }, LINKS_PAGE_MOBILE_OPTIONS_DRAWER_CLOSING_DELAY)\n } else {\n optionsMenuState.onClose()\n setIsMultilinkDeletionDialogOpen(true)\n history.addBackHandler(() => setIsMultilinkDeletionDialogOpen(false))\n }\n }\n\n function deleteMultilink() {\n DeleteMultilinkAPI(multilinkId)\n .then(response => {\n closeDialog()\n onDeleteMultilink(multilinkId)\n })\n .catch(error => {\n console.log(error)\n })\n }\n\n function closeDialog() {\n setIsMultilinkDeletionDialogOpen(false)\n }\n\n function openOptionsDrawer() {\n openDrawer(true, <>\n <div className=\"mobile-multilink-item-more-options-menu-container\">\n <div className=\"mobile-multilink-item-more-options-menu-item-line\">\n <div className=\"mobile-multilink-item-more-options-menu-single-item\" onClick={() => copyMultilink(true)}>\n <MdOutlineContentCopy className=\"mobile-multilink-item-more-options-menu-single-item-image\" />\n <div className=\"mobile-multilink-item-more-options-menu-single-item-text\">{t('LINKS_PAGE_OPTIONS_MENU_ITEM_COPY_LINK')}</div>\n </div>\n <div className=\"mobile-multilink-item-more-options-menu-single-item\" onClick={() => previewMultilink(true)}>\n <MdOpenInNew className=\"mobile-multilink-item-more-options-menu-single-item-image\" />\n <div className=\"mobile-multilink-item-more-options-menu-single-item-text\">{t('LINKS_PAGE_OPTIONS_MENU_ITEM_OPEN')}</div>\n </div>\n </div>\n <DrawerStyledButtonList\n buttons={[\n ...(userDetails?.isAdmin ? [{\n text: t('LINKS_PAGE_OPTIONS_MENU_ITEM_EDIT'),\n image: <MdOutlineEdit className=\"mobile-multilink-item-more-options-menu-section-item-image\" />,\n onClick: editMultilink\n }] : []),\n ...(userDetails?.isAdmin ? [{\n text: t('LINKS_PAGE_OPTIONS_MENU_ITEM_DELETE'),\n image: <RiDeleteBin6Line className=\"mobile-multilink-item-more-options-menu-section-item-image\" />,\n onClick: openDeleteMultilinkConfirmationDialog,\n color: 'red'\n }] : [])\n ]}\n />\n </div>\n </>)\n }\n\n function getTitle() {\n return !title || title?.length === 0 ? \"\" : title\n }\n\n function closeMultilinkContentDialog() {\n setMultilinkContentDialogState(prev => ({\n ...prev,\n isOpen: false\n }))\n }\n\n return (\n <div ref={elementRef} className={isMobile ? 'mobile-multilink-item-container' : 'multilink-item-container'}>\n <div className=\"multilink-item-content\">\n <div className={isMobile ? 'mobile-multilink-item-details-container' : 'multilink-item-details-container'}>\n <MultilinksImage2 className=\"multilink-item-image\" onClick={() => previewMultilink(false)}/>\n <div ref={multilinkItemTitlesContainerRef} className=\"multilink-item-details\">\n <div className=\"multilink-item-buttons\">\n <div className=\"multilink-item-copy-to-clipboard-button\" onClick={() => copyMultilink(false)}>\n <MdOutlineContentCopy className='multilink-item-copy-to-clipboard-button-image' />\n <div className=\"multilink-item-copy-to-clipboard-button-text\">{t('SHORTS_ITEM_COPY_TO_CLIPBOARD_BUTTON_TEXT')}</div>\n </div>\n <BiDotsVerticalRounded className={isMobile ? 'mobile-multilink-item-statistics-more-options-button' : 'multilink-item-statistics-more-options-button'} onClick={isMobile ? openOptionsDrawer : openOptionsMenu} />\n </div>\n <div className=\"multilink-item-details-lower-row\">\n <div className=\"multilink-item-created-at-expired-container\">\n <div className=\"multilink-item-titles-container\">\n <div ref={multilinkItemTitleRef} className={isMobile ? \"mobile-multilink-item-title\" : \"multilink-item-title\"} onClick={() => previewMultilink(false)}>{getTitle()}</div>\n </div>\n </div>\n <div className='multilink-item-statistics' onClick={() => previewMultilink(false)}>\n <div className=\"multilink-item-created-at-container\">\n <div className=\"multilink-item-statistics-created-at-container multilink-item-detail-container\">\n <BsCalendar className='multilink-item-statistics-created-at-image multilink-item-statistics-image' />\n <div className={`multilink-item-statistics-created-at-value ${isMobile ? 'mobile-multilink-item-statistics-value' : 'multilink-item-statistics-value'}`}>{getFormattedDate(createdAt)}</div>\n </div>\n </div>\n <div className=\"multilink-item-statistics-container\">\n <div className=\"multilink-item-statistics-views-container multilink-item-detail-container\">\n <TbArrowsSplit className='multilink-item-statistics-links-number-image multilink-item-statistics-image' />\n <div className={`multilink-item-statistics-views-value ${isMobile ? 'mobile-multilink-item-statistics-value' : 'multilink-item-statistics-value'}`}>{formatNumber(linksOptions?.length, NUMBER_TYPES.SHORT)}</div>\n <div className={`multilink-item-statistics-views-value-suffix ${isMobile ? 'mobile-multilink-item-statistics-value-suffix' : 'multilink-item-statistics-value-suffix'}`}>{t('MULTILINK_ITEM_NUMBER_OF_EXPERIENCES_SUFFIX')}</div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n {!isMobile &&\n <PaydinMenu\n anchorElement={optionsMenuState.anchorElement}\n isOpen={optionsMenuState.isOpen}\n onClose={optionsMenuState.onClose}\n direction={PAYDIN_MENU_OPENING_DIRECTIONS.LEFT}\n options={[\n {\n text: t('LINKS_PAGE_OPTIONS_MENU_ITEM_OPEN'),\n onClick: previewMultilink\n },\n ...(userDetails?.isAdmin ? [{\n text: t('LINKS_PAGE_OPTIONS_MENU_ITEM_EDIT'),\n onClick: editMultilink\n }] : []),\n ...(userDetails?.isAdmin ? [{\n className: 'multilink-item-options-menu-delete-option',\n text: t('LINKS_PAGE_OPTIONS_MENU_ITEM_DELETE'),\n onClick: openDeleteMultilinkConfirmationDialog\n }] : [])\n ]}\n />\n }\n <PaydinDialog\n title={t('LINKS_PAGE_LINK_DELETION_CONFIRMATION_DIALOG_TITLE')}\n message={t('LINKS_PAGE_LINK_DELETION_CONFIRMATION_DIALOG_MESSAGE')}\n isDialogOpen={isMultilinkDeletionDialogOpen}\n handleDialogClose={closeDialog}\n leftButtonText={t('LINKS_PAGE_LINK_DELETION_CONFIRMATION_DIALOG_LEFT_BUTTON_TEXT')}\n rightButtonText={t('LINKS_PAGE_LINK_DELETION_CONFIRMATION_DIALOG_RIGHT_BUTTON_TEXT')}\n rightButtonType={PAYDIN_DIALOG_BUTTON_TYPES.SECONDARY}\n onRightButtonClick={deleteMultilink}\n closeOnRightClick={false}\n isLeftButtonWithLoader={false}\n />\n <ContentDialog\n isDialogOpen={multilinkContentDialogState.isOpen}\n handleDialogClose={closeMultilinkContentDialog}\n data={{\n multilinkId: multilinkId\n }}\n mode={multilinkContentDialogState.mode}\n contentType={CONTENT_TYPES.MULTILINK}\n onDelete={onDeleteMultilink}\n onSaveSuccess={onUpdateMultilink}\n />\n </div>\n )\n}","import React, { useEffect, useRef, useState } from 'react'\nimport './MultilinksPage.css'\nimport ImageBox from 'components/ImageBox/ImageBox'\nimport { useHistoryContext } from 'contexts/History'\nimport {\n HOME_PAGE_URL\n} from 'constants/routes.constants'\nimport {\n useFetchLinksContext,\n useGeneralDataContext,\n useIsUserLoadedContext,\n useUserDetailsContext,\n} from 'contexts/User'\nimport { useTranslation } from 'react-i18next'\nimport {\n EDIT_LINK_PAGE_PRODUCT_SEARCH_REQUEST_SEND_DELAY_MILLISECONDS,\n LINKS_PAGE_FETCH_NEXT_LINKS_THRESHOLD_ROW_COUNT,\n LINK_ITEM_HEIGHT_PX,\n MULTILINK_PAGES_MAX_WIDTH,\n MULTILINKS_PAGE_MULTILINKS_FILTER_COUNT,\n PAGE_DEFAULT_MAX_WIDTH,\n SHOPEAKS_SMALL_LOGO_URL,\n VIEW_MODES,\n CONTENT_TYPES\n} from 'constants/general.constants'\nimport ShopifyConnect from 'components/ShopifyConnect/ShopifyConnect'\nimport { isMobile } from 'utils/deviceUtils'\nimport { CiSearch } from 'react-icons/ci'\nimport { IoCloseOutline } from 'react-icons/io5'\nimport NoItemsFound from 'components/NoItemsFound/NoItemsFound'\nimport DashboardLoader from 'components/DashboardLoader/DashboardLoader'\nimport Loader from 'components/Loader/Loader'\nimport { extractMultilinkPreviewData } from 'utils/dataUtils'\nimport MultilinkItem from 'components/MultilinkItem/MultilinkItem'\nimport ContentDialog from 'dialogs/ContentDialog/ContentDialog'\nimport MultilinksImage2 from 'embeddedImages/MultilinksImage2'\n\n/**\n * Represents the user's multilinks page.\n */\nexport default function MultilinksPage() {\n const { t } = useTranslation()\n const history = useHistoryContext()\n const {\n userDetails,\n isFreeUserAndTrialEnded\n } = useUserDetailsContext()\n const {\n finishedUpdatingObject,\n finishedCreatingObject,\n objectToSave,\n openFreeTrialDialog\n } = useGeneralDataContext()\n const { fetchMultilinks } = useFetchLinksContext()\n const isUserLoaded = useIsUserLoadedContext()\n\n const [isLoadingMultilinks, setIsLoadingMultilinks] = useState(true)\n const [isLoadingMoreMultilinks, setIsLoadingMoreMultilinks] = useState(false)\n const [searchQuery, setSearchQuery] = useState('')\n const [skip, setSkip] = useState(0)\n const [defaultMultilinks, setDefaultMultilinks] = useState([])\n const [multilinkSearchResult, setMultilinkSearchResult] = useState([])\n const [hasMoreMultilinks, setHasMoreMultilinks] = useState(true)\n const [shouldShowNoMultilinks, setShouldShowNoMultilinks] = useState(false)\n const [isFirstRender, setIsFirstRender] = useState(true) // used to control the appearance of the loader only in the first render\n const [isMultilinkContentDialogOpen, setIsMultilinkContentDialogOpen] = useState(false)\n\n const typingTimeoutRef = useRef(null)\n const topbarRef = useRef(null)\n const multilinksListRef = useRef(null)\n\n useEffect(() => {\n if (hasShopifyStore()) {\n if (!isMobile) {\n topbarRef.current.style.width = `${multilinksListRef?.current?.clientWidth}px`\n }\n\n if (isUserLoaded) {\n // when the splash is no longer shown, load the links again to refresh the links collection\n fetchFirstMultilinks()\n }\n } else {\n history.replace(HOME_PAGE_URL)\n }\n }, [])\n\n useEffect(() => {\n setShouldShowNoMultilinks(false)\n setMultilinks([], true, true)\n setIsLoadingMultilinks(true)\n setHasMoreMultilinks(true)\n clearTypingTimeout(typingTimeoutRef.current)\n if (searchQuery) {\n typingTimeoutRef.current = setTimeout(() => {\n fetchMultilinks(searchQuery, 0, multilinksData => {\n setShouldShowNoMultilinks(true)\n setMultilinks(multilinksData?.multilinks, true, true)\n setHasMoreMultilinks(multilinksData?.multilinks.length === MULTILINKS_PAGE_MULTILINKS_FILTER_COUNT)\n setIsLoadingMultilinks(false)\n })\n }, EDIT_LINK_PAGE_PRODUCT_SEARCH_REQUEST_SEND_DELAY_MILLISECONDS)\n } else {\n setMultilinkSearchResult(defaultMultilinks)\n if (!isFirstRender) { // On the first render, the next line will be executed unless we check for first render, because in this case 'searchQuery' is falsy\n setIsLoadingMultilinks(false)\n }\n }\n setIsFirstRender(false)\n\n return () => {\n clearTypingTimeout(typingTimeoutRef.current)\n }\n }, [searchQuery])\n\n useEffect(() => {\n if (finishedUpdatingObject) {\n updateMultilink(objectToSave)\n } else if (finishedCreatingObject) {\n addNewMultilink(objectToSave)\n }\n }, [finishedUpdatingObject, finishedCreatingObject])\n\n function fetchFirstMultilinks() {\n setIsLoadingMultilinks(true)\n fetchMultilinks(searchQuery, 0, multilinksData => {\n setShouldShowNoMultilinks(true)\n setDefaultMultilinkList(multilinksData?.multilinks)\n setMultilinks(multilinksData?.multilinks, false, true)\n setHasMoreMultilinks(multilinksData?.multilinks.length === MULTILINKS_PAGE_MULTILINKS_FILTER_COUNT)\n setIsLoadingMultilinks(false)\n })\n }\n\n function setDefaultMultilinkList(multilinks) {\n if (!multilinks) {\n return\n }\n\n setDefaultMultilinks([...(multilinks.map(link => extractMultilinkPreviewData(link)))])\n }\n\n function setMultilinks(multilinks, shouldResetSkip = false, shouldOverrideMultilinks = false) {\n if (!multilinks) {\n return\n }\n\n if (shouldOverrideMultilinks) {\n setMultilinkSearchResult([...(multilinks.map(multilink => extractMultilinkPreviewData(multilink)))])\n } else {\n setMultilinkSearchResult(prev => ([\n ...prev,\n ...(multilinks.map(multilink => extractMultilinkPreviewData(multilink)))\n ]))\n }\n if (shouldResetSkip)\n setSkip(0)\n else\n setSkip(prev => prev + multilinks.length)\n }\n\n function clearTypingTimeout(timeout) {\n timeout && clearTimeout(timeout)\n }\n\n function clearSearchQuery() {\n setSearchQuery('')\n }\n\n function handleChange(e) {\n setSearchQuery(e.target.value)\n }\n\n function onAddMultilinkButtonClick() {\n if (isFreeUserAndTrialEnded()) {\n openFreeTrialDialog()\n } else {\n setIsMultilinkContentDialogOpen(true)\n }\n }\n\n function hasShopifyStore() {\n return userDetails.brand && Object.keys(userDetails.brand).length > 0\n }\n\n function hasNoMultilinks() {\n return !defaultMultilinks || defaultMultilinks.length === 0\n }\n\n function hasNoMultilinksResults() {\n return !multilinkSearchResult || multilinkSearchResult.length === 0\n }\n\n function renderMultilinksContent() {\n if (hasNoMultilinks()) {\n return <>\n {\n shouldShowNoMultilinks && <NoItemsFound\n isEmbeddedIcon={true}\n image={<MultilinksImage2 className='multilinks-page-no-multilinks-image' />}\n title={t('MULTILINKS_PAGE_NO_LINKS_TITLE')}\n buttonText={t('MULTILINKS_PAGE_NO_MULTILINKS_CREATE_LINK_BUTTON_TEXT')}\n showButton={userDetails?.isAdmin}\n addItemButtonClickHandler={onAddMultilinkButtonClick}\n />\n }\n </>\n }\n\n if (searchQuery && hasNoMultilinksResults()) {\n return <>\n {\n shouldShowNoMultilinks && <div className={isMobile ? 'mobile-multilinks-page-no-results-found-container' : 'multilinks-page-no-results-found-container'}>\n <div className=\"multilinks-page-no-results-found-content\">\n <div className=\"multilinks-page-no-results-found-text\">{t('ADD_PRODUCTS_DIALOG_NO_RESULTS_FOUND_TEXT')}</div>\n </div>\n </div>\n }\n </>\n }\n\n return <div className={isMobile ? 'mobile-multilinks-page-content-multilinks-list' : 'multilinks-page-content-multilinks-list'}>\n {\n multilinkSearchResult?.map(multilink => <MultilinkItem\n key={multilink?.multilinkId}\n multilinkId={multilink?.multilinkId}\n createdAt={multilink?.createdAt}\n currency={multilink?.currency}\n title={multilink?.title}\n splitterType={multilink?.splitterType}\n linksOptions={multilink.linksOptions}\n onDeleteMultilink={deleteMultilink}\n />)\n }\n </div>\n }\n\n function deleteMultilink(multilinkId) {\n setMultilinkSearchResult(prev => prev.filter(multilink => {\n return multilink?.multilinkId !== multilinkId\n }))\n setDefaultMultilinks(prev => prev.filter(multilink => multilink?.multilinkId !== multilinkId))\n setIsLoadingMultilinks(false)\n }\n\n function updateMultilink(updatedMultilink) {\n setMultilinkSearchResult(prev => prev.map(multilink => multilink?.multilinkId === updatedMultilink.multilinkId ? updatedMultilink : multilink))\n setDefaultMultilinks(prev => prev.map(multilink => multilink?.multilinkId === updatedMultilink.multilinkId ? updatedMultilink : multilink))\n }\n\n function addNewMultilink(newMultilink) {\n setMultilinkSearchResult(prev => [newMultilink, ...prev])\n setDefaultMultilinks(prev => [newMultilink, ...prev])\n }\n\n function handleMultilinksScroll(e) {\n const scrollPosition = e.target.scrollTop\n const thresholdScrollHeight = multilinksListRef?.current?.clientHeight - (LINKS_PAGE_FETCH_NEXT_LINKS_THRESHOLD_ROW_COUNT * LINK_ITEM_HEIGHT_PX) + (topbarRef?.current?.clientHeight) - (isMobile ? 0.4 * window.innerHeight : 0)\n if (!isLoadingMoreMultilinks && hasMoreMultilinks && scrollPosition + e.target.clientHeight >= thresholdScrollHeight) {\n setIsLoadingMoreMultilinks(true)\n fetchMultilinks(searchQuery, multilinkSearchResult?.length, multilinksData => {\n setMultilinks(multilinksData?.multilinks, false, false)\n setHasMoreMultilinks(multilinksData?.multilinks.length === MULTILINKS_PAGE_MULTILINKS_FILTER_COUNT)\n setIsLoadingMoreMultilinks(false)\n })\n }\n }\n\n function renderLoaderRow() {\n return <div className={isMobile ? 'mobile-multilinks-page-loader-row' : 'multilinks-page-loader-row'}>\n <Loader styles={{\n width: isMobile ? '25px' : '30px',\n height: isMobile ? '25px' : '30px'\n }} />\n </div>\n }\n\n function closeContentDialog() {\n setIsMultilinkContentDialogOpen(false)\n }\n\n return (\n <>\n { !isMobile ?\n <div onScroll={handleMultilinksScroll} className='multilinks-page-container' style={{ height: hasShopifyStore() ? null : '100vh', maxWidth: hasShopifyStore() ? `${MULTILINK_PAGES_MAX_WIDTH}px` : `${PAGE_DEFAULT_MAX_WIDTH}px`, margin: !hasShopifyStore() && '0 auto' }}>\n {\n hasShopifyStore() ? (\n <>\n {isLoadingMultilinks && <DashboardLoader />}\n <div ref={topbarRef} className=\"multilinks-page-topbar\">\n <div className=\"multilinks-page-topbar-store-name-container\">\n {\n userDetails?.businessLogo ? <ImageBox\n className='multilinks-page-topbar-store-image'\n image={userDetails?.businessLogo}\n /> : <div className=\"multilinks-page-topbar-store-name\">{userDetails?.businessName ?? \"\"}</div>\n }\n </div>\n <div className=\"multilinks-page-topbar-buttons-container\">\n {\n !hasNoMultilinks() && <>\n <div className=\"multilinks-page-topbar-search-box\" style={{ width: isMobile ? '100%' : '300px' }}>\n <input className='multilinks-page-topbar-search-box-input' value={searchQuery} type='text' onChange={handleChange} placeholder={t('ADD_PRODUCTS_DIALOG_TOPBAR_SEARCH_BOX_PLACEHOLDER')} />\n {\n searchQuery.length === 0 ?\n <CiSearch className='multilinks-page-topbar-search-box-image' /> :\n <IoCloseOutline className='edit-multilink-section-add-products-dialog-topbar-search-box-image close' onClick={clearSearchQuery} />\n }\n </div>\n </>\n }\n {userDetails?.isAdmin && <div className=\"multilinks-page-topbar-create-new-multilink-button multilinks-page-topbar-button\" onClick={onAddMultilinkButtonClick}>{t('MULTILINKS_PAGE_CREATE_NEW_MULTILINK_BUTTON_TEXT')}</div>}\n </div>\n </div>\n <div ref={multilinksListRef} className={`multilinks-page-content ${hasNoMultilinks() ? 'no-multilinks-content' : ''}`}>\n {renderMultilinksContent()}\n {isLoadingMoreMultilinks && renderLoaderRow()}\n </div>\n </>\n ) : <ShopifyConnect hasShopifyStore={false} />\n }\n </div> :\n hasShopifyStore() ? <>\n {isLoadingMultilinks && <DashboardLoader />}\n <div onScroll={handleMultilinksScroll} className='mobile-multilinks-page-container'>\n {\n !hasNoMultilinks() && <>\n <div ref={topbarRef} className='mobile-multilinks-page-topbar-search-box-container'>\n <div className=\"mobile-multilinks-page-topbar-search-box\">\n <input className='multilinks-page-topbar-search-box-input' value={searchQuery} type='text' onChange={handleChange} placeholder={t('ADD_PRODUCTS_DIALOG_TOPBAR_SEARCH_BOX_PLACEHOLDER')} />\n {\n searchQuery.length === 0 ?\n <CiSearch className='multilinks-page-topbar-search-box-image' /> :\n <IoCloseOutline className='multilinks-page-topbar-search-box-image close' onClick={clearSearchQuery} />\n }\n </div>\n </div>\n <div className=\"separator-line\"></div>\n </>\n }\n <div ref={multilinksListRef} className={`mobile-multilinks-page-content ${hasNoMultilinks() ? 'mobile-no-multilinks-content' : ''}`}>\n {renderMultilinksContent()}\n {isLoadingMoreMultilinks && renderLoaderRow()}\n </div>\n </div>\n </> : <ShopifyConnect hasShopifyStore={false} />\n }\n <ContentDialog\n isDialogOpen={isMultilinkContentDialogOpen}\n handleDialogClose={closeContentDialog}\n mode={VIEW_MODES.CREATE}\n contentType={CONTENT_TYPES.MULTILINK}\n />\n </>\n )\n}","import React, { useEffect, useState } from 'react'\nimport { BrowserRouter, Switch } from 'react-router-dom'\nimport './App.css'\nimport {\n\tLOGIN_PAGE_URL,\n\tSIGN_UP_PAGE_URL,\n\tSIGN_UP_REQUEST_PAGE_URL,\n\tFORGOT_PASSWORD_PAGE_URL,\n\tEXTERNAL_AUTH_PAGE_URL,\n\tCREATE_NEW_PASSWORD_PAGE_URL,\n\tPRIVACY_POLICY_PAGE_URL,\n\tTERMS_PAGE_URL,\n\tANALYTICS_PAGE_URL,\n\tACCOUNT_PAGE_URL,\n\tAPPEARANCE_PAGE_URL,\n\tLINKS_PAGE_URL,\n\tPRICING_PLANS_PAGE_URL,\n\tSHOPIFY_HELP_PAGE_URL,\n\tADMIN_PAGES_URL_PREFIX,\n\tACCOUNT_VERIFICATION_PAGE_URL,\n\tINFLUENCERS_PAGE_URL,\n\tINFLUENCER_FORGOT_PASSWORD_PAGE_URL,\n\tLOGIN_INFLUENCER_PAGE_URL,\n\tSHORTS_PAGE_URL,\n\tLOGIN_STORE_PAGE_URL,\n\tREGISTER_STORE_PAGE_URL,\n\tSETTINGS_PAGE_URL,\n\tHOME_PAGE_URL,\n\tGOTO_HOMEPAGE_URLS,\n\tMAGIC_STORE_PAGE_URL,\n\tSHOPBOARD_PAGE_URL,\n\tSHOPBOARD_AUTH_PAGE_URL,\n\tMULTILINKS_PAGE_URL,\n\tTRENDS_PAGE_URL,\n} from 'constants/routes.constants'\nimport HistoryProvider from 'contexts/History'\nimport RouteWrapper from 'layouts/RouteWrapper'\nimport LinksPage from 'pages/LinksPage/LinksPage'\nimport TrendsPage from 'pages/TrendsPage/TrendsPage'\nimport AuthLayout from 'layouts/RequiredAuthLayout'\nimport UserProvider from 'contexts/User'\nimport NotFound from 'pages/NotFound/NotFound'\nimport {\n\tAPPLICATION_RECOVERY_TIMEOUT_MILISECONDS,\n\tNOTIFY_STORE_SUBSCRIPTION_FINISHED_MESSAGE\n} from 'constants/general.constants'\nimport Splash from 'pages/Splash/Splash'\nimport SignUpPage from 'pages/SignUpPage/SignUpPage'\nimport ExternalAuthPage from 'pages/ExternalAuthPage/ExternalAuthPage'\nimport CreateNewPasswordPage from 'pages/CreateNewPasswordPage/CreateNewPasswordPage'\nimport PrivacyPolicyPage from 'pages/PrivacyPolicyPage/PrivacyPolicyPage'\nimport TermsAndConditionsPage from 'pages/TermsAndConditionsPage/TermsAndConditionsPage'\nimport ShopifyHelpPage from 'pages/ShopifyHelpPage/ShopifyHelpPage'\nimport AnalyticsPage from 'pages/AnalyticsPage/AnalyticsPage'\nimport AccountPage from 'pages/AccountPage/AccountPage'\nimport GeneralLayout from 'layouts/GeneralLayout/GeneralLayout'\nimport AppearancePage from 'pages/AppearancePage/AppearancePage'\nimport 'bootstrap/dist/css/bootstrap.min.css'\nimport DashboardLayout from 'layouts/DashboardLayout/DashboardLayout'\nimport PricingPlansPage from 'pages/PricingPlansPage/PricingPlansPage'\nimport BaseLayout from 'layouts/BaseLayout/BaseLayout'\nimport AccountVerificationPage from 'pages/AccountVerificationPage/AccountVerificationPage'\nimport SignUpRequestPage from 'pages/SignUpRequestPage/SignUpRequestPage'\nimport { isMobile } from 'utils/deviceUtils'\nimport InfluencersPage from 'pages/InfluencersPage/InfluencersPage'\nimport ForgotInfluencerPassword from 'pages/ForgotInfluencerPassword/ForgotInfluencerPassword'\nimport ForgotMerchantPassword from 'pages/ForgotMerchantPassword/ForgotMerchantPassword'\nimport InfluencerLoginPage from 'pages/InfluencerLoginPage/InfluencerLoginPage'\nimport AdminLoginPage from 'pages/AdminLoginPage/AdminLoginPage'\nimport ShortsPage from 'pages/ShortsPage/ShortsPage'\nimport RegisterStorePage from 'pages/RegisterStorePage/RegisterStorePage'\nimport LoginStorePage from 'pages/LoginStorePage/LoginStorePage'\nimport SettingsPage from 'pages/SettingsPage/SettingsPage'\nimport HomePage from 'pages/HomePage/HomePage'\nimport MagicStorePage from 'pages/MagicStorePage/MagicStorePage'\nimport ShopboardPage from 'pages/ShopboardPage/ShopboardPage'\nimport ShopboardAuthPage from 'pages/ShopboardAuthPage/ShopboardAuthPage'\nimport MultilinksPage from 'pages/MultilinksPage/MultilinksPage'\n\nfunction App() {\n\n\tconst [isUserLoaded, setIsUserLoaded] = useState(false)\n\tconst [isRecovery, setIsRecovery] = useState(false)\n\tconst [isReady, setIsReady] = useState(false)\n\tconst [isError, setIsError] = useState(false)\n\n\tuseEffect(() => {\n\n\t\tsetTimeout(() => { setIsRecovery(true) }, APPLICATION_RECOVERY_TIMEOUT_MILISECONDS)\n\n\t\t// This is used to hide all scroll bars in mobile devices\n\t\tif (isMobile) {\n\t\t\tconst elHead = document.getElementsByTagName('head')[0]\n\t\t\tconst elStyle = document.createElement('style')\n\n\t\t\telHead.appendChild(elStyle)\n\t\t\telStyle.innerHTML = '*::-webkit-scrollbar { display: none; } body { -ms-overflow-style: none; scrollbar-width: none; }'\n\t\t}\n\n\t\t// catch general error and refresh the page\n\t\t// window.addEventListener(\"error\", (event) => {\n\t\t// window.location.replace(LINKS_PAGE_URL);\n\t\t// })\n\n\t}, [])\n\n\tuseEffect(() => {\n\t\t// In case arrived here from shopify subscription\n\t\tif (window?.opener && isUserLoaded) {\n\t\t\twindow?.opener.postMessage(NOTIFY_STORE_SUBSCRIPTION_FINISHED_MESSAGE, '*')\n\t\t}\n\t}, [isUserLoaded])\n\n\tuseEffect(() => {\n\t\tif (isRecovery && !isUserLoaded) {\n\t\t\tsetIsError(true)\n\t\t}\n\t}, [isRecovery])\n\n\treturn (\n\t\t<>\n\t\t\t{\n\t\t\t\tisError ? <NotFound /> :\n\t\t\t\t\t<BrowserRouter>\n\t\t\t\t\t\t<Switch>\n\t\t\t\t\t\t\t<HistoryProvider>\n\t\t\t\t\t\t\t\t<UserProvider onUserLoaded={setIsUserLoaded} onReady={setIsReady}>\n\t\t\t\t\t\t\t\t\t{(!isUserLoaded || !isReady) && <Splash />}\n\t\t\t\t\t\t\t\t\t{isUserLoaded &&\n\t\t\t\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t\t\t\t<RouteWrapper\n\t\t\t\t\t\t\t\t\t\t\t\tpath={HOME_PAGE_URL}\n\t\t\t\t\t\t\t\t\t\t\t\texact\n\t\t\t\t\t\t\t\t\t\t\t\tcomponent={HomePage}\n\t\t\t\t\t\t\t\t\t\t\t\tlayout={DashboardLayout}\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t<RouteWrapper\n\t\t\t\t\t\t\t\t\t\t\t\tpath={SHOPBOARD_AUTH_PAGE_URL}\n\t\t\t\t\t\t\t\t\t\t\t\texact\n\t\t\t\t\t\t\t\t\t\t\t\tcomponent={ShopboardAuthPage}\n\t\t\t\t\t\t\t\t\t\t\t\tlayout={GeneralLayout}\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t<RouteWrapper\n\t\t\t\t\t\t\t\t\t\t\t\tpath={SHOPBOARD_PAGE_URL}\n\t\t\t\t\t\t\t\t\t\t\t\texact\n\t\t\t\t\t\t\t\t\t\t\t\tcomponent={ShopboardPage}\n\t\t\t\t\t\t\t\t\t\t\t\tlayout={DashboardLayout}\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t<RouteWrapper\n\t\t\t\t\t\t\t\t\t\t\t\tpath={MAGIC_STORE_PAGE_URL}\n\t\t\t\t\t\t\t\t\t\t\t\texact\n\t\t\t\t\t\t\t\t\t\t\t\tcomponent={MagicStorePage}\n\t\t\t\t\t\t\t\t\t\t\t\tlayout={DashboardLayout}\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t<RouteWrapper\n\t\t\t\t\t\t\t\t\t\t\t\tpath={GOTO_HOMEPAGE_URLS}\n\t\t\t\t\t\t\t\t\t\t\t\texact\n\t\t\t\t\t\t\t\t\t\t\t\tredirect={HOME_PAGE_URL}\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t<RouteWrapper\n\t\t\t\t\t\t\t\t\t\t\t\tpath={INFLUENCERS_PAGE_URL}\n\t\t\t\t\t\t\t\t\t\t\t\texact\n\t\t\t\t\t\t\t\t\t\t\t\tcomponent={InfluencersPage}\n\t\t\t\t\t\t\t\t\t\t\t\tlayout={DashboardLayout}\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t<RouteWrapper\n\t\t\t\t\t\t\t\t\t\t\t\tpath={SHORTS_PAGE_URL}\n\t\t\t\t\t\t\t\t\t\t\t\texact\n\t\t\t\t\t\t\t\t\t\t\t\tcomponent={ShortsPage}\n\t\t\t\t\t\t\t\t\t\t\t\tlayout={DashboardLayout}\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t<RouteWrapper\n\t\t\t\t\t\t\t\t\t\t\t\tpath={LINKS_PAGE_URL}\n\t\t\t\t\t\t\t\t\t\t\t\texact\n\t\t\t\t\t\t\t\t\t\t\t\tcomponent={LinksPage}\n\t\t\t\t\t\t\t\t\t\t\t\tlayout={DashboardLayout}\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t<RouteWrapper\n\t\t\t\t\t\t\t\t\t\t\t\tpath={MULTILINKS_PAGE_URL}\n\t\t\t\t\t\t\t\t\t\t\t\texact\n\t\t\t\t\t\t\t\t\t\t\t\tcomponent={MultilinksPage}\n\t\t\t\t\t\t\t\t\t\t\t\tlayout={DashboardLayout}\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t<RouteWrapper\n\t\t\t\t\t\t\t\t\t\t\t\tpath={TRENDS_PAGE_URL}\n\t\t\t\t\t\t\t\t\t\t\t\texact\n\t\t\t\t\t\t\t\t\t\t\t\tcomponent={TrendsPage}\n\t\t\t\t\t\t\t\t\t\t\t\tlayout={DashboardLayout}\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t<RouteWrapper\n\t\t\t\t\t\t\t\t\t\t\t\tpath={ANALYTICS_PAGE_URL}\n\t\t\t\t\t\t\t\t\t\t\t\texact\n\t\t\t\t\t\t\t\t\t\t\t\tcomponent={AnalyticsPage}\n\t\t\t\t\t\t\t\t\t\t\t\tlayout={DashboardLayout}\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t<RouteWrapper\n\t\t\t\t\t\t\t\t\t\t\t\tpath={ACCOUNT_PAGE_URL}\n\t\t\t\t\t\t\t\t\t\t\t\texact\n\t\t\t\t\t\t\t\t\t\t\t\tcomponent={AccountPage}\n\t\t\t\t\t\t\t\t\t\t\t\tlayout={DashboardLayout}\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t<RouteWrapper\n\t\t\t\t\t\t\t\t\t\t\t\tpath={APPEARANCE_PAGE_URL}\n\t\t\t\t\t\t\t\t\t\t\t\texact\n\t\t\t\t\t\t\t\t\t\t\t\tcomponent={AppearancePage}\n\t\t\t\t\t\t\t\t\t\t\t\tlayout={DashboardLayout}\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t<RouteWrapper\n\t\t\t\t\t\t\t\t\t\t\t\tpath={PRICING_PLANS_PAGE_URL}\n\t\t\t\t\t\t\t\t\t\t\t\texact\n\t\t\t\t\t\t\t\t\t\t\t\tcomponent={PricingPlansPage}\n\t\t\t\t\t\t\t\t\t\t\t\tlayout={DashboardLayout}\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t<RouteWrapper\n\t\t\t\t\t\t\t\t\t\t\t\tpath={SHOPIFY_HELP_PAGE_URL}\n\t\t\t\t\t\t\t\t\t\t\t\texact\n\t\t\t\t\t\t\t\t\t\t\t\tcomponent={ShopifyHelpPage}\n\t\t\t\t\t\t\t\t\t\t\t\tlayout={GeneralLayout}\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t<RouteWrapper\n\t\t\t\t\t\t\t\t\t\t\t\tpath={LOGIN_INFLUENCER_PAGE_URL}\n\t\t\t\t\t\t\t\t\t\t\t\texact\n\t\t\t\t\t\t\t\t\t\t\t\tcomponent={InfluencerLoginPage}\n\t\t\t\t\t\t\t\t\t\t\t\tlayout={BaseLayout}\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t<RouteWrapper\n\t\t\t\t\t\t\t\t\t\t\t\tpath={LOGIN_STORE_PAGE_URL}\n\t\t\t\t\t\t\t\t\t\t\t\texact\n\t\t\t\t\t\t\t\t\t\t\t\tcomponent={LoginStorePage}\n\t\t\t\t\t\t\t\t\t\t\t\tlayout={BaseLayout}\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t<RouteWrapper\n\t\t\t\t\t\t\t\t\t\t\t\tpath={LOGIN_PAGE_URL}\n\t\t\t\t\t\t\t\t\t\t\t\texact\n\t\t\t\t\t\t\t\t\t\t\t\tcomponent={AdminLoginPage}\n\t\t\t\t\t\t\t\t\t\t\t\tlayout={BaseLayout}\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t<RouteWrapper\n\t\t\t\t\t\t\t\t\t\t\t\tpath={SETTINGS_PAGE_URL}\n\t\t\t\t\t\t\t\t\t\t\t\texact\n\t\t\t\t\t\t\t\t\t\t\t\tcomponent={SettingsPage}\n\t\t\t\t\t\t\t\t\t\t\t\tlayout={DashboardLayout}\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t<RouteWrapper\n\t\t\t\t\t\t\t\t\t\t\t\tpath={SIGN_UP_PAGE_URL}\n\t\t\t\t\t\t\t\t\t\t\t\texact\n\t\t\t\t\t\t\t\t\t\t\t\tcomponent={SignUpPage}\n\t\t\t\t\t\t\t\t\t\t\t\tlayout={BaseLayout}\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t<RouteWrapper\n\t\t\t\t\t\t\t\t\t\t\t\tpath={REGISTER_STORE_PAGE_URL}\n\t\t\t\t\t\t\t\t\t\t\t\texact\n\t\t\t\t\t\t\t\t\t\t\t\tcomponent={RegisterStorePage}\n\t\t\t\t\t\t\t\t\t\t\t\tlayout={BaseLayout}\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t<RouteWrapper\n\t\t\t\t\t\t\t\t\t\t\t\tpath={SIGN_UP_REQUEST_PAGE_URL}\n\t\t\t\t\t\t\t\t\t\t\t\texact\n\t\t\t\t\t\t\t\t\t\t\t\tcomponent={SignUpRequestPage}\n\t\t\t\t\t\t\t\t\t\t\t\tlayout={BaseLayout}\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t<RouteWrapper\n\t\t\t\t\t\t\t\t\t\t\t\tpath={FORGOT_PASSWORD_PAGE_URL}\n\t\t\t\t\t\t\t\t\t\t\t\texact\n\t\t\t\t\t\t\t\t\t\t\t\tcomponent={ForgotMerchantPassword}\n\t\t\t\t\t\t\t\t\t\t\t\tlayout={BaseLayout}\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t<RouteWrapper\n\t\t\t\t\t\t\t\t\t\t\t\tpath={INFLUENCER_FORGOT_PASSWORD_PAGE_URL}\n\t\t\t\t\t\t\t\t\t\t\t\texact\n\t\t\t\t\t\t\t\t\t\t\t\tcomponent={ForgotInfluencerPassword}\n\t\t\t\t\t\t\t\t\t\t\t\tlayout={BaseLayout}\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t<RouteWrapper\n\t\t\t\t\t\t\t\t\t\t\t\tpath={CREATE_NEW_PASSWORD_PAGE_URL}\n\t\t\t\t\t\t\t\t\t\t\t\texact\n\t\t\t\t\t\t\t\t\t\t\t\tcomponent={CreateNewPasswordPage}\n\t\t\t\t\t\t\t\t\t\t\t\tlayout={BaseLayout}\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t<RouteWrapper\n\t\t\t\t\t\t\t\t\t\t\t\tpath={EXTERNAL_AUTH_PAGE_URL}\n\t\t\t\t\t\t\t\t\t\t\t\texact\n\t\t\t\t\t\t\t\t\t\t\t\tcomponent={ExternalAuthPage}\n\t\t\t\t\t\t\t\t\t\t\t\tlayout={AuthLayout}\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t<RouteWrapper\n\t\t\t\t\t\t\t\t\t\t\t\tpath={PRIVACY_POLICY_PAGE_URL}\n\t\t\t\t\t\t\t\t\t\t\t\texact\n\t\t\t\t\t\t\t\t\t\t\t\tcomponent={PrivacyPolicyPage}\n\t\t\t\t\t\t\t\t\t\t\t\tlayout={GeneralLayout}\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t<RouteWrapper\n\t\t\t\t\t\t\t\t\t\t\t\tpath={TERMS_PAGE_URL}\n\t\t\t\t\t\t\t\t\t\t\t\texact\n\t\t\t\t\t\t\t\t\t\t\t\tcomponent={TermsAndConditionsPage}\n\t\t\t\t\t\t\t\t\t\t\t\tlayout={GeneralLayout}\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t<RouteWrapper\n\t\t\t\t\t\t\t\t\t\t\t\tpath={ACCOUNT_VERIFICATION_PAGE_URL}\n\t\t\t\t\t\t\t\t\t\t\t\texact\n\t\t\t\t\t\t\t\t\t\t\t\tcomponent={AccountVerificationPage}\n\t\t\t\t\t\t\t\t\t\t\t\tlayout={BaseLayout}\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t<RouteWrapper\n\t\t\t\t\t\t\t\t\t\t\t\tpath={ADMIN_PAGES_URL_PREFIX}\n\t\t\t\t\t\t\t\t\t\t\t\texact\n\t\t\t\t\t\t\t\t\t\t\t\tredirect={HOME_PAGE_URL}\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t</UserProvider>\n\t\t\t\t\t\t\t</HistoryProvider>\n\t\t\t\t\t\t</Switch>\n\t\t\t\t\t</BrowserRouter>\n\t\t\t}\n\t\t</>\n\t)\n}\n\nexport default App;\n","import i18n from \"i18next\"\nimport { initReactI18next } from \"react-i18next\"\nimport LanguageDetector from \"i18next-browser-languagedetector\"\n// import en from \"languages/en.json\"\n// import he from \"languages/he.json\"\nimport en from './languages/en.json'\nimport he from './languages/he.json'\n\n// the translations\n// (tip move them in a JSON file and import them)\nconst resources = {\n he: {\n translation: he\n },\n en: {\n translation: en\n }\n};\n\ni18n\n // use the plugin 'i18next-browser-languagedetector' to detect the language automatically\n .use(LanguageDetector)\n // passes i18n instance to react-i18next to make it available for all the components\n .use(initReactI18next)\n .init({\n resources,\n // this command overrides the auto detection language e set it\n lng: \"en\",\n // if the detection language finds a language not listed, then use the language indicated\n fallbackLng: \"he\",\n interpolation: {\n escapeValue: false // react already safes from xss\n }\n });\n\nexport default i18n;\n","import React from 'react';\nimport ReactDOM from 'react-dom/client';\nimport './index.css';\nimport App from './App';\nimport './i18n'\n\nconst root = ReactDOM.createRoot(document.getElementById('root'));\nroot.render(\n // <React.StrictMode>\n <App />\n // </React.StrictMode>\n)\n"],"sourceRoot":""}