{"version":3,"sources":["app/components/Form/FormItem/FormItem.base.tsx","app/components/Form/FormItem/FormItem.ts","app/components/Form/FormItem/FormItem.styles.ts","app/components/Form/FormSection/FormSection.styles.ts","app/components/Form/FormSection/FormSection.base.tsx","app/components/Form/FormSection/FormSection.ts","app/components/Form/FormTitle/FormTitle.base.tsx","app/components/Form/FormTitle/FormTitle.styles.ts","app/components/Form/FormTitle/FormTitle.ts","app/App.messages.ts","app/utils/CSVHelper.ts","app/utils/NumberUtils.ts","app/utils/notificationUtils.ts","app/@data/store/schema/userrolemodels/Model.ts","app/@data/store/schema/userrolemodels/Account.ts","app/@data/store/schema/userrolemodels/AdBlock.ts","app/@data/store/schema/userrolemodels/AdUnit.ts","app/@data/store/schema/userrolemodels/Channel.ts","app/@data/store/schema/userrolemodels/DropdownMenu.ts","app/@data/store/schema/userrolemodels/Filter.ts","app/@data/store/schema/userrolemodels/NavigationMenu.ts","app/@data/store/schema/userrolemodels/Property.ts","app/@data/store/schema/userrolemodels/Publisher.ts","app/@data/store/schema/userrolemodels/PublisherProfileTabs.ts","app/@data/store/schema/userrolemodels/PublisherSettings.ts","app/@data/store/schema/userrolemodels/User.ts","app/@data/store/schema/userrolemodels/UserSettings.ts","app/@data/services/UserRoleService.ts","app/constants/AppConstants.ts","app/layout/GridPageV2/index.ts","app/pages/report/@data/store/schema/ColumnsEnum.ts","app/pages/ad-management/AdQuality/@data/store/store.ts","app/Routes.ts","app/pages/report/DashboardCards/ReportCard/ReportCard.types.ts","app/pages/partner-management/User/@data/actions/onAcceptInvitePageChanged.ts","app/pages/partner-management/User/@data/actions/onDevTokenChanged.ts","app/pages/partner-management/User/@data/actions/onUserChanged.ts","app/pages/partner-management/User/@data/actions/onUserFormsChanged.ts","app/pages/partner-management/User/@data/actions/sendWelcomeToPubcenterEmail.ts","app/pages/ad-management/Adunit/@data/actions/fetchAdUnitsDataAction.ts","app/pages/ad-management/Adunit/@data/actions/onAdunitChanged.ts","app/pages/ad-management/Adunit/@data/actions/onAdunitFormsChanged.ts","app/pages/ad-management/Adunit/@data/actions/onCodePanelActions.ts","app/hooks/useCanvasTextWidth.ts","app/hooks/useDebounce.ts","app/hooks/useIntersectionObserverWithRefCallback.ts","app/hooks/useNativeAdSdk.ts","app/hooks/usePUID.ts","app/hooks/usePreloadSVGImages.ts","app/hooks/useSortableGridColumns.ts","app/hooks/useStateWithLatestCallback/index.ts","app/hooks/useWindowSize/index.tsx","app/pages/ad-management/AdQuality/@data/store/schema/IAdCreativeViewModel.ts","app/@data/store/store.ts","app/utils/GlobalStyleUtils.ts","app/@data/actions/onAccountActions.ts","app/@data/actions/onAuthenticationAction.ts","app/@data/actions/onEntityGridColumnsActions.ts","app/@data/actions/onHelpInfoActions.ts","app/@data/actions/onLayoutChanged.ts","app/@data/actions/onMenuCollapsedChanged.ts","app/@data/actions/onNavigationActions.ts","app/@data/actions/onNotificationActions.ts","app/@data/actions/onNotificationPanelActions.ts","app/@data/actions/onPublisherActions.ts","app/@data/actions/onUserActions.ts","app/NotificationsPanel.Types.messages.ts","app/pages/ad-management/Profile/@data/actions/actions.ts","app/pages/ad-management/Profile/@data/actions/appealActions.ts","app/layout/GridPageV2/@data/store/store.ts","app/pages/ad-management/Account/Settings/@data/store/store.ts","app/@data/store/schema/models/Model.ts","theme.ts","app/pages/partner-management/User/UserPage.messages.ts","app/@data/store/schema/validations/zipcodes.ts","app/@data/store/schema/validations/addressValidationModel.ts","app/@data/store/schema/viewmodels/IdNamePairErrorModel.ts","app/pages/ad-management/AdQuality/@data/services/utility/utility.ts","app/pages/ad-management/Property/Manage/__data__/store/store.ts","app/components/GridFilter/GridFilter.types.ts","app/@data/store/schema/enums/FilterCondition.ts","app/utils/routeUtils.ts","app/constants/DomainConstants.ts","app/pages/ad-management/Adunit/@data/store/store.ts","app/@data/utils/checkUserType.ts","app/layout/GridPageV2/@data/mutatorActions/onGridChanged.ts","app/layout/GridPageV2/@data/mutatorActions/onGridColumnsModified.ts","app/layout/GridPageV2/@data/selectors/gridSelectors.ts","app/constants/DataTestIdConstants.ts","app/pages/ad-management/@data/actions/index.ts","app/pages/report/Report.messages.ts","app/@data/mutatorActions/localeMutatorAction.ts","app/@data/mutatorActions/onFirstPartyBoost.ts","app/@data/mutatorActions/onPanelTypeChanged.ts","app/@data/mutatorActions/onPopupOpenChanged.ts","app/@data/mutatorActions/toastNotificationMutatorActions.ts","app/config/ui.config.ts","app/layout/GridPageV2/GridV2.types.ts","app/utils/AccessibilityUtils.ts","app/pages/report/ReportMetadata.messages.ts","app/pages/report/utils/intlHelper.ts","app/hooks/useWindowSize/store/store.ts","app/pages/ad-management/Adunit/@data/store/partnerCodeChecker.ts","app/@data/utils/requestUtils.ts","app/pages/partner-management/User/@data/store/store.ts","app/pages/ad-management/Property/Manage/__data__/mutatorActions/setSites.ts","app/pages/ad-management/UserManagement/UserManagement.messages.ts","app/pages/ad-management/@data/store/store.ts","app/@data/utils/handleApiErrors.ts","logging/src/Log.ts","app/components/AzureMaps/BubbleMap.tsx","app/components/HighCharts/HighChartsLibrary.ts","app/components/HighCharts/CustomChart/CustomChart.tsx","app/utils/AuthenticationUtils.ts","app/pages/report/components/common/ZeroTotalChart/ZeroTotalChart.tsx","app/pages/report/constants/metricsColors.ts","app/pages/report/DashboardCards/ReportCard/ReportCard.helpers.tsx","app/pages/ad-management/Adunit/@data/mutatorActions/adSenseMediationChanged.ts","app/pages/ad-management/Adunit/@data/mutatorActions/privateMarketplaceChanged.ts","app/pages/ad-management/Adunit/@data/mutatorActions/setAdUnits.ts","i18n/useI18n.ts","app/components/InfoToggle/InfoToggle.base.tsx","app/components/InfoToggle/InfoToggle.styles.ts","app/components/InfoToggle/InfoToggle.ts","app/components/DataGrid/DataGrid.messages.ts","app/components/DataGrid/DataGrid.base.tsx","app/utils/DataGridUtils/CommandBarUtils.ts","app/components/DataGrid/DataGrid.styles.ts","app/components/DataGrid/DataGrid.ts","app/pages/ad-management/Property/Property.messages.ts","app/@data/store/schema/models/PublisherAccountUserCreate.ts","app/@data/services/ApiService.ts","app/pages/report/utils/metricsFormatter.ts","app/utils/ReactUtils.ts","app/@data/store/schema/enums/AdSenseOAuthStatus.ts","app/components/Form/FormLabel/FormLabel.base.tsx","app/components/Form/FormLabel/FormLabel.styles.ts","app/components/Form/FormLabel/FormLabel.ts","app/@data/store/schema/enums/PopupType.ts","app/pages/login/@data/store/LoginPageStore.ts","app/pages/ad-management/Profile/@data/store/store.ts","app/layout/GridPageV2/GridV2.messages.ts","app/pages/report/components/CustomCalender/CustomCalender.types.ts","app/pages/ad-management/Profile/ProfilePage.messages.ts","app/layout/DetailPage/DetailPage.messages.ts","app/layout/DetailPage/DetailPage.styles.ts","app/layout/DetailPage/DetailPage.tsx","app/config/pubCenterAAD.config.ts","app/pages/ad-management/Home/@data/store/schema/IHomeViewState.ts","app/@data/store/schema/models/ServingConfigs.ts","app/config/locale.ts","app/pages/ad-management/Home/@data/store/store.ts","app/components/ZeroResults/ZeroResults.styles.ts","app/components/ZeroResults/ZeroResults.tsx","app/@data/store/selectors/userContextSelectors.ts","app/pages/report/@data/store/store.ts","app/@data/services/MediationReportingService.ts","app/pages/report/hooks/useReportQuery.ts","app/pages/report/DashboardCards/@data/utils/mapAdUnitName.ts","app/pages/ad-management/Account/@data/actions/mutatorActions.ts","app/globalization/countries.ts","app/globalization/currencies.ts","app/globalization/languages.ts","app/globalization/locales.ts","app/globalization/timezone.ts","app/globalization/weekDays.ts","app/pages/partner-management/@data/service/PartnerManagementService.ts","app/pages/report/@data/actions/onCurrentRouteChanged.ts","app/pages/report/@data/actions/onReportLinkClicked.ts","app/pages/report/@data/actions/onSetPublisherReporting.ts","app/utils/validation/ArrayObservableSchemaYupType.ts","app/utils/validation/StringListSchemaYupType.ts","app/utils/validation/StringListTransformerYupType.ts","app/utils/validation/YupUtils.ts","app/pages/ad-management/Account/Payments/EstimatedEarnings/EstimatedEarnings.types.ts","app/pages/partner-management/User/@data/index.ts","app/layout/GridPageV2/@data/actions/commandBarActions.ts","app/@data/store/schema/models/AdSenseMediation.ts","app/pages/ad-management/Profile/@data/store/selectors.ts","app/pages/report/@data/store/UrlQueryStore.tsx","app/pages/login/@data/actions/loginActions.ts","app/pages/login/@data/actions/loginFormActions.ts","app/pages/login/@data/actions/onUserAuthentication.ts","app/pages/report/@data/store/schema/ReportsQueryStoreKeys.ts","app/@data/store/schema/models/AdSenseAdUnitStatus.ts","app/pages/report/components/CustomCalender/utils/CalenderUtils.ts","app/pages/ad-management/Account/Settings/components/GoogleConnector/@data/actions/actions.ts","app/layout/GridPageLayout/GridPageLayout.styles.ts","app/layout/GridPageLayout/GridPageLayout.tsx","app/pages/ad-management/Account/@data/store/selectors.ts","app/pages/ad-management/Account/Settings/SettingsPage.messages.ts","app/@data/services/MetadataService.ts","app/utils/UrlUtils.ts","logging/src/Environment.ts","app/pages/ad-management/AdQuality/@data/services/utility/constants.ts","app/pages/ad-management/Home/components/ResourcesSection/ResourcesSection.messages.ts","app/components/TnCModal/TnCModal.messages.ts","app/pages/ad-management/Account/Settings/components/GoogleConnector/@data/mutatorActions/onGoogleSettingsChanged.ts","app/layout/GlobalSearchHeader/GlobalSearchHeader.messages.ts","app/components/Card/Card.styles.ts","app/components/Card/Card.tsx","app/components/Main/Main.tsx","app/pages/ad-management/Account/Settings/@data/mutatorActions/systemPreferencesChanged.ts","app/pages/ad-management/Home/@data/actions/onDialogActions.ts","app/@data/store/schema/enums/PublisherType.ts","app/pages/partner-management/Account/@data/services/AccountService.ts","app/pages/ad-management/Account/Settings/components/GoogleConnector/GoogleConnector.messages.ts","app/@data/utils/supportedLanguages.ts","app/pages/ad-management/Account/Payments/Onboarding/usePaymentsOnboarding.tsx","app/components/DateTimePicker/DateTimePicker.messages.ts","app/PubCenterAuthContext.ts","app/utils/cookiesUtils.ts","app/@data/services/PubCenterAADAuthService.ts","app/pages/ad-management/Account/Settings/@data/actions/index.ts","app/pages/ad-management/UserManagement/utils/userRoleUtils.ts","app/pages/report/DashboardCards/@data/orchestrators/fetchReportDimensionColumnMembers.ts","app/pages/report/DashboardCards/@data/store/store.ts","app/pages/ad-management/Account/Settings/@data/actions/onNotificationPreferencesChanged.ts","logging/src/LogType.ts","app/pages/ad-management/Profile/@data/index.ts","app/pages/ad-management/Account/@data/actions/actions.ts","app/pages/ad-management/Profile/@data/actions/mutatorActions.ts","app/pages/partner-management/@data/store/store.ts","app/components/IconTooltip/IconTooltip.tsx","app/components/Header/Header.types.ts","app/Toasts.messages.ts","app/layout/PageLayout/header-panels/FeedbackPanel/@data/actions/formChanges.ts","app/layout/PageLayout/header-panels/FeedbackPanel/@data/store/schema/enums/FeedbackType.ts","app/layout/PageLayout/header-panels/FeedbackPanel/@data/store/store.ts","app/layout/PageLayout/header-panels/FeedbackPanel/@data/mutatorActions/feedbackFormChanged.ts","app/layout/PageLayout/header-panels/FeedbackPanel/@data/orchestrators/feedbackFormSubmitted.ts","app/layout/PageLayout/header-panels/FeedbackPanel/@data/store/schema/FeedbackPanelErrorModel.ts","app/layout/PageLayout/header-panels/FeedbackPanel/FeedbackPanel.messages.ts","app/layout/PageLayout/header-panels/FeedbackPanel/FeedbackPanel.styles.ts","app/layout/PageLayout/header-panels/FeedbackPanel/FeedbackPanel.tsx","app/layout/PageLayout/header-panels/HelpPanel/HelpPanel.messages.ts","app/layout/PageLayout/header-panels/HelpPanel/HelpPanel.tsx","app/components/NotificationCard/NotificationCard.base.tsx","app/components/NotificationCard/NotificationCard.styles.ts","app/components/NotificationCard/NotificationCard.ts","app/layout/PageLayout/header-panels/NotificationsPanel/NotificationsPanel.messages.ts","app/layout/PageLayout/header-panels/NotificationsPanel/NotificationsPanel.styles.ts","app/layout/PageLayout/header-panels/NotificationsPanel/NotificationsPanel.tsx","app/layout/PageLayout/header-panels/ProfilePanel/ProfilePanel.styles.ts","app/layout/PageLayout/header-panels/ProfilePanel/ProfilePanel.tsx","app/layout/PageLayout/header-panels/SettingsPanel/SettingsPanel.messages.ts","app/layout/PageLayout/header-panels/SettingsPanel/SettingsPanel.tsx","app/@data/utils/getAccessPermission.ts","app/layout/GridPageV2/GridV2.styles.ts","app/pages/ad-management/Account/constants.ts","app/pages/ad-management/Home/@data/mutatorActions/setHomePageStatus.ts","app/@data/store/schema/models/EntityEvaluationStatus.ts","app/components/ToastNotification/ToastNotification.types.ts","app/pages/partner-management/User/Manage/ManagePage.types.ts","app/components/Popup/index.ts","app/@data/selectors/publisherSelectors.ts","app/utils/ObjectUtils.ts","app/@data/services/PaymentsService.ts","app/pages/ad-management/@data/actions/entityEvaluationMutatorActions.ts","app/pages/ad-management/Account/Settings/@data/mutatorActions/settingsPageChanged.ts","app/pages/ad-management/Profile/@data/services/generateCodeAsync.ts","app/pages/ad-management/Profile/@data/services/updatePublisherProfileDetails.ts","app/pages/ad-management/Profile/@data/services/validateAddressAsync.ts","app/@data/store/schema/models/AddressValidation.ts","app/constants/StyleConstants.ts","app/config/adProviders.ts","app/pages/ad-management/Account/@data/store/paymentsPageStore.ts","app/components/DateTimePicker/DateTimePicker.types.ts","app/components/GridWithCustomColumns/GridCommonStyles.ts","app/components/GridWithCustomColumns/GridCell.tsx","app/pages/ad-management/Account/Payments/Onboarding/paymentsOnboarding.messages.ts","app/pages/report/components/CustomCalender/CustomCalender.messages.ts","app/components/ExternalLink/ExternalLink.tsx","app/components/ConditionalTooltip/ConditionalTooltip.tsx","app/hooks/useWindowsAppFeatureFlag/store/store.ts","app/pages/ad-management/Home/components/ResourcesSection/ResourcesSection.styles.ts","app/pages/ad-management/Home/components/ResourcesSection/components/ResourceCard.styles.ts","app/pages/ad-management/Home/components/ResourcesSection/components/ResourceCard.tsx","app/pages/ad-management/Home/components/ResourcesSection/utils/utils.tsx","app/pages/ad-management/Home/components/ResourcesSection/ResourcesSection.tsx","app/pages/terms-and-conditions/@data/mutators/setNotificationPanelTriggered.ts","app/pages/ad-management/AdBlock/LazyAdBlockPage.tsx","app/pages/ad-management/AdFilter/@data/actions/onFilterChanged.ts","app/pages/ad-management/AdFilter/@data/actions/onFilterFormsChanged.ts","app/pages/ad-management/AdFilter/@data/actions/onManagePageInitialized.ts","app/pages/ad-management/AdFilter/@data/store/store.ts","app/pages/ad-management/AdFilter/@data/mutators/filterChanged.ts","app/pages/ad-management/AdFilter/@data/mutators/filterFormsChanged.ts","app/pages/ad-management/AdFilter/@data/orchestrators/formCancelled.ts","app/layout/DetailPageWithStepper/utils/getMultiStepperRoute.ts","app/pages/ad-management/AdFilter/@data/orchestrators/formDownloadClicked.ts","app/pages/ad-management/@data/services/AdManagementService.ts","app/pages/ad-management/AdFilter/@data/orchestrators/formInitialized.ts","app/pages/ad-management/AdFilter/@data/services/FilterService.ts","app/pages/ad-management/AdFilter/@data/orchestrators/formSubmitted.ts","app/pages/ad-management/AdFilter/@data/store/schema/FilterErrorModel.ts","app/pages/ad-management/AdFilter/@data/orchestrators/managePageInitialized.ts","app/components/bulkUpload/bulkUpload.base.tsx","app/components/bulkUpload/bulkUpload.styles.ts","app/components/bulkUpload/bulkUpload.ts","app/components/DateTimePicker/DateTimePicker.tsx","app/components/DateTimePicker/DateTimePicker.styles.ts","app/pages/ad-management/Channel/@data/store/store.ts","app/pages/ad-management/Channel/@data/actions/onChannelChanged.ts","app/pages/ad-management/Channel/@data/actions/onChannelFormsChanged.ts","app/pages/ad-management/Channel/@data/actions/onManagePageInitialized.ts","app/pages/ad-management/Channel/Create/CreateChannel.messages.ts","app/pages/ad-management/Channel/Create/CreateChannel.tsx","app/pages/ad-management/AdFilter/Create/CreateAdFilter.messages.ts","app/pages/ad-management/AdFilter/Create/CreateAdFilter.styles.ts","app/pages/ad-management/AdFilter/Create/CreateAdFilter.types.ts","app/pages/ad-management/AdFilter/Create/CreateAdFilter.tsx","app/pages/ad-management/AdFilter/Manage/ManagePage.messages.ts","app/pages/ad-management/AdFilter/Manage/utils/getFilterItems.tsx","app/pages/ad-management/AdFilter/Manage/utils/getCommandBarItems.tsx","app/pages/ad-management/AdFilter/Manage/ManagePage.tsx","app/pages/ad-management/AdFilter/Manage/utils/getGridColumns.tsx","app/pages/ad-management/AdFilter/AdFilterPage.tsx","app/pages/ad-management/AdQuality/@data/actions/onAdCreativeChanged.ts","app/pages/ad-management/AdQuality/@data/actions/onTeachingBubbleActions.ts","app/pages/ad-management/AdQuality/@data/mutators/AdCreativeChanged.ts","app/pages/ad-management/AdQuality/AdReview/AdCreativePage.messages.ts","app/config/blockReasons.ts","app/pages/ad-management/AdQuality/@data/actions/onAdCreativePageInitialized.ts","app/pages/ad-management/AdQuality/@data/actions/onBlockAdsFormChanged.ts","app/pages/ad-management/AdQuality/@data/actions/onBlockSummaryChanged.ts","app/pages/ad-management/AdQuality/@data/actions/onBlockedContextChanged.ts","app/pages/ad-management/AdQuality/@data/actions/onFilterPanelActions.ts","app/pages/ad-management/AdQuality/@data/mutators/BlockAdsFormChanged.ts","app/pages/ad-management/AdQuality/@data/mutators/BlockSummaryChanged.ts","app/pages/ad-management/AdQuality/@data/mutators/BlockedContextChanged.ts","app/pages/ad-management/AdQuality/@data/mutators/filterPanelChanged.ts","app/pages/ad-management/AdQuality/@data/services/AdCreativeService.ts","app/pages/ad-management/AdQuality/@data/services/AdBlockService.ts","app/pages/ad-management/AdQuality/@data/store/schema/models/AdPerformanceData.ts","app/pages/ad-management/AdQuality/@data/store/schema/models/BlockAdsData.ts","app/pages/ad-management/AdQuality/@data/store/schema/models/BlockImagesData.ts","app/pages/ad-management/AdQuality/@data/store/schema/models/BlockImageSummaryData.ts","app/pages/ad-management/AdQuality/@data/store/schema/models/BlockItemType.ts","app/pages/ad-management/AdQuality/@data/store/schema/models/SAMBlockAdData.ts","app/pages/ad-management/AdQuality/@data/store/schema/models/SAMBlockSummaryData.ts","app/pages/ad-management/AdQuality/@data/store/schema/BlockItemErrorModel.ts","app/pages/ad-management/AdQuality/@data/orchestrators/adCreativeDateChanged.ts","app/pages/ad-management/AdQuality/@data/orchestrators/MSANBlockAdsSubmitted.ts","app/pages/ad-management/AdQuality/@data/orchestrators/SAMBlockAdsItemStatusChanged.ts","app/pages/ad-management/AdQuality/@data/orchestrators/SAMBlockAdsSubmitted.ts","app/pages/ad-management/AdQuality/@data/store/schema/SAMBlockItemErrorModel.ts","app/pages/ad-management/AdQuality/@data/orchestrators/SAMBlockSummaryViewImagesClicked.ts","app/pages/ad-management/AdQuality/@data/orchestrators/adCreativeExportClicked.ts","app/pages/ad-management/AdQuality/@data/mutatorActions/AdQualityFilterChanged.ts","app/pages/ad-management/AdQuality/@data/mutatorActions/onAdCreativeChanged.ts","app/pages/ad-management/AdQuality/@data/store/adQualityConverter.ts","app/pages/ad-management/AdQuality/@data/orchestrators/adCreativePageInitialized.ts","app/pages/ad-management/AdQuality/@data/orchestrators/adCreativeRefreshDataChanged.ts","app/pages/ad-management/AdQuality/@data/store/schema/AdCreativeViewErrorModel.ts","app/pages/ad-management/AdQuality/@data/orchestrators/adProviderChanged.ts","app/pages/ad-management/AdQuality/@data/orchestrators/adQualityPanelApplyButtonClicked.ts","app/pages/ad-management/AdQuality/@data/orchestrators/adSourceChanged.ts","app/pages/ad-management/AdQuality/@data/orchestrators/blockAdInitialized.ts","app/pages/ad-management/AdQuality/@data/orchestrators/blockAdsChannelListandRevenue.ts","app/pages/ad-management/AdQuality/@data/orchestrators/blockAdsItemStatusChanged.ts","app/pages/ad-management/AdQuality/@data/orchestrators/blockAdsSubmitted.ts","app/pages/ad-management/AdQuality/@data/orchestrators/blockImagesSubmitted.ts","app/pages/ad-management/AdQuality/@data/orchestrators/blockedAdsExportClicked.ts","app/pages/ad-management/AdQuality/@data/orchestrators/blockedContextChanged.ts","app/pages/ad-management/AdQuality/@data/orchestrators/blockedImagesExportClicked.ts","app/pages/ad-management/AdQuality/@data/orchestrators/refreshBlockSummary.ts","app/pages/ad-management/AdQuality/@data/store/adQualitySelectors.ts","app/components/Filters/ListFilter/ListFilter.messages.ts","app/components/Filters/ListFilter/ListFilter.styles.ts","app/components/Filters/ListFilter/ListFilter.tsx","app/pages/ad-management/AdQuality/AdQualityFilters/@data/mutatorActions/onAdQualityFiltersChanged.ts","app/components/Filters/TextFilter/TextFilter.messages.ts","app/components/Filters/TextFilter/TextFilter.tsx","app/pages/ad-management/AdQuality/AdQualityFilters/MultiTextFilters/MultiTextFilters.messages.ts","app/pages/ad-management/AdQuality/AdQualityFilters/MultiTextFilters/MultiTextFilters.styles.ts","app/pages/ad-management/AdQuality/AdQualityFilters/MultiTextFilters/MultiTextFilters.tsx","app/pages/ad-management/AdQuality/AdQualityFilters/AdQualityFilters.tsx","app/pages/ad-management/AdQuality/AdQualityFilters/AdQualityFilters.styles.ts","app/pages/ad-management/AdQuality/AdReview/AdCreativePage.styles.ts","app/pages/ad-management/AdQuality/AdReview/AdCreativePage.tsx","app/pages/ad-management/AdQuality/AdQualityPage.tsx","app/hooks/useEntityTypeManage.ts","app/components/EntityTypeSwitch/messages.ts","app/components/EntityTypeSwitch/index.tsx","app/pages/ad-management/Adunit/Manage/ManagePage.messages.ts","app/pages/ad-management/Adunit/Manage/components/AdUnitNameCallout/AdUnitNameCallout.messages.ts","app/pages/ad-management/Adunit/Manage/components/AdUnitNameCallout/AdUnitNameCallout.styles.ts","app/pages/ad-management/Adunit/Manage/components/AdUnitNameCallout/AdUnitNameCallout.tsx","app/pages/ad-management/Adunit/TythonAdunit/components/ScriptPage/@data/actions/onScriptPageActions.ts","app/components/Form/FormState/formUtils.ts","app/pages/ad-management/Adunit/TythonAdunit/components/NoScriptPage/NoScriptPage.messages.ts","app/pages/ad-management/Adunit/TythonAdunit/components/NoScriptPage/NoScriptPage.styles.ts","app/pages/ad-management/Adunit/TythonAdunit/components/NoScriptPage/NoScriptPage.tsx","app/pages/ad-management/Adunit/TythonAdunit/components/ScriptPage/@data/store/store.ts","app/pages/ad-management/Adunit/TythonAdunit/components/ScriptPage/@data/mutators/scriptChanged.ts","app/@data/store/schema/models/AdunitServingScript.ts","app/pages/ad-management/Adunit/TythonAdunit/components/ScriptPage/ScriptPage.messages.ts","app/pages/ad-management/Adunit/TythonAdunit/components/ScriptPage/@data/orchestrators/scriptPageInitialized.ts","app/pages/ad-management/Adunit/TythonAdunit/components/ScriptPage/@data/orchestrators/scriptPageSubmitted.ts","app/pages/ad-management/Adunit/TythonAdunit/components/ScriptPage/ScriptPage.styles.ts","app/pages/ad-management/Adunit/TythonAdunit/components/ScriptPage/ScriptPage.tsx","app/pages/ad-management/Adunit/Manage/components/CodePanel/CodePanel.tsx","app/pages/ad-management/Adunit/TythonAdunit/CreateAdunit/messages.ts","app/pages/ad-management/Adunit/@data/services/AdunitService.ts","app/pages/ad-management/Adunit/Manage/utils/getFilterItems.tsx","app/pages/ad-management/Adunit/Manage/utils/getCommandBarItems.tsx","app/layout/GridPageV2/components/HeaderInfoCallout.tsx","app/pages/ad-management/Adunit/Manage/ManagePage.styles.ts","app/pages/ad-management/Adunit/Manage/utils/getGridColumns.tsx","app/pages/ad-management/Adunit/Manage/ManagePage.tsx","app/pages/ad-management/Ads/Manage/messages.ts","app/pages/ad-management/Ads/Manage/styles.ts","app/pages/ad-management/Ads/Manage/hooks/useAppAdUnitCodePanel.tsx","app/pages/ad-management/Ads/Manage/hooks/useAppAdsGrid.tsx","app/pages/ad-management/Ads/Manage/AppAdsManagePage.tsx","app/pages/ad-management/Ads/Manage/index.tsx","app/pages/ad-management/Adunit/@data/mutators/adunitChanged.ts","app/pages/ad-management/Adunit/@data/mutators/adunitFormsChanged.ts","app/pages/ad-management/Adunit/@data/mutators/panelOpenChanged.ts","app/pages/ad-management/Adunit/@data/orchestrators/fetchAdUnitMediationStatus.ts","app/pages/ad-management/Adunit/@data/orchestrators/fetchAdUnitName.ts","app/pages/ad-management/Adunit/@data/mutatorActions/setAdUnitTemplate.ts","app/pages/ad-management/Adunit/@data/orchestrators/fetchAdUnitTemplate.ts","app/pages/ad-management/Property/@data/orchestrators/loadPropertyServingConfigs.ts","app/pages/ad-management/Property/@data/orchestrators/fetchPropertiesData.ts","app/pages/ad-management/Adunit/@data/orchestrators/fetchAdUnitsData.ts","app/pages/ad-management/Adunit/@data/orchestrators/formCancelled.ts","app/pages/ad-management/Adunit/@data/orchestrators/formInitialized.ts","app/layout/DetailPageWithStepper/DetailPageWithStepper.types.ts","app/pages/ad-management/Adunit/Create/CreateAdunit.messages.ts","app/@data/store/schema/viewmodels/PartnerCodesValidationModel.ts","app/pages/ad-management/Adunit/@data/orchestrators/formSubmitted.ts","app/pages/ad-management/Adunit/@data/store/schema/AdunitErrorModel.ts","app/pages/ad-management/Adunit/@data/orchestrators/managePageInitialized.ts","app/pages/ad-management/Adunit/@data/orchestrators/updateAdUnitMediationStatus.ts","app/pages/ad-management/Adunit/@data/orchestrators/updateAdUnitName.ts","app/layout/PropertyPicker/PropertyPicker.styles.ts","app/layout/PropertyPicker/PropertyPicker.tsx","app/layout/PropertySitePicker/PropertySitePicker.messages.ts","app/layout/PropertySitePicker/PropertySitePicker.styles.ts","app/layout/PropertySitePicker/PropertySitePicker.tsx","app/pages/ad-management/Property/Create/__data__/store/store.ts","app/pages/ad-management/Property/Create/components/PropertyIdField/messages.ts","app/pages/ad-management/Property/Create/components/PropertyIdField/index.tsx","app/pages/ad-management/Property/Create/__data__/mutatorActions/setPropertyForm.ts","app/pages/ad-management/Property/Create/variations/CreateNonTythonProperty/utils/GetPropertyAccessPermissions.ts","app/pages/ad-management/Property/Create/variations/CreateNonTythonProperty/utils/IsFieldDisabled.ts","app/pages/ad-management/Property/Create/components/PropertyNameInputField/messages.ts","app/pages/ad-management/Property/Create/components/PropertyNameInputField/index.tsx","app/pages/ad-management/Property/Create/components/PropertyUrlInputField/messages.ts","app/pages/ad-management/Property/Create/components/PropertyUrlInputField/index.tsx","app/pages/ad-management/Property/Create/variations/CreateNonTythonProperty/messages.ts","app/pages/ad-management/Property/Create/utils/useDetailsPageButtonsStatus.ts","app/pages/ad-management/Property/@data/services/PropertyService.ts","app/pages/ad-management/Property/Create/variations/CreateNonTythonProperty/__data__/orchestrators/formInitialized.ts","app/pages/ad-management/Property/Create/variations/CreateNonTythonProperty/__data__/orchestrators/formSubmitted.ts","app/pages/ad-management/Property/Create/__data__/store/schema/PropertyErrorModel.ts","app/pages/ad-management/Property/Create/variations/CreateNonTythonProperty/__data__/orchestrators/loadAttachedAdunits.ts","app/pages/ad-management/Property/Create/variations/CreateNonTythonProperty/__data__/mutatorActions/setPropertyForm.ts","app/pages/ad-management/Property/Manage/__data__/orchestrators/managePageInitialized.ts","app/pages/ad-management/Property/Manage/components/ClarityPanel/types.ts","app/pages/ad-management/Property/Manage/__data__/orchestrators/updateClarity.ts","app/pages/ad-management/Property/Create/variations/CreateNonTythonProperty/components/ClarityFormSection/components/ClarityInputField/messages.ts","app/pages/ad-management/Property/Create/variations/CreateNonTythonProperty/components/ClarityFormSection/components/ClarityInputField/styles.ts","app/pages/ad-management/Property/Create/variations/CreateNonTythonProperty/components/ClarityFormSection/components/ClarityInputField/index.tsx","app/pages/ad-management/Property/Create/variations/CreateNonTythonProperty/components/ClarityFormSection/components/ConnectedClarityField/index.tsx","app/pages/ad-management/Property/Create/variations/CreateNonTythonProperty/components/ClarityFormSection/messages.ts","app/pages/ad-management/Property/Create/variations/CreateNonTythonProperty/components/ClarityFormSection/index.tsx","app/pages/ad-management/Property/Create/variations/CreateNonTythonProperty/components/PropertyApprovalStateField/messages.ts","app/pages/ad-management/Property/Create/variations/CreateNonTythonProperty/components/PropertyApprovalStateField/utils/GetApprovalStatusOptions.ts","app/pages/ad-management/Property/Create/variations/CreateNonTythonProperty/components/PropertyApprovalStateField/index.tsx","app/pages/ad-management/Property/Create/variations/CreateNonTythonProperty/components/PropertyApprovalStatusInputField/messages.ts","app/pages/ad-management/Property/Create/variations/CreateNonTythonProperty/components/PropertyApprovalStatusInputField/index.tsx","app/components/HierarchicalMultiSelectPicker/HierarchicalMultiSelectPicker.messages.ts","app/components/HierarchicalMultiSelectPicker/HierarchicalMultiSelectPicker.base.tsx","app/components/HierarchicalMultiSelectPicker/HierarchicalMultiSelectPicker.styles.ts","app/components/HierarchicalMultiSelectPicker/HierarchicalMultiSelectPicker.ts","app/pages/ad-management/Property/Create/variations/CreateNonTythonProperty/components/PropertyAttachedAdUnitsField/messages.ts","app/pages/ad-management/Property/Create/variations/CreateNonTythonProperty/components/PropertyAttachedAdUnitsField/index.tsx","app/pages/ad-management/Property/Create/variations/CreateNonTythonProperty/index.tsx","app/@data/store/schema/models/NativeAdTemplateBoost.ts","app/utils/UnitsUtils.ts","app/pages/ad-management/Adunit/Create/components/BoostTemplateUploader/BoostJsonFileUpload.messages.ts","app/pages/ad-management/Adunit/Create/components/BoostTemplateUploader/BoostJsonFileUpload.styles.ts","app/pages/ad-management/Adunit/Create/components/BoostTemplateUploader/BoostJsonFileUpload.tsx","app/pages/ad-management/Adunit/Create/components/DisablingMediationPopup/DisablingMediationPopup.messages.ts","app/pages/ad-management/Adunit/Create/components/DisablingMediationPopup/DisablingMediationPopup.tsx","app/pages/ad-management/Adunit/TythonAdunit/CreateAdunit/constants.ts","app/pages/ad-management/Adunit/TythonAdunit/components/AdUnitTypeSelector/useAdUnitTypeSelector.ts","app/pages/ad-management/Adunit/Create/CreateAdunit.styles.ts","app/pages/ad-management/Adunit/Create/CreateAdunit.tsx","app/pages/ad-management/Adunit/TythonAdunit/CreateAdunit/styles.ts","app/pages/ad-management/Adunit/TythonAdunit/components/AdUnitMediationSelector/DisablingMediationPopup/DisablingMediationPopup.messages.ts","app/pages/ad-management/Adunit/TythonAdunit/components/AdUnitMediationSelector/DisablingMediationPopup/DisablingMediationPopup.tsx","app/pages/ad-management/Adunit/TythonAdunit/components/AdUnitMediationSelector/index.tsx","app/pages/ad-management/Adunit/TythonAdunit/components/AdUnitNameInput/index.tsx","app/components/Stepper/Stepper.types.ts","app/components/Stepper/Step.style.ts","app/components/Stepper/Step.tsx","app/components/Stepper/Stepper.style.ts","app/components/Stepper/Stepper.tsx","app/layout/DetailPageWithStepper/DetailPageWithStepper.messages.ts","app/layout/DetailPageWithStepper/DetailPageWithStepper.styles.ts","app/layout/DetailPageWithStepper/LeavePagePopup/LeavePagePopup.messages.ts","app/layout/DetailPageWithStepper/LeavePagePopup/LeavePagePopup.tsx","app/layout/DetailPageWithStepper/utils/useStepperLogic.ts","app/layout/DetailPageWithStepper/DetailPageWithStepper.tsx","app/pages/ad-management/Property/Create/variations/CreateTythonProperty/utils/validateForm.ts","app/pages/ad-management/Property/Create/variations/CreateTythonProperty/__data__/orchestrators/formSubmitted.ts","app/pages/ad-management/Property/Create/variations/CreateTythonProperty/components/AdsTextPage/messages.ts","app/pages/ad-management/Property/Create/variations/CreateTythonProperty/components/AdsTextPage/styles.ts","app/pages/ad-management/Property/Create/variations/CreateTythonProperty/components/AdsTextPage/index.tsx","app/pages/ad-management/Property/Create/variations/CreateTythonProperty/__data__/orchestrators/formInitialized.ts","app/pages/ad-management/Property/Create/variations/CreateTythonProperty/__data__/mutatorActions/setPropertyForm.ts","app/pages/ad-management/Property/Create/variations/CreateTythonProperty/components/CreateProperty/components/ClarityOptions/messages.ts","app/pages/ad-management/Property/Create/variations/CreateTythonProperty/components/CreateProperty/components/ClarityOptions/styles.ts","app/pages/ad-management/Property/Create/variations/CreateTythonProperty/components/CreateProperty/components/ClarityOptions/index.tsx","app/pages/ad-management/Property/Create/variations/CreateTythonProperty/components/CreateProperty/index.tsx","app/pages/ad-management/Property/Create/variations/CreateTythonProperty/components/ScriptPage/@data/actions/onScriptPageActions.ts","app/pages/ad-management/Property/Create/variations/CreateTythonProperty/components/ScriptPage/@data/store/store.ts","app/pages/ad-management/Property/Create/variations/CreateTythonProperty/components/ScriptPage/@data/mutators/scriptChanged.ts","app/pages/ad-management/Property/Create/variations/CreateTythonProperty/components/ScriptPage/messages.ts","app/pages/ad-management/Property/Create/variations/CreateTythonProperty/components/ScriptPage/@data/orchestrators/scriptPageInitialized.ts","app/pages/ad-management/Property/Create/variations/CreateTythonProperty/components/ScriptPage/@data/orchestrators/scriptPageSubmitted.ts","app/pages/ad-management/Property/Create/variations/CreateTythonProperty/components/ScriptPage/styles.ts","app/pages/ad-management/Property/Create/variations/CreateTythonProperty/components/ScriptPage/index.tsx","app/pages/ad-management/Property/Create/variations/CreateTythonProperty/messages.ts","app/pages/ad-management/Property/Create/variations/CreateTythonProperty/index.tsx","app/pages/ad-management/Adunit/TythonAdunit/components/AdUnitSiteSelector/index.tsx","app/components/Accordion/Accordion.styles.ts","app/components/Accordion/messages.ts","app/components/Accordion/index.tsx","app/components/ColorPicker/ColorPicker.messages.ts","app/components/ColorPicker/ColorPicker.styles.ts","app/components/ColorPicker/swatchColors.ts","app/components/ColorPicker/ColorPicker.tsx","app/pages/ad-management/Adunit/TythonAdunit/services/fontOptions.ts","app/pages/ad-management/Adunit/TythonAdunit/components/AdUnitTypeSelector/PreviewComponent.tsx","app/pages/ad-management/Adunit/TythonAdunit/components/AdUnitTypeSelector/index.tsx","app/pages/ad-management/Adunit/TythonAdunit/services/loadProperties.ts","app/pages/ad-management/Adunit/TythonAdunit/services/utils.ts","app/pages/ad-management/Adunit/TythonAdunit/services/loadTythonAdUnitById.ts","app/pages/ad-management/Adunit/TythonAdunit/CreateAdunit/useAdUnitData.ts","app/pages/ad-management/Property/Create/variations/CreateTythonProperty/__data__/services/createProperty.ts","app/pages/ad-management/Adunit/TythonAdunit/services/createTythonAdUnit.ts","app/pages/ad-management/Adunit/TythonAdunit/services/enableTythonAdUnitMediation.ts","app/pages/ad-management/Adunit/TythonAdunit/services/updateTythonAdUnit.ts","app/pages/ad-management/Adunit/TythonAdunit/CreateAdunit/useAdUnitEventHandlers.ts","app/pages/ad-management/Adunit/TythonAdunit/services/disableTythonAdUnitMediation.ts","app/pages/ad-management/Adunit/TythonAdunit/CreateAdunit/useCreateTythonAdunit.ts","app/pages/ad-management/Adunit/TythonAdunit/CreateAdunit/index.tsx","app/pages/ad-management/Adunit/TythonAppAdUnit/components/types.ts","app/pages/ad-management/Adunit/TythonAppAdUnit/messages.ts","app/pages/ad-management/Adunit/TythonAppAdUnit/CreateAdUnit/types.ts","app/pages/ad-management/Adunit/TythonAppAdUnit/components/V2HelpInfoBubble.tsx","app/pages/ad-management/Adunit/TythonAppAdUnit/components/styles.ts","app/pages/ad-management/Adunit/TythonAppAdUnit/components/NativeAdDynamicAdPreview.tsx","app/pages/ad-management/Adunit/TythonAppAdUnit/components/AdPreviewDynamicRenderer.tsx","app/pages/ad-management/Adunit/TythonAppAdUnit/components/StaticAdPreview.tsx","app/pages/ad-management/Adunit/TythonAppAdUnit/components/V2SectionalAccordion.tsx","app/pages/ad-management/Adunit/TythonAppAdUnit/components/AppAdUnitPrimaryForm.tsx","app/pages/ad-management/Adunit/TythonAppAdUnit/components/AppAdUnitResultSummary.tsx","app/pages/ad-management/Adunit/TythonAppAdUnit/CreateAdUnit/useCreateTythonAppAdUnit.ts","app/pages/ad-management/Adunit/TythonAppAdUnit/CreateAdUnit/index.tsx","app/pages/ad-management/Adunit/AdunitPage.tsx","app/pages/ad-management/Channel/@data/mutators/channelChanged.ts","app/pages/ad-management/Channel/@data/mutators/channelFormsChanged.ts","app/pages/ad-management/Channel/@data/orchestrators/formCancelled.ts","app/pages/ad-management/Channel/@data/services/ChannelService.ts","app/pages/ad-management/Channel/@data/orchestrators/formInitialized.ts","app/pages/ad-management/Channel/@data/orchestrators/formSubmitted.ts","app/pages/ad-management/Channel/@data/store/schema/ChannelErrorModel.ts","app/pages/ad-management/Channel/@data/orchestrators/managePageInitialized.ts","app/pages/ad-management/Channel/Manage/ManagePage.messages.ts","app/pages/ad-management/Channel/Manage/utils/getCommandBarItems.tsx","app/pages/ad-management/Channel/Manage/ManagePage.tsx","app/pages/ad-management/Channel/Manage/utils/getGridColumns.tsx","app/pages/ad-management/Channel/ChannelPage.tsx","app/pages/ad-management/Home/components/AnnouncementCard/AnnouncementCard.styles.ts","app/pages/ad-management/Home/components/AnnouncementCard/AnnouncementCard.tsx","app/pages/ad-management/Home/components/AnnouncementCard/utils/utils.tsx","app/pages/ad-management/Home/components/Announcements/Announcements.message.ts","app/pages/ad-management/Home/components/Announcements/Announcements.styles.ts","app/pages/ad-management/Home/components/Announcements/utils/getAnnouncementCards.tsx","app/pages/ad-management/Home/components/Announcements/utils/utils.tsx","app/pages/ad-management/Home/components/Announcements/Announcements.tsx","app/pages/ad-management/Home/components/FAQSection/FAQSection.messages.ts","app/pages/ad-management/Home/components/FAQSection/FAQSection.styles.ts","app/pages/ad-management/Home/components/FAQSection/components/FAQCard.styles.ts","app/pages/ad-management/Home/components/FAQSection/components/FAQCard.tsx","app/pages/ad-management/Home/components/FAQSection/FAQSection.tsx","app/pages/ad-management/Home/components/FRECards/messages.ts","app/pages/ad-management/Home/components/FRECards/styles.ts","app/pages/ad-management/Home/components/FRECards/FRECard.tsx","app/pages/ad-management/Home/components/FRECards/FREContainer.tsx","app/pages/ad-management/Home/components/SetupCard/SetupCard.messages.ts","app/pages/ad-management/Home/components/SetupCard/SetupCardUtils.ts","app/pages/ad-management/Home/components/SetupCard/SetupCard.styles.ts","app/pages/ad-management/Home/components/SetupCard/utils/getShimmerSetupCard.tsx","app/pages/ad-management/Home/components/SetupCard/utils/renderProgressBar.tsx","app/pages/ad-management/Home/components/SetupCard/SetupCard.tsx","app/pages/ad-management/Home/components/GettingStarted/GettingStarted.messages.ts","app/pages/ad-management/Home/components/GettingStarted/GettingStarted.styles.ts","app/pages/ad-management/Home/components/GettingStarted/utils/getCards.tsx","app/pages/ad-management/Home/components/GettingStarted/utils/getStatusMessages.ts","app/pages/ad-management/Home/components/GettingStarted/GettingStarted.tsx","app/pages/ad-management/Home/components/PerformanceSection/PerformanceSection.styles.ts","app/pages/ad-management/Home/components/PerformanceSection/utils/balanceHelper.tsx","app/pages/ad-management/Home/components/PerformanceSection/components/BalanceCard.styles.ts","app/pages/ad-management/Home/components/PerformanceSection/components/messages.ts","app/pages/ad-management/Home/components/PerformanceSection/components/BalanceCard.tsx","app/pages/ad-management/Home/components/PerformanceSection/utils/getBalanceShimmers.tsx","app/pages/ad-management/Home/components/PerformanceSection/components/MetricItem.styles.ts","app/pages/ad-management/Home/components/PerformanceSection/components/MetricItem.tsx","app/pages/ad-management/Home/components/PerformanceSection/utils/getPerformanceShimmer.tsx","app/pages/ad-management/Home/components/PerformanceSection/components/PerformanceCard.styles.ts","app/pages/ad-management/Home/components/PerformanceSection/components/PerformanceCard.tsx","app/pages/ad-management/Home/components/PerformanceSection/PerformanceSection.tsx","app/pages/ad-management/Home/components/RecommendationsSection/RecommendationsSection.messages.ts","app/pages/ad-management/Home/components/RecommendationsSection/RecommendationsSection.styles.ts","app/pages/ad-management/Home/components/RecommendationsSection/utils/getCards.tsx","app/pages/ad-management/Home/components/RecommendationsSection/RecommendationsSection.tsx","app/pages/ad-management/Home/Manage/ManagePage.messages.ts","app/pages/ad-management/Home/Manage/ManagePage.styles.ts","app/pages/ad-management/Home/Manage/ManagePage.tsx","app/pages/ad-management/Home/HomePage.tsx","app/layout/TutorialCallout/styles.tsx","app/layout/TutorialCallout/index.tsx","app/pages/ad-management/Property/Manage/components/ClarityPanel/messages.ts","app/pages/ad-management/Property/Manage/components/ClarityPanel/index.tsx","app/pages/ad-management/Property/Manage/components/ClarityPanel/styles.ts","app/pages/ad-management/Property/Manage/components/CodePanel/CodePanel.tsx","app/pages/ad-management/Property/Manage/messages.ts","app/pages/ad-management/Property/Manage/styles.ts","app/pages/ad-management/Property/Manage/utils/getClarityTutorialSteps.tsx","app/pages/ad-management/Property/Manage/components/ClarityPanel/utils/getCommandBarItems.tsx","app/pages/ad-management/Property/Manage/utils/getFilterItems.tsx","app/pages/ad-management/Property/Manage/utils/getCommandBarItems.tsx","app/pages/ad-management/Property/Manage/utils/getServingStatusCalloutContent.tsx","app/pages/ad-management/Property/Manage/utils/getGridColumns.tsx","app/pages/ad-management/Property/Manage/index.tsx","app/pages/ad-management/Inventory/Manage/messages.ts","app/pages/ad-management/Inventory/Manage/useAppInventoryGrid.tsx","app/pages/ad-management/Inventory/Manage/AppInventoryManagePage.tsx","app/pages/ad-management/Inventory/Manage/index.tsx","app/components/HelpcenterInfoBubbleV2/index.tsx","app/pages/ad-management/Property/Create/variations/CreateTythonAppProperty/messages.ts","app/pages/ad-management/Property/Create/variations/CreateTythonAppProperty/components/styles.ts","app/pages/ad-management/Property/Create/variations/CreateTythonAppProperty/components/ConnectAppDropdown.tsx","app/pages/ad-management/Property/Create/variations/CreateTythonAppProperty/components/AppPropertyDetailForm.tsx","app/pages/ad-management/Property/Create/variations/CreateTythonAppProperty/components/FinishPage.tsx","app/pages/ad-management/Property/Create/variations/CreateTythonAppProperty/useCreateTythonAppProperty.ts","app/pages/ad-management/Property/Create/variations/CreateTythonAppProperty/index.tsx","app/pages/ad-management/Property/index.tsx","app/pages/ad-management/@data/services/getAdmanagementRoutes.ts","app/pages/ad-management/Profile/LazyProfilePage.tsx","app/pages/ad-management/UserManagement/UserInvitations/@data/actions/userInvitationActions.ts","app/pages/ad-management/UserManagement/UserInvitations/@data/store.ts","app/pages/ad-management/UserManagement/UserInvitations/@data/mutatorActions/onUserInvitationTabChanged.ts","app/pages/ad-management/UserManagement/UserInvitations/@data/mutatorActions/onUserInviteFormChanged.ts","app/pages/ad-management/UserManagement/UserInvitations/UserInvitations.messages.ts","app/pages/ad-management/UserManagement/UserInvitations/@data/orchestrators/deleteUserInvitation.ts","app/pages/ad-management/UserManagement/UserInvitations/@data/orchestrators/dismissUserInvitePanel.ts","app/pages/ad-management/UserManagement/Users/@data/actions/usersTabActions.ts","app/pages/ad-management/UserManagement/UserInvitations/@data/orchestrators/loadUserInvitations.ts","app/pages/ad-management/UserManagement/UserInvitations/@data/orchestrators/resendUserInvitation.ts","app/pages/ad-management/UserManagement/UserInvitations/@data/orchestrators/userInviteSubmitted.ts","app/pages/ad-management/UserManagement/UserInvitations/@data/schema/UserInviteErrorModel.ts","app/pages/ad-management/UserManagement/UserManagement.styles.ts","app/pages/ad-management/UserManagement/UserInvitations/UserInvitationColumns.tsx","app/styles/PanelStyles.ts","app/pages/ad-management/UserManagement/components/UserRoleChoiceGroupOptions.tsx","app/pages/ad-management/UserManagement/UserInvitations/UserInvitePanel.tsx","app/pages/ad-management/UserManagement/UserInvitations/ZeroInvitations.tsx","app/pages/ad-management/UserManagement/UserInvitations/UserInvitations.tsx","app/components/Popup/PopupCard.styles.ts","app/components/Popup/DeleteConfirmationPopup.tsx","app/pages/ad-management/UserManagement/Users/@data/store.ts","app/pages/ad-management/UserManagement/Users/@data/mutatorActions/onUsersTabChanged.ts","app/pages/ad-management/UserManagement/Users/@data/orchestrators/deleteUsers.ts","app/pages/ad-management/UserManagement/Users/@data/orchestrators/loadUsers.ts","app/pages/ad-management/UserManagement/Users/@data/orchestrators/userRoleChanged.ts","app/pages/ad-management/UserManagement/Users/UserRoleChangePanel.tsx","app/pages/ad-management/UserManagement/Users/UsersTabColumns.tsx","app/pages/ad-management/UserManagement/Users/UsersTab.tsx","app/pages/ad-management/UserManagement/UserManagement.tsx","app/pages/ad-management/Account/Payments/PaymentsPage.messages.ts","app/pages/ad-management/Account/Payments/PaymentsPage.styles.ts","app/pages/ad-management/Account/Payments/Balance/Balance.styles.ts","app/pages/ad-management/Account/Payments/Balance/Balance.helpers.tsx","app/pages/ad-management/Account/Payments/Balance/Balance.tsx","app/pages/ad-management/Account/Payments/EstimatedEarnings/EstimatedEarnings.styles.ts","app/pages/ad-management/Account/Payments/EstimatedEarnings/EstimatedEarnings.helpers.tsx","app/pages/ad-management/Account/Payments/EstimatedEarnings/EstimatedEarnings.tsx","app/pages/ad-management/Account/Payments/PaymentsPage.tsx","app/pages/ad-management/Account/Settings/LazySettingsPage.tsx","app/pages/ad-management/Account/Manage/ManagePage.messages.ts","app/pages/ad-management/Account/Manage/ManagePage.styles.ts","app/pages/ad-management/Account/Manage/ManagePage.tsx","app/pages/ad-management/Account/AccountPage.tsx","app/pages/report/DashboardCards/@data/actions/actions.ts","app/pages/report/DashboardCards/@data/actions/mutatorActions.ts","app/pages/ad-management/Home/components/ProfileCard/ProfileCard.messages.ts","app/pages/ad-management/Account/Settings/@data/actions/onSettingsPageChanged.ts","app/pages/terms-and-conditions/@data/actions/tncActions.ts","app/layout/EmptyLayout/EmptyLayout.styles.ts","app/layout/EmptyLayout/EmptyLayout.tsx","app/pages/terms-and-conditions/@data/store/store.ts","app/components/DetectAdBlock/DetectAdBlock.messages.ts","app/components/DetectAdBlock/DetectAdBlock.tsx","app/components/Nav/Nav.styles.ts","app/components/Nav/Nav.types.ts","app/components/Nav/NavBase.tsx","app/components/Nav/NavLink.tsx","app/components/Nav/Nav.tsx","app/components/Nav/NavToggler.messages.ts","app/components/Nav/SlimNav.tsx","app/components/Nav/NavToggler.tsx","app/layout/NotFound/NotFound.tsx","app/layout/TythonNav/styles.ts","app/layout/TythonNav/useTythonNav.ts","app/layout/TythonNav/index.tsx","app/layout/ContentLayout/ContentLayout.messages.tsx","app/layout/ContentLayout/ContentLayout.styles.ts","app/layout/ContentLayout/ContentLayout.tsx","app/components/Spinners/PageSpinner.styles.ts","app/components/Spinners/PageSpinner.tsx","app/layout/Footer/Footer.messages.ts","app/layout/Footer/Footer.styles.ts","app/layout/Footer/Footer.tsx","app/@data/utils/getLocalUpperCaseCountryCode.ts","app/@data/store/schema/enums/AccountProfileFeature.ts","app/layout/PageLayout/header-panels/ProfilePanel/ProfilePanel.messages.ts","app/pages/ad-management/Home/components/PerformanceSection/resources/Payment.svg","app/pages/report/utils/downloadFile.ts","app/pages/report/utils/exportHelper.ts","app/pages/report/utils/downloadCSV.ts","app/@data/store/schema/models/ReportingDataResponse.ts","app/pages/report/DashboardCards/@data/store/schema/IReportPageData.ts","app/pages/ad-management/Account/Payments/Onboarding/PaymentsOnboarding.tsx","app/pages/ad-management/Account/Payments/Onboarding/PaymentsOnboarding.styles.ts","app/pages/ad-management/AdQuality/AdReview/noImageAvailable.svg","app/@data/@metadata/store/selectors.ts","app/@data/store/schema/enums/ClarityStatus.ts","app/pages/ad-management/Profile/@data/store/appealStore.ts","app/config/xandrAdProviders.ts","app/utils/DateUtils.ts","app/utils/validation/DomainStringValidator.ts","app/pages/ad-management/Account/Settings/components/GoogleConnector/@data/store/store.ts","app/@data/services/ReportingService.ts","app/components/Tabs/Tabs.styles.ts","app/components/Tabs/Tabs.tsx","app/@data/actions/onTokenExpirationActions.ts","app/pages/ad-management/Adunit/@data/actions/onManagePageInitialized.ts","app/components/Form/FormState/FormState.ts","app/pages/partner-management/User/@data/actions/onManagePageInitialized.ts","app/pages/ad-management/Home/@data/actions/actions.ts","app/@data/store/schema/enums/AdPropertyType.ts","app/@data/store/schema/enums/AdSource.ts","app/@data/store/schema/enums/AdsTxtStatus.ts","app/@data/store/schema/enums/AdUnitMarketClassification.ts","app/@data/store/schema/enums/AdUnitRpsGuarantee.ts","app/@data/store/schema/enums/AdunitServeTier.ts","app/@data/store/schema/enums/AdUnitType.ts","app/@data/store/schema/enums/ApiErrorCodes.ts","app/@data/store/schema/enums/AuditType.ts","app/@data/store/schema/enums/ChannelType.ts","app/@data/store/schema/enums/ClarityType.ts","app/@data/store/schema/enums/CustomPanelType.ts","app/@data/store/schema/enums/EntityLimitTier.ts","app/@data/store/schema/enums/EntityType.ts","app/@data/store/schema/enums/FeatureOverideTier.ts","app/@data/store/schema/enums/FilterScope.ts","app/@data/store/schema/enums/LayoutMode.ts","app/@data/store/schema/enums/MediaType.ts","app/@data/store/schema/enums/NotificationLabel.ts","app/@data/store/schema/enums/NotificationSeverity.ts","app/@data/store/schema/enums/Partner.ts","app/@data/store/schema/enums/PaymentInstrumentationLifeCycleStatus.ts","app/@data/store/schema/enums/PaymentOption.ts","app/@data/store/schema/enums/PrivateMarketplace.ts","app/@data/store/schema/enums/PropertyApprovalStatus.ts","app/@data/store/schema/enums/PublisherGroupConfiguration.ts","app/@data/store/schema/enums/PublisherNetworkAffiliation.ts","app/@data/store/schema/enums/PublisherTier.ts","app/@data/store/schema/enums/ServiceLevel.ts","app/@data/store/schema/enums/UserRole.ts","app/@data/store/schema/enums/UserRoleEntityType.ts","app/pages/ad-management/Profile/@data/store/schema/IAppealState.ts","app/pages/signup/@data/store/schema/ISignUpErrorModel.ts","app/pages/signup/@data/store/store.ts","app/pages/ad-management/Profile/@data/store/schema/profileValidationModel.ts","app/components/InfoButton/InfoButton.base.tsx","app/components/InfoButton/InfoButton.styles.ts","app/components/InfoButton/InfoButton.ts","app/pages/ad-management/AdBlock/@data/services/fetchBrands.ts","app/@data/@metadata/orchestrators/fetchStatesOrProvince.ts","app/@data/@metadata/store/store.ts","app/utils/GuidUtils.ts","app/@data/services/OneVetIntegrationService.ts","app/components/Tag/styles.ts","app/components/Tag/index.tsx","logging/src/LoggingUtils.ts","app/@data/store/schema/enums/TokenType.ts","app/@data/actions/onLoadingChanged.ts","app/@data/store/schema/models/UpdateClarityProject.ts","app/pages/ad-management/Profile/@data/services/fetchUserDetails.ts","app/pages/ad-management/Profile/@data/store/schema/VerificationCodeGenerationErrorCodes.ts","app/layout/GridPageV2/components/Pagination/Pagination.types.ts","app/pages/ad-management/AdManagement.messages.ts","app/components/ListPicker/ListPicker.base.tsx","app/components/ListPicker/ListPicker.styles.ts","app/components/ListPicker/ListPicker.ts","app/layout/PublisherAccountPicker/PublisherAccountPicker.messages.ts","app/layout/PublisherAccountPicker/PublisherAccountPicker.styles.ts","app/layout/PublisherAccountPicker/PublisherAccountPicker.tsx","app/utils/DelayUtils.ts","app/layout/GridPageV2/components/Pagination/Themes/DottedPagination/DottedPagination.styles.ts","app/layout/GridPageV2/components/Pagination/Themes/DottedPagination/useDottedPagination.ts","app/layout/GridPageV2/components/Pagination/Themes/DottedPagination/DottedPagination.tsx","app/layout/GridPageV2/components/Pagination/Themes/NavigatedPagination/NavigatedPagination.messages.ts","app/layout/GridPageV2/components/Pagination/Themes/NavigatedPagination/NavigatedPagination.styles.ts","app/layout/GridPageV2/components/Pagination/Themes/NavigatedPagination/NavigatedPagination.tsx","app/layout/GridPageV2/components/Pagination/Pagination.tsx","app/pages/report/components/CustomCalender/CustomCalender.styles.ts","app/pages/report/components/CustomCalender/components/SingleDay.styles.ts","app/pages/report/components/CustomCalender/components/SingleDay.tsx","app/pages/report/components/CustomCalender/CustomCalender.tsx","app/layout/InternationalizationLayout/InternationalizationLayout.styles.ts","app/layout/InternationalizationLayout/InternationalizationLayout.tsx","app/pages/report/ReportHeader.tsx","app/pages/report/ReportRouter.tsx","app/components/LazyComponents/LazyComponent.tsx","app/pages/ad-management/Property/Create/__data__/orchestrators/resendClarityLink.ts","app/pages/ad-management/Account/@data/store/accountStatusStore.ts","app/pages/report/constants/ratioMetrics.ts","app/@data/orchestrators/PublisherAccountChanged.ts","app/@data/orchestrators/accountChanged.ts","app/@data/orchestrators/accountSelected.ts","app/@data/orchestrators/authLogout.ts","app/@data/services/NotificationService.ts","app/@data/orchestrators/dismissAllNotifications.ts","app/@data/orchestrators/dismissNotification.ts","app/@data/orchestrators/fetchBackendNotifications.ts","app/@data/orchestrators/handleDomainRedirection.ts","app/@data/orchestrators/helpInfoCalloutOpened.ts","app/@data/services/HelpService.ts","app/@data/orchestrators/navigateBack.ts","app/@data/orchestrators/notificationOrchestrators.ts","app/@data/orchestrators/publisherChanged.ts","app/@data/orchestrators/publisherSelected.ts","app/@data/orchestrators/redirectToReportingDashboard.ts","app/@data/orchestrators/tokenExpiredOrchestrators.ts","app/@data/orchestrators/userContextChanged.ts","app/@data/store/schema/enums/UserInvitationType.ts","app/@data/store/schema/enums/UserType.ts","app/pages/terms-and-conditions/@data/orchestrators/constants.ts","app/pages/terms-and-conditions/@data/orchestrators/onFetchTnC.ts","app/@data/store/schema/models/Feedback.ts","app/@data/store/schema/models/UserCreateFromInvitation.ts","app/pages/report/DashboardCards/@data/store/selectors.ts","app/layout/EntityCreationLayout/connectApp.svg","app/layout/EntityCreationLayout/connectSite.svg","app/@data/@metadata/actions/statesActions.ts","app/components/Popup/PopupCard.tsx","logging/src/ConsoleLoggerManager.ts","logging/src/DefaultLogUserContext.ts","app/@data/store/schema/enums/LifeCycleStatus.ts","app/@data/store/schema/models/AppealHistory.ts","app/@data/store/schema/models/welcomeToPubcenterEmail.ts","app/@data/actions/onAcceptInviteActions.ts","app/@data/actions/onSavingChanged.ts","app/utils/StringUtils.ts","app/@data/utils/AdTakeDownService.ts","app/pages/ad-management/Profile/@data/services/fetchPublisherProfileDetails.ts","app/pages/ad-management/@data/actions/onAdManagementStoreChanged.ts","app/hooks/useDetectAdBlock.ts","app/hooks/useOnClickOutside.ts","app/utils/DataGridUtils/SortingUtils.ts","app/pages/ad-management/Account/Settings/@data/actions/onPublisherDeleted.ts","app/pages/ad-management/Account/Settings/@data/actions/onUserSelfDeleted.ts","app/components/GridWithCustomColumns/GridWithCustomColumns.styles.ts","app/pages/ad-management/@data/actions/publisherEvaluationActions.ts","app/@data/store/schema/models/Account.ts","app/@data/store/schema/models/AccountSKU.ts","app/@data/store/schema/models/AdUnit.ts","app/@data/store/schema/models/AuditLog.ts","app/@data/store/schema/models/Channel.ts","app/@data/store/schema/models/EntityEvaluation.ts","app/@data/store/schema/models/EntityPreferences.ts","app/@data/store/schema/models/Filter.ts","app/@data/store/schema/models/FilterDownloader.ts","app/@data/store/schema/models/IPRange.ts","app/@data/store/schema/models/NativeAdTemplate.ts","app/@data/store/schema/models/NotificationPreferencesUpdate.ts","app/@data/store/schema/models/PhoneVerification.ts","app/@data/store/schema/models/Property.ts","app/@data/store/schema/models/Publisher.ts","app/@data/store/schema/models/PublisherCreate.ts","app/@data/store/schema/models/PublisherSearch.ts","app/@data/store/schema/models/SelfServePublisher.ts","app/@data/store/schema/models/TythonAdUnit.ts","app/@data/store/schema/models/TythonAdUnits.ts","app/@data/store/schema/models/UpdateStatus.ts","app/@data/store/schema/models/User.ts","app/@data/store/schema/models/UserContactDetails.ts","app/@data/store/schema/models/UserContext.ts","app/@data/store/schema/models/UserInvitation.ts","app/@data/store/schema/models/UserInvitationResend.ts","app/@data/store/schema/models/UserRoleUpdate.ts","app/@data/store/schema/models/UserUpdateLanguage.ts","app/@data/store/schema/models/XPayJwtTokenRequest.ts","app/layout/GridPageV2/@data/actions/gridActions.ts","app/layout/GridPageV2/@data/orchestrators/changeItemsStatus.ts","app/layout/GridPageV2/@data/orchestrators/deleteItem.ts","app/layout/GridPageV2/@data/orchestrators/duplicateItem.ts","app/layout/GridPageV2/@data/services/GridService.ts","app/layout/GridPageV2/@data/orchestrators/gridPageV2Initialized.ts","app/layout/GridPageV2/components/DeactivateConfirmationDialog.tsx","app/layout/GridPageV2/components/DeleteConfirmationDialog.tsx","app/layout/GridPageV2/components/ModifyColumnsPanel.tsx","app/layout/GridPageV2/components/CustomCommandBar/CustomCommandBar.styles.ts","app/layout/GridPageV2/components/SearchBoxCallOut/SearchBoxCallOut.tsx","app/layout/GridPageV2/components/CustomCommandBar/utils/getDefaultCommandBarItems.tsx","app/layout/GridPageV2/components/CustomCommandBar/utils/buildCommandBarProps.ts","app/layout/GridPageV2/components/CustomCommandBar/utils/getDefaultCommandBarFarItems.tsx","app/layout/GridPageV2/components/CustomCommandBar/utils/getSelectionMode.ts","app/layout/GridPageV2/components/CustomCommandBar/CustomCommandBar.tsx","app/layout/GridPageV2/hooks/useSearchableGrid.ts","app/layout/GridPageV2/utils/FilteringUtils.ts","app/layout/GridPageV2/utils/SortingUtils.ts","app/layout/GridPageV2/hooks/usePagination.ts","app/layout/GridPageV2/GridV2.tsx","app/layout/GridPageV2/hooks/useSortableGridColumns.ts","app/layout/GridPageV2/hooks/useSelectionGrid.ts","app/layout/GridPageV2/components/CustomCheckbox.tsx","app/pages/partner-management/User/@data/store/schema/UserAcceptInviteErrorModel.ts","logging/src/Aria.Config.ts","logging/src/UserConstants.ts","logging/src/AriaLoggerManager.ts","app/hooks/useWindowsAppFeatureFlag/actions/windowsFeatureFlagActions.ts","app/hooks/useWindowsAppFeatureFlag/mutators/windowsFeatureFlagMutators.ts","app/hooks/useWindowsAppFeatureFlag/index.ts","app/hooks/useCMUIHelpExperience/init-apex.ts","app/hooks/useCMUIHelpExperience/index.tsx","app/components/MultiSelectPicker/MultiSelectPicker.styles.ts","app/components/MultiSelectPicker/MultiSelectPicker.ts","app/components/MultiSelectPicker/MultiSelectPicker.messages.ts","app/components/MultiSelectPicker/MultiSelectPicker.base.tsx","app/pages/ad-management/Account/AccountPage.messages.ts","app/pages/report/@data/services/ReportService.ts","app/pages/ad-management/Adunit/TythonAdunit/resources/HorizontalBottomAdPreview.svg","app/pages/ad-management/Adunit/TythonAdunit/resources/HorizontalUpperAdPreview.svg","app/pages/ad-management/Adunit/TythonAdunit/resources/SquareBottomAdPreview.svg","app/pages/ad-management/Adunit/TythonAdunit/resources/SquareLeftAdPreview.svg","app/pages/ad-management/Adunit/TythonAdunit/resources/VerticalBottomAdPreview.svg","app/pages/ad-management/Adunit/TythonAdunit/resources/VerticalLeftAdPreview.svg","app/pages/ad-management/Adunit/TythonAdunit/resources/AutoFitHeight.svg","app/pages/ad-management/Adunit/TythonAdunit/resources/AutoFitWidth.svg","app/pages/ad-management/Home/components/SetupCard/resources/AdUnitStep1.svg","app/pages/ad-management/Home/components/SetupCard/resources/AdUnitStep2.svg","app/pages/ad-management/Home/components/SetupCard/resources/ProfileStep1.svg","app/pages/ad-management/Home/components/SetupCard/resources/ProfileStep2.svg","app/pages/ad-management/Home/components/SetupCard/resources/ProfileStep3.svg","app/pages/ad-management/Home/components/SetupCard/resources/SiteStep1.svg","app/pages/ad-management/Home/components/SetupCard/resources/SiteStep2.svg","app/pages/ad-management/Home/components/SetupCard/resources/SiteStep3.svg","app/pages/ad-management/Home/components/RecommendationsSection/resources/adBlock.svg","app/pages/ad-management/Home/components/RecommendationsSection/resources/adsTxt.svg","app/pages/ad-management/Home/components/RecommendationsSection/resources/mediation.svg","app/pages/ad-management/Home/components/RecommendationsSection/resources/mediationIcon.svg","app/pages/ad-management/Home/components/RecommendationsSection/resources/payment.svg","app/layout/GridPageV2/components/CellInfoCallout.tsx","app/pages/support/emailLogo.svg","app/pages/support/emailSentLogo.svg","app/pages/partner-management/@data/actions/index.ts","app/pages/partner-management/@data/mutators/currentRouteChanged.ts","app/pages/partner-management/Account/@data/actions/onAccountChanged.ts","app/pages/partner-management/Account/@data/actions/onAccountFormsChanged.ts","app/pages/partner-management/Account/@data/actions/onAccountSkuSidePanelChanged.ts","app/pages/partner-management/Account/@data/actions/onManagePageInitialized.ts","app/pages/partner-management/Account/@data/store/store.ts","app/pages/partner-management/Account/@data/mutators/accountChanged.ts","app/config/countryToCurrencyMapper.config.ts","app/pages/partner-management/Account/@data/mutators/accountFormsChanged.ts","app/pages/partner-management/Account/@data/orchestrators/accountSkuFormSubmitted.ts","app/pages/partner-management/Account/@data/orchestrators/accountSkuPanelInitialized.ts","app/pages/partner-management/Account/@data/orchestrators/formCancelled.ts","app/@data/store/schema/enums/AdExtensionType.ts","app/@data/store/schema/enums/FinancialStatus.ts","app/pages/partner-management/Account/@data/mutatorActions/accountFormsChanged.ts","app/pages/partner-management/Account/@data/orchestrators/formInitialized.ts","app/pages/partner-management/Account/@data/orchestrators/formSubmitted.ts","app/pages/partner-management/Account/@data/store/schema/AccountErrorModel.ts","app/pages/partner-management/Account/@data/orchestrators/managePageInitialized.ts","app/MediaType.messages.ts","app/pages/partner-management/Account/Create/CreateAccount.messages.ts","app/pages/partner-management/Account/Create/CreateAccount.styles.ts","app/pages/partner-management/Account/Create/CreateAccount.tsx","app/pages/partner-management/Account/Manage/ManagePage.messages.ts","app/pages/partner-management/Account/Manage/utils/getCommandBarItems.tsx","app/pages/partner-management/Account/Manage/ManagePage.tsx","app/pages/partner-management/Account/Manage/utils/getGridColumns.tsx","app/pages/partner-management/Account/AccountPage.tsx","app/pages/partner-management/Index/IndexPage.messages.ts","app/pages/partner-management/Index/IndexPage.tsx","app/pages/partner-management/PartnerManagementHeader.tsx","app/pages/partner-management/@data/orchestrators/currentRouteChanged.ts","app/pages/partner-management/Publisher/@data/actions/onPublisherChanged.ts","app/pages/partner-management/Publisher/@data/store/store.ts","app/pages/partner-management/Publisher/@data/mutators/PublisherChanged.ts","app/pages/partner-management/Publisher/@data/actions/onManagePageInitialized.ts","app/pages/partner-management/Publisher/@data/actions/onPublisherFormsChanged.ts","app/pages/partner-management/Publisher/@data/mutators/publisherFormsChanged.ts","app/pages/partner-management/Publisher/@data/orchestrators/FormPublisherAddressCountryCodeChanged.ts","app/pages/partner-management/Publisher/@data/orchestrators/formCancelled.ts","app/pages/partner-management/Publisher/@data/orchestrators/formCreated.ts","app/pages/partner-management/Publisher/@data/store/schema/PublisherCreateErrorModel.ts","app/pages/partner-management/Publisher/@data/orchestrators/formEditted.ts","app/pages/partner-management/Publisher/@data/store/schema/PublisherEditViewModel.ts","app/pages/partner-management/Publisher/@data/orchestrators/formInitialized.ts","app/pages/partner-management/Publisher/@data/orchestrators/formIpAddressChanged.ts","app/pages/partner-management/Publisher/@data/store/schema/PublisherIPAddressErrorModel.ts","app/pages/partner-management/Publisher/@data/orchestrators/managePageInitialized.ts","app/pages/partner-management/Publisher/Create/CreatePublisher.messages.ts","app/pages/partner-management/Publisher/Create/CreatePublisher.styles.ts","app/pages/partner-management/Publisher/Create/CreatePublisher.tsx","app/pages/partner-management/Publisher/Manage/ManagePage.messages.ts","app/pages/partner-management/Publisher/Manage/utils/getCommandBarItems.tsx","app/pages/partner-management/Publisher/Manage/ManagePage.tsx","app/pages/partner-management/Publisher/Manage/utils/getGridColumns.tsx","app/pages/partner-management/Publisher/PublisherPage.tsx","app/pages/partner-management/User/AccountRole/AccountRole.styles.ts","app/pages/partner-management/User/AccountRole/AccountRole.tsx","app/pages/partner-management/User/Invite/InviteUser.styles.ts","app/pages/partner-management/User/Invite/InviteUser.tsx","app/pages/partner-management/User/Manage/ManagePage.styles.ts","app/pages/partner-management/User/Manage/ManagePage.messages.ts","app/pages/partner-management/User/Manage/UserInvitations/utils/getCommandBarItems.tsx","app/pages/partner-management/User/Manage/UserInvitations/UserInvitationsGrid.tsx","app/pages/partner-management/User/Manage/UserInvitations/utils/getGridColumns.tsx","app/pages/partner-management/User/Manage/Users/components/DevTokenPanel.tsx","app/pages/partner-management/User/Manage/Users/utils/getCommandBarItems.tsx","app/pages/partner-management/User/Manage/Users/UsersGrid.tsx","app/pages/partner-management/User/Manage/Users/utils/getGridColumns.tsx","app/pages/partner-management/User/Manage/ManagePage.tsx","app/pages/partner-management/User/UserPage.tsx","app/pages/partner-management/PartnerManagementRouter.tsx","app/pages/report/@data/mutators/currentRouteChanged.ts","app/pages/report/@data/mutators/reportingEnabled.ts","app/pages/report/@data/orchestrators/currentRouteChanged.ts","app/pages/report/@data/orchestrators/reportLinkClicked.ts","app/pages/report/@data/orchestrators/setPublisherReporting.ts","app/pages/report/constants/allowedChartsType.ts","app/pages/report/constants/common.ts","app/pages/report/hooks/useMediationAvailable.ts","app/pages/report/utils/getInitialDateRange.ts","app/pages/report/utils/checkIfValidDateRange.ts","app/pages/report/DashboardCards/MetricMarker/MetricMarker.styles.ts","app/pages/report/DashboardCards/MetricMarker/MetricMarker.tsx","app/pages/report/DashboardCards/ChartMetricPicker/ChartMetricPicker.styles.ts","app/pages/report/DashboardCards/ChartMetricPicker/ChartMetricPicker.tsx","app/pages/report/DashboardCards/ChartMetricPicker/MetricsSidePanel.tsx","app/pages/report/DashboardCards/ReportCard/ReportCard.styles.ts","app/pages/report/DashboardCards/GrainSelector/GrainSelector.tsx","app/pages/report/DashboardCards/ReportDetailsPage/ReportDetailsPage.messages.ts","app/pages/report/DashboardCards/ReportDetailsPage/WarningIcon/MenuItemWarningIcon.styles.ts","app/pages/report/DashboardCards/ReportDetailsPage/WarningIcon/MenuItemWarningIcon.tsx","app/pages/report/DashboardCards/ReportDetailsPage/ReportDetailsGrid/ReportDetailsGrid.styles.ts","app/pages/report/DashboardCards/ReportDetailsPage/ReportDetailsGrid/ReportDetailsGrid.tsx","app/pages/report/DashboardCards/@data/schema/ShareSchedule.ts","app/pages/report/DashboardCards/ShareModal/ShareModal.styles.ts","app/pages/report/DashboardCards/ShareModal/ShareModal.tsx","app/pages/report/DashboardCards/@data/schema/ShareErrorModel.ts","app/pages/report/DashboardCards/ChartTypeSelector/ChartTypeSelector.tsx","app/pages/report/DashboardCards/ReportCard/TopBarActions.tsx","app/pages/report/DashboardCards/ReportCard/ReportCard.tsx","app/pages/report/DashboardCards/AdUnitsReportCard/AdUnitsReportCard.tsx","app/pages/report/DashboardCards/CountryReportCard/CountryReportCard.tsx","app/pages/report/DashboardCards/MediationReportCard/MediationReportCard.tsx","app/pages/report/DashboardCards/PerformanceReportCard/PerformanceReportCard.tsx","app/pages/report/DashboardCards/SitesReportCard/SitesReportCard.tsx","app/pages/report/DashboardCards/ReportDetailsPage/ActionBar/FilterListBar/FilterListBar.styles.ts","app/pages/report/DashboardCards/ReportDetailsPage/ActionBar/FilterListBar/FilterListItem.tsx","app/pages/report/DashboardCards/ReportDetailsPage/ActionBar/FilterListBar/FilterListBar.tsx","app/pages/report/DashboardCards/ReportDetailsPage/ActionBar/ManageFilter/ManageFilter.styles.ts","app/pages/report/DashboardCards/ReportDetailsPage/ActionBar/ManageFilter/ManageFilter.tsx","app/pages/report/DashboardCards/ReportDetailsPage/ActionBar/ActionBar.tsx","app/pages/report/DashboardCards/ReportDetailsPage/ReportDetailsPage.styles.ts","app/pages/report/DashboardCards/ReportDetailsPage/SubPageNavbar/SubPageNavbar.styles.ts","app/pages/report/DashboardCards/ReportDetailsPage/SubPageNavbar/SubPageNavbar.tsx","app/pages/report/DashboardCards/ReportDetailsPage/ReportDetailsPage.tsx","app/pages/report/DashboardCards/MetricsSummaryCards/MetricCard/MetricCard.styles.ts","app/pages/report/DashboardCards/MetricsSummaryCards/MetricCard/MetricCard.tsx","app/pages/report/DashboardCards/MetricsSummaryCards/MetricsSummaryCards.styles.ts","app/pages/report/DashboardCards/MetricsSummaryCards/MetricsSummaryCards.tsx","app/pages/report/DashboardCards/TythonReportCards.styles.ts","app/pages/report/DashboardCards/TythonReportCards.tsx","app/pages/report/ReportPage.styles.ts","app/pages/report/ReportPage.tsx","app/pages/report/BaseReportPage.tsx","app/pages/error-pages/SuspendedUser/SuspendedUser.messages.ts","app/pages/error-pages/SuspendedUser/SuspendedUser.styles.ts","app/pages/error-pages/SuspendedUser/SuspendedUser.tsx","app/pages/ad-management/Account/Settings/UserSettingsPage.tsx","app/pages/ad-management/AdManagementHeader.tsx","app/pages/ad-management/AuditHistory/@data/actions/actions.ts","app/pages/ad-management/AuditHistory/@data/store/store.ts","app/pages/ad-management/AuditHistory/@data/actions/mutatorActions.ts","app/pages/ad-management/AuditHistory/AuditHistory.messages.ts","app/pages/ad-management/AuditHistory/@data/services/fetchAuditLogs.ts","app/pages/ad-management/AuditHistory/@data/orchestrators/auditHistoryPageInitialized.ts","app/pages/ad-management/AuditHistory/utils/convertAttributeValues.ts","app/pages/ad-management/AuditHistory/ActionDetails.messages.ts","app/pages/ad-management/AuditHistory/utils/getPaymentActionDetails.ts","app/pages/ad-management/AuditHistory/utils/getActionDetails.ts","app/pages/ad-management/AuditHistory/utils/getAdUnitActionDetails.ts","app/pages/ad-management/AuditHistory/utils/getPropertyActionDetails.ts","app/pages/ad-management/AuditHistory/utils/getUserActionDetails.ts","app/pages/ad-management/AuditHistory/utils/getPublisherActionDetails.ts","app/pages/ad-management/AuditHistory/utils/getFilterItems.ts","app/pages/ad-management/AuditHistory/ActionDetails.tsx","app/pages/ad-management/AuditHistory/AuditHistory.styles.ts","app/pages/ad-management/AuditHistory/utils/getGridColumns.tsx","app/pages/ad-management/AuditHistory/@data/orchestrators/handleDownload.ts","app/pages/ad-management/AuditHistory/utils/getCommandBarItems.ts","app/pages/ad-management/AuditHistory/@data/orchestrators/updateFilterAndFetchLogs.ts","app/pages/ad-management/AuditHistory/AuditHistory.tsx","app/pages/ad-management/Index/IndexPage.messages.ts","app/pages/ad-management/Index/IndexPage.tsx","app/pages/ad-management/AdManagement.styles.ts","app/pages/ad-management/renderPartials.tsx","app/pages/ad-management/AdManagementRouter.tsx","app/components/TnCModal/TnCModal.styles.ts","app/components/TnCModal/index.tsx","app/components/ToastNotification/ToastNotification.styles.ts","app/components/ToastNotification/ToastNotification.tsx","app/layout/NotificationLayout/NotificationLayout.messages.ts","app/layout/NotificationLayout/NotificationLayout.styles.ts","app/layout/NotificationLayout/NotificationLayout.tsx","app/components/NotificationBar/NotificationBar.base.tsx","app/components/NotificationBar/NotificationBar.styles.ts","app/components/NotificationBar/NotificationBar.ts","app/components/GridFilter/GridFilter.messages.ts","app/components/GridFilter/GridFilter.styles.ts","app/components/GridFilter/GridFilter.base.tsx","app/components/GridFilter/GridFilter.ts","app/components/Logo/Logo.styles.ts","app/components/Logo/messages.ts","app/components/Logo/Logo.tsx","app/components/TnCModal/TnCNotification.tsx","app/pages/terms-and-conditions/useTnC.ts","app/components/EmptyChart/EmptyChart.styles.ts","app/components/EmptyChart/EmptyChart.tsx","app/components/SummaryCard/SummaryCard.styles.ts","app/components/SummaryCard/SummaryCard.tsx","app/@data/mutators/helpInfoChanged.ts","app/layout/GridPageV2/@data/orchestrators/downloadButtonClicked.ts","app/@data/mutators/accountChanged.ts","app/@data/mutators/collapseMenu.ts","app/@data/mutators/entityGridColumnsChanged.ts","app/@data/mutators/isAcceptInviteFlowChanged.ts","app/@data/mutators/layoutChanged.ts","app/@data/mutators/loadingChanged.ts","app/@data/mutators/notificationMutators.ts","app/@data/mutators/notificationPanelMutators.ts","app/@data/mutators/publisherChanged.ts","app/@data/mutators/savingChanged.ts","app/@data/mutators/userContextChanged.ts","app/pages/ad-management/Account/@data/orchestrators/fetchAccountStatus.ts","app/pages/ad-management/Account/@data/orchestrators/fetchPaymentsPageBalance.ts","app/pages/ad-management/Account/@data/orchestrators/fetchPaymentsPageEstimatedEarnings.ts","app/pages/ad-management/Account/@data/orchestrators/initializePaymentsPage.ts","app/pages/ad-management/Account/Settings/components/SystemConfiguration/SystemConfiguration.messages.ts","app/pages/ad-management/Adunit/TythonAppAdUnit/components/resources/adVector.svg","app/pages/ad-management/Adunit/TythonAppAdUnit/components/resources/codeIcon.svg","app/pages/ad-management/Home/components/ResourcesSection/resources/DocumentationCenterIcon.svg","app/pages/ad-management/Home/components/ResourcesSection/resources/FeedBackIcon.svg","app/pages/ad-management/Home/components/ResourcesSection/resources/SupportTeamIcon.svg","app/layout/PageLayout/header-panels/NotificationsPanel/resources/empty.svg","app/pages/ad-management/Home/components/FRECards/resources/fre-1.jpg","app/pages/ad-management/Home/components/FRECards/resources/fre-2.jpg","app/pages/ad-management/Home/components/FRECards/resources/fre-3.jpg","app/pages/ad-management/Profile/@data/actions/appealMutatorActions.ts","app/pages/ad-management/Account/Settings/components/GoogleConnector/@data/constants.ts","app/@data/store/schema/enums/ServingStatus.ts","app/components/GridWithCustomColumns/GridWithCustomColumns.tsx","app/pages/ad-management/AdBlock/@data/services/fetchPropertiesServingConfigs.ts","app/pages/ad-management/AdBlock/@data/services/fetchPropertyServingConfig.ts","app/pages/ad-management/AdBlock/@data/services/fetchPublisherServingConfig.ts","app/pages/ad-management/AdBlock/@data/services/updatePropertyServingConfig.ts","app/pages/ad-management/AdBlock/@data/services/updatePublisherServingConfig.ts","app/pages/ad-management/Profile/VerificationErrors.messages.ts","app/pages/ad-management/Account/Settings/SettingsPage.styles.ts","app/pages/ad-management/AdBlock/resources/Desert.svg","app/layout/TythonNav/resources/AccountNavIcon.svg","app/layout/TythonNav/resources/AccountNavIconActive.svg","app/layout/TythonNav/resources/AdBlockNavIcon.svg","app/layout/TythonNav/resources/AdBlockNavIconActive.svg","app/layout/TythonNav/resources/AdUnitNavIcon.svg","app/layout/TythonNav/resources/AdUnitNavIconActive.svg","app/layout/TythonNav/resources/AdsIcon.svg","app/layout/TythonNav/resources/AdsIconActive.svg","app/layout/TythonNav/resources/HomeNavIcon.svg","app/layout/TythonNav/resources/HomeNavIconActive.svg","app/layout/TythonNav/resources/InventoryIcon.svg","app/layout/TythonNav/resources/InventoryIconActive.svg","app/layout/TythonNav/resources/ReportNavIcon.svg","app/layout/TythonNav/resources/ReportNavIconActive.svg","app/layout/TythonNav/resources/SiteNavIcon.svg","app/layout/TythonNav/resources/SiteNavIconActive.svg","app/@data/store/schema/models/BrandSearchResponse.ts","app/pages/partner-management/User/@data/orchestrators/acceptInvitePageInitialized.ts","app/pages/partner-management/User/@data/orchestrators/acceptInvitePageSubmitted.ts","app/pages/partner-management/User/@data/orchestrators/fetchDevTokenStatus.ts","app/pages/partner-management/User/@data/orchestrators/formCancelled.ts","app/pages/partner-management/User/@data/services/UserService.ts","app/pages/partner-management/User/@data/orchestrators/formInitialized.ts","app/pages/partner-management/User/@data/orchestrators/formSubmitted.ts","app/pages/partner-management/User/@data/store/schema/UserErrorModel.ts","app/pages/partner-management/User/@data/store/schema/UserInvitationErrorModel.ts","app/pages/partner-management/User/@data/orchestrators/formUserInvitationChanged.ts","app/pages/partner-management/User/@data/orchestrators/generateDevTokenStatus.ts","app/pages/partner-management/User/@data/orchestrators/managePageInitialized.ts","app/pages/partner-management/User/@data/orchestrators/sendWelcomeToPubcenterEmail.ts","app/pages/partner-management/User/@data/orchestrators/userInvitationsGridInitialized.ts","app/pages/partner-management/User/@data/orchestrators/validateUserInvitationCode.ts","app/pages/ad-management/Profile/@data/orchestrators/editPublisherProfileDetails.ts","app/pages/ad-management/Profile/@data/orchestrators/fetchAppealHistory.ts","app/pages/ad-management/Profile/@data/orchestrators/fetchPrimaryUserDetails.ts","app/pages/ad-management/Profile/@data/orchestrators/fetchPublisherProfileDetails.ts","app/pages/ad-management/Profile/@data/orchestrators/generateVerificationCode.ts","app/pages/ad-management/Profile/@data/orchestrators/initializeProfilePage.ts","app/pages/ad-management/Profile/@data/orchestrators/submitEvidenceDocument.ts","app/pages/ad-management/Profile/@data/orchestrators/updatePublisherProfileDetails.ts","app/pages/ad-management/Profile/@data/services/updateUserContactDetails.ts","app/pages/ad-management/Profile/@data/orchestrators/validateAddress.ts","app/pages/ad-management/Profile/@data/orchestrators/validateAndPreviewChanges.ts","app/pages/ad-management/Profile/@data/orchestrators/validateOrgAddress.ts","app/pages/ad-management/Profile/@data/orchestrators/verifyGeneratedCode.ts","app/pages/ad-management/Profile/@data/services/verifyGeneratedCodeAsync.ts","app/components/CheckboxGroup/CheckboxGroup.styles.ts","app/components/CheckboxGroup/CheckboxGroup.tsx","app/components/CheckboxTreeWithSelectionBox/CheckboxTreeWithSelectionBox.styles.ts","app/components/CheckboxTree/CheckboxTree.styles.ts","app/components/CheckboxTree/CheckboxTree.tsx","app/components/CheckboxTreeWithSelectionBox/CheckboxTreeWithSelectionBox.tsx","app/pages/ad-management/Home/@data/orchestrators/dismissFRE.ts","app/@data/store/schema/models/EntitySummary.ts","app/@data/store/schema/models/Home.ts","app/pages/ad-management/Home/@data/orchestrators/fetchSetupCardsStatus.ts","app/pages/ad-management/Home/@data/orchestrators/initializeHomePage.ts","app/pages/ad-management/Home/@data/orchestrators/initializeSystemPreferences.ts","app/pages/ad-management/Home/@data/orchestrators/triggerOneVetAPIs.ts","app/pages/partner-management/User/@data/mutators/devTokenChanged.ts","app/pages/partner-management/User/@data/mutators/userChanged.ts","app/pages/partner-management/User/@data/mutators/userFormsChanged.ts","app/pages/ad-management/@data/orchestrators/currentRouteChanged.ts","app/pages/ad-management/@data/orchestrators/publisherEvaluationOrchestrator.ts","app/pages/ad-management/@data/services/publisherEvaluationService.ts","app/pages/ad-management/Account/Settings/components/NotificationConfiguration/NotificationConfiguration.messages.ts","app/pages/ad-management/Account/Settings/components/NotificationConfiguration/NotificationConfiguration.styles.ts","app/pages/ad-management/Account/Settings/components/NotificationConfiguration/NotificationConfiguration.tsx","app/pages/error-pages/SuspendedUser/resources/UserSuspended.svg","app/pages/ad-management/Account/Settings/resources/settings.svg","app/components/ZeroResults/resources/default.svg","app/hooks/useCMUIHelpExperience/supportButton.svg","app/components/Logo/resources/microsoft.svg","app/components/Logo/resources/microsoftDark.svg","app/components/Logo/resources/microsoftGrey.png","app/pages/ad-management/Home/resources/partyPopper.svg","app/pages/ad-management/Adunit/TythonAdunit/resources/scriptPlacement.png","app/pages/ad-management/Adunit/TythonAdunit/resources/NoCodeFound.svg","app/pages/ad-management/Property/Create/variations/CreateTythonProperty/resources/fileIcon.svg","app/pages/ad-management/Property/Create/variations/CreateTythonProperty/resources/fishpool.svg","app/pages/ad-management/Property/Create/variations/CreateTythonProperty/components/CreateProperty/components/ClarityOptions/resources/codeFree.svg","app/pages/ad-management/Property/Create/variations/CreateTythonProperty/components/CreateProperty/components/ClarityOptions/resources/existingClarity.svg","app/pages/ad-management/Property/Create/variations/CreateTythonProperty/components/CreateProperty/components/ClarityOptions/resources/richBehavior.svg","app/pages/ad-management/Property/Create/variations/CreateTythonProperty/resources/clarityLogo.svg","app/pages/ad-management/Property/Create/variations/CreateTythonProperty/resources/scriptPlacement.png","app/pages/ad-management/Adunit/TythonAppAdUnit/components/resources/adPreviewBackground.png","app/pages/ad-management/Home/components/SetupCard/resources/ProfileStep4.svg","app/pages/ad-management/Home/components/PerformanceSection/resources/BalanceImg.svg","app/pages/ad-management/Home/components/PerformanceSection/resources/Data_Usage.svg","app/pages/ad-management/Property/Create/variations/CreateTythonAppProperty/resources/SearchIcon.svg","app/pages/ad-management/Property/Create/variations/CreateTythonAppProperty/resources/CreateAppIcon.svg","app/pages/about-us/resources/About-us-background-image.jpg","app/pages/about-us/resources/ads.png","app/pages/about-us/resources/man.jpg","app/pages/about-us/resources/money.png","app/pages/about-us/resources/one.png","app/pages/about-us/resources/three.png","app/pages/about-us/resources/time.png","app/pages/about-us/resources/two.png","app/pages/about-us/resources/twoWomen.jpg","app/pages/about-us/resources/woman.jpg","app/pages/error-pages/resources/UserNotFound.svg","app/pages/login/resources/loginBackgroundImage.svg","app/pages/ad-management/Account/Settings/@data/orchestrators/fetchPublisherPreferences.ts","app/pages/ad-management/Account/Settings/@data/orchestrators/fetchUserPreferences.ts","app/pages/ad-management/Account/Settings/utils/roleDifferentiationUtils.ts","app/pages/ad-management/Account/Settings/@data/orchestrators/publisherDeleted.ts","app/pages/ad-management/Account/Settings/@data/orchestrators/toggleNotificationPreferences.ts","app/pages/ad-management/Account/Settings/@data/orchestrators/updateNotificationPreferences.ts","app/pages/ad-management/Account/Settings/@data/orchestrators/updateUserLanguage.ts","app/pages/ad-management/Account/Settings/@data/orchestrators/userSelfDeleted.ts","app/pages/ad-management/Account/Settings/components/GoogleConnector/@data/orchestrators/onConnectGoogleAccount.ts","app/pages/ad-management/Account/Settings/components/GoogleConnector/@data/orchestrators/onDisconnectGoogleAccount.ts","app/pages/ad-management/Account/Settings/components/GoogleConnector/@data/orchestrators/onInitializeGoogleAccount.ts","app/pages/ad-management/Account/Settings/components/GoogleConnector/@data/orchestrators/onMediateGoogleAccount.ts","app/App.styles.ts","app/@data/services/AuthorizationService.ts","app/AuthenticatedRoute.tsx","app/pages/login/LoginPage.messages.ts","app/pages/login/components/RedirectionSpinner.tsx","app/@data/store/schema/enums/ResourceType.ts","app/@data/store/schema/enums/ResourceTypeDistribution.ts","app/components/Search/Search.base.tsx","app/components/Search/Search.styles.ts","app/components/Search/Search.tsx","app/components/Header/Header.messages.ts","app/components/Header/Header.styles.ts","app/components/Header/Header.tsx","app/layout/GlobalSearchHeader/@data/actions/onSearchTriggered.ts","app/layout/GlobalSearchHeader/@data/store/store.ts","app/layout/GlobalSearchHeader/@data/mutators/searchTriggered.ts","app/@data/services/GlobalSearchApiService.ts","app/layout/GlobalSearchHeader/@data/orchestrators/searchTriggered.ts","app/layout/GlobalSearchHeader/GlobalSearchHeader.styles.ts","app/layout/GlobalSearchHeader/GlobalSearchHeader.tsx","app/layout/PageLayout/PageLayout.styles.ts","app/layout/PageLayout/PageLayout.tsx","app/pages/GlobalSearch/@data/actions/onSearchTriggered.ts","app/pages/GlobalSearch/@data/store/store.ts","app/pages/GlobalSearch/@data/mutators/searchChanged.ts","app/pages/GlobalSearch/@data/store/schema/models/SearchResult.ts","app/pages/GlobalSearch/@data/store/schema/models/Account.ts","app/pages/GlobalSearch/@data/store/schema/models/AdFilter.ts","app/pages/GlobalSearch/@data/store/schema/models/AdUnit.ts","app/pages/GlobalSearch/@data/store/schema/models/Channel.ts","app/pages/GlobalSearch/@data/store/schema/models/Publisher.ts","app/pages/GlobalSearch/@data/store/schema/models/User.ts","app/pages/GlobalSearch/@data/store/schema/models/WebProperty.ts","app/pages/GlobalSearch/@data/services/GlobalSearchHelperService.ts","app/pages/GlobalSearch/@data/orchestrators/searchTriggered.ts","app/pages/GlobalSearch/GlobalSearchResultList/GlobalSearchResultList.messages.ts","app/pages/GlobalSearch/GlobalSearchResultList/GlobalSearchResultList.styles.ts","app/pages/GlobalSearch/GlobalSearchResultList/GlobalSearchResultList.tsx","app/pages/GlobalSearch/GlobalSearchResultPage/GlobalSearchResultPage.messages.ts","app/pages/GlobalSearch/GlobalSearchResultPage/GlobalSearchResultPage.styles.ts","app/pages/GlobalSearch/GlobalSearchResultPage/GlobalSearchResultPage.tsx","app/pages/GlobalSearch/GlobalSearchResultRouter.tsx","app/pages/about-us/AboutUsPage.messages.ts","app/pages/about-us/AboutUsPage.styles.ts","app/pages/about-us/AboutUsPage.tsx","app/layout/EntityCreationLayout/messages.ts","app/layout/EntityCreationLayout/styles.ts","app/layout/EntityCreationLayout/index.tsx","app/pages/ad-management/Ads/AdTypePage/index.tsx","app/pages/ad-management/Inventory/InventoryTypePage/index.tsx","app/pages/error-pages/InvalidUser/InvalidUser.styles.ts","app/pages/error-pages/InvalidUser/InvalidUser.tsx","app/utils/JwtDecoderUtils.ts","app/pages/login/@data/orchestrators/authPageInitialized.ts","app/pages/login/@data/orchestrators/loginButtonClicked.ts","app/pages/login/@data/store/schema/LoginPageErrorModel.ts","app/pages/login/@data/orchestrators/onSwitchAccount.ts","app/pages/login/@data/orchestrators/pubCenterAADLogin.ts","app/pages/error-pages/InvalidUser/InvalidUser.messages.ts","app/pages/error-pages/InvalidUser/UnauthorizedInternalUser.tsx","app/pages/error-pages/InvalidUser/UserDoesNotExist.tsx","app/pages/error-pages/InvalidUser/NoAccessPage/NoAccessPage.messages.ts","app/pages/error-pages/InvalidUser/NoAccessPage/NoAccesPage.tsx","app/pages/landing-page/LandingPage.tsx","app/pages/login/@data/mutators/userAuthentication.ts","app/pages/login/LoginPage.tsx","app/pages/login/LoginPage.styles.ts","app/pages/login/components/LoginPageView.tsx","app/pages/signup/component/SignupDetails/SignUpDetails.messages.ts","app/pages/partner-management/User/AcceptInvite/AcceptInvite.styles.ts","app/pages/partner-management/User/AcceptInvite/AcceptInvite.tsx","app/pages/support/messages.ts","app/pages/support/styles.ts","app/pages/support/useSupportPage.ts","app/pages/support/index.tsx","app/pages/terms-and-conditions/TermsNConditionsPage.tsx","app/utils/DomUtils.ts","app/utils/validation/validation.messages.ts","app/ApplicationRoute.tsx","app/utils/validation/ValidatorFactory.ts","app/App.tsx","serviceWorker.ts","index.tsx","app/@data/utils/redirectionUtils.ts"],"names":["getFormClassNames","classNamesFunction","windowStoreSerializer","useWindowSize","FormItemBase","observer","props","isWindowSmallSize","getStore","id","formWidth","theme","styles","role","ariaLabel","ariaLabelledBy","ariaDescription","ariaDescribedBy","formClassNames","descId","concat","getId","React","className","root","undefined","children","style","getScreenReaderTextStyles","FormItem","styled","display","width","marginBottom","spacing","size16","scope","iconButtonStyles","paddingLeft","size8","paddingRight","size12","paddingTop","paddingBottom","color","palette","neutralSecondary","fontSize","fonts","small","getClassNames","FormSectionBase","title","rightChevron","hasBorderBottom","expanded","setExpanded","useState","classNames","sectionWidth","spaceBetween","formSectionDescription","ChevronIcon","Icon","iconName","TitleLabel","titleLabel","onToggle","_props$sectionStateCh","sectionStateChange","call","onClick","onKeyDown","ev","isButtonPressKey","key","tabIndex","content","hidden","FormSection","borderTopWidth","borderBottomWidth","borderTopStyle","borderBottomStyle","borderColor","neutralLight","selectors","$content","justifyContent","alignItems","backgroundColor","white","height","cursor","neutralLighter","size32","mediumPlus","FormTitleBase","BaseComponent","render","articleQuery","calloutContent","calloutOnDismiss","iconButtonOnClick","noHelpPopup","intl","titleHeadingLevel","this","formatMessage","InfoButton","AppMessages","infoLabel","label","infoDescription","iconTitle","calloutProps","calloutWidth","FormTitle","flexWithAlignCenter","size20","defineMessages","account","defaultMessage","activate","delete","deactivate","duplicate","edit","code","information","atleastSelectOneAccount","deactivateLowercase","activateLowercase","enabledUppercase","disabledUppercase","export","download","downloadSelected","downloadPage","downloadAll","downloadSelectedCmdBtnAriaDesc","downloadPageCmdBtnAriaDesc","downloadAllCmdBtnAriaDesc","downloadCmdBtnAriaDesc","addFilter","filters","filtersDescription","updateFilters","addMetrics","modifyColumns","modifyColumnsDescription","updateColumns","publisher","noPublisherSelected","noAccountSelected","customerInvalid","upload","previous","continue","cancel","apply","search","finish","required","optional","support","default","status","partnerCodes","removeAll","addAll","add","replace","append","name","domain","multiSelectPickerSelectedItemsLabel","timezoneLabel","timezoneEST","timezoneIDL","address","city","countryOrRegion","stateOrProvince","zipcode","language","country","currency","deactivateGenericTitle","deleteGenericTitle","neverMind","all","adUnits","adFilters","channels","publishers","reporting","properties","site","accounts","users","userInvitations","showMore","back","loadingLabel","loadingStatusLabel","loadingWaitingLabel","submit","save","saving","createChannel","close","on","off","here","learnMore","statusActive","statusInactive","skipToMainContent","next","yes","performanceCardTitle","sitesCardTitle","adUnitsCardTitle","mediationCardTitle","countryCardTitle","moreOptionsButtonAriaLabel","selectedCount","sortByColumnHeaderTooltipLabel","panelCloseButtonAriaDesc","userDeleteWarning","confirmActionMessage","permanentDelete","ariaLabelForSave","ariaLabelForGrid","ariaLabelForListHeader","ariaLabelForSelectionColumn","ariaLabelForSelectAllCheckBox","checkButtonAriaLabel","ariaLabelForShimmer","checkButtonGroupAriaLabel","checkBoxLabel","servingStatus","navAdFilters","navChannels","navAdUnits","navSites","navProperties","navAdQuality","navHome","navAdBlocks","navReports","navAccount","navPublisherManagement","navAccountManagement","navUserManagement","actions","fetchNotificationsError","dismissNotificationsError","detailPageFooterArialLabel","of","readMore","adUnit","adFilter","channel","property","user","deleteNotificationSingleItem","deleteNotificationSingleItemCont","deleteNotificationPlural","deleteNotificationPluralCont","duplicateNotificationSingleItem","duplicateNotificationSingleItemCont","duplicateNotificationPlural","duplicateNotificationPluralCont","listId","listIds","activatedUpperCase","deactivatedUpperCase","activatedLowerCase","deactivatedLowerCase","changingStatusItemName","changingStatusItemsSelection","changingStatusSingular","changingStatusPlural","failedToFetchUserScope","sessionExpiredLoginAgain","contactSupport","navInventory","navAds","organization","individual","CSVHelper","escapeStringForCSV","stringToEscape","extractDate","dateTimeStamp","substring","getBlockingStatus","isEnabled","getBlockRequestSource","val","_getStore$active$bloc","active","blockRequestSourceData","get","getRevenue","revenue","populateNull","getAdProvider","provider","adProvidersToNames","getXandrAdProvider","xandrAdProvidersToNames","getStatus","LifeCycleStatus","Inactive","getPlacement","dataRow","extractPlacement","getXandrPlacement","locale","downloadDataAsCSV","csvData","csvHeaders","csvFilename","csvFileData","encodedCSV","encodeURI","csvLink","document","createElement","setAttribute","body","appendChild","click","removeChild","getCSVStrings","rowData","columns","cells","forEach","col","cellData","columnName","exportFunction","friendlyName","isNaN","push","join","getCSVStringsV2","fieldName","_col$sortableValue","sortableValue","toString","roundNumber","num","decimalPlaces","modifier","Math","trunc","round","Number","EPSILON","getSuccessNotificationDeleteItem","selectedItems","entityInstance","ids","length","selectedItem","messages","entityInstanceMapping","singularize","IDs","getSuccessNotificationDuplicateItem","getSuccessNotificationChangingStatus","commandName","changingStatusMapping","toLocaleLowerCase","adunits","adunit","filter","Deactivate","Activate","Model","constructor","accessPermission","Account","params","super","_defineProperty","UserRoleEntity","Object","assign","or","publisherName","accountName","primaryContact","lanuage","timeZone","paymentOption","financialStatus","paymentLifecycle","operationCostRation","accountLevelAttribute","inHousePromotion","partnerCodesforDistributionReport","formCodesforDistributionReport","startDistributionReporting","SKUs","AdBlock","adBlock","enablePublisherBlocks","enableSiteBlocks","editDomainBlocks","editCategoryBlocks","AdUnit","businessModel","channelList","inhousePromotions","markeplaceClassification","distributionPartnerCodes","publisherGroupConfig","servingTier","Channel","adUnitList","DropdownMenu","menu","adManagement","partnerManagment","Filter","excludedAdKeywords","excludedQueryKeywords","excludedURLs","filterType","appendOnly","NavigationMenu","home","adblock","publisherProfile","adquality","dashboard","auditHistory","Property","approvalStatus","notes","websiteURL","attachedAdUnits","clarity","Publisher","partner","networkAffiliation","publisherTier","overrideFeatureTier","entityLimitTier","serviceLevel","allowDistributionReporting","allowDistributionV2Reporting","allowStartDistributionReporting","allowStartDistributionContentReporting","allowSelectTierReporting","allowMediationReporting","allowMobileSearchAdUnit","allowNativeReporting","allowSyndicationReporting","allowWebAdUnit","allowPaidSearchReportingApi","allowPaidSearchReportingDashboard","allowDynamicPropertyRegistration","enableDefaultTythonV2Reporting","publisherAllowedFeaturesPropertyAutoApproved","ipRanges","newAccount","PublisherProfileTabs","publisherProfileTabs","profile","userManagement","payments","settings","PublisherSettings","publisherSettings","mediation","publisherPreferences","publisherDelete","User","userFirstName","userLastName","userEmail","userLanguage","userAccountRole","userInviteFirstName","userInviteLastName","userInviteEmail","userInviteLanguage","userInviteAccountRole","UserSettings","userSettings","systemPreferences","billingAlerts","profileReview","invitedUsers","userDelete","userRoleKey","completeAccess","rolePermissions","Map","tythonUserRolePermissions","hasReadAccess","hasCreateAccess","hasUpdateAccess","hasDeleteAccess","async","setUserRoles","userContext","url","uiConfig","getApiBaseAddress","headers","buildRequestHeadersWithAuthToken","response","onLoadingChanged","onLoadingSetting","setTimeout","onLoadingWaiting","fetch","method","ok","isLocationPubCenter","handleApiErrors","responseJson","json","data","userType","Log","debug","parentCustomer","roleIds","userRoles","onUserContextChanged","parentCustomerId","accessiblePublisherList","accessiblePublishers","onDefaultPublisherSet","onAccessiblePublisherListChanged","localStorage","setItem","DEFAULT_PUBLISHER_CACHE_KEY","setUserContext","setUserRolesInCache","err","error","onNotificationChanged","textMessageDescriptor","messageBarType","MessageBarType","clearTimeout","roleId","entities","isTythonSelfServeUser","entity","userRoleEntity","set","userRolesJSON","value","JSON","stringify","APP_NAME_PUBCENTER","APP_NAME_NEW","APP_NAME_SHORT","APP_NAME_NEW_COMPACT","PUBCENTER_TITLE","MAIN_CONTENT_ID","COPY_BUTTON_TIMEOUT","NOTIFICATION_DISMISS_TIMEOUT","TOKEN_EXPIRED_SEARCH_PARAM_KEY","CLARITY_HOME_WEB_APP","CLARITY_WEB_APP","CLARITY_PRIVACY_STATEMENT","CLARITY_DEMO","CLARITY_PRIVACY_DISCLOSURE","WAITLIST_FORM","USER_SIGNUP_KEY","DEFAULT_COUNTRY_NAME","DEFAULT_COUNTRY_CODE","DEFAULT_CURRENCY_CODE","NO_VALUE_PLACEHOLDER","SESSION_NOTIFICATIONS_UI","SESSION_DISMISSED_NOTIFICATIONS_BACKEND","SUPPORT_EMAIL","TYTHON_SUPPORT_EMAIL","TNC_HREF_PATH","PRIVACY_STATEMENT","_process$env$REACT_AP","process","REACT_APP_DEFAULT_ADUNIT_IMAGE_ASPECT_RATIO","_process$env$REACT_AP2","_process$env$REACT_AP3","REACT_APP_ADUNIT_IMAGE_ASPECT_RATIOS","split","CUSTOM_WIDTH","CUSTOM_NOTIFICATIONS_WIDTH","PAGINATION_PAGE_SIZES","REDIRECT_URI_SESSION_STORAGE_KEY","TYTHON_DOMAIN_REDIRECTION_CACHE_KEY","DOMAIN_REDIRECTION_QUERY_PARAM","ENTERPRISE_USER_ACCESS_URL","ADS_DOT_TEXT_HELP_URL","CONNECT_SITE_HELP_URL","SITE_APPROVAL_HELP_URL","PUBLISHER_EVALUATION_HELP_URL","WELCOME_SEND_FLAG","LOCAL_STORAGE_LOCALE","UNAUTHORIZED_LOCAL_STORAGE_LOCALE","EN_LOCALE_KEY","FR_LOCALE_KEY","DE_LOCALE_KEY","IT_LOCALE_KEY","ES_LOCALE_KEY","EN_GB_LOCALE_KEY","ES_MX_LOCALE_KEY","FR_CA_LOCALE_KEY","TythonColumnsEnum","defaultInitialTextFilterState","condition","isApplied","createStore","loading","panelIsOpen","panelItemType","filterPanel","blockAdsPage","adPerfBlockAdsData","blockReasonsL2","pageType","errors","blockedAdsContext","blockedImagesContext","teachingBubbleStartDate","teachingBubbleEndDate","adDescription","AdQualityFilterNames","AccountName","values","AdProviders","Markets","CreativeAdId","conditions","Advertiser","AdvertiserId","AdvertiserAccountId","AdId","AdTitle","AdURL","LongHeadline","ShortHeadline","raw","RoutePrefix","getGlobalRoutes","report","text","icon","component","ReportRouter","AdManagementRouter","partnerManagement","PartnerManagementRouter","DefaultRoute","SignUpPageRoute","LandingPageRoute","LogInPageRoute","AccountPageRoute","AcceptInvitePageRoute","UserDoesNotExistErrorPageRoute","NoAccessErrorPageRoute","UnauthorizedInternalUserPageRoute","HomePageRoute","AuditHistoryRoute","UserLevelSettingRoute","SupportPageRoute","ChartTypes","ChartGrain","ReportCardType","onAcceptInvitePageInitialized","action","invitationCode","invitationLocale","onAcceptInvitePageSubmitted","validateUserInvitationCode","onDevTokenPanelShown","devTokenPanelParams","onDevTokenPanelHide","onFetchDevTokenStatus","onGenerateDevTokenStatus","onRawChanged","onUserChanged","onFetchUsersLoading","isLoading","onFetchingUsersData","isFetchingData","onUserInvitationsChanged","onFetchUserInvitationsLoading","onFetchingUserInvitationsData","onUsersChanged","onUserErrorChanged","onUserInvitationChanged","mode","onUserInvitationExpiryChanged","onFormIdChanged","onFormFirstNameChanged","onFormLastNameChanged","onFormPhoneNumberChanged","onFormEmailAddressChanged","onFormUsernameChanged","onFormLanguageChanged","onFormUserLocaleChanged","onFormContactByEmailChanged","onFormContactByPhoneChanged","onFormAccountRoleChanged","onFormRoleAccountListChanged","onFormInitialized","publisherId","entityId","onFormCancelled","onFormCleared","onFormSubmitted","routeHistory","sendWelcomeToPubcenterEmail","fetchAdUnitsDataAction","fetchAdUnitMediationStatus","adUnitId","showLoadingSpinner","showNotifications","updateAdUnitMediationStatus","state","onAdunitChanged","onAdunitErrorChanged","onAdunitMediationUpdateStart","onAdunitMediationUpdateEnd","accountId","onFetchAdUnitName","setIsLoading","onFetchAdUnitTemplate","onAdunitIdChanged","onAdunitNameChanged","onAdunitTypeChanged","onMarketplaceChanged","onBusinessModelChanged","onChannelsChanged","onAdunitChannelListChanged","onAssociatedPropertyChanged","onAdunitPropertyListChanged","onCreatePropertyPanelOpenChanged","isOpen","onServingTierChanged","onPubGroupConfigChanged","onStoreIdsChanged","onAdUnitFormSubmittable","isSubmittable","onSubmit","stepState","shouldHandleMediation","onAdUnitNameUpdate","setErrorMessage","setVisibleCallOut","onDistributionPartnerCodesChanged","onImpressionFeedbackSignalChanged","onPanelOpenChanged","isPanelOpen","activePropertyId","activeAdUnitId","defaultGridCellTextStyle","fontWeight","useCanvasTextWidth","arguments","boundary","setWidth","useEffect","context","getContext","fontParts","fontStyle","fontVariant","lineHeight","fontFamily","font","Boolean","metrics","measureText","useDebouncedValue","delay","debouncedValue","setDebouncedValue","timer","debounce","func","wait","timeout","_len","args","Array","_key","later","useIntersectionObserverWithRefCallback","_ref","threshold","rootMargin","unobserve","ref","useRef","entry","setEntry","updateEntry","_ref2","intersectionObserverEntry","updateEntryAndUnobserve","_ref3","isIntersecting","current","useCallback","node","IntersectionObserver","observe","useNativeAdSdk","isSdkLoaded","setSdkLoaded","script","src","crossOrigin","onload","head","usePUID","puid","setPUID","msalAccountKeys","getItem","keysArray","parse","isArray","_JSON$parse","idTokenClaims","console","usePreloadSVGImages","imageList","preloadContainer","imageSrc","img","Image","useSortableGridColumns","items","onSortItems","onCleanupSortItems","gridColumns","setGridColumns","handleColumnHeaderClick","column","suppressSorting","stopPropagation","newColumns","slice","currColumn","currCol","isSortedDescending","isSorted","sortedItems","sortItemsBasedOnColumn","useStateWithLatestCallback","initialState","setState","stateRef","getState","windowSizeFormatter","onWindowResize","mutatorAction","innerHeight","innerWidth","window","resizeTo","store","windowSize","windowSizeType","isWindowExtraSmallSize","isWindowMediumSize","isWindowRegularSize","StoragePublisherKey","StorageAccountKey","StorageUserContextKey","StorageIsUserInviteFlowKey","StorageUserInvitationCodeFlowKey","storedNotifications","sessionStorage","getAppStore","restoreTypeWithObject","waiting","openedPopup","PopupType","None","openedPanel","CustomPanelType","isFirstTimeUser","isUserSuspended","menuCollapsed","isInviteUserFlow","userInvitationCode","notifications","toastNotifications","notificationPanelCollapsed","panelNotifications","UserContext","helpInfo","entityGridColumns","defaultPublisher","deleteAdUnitTemplateOnSubmit","_localStorage$getItem","flexWithCenter","flexWithJustifyBetween","noPointerEvents","pointerEvents","zeroMarginPTag","margin","onAccountChanged","onAccountSelected","onAuthLogout","isTokenExpired","userDetails","onEntityGridColumnsChanged","entityColumnsData","onHelpInfoCalloutOpened","popupId","onHelpInfoChanged","onLayoutChanged","layout","onMenuCollapsedChanged","collapsed","onNavigateBack","returnUrl","redirectToReportingDashboard","handleDomainRedirection","username","pathname","notification","onNotificationRemoved","onNotificationCardAdded","onNotificationCardRemoved","onDismissAllNotifications","fetchBackendNotifications","onNotificationPanelItemsChanged","onDismissNotification","onNotificationPanelClosed","isClosed","onPublisherChanged","onPublisherSelected","onPublisherAccountChanged","onUserFirstTime","ProfileReviewTSTFailedTitle","ProfileReviewTSTFailedContent","MissingPaymentInformationTitle","MissingPaymentInformationContent","MissingPaymentInformationPrimaryActionLabel","PolicyUpdatePrimaryActionLabel","PaymentFailedTitle","PaymentFailedReason_account_closed","PaymentFailedTitle_bank_account_restricted","PaymentFailedReason_bank_account_restricted","PaymentFailedReasonStripe_could_not_process","PaymentFailedReason_could_not_process","PaymentFailedTitle_declined","PaymentFailedReason_declined","PaymentFailedTitle_expired_card","PaymentFailedReason_expired_card","PaymentFailedTitle_incorrect_account_holder_name","PaymentFailedReason_incorrect_account_holder_name","PaymentFailedTitle_invalid_account_number","PaymentFailedReason_invalid_account_number","PaymentFailedTitle_invalid_card","PaymentFailedReason_invalid_card","PaymentFailedTitle_invalid_currency","PaymentFailedReason_invalid_currency","PaymentFailedTitle_lost_or_stolen_card","PaymentFailedReason_lost_or_stolen_card","PaymentFailedTitle_no_account","PaymentFailedReason_no_account","PaymentFailedReasonLocate_no_account","ClarityLinkExpiredTitle","ClarityLinkExpiredContent","ClarityLinkDeclinedTitle","ClarityLinkDeclinedContent","ClarityLinkExpiredPrimaryActionLabel","ClarityLinkDeclinedPrimaryActionLabel","ClarityLinkExpiredSecondaryActionLabel","ClarityLinkDeclinedSecondaryActionLabel","ChooseGamNetworkFailureContent","ChooseGamNetworkFailureTitle","ChangingItemStatusFailureTitle","ChangingItemStatusFailureContent","DeletingItemFailureTitle","DeletingItemFailureContent","DuplicateGridItemFailureTitle","DuplicateGridItemFailureContent","GridDataDownloadFailureTitle","GridDataDownloadFailureContent","FeedbackErrorMessageContent","FeedbackErrorMessageTitle","FeedBackInvalidFormMessageContent","FeedBackInvalidFormMessageTitle","PropertyEditFailedNotificationContent","PropertyEditFailedNotificationTitle","LoadingSitesFailedTitle","LoadingSitesFailedContent","DuplicatedSiteCreationErrorNotificationTitle","DuplicatedSiteCreationErrorNotificationContent","AdblockUpdateFailedTitle","AdblockUpdateFailedContent","AdblockToggleFailedContent","AdblockToggleFailedTitle","ToggleUniversalBlockFailedContent","ToggleUniversalBlockFailedTitle","UniversalAdblockUpdateFailedContent","UniversalAdblockUpdateFailedTitle","PayoutInformationFailedContent","PayoutInformationFailedTitle","LoadingBalanceDataFailedContent","LoadingBalanceDataFailedTitle","LoadPayoutInfoFailedContent","LoadPayoutInfoFailedTitle","DeletingUserWentWrongContent","DeletingUserWentWrongTitle","PaymentFailedAccountClosedTitle","PaymentFailedAccountClosedContent","PaymentFailedBankAccountRestrictedTitle","PaymentFailedBankAccountRestrictedContent","PaymentFailedStripeCouldNotProcessTitle","PaymentFailedStripeCouldNotProcessContent","PaymentFailedCouldNotProcessTitle","PaymentFailedCouldNotProcessContent","PaymentFailedDeclinedTitle","PaymentFailedDeclinedContent","PaymentFailedExpiredCardTitle","PaymentFailedExpiredCardContent","PaymentFailedIncorrectAccountHolderNameTitle","PaymentFailedIncorrectAccountHolderNameContent","PaymentFailedInvalidAccountNumberTitle","PaymentFailedInvalidAccountNumberContent","PaymentFailedInvalidCardTitle","PaymentFailedInvalidCardContent","PaymentFailedInvalidCurrencyTitle","PaymentFailedInvalidCurrencyContent","PaymentFailedLostOrStolenCardTitle","PaymentFailedLostOrStolenCardContent","PaymentFailedNoAccountTitle","PaymentFailedNoAccountContent","PaymentFailedNoAccountLocatedTitle","PaymentFailedNoAccountLocatedContent","CreateTythonAdUnitFailedTitle","ProfileInformationUpdatedTitle","ProfileInformationUpdatedContent","onInitializeProfilePage","countryCode","fetchPublisherProfileDetailsAction","updatePublisherProfileAction","fetchUserDetailsAction","userId","editProfileAction","validateAndPreviewProfileChangesAction","isVerificationRequired","generateVerificationCode","verifyGeneratedCode","validateAddress","validateOrgAddress","submitEvidenceDocument","setDocumentUploadStatus","documentContent","fetchAppealHistory","dialogType","panelType","filterMenuCalloutOpen","isSearchCalloutVisible","searchWord","paginator","currentPageSize","currentPageNumber","numberOfPages","entityType","EntityType","notificationPreferences","eTag","initializeIcons","registerIcons","fontFace","icons","AdUnitChannel","AdUnitBlock","Notifications","ShowAll","PubcenterTheme","headerGlobal","themeLighterAlt","themeLighter","themeLight","themePrimary","themeTertiary","themeSecondary","themeDarkAlt","themeDark","themeDarker","neutralLighterAlt","neutralQuaternaryAlt","neutralQuaternary","neutralTertiaryAlt","neutralTertiary","neutralPrimaryAlt","neutralPrimary","neutralDark","black","redDark","blue","blueDark","messageBarError","severeError","warning","success","antiqueBronze","seaGreen","lowContrastBlue","disabledGray","eerieBlack","highContrastPrimary","highContrastLink","raisinBlack","grayX11","gray","neutralTertiaryWhiteContrast","neutralSecondaryAltWhiteContrast","taupeGray","darkSilver","frenchBlue","azureishWhite","paleChestnut","lavenderBlush","venetianRed","honeydew","grannySmithApple","deepGreen","neutralForeground1Rest","neutralForeground2Rest","neutralForeground3Rest","neutralBackground1Selected","neutralBackground4Rest","neutralStroke2Rest","brandForeground1Rest","statusSuccessBackground1Rest","statusSuccessForeground1Rest","statusSuccessStroke1Rest","size0","size1","size2","size3","size4","size5","size6","size7","size10","size14","size15","size18","size22","size24","size28","size30","size36","size40","size44","size46","size48","size50","size52","size54","size56","size60","size64","size72","size80","size92","size96","size100","size120","size126","size128","size142","size146","size150","size159","size160","size180","size192","size200","size220","size250","size256","size260","size300","size320","size350","size360","size480","size500","size600","size896","size960","size14Medium","size42","boxShadow","soft","aesthetic","creative","raised","FluentTheme","loadTheme","PubcenterCustomizations","BreakPoints","AccessibilityContrast","acceptInvite","createUser","firstName","lastName","emailAddress","preferredLanguage","accountRole","accountManager","accountManagerDescription","reportUser","reportUserDescription","listManager","listManagerDescription","adViewer","adViewerDescription","administrator","administratorDescription","superAdmin","superAdminDescription","createPageTitle","editPageTitle","pageDescription","telephoneNumber","faxNumber","userAccountInfo","userName","password","confirmPassword","secretQuestion","secretAnswer","marketingContactSetting","email","phone","postalMail","updateUser","accountMultiSelectPickerAriaDesc","useDifferentAccountMessage","switchNow","resendingUserInvitation","resendUserInvitationSuccess","deletedUserInvitationSuccess","COUNTRY_WISE_ZIP_CODES_REGEX","AF","format","regex","AX","AL","DZ","AS","AD","AO","AI","AG","AR","AM","AW","AC","AU","AT","AZ","BS","BH","BD","BB","BY","BE","BZ","BJ","BM","BT","BO","BQ","BA","BW","BR","IO","VG","BN","BG","BF","BI","KH","CM","CA","CV","KY","CF","TD","CL","CN","CX","CC","CO","KM","CG","CD","CK","CR","CI","HR","CU","CW","CY","CZ","DK","DJ","DM","DO","TL","EC","SV","EG","GQ","ER","EE","ET","FK","FO","FJ","FI","FR","GF","PF","TF","GA","GM","GE","DE","GH","GI","GR","GL","GD","GP","GU","GT","GG","GN","GW","GY","HT","HM","HN","HK","HU","IS","IN","ID","IR","IQ","IE","IM","IL","IT","JM","JP","JE","JO","KZ","KE","KI","KP","KR","XK","KW","KG","LV","LA","LB","LS","LR","LY","LI","LT","LU","MO","MK","MG","MW","MV","MY","ML","MT","MH","MR","MU","MQ","YT","FM","MX","MD","MC","MN","ME","MS","MA","MZ","MM","NA","NR","NP","NL","NC","NZ","NI","NE","NG","NU","NF","MP","NO","OM","PK","PW","PA","PG","PY","PE","PH","PN","PL","PT","PR","QA","RE","RO","RU","BL","SH","KN","LC","MF","PM","VC","SM","ST","SA","SN","RS","SC","SX","SL","SG","SK","SI","SB","SO","ZA","GS","ES","LK","SD","SR","SZ","SE","CH","SJ","SY","TW","TJ","TZ","TH","TG","TK","TO","TT","TN","TR","TM","TC","TV","UG","UA","AE","GB","US","UY","VI","UZ","VU","VA","VE","VN","WF","YE","ZM","ZW","getAddressValidationModel","object","shape","line1","string","line2","postalCode","when","schema","test","message","regExp","RegExp","IdNamePairErrorModel","number","trim","handleError","Promise","reject","constructUrl","baseUrl","models","defaultParams","urlArray","model","str","encodeURIComponent","convertDateToString","date","toISOString","constructAdPerfRequest","accountIds","_body$Filters","StartDate","selectedAdSource","AdSource","XandrAuction","startDate","EndDate","endDate","PageNumber","PageSize","Filters","Keyword","searchBoxValue","Creativeagglevel","Microsoft","AGG_LEVEL_LISTING","Auction","AGG_LEVEL_CREATIVE","AdTypes","PAGE_ADS","TEXT_ADS","AdSources","AUDIENCE_INTENT_MARKETPLACE","PAID_SEARCH","Fields","Numerical","isImageBlockable","adtype","adsource","isNativeStockPhoto","indexOf","isPaCorpusImage","isImageBlocked","adId","blockedImages","isBlocked","imageReportDataTuple","imageUrl","includes","mapAdIdImages","has","compareImages","isAllImagesViewOnly","imgs","every","image","allImages","imageToCompare","strippedImages","processImagesLink","imageUrls","noImageUrl","isAuctionData","v","imgIndex","sanitizeBingImageUrl","imgUrl","item","regions","pagetypes","exportCSV","blockDataForCSV","fileName","stringDataForCSV","isExportColumn","headerCsvList","coldata","headerCSV","toHttpsLink","urlToUpdate","startsWith","samBlockSummaryToAdPerfMapper","mappedItems","adProvider","allAdImages","apiPath","adTitle","invert","advertiserName","advertiser","images","sevenDayRevenueImpact","uniqueCreativeAdId","creativeAdId","blockDatatoAdPerfMapper","pastRevenue","advertiserAccountId","getGridPropertyStore","isCodePanelOpen","isFetchingPropertyStatus","FilterType","FilterCondition","getAdUnitRoute","getCurrentPublisherId","RouteName","getSitesRoute","getTythonPublisherRoute","getTythonProfilePageRoute","PROFILE_TAB_KEY","getTythonPaymentPageRoute","PAYMENTS_TAB_KEY","getTythonAccountSettingPageRoute","SETTINGS_TAB_KEY","getTythonHomePageRoute","getTythonAdUnitCreatePageRoute","getTythonSiteCreatePageRoute","getTythonInventoryPage","renderAppView","inventory","getTythonInventoryCreationPageRoute","getTythonAdsCreationPageRoute","ads","getTythonAppAdunitCreationRoute","getTythonAppAdunitEditionRoute","getTythonAppInventoryCreationRoute","getTythonAppInventoryEditionRoute","getTythonReportDashboardPageRoute","REPORT_DASHBOARD_PAGE","getAdBlocksPageRoute","getTythonAdsManageRoute","PUBCENTER_TYTHON_DOMAIN_MAPPING","TYTHON_NEW_PROD","PUBCENTER_DOMAINS","getAdunitStore","enablePrivateMarketplace","adUnitsRaw","isFetchingAdUnitStatus","mediationUpdatePool","scriptProps","UserType","TythonSelfServe","isNotAuthorizedUser","isLocalRetrieved","isInternalUser","_store$defaultPublish","_store$publisher","defaultPublisherId","setSearchWord","word","setIsSearchCalloutVisible","isVisible","setData","setSelectedItems","setLoading","setQuery","query","setEntity","setFilterMenuCalloutStatus","setDialogType","setPanelType","onPageSizeChanged","ceil","onPageNumberChanged","onNumberOfPagesChanged","columnVisibilityMappings","getGridColumns","entityColumns","find","entityGridColumn","colVisMap","gridColumn","columnKey","LOADING_SPINNER","REPORTING_DATE_RANGE_PICKER","DATE_RANGE_PICKER_PRESET_CUSTOM","DATE_RANGE_PICKER_PRESET_TODAY","DATE_RANGE_PICKER_PRESET_YESTERDAY","DATE_RANGE_PICKER_PRESET_THIS_WEEK_SUN_TODAY","DATE_RANGE_PICKER_PRESET_THIS_WEEK_MON_TODAY","DATE_RANGE_PICKER_PRESET_LAST_7_DAYS","DATE_RANGE_PICKER_PRESET_LAST_WEEK_SUN_SAT","DATE_RANGE_PICKER_APPLY_BUTTON","GRAIN_SELECTOR_BUTTON","PERFORMANCE_CHART_TYPE_LINE_BUTTON","PERFORMANCE_CHART_TYPE_BAR_BUTTON","PERFORMANCE_CHART_TYPE_DONUT_BUTTON","ADUNIT_CHART_TYPE_GRID_BUTTON","ADUNIT_CHART_TYPE_BAR_BUTTON","ADUNIT_CHART_TYPE_DONUT_BUTTON","COUNTRY_CHART_TYPE_MAP_BUTTON","COUNTRY_CHART_TYPE_BAR_BUTTON","COUNTRY_CHART_TYPE_GRID_BUTTON","MEDIATION_CHART_TYPE_GRID_BUTTON","MEDIATION_CHART_TYPE_BAR_BUTTON","MEDIATION_CHART_TYPE_DONUT_BUTTON","SITE_CHART_TYPE_BAR_BUTTON","SITE_CHART_TYPE_GRID_BUTTON","SITE_CHART_TYPE_DONUT_BUTTON","CHART_WRAPPER","CLARITY_BEHAVIORAL_RADIO_BUTTON","CLARITY_BASIC_RADIO_BUTTON","CLARITY_EXISTING_RADIO_BUTTON","PROPERTY_NAME_INPUT","PROPERTY_DOMAIN_INPUT","reportTitle","reportDescriptionForPublisherSelected","reportDescriptionForPublisherNotSelected","reportDescriptionForReportsNotApplicable","reportLink","metricsDropdownLabel","shareScheduleDropdownLabel","viewReportLink","noData","breakDownBy","toggleChartIcon","chartSelectIcon","metricPickerEditButtonTitle","exportPNG","chartIncompatibleFieldsWithFilterWillNotBeShown","chartIncompatibleFieldsWithFilterCantBeShown","gridIncompatibleFieldsWhenAddingColumnWithFilter","gridIncompatibleFieldsWhenAddingColumnWithBreakdown","gridIncompatibleFieldsWhenAddingColumnWithFilterAndBreakdown","gridIncompatibleFieldsWithFilter","gridIncompatibleFieldsWithBreakdown","gridIncompatibleFieldsWithFilterAndBreakdown","gridIncompatibleFieldsWhenBreakingDown","topBarExportPNG","dimensionColumnMembersFailedMessage","loadingReportSummaryFailedMessage","loadingReportFailedMessage","loadingDetailedReportFailedMessage","loadingMediationReportFailedMessage","loadingReportMetadataFailedMessage","loadingPublisherDetailsFailedMessage","failedToExportReportAsPNG","reportInvalidState","failedToFetchPublisherReportDetails","reportsNotAvailableAtThisTime","onSetFirstPartyBoost","PublisherTier","SelfServe1stPartyBoost","onPopupOpenChanged","showSuccessToastNotification","appendNewNotification","ToastType","showInfoToastNotification","info","showErrorToastNotification","showLoadingToastNotification","onDismiss","Error","suppressAutoDismiss","noDismissButton","removeToastNotification","indexOfNotification","findIndex","type","crypto","randomUUID","isOfflineUI","some","location","hostname","uiConfigInternal","apiBaseAddress","metadataApiBaseAddess","customerMetadataApiBaseAddess","adUnitMetadataApiBaseAddress","adQualityApiBaseAddress","reportingDashboardAddress","reportingApiBaseAddress","mediationReportingApiBaseAddress","defaultApiVersion","apiVersion","replaceApiVersion","getMetadataApiBaseAddress","getCustomerMetadataApiBaseAddress","getAdUnitMetadataApiBaseAddress","getAdQualityApiBaseAddress","getReportingDashboardAddress","commonSessionId","getDefaultApiVersion","getReportingApiBaseAddress","getMediationReportingApiBaseAddress","endpointBaseAddress","String","getApexInitUrl","CommandBarActions","Direction","GridSelectionMode","DownloadOption","getReportColumnMetadataDisplayName","messageId","getReportMetadataColumnMessageId","formatReportMetadataMessageById","getReportGrainsMetadataDisplayName","getReportMetadataGrainMessageId","ReportMetadataMessages","_window","_window2","partnerCodesEnabledPublishers","isPartnerCodeEnabled","tokenHeaderMap","TokenType","SessionGuid","PubCenterAADToken","includeDefaultHeaders","defaultHeaders","tokenHeader","token","fetchPubCenterAADAccessTokenAsync","Headers","header","aadConfig","auth","devToken","setPropertyData","setFetchingData","isFetching","setPropertiesServingConfigs","configs","servingConfigs","setPropertiesFetching","setClarityPanelVisibility","setCodePanelVisibility","clarityStatus","selectedPropertyId","clarityPanel","setSelectedPropertyId","usersTab","userInvitationsTab","noEntityFound","gridNotReadyLabel","superAdminDesc","accountManagerDesc","reportUserDesc","changeUserRole","roleChangePanelDesc","deleteConfirmationDialogTitle","deleteConfirmationDialogDesc","deleteButtonText","searchByNamePlaceholder","loadUserDetailsFailed","userRoleChangeFailed","userManagementInvalidState","userManagementFailedToDeleteItem","editedUserRoleSuccessfully","PUBLISHER_BASED_ROUTES","defaultRoute","getAdManagementStore","doNotRenderDefaultPage","errorLogMessage","_responseJson$errors","errorObj","_userContext$userName","write","resolve","ApiError","tokenType","loginUserWithAdditionalClaims","errorCode","ApiErrorCodes","UserDoesNotExist","origin","host","signupPageRoute","UserDoesNotExistPageRoute","InvalidOAuthToken","InvalidCCAuthToken","InvalidUserCredentials","UserAlreadyMigrated","UserIdNotFound","showTokenExpirationNotification","errorMessage","DefaultLogUserContext","logUserContext","getInstance","logParams","Instance","logMessage","logtype","LogType","INFO","logManager","logManagers","log","DEBUG","warn","WARN","ERROR","environment","LoggingUtils","getEnvironment","Environment","TEST","AriaLoggerManager","ConsoleLoggerManager","option","center","zoom","authOptions","authType","AuthenticationType","subscriptionKey","BubbleLayer","popup","Popup","closeButton","useI18n","map","feature","minValue","min","maxValue","max","link","href","rel","mapInstance","atlas","events","controls","control","ZoomControl","position","ControlPosition","TopRight","datasource","source","DataSource","sources","bubbleLayer","layer","radius","strokeWidth","layers","symbolLayer","SymbolLayer","iconOptions","textOptions","textField","offset","e","shapes","getProperties","coordinates","getCoordinates","popupContent","dimension","formattedValue","setOptions","pixelOffset","open","dispose","highchartsAccessibility","HighCharts","HighChartsMap","CustomChart","options","dataMetric","chartComponentRef","finalOptions","credits","enabled","chart","scrollablePlotArea","minWidth","reflow","xAxis","tooltip","shared","HighChartsWrapper","highcharts","constructorType","AuthenticationUtils","createNewGuid","guidHolder","hex","r","guidResponse","i","random","getStyles","minHeight","userSelect","ZeroTotalChart","CHART_COLOR_TOKENS_GRADIENTS","DataVizPalette","color1","color2","color3","color4","color5","color6","color7","color8","color9","color10","color11","getColorFromToken","METRICS_COLORS","Revenue","main","gradients","ImpressionsServed","Impressions","ImpressionsViewed","ViewableImpressions","eCPM","AdECPM","Clicks","AdClicks","Viewability","ImpressionsRate","CTR","AdCTR","FillRate","MeasurableImpressionsRate","MeasurableImpressions","EligibleImpressions","ResponsesServed","MAX_TOP_ROWS","OTHERS_NAME","getShimmerCustomElements","chartType","BAR","ShimmerElementsGroup","flexWrap","shimmerElements","ShimmerElementType","line","verticalAlign","gap","DONUT","circle","LINE","MAP","GRID","mapToGridData","metric","mainDimension","index","roundMetric","mapToDonutChartData","chartTitle","chartData","colorIndex","getMetricColorIndex","legend","getGradientColor","metricKey","_getMetricColor","getMetricColor","_METRICS_COLORS$metri","metricColor","mapToBarChartData","total","point","barXData","horizontalBarChartdata","x","y","xAxisCalloutData","yAxisCalloutData","mapToLineChartData","activeMetrics","dateDimension","series","lineDataByDimension","row","keys","activeMetric","isActive","topDataByMetric","getTopData","dataByDimension","reduce","acc","curr","sum","topData","sort","a","b","localDate","Date","UTC","getFullYear","getMonth","getDate","getHours","getMinutes","yAxis","pointFormatter","numberFormat","useHTML","getTimeSeriesByDimension","metricName","getTimeSeriesByMetric","getMetricDropdownOptions","ratioMetrics","getChart","currentChartType","reportData","selectedMetric","mapChartComponentRef","countryCodeDimension","roundedTotal","EmptyChart","noDataText","noDataMessage","showGridLines","DonutChart","innerRadius","hideLegend","valueInsideDonut","formatMetric","enabledLegendsWrapLines","legendProps","textTransform","legendContainer","maxWidth","HorizontalBarChart","isResizable","buildGridColumns","ShimmeredDetailsList","shimmerLines","enableShimmer","selectionMode","SelectionMode","none","lineChartSeries","yAxes","enabledMetrics","hasLeftAxis","newAxis","opposite","labels","buildYAxes","lang","thousandsSep","bubbleData","codeDimensionKey","countryCoordinatesData","metricValue","formattedMetricValue","displayName","Country","geometry","longitude","latitude","mapToBubbleData","BubbleMap","topCount","others","DateTime","sortedData","count","buildGridV2Columns","dimensions","defaultSelected","sortByDefaultColumns","isSearchable","isExportable","columnOrder","sortFunction","isSortingDescending","convertDate","dateParts","match","month","parseInt","day","year","hours","ampm","aDate","bDate","getActiveMarkers","sortedMetrics","isSelectedMetricDisabled","_metric$incompatibleF","appliedFiltersSet","Set","incompatibleFilter","isIncompatible","incompatibleFields","incompatibleField","incompatibleDimension","isDisabled","inCompatibleMessage","getIncompatibleFilterMessage","_getMetricColor2","metricData","disabled","incompatibleTooltipCantText","cantMessage","incompatibleTooltipWontText","wontMessage","ReportMessages","getIncompatibleBreakdownMessage","getIncompatibleColumnWithBreakdownMessage","getIncompatibleColumnWithFilterMessage","getIncompatibleColumnWithBreakdownAndFilterMessage","constructRequestBody","dateRange","currentChartGrain","breakdown","callerGuid","reportType","getReportPageStore","reportName","dateTimeRanges","startDateTime","startOfDay","endDateTime","endOfDay","grain","Key","filterKey","requestOptions","constructMediationRequestBody","getStartingBreakdown","startingBreakdown","storedBreakdown","getDataFromURL","ReportsQueryStoreKeys","BREAKDOWN","getStartingChartGrain","defaultChartGrain","allowedChartGrains","chartGrainStoreKey","defaultBasedOnChartType","HOURLY","NONE","startingChartGrain","storedChartGrain","exportReport","dataToExport","columnsMetadata","filename","columnsToExport","exportToCsv","onAdSenseMediationToggleChanged","adSenseMediationToggle","onAdSenseMediationChanged","adSenseMediationStatus","onAdunitPrivateMarketplaceChanged","privateMarketplace","onAdunitEnablePrivateMarketplaceChanged","setAdUnitsData","setAdUnitsLoading","setAdUnitsDataFetching","setAdUnitsMediationFetching","sysLocale","sysCountryCode","addLocaleData","enLocaleData","frLocaleData","deLocaleData","itLocaleData","esLocaleData","formattedLocale","useMemo","appLocale","appCountryCode","formatLocale","upperCaseCountryCode","enGb","fr","de","it","frCa","es","esMx","InfoToggleBase","checked","onChange","Toggle","onText","offText","defaultChecked","subComponentStyles","toggle","InfoToggle","selectTextToggleLabel","selectTextToggleAriaDesc","ariaLabelForSelectAllCheckbox","columnAriaLabel","columnSortAscendingAriaLabel","columnSortDescendingAriaLabel","numberOfItemsAfterFilterLabel","commandBarNavigationHelpArialLabel","columnResizeDialogTitle","columnWidthFieldLabel","columnResizeDialogDescription","resizeButtonLabel","sortButtonLabel","DataGridSelectionMode","DataGridBase","isResizeDialogOpen","_columnToEdit","_showResizeDialog","columnHeaderMenuProps","_getContextualMenuProps","_handleResizeButtonClick","_handleSortButtonClick","target","currentTarget","gapSpace","isBeakVisible","DialogType","normal","closeButtonAriaLabel","appMessages","subText","_this$_detailsListRef","_this$_columnWidthFie","_detailsListRef","updateColumn","_columnWidthFieldRef","_hideResizeDialog","detailListProps","displayFunction","filterList","filteredItems","lastSortedColumn","filterCol","customFunction","_applyFilter","displayedItems","filterApplied","filterColumn","custom","filterCondition","dateVal","relational","numVal","filterText","filterNumVal","Equals","DoesNotEqual","GreaterThan","GreaterThanEqual","LessThan","LessThanEqual","filterVal","strVal","Contains","DoesNotContain","BeginsWith","EndsWith","lastIndexOf","isModalSelection","announcedMessage","defaultRender","notReadyPropsRenderer","notReadyProps","_classNames","notReadyLabel","Sticky","stickyPosition","StickyPositionType","Header","isScrollSynced","onRenderColumnHeaderTooltip","tooltipHostProps","TooltipHost","nullRender","_selection","Selection","onSelectionChanged","selectedCommandBarProps","_buildCommandPropsOnSelection","_buildDataGridColumns","selectedSortColumn","sortByColumn","element","columnKeyToSortBy","modifyDataUsingDisplayFunction","componentDidUpdate","prevProps","prevState","_gridFilter","resetGridFilter","_detailListWrapper$ha","detailListWrapper","querySelector","hasAttribute","getSelection","getDisplayedItems","filterProps","dataIsLoading","dataGridfilterProps","searchResultsVisible","commandBarProps","displayedItemCount","filterField","searchBoxPlaceholder","searchBoxVisible","onItemDisplayedLabel","searchBoxAriaLabel","onChangeText","SearchBox","filterItem","onSearch","newValue","onClear","event","placeholder","Label","CommandBar","_extends","commandBar","searchResults","GridFilter","componentRef","onFilterApplied","_onFilterApplied","_onChangeModalSelection","ScrollablePane","_scrollablePane","scrollbarVisibility","ScrollbarVisibility","auto","scrollablePane","Announced","displayItems","onColumnHeaderClick","_onColumnHeaderClick","layoutMode","DetailsListLayoutMode","justified","constrainMode","ConstrainMode","unconstrained","onRenderDetailsHeader","_onRenderDetailsHeader","selection","selectionPreservedOnEmptyClick","ContextualMenu","Dialog","dialogContentProps","_getResizeDialogContentProps","TextField","_resizeColumn","DialogFooter","PrimaryButton","DefaultButton","list","columnModel","buildColumns","c","isCollapsible","newColumn","isPadded","isMultiline","columnActionsMode","ColumnActionsMode","hasDropdown","sortAscendingAriaLabel","sortDescendingAriaLabel","overflowButtonProps","selectionCount","Single","Multiple","getSelectionMode","hasSelection","selectionModes","hasStatusSelection","selectionStatus","_hasStatusinSelection","farItems","selectedIndices","getSelectedIndices","getItems","selectedIndex","DataGrid","flexDirection","flex","marginLeft","top","right","overflowY","marginTop","medium","clarityRequestSuccess","propertyCreateSuccess","propertyCreateFailed","propertyEditSuccess","invalidForm","invalidState","clarityRelinkSuccess","clarityRelinkFailed","clarityLinkSuccess","clarityUnlinkSuccess","clarityLinkFailed","propertyLoadError","propertyFormError","adUnitsFetchFailed","sitesFetchFailed","propertiesFetchFailed","failedToLoadSites","PublisherAccountUserCreate","trackingId","getEntity","wrapSendRequest","listEntity","SINGULAR_RESOURCE_ENTITIES_FOR_POST","AccountSKU","UserInvitation","NativeAdTemplate","ServingConfig","UserCreateFromInvitation","AdSenseMediationOptIn","Feedback","AddressValidation","PhoneVerificationGenerateCode","PhoneVerificationVerifyCode","postEntity","SINGULAR_RESOURCE_ENTITIES_FOR_PUT","AdSenseMediationToggle","putEntity","sendRequest","AdSenseAdUnitStatus","patchEntity","UserRoleUpdate","UserUpdateLanguage","deleteEntity","AdSenseDisconnectAdUnit","wrapRequestBody","bodyWrapper","SINGULAR_RESOURCE_ENTITIES","UpdateUserContactDetails","UpdateClarityProject","AdSenseConnectAdUnit","NotificationPreferencesUpdate","magicValue1","FilterContent","FilterDownloader","downloadUrl","basicResponse","magicValue","path","requestUrl","AdSenseMediation","AdSenseMediationHealthCheck","AdSenseMediationChooseGamNetwork","AdSenseUpdateAdUnitStatus","AdSenseMediationOptOut","modelClassName","overrideApiPath","entityClassName","WinRate","convertToTwoDecimalPlaces","ImpressionRequests","ImpressionsReturned","WinningBids","digits","rx","symbol","reverse","toFixed","nFormatter","toLocaleString","minimumFractionDigits","injectRouterWithIntl","withRouter","injectIntl","injectIntlWithObserver","injectRouterAndIntlWithObserver","injectIntlAndObserver","AdSenseOAuthStatus","FormLabelBase","disableHeading","disableAriaLevel","labelContent","labelRequired","noInfoButton","FormLabel","getLoginPageStore","getProfileStore","phoneVerificationGenerateCode","phoneVerificationVerifyCode","verificationCodeGenerationLimitReached","itemDisplayed","itemSelectedCount","teachingBubbleHeadline","teachingBubbleContent","dialogDismissBtnAriaDesc","createCmdbtnAriaDesc","addFilterCmdBtnAriaDesc","editCmdBtnAriaDesc","codeCmdBtnAriaDesc","deleteCmdBtnAriaDesc","tokenStatusCmdBtnAriaLabel","clarityStatusCmdBtnAriaLabel","activateCmdBtnAriaDesc","deactivateCmdBtnAriaDesc","copyCmdBtnAriaDesc","modifyColumnsCmdBtnAriaDesc","modifyColumnsPanelApplyButtonAriaDesc","editAdunit","changeTemplate","gridDataDownloadSuccess","gridDataDeletingItem","gridDataDeletingItemFailed","gridDataSubmittingChangingStatus","gridDataSubmittingChangingStatusFailed","gridDataDuplicatingFailed","gridDataDuplicating","RangeType","RangeTypeMessage","Custom","Today","Yesterday","SundayToday","MondayToday","Last7ExcludingToday","Last7FromSunToSat","pageTitle","submitSuccessTitle","submitSuccessMessage","submitSuccessButtonLabel","readOnlyPageTooltip","addressLine1","addressLine2","zipCode","phoneNumber","phoneNumberCountryCode","selectStatePlaceholder","previewTitle","previewDescription","profileAddressBannerBold","profileAddressBanner","profileAddressBannerWaitlist","phoneVerificationMethodSms","phoneVerificationMethodCall","phoneVerificationDialogTitle","emailVerificationDialogTitle","phoneVerificationDialogChoiceGroupLabel","phoneVerificationDialogNextButton","phoneVerificationDialogCancelButton","phoneVerificationDialogVerifyButton","phoneVerificationDialogBody","phoneVerificationDialogTermsAndConditions","phoneVerificationDialogPrivacy","phoneVerificationDialogResendCode","phoneVerificationDialogCallAgain","emailVerificationDialogCodeSent","phoneVerificationDialogSmsText","phoneVerificationDialogCallText","verificationDialogPlaceholder","phoneVerificationDialogSuccess","emailVerificationDialogSuccess","phoneVerificationDialogSuccessAlt","profileInvalidFieldsErrorMessage","profileInvalidAddressErrorMessage","profileAddressValidationFailed","generateVerificationCodeFailed","generateEmailVerificationCodeLimitReached","generatePhoneVerificationCodeLimitReached","generateEmailVerificationCodeFailed","getVerificationStatusFailed","verifyingGeneratedCodeFailed","generatedCodeInvalid","generatedCodeExpired","generatedCodeFailed","publisherProfileDetailsFailed","updatePublisherProfileDetailsFailed","failedToLoadPublisherDetails","failedToLoadProfileDetails","profileNeedsAttentionTitle","profileNeedsAttentionDesc","help","uploadDocument","notStarted","inReview","verified","actionRequired","notStatedPopup","inReviewPopup","failedToSubmitEvidence","backButtonAriaDesc","breadcrumbAriaLabel","pageMode","hasFormTitle","additionalHeightBoundary","overlayHeight","renderedOnPanel","FormState","InPageCreate","InPageEdit","InPageView","titleMarginLeft","buttonMarginBottom","mergeStyleSets","navBackButton","scrollablePanel","maxHeight","buttons","zIndex","bottom","marginRight","background","formTitle","breadcrumb","chevron","overlayStyles","getTheme","DetailPage","componentDidMount","LayoutMode","ContentOnly","helpId","onCancel","submitLabel","cancelLabel","navMessageLabel","onNavClick","submitButtonDisabled","hideSubmitButton","breadcrumbItems","hideNavButton","formTitleId","showOverlay","AcceptInvite","Overlay","ActionButton","iconProps","Breadcrumb","Main","Spinner","labelPosition","devConfigOnline","authority","clientId","postLogoutRedirectUri","redirectUri","msaTenantId","msaAuthority","prodConfigOnline","envBasedConfig","cache","cacheLocation","system","tokenRenewalOffsetSeconds","silentTokenRequestRedirectUri","authTokenRequest","scopes","silentTokenRequest","corpTenantId","accountEnvironment","HomePageStatus","PublisherServingConfig","PropertyServingConfig","PropertyServingConfigs","userLocales","adQualityLocales","reverseLocales","showDialog","isStatusLoading","isSetupDone","isFRECardShown","rootStyle","imageStyle","imageContainerStyle","descriptionStyle","titleStyle","FontWeights","semibold","ZeroResults","showDefaultImage","description","buttonText","onButtonClick","styleProps","defaultImage","shouldFadeIn","Link","to","getCurrentUserContext","getPrimaryUserId","_getCurrentPublisher","_getCurrentUserContex","getCurrentPublisher","extendedProperties","primaryContactUserId","getPageStore","getDimensions","getMetrics","getGranularity","useReportQuery","reportRequestBody","isDetailedReport","isError","useQuery","queryKey","queryFn","getReportData","AbortController","Data","onError","messageDescriptor","SUMMARY","intlMessageValues","toLowerCase","staleTime","refetchOnWindowFocus","refetchOnMount","refetchOnReconnect","useMediationReportQuery","requestBody","abortController","signal","aborted","getMediationReportData","adUnitsData","transformedData","matchingAdUnit","PubCenterAdUnitId","AdUnitName","mapAdUnitName","useReportMetadata","getReportType","grains","useMediationReportMetadata","getMediationDimensions","getMediationMetrics","getMediationGranularity","setBalanceIsDataLoadedAction","isDataLoaded","getPaymentsPageBalance","setEstimatedEarningsIsDataLoadedAction","getPaymentsPageEstimatedEarnings","setBalanceDataAction","setEstimatedEarningsDataAction","setAccountStatusDataAction","getAccountStatusData","setAccountStatusIsLoading","setXpayJwtToken","xpayJwtToken","xpayJwtTokenRequest","getPaymentsPageData","setXpayJwtTokenExpirationTime","tokenExpirationTime","xpayTokenExpirationTimeStamp","setXpayJwtTokenStatusIsLoading","xpayJwtTokenStatusIsLoading","COUNTRIES_LANGUAGE_MAPPING","AQ","BV","AN","PS","RW","WS","CS","UM","SS","EH","CURRENCIES_LANGUAGE_MAPPING","AUD","ARS","AZN","BDT","BGN","BHD","BRL","BWP","CAD","CHF","CLP","COP","CRC","CZK","DKK","DOP","DZD","EGP","ETB","EUR","FJD","GBP","GHS","GTQ","HKD","HRK","HUF","IDR","ILS","INR","IQD","JMD","JOD","JPY","KES","KRW","KWD","KZT","LBP","LKR","LTL","LVL","MAD","MUR","MWK","MXN","MYR","NGN","NOK","NZD","OMR","PEN","PHP","PKR","PLN","QAR","RUB","RWF","SAR","SEK","SGD","THB","TND","TOP","TRY","TTD","TWD","TZS","UGX","USD","UYU","VEF","VND","XAF","XCD","XOF","ZAR","ZMW","LANGUAGES_LANGUAGE_MAPPING","EN","DA","ZH","KO","HI","JA","TA","TE","LOCALE_LANGUAGE_MAPPING","SUPPORTED_LOCALES_MAPPING","TIMEZONE_LANGUAGE_MAPPING","WEEK_DAYS_LANGUAGE_MAPPING","setPublisherContext","appStore","publisherAsync","changedPublisher","createReturnUrl","onCurrentRouteChanged","currentRoute","onReportLinkClicked","onSetPublisherReporting","onReportingEnabled","ArrayObservableSchemaYupType","array","withMutation","transform","originalvalue","isType","StringListSchemaYupType","StringListTransformerYupType","stringToList","normalizePath","validateSchema","validate","abortEarly","stripUnknown","inner","EstimatedEarningsChartTypes","onDownloadButtonClicked","csvFileName","downloadType","onChangeItemsStatus","onItemsStatusChanged","onDeleteItem","preDeleteAction","deleteAction","postDeleteAction","onDuplicateItem","onDuplicateAction","getPublisherProfileRawData","getPublisherProfileActiveData","getProfileErrors","getPrimaryUserRawData","primaryUser","getPrimaryUserFullName","getPrimaryUserActiveData","getPublisherActiveData","isPrimaryUserDataPresent","isProfileEditable","isPublisherUnderReview","isPublisherRejectionUnappealable","getProfileActiveData","isProfileInEditMode","isInEditMode","isProfileSubmitted","isSubmitted","isPreviewShown","isPhoneVerificationMethodsShown","isVerificationCodeDialogShown","isPhoneVerificationCodeShown","isVerificationSuccessShown","isVerificationSuccess","isCodeBeingVerified","isVerificationCodeGenerationLimitReached","setDataInURL","currentSearchQuery","searchQuery","_URLSearchParams","history","replaceState","onPubCenterAADLogin","requestParams","onEmailChanged","onErrorsChanged","onLoginButtonClicked","onAuthPageInitialized","loginHint","onLoadingSet","onSwitchAccount","getDatesInRange","dateArray","currentDate","isDayInFuture","getToday","getYesterday","setDate","getSundayToToday","today","sunday","getDay","getMondayToToday","mondayOffset","monday","get7DaysExcludingToday","sevenDaysLater","yesterday","getLastSundayToSaturday","lastSunday","lastSaturday","getSelectedPeriodLabel","getSelectedStartingDate","range","toLocaleDateString","getSelectedEndingDate","getTime","getMonthlyCalendar","calender","prevMonth","prevYear","prevMonthDays","currentMonthDays","firstDay","isInCurrentMonth","fullDay","dayInNextMonth","nextMonth","nextMonthYear","getPresetDataTestId","preset","onInitializeGoogleAccount","onFinished","onMediateGoogleAccount","mediate","onConnectGoogleAccount","onDisconnectGoogleAccount","withSubHeader","gridContainer","GridPageLayout","Default","balance","estimatedEarnings","getAccountStatus","accountSettings","publisherPreferencesFailed","userPreferencesFailed","notificationPreferencesFailed","deletingUserSuccess","updatedNotificationPreferencesSuccessfully","deletedPublisherSuccess","invalidStateLoginOrReport","baseAddress","languageKey","timezoneKey","countryKey","adUnitTaxonomyKey","fetchResources","responseDataProcessor","onResponse","fetchResourcesWithLocalStorageCache","resourceCacheKey","supportedResourcesFromCache","getSupportedLanguages","getLanguages","getSupportedCountries","countriesData","countriesJson","countries","countryCodes","serviceLevels","serviceLevelKey","serviceLevelValue","serviceLevelNameIdMap","getCountries","getCountriesWithServiceLevel","getSupportedSubGeographies","stateData","subGeographyList","getSupportedTimezones","getTimezones","getSupportedAccountSkus","skuData","accountSKUs","getAdUnitTaxonomyValues","getTaxonomyValues","timezoneJson","timezones","timezoneData","timeZoneData","timezoneCode","languageJson","languages","languageData","languageCode","taxonomyJson","adUnitTaxonomyValues","attributeValues","taxonomy","getCurrentHashValue","hash","getUrlSearchParameter","urlQuery","parameter","TARGET_CUSTOMER_ID","resourceTitle","learnTitle","learnDescription","assistanceTitle","assistanceDescription","improveTitle","improveDescription","feedbackTitle","headLineGreeting","summary","thanksMsg","thanksMsgSubLine","ackMsg","ackMsgSubline","acceptButton","skipButton","submitting","goToAccept","unknown","twoWeekBuffer","dayBuffer","tncNotificationContent","onChangeConnection","connection","getGoogleAdSenseStore","onChangeMediationToggle","isToggled","isMediationEnabled","feedback","searchPlaceHolder","searchResultListAriaLabel","viewCategoryResult","viewAllResult","viewNoResult","viewCategoryResultsAriaDescription","entityInfoButtonAriaDescription","footerAriaDescription","getImageStyle","borderRadius","tooltipTitle","dismissButtonStyle","bodyStyle","padding","titleBar","footerStyle","left","footerWrapper","closeIcon","Card","titleText","showDismissButton","cardActions","cardTopBarActions","footerComponents","shimmerCustomElement","imageAlt","titleIconTooltipProps","titleId","Stack","alt","IconButton","enableScopedSelectors","horizontal","wrap","horizontalAlign","IconTooltip","tooltipMessage","tooltipText","Shimmer","customElementsGroup","onLanguageChanged","localStorageKey","PublisherType","fetchAccountById","fetchCcmtAccountById","urlParams","fetchAllMediumAccountSkus","allMediaTypes","MediaTypeString","mediaTypeKey","nonMappedMediums","mediumMappedSkus","enparams","allMediaType","fetchAllAvailableUsers","u","currentUser","googleConnectorMessages","settingsTab","googleAccountNotConnectedTab","googleAccountConnectedTab","googleAccountDetails","googleAccountConnectionStatus","googleAccountConnectedStatus","googleAccountVerifyingStatus","googleAccountFailedStatus","googleAccountConnectionDate","googleAccountMediateHeader","googleAccountMediateDescription","googleAccountConnect","googleAccountDisconnect","googleAccountRetry","monetizationDetails","monetizationInstructionHeader","monetizationFirstInstruction","monetizationSecondInstruction","monetizationThirdInstruction","monetizationReviewTOSandPP","monetizationPP","monetizationReviewAnd","monetizationTOS","grantOAuthConnectingProcessTerminated","googleConnectorMediationOperationEnabling","googleConnectorMediationOperationDisabling","googleConnectorMediationFailed","googleConnectorFailedToFetchAdSenseConnectionDetails","disconnectingGoogleAccountFailed","disconnectingGoogleAccountSuccess","connectGoogleAccountFailed","disconnectGoogleAccountFailed","initializeGoogleAccountFailed","googleAccountConnectedSuccessfully","getSupportedLanguagesDropDownOptions","supportedLocales","getSupportedLocalesMapping","supportedLanguages","localeCode","firstValue","secondValue","_SUPPORTED_LOCALES_MA","NOTIFICATION_RENDER_BUFFER","TEACHING_BUBBLE_NOTIFICATION_FLAG","SETUP_PAYMENTS_NOTIFICATION_FLAG","SETUP_PAYMENTS_CHEER_DIALOG_FLAG","SETUP_PAYMENTS_NOTIFICATION_ACTION_BUTTON_ID","SETUP_PAYMENTS_NOTIFICATION_ID","removePaymentNotificationBuffers","removeItem","setPaymentNotificationBuffer","usePaymentsOnboarding","onboardingContainerId","useId","xPayContainerRef","isSDKLoaded","setSDKLoaded","getAccountSettingStore","useSetTimeout","isInitializingXPayContainer","setFalse","onXPayInitializeResolved","useBoolean","isTeachingBubbleHandledPerUserSession","handleInitXPayContainer","succeed","teachingBubbleResponsiveStylings","setupNotificationButton","getElementById","setupNotificationButtonOGStyle","shouldRenderTeachingBubble","onInitializePaymentsPage","datePlaceholder","goToToday","prevMonthAriaLabel","nextMonthAriaLabel","prevYearAriaLabel","nextYearAriaLabel","isRequiredErrorMessage","invalidDateErrorMessage","invalidMinuteErrorMessage","invalidSecondsErrorMessage","pubcenterApp","initializeAuthContext","PublicClientApplication","clearAllCookies","cookie","toUTCString","authResponse","logoutPubCenterAADUser","_pubcenterApp$getAcco","getAccountByUsername","tid","postLogoutUrl","getPostLogoutRedirectUri","clientIdQueryStr","msaLogoutRedirectionUrl","msaLogout","_pubcenterApp$getAcco2","logoutRequest","logoutHint","login_hint","logoutRedirect","aadLogout","localStorageUnAuthLocale","clear","authenticateHeader","exec","claims","atob","loginPubCenterAADUser","redirectStartPage","extraQueryParameters","prompt","interactionStatus","clientIdInteractionStatus","handleInvalidInteractionStatus","redirectRequest","msaoauth2","loginRedirect","acquireAuthResponseAsync","request","usernameHint","_pubcenterApp$getActi","getActiveAccount","accountInfo","tenantId","homeAccountId","localAccountId","acquireTokenSilent","accessToken","getIdToken","idToken","handleLoginRedirectAsync","handleRedirectPromise","then","catch","getUserRoleFromUser","userRole","roleDetails","userRoleDetails","roleDetail","UserRoleEntityType","Customer","getUserRoleString","getFormattedUserRole","UserManagementMessages","UserRole","SuperAdmin","AccountManager","ReportUser","getUserRoleMapping","userRoleToRoleIdMap","orchestrator","fetchReportDimensionColumnMembers","msg","reportCardType","MEDIATION","columnMembers","mediatedWithAdSense","mediationStatus","Id","Value","DisplayName","setColumnMembers","getColumnMembers","metadata","isMetadataLoaded","mediationMetadata","ReportDataSource","TythonV2","Day","Hour","Month","Week","Year","MonthAndYear","sites","performance","mediationSummary","onUpdateNotificationPreferences","np","toggleBillingAlerts","toggleServingStatus","toggleProfileReview","toggleInvitedUsers","shouldRenderOnboardingPopup","onResolvedCallback","fetchPaymentsPageBalance","fetchPaymentsPageEstimatedEarnings","fetchAccountStatus","setLoadingStateAction","setPublisherProfileDetailsAction","publisherProfileDetails","_publisher$address","isDefaultAddress","lastUpdatedTimestamp","profileComplete","setPrimaryUserDetailsAction","primaryUserDetails","setPrimaryUserDetailsETagAction","userETag","setProfileEditModeAction","initializeProfileActiveStateFromRawDataAction","_active$user","_active$user2","_active$publisher","_active$publisher2","deepClone","postalAddress","setIsAddressValid","isAddressValid","setIsOrgAddressValid","isOrgAddressValid","setPrimaryUserFieldAction","fieldValue","contactInfo","phone1","setPublisherFieldAction","setProfileErrorsAction","setIsSubmittedAction","setIsPreviewShownAction","setIsPhoneVerificationMethodsShown","setIsPhoneVerificationCodeShown","setIsVerificationSuccess","setIsCodeBeingVerified","setPhoneVerificationMediumType","mediumType","verificationMediumType","setPhoneVerificationCode","setPhoneVerificationRequestId","requestId","setPhoneVerificationResp","respData","phoneVerificationResp","setVerificationCodeGenerationLimitReached","limitReached","invalid","tooltipHostStyles","warningMessage","PanelTypes","feedBackSuccessMessage","hidePanel","FeedbackType","getFeedbackPanelStore","Appreciation","isContactMeChecked","onFeedbackTypeChanged","onFeedbackTitleChanged","onFeedbackDescriptionChanged","onFeedbackEmailChanged","onFeedbackPanelErrorChanged","onFeedbackCheckboxChanged","removeEmail","onSavingChanged","_msg$hidePanel","ToastMessages","notificationMessages","severity","NotificationSeverity","titleMessageDescriptor","contentMessageDescriptor","notificationLabel","NotificationLabel","FeedbackErrorMessage","FeedBackInvalidFormMessage","feedbackThank","feedbackSupport","feedbackType","feedbackRate","feedbackRequired","feedbackSend","feedbackTitlePlaceholder","feedbackTellUsMore","feedbackTellUsMorePlaceholder","feedbackAllowContact","feedbackAllowContactPlaceholder","feedbackContactSupport","feedbackPrivacyStatement","feedbackMPS","feedbackCharacterCounter","feedbackTypeAppreciation","feedbackTypeFeatureRequest","feedbackTypeBugReport","feedbackTypeOther","feedbackDataCollection","supportTeamPlaceholder","deleteFeedbackDataFormSubject","WIDTH","OPTION_WIDTH","checkboxStyle","emailTextBoxStyle","buttonSection","button","characterCounterStyle","textAlign","size","links","textDecoration","choiceGroup","flexContainer","flexFlow","choiceGroupOption","choiceFieldWrapper","innerField","labelWrapper","field","renderFooterContent","panelProps","FeedbackPanelFooterButtons","FormattedMessage","onCancelClicked","_panelProps$onDismiss","FeedbackPanel","feedbackTypes","FeatureRequest","BugReport","Others","appName","connectToSupportTeam","ChoiceGroup","_","selectedKey","maxLength","currentCounter","limit","multiline","rows","Checkbox","checkedStateChanged","helpNotImplemented","NotificationCardBase","Informational","Warning","Critical","Announcements","date1","date2","numDays","previousDay","yesterdayLabel","twoDaysAgoLabel","threeDaysAgoLabel","isSameDay","hour","minute","getPreviousDay","onPrimaryActionClicked","onSecondaryActionClicked","timestamp","primaryActionText","primaryActionLink","dismissLabel","primaryIsExternal","secondaryActionText","secondaryActionLink","secondaryIsExternal","formattedTime","getFormattedDate","cardContainerStyle","headerRowStyle","leftContainerStyle","getIconName","iconStyle","rightContainerStyle","contentStyle","timestampStyle","buttonStyle","linkStyle","NotificationCard","ResponsiveSmall","borderBottom","border","messageCard","s1","notificationsNotImplements","dismissAll","dismiss","threeDaysAgo","twoDaysAgo","allSet","activityLogsHint","critical","informational","emptySection","textContent","panelParent","renderNotificationFooterContent","NotificationPanelFooterButtons","NotificationsPanel","PolicyUpdate","setNotificationPanelTriggered","ClarityLinkDeclined","ClarityLinkExpired","propertyBag","propertyId","clarityId","onResendClarityLink","primaryExternalNotificationLabels","getFormattedMessage","fallback","onRenderNotificationCard","_getFormattedMessage","intlContentMessageValues","_onDismiss","primaryActionTextMessageDescriptor","_onPrimaryActionClicked","_onSecondaryActionClicked","_isPrimaryExternal","criticalNotifications","warningNotifications","infoNotifications","errorNotifications","emptyNotifications","List","onRenderCell","ProfilePanel","settingsPageRoute","auditHistoryPageRoute","localStorageLocale","onUpdateUserLanguage","actionButtonsWrapper","dropDownWrapper","buttonStyles","pallete","rootHovered","iconHovered","iconPressed","getButtonStyles","dropdownStyles","borderWidth","signingUp","accessPermissions","getEntityAccessPermissions","hasAccessToAuditHistory","Persona","secondaryText","PersonaSize","presence","PersonaPresence","online","showSecondaryText","hidePersonaDetails","_onUserSettingsButtonClicked","_onAuditHistoryButtonClicked","Dropdown","_onUserLanguageChanged","dropdownWidth","profileSignOut","settingsNotImplemented","getAccessPermission","userRolesMap","PublisherSearch","titleContainer","emptyGridTextStyle","detailsHeaderRootStyle","regular","borderTop","borderRight","detailsRowRootStyle","animation","keyframes","animationDuration","disabledRowStyle","checkCell","alignSelf","columnHeaderCallout","columnHeaderIcon","modifyColumnDescription","panelButton","modifyColumnPanel","footer","columnCheckbox","columnTooltip","columnCheckboxWrapper","calloutFocusable","USER_MANAGEMENT_TAB_KEY","setHomePageStatus","profileStatus","siteStatus","adUnitStatus","isHomePageSetupComplete","setIsStatusLoading","setIsFRECardShown","EvaluationStatus","PublisherEvaluationStatus","EntityEvaluationStatus","EntityEvaluationErrorCode","appealableRejectionCodes","unappealableRejectionCodes","ToastIcon","DevTokenFetch","isPublisherProfileDataPresent","_getCurrentPublisher3","getPublisherEvaluationStatus","publisherEvaluationStatus","getPublisherCountry","_getCurrentPublisher4","getPublisherEvaluationApprovalStatus","_getPublisherEvaluati","getPublisherEvaluationRejectionCodes","_getPublisherEvaluati2","_getPublisherEvaluati3","rejectionCodes","getAppealableRejectionCodes","isPublisherProfileInComplete","Pending","isPublisherApproved","Approved","isPublisherRejected","Rejected","isPublisherRejectionAppealable","getAppealDocuments","_getAppealStore$appea","publisherEvaluationApprovalStatus","InReview","appealHistory","getAppealStore","appealStatus","reviewStatus","isPublisherActionRequired","getPublisherAccountType","_getCurrentPublisher5","publisherType","isIndividualPublisher","isOrganizationPublisher","_getAppStore$publishe","_getAppStore$publishe2","appealDocuments","isAppealInReviewForRejectionCode","rejectionCode","getAppealStatusForRejectionCode","rootRejectionCode","typeToRestore","obj","__proto__","mergeTypeWithObject","groupBy","getKey","collection","from","getEnumNames","results","k","res","deepEqual","obj1","obj2","convertType","keys1","keys2","hasOwnProperty","getEstimatedEarnings","getBalance","currencyCode","getXPayJwtToken","setPublisherEvaluationStatusAction","setPublisherEvaluationFetchFailedAction","isFailed","isPublisherEvaluationStatusFetchFailed","setPublisherRejectedMessageClosedAction","isPublisherRejectedMessageClosed","setPublisherEvalutionStatusToInReview","saveRawSettings","onSettingsChanged","_active$systemPrefere","_active$systemPrefere2","setEntityType","setNotificationPreferences","generateCodeAsync","updatePublisherDetails","validateAddressAsync","SMALLER_LIST_ITEM_HEIGHT","STANDARD_LIST_ITEM_HEIGHT","HEADING_ITEM_HEIGHT","yearly","monthly","XPayJwtTokenRequest","DayPickerStrings","months","shortMonths","days","shortDays","invalidInputErrorMessage","semanticColors","s","gridActionButton","primaryButtonBackground","primaryButtonBackgroundHovered","rootPressed","primaryButtonBackgroundPressed","gridCell","overflow","textOverflow","getGridClassNames","GridCell","setupPaymentButton","setupPaymentNotificationBoldedText","setupPaymentNotificationText","loadXPayContainerFailed","paymentCheerMessages","cheerMessageTitle","cheerMessageContent","cheerMessageButtonAction","cheerMessageButtonCancel","cheerMessageCancelArialabel","customLabel","todayLabel","sundayTodayLabel","mondayTodayLabel","last7FromTodayLabel","last7FromSunToSatLabel","ExternalLink","ConditionalTooltip","showTooltip","targetSelector","Fragment","isFeatureEnabled","Activated","container","gridTemplateColumns","forcedColorAdjust","headerSection","transition","ResourceCard","iconAlt","handleIconClick","wrapperRef","setIsFeedbackOpen","titleParam","ResourceSection","imgPreloadQueue","DocumentationIcon","SupportTeamIcon","FeedBackIcon","CMUIHeaderMenuItemSerializer","useCMUIHelpExperience","isFeedbackOpen","itemsData","getHeaderItems","panel","isFooterAtBottom","onRenderFooterContent","shouldOverflowUnderExtraSmallScreen","resources","showPanel","createPanel","_item$panelProps","Panel","headerText","PanelType","customWidth","isLightDismiss","_item$panelProps2","_item$panelProps2$onR","cloneElement","resource","mutator","isNotificationPanelTrigerred","isTrigerred","AdBlockPageLazy","lazy","LazyAdBlockPage","LazyComponent","lazyComponent","onFilterChanged","onFilterErrorChanged","onFetchFiltersLoading","onFetchingFiltersData","onFiltersFetched","onFormFilterNameChanged","onFormFilterTypeChanged","onFormChannelsChanged","onFilterChannelListChanged","onFilterUpdateTypeChanged","onfilterItemsEntryTypeChanged","onFormExludedUrlChanged","onFormExludedAdKeywordChanged","onFormExludedQueryKeywordChanged","onFormAppendExcludedUrlsChanged","onFormAppendExcludedAdKeywordsChanged","onFormAppendExcludedQueryKeywordsChanged","onFormDownloadClicked","onFormDownloadExcludedUrlLoading","onFormDownloadExcludedAdkeywordLoading","onFormDownloadExcludedQuerykeywordLoading","onFormFilterStartTimeChanged","onFormFilterEndTimeChanged","onFormResetTimeRange","onFormUndoTimeRange","onManagePageInitialized","getFilterStore","gridFilters","filterModel","channelsSelected","filterItemsEntryType","excludedUrls","appendExcludedUrls","appendExcludedAdKeywords","appendExcludedQueryKeywords","downloadExcludedUrlLoading","downloadExcludedAdkeywordLoading","downloadExcludedQueryKeywordLoading","filterStartTime","filterEndTime","UTCDate","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","startTimeStamp","endTimeStamp","getMultiStepperRoute","routeName","operation","step","showExtraBtns","page","MultiStepCreation","Create","base","filterDownloader","filterItems","setPublisherAndAccountContext","accountAsync","formState","adfilter","viewModel","FilterScope","severeWarning","f","localeDate","Edit","fetchFilterById","matchedFilter","excludedUrlsCount","blockedUrlCount","excludedAdkeywordsCount","blockedAdKeywordCount","excludedQueryKeywordsCount","blockedQueryKeywordCount","blockedUrls","blockedAdKeywords","blockedQueryKeywords","filterScope","timeZoneOffset","getTimezoneOffset","associatedChannelIds","is","otherwise","mixed","oneOf","oldDomain","scopeId","m","blockedAdKeywordsList","excludedQueryKeywordsList","excludedUrlsList","floor","startTime","endTime","BulkUploadBase","isCalloutVisible","uploadDescription","onUpload","bulkUploadDescription","accept","BulkUpload","DateTimePicker","minutes","seconds","getSeconds","datePickerWidth","minDateTime","maxDateTime","onDateTimeChanged","allowSecondsField","isOutOfBoundsErrorMessage","colonSeperator","hourPicker","minutesPicker","secondsPicker","datePicker","hourComboBoxOption","toDateString","minutesComboBoxOption","strings","DatePicker","allowTextInput","minDate","maxDate","onSelectDate","_date","ComboBox","_hours","allowFreeform","autoComplete","_minutes","_seconds","onChannelChanged","onChannelErrorChanged","onFetchChannelsLoading","onFetchingChannelsData","onChannelsFetched","onFormChannelNameChanged","onFormAdunitsChanged","onFormFiltersChanged","inputChannelName","inputAdunits","adunitPickerAriaDesc","channelId","inputFilters","filterPickerAriaDesc","editChannel","updateChannel","CreateChannel","initializeForm","channelAccessPermissions","_getChannelAccessPermission","_onSubmit","_onCancel","_isDisabled","MultiSelectPicker","adunitsSelected","initialSelectedItems","onSelectedItems","filtersSelected","permission","inputName","inputNameLength","createFilter","editFilter","filterId","accountFilter","publisherFilter","inputExcludedURLs","excludedUrlPlaceholder","inputExcludedKeywordAd","excludedKeywordPlaceholder","inputExcludedKeywordQuery","inputAttachChannel","channelPickerAriaDesc","navMessage","excludedItems","excludedDescription","manualEntry","fileUpload","excludedUrlDescription","excludeAdLevelKeywordsDescription","excludedQueryLevelKeywordDescription","excludedUrlBulkUploadDescription","exlcudedKeywordsBulkUploadDescription","exportButtonDesc","timeRangeSectionTitle","timeRangeSectionDescription","filterStartTimeLabel","filterEndTimeLabel","filterEndTimePlaceholder","resetTimeRange","undoTimeRange","filterUpdateType","nonAppendOnly","startDateErrorMessage","endDateErrorMessage","excludedItemsTextField","exportButton","panelHeader","inPagePanel","excludedItemsLabel","FilterExcludedType","CreateAdFilter","filterAccessPermissions","_getFilterAccessPermission","defaultSelectedKey","enableCreateButton","createButtonLabel","onCreateButtonClick","_excludedItemsTextField","_excludedItemsUploadField","onRenderNavigation","onRenderLabel","onRenderDescription","_onRenderTextFieldDescription","textFileLoading","_uploadFile","Url","AdKeyword","QueryKeyword","_formContent","excludedType","file","files","reader","FileReader","onloadstart","result","onloadend","readAsText","create","notFound","deactivateTitle","excludedURL","excludedKeywords","channelsNumber","channelNames","adfilters","dateRangeFilterName","zeroResultTitle","zeroResultDescription","getFilterItems","filterName","filterOptions","showNullsCheckboxLabel","filterDetails","startDateFilter","endDateFilter","includeNulls","getCommandBarItems","primaryButtonLabel","includeActions","new","includeFarActions","searchBox","ManagePage","getWindowSizeStore","gridDefaultColumns","onRender","_item$associatedChann","CommandBarButton","_appStore$publisher","_appStore$account","DeleteConfirmation","NoResultComponent","GridV2","dataGridProps","gridV2Columns","renderZeroItemsComponent","isGridReady","isDataLoading","paginationProps","shouldGridHandlePagination","AdFilterPage","Route","exact","onAdCreativeChanged","adcreative","onAdSourceChanged","adSource","onAdProviderChanged","onAdCreativeAccountChanged","onAdCreativeMarketChanged","market","onAdCreativeBlockedMarketChanged","onAdCreativeSearchBoxValueChanged","onAdCreativeStartDateChanged","onAdCreativeEndDateChanged","onAdCreativeRefreshDataChanged","onAdCreativeAdPerfDataChanged","onAdCreativeBlockPanelChanged","onAdCreativeExportClicked","onAdQualityPanelApplyButtonClicked","onTeachingBubbleStartDateStatusChanged","onTeachingBubbleEndDateStatusChanged","adPerfData","selectedAdProviderId","selectedAccount","selectedMarket","selectedBlockedMarketId","blockItemType","blockErrorMessage","startDatePlaceHolder","clearStartDateSelAriaLabel","adReview","noAdsPerfData","noBlockData","blockSummary","endDatePlaceHolder","clearEndDateSelAriaLabel","searchboxPlaceHolder","accountsCombo","marketsCombo","applyFilters","applyFiltersAriaDesc","blockAds","blockImages","viewImages","blockAdsMenuButtonLabel","blockImagesMenuButtonLabel","viewImagesDescription","blockSummaryMSGridAriaLabel","blockSummaryAuctionGridAriaLabel","adReviewGridAriaLabel","exportGrid","exportImageBlocks","enableBlocking","disableBlocking","adSourceCombo","auctionAdSourceCombo","microsoft","auction","xandrAuction","blockAdTitle","blockAdURL","selectChannel","selectMarket","createNewChannel","blockReasonCategory","blockReason","additionalDetials","editBlockReason","channelName","addAdnuits","disallowedByNCAP","maliciousAdvertiser","Misspellings","competitiveExclusion","badLandingPage","misleadingAdHeadline","sensationalAdOrLandingPage","offensiveAdOrLandingPage","wrongLanguageforMarket","prohibitedAdCategory","deceptiveAdvertiser","otherReasonCategory","disallowedContent","disallowedDeceptive","disallowedMisleading","disallowedOffensive","disallowedSuffering","disallowedDrugs","disallowedTobacco","disallowedSensitive","legalPrivacyAndSecurity","legalMalware","legalPrivacy","mediaFormats","mediaAnimation","mediaNudity","relevanceAndQuality","relevanceLandingPage","restrictedCategories","restrictedAdult","restrictedAlcohol","restrictedBeauty","restrictedDating","restrictedFinance","restrictedGambling","restrictedLegalServices","restrictedCompetitors","restrictedPharmacy","restrictedPolitical","restrictedSoftware","restrictedSolicitation","restrictedWeapons","textGuidelines","textAdFunctionality","textAdLanguage","textGrammar","imageNotRelevant","lowQualityImage","offensiveImage","policyIssue","altAdTitleListings","altAdUrlListings","altAdImageListings","loadingAltAdCreativeListings","noAltAdCreativeListings","moreImages","viewOnlyImageLabel","blockedLabel","verizonMediaWarningLabel","queryTimeoutWarningHeaderLabel","queryTimeoutWarningDescriptionLabel","auctionBlockAdIdLabel","advertiserId","filterPanelApplyButtonAriaDesc","blockRequestSource","adCreativeServiceLoadEntityFailed","adqualityInvalidState","adqualityFailedToBlockAds","adqualityBlockAdsMissingFields","adqualityUpdateBlockedAdsStatusFailed","adqualityBlockedAdsSuccessfully","adqualityBlockImagesFailed","adqualityBlockImagesSuccess","adqualityBlockImagesMissingFields","adqualityDownloadBlockedImagesFailed","adqualityDownloadBlockedImagesSuccess","adqualityDownloadAdContextFailed","adqualityNoDataToDownload","adqualityBlockedAdsDataDownloadSuccess","adqualityUpdatedBlockedAdsStatusSuccess","adqualityLoadListingAdDataFailed","adqualityLoadRevenueAdDataFailed","adqualityTimeoutQueringForData","adqualityProvideSearchTerm","adqualityAdPerformanceDataDownloadSuccess","adDescriptionCheckboxLabel","blockReasons","onAdCreativePageInitialized","onAdDescriptionChanged","onBlockAdsViewChanged","onBlockAdInitialized","isImageBlock","onBlockAdsSamChanged","onBlockAdsChanged","onBlockImageAdsChanged","onBlockAdsImagesChanged","needUrlProcess","onBlockAdsAdPerfDataCleared","onBlockAdsBlockedImagesChanged","isChecked","onBlockAdsChannelsAndRevenueChanged","onBlockAdsSelectedMarketChanged","onBlockAdsReasonLevelsChanged","formatter","onBlockAdsChannelsChanged","onBlockAdsSelectedBlockRequestSourceChanged","onBlockAdsRevenueChanged","onBlockAdsListingsChanged","onBlockAdsBlockReasonChanged","onBlockAdsBlockDetailsChanged","onAdListingPageSelection","onBlockAdsSubmitted","onMSANBlockAdsSubmitted","onSAMBlockAdsSubmitted","onBlockImagesSubmitted","onBlockAdsErrorChanged","onBlockImagesErrorChanged","onBlockAdsDataChanged","onSAMBlockAdsDataChanged","onSAMBlockSummaryViewImagesClicked","onBlockedImagesExportClicked","onBlockedAdsExportClicked","onBlockAdsItemStatusChanged","onSAMBlockAdsItemStatusChanged","onRefreshBlockSummary","onBlockSummaryStartDateChanged","onBlockSummaryEndDateChanged","onBlockedContextChanged","onBlockedAdsContextChanged","onBlockedImagesContextChanged","onFilterPanelShown","onFilterPanelHide","blockAdSamData","blockAdData","adURL","adDestUrl","blockImageAdData","adType","noImage","filteredImages","blockAdsView","selectedBlockRequestSource","blockReasonL1","dropDownValues","adListingsData","blockDetails","adListingSelectedPage","blockSummaryData","samBlockSummaryData","blockSummaryStartDate","blockSummaryEndDate","getBlockedAdContext","blockedDataUrl","adunitAdIdPair","getAdPerfData","createHeaderError","statusText","filteredAds","adPerformanceData","mapAdIdAdunits","mapAdIdAccounts","ad","blockedAdIdImages","_active$samBlockSumma","locales","_active$samBlockSumma2","blockedAdFind","blockedAd","Active","createAdBlock","toggleSAMBlockedAds","getBlockSummaryData","blockReasonParts","reasonCategory","blockReasonMainCategory","blockReasonSubCategory","getSAMBlockSummaryData","filterStatus","getBlockImagesData","BlockAdsData","BlockImagessData","BlockItemType","SAMBlockAdData","blockItemErrorModel","Ads","Images","onAdCreativeDateChanged","onTeachingBubbbleStatusChanged","block","reason","blockRequestSourceId","modifiedBy","modifiedDateTime","now","blockedAdContext","filterStatusId","samBlockSummaryParams","reasonCategoryString","reasonComment","filterSource","localeScope","createSAMAdBlock","filterImage","getSAMBlockImageData","adPerfForCSVFromTable","onDropdownValueChanged","heading","_getStore$filters$act","onTextBoxValueChanged","_getStore$filters$act2","onDeleteTextCondition","filterOption","rawFilters","splice","onListValueChanged","listValues","isSelected","onClearAll","filterListType","filterTextType","elem","elemList","onAdCreativeInitialAccountsChanged","_getStore$filters","rawAccounts","onAdCreativeInitialAdProvidersChanged","auctionAdProviders","_getStore$filters2","adProviders","onAdCreativeInitialMarketsChanged","auctionMarkets","_getStore$filters3","onActiveFilterValuesChanged","onRawFilterValuesChanged","lastElement","onSetIsAppliedForAllConditions","triplet","ConditionType","getAggregation","Text","textAggregation","idAggregation","getMultiTextValues","triplets","getAdQualityListValues","getIdListValues","getIdValues","converterIn","rawFilter","_filters$AdQualityFil","_filters$AdQualityFil2","_filters$AdQualityFil3","_filters$AdQualityFil4","_filters$AdQualityFil5","_filters$AdQualityFil6","_filters$AdQualityFil7","_filters$AdQualityFil8","_filters$AdQualityFil9","_filters$AdQualityFil10","_filters$AdQualityFil11","_filters$AdQualityFil12","uniqueCreativeAdIds","advertiserNames","adIds","advertiserIds","advertiserAccountIds","adTitles","adUrls","longHeadlines","shortHeadlines","adUnitIds","_result$Filters","_result$Filters2","_result$Filters3","_result$Filters4","defaultDateTimeLocal","setHours","defaultDateUTCBased","blockRequestSourcesPromise","getBlockRequestSources","adPerfDataPromise","blockSummaryDataPromise","d","blockRequestData","mappedBlockRequestData","blockRequestSourceName","abs","_getStore$active$endD","_getStore$active$star","param","adPerfDataEnhanced","activeFilters","apiErrorObj","selectedAds","handleAPIRequestsAndResponses","processChannelsResponse","toUpperCase","startDateRevenue","endDateRevenue","paramsLastSevenDayRevenue","processAdidRevenueResponse","getAdIdRevenue","fetchedRevenue","startDateDetails","endDateDetails","paramsAdDetails","processAdidDetailsRequest","responseListingsInverted","titlesInverted","urlsInverted","destUrlsInverted","adDestUrls","imagesInverted","listingSamplesMap","listingSamples","eachTitle","listingsWithTheTitle","entries","eachListing","sample","eachUrl","listingsWithTheUrl","adUrl","eachDestUrl","listingsWithTheDestUrl","eachImage","listingsWithTheImage","adImage","adimage","listingsCount","adListingItems","getAdIdDetails","fetchedAdDetails","deactivateBlockedAds","blockSummaryParams","blockReasonComment","blockedBy","blockSource","createImageBlock","reportedImages","blockImage","blockSummaryForCSVFromTable","blockImagesSummary","getInitialFilterList","filterListValues","_getStore$filters$raw","_getStore$filters$raw2","selectAll","deselectAll","ListFilter","checkBoxRow","onSelect","onSelectAll","onDeselectAll","areAllElementsSelected","lst","hasSelectedElements","onAddRawElementToList","onSelectChanged","onSelectAllChanged","_getStore$filters$act3","onDeselectAllChanged","_getStore$filters$act4","contains","doesNotContain","beginsWith","endsWith","equals","doesNotEqual","inputValue","addMore","selectFilter","TextFilter","onSelectFunc","onChangeFunc","simpleStringFilterTypeOptions","allStringFilterTypeOptions","optionType","defaultValue","MultiTextFilters","onSelectHandle","onChangeHandle","pair","onAddMoreClick","isLastPairCompleted","lastCondition","lastValue","AdQualityFilters","filtersItems","shouldShowHeadlines","filtersToRender","addTempConditionPair","onSelectAllHandle","onDeselectAllHandle","_active$AdQualityFilt","_active$AdQualityFilt2","_active$Markets","_active$filter","adSourceField","adSourceFields","filterFields","searchBoxItem","descriptionCheckbox","float","selectedClose","cancelIcon","applyButton","blockAdChannelButton","imageListTitle","outline","boxSizing","imageListSizer","imageListPadder","imageListLabel","imageListImage","adBlockPanelListingBox","borderStyle","adBlockPanelListingPaginatedBox","adBlockPanelListingPaginatedLeftItems","adBlockPanelListingPaginatedRightItems","adBlockPanelListingLightText","adBlockPanelListingCenterLightText","adBlockPanelListingLoadingBox","adBlockPanelListingNoneBox","pivot","itemContainer","formItem","formSection","commands","HEADLINE_ENABLE_DATE","AdCreativePage","adSourceOptions","useComboBoxAsMenuWidth","_createDropDown","_createLocaleOptions","providersToNames","unshift","_gridDefaultColumns","_gridImageDefaultColumns","_commandBarProps","_getBlockDataSelectionItems","_datagrid","onRenderItemColumn","_renderBlockSummaryItemColumn","_getSAMBlockDataSelectionItems","_renderSAMBlockSummaryItemColumn","_renderAdProviderOptions","xandrAuctionAdProviders","last3Months","setMonth","isRequired","onChanged","boxSide","_renderFilterPanel","TeachingBubble","directionalHint","DirectionalHint","bottomLeftEdge","hasSmallHeadline","hasCloseIcon","headline","descriptionLabel","_getSelectionItems","_renderAdCreativeItemColumn","_filterItems","onFilterMenuCalloutClose","initialFilterListValues","showClearAll","hideCallout","smallFixedFar","listFilters","isViewOnly","FocusZone","renderedWindowsAhead","getItemCountForPage","_getItemCountForPage","getPageHeight","_getPageHeight","_onRenderImage","autoAdjustHeight","reasonsCategoriesL1","isGeminiAd","_getCurrentlySelectedListingPageItem","Pagination","totalPageCount","onPageChange","_createBlockRequestSourcesDropdown","_createBlockingMarketsDropdown","itemIndex","surfaceRect","_columnCount","_columnWidth","_rowHeight","itemNumber","Pivot","linkSize","onLinkClick","PivotItem","itemKey","_filterFields","_adPerfDataGrid","_blockAds","_blockImages","_blockSummaryPageFields","_SAMBlockSummaryDataGrid","_blockSummaryDataGrid","listingSample","currentSelection","sameAds","adData","imageElements","reasonDetails","fieldContent","_getStore$active$bloc2","imageListLength","mergeStyles","placement","adProviderEnum","destUrl","accountList","availableLocales","LOCALE","adQualityLocale","availableMarkets","blockRequestSources","AdQualityPage","InventoryPageTabs","useEntityTypeManage","activeSubTab","setActiveSubTab","Sites","Apps","apps","useStyles","makeStyles","rowGap","divider","spacer","onTabSelect","selectedValue","siteTabLabel","appTabLabel","FluentProvider","webLightTheme","TabList","onTabSelected","Tab","Divider","pending","siteId","propertyUrl","adUnitCreationDate","higherMonetization","higherMonetizationEnabled","higherMonetizationNotSetup","marketClassification","ownedAndOperatedCore","ownedAndOperated","syndicated","selectTier","sponsored","sponsoredEnhanced","mediationCardNoConnectionHeader","mediationCardNoConnectionDesc","mediationCardNoConnectionC2A","mediationCardConnectedHeader","mediationCardConnectedDesc","mediationCardConnectedC2A","changeName","zeroAdUnitsTitle","zeroAdUnitsDescription","zeroAdUnitsCallToAction","prepareAdUnitsGrid","nativeAdOnboardingMsg","saveAdunitFailed","adUnitInvalidId","adunitMediationUpdateStatusFailed","adunitDetailsFailedToLoad","adunitTemplateFailedToLoad","failedToLoadAdunits","failedToLoadAdunitsMediationStatus","failedToLoadAdunit","failedToFetchAdSenseAdunit","noConnectionWithAdSense","editedAdunitSuccess","adunitNameInvalid","createAdunitFailed","createAdunitInvalidState","AdUnitCallout","calloutStyles","textFieldContainer","spinnerStyles","buttonsContainer","visibleCallOut","Callout","callOutMessages","setInitialFocus","onScriptPageInitialized","adunitId","onScriptChanged","onCopyScriptIconChanged","onCopyCodeIconChanged","onScriptPageSubmitted","onScriptPageFormCleared","View","MultiStepEdit","isEditing","isCreating","isInPageForm","noCodeFound","setUpTemplate","noScriptDesc","NoScriptPage","NoCodeFound","setupTemplateRedirectionInPageView","_props$goToStep","goToStep","setupTemplateRedirectionFromPanel","getScriptPageStore","copyScriptIcon","copyCodeIcon","AdunitServingScript","tips","subTitle1","scriptPlacementInfo","subTitle2","copyCodeButton","copyScriptImageAlt","scriptCodePasteGuideline","copyCodeButtonDescription","doneButtonLabel","backButtonLabel","failedToFetchScript","inValidStateInScriptPage","AdUnitDoesNotHaveTemplate","pageWidth","tipsText","scriptWithImage","scriptSectionLeft","messageBar","scriptBox","scriptHolder","whiteSpace","wordBreak","_getClassNames","NativeAdScriptPage","_getAdunitStore$activ","scriptRaw","_props$siteId$toStrin","_props$siteId","_props$siteId$toStrin2","shouldManualTriggerInitialization","shouldRenderComponent","headerScript","adRenderingCode","_originalScript$match","originalScript","adUnitIdMatch","adUnitSnippetSerializer","querySelectorAll","innerText","focus","onCopyScriptClicked","navigator","clipboard","writeText","scriptPlacementImage","onCopyCodeClicked","CodePanel","_scriptProps$adunitId","uploadBoostTemplate","downloadTemplate","adunitType","marketPlaceOptionCore","marketPlaceOptionRest","marketPlaceOptionSyndicated","marketPlaceOptionSelectTier","marketPlaceOptionsSponsored","marketPlaceOptionsSponsoredEnhanced","adunitNameLabel","adunitIdLabel","marketplaceLabel","businessModelLabel","businessModelLevel2AriaLabel","distributionPartnerCodesLabel","distributionPartnerCodesLabelDescription","distributionPartnerCodesTextfieldPlaceholder","updateAdUnit","continueAdUnit","cancelAdUnit","previousStepAdUnit","channelTitle","propertySectionTitle","advOptionTitle","createChannelButton","servingTierTitle","servingTierOptionLowcost","publisherGroupConfigLabel","publisherGroupConfigOptionDefaultPlus","publisherGroupConfigOptionDefault","publisherGroupConfigOptionGeneralist","publisherGroupConfigOptionYieldOptimizer","publisherGroupConfigOptionYieldMaximizer","publisherGroupConfigOptionBingandYahoo","publisherGroupConfigOptionLowQualityDistribution","publisherGroupConfigOptionMediumQualityDistribution","publisherGroupConfigOptionHighQualityDistribution","privateMarketplaceLabel","privateMarketplaceTextfieldLabel","privateMarketplaceTextfieldPlaceholder","promotionRadioOptionLabel","promotionOptionTextfieldLabel","promotionOptionTextfieldPlaceholder","boostRadioOptionLabel","boostOptionTextfieldLabel","boostOptionTextfieldPlaceholder","propertyName","propertyButton","siteButton","websiteUrl","propertyDefaultOptionText","propertyDefaultNotFound","siteDefaultNotFound","createPropertyButtonLabel","propertySearchPlaceholder","businessModelLevel1DefaultOptionText","businessModelLevel2DefaultOptionText","propertyPickerEmptyOptionLabel","createPropButtonAriaDesc","propertyOptionsAriaLabel","propertyPickerSearchBoxAriaDesc","propertyPickerItemSelectedAnnounceMsg","createAdunit","newAudienceAd","nativeAdOptionLabel","searchAdOptionLabel","otherAdOptionLabel","nativeAdDesc","seeExample","comingSoon","templatePanelTitle","mediationHeader","mediationDescription","mediationToggleLabel","nativeAd","nativeAdSubContent","displayAd","displayAdSubContent","nativeAdConfigLabel","nativeAdConfigLabelFont","nativeAdConfigLabelTitleColor","nativeAdConfigLabelBackgroundColor","nativeAdConfigLabelButtonBackgroundColor","nativeAdConfigMsgBarContent","displayAdMsgBarContent","displayAdMsgBarLink","adPreview","adPreviewHorizontal","adPreviewVertical","adPreviewContainerSize","warningAdUnitTypeNotSelected","warningAdUnitTypeNotFullySelected","saveAndGetCode","finishAdUnitCreation","comingSoonMsg","selectDisplayAdLayout","displayAdPreviewHeadline","displayAdPreviewTextContent","displayAdPreviewLearnMoreButton","displayAdPreviewExamplePrimaryTitle","displayAdPreviewExampleSecondaryTitle","displayAdPreviewExampleTertiaryTitle","nativeAdPreviewPreviewTitle","nativeAdPreviewPreviewUrl","createAdUnitSuccessNotification","editAdUnitSuccessNotification","duplicatedSiteCreationErrorToastNotification","failedLoadAdUnitNotification","displayAdHorizontal","displayAdSqaure","displayAdVertical","settingUpAdunitMediationSuccess","removingAdunitMediationSuccess","updateAdunitFailed","loadTythonAdunitFailed","settingUpAdunitMediationFailed","removingAdunitMediationFailed","createPropertyFromAdunitFailed","createSitePanelAccessibilityAnnouncement","panelCloseButtonAriaLabel","fetchAdunitById","fetchAdunitMediationStatus","pubcenterAdUnitIds","adUnitNotConnectedStatus","updateAdUnitGrid","isMediated","shouldAvoidAdUnitViewState","adUnitsRawData","disableAdunitMediationStatus","isAppItems","nonTythonFilters","tythonFilters","_dataRow$mediatedWith","nonTythonItems","getCustomCommandBarItems","direction","before","commandBarButtonAs","tythonItems","primaryButtonUrl","onPreDeleteItems","_deletedItem$mediated","deletedItem","HeaderInfoCallout","headerInfo","bottomCenter","hoverCardStyles","HoverCard","plainCardProps","onRenderPlainCard","HoverCardType","plain","sticky","loadingGrid","hoverCardHost","actionButtonsContainer","monetizationUnderline","mediationHelpIcon","onBoardingMsg","FormatMessage","Styles","History","getCallOutContent","_item$mediatedWithAdS","callToActionLabel","editRouter","getServingStatusLabel","servingStatusType","ServingStatus","adManagementMessages","ServingStatusLabel","withParentLayout","abortDataFetch","tythonUser","setAdUnitCallout","propertyServingConfigs","isAdSenseConnected","commonColumns","_getGridPropertyStore","NotServing","config","shimmerWrapper","nonTythonEditAdUnitOptions","editAdUnitOptions","editButtonOnClick","menuProps","tythonColumns","isShowingDisabled","onRenderHeader","_item$mediatedWithAdS2","leftTopEdge","instantOpenOnClick","trapFocus","nonTythonColumns","adUnitsGridReady","adUnitsGridData","pageContent","inventoryPlatformType","InventoryPlatformType","UWP","appAdunitCodePanelTitle","appAdunitManagePageGridTitle","gridColumnTitleAppName","gridColumnTitleAppId","gridColumnTitleConnectedApp","gridColumnTitleAdUnitPlatform","gridColumnTitleAppAdUnitStatus","gridColumnTitleIssues","gridColumnTitleActions","gridCreateButtonLabel","propertyInventoryTypeLabelUWP","useAppAdUnitCodePanelStyles","textArea","textAreaWrapper","shorthands","tokens","spacingVerticalM","codeBlocOnlyTextWrapper","copyButton","spacingHorizontalXXL","spacingVerticalXXL","additionalCodeArea","useAppAdUnitCodePanel","renderCodeBlockOnly","setIsPanelOpen","codeContent","setCodeContent","adunitCode","setAdunitCode","configCode","setConfigCode","onPanelTrigger","codeForAdUnit","codeForConfig","isContentCopied","setIsContentCopied","codeBlock","mergeClasses","appearance","onMouseLeave","Button","Checkmark16Regular","Copy16Regular","Textarea","resize","OverlayDrawer","onOpenChange","DrawerHeader","DrawerHeaderTitle","Dismiss24Regular","DrawerBody","InventoryPlatformTypeLabel","useAppAdsGrid","servingConfig","_getGridPropertyStore2","_getGridPropertyStore3","_getGridPropertyStore4","_getGridPropertyStore5","commandBarItems","adUnitPanelProps","AppAdUnitCodePanel","TythonAppManagePage","getWindowsAppFeatureFlagStore","SiteAdsManageView","AppAdsManageView","AppAdsManagePage","EntityTypeSwitch","adUnitType","propertySelected","createPropertyPanelOpen","storeIds","template","isImpressionFeedbackRequired","adSenseConnectionState","Success","googleAdSense","connectionStatus","parsedPublisherId","parsedAccountId","setTemplate","adUnitid","loadPropertiesServingConfigs","propertyServingConfig","fetchPropertiesServingConfigs","fetchPropertiesDataAction","_adUnitsRaw$data","creationDate","_adUnitsRaw$data2","pubcenterAdUnitId","AdUnitMarketClassification","Syndicated","PublisherGroupConfig","DefaultPlus","tythonRole","AdUnitType","Native","_viewModel$properties","_viewModel$channels","BoostTemplate","channelIds","classification","existingFinancialClassification","financialClassification","attributes","Taxonomy","requireImpressionFeedbackForBillableTraffic","publisherGroupConfiguration","servingCostTier","p","StepState","requiredFeedbackSignalsLabel","requiredImpressionFeedbackSignalOptionLabel","defaultAdUnitName","adunitErrorInForm","createdAdunitSuccess","loadPropertyFailedInAdunit","PartnerCodesValidationSchema","matches","partnerCodeList","integer","rpsGuarantee","AdUnitRPSGuarantee","Search","Dirty","_adUnitsGrid$find","adUnitsGrid","_entity","_entity2","isBoost","errMsg","urlParamsConnect","enableAdunitMediationStatus","fetchAdSenseAccount","googleAdSenseActive","adUnitOriginalStatus","updateAdunitMediationStatus","_active$name","adUnitData","listItem","listItemLabel","PropertyPicker","Component","announceItemSelected","isCreateButtonDisabled","onListItemClicked","createButtonAriaDescription","searchBoxAriaDescription","itemSelectedAnnounceMessage","listItems","emptyOptionLabel","underlined","_onCallSuggestionsChanged","preventDismissOnScroll","shiftKey","FocusZoneDirection","vertical","isCircularNavigation","adUnitSiteLoading","textDecorationColor","green","searchContent","iconContainer","PropertySitePicker","searchText","clearSearchOnSelect","getCreatePropertyStore","PropertyIdField","onPropertyChanged","onPropertyErrorChanged","approvalStatusComments","onIdChanged","onNameChanged","onUrlChanged","onClarityChanged","onClarityIdChanged","onEditClarityId","clarityEdit","onSettingClarityErrorMessage","clarityErrorMessage","GetPropertyAccessPermission","IsDisabled","inputPropertyName","inputSiteName","propertyNameLength","PropertyNameInputField","propertyAccessPermissions","accessLevel","inputRef","getElementsByClassName","siteUrl","websiteUrlExample","websiteUrlInvalidMsg","PropertyUrlInputField","pattern","prefix","createSitePageTitle","editSitePageTitle","useDetailsPageButtonsStatus","isTythonUser","isSubmitButtonDisabled","_active$tythonClarity","tythonClarity","connectingClarityApprovalTython","_active$tythonClarity2","clarityType","ClarityType","Behavioral","_active$tythonClarity3","Fraud","onHandleSubmit","_active$clarity","_active$clarity2","onHandleCancel","fetchPropertyById","updateLoadingStatus","PropertyMessages","rawProperty","parentId","parentName","associatedAdUnitIds","clarityProjectId","originalClarityId","ClarityStatus","clarityLinkingEnabled","NotConnected","PropertyApprovalStatus","form","isEditMode","duplicateName","duplicateDomain","AutoApproved","UnderManualReview","nonTythonPropertyErrorModel","errorCount","enableMicrosoftClarity","adunitStore","adunitPropertyList","getClarityErrorMessage","PropertyEditFailedNotification","formOperation","loadAttachedAdUnits","onApprovalStatusChanged","onApprovalStatusCommentsChanged","comments","onAttachedAdunitsChanged","onEnableClarityToggleChanged","_clarity$originalClar","publisherFullInfo","SelfServe3rdParty","propertyServingConfigForProperty","ClarityErrors","onClarityUpdate","updatedProperty","updatedProperties","ClarityProjectNotLinked","ClarityProjectUnlinkingFailed","projectId","linkingNote","cancelledStatus","pendingStatus","declinedStatus","expiredStatus","ClarityInputField","isShownInPanel","existingId","isEditable","note","light","shouldShowNote","Declined","Expired","Cancelled","_active$id","getLinkStatusNote","ConnectedClarityField","clarityProjectDetails","clarityProjectResendButton","ClaritySection","clarityConfigs","showToggle","showInput","getClaritySection","inlineLabel","approved","autoApproved","rejected","manualreview","GetApprovalStatusOptions","PropertyApprovalStateField","PropertyApprovalStatusInputField","pickerAriaDescription","createButtonAriaDesc","addAllAriaDescription","removeAllAriaDescription","addIconAriaLabel","removeIconAriaLabel","expandGroupAriaLabel","selectedListAriaLabel","HierarchicalMultiSelectPickerBase","htmlFor","_id","searchBoxPlaceHolder","initialSearchBoxPlaceHolder","expandedGroup","_searchBoxPlaceHolder","css","itemsPane","disabledPanel","_onSearchChange","subPane","_renderGroupsPane","VerticalDivider","_renderSubItemsPane","onFilteredItemsLabel","groups","_createGroups","subItemsPane","headerLabel","group","disabledListItem","_onGroupExpandedClick","iconButton","subItems","renderAddAll","textButton","_onAddAll","groupName","onSubItemsLabel","_onItemAddedClick","onSelectedItemsLabel","renderRemoveAll","_onRemoveAll","groupSubItems","startIndex","groupHeader","groupHeaderIcon","selectedPaneItem","_onItemRemovedClick","_getIndexOfItemAtElement","remainingSelectedItems","queryName","allItems","collectionA","collectionB","currentGroup","itemColumnValue","level","_getIntersection","intersectedSelectedItems","availableItems","_onRenderLabel","hasErrorMessage","picker","_renderItemsPane","_renderSelectedItemsPane","DelayedRender","el","getAttribute","HierarchicalMultiSelectPicker","errorText","AnimationClassNames","slideDownIn20","headerTitle","adUnitPickerAccountsCountLabel","adUnitPickerAdUnitsCountLabel","PropertyAttachedAdUnitsField","isExpanded","CreateProperty","isInPanel","savingProp","setActivePropertyId","TemplateTypeNumber","BYTE_UNITS","convertSizeToReadableUnits","numberOfBytes","exponent","approx","nonCSVFileUploadError","uploadSizeLimitError","uploadError","uploadFile","fileUploadContainerStyle","red","fileInputStyle","fileUploadLabelStyle","csvTemplateLinkStyle","fileUploadDescriptionStyle","opacity","fileUploadedStyle","uploadStatusStyle","actionContainerStyle","errorStyle","progressContainerStyle","flexGrow","ACCEPTED_FILE_EXTENSION","FileOperation","BoostJsonFileUpload","onNewFileUpload","onReplaceFile","isUploadInProgress","setIsUploadInProgress","fileUploadError","setFileUploadError","fileUploadStats","setFileUploadStats","fileReader","fileOperation","handleReplaceFile","Replace","handleFileUpload","handleNewFileUpload","NewUpload","readableSize","readerInstance","errorDiv","innerHTML","JsonObject","numberOfAds","assets","renderingConfig","boostFileValidation","prevValue","cancelUpload","abort","ProgressIndicator","renderUploadInProgressSection","renderFileUploadedSection","jsonLink","ParsedBoostTemplate","dataStr","alert","mediationPopupMessages","turnOff","OptOutMediationPopup","PopupCard","isShown","AdUnitOptOut","popUpTitle","popUpDescription","primaryButtonAriaLabel","secondaryButtonAriaLabel","onPopupDismiss","onPrimaryButtonClick","onSecondaryButtonClick","DEFAULT_AD_PREVIEW_FONT","DEFAULT_AD_PREVIEW_BACKGROUND_COLOR","DEFAULT_AD_PREVIEW_BUTTON_BACKGROUND_COLOR","DEFAULT_AD_PREVIEW_TITLE_BACKGROUND_COLOR","TythonAdTypes","TythonAdUnitDisplayAdTypeLayout","TythonAdUnitDisplayAdTypeLayoutLabel","Horizontal","Square","Vertical","NUMERIC_FIELDS","useAdUnitTypeSelector","adTypes","nativeProperties","buttonBackground","titleColor","adDimensions","setAdDimensions","displayAdLayout","setDisplayAdLayout","HorizontalUpperAdPreview","VerticalLeftAdPreview","SquareLeftAdPreview","HorizontalBottomAdPreview","SquareBottomAdPreview","VerticalBottomAdPreview","adPreviewHeight","adPreviewWidth","adPreviewConfig","adHeight","adWidth","isNativeAdActive","isDisplayAdActive","shouldRenderNoSelectionMsg","shouldRenderFewerSelectionMsg","Display","onToggleAdType","currentType","onDisaplayAdLayoutChange","onAdPreviewConfigChange","nativePropertyConfigs","onToggleDisplayAd","onToggleNativeAd","isDisplayAdHorizontal","isDisplayAdSquare","isDisplayVertical","l1","adtypesTitle","businessModelLevel2Dropdown","dropdown","combobox","multiSelectPicker","propertySection","siteSection","boostUploadDiv","boostUploadOuter","advanceOptionTextfieldLabel","formAction","propertyDetails","adTypeContainer","servingTierChoiceGroup","checkbox","adTypeChoiceGroupOption","textBox","mediationToggle","adunitTypeAccordionWrapper","WebkitUserSelect","MozUserSelect","msUserSelect","adunitTypeAccordionCheckboxLabel","adunitTypeWarningMsgBar","adunitTypeAccordionContentWrapper","adunitTypeLeftSection","adunitTypeRightSection","previewSDKWrapper","overflowX","adunitTypeFormTitlePrimary","boldFieldTitle","horizontalSelectionWrapper","infoMsgBar","expandIcon","newPropertyPanelHeader","adPreviewWrapper","mediationDescriptionWrapper","adunitTypeDisplayAdPreviewHead","adunitTypeDisplayAdPreviewHeadButtons","borderLeft","adunitTypeDisplayAdPreviewContainer","adunitTypeDisplayAdPreviewLayoutWrapper","verticalAdPreviewBottomWrapper","displayAdPreviewExampleTitle","CreateAdunit","propertyMessages","headerTextProps","adunitAccessPermissions","selectedChannels","adUnitAccessPermissions","selectedProperty","_store$active$serving","ChoiceGroupOption","AdUnitServingTier","lowCost","handlePrivateMarketPlace","PrivateMarketplace","InHouse","privateMarketPlaceCheck","Boost","Generalist","YieldOptimize","YieldMaximize","BingYahooOAndO","LowQualityDistribution","MediumQualityDistribution","HighQualityDistribution","childrenGap","_getAdvertisersWhitelistTextFieldPlaceholder","_onRenderAdvertiserWhitelistLabel","businessModelLevel1Key","dropdownoptions","level1BusinessModel","parentValue","_getAdvertisersWhitelistTextFieldLabel","downloadTemplateMounted","marketPlaceDropdownOptions","OwnedAndOperatedCore","OwnedAndOperated","Sponsored","SponsoredEnhanced","SelectTier","businessModelDropdownOptions","businessModelLevel2Key","selectedBusinessModel","parentBusinessModel","_getAdUnitAccessPermission","_getPropertyAccessPermission","addProperty","renderAdunitDetails","_store$active$id","_tythonUser","_fetchBusinessModelLevel2Options","isValidPublisherForFeedbackSignals","InternalPremium","ManagedPremium","_channelList","_propertyPicker","Empty","_propertySitePicker","_advancedOptions","_renderPropertyPanel","_getSubmitLabel","submitButtonLabel","popupProps","onPrimaryClick","onSecondaryClick","AdUnitMediationSelector","activeAdunit","toggleIsLoading","onAdunitMediationChange","shouldRenderMediationOptOutPopUp","setShouldRenderMediationOptOutPopUp","mediationEnabled","AdUnitNameInputField","errorMsg","StepperDirection","weight","circleAbstract","verticalStepStyles","stepBlock","stepTitle","stepTitleSelected","circleWrapper","circleLabel","circleSelected","circleMarked","barStyle","horizontalStepStyles","Step","totalSteps","updateStep","isMarked","isLastChild","stepWrapper","Stepper","labelArray","currentStep","isStepMarked","stepperGoToFutureStepError","_fonts$mediumPlus","ResponsiveMedium","mainContainer","leftPane","rightPane","leavePagePopupMessages","stayOnPage","leavePage","LeavePagePopup","Leaving","useStepperLogic","steps","startAt","backToBase","goToErrorMessage","setCurrentStep","stepsState","setStepState","fill","updateStepState","newState","_URL","searchParams","isStepDirty","allowFreeNavigation","freeNavigationErrorMessage","nextStep","stepUpdater","prevStep","_steps$currentStep$on","_steps$currentStep","onNext","previousStep","navigateBack","getStepperTitle","getBreadCrumpTitle","DetailPageWithStepper","openStep","onReduceData","idx","nextBtnLbl","getSubmitLabel","isNextDisabled","previousBtnLbl","getCancelLabel","extraButtons","isFormValid","tythonPropertyErrorModel","isEditOperation","clarityProjectIdForTython","_msg$onSubmit","adsText","adsTextExplanation","adsTextObligation","createAdsTxtStepTitle","addpubCenterToFileStepTitle","stepOne","stepTwo","stepThree","downloadFilePrefix","downloadFile","addingFileToRootDirectoryStep","verifyingFileStep","addpubCenterToFileStep","poolImage","stepHeader","AdsTextPage","_URL$createObjectURL","Blob","fileIcon","_URL2","createObjectURL","fishpool","imageFit","propertyConfigs","_p$clarityConfig","_p$clarityConfig2","_p$clarityConfig3","clarityConfig","_p$clarityConfig4","originalClarityType","approvalBehavioralOption","onClarityTypeChanged","onApprovalBehavioralTC","isApproved","microsoftClarity","microsoftClarityTC","microsoftClarityPrivacy","microsoftClarityInformation","microsoftClarityTermsOfUse","advancedOptionHeader","advancedOptionDesc","advancedOptionApproval","basicOptionHeader","basicOptionDesc","existingClarityOptionHeader","existingClarityOptionDesc","advantageOneHeader","advantageOneDesc","advantageTwoHeader","advantageTwoDesc","advantageThreeHeader","advantageThreeDesc","recommendationTag","sidePanelPending","sidePanelDeclined","sidePanelExpired","sidePanelCancelled","wrapper","wrapperTitle","section","sectionDetails","disabledSection","sectionSelector","marginBlockStart","marginBlockEnd","desc","overflowWrap","advantageWrapper","advantageHeader","advantageSection","imageWrapper","panelPending","panelProjectIdApprovedSection","ClarityOptions","chosenType","isChosen","checkMark","getWindowStore","getAdvantage","getChoiceImage","imgSrc","imgAlt","onOptionClick","preventDefault","underline","richBehavior","privacy","codeFree","existingClarity","br","getInformationMessage","onClarityProjectChanged","getPropertyScriptPageStore","subTitle","microsoftConnectedClarity","microsoftClarityConnectedAccountNotice","microsoftClarityEmailSentNotice","scriptPageInvalidState","scriptPageFailedToLoadClarityProject","_propertyConfig$clari","propertyConfig","ResponsiveExtraSmall","clarityContainer","claritySection","claritySectionTitle","marginButtom","panelPendingText","PropertyScriptPage","HEADER_SCRIPT","clarityLogo","processNameCreate","processNameEdit","CreateSiteStep","AdsTxtCreationStep","GetCodeAndFinishStep","createPropertyBtnLbl","createPropertySuccessNotification","clarityProjectDoesNotExistNotification","createPropertyFailedNotification","CreateTythonProperty","activeProperty","isPropertyFormSubmittable","onPropertyFormSubmittable","clearStores","stepToBeFiltered","hideStep","AdUnitSiteSelector","onCloseNewPropertyPanel","isPropertyPanelActive","onSiteChange","onAddSiteClick","onCreatingNewProperty","isSaving","routeProps","accordionControlWrapper","borderTopLeftRadius","borderTopRightRadius","accordionToggleCheckboxLabel","accordionContentWrapper","borderBottomLeftRadius","borderBottomRightRadius","accordionChevron","subContentText","accordionCheckBoxArialLabelChecked","accordionCheckBoxArialLabelUnchecked","Accordion","subContent","wrapperClassName","disableMsg","defaultExpanded","toggleExpand","collapseAccordion","setTrue","expandAccordion","StackItem","themeColors","customColor","colorPicker","swatchColors","defaultColor","getColorByHex","HEX_CHARACTER_REGEX","HEX_MASK_REGEX","ColorPicker","_getColorByHex","_getColorByHex2","setColor","selectedColor","calloutVisible","setCalloutVisible","setCustomColor","swatchColor","buttonId","colorPickerButtonRef","bucketIcon","xLarge","chevronIcon","alignContent","colorIcon","colorSelected","swatchColorPickerCallout","handleHexCodeFieldChanged","_context","hexValue","_replaceAllInstanceProperty","_props$onChange2","controlled","colorType","onCalloutDismiss","_colorPickerButtonRef","bottomRightEdge","handleTabKey","FocusZoneTabbableElements","defaultTabbableElement","SwatchColorPicker","colorCells","columnCount","cellShape","defaultSelectedId","_color","_props$onChange","handleColorChanged","doNotContainWithinFocusZone","MaskedTextField","mask","maskFormat","onBlur","onKeyUp","fontOptions","containerRef","adPreviewRef","AdPreview","providerName","ctaText","AdUnitTypeSelector","CMUIPopupArticleByIdAnchor","Item","MessageBar","onRenderPrefix","AutoFitWidth","AutoFitHeight","linkFormat","layoutKey","propertySerializer","getSiteSelectionSummary","fetchTythonAdUnitById","TythonAdUnit","getLargestAdUnitNumber","arr","useAdUnitData","_googleAdsenseStore$a2","googleAdsenseStore","onPropertyCreated","adUnitsStore","setProperties","isPropertyLoading","setIsPropertyLoading","isPropertySaving","setIsPropertySaving","isAdUnitLoading","setIsAdUnitLoading","isAdUnitMediationLoading","setIsAdUnitMediationLoading","isAdUnitSaving","setIsAdUnitSaving","isPropertyLoadHandled","isAdUnitLoadHandled","isMediationLoadHandled","setActiveAdunit","getActiveAdunit","initialAdUnit","shouldFetchProperties","isCreatingNewAdUnit","isValidAdUnit","_activeAdunit$adTypes","existingAdUnitId","extractAdUnitId","shouldFetchAdUnitMediationStatus","_googleAdsenseStore$a","shouldInitializeHookOnCreation","shouldInitializeHookOnEdition","propertiesPromise","propertyConfigsPromise","pc","LoadingSitesFailed","fetchProperties","fetchData","fetchAdSenseAccountStatus","_data$","isAdUnitMediationEnabled","newAdunitName","_data","generateNewAdUnitName","initializeDefaultAdUnit","fetchedAdUnit","adUnitName","convertToTythonAdUnitViewState","fetchAdUnit","isAdUnitInitialized","createProperty","createPropertyService","newProperty","createTythonAdUnit","enablebCat","bCat","xCat","enablebAdv","bAdv","_resRaw$errors$0$desc","_resRaw$errors","_resRaw$errors$0$code","_resRaw$errors2","_resRaw$errors$0$desc2","_resRaw$errors3","resRaw","CreateTythonAdUnitFailed","enableTythonAdUnitMediation","onRequestSuccess","updateTythonAdUnit","isAdUnitNameUpdated","isDirty","useAdunitEventHandlers","activeNewPropertyCreation","activeScriptView","deActiveNewPropertyCreation","onRedirectBackToAdUnitManagePage","onAdunitNameChange","currentActiveAdunit","onAdunitTypeChange","DuplicatedSiteCreationErrorNotification","onAdUnitSubmit","_data$data$servingCon","newAdUnitId","onRequestStart","disableTythonAdUnitMediation","useCreateTythonAdunitRenderControl","isScriptViewActive","adUnitNameProps","adUnitSiteProps","_getSiteSelectionSumm","adUnitTypeProps","adUnitMediationProps","adUnitScriptPageProps","adUnitDetailPageProps","CreateTythonAdunit","AppAdUnitPreviewLayout","createNewAppAdUnitPrimaryFormTitle","appAdUnitNameFieldLabel","appAdUnitApplicationIdFieldLabel","appAdUnitTypeFieldLabel","appAdUnitTypeBanner","appAdUnitTypeInterstitial","appAdUnitTypeNative","appAdUnitTypeBannerDescription","appAdUnitTypeBannerHelpLink","appAdUnitTypeInterstitialDescription","appAdUnitTypeInterstitialHelpLink","appAdUnitTypeNativeDescription","overviewNativeAdsLink","appAdUnitTypeDisplayAdsTitle","appAdUnitTypeNativeAdsTitle","appAdUnitTypeVideoAdsTitle","appAdUnitDisplayAdsBannerAdSizeLabel","appAdUnitVideoAdsInterstitialVideoAdConfigTitle","appAdUnitNativeAdConfigTitle","appAdUnitNativeAdsConfigFontLabel","appAdUnitNativeAdsConfigTitleColorLabel","appAdUnitNativeAdsConfigBackgroundLabel","appAdUnitNativeAdsConfigButtonBackgroundLabel","appAdUnitNativeAdsConfigMsgBar","appAdUnitVideoAdsInterstitialVideoAdConfigVideoSkipLabel","createNewAppAdUnitBannerAdTypeFormTitle","createNewAppAdUnitInterstitialAdTypeFormTitle","createNewAppAdUnitNativeAdTypeFormTitle","adTypeInfoMsgContent","adTypeInfoMsgHelpLink","adTypePreviewTitle","adTypePreviewLayoutHorizontal","adTypePreviewLayoutVertical","adTypePreviewLayoutSquare","adUnitFormCancelLabel","adUnitFormPreviousLabel","adUnitFormNextLabel","adUnitFormDoneLabel","adUnitFormSubmissionLabelSuccess","adUnitResultSummarySecondaryContent","adUnitResultSummarySecondaryContentSecondary","adUnitResultSummaryCodeHelpContent","adUnitResultSummaryCodeButton","adUnitResultSummaryCodeButtonInactive","adUnitResultSummaryFollowInstructionContent1","adUnitResultSummaryFollowInstructionContent2","adUnitResultSummaryFollowInstructionContent3","adUnitResultSummaryFollowInstructionContent3HelpLink","adUnitResultSummaryFollowInstructionContent4","adUnitResultSummaryFollowInstructionContent4HelpLink","adUnitResultSummaryFollowInstructionContent5","adUnitResultSummaryFollowInstructionContent5HelpLink","copyCode","copiedCode","adPreviewPrimaryTitle","adPreviewPrimaryDescriptionLine1","adPreviewPrimaryDescriptionLine2","adPreviewPrimaryDescriptionActionButton","adPreviewAdBadgeContent","appDetailSubTitle","appAdUnitNamePlaceholder","appAdUnitVideoSkipYes","appAdUnitVideoSkipNo","appAdUnitVideoAdsDuration","appAdUnitVideoAdsDurationMetric","appAdUnitNativePreviewTitle","nativeAdPreviewContainerSize","appAdUnitVideoPlayMethodAutoSoundOn","appAdUnitVideoPlayMethodAutoSoundOff","appAdUnitVideoPlayMethodClickToPlay","appAdUnitVideoPlayMethodMouseOff","appAdUnitVideoPlayMethodAutoplay","appAdUnitVideoPlayMethodSoundUnknown","appAdUnitVideoPlayMethodFieldLabel","appAdUnitUpdateSuccess","AppAdUnitType","AppAdUnitBannerSize","appAdUnitVideoPlayMethod","InfoLabelContent","html","dangerouslySetInnerHTML","__html","useAppAdUnitPrimaryFormStyles","shadow4Brand","dimensionInputsWrapper","spacingHorizontalM","dimensionInput","colorSelectorWrapper","sectionTitle","typographyStyles","title3","applicationDropdown","cardsWrapper","card","spacingHorizontalL","cardTitleRadioCheckbox","colorNeutralForeground2","body1Storng","body1Strong","dimensionDropdown","msgBar","colorBrandBackgroundInvertedSelected","colorPaletteRedForeground3","infoButton","spacingVerticalL","infoBubbleNoRequire","propertyOption","spacingVerticalSNudge","useV2SectionalAccordionStyles","horizontalDivider","titleWrapper","contentWrapper","verticalDivider","spacingHorizontalXXS","contentLeft","contentRight","useAppAdUnitResultSummaryStyles","stepAvatar","checkMarkLogo","codeCard","codeIcon","codeCardContent","colorNeutralBackground3","codeCardWrapper","spacingHorizontalS","spacingVerticalMNudge","strokeWidthThicker","colorNeutralBackground1Selected","codeHelpText","spacingVerticalS","codePanelButton","useAppAdUnitPreviewStyles","tittleWrapper","layoutTagsWrapper","previewWrapper","squareAdPreviewContainerSize","horizontalAdPreviewContainerSize","flowerBackgroundImg","backgroundImage","AdPreviewBackground","backgroundSize","verticalAdPreviewContainerSize","horizontalAdIconPosition","adIconSize","adBadgeStyle","colorNeutralForegroundInverted","colorNeutralForeground3","fontSizeBase200","lineHeightBase200","borderRadiusSmall","strokeWidthThin","colorNeutralBackground2Pressed","secondarySubtitleStyles","textShadow","shadow64Brand","colorNeutralBackground1","fontWeightBold","useAdPreviewRendererStyles","nonSelectableText","primaryAdWrapperHorizontal","primaryAdWrapperVertical","colorNeutralBackground5","primaryAdWrapperSquare","secondaryAdWrapperHorizontal","backgroundPositionY","secondaryAdWrapperSquare","secondaryAdWrapperVertical","backgroundPositionX","previewCardWrapperHorizontal","previewCardWrapperVertical","previewCardWrapperSquare","primaryAdIconHorizontal","primaryAdIconVertical","spacingVerticalXXS","primaryAdIconSquare","secondaryAdIconHorizontal","secondaryAdIconSquare","secondaryAdIconVertical","primaryAdButtonHorizontal","primaryAdButtonVertical","primaryAdButtonSquare","secondaryAdButtonHorizontal","colorStatusDangerBackground2","shadow","shadow64","secondaryAdButtonSquare","secondaryAdButtonVertical","primaryAdBadgeHorizontal","primaryAdBadgeSquare","primaryAdBadgeVertical","spacingVerticalXL","secondaryBadgeHorizontal","secondaryBadgeSquare","secondaryBadgeVertical","secondarySubtitleHorizontal","secondarySubtitleSquare","secondarySubtitleVertical","fontSizeBase400","lineHeightBase300","primaryTitleVertical","lineHeightBase400","primaryTitleSquare","displayNone","primaryBodyVertical","primaryBodySquare","setAdWidth","setAdHeight","Field","slotProps","Body1Strong","InfoLabel","Body1","Input","contentBefore","classes","previewCardWrapperClass","primaryAdWrapperClass","primaryButtonClass","primaryTitleClass","primaryAdVectorClass","primaryAdBadgeClass","primaryCaptionClass","primaryBodyClass","secondaryAdWrapperClass","secondarySubtitleClass","secondaryButtonClass","secondaryAdVectorClass","secondaryAdBadgeClass","Subtitle1","Caption1","AdVector","previewLayout","setPreviewLayout","InteractionTag","InteractionTagPrimary","AdPreviewDynamicRenderer","V2SectionalAccordion","onTitleToggle","isAccordionSelected","onRenderLeft","onRenderRight","isComponentExpanded","setIsComponentExpanded","shouldComponentExpand","onTitleChecked","Radio","Subtitle2","ChevronUp24Regular","ChevronDown24Regular","_applicationOptions$f","applicationOptions","adUnitApplicationId","onAdUnitApplicationIdChange","onAdUnitNameChange","onAdUnitTypeChange","validationError","shouldRenderPrimaryForm","selectedBannerAdUnitAdSize","onBannerAdUnitAdSizeChange","bannerAdSizeOptions","videoAdUnitSkipAllowed","onVideoAdUnitSkipAllowedChange","videoAdUnitDuration","onVideoAdUnitDurationChange","nativeAdUnitConfig","onNativeAdUnitConfigChange","videoAdUnitPlayMethod","onVideoAdUnitPlayMethodChange","adTypeAccordionItems","Body1Stronger","onOptionSelect","optionValue","selectedOptions","Option","checkIcon","intent","MessageBarBody","preview","NativeAdDynamicAdPreview","helpLink","useV2Link","StaticAdPreview","Video","_appAdUnitVideoPlayMe","contentAfter","validationMessage","addUnitName","Caption1Strong","secondaryLabel","shouldRenderResultSummary","isCodeBlockActive","setIsCodeBlockActive","onCopy","publisherIdCodeSnippet","Title3","align","Body2","Avatar","initials","CodeIcon","Copy20Regular","DEFAULT_NATIVE_CONFIG","mapPropertyToApplicationOptions","MicrosoftStoreAppId","useCreateTythonAppAdUnit","setAdUnitName","setAdUnitApplicationId","setAdUnitType","bannerAdUnitAdSize","setBannerAdUnitAdSize","setVideoAdUnitPlayMethod","setApplicationOptions","setVideoAdUnitSkipAllowed","setVideoAdUnitDuration","setNativeAdUnitConfig","rawAdUnit","setRawAdUnit","setShouldRenderPrimaryForm","setShouldRenderResultSummary","isSavingAdUnit","setIsSavingAdUnit","formStateMode","propertyServingConfigPromise","fetchedAdUnitPromise","adUnitRaw","nextOptions","asyncInitAdUnitData","primaryFormProps","deStructuredNativeConfig","detailPageProps","resultSummaryProps","_rawAdUnit$adUnitId$t","_rawAdUnit$adUnitId","CreateTythonAppAdUnit","AppAdUnitPrimaryForm","AppAdUnitResultSummary","Operation","AdunitPage","getRedirectionPage","componentProps","isAppAdunit","Switch","gridChannels","fetchChannelById","NaN","associatedFilterIds","ChannelType","CUSTOM","urls","filterStore","filterChannelList","adunitChannelList","newChannel","adunitsNumber","adunitNames","adfiltersNumber","adfilterNames","associatedAdUnitCount","_item$associatedAdUni","associatedFilterCount","_item$associatedFilte","ChannelPage","propsToRender","containerStyle","headerStyle","dateStyle","AnnouncementCard","dateFormate","announcementTitle","firstAnnouncementTitle","firstAnnouncementDescription","firstAnnouncementButton","secondAnnouncementTitle","secondAnnouncementDescription","secondAnnouncementButton","thirdAnnouncementTitle","thirdAnnouncementDescription","thirdAnnouncementButton","cardsContainer","getAnnouncementCards","setIsNotificationPanelOpen","itemData","CMUIPopupArticleUsingButton","anchorStyle","isNotificationPanelOpen","showRedDot","faqTitle","firstQuestion","firstAnswer","secondQuestion","secondAnswer","thirdQuestion","thirdAnswer","fourthQuestion","fourthAnswer","fifthQuestion","fifthAnswer","redirectUser","details","listStyle","arrow","FAQCard","order","_props$setIsOpen","setIsOpen","FAQSection","formatHTMLMessage","title1","title2","description1","description2","description3","notNowButton","dialogAriaLabel","getFRECardStyles","effects","elevation16","dot","selectedDot","dialogContent","dialog","dialogDefaultMaxWidth","FRECard","isLastCard","selectedCardIndex","totalCardCount","dismissDialog","nextButtonClicked","descStyle","FREContainer","updateCurrentStep","fre1","fre2","fre3","cards","newDomain","modalProps","titleAriaId","profileCardTitleNotStarted","profileCardDescriptionNotStarted","profileCardButtonNotStarted","siteCardTitleNotStarted","siteCardDescriptionNotStarted","siteCardButtonNotStarted","adUnitCardTitleNotStarted","adUnitCardDescriptionNotStarted","adUnitCardButtonNotStarted","profileCardTitleAwaitingForVerification","profileCardDescriptionAwaitingForVerification","profileCardButtonAwaitingForVerification","siteCardTitleAwaitingForVerification","siteCardDescriptionAwaitingForVerification","siteCardButtonAwaitingForVerification","profileCardTitleCompleted","profileCardDescriptionCompleted","profileCardButtonCompleted","siteCardTitleCompleted","siteCardDescriptionCompleted","siteCardButtonCompleted","adUnitCardTitleCompleted","adUnitCardDescriptionCompleted","adUnitCardButtonCompleted","setupProfile","setupSite","setupAdunit","NotStarted","AwaitingVerification","Completed","profileCardTitleNeedsAttention","profileCardDescriptionNeedsAttention","profileCardButtonNeedsAttention","SetupCardType","cardType","statusStyle","progressStepsContainerStyle","progressStepStyle","setupCardContainerStyle","setupContentStyle","setupCardButtonStyle","GetStarted","getShimmerSetupCard","SetupCard","showContent","statusSite","statusProfile","isStatusFieldsHaveValue","getProgressBar","bars","gettingStartedTitle","isProfileNotStarted","getProfileCardInfo","ProfileStep1","ProfileStep2","ProfileStep3","ProfileStep4","getSiteCardInfo","SiteStep1","SiteStep2","SiteStep3","getAdunitCardInfo","AdUnitStep1","AdUnitStep2","GettingStarted","profileCardInfo","siteCardInfo","adunitCardInfo","getStatusCardsInfo","gettingStartedCards","ConnectAppImg","ConnectSiteImg","getSetupCards","handleProfileCardButtonClick","handleCompleteProfileCardButtonClick","handleSiteCardButtonClick","handleAdUnitCardButtonClick","fetchSetupCardsStatus","sectionContainerStyle","currBalance","getBarChartCustomData","payout","clipPath","balanceImageStyle","balanceStyle","balanceTextStyle","currentBalanceStyle","lastPaymentInfoStyle","barChartSectionStyle","currentBalanceInfoStyle","currentBalanceInfoTextStyle","iconSectionStyle","iconContentStyle","iconTextStyle","performanceSectionTitle","viewPayment","lastEarned","balanceCardTitle","balanceImage","metricsDaterange","viewReports","BalanceCard","currentBalance","balanceImg","barHeight","barChartCustomData","hideTooltip","paymentImg","valueStyle","MetricItem","dataValue","ResponsiveExtraLarge","cardContentStyle","timeRangeStyle","metricsContainerStyle","metricStyle","iconContainerStyle","PerformanceCard","reportMetadata","summaryData","dataUsage","PerformanceSection","publisherProfileAccess","hasPaymentAccess","recommendationsTitle","setupPaymentTitle","setupPaymentDescription","setupMediationTitle","setupMediationDescription","setupMediationButton","setupAdsTxtTitle","setupAdsTxtDescription","setupAdsTxtButton","paymentImage","mediationImage","adsTxtImage","adBlockCardTitle","adBlockCardDescription","adBlockCardAction","RecommendationsSection","adBlockImg","adsTxtImg","mediationImg","mediationIconImg","performanceImg","recommendationsCards","getRecommendationsCards","handlePaymentCardButtonClick","handleMediationButtonClick","handleAdsTxtCardButtonClick","handleAdBlockCardButtonClick","isMediationEnabeled","actionButtonStyle","actionButtonTextStyle","accountStatus","Recommendations","mediationIcon","adsTxt","onInitializeRecommendationSection","welcome","contentDialog","buttonDialog","triggerOneVetAPIs","EmptyLayout","headingTitle","HomePage","fetchPublisherEvaluationStatusAction","hoverCard","beakCurtain","primaryButton","defaultButton","TutorialCallout","tutorialStep","setTutorialStep","onChangeState","containerId","contentWidth","onUpdateTutorialStep","isContentReady","onDismissTutorialCallout","shouldDismissOnWindowFocus","statusCmdBtnAriaLabel","update","sidePanelLabel","sidePanelDescription","sidePanelTC","sidePanelUpdateProperty","ClarityPanel","panelDescriptor","panelAgreement","panelPendingResendButton","siteCreate","siteNotFound","deactivateSiteTitle","siteName","issues","sitesCannotServeMessage","clarityPending","clarityPendingApproval","clarityRejected","clarityNotConnected","clarityApproved","clarityExpired","clarityCancelled","clarityNotFound","clarityLinkStatusCalloutTitle","clarityLinkStatusCalloutProjectStatus","clarityLinkPendingStatus","clarityLinkRejectedStatus","clarityLinkCancelledStatus","clarityLinkExpiredStatus","clarityLinkPendingStatusCalloutDescription","clarityLinkRejectStatusCalloutDescription","clarityLinkCancelledStatusCalloutDescription","clarityLinkExpiredStatusCalloutDescription","clarityLinkNotConnectedStatusCalloutDescription","clarityLinkNotFoundStatusCalloutDescription","clarityLinkStatusCalloutResendAction","clarityLinkStatusRejected","clarityLinkStatusPendingApproval","clarityProject","clarityProjectInfo","zeroResultTitleNonTython","zeroResultDescriptionNonTython","zeroResultcallToAction","clarityTour","clarityTourSecondPageHeader","clarityTourSecondPageDesc","statusTourFirstPageHeader","statusTourFirstPageDesc","statusTourSecondPageHeader","statusTourSecondPageDesc","clarityBenefits","clarityFirstBenefit","claritySecondBenefit","claritySecondBenefitRedirection","clarityThirdBenefit","clarityThirdBenefitRedirection","siteServingAds","siteServingAdsWithoutAdsTxt","siteServingAdsWithoutScript","sitePendingWithApprovedProfile","sitePendingWithoutApprovedProfile","siteRejected","siteNotServingIssuesHeader","siteNotServingPubCenterScriptInActive","siteNotServingSiteIsRejected","siteNotServingWithoutAdsTxt","codeSnippet","siteApprovalGuideLines","approvalStatusPendingInfo","approvalStatusApprovalInfo","approvalStatusRejectedInfo","approvalStatusInfoHelp","approvalStatusInfoGuideLines","approvalStatusInfoSupport","deletePropertyPopupTitle","deletePropertyPopupDescription","redirectionLink","textDecorationLine","hoverCardTitle","hoverCardInfo","clarityCalloutTitle","clarityCalloutFooter","clarityStatusUnderline","errorMsgContent","errorBulletPoint","warningBulletPoint","orangeLighter","propertyIssuesUnorderedList","getClarityTutorialSteps","_config$clarityConfig","getSelectedItems","getClarityCommandBarItems","after","clarityPanelDisplayParams","onDeactivateDialogDismiss","onUpdatePropertyEnd","deleteLabels","getServingStatusCalloutContent","scriptStatus","adsDotTxtStatus","Serving","AdsTxtStatus","NotFound","more","snippet","_item$servingConfig","guidelines","toolTipStatus","_issues$find","issue","getStatusMessage","getTagType","TagType","Fail","getClarityStatus","getClarityCalloutDescriptionStatus","changeState","getPropertyAccessPermission","_item$servingConfig2","paddingInlineStart","onRenderData","_item$servingConfig3","_item$servingConfig4","_item$servingConfig5","Tag","topCenter","_item$servingConfig6","_item$servingConfig7","refLink","_item$servingConfig8","_item$servingConfig9","CellInfoCallout","_item$servingConfig10","_item$servingConfig12","_item$servingConfig13","_item$servingConfig14","_item$servingConfig15","_item$servingConfig16","_item$servingConfig11","Scanning","_store$data","_store$data$filter","clarityTutorialCallout","setClarityTutorialCallout","changeClarityCalloutVisibility","_store$data$","msgBarProps","learn","_property$servingConf","single","appInventoryTableTitle","appsCannotServeMessage","appNameColumnLabel","appIdColumnLabel","appUrlColumnLabel","appAdUnitPlatformColumnLabel","appAdUnitStatusColumnLabel","appAdUnitActionsColumnLabel","appAdunitGridCreateButtonLabel","appInventoryIssueColumnLabel","appInventoryZeroResultTitle","appInventoryZeroResultDescription","appInventoryZeroResultCallToAction","appInventoryDeletePopupTitle","appInventoryDeletePopupDescription","useAppInventoryGrid","TythonInventoryManagePage","SiteManageView","AppInventoryManageView","AppInventoryManagePage","HelpcenterInfoBubbleV2","errorSellerIdDoesNotMatchApp","errorPropertyNameAlreadyExists","errorInventoryAppUrlAlreadyExists","AdsTxtCreationStepTitle","appNameFieldLabel","appSellerIdFieldLabel","appUrlFieldLabel","appNameFieldPlaceholder","appSellerIdFieldPlaceholder","appUrlFieldPlaceholder","appPlatformInfo","appPlatformWindowsUWPLabel","appPlatformTitleLabel","appPlatformConnectLiveAppInfo","appPlatformConnectLiveAppTitleLabel","appSearchFieldPlaceholder","appAgreement","appAgreementSection1","appAgreementSection2","appAgreementCheckboxLabel","getCodeTitle","finishStepperTittle","finishPageExpectNextTitle","finishPageExpectNextContent1","finishPageExpectNextContent2","finishPageExpectNextContentHelpLink","finishPageExpectNextTitle2","finishPageCardTitle","finishPageActionButtonLabel","finishPageCardContent","CreateSiteStepFormTitle","coopaTnCInfo","appPropertyInvalidUrl","useAppPropertyDetailPageStyles","sectionTitleOffset","spacingVerticalXS","textTitle","caption1Strong","agreementTitle","body1","agreementContent","caption1","platformDropdown","skeletonWrapper","urlPrefix","colorSubtleBackgroundSelected","colorNeutralStrokeAccessible","useConnectAppDropdownStyles","containerWrapper","appSearchIcon","isHiding","optionCardWrapper","optionCardSelectable","colorNeutralBackground1Hover","borderRadiusNone","spacingHorizontalSNudge","optionCardTitle","colorNeutralForeground1","optionCardImgIcon","optionCardAppId","optionInnerWrapper","optionInnerWrapperLower","optionsWrapper","useAppPropertyFinishPageStyles","subtitle1","cardTitle","actionDivWrapper","inventoryAppStoreId","onChangeCallback","searchString","setSearchString","appOptions","setAppOptions","selectedOption","setSelectedOption","debouncedAppSearchString","shouldRenderOptions","setShouldRenderOptions","isSearching","setIsSearching","isOptionInitialized","optionMenuRef","useOnClickOutside","shouldInitializeOptions","fetchAppSearchData","searchedString","appSearchResult","matchingApps","controller","renderAppCard","iconImageUrl","appId","shouldRenderSearchInput","shouldRenderAppPreviewForExistingInventory","shouldRenderAppOptionsDropdown","shouldRenderSelectedAppPreview","Skeleton","SkeletonItem","SearchIcon","onAppNameChange","isAppNameInputDisabled","onAppUrlChange","appUrl","isAppUrlInputDisabled","onAppAgreementChange","appSellerId","onAppSellerIdChange","onInventoryAppStoreIdChange","errorState","renderSkeleton","ConnectAppDropdown","validationState","CreateAppIcon","ErrorType","useCreateTythonAppProperty","setAppName","setAppUrl","appSearchString","setAppSearchString","setAppAgreement","setAppSellerId","setInventoryAppStoreId","setRawProperty","rawPropertyServingConfigs","setRawPropertyServingConfigs","setIsSaving","setErrorState","handlePropertyErrors","nextErrorState","SellerIdDoesNotMatchApp","PropertyNameAlreadyExists","isValidAppInventoryCreation","fetchPropertyPromise","savedProperty","COPPAAgreement","fetchPropertyData","appPropertyFormProps","onAppSearchStringChange","onAppPropertyFormSubmit","shouldRedirect","appProperty","PartnerCenterSellerId","appPropertyId","etag","AppPropertyDetailForm","FinishPage","goBack","PropertyPage","isAppProperty","CreateTythonAppProperty","getRoutes","routes","BaseReportPage","AccountPage","ProfilePageLazy","LazyProfilePage","onUserInvited","onResendUserInvitation","userInvite","onDeleteUserInvitation","loadUserInvitations","dismissUserInvitePanel","getUserInvitationStore","userInviteErrors","userInvitePanelOpen","userInviteViewModel","recipientPreferredLang","setUserInvitationErrors","setUserInvitationPanelStatus","setUserInvitations","updateUserInvitationExpiry","userInvitation","ui","expirationDate","setFirstName","setLastName","updateEmail","updateRecipientPreferredLanguage","updateRole","invite","inviteUser","resend","send","panelDescription","inviteUserEmailTitle","recipientPreferredLanguageTitle","emailPlaceholder","expired","firstNameTitle","lastNameTitle","zeroInvitationsTitle","failedToFetchInvitedUser","resendEmailInviteFailed","userInvitedNewUserSuccessfully","userInvitedNewUserFailed","userInvitationResendSuccessfully","userInvitationInvalidState","userInvitationDeletedInvitationSuccessfully","userInvitationDeletingUserInvitation","userInvitationInvalidStateReportOrLogin","userInviteFormFailed","onUserRoleChanged","onUsersDeleted","loadUsers","newInvite","UserInvitationResend","AdView","ListManager","PublisherAdmin","userInvitationType","UserInvitationType","PubCenterSelfServeUser","lcid","entityRoles","userRoleId","roleDesc","getColumns","longestEmailLength","UserInvitationsMessages","getUserInvitationExpiryStatus","currTime","expiryDate","UserMessages","_invite$email","_Date$toISOString","expiryDateString","getPanelClassNames","panelTitleStyle","panelFooterButtonsWrapper","getUserRoleChoiceGroupOptions","renderChoiceGroupOption","onRenderField","PANEL_FIELD_WIDTH","UserInvitePanel","panelDesc","onUserLanguageChanged","ZeroInvitations","desertImage","UserInvitationsTab","longestEmail","confirmation","getPermanentDeleteButtonStyles","customStyles","rootFocused","DeleteConfirmationPopup","_deleteLabels$title","_deleteLabels$descrip","onDeleteClicked","onDialogDismissed","confirmationText","setConfirmationText","getUserManagementStore","roleChangePanelOpen","setUserRoleChangePanelStatus","setSelectedItem","setUsers","updateUserRole","updatedUser","userToUpdate","userRoleDetailsETag","removedRoles","addedRoles","UserRoleChangePanel","existingUserRole","setUserRole","getUserName","_name$firstName","UsersTab","primaryUserId","longestName","longestNameLength","notGridReadyLabel","UserManagementPage","Tabs","tabs","estimatedEarningsNoDataText","estimatedEarningsNoDataMessage","estimatedEarningsTitle","balanceTitle","thresholdNotification","nextPayout","nextPayoutDate","lastPayoutDate","yourThreshold","reachedThreshold","genericNextPayout","estimatedEarningMonthly","estimatedEarningYearly","chartsContainersStyles","chartCard","pageTitleStyle","cardsTitleBarStyle","getStackTokens","paymentThreshold","notificationMessage","cardContainer","formatByCurrencyAndLocale","getFooterNotification","sysCurrency","Balance","_data$threshold","getPaymentsCommonClassNames","passedThreshold","formattedThreshold","activeButton","buttonBorder","chartTypes","chartColor","lineChartData","earningDates","parseDateKey","earningValues","localeMonth","localYear","MONTHLY","getTopBarActions","currentChartTypeStateManagement","activeGrainStateManagement","setCurrentChartType","activeGrain","setActiveGrain","isMonthlyGrain","isYearlyGrain","YEARLY","VERTICAL_BAR","allowDisabledFocus","customFormatDateAxisData","currentGrain","dateTime","EstimatedEarnings","defaultChartType","estimatedEarningsAllGrainData","intersectionEntry","targetObservationRef","isCardVisible","parentCardHeight","setHeight","parentCardWidth","resizeObserver","ResizeObserver","contentBoxSize","inlineSize","blockSize","LineChart","yMaxValue","customDateTimeFormatter","tickValues","VerticalBarChart","useSingleColor","colors","PaymentsPage","grow","PaymentsOnboarding","SettingsPageLazy","LazySettingsPage","accountManageMessages","profileTab","paymentsTab","userManagementTab","layoutRootStyle","getTabs","fetchMediationReportsMetadata","resetColumnMembers","profileTitle","profileHeading","profileDescription","profileSubtitle","profileIncomplete","manageProfile","underReviewTitle","underReviewDescription","approvedTitle","approvedDescription","retryTitle","retryDescription","rejectedTitle","rejectedDescriptionPart1","rejectedDescriptionPart2","rejectedBannerPart1","rejectedBannerPart2","termsAndConditions","viewProfile","onFetchPublisherPreferences","onFetchUserPreferences","closePanel","setFormChanged","onFetchTnC","descriptionText","DEFAULT_TNC","nonTythonContent","DEFAULT_NON_TYTHON_TNC","latestTnCReleaseDate","latestTnCVersion","notificationText","DetectAdBlock","adBlockDetected","useDetectAdBlock","navTextColor","navWidth","navItemHeight","navChildItemHeight","floatingNavBackgroundColor","navItemHoverColor","navItemWithChildBgColor","navItemSelectedColor","BackDropSelector","navItemContainerSelector","navFocusZoneInnerContainerSelector","navExpandCollapseButtonInnerContainerSelector","navExpandCollapseButtonBackgroundContainerSelector","getResponsiveNavStyles","isCollapsed","hasChildren","nestingLevel","scrollTop","isChildLinkSelected","hasGroupName","groupIndex","isFirstNavGroup","ul","listStyleType","overlay","navItemRoot","navItemBarMarker","navItemIconColumn","navItemNameColumn","navSlimItemRoot","navFloatingRoot","webkitBackdropFilter","backdropFilter","slideRightIn20","navFloatingItemRoot","navGroupSeparatorRoot","navGroupSeparatorHrLine","navGroupSeparatorHeaderGroupName","navToggler","disabledStyle","focusedStyle","getFocusStyle","NavGroupType","NavBase","forceIntoFirstElement","getDocument","expandCollapseButton","navFocusZone","getPreferredSelectedKey","childLink","isLinkSelected","includeChildren","getLinkText","isShowMoreLink","alternateText","hasAtleastOneVisibleLink","isHidden","NavLink","rightIconName","leftIconName","dataHint","ariaExpanded","ariaCurrent","rootClassName","barClassName","iconClassName","textClassName","computedTextWidth","fixedIconWidth","Nav","isLinkExpandStateChanged","initialSelectedKey","isGroupCollapsed","_hasAtleastOneHiddenLink","_renderGroup","_onLinkClicked","nextState","onNavNodeExpandedCallback","onEditLeftNavClickedCallback","_renderCompositeLink","linkIndex","onShowMoreLinkClicked","linkText","onClickHandler","bind","_renderLink","_renderLinks","enableCustomization","groupType","CustomizationGroup","isGroupHeaderVisible","collapseMenu","expandMenu","SlimNav","_getScrollTop","navScrollerId","navScroller","_onLinkMouseEnterOrLeave","_prevFloatingNav","removeAttribute","_getFloatingNav","parentElement","_onFocus","currentFloatingNav","_onBlur","_onKeyDown","nativeEvent","keyCode","_renderFloatingLink","_renderFloatingLinks","_renderFloatingNav","_linkIndex","_nestingLevel","onMouseEnter","onFocus","NavTogglerComponent","_this","_this$props$onNavColl","_this$props","expand","onNavCollapsedCallback","isNavCollapsed","triggerNavCollapse","lockAutoCollapse","isWindowNonRegularSize","_onShowMoreLinkClicked","addEventListener","handleResizeCollapseReset","componentWillUnmount","removeEventListener","snapshot","toggleNavGroups","navGroup","ToggleGroup","nonToggleNavGroups","onOverlayClick","_renderExpandCollapseNavItem","_onNavCollapseClicked","navLinkId","bottomAutoEdge","NavToggler","renderNormalIcon","renderActiveIcon","useTythonNav","accessibleRoutes","generateNavIcons","navItems","setNavItems","generateNavItems","input","_getRoutes$find$text","_getRoutes$find","_link$title","_link$disabled","_link$key2","_link$tooltipText","isNavItemSelected","route","checkRender","_document","requestAnimationFrame","iconSrc","iconSrcActive","HomeNavIcon","HomeNavIconActive","AdUnitNavIcon","AdUnitNavIconActive","SiteNavIcon","SiteNavIconActive","AdBlockNavIcon","AdBlockNavIconActive","ReportNavIcon","ReportNavIconActive","AccountNavIcon","AccountNavIconActive","InventoryIcon","InventoryIconActive","AdsIcon","AdsIconActive","TythonNav","SideNavigation","mainMenuAriaLabel","menuAndContent","appNav","appContent","appContentRoutes","ContentLayout","nl","keyParts","renderedHeader","isDefaultLayout","menuRenderer","_getNavigationAccess","InternationalizationLayout","NotificationLayout","ignoreGlobalAsync","ignoreNotificationAsync","Footer","navAccessPermissions","navMenuLinks","_getRouteName","isTythonRoute","_onNavClicked","tythonExcludedRoutes","MenuGroup","overlayStyle","spinnerStyle","PageSpinner","footerAriaLabel","legal","privacyCookies","consumerHealthPrivacy","copyrightMicrosoft","footerLinks","smallPlus","copyrightText","AccountProfileFeature","profileNotImplemented","module","exports","dataUrl","downloadCSV","exportToPNG","html2canvas","toDataURL","getExportFileName","calendarDateRange","chartGrain","brokenDownStartDate","breakdownDate","brokenDownEndDate","startDateString","endDateString","constructName","ReportingDataRow","buttonContainer","l2","dialogContentContainer","setupNotificationWrapper","xPayContainer","xPayOverlay","primaryButtonText","xPayLoadingSpinner","transparentContainer","setupNotificationText","tncNotificationText","targetPointer","actionButton","SetupPaymentNotification","onAction","BaseButton","defaultTab","getStatesOfCountry","_metadataStore$raw","getMetaDataStore","states","isStatesPresentForCountry","getStatesDropdownOptions","documentUploadStatus","isDocumentUploadPanelOpen","daysAheadOfToday","dateString","diffTime","domainInitialize","rDomain","addMethod","excludeEmptyString","duplicateDomainInitialize","activeSite","sitesDomain","_getTheHostName$split","getTheHostName","getDomainNameFromURL","_value$split$","domainName","nameInitialize","nameRegex","duplicateNameInitialize","redirectUrl","pivotRootStyle","pivotItemContainerStyle","_history$location","showItem","currentHashValue","getDefaultSelectedTabKey","tab","redirectTab","setSelectedKey","_link$props","updateUrl","defaultDataGridColumns","onUserInvitationsGridInitialized","eventType","useCache","dismissFRE","onInitializeSystemPreferences","AuditType","EntityLimitTier","FeatureOverideTier","PaidSearch","MobilePaidSearch","AudienceAds","LinkedInAds","mappingReasonsToLabels","PaymentFailedAccountClosed","PaymentFailedBankAccountRestricted","PaymentFailedStripeCouldNotProcess","PaymentFailedCouldNotProcess","PaymentFailedDeclined","PaymentFailedExpiredCard","PaymentFailedIncorrectAccountHolderName","PaymentFailedInvalidAccountNumber","PaymentFailedInvalidCard","PaymentFailedInvalidCurrency","PaymentFailedLostOrStolenCard","PaymentFailedNoAccount","PaymentFailedNoAccountLocated","PaymentFailed","Partner","PaymentInstrumentLifeCycleStatus","PaymentOption","NetworkAffiliation","ServiceLevel","SelfServe","SelfServeTrusted","Premium","Internal","Select","DocumentUploadStatus","ORG_NAME_MIN_LENGTH","ORG_NAME_MAX_LENGTH","DEFAULT_SELECTED_ACCOUNT_TYPE","accountType","isTermsAndConditionsAgreed","fetchingOvdfStatus","optInPromotionalEmail","profileValidationModel","getUserProfileValidationModel","organizationEmailAddress","organizationUrl","ceoName","InfoButtonBase","_iconButtonElement","inset","_onInfoButtonClick","callout","_onCalloutDismiss","rightCenter","fetchBrands","keyword","effectiveUserContext","BrandSearchResponse","fetchStatesOfCountry","setStatesOfCountry","generateChars","chars","Uint8Array","msCrypto","getRandomValues","CUSTOM_MESSAGE_CODE","fetchOneVetReviewStatus","sessionId","_publisher$name","ipAddress","getIP","noAccessPageRoute","protocol","fetchOneVetCodeVerificationStatus","addThreatMetrixScripts","tmScriptId","tmNoScriptId","tmScript","tmNoScript","currentTimestamp","srcUrl","noScript","iframe","ipResponse","ip","SizeMapper","statusIdentifier","hoverAble","widthFit","fail","tooltipContent","toolTipId","renderTag","fetchUserDetails","VerificationCodeGenerationErrorCodes","PaginationDisplay","noPublisherOrAccountSelected","servingStatusPending","servingStatusNotServing","servingStatusServing","servingStatusOnHold","ListPickerLegacy","BasePicker","resolveDelay","itemLimit","onRenderItem","selectedInput","selectedText","onRemoveItem","removeButtonAriaLabel","onRenderSuggestionsItem","ListPickerBase","pickerIsDisabled","closeButtonIsDisabled","basePickerProps","onResolveSuggestions","inputProps","inputPlaceholder","pickerSuggestionsProps","noResultsFoundText","getTextFromItem","pickerCalloutProps","calloutMaxHeight","basePicker","ListPicker","publisherPlaceholder","publisherNotFound","accountPlaceholder","accountNotFound","allAccountsOption","listPickerRemoveAriaLabel","publisherAccountPickerAriaLabel","isAccountDisabled","listGroup","publisherPicker","accountPicker","caretDownWrapper","PublisherAccountPicker","isAccountSelectionDisabled","_updateAccountsCache","newPublisher","urlPath","_accountsForCurrentPublisher","isPublisherSelectionDisabled","_handleAllAccountsOptions","ms","_isComponentMounted","isAccountHidden","isPublisherDisabled","selectedPublisherItem","selectedAccountItem","_onPublishersResolveSuggestions","_onPublisherChanged","_onAccountChanged","isUpdateAccount","defaultSelectedAccount","itemType","DropdownMenuItemType","defaultAccountId","itemStyle","dotsStyle","selectedItemStyle","disabledItemStyle","DOTS","DEFAULT_SIBLING_COUNT","getRange","start","end","DottedPagination","pageSize","siblingCount","totalItemCount","paginationRange","pageCount","leftSiblingIndex","rightSiblingIndex","shouldShowLeftDots","shouldShowRightDots","lastPageIndex","rightRange","middleRange","useDottedPagination","lastPage","onPrevious","pageNumber","showRows","firstPage","prevPage","nextPage","blackTranslucent40","dropdownStyle","NavigatedPagination","onPageNumberChange","onPageSizeChange","onFirst","onLast","Navigation","calenderContainer","calenderRangeSelectorsContainer","calenderRangeSelectorDateContainer","calenderRangeSelectorDate","calenderRangeSelector","calenderRangeSelectedSelector","calenderButton","calenderHeader","calenderNavigator","calenderMonthLabel","calenderBody","daysGrid","dateNotInCurrentMonth","disabledDate","dateInCurrentMonth","dateSelected","dateSelectedInBetween","SingleDay","dayObj","handleDateRangeSelection","selectedDateRange","hoveredDateRange","handleDateRangeHover","turn","disabledClass","isInCurrentMonthClass","dayIndex","isInHoverRange","selectedClass","hoverClass","getDayClasses","CustomCalender","onSelectedDatesChanged","initialRangeType","initialDateRange","disableFutureDays","dataTestId","setSelectedDateRange","finalDateRange","setFinalDateRange","setHoveredDateRange","setTurn","isCalenderVisible","setIsCalenderVisible","rangeType","setRangeType","finalRangeType","setFinalRangeType","WEEK_DAYS","currentMonth","setCurrentMonth","currentYear","setCurrentYear","selectedDate","dates","getRangeSelectorContent","clickable","selector","getCalenderContent","hideCalender","prev","onApplyClicked","supportButtonWrapper","supportButton","hasPublisherPreferencesAccess","handledPreference","handledSystemPreference","init","initCMUIExperience","initCMUIHelpButtonEventListener","removeCMUIHelpButtonEventListener","constructSupportButton","SupportBotton","supportMessages","ReportHeader","Redirect","_generateMenuRoutes","_renderHeader","keyFnc","Suspense","clarityEnabled","dismissNotifications","notificationIds","dismissedNotifications","dismissedBackendNotificationInUI","backendDismissedNotifications","panelNotification","isUIGenerated","_store$account","selectedNotification","existingNotifications","indexOfSSNotification","updatedData","getBackendNotifications","existingNotificationsCollection","notificationId","intlNotificationTitle","intlNotificationContent","notificationItem","notificationTitle","notificationContent","lastModifiedDTime","intlNotificationPrimaryActionLabel","errorReason","errorCodeStr","intlNotificationErrorReason","intlNotificationErrorReasonTitle","notificationActions","primaryAction","secondaryAction","intlNotificationSecondaryActionLabel","intlTitleMessageValues","onDoNotRenderDefaultPageChanged","newDomainOrigin","_iframe$contentWindow","contentWindow","postMessage","helpHtml","_responseJson$Content","_responseJson$Content2","Content","getHelpInfo","_msg$publisher","_msg$publisher2","isInternalUserLogin","_userContext$userName2","homePageUrl","setUserPublisherContext","EXPIRED_NOTIFICATION_SHOWN_STATE_KEY","pushState","_msg$locale","tncStore","authorizedUserLocale","unauthorizedUserLocale","TnCLocale","releaseDate","version","localContent","metadataStore","customButton","isCloseButtonHidden","isPrimaryButtonDisabled","isBlocking","logType","_consoleLog","_getContextMessage","contextMsg","_this$userContext","_this$userContext2","_this$userContext$ema","_this$userContext3","_this$userContext4","pubObj","AppealHistory","WelcomeToPubcenterEmail","onIsAcceptInviteFlowChanged","isAcceptInviteFlow","onUserInvitationCodeChanged","pluralize","isEmpty","resultList","hasAdQualityAccess","fetchPublisherProfileDetails","intlMessageId","isAdBlockerDetectRun","setAdBlockDetected","finally","handler","listener","getSortableValue","onPublisherDeleted","onUserSelfDeleted","detailsListStyles","headingRootStyle","AuditLog","EntityEvaluation","EntityPreferences","NotificationType","IPRange","PhoneVerificationMediumType","PhoneVerificationSubStatus","VerificationStatus","PublisherCreate","UpdateStatus","fullName","FetchDevTokenStatus","GenerateDevToken","onGridPageV2Initialized","showErrorMessage","ChangingItemStatusFailure","updateSucceeded","_msg$setData","_msg$onItemsStatusCha","gridData","selItem","itemCopy","dataItem","commandText","updateParams","DeletingItemFailure","deleteSucceeded","_msg$deleteAction","_msg$postDeleteAction","copiedItems","_msg$preDeleteAction","DuplicateGridItemFailure","duplicateSucceeded","newEntity","_msg$onDuplicateActio","selectedEntity","accountIdToDuplicate","entityToDuplicate","duplicateAccount","duplicateData","initialize","DeactivateConfirmationDialog","deactivateLabels","DeactivateConfirmation","handleDeactivateButtonClick","DeleteConfirmationDialog","handleDeleteButtonClick","ModifyColumnsPanel","hideDescription","changeColumnsVisibility","onModifyColumnsPanelHide","handleModifyColumnsClicked","ModifyColumns","_column$incompatibleP","columnVisibilityChange","incompatibleProps","incompatibleWontMessage","getCustomCommandBarStyles","itemsSelected","itemsCount","overflowSetStyles","gridGap","primarySet","secondarySet","outlineColor","primaryButtonTextHovered","primaryButtonTextPressed","rootExpandedHovered","rootHasMenu","iconExpanded","iconExpandedHovered","menuIcon","menuIconHovered","menuIconPressed","menuIconExpandedHovered","menuIconExpanded","getCountMenuStyles","SearchBoxCallOut","placeHolder","handleSearch","autoFocus","addFilterButton","commandBarItemProps","buttonProps","castButtonProps","buildCommandBarProps","excludeActions","customCommandBarItems","defaultCommandBarItems","onDuplicateItems","downloadItems","shouldFocusOnMount","renderedInOverflow","iconOnly","dataStore","subMenuProps","getDefaultCommandBarItems","defaultFarCommandBarItems","downloadSubMenuProps","cancelSelection","getDefaultCommandBarFarItems","includeKey","excludeKey","customItem","keyItem","indextoAdd","keyPosition","insertCommandBarItem","countItem","cancelItem","getItemsBasedOnModeAndStatus","CustomCommandBar","commandBarRef","handleGridFilter","onDeleteItems","onPostDeleteItems","hideModifyColumnsDescription","_document$querySelect","commandBarWrapper","flattenNestedObject","parentKey","newKey","nestedValues","useSearchableGrid","updateSearchWord","searchFunction","_col$searchFunction","IKey","IValue","filterConditions","setAppliedFilters","customApplyFilterFn","shouldApplyFilter","applyFilter","itemsCopy","flatObj","nestedObj","currentKey","unflattenObject","_dataGridProps$render","_dataGridProps$constr","_pageTitle$title","bypassFiltrationAndSearching","bypassGridResetting","selectedRows","onColumnsChanged","identifier","hideDisableStyle","rowIdentifier","dataQueryProps","isSelectionDisabled","gridRows","setGridRows","_selectedRows$find","appliedFilters","rowRef","colsVisMap","useSelectionGrid","onSelectionRefChanged","onItemsChanged","setKeySelected","selectedRow","_getStore$selectedIte","rowsWithUpdatedSelectionStatus","_selectedRow","activeRows","paginateData","initializePagination","usePagination","filteredRowsUsingFilter","removeAllSelectedItems","setAllSelected","resetGrid","checkboxWrappers","headerRowWrapper","filteredRowsUsingSearch","_selectedRows$find2","renderEmptyGrid","horizontalConstrained","setKey","multiple","checkboxVisibility","CheckboxVisibility","always","headerProps","RenderHeaderCheckbox","DetailsHeader","onRenderDetailsCheckbox","onRenderRow","detailsRowProps","RenderRowCheckbox","DetailsRow","checkboxCellClassName","itemToRender","_column$onRenderData","_selection$getItems","toggleIndexSelected","showPagination","userAcceptInvitationErrorModel","contactByPhone","boolean","contactByEmail","ariaConfig","UserConstants","_getAriaToken","ariaToken","BCP","PROD","_initalizeAriaEnv","AriaLogger","AWTLogManager","setTransmitProfile","getLogger","logSession","AWTSessionState","Started","_ariaLog","_setProperties","eventProperties","setProperty","AWTEventProperties","setEventPriority","AWTEventPriority","Normal","logLevel","High","Immediate_sync","logEvent","onFeatureFlagChanged","useWindowsAppFeatureFlag","isFeatureFlagInitialized","ENABLED_PUBLISHERS_PROD","DISABLED_PUBLISHERS_NON_PROD","prevLocale","initApexPlatform","apexInitOptions","Project","Market","EndPoint","InitPopup","InitOnReady","SupportOptions","$","fn","InitApexPlatform","CMUI_HELP_BUTTON_ID","popupClickHandler","evt","PopupController","PopupJsClick","_items","headerHelpIconProps","_document$getElementB","CMUIInlineHelpAnchor","eleRef","createRef","topic","flexShrink","V2Link","helpButtons","MultiSelectPickerBase","addAllButtonAriaDescription","removeAllButtonAriaDescription","filteredItemsLabel","selectedItemsLabel","createButtonAriaDesciption","removeAllButtonLabel","addAllButtonLabel","availableItemsListBoxAriaLabel","selectedItemsPaneAriaLabel","_label","removeAllAriaDescriptionId","addAllAriaDescriptionId","_getItemAtElement","pickerAriaDescriptionId","loadAccountStatusFailed","failedToLoadPublisherStatus","cardDismissDelay","onAccountErrorChanged","onFetchAccountsLoading","onFetchingAccountsData","onAccountsFetched","onAccountIdChanged","onAccountSkuFormMediumChanged","onAccountSkuFormSkuChanged","onAccountSkuFormCleared","onAccountSkuFormSubmitted","onFormAccountNameChanged","onFormAccountCurrencyChanged","onFormAccountLanguageChanged","onFormAccountPrimaryContactChanged","onFormAccountCountryChanged","onFormAccountTimezoneChanged","onFormAccountPaymentOptionChanged","onFormAccountFinancialStatusChanged","onFormAccountPaymentLifeCycleStatusChanged","onFormAccountOperationRatioChanged","onFormAccountAllowPassedURLChanged","onFormAccountAllowPassedKeywordChanged","onFormAccountAllowCrawlingChanged","onFormAccountAllowAdultAdsChanged","onFormAccountAllowGlobalDefaultKeywordsChanged","onFormAccountAllowMeteredCallExtensionsChanged","onFormAccountAllowLocationExtensionsChanged","onFormAccountAllowPhoneExtensionsChanged","onFormAccountAllowMerchantRatingExtensionsChanged","onFormAccountAllowLocalExtensionsChanged","onFormAccountAllowCallExtensionsChanged","onFormAccountAllowSiteLinkExtensionsChanged","onFormAccountStoreIdsChanged","onFormAccountPartnerCodesChanged","onFormAccountFormCodesChanged","onFormAccountStartDistributionPlacementCodesChanged","onFormAccountStartDistributionOCIDL2sChanged","onFormAccountStartDistributionNativeAdsInFeedsAndHeadlinesRevenueSharePercentageChanged","onAccountSkuSidePanelInitialized","onAccountSkuChanged","onAccountSkusChanged","accountSku","skus","countryToCurrencyMap","countyCode","sku","timeZoneId","paymentLifeCycleStatus","operationRatio","allowPassedURL","allowPassedKeyword","allowCrawling","allowAdultAds","allowGlobalDefaultKeywords","allowMeteredCallExtensions","allowLocationExtensions","allowPhoneExtensions","allowMerchantRatingExtensions","allowLocalExtensions","allowCallExtensions","allowSiteLinkExtensions","formCodes","startDistributionPlacementCodes","startDistributionOCIDL2s","startDistributionNativeAdsInFeedsAndHeadlinesRevenueSharePercentage","parseFloat","accountSkus","selectedAccountSku","listOfMediums","nonSKUMappedMediums","availableSkus","AdExtensionType","FinancialStatus","onAccountPrivateMarketplaceChanged","onAccountEnablePrivateMarketplaceChanged","rawPublisher","availableLanguages","availableTimezones","availableCountries","availableUsers","isDistributionReportingApplicable","isStartDistributionReportingApplicable","isStartDistributionContentReportingApplicable","MonthlyThreshold","TaxOnHold","Validated","revenueSharePercentage","rawaccount","accountSkuInfo","adDeliverySettings","additionalMarkets","paymentInformation","paymentInstrumentationLifeCycleStatus","operationCostRatio","enabledFeatures","enFeature","EnableGlobalDefaultKeywords","EnableAdultAds","EnableCrawling","EnablePassedUrls","EnablePassedKeywords","adExtensionOptions","adExtension","SiteLink","Phone","Local","Location","MeteredCall","MerchantRatings","Call","placementCodes","createdDateTime","updateAccount","accountNumber","accountContentDeliverySetting","accountContentDeliverySettingInfo","adCountryPolicy","adLanguage","accountContentSettingType","accountContentSettingTypeSimple","accountContentSettingTypeAdvanced","allowedMarketsTitle","allowedMarketsOptionAll","skuTitle","createSku","editSku","skuCategory","skuCode","advancedAccountTitle","paymentOptionMonthlyThreshold","paymentOptionNoPay","lifecycleStatusCreated","lifecycleStatusSubmitted","lifecycleStatusPending","lifecycleStatusFailed","lifecycleStatusPinFailed","lifecycleStatusBlacklisted","lifecycleStatusSuccess","lifecycleStatusValidated","financialStatusLabel","financialStatusNoHold","financialStatusHold","financialStatusTaxOnHold","financialStatusUserHold","lifecycleStatusLabel","revenueSharePercentageLabel","operationCostRationLabel","accountLevelattributesLabel","accountLevelattributesDesc","enableAdunitDebugging","enablePassedURLs","enablePassedKeywords","donotCrawl","enableGlobalDefaultKeywords","enableAdultAds","enableRAIS","phoneExtension","enableSiteLink","localExtension","locationExtension","callExtension","meteredCallExtensions","meteredRatingExtensions","createAccount","storeIdLabel","storeIdExampleText","partnerCodeLabel","partnerCodeText","formCodeLabel","formCodeText","startDistributionPlacementCodeLabel","startDistributionPlacementCodeText","startDistributionOCIDL2Label","startDistributionOCIDL2Text","startDistributionNativeAdsInFeedsAndHeadlinesRevenueSharePercentageText","inHousePromotions","boost","boostIdsLabel","boostIdsExampleText","privateMarketplaceIdsLabel","privateMarketplaceExampleText","datagrid","CreateAccount","_onAccountSkuSubmit","_createMediaTypeDropdown","_createSkuDropDown","activeAccount","accountAccessPermissions","paymentLifeCycleStatusOptions","Blacklisted","Created","PinFailed","Failed","Submitted","paymentOptionOptions","NoPay","NoHold","Hold","UserHold","_isStartDistributionNativeAdsInFeedsAndHeadlinesRevenueSharePercentageRequired","_isStartDistributionNativeAdsInFeedsAndHeadlinesRevenuePercentageShareDisabled","skuPanelFormState","skuSidePanel","activePublisher","_getAccountAccessPermission","CURRENCY","_createPrimaryContactDropDown","_createLanguageDropDown","_createCountryDropDown","_createTimezoneDropDown","_advancedAccountAttributes","_SKUs","_createSkuPanel","availableAccountSkus","existingMediums","availableMediaTypes","mediaType","MediaTypeMessages","TIMEZONE","timezoneId","LANGUAGES","availableCountrys","countriesWithLocalLang","placementCodeText","hasStartDistributionPlacementCodes","isRevShareDisabled","contact","numAdUnits","adunitnames","createdDate","IndexPage","PartnerManagementHeader","_onPublisherAccountChanged","pageName","onPublisherErrorChanged","onFetchPublishersLoading","onFetchingPublishersData","onPublishersFetched","onFormPublisherPartnerChanged","onFormPublisherNameChanged","onFormPublisherNetworkChanged","onFormPublisherAddressLine1Changed","onFormPublisherAddressLine2Changed","onFormPublisherAddressCityChanged","onFormPublisherAddressCountryChanged","onFormPublisherAddressCountryCodeChanged","onFormPublisherAddressStateChanged","onFormPublisherAddressStateListsChanged","onFormPublisherAddressZipcodeChanged","onFormPublisherTierChanged","onFormPublisherOverrideTierChanged","onFormPublisherEntityLimitTierChanged","onFormPublisherServiceLevelChanged","onFormPublisherWebAdunitsChanged","onFormPublisherMobileSearchChanged","onFormPublisherDistributionChanged","onFormPublisherDistributionV2Changed","onFormPublisherStartDistributionChanged","onFormPublisherStartDistributionContentChanged","onFormPublisherSelectTierChanged","onFormPublisherMediationChanged","onFormPublisherNativeChanged","onFormPublisherSyndicationChanged","onFormPublisherPropertyAutoChanged","onFormPublisherPSReportingAPIChanged","onFormPublisherPSDashboardChanged","onFormPublisherEnableDefaultTythonV2Changed","onFormPublisherDynamicPropertyRegistrationChanged","onFormPublisherIpNameChanged","onFormPublisherMinimumIpChanged","onFormPublisherMaximumIpChanged","onFormPublisherIpChanged","onFormPublisherIpRangesChanged","onFormPublisherAccountName","onFormPublisherAccountLanguage","onFormPublisherAccountCountry","onFormPublisherAccountTimezoneChanged","onFormEditted","onFormCreated","onPanelCleared","onPublisherCreated","availableStates","postalcode","propertyAutoApproved","ipAddressName","minIPAddress","maxIPAddress","ipAddressGrid","accountLanguage","accountTimezoneId","accountCountry","accountCurrency","availableStateList","publisherBody","accountBody","Small","primaryContactUsername","publisherEntity","accountEntity","allowEndorReporting","allowedMarkets","defaultUSStates","accountAvailableLanguages","Yahoo","newIpRangeGrid","newIpAddress","Delete","_data$name","fetchedPublisher","updatePublisher","networkAffiliationLabel","networkAffiliationOptionPartnerOwned","networkAffiliationOptionSyndicated","publisherAddressTitle","publisherAddressLine2","allowedMarketsForAllTitle","allowedMarketsForSelectedTitle","createAnAccountTitle","createAnAccountInfo","contentDeliverySetting","createPublisher","editPublisher","yahoo","advancedpublihserattributes","publishertier","publisherTierInternalPremium","publisherTierManagedPremium","publishertierSelfServeStandard","publishertierSelfServe3rdParty","publishertierSelfServe1stParty","publishertierSelfServe1stPartyBoost","publisherFeatureOverrideTier","publisherFeatureOverrideTierInternalPremium","publisherFeatureOverrideTierManagedPremium","publisherFeatureOverrideTierSelfServeStandard","publisherFeatureOverrideTierAPI","publisherFeatureOverrideTierSelfServeExperiment","publisherFeatureOverrideTierSelfServeSearch","publisherEntityLimit","publisherEntityLimitInfinite","publisherEntityLimitSmall","publisherEntityLimitMedium","publisherEntityLimitLarge","publisherEntityLimitNetwork","publisherServiceLevel","publisherServiceLevelPremium","publisherServiceLevelSelfServe","publisherServiceLevelSelfServeTrusted","publisherServiceLevelInternal","publisherServiceLevelSelect","publisherAllowedFeatures","publisherAllowedFeaturesWebAdUnits","publisherAllowedFeaturesMobileSearchAdunit","publisherAllowedFeaturesDistributionReport","publisherAllowedFeaturesDistributionV2Report","publisherAllowedFeaturesStartDistributionReport","publisherAllowedFeaturesStartDistributionContentReport","publisherEnableDefaultTythonV2Report","publisherAllowedFeaturesSelectTierReport","publisherAllowedFeaturesNativeReport","publisherAllowedFeaturesMediationReport","publisherAllowedFeaturesSyndicationReport","publisherAllowedFeaturesPaidSearchReportingApi","publisherAllowedFeaturesPaidSearchDashboard","publisherAllowedFeaturesDynamicSites","publisherIPAddress","publisherIPAddressRange","publisherAdCallFeatures","publisherAdCallFeaturesAskPrice","publisherAdCallFeaturesOnBehalf","publisherAdCallFeaturesReferrer","publisherAdCallFeaturesPaidSearchAPI","publisherAdCallFeaturesOutputType","publisherAdCallFeaturesLogImpression","publisherAdCallFeaturesIPForwording","publisherAdCallFeaturesNetworkOptimizer","publisherAdCallFeaturesAdECN","publisherAdCallFeaturesContextualAPI","IPAddressCreateTitle","IPAddressEditTitle","IPAddressRangeName","IPAddressMinimum","IPAddressMaximum","IPAddressType","IPAddressIPV4","IPAddressIPV6","publisherAllowedFeaturesDesc","ipGrid","CreatePublisher","publisherAccessPermissions","_createStateOrProvinceDropDown","publisherTierDropdownOption","SelfServeStandard","SelfServe1stParty","featureOverrideTierOption","Api","SelfServeExperiment","SelfServeSearch","entityLimitTierOption","Infinite","Medium","Large","Network","publisherServiceLevelOption","_IPGrid","ipPanelFormState","gridPageMessages","_store$active$network","_getPublisherAccessPermission","_publisherAddress","_advancedpublisherAttributes","_createAccount","_createIPAddress","impressions","joinDate","PublisherPage","optionTitle","AccountRole","isAccountLevelRole","AccountManagerAccountsSelected","ReportUserAccounstSelected","AdViewAccountsSelected","ListManagerAccountsSelected","InviteUser","isLegacyUser","localeId","accountsList","accountManagerAccountsSelected","reportUserAccounstSelected","adViewAccountsSelected","listManagerAccountsSelected","contactByPost","isId","userLocale","tokenPanelsubTitle","FontSizes","tokenPanelsubTitleValue","tokenPanelDevToken","tokenPanelAgreement","tokenPanelAgreementBtn","tokenPanelInfoButton","tokenPanelAgreementText","tokenSpinner","tokenFetchFail","notInvitationFound","resendInvitation","deleteInvitation","deleteInvitationDescription","dateJoined","lastActivity","dateExpires","tokenPanelUserNameLabel","tokenPanelEmailLabel","developerTokenLabel","tokenServiceAgreementLabelPrefix","tokenServiceAgreementLabelLink","tokenServiceAgreementLabelSuffix","tokenStatusLabel","tokenPanelGenerateButtonAriaDesc","tokenPanelGenerateButtonLabel","tokenPanelFetchFailLabel","zeroResultTitleUser","zeroResultTitleUserInvitations","isFetchingUserInvitationsLoading","Resend","UserInvitationsGrid","isFetchingUserInvitations","DevTokenPanel","copyButtonType","setCopyButtonType","panelClosed","developerToken","TokenNotFound","ApiCallFailed","menuIconProps","onCopyTokenClick","copyText","onGenerateDevToken","SpinnerText","ariaLive","isFetchingUsersLoading","tokenStatus","devTokenPanelDisplayParams","UsersGrid","isFetchingUsers","_entityGridColumns$fi","_gridColumns$find$isV","_gridColumns$find","_gridColumns$find$isV2","_gridColumns$find2","_gridColumns$find$isV3","_gridColumns$find3","_gridColumns$find$isV4","_gridColumns$find4","UserPage","userAccessPermissions","_getUserAccessPermission","isReportEnabled","commonsession","PERFORMANCE_ALLOWED_CHARTS","DETAILED_PERFORMANCE_ALLOWED_CHARTS","ADUNIT_ALLOWED_CHARTS","DETAILED_ADUNIT_ALLOWED_CHARTS","SITE_ALLOWED_CHARTS","DETAILED_SITE_ALLOWED_CHARTS","MEDIATION_ALLOWED_CHARTS","DETAILED_MEDIATION_ALLOWED_CHARTS","COUNTRY_ALLOWED_CHARTS","DETAILED_COUNTRY_ALLOWED_CHARTS","EXCLUDED_FILTER_COLUMNS","ALLOWED_MEDIATION_FILTER_COLUMNS","MEDIATION_DEFAULT_COLUMNS","MEDIATION_DEFAULT_METRICS","ADUNIT_DEFAULT_COLUMNS","ADUNIT_DEFAULT_METRICS","SITE_DEFAULT_COLUMNS","PropertyUrl","SITE_DEFAULT_METRICS","PERFORMANCE_DEFAULT_METRICS","PERFORMANCE_DEFAULT_COLUMNS","COUNTRY_DEFAULT_COLUMNS","COUNTRY_DEFAULT_METRICS","useMediationAvailable","isMediationAvailable","getInitialDateRange","last7Days","initialStartDate","initialEndDate","storedDateRange","DATE_RANGE","parsedStartDate","parsedEndDate","checkIfValidDateRange","initialDateRangeType","getInitialDateRangeType","storedDateRangeType","DATE_RANGE_TYPE","marker","markerName","markerData","large","markerWrapper","MetricMarker","addMetricButtonRootStyle","sidePanelStyles","ChartSelectionMode","ChartMetricPicker","onMetricSelected","onEditButtonClicked","renderMarker","metricProps","MetricsSidePanel","onPanelHide","onMetricsChanged","availableMetrics","setAvailableMetrics","onSave","updatedMetric","temp","metricsDropdown","cardWrapper","GrainSelector","allowedGrains","activeGrainChanged","allowedGrain","removeBreakdown","generatingAndExportingPNG","MenuItemWarningIcon","breakdownWrapper","breakdownText","inCompatibleColumnWrapper","unAllowedBreakdown","removeKey","ReportDetailsGrid","isDetailedDataLoaded","hasMinimumBreakdown","initialBreakdown","defaultColumns","onBreakdownChanged","dateTimeColumn","addDateColumn","breakdownList","formattedData","newRow","MONTH_AND_YEAR","dateValue","formatDate","roundMetrics","activeDimensions","setActiveDimensions","metricColumns","addCompatibilityProps","dimensionColumns","applyOrdering","metricGridColumns","activeBreakdowns","metricMetadata","incompatibleSet","getIncompatibleBreakdown","breakdownIncompatibleMessage","isBreakdownIncompatible","incompatibleFilters","getIncompatibleFilters","filterIncompatibleMessage","filterAndBreakdownIncompatibleMessage","isFilterIncompatible","incompatibleMessage","incompatibleCantMessage","getBreakdownComponent","reportMessages","activeDimension","newActiveDimensions","onRenderOption","_option$data","_option$data2","reportDetailsMessages","incompatibleMetrics","getIncompatibleFields","onRenderContent","redactIncompatibleFields","Schedule","ShareModal","disableModal","shareSchedule","setShareSchedule","getScheduleOptions","emails","setEmails","shareErrors","setShareErrors","schedule","CompactPeoplePicker","selectionAriaLabel","newEmails","onValidateInput","ValidationState","valid","DAILY","WEEKLY","ChartTypeSelector","onChartTypeChange","allowedChartTypes","setCurrentChartGrain","enableHideChartsButton","onChartsHideClicked","chartsHidden","setChartsHidden","onChartTypeIconClick","onHideChartsClick","TopBarActions","setEnableShare","isDetailedView","cardRef","exportedFileName","disableExport","onRenderMenuIcon","getDataToExport","ReportCard","reportDetailedData","isSummaryDataLoaded","defaultMetrics","showMetricsMarkers","showDetailsReportLink","onChartGrainChanged","onSelectedMetricChanged","onActiveMetricsChanged","onBreakDownChanged","reportCardRef","viewReportRoute","reportDetails","startingChartType","CHART_GRAIN","currentBreakdown","setCurrentBreakdown","defaultSelectedMetric","setSelectedMetric","enableShare","showCharts","setShowCharts","showSidePanel","setShowSidePanel","setActiveMetrics","hasEmptyData","showMetricsDropdown","mainDimensionMetadata","setMainDimensionMetadata","selectedMetricMetadata","setSelectedMetricMetadata","chartsOptions","CountryCode","disabledRatioMetric","newChartType","stringifiedFilters","loadedMetrics","PERFORMANCE","changedMetrics","MULTI","SINGLE","selected","newBreakdown","updatedBreakdown","AdUnitsReportCard","dataMetrics","chartDataMetrics","ADUNIT","updatedGrain","CountryReportCard","COUNTRY","MediationReportCard","PerformanceReportCard","showChartGrains","SitesReportCard","SITE","filterBarFocused","filterBarUnFocused","filterInfoContainer","filterInfoContainerUnfocused","highlightedFilterInfoContainer","filterInfoFocused","filterInfoSelectors","highlightedFilterInfoSelectors","filterCloseIcon","filterIcon","filterInfoUnfocused","filterListPageStyle","FilterListItem","isFocused","onRemove","FilterListBar","isBarFocused","setBarUnfocused","setBarFocused","filterBarRef","buttonAction","cardRootStyle","ManageFilter","initialFilterMembers","isFilterOpen","areMembersLoaded","inCompatibilityMessage","labelId","descriptionId","selectedFilters","setSelectedFilter","getSelectedFilters","filterMembers","setFilterMembers","newSelection","rightTopEdge","CheckboxTreeWithSelectionBox","searchPlaceholderText","onChildCheckboxChange","onRemoveSelection","onRemoveAllSelection","selectionList","selectionTitle","onParentCheckboxChange","filterMember","unAllowedFilters","ActionBar","_activeDimension$inco","setIsFilterOpenTrue","setIsFilterOpenFalse","filterButtonId","setActiveDimension","storedFilters","FILTERS","setActiveFilters","currentColumnMembers","areColumnMembersLoaded","dimensionFilter","member","currentFilter","activeFilter","_currentFilter$values","activeDimensionIncompatibleMessage","filterMenuProps","_dimension$incompatib","checkFieldCompatibility","CommandButton","activeFilterIndex","totalMembers","updatedFilters","formTitleStyles","breadcrumbStyles","SubPageNavBar","backAriaDescription","ReportDetailsPage","mediationReportMetadata","setCalendarDateRange","setChartGrain","getMainDimension","getReportTitle","isMediationReport","mediationMetrics","canFetchDetails","canFetchMediationDetails","availableMediationFilters","exportMetadata","detailedData","mediationReportDetailedData","exportData","canExport","onExportCSVClicked","onExportPNGClicked","basis","changedFilters","metricCard","MetricCard","evenCards","metricsWrapper","columnGap","smallCards","gridAutoFlow","gridAutoColumns","cardsColumn","gridTemplateRows","MetricsSummaryCards","isSummaryDataLaded","MSXTython","reportCard","TythonReportCards","adunitReportCardRef","sitesReportCardRef","performanceReportCardRef","mediationReportCardRef","countryReportCardRef","linkTitle","ReportPage","routeChanged","setDateRange","highlight","parts","part","_getHighlightedText","termAndConditions","bold","SuspendedUserOverlay","suspendedUser","UserSettingsPage","ProfilePanelMessages","NotificationConfiguration","AdManagementHeader","onAuditHistoryPageInitialized","updateFiltersAndFetchLogs","handleDownloadButtonClicked","getAuditHistoryStore","entityTypes","auditTypes","isShowAllDetailsEnabled","setShowAllDetails","showDetails","setAuditLogs","auditLogs","setTotalPages","totalPages","setTotalRecords","totalRecords","setPageNumber","setPageSize","setFilters","setEntityTypes","setAuditTypes","setIsDataLoading","resetFilters","actionType","actionOn","actionDetails","showAll","hideAll","hideDetails","inviteAccept","payment","noAuditsFound","apiCallFailedNotification","startingDownloadNotification","fetchAuditLogs","shouldUpdateGrid","inputPageSize","queryString","generateAuditHistoryUrl","auditHistoryStore","setMinutes","setUTCMinutes","auditHistoryRequest","AuditHistoryMessages","changeLogs","getAdUnitTypes","adUnitTypes","getLifeCycleStatusIdValue","getAddedRemovedCount","addCount","removeCount","messageParts","getEntityTypeDisplayMap","Settled","Processing","TransactionTitle","TransactionMessage","AdBlockCategories","AdBlockCategoriesPlural","UniversalAdBlockCategories","UniversalAdBlockCategoriesPlural","UniversalAdBlockStatus","PaymentAccountStatus","AdblocksUpdated","AdBlockStatusEnabled","AdBlockStatusDisabled","ClarityProjectID","PropertyName","created","deleted","updated","updatedSmallCase","changed","exported","downloaded","notificationPreferencesTitle","ServingStatusNotification","BillingAlertNotification","InvitedUserNotification","ProfileReviewNotification","BackgroundColor","ButtonBackgroundColor","AdUnitTypes","TitleColor","Font","addedAs","selectedAs","updatedMessageFormat","LifeCycleStatusID","nameChangedTo","added","removed","getActionDetailsForPayment","actionDetail","auditLog","changes","change","attributeChanged","amount","transactionMessageParts","getTransactionStatusAndAmount","n","oldValue","ActionDetail","getActionDetails","_auditLog$entityName","_auditLog$entityId","entityName","auditType","CREATE","ActionDetailsMessages","DELETE","EXPORT","DOWNLOAD","INVITE","_auditLog$changes","_auditLog$changes2","invitedUserEmail","invitedUserRole","INVITE_ACCEPT","UPDATE","actionDetailMessage","ServingStatusMap","getActionDetailsForAdunit","adblockMessages","_change$newValue","getActionDetailsForProperty","getActionDetailsForUser","getActionDetailsForPublisher","updateActionDetailsForUpdate","_actionDetails$change","_actionDetails$change2","_actionDetails$change3","showDetailsIcon","actionDetailsList","actionDetailsListItem","setShowDetails","index2","Intl","DateTimeFormat","second","hour12","modifiedAt","_item$userRoles$map$j","_item$userRoles","_item$userRoles$map$j2","_item$userRoles2","newFilters","newUserRoles","newAuditTypes","newEntityTypes","filterConditionMap","_filterCondition$filt","_filterConditionMap$g","operator","AuditHistoryPage","pageId","messageBarButtonStyle","renderCustomNotifications","pageStore","profileCardMessages","MessageBarButton","_handleProfileEditButtonClick","NotificationBar","onRemoved","_renderCustomNotifications","getLeftPosition","PADDING","summaryContent","tncWrapper","neutralSecondaryAlt","tncCheckbox","tncCheckboxWrapper","svg","tncAckMsgSubline","endingButton","actionButtonWrapper","TnCModal","onSkip","onAccept","isTnCAccepted","tncReleaseDate","Layer","FocusTrapZone","Logo","renderDarkLogo","viewBox","xmlns","AUTO_DISMISS_ANIMATION_TIME","animationTime","MANUAL_DISMISS_ANIMATION_TIME","toastStyle","notificationsContainer","notificationBody","notificationAnimation","animationName","automaticFadeIn","automaticFadeInOut","animationIterationCount","notificationIcon","easing","ToastNotification","ToastNotificationItem","onMessageDismiss","onAnimationEnd","dismissButtonAriaLabel","messageBarDismissButtonAriaLabel","dialogRoot","dialogWrapper","imgWrapper","barNotifications","isPaymentNotificationHandledPerUserSession","isPaymentCheerDialogHandledPerUserSession","getUserSettingStore","paymentCheerDialogActive","dismissPaymentCheerDialog","activatePaymentCheerDialog","getTnCStore","tncSignatureStatus","tncModalProps","useTnC","shouldDisableTnC","isAppLoading","MissingPaymentInformationNotificationId","windowLocationPath","shouldFetchUserPreference","shouldFetchPaymentOnboarding","shouldFetchBackendNotifications","shouldHideBarNotifications","shouldPushPaymentNotification","_userContext$userRole","shouldRemovePaymentNotificationInPanel","shouldTriggerPaymentCheerDialog","setupPaymentNotification","messageBarStyles","MissingPaymentInformation","ImageBase","dialogImg","variant","handlePaymentSetupClick","NotificationBarBase","useTrapZone","_this$props$items","_prevProps$items","_item$messageBarStyle","applyFilterButtonLabel","filterSelectionTextBoxErrorMessage","filtersTitle","filterListAriaDescription","appliedFilterListAriaLabel","filterMenuAriaLabel","removeFilterIconAriaLabel","applyFilterAriaDesc","filterOptionDropdownAriaLabel","filterTextBoxAriaLabel","startDatePlaceholder","endDatePlaceholder","greaterThan","greaterThanEqual","lessThan","lessThanEqual","filterMenuListItem","filterSelectionCallout","filterSelectionCalloutTitle","filterSelectionToolBar","filterSelectionApplyButton","filterSelectionCancelButton","disabledApplyButton","viewAllButton","clearAllButton","filterSummaryCallout","calloutCloseIcon","filterSummaryCalloutHeader","filterInfoSummaryItem","filterSummaryCalloutTitle","GridFilterBase","appliedFilterList","isFilterBeingModified","filterSelectionColumn","_filterListContainer","fil","applyModifyFilterStyles","_onFilterInfoFocusedClicked","_onFilterRemoveButtonClicked","_onFilterInfoUnfocusedClicked","shouldRestoreFocus","_onFilterMenuItemClicked","filterSelectionCalloutTarget","textBoxErrorMessage","relationalFilterOptions","stringFilterTypeOptions","applyButtonDisabled","isTargetOutsideGridFilter","elementContains","isTargetInsideFilterContainer","filterSelectionCalloutOpen","ariaHidden","_onFilterModified","_onFilterApplyButtonClicked","focusFirstChild","filterSummaryCalloutOpen","_getIndexOfElement","_getFilterContainerId","includeNullsInFilterResults","isFilterUnique","_isFilterUnique","isFilterBarFocused","_filterId","_appliedFilterList$fi","modifyFilter","_getIndexOfParentElement","isEventTargetOutsideGridFilter","currentDoc","addFiltertarget","isTargetAddFilterButton","filterContainerId","_addListeners","_this$props$initialFi","_this$props$initialFi2","_async","_tempDisposables","_renderFilterMenuCallout","_renderFilterSelectionCallout","_renderFilterSummaryCallout","_renderAppliedFiltersFocusedList","_renderAppliedFiltersUnfocusedList","getWindow","documentElement","_dismissOnLostFocus","shouldRenderLogo","renderGreyLogo","logo","objectFit","div","span","logoNavButton","msLogo","logoStyle","microsoftGreyLogo","microsoftDarkLogo","microsoftLogo","TnCNotificationComponent","signatureDate","buffer","TNC_NOTIFICATION_ID","TNC_PRE_SIGNATURE_FLAG","patchAcceptTnC","isSkipping","onPatchStart","onPatchFinished","onSuccess","withRetry","patchUrl","handledTnCPopup","shouldRenderTnCModal","setRenderTnC","acceptingTnC","setAcceptingTnC","isLatestAccepted","acceptedVersion","isTnCPreSigned","shouldHandleTnCForExistingUser","shouldForceHidePopup","onAcceptTnC","onSkipTnC","justifyItems","chartLine","chartGrid","headingTitleStyle","headingIconStyle","sectionStyle","sectionTitleStyle","contentRowStyle","contentLabelStyle","contentLabelStyleWithColor","sectionContentStyle","bodyContainerStyle","actionStyle","SummaryCard","HeadingRow","HeadingTitle","ActionsContainer","_ref4","Action","_ref5","Body","_ref6","Section","_ref7","SectionTitle","_ref8","ContentRow","_ref9","SectionContent","_ref10","downloadData","getActivePage","_col$csvHeaderName","csvHeaderName","GridDataDownloadFailure","existingEntityColumns","newNotificationCard","selectedNotificationId","LoadingBalanceDataFailed","startYear","startMonth","PayoutInformationFailed","_xpayJwtTokenRequest$","tokenResponse","xPayJWTRequest","_getAppStore$account","xpayParams","authToken","xpayClientName","isRefreshedUI","showTransactionReport","showSetupPopup","serviceAgreement","LoadPayoutInfoFailed","headerAction","panelHeaderText","updateLanguageFailed","invalidStateReLoginOrReport","setDocumentUploadPanelOpen","setAppealHistory","GOOGLE_ADSENSE_OAUTH_CLIENT_ID_PROD","GOOGLE_ADSENSE_OAUTH_ACCESS_TYPE","GOOGLE_ADSENSE_OAUTH_RESPONSE_TYPE","GOOGLE_ADSENSE_SCOPES","GOOGLE_API_SCRIPT","NOTIFICATION_FAILED_WITH_REASON_ERROR_CODE","MULTIPLE_GAM_ID_ERROR_CODE","OnHold","DEFAULT_SHIMMER_LINES","GridWithCustomColumns","calloutArticleQuery","headingText","headingCalloutContent","helpInfoProps","fetchPropertyServingConfig","fetchPublisherServingConfig","updatePropertyServingConfig","updatePublisherServingConfig","INVALID_INPUT","CODE_GENERATION_LIMIT_REACHED","REQUESTED_CODE_VERIFICATION_RESULT_NOT_FOUND_FOR_PUBLISHER","deleteButton","footerRowStyle","preTextStyle","fieldsContainerStyle","flexBasis","flexDisplay","BrandResponse","BrandDetailsResponse","_userContext$firstNam","_userContext$lastName","localeFromInvitationUrl","isInvitationUrlSupported","termsAndConditionsAccepted","userBody","runInAction","fetchedToken","exception","getDistinctUserRolesFrom","fromUserRoles","distinctUserRoles","currentAccountRole","newRole","isUserRoleSame","getUserRoleDetails","selectedAccounts","isDeepUserRolesEqual","isSame","eachRole","someRole","isUserRoleDifferent","allAccounts","userWithId","rawUser","windowsLiveIdUsername","homePhone","fax","SecretQuestion","accountManagerAccountList","reportUserAccountList","listManagerAccountList","adViewAccountList","fetchAccounts","accountManagerResponse","accountManagerAccount","reportUserResponse","reportUserAccount","listManagerResponse","adViewResponse","existingUserRoles","editedUserRoles","newCustomerLevelRole","newAccountLevelRoles","existingAccountRoles","publisherDetails","generatedToken","fetchedUsers","fetchedUserInvitations","publisherCountry","_VerificationErrorsMe","_JSON$parse2","newUserDetails","_profile$publisher","_newUserDetails$conta","phoneNumberWithCountryCode","_getProfileStore$acti","subStatus","deliveryFailed","codeSent","_getProfileStore$acti2","apiErrorCode","VerificationErrorsMessages","Uploaded","newPublisherDetails","newUserContactDetails","updateUserContactDetails","updatedPublisherDetails","_newUserDetails$posta","_newUserDetails$posta2","_newUserDetails$posta3","_newUserDetails$posta4","_newUserDetails$posta5","_newUserDetails$posta6","addressValidation","isOrg","retValue","_newPublisherDetails$","_newPublisherDetails$2","_newPublisherDetails$3","_newPublisherDetails$4","_newPublisherDetails$5","_newPublisherDetails$6","verifyGeneratedCodeAsync","codeMatched","codeMismatched","commonCollapsibleIconStyle","collapseStyle","expandStyle","collapseIconStyle","expandIconStyle","commonCheckboxStyle","CheckboxGroup","onExpand","onCollapse","disabledCheckboxTooltipText","areAllChildrenChecked","areSomeChildrenChecked","isInExpandedState","toggleIsInExpandedState","handleExpandCollapseButtonClick","handleParentCheckboxClick","isParentCheckboxDisabled","renderLabel","getCheckboxId","parent","indeterminate","child","BOX_HEIGHT","containerBorderStyle","checkboxTreeContainerStyle","selectionBoxContainerStyle","selectedItemsContainerStyle","titleContainerStyle","removeAllButtonStyle","errorMessageStyle","searchBorderStyle","singleCheckboxStyle","checkboxContainerStyle","searchBoxRootStyle","selectedBlockStyle","isCheckboxGroup","CheckboxTree","onSearchClear","onSearchTermChange","suppressSearch","searchTerm","setSearchTerm","handleSearchTermChange","getFilteredGroups","_child$label","handleSearchClear","disabledSelectionTooltipText","onRenderSelectionItem","restProps","renderSelectedItem","DismissFRERequest","EntitySummary","Home","_userDetails$language","ccmtAccount","devtokenparam","evaluationResponse","fetchPublisherEvaluationStatus","ProfileCardMessages","billingLabel","billingDescription","servingLabel","servingDescription","profileLabel","invitedUserLabel","invitedUserDescription","saveButtonAriaDesc","alignItem","gridDisplay","panelSectionContent","panelContent","panelSection","publisherSettingsPermissions","hasPublisherPreferencesReadAccess","hasPublisherPreferencesUpdateAccess","userSettingsPermissions","hasSettingsReadAccess","hasSettingsUpdateAccess","hasBillingAlertsAccess","hasServingStatusAccess","hasProfileReviewAccess","hasInvitedUsersAccess","settingsIcon","BillingAlert","ProfileReview","InvitedUser","userPreferences","tnc","hasAccessToNotifications","notificationPreferencesUpdate","pathModels","_msg$closePanel","_msg$setFormChanged","updatedUserLanguage","updateUserResp","remove","DeletingUserWentWrong","accountDetails","oAuthConnectionStatus","connectedDate","connectedTimeStamp","connectedImageSrc","userImageUri","_response$oauthFailur","_response$oauthFailur2","oauthFailureReasons","connectionStatusTip","actionItems","_response$oauthFailur3","handleMediationResponse","healthCheckUrlParams","errorToastNotification","PubCenterUserRoles","checkInternalUserAccess","UnauthorizedInternalUserRoute","AuthenticatedRoute","redirectToOldLoginPage","redirectToNewLoginPage","signInButton","signInButtonAriaLabel","redirectionMessage","RedirectionSpinner","ResourceType","CrossEntityResourceType","crossEntityResourceTypeMap","PublisherByAccount","PublisherByAdunit","PublisherByUser","PublisherByWebProperty","ResourceTypeDistribution","defaultCalloutWidth","SearchBase","_this$_searchBarEleme","_this$props$onClearIn","_searchBarElement","onClearInResponsiveView","shimmerCallout","shimmerElement","queryText","minNumLettersForSearchTrigger","searchBoxProps","_this$props$onClearIn2","_this$props2","handleClickOutside","searchInProgress","_calloutProps$callout","minLettersToSearch","searchResultList","screenWidth","screenHeight","searchCalloutProps","otherCalloutProps","searchBar","disableAnimation","_onChange","_onClear","calloutWrapper","directionalHintFixed","_onRenderShimmer","category","onRenderSearchResult","onRenderSearchResultFooter","homeButtonAriaLabel","dropdownAriaLabel","myAccountDescribedByLabel","myAccountStatusLabel","defaultRouteDirection","isTythonExperience","defaultButtonStyle","defaultButtonWrapperStyle","itemIcon","moreInfoIcon","overflowIcon","overflowMenuWrapper","navigationLm","leftSection","rightSection","helpCenterIcon","textHeader","dropdownOption","navItem","itemIdentity","primaryText","defaultLang","_data$items","_localStorage$getItem2","_localStorage$getItem3","_this$props$renderLef","shouldRenderCustomLeftIcon","renderLeftIcon","isSearchBarActiveInNonRegularView","shouldHideDropdownInResponsiveView","shouldRenderSearchBarInResponsiveView","headerItems","headerIconItems","headerIconOverflowItems","isContentOnlyLayout","selectedLang","selectedHeaderItem","_this$state$selectedI","onItemClick","_getLanguageContextualMenuItems","_navigateTo","_shouldShowDropdownSearch","_onRenderOption","_initializeRoutesData","_onDropdownChange","searchProps","menuAs","_getMenu","persistMenu","OverflowSet","overflowItems","_onRenderItem","onRenderOverflowButton","_onRenderOverflowButton","overflowSide","_createPanel","onNavigate","identity","_renderIdentity","_renderIcon","rootExpanded","_showPanel","overflowItemSerializer","_item$onClick","_item$onClick2","_item$onClick3","_item$onClick4","_item$onClick5","_item$onClick6","initialRouteMatch","initialRoute","loadingText","selectedLanguage","_getAppStore$userCont","_localStorage$getItem4","routeMatch","headerData","ResizeGroup","_onRenderData","_onReduceData","Profile","_hidePanel","dropdownItems","onSearchTriggered","resourceTypes","globalFilters","resourceTypeDistribution","setGlobalSearchResult","setSearchQuery","setSearchingStatus","searching","getGlobalSearchCalloutStore","postSearch","resourceType","paginationOptions","pageToken","highlightingOptions","highlightPreTag","highlightPostTag","searchResultHeader","categorySeparator","borderTopColor","entityContainer","entityIcon","entityInfo","textLinkFooter","EntityIconMap","WebProperty","PublisherByAdUnit","PublisherByChannel","PublisherByFilter","GlobalSearchHeader","searchResult","retVal","searchCategory","categoryName","totalCount","resultMetadata","ResultCountPerResourceType","resultItem","searchResultItem","resourceName","resourceId","PublisherId","AccountId","_createRoutePath","DynamicBucketSize","sourceRef","searchResultCategory","searchResultHeaderDescId","_onViewMoreResultClicked","_onRenderCell","cellDescId","_onItemClicked","elementId","_searchProps","layoutStore","_searchResultToCategories","_userContext$name","_userContext$email","menuAccessPermissions","_getMenuAccessPermission","newRoutes","_onSearchQueryChange","_onClearSearch","_onRenderSearchResult","_onRenderSearchCalloutFooter","renderLeftMost","Page","renderWhiteBackground","LoginPageMessages","handleResize","_renderSpinner","localStorageLocal","renderLeftMostSection","setSearchParams","showMoreLoading","clearStore","isShowMoreLoading","searchResultInfo","resultInfo","resultData","SearchResult","CreationDateTime","Status","_item","getPublisherId","getAccountId","getResourceType","AdFilter","numberOfExcludedURLs","NumberOfExcludedURLs","numberOfExcludedKeywords","NumberOfExcludedKeywords","numberOfChannels","NumberOfChannels","numberOfAdunits","NumberOfAdunits","numberOfAdFilters","NumberOfAdFilters","lastModifiedDateTime","LastModifiedDateTime","FullName","PublisherName","WebSiteURL","resourceTypePriorityMap","Reporting","buildSearchResults","publisherCrossEntities","NextPageToken","promiseResponses","reqResourceTypes","resultPriorityOptions","responses","responseMap","resourceTypeMap","totalResultCount","routePrefix","orderedResourceTypesMap","orderedResourceTypes","getOrderedResources","clickableCellAriaDesc","showMoreDescription","buttonIcon","iconHeader","iconCell","visibility","iconImg","GlobalSearchResultList","GlobalSearchResultListMessages","cellAriaDescId","_onClick","_renderItemColumn","_buildSearchResultListColumns","isHeaderVisible","_columnNames","iconColumn","isIconOnly","_columns","isCollapsable","filterSearchBy","clearFilters","filterCheckboxAriaDesc","filterContent","clearFilterButton","GlobalSearchResultPage","_filters","_updateFilters","GlobalSearchResultPageMessages","_getFilters","_clearFilters","_getSearchResultLists","filterState","checkboxAriaDescId","_checkBoxClicked","filterResource","GlobalSearchResultRouter","productName","pubCenterNewBrand","slogan","incentive","contactUs","alreadyMember","alreadyMemberNewBrand","emailAddressLabel","signIn","signUp","usersToBeQuestion","usersToBeQuirkOne","usersToBeQuirkTwo","usersToBeQuirkThree","moneyLabel","moneyDesc","adsLabel","adsDesc","timeLabel","timeDesc","advantageOneDescOne","advantageOneDescTwo","advantageTwoDescOne","advantageTwoDescTwo","startingHeader","startingDesc","stepOneHeader","stepOneDesc","stepTwoHeader","stepTwoDesc","stepThreeHeader","stepThreeDesc","monetizationHeader","monetizationDesc","imgBackgroundAlt","imgMoneyBagAlt","imgAdsAlt","imgTimeAlt","imgPrimaryOnboardAlt","imgSecondaryOnboardAltOne","imgSecondaryOnboardAltTwo","imgSecondaryOnboardAltThree","emailInputPlaceholder","space","imageWithTextGrid","introductionContainer","textFieldTitle","textFieldGroup","centerTextAlign","imageContainer","aboutUsBG","backgroundPosition","backgroundBlendMode","backgroundRepeat","signInContainer","bodyContainer","imageWithTextOnLeft","imageWithTextOnRight","iconsContainer","iconsContainerPrimary","stepsContainer","monetizationContainer","smaller","font18","font16","font14","AboutUsPage","useLayoutEffect","handleSignInClick","fieldGroup","woman","money","time","man","twoWomen","one","two","three","inventoryCreationTitle","inventoryCreationContentSectionOne","inventoryCreationContentSectionOneLink","inventoryCreationContentSectionTwo","inventoryCreationContentSectionTwoLink","inventoryCreationCardTitleSite","adsCreationCardTitleSite","adsCreationCardTitleApp","inventoryCreationCardDescriptionSite","inventoryCreationCardDescriptionApp","inventoryCreationCardTitleApp","MSPolicyPlaceholder","AdRenderingPoliciesPlaceholder","SiteApprovalGuidelinesPlaceholder","AppApprovalGuidelinesPlaceholder","adsCreationTitle","adsCreationContentSectionOne","contentSection","cardGroupWrapper","cardSelected","colorNeutralBackground2Selected","cardDescription","EntityTypeCreationType","InventoryType","selectedInventoryType","setSelectedInventoryType","entityCreationUrl","Inventory","Site","App","useEntityCreationLayout","EntityCreationLayoutTitle","EntityCreationLayoutContentSectionOne","helpLinkPlaceholder","EntityCreationLayoutContentSectionTwo","EntityCreationLayoutSelectableCards","inventoryType","cardIcon","Title2","onSelectionChange","AdTypePage","EntityCreationLayout","InventoryTypePage","InvalidUserErrorPage","errorImageAltText","renderTitle","titleSubText","defaultButtonLabel","onDefaultButtonClick","emailStyle","UserNotFound","decodeToken","upn","decoded","output","decodeURIComponent","escape","_urlBase64Decode","pubCenterAADAuthService","pubSilentTokenRequest","pubTokenRequest","_userInfo$email","userInfo","newUserContext","preferred_username","given_name","family_name","userDoesNotExist","userDoesNotExist2","switchAccountLabel","gotoAdvertising","signupToPubCenter","unauthorizedInternalUser","requestAccess","signInWithMSA","UnauthorizedInternalUserPage","onRedirectToEnterpriseUserAccessUI","onSwitchAccountClicked","UserDoesNotExistErrorPage","errorDescriptionPart1","errorDescriptionPart2","NoAccessErrorPage","messageCode","transactionId","LandingPage","LoginPage","isRedirectionFlow","setRedirectionFlow","redirectTo","ResponsiveNonSmall","getTextFieldStyles","LoginPageView","signInButtonStyle","emailInputRef","ImageFit","cover","loginBackgroundImage","_emailInputRef$curren","signUpDetailsTitle","signUpDetailsContentYes","signUpDetailsContentNo","signUpDetailsCountryTerritory","signUpDetailsTermsAndConditions","signUpDetailsCountry","agreementText","defaultCountry","messageBarText","organizationName","orgNamePlaceholder","signupdetailsBoldBanner","signupdetailsInfoBanner","signupdetailsWaitlist","signupEmailOptIn","signupEmailOptInPrivacyLink","signUpDetailsPreferredLanguage","signUpDetailsCurrency","switchNowButton","privacyEmailLinkWrapper","AcceptInvitePage","invitationcode","_store$active$languag","getUserPageStore","loginPageStore","_onPreferredLanguageChange","signUpMessages","_onSwitchAccountButtonClicked","formTitleInputHeader","formEmailInputHeader","formEmailInputPlaceholder","formCreationFailedTitle","formCreationFailedDetails","formCreationSuccessTitle","formCreationSuccessDetails","formTitleInputPlaceholder","formDescriptionInputHeader","formDescriptionInputPlaceholder","formSubmitButton","formSubmitButtonLoading","formDescriptionWordsCount","formDescriptionWordCount","imageWidth","formWrapper","emailIcon","submitButton","errorBannerWrapper","formSuccessHead","descriptionWordCountWrapper","fontColor","formInputStyles","transparentText","MAX_WORD_COUNT","useSupportPage","titleInput","setTitleInput","descriptionInput","setDescriptionInput","emailInput","setEmailInput","shouldRenderFailureMessage","setShouldRenderFailureMessage","createdTicketCaseNumber","setCreatedTicketCaseNumber","isFormLoading","setIsFormLoading","debounceTimeout","emailLogo","emailSentLogo","_document$getElementB2","_document$getElementB3","subject","onDescriptionChange","prevWords","newWords","wordCountElement","parentNode","nextSibling","insertBefore","onFormSubmit","SupportLanguage","SupportCountry","postFormSubmission","_termsAndConditionsLi","caseNumber","termsAndConditionsLink","SupportPage","successMessageRef","ticketNumber","resizable","messageBarIconProps","msgTitle","TermsNConditionsPage","_tncContentString$rep","tncContentString","handleSkipToMainContentClick","mainContentNode","domainStringValidator","duplicateDomainStringValidator","nameStringValidator","duplicateNameStringValidator","ApplicationRoute","IntlProvider","queryClient","QueryClient","ReactDOM","QueryClientProvider","client","ReactQueryDevtools","initialIsOpen","BrowserRouter","ThemeProvider","serviceWorker","ready","registration","unregister","_Object$keys","localStorageCache","tythonRedirectionUtils"],"mappings":"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AK,0BACL,IAAK,2CACL,IAAK,iBACL,IAAK,uBACL,IAAK,cACL,IAAK,iBACL,IAAK,2BACL,IAAK,2BACL,IAAK,QACL,IAAK,uBACL,IAAK,qBACL,IAAK,eACL,IAAK,kDACL,IAAK,qBACL,IAAK,eACL,IAAK,YACL,IAAK,kCACL,IAAK,2BACL,IAAK,wBACL,IAAK,gBACL,IAAK,8BACL,IAAK,cACL,IAAK,qBACL,IAAK,gCACL,IAAK,iBACL,IAAK,8BACL,IAAK,gCACL,IAAK,+BACL,IAAK,YACL,IAAK,YACL,IAAK,QACL,IAAK,uBACL,IAAK,wCACL,IAAK,6CACL,IAAK,aACL,IAAK,uBACL,IAAK,UACL,IAAK,yBACL,IAAK,aACL,IAAK,oBACL,IAAK,YACL,IAAK,gBACL,IAAK,2BACL,IAAK,aACL,IAAK,WACL,IAAK,cACL,IAAK,qBACL,IAAK,sBACL,IAAK,YACL,IAAK,uBACL,IAAK,kBACL,IAAK,kBACL,IAAK,gBACL,IAAK,4BACL,IAAK,cACL,IAAK,kCACL,IAAK,kBACL,IAAK,YACL,IAAK,kBACL,IAAK,kBACL,IAAK,mBACL,IAAK,YACL,IAAK,UACL,IAAK,sBACL,IAAK,mBACL,IAAK,YACL,IAAK,6BACL,IAAK,aACL,IAAK,qBACL,IAAK,gBACL,IAAK,mBACL,IAAK,gBACL,IAAK,4BACL,IAAK,WACL,IAAK,kBACL,IAAK,kBACL,IAAK,MACL,IAAK,mBACL,IAAK,gBACL,IAAK,WACL,IAAK,MACL,IAAK,yCACL,IAAK,4BACL,IAAK,mBACL,IAAK,sBACL,IAAK,UACL,IAAK,6BACL,IAAK,iBACL,IAAK,mBACL,IAAK,sBACL,IAAK,oBACL,IAAK,aACL,IAAK,gCACL,IAAK,eACL,IAAK,kCACL,IAAK,+BACL,IAAK,+BACL,IAAK,4BACL,IAAK,kBACL,IAAK,iCACL,IAAK,eACL,IAAK,OACL,IAAK,yBACL,IAAK,kCACL,IAAK,SACL,IAAK,wBACL,IAAK,yBACL,IAAK,mBACL,IAAK,wCACL,IAAK,WACL,IAAK,QACL,IAAK,+CACL,IAAK,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","file":"static/js/main.05e8635b.chunk.js","sourcesContent":["import { classNamesFunction, getId } from '@fluentui/react';\r\nimport { observer } from 'mobx-react';\r\nimport * as React from 'react';\r\nimport { useWindowSize } from '../../../hooks';\r\nimport { getStore } from '../../../hooks/useWindowSize/store/store';\r\nimport { getScreenReaderTextStyles } from '../../../utils/GlobalStyleUtils';\r\nimport { IFormItemProps, IFormItemStyleProps, IFormItemStyles } from './FormItem.types';\r\n\r\nconst getFormClassNames = classNamesFunction<IFormItemStyleProps, IFormItemStyles>();\r\n\r\n// Usage: Can be used for presentation to provide consistent gap between multiple form elements.\r\n// If it's used to wrap multiple elements within a form, role and aria props can be set appropriately\r\n\r\nconst { windowStoreSerializer } = useWindowSize();\r\n\r\nexport const FormItemBase = observer((props: IFormItemProps) => {\r\n  const { isWindowSmallSize } = windowStoreSerializer(getStore());\r\n  const {\r\n    id,\r\n    formWidth = isWindowSmallSize ? 324 : 440,\r\n    theme,\r\n    styles,\r\n    role,\r\n    ariaLabel,\r\n    ariaLabelledBy,\r\n    ariaDescription,\r\n    ariaDescribedBy,\r\n  } = props;\r\n  const formClassNames = getFormClassNames(styles, { theme: theme!, formWidth });\r\n  const descId = id ? `${id}desc` : getId('FormItemDesc');\r\n\r\n  return (\r\n    <div\r\n      id={id}\r\n      className={formClassNames.root}\r\n      role={role ? role : 'presentation'}\r\n      aria-label={ariaLabel ? ariaLabel : undefined}\r\n      aria-labelledby={ariaLabelledBy ? ariaLabelledBy : undefined}\r\n      aria-describedby={ariaDescribedBy ? ariaDescribedBy : ariaDescription ? descId : undefined}\r\n    >\r\n      {props.children}\r\n      {ariaDescription ? (\r\n        <span id={descId} style={getScreenReaderTextStyles()}>\r\n          {ariaDescription}\r\n        </span>\r\n      ) : null}\r\n    </div>\r\n  );\r\n});\r\n","import { styled } from '@fluentui/react';\r\nimport { FormItemBase } from './FormItem.base';\r\nimport { getStyles } from './FormItem.styles';\r\nimport { IFormItemProps, IFormItemStyleProps, IFormItemStyles } from './FormItem.types';\r\n\r\n// Use Fabric Base guidelines since this might be contributed back to Fabric.\r\nexport const FormItem = styled<IFormItemProps, IFormItemStyleProps, IFormItemStyles>(FormItemBase, getStyles, undefined, {\r\n  scope: 'FormItem',\r\n});\r\n","import { IPubcenterSpacing } from '../../../../theme';\r\nimport { IFormItemStyleProps, IFormItemStyles } from './FormItem.types';\r\n\r\nexport const getStyles = (props: IFormItemStyleProps): IFormItemStyles => {\r\n  const { formWidth, theme } = props;\r\n  const DefaultFormWidth = 220;\r\n  const spacing = theme.spacing as IPubcenterSpacing;\r\n  return {\r\n    root: [\r\n      'ms-Form-Item',\r\n      {\r\n        display: 'block',\r\n        width: formWidth || DefaultFormWidth,\r\n        marginBottom: spacing.size16\r\n      }\r\n    ],\r\n  };\r\n};\r\n","import { IButtonStyles, ITheme } from '@fluentui/react';\r\nimport { IPubcenterSpacing } from '../../../../theme';\r\nimport { IFormSectionStyleProps, IFormSectionStyles } from './FormSection.types';\r\n\r\nexport const getStyles = (props: IFormSectionStyleProps): IFormSectionStyles => {\r\n  const { sectionWidth, expanded, theme, spaceBetween, hasBorderBottom = true } = props;\r\n  const spacing = theme.spacing as IPubcenterSpacing;\r\n  const defaultWidth = 644;\r\n\r\n  return {\r\n    root: {\r\n      width: sectionWidth || defaultWidth,\r\n      borderTopWidth: 1,\r\n      borderBottomWidth: hasBorderBottom ? 1 : 0,\r\n      borderTopStyle: 'solid',\r\n      borderBottomStyle: 'solid',\r\n      borderColor: theme.palette.neutralLight,\r\n      selectors: {\r\n        $content: {\r\n          display: expanded ? 'block' : 'none',\r\n        },\r\n      },\r\n    },\r\n    title: [\r\n      'ms-FormSectionTitle',\r\n      {\r\n        display: 'flex',\r\n        justifyContent: spaceBetween ? 'space-between' : 'flex-start',\r\n        alignItems: 'center',\r\n        backgroundColor: theme.palette.white,\r\n        height: '42px',\r\n        cursor: 'pointer',\r\n        selectors: {\r\n          ':hover': {\r\n            backgroundColor: theme.palette.neutralLighter,\r\n          },\r\n        },\r\n      },\r\n    ],\r\n    content: [\r\n      'ms-FormSectionContent',\r\n      {\r\n        backgroundColor: theme.palette.white,\r\n        marginBottom: spacing.size32,\r\n        height: 'inherit',\r\n      },\r\n    ],\r\n    titleLabel: [\r\n      'ms-fontWeight-semibold',\r\n      {\r\n        fontSize: theme.fonts.mediumPlus.fontSize,\r\n      },\r\n    ],\r\n  };\r\n};\r\n\r\nexport const iconButtonStyles = (theme: ITheme): IButtonStyles => {\r\n  const spacing = theme.spacing as IPubcenterSpacing;\r\n  return {\r\n    root: [\r\n      {\r\n        paddingLeft: spacing.size8,\r\n        paddingRight: spacing.size12,\r\n        paddingTop: spacing.size16,\r\n        paddingBottom: '14px',\r\n        color: theme.palette.neutralSecondary,\r\n        fontSize: theme.fonts.small.fontSize,\r\n      },\r\n    ],\r\n  };\r\n};\r\n","import { classNamesFunction, getId, Icon } from '@fluentui/react';\r\nimport { observer } from 'mobx-react';\r\nimport * as React from 'react';\r\nimport { useState } from 'react';\r\nimport { useWindowSize } from '../../../hooks';\r\nimport { getStore } from '../../../hooks/useWindowSize/store/store';\r\nimport { isButtonPressKey } from '../../../utils/AccessibilityUtils';\r\nimport { getScreenReaderTextStyles } from '../../../utils/GlobalStyleUtils';\r\nimport { iconButtonStyles } from './FormSection.styles';\r\nimport { IFormSectionProps, IFormSectionStyleProps, IFormSectionStyles } from './FormSection.types';\r\n\r\nconst getClassNames = classNamesFunction<IFormSectionStyleProps, IFormSectionStyles>();\r\n\r\nconst { windowStoreSerializer } = useWindowSize();\r\n\r\nexport const FormSectionBase = observer((props: IFormSectionProps) => {\r\n  const { isWindowSmallSize } = windowStoreSerializer(getStore());\r\n\r\n  const { styles, theme, title, ariaDescription, formWidth = isWindowSmallSize ? 324 : 440, rightChevron, hasBorderBottom } = props;\r\n  const [expanded, setExpanded] = useState(props.expanded);\r\n  const classNames = getClassNames(styles, {\r\n    theme: theme!,\r\n    sectionWidth: formWidth,\r\n    spaceBetween: rightChevron,\r\n    expanded,\r\n    hasBorderBottom: hasBorderBottom!,\r\n  });\r\n  const id = getId('formSectionDescription');\r\n  const formSectionDescription =\r\n    (ariaDescription !== undefined ? ariaDescription : '') + 'Click to ' + (expanded ? 'collapse' : 'expand') + ' section.';\r\n\r\n  const ChevronIcon = <Icon iconName={expanded ? 'ChevronUp' : 'ChevronDown'} styles={iconButtonStyles(theme!)} />;\r\n\r\n  const TitleLabel = (\r\n    <div className={classNames.titleLabel} role=\"heading\" aria-level={2}>\r\n      {title}\r\n    </div>\r\n  );\r\n\r\n  const onToggle = (): void => {\r\n    setExpanded(!expanded);\r\n    props.sectionStateChange?.(!expanded);\r\n  };\r\n\r\n  return (\r\n    <div className={classNames.root}>\r\n      <div\r\n        className={classNames.title}\r\n        onClick={onToggle}\r\n        onKeyDown={(ev) => isButtonPressKey(ev.key) && onToggle()}\r\n        role=\"button\"\r\n        tabIndex={0}\r\n        aria-expanded={expanded}\r\n        aria-describedby={id}\r\n      >\r\n        {rightChevron ? (\r\n          <>\r\n            {TitleLabel}\r\n            {ChevronIcon}\r\n          </>\r\n        ) : (\r\n          <>\r\n            {ChevronIcon}\r\n            {TitleLabel}\r\n          </>\r\n        )}\r\n\r\n        <span id={id} style={getScreenReaderTextStyles()}>\r\n          {formSectionDescription}\r\n        </span>\r\n      </div>\r\n      <div className={classNames.content} hidden={!expanded} aria-hidden={!expanded}>\r\n        {props.children}\r\n      </div>\r\n    </div>\r\n  );\r\n});\r\n","import { styled } from '@fluentui/react';\r\nimport { FormSectionBase } from './FormSection.base';\r\nimport { getStyles } from './FormSection.styles';\r\nimport { IFormSectionProps, IFormSectionStyleProps, IFormSectionStyles } from './FormSection.types';\r\n\r\n// Use Fabric Base guidelines since this might be contributed back to Fabric.\r\nexport const FormSection = styled<IFormSectionProps, IFormSectionStyleProps, IFormSectionStyles>(FormSectionBase, getStyles, undefined, {\r\n  scope: 'FormSection',\r\n});\r\n","import { BaseComponent, ICalloutProps, classNamesFunction } from '@fluentui/react';\r\nimport * as React from 'react';\r\nimport AppMessages from '../../../App.messages';\r\nimport { InfoButton } from '../../InfoButton';\r\nimport { IFormTitleProps, IFormTitleStyleProps, IFormTitleStyles } from './FormTitle.types';\r\n\r\nconst getClassNames = classNamesFunction<IFormTitleStyleProps, IFormTitleStyles>();\r\n\r\nexport class FormTitleBase extends BaseComponent<IFormTitleProps> {\r\n  public render(): JSX.Element {\r\n    const {\r\n      articleQuery,\r\n      id,\r\n      styles,\r\n      theme,\r\n      title,\r\n      calloutContent,\r\n      calloutOnDismiss,\r\n      iconButtonOnClick,\r\n      noHelpPopup,\r\n      intl,\r\n      titleHeadingLevel,\r\n    } = this.props;\r\n\r\n    const { formatMessage } = intl;\r\n    const classNames = getClassNames(styles, { theme: theme! });\r\n    const calloutProps: ICalloutProps = {\r\n      calloutWidth: 300,\r\n    };\r\n\r\n    return (\r\n      <div className={classNames.root}>\r\n        <div id={id} className={classNames.title} role=\"heading\" aria-level={titleHeadingLevel ?? 1}>\r\n          {title}\r\n        </div>\r\n        {!noHelpPopup && (\r\n          <InfoButton\r\n            ariaLabel={formatMessage(AppMessages.infoLabel, { label: title })}\r\n            ariaDescription={formatMessage(AppMessages.infoDescription, { label: title })}\r\n            iconTitle=\"Information\"\r\n            calloutContent={calloutContent}\r\n            calloutProps={calloutProps}\r\n            calloutOnDismiss={calloutOnDismiss}\r\n            iconButtonOnClick={iconButtonOnClick}\r\n            articleQuery={articleQuery}\r\n          />\r\n        )}\r\n      </div>\r\n    );\r\n  }\r\n}\r\n","import { IPubcenterTheme } from '../../../../theme';\r\nimport { flexWithAlignCenter } from '../../../utils/GlobalStyleUtils';\r\nimport { IFormTitleStyleProps, IFormTitleStyles } from './FormTitle.types';\r\n\r\nexport const getStyles = (props: IFormTitleStyleProps): IFormTitleStyles => {\r\n  const theme = (props.theme as unknown) as IPubcenterTheme;\r\n  const { fonts } = theme;\r\n\r\n  return {\r\n    root: [\r\n      {\r\n        ...flexWithAlignCenter,\r\n      },\r\n    ],\r\n    title: [\r\n      'ms-fontWeight-semibold',\r\n      {\r\n        ...fonts.size20,\r\n      },\r\n    ],\r\n  };\r\n};\r\n","import { styled } from '@fluentui/react';\r\nimport { FormTitleBase } from './FormTitle.base';\r\nimport { getStyles } from './FormTitle.styles';\r\nimport { IFormTitleProps, IFormTitleStyleProps, IFormTitleStyles } from './FormTitle.types';\r\n\r\nexport const FormTitle = styled<IFormTitleProps, IFormTitleStyleProps, IFormTitleStyles>(FormTitleBase, getStyles, undefined, {\r\n  scope: 'FormTitle',\r\n});\r\n","import { defineMessages } from 'react-intl';\r\n\r\nexport default defineMessages({\r\n  account: {\r\n    id: 'app.account',\r\n    defaultMessage: 'Account',\r\n  },\r\n  activate: {\r\n    id: 'app.activate',\r\n    defaultMessage: 'Activate',\r\n  },\r\n  delete: {\r\n    id: 'app.delete',\r\n    defaultMessage: 'Delete',\r\n  },\r\n  deactivate: {\r\n    id: 'app.deactivate',\r\n    defaultMessage: 'Deactivate',\r\n  },\r\n  duplicate: {\r\n    id: 'app.duplicate',\r\n    defaultMessage: 'Duplicate',\r\n  },\r\n  edit: {\r\n    id: 'app.edit',\r\n    defaultMessage: 'Edit',\r\n  },\r\n  code: {\r\n    id: 'app.code',\r\n    defaultMessage: 'Code',\r\n  },\r\n  information: {\r\n    id: 'app.information',\r\n    defaultMessage: 'Information',\r\n  },\r\n  atleastSelectOneAccount: {\r\n    id: 'app.atleastSelectOneAccount',\r\n    defaultMessage: 'At least select 1 account',\r\n  },\r\n  deactivateLowercase: {\r\n    id: 'grid.deactivate.deactivateLowercase',\r\n    defaultMessage: 'deactivate',\r\n  },\r\n  activateLowercase: {\r\n    id: 'app.activateLowercase',\r\n    defaultMessage: 'activate',\r\n  },\r\n  enabledUppercase: {\r\n    id: 'app.enabledUppercase',\r\n    defaultMessage: 'Enabled',\r\n  },\r\n  disabledUppercase: {\r\n    id: 'app.disabledUppercase',\r\n    defaultMessage: 'Disabled',\r\n  },\r\n  export: {\r\n    id: 'app.export',\r\n    defaultMessage: 'Export',\r\n  },\r\n  download: {\r\n    id: 'app.download',\r\n    defaultMessage: 'Download',\r\n  },\r\n  downloadSelected: {\r\n    id: 'app.downloadSelected',\r\n    defaultMessage: 'Download Selected',\r\n  },\r\n  downloadPage: {\r\n    id: 'app.downloadPage',\r\n    defaultMessage: 'Download Page',\r\n  },\r\n  downloadAll: {\r\n    id: 'app.downloadAll',\r\n    defaultMessage: 'Download All',\r\n  },\r\n  downloadSelectedCmdBtnAriaDesc: {\r\n    id: 'app.downloadSelectedCmdBtnAriaDesc',\r\n    defaultMessage: 'Download Selected',\r\n  },\r\n  downloadPageCmdBtnAriaDesc: {\r\n    id: 'app.downloadPageCmdBtnAriaDesc',\r\n    defaultMessage: 'Download Page',\r\n  },\r\n  downloadAllCmdBtnAriaDesc: {\r\n    id: 'app.downloadAllCmdBtnAriaDesc',\r\n    defaultMessage: 'Download All',\r\n  },\r\n  downloadCmdBtnAriaDesc: {\r\n    id: 'grid.downloadCmdBtnAriaDesc',\r\n    defaultMessage: 'Click to download grid data',\r\n  },\r\n  addFilter: {\r\n    id: 'app.addFilter',\r\n    defaultMessage: 'Add filter',\r\n  },\r\n  filters: {\r\n    id: 'app.filters',\r\n    defaultMessage: 'Filters',\r\n  },\r\n  filtersDescription: {\r\n    id: 'app.filtersDescription',\r\n    defaultMessage: 'Select the filters you want.',\r\n  },\r\n  updateFilters: {\r\n    id: 'app.updateFilters',\r\n    defaultMessage: 'Update filters',\r\n  },\r\n  addMetrics: {\r\n    id: 'app.addMetrics',\r\n    defaultMessage: 'Add metrics',\r\n  },\r\n  modifyColumns: {\r\n    id: 'app.modifyColumns',\r\n    defaultMessage: 'Modify Columns',\r\n  },\r\n  modifyColumnsDescription: {\r\n    id: 'app.modifyColumnsDescription',\r\n    defaultMessage: 'Select the columns you want. {appName} will set the order.',\r\n  },\r\n  updateColumns: {\r\n    id: 'app.updateColumns',\r\n    defaultMessage: 'Update columns',\r\n  },\r\n  publisher: {\r\n    id: 'app.publisher',\r\n    defaultMessage: 'Publisher',\r\n  },\r\n  noPublisherSelected: {\r\n    id: 'app.noPublisherSelected',\r\n    defaultMessage: 'A publisher isn’t selected yet. To start managing {entity}, search for a publisher and then if available, an account.',\r\n  },\r\n  noAccountSelected: {\r\n    id: 'app.noAccountSelected',\r\n    defaultMessage: 'The publisher does not have an account associated with it. To get started, create an account.',\r\n  },\r\n  customerInvalid: {\r\n    id: 'app.customerInvalid',\r\n    defaultMessage: `This publisher can't be accessed in {appName}. Please search for another one.`,\r\n  },\r\n  upload: {\r\n    id: 'app.upload',\r\n    defaultMessage: 'Upload',\r\n  },\r\n  previous: {\r\n    id: 'app.previous',\r\n    defaultMessage: 'Previous',\r\n  },\r\n  continue: {\r\n    id: 'app.continue',\r\n    defaultMessage: 'Continue',\r\n  },\r\n  cancel: {\r\n    id: 'app.cancel',\r\n    defaultMessage: 'Cancel',\r\n  },\r\n  apply: {\r\n    id: 'app.apply',\r\n    defaultMessage: 'Apply',\r\n  },\r\n  search: {\r\n    id: 'app.search',\r\n    defaultMessage: 'Search',\r\n  },\r\n  finish: {\r\n    id: 'app.finish',\r\n    defaultMessage: 'Finish',\r\n  },\r\n  required: {\r\n    id: 'app.required',\r\n    defaultMessage: 'Required',\r\n  },\r\n  optional: {\r\n    id: 'app.optional',\r\n    defaultMessage: 'Optional',\r\n  },\r\n  support: {\r\n    id: 'app.support',\r\n    defaultMessage: 'support',\r\n  },\r\n  default: {\r\n    id: 'app.default',\r\n    defaultMessage: 'Default',\r\n  },\r\n  status: {\r\n    id: 'app.status',\r\n    defaultMessage: 'Status',\r\n  },\r\n  partnerCodes: {\r\n    id: 'app.partnerCodes',\r\n    defaultMessage: 'Partner Codes',\r\n  },\r\n  removeAll: {\r\n    id: 'app.removeAll',\r\n    defaultMessage: 'Remove all',\r\n  },\r\n  addAll: {\r\n    id: 'app.addAll',\r\n    defaultMessage: 'Add all',\r\n  },\r\n  add: {\r\n    id: 'app.add',\r\n    defaultMessage: 'Add',\r\n  },\r\n  replace: {\r\n    id: 'app.replace',\r\n    defaultMessage: 'Replace',\r\n  },\r\n  append: {\r\n    id: 'app.append',\r\n    defaultMessage: 'Append',\r\n  },\r\n  name: {\r\n    id: 'app.name',\r\n    defaultMessage: 'Name',\r\n  },\r\n  domain: {\r\n    id: 'app.domain',\r\n    defaultMessage: 'Domain',\r\n  },\r\n  multiSelectPickerSelectedItemsLabel: {\r\n    id: 'multiSelectPicker.selectedItemsLabel',\r\n    defaultMessage: 'Selected: {count}',\r\n  },\r\n  timezoneLabel: {\r\n    id: 'timezoneLabel',\r\n    defaultMessage: ' Time zone',\r\n  },\r\n  timezoneEST: {\r\n    id: 'timezoneEST',\r\n    defaultMessage: '(GMT-05:00) Eastern Time (US & Canada)',\r\n  },\r\n  timezoneIDL: {\r\n    id: 'timezoneIDL',\r\n    defaultMessage: '(GMT-12:00) International Date Line West',\r\n  },\r\n  address: {\r\n    id: 'address',\r\n    defaultMessage: 'Address',\r\n  },\r\n  city: {\r\n    id: 'city',\r\n    defaultMessage: 'City',\r\n  },\r\n  countryOrRegion: {\r\n    id: 'countryOrRegion',\r\n    defaultMessage: 'Country or region',\r\n  },\r\n  stateOrProvince: {\r\n    id: 'stateOrProvince',\r\n    defaultMessage: 'State or province',\r\n  },\r\n  zipcode: {\r\n    id: 'zipcode',\r\n    defaultMessage: 'Zip or postal code',\r\n  },\r\n  language: {\r\n    id: 'language',\r\n    defaultMessage: 'Language',\r\n  },\r\n  country: {\r\n    id: 'country',\r\n    defaultMessage: 'Country',\r\n  },\r\n  currency: {\r\n    id: 'currency',\r\n    defaultMessage: 'Currency',\r\n  },\r\n  deactivateGenericTitle: {\r\n    id: 'deactivateGenericTitle',\r\n    defaultMessage: 'Are you sure you want to deactivate?',\r\n  },\r\n  deleteGenericTitle: {\r\n    id: 'deleteGenericTitle',\r\n    defaultMessage: 'Are you sure you want to delete?',\r\n  },\r\n  neverMind: {\r\n    id: 'neverMind',\r\n    defaultMessage: 'Never Mind',\r\n  },\r\n  all: {\r\n    id: 'app.all',\r\n    defaultMessage: 'All',\r\n  },\r\n  adUnits: {\r\n    id: 'app.adunits',\r\n    defaultMessage: 'Ad units',\r\n  },\r\n  adFilters: {\r\n    id: 'app.adfilters',\r\n    defaultMessage: 'Ad filters',\r\n  },\r\n  channels: {\r\n    id: 'app.channels',\r\n    defaultMessage: 'Channels',\r\n  },\r\n  publishers: {\r\n    id: 'app.publishers',\r\n    defaultMessage: 'Publishers',\r\n  },\r\n  reporting: {\r\n    id: 'app.reporting',\r\n    defaultMessage: 'Reporting',\r\n  },\r\n  properties: {\r\n    id: 'app.properties',\r\n    defaultMessage: 'Properties',\r\n  },\r\n  site: {\r\n    id: 'app.site',\r\n    defaultMessage: 'Site',\r\n  },\r\n  accounts: {\r\n    id: 'app.accounts',\r\n    defaultMessage: 'Accounts',\r\n  },\r\n  users: {\r\n    id: 'app.users',\r\n    defaultMessage: 'Users',\r\n  },\r\n  userInvitations: {\r\n    id: 'app.userInvitations',\r\n    defaultMessage: 'User Invitations',\r\n  },\r\n  showMore: {\r\n    id: 'app.showmore',\r\n    defaultMessage: 'Show more',\r\n  },\r\n  back: {\r\n    id: 'app.navBack',\r\n    defaultMessage: 'Back',\r\n  },\r\n  loadingLabel: {\r\n    id: 'app.loadingLabel',\r\n    defaultMessage: 'Loading...',\r\n  },\r\n  loadingStatusLabel: {\r\n    id: 'app.loadingStatusLabel',\r\n    defaultMessage: 'Loading...',\r\n  },\r\n  loadingWaitingLabel: {\r\n    id: 'app.loadingWaitingLabel',\r\n    defaultMessage: \"One moment please, this won't take long...\",\r\n  },\r\n  submit: {\r\n    id: 'app.submit',\r\n    defaultMessage: 'Submit',\r\n  },\r\n  save: {\r\n    id: 'app.save',\r\n    defaultMessage: 'Save',\r\n  },\r\n  saving: {\r\n    id: 'app.saving',\r\n    defaultMessage: 'Saving...',\r\n  },\r\n  createChannel: {\r\n    id: 'app.createChannel',\r\n    defaultMessage: 'Create channel',\r\n  },\r\n  close: {\r\n    id: 'app.close',\r\n    defaultMessage: 'Close',\r\n  },\r\n  on: {\r\n    id: 'app.on',\r\n    defaultMessage: 'On',\r\n  },\r\n  off: {\r\n    id: 'app.off',\r\n    defaultMessage: 'Off',\r\n  },\r\n  infoDescription: {\r\n    id: 'app.infoDescription',\r\n    defaultMessage: 'Click here for more information on {label}',\r\n  },\r\n  infoLabel: {\r\n    id: 'app.infoLabel',\r\n    defaultMessage: '{label} Help',\r\n  },\r\n  here: {\r\n    id: 'app.here',\r\n    defaultMessage: 'here',\r\n  },\r\n  learnMore: {\r\n    id: 'app.learnMore',\r\n    defaultMessage: 'Learn more',\r\n  },\r\n  statusActive: {\r\n    id: 'app.statusActive',\r\n    defaultMessage: 'Active',\r\n  },\r\n  statusInactive: {\r\n    id: 'app.statusInactive',\r\n    defaultMessage: 'Inactive',\r\n  },\r\n  skipToMainContent: {\r\n    id: 'app.skipToMainContentLabel',\r\n    defaultMessage: 'Skip to main content',\r\n  },\r\n  next: {\r\n    id: 'app.next',\r\n    defaultMessage: 'Next',\r\n  },\r\n  yes: {\r\n    id: 'app.yes',\r\n    defaultMessage: 'Yes',\r\n  },\r\n  performanceCardTitle: {\r\n    id: 'app.performanceCardTitle',\r\n    defaultMessage: 'Performance',\r\n  },\r\n  sitesCardTitle: {\r\n    id: 'app.sitesCardTitle',\r\n    defaultMessage: 'Sites',\r\n  },\r\n  adUnitsCardTitle: {\r\n    id: 'app.adUnitsCardTitle',\r\n    defaultMessage: 'Ad unit',\r\n  },\r\n  mediationCardTitle: {\r\n    id: 'app.mediationCardTitle',\r\n    defaultMessage: 'Mediation',\r\n  },\r\n  countryCardTitle: {\r\n    id: 'app.countryCardTitle',\r\n    defaultMessage: 'Country',\r\n  },\r\n  moreOptionsButtonAriaLabel: {\r\n    id: 'dataGrid.moreOptionsButtonAriaLabel',\r\n    defaultMessage: 'More options',\r\n  },\r\n  selectedCount: {\r\n    id: 'selectedCount',\r\n    defaultMessage: `{count} selected`,\r\n  },\r\n  sortByColumnHeaderTooltipLabel: {\r\n    id: 'sortByColumnHeaderTooltipLabel',\r\n    defaultMessage: 'Sort by {columnName}',\r\n  },\r\n  panelCloseButtonAriaDesc: {\r\n    id: 'panelCloseButtonAriaDesc',\r\n    defaultMessage: 'Click to dismiss the panel',\r\n  },\r\n  userDeleteWarning: {\r\n    id: 'userDeleteWarning',\r\n    defaultMessage: 'This action cannot be undone. This will permanently delete this account and all of the data.',\r\n  },\r\n  confirmActionMessage: {\r\n    id: 'confirmActionMessage',\r\n    defaultMessage: 'Confirm this action by typing \"yes\" below',\r\n  },\r\n  permanentDelete: {\r\n    id: 'permanentDelete',\r\n    defaultMessage: 'Permanently delete',\r\n  },\r\n  ariaLabelForSave: {\r\n    id: 'ariaLabelForSave',\r\n    defaultMessage: 'Save Changes',\r\n  },\r\n  ariaLabelForGrid: {\r\n    id: 'ariaLabelForGrid',\r\n    defaultMessage: 'Grid',\r\n  },\r\n  ariaLabelForListHeader: {\r\n    id: 'ariaLabelForListHeader',\r\n    defaultMessage: 'List Header',\r\n  },\r\n  ariaLabelForSelectionColumn: {\r\n    id: 'ariaLabelForSelectionColumn',\r\n    defaultMessage: 'Selection Column',\r\n  },\r\n  ariaLabelForSelectAllCheckBox: {\r\n    id: 'ariaLabelForSelectAllCheckbox',\r\n    defaultMessage: 'Select all rows',\r\n  },\r\n  checkButtonAriaLabel: {\r\n    id: 'dataGrid.checkButtonAriaLabel',\r\n    defaultMessage: 'Row selection checkbox',\r\n  },\r\n  ariaLabelForShimmer: {\r\n    id: 'ariaLabelForShimmer',\r\n    defaultMessage: 'Shimmer',\r\n  },\r\n  checkButtonGroupAriaLabel: {\r\n    id: 'checkButtonGroupAriaLabel',\r\n    defaultMessage: 'Check Button Group',\r\n  },\r\n  checkBoxLabel: {\r\n    id: 'checkBoxLabel',\r\n    defaultMessage: 'CheckBox',\r\n  },\r\n  servingStatus: {\r\n    id: 'app.servingStatus',\r\n    defaultMessage: 'Serving Status',\r\n  },\r\n  navAdFilters: {\r\n    id: 'app.nav.adfilters',\r\n    defaultMessage: 'Ad Filters',\r\n  },\r\n  navChannels: {\r\n    id: 'app.nav.channels',\r\n    defaultMessage: 'Channels',\r\n  },\r\n  navAdUnits: {\r\n    id: 'app.nav.adunits',\r\n    defaultMessage: 'Ad Units',\r\n  },\r\n  navSites: {\r\n    id: 'app.nav.sites',\r\n    defaultMessage: 'Sites',\r\n  },\r\n  navProperties: {\r\n    id: 'app.nav.properties',\r\n    defaultMessage: 'Properties',\r\n  },\r\n  navAdQuality: {\r\n    id: 'app.nav.AdQuality',\r\n    defaultMessage: 'Ad Quality',\r\n  },\r\n  navHome: {\r\n    id: 'app.nav.home',\r\n    defaultMessage: 'Home',\r\n  },\r\n  navAdBlocks: {\r\n    id: 'app.nav.adBlocks',\r\n    defaultMessage: 'Ad Blocks',\r\n  },\r\n  navReports: {\r\n    id: 'app.nav.reports',\r\n    defaultMessage: 'Reports',\r\n  },\r\n  navAccount: {\r\n    id: 'app.nav.account',\r\n    defaultMessage: 'Account',\r\n  },\r\n  navPublisherManagement: {\r\n    id: 'app.nav.publisherManagement',\r\n    defaultMessage: 'Publisher management',\r\n  },\r\n  navAccountManagement: {\r\n    id: 'app.nav.accountManagement',\r\n    defaultMessage: 'Account management',\r\n  },\r\n  navUserManagement: {\r\n    id: 'app.nav.userManagement',\r\n    defaultMessage: 'User management',\r\n  },\r\n  actions: {\r\n    id: 'app.actions',\r\n    defaultMessage: 'Actions',\r\n  },\r\n  fetchNotificationsError: {\r\n    id: 'app.FetchNotificationsError',\r\n    defaultMessage: 'Could not fetch the backend notifications',\r\n  },\r\n  dismissNotificationsError: {\r\n    id: 'app.dismissNotificationsError',\r\n    defaultMessage: 'Could not dismiss backend notifications',\r\n  },\r\n  detailPageFooterArialLabel: {\r\n    id: 'app.detailPage.footer.arialLabel',\r\n    defaultMessage: 'Detail page footer',\r\n  },\r\n  of: {\r\n    id: 'of',\r\n    defaultMessage: 'of',\r\n  },\r\n  readMore: {\r\n    id: 'readMore',\r\n    defaultMessage: 'Read more',\r\n  },\r\n  adUnit: {\r\n    id: 'app.adunit',\r\n    defaultMessage: 'Ad unit',\r\n  },\r\n  adFilter: {\r\n    id: 'app.adfilter',\r\n    defaultMessage: 'Ad filter',\r\n  },\r\n  channel: {\r\n    id: 'app.channel',\r\n    defaultMessage: 'Channel',\r\n  },\r\n  property: {\r\n    id: 'app.property',\r\n    defaultMessage: 'Property',\r\n  },\r\n  user: {\r\n    id: 'app.user',\r\n    defaultMessage: 'User',\r\n  },\r\n  deleteNotificationSingleItem: {\r\n    id: 'app.deleteNotificationSingleItem',\r\n    defaultMessage: 'Deleted! Your {name} ',\r\n  },\r\n  deleteNotificationSingleItemCont: {\r\n    id: 'app.deleteNotificationSingleItemCont',\r\n    defaultMessage: 'has been deleted. ',\r\n  },\r\n  deleteNotificationPlural: {\r\n    id: 'app.deleteNotificationPlural',\r\n    defaultMessage: 'Deleted! Selected ',\r\n  },\r\n  deleteNotificationPluralCont: {\r\n    id: 'app.deleteNotificationPluralCont',\r\n    defaultMessage: 'have been deleted. ',\r\n  },\r\n  duplicateNotificationSingleItem: {\r\n    id: 'app.duplicateNotificationSingleItem',\r\n    defaultMessage: 'Duplicated! Your {name} ',\r\n  },\r\n  duplicateNotificationSingleItemCont: {\r\n    id: 'app.duplicateNotificationSingleItemCont',\r\n    defaultMessage: 'has been duplicated. ',\r\n  },\r\n  duplicateNotificationPlural: {\r\n    id: 'app.duplicateNotificationPlural',\r\n    defaultMessage: 'Duplicated! Selected ',\r\n  },\r\n  duplicateNotificationPluralCont: {\r\n    id: 'app.duplicateNotificationPluralCont',\r\n    defaultMessage: 'have been duplicated. ',\r\n  },\r\n  listId: {\r\n    id: 'app.listId',\r\n    defaultMessage: ' ID: {id}',\r\n  },\r\n  listIds: {\r\n    id: 'app.listIds',\r\n    defaultMessage: ' IDs: {IDs}',\r\n  },\r\n  activatedUpperCase: {\r\n    id: 'app.activatedUpperCase',\r\n    defaultMessage: 'Activated!',\r\n  },\r\n  deactivatedUpperCase: {\r\n    id: 'app.deactivatedUpperCase',\r\n    defaultMessage: 'Deactivated!',\r\n  },\r\n  activatedLowerCase: {\r\n    id: 'app.activatedLowerCase',\r\n    defaultMessage: 'activated. ',\r\n  },\r\n  deactivatedLowerCase: {\r\n    id: 'app.deactivatedLowerCase',\r\n    defaultMessage: 'deactivated. ',\r\n  },\r\n  changingStatusItemName: {\r\n    id: 'app.changingStatusItemName',\r\n    defaultMessage: ' Your {name} ',\r\n  },\r\n  changingStatusItemsSelection: {\r\n    id: 'app.changingStatusItemsSelection',\r\n    defaultMessage: ' Selected ',\r\n  },\r\n  changingStatusSingular: {\r\n    id: 'app.changingStatusSingular',\r\n    defaultMessage: ' has been ',\r\n  },\r\n  changingStatusPlural: {\r\n    id: 'app.changingStatusPlural',\r\n    defaultMessage: ' have been ',\r\n  },\r\n  failedToFetchUserScope: {\r\n    id: 'app.failedToFetchUserScope',\r\n    defaultMessage: 'Failed to fetch user scopes, please logout and re-login',\r\n  },\r\n  sessionExpiredLoginAgain: {\r\n    id: 'app.sessionExpiredLoginAgain',\r\n    defaultMessage: 'Your session has expired. Please login again to continue.',\r\n  },\r\n  contactSupport: {\r\n    id: 'app.contactSupport',\r\n    defaultMessage: 'Contact Support',\r\n  },\r\n  navInventory: {\r\n    id: 'app.nav.inventory',\r\n    defaultMessage: 'Inventory',\r\n  },\r\n  navAds: {\r\n    id: 'app.nav.ads',\r\n    defaultMessage: 'Ads',\r\n  },\r\n  organization: {\r\n    id: 'app.accountType.organization',\r\n    defaultMessage: 'Business',\r\n  },\r\n  individual: {\r\n    id: 'app.accountType.individual',\r\n    defaultMessage: 'Individual',\r\n  },\r\n});\r\n","import { Model } from '../@data';\r\nimport { LifeCycleStatus } from '../@data/store/schema/enums/LifeCycleStatus';\r\nimport { adProvidersToNames } from '../config/adProviders';\r\nimport { xandrAdProvidersToNames } from '../config/xandrAdProviders';\r\nimport { IDataGridColumn, IGridV2Column } from '../layout/GridPageV2';\r\nimport { extractPlacement } from '../pages/ad-management/AdQuality/@data/services/utility/utility';\r\nimport { getStore } from '../pages/ad-management/AdQuality/@data/store/store';\r\n\r\nexport class CSVHelper {\r\n  public static escapeStringForCSV(stringToEscape): string {\r\n    // Does some basic handling of escaped characters that could mess up CSV structure.\r\n    // Also handles some special chars that could mess with our URI-based download.\r\n    // e.g. turns quotes to double quotes, newlines into \\n, and # into %23.\r\n    return stringToEscape\r\n      ? stringToEscape.replace(/\"/g, '\"\"').replace(/\\n/g, '\\\\n').replace(/\\r/g, '\\\\r').replace(/#/g, '%23')\r\n      : stringToEscape;\r\n  }\r\n\r\n  public static extractDate(dateTimeStamp: string): string {\r\n    return dateTimeStamp ? dateTimeStamp.substring(0, 10) : '';\r\n  }\r\n\r\n  public static getBlockingStatus(isEnabled: boolean): string {\r\n    return isEnabled ? 'Applied' : 'Disabled';\r\n  }\r\n\r\n  public static getBlockRequestSource(val: number): string {\r\n    return val === 0 ? 'N/A' : getStore().active.blockRequestSourceData?.get(val)!;\r\n  }\r\n\r\n  public static getRevenue(revenue: string): string {\r\n    return '$' + revenue;\r\n  }\r\n\r\n  public static populateNull(val: string): string {\r\n    return val ? `\"${CSVHelper.escapeStringForCSV(val)}\"` : 'null';\r\n  }\r\n\r\n  public static getAdProvider(provider: string): string {\r\n    return provider ? CSVHelper.escapeStringForCSV(adProvidersToNames[provider]) : '';\r\n  }\r\n\r\n  public static getXandrAdProvider(provider: string): string {\r\n    return provider ? CSVHelper.escapeStringForCSV(xandrAdProvidersToNames[provider]) : '';\r\n  }\r\n\r\n  public static getStatus(status: string): string {\r\n    return status && status === LifeCycleStatus.Inactive ? 'BLOCKED' : '';\r\n  }\r\n\r\n  public static getPlacement(dataRow): string {\r\n    return CSVHelper.escapeStringForCSV(extractPlacement(dataRow));\r\n  }\r\n\r\n  public static getXandrPlacement(dataRow): string {\r\n    return CSVHelper.escapeStringForCSV(dataRow.locale);\r\n  }\r\n\r\n  public static downloadDataAsCSV(csvData, csvHeaders, csvFilename) {\r\n    const csvDataMarker = 'data:text/csv;charset=utf-8,';\r\n    const csvFileData = csvDataMarker + (csvHeaders ? `${csvHeaders}\\n` : '') + csvData;\r\n    const encodedCSV = encodeURI(csvFileData);\r\n    const csvLink = document.createElement('a');\r\n    csvLink.setAttribute('download', csvFilename);\r\n    csvLink.setAttribute('href', encodedCSV);\r\n    document.body.appendChild(csvLink);\r\n    csvLink.click();\r\n    document.body.removeChild(csvLink);\r\n  }\r\n\r\n  public static getCSVStrings(rowData: Model, columns: IDataGridColumn[] | IGridV2Column[]) {\r\n    // tslint:disable-next-line: no-any\r\n    const cells: any[] = [];\r\n\r\n    columns.forEach((col) => {\r\n      let cellData = col.columnName === 'blockRequestSource' ? rowData['blockRequestSourceId'] : rowData[col.columnName];\r\n\r\n      if (col.exportFunction) {\r\n        if (col.friendlyName === 'Placement') {\r\n          cellData = col.exportFunction(rowData);\r\n          cellData = `\"${CSVHelper.escapeStringForCSV(cellData)}\"`;\r\n        } else {\r\n          cellData = col.exportFunction(cellData);\r\n        }\r\n      } else if (isNaN(cellData)) {\r\n        cellData = `\"${CSVHelper.escapeStringForCSV(cellData)}\"`;\r\n      }\r\n\r\n      cells.push(cellData);\r\n    });\r\n\r\n    return cells.join(',');\r\n  }\r\n\r\n  public static getCSVStringsV2(rowData: Model, columns: IGridV2Column[]) {\r\n    // tslint:disable-next-line: no-any\r\n    const cells: any[] = [];\r\n\r\n    columns.forEach((col) => {\r\n      let cellData;\r\n\r\n      if (col.exportFunction) {\r\n        cellData = col.exportFunction(rowData);\r\n      } else if (col.fieldName) {\r\n        cellData = rowData[col.fieldName];\r\n      } else {\r\n        cellData = col.sortableValue?.(rowData);\r\n      }\r\n\r\n      if (cellData === undefined || cellData === 'undefined') {\r\n        cellData = '';\r\n      } else if (isNaN(cellData)) {\r\n        if (typeof cellData === 'object') {\r\n          cellData = cellData.toString();\r\n        }\r\n        cellData = `\"${CSVHelper.escapeStringForCSV(cellData)}\"`;\r\n      }\r\n\r\n      cells.push(cellData);\r\n    });\r\n\r\n    return cells.join(',');\r\n  }\r\n}\r\n","export function roundNumber(num, decimalPlaces: number) {\r\n  const modifier = 10 ** Math.trunc(decimalPlaces);\r\n  return Math.round((num + Number.EPSILON) * modifier) / modifier;\r\n}\r\n","import { singularize } from '.';\r\nimport { Model } from '../@data';\r\nimport messages from '../App.messages';\r\n\r\nexport function getSuccessNotification(command: string, selectedItems: Model[], entityInstance: Model, ids?: string) {\r\n  if (selectedItems.length === 1) {\r\n    const selectedItem = selectedItems[0];\r\n    const notificationSingularTextFn = (entityName, name, commandName, statusName, id) =>\r\n      `${commandName}d! Your ${!!name ? name : ''} ${entityName} has been ${statusName}d. ${entityName} ID: ${id}`;\r\n\r\n    return notificationSingularTextFn(\r\n      singularize(entityInstance.className),\r\n      selectedItem.name,\r\n      command,\r\n      command.toLocaleLowerCase(),\r\n      selectedItem.id\r\n    );\r\n  } else {\r\n    const notificationMultipleTextFn = (entityName, commandName, statusName, multipleIds) =>\r\n      `${commandName}d! Selected ${entityName} have been ${statusName}d. ${entityName} IDs: ${multipleIds}`;\r\n    if (ids) {\r\n      return notificationMultipleTextFn(entityInstance.className, command, command.toLocaleLowerCase(), ids);\r\n    }\r\n  }\r\n}\r\n\r\nexport function getSuccessNotificationDeleteItem(selectedItems: Model[], entityInstance: Model, formatMessage, ids?: string) {\r\n  if (selectedItems.length === 1) {\r\n    const selectedItem = selectedItems[0];\r\n\r\n    // return 'Deleted! Your {name} ' + 'entityName' + ' has been deleted. ' + 'entityName' + ' ID: {id}';\r\n    return (\r\n      formatMessage(messages.deleteNotificationSingleItem, { name: !!selectedItem.name ? selectedItem.name : '' }) +\r\n      formatMessage(messages[entityInstanceMapping[singularize(entityInstance.className)]]) +\r\n      formatMessage(messages.deleteNotificationSingleItemCont) +\r\n      formatMessage(messages[entityInstanceMapping[singularize(entityInstance.className)]]) +\r\n      formatMessage(messages.listId, { id: !!selectedItem.id ? selectedItem.id : '' })\r\n    );\r\n  } else if (ids) {\r\n    // return 'Deleted! Selected ' + 'entityNameS' + ' have been deleted. ' + 'entityNameS' + ' IDs: {ids}';\r\n    return (\r\n      formatMessage(messages.deleteNotificationPlural) +\r\n      formatMessage(messages[entityInstanceMapping[entityInstance.className]]) +\r\n      formatMessage(messages.deleteNotificationPluralCont) +\r\n      formatMessage(messages[entityInstanceMapping[entityInstance.className]]) +\r\n      formatMessage(messages.listId, { IDs: ids })\r\n    );\r\n  }\r\n}\r\n\r\nexport function getSuccessNotificationDuplicateItem(selectedItems: Model[], entityInstance: Model, formatMessage, ids?: string) {\r\n  if (selectedItems.length === 1) {\r\n    const selectedItem = selectedItems[0];\r\n\r\n    // return 'Duplicated! Your {name} ' + 'entityName' + ' has been duplicated. ' + 'entityName ' + 'ID: {id}';\r\n    return (\r\n      formatMessage(messages.duplicateNotificationSingleItem, { name: !!selectedItem.name ? selectedItem.name : '' }) +\r\n      formatMessage(messages[entityInstanceMapping[singularize(entityInstance.className)]]) +\r\n      formatMessage(messages.duplicateNotificationSingleItemCont) +\r\n      formatMessage(messages[entityInstanceMapping[singularize(entityInstance.className)]]) +\r\n      formatMessage(messages.listId, { id: !!selectedItem.id ? selectedItem.id : '' })\r\n    );\r\n  } else if (ids) {\r\n    // return 'Duplicated! Selected ' + 'entityNameS' + ' have been duplicated. ' + 'entityNameS ' + 'IDs: {ids}';\r\n    return (\r\n      formatMessage(messages.duplicateNotificationPlural) +\r\n      formatMessage(messages[entityInstanceMapping[entityInstance.className]]) +\r\n      formatMessage(messages.duplicateNotificationPluralCont) +\r\n      formatMessage(messages[entityInstanceMapping[entityInstance.className]]) +\r\n      formatMessage(messages.listId, { IDs: ids })\r\n    );\r\n  }\r\n}\r\n\r\nexport function getSuccessNotificationChangingStatus(\r\n  commandName,\r\n  selectedItems: Model[],\r\n  entityInstance: Model,\r\n  formatMessage,\r\n  ids?: string\r\n) {\r\n  if (selectedItems.length === 1) {\r\n    const selectedItem = selectedItems[0];\r\n\r\n    // return 'Activated/Deactivated!' + ' Your {name} ' + 'entityName ' + 'has been ' + 'activated/deleted. ' + 'entityName' + ' ID: {id}';\r\n    return (\r\n      formatMessage(messages[changingStatusMapping[commandName]]) +\r\n      formatMessage(messages.changingStatusItemName, { name: !!selectedItem.name ? selectedItem.name : '' }) +\r\n      formatMessage(messages[entityInstanceMapping[singularize(entityInstance.className)]]) +\r\n      formatMessage(messages.changingStatusSingular) +\r\n      formatMessage(messages[changingStatusMapping[commandName.toLocaleLowerCase()]]) +\r\n      formatMessage(messages[entityInstanceMapping[singularize(entityInstance.className)]]) +\r\n      formatMessage(messages.listId, { id: !!selectedItem.id ? selectedItem.id : '' })\r\n    );\r\n  } else if (ids) {\r\n    // return 'Activated/Deactivated!+ ' Selected ' + 'entityNameS ' + 'have been '+ 'activated/deleted. '+ 'entityNameS' + ' IDs: {ids}';\r\n    return (\r\n      formatMessage(messages[changingStatusMapping[commandName]]) +\r\n      formatMessage(messages.changingStatusItemsSelection) +\r\n      formatMessage(messages[entityInstanceMapping[entityInstance.className]]) +\r\n      formatMessage(messages.changingStatusPlural) +\r\n      formatMessage(messages[changingStatusMapping[commandName.toLocaleLowerCase()]]) +\r\n      formatMessage(messages[entityInstanceMapping[singularize(entityInstance.className)]]) +\r\n      formatMessage(messages.listId, { IDs: ids })\r\n    );\r\n  }\r\n}\r\n\r\nconst entityInstanceMapping = {\r\n  adunits: 'adUnits',\r\n  properties: 'properties',\r\n  users: 'users',\r\n  accounts: 'accounts',\r\n  channels: 'channels',\r\n  filters: 'adFilters',\r\n  publishers: 'publishers',\r\n  adunit: 'adUnit',\r\n  property: 'property',\r\n  user: 'user',\r\n  account: 'account',\r\n  channel: 'channel',\r\n  filter: 'adFilter',\r\n  publisher: 'publisher',\r\n};\r\n\r\nconst changingStatusMapping = {\r\n  Deactivate: 'deactivatedUpperCase',\r\n  Activate: 'activatedUpperCase',\r\n  activate: 'activatedLowerCase',\r\n  deactivate: 'deactivatedLowerCase',\r\n};\r\n","export abstract class Model {\r\n  constructor(public accessPermission: number) {}\r\n  public abstract or(this: Model, obj: Model);\r\n  public abstract get className(): string;\r\n}\r\n","import { UserRoleEntity } from '../../../services/UserRoleService';\r\nimport { Model } from './Model';\r\n\r\nexport class Account extends Model {\r\n  public className = UserRoleEntity.Account;\r\n  public publisherName: number;\r\n  public accountName: number;\r\n  public primaryContact: number;\r\n  public lanuage: number;\r\n  public countryOrRegion: number;\r\n  public currency: number;\r\n  public timeZone: number;\r\n  public paymentOption: number;\r\n  public financialStatus: number;\r\n  public paymentLifecycle: number;\r\n  public operationCostRation: number;\r\n  public accountLevelAttribute: number;\r\n  public inHousePromotion: number;\r\n  public partnerCodesforDistributionReport: number;\r\n  public formCodesforDistributionReport: number;\r\n  public startDistributionReporting: number;\r\n  public SKUs: number;\r\n\r\n  constructor(params: Account) {\r\n    super(params.accessPermission);\r\n    Object.assign(this, params);\r\n  }\r\n\r\n  public or(this: Account, account: Account) {\r\n    // tslint:disable:no-bitwise\r\n    this.accessPermission |= account.accessPermission;\r\n    this.publisherName |= account.publisherName;\r\n    this.accountName |= account.accountName;\r\n    this.primaryContact |= account.primaryContact;\r\n    this.lanuage |= account.lanuage;\r\n    this.countryOrRegion |= account.countryOrRegion;\r\n    this.currency |= account.currency;\r\n    this.timeZone |= account.timeZone;\r\n    this.paymentOption |= account.paymentOption;\r\n    this.financialStatus |= account.financialStatus;\r\n    this.paymentLifecycle |= account.paymentLifecycle;\r\n    this.operationCostRation |= account.operationCostRation;\r\n    this.accountLevelAttribute |= account.accountLevelAttribute;\r\n    this.inHousePromotion |= account.inHousePromotion;\r\n    this.partnerCodesforDistributionReport |= account.partnerCodesforDistributionReport;\r\n    this.formCodesforDistributionReport |= account.formCodesforDistributionReport;\r\n    this.startDistributionReporting |= account.startDistributionReporting;\r\n    this.SKUs |= account.SKUs;\r\n    // tslint:enable:no-bitwise\r\n  }\r\n}\r\n","import { UserRoleEntity } from '../../../services/UserRoleService';\r\nimport { Model } from './Model';\r\n\r\nexport class AdBlock extends Model {\r\n  public className = UserRoleEntity.AdBlock;\r\n  public enablePublisherBlocks: number;\r\n  public enableSiteBlocks: number;\r\n  public editDomainBlocks: number;\r\n  public editCategoryBlocks: number;\r\n\r\n  constructor(params: AdBlock) {\r\n    super(params.accessPermission);\r\n    Object.assign(this, params);\r\n  }\r\n\r\n  public or(this: AdBlock, adBlock: AdBlock) {\r\n    // tslint:disable:no-bitwise\r\n    this.accessPermission |= adBlock.accessPermission;\r\n    this.enablePublisherBlocks |= adBlock.enablePublisherBlocks;\r\n    this.enableSiteBlocks |= adBlock.enableSiteBlocks;\r\n    this.editDomainBlocks |= adBlock.editDomainBlocks;\r\n    this.editCategoryBlocks |= adBlock.editCategoryBlocks;\r\n    // tslint:enable:no-bitwise\r\n  }\r\n}\r\n","import { UserRoleEntity } from '../../../services/UserRoleService';\r\nimport { Model } from './Model';\r\n\r\nexport class AdUnit extends Model {\r\n  public className = UserRoleEntity.AdUnit;\r\n  public name: number;\r\n  public id: number;\r\n  public markeplaceClassification: number;\r\n  public businessModel: number;\r\n  public distributionPartnerCodes: number;\r\n  public channelList: number;\r\n  public servingTier: number;\r\n  public publisherGroupConfig: number;\r\n  public inhousePromotions: number;\r\n\r\n  constructor(params: AdUnit) {\r\n    super(params.accessPermission);\r\n    Object.assign(this, params);\r\n  }\r\n\r\n  public or(this: AdUnit, adunit: AdUnit) {\r\n    // tslint:disable:no-bitwise\r\n    this.accessPermission |= adunit.accessPermission;\r\n    this.businessModel |= adunit.businessModel;\r\n    this.channelList |= adunit.channelList;\r\n    this.id |= adunit.id;\r\n    this.inhousePromotions |= adunit.inhousePromotions;\r\n    this.markeplaceClassification |= adunit.markeplaceClassification;\r\n    this.distributionPartnerCodes |= adunit.distributionPartnerCodes;\r\n    this.name |= adunit.name;\r\n    this.publisherGroupConfig |= adunit.publisherGroupConfig;\r\n    this.servingTier |= adunit.servingTier;\r\n    // tslint:enable:no-bitwise\r\n  }\r\n}\r\n","import { UserRoleEntity } from '../../../services/UserRoleService';\r\nimport { Model } from './Model';\r\n\r\nexport class Channel extends Model {\r\n  public className = UserRoleEntity.Channel;\r\n  public name: number;\r\n  public id: number;\r\n  public adUnitList: number;\r\n  public adFilters: number;\r\n\r\n  constructor(params: Channel) {\r\n    super(params.accessPermission);\r\n    Object.assign(this, params);\r\n  }\r\n\r\n  public or(this: Channel, channel: Channel) {\r\n    // tslint:disable:no-bitwise\r\n    this.accessPermission |= channel.accessPermission;\r\n    this.adFilters |= channel.adFilters;\r\n    this.adUnitList |= channel.adUnitList;\r\n    this.id |= channel.id;\r\n    this.name |= channel.name;\r\n    // tslint:enable:no-bitwise\r\n  }\r\n}\r\n","import { UserRoleEntity } from '../../../services/UserRoleService';\r\nimport { Model } from './Model';\r\n\r\nexport class DropdownMenu extends Model {\r\n  public className = UserRoleEntity.DropdownMenu;\r\n  public adManagement: number;\r\n  public partnerManagment: number;\r\n  public reporting: number;\r\n\r\n  constructor(params: DropdownMenu) {\r\n    super(params.accessPermission);\r\n    Object.assign(this, params);\r\n  }\r\n\r\n  public or(this: DropdownMenu, menu: DropdownMenu) {\r\n    // tslint:disable:no-bitwise\r\n    this.accessPermission |= menu.accessPermission;\r\n    this.adManagement |= menu.adManagement;\r\n    this.partnerManagment |= menu.partnerManagment;\r\n    this.reporting |= menu.reporting;\r\n    // tslint:enable:no-bitwise\r\n  }\r\n}\r\n","import { UserRoleEntity } from '../../../services/UserRoleService';\r\nimport { Model } from './Model';\r\n\r\nexport class Filter extends Model {\r\n  public className = UserRoleEntity.Filter;\r\n  public name: number;\r\n  public id: number;\r\n  public filterType: number;\r\n  public channelList: number;\r\n  public excludedURLs: number;\r\n  public excludedAdKeywords: number;\r\n  public excludedQueryKeywords: number;\r\n  public appendOnly: number;\r\n\r\n  constructor(params: Filter) {\r\n    super(params.accessPermission);\r\n    Object.assign(this, params);\r\n  }\r\n\r\n  public or(this: Filter, filter: Filter) {\r\n    // tslint:disable:no-bitwise\r\n    this.accessPermission |= filter.accessPermission;\r\n    this.channelList |= filter.channelList;\r\n    this.excludedAdKeywords |= filter.excludedAdKeywords;\r\n    this.excludedQueryKeywords |= filter.excludedQueryKeywords;\r\n    this.excludedURLs |= filter.excludedURLs;\r\n    this.filterType |= filter.filterType;\r\n    this.id |= filter.id;\r\n    this.name |= filter.name;\r\n    this.appendOnly |= filter.appendOnly;\r\n    // tslint:enable:no-bitwise\r\n  }\r\n}\r\n","import { UserRoleEntity } from '../../../services/UserRoleService';\r\nimport { Model } from './Model';\r\n\r\nexport class NavigationMenu extends Model {\r\n  public className = UserRoleEntity.NavigationMenu;\r\n  public home: number;\r\n  public adunit: number;\r\n  public channel: number;\r\n  public adFilter: number;\r\n  public property: number;\r\n  public adblock: number;\r\n  public publisherProfile: number;\r\n  public reporting: number;\r\n  public publisher: number;\r\n  public account: number;\r\n  public user: number;\r\n  public adquality: number;\r\n  public dashboard: number;\r\n  public auditHistory: number;\r\n\r\n  constructor(params: NavigationMenu) {\r\n    super(params.accessPermission);\r\n    Object.assign(this, params);\r\n  }\r\n\r\n  public or(this: NavigationMenu, menu: NavigationMenu) {\r\n    // tslint:disable:no-bitwise\r\n    this.accessPermission |= menu.accessPermission;\r\n    this.home |= menu.home;\r\n    this.adunit |= menu.adunit;\r\n    this.channel |= menu.channel;\r\n    this.adFilter |= menu.adFilter;\r\n    this.property |= menu.property;\r\n    this.adblock |= menu.adblock;\r\n    this.publisherProfile |= menu.publisherProfile;\r\n    this.publisher |= menu.publisher;\r\n    this.account |= menu.account;\r\n    this.user |= menu.user;\r\n    this.reporting |= menu.reporting;\r\n    this.adquality |= menu.adquality;\r\n    this.dashboard |= menu.dashboard;\r\n    this.auditHistory |= menu.auditHistory;\r\n    // tslint:enable:no-bitwise\r\n  }\r\n}\r\n","import { UserRoleEntity } from '../../../services/UserRoleService';\r\nimport { Model } from './Model';\r\n\r\nexport class Property extends Model {\r\n  public className = UserRoleEntity.Property;\r\n  public name: number;\r\n  public id: number;\r\n  public websiteURL: number;\r\n  public approvalStatus: number;\r\n  public notes: number;\r\n  public attachedAdUnits: number;\r\n  public clarity: number;\r\n\r\n  constructor(params: Property) {\r\n    super(params.accessPermission);\r\n    Object.assign(this, params);\r\n  }\r\n\r\n  public or(this: Property, property: Property) {\r\n    // tslint:disable:no-bitwise\r\n    this.accessPermission |= property.accessPermission;\r\n    this.approvalStatus |= property.approvalStatus;\r\n    this.id |= property.id;\r\n    this.name |= property.name;\r\n    this.notes |= property.notes;\r\n    this.websiteURL |= property.websiteURL;\r\n    this.attachedAdUnits |= property.attachedAdUnits;\r\n    this.clarity |= property.clarity;\r\n    // tslint:enable:no-bitwise\r\n  }\r\n}\r\n","import { UserRoleEntity } from '../../../services/UserRoleService';\r\nimport { Model } from './Model';\r\n\r\nexport class Publisher extends Model {\r\n  public className = UserRoleEntity.Publisher;\r\n  public id: number;\r\n  public partner: number;\r\n  public name: number;\r\n  public networkAffiliation: number;\r\n  public address: number;\r\n  public publisherTier: number;\r\n  public overrideFeatureTier: number;\r\n  public entityLimitTier: number;\r\n  public serviceLevel: number;\r\n  public allowDistributionReporting: number;\r\n  public allowDistributionV2Reporting: number;\r\n  public allowStartDistributionReporting: number;\r\n  public allowStartDistributionContentReporting: number;\r\n  public allowSelectTierReporting: number;\r\n  public allowMediationReporting: number;\r\n  public allowMobileSearchAdUnit: number;\r\n  public allowNativeReporting: number;\r\n  public allowSyndicationReporting: number;\r\n  public allowWebAdUnit: number;\r\n  public allowPaidSearchReportingApi: number;\r\n  public allowPaidSearchReportingDashboard: number;\r\n  public allowDynamicPropertyRegistration: number;\r\n  public enableDefaultTythonV2Reporting: number;\r\n  public publisherAllowedFeaturesPropertyAutoApproved: number;\r\n  public ipRanges: number;\r\n  public newAccount: number;\r\n\r\n  constructor(params: Publisher) {\r\n    super(params.accessPermission);\r\n    Object.assign(this, params);\r\n  }\r\n\r\n  public or(this: Publisher, publisher: Publisher) {\r\n    // tslint:disable:no-bitwise\r\n    this.accessPermission |= publisher.accessPermission;\r\n    this.partner |= publisher.partner;\r\n    this.name |= publisher.name;\r\n    this.networkAffiliation |= publisher.networkAffiliation;\r\n    this.address |= publisher.address;\r\n    this.publisherTier |= publisher.publisherTier;\r\n    this.overrideFeatureTier |= publisher.overrideFeatureTier;\r\n    this.entityLimitTier |= publisher.entityLimitTier;\r\n    this.serviceLevel |= publisher.serviceLevel;\r\n    this.allowDistributionReporting |= publisher.allowDistributionReporting;\r\n    this.allowDistributionV2Reporting |= publisher.allowDistributionV2Reporting;\r\n    this.allowStartDistributionReporting |= publisher.allowStartDistributionReporting;\r\n    this.allowStartDistributionContentReporting |= publisher.allowStartDistributionContentReporting;\r\n    this.allowSelectTierReporting |= publisher.allowSelectTierReporting;\r\n    this.allowMediationReporting |= publisher.allowMediationReporting;\r\n    this.allowMobileSearchAdUnit |= publisher.allowMobileSearchAdUnit;\r\n    this.allowNativeReporting |= publisher.allowNativeReporting;\r\n    this.allowSyndicationReporting |= publisher.allowSyndicationReporting;\r\n    this.allowWebAdUnit |= publisher.allowWebAdUnit;\r\n    this.allowPaidSearchReportingApi |= publisher.allowPaidSearchReportingApi;\r\n    this.allowPaidSearchReportingDashboard |= publisher.allowPaidSearchReportingDashboard;\r\n    this.allowDynamicPropertyRegistration |= publisher.allowDynamicPropertyRegistration;\r\n    this.enableDefaultTythonV2Reporting |= publisher.enableDefaultTythonV2Reporting;\r\n    this.publisherAllowedFeaturesPropertyAutoApproved |= publisher.publisherAllowedFeaturesPropertyAutoApproved;\r\n    this.ipRanges |= publisher.ipRanges;\r\n    this.newAccount |= publisher.newAccount;\r\n    // tslint:enable:no-bitwise\r\n  }\r\n}\r\n","import { UserRoleEntity } from '../../../services/UserRoleService';\r\nimport { Model } from './Model';\r\n\r\nexport class PublisherProfileTabs extends Model {\r\n  public className = UserRoleEntity.PublisherProfileTabs;\r\n  public profile: number;\r\n  public userManagement: number;\r\n  public payments: number;\r\n  public settings: number;\r\n\r\n  constructor(params: PublisherProfileTabs) {\r\n    super(params.accessPermission);\r\n    Object.assign(this, params);\r\n  }\r\n\r\n  public or(this: PublisherProfileTabs, publisherProfileTabs: PublisherProfileTabs) {\r\n    // tslint:disable:no-bitwise\r\n    this.accessPermission |= publisherProfileTabs.accessPermission;\r\n    this.profile |= publisherProfileTabs.profile;\r\n    this.userManagement |= publisherProfileTabs.userManagement;\r\n    this.payments |= publisherProfileTabs.payments;\r\n    this.settings |= publisherProfileTabs.settings;\r\n    // tslint:enable:no-bitwise\r\n  }\r\n}\r\n","import { UserRoleEntity } from '../../../services/UserRoleService';\r\nimport { Model } from './Model';\r\n\r\nexport class PublisherSettings extends Model {\r\n  public className = UserRoleEntity.PublisherSettings;\r\n  public mediation: number;\r\n  public publisherPreferences: number;\r\n  public publisherDelete: number;\r\n\r\n  constructor(params: PublisherSettings) {\r\n    super(params.accessPermission);\r\n    Object.assign(this, params);\r\n  }\r\n\r\n  public or(this: PublisherSettings, publisherSettings: PublisherSettings) {\r\n    // tslint:disable:no-bitwise\r\n    this.accessPermission |= publisherSettings.accessPermission;\r\n    this.mediation |= publisherSettings.mediation;\r\n    this.publisherPreferences |= publisherSettings.publisherPreferences;\r\n    this.publisherDelete |= publisherSettings.publisherDelete;\r\n    // tslint:enable:no-bitwise\r\n  }\r\n}\r\n","import { UserRoleEntity } from '../../../services/UserRoleService';\r\nimport { Model } from './Model';\r\n\r\nexport class User extends Model {\r\n  public className = UserRoleEntity.User;\r\n  public userFirstName: number;\r\n  public userLastName: number;\r\n  public userEmail: number;\r\n  public userLanguage: number;\r\n  public userAccountRole: number;\r\n  public userInviteFirstName: number;\r\n  public userInviteLastName: number;\r\n  public userInviteEmail: number;\r\n  public userInviteLanguage: number;\r\n  public userInviteAccountRole: number;\r\n\r\n  constructor(params: User) {\r\n    super(params.accessPermission);\r\n    Object.assign(this, params);\r\n  }\r\n\r\n  public or(this: User, user: User) {\r\n    // tslint:disable:no-bitwise\r\n    this.accessPermission |= user.accessPermission;\r\n    this.userFirstName |= user.userFirstName;\r\n    this.userLastName |= user.userLastName;\r\n    this.userEmail |= user.userEmail;\r\n    this.userLanguage |= user.userLanguage;\r\n    this.userAccountRole |= user.userAccountRole;\r\n    this.userInviteFirstName |= user.userInviteFirstName;\r\n    this.userInviteLastName |= user.userInviteLastName;\r\n    this.userInviteEmail |= user.userInviteEmail;\r\n    this.userInviteLanguage |= user.userInviteLanguage;\r\n    this.userInviteAccountRole |= user.userInviteAccountRole;\r\n    // tslint:enable:no-bitwise\r\n  }\r\n}\r\n","import { UserRoleEntity } from '../../../services/UserRoleService';\r\nimport { Model } from './Model';\r\n\r\nexport class UserSettings extends Model {\r\n  public className = UserRoleEntity.UserSettings;\r\n  public systemPreferences: number;\r\n  public billingAlerts: number;\r\n  public servingStatus: number;\r\n  public profileReview: number;\r\n  public invitedUsers: number;\r\n  public userDelete: number;\r\n\r\n  constructor(params: UserSettings) {\r\n    super(params.accessPermission);\r\n    Object.assign(this, params);\r\n  }\r\n\r\n  public or(this: UserSettings, userSettings: UserSettings) {\r\n    // tslint:disable:no-bitwise\r\n    this.accessPermission |= userSettings.accessPermission;\r\n    this.systemPreferences |= userSettings.systemPreferences;\r\n    this.billingAlerts |= userSettings.billingAlerts;\r\n    this.servingStatus |= userSettings.servingStatus;\r\n    this.profileReview |= userSettings.profileReview;\r\n    this.invitedUsers |= userSettings.invitedUsers;\r\n    this.userDelete |= userSettings.userDelete;\r\n    // tslint:enable:no-bitwise\r\n  }\r\n}\r\n","import { MessageBarType } from '@fluentui/react';\r\nimport {\r\n  handleApiErrors,\r\n  onAccessiblePublisherListChanged,\r\n  onDefaultPublisherSet,\r\n  onNotificationChanged,\r\n  onUserContextChanged,\r\n  UserType,\r\n} from '..';\r\nimport { Log } from '../../../logging/src';\r\nimport messages from '../../App.messages';\r\nimport { uiConfig } from '../../config/ui.config';\r\nimport { DEFAULT_PUBLISHER_CACHE_KEY } from '../../constants/AppConstants';\r\nimport { isLocationPubCenter } from '../../utils';\r\nimport { onLoadingChanged, onLoadingSetting, onLoadingWaiting } from '../actions';\r\nimport { UserContext } from '../store/schema';\r\nimport { IUserRoleScope } from '../store/schema/interfaces/IUserRoleData';\r\nimport { Account } from '../store/schema/userrolemodels/Account';\r\nimport { AdBlock } from '../store/schema/userrolemodels/AdBlock';\r\nimport { AdUnit } from '../store/schema/userrolemodels/AdUnit';\r\nimport { Channel } from '../store/schema/userrolemodels/Channel';\r\nimport { DropdownMenu } from '../store/schema/userrolemodels/DropdownMenu';\r\nimport { Filter } from '../store/schema/userrolemodels/Filter';\r\nimport { Model } from '../store/schema/userrolemodels/Model';\r\nimport { NavigationMenu } from '../store/schema/userrolemodels/NavigationMenu';\r\nimport { Property } from '../store/schema/userrolemodels/Property';\r\nimport { Publisher } from '../store/schema/userrolemodels/Publisher';\r\nimport { PublisherProfileTabs } from '../store/schema/userrolemodels/PublisherProfileTabs';\r\nimport { PublisherSettings } from '../store/schema/userrolemodels/PublisherSettings';\r\nimport { User } from '../store/schema/userrolemodels/User';\r\nimport { UserRoleResponse } from '../store/schema/userrolemodels/UserRoleResponse';\r\nimport { UserSettings } from '../store/schema/userrolemodels/UserSettings';\r\nimport { isTythonSelfServeUser } from '../utils/checkUserType';\r\nimport { buildRequestHeadersWithAuthToken } from '../utils/requestUtils';\r\nexport const userRoleKey = '_userRole';\r\nexport const completeAccess = 0b1111;\r\n\r\nexport enum UserRoleEntity {\r\n  AdUnit = 'AdUnit',\r\n  Channel = 'Channel',\r\n  Filter = 'Filter',\r\n  Property = 'Property',\r\n  Publisher = 'Publisher',\r\n  Account = 'Account',\r\n  User = 'User',\r\n  DropdownMenu = 'DropdownMenu',\r\n  NavigationMenu = 'NavigationMenu',\r\n  PublisherProfileTabs = 'PublisherProfileTabs',\r\n  PublisherSettings = 'PublisherSettings',\r\n  UserSettings = 'UserSettings',\r\n  AdBlock = 'AdBlock',\r\n}\r\n\r\n/* The rolePermissions map has the details of CRUD permissions of entities(i.e. Adunit, Channel etc.)\r\n   for different user roles. Key of this map is user role id and value of the map is list of entities where\r\n   each entity has accessPermission number field whose 4 LSBs represents CRUD permissions :-\r\n   1st bit - Permission to delete the entity.\r\n   2nd bit - Permission to update the entity.\r\n   3rd bit - Permission to read the entity.\r\n   4th bit - Permission to create the entity.\r\n\r\n   Similarly, each entity has its own fields which has their own CRUD permission details.\r\n*/\r\nconst rolePermissions = new Map<number, Model[]>([\r\n  [\r\n    // PC Inventory Management\r\n    169,\r\n    [\r\n      new DropdownMenu({\r\n        adManagement: 0b1111,\r\n        partnerManagment: 0b1111,\r\n        reporting: 0b1111,\r\n      } as DropdownMenu),\r\n      new Publisher({\r\n        id: 0b1111,\r\n        accessPermission: 0b1111,\r\n        partner: 0b1111,\r\n        name: 0b1111,\r\n        networkAffiliation: 0b1111,\r\n        address: 0b1111,\r\n        publisherTier: 0b1111,\r\n        overrideFeatureTier: 0b1111,\r\n        entityLimitTier: 0b1111,\r\n        serviceLevel: 0b1111,\r\n        allowDistributionReporting: 0b1111,\r\n        allowDistributionV2Reporting: 0b1111,\r\n        allowStartDistributionReporting: 0b1111,\r\n        allowStartDistributionContentReporting: 0b1111,\r\n        allowSelectTierReporting: 0b1111,\r\n        allowMediationReporting: 0b1111,\r\n        allowMobileSearchAdUnit: 0b1111,\r\n        allowNativeReporting: 0b1111,\r\n        allowSyndicationReporting: 0b1111,\r\n        allowWebAdUnit: 0b1111,\r\n        allowPaidSearchReportingApi: 0b1111,\r\n        allowPaidSearchReportingDashboard: 0b1111,\r\n        allowDynamicPropertyRegistration: 0b0010,\r\n        enableDefaultTythonV2Reporting: 0b1111,\r\n        publisherAllowedFeaturesPropertyAutoApproved: 0b1111,\r\n        ipRanges: 0b1111,\r\n        newAccount: 0b1111,\r\n      } as Publisher),\r\n      new Account({\r\n        accessPermission: 0b1111,\r\n        publisherName: 0b1111,\r\n        accountName: 0b1111,\r\n        primaryContact: 0b1111,\r\n        lanuage: 0b1111,\r\n        countryOrRegion: 0b1111,\r\n        currency: 0b1111,\r\n        timeZone: 0b1111,\r\n        paymentOption: 0b1111,\r\n        financialStatus: 0b1111,\r\n        paymentLifecycle: 0b1111,\r\n        operationCostRation: 0b1111,\r\n        accountLevelAttribute: 0b1111,\r\n        inHousePromotion: 0b1111,\r\n        partnerCodesforDistributionReport: 0b1111,\r\n        formCodesforDistributionReport: 0b1111,\r\n        startDistributionReporting: 0b1111,\r\n        SKUs: 0b1111,\r\n      } as Account),\r\n      new User({\r\n        accessPermission: 0b1111,\r\n        userFirstName: 0b1111,\r\n        userLastName: 0b1111,\r\n        userEmail: 0b1111,\r\n        userAccountRole: 0b1111,\r\n        userLanguage: 0b1111,\r\n        userInviteFirstName: 0b1111,\r\n        userInviteLastName: 0b1111,\r\n        userInviteEmail: 0b1111,\r\n        userInviteLanguage: 0b1111,\r\n        userInviteAccountRole: 0b1111,\r\n      } as User),\r\n      new AdUnit({\r\n        accessPermission: 0b1111,\r\n        name: 0b1111,\r\n        id: 0b0101,\r\n        markeplaceClassification: 0b1111,\r\n        businessModel: 0b1111,\r\n        channelList: 0b1111,\r\n        servingTier: 0b1111,\r\n        publisherGroupConfig: 0b1111,\r\n        inhousePromotions: 0b1111,\r\n      } as AdUnit),\r\n      new Channel({\r\n        accessPermission: 0b1111,\r\n        name: 0b1111,\r\n        id: 0b0101,\r\n        adFilters: 0b1111,\r\n        adUnitList: 0b1111,\r\n      } as Channel),\r\n      new Property({\r\n        accessPermission: 0b1111,\r\n        name: 0b1111,\r\n        id: 0b0101,\r\n        websiteURL: 0b1101,\r\n        approvalStatus: 0b1111,\r\n        notes: 0b1111,\r\n        attachedAdUnits: 0b1111,\r\n        clarity: 0b1111,\r\n      } as Property),\r\n      new Filter({\r\n        accessPermission: 0b1111,\r\n        name: 0b1111,\r\n        id: 0b0101,\r\n        filterType: 0b1101,\r\n        channelList: 0b1111,\r\n        excludedAdKeywords: 0b1111,\r\n        excludedQueryKeywords: 0b1111,\r\n        excludedURLs: 0b1111,\r\n      } as Filter),\r\n    ],\r\n  ],\r\n  [\r\n    // PC Support\r\n    170,\r\n    [\r\n      new Publisher({\r\n        id: 0b1111,\r\n        accessPermission: 0b1111,\r\n        partner: 0b1111,\r\n        name: 0b1111,\r\n        networkAffiliation: 0b1111,\r\n        address: 0b1111,\r\n        publisherTier: 0b1111,\r\n        overrideFeatureTier: 0b1111,\r\n        entityLimitTier: 0b1111,\r\n        serviceLevel: 0b1111,\r\n        allowDistributionReporting: 0b1111,\r\n        allowDistributionV2Reporting: 0b1111,\r\n        allowStartDistributionReporting: 0b1111,\r\n        allowStartDistributionContentReporting: 0b1111,\r\n        allowSelectTierReporting: 0b1111,\r\n        allowMediationReporting: 0b1111,\r\n        allowMobileSearchAdUnit: 0b1111,\r\n        allowNativeReporting: 0b1111,\r\n        allowSyndicationReporting: 0b1111,\r\n        allowWebAdUnit: 0b0100,\r\n        allowPaidSearchReportingApi: 0b1111,\r\n        allowPaidSearchReportingDashboard: 0b1111,\r\n        allowDynamicPropertyRegistration: 0b0100,\r\n        enableDefaultTythonV2Reporting: 0b1111,\r\n        publisherAllowedFeaturesPropertyAutoApproved: 0b1111,\r\n        ipRanges: 0b1111,\r\n        newAccount: 0b1111,\r\n      } as Publisher),\r\n      new Account({\r\n        accessPermission: 0b1111,\r\n        publisherName: 0b1111,\r\n        accountName: 0b1111,\r\n        primaryContact: 0b1111,\r\n        lanuage: 0b1111,\r\n        countryOrRegion: 0b1111,\r\n        currency: 0b1111,\r\n        timeZone: 0b1111,\r\n        paymentOption: 0b1111,\r\n        financialStatus: 0b1111,\r\n        paymentLifecycle: 0b1111,\r\n        operationCostRation: 0b1111,\r\n        accountLevelAttribute: 0b1111,\r\n        inHousePromotion: 0b1111,\r\n        partnerCodesforDistributionReport: 0b1111,\r\n        formCodesforDistributionReport: 0b1111,\r\n        startDistributionReporting: 0b1111,\r\n        SKUs: 0b1111,\r\n      } as Account),\r\n      new User({\r\n        accessPermission: 0b1111,\r\n        userFirstName: 0b1111,\r\n        userLastName: 0b1111,\r\n        userEmail: 0b1111,\r\n        userAccountRole: 0b1111,\r\n        userLanguage: 0b1111,\r\n        userInviteFirstName: 0b1111,\r\n        userInviteLastName: 0b1111,\r\n        userInviteEmail: 0b1111,\r\n        userInviteLanguage: 0b1111,\r\n        userInviteAccountRole: 0b1111,\r\n      } as User),\r\n      new AdUnit({\r\n        accessPermission: 0b1111,\r\n        name: 0b1111,\r\n        id: 0b0101,\r\n        markeplaceClassification: 0b1111,\r\n        businessModel: 0b1111,\r\n        distributionPartnerCodes: 0b1111,\r\n        channelList: 0b1111,\r\n        servingTier: 0b1111,\r\n        publisherGroupConfig: 0b1111,\r\n        inhousePromotions: 0b1111,\r\n      } as AdUnit),\r\n      new Channel({\r\n        accessPermission: 0b1111,\r\n        name: 0b1111,\r\n        id: 0b0101,\r\n        adFilters: 0b1111,\r\n        adUnitList: 0b1111,\r\n      } as Channel),\r\n      new Property({\r\n        accessPermission: 0b1111,\r\n        name: 0b1111,\r\n        id: 0b0101,\r\n        websiteURL: 0b1101,\r\n        approvalStatus: 0b1111,\r\n        notes: 0b1111,\r\n        attachedAdUnits: 0b1111,\r\n        clarity: 0b1111,\r\n      } as Property),\r\n      new Filter({\r\n        accessPermission: 0b1111,\r\n        name: 0b1111,\r\n        id: 0b0101,\r\n        filterType: 0b1101,\r\n        channelList: 0b1111,\r\n        excludedAdKeywords: 0b1111,\r\n        excludedQueryKeywords: 0b1111,\r\n        excludedURLs: 0b1111,\r\n      } as Filter),\r\n    ],\r\n  ],\r\n  [\r\n    // PC Finance Ops\r\n    172,\r\n    [\r\n      new Publisher({\r\n        id: 0b1111,\r\n        accessPermission: 0b1111,\r\n        partner: 0b1111,\r\n        name: 0b1111,\r\n        networkAffiliation: 0b1111,\r\n        address: 0b1111,\r\n        publisherTier: 0b1111,\r\n        overrideFeatureTier: 0b1111,\r\n        entityLimitTier: 0b1111,\r\n        serviceLevel: 0b1111,\r\n        allowDistributionReporting: 0b1111,\r\n        allowDistributionV2Reporting: 0b1111,\r\n        allowStartDistributionReporting: 0b1111,\r\n        allowStartDistributionContentReporting: 0b1111,\r\n        allowSelectTierReporting: 0b1111,\r\n        allowMediationReporting: 0b1111,\r\n        allowMobileSearchAdUnit: 0b1111,\r\n        allowNativeReporting: 0b1111,\r\n        allowSyndicationReporting: 0b1111,\r\n        allowWebAdUnit: 0b1111,\r\n        allowPaidSearchReportingApi: 0b1111,\r\n        allowPaidSearchReportingDashboard: 0b1111,\r\n        allowDynamicPropertyRegistration: 0b1111,\r\n        enableDefaultTythonV2Reporting: 0b1111,\r\n        publisherAllowedFeaturesPropertyAutoApproved: 0b1111,\r\n        ipRanges: 0b1111,\r\n        newAccount: 0b1111,\r\n      } as Publisher),\r\n      new Account({\r\n        accessPermission: 0b1111,\r\n        publisherName: 0b1111,\r\n        accountName: 0b1111,\r\n        primaryContact: 0b1111,\r\n        lanuage: 0b1111,\r\n        countryOrRegion: 0b1111,\r\n        currency: 0b1111,\r\n        timeZone: 0b1111,\r\n        paymentOption: 0b1111,\r\n        financialStatus: 0b1111,\r\n        paymentLifecycle: 0b1111,\r\n        operationCostRation: 0b1111,\r\n        accountLevelAttribute: 0b1111,\r\n        inHousePromotion: 0b1111,\r\n        partnerCodesforDistributionReport: 0b1111,\r\n        formCodesforDistributionReport: 0b1111,\r\n        startDistributionReporting: 0b1111,\r\n        SKUs: 0b1111,\r\n      } as Account),\r\n      new User({\r\n        accessPermission: 0b1111,\r\n        userFirstName: 0b1111,\r\n        userLastName: 0b1111,\r\n        userEmail: 0b1111,\r\n        userAccountRole: 0b1111,\r\n        userLanguage: 0b1111,\r\n        userInviteFirstName: 0b1111,\r\n        userInviteLastName: 0b1111,\r\n        userInviteEmail: 0b1111,\r\n        userInviteLanguage: 0b1111,\r\n        userInviteAccountRole: 0b1111,\r\n      } as User),\r\n      new AdUnit({\r\n        accessPermission: 0b1111,\r\n        name: 0b1111,\r\n        id: 0b0101,\r\n        markeplaceClassification: 0b1111,\r\n        businessModel: 0b1111,\r\n        channelList: 0b1111,\r\n        servingTier: 0b1111,\r\n        publisherGroupConfig: 0b1111,\r\n        inhousePromotions: 0b1111,\r\n      } as AdUnit),\r\n      new Channel({\r\n        accessPermission: 0b1111,\r\n        name: 0b1111,\r\n        id: 0b0101,\r\n        adFilters: 0b1111,\r\n        adUnitList: 0b1111,\r\n      } as Channel),\r\n      new Property({\r\n        accessPermission: 0b1111,\r\n        name: 0b1111,\r\n        id: 0b0101,\r\n        websiteURL: 0b1101,\r\n        approvalStatus: 0b1111,\r\n        notes: 0b1111,\r\n        attachedAdUnits: 0b1111,\r\n        clarity: 0b1111,\r\n      } as Property),\r\n      new Filter({\r\n        accessPermission: 0b1111,\r\n        name: 0b1111,\r\n        id: 0b0101,\r\n        filterType: 0b1101,\r\n        channelList: 0b1111,\r\n        excludedAdKeywords: 0b1111,\r\n        excludedQueryKeywords: 0b1111,\r\n        excludedURLs: 0b1111,\r\n      } as Filter),\r\n    ],\r\n  ],\r\n  [\r\n    // Verizon Media\r\n    125,\r\n    [\r\n      new Publisher({\r\n        id: 0b0100,\r\n        accessPermission: 0b1111,\r\n        partner: 0b0100,\r\n        name: 0b1111,\r\n        networkAffiliation: 0b1111,\r\n        address: 0b1111,\r\n        publisherTier: 0b0000,\r\n        overrideFeatureTier: 0b0000,\r\n        entityLimitTier: 0b0000,\r\n        serviceLevel: 0b0000,\r\n        allowDistributionReporting: 0b0000,\r\n        allowDistributionV2Reporting: 0b0000,\r\n        allowStartDistributionReporting: 0b0000,\r\n        allowStartDistributionContentReporting: 0b0000,\r\n        allowSelectTierReporting: 0b0000,\r\n        allowMediationReporting: 0b0000,\r\n        allowMobileSearchAdUnit: 0b0000,\r\n        allowNativeReporting: 0b0000,\r\n        allowSyndicationReporting: 0b0000,\r\n        allowWebAdUnit: 0b0000,\r\n        allowPaidSearchReportingApi: 0b0000,\r\n        allowPaidSearchReportingDashboard: 0b0000,\r\n        allowDynamicPropertyRegistration: 0b1111,\r\n        enableDefaultTythonV2Reporting: 0b0000,\r\n        publisherAllowedFeaturesPropertyAutoApproved: 0b0000,\r\n        ipRanges: 0b0000,\r\n        newAccount: 0b1111,\r\n      } as Publisher),\r\n      new Account({\r\n        accessPermission: 0b1111,\r\n        publisherName: 0b1111,\r\n        accountName: 0b1111,\r\n        primaryContact: 0b1111,\r\n        lanuage: 0b1111,\r\n        countryOrRegion: 0b1111,\r\n        currency: 0b1111,\r\n        timeZone: 0b1111,\r\n        paymentOption: 0b0000,\r\n        financialStatus: 0b0000,\r\n        paymentLifecycle: 0b0000,\r\n        operationCostRation: 0b0000,\r\n        accountLevelAttribute: 0b0000,\r\n        inHousePromotion: 0b0000,\r\n        partnerCodesforDistributionReport: 0b0000,\r\n        formCodesforDistributionReport: 0b0000,\r\n        startDistributionReporting: 0b0000,\r\n        SKUs: 0b0000,\r\n      } as Account),\r\n      new User({\r\n        accessPermission: 0b0000,\r\n        userFirstName: 0b0000,\r\n        userLastName: 0b0000,\r\n        userEmail: 0b0000,\r\n        userAccountRole: 0b0000,\r\n        userLanguage: 0b0000,\r\n        userInviteFirstName: 0b0000,\r\n        userInviteLastName: 0b0000,\r\n        userInviteEmail: 0b0000,\r\n        userInviteLanguage: 0b0000,\r\n        userInviteAccountRole: 0b0000,\r\n      } as User),\r\n      new AdUnit({\r\n        accessPermission: 0b1111,\r\n        name: 0b1111,\r\n        id: 0b0101,\r\n        markeplaceClassification: 0b1111,\r\n        businessModel: 0b1111,\r\n        channelList: 0b1111,\r\n        servingTier: 0b0000,\r\n        publisherGroupConfig: 0b1111,\r\n        inhousePromotions: 0b0000,\r\n      } as AdUnit),\r\n      new Channel({\r\n        accessPermission: 0b1111,\r\n        name: 0b1111,\r\n        id: 0b0101,\r\n        adFilters: 0b1111,\r\n        adUnitList: 0b1111,\r\n      } as Channel),\r\n      new Property({\r\n        accessPermission: 0b1111,\r\n        name: 0b1111,\r\n        id: 0b0101,\r\n        websiteURL: 0b1101,\r\n        approvalStatus: 0b1111,\r\n        notes: 0b1111,\r\n        attachedAdUnits: 0b1111,\r\n        clarity: 0b1111,\r\n      } as Property),\r\n      new Filter({\r\n        accessPermission: 0b1111,\r\n        name: 0b1111,\r\n        id: 0b0101,\r\n        filterType: 0b1101,\r\n        channelList: 0b1111,\r\n        excludedAdKeywords: 0b1111,\r\n        excludedQueryKeywords: 0b1111,\r\n        excludedURLs: 0b1111,\r\n      } as Filter),\r\n    ],\r\n  ],\r\n  [\r\n    // Verizon Media\r\n    156,\r\n    [\r\n      new AdUnit({\r\n        accessPermission: 0b1111,\r\n        name: 0b1111,\r\n        id: 0b0101,\r\n        markeplaceClassification: 0b1111,\r\n        businessModel: 0b1111,\r\n        channelList: 0b1111,\r\n        servingTier: 0b0000,\r\n        publisherGroupConfig: 0b1111,\r\n        inhousePromotions: 0b0000,\r\n      } as AdUnit),\r\n      new Channel({\r\n        accessPermission: 0b1111,\r\n        name: 0b1111,\r\n        id: 0b0101,\r\n        adFilters: 0b1111,\r\n        adUnitList: 0b1111,\r\n      } as Channel),\r\n      new Property({\r\n        accessPermission: 0b1111,\r\n        name: 0b1111,\r\n        id: 0b0101,\r\n        websiteURL: 0b1101,\r\n        approvalStatus: 0b1111,\r\n        notes: 0b1111,\r\n        attachedAdUnits: 0b1111,\r\n        clarity: 0b1111,\r\n      } as Property),\r\n      new Filter({\r\n        accessPermission: 0b1111,\r\n        name: 0b1111,\r\n        id: 0b0101,\r\n        filterType: 0b1101,\r\n        channelList: 0b1111,\r\n        excludedAdKeywords: 0b1111,\r\n        excludedQueryKeywords: 0b1111,\r\n        excludedURLs: 0b1111,\r\n      } as Filter),\r\n    ],\r\n  ],\r\n  [\r\n    // PC Guest\r\n    171,\r\n    [\r\n      new Publisher({\r\n        id: 0b0100,\r\n        accessPermission: 0b0100,\r\n        partner: 0b0100,\r\n        name: 0b0100,\r\n        networkAffiliation: 0b0100,\r\n        address: 0b0100,\r\n        publisherTier: 0b0100,\r\n        overrideFeatureTier: 0b0100,\r\n        entityLimitTier: 0b0100,\r\n        serviceLevel: 0b0100,\r\n        allowDistributionReporting: 0b0100,\r\n        allowDistributionV2Reporting: 0b0100,\r\n        allowStartDistributionReporting: 0b0100,\r\n        allowStartDistributionContentReporting: 0b0100,\r\n        allowSelectTierReporting: 0b0100,\r\n        allowMediationReporting: 0b0100,\r\n        allowMobileSearchAdUnit: 0b0100,\r\n        allowNativeReporting: 0b0100,\r\n        allowSyndicationReporting: 0b0100,\r\n        allowWebAdUnit: 0b0100,\r\n        allowPaidSearchReportingApi: 0b0100,\r\n        allowPaidSearchReportingDashboard: 0b0100,\r\n        allowDynamicPropertyRegistration: 0b0100,\r\n        enableDefaultTythonV2Reporting: 0b0100,\r\n        publisherAllowedFeaturesPropertyAutoApproved: 0b0100,\r\n        ipRanges: 0b0100,\r\n        newAccount: 0b0100,\r\n      } as Publisher),\r\n      new Account({\r\n        publisherName: 0b0100,\r\n        accountName: 0b0100,\r\n        primaryContact: 0b0100,\r\n        lanuage: 0b0100,\r\n        countryOrRegion: 0b0100,\r\n        currency: 0b0100,\r\n        timeZone: 0b0100,\r\n        paymentOption: 0b0100,\r\n        financialStatus: 0b0100,\r\n        paymentLifecycle: 0b0100,\r\n        operationCostRation: 0b0100,\r\n        accountLevelAttribute: 0b0100,\r\n        inHousePromotion: 0b0100,\r\n        partnerCodesforDistributionReport: 0b0100,\r\n        formCodesforDistributionReport: 0b0100,\r\n        startDistributionReporting: 0b0100,\r\n        SKUs: 0b0100,\r\n      } as Account),\r\n      new User({\r\n        accessPermission: 0b0100,\r\n        userFirstName: 0b0100,\r\n        userLastName: 0b0100,\r\n        userEmail: 0b0100,\r\n        userAccountRole: 0b0100,\r\n        userLanguage: 0b0100,\r\n        userInviteFirstName: 0b0100,\r\n        userInviteLastName: 0b0100,\r\n        userInviteEmail: 0b0100,\r\n        userInviteLanguage: 0b0100,\r\n        userInviteAccountRole: 0b0100,\r\n      } as User),\r\n      new AdUnit({\r\n        accessPermission: 0b0100,\r\n        name: 0b0100,\r\n        id: 0b0100,\r\n        markeplaceClassification: 0b0100,\r\n        businessModel: 0b0100,\r\n        channelList: 0b0100,\r\n        servingTier: 0b0000,\r\n        publisherGroupConfig: 0b0100,\r\n        inhousePromotions: 0b0100,\r\n      } as AdUnit),\r\n      new Channel({\r\n        accessPermission: 0b0100,\r\n        name: 0b0100,\r\n        id: 0b0100,\r\n        adFilters: 0b0100,\r\n        adUnitList: 0b0100,\r\n      } as Channel),\r\n      new Property({\r\n        accessPermission: 0b0100,\r\n        name: 0b0100,\r\n        id: 0b0100,\r\n        websiteURL: 0b0100,\r\n        approvalStatus: 0b0100,\r\n        notes: 0b0100,\r\n        clarity: 0b0100,\r\n      } as Property),\r\n      new Filter({\r\n        accessPermission: 0b0100,\r\n        name: 0b0100,\r\n        id: 0b0100,\r\n        filterType: 0b0100,\r\n        channelList: 0b0100,\r\n        excludedAdKeywords: 0b0100,\r\n        excludedQueryKeywords: 0b0100,\r\n        excludedURLs: 0b0100,\r\n      } as Filter),\r\n    ],\r\n  ],\r\n]);\r\n\r\nexport const tythonUserRolePermissions = new Map<number, Model[]>([\r\n  [\r\n    // Super admin\r\n    41,\r\n    [\r\n      new DropdownMenu({\r\n        adManagement: 0b1111,\r\n        partnerManagment: 0b0000,\r\n        reporting: 0b0000,\r\n      } as DropdownMenu),\r\n      new NavigationMenu({\r\n        home: 0b1111,\r\n        adunit: 0b1111,\r\n        channel: 0b0000,\r\n        adFilter: 0b0000,\r\n        property: 0b1111,\r\n        adblock: 0b1111,\r\n        publisherProfile: 0b1111,\r\n        reporting: 0b1111,\r\n        // tython users should not be able to access these pages\r\n        publisher: 0b0000,\r\n        account: 0b0000,\r\n        user: 0b0000,\r\n        adquality: 0b0000,\r\n        dashboard: 0b01111,\r\n        auditHistory: 0b1111,\r\n      } as NavigationMenu),\r\n      new Publisher({\r\n        id: 0b0101,\r\n        accessPermission: 0b1111,\r\n        partner: 0b0000,\r\n        name: 0b0000,\r\n        networkAffiliation: 0b0000,\r\n        address: 0b1111,\r\n        publisherTier: 0b0000,\r\n        overrideFeatureTier: 0b0000,\r\n        entityLimitTier: 0b0000,\r\n        serviceLevel: 0b0000,\r\n        allowDistributionReporting: 0b0000,\r\n        allowDistributionV2Reporting: 0b0000,\r\n        allowStartDistributionReporting: 0b0000,\r\n        allowStartDistributionContentReporting: 0b0000,\r\n        allowSelectTierReporting: 0b0000,\r\n        allowMediationReporting: 0b0000,\r\n        allowMobileSearchAdUnit: 0b0000,\r\n        allowNativeReporting: 0b0000,\r\n        allowSyndicationReporting: 0b0000,\r\n        allowWebAdUnit: 0b0000,\r\n        allowPaidSearchReportingApi: 0b0000,\r\n        allowPaidSearchReportingDashboard: 0b1111,\r\n        allowDynamicPropertyRegistration: 0b0000,\r\n        enableDefaultTythonV2Reporting: 0b0000,\r\n        publisherAllowedFeaturesPropertyAutoApproved: 0b0000,\r\n        ipRanges: 0b0000,\r\n        // Tython self-serve publishers cannot access/create accounts\r\n        newAccount: 0b0000,\r\n      } as Publisher),\r\n      new Account({\r\n        accessPermission: 0b0000,\r\n        publisherName: 0b0000,\r\n        accountName: 0b0000,\r\n        primaryContact: 0b0000,\r\n        lanuage: 0b0000,\r\n        countryOrRegion: 0b0000,\r\n        currency: 0b0000,\r\n        timeZone: 0b0000,\r\n        paymentOption: 0b0000,\r\n        financialStatus: 0b0000,\r\n        paymentLifecycle: 0b0000,\r\n        operationCostRation: 0b0000,\r\n        accountLevelAttribute: 0b0000,\r\n        inHousePromotion: 0b0000,\r\n        partnerCodesforDistributionReport: 0b0000,\r\n        formCodesforDistributionReport: 0b0000,\r\n        startDistributionReporting: 0b0000,\r\n        SKUs: 0b0000,\r\n      } as Account),\r\n      new User({\r\n        accessPermission: 0b1111,\r\n        userFirstName: 0b1111,\r\n        userLastName: 0b1111,\r\n        userEmail: 0b1111,\r\n        userAccountRole: 0b1111,\r\n        userLanguage: 0b1111,\r\n        userInviteFirstName: 0b1111,\r\n        userInviteLastName: 0b1111,\r\n        userInviteEmail: 0b1111,\r\n        userInviteLanguage: 0b1111,\r\n        userInviteAccountRole: 0b1111,\r\n      } as User),\r\n      new AdUnit({\r\n        accessPermission: 0b1111,\r\n        name: 0b1111,\r\n        id: 0b0101,\r\n        markeplaceClassification: 0b0000,\r\n        businessModel: 0b0000,\r\n        distributionPartnerCodes: 0b1111,\r\n        channelList: 0b0000,\r\n        servingTier: 0b0000,\r\n        publisherGroupConfig: 0b0000,\r\n        inhousePromotions: 0b0000,\r\n      } as AdUnit),\r\n      new Channel({\r\n        accessPermission: 0b0000,\r\n        name: 0b0000,\r\n        id: 0b0000,\r\n        adFilters: 0b0000,\r\n        adUnitList: 0b0000,\r\n      } as Channel),\r\n      new Property({\r\n        accessPermission: 0b1111,\r\n        name: 0b1111,\r\n        id: 0b0101,\r\n        websiteURL: 0b1101,\r\n        approvalStatus: 0b0000,\r\n        notes: 0b0000,\r\n        attachedAdUnits: 0b0000,\r\n        clarity: 0b0000,\r\n      } as Property),\r\n      new Filter({\r\n        accessPermission: 0b0000,\r\n        name: 0b0000,\r\n        id: 0b0000,\r\n        filterType: 0b0000,\r\n        channelList: 0b0000,\r\n        excludedAdKeywords: 0b0000,\r\n        excludedQueryKeywords: 0b0000,\r\n        excludedURLs: 0b0000,\r\n      } as Filter),\r\n      new PublisherProfileTabs({\r\n        accessPermission: 0b1111,\r\n        profile: 0b1111,\r\n        userManagement: 0b1111,\r\n        payments: 0b1111,\r\n        settings: 0b1111,\r\n      } as PublisherProfileTabs),\r\n      new PublisherSettings({\r\n        mediation: 0b1111,\r\n        publisherPreferences: 0b1111,\r\n        publisherDelete: 0b0001,\r\n      } as PublisherSettings),\r\n      new UserSettings({\r\n        // Seperate user level system preferences are not provisioned yet\r\n        systemPreferences: 0b0100,\r\n        billingAlerts: 0b1111,\r\n        servingStatus: 0b1111,\r\n        profileReview: 0b1111,\r\n        invitedUsers: 0b1111,\r\n        userDelete: 0b0001,\r\n      } as UserSettings),\r\n      new AdBlock({\r\n        enablePublisherBlocks: 0b1111,\r\n        enableSiteBlocks: 0b1111,\r\n        editDomainBlocks: 0b1111,\r\n        editCategoryBlocks: 0b1111,\r\n      } as AdBlock),\r\n    ],\r\n  ],\r\n  [\r\n    // Account manager\r\n    43,\r\n    [\r\n      new DropdownMenu({\r\n        adManagement: 0b1111,\r\n        partnerManagment: 0b0000,\r\n        reporting: 0b0000,\r\n      } as DropdownMenu),\r\n      new NavigationMenu({\r\n        home: 0b1111,\r\n        adunit: 0b1111,\r\n        channel: 0b0000,\r\n        adFilter: 0b0000,\r\n        property: 0b1111,\r\n        adblock: 0b1111,\r\n        publisherProfile: 0b1111,\r\n        reporting: 0b1111,\r\n        publisher: 0b0000,\r\n        account: 0b0000,\r\n        user: 0b0000,\r\n        adquality: 0b0000,\r\n        dashboard: 0b1111,\r\n        auditHistory: 0b1111,\r\n      } as NavigationMenu),\r\n      new Publisher({\r\n        id: 0b0000,\r\n        accessPermission: 0b0000,\r\n        partner: 0b0000,\r\n        name: 0b0000,\r\n        networkAffiliation: 0b0000,\r\n        address: 0b0000,\r\n        publisherTier: 0b0000,\r\n        overrideFeatureTier: 0b0000,\r\n        entityLimitTier: 0b0000,\r\n        serviceLevel: 0b0000,\r\n        allowDistributionReporting: 0b0000,\r\n        allowDistributionV2Reporting: 0b0000,\r\n        allowStartDistributionReporting: 0b0000,\r\n        allowStartDistributionContentReporting: 0b0000,\r\n        allowSelectTierReporting: 0b0000,\r\n        allowMediationReporting: 0b0000,\r\n        allowMobileSearchAdUnit: 0b0000,\r\n        allowNativeReporting: 0b0000,\r\n        allowSyndicationReporting: 0b0000,\r\n        allowWebAdUnit: 0b0000,\r\n        allowPaidSearchReportingApi: 0b0000,\r\n        allowPaidSearchReportingDashboard: 0b0000,\r\n        allowDynamicPropertyRegistration: 0b0000,\r\n        enableDefaultTythonV2Reporting: 0b0000,\r\n        publisherAllowedFeaturesPropertyAutoApproved: 0b0000,\r\n        ipRanges: 0b0000,\r\n        newAccount: 0b0000,\r\n      } as Publisher),\r\n      new Account({\r\n        accessPermission: 0b0000,\r\n        publisherName: 0b0000,\r\n        accountName: 0b0000,\r\n        primaryContact: 0b0000,\r\n        lanuage: 0b0000,\r\n        countryOrRegion: 0b0000,\r\n        currency: 0b0000,\r\n        timeZone: 0b0000,\r\n        paymentOption: 0b0000,\r\n        financialStatus: 0b0000,\r\n        paymentLifecycle: 0b0000,\r\n        operationCostRation: 0b0000,\r\n        accountLevelAttribute: 0b0000,\r\n        inHousePromotion: 0b0000,\r\n        partnerCodesforDistributionReport: 0b0000,\r\n        formCodesforDistributionReport: 0b0000,\r\n        startDistributionReporting: 0b0000,\r\n        SKUs: 0b0000,\r\n      } as Account),\r\n      new User({\r\n        accessPermission: 0b0000,\r\n        userFirstName: 0b0000,\r\n        userLastName: 0b0000,\r\n        userEmail: 0b0000,\r\n        userAccountRole: 0b0000,\r\n        userLanguage: 0b0000,\r\n        userInviteFirstName: 0b0000,\r\n        userInviteLastName: 0b0000,\r\n        userInviteEmail: 0b0000,\r\n        userInviteLanguage: 0b0000,\r\n        userInviteAccountRole: 0b0000,\r\n      } as User),\r\n      new AdUnit({\r\n        accessPermission: 0b1111,\r\n        name: 0b1111,\r\n        id: 0b0101,\r\n        // Following fields are not exposed to tython self-serve users\r\n        markeplaceClassification: 0b0000,\r\n        businessModel: 0b0000,\r\n        channelList: 0b0000,\r\n        servingTier: 0b0000,\r\n        publisherGroupConfig: 0b0000,\r\n        inhousePromotions: 0b0000,\r\n      } as AdUnit),\r\n      new Channel({\r\n        accessPermission: 0b0000,\r\n        name: 0b0000,\r\n        id: 0b0000,\r\n        adFilters: 0b0000,\r\n        adUnitList: 0b0000,\r\n      } as Channel),\r\n      new Property({\r\n        accessPermission: 0b1111,\r\n        name: 0b1111,\r\n        id: 0b0101,\r\n        websiteURL: 0b1101,\r\n        approvalStatus: 0b0000,\r\n        notes: 0b0000,\r\n        attachedAdUnits: 0b0000,\r\n        clarity: 0b0000,\r\n      } as Property),\r\n      new Filter({\r\n        accessPermission: 0b0000,\r\n        name: 0b0000,\r\n        id: 0b0000,\r\n        filterType: 0b0000,\r\n        channelList: 0b0000,\r\n        excludedAdKeywords: 0b0000,\r\n        excludedQueryKeywords: 0b0000,\r\n        excludedURLs: 0b0000,\r\n      } as Filter),\r\n      new PublisherProfileTabs({\r\n        accessPermission: 0b1000,\r\n        profile: 0b0100,\r\n        userManagement: 0b0000,\r\n        payments: 0b0000,\r\n        settings: 0b0100,\r\n      } as PublisherProfileTabs),\r\n      new PublisherSettings({\r\n        mediation: 0b0100,\r\n        publisherPreferences: 0b0000,\r\n        publisherDelete: 0b0000,\r\n      } as PublisherSettings),\r\n      new UserSettings({\r\n        systemPreferences: 0b0100,\r\n        billingAlerts: 0b0000,\r\n        servingStatus: 0b1111,\r\n        profileReview: 0b1111,\r\n        invitedUsers: 0b0000,\r\n        userDelete: 0b0001,\r\n      } as UserSettings),\r\n      new AdBlock({\r\n        enablePublisherBlocks: 0b1111,\r\n        enableSiteBlocks: 0b1111,\r\n        editDomainBlocks: 0b1111,\r\n        editCategoryBlocks: 0b1111,\r\n      } as AdBlock),\r\n    ],\r\n  ],\r\n  [\r\n    // Report user\r\n    49,\r\n    [\r\n      new DropdownMenu({\r\n        adManagement: 0b1111,\r\n        partnerManagment: 0b0000,\r\n        reporting: 0b0000,\r\n      } as DropdownMenu),\r\n      new NavigationMenu({\r\n        home: 0b1111,\r\n        adunit: 0b1111,\r\n        channel: 0b0000,\r\n        adFilter: 0b0000,\r\n        property: 0b1111,\r\n        adblock: 0b1111,\r\n        publisherProfile: 0b0000,\r\n        reporting: 0b1111,\r\n        publisher: 0b0000,\r\n        account: 0b0000,\r\n        user: 0b0000,\r\n        adquality: 0b0000,\r\n        dashboard: 0b01111,\r\n        auditHistory: 0b0000,\r\n      } as NavigationMenu),\r\n      new Publisher({\r\n        id: 0b0000,\r\n        accessPermission: 0b0000,\r\n        partner: 0b0000,\r\n        name: 0b0000,\r\n        networkAffiliation: 0b0000,\r\n        address: 0b0000,\r\n        publisherTier: 0b0000,\r\n        overrideFeatureTier: 0b0000,\r\n        entityLimitTier: 0b0000,\r\n        serviceLevel: 0b0000,\r\n        allowDistributionReporting: 0b0000,\r\n        allowDistributionV2Reporting: 0b0000,\r\n        allowStartDistributionReporting: 0b0000,\r\n        allowStartDistributionContentReporting: 0b0000,\r\n        allowSelectTierReporting: 0b0000,\r\n        allowMediationReporting: 0b0000,\r\n        allowMobileSearchAdUnit: 0b0000,\r\n        allowNativeReporting: 0b0000,\r\n        allowSyndicationReporting: 0b0000,\r\n        allowWebAdUnit: 0b0000,\r\n        allowPaidSearchReportingApi: 0b0000,\r\n        allowPaidSearchReportingDashboard: 0b0000,\r\n        allowDynamicPropertyRegistration: 0b0000,\r\n        enableDefaultTythonV2Reporting: 0b0000,\r\n        publisherAllowedFeaturesPropertyAutoApproved: 0b0000,\r\n        ipRanges: 0b0000,\r\n        newAccount: 0b0000,\r\n      } as Publisher),\r\n      new Account({\r\n        accessPermission: 0b0000,\r\n        publisherName: 0b0000,\r\n        accountName: 0b0000,\r\n        primaryContact: 0b0000,\r\n        lanuage: 0b0000,\r\n        countryOrRegion: 0b0000,\r\n        currency: 0b0000,\r\n        timeZone: 0b0000,\r\n        paymentOption: 0b0000,\r\n        financialStatus: 0b0000,\r\n        paymentLifecycle: 0b0000,\r\n        operationCostRation: 0b0000,\r\n        accountLevelAttribute: 0b0000,\r\n        inHousePromotion: 0b0000,\r\n        partnerCodesforDistributionReport: 0b0000,\r\n        formCodesforDistributionReport: 0b0000,\r\n        startDistributionReporting: 0b0000,\r\n        SKUs: 0b0000,\r\n      } as Account),\r\n      new User({\r\n        accessPermission: 0b0000,\r\n        userFirstName: 0b0000,\r\n        userLastName: 0b0000,\r\n        userEmail: 0b0000,\r\n        userAccountRole: 0b0000,\r\n        userLanguage: 0b0000,\r\n        userInviteFirstName: 0b0000,\r\n        userInviteLastName: 0b0000,\r\n        userInviteEmail: 0b0000,\r\n        userInviteLanguage: 0b0000,\r\n        userInviteAccountRole: 0b0000,\r\n      } as User),\r\n      new AdUnit({\r\n        accessPermission: 0b0100,\r\n        name: 0b0100,\r\n        id: 0b0100,\r\n        markeplaceClassification: 0b0000,\r\n        businessModel: 0b0000,\r\n        channelList: 0b0000,\r\n        servingTier: 0b0000,\r\n        publisherGroupConfig: 0b0000,\r\n        inhousePromotions: 0b0000,\r\n      } as AdUnit),\r\n      new Channel({\r\n        accessPermission: 0b0000,\r\n        name: 0b0000,\r\n        id: 0b0000,\r\n        adFilters: 0b0000,\r\n        adUnitList: 0b0000,\r\n      } as Channel),\r\n      new Property({\r\n        accessPermission: 0b0100,\r\n        name: 0b0100,\r\n        id: 0b0100,\r\n        websiteURL: 0b0100,\r\n        approvalStatus: 0b0000,\r\n        notes: 0b0000,\r\n        attachedAdUnits: 0b0000,\r\n        clarity: 0b0000,\r\n      } as Property),\r\n      new Filter({\r\n        accessPermission: 0b0000,\r\n        name: 0b0000,\r\n        id: 0b0000,\r\n        filterType: 0b0000,\r\n        channelList: 0b0000,\r\n        excludedAdKeywords: 0b0000,\r\n        excludedQueryKeywords: 0b0000,\r\n        excludedURLs: 0b0000,\r\n      } as Filter),\r\n      new PublisherProfileTabs({\r\n        accessPermission: 0b0000,\r\n        profile: 0b0000,\r\n        userManagement: 0b0000,\r\n        payments: 0b0000,\r\n        settings: 0b0000,\r\n      } as PublisherProfileTabs),\r\n      new PublisherSettings({\r\n        mediation: 0b0000,\r\n        publisherPreferences: 0b0000,\r\n        publisherDelete: 0b0000,\r\n      } as PublisherSettings),\r\n      new UserSettings({\r\n        systemPreferences: 0b0100,\r\n        billingAlerts: 0b0000,\r\n        servingStatus: 0b0000,\r\n        profileReview: 0b0000,\r\n        invitedUsers: 0b0000,\r\n        userDelete: 0b0001,\r\n      } as UserSettings),\r\n      new AdBlock({\r\n        enablePublisherBlocks: 0b0100,\r\n        enableSiteBlocks: 0b0100,\r\n        editDomainBlocks: 0b0100,\r\n        editCategoryBlocks: 0b0100,\r\n      } as AdBlock),\r\n    ],\r\n  ],\r\n]);\r\n\r\n// tslint:disable:no-bitwise\r\nexport const hasReadAccess = (val: number): boolean => {\r\n  return (val & (1 << 2)) > 0 ? true : false;\r\n};\r\n\r\nexport const hasCreateAccess = (val: number): boolean => {\r\n  return (val & (1 << 3)) > 0 ? true : false;\r\n};\r\n\r\nexport const hasUpdateAccess = (val: number): boolean => {\r\n  return (val & (1 << 1)) > 0 ? true : false;\r\n};\r\n\r\nexport const hasDeleteAccess = (val: number): boolean => {\r\n  return (val & 1) > 0 ? true : false;\r\n};\r\n// tslint:enable:no-bitwise\r\n\r\nexport async function setUserRoles(userContext: UserContext) {\r\n  const url = uiConfig.getApiBaseAddress() + '/user/scope';\r\n  const headers = await buildRequestHeadersWithAuthToken(url, userContext);\r\n\r\n  let response: Response;\r\n  let id;\r\n\r\n  try {\r\n    onLoadingChanged(true);\r\n    onLoadingSetting(false);\r\n    const timeout = 30000;\r\n    id = setTimeout(() => onLoadingWaiting(true), timeout);\r\n    response = await fetch(url, {\r\n      method: 'GET',\r\n      headers: headers,\r\n    });\r\n\r\n    if (!response.ok) {\r\n      if (response.status !== 302 || isLocationPubCenter()) {\r\n        return handleApiErrors(response, url);\r\n      }\r\n    }\r\n\r\n    const responseJson: UserRoleResponse = await response.json();\r\n\r\n    if (responseJson.data) {\r\n      const scope = responseJson.data.scope;\r\n\r\n      setUserContext(userContext, scope, userContext.userType);\r\n\r\n      setUserRolesInCache(scope.roleIds);\r\n    }\r\n  } catch (err) {\r\n    const error = `Failed to fetch user scopes for ${url}. Errors: ${err}`;\r\n    Log.error(error);\r\n    onNotificationChanged({ textMessageDescriptor: messages.failedToFetchUserScope, messageBarType: MessageBarType.error });\r\n  } finally {\r\n    clearTimeout(id);\r\n    onLoadingChanged(false);\r\n  }\r\n}\r\n\r\nexport function setUserContext(userContext: UserContext, scope: IUserRoleScope, userType?: UserType) {\r\n  Log.debug(`Setting user scope, parentCustomer: ${scope.parentCustomer}, role ids: ${scope.roleIds.toString()}`);\r\n\r\n  userContext.id = scope.id;\r\n  userContext.userRoles = scope.roleIds;\r\n  onUserContextChanged({ ...userContext, userType: userType });\r\n\r\n  const parentCustomerId = scope.parentCustomer;\r\n  const accessiblePublisherList = scope.accessiblePublishers;\r\n\r\n  onDefaultPublisherSet(parentCustomerId);\r\n  onAccessiblePublisherListChanged(accessiblePublisherList);\r\n\r\n  localStorage.setItem(DEFAULT_PUBLISHER_CACHE_KEY, parentCustomerId.toString());\r\n}\r\n\r\nexport function setUserRolesInCache(roleIds: number[]) {\r\n  const userRoles = new Map<string, Model>();\r\n  Log.debug(`Setting user access permissions in cache, ${roleIds.toString()}`);\r\n\r\n  roleIds.forEach((roleId: number) => {\r\n    let entities;\r\n    if (isTythonSelfServeUser()) {\r\n      entities = tythonUserRolePermissions.get(roleId);\r\n    } else {\r\n      entities = rolePermissions.get(roleId);\r\n    }\r\n\r\n    if (entities) {\r\n      entities.forEach((entity: Model) => {\r\n        const userRoleEntity = userRoles.get(entity.className);\r\n        if (userRoleEntity) {\r\n          userRoleEntity.or(entity);\r\n          userRoles.set(userRoleEntity.className, userRoleEntity);\r\n        } else {\r\n          userRoles.set(entity.className, entity);\r\n        }\r\n      });\r\n    }\r\n  });\r\n\r\n  const userRolesJSON = {};\r\n  userRoles.forEach((value: Model, key: string) => {\r\n    userRolesJSON[key] = JSON.stringify(value);\r\n  });\r\n\r\n  localStorage.setItem(userRoleKey, JSON.stringify(userRolesJSON));\r\n}\r\n","export const APP_NAME_PUBCENTER = 'pubCenter';\r\nexport const APP_NAME_NEW = 'Microsoft Monetize Now';\r\nexport const APP_NAME_SHORT = 'Monetize Now';\r\nexport const APP_NAME_NEW_COMPACT = 'MonetizeNow';\r\nexport const PUBCENTER_TITLE = 'PubCenter';\r\n\r\nexport const MAIN_CONTENT_ID = 'main-content';\r\n\r\n// Used to change the copy button icon for 3000ms, indicating copy was successful\r\nexport const COPY_BUTTON_TIMEOUT = 3000;\r\n// Used to dismiss notifications after 10s they show up\r\nexport const NOTIFICATION_DISMISS_TIMEOUT = 10000;\r\nexport const TOKEN_EXPIRED_SEARCH_PARAM_KEY = 'isTokenExpired';\r\nexport const CLARITY_HOME_WEB_APP = 'https://clarity.microsoft.com';\r\nexport const CLARITY_WEB_APP = 'https://clarity.microsoft.com/projects/view/{id}/settings';\r\nexport const CLARITY_PRIVACY_STATEMENT = 'https://privacy.microsoft.com/en-us/privacystatement';\r\nexport const CLARITY_DEMO = 'https://clarity.microsoft.com/demo/projects/view/3t0wlogvdz/dashboard?date=Last%203%20days';\r\nexport const CLARITY_PRIVACY_DISCLOSURE = 'https://learn.microsoft.com/en-us/clarity/setup-and-installation/privacy-disclosure';\r\nexport const WAITLIST_FORM =\r\n  'https://forms.office.com/Pages/ResponsePage.aspx?id=v4j5cvGGr0GRqy180BHbR9CSFbF9q-VAlTdHTCCoFF5UNFdaMjJPVTY3RjBGVUpGMEdMTFVFOUlUMi4u';\r\n\r\nexport const USER_SIGNUP_KEY = 'isUserSignUpFlow';\r\n\r\nexport const DEFAULT_COUNTRY_NAME = 'United States';\r\nexport const DEFAULT_COUNTRY_CODE = 'US';\r\nexport const DEFAULT_CURRENCY_CODE = 'USD';\r\nexport const DEFAULT_LANGUAGE_CODE = 'en';\r\nexport const DEFAULT_LOCALE = 'en-US';\r\n\r\nexport const NO_VALUE_PLACEHOLDER = '-';\r\n\r\nexport const SESSION_NOTIFICATIONS_UI = 'UIGeneratedNotifications';\r\nexport const SESSION_DISMISSED_NOTIFICATIONS_BACKEND = 'BackendDismissedNotifications';\r\nexport const SUPPORT_EMAIL = 'pubhelp@microsoft.com';\r\nexport const TYTHON_SUPPORT_EMAIL = 'monetizenow@microsoft.com';\r\n\r\nexport const TNC_HREF_PATH = '/terms-and-conditions';\r\n\r\nexport const DEFAULT_PUBLISHER_CACHE_KEY = 'app.defaulftPublisherId';\r\n\r\nexport const DEFAULT_ADUNIT_IMAGE_ASPECT_RATIO = process.env.REACT_APP_DEFAULT_ADUNIT_IMAGE_ASPECT_RATIO ?? '1.91:1';\r\n\r\nconst DEFAULT_ADUNIT_IMAGE_ASPECT_RATIOS = ['1.91:1', '1:1', '4:3', '9:16'];\r\nexport const ADUNIT_IMAGE_ASPECT_RATIOS =\r\n  process.env.REACT_APP_ADUNIT_IMAGE_ASPECT_RATIOS?.split(',') ?? DEFAULT_ADUNIT_IMAGE_ASPECT_RATIOS;\r\n\r\nexport const PRIVACY_STATEMENT = 'http://go.microsoft.com/fwlink/?LinkId=248681';\r\n\r\nexport const SUCCESS_MESSAGE_WIDTH = 480;\r\nexport const CUSTOM_WIDTH = '520px';\r\nexport const CUSTOM_NOTIFICATIONS_WIDTH = '460px';\r\n\r\nexport const PAGINATION_PAGE_SIZES = [10, 25, 50, 75, 100];\r\n\r\nexport const REDIRECT_URI_SESSION_STORAGE_KEY = 'redirect_uri';\r\n\r\nexport const TYTHON_DOMAIN_REDIRECTION_CACHE_KEY = 'isRedirectedUser';\r\nexport const DOMAIN_REDIRECTION_QUERY_PARAM = 'loginHint';\r\n\r\nexport const ADS_UI_URL = process.env.REACT_APP_ENV === 'production' ? 'https://ads.microsoft.com' : 'https://ads-int.microsoft.com';\r\n\r\nexport const ENTERPRISE_USER_ACCESS_URL = 'https://euaaccessportal.microsoft.com/request/access/Advertising_PubCenter';\r\n\r\nexport const WAITLIST_FORM_LINK =\r\n  'https://forms.office.com/Pages/ResponsePage.aspx?id=v4j5cvGGr0GRqy180BHbR9CSFbF9q-VAlTdHTCCoFF5UNFdaMjJPVTY3RjBGVUpGMEdMTFVFOUlUMi4u';\r\n\r\nexport const ADS_DOT_TEXT_HELP_URL = 'https://help.pubcenter.microsoft.com/#apex/pcv4/en/07509/-1';\r\nexport const CONNECT_SITE_HELP_URL = 'https://help.ucm.microsoft.com/#apex/pcv4/en/07507/-1';\r\nexport const SITE_APPROVAL_HELP_URL = 'https://help.ads.microsoft.com/#apex/pcv4/en/07510/-1';\r\nexport const PUBLISHER_EVALUATION_HELP_URL = 'https://help.ads.microsoft.com/#apex/pcv4/en/07517/-1';\r\n\r\nexport const WELCOME_SEND_FLAG = 'welcomeEmailSend';\r\nexport const LOCAL_STORAGE_LOCALE = 'LOCAL_STORAGE_LOCALE';\r\nexport const UNAUTHORIZED_LOCAL_STORAGE_LOCALE = 'UNAUTHORIZED_LOCAL_STORAGE_LOCALE';\r\n\r\nexport const EN_LOCALE_KEY = 'en-us';\r\nexport const FR_LOCALE_KEY = 'fr-fr';\r\nexport const DE_LOCALE_KEY = 'de-de';\r\nexport const IT_LOCALE_KEY = 'it-it';\r\nexport const ES_LOCALE_KEY = 'es-es';\r\nexport const EN_GB_LOCALE_KEY = 'en-gb';\r\nexport const ES_MX_LOCALE_KEY = 'es-mx';\r\nexport const FR_CA_LOCALE_KEY = 'fr-ca';\r\n","export * from './GridV2';\r\nexport * from './GridV2.styles';\r\nexport * from './GridV2.types';\r\n","export enum TythonColumnsEnum {\r\n  ImpressionRequests = 'ImpressionRequests',\r\n  ImpressionsReturned = 'ImpressionsReturned',\r\n  ImpressionsServed = 'ImpressionsServed',\r\n  ImpressionsViewed = 'ImpressionsViewed',\r\n  Viewability = 'Viewability',\r\n  Revenue = 'Revenue',\r\n  WinningBids = 'WinningBids',\r\n  WinRate = 'WinRate',\r\n  eCPM = 'eCPM',\r\n  Clicks = 'Clicks',\r\n  CTR = 'CTR',\r\n  FillRate = 'FillRate',\r\n  Impressions = 'Impressions',\r\n  ViewableImpressions = 'ViewableImpressions',\r\n  MeasurableImpressions = 'MeasurableImpressions',\r\n  ImpressionsRate = 'ImpressionsRate',\r\n  EligibleImpressions = 'EligibleImpressions',\r\n  MeasurableImpressionsRate = 'MeasurableImpressionsRate',\r\n  ResponsesServed = 'ResponsesServed',\r\n  DateTime = 'DateTime',\r\n  AdUnitName = 'AdUnitName',\r\n  Country = 'Country',\r\n  CountryCode = 'CountryCode',\r\n  AdECPM = 'AdECPM',\r\n  AdClicks = 'AdClicks',\r\n  AdCTR = 'AdCTR',\r\n  Date = 'Date',\r\n  AdUnitId = 'AdUnitId',\r\n  SiteName = 'SiteName',\r\n  PropertyUrl = 'PropertyUrl',\r\n  OperatingSystem = 'OperatingSystem',\r\n}\r\n","import { createStore } from 'satcheljs';\r\nimport { AdQualityFilterNames, IAdCreativeViewState } from './schema';\r\n\r\nexport const defaultInitialTextFilterState = {\r\n  condition: undefined,\r\n  value: '',\r\n  isApplied: false,\r\n};\r\n\r\nexport const getStore = createStore<IAdCreativeViewState>('AdCreativeState', {\r\n  active: {},\r\n  loading: false,\r\n  panelIsOpen: false,\r\n  panelItemType: undefined,\r\n  filterPanel: undefined,\r\n  blockAdsPage: { adPerfBlockAdsData: [], blockReasonsL2: [], channels: {} },\r\n  pageType: 'AdCreative',\r\n  errors: {},\r\n  columns: [],\r\n  blockedAdsContext: undefined,\r\n  blockedImagesContext: undefined,\r\n  teachingBubbleStartDate: false,\r\n  teachingBubbleEndDate: false,\r\n  adDescription: false,\r\n  filters: {\r\n    active: {\r\n      [AdQualityFilterNames.AccountName]: { values: [] },\r\n      [AdQualityFilterNames.AdProviders]: { values: [] },\r\n      [AdQualityFilterNames.Markets]: { values: [] },\r\n      [AdQualityFilterNames.CreativeAdId]: { conditions: [] },\r\n      [AdQualityFilterNames.Advertiser]: { conditions: [] },\r\n      [AdQualityFilterNames.AdvertiserId]: { conditions: [] },\r\n      [AdQualityFilterNames.AdvertiserAccountId]: { conditions: [] },\r\n      [AdQualityFilterNames.AdId]: { conditions: [] },\r\n      [AdQualityFilterNames.AdTitle]: { conditions: [] },\r\n      [AdQualityFilterNames.AdURL]: { conditions: [] },\r\n      [AdQualityFilterNames.LongHeadline]: { conditions: [] },\r\n      [AdQualityFilterNames.ShortHeadline]: { conditions: [] },\r\n    },\r\n    raw: {\r\n      [AdQualityFilterNames.AccountName]: { values: [] },\r\n      [AdQualityFilterNames.AdProviders]: { values: [] },\r\n      [AdQualityFilterNames.Markets]: { values: [] },\r\n      [AdQualityFilterNames.CreativeAdId]: { conditions: [defaultInitialTextFilterState] },\r\n      [AdQualityFilterNames.Advertiser]: { conditions: [defaultInitialTextFilterState] },\r\n      [AdQualityFilterNames.AdvertiserId]: { conditions: [defaultInitialTextFilterState] },\r\n      [AdQualityFilterNames.AdvertiserAccountId]: { conditions: [defaultInitialTextFilterState] },\r\n      [AdQualityFilterNames.AdId]: { conditions: [defaultInitialTextFilterState] },\r\n      [AdQualityFilterNames.AdTitle]: { conditions: [defaultInitialTextFilterState] },\r\n      [AdQualityFilterNames.AdURL]: { conditions: [defaultInitialTextFilterState] },\r\n      [AdQualityFilterNames.LongHeadline]: { conditions: [defaultInitialTextFilterState] },\r\n      [AdQualityFilterNames.ShortHeadline]: { conditions: [defaultInitialTextFilterState] },\r\n    },\r\n  },\r\n});\r\n","import { AdManagementRouter } from './pages/ad-management/AdManagementRouter';\r\nimport { PartnerManagementRouter } from './pages/partner-management/PartnerManagementRouter';\r\nimport { ReportRouter } from './pages/report/ReportRouter';\r\nimport { IRoute } from './Routes.types';\r\n\r\nexport enum RoutePrefix {\r\n  report = 'report',\r\n  adManagement = 'ad-management',\r\n  partnerManagement = 'partner-management',\r\n  capacity = 'capacity',\r\n}\r\n\r\nexport const getGlobalRoutes = (): IRoute[] => [\r\n  {\r\n    key: `/${RoutePrefix.report}`,\r\n    text: 'Reporting',\r\n    icon: 'CRMReport',\r\n    component: ReportRouter,\r\n  },\r\n  {\r\n    key: `/${RoutePrefix.adManagement}`,\r\n    text: 'Ad Management',\r\n    icon: 'DocumentManagement',\r\n    // @ts-ignore\r\n    component: AdManagementRouter,\r\n  },\r\n  {\r\n    key: `/${RoutePrefix.partnerManagement}`,\r\n    text: 'Partner Management',\r\n    icon: 'AccountManagement',\r\n    component: PartnerManagementRouter,\r\n  },\r\n  // {\r\n  //   key: `/${RoutePrefix.capacity}`,\r\n  //   text: 'Capacity',\r\n  //   icon: 'OfflineStorageSolid',\r\n  //   component: CapacityRouter\r\n  // }\r\n];\r\n\r\nexport const DefaultRoute = `/${RoutePrefix.adManagement}`;\r\nexport const SignUpPageRoute = '/signup';\r\nexport const LandingPageRoute = '/landing-page';\r\nexport const LogInPageRoute = '/login';\r\nexport const AccountPageRoute = '/publisherProfile';\r\nexport const AcceptInvitePageRoute = '/acceptUserInvite/code=';\r\nexport const UserDoesNotExistErrorPageRoute = '/user-does-not-exist';\r\nexport const NoAccessErrorPageRoute = '/no-access';\r\nexport const UnauthorizedInternalUserPageRoute = '/unauthorized-user';\r\nexport const HomePageRoute = '/ad-management/home';\r\nexport const AuditHistoryRoute = '/auditHistory';\r\nexport const UserLevelSettingRoute = '/userSettings';\r\nexport const SupportPageRoute = '/support';\r\n","import { RefObject } from 'react';\r\nimport { HighChartsWrapper } from '../../../../components/HighCharts/HighChartsLibrary';\r\nimport { IRouterWithIntl } from '../../../../utils';\r\nimport { TythonColumnsEnum } from '../../@data/store/schema/ColumnsEnum';\r\nimport { ICustomCalenderDateRange } from '../../components/CustomCalender/CustomCalender.types';\r\nimport { FormatMessageFuncType } from '../../utils/intlHelper';\r\nimport { IMetadataElement, IReportsMetadata, TythonReportingDataRow } from '../@data/store/schema';\r\nimport { IMetricMarkerProps } from '../MetricMarker/MetricMarker.types';\r\nimport { IActiveFilter } from '../ReportDetailsPage/ActionBar/ActionBar';\r\n\r\nexport interface IReportCardProps extends IRouterWithIntl {\r\n  title: string;\r\n  type: ReportCardType;\r\n  allowedChartTypes: IChartButton[];\r\n  defaultColumns: TythonColumnsEnum[];\r\n  defaultMetrics: TythonColumnsEnum[];\r\n  enableHideChartsButton?: boolean;\r\n  hasMinimumBreakdown?: boolean;\r\n  reportData?: TythonReportingDataRow[];\r\n  summaryData?: TythonReportingDataRow[];\r\n  reportDetailedData?: TythonReportingDataRow[];\r\n  isSummaryDataLoaded?: boolean;\r\n  reportMetadata?: IReportsMetadata;\r\n  defaultChartGrain?: ChartGrain;\r\n  allowedChartGrains: IMetadataElement[];\r\n  showChartGrains?: boolean;\r\n  showMetricsMarkers?: boolean;\r\n  dataMetrics: IReportDataMetrics;\r\n  mainDimension?: string;\r\n  dateDimension: string;\r\n  showDetailsReportLink: boolean;\r\n  dateRange: ICustomCalenderDateRange;\r\n  filters: IActiveFilter[];\r\n  isDetailedView: boolean;\r\n  onChartGrainChanged?: (grain: ChartGrain) => void;\r\n  onSelectedMetricChanged?: (metric: string) => void;\r\n  onActiveMetricsChanged?: (activeMetrics: ActiveMetrics) => void;\r\n  onBreakDownChanged?: (newBreakdown: string[]) => void;\r\n  reportCardRef: RefObject<HTMLDivElement>;\r\n}\r\n\r\nexport interface IChartButton {\r\n  chartType: ChartTypes;\r\n  disabled: boolean;\r\n  iconName: string;\r\n  dataTestId?: string;\r\n}\r\n\r\nexport interface IReportOptions {\r\n  mainDimension: string;\r\n}\r\n\r\nexport interface IReportDataMetrics {\r\n  chartDataMetrics: string;\r\n}\r\nexport interface IChartsOptions {\r\n  currentChartType: ChartTypes;\r\n  currentChartGrain: ChartGrain;\r\n  reportData: TythonReportingDataRow[];\r\n  mainDimension?: IMetadataElement;\r\n  selectedMetric: IMetadataElement;\r\n  chartComponentRef: React.RefObject<HighChartsWrapper.RefObject>;\r\n  mapChartComponentRef: React.RefObject<HighChartsWrapper.RefObject>;\r\n  activeMetrics: ActiveMetrics;\r\n  dateDimension: string;\r\n  countryCodeDimension?: string;\r\n  formatMessage: FormatMessageFuncType;\r\n}\r\nexport interface IReportDetailsPageParams {\r\n  type: ReportCardType;\r\n}\r\n\r\nexport enum ChartTypes {\r\n  DONUT = 'Donut',\r\n  BAR = 'Bar',\r\n  GRID = 'Grid',\r\n  LINE = 'Line',\r\n  MAP = 'Map',\r\n}\r\n\r\nexport enum ChartGrain {\r\n  NONE = 'None',\r\n  HOURLY = 'Hour',\r\n  DAILY = 'Day',\r\n  WEEKLY = 'Week',\r\n  MONTHLY = 'Month',\r\n  YEARLY = 'Year',\r\n  MONTH_AND_YEAR = 'MonthAndYear',\r\n}\r\nexport enum ReportCardType {\r\n  PERFORMANCE = 'performance',\r\n  ADUNIT = 'adunit',\r\n  SITE = 'site',\r\n  COUNTRY = 'country',\r\n  MEDIATION = 'mediation',\r\n  CUSTOM = 'custom',\r\n  SUMMARY = 'summary',\r\n}\r\n\r\nexport type ActiveMetrics = Record<string, IMetricMarkerProps>;\r\n","import { action } from 'satcheljs';\r\n\r\nexport const onAcceptInvitePageInitialized = action(\r\n  'onAcceptInvitePageInitialized',\r\n  (invitationCode: string, invitationLocale: string) => ({ invitationCode, invitationLocale })\r\n);\r\n\r\nexport const onAcceptInvitePageSubmitted = action('onAcceptInvitePageSubmitted');\r\n\r\nexport const validateUserInvitationCode = action('validateUserInvitationCode', (invitationCode: string) => ({ invitationCode }));\r\n","import { action } from 'satcheljs';\r\nimport { Model } from '../../../../../@data';\r\nimport { IDevTokenPanelParams } from '../../Manage/ManagePage.types';\r\n\r\nexport const onDevTokenPanelShown = action('onDevTokenPanelShown', (devTokenPanelParams: IDevTokenPanelParams) => ({\r\n  devTokenPanelParams,\r\n}));\r\n\r\nexport const onDevTokenPanelHide = action('onDevTokenPanelHide');\r\n\r\nexport const onFetchDevTokenStatus = action('onFetchDevTokenStatus', (selectedItem: Model) => ({\r\n  selectedItem,\r\n}));\r\n\r\nexport const onGenerateDevTokenStatus = action('onGenerateDevTokenStatus', (selectedItem: Model) => ({\r\n  selectedItem,\r\n}));\r\n\r\nexport const onTokenStatusItem = action('onTokenStatusItem', (selectedItem: Model) => ({\r\n  selectedItem,\r\n}));\r\n","import { action } from 'satcheljs';\r\nimport { IStringDictionary, User, UserInvitation } from '../../../../../@data';\r\nimport { FormState } from '../../../../../components/Form';\r\nimport { IUserViewModel } from '../store/schema';\r\n\r\nexport const onRawChanged = action('onRawChanged', (value?: User) => ({ value }));\r\n\r\nexport const onUserChanged = action('onUserChanged', (user: IUserViewModel) => ({ user }));\r\n\r\nexport const onFetchUsersLoading = action('onFetchUsersLoading', (isLoading: boolean) => ({ isLoading }));\r\n\r\nexport const onFetchingUsersData = action('onFetchingUsersData', (isFetchingData: boolean) => ({ isFetchingData }));\r\n\r\nexport const onUserInvitationsChanged = action('onUserInvitationsChanged', (userInvitations: UserInvitation[]) => ({ userInvitations }));\r\n\r\nexport const onFetchUserInvitationsLoading = action('onFetchUserInvitationsLoading', (isLoading: boolean) => ({ isLoading }));\r\n\r\nexport const onFetchingUserInvitationsData = action('onFetchingUserInvitationsData', (isFetchingData: boolean) => ({ isFetchingData }));\r\n\r\nexport const onUsersChanged = action('onUsersChanged', (users: User[]) => ({ users }));\r\n\r\nexport const onUserErrorChanged = action('onUserErrorChanged', (values?: IStringDictionary) => ({ values }));\r\n\r\nexport const onUserInvitationChanged = action('onUserInvitationChanged', (mode: FormState, value?: UserInvitation) => ({\r\n  value,\r\n  mode,\r\n}));\r\n\r\nexport const onUserInvitationExpiryChanged = action('onUserInvitationExpiryChanged', (id: number, value: Date) => ({ id, value }));\r\n","import { IChoiceGroupOption, IComboBoxOption } from '@fluentui/react';\r\nimport { History } from 'history';\r\nimport { action } from 'satcheljs';\r\nimport { FormState } from '../../../../../components/Form';\r\nimport { IIdNamePair } from '../../../../../components/MultiSelectPicker';\r\n\r\nexport const onFormIdChanged = action('onFormIdChanged', (value: number) => ({ value }));\r\n\r\nexport const onFormFirstNameChanged = action('onFormFirstNameChanged', (value?: string) => ({ value }));\r\n\r\nexport const onFormLastNameChanged = action('onFormLastNameChanged', (value?: string) => ({ value }));\r\n\r\nexport const onFormPhoneNumberChanged = action('onFormPhoneNumberChanged', (value?: string) => ({ value }));\r\n\r\nexport const onFormEmailAddressChanged = action('onFormEmailAddressChanged', (value?: string) => ({ value }));\r\n\r\nexport const onFormUsernameChanged = action('onFormUsernameChanged', (value?: string) => ({ value }));\r\n\r\n// need to change string to IDropdown option once language is fixed\r\nexport const onFormLanguageChanged = action('onFormLanguageChanged', (value?: string) => ({ value }));\r\n\r\nexport const onFormUserLocaleChanged = action('onFormUserLocaleChanged', (value?: IComboBoxOption) => ({\r\n  value,\r\n}));\r\n\r\nexport const onFormContactByEmailChanged = action('onContactByEmailChanged', (value?: boolean) => ({ value }));\r\n\r\nexport const onFormContactByPhoneChanged = action('onFormContactByPhoneChanged', (value?: boolean) => ({ value }));\r\n\r\nexport const onFormAccountRoleChanged = action('onFormAccountRoleChanged', (value?: IChoiceGroupOption) => ({ value }));\r\n\r\nexport const onFormRoleAccountListChanged = action('onFormRoleAccountListChanged', (value?: IIdNamePair[]) => ({\r\n  value,\r\n}));\r\n\r\nexport const onFormInitialized = action('onFormInitialized', (mode: FormState, publisherId: string, entityId?: string) => ({\r\n  mode,\r\n  publisherId,\r\n  entityId,\r\n}));\r\n\r\nexport const onFormCancelled = action('onFormCancelled');\r\n\r\nexport const onFormCleared = action('onFormCleared');\r\n\r\nexport const onFormSubmitted = action('onFormSubmitted', (mode: FormState, routeHistory?: History) => ({ mode, routeHistory }));\r\n","import { action } from 'satcheljs';\r\n\r\nexport const sendWelcomeToPubcenterEmail = action('sendWelcomeToPubcenterEmail');\r\n\r\n","import { action } from 'satcheljs';\r\nimport { AdUnit, LifeCycleStatus } from '../../../../../@data';\r\n\r\nexport const fetchAdUnitsDataAction = action('fetchAdUnitsDataAction');\r\n\r\nexport const fetchAdUnitMediationStatus = action('fetchAdUnitMediationStatus',\r\n  (adUnitId: string,\r\n  showLoadingSpinner?: boolean,\r\n  showNotifications?: boolean) => ({ adUnitId, showLoadingSpinner, showNotifications }));\r\n\r\nexport const updateAdUnitMediationStatus = action('updateAdUnitMediationStatus',\r\n  (adUnits: AdUnit[], state: LifeCycleStatus) => ({ adUnits, state }));","import { action } from 'satcheljs';\r\nimport { AdUnit, IStringDictionary } from '../../../../../@data';\r\nimport { IAdunitViewModel } from '../store/schema';\r\n\r\nexport const onRawChanged = action('onRawChanged', (value?: AdUnit) => ({ value }));\r\n\r\nexport const onAdunitChanged = action('onAdunitChanged', (adunit: IAdunitViewModel) => ({ adunit }));\r\n\r\nexport const onAdunitErrorChanged = action('onAdunitErrorChanged', (values?: IStringDictionary) => ({ values }));\r\n\r\nexport const onAdunitMediationUpdateStart = action('onAdunitMediationUpdateStart', (ids: number[]) => ({ ids }));\r\n\r\nexport const onAdunitMediationUpdateEnd = action('onAdunitMediationUpdateEnd', (ids: number[]) => ({ ids }));\r\n","import { IChoiceGroupOption, IDropdownOption } from '@fluentui/react';\r\nimport { History } from 'history';\r\nimport { action } from 'satcheljs';\r\nimport { AdUnitType, NativeAdTemplate, Property } from '../../../../../@data';\r\nimport { FormState } from '../../../../../components/Form';\r\nimport { IIdNamePair } from '../../../../../components/MultiSelectPicker';\r\nimport { StepState } from '../../../../../layout/DetailPageWithStepper/DetailPageWithStepper.types';\r\n\r\nexport const onFormInitialized = action(\r\n  'onFormInitialized',\r\n  (mode: FormState, publisherId: string, accountId: string, entityId?: string, showLoadingSpinner?: boolean) => ({\r\n    mode,\r\n    publisherId,\r\n    accountId,\r\n    entityId,\r\n    showLoadingSpinner,\r\n  })\r\n);\r\n\r\nexport const onFetchAdUnitName = action(\r\n  'onFetchAdUnitName',\r\n  (publisherId: string, accountId: string, entityId: string, setIsLoading: (isLoading: boolean) => void) => ({\r\n    publisherId,\r\n    accountId,\r\n    entityId,\r\n    setIsLoading,\r\n  })\r\n);\r\n\r\nexport const onFetchAdUnitTemplate = action('onFetchAdUnitTemplate', (entityId: string) => ({\r\n  entityId,\r\n}));\r\n\r\nexport const onAdunitIdChanged = action('onAdunitIdChanged', (value: number) => ({ value }));\r\n\r\nexport const onAdunitNameChanged = action('onAdunitNameChanged', (value?: string) => ({ value }));\r\n\r\nexport const onAdunitTypeChanged = action('onAdunitTypeChanged', (value?: AdUnitType) => ({ value }));\r\n\r\nexport const onMarketplaceChanged = action('onMarketplaceChanged', (value: IDropdownOption) => ({ value }));\r\n\r\nexport const onBusinessModelChanged = action('onBusinessModelChanged', (value?: IDropdownOption) => ({ value }));\r\n\r\nexport const onChannelsChanged = action('onChannelsChanged', (values?: IIdNamePair[]) => ({ values }));\r\n\r\nexport const onAdunitChannelListChanged = action('onAdunitChannelListChanged', (values?: IIdNamePair[]) => ({ values }));\r\n\r\nexport const onAssociatedPropertyChanged = action('onChannelsChanged', (value?: Property) => ({ value }));\r\n\r\nexport const onAdunitPropertyListChanged = action('onAdunitPropertyListChanged', (values?: Property[]) => ({ values }));\r\n\r\nexport const onCreatePropertyPanelOpenChanged = action('onCreatePropertyPanelOpenChanged', (isOpen: boolean) => ({ isOpen }));\r\n\r\nexport const onServingTierChanged = action('onServingTierChanged', (value?: IChoiceGroupOption) => ({ value }));\r\n\r\nexport const onPubGroupConfigChanged = action('onPubGroupConfigChanged', (value?: IDropdownOption) => ({ value }));\r\n\r\nexport const onStoreIdsChanged = action('onStoreIdsChanged', (values?: string) => ({ values }));\r\n\r\nexport const onAdUnitFormSubmittable = action('onAdUnitFormSubmittable', (isSubmittable: boolean) => ({ isSubmittable }));\r\n\r\nexport const onFormSubmitted = action(\r\n  'onFormSubmitted',\r\n  (mode: FormState, routeHistory?: History, onSubmit?: () => void, stepState?: StepState, shouldHandleMediation?: boolean) => ({\r\n    mode,\r\n    routeHistory,\r\n    onSubmit,\r\n    stepState,\r\n    shouldHandleMediation,\r\n  })\r\n);\r\n\r\nexport const onAdUnitNameUpdate = action(\r\n  'onAdUnitNameUpdate',\r\n  (\r\n    formatMessage: (\r\n      messageDescriptor: ReactIntl.FormattedMessage.MessageDescriptor,\r\n      values?:\r\n        | {\r\n            [key: string]: ReactIntl.MessageValue;\r\n          }\r\n        | undefined\r\n    ) => string,\r\n    setIsLoading: (isLoading: boolean) => void,\r\n    setErrorMessage: (error: string) => void,\r\n    setVisibleCallOut: (id: number) => void\r\n  ) => ({\r\n    formatMessage,\r\n    setIsLoading,\r\n    setErrorMessage,\r\n    setVisibleCallOut,\r\n  })\r\n);\r\n\r\nexport const onFormCancelled = action('onFormCancelled');\r\n\r\nexport const onFormCleared = action('onFormCleared');\r\n\r\nexport const onTemplateUploaded = action('onTemplateUploaded', (content: NativeAdTemplate) => ({ content }));\r\n\r\nexport const onTemplateDownloaded = action('onTemplateDownloaded', (content: NativeAdTemplate) => ({ content }));\r\n\r\nexport const onDistributionPartnerCodesChanged = action('onDistributionPartnerCodesChanged', (value?: string) => ({ value }));\r\n\r\nexport const onImpressionFeedbackSignalChanged = action('onImpressionFeedbackSignalChanged', (value?: boolean) => ({ value }));\r\n","import { action } from 'satcheljs';\r\n\r\nexport const onPanelOpenChanged = action(\r\n  'onPanelOpenChanged',\r\n  (isPanelOpen: boolean, activePropertyId?: number, activeAdUnitId?: number) => ({\r\n    isPanelOpen,\r\n    activePropertyId,\r\n    activeAdUnitId,\r\n  })\r\n);\r\n","import { useEffect, useState } from 'react';\r\n\r\ntype MeasureStyle = {\r\n  fontStyle?: string;\r\n  fontVariant?: string;\r\n  fontWeight?: string | number;\r\n  fontSize?: string;\r\n  lineHeight?: string;\r\n  fontFamily?: string;\r\n};\r\n\r\nexport const defaultGridCellTextStyle: MeasureStyle = {\r\n  fontSize: '14px',\r\n  fontWeight: 400,\r\n};\r\n\r\n/**\r\n *  const longestNameLength = useCanvasTextWidth(\r\n    'Ad Unit lonnnnnnnnnnnnnnnnnnnnnnnnnnnnnnng name', // longest string or any string you want to measure\r\n    {\r\n      fontSize: '14px',\r\n      fontWeight: 400,\r\n    },\r\n    20 // boundaries to add in px, this can used to add padding/margin to the text\r\n  );\r\n  console.log(longestNameLength)\r\n */\r\n\r\nexport const useCanvasTextWidth = (text: string, style: MeasureStyle = defaultGridCellTextStyle, boundary: number = 0) => {\r\n  const [width, setWidth] = useState(0);\r\n\r\n  useEffect(() => {\r\n    const canvas = document.createElement('canvas');\r\n    const context = canvas.getContext('2d');\r\n\r\n    if (context) {\r\n      // Construct the font string from the style object\r\n      const fontParts = [\r\n        style.fontStyle || '',\r\n        style.fontVariant || '',\r\n        style.fontWeight || '',\r\n        style.fontSize || '16px',\r\n        style.lineHeight || '',\r\n        style.fontFamily ||\r\n          '\"Segoe UI\", \"Segoe UI Web (West European)\", \"Segoe UI\", -apple-system, BlinkMacSystemFont, Roboto, \"Helvetica Neue\", sans-serif',\r\n      ];\r\n      context.font = fontParts.filter(Boolean).join(' ');\r\n\r\n      const metrics = context.measureText(text);\r\n      setWidth(metrics.width);\r\n    }\r\n  }, [text, style]);\r\n\r\n  // TODO: make it a util function as well\r\n  return width + boundary;\r\n};\r\n","import { useEffect, useState } from 'react';\r\n\r\nexport function useDebouncedValue<T>(value: T, delay: number): T {\r\n  const [debouncedValue, setDebouncedValue] = useState(value);\r\n\r\n  useEffect(() => {\r\n    const timer = setTimeout(() => {\r\n      setDebouncedValue(value);\r\n    }, delay);\r\n\r\n    return () => {\r\n      clearTimeout(timer);\r\n    };\r\n  }, [value, delay]);\r\n\r\n  return debouncedValue;\r\n}\r\n\r\nexport function debounce(func, wait) {\r\n  let timeout;\r\n\r\n  return function executedFunction(...args) {\r\n    const later = () => {\r\n      clearTimeout(timeout);\r\n      func(...args);\r\n    };\r\n\r\n    clearTimeout(timeout);\r\n    timeout = setTimeout(later, wait);\r\n  };\r\n}\r\n","import { useCallback, useRef, useState } from 'react';\r\n\r\nexport function useIntersectionObserverWithRefCallback(\r\n  { threshold = 0, root = null, rootMargin = '20px' }: IntersectionObserverInit,\r\n  unobserve: boolean = false\r\n) {\r\n  const ref = useRef(null);\r\n  const [entry, setEntry] = useState<IntersectionObserverEntry>();\r\n  const updateEntry = ([intersectionObserverEntry]: IntersectionObserverEntry[]): void => {\r\n    setEntry(intersectionObserverEntry);\r\n  };\r\n  const updateEntryAndUnobserve = ([intersectionObserverEntry]: IntersectionObserverEntry[], observer): void => {\r\n    setEntry(intersectionObserverEntry);\r\n    !!intersectionObserverEntry?.isIntersecting && ref.current && observer.unobserve(ref.current);\r\n  };\r\n  const setRef = useCallback(\r\n    (node) => {\r\n      if (node) {\r\n        const observerOptions = { threshold, root, rootMargin };\r\n        const observer = new IntersectionObserver(unobserve ? updateEntryAndUnobserve : updateEntry, observerOptions);\r\n        observer.observe(node);\r\n      }\r\n      ref.current = node;\r\n    },\r\n    [threshold, root, rootMargin, unobserve]\r\n  );\r\n  return [entry, setRef] as const;\r\n}\r\n","import React from 'react';\r\n\r\nexport const useNativeAdSdk = () => {\r\n  const [isSdkLoaded, setSdkLoaded] = React.useState(false);\r\n\r\n  // load ad preview SDK at parent level to cache the script\r\n  React.useEffect(() => {\r\n    const script = document.createElement('script');\r\n    script.src = 'https://adsdk.microsoft.com/ad-preview/sdk.js';\r\n    script.async = true;\r\n    script.crossOrigin = 'anonymous';\r\n\r\n    script.onload = () => {\r\n      setSdkLoaded(true);\r\n    };\r\n\r\n    document.head.appendChild(script);\r\n\r\n    // Cleanup function to remove the script when component unmounts\r\n    return () => {\r\n      document.head.removeChild(script);\r\n    };\r\n  }, []);\r\n\r\n  return {\r\n    isSdkLoaded,\r\n  };\r\n};\r\n","import { useEffect, useState } from 'react';\r\n\r\nexport const usePUID = (): string | null => {\r\n  const [puid, setPUID] = useState<string | null>(null);\r\n\r\n  useEffect(() => {\r\n    // Check if \"msal.account.keys\" exists in localStorage\r\n    const msalAccountKeys = localStorage.getItem('msal.account.keys');\r\n\r\n    if (msalAccountKeys) {\r\n      try {\r\n        // Parse the value as JSON\r\n        const keysArray = JSON.parse(msalAccountKeys);\r\n\r\n        if (Array.isArray(keysArray) && keysArray[0]) {\r\n          const idTokenClaims = JSON.parse(localStorage.getItem(keysArray[0])!)?.idTokenClaims;\r\n\r\n          if (idTokenClaims?.puid) {\r\n            // Set the PUID state to the retrieved value\r\n            setPUID(idTokenClaims.puid);\r\n          }\r\n        }\r\n      } catch (error) {\r\n        console.error('Error parsing JSON or retrieving PUID:', error);\r\n      }\r\n    }\r\n  }, []);\r\n\r\n  return puid;\r\n};\r\n","import { useEffect } from 'react';\r\n\r\nexport const usePreloadSVGImages = (imageList: string[]) => {\r\n  useEffect(() => {\r\n    const preloadContainer = document.createElement('div');\r\n    preloadContainer.style.display = 'none';\r\n\r\n    imageList.forEach((imageSrc) => {\r\n      const img = new Image();\r\n      img.src = imageSrc;\r\n      img.width = 0;\r\n      img.height = 0;\r\n      preloadContainer.appendChild(img);\r\n    });\r\n\r\n    document.body.appendChild(preloadContainer);\r\n\r\n    return () => {\r\n      // Cleanup to remove the preloaded images when not needed\r\n      document.body.removeChild(preloadContainer);\r\n    };\r\n    // eslint-disable-next-line\r\n  }, []);\r\n};\r\n","import React, { useEffect, useState } from 'react';\r\nimport { ICustomColumn } from '../types';\r\nimport { sortItemsBasedOnColumn } from '../utils/DataGridUtils/SortingUtils';\r\n\r\nexport function useSortableGridColumns<ItemType>(\r\n  columns: ICustomColumn<ItemType>[],\r\n  items: ItemType[],\r\n  onSortItems?: (items: ItemType[]) => void,\r\n  onCleanupSortItems?: () => void\r\n) {\r\n  const [gridColumns, setGridColumns] = useState<ICustomColumn<ItemType>[]>(columns);\r\n\r\n  useEffect(() => {\r\n    setGridColumns(columns);\r\n  }, [columns]);\r\n\r\n  useEffect(() => {\r\n    return () => onCleanupSortItems?.();\r\n  }, [onCleanupSortItems]);\r\n\r\n  function handleColumnHeaderClick(ev?: React.MouseEvent<HTMLElement>, column?: ICustomColumn) {\r\n    if (!column || column.suppressSorting) {\r\n      return;\r\n    }\r\n    ev?.stopPropagation();\r\n\r\n    const newColumns = gridColumns.slice();\r\n    const currColumn = newColumns.filter((currCol) => column.key === currCol.key)[0];\r\n\r\n    newColumns.forEach((col: ICustomColumn) => {\r\n      if (col === currColumn) {\r\n        currColumn.isSortedDescending = !currColumn.isSortedDescending;\r\n        currColumn.isSorted = true;\r\n      } else {\r\n        col.isSorted = false;\r\n        col.isSortedDescending = undefined;\r\n      }\r\n    });\r\n\r\n    setGridColumns(newColumns);\r\n    const sortedItems = sortItemsBasedOnColumn(items, currColumn);\r\n    onSortItems?.(sortedItems);\r\n  }\r\n\r\n  return { gridColumns, handleColumnHeaderClick };\r\n}\r\n","import { Dispatch, SetStateAction, useEffect, useRef, useState } from 'react';\r\n\r\ntype UseStateWithLatestCallback<S> = [S, Dispatch<SetStateAction<S>>, () => S];\r\n\r\nexport function useStateWithLatestCallback<S>(initialState: S): UseStateWithLatestCallback<S> {\r\n  const [state, setState] = useState(initialState);\r\n  const stateRef = useRef(state);\r\n\r\n  useEffect(() => {\r\n    stateRef.current = state;\r\n  }, [state]);\r\n\r\n  const getState = () => stateRef.current;\r\n\r\n  return [state, setState, getState];\r\n}\r\n","import { mutatorAction } from 'satcheljs';\r\nimport { IUseWindowSize, IWindowSize, WindowSizeType } from './index.types';\r\nimport { getStore } from './store/store';\r\n\r\nexport const useWindowSize = (): IUseWindowSize => {\r\n  const windowSizeFormatter = (width?: number): WindowSizeType => {\r\n    if (!width) {\r\n      return undefined;\r\n    } else if (width < 320) {\r\n      return 'extraSmall';\r\n    } else if (width < 640) {\r\n      return 'small';\r\n    } else if (width < 1024) {\r\n      return 'medium';\r\n    }\r\n    return 'regular';\r\n  };\r\n\r\n  const onWindowResize = mutatorAction('WindowSize', ({ innerHeight, innerWidth }: Window) => {\r\n    if (window.innerWidth < 320) {\r\n      window.resizeTo(320, window.innerHeight);\r\n    }\r\n    const store = getStore();\r\n    store.height = innerHeight;\r\n    store.width = innerWidth;\r\n  });\r\n\r\n  const windowStoreSerializer = (windowSize: IWindowSize) => {\r\n    const windowSizeType = windowSizeFormatter(windowSize.width);\r\n    return {\r\n      ...windowSize,\r\n      isWindowExtraSmallSize: windowSizeType === 'extraSmall',\r\n      isWindowSmallSize: windowSizeType === 'small',\r\n      isWindowMediumSize: windowSizeType === 'medium',\r\n      isWindowRegularSize: windowSizeType === 'regular',\r\n    };\r\n  };\r\n\r\n  return {\r\n    onWindowResize,\r\n    windowStoreSerializer,\r\n    windowSizeFormatter,\r\n  };\r\n};\r\n","import { AdSource } from '../../../../../../@data';\r\nimport { FilterCondition } from '../../../../../../@data/store/schema/enums/FilterCondition';\r\nimport { IIdNamePair } from '../../../../../../components/MultiSelectPicker';\r\nimport { AdPerformanceData, BlockAdsData, SAMBlockSummaryData } from './models';\r\n\r\nexport enum FilterType {\r\n  Text,\r\n  Numerical,\r\n  List,\r\n}\r\n\r\nexport enum AdQualityFilterNames {\r\n  AccountName = 'Account Name',\r\n  AdProviders = 'Ad Providers',\r\n  Markets = 'Markets',\r\n  Advertiser = 'Advertiser',\r\n  AdvertiserId = 'Advertiser Id',\r\n  AdvertiserAccountId = 'Advertiser Account Id',\r\n  AdId = 'Ad Id',\r\n  AdTitle = 'Ad Title',\r\n  AdURL = 'Ad URL',\r\n  CreativeAdId = 'Creative Ad Id',\r\n  LongHeadline = 'Long Headline',\r\n  ShortHeadline = 'Short Headline',\r\n}\r\n\r\nexport interface IConditionValue<ValueType> {\r\n  condition?: FilterCondition;\r\n  value?: ValueType;\r\n  isApplied?: boolean;\r\n}\r\n\r\nexport interface ITextFilter {\r\n  filterType?: FilterType.Text;\r\n  conditions?: IConditionValue<string>[];\r\n}\r\n\r\nexport interface INumericalFilter {\r\n  filterType?: FilterType.Numerical;\r\n  conditions?: IConditionValue<string>[];\r\n}\r\n\r\nexport interface IListFilter {\r\n  filterType?: FilterType.List;\r\n  values: IIdNamePair[];\r\n}\r\n\r\nexport interface IAdQualityFilter {\r\n  [AdQualityFilterNames.AccountName]?: IListFilter;\r\n  [AdQualityFilterNames.AdProviders]?: IListFilter;\r\n  [AdQualityFilterNames.Markets]?: IListFilter;\r\n  [AdQualityFilterNames.Advertiser]?: ITextFilter;\r\n  [AdQualityFilterNames.AdvertiserId]?: INumericalFilter;\r\n  [AdQualityFilterNames.AdvertiserAccountId]?: INumericalFilter;\r\n  [AdQualityFilterNames.AdId]?: INumericalFilter;\r\n  [AdQualityFilterNames.AdTitle]?: ITextFilter;\r\n  [AdQualityFilterNames.AdURL]?: ITextFilter;\r\n  [AdQualityFilterNames.CreativeAdId]?: ITextFilter;\r\n  [AdQualityFilterNames.LongHeadline]?: ITextFilter;\r\n  [AdQualityFilterNames.ShortHeadline]?: ITextFilter;\r\n}\r\n\r\nexport interface IAdCreativeViewModel {\r\n  accounts?: IIdNamePair[];\r\n  adProviders?: IIdNamePair[];\r\n  markets?: IIdNamePair[];\r\n  selectedAccount?: number;\r\n  selectedMarket?: string;\r\n  searchBoxValue?: string;\r\n  startDate?: Date;\r\n  endDate?: Date;\r\n  adPerfData?: AdPerformanceData[];\r\n  blockRequestSourceData?: Map<number, string>;\r\n  blockSummaryStartDate?: Date;\r\n  blockSummaryEndDate?: Date;\r\n  blockSummaryData?: BlockAdsData[];\r\n  samBlockSummaryData?: SAMBlockSummaryData[];\r\n  selectedAdSource?: AdSource;\r\n  selectedAdProviderId?: number;\r\n  selectedBlockedMarketId?: number;\r\n  active?: IAdQualityFilter;\r\n  raw?: IAdQualityFilter;\r\n}\r\n","import { createStore } from 'satcheljs';\r\nimport { DEFAULT_PUBLISHER_CACHE_KEY, EN_LOCALE_KEY, LOCAL_STORAGE_LOCALE, SESSION_NOTIFICATIONS_UI } from '../../constants/AppConstants';\r\nimport { restoreTypeWithObject } from '../../utils/ObjectUtils';\r\nimport { Account, CustomPanelType, PopupType, Publisher, UserContext } from './schema';\r\nimport { IAppState } from './schema/IAppState';\r\n\r\nexport const StoragePublisherKey = 'app.publisher';\r\nexport const StorageAccountKey = 'app.account';\r\nexport const StorageTokenKey = 'token';\r\nexport const StorageUserContextKey = 'app.userContext';\r\nexport const StorageIsUserInviteFlowKey = 'app.isUserInviteFlow';\r\nexport const StorageUserInvitationCodeFlowKey = 'app.UserInvitationCode';\r\nconst storedNotifications = sessionStorage.getItem(SESSION_NOTIFICATIONS_UI);\r\n\r\nexport const getAppStore = createStore<IAppState>('AppViewState', {\r\n  account: restoreTypeWithObject(new Account(), localStorage.getItem(StorageAccountKey)) || undefined,\r\n  loading: false,\r\n  waiting: false,\r\n  saving: false,\r\n  openedPopup: PopupType.None,\r\n  openedPanel: CustomPanelType.None,\r\n  isFirstTimeUser: false,\r\n  isUserSuspended: false,\r\n  menuCollapsed: false,\r\n  isInviteUserFlow: localStorage.getItem(StorageIsUserInviteFlowKey) === 'true' ? true : false,\r\n  userInvitationCode: localStorage.getItem(StorageUserInvitationCodeFlowKey) || undefined,\r\n  notifications: [],\r\n  toastNotifications: [],\r\n  notificationPanelCollapsed: false,\r\n  panelNotifications: storedNotifications ? JSON.parse(storedNotifications) : [],\r\n  publisher: restoreTypeWithObject(new Publisher(), localStorage.getItem(StoragePublisherKey)) || undefined,\r\n  userContext: restoreTypeWithObject(new UserContext(), localStorage.getItem(StorageUserContextKey)) || undefined,\r\n  helpInfo: '',\r\n  entityGridColumns: [],\r\n  // Removing default LayoutMode setting as it increases the loading time for pages with other layout modes,\r\n  // Since API call is made to fetch publisher details and accounts list for the account picker\r\n  // layout: LayoutMode.Default,\r\n  defaultPublisher: Number(localStorage.getItem(DEFAULT_PUBLISHER_CACHE_KEY)) || 0,\r\n  accessiblePublishers: [],\r\n  deleteAdUnitTemplateOnSubmit: false,\r\n  locale: localStorage.getItem(LOCAL_STORAGE_LOCALE) ?? EN_LOCALE_KEY,\r\n});\r\n","export function getScreenReaderTextStyles() {\r\n  return {\r\n    display: 'none',\r\n  };\r\n}\r\n\r\nexport const flexWithAlignCenter = {\r\n  display: 'flex',\r\n  alignItems: 'center',\r\n};\r\n\r\nexport const flexWithCenter = {\r\n  ...flexWithAlignCenter,\r\n  justifyContent: 'center',\r\n};\r\n\r\nexport const flexWithJustifyBetween = {\r\n  ...flexWithAlignCenter,\r\n  justifyContent: 'space-between',\r\n};\r\n\r\nexport const noPointerEvents = {\r\n  pointerEvents: 'none',\r\n};\r\n\r\nexport const zeroMarginPTag = {\r\n  margin: 0,\r\n};\r\n","import { action } from 'satcheljs';\r\nimport { Account } from '../store/schema';\r\n\r\nexport const onAccountChanged = action('onAccountChanged', (account?: Account) => ({ account }));\r\nexport const onAccountSelected = action('onAccountSelected', (id: string) => ({ id }));\r\n","import { action } from 'satcheljs';\r\nimport { UserContext } from '../store/schema';\r\n\r\nexport const onAuthLogout = action('onAuthLogout', ({ isTokenExpired = false } = {}) => ({ isTokenExpired }));\r\nexport const onUserContextChanged = action('onUserContextChanged', (userDetails?: UserContext) => ({ userDetails }));\r\n","import { action } from 'satcheljs';\r\nimport { IEntityGridColumns } from '..';\r\n\r\nexport const onEntityGridColumnsChanged = action('onEntityGridColumnsChanged', (entityColumnsData: IEntityGridColumns) => ({\r\n  entityColumnsData\r\n}));\r\n","import { action } from 'satcheljs';\r\n\r\nexport const onHelpInfoCalloutOpened = action('onHelpInfoCalloutOpened ', (popupId: string, locale?: string) => ({ popupId, locale }));\r\n\r\nexport const onHelpInfoChanged = action('onHelpInfoChanged', (helpInfo?: string) => ({ helpInfo }));\r\n","import { action } from 'satcheljs';\r\nimport { LayoutMode } from '../store/schema';\r\n\r\nexport const onLayoutChanged = action('onLayoutChanged', (layout: LayoutMode) => ({ layout }));\r\n","import { action } from 'satcheljs';\r\n\r\nexport const onMenuCollapsedChanged = action('onMenuCollapsedChanged', (collapsed: boolean) => ({ collapsed }));\r\n","import { History } from 'history';\r\nimport { action } from 'satcheljs';\r\n\r\nexport const onNavigateBack = action('onNavigateBack', (routeHistory?: History, returnUrl?: string) => ({ routeHistory, returnUrl }));\r\n\r\nexport const redirectToReportingDashboard = action('redirectToReportingDashboard');\r\n\r\nexport const handleDomainRedirection = action('handleDomainRedirection', (username?: string, pathname?: string) => ({\r\n  username,\r\n  pathname,\r\n}));\r\n","import { action } from 'satcheljs';\r\nimport { INotificationBarItem } from '../../components/NotificationBar';\r\n\r\nexport const onNotificationChanged = action('onNotificationChanged', (notification: INotificationBarItem) => ({\r\n  notification,\r\n}));\r\n\r\nexport const onNotificationRemoved = action('onNotificationRemoved', (notification: INotificationBarItem) => ({ notification }));\r\n","import { InjectedIntl } from 'react-intl';\r\nimport { action } from 'satcheljs';\r\nimport { INotificationCardItem } from '../../components/NotificationCard';\r\n\r\nexport const onNotificationCardAdded = action('onNotificationCardAdded', (notification: INotificationCardItem) => ({\r\n  notification,\r\n}));\r\n\r\nexport const onNotificationCardRemoved = action('onNotificationCardRemoved', (id: string) => ({\r\n  id,\r\n}));\r\n\r\nexport const onDismissAllNotifications = action('onDismissAllNotifications');\r\n\r\nexport const fetchBackendNotifications = action('fetchBackendNotifications', (intl: InjectedIntl) => ({\r\n  intl,\r\n}));\r\n\r\nexport const onNotificationPanelItemsChanged = action('onNotificationPanelItemsChanged', (value: INotificationCardItem[]) => ({\r\n  value,\r\n}));\r\n\r\nexport const onDismissNotification = action('onDismissNotification', (notification: INotificationCardItem) => ({\r\n  notification,\r\n}));\r\n\r\nexport const onNotificationPanelClosed = action('onNotificationPanelClosed', (isClosed: boolean) => ({ isClosed }));\r\n","import { History } from 'history';\r\nimport { action } from 'satcheljs';\r\nimport { Publisher } from '../store/schema';\r\nimport { IUserAccessiblePublisher } from '../store/schema/interfaces/IUserRoleData';\r\n\r\nexport const onPublisherChanged = action('onPublisherChanged', (publisher?: Publisher) => ({ publisher }));\r\nexport const onPublisherSelected = action('onPublisherSelected', (id: string, routeHistory?: History) => ({ id, routeHistory }));\r\nexport const onDefaultPublisherSet = action('onDefaultPublisherSet', (id: number) => ({ id }));\r\nexport const onAccessiblePublisherListChanged = action('onAccessiblePublisherListChanged', (value: IUserAccessiblePublisher[]) => ({\r\n  value,\r\n}));\r\nexport const onPublisherAccountChanged = action('onPublisherAccountChanged', (publisherId: string, accountId: string, routeHistory) => ({\r\n  publisherId,\r\n  accountId,\r\n  routeHistory,\r\n}));\r\n","import { mutatorAction } from 'satcheljs';\r\nimport { getAppStore } from '../store/store';\r\n\r\nexport const onUserFirstTime = mutatorAction('ON_USER_FIRST_TIME_CHANGED', function userFirstTimeChanged(value: boolean) {\r\n  const store = getAppStore();\r\n  store.isFirstTimeUser = value;\r\n});\r\n\r\nexport const onUserUserSuspended = mutatorAction('onUserUserSuspended', (value: boolean) => {\r\n  const store = getAppStore();\r\n  store.isUserSuspended = value;\r\n});\r\n","import { defineMessages } from 'react-intl';\r\n\r\nexport default defineMessages({\r\n  ProfileReviewTSTFailedTitle: {\r\n    id: 'notifications.profileReviewTSTFailedTitle',\r\n    defaultMessage: 'Your profile has been rejected ',\r\n  },\r\n  ProfileReviewTSTFailedContent: {\r\n    id: 'notifications.profileReviewTSTFailedContent',\r\n    defaultMessage:\r\n      'We have rejected your profile because it doesn’t comply with our Terms and Conditions. In seven days, all account information and data will be deleted and cannot be restored.',\r\n  },\r\n  MissingPaymentInformationTitle: {\r\n    id: 'notifications.missingPaymentInformationTitle',\r\n    defaultMessage: 'Update your payment information',\r\n  },\r\n  MissingPaymentInformationContent: {\r\n    id: 'notifications.missingPaymentInformationContent',\r\n    defaultMessage:\r\n      'You’ll need to set up your payment information to start earning with {appName}. Add your payment details to get started.',\r\n  },\r\n  MissingPaymentInformationPrimaryActionLabel: {\r\n    id: 'notifications.missingPaymentInformationAction',\r\n    defaultMessage: 'Set up payments',\r\n  },\r\n  PolicyUpdatePrimaryActionLabel: {\r\n    id: 'notifications.policyUpdatePrimaryActionLabel',\r\n    defaultMessage: 'Accept Terms and Conditions',\r\n  },\r\n  PaymentFailedTitle: {\r\n    id: 'notifications.PaymentFailedTitle',\r\n    defaultMessage: 'Payment Failed',\r\n  },\r\n  PaymentFailedReason_account_closed: {\r\n    id: 'notifications.PaymentFailedReason_account_closed',\r\n    defaultMessage: 'Your payout failed because your bank account is closed. Please contact your banking institution for questions.',\r\n  },\r\n  PaymentFailedTitle_bank_account_restricted: {\r\n    id: 'notifications.PaymentFailedTitle_bank_account_restricted',\r\n    defaultMessage: 'Restricted payment method',\r\n  },\r\n  PaymentFailedReason_bank_account_restricted: {\r\n    id: 'notifications.PaymentFailedReason_bank_account_restricted',\r\n    defaultMessage:\r\n      'Your bank may have restrictions on the type and number of transfers allowed. This can indicate that your account is a savings or non-checking account.',\r\n  },\r\n  PaymentFailedReasonStripe_could_not_process: {\r\n    id: 'notifications.PaymentFailedReasonStripe_could_not_process',\r\n    defaultMessage: 'Stripe is unable to process your payment.',\r\n  },\r\n  PaymentFailedReason_could_not_process: {\r\n    id: 'notifications.PaymentFailedReason_could_not_process',\r\n    defaultMessage: 'Your bank could not process this transfer.',\r\n  },\r\n  PaymentFailedTitle_declined: {\r\n    id: 'notifications.PaymentFailedTitle_declined',\r\n    defaultMessage: 'Payment declined',\r\n  },\r\n  PaymentFailedReason_declined: {\r\n    id: 'notifications.PaymentFailedReason_declined',\r\n    defaultMessage: 'Your bank has declined the transfer of your payment. Please contact your banking institution for clarification.',\r\n  },\r\n  PaymentFailedTitle_expired_card: {\r\n    id: 'notifications.PaymentFailedTitle_expired_card',\r\n    defaultMessage: 'Expired credit card',\r\n  },\r\n  PaymentFailedReason_expired_card: {\r\n    id: 'notifications.PaymentFailedReason_expired_card',\r\n    defaultMessage: 'Your card has expired. Please contact your card issuer to fix any issues or consider changing your payment method.',\r\n  },\r\n  PaymentFailedTitle_incorrect_account_holder_name: {\r\n    id: 'notifications.PaymentFailedTitle_incorrect_account_holder_name',\r\n    defaultMessage: 'Invalid account holder name',\r\n  },\r\n  PaymentFailedReason_incorrect_account_holder_name: {\r\n    id: 'notifications.PaymentFailedReason_incorrect_account_holder_name',\r\n    defaultMessage:\r\n      'Your account details may have been entered incorrectly. Please check that you’ve entered the account holder’s name correctly before trying again.',\r\n  },\r\n  PaymentFailedTitle_invalid_account_number: {\r\n    id: 'notifications.PaymentFailedTitle_invalid_account_number',\r\n    defaultMessage: 'Invalid payment method',\r\n  },\r\n  PaymentFailedReason_invalid_account_number: {\r\n    id: 'notifications.PaymentFailedReason_invalid_account_number',\r\n    defaultMessage:\r\n      'Your payment details may be invalid. Please check that you’ve entered your account number correctly before trying again.',\r\n  },\r\n  PaymentFailedTitle_invalid_card: {\r\n    id: 'notifications.PaymentFailedTitle_invalid_card',\r\n    defaultMessage: 'Invalid payment method',\r\n  },\r\n  PaymentFailedReason_invalid_card: {\r\n    id: 'notifications.PaymentFailedReason_invalid_card',\r\n    defaultMessage: 'Your payment method is invalid. Please contact your card issuer and resolve the issue before trying again.',\r\n  },\r\n  PaymentFailedTitle_invalid_currency: {\r\n    id: 'notifications.PaymentFailedTitle_invalid_currency',\r\n    defaultMessage: 'Unavailable currency',\r\n  },\r\n  PaymentFailedReason_invalid_currency: {\r\n    id: 'notifications.PaymentFailedReason_invalid_currency',\r\n    defaultMessage:\r\n      'Your banking institution was unable to process your payment in your desired currency. Check with your banking institution to make sure that they allow international transactions.',\r\n  },\r\n  PaymentFailedTitle_lost_or_stolen_card: {\r\n    id: 'notifications.PaymentFailedTitle_lost_or_stolen_card',\r\n    defaultMessage: 'Lost or stolen card',\r\n  },\r\n  PaymentFailedReason_lost_or_stolen_card: {\r\n    id: 'notifications.PaymentFailedReason_lost_or_stolen_card',\r\n    defaultMessage:\r\n      'Your card has been reported lost or stolen. Please contact the card issuer to fix any issues with your card. Then update your card or switch to a different payment method.',\r\n  },\r\n  PaymentFailedTitle_no_account: {\r\n    id: 'notifications.PaymentFailedTitle_no_account',\r\n    defaultMessage: 'Invalid account',\r\n  },\r\n  PaymentFailedReason_no_account: {\r\n    id: 'notifications.PaymentFailedReason_no_account',\r\n    defaultMessage: 'Your payment method is invalid. Please check that you’ve entered your account number correctly before trying again.',\r\n  },\r\n  PaymentFailedReasonLocate_no_account: {\r\n    id: 'notifications.PaymentFailedReasonLocate_no_account',\r\n    defaultMessage:\r\n      'We couldn’t locate your banking details. Please check that you’ve entered your account number correctly before trying again. ',\r\n  },\r\n  ClarityLinkExpiredTitle: {\r\n    id: 'notifications.ClarityLinkExpiredTitle',\r\n    defaultMessage: 'Clarity project {projectId} linking failed',\r\n  },\r\n  ClarityLinkExpiredContent: {\r\n    id: 'notifications.ClarityLinkExpiredContent',\r\n    defaultMessage:\r\n      'The request to link your site {propertyName} with Clarity project ID {projectId} failed as the request was not approved by Clarity admin. Please re-trigger the request to ensure your ad serving does not get impacted.',\r\n  },\r\n  ClarityLinkDeclinedTitle: {\r\n    id: 'notifications.ClarityLinkDeclinedTitle',\r\n    defaultMessage: 'Clarity project {projectId} linking failed',\r\n  },\r\n  ClarityLinkDeclinedContent: {\r\n    id: 'notifications.ClarityLinkDeclinedContent',\r\n    defaultMessage:\r\n      'The request to link your site {propertyName} with Clarity project ID {projectId} failed as the request was rejected by Clarity admin. Please re-trigger the request to ensure your ad serving does not get impacted.',\r\n  },\r\n  ClarityLinkExpiredPrimaryActionLabel: {\r\n    id: 'notifications.ClarityLinkExpiredPrimaryActionLabel',\r\n    defaultMessage: 'Resend link request',\r\n  },\r\n  ClarityLinkDeclinedPrimaryActionLabel: {\r\n    id: 'notifications.ClarityLinkDeclinedPrimaryActionLabel',\r\n    defaultMessage: 'Resend link request',\r\n  },\r\n  ClarityLinkExpiredSecondaryActionLabel: {\r\n    id: 'notifications.ClarityLinkExpiredSecondaryActionLabel',\r\n    defaultMessage: 'Edit Project Id',\r\n  },\r\n  ClarityLinkDeclinedSecondaryActionLabel: {\r\n    id: 'notifications.ClarityLinkDeclinedSecondaryActionLabel',\r\n    defaultMessage: 'Edit Project Id',\r\n  },\r\n  ChooseGamNetworkFailureContent: {\r\n    id: 'gamNetworkSelection.notification.post.failed',\r\n    defaultMessage: 'Failed to update google network selection. Please refresh the page and try again later.',\r\n  },\r\n  ChooseGamNetworkFailureTitle: {\r\n    id: 'gamNetworkSelection.notification.post.failed.title',\r\n    defaultMessage: 'Update google network selection',\r\n  },\r\n  ChangingItemStatusFailureTitle: {\r\n    id: 'grid.changingItemStatusFailureTitle',\r\n    defaultMessage: 'Status change error',\r\n  },\r\n  ChangingItemStatusFailureContent: {\r\n    id: 'grid.changingItemStatusFailureContent',\r\n    defaultMessage: 'Something went wrong while changing the status. Please try again later.',\r\n  },\r\n  DeletingItemFailureTitle: {\r\n    id: 'grid.deletingItemFailureTitle',\r\n    defaultMessage: 'Delete failed',\r\n  },\r\n  DeletingItemFailureContent: {\r\n    id: 'grid.deletingItemFailureContent',\r\n    defaultMessage: 'Something went wrong while deleting the item. Please try again later.',\r\n  },\r\n  DuplicateGridItemFailureTitle: {\r\n    id: 'grid.duplicatingGridItemFailureTitle',\r\n    defaultMessage: 'Duplicating grid item failed',\r\n  },\r\n  DuplicateGridItemFailureContent: {\r\n    id: 'grid.duplicatingGridItemFailureContent',\r\n    defaultMessage: 'Something went wrong while duplicating the grid item. Please try again later',\r\n  },\r\n  GridDataDownloadFailureTitle: {\r\n    id: 'grid.dataDownloadFailureTitle',\r\n    defaultMessage: 'No data found',\r\n  },\r\n  GridDataDownloadFailureContent: {\r\n    id: 'grid.dataDownloadFailureContent',\r\n    defaultMessage: 'No data available to download',\r\n  },\r\n  FeedbackErrorMessageContent: {\r\n    id: 'feedbackErrorMessage.content',\r\n    defaultMessage: 'Something went wrong while submitting your feedback. Please try again later.',\r\n  },\r\n  FeedbackErrorMessageTitle: {\r\n    id: 'feedbackErrorMessage.title',\r\n    defaultMessage: 'Feedback submit failed',\r\n  },\r\n  FeedBackInvalidFormMessageContent: {\r\n    id: 'feedBackInvalidFormMessage.content',\r\n    defaultMessage: 'Feedback form is invalid. Please check the form details and try again.',\r\n  },\r\n  FeedBackInvalidFormMessageTitle: {\r\n    id: 'feedBackInvalidFormMessage.title',\r\n    defaultMessage: 'Feedback submit failed',\r\n  },\r\n  PropertyEditFailedNotificationContent: {\r\n    id: 'siteManagement.propertyEditFailedNotificationContent',\r\n    defaultMessage: 'Something went wrong while updating the item. Please try again later.',\r\n  },\r\n  PropertyEditFailedNotificationTitle: {\r\n    id: 'siteManagement.propertyEditFailedNotificationTitle',\r\n    defaultMessage: 'Failed to submit site details',\r\n  },\r\n  LoadingSitesFailedTitle: {\r\n    id: 'adunit.loadingSitesFailedTitle',\r\n    defaultMessage: 'No site found',\r\n  },\r\n  LoadingSitesFailedContent: {\r\n    id: 'adunit.loadingSitesFailedContent',\r\n    defaultMessage: 'Something went wrong while loading your sites. Please try again later',\r\n  },\r\n  DuplicatedSiteCreationErrorNotificationTitle: {\r\n    id: 'tython.adunit.create.duplicated.site.error.notification.title',\r\n    defaultMessage: 'Duplicated site creation',\r\n  },\r\n  DuplicatedSiteCreationErrorNotificationContent: {\r\n    id: 'tython.adunit.create.duplicated.site.error.notification.content',\r\n    defaultMessage: 'Your new site ({name}: {url}) has duplicated name or url against an existing site',\r\n  },\r\n  AdblockUpdateFailedTitle: {\r\n    id: 'adBlock.adblockUpdateFailedTitle',\r\n    defaultMessage: 'Ad block update failed',\r\n  },\r\n  AdblockUpdateFailedContent: {\r\n    id: 'adBlock.adblockUpdateFailedContent',\r\n    defaultMessage: `Something went wrong while updating Ad blocks for site {siteId}. Please try again later`,\r\n  },\r\n  AdblockToggleFailedContent: {\r\n    id: 'adBlock.adblockToggleFailedContent',\r\n    defaultMessage: `Something went wrong while toggling block settings for site {siteId}. Please try again later`,\r\n  },\r\n  AdblockToggleFailedTitle: {\r\n    id: 'adBlock.adblockToggleFailedTitle',\r\n    defaultMessage: `Ad block update failed`,\r\n  },\r\n  ToggleUniversalBlockFailedContent: {\r\n    id: 'adBlock.toggleUniversalBlockFailedContent',\r\n    defaultMessage: `We encountered an issue while toggling universal blocks. Please try again later.`,\r\n  },\r\n  ToggleUniversalBlockFailedTitle: {\r\n    id: 'adBlock.toggleUniversalBlockFailedTitle',\r\n    defaultMessage: `Ad block update failed`,\r\n  },\r\n  UniversalAdblockUpdateFailedContent: {\r\n    id: 'adBlock.universalAdblockUpdateFailedContent',\r\n    defaultMessage: `We encountered an issue while updating universal blocks. Please try again later.`,\r\n  },\r\n  UniversalAdblockUpdateFailedTitle: {\r\n    id: 'adBlock.universalAdblockUpdateFailedTitle',\r\n    defaultMessage: `Ad block update failed`,\r\n  },\r\n  PayoutInformationFailedContent: {\r\n    id: 'paymentPage.payoutInformationFailedContent',\r\n    defaultMessage: 'Something went wrong while loading your payout information. Please try again later',\r\n  },\r\n  PayoutInformationFailedTitle: {\r\n    id: 'paymentPage.payoutInformationFailedTitle',\r\n    defaultMessage: 'No data found',\r\n  },\r\n  LoadingBalanceDataFailedContent: {\r\n    id: 'paymentPage.loadingBalanceDataFailedContent',\r\n    defaultMessage: 'Something went wrong while loading your balance data. Please try again later',\r\n  },\r\n  LoadingBalanceDataFailedTitle: {\r\n    id: 'paymentPage.loadingBalanceDataFailedTitle',\r\n    defaultMessage: 'No data found',\r\n  },\r\n  LoadPayoutInfoFailedContent: {\r\n    id: 'loadPayoutInfo.failedContent',\r\n    defaultMessage: 'Something went wrong while loading your payout information. Please try again later',\r\n  },\r\n  LoadPayoutInfoFailedTitle: {\r\n    id: 'loadPayoutInfo.failedTitle',\r\n    defaultMessage: 'No data found',\r\n  },\r\n  DeletingUserWentWrongContent: {\r\n    id: 'userManagement.deletingUserWentWrongContent',\r\n    defaultMessage: 'Something went wrong while deleting user.',\r\n  },\r\n  DeletingUserWentWrongTitle: {\r\n    id: 'userManagement.deletingUserWentWrongTitle',\r\n    defaultMessage: 'Failed to delete user',\r\n  },\r\n\r\n  PaymentFailedAccountClosedTitle: {\r\n    id: 'notifications.PaymentFailedAccountClosedTitle',\r\n    defaultMessage: 'Payment Failed',\r\n  },\r\n  PaymentFailedAccountClosedContent: {\r\n    id: 'notifications.PaymentFailedAccountClosedContent',\r\n    defaultMessage: 'Your payout failed because your bank account is closed. Please contact your banking institution for questions.',\r\n  },\r\n  PaymentFailedBankAccountRestrictedTitle: {\r\n    id: 'notifications.PaymentFailedBankAccountRestrictedTitle',\r\n    defaultMessage: 'Restricted payment method',\r\n  },\r\n  PaymentFailedBankAccountRestrictedContent: {\r\n    id: 'notifications.PaymentFailedBankAccountRestrictedContent',\r\n    defaultMessage:\r\n      'Your bank may have restrictions on the type and number of transfers allowed. This can indicate that your account is a savings or non-checking account.',\r\n  },\r\n  PaymentFailedStripeCouldNotProcessTitle: {\r\n    id: 'notifications.PaymentFailedStripeCouldNotProcessTitle',\r\n    defaultMessage: 'Payment Failed',\r\n  },\r\n  PaymentFailedStripeCouldNotProcessContent: {\r\n    id: 'notifications.PaymentFailedStripeCouldNotProcessContent',\r\n    defaultMessage: 'Stripe is unable to process your payment.',\r\n  },\r\n  PaymentFailedCouldNotProcessTitle: {\r\n    id: 'notifications.PaymentFailedCouldNotProcessTitle',\r\n    defaultMessage: 'Payment Failed',\r\n  },\r\n  PaymentFailedCouldNotProcessContent: {\r\n    id: 'notifications.PaymentFailedCouldNotProcessContent',\r\n    defaultMessage: 'Your bank could not process this transfer.',\r\n  },\r\n  PaymentFailedDeclinedTitle: {\r\n    id: 'notifications.PaymentFailedDeclinedTitle',\r\n    defaultMessage: 'Payment declined',\r\n  },\r\n  PaymentFailedDeclinedContent: {\r\n    id: 'notifications.PaymentFailedDeclinedContent',\r\n    defaultMessage: 'Your bank has declined the transfer of your payment. Please contact your banking institution for clarification.',\r\n  },\r\n  PaymentFailedExpiredCardTitle: {\r\n    id: 'notifications.PaymentFailedExpiredCardTitle',\r\n    defaultMessage: 'Expired credit card',\r\n  },\r\n  PaymentFailedExpiredCardContent: {\r\n    id: 'notifications.PaymentFailedExpiredCardContent',\r\n    defaultMessage: 'Your card has expired. Please contact your card issuer to fix any issues or consider changing your payment method.',\r\n  },\r\n  PaymentFailedIncorrectAccountHolderNameTitle: {\r\n    id: 'notifications.PaymentFailedIncorrectAccountHolderNameTitle',\r\n    defaultMessage: 'Invalid account holder name',\r\n  },\r\n  PaymentFailedIncorrectAccountHolderNameContent: {\r\n    id: 'notifications.PaymentFailedIncorrectAccountHolderNameContent',\r\n    defaultMessage:\r\n      \"Your account details may have been entered incorrectly. Please check that you've entered the account holder's name correctly before trying again.\",\r\n  },\r\n  PaymentFailedInvalidAccountNumberTitle: {\r\n    id: 'notifications.PaymentFailedInvalidAccountNumberTitle',\r\n    defaultMessage: 'Invalid payment method',\r\n  },\r\n  PaymentFailedInvalidAccountNumberContent: {\r\n    id: 'notifications.PaymentFailedInvalidAccountNumberContent',\r\n    defaultMessage:\r\n      \"Your payment details may be invalid. Please check that you've entered your account number correctly before trying again.\",\r\n  },\r\n  PaymentFailedInvalidCardTitle: {\r\n    id: 'notifications.PaymentFailedInvalidCardTitle',\r\n    defaultMessage: 'Invalid payment method',\r\n  },\r\n  PaymentFailedInvalidCardContent: {\r\n    id: 'notifications.PaymentFailedInvalidCardContent',\r\n    defaultMessage: 'Your payment method is invalid. Please contact your card issuer and resolve the issue before trying again.',\r\n  },\r\n  PaymentFailedInvalidCurrencyTitle: {\r\n    id: 'notifications.PaymentFailedInvalidCurrencyTitle',\r\n    defaultMessage: 'Unavailable currency',\r\n  },\r\n  PaymentFailedInvalidCurrencyContent: {\r\n    id: 'notifications.PaymentFailedInvalidCurrencyContent',\r\n    defaultMessage:\r\n      'Your banking institution was unable to process your payment in your desired currency. Check with your banking institution to make sure that they allow international transactions.',\r\n  },\r\n  PaymentFailedLostOrStolenCardTitle: {\r\n    id: 'notifications.PaymentFailedLostOrStolenCardTitle',\r\n    defaultMessage: 'Lost or stolen card',\r\n  },\r\n  PaymentFailedLostOrStolenCardContent: {\r\n    id: 'notifications.PaymentFailedLostOrStolenCardContent',\r\n    defaultMessage:\r\n      'Your card has been reported lost or stolen. Please contact the card issuer to fix any issues with your card. Then update your card or switch to a different payment method.',\r\n  },\r\n  PaymentFailedNoAccountTitle: {\r\n    id: 'notifications.PaymentFailedNoAccountTitle',\r\n    defaultMessage: 'Invalid account',\r\n  },\r\n  PaymentFailedNoAccountContent: {\r\n    id: 'notifications.PaymentFailedNoAccountContent',\r\n    defaultMessage: \"Your payment method is invalid. Please check that you've entered your account number correctly before trying again.\",\r\n  },\r\n  PaymentFailedNoAccountLocatedTitle: {\r\n    id: 'notifications.PaymentFailedNoAccountLocatedTitle',\r\n    defaultMessage: 'Invalid account',\r\n  },\r\n  PaymentFailedNoAccountLocatedContent: {\r\n    id: 'notifications.PaymentFailedNoAccountLocatedContent',\r\n    defaultMessage:\r\n      \"We couldn't locate your banking details. Please check that you've entered your account number correctly before trying again.\",\r\n  },\r\n  CreateTythonAdUnitFailedTitle: {\r\n    id: 'notifications.createTythonAdunitFailedTitle',\r\n    defaultMessage: 'Create ad unit failed',\r\n  },\r\n  ProfileInformationUpdatedTitle: {\r\n    id: 'notifications.profileInformationUpdated',\r\n    defaultMessage: `You've updated your profile.`,\r\n  },\r\n  ProfileInformationUpdatedContent: {\r\n    id: 'notifications.profileInformationUpdatedContent',\r\n    defaultMessage: `Your profile information has been updated`,\r\n  },\r\n});\r\n","import { InjectedIntl } from 'react-intl';\r\nimport { action } from 'satcheljs';\r\nimport { IProfileActive, SelfServePublisherActiveModel } from '../store/schema';\r\n\r\nexport const onInitializeProfilePage = action('onInitializeProfilePage', (publisherId: string, countryCode: string) => ({\r\n  publisherId,\r\n  countryCode,\r\n}));\r\n\r\nexport const fetchPublisherProfileDetailsAction = action('fetchPublisherProfileDetailsAction', (publisherId: string) => ({ publisherId }));\r\n\r\nexport const publisherProfileUpdatedAction = action('publisherProfileUpdatedAction');\r\n\r\nexport const updatePublisherProfileAction = action('updatePublisherProfileAction', (profile: SelfServePublisherActiveModel) => ({\r\n  profile,\r\n}));\r\n\r\nexport const fetchUserDetailsAction = action('fetchUserDetailsAction', (userId: number) => ({ userId }));\r\n\r\nexport const editProfileAction = action('editProfileAction');\r\n\r\nexport const validateAndPreviewProfileChangesAction = action(\r\n  'validateAndPreviewProfileChangesAction',\r\n  (profile: SelfServePublisherActiveModel, formatMessage: InjectedIntl['formatMessage'], isVerificationRequired: boolean) => ({\r\n    profile,\r\n    formatMessage,\r\n    isVerificationRequired,\r\n  })\r\n);\r\n\r\nexport const generateVerificationCode = action('generateVerificationCode', (profile: IProfileActive) => ({ profile }));\r\n\r\nexport const verifyGeneratedCode = action(\r\n  'verifyGeneratedCode',\r\n  (profile: IProfileActive, formatMessage: InjectedIntl['formatMessage']) => ({ profile, formatMessage })\r\n);\r\n\r\nexport const validateAddress = action(\r\n  'validateAddress',\r\n  (profile: SelfServePublisherActiveModel, formatMessage: InjectedIntl['formatMessage']) => ({ profile, formatMessage })\r\n);\r\n\r\nexport const validateOrgAddress = action(\r\n  'validateOrgAddress',\r\n  (profile: SelfServePublisherActiveModel, formatMessage: InjectedIntl['formatMessage']) => ({ profile, formatMessage })\r\n);\r\n","import { action } from 'satcheljs';\r\n\r\nexport const submitEvidenceDocument = action('submitEvidenceDocument', (setDocumentUploadStatus, documentContent: FormData) => ({\r\n  setDocumentUploadStatus,\r\n  documentContent,\r\n}));\r\n\r\nexport const fetchAppealHistory = action('fetchAppealHistory');\r\n","import { createStore } from 'satcheljs';\r\nimport { CustomPanelType, Model, PopupType } from '../../../../@data';\r\nimport { PAGINATION_PAGE_SIZES } from '../../../../constants/AppConstants';\r\nimport { IGridQuery } from '../../GridV2.types';\r\n\r\nexport interface IPagination {\r\n  currentPageSize: number;\r\n  currentPageNumber: number;\r\n  numberOfPages: number;\r\n}\r\n\r\nexport interface IGridV2ViewState<T extends Model> {\r\n  loading: boolean;\r\n  query?: IGridQuery<T>;\r\n  entity?: new () => T;\r\n  filterMenuCalloutOpen?: boolean;\r\n  dialogType: PopupType;\r\n  panelType: CustomPanelType;\r\n  selectedItems: Model[];\r\n  searchWord: string;\r\n  isSearchCalloutVisible: boolean;\r\n  data: Model[];\r\n  paginator: IPagination;\r\n}\r\n\r\nexport const getStore = createStore<IGridV2ViewState<Model>>('GridV2ViewState', {\r\n  loading: false,\r\n  dialogType: PopupType.None,\r\n  panelType: CustomPanelType.None,\r\n  filterMenuCalloutOpen: false,\r\n  selectedItems: [],\r\n  isSearchCalloutVisible: false,\r\n  searchWord: '',\r\n  data: [],\r\n  paginator: {\r\n    currentPageSize: PAGINATION_PAGE_SIZES[0],\r\n    currentPageNumber: 1,\r\n    numberOfPages: 1,\r\n  },\r\n});\r\n","import { createStore } from 'satcheljs';\r\nimport { EntityType } from '../../../../../../@data';\r\nimport { DEFAULT_CURRENCY_CODE, LOCAL_STORAGE_LOCALE } from '../../../../../../constants/AppConstants';\r\nimport { ISettingsViewState } from './schema/ISettingsViewState';\r\n\r\nexport const getStore = createStore<ISettingsViewState>('ISettingsViewState', {\r\n  active: {\r\n    entityType: EntityType.Publisher,\r\n    notificationPreferences: {\r\n      billingAlerts: true,\r\n      servingStatus: true,\r\n      profileReview: true,\r\n      invitedUsers: true,\r\n    },\r\n    systemPreferences: {\r\n      locale: localStorage.getItem(LOCAL_STORAGE_LOCALE) || undefined,\r\n      currency: DEFAULT_CURRENCY_CODE,\r\n    },\r\n  },\r\n});\r\n","import { LifeCycleStatus } from '../enums';\r\n\r\nexport abstract class Model {\r\n  // Keeping id type to 'any' to accommodate guid (string) and integer id values\r\n  // tslint:disable-next-line: no-any\r\n  constructor(public id?: any, public name?: Object, public status?: LifeCycleStatus, public eTag?: string) {}\r\n  public abstract get className(): string;\r\n  public abstract get apiPath(): string | undefined;\r\n}\r\n","import { FluentTheme, IFontStyles, initializeIcons, IPalette, ISpacing, ITheme, loadTheme, registerIcons } from '@fluentui/react';\r\n\r\nexport interface IPubcenterPalette extends Partial<IPalette> {\r\n  messageBarError: string;\r\n  severeError: string;\r\n  error: string;\r\n  warning: string;\r\n  success: string;\r\n  headerGlobal: string;\r\n  antiqueBronze: string;\r\n  seaGreen: string;\r\n  lowContrastBlue: string;\r\n  disabledGray: string;\r\n  eerieBlack: string;\r\n  highContrastPrimary: string;\r\n  highContrastLink: string;\r\n  raisinBlack: string;\r\n  grayX11: string;\r\n  gray: string;\r\n  neutralTertiaryWhiteContrast: string;\r\n  neutralSecondaryAltWhiteContrast: string;\r\n  taupeGray: string;\r\n  darkSilver: string;\r\n  frenchBlue: string;\r\n  azureishWhite: string;\r\n  paleChestnut: string;\r\n  lavenderBlush: string;\r\n  venetianRed: string;\r\n  honeydew: string;\r\n  grannySmithApple: string;\r\n  deepGreen: string;\r\n  neutralForeground1Rest: string;\r\n  neutralForeground2Rest: string;\r\n  neutralForeground3Rest: string;\r\n  brandForeground1Rest: string;\r\n  statusSuccessForeground1Rest: string;\r\n  neutralBackground1Selected: string;\r\n  neutralBackground4Rest: string;\r\n  statusSuccessBackground1Rest: string;\r\n  neutralStroke2Rest: string;\r\n  statusSuccessStroke1Rest: string;\r\n  ['NeutralBackground4.Rest']: string;\r\n  ['NeutralForeground3.Rest']: string;\r\n  ['NeutralForeground2.Rest']: string;\r\n  ['NeutralForeground1.Rest']: string;\r\n  ['CompoundBrandForeground1.Rest']: string;\r\n  ['CompoundBrandForeground1.Hover']: string;\r\n  ['NeutralBackground3.Rest']: string;\r\n  ['NeutralBackground5.Rest']: string;\r\n  ['NeutralStroke1.Rest']: string;\r\n  ['BrandBackground.Rest']: string;\r\n  ['BrandBackground2.Rest']: string;\r\n  ['BrandStroke2.Rest']: string;\r\n  ['BrandForeground2.Rest']: string;\r\n  ['DangerForeground1.Rest']: string;\r\n  ['DangerBorder1.Rest']: string;\r\n  ['DangerBackground1.Rest']: string;\r\n  ['Transparentbackground.Rest']: string;\r\n  ['WarningBorder1.Rest']: string;\r\n  ['WarningBackground1.Rest']: string;\r\n}\r\n\r\nexport interface IPubcenterBoxShadow {\r\n  soft: string;\r\n  aesthetic: string;\r\n  creative: string;\r\n  raised: string;\r\n}\r\n\r\nexport interface IPubcenterSpacing extends Partial<ISpacing> {\r\n  size0: string;\r\n  size1: string;\r\n  size2: string;\r\n  size3: string;\r\n  size4: string;\r\n  size5: string;\r\n  size6: string;\r\n  size7: string;\r\n  size8: string;\r\n  size10: string;\r\n  size12: string;\r\n  size14: string;\r\n  size15: string;\r\n  size16: string;\r\n  size18: string;\r\n  size20: string;\r\n  size22: string;\r\n  size24: string;\r\n  size28: string;\r\n  size32: string;\r\n  size30: string;\r\n  size36: string;\r\n  size40: string;\r\n  size44: string;\r\n  size46: string;\r\n  size48: string;\r\n  size50: string;\r\n  size52: string;\r\n  size54: string;\r\n  size56: string;\r\n  size60: string;\r\n  size64: string;\r\n  size72: string;\r\n  size80: string;\r\n  size92: string;\r\n  size96: string;\r\n  size100: string;\r\n  size120: string;\r\n  size126: string;\r\n  size128: string;\r\n  size142: string;\r\n  size146: string;\r\n  size150: string;\r\n  size159: string;\r\n  size160: string;\r\n  size180: string;\r\n  size192: string;\r\n  size200: string;\r\n  size220: string;\r\n  size250: string;\r\n  size256: string;\r\n  size260: string;\r\n  size300: string;\r\n  size320: string;\r\n  size350: string;\r\n  size360: string;\r\n  size480: string;\r\n  size500: string;\r\n  size600: string;\r\n  size896: string;\r\n  size960: string;\r\n}\r\n\r\ninterface IPubCenterFont {\r\n  fontSize: string;\r\n  lineHeight: string;\r\n  fontWeight?: string;\r\n}\r\nexport interface IPubCenterFonts extends Partial<IFontStyles> {\r\n  size10: IPubCenterFont;\r\n  size12: IPubCenterFont;\r\n  size14: IPubCenterFont;\r\n  size14Medium: IPubCenterFont;\r\n  size16: IPubCenterFont;\r\n  size18: IPubCenterFont;\r\n  size20: IPubCenterFont;\r\n  size24: IPubCenterFont;\r\n  size28: IPubCenterFont;\r\n  size32: IPubCenterFont;\r\n  size42: IPubCenterFont;\r\n}\r\n\r\nexport interface IPubcenterTheme {\r\n  palette: IPubcenterPalette;\r\n  spacing: IPubcenterSpacing;\r\n  fonts: IPubCenterFonts;\r\n  boxShadow: IPubcenterBoxShadow;\r\n}\r\n\r\nconst spacing: IPubcenterSpacing = {\r\n  size0: '0rem',\r\n  size1: '0.0625rem',\r\n  size2: '0.125rem',\r\n  size3: '0.1875rem',\r\n  size4: '0.25rem',\r\n  size5: '0.3125rem',\r\n  size6: '0.375rem',\r\n  size7: '0.4375rem',\r\n  size8: '0.50rem',\r\n  size10: '0.625rem',\r\n  size12: '0.75rem',\r\n  size14: '0.875rem',\r\n  size15: '0.938rem',\r\n  size16: '1.0rem',\r\n  size18: '1.125rem',\r\n  size20: '1.25rem',\r\n  size22: '1.375 rem',\r\n  size24: '1.5rem',\r\n  size28: '1.75rem',\r\n  size30: '1.875rem',\r\n  size32: '2.0rem',\r\n  size36: '2.25rem',\r\n  size40: '2.50rem',\r\n  size44: '2.75rem',\r\n  size46: '2.875rem',\r\n  size48: '3.0rem',\r\n  size50: '3.125rem',\r\n  size52: '3.25rem',\r\n  size54: '3.375rem',\r\n  size56: '3.5rem',\r\n  size60: '3.75rem',\r\n  size64: '4.0rem',\r\n  size72: '4.5rem',\r\n  size80: '5.0rem',\r\n  size92: '5.75rem',\r\n  size96: '6.0rem',\r\n  size100: '6.25rem',\r\n  size120: '7.5rem',\r\n  size126: '7.875rem',\r\n  size128: '8.0rem',\r\n  size142: '8.875rem',\r\n  size146: '9.125rem',\r\n  size150: '9.375rem',\r\n  size159: '9.9375rem',\r\n  size160: '10rem',\r\n  size180: '11.25rem',\r\n  size192: '12rem',\r\n  size200: '12.5rem',\r\n  size220: '13.75rem',\r\n  size250: '15.625rem',\r\n  size256: '16.0rem',\r\n  size260: '16.25rem',\r\n  size300: '18.75rem',\r\n  size320: '20.0rem',\r\n  size350: '21.875rem',\r\n  size360: '22.5rem',\r\n  size480: '30.0rem',\r\n  size500: '31.25rem',\r\n  size600: '37.5rem',\r\n  size896: '56.0rem',\r\n  size960: '60.0rem',\r\n};\r\n\r\nconst palette: IPubcenterPalette = {\r\n  headerGlobal: '#2f2f2f',\r\n  themeLighterAlt: '#EFF6FC',\r\n  themeLighter: '#DEECF9',\r\n  themeLight: '#C7E0F4',\r\n  themePrimary: '#0078D4',\r\n  themeTertiary: '#71afe5',\r\n  themeSecondary: '#2b88d8',\r\n  themeDarkAlt: '#106EBE',\r\n  themeDark: '#005A9E',\r\n  themeDarker: '#004578',\r\n  neutralLighterAlt: '#FAF9F8',\r\n  neutralLighter: '#F3F2F1',\r\n  neutralLight: '#EDEBE9',\r\n  neutralQuaternaryAlt: '#E1DFDD',\r\n  neutralQuaternary: '#D2D0CE',\r\n  neutralTertiaryAlt: '#C8C6C4',\r\n  neutralTertiary: '#A19F9D',\r\n  neutralSecondary: '#605E5C',\r\n  neutralPrimaryAlt: '#3B3A39',\r\n  neutralPrimary: '#323130',\r\n  neutralDark: '#201F1E',\r\n  black: '#000000',\r\n  white: '#fff',\r\n  redDark: '#a80000',\r\n  blue: '#0078D7',\r\n  blueDark: '#004578',\r\n  messageBarError: '#FDE7E9',\r\n  severeError: '#FED9CC',\r\n  warning: '#fff4ce',\r\n  success: '#DFF6DD',\r\n  error: '#d83b01',\r\n  antiqueBronze: '#7A6816',\r\n  seaGreen: '#218D51',\r\n  lowContrastBlue: '#0072cc',\r\n  disabledGray: '#727272',\r\n  eerieBlack: '#1A1A1A',\r\n  highContrastPrimary: '#0072c9',\r\n  highContrastLink: '#085088',\r\n  raisinBlack: '#242424',\r\n  grayX11: '#bbbbbb',\r\n  gray: '#808080',\r\n  neutralTertiaryWhiteContrast: '#737271',\r\n  neutralSecondaryAltWhiteContrast: '#83817f',\r\n  taupeGray: '#8A8886',\r\n  darkSilver: '#6E6E6E',\r\n  frenchBlue: '#036AC4',\r\n  azureishWhite: '#e2e8f0',\r\n  paleChestnut: '#EEACB2',\r\n  lavenderBlush: '#FDF3F4',\r\n  venetianRed: '#CC1512',\r\n  honeydew: '#F1FAF1',\r\n  grannySmithApple: '#9FD89F',\r\n  deepGreen: '#0E700E',\r\n  neutralForeground1Rest: '#242424',\r\n  neutralForeground2Rest: '#424242',\r\n  neutralForeground3Rest: '#616161',\r\n  neutralBackground1Selected: '#EBEBEB',\r\n  neutralBackground4Rest: '#F0F0F0',\r\n  neutralStroke2Rest: '#E0E0E0',\r\n  brandForeground1Rest: '#0F6CBD',\r\n  statusSuccessBackground1Rest: '#F1FAF1',\r\n  statusSuccessForeground1Rest: '#0E700E',\r\n  statusSuccessStroke1Rest: '#9FD89F',\r\n  'NeutralForeground2.Rest': '#424242',\r\n  'NeutralForeground1.Rest': '#242424',\r\n  'NeutralBackground4.Rest': '#F0F0F0',\r\n  'CompoundBrandForeground1.Rest': '#0F6CBD',\r\n  'CompoundBrandForeground1.Hover': '#115EA3',\r\n  'NeutralBackground3.Rest': '#F5F5F5',\r\n  'NeutralBackground5.Rest': '#EBEBEB',\r\n  'NeutralStroke1.Rest': '#D1D1D1',\r\n  'BrandBackground.Rest': '#0F6CBD',\r\n  'BrandBackground2.Rest': '#EBF3FC',\r\n  'BrandForeground2.Rest': '#115EA3',\r\n  'BrandStroke2.Rest': '#B4D6FA',\r\n  'NeutralForeground3.Rest': '#616161',\r\n  'DangerForeground1.Rest': '#B10E1C',\r\n  'DangerBorder1.Rest': '#EEACB2',\r\n  'DangerBackground1.Rest': '#FDF3F4',\r\n  'Transparentbackground.Rest': 'transparent',\r\n  'WarningBorder1.Rest': '#FDCFB4',\r\n  'WarningBackground1.Rest': '#FFF9F5',\r\n};\r\n\r\nconst boxShadow = {\r\n  soft: `0 2px 4px 0 rgba(0, 0, 0, .13), 0 1px 1px 0 rgba(0, 0, 0, .11)`,\r\n  aesthetic: `0 3px 7px 0 rgba(0, 0, 0, .13), 0 1px 2px 0 rgba(0, 0, 0, .11)`,\r\n  creative: `0 7px 15px 0 rgba(0, 0, 0, .13), 0 1px 4px 0 rgba(0, 0, 0, .11)`,\r\n  raised: `0 26px 58px 0 rgba(0, 0, 0, .22), 0 5px 14px 0 rgba(0, 0, 0, .18)`,\r\n};\r\n\r\ninitializeIcons();\r\n\r\n// TODO: Remove this after we migrate icons to Fluent icons.\r\nregisterIcons({\r\n  fontFace: {\r\n    fontFamily: `\"Microsoft Advertising MDL2 Assets\"`,\r\n  },\r\n  icons: {\r\n    AdUnit: '\\uF7F2',\r\n    AdUnitChannel: '\\uF7F5',\r\n    AdUnitBlock: '\\uF7F3',\r\n    Notifications: '\\uEA8F',\r\n    ShowAll: '\\uE890',\r\n  },\r\n});\r\n\r\n/**\r\n * We should have a consistent typography across the pages. Generally, all font sizes comes with recommended\r\n * line-height values. Here, we have added the standard line-height values for each font size by referring\r\n * https://developer.microsoft.com/en-us/fluentui#/styles/web/typography#sizes guidelines.\r\n *\r\n * In some cases, font-weights also go hand-in-hand with font-sizes. But in the design language we use in\r\n * figma has different font-weights for the same font-size. Hence they are not part of these fonts.\r\n */\r\nconst fonts: IPubCenterFonts = {\r\n  size10: { fontSize: '10px', lineHeight: '14px' },\r\n  size12: { fontSize: '12px', lineHeight: '16px' },\r\n  size14: { fontSize: '14px', lineHeight: '20px' },\r\n  size14Medium: { fontSize: '14px', lineHeight: '22px', fontWeight: '600' },\r\n  size16: { fontSize: '16px', lineHeight: '22px' },\r\n  size18: { fontSize: '18px', lineHeight: '24px' },\r\n  size20: { fontSize: '20px', lineHeight: '28px' },\r\n  size24: { fontSize: '24px', lineHeight: '32px' },\r\n  size28: { fontSize: '28px', lineHeight: '36px' },\r\n  size32: { fontSize: '32px', lineHeight: '40px' },\r\n  size42: { fontSize: '42px', lineHeight: '42px' },\r\n};\r\n\r\nexport const PubcenterTheme = {\r\n  palette,\r\n  spacing,\r\n  fonts,\r\n  boxShadow,\r\n};\r\nFluentTheme.palette = { ...FluentTheme.palette, ...PubcenterTheme.palette };\r\nFluentTheme.spacing = { ...FluentTheme.spacing, ...PubcenterTheme.spacing };\r\nFluentTheme.fonts = { ...FluentTheme.fonts, ...PubcenterTheme.fonts };\r\n(FluentTheme as ITheme & { boxShadow: IPubcenterBoxShadow }).boxShadow = { ...PubcenterTheme.boxShadow };\r\n\r\n// It's recommended to not use loadTheme, instead use ThemeProvider\r\n// Refer: https://github.com/microsoft/fluentui/blob/master/packages/react/src/utilities/ThemeProvider/README.md#loadtheme\r\n// TODO: Remove usage of loadTheme\r\nloadTheme(FluentTheme);\r\n\r\nexport const PubcenterCustomizations = FluentTheme;\r\n\r\nexport enum BreakPoints {\r\n  ResponsiveExtraSmall = '@media(max-width: 320px)',\r\n  ResponsiveSmall = '@media(max-width: 640px)',\r\n  ResponsiveNonSmall = '@media(min-width: 641px)',\r\n  ResponsiveMedium = '@media screen and (min-width: 641px) and (max-width: 1024px)',\r\n  ResponsiveLarge = '@media(min-width: 1025px) and (max-width: 1600px)',\r\n  ResponsiveExtraLarge = '@media(min-width: 1601px)',\r\n}\r\n\r\nexport enum AccessibilityContrast {\r\n  Activated = '@media screen and (-ms-high-contrast: active), screen and (forced-colors: active)',\r\n}\r\n","import { defineMessages } from 'react-intl';\r\n\r\nexport default defineMessages({\r\n  acceptInvite: {\r\n    id: 'userpage.acceptInvite',\r\n    defaultMessage: 'Accept invite',\r\n  },\r\n  createUser: {\r\n    id: 'userpage.createUser',\r\n    defaultMessage: 'Create user',\r\n  },\r\n  firstName: {\r\n    id: 'userpage.firstName',\r\n    defaultMessage: 'First name',\r\n  },\r\n  lastName: {\r\n    id: 'userpage.lastName',\r\n    defaultMessage: 'Last name',\r\n  },\r\n  emailAddress: {\r\n    id: 'userpage.emailAddress',\r\n    defaultMessage: 'E-mail address',\r\n  },\r\n  preferredLanguage: {\r\n    id: 'userpage.preferredLanguage',\r\n    defaultMessage: 'Preferred language',\r\n  },\r\n  accountRole: {\r\n    id: 'userpage.accountRole',\r\n    defaultMessage: 'Account role',\r\n  },\r\n  accountManager: {\r\n    id: 'userpage.accountManager',\r\n    defaultMessage: 'Account manager',\r\n  },\r\n  accountManagerDescription: {\r\n    id: 'userpage.accountManagerDescription',\r\n    defaultMessage: 'Typical pubCenter user',\r\n  },\r\n  reportUser: {\r\n    id: 'userpage.reportUser',\r\n    defaultMessage: 'Report user',\r\n  },\r\n  reportUserDescription: {\r\n    id: 'userpage.reportUserDescription',\r\n    defaultMessage: 'View account information and reporting',\r\n  },\r\n  listManager: {\r\n    id: 'userpage.listManager',\r\n    defaultMessage: 'List manager',\r\n  },\r\n  listManagerDescription: {\r\n    id: 'userpage.listManagerDescription',\r\n    defaultMessage: 'Manage competitive exclusions',\r\n  },\r\n  adViewer: {\r\n    id: 'userpage.adViewer',\r\n    defaultMessage: 'Ad viewer',\r\n  },\r\n  adViewerDescription: {\r\n    id: 'userpage.adViewerDescription',\r\n    defaultMessage: 'Manage properties and competitive exclusions, and view ad units',\r\n  },\r\n  administrator: {\r\n    id: 'userpage.administrator',\r\n    defaultMessage: 'Administrator',\r\n  },\r\n  administratorDescription: {\r\n    id: 'userpage.administratorDescription',\r\n    defaultMessage: 'Manage all aspects of a pubCenter account',\r\n  },\r\n  superAdmin: {\r\n    id: 'userpage.superAdmin',\r\n    defaultMessage: 'Super administrator',\r\n  },\r\n  superAdminDescription: {\r\n    id: 'userpage.superAdminDescription',\r\n    defaultMessage: 'Full access and control of all accounts',\r\n  },\r\n  createPageTitle: {\r\n    id: 'inviteUser.createPageTitle',\r\n    defaultMessage: 'Invite user',\r\n  },\r\n  editPageTitle: {\r\n    id: 'inviteUser.editPageTitle',\r\n    defaultMessage: 'Edit user',\r\n  },\r\n  pageDescription: {\r\n    id: 'inviteUser.pageDescription',\r\n    defaultMessage:\r\n      // tslint:disable-next-line:max-line-length\r\n      'An email invitation will be sent to the identified user.  User will be asked to provide additional information to complete their profile.',\r\n  },\r\n  telephoneNumber: {\r\n    id: 'partnermanagement.editUser.telephoneNumber',\r\n    defaultMessage: 'Telephone number',\r\n  },\r\n  faxNumber: {\r\n    id: 'partnermanagement.editUser.faxNumber',\r\n    defaultMessage: 'Fax number',\r\n  },\r\n  userAccountInfo: {\r\n    id: 'partnermanagement.editUser.userAccountInfo',\r\n    defaultMessage: 'User account information',\r\n  },\r\n  userName: {\r\n    id: 'partnermanagement.editUser.userName',\r\n    defaultMessage: 'User name',\r\n  },\r\n  password: {\r\n    id: 'partnermanagement.editUser.password',\r\n    defaultMessage: 'Password',\r\n  },\r\n  confirmPassword: {\r\n    id: 'partnermanagement.editUser.confirmPassword',\r\n    defaultMessage: 'Confirm password',\r\n  },\r\n  secretQuestion: {\r\n    id: 'partnermanagement.editUser.secretQuestion',\r\n    defaultMessage: 'Secret question',\r\n  },\r\n  secretAnswer: {\r\n    id: 'partnermanagement.editUser.secretAnswer',\r\n    defaultMessage: 'Secret answer',\r\n  },\r\n  marketingContactSetting: {\r\n    id: 'partnermanagement.editUser.marketingContactSetting',\r\n    defaultMessage: 'Marketing contact settings',\r\n  },\r\n  email: {\r\n    id: 'partnermanagement.editUser.email',\r\n    defaultMessage: 'E-mail',\r\n  },\r\n  phone: {\r\n    id: 'partnermanagement.editUser.phone',\r\n    defaultMessage: 'Phone',\r\n  },\r\n  postalMail: {\r\n    id: 'partnermanagement.editUser.postalMail',\r\n    defaultMessage: 'Postal mail',\r\n  },\r\n  updateUser: {\r\n    id: 'partnermanagement.editUser.updateUser',\r\n    defaultMessage: 'Update user',\r\n  },\r\n  accountMultiSelectPickerAriaDesc: {\r\n    id: 'partnermanagement.editUser.accountMultiSelectPickerAriaDesc',\r\n    defaultMessage: 'Select Accounts',\r\n  },\r\n  useDifferentAccountMessage: {\r\n    id: 'acceptInvite.useDifferentAccountMessage',\r\n    defaultMessage: 'You are signing up with {email}. Need to go back and sign in with another Microsoft account?',\r\n  },\r\n  switchNow: {\r\n    id: 'acceptInvite.switchNow',\r\n    defaultMessage: 'Switch now',\r\n  },\r\n  resendingUserInvitation: {\r\n    id: 'userManagement.resendingUserInvitation',\r\n    defaultMessage: 'Resending user invitation to {email}...',\r\n  },\r\n  resendUserInvitationSuccess: {\r\n    id: 'userManagement.resendUserInvitationSuccess',\r\n    defaultMessage: 'Resend user invitation to {email} successfully',\r\n  },\r\n  deletedUserInvitationSuccess: {\r\n    id: 'userManagement.deletedUserInvitationSuccess',\r\n    defaultMessage: 'Deleted invitation for {firstName} successfully',\r\n  },\r\n});\r\n","/* This is copied from https://gist.github.com/jamesbar2/1c677c22df8f21e869cca7e439fc3f5b */\r\n\r\nexport const COUNTRY_WISE_ZIP_CODES_REGEX = {\r\n  AF: {\r\n    name: 'Afghanistan',\r\n    format: 'NNNN',\r\n    regex: '^\\\\d{4}$',\r\n  },\r\n  AX: {\r\n    name: 'Åland Islands',\r\n    format: 'NNNNN',\r\n    regex: '^\\\\d{5}$',\r\n  },\r\n  AL: {\r\n    name: 'Albania',\r\n    format: 'NNNN',\r\n    regex: '^\\\\d{4}$',\r\n  },\r\n  DZ: {\r\n    name: 'Algeria',\r\n    format: 'NNNNN',\r\n    regex: '^\\\\d{5}$',\r\n  },\r\n  AS: {\r\n    name: 'American Samoa',\r\n    format: 'NNNNN (optionally NNNNN-NNNN or NNNNN-NNNNNN)',\r\n    regex: '^\\\\d{5}(-{1}\\\\d{4,6})$',\r\n  },\r\n  AD: {\r\n    name: 'Andorra',\r\n    format: 'CCNNN',\r\n    regex: '^[Aa][Dd]\\\\d{3}$',\r\n  },\r\n  AO: {\r\n    name: 'Angola',\r\n    format: '- no codes -',\r\n    regex: '',\r\n  },\r\n  AI: {\r\n    name: 'Anguilla',\r\n    format: 'AI-2640',\r\n    regex: '^[Aa][I][-][2][6][4][0]$',\r\n  },\r\n  AG: {\r\n    name: 'Antigua and Barbuda',\r\n    format: '- no codes -',\r\n    regex: '',\r\n  },\r\n  AR: {\r\n    name: 'Argentina',\r\n    format: '1974-1998 NNNN; From 1999 ANNNNAAA',\r\n    regex: '^\\\\d{4}|[A-Za-z]\\\\d{4}[a-zA-Z]{3}$',\r\n  },\r\n  AM: {\r\n    name: 'Armenia',\r\n    format: 'NNNN',\r\n    regex: '^\\\\d{4}$',\r\n  },\r\n  AW: {\r\n    name: 'Aruba',\r\n    format: '- no codes -',\r\n    regex: '',\r\n  },\r\n  AC: {\r\n    name: 'Ascension island',\r\n    format: 'ASCN 1ZZ',\r\n    regex: '^[Aa][Ss][Cc][Nn]\\\\s{0,1}[1][Zz][Zz]$',\r\n  },\r\n  AU: {\r\n    name: 'Australia',\r\n    format: 'NNNN',\r\n    regex: '^\\\\d{4}$',\r\n  },\r\n  AT: {\r\n    name: 'Austria',\r\n    format: 'NNNN',\r\n    regex: '^\\\\d{4}$',\r\n  },\r\n  AZ: {\r\n    name: 'Azerbaijan',\r\n    format: 'CCNNNN',\r\n    regex: '^[Aa][Zz]\\\\d{4}$',\r\n  },\r\n  BS: {\r\n    name: 'Bahamas',\r\n    format: '- no codes -',\r\n    regex: '',\r\n  },\r\n  BH: {\r\n    name: 'Bahrain',\r\n    format: 'NNN or NNNN',\r\n    regex: '^\\\\d{3,4}$',\r\n  },\r\n  BD: {\r\n    name: 'Bangladesh',\r\n    format: 'NNNN',\r\n    regex: '^\\\\d{4}$',\r\n  },\r\n  BB: {\r\n    name: 'Barbados',\r\n    format: 'CCNNNNN',\r\n    regex: '^[Aa][Zz]\\\\d{5}$',\r\n  },\r\n  BY: {\r\n    name: 'Belarus',\r\n    format: 'NNNNNN',\r\n    regex: '^\\\\d{6}$',\r\n  },\r\n  BE: {\r\n    name: 'Belgium',\r\n    format: 'NNNN',\r\n    regex: '^\\\\d{4}$',\r\n  },\r\n  BZ: {\r\n    name: 'Belize',\r\n    format: '- no codes -',\r\n    regex: '',\r\n  },\r\n  BJ: {\r\n    name: 'Benin',\r\n    format: '- no codes -',\r\n    regex: '',\r\n  },\r\n  BM: {\r\n    name: 'Bermuda',\r\n    format: 'AA NN or AA AA',\r\n    regex: '^[A-Za-z]{2}\\\\s([A-Za-z]{2}|\\\\d{2})$',\r\n  },\r\n  BT: {\r\n    name: 'Bhutan',\r\n    format: 'NNNNN',\r\n    regex: '^\\\\d{5}$',\r\n  },\r\n  BO: {\r\n    name: 'Bolivia',\r\n    format: 'NNNN',\r\n    regex: '^\\\\d{4}$',\r\n  },\r\n  BQ: {\r\n    name: 'Bonaire, Sint Eustatius and Saba',\r\n    format: '- no codes -',\r\n    regex: '',\r\n  },\r\n  BA: {\r\n    name: 'Bosnia and Herzegovina',\r\n    format: 'NNNNN',\r\n    regex: '^\\\\d{5}$',\r\n  },\r\n  BW: {\r\n    name: 'Botswana',\r\n    format: '- no codes -',\r\n    regex: '',\r\n  },\r\n  BR: {\r\n    name: 'Brazil',\r\n    format: 'NNNNN-NNN (NNNNN from 1971 to 1992)',\r\n    regex: '^\\\\d{5}-\\\\d{3}$',\r\n  },\r\n  '': {\r\n    name: 'British Antarctic Territory',\r\n    format: 'BIQQ 1ZZ',\r\n    regex: '^[Bb][Ii][Qq]{2}\\\\s{0,1}[1][Zz]{2}$',\r\n  },\r\n  IO: {\r\n    name: 'British Indian Ocean Territory',\r\n    format: 'BBND 1ZZ',\r\n    regex: '^[Bb]{2}[Nn][Dd]\\\\s{0,1}[1][Zz]{2}$',\r\n  },\r\n  VG: {\r\n    name: 'British Virgin Islands',\r\n    format: 'CCNNNN',\r\n    regex: '^[Vv][Gg]\\\\d{4}$',\r\n  },\r\n  BN: {\r\n    name: 'Brunei',\r\n    format: 'AANNNN',\r\n    regex: '^[A-Za-z]{2}\\\\d{4}$',\r\n  },\r\n  BG: {\r\n    name: 'Bulgaria',\r\n    format: 'NNNN',\r\n    regex: '^\\\\d{4}$',\r\n  },\r\n  BF: {\r\n    name: 'Burkina Faso',\r\n    format: '- no codes -',\r\n    regex: '',\r\n  },\r\n  BI: {\r\n    name: 'Burundi',\r\n    format: '- no codes -',\r\n    regex: '',\r\n  },\r\n  KH: {\r\n    name: 'Cambodia',\r\n    format: 'NNNNN',\r\n    regex: '^\\\\d{5}$',\r\n  },\r\n  CM: {\r\n    name: 'Cameroon',\r\n    format: '- no codes -',\r\n    regex: '',\r\n  },\r\n  CA: {\r\n    name: 'Canada',\r\n    format: 'ANA NAN',\r\n    regex: '^(?=[^DdFfIiOoQqUu\\\\d\\\\s])[A-Za-z]\\\\d(?=[^DdFfIiOoQqUu\\\\d\\\\s])[A-Za-z]\\\\s{0,1}\\\\d(?=[^DdFfIiOoQqUu\\\\d\\\\s])[A-Za-z]\\\\d$',\r\n  },\r\n  CV: {\r\n    name: 'Cape Verde',\r\n    format: 'NNNN',\r\n    regex: '^\\\\d{4}$',\r\n  },\r\n  KY: {\r\n    name: 'Cayman Islands',\r\n    format: 'CCN-NNNN',\r\n    regex: '^[Kk][Yy]\\\\d[-\\\\s]{0,1}\\\\d{4}$',\r\n  },\r\n  CF: {\r\n    name: 'Central African Republic',\r\n    format: '- no codes -',\r\n    regex: '',\r\n  },\r\n  TD: {\r\n    name: 'Chad',\r\n    format: 'NNNNN',\r\n    regex: '^\\\\d{5}$',\r\n  },\r\n  CL: {\r\n    name: 'Chile',\r\n    format: 'NNNNNNN (NNN-NNNN)',\r\n    regex: '^\\\\d{7}\\\\s\\\\(\\\\d{3}-\\\\d{4}\\\\)$',\r\n  },\r\n  CN: {\r\n    name: 'China',\r\n    format: 'NNNNNN',\r\n    regex: '^\\\\d{6}$',\r\n  },\r\n  CX: {\r\n    name: 'Christmas Island',\r\n    format: 'NNNN',\r\n    regex: '^\\\\d{4}$',\r\n  },\r\n  CC: {\r\n    name: 'Cocos (Keeling) Island',\r\n    format: 'NNNN',\r\n    regex: '^\\\\d{4}$',\r\n  },\r\n  CO: {\r\n    name: 'Colombia',\r\n    format: 'NNNNNN',\r\n    regex: '^\\\\d{6}$',\r\n  },\r\n  KM: {\r\n    name: 'Comoros',\r\n    format: '- no codes -',\r\n    regex: '',\r\n  },\r\n  CG: {\r\n    name: 'Congo (Brazzaville)',\r\n    format: '- no codes -',\r\n    regex: '',\r\n  },\r\n  CD: {\r\n    name: 'Congo, Democratic Republic',\r\n    format: '- no codes -',\r\n    regex: '^[Cc][Dd]$',\r\n  },\r\n  CK: {\r\n    name: 'Cook Islands',\r\n    format: '- no codes -',\r\n    regex: '',\r\n  },\r\n  CR: {\r\n    name: 'Costa Rica',\r\n    format: 'NNNNN (NNNN until 2007)',\r\n    regex: '^\\\\d{4,5}$',\r\n  },\r\n  CI: {\r\n    name: \"Côte d'Ivoire (Ivory Coast)\",\r\n    format: '- no codes -',\r\n    regex: '',\r\n  },\r\n  HR: {\r\n    name: 'Croatia',\r\n    format: 'NNNNN',\r\n    regex: '^\\\\d{5}$',\r\n  },\r\n  CU: {\r\n    name: 'Cuba',\r\n    format: 'NNNNN',\r\n    regex: '^\\\\d{5}$',\r\n  },\r\n  CW: {\r\n    name: 'Curaçao',\r\n    format: '- no codes -',\r\n    regex: '',\r\n  },\r\n  CY: {\r\n    name: 'Cyprus',\r\n    format: 'NNNN',\r\n    regex: '^\\\\d{4}$',\r\n  },\r\n  CZ: {\r\n    name: 'Czech Republic',\r\n    format: 'NNNNN (NNN NN)',\r\n    regex: '^\\\\d{5}\\\\s\\\\(\\\\d{3}\\\\s\\\\d{2}\\\\)$',\r\n  },\r\n  DK: {\r\n    name: 'Denmark',\r\n    format: 'NNNN',\r\n    regex: '^\\\\d{4}$',\r\n  },\r\n  DJ: {\r\n    name: 'Djibouti',\r\n    format: '- no codes -',\r\n    regex: '',\r\n  },\r\n  DM: {\r\n    name: 'Dominica',\r\n    format: '- no codes -',\r\n    regex: '',\r\n  },\r\n  DO: {\r\n    name: 'Dominican Republic',\r\n    format: 'NNNNN',\r\n    regex: '^\\\\d{5}$',\r\n  },\r\n  TL: {\r\n    name: 'East Timor',\r\n    format: '- no codes -',\r\n    regex: '',\r\n  },\r\n  EC: {\r\n    name: 'Ecuador',\r\n    format: 'NNNNNN',\r\n    regex: '^\\\\d{6}$',\r\n  },\r\n  SV: {\r\n    name: 'El Salvador',\r\n    format: '1101',\r\n    regex: '^1101$',\r\n  },\r\n  EG: {\r\n    name: 'Egypt',\r\n    format: 'NNNNN',\r\n    regex: '^\\\\d{5}$',\r\n  },\r\n  GQ: {\r\n    name: 'Equatorial Guinea',\r\n    format: '- no codes -',\r\n    regex: '',\r\n  },\r\n  ER: {\r\n    name: 'Eritrea',\r\n    format: '- no codes -',\r\n    regex: '',\r\n  },\r\n  EE: {\r\n    name: 'Estonia',\r\n    format: 'NNNNN',\r\n    regex: '^\\\\d{5}$',\r\n  },\r\n  ET: {\r\n    name: 'Ethiopia',\r\n    format: 'NNNN',\r\n    regex: '^\\\\d{4}$',\r\n  },\r\n  FK: {\r\n    name: 'Falkland Islands',\r\n    format: 'FIQQ 1ZZ',\r\n    regex: '^[Ff][Ii][Qq]{2}\\\\s{0,1}[1][Zz]{2}$',\r\n  },\r\n  FO: {\r\n    name: 'Faroe Islands',\r\n    format: 'NNN',\r\n    regex: '^\\\\d{3}$',\r\n  },\r\n  FJ: {\r\n    name: 'Fiji',\r\n    format: '- no codes -',\r\n    regex: '',\r\n  },\r\n  FI: {\r\n    name: 'Finland',\r\n    format: 'NNNNN',\r\n    regex: '^\\\\d{5}$',\r\n  },\r\n  FR: {\r\n    name: 'France',\r\n    format: 'NNNNN',\r\n    regex: '^\\\\d{5}$',\r\n  },\r\n  GF: {\r\n    name: 'French Guiana',\r\n    format: '973NN',\r\n    regex: '^973\\\\d{2}$',\r\n  },\r\n  PF: {\r\n    name: 'French Polynesia',\r\n    format: '987NN',\r\n    regex: '^987\\\\d{2}$',\r\n  },\r\n  TF: {\r\n    name: 'French Southern and Antarctic Territories',\r\n    format: '- no codes -',\r\n    regex: '',\r\n  },\r\n  GA: {\r\n    name: 'Gabon',\r\n    format: 'NN [city name] NN',\r\n    regex: '^\\\\d{2}\\\\s[a-zA-Z-_ ]\\\\s\\\\d{2}$',\r\n  },\r\n  GM: {\r\n    name: 'Gambia',\r\n    format: '- no codes -',\r\n    regex: '',\r\n  },\r\n  GE: {\r\n    name: 'Georgia',\r\n    format: 'NNNN',\r\n    regex: '^\\\\d{4}$',\r\n  },\r\n  DE: {\r\n    name: 'Germany',\r\n    format: 'NNNNN',\r\n    regex: '^\\\\d{5}$',\r\n  },\r\n  GH: {\r\n    name: 'Ghana',\r\n    format: '- no codes -',\r\n    regex: '',\r\n  },\r\n  GI: {\r\n    name: 'Gibraltar',\r\n    format: 'GX11 1AA',\r\n    regex: '^[Gg][Xx][1]{2}\\\\s{0,1}[1][Aa]{2}$',\r\n  },\r\n  GR: {\r\n    name: 'Greece',\r\n    format: 'NNN NN',\r\n    regex: '^\\\\d{3}\\\\s{0,1}\\\\d{2}$',\r\n  },\r\n  GL: {\r\n    name: 'Greenland',\r\n    format: 'NNNN',\r\n    regex: '^\\\\d{4}$',\r\n  },\r\n  GD: {\r\n    name: 'Grenada',\r\n    format: '- no codes -',\r\n    regex: '',\r\n  },\r\n  GP: {\r\n    name: 'Guadeloupe',\r\n    format: '971NN',\r\n    regex: '^971\\\\d{2}$',\r\n  },\r\n  GU: {\r\n    name: 'Guam',\r\n    format: 'NNNNN',\r\n    regex: '^\\\\d{5}$',\r\n  },\r\n  GT: {\r\n    name: 'Guatemala',\r\n    format: 'NNNNN',\r\n    regex: '^\\\\d{5}$',\r\n  },\r\n  GG: {\r\n    name: 'Guernsey',\r\n    format: 'AAN NAA, AANN NAA',\r\n    regex: '^[A-Za-z]{2}\\\\d\\\\s{0,1}\\\\d[A-Za-z]{2}$',\r\n  },\r\n  GN: {\r\n    name: 'Guinea',\r\n    format: '- no codes -',\r\n    regex: '',\r\n  },\r\n  GW: {\r\n    name: 'Guinea Bissau',\r\n    format: 'NNNN',\r\n    regex: '^\\\\d{4}$',\r\n  },\r\n  GY: {\r\n    name: 'Guyana',\r\n    format: '- no codes -',\r\n    regex: '',\r\n  },\r\n  HT: {\r\n    name: 'Haiti',\r\n    format: 'NNNN',\r\n    regex: '^\\\\d{4}$',\r\n  },\r\n  HM: {\r\n    name: 'Heard and McDonald Islands',\r\n    format: 'NNNN',\r\n    regex: '^\\\\d{4}$',\r\n  },\r\n  HN: {\r\n    name: 'Honduras',\r\n    format: 'NNNNN',\r\n    regex: '^\\\\d{5}$',\r\n  },\r\n  HK: {\r\n    name: 'Hong Kong',\r\n    format: '- no codes -',\r\n    regex: '',\r\n  },\r\n  HU: {\r\n    name: 'Hungary',\r\n    format: 'NNNN',\r\n    regex: '^\\\\d{4}$',\r\n  },\r\n  IS: {\r\n    name: 'Iceland',\r\n    format: 'NNN',\r\n    regex: '^\\\\d{3}$',\r\n  },\r\n  IN: {\r\n    name: 'India',\r\n    format: 'NNNNNN,&#10;NNN NNN',\r\n    regex: '^\\\\d{6}$',\r\n  },\r\n  ID: {\r\n    name: 'Indonesia',\r\n    format: 'NNNNN',\r\n    regex: '^\\\\d{5}$',\r\n  },\r\n  IR: {\r\n    name: 'Iran',\r\n    format: 'NNNNN-NNNNN',\r\n    regex: '^\\\\d{5}-\\\\d{5}$',\r\n  },\r\n  IQ: {\r\n    name: 'Iraq',\r\n    format: 'NNNNN',\r\n    regex: '^\\\\d{5}$',\r\n  },\r\n  IE: {\r\n    name: 'Ireland',\r\n    format: '- no codes -',\r\n    regex: '',\r\n  },\r\n  IM: {\r\n    name: 'Isle of Man',\r\n    format: 'CCN NAA, CCNN NAA',\r\n    regex: '^[Ii[Mm]\\\\d{1,2}\\\\s\\\\d\\\\[A-Z]{2}$',\r\n  },\r\n  IL: {\r\n    name: 'Israel',\r\n    format: 'NNNNNNN, NNNNN',\r\n    regex: '^\\\\b\\\\d{5}(\\\\d{2})?$',\r\n  },\r\n  IT: {\r\n    name: 'Italy',\r\n    format: 'NNNNN',\r\n    regex: '^\\\\d{5}$',\r\n  },\r\n  JM: {\r\n    name: 'Jamaica',\r\n    format: 'Before suspension: CCAAANN &#10;After suspension: NN',\r\n    regex: '^\\\\d{2}$',\r\n  },\r\n  JP: {\r\n    name: 'Japan',\r\n    format: 'NNNNNNN (NNN-NNNN)',\r\n    regex: '^\\\\d{7}\\\\s\\\\(\\\\d{3}-\\\\d{4}\\\\)$',\r\n  },\r\n  JE: {\r\n    name: 'Jersey',\r\n    format: 'CCN NAA',\r\n    regex: '^[Jj][Ee]\\\\d\\\\s{0,1}\\\\d[A-Za-z]{2}$',\r\n  },\r\n  JO: {\r\n    name: 'Jordan',\r\n    format: 'NNNNN',\r\n    regex: '^\\\\d{5}$',\r\n  },\r\n  KZ: {\r\n    name: 'Kazakhstan',\r\n    format: 'NNNNNN',\r\n    regex: '^\\\\d{6}$',\r\n  },\r\n  KE: {\r\n    name: 'Kenya',\r\n    format: 'NNNNN',\r\n    regex: '^\\\\d{5}$',\r\n  },\r\n  KI: {\r\n    name: 'Kiribati',\r\n    format: '- no codes -',\r\n    regex: '',\r\n  },\r\n  KP: {\r\n    name: 'Korea, North',\r\n    format: '- no codes -',\r\n    regex: '',\r\n  },\r\n  KR: {\r\n    name: 'South Korea',\r\n    format: 'NNNNNN (NNN-NNN)',\r\n    regex: '^\\\\d{6}\\\\s\\\\(\\\\d{3}-\\\\d{3}\\\\)$',\r\n  },\r\n  XK: {\r\n    name: 'Kosovo',\r\n    format: 'NNNNN',\r\n    regex: '^\\\\d{5}$',\r\n  },\r\n  KW: {\r\n    name: 'Kuwait',\r\n    format: 'NNNNN',\r\n    regex: '^\\\\d{5}$',\r\n  },\r\n  KG: {\r\n    name: 'Kyrgyzstan',\r\n    format: 'NNNNNN',\r\n    regex: '^\\\\d{6}$',\r\n  },\r\n  LV: {\r\n    name: 'Latvia',\r\n    format: 'LV-NNNN',\r\n    regex: '^[Ll][Vv][- ]{0,1}\\\\d{4}$',\r\n  },\r\n  LA: {\r\n    name: 'Laos',\r\n    format: 'NNNNN',\r\n    regex: '^\\\\d{5}$',\r\n  },\r\n  LB: {\r\n    name: 'Lebanon',\r\n    format: 'NNNN NNNN',\r\n    regex: '^\\\\d{4}\\\\s{0,1}\\\\d{4}$',\r\n  },\r\n  LS: {\r\n    name: 'Lesotho',\r\n    format: 'NNN',\r\n    regex: '^\\\\d{3}$',\r\n  },\r\n  LR: {\r\n    name: 'Liberia',\r\n    format: 'NNNN',\r\n    regex: '^\\\\d{4}$',\r\n  },\r\n  LY: {\r\n    name: 'Libya',\r\n    format: 'NNNNN',\r\n    regex: '^\\\\d{5}$',\r\n  },\r\n  LI: {\r\n    name: 'Liechtenstein',\r\n    format: 'NNNN',\r\n    regex: '^\\\\d{4}$',\r\n  },\r\n  LT: {\r\n    name: 'Lithuania',\r\n    format: 'LT-NNNNN',\r\n    regex: '^[Ll][Tt][- ]{0,1}\\\\d{5}$',\r\n  },\r\n  LU: {\r\n    name: 'Luxembourg',\r\n    format: 'NNNN',\r\n    regex: '^\\\\d{4}$',\r\n  },\r\n  MO: {\r\n    name: 'Macau',\r\n    format: '- no codes -',\r\n    regex: '',\r\n  },\r\n  MK: {\r\n    name: 'Macedonia',\r\n    format: 'NNNN',\r\n    regex: '^\\\\d{4}$',\r\n  },\r\n  MG: {\r\n    name: 'Madagascar',\r\n    format: 'NNN',\r\n    regex: '^\\\\d{3}$',\r\n  },\r\n  MW: {\r\n    name: 'Malawi',\r\n    format: '- no codes -',\r\n    regex: '',\r\n  },\r\n  MV: {\r\n    name: 'Maldives',\r\n    format: 'NNNN, NNNNN',\r\n    regex: '^\\\\d{4,5}$',\r\n  },\r\n  MY: {\r\n    name: 'Malaysia',\r\n    format: 'NNNNN',\r\n    regex: '^\\\\d{5}$',\r\n  },\r\n  ML: {\r\n    name: 'Mali',\r\n    format: '- no codes -',\r\n    regex: '',\r\n  },\r\n  MT: {\r\n    name: 'Malta',\r\n    format: 'AAANNNN (AAA NNNN)',\r\n    regex: '^[A-Za-z]{3}\\\\s{0,1}\\\\d{4}$',\r\n  },\r\n  MH: {\r\n    name: 'Marshall Islands',\r\n    format: 'NNNNN',\r\n    regex: '^\\\\d{5}$',\r\n  },\r\n  MR: {\r\n    name: 'Mauritania',\r\n    format: '- no codes -',\r\n    regex: '',\r\n  },\r\n  MU: {\r\n    name: 'Mauritius',\r\n    format: '- no codes -',\r\n    regex: '',\r\n  },\r\n  MQ: {\r\n    name: 'Martinique',\r\n    format: '972NN',\r\n    regex: '^972\\\\d{2}$',\r\n  },\r\n  YT: {\r\n    name: 'Mayotte',\r\n    format: '976NN',\r\n    regex: '^976\\\\d{2}$',\r\n  },\r\n  FM: {\r\n    name: 'Micronesia',\r\n    format: 'NNNNN',\r\n    regex: '^\\\\d{5}$',\r\n  },\r\n  MX: {\r\n    name: 'Mexico',\r\n    format: 'NNNNN',\r\n    regex: '^\\\\d{5}$',\r\n  },\r\n  MD: {\r\n    name: 'Moldova',\r\n    format: 'CCNNNN (CC-NNNN)',\r\n    regex: '^[Mm][Dd][- ]{0,1}\\\\d{4}$',\r\n  },\r\n  MC: {\r\n    name: 'Monaco',\r\n    format: '980NN',\r\n    regex: '^980\\\\d{2}$',\r\n  },\r\n  MN: {\r\n    name: 'Mongolia',\r\n    format: 'NNNNN',\r\n    regex: '^\\\\d{5}$',\r\n  },\r\n  ME: {\r\n    name: 'Montenegro',\r\n    format: 'NNNNN',\r\n    regex: '^\\\\d{5}$',\r\n  },\r\n  MS: {\r\n    name: 'Montserrat',\r\n    format: 'MSR 1110-1350',\r\n    regex: '^[Mm][Ss][Rr]\\\\s{0,1}\\\\d{4}$',\r\n  },\r\n  MA: {\r\n    name: 'Morocco',\r\n    format: 'NNNNN',\r\n    regex: '^\\\\d{5}$',\r\n  },\r\n  MZ: {\r\n    name: 'Mozambique',\r\n    format: 'NNNN',\r\n    regex: '^\\\\d{4}$',\r\n  },\r\n  MM: {\r\n    name: 'Myanmar',\r\n    format: 'NNNNN',\r\n    regex: '^\\\\d{5}$',\r\n  },\r\n  NA: {\r\n    name: 'Namibia',\r\n    format: 'NNNNN',\r\n    regex: '^\\\\d{5}$',\r\n  },\r\n  NR: {\r\n    name: 'Nauru',\r\n    format: '- no codes -',\r\n    regex: '',\r\n  },\r\n  NP: {\r\n    name: 'Nepal',\r\n    format: 'NNNNN',\r\n    regex: '^\\\\d{5}$',\r\n  },\r\n  NL: {\r\n    name: 'Netherlands',\r\n    format: 'NNNN AA',\r\n    regex: '^\\\\d{4}\\\\s{0,1}[A-Za-z]{2}$',\r\n  },\r\n  NC: {\r\n    name: 'New Caledonia',\r\n    format: '988NN',\r\n    regex: '^988\\\\d{2}$',\r\n  },\r\n  NZ: {\r\n    name: 'New Zealand',\r\n    format: 'NNNN',\r\n    regex: '^\\\\d{4}$',\r\n  },\r\n  NI: {\r\n    name: 'Nicaragua',\r\n    format: 'NNNNN',\r\n    regex: '^\\\\d{5}$',\r\n  },\r\n  NE: {\r\n    name: 'Niger',\r\n    format: 'NNNN',\r\n    regex: '^\\\\d{4}$',\r\n  },\r\n  NG: {\r\n    name: 'Nigeria',\r\n    format: 'NNNNNN',\r\n    regex: '^\\\\d{6}$',\r\n  },\r\n  NU: {\r\n    name: 'Niue',\r\n    format: '- no codes -',\r\n    regex: '',\r\n  },\r\n  NF: {\r\n    name: 'Norfolk Island',\r\n    format: 'NNNN',\r\n    regex: '^\\\\d{4}$',\r\n  },\r\n  MP: {\r\n    name: 'Northern Mariana Islands',\r\n    format: 'NNNNN',\r\n    regex: '^\\\\d{5}$',\r\n  },\r\n  NO: {\r\n    name: 'Norway',\r\n    format: 'NNNN',\r\n    regex: '^\\\\d{4}$',\r\n  },\r\n  OM: {\r\n    name: 'Oman',\r\n    format: 'NNN',\r\n    regex: '^\\\\d{3}$',\r\n  },\r\n  PK: {\r\n    name: 'Pakistan',\r\n    format: 'NNNNN',\r\n    regex: '^\\\\d{5}$',\r\n  },\r\n  PW: {\r\n    name: 'Palau',\r\n    format: 'NNNNN',\r\n    regex: '^\\\\d{5}$',\r\n  },\r\n  PA: {\r\n    name: 'Panama',\r\n    format: 'NNNNNN',\r\n    regex: '^\\\\d{6}$',\r\n  },\r\n  PG: {\r\n    name: 'Papua New Guinea',\r\n    format: 'NNN',\r\n    regex: '^\\\\d{3}$',\r\n  },\r\n  PY: {\r\n    name: 'Paraguay',\r\n    format: 'NNNN',\r\n    regex: '^\\\\d{4}$',\r\n  },\r\n  PE: {\r\n    name: 'Peru',\r\n    format: 'NNNNN',\r\n    regex: '^\\\\d{5}$',\r\n  },\r\n  PH: {\r\n    name: 'Philippines',\r\n    format: 'NNNN',\r\n    regex: '^\\\\d{4}$',\r\n  },\r\n  PN: {\r\n    name: 'Pitcairn Islands',\r\n    format: 'PCRN 1ZZ',\r\n    regex: '^[Pp][Cc][Rr][Nn]\\\\s{0,1}[1][Zz]{2}$',\r\n  },\r\n  PL: {\r\n    name: 'Poland',\r\n    format: 'NNNNN (NN-NNN)',\r\n    regex: '^\\\\d{2}[- ]{0,1}\\\\d{3}$',\r\n  },\r\n  PT: {\r\n    name: 'Portugal',\r\n    format: 'NNNN-NNN (NNNN NNN)',\r\n    regex: '^\\\\d{4}[- ]{0,1}\\\\d{3}$',\r\n  },\r\n  PR: {\r\n    name: 'Puerto Rico',\r\n    format: 'NNNNN',\r\n    regex: '^\\\\d{5}$',\r\n  },\r\n  QA: {\r\n    name: 'Qatar',\r\n    format: '- no codes -',\r\n    regex: '',\r\n  },\r\n  RE: {\r\n    name: 'Réunion',\r\n    format: '974NN',\r\n    regex: '^974\\\\d{2}$',\r\n  },\r\n  RO: {\r\n    name: 'Romania',\r\n    format: 'NNNNNN',\r\n    regex: '^\\\\d{6}$',\r\n  },\r\n  RU: {\r\n    name: 'Russia',\r\n    format: 'NNNNNN',\r\n    regex: '^\\\\d{6}$',\r\n  },\r\n  BL: {\r\n    name: 'Saint Barthélemy',\r\n    format: '97133',\r\n    regex: '^97133$',\r\n  },\r\n  SH: {\r\n    name: 'Tristan da Cunha',\r\n    format: 'TDCU 1ZZ',\r\n    regex: '^[Tt][Dd][Cc][Uu]\\\\s{0,1}[1][Zz]{2}$',\r\n  },\r\n  KN: {\r\n    name: 'Saint Kitts and Nevis',\r\n    format: '- no codes -',\r\n    regex: '',\r\n  },\r\n  LC: {\r\n    name: 'Saint Lucia',\r\n    format: '- no codes -',\r\n    regex: '',\r\n  },\r\n  MF: {\r\n    name: 'Saint Martin',\r\n    format: '97150',\r\n    regex: '^97150$',\r\n  },\r\n  PM: {\r\n    name: 'Saint Pierre and Miquelon',\r\n    format: '97500',\r\n    regex: '^97500$',\r\n  },\r\n  VC: {\r\n    name: 'Saint Vincent and the Grenadines',\r\n    format: 'CCNNNN',\r\n    regex: '^[Vv][Cc]\\\\d{4}$',\r\n  },\r\n  SM: {\r\n    name: 'San Marino',\r\n    format: '4789N',\r\n    regex: '^4789\\\\d$',\r\n  },\r\n  ST: {\r\n    name: 'Sao Tome and Principe',\r\n    format: '- no codes -',\r\n    regex: '',\r\n  },\r\n  SA: {\r\n    name: 'Saudi Arabia',\r\n    format: 'NNNNN for PO Boxes. NNNNN-NNNN for home delivery.',\r\n    regex: '^\\\\d{5}(-{1}\\\\d{4})?$',\r\n  },\r\n  SN: {\r\n    name: 'Senegal',\r\n    format: 'NNNNN',\r\n    regex: '^\\\\d{5}$',\r\n  },\r\n  RS: {\r\n    name: 'Serbia',\r\n    format: 'NNNNN',\r\n    regex: '^\\\\d{5}$',\r\n  },\r\n  SC: {\r\n    name: 'Seychelles',\r\n    format: '- no codes -',\r\n    regex: '',\r\n  },\r\n  SX: {\r\n    name: 'Sint Maarten',\r\n    format: '- no codes -',\r\n    regex: '',\r\n  },\r\n  SL: {\r\n    name: 'Sierra Leone',\r\n    format: '- no codes -',\r\n    regex: '',\r\n  },\r\n  SG: {\r\n    name: 'Singapore',\r\n    format: 'NNNNNN',\r\n    regex: '^\\\\d{6}$',\r\n  },\r\n  SK: {\r\n    name: 'Slovakia',\r\n    format: 'NNNNN (NNN NN)',\r\n    regex: '^\\\\d{5}\\\\s\\\\(\\\\d{3}\\\\s\\\\d{2}\\\\)$',\r\n  },\r\n  SI: {\r\n    name: 'Slovenia',\r\n    format: 'NNNN (CC-NNNN)',\r\n    regex: '^([Ss][Ii][- ]{0,1}){0,1}\\\\d{4}$',\r\n  },\r\n  SB: {\r\n    name: 'Solomon Islands',\r\n    format: '- no codes -',\r\n    regex: '',\r\n  },\r\n  SO: {\r\n    name: 'Somalia',\r\n    format: '- no codes -',\r\n    regex: '',\r\n  },\r\n  ZA: {\r\n    name: 'South Africa',\r\n    format: 'NNNN',\r\n    regex: '^\\\\d{4}$',\r\n  },\r\n  GS: {\r\n    name: 'South Georgia and the South Sandwich Islands',\r\n    format: 'SIQQ 1ZZ',\r\n    regex: '^[Ss][Ii][Qq]{2}\\\\s{0,1}[1][Zz]{2}$',\r\n  },\r\n  ES: {\r\n    name: 'Spain',\r\n    format: 'NNNNN',\r\n    regex: '^\\\\d{5}$',\r\n  },\r\n  LK: {\r\n    name: 'Sri Lanka',\r\n    format: 'NNNNN',\r\n    regex: '^\\\\d{5}$',\r\n  },\r\n  SD: {\r\n    name: 'Sudan',\r\n    format: 'NNNNN',\r\n    regex: '^\\\\d{5}$',\r\n  },\r\n  SR: {\r\n    name: 'Suriname',\r\n    format: '- no codes -',\r\n    regex: '',\r\n  },\r\n  SZ: {\r\n    name: 'Swaziland',\r\n    format: 'ANNN',\r\n    regex: '^[A-Za-z]\\\\d{3}$',\r\n  },\r\n  SE: {\r\n    name: 'Sweden',\r\n    format: 'NNNNN (NNN NN)',\r\n    regex: '^\\\\d{3}\\\\s*\\\\d{2}$',\r\n  },\r\n  CH: {\r\n    name: 'Switzerland',\r\n    format: 'NNNN',\r\n    regex: '^\\\\d{4}$',\r\n  },\r\n  SJ: {\r\n    name: 'Svalbard and Jan Mayen',\r\n    format: 'NNNN',\r\n    regex: '^\\\\d{4}$',\r\n  },\r\n  SY: {\r\n    name: 'Syria',\r\n    format: '- no codes -',\r\n    regex: '',\r\n  },\r\n  TW: {\r\n    name: 'Taiwan',\r\n    format: 'NNNNN',\r\n    regex: '^\\\\d{5}$',\r\n  },\r\n  TJ: {\r\n    name: 'Tajikistan',\r\n    format: 'NNNNNN',\r\n    regex: '^\\\\d{6}$',\r\n  },\r\n  TZ: {\r\n    name: 'Tanzania',\r\n    format: '- no codes -',\r\n    regex: '',\r\n  },\r\n  TH: {\r\n    name: 'Thailand',\r\n    format: 'NNNNN',\r\n    regex: '^\\\\d{5}$',\r\n  },\r\n  TG: {\r\n    name: 'Togo',\r\n    format: '- no codes -',\r\n    regex: '',\r\n  },\r\n  TK: {\r\n    name: 'Tokelau',\r\n    format: '- no codes -',\r\n    regex: '',\r\n  },\r\n  TO: {\r\n    name: 'Tonga',\r\n    format: '- no codes -',\r\n    regex: '',\r\n  },\r\n  TT: {\r\n    name: 'Trinidad and Tobago',\r\n    format: 'NNNNNN',\r\n    regex: '^\\\\d{6}$',\r\n  },\r\n  TN: {\r\n    name: 'Tunisia',\r\n    format: 'NNNN',\r\n    regex: '^\\\\d{4}$',\r\n  },\r\n  TR: {\r\n    name: 'Turkey',\r\n    format: 'NNNNN',\r\n    regex: '^\\\\d{5}$',\r\n  },\r\n  TM: {\r\n    name: 'Turkmenistan',\r\n    format: 'NNNNNN',\r\n    regex: '^\\\\d{6}$',\r\n  },\r\n  TC: {\r\n    name: 'Turks and Caicos Islands',\r\n    format: 'TKCA 1ZZ',\r\n    regex: '^[Tt][Kk][Cc][Aa]\\\\s{0,1}[1][Zz]{2}$',\r\n  },\r\n  TV: {\r\n    name: 'Tuvalu',\r\n    format: '- no codes -',\r\n    regex: '',\r\n  },\r\n  UG: {\r\n    name: 'Uganda',\r\n    format: '- no codes -',\r\n    regex: '',\r\n  },\r\n  UA: {\r\n    name: 'Ukraine',\r\n    format: 'NNNNN',\r\n    regex: '^\\\\d{5}$',\r\n  },\r\n  AE: {\r\n    name: 'United Arab Emirates',\r\n    format: '- no codes -',\r\n    regex: '',\r\n  },\r\n  GB: {\r\n    name: 'United Kingdom',\r\n    format: 'A(A)N(A/N)NAA (A[A]N[A/N] NAA)',\r\n    regex: '^[A-Z]{1,2}[0-9R][0-9A-Z]?\\\\s*[0-9][A-Z-[CIKMOV]]{2}',\r\n  },\r\n  US: {\r\n    name: 'United States',\r\n    format: 'NNNNN (optionally NNNNN-NNNN)',\r\n    regex: '^\\\\b\\\\d{5}\\\\b(?:[- ]{1}\\\\d{4})?$',\r\n  },\r\n  UY: {\r\n    name: 'Uruguay',\r\n    format: 'NNNNN',\r\n    regex: '^\\\\d{5}$',\r\n  },\r\n  VI: {\r\n    name: 'U.S. Virgin Islands',\r\n    format: 'NNNNN',\r\n    regex: '^\\\\d{5}$',\r\n  },\r\n  UZ: {\r\n    name: 'Uzbekistan',\r\n    format: 'NNN NNN',\r\n    regex: '^\\\\d{3} \\\\d{3}$',\r\n  },\r\n  VU: {\r\n    name: 'Vanuatu',\r\n    format: '- no codes -',\r\n    regex: '',\r\n  },\r\n  VA: {\r\n    name: 'Vatican',\r\n    format: '120',\r\n    regex: '^120$',\r\n  },\r\n  VE: {\r\n    name: 'Venezuela',\r\n    format: 'NNNN or NNNN A',\r\n    regex: '^\\\\d{4}(\\\\s[a-zA-Z]{1})?$',\r\n  },\r\n  VN: {\r\n    name: 'Vietnam',\r\n    format: 'NNNNNN',\r\n    regex: '^\\\\d{6}$',\r\n  },\r\n  WF: {\r\n    name: 'Wallis and Futuna',\r\n    format: '986NN',\r\n    regex: '^986\\\\d{2}$',\r\n  },\r\n  YE: {\r\n    name: 'Yemen',\r\n    format: '- no codes -',\r\n    regex: '',\r\n  },\r\n  ZM: {\r\n    name: 'Zambia',\r\n    format: 'NNNNN',\r\n    regex: '^\\\\d{5}$',\r\n  },\r\n  ZW: {\r\n    name: 'Zimbabwe',\r\n    format: '- no codes -',\r\n    regex: '',\r\n  },\r\n};\r\n","import { object, string } from 'yup';\r\nimport { COUNTRY_WISE_ZIP_CODES_REGEX } from './zipcodes';\r\n\r\nexport const getAddressValidationModel = () =>\r\n  object().shape({\r\n    line1: string().required().label('Address line 1'),\r\n    line2: string().label('Address line 2'),\r\n    city: string().required().label('City'),\r\n    stateOrProvince: string().required().label('State'),\r\n    postalCode: string()\r\n      .required()\r\n      .label('ZIP code')\r\n      .when('country', (country, schema) => {\r\n        return schema.test({\r\n          name: 'zipCode',\r\n          message: 'Invalid ZIP code',\r\n          test: (value) => {\r\n            const regExp = new RegExp(COUNTRY_WISE_ZIP_CODES_REGEX[country].regex);\r\n            if (regExp) {\r\n              return regExp.test(value);\r\n            }\r\n            return true;\r\n          },\r\n        });\r\n      }),\r\n    country: string().required().label('Country'),\r\n  });\r\n","import { object, number, string } from 'yup';\r\nimport { IIdNamePair } from '../../../../components/MultiSelectPicker';\r\n\r\nexport const IdNamePairErrorModel = object<IIdNamePair>({\r\n  id: number().required(),\r\n  name: string().trim().required()\r\n});\r\n","import { Log } from '../../../../../../../logging/src';\r\nimport { AdSource, Model, Publisher } from '../../../../../../@data';\r\nimport { adProvidersToNames } from '../../../../../../config/adProviders';\r\nimport { IDataGridColumn } from '../../../../../../layout/GridPageV2';\r\nimport { CSVHelper, invert } from '../../../../../../utils';\r\nimport { IAdCreativeViewModel } from '../../store/schema';\r\nimport { AdPerformanceData, BlockAdsData, BlockedContext, SAMBlockSummaryData } from '../../store/schema/models';\r\nimport { IAdReviewModel } from '../../store/schema/models/AdReviewModel';\r\nimport { AGG_LEVEL_CREATIVE, AGG_LEVEL_LISTING, AUDIENCE_INTENT_MARKETPLACE, PAGE_ADS, PAID_SEARCH, TEXT_ADS } from './constants';\r\n\r\nexport function handleError<T>(error: Error, url: string): Promise<T> {\r\n  Log.error(error);\r\n  return Promise.reject(error);\r\n}\r\n\r\nexport function constructUrl(baseUrl: string, models: string[][], params?: URLSearchParams, defaultParams?: URLSearchParams): string {\r\n  const urlArray = [baseUrl];\r\n\r\n  models.forEach((model) => {\r\n    if (model[1] !== '') {\r\n      model.forEach((str) => urlArray.push(encodeURIComponent(str)));\r\n    }\r\n  });\r\n\r\n  let url = urlArray.join('/');\r\n  if (params) {\r\n    url = url.concat('?' + params.toString());\r\n  }\r\n\r\n  if (defaultParams) {\r\n    url = url.concat('&' + defaultParams.toString());\r\n  }\r\n\r\n  return url;\r\n}\r\n\r\nexport function convertDateToString(date: Date): string {\r\n  // Uses the local date of the given date, not the UTC date.\r\n  return date.toISOString().split('T')[0].replace(/-/g, '');\r\n}\r\n\r\nexport function constructAdPerfRequest(\r\n  active: IAdCreativeViewModel,\r\n  data: IAdReviewModel,\r\n  publisher: Publisher,\r\n  accountIds?: number[],\r\n  adDescription?: boolean\r\n): IAdReviewModel {\r\n  const body: IAdReviewModel = {\r\n    StartDate: active.selectedAdSource === AdSource.XandrAuction ? undefined : convertDateToString(active.startDate!),\r\n    EndDate: active.selectedAdSource === AdSource.XandrAuction ? undefined : convertDateToString(active.endDate!),\r\n    PageNumber: 1,\r\n    PageSize: 100,\r\n    Filters: data.Filters,\r\n    Keyword: active.searchBoxValue && active.searchBoxValue !== '' ? active.searchBoxValue : '',\r\n    Creativeagglevel:\r\n      active.selectedAdSource === AdSource.Microsoft\r\n        ? AGG_LEVEL_LISTING\r\n        : active.selectedAdSource === AdSource.Auction\r\n        ? AGG_LEVEL_CREATIVE\r\n        : undefined,\r\n    AdTypes: active.selectedAdSource === AdSource.Microsoft ? [PAGE_ADS, TEXT_ADS] : undefined,\r\n    AdSources: active.selectedAdSource === AdSource.Microsoft ? [AUDIENCE_INTENT_MARKETPLACE, PAID_SEARCH] : undefined,\r\n    ...(active.selectedAdSource === AdSource.Microsoft && adDescription\r\n      ? {\r\n          Fields: [\r\n            'adtitle',\r\n            'adurl',\r\n            'advertisername',\r\n            'adid',\r\n            'uniquecreativeadidstr',\r\n            'advertiseraccountid',\r\n            'advertiserid',\r\n            'uniquecreativeadid',\r\n            'addescription',\r\n          ],\r\n        }\r\n      : {}),\r\n  };\r\n\r\n  if (body.Filters?.Numerical) {\r\n    body.Filters.Numerical.publisherId = publisher.id;\r\n    if (accountIds) {\r\n      body.Filters.Numerical.accountIds = accountIds;\r\n    }\r\n  }\r\n\r\n  return body;\r\n}\r\n\r\nexport function isImageBlockable(img: string, adtype?: string, adsource?: string): boolean {\r\n  if (img && adtype === TEXT_ADS && adsource === PAID_SEARCH) {\r\n    const isNativeStockPhoto = img.indexOf('pid=AdsNative') >= 0;\r\n\r\n    // We can block PA corpus Images that are displayed on TA ads the\r\n    // same way as we block the AdsNative stock photos.\r\n    const isPaCorpusImage = img.indexOf('&pid=21.1') >= 0;\r\n\r\n    return isNativeStockPhoto || isPaCorpusImage;\r\n  }\r\n  return false;\r\n}\r\n\r\nexport function isImageBlocked(img: string, adId: number, blockedImages?: string[], blockedAdsContext?: BlockedContext) {\r\n  let isBlocked = false;\r\n  const imageReportDataTuple = { adId: adId, imageUrl: img };\r\n  if (\r\n    (blockedImages && blockedImages.includes(JSON.stringify(imageReportDataTuple))) ||\r\n    (blockedAdsContext &&\r\n      blockedAdsContext.mapAdIdImages &&\r\n      blockedAdsContext.mapAdIdImages!.has(adId) &&\r\n      compareImages(blockedAdsContext.mapAdIdImages!.get(adId)!, img))\r\n  ) {\r\n    isBlocked = true;\r\n  }\r\n  return isBlocked;\r\n}\r\n\r\nexport function isAllImagesViewOnly(imgs?: string[], adtype?: string, adsource?: string): boolean {\r\n  return imgs ? imgs.every((image) => !isImageBlockable(image, adtype, adsource)) : true;\r\n}\r\n\r\nexport function compareImages(allImages: string[], imageToCompare: string) {\r\n  if (allImages.length === 0) {\r\n    return false;\r\n  }\r\n  const strippedImages: string[] = [];\r\n  allImages.forEach((imageUrl) => {\r\n    strippedImages.push(imageUrl.replace('https://www.bing.com/', ''));\r\n  });\r\n  imageToCompare = imageToCompare.replace('https://bing.com/', '');\r\n  return strippedImages.includes(imageToCompare);\r\n}\r\n\r\nexport function processImagesLink(imageUrls: string[], noImageUrl: string, isAuctionData = false): string[] {\r\n  imageUrls = imageUrls.filter((v) => v !== '');\r\n  imageUrls.forEach((img, imgIndex) => {\r\n    if (img === null || img === '') {\r\n      imageUrls[imgIndex] = noImageUrl;\r\n    } else {\r\n      imageUrls[imgIndex] = isAuctionData ? img : sanitizeBingImageUrl(img);\r\n    }\r\n  });\r\n  if (imageUrls.length === 0) {\r\n    imageUrls = [noImageUrl];\r\n  }\r\n  return imageUrls;\r\n}\r\n\r\nexport function sanitizeBingImageUrl(imgUrl: string): string {\r\n  let imageUrl = '';\r\n  if (imgUrl.indexOf('bing.com/th?id=') >= 0) {\r\n    imageUrl = 'https://' + imgUrl.slice(imgUrl.indexOf('bing.com/th?id='));\r\n  } else if (imgUrl.indexOf('th?id=') >= 0) {\r\n    imageUrl = 'https://bing.com' + imgUrl;\r\n  } else {\r\n    imageUrl = 'https://bing.com/th?id=' + imgUrl;\r\n  }\r\n  return imageUrl;\r\n}\r\n\r\nexport function extractPlacement(item: AdPerformanceData): string {\r\n  // tslint:disable-next-line: no-string-literal\r\n  const { regions, pagetypes } = item;\r\n  return (pagetypes || []).concat(regions || []).join(', ');\r\n}\r\n\r\nexport function exportCSV(blockDataForCSV: Model[], fileName: string, columns: IDataGridColumn[]) {\r\n  const stringDataForCSV: string[] = [];\r\n  for (const rowData of blockDataForCSV) {\r\n    stringDataForCSV.push(\r\n      CSVHelper.getCSVStrings(\r\n        rowData,\r\n        columns.filter((col) => col.isExportColumn)\r\n      )\r\n    );\r\n  }\r\n\r\n  const headerCsvList: string[] = [];\r\n  for (const coldata of columns) {\r\n    if (coldata && coldata.isExportColumn) {\r\n      headerCsvList.push(coldata.headerCSV ? coldata.headerCSV : coldata.friendlyName);\r\n    }\r\n  }\r\n\r\n  CSVHelper.downloadDataAsCSV(stringDataForCSV.join('\\n'), headerCsvList.join(','), fileName);\r\n}\r\n\r\nexport function toHttpsLink(urlToUpdate: string): string {\r\n  if (!urlToUpdate || urlToUpdate.startsWith('http://') || urlToUpdate.startsWith('https://')) {\r\n    // Url is null or already proper http.\r\n    return urlToUpdate;\r\n  } else {\r\n    return 'https://' + urlToUpdate;\r\n  }\r\n}\r\n\r\nexport function samBlockSummaryToAdPerfMapper(items: SAMBlockSummaryData[]): AdPerformanceData[] {\r\n  const mappedItems: AdPerformanceData[] = [];\r\n  items.forEach((item) => {\r\n    if (item.adProvider && item.allAdImages) {\r\n      mappedItems.push({\r\n        apiPath: undefined,\r\n        className: 'adPerformanceData',\r\n        adTitle: item.adTitle,\r\n        adProvider: Number(invert(adProvidersToNames)[item.adProvider]),\r\n        advertiserName: item.advertiser,\r\n        images: item.allAdImages,\r\n        blockedImages: item.allAdImages,\r\n        revenue: item.sevenDayRevenueImpact,\r\n        uniqueCreativeAdId: item.creativeAdId,\r\n      });\r\n    }\r\n  });\r\n\r\n  return mappedItems;\r\n}\r\n\r\nexport function blockDatatoAdPerfMapper(items: BlockAdsData[]): AdPerformanceData[] {\r\n  const mappedItems: AdPerformanceData[] = [];\r\n  items.forEach((item) => {\r\n    if (item.allImages) {\r\n      const imageList = item.allImages.split('___');\r\n      mappedItems.push({\r\n        apiPath: undefined,\r\n        className: 'adPerformanceData',\r\n        adTitle: item.adTitle,\r\n        adId: item.adId,\r\n        revenue: item.pastRevenue,\r\n        accountName: item.accountName,\r\n        advertiserAccountId: item.advertiserAccountId,\r\n        accountId: item.accountId,\r\n        images: imageList,\r\n        blockedImages: imageList,\r\n      });\r\n    }\r\n  });\r\n  return mappedItems;\r\n}\r\n","import { createStore } from 'satcheljs';\r\nimport { IPropertyViewState } from './schema/IPropertyViewState';\r\n\r\nexport const getGridPropertyStore = createStore<IPropertyViewState>('GridPropertyState', {\r\n  isPanelOpen: false,\r\n  isCodePanelOpen: false,\r\n  isFetchingPropertyStatus: false,\r\n  isFetchingData: false,\r\n  isLoading: false,\r\n});\r\n","import { IDropdownOption, IIconStyleProps, IIconStyles, IRefObject, IStyle, IStyleFunctionOrObject, ITheme } from '@fluentui/react';\r\nimport { InjectedIntlProps } from 'react-intl';\r\nimport { Model } from '../../@data';\r\nimport { FilterCondition } from '../../@data/store/schema/enums/FilterCondition';\r\nimport { IFilterItem } from '../../layout/GridPageV2';\r\n\r\nexport interface IGridFilter {\r\n  resetGridFilter(): void;\r\n}\r\n\r\nexport interface IGridFilterProps extends React.HTMLAttributes<HTMLDivElement>, InjectedIntlProps {\r\n  componentRef?: IRefObject<IGridFilter>;\r\n  theme?: ITheme;\r\n  styles?: IStyleFunctionOrObject<IGridFilterStyleProps, IGridFilterStyles>;\r\n  filterItems: IFilterItem[];\r\n  filterMenuCalloutOpen?: boolean;\r\n  onFilterApplied: (filterList: IFilterDetails[]) => void;\r\n  onFilterMenuCalloutClose: () => void;\r\n  onClearAll?: () => void;\r\n  onDeleteTextCondition?: (heading: string, filterCondition: FilterCondition, val: string) => void;\r\n  onListValueChanged?: (heading: string, val: string) => void;\r\n  showClearAll?: boolean;\r\n  initialFilterListValues?: IFilterDetails[];\r\n  hideCallout?: boolean;\r\n}\r\n\r\nexport enum FilterType {\r\n  custom = 'custom',\r\n  string = 'string',\r\n  relational = 'relational',\r\n  date = 'date',\r\n}\r\n\r\nexport interface IFilterDetails {\r\n  filterId: string;\r\n  filterName: string;\r\n  filterType: FilterType;\r\n  columnName?: string;\r\n  filterOptions?: IDropdownOption[];\r\n  filterCondition?: string;\r\n  filterText?: string;\r\n  startDate?: Date;\r\n  endDate?: Date;\r\n  customFunction?: (dataRow: Model, filterDetails: IFilterDetails) => boolean;\r\n  includeNulls?: boolean;\r\n  showNullsCheckboxLabel?: string;\r\n}\r\n\r\nexport interface IGridFilterStyleProps {\r\n  theme: ITheme;\r\n}\r\n\r\nexport interface IGridFilterStyles {\r\n  root: IStyle;\r\n  filterBarFocused?: IStyle;\r\n  filterBarUnFocused?: IStyle;\r\n  appliedfilterList?: IStyle;\r\n  filterInfoContainer?: IStyle;\r\n  highlightedFilterInfoContainer?: IStyle;\r\n  filterInfoFocused?: IStyle;\r\n  filterInfoUnfocused?: IStyle;\r\n  viewAllButton?: IStyle;\r\n  clearAllButton?: IStyle;\r\n  filterSummaryCallout?: IStyle;\r\n  filterCloseIcon?: IStyle;\r\n  calloutCloseIcon?: IStyle;\r\n  filterMenuListItem?: IStyle;\r\n  disabledFilterMenuListItem?: IStyle;\r\n  filterSelectionCallout?: IStyle;\r\n  filterSelectionCalloutTitle?: IStyle;\r\n  filterSelectionToolBar?: IStyle;\r\n  filterSelectionApplyButton?: IStyle;\r\n  filterSelectionCancelButton?: IStyle;\r\n  disabledApplyButton?: IStyle;\r\n  filterSummaryCalloutHeader?: IStyle;\r\n  filterIcon?: IStyle;\r\n  filterInfoSelectors?: IStyle;\r\n  highlightedFilterInfoSelectors?: IStyle;\r\n  filterInfoSummaryItem?: IStyle;\r\n  filterSummaryCalloutTitle?: IStyle;\r\n  filterListPageStyle?: IStyle;\r\n  subComponentStyles: {\r\n    iconButton?: IStyleFunctionOrObject<IIconStyleProps, IIconStyles>;\r\n  };\r\n}\r\n","export enum FilterCondition {\r\n  Equals = 'equals',\r\n  DoesNotEqual = 'does not equal',\r\n  GreaterThan = 'greater than',\r\n  GreaterThanEqual = 'greater than or equals',\r\n  LessThan = 'less than',\r\n  LessThanEqual = 'less than or equals',\r\n  Contains =  'contains',\r\n  DoesNotContain = 'does not contain',\r\n  BeginsWith = 'begins with',\r\n  EndsWith = 'ends with',\r\n}","import { getAppStore, getCurrentPublisherId } from '../@data';\r\nimport { RouteName } from '../pages/ad-management/@data';\r\nimport { PAYMENTS_TAB_KEY, PROFILE_TAB_KEY, REPORT_DASHBOARD_PAGE, SETTINGS_TAB_KEY } from '../pages/ad-management/Account';\r\nimport { RoutePrefix } from '../Routes';\r\n\r\nexport function getAdUnitRoute(): string {\r\n  const { account } = getAppStore();\r\n  const publisherId = getCurrentPublisherId();\r\n\r\n  return `/${RoutePrefix.adManagement}/${publisherId}-${account?.id}/${RouteName.adunit}`;\r\n}\r\n\r\nexport function getSitesRoute(): string {\r\n  const publisherId = getCurrentPublisherId();\r\n  return `/${RoutePrefix.adManagement}/${publisherId}/${RouteName.property}`;\r\n}\r\n\r\nexport function getTythonPublisherRoute() {\r\n  const publisherId = getCurrentPublisherId();\r\n  return `/${RoutePrefix.adManagement}/${publisherId}`;\r\n}\r\n\r\nexport function getTythonProfilePageRoute() {\r\n  return `${getTythonPublisherRoute()}/${RouteName.publisherProfile}#${PROFILE_TAB_KEY}`;\r\n}\r\n\r\nexport function getTythonPaymentPageRoute() {\r\n  return `${getTythonPublisherRoute()}/${RouteName.publisherProfile}#${PAYMENTS_TAB_KEY}`;\r\n}\r\n\r\nexport function getTythonAccountSettingPageRoute() {\r\n  return `${getTythonPublisherRoute()}/${RouteName.publisherProfile}#${SETTINGS_TAB_KEY}`;\r\n}\r\n\r\nexport function getTythonHomePageRoute() {\r\n  return `${getTythonPublisherRoute()}/${RouteName.home}`;\r\n}\r\n\r\nexport function getTythonAdUnitCreatePageRoute() {\r\n  return `${getAdUnitRoute()}/create`;\r\n}\r\n\r\nexport function getTythonSiteCreatePageRoute() {\r\n  return `${getSitesRoute()}/create`;\r\n}\r\n\r\nexport function getTythonInventoryPage(renderAppView = false) {\r\n  const { account } = getAppStore();\r\n  const publisherId = getCurrentPublisherId();\r\n  if (renderAppView) {\r\n    return `/${RoutePrefix.adManagement}/${publisherId}-${account?.id}/${RouteName.inventory}?view=app`;\r\n  }\r\n  return `/${RoutePrefix.adManagement}/${publisherId}-${account?.id}/${RouteName.inventory}`;\r\n}\r\n\r\nexport function getTythonInventoryCreationPageRoute() {\r\n  return `${getTythonInventoryPage()}/create`;\r\n}\r\n\r\nexport function getTythonAdsCreationPageRoute() {\r\n  const { account } = getAppStore();\r\n  const publisherId = getCurrentPublisherId();\r\n  return `/${RoutePrefix.adManagement}/${publisherId}-${account?.id}/${RouteName.ads}/create`;\r\n}\r\n\r\nexport function getTythonAppAdunitCreationRoute() {\r\n  const publisherId = getCurrentPublisherId();\r\n  return `/${RoutePrefix.adManagement}/${publisherId}/${RouteName.adunit}/createApp`;\r\n}\r\n\r\nexport function getTythonAppAdunitEditionRoute(id: string) {\r\n  const publisherId = getCurrentPublisherId();\r\n  return `/${RoutePrefix.adManagement}/${publisherId}/${RouteName.adunit}/editApp/${id}`;\r\n}\r\n\r\nexport function getTythonAppInventoryCreationRoute() {\r\n  const publisherId = getCurrentPublisherId();\r\n  return `/${RoutePrefix.adManagement}/${publisherId}/${RouteName.property}/createApp`;\r\n}\r\n\r\nexport function getTythonAppInventoryEditionRoute(id: string) {\r\n  const publisherId = getCurrentPublisherId();\r\n  return `/${RoutePrefix.adManagement}/${publisherId}/${RouteName.property}/editApp/${id}`;\r\n}\r\n\r\nexport function getTythonReportDashboardPageRoute() {\r\n  return `${getTythonPublisherRoute()}/${REPORT_DASHBOARD_PAGE}`;\r\n}\r\n\r\nexport function getAdBlocksPageRoute() {\r\n  const publisherId = getCurrentPublisherId();\r\n  return `/${RoutePrefix.adManagement}/${publisherId}/${RouteName.adblock}`;\r\n}\r\n\r\nexport function getTythonAdsManageRoute(renderAppView = false) {\r\n  const { account } = getAppStore();\r\n  const publisherId = getCurrentPublisherId();\r\n  if (renderAppView) {\r\n    return `/${RoutePrefix.adManagement}/${publisherId}-${account?.id}/${RouteName.ads}?view=app`;\r\n  }\r\n  return `/${RoutePrefix.adManagement}/${publisherId}-${account?.id}/${RouteName.ads}`;\r\n}\r\n","import { IDictionary } from '../types';\r\n\r\nexport const PUBCENTER_TYTHON_DOMAIN_MAPPING: IDictionary<string> = {\r\n  'localhost:3000': 'http://localhost:3001',\r\n  'pubcenter.azurewebsites.net': 'https://si.monetizenow.microsoft.com',\r\n  'pubcenter2.azurewebsites.net': 'https://offline.si.monetizenow.microsoft.com',\r\n  'next.pubcenter.microsoft.com': 'https://monetizenow.microsoft.com',\r\n  'pubcenternext-staging.azurewebsites.net': 'https://staging.monetizenow.microsoft.com',\r\n};\r\n\r\nexport const PUBCENTER_NEXT_PROD = 'https://next.pubcenter.microsoft.com';\r\nexport const PUBCENTER_NEXT_PROD_STAGING = 'https://pubcenternext-staging.azurewebsites.net';\r\nexport const TYTHON_NEW_PROD = 'https://monetizenow.microsoft.com';\r\nexport const TYTHON_NEW_PROD_STAGING = 'https://staging.monetizenow.microsoft.com';\r\n\r\nexport const PUBCENTER_NEXT_SI = 'https://pubcenter.azurewebsites.net';\r\nexport const PUBCENTER_NEXT_SI_STAGING = 'https://pubcenter2.azurewebsites.net';\r\nexport const TYTHON_NEW_SI = 'https://si.monetizenow.microsoft.com';\r\nexport const TYTHON_NEW_SI_OFFLINE = 'https://offline.si.monetizenow.microsoft.com';\r\n\r\nexport const LOCALHOST = 'http://localhost:3000';\r\nexport const LOCALHOST2 = 'http://localhost:3001';\r\n\r\nexport const NEW_DOMAINS = [TYTHON_NEW_SI, TYTHON_NEW_SI_OFFLINE, TYTHON_NEW_PROD, TYTHON_NEW_PROD_STAGING, LOCALHOST2];\r\n\r\nexport const PUBCENTER_DOMAINS = [\r\n  PUBCENTER_NEXT_SI,\r\n  PUBCENTER_NEXT_SI_STAGING,\r\n  PUBCENTER_NEXT_PROD,\r\n  PUBCENTER_NEXT_PROD_STAGING,\r\n  LOCALHOST,\r\n];\r\n","import { createStore } from 'satcheljs';\r\nimport { IAdunitViewState } from './schema/IAdunitViewState';\r\n\r\nexport const getAdunitStore = createStore<IAdunitViewState>('AdunitState', {\r\n  active: {},\r\n  enablePrivateMarketplace: false,\r\n  errors: {},\r\n  isPanelOpen: false,\r\n  adUnitsRaw: {},\r\n  isSubmittable: false,\r\n  isFetchingAdUnitStatus: false,\r\n  mediationUpdatePool: [],\r\n  scriptProps: undefined,\r\n});\r\n","import { LOCAL_STORAGE_LOCALE } from '../../constants';\r\nimport { UserType } from '../store/schema';\r\nimport { getAppStore } from '../store/store';\r\n\r\nexport const isTythonSelfServeUser = () => {\r\n  const { userContext } = getAppStore();\r\n  if (userContext && userContext.userType && userContext.userType === UserType.TythonSelfServe) {\r\n    return true;\r\n  }\r\n\r\n  return false;\r\n};\r\n\r\nexport const isNotAuthorizedUser = () => {\r\n  const { publisher, userContext } = getAppStore();\r\n  return publisher === undefined && userContext?.id === undefined;\r\n};\r\n\r\nexport const isLocalRetrieved = () => {\r\n  return !!localStorage.getItem(LOCAL_STORAGE_LOCALE);\r\n};\r\n\r\nexport const isInternalUser = (): boolean => {\r\n  const store = getAppStore();\r\n  const defaultPublisherId = store.defaultPublisher ?? 0;\r\n\r\n  const publisherId = store.publisher?.id;\r\n\r\n  if (publisherId && [3000, 3001, 3002, 3003, 3004, 0].includes(defaultPublisherId)) {\r\n    return true;\r\n  }\r\n\r\n  return false;\r\n};\r\n","import { mutatorAction } from 'satcheljs';\r\nimport { CustomPanelType, Model, PopupType } from '../../../../@data';\r\nimport { IGridQuery } from '../../GridV2.types';\r\nimport { getStore } from '../store/store';\r\n\r\nexport const setSearchWord = mutatorAction('setSearchWord', (word: string) => {\r\n  getStore().searchWord = word;\r\n});\r\n\r\nexport const setIsSearchCalloutVisible = mutatorAction('setIsSearchCalloutVisible', (isVisible: boolean) => {\r\n  getStore().isSearchCalloutVisible = isVisible;\r\n});\r\n\r\nexport const setData = mutatorAction('setData', (data: Model[]) => {\r\n  getStore().data = data;\r\n});\r\n\r\n// tslint:disable-next-line: no-any\r\nexport const setSelectedItems = mutatorAction('setSelectedItems', (items: any[]) => {\r\n  getStore().selectedItems = items;\r\n});\r\n\r\nexport const setLoading = mutatorAction('setLoading', (loading: boolean) => {\r\n  getStore().loading = loading;\r\n});\r\n\r\nexport const setQuery = mutatorAction('setQuery', (query: IGridQuery<Model>) => {\r\n  getStore().query = query;\r\n});\r\n\r\nexport const setEntity = mutatorAction('setEntity', (entity: new () => Model) => {\r\n  getStore().entity = entity;\r\n});\r\n\r\nexport const setFilterMenuCalloutStatus = mutatorAction('setFilterMenuCalloutStatus', (isOpen: boolean) => {\r\n  getStore().filterMenuCalloutOpen = isOpen;\r\n});\r\n\r\nexport const setDialogType = mutatorAction('setDialogType', (dialogType: PopupType) => {\r\n  getStore().dialogType = dialogType;\r\n});\r\n\r\nexport const setPanelType = mutatorAction('setPanelType', (panelType: CustomPanelType) => {\r\n  getStore().panelType = panelType;\r\n});\r\n\r\nexport const onPageSizeChanged = mutatorAction('onPageSizeChanged', (value: number) => {\r\n  getStore().paginator.currentPageSize = value;\r\n  const data = getStore().data;\r\n  if (data) {\r\n    getStore().paginator.numberOfPages = Math.ceil(data.length / value);\r\n  }\r\n});\r\n\r\nexport const onPageNumberChanged = mutatorAction('onPageNumberChanged', (value: number) => {\r\n  getStore().paginator.currentPageNumber = value;\r\n});\r\n\r\nexport const onNumberOfPagesChanged = mutatorAction('onNumberOfPagesChanged', (value: number) => {\r\n  getStore().paginator.numberOfPages = value;\r\n});\r\n","import { mutatorAction } from 'satcheljs';\r\nimport { IColumnVisibilityMapping } from '../../GridV2.types';\r\nimport { getGridColumns } from '../selectors/gridSelectors';\r\nimport { getStore } from '../store/store';\r\n\r\nexport const onGridColumnsModified = mutatorAction('onGridColumnsModified', (columnVisibilityMappings: IColumnVisibilityMapping[]) => {\r\n  const { entity } = getStore();\r\n  const gridColumns = getGridColumns();\r\n\r\n  if (entity) {\r\n    columnVisibilityMappings.forEach((colVisMap) => {\r\n      const gridColumn = gridColumns.find((col) => col.key === colVisMap.columnKey);\r\n\r\n      if (gridColumn) {\r\n        gridColumn.isVisible = colVisMap.isVisible;\r\n      }\r\n    });\r\n  }\r\n});\r\n","import { getAppStore } from '../../../../@data';\r\nimport { IGridV2Column } from '../../GridV2.types';\r\nimport { getStore } from '../store/store';\r\n\r\nexport const getGridColumns = (): IGridV2Column[] => {\r\n  const { entityGridColumns } = getAppStore();\r\n  const { entity } = getStore();\r\n\r\n  if (entityGridColumns && entity) {\r\n    const entityColumns = entityGridColumns.find((entityGridColumn) => entityGridColumn.entity === entity);\r\n    return entityColumns ? (entityColumns.gridColumns as IGridV2Column[]) : [];\r\n  }\r\n  return [];\r\n};\r\n","export const LOADING_SPINNER = 'loading-spinner';\r\nexport const WHITE_PAGE_LOADING_SPINNER = 'white-page-loading-spinner';\r\n\r\nexport const REPORTING_DATE_RANGE_PICKER = 'reporting-date-range-picker';\r\nexport const DATE_RANGE_PICKER_PRESET_CUSTOM = 'date-range-picker-preset-custom';\r\nexport const DATE_RANGE_PICKER_PRESET_TODAY = 'date-range-picker-preset-today';\r\nexport const DATE_RANGE_PICKER_PRESET_YESTERDAY = 'date-range-picker-preset-yesterday';\r\nexport const DATE_RANGE_PICKER_PRESET_THIS_WEEK_SUN_TODAY = 'date-range-preset-this-week-sun-today';\r\nexport const DATE_RANGE_PICKER_PRESET_THIS_WEEK_MON_TODAY = 'date-range-preset-this-week-mon-today';\r\nexport const DATE_RANGE_PICKER_PRESET_LAST_7_DAYS = 'date-range-picker-preset-last-7-days';\r\nexport const DATE_RANGE_PICKER_PRESET_LAST_WEEK_SUN_SAT = 'date-range-picker-preset-last-week-sun-sat';\r\nexport const DATE_RANGE_PICKER_APPLY_BUTTON = 'date-range-picker-apply-button';\r\nexport const GRAIN_SELECTOR_BUTTON = 'granularity-selector-button';\r\nexport const PERFORMANCE_CHART_TYPE_LINE_BUTTON = 'performance-chart-type-line-button';\r\nexport const PERFORMANCE_CHART_TYPE_BAR_BUTTON = 'performance-chart-type-bar-button';\r\nexport const PERFORMANCE_CHART_TYPE_DONUT_BUTTON = 'performance-chart-type-donut-button';\r\nexport const ADUNIT_CHART_TYPE_GRID_BUTTON = 'adunit-chart-type-grid-button';\r\nexport const ADUNIT_CHART_TYPE_BAR_BUTTON = 'adunit-chart-type-bar-button';\r\nexport const ADUNIT_CHART_TYPE_DONUT_BUTTON = 'adunit-chart-type-donut-button';\r\nexport const COUNTRY_CHART_TYPE_MAP_BUTTON = 'country-chart-type-map-button';\r\nexport const COUNTRY_CHART_TYPE_BAR_BUTTON = 'country-chart-type-bar-button';\r\nexport const COUNTRY_CHART_TYPE_GRID_BUTTON = 'country-chart-type-grid-button';\r\nexport const MEDIATION_CHART_TYPE_GRID_BUTTON = 'mediation-chart-type-grid-button';\r\nexport const MEDIATION_CHART_TYPE_BAR_BUTTON = 'mediation-chart-type-bar-button';\r\nexport const MEDIATION_CHART_TYPE_DONUT_BUTTON = 'mediation-chart-type-donut-button';\r\nexport const SITE_CHART_TYPE_BAR_BUTTON = 'site-chart-type-bar-button';\r\nexport const SITE_CHART_TYPE_GRID_BUTTON = 'site-chart-type-grid-button';\r\nexport const SITE_CHART_TYPE_DONUT_BUTTON = 'site-chart-type-donut-button';\r\nexport const CHART_WRAPPER = 'chart-wrapper';\r\nexport const CLARITY_BEHAVIORAL_RADIO_BUTTON = 'clarity-behavioral-radio-button';\r\nexport const CLARITY_BASIC_RADIO_BUTTON = 'clarity-basic-radio-button';\r\nexport const CLARITY_EXISTING_RADIO_BUTTON = 'clarity-existing-radio-button';\r\nexport const PROPERTY_NAME_INPUT = 'property-name-input';\r\nexport const PROPERTY_DOMAIN_INPUT = 'property-domain-input';\r\n","export * from './entityEvaluationMutatorActions';\r\nexport * from './onAdManagementStoreChanged';\r\nexport * from './publisherEvaluationActions';\r\n","import { defineMessages } from 'react-intl';\r\n\r\nexport default defineMessages({\r\n  reportTitle: {\r\n    id: 'report.reportTitle',\r\n    defaultMessage: 'Reports',\r\n  },\r\n  reportDescriptionForPublisherSelected: {\r\n    id: 'report.reportDescriptionForPublisherSelected',\r\n    defaultMessage:\r\n      // tslint:disable-next-line:max-line-length\r\n      'Reports aren’t available in the latest version of pubCenter yet. To access reports through the previous version, click Go to reports.',\r\n  },\r\n  reportDescriptionForPublisherNotSelected: {\r\n    id: 'report.reportDescriptionForPublisherNotSelected',\r\n    defaultMessage:\r\n      // tslint:disable-next-line:max-line-length\r\n      'Reports aren’t available in the latest version of pubCenter yet.  To access reports through the previous version, please select a publisher first.',\r\n  },\r\n  reportDescriptionForReportsNotApplicable: {\r\n    id: 'report.reportDescriptionForReportsNotApplicable',\r\n    defaultMessage: 'Reports aren’t enabled for this publisher.',\r\n  },\r\n  reportLink: {\r\n    id: 'report.reportLink',\r\n    defaultMessage: 'Go to reports',\r\n  },\r\n  metricsDropdownLabel: {\r\n    id: 'report.metricsDropdownLabel',\r\n    defaultMessage: 'Metrics Dropdown',\r\n  },\r\n  shareScheduleDropdownLabel: {\r\n    id: 'report.shareScheduleDropdownLabel',\r\n    defaultMessage: 'Schedule',\r\n  },\r\n  viewReportLink: {\r\n    id: 'report.viewReportLink',\r\n    defaultMessage: 'View report',\r\n  },\r\n  noData: {\r\n    id: 'report.noData',\r\n    defaultMessage: 'No data matches filters',\r\n  },\r\n  breakDownBy: {\r\n    id: 'report.breakDownBy',\r\n    defaultMessage: 'Break down by',\r\n  },\r\n  toggleChartIcon: {\r\n    id: 'report.toggleChartIcon',\r\n    defaultMessage: 'Show/Hide chart',\r\n  },\r\n  chartSelectIcon: {\r\n    id: 'report.chartSelectIcon',\r\n    defaultMessage: '{chartType} chart',\r\n  },\r\n  metricPickerEditButtonTitle: {\r\n    id: 'report.metricPickerEditButtonTitle',\r\n    defaultMessage: 'Add or remove metrics',\r\n  },\r\n  exportCSV: {\r\n    id: 'report.exportCSV',\r\n    defaultMessage: 'Export as CSV',\r\n  },\r\n  exportPNG: {\r\n    id: 'report.exportPNG',\r\n    defaultMessage: 'Export as PNG',\r\n  },\r\n  chartIncompatibleFieldsWithFilterWillNotBeShown: {\r\n    id: 'report.chartIncompatibleFieldsWithFilterWillNotBeShown',\r\n    defaultMessage: '{metrics} values will not be shown when an {dimensions} filter is applied.',\r\n  },\r\n  chartIncompatibleFieldsWithFilterCantBeShown: {\r\n    id: 'report.chartIncompatibleFieldsWithFilterCantBeShown',\r\n    defaultMessage: '{metrics} values can not be shown when an {dimensions} filter is applied.',\r\n  },\r\n  gridIncompatibleFieldsWhenAddingColumnWithFilter: {\r\n    id: 'report.gridIncompatibleFieldsWhenAddingColumnWithFilter',\r\n    defaultMessage: '{metrics} will not show values because an {dimensions} filter is applied.',\r\n  },\r\n  gridIncompatibleFieldsWhenAddingColumnWithBreakdown: {\r\n    id: 'report.gridIncompatibleFieldsWhenAddingColumnWithBreakdown',\r\n    defaultMessage: '{metrics} will not show values because performance is broken down by {dimensions}.',\r\n  },\r\n  gridIncompatibleFieldsWhenAddingColumnWithFilterAndBreakdown: {\r\n    id: 'report.gridIncompatibleFieldsWhenAddingColumnWithFilterAndBreakdown',\r\n    defaultMessage: '{metrics} will not show values because performance is filtered and broken down by {dimensions}.',\r\n  },\r\n  gridIncompatibleFieldsWithFilter: {\r\n    id: 'report.gridIncompatibleFieldsWithFilter',\r\n    defaultMessage: '{metrics} values can not be shown because an {dimensions} filter is applied.',\r\n  },\r\n  gridIncompatibleFieldsWithBreakdown: {\r\n    id: 'report.gridIncompatibleFieldsWithBreakdown',\r\n    defaultMessage: '{metrics} values can not be shown because performance is broken down by {dimensions}.',\r\n  },\r\n  gridIncompatibleFieldsWithFilterAndBreakdown: {\r\n    id: 'report.gridIncompatibleFieldsWithFilterAndBreakdown',\r\n    defaultMessage:\r\n      '{metrics} values can not be shown because an {dimensions} filter is applied and performance is broken down by {dimensions}.',\r\n  },\r\n  gridIncompatibleFieldsWhenBreakingDown: {\r\n    id: 'report.gridIncompatibleFieldsWhenBreakingDown',\r\n    defaultMessage: '{metrics} values will not be shown if broken down by {dimensions}.',\r\n  },\r\n  topBarExportPNG: {\r\n    id: 'topBar.exportPNG',\r\n    defaultMessage: 'Generating and exporting PNG',\r\n  },\r\n  dimensionColumnMembersFailedMessage: {\r\n    id: 'report.dimensionColumnMembersFailedMessage',\r\n    defaultMessage: \"We're unable to load your publisher details at this time. Please try again later.\",\r\n  },\r\n  loadingReportSummaryFailedMessage: {\r\n    id: 'report.loadingReportSummaryFailedMessage',\r\n    defaultMessage: \"We're unable to load your summary.\",\r\n  },\r\n  loadingReportFailedMessage: {\r\n    id: 'report.loadingReportFailedMessage',\r\n    defaultMessage: \"We're unable to load your {reportType} report.\",\r\n  },\r\n  loadingDetailedReportFailedMessage: {\r\n    id: 'report.loadingDetailedReportFailedMessage',\r\n    defaultMessage: \"We're unable to load your detailed {reportType} report.\",\r\n  },\r\n  loadingMediationReportFailedMessage: {\r\n    id: 'report.loadingMediationReportFailedMessage',\r\n    defaultMessage: \"We're unable to load your mediation report.\",\r\n  },\r\n  loadingReportMetadataFailedMessage: {\r\n    id: 'report.loadingReportMetadataFailedMessage',\r\n    defaultMessage: \"We're unable to load your metadata for reports.\",\r\n  },\r\n  loadingPublisherDetailsFailedMessage: {\r\n    id: 'report.loadingPublisherDetailsFailedMessage',\r\n    defaultMessage:\r\n      'Your publisher details are incomplete. Please make sure that your publisher details are updated so that your site and ad units are reported.',\r\n  },\r\n  failedToExportReportAsPNG: {\r\n    id: 'report.failedToExportReportAsPNG',\r\n    defaultMessage: 'Failed to export report as PNG',\r\n  },\r\n  reportInvalidState: {\r\n    id: 'report.reportInvalidState',\r\n    defaultMessage: 'You have arrived in an invalid state, please report.',\r\n  },\r\n  failedToFetchPublisherReportDetails: {\r\n    id: 'report.failedToFetchPublisherReportDetails',\r\n    defaultMessage: 'Failed to fetch publisher details to determine if reporting is applicable',\r\n  },\r\n  reportsNotAvailableAtThisTime: {\r\n    id: 'report.reportsNotAvailableAtThisTime',\r\n    defaultMessage: 'Reports are not available at this time. Please contact support to resolve this issue.',\r\n  },\r\n});\r\n","import { mutatorAction } from 'satcheljs';\r\nimport { getAppStore } from '..';\r\n\r\nexport const onLocaleChanged = mutatorAction('onLocaleChanged', (locale?: string) => {\r\n  if (locale) {\r\n    // locale: en-us\r\n    getAppStore().locale = locale.split('-')[0];\r\n  }\r\n});\r\n","import { mutatorAction } from 'satcheljs';\r\nimport { PublisherTier } from '../store';\r\n\r\nexport const onSetFirstPartyBoost = mutatorAction('onIsFirstPartyBoost', (publisherTier?: PublisherTier) => {\r\n  if (publisherTier === PublisherTier.SelfServe1stPartyBoost) {\r\n    sessionStorage.setItem('IsBoostPublisher', 'true');\r\n  } else {\r\n    sessionStorage.setItem('IsBoostPublisher', 'false');\r\n  }\r\n});\r\n","import { mutatorAction } from 'satcheljs';\r\nimport { CustomPanelType } from '../store';\r\nimport { getAppStore } from '../store/store';\r\n\r\nexport const onPanelTypeChanged = mutatorAction('onDialogTypeChanged', (panelType: CustomPanelType) => {\r\n  getAppStore().openedPanel = panelType;\r\n});\r\n","import { mutatorAction } from 'satcheljs';\r\nimport { PopupType } from '../store/schema/enums/PopupType';\r\nimport { getAppStore } from '../store/store';\r\n\r\nexport const onPopupOpenChanged = mutatorAction('onPopupOpenChanged', (openedPopup: PopupType) => {\r\n  getAppStore().openedPopup = openedPopup;\r\n});","import { mutatorAction } from 'satcheljs';\r\nimport {\r\n  IToastNotificationItem,\r\n  IToastNotificationItemContent,\r\n  ToastType,\r\n} from '../../components/ToastNotification/ToastNotification.types';\r\nimport { getAppStore } from '../store/store';\r\n\r\nexport const showSuccessToastNotification = mutatorAction('showSuccessToastNotification', (content: IToastNotificationItemContent) =>\r\n  appendNewNotification(ToastType.success, content)\r\n);\r\n\r\nexport const showInfoToastNotification = mutatorAction('showInfoToastNotification', (content: IToastNotificationItemContent) =>\r\n  appendNewNotification(ToastType.info, content)\r\n);\r\n\r\nexport const showWarningToastNotification = mutatorAction('showWarningToastNotification', (content: IToastNotificationItemContent) =>\r\n  appendNewNotification(ToastType.warning, content)\r\n);\r\n\r\nexport const showErrorToastNotification = mutatorAction('showErrorToastNotification', (content: IToastNotificationItemContent) =>\r\n  appendNewNotification(ToastType.error, content)\r\n);\r\n\r\nexport const showLoadingToastNotification = mutatorAction('showLoadingToastNotification', (content: IToastNotificationItemContent) => {\r\n  if (!content.onDismiss) {\r\n    throw new Error('onDismiss should be provided');\r\n  }\r\n  content.suppressAutoDismiss = true;\r\n  content.noDismissButton = true;\r\n  appendNewNotification(ToastType.loading, content);\r\n});\r\n\r\nexport const removeToastNotification = mutatorAction('removeToastNotification', (notification: IToastNotificationItem) => {\r\n  const store = getAppStore();\r\n  const notifications = store.toastNotifications || [];\r\n  const indexOfNotification = notifications.findIndex((item) => item.id === notification.id);\r\n  store.toastNotifications = [...notifications.slice(0, indexOfNotification), ...notifications.slice(indexOfNotification + 1)];\r\n});\r\n\r\nconst appendNewNotification = (type: ToastType, content: IToastNotificationItemContent) => {\r\n  const store = getAppStore();\r\n  const notifications = store.toastNotifications || [];\r\n  store.toastNotifications = [\r\n    ...notifications,\r\n    {\r\n      // tslint:disable-next-line: no-any\r\n      id: (crypto as any).randomUUID(),\r\n      type,\r\n      content,\r\n    },\r\n  ];\r\n};\r\n","const offlineUrlIdentifiers = [\r\n  'pubcenter2.azurewebsites.net', // nonTython SI LDC2\r\n  'pubcenternext-staging.azurewebsites.net', // nonTython prod LDC2\r\n  'offline.si.monetizenow.microsoft.com', // tython SI LDC2\r\n  'staging.monetizenow.microsoft.com', // tython prod LDC2\r\n];\r\n\r\nconst isOfflineUI = offlineUrlIdentifiers.some((url) => window.location.hostname.indexOf(url) > -1) ? 'offline.' : '';\r\n\r\nconst uiConfigInternal = {\r\n  apiBaseAddress:\r\n    process.env.REACT_APP_ENV === 'production'\r\n      ? `https://${isOfflineUI}search.pubcenter.microsoft.com/api/v{version}`\r\n      : `https://${isOfflineUI}search.si.pubcenter.microsoft.com/api/v{version}`,\r\n  metadataApiBaseAddess:\r\n    process.env.REACT_APP_ENV === 'production'\r\n      ? `https://${isOfflineUI}search.pubcenter.microsoft.com/api/v{version}/metadata/clientcenter/`\r\n      : `https://${isOfflineUI}search.si.pubcenter.microsoft.com/api/v{version}/metadata/clientcenter/`,\r\n  customerMetadataApiBaseAddess:\r\n    process.env.REACT_APP_ENV === 'production'\r\n      ? `https://${isOfflineUI}search.pubcenter.microsoft.com/api/v{version}/metadata/customer/`\r\n      : `https://${isOfflineUI}search.si.pubcenter.microsoft.com/api/v{version}/metadata/customer/`,\r\n  adUnitMetadataApiBaseAddress:\r\n    process.env.REACT_APP_ENV === 'production'\r\n      ? `https://${isOfflineUI}search.pubcenter.microsoft.com/api/v{version}/metadata/adunit/`\r\n      : `https://${isOfflineUI}search.si.pubcenter.microsoft.com/api/v{version}/metadata/adunit/`,\r\n  adQualityApiBaseAddress:\r\n    process.env.REACT_APP_ENV === 'production'\r\n      ? `https://${isOfflineUI}search.pubcenter.microsoft.com/api/`\r\n      : `https://${isOfflineUI}search.si.pubcenter.microsoft.com/api/`,\r\n  reportingDashboardAddress:\r\n    process.env.REACT_APP_ENV === 'production'\r\n      ? `https://${isOfflineUI}pubcenter.microsoft.com/Dashboard?commonsessionid={commonSessionId}#paidsearchdashboard`\r\n      : `https://${isOfflineUI}si.pubcenter.microsoft.com/Dashboard?commonsessionid={commonSessionId}#paidsearchdashboard`,\r\n  reportingApiBaseAddress:\r\n    process.env.REACT_APP_ENV === 'production'\r\n      ? `https://${isOfflineUI}search.pubcenter.microsoft.com/api/preauth/reporting?routeSuffix=api/`\r\n      : `https://${isOfflineUI}search.si.pubcenter.microsoft.com/api/preauth/reporting?routeSuffix=api/`,\r\n  mediationReportingApiBaseAddress:\r\n    process.env.REACT_APP_ENV === 'production'\r\n      ? `https://${isOfflineUI}search.pubcenter.microsoft.com/api/preauth/mediation?routeSuffix=api/`\r\n      : `https://${isOfflineUI}search.si.pubcenter.microsoft.com/api/preauth/mediation?routeSuffix=api/`,\r\n  defaultApiVersion: '1.2',\r\n};\r\n\r\nexport const uiConfig = {\r\n  getApiBaseAddress(apiVersion?: string): string {\r\n    return uiConfig.replaceApiVersion(uiConfigInternal.apiBaseAddress, apiVersion);\r\n  },\r\n\r\n  getMetadataApiBaseAddress(apiVersion?: string): string {\r\n    return uiConfig.replaceApiVersion(uiConfigInternal.metadataApiBaseAddess, apiVersion);\r\n  },\r\n\r\n  getCustomerMetadataApiBaseAddress(apiVersion?: string): string {\r\n    return uiConfig.replaceApiVersion(uiConfigInternal.customerMetadataApiBaseAddess, apiVersion);\r\n  },\r\n\r\n  getAdUnitMetadataApiBaseAddress(apiVersion?: string): string {\r\n    return uiConfig.replaceApiVersion(uiConfigInternal.adUnitMetadataApiBaseAddress, apiVersion);\r\n  },\r\n\r\n  getAdQualityApiBaseAddress(apiVersion?: string): string {\r\n    return uiConfig.replaceApiVersion(uiConfigInternal.adQualityApiBaseAddress, apiVersion);\r\n  },\r\n\r\n  getReportingDashboardAddress(commonSessionId: string): string {\r\n    return uiConfigInternal.reportingDashboardAddress.replace('{commonSessionId}', commonSessionId);\r\n  },\r\n\r\n  getDefaultApiVersion(): string {\r\n    return uiConfigInternal.defaultApiVersion;\r\n  },\r\n\r\n  getReportingApiBaseAddress(apiVersion?: string): string {\r\n    return uiConfigInternal.reportingApiBaseAddress;\r\n  },\r\n\r\n  getMediationReportingApiBaseAddress(apiVersion?: string): string {\r\n    return uiConfigInternal.mediationReportingApiBaseAddress;\r\n  },\r\n\r\n  replaceApiVersion(endpointBaseAddress: string, apiVersion?: string): string {\r\n    if (!apiVersion) {\r\n      apiVersion = uiConfigInternal.defaultApiVersion;\r\n    }\r\n\r\n    return endpointBaseAddress.replace('{version}', String(apiVersion));\r\n  },\r\n\r\n  getApexInitUrl(): string {\r\n    // This is the endpoint of apex service\r\n    // For PROD environment it is https://help.ads.microsoft.com\r\n    // For SI environment it is https://help.ads-int.microsoft.com\r\n    return process.env.REACT_APP_ENV === 'production' ? 'https://help.ads.microsoft.com' : 'https://help.ads-int.microsoft.com';\r\n  },\r\n};\r\n","import { ICommandBarItemProps, ICommandBarProps, IDropdownOption, IShimmeredDetailsListProps, MessageBarType } from '@fluentui/react';\r\nimport { FormattedMessage } from 'react-intl';\r\nimport { LifeCycleStatus, Model } from '../../@data';\r\nimport { IFormTitleStyles } from '../../components/Form';\r\nimport { FilterType, IFilterDetails } from '../../components/GridFilter/GridFilter.types';\r\nimport { ICustomColumn } from '../../types';\r\nimport { IRouterWithIntl } from '../../utils';\r\nimport { IGridStyles } from './GridV2.styles';\r\n\r\nexport interface ISelectableRow extends Model {\r\n  isSelected: boolean;\r\n  isDisabled?: boolean;\r\n}\r\n\r\nexport interface IGridV2Props<T extends Model> extends IRouterWithIntl {\r\n  entity: new () => T;\r\n  pageTitle?: IPageTitleProps;\r\n  notGridReadyLabel?: string;\r\n  isGridReady?: boolean;\r\n  isDataLoading?: boolean;\r\n  commandBarProps?: IBuildCommandBarProps<T>;\r\n  dataGridProps: Omit<IDataGridProps, 'columns' | 'items'>;\r\n  paginationProps?: IPaginationProps;\r\n  styleProps?: Partial<IGridStyles>;\r\n  msgBarProps?: {\r\n    className?: string;\r\n    messageBarType: MessageBarType;\r\n    children: JSX.Element;\r\n    onDismiss?: () => void;\r\n  };\r\n  children?: React.ReactNode;\r\n  bypassGridResetting?: boolean;\r\n  bypassFiltrationAndSearching?: boolean;\r\n}\r\n\r\nexport interface IPageTitleProps {\r\n  title: string;\r\n  helpId?: string;\r\n  styleProps?: IFormTitleStyles;\r\n}\r\n\r\nexport interface IGridV2Column extends ICustomColumn<Model> {\r\n  columnOrder?: number;\r\n  isVisible?: boolean;\r\n  // If true, disable the checkbox for this column in the modify columns panel\r\n  isShowingDisabled?: boolean;\r\n  isExportable?: boolean;\r\n  // to show shimmer on the column items is not ready\r\n  isLoading?: boolean;\r\n  // tslint:disable-next-line: no-any\r\n  exportFunction?: (rowItem: Model) => any;\r\n  /* in case column is rendering custom/derived data */\r\n  searchFunction?: (rowItem: Model, searchWord: string) => boolean;\r\n  // use this instead of onRender for custom rendering\r\n  onRenderData?: (rowItem: Model) => JSX.Element;\r\n  csvHeaderName?: string;\r\n  incompatibleProps?: {\r\n    isIncompatible?: boolean;\r\n    incompatibleCantMessage?: string;\r\n    incompatibleWontMessage?: string;\r\n  };\r\n}\r\n\r\nexport interface IBuildCommandBarProps<T extends Model> {\r\n  hasFilter?: boolean;\r\n  includeActions?: CommandBarActions[];\r\n  includeFarActions?: CommandBarActions[];\r\n  excludeActions?: CommandBarActions[];\r\n  getCustomCommandBarItems?: (getSelectedItems: () => Model[]) => IGridPageCommandBarItemProps[];\r\n  filterItems?: IFilterItem[];\r\n  dataQueryProps?: IGridQuery<T>;\r\n  primaryButtonLabel?: FormattedMessage.MessageDescriptor;\r\n  primaryButtonUrl?: string;\r\n  deactivateLabels?: IDestructiveDialogLabelsProps;\r\n  deleteLabels?: IDestructiveDialogLabelsProps;\r\n  searchBoxPlaceholder?: FormattedMessage.MessageDescriptor;\r\n  hideModifyColumnsDescription?: boolean;\r\n  onDeactivateDialogDismiss?: () => void;\r\n  // Returns the deleted items\r\n  onPreDeleteItems?: (items: Model[]) => void;\r\n  // Returns the remaining items after deletion\r\n  onDeleteItems?: (items: Model[]) => void;\r\n  // Returns the deleted items\r\n  onPostDeleteItems?: (items: Model[]) => void;\r\n  onItemsStatusChanged?: (items: Model[], status: LifeCycleStatus) => void;\r\n  onDuplicateItems?: (items: Model[]) => void;\r\n  // tslint:disable-next-line: no-any\r\n  customApplyFilterFn?: (filterDetails: IFilterDetails[], items: any[]) => any[];\r\n}\r\n\r\nexport interface IDataGridProps extends IShimmeredDetailsListProps {\r\n  gridV2Columns: IGridV2Column[];\r\n  onColumnsChanged?: (columns: IGridV2Column[]) => void;\r\n  onSelectionChanged?: (selectedItems: Model[]) => void;\r\n  identifier?: string;\r\n  defaultSortBy?: string;\r\n  data: Model[];\r\n  selectedRows?: Model[];\r\n  setData?: (data?: Model[]) => void;\r\n  renderZeroItemsComponent?: JSX.Element;\r\n  noEntityFound?: FormattedMessage.MessageDescriptor;\r\n  renderEmptyGrid?: boolean;\r\n  hideDisableStyle?: boolean;\r\n}\r\n\r\nexport interface IPaginationProps {\r\n  numberOfPages?: number;\r\n  onPageChange?: (pageNumber: number, pageSize: number) => void;\r\n  shouldGridHandlePagination?: boolean;\r\n  showPagination?: boolean;\r\n}\r\n\r\nexport interface IColumnVisibilityMapping {\r\n  columnKey: string;\r\n  isVisible: boolean;\r\n}\r\n\r\nexport interface IDestructiveDialogLabelsProps {\r\n  title: FormattedMessage.MessageDescriptor;\r\n  description?: FormattedMessage.MessageDescriptor;\r\n}\r\n\r\nexport interface IGridQuery<T extends Model> {\r\n  models?: (Model | undefined)[];\r\n  entity: new () => T;\r\n  params?: URLSearchParams;\r\n}\r\n\r\nexport enum CommandBarActions {\r\n  new = 'new',\r\n  edit = 'edit',\r\n  code = 'code',\r\n  delete = 'delete',\r\n  activate = 'activate',\r\n  deactivate = 'deativate',\r\n  modifyColumns = 'modifyColumns',\r\n  export = 'export',\r\n  duplicate = 'duplicate',\r\n  upload = 'upload',\r\n  download = 'download',\r\n  addFilter = 'addFilter',\r\n  tokenStatus = 'tokenStatus',\r\n  clarity = 'clarity',\r\n  searchBox = 'searchBox',\r\n  custom = 'custom',\r\n}\r\n\r\nexport interface IGridPageCommandBarItemProps extends IDataGridCommandBarItemProps {\r\n  placement: IGridPageCommandBarPlacement; // relative placement of the command bar item\r\n}\r\n\r\nexport interface IGridPageCommandBarItemsProps {\r\n  includes?: IGridPageCommandBarItemProps[];\r\n  excludes?: CommandBarActions[];\r\n}\r\n\r\nexport interface IGridPageCommandBarPlacement {\r\n  direction: Direction;\r\n  key?: CommandBarActions;\r\n  alignment?: CommandBarItemAlignment;\r\n}\r\n\r\nexport enum Direction {\r\n  before,\r\n  after,\r\n}\r\n\r\nexport enum CommandBarItemAlignment {\r\n  left,\r\n  right, // will be added to far actions\r\n}\r\n\r\nexport interface IDataGridCommandBarProps extends ICommandBarProps {\r\n  items: IDataGridCommandBarItemProps[];\r\n}\r\n\r\nexport interface IDataGridCommandBarItemProps extends ICommandBarItemProps {\r\n  selectionModes?: GridSelectionMode[];\r\n  selectionStatus?: LifeCycleStatus;\r\n}\r\n\r\nexport enum GridSelectionMode {\r\n  None,\r\n  Single,\r\n  Multiple,\r\n  All,\r\n}\r\n\r\nexport interface IFilterItem {\r\n  filterName: string;\r\n  /**\r\n   * column name in the API (JSON) response data corresponding to this filter item,\r\n   * Note: Either customFunction or columnName should be passed for filter to be applied\r\n   */\r\n  columnName?: string;\r\n  filterType: FilterType;\r\n  filterOptions?: IDropdownOption[];\r\n  /** Define this function to filter grid using a custom defined function */\r\n  customFunction?: (dataRow: Model, filterDetails: IFilterDetails) => boolean;\r\n  /**\r\n   * If checkbox label is provided then user would see a checkbox while applying the filter.\r\n   * When checkbox is checked filtered results will include rows with NULL/undefined values\r\n   */\r\n  showNullsCheckboxLabel?: string;\r\n  /**\r\n   * Default is false.\r\n   * If true, rows with undefined/null values for this column will also be included in the filtered results\r\n   */\r\n  includeNullsInFilterResults?: boolean;\r\n}\r\n\r\n// To be removed -- Used by AdCreativePage\r\nexport interface IDataGridColumn {\r\n  columnName: string;\r\n  friendlyName: string;\r\n  headerCSV?: string;\r\n  isVisible: boolean;\r\n  // tslint:disable-next-line: no-any\r\n  exportFunction?: (val: any) => any;\r\n  isExportColumn?: boolean;\r\n  /**\r\n   * (Optional) Provide this function to modify the column data.\r\n   */\r\n  // tslint:disable-next-line: no-any\r\n  displayFunction?: (val: any, item?: any) => any;\r\n}\r\n\r\nexport enum DownloadOption {\r\n  page,\r\n  selection,\r\n  all,\r\n}\r\n","import React from 'react';\r\n\r\nexport const isButtonPressKey = (key: string): boolean => {\r\n  /* Based on Accessibility standard keystrokes for button press, keyboardEvents for key press of\r\n   Enter and Space (encoded as ' ') are considered for button press\r\n   https://www.w3.org/TR/uievents-key/#named-key-attribute-values */\r\n  if (key === 'Enter' || key === ' ') {\r\n    return true;\r\n  }\r\n  return false;\r\n};\r\n\r\nexport function isKey(event: React.KeyboardEvent, key: string): boolean {\r\n  return event.key === key;\r\n}\r\n","import { defineMessages } from 'react-intl';\r\n\r\nexport default defineMessages({\r\n  'reportMetadata.grains.None': { id: 'reportMetadata.grains.None', defaultMessage: 'None' },\r\n  'reportMetadata.grains.Hour': { id: 'reportMetadata.grains.Hour', defaultMessage: 'Hourly' },\r\n  'reportMetadata.grains.Day': { id: 'reportMetadata.grains.Day', defaultMessage: 'Daily' },\r\n  'reportMetadata.grains.Week': { id: 'reportMetadata.grains.Week', defaultMessage: 'Weekly' },\r\n  'reportMetadata.grains.Month': { id: 'reportMetadata.grains.Month', defaultMessage: 'Monthly' },\r\n  'reportMetadata.grains.MonthAndYear': { id: 'reportMetadata.grains.MonthAndYear', defaultMessage: 'Monthly' },\r\n  'reportMetadataColumns.ImpressionsServed': { id: 'reportMetadataColumns.ImpressionsServed', defaultMessage: 'Filled impressions' },\r\n  'reportMetadataColumns.ImpressionsViewed': { id: 'reportMetadataColumns.ImpressionsViewed', defaultMessage: 'Viewable impressions' },\r\n  'reportMetadataColumns.Viewability': { id: 'reportMetadataColumns.Viewability', defaultMessage: 'Viewability rate' },\r\n  'reportMetadataColumns.Revenue': { id: 'reportMetadataColumns.Revenue', defaultMessage: 'Revenue' },\r\n  'reportMetadataColumns.FillRate': { id: 'reportMetadataColumns.FillRate', defaultMessage: 'Fill rate' },\r\n  'reportMetadataColumns.eCPM': { id: 'reportMetadataColumns.eCPM', defaultMessage: 'eCPM' },\r\n  'reportMetadataColumns.Clicks': { id: 'reportMetadataColumns.Clicks', defaultMessage: 'Clicks' },\r\n  'reportMetadataColumns.CTR': { id: 'reportMetadataColumns.CTR', defaultMessage: 'CTR' },\r\n  'reportMetadataColumns.DateTime': { id: 'reportMetadataColumns.DateTime', defaultMessage: 'Date' },\r\n  'reportMetadataColumns.AdUnitName': { id: 'reportMetadataColumns.AdUnitName', defaultMessage: 'Ad unit' },\r\n  'reportMetadataColumns.AdType': { id: 'reportMetadataColumns.AdType', defaultMessage: 'Ad type' },\r\n  'reportMetadataColumns.PropertyUrl': { id: 'reportMetadataColumns.PropertyUrl', defaultMessage: 'Site URL' },\r\n  'reportMetadataColumns.Country': { id: 'reportMetadataColumns.Country', defaultMessage: 'Country' },\r\n  'reportMetadataColumns.CurrencyCode': { id: 'reportMetadataColumns.CurrencyCode', defaultMessage: 'Currency' },\r\n  'reportMetadataColumns.Impressions': {\r\n    id: 'reportMetadataColumns.Impressions',\r\n    defaultMessage: 'Filled Impressions',\r\n  },\r\n  'reportMetadataColumns.AdClicks': { id: 'reportMetadataColumns.AdClicks', defaultMessage: 'Clicks' },\r\n  'reportMetadataColumns.AdCTR': { id: 'reportMetadataColumns.AdCTR', defaultMessage: 'CTR' },\r\n  'reportMetadataColumns.AdECPM': { id: 'reportMetadataColumns.AdECPM', defaultMessage: 'eCPM' },\r\n  'reportMetadataColumns.ViewableImpressions': {\r\n    id: 'reportMetadataColumns.ViewableImpressions',\r\n    defaultMessage: 'Viewable Impressions',\r\n  },\r\n  'reportMetadataColumns.MeasurableImpressions': {\r\n    id: 'reportMetadataColumns.MeasurableImpressions',\r\n    defaultMessage: 'Measurable Impressions',\r\n  },\r\n  'reportMetadataColumns.ImpressionsRate': {\r\n    id: 'reportMetadataColumns.ImpressionsRate',\r\n    defaultMessage: 'Impressions %',\r\n  },\r\n  'reportMetadataColumns.EligibleImpressions': {\r\n    id: 'reportMetadataColumns.EligibleImpressions',\r\n    defaultMessage: 'Eligible Impressions',\r\n  },\r\n  'reportMetadataColumns.MeasurableImpressionsRate': {\r\n    id: 'reportMetadataColumns.MeasurableImpressionsRate',\r\n    defaultMessage: 'Measurable Impressions %',\r\n  },\r\n  'reportMetadataColumns.ResponsesServed': {\r\n    id: 'reportMetadataColumns.ResponsesServed',\r\n    defaultMessage: 'Responses Served',\r\n  },\r\n  'reportMetadataColumns.Date': { id: 'reportMetadataColumns.Date', defaultMessage: 'Date' },\r\n  'reportMetadataColumns.AdUnitId': {\r\n    id: 'reportMetadataColumns.AdUnitId',\r\n    defaultMessage: 'AdUnitId',\r\n  },\r\n\r\n  'reportMetadataColumns.OperatingSystem': {\r\n    id: 'reportMetadataColumns.OperatingSystem',\r\n    defaultMessage: 'Operating System',\r\n  },\r\n  'reportMetadataColumns.SiteName': { id: 'reportMetadataColumns.SiteName', defaultMessage: 'Site' },\r\n});\r\n","import { FormattedMessage, MessageValue } from 'react-intl';\r\nimport ReportMetadataMessages from '../ReportMetadata.messages';\r\n\r\nexport type FormatMessageFuncType = (\r\n  messageDescriptor: FormattedMessage.MessageDescriptor,\r\n  values?:\r\n    | {\r\n        [key: string]: MessageValue;\r\n      }\r\n    | undefined\r\n) => string;\r\n\r\nexport function getReportMetadataGrainMessageId(key) {\r\n  return `reportMetadata.grains.${key}`;\r\n}\r\nexport function getReportMetadataColumnMessageId(key) {\r\n  return `reportMetadataColumns.${key}`;\r\n}\r\n\r\nexport function getReportColumnMetadataDisplayName(key: string, formatMessage: FormatMessageFuncType) {\r\n  if (!key) {\r\n    return '';\r\n  }\r\n  const messageId = getReportMetadataColumnMessageId(key);\r\n  return formatReportMetadataMessageById(formatMessage, messageId);\r\n}\r\nexport function getReportGrainsMetadataDisplayName(key: string, formatMessage: FormatMessageFuncType) {\r\n  const messageId = getReportMetadataGrainMessageId(key);\r\n  return formatReportMetadataMessageById(formatMessage, messageId);\r\n}\r\n\r\nfunction formatReportMetadataMessageById(formatMessage: FormatMessageFuncType, messageId: string) {\r\n  if (!ReportMetadataMessages[messageId]) {\r\n    return '';\r\n  }\r\n  return formatMessage(ReportMetadataMessages[messageId]);\r\n}\r\n","import { createStore } from 'satcheljs';\r\nimport { IWindowSize } from '../index.types';\r\n\r\nexport const getStore = createStore<IWindowSize>('WindowSize', {\r\n  width: window?.innerWidth,\r\n  height: window?.innerHeight,\r\n});\r\n","// The feature of Partner Codes is only enabled for the following publishers\r\nexport const partnerCodesEnabledPublishers =\r\n  process.env.REACT_APP_ENV === 'production' ?\r\n    [\r\n      '230887', // Live Search (Prod)\r\n      \r\n      '251148833', // Contoso Limited (test publisher on Prod)\r\n\r\n      // Add other Prod publishers here\r\n    ]:\r\n    [\r\n      '279554782', // SI Clone MSN Native (SI)\r\n\r\n      // Add other SI publishers here\r\n    ];\r\n\r\nexport const isPartnerCodeEnabled = (publisherId: string | undefined): boolean => {\r\n  if (partnerCodesEnabledPublishers.includes(publisherId ?? '0')) {\r\n    return true;\r\n  }\r\n\r\n  return false;\r\n};","import { getAppStore, handleError, onAuthLogout } from '..';\r\nimport { Log } from '../../../logging/src';\r\nimport { aadConfig } from '../../config/pubCenterAAD.config';\r\nimport { fetchPubCenterAADAccessTokenAsync } from '../services/PubCenterAADAuthService';\r\nimport { UserContext } from '../store/schema';\r\nimport { TokenType } from '../store/schema/enums/TokenType';\r\n\r\nconst tokenHeaderMap = {\r\n  [TokenType.SessionGuid]: 'CommonSessionId',\r\n  [TokenType.PubCenterAADToken]: 'PubCenterAuthenticationToken',\r\n};\r\n\r\nexport async function buildRequestHeadersWithAuthToken(\r\n  url: string,\r\n  userContext?: UserContext,\r\n  includeDefaultHeaders = true\r\n): Promise<Headers> {\r\n  if (!userContext) {\r\n    userContext = getAppStore().userContext;\r\n  }\r\n\r\n  const defaultHeaders = [['content-type', 'application/json']];\r\n  const tokenHeader = tokenHeaderMap[TokenType.PubCenterAADToken];\r\n  const token = await fetchPubCenterAADAccessTokenAsync();\r\n\r\n  if (userContext && token) {\r\n    const headers = new Headers([[tokenHeader, token]]);\r\n\r\n    // include default headers\r\n    if (includeDefaultHeaders) {\r\n      defaultHeaders.forEach((header) => headers.append(header[0], header[1]));\r\n    }\r\n\r\n    // Add custom headers for all mediation requests\r\n    if (url.includes('preauth')) {\r\n      headers.append('PublisherIds', getAppStore().publisher!.id.toString());\r\n      headers.append('AccountIds', getAppStore().account!.id.toString());\r\n    }\r\n\r\n    headers.append('DevToken', aadConfig.auth.devToken.toString());\r\n\r\n    return headers;\r\n  } else {\r\n    Log.error('User not logged in or authentication failed');\r\n    onAuthLogout();\r\n\r\n    return handleError(new Error('Invalid login, please login'), url);\r\n  }\r\n}\r\n","import { createStore } from 'satcheljs';\r\nimport { IUserViewState } from './schema/IUserViewState';\r\n\r\nexport const getStore = createStore<IUserViewState>('UserState', {\r\n  active: {},\r\n  errors: {},\r\n  userInvitations: []\r\n});\r\n","import { mutatorAction } from 'satcheljs';\r\nimport { ClarityStatus, Property } from '../../../../../../@data';\r\nimport { PropertyServingConfigs } from '../../../../../../@data/store/schema/models/ServingConfigs';\r\nimport { getGridPropertyStore } from '../store/store';\r\n\r\nexport const setPropertyData = mutatorAction('setSitesData', (data?: Property[]) => {\r\n  getGridPropertyStore().data = data;\r\n});\r\n\r\nexport const setLoading = mutatorAction('setLoading', (loading: boolean) => {\r\n  getGridPropertyStore().isLoading = loading;\r\n});\r\n\r\nexport const setFetchingData = mutatorAction('setFetchingData', (isFetching: boolean) => {\r\n  getGridPropertyStore().isFetchingData = isFetching;\r\n});\r\n\r\nexport const setPropertiesServingConfigs = mutatorAction('setPropertiesServingConfigs', (configs: PropertyServingConfigs[]) => {\r\n  getGridPropertyStore().servingConfigs = configs;\r\n});\r\n\r\nexport const setPropertiesFetching = mutatorAction('setPropertiesFetching', (isFetching: boolean) => {\r\n  getGridPropertyStore().isFetchingPropertyStatus = isFetching;\r\n});\r\n\r\nexport const setClarityPanelVisibility = mutatorAction('setClarityPanelVisibility', (isOpen: boolean) => {\r\n  getGridPropertyStore().isPanelOpen = isOpen;\r\n});\r\n\r\nexport const setCodePanelVisibility = mutatorAction(\r\n  'setCodePanelVisibility',\r\n  (isOpen: boolean, property?: string, clarityStatus?: ClarityStatus) => {\r\n    getGridPropertyStore().isCodePanelOpen = isOpen;\r\n    getGridPropertyStore().selectedPropertyId = property;\r\n    if (!isOpen) {\r\n      getGridPropertyStore().clarityPanel = undefined;\r\n    } else {\r\n      getGridPropertyStore().clarityPanel = {\r\n        clarityStatus: clarityStatus,\r\n      };\r\n    }\r\n  }\r\n);\r\n\r\nexport const setSelectedPropertyId = mutatorAction('setSelectedPropertyId', (id: string) => {\r\n  getGridPropertyStore().selectedPropertyId = id;\r\n});\r\n","import { defineMessages } from 'react-intl';\r\n\r\nexport default defineMessages({\r\n  title: {\r\n    id: 'userManagement.title',\r\n    defaultMessage: 'User management',\r\n  },\r\n  usersTab: {\r\n    id: 'userManagement.usersTab',\r\n    defaultMessage: 'Team users',\r\n  },\r\n  userInvitationsTab: {\r\n    id: 'userManagement.userInvitationsTab',\r\n    defaultMessage: 'User invitations',\r\n  },\r\n  email: {\r\n    id: 'userManagement.email',\r\n    defaultMessage: 'Email',\r\n  },\r\n  actions: {\r\n    id: 'userManagement.actions',\r\n    defaultMessage: 'Actions',\r\n  },\r\n  role: {\r\n    id: 'userManagement.role',\r\n    defaultMessage: 'Role',\r\n  },\r\n  noEntityFound: {\r\n    id: 'userManagement.noEntityFound',\r\n    defaultMessage: 'No users found for this publisher, invite an user',\r\n  },\r\n  gridNotReadyLabel: {\r\n    id: 'userManagement.gridNotReadyLabel',\r\n    defaultMessage: 'Publisher context is not set in this session. Try logging out and login again.',\r\n  },\r\n  superAdminDesc: {\r\n    id: 'userManagement.superAdminDesc',\r\n    defaultMessage: `Can access and control the publisher's account.`,\r\n  },\r\n  accountManagerDesc: {\r\n    id: 'userManagement.accountManagerDesc',\r\n    defaultMessage: `Can partially manage the publisher's account.`,\r\n  },\r\n  reportUserDesc: {\r\n    id: 'userManagement.reportUserDesc',\r\n    defaultMessage: 'Can view account information and reporting.',\r\n  },\r\n  superAdmin: {\r\n    id: 'userManagement.userpage.superAdmin',\r\n    defaultMessage: 'Super admin',\r\n  },\r\n  accountManager: {\r\n    id: 'userManagement.accountManager',\r\n    defaultMessage: 'Account manager',\r\n  },\r\n  reportUser: {\r\n    id: 'userManagement.reportUser',\r\n    defaultMessage: 'Reporting user',\r\n  },\r\n  changeUserRole: {\r\n    id: 'userManagement.changeUserRole',\r\n    defaultMessage: 'Change user role',\r\n  },\r\n  roleChangePanelDesc: {\r\n    id: 'userManagement.roleChangePanelDesc',\r\n    defaultMessage: `Please select a new user role.`,\r\n  },\r\n  deleteConfirmationDialogTitle: {\r\n    id: 'publisherShellTab.deleteConfirmationDialogTitle',\r\n    defaultMessage: 'Are you sure that you want to delete this user?',\r\n  },\r\n  deleteConfirmationDialogDesc: {\r\n    id: 'publisherShellTab.deleteConfirmationDialogDesc',\r\n    defaultMessage: `This action will permanently delete the selected user and all data.`,\r\n  },\r\n  confirmActionMessage: {\r\n    id: 'publisherShellTab.confirmActionMessage',\r\n    defaultMessage: `Enter \"yes\" to confirm that you want to permanently delete this user.`,\r\n  },\r\n  deleteButtonText: {\r\n    id: 'publisherShellTab.deleteButtonText',\r\n    defaultMessage: `Delete user`,\r\n  },\r\n  searchByNamePlaceholder: {\r\n    id: 'app.searchByNamePlaceholder',\r\n    defaultMessage: 'Search by Name',\r\n  },\r\n  loadUserDetailsFailed: {\r\n    id: 'loadUserDetails.failed',\r\n    defaultMessage: 'We’re unable to load your user details at this time. Please try again later.',\r\n  },\r\n  userRoleChangeFailed: {\r\n    id: 'userRoleChange.failed',\r\n    defaultMessage: 'Something went wrong while submitting the user role change. Please try again later.',\r\n  },\r\n  userManagementInvalidState: {\r\n    id: 'userManagement.invalidState',\r\n    defaultMessage: 'You have arrived in an invalid state, please re-login or report if issue persists.',\r\n  },\r\n  userManagementFailedToDeleteItem: {\r\n    id: 'userManagement.failedToDeleteItem',\r\n    defaultMessage: 'Failed to delete item',\r\n  },\r\n  editedUserRoleSuccessfully: {\r\n    id: 'userManagement.editedUserRoleSuccessfully',\r\n    defaultMessage: 'Edited user role for user {username} successfully',\r\n  },\r\n});\r\n","import { createStore } from 'satcheljs';\r\nimport '../orchestrators';\r\nimport { IAdManagementViewState } from './schema/IAdManagementViewState';\r\n\r\nexport enum RouteName {\r\n  default = 'default',\r\n  adunit = 'adunit',\r\n  channel = 'channel',\r\n  adfilter = 'adfilter',\r\n  property = 'property',\r\n  adquality = 'adquality',\r\n  home = 'home',\r\n  inventory = 'inventory',\r\n  ads = 'ads',\r\n  dashboard = 'dashboard',\r\n  adblock = 'adblock',\r\n  publisherProfile = 'publisherProfile' /* Tython account/profile management tab */,\r\n  userSettings = 'userSettings',\r\n  reportDetails = 'report-details',\r\n  support = 'support',\r\n  auditHistory = 'auditHistory',\r\n}\r\n\r\nexport const PUBLISHER_BASED_ROUTES = [\r\n  RouteName.property,\r\n  RouteName.adquality,\r\n  RouteName.home,\r\n  RouteName.adblock,\r\n  RouteName.dashboard,\r\n  RouteName.publisherProfile,\r\n];\r\n\r\nexport const defaultRoute = RouteName.adunit;\r\n\r\nexport const getAdManagementStore = createStore<IAdManagementViewState>('AdManagementViewState', {\r\n  panelIsOpen: false,\r\n  doNotRenderDefaultPage: false,\r\n});\r\n","import { ApiErrorCodes, TokenType, getAppStore, handleDomainRedirection, onAuthLogout } from '..';\r\nimport { Log } from '../../../logging/src';\r\nimport { PUBCENTER_TYTHON_DOMAIN_MAPPING, USER_SIGNUP_KEY } from '../../constants';\r\nimport { isLocationPubCenter } from '../../utils';\r\nimport { showTokenExpirationNotification } from '../actions/onTokenExpirationActions';\r\nimport { ApiError } from '../services/ApiService';\r\nimport { loginUserWithAdditionalClaims } from '../services/PubCenterAADAuthService';\r\nimport { IResponse } from '../store/schema';\r\n\r\nexport async function handleApiErrors<T>(response: Response, url: string, errorLogMessage?: string): Promise<T> {\r\n  let errorObj: Error;\r\n  const responseJson: IResponse<T> = await response.json();\r\n  const { userContext } = getAppStore();\r\n\r\n  switch (response.status) {\r\n    case 302: // Redirect\r\n      if (responseJson.data) {\r\n        if (isLocationPubCenter()) {\r\n          Log.write('HandleApiError - Tython user, redirecting to new domain');\r\n          handleDomainRedirection(userContext?.userName ?? userContext?.email);\r\n        }\r\n        return Promise.resolve({} as T);\r\n      }\r\n      errorObj = new ApiError(302, JSON.stringify(responseJson)); // placeholder, will not be used\r\n      break;\r\n    case 401:\r\n      // Promt the user to re-login in case additional claim challenge is presented by the API\r\n      if (userContext?.tokenType === TokenType.PubCenterAADToken && response.headers.has('WWW-Authenticate')) {\r\n        loginUserWithAdditionalClaims(response.headers.get('WWW-Authenticate'));\r\n        errorObj = new ApiError(401, JSON.stringify(responseJson));\r\n        break;\r\n      }\r\n\r\n      const errorCode = responseJson.errors?.[0]?.code;\r\n\r\n      if (errorCode === ApiErrorCodes.UserDoesNotExist) {\r\n        if (localStorage.getItem(USER_SIGNUP_KEY) === 'true') {\r\n          const origin = isLocationPubCenter() ? PUBCENTER_TYTHON_DOMAIN_MAPPING[window.location.host] : window.location.origin;\r\n          const signupPageRoute = encodeURI(origin + '/signup');\r\n          Log.write(`User does not exist, redirecting to new domain signup page: ${signupPageRoute}`);\r\n\r\n          window.location.replace(signupPageRoute);\r\n        } else {\r\n          const UserDoesNotExistPageRoute = encodeURI(window.location.origin + '/user-does-not-exist');\r\n          Log.error(`Redirecting to ${UserDoesNotExistPageRoute} error page`);\r\n\r\n          window.location.replace(UserDoesNotExistPageRoute);\r\n        }\r\n      } else if (\r\n        errorCode &&\r\n        [\r\n          ApiErrorCodes.InvalidOAuthToken,\r\n          ApiErrorCodes.InvalidCCAuthToken,\r\n          ApiErrorCodes.InvalidUserCredentials,\r\n          ApiErrorCodes.UserAlreadyMigrated,\r\n          ApiErrorCodes.UserIdNotFound,\r\n        ].includes(errorCode as ApiErrorCodes)\r\n      ) {\r\n        Log.error(`User scope call failed, logging out the user with error code: ${errorCode}`);\r\n        showTokenExpirationNotification();\r\n        onAuthLogout({ isTokenExpired: true });\r\n      }\r\n      errorObj = new ApiError(\r\n        401,\r\n        responseJson.errors ? JSON.stringify(responseJson) : 'The user does not have the necessary role permissions for this operation'\r\n      );\r\n      break;\r\n    case 403:\r\n      errorObj = new ApiError(403, responseJson.errors ? JSON.stringify(responseJson.errors) : 'Forbidden');\r\n      break;\r\n    case 404:\r\n      errorObj = new ApiError(404, responseJson.errors ? JSON.stringify(responseJson.errors) : 'Not Found');\r\n      break;\r\n    case 400:\r\n      errorObj = new ApiError(400, responseJson.errors ? JSON.stringify(responseJson.errors) : 'Bad Request');\r\n      break;\r\n    case 500:\r\n      errorObj = new ApiError(500, responseJson.errors ? JSON.stringify(responseJson.errors) : 'Internal server error');\r\n      break;\r\n    default:\r\n      errorObj = new Error(responseJson.errors ? JSON.stringify(responseJson) : 'Invalid response');\r\n      break;\r\n  }\r\n  return handleError(errorObj, url, errorLogMessage);\r\n}\r\n\r\nexport function handleError<T>(error: Error, url: string, errorMessage?: string): Promise<T> {\r\n  Log.error(errorMessage ?? `Error: ${error.message} occurred for the API URL: ${url}`);\r\n  return Promise.reject(error);\r\n}\r\n","import { AriaLoggerManager } from \"./AriaLoggerManager\";\r\nimport { ConsoleLoggerManager } from \"./ConsoleLoggerManager\";\r\nimport { DefaultLogUserContext } from \"./DefaultLogUserContext\";\r\nimport { Environment } from \"./Environment\";\r\nimport { ILogManager } from \"./ILogManager\";\r\nimport { ILogUserContext } from \"./ILogUserContext\";\r\nimport { LoggingUtils } from \"./LoggingUtils\";\r\nimport { LogType } from \"./LogType\";\r\n\r\n/**\r\n * This class uses the singleton design pattern\r\n * 1. Ensures that ONLY 1 instance of class exists, all through the session\r\n * 2. Provides global access to that single instance\r\n *\r\n * This is facilitated through (a) private constructor and (b) providing a static\r\n * method that returns a reference to the instance\r\n * Ref: https://en.wikipedia.org/wiki/Singleton_pattern\r\n */\r\n\r\nexport class Log {\r\n  get DefaultLogUserContext(): ILogUserContext {\r\n    return Log.logUserContext;\r\n  }\r\n  set DefaultLogUserContext(context: ILogUserContext) {\r\n    Log.logUserContext = context;\r\n  }\r\n\r\n  public static Instance: Log;\r\n  private static logParams={};\r\n  private static logManagers: ILogManager[] = [];\r\n  private static logUserContext: ILogUserContext;\r\n\r\n  public static getInstance(logParams={}): Log {\r\n    if (Log.Instance === undefined ) {\r\n      Log.Instance = new Log();\r\n    }\r\n    Log.logParams = logParams;\r\n    return Log.Instance;\r\n  }\r\n\r\n  public static write(logMessage: string | number | object, logtype=LogType.INFO): void {\r\n    for (const logManager of Log.logManagers) {\r\n      logManager.log(logtype, logMessage, new DefaultLogUserContext());\r\n    }\r\n  }\r\n\r\n  public static info(logMessage: string | number | object): void {\r\n    this.write(logMessage, LogType.INFO)\r\n  }\r\n\r\n  public static debug(logMessage: string | number | object): void {\r\n    this.write(logMessage, LogType.DEBUG)\r\n  }\r\n\r\n  public static warn(logMessage: string | number | object): void {\r\n    this.write(logMessage, LogType.WARN)\r\n  }\r\n\r\n  public static error(logMessage: string | number | object): void {\r\n    this.write(logMessage, LogType.ERROR)\r\n  }\r\n\r\n  private constructor() {\r\n    const environment = LoggingUtils.getEnvironment();\r\n    Log.logManagers = new Array<ILogManager>();\r\n\r\n    // If the app is running on local host, just write to console\r\n    // For all other envs(based on trace level), write to both ARIA and console\r\n    if (environment !== Environment.TEST) {\r\n      Log.logManagers.push(new AriaLoggerManager(Log.logParams));\r\n    }\r\n    Log.logManagers.push(new ConsoleLoggerManager());\r\n  }\r\n}\r\n","import atlas, { AuthenticationType, ControlPosition, Popup, control } from 'azure-maps-control';\r\nimport React, { useEffect, useState } from 'react';\r\nimport { useI18n } from '../../../i18n/useI18n';\r\nimport { getAppStore } from '../../@data/store/store';\r\nimport { getStore } from '../../pages/ad-management/Account/Settings/@data/store/store';\r\nimport { IGeoJSONFeature } from './GeoJson.types';\r\nimport './styles.css';\r\n\r\ninterface IBubbleLayerProps {\r\n  data: IGeoJSONFeature[];\r\n}\r\n\r\nconst option: atlas.Options = {\r\n  center: [-100, 40],\r\n  zoom: 1,\r\n  style: 'grayscale_light',\r\n  authOptions: {\r\n    authType: AuthenticationType.subscriptionKey,\r\n    subscriptionKey: process.env.REACT_APP_AZURE_MAPS_SUB,\r\n  },\r\n};\r\n\r\nconst BubbleLayer: React.FC<IBubbleLayerProps> = ({ data }) => {\r\n  const [popup] = useState<Popup>(new Popup({ closeButton: false }));\r\n  const { publisher, userContext } = getAppStore();\r\n  const { systemPreferences } = getStore().active;\r\n  const { locale } = useI18n({ systemPreferences, publisher, userContext });\r\n  option.language = locale;\r\n\r\n  // Calculate min and max values from the data\r\n  const values = data.map((feature) => feature.properties.value);\r\n  const minValue = Math.min(...values);\r\n  const maxValue = Math.max(...values);\r\n\r\n  useEffect(() => {\r\n    try {\r\n      // Add CSS link\r\n      const link = document.createElement('link');\r\n      link.href = 'https://atlas.microsoft.com/sdk/javascript/mapcontrol/3/atlas.min.css';\r\n      link.rel = 'stylesheet';\r\n      document.head.appendChild(link);\r\n\r\n      // Add JS script\r\n      const script = document.createElement('script');\r\n      script.src = 'https://atlas.microsoft.com/sdk/javascript/mapcontrol/3/atlas.min.js';\r\n      script.async = false;\r\n      document.body.appendChild(script);\r\n\r\n      // Cleanup function to remove the script and link tags when the component unmounts\r\n      return () => {\r\n        document.head.removeChild(link);\r\n        document.body.removeChild(script);\r\n      };\r\n    } catch (error) {\r\n      console.error('Error loading Azure Maps SDK:', error);\r\n    }\r\n  }, []);\r\n\r\n  useEffect(() => {\r\n    try {\r\n      const mapInstance = new atlas.Map('myMap', option);\r\n      console.log('Map instance created successfully.');\r\n\r\n      mapInstance.events.add('ready', () => {\r\n        mapInstance.controls.add(new control.ZoomControl(), {\r\n          position: ControlPosition.TopRight,\r\n        });\r\n\r\n        const datasource = new atlas.source.DataSource();\r\n        mapInstance.sources.add(datasource);\r\n        datasource.add(data);\r\n\r\n        const bubbleLayer = new atlas.layer.BubbleLayer(datasource, undefined, {\r\n          radius: [\r\n            'interpolate',\r\n            ['linear'],\r\n            ['ln', ['get', 'value']],\r\n            Math.log(minValue),\r\n            25, // Minimum value -> Radius 25\r\n            Math.log(maxValue),\r\n            60, // Maximum value -> Radius 60\r\n          ],\r\n          color: '#B7CAEC', // Fixed color for all bubbles\r\n          strokeWidth: 0,\r\n          filter: ['has', 'value'], // Only render data points which have a value property\r\n        });\r\n        mapInstance.layers.add(bubbleLayer);\r\n\r\n        const symbolLayer = new atlas.layer.SymbolLayer(datasource, undefined, {\r\n          iconOptions: {\r\n            image: 'none', // Hide the icon image.\r\n          },\r\n          textOptions: {\r\n            textField: ['get', 'value'],\r\n            offset: [0, 0.4],\r\n          },\r\n        });\r\n        mapInstance.layers.add(symbolLayer);\r\n\r\n        mapInstance.events.add('mouseover', bubbleLayer, (e: atlas.MapMouseEvent) => {\r\n          if (e.shapes && e.shapes.length > 0) {\r\n            const shape = e.shapes[0] as atlas.Shape;\r\n            const properties = shape.getProperties();\r\n            const coordinates = shape.getCoordinates() as atlas.data.Position;\r\n            const popupContent = `<div class=\"tooltip\">\r\n  <div class=\"tooltip-header\">\r\n    <span class=\"tooltip-dot\"></span>\r\n    <span class=\"tooltip-title\">${properties.name}</span>\r\n  </div>\r\n  <div class=\"tooltip-content\">\r\n    ${properties.dimension}: ${properties.formattedValue}\r\n  </div>\r\n</div>\r\n`;\r\n            popup.setOptions({\r\n              position: coordinates,\r\n              content: popupContent,\r\n              pixelOffset: [0, 0],\r\n            });\r\n            popup.open(mapInstance);\r\n          }\r\n        });\r\n\r\n        mapInstance.events.add('mouseout', bubbleLayer, () => {\r\n          popup.close();\r\n        });\r\n      });\r\n\r\n      return () => {\r\n        if (mapInstance) {\r\n          mapInstance.dispose();\r\n        }\r\n      };\r\n    } catch (error) {\r\n      console.error('Error initializing map:', error);\r\n    }\r\n  }, [data, maxValue, minValue, popup]);\r\n\r\n  return <div id=\"myMap\" style={{ height: '300px' }} />;\r\n};\r\n\r\nexport default BubbleLayer;\r\n","import * as HighCharts from 'highcharts';\r\nimport HighChartsWrapper from 'highcharts-react-official';\r\nimport * as HighChartsMap from 'highcharts/highmaps';\r\nimport highchartsAccessibility from 'highcharts/modules/accessibility';\r\nhighchartsAccessibility(HighCharts);\r\nhighchartsAccessibility(HighChartsMap);\r\nexport { HighCharts, HighChartsMap, HighChartsWrapper };\r\n","import React from 'react';\r\nimport { IDataMetric } from '../../../types';\r\nimport { HighCharts, HighChartsMap, HighChartsWrapper } from '../HighChartsLibrary';\r\n\r\nexport interface IHighChartProps extends IDataMetric {\r\n  options?: HighCharts.Options;\r\n  chartComponentRef: React.RefObject<HighChartsWrapper.RefObject>;\r\n}\r\nexport const CustomChart = ({ options, dataMetric, chartComponentRef }: IHighChartProps) => {\r\n  const finalOptions: HighCharts.Options = {\r\n    credits: {\r\n      enabled: false,\r\n    },\r\n    chart: {\r\n      scrollablePlotArea: {\r\n        minWidth: 700,\r\n      },\r\n      reflow: true,\r\n      events: {\r\n        render: function () {\r\n          this.reflow();\r\n        },\r\n      },\r\n    },\r\n    title: {\r\n      text: '',\r\n    },\r\n    xAxis: {\r\n      type: 'datetime',\r\n    },\r\n    tooltip: {\r\n      shared: true,\r\n    },\r\n    ...options,\r\n  };\r\n  return <HighChartsWrapper ref={chartComponentRef} highcharts={HighCharts} options={finalOptions} constructorType={'chart'} />;\r\n};\r\nexport const CustomMapChart = ({ options, dataMetric, chartComponentRef }: IHighChartProps) => {\r\n  const finalOptions: HighCharts.Options = {\r\n    credits: {\r\n      enabled: false,\r\n    },\r\n    chart: {\r\n      scrollablePlotArea: {\r\n        minWidth: 700,\r\n      },\r\n      reflow: true,\r\n      events: {\r\n        render: function () {\r\n          this.reflow();\r\n        },\r\n      },\r\n    },\r\n    title: {\r\n      text: '',\r\n    },\r\n    xAxis: {\r\n      type: 'datetime',\r\n    },\r\n    tooltip: {\r\n      shared: true,\r\n    },\r\n    ...options,\r\n  };\r\n  return <HighChartsWrapper ref={chartComponentRef} highcharts={HighChartsMap} options={finalOptions} constructorType={'mapChart'} />;\r\n};\r\n","/* Helper class for authentication. Mostly used today for MSA authentication.\r\n   Can also be extended for AAD authentication if not using adal.js.\r\n */\r\nexport class AuthenticationUtils {\r\n  public static createNewGuid(): string {\r\n    const guidHolder: string = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx';\r\n    const hex: string = '0123456789abcdef';\r\n    let r: number = 0;\r\n    let guidResponse: string = '';\r\n    for (let i: number = 0; i < 36; i++) {\r\n      if (guidHolder[i] !== '-' && guidHolder[i] !== '4') {\r\n        // each x and y needs to be random\r\n        // tslint:disable-next-line: no-bitwise\r\n        r = (Math.random() * 16) | 0;\r\n      }\r\n      if (guidHolder[i] === 'x') {\r\n        guidResponse += hex[r];\r\n      } else if (guidHolder[i] === 'y') {\r\n        // clock-seq-and-reserved first hex is filtered and remaining hex values are random\r\n        // tslint:disable-next-line: no-bitwise\r\n        r &= 0x3; // bit and with 0011 to set pos 2 to zero ?0??\r\n        // tslint:disable-next-line: no-bitwise\r\n        r |= 0x8; // set pos 3 to 1 as 1???\r\n        guidResponse += hex[r];\r\n      } else {\r\n        guidResponse += guidHolder[i];\r\n      }\r\n    }\r\n    return guidResponse;\r\n  }\r\n}\r\n","import { IStyle, classNamesFunction } from '@fluentui/react';\r\nimport React from 'react';\r\nexport interface IZeroTotalChartStyles {\r\n  root: IStyle;\r\n}\r\nexport const getStyles = (): IZeroTotalChartStyles => {\r\n  return {\r\n    root: {\r\n      display: 'flex',\r\n      justifyContent: 'center',\r\n      fontSize: '50px',\r\n      minHeight: '200px',\r\n      alignItems: 'center',\r\n      userSelect: 'none',\r\n    },\r\n  };\r\n};\r\nconst getClassNames = classNamesFunction<{}, IZeroTotalChartStyles>();\r\nconst classNames = getClassNames(getStyles);\r\n\r\nexport const ZeroTotalChart = () => {\r\n  return <div className={classNames.root}>0</div>;\r\n};\r\n","import { DataVizPalette, getColorFromToken } from '@fluentui/react-charting';\r\nimport { TythonColumnsEnum } from '../@data/store/schema/ColumnsEnum';\r\n\r\nexport const CHART_COLOR_TOKENS = [\r\n  DataVizPalette.color1,\r\n  DataVizPalette.color2,\r\n  DataVizPalette.color3,\r\n  DataVizPalette.color4,\r\n  DataVizPalette.color5,\r\n  DataVizPalette.color6,\r\n  DataVizPalette.color7,\r\n  DataVizPalette.color8,\r\n  DataVizPalette.color9,\r\n  DataVizPalette.color10,\r\n  DataVizPalette.color11,\r\n];\r\nexport const CHART_COLOR_TOKENS_GRADIENTS = CHART_COLOR_TOKENS.map((token) => getColorFromToken(token));\r\n\r\nexport const METRICS_COLORS = {\r\n  [TythonColumnsEnum.Revenue]: {\r\n    main: CHART_COLOR_TOKENS_GRADIENTS[0],\r\n    gradients: CHART_COLOR_TOKENS_GRADIENTS,\r\n  },\r\n  [TythonColumnsEnum.ImpressionsServed]: {\r\n    main: CHART_COLOR_TOKENS_GRADIENTS[1],\r\n    gradients: CHART_COLOR_TOKENS_GRADIENTS,\r\n  },\r\n  [TythonColumnsEnum.Impressions]: {\r\n    main: CHART_COLOR_TOKENS_GRADIENTS[1],\r\n    gradients: CHART_COLOR_TOKENS_GRADIENTS,\r\n  },\r\n  [TythonColumnsEnum.ImpressionsViewed]: {\r\n    main: CHART_COLOR_TOKENS_GRADIENTS[2],\r\n    gradients: CHART_COLOR_TOKENS_GRADIENTS,\r\n  },\r\n  [TythonColumnsEnum.ViewableImpressions]: {\r\n    main: CHART_COLOR_TOKENS_GRADIENTS[2],\r\n    gradients: CHART_COLOR_TOKENS_GRADIENTS,\r\n  },\r\n  [TythonColumnsEnum.eCPM]: {\r\n    main: CHART_COLOR_TOKENS_GRADIENTS[3],\r\n    gradients: CHART_COLOR_TOKENS_GRADIENTS,\r\n  },\r\n  [TythonColumnsEnum.AdECPM]: {\r\n    main: CHART_COLOR_TOKENS_GRADIENTS[3],\r\n    gradients: CHART_COLOR_TOKENS_GRADIENTS,\r\n  },\r\n  [TythonColumnsEnum.Clicks]: {\r\n    main: CHART_COLOR_TOKENS_GRADIENTS[4],\r\n    gradients: CHART_COLOR_TOKENS_GRADIENTS,\r\n  },\r\n  [TythonColumnsEnum.AdClicks]: {\r\n    main: CHART_COLOR_TOKENS_GRADIENTS[4],\r\n    gradients: CHART_COLOR_TOKENS_GRADIENTS,\r\n  },\r\n  [TythonColumnsEnum.Viewability]: {\r\n    main: CHART_COLOR_TOKENS_GRADIENTS[5],\r\n    gradients: CHART_COLOR_TOKENS_GRADIENTS,\r\n  },\r\n  [TythonColumnsEnum.ImpressionsRate]: {\r\n    main: CHART_COLOR_TOKENS_GRADIENTS[5],\r\n    gradients: CHART_COLOR_TOKENS_GRADIENTS,\r\n  },\r\n  [TythonColumnsEnum.CTR]: {\r\n    main: CHART_COLOR_TOKENS_GRADIENTS[6],\r\n    gradients: CHART_COLOR_TOKENS_GRADIENTS,\r\n  },\r\n  [TythonColumnsEnum.AdCTR]: {\r\n    main: CHART_COLOR_TOKENS_GRADIENTS[6],\r\n    gradients: CHART_COLOR_TOKENS_GRADIENTS,\r\n  },\r\n\r\n  [TythonColumnsEnum.FillRate]: {\r\n    main: CHART_COLOR_TOKENS_GRADIENTS[7],\r\n    gradients: CHART_COLOR_TOKENS_GRADIENTS,\r\n  },\r\n  [TythonColumnsEnum.MeasurableImpressionsRate]: {\r\n    main: CHART_COLOR_TOKENS_GRADIENTS[7],\r\n    gradients: CHART_COLOR_TOKENS_GRADIENTS,\r\n  },\r\n  [TythonColumnsEnum.MeasurableImpressions]: {\r\n    main: CHART_COLOR_TOKENS_GRADIENTS[8],\r\n    gradients: CHART_COLOR_TOKENS_GRADIENTS,\r\n  },\r\n  [TythonColumnsEnum.EligibleImpressions]: {\r\n    main: CHART_COLOR_TOKENS_GRADIENTS[9],\r\n    gradients: CHART_COLOR_TOKENS_GRADIENTS,\r\n  },\r\n  [TythonColumnsEnum.ResponsesServed]: {\r\n    main: CHART_COLOR_TOKENS_GRADIENTS[10],\r\n    gradients: CHART_COLOR_TOKENS_GRADIENTS,\r\n  },\r\n};\r\n","import { IColumn, IDropdownOption, SelectionMode, ShimmeredDetailsList, ShimmerElementsGroup, ShimmerElementType } from '@fluentui/react';\r\nimport { DonutChart, HorizontalBarChart, IChartDataPoint, IChartProps } from '@fluentui/react-charting';\r\nimport { YAxisOptions } from 'highcharts';\r\nimport React from 'react';\r\nimport { Log } from '../../../../../logging/src';\r\nimport { MediationReportingDataRequestBody } from '../../../../@data/store/schema/models/MediationReportingDataRequestBody';\r\nimport BubbleMap from '../../../../components/AzureMaps/BubbleMap';\r\nimport countryCoordinatesData from '../../../../components/AzureMaps/CountryCodeToCoordinates.json';\r\nimport { IGeoJSONFeature } from '../../../../components/AzureMaps/GeoJson.types';\r\nimport { EmptyChart } from '../../../../components/EmptyChart/EmptyChart';\r\nimport { CustomChart } from '../../../../components/HighCharts/CustomChart/CustomChart';\r\nimport { HighCharts } from '../../../../components/HighCharts/HighChartsLibrary';\r\nimport { IGridV2Column } from '../../../../layout/GridPageV2';\r\nimport { AuthenticationUtils } from '../../../../utils/AuthenticationUtils';\r\nimport { endOfDay, startOfDay } from '../../../../utils/DateUtils';\r\nimport { TythonColumnsEnum } from '../../@data/store/schema/ColumnsEnum';\r\nimport { ReportsQueryStoreKeys } from '../../@data/store/schema/ReportsQueryStoreKeys';\r\nimport { getDataFromURL } from '../../@data/store/UrlQueryStore';\r\nimport { ZeroTotalChart } from '../../components/common/ZeroTotalChart/ZeroTotalChart';\r\nimport { ICustomCalenderDateRange } from '../../components/CustomCalender/CustomCalender.types';\r\nimport { METRICS_COLORS } from '../../constants/metricsColors';\r\nimport { ratioMetrics } from '../../constants/ratioMetrics';\r\nimport ReportMessages from '../../Report.messages';\r\nimport { exportToCsv } from '../../utils/exportHelper';\r\nimport { FormatMessageFuncType, getReportColumnMetadataDisplayName } from '../../utils/intlHelper';\r\nimport { formatMetric, roundMetric } from '../../utils/metricsFormatter';\r\nimport { IMetadataElement, ReportingDataRow, TythonReportingDataRow } from '../@data/store/schema';\r\nimport { getReportPageStore } from '../@data/store/store';\r\nimport { IActiveFilter } from '../ReportDetailsPage/ActionBar/ActionBar';\r\nimport { ActiveMetrics, ChartGrain, ChartTypes, IChartsOptions } from './ReportCard.types';\r\n\r\nconst MAX_TOP_ROWS = 5;\r\nconst OTHERS_NAME = 'Others';\r\n// const theme = getTheme();\r\n// const palette = theme.palette as IPubcenterPalette;\r\n\r\nexport const getDonutChartShimmerCustomElements = () => {\r\n  return (\r\n    <div>\r\n      <ShimmerElementsGroup\r\n        shimmerElements={[\r\n          { type: ShimmerElementType.line, height: 20, width: '30%' },\r\n          { type: ShimmerElementType.gap, height: 20, width: '70%' },\r\n        ]}\r\n      />\r\n      <ShimmerElementsGroup shimmerElements={[{ type: ShimmerElementType.gap, height: 20, width: '100%' }]} />\r\n      <ShimmerElementsGroup\r\n        shimmerElements={[\r\n          { type: ShimmerElementType.gap, width: 'calc(100% - 75px)', height: 150 },\r\n          { type: ShimmerElementType.circle, height: 150 },\r\n          { type: ShimmerElementType.gap, width: 'calc(100% - 75px)', height: 150 },\r\n        ]}\r\n      />\r\n      <ShimmerElementsGroup shimmerElements={[{ type: ShimmerElementType.gap, width: '100%', height: 10 }]} />\r\n      <ShimmerElementsGroup\r\n        shimmerElements={[\r\n          { type: ShimmerElementType.gap, width: 'calc(100% - 30px)', height: 10 },\r\n          { type: ShimmerElementType.line, height: 20, width: '10%' },\r\n          { type: ShimmerElementType.gap, height: 20, width: '5%' },\r\n          { type: ShimmerElementType.line, height: 20, width: '10%' },\r\n          { type: ShimmerElementType.gap, width: 'calc(100% - 30px)', height: 10 },\r\n        ]}\r\n      />\r\n    </div>\r\n  );\r\n};\r\nexport const getHorizontalBarChartShimmerCustomElements = () => {\r\n  return (\r\n    <div>\r\n      <ShimmerElementsGroup\r\n        flexWrap\r\n        width=\"100%\"\r\n        shimmerElements={[\r\n          { type: ShimmerElementType.line, width: '10%', height: 10, verticalAlign: 'bottom' },\r\n          { type: ShimmerElementType.gap, width: '90%', height: 30 },\r\n          { type: ShimmerElementType.line, width: '85%', height: 20, verticalAlign: 'bottom' },\r\n          { type: ShimmerElementType.gap, width: '15%', height: 30 },\r\n          { type: ShimmerElementType.line, width: '10%', height: 10, verticalAlign: 'bottom' },\r\n          { type: ShimmerElementType.gap, width: '90%', height: 30 },\r\n          { type: ShimmerElementType.line, width: '85%', height: 20, verticalAlign: 'bottom' },\r\n          { type: ShimmerElementType.gap, width: '15%', height: 30 },\r\n        ]}\r\n      />\r\n    </div>\r\n  );\r\n};\r\nexport const getDefaultShimmerCustomElements = () => {\r\n  return (\r\n    <div>\r\n      <ShimmerElementsGroup\r\n        flexWrap\r\n        width=\"100%\"\r\n        shimmerElements={[\r\n          { type: ShimmerElementType.line, width: '100%', height: 10 },\r\n          { type: ShimmerElementType.gap, width: '100%', height: 30 },\r\n          { type: ShimmerElementType.line, width: '100%', height: 10 },\r\n          { type: ShimmerElementType.gap, width: '100%', height: 30 },\r\n          { type: ShimmerElementType.line, width: '100%', height: 10 },\r\n          { type: ShimmerElementType.gap, width: '100%', height: 30 },\r\n          { type: ShimmerElementType.line, width: '100%', height: 10 },\r\n          { type: ShimmerElementType.gap, width: '100%', height: 30 },\r\n        ]}\r\n      />\r\n    </div>\r\n  );\r\n};\r\n\r\nexport const getShimmerCustomElements = (chartType: ChartTypes) => {\r\n  switch (chartType) {\r\n    case ChartTypes.BAR:\r\n      return getHorizontalBarChartShimmerCustomElements();\r\n    case ChartTypes.DONUT:\r\n      return getDonutChartShimmerCustomElements();\r\n    case ChartTypes.LINE:\r\n    case ChartTypes.MAP:\r\n      return getDefaultShimmerCustomElements();\r\n    case ChartTypes.GRID:\r\n      return;\r\n  }\r\n};\r\n\r\nexport function mapToGridData(data: TythonReportingDataRow[], metric: string, mainDimension: string) {\r\n  const items = data.map((item, index) => {\r\n    return { [mainDimension]: item[mainDimension], [metric]: roundMetric(TythonColumnsEnum[metric], item[metric]) };\r\n  });\r\n  return items;\r\n}\r\n\r\nexport function mapToDonutChartData(data: TythonReportingDataRow[], metric: IMetadataElement, mainDimension: IMetadataElement) {\r\n  const points: IChartDataPoint[] = data.map((item, index) => {\r\n    const colorIndex = getMetricColorIndex(TythonColumnsEnum[metric.key], index);\r\n\r\n    return {\r\n      legend: item[mainDimension.key],\r\n      data: roundMetric(TythonColumnsEnum[metric.key], item[metric.key]),\r\n      color: getGradientColor(TythonColumnsEnum[metric.key], colorIndex),\r\n    };\r\n  });\r\n\r\n  return {\r\n    chartTitle: 'Donut chart basic example',\r\n    chartData: points,\r\n  };\r\n}\r\nfunction getGradientColor(metricKey: TythonColumnsEnum, colorIndex: number): string {\r\n  return getMetricColor(metricKey)?.gradients[colorIndex];\r\n}\r\nfunction getMainLegendColor(metricKey: TythonColumnsEnum): string {\r\n  return getMetricColor(metricKey)?.main;\r\n}\r\n\r\nfunction getMetricColor(metricKey: TythonColumnsEnum): { main: string; gradients: string[] } {\r\n  return METRICS_COLORS[metricKey] ?? METRICS_COLORS[TythonColumnsEnum.Revenue];\r\n}\r\n\r\nfunction getMetricColorIndex(metricKey: TythonColumnsEnum, index: number) {\r\n  const metricColor = getMetricColor(metricKey);\r\n  return metricColor ? ((index % metricColor.gradients.length) + metricColor.gradients.length) % metricColor.gradients.length : 0;\r\n}\r\nexport function mapToBarChartData(\r\n  data: TythonReportingDataRow[],\r\n  total: number,\r\n  metric: IMetadataElement,\r\n  mainDimension: IMetadataElement,\r\n  formatMessage: FormatMessageFuncType\r\n): IChartProps[] {\r\n  const bars = data.map((point, index) => {\r\n    const barXData = roundMetric(TythonColumnsEnum[metric.key], point[metric.key]);\r\n    const colorIndex = getMetricColorIndex(TythonColumnsEnum[metric.key], index);\r\n    return {\r\n      chartTitle: point[mainDimension.key],\r\n      chartData: [\r\n        {\r\n          legend: point[mainDimension.key],\r\n          horizontalBarChartdata: { x: barXData, y: total },\r\n          color: getGradientColor(TythonColumnsEnum[metric.key], colorIndex),\r\n          xAxisCalloutData: getReportColumnMetadataDisplayName(metric.key, formatMessage),\r\n          yAxisCalloutData: barXData,\r\n        },\r\n      ],\r\n    };\r\n  });\r\n  return bars;\r\n}\r\n\r\nexport function mapToBubbleData(\r\n  data: TythonReportingDataRow[],\r\n  metric: IMetadataElement,\r\n  mainDimension: IMetadataElement,\r\n  codeDimensionKey: string,\r\n  locale: string\r\n): IGeoJSONFeature[] {\r\n  const bubbleData = data\r\n    .filter((row) => {\r\n      const coordinates = countryCoordinatesData[row[codeDimensionKey]];\r\n      if (!coordinates) {\r\n        Log.error(`Coordinates not found for country code: ${row[codeDimensionKey]}`);\r\n        return false;\r\n      }\r\n      return true;\r\n    })\r\n    .map((row) => {\r\n      const metricValue = roundMetric(TythonColumnsEnum[metric.key], row[metric.key]);\r\n      const formattedMetricValue = formatMetric(TythonColumnsEnum[metric.key], row[metric.key], locale);\r\n      const coordinates = countryCoordinatesData[row[codeDimensionKey]];\r\n\r\n      return {\r\n        type: 'Feature',\r\n        properties: {\r\n          name: metric.displayName,\r\n          dimension: row.Country,\r\n          value: Number(metricValue),\r\n          formattedValue: formattedMetricValue,\r\n        },\r\n        geometry: {\r\n          type: 'Point',\r\n          coordinates: [coordinates.longitude, coordinates.latitude] as [number, number],\r\n        },\r\n      };\r\n    })\r\n    .filter((item): item is IGeoJSONFeature => item.properties.value > 0);\r\n\r\n  return bubbleData;\r\n}\r\n\r\nexport function mapToLineChartData(\r\n  data: TythonReportingDataRow[],\r\n  activeMetrics: ActiveMetrics,\r\n  dateDimension: string,\r\n  mainDimension?: IMetadataElement\r\n) {\r\n  const series: HighCharts.SeriesOptionsType[] = mainDimension?.key\r\n    ? getTimeSeriesByDimension(data, mainDimension, dateDimension, activeMetrics)\r\n    : getTimeSeriesByMetric(activeMetrics, data, dateDimension);\r\n  return series;\r\n}\r\nfunction getTimeSeriesByDimension(\r\n  data: TythonReportingDataRow[],\r\n  mainDimension: IMetadataElement,\r\n  dateDimension: string,\r\n  activeMetrics: ActiveMetrics\r\n) {\r\n  const lineDataByDimension = {};\r\n  for (const row of data) {\r\n    if (!lineDataByDimension[row[mainDimension?.key]]) {\r\n      lineDataByDimension[row[mainDimension?.key]] = [];\r\n    }\r\n    lineDataByDimension[row[mainDimension?.key]].push({ ...row });\r\n  }\r\n\r\n  const metric = Object.keys(activeMetrics).filter((activeMetric) => activeMetrics[activeMetric].isActive)[0];\r\n  const accumulatedData = Object.values(lineDataByDimension).map((dataByDimension: TythonReportingDataRow[]) => {\r\n    return dataByDimension.reduce((acc, curr) => {\r\n      const sum = acc[metric] ? acc[metric] + Number(curr[metric]) : Number(curr[metric]);\r\n      return {\r\n        ...acc,\r\n        [metric]: sum,\r\n      };\r\n    });\r\n  });\r\n  const topDataByMetric: string[] = getTopData(accumulatedData, metric, mainDimension?.key).topData.map((row) => row[mainDimension?.key]);\r\n  const series: HighCharts.SeriesOptionsType[] = Object.keys(lineDataByDimension)\r\n    .filter((key) => topDataByMetric.includes(key))\r\n    .map((key, index) => {\r\n      const colorIndex = getMetricColorIndex(TythonColumnsEnum[metric], index);\r\n      const color = getGradientColor(TythonColumnsEnum[metric], colorIndex);\r\n      return {\r\n        name: key,\r\n        type: 'line',\r\n        data: lineDataByDimension[key]\r\n          .sort((a, b) => {\r\n            return a[dateDimension]! >= b[dateDimension]! ? 1 : -1;\r\n          })\r\n          .map((row) => {\r\n            const localDate = new Date(row[dateDimension]!);\r\n            const utcTimeStamp = Date.UTC(\r\n              localDate.getFullYear(),\r\n              localDate.getMonth(),\r\n              localDate.getDate(),\r\n              localDate.getHours(),\r\n              localDate.getMinutes()\r\n            );\r\n            return [utcTimeStamp, roundMetric(TythonColumnsEnum[metric], Number(row[metric]))];\r\n          }),\r\n        yAxis: metric,\r\n        color: color,\r\n        tooltip: {\r\n          pointFormatter: function () {\r\n            const value = this.y || 0;\r\n            return `<span style=\"color: ${this.series.color}\">●</span> ${this.series.name}: ${HighCharts.numberFormat(\r\n              value,\r\n              value % 1 === 0 ? 0 : 2,\r\n              '.',\r\n              ','\r\n            )}<br/>`;\r\n          },\r\n          useHTML: true,\r\n        },\r\n      };\r\n    });\r\n  return series;\r\n}\r\n\r\nfunction getTimeSeriesByMetric(\r\n  activeMetrics: ActiveMetrics,\r\n  data: TythonReportingDataRow[],\r\n  dateDimension: string\r\n): HighCharts.SeriesOptionsType[] {\r\n  return Object.keys(activeMetrics)\r\n    .filter((activeMetric) => activeMetrics[activeMetric].isActive)\r\n    .map((metric) => {\r\n      return {\r\n        name: activeMetrics[metric].metricName,\r\n        type: 'line',\r\n        data: data\r\n          .sort((a, b) => {\r\n            return a[dateDimension]! >= b[dateDimension]! ? 1 : -1;\r\n          })\r\n          .map((row) => {\r\n            const localDate = new Date(row[dateDimension]!);\r\n            const utcTimeStamp = Date.UTC(\r\n              localDate.getFullYear(),\r\n              localDate.getMonth(),\r\n              localDate.getDate(),\r\n              localDate.getHours(),\r\n              localDate.getMinutes()\r\n            );\r\n            return [utcTimeStamp, roundMetric(TythonColumnsEnum[metric], Number(row[metric]))];\r\n          }),\r\n        yAxis: metric,\r\n        color: activeMetrics[metric].color,\r\n        tooltip: {\r\n          pointFormatter: function () {\r\n            const value = this.y || 0;\r\n            return `<span style=\"color: ${this.series.color}\">●</span> ${this.series.name}: ${HighCharts.numberFormat(\r\n              value,\r\n              value % 1 === 0 ? 0 : 2,\r\n              '.',\r\n              ','\r\n            )}<br/>`;\r\n          },\r\n          useHTML: true,\r\n        },\r\n      };\r\n    });\r\n}\r\n\r\nexport function getMetricDropdownOptions(\r\n  metrics: IMetadataElement[],\r\n  chartType: ChartTypes,\r\n  formatMessage: FormatMessageFuncType\r\n): IDropdownOption[] {\r\n  return metrics\r\n    .map((metric) => {\r\n      return {\r\n        key: metric.key,\r\n        text: getReportColumnMetadataDisplayName(metric.key, formatMessage),\r\n        title: getReportColumnMetadataDisplayName(metric.key, formatMessage),\r\n      } as IDropdownOption;\r\n    })\r\n    .filter((metric) => !ratioMetrics.includes(String(metric.key)) || chartType === ChartTypes.MAP);\r\n}\r\nexport const getChart = (\r\n  {\r\n    currentChartType,\r\n    reportData,\r\n    selectedMetric,\r\n    mainDimension,\r\n    chartComponentRef,\r\n    mapChartComponentRef,\r\n    activeMetrics,\r\n    dateDimension,\r\n    countryCodeDimension,\r\n    formatMessage,\r\n  }: IChartsOptions,\r\n  locale: string\r\n) => {\r\n  const { topData, total } = getTopData(reportData, selectedMetric.key, mainDimension?.key);\r\n  const roundedTotal = roundMetric(TythonColumnsEnum[selectedMetric.key], total);\r\n\r\n  if (!reportData || reportData.length <= 0) {\r\n    return (\r\n      <EmptyChart\r\n        noDataText={'No data available.'}\r\n        noDataMessage={\r\n          ' To update the tile, change the data range or select another metric. If the tile remains blank, your account might have no data.'\r\n        }\r\n        showGridLines={ChartTypes.LINE === currentChartType}\r\n      />\r\n    );\r\n  }\r\n  switch (currentChartType) {\r\n    case ChartTypes.DONUT:\r\n      if (!roundedTotal) {\r\n        return <ZeroTotalChart />;\r\n      }\r\n      return (\r\n        <DonutChart\r\n          data={mapToDonutChartData(topData, selectedMetric, mainDimension!)}\r\n          innerRadius={55}\r\n          hideLegend={false}\r\n          valueInsideDonut={formatMetric(TythonColumnsEnum[selectedMetric.key], total, locale)}\r\n          enabledLegendsWrapLines={true}\r\n          legendProps={{\r\n            styles: {\r\n              legend: {\r\n                textTransform: 'none',\r\n              },\r\n            },\r\n          }}\r\n          styles={{\r\n            legendContainer: {\r\n              maxWidth: '100%',\r\n            },\r\n          }}\r\n        />\r\n      );\r\n    case ChartTypes.BAR:\r\n      if (!roundedTotal) {\r\n        return <ZeroTotalChart />;\r\n      }\r\n      return <HorizontalBarChart data={mapToBarChartData(topData, total, selectedMetric, mainDimension!, formatMessage)} />;\r\n    case ChartTypes.GRID:\r\n      const gridColumns = buildGridColumns([selectedMetric, mainDimension!], formatMessage);\r\n      return (\r\n        <ShimmeredDetailsList\r\n          items={mapToGridData(topData, selectedMetric.key, mainDimension?.key!)}\r\n          columns={gridColumns || []}\r\n          shimmerLines={MAX_TOP_ROWS + 1}\r\n          enableShimmer={!reportData}\r\n          selectionMode={SelectionMode.none}\r\n        />\r\n      );\r\n    case ChartTypes.LINE:\r\n      const lineChartSeries = mapToLineChartData(reportData, activeMetrics, dateDimension, mainDimension);\r\n      const yAxes: YAxisOptions[] = buildYAxes(activeMetrics);\r\n      return (\r\n        <div>\r\n          <CustomChart\r\n            chartComponentRef={chartComponentRef}\r\n            options={{\r\n              series: lineChartSeries,\r\n              legend: {\r\n                enabled: true,\r\n              },\r\n              yAxis: yAxes,\r\n              lang: {\r\n                thousandsSep: ',',\r\n              },\r\n            }}\r\n            dataMetric={''}\r\n          />\r\n        </div>\r\n      );\r\n    case ChartTypes.MAP:\r\n      const bubbleData = mapToBubbleData(reportData, selectedMetric, mainDimension!, countryCodeDimension!, locale);\r\n      return (\r\n        <div>\r\n          <BubbleMap data={bubbleData} />\r\n        </div>\r\n      );\r\n  }\r\n};\r\nexport function getTopData(\r\n  reportData: TythonReportingDataRow[],\r\n  selectedMetric: string,\r\n  mainDimension: string | undefined\r\n): { topData: TythonReportingDataRow[]; total: number } {\r\n  const topCount = MAX_TOP_ROWS;\r\n\r\n  const topData: TythonReportingDataRow[] = [];\r\n  const others: TythonReportingDataRow = {\r\n    DateTime: '',\r\n    [selectedMetric]: 0,\r\n    className: '',\r\n    apiPath: '',\r\n  };\r\n  let total = 0;\r\n  if (mainDimension) {\r\n    others[mainDimension] = OTHERS_NAME;\r\n    const sortedData = reportData.sort((a, b) => {\r\n      return a[selectedMetric] <= b[selectedMetric] ? 1 : -1;\r\n    });\r\n    let count = 0;\r\n    for (const row of sortedData) {\r\n      if (count >= topCount) {\r\n        others[selectedMetric] += row[selectedMetric];\r\n      } else {\r\n        topData.push(row);\r\n      }\r\n      total += row[selectedMetric];\r\n      count++;\r\n    }\r\n    if (count > topCount) {\r\n      topData.push(others);\r\n    }\r\n  }\r\n  return { topData, total };\r\n}\r\n\r\nfunction buildYAxes(activeMetrics: ActiveMetrics) {\r\n  const enabledMetrics = Object.keys(activeMetrics).filter((activeMetric) => activeMetrics[activeMetric].isActive);\r\n  let hasLeftAxis = false;\r\n  const yAxes: YAxisOptions[] = Object.keys(activeMetrics).map((activeMetric) => {\r\n    const newAxis = {\r\n      title: {\r\n        text: null,\r\n      },\r\n      opposite: hasLeftAxis,\r\n      labels: {\r\n        enabled: enabledMetrics.length <= 2,\r\n      },\r\n      id: activeMetric,\r\n    };\r\n    if (activeMetrics[activeMetric].isActive && enabledMetrics.length <= 2) {\r\n      hasLeftAxis = true;\r\n    }\r\n    return newAxis;\r\n  });\r\n  return yAxes;\r\n}\r\nexport function buildGridColumns(columns: IMetadataElement[], formatMessage: FormatMessageFuncType): IColumn[] {\r\n  return columns.map((column) => {\r\n    return {\r\n      key: column.key,\r\n      name: getReportColumnMetadataDisplayName(column.key, formatMessage),\r\n      minWidth: 150,\r\n      maxWidth: 300,\r\n      fieldName: column.key,\r\n      isResizable: true,\r\n    };\r\n  });\r\n}\r\nexport function buildGridV2Columns(\r\n  dimensions: IMetadataElement[],\r\n  metrics: IMetadataElement[],\r\n  defaultSelected,\r\n  formatMessage: FormatMessageFuncType\r\n): IGridV2Column[] {\r\n  const columns = [...dimensions.sort(sortByDefaultColumns(defaultSelected)), ...metrics.sort(sortByDefaultColumns(defaultSelected))];\r\n  return columns.map((column, index) => {\r\n    return {\r\n      key: column.key,\r\n      name: getReportColumnMetadataDisplayName(column.key, formatMessage),\r\n      minWidth: 150,\r\n      fieldName: column.key,\r\n      isSearchable: true,\r\n      isVisible:\r\n        defaultSelected.includes(column.key as TythonColumnsEnum) || !!dimensions.find((dimension) => column.key === dimension.key),\r\n      isExportable: false,\r\n      isResizable: true,\r\n      suppressSorting: false,\r\n      columnOrder: index,\r\n      sortFunction:\r\n        column.key === TythonColumnsEnum.DateTime || column.key === TythonColumnsEnum.Date\r\n          ? /* tslint:disable-next-line */\r\n            (a: any, b: any, isSortingDescending: boolean) => {\r\n              const convertDate = (date: string) => {\r\n                const dateParts = date.match(/(\\d+)\\/(\\d+)\\/(\\d+), (\\d+) (AM|PM)/);\r\n                if (dateParts) {\r\n                  const month = parseInt(dateParts[1], 10);\r\n                  const day = parseInt(dateParts[2], 10);\r\n                  const year = parseInt(dateParts[3], 10);\r\n                  let hours = parseInt(dateParts[4], 10);\r\n                  const ampm = dateParts[5];\r\n\r\n                  if (ampm === 'PM' && hours < 12) {\r\n                    hours += 12;\r\n                  } else if (ampm === 'AM' && hours === 12) {\r\n                    hours = 0;\r\n                  }\r\n\r\n                  return new Date(year, month - 1, day, hours, 0, 0);\r\n                }\r\n                return date;\r\n              };\r\n\r\n              const aDate = convertDate(a['DateTime']);\r\n              const bDate = convertDate(b['DateTime']);\r\n\r\n              return isSortingDescending ? +aDate - +bDate : +bDate - +aDate;\r\n            }\r\n          : undefined,\r\n    };\r\n  });\r\n}\r\nexport function getActiveMarkers(\r\n  metrics: IMetadataElement[],\r\n  filters: IActiveFilter[],\r\n  chartType: ChartTypes,\r\n  defaultSelected: TythonColumnsEnum[],\r\n  formatMessage: FormatMessageFuncType,\r\n  selectedMetric: string = ''\r\n): ActiveMetrics {\r\n  const activeMetrics: ActiveMetrics = {};\r\n  if (metrics && metrics.length > 0) {\r\n    const sortedMetrics = metrics.sort(sortByDefaultColumns(defaultSelected));\r\n    const isSelectedMetricDisabled = chartType !== ChartTypes.LINE && chartType !== ChartTypes.MAP && ratioMetrics.includes(selectedMetric);\r\n    for (let i = 0; i < sortedMetrics.length; i++) {\r\n      const metric = sortedMetrics[i];\r\n      const appliedFiltersSet = new Set(filters.map((filter) => filter.key));\r\n      let incompatibleFilter = '';\r\n      const isIncompatible = metric.incompatibleFields?.some((incompatibleField) => {\r\n        incompatibleFilter = appliedFiltersSet.has(incompatibleField) ? incompatibleField : '';\r\n        return appliedFiltersSet.has(incompatibleField);\r\n      });\r\n      const incompatibleDimension = incompatibleFilter ? filters.find((filter) => filter.key === incompatibleFilter) : undefined;\r\n      const DEFAULT_SHOWN_METRICS = 5;\r\n      const isVisible = i < DEFAULT_SHOWN_METRICS;\r\n      const isActive =\r\n        selectedMetric && !isSelectedMetricDisabled\r\n          ? metric.key === selectedMetric\r\n          : defaultSelected.includes(metric.key as TythonColumnsEnum);\r\n      const isDisabled = chartType !== ChartTypes.LINE && chartType !== ChartTypes.MAP && ratioMetrics.includes(String(metric.key));\r\n      const inCompatibleMessage = getIncompatibleFilterMessage(\r\n        getReportColumnMetadataDisplayName(metric.key, formatMessage),\r\n        getReportColumnMetadataDisplayName(incompatibleDimension?.key || '', formatMessage) || ''\r\n      );\r\n      activeMetrics[metric.key] = {\r\n        color: getMainLegendColor(TythonColumnsEnum[metric.key]),\r\n        isActive: isActive && !isDisabled,\r\n        metricData: '',\r\n        metricName: getReportColumnMetadataDisplayName(metric.key, formatMessage),\r\n        metricKey: metric.key,\r\n        isVisible: isVisible || isActive,\r\n        disabled: isDisabled,\r\n        isIncompatible: isIncompatible,\r\n        incompatibleTooltipCantText: formatMessage(inCompatibleMessage.cantMessage, inCompatibleMessage.params),\r\n        incompatibleTooltipWontText: formatMessage(inCompatibleMessage.wontMessage, inCompatibleMessage.params),\r\n      };\r\n    }\r\n  }\r\n\r\n  return activeMetrics;\r\n}\r\nexport function getIncompatibleFilterMessage(metrics: string, dimensions: string) {\r\n  return {\r\n    cantMessage: ReportMessages.chartIncompatibleFieldsWithFilterCantBeShown,\r\n    wontMessage: ReportMessages.chartIncompatibleFieldsWithFilterWillNotBeShown,\r\n    params: {\r\n      metrics,\r\n      dimensions,\r\n    },\r\n  };\r\n}\r\nexport function getIncompatibleBreakdownMessage(metrics: string, dimensions: string) {\r\n  return {\r\n    message: ReportMessages.gridIncompatibleFieldsWhenBreakingDown,\r\n    params: {\r\n      metrics,\r\n      dimensions,\r\n    },\r\n  };\r\n}\r\nexport function getIncompatibleColumnWithBreakdownMessage(metrics: string, dimensions: string) {\r\n  return {\r\n    cantMessage: ReportMessages.gridIncompatibleFieldsWithBreakdown,\r\n    wontMessage: ReportMessages.gridIncompatibleFieldsWhenAddingColumnWithBreakdown,\r\n    params: {\r\n      metrics,\r\n      dimensions,\r\n    },\r\n  };\r\n}\r\nexport function getIncompatibleColumnWithFilterMessage(metrics: string, dimensions: string) {\r\n  return {\r\n    cantMessage: ReportMessages.gridIncompatibleFieldsWithFilter,\r\n    wontMessage: ReportMessages.gridIncompatibleFieldsWhenAddingColumnWithFilter,\r\n    params: {\r\n      metrics,\r\n      dimensions,\r\n    },\r\n  };\r\n}\r\nexport function getIncompatibleColumnWithBreakdownAndFilterMessage(metrics: string, dimensions: string) {\r\n  return {\r\n    cantMessage: ReportMessages.gridIncompatibleFieldsWithFilterAndBreakdown,\r\n    wontMessage: ReportMessages.gridIncompatibleFieldsWhenAddingColumnWithFilterAndBreakdown,\r\n    params: {\r\n      metrics,\r\n      dimensions,\r\n    },\r\n  };\r\n}\r\n\r\nfunction sortByDefaultColumns(defaultSelected: TythonColumnsEnum[]): ((a: IMetadataElement, b: IMetadataElement) => number) | undefined {\r\n  return (a, b) => {\r\n    return defaultSelected.indexOf(b.key as TythonColumnsEnum) - defaultSelected.indexOf(a.key as TythonColumnsEnum);\r\n  };\r\n}\r\n\r\nexport function constructRequestBody(\r\n  title: string,\r\n  dateRange: ICustomCalenderDateRange,\r\n  currentChartGrain: ChartGrain,\r\n  filters: IActiveFilter[] = [],\r\n  breakdown: string[] = [],\r\n  metrics: IMetadataElement[] = []\r\n) {\r\n  const callerGuid = AuthenticationUtils.createNewGuid();\r\n  const { reportType } = getReportPageStore();\r\n\r\n  return {\r\n    callerGuid: callerGuid,\r\n    reportName: title,\r\n    reportType: reportType,\r\n    dateTimeRanges: [\r\n      {\r\n        startDateTime: startOfDay(dateRange.startDate).toISOString(),\r\n        endDateTime: endOfDay(dateRange.endDate).toISOString(),\r\n      },\r\n    ],\r\n    grain: currentChartGrain,\r\n    columns: [...breakdown, ...metrics.map((metric) => metric.key)],\r\n    filters: filters.map((filter) => {\r\n      return {\r\n        Key: filter.filterKey,\r\n        values: filter.values.map((value) => value.key),\r\n      };\r\n    }),\r\n    requestOptions: {},\r\n  };\r\n}\r\n\r\nexport function constructMediationRequestBody(\r\n  dateRange: ICustomCalenderDateRange,\r\n  currentChartGrain: ChartGrain,\r\n  filters: IActiveFilter[] = [],\r\n  breakdown: string[] = [],\r\n  columns: string[] = []\r\n): MediationReportingDataRequestBody {\r\n  return {\r\n    startDate: startOfDay(dateRange.startDate).toISOString(),\r\n    endDate: endOfDay(dateRange.endDate).toISOString(),\r\n    grain: currentChartGrain,\r\n    dimensions: [...breakdown],\r\n    columns: columns,\r\n    filters: filters.map((filter) => {\r\n      return {\r\n        Key: filter.filterKey,\r\n        values: filter.values.map((value) => String(value.key)),\r\n      };\r\n    }),\r\n  };\r\n}\r\nexport function getStartingBreakdown(mainDimension?: string): string[] {\r\n  let startingBreakdown = mainDimension ? [mainDimension] : [];\r\n  const storedBreakdown = getDataFromURL<string[]>(ReportsQueryStoreKeys.BREAKDOWN);\r\n  if (storedBreakdown) {\r\n    startingBreakdown = storedBreakdown;\r\n  }\r\n  return startingBreakdown;\r\n}\r\n\r\nexport function getStartingChartGrain(\r\n  defaultChartGrain: ChartGrain | undefined,\r\n  allowedChartGrains: IMetadataElement[],\r\n  chartType: ChartTypes,\r\n  chartGrainStoreKey: string\r\n) {\r\n  const defaultBasedOnChartType = chartType === ChartTypes.LINE ? ChartGrain.HOURLY : ChartGrain.NONE;\r\n  let startingChartGrain: ChartGrain = defaultChartGrain ? defaultChartGrain : defaultBasedOnChartType;\r\n  const storedChartGrain = getDataFromURL<ChartGrain>(chartGrainStoreKey);\r\n  if (storedChartGrain && chartType === ChartTypes.LINE) {\r\n    startingChartGrain = storedChartGrain;\r\n  }\r\n  return startingChartGrain;\r\n}\r\nexport function exportReport(\r\n  dataToExport: ReportingDataRow[],\r\n  columnsMetadata: IMetadataElement[],\r\n  filename: string,\r\n  formatMessage: FormatMessageFuncType\r\n) {\r\n  if (dataToExport.length > 0) {\r\n    const columnsToExport = columnsMetadata.filter((col) => dataToExport[0][col.key] !== undefined);\r\n    exportToCsv(dataToExport, columnsToExport, filename, formatMessage);\r\n  }\r\n}\r\n","import { mutatorAction } from \"satcheljs\";\r\nimport { getAdunitStore } from \"../store/store\";\r\n\r\nexport const onAdSenseMediationToggleChanged = mutatorAction(\r\n  'onAdSenseMediationToggleChanged', (isEnabled: boolean) => {\r\n    getAdunitStore().active.adSenseMediationToggle = isEnabled;\r\n  }\r\n);\r\n\r\nexport const onAdSenseMediationChanged = mutatorAction(\r\n  'onAdSenseMediationChanged', (isEnabled: boolean) => {\r\n    getAdunitStore().active.adSenseMediationStatus = isEnabled;\r\n  }\r\n);","import { mutatorAction } from 'satcheljs';\r\nimport { PrivateMarketplace } from '../../../../../@data';\r\nimport { getAdunitStore } from '../store/store';\r\n\r\nexport const onAdunitPrivateMarketplaceChanged = mutatorAction(\r\n  'onAdunitPrivateMarketplaceChanged',\r\n  (privateMarketplace?: PrivateMarketplace) => {\r\n    getAdunitStore().privateMarketplace = privateMarketplace ? privateMarketplace : undefined;\r\n    getAdunitStore().enablePrivateMarketplace = privateMarketplace ? true : false;\r\n  }\r\n);\r\n\r\nexport const onAdunitEnablePrivateMarketplaceChanged = mutatorAction(\r\n  'onAdunitEnablePrivateMarketplaceChanged',\r\n  (enablePrivateMarketplace: boolean) => {\r\n    getAdunitStore().enablePrivateMarketplace = enablePrivateMarketplace;\r\n  }\r\n);\r\n","import { mutatorAction } from 'satcheljs';\r\nimport { AdUnit } from '../../../../../@data';\r\nimport { getAdunitStore } from '../store/store';\r\n\r\nexport const setAdUnitsData = mutatorAction('setAdUnitsData', (data?: AdUnit[]) => {\r\n  const store = getAdunitStore();\r\n  store.adUnitsRaw.data = data;\r\n});\r\n\r\nexport const setAdUnitsLoading = mutatorAction('setAdUnitsLoading', (loading: boolean) => {\r\n  const store = getAdunitStore();\r\n  store.adUnitsRaw.isLoading = loading;\r\n});\r\n\r\nexport const setAdUnitsDataFetching = mutatorAction('setAdUnitsDataFetching', (loading: boolean) => {\r\n  const store = getAdunitStore();\r\n  store.adUnitsRaw.isFetchingData = loading;\r\n});\r\n\r\nexport const setAdUnitsMediationFetching = mutatorAction('setAdUnitsMediationFetching', (isFetching: boolean) => {\r\n  const store = getAdunitStore();\r\n  store.isFetchingAdUnitStatus = isFetching;\r\n});\r\n","import { useMemo } from 'react';\r\nimport { addLocaleData } from 'react-intl';\r\nimport deLocaleData from 'react-intl/locale-data/de';\r\nimport enLocaleData from 'react-intl/locale-data/en';\r\nimport esLocaleData from 'react-intl/locale-data/es';\r\nimport frLocaleData from 'react-intl/locale-data/fr';\r\nimport itLocaleData from 'react-intl/locale-data/it';\r\nimport { upperCaseCountryCode } from '../app/@data';\r\nimport {\r\n  DEFAULT_COUNTRY_CODE,\r\n  DE_LOCALE_KEY,\r\n  EN_GB_LOCALE_KEY,\r\n  EN_LOCALE_KEY,\r\n  ES_LOCALE_KEY,\r\n  ES_MX_LOCALE_KEY,\r\n  FR_CA_LOCALE_KEY,\r\n  FR_LOCALE_KEY,\r\n  IT_LOCALE_KEY,\r\n} from '../app/constants/AppConstants';\r\nimport de from './locales/de-de.json';\r\nimport enGb from './locales/en-gb.json';\r\nimport es from './locales/es-es.json';\r\nimport esMx from './locales/es-mx.json';\r\nimport frCa from './locales/fr-ca.json';\r\nimport fr from './locales/fr-fr.json';\r\nimport it from './locales/it-it.json';\r\n\r\nimport { UseI18n } from './useI18n.types';\r\n\r\nexport const useI18n: UseI18n = ({ systemPreferences, publisher, userContext }) => {\r\n  const { locale: sysLocale, countryCode: sysCountryCode } = systemPreferences ?? {};\r\n  addLocaleData(enLocaleData);\r\n  addLocaleData(frLocaleData);\r\n  addLocaleData(deLocaleData);\r\n  addLocaleData(itLocaleData);\r\n  addLocaleData(esLocaleData);\r\n\r\n  const [locale, formattedLocale, countryCode, messages] = useMemo(() => {\r\n    // set default locale to English\r\n    const appLocale = sysLocale ?? EN_LOCALE_KEY;\r\n    const appCountryCode = sysCountryCode ?? DEFAULT_COUNTRY_CODE;\r\n    const formatLocale = upperCaseCountryCode(appLocale);\r\n    switch (appLocale) {\r\n      case EN_GB_LOCALE_KEY:\r\n        return [appLocale, formatLocale, appCountryCode, enGb];\r\n      case FR_LOCALE_KEY:\r\n        return [appLocale, formatLocale, appCountryCode, fr];\r\n      case DE_LOCALE_KEY:\r\n        return [appLocale, formatLocale, appCountryCode, de];\r\n      case IT_LOCALE_KEY:\r\n        return [appLocale, formatLocale, appCountryCode, it];\r\n      case FR_CA_LOCALE_KEY:\r\n        return [appLocale, formatLocale, appCountryCode, frCa];\r\n      case ES_LOCALE_KEY:\r\n        return [appLocale, formatLocale, appCountryCode, es];\r\n      case ES_MX_LOCALE_KEY:\r\n        return [appLocale, formatLocale, appCountryCode, esMx];\r\n      default:\r\n        return [appLocale, formatLocale, appCountryCode];\r\n    }\r\n  }, [sysLocale, sysCountryCode]);\r\n\r\n  return {\r\n    locale,\r\n    formattedLocale,\r\n    countryCode,\r\n    messages,\r\n  };\r\n};\r\n","import { classNamesFunction, ICalloutProps, Toggle } from '@fluentui/react';\r\nimport * as React from 'react';\r\nimport AppMessages from '../../App.messages';\r\nimport { getScreenReaderTextStyles } from '../../utils/GlobalStyleUtils';\r\nimport { InfoButton } from '../InfoButton';\r\nimport { IInfoToggleProps, IInfoToggleStyleProps, IInfoToggleStyles } from './InfoToggle.types';\r\n\r\nconst getClassNames = classNamesFunction<IInfoToggleStyleProps, IInfoToggleStyles>();\r\n\r\nexport class InfoToggleBase extends React.Component<IInfoToggleProps> {\r\n  public render(): JSX.Element {\r\n    const { styles, theme, label, checked, onChange, calloutContent, ariaDescription, calloutOnDismiss, iconButtonOnClick } = this.props;\r\n    const { formatMessage } = this.props.intl;\r\n\r\n    const classNames = getClassNames(styles, { theme: theme! });\r\n    const calloutProps: ICalloutProps = {\r\n      calloutWidth: 300,\r\n    };\r\n    return (\r\n      <div className={classNames.root}>\r\n        <Toggle\r\n          onText={label}\r\n          offText={label}\r\n          defaultChecked={checked}\r\n          onChange={onChange}\r\n          styles={classNames.subComponentStyles.toggle}\r\n          aria-describedby={'toggleDescription'}\r\n        />\r\n        <InfoButton\r\n          ariaLabel={formatMessage(AppMessages.infoLabel, { label: label })}\r\n          ariaDescription={formatMessage(AppMessages.infoDescription, { label: label })}\r\n          iconTitle=\"Information\"\r\n          calloutContent={calloutContent}\r\n          calloutProps={calloutProps}\r\n          iconButtonOnClick={iconButtonOnClick}\r\n          calloutOnDismiss={calloutOnDismiss}\r\n        />\r\n        <span id=\"toggleDescription\" style={getScreenReaderTextStyles()}>\r\n          {ariaDescription}\r\n        </span>\r\n      </div>\r\n    );\r\n  }\r\n}\r\n","import { IInfoToggleStyleProps, IInfoToggleStyles } from './InfoToggle.types';\r\n\r\nexport const getStyles = (props: IInfoToggleStyleProps): IInfoToggleStyles => {\r\n  return {\r\n    root: {\r\n      display: 'flex',\r\n      alignItems: 'center',\r\n    },\r\n    subComponentStyles: {\r\n      toggle: {\r\n        root: {\r\n          marginBottom: '0px',\r\n        },\r\n      },\r\n    },\r\n  };\r\n};\r\n","import { styled } from '@fluentui/react';\r\nimport { InfoToggleBase } from './InfoToggle.base';\r\nimport { getStyles } from './InfoToggle.styles';\r\nimport { IInfoToggleProps, IInfoToggleStyleProps, IInfoToggleStyles } from './InfoToggle.types';\r\n\r\nexport const InfoToggle = styled<IInfoToggleProps, IInfoToggleStyleProps, IInfoToggleStyles>(InfoToggleBase, getStyles, undefined, {\r\n  scope: 'InfoToggle',\r\n});\r\n","import { defineMessages } from 'react-intl';\r\n\r\nexport default defineMessages({\r\n  selectTextToggleLabel: {\r\n    id: 'dataGrid.selectTextToggleLabel',\r\n    defaultMessage: 'Select text',\r\n  },\r\n  selectTextToggleAriaDesc: {\r\n    id: 'dataGrid.selectTextToggleAriaDesc',\r\n    defaultMessage: 'Turn on the toggle to enable modal selection of grid',\r\n  },\r\n  ariaLabelForSelectAllCheckbox: {\r\n    id: 'dataGrid.ariaLabelForSelectAllCheckbox',\r\n    defaultMessage: 'Toggle selection for all items',\r\n  },\r\n  ariaLabelForSelectionColumn: {\r\n    id: 'dataGrid.ariaLabelForSelectionColumn',\r\n    defaultMessage: 'Toggle selection',\r\n  },\r\n  checkButtonAriaLabel: {\r\n    id: 'dataGrid.checkButtonAriaLabel',\r\n    defaultMessage: 'Row selection checkbox',\r\n  },\r\n  columnAriaLabel: {\r\n    id: 'dataGrid.columnAriaLabel',\r\n    defaultMessage: 'Click to open options for {columnName} column',\r\n  },\r\n  columnSortAscendingAriaLabel: {\r\n    id: 'dataGrid.columnSortAscendingAriaLabel',\r\n    defaultMessage: 'Grid sorted ascending using {columnName} column',\r\n  },\r\n  columnSortDescendingAriaLabel: {\r\n    id: 'dataGrid.columnSortDescendingAriaLabel',\r\n    defaultMessage: 'Grid sorted descending using {columnName} column',\r\n  },\r\n  numberOfItemsAfterFilterLabel: {\r\n    id: 'dataGrid.numberOfItemsAfterFilterLabel',\r\n    defaultMessage: 'Number of items after filter applied: {displayItems}',\r\n  },\r\n  commandBarNavigationHelpArialLabel: {\r\n    id: 'dataGrid.commandBarNavigationHelpArialLabel',\r\n    defaultMessage: 'Use left and right arrow keys to navigate between options',\r\n  },\r\n  columnResizeDialogTitle: {\r\n    id: 'dataGrid.columnResizeDialogTitle',\r\n    defaultMessage: 'Resize column',\r\n  },\r\n  columnWidthFieldLabel: {\r\n    id: 'dataGrid.columnWidthFieldLabel',\r\n    defaultMessage: 'Enter column width',\r\n  },\r\n  columnResizeDialogDescription: {\r\n    id: 'dataGrid.columnWidthFieldLabel',\r\n    defaultMessage: 'Enter desired column width in pixels',\r\n  },\r\n  resizeButtonLabel: {\r\n    id: 'dataGrid.resizeButtonLabel',\r\n    defaultMessage: 'Resize',\r\n  },\r\n  sortButtonLabel: {\r\n    id: 'dataGrid.sortButtonLabel',\r\n    defaultMessage: 'Sort',\r\n  },\r\n});\r\n","import {\r\n  Announced,\r\n  BaseComponent,\r\n  buildColumns,\r\n  classNamesFunction,\r\n  ColumnActionsMode,\r\n  CommandBar,\r\n  ConstrainMode,\r\n  ContextualMenu,\r\n  DefaultButton,\r\n  DetailsListLayoutMode,\r\n  Dialog,\r\n  DialogFooter,\r\n  DialogType,\r\n  IButtonProps,\r\n  IColumn,\r\n  ICommandBarProps,\r\n  IContextualMenuProps,\r\n  IDetailsHeaderProps,\r\n  IDetailsList,\r\n  IProcessedStyleSet,\r\n  IRenderFunction,\r\n  IScrollablePane,\r\n  ITextField,\r\n  ITooltipHostProps,\r\n  Label,\r\n  nullRender,\r\n  PrimaryButton,\r\n  ScrollablePane,\r\n  ScrollbarVisibility,\r\n  SearchBox,\r\n  Selection,\r\n  SelectionMode,\r\n  ShimmeredDetailsList,\r\n  Sticky,\r\n  StickyPositionType,\r\n  TextField,\r\n  TooltipHost,\r\n} from '@fluentui/react';\r\nimport * as React from 'react';\r\nimport { getAppStore, LifeCycleStatus, Model, onHelpInfoCalloutOpened, onHelpInfoChanged } from '../../@data';\r\nimport { FilterCondition } from '../../@data/store/schema/enums/FilterCondition';\r\nimport appMessages from '../../App.messages';\r\nimport { getSelectionMode, sortItemsBasedOnColumn } from '../../utils/DataGridUtils';\r\nimport { FormItem } from '../Form';\r\nimport { GridFilter } from '../GridFilter/GridFilter';\r\nimport { FilterType, IFilterDetails, IGridFilter } from '../GridFilter/GridFilter.types';\r\nimport { InfoToggle } from '../InfoToggle';\r\nimport messages from './DataGrid.messages';\r\nimport { IDataGrid, IDataGridProps, IDataGridStyleProps, IDataGridStyles } from './DataGrid.types';\r\n\r\nconst getClassNames = classNamesFunction<IDataGridStyleProps, IDataGridStyles>();\r\n\r\nexport enum DataGridSelectionMode {\r\n  None,\r\n  Single,\r\n  Multiple,\r\n  All,\r\n}\r\n\r\ninterface IDataGridState {\r\n  displayedItems: Model[];\r\n  lastSortedColumn?: IColumn;\r\n  selectedCommandBarProps: ICommandBarProps;\r\n  isModalSelection?: boolean;\r\n  announcedMessage?: string;\r\n  filterApplied?: boolean;\r\n  isResizeDialogOpen?: boolean;\r\n  columnHeaderMenuProps?: IContextualMenuProps;\r\n}\r\n\r\nexport class DataGridBase extends BaseComponent<IDataGridProps, IDataGridState> implements IDataGrid {\r\n  private _scrollablePane = React.createRef<IScrollablePane>();\r\n  private _selection: Selection;\r\n  private _classNames: IProcessedStyleSet<IDataGridStyles>;\r\n  private _gridFilter = React.createRef<IGridFilter>();\r\n  private _columnToEdit: IColumn | null;\r\n  private _columnWidthFieldRef = React.createRef<ITextField>();\r\n  private _detailsListRef = React.createRef<IDetailsList>();\r\n\r\n  constructor(props: IDataGridProps) {\r\n    super(props);\r\n    this._selection = new Selection({\r\n      onSelectionChanged: () => {\r\n        this.setState({\r\n          selectedCommandBarProps: this._buildCommandPropsOnSelection(),\r\n        });\r\n      },\r\n    });\r\n    let items = this.props.detailListProps.items;\r\n    this.state = {\r\n      selectedCommandBarProps: this._buildCommandPropsOnSelection(),\r\n      displayedItems: items,\r\n      isModalSelection: false,\r\n      announcedMessage: undefined,\r\n      filterApplied: false,\r\n      isResizeDialogOpen: false,\r\n    };\r\n\r\n    const columns = this._buildDataGridColumns();\r\n    if (columns.length >= 1) {\r\n      // Default to sorting by columns[0] ascending if no specific column is specified.\r\n      const selectedSortColumn = this.props.sortByColumn\r\n        ? columns.find((element) => this.props.sortByColumn !== undefined && element.key === this.props.sortByColumn.columnKeyToSortBy)\r\n        : undefined;\r\n      const lastSortedColumn = selectedSortColumn ? selectedSortColumn : columns[0];\r\n      lastSortedColumn.isSorted = true;\r\n\r\n      // Default is sort by ascending unless a valid column is selected and sort order is selected.\r\n      lastSortedColumn.isSortedDescending =\r\n        selectedSortColumn && this.props.sortByColumn && this.props.sortByColumn.isSortedDescending !== undefined\r\n          ? this.props.sortByColumn.isSortedDescending\r\n          : false;\r\n\r\n      // Modify data to be suitable for UI display using displayFunction sent for some columns\r\n      items = this.modifyDataUsingDisplayFunction(items);\r\n\r\n      this.state = {\r\n        selectedCommandBarProps: this._buildCommandPropsOnSelection(),\r\n        lastSortedColumn: lastSortedColumn,\r\n        displayedItems: sortItemsBasedOnColumn(items, lastSortedColumn),\r\n      };\r\n    }\r\n  }\r\n\r\n  public componentDidUpdate(prevProps: IDataGridProps, prevState: IDataGridState) {\r\n    if (this.props.detailListProps.items === prevProps.detailListProps.items) {\r\n      return;\r\n    }\r\n\r\n    // Data has been changed, modifying and sorting data before re-rendering the data grid.\r\n    let items = this.props.detailListProps.items;\r\n    items = this.modifyDataUsingDisplayFunction(items);\r\n\r\n    this.setState({\r\n      displayedItems: sortItemsBasedOnColumn(items, prevState.lastSortedColumn),\r\n    });\r\n\r\n    // reset grid filter when grid data changes\r\n    if (this._gridFilter.current) {\r\n      this._gridFilter.current.resetGridFilter();\r\n    }\r\n\r\n    // add 'aria-busy' to detail list component to enhance accessibility capacity\r\n    if (this._detailsListRef.current) {\r\n      const detailListWrapper = document.querySelector('div[role=\"row\"].ms-DetailsHeader[data-automationid=\"DetailsHeader\"]');\r\n      if (detailListWrapper && !detailListWrapper.hasAttribute?.('aria-busy')) {\r\n        detailListWrapper.setAttribute('aria-busy', 'true');\r\n      }\r\n    }\r\n  }\r\n\r\n  public getSelection(): Selection {\r\n    return this._selection;\r\n  }\r\n\r\n  public getDisplayedItems(): Model[] {\r\n    return this.state.displayedItems;\r\n  }\r\n\r\n  public render(): JSX.Element {\r\n    const { detailListProps, styles, theme, filterProps, dataIsLoading, helpInfo, dataGridfilterProps, searchResultsVisible } = this.props;\r\n    const { displayedItems, lastSortedColumn, isModalSelection, announcedMessage, filterApplied } = this.state;\r\n    const columns = this._buildDataGridColumns(lastSortedColumn, detailListProps.items);\r\n    const commandBarProps = this._buildCommandPropsOnSelection();\r\n    const displayedItemCount = displayedItems.length;\r\n    this._classNames = getClassNames(styles, { theme: theme! });\r\n    const { formatMessage } = this.props.intl;\r\n    const { locale } = getAppStore();\r\n\r\n    let filterField = nullRender();\r\n    if (filterProps) {\r\n      const {\r\n        searchBoxPlaceholder,\r\n        searchBoxVisible,\r\n        onItemDisplayedLabel,\r\n        onChange,\r\n        searchBoxValue,\r\n        searchBoxAriaLabel,\r\n        onChangeText,\r\n      } = filterProps;\r\n      filterField = (\r\n        <div className={this._classNames.filter}>\r\n          {searchBoxVisible && (\r\n            <FormItem>\r\n              <SearchBox\r\n                className={this._classNames.filterItem}\r\n                onSearch={(newValue) => onChange(newValue)}\r\n                onClear={() => onChange('')}\r\n                onChange={(event, newValue) => onChangeText(event, newValue)}\r\n                placeholder={searchBoxPlaceholder}\r\n                value={searchBoxValue}\r\n                ariaLabel={searchBoxAriaLabel}\r\n              />\r\n            </FormItem>\r\n          )}\r\n          <Label className={this._classNames.filterItem}> {onItemDisplayedLabel(displayedItemCount)} </Label>\r\n        </div>\r\n      );\r\n    }\r\n\r\n    return (\r\n      <div className={this._classNames.root}>\r\n        {filterField}\r\n        <CommandBar\r\n          {...commandBarProps}\r\n          styles={this._classNames.subComponentStyles.commandBar}\r\n          ariaLabel={formatMessage(messages.commandBarNavigationHelpArialLabel)}\r\n        />\r\n        {searchResultsVisible ? (\r\n          <Label className={this._classNames.searchResults}> {'Search Results: ' + displayedItemCount} </Label>\r\n        ) : null}\r\n        {dataGridfilterProps ? (\r\n          <GridFilter\r\n            intl={this.props.intl}\r\n            componentRef={this._gridFilter}\r\n            {...dataGridfilterProps}\r\n            onFilterApplied={this._onFilterApplied}\r\n          />\r\n        ) : null}\r\n        <InfoToggle\r\n          label={formatMessage(messages.selectTextToggleLabel)}\r\n          intl={this.props.intl}\r\n          checked={isModalSelection}\r\n          onChange={this._onChangeModalSelection}\r\n          calloutContent={helpInfo}\r\n          iconButtonOnClick={() => onHelpInfoCalloutOpened('pop_PCv4_SelectMode', locale)}\r\n          calloutOnDismiss={() => onHelpInfoChanged()}\r\n          ariaDescription={formatMessage(messages.selectTextToggleAriaDesc)}\r\n        />\r\n        <ScrollablePane\r\n          componentRef={this._scrollablePane}\r\n          scrollbarVisibility={ScrollbarVisibility.auto}\r\n          styles={this._classNames.subComponentStyles.scrollablePane}\r\n        >\r\n          {filterApplied ? (\r\n            <Announced\r\n              message={this.props.intl.formatMessage(messages.numberOfItemsAfterFilterLabel, { displayItems: displayedItemCount })}\r\n            />\r\n          ) : undefined}\r\n          {announcedMessage ? <Announced message={announcedMessage} /> : undefined}\r\n          <ShimmeredDetailsList\r\n            {...detailListProps}\r\n            componentRef={this._detailsListRef}\r\n            items={!this.props.notReadyProps ? displayedItems : []}\r\n            columns={columns}\r\n            onColumnHeaderClick={this._onColumnHeaderClick}\r\n            layoutMode={DetailsListLayoutMode.justified}\r\n            constrainMode={ConstrainMode.unconstrained}\r\n            onRenderDetailsHeader={this._onRenderDetailsHeader}\r\n            selection={this._selection}\r\n            selectionMode={isModalSelection ? SelectionMode.none : undefined}\r\n            selectionPreservedOnEmptyClick={true}\r\n            enableShimmer={dataIsLoading}\r\n            ariaLabelForSelectAllCheckbox={formatMessage(messages.ariaLabelForSelectAllCheckbox)}\r\n            ariaLabelForSelectionColumn={formatMessage(messages.ariaLabelForSelectionColumn)}\r\n            ariaLabelForGrid={this.props.ariaLabel}\r\n            checkButtonAriaLabel={formatMessage(messages.checkButtonAriaLabel)}\r\n            aria-busy=\"true\"\r\n          />\r\n          {this.state.columnHeaderMenuProps && <ContextualMenu {...this.state.columnHeaderMenuProps} />}\r\n          <Dialog\r\n            hidden={!this.state.isResizeDialogOpen}\r\n            onDismiss={this._hideResizeDialog}\r\n            dialogContentProps={this._getResizeDialogContentProps()}\r\n          >\r\n            <TextField\r\n              type=\"number\"\r\n              componentRef={this._columnWidthFieldRef}\r\n              ariaLabel={formatMessage(messages.columnWidthFieldLabel)}\r\n              onKeyDown={(ev) => {\r\n                if (ev.key === 'Enter') {\r\n                  this._resizeColumn();\r\n                }\r\n              }}\r\n            />\r\n            <DialogFooter>\r\n              <PrimaryButton onClick={this._resizeColumn} text={formatMessage(messages.resizeButtonLabel)} />\r\n              <DefaultButton onClick={this._hideResizeDialog} text={formatMessage(appMessages.cancel)} />\r\n            </DialogFooter>\r\n          </Dialog>\r\n        </ScrollablePane>\r\n      </div>\r\n    );\r\n  }\r\n\r\n  private _hideResizeDialog = () => this.setState({ isResizeDialogOpen: false });\r\n  private _showResizeDialog = () => this.setState({ isResizeDialogOpen: true });\r\n\r\n  private _handleResizeButtonClick = (ev: React.MouseEvent<HTMLElement>, column: IColumn) => {\r\n    ev.stopPropagation();\r\n\r\n    this._columnToEdit = column;\r\n    this._showResizeDialog();\r\n  };\r\n\r\n  private _onColumnHeaderClick = (ev: React.MouseEvent<HTMLElement>, column: IColumn): void => {\r\n    this.setState({ columnHeaderMenuProps: this._getContextualMenuProps(ev, column) });\r\n  };\r\n\r\n  private _getContextualMenuProps = (ev: React.MouseEvent<HTMLElement>, column: IColumn): IContextualMenuProps => {\r\n    const { formatMessage } = this.props.intl;\r\n    const items = [\r\n      { key: 'resize', text: formatMessage(messages.resizeButtonLabel), onClick: () => this._handleResizeButtonClick(ev, column) },\r\n      { key: 'sort', text: formatMessage(messages.sortButtonLabel), onClick: () => this._handleSortButtonClick(ev, column) },\r\n    ];\r\n\r\n    return {\r\n      items: items,\r\n      target: ev.currentTarget as HTMLElement,\r\n      gapSpace: 10,\r\n      isBeakVisible: true,\r\n      onDismiss: () => this.setState({ columnHeaderMenuProps: undefined }),\r\n    };\r\n  };\r\n\r\n  private _getResizeDialogContentProps = () => {\r\n    const { formatMessage } = this.props.intl;\r\n    const { columnResizeDialogTitle, columnResizeDialogDescription } = messages;\r\n\r\n    return {\r\n      type: DialogType.normal,\r\n      title: formatMessage(columnResizeDialogTitle),\r\n      closeButtonAriaLabel: formatMessage(appMessages.close),\r\n      subText: formatMessage(columnResizeDialogDescription),\r\n    };\r\n  };\r\n\r\n  private _resizeColumn = () => {\r\n    const column = this._columnToEdit;\r\n    if (!column) {\r\n      return;\r\n    }\r\n\r\n    this._detailsListRef.current?.updateColumn(column, { width: Number(this._columnWidthFieldRef.current?.value) });\r\n    this._hideResizeDialog();\r\n    this._columnToEdit = null;\r\n  };\r\n\r\n  private modifyDataUsingDisplayFunction = (items: Model[]) => {\r\n    const { columns } = this.props.detailListProps;\r\n\r\n    if (columns && columns.length >= 1) {\r\n      columns\r\n        .filter((col) => col.displayFunction !== undefined)\r\n        .forEach((col) => {\r\n          items.forEach((item) => {\r\n            item[col.columnName] = col.displayFunction ? col.displayFunction(item[col.columnName], item) : item[col.columnName];\r\n          });\r\n        });\r\n    }\r\n\r\n    return items;\r\n  };\r\n\r\n  private _onFilterApplied = (filterList: IFilterDetails[]): void => {\r\n    // displayed items might already be filtered, hence to modify filters considering original items\r\n    const { items } = this.props.detailListProps;\r\n    let filteredItems = sortItemsBasedOnColumn(items, this.state.lastSortedColumn);\r\n\r\n    filterList.forEach((filterCol) => {\r\n      if (filterCol.customFunction) {\r\n        filteredItems = filteredItems.filter((dataRow: Model) =>\r\n          filterCol.customFunction ? filterCol.customFunction(dataRow, filterCol) : false\r\n        );\r\n      } else {\r\n        filteredItems = this._applyFilter(filteredItems, filterCol);\r\n      }\r\n    });\r\n    this.setState({\r\n      displayedItems: filteredItems,\r\n      filterApplied: true,\r\n    });\r\n  };\r\n\r\n  private _applyFilter = (items: Model[], filterColumn: IFilterDetails): Model[] => {\r\n    if (filterColumn.columnName !== undefined) {\r\n      const filteredItems = items.filter((item: object) => {\r\n        const val = item[filterColumn.columnName || ''];\r\n\r\n        switch (filterColumn.filterType) {\r\n          case FilterType.custom:\r\n            return filterColumn.filterCondition ? val === filterColumn.filterCondition : true;\r\n\r\n          case FilterType.date: {\r\n            const dateVal = new Date(val);\r\n            const { startDate, endDate } = filterColumn;\r\n\r\n            if (startDate || endDate) {\r\n              if (startDate && endDate) {\r\n                return dateVal >= startDate && dateVal <= endDate;\r\n              }\r\n              if (endDate) {\r\n                return dateVal <= endDate;\r\n              }\r\n              if (startDate) {\r\n                return dateVal >= startDate;\r\n              }\r\n            }\r\n            return true;\r\n          }\r\n\r\n          case FilterType.relational: {\r\n            const numVal = Number(val);\r\n\r\n            if (filterColumn.filterText) {\r\n              const filterNumVal = Number(filterColumn.filterText);\r\n              switch (filterColumn.filterCondition) {\r\n                case FilterCondition.Equals:\r\n                  return numVal === filterNumVal;\r\n                case FilterCondition.DoesNotEqual:\r\n                  return numVal !== filterNumVal;\r\n                case FilterCondition.GreaterThan:\r\n                  return numVal > filterNumVal;\r\n                case FilterCondition.GreaterThanEqual:\r\n                  return numVal >= filterNumVal;\r\n                case FilterCondition.LessThan:\r\n                  return numVal < filterNumVal;\r\n                case FilterCondition.LessThanEqual:\r\n                  return numVal <= filterNumVal;\r\n              }\r\n            }\r\n            return true;\r\n          }\r\n\r\n          case FilterType.string: {\r\n            const filterVal = filterColumn.filterText!.toLocaleLowerCase();\r\n            const strVal = String(val).toLocaleLowerCase();\r\n            switch (filterColumn.filterCondition) {\r\n              case FilterCondition.Contains:\r\n                return strVal.indexOf(filterVal) !== -1;\r\n              case FilterCondition.DoesNotContain:\r\n                return strVal.indexOf(filterVal) === -1;\r\n              case FilterCondition.BeginsWith:\r\n                return strVal.indexOf(filterVal) === 0;\r\n              case FilterCondition.EndsWith: {\r\n                const lastIndex = strVal.lastIndexOf(filterVal);\r\n                return lastIndex === strVal.length - filterVal.length;\r\n              }\r\n              case FilterCondition.Equals:\r\n                return strVal === filterVal;\r\n              case FilterCondition.DoesNotEqual:\r\n                return strVal !== filterVal;\r\n            }\r\n          }\r\n        }\r\n        return val.toLocaleLowerCase().indexOf(filterColumn.filterText!.toLocaleLowerCase()) !== -1;\r\n      });\r\n\r\n      return filteredItems;\r\n    }\r\n    // in case column name is not passed, filter cannot be applied.\r\n    return items;\r\n  };\r\n\r\n  private _onChangeModalSelection = (ev: React.MouseEvent<HTMLElement>, checked: boolean): void => {\r\n    this.setState({ isModalSelection: checked });\r\n  };\r\n\r\n  // TODO: once we have all the ManagePages pass the column mapping, then we can remove this default buildcolumn behavior from the list\r\n  private _buildDataGridColumns(lastSortedColumn?: IColumn, list?: Model[]): IColumn[] {\r\n    const { formatMessage } = this.props.intl;\r\n    const columnModel = this.props.detailListProps.columns;\r\n\r\n    if (!columnModel && list) {\r\n      return buildColumns(list, true).map((c) => {\r\n        c.isCollapsible = false;\r\n        return c;\r\n      });\r\n    }\r\n    const newColumns: IColumn[] = [];\r\n    if (columnModel) {\r\n      // traversing over the columnModel will ensure order and columns for which we dont have value in items\r\n      columnModel.forEach((column) => {\r\n        if (column.isVisible) {\r\n          let isSorted = false;\r\n          if (lastSortedColumn && lastSortedColumn.key === column.columnName) {\r\n            isSorted = true;\r\n          }\r\n          const newColumn: IColumn = {\r\n            key: column.columnName,\r\n            name: column.friendlyName,\r\n            fieldName: column.columnName,\r\n            isCollapsible: false,\r\n            minWidth: 100,\r\n            maxWidth: 300,\r\n            isResizable: true,\r\n            isPadded: true,\r\n            isSorted: isSorted,\r\n            isMultiline: true,\r\n            columnActionsMode: ColumnActionsMode.hasDropdown,\r\n            isSortedDescending: isSorted ? lastSortedColumn!.isSortedDescending : undefined,\r\n            ariaLabel: formatMessage(messages.columnAriaLabel, { columnName: column.friendlyName }),\r\n            sortAscendingAriaLabel: formatMessage(messages.columnSortAscendingAriaLabel, { columnName: column.friendlyName }),\r\n            sortDescendingAriaLabel: formatMessage(messages.columnSortDescendingAriaLabel, { columnName: column.friendlyName }),\r\n          };\r\n          newColumns.push(newColumn);\r\n        }\r\n      });\r\n    }\r\n    return newColumns;\r\n  }\r\n\r\n  private _buildCommandPropsOnSelection(): ICommandBarProps {\r\n    const overflowButtonProps: IButtonProps = { ariaLabel: this.props.intl.formatMessage(appMessages.moreOptionsButtonAriaLabel) };\r\n    const commandBarProps: ICommandBarProps = { items: [], overflowButtonProps };\r\n\r\n    if (this.props.commandBarProps) {\r\n      const mode = getSelectionMode(this._selection.count);\r\n      const hasSelection = (item) => !item.selectionModes || item.selectionModes.includes(mode);\r\n      const hasStatusSelection = (item) => !item.selectionStatus || this._hasStatusinSelection(item.selectionStatus);\r\n      commandBarProps.items = this.props.commandBarProps.items.filter((item) => hasSelection(item) && hasStatusSelection(item));\r\n      if (this.props.commandBarProps.farItems) {\r\n        commandBarProps.farItems = this.props.commandBarProps.farItems.filter((item) => hasSelection(item) && hasStatusSelection(item));\r\n      }\r\n    }\r\n\r\n    return commandBarProps;\r\n  }\r\n\r\n  private _hasStatusinSelection(status: LifeCycleStatus): boolean {\r\n    const selectedIndices = this._selection.getSelectedIndices();\r\n    const items = this._selection.getItems() as Model[];\r\n    return selectedIndices.some((selectedIndex) => status === items[selectedIndex].status);\r\n  }\r\n\r\n  private _handleSortButtonClick = (ev?: React.MouseEvent<HTMLElement>, column?: IColumn): void => {\r\n    if (!ev || !column) {\r\n      return;\r\n    }\r\n    let isSortedDescending = column.isSortedDescending;\r\n    if (column.isSorted) {\r\n      isSortedDescending = !isSortedDescending;\r\n    }\r\n    column.isSortedDescending = isSortedDescending;\r\n\r\n    const { displayedItems } = this.state;\r\n\r\n    this.setState({\r\n      lastSortedColumn: column,\r\n      displayedItems: sortItemsBasedOnColumn(displayedItems, column),\r\n      announcedMessage: column.isSortedDescending\r\n        ? this.props.intl.formatMessage(messages.columnSortDescendingAriaLabel, { columnName: column.name })\r\n        : this.props.intl.formatMessage(messages.columnSortAscendingAriaLabel, { columnName: column.name }),\r\n    });\r\n  };\r\n\r\n  private _onRenderDetailsHeader = (\r\n    props?: IDetailsHeaderProps,\r\n    defaultRender?: IRenderFunction<IDetailsHeaderProps>\r\n  ): JSX.Element | null => {\r\n    let notReadyPropsRenderer: JSX.Element | undefined;\r\n\r\n    if (this.props.notReadyProps !== undefined) {\r\n      notReadyPropsRenderer = (\r\n        <React.Fragment>\r\n          <div className={this._classNames.notReadyLabel}>{this.props.notReadyProps.notReadyLabel}</div>\r\n        </React.Fragment>\r\n      );\r\n    }\r\n    if (!props || !defaultRender) {\r\n      return nullRender();\r\n    }\r\n\r\n    return (\r\n      <Sticky stickyPosition={StickyPositionType.Header} isScrollSynced={true}>\r\n        {defaultRender({\r\n          ...props,\r\n          onRenderColumnHeaderTooltip: (tooltipHostProps?: ITooltipHostProps) => <TooltipHost {...tooltipHostProps} />,\r\n        })}\r\n        {notReadyPropsRenderer}\r\n      </Sticky>\r\n    );\r\n  };\r\n}\r\n","import { DataGridSelectionMode } from '../../components/DataGrid';\r\n\r\nexport function getSelectionMode(selectionCount: Number): DataGridSelectionMode {\r\n  switch (selectionCount) {\r\n    case 0:\r\n      return DataGridSelectionMode.None;\r\n    case 1:\r\n      return DataGridSelectionMode.Single;\r\n    default:\r\n      return DataGridSelectionMode.Multiple;\r\n  }\r\n}\r\n","import { IPubcenterSpacing } from '../../../theme';\r\nimport { IDataGridStyleProps, IDataGridStyles } from './DataGrid.types';\r\n\r\nexport const getStyles = (props: IDataGridStyleProps): IDataGridStyles => {\r\n  const { theme } = props;\r\n  const spacing = theme.spacing as IPubcenterSpacing;\r\n  return {\r\n    root: {\r\n      display: 'flex',\r\n      flexDirection: 'column',\r\n      height: 'inherit',\r\n      flex: 1,\r\n      position: 'relative',\r\n    },\r\n    filter: {\r\n      display: 'flex',\r\n      flexDirection: 'row',\r\n      marginBottom: spacing.size8,\r\n    },\r\n    filterItem: {\r\n      marginLeft: spacing.size8,\r\n    },\r\n    searchResults: {\r\n      position: 'absolute',\r\n      top: spacing.size10,\r\n      right: spacing.size36,\r\n    },\r\n    subComponentStyles: {\r\n      scrollablePane: {\r\n        root: {\r\n          flex: 1,\r\n          overflowY: 'auto',\r\n          position: 'relative',\r\n        },\r\n      },\r\n      commandBar: {\r\n        root: {\r\n          marginBottom: spacing.size8,\r\n        },\r\n      },\r\n    },\r\n    notReadyLabel: {\r\n      color: theme.palette.neutralSecondary,\r\n      marginLeft: spacing.size48,\r\n      position: 'relative',\r\n      marginTop: spacing.size12,\r\n      fontSize: theme.fonts.medium.fontSize,\r\n    },\r\n  };\r\n};\r\n","import { styled } from '@fluentui/react';\r\nimport { DataGridBase } from './DataGrid.base';\r\nimport { getStyles } from './DataGrid.styles';\r\nimport { IDataGridProps, IDataGridStyleProps, IDataGridStyles } from './DataGrid.types';\r\n\r\n// Use Fabric Base guidelines since this might be contributed back to Fabric.\r\nexport const DataGrid = styled<IDataGridProps, IDataGridStyleProps, IDataGridStyles>(DataGridBase, getStyles, undefined, {\r\n  scope: 'DataGrid',\r\n});\r\n","import { defineMessages } from 'react-intl';\r\n\r\nexport default defineMessages({\r\n  clarityRequestSuccess: {\r\n    id: 'siteManagement.clarityRequestSuccess',\r\n    defaultMessage: \"You've successfully sent a request to relink your Clarity project ID.\",\r\n  },\r\n  propertyCreateSuccess: {\r\n    id: 'siteManagement.propertyCreateSuccess',\r\n    defaultMessage: \"You've successfully created a new property {entityId}.\",\r\n  },\r\n  propertyCreateFailed: {\r\n    id: 'siteManagement.propertyCreateFailed',\r\n    defaultMessage: 'Create properties failed, please try again later.',\r\n  },\r\n  propertyEditSuccess: {\r\n    id: 'siteManagement.propertyEditSuccess',\r\n    defaultMessage: \"You've successfully edited your property {entityId}.\",\r\n  },\r\n  invalidForm: {\r\n    id: 'siteManagement.invalidForm',\r\n    defaultMessage: 'Property form \"{formOperation}\" is invalid id {entityId}',\r\n  },\r\n  invalidState: {\r\n    id: 'siteManagement.invalidState',\r\n    defaultMessage: 'You have arrived in an invalid state, please report.',\r\n  },\r\n  clarityRelinkSuccess: {\r\n    id: 'siteManagement.clarityRelinkSuccess',\r\n    defaultMessage: \"You've successfully sent a request to relink your Clarity project ID.\",\r\n  },\r\n  clarityRelinkFailed: {\r\n    id: 'siteManagement.clarityRelinkFailed',\r\n    defaultMessage: \"Your request to relink your Clarity project {projectId} wasn't successful. Please try again later.\",\r\n  },\r\n  clarityLinkSuccess: {\r\n    id: 'siteManagement.clarityLinkSuccess',\r\n    defaultMessage: \"You've successfully sent a request to link your Clarity project.\",\r\n  },\r\n  clarityUnlinkSuccess: {\r\n    id: 'siteManagement.clarityUnlinkSuccess',\r\n    defaultMessage: \"You've successfully unlinked your Clarity project.\",\r\n  },\r\n  clarityLinkFailed: {\r\n    id: 'siteManagement.clarityLinkFailed',\r\n    defaultMessage: \"We're unable to link your Clarity project {projectId}.\",\r\n  },\r\n  propertyLoadError: {\r\n    id: 'siteManagement.propertyLoadError',\r\n    defaultMessage: \"We're unable to load your entity. Please try again later.\",\r\n  },\r\n  propertyFormError: {\r\n    id: 'siteManagement.propertyFormError',\r\n    defaultMessage: 'There are {errorsCount} errors in the form. Please revise and resubmit to continue.',\r\n  },\r\n  adUnitsFetchFailed: {\r\n    id: 'siteManagement.adUnitsFetchFailed',\r\n    defaultMessage: \"We're unable to load your ad units.\",\r\n  },\r\n  sitesFetchFailed: {\r\n    id: 'siteManagement.sitesFetchFailed',\r\n    defaultMessage: \"We're unable to load your sites.\",\r\n  },\r\n  propertiesFetchFailed: {\r\n    id: 'siteManagement.sitesFetchFailed',\r\n    defaultMessage: \"We're unable to load your properties.\",\r\n  },\r\n  failedToLoadSites: {\r\n    id: 'siteManagement.failedToLoadSites',\r\n    defaultMessage: 'Failed to load sites',\r\n  },\r\n});\r\n","import { Account } from './Account';\r\nimport { Model } from './Model';\r\nimport { PublisherCreate } from './PublisherCreate';\r\nimport { User } from './User';\r\n\r\nexport class PublisherAccountUserCreate implements Model {\r\n  public apiPath = 'signup';\r\n  public className = 'signup';\r\n  public publisher?: PublisherCreate;\r\n  public account?: Account;\r\n  public user?: User;\r\n}\r\n","import { uiConfig } from '../../config/ui.config';\r\nimport { onLoadingSetting, onLoadingWaiting } from '../actions';\r\nimport {\r\n  Account,\r\n  AccountSKU,\r\n  FilterDownloader,\r\n  IRequest,\r\n  IResponse,\r\n  Model,\r\n  NativeAdTemplate,\r\n  NotificationPreferencesUpdate,\r\n  PhoneVerificationGenerateCode,\r\n  PhoneVerificationVerifyCode,\r\n  Publisher,\r\n  UpdateUserContactDetails,\r\n  User,\r\n  UserContext,\r\n  UserInvitation,\r\n  UserRoleUpdate,\r\n  UserUpdateLanguage,\r\n} from '../store/schema';\r\nimport {\r\n  AdSenseAdUnitStatus,\r\n  AdSenseConnectAdUnit,\r\n  AdSenseDisconnectAdUnit,\r\n  AdSenseUpdateAdUnitStatus,\r\n} from '../store/schema/models/AdSenseAdUnitStatus';\r\nimport {\r\n  AdSenseMediation,\r\n  AdSenseMediationChooseGamNetwork,\r\n  AdSenseMediationHealthCheck,\r\n  AdSenseMediationOptIn,\r\n  AdSenseMediationOptOut,\r\n  AdSenseMediationToggle,\r\n} from '../store/schema/models/AdSenseMediation';\r\nimport { AddressValidation } from '../store/schema/models/AddressValidation';\r\nimport { Feedback } from '../store/schema/models/Feedback';\r\nimport { PublisherAccountUserCreate } from '../store/schema/models/PublisherAccountUserCreate';\r\nimport { ServingConfig } from '../store/schema/models/ServingConfigs';\r\nimport { UpdateClarityProject } from '../store/schema/models/UpdateClarityProject';\r\nimport { UserCreateFromInvitation } from '../store/schema/models/UserCreateFromInvitation';\r\nimport { handleApiErrors, handleError } from '../utils/handleApiErrors';\r\nimport { buildRequestHeadersWithAuthToken } from '../utils/requestUtils';\r\n\r\nexport class ApiError extends Error {\r\n  public trackingId?: string;\r\n\r\n  constructor(public code: number, message: string, trackingId?: string) {\r\n    super(message);\r\n    this.trackingId = trackingId;\r\n  }\r\n}\r\n\r\nexport async function getEntity<T extends Model>(\r\n  models: Model[],\r\n  userContext?: UserContext,\r\n  entity?: new () => T,\r\n  params?: URLSearchParams,\r\n  apiVersion?: string\r\n): Promise<T> {\r\n  const url = constructUrl(models, entity, params, apiVersion);\r\n  onLoadingSetting(false);\r\n  return await wrapSendRequest<T>(url, 'GET', userContext);\r\n}\r\n\r\nexport async function listEntity<T extends Model>(\r\n  models: Model[],\r\n  userContext?: UserContext,\r\n  entity?: new () => T,\r\n  params?: URLSearchParams,\r\n  apiVersion?: string\r\n): Promise<T[]> {\r\n  const url = constructUrl(models, entity, params, apiVersion);\r\n  onLoadingSetting(false);\r\n  const response = await wrapSendRequest<T[]>(url, 'GET', userContext);\r\n  return response;\r\n}\r\n\r\nconst SINGULAR_RESOURCE_ENTITIES_FOR_POST = [\r\n  new AccountSKU().className,\r\n  new UserInvitation().className,\r\n  new Publisher().className,\r\n  new Account().className,\r\n  new NativeAdTemplate().className,\r\n  new ServingConfig().className,\r\n  new User().className,\r\n  new UserCreateFromInvitation().className,\r\n  new PublisherAccountUserCreate().className,\r\n  new AdSenseMediationOptIn().className,\r\n  new Feedback().className,\r\n  new AddressValidation().className,\r\n  new PhoneVerificationGenerateCode().className,\r\n  new PhoneVerificationVerifyCode().className,\r\n];\r\n\r\nexport async function postEntity<T extends Model>(\r\n  models: Model[],\r\n  entity: new () => T,\r\n  body?: T,\r\n  userContext?: UserContext,\r\n  params?: URLSearchParams,\r\n  apiVersion?: string\r\n): Promise<T> {\r\n  const url = constructUrl(models, entity, params, apiVersion);\r\n  if (body && SINGULAR_RESOURCE_ENTITIES_FOR_POST.includes(body.className)) {\r\n    onLoadingSetting(false);\r\n    try {\r\n      const response = await wrapSendRequest<T>(url, 'POST', userContext, body);\r\n      return response ? response : Promise.reject('Invalid response for POST');\r\n    } catch (err) {\r\n      if (err.code === 400 || err.code === 403) {\r\n        return handleError(new ApiError(err.code, err.message), url);\r\n      }\r\n      const error = `POST operation failed for ${url}. Errors: ${err}`;\r\n      return handleError(new ApiError(500, error), url);\r\n    }\r\n  } else {\r\n    onLoadingSetting(false);\r\n    try {\r\n      const response = await wrapSendRequest<T[]>(url, 'POST', userContext, body);\r\n      return response && response.length === 1 ? response[0] : Promise.reject('Invalid response for POST');\r\n    } catch (err) {\r\n      const error = `POST operation failed for ${url}. Errors: ${err}`;\r\n      if (err.code === 404) {\r\n        return handleError(new ApiError(404, error), url);\r\n      }\r\n      return handleError(new ApiError(500, error), url);\r\n    }\r\n  }\r\n}\r\n\r\nconst SINGULAR_RESOURCE_ENTITIES_FOR_PUT = [\r\n  new AccountSKU().className,\r\n  new UserInvitation().className,\r\n  new Publisher().className,\r\n  new Account().className,\r\n  new NativeAdTemplate().className,\r\n  new ServingConfig().className,\r\n  new User().className,\r\n  new AdSenseMediationToggle().className,\r\n];\r\n\r\nexport async function putEntity<T extends Model>(\r\n  models: Model[],\r\n  body: T,\r\n  userContext?: UserContext,\r\n  entity?: new () => T,\r\n  params?: URLSearchParams,\r\n  apiVersion?: string\r\n): Promise<T> {\r\n  let url = constructUrl(models, entity, params, apiVersion);\r\n  if (body.className === new NativeAdTemplate().className) {\r\n    url = url + '/' + encodeURIComponent(body.id);\r\n  }\r\n\r\n  if (SINGULAR_RESOURCE_ENTITIES_FOR_PUT.includes(body.className)) {\r\n    const response = await sendRequest<T>(url, 'PUT', userContext, body);\r\n    return response ? (response as T) : Promise.reject('Invalid response for PUT');\r\n  } else {\r\n    const response = await sendRequest<T[]>(url, 'PUT', userContext, body);\r\n    if (body.className === new AdSenseAdUnitStatus().className) {\r\n      if (!response['data'] && Array.isArray(response)) {\r\n        // tslint:disable-next-line: no-any\r\n        return response as any;\r\n      }\r\n      return response['data'];\r\n    }\r\n\r\n    return response && response.length === 1 ? response[0] : Promise.reject('Invalid response for PUT');\r\n  }\r\n}\r\n\r\nexport async function patchEntity<T extends Model>(\r\n  models: Model[],\r\n  entity: new () => T,\r\n  body?: T,\r\n  userContext?: UserContext,\r\n  params?: URLSearchParams,\r\n  apiVersion?: string\r\n): Promise<T> {\r\n  const url = constructUrl(models, entity, params, apiVersion);\r\n  const response = await sendRequest<T[]>(url, 'PATCH', userContext, body);\r\n  if (body && body.className === new UserRoleUpdate().className) {\r\n    // tslint:disable-next-line: no-any\r\n    return response as any;\r\n  } else if (body && body.className === new UserUpdateLanguage().className) {\r\n    return response['data'];\r\n  }\r\n  return response && response.length === 1 ? response[0] : (([] as unknown) as T);\r\n}\r\n\r\nexport async function deleteEntity<T extends Model>(\r\n  models: Model[],\r\n  entity?: new () => T,\r\n  userContext?: UserContext,\r\n  params?: URLSearchParams,\r\n  apiVersion?: string,\r\n  body?: T\r\n): Promise<T | T[]> {\r\n  const url = constructUrl(models, entity, params, apiVersion);\r\n  if (body && body.className === new AdSenseDisconnectAdUnit().className) {\r\n    return await wrapSendRequest<T[]>(url, 'DELETE', userContext, body);\r\n  } else {\r\n    return await sendRequest<T>(url, 'DELETE', userContext, body);\r\n  }\r\n}\r\n\r\nfunction wrapRequestBody<T extends Model>(body?: T) {\r\n  if (!body) {\r\n    return null;\r\n  }\r\n\r\n  const bodyWrapper: IRequest<T> = {};\r\n\r\n  if (\r\n    body.className === new AccountSKU().className ||\r\n    body.className === new NativeAdTemplate().className ||\r\n    body.className === new ServingConfig().className ||\r\n    body.className === new Feedback().className ||\r\n    body.className === new AddressValidation().className ||\r\n    body.className === new PhoneVerificationGenerateCode().className ||\r\n    body.className === new PhoneVerificationVerifyCode().className ||\r\n    body.className === new AddressValidation().className\r\n  ) {\r\n    bodyWrapper[body.className] = body;\r\n  } else {\r\n    bodyWrapper[body.className] = [body];\r\n  }\r\n\r\n  return JSON.stringify(bodyWrapper);\r\n}\r\n\r\n// tslint:disable-next-line: max-line-length\r\nasync function wrapSendRequest<T extends Model | Model[]>(\r\n  url: string,\r\n  method: string,\r\n  userContext?: UserContext,\r\n  body?: Model\r\n): Promise<T> {\r\n  const timeout = 30000;\r\n  const id = setTimeout(() => onLoadingWaiting(true), timeout);\r\n\r\n  const response = await sendRequest(url, method, userContext, body);\r\n  clearTimeout(id);\r\n  return response as T;\r\n}\r\n\r\nconst SINGULAR_RESOURCE_ENTITIES = [\r\n  new Publisher().className,\r\n  new Account().className,\r\n  new UserInvitation().className,\r\n  new UserCreateFromInvitation().className,\r\n  new UserRoleUpdate().className,\r\n  new User().className,\r\n  new UpdateUserContactDetails().className,\r\n  new UpdateClarityProject().className,\r\n  new PublisherAccountUserCreate().className,\r\n  new AdSenseAdUnitStatus().className,\r\n  new AdSenseConnectAdUnit().className,\r\n  new AdSenseDisconnectAdUnit().className,\r\n  new AdSenseMediationToggle().className,\r\n  new NotificationPreferencesUpdate().className,\r\n  new UserUpdateLanguage().className,\r\n  new PhoneVerificationGenerateCode().className,\r\n  new PhoneVerificationVerifyCode().className,\r\n];\r\n\r\nasync function sendRequest<T extends Model | Model[]>(url: string, method: string, userContext?: UserContext, body?: Model): Promise<T> {\r\n  const headers = await buildRequestHeadersWithAuthToken(url, userContext);\r\n\r\n  let response: Response;\r\n\r\n  try {\r\n    response = await fetch(url, {\r\n      method: method,\r\n      headers: headers,\r\n      body: body && SINGULAR_RESOURCE_ENTITIES.includes(body.className) ? JSON.stringify(body) : wrapRequestBody(body),\r\n    });\r\n\r\n    if (url.includes('filterdownloader')) {\r\n      const responseJson = await response.json();\r\n      const magicValue1 = Object.keys(responseJson.data)[0];\r\n\r\n      const FilterContent = new FilterDownloader();\r\n      FilterContent.downloadUrl = responseJson.data[magicValue1] as string;\r\n      return Promise.resolve(FilterContent as T);\r\n    } else {\r\n      // Handle error responses from the API\r\n      if (!response.ok) {\r\n        return handleApiErrors<T>(response, url);\r\n      }\r\n      // Successful API response\r\n      const basicResponse = await response.json();\r\n\r\n      let responseJson;\r\n\r\n      if (url.includes('preauth/mediation')) {\r\n        responseJson = basicResponse as T;\r\n      } else {\r\n        responseJson = basicResponse as IResponse<T>;\r\n      }\r\n\r\n      if (responseJson.data) {\r\n        if (url.includes('preauth/mediation') || url.includes('entitySummary') || url.includes('metadata/xandr')) {\r\n          return responseJson.data;\r\n        }\r\n\r\n        if ((body && body.className === new UserRoleUpdate().className) || url.includes('preauth/mediation')) {\r\n          return (responseJson.data as unknown) as T;\r\n        }\r\n\r\n        if (\r\n          body &&\r\n          (body.className === new PhoneVerificationGenerateCode().className ||\r\n            body.className === new PhoneVerificationVerifyCode().className ||\r\n            body.className === new UserUpdateLanguage().className)\r\n        ) {\r\n          return responseJson as T;\r\n        }\r\n\r\n        const magicValue = Object.keys(responseJson.data)[0];\r\n        return responseJson.data[magicValue];\r\n      }\r\n    }\r\n    return Promise.resolve({} as T);\r\n  } catch (err) {\r\n    // Need to figure out where to send the logs\r\n    const error = `${method} operation failed for ${url}. Errors: ${err}`;\r\n    return handleError(new ApiError(500, error), url);\r\n  }\r\n}\r\n\r\nexport function constructUrl(\r\n  models: Model[],\r\n  entity?: new () => Model,\r\n  params?: URLSearchParams,\r\n  apiVersion?: string,\r\n  path?: string\r\n): string {\r\n  let requestUrl = uiConfig.getApiBaseAddress(apiVersion);\r\n  if (\r\n    entity === AdSenseConnectAdUnit ||\r\n    entity === AdSenseMediation ||\r\n    entity === AdSenseDisconnectAdUnit ||\r\n    entity === AdSenseMediationOptIn ||\r\n    entity === AdSenseMediationToggle ||\r\n    entity === AdSenseMediationHealthCheck ||\r\n    entity === AdSenseMediationChooseGamNetwork ||\r\n    entity === AdSenseAdUnitStatus ||\r\n    entity === AdSenseUpdateAdUnitStatus ||\r\n    entity === AdSenseMediationOptOut\r\n  ) {\r\n    requestUrl = requestUrl.slice(0, -5);\r\n  }\r\n\r\n  const urlArray = [requestUrl];\r\n  models.forEach((model: Model) => {\r\n    const modelClassName = model.className;\r\n\r\n    if (!(modelClassName === 'accounts' && model.id === 0)) {\r\n      urlArray.push(modelClassName);\r\n\r\n      if (model.id !== undefined) {\r\n        urlArray.push(model.id.toString());\r\n      }\r\n    }\r\n  });\r\n\r\n  if (entity) {\r\n    const entityInstance = new entity();\r\n    const overrideApiPath = entityInstance.apiPath;\r\n\r\n    if (overrideApiPath) {\r\n      urlArray.push(overrideApiPath);\r\n    } else {\r\n      const entityClassName = entityInstance.className;\r\n      urlArray.push(entityClassName);\r\n    }\r\n  }\r\n\r\n  if (path) {\r\n    urlArray.push(path);\r\n  }\r\n\r\n  let url = urlArray.join('/');\r\n\r\n  if (params) {\r\n    url = url.concat('?' + params.toString());\r\n  }\r\n\r\n  return url;\r\n}\r\n","import { DEFAULT_CURRENCY_CODE } from '../../../constants/AppConstants';\r\nimport { roundNumber } from '../../../utils';\r\nimport { getStore } from '../../ad-management/Account/Settings/@data/store/store';\r\nimport { TythonColumnsEnum } from '../@data/store/schema/ColumnsEnum';\r\nexport function roundMetric(metric: TythonColumnsEnum, value, toString = false) {\r\n  if (!value) {\r\n    switch (metric) {\r\n      case TythonColumnsEnum.Revenue:\r\n      case TythonColumnsEnum.Viewability:\r\n      case TythonColumnsEnum.FillRate:\r\n      case TythonColumnsEnum.WinRate:\r\n      case TythonColumnsEnum.CTR:\r\n      case TythonColumnsEnum.eCPM:\r\n      case TythonColumnsEnum.AdECPM:\r\n      case TythonColumnsEnum.AdCTR:\r\n        return toString ? convertToTwoDecimalPlaces(value) : 0;\r\n      default:\r\n        return 0;\r\n    }\r\n  }\r\n  switch (metric) {\r\n    case TythonColumnsEnum.Revenue:\r\n    case TythonColumnsEnum.Viewability:\r\n    case TythonColumnsEnum.FillRate:\r\n    case TythonColumnsEnum.WinRate:\r\n    case TythonColumnsEnum.CTR:\r\n    case TythonColumnsEnum.eCPM:\r\n    case TythonColumnsEnum.AdECPM:\r\n    case TythonColumnsEnum.AdCTR:\r\n      return toString ? convertToTwoDecimalPlaces(value) : roundNumber(value, 2);\r\n    default:\r\n      return value;\r\n  }\r\n}\r\nexport function formatMetric(metric: TythonColumnsEnum, value, locale: string) {\r\n  if (!value) {\r\n    return '';\r\n  }\r\n  const { systemPreferences } = getStore().active;\r\n\r\n  switch (metric) {\r\n    case TythonColumnsEnum.ImpressionRequests:\r\n    case TythonColumnsEnum.ImpressionsReturned:\r\n    case TythonColumnsEnum.ImpressionsServed:\r\n    case TythonColumnsEnum.ImpressionsViewed:\r\n    case TythonColumnsEnum.Clicks:\r\n    case TythonColumnsEnum.WinningBids:\r\n    case TythonColumnsEnum.AdClicks:\r\n      return nFormatter(value, 1);\r\n    case TythonColumnsEnum.Revenue:\r\n    case TythonColumnsEnum.eCPM:\r\n    case TythonColumnsEnum.AdECPM:\r\n      return value.toLocaleString(locale, { style: 'currency', currency: systemPreferences?.currency || DEFAULT_CURRENCY_CODE });\r\n    case TythonColumnsEnum.Viewability:\r\n    case TythonColumnsEnum.FillRate:\r\n    case TythonColumnsEnum.WinRate:\r\n    case TythonColumnsEnum.CTR:\r\n    case TythonColumnsEnum.AdCTR:\r\n      return Number(value).toLocaleString(undefined, { style: 'percent', minimumFractionDigits: 2 });\r\n    default:\r\n      return value;\r\n  }\r\n}\r\n\r\nfunction nFormatter(num, digits) {\r\n  const lookup = [\r\n    { value: 1, symbol: '' },\r\n    { value: 1e3, symbol: 'k' },\r\n    { value: 1e6, symbol: 'M' },\r\n    { value: 1e9, symbol: 'B' },\r\n    { value: 1e12, symbol: 'T' },\r\n    { value: 1e15, symbol: 'Q' },\r\n    { value: 1e18, symbol: 'E' },\r\n  ];\r\n  const rx = /\\.0+$|(\\.[0-9]*[1-9])0+$/;\r\n  const format = lookup\r\n    .slice()\r\n    .reverse()\r\n    .find(function (item) {\r\n      return num >= item.value;\r\n    });\r\n  return format ? (num / format.value).toFixed(digits).replace(rx, '$1') + format.symbol : '0';\r\n}\r\n\r\nexport function convertToTwoDecimalPlaces(num: number): string {\r\n  const roundedNumber = Math.round(num * 100) / 100; // Rounds the number to two decimal places\r\n  return roundedNumber.toFixed(2); // Converts the rounded number to a string with two decimal places\r\n}\r\n","import { observer } from 'mobx-react';\r\nimport { InjectedIntlProps, injectIntl } from 'react-intl';\r\nimport { RouteComponentProps, withRouter } from 'react-router-dom';\r\n\r\nexport interface IRouterWithIntl<Params extends { [K in keyof Params]?: string } = {}>\r\n  extends InjectedIntlProps,\r\n    RouteComponentProps<Params> {}\r\n\r\nexport function injectRouterWithIntl(component: React.ComponentType<IRouterWithIntl>) {\r\n  return withRouter(injectIntl(component));\r\n}\r\n\r\nexport function injectIntlWithObserver<T extends IRouterWithIntl>(component: React.ComponentType<T>) {\r\n  return injectIntl(observer(component));\r\n}\r\n\r\nexport function injectRouterAndIntlWithObserver<T extends IRouterWithIntl>(component: React.ComponentType<T>) {\r\n  return withRouter(injectIntl(observer(component)));\r\n}\r\n\r\nexport function injectIntlAndObserver<T extends InjectedIntlProps>(component: React.ComponentType<T>) {\r\n  return injectIntl(observer(component));\r\n}\r\n","export enum AdSenseOAuthStatus {\r\n  None = \"NotConnected\",\r\n  Success = \"Connected\",\r\n  Failure = \"Failure\",\r\n  Pending = \"Verifying\"\r\n}","import { classNamesFunction, ICalloutProps, Label } from '@fluentui/react';\r\nimport * as React from 'react';\r\nimport AppMessages from '../../../App.messages';\r\nimport { InfoButton } from '../../InfoButton';\r\nimport { IFormLabelProps, IFormLabelStyleProps, IFormLabelStyles } from './FormLabel.types';\r\n\r\nconst getClassNames = classNamesFunction<IFormLabelStyleProps, IFormLabelStyles>();\r\n\r\nexport class FormLabelBase extends React.Component<IFormLabelProps> {\r\n  public render(): JSX.Element {\r\n    const {\r\n      id,\r\n      disableHeading = false,\r\n      disableAriaLevel = false,\r\n      styles,\r\n      theme,\r\n      labelContent,\r\n      labelRequired,\r\n      calloutContent,\r\n      noInfoButton,\r\n      calloutOnDismiss,\r\n      iconButtonOnClick,\r\n    } = this.props;\r\n    const { formatMessage } = this.props.intl;\r\n    const classNames = getClassNames(styles, { theme: theme! });\r\n    const calloutProps: ICalloutProps = {\r\n      calloutWidth: 300,\r\n    };\r\n    return (\r\n      <div className={classNames.root}>\r\n        <Label\r\n          id={id}\r\n          required={labelRequired}\r\n          styles={classNames.subComponentStyles.Label}\r\n          role={disableHeading ? undefined : 'heading'}\r\n          aria-level={disableAriaLevel ? undefined : 3}\r\n        >\r\n          {labelContent}\r\n        </Label>\r\n        {!noInfoButton ? (\r\n          <InfoButton\r\n            ariaLabel={formatMessage(AppMessages.infoLabel, { label: labelContent })}\r\n            ariaDescription={formatMessage(AppMessages.infoDescription, { label: labelContent })}\r\n            iconTitle=\"Information\"\r\n            calloutContent={calloutContent}\r\n            calloutProps={calloutProps}\r\n            iconButtonOnClick={iconButtonOnClick}\r\n            calloutOnDismiss={calloutOnDismiss}\r\n          />\r\n        ) : null}\r\n      </div>\r\n    );\r\n  }\r\n}\r\n","import { IFormLabelStyleProps, IFormLabelStyles } from './FormLabel.types';\r\n\r\nexport const getStyles = (props: IFormLabelStyleProps): IFormLabelStyles => {\r\n  return {\r\n    root: {\r\n      display: 'flex',\r\n      alignItems: 'center',\r\n    },\r\n    subComponentStyles: {\r\n      Label: {\r\n        root: ['ms-fontWeight-semibold'],\r\n      },\r\n    },\r\n  };\r\n};\r\n","import { styled } from '@fluentui/react';\r\nimport { FormLabelBase } from './FormLabel.base';\r\nimport { getStyles } from './FormLabel.styles';\r\nimport { IFormLabelProps, IFormLabelStyleProps, IFormLabelStyles } from './FormLabel.types';\r\n\r\nexport const FormLabel = styled<IFormLabelProps, IFormLabelStyleProps, IFormLabelStyles>(FormLabelBase, getStyles, undefined, {\r\n  scope: 'FormLabel',\r\n});\r\n","export enum PopupType {\r\n  None,\r\n  Loading,\r\n  Leaving,\r\n  NoAds,\r\n  Guide,\r\n  Mediation,\r\n  Disconnecting,\r\n  DeleteConfirmation,\r\n  RoleChangeConfirmation,\r\n  DeactivateConfirmation,\r\n  AdUnitOptOut,\r\n}","import { createStore } from 'satcheljs';\r\nimport { ILoginPageState } from './schema/ILoginPageState';\r\n\r\nexport const getLoginPageStore = createStore<ILoginPageState>('LoginPageState', {\r\n  errors: {},\r\n  active: {\r\n    email: '',\r\n  },\r\n  loading: true,\r\n  devToken: undefined,\r\n});\r\n","import { createStore } from 'satcheljs';\r\nimport { IProfileViewState } from './schema';\r\n\r\n// !NOTE: This is to be added explicitly for the orchestrators to register themselves.\r\nimport { PhoneVerificationGenerateCode, PhoneVerificationVerifyCode } from '../../../../../@data';\r\nimport '../orchestrators';\r\n\r\nexport const getProfileStore = createStore<IProfileViewState>('ProfileViewState', {\r\n  active: {\r\n    phoneVerificationGenerateCode: new PhoneVerificationGenerateCode(),\r\n    phoneVerificationVerifyCode: new PhoneVerificationVerifyCode(),\r\n    verificationCodeGenerationLimitReached: false,\r\n  },\r\n  raw: {},\r\n  errors: {},\r\n});\r\n","import { defineMessages } from 'react-intl';\r\n\r\nexport default defineMessages({\r\n  searchBoxPlaceholder: {\r\n    id: 'grid.searchBoxPlaceholder',\r\n    defaultMessage: 'Find by name or ID ',\r\n  },\r\n  itemDisplayed: {\r\n    id: 'grid.itemDisplayed',\r\n    defaultMessage: '{displayedCount} of {totalCount} items displayed',\r\n  },\r\n  itemSelectedCount: {\r\n    id: 'grid.itemSelectedCount',\r\n    defaultMessage: '{count} selected',\r\n  },\r\n  teachingBubbleHeadline: {\r\n    id: 'grid.teachingBubbleHeadline',\r\n    defaultMessage: 'Please select account',\r\n  },\r\n  teachingBubbleContent: {\r\n    id: 'grid.teachingBubbleContent',\r\n    defaultMessage: 'You must select a specific account first to proceed creating ad units under the account',\r\n  },\r\n  dialogDismissBtnAriaDesc: {\r\n    id: 'grid.dialogDismissBtnAriaDesc',\r\n    defaultMessage: 'Press to dismiss',\r\n  },\r\n  createCmdbtnAriaDesc: {\r\n    id: 'grid.createCmdbtnAriaDesc',\r\n    defaultMessage: 'Click to {label}',\r\n  },\r\n  addFilterCmdBtnAriaDesc: {\r\n    id: 'grid.addFilterCmdBtnAriaDesc',\r\n    defaultMessage: 'Filter the grid below',\r\n  },\r\n  editCmdBtnAriaDesc: {\r\n    id: 'grid.editCmdBtnAriaDesc',\r\n    defaultMessage: 'Click to edit entity',\r\n  },\r\n  codeCmdBtnAriaDesc: {\r\n    id: 'grid.codeCmdBtnAriaDesc',\r\n    defaultMessage: 'Click to open code panel',\r\n  },\r\n  deleteCmdBtnAriaDesc: {\r\n    id: 'grid.deleteCmdBtnAriaDesc',\r\n    defaultMessage: 'Click to delete entity',\r\n  },\r\n  tokenStatusCmdBtnAriaLabel: {\r\n    id: 'grid.tokenStatusCmdBtnAriaLabel',\r\n    defaultMessage: 'Click to display token status',\r\n  },\r\n  clarityStatusCmdBtnAriaLabel: {\r\n    id: 'grid.clarityStatusCmdBtnAriaLabel',\r\n    defaultMessage: 'Click to display clarity status',\r\n  },\r\n  activateCmdBtnAriaDesc: {\r\n    id: 'grid.activateCmdBtnAriaDesc',\r\n    defaultMessage: 'Click to activate entity',\r\n  },\r\n  deactivateCmdBtnAriaDesc: {\r\n    id: 'grid.deactivateCmdBtnAriaDesc',\r\n    defaultMessage: 'Click to deactivate entity',\r\n  },\r\n  copyCmdBtnAriaDesc: {\r\n    id: 'grid.copyCmdBtnAriaDesc',\r\n    defaultMessage: 'Click to create a copy of this entity',\r\n  },\r\n  modifyColumnsCmdBtnAriaDesc: {\r\n    id: 'grid.modifyColumnsCmdBtnAriaDesc',\r\n    defaultMessage: 'Click to modify columns in the below grid',\r\n  },\r\n  modifyColumnsPanelApplyButtonAriaDesc: {\r\n    id: 'grid.modifyColumnsPanelApplyButtonAriaDesc',\r\n    defaultMessage: 'Click to apply selected columns to the grid',\r\n  },\r\n  editAdunit: {\r\n    id: 'grid.editAdunit',\r\n    defaultMessage: 'Edit ad unit',\r\n  },\r\n  changeTemplate: {\r\n    id: 'grid.changeTemplate',\r\n    defaultMessage: 'Change template',\r\n  },\r\n  gridDataDownloadSuccess: {\r\n    id: 'grid.dataDownloadSuccess',\r\n    defaultMessage: 'Grid data download success',\r\n  },\r\n  gridDataDeletingItem: {\r\n    id: 'grid.dataDeletingTheItem',\r\n    defaultMessage: 'Deleting the item...',\r\n  },\r\n  gridDataDeletingItemFailed: {\r\n    id: 'grid.dataDeletingTheItemFailed',\r\n    defaultMessage: 'Something went wrong while deleting the item. Please try again later.',\r\n  },\r\n  gridDataSubmittingChangingStatus: {\r\n    id: 'grid.dataSubmittingChangingStatus',\r\n    defaultMessage: 'Submitting the changing status...',\r\n  },\r\n  gridDataSubmittingChangingStatusFailed: {\r\n    id: 'grid.dataSubmittedChangingStatusFailed',\r\n    defaultMessage: 'Something went wrong while changing the status. Please try again later.',\r\n  },\r\n  gridDataDuplicatingFailed: {\r\n    id: 'grid.dataDuplicatingFailed',\r\n    defaultMessage: 'Something went wrong while duplicating the grid item. Please try again later',\r\n  },\r\n  gridDataDuplicating: {\r\n    id: 'grid.dataDuplicating',\r\n    defaultMessage: 'Duplicating the item...',\r\n  },\r\n});\r\n","import { InjectedIntlProps } from 'react-intl';\r\nimport { IDataMetric } from '../../../../types';\r\n\r\nexport enum RangeType {\r\n  Custom = 'Custom',\r\n  Today = 'Today',\r\n  Yesterday = 'Yesterday',\r\n  SundayToday = 'This week (Sun - Today)',\r\n  MondayToday = 'This week (Mon - Today)',\r\n  Last7ExcludingToday = 'Last 7 days',\r\n  Last7FromSunToSat = 'Last week (Sun - Sat)',\r\n}\r\n\r\nexport type RangeTypeKey = keyof typeof RangeType;\r\n\r\nexport const RangeTypeMessage: { [key in RangeTypeKey]: string } = {\r\n  Custom: 'customLabel',\r\n  Today: 'todayLabel',\r\n  Yesterday: 'yesterdayLabel',\r\n  SundayToday: 'sundayTodayLabel',\r\n  MondayToday: 'mondayTodayLabel',\r\n  Last7ExcludingToday: 'last7FromTodayLabel',\r\n  Last7FromSunToSat: 'last7FromSunToSatLabel',\r\n};\r\n\r\nexport interface ICustomCalenderProps extends InjectedIntlProps, IDataMetric {\r\n  onSelectedDatesChanged: (dateRange: ICustomCalenderDateRange, rangeType: RangeType) => void;\r\n  initialDateRange: ICustomCalenderDateRange;\r\n  initialRangeType: RangeType;\r\n  disableFutureDays?: boolean;\r\n}\r\nexport interface ICustomCalenderDateRange {\r\n  startDate: Date;\r\n  endDate: Date;\r\n}\r\n\r\nexport interface IDay {\r\n  fullDay: IDateElements;\r\n  day: number;\r\n  isInCurrentMonth: boolean;\r\n  isSelected?: boolean;\r\n  isFirstOrLastInSelected?: boolean;\r\n}\r\n\r\nexport interface IDateElements {\r\n  day: number;\r\n  month: number;\r\n  year: number;\r\n}\r\n","import { defineMessages } from 'react-intl';\r\n\r\nexport default defineMessages({\r\n  pageTitle: {\r\n    id: 'profilePage.title',\r\n    defaultMessage: 'Profile',\r\n  },\r\n  submitSuccessTitle: {\r\n    id: 'profilePage.submitSuccessTitle',\r\n    defaultMessage: 'Thanks for completing your profile',\r\n  },\r\n  submitSuccessMessage: {\r\n    id: 'profilePage.submitSuccessMessage',\r\n    defaultMessage: \"We are reviewing your profile. This can take up to 7 business days and we'll notify you as soon as it's approved.\",\r\n  },\r\n  submitSuccessButtonLabel: {\r\n    id: 'profilePage.submitSuccessButtonLabel',\r\n    defaultMessage: 'Go to dashboard',\r\n  },\r\n  readOnlyPageTooltip: {\r\n    id: 'profilePage.readOnlyPageTooltip',\r\n    defaultMessage: \"You can only edit your profile after we've completed our review of your profile information.\",\r\n  },\r\n  addressLine1: {\r\n    id: 'primaryContact.addressLine1',\r\n    defaultMessage: 'Address line 1',\r\n  },\r\n  addressLine2: {\r\n    id: 'primaryContact.addressLine2',\r\n    defaultMessage: 'Address line 2',\r\n  },\r\n  city: {\r\n    id: 'primaryContact.city',\r\n    defaultMessage: 'City',\r\n  },\r\n  state: {\r\n    id: 'primaryContact.state',\r\n    defaultMessage: 'State',\r\n  },\r\n  zipCode: {\r\n    id: 'primaryContact.zipCode',\r\n    defaultMessage: 'ZIP code',\r\n  },\r\n  country: {\r\n    id: 'primaryContact.country',\r\n    defaultMessage: 'Country',\r\n  },\r\n  phoneNumber: {\r\n    id: 'primaryContact.phoneNumber',\r\n    defaultMessage: 'Phone number',\r\n  },\r\n  phoneNumberCountryCode: {\r\n    id: 'primaryContact.countryCode',\r\n    defaultMessage: 'Country code',\r\n  },\r\n  selectStatePlaceholder: {\r\n    id: 'primaryContact.selectStatePlaceholder',\r\n    defaultMessage: 'Select a state',\r\n  },\r\n  address: {\r\n    id: 'primaryContact.address',\r\n    defaultMessage: 'Address',\r\n  },\r\n  previewTitle: {\r\n    id: 'primaryContact.previewTitle',\r\n    defaultMessage: 'Preview to submit',\r\n  },\r\n  previewDescription: {\r\n    id: 'primaryContact.previewDescription',\r\n    defaultMessage:\r\n      'Please check and confirm the information you filled is correct to save as the average verification time is around a week.',\r\n  },\r\n  profileAddressBannerBold: {\r\n    id: 'profileAddress.bannerBold',\r\n    defaultMessage: '{appName} is currently only accepting payment in the United States',\r\n  },\r\n  profileAddressBanner: {\r\n    id: 'profileAddress.banner',\r\n    defaultMessage: 'if you do not have a payment address inside the US, please signup for the',\r\n  },\r\n  profileAddressBannerWaitlist: {\r\n    id: 'profileAddress.bannerWaitlist',\r\n    defaultMessage: 'waitlist',\r\n  },\r\n  phoneVerificationMethodSms: {\r\n    id: 'phoneVerificationMethod.sms',\r\n    defaultMessage: 'Text me at {phone}',\r\n  },\r\n  phoneVerificationMethodCall: {\r\n    id: 'phoneVerificationMethod.call',\r\n    defaultMessage: 'Call me at {phone}',\r\n  },\r\n  phoneVerificationDialogTitle: {\r\n    id: 'phoneVerificationDialog.title',\r\n    defaultMessage: 'Phone verification',\r\n  },\r\n  emailVerificationDialogTitle: {\r\n    id: 'emailVerificationDialog.title',\r\n    defaultMessage: 'Email verification',\r\n  },\r\n  phoneVerificationDialogChoiceGroupLabel: {\r\n    id: 'phoneVerificationDialog.choiceGroupLabel',\r\n    defaultMessage: 'How would you like to verify?',\r\n  },\r\n  phoneVerificationDialogNextButton: {\r\n    id: 'phoneVerificationDialog.nextButton',\r\n    defaultMessage: 'Next',\r\n  },\r\n  phoneVerificationDialogCancelButton: {\r\n    id: 'phoneVerificationDialog.cancelButton',\r\n    defaultMessage: 'Cancel',\r\n  },\r\n  phoneVerificationDialogVerifyButton: {\r\n    id: 'phoneVerificationDialog.verifyButton',\r\n    defaultMessage: 'Verify',\r\n  },\r\n  phoneVerificationDialogBody: {\r\n    id: 'phoneVerificationDialog.body',\r\n    defaultMessage: 'Message and data rates may apply. By selecting Next, you agree to the {terms} and {privacy}',\r\n  },\r\n  phoneVerificationDialogTermsAndConditions: {\r\n    id: 'phoneVerificationDialog.termsAndCondition',\r\n    defaultMessage: 'Terms and Conditions',\r\n  },\r\n  phoneVerificationDialogPrivacy: {\r\n    id: 'phoneVerificationDialog.privacy',\r\n    defaultMessage: 'Privacy statement',\r\n  },\r\n  phoneVerificationDialogResendCode: {\r\n    id: 'phoneVerificationDialog.resendCode',\r\n    defaultMessage: 'Resend code',\r\n  },\r\n  phoneVerificationDialogCallAgain: {\r\n    id: 'phoneVerificationDialog.callAgain',\r\n    defaultMessage: 'Call again',\r\n  },\r\n  emailVerificationDialogCodeSent: {\r\n    id: 'emailVerificationDialog.codeSent',\r\n    defaultMessage: 'A confirmation code was sent to {email}. Please enter the code below.',\r\n  },\r\n  phoneVerificationDialogSmsText: {\r\n    id: 'phoneVerificationDialog.smsText',\r\n    defaultMessage: 'A confirmation code was sent to {phoneNumber}. Please enter the code below.',\r\n  },\r\n  phoneVerificationDialogCallText: {\r\n    id: 'phoneVerificationDialog.callText',\r\n    defaultMessage: 'We are calling {phoneNumber} with the necessary code. Please enter the code below.',\r\n  },\r\n  verificationDialogPlaceholder: {\r\n    id: 'verificationDialog.placeholder',\r\n    defaultMessage: 'Enter code',\r\n  },\r\n  phoneVerificationDialogSuccess: {\r\n    id: 'phoneVerificationDialog.success',\r\n    defaultMessage: 'Your phone number {phoneNumber} is verified',\r\n  },\r\n  emailVerificationDialogSuccess: {\r\n    id: 'emailVerificationDialog.success',\r\n    defaultMessage: 'Your email {email} is verified.',\r\n  },\r\n  phoneVerificationDialogSuccessAlt: {\r\n    id: 'phoneVerificationDialog.successAlt',\r\n    defaultMessage: 'phone verified',\r\n  },\r\n  profileInvalidFieldsErrorMessage: {\r\n    id: 'profileInvalidField.errorMessage',\r\n    defaultMessage: 'You have { count } invalid fields, please correct them to continue.',\r\n  },\r\n  profileInvalidAddressErrorMessage: {\r\n    id: 'profileInvalidAddress.errorMessage',\r\n    defaultMessage: 'Invalid address. The postal code provided does not match the country, city or the state/province.',\r\n  },\r\n  profileAddressValidationFailed: {\r\n    id: 'profileAddressValidation.failed',\r\n    defaultMessage: 'Failed to validate user address. Please try again!',\r\n  },\r\n  generateVerificationCodeFailed: {\r\n    id: 'generateVerificationCode.failed',\r\n    defaultMessage: 'Failed to generate phone verification code. Please try again!',\r\n  },\r\n  generateEmailVerificationCodeLimitReached: {\r\n    id: 'generateEmailVerificationCodeLimitReached',\r\n    defaultMessage: \"Didn't receive the email?\",\r\n  },\r\n  generatePhoneVerificationCodeLimitReached: {\r\n    id: 'generatePhoneVerificationCodeLimitReached',\r\n    defaultMessage:\r\n      \"You've reached the maximum number of attempts to resend the code. Please wait for ten minutes before requesting another code.\",\r\n  },\r\n  generateEmailVerificationCodeFailed: {\r\n    id: 'generateVerificationCode.failed',\r\n    defaultMessage: 'Failed to generate email verification code. Please try again!',\r\n  },\r\n  getVerificationStatusFailed: {\r\n    id: 'getVerificationStatus.failed',\r\n    defaultMessage: 'Failed to check email verification status.',\r\n  },\r\n  verifyingGeneratedCodeFailed: {\r\n    id: 'verifyingGeneratedCode.failed',\r\n    defaultMessage: 'Failed to verify generated code. Please try again!',\r\n  },\r\n  generatedCodeInvalid: {\r\n    id: 'generatedCode.invalid',\r\n    defaultMessage: 'This code is invalid. Please try again.',\r\n  },\r\n  generatedCodeExpired: {\r\n    id: 'generatedCode.expired',\r\n    defaultMessage: 'This code is expired. Please try again.',\r\n  },\r\n  generatedCodeFailed: {\r\n    id: ' generatedCode.failed',\r\n    defaultMessage: 'Failed to send verification code. Please try again',\r\n  },\r\n  publisherProfileDetailsFailed: {\r\n    id: 'publisherProfileDetails.failed',\r\n    defaultMessage: 'We’re unable to show your publisher profile details. Please try again later.',\r\n  },\r\n  updatePublisherProfileDetailsFailed: {\r\n    id: 'updatePublisherProfileDetails.failed',\r\n    defaultMessage: 'We’re unable to update your publisher profile details. Please try again later.',\r\n  },\r\n  loadUserDetailsFailed: {\r\n    id: 'loadUserDetails.failed',\r\n    defaultMessage: 'We’re unable to load your user details at this time. Please try again later.',\r\n  },\r\n  failedToLoadPublisherDetails: {\r\n    id: 'publisherProfileDetails.failedToLoadPublisherDetails',\r\n    defaultMessage: 'Failed to load publisher details',\r\n  },\r\n  failedToLoadProfileDetails: {\r\n    id: 'publisherProfileDetails.failedToLoadProfileDetails',\r\n    defaultMessage: 'Failed to load profile details',\r\n  },\r\n  profileNeedsAttentionTitle: {\r\n    id: 'publisherProfileDetails.profileNeedsAttentionTitle',\r\n    defaultMessage: 'Additional action required. ',\r\n  },\r\n  profileNeedsAttentionDesc: {\r\n    id: 'publisherProfileDetails.profileNeedsAttentionDesc',\r\n    defaultMessage: 'Please edit your profile details or upload the required documentation',\r\n  },\r\n  help: {\r\n    id: 'publisherProfileDetails.help',\r\n    defaultMessage: 'Help',\r\n  },\r\n  uploadDocument: {\r\n    id: 'publisherProfileDetails.uploadDocument',\r\n    defaultMessage: 'Upload',\r\n  },\r\n  notStarted: {\r\n    id: 'publisherEvaluationStatus.notStarted',\r\n    defaultMessage: 'Not started',\r\n  },\r\n  inReview: {\r\n    id: 'publisherEvaluationStatus.inReview',\r\n    defaultMessage: 'In review',\r\n  },\r\n  verified: {\r\n    id: 'publisherEvaluationStatus.verified',\r\n    defaultMessage: 'Verified',\r\n  },\r\n  actionRequired: {\r\n    id: 'publisherEvaluationStatus.actionRequired',\r\n    defaultMessage: 'Action required',\r\n  },\r\n  notStatedPopup: {\r\n    id: 'publisherEvaluationStatus.setupRequired',\r\n    defaultMessage: 'Setting up your profile is essential for serving ads on your site or app.',\r\n  },\r\n  inReviewPopup: {\r\n    id: 'publisherEvaluationStatus.inReviewPopup',\r\n    defaultMessage: `We're reviewing your profile, which can take up to seven business days to complete. We'll send an email confirmation once the review is complete.`,\r\n  },\r\n  failedToSubmitEvidence: {\r\n    id: 'failedToSubmitEvidence',\r\n    defaultMessage: 'Failed to submit evidence',\r\n  },\r\n});\r\n","import { defineMessages } from 'react-intl';\r\n\r\nexport default defineMessages({\r\n  backButtonAriaDesc: {\r\n    id: 'detailPage.backButtonAriaDesc',\r\n    defaultMessage: 'Click to go back to manage page'\r\n  },\r\n  breadcrumbAriaLabel: {\r\n    id: 'detailPage.breadcrumbAriaLabel',\r\n    defaultMessage: 'Bread crumb showing the heirarchy of subpages'\r\n  }\r\n});","import { getTheme, mergeStyleSets } from '@fluentui/react';\r\nimport { IPubcenterSpacing } from '../../../theme';\r\nimport { FormState } from '../../components/Form';\r\nimport { IDetailPageStyleProps, IDetailPageStyles } from './DetailPage.types';\r\n\r\nexport const getStyles = (props: IDetailPageStyleProps): IDetailPageStyles => {\r\n  const { theme, pageMode, hasFormTitle = false, additionalHeightBoundary, overlayHeight } = props;\r\n  const spacing = theme.spacing as IPubcenterSpacing;\r\n  const palette = theme.palette;\r\n  const renderedOnPanel =\r\n    pageMode === FormState.InPageCreate || pageMode === FormState.InPageEdit || pageMode === FormState.InPageView ? true : false;\r\n  const marginLeft = !renderedOnPanel ? spacing.size48 : 0;\r\n  const titleMarginLeft = !renderedOnPanel ? spacing.size32 : 1;\r\n  const buttonMarginBottom = !renderedOnPanel ? (hasFormTitle ? spacing.size16 : spacing.size32) : 0;\r\n  // we have marginTop32 + marginBottom24 + actual form title lineHeight32, together is 88px is the cumulative height for the form title\r\n  const formTitleHeight = 88;\r\n  return mergeStyleSets({\r\n    root: {\r\n      display: 'flex',\r\n      flexDirection: 'column',\r\n      overflowY: 'auto',\r\n      flex: 1,\r\n    },\r\n    navBackButton: [\r\n      'ms-navBackButton',\r\n      {\r\n        display: 'flex',\r\n        backgroundColor: theme.palette.neutralLighter,\r\n        height: spacing.size44,\r\n        alignItems: 'center',\r\n      },\r\n    ],\r\n    scrollablePanel: {\r\n      borderBottomStyle: 'solid',\r\n      borderColor: theme.palette.neutralLight,\r\n      borderBottomWidth: renderedOnPanel ? 0 : 1,\r\n      overflowY: 'auto',\r\n      flex: 1,\r\n      maxHeight: `calc(100% - 5rem)`,\r\n      width: '100%',\r\n      ...(additionalHeightBoundary\r\n        ? {\r\n            paddingBottom: spacing.size64,\r\n          }\r\n        : {}),\r\n    },\r\n    content: {\r\n      marginLeft: marginLeft,\r\n      position: 'relative',\r\n      height: hasFormTitle ? `calc(100% - ${formTitleHeight}px)` : '100%',\r\n    },\r\n    buttons: {\r\n      zIndex: 9999,\r\n      position: renderedOnPanel ? 'absolute' : 'static',\r\n      bottom: renderedOnPanel ? '1rem' : '0',\r\n      display: 'flex',\r\n      marginLeft: marginLeft,\r\n      marginTop: spacing.size16,\r\n      marginBottom: buttonMarginBottom,\r\n      '@media(max-height: 360px)': {\r\n        position: 'static',\r\n      },\r\n      selectors: {\r\n        '.ms-Button': {\r\n          marginRight: spacing.size8,\r\n        },\r\n      },\r\n      ...(additionalHeightBoundary\r\n        ? {\r\n            background: palette.white,\r\n            width: '100%',\r\n            bottom: 0,\r\n            paddingBottom: spacing.size16,\r\n            paddingTop: spacing.size16,\r\n          }\r\n        : {}),\r\n    },\r\n    subComponentStyles: {\r\n      formTitle: {\r\n        root: {\r\n          marginLeft: marginLeft,\r\n          marginTop: titleMarginLeft,\r\n          marginBottom: spacing.size24,\r\n        },\r\n      },\r\n      breadcrumb: {\r\n        root: {\r\n          margin: 0,\r\n          alignItems: 'center',\r\n        },\r\n        item: {\r\n          lineHeight: '22px',\r\n          fontSize: theme.fonts.mediumPlus.fontSize,\r\n          color: theme.palette.neutralPrimary,\r\n        },\r\n        chevron: {\r\n          lineHeight: '22px',\r\n          color: theme.palette.neutralPrimary,\r\n        },\r\n      },\r\n    },\r\n    overlayStyles: {\r\n      ...(overlayHeight ? { height: overlayHeight } : {}),\r\n    },\r\n  });\r\n};\r\n\r\nexport function getClassNames<PropType>(props?: PropType): IDetailPageStyles {\r\n  return getStyles({ theme: getTheme(), ...props });\r\n}\r\n","import { ActionButton, Breadcrumb, DefaultButton, getId, mergeStyleSets, Overlay, PrimaryButton, Spinner } from '@fluentui/react';\r\nimport * as React from 'react';\r\nimport { getAppStore, LayoutMode, onHelpInfoCalloutOpened, onHelpInfoChanged, onLayoutChanged, onNavigateBack } from '../../@data';\r\nimport AppMessages from '../../App.messages';\r\nimport { FormState, FormTitle } from '../../components/Form';\r\nimport { Main } from '../../components/Main/Main';\r\nimport { injectIntlAndObserver } from '../../utils';\r\nimport messages from './DetailPage.messages';\r\nimport { getClassNames } from './DetailPage.styles';\r\nimport { IDetailPageProps } from './DetailPage.types';\r\n\r\n/**\r\n * DetailPage is a layout component which is to be used when a form is displayed\r\n * with submit and cancel buttons. And the page should have a title and a help icon.\r\n */\r\nexport const DetailPage = injectIntlAndObserver(\r\n  class DetailsPageComponent extends React.Component<IDetailPageProps> {\r\n    public componentDidMount() {\r\n      const { pageMode } = this.props;\r\n      if (pageMode !== FormState.InPageCreate && pageMode !== FormState.InPageEdit && pageMode !== FormState.InPageView) {\r\n        onLayoutChanged(LayoutMode.ContentOnly);\r\n      }\r\n    }\r\n\r\n    public render(): JSX.Element {\r\n      const {\r\n        titleLabel,\r\n        helpId,\r\n        onSubmit,\r\n        onCancel,\r\n        submitLabel,\r\n        cancelLabel,\r\n        navMessageLabel,\r\n        onNavClick,\r\n        saving,\r\n        loading,\r\n        pageMode,\r\n        submitButtonDisabled,\r\n        hideSubmitButton,\r\n        breadcrumbItems,\r\n        styles,\r\n        hasFormTitle = false,\r\n        hideNavButton = false,\r\n        additionalHeightBoundary,\r\n        overlayHeight = undefined,\r\n      } = this.props;\r\n      const classNames = mergeStyleSets(getClassNames({ pageMode, hasFormTitle, additionalHeightBoundary, overlayHeight }), styles);\r\n      const { root, navBackButton, scrollablePanel, buttons, content, subComponentStyles, overlayStyles } = classNames;\r\n      const { helpInfo, locale } = getAppStore();\r\n      const { formatMessage } = this.props.intl;\r\n      const formTitleId = getId('formTitle');\r\n\r\n      const showOverlay = saving || loading;\r\n\r\n      return (\r\n        <div className={root}>\r\n          {pageMode !== FormState.InPageCreate &&\r\n            pageMode !== FormState.InPageEdit &&\r\n            pageMode !== FormState.AcceptInvite &&\r\n            pageMode !== FormState.InPageView &&\r\n            !hideNavButton && (\r\n              <div className={navBackButton}>\r\n                {showOverlay && <Overlay />}\r\n                <ActionButton\r\n                  iconProps={{\r\n                    iconName: 'Back',\r\n                  }}\r\n                  onClick={onNavClick ? onNavClick : () => onNavigateBack()}\r\n                  ariaDescription={formatMessage(messages.backButtonAriaDesc)}\r\n                >\r\n                  {navMessageLabel || formatMessage(AppMessages.back)}\r\n                </ActionButton>\r\n                {breadcrumbItems && (\r\n                  <Breadcrumb\r\n                    items={breadcrumbItems}\r\n                    ariaLabel={formatMessage(messages.breadcrumbAriaLabel)}\r\n                    styles={subComponentStyles.breadcrumb}\r\n                  />\r\n                )}\r\n              </div>\r\n            )}\r\n          <Main className={scrollablePanel}>\r\n            {showOverlay && <Overlay />}\r\n            {titleLabel ? (\r\n              <FormTitle\r\n                id={formTitleId}\r\n                title={titleLabel}\r\n                calloutContent={helpInfo}\r\n                iconButtonOnClick={helpId !== undefined ? () => onHelpInfoCalloutOpened(helpId, locale) : undefined}\r\n                calloutOnDismiss={() => onHelpInfoChanged()}\r\n                styles={subComponentStyles.formTitle}\r\n                intl={this.props.intl}\r\n                noHelpPopup={helpId !== undefined ? false : true}\r\n              />\r\n            ) : null}\r\n\r\n            <div role=\"form\" aria-labelledby={formTitleId} className={content}>\r\n              {this.props.children}\r\n              {showOverlay && <Overlay className={overlayStyles} />}\r\n            </div>\r\n          </Main>\r\n          <footer className={buttons} aria-label={formatMessage(AppMessages.detailPageFooterArialLabel)}>\r\n            {!hideSubmitButton && <PrimaryButton text={submitLabel} onClick={onSubmit} disabled={saving || submitButtonDisabled} />}\r\n\r\n            {pageMode !== FormState.AcceptInvite && onCancel && (\r\n              <DefaultButton\r\n                text={cancelLabel || formatMessage(AppMessages.cancel)}\r\n                onClick={onCancel}\r\n                disabled={saving}\r\n                ariaDescription={formatMessage(messages.backButtonAriaDesc)}\r\n              />\r\n            )}\r\n\r\n            {saving && <Spinner label={formatMessage(AppMessages.saving)} labelPosition={'right'} />}\r\n          </footer>\r\n        </div>\r\n      );\r\n    }\r\n  }\r\n);\r\n","import { BrowserAuthOptions } from '@azure/msal-browser';\r\nimport { IDictionary } from '../types';\r\n\r\ntype AuthOptions = BrowserAuthOptions & { msaTenantId: string; msaAuthority: string; devToken: string; redirectUri: string };\r\n\r\nconst localConfig1: AuthOptions = {\r\n  authority: 'https://login.windows-ppe.net/common',\r\n  clientId: 'bbd8c357-c363-4d20-9e4a-2c98f7977eab', // PubCenter-UI (PPE)\r\n  postLogoutRedirectUri: 'http://localhost:3000',\r\n  redirectUri: 'http://localhost:3000/login',\r\n  msaTenantId: '4925308c-f164-4d2d-bc7e-0631132e9375',\r\n  msaAuthority: 'https://login.live-int.com',\r\n  devToken: 'BBD37VB98',\r\n};\r\n\r\nconst localConfig2: AuthOptions = {\r\n  authority: 'https://login.windows-ppe.net/common',\r\n  clientId: 'bbd8c357-c363-4d20-9e4a-2c98f7977eab', // PubCenter-UI (PPE)\r\n  postLogoutRedirectUri: 'http://localhost:3001',\r\n  redirectUri: 'http://localhost:3001/login',\r\n  msaTenantId: '4925308c-f164-4d2d-bc7e-0631132e9375',\r\n  msaAuthority: 'https://login.live-int.com',\r\n  devToken: 'BBD37VB98',\r\n};\r\n\r\nconst localConfig: AuthOptions = window.location.host.indexOf('3000') > -1 ? localConfig1 : localConfig2;\r\n\r\nconst devConfigOnline: AuthOptions = {\r\n  authority: 'https://login.windows-ppe.net/common',\r\n  clientId: 'bbd8c357-c363-4d20-9e4a-2c98f7977eab', // PubCenter-UI (PPE)\r\n  postLogoutRedirectUri: 'https://pubcenter.azurewebsites.net',\r\n  redirectUri: 'https://pubcenter.azurewebsites.net/login',\r\n  msaTenantId: '4925308c-f164-4d2d-bc7e-0631132e9375',\r\n  msaAuthority: 'https://login.live-int.com',\r\n  devToken: '#{devToken_dev}#',\r\n};\r\n\r\nconst devConfigOffline: AuthOptions = {\r\n  authority: 'https://login.windows-ppe.net/common',\r\n  clientId: 'bbd8c357-c363-4d20-9e4a-2c98f7977eab', // PubCenter-UI (PPE)\r\n  postLogoutRedirectUri: 'https://pubcenter2.azurewebsites.net',\r\n  redirectUri: 'https://pubcenter2.azurewebsites.net/login',\r\n  msaTenantId: '4925308c-f164-4d2d-bc7e-0631132e9375',\r\n  msaAuthority: 'https://login.live-int.com',\r\n  devToken: '#{devToken_dev}#',\r\n};\r\n\r\nconst devConfigNewDomain: AuthOptions = {\r\n  authority: 'https://login.windows-ppe.net/common',\r\n  clientId: 'bbd8c357-c363-4d20-9e4a-2c98f7977eab', // PubCenter-UI (PPE)\r\n  postLogoutRedirectUri: 'https://si.monetizenow.microsoft.com',\r\n  redirectUri: 'https://si.monetizenow.microsoft.com/login',\r\n  msaTenantId: '4925308c-f164-4d2d-bc7e-0631132e9375',\r\n  msaAuthority: 'https://login.live-int.com',\r\n  devToken: '#{devToken_dev}#',\r\n};\r\n\r\nconst devConfigNewDomainOffline: AuthOptions = {\r\n  authority: 'https://login.windows-ppe.net/common',\r\n  clientId: 'bbd8c357-c363-4d20-9e4a-2c98f7977eab', // PubCenter-UI (PPE)\r\n  postLogoutRedirectUri: 'https://offline.si.monetizenow.microsoft.com',\r\n  redirectUri: 'https://offline.si.monetizenow.microsoft.com/login',\r\n  msaTenantId: '4925308c-f164-4d2d-bc7e-0631132e9375',\r\n  msaAuthority: 'https://login.live-int.com',\r\n  devToken: '#{devToken_dev}#',\r\n};\r\n\r\nconst devConfigMapping: IDictionary<AuthOptions> = {\r\n  'pubcenter.azurewebsites.net': devConfigOnline,\r\n  'pubcenter2.azurewebsites.net': devConfigOffline,\r\n  'si.monetizenow.microsoft.com': devConfigNewDomain,\r\n  'offline.si.monetizenow.microsoft.com': devConfigNewDomainOffline,\r\n};\r\n\r\nconst devConfig: AuthOptions = devConfigMapping[window.location.host] || devConfigOnline;\r\n\r\nconst prodConfigOnline: AuthOptions = {\r\n  authority: 'https://login.microsoftonline.com/common',\r\n  clientId: '60e7cf7c-2b0d-468b-802d-99fa045382b8', // PubCenter-UI (PROD)\r\n  postLogoutRedirectUri: 'https://next.pubcenter.microsoft.com',\r\n  redirectUri: 'https://next.pubcenter.microsoft.com/login',\r\n  msaTenantId: '9188040d-6c67-4c5b-b112-36a304b66dad',\r\n  msaAuthority: 'https://login.live.com',\r\n  devToken: '#{devToken_prod}#',\r\n};\r\n\r\nconst prodConfigOffline: AuthOptions = {\r\n  authority: 'https://login.microsoftonline.com/common',\r\n  clientId: '60e7cf7c-2b0d-468b-802d-99fa045382b8', // PubCenter-UI (PROD)\r\n  postLogoutRedirectUri: 'https://pubcenternext-staging.azurewebsites.net',\r\n  redirectUri: 'https://pubcenternext-staging.azurewebsites.net/login',\r\n  msaTenantId: '9188040d-6c67-4c5b-b112-36a304b66dad',\r\n  msaAuthority: 'https://login.live.com',\r\n  devToken: '#{devToken_prod}#',\r\n};\r\n\r\nconst prodConfigNewDomain: AuthOptions = {\r\n  authority: 'https://login.microsoftonline.com/common',\r\n  clientId: '60e7cf7c-2b0d-468b-802d-99fa045382b8', // PubCenter-UI (PROD)\r\n  postLogoutRedirectUri: 'https://monetizenow.microsoft.com',\r\n  redirectUri: 'https://monetizenow.microsoft.com/login',\r\n  msaTenantId: '9188040d-6c67-4c5b-b112-36a304b66dad',\r\n  msaAuthority: 'https://login.live.com',\r\n  devToken: '#{devToken_prod}#',\r\n};\r\n\r\nconst prodConfigNewDomainStaging: AuthOptions = {\r\n  authority: 'https://login.microsoftonline.com/common',\r\n  clientId: '60e7cf7c-2b0d-468b-802d-99fa045382b8', // PubCenter-UI (PROD)\r\n  postLogoutRedirectUri: 'https://staging.monetizenow.microsoft.com',\r\n  redirectUri: 'https://staging.monetizenow.microsoft.com/login',\r\n  msaTenantId: '9188040d-6c67-4c5b-b112-36a304b66dad',\r\n  msaAuthority: 'https://login.live.com',\r\n  devToken: '#{devToken_prod}#',\r\n};\r\n\r\nconst prodConfigMapping: IDictionary<AuthOptions> = {\r\n  'next.pubcenter.microsoft.com': prodConfigOnline,\r\n  'pubcenternext-staging.azurewebsites.net': prodConfigOffline,\r\n  'monetizenow.microsoft.com': prodConfigNewDomain,\r\n  'staging.monetizenow.microsoft.com': prodConfigNewDomainStaging,\r\n};\r\n\r\nconst prodConfig: AuthOptions = prodConfigMapping[window.location.host] || prodConfigOnline;\r\n\r\nexport const envBasedConfig =\r\n  process.env.REACT_APP_ENV === 'production' ? prodConfig : process.env.REACT_APP_ENV === 'staging' ? devConfig : localConfig;\r\n\r\nexport const aadConfig = {\r\n  auth: {\r\n    ...envBasedConfig,\r\n  },\r\n  cache: {\r\n    cacheLocation: 'localStorage',\r\n  },\r\n  system: {\r\n    tokenRenewalOffsetSeconds: 300,\r\n  },\r\n};\r\n\r\n// Used only during login call, initially we need permissions for all these scopes from the user.\r\nexport const devPubCenterAuthTokenRequest = {\r\n  scopes: ['openid', 'profile', 'offline_access', 'https://si.monetizenow.microsoft.com/ppe.pubcenter.api'],\r\n};\r\n\r\n// Used to fetch tokens before making API calls\r\n// Token is either fetched from cache or renewed using refresh grant when access token is about to expire.\r\nexport const devSilentTokenRequest = {\r\n  scopes: ['https://si.monetizenow.microsoft.com/ppe.pubcenter.api'],\r\n};\r\n\r\nexport const prodPubCenterAuthTokenRequest = {\r\n  scopes: ['openid', 'profile', 'offline_access', 'https://next.pubcenter.microsoft.com/prod.pubcenter.api'],\r\n};\r\n\r\nexport const prodSilentTokenRequest = {\r\n  scopes: ['https://next.pubcenter.microsoft.com/prod.pubcenter.api'],\r\n};\r\n\r\n// export const silentTokenRequestRedirectUri = envBasedConfig.postLogoutRedirectUri + '/auth.html'; // check why we added auth.html here ?\r\nexport const silentTokenRequestRedirectUri = envBasedConfig.postLogoutRedirectUri;\r\n\r\nexport const authTokenRequest = process.env.REACT_APP_ENV === 'production' ? prodPubCenterAuthTokenRequest : devPubCenterAuthTokenRequest;\r\n\r\nexport const silentTokenRequest = process.env.REACT_APP_ENV === 'production' ? prodSilentTokenRequest : devSilentTokenRequest;\r\n\r\nexport const corpTenantId =\r\n  process.env.REACT_APP_ENV === 'production' ? '72f988bf-86f1-41af-91ab-2d7cd011db47' : 'f686d426-8d16-42db-81b7-ab578e110ccd';\r\n\r\nexport const accountEnvironment = process.env.REACT_APP_ENV === 'production' ? 'login.microsoftonline.com' : 'login.windows-ppe.net';\r\n","import { IHomeViewModel } from './IHomeViewModel';\r\n\r\nexport interface IHomeViewState {\r\n  active: IHomeViewModel;\r\n  isStatusLoading: boolean;\r\n  isSetupDone: boolean;\r\n  adUnitStatus?: HomePageStatus;\r\n  siteStatus?: HomePageStatus;\r\n  profileStatus?: HomePageStatus;\r\n  isFRECardShown?: boolean;\r\n}\r\n\r\nexport enum HomePageStatus {\r\n  NotStarted = 'NotStarted',\r\n  AwaitingVerification = 'AwaitingVerification',\r\n  Completed = 'Completed',\r\n  Rejected = 'Rejected',\r\n}\r\n","import { AdsTxtStatus, ClarityStatus, InventoryPlatformType, Model } from '..';\r\nimport { BlockAdCategoryNames, BlockCategoryXandrNames } from '../../../../pages/ad-management/AdBlock/@data/constants/CategoryNames';\r\nimport { ServingStatus } from '../enums/ServingStatus';\r\n\r\nexport type IABCode = keyof typeof BlockAdCategoryNames;\r\nexport type XandrCat = keyof typeof BlockCategoryXandrNames;\r\n\r\nexport class ServingConfig extends Model {\r\n  public apiPath = undefined;\r\n  public className = 'servingConfig';\r\n  public servingStatus: ServingStatus;\r\n  public scriptStatus?: boolean;\r\n  public adsDotTxtStatus?: AdsTxtStatus;\r\n  public enablebCat?: boolean;\r\n  public enablebAdv?: boolean;\r\n  public enablexBrands?: boolean;\r\n  public xBrands?: number[];\r\n  public bCat?: IABCode[];\r\n  public xCat?: XandrCat[];\r\n  public bAdv?: string[];\r\n  public eTag?: string;\r\n  public isBusy?: boolean;\r\n}\r\n\r\nexport class AdunitServingConfig extends ServingConfig {\r\n  public adUnitId: number;\r\n}\r\n\r\nexport class PublisherServingConfig extends ServingConfig {\r\n  public publisherId: number;\r\n}\r\n\r\nexport class PropertyServingConfig extends ServingConfig {\r\n  public propertyId: number;\r\n  public MicrosoftStoreAppId?: string | null;\r\n  public COPPATimestamp?: string | null;\r\n  public inventoryPlatformType?: InventoryPlatformType;\r\n  public name?: string;\r\n}\r\n\r\nexport class PropertyServingConfigs extends PropertyServingConfig {\r\n  public url?: string;\r\n  public className = 'propertyServingConfigs';\r\n  public clarityConfig?: ClarityConfig;\r\n  public name?: string;\r\n}\r\n\r\nexport class AdunitServingConfigs extends AdunitServingConfig {\r\n  public className = 'adUnitServingConfigs';\r\n}\r\n\r\nexport class ClarityConfig {\r\n  public clarityId?: string;\r\n  public clarityType?: string;\r\n  public clarityTs?: string;\r\n  public clarityIsEnabled?: boolean;\r\n  public clarityStatus?: ClarityStatus;\r\n}\r\n","export const userLocales = {\r\n  1031: 'de-DE',\r\n  3079: 'de-AT',\r\n  1033: 'en-US',\r\n  4105: 'en-CA',\r\n  6153: 'en-IE',\r\n  2057: 'en-GB',\r\n  16393: 'en-IN',\r\n  3082: 'es-ES',\r\n  3084: 'fr-CA',\r\n  1036: 'fr-FR',\r\n  1040: 'it-IT',\r\n  3081: 'en-AU',\r\n  5129: 'en-NZ',\r\n  1046: 'pt-BR',\r\n  1028: 'zh-TW',\r\n  4100: 'zh-SG',\r\n  2070: 'pt-PT',\r\n  1042: 'ko-KR',\r\n  13322: 'es-CL',\r\n  9226: 'es-CO',\r\n  5132: 'fr-LU',\r\n  7177: 'en-ZA',\r\n  2052: 'zh-CN',\r\n  1041: 'ja-JP',\r\n  2058: 'es-MX',\r\n};\r\n\r\nexport const adQualityLocales = {\r\n  14337: 'ar-ae',\r\n  3073: 'ar-eg',\r\n  1025: 'ar-sa',\r\n  1093: 'bn-in',\r\n  1029: 'cs-cz',\r\n  1030: 'da-dk',\r\n  3079: 'de-at',\r\n  2055: 'de-ch',\r\n  1031: 'de-de',\r\n  1032: 'el-gr',\r\n  // Note: my system did not find an LCID for en-ae (MSN's English UAE), so I am using placeholder -4\r\n  '-4': 'en-ae',\r\n  3081: 'en-au',\r\n  4105: 'en-ca',\r\n  2057: 'en-gb',\r\n  14345: 'en-id',\r\n  6153: 'en-ie',\r\n  16393: 'en-in',\r\n  17417: 'en-my',\r\n  5129: 'en-nz',\r\n  13321: 'en-ph',\r\n  18441: 'en-sg',\r\n  1033: 'en-us',\r\n  // Note: my system did not find an LCID for en-xl (MSN's English International), so I am using placeholder -1\r\n  '-1': 'en-xl',\r\n  7177: 'en-za',\r\n  11274: 'es-ar',\r\n  13322: 'es-cl',\r\n  9226: 'es-co',\r\n  12298: 'es-ec',\r\n  3082: 'es-es',\r\n  2058: 'es-mx',\r\n  10250: 'es-pe',\r\n  21514: 'es-us',\r\n  8202: 'es-ve',\r\n  // Note: my system did not find an LCID for es-xl (MSN's Spanish - Latin America), so I am using placeholder -3\r\n  '-3': 'es-xl',\r\n  1035: 'fi-fi',\r\n  2060: 'fr-be',\r\n  3084: 'fr-ca',\r\n  4108: 'fr-ch',\r\n  1036: 'fr-fr',\r\n  5132: 'fr-lu',\r\n  // Note: my system did not find an LCID for fr-xl (MSN's French - Africa), so I am using placeholder -2\r\n  '-2': 'fr-xl',\r\n  1037: 'he-il',\r\n  1081: 'hi-in',\r\n  1038: 'hu-hu',\r\n  1057: 'id-id',\r\n  1040: 'it-it',\r\n  1041: 'ja-jp',\r\n  1042: 'ko-kr',\r\n  1063: 'lt-lt',\r\n  1102: 'mr-in',\r\n  1044: 'nb-no',\r\n  2067: 'nl-be',\r\n  1043: 'nl-nl',\r\n  1045: 'pl-pl',\r\n  1046: 'pt-br',\r\n  2070: 'pt-pt',\r\n  1049: 'ru-ru',\r\n  1053: 'sv-se',\r\n  1098: 'te-in',\r\n  1054: 'th-th',\r\n  1055: 'tr-tr',\r\n  1066: 'vi-vn',\r\n  2052: 'zh-cn',\r\n  3076: 'zh-hk',\r\n  4100: 'zh-sg',\r\n  1028: 'zh-tw',\r\n};\r\n\r\nexport const reverseLocales = {\r\n  'en-us': 1033,\r\n  'fr-fr': 1036,\r\n  'de-de': 1031,\r\n  'it-it': 1040,\r\n  'en-gb': 2057,\r\n  'fr-ca': 3084,\r\n  'es-es': 3082,\r\n  'es-mx': 2058,\r\n};\r\n","import { createStore } from 'satcheljs';\r\nimport { IHomeViewState } from './schema/IHomeViewState';\r\n\r\nimport '../orchestrators';\r\n\r\nexport const getStore = createStore<IHomeViewState>('HomeViewState', {\r\n  active: {\r\n    showDialog: true,\r\n  },\r\n  isStatusLoading: false,\r\n  isSetupDone: false,\r\n  isFRECardShown: false,\r\n});\r\n","import { FontWeights, getTheme, ITheme, mergeStyleSets } from '@fluentui/react';\r\nimport { IPubcenterTheme } from '../../../theme';\r\nimport { flexWithCenter } from '../../utils/GlobalStyleUtils';\r\n\r\nexport interface IZeroResultsStyleProps {\r\n  theme: ITheme;\r\n}\r\n\r\nexport interface IZeroResultsStyles {\r\n  rootStyle?: string;\r\n  imageContainerStyle?: string;\r\n  descriptionStyle?: string;\r\n  titleStyle?: string;\r\n  imageStyle?: string;\r\n}\r\n\r\nconst IMAGE_HEIGHT = 200;\r\n\r\nexport const getStyles = (props: IZeroResultsStyleProps): IZeroResultsStyles => {\r\n  const theme = (props.theme as unknown) as IPubcenterTheme;\r\n  const { spacing, fonts, palette } = theme;\r\n\r\n  return mergeStyleSets({\r\n    rootStyle: {\r\n      ...flexWithCenter,\r\n      flexDirection: 'column',\r\n      margin: '0 auto 42px auto',\r\n      height: 'calc(100vh - 300px)',\r\n      width: '100%',\r\n    },\r\n    imageStyle: {\r\n      margin: '0 auto',\r\n    },\r\n    imageContainerStyle: {\r\n      width: IMAGE_HEIGHT,\r\n      height: IMAGE_HEIGHT,\r\n    },\r\n    descriptionStyle: {\r\n      ...fonts.size16,\r\n      marginTop: 0,\r\n    },\r\n    titleStyle: {\r\n      ...fonts.size20,\r\n      fontWeight: FontWeights.semibold,\r\n      color: palette.neutralSecondary,\r\n      marginBottom: spacing.size16,\r\n    },\r\n  });\r\n};\r\n\r\nexport function getClassNames<PropType>(props?: PropType): IZeroResultsStyles {\r\n  return getStyles({ theme: getTheme(), ...props });\r\n}\r\n","import { DefaultButton, Image, mergeStyleSets } from '@fluentui/react';\r\nimport React from 'react';\r\nimport { Link } from 'react-router-dom';\r\nimport { IZeroResultsStyles, getClassNames } from './ZeroResults.styles';\r\nimport defaultImage from './resources/default.svg';\r\n\r\nexport interface IZeroResultsProps {\r\n  showDefaultImage?: boolean;\r\n  imageSrc?: string;\r\n  title?: string;\r\n  description?: string;\r\n  buttonText?: string;\r\n  href?: string;\r\n  onButtonClick?: () => void;\r\n  styleProps?: Partial<IZeroResultsStyles>;\r\n  children?: React.ReactNode;\r\n}\r\n\r\nexport function ZeroResults({\r\n  showDefaultImage,\r\n  imageSrc,\r\n  title,\r\n  description,\r\n  buttonText,\r\n  onButtonClick,\r\n  href,\r\n  styleProps,\r\n  children,\r\n}: IZeroResultsProps) {\r\n  const { rootStyle, imageContainerStyle, descriptionStyle, titleStyle, imageStyle } = mergeStyleSets(getClassNames(), styleProps);\r\n\r\n  return (\r\n    <div className={rootStyle}>\r\n      {(imageSrc || showDefaultImage) && (\r\n        <div className={imageContainerStyle}>\r\n          <Image src={imageSrc ?? defaultImage} shouldFadeIn styles={{ image: imageStyle }} aria-label={title ?? description} />\r\n        </div>\r\n      )}\r\n      {title && <strong className={titleStyle}>{title}</strong>}\r\n      {description && <p className={descriptionStyle}>{description}</p>}\r\n      {buttonText && onButtonClick && <DefaultButton onClick={onButtonClick}>{buttonText}</DefaultButton>}\r\n      {buttonText && href && (\r\n        <Link to={href} tabIndex={-1}>\r\n          <DefaultButton text={buttonText} />\r\n        </Link>\r\n      )}\r\n      {children}\r\n    </div>\r\n  );\r\n}\r\n","import { getCurrentPublisher } from '../../selectors';\r\nimport { getAppStore } from '../store';\r\n\r\nexport const getCurrentUserContext = () => {\r\n  return getAppStore().userContext;\r\n};\r\n\r\nexport const getPrimaryUserId = () => {\r\n  return getCurrentPublisher()?.extendedProperties?.primaryContactUserId || getCurrentUserContext()?.id;\r\n};\r\n","import { createStore } from 'satcheljs';\r\nimport { IReportViewState } from './schema/IReportViewState';\r\n\r\nexport enum RouteName {\r\n  dashboard = 'dashboard',\r\n  reportDetails = 'report-details',\r\n}\r\n\r\nexport const defaultRoute = RouteName.dashboard;\r\n\r\nexport const getPageStore = createStore<IReportViewState>('ReportViewState', {\r\n  loading: false,\r\n});\r\n","import { uiConfig } from '../../config/ui.config';\r\nimport { IColumnMemberDetails, IMetadataElement } from '../../pages/report/DashboardCards/@data/store/schema';\r\nimport { MediationReportingDataRequestBody } from '../store/schema/models/MediationReportingDataRequestBody';\r\nimport { ReportColumnMembersParams } from '../store/schema/models/ReportColumnMembersParams';\r\nimport { MediationReportingDataResponse } from '../store/schema/models/ReportingDataResponse';\r\nimport { handleApiErrors, handleError } from '../utils/handleApiErrors';\r\nimport { buildRequestHeadersWithAuthToken } from '../utils/requestUtils';\r\nimport { ApiError } from './ApiService';\r\n\r\nexport async function getMediationReportData(\r\n  requestBody: MediationReportingDataRequestBody,\r\n  abortController: AbortController\r\n): Promise<{ data: MediationReportingDataResponse; aborted: boolean }> {\r\n  const baseUrl = `${uiConfig.getMediationReportingApiBaseAddress()}`;\r\n  const redirectUrl = 'mediation/adSense/report/data';\r\n  const url = baseUrl + redirectUrl;\r\n\r\n  const headers = await buildRequestHeadersWithAuthToken(url);\r\n\r\n  let response: Response;\r\n  try {\r\n    response = await fetch(url, {\r\n      method: 'POST',\r\n      headers: headers,\r\n      body: JSON.stringify(requestBody),\r\n      signal: abortController.signal,\r\n    });\r\n    if (!response.ok) {\r\n      return handleApiErrors<{ data: MediationReportingDataResponse; aborted: boolean }>(response, url);\r\n    }\r\n\r\n    const responseJson = await response.json();\r\n    if (responseJson) {\r\n      return { data: responseJson, aborted: false };\r\n    }\r\n    return Promise.resolve({ aborted: false } as { data: MediationReportingDataResponse; aborted: boolean });\r\n  } catch (err) {\r\n    if (err.name === 'AbortError') {\r\n      return Promise.resolve({ aborted: true } as { data: MediationReportingDataResponse; aborted: boolean });\r\n    }\r\n    const error = `getReportData operation failed for ${url}. Errors: ${err}`;\r\n    return handleError(new ApiError(500, error), url);\r\n  }\r\n}\r\n\r\nexport async function getDimensions(reportType: string): Promise<IMetadataElement[]> {\r\n  const baseUrl = `${uiConfig.getMediationReportingApiBaseAddress()}`;\r\n  const redirectUrl = `mediation/adSense/report/metadata/dimensions`;\r\n  const url = baseUrl + redirectUrl;\r\n\r\n  const headers = await buildRequestHeadersWithAuthToken(url);\r\n\r\n  let response: Response;\r\n\r\n  try {\r\n    response = await fetch(url, {\r\n      method: 'GET',\r\n      headers,\r\n    });\r\n\r\n    if (!response.ok) {\r\n      return handleApiErrors<IMetadataElement[]>(response, url);\r\n    }\r\n\r\n    const responseJson = await response.json();\r\n\r\n    if (responseJson) {\r\n      return responseJson.data;\r\n    }\r\n    return Promise.resolve([]);\r\n  } catch (err) {\r\n    const error = `getDimensions operation failed for ${url}. Errors: ${err}`;\r\n    return handleError(new ApiError(500, error), url);\r\n  }\r\n}\r\n\r\nexport async function getMetrics(reportType: string): Promise<IMetadataElement[]> {\r\n  const baseUrl = `${uiConfig.getMediationReportingApiBaseAddress()}`;\r\n  const redirectUrl = `mediation/adSense/report/metadata/metrics`;\r\n  const url = baseUrl + redirectUrl;\r\n\r\n  const headers = await buildRequestHeadersWithAuthToken(url);\r\n\r\n  let response: Response;\r\n\r\n  try {\r\n    response = await fetch(url, {\r\n      method: 'GET',\r\n      headers,\r\n    });\r\n\r\n    if (!response.ok) {\r\n      return handleApiErrors<IMetadataElement[]>(response, url);\r\n    }\r\n\r\n    const responseJson = await response.json();\r\n\r\n    if (responseJson) {\r\n      return responseJson.data;\r\n    }\r\n    return Promise.resolve([]);\r\n  } catch (err) {\r\n    const error = `getMetrics operation failed for ${url}. Errors: ${err}`;\r\n    return handleError(new ApiError(500, error), url);\r\n  }\r\n}\r\n\r\nexport async function getGranularity(reportType: string): Promise<IMetadataElement[]> {\r\n  const baseUrl = `${uiConfig.getMediationReportingApiBaseAddress()}`;\r\n  const redirectUrl = `mediation/adSense/report/metadata/grains`;\r\n  const url = baseUrl + redirectUrl;\r\n\r\n  const headers = await buildRequestHeadersWithAuthToken(url);\r\n\r\n  let response: Response;\r\n\r\n  try {\r\n    response = await fetch(url, {\r\n      method: 'GET',\r\n      headers,\r\n    });\r\n\r\n    if (!response.ok) {\r\n      return handleApiErrors<IMetadataElement[]>(response, url);\r\n    }\r\n\r\n    const responseJson = await response.json();\r\n\r\n    if (responseJson) {\r\n      return responseJson.data;\r\n    }\r\n    return Promise.resolve([]);\r\n  } catch (err) {\r\n    const error = `getGranularity operation failed for ${url}. Errors: ${err}`;\r\n    return handleError(new ApiError(500, error), url);\r\n  }\r\n}\r\n\r\nexport async function getColumnMembers(requestParams: ReportColumnMembersParams): Promise<IColumnMemberDetails[]> {\r\n  const baseUrl = `${uiConfig.getMediationReportingApiBaseAddress()}`;\r\n  const redirectUrl = `mediation/adSense/report/metadata/columnMembers?${new URLSearchParams(requestParams)}`;\r\n  const url = baseUrl + encodeURIComponent(redirectUrl);\r\n\r\n  const headers = await buildRequestHeadersWithAuthToken(url);\r\n\r\n  let response: Response;\r\n\r\n  try {\r\n    response = await fetch(url, {\r\n      method: 'GET',\r\n      headers,\r\n    });\r\n\r\n    if (!response.ok) {\r\n      return handleApiErrors<IColumnMemberDetails[]>(response, url);\r\n    }\r\n\r\n    const responseJson = await response.json();\r\n\r\n    if (responseJson) {\r\n      return responseJson.data;\r\n    }\r\n    return Promise.resolve([]);\r\n  } catch (err) {\r\n    const error = `getColumnMembers operation failed for ${url}. Errors: ${err}`;\r\n    return handleError(new ApiError(500, error), url);\r\n  }\r\n}\r\n","import { useQuery } from '@tanstack/react-query';\r\nimport { showErrorToastNotification } from '../../../@data';\r\nimport {\r\n  getDimensions as getMediationDimensions,\r\n  getGranularity as getMediationGranularity,\r\n  getMetrics as getMediationMetrics,\r\n  getMediationReportData,\r\n} from '../../../@data/services/MediationReportingService';\r\nimport { getDimensions, getGranularity, getMetrics, getReportData } from '../../../@data/services/ReportingService';\r\nimport { MediationReportingDataRequestBody } from '../../../@data/store/schema/models/MediationReportingDataRequestBody';\r\nimport { ReportingDataRequestBody } from '../../../@data/store/schema/models/ReportingDataRequestBody';\r\nimport { getAdunitStore } from '../../ad-management/Adunit/@data';\r\nimport { IReportsMetadata, MediationReportingDataRow } from '../DashboardCards/@data/store/schema';\r\nimport { getReportType } from '../DashboardCards/@data/store/selectors';\r\nimport { mapAdUnitName } from '../DashboardCards/@data/utils/mapAdUnitName';\r\nimport { ReportCardType } from '../DashboardCards/ReportCard/ReportCard.types';\r\nimport ReportMessages from '../Report.messages';\r\n\r\nexport function useReportQuery(reportRequestBody: ReportingDataRequestBody, isDetailedReport: boolean, enabled: boolean) {\r\n  const { isLoading, isError, data, error } = useQuery({\r\n    queryKey: ['reportData', { ...reportRequestBody, columns: reportRequestBody.columns.sort(), callerGuid: '' }],\r\n    queryFn: async () => {\r\n      const { data: reportData } = await getReportData(reportRequestBody, new AbortController());\r\n      return reportData.Data;\r\n    },\r\n    onError: () => {\r\n      const isSummaryReport = ReportCardType[reportRequestBody.reportName] === ReportCardType.SUMMARY;\r\n      const messageDescriptor = isSummaryReport\r\n        ? ReportMessages.loadingReportSummaryFailedMessage\r\n        : isDetailedReport\r\n        ? ReportMessages.loadingDetailedReportFailedMessage\r\n        : ReportMessages.loadingReportFailedMessage;\r\n      showErrorToastNotification({\r\n        textMessageDescriptor: messageDescriptor,\r\n        intlMessageValues: { reportType: reportRequestBody.reportName.toLowerCase() },\r\n      });\r\n    },\r\n    enabled,\r\n    staleTime: 3600000,\r\n    refetchOnWindowFocus: true,\r\n    refetchOnMount: true,\r\n    refetchOnReconnect: true,\r\n  });\r\n  return { isLoading, isError, data, error };\r\n}\r\nexport function useMediationReportQuery(reportRequestBody: MediationReportingDataRequestBody, enabled: boolean) {\r\n  const { isLoading, isError, data, error } = useQuery({\r\n    queryKey: ['reportData', { ...reportRequestBody, columns: reportRequestBody.columns.sort(), callerGuid: '' }],\r\n    queryFn: async () => {\r\n      const { data: reportData } = await getMediationReportData(reportRequestBody, new AbortController());\r\n      const {\r\n        adUnitsRaw: { data: adUnitsData },\r\n      } = getAdunitStore();\r\n      const transformedData: MediationReportingDataRow[] = mapAdUnitName(reportData, adUnitsData);\r\n      return transformedData;\r\n    },\r\n    onError: () => {\r\n      showErrorToastNotification({\r\n        textMessageDescriptor: ReportMessages.loadingMediationReportFailedMessage,\r\n      });\r\n    },\r\n    enabled: enabled && !getAdunitStore().isFetchingAdUnitStatus,\r\n    staleTime: 3600000,\r\n    refetchOnWindowFocus: true,\r\n    refetchOnMount: true,\r\n    refetchOnReconnect: true,\r\n  });\r\n  return { isLoading, isError, data, error };\r\n}\r\n\r\nexport function useReportMetadata() {\r\n  const { isLoading, isError, data, error } = useQuery({\r\n    queryKey: ['reportMetadata'],\r\n    queryFn: async () => {\r\n      const reportType = getReportType();\r\n      const [dimensions, metrics, grains] = await Promise.all([\r\n        getDimensions(reportType),\r\n        getMetrics(reportType),\r\n        getGranularity(reportType),\r\n      ]);\r\n      return { dimensions, metrics, grains } as IReportsMetadata;\r\n    },\r\n    onError: () => {\r\n      showErrorToastNotification({ textMessageDescriptor: ReportMessages.loadingReportMetadataFailedMessage });\r\n    },\r\n    staleTime: 24 * 60 * 60 * 1000,\r\n    refetchOnWindowFocus: true,\r\n    refetchOnMount: true,\r\n    refetchOnReconnect: true,\r\n  });\r\n  return { isLoading, isError, data, error };\r\n}\r\nexport function useMediationReportMetadata(enabled = true) {\r\n  const { isLoading, isError, data, error } = useQuery({\r\n    queryKey: ['mediationReportMetadata'],\r\n    queryFn: async () => {\r\n      const reportType = getReportType();\r\n      const [dimensions, metrics, grains] = await Promise.all([\r\n        getMediationDimensions(reportType),\r\n        getMediationMetrics(reportType),\r\n        getMediationGranularity(reportType),\r\n      ]);\r\n      return { dimensions, metrics, grains } as IReportsMetadata;\r\n    },\r\n    onError: () => {\r\n      showErrorToastNotification({ textMessageDescriptor: ReportMessages.loadingReportMetadataFailedMessage });\r\n    },\r\n    enabled,\r\n    staleTime: 24 * 60 * 60 * 1000,\r\n    refetchOnWindowFocus: true,\r\n    refetchOnMount: true,\r\n    refetchOnReconnect: true,\r\n  });\r\n  return { isLoading, isError, data, error };\r\n}\r\n","import { AdUnit } from '../../../../../@data';\r\nimport { MediationReportingDataResponse, MediationReportingDataRow } from '../store/schema';\r\n\r\nexport function mapAdUnitName(data: MediationReportingDataResponse, adUnitsData: AdUnit[] = []): MediationReportingDataRow[] {\r\n  return data.data.map((item) => {\r\n    const matchingAdUnit = adUnitsData?.find((adUnit) => adUnit.id.toString() === item.PubCenterAdUnitId);\r\n    return {\r\n      ...item,\r\n      AdUnitName: matchingAdUnit ? String(matchingAdUnit.name) : item.AdUnitName,\r\n    };\r\n  });\r\n}\r\n","import { mutatorAction } from 'satcheljs';\r\nimport { AccountStatus, PaymentsPageBalance, PaymentsPageEstimatedEarnings, XPayJwtTokenRequest } from '../../../../../@data';\r\nimport { ChartGrain } from '../../Payments/EstimatedEarnings/EstimatedEarnings.types';\r\nimport { getAccountStatusData } from '../store/accountStatusStore';\r\nimport { getPaymentsPageData } from '../store/paymentsPageStore';\r\nimport { getPaymentsPageBalance, getPaymentsPageEstimatedEarnings } from '../store/selectors';\r\n\r\nexport const setBalanceIsDataLoadedAction = mutatorAction('setBalanceIsDataLoadedAction', (isDataLoaded: boolean) => {\r\n  getPaymentsPageBalance().isDataLoaded = isDataLoaded;\r\n});\r\nexport const setEstimatedEarningsIsDataLoadedAction = mutatorAction(\r\n  'setEstimatedEarningsIsDataLoadedAction',\r\n  (isDataLoaded: boolean, grain: ChartGrain) => {\r\n    getPaymentsPageEstimatedEarnings()[grain].isDataLoaded = isDataLoaded;\r\n  }\r\n);\r\nexport const setBalanceDataAction = mutatorAction('setBalanceDataAction', (data: PaymentsPageBalance) => {\r\n  getPaymentsPageBalance().data = data;\r\n});\r\nexport const setEstimatedEarningsDataAction = mutatorAction(\r\n  'setEstimatedEarningsDataAction',\r\n  (data: PaymentsPageEstimatedEarnings, grain: ChartGrain) => {\r\n    getPaymentsPageEstimatedEarnings()[grain].data = data;\r\n  }\r\n);\r\nexport const setAccountStatusDataAction = mutatorAction('setAccountStatusDataAction', (data: AccountStatus) => {\r\n  getAccountStatusData().status = data.status;\r\n});\r\nexport const setAccountStatusIsLoading = mutatorAction('setAccountStatusIsLoading', (isLoading: boolean) => {\r\n  getAccountStatusData().isLoading = isLoading;\r\n});\r\n\r\nexport const setXpayJwtToken = mutatorAction('setXpayJwtToken', (xpayJwtToken: string, xpayJwtTokenRequest: XPayJwtTokenRequest) => {\r\n  getPaymentsPageData().xpayJwtToken = xpayJwtToken;\r\n  getPaymentsPageData().xpayJwtTokenRequest = xpayJwtTokenRequest;\r\n});\r\nexport const setXpayJwtTokenExpirationTime = mutatorAction('setXpayJwtTokenExpirationTime', (tokenExpirationTime: number) => {\r\n  getPaymentsPageData().xpayTokenExpirationTimeStamp = tokenExpirationTime;\r\n});\r\nexport const setXpayJwtTokenStatusIsLoading = mutatorAction('setXpayJwtTokenStatusIsLoading', (isLoading: boolean) => {\r\n  getPaymentsPageData().xpayJwtTokenStatusIsLoading = isLoading;\r\n});\r\n","export interface IDictionary<T> {\r\n  [key: string]: T;\r\n}\r\n\r\nexport const COUNTRIES: IDictionary<string> = {\r\n  AF: 'Afghanistan',\r\n  AL: 'Albania',\r\n  DZ: 'Algeria',\r\n  AS: 'American Samoa',\r\n  AD: 'Andorra',\r\n  AO: 'Angola',\r\n  AI: 'Anguilla',\r\n  AQ: 'Antarctica',\r\n  AG: 'Antigua and Barbuda',\r\n  AR: 'Argentina',\r\n  AM: 'Armenia',\r\n  AW: 'Aruba',\r\n  AU: 'Australia',\r\n  AT: 'Austria',\r\n  AZ: 'Azerbaijan',\r\n  BS: 'Bahamas',\r\n  BH: 'Bahrain',\r\n  BD: 'Bangladesh',\r\n  BB: 'Barbados',\r\n  BY: 'Belarus',\r\n  BE: 'Belgium',\r\n  BZ: 'Belize',\r\n  BJ: 'Benin',\r\n  BM: 'Bermuda',\r\n  BT: 'Bhutan',\r\n  BO: 'Bolivia',\r\n  BA: 'Bosnia and Herzegovina',\r\n  BW: 'Botswana',\r\n  BV: 'Bouvet Island',\r\n  BR: 'Brazil',\r\n  IO: 'British Indian Ocean Territory',\r\n  BN: 'Brunei',\r\n  BG: 'Bulgaria',\r\n  BF: 'Burkina Faso',\r\n  BI: 'Burundi',\r\n  CI: 'Côte d’Ivoire',\r\n  KH: 'Cambodia',\r\n  CM: 'Cameroon',\r\n  CA: 'Canada',\r\n  CV: 'Cape Verde',\r\n  KY: 'Cayman Islands',\r\n  CF: 'Central African Republic',\r\n  TD: 'Chad',\r\n  CL: 'Chile',\r\n  CN: 'China',\r\n  CX: 'Christmas Island',\r\n  CC: 'Cocos (Keeling) Islands',\r\n  CO: 'Colombia',\r\n  KM: 'Comoros',\r\n  CG: 'Congo',\r\n  CD: 'Congo (DRC)',\r\n  CK: 'Cook Islands',\r\n  CR: 'Costa Rica',\r\n  HR: 'Croatia',\r\n  CY: 'Cyprus',\r\n  CZ: 'Czech Republic',\r\n  DK: 'Denmark',\r\n  DJ: 'Djibouti',\r\n  DM: 'Dominica',\r\n  DO: 'Dominican Republic',\r\n  EC: 'Ecuador',\r\n  EG: 'Egypt',\r\n  SV: 'El Salvador',\r\n  GQ: 'Equatorial Guinea',\r\n  ER: 'Eritrea',\r\n  EE: 'Estonia',\r\n  ET: 'Ethiopia',\r\n  FK: 'Falkland Islands (Islas Malvinas)',\r\n  FO: 'Faroe Islands',\r\n  FJ: 'Fiji Islands',\r\n  FI: 'Finland',\r\n  FR: 'France',\r\n  GF: 'French Guiana',\r\n  PF: 'French Polynesia',\r\n  TF: 'French Southern and Antarctic Lands',\r\n  GA: 'Gabon',\r\n  GM: 'Gambia',\r\n  GE: 'Georgia',\r\n  DE: 'Germany',\r\n  GH: 'Ghana',\r\n  GI: 'Gibraltar',\r\n  GR: 'Greece',\r\n  GL: 'Greenland',\r\n  GD: 'Grenada',\r\n  GP: 'Guadeloupe',\r\n  GU: 'Guam',\r\n  GT: 'Guatemala',\r\n  GN: 'Guinea',\r\n  GW: 'Guinea-Bissau',\r\n  GY: 'Guyana',\r\n  HT: 'Haiti',\r\n  HM: 'Heard Island and McDonald Islands',\r\n  HN: 'Honduras',\r\n  HK: 'Hong Kong SAR',\r\n  HU: 'Hungary',\r\n  IS: 'Iceland',\r\n  IN: 'India',\r\n  ID: 'Indonesia',\r\n  IQ: 'Iraq',\r\n  IE: 'Ireland',\r\n  IL: 'Israel',\r\n  IT: 'Italy',\r\n  JM: 'Jamaica',\r\n  JP: 'Japan',\r\n  JO: 'Jordan',\r\n  KZ: 'Kazakhstan',\r\n  KE: 'Kenya',\r\n  KI: 'Kiribati',\r\n  KR: 'Korea',\r\n  KW: 'Kuwait',\r\n  KG: 'Kyrgyzstan',\r\n  LA: 'Laos',\r\n  '99': 'Latin America',\r\n  LV: 'Latvia',\r\n  LB: 'Lebanon',\r\n  LS: 'Lesotho',\r\n  LR: 'Liberia',\r\n  LY: 'Libya',\r\n  LI: 'Liechtenstein',\r\n  LT: 'Lithuania',\r\n  LU: 'Luxembourg',\r\n  MO: 'Macao SAR',\r\n  MK: 'Macedonia',\r\n  MG: 'Madagascar',\r\n  MW: 'Malawi',\r\n  MY: 'Malaysia',\r\n  MV: 'Maldives',\r\n  ML: 'Mali',\r\n  MT: 'Malta',\r\n  MH: 'Marshall Islands',\r\n  MQ: 'Martinique',\r\n  MR: 'Mauritania',\r\n  MU: 'Mauritius',\r\n  YT: 'Mayotte',\r\n  MX: 'Mexico',\r\n  FM: 'Micronesia',\r\n  MD: 'Moldova',\r\n  MC: 'Monaco',\r\n  MN: 'Mongolia',\r\n  MS: 'Montserrat',\r\n  MA: 'Morocco',\r\n  MZ: 'Mozambique',\r\n  MM: 'Myanmar',\r\n  NA: 'Namibia',\r\n  NR: 'Nauru',\r\n  NP: 'Nepal',\r\n  AN: 'Netherlands Antilles',\r\n  NL: 'Netherlands',\r\n  NC: 'New Caledonia',\r\n  NZ: 'New Zealand',\r\n  NI: 'Nicaragua',\r\n  NE: 'Niger',\r\n  NG: 'Nigeria',\r\n  NU: 'Niue',\r\n  NF: 'Norfolk Island',\r\n  MP: 'Northern Mariana Islands',\r\n  NO: 'Norway',\r\n  OM: 'Oman',\r\n  PK: 'Pakistan',\r\n  PW: 'Palau',\r\n  PS: 'Palestinian Authority',\r\n  PA: 'Panama',\r\n  PG: 'Papua New Guinea',\r\n  PY: 'Paraguay',\r\n  PE: 'Peru',\r\n  PH: 'Philippines',\r\n  PN: 'Pitcairn Islands',\r\n  PL: 'Poland',\r\n  PT: 'Portugal',\r\n  PR: 'Puerto Rico',\r\n  QA: 'Qatar',\r\n  SD: 'Republic of the Sudan',\r\n  '97': 'Rest Of World',\r\n  RE: 'Reunion',\r\n  RO: 'Romania',\r\n  RU: 'Russia',\r\n  RW: 'Rwanda',\r\n  SH: 'Saint Helena',\r\n  KN: 'Saint Kitts and Nevis',\r\n  LC: 'Saint Lucia',\r\n  PM: 'Saint Pierre and Miquelon',\r\n  VC: 'Saint Vincent and the Grenadines',\r\n  WS: 'Samoa',\r\n  SM: 'San Marino',\r\n  ST: 'São Tomé and Príncipe',\r\n  SA: 'Saudi Arabia',\r\n  SN: 'Senegal',\r\n  RS: 'Serbia',\r\n  CS: 'Serbia and Montenegro',\r\n  SC: 'Seychelles',\r\n  SL: 'Sierra Leone',\r\n  SG: 'Singapore',\r\n  SK: 'Slovakia',\r\n  SI: 'Slovenia',\r\n  SB: 'Solomon Islands',\r\n  SO: 'Somalia',\r\n  ZA: 'South Africa',\r\n  GS: 'South Georgia and the South Sandwich Islands',\r\n  ES: 'Spain',\r\n  LK: 'Sri Lanka',\r\n  SR: 'Suriname',\r\n  SJ: 'Svalbard',\r\n  SZ: 'Swaziland',\r\n  SE: 'Sweden',\r\n  CH: 'Switzerland',\r\n  TW: 'Taiwan',\r\n  TJ: 'Tajikistan',\r\n  TZ: 'Tanzania',\r\n  '96': 'TEST USE ONLY',\r\n  TH: 'Thailand',\r\n  TL: 'Timor-Leste',\r\n  TG: 'Togo',\r\n  TK: 'Tokelau',\r\n  TO: 'Tonga',\r\n  TT: 'Trinidad and Tobago',\r\n  TN: 'Tunisia',\r\n  TR: 'Turkey',\r\n  TM: 'Turkmenistan',\r\n  TC: 'Turks and Caicos Islands',\r\n  TV: 'Tuvalu',\r\n  UM: 'U.S. Minor Outlying Islands',\r\n  UG: 'Uganda',\r\n  UA: 'Ukraine',\r\n  AE: 'United Arab Emirates',\r\n  GB: 'United Kingdom',\r\n  US: 'United States',\r\n  UY: 'Uruguay',\r\n  UZ: 'Uzbekistan',\r\n  VU: 'Vanuatu',\r\n  VA: 'Vatican City',\r\n  VE: 'Venezuela',\r\n  VN: 'Vietnam',\r\n  VG: 'Virgin Islands',\r\n  VI: 'Virgin Islands',\r\n  WF: 'Wallis and Futuna',\r\n  ZW: 'Zimbabwe',\r\n  YE: 'Yemen',\r\n  ZM: 'Zambia',\r\n};\r\n\r\nexport const COUNTRIES_EN: IDictionary<string> = {\r\n  AF: 'Afghanistan',\r\n  AL: 'Albania',\r\n  DZ: 'Algeria',\r\n  AS: 'American Samoa',\r\n  AD: 'Andorra',\r\n  AO: 'Angola',\r\n  AI: 'Anguilla',\r\n  AQ: 'Antarctica',\r\n  AG: 'Antigua and Barbuda',\r\n  AR: 'Argentina',\r\n  AM: 'Armenia',\r\n  AW: 'Aruba',\r\n  AU: 'Australia',\r\n  AT: 'Austria',\r\n  AZ: 'Azerbaijan',\r\n  BS: 'Bahamas',\r\n  BH: 'Bahrain',\r\n  BD: 'Bangladesh',\r\n  BB: 'Barbados',\r\n  BY: 'Belarus',\r\n  BE: 'Belgium',\r\n  BZ: 'Belize',\r\n  BJ: 'Benin',\r\n  BM: 'Bermuda',\r\n  BT: 'Bhutan',\r\n  BO: 'Bolivia (Plurinational State of)',\r\n  BQ: 'Bonaire, Sint Eustatius and Saba',\r\n  BA: 'Bosnia and Herzegovina',\r\n  BW: 'Botswana',\r\n  BV: 'Bouvet Island',\r\n  BR: 'Brazil',\r\n  IO: 'British Indian Ocean Territory',\r\n  BN: 'Brunei Darussalam',\r\n  BG: 'Bulgaria',\r\n  BF: 'Burkina Faso',\r\n  BI: 'Burundi',\r\n  CV: 'Cabo Verde',\r\n  KH: 'Cambodia',\r\n  CM: 'Cameroon',\r\n  CA: 'Canada',\r\n  KY: 'Cayman Islands',\r\n  CF: 'Central African Republic',\r\n  TD: 'Chad',\r\n  CL: 'Chile',\r\n  CN: 'China',\r\n  CX: 'Christmas Island',\r\n  CC: 'Cocos (Keeling) Islands',\r\n  CO: 'Colombia',\r\n  KM: 'Comoros',\r\n  CG: 'Congo',\r\n  CD: 'Congo (Democratic Republic of the)',\r\n  CK: 'Cook Islands',\r\n  CR: 'Costa Rica',\r\n  HR: 'Croatia',\r\n  CU: 'Cuba',\r\n  CW: 'Curaçao',\r\n  CY: 'Cyprus',\r\n  CZ: 'Czechia',\r\n  CI: \"Côte d'Ivoire\",\r\n  DK: 'Denmark',\r\n  DJ: 'Djibouti',\r\n  DM: 'Dominica',\r\n  DO: 'Dominican Republic',\r\n  EC: 'Ecuador',\r\n  EG: 'Egypt',\r\n  SV: 'El Salvador',\r\n  GQ: 'Equatorial Guinea',\r\n  ER: 'Eritrea',\r\n  EE: 'Estonia',\r\n  ET: 'Ethiopia',\r\n  FK: 'Falkland Islands (Malvinas)',\r\n  FO: 'Faroe Islands',\r\n  FJ: 'Fiji',\r\n  FI: 'Finland',\r\n  FR: 'France',\r\n  GF: 'French Guiana',\r\n  PF: 'French Polynesia',\r\n  TF: 'French Southern Territories',\r\n  GA: 'Gabon',\r\n  GM: 'Gambia',\r\n  GE: 'Georgia',\r\n  DE: 'Germany',\r\n  GH: 'Ghana',\r\n  GI: 'Gibraltar',\r\n  GR: 'Greece',\r\n  GL: 'Greenland',\r\n  GD: 'Grenada',\r\n  GP: 'Guadeloupe',\r\n  GU: 'Guam',\r\n  GT: 'Guatemala',\r\n  GG: 'Guernsey',\r\n  GN: 'Guinea',\r\n  GW: 'Guinea-Bissau',\r\n  GY: 'Guyana',\r\n  HT: 'Haiti',\r\n  HM: 'Heard Island and McDonald Islands',\r\n  VA: 'Holy See',\r\n  HN: 'Honduras',\r\n  HK: 'Hong Kong',\r\n  HU: 'Hungary',\r\n  IS: 'Iceland',\r\n  IN: 'India',\r\n  ID: 'Indonesia',\r\n  IR: 'Iran (Islamic Republic of)',\r\n  IQ: 'Iraq',\r\n  IE: 'Ireland',\r\n  IM: 'Isle of Man',\r\n  IL: 'Israel',\r\n  IT: 'Italy',\r\n  JM: 'Jamaica',\r\n  JP: 'Japan',\r\n  JE: 'Jersey',\r\n  JO: 'Jordan',\r\n  KZ: 'Kazakhstan',\r\n  KE: 'Kenya',\r\n  KI: 'Kiribati',\r\n  KP: \"Korea (Democratic People's Republic of)\",\r\n  KR: 'Korea (Republic of)',\r\n  KW: 'Kuwait',\r\n  KG: 'Kyrgyzstan',\r\n  LA: \"Lao People's Democratic Republic\",\r\n  LV: 'Latvia',\r\n  LB: 'Lebanon',\r\n  LS: 'Lesotho',\r\n  LR: 'Liberia',\r\n  LY: 'Libya',\r\n  LI: 'Liechtenstein',\r\n  LT: 'Lithuania',\r\n  LU: 'Luxembourg',\r\n  MO: 'Macao',\r\n  MK: 'Macedonia (the former Yugoslav Republic of)',\r\n  MG: 'Madagascar',\r\n  MW: 'Malawi',\r\n  MY: 'Malaysia',\r\n  MV: 'Maldives',\r\n  ML: 'Mali',\r\n  MT: 'Malta',\r\n  MH: 'Marshall Islands',\r\n  MQ: 'Martinique',\r\n  MR: 'Mauritania',\r\n  MU: 'Mauritius',\r\n  YT: 'Mayotte',\r\n  MX: 'Mexico',\r\n  FM: 'Micronesia (Federated States of)',\r\n  MD: 'Moldova (Republic of)',\r\n  MC: 'Monaco',\r\n  MN: 'Mongolia',\r\n  ME: 'Montenegro',\r\n  MS: 'Montserrat',\r\n  MA: 'Morocco',\r\n  MZ: 'Mozambique',\r\n  MM: 'Myanmar',\r\n  NA: 'Namibia',\r\n  NR: 'Nauru',\r\n  NP: 'Nepal',\r\n  NL: 'Netherlands',\r\n  NC: 'New Caledonia',\r\n  NZ: 'New Zealand',\r\n  NI: 'Nicaragua',\r\n  NE: 'Niger',\r\n  NG: 'Nigeria',\r\n  NU: 'Niue',\r\n  NF: 'Norfolk Island',\r\n  MP: 'Northern Mariana Islands',\r\n  NO: 'Norway',\r\n  OM: 'Oman',\r\n  PK: 'Pakistan',\r\n  PW: 'Palau',\r\n  PS: 'Palestine, State of',\r\n  PA: 'Panama',\r\n  PG: 'Papua New Guinea',\r\n  PY: 'Paraguay',\r\n  PE: 'Peru',\r\n  PH: 'Philippines',\r\n  PN: 'Pitcairn',\r\n  PL: 'Poland',\r\n  PT: 'Portugal',\r\n  PR: 'Puerto Rico',\r\n  QA: 'Qatar',\r\n  RO: 'Romania',\r\n  RU: 'Russian Federation',\r\n  RW: 'Rwanda',\r\n  RE: 'Réunion',\r\n  BL: 'Saint Barthélemy',\r\n  SH: 'Saint Helena, Ascension and Tristan da Cunha',\r\n  KN: 'Saint Kitts and Nevis',\r\n  LC: 'Saint Lucia',\r\n  MF: 'Saint Martin (French part)',\r\n  PM: 'Saint Pierre and Miquelon',\r\n  VC: 'Saint Vincent and the Grenadines',\r\n  WS: 'Samoa',\r\n  SM: 'San Marino',\r\n  ST: 'Sao Tome and Principe',\r\n  SA: 'Saudi Arabia',\r\n  SN: 'Senegal',\r\n  RS: 'Serbia',\r\n  SC: 'Seychelles',\r\n  SL: 'Sierra Leone',\r\n  SG: 'Singapore',\r\n  SX: 'Sint Maarten (Dutch part)',\r\n  SK: 'Slovakia',\r\n  SI: 'Slovenia',\r\n  SB: 'Solomon Islands',\r\n  SO: 'Somalia',\r\n  ZA: 'South Africa',\r\n  GS: 'South Georgia and the South Sandwich Islands',\r\n  SS: 'South Sudan',\r\n  ES: 'Spain',\r\n  LK: 'Sri Lanka',\r\n  SD: 'Sudan',\r\n  SR: 'Suriname',\r\n  SJ: 'Svalbard and Jan Mayen',\r\n  SZ: 'Swaziland',\r\n  SE: 'Sweden',\r\n  CH: 'Switzerland',\r\n  SY: 'Syrian Arab Republic',\r\n  TW: 'Taiwan, Province of China[a]',\r\n  TJ: 'Tajikistan',\r\n  TZ: 'Tanzania, United Republic of',\r\n  TH: 'Thailand',\r\n  TL: 'Timor-Leste',\r\n  TG: 'Togo',\r\n  TK: 'Tokelau',\r\n  TO: 'Tonga',\r\n  TT: 'Trinidad and Tobago',\r\n  TN: 'Tunisia',\r\n  TR: 'Turkey',\r\n  TM: 'Turkmenistan',\r\n  TC: 'Turks and Caicos Islands',\r\n  TV: 'Tuvalu',\r\n  UG: 'Uganda',\r\n  UA: 'Ukraine',\r\n  AE: 'United Arab Emirates',\r\n  GB: 'United Kingdom of Great Britain',\r\n  UM: 'United States Minor Outlying Islands',\r\n  US: 'United States of America',\r\n  UY: 'Uruguay',\r\n  UZ: 'Uzbekistan',\r\n  VU: 'Vanuatu',\r\n  VE: 'Venezuela (Bolivarian Republic of)',\r\n  VN: 'Viet Nam',\r\n  VG: 'Virgin Islands (British)',\r\n  VI: 'Virgin Islands (U.S.)',\r\n  WF: 'Wallis and Futuna',\r\n  EH: 'Western Sahara',\r\n  YE: 'Yemen',\r\n  ZM: 'Zambia',\r\n  ZW: 'Zimbabwe',\r\n  AX: 'Åland Islands',\r\n};\r\n\r\nexport const COUNTRIES_EN_GB: IDictionary<string> = {\r\n  AF: 'Afghanistan',\r\n  AL: 'Albania',\r\n  DZ: 'Algeria',\r\n  AS: 'American Samoa',\r\n  AD: 'Andorra',\r\n  AO: 'Angola',\r\n  AI: 'Anguilla',\r\n  AQ: 'Antarctica',\r\n  AG: 'Antigua and Barbuda',\r\n  AR: 'Argentina',\r\n  AM: 'Armenia',\r\n  AW: 'Aruba',\r\n  AU: 'Australia',\r\n  AT: 'Austria',\r\n  AZ: 'Azerbaijan',\r\n  BS: 'Bahamas',\r\n  BH: 'Bahrain',\r\n  BD: 'Bangladesh',\r\n  BB: 'Barbados',\r\n  BY: 'Belarus',\r\n  BE: 'Belgium',\r\n  BZ: 'Belize',\r\n  BJ: 'Benin',\r\n  BM: 'Bermuda',\r\n  BT: 'Bhutan',\r\n  BO: 'Bolivia (Plurinational State of)',\r\n  BQ: 'Bonaire, Sint Eustatius and Saba',\r\n  BA: 'Bosnia and Herzegovina',\r\n  BW: 'Botswana',\r\n  BV: 'Bouvet Island',\r\n  BR: 'Brazil',\r\n  IO: 'British Indian Ocean Territory',\r\n  BN: 'Brunei Darussalam',\r\n  BG: 'Bulgaria',\r\n  BF: 'Burkina Faso',\r\n  BI: 'Burundi',\r\n  CV: 'Cabo Verde',\r\n  KH: 'Cambodia',\r\n  CM: 'Cameroon',\r\n  CA: 'Canada',\r\n  KY: 'Cayman Islands',\r\n  CF: 'Central African Republic',\r\n  TD: 'Chad',\r\n  CL: 'Chile',\r\n  CN: 'China',\r\n  CX: 'Christmas Island',\r\n  CC: 'Cocos (Keeling) Islands',\r\n  CO: 'Colombia',\r\n  KM: 'Comoros',\r\n  CG: 'Congo',\r\n  CD: 'Congo (Democratic Republic of the)',\r\n  CK: 'Cook Islands',\r\n  CR: 'Costa Rica',\r\n  HR: 'Croatia',\r\n  CU: 'Cuba',\r\n  CW: 'Curaçao',\r\n  CY: 'Cyprus',\r\n  CZ: 'Czechia',\r\n  CI: \"Côte d'Ivoire\",\r\n  DK: 'Denmark',\r\n  DJ: 'Djibouti',\r\n  DM: 'Dominica',\r\n  DO: 'Dominican Republic',\r\n  EC: 'Ecuador',\r\n  EG: 'Egypt',\r\n  SV: 'El Salvador',\r\n  GQ: 'Equatorial Guinea',\r\n  ER: 'Eritrea',\r\n  EE: 'Estonia',\r\n  ET: 'Ethiopia',\r\n  FK: 'Falkland Islands (Malvinas)',\r\n  FO: 'Faroe Islands',\r\n  FJ: 'Fiji',\r\n  FI: 'Finland',\r\n  FR: 'France',\r\n  GF: 'French Guiana',\r\n  PF: 'French Polynesia',\r\n  TF: 'French Southern Territories',\r\n  GA: 'Gabon',\r\n  GM: 'Gambia',\r\n  GE: 'Georgia',\r\n  DE: 'Germany',\r\n  GH: 'Ghana',\r\n  GI: 'Gibraltar',\r\n  GR: 'Greece',\r\n  GL: 'Greenland',\r\n  GD: 'Grenada',\r\n  GP: 'Guadeloupe',\r\n  GU: 'Guam',\r\n  GT: 'Guatemala',\r\n  GG: 'Guernsey',\r\n  GN: 'Guinea',\r\n  GW: 'Guinea-Bissau',\r\n  GY: 'Guyana',\r\n  HT: 'Haiti',\r\n  HM: 'Heard Island and McDonald Islands',\r\n  VA: 'Holy See',\r\n  HN: 'Honduras',\r\n  HK: 'Hong Kong',\r\n  HU: 'Hungary',\r\n  IS: 'Iceland',\r\n  IN: 'India',\r\n  ID: 'Indonesia',\r\n  IR: 'Iran (Islamic Republic of)',\r\n  IQ: 'Iraq',\r\n  IE: 'Ireland',\r\n  IM: 'Isle of Man',\r\n  IL: 'Israel',\r\n  IT: 'Italy',\r\n  JM: 'Jamaica',\r\n  JP: 'Japan',\r\n  JE: 'Jersey',\r\n  JO: 'Jordan',\r\n  KZ: 'Kazakhstan',\r\n  KE: 'Kenya',\r\n  KI: 'Kiribati',\r\n  KP: \"Korea (Democratic People's Republic of)\",\r\n  KR: 'Korea (Republic of)',\r\n  KW: 'Kuwait',\r\n  KG: 'Kyrgyzstan',\r\n  LA: \"Lao People's Democratic Republic\",\r\n  LV: 'Latvia',\r\n  LB: 'Lebanon',\r\n  LS: 'Lesotho',\r\n  LR: 'Liberia',\r\n  LY: 'Libya',\r\n  LI: 'Liechtenstein',\r\n  LT: 'Lithuania',\r\n  LU: 'Luxembourg',\r\n  MO: 'Macao',\r\n  MK: 'Macedonia (the former Yugoslav Republic of)',\r\n  MG: 'Madagascar',\r\n  MW: 'Malawi',\r\n  MY: 'Malaysia',\r\n  MV: 'Maldives',\r\n  ML: 'Mali',\r\n  MT: 'Malta',\r\n  MH: 'Marshall Islands',\r\n  MQ: 'Martinique',\r\n  MR: 'Mauritania',\r\n  MU: 'Mauritius',\r\n  YT: 'Mayotte',\r\n  MX: 'Mexico',\r\n  FM: 'Micronesia (Federated States of)',\r\n  MD: 'Moldova (Republic of)',\r\n  MC: 'Monaco',\r\n  MN: 'Mongolia',\r\n  ME: 'Montenegro',\r\n  MS: 'Montserrat',\r\n  MA: 'Morocco',\r\n  MZ: 'Mozambique',\r\n  MM: 'Myanmar',\r\n  NA: 'Namibia',\r\n  NR: 'Nauru',\r\n  NP: 'Nepal',\r\n  NL: 'Netherlands',\r\n  NC: 'New Caledonia',\r\n  NZ: 'New Zealand',\r\n  NI: 'Nicaragua',\r\n  NE: 'Niger',\r\n  NG: 'Nigeria',\r\n  NU: 'Niue',\r\n  NF: 'Norfolk Island',\r\n  MP: 'Northern Mariana Islands',\r\n  NO: 'Norway',\r\n  OM: 'Oman',\r\n  PK: 'Pakistan',\r\n  PW: 'Palau',\r\n  PS: 'Palestine, State of',\r\n  PA: 'Panama',\r\n  PG: 'Papua New Guinea',\r\n  PY: 'Paraguay',\r\n  PE: 'Peru',\r\n  PH: 'Philippines',\r\n  PN: 'Pitcairn',\r\n  PL: 'Poland',\r\n  PT: 'Portugal',\r\n  PR: 'Puerto Rico',\r\n  QA: 'Qatar',\r\n  RO: 'Romania',\r\n  RU: 'Russian Federation',\r\n  RW: 'Rwanda',\r\n  RE: 'Réunion',\r\n  BL: 'Saint Barthélemy',\r\n  SH: 'Saint Helena, Ascension and Tristan da Cunha',\r\n  KN: 'Saint Kitts and Nevis',\r\n  LC: 'Saint Lucia',\r\n  MF: 'Saint Martin (French part)',\r\n  PM: 'Saint Pierre and Miquelon',\r\n  VC: 'Saint Vincent and the Grenadines',\r\n  WS: 'Samoa',\r\n  SM: 'San Marino',\r\n  ST: 'Sao Tome and Principe',\r\n  SA: 'Saudi Arabia',\r\n  SN: 'Senegal',\r\n  RS: 'Serbia',\r\n  SC: 'Seychelles',\r\n  SL: 'Sierra Leone',\r\n  SG: 'Singapore',\r\n  SX: 'Sint Maarten (Dutch part)',\r\n  SK: 'Slovakia',\r\n  SI: 'Slovenia',\r\n  SB: 'Solomon Islands',\r\n  SO: 'Somalia',\r\n  ZA: 'South Africa',\r\n  GS: 'South Georgia and the South Sandwich Islands',\r\n  SS: 'South Sudan',\r\n  ES: 'Spain',\r\n  LK: 'Sri Lanka',\r\n  SD: 'Sudan',\r\n  SR: 'Suriname',\r\n  SJ: 'Svalbard and Jan Mayen',\r\n  SZ: 'Swaziland',\r\n  SE: 'Sweden',\r\n  CH: 'Switzerland',\r\n  SY: 'Syrian Arab Republic',\r\n  TW: 'Taiwan, Province of China[a]',\r\n  TJ: 'Tajikistan',\r\n  TZ: 'Tanzania, United Republic of',\r\n  TH: 'Thailand',\r\n  TL: 'Timor-Leste',\r\n  TG: 'Togo',\r\n  TK: 'Tokelau',\r\n  TO: 'Tonga',\r\n  TT: 'Trinidad and Tobago',\r\n  TN: 'Tunisia',\r\n  TR: 'Turkey',\r\n  TM: 'Turkmenistan',\r\n  TC: 'Turks and Caicos Islands',\r\n  TV: 'Tuvalu',\r\n  UG: 'Uganda',\r\n  UA: 'Ukraine',\r\n  AE: 'United Arab Emirates',\r\n  GB: 'United Kingdom of Great Britain',\r\n  UM: 'United States Minor Outlying Islands',\r\n  US: 'United States of America',\r\n  UY: 'Uruguay',\r\n  UZ: 'Uzbekistan',\r\n  VU: 'Vanuatu',\r\n  VE: 'Venezuela (Bolivarian Republic of)',\r\n  VN: 'Viet Nam',\r\n  VG: 'Virgin Islands (British)',\r\n  VI: 'Virgin Islands (U.S.)',\r\n  WF: 'Wallis and Futuna',\r\n  EH: 'Western Sahara',\r\n  YE: 'Yemen',\r\n  ZM: 'Zambia',\r\n  ZW: 'Zimbabwe',\r\n  AX: 'Åland Islands',\r\n};\r\n\r\nexport const COUNTRIES_FR: IDictionary<string> = {\r\n  AF: 'Afghanistan',\r\n  DE: 'Allemagne',\r\n  AD: 'Andorre',\r\n  AI: 'Anguilla',\r\n  AG: 'Antigua-et-Barbuda',\r\n  AW: 'Aruba',\r\n  AT: 'Autriche',\r\n  BS: 'Bahamas',\r\n  BH: 'Bahreïn',\r\n  BD: 'Bangladesh',\r\n  BE: 'Belgique',\r\n  BZ: 'Belize',\r\n  BM: 'Bermudes',\r\n  BO: 'Bolivie (État Plurinational de)',\r\n  BQ: 'Bonaire, Sint Eustatius et Saba',\r\n  BW: 'Botswana',\r\n  BV: 'Bouvet Island',\r\n  BN: 'Brunei Darussalam',\r\n  BR: 'Brésil',\r\n  BF: 'Burkina Faso',\r\n  BI: 'Burundi',\r\n  BJ: 'Bénin',\r\n  CV: 'Cabo Verde',\r\n  KH: 'Cambodge',\r\n  CM: 'Cameroun',\r\n  CA: 'Canada',\r\n  CL: 'Chili',\r\n  CY: 'Chypre',\r\n  KM: 'Comores',\r\n  CG: 'Congo',\r\n  CD: 'Congo (République Démocratique du)',\r\n  KR: 'Corée (République de)',\r\n  KP: 'Corée (République populaire Démocratique de)',\r\n  CR: 'Costa Rica',\r\n  CU: 'Cuba',\r\n  CW: 'Curaçao',\r\n  DK: 'Danemark',\r\n  DJ: 'Djibouti',\r\n  DM: 'Dominique',\r\n  SV: 'El Salvador',\r\n  ES: 'Espagne',\r\n  FJ: 'Fidji',\r\n  FR: 'France',\r\n  RU: 'Fédération De Russie',\r\n  GA: 'Gabon',\r\n  GI: 'Gibraltar',\r\n  GP: 'Guadeloupe',\r\n  GU: 'Guam',\r\n  GT: 'Guatemala',\r\n  GG: 'Guernesey',\r\n  GQ: 'Guinée Équatoriale',\r\n  GF: 'Guyane Française',\r\n  GS: 'Géorgie du sud et les Îles Sandwich du Sud',\r\n  HT: 'Haïti',\r\n  HN: 'Honduras',\r\n  HK: 'Hong Kong',\r\n  HU: 'Hongrie',\r\n  IR: 'Iran (République Islamique de)',\r\n  IL: 'Israël',\r\n  IT: 'Italie',\r\n  JP: 'Japon',\r\n  JE: 'Jersey',\r\n  KZ: 'Kazakhstan',\r\n  KE: 'Kenya',\r\n  KG: 'Kirghizistan',\r\n  KI: 'Kiribati',\r\n  KW: 'Koweït',\r\n  ZA: \"L'Afrique Du Sud\",\r\n  AO: \"L'Angola\",\r\n  SA: \"L'Arabie Saoudite\",\r\n  UA: \"L'Ukraine\",\r\n  UY: \"L'Uruguay\",\r\n  AL: \"L'albanie\",\r\n  DZ: \"L'algérie\",\r\n  AQ: \"L'antarctique\",\r\n  AR: \"L'argentine\",\r\n  AM: \"L'arménie\",\r\n  AU: \"L'australie\",\r\n  AZ: \"L'azerbaïdjan\",\r\n  EG: \"L'egypte\",\r\n  EE: \"L'estonie\",\r\n  ET: \"L'ethiopie\",\r\n  IN: \"L'inde\",\r\n  ID: \"L'indonésie\",\r\n  IQ: \"L'irak\",\r\n  IE: \"L'irlande\",\r\n  IS: \"L'islande\",\r\n  UG: \"L'ouganda\",\r\n  CX: \"L'Île Christmas\",\r\n  NF: \"L'Île De Norfolk\",\r\n  HM: \"L'Île heard et des Îles McDonald\",\r\n  EC: \"L'équateur\",\r\n  ER: \"L'érythrée\",\r\n  IM: \"L'île de Man\",\r\n  MU: \"L'île maurice\",\r\n  CI: \"La Côte d'Ivoire\",\r\n  GW: 'La Guinée-Bissau',\r\n  NC: 'La Nouvelle-Calédonie',\r\n  NZ: 'La Nouvelle-Zélande',\r\n  PS: \"La Palestine, l'État de\",\r\n  PF: 'La Polynésie Française',\r\n  LA: 'La République Démocratique populaire Lao',\r\n  RE: 'La Réunion',\r\n  SL: 'La Sierra Leone',\r\n  BB: 'La barbade',\r\n  BY: 'La biélorussie',\r\n  BA: 'La bosnie-et-Herzégovine',\r\n  BG: 'La bulgarie',\r\n  CN: 'La chine',\r\n  CO: 'La colombie',\r\n  HR: 'La croatie',\r\n  FI: 'La finlande',\r\n  GM: 'La gambie',\r\n  GD: 'La grenade',\r\n  GR: 'La grèce',\r\n  GN: 'La guinée',\r\n  GY: 'La guyane',\r\n  GE: 'La géorgie',\r\n  JM: 'La jamaïque',\r\n  JO: 'La jordanie',\r\n  LV: 'La lettonie',\r\n  LY: 'La libye',\r\n  LT: 'La lituanie',\r\n  MY: 'La malaisie',\r\n  MR: 'La mauritanie',\r\n  MN: 'La mongolie',\r\n  NA: 'La namibie',\r\n  NO: 'La norvège',\r\n  RO: 'La roumanie',\r\n  MD: 'La république de Moldova (République de)',\r\n  CZ: 'La république tchèque',\r\n  RS: 'La serbie',\r\n  SK: 'La slovaquie',\r\n  SI: 'La slovénie',\r\n  SO: 'La somalie',\r\n  CH: 'La suisse',\r\n  TR: 'La turquie',\r\n  ZM: 'La zambie',\r\n  GH: 'Le Ghana',\r\n  LI: 'Le Liechtenstein',\r\n  ML: 'Le Mali',\r\n  RW: 'Le Rwanda',\r\n  SS: 'Le Soudan Du Sud',\r\n  TL: 'Le Timor-Leste',\r\n  VN: 'Le Viet Nam',\r\n  BT: 'Le bhoutan',\r\n  GL: 'Le groenland',\r\n  ME: 'Le monténégro',\r\n  TM: 'Le turkménistan',\r\n  AX: \"Les Îles D'Åland\",\r\n  LS: 'Lesotho',\r\n  LB: 'Liban',\r\n  LR: 'Libéria',\r\n  LU: 'Luxembourg',\r\n  MO: 'Macao',\r\n  MK: 'Macédoine (ex-République Yougoslave de)',\r\n  MG: 'Madagascar',\r\n  MW: 'Malawi',\r\n  MV: 'Maldives',\r\n  MT: 'Malte',\r\n  MA: 'Maroc',\r\n  MQ: 'Martinique',\r\n  YT: 'Mayotte',\r\n  MX: 'Mexique',\r\n  FM: 'Micronésie (États Fédérés de)',\r\n  MC: 'Monaco',\r\n  MS: 'Montserrat',\r\n  MZ: 'Mozambique',\r\n  MM: 'Myanmar',\r\n  NR: 'Nauru',\r\n  NI: 'Nicaragua',\r\n  NE: 'Niger',\r\n  NG: 'Nigeria',\r\n  NU: 'Niue',\r\n  NP: 'Népal',\r\n  OM: 'Oman',\r\n  UZ: 'Ouzbékistan',\r\n  PK: 'Pakistan',\r\n  PW: 'Palau',\r\n  PA: 'Panama',\r\n  PG: 'Papouasie-Nouvelle-Guinée',\r\n  PY: 'Paraguay',\r\n  NL: 'Pays-bas',\r\n  PH: 'Philippines',\r\n  PN: 'Pitcairn',\r\n  PL: 'Pologne',\r\n  PT: 'Portugal',\r\n  PR: 'Puerto Rico',\r\n  PE: 'Pérou',\r\n  QA: 'Qatar',\r\n  GB: 'Royaume-Uni de Grande-Bretagne',\r\n  SY: 'République Arabe Syrienne',\r\n  CF: 'République Centrafricaine',\r\n  DO: 'République Dominicaine',\r\n  EH: 'Sahara Occidental',\r\n  BL: 'Saint-Barthélemy',\r\n  KN: 'Saint-Kitts-et-Nevis',\r\n  MF: 'Saint-Martin (partie française)',\r\n  PM: 'Saint-Pierre-et-Miquelon',\r\n  VA: 'Saint-Siège',\r\n  VC: 'Saint-Vincent-et-les-Grenadines',\r\n  SH: 'Sainte-Hélène, Ascension et Tristan da Cunha',\r\n  LC: 'Sainte-Lucie',\r\n  WS: 'Samoa',\r\n  AS: 'Samoa Américaines',\r\n  SM: 'San Marino',\r\n  ST: 'Sao Tomé-et-Principe',\r\n  SC: 'Seychelles',\r\n  SG: 'Singapour',\r\n  SX: 'Sint Maarten (en néerlandais partie)',\r\n  SD: 'Soudan',\r\n  LK: 'Sri Lanka',\r\n  SR: 'Suriname',\r\n  SE: 'Suède',\r\n  SJ: 'Svalbard et Jan Mayen',\r\n  SZ: 'Swaziland',\r\n  SN: 'Sénégal',\r\n  TJ: 'Tadjikistan',\r\n  TW: 'Taiwan, Province de Chine[a]',\r\n  TZ: 'Tanzanie, République-Unie de',\r\n  TD: 'Tchad',\r\n  TF: 'Terres Australes Françaises',\r\n  IO: \"Territoire Britannique De L'Océan Indien\",\r\n  TH: 'Thaïlande',\r\n  TG: 'Togo',\r\n  TK: 'Tokelau',\r\n  TO: 'Tonga',\r\n  TT: 'Trinité-et-Tobago',\r\n  TN: 'Tunisie',\r\n  TV: 'Tuvalu',\r\n  VU: 'Vanuatu',\r\n  VE: 'Venezuela (République Bolivarienne du)',\r\n  WF: 'Wallis-et-Futuna',\r\n  YE: 'Yémen',\r\n  ZW: 'Zimbabwe',\r\n  AE: 'Émirats Arabes Unis',\r\n  UM: 'États-Unis Îles Mineures Éloignées',\r\n  US: \"États-unis d'Amérique\",\r\n  KY: 'Îles Caïmans',\r\n  CC: 'Îles Cocos (Keeling) ',\r\n  CK: 'Îles Cook',\r\n  FK: 'Îles Falkland (Malvinas)',\r\n  FO: 'Îles Féroé',\r\n  MP: 'Îles Mariannes Du Nord',\r\n  MH: 'Îles Marshall',\r\n  SB: 'Îles Salomon',\r\n  VG: 'Îles Vierges (Britanniques)',\r\n  TC: 'Îles turques et Caïques',\r\n  VI: 'Îles vierges (états-UNIS)',\r\n};\r\n\r\nexport const COUNTRIES_DE: IDictionary<string> = {\r\n  AF: 'Afghanistan',\r\n  AL: 'Albanien',\r\n  DZ: 'Algerien',\r\n  AS: 'Amerikanisch-Samoa',\r\n  AD: 'Andorra',\r\n  AO: 'Angola',\r\n  AI: 'Anguilla',\r\n  AQ: 'Antarktis',\r\n  AG: 'Antigua und Barbuda',\r\n  AR: 'Argentinien',\r\n  AM: 'Armenien',\r\n  AW: 'Aruba',\r\n  AU: 'Australien',\r\n  AT: 'Österreich',\r\n  AZ: 'Aserbaidschan',\r\n  BS: 'Bahamas',\r\n  BH: 'Bahrain',\r\n  BD: 'Bangladesch',\r\n  BB: 'Barbados',\r\n  BY: 'Weißrussland',\r\n  BE: 'Belgien',\r\n  BZ: 'Belize',\r\n  BJ: 'Benin',\r\n  BM: 'Bermuda',\r\n  BT: 'Bhutan',\r\n  BO: 'Bolivien (Plurinationaler Staat)',\r\n  BQ: 'Bonaire, Sint Eustatius und Saba',\r\n  BA: 'Bosnien und Herzegowina',\r\n  BW: 'Botswana',\r\n  BV: 'Bouvetinsel',\r\n  BR: 'Brasilien',\r\n  IO: 'Britisches Territorium im Indischen Ozean',\r\n  BN: 'Brunei Darussalam',\r\n  BG: 'Bulgarien',\r\n  BF: 'Burkina Faso',\r\n  BI: 'Burundi',\r\n  CV: 'Cabo Verde',\r\n  KH: 'Kambodscha',\r\n  CM: 'Kamerun',\r\n  CA: 'Kanada',\r\n  KY: 'Kaimaninseln',\r\n  CF: 'Zentralafrikanische Republik',\r\n  TD: 'Tschad',\r\n  CL: 'Chile',\r\n  CN: 'China',\r\n  CX: 'Weihnachtsinsel',\r\n  CC: 'Kokosinseln (Keeling)',\r\n  CO: 'Kolumbien',\r\n  KM: 'Komoren',\r\n  CG: 'Kongo',\r\n  CD: 'Kongo (Demokratische Republik Kongo)',\r\n  CK: 'Cookinseln',\r\n  CR: 'Costa Rica',\r\n  HR: 'Kroatien',\r\n  CU: 'Kuba',\r\n  CW: 'Curaçao',\r\n  CY: 'Zypern',\r\n  CZ: 'Tschechien',\r\n  CI: 'Elfenbeinküste',\r\n  DK: 'Dänemark',\r\n  DJ: 'Dschibuti',\r\n  DM: 'Dominica',\r\n  DO: 'Dominikanische Republik',\r\n  EC: 'Ecuador',\r\n  EG: 'Ägypten',\r\n  SV: 'El Salvador',\r\n  GQ: 'Äquatorialguinea',\r\n  ER: 'Eritrea',\r\n  EE: 'Estland',\r\n  ET: 'Äthiopien',\r\n  FK: 'Falklandinseln (Malvinas)',\r\n  FO: 'Färöer-Inseln',\r\n  FJ: 'Fidschi',\r\n  FI: 'Finnland',\r\n  FR: 'Frankreich',\r\n  GF: 'Französisch-Guayana',\r\n  PF: 'Französisch-Polynesien',\r\n  TF: 'Französische Süd- und Antarktisgebiete',\r\n  GA: 'Gabun',\r\n  GM: 'Gambia',\r\n  GE: 'Georgien',\r\n  DE: 'Deutschland',\r\n  GH: 'Ghana',\r\n  GI: 'Gibraltar',\r\n  GR: 'Griechenland',\r\n  GL: 'Grönland',\r\n  GD: 'Grenada',\r\n  GP: 'Guadeloupe',\r\n  GU: 'Guam',\r\n  GT: 'Guatemala',\r\n  GG: 'Guernsey',\r\n  GN: 'Guinea',\r\n  GW: 'Guinea-Bissau',\r\n  GY: 'Guyana',\r\n  HT: 'Haiti',\r\n  HM: 'Heard Island and McDonald Islands',\r\n  VA: 'Heiliger Stuhl (Vatikanstadt)',\r\n  HN: 'Honduras',\r\n  HK: 'Hongkong',\r\n  HU: 'Ungarn',\r\n  IS: 'Island',\r\n  IN: 'Indien',\r\n  ID: 'Indonesien',\r\n  IR: 'Iran (Islamische Republik)',\r\n  IQ: 'Irak',\r\n  IE: 'Irland',\r\n  IM: 'Isle of Man',\r\n  IL: 'Israel',\r\n  IT: 'Italien',\r\n  JM: 'Jamaika',\r\n  JP: 'Japan',\r\n  JE: 'Jersey',\r\n  JO: 'Jordanien',\r\n  KZ: 'Kasachstan',\r\n  KE: 'Kenia',\r\n  KI: 'Kiribati',\r\n  KP: 'Korea (Demokratische Volksrepublik)',\r\n  KR: 'Korea (Republik)',\r\n  KW: 'Kuwait',\r\n  KG: 'Kirgisistan',\r\n  LA: 'Laos',\r\n  LV: 'Lettland',\r\n  LB: 'Libanon',\r\n  LS: 'Lesotho',\r\n  LR: 'Liberia',\r\n  LY: 'Libyen',\r\n  LI: 'Liechtenstein',\r\n  LT: 'Litauen',\r\n  LU: 'Luxemburg',\r\n  MO: 'Macao',\r\n  MK: 'Mazedonien (ehemalige jugoslawische Republik)',\r\n  MG: 'Madagaskar',\r\n  MW: 'Malawi',\r\n  MY: 'Malaysia',\r\n  MV: 'Malediven',\r\n  ML: 'Mali',\r\n  MT: 'Malta',\r\n  MH: 'Marshallinseln',\r\n  MQ: 'Martinique',\r\n  MR: 'Mauretanien',\r\n  MU: 'Mauritius',\r\n  YT: 'Mayotte',\r\n  MX: 'Mexiko',\r\n  FM: 'Mikronesien (Föderierte Staaten)',\r\n  MD: 'Moldawien (Republik)',\r\n  MC: 'Monaco',\r\n  MN: 'Mongolei',\r\n  ME: 'Montenegro',\r\n  MS: 'Montserrat',\r\n  MA: 'Marokko',\r\n  MZ: 'Mosambik',\r\n  MM: 'Myanmar',\r\n  NA: 'Namibia',\r\n  NR: 'Nauru',\r\n  NP: 'Nepal',\r\n  NL: 'Niederlande',\r\n  NC: 'Neukaledonien',\r\n  NZ: 'Neuseeland',\r\n  NI: 'Nicaragua',\r\n  NE: 'Niger',\r\n  NG: 'Nigeria',\r\n  NU: 'Niue',\r\n  NF: 'Norfolkinsel',\r\n  MP: 'Nördliche Marianen',\r\n  NO: 'Norwegen',\r\n  OM: 'Oman',\r\n  PK: 'Pakistan',\r\n  PW: 'Palau',\r\n  PS: 'Palästina, Staat',\r\n  PA: 'Panama',\r\n  PG: 'Papua-Neuguinea',\r\n  PY: 'Paraguay',\r\n  PE: 'Peru',\r\n  PH: 'Philippinen',\r\n  PN: 'Pitcairn',\r\n  PL: 'Polen',\r\n  PT: 'Portugal',\r\n  PR: 'Puerto Rico',\r\n  QA: 'Katar',\r\n  RO: 'Rumänien',\r\n  RU: 'Russische Föderation',\r\n  RW: 'Ruanda',\r\n  RE: 'Réunion',\r\n  BL: 'Saint Barthélemy',\r\n  SH: 'St. Helena, Ascension und Tristan da Cunha',\r\n  KN: 'St. Kitts und Nevis',\r\n  LC: 'St. Lucia',\r\n  MF: 'St. Martin (französischer Teil)',\r\n  PM: 'St. Pierre und Miquelon',\r\n  VC: 'St. Vincent und die Grenadinen',\r\n  WS: 'Samoa',\r\n  SM: 'San Marino',\r\n  ST: 'São Tomé und Príncipe',\r\n  SA: 'Saudi-Arabien',\r\n  SN: 'Senegal',\r\n  RS: 'Serbien',\r\n  SC: 'Seychellen',\r\n  SL: 'Sierra Leone',\r\n  SG: 'Singapur',\r\n  SX: 'Sint Maarten (niederländischer Teil)',\r\n  SK: 'Slowakei',\r\n  SI: 'Slowenien',\r\n  SB: 'Salomonen',\r\n  SO: 'Somalia',\r\n  ZA: 'Südafrika',\r\n  GS: 'Südgeorgien und die Südlichen Sandwichinseln',\r\n  SS: 'Südsudan',\r\n  ES: 'Spanien',\r\n  LK: 'Sri Lanka',\r\n  SD: 'Sudan',\r\n  SR: 'Suriname',\r\n  SJ: 'Svalbard und Jan Mayen',\r\n  SZ: 'Swasiland',\r\n  SE: 'Schweden',\r\n  CH: 'Schweiz',\r\n  SY: 'Syrien',\r\n  TW: 'Taiwan',\r\n  TJ: 'Tadschikistan',\r\n  TZ: 'Tansania',\r\n  TH: 'Thailand',\r\n  TL: 'Timor-Leste',\r\n  TG: 'Togo',\r\n  TK: 'Tokelau',\r\n  TO: 'Tonga',\r\n  TT: 'Trinidad und Tobago',\r\n  TN: 'Tunesien',\r\n  TR: 'Türkei',\r\n  TM: 'Turkmenistan',\r\n  TC: 'Turks- und Caicosinseln',\r\n  TV: 'Tuvalu',\r\n  UG: 'Uganda',\r\n  UA: 'Ukraine',\r\n  AE: 'Vereinigte Arabische Emirate',\r\n  GB: 'Vereinigtes Königreich',\r\n  UM: 'United States Minor Outlying Islands',\r\n  US: 'Vereinigte Staaten von Amerika',\r\n  UY: 'Uruguay',\r\n  UZ: 'Usbekistan',\r\n  VU: 'Vanuatu',\r\n  VE: 'Venezuela',\r\n  VN: 'Vietnam',\r\n  VG: 'Britische Jungferninseln',\r\n  VI: 'Amerikanische Jungferninseln',\r\n  WF: 'Wallis und Futuna',\r\n  EH: 'Westsahara',\r\n  YE: 'Jemen',\r\n  ZM: 'Sambia',\r\n  ZW: 'Simbabwe',\r\n  AX: 'Åland-Inseln',\r\n};\r\nexport const COUNTRIES_IT: IDictionary<string> = {\r\n  AF: 'Afghanistan',\r\n  AL: 'Albania',\r\n  DZ: 'Algeria',\r\n  AS: 'Samoa Americane',\r\n  AD: 'Andorra',\r\n  AO: 'Angola',\r\n  AI: 'Anguilla',\r\n  AQ: 'Antartide',\r\n  AG: 'Antigua e Barbuda',\r\n  AR: 'Argentina',\r\n  AM: 'Armenia',\r\n  AW: 'Aruba',\r\n  AU: 'Australia',\r\n  AT: 'Austria',\r\n  AZ: 'Azerbaigian',\r\n  BS: 'Bahamas',\r\n  BH: 'Bahrain',\r\n  BD: 'Bangladesh',\r\n  BB: 'Barbados',\r\n  BY: 'Bielorussia',\r\n  BE: 'Belgio',\r\n  BZ: 'Belize',\r\n  BJ: 'Benin',\r\n  BM: 'Bermuda',\r\n  BT: 'Bhutan',\r\n  BO: 'Bolivia (Stato Plurinazionale)',\r\n  BQ: 'Bonaire, Sint Eustatius e Saba',\r\n  BA: 'Bosnia ed Erzegovina',\r\n  BW: 'Botswana',\r\n  BV: 'Isola Bouvet',\r\n  BR: 'Brasile',\r\n  IO: \"Territorio Britannico dell'Oceano Indiano\",\r\n  BN: 'Brunei Darussalam',\r\n  BG: 'Bulgaria',\r\n  BF: 'Burkina Faso',\r\n  BI: 'Burundi',\r\n  CV: 'Capo Verde',\r\n  KH: 'Cambogia',\r\n  CM: 'Camerun',\r\n  CA: 'Canada',\r\n  KY: 'Isole Cayman',\r\n  CF: 'Repubblica Centrafricana',\r\n  TD: 'Ciad',\r\n  CL: 'Cile',\r\n  CN: 'Cina',\r\n  CX: 'Isola di Natale',\r\n  CC: 'Isole Cocos (Keeling)',\r\n  CO: 'Colombia',\r\n  KM: 'Comore',\r\n  CG: 'Congo',\r\n  CD: 'Congo (Repubblica Democratica del)',\r\n  CK: 'Isole Cook',\r\n  CR: 'Costa Rica',\r\n  HR: 'Croazia',\r\n  CU: 'Cuba',\r\n  CW: 'Curaçao',\r\n  CY: 'Cipro',\r\n  CZ: 'Cechia',\r\n  CI: \"Costa d'Avorio\",\r\n  DK: 'Danimarca',\r\n  DJ: 'Gibuti',\r\n  DM: 'Dominica',\r\n  DO: 'Repubblica Dominicana',\r\n  EC: 'Ecuador',\r\n  EG: 'Egitto',\r\n  SV: 'El Salvador',\r\n  GQ: 'Guinea Equatoriale',\r\n  ER: 'Eritrea',\r\n  EE: 'Estonia',\r\n  ET: 'Etiopia',\r\n  FK: 'Isole Falkland (Malvine)',\r\n  FO: 'Isole Fær Øer',\r\n  FJ: 'Figi',\r\n  FI: 'Finlandia',\r\n  FR: 'Francia',\r\n  GF: 'Guyana Francese',\r\n  PF: 'Polinesia Francese',\r\n  TF: 'Territori Francesi del Sud',\r\n  GA: 'Gabon',\r\n  GM: 'Gambia',\r\n  GE: 'Georgia',\r\n  DE: 'Germania',\r\n  GH: 'Ghana',\r\n  GI: 'Gibilterra',\r\n  GR: 'Grecia',\r\n  GL: 'Groenlandia',\r\n  GD: 'Grenada',\r\n  GP: 'Guadalupa',\r\n  GU: 'Guam',\r\n  GT: 'Guatemala',\r\n  GG: 'Guernsey',\r\n  GN: 'Guinea',\r\n  GW: 'Guinea-Bissau',\r\n  GY: 'Guyana',\r\n  HT: 'Haiti',\r\n  HM: 'Isole Heard e McDonald',\r\n  VA: 'Santa Sede (Città del Vaticano)',\r\n  HN: 'Honduras',\r\n  HK: 'Hong Kong',\r\n  HU: 'Ungheria',\r\n  IS: 'Islanda',\r\n  IN: 'India',\r\n  ID: 'Indonesia',\r\n  IR: \"Iran (Repubblica Islamica dell')\",\r\n  IQ: 'Iraq',\r\n  IE: 'Irlanda',\r\n  IM: 'Isola di Man',\r\n  IL: 'Israele',\r\n  IT: 'Italia',\r\n  JM: 'Giamaica',\r\n  JP: 'Giappone',\r\n  JE: 'Jersey',\r\n  JO: 'Giordania',\r\n  KZ: 'Kazakistan',\r\n  KE: 'Kenya',\r\n  KI: 'Kiribati',\r\n  KP: 'Corea (Repubblica Popolare Democratica di)',\r\n  KR: 'Corea (Repubblica di)',\r\n  KW: 'Kuwait',\r\n  KG: 'Kirghizistan',\r\n  LA: 'Repubblica Democratica Popolare Lao',\r\n  LV: 'Lettonia',\r\n  LB: 'Libano',\r\n  LS: 'Lesotho',\r\n  LR: 'Liberia',\r\n  LY: 'Libia',\r\n  LI: 'Liechtenstein',\r\n  LT: 'Lituania',\r\n  LU: 'Lussemburgo',\r\n  MO: 'Macao',\r\n  MK: 'Macedonia (ex Repubblica Iugoslava di)',\r\n  MG: 'Madagascar',\r\n  MW: 'Malawi',\r\n  MY: 'Malesia',\r\n  MV: 'Maldive',\r\n  ML: 'Mali',\r\n  MT: 'Malta',\r\n  MH: 'Isole Marshall',\r\n  MQ: 'Martinica',\r\n  MR: 'Mauritania',\r\n  MU: 'Mauritius',\r\n  YT: 'Mayotte',\r\n  MX: 'Messico',\r\n  FM: 'Micronesia (Stati Federati di)',\r\n  MD: 'Moldavia (Repubblica di)',\r\n  MC: 'Monaco',\r\n  MN: 'Mongolia',\r\n  ME: 'Montenegro',\r\n  MS: 'Montserrat',\r\n  MA: 'Marocco',\r\n  MZ: 'Mozambico',\r\n  MM: 'Myanmar',\r\n  NA: 'Namibia',\r\n  NR: 'Nauru',\r\n  NP: 'Nepal',\r\n  NL: 'Paesi Bassi',\r\n  NC: 'Nuova Caledonia',\r\n  NZ: 'Nuova Zelanda',\r\n  NI: 'Nicaragua',\r\n  NE: 'Niger',\r\n  NG: 'Nigeria',\r\n  NU: 'Niue',\r\n  NF: 'Isola Norfolk',\r\n  MP: 'Isole Marianne Settentrionali',\r\n  NO: 'Norvegia',\r\n  OM: 'Oman',\r\n  PK: 'Pakistan',\r\n  PW: 'Palau',\r\n  PS: 'Palestina (Stato di)',\r\n  PA: 'Panama',\r\n  PG: 'Papua Nuova Guinea',\r\n  PY: 'Paraguay',\r\n  PE: 'Perù',\r\n  PH: 'Filippine',\r\n  PN: 'Pitcairn',\r\n  PL: 'Polonia',\r\n  PT: 'Portogallo',\r\n  PR: 'Porto Rico',\r\n  QA: 'Qatar',\r\n  RO: 'Romania',\r\n  RU: 'Federazione Russa',\r\n  RW: 'Ruanda',\r\n  RE: 'Riunione',\r\n  BL: 'Saint-Barthélemy',\r\n  SH: \"Sant'Elena, Ascensione e Tristan da Cunha\",\r\n  KN: 'Saint Kitts e Nevis',\r\n  LC: 'Santa Lucia',\r\n  MF: 'Saint Martin (parte francese)',\r\n  PM: 'Saint Pierre e Miquelon',\r\n  VC: 'Saint Vincent e Grenadine',\r\n  WS: 'Samoa',\r\n  SM: 'San Marino',\r\n  ST: 'São Tomé e Príncipe',\r\n  SA: 'Arabia Saudita',\r\n  SN: 'Senegal',\r\n  RS: 'Serbia',\r\n  SC: 'Seychelles',\r\n  SL: 'Sierra Leone',\r\n  SG: 'Singapore',\r\n  SX: 'Sint Maarten (parte olandese)',\r\n  SK: 'Slovacchia',\r\n  SI: 'Slovenia',\r\n  SB: 'Isole Salomone',\r\n  SO: 'Somalia',\r\n  ZA: 'Sudafrica',\r\n  GS: 'Georgia del Sud e Isole Sandwich del Sud',\r\n  SS: 'Sudan del Sud',\r\n  ES: 'Spagna',\r\n  LK: 'Sri Lanka',\r\n  SD: 'Sudan',\r\n  SR: 'Suriname',\r\n  SJ: 'Svalbard e Jan Mayen',\r\n  SZ: 'Swaziland',\r\n  SE: 'Svezia',\r\n  CH: 'Svizzera',\r\n  SY: 'Repubblica Araba Siriana',\r\n  TW: 'Taiwan, Provincia di Cina',\r\n  TJ: 'Tagikistan',\r\n  TZ: 'Tanzania, Repubblica Unita di',\r\n  TH: 'Thailandia',\r\n  TL: 'Timor Est',\r\n  TG: 'Togo',\r\n  TK: 'Tokelau',\r\n  TO: 'Tonga',\r\n  TT: 'Trinidad e Tobago',\r\n  TN: 'Tunisia',\r\n  TR: 'Turchia',\r\n  TM: 'Turkmenistan',\r\n  TC: 'Isole Turks e Caicos',\r\n  TV: 'Tuvalu',\r\n  UG: 'Uganda',\r\n  UA: 'Ucraina',\r\n  AE: 'Emirati Arabi Uniti',\r\n  GB: 'Regno Unito di Gran Bretagna',\r\n  UM: 'Isole minori esterne degli Stati Uniti',\r\n  US: \"Stati Uniti d'America\",\r\n  UY: 'Uruguay',\r\n  UZ: 'Uzbekistan',\r\n  VU: 'Vanuatu',\r\n  VE: 'Venezuela (Repubblica Bolivariana di)',\r\n  VN: 'Vietnam',\r\n  VG: 'Isole Vergini Britanniche',\r\n  VI: 'Isole Vergini Americane',\r\n  WF: 'Wallis e Futuna',\r\n  EH: 'Sahara Occidentale',\r\n  YE: 'Yemen',\r\n  ZM: 'Zambia',\r\n  ZW: 'Zimbabwe',\r\n  AX: 'Isole Åland',\r\n};\r\n\r\nexport const COUNTRIES_FR_CA: IDictionary<string> = {\r\n  AF: 'Afghanistan',\r\n  AL: 'Albanie',\r\n  DZ: 'Algérie',\r\n  AS: 'Samoa américaines',\r\n  AD: 'Andorre',\r\n  AO: 'Angola',\r\n  AI: 'Anguilla',\r\n  AQ: 'Antarctique',\r\n  AG: 'Antigua-et-Barbuda',\r\n  AR: 'Argentine',\r\n  AM: 'Arménie',\r\n  AW: 'Aruba',\r\n  AU: 'Australie',\r\n  AT: 'Autriche',\r\n  AZ: 'Azerbaïdjan',\r\n  BS: 'Bahamas',\r\n  BH: 'Bahreïn',\r\n  BD: 'Bangladesh',\r\n  BB: 'Barbade',\r\n  BY: 'Biélorussie',\r\n  BE: 'Belgique',\r\n  BZ: 'Belize',\r\n  BJ: 'Bénin',\r\n  BM: 'Bermudes',\r\n  BT: 'Bhoutan',\r\n  BO: 'Bolivie (État plurinational de)',\r\n  BQ: 'Bonaire, Saint-Eustache et Saba',\r\n  BA: 'Bosnie-Herzégovine',\r\n  BW: 'Botswana',\r\n  BV: 'Île Bouvet',\r\n  BR: 'Brésil',\r\n  IO: \"Territoire britannique de l'océan Indien\",\r\n  BN: 'Brunei Darussalam',\r\n  BG: 'Bulgarie',\r\n  BF: 'Burkina Faso',\r\n  BI: 'Burundi',\r\n  CV: 'Cabo Verde',\r\n  KH: 'Cambodge',\r\n  CM: 'Cameroun',\r\n  CA: 'Canada',\r\n  KY: 'Îles Caïmans',\r\n  CF: 'République centrafricaine',\r\n  TD: 'Tchad',\r\n  CL: 'Chili',\r\n  CN: 'Chine',\r\n  CX: 'Île Christmas',\r\n  CC: 'Îles Cocos (Keeling)',\r\n  CO: 'Colombie',\r\n  KM: 'Comores',\r\n  CG: 'Congo',\r\n  CD: 'Congo (République démocratique du)',\r\n  CK: 'Îles Cook',\r\n  CR: 'Costa Rica',\r\n  HR: 'Croatie',\r\n  CU: 'Cuba',\r\n  CW: 'Curaçao',\r\n  CY: 'Chypre',\r\n  CZ: 'Tchéquie',\r\n  CI: \"Côte d'Ivoire\",\r\n  DK: 'Danemark',\r\n  DJ: 'Djibouti',\r\n  DM: 'Dominique',\r\n  DO: 'République dominicaine',\r\n  EC: 'Équateur',\r\n  EG: 'Égypte',\r\n  SV: 'El Salvador',\r\n  GQ: 'Guinée équatoriale',\r\n  ER: 'Érythrée',\r\n  EE: 'Estonie',\r\n  ET: 'Éthiopie',\r\n  FK: 'Îles Falkland (Malvinas)',\r\n  FO: 'Îles Féroé',\r\n  FJ: 'Fidji',\r\n  FI: 'Finlande',\r\n  FR: 'France',\r\n  GF: 'Guyane française',\r\n  PF: 'Polynésie française',\r\n  TF: 'Territoires austraux français',\r\n  GA: 'Gabon',\r\n  GM: 'Gambie',\r\n  GE: 'Géorgie',\r\n  DE: 'Allemagne',\r\n  GH: 'Ghana',\r\n  GI: 'Gibraltar',\r\n  GR: 'Grèce',\r\n  GL: 'Groenland',\r\n  GD: 'Grenade',\r\n  GP: 'Guadeloupe',\r\n  GU: 'Guam',\r\n  GT: 'Guatemala',\r\n  GG: 'Guernesey',\r\n  GN: 'Guinée',\r\n  GW: 'Guinée-Bissau',\r\n  GY: 'Guyana',\r\n  HT: 'Haïti',\r\n  HM: 'Îles Heard et McDonald',\r\n  VA: 'Saint-Siège',\r\n  HN: 'Honduras',\r\n  HK: 'Hong Kong',\r\n  HU: 'Hongrie',\r\n  IS: 'Islande',\r\n  IN: 'Inde',\r\n  ID: 'Indonésie',\r\n  IR: \"Iran (République islamique d')\",\r\n  IQ: 'Irak',\r\n  IE: 'Irlande',\r\n  IM: 'Île de Man',\r\n  IL: 'Israël',\r\n  IT: 'Italie',\r\n  JM: 'Jamaïque',\r\n  JP: 'Japon',\r\n  JE: 'Jersey',\r\n  JO: 'Jordanie',\r\n  KZ: 'Kazakhstan',\r\n  KE: 'Kenya',\r\n  KI: 'Kiribati',\r\n  KP: 'Corée (République populaire démocratique de)',\r\n  KR: 'Corée (République de)',\r\n  KW: 'Koweït',\r\n  KG: 'Kirghizistan',\r\n  LA: 'République démocratique populaire lao',\r\n  LV: 'Lettonie',\r\n  LB: 'Liban',\r\n  LS: 'Lesotho',\r\n  LR: 'Libéria',\r\n  LY: 'Libye',\r\n  LI: 'Liechtenstein',\r\n  LT: 'Lituanie',\r\n  LU: 'Luxembourg',\r\n  MO: 'Macao',\r\n  MK: 'Macédoine (ex-République yougoslave de)',\r\n  MG: 'Madagascar',\r\n  MW: 'Malawi',\r\n  MY: 'Malaisie',\r\n  MV: 'Maldives',\r\n  ML: 'Mali',\r\n  MT: 'Malte',\r\n  MH: 'Îles Marshall',\r\n  MQ: 'Martinique',\r\n  MR: 'Mauritanie',\r\n  MU: 'Maurice',\r\n  YT: 'Mayotte',\r\n  MX: 'Mexique',\r\n  FM: 'Micronésie (États fédérés de)',\r\n  MD: 'Moldavie (République de)',\r\n  MC: 'Monaco',\r\n  MN: 'Mongolie',\r\n  ME: 'Monténégro',\r\n  MS: 'Montserrat',\r\n  MA: 'Maroc',\r\n  MZ: 'Mozambique',\r\n  MM: 'Myanmar',\r\n  NA: 'Namibie',\r\n  NR: 'Nauru',\r\n  NP: 'Népal',\r\n  NL: 'Pays-Bas',\r\n  NC: 'Nouvelle-Calédonie',\r\n  NZ: 'Nouvelle-Zélande',\r\n  NI: 'Nicaragua',\r\n  NE: 'Niger',\r\n  NG: 'Nigéria',\r\n  NU: 'Niue',\r\n  NF: 'Île Norfolk',\r\n  MP: 'Îles Mariannes du Nord',\r\n  NO: 'Norvège',\r\n  OM: 'Oman',\r\n  PK: 'Pakistan',\r\n  PW: 'Palaos',\r\n  PS: 'Palestine, État de',\r\n  PA: 'Panama',\r\n  PG: 'Papouasie-Nouvelle-Guinée',\r\n  PY: 'Paraguay',\r\n  PE: 'Pérou',\r\n  PH: 'Philippines',\r\n  PN: 'Pitcairn',\r\n  PL: 'Pologne',\r\n  PT: 'Portugal',\r\n  PR: 'Porto Rico',\r\n  QA: 'Qatar',\r\n  RO: 'Roumanie',\r\n  RU: 'Fédération de Russie',\r\n  RW: 'Rwanda',\r\n  RE: 'Réunion',\r\n  BL: 'Saint-Barthélemy',\r\n  SH: 'Sainte-Hélène, Ascension et Tristan da Cunha',\r\n  KN: 'Saint-Kitts-et-Nevis',\r\n  LC: 'Sainte-Lucie',\r\n  MF: 'Saint-Martin (partie française)',\r\n  PM: 'Saint-Pierre-et-Miquelon',\r\n  VC: 'Saint-Vincent-et-les Grenadines',\r\n  WS: 'Samoa',\r\n  SM: 'Saint-Marin',\r\n  ST: 'Sao Tomé-et-Principe',\r\n  SA: 'Arabie saoudite',\r\n  SN: 'Sénégal',\r\n  RS: 'Serbie',\r\n  SC: 'Seychelles',\r\n  SL: 'Sierra Leone',\r\n  SG: 'Singapour',\r\n  SX: 'Saint-Martin (partie néerlandaise)',\r\n  SK: 'Slovaquie',\r\n  SI: 'Slovénie',\r\n  SB: 'Îles Salomon',\r\n  SO: 'Somalie',\r\n  ZA: 'Afrique du Sud',\r\n  GS: 'Géorgie du Sud et les Îles Sandwich du Sud',\r\n  SS: 'Soudan du Sud',\r\n  ES: 'Espagne',\r\n  LK: 'Sri Lanka',\r\n  SD: 'Soudan',\r\n  SR: 'Suriname',\r\n  SJ: 'Svalbard et Jan Mayen',\r\n  SZ: 'Eswatini',\r\n  SE: 'Suède',\r\n  CH: 'Suisse',\r\n  SY: 'République arabe syrienne',\r\n  TW: 'Taïwan, Province de Chine[a]',\r\n  TJ: 'Tadjikistan',\r\n  TZ: 'Tanzanie, République-Unie de',\r\n  TH: 'Thaïlande',\r\n  TL: 'Timor-Leste',\r\n  TG: 'Togo',\r\n  TK: 'Tokelau',\r\n  TO: 'Tonga',\r\n  TT: 'Trinité-et-Tobago',\r\n  TN: 'Tunisie',\r\n  TR: 'Turquie',\r\n  TM: 'Turkménistan',\r\n  TC: 'Îles Turques-et-Caïques',\r\n  TV: 'Tuvalu',\r\n  UG: 'Ouganda',\r\n  UA: 'Ukraine',\r\n  AE: 'Émirats arabes unis',\r\n  GB: 'Royaume-Uni de Grande-Bretagne',\r\n  UM: 'Îles mineures éloignées des États-Unis',\r\n  US: \"États-Unis d'Amérique\",\r\n  UY: 'Uruguay',\r\n  UZ: 'Ouzbékistan',\r\n  VU: 'Vanuatu',\r\n  VE: 'Venezuela (République bolivarienne du)',\r\n  VN: 'Viet Nam',\r\n  VG: 'Îles Vierges britanniques',\r\n  VI: 'Îles Vierges des États-Unis',\r\n  WF: 'Wallis-et-Futuna',\r\n  EH: 'Sahara occidental',\r\n  YE: 'Yémen',\r\n  ZM: 'Zambie',\r\n  ZW: 'Zimbabwe',\r\n  AX: 'Îles Åland',\r\n};\r\n\r\nexport const COUNTRIES_ES_ES: IDictionary<string> = {\r\n  AF: 'Afganistán',\r\n  AL: 'Albania',\r\n  DZ: 'Argelia',\r\n  AS: 'Samoa Americana',\r\n  AD: 'Andorra',\r\n  AO: 'Angola',\r\n  AI: 'Anguila',\r\n  AQ: 'Antártida',\r\n  AG: 'Antigua y Barbuda',\r\n  AR: 'Argentina',\r\n  AM: 'Armenia',\r\n  AW: 'Aruba',\r\n  AU: 'Australia',\r\n  AT: 'Austria',\r\n  AZ: 'Azerbaiyán',\r\n  BS: 'Bahamas',\r\n  BH: 'Baréin',\r\n  BD: 'Bangladés',\r\n  BB: 'Barbados',\r\n  BY: 'Bielorrusia',\r\n  BE: 'Bélgica',\r\n  BZ: 'Belice',\r\n  BJ: 'Benín',\r\n  BM: 'Bermudas',\r\n  BT: 'Bután',\r\n  BO: 'Bolivia (Estado Plurinacional de)',\r\n  BQ: 'Bonaire, San Eustaquio y Saba',\r\n  BA: 'Bosnia y Herzegovina',\r\n  BW: 'Botsuana',\r\n  BV: 'Isla Bouvet',\r\n  BR: 'Brasil',\r\n  IO: 'Territorio Británico del Océano Índico',\r\n  BN: 'Brunéi Darusalam',\r\n  BG: 'Bulgaria',\r\n  BF: 'Burkina Faso',\r\n  BI: 'Burundi',\r\n  CV: 'Cabo Verde',\r\n  KH: 'Camboya',\r\n  CM: 'Camerún',\r\n  CA: 'Canadá',\r\n  KY: 'Islas Caimán',\r\n  CF: 'República Centroafricana',\r\n  TD: 'Chad',\r\n  CL: 'Chile',\r\n  CN: 'China',\r\n  CX: 'Isla de Navidad',\r\n  CC: 'Islas Cocos (Keeling)',\r\n  CO: 'Colombia',\r\n  KM: 'Comoras',\r\n  CG: 'Congo',\r\n  CD: 'Congo (República Democrática del)',\r\n  CK: 'Islas Cook',\r\n  CR: 'Costa Rica',\r\n  HR: 'Croacia',\r\n  CU: 'Cuba',\r\n  CW: 'Curazao',\r\n  CY: 'Chipre',\r\n  CZ: 'Chequia',\r\n  CI: 'Costa de Marfil',\r\n  DK: 'Dinamarca',\r\n  DJ: 'Yibuti',\r\n  DM: 'Dominica',\r\n  DO: 'República Dominicana',\r\n  EC: 'Ecuador',\r\n  EG: 'Egipto',\r\n  SV: 'El Salvador',\r\n  GQ: 'Guinea Ecuatorial',\r\n  ER: 'Eritrea',\r\n  EE: 'Estonia',\r\n  ET: 'Etiopía',\r\n  FK: 'Islas Malvinas (Falkland)',\r\n  FO: 'Islas Feroe',\r\n  FJ: 'Fiyi',\r\n  FI: 'Finlandia',\r\n  FR: 'Francia',\r\n  GF: 'Guayana Francesa',\r\n  PF: 'Polinesia Francesa',\r\n  TF: 'Territorios Australes Franceses',\r\n  GA: 'Gabón',\r\n  GM: 'Gambia',\r\n  GE: 'Georgia',\r\n  DE: 'Alemania',\r\n  GH: 'Ghana',\r\n  GI: 'Gibraltar',\r\n  GR: 'Grecia',\r\n  GL: 'Groenlandia',\r\n  GD: 'Granada',\r\n  GP: 'Guadalupe',\r\n  GU: 'Guam',\r\n  GT: 'Guatemala',\r\n  GG: 'Guernsey',\r\n  GN: 'Guinea',\r\n  GW: 'Guinea-Bisáu',\r\n  GY: 'Guyana',\r\n  HT: 'Haití',\r\n  HM: 'Islas Heard y McDonald',\r\n  VA: 'Santa Sede',\r\n  HN: 'Honduras',\r\n  HK: 'Hong Kong',\r\n  HU: 'Hungría',\r\n  IS: 'Islandia',\r\n  IN: 'India',\r\n  ID: 'Indonesia',\r\n  IR: 'Irán (República Islámica de)',\r\n  IQ: 'Irak',\r\n  IE: 'Irlanda',\r\n  IM: 'Isla de Man',\r\n  IL: 'Israel',\r\n  IT: 'Italia',\r\n  JM: 'Jamaica',\r\n  JP: 'Japón',\r\n  JE: 'Jersey',\r\n  JO: 'Jordania',\r\n  KZ: 'Kazajistán',\r\n  KE: 'Kenia',\r\n  KI: 'Kiribati',\r\n  KP: 'Corea (República Popular Democrática de)',\r\n  KR: 'Corea (República de)',\r\n  KW: 'Kuwait',\r\n  KG: 'Kirguistán',\r\n  LA: 'República Democrática Popular Lao',\r\n  LV: 'Letonia',\r\n  LB: 'Líbano',\r\n  LS: 'Lesoto',\r\n  LR: 'Liberia',\r\n  LY: 'Libia',\r\n  LI: 'Liechtenstein',\r\n  LT: 'Lituania',\r\n  LU: 'Luxemburgo',\r\n  MO: 'Macao',\r\n  MK: 'Macedonia (ex República Yugoslava de)',\r\n  MG: 'Madagascar',\r\n  MW: 'Malaui',\r\n  MY: 'Malasia',\r\n  MV: 'Maldivas',\r\n  ML: 'Malí',\r\n  MT: 'Malta',\r\n  MH: 'Islas Marshall',\r\n  MQ: 'Martinica',\r\n  MR: 'Mauritania',\r\n  MU: 'Mauricio',\r\n  YT: 'Mayotte',\r\n  MX: 'México',\r\n  FM: 'Micronesia (Estados Federados de)',\r\n  MD: 'Moldavia (República de)',\r\n  MC: 'Mónaco',\r\n  MN: 'Mongolia',\r\n  ME: 'Montenegro',\r\n  MS: 'Montserrat',\r\n  MA: 'Marruecos',\r\n  MZ: 'Mozambique',\r\n  MM: 'Myanmar',\r\n  NA: 'Namibia',\r\n  NR: 'Nauru',\r\n  NP: 'Nepal',\r\n  NL: 'Países Bajos',\r\n  NC: 'Nueva Caledonia',\r\n  NZ: 'Nueva Zelanda',\r\n  NI: 'Nicaragua',\r\n  NE: 'Níger',\r\n  NG: 'Nigeria',\r\n  NU: 'Niue',\r\n  NF: 'Isla Norfolk',\r\n  MP: 'Islas Marianas del Norte',\r\n  NO: 'Noruega',\r\n  OM: 'Omán',\r\n  PK: 'Pakistán',\r\n  PW: 'Palaos',\r\n  PS: 'Palestina, Estado de',\r\n  PA: 'Panamá',\r\n  PG: 'Papúa Nueva Guinea',\r\n  PY: 'Paraguay',\r\n  PE: 'Perú',\r\n  PH: 'Filipinas',\r\n  PN: 'Pitcairn',\r\n  PL: 'Polonia',\r\n  PT: 'Portugal',\r\n  PR: 'Puerto Rico',\r\n  QA: 'Catar',\r\n  RO: 'Rumanía',\r\n  RU: 'Federación de Rusia',\r\n  RW: 'Ruanda',\r\n  RE: 'Reunión',\r\n  BL: 'San Bartolomé',\r\n  SH: 'Santa Elena, Ascensión y Tristán de Acuña',\r\n  KN: 'San Cristóbal y Nieves',\r\n  LC: 'Santa Lucía',\r\n  MF: 'San Martín (parte francesa)',\r\n  PM: 'San Pedro y Miquelón',\r\n  VC: 'San Vicente y las Granadinas',\r\n  WS: 'Samoa',\r\n  SM: 'San Marino',\r\n  ST: 'Santo Tomé y Príncipe',\r\n  SA: 'Arabia Saudita',\r\n  SN: 'Senegal',\r\n  RS: 'Serbia',\r\n  SC: 'Seychelles',\r\n  SL: 'Sierra Leona',\r\n  SG: 'Singapur',\r\n  SX: 'San Martín (parte holandesa)',\r\n  SK: 'Eslovaquia',\r\n  SI: 'Eslovenia',\r\n  SB: 'Islas Salomón',\r\n  SO: 'Somalia',\r\n  ZA: 'Sudáfrica',\r\n  GS: 'Georgia del Sur y las Islas Sandwich del Sur',\r\n  SS: 'Sudán del Sur',\r\n  ES: 'España',\r\n  LK: 'Sri Lanka',\r\n  SD: 'Sudán',\r\n  SR: 'Surinam',\r\n  SJ: 'Svalbard y Jan Mayen',\r\n  SZ: 'Suazilandia',\r\n  SE: 'Suecia',\r\n  CH: 'Suiza',\r\n  SY: 'República Árabe Siria',\r\n  TW: 'Taiwán, Provincia de China[a]',\r\n  TJ: 'Tayikistán',\r\n  TZ: 'Tanzania, República Unida de',\r\n  TH: 'Tailandia',\r\n  TL: 'Timor-Leste',\r\n  TG: 'Togo',\r\n  TK: 'Tokelau',\r\n  TO: 'Tonga',\r\n  TT: 'Trinidad y Tobago',\r\n  TN: 'Túnez',\r\n  TR: 'Turquía',\r\n  TM: 'Turkmenistán',\r\n  TC: 'Islas Turcas y Caicos',\r\n  TV: 'Tuvalu',\r\n  UG: 'Uganda',\r\n  UA: 'Ucrania',\r\n  AE: 'Emiratos Árabes Unidos',\r\n  GB: 'Reino Unido de Gran Bretaña',\r\n  UM: 'Islas Ultramarinas Menores de Estados Unidos',\r\n  US: 'Estados Unidos de América',\r\n  UY: 'Uruguay',\r\n  UZ: 'Uzbekistán',\r\n  VU: 'Vanuatu',\r\n  VE: 'Venezuela (República Bolivariana de)',\r\n  VN: 'Vietnam',\r\n  VG: 'Islas Vírgenes (Británicas)',\r\n  VI: 'Islas Vírgenes (EE.UU.)',\r\n  WF: 'Wallis y Futuna',\r\n  EH: 'Sahara Occidental',\r\n  YE: 'Yemen',\r\n  ZM: 'Zambia',\r\n  ZW: 'Zimbabue',\r\n  AX: 'Islas Åland',\r\n};\r\n\r\nexport const COUNTRIES_ES_MX: IDictionary<string> = {\r\n  AF: 'Afganistán',\r\n  AL: 'Albania',\r\n  DZ: 'Argelia',\r\n  AS: 'Samoa Americana',\r\n  AD: 'Andorra',\r\n  AO: 'Angola',\r\n  AI: 'Anguila',\r\n  AQ: 'Antártida',\r\n  AG: 'Antigua y Barbuda',\r\n  AR: 'Argentina',\r\n  AM: 'Armenia',\r\n  AW: 'Aruba',\r\n  AU: 'Australia',\r\n  AT: 'Austria',\r\n  AZ: 'Azerbaiyán',\r\n  BS: 'Bahamas',\r\n  BH: 'Baréin',\r\n  BD: 'Bangladés',\r\n  BB: 'Barbados',\r\n  BY: 'Bielorrusia',\r\n  BE: 'Bélgica',\r\n  BZ: 'Belice',\r\n  BJ: 'Benín',\r\n  BM: 'Bermudas',\r\n  BT: 'Bután',\r\n  BO: 'Bolivia (Estado Plurinacional de)',\r\n  BQ: 'Bonaire, San Eustaquio y Saba',\r\n  BA: 'Bosnia y Herzegovina',\r\n  BW: 'Botsuana',\r\n  BV: 'Isla Bouvet',\r\n  BR: 'Brasil',\r\n  IO: 'Territorio Británico del Océano Índico',\r\n  BN: 'Brunéi Darusalam',\r\n  BG: 'Bulgaria',\r\n  BF: 'Burkina Faso',\r\n  BI: 'Burundi',\r\n  CV: 'Cabo Verde',\r\n  KH: 'Camboya',\r\n  CM: 'Camerún',\r\n  CA: 'Canadá',\r\n  KY: 'Islas Caimán',\r\n  CF: 'República Centroafricana',\r\n  TD: 'Chad',\r\n  CL: 'Chile',\r\n  CN: 'China',\r\n  CX: 'Isla de Navidad',\r\n  CC: 'Islas Cocos (Keeling)',\r\n  CO: 'Colombia',\r\n  KM: 'Comoras',\r\n  CG: 'Congo',\r\n  CD: 'Congo (República Democrática del)',\r\n  CK: 'Islas Cook',\r\n  CR: 'Costa Rica',\r\n  HR: 'Croacia',\r\n  CU: 'Cuba',\r\n  CW: 'Curazao',\r\n  CY: 'Chipre',\r\n  CZ: 'Chequia',\r\n  CI: 'Costa de Marfil',\r\n  DK: 'Dinamarca',\r\n  DJ: 'Yibuti',\r\n  DM: 'Dominica',\r\n  DO: 'República Dominicana',\r\n  EC: 'Ecuador',\r\n  EG: 'Egipto',\r\n  SV: 'El Salvador',\r\n  GQ: 'Guinea Ecuatorial',\r\n  ER: 'Eritrea',\r\n  EE: 'Estonia',\r\n  ET: 'Etiopía',\r\n  FK: 'Islas Malvinas (Falkland)',\r\n  FO: 'Islas Feroe',\r\n  FJ: 'Fiyi',\r\n  FI: 'Finlandia',\r\n  FR: 'Francia',\r\n  GF: 'Guayana Francesa',\r\n  PF: 'Polinesia Francesa',\r\n  TF: 'Territorios Australes Franceses',\r\n  GA: 'Gabón',\r\n  GM: 'Gambia',\r\n  GE: 'Georgia',\r\n  DE: 'Alemania',\r\n  GH: 'Ghana',\r\n  GI: 'Gibraltar',\r\n  GR: 'Grecia',\r\n  GL: 'Groenlandia',\r\n  GD: 'Granada',\r\n  GP: 'Guadalupe',\r\n  GU: 'Guam',\r\n  GT: 'Guatemala',\r\n  GG: 'Guernsey',\r\n  GN: 'Guinea',\r\n  GW: 'Guinea-Bisáu',\r\n  GY: 'Guyana',\r\n  HT: 'Haití',\r\n  HM: 'Islas Heard y McDonald',\r\n  VA: 'Santa Sede',\r\n  HN: 'Honduras',\r\n  HK: 'Hong Kong',\r\n  HU: 'Hungría',\r\n  IS: 'Islandia',\r\n  IN: 'India',\r\n  ID: 'Indonesia',\r\n  IR: 'Irán (República Islámica de)',\r\n  IQ: 'Irak',\r\n  IE: 'Irlanda',\r\n  IM: 'Isla de Man',\r\n  IL: 'Israel',\r\n  IT: 'Italia',\r\n  JM: 'Jamaica',\r\n  JP: 'Japón',\r\n  JE: 'Jersey',\r\n  JO: 'Jordania',\r\n  KZ: 'Kazajistán',\r\n  KE: 'Kenia',\r\n  KI: 'Kiribati',\r\n  KP: 'Corea (República Popular Democrática de)',\r\n  KR: 'Corea (República de)',\r\n  KW: 'Kuwait',\r\n  KG: 'Kirguistán',\r\n  LA: 'República Democrática Popular Lao',\r\n  LV: 'Letonia',\r\n  LB: 'Líbano',\r\n  LS: 'Lesoto',\r\n  LR: 'Liberia',\r\n  LY: 'Libia',\r\n  LI: 'Liechtenstein',\r\n  LT: 'Lituania',\r\n  LU: 'Luxemburgo',\r\n  MO: 'Macao',\r\n  MK: 'Macedonia (ex República Yugoslava de)',\r\n  MG: 'Madagascar',\r\n  MW: 'Malaui',\r\n  MY: 'Malasia',\r\n  MV: 'Maldivas',\r\n  ML: 'Malí',\r\n  MT: 'Malta',\r\n  MH: 'Islas Marshall',\r\n  MQ: 'Martinica',\r\n  MR: 'Mauritania',\r\n  MU: 'Mauricio',\r\n  YT: 'Mayotte',\r\n  MX: 'México',\r\n  FM: 'Micronesia (Estados Federados de)',\r\n  MD: 'Moldavia (República de)',\r\n  MC: 'Mónaco',\r\n  MN: 'Mongolia',\r\n  ME: 'Montenegro',\r\n  MS: 'Montserrat',\r\n  MA: 'Marruecos',\r\n  MZ: 'Mozambique',\r\n  MM: 'Myanmar',\r\n  NA: 'Namibia',\r\n  NR: 'Nauru',\r\n  NP: 'Nepal',\r\n  NL: 'Países Bajos',\r\n  NC: 'Nueva Caledonia',\r\n  NZ: 'Nueva Zelanda',\r\n  NI: 'Nicaragua',\r\n  NE: 'Níger',\r\n  NG: 'Nigeria',\r\n  NU: 'Niue',\r\n  NF: 'Isla Norfolk',\r\n  MP: 'Islas Marianas del Norte',\r\n  NO: 'Noruega',\r\n  OM: 'Omán',\r\n  PK: 'Pakistán',\r\n  PW: 'Palaos',\r\n  PS: 'Palestina, Estado de',\r\n  PA: 'Panamá',\r\n  PG: 'Papúa Nueva Guinea',\r\n  PY: 'Paraguay',\r\n  PE: 'Perú',\r\n  PH: 'Filipinas',\r\n  PN: 'Pitcairn',\r\n  PL: 'Polonia',\r\n  PT: 'Portugal',\r\n  PR: 'Puerto Rico',\r\n  QA: 'Catar',\r\n  RO: 'Rumanía',\r\n  RU: 'Federación de Rusia',\r\n  RW: 'Ruanda',\r\n  RE: 'Reunión',\r\n  BL: 'San Bartolomé',\r\n  SH: 'Santa Elena, Ascensión y Tristán de Acuña',\r\n  KN: 'San Cristóbal y Nieves',\r\n  LC: 'Santa Lucía',\r\n  MF: 'San Martín (parte francesa)',\r\n  PM: 'San Pedro y Miquelón',\r\n  VC: 'San Vicente y las Granadinas',\r\n  WS: 'Samoa',\r\n  SM: 'San Marino',\r\n  ST: 'Santo Tomé y Príncipe',\r\n  SA: 'Arabia Saudita',\r\n  SN: 'Senegal',\r\n  RS: 'Serbia',\r\n  SC: 'Seychelles',\r\n  SL: 'Sierra Leona',\r\n  SG: 'Singapur',\r\n  SX: 'San Martín (parte holandesa)',\r\n  SK: 'Eslovaquia',\r\n  SI: 'Eslovenia',\r\n  SB: 'Islas Salomón',\r\n  SO: 'Somalia',\r\n  ZA: 'Sudáfrica',\r\n  GS: 'Georgia del Sur y las Islas Sandwich del Sur',\r\n  SS: 'Sudán del Sur',\r\n  ES: 'España',\r\n  LK: 'Sri Lanka',\r\n  SD: 'Sudán',\r\n  SR: 'Surinam',\r\n  SJ: 'Svalbard y Jan Mayen',\r\n  SZ: 'Suazilandia',\r\n  SE: 'Suecia',\r\n  CH: 'Suiza',\r\n  SY: 'República Árabe Siria',\r\n  TW: 'Taiwán, Provincia de China[a]',\r\n  TJ: 'Tayikistán',\r\n  TZ: 'Tanzania, República Unida de',\r\n  TH: 'Tailandia',\r\n  TL: 'Timor-Leste',\r\n  TG: 'Togo',\r\n  TK: 'Tokelau',\r\n  TO: 'Tonga',\r\n  TT: 'Trinidad y Tobago',\r\n  TN: 'Túnez',\r\n  TR: 'Turquía',\r\n  TM: 'Turkmenistán',\r\n  TC: 'Islas Turcas y Caicos',\r\n  TV: 'Tuvalu',\r\n  UG: 'Uganda',\r\n  UA: 'Ucrania',\r\n  AE: 'Emiratos Árabes Unidos',\r\n  GB: 'Reino Unido de Gran Bretaña',\r\n  UM: 'Islas Ultramarinas Menores de Estados Unidos',\r\n  US: 'Estados Unidos de América',\r\n  UY: 'Uruguay',\r\n  UZ: 'Uzbekistán',\r\n  VU: 'Vanuatu',\r\n  VE: 'Venezuela (República Bolivariana de)',\r\n  VN: 'Vietnam',\r\n  VG: 'Islas Vírgenes (Británicas)',\r\n  VI: 'Islas Vírgenes (EE.UU.)',\r\n  WF: 'Wallis y Futuna',\r\n  EH: 'Sahara Occidental',\r\n  YE: 'Yemen',\r\n  ZM: 'Zambia',\r\n  ZW: 'Zimbabue',\r\n  AX: 'Islas Åland',\r\n};\r\n\r\nexport const COUNTRIES_LANGUAGE_MAPPING = {\r\n  'en-us': COUNTRIES,\r\n  'en-gb': COUNTRIES_EN_GB,\r\n  'fr-fr': COUNTRIES_FR,\r\n  'de-de': COUNTRIES_DE,\r\n  'it-it': COUNTRIES_IT,\r\n  'fr-ca': COUNTRIES_FR_CA,\r\n  'es-es': COUNTRIES_ES_ES,\r\n  'es-mx': COUNTRIES_ES_MX,\r\n};\r\n","import { IDictionary } from './countries';\r\n\r\n// new Intl.DisplayNames(['fr-FR'], { type: 'currency' });\r\n// currencyNames.of(key) // key is currency code\r\n\r\nexport const CURRENCIES_EN: IDictionary<string> = {\r\n  AUD: 'Australian Dollar (AUD)',\r\n  ARS: 'Argentinean Peso (ARS)',\r\n  AZN: 'Azerbaijani Manat (AZN)',\r\n  BDT: 'Bangladeshi Taka (BDT)',\r\n  BGN: 'Bulgarian Lev (BGN)',\r\n  BHD: 'Bahraini Dinar (BHD)',\r\n  BRL: 'Brazilian Real (BRL)',\r\n  BWP: 'Botswanan Pula (BWP)',\r\n  CAD: 'Canadian Dollar (CAD) ',\r\n  CHF: 'Switzerland Franc (CHF)',\r\n  CLP: 'Chilean Peso (CLP)',\r\n  COP: 'Colombian Peso (COP)',\r\n  CRC: 'Costa Rican Colón (CRC)',\r\n  CZK: 'Czech koruna (CZK)',\r\n  DKK: 'Denmark Krone (DKK)',\r\n  DOP: 'Dominican Peso (DOP)',\r\n  DZD: 'Algerian Dinar (DZD)',\r\n  EGP: 'Egyptian Pound (EGP)',\r\n  ETB: 'Ethiopian Birr (ETB)',\r\n  EUR: 'Euro (EUR)',\r\n  FJD: 'Fijian Dollar (FJD)',\r\n  GBP: 'UK Pound (GBP)',\r\n  GHS: 'Ghana Cedi (GHS)',\r\n  GTQ: 'Guatemalan Quetzal (GTQ)',\r\n  HKD: 'Hong Kong Dollar (HKD)',\r\n  HRK: 'Croatian Kuna (HRK)',\r\n  HUF: 'Hungarian forint (HUF)',\r\n  IDR: 'Indonesian Rupiah',\r\n  ILS: 'Shekel (ILS)',\r\n  INR: 'Indian Rupee (INR)',\r\n  IQD: 'Iraqi Dinar (IQD)',\r\n  JMD: 'Jamaican Dollar (JMD)',\r\n  JOD: 'Jordanian Dinar (JOD)',\r\n  JPY: 'Japan Yen (JPY)',\r\n  KES: 'Kenyan Shilling (KES)',\r\n  KRW: 'Won (KRW)',\r\n  KWD: 'Kuwaiti Dinar (KWD)',\r\n  KZT: 'Kazakhstani Tenge (KZT)',\r\n  LBP: 'Lebanese Pound (LBP)',\r\n  LKR: 'Sri Lankan Rupee (LKR)',\r\n  LTL: 'Lithuanian Litas (LTL)',\r\n  LVL: 'Latvian Lats (LVL)',\r\n  MAD: 'Moroccan Dirham (MAD)',\r\n  MUR: 'Mauritian Rupee (MUR)',\r\n  MWK: 'Malawian Kwacha (MWK)',\r\n  MXN: 'Mexico Peso (MXN)',\r\n  MYR: 'Malaysian Ringgit',\r\n  NGN: 'Nigerian Naira (NGN)',\r\n  NOK: 'Norwegian Krone (NOK)',\r\n  NZD: 'New Zealand Dollar (NZD)',\r\n  OMR: 'Rial Omani (OMR)',\r\n  PEN: 'Peruvian Nuevo Sol (PEN)',\r\n  PHP: 'Philippine Peso (PHP)',\r\n  PKR: 'Pakistan Rupee (PKR)',\r\n  PLN: 'Polish zloty (PLN)',\r\n  QAR: 'Qatari Rial (QAR)',\r\n  RUB: 'Russian Ruble (RUB)',\r\n  RWF: 'Rwandan Franc (RWF)',\r\n  SAR: 'Saudi Riyal (SAR)',\r\n  SEK: 'Sweden Krona (SEK)',\r\n  SGD: 'Singapore Dollar (SGD)',\r\n  THB: 'Thai Baht (THB)',\r\n  TND: 'Tunisian Dinar (TND)',\r\n  TOP: 'Tongan Pa?anga (TOP)',\r\n  TRY: 'Turkish Lira (TRY)',\r\n  TTD: 'Trinidad and Tobago Dollar (TTD)',\r\n  TWD: 'Taiwan Dollar (TWD)',\r\n  TZS: 'Tanzanian Shilling (TZS)',\r\n  UGX: 'Ugandan Shilling (UGX)',\r\n  USD: 'US Dollar (USD)',\r\n  UYU: 'Uruguayan Peso (UYU)',\r\n  VEF: 'Venezuelan Bolivar Fuertes (VEF)',\r\n  VND: 'Vietnam Dong',\r\n  XAF: 'Central African CFA Franc (XAF)',\r\n  XCD: 'East Caribbean Dollar (XCD)',\r\n  XOF: 'West African CFA Franc (XOF)',\r\n  ZAR: 'South African rand (ZAR)',\r\n  ZMW: 'Zambian Kwacha (ZMW)',\r\n};\r\n\r\nexport const CURRENCIES_EN_GB: IDictionary<string> = {\r\n  AUD: 'Australian Dollar (AUD)',\r\n  ARS: 'Argentinean Peso (ARS)',\r\n  AZN: 'Azerbaijani Manat (AZN)',\r\n  BDT: 'Bangladeshi Taka (BDT)',\r\n  BGN: 'Bulgarian Lev (BGN)',\r\n  BHD: 'Bahraini Dinar (BHD)',\r\n  BRL: 'Brazilian Real (BRL)',\r\n  BWP: 'Botswanan Pula (BWP)',\r\n  CAD: 'Canadian Dollar (CAD)',\r\n  CHF: 'Switzerland Franc (CHF)',\r\n  CLP: 'Chilean Peso (CLP)',\r\n  COP: 'Colombian Peso (COP)',\r\n  CRC: 'Costa Rican Colón (CRC)',\r\n  CZK: 'Czech koruna (CZK)',\r\n  DKK: 'Denmark Krone (DKK)',\r\n  DOP: 'Dominican Peso (DOP)',\r\n  DZD: 'Algerian Dinar (DZD)',\r\n  EGP: 'Egyptian Pound (EGP)',\r\n  ETB: 'Ethiopian Birr (ETB)',\r\n  EUR: 'Euro (EUR)',\r\n  FJD: 'Fijian Dollar (FJD)',\r\n  GBP: 'UK Pound (GBP)',\r\n  GHS: 'Ghana Cedi (GHS)',\r\n  GTQ: 'Guatemalan Quetzal (GTQ)',\r\n  HKD: 'Hong Kong Dollar (HKD)',\r\n  HRK: 'Croatian Kuna (HRK)',\r\n  HUF: 'Hungarian forint (HUF)',\r\n  IDR: 'Indonesian Rupiah',\r\n  ILS: 'Shekel (ILS)',\r\n  INR: 'Indian Rupee (INR)',\r\n  IQD: 'Iraqi Dinar (IQD)',\r\n  JMD: 'Jamaican Dollar (JMD)',\r\n  JOD: 'Jordanian Dinar (JOD)',\r\n  JPY: 'Japan Yen (JPY)',\r\n  KES: 'Kenyan Shilling (KES)',\r\n  KRW: 'Won (KRW)',\r\n  KWD: 'Kuwaiti Dinar (KWD)',\r\n  KZT: 'Kazakhstani Tenge (KZT)',\r\n  LBP: 'Lebanese Pound (LBP)',\r\n  LKR: 'Sri Lankan Rupee (LKR)',\r\n  LTL: 'Lithuanian Litas (LTL)',\r\n  LVL: 'Latvian Lats (LVL)',\r\n  MAD: 'Moroccan Dirham (MAD)',\r\n  MUR: 'Mauritian Rupee (MUR)',\r\n  MWK: 'Malawian Kwacha (MWK)',\r\n  MXN: 'Mexico Peso (MXN)',\r\n  MYR: 'Malaysian Ringgit',\r\n  NGN: 'Nigerian Naira (NGN)',\r\n  NOK: 'Norwegian Krone (NOK)',\r\n  NZD: 'New Zealand Dollar (NZD)',\r\n  OMR: 'Rial Omani (OMR)',\r\n  PEN: 'Peruvian Nuevo Sol (PEN)',\r\n  PHP: 'Philippine Peso (PHP)',\r\n  PKR: 'Pakistan Rupee (PKR)',\r\n  PLN: 'Polish zloty (PLN)',\r\n  QAR: 'Qatari Rial (QAR)',\r\n  RUB: 'Russian Ruble (RUB)',\r\n  RWF: 'Rwandan Franc (RWF)',\r\n  SAR: 'Saudi Riyal (SAR)',\r\n  SEK: 'Sweden Krona (SEK)',\r\n  SGD: 'Singapore Dollar (SGD)',\r\n  THB: 'Thai Baht (THB)',\r\n  TND: 'Tunisian Dinar (TND)',\r\n  TOP: 'Tongan Pa?anga (TOP)',\r\n  TRY: 'Turkish Lira (TRY)',\r\n  TTD: 'Trinidad and Tobago Dollar (TTD)',\r\n  TWD: 'Taiwan Dollar (TWD)',\r\n  TZS: 'Tanzanian Shilling (TZS)',\r\n  UGX: 'Ugandan Shilling (UGX)',\r\n  USD: 'US Dollar (USD)',\r\n  UYU: 'Uruguayan Peso (UYU)',\r\n  VEF: 'Venezuelan Bolivar Fuertes (VEF)',\r\n  VND: 'Vietnam Dong',\r\n  XAF: 'Central African CFA Franc (XAF)',\r\n  XCD: 'East Caribbean Dollar (XCD)',\r\n  XOF: 'West African CFA Franc (XOF)',\r\n  ZAR: 'South African rand (ZAR)',\r\n  ZMW: 'Zambian Kwacha (ZMW)',\r\n};\r\n\r\nexport const CURRENCIES_FR: IDictionary<string> = {\r\n  AUD: 'Dollar australien (AUD)',\r\n  ARS: 'Peso argentin (ARS)',\r\n  AZN: 'Manat azéri (AZN)',\r\n  BDT: 'Taka bangladeshi (BDT)',\r\n  BGN: 'Lev bulgare (BGN)',\r\n  BHD: 'Dinar bahreïni (BHD)',\r\n  BRL: 'Réal brésilien (BRL)',\r\n  BWP: 'Pula botswanais (BWP)',\r\n  CAD: 'Dollar canadien (CAD)',\r\n  CHF: 'Franc suisse (CHF)',\r\n  CLP: 'Peso chilien (CLP)',\r\n  COP: 'Peso colombien (COP)',\r\n  CRC: 'Colón costaricain (CRC)',\r\n  CZK: 'Couronne tchèque (CZK)',\r\n  DKK: 'Couronne danoise (DKK)',\r\n  DOP: 'Peso dominicain (DOP)',\r\n  DZD: 'Dinar algérien (DZD)',\r\n  EGP: 'Livre égyptienne (EGP)',\r\n  ETB: 'Birr éthiopien (ETB)',\r\n  EUR: 'Euro (EUR)',\r\n  FJD: 'Dollar fidjien (FJD)',\r\n  GBP: 'Livre sterling (GBP)',\r\n  GHS: 'Cédi ghanéen (GHS)',\r\n  GTQ: 'Quetzal guatémaltèque (GTQ)',\r\n  HKD: 'Dollar de Hong Kong (HKD)',\r\n  HRK: 'Kuna croate (HRK)',\r\n  HUF: 'Forint hongrois (HUF)',\r\n  IDR: 'Roupie indonésienne (IDR)',\r\n  ILS: 'Nouveau shekel israélien (ILS)',\r\n  INR: 'Roupie indienne (INR)',\r\n  IQD: 'Dinar irakien (IQD)',\r\n  JMD: 'Dollar jamaïcain (JMD)',\r\n  JOD: 'Dinar jordanien (JOD)',\r\n  JPY: 'Yen japonais (JPY)',\r\n  KES: 'Shilling kényan (KES)',\r\n  KRW: 'Won sud-coréen (KRW)',\r\n  KWD: 'Dinar koweïtien (KWD)',\r\n  KZT: 'Tenge kazakh (KZT)',\r\n  LBP: 'Livre libanaise (LBP)',\r\n  LKR: 'Roupie srilankaise (LKR)',\r\n  LTL: 'Litas lituanien (LTL)',\r\n  LVL: 'Lats lettons (LVL)',\r\n  MAD: 'Dirham marocain (MAD)',\r\n  MUR: 'Roupie mauricienne (MUR)',\r\n  MWK: 'Kwacha malawite (MWK)',\r\n  MXN: 'Peso mexicain (MXN)',\r\n  MYR: 'Ringgit malais (MYR)',\r\n  NGN: 'Naira nigérian (NGN)',\r\n  NOK: 'Couronne norvégienne (NOK)',\r\n  NZD: 'Dollar néo-zélandais (NZD)',\r\n  OMR: 'Riyal omanais (OMR)',\r\n  PEN: 'Sol péruvien (PEN)',\r\n  PHP: 'Peso philippin (PHP)',\r\n  PKR: 'Roupie pakistanaise (PKR)',\r\n  PLN: 'Zloty polonais (PLN)',\r\n  QAR: 'Riyal qatari (QAR)',\r\n  RUB: 'Rouble russe (RUB)',\r\n  RWF: 'Franc rwandais (RWF)',\r\n  SAR: 'Riyal saoudien (SAR)',\r\n  SEK: 'Couronne suédoise (SEK)',\r\n  SGD: 'Dollar de Singapour (SGD)',\r\n  THB: 'Baht thaïlandais (THB)',\r\n  TND: 'Dinar tunisien (TND)',\r\n  TOP: 'Pa’anga tongan (TOP)',\r\n  TRY: 'Livre turque (TRY)',\r\n  TTD: 'Dollar de Trinité-et-Tobago (TTD)',\r\n  TWD: 'Nouveau dollar taïwanais (TWD)',\r\n  TZS: 'Shilling tanzanien (TZS)',\r\n  UGX: 'Shilling ougandais (UGX)',\r\n  USD: 'Dollar des États-Unis (USD)',\r\n  UYU: 'Peso uruguayen (UYU)',\r\n  VEF: 'Bolivar Fuertes vénézuélien (VEF)',\r\n  VND: 'Dông vietnamien',\r\n  XAF: 'Franc CFA (XAF)',\r\n  XCD: 'Dollar des Caraïbes orientales (XCD)',\r\n  XOF: 'Franc CFA (XOF)',\r\n  ZAR: 'Rand sud-africain (ZAR)',\r\n  ZMW: 'Kwacha zambien (ZMW)',\r\n};\r\n\r\nexport const CURRENCIES_DE: IDictionary<string> = {\r\n  AUD: 'Australischer Dollar (AUD)',\r\n  ARS: 'Argentinischer Peso (ARS)',\r\n  AZN: 'Aserbaidschan-Manat (AZN)',\r\n  BDT: 'Bangladesch-Taka (BDT)',\r\n  BGN: 'Bulgarischer Lew (BGN)',\r\n  BHD: 'Bahrain-Dinar (BHD)',\r\n  BRL: 'Brasilianischer Real (BRL)',\r\n  BWP: 'Botswanischer Pula (BWP)',\r\n  CAD: 'Kanadischer Dollar (CAD)',\r\n  CHF: 'Schweizer Franken (CHF)',\r\n  CLP: 'Chilenischer Peso (CLP)',\r\n  COP: 'Kolumbianischer Peso (COP)',\r\n  CRC: 'Costa-Rica-Colón (CRC)',\r\n  CZK: 'Tschechische Krone (CZK)',\r\n  DKK: 'Dänische Krone (DKK)',\r\n  DOP: 'Dominikanischer Peso (DOP)',\r\n  DZD: 'Algerischer Dinar (DZD)',\r\n  EGP: 'Ägyptisches Pfund (EGP)',\r\n  ETB: 'Äthiopischer Birr (ETB)',\r\n  EUR: 'Euro (EUR)',\r\n  FJD: 'Fidschi-Dollar (FJD)',\r\n  GBP: 'Britisches Pfund (GBP)',\r\n  GHS: 'Ghanaischer Cedi (GHS)',\r\n  GTQ: 'Guatemaltekischer Quetzal (GTQ)',\r\n  HKD: 'Hongkong-Dollar (HKD)',\r\n  HRK: 'Kroatischer Kuna (HRK)',\r\n  HUF: 'Ungarischer Forint (HUF)',\r\n  IDR: 'Indonesische Rupiah (IDR)',\r\n  ILS: 'Israelischer Neuer Schekel (ILS)',\r\n  INR: 'Indische Rupie (INR)',\r\n  IQD: 'Irakischer Dinar (IQD)',\r\n  JMD: 'Jamaika-Dollar (JMD)',\r\n  JOD: 'Jordanischer Dinar (JOD)',\r\n  JPY: 'Japanischer Yen (JPY)',\r\n  KES: 'Kenia-Schilling (KES)',\r\n  KRW: 'Südkoreanischer Won (KRW)',\r\n  KWD: 'Kuwait-Dinar (KWD)',\r\n  KZT: 'Kasachischer Tenge (KZT)',\r\n  LBP: 'Libanesisches Pfund (LBP)',\r\n  LKR: 'Sri-Lanka-Rupie (LKR)',\r\n  LTL: 'Litauischer Litas (LTL)',\r\n  LVL: 'Lettische Lats (LVL)',\r\n  MAD: 'Marokkanischer Dirham (MAD)',\r\n  MUR: 'Mauritius-Rupie (MUR)',\r\n  MWK: 'Malawi-Kwacha (MWK)',\r\n  MXN: 'Mexikanischer Peso (MXN)',\r\n  MYR: 'Malaysischer Ringgit (MYR)',\r\n  NGN: 'Nigerianischer Naira (NGN)',\r\n  NOK: 'Norwegische Krone (NOK)',\r\n  NZD: 'Neuseeland-Dollar (NZD)',\r\n  OMR: 'Omanischer Rial (OMR)',\r\n  PEN: 'Peruanischer Sol (PEN)',\r\n  PHP: 'Philippinischer Peso (PHP)',\r\n  PKR: 'Pakistanische Rupie (PKR)',\r\n  PLN: 'Polnischer Złoty (PLN)',\r\n  QAR: 'Katar-Riyal (QAR)',\r\n  RUB: 'Russischer Rubel (RUB)',\r\n  RWF: 'Ruanda-Franc (RWF)',\r\n  SAR: 'Saudi-Rial (SAR)',\r\n  SEK: 'Schwedische Krone (SEK)',\r\n  SGD: 'Singapur-Dollar (SGD)',\r\n  THB: 'Thailändischer Baht (THB)',\r\n  TND: 'Tunesischer Dinar (TND)',\r\n  TOP: 'Tongaischer Paʻanga (TOP)',\r\n  TRY: 'Türkische Lira (TRY)',\r\n  TTD: 'Trinidad-und-Tobago-Dollar (TTD)',\r\n  TWD: 'Neuer Taiwan-Dollar (TWD)',\r\n  TZS: 'Tansania-Schilling (TZS)',\r\n  UGX: 'Uganda-Schilling (UGX)',\r\n  USD: 'US-Dollar (USD)',\r\n  UYU: 'Uruguayischer Peso (UYU)',\r\n  VEF: 'Venezolanischer Bolivar Fuertes (VEF)',\r\n  VND: 'Vietnamesischer Dong (VND)',\r\n  XAF: 'Zentralafrikanischer CFA-Franc (XAF)',\r\n  XCD: 'Ostkaribischer Dollar (XCD)',\r\n  XOF: 'Westafrikanischer CFA-Franc (XOF)',\r\n  ZAR: 'Südafrikanischer Rand (ZAR)',\r\n  ZMW: 'Kwacha (ZMW)',\r\n};\r\n\r\nexport const CURRENCIES_IT: IDictionary<string> = {\r\n  AUD: 'Dollaro australiano (AUD)',\r\n  ARS: 'Peso argentino (ARS)',\r\n  AZN: 'Manat azero (AZN)',\r\n  BDT: 'Taka bangladese (BDT)',\r\n  BGN: 'Lev bulgaro (BGN)',\r\n  BHD: 'Dinaro del Bahrein (BHD)',\r\n  BRL: 'Real brasiliano (BRL)',\r\n  BWP: 'Pula del Botswana (BWP)',\r\n  CAD: 'Dollaro canadese (CAD)',\r\n  CHF: 'Franco svizzero (CHF)',\r\n  CLP: 'Peso cileno (CLP)',\r\n  COP: 'Peso colombiano (COP)',\r\n  CRC: 'Colón costaricano (CRC)',\r\n  CZK: 'Corona ceca (CZK)',\r\n  DKK: 'Corona danese (DKK)',\r\n  DOP: 'Peso dominicano (DOP)',\r\n  DZD: 'Dinaro algerino (DZD)',\r\n  EGP: 'Sterlina egiziana (EGP)',\r\n  ETB: 'Birr etiope (ETB)',\r\n  EUR: 'Euro (EUR)',\r\n  FJD: 'Dollaro delle Figi (FJD)',\r\n  GBP: 'Sterlina britannica (GBP)',\r\n  GHS: 'Cedi ghanese (GHS)',\r\n  GTQ: 'Quetzal guatemalteco (GTQ)',\r\n  HKD: 'Dollaro di Hong Kong (HKD)',\r\n  HRK: 'Kuna croata (HRK)',\r\n  HUF: 'Fiorino ungherese (HUF)',\r\n  IDR: 'Rupia indonesiana (IDR)',\r\n  ILS: 'Nuovo siclo israeliano (ILS)',\r\n  INR: 'Rupia indiana (INR)',\r\n  IQD: 'Dinaro iracheno (IQD)',\r\n  JMD: 'Dollaro giamaicano (JMD)',\r\n  JOD: 'Dinaro giordano (JOD)',\r\n  JPY: 'Yen giapponese (JPY)',\r\n  KES: 'Scellino keniota (KES)',\r\n  KRW: 'Won sudcoreano (KRW)',\r\n  KWD: 'Dinaro kuwaitiano (KWD)',\r\n  KZT: 'Tenge kazako (KZT)',\r\n  LBP: 'Lira libanese (LBP)',\r\n  LKR: 'Rupia di Sri Lanka (LKR)',\r\n  LTL: 'Litas lituano (LTL)',\r\n  LVL: 'Lats lettone (LVL)',\r\n  MAD: 'Dirham marocchino (MAD)',\r\n  MUR: 'Rupia mauriziana (MUR)',\r\n  MWK: 'Kwacha malawiano (MWK)',\r\n  MXN: 'Peso messicano (MXN)',\r\n  MYR: 'Ringgit malese (MYR)',\r\n  NGN: 'Naira nigeriana (NGN)',\r\n  NOK: 'Corona norvegese (NOK)',\r\n  NZD: 'Dollaro neozelandese (NZD)',\r\n  OMR: 'Rial omanita (OMR)',\r\n  PEN: 'Sol peruviano (PEN)',\r\n  PHP: 'Peso filippino (PHP)',\r\n  PKR: 'Rupia pakistana (PKR)',\r\n  PLN: 'Zloty polacco (PLN)',\r\n  QAR: 'Rial qatariano (QAR)',\r\n  RUB: 'Rublo russo (RUB)',\r\n  RWF: 'Franco ruandese (RWF)',\r\n  SAR: 'Riyal saudita (SAR)',\r\n  SEK: 'Corona svedese (SEK)',\r\n  SGD: 'Dollaro di Singapore (SGD)',\r\n  THB: 'Baht thailandese (THB)',\r\n  TND: 'Dinaro tunisino (TND)',\r\n  TOP: 'Paʻanga tongano (TOP)',\r\n  TRY: 'Lira turca (TRY)',\r\n  TTD: 'Dollaro di Trinidad e Tobago (TTD)',\r\n  TWD: 'Nuovo dollaro taiwanese (TWD)',\r\n  TZS: 'Scellino della Tanzania (TZS)',\r\n  UGX: 'Scellino ugandese (UGX)',\r\n  USD: 'Dollaro statunitense (USD)',\r\n  UYU: 'Peso uruguayano (UYU)',\r\n  VEF: 'Bolivar Fuertes venezuelano (VEF)',\r\n  VND: 'Dong vietnamita (VND)',\r\n  XAF: 'Franco CFA BEAC (XAF)',\r\n  XCD: 'Dollaro dei Caraibi orientali (XCD)',\r\n  XOF: 'Franco CFA BCEAO (XOF)',\r\n  ZAR: 'Rand sudafricano (ZAR)',\r\n  ZMW: 'Kwacha zambiano (ZMW)',\r\n};\r\n\r\nexport const CURRENCIES_FR_CA: IDictionary<string> = {\r\n  AUD: 'Dollar australien (AUD)',\r\n  ARS: 'Peso argentin (ARS)',\r\n  AZN: 'Manat azerbaïdjanais (AZN)',\r\n  BDT: 'Taka bangladais (BDT)',\r\n  BGN: 'Lev bulgare (BGN)',\r\n  BHD: 'Dinar bahreïni (BHD)',\r\n  BRL: 'Real brésilien (BRL)',\r\n  BWP: 'Pula botswanais (BWP)',\r\n  CAD: 'Dollar canadien (CAD)',\r\n  CHF: 'Franc suisse (CHF)',\r\n  CLP: 'Peso chilien (CLP)',\r\n  COP: 'Peso colombien (COP)',\r\n  CRC: 'Colón costaricain (CRC)',\r\n  CZK: 'Couronne tchèque (CZK)',\r\n  DKK: 'Couronne danoise (DKK)',\r\n  DOP: 'Peso dominicain (DOP)',\r\n  DZD: 'Dinar algérien (DZD)',\r\n  EGP: 'Livre égyptienne (EGP)',\r\n  ETB: 'Birr éthiopien (ETB)',\r\n  EUR: 'Euro (EUR)',\r\n  FJD: 'Dollar fidjien (FJD)',\r\n  GBP: 'Livre sterling (GBP)',\r\n  GHS: 'Cedi ghanéen (GHS)',\r\n  GTQ: 'Quetzal guatémaltèque (GTQ)',\r\n  HKD: 'Dollar de Hong Kong (HKD)',\r\n  HRK: 'Kuna croate (HRK)',\r\n  HUF: 'Forint hongrois (HUF)',\r\n  IDR: 'Roupie indonésienne (IDR)',\r\n  ILS: 'Shekel israélien (ILS)',\r\n  INR: 'Roupie indienne (INR)',\r\n  IQD: 'Dinar irakien (IQD)',\r\n  JMD: 'Dollar jamaïcain (JMD)',\r\n  JOD: 'Dinar jordanien (JOD)',\r\n  JPY: 'Yen japonais (JPY)',\r\n  KES: 'Shilling kényan (KES)',\r\n  KRW: 'Won sud-coréen (KRW)',\r\n  KWD: 'Dinar koweïtien (KWD)',\r\n  KZT: 'Tenge kazakh (KZT)',\r\n  LBP: 'Livre libanaise (LBP)',\r\n  LKR: 'Roupie srilankaise (LKR)',\r\n  LTL: 'Litas lituanien (LTL)',\r\n  LVL: 'Lats letton (LVL)',\r\n  MAD: 'Dirham marocain (MAD)',\r\n  MUR: 'Roupie mauricienne (MUR)',\r\n  MWK: 'Kwacha malawien (MWK)',\r\n  MXN: 'Peso mexicain (MXN)',\r\n  MYR: 'Ringgit malaisien (MYR)',\r\n  NGN: 'Naira nigérian (NGN)',\r\n  NOK: 'Couronne norvégienne (NOK)',\r\n  NZD: 'Dollar néo-zélandais (NZD)',\r\n  OMR: 'Rial omanais (OMR)',\r\n  PEN: 'Nouveau sol péruvien (PEN)',\r\n  PHP: 'Peso philippin (PHP)',\r\n  PKR: 'Roupie pakistanaise (PKR)',\r\n  PLN: 'Zloty polonais (PLN)',\r\n  QAR: 'Rial qatari (QAR)',\r\n  RUB: 'Rouble russe (RUB)',\r\n  RWF: 'Franc rwandais (RWF)',\r\n  SAR: 'Riyal saoudien (SAR)',\r\n  SEK: 'Couronne suédoise (SEK)',\r\n  SGD: 'Dollar de Singapour (SGD)',\r\n  THB: 'Baht thaïlandais (THB)',\r\n  TND: 'Dinar tunisien (TND)',\r\n  TOP: \"Pa'anga tongan (TOP)\",\r\n  TRY: 'Lira turque (TRY)',\r\n  TTD: 'Dollar de Trinité-et-Tobago (TTD)',\r\n  TWD: 'Dollar taïwanais (TWD)',\r\n  TZS: 'Shilling tanzanien (TZS)',\r\n  UGX: 'Shilling ougandais (UGX)',\r\n  USD: 'Dollar américain (USD)',\r\n  UYU: 'Peso uruguayen (UYU)',\r\n  VEF: 'Bolivar vénézuélien (VEF)',\r\n  VND: 'Dong vietnamien (VND)',\r\n  XAF: \"Franc CFA d'Afrique centrale (XAF)\",\r\n  XCD: 'Dollar des Caraïbes orientales (XCD)',\r\n  XOF: \"Franc CFA d'Afrique de l'Ouest (XOF)\",\r\n  ZAR: 'Rand sud-africain (ZAR)',\r\n  ZMW: 'Kwacha zambien (ZMW)',\r\n};\r\n\r\nexport const CURRENCIES_ES_ES: IDictionary<string> = {\r\n  AUD: 'Dólar australiano (AUD)',\r\n  ARS: 'Peso argentino (ARS)',\r\n  AZN: 'Manat azerbaiyano (AZN)',\r\n  BDT: 'Taka bangladesí (BDT)',\r\n  BGN: 'Lev búlgaro (BGN)',\r\n  BHD: 'Dinar bareiní (BHD)',\r\n  BRL: 'Real brasileño (BRL)',\r\n  BWP: 'Pula botsuano (BWP)',\r\n  CAD: 'Dólar canadiense (CAD)',\r\n  CHF: 'Franco suizo (CHF)',\r\n  CLP: 'Peso chileno (CLP)',\r\n  COP: 'Peso colombiano (COP)',\r\n  CRC: 'Colón costarricense (CRC)',\r\n  CZK: 'Corona checa (CZK)',\r\n  DKK: 'Corona danesa (DKK)',\r\n  DOP: 'Peso dominicano (DOP)',\r\n  DZD: 'Dinar argelino (DZD)',\r\n  EGP: 'Libra egipcia (EGP)',\r\n  ETB: 'Birr etíope (ETB)',\r\n  EUR: 'Euro (EUR)',\r\n  FJD: 'Dólar fijiano (FJD)',\r\n  GBP: 'Libra esterlina (GBP)',\r\n  GHS: 'Cedi ghanés (GHS)',\r\n  GTQ: 'Quetzal guatemalteco (GTQ)',\r\n  HKD: 'Dólar de Hong Kong (HKD)',\r\n  HRK: 'Kuna croata (HRK)',\r\n  HUF: 'Forinto húngaro (HUF)',\r\n  IDR: 'Rupia indonesia (IDR)',\r\n  ILS: 'Nuevo séquel (ILS)',\r\n  INR: 'Rupia india (INR)',\r\n  IQD: 'Dinar iraquí (IQD)',\r\n  JMD: 'Dólar jamaiquino (JMD)',\r\n  JOD: 'Dinar jordano (JOD)',\r\n  JPY: 'Yen japonés (JPY)',\r\n  KES: 'Chelín keniano (KES)',\r\n  KRW: 'Won surcoreano (KRW)',\r\n  KWD: 'Dinar kuwaití (KWD)',\r\n  KZT: 'Tenge kazajo (KZT)',\r\n  LBP: 'Libra libanesa (LBP)',\r\n  LKR: 'Rupia de Sri Lanka (LKR)',\r\n  LTL: 'Litas lituano (LTL)',\r\n  LVL: 'Lats letón (LVL)',\r\n  MAD: 'Dirham marroquí (MAD)',\r\n  MUR: 'Rupia mauriciana (MUR)',\r\n  MWK: 'Kwacha malauí (MWK)',\r\n  MXN: 'Peso mexicano (MXN)',\r\n  MYR: 'Ringgit malasio (MYR)',\r\n  NGN: 'Naira nigeriano (NGN)',\r\n  NOK: 'Corona noruega (NOK)',\r\n  NZD: 'Dólar neozelandés (NZD)',\r\n  OMR: 'Rial omaní (OMR)',\r\n  PEN: 'Sol peruano (PEN)',\r\n  PHP: 'Peso filipino (PHP)',\r\n  PKR: 'Rupia pakistaní (PKR)',\r\n  PLN: 'Złoty polaco (PLN)',\r\n  QAR: 'Rial catarí (QAR)',\r\n  RUB: 'Rublo ruso (RUB)',\r\n  RWF: 'Franco ruandés (RWF)',\r\n  SAR: 'Riyal saudí (SAR)',\r\n  SEK: 'Corona sueca (SEK)',\r\n  SGD: 'Dólar de Singapur (SGD)',\r\n  THB: 'Baht tailandés (THB)',\r\n  TND: 'Dinar tunecino (TND)',\r\n  TOP: \"Pa'anga tongano (TOP)\",\r\n  TRY: 'Lira turca (TRY)',\r\n  TTD: 'Dólar de Trinidad y Tobago (TTD)',\r\n  TWD: 'Dólar taiwanés (TWD)',\r\n  TZS: 'Chelín tanzano (TZS)',\r\n  UGX: 'Chelín ugandés (UGX)',\r\n  USD: 'Dólar estadounidense (USD)',\r\n  UYU: 'Peso uruguayo (UYU)',\r\n  VEF: 'Bolívar venezolano (VEF)',\r\n  VND: 'Dong vietnamita (VND)',\r\n  XAF: 'Franco CFA de África Central (XAF)',\r\n  XCD: 'Dólar del Caribe Oriental (XCD)',\r\n  XOF: 'Franco CFA de África Occidental (XOF)',\r\n  ZAR: 'Rand sudafricano (ZAR)',\r\n  ZMW: 'Kwacha zambiano (ZMW)',\r\n};\r\n\r\nexport const CURRENCIES_ES_MX: IDictionary<string> = {\r\n  AUD: 'Dólar australiano (AUD)',\r\n  ARS: 'Peso argentino (ARS)',\r\n  AZN: 'Manat azerbaiyano (AZN)',\r\n  BDT: 'Taka bangladesí (BDT)',\r\n  BGN: 'Lev búlgaro (BGN)',\r\n  BHD: 'Dinar bareiní (BHD)',\r\n  BRL: 'Real brasileño (BRL)',\r\n  BWP: 'Pula de Botsuana (BWP)',\r\n  CAD: 'Dólar canadiense (CAD)',\r\n  CHF: 'Franco suizo (CHF)',\r\n  CLP: 'Peso chileno (CLP)',\r\n  COP: 'Peso colombiano (COP)',\r\n  CRC: 'Colón costarricense (CRC)',\r\n  CZK: 'Corona checa (CZK)',\r\n  DKK: 'Corona danesa (DKK)',\r\n  DOP: 'Peso dominicano (DOP)',\r\n  DZD: 'Dinar argelino (DZD)',\r\n  EGP: 'Libra egipcia (EGP)',\r\n  ETB: 'Birr etíope (ETB)',\r\n  EUR: 'Euro (EUR)',\r\n  FJD: 'Dólar fiyiano (FJD)',\r\n  GBP: 'Libra esterlina (GBP)',\r\n  GHS: 'Cedi ghanés (GHS)',\r\n  GTQ: 'Quetzal guatemalteco (GTQ)',\r\n  HKD: 'Dólar de Hong Kong (HKD)',\r\n  HRK: 'Kuna croata (HRK)',\r\n  HUF: 'Forinto húngaro (HUF)',\r\n  IDR: 'Rupia indonesia (IDR)',\r\n  ILS: 'Nuevo shéquel (ILS)',\r\n  INR: 'Rupia india (INR)',\r\n  IQD: 'Dinar iraquí (IQD)',\r\n  JMD: 'Dólar jamaiquino (JMD)',\r\n  JOD: 'Dinar jordano (JOD)',\r\n  JPY: 'Yen japonés (JPY)',\r\n  KES: 'Chelín keniano (KES)',\r\n  KRW: 'Won surcoreano (KRW)',\r\n  KWD: 'Dinar kuwaití (KWD)',\r\n  KZT: 'Tenge kazajo (KZT)',\r\n  LBP: 'Libra libanesa (LBP)',\r\n  LKR: 'Rupia de Sri Lanka (LKR)',\r\n  LTL: 'Litas lituano (LTL)',\r\n  LVL: 'Lats letón (LVL)',\r\n  MAD: 'Dirham marroquí (MAD)',\r\n  MUR: 'Rupia mauriciana (MUR)',\r\n  MWK: 'Kwacha malauí (MWK)',\r\n  MXN: 'Peso mexicano (MXN)',\r\n  MYR: 'Ringgit malasio (MYR)',\r\n  NGN: 'Naira nigeriano (NGN)',\r\n  NOK: 'Corona noruega (NOK)',\r\n  NZD: 'Dólar neozelandés (NZD)',\r\n  OMR: 'Rial omaní (OMR)',\r\n  PEN: 'Sol peruano (PEN)',\r\n  PHP: 'Peso filipino (PHP)',\r\n  PKR: 'Rupia pakistaní (PKR)',\r\n  PLN: 'Złoty polaco (PLN)',\r\n  QAR: 'Rial catarí (QAR)',\r\n  RUB: 'Rublo ruso (RUB)',\r\n  RWF: 'Franco ruandés (RWF)',\r\n  SAR: 'Riyal saudí (SAR)',\r\n  SEK: 'Corona sueca (SEK)',\r\n  SGD: 'Dólar de Singapur (SGD)',\r\n  THB: 'Baht tailandés (THB)',\r\n  TND: 'Dinar tunecino (TND)',\r\n  TOP: \"Pa'anga tongano (TOP)\",\r\n  TRY: 'Lira turca (TRY)',\r\n  TTD: 'Dólar de Trinidad y Tobago (TTD)',\r\n  TWD: 'Dólar taiwanés (TWD)',\r\n  TZS: 'Chelín tanzano (TZS)',\r\n  UGX: 'Chelín ugandés (UGX)',\r\n  USD: 'Dólar estadounidense (USD)',\r\n  UYU: 'Peso uruguayo (UYU)',\r\n  VEF: 'Bolívar fuerte venezolano (VEF)',\r\n  VND: 'Dong vietnamita (VND)',\r\n  XAF: 'Franco CFA de África Central (XAF)',\r\n  XCD: 'Dólar del Caribe Oriental (XCD)',\r\n  XOF: 'Franco CFA de África Occidental (XOF)',\r\n  ZAR: 'Rand sudafricano (ZAR)',\r\n  ZMW: 'Kwacha zambiano (ZMW)',\r\n};\r\n\r\nexport const CURRENCIES_LANGUAGE_MAPPING = {\r\n  'en-us': CURRENCIES_EN,\r\n  'en-gb': CURRENCIES_EN_GB,\r\n  'fr-fr': CURRENCIES_FR,\r\n  'de-de': CURRENCIES_DE,\r\n  'it-it': CURRENCIES_IT,\r\n  'fr-ca': CURRENCIES_FR_CA,\r\n  'es-es': CURRENCIES_ES_ES,\r\n  'es-mx': CURRENCIES_ES_MX,\r\n};\r\n\r\nexport const COUNTRY_CODE_CURRENCY_MAPPING = {\r\n  US: 'USD',\r\n  FR: 'EUR',\r\n  DE: 'EUR',\r\n  IT: 'EUR',\r\n};\r\n","import { IDictionary } from './countries';\r\n\r\nexport const LANGUAGES_EN: IDictionary<string> = {\r\n  EN: 'English',\r\n  FR: 'French',\r\n  AR: 'Arabic',\r\n  DA: 'Danish',\r\n  ZH: 'Chinese',\r\n  DE: 'German',\r\n  IT: 'Italian',\r\n  KO: 'Korean',\r\n  PT: 'Portuguese',\r\n  ES: 'Spanish',\r\n  FI: 'Finnish',\r\n  HI: 'Hindi',\r\n  JA: 'Japanese',\r\n  KN: 'Kannada',\r\n  ML: 'Malayalam',\r\n  NL: 'Dutch',\r\n  NO: 'Norwegian (Nynorsk)',\r\n  SV: 'Swedish',\r\n  TA: 'Tamil',\r\n  TE: 'Telugu',\r\n};\r\n\r\nexport const LANGUAGES_EN_GB: IDictionary<string> = {\r\n  EN: 'English',\r\n  FR: 'French',\r\n  AR: 'Arabic',\r\n  DA: 'Danish',\r\n  ZH: 'Chinese',\r\n  DE: 'German',\r\n  IT: 'Italian',\r\n  KO: 'Korean',\r\n  PT: 'Portuguese',\r\n  ES: 'Spanish',\r\n  FI: 'Finnish',\r\n  HI: 'Hindi',\r\n  JA: 'Japanese',\r\n  KN: 'Kannada',\r\n  ML: 'Malayalam',\r\n  NL: 'Dutch',\r\n  NO: 'Norwegian (Nynorsk)',\r\n  SV: 'Swedish',\r\n  TA: 'Tamil',\r\n  TE: 'Telugu',\r\n};\r\n\r\nexport const LANGUAGES_FR: IDictionary<string> = {\r\n  EN: 'Anglais',\r\n  FR: 'Français',\r\n  AR: 'Arabe',\r\n  DA: 'Danois',\r\n  ZH: 'Chinois',\r\n  DE: 'Allemand',\r\n  IT: 'Italien',\r\n  KO: 'Coréen',\r\n  PT: 'Portugais',\r\n  ES: 'Espagnol',\r\n  FI: 'Finnois',\r\n  HI: 'Hindi',\r\n  JA: 'Japonais',\r\n  KN: 'Kannada',\r\n  ML: 'Malayalam',\r\n  NL: 'Néerlandais',\r\n  NO: 'Norvégien (Nynorsk)',\r\n  SV: 'Nuédois',\r\n  TA: 'Tamoul',\r\n  TE: 'Télougou',\r\n};\r\n\r\nexport const LANGUAGES_DE: IDictionary<string> = {\r\n  EN: 'Englisch',\r\n  FR: 'Französisch',\r\n  AR: 'Arabisch',\r\n  DA: 'Dänisch',\r\n  ZH: 'Chinesisch',\r\n  DE: 'Deutsch',\r\n  IT: 'Italienisch',\r\n  KO: 'Koreanisch',\r\n  PT: 'Portugiesisch',\r\n  ES: 'Spanisch',\r\n  FI: 'Finnisch',\r\n  HI: 'Hindi',\r\n  JA: 'Japanisch',\r\n  KN: 'Kannada',\r\n  ML: 'Malayalam',\r\n  NL: 'Niederländisch',\r\n  NO: 'Norwegisch',\r\n  SV: 'Schwedisch',\r\n  TA: 'Tamil',\r\n  TE: 'Telugu',\r\n};\r\n\r\nexport const LANGUAGES_IT: IDictionary<string> = {\r\n  EN: 'Inglese',\r\n  FR: 'Francese',\r\n  AR: 'Arabo',\r\n  DA: 'Danese',\r\n  ZH: 'Cinese',\r\n  DE: 'Tedesco',\r\n  IT: 'Italiano',\r\n  KO: 'Coreano',\r\n  PT: 'Portoghese',\r\n  ES: 'Spagnolo',\r\n  FI: 'Finlandese',\r\n  HI: 'Hindi',\r\n  JA: 'Giapponese',\r\n  KN: 'Kannada',\r\n  ML: 'Malayalam',\r\n  NL: 'Olandese',\r\n  NO: 'Norvegese',\r\n  SV: 'Svedese',\r\n  TA: 'Tamil',\r\n  TE: 'Telugu',\r\n};\r\n\r\nexport const LANGUAGES_FR_CA: IDictionary<string> = {\r\n  EN: 'anglais',\r\n  FR: 'français',\r\n  AR: 'arabe',\r\n  DA: 'danois',\r\n  ZH: 'chinois',\r\n  DE: 'allemand',\r\n  IT: 'italien',\r\n  KO: 'coréen',\r\n  PT: 'portugais',\r\n  ES: 'espagnol',\r\n  FI: 'finnois',\r\n  HI: 'hindi',\r\n  JA: 'japonais',\r\n  KN: 'kannada',\r\n  ML: 'malayalam',\r\n  NL: 'néerlandais',\r\n  NO: 'norvégien (nynorsk)',\r\n  SV: 'suédois',\r\n  TA: 'tamoul',\r\n  TE: 'télougou',\r\n};\r\n\r\nexport const LANGUAGES_ES_ES: IDictionary<string> = {\r\n  EN: 'Inglés',\r\n  FR: 'Francés',\r\n  AR: 'Árabe',\r\n  DA: 'Danés',\r\n  ZH: 'Chino',\r\n  DE: 'Alemán',\r\n  IT: 'Italiano',\r\n  KO: 'Coreano',\r\n  PT: 'Portugués',\r\n  ES: 'Español',\r\n  FI: 'Finés',\r\n  HI: 'Hindi',\r\n  JA: 'Japonés',\r\n  KN: 'Canarés',\r\n  ML: 'Malayalam',\r\n  NL: 'Neerlandés',\r\n  NO: 'Noruego (Nynorsk)',\r\n  SV: 'Sueco',\r\n  TA: 'Tamil',\r\n  TE: 'Telugu',\r\n};\r\n\r\nexport const LANGUAGES_ES_MX: IDictionary<string> = {\r\n  EN: 'Inglés',\r\n  FR: 'Francés',\r\n  AR: 'Árabe',\r\n  DA: 'Danés',\r\n  ZH: 'Chino',\r\n  DE: 'Alemán',\r\n  IT: 'Italiano',\r\n  KO: 'Coreano',\r\n  PT: 'Portugués',\r\n  ES: 'Español',\r\n  FI: 'Finlandés',\r\n  HI: 'Hindi',\r\n  JA: 'Japonés',\r\n  KN: 'Canarés',\r\n  ML: 'Malayalam',\r\n  NL: 'Neerlandés',\r\n  NO: 'Noruego (Nynorsk)',\r\n  SV: 'Sueco',\r\n  TA: 'Tamil',\r\n  TE: 'Telugu',\r\n};\r\n\r\nexport const LANGUAGES_LANGUAGE_MAPPING = {\r\n  'en-us': LANGUAGES_EN,\r\n  'es-gb': LANGUAGES_EN_GB,\r\n  'fr-fr': LANGUAGES_FR,\r\n  'de-de': LANGUAGES_DE,\r\n  'it-it': LANGUAGES_IT,\r\n  'fr-ca': LANGUAGES_FR_CA,\r\n  'es-es': LANGUAGES_ES_ES,\r\n  'es-mx': LANGUAGES_ES_MX,\r\n};\r\n","import { IDictionary } from './countries';\r\n\r\nexport const LOCALE_EN: IDictionary<string> = {\r\n  14337: 'Arabic - United Arab Emirates',\r\n  3073: 'Arabic - Egypt',\r\n  1025: 'Arabic - Saudi Arabia',\r\n  1093: 'Bangla - India',\r\n  1029: 'Czech - Czech Republic',\r\n  1030: 'Danish - Denmark',\r\n  3079: 'German - Austria',\r\n  2055: 'German - Switzerland',\r\n  1031: 'German - Germany',\r\n  1032: 'Greek - Greece',\r\n  '-4': 'English - United Arab Emirates',\r\n  3081: 'English - Australia',\r\n  4105: 'English - Canada',\r\n  2057: 'English - United Kingdom',\r\n  14345: 'English - Indonesia',\r\n  6153: 'English - Ireland',\r\n  16393: 'English - India',\r\n  17417: 'English - Malaysia',\r\n  5129: 'English - New Zealand',\r\n  13321: 'English - Philippines',\r\n  18441: 'English - Singapore',\r\n  1033: 'English - United States',\r\n  '-1': 'English - International',\r\n  7177: 'English - South Africa',\r\n  11274: 'Spanish - Argentina',\r\n  13322: 'Spanish - Chile',\r\n  9226: 'Spanish - Colombia',\r\n  12298: 'Spanish - Ecuador',\r\n  3082: 'Spanish - Spain',\r\n  2058: 'Spanish - Mexico',\r\n  10250: 'Spanish - Peru',\r\n  21514: 'Spanish - United States',\r\n  8202: 'Spanish - Venezuela',\r\n  '-3': 'Spanish - Latin America',\r\n  1035: 'Finnish - Finland',\r\n  2060: 'French - Belgium',\r\n  3084: 'French - Canada',\r\n  4108: 'French - Switzerland',\r\n  1036: 'French - France',\r\n  5132: 'French - Luxembourg',\r\n  '-2': 'French - Africa',\r\n  1037: 'Hebrew - Israel',\r\n  1081: 'Hindi - India',\r\n  1038: 'Hungarian - Hungary',\r\n  1057: 'Indonesian - Indonesia',\r\n  1040: 'Italian - Italy',\r\n  1041: 'Japanese - Japan',\r\n  1042: 'Korean - Korea',\r\n  1063: 'Lithuanian - Lithuania',\r\n  1102: 'Marathi - India',\r\n  1044: 'Norwegian Bokmål - Norway',\r\n  2067: 'Dutch - Belgium',\r\n  1043: 'Dutch - Netherlands',\r\n  1045: 'Polish - Poland',\r\n  1046: 'Portuguese - Brazil',\r\n  2070: 'Portuguese - Portugal',\r\n  1049: 'Russian - Russia',\r\n  1053: 'Swedish - Sweden',\r\n  1098: 'Telugu - India',\r\n  1054: 'Thai - Thailand',\r\n  1055: 'Turkish - Turkey',\r\n  1066: 'Vietnamese - Vietnam',\r\n  2052: 'Chinese, Simplified - China',\r\n  3076: 'Chinese, Traditional - Hong Kong SAR',\r\n  4100: 'Chinese, Simplified - Singapore',\r\n  1028: 'Chinese, Traditional - Taiwan',\r\n};\r\n\r\nexport const LOCALE_FR: IDictionary<string> = {\r\n  14337: 'Arabe - Émirats arabes unis',\r\n  3073: 'Arabe - Égypte',\r\n  1025: 'Arabe - Arabie Saoudite',\r\n  1093: 'Bangla - Inde',\r\n  1029: 'Tchèque - République tchèque',\r\n  1030: 'Danois - Danemark',\r\n  3079: 'Allemand - Autriche',\r\n  2055: 'Allemand - Suisse',\r\n  1031: 'Allemand - Allemagne',\r\n  1032: 'Grec- Grèce',\r\n  '-4': 'Anglais - Émirats arabes unis',\r\n  3081: 'Anglais - Australie',\r\n  4105: 'Anglais - Canada',\r\n  2057: 'Anglais - Royaume-Uni',\r\n  14345: 'Anglais - Indonésie',\r\n  6153: 'Anglais - Irlande',\r\n  16393: 'Anglais - Inde',\r\n  17417: 'Anglais - Malaisie',\r\n  5129: 'Anglais - Nouvelle-Zélande',\r\n  13321: 'Anglais - Philippines',\r\n  18441: 'Anglais - Singapour',\r\n  1033: 'Anglais - États-Unis',\r\n  '-1': 'Anglais - International',\r\n  7177: 'Anglais - Afrique du Sud',\r\n  11274: 'Espagnol - Argentine',\r\n  13322: 'Espagnol - Chili',\r\n  9226: 'Espagnol - Colombie',\r\n  12298: 'Espagnol - Équateur',\r\n  3082: 'Espagnol - Espagne',\r\n  2058: 'Espagnol - Mexique',\r\n  10250: 'Espagnol - Pérou',\r\n  21514: 'Espagnol - États-Unis',\r\n  8202: 'Espagnol - Venezuela',\r\n  '-3': 'Espagnol - Amérique latine',\r\n  1035: 'Finnois - Finlande',\r\n  2060: 'Français - Belgique',\r\n  3084: 'Français - Canada',\r\n  4108: 'Français - Suisse',\r\n  1036: 'Français - France',\r\n  5132: 'Français - Luxembourg',\r\n  '-2': 'Français - Afrique',\r\n  1037: 'Hébreu - Israël',\r\n  1081: 'Hindi - Inde',\r\n  1038: 'Hongrois - Hongrie',\r\n  1057: 'Indonésien - Indonésie',\r\n  1040: 'Italien - Italie',\r\n  1041: 'Japonais - Japon',\r\n  1042: 'Coréen - Corée',\r\n  1063: 'Lituanien - Lituanie',\r\n  1102: 'Marathi - Inde',\r\n  1044: 'Bokmål norvégien - Norvège',\r\n  2067: 'Néerlandais - Belgique',\r\n  1043: 'Néerlandais - Pays-Bas',\r\n  1045: 'Polonais - Pologne',\r\n  1046: 'Portugais - Brésil',\r\n  2070: 'Portugais - Portugal',\r\n  1049: 'Russe - Russie',\r\n  1053: 'Suédois - Suède',\r\n  1098: 'Telugu - Inde',\r\n  1054: 'Thaïlandais - Thaïlande',\r\n  1055: 'Turc - Turquie',\r\n  1066: 'Vietnamien - Viêt Nam',\r\n  2052: 'Chinois, simplifié - Chine',\r\n  3076: 'Chinois, traditionnel - RAS de Hong Kong',\r\n  4100: 'Chinois, simplifié - Singapour',\r\n  1028: 'Chinois, traditionnel - Taïwan',\r\n};\r\n\r\nexport const LOCALE_DE: IDictionary<string> = {\r\n  14337: 'Arabisch - Vereinigte Arabische Emirate',\r\n  3073: 'Arabisch - Ägypten',\r\n  1025: 'Arabisch - Saudi-Arabien',\r\n  1093: 'Bangla - Indien',\r\n  1029: 'Tschechisch - Tschechische Republik',\r\n  1030: 'Dänisch - Dänemark',\r\n  3079: 'Deutsch - Österreich',\r\n  2055: 'Deutsch - Schweiz',\r\n  1031: 'Deutsch - Deutschland',\r\n  1032: 'Griechisch - Griechenland',\r\n  '-4': 'Englisch - Vereinigte Arabische Emirate',\r\n  3081: 'Englisch - Australien',\r\n  4105: 'Englisch - Kanada',\r\n  2057: 'Englisch - Vereinigtes Königreich',\r\n  14345: 'Englisch - Indonesien',\r\n  6153: 'Englisch - Irland',\r\n  16393: 'Englisch - Indien',\r\n  17417: 'Englisch - Malaysia',\r\n  5129: 'Englisch - Neuseeland',\r\n  13321: 'Englisch - Philippinen',\r\n  18441: 'Englisch - Singapur',\r\n  1033: 'Englisch - Vereinigte Staaten',\r\n  '-1': 'Englisch - International',\r\n  7177: 'Englisch - Südafrika',\r\n  11274: 'Spanisch - Argentinien',\r\n  13322: 'Spanisch - Chile',\r\n  9226: 'Spanisch - Kolumbien',\r\n  12298: 'Spanisch - Ecuador',\r\n  3082: 'Spanisch - Spanien',\r\n  2058: 'Spanisch - Mexiko',\r\n  10250: 'Spanisch - Peru',\r\n  21514: 'Spanisch - Vereinigte Staaten',\r\n  8202: 'Spanisch - Venezuela',\r\n  '-3': 'Spanisch - Lateinamerika',\r\n  1035: 'Finnisch - Finnland',\r\n  2060: 'Französisch - Belgien',\r\n  3084: 'Französisch - Kanada',\r\n  4108: 'Französisch - Schweiz',\r\n  1036: 'Französisch - Frankreich',\r\n  5132: 'Französisch - Luxemburg',\r\n  '-2': 'Französisch - Afrika',\r\n  1037: 'Hebräisch - Israel',\r\n  1081: 'Hindi - Indien',\r\n  1038: 'Ungarisch - Ungarn',\r\n  1057: 'Indonesisch - Indonesien',\r\n  1040: 'Italienisch - Italien',\r\n  1041: 'Japanisch - Japan',\r\n  1042: 'Koreanisch - Korea',\r\n  1063: 'Litauisch - Litauen',\r\n  1102: 'Marathi - Indien',\r\n  1044: 'Norwegisch Bokmål - Norwegen',\r\n  2067: 'Niederländisch - Belgien',\r\n  1043: 'Niederländisch - Niederlande',\r\n  1045: 'Polnisch - Polen',\r\n  1046: 'Portugiesisch - Brasilien',\r\n  2070: 'Portugiesisch - Portugal',\r\n  1049: 'Russisch - Russland',\r\n  1053: 'Schwedisch - Schweden',\r\n  1098: 'Telugu - Indien',\r\n  1054: 'Thailändisch - Thailand',\r\n  1055: 'Türkisch - Türkei',\r\n  1066: 'Vietnamesisch - Vietnam',\r\n  2052: 'Chinesisch (vereinfacht) - China',\r\n  3076: 'Chinesisch (traditionell) - Hongkong',\r\n  4100: 'Chinesisch (vereinfacht) - Singapur',\r\n  1028: 'Chinesisch (traditionell) - Taiwan',\r\n};\r\n\r\nexport const LOCALE_IT: IDictionary<string> = {\r\n  14337: 'Arabo - Emirati Arabi Uniti',\r\n  3073: 'Arabo - Egitto',\r\n  1025: 'Arabo - Arabia Saudita',\r\n  1093: 'Bangla - India',\r\n  1029: 'Ceco - Repubblica Ceca',\r\n  1030: 'Danese - Danimarca',\r\n  3079: 'Tedesco - Austria',\r\n  2055: 'Tedesco - Svizzera',\r\n  1031: 'Tedesco - Germania',\r\n  1032: 'Greco - Grecia',\r\n  '-4': 'Inglese - Emirati Arabi Uniti',\r\n  3081: 'Inglese - Australia',\r\n  4105: 'Inglese - Canada',\r\n  2057: 'Inglese - Regno Unito',\r\n  14345: 'Inglese - Indonesia',\r\n  6153: 'Inglese - Irlanda',\r\n  16393: 'Inglese - India',\r\n  17417: 'Inglese - Malaysia',\r\n  5129: 'Inglese - Nuova Zelanda',\r\n  13321: 'Inglese - Filippine',\r\n  18441: 'Inglese - Singapore',\r\n  1033: 'Inglese - Stati Uniti',\r\n  '-1': 'Inglese - Internazionale',\r\n  7177: 'Inglese - Sudafrica',\r\n  11274: 'Spagnolo - Argentina',\r\n  13322: 'Spagnolo - Cile',\r\n  9226: 'Spagnolo - Colombia',\r\n  12298: 'Spagnolo - Ecuador',\r\n  3082: 'Spagnolo - Spagna',\r\n  2058: 'Spagnolo - Messico',\r\n  10250: 'Spagnolo - Perù',\r\n  21514: 'Spagnolo - Stati Uniti',\r\n  8202: 'Spagnolo - Venezuela',\r\n  '-3': 'Spagnolo - America Latina',\r\n  1035: 'Finlandese - Finlandia',\r\n  2060: 'Francese - Belgio',\r\n  3084: 'Francese - Canada',\r\n  4108: 'Francese - Svizzera',\r\n  1036: 'Francese - Francia',\r\n  5132: 'Francese - Lussemburgo',\r\n  '-2': 'Francese - Africa',\r\n  1037: 'Ebraico - Israele',\r\n  1081: 'Hindi - India',\r\n  1038: 'Ungherese - Ungheria',\r\n  1057: 'Indonesiano - Indonesia',\r\n  1040: 'Italiano - Italia',\r\n  1041: 'Giapponese - Giappone',\r\n  1042: 'Coreano - Corea',\r\n  1063: 'Lituano - Lituania',\r\n  1102: 'Marathi - India',\r\n  1044: 'Norvegese Bokmål - Norvegia',\r\n  2067: 'Olandese - Belgio',\r\n  1043: 'Olandese - Paesi Bassi',\r\n  1045: 'Polacco - Polonia',\r\n  1046: 'Portoghese - Brasile',\r\n  2070: 'Portoghese - Portogallo',\r\n  1049: 'Russo - Russia',\r\n  1053: 'Svedese - Svezia',\r\n  1098: 'Telugu - India',\r\n  1054: 'Tailandese - Thailandia',\r\n  1055: 'Turco - Turchia',\r\n  1066: 'Vietnamita - Vietnam',\r\n  2052: 'Cinese semplificato - Cina',\r\n  3076: 'Cinese tradizionale - Hong Kong (SAR)',\r\n  4100: 'Cinese semplificato - Singapore',\r\n  1028: 'Cinese tradizionale - Taiwan',\r\n};\r\n\r\nexport const LOCALE_LANGUAGE_MAPPING = {\r\n  'en-us': LOCALE_EN,\r\n  'fr-fr': LOCALE_FR,\r\n};\r\n\r\n// Supported languages in the system\r\nexport const SUPPORTED_LOCALES_EN: IDictionary<string> = {\r\n  1033: 'English - United States',\r\n  2057: 'English - United Kingdom',\r\n  1036: 'French - France',\r\n  1031: 'German - Germany',\r\n  1040: 'Italian - Italy',\r\n  3084: 'French - Canada',\r\n  3082: 'Spanish - Spain',\r\n  2058: 'Spanish - Mexico',\r\n};\r\n\r\nexport const SUPPORTED_LOCALES_EN_GB: IDictionary<string> = {\r\n  1033: 'English - United States',\r\n  2057: 'English - United Kingdom',\r\n  1036: 'French - France',\r\n  1031: 'German - Germany',\r\n  1040: 'Italian - Italy',\r\n  3084: 'French - Canada',\r\n  3082: 'Spanish - Spain',\r\n  2058: 'Spanish - Mexico',\r\n};\r\n\r\nexport const SUPPORTED_LOCALES_FR: IDictionary<string> = {\r\n  1033: 'Anglais - États-Unis',\r\n  2057: 'Anglais - Royaume-Uni',\r\n  1036: 'Français - France',\r\n  1031: 'Allemand - Allemagne',\r\n  1040: 'Italien - Italie',\r\n  3084: 'Français - Canada',\r\n  3082: 'Espagnol - Espagne',\r\n  2058: 'Espagnol - Mexique',\r\n};\r\n\r\nexport const SUPPORTED_LOCALES_DE: IDictionary<string> = {\r\n  1033: 'Englisch - Vereinigte Staaten',\r\n  2057: 'Englisch - Vereinigtes Königreich',\r\n  1036: 'Französisch - Frankreich',\r\n  1031: 'Deutsch - Deutschland',\r\n  1040: 'Italienisch - Italien',\r\n  3084: 'Französisch - Kanada',\r\n  3082: 'Spanisch - Spanien',\r\n  2058: 'Spanisch - Mexiko',\r\n};\r\n\r\nexport const SUPPORTED_LOCALES_IT: IDictionary<string> = {\r\n  1033: 'Inglese - Stati Uniti',\r\n  2057: 'Inglese - Regno Unito',\r\n  1036: 'Francese - Francia',\r\n  1031: 'Tedesco - Germania',\r\n  1040: 'Italiano - Italia',\r\n  3084: 'Francese - Canada',\r\n  3082: 'Spagnolo - Spagna',\r\n  2058: 'Spagnolo - Messico',\r\n};\r\n\r\nexport const SUPPORTED_LOCALES_FR_CA: IDictionary<string> = {\r\n  1033: 'Anglais - États-Unis',\r\n  2057: 'Anglais - Royaume-Uni',\r\n  1036: 'Français - France',\r\n  1031: 'Allemand - Allemagne',\r\n  1040: 'Italien - Italie',\r\n  3084: 'Français - Canada',\r\n  3082: 'Espagnol - Espagne',\r\n  2058: 'Espagnol - Mexique',\r\n};\r\n\r\nexport const SUPPORTED_LOCALES_ES_ES: IDictionary<string> = {\r\n  1033: 'Inglés - Estados Unidos',\r\n  2057: 'Inglés - Reino Unido',\r\n  1036: 'Francés - Francia',\r\n  1031: 'Alemán - Alemania',\r\n  1040: 'Italiano - Italia',\r\n  3084: 'Francés - Canadá',\r\n  3082: 'Español - España',\r\n  2058: 'Español - México',\r\n};\r\n\r\nexport const SUPPORTED_LOCALES_ES_MX: IDictionary<string> = {\r\n  1033: 'Inglés - Estados Unidos',\r\n  2057: 'Inglés - Reino Unido',\r\n  1036: 'Francés - Francia',\r\n  1031: 'Alemán - Alemania',\r\n  1040: 'Italiano - Italia',\r\n  3084: 'Francés - Canadá',\r\n  3082: 'Español - España',\r\n  2058: 'Español - México',\r\n};\r\n\r\nexport const SUPPORTED_LOCALES_MAPPING = {\r\n  'en-us': SUPPORTED_LOCALES_EN,\r\n  'en-gb': SUPPORTED_LOCALES_EN_GB,\r\n  'fr-fr': SUPPORTED_LOCALES_FR,\r\n  'de-de': SUPPORTED_LOCALES_DE,\r\n  'it-it': SUPPORTED_LOCALES_IT,\r\n  'fr-ca': SUPPORTED_LOCALES_FR_CA,\r\n  'es-es': SUPPORTED_LOCALES_ES_ES,\r\n  'es-mx': SUPPORTED_LOCALES_ES_MX,\r\n};\r\n","import { IDictionary } from './countries';\r\n\r\nexport const TIMEZONE_EN: IDictionary<string> = {\r\n  75: '(GMT-12:00) International Date Line West',\r\n  74: '(GMT-11:00) Midway Island',\r\n  73: '(GMT-10:00) Hawaii',\r\n  72: '(GMT-09:00) Alaska',\r\n  71: '(GMT-08:00) Pacific Time (US & Canada); Tijuana',\r\n  68: '(GMT-07:00) Arizona',\r\n  69: '(GMT-07:00) Chihuahua',\r\n  70: '(GMT-07:00) Mountain Time (US & Canada)',\r\n  64: '(GMT-06:00) Central America',\r\n  65: '(GMT-06:00) Central Time (US & Canada)',\r\n  66: '(GMT-06:00) Guadalajara',\r\n  67: '(GMT-06:00) Saskatchewan',\r\n  61: '(GMT-05:00) Bogota',\r\n  62: '(GMT-05:00) Eastern Time (US & Canada)',\r\n  63: '(GMT-05:00) Indiana (East)',\r\n  58: '(GMT-04:00) Atlantic Time (Canada)',\r\n  59: '(GMT-04:00) Caracas',\r\n  57: '(GMT-03:30) Newfoundland',\r\n  60: '(GMT-03:00) Santiago',\r\n  54: '(GMT-03:00) Brasilia',\r\n  55: '(GMT-03:00) Buenos Aires',\r\n  56: '(GMT-03:00) Greenland',\r\n  53: '(GMT-02:00) Mid-Atlantic',\r\n  51: '(GMT-01:00) Azores',\r\n  52: '(GMT-01:00) Cape Verde Is.',\r\n  49: '(GMT) Casablanca',\r\n  50: '(GMT) Greenwich Mean Time ',\r\n  44: '(GMT+01:00) West Central Africa',\r\n  45: '(GMT+01:00) Sarajevo',\r\n  46: '(GMT+01:00) Brussels',\r\n  47: '(GMT+01:00) Belgrade',\r\n  48: '(GMT+01:00) Amsterdam',\r\n  38: '(GMT+02:00) Jerusalem',\r\n  39: '(GMT+02:00) Helsinki',\r\n  40: '(GMT+02:00) Harare',\r\n  41: '(GMT+02:00) Cairo',\r\n  42: '(GMT+02:00) Bucharest',\r\n  43: '(GMT+02:00) Athens',\r\n  34: '(GMT+03:00) Nairobi',\r\n  35: '(GMT+03:00) Moscow',\r\n  36: '(GMT+03:00) Kuwait',\r\n  37: '(GMT+03:00) Baghdad',\r\n  33: '(GMT+03:30) Tehran',\r\n  31: '(GMT+04:00) Baku',\r\n  32: '(GMT+04:00) Abu Dhabi',\r\n  30: '(GMT+04:30) Kabul',\r\n  28: '(GMT+05:00) Islamabad',\r\n  29: '(GMT+05:00) Ekaterinburg',\r\n  27: '(GMT+05:30) Chennai',\r\n  26: '(GMT+05:45) Kathmandu',\r\n  23: '(GMT+06:00) Sri Jayawardenepura',\r\n  24: '(GMT+06:00) Astana',\r\n  25: '(GMT+06:00) Almaty',\r\n  22: '(GMT+06:30) Rangoon',\r\n  20: '(GMT+07:00) Krasnoyarsk',\r\n  21: '(GMT+07:00) Bangkok',\r\n  15: '(GMT+08:00) Taipei',\r\n  16: '(GMT+08:00) Perth',\r\n  17: '(GMT+08:00) Kuala Lumpur',\r\n  18: '(GMT+08:00) Irkutsk',\r\n  19: '(GMT+08:00) Beijing',\r\n  12: '(GMT+09:00) Yakutsk',\r\n  13: '(GMT+09:00) Seoul',\r\n  14: '(GMT+09:00) Osaka',\r\n  10: '(GMT+09:30) Darwin',\r\n  11: '(GMT+09:30) Adelaide',\r\n  5: '(GMT+10:00) Vladivostok',\r\n  6: '(GMT+10:00) Hobart',\r\n  7: '(GMT+10:00) Guam',\r\n  8: '(GMT+10:00) Canberra',\r\n  9: '(GMT+10:00) Brisbane',\r\n  4: '(GMT+11:00) Magadan',\r\n  2: '(GMT+12:00) Fiji',\r\n  3: '(GMT+12:00) Auckland',\r\n  1: \"(GMT+13:00) Nuku'alofa\",\r\n};\r\n\r\nexport const TIMEZONE_EN_GB: IDictionary<string> = {\r\n  75: '(GMT-12:00) International Date Line West',\r\n  74: '(GMT-11:00) Midway Island',\r\n  73: '(GMT-10:00) Hawaii',\r\n  72: '(GMT-09:00) Alaska',\r\n  71: '(GMT-08:00) Pacific Time (US & Canada); Tijuana',\r\n  68: '(GMT-07:00) Arizona',\r\n  69: '(GMT-07:00) Chihuahua',\r\n  70: '(GMT-07:00) Mountain Time (US & Canada)',\r\n  64: '(GMT-06:00) Central America',\r\n  65: '(GMT-06:00) Central Time (US & Canada)',\r\n  66: '(GMT-06:00) Guadalajara',\r\n  67: '(GMT-06:00) Saskatchewan',\r\n  61: '(GMT-05:00) Bogota',\r\n  62: '(GMT-05:00) Eastern Time (US & Canada)',\r\n  63: '(GMT-05:00) Indiana (East)',\r\n  58: '(GMT-04:00) Atlantic Time (Canada)',\r\n  59: '(GMT-04:00) Caracas',\r\n  57: '(GMT-03:30) Newfoundland',\r\n  60: '(GMT-03:00) Santiago',\r\n  54: '(GMT-03:00) Brasilia',\r\n  55: '(GMT-03:00) Buenos Aires',\r\n  56: '(GMT-03:00) Greenland',\r\n  53: '(GMT-02:00) Mid-Atlantic',\r\n  51: '(GMT-01:00) Azores',\r\n  52: '(GMT-01:00) Cape Verde Is.',\r\n  49: '(GMT) Casablanca',\r\n  50: '(GMT) Greenwich Mean Time',\r\n  44: '(GMT+01:00) West Central Africa',\r\n  45: '(GMT+01:00) Sarajevo',\r\n  46: '(GMT+01:00) Brussels',\r\n  47: '(GMT+01:00) Belgrade',\r\n  48: '(GMT+01:00) Amsterdam',\r\n  38: '(GMT+02:00) Jerusalem',\r\n  39: '(GMT+02:00) Helsinki',\r\n  40: '(GMT+02:00) Harare',\r\n  41: '(GMT+02:00) Cairo',\r\n  42: '(GMT+02:00) Bucharest',\r\n  43: '(GMT+02:00) Athens',\r\n  34: '(GMT+03:00) Nairobi',\r\n  35: '(GMT+03:00) Moscow',\r\n  36: '(GMT+03:00) Kuwait',\r\n  37: '(GMT+03:00) Baghdad',\r\n  33: '(GMT+03:30) Tehran',\r\n  31: '(GMT+04:00) Baku',\r\n  32: '(GMT+04:00) Abu Dhabi',\r\n  30: '(GMT+04:30) Kabul',\r\n  28: '(GMT+05:00) Islamabad',\r\n  29: '(GMT+05:00) Ekaterinburg',\r\n  27: '(GMT+05:30) Chennai',\r\n  26: '(GMT+05:45) Kathmandu',\r\n  23: '(GMT+06:00) Sri Jayawardenepura',\r\n  24: '(GMT+06:00) Astana',\r\n  25: '(GMT+06:00) Almaty',\r\n  22: '(GMT+06:30) Rangoon',\r\n  20: '(GMT+07:00) Krasnoyarsk',\r\n  21: '(GMT+07:00) Bangkok',\r\n  15: '(GMT+08:00) Taipei',\r\n  16: '(GMT+08:00) Perth',\r\n  17: '(GMT+08:00) Kuala Lumpur',\r\n  18: '(GMT+08:00) Irkutsk',\r\n  19: '(GMT+08:00) Beijing',\r\n  12: '(GMT+09:00) Yakutsk',\r\n  13: '(GMT+09:00) Seoul',\r\n  14: '(GMT+09:00) Osaka',\r\n  10: '(GMT+09:30) Darwin',\r\n  11: '(GMT+09:30) Adelaide',\r\n  5: '(GMT+10:00) Vladivostok',\r\n  6: '(GMT+10:00) Hobart',\r\n  7: '(GMT+10:00) Guam',\r\n  8: '(GMT+10:00) Canberra',\r\n  9: '(GMT+10:00) Brisbane',\r\n  4: '(GMT+11:00) Magadan',\r\n  2: '(GMT+12:00) Fiji',\r\n  3: '(GMT+12:00) Auckland',\r\n  1: \"(GMT+13:00) Nuku'alofa\",\r\n};\r\n\r\nexport const TIMEZONE_FR: IDictionary<string> = {\r\n  75: '(GMT-12:00) Ligne de changement de date international Ouest',\r\n  74: '(GMT-11:00) Île Midway',\r\n  73: '(GMT-10:00) Hawaï',\r\n  72: '(GMT-09:00) Alaska',\r\n  71: '(GMT-08:00) Heure du Pacifique (États-Unis et Canada) ; Tijuana',\r\n  68: '(GMT-07:00) Arizona',\r\n  69: '(GMT-07:00) Chihuahua',\r\n  70: '(GMT-07:00) Heure des Rocheuses (États-Unis et Canada)',\r\n  64: '(GMT-06:00) Amérique centrale',\r\n  65: '(GMT-06:00) Heure du Centre (États-Unis et Canada)',\r\n  66: '(GMT-06:00) Guadalajara',\r\n  67: '(GMT-06:00) Saskatchewan',\r\n  61: '(GMT-05:00) Bogota',\r\n  62: '(GMT-05:00) Heure de l’Est (États-Unis et Canada)',\r\n  63: '(GMT-05:00) Indiana (Est)',\r\n  58: '(GMT-04:00) Heure de l’Atlantique (Canada)',\r\n  59: '(GMT-04:00) Caracas',\r\n  57: '(GMT-03:30) Terre-Neuve',\r\n  60: '(GMT-03:00) Santiago',\r\n  54: '(GMT-03:00) Brasilia',\r\n  55: '(GMT-03:00) Buenos Aires',\r\n  56: '(GMT-03:00) Groenland',\r\n  53: '(GMT-02:00) Centre de l’Atlantique',\r\n  51: '(GMT-01:00) Açores',\r\n  52: '(GMT-01:00) Le Cap-Vert est',\r\n  49: '(GMT) Casablanca',\r\n  50: '(GMT) Méridien de Greenwich',\r\n  44: '(GMT+01:00) Afrique de l’Ouest et du Centre',\r\n  45: '(GMT+01:00) Sarajevo',\r\n  46: '(GMT+01:00) Bruxelles',\r\n  47: '(GMT+01:00) Belgrade',\r\n  48: '(GMT+01:00) Amsterdam',\r\n  38: '(GMT+02:00) Jérusalem',\r\n  39: '(GMT+02:00) Helsinki',\r\n  40: '(GMT+02:00) Harare',\r\n  41: '(GMT+02:00) Le Caire',\r\n  42: '(GMT+02:00) Bucharest',\r\n  43: '(GMT+02:00) Athènes',\r\n  34: '(GMT+03:00) Nairobi',\r\n  35: '(GMT+03:00) Moscou',\r\n  36: '(GMT+03:00) Koweït',\r\n  37: '(GMT+03:00) Bagdad',\r\n  33: '(GMT+03:30) Téhéran',\r\n  31: '(GMT+04:00) Bakou',\r\n  32: '(GMT+04:00) Abou Dhabi',\r\n  30: '(GMT+04:30) Kaboul',\r\n  28: '(GMT+05:00) Islamabad',\r\n  29: '(GMT+05:00) Ekaterinburg',\r\n  27: '(GMT+05:30) Chennai',\r\n  26: '(GMT+05:45) Katmandou',\r\n  23: '(GMT+06:00) Sri Jayawardenepura',\r\n  24: '(GMT+06:00) Astana',\r\n  25: '(GMT+06:00) Almaty',\r\n  22: '(GMT+06:30) Rangoon',\r\n  20: '(GMT+07:00) Krasnoïarsk',\r\n  21: '(GMT+07:00) Bangkok',\r\n  15: '(GMT+08:00) Taipei',\r\n  16: '(GMT+08:00) Perth',\r\n  17: '(GMT+08:00) Kuala Lumpur',\r\n  18: '(GMT+08:00) Irkoutsk',\r\n  19: '(GMT+08:00) Beijing',\r\n  12: '(GMT+09:00) Yakoutsk',\r\n  13: '(GMT+09:00) Séoul',\r\n  14: '(GMT+09:00) Osaka',\r\n  10: '(GMT+09:30) Darwin',\r\n  11: '(GMT+09:30) Adélaïde',\r\n  5: '(GMT+10:00) Vladivostok',\r\n  6: '(GMT+10:00) Hobart',\r\n  7: '(GMT+10:00) Guam',\r\n  8: '(GMT+10:00) Canberra',\r\n  9: '(GMT+10:00) Brisbane',\r\n  4: '(GMT+11:00) Magadan',\r\n  2: '(GMT+12:00) Fidji',\r\n  3: '(GMT+12:00) Auckland',\r\n  1: \"(GMT+13:00) Nuku'alofa\",\r\n};\r\n\r\nexport const TIMEZONE_DE: IDictionary<string> = {\r\n  75: '(GMT-12:00) Internationale Datumsgrenze West',\r\n  74: '(GMT-11:00) Midway-Insel',\r\n  73: '(GMT-10:00) Hawaii',\r\n  72: '(GMT-09:00) Alaska',\r\n  71: '(GMT-08:00) Pazifikzeit (USA & Kanada); Tijuana',\r\n  68: '(GMT-07:00) Arizona',\r\n  69: '(GMT-07:00) Chihuahua',\r\n  70: '(GMT-07:00) Gebirgszeit (USA & Kanada)',\r\n  64: '(GMT-06:00) Zentralamerika',\r\n  65: '(GMT-06:00) Zentralzeit (USA & Kanada)',\r\n  66: '(GMT-06:00) Guadalajara',\r\n  67: '(GMT-06:00) Saskatchewan',\r\n  61: '(GMT-05:00) Bogota',\r\n  62: '(GMT-05:00) Ostzeit (USA & Kanada)',\r\n  63: '(GMT-05:00) Indiana (Ost)',\r\n  58: '(GMT-04:00) Atlantikzeit (Kanada)',\r\n  59: '(GMT-04:00) Caracas',\r\n  57: '(GMT-03:30) Neufundland',\r\n  60: '(GMT-03:00) Santiago',\r\n  54: '(GMT-03:00) Brasilien',\r\n  55: '(GMT-03:00) Buenos Aires',\r\n  56: '(GMT-03:00) Grönland',\r\n  53: '(GMT-02:00) Mittelatlantik',\r\n  51: '(GMT-01:00) Azoren',\r\n  52: '(GMT-01:00) Kap Verde',\r\n  49: '(GMT) Casablanca',\r\n  50: '(GMT) Greenwich Mean Time',\r\n  44: '(GMT+01:00) Westafrika',\r\n  45: '(GMT+01:00) Sarajevo',\r\n  46: '(GMT+01:00) Brüssel',\r\n  47: '(GMT+01:00) Belgrad',\r\n  48: '(GMT+01:00) Amsterdam',\r\n  38: '(GMT+02:00) Jerusalem',\r\n  39: '(GMT+02:00) Helsinki',\r\n  40: '(GMT+02:00) Harare',\r\n  41: '(GMT+02:00) Kairo',\r\n  42: '(GMT+02:00) Bukarest',\r\n  43: '(GMT+02:00) Athen',\r\n  34: '(GMT+03:00) Nairobi',\r\n  35: '(GMT+03:00) Moskau',\r\n  36: '(GMT+03:00) Kuwait',\r\n  37: '(GMT+03:00) Bagdad',\r\n  33: '(GMT+03:30) Teheran',\r\n  31: '(GMT+04:00) Baku',\r\n  32: '(GMT+04:00) Abu Dhabi',\r\n  30: '(GMT+04:30) Kabul',\r\n  28: '(GMT+05:00) Islamabad',\r\n  29: '(GMT+05:00) Jekaterinburg',\r\n  27: '(GMT+05:30) Chennai',\r\n  26: '(GMT+05:45) Kathmandu',\r\n  23: '(GMT+06:00) Sri Jayawardenepura',\r\n  24: '(GMT+06:00) Astana',\r\n  25: '(GMT+06:00) Almaty',\r\n  22: '(GMT+06:30) Rangun',\r\n  20: '(GMT+07:00) Krasnojarsk',\r\n  21: '(GMT+07:00) Bangkok',\r\n  15: '(GMT+08:00) Taipeh',\r\n  16: '(GMT+08:00) Perth',\r\n  17: '(GMT+08:00) Kuala Lumpur',\r\n  18: '(GMT+08:00) Irkutsk',\r\n  19: '(GMT+08:00) Peking',\r\n  12: '(GMT+09:00) Jakutsk',\r\n  13: '(GMT+09:00) Seoul',\r\n  14: '(GMT+09:00) Osaka',\r\n  10: '(GMT+09:30) Darwin',\r\n  11: '(GMT+09:30) Adelaide',\r\n  5: '(GMT+10:00) Wladiwostok',\r\n  6: '(GMT+10:00) Hobart',\r\n  7: '(GMT+10:00) Guam',\r\n  8: '(GMT+10:00) Canberra',\r\n  9: '(GMT+10:00) Brisbane',\r\n  4: '(GMT+11:00) Magadan',\r\n  2: '(GMT+12:00) Fiji',\r\n  3: '(GMT+12:00) Auckland',\r\n  1: \"(GMT+13:00) Nuku'alofa\",\r\n};\r\n\r\nexport const TIMEZONE_IT: IDictionary<string> = {\r\n  75: '(GMT-12:00) Linea internazionale del cambio di data ovest',\r\n  74: '(GMT-11:00) Isola di Midway',\r\n  73: '(GMT-10:00) Hawaii',\r\n  72: '(GMT-09:00) Alaska',\r\n  71: '(GMT-08:00) Ora del Pacifico (USA e Canada); Tijuana',\r\n  68: '(GMT-07:00) Arizona',\r\n  69: '(GMT-07:00) Chihuahua',\r\n  70: '(GMT-07:00) Ora delle Montagne (USA e Canada)',\r\n  64: '(GMT-06:00) America centrale',\r\n  65: '(GMT-06:00) Ora centrale (USA e Canada)',\r\n  66: '(GMT-06:00) Guadalajara',\r\n  67: '(GMT-06:00) Saskatchewan',\r\n  61: '(GMT-05:00) Bogotà',\r\n  62: '(GMT-05:00) Ora orientale (USA e Canada)',\r\n  63: '(GMT-05:00) Indiana (Est)',\r\n  58: '(GMT-04:00) Ora dell’Atlantico (Canada)',\r\n  59: '(GMT-04:00) Caracas',\r\n  57: '(GMT-03:30) Terranova',\r\n  60: '(GMT-03:00) Santiago',\r\n  54: '(GMT-03:00) Brasilia',\r\n  55: '(GMT-03:00) Buenos Aires',\r\n  56: '(GMT-03:00) Groenlandia',\r\n  53: '(GMT-02:00) Atlantico centrale',\r\n  51: '(GMT-01:00) Azzorre',\r\n  52: '(GMT-01:00) Capo Verde',\r\n  49: '(GMT) Casablanca',\r\n  50: '(GMT) Ora media di Greenwich',\r\n  44: '(GMT+01:00) Africa occidentale centrale',\r\n  45: '(GMT+01:00) Sarajevo',\r\n  46: '(GMT+01:00) Bruxelles',\r\n  47: '(GMT+01:00) Belgrado',\r\n  48: '(GMT+01:00) Amsterdam',\r\n  38: '(GMT+02:00) Gerusalemme',\r\n  39: '(GMT+02:00) Helsinki',\r\n  40: '(GMT+02:00) Harare',\r\n  41: '(GMT+02:00) Il Cairo',\r\n  42: '(GMT+02:00) Bucarest',\r\n  43: '(GMT+02:00) Atene',\r\n  34: '(GMT+03:00) Nairobi',\r\n  35: '(GMT+03:00) Mosca',\r\n  36: '(GMT+03:00) Kuwait',\r\n  37: '(GMT+03:00) Baghdad',\r\n  33: '(GMT+03:30) Teheran',\r\n  31: '(GMT+04:00) Baku',\r\n  32: '(GMT+04:00) Abu Dhabi',\r\n  30: '(GMT+04:30) Kabul',\r\n  28: '(GMT+05:00) Islamabad',\r\n  29: '(GMT+05:00) Ekaterinburg',\r\n  27: '(GMT+05:30) Chennai',\r\n  26: '(GMT+05:45) Kathmandu',\r\n  23: '(GMT+06:00) Sri Jayawardenepura',\r\n  24: '(GMT+06:00) Astana',\r\n  25: '(GMT+06:00) Almaty',\r\n  22: '(GMT+06:30) Rangoon',\r\n  20: '(GMT+07:00) Krasnojarsk',\r\n  21: '(GMT+07:00) Bangkok',\r\n  15: '(GMT+08:00) Taipei',\r\n  16: '(GMT+08:00) Perth',\r\n  17: '(GMT+08:00) Kuala Lumpur',\r\n  18: '(GMT+08:00) Irkutsk',\r\n  19: '(GMT+08:00) Pechino',\r\n  12: '(GMT+09:00) Yakutsk',\r\n  13: '(GMT+09:00) Seoul',\r\n  14: '(GMT+09:00) Osaka',\r\n  10: '(GMT+09:30) Darwin',\r\n  11: '(GMT+09:30) Adelaide',\r\n  5: '(GMT+10:00) Vladivostok',\r\n  6: '(GMT+10:00) Hobart',\r\n  7: '(GMT+10:00) Guam',\r\n  8: '(GMT+10:00) Canberra',\r\n  9: '(GMT+10:00) Brisbane',\r\n  4: '(GMT+11:00) Magadan',\r\n  2: '(GMT+12:00) Figi',\r\n  3: '(GMT+12:00) Auckland',\r\n  1: \"(GMT+13:00) Nuku'alofa\",\r\n};\r\n\r\nexport const TIMEZONE_FR_CA: IDictionary<string> = {\r\n  75: \"(GMT-12:00) Ligne de changement de date internationale à l'ouest\",\r\n  74: '(GMT-11:00) Île de Midway',\r\n  73: '(GMT-10:00) Hawaï',\r\n  72: '(GMT-09:00) Alaska',\r\n  71: '(GMT-08:00) Heure du Pacifique (États-Unis et Canada); Tijuana',\r\n  68: '(GMT-07:00) Arizona',\r\n  69: '(GMT-07:00) Chihuahua',\r\n  70: '(GMT-07:00) Heure des Rocheuses (États-Unis et Canada)',\r\n  64: '(GMT-06:00) Amérique centrale',\r\n  65: '(GMT-06:00) Heure centrale (États-Unis et Canada)',\r\n  66: '(GMT-06:00) Guadalajara',\r\n  67: '(GMT-06:00) Saskatchewan',\r\n  61: '(GMT-05:00) Bogota',\r\n  62: \"(GMT-05:00) Heure de l'Est (États-Unis et Canada)\",\r\n  63: '(GMT-05:00) Indiana (Est)',\r\n  58: \"(GMT-04:00) Heure de l'Atlantique (Canada)\",\r\n  59: '(GMT-04:00) Caracas',\r\n  57: '(GMT-03:30) Terre-Neuve',\r\n  60: '(GMT-03:00) Santiago',\r\n  54: '(GMT-03:00) Brasilia',\r\n  55: '(GMT-03:00) Buenos Aires',\r\n  56: '(GMT-03:00) Groenland',\r\n  53: '(GMT-02:00) Atlantique-Centre',\r\n  51: '(GMT-01:00) Açores',\r\n  52: '(GMT-01:00) Îles du Cap-Vert',\r\n  49: '(GMT) Casablanca',\r\n  50: '(GMT) Temps moyen de Greenwich',\r\n  44: '(GMT+01:00) Afrique centrale occidentale',\r\n  45: '(GMT+01:00) Sarajevo',\r\n  46: '(GMT+01:00) Bruxelles',\r\n  47: '(GMT+01:00) Belgrade',\r\n  48: '(GMT+01:00) Amsterdam',\r\n  38: '(GMT+02:00) Jérusalem',\r\n  39: '(GMT+02:00) Helsinki',\r\n  40: '(GMT+02:00) Harare',\r\n  41: '(GMT+02:00) Le Caire',\r\n  42: '(GMT+02:00) Bucarest',\r\n  43: '(GMT+02:00) Athènes',\r\n  34: '(GMT+03:00) Nairobi',\r\n  35: '(GMT+03:00) Moscou',\r\n  36: '(GMT+03:00) Koweït',\r\n  37: '(GMT+03:00) Bagdad',\r\n  33: '(GMT+03:30) Téhéran',\r\n  31: '(GMT+04:00) Bakou',\r\n  32: '(GMT+04:00) Abou Dabi',\r\n  30: '(GMT+04:30) Kaboul',\r\n  28: '(GMT+05:00) Islamabad',\r\n  29: '(GMT+05:00) Ekaterinbourg',\r\n  27: '(GMT+05:30) Chennai',\r\n  26: '(GMT+05:45) Katmandou',\r\n  23: '(GMT+06:00) Sri Jayawardenapura',\r\n  24: '(GMT+06:00) Astana',\r\n  25: '(GMT+06:00) Almaty',\r\n  22: '(GMT+06:30) Rangoun',\r\n  20: '(GMT+07:00) Krasnoïarsk',\r\n  21: '(GMT+07:00) Bangkok',\r\n  15: '(GMT+08:00) Taipei',\r\n  16: '(GMT+08:00) Perth',\r\n  17: '(GMT+08:00) Kuala Lumpur',\r\n  18: '(GMT+08:00) Irkoutsk',\r\n  19: '(GMT+08:00) Pékin',\r\n  12: '(GMT+09:00) Iakoutsk',\r\n  13: '(GMT+09:00) Séoul',\r\n  14: '(GMT+09:00) Osaka',\r\n  10: '(GMT+09:30) Darwin',\r\n  11: '(GMT+09:30) Adélaïde',\r\n  5: '(GMT+10:00) Vladivostok',\r\n  6: '(GMT+10:00) Hobart',\r\n  7: '(GMT+10:00) Guam',\r\n  8: '(GMT+10:00) Canberra',\r\n  9: '(GMT+10:00) Brisbane',\r\n  4: '(GMT+11:00) Magadan',\r\n  2: '(GMT+12:00) Fidji',\r\n  3: '(GMT+12:00) Auckland',\r\n  1: \"(GMT+13:00) Nuku'alofa\",\r\n};\r\n\r\nexport const TIMEZONE_ES_ES: IDictionary<string> = {\r\n  75: '(GMT-12:00) Línea Internacional de Cambio de Fecha (Oeste)',\r\n  74: '(GMT-11:00) Isla Midway',\r\n  73: '(GMT-10:00) Hawái',\r\n  72: '(GMT-09:00) Alaska',\r\n  71: '(GMT-08:00) Hora del Pacífico (EE. UU. y Canadá); Tijuana',\r\n  68: '(GMT-07:00) Arizona',\r\n  69: '(GMT-07:00) Chihuahua',\r\n  70: '(GMT-07:00) Hora de la Montaña (EE. UU. y Canadá)',\r\n  64: '(GMT-06:00) América Central',\r\n  65: '(GMT-06:00) Hora Central (EE. UU. y Canadá)',\r\n  66: '(GMT-06:00) Guadalajara',\r\n  67: '(GMT-06:00) Saskatchewan',\r\n  61: '(GMT-05:00) Bogotá',\r\n  62: '(GMT-05:00) Hora del Este (EE. UU. y Canadá)',\r\n  63: '(GMT-05:00) Indiana (Este)',\r\n  58: '(GMT-04:00) Hora del Atlántico (Canadá)',\r\n  59: '(GMT-04:00) Caracas',\r\n  57: '(GMT-03:30) Terranova',\r\n  60: '(GMT-03:00) Santiago',\r\n  54: '(GMT-03:00) Brasilia',\r\n  55: '(GMT-03:00) Buenos Aires',\r\n  56: '(GMT-03:00) Groenlandia',\r\n  53: '(GMT-02:00) Atlántico Medio',\r\n  51: '(GMT-01:00) Azores',\r\n  52: '(GMT-01:00) Isla de Cabo Verde',\r\n  49: '(GMT) Casablanca',\r\n  50: '(GMT) Hora del Meridiano de Greenwich',\r\n  44: '(GMT+01:00) África Occidental Central',\r\n  45: '(GMT+01:00) Sarajevo',\r\n  46: '(GMT+01:00) Bruselas',\r\n  47: '(GMT+01:00) Belgrado',\r\n  48: '(GMT+01:00) Ámsterdam',\r\n  38: '(GMT+02:00) Jerusalén',\r\n  39: '(GMT+02:00) Helsinki',\r\n  40: '(GMT+02:00) Harare',\r\n  41: '(GMT+02:00) El Cairo',\r\n  42: '(GMT+02:00) Bucarest',\r\n  43: '(GMT+02:00) Atenas',\r\n  34: '(GMT+03:00) Nairobi',\r\n  35: '(GMT+03:00) Moscú',\r\n  36: '(GMT+03:00) Kuwait',\r\n  37: '(GMT+03:00) Bagdad',\r\n  33: '(GMT+03:30) Teherán',\r\n  31: '(GMT+04:00) Bakú',\r\n  32: '(GMT+04:00) Abu Dabi',\r\n  30: '(GMT+04:30) Kabul',\r\n  28: '(GMT+05:00) Islamabad',\r\n  29: '(GMT+05:00) Ekaterimburgo',\r\n  27: '(GMT+05:30) Chennai',\r\n  26: '(GMT+05:45) Katmandú',\r\n  23: '(GMT+06:00) Sri Jayawardenepura',\r\n  24: '(GMT+06:00) Astaná',\r\n  25: '(GMT+06:00) Almaty',\r\n  22: '(GMT+06:30) Rangún',\r\n  20: '(GMT+07:00) Krasnoyarsk',\r\n  21: '(GMT+07:00) Bangkok',\r\n  15: '(GMT+08:00) Taipéi',\r\n  16: '(GMT+08:00) Perth',\r\n  17: '(GMT+08:00) Kuala Lumpur',\r\n  18: '(GMT+08:00) Irkutsk',\r\n  19: '(GMT+08:00) Pekín',\r\n  12: '(GMT+09:00) Yakutsk',\r\n  13: '(GMT+09:00) Seúl',\r\n  14: '(GMT+09:00) Osaka',\r\n  10: '(GMT+09:30) Darwin',\r\n  11: '(GMT+09:30) Adelaida',\r\n  5: '(GMT+10:00) Vladivostok',\r\n  6: '(GMT+10:00) Hobart',\r\n  7: '(GMT+10:00) Guam',\r\n  8: '(GMT+10:00) Canberra',\r\n  9: '(GMT+10:00) Brisbane',\r\n  4: '(GMT+11:00) Magadán',\r\n  2: '(GMT+12:00) Fiyi',\r\n  3: '(GMT+12:00) Auckland',\r\n  1: '(GMT+13:00) Nukualofa',\r\n};\r\n\r\nexport const TIMEZONE_ES_MX: IDictionary<string> = {\r\n  75: '(GMT-12:00) Línea Internacional de Cambio de Fecha Oeste',\r\n  74: '(GMT-11:00) Isla Midway',\r\n  73: '(GMT-10:00) Hawái',\r\n  72: '(GMT-09:00) Alaska',\r\n  71: '(GMT-08:00) Hora del Pacífico (EE. UU. y Canadá); Tijuana',\r\n  68: '(GMT-07:00) Arizona',\r\n  69: '(GMT-07:00) Chihuahua',\r\n  70: '(GMT-07:00) Hora de la Montaña (EE. UU. y Canadá)',\r\n  64: '(GMT-06:00) Centroamérica',\r\n  65: '(GMT-06:00) Hora Central (EE. UU. y Canadá)',\r\n  66: '(GMT-06:00) Guadalajara',\r\n  67: '(GMT-06:00) Saskatchewan',\r\n  61: '(GMT-05:00) Bogotá',\r\n  62: '(GMT-05:00) Hora del Este (EE. UU. y Canadá)',\r\n  63: '(GMT-05:00) Indiana (Este)',\r\n  58: '(GMT-04:00) Hora Atlántica (Canadá)',\r\n  59: '(GMT-04:00) Caracas',\r\n  57: '(GMT-03:30) Terranova',\r\n  60: '(GMT-03:00) Santiago',\r\n  54: '(GMT-03:00) Brasilia',\r\n  55: '(GMT-03:00) Buenos Aires',\r\n  56: '(GMT-03:00) Groenlandia',\r\n  53: '(GMT-02:00) Atlántico Medio',\r\n  51: '(GMT-01:00) Azores',\r\n  52: '(GMT-01:00) Islas de Cabo Verde',\r\n  49: '(GMT) Casablanca',\r\n  50: '(GMT) Tiempo Medio de Greenwich',\r\n  44: '(GMT+01:00) África Central Occidental',\r\n  45: '(GMT+01:00) Sarajevo',\r\n  46: '(GMT+01:00) Bruselas',\r\n  47: '(GMT+01:00) Belgrado',\r\n  48: '(GMT+01:00) Ámsterdam',\r\n  38: '(GMT+02:00) Jerusalén',\r\n  39: '(GMT+02:00) Helsinki',\r\n  40: '(GMT+02:00) Harare',\r\n  41: '(GMT+02:00) El Cairo',\r\n  42: '(GMT+02:00) Bucarest',\r\n  43: '(GMT+02:00) Atenas',\r\n  34: '(GMT+03:00) Nairobi',\r\n  35: '(GMT+03:00) Moscú',\r\n  36: '(GMT+03:00) Kuwait',\r\n  37: '(GMT+03:00) Bagdad',\r\n  33: '(GMT+03:30) Teherán',\r\n  31: '(GMT+04:00) Bakú',\r\n  32: '(GMT+04:00) Abu Dabi',\r\n  30: '(GMT+04:30) Kabul',\r\n  28: '(GMT+05:00) Islamabad',\r\n  29: '(GMT+05:00) Ekaterimburgo',\r\n  27: '(GMT+05:30) Chennai',\r\n  26: '(GMT+05:45) Katmandú',\r\n  23: '(GMT+06:00) Sri Jayawardenepura',\r\n  24: '(GMT+06:00) Astaná',\r\n  25: '(GMT+06:00) Almatý',\r\n  22: '(GMT+06:30) Rangún',\r\n  20: '(GMT+07:00) Krasnoyarsk',\r\n  21: '(GMT+07:00) Bangkok',\r\n  15: '(GMT+08:00) Taipéi',\r\n  16: '(GMT+08:00) Perth',\r\n  17: '(GMT+08:00) Kuala Lumpur',\r\n  18: '(GMT+08:00) Irkutsk',\r\n  19: '(GMT+08:00) Pekín',\r\n  12: '(GMT+09:00) Yakutsk',\r\n  13: '(GMT+09:00) Seúl',\r\n  14: '(GMT+09:00) Osaka',\r\n  10: '(GMT+09:30) Darwin',\r\n  11: '(GMT+09:30) Adelaida',\r\n  5: '(GMT+10:00) Vladivostok',\r\n  6: '(GMT+10:00) Hobart',\r\n  7: '(GMT+10:00) Guam',\r\n  8: '(GMT+10:00) Canberra',\r\n  9: '(GMT+10:00) Brisbane',\r\n  4: '(GMT+11:00) Magadán',\r\n  2: '(GMT+12:00) Fiyi',\r\n  3: '(GMT+12:00) Auckland',\r\n  1: '(GMT+13:00) Nukualofa',\r\n};\r\n\r\nexport const TIMEZONE_LANGUAGE_MAPPING = {\r\n  'en-us': TIMEZONE_EN,\r\n  'en-gb': TIMEZONE_EN_GB,\r\n  'fr-fr': TIMEZONE_FR,\r\n  'de-de': TIMEZONE_DE,\r\n  'it-it': TIMEZONE_IT,\r\n  'fr-ca': TIMEZONE_FR_CA,\r\n  'es-es': TIMEZONE_ES_ES,\r\n  'es-mx': TIMEZONE_ES_MX,\r\n};\r\n","export const WEEK_DAYS_EN = ['S', 'M', 'T', 'W', 'T', 'F', 'S'];\r\nexport const WEEK_DAYS_EN_GB = ['S', 'M', 'T', 'W', 'T', 'F', 'S'];\r\nexport const WEEK_DAYS_FR = ['D', 'L', 'M', 'M', 'J', 'V', 'S'];\r\nexport const WEEK_DAYS_DE = ['S', 'M', 'D', 'M', 'D', 'F', 'S'];\r\nexport const WEEK_DAYS_IT = ['D', 'L', 'M', 'M', 'G', 'V', 'S'];\r\nexport const WEEK_DAYS_FR_CA = ['D', 'L', 'M', 'M', 'J', 'V', 'S'];\r\nexport const WEEK_DAYS_ES_ES = ['L', 'M', 'M', 'J', 'V', 'S', 'S'];\r\nexport const WEEK_DAYS_ES_MX = ['L', 'M', 'M', 'J', 'V', 'S', 'S'];\r\n\r\nexport const WEEK_DAYS_LANGUAGE_MAPPING = {\r\n  'en-us': WEEK_DAYS_EN,\r\n  'fr-fr': WEEK_DAYS_FR,\r\n  'de-de': WEEK_DAYS_DE,\r\n  'it-it': WEEK_DAYS_IT,\r\n  'fr-ca': WEEK_DAYS_FR_CA,\r\n  'es-es': WEEK_DAYS_ES_ES,\r\n  'es-mx': WEEK_DAYS_ES_MX,\r\n};\r\n","import { IComboBoxOption } from '@fluentui/react';\r\nimport { Account, getAppStore, getEntity, onPublisherChanged, Publisher } from '../../../../@data';\r\nimport { IFormEditParams } from '../../../../components/Form';\r\nimport { countryToLanguagesMap } from '../../../../config/countryToLanguageMapper.config';\r\nimport { LANGUAGES_LANGUAGE_MAPPING } from '../../../../globalization';\r\nimport { RoutePrefix } from '../../../../Routes';\r\nimport { IRouterWithIntl } from '../../../../utils';\r\nimport { RouteName } from '../store/store';\r\n\r\nexport async function setPublisherContext(publisher: Publisher, account?: Account) {\r\n  const appStore = getAppStore();\r\n  if (appStore.publisher === undefined || appStore.publisher.id !== publisher.id) {\r\n    const publisherAsync = await getEntity<Publisher>([publisher], appStore.userContext);\r\n    if (publisherAsync) {\r\n      const changedPublisher = new Publisher(publisherAsync.id, publisherAsync.name);\r\n      changedPublisher.publisherTier = publisherAsync.publisherTier;\r\n      onPublisherChanged(changedPublisher);\r\n    } else {\r\n      onPublisherChanged(undefined);\r\n    }\r\n  }\r\n}\r\n\r\nexport function createReturnUrl(entity: RouteName, publisherId?: string): string {\r\n  let returnUrl = `/${RoutePrefix.partnerManagement}/${RouteName[entity]}`;\r\n\r\n  if (publisherId) {\r\n    returnUrl = `/${RoutePrefix.partnerManagement}/${publisherId}/${RouteName[entity]}`;\r\n  }\r\n\r\n  return returnUrl;\r\n}\r\n\r\nexport function createAccountAdLanguageDropDown(country: string | undefined, props: IRouterWithIntl<IFormEditParams>): IComboBoxOption[] {\r\n  const availableLanguages: IComboBoxOption[] = [];\r\n  const languageSet: Set<string> = new Set();\r\n  const LANGUAGES = LANGUAGES_LANGUAGE_MAPPING[getAppStore().locale];\r\n\r\n  if (country) {\r\n    countryToLanguagesMap[country].forEach((languageCode) => {\r\n      if (LANGUAGES[languageCode]) {\r\n        languageSet.add(languageCode);\r\n      }\r\n    });\r\n  }\r\n  languageSet.forEach((language) => {\r\n    availableLanguages!.push({\r\n      key: language,\r\n      text: LANGUAGES[language],\r\n    });\r\n  });\r\n  availableLanguages.sort((a, b) => {\r\n    const firstValue = a.text;\r\n    const secondValue = b.text;\r\n\r\n    return firstValue.toLowerCase() > secondValue.toLowerCase() ? 1 : -1;\r\n  });\r\n  return availableLanguages;\r\n}\r\n","import { InjectedIntl } from 'react-intl';\r\nimport { action } from 'satcheljs';\r\nimport { RouteName } from '../store/store';\r\n\r\nexport const onCurrentRouteChanged = action(\r\n  'onCurrentRouteChanged',\r\n  (currentRoute: RouteName, formatMessage?: InjectedIntl['formatMessage']) => ({ currentRoute, formatMessage })\r\n);\r\n","import { action } from 'satcheljs';\r\n\r\nexport const onReportLinkClicked = action('onReportLinkClicked');\r\n","import { action } from 'satcheljs';\r\nimport { Publisher } from '../../../../@data';\r\n\r\nexport const onSetPublisherReporting = action('onSetPublisherReporting', (publisher: Publisher) => ({ publisher }));\r\n\r\nexport const onReportingEnabled = action('onSetPublisherReporting', (isEnabled: boolean) => ({ isEnabled }));\r\n","import { array } from 'yup';\r\n\r\n/**\r\n * Schema which transforms a Mobx observable array to normal for validation.\r\n */\r\nexport class ArrayObservableSchemaYupType extends array {\r\n  constructor() {\r\n    super();\r\n\r\n    this.withMutation(() => {\r\n      this.transform(function(value, originalvalue) {\r\n        if (this.isType(value)) {\r\n          return value;\r\n        }\r\n\r\n        // const array = new Array(originalvalue.length);\r\n        return [...originalvalue];\r\n      });\r\n    });\r\n  }\r\n}\r\n","import { array } from 'yup';\r\n\r\n/**\r\n * Schema which transform a string into an array string.\r\n */\r\nexport class StringListSchemaYupType extends array {\r\n  constructor() {\r\n    super();\r\n\r\n    this.withMutation(() => {\r\n      this.transform(function(value, originalvalue) {\r\n        if (this.isType(value)) {\r\n          return value;\r\n        }\r\n\r\n        const strs = originalvalue.split('\\n');\r\n        return strs.filter(i => i !== '');\r\n      });\r\n    });\r\n  }\r\n}\r\n","import { array } from 'yup';\r\nimport { stringToList } from '../StringUtils';\r\n\r\n/**\r\n * Schema which transform a ',' or '\\n' separated string\r\n * into an array string.\r\n */\r\nexport class StringListTransformerYupType extends array {\r\n  constructor() {\r\n    super();\r\n\r\n    this.withMutation(() => {\r\n      this.transform(function(value, originalvalue) {\r\n        if (this.isType(value)) {\r\n          return value;\r\n        }\r\n\r\n        return stringToList(originalvalue);\r\n      });\r\n    });\r\n  }\r\n}","import { ObjectSchema, Shape } from 'yup';\r\n\r\n/**\r\n * Cleans up the path by normalizing to the its root attribute.\r\n * @param path the json path error\r\n */\r\nfunction normalizePath(path: string) {\r\n  return path.replace(/(\\w+)(\\[\\w+\\])*/, '$1');\r\n}\r\n/**\r\n * Validates the values for the given schema and throws errors in an object accordingly.\r\n *\r\n * @param schema The Yup validation Schema\r\n * @param values The values to validate\r\n */\r\nexport function validateSchema(schema: ObjectSchema<Shape<{}, Object>>, values: Object) {\r\n  return new Promise(async (resolve, reject) => {\r\n    try {\r\n      await schema.validate(values, {\r\n        abortEarly: false,\r\n        stripUnknown: true\r\n      });\r\n      resolve(true);\r\n    } catch (e) {\r\n      reject(\r\n        e.inner &&\r\n          e.inner.reduce(\r\n            (errors, error) => ({\r\n              ...errors,\r\n              [normalizePath(error.path)]: error.errors[0]\r\n            }),\r\n            {}\r\n          )\r\n      );\r\n    }\r\n  });\r\n}\r\n","import { InjectedIntlProps } from 'react-intl';\r\n\r\nexport interface IEstimatedEarningsProps extends InjectedIntlProps {\r\n  defaultChartType: EstimatedEarningsChartTypes;\r\n  defaultChartGrain: ChartGrain;\r\n}\r\n\r\nexport enum EstimatedEarningsChartTypes {\r\n  VERTICAL_BAR = 'vertical_bar',\r\n  LINE = 'line',\r\n}\r\nexport enum ChartGrain {\r\n  MONTHLY = 'monthly',\r\n  YEARLY = 'yearly',\r\n}\r\n","export * from './store/schema';\r\nexport * from './store/store';\r\n","import { action } from 'satcheljs';\r\nimport { LifeCycleStatus, Model } from '../../../../@data';\r\nimport { DownloadOption, IGridV2Column } from '../../GridV2.types';\r\n\r\nexport const onDownloadButtonClicked = action(\r\n  'onDownloadButtonClicked',\r\n  (formatMessage, data: Model[], csvFileName: string, columns?: IGridV2Column[], downloadType?: DownloadOption) => ({\r\n    formatMessage,\r\n    data,\r\n    csvFileName,\r\n    columns,\r\n    downloadType,\r\n  })\r\n);\r\n\r\nexport const onChangeItemsStatus = action(\r\n  'onChangeItemsStatus',\r\n  (\r\n    selectedItems: Model[],\r\n    status: LifeCycleStatus,\r\n    data: Model[],\r\n    formatMessage: (\r\n      messageDescriptor: ReactIntl.FormattedMessage.MessageDescriptor,\r\n      values?:\r\n        | {\r\n            [key: string]: ReactIntl.MessageValue;\r\n          }\r\n        | undefined\r\n    ) => string,\r\n    setData?: (data?: Model[]) => void,\r\n    onItemsStatusChanged?: (items: Model[], status: LifeCycleStatus) => void\r\n  ) => ({\r\n    selectedItems,\r\n    status,\r\n    formatMessage,\r\n    setData,\r\n    data,\r\n    onItemsStatusChanged,\r\n  })\r\n);\r\n\r\nexport const onDeleteItem = action(\r\n  'onDeleteItem',\r\n  (\r\n    selectedItem: Model,\r\n    data: Model[],\r\n    formatMessage: (\r\n      messageDescriptor: ReactIntl.FormattedMessage.MessageDescriptor,\r\n      values?:\r\n        | {\r\n            [key: string]: ReactIntl.MessageValue;\r\n          }\r\n        | undefined\r\n    ) => string,\r\n    setData?: (data?: Model[]) => void,\r\n    preDeleteAction?: (items: Model[]) => void,\r\n    deleteAction?: (items: Model[]) => void,\r\n    postDeleteAction?: (items: Model[]) => void\r\n  ) => ({\r\n    selectedItem,\r\n    setData,\r\n    data,\r\n    formatMessage,\r\n    preDeleteAction,\r\n    deleteAction,\r\n    postDeleteAction,\r\n  })\r\n);\r\n\r\nexport const onDuplicateItem = action(\r\n  'onDuplicateItem',\r\n  (\r\n    selectedItem: Model,\r\n    data: Model[],\r\n    formatMessage: (\r\n      messageDescriptor: ReactIntl.FormattedMessage.MessageDescriptor,\r\n      values?:\r\n        | {\r\n            [key: string]: ReactIntl.MessageValue;\r\n          }\r\n        | undefined\r\n    ) => string,\r\n    setData?: (data?: Model[]) => void,\r\n    onDuplicateAction?: (items: Model[]) => void\r\n  ) => ({\r\n    selectedItem,\r\n    data,\r\n    formatMessage,\r\n    setData,\r\n    onDuplicateAction,\r\n  })\r\n);\r\n","import { Model } from './Model';\r\n\r\nexport class AdSenseMediation extends Model {\r\n  public apiPath = 'preauth/mediation';\r\n  public className = 'preauth/mediation';\r\n  public toggle?: boolean;\r\n  public email?: string;\r\n  public oAuthConnectionStatus?: string;\r\n  public oauthFailureReasons?: OAuthFailureReason[];\r\n  public mediationStatus?: boolean;\r\n  public connectedTimeStamp?: Date;\r\n  public userImageUri?: string;\r\n}\r\n\r\nexport class AdSenseMediationToggle extends AdSenseMediation {\r\n  public apiPath = 'preauth/mediation';\r\n  public className = 'oauth';\r\n}\r\n\r\nexport class AdSenseMediationHealthCheck extends AdSenseMediation {\r\n  public apiPath = 'preauth/mediation';\r\n  public className = 'oauth';\r\n}\r\n\r\nexport class AdSenseMediationChooseGamNetwork extends AdSenseMediation {\r\n  public apiPath = 'preauth/mediation';\r\n  public className = 'oauth';\r\n}\r\n\r\nexport class AdSenseMediationOptIn extends AdSenseMediation {\r\n  public apiPath = 'preauth/mediation';\r\n}\r\n\r\nexport class AdSenseMediationOptOut extends AdSenseMediation {\r\n  public apiPath = 'preauth/mediation';\r\n}\r\n\r\nexport class OAuthFailureReason {\r\n  public errorCode: string;\r\n  public description: string;\r\n  public gamNetworkDetails?: { id: string; displayName: string }[];\r\n}\r\n","import { getAppStore, isPublisherRejectionUnappealable, isPublisherUnderReview } from '../../../../../@data';\r\nimport { getProfileStore } from './store';\r\n\r\nexport function getPublisherProfileRawData() {\r\n  return getAppStore().publisher;\r\n}\r\n\r\nexport function getPublisherProfileActiveData() {\r\n  return getProfileStore().active;\r\n}\r\n\r\nexport function getProfileErrors() {\r\n  return getProfileStore().errors;\r\n}\r\n\r\nexport function getPrimaryUserRawData() {\r\n  return getProfileStore().raw.primaryUser;\r\n}\r\n\r\nexport function getPrimaryUserFullName() {\r\n  const { name } = getPrimaryUserRawData() || {};\r\n  if (!name) {\r\n    return '';\r\n  }\r\n\r\n  return `${name?.firstName} ${name?.lastName}`;\r\n}\r\n\r\nexport function getPrimaryUserActiveData() {\r\n  return getPublisherProfileActiveData().user;\r\n}\r\n\r\nexport function getPublisherActiveData() {\r\n  return getPublisherProfileActiveData().publisher;\r\n}\r\n\r\nexport function isPrimaryUserDataPresent() {\r\n  return !!getPrimaryUserRawData();\r\n}\r\n\r\nexport function isProfileEditable() {\r\n  if (isPublisherUnderReview()) {\r\n    return false;\r\n  }\r\n  if (isPublisherRejectionUnappealable()) {\r\n    return false;\r\n  }\r\n\r\n  return true;\r\n}\r\n\r\nexport function getProfileActiveData() {\r\n  return getProfileStore().active;\r\n}\r\n\r\nexport function isProfileInEditMode() {\r\n  return !!getProfileActiveData().isInEditMode;\r\n}\r\n\r\nexport function isProfileSubmitted() {\r\n  return !!getProfileActiveData().isSubmitted;\r\n}\r\n\r\nexport function isPreviewShown() {\r\n  return !!getProfileActiveData().isPreviewShown;\r\n}\r\n\r\nexport function isPhoneVerificationMethodsShown() {\r\n  return !!getProfileActiveData().isPhoneVerificationMethodsShown;\r\n}\r\n\r\nexport function isVerificationCodeDialogShown() {\r\n  return !!getProfileActiveData().isPhoneVerificationCodeShown;\r\n}\r\n\r\nexport function isVerificationSuccessShown() {\r\n  return !!getProfileActiveData().isVerificationSuccess;\r\n}\r\nexport function isCodeBeingVerified() {\r\n  return !!getProfileActiveData().isCodeBeingVerified;\r\n}\r\n\r\nexport function isVerificationCodeGenerationLimitReached() {\r\n  return !!getProfileActiveData().verificationCodeGenerationLimitReached;\r\n}\r\n","export function setDataInURL<T>(queryKey: string, data: T) {\r\n  const currentSearchQuery = window.location.search;\r\n  const searchQuery = new URLSearchParams(currentSearchQuery);\r\n  searchQuery.set(queryKey, JSON.stringify(data));\r\n  window.history.replaceState('', '', `?${searchQuery}`);\r\n}\r\nexport function getDataFromURL<T>(queryKey: string): T | null {\r\n  try {\r\n    const currentSearchQuery = window.location.search;\r\n    const searchQuery = new URLSearchParams(currentSearchQuery);\r\n    return JSON.parse(searchQuery.get(queryKey) || '') as T;\r\n  } catch (e) {\r\n    return null;\r\n  }\r\n}\r\nexport function hasDataInURL(queryKey: string): boolean {\r\n  const currentSearchQuery = window.location.search;\r\n  const searchQuery = new URLSearchParams(currentSearchQuery);\r\n  return searchQuery.has(queryKey);\r\n}\r\n","import { RedirectRequest } from '@azure/msal-browser';\r\nimport { action } from 'satcheljs';\r\n\r\nexport const onPubCenterAADLogin = action('onPubCenterAADLogin', (requestParams?: Partial<RedirectRequest>) => ({ requestParams }));\r\n","import { action, mutatorAction } from 'satcheljs';\r\nimport { getLoginPageStore } from '..';\r\nimport { IStringDictionary } from '../../../../@data';\r\n\r\nexport const onEmailChanged = mutatorAction('onEmailChanged', (email: string) => {\r\n  getLoginPageStore().active.email = email;\r\n});\r\n\r\nexport const onErrorsChanged = mutatorAction('onErrorsChanged', (errors?: IStringDictionary) => {\r\n  getLoginPageStore().errors = errors || {};\r\n});\r\n\r\nexport const onLoginButtonClicked = action('onLoginButtonClicked');\r\n","import { action } from 'satcheljs';\r\n\r\nexport const onAuthPageInitialized = action('onAuthPageInitialized', (loginHint?: string) => ({ loginHint }));\r\nexport const onLoadingSet = action('onLoadingSet', (value?: boolean) => ({ value }));\r\nexport const onSwitchAccount = action('onSwitchAccount');\r\n","export enum ReportsQueryStoreKeys {\r\n  DATE_RANGE = 'date-range',\r\n  DATE_RANGE_TYPE = 'date-range-type',\r\n  CHART_GRAIN = 'chart-grain',\r\n  CHART_TYPE = 'chart-type',\r\n  FILTERS = 'filters',\r\n  BREAKDOWN = 'breakdown',\r\n}\r\n","export class AdSenseAdUnitStatus {\r\n  public apiPath = 'preauth/mediation';\r\n  public className = 'getAdUnitMediationStatus';\r\n  public pubcenterAdUnitIds?: number[];\r\n  public pubcenterAdUnitId?: number;\r\n  public adSenseAdUnitId?: number;\r\n  public mediationStatus?: boolean;\r\n}\r\n\r\nexport class AdSenseConnectAdUnit extends AdSenseAdUnitStatus {\r\n  public apiPath = 'preauth/mediation';\r\n  public className = 'pubcenterAdUnitsIds';\r\n}\r\n\r\nexport class AdSenseDisconnectAdUnit extends AdSenseAdUnitStatus {\r\n  public apiPath = 'preauth/mediation';\r\n  public className = 'pubcenterAdUnitsIds';\r\n}\r\n\r\nexport class AdSenseUpdateAdUnitStatus extends AdSenseAdUnitStatus {\r\n  public apiPath = 'preauth/mediation';\r\n  public className = 'pubcenterAdUnitsIds';\r\n}","import {\r\n  DATE_RANGE_PICKER_PRESET_CUSTOM,\r\n  DATE_RANGE_PICKER_PRESET_LAST_7_DAYS,\r\n  DATE_RANGE_PICKER_PRESET_LAST_WEEK_SUN_SAT,\r\n  DATE_RANGE_PICKER_PRESET_THIS_WEEK_MON_TODAY,\r\n  DATE_RANGE_PICKER_PRESET_THIS_WEEK_SUN_TODAY,\r\n  DATE_RANGE_PICKER_PRESET_TODAY,\r\n  DATE_RANGE_PICKER_PRESET_YESTERDAY,\r\n} from '../../../../../constants/DataTestIdConstants';\r\nimport messages from '../CustomCalender.messages';\r\nimport { IDateElements, IDay, RangeType, RangeTypeMessage } from '../CustomCalender.types';\r\n\r\nexport const getDatesInRange = (startDate: Date, endDate: Date): Date[] => {\r\n  const dateArray: Date[] = [];\r\n  let currentDate = new Date(startDate);\r\n  while (currentDate <= endDate) {\r\n    dateArray.push(new Date(currentDate));\r\n    currentDate = new Date(currentDate.getFullYear(), currentDate.getMonth(), currentDate.getDate() + 1, 0, 0, 0);\r\n  }\r\n  return dateArray;\r\n};\r\n\r\nexport const isDayInFuture = (day: IDateElements): boolean => {\r\n  return new Date(day.year, day.month, day.day) > new Date();\r\n};\r\n\r\nexport const getToday = (): Date[] => {\r\n  return [new Date(), new Date()];\r\n};\r\n\r\nexport const getYesterday = (): Date[] => {\r\n  const date = new Date();\r\n  date.setDate(date.getDate() - 1);\r\n\r\n  return [date, date];\r\n};\r\n\r\nexport const getSundayToToday = (): Date[] => {\r\n  const today = new Date();\r\n  const sunday = new Date(today.getFullYear(), today.getMonth(), today.getDate() - today.getDay());\r\n\r\n  return getDatesInRange(sunday, today);\r\n};\r\n\r\nexport const getMondayToToday = (): Date[] => {\r\n  const today = new Date();\r\n  const mondayOffset = today.getDay() === 0 ? 6 : today.getDay() - 1;\r\n  const monday = new Date(today.getFullYear(), today.getMonth(), today.getDate() - mondayOffset);\r\n\r\n  return getDatesInRange(monday, today);\r\n};\r\n\r\nexport const get7DaysExcludingToday = (): Date[] => {\r\n  const today = new Date();\r\n  const sevenDaysLater = new Date(today.getFullYear(), today.getMonth(), today.getDate() - 7);\r\n  const yesterday = new Date();\r\n  yesterday.setDate(yesterday.getDate() - 1);\r\n\r\n  return getDatesInRange(sevenDaysLater, yesterday);\r\n};\r\n\r\nexport const getLastSundayToSaturday = (): Date[] => {\r\n  const today = new Date();\r\n  const lastSunday = new Date(today.getFullYear(), today.getMonth(), today.getDate() - today.getDay() - 7);\r\n  const lastSaturday = new Date(today.getFullYear(), today.getMonth(), today.getDate() - today.getDay() - 1);\r\n\r\n  return getDatesInRange(lastSunday, lastSaturday);\r\n};\r\n\r\nexport const getSelectedPeriodLabel = (type: RangeType, formatMessage) => {\r\n  return `${formatMessage(messages[RangeTypeMessage[Object.keys(RangeType)[Object.values(RangeType).indexOf(type)]]])}: `;\r\n};\r\n\r\nexport const getSelectedStartingDate = (range: Date[], locale: string) => {\r\n  const options: Intl.DateTimeFormatOptions = {};\r\n  options.day = 'numeric';\r\n  options.month = 'short';\r\n\r\n  return range[0].toLocaleDateString(locale, options);\r\n};\r\n\r\nexport const getSelectedEndingDate = (range: Date[], locale: string) => {\r\n  const options: Intl.DateTimeFormatOptions = {};\r\n  options.day = 'numeric';\r\n  options.month = 'short';\r\n  const endDate = range.length - 1;\r\n  if (range[0].getTime() === range[endDate].getTime()) {\r\n    return;\r\n  }\r\n\r\n  return ` - ${range[endDate].toLocaleDateString(locale, options)}`;\r\n};\r\n\r\nexport const getMonthlyCalendar = (year: number, month: number): IDay[] => {\r\n  month = month >= 12 ? 0 : month;\r\n  const calender: IDay[] = [];\r\n\r\n  const prevMonth = month >= 0 ? month - 1 : 11;\r\n  const prevYear = month >= 0 ? year : year - 1;\r\n\r\n  // Determine the number of days in the previous month\r\n  const prevMonthDays = new Date(prevYear, prevMonth + 1, 0).getDate();\r\n\r\n  // Determine the number of days in the current month\r\n  const currentMonthDays = new Date(year, month + 1, 0).getDate();\r\n\r\n  // Determine the starting day of the current month (0 is Sunday, 6 is Saturday)\r\n  const firstDay = new Date(year, month, 1).getDay();\r\n\r\n  // Determine the total number of days needed to fill the calendar (should be 42)\r\n  const totalDays = 42;\r\n\r\n  // Determine the starting day for the calendar\r\n  const day = prevMonthDays - firstDay + 1;\r\n\r\n  // Loop through all of the days needed to fill the calendar from the previous month\r\n  for (let index = day; index <= prevMonthDays; index++) {\r\n    calender.push({\r\n      day: index,\r\n      isInCurrentMonth: false,\r\n      fullDay: { day: index, month: prevMonth, year: prevYear },\r\n    });\r\n  }\r\n\r\n  // Loop through all of the days needed to fill the calendar from the current month\r\n  for (let index = 1; index <= currentMonthDays; index++) {\r\n    calender.push({ day: index, isInCurrentMonth: true, fullDay: { day: index, month: month, year: prevYear } });\r\n  }\r\n\r\n  // Loop through all of the days needed to fill the calendar from the next month\r\n  for (let index = calender.length; index < totalDays; index++) {\r\n    const dayInNextMonth = index - (firstDay + currentMonthDays) + 1;\r\n    const nextMonth = month + 1 >= 12 ? 0 : month + 1;\r\n    const nextMonthYear = month + 1 >= 12 ? prevYear + 1 : prevYear;\r\n\r\n    calender.push({\r\n      day: index - (firstDay + currentMonthDays) + 1,\r\n      isInCurrentMonth: false,\r\n      fullDay: { day: dayInNextMonth, month: nextMonth, year: nextMonthYear },\r\n    });\r\n  }\r\n\r\n  return calender;\r\n};\r\n\r\nexport const getPresetDataTestId = (preset: RangeType) => {\r\n  switch (preset) {\r\n    case RangeType.Today:\r\n      return DATE_RANGE_PICKER_PRESET_TODAY;\r\n    case RangeType.Yesterday:\r\n      return DATE_RANGE_PICKER_PRESET_YESTERDAY;\r\n    case RangeType.SundayToday:\r\n      return DATE_RANGE_PICKER_PRESET_THIS_WEEK_SUN_TODAY;\r\n    case RangeType.MondayToday:\r\n      return DATE_RANGE_PICKER_PRESET_THIS_WEEK_MON_TODAY;\r\n    case RangeType.Last7ExcludingToday:\r\n      return DATE_RANGE_PICKER_PRESET_LAST_7_DAYS;\r\n    case RangeType.Last7FromSunToSat:\r\n      return DATE_RANGE_PICKER_PRESET_LAST_WEEK_SUN_SAT;\r\n    case RangeType.Custom:\r\n      return DATE_RANGE_PICKER_PRESET_CUSTOM;\r\n  }\r\n};\r\n","import { action } from 'satcheljs';\r\n\r\nexport const onInitializeGoogleAccount = action(\r\n  'onInitializeGoogleAccount',\r\n  (showLoadingSpinner?: boolean, showNotifications?: boolean, onFinished?: () => void) => ({\r\n    showLoadingSpinner,\r\n    showNotifications,\r\n    onFinished,\r\n  })\r\n);\r\n\r\nexport const onMediateGoogleAccount = action(\r\n  'onMediateGoogleAccount',\r\n  (\r\n    mediate: boolean,\r\n    formatMessage: (\r\n      messageDescriptor: ReactIntl.FormattedMessage.MessageDescriptor,\r\n      values?:\r\n        | {\r\n            [key: string]: ReactIntl.MessageValue;\r\n          }\r\n        | undefined\r\n    ) => string\r\n  ) => ({ mediate, formatMessage })\r\n);\r\n\r\nexport const onConnectGoogleAccount = action('onConnectGoogleAccount', (code: string) => ({ code }));\r\n\r\nexport const onDisconnectGoogleAccount = action('onDisconnectGoogleAccount');\r\n","import { getTheme, mergeStyleSets } from '@fluentui/react';\r\nimport { IPubcenterTheme } from '../../../theme';\r\nimport { ICommonStyleProps } from '../../types';\r\n\r\ntype StyleProperties = 'gridContainer';\r\n\r\ntype GridPageLayoutStyles = Record<StyleProperties, string>;\r\n\r\nexport const getStyles = (props: ICommonStyleProps): GridPageLayoutStyles => {\r\n  const theme = (props.theme as unknown) as IPubcenterTheme;\r\n  const { spacing } = theme;\r\n  const { withSubHeader } = props;\r\n\r\n  return mergeStyleSets({\r\n    gridContainer: {\r\n      marginLeft: spacing.size32,\r\n      marginTop: withSubHeader ? 0 : spacing.size32,\r\n      marginRight: spacing.size32,\r\n      display: 'flex',\r\n      flexDirection: 'column',\r\n      height: 'inherit',\r\n      flex: 1,\r\n    },\r\n  });\r\n};\r\n\r\nexport function getClassNames<PropType>(props: PropType): GridPageLayoutStyles {\r\n  return getStyles({ theme: getTheme(), ...props });\r\n}\r\n","import React, { useEffect } from 'react';\r\nimport { LayoutMode, onLayoutChanged } from '../../@data';\r\nimport { getClassNames } from './GridPageLayout.styles';\r\n\r\nexport interface IGridPageLayoutProps {\r\n  children?: JSX.Element[] | JSX.Element;\r\n  withSubHeader?: boolean;\r\n}\r\n\r\nexport const GridPageLayout = function GridPageLayoutComponent(props: IGridPageLayoutProps) {\r\n  const { gridContainer } = getClassNames({ withSubHeader: props.withSubHeader });\r\n\r\n  useEffect(() => {\r\n    onLayoutChanged(LayoutMode.Default);\r\n    // eslint-disable-next-line\r\n  }, []);\r\n\r\n  return <div className={gridContainer}>{props.children}</div>;\r\n};\r\n","import { getAccountStatusData } from './accountStatusStore';\r\nimport { getPaymentsPageData } from './paymentsPageStore';\r\n\r\nexport function getPaymentsPageBalance() {\r\n  return getPaymentsPageData().balance;\r\n}\r\n\r\nexport function getPaymentsPageEstimatedEarnings() {\r\n  return getPaymentsPageData().estimatedEarnings;\r\n}\r\n\r\nexport const getAccountStatus = () => getAccountStatusData().status;\r\n\r\nexport const getAccountStatusIsLoading = () => getAccountStatusData().isLoading;\r\n","import { defineMessages } from 'react-intl';\r\n\r\nexport default defineMessages({\r\n  accountSettings: {\r\n    id: 'settingsPage.accountSettings',\r\n    defaultMessage: 'Account settings',\r\n  },\r\n  userSettings: {\r\n    id: 'settingsPage.userSettings',\r\n    defaultMessage: 'Profile settings',\r\n  },\r\n  publisherPreferencesFailed: {\r\n    id: 'publisherPreferences.failed',\r\n    defaultMessage: 'We’re unable to access your publisher preferences at this time. Please try again later.',\r\n  },\r\n  userPreferencesFailed: {\r\n    id: 'userPreferences.failed',\r\n    defaultMessage: 'We’re unable to access your user preferences at this time. Please try again later.',\r\n  },\r\n  notificationPreferencesFailed: {\r\n    id: 'notificationPreferences.failed',\r\n    defaultMessage: 'We’re unable to update your notification preferences. Please try again later.',\r\n  },\r\n  deletingUserSuccess: {\r\n    id: 'userManagement.deletingUserSuccess',\r\n    defaultMessage: 'Successfully deleted the user - {name}',\r\n  },\r\n  updatedNotificationPreferencesSuccessfully: {\r\n    id: 'notificationPreferences.updatedSuccessfully',\r\n    defaultMessage: 'Updated notification preferences successfully',\r\n  },\r\n  deletedPublisherSuccess: {\r\n    id: 'userManagement.deletedPublisherSuccess',\r\n    defaultMessage: 'Successfully deleted the publisher - {name}',\r\n  },\r\n  invalidStateLoginOrReport: {\r\n    id: 'userManagement.invalidStateReLoginOrReport',\r\n    defaultMessage: 'You have arrived in an invalid state, please re-login or report if issue persists.',\r\n  },\r\n});\r\n","import {\r\n  AccountPaymentOptionDataResponse,\r\n  AccountSkuDataResponse,\r\n  ApiError,\r\n  getAppStore,\r\n  handleApiErrors,\r\n  handleError,\r\n  ISubGeography,\r\n  LocaleDataResponse,\r\n  MarketDataResponse,\r\n  ServiceLevel,\r\n  serviceLevelNameIdMap,\r\n} from '..';\r\nimport { uiConfig } from '../../config/ui.config';\r\nimport { IMarket, StateOrProvinceDataResponse } from '../store/schema';\r\nimport { AdUnitTaxonomy } from '../store/schema/models/AdUnitTaxonomy';\r\nimport { AdUnitTaxonomyDataResponse } from '../store/schema/models/AdUnitTaxonomyDataResponse';\r\nimport { CountryDataResponse } from '../store/schema/models/CountryDataResponse';\r\nimport { LanguageDataResponse } from '../store/schema/models/LanguageDataResponse';\r\nimport { TimezoneDataResponse } from '../store/schema/models/TimezoneDataResponse';\r\nimport { buildRequestHeadersWithAuthToken } from '../utils/requestUtils';\r\n\r\nexport const baseAddress = uiConfig.getMetadataApiBaseAddress();\r\nexport const customerMetadataBaseAddress = uiConfig.getCustomerMetadataApiBaseAddress();\r\nexport const adUnitMetadataApiBaseAddress = uiConfig.getAdUnitMetadataApiBaseAddress();\r\nexport const languageKey = '_languages';\r\nexport const timezoneKey = '_timezones';\r\nexport const localeKey = '_locales';\r\nexport const countryKey = '_countriesData';\r\nexport const marketKey = '_markets';\r\nexport const adUnitTaxonomyKey = '_taxonomyValues';\r\n\r\nasync function fetchResources<ApiResponseType, ReturnType>(\r\n  url: string,\r\n  responseDataProcessor: (data: ApiResponseType) => ReturnType,\r\n  onResponse?: (data: ApiResponseType) => void\r\n): Promise<ReturnType> {\r\n  const { userContext } = getAppStore();\r\n  const headers = await buildRequestHeadersWithAuthToken(url, userContext);\r\n\r\n  try {\r\n    const response = await fetch(url, {\r\n      method: 'GET',\r\n      headers: headers,\r\n    });\r\n\r\n    if (!response.ok) {\r\n      return handleApiErrors(response, url);\r\n    }\r\n\r\n    const responseJson: ApiResponseType = await response.json();\r\n    onResponse?.(responseJson);\r\n\r\n    return responseDataProcessor(responseJson);\r\n  } catch (err) {\r\n    const error = `Data fetch operation failed for ${url}. Errors: ${err}`;\r\n    return handleError(new ApiError(500, error), url);\r\n  }\r\n}\r\n\r\nasync function fetchResourcesWithLocalStorageCache<ApiResponseType, ReturnType>(\r\n  url: string,\r\n  resourceCacheKey: string,\r\n  responseDataProcessor: (data: ApiResponseType) => ReturnType\r\n): Promise<ReturnType> {\r\n  const supportedResourcesFromCache = localStorage.getItem(resourceCacheKey);\r\n  if (supportedResourcesFromCache === null) {\r\n    return fetchResources(url, responseDataProcessor, (data) => {\r\n      localStorage.setItem(resourceCacheKey, JSON.stringify(data));\r\n    });\r\n  } else {\r\n    return responseDataProcessor(JSON.parse(supportedResourcesFromCache));\r\n  }\r\n}\r\n\r\nexport async function getSupportedLanguages(): Promise<string[]> {\r\n  const url = `${baseAddress}${encodeURIComponent('supportedLanguages')}`;\r\n  return fetchResourcesWithLocalStorageCache<LanguageDataResponse, string[]>(url, languageKey, getLanguages);\r\n}\r\n\r\n// TODO: This is not used anywhere. Please remove it.\r\nexport async function getAvailableAllowedMarkets(): Promise<IMarket[]> {\r\n  const url = `${customerMetadataBaseAddress}${encodeURIComponent('markets')}`;\r\n  return fetchResourcesWithLocalStorageCache<MarketDataResponse, IMarket[]>(url, marketKey, getMarkets);\r\n}\r\n\r\nexport async function getSupportedCountries(serviceLevel?: ServiceLevel): Promise<string[]> {\r\n  const url = `${baseAddress}${encodeURIComponent('supportedCountries')}`;\r\n  return fetchResourcesWithLocalStorageCache<CountryDataResponse, string[]>(url, countryKey, getCountriesWithServiceLevel(serviceLevel));\r\n}\r\n\r\nexport async function getSupportedSubGeographies(countryCode: string): Promise<ISubGeography[]> {\r\n  const url = `${baseAddress}${encodeURIComponent('supportedSubGeographies')}?countryCode=${countryCode}`;\r\n  return fetchResources<StateOrProvinceDataResponse, ISubGeography[]>(url, (stateData) => stateData.data.subGeographyList);\r\n}\r\n\r\nexport async function getSupportedTimezones(): Promise<number[]> {\r\n  const url = `${baseAddress}${encodeURIComponent('supportedTimezones')}`;\r\n  return fetchResourcesWithLocalStorageCache<TimezoneDataResponse, number[]>(url, timezoneKey, getTimezones);\r\n}\r\n\r\nexport async function getSupportedAccountSkus(): Promise<string[]> {\r\n  const url = `${baseAddress}${encodeURIComponent('supportedAccountSkus')}`;\r\n  return fetchResources<AccountSkuDataResponse, string[]>(url, (skuData) => skuData.data.accountSKUs);\r\n}\r\n\r\nexport async function getSupportedAccountPaymentOptions(): Promise<Map<number, string>> {\r\n  const url = `${baseAddress}${encodeURIComponent('supportedPaymentOptions')}`;\r\n  return fetchResources<AccountPaymentOptionDataResponse, Map<number, string>>(\r\n    url,\r\n    (paymentOptionData) => paymentOptionData.data.paymentOptionData\r\n  );\r\n}\r\n\r\n// TODO: This is not used anywhere, we can remove it.\r\nexport async function getSupportedLocales(): Promise<string[]> {\r\n  const url = `${baseAddress}${encodeURIComponent('supportedLocales')}`;\r\n  return fetchResourcesWithLocalStorageCache<LocaleDataResponse, string[]>(url, localeKey, getLocales);\r\n}\r\n\r\nexport async function getAdUnitTaxonomyValues(): Promise<AdUnitTaxonomy[]> {\r\n  const url = `${adUnitMetadataApiBaseAddress}${encodeURI('attributes/taxonomy/values')}`;\r\n  return fetchResourcesWithLocalStorageCache<AdUnitTaxonomyDataResponse, AdUnitTaxonomy[]>(url, adUnitTaxonomyKey, getTaxonomyValues);\r\n}\r\n\r\nfunction getCountriesWithServiceLevel(serviceLevel?: ServiceLevel) {\r\n  return function (countriesData: CountryDataResponse) {\r\n    return getCountries(countriesData, serviceLevel);\r\n  };\r\n}\r\n\r\nfunction getCountries(countriesData: CountryDataResponse, serviceLevel?: ServiceLevel): string[] {\r\n  const countriesJson = countriesData.data.countries;\r\n  const countryCodes: string[] = [];\r\n  if (serviceLevel) {\r\n    countriesJson.forEach((country) => {\r\n      Object.keys(country.serviceLevels).forEach((serviceLevelKey) => {\r\n        country.serviceLevels[serviceLevelKey].forEach((serviceLevelValue) => {\r\n          if (serviceLevelValue === serviceLevelNameIdMap[serviceLevel]) {\r\n            countryCodes.push(country.code);\r\n          }\r\n        });\r\n      });\r\n    });\r\n  } else {\r\n    countriesJson.forEach((country) => {\r\n      countryCodes.push(country.code);\r\n    });\r\n  }\r\n  return countryCodes;\r\n}\r\n\r\nfunction getTimezones(timezoneJson: TimezoneDataResponse): number[] {\r\n  const timezones: number[] = [];\r\n  const timezoneData = timezoneJson.data.timeZoneData;\r\n\r\n  Object.keys(timezoneData).forEach((timezoneCode) => {\r\n    timezones.push(parseInt(timezoneCode, 10));\r\n  });\r\n\r\n  return timezones;\r\n}\r\n\r\nfunction getLanguages(languageJson: LanguageDataResponse): string[] {\r\n  const languages: string[] = [];\r\n  const languageData = languageJson.data.languageData;\r\n\r\n  Object.keys(languageData).forEach((languageCode) => {\r\n    languages.push(languageData[languageCode]);\r\n  });\r\n\r\n  return languages;\r\n}\r\n\r\nfunction getMarkets(marketsJson: MarketDataResponse): IMarket[] {\r\n  const markets: IMarket[] = [];\r\n  marketsJson.data.searchMarkets.forEach((market) => {\r\n    markets.push(market);\r\n  });\r\n  marketsJson.data.mobileSearchMarkets.forEach((market) => {\r\n    markets.push(market);\r\n  });\r\n  return markets;\r\n}\r\n\r\nfunction getLocales(localeJson: LocaleDataResponse): string[] {\r\n  const locales: string[] = [];\r\n  const localeData = localeJson.data.localeData;\r\n\r\n  Object.keys(localeData).forEach((localeCode) => {\r\n    locales.push(localeData[localeCode]);\r\n  });\r\n\r\n  return locales;\r\n}\r\n\r\nfunction getTaxonomyValues(taxonomyJson: AdUnitTaxonomyDataResponse): AdUnitTaxonomy[] {\r\n  const adUnitTaxonomyValues: AdUnitTaxonomy[] = [];\r\n  taxonomyJson.data.attributeValues.forEach((taxonomy) => adUnitTaxonomyValues.push(taxonomy));\r\n  return adUnitTaxonomyValues;\r\n}\r\n","/**\r\n * Each element of a domain name separated by [.] is called a “label.”\r\n * The maximum length of each label is 63 characters, and a full domain name can have a maximum of 253 characters.\r\n * Alphanumeric characters and hyphens can be used in labels, but a domain name must not commence or end with a hyphen or dot.\r\n */\r\nexport const VALID_DOMAIN_REGEXP = '^([^-\\\\.][^:/?#=\\\\s\\\\.]+){1}(\\\\.([^:/?#=\\\\s\\\\.]+[^-\\\\.])){1,2}$';\r\n\r\nexport const DOMAIN_MAX_LENGTH = 253;\r\n\r\nexport function getCurrentHashValue(): string {\r\n  return (window.location.hash || '').replace('#', '');\r\n}\r\n\r\nexport function isValidDomain(domain) {\r\n  const urlRegexp = new RegExp(VALID_DOMAIN_REGEXP);\r\n  return domain.length < DOMAIN_MAX_LENGTH && urlRegexp.test(domain);\r\n}\r\n\r\nexport function getUrlSearchParameter(urlQuery?: string, parameter?: string) {\r\n  if (!urlQuery || !parameter) {\r\n    return undefined;\r\n  }\r\n  const urlParams = new URLSearchParams(urlQuery.substring(1));\r\n  return urlParams.get(parameter) || '';\r\n}\r\n\r\nexport const isLocationPubCenter = () => {\r\n  return window.location.href.indexOf('pubcenter') > -1 || window.location.host === 'localhost:3000';\r\n};\r\n","export enum Environment {\r\n  TEST = 'test',\r\n  SI = 'staging',\r\n  BCP = 'BCP',\r\n  PROD = 'production',\r\n}\r\n","export const PAID_SEARCH = 'PS';\r\n\r\nexport const AUDIENCE_INTENT_MARKETPLACE = 'AIM';\r\n\r\nexport const TEXT_ADS = 'TA';\r\n\r\nexport const PAGE_ADS = 'PA';\r\n\r\nexport const TARGET_CUSTOMER_ID = 'targetCustomerId';\r\n\r\nexport const AGG_LEVEL_LISTING = 'listingid';\r\n\r\nexport const AGG_LEVEL_CREATIVE = 'uniquecreativeadid';\r\n\r\nexport const AD_PERFORMANCE_DATA = 'adPerformanceData';\r\n","import { defineMessages } from 'react-intl';\r\n\r\nexport default defineMessages({\r\n  resourceTitle: {\r\n    id: 'resource.title',\r\n    defaultMessage: 'Resources',\r\n  },\r\n  learnTitle: {\r\n    id: 'resource.learnTitle',\r\n    defaultMessage: 'Learn about monetizing your site.',\r\n  },\r\n  learnDescription: {\r\n    id: 'resource.learnDescription',\r\n    defaultMessage: 'Visit our documentation center.',\r\n  },\r\n  assistanceTitle: {\r\n    id: 'resource.assistanceTitle',\r\n    defaultMessage: 'Need additional assistance?',\r\n  },\r\n  assistanceDescription: {\r\n    id: 'resource.assistanceDescription',\r\n    defaultMessage: 'Contact Support',\r\n  },\r\n  improveTitle: {\r\n    id: 'resource.improveTitle',\r\n    defaultMessage: 'Help us improve {appName}',\r\n  },\r\n  improveDescription: {\r\n    id: 'resource.improveDescription',\r\n    defaultMessage: 'Share your thoughts and ideas',\r\n  },\r\n  feedbackTitle: {\r\n    id: 'resource.feedbacktitle',\r\n    defaultMessage: 'Feedback to {appName}',\r\n  },\r\n});\r\n","import { defineMessages } from 'react-intl';\r\n\r\nexport default defineMessages({\r\n  headLineGreeting: {\r\n    id: 'TnC.Signature.HeadlineGreeting',\r\n    defaultMessage: 'Dear Publisher,',\r\n  },\r\n  summary: {\r\n    id: 'TnC.summary.content',\r\n    defaultMessage:\r\n      '{appName} has updated Terms and Conditions on {releaseDate}. Please accept the new terms in order to continue using {appName}.',\r\n  },\r\n  thanksMsg: {\r\n    id: 'TnC.summary.thanksMsg',\r\n    defaultMessage: 'Thank you,',\r\n  },\r\n  thanksMsgSubLine: {\r\n    id: 'TnC.summary.thanksMsg.subline',\r\n    defaultMessage: '{appName} Team',\r\n  },\r\n  ackMsg: {\r\n    id: 'TnC.summary.ackMsg',\r\n    defaultMessage: `Yes, I've read and accept the agreement`,\r\n  },\r\n  ackMsgSubline: {\r\n    id: 'TnC.summary.ackMsg.subline',\r\n    defaultMessage:\r\n      'You represent that you are an administrator for this Account and that you are authorized to act on behalf of, and bind to this Agreement, the owner of this Account.',\r\n  },\r\n  acceptButton: {\r\n    id: 'TnC.action.accept',\r\n    defaultMessage: 'Accept',\r\n  },\r\n  skipButton: {\r\n    id: 'TnC.action.skip',\r\n    defaultMessage: 'Skip for now',\r\n  },\r\n  submitting: {\r\n    id: 'TnC.action.submitting',\r\n    defaultMessage: 'Submitting...',\r\n  },\r\n  goToAccept: {\r\n    id: 'TnC.notification.goToAccept',\r\n    defaultMessage: 'Go to accept',\r\n  },\r\n  unknown: {\r\n    id: 'TnC.notification.date.unknown',\r\n    defaultMessage: 'Unknown',\r\n  },\r\n  twoWeekBuffer: {\r\n    id: 'TnC.notification.date.twoWeekBuffer',\r\n    defaultMessage: '2 weeks',\r\n  },\r\n  dayBuffer: {\r\n    id: 'TnC.notification.date.dayBuffer',\r\n    defaultMessage: '{buffer} day(s)',\r\n  },\r\n  tncNotificationContent: {\r\n    id: 'Tnc.notification.content',\r\n    defaultMessage:\r\n      'Accept our latest Terms and Conditions to continue using {appName}. {appName} has updated Terms and Conditions on {latestTnCReleaseDate}. Please accept within {buffer} or your account will be terminated.',\r\n  },\r\n});\r\n","import { mutatorAction } from \"satcheljs\";\r\nimport { isEmpty } from \"../../../../../../../../utils\";\r\nimport { IGoogleAdSenseModel } from \"../store/schema/IGoogleAdSenseModel\";\r\nimport { getGoogleAdSenseStore } from \"../store/store\";\r\n\r\nexport const onChangeConnection = mutatorAction('onChangeConnection', (connection: IGoogleAdSenseModel) => {\r\n  getGoogleAdSenseStore().active = connection;\r\n});\r\n\r\nexport const onChangeMediationToggle = mutatorAction('onChangeMediationToggle', (isToggled: boolean) => {\r\n  const { active} = getGoogleAdSenseStore();\r\n  active.isMediationEnabled = isToggled;\r\n});\r\n\r\nexport const onChangeConnectionStatus = (msg) => {\r\n  const { active} = getGoogleAdSenseStore();\r\n  active.connectionStatus = msg.status;\r\n}\r\n\r\nexport const isPublisherConnectedWithAdSense = () => {\r\n  const { active } = getGoogleAdSenseStore();\r\n  if (active.email === undefined)\r\n  {\r\n    return false;\r\n  }\r\n\r\n  return isEmpty(active.email);\r\n}","import { defineMessages } from 'react-intl';\r\n\r\nexport default defineMessages({\r\n  feedback: {\r\n    id: 'header.feedback',\r\n    defaultMessage: 'Feedback to {appName}',\r\n  },\r\n  notifications: {\r\n    id: 'header.notifications',\r\n    defaultMessage: 'Notification Center',\r\n  },\r\n  settings: {\r\n    id: 'header.settings',\r\n    defaultMessage: 'Settings',\r\n  },\r\n  help: {\r\n    id: 'header.help',\r\n    defaultMessage: 'Help',\r\n  },\r\n  account: {\r\n    id: 'header.account',\r\n    defaultMessage: 'My account',\r\n  },\r\n  searchPlaceHolder: {\r\n    id: 'globalSearch.placeHolder',\r\n    defaultMessage: 'Search {appName}',\r\n  },\r\n  searchBoxAriaLabel: {\r\n    id: 'globalSearch.SearchBoxAriaLabel',\r\n    defaultMessage: 'Global search box',\r\n  },\r\n  searchResultListAriaLabel: {\r\n    id: 'globalSearch.ResultListAriaLabel',\r\n    defaultMessage: 'Global Search Results',\r\n  },\r\n  viewCategoryResult: {\r\n    id: 'globalSearch.viewCategoryResults',\r\n    defaultMessage: '{category} ({totalCount})',\r\n  },\r\n  viewAllResult: {\r\n    id: 'globalSearch.viewAllResults',\r\n    defaultMessage: 'View all results for {searchQuery}',\r\n  },\r\n  viewNoResult: {\r\n    id: 'globalSearch.viewNoResult',\r\n    defaultMessage: 'No results for {searchQuery}',\r\n  },\r\n  viewCategoryResultsAriaDescription: {\r\n    id: 'globalSearch.viewCategoryResultsAriaDescription',\r\n    defaultMessage: 'Click this to view more results for {categoryName}',\r\n  },\r\n  entityInfoButtonAriaDescription: {\r\n    id: 'globalSearch.entityInfoButtonAriaDescription',\r\n    defaultMessage: 'Click to view entity details',\r\n  },\r\n  footerAriaDescription: {\r\n    id: 'globalSearch.footerAriaDescription',\r\n    defaultMessage: 'Click to view all search results',\r\n  },\r\n});\r\n","import { FontWeights, getTheme, mergeStyleSets } from '@fluentui/react';\r\nimport { IPubCenterFonts, IPubcenterSpacing } from '../../../theme';\r\nimport { IPubcenterPalette } from './../../../theme';\r\nimport { ICardStyleProps, ICardStyles } from './Card.types';\r\n\r\n/**\r\n * Gives the default styles for the Card component.\r\n * @param props - Props used to generate the styles.\r\n * @returns - classnames for the Card component.\r\n */\r\nexport const getStyles = (props: ICardStyleProps): ICardStyles => {\r\n  const { theme } = props;\r\n  const spacing = theme.spacing as IPubcenterSpacing;\r\n  const palette = theme.palette as IPubcenterPalette;\r\n  const { size14 } = theme.fonts as IPubCenterFonts;\r\n\r\n  // Reference: https://github.com/microsoft/fluentui/blob/master/packages/merge-styles/README.md#basic-usage\r\n  return mergeStyleSets({\r\n    rootStyle: {\r\n      position: 'relative',\r\n      borderRadius: '2px',\r\n      boxShadow: '0px 1.6px 3.6px rgba(0, 0, 0, 0.132), 0px 0.3px 0.9px rgba(0, 0, 0, 0.108);',\r\n      height: '100%',\r\n    },\r\n    titleStyle: {\r\n      ...size14,\r\n      fontWeight: FontWeights.semibold,\r\n      margin: 0,\r\n    },\r\n    tooltipTitle: {\r\n      display: 'flex',\r\n      gap: '10px',\r\n    },\r\n    dismissButtonStyle: {\r\n      zIndex: 1,\r\n      position: 'absolute',\r\n      top: '5px',\r\n      right: '5px',\r\n      color: palette.neutralSecondary,\r\n    },\r\n    bodyStyle: {\r\n      padding: `${spacing.size8} ${spacing.size16}`,\r\n      height: '100%',\r\n      justifyContent: 'space-between',\r\n    },\r\n    titleBar: {\r\n      padding: `${spacing.size8} ${spacing.size16}`,\r\n    },\r\n    footerStyle: {\r\n      position: 'absolute',\r\n      zIndex: 0,\r\n      bottom: '0px',\r\n      left: '0px',\r\n      width: '100%',\r\n    },\r\n    footerWrapper: {\r\n      marginTop: '40px',\r\n    },\r\n    imageStyle: {\r\n      position: 'absolute',\r\n      top: 0,\r\n      right: 0,\r\n      height: '100%',\r\n    },\r\n  });\r\n};\r\n\r\nexport const shimmerStyles = { root: { height: '100%' }, dataWrapper: { height: '100%' } };\r\n\r\nexport const getImageStyle = { height: '100%' };\r\n\r\nexport function getClassNames<PropType>(props?: PropType) {\r\n  return getStyles({ theme: getTheme(), ...props });\r\n}\r\n","import { getId, IconButton, IIconProps, Image, mergeStyleSets, Shimmer, Stack } from '@fluentui/react';\r\nimport React from 'react';\r\nimport { injectIntl } from 'react-intl';\r\nimport appMessages from '../../App.messages';\r\nimport { IconTooltip } from '../IconTooltip/IconTooltip';\r\nimport { getClassNames, getImageStyle } from './Card.styles';\r\nimport { ICardProps } from './Card.types';\r\n\r\nconst closeIcon: IIconProps = { iconName: 'clear', styles: { root: { fontSize: 12 } } };\r\n\r\nexport const Card = injectIntl<ICardProps>(function CardComponent({\r\n  titleText,\r\n  onDismiss,\r\n  showDismissButton,\r\n  children,\r\n  cardActions,\r\n  styleProps,\r\n  intl,\r\n  cardTopBarActions,\r\n  footerComponents,\r\n  isDataLoaded = true,\r\n  shimmerCustomElement,\r\n  imageUrl,\r\n  imageAlt,\r\n  role,\r\n  titleIconTooltipProps,\r\n}) {\r\n  const { formatMessage } = intl;\r\n  const {\r\n    rootStyle,\r\n    titleStyle,\r\n    tooltipTitle,\r\n    titleBar,\r\n    bodyStyle,\r\n    dismissButtonStyle,\r\n    footerStyle,\r\n    footerWrapper,\r\n    imageStyle,\r\n  } = mergeStyleSets(getClassNames({ imageUrl }), styleProps);\r\n  const { close } = appMessages;\r\n  const titleId = getId('cardTitle');\r\n\r\n  const onDismissClick = (e) => {\r\n    onDismiss?.(e);\r\n  };\r\n  return (\r\n    <Stack verticalAlign=\"space-between\" role={role || 'region'} className={rootStyle} aria-labelledby={titleId}>\r\n      {imageUrl && <Image src={imageUrl} shouldFadeIn className={imageStyle} styles={{ image: getImageStyle }} alt={imageAlt} />}\r\n      {showDismissButton && (\r\n        <IconButton\r\n          iconProps={closeIcon}\r\n          title={formatMessage(close)}\r\n          ariaLabel={formatMessage(close)}\r\n          onClick={onDismissClick}\r\n          className={dismissButtonStyle}\r\n        />\r\n      )}\r\n      <Stack className={titleBar} enableScopedSelectors horizontal wrap horizontalAlign=\"space-between\" verticalAlign=\"center\">\r\n        <div className={tooltipTitle}>\r\n          <h2 className={titleStyle} id={titleId}>\r\n            {titleText}\r\n          </h2>\r\n          {titleIconTooltipProps && (\r\n            <IconTooltip iconName={titleIconTooltipProps.iconName} tooltipMessage={titleIconTooltipProps.tooltipText} />\r\n          )}\r\n        </div>\r\n        <Stack enableScopedSelectors horizontal wrap>\r\n          {cardTopBarActions}\r\n        </Stack>\r\n      </Stack>\r\n      <Stack className={bodyStyle}>\r\n        {!isDataLoaded && <Shimmer isDataLoaded={isDataLoaded} customElementsGroup={shimmerCustomElement} />}\r\n        {isDataLoaded && children}\r\n      </Stack>\r\n      {isDataLoaded && cardActions}\r\n      {isDataLoaded && footerComponents && (\r\n        <div className={footerWrapper}>\r\n          <div className={footerStyle}>{footerComponents}</div>\r\n        </div>\r\n      )}\r\n    </Stack>\r\n  );\r\n});\r\n","import React from 'react';\r\nimport { MAIN_CONTENT_ID } from '../../constants/AppConstants';\r\nimport { IMainProps } from './Main.types';\r\n\r\nexport function Main({ children, className }: IMainProps) {\r\n  return (\r\n    <main id={MAIN_CONTENT_ID} className={className || ''}>\r\n      {children}\r\n    </main>\r\n  );\r\n}\r\n","import { mutatorAction } from 'satcheljs';\r\nimport { getAppStore, upperCaseCountryCode } from '../../../../../../@data';\r\nimport { getProfileStore } from '../../../../Profile/@data';\r\nimport { getStore } from '../store/store';\r\n\r\nexport const onLanguageChanged = mutatorAction('onLanguageChanged', (locale: string, localStorageKey: string) => {\r\n  const { systemPreferences } = getStore().active;\r\n  if (locale && locale !== 'redirect') {\r\n    localStorage.setItem(localStorageKey, locale);\r\n\r\n    if (systemPreferences) {\r\n      systemPreferences.locale = locale;\r\n    } else {\r\n      getStore().active.systemPreferences = {\r\n        locale: locale,\r\n      };\r\n    }\r\n    if (getProfileStore().raw.primaryUser !== undefined) {\r\n      getProfileStore().raw.primaryUser!.language = upperCaseCountryCode(locale);\r\n    }\r\n\r\n    getAppStore().locale = locale;\r\n  }\r\n});\r\n\r\nexport const onCurrencyChanged = mutatorAction('onCurrencyChanged', (currency: string) => {\r\n  const { systemPreferences } = getStore().active;\r\n  if (systemPreferences) {\r\n    systemPreferences.currency = currency;\r\n  } else {\r\n    getStore().active.systemPreferences = {\r\n      currency: currency,\r\n    };\r\n  }\r\n});\r\n","import { mutatorAction } from 'satcheljs';\r\nimport { getAppStore } from '../../../../../@data';\r\nimport { getStore } from '../store/store';\r\n\r\nexport const onDialogShown = mutatorAction('ON_DIALOG_SHOWN', function showDialog() {\r\n  const store = getStore();\r\n  store.active.showDialog = true;\r\n});\r\n\r\nexport const onDialogDismissed = mutatorAction('ON_DIALOG_DISMISSED', function dismissDialog() {\r\n  const store = getStore();\r\n  store.active.showDialog = false;\r\n  const appStore = getAppStore();\r\n  appStore.isFirstTimeUser = false;\r\n});\r\n","export enum PublisherType {\r\n  organization = 'Business',\r\n  individual = 'Individual',\r\n}\r\n","import { Account, AccountSKU, getEntity, listEntity, MediaTypeString, Publisher, User, UserContext } from '../../../../../@data';\r\n\r\nexport const fetchAccountById = async (publisher: Publisher, id: string, userContext?: UserContext): Promise<Account> => {\r\n  const accountId = parseInt(id, 10);\r\n  const account = new Account(accountId);\r\n  return await getEntity<Account>([publisher, account], userContext);\r\n};\r\n\r\nexport const fetchCcmtAccountById = async (publisher: Publisher, accountId: number, userContext?: UserContext): Promise<Account> => {\r\n  const account = new Account(accountId);\r\n  const urlParams = new URLSearchParams([['isCCMTOnly', 'true']]);\r\n  return await getEntity<Account>([publisher, account], userContext, undefined, urlParams);\r\n};\r\n\r\nexport const fetchAllMediumAccountSkus = async (publisher: Publisher, id: string, userContext?: UserContext) => {\r\n  // return [new AccountSKU(1, 'some sku2'), new AccountSKU(2, 'some sku1')];\r\n\r\n  const allMediaTypes: string[] = [];\r\n\r\n  Object.keys(MediaTypeString).forEach((mediaTypeKey) => {\r\n    allMediaTypes.push(MediaTypeString[mediaTypeKey]);\r\n  });\r\n\r\n  const nonMappedMediums: string[] = [];\r\n  let mediumMappedSkus: AccountSKU[] = [];\r\n  mediumMappedSkus = await Promise.all(\r\n    allMediaTypes.map(async (allMediaType) => {\r\n      const enparams = new URLSearchParams([\r\n        ['medium', allMediaType],\r\n        ['accountId', id],\r\n      ]);\r\n      try {\r\n        return await getEntity([publisher], userContext, AccountSKU, enparams);\r\n      } catch {\r\n        nonMappedMediums.push(allMediaType);\r\n        return new AccountSKU();\r\n      }\r\n    })\r\n  );\r\n\r\n  return { mediumMappedSkus: mediumMappedSkus, nonMappedMediums: nonMappedMediums };\r\n};\r\n\r\nexport const fetchAllAvailableUsers = async (publisher: Publisher, userContext?: UserContext): Promise<User[]> => {\r\n  const users = await listEntity<User>([publisher], userContext, User);\r\n\r\n  if (userContext) {\r\n    if (users && (users.length === 0 || !users.some((u) => u.id === userContext!.id))) {\r\n      const currentUser = new User();\r\n      currentUser.id = userContext.id;\r\n      currentUser.username = userContext.email;\r\n      users.push(currentUser);\r\n    }\r\n  }\r\n  return users;\r\n};\r\n","import { defineMessages } from 'react-intl';\r\n\r\nexport const googleConnectorMessages = defineMessages({\r\n  settingsTab: {\r\n    id: 'googleConnectorMessages.settingsTab',\r\n    defaultMessage: 'Settings',\r\n  },\r\n  googleAccountNotConnectedTab: {\r\n    id: 'googleConnectorMessages.googleAccountNotConnectedTab',\r\n    defaultMessage: 'Connect your Google accounts',\r\n  },\r\n  googleAccountConnectedTab: {\r\n    id: 'googleConnectorMessages.googleAccountConnectedTab',\r\n    defaultMessage: 'Google account connection',\r\n  },\r\n  googleAccountDetails: {\r\n    id: 'googleConnectorMessages.googleAccountHeader',\r\n    defaultMessage: 'Google account details',\r\n  },\r\n  googleAccountConnectionStatus: {\r\n    id: 'googleConnectorMessages.googleAccountConnectionStatus',\r\n    defaultMessage: 'Status',\r\n  },\r\n  googleAccountConnectedStatus: {\r\n    id: 'googleConnectorMessages.googleAccountConnectedStatus',\r\n    defaultMessage: 'Connected',\r\n  },\r\n  googleAccountVerifyingStatus: {\r\n    id: 'googleConnectorMessages.googleAccountVerifyingStatus',\r\n    defaultMessage: 'Verifying',\r\n  },\r\n  googleAccountFailedStatus: {\r\n    id: 'googleConnectorMessages.googleAccountFailedStatus',\r\n    defaultMessage: 'Failed',\r\n  },\r\n  googleAccountConnectionDate: {\r\n    id: 'googleConnectorMessages.googleAccountConnectionDate',\r\n    defaultMessage: 'Connection date',\r\n  },\r\n  googleAccountMediateHeader: {\r\n    id: 'googleConnectorMessages.googleAccountMediateHeader',\r\n    defaultMessage: 'Boost revenue for every ad',\r\n  },\r\n  googleAccountMediateDescription: {\r\n    id: 'googleConnectorMessages.googleAccountMediateDescription',\r\n    defaultMessage: `By enabling boost revenue for every ad, you can boost the value of each ad unit. You'll see this option when creating or editing your ad units.`,\r\n  },\r\n  googleAccountConnect: {\r\n    id: 'googleConnectorMessages.googleAccountConnect',\r\n    defaultMessage: 'Connect',\r\n  },\r\n  googleAccountDisconnect: {\r\n    id: 'googleConnectorMessages.googleAccountDisconnect',\r\n    defaultMessage: 'Disconnect',\r\n  },\r\n  googleAccountRetry: {\r\n    id: 'googleConnectorMessages.googleAccountRetry',\r\n    defaultMessage: 'Retry',\r\n  },\r\n  monetizationDetails: {\r\n    id: 'googleConnectorMessages.monetizationDetails',\r\n    defaultMessage: `Connect your Google accounts to ensure you are getting the highest bid possible for your ad inventory. We'll only serve our ads if we predict we can deliver a higher payment compared to Google.`,\r\n  },\r\n  monetizationInstructionHeader: {\r\n    id: 'googleConnectorMessages.monetizationInstructionHeader',\r\n    defaultMessage: 'Before connecting your Google Ads account, please make sure you have:',\r\n  },\r\n  monetizationFirstInstruction: {\r\n    id: 'googleConnectorMessages.monetizationFirstInstruction',\r\n    defaultMessage: 'An approved Google Ad Manager and Google Adsense account',\r\n  },\r\n  monetizationSecondInstruction: {\r\n    id: 'googleConnectorMessages.monetizationSecondInstruction',\r\n    defaultMessage: 'Administrative rights',\r\n  },\r\n  monetizationThirdInstruction: {\r\n    id: 'googleConnectorMessages.monetizationThirdInstruction',\r\n    defaultMessage: 'API access enabled for your Google Ad manager and Google Ad sense account',\r\n  },\r\n  monetizationReviewTOSandPP: {\r\n    id: 'googleConnectorMessages.monetizationReviewTOSandPP',\r\n    defaultMessage: 'Please review the {appName} ',\r\n  },\r\n  monetizationPP: {\r\n    id: 'googleConnectorMessages.monetizationPP',\r\n    defaultMessage: 'Privacy policy',\r\n  },\r\n  monetizationReviewAnd: {\r\n    id: 'googleConnectorMessages.monetizationReviewAnd',\r\n    defaultMessage: ' and ',\r\n  },\r\n  monetizationTOS: {\r\n    id: 'googleConnectorMessages.monetizationTOS',\r\n    defaultMessage: 'Terms of service',\r\n  },\r\n  grantOAuthConnectingProcessTerminated: {\r\n    id: 'googleConnectorMessages.grantOAuthConnectingProcessTerminated',\r\n    defaultMessage: 'Connecting process terminated',\r\n  },\r\n  googleConnectorMediationOperationEnabling: {\r\n    id: 'googleConnectorMessages.googleConnectorMediationOperationEnabling',\r\n    defaultMessage: 'Enabling',\r\n  },\r\n  googleConnectorMediationOperationDisabling: {\r\n    id: 'googleConnectorMessages.googleConnectorMediationOperationDisabling',\r\n    defaultMessage: 'Disabling',\r\n  },\r\n  googleConnectorMediationFailed: {\r\n    id: 'googleConnectorMessages.googleConnectorMediationFailed',\r\n    defaultMessage: ' mediation failed, please try again later',\r\n  },\r\n  googleConnectorFailedToFetchAdSenseConnectionDetails: {\r\n    id: 'googleConnectorMessages.googleConnectorFailedToFetchAdSenseConnectionDetails',\r\n    defaultMessage: 'Failed to fetching adSense connection details. Please try again!',\r\n  },\r\n  disconnectingGoogleAccountFailed: {\r\n    id: 'googleConnectorMessages.disconnectingGoogleAccountFailed',\r\n    defaultMessage: 'Disconnecting account failed.',\r\n  },\r\n  disconnectingGoogleAccountSuccess: {\r\n    id: 'googleConnectorMessages.disconnectingGoogleAccountSuccess',\r\n    defaultMessage: 'Your Google accounts are successfully disconnected.',\r\n  },\r\n  connectGoogleAccountFailed: {\r\n    id: 'googleConnectorMessages.connectGoogleAccountFailed',\r\n    defaultMessage: 'We’re unable to connect to your Google account. Please try again later.',\r\n  },\r\n  disconnectGoogleAccountFailed: {\r\n    id: 'googleConnectorMessages.disconnectGoogleAccountFailed',\r\n    defaultMessage: 'We’re unable to disconnect your Google account. Please try again later.',\r\n  },\r\n  initializeGoogleAccountFailed: {\r\n    id: 'googleConnectorMessages.initializeGoogleAccountFailed',\r\n    defaultMessage: 'We’re unable to access your AdSense connection details. Please try again later.',\r\n  },\r\n  googleAccountConnectedSuccessfully: {\r\n    id: 'googleConnectorMessages.googleAccountConnectedSuccessfully',\r\n    defaultMessage: 'Your Google account is successfully connected.',\r\n  },\r\n});\r\n","import { IComboBoxOption, IDropdownOption } from '@fluentui/react';\r\nimport { userLocales } from '../../config/locale';\r\nimport { EN_LOCALE_KEY } from '../../constants';\r\nimport { SUPPORTED_LOCALES_MAPPING } from '../../globalization';\r\n\r\nexport const getSupportedLanguagesComboBoxOptions = (locale: string): IComboBoxOption[] => {\r\n  const isProdEnv = process.env.REACT_APP_ENV === 'production';\r\n  const supportedLocales = SUPPORTED_LOCALES_MAPPING[locale];\r\n  const supportedLanguages: IComboBoxOption[] = [];\r\n\r\n  Object.keys(supportedLocales).forEach((localeCode) => {\r\n    supportedLanguages.push({\r\n      key: userLocales[localeCode].toLocaleLowerCase(),\r\n      text: supportedLocales[localeCode],\r\n    });\r\n  });\r\n\r\n  supportedLanguages.sort((a, b) => {\r\n    const firstValue = a.text;\r\n    const secondValue = b.text;\r\n\r\n    return firstValue.toLowerCase() > secondValue.toLowerCase() ? 1 : -1;\r\n  });\r\n\r\n  const filteredLanguages = supportedLanguages.filter((value, index) => value.key === EN_LOCALE_KEY);\r\n\r\n  return isProdEnv ? filteredLanguages : supportedLanguages;\r\n};\r\n\r\nexport const getSupportedLanguagesDropDownOptions = (locale: string): IDropdownOption[] => {\r\n  const isProdEnv = process.env.REACT_APP_ENV === 'production';\r\n  const supportedLocales = getSupportedLocalesMapping(locale);\r\n  const supportedLanguages: IDropdownOption[] = [];\r\n\r\n  Object.keys(supportedLocales).forEach((localeCode) => {\r\n    supportedLanguages.push({\r\n      key: userLocales[localeCode].toLocaleLowerCase(),\r\n      text: supportedLocales[localeCode],\r\n    });\r\n  });\r\n\r\n  supportedLanguages.sort((a, b) => {\r\n    const firstValue = a.text;\r\n    const secondValue = b.text;\r\n\r\n    return firstValue.toLowerCase() > secondValue.toLowerCase() ? 1 : -1;\r\n  });\r\n\r\n  const filteredLanguages = supportedLanguages.filter((value, index) => value.key === EN_LOCALE_KEY);\r\n\r\n  return isProdEnv ? filteredLanguages : supportedLanguages;\r\n};\r\n\r\nexport const getSupportedLocalesMapping = (locale?: string | null): string[] => {\r\n  return SUPPORTED_LOCALES_MAPPING[locale ?? EN_LOCALE_KEY] ?? SUPPORTED_LOCALES_MAPPING[EN_LOCALE_KEY];\r\n};\r\n","import { IStyle } from '@fluentui/react';\r\nimport { useBoolean, useId, useSetTimeout } from '@fluentui/react-hooks';\r\nimport { useEffect, useMemo, useRef, useState } from 'react';\r\nimport { InjectedIntl } from 'react-intl';\r\nimport { useI18n } from '../../../../../../i18n/useI18n';\r\nimport { getAppStore, onNotificationRemoved } from '../../../../../@data';\r\nimport { useWindowSize } from '../../../../../hooks';\r\nimport { getStore } from '../../../../../hooks/useWindowSize/store/store';\r\nimport { onInitializePaymentsPage } from '../../@data/actions/actions';\r\nimport { getAccountStatus } from '../../@data/store/selectors';\r\nimport { getStore as getAccountSettingStore } from '../../Settings/@data/store/store';\r\n\r\nconst NOT_CREATED_ACCOUNT_STATUS = 'NotCreated';\r\nconst NOTIFICATION_DISMISS_BUFFER = 60000;\r\nexport const NOTIFICATION_RENDER_BUFFER = 1000;\r\nexport type PaymentNotificationBufferLocalStorageKey =\r\n  | 'payment-teaching-bubble-pushed'\r\n  | 'payment-setup-notification-pushed'\r\n  | 'payment-setup-cheer-dialog-pushed';\r\nexport const TEACHING_BUBBLE_NOTIFICATION_FLAG: PaymentNotificationBufferLocalStorageKey = 'payment-teaching-bubble-pushed';\r\nexport const SETUP_PAYMENTS_NOTIFICATION_FLAG: PaymentNotificationBufferLocalStorageKey = 'payment-setup-notification-pushed';\r\nexport const SETUP_PAYMENTS_CHEER_DIALOG_FLAG: PaymentNotificationBufferLocalStorageKey = 'payment-setup-cheer-dialog-pushed';\r\nexport const SETUP_PAYMENTS_NOTIFICATION_ACTION_BUTTON_ID = 'paymentSetupNotificationActionButton';\r\nexport const SETUP_PAYMENTS_NOTIFICATION_ID = 'paymentSetupNotification';\r\n\r\nexport const removePaymentNotificationBuffers = () => {\r\n  if (window.localStorage) {\r\n    [SETUP_PAYMENTS_NOTIFICATION_FLAG, TEACHING_BUBBLE_NOTIFICATION_FLAG, SETUP_PAYMENTS_CHEER_DIALOG_FLAG].forEach((key) => {\r\n      window.localStorage.removeItem(key);\r\n    });\r\n  }\r\n};\r\n\r\nexport const setPaymentNotificationBuffer = (key: PaymentNotificationBufferLocalStorageKey) => {\r\n  if (window.localStorage) {\r\n    window.localStorage.setItem(key, JSON.stringify(true));\r\n  }\r\n};\r\n\r\nconst { windowStoreSerializer } = useWindowSize();\r\n\r\nconst usePaymentsOnboarding = (formatMessage: InjectedIntl['formatMessage']) => {\r\n  const status = getAccountStatus();\r\n  const onboardingContainerId = useId('onboarding-container');\r\n  const xPayContainerRef = useRef<HTMLDivElement>(null);\r\n  const [isSDKLoaded, setSDKLoaded] = useState<boolean>(false);\r\n  const { publisher, userContext, notifications } = getAppStore();\r\n  const { systemPreferences } = getAccountSettingStore().active;\r\n  const { setTimeout } = useSetTimeout();\r\n  const [isInitializingXPayContainer, { setFalse: onXPayInitializeResolved }] = useBoolean(true);\r\n  const isTeachingBubbleHandledPerUserSession = localStorage.getItem(TEACHING_BUBBLE_NOTIFICATION_FLAG);\r\n  const { isWindowExtraSmallSize, isWindowSmallSize } = windowStoreSerializer(getStore());\r\n  const { locale, countryCode } = useI18n({ systemPreferences, publisher, userContext });\r\n\r\n  const handleInitXPayContainer = (succeed: boolean) => {\r\n    if (succeed) {\r\n      setTimeout(() => onXPayInitializeResolved(), 500);\r\n    }\r\n    setPaymentNotificationBuffer(TEACHING_BUBBLE_NOTIFICATION_FLAG);\r\n  };\r\n\r\n  const teachingBubbleResponsiveStylings = useMemo<IStyle>(\r\n    () => ({\r\n      backgroundColor: 'rgb(0, 120, 212)',\r\n      position: 'absolute',\r\n      top: isWindowExtraSmallSize || isWindowSmallSize ? -200 : -172,\r\n    }),\r\n    [isWindowExtraSmallSize, isWindowSmallSize]\r\n  );\r\n\r\n  /**\r\n   * workaround to hide setup payment notification button, we don't need to render the redirection button as this is\r\n   * already in the correct tab for user to setup payment, if user stay at the page, dismiss notification in 1 minute\r\n   */\r\n  useEffect(() => {\r\n    const setupNotificationButton = document.getElementById(SETUP_PAYMENTS_NOTIFICATION_ACTION_BUTTON_ID);\r\n    let setupNotificationButtonOGStyle;\r\n    if (setupNotificationButton) {\r\n      setupNotificationButtonOGStyle = setupNotificationButton.style.display;\r\n      setupNotificationButton.style.display = 'none';\r\n      setTimeout(() => onNotificationRemoved({ id: SETUP_PAYMENTS_NOTIFICATION_ID }), NOTIFICATION_DISMISS_BUFFER);\r\n    }\r\n\r\n    return () => {\r\n      if (setupNotificationButton) {\r\n        setupNotificationButton.style.display = setupNotificationButtonOGStyle;\r\n      }\r\n    };\r\n    // eslint-disable-next-line react-hooks/exhaustive-deps\r\n  }, [notifications]);\r\n\r\n  useEffect(() => {\r\n    const script = document.createElement('script');\r\n\r\n    script.src =\r\n      process.env.REACT_APP_ENV === 'production'\r\n        ? 'https://xpaycdn.azureedge.net/js/pack/xPayUIAccountOnboardingSDK.js'\r\n        : 'https://xpaycdn-int.azureedge.net/js/pack/xPayUIAccountOnboardingSDK.js';\r\n    script.async = true;\r\n    script.onload = () => {\r\n      setSDKLoaded(true);\r\n    };\r\n    document.body.appendChild(script);\r\n\r\n    return () => {\r\n      // clean up the script when the component in unmounted\r\n      document.body.removeChild(script);\r\n    };\r\n    // eslint-disable-next-line react-hooks/exhaustive-deps\r\n  }, []);\r\n\r\n  useEffect(() => {\r\n    // eslint-disable-next-line react-hooks/exhaustive-deps\r\n    const shouldRenderTeachingBubble = status === NOT_CREATED_ACCOUNT_STATUS && !isTeachingBubbleHandledPerUserSession;\r\n\r\n    isSDKLoaded && onInitializePaymentsPage(shouldRenderTeachingBubble, locale, countryCode, handleInitXPayContainer);\r\n    // eslint-disable-next-line react-hooks/exhaustive-deps\r\n  }, [isSDKLoaded, locale]);\r\n\r\n  return {\r\n    isInitializingXPayContainer,\r\n    xPayContainerRef,\r\n    onboardingContainerId,\r\n    teachingBubbleResponsiveStylings,\r\n  };\r\n};\r\n\r\nexport default usePaymentsOnboarding;\r\n","import { defineMessages } from \"react-intl\";\r\n\r\nexport default defineMessages({\r\n  datePlaceholder: {\r\n    id: 'dateTimePicker.datePlaceholder',\r\n    defaultMessage: 'Select date'\r\n  },\r\n  label: {\r\n    id: 'dateTimePicker.label',\r\n    defaultMessage: 'Date time picker'\r\n  },\r\n  goToToday: {\r\n    id: 'dateTimePicker.goToToday',\r\n    defaultMessage: 'Go to today',\r\n  },\r\n  prevMonthAriaLabel: {\r\n    id: 'dateTimePicker.prevMonthAriaLabel',\r\n    defaultMessage: 'Go to previous month',\r\n  },\r\n  nextMonthAriaLabel: {\r\n    id: 'dateTimePicker.nextMonthAriaLabel',\r\n    defaultMessage: 'Go to next month',\r\n  },\r\n  prevYearAriaLabel: {\r\n    id: 'dateTimePicker.prevYearAriaLabel',\r\n    defaultMessage: 'Go to previous year',\r\n  },\r\n  nextYearAriaLabel: {\r\n    id: 'dateTimePicker.nextYearAriaLabel',\r\n    defaultMessage: 'Go to next year',\r\n  },\r\n  closeButtonAriaLabel: {\r\n    id: 'dateTimePicker.closeButtonAriaLabel',\r\n    defaultMessage: 'Close date picker',\r\n  },\r\n  isRequiredErrorMessage: {\r\n    id: 'dateTimePicker.isRequiredErrorMessage',\r\n    defaultMessage: 'Field is required.',\r\n  },\r\n  invalidDateErrorMessage: {\r\n    id: 'dateTimePicker.invalidInputErrorMessage',\r\n    defaultMessage: 'Invalid date format.',\r\n  },\r\n  invalidMinuteErrorMessage: {\r\n    id: 'dateTimePicker.invalidMinuteErrorMessage',\r\n    defaultMessage: 'Invalid minute value.',\r\n  },\r\n  invalidSecondsErrorMessage: {\r\n    id: 'dateTimePicker.invalidSecondsErrorMessage',\r\n    defaultMessage: 'Invalid second value.',\r\n  },\r\n});","import { PublicClientApplication } from '@azure/msal-browser';\r\nimport { aadConfig } from './config/pubCenterAAD.config';\r\n\r\n/* Singleton class to create PubCenter AAD authentication context using MSAL library */\r\nclass PubCenterAuthContext {\r\n  public static initializeAuthContext(): PublicClientApplication {\r\n    return new PublicClientApplication(aadConfig);\r\n  }\r\n}\r\n\r\nexport const pubcenterApp = PubCenterAuthContext.initializeAuthContext();\r\n","export function clearAllCookies() {\r\n  // Clearing all cookies. This function will extract all cookies from the browser cache,\r\n  // then sets their value to empty string and sets the expires parameter to current UTC datetime.\r\n  // Browser will delete the cookie as soon as expires parameter value is in the past.\r\n\r\n  document.cookie.split(\";\").forEach((c) => {\r\n    document.cookie = c.replace(/^ +/, \"\").replace(/=.*/, \"=;expires=\" + new Date().toUTCString() + \";path=/\");\r\n  });\r\n}","import { AccountInfo, AuthenticationResult, EndSessionRequest, RedirectRequest } from '@azure/msal-browser';\r\nimport { Log } from '../../../logging/src/Log';\r\nimport { pubcenterApp } from '../../PubCenterAuthContext';\r\nimport {\r\n  aadConfig,\r\n  accountEnvironment,\r\n  authTokenRequest,\r\n  envBasedConfig,\r\n  silentTokenRequest,\r\n  silentTokenRequestRedirectUri,\r\n} from '../../config/pubCenterAAD.config';\r\nimport {\r\n  REDIRECT_URI_SESSION_STORAGE_KEY,\r\n  TOKEN_EXPIRED_SEARCH_PARAM_KEY,\r\n  UNAUTHORIZED_LOCAL_STORAGE_LOCALE,\r\n} from '../../constants/AppConstants';\r\nimport { clearAllCookies } from '../../utils/cookiesUtils';\r\nimport { UserContext } from '../store';\r\nimport { StorageUserContextKey, getAppStore } from '../store/store';\r\n\r\nlet authResponse: AuthenticationResult;\r\nconst { userContext } = getAppStore();\r\nlet username = userContext?.userName ?? userContext?.email ?? '';\r\n\r\nexport async function logoutPubCenterAADUser(isTokenExpired?: boolean): Promise<void> {\r\n  const tenantId = pubcenterApp.getAccountByUsername(username)?.idTokenClaims?.tid;\r\n\r\n  if (tenantId === aadConfig.auth.msaTenantId) {\r\n    msaLogout(isTokenExpired);\r\n  } else {\r\n    aadLogout(isTokenExpired);\r\n  }\r\n\r\n  Log.debug('Clearing storage cache after logout');\r\n  // clearing cache and cookies to avoid login issues\r\n  const localStorageUnAuthLocale = window.localStorage.getItem(UNAUTHORIZED_LOCAL_STORAGE_LOCALE);\r\n  localStorage.clear();\r\n  sessionStorage.clear();\r\n  clearAllCookies();\r\n  if (localStorageUnAuthLocale) {\r\n    window.localStorage.setItem(UNAUTHORIZED_LOCAL_STORAGE_LOCALE, localStorageUnAuthLocale);\r\n  }\r\n}\r\n\r\nfunction aadLogout(isTokenExpired?: boolean) {\r\n  const logoutRequest: EndSessionRequest = {\r\n    logoutHint: pubcenterApp.getAccountByUsername(username)?.idTokenClaims?.login_hint,\r\n    postLogoutRedirectUri: getPostLogoutRedirectUri(isTokenExpired),\r\n  };\r\n\r\n  Log.write('Logging out AAD user');\r\n  pubcenterApp.logoutRedirect(logoutRequest);\r\n}\r\n\r\nfunction msaLogout(isTokenExpired?: boolean) {\r\n  const postLogoutUrl = 'redirect_uri=' + encodeURIComponent(getPostLogoutRedirectUri(isTokenExpired));\r\n  const clientIdQueryStr = 'client_id=' + encodeURIComponent(aadConfig.auth.clientId);\r\n  const msaLogoutRedirectionUrl = `${aadConfig.auth.msaAuthority}/oauth20_logout.srf?${clientIdQueryStr}&${postLogoutUrl}`;\r\n\r\n  Log.write('Logging out MSA user and redirecting to login page ' + msaLogoutRedirectionUrl.toString());\r\n  window.location.replace(msaLogoutRedirectionUrl);\r\n}\r\n\r\nexport function loginUserWithAdditionalClaims(authenticateHeader: string | null) {\r\n  if (!authenticateHeader?.includes('claims')) {\r\n    return;\r\n  }\r\n\r\n  const claimsRegex = `claims=\"([^\"]+)\"`;\r\n  const match = new RegExp(claimsRegex).exec(authenticateHeader);\r\n  let claims = '';\r\n  if (!match || match.length < 1) {\r\n    return;\r\n  }\r\n  claims = atob(match[1]);\r\n\r\n  sessionStorage.setItem(REDIRECT_URI_SESSION_STORAGE_KEY, window.location.pathname);\r\n\r\n  const requestParams: Partial<RedirectRequest> = {\r\n    redirectStartPage: '/login',\r\n    extraQueryParameters: { claims: encodeURI(claims) },\r\n    prompt: 'login',\r\n  };\r\n  loginPubCenterAADUser(requestParams);\r\n}\r\n\r\nexport function loginPubCenterAADUser(requestParams?: Partial<RedirectRequest>) {\r\n  handleInvalidInteractionStatus();\r\n\r\n  const redirectRequest: RedirectRequest = { ...authTokenRequest, ...requestParams };\r\n  if (!redirectRequest.extraQueryParameters) {\r\n    redirectRequest.extraQueryParameters = {};\r\n  }\r\n\r\n  // msaoauth2 paramenter is required to enable MSA user login flow\r\n  redirectRequest.extraQueryParameters.msaoauth2 = 'true';\r\n  pubcenterApp.loginRedirect(redirectRequest);\r\n}\r\n\r\nexport async function acquireAuthResponseAsync(request, usernameHint?: string): Promise<AuthenticationResult> {\r\n  username = usernameHint ?? username ?? pubcenterApp.getActiveAccount()?.username;\r\n\r\n  if (username) {\r\n    const accountInfo: AccountInfo = {\r\n      username: username,\r\n      environment: accountEnvironment,\r\n      tenantId: aadConfig.auth.msaTenantId,\r\n      homeAccountId: '',\r\n      localAccountId: '',\r\n    };\r\n    request.account = pubcenterApp.getAccountByUsername(username) || accountInfo;\r\n\r\n    try {\r\n      authResponse = await pubcenterApp.acquireTokenSilent({ ...request, silentTokenRequestRedirectUri });\r\n    } catch (error) {\r\n      Log.warn('silent token acquisition fails. acquiring token using redirect: ' + JSON.stringify(error));\r\n      const requestParams: Partial<RedirectRequest> = { loginHint: username, redirectStartPage: aadConfig.auth.redirectUri };\r\n      loginPubCenterAADUser(requestParams);\r\n    }\r\n  } else {\r\n    loginPubCenterAADUser();\r\n  }\r\n  return authResponse;\r\n}\r\n\r\nexport async function fetchPubCenterAADAccessTokenAsync() {\r\n  authResponse = await acquireAuthResponseAsync(silentTokenRequest);\r\n  if (authResponse) {\r\n    return authResponse.accessToken;\r\n  }\r\n}\r\n\r\nexport async function getIdToken() {\r\n  authResponse = await acquireAuthResponseAsync(silentTokenRequest);\r\n  if (authResponse) {\r\n    return authResponse.idToken;\r\n  }\r\n}\r\n\r\nexport async function handleLoginRedirectAsync() {\r\n  await pubcenterApp\r\n    .handleRedirectPromise()\r\n    .then((response) => {\r\n      if (!!response) {\r\n        username = response.account !== null ? response.account.username : '';\r\n        Log.info('Login successful with: ' + username);\r\n        authResponse = response;\r\n      }\r\n    })\r\n    .catch((err) => {\r\n      Log.error(err);\r\n    });\r\n  return authResponse;\r\n}\r\n\r\n/**\r\n * In cases where the Login redirection flow is interruped by the user, the session storage cached data used for proper\r\n * login flow does not get cleared out. This dormant cache data creates login issues the next time user tries\r\n * to login. This method helps in removing any dormant cache data present in session storage.\r\n */\r\nfunction handleInvalidInteractionStatus() {\r\n  const interactionStatus = sessionStorage.getItem('msal.interaction.status');\r\n  const clientIdInteractionStatus = sessionStorage.getItem(`msal.${envBasedConfig.clientId}.interaction.status`);\r\n\r\n  // After refresh token is expired, user is successfully logged out and redirected to PubCenter login page,\r\n  // it recommends us to close the browser to clear session context, but mostly user continue to login directly\r\n  // here session storage is not cleared and sometimes has a interaction in progress status from the earlier interaction\r\n  // When user tries to login again this status interrupts the login flow. Clearing session storage helps to start a fresh session.\r\n  if (\r\n    (interactionStatus && interactionStatus === envBasedConfig.clientId) ||\r\n    (clientIdInteractionStatus && clientIdInteractionStatus === 'interaction_in_progress')\r\n  ) {\r\n    console.log('Interaction in progress, clearing session storage');\r\n    localStorage.clear();\r\n    sessionStorage.removeItem('msal.interaction.status');\r\n    sessionStorage.removeItem(`msal.${envBasedConfig.clientId}.interaction.status`);\r\n    clearAllCookies();\r\n    localStorage.setItem(StorageUserContextKey, JSON.stringify(new UserContext()));\r\n  }\r\n}\r\n\r\nfunction getPostLogoutRedirectUri(isTokenExpired?: boolean): string {\r\n  let postLogoutRedirectUri = aadConfig.auth.redirectUri;\r\n  if (isTokenExpired && postLogoutRedirectUri) {\r\n    postLogoutRedirectUri += `?${TOKEN_EXPIRED_SEARCH_PARAM_KEY}=true`;\r\n  }\r\n  return postLogoutRedirectUri;\r\n}\r\n","export * from './onNotificationPreferencesChanged';\r\nexport * from './onPublisherDeleted';\r\nexport * from './onSettingsPageChanged';\r\nexport * from './onUserSelfDeleted';\r\n","import { IUserRoleDetail, User, UserRole, UserRoleEntityType } from '../../../../@data';\r\nimport UserManagementMessages from '../UserManagement.messages';\r\n\r\nexport function getUserRoleFromUser(user: User): UserRole | undefined {\r\n  let userRole: UserRole | undefined;\r\n  const roleDetails: IUserRoleDetail[] | undefined = user.userRoleDetails;\r\n\r\n  if (roleDetails && roleDetails.length > 0) {\r\n    roleDetails.forEach((roleDetail) => {\r\n      if (roleDetail.entityType === UserRoleEntityType.Customer) {\r\n        userRole = roleDetail.userRole;\r\n      }\r\n    });\r\n  }\r\n  return userRole;\r\n}\r\n\r\nexport function getUserRoleString(formatMessage, user: User): string {\r\n  const userRole = getUserRoleFromUser(user);\r\n\r\n  return getFormattedUserRole(formatMessage, userRole);\r\n}\r\n\r\nexport function getFormattedUserRole(formatMessage, userRole?: UserRole): string {\r\n  const { superAdmin, accountManager, reportUser } = UserManagementMessages;\r\n\r\n  switch (userRole) {\r\n    case UserRole.SuperAdmin:\r\n      return formatMessage(superAdmin);\r\n    case UserRole.AccountManager:\r\n      return formatMessage(accountManager);\r\n    case UserRole.ReportUser:\r\n      return formatMessage(reportUser);\r\n    default:\r\n      return '';\r\n  }\r\n}\r\n\r\nexport function getUserRoleMapping(roleIds: number[] | undefined, formatMessage?): string {\r\n  if (roleIds && roleIds.length > 0) {\r\n    if (roleIds.find((id) => id === 41)) {\r\n      return formatMessage ? formatMessage(UserManagementMessages.superAdmin) : 'Super Admin';\r\n    }\r\n    if (roleIds.find((id) => id === 43)) {\r\n      return formatMessage ? formatMessage(UserManagementMessages.accountManager) : 'Account Manager';\r\n    }\r\n    if (roleIds.find((id) => id === 49)) {\r\n      return formatMessage ? formatMessage(UserManagementMessages.reportUser) : 'Report User';\r\n    }\r\n  }\r\n  return '';\r\n}\r\n\r\nexport const userRoleToRoleIdMap = new Map<UserRole, number>([\r\n  [UserRole.SuperAdmin, 41],\r\n  [UserRole.AccountManager, 43],\r\n  [UserRole.ReportUser, 49],\r\n]);\r\n\r\nexport const userRoleIdToRoleNameMap = new Map<number, string>([\r\n  // user roles scoped to publisher shell\r\n  [41, 'SuperAdmin'],\r\n  [43, 'AccountManager'],\r\n  [49, 'ReportUser'],\r\n  [42, 'PublisherAdmin'],\r\n  [61, 'ListManager'],\r\n  [62, 'AdViewer'],\r\n\r\n  // internal user roles\r\n  [91, 'Provisioning Internal'],\r\n  [116, 'Partner Account Manager'],\r\n  [124, 'Yahoo PRM'],\r\n  [125, 'Yahoo Search Account Manager'],\r\n  [156, 'Provisioning External'],\r\n  [169, 'PC Inventory Management'],\r\n  [170, 'PC Support'],\r\n  [171, 'PC Guest Read Only'],\r\n  [172, 'PC Finance Ops'],\r\n  [174, 'PC 3PE Management'],\r\n]);\r\n","import { when } from 'mobx';\r\nimport { orchestrator } from 'satcheljs';\r\nimport { getAppStore, showErrorToastNotification } from '../../../../../@data';\r\nimport { getColumnMembers } from '../../../../../@data/services/ReportingService';\r\nimport { getAdunitStore } from '../../../../ad-management/Adunit/@data';\r\nimport ReportMessages from '../../../Report.messages';\r\nimport { ReportCardType } from '../../ReportCard/ReportCard.types';\r\nimport { fetchReportDimensionColumnMembers, setColumnMembers } from '../actions';\r\nimport { IColumnMemberDetails } from '../store/schema';\r\n\r\norchestrator(fetchReportDimensionColumnMembers, async (msg) => {\r\n  try {\r\n    const { publisher, account } = getAppStore();\r\n    if (!publisher || !account) {\r\n      return;\r\n    }\r\n    const reportCardType = msg.reportCardType;\r\n    if (reportCardType === ReportCardType.MEDIATION) {\r\n      when(\r\n        () => !getAdunitStore().isFetchingAdUnitStatus,\r\n        () => {\r\n          const allAdUnits = getAdunitStore().adUnitsRaw.data || [];\r\n          const columnMembers: IColumnMemberDetails[] = allAdUnits\r\n            .filter((adunit) => adunit.mediatedWithAdSense && adunit.mediatedWithAdSense.mediationStatus)\r\n            .map((adunit) => ({\r\n              Id: adunit.id,\r\n              Value: String(adunit.name),\r\n              DisplayName: String(adunit.name),\r\n            }));\r\n          setColumnMembers(msg.requestParams.column, columnMembers);\r\n        }\r\n      );\r\n    } else {\r\n      const columnMembers = await getColumnMembers(msg.requestParams);\r\n      setColumnMembers(msg.requestParams.column, columnMembers);\r\n    }\r\n  } catch (error) {\r\n    showErrorToastNotification({ textMessageDescriptor: ReportMessages.dimensionColumnMembersFailedMessage });\r\n  }\r\n});\r\n","import { createStore } from 'satcheljs';\r\nimport '../orchestrators';\r\nimport { IReportPageData, ReportDataSource } from './schema';\r\n\r\nexport const ReportsMetadataKeyByType = {\r\n  19: 'app.reports.19.metadata',\r\n};\r\nexport const ReportTypeKey = 'app.reports.reportType';\r\nexport const getReportPageStore = createStore<IReportPageData>('ReportPageData', {\r\n  metadata: { isMetadataLoaded: false, dimensions: [], grains: [], metrics: [] },\r\n  mediationMetadata: { isMetadataLoaded: false, dimensions: [], grains: [], metrics: [] },\r\n  columnMembers: {},\r\n  reportType: ReportDataSource.TythonV2,\r\n  adUnits: {\r\n    Day: {},\r\n    Hour: {},\r\n    Month: {},\r\n    None: {},\r\n    Week: {},\r\n    Year: {},\r\n    MonthAndYear: {},\r\n  },\r\n  mediation: {\r\n    Day: {},\r\n    Hour: {},\r\n    Month: {},\r\n    None: {},\r\n    Week: {},\r\n    Year: {},\r\n    MonthAndYear: {},\r\n  },\r\n  sites: {\r\n    Day: {},\r\n    Hour: {},\r\n    Month: {},\r\n    None: {},\r\n    Week: {},\r\n    Year: {},\r\n    MonthAndYear: {},\r\n  },\r\n  performance: {\r\n    Day: {},\r\n    Hour: {},\r\n    Month: {},\r\n    None: {},\r\n    Week: {},\r\n    Year: {},\r\n    MonthAndYear: {},\r\n  },\r\n  summary: {\r\n    Day: {},\r\n    Hour: {},\r\n    Month: {},\r\n    None: {},\r\n    Week: {},\r\n    Year: {},\r\n    MonthAndYear: {},\r\n  },\r\n  mediationSummary: {\r\n    Day: {},\r\n    Hour: {},\r\n    Month: {},\r\n    None: {},\r\n    Week: {},\r\n    Year: {},\r\n    MonthAndYear: {},\r\n  },\r\n  country: {\r\n    Day: {},\r\n    Hour: {},\r\n    Month: {},\r\n    None: {},\r\n    Week: {},\r\n    Year: {},\r\n    MonthAndYear: {},\r\n  },\r\n});\r\n","import { action } from 'satcheljs';\r\nimport { EntityType } from '../../../../../../@data';\r\nimport { INotificationPreferences } from '../store/schema/ISettingsViewModel';\r\n\r\nexport const onUpdateNotificationPreferences = action(\r\n  'onUpdateNotificationPreferences',\r\n  (entityType: EntityType, np: INotificationPreferences) => ({ entityType, np })\r\n);\r\n\r\nexport const toggleBillingAlerts = action('toggleBillingAlerts', (entityType: EntityType, checked?: boolean) => ({ entityType, checked }));\r\n\r\nexport const toggleServingStatus = action('toggleServingStatus', (entityType: EntityType, checked?: boolean) => ({ entityType, checked }));\r\n\r\nexport const toggleProfileReview = action('toggleProfileReview', (entityType: EntityType, checked?: boolean) => ({ entityType, checked }));\r\n\r\nexport const toggleInvitedUsers = action('toggleInvitedUsers', (entityType: EntityType, checked?: boolean) => ({ entityType, checked }));\r\n","export enum LogType {\r\n  DEBUG = 'DEBUG',\r\n  INFO = 'INFO',\r\n  WARN = 'WARN',\r\n  ERROR = 'ERROR',\r\n}\r\n","export * from './store/schema';\r\nexport * from './store/store';\r\nexport * from './store/selectors';\r\n","import { action } from 'satcheljs';\r\nimport { ChartGrain } from '../../Payments/EstimatedEarnings/EstimatedEarnings.types';\r\n\r\nexport const onInitializePaymentsPage = action(\r\n  'onInitializePaymentsPage',\r\n  (shouldRenderOnboardingPopup: boolean, locale: string, countryCode: string, onResolvedCallback?: (success: boolean) => void) => ({\r\n    shouldRenderOnboardingPopup,\r\n    locale,\r\n    countryCode,\r\n    onResolvedCallback,\r\n  })\r\n);\r\nexport const fetchPaymentsPageBalance = action('fetchPaymentsPageBalance');\r\nexport const fetchPaymentsPageEstimatedEarnings = action('fetchPaymentsPageEstimatedEarnings', (grain: ChartGrain) => ({\r\n  grain,\r\n}));\r\nexport const fetchAccountStatus = action('fetchAccountStatus');\r\n","import { mutatorAction } from 'satcheljs';\r\nimport { Log } from '../../../../../../logging/src';\r\nimport {\r\n  getAppStore,\r\n  getCurrentPublisher,\r\n  IPhoneVerificationData,\r\n  IStringDictionary,\r\n  PhoneVerificationMediumType,\r\n  Publisher,\r\n  User,\r\n} from '../../../../../@data';\r\nimport { DEFAULT_COUNTRY_CODE } from '../../../../../constants/AppConstants';\r\nimport { deepClone } from '../../../../../utils';\r\nimport { getPrimaryUserActiveData, getPublisherActiveData, getPublisherProfileActiveData } from '../store/selectors';\r\nimport { getProfileStore } from '../store/store';\r\n\r\nexport const setLoadingStateAction = mutatorAction('setLoadingStateAction', (isLoading: boolean) => {\r\n  getPublisherProfileActiveData().isLoading = isLoading;\r\n});\r\n\r\nexport const setPublisherProfileDetailsAction = mutatorAction('setPublisherProfileDetailsAction', (publisherProfileDetails: Publisher) => {\r\n  const appStore = getAppStore();\r\n  appStore.publisher = { ...appStore.publisher, ...publisherProfileDetails };\r\n\r\n  /** NOTE: When publisher is signed up, we set some dummy address as it is a mandatory field in CCMT.\r\n   *  As it can cause confusion to users in UI, we are resetting the address fields, in case\r\n   *  Address has dummy field values\r\n   *  Publisher profileComplete is false\r\n   */\r\n  const { publisher } = getAppStore();\r\n  const isDefaultAddress = publisher?.address?.line1 === 'Address line 1' && publisher.address.city === 'City';\r\n  const { id, lastUpdatedTimestamp, eTag, country } = publisher?.address || {};\r\n  if (publisher && publisher.address && isDefaultAddress && !publisher.profileComplete) {\r\n    Log.info('Resetting dummy address as publisher profile is incomplete');\r\n\r\n    publisher.address = {\r\n      id,\r\n      lastUpdatedTimestamp,\r\n      eTag,\r\n      country,\r\n    };\r\n  }\r\n});\r\n\r\nexport const setPrimaryUserDetailsAction = mutatorAction('setPrimaryUserDetailsAction', (primaryUserDetails: User) => {\r\n  // This is necessary because only \"users\" API endpoints don't return the className, others do.\r\n  primaryUserDetails.className = new User().className;\r\n  getProfileStore().raw.primaryUser = primaryUserDetails;\r\n});\r\n\r\nexport const setPrimaryUserDetailsETagAction = mutatorAction('setPrimaryUserDetailsETagAction', (userETag: string) => {\r\n  const { raw } = getProfileStore();\r\n  const { primaryUser } = raw;\r\n  if (primaryUser?.eTag) {\r\n    primaryUser.eTag = userETag;\r\n  }\r\n});\r\n\r\nexport const setProfileEditModeAction = mutatorAction('setProfileEditModeAction', (isInEditMode: boolean) => {\r\n  getPublisherProfileActiveData().isInEditMode = isInEditMode;\r\n});\r\n\r\nexport const initializeProfileActiveStateFromRawDataAction = mutatorAction('initializeProfileActiveStateFromRawDataAction', () => {\r\n  const { raw } = getProfileStore();\r\n  const { primaryUser } = raw;\r\n  const publisher = getCurrentPublisher();\r\n  const active = getPublisherProfileActiveData();\r\n  active.publisher = deepClone(publisher);\r\n\r\n  // NOTE: This is to keep the eTag updated with the server data\r\n  if (active.publisher && publisher?.eTag) {\r\n    active.publisher.eTag = publisher?.eTag;\r\n  }\r\n  active.user = deepClone(primaryUser);\r\n  if (active.user && primaryUser?.eTag) {\r\n    active.user.eTag = primaryUser.eTag;\r\n  }\r\n\r\n  // Initialize the country with the default country code if not set already\r\n  if (active.user?.postalAddress && !active.user?.postalAddress?.country) {\r\n    active.user.postalAddress.country = DEFAULT_COUNTRY_CODE;\r\n  }\r\n  if (active.publisher?.address && !active.publisher?.address?.country) {\r\n    active.publisher.address.country = DEFAULT_COUNTRY_CODE;\r\n  }\r\n});\r\n\r\nexport const setIsAddressValid = mutatorAction('setIsAddressValid', (isAddressValid?: boolean) => {\r\n  const active = getPublisherProfileActiveData();\r\n  active.isAddressValid = isAddressValid;\r\n});\r\n\r\nexport const setIsOrgAddressValid = mutatorAction('setIsOrgAddressValid', (isOrgAddressValid?: boolean) => {\r\n  const active = getPublisherProfileActiveData();\r\n  active.isOrgAddressValid = isOrgAddressValid;\r\n});\r\n\r\nexport const setPrimaryUserFieldAction = mutatorAction('setPrimaryUserFieldAction', (fieldName: string, fieldValue?: string) => {\r\n  const primaryUser = getPrimaryUserActiveData();\r\n  if (!primaryUser) {\r\n    return;\r\n  }\r\n\r\n  if (fieldName === 'phoneNumber') {\r\n    primaryUser.contactInfo = primaryUser.contactInfo || {};\r\n    primaryUser.contactInfo.phone1 = fieldValue;\r\n    return;\r\n  }\r\n\r\n  primaryUser.postalAddress = primaryUser.postalAddress || {};\r\n  primaryUser.postalAddress[fieldName] = fieldValue;\r\n});\r\n\r\nexport const setPublisherFieldAction = mutatorAction('setPublisherFieldAction', (fieldName: string, fieldValue?: string) => {\r\n  const publisher = getPublisherActiveData();\r\n  if (!publisher) {\r\n    return;\r\n  }\r\n\r\n  if (['organizationEmailAddress', 'organizationUrl', 'ceoName'].includes(fieldName)) {\r\n    publisher.extendedProperties = publisher.extendedProperties || {};\r\n    publisher.extendedProperties[fieldName] = fieldValue;\r\n    return;\r\n  }\r\n\r\n  if (fieldName === 'name') {\r\n    publisher.name = fieldValue;\r\n    return;\r\n  }\r\n\r\n  publisher.address = publisher.address || {};\r\n  publisher.address[fieldName] = fieldValue;\r\n});\r\n\r\nexport const setProfileErrorsAction = mutatorAction('setProfileErrorsAction', (errors?: IStringDictionary) => {\r\n  getProfileStore().errors = errors || {};\r\n});\r\n\r\nexport const setIsSubmittedAction = mutatorAction('setIsSubmittedAction', (isSubmitted: boolean) => {\r\n  getProfileStore().active.isSubmitted = isSubmitted;\r\n});\r\n\r\nexport const setIsPreviewShownAction = mutatorAction('setIsPreviewShownAction', (isPreviewShown: boolean) => {\r\n  getProfileStore().active.isPreviewShown = isPreviewShown;\r\n});\r\n\r\nexport const setIsPhoneVerificationMethodsShown = mutatorAction(\r\n  'setIsPhoneVerificationMethodsShown',\r\n  (isPhoneVerificationMethodsShown: boolean) => {\r\n    getProfileStore().active.isPhoneVerificationMethodsShown = isPhoneVerificationMethodsShown;\r\n  }\r\n);\r\n\r\nexport const setIsPhoneVerificationCodeShown = mutatorAction('setIsPhoneVerificationCodeShown', (isPhoneVerificationCodeShown: boolean) => {\r\n  getProfileStore().active.isPhoneVerificationCodeShown = isPhoneVerificationCodeShown;\r\n});\r\n\r\nexport const setIsVerificationSuccess = mutatorAction('setIsPhoneVerificationSuccess', (isVerificationSuccess: boolean) => {\r\n  getProfileStore().active.isVerificationSuccess = isVerificationSuccess;\r\n});\r\nexport const setIsCodeBeingVerified = mutatorAction('setIsCodeBeingVerified', (isCodeBeingVerified: boolean) => {\r\n  getProfileStore().active.isCodeBeingVerified = isCodeBeingVerified;\r\n});\r\n\r\nexport const setPhoneVerificationMediumType = mutatorAction('setPhoneVerificationMediumType', (mediumType: PhoneVerificationMediumType) => {\r\n  getProfileStore().active.phoneVerificationGenerateCode.verificationMediumType = mediumType;\r\n});\r\n\r\nexport const setPhoneVerificationCode = mutatorAction('setPhoneVerificationCode', (code: string) => {\r\n  getProfileStore().active.phoneVerificationVerifyCode.code = code;\r\n});\r\n\r\nexport const setPhoneVerificationRequestId = mutatorAction('setPhoneVerificationRequestId', (requestId: string) => {\r\n  getProfileStore().active.phoneVerificationVerifyCode.requestId = requestId;\r\n});\r\n\r\nexport const setPhoneVerificationResp = mutatorAction('setPhoneVerificationResp', (respData: IPhoneVerificationData) => {\r\n  getProfileStore().active.phoneVerificationResp = respData;\r\n});\r\nexport const setVerificationCodeGenerationLimitReached = mutatorAction(\r\n  'setVerificationCodeGenerationLimitReached',\r\n  (limitReached: boolean) => {\r\n    getProfileStore().active.verificationCodeGenerationLimitReached = limitReached;\r\n  }\r\n);\r\n","import { createStore } from 'satcheljs';\r\nimport { IPartnerManagementViewState } from './schema/IPartnerManagementViewState';\r\n\r\nexport enum RouteName {\r\n  default = 'default',\r\n  publisher = 'publisher',\r\n  account = 'account',\r\n  user = 'user'\r\n}\r\n\r\nexport const defaultRoute = RouteName.publisher;\r\n\r\nexport const getPageStore = createStore<IPartnerManagementViewState>('PartnerManagementViewState', {\r\n  loading: false,\r\n  invalid: false,\r\n  panelIsOpen: false\r\n});\r\n","import { Icon, TooltipHost } from '@fluentui/react';\r\nimport React from 'react';\r\n\r\nexport interface IIconTooltipProps {\r\n  tooltipMessage: string;\r\n  iconName: string;\r\n}\r\n\r\nconst tooltipHostStyles = {\r\n  root: {\r\n    display: 'flex',\r\n  },\r\n};\r\n\r\nexport const IconTooltip = ({ tooltipMessage: warningMessage, iconName }: IIconTooltipProps) => {\r\n  return (\r\n    <TooltipHost content={warningMessage} styles={tooltipHostStyles} aria-label={warningMessage}>\r\n      <Icon iconName={iconName} />\r\n    </TooltipHost>\r\n  );\r\n};\r\n","import {\r\n  IOverflowSetItemProps,\r\n  IPanelProps,\r\n  IPersonaStyleProps,\r\n  IPersonaStyles,\r\n  IStyle,\r\n  IStyleFunctionOrObject,\r\n  ITheme,\r\n  PanelType,\r\n} from '@fluentui/react';\r\nimport { ReactNode } from 'react';\r\nimport { InjectedIntlProps } from 'react-intl';\r\nimport { IUseCMUIExperience } from '../../hooks/useCMUIHelpExperience/index.types';\r\nimport { ISearchProps } from '../Search/Search.types';\r\n\r\nexport interface IHeaderItem extends IOverflowSetItemProps {\r\n  title: string;\r\n  icon?: string;\r\n  identity?: IHeaderIdentity;\r\n  type?: PanelTypes;\r\n  panel?: React.ComponentType<object>;\r\n  panelProps?: IPanelProps;\r\n  query?: string;\r\n  onClick?: () => void;\r\n  shouldOverflowUnderExtraSmallScreen: boolean;\r\n  showRedDot?: boolean;\r\n}\r\n\r\nexport enum PanelTypes {\r\n  Profile = 'Profile',\r\n  Feedback = 'Feedback',\r\n  Notifications = 'Notifications',\r\n}\r\n\r\nexport interface IHeaderIdentity {\r\n  name: string;\r\n  email: string;\r\n}\r\n\r\nexport interface IHeaderProps<T> extends InjectedIntlProps {\r\n  dropdownItems?: IHeaderDropdownItem[];\r\n  items?: IHeaderItem[];\r\n  loadingText?: string;\r\n  onNavigate?: (path: string) => void;\r\n  searchProps?: ISearchProps<T>;\r\n  renderLeftIcon?: ReactNode;\r\n  useCMUIHelpExperience: IUseCMUIExperience;\r\n}\r\n\r\nexport interface IHeaderDropdownItem {\r\n  key: string;\r\n  text: string;\r\n  icon: string;\r\n}\r\n\r\nexport interface IHeaderItemProps {\r\n  item: IHeaderItem;\r\n  theme: ITheme;\r\n}\r\n\r\nexport interface IHeaderState {\r\n  title: string;\r\n  selectedItem?: IHeaderItem;\r\n  currentRoute: string;\r\n  announcedMessage?: string;\r\n  panelType?: PanelType;\r\n  isSearchBarActiveInNonRegularView: boolean;\r\n  selectedLanguage: string;\r\n}\r\n\r\nexport interface IHeaderStyles {\r\n  root: IStyle;\r\n  itemIcon: IStyle;\r\n  navigationLm: IStyle;\r\n  leftSection: IStyle;\r\n  rightSection?: IStyle;\r\n  logo: IStyle;\r\n  dropdownOption: IStyle;\r\n  navItem: IStyle;\r\n  textHeader: IStyle;\r\n  helpCenterIcon: IStyle;\r\n  moreInfoIcon: IStyle;\r\n  overflowIcon: IStyle;\r\n  overflowMenuWrapper: IStyle;\r\n  subComponentStyles: {\r\n    dropdown: IStyleFunctionOrObject<object, object>;\r\n    itemIdentity: IStyleFunctionOrObject<IPersonaStyleProps, IPersonaStyles>;\r\n  };\r\n  dot: IStyle;\r\n  defaultButtonWrapperStyle: IStyle;\r\n  defaultButtonStyle: IStyle;\r\n}\r\n\r\nexport interface IHeaderStyleProps {\r\n  theme: ITheme;\r\n  isTythonExperience: boolean;\r\n}\r\n","import { defineMessages } from 'react-intl';\r\n\r\nexport default defineMessages({\r\n  feedBackSuccessMessage: {\r\n    id: 'feedBackSuccessMessage',\r\n    defaultMessage: 'You’ve successfully submitted feedback',\r\n  },\r\n});\r\n","import { action } from 'satcheljs';\r\n\r\nexport const onFormSubmitted = action('onFormSubmitted', (hidePanel?: () => void) => ({ hidePanel }));\r\n","export enum FeedbackType {\r\n  Appreciation = 'Appreciation',\r\n  FeatureRequest = 'FeatureRequest',\r\n  BugReport = 'BugReport',\r\n  Others = 'Others',\r\n}\r\n","import { createStore } from 'satcheljs';\r\nimport { FeedbackType } from './schema/enums/FeedbackType';\r\nimport { IFeedbackPanelViewState } from './schema/IFeedbackPanelViewState';\r\n\r\nexport const getFeedbackPanelStore = createStore<IFeedbackPanelViewState>('FeedbackPanelState', {\r\n  active: {\r\n    type: FeedbackType.Appreciation,\r\n  },\r\n  errors: {},\r\n  isPanelOpen: false,\r\n  isContactMeChecked: false,\r\n});\r\n","import { IChoiceGroupOption } from '@fluentui/react';\r\nimport { mutatorAction } from 'satcheljs';\r\nimport { IStringDictionary } from '../../../../../../@data';\r\nimport { FeedbackType } from '../store/schema/enums/FeedbackType';\r\nimport { getFeedbackPanelStore } from '../store/store';\r\n\r\nexport const onFeedbackTypeChanged = mutatorAction('onFeedbackTypeChanged', (value?: IChoiceGroupOption) => {\r\n  getFeedbackPanelStore().active.type = value?.key as FeedbackType;\r\n});\r\n\r\nexport const onFeedbackTitleChanged = mutatorAction('onFeedbackTitleChanged', (title?: string) => {\r\n  getFeedbackPanelStore().active.title = title;\r\n});\r\n\r\nexport const onFeedbackDescriptionChanged = mutatorAction('onFeedbackDescriptionChanged', (description?: string) => {\r\n  getFeedbackPanelStore().active.description = description;\r\n});\r\n\r\nexport const onFeedbackEmailChanged = mutatorAction('onFeedbackEmailChanged', (email?: string) => {\r\n  getFeedbackPanelStore().active.email = email;\r\n});\r\n\r\nexport const onFeedbackPanelErrorChanged = mutatorAction('onFeedbackPanelErrorChanged', (values?: IStringDictionary) => {\r\n  getFeedbackPanelStore().errors = values || {};\r\n});\r\n\r\nexport const onFormCleared = mutatorAction('onFormCleared', () => {\r\n  getFeedbackPanelStore().active = {\r\n    type: FeedbackType.Appreciation,\r\n  };\r\n  getFeedbackPanelStore().isContactMeChecked = false;\r\n  getFeedbackPanelStore().errors = {};\r\n});\r\n\r\nexport const onFeedbackCheckboxChanged = mutatorAction('onFeedbackCheckboxChanged', (value: boolean) => {\r\n  getFeedbackPanelStore().isContactMeChecked = value;\r\n  if (!value) {\r\n    delete getFeedbackPanelStore().errors.email;\r\n  }\r\n});\r\n\r\nexport const removeEmail = mutatorAction('removeEmail', () => {\r\n  delete getFeedbackPanelStore().active.email;\r\n});\r\n","import { orchestrator } from 'satcheljs';\r\nimport {\r\n  NotificationLabel,\r\n  NotificationSeverity,\r\n  getAppStore,\r\n  onNotificationCardAdded,\r\n  onSavingChanged,\r\n  postEntity,\r\n  showErrorToastNotification,\r\n  showSuccessToastNotification,\r\n} from '../../../../../../@data';\r\nimport { Feedback } from '../../../../../../@data/store/schema/models/Feedback';\r\nimport notificationMessages from '../../../../../../NotificationsPanel.Types.messages';\r\nimport ToastMessages from '../../../../../../Toasts.messages';\r\nimport { validateSchema } from '../../../../../../utils';\r\nimport { onFormSubmitted } from '../actions';\r\nimport { onFeedbackPanelErrorChanged, onFormCleared } from '../mutatorActions';\r\nimport { feedbackPanelErrorModel } from '../store/schema/FeedbackPanelErrorModel';\r\nimport { getFeedbackPanelStore } from '../store/store';\r\n\r\norchestrator(onFormSubmitted, async (msg) => {\r\n  const { publisher, userContext } = getAppStore();\r\n  const { active } = getFeedbackPanelStore();\r\n\r\n  if (publisher) {\r\n    // check if we need to create body\r\n    const body: Feedback = {\r\n      ...active,\r\n      apiPath: undefined,\r\n      className: 'feedback',\r\n    };\r\n    try {\r\n      await validateSchema(feedbackPanelErrorModel(), active);\r\n      onFeedbackPanelErrorChanged();\r\n    } catch (e) {\r\n      onFeedbackPanelErrorChanged(e);\r\n      return;\r\n    }\r\n    onSavingChanged(true);\r\n    try {\r\n      await postEntity([publisher], Feedback, body, userContext);\r\n\r\n      showSuccessToastNotification({ textMessageDescriptor: ToastMessages.feedBackSuccessMessage });\r\n\r\n      onFormCleared();\r\n      msg.hidePanel?.();\r\n    } catch (e) {\r\n      showErrorToastNotification({ textMessageDescriptor: notificationMessages.FeedbackErrorMessageContent });\r\n      onNotificationCardAdded({\r\n        // tslint:disable-next-line: no-any\r\n        severity: NotificationSeverity.Error,\r\n        titleMessageDescriptor: notificationMessages.FeedbackErrorMessageTitle,\r\n        contentMessageDescriptor: notificationMessages.FeedbackErrorMessageContent,\r\n        notificationLabel: NotificationLabel.FeedbackErrorMessage,\r\n      });\r\n    } finally {\r\n      onSavingChanged(false);\r\n    }\r\n  } else {\r\n    showErrorToastNotification({ textMessageDescriptor: notificationMessages.FeedBackInvalidFormMessageContent });\r\n    onNotificationCardAdded({\r\n      // tslint:disable-next-line: no-any\r\n      severity: NotificationSeverity.Error,\r\n      titleMessageDescriptor: notificationMessages.FeedBackInvalidFormMessageTitle,\r\n      contentMessageDescriptor: notificationMessages.FeedBackInvalidFormMessageContent,\r\n      notificationLabel: NotificationLabel.FeedBackInvalidFormMessage,\r\n    });\r\n  }\r\n});\r\n","import { object, string } from 'yup';\r\nimport { getFeedbackPanelStore } from '../store';\r\nimport { IFeedbackPanelViewModel } from './IFeedbackPanelViewModel';\r\n\r\nexport function feedbackPanelErrorModel() {\r\n  return object<IFeedbackPanelViewModel>().shape({\r\n    title: string().trim().required(),\r\n    description: string().trim().required(),\r\n    email: getFeedbackPanelStore().isContactMeChecked ? string().trim().email().required() : string().trim().email(),\r\n  });\r\n}\r\n","import { defineMessages } from 'react-intl';\r\n\r\nexport default defineMessages({\r\n  feedbackThank: {\r\n    id: 'feedback.thank',\r\n    defaultMessage: 'Thank you for providing us with {appName} feedback.',\r\n  },\r\n  feedbackSupport: {\r\n    id: 'feedback.support',\r\n    defaultMessage: 'We’d love to learn about your experience with {appName}. If you have any questions, please reach out to ',\r\n  },\r\n  feedbackType: {\r\n    id: 'feedback.type',\r\n    defaultMessage: 'Type of feedback',\r\n  },\r\n  feedbackRate: {\r\n    id: 'feedback.rate',\r\n    defaultMessage: 'Rate your experience',\r\n  },\r\n  feedbackRequired: {\r\n    id: 'feedback.required',\r\n    defaultMessage: 'Required',\r\n  },\r\n  feedbackSend: {\r\n    id: 'feedback.send',\r\n    defaultMessage: 'Send Feedback',\r\n  },\r\n  feedbackTitle: {\r\n    id: 'feedback.title',\r\n    defaultMessage: 'Title',\r\n  },\r\n  feedbackTitlePlaceholder: {\r\n    id: 'feedback.titlePlaceholder',\r\n    defaultMessage: 'Add a title for your feedback',\r\n  },\r\n  feedbackTellUsMore: {\r\n    id: 'feedback.tellUsMore',\r\n    defaultMessage: 'Tell us more',\r\n  },\r\n  feedbackTellUsMorePlaceholder: {\r\n    id: 'feedback.tellUsMorePlaceholder',\r\n    defaultMessage: 'Please don’t include any confidential or personal information in your feedback.',\r\n  },\r\n  feedbackAllowContact: {\r\n    id: 'feedback.allowContact',\r\n    defaultMessage: 'Allow us to follow up with you about your feedback.',\r\n  },\r\n  feedbackAllowContactPlaceholder: {\r\n    id: 'feedback.allowContactPlaceholder',\r\n    defaultMessage: 'Type your email address',\r\n  },\r\n  feedbackContactSupport: {\r\n    id: 'feedback.contactSupport',\r\n    defaultMessage: 'support.',\r\n  },\r\n  feedbackPrivacyStatement: {\r\n    id: 'feedback.privacyStatement',\r\n    defaultMessage:\r\n      'To improve our service, we may collect information about your account or device. For more details, please refer to the ',\r\n  },\r\n  feedbackMPS: {\r\n    id: 'feedback.microsoftPrivacyStatement',\r\n    defaultMessage: 'Microsoft privacy statement.',\r\n  },\r\n  feedbackCharacterCounter: {\r\n    id: 'feedback.characterCounter',\r\n    defaultMessage: '{currentCounter}/{limit} characters',\r\n  },\r\n  feedbackTypeAppreciation: {\r\n    id: 'feedback.appreciation',\r\n    defaultMessage: 'Appreciation',\r\n  },\r\n  feedbackTypeFeatureRequest: {\r\n    id: 'feedback.featureRequest',\r\n    defaultMessage: 'Feature request',\r\n  },\r\n  feedbackTypeBugReport: {\r\n    id: 'feedback.bugReport',\r\n    defaultMessage: 'Bug report',\r\n  },\r\n  feedbackTypeOther: {\r\n    id: 'feedback.other',\r\n    defaultMessage: 'Other',\r\n  },\r\n  feedbackDataCollection: {\r\n    id: 'feedback.dataCollection',\r\n    defaultMessage: `To request deletion of your submitted data, please contact our {supportTeamPlaceholder} with the subject \"Delete feedback data\".`,\r\n  },\r\n  supportTeamPlaceholder: {\r\n    id: 'feedback.dataCollection.supportTeamPlaceholder',\r\n    defaultMessage: 'support team',\r\n  },\r\n  deleteFeedbackDataFormSubject: {\r\n    id: 'feedback.dataCollection.form.subject.deleteFeedbackData',\r\n    defaultMessage: 'Delete feedback data',\r\n  },\r\n});\r\n","import { getTheme, mergeStyleSets } from '@fluentui/react';\r\nimport { IPubCenterFonts, IPubcenterPalette, IPubcenterSpacing, IPubcenterTheme } from '../../../../../theme';\r\nimport { IFeedbackPanelClassNames } from './FeedbackPanel.types';\r\n\r\nexport const getClassNames = (): IFeedbackPanelClassNames => {\r\n  const theme = (getTheme() as unknown) as IPubcenterTheme;\r\n  const spacing = theme.spacing as IPubcenterSpacing;\r\n  const palette = theme.palette as IPubcenterPalette;\r\n  const { size12, size16 } = theme.fonts as IPubCenterFonts;\r\n  const WIDTH = '456px';\r\n  const OPTION_WIDTH = '111px';\r\n  return mergeStyleSets({\r\n    root: {\r\n      position: 'relative',\r\n      width: WIDTH,\r\n      maxWidth: WIDTH,\r\n    },\r\n    titleStyle: {},\r\n    descriptionStyle: {},\r\n    checkboxStyle: {},\r\n    emailTextBoxStyle: {\r\n      marginTop: spacing.size8,\r\n    },\r\n    buttonSection: {\r\n      display: 'flex',\r\n      gap: spacing.size8\r\n    },\r\n    button: {\r\n      marginRight: spacing.size2,\r\n    },\r\n    characterCounterStyle: {\r\n      margin: '0',\r\n      textAlign: 'right',\r\n      size: size12,\r\n      lineHeight: size16,\r\n      color: palette.neutralSecondary,\r\n    },\r\n    links: {\r\n      color: palette.themeDarkAlt,\r\n      lineHeight: spacing.size22,\r\n      cursor: 'pointer',\r\n      textDecoration: 'underline',\r\n    },\r\n    subComponentStyles: {\r\n      choiceGroup: {\r\n        flexContainer: {\r\n          display: 'flex',\r\n          flexFlow: 'initial',\r\n          alignItems: 'center',\r\n          gap: spacing.size2,\r\n          width: WIDTH,\r\n        },\r\n      },\r\n      choiceGroupOption: {\r\n        root: {},\r\n        choiceFieldWrapper: {\r\n          width: OPTION_WIDTH,\r\n        },\r\n        innerField: {\r\n          width: OPTION_WIDTH,\r\n        },\r\n        labelWrapper: {\r\n          width: OPTION_WIDTH,\r\n          maxWidth: OPTION_WIDTH,\r\n        },\r\n        field: {\r\n          width: OPTION_WIDTH,\r\n        },\r\n      },\r\n    },\r\n  });\r\n};\r\n","import {\r\n  Checkbox,\r\n  ChoiceGroup,\r\n  DefaultButton,\r\n  IChoiceGroupOption,\r\n  IPanelProps,\r\n  Link,\r\n  mergeStyleSets,\r\n  PrimaryButton,\r\n  TextField,\r\n} from '@fluentui/react';\r\nimport { observer } from 'mobx-react';\r\nimport * as React from 'react';\r\nimport { FormattedMessage } from 'react-intl';\r\nimport { Log } from '../../../../../logging/src';\r\nimport { isTythonSelfServeUser } from '../../../../@data';\r\nimport AppMessages from '../../../../App.messages';\r\nimport { FormItem } from '../../../../components/Form';\r\nimport { APP_NAME_NEW, APP_NAME_PUBCENTER, PRIVACY_STATEMENT, SUPPORT_EMAIL } from '../../../../constants/AppConstants';\r\nimport { connectToSupportTeam } from '../../../../pages/ad-management/Home/components/ResourcesSection/ResourcesSection';\r\nimport { injectIntlAndObserver } from '../../../../utils';\r\nimport { getFeedbackPanelStore } from './@data';\r\nimport { onFormSubmitted } from './@data/actions';\r\nimport {\r\n  onFeedbackCheckboxChanged,\r\n  onFeedbackDescriptionChanged,\r\n  onFeedbackEmailChanged,\r\n  onFeedbackTitleChanged,\r\n  onFeedbackTypeChanged,\r\n  onFormCleared,\r\n  removeEmail,\r\n} from './@data/mutatorActions';\r\nimport { FeedbackType } from './@data/store/schema/enums/FeedbackType';\r\nimport messages from './FeedbackPanel.messages';\r\nimport { getClassNames } from './FeedbackPanel.styles';\r\nimport { IFeedbackPanelProps } from './FeedbackPanel.types';\r\n\r\nexport const renderFooterContent = (panelProps: IPanelProps) => <FeedbackPanelFooterButtons {...panelProps} />;\r\n\r\nexport const FeedbackPanelFooterButtons = observer(function (panelProps: IPanelProps) {\r\n  const { button, buttonSection } = mergeStyleSets(getClassNames());\r\n  const { active, isContactMeChecked } = getFeedbackPanelStore();\r\n  const { title, description, email } = active;\r\n\r\n  const onCancelClicked = () => {\r\n    panelProps.onDismiss?.();\r\n    onFormCleared();\r\n  };\r\n\r\n  const onSubmit = (): void => {\r\n    if (!isContactMeChecked && active.email) {\r\n      // remove email from active since it wont be validated because isContactMeChecked is false, to not to be sent to the BE\r\n      removeEmail();\r\n    }\r\n    onFormSubmitted(panelProps.onDismiss);\r\n    Log.debug('Feedback form submitted');\r\n  };\r\n\r\n  return (\r\n    <div className={buttonSection}>\r\n      <PrimaryButton className={button} onClick={() => onSubmit()} disabled={!title || !description || (isContactMeChecked && !email)}>\r\n        <FormattedMessage {...AppMessages.submit} />\r\n      </PrimaryButton>\r\n      <DefaultButton onClick={() => onCancelClicked()}>\r\n        <FormattedMessage {...AppMessages.cancel} />\r\n      </DefaultButton>\r\n    </div>\r\n  );\r\n});\r\n\r\nexport const FeedbackPanel = injectIntlAndObserver<IFeedbackPanelProps>(function FeedbackPanelComponent(\r\n  props: IFeedbackPanelProps\r\n): JSX.Element | null {\r\n  const { formatMessage } = props.intl;\r\n  const {\r\n    root,\r\n    titleStyle,\r\n    descriptionStyle,\r\n    characterCounterStyle,\r\n    checkboxStyle,\r\n    emailTextBoxStyle,\r\n    links,\r\n    subComponentStyles,\r\n  } = mergeStyleSets(getClassNames());\r\n  const store = getFeedbackPanelStore();\r\n  const TITLE_LIMIT = 250;\r\n  const DESCRIPTION_LIMIT = 2000;\r\n  const FORM_ITEM_WIDTH = 456;\r\n\r\n  const feedbackTypes: IChoiceGroupOption[] = [\r\n    {\r\n      key: FeedbackType.Appreciation,\r\n      text: formatMessage(messages.feedbackTypeAppreciation),\r\n      iconProps: { iconName: 'Emoji2' },\r\n      styles: subComponentStyles.choiceGroupOption,\r\n    },\r\n    {\r\n      key: FeedbackType.FeatureRequest,\r\n      text: formatMessage(messages.feedbackTypeFeatureRequest),\r\n      iconProps: { iconName: 'ClipboardList' },\r\n      styles: subComponentStyles.choiceGroupOption,\r\n    },\r\n    {\r\n      key: FeedbackType.BugReport,\r\n      text: formatMessage(messages.feedbackTypeBugReport),\r\n      iconProps: { iconName: 'Bug' },\r\n      styles: subComponentStyles.choiceGroupOption,\r\n    },\r\n    {\r\n      key: FeedbackType.Others,\r\n      text: formatMessage(messages.feedbackTypeOther),\r\n      iconProps: { iconName: 'CommentAdd' },\r\n      styles: subComponentStyles.choiceGroupOption,\r\n    },\r\n  ];\r\n\r\n  const checkedStateChanged = () => {\r\n    onFeedbackCheckboxChanged(!store.isContactMeChecked);\r\n  };\r\n\r\n  return (\r\n    <div className={root}>\r\n      <p>\r\n        {formatMessage(messages.feedbackSupport, { appName: isTythonSelfServeUser() ? APP_NAME_NEW : APP_NAME_PUBCENTER })}\r\n        <Link\r\n          className={links}\r\n          onClick={isTythonSelfServeUser() ? () => connectToSupportTeam() : () => null}\r\n          href={isTythonSelfServeUser() ? undefined : `mailto:${SUPPORT_EMAIL}`}\r\n          aria-label={formatMessage(messages.feedbackContactSupport)}\r\n        >\r\n          {formatMessage(messages.feedbackContactSupport)}\r\n        </Link>\r\n      </p>\r\n\r\n      <FormItem formWidth={FORM_ITEM_WIDTH}>\r\n        <ChoiceGroup\r\n          label={formatMessage(messages.feedbackType)}\r\n          required\r\n          options={feedbackTypes}\r\n          onChange={(_, value) => onFeedbackTypeChanged(value)}\r\n          selectedKey={store.active.type || FeedbackType.Appreciation}\r\n          styles={subComponentStyles.choiceGroup}\r\n        />\r\n      </FormItem>\r\n\r\n      <div className={titleStyle}>\r\n        <FormItem formWidth={FORM_ITEM_WIDTH}>\r\n          <TextField\r\n            label={formatMessage(messages.feedbackTitle)}\r\n            required\r\n            placeholder={formatMessage(messages.feedbackTitlePlaceholder)}\r\n            value={store.active.title || ''}\r\n            maxLength={TITLE_LIMIT}\r\n            onChange={(ev, value) => {\r\n              onFeedbackTitleChanged(value);\r\n            }}\r\n            errorMessage={store.errors.title}\r\n          />\r\n          <p id=\"titleCounterLabel\" className={characterCounterStyle}>\r\n            {formatMessage(messages.feedbackCharacterCounter, {\r\n              currentCounter: store.active.title ? store.active.title.length : 0,\r\n              limit: TITLE_LIMIT,\r\n            })}\r\n          </p>\r\n        </FormItem>\r\n      </div>\r\n      <div className={descriptionStyle}>\r\n        <FormItem formWidth={FORM_ITEM_WIDTH}>\r\n          <TextField\r\n            label={formatMessage(messages.feedbackTellUsMore)}\r\n            required\r\n            multiline\r\n            rows={4}\r\n            maxLength={DESCRIPTION_LIMIT}\r\n            placeholder={formatMessage(messages.feedbackTellUsMorePlaceholder)}\r\n            value={store.active.description || ''}\r\n            onChange={(ev, value) => {\r\n              onFeedbackDescriptionChanged(value);\r\n            }}\r\n            errorMessage={store.errors.description}\r\n          />\r\n          <div>\r\n            <p id=\"descriptionCounterLabel\" className={characterCounterStyle}>\r\n              {formatMessage(messages.feedbackCharacterCounter, {\r\n                currentCounter: store.active.description ? store.active.description.length : 0,\r\n                limit: DESCRIPTION_LIMIT,\r\n              })}\r\n            </p>\r\n          </div>\r\n        </FormItem>\r\n      </div>\r\n      <div className={checkboxStyle}>\r\n        <Checkbox label={formatMessage(messages.feedbackAllowContact)} checked={store.isContactMeChecked} onChange={checkedStateChanged} />\r\n        {store.isContactMeChecked && (\r\n          <TextField\r\n            className={emailTextBoxStyle}\r\n            aria-label={formatMessage(messages.feedbackAllowContact)}\r\n            placeholder={formatMessage(messages.feedbackAllowContactPlaceholder)}\r\n            onChange={(ev, value) => onFeedbackEmailChanged(value)}\r\n            errorMessage={store.errors.email}\r\n            value={store.active.email}\r\n          />\r\n        )}\r\n      </div>\r\n      <div>\r\n        <p>\r\n          {formatMessage(messages.feedbackPrivacyStatement)}\r\n          <a\r\n            href={PRIVACY_STATEMENT}\r\n            target=\"_blank\"\r\n            className={links}\r\n            aria-label={formatMessage(messages.feedbackMPS)}\r\n            rel=\"noopener noreferrer\"\r\n          >\r\n            {formatMessage(messages.feedbackMPS)}\r\n          </a>\r\n        </p>\r\n      </div>\r\n      <div>\r\n        <FormattedMessage\r\n          {...messages.feedbackDataCollection}\r\n          values={{\r\n            supportTeamPlaceholder: (\r\n              <Link\r\n                className={links}\r\n                onClick={\r\n                  isTythonSelfServeUser()\r\n                    ? () => connectToSupportTeam(`subject=${formatMessage(messages.deleteFeedbackDataFormSubject)}`)\r\n                    : () => null\r\n                }\r\n                href={isTythonSelfServeUser() ? undefined : `mailto:${SUPPORT_EMAIL}`}\r\n              >\r\n                {formatMessage(messages.supportTeamPlaceholder)}\r\n              </Link>\r\n            ),\r\n          }}\r\n        />\r\n      </div>\r\n    </div>\r\n  );\r\n});\r\n","import { defineMessages } from 'react-intl';\r\n\r\nexport default defineMessages({\r\n  helpNotImplemented: {\r\n    id: 'help.notImplemented',\r\n    defaultMessage: 'Help Not Implemented Yet'\r\n  },\r\n});","import * as React from 'react';\r\nimport { injectIntl, InjectedIntlProps } from 'react-intl';\r\nimport messages from './HelpPanel.messages';\r\n\r\nexport const HelpPanel = injectIntl(class extends React.Component<InjectedIntlProps>  {\r\n  public render(): JSX.Element {\r\n    const { formatMessage } = this.props.intl;\r\n    return (\r\n      <p>{formatMessage(messages.helpNotImplemented)}</p>\r\n    );\r\n  }\r\n});\r\n","import { BaseComponent, Icon, PrimaryButton, Stack, classNamesFunction } from '@fluentui/react';\r\nimport * as React from 'react';\r\nimport { Link } from 'react-router-dom';\r\nimport { NotificationSeverity } from '../../@data';\r\nimport { INotificationCardProps, INotificationCardStyleProps, INotificationCardStyles } from './NotificationCard.types';\r\n\r\nconst getClassNames = classNamesFunction<INotificationCardStyleProps, INotificationCardStyles>();\r\n\r\nexport class NotificationCardBase extends BaseComponent<INotificationCardProps> {\r\n  public render(): JSX.Element {\r\n    const {\r\n      styles,\r\n      theme,\r\n      title,\r\n      content,\r\n      severity,\r\n      onDismiss,\r\n      onPrimaryActionClicked,\r\n      onSecondaryActionClicked,\r\n      timestamp,\r\n      primaryActionText,\r\n      primaryActionLink,\r\n      dismissLabel,\r\n      yesterdayLabel,\r\n      twoDaysAgoLabel,\r\n      threeDaysAgoLabel,\r\n      primaryIsExternal,\r\n      secondaryActionText,\r\n      secondaryActionLink,\r\n      secondaryIsExternal\r\n    } = this.props;\r\n    const classNames = getClassNames(styles, { theme: theme!, severity: severity });\r\n\r\n    const formattedTime = this.getFormattedDate(new Date(timestamp), yesterdayLabel, twoDaysAgoLabel, threeDaysAgoLabel);\r\n\r\n    return (\r\n      <div className={classNames.cardContainerStyle}>\r\n        <Stack>\r\n          <div className={classNames.headerRowStyle}>\r\n            <Stack horizontal horizontalAlign=\"space-between\">\r\n              <div className={classNames.leftContainerStyle}>\r\n                <Icon iconName={this.getIconName(severity)} className={classNames.iconStyle} />\r\n              </div>\r\n\r\n              <div className={classNames.rightContainerStyle}>\r\n                <Stack>\r\n                  <div className={classNames.titleStyle}>{title}</div>\r\n                  <div className={classNames.contentStyle}>{content}</div>\r\n                  <div className={classNames.timestampStyle}>{formattedTime}</div>\r\n                </Stack>\r\n              </div>\r\n            </Stack>\r\n          </div>\r\n          <Stack horizontal>\r\n            {primaryIsExternal && (\r\n              <PrimaryButton className={classNames.buttonStyle} onClick={onPrimaryActionClicked}>\r\n                <span>{primaryActionText}</span>\r\n              </PrimaryButton>\r\n            )}\r\n            {primaryActionLink && !primaryIsExternal && (\r\n              <Link to={primaryActionLink} className={classNames.linkStyle} onClick={onPrimaryActionClicked}>\r\n                <span>{primaryActionText}</span>\r\n              </Link>\r\n            )}\r\n            {secondaryIsExternal && (\r\n              <PrimaryButton className={classNames.buttonStyle} onClick={onSecondaryActionClicked}>\r\n                <span>{secondaryActionText}</span>\r\n              </PrimaryButton>\r\n            )}\r\n             {secondaryActionLink && !secondaryIsExternal && (\r\n              <Link to={secondaryActionLink} className={classNames.linkStyle} onClick={onSecondaryActionClicked}>\r\n                <span>{secondaryActionText}</span>\r\n              </Link>\r\n            )}\r\n\r\n            <PrimaryButton onClick={onDismiss} className={classNames.buttonStyle}>\r\n              <span>{dismissLabel}</span>\r\n            </PrimaryButton>\r\n          </Stack>\r\n        </Stack>\r\n      </div>\r\n    );\r\n  }\r\n\r\n  private getIconName = (severity: NotificationSeverity) => {\r\n    switch (severity) {\r\n      case NotificationSeverity.Informational:\r\n        return 'Info';\r\n      case NotificationSeverity.Warning:\r\n        return 'Warning';\r\n      case NotificationSeverity.Critical:\r\n        return 'ErrorBadge';\r\n      case NotificationSeverity.Announcements:\r\n        return 'Announcements';\r\n      case NotificationSeverity.Error:\r\n        return 'StatusErrorFull';\r\n    }\r\n  };\r\n\r\n  private isSameDay = (date1: Date, date2: Date) => {\r\n    return date1.getFullYear() === date2.getFullYear() && date1.getMonth() === date2.getMonth() && date1.getDate() === date2.getDate();\r\n  };\r\n\r\n  private getPreviousDay = (date: Date, numDays: number) => {\r\n    const previousDay = new Date(date);\r\n    previousDay.setDate(previousDay.getDate() - numDays);\r\n    return previousDay;\r\n  };\r\n\r\n  private getFormattedDate = (date: Date, yesterdayLabel: string, twoDaysAgoLabel: string, threeDaysAgoLabel: string) => {\r\n    const today = new Date();\r\n    const yesterday = new Date(today);\r\n    yesterday.setDate(yesterday.getDate() - 1);\r\n\r\n    if (this.isSameDay(date, today)) {\r\n      return date.toLocaleString([], {\r\n        year: 'numeric',\r\n        month: '2-digit',\r\n        day: '2-digit',\r\n        hour: '2-digit',\r\n        minute: '2-digit',\r\n      });\r\n    } else if (this.isSameDay(date, yesterday)) {\r\n      return yesterdayLabel;\r\n    } else if (this.isSameDay(date, this.getPreviousDay(today, 2))) {\r\n      return twoDaysAgoLabel;\r\n    } else if (this.isSameDay(date, this.getPreviousDay(today, 3))) {\r\n      return threeDaysAgoLabel;\r\n    } else {\r\n      return date.toLocaleString([], { year: 'numeric', month: '2-digit', day: '2-digit' });\r\n    }\r\n  };\r\n}\r\n","import { BreakPoints, IPubCenterFonts, IPubcenterTheme } from '../../../theme';\r\nimport { NotificationSeverity } from '../../@data';\r\nimport { flexWithJustifyBetween } from '../../utils/GlobalStyleUtils';\r\nimport { INotificationCardStyleProps, INotificationCardStyles } from './NotificationCard.types';\r\n\r\nexport const getStyles = (props: INotificationCardStyleProps): INotificationCardStyles => {\r\n  const theme = (props.theme as unknown) as IPubcenterTheme;\r\n  const { size14 } = theme.fonts as IPubCenterFonts;\r\n  const severity = props.severity;\r\n  const { spacing } = theme;\r\n  const { ResponsiveSmall } = BreakPoints;\r\n\r\n  return {\r\n    root: {},\r\n    cardContainerStyle: {\r\n      display: 'flex',\r\n      boxShadow: '0px 0.3px 0.9px rgba(0, 0, 0, 0.1), 0px 1.6px 3.6px rgba(0, 0, 0, 0.13)',\r\n      borderRadius: 2,\r\n      background: '#f9f9f9',\r\n      [ResponsiveSmall]: {\r\n        flexWrap: 'wrap',\r\n      },\r\n      marginBottom: spacing.size8,\r\n      padding: spacing.size12,\r\n    },\r\n    iconStyle: {\r\n      color: severity === NotificationSeverity.Critical ? '#A80000' : severity === NotificationSeverity.Warning ? '#D83B01' : '#797775',\r\n    },\r\n    headerRowStyle: {\r\n      ...flexWithJustifyBetween,\r\n      borderBottom: `1px solid ${theme.palette.neutralQuaternaryAlt}`,\r\n    },\r\n    leftContainerStyle: {},\r\n    contentStyle: {\r\n      marginTop: spacing.size4,\r\n      marginBottom: spacing.size4,\r\n    },\r\n    titleStyle: {\r\n      fontWeight: '600',\r\n      lineHeight: '14px',\r\n    },\r\n    rightContainerStyle: {\r\n      paddingLeft: spacing.size8,\r\n    },\r\n    buttonStyle: {\r\n      ...size14,\r\n      color: theme.palette.highContrastPrimary,\r\n      paddingTop: spacing.size8,\r\n      textDecoration: 'none',\r\n      paddingRight: '0px',\r\n      border: 'none',\r\n      background: 'transparent',\r\n      '&:hover': {\r\n        background: 'transparent',\r\n        border: 'none',\r\n        color: theme.palette.highContrastPrimary,\r\n        textDecoration: 'none',\r\n      },\r\n      '&:active': {\r\n        background: 'transparent',\r\n        border: 'none',\r\n        color: theme.palette.highContrastPrimary,\r\n        textDecoration: 'none',\r\n      },\r\n    },\r\n    linkStyle: {\r\n      ...size14,\r\n      paddingLeft: spacing.size20,\r\n      color: theme.palette.themePrimary,\r\n      textDecoration: 'none',\r\n      paddingTop: spacing.size10,\r\n    },\r\n    timestampStyle: {\r\n      marginTop: spacing.size12,\r\n      marginBottom: spacing.size12,\r\n      color: '#727272',\r\n    },\r\n    subComponentStyles: {\r\n      messageCard: {\r\n        root: {\r\n          marginBottom: theme.spacing.s1,\r\n          selectors: {\r\n            '&:last-child': {\r\n              marginBottom: 0,\r\n            },\r\n          },\r\n        },\r\n      },\r\n    },\r\n  };\r\n};\r\n","import { styled } from '@fluentui/react';\r\nimport { NotificationCardBase } from './NotificationCard.base';\r\nimport { getStyles } from './NotificationCard.styles';\r\nimport { INotificationCardProps, INotificationCardStyleProps, INotificationCardStyles } from './NotificationCard.types';\r\n\r\nexport const NotificationCard = styled<INotificationCardProps, INotificationCardStyleProps, INotificationCardStyles>(\r\n  NotificationCardBase,\r\n  getStyles,\r\n  undefined,\r\n  {\r\n    scope: 'NotificationCard',\r\n  }\r\n);\r\n","import { defineMessages } from 'react-intl';\r\n\r\nexport default defineMessages({\r\n  notificationsNotImplements: {\r\n    id: 'notifications.notImplemented',\r\n    defaultMessage: 'Notifications Not Implemented Yet',\r\n  },\r\n  dismissAll: {\r\n    id: 'notifications.dismissAll',\r\n    defaultMessage: 'Dismiss All',\r\n  },\r\n  dismiss: {\r\n    id: 'notifications.dismiss',\r\n    defaultMessage: 'Dismiss',\r\n  },\r\n  yesterday: {\r\n    id: 'notifications.yesterday',\r\n    defaultMessage: 'Yesterday',\r\n  },\r\n  threeDaysAgo: {\r\n    id: 'notifications.threeDaysAgo',\r\n    defaultMessage: '3 days ago',\r\n  },\r\n  twoDaysAgo: {\r\n    id: 'notifications.twoDaysAgo',\r\n    defaultMessage: '2 days ago',\r\n  },\r\n  allSet: {\r\n    id: 'notifications.allSet',\r\n    defaultMessage: \"You'\\rre all up-to-date! No new notifications at the moment.\",\r\n  },\r\n  activityLogsHint: {\r\n    id: 'notifications.activityLogsHint',\r\n    defaultMessage: 'More events in the activity logs',\r\n  },\r\n  critical: {\r\n    id: 'notifications.critical',\r\n    defaultMessage: 'Critical',\r\n  },\r\n  warning: {\r\n    id: 'notifications.warning',\r\n    defaultMessage: 'Warning',\r\n  },\r\n  informational: {\r\n    id: 'notifications.informational',\r\n    defaultMessage: 'Informational',\r\n  },\r\n  error: {\r\n    id: 'notifications.error',\r\n    defaultMessage: 'Error',\r\n  },\r\n});\r\n","import { getTheme, mergeStyleSets } from '@fluentui/react';\r\nimport { IPubCenterFonts, IPubcenterSpacing, IPubcenterTheme } from '../../../../../theme';\r\nimport { INotificationsPanelClassNames } from './NotificationsPanel.types';\r\n\r\nexport const getClassNames = (): INotificationsPanelClassNames => {\r\n  const theme = (getTheme() as unknown) as IPubcenterTheme;\r\n  const spacing = theme.spacing as IPubcenterSpacing;\r\n  const WIDTH = '456px';\r\n  const { size16 } = theme.fonts as IPubCenterFonts;\r\n  return mergeStyleSets({\r\n    root: {\r\n      position: 'relative',\r\n      width: WIDTH,\r\n      maxWidth: WIDTH,\r\n    },\r\n    dismissAll: {\r\n      marginRight: spacing.size2,\r\n    },\r\n    emptySection: {\r\n      textAlign: 'center',\r\n      flexDirection: 'column',\r\n    },\r\n    textContent: {\r\n      marginTop: spacing.size8,\r\n      marginBottom: '0px',\r\n      fontSize: size16.fontSize,\r\n    },\r\n    panelParent: {\r\n      height: '100%',\r\n      display: 'flex',\r\n      justifyContent: 'center',\r\n      alignItems: 'center',\r\n    },\r\n    img: {\r\n      width: '160px',\r\n      height: '160px',\r\n      marginBottom: spacing.size8,\r\n    },\r\n  });\r\n};\r\n","import { IPanelProps, List, PrimaryButton, mergeStyleSets } from '@fluentui/react';\r\nimport { observer } from 'mobx-react';\r\nimport * as React from 'react';\r\nimport { FormattedMessage, InjectedIntlProps, MessageValue } from 'react-intl';\r\nimport {\r\n  NotificationLabel,\r\n  NotificationSeverity,\r\n  getAppStore,\r\n  onDismissAllNotifications,\r\n  onDismissNotification,\r\n  onNotificationPanelClosed,\r\n  primaryExternalNotificationLabels,\r\n} from '../../../../@data';\r\nimport notificationMessages from '../../../../NotificationsPanel.Types.messages';\r\nimport { FormSection } from '../../../../components/Form';\r\nimport { INotificationCardItem, NotificationCard } from '../../../../components/NotificationCard';\r\nimport { onResendClarityLink } from '../../../../pages/ad-management/Property/Create/__data__/orchestrators';\r\nimport { setNotificationPanelTriggered } from '../../../../pages/terms-and-conditions/@data';\r\nimport { injectIntlAndObserver } from '../../../../utils';\r\nimport messages from './NotificationsPanel.messages';\r\nimport { getClassNames } from './NotificationsPanel.styles';\r\nimport emptyNotifications from './resources/empty.svg';\r\n\r\nexport const renderNotificationFooterContent = (panelProps: IPanelProps) => <NotificationPanelFooterButtons {...panelProps} />;\r\n\r\nexport const NotificationPanelFooterButtons = observer(function (panelProps: IPanelProps) {\r\n  const { dismissAll } = mergeStyleSets(getClassNames());\r\n  const { panelNotifications, notificationPanelCollapsed } = getAppStore();\r\n  if (notificationPanelCollapsed) {\r\n    panelProps.onDismiss?.();\r\n    onNotificationPanelClosed(false);\r\n  }\r\n\r\n  const onDismissAll = (): void => {\r\n    onDismissAllNotifications();\r\n  };\r\n\r\n  return (\r\n    <div>\r\n      {panelNotifications && panelNotifications.length > 0 && (\r\n        <div>\r\n          <PrimaryButton className={dismissAll} onClick={() => onDismissAll()}>\r\n            <FormattedMessage {...messages.dismissAll} />\r\n          </PrimaryButton>\r\n        </div>\r\n      )}\r\n    </div>\r\n  );\r\n});\r\n\r\nexport const NotificationsPanel = injectIntlAndObserver(\r\n  class extends React.Component<InjectedIntlProps> {\r\n    public render(): JSX.Element {\r\n      const { formatMessage } = this.props.intl;\r\n      const { emptySection, panelParent, textContent, img } = mergeStyleSets(getClassNames());\r\n      const { panelNotifications } = getAppStore();\r\n      const getFormattedMessage = (key: string, fallback: string | undefined, values?: Record<string, MessageValue>) => {\r\n        const message = notificationMessages[key];\r\n        if (message) {\r\n          return formatMessage(message, values);\r\n        }\r\n        return fallback;\r\n      };\r\n      const onRenderNotificationCard = (item: INotificationCardItem, index: number): JSX.Element => {\r\n        return (\r\n          <NotificationCard\r\n            title={\r\n              item.notificationLabel\r\n                ? getFormattedMessage(item.notificationLabel + 'Title', item.title) ?? ''\r\n                : item.title\r\n                ? item.title\r\n                : item.titleMessageDescriptor\r\n                ? formatMessage(item.titleMessageDescriptor)\r\n                : ''\r\n            }\r\n            severity={item.severity}\r\n            timestamp={item.timestamp!}\r\n            content={\r\n              item.notificationLabel\r\n                ? getFormattedMessage(item.notificationLabel + 'Content', item.content, item.intlContentMessageValues)\r\n                : item.content\r\n                ? item.content\r\n                : item.contentMessageDescriptor\r\n                ? formatMessage(item.contentMessageDescriptor, item.intlContentMessageValues)\r\n                : ''\r\n            }\r\n            dismissLabel={formatMessage(messages.dismiss)}\r\n            onDismiss={() => this._onDismiss(item)}\r\n            yesterdayLabel={formatMessage(messages.yesterday)}\r\n            threeDaysAgoLabel={formatMessage(messages.threeDaysAgo)}\r\n            twoDaysAgoLabel={formatMessage(messages.twoDaysAgo)}\r\n            primaryActionLink={item.primaryActionLink}\r\n            primaryActionText={\r\n              item.primaryActionTextMessageDescriptor\r\n                ? formatMessage(item.primaryActionTextMessageDescriptor)\r\n                : item.notificationLabel\r\n                ? getFormattedMessage(item.notificationLabel + 'PrimaryActionLabel', item.primaryActionText)\r\n                : item.primaryActionText\r\n            }\r\n            secondaryActionLink={item.secondaryActionLink}\r\n            secondaryActionText={\r\n              item.notificationLabel\r\n                ? getFormattedMessage(item.notificationLabel + 'SecondaryActionLabel', item.secondaryActionText)\r\n                : item.secondaryActionText\r\n            }\r\n            onPrimaryActionClicked={() => this._onPrimaryActionClicked(item)}\r\n            onSecondaryActionClicked={() => this._onSecondaryActionClicked(item)}\r\n            primaryIsExternal={this._isPrimaryExternal(item)}\r\n            secondaryIsExternal={item.secondaryActionText !== undefined}\r\n          />\r\n        );\r\n      };\r\n\r\n      const criticalNotifications =\r\n        panelNotifications && panelNotifications.filter((notification) => notification.severity === NotificationSeverity.Critical);\r\n      const warningNotifications =\r\n        panelNotifications && panelNotifications.filter((notification) => notification.severity === NotificationSeverity.Warning);\r\n      const infoNotifications =\r\n        panelNotifications && panelNotifications.filter((notification) => notification.severity === NotificationSeverity.Informational);\r\n      const errorNotifications =\r\n        panelNotifications && panelNotifications.filter((notification) => notification.severity === NotificationSeverity.Error);\r\n\r\n      criticalNotifications?.sort((a, b) => new Date(b.timestamp!).getTime() - new Date(a.timestamp!).getTime());\r\n      warningNotifications?.sort((a, b) => new Date(b.timestamp!).getTime() - new Date(a.timestamp!).getTime());\r\n      infoNotifications?.sort((a, b) => new Date(b.timestamp!).getTime() - new Date(a.timestamp!).getTime());\r\n      errorNotifications?.sort((a, b) => new Date(b.timestamp!).getTime() - new Date(a.timestamp!).getTime());\r\n\r\n      return (\r\n        <div className={panelNotifications?.length === 0 ? panelParent : ''}>\r\n          {panelNotifications?.length === 0 && (\r\n            <div className={emptySection}>\r\n              <img className={img} src={emptyNotifications} alt={emptyNotifications} />\r\n              <p className={textContent}>{formatMessage(messages.allSet)}</p>\r\n            </div>\r\n          )}\r\n          {criticalNotifications && criticalNotifications.length > 0 && (\r\n            <div>\r\n              <FormSection\r\n                title={formatMessage(messages.critical) + ' (' + criticalNotifications.length + ')'}\r\n                formWidth={412}\r\n                rightChevron\r\n                expanded={true}\r\n              >\r\n                <List items={Object.values(criticalNotifications)} onRenderCell={onRenderNotificationCard} />\r\n              </FormSection>\r\n            </div>\r\n          )}\r\n\r\n          {warningNotifications && warningNotifications.length > 0 && (\r\n            <div>\r\n              <FormSection\r\n                title={formatMessage(messages.warning) + ' (' + warningNotifications.length + ')'}\r\n                formWidth={412}\r\n                rightChevron\r\n                expanded={true}\r\n              >\r\n                <List items={Object.values(warningNotifications)} onRenderCell={onRenderNotificationCard} />\r\n              </FormSection>\r\n            </div>\r\n          )}\r\n\r\n          {errorNotifications && errorNotifications.length > 0 && (\r\n            <div>\r\n              <FormSection\r\n                title={formatMessage(messages.error) + ' (' + errorNotifications.length + ')'}\r\n                formWidth={412}\r\n                rightChevron\r\n                expanded={true}\r\n              >\r\n                <List items={Object.values(errorNotifications)} onRenderCell={onRenderNotificationCard} />\r\n              </FormSection>\r\n            </div>\r\n          )}\r\n\r\n          {infoNotifications && infoNotifications.length > 0 && (\r\n            <div>\r\n              <FormSection\r\n                title={formatMessage(messages.informational) + ' (' + infoNotifications.length + ')'}\r\n                formWidth={412}\r\n                rightChevron\r\n                expanded={true}\r\n              >\r\n                <List items={Object.values(infoNotifications)} onRenderCell={onRenderNotificationCard} />\r\n              </FormSection>\r\n            </div>\r\n          )}\r\n        </div>\r\n      );\r\n    }\r\n\r\n    private _onDismiss = (item: INotificationCardItem): void => {\r\n      onDismissNotification(item);\r\n    };\r\n\r\n    private _onPrimaryActionClicked = (item: INotificationCardItem): void => {\r\n      if (item.notificationLabel && item.notificationLabel === NotificationLabel.PolicyUpdate) {\r\n        setNotificationPanelTriggered(true);\r\n      }\r\n      if (\r\n        item.notificationLabel &&\r\n        (item.notificationLabel === NotificationLabel.ClarityLinkDeclined ||\r\n          item.notificationLabel === NotificationLabel.ClarityLinkExpired)\r\n      ) {\r\n        if (item.propertyBag) {\r\n          const propertyId = item.propertyBag['propertyId'];\r\n          const clarityId = item.propertyBag['clarityId'];\r\n          onResendClarityLink(propertyId, clarityId);\r\n        }\r\n      }\r\n      onDismissNotification(item);\r\n      onNotificationPanelClosed(true);\r\n    };\r\n\r\n    private _onSecondaryActionClicked = (item: INotificationCardItem): void => {\r\n      onDismissNotification(item);\r\n      onNotificationPanelClosed(true);\r\n    };\r\n\r\n    private _isPrimaryExternal = (item: INotificationCardItem): boolean => {\r\n      return !!item.notificationLabel && primaryExternalNotificationLabels.includes(item.notificationLabel);\r\n    };\r\n  }\r\n);\r\n","import { getTheme, IButtonStyles, mergeStyleSets } from '@fluentui/react';\r\nimport { IPubcenterPalette, IPubcenterSpacing } from '../../../../../theme';\r\n\r\nexport interface IProfileHeaderStyleProps {}\r\n\r\nexport interface IProfileHeaderStyles {\r\n  actionButtonsWrapper?: string;\r\n  dropDownWrapper?: string;\r\n  iconStyle?: string;\r\n}\r\n\r\nexport const getClassNames = (props: IProfileHeaderStyleProps): IProfileHeaderStyles => {\r\n  const theme = getTheme();\r\n  const spacing = theme.spacing as IPubcenterSpacing;\r\n\r\n  return mergeStyleSets({\r\n    actionButtonsWrapper: {\r\n      marginTop: spacing.size8,\r\n    },\r\n    dropDownWrapper: {\r\n      display: 'flex',\r\n      padding: `${spacing.size0} ${spacing.size4}`,\r\n      height: spacing.size40,\r\n      alignItems: 'center',\r\n    },\r\n    iconStyle: {\r\n      paddingLeft: spacing.size5,\r\n    },\r\n  });\r\n};\r\n\r\nexport function getButtonStyles(): IButtonStyles {\r\n  const theme = getTheme();\r\n  const pallete = theme.palette as IPubcenterPalette;\r\n\r\n  return {\r\n    root: {\r\n      width: '100%',\r\n    },\r\n    rootHovered: {\r\n      backgroundColor: pallete.neutralLighter,\r\n      color: pallete.neutralPrimary,\r\n    },\r\n    icon: {\r\n      color: pallete.neutralPrimary,\r\n    },\r\n    iconHovered: {\r\n      color: pallete.neutralPrimary,\r\n    },\r\n    iconPressed: {\r\n      color: pallete.neutralPrimary,\r\n    },\r\n  };\r\n}\r\n\r\nexport const getDropdownStyles = () => {\r\n  const theme = getTheme();\r\n  const size = theme.spacing as IPubcenterSpacing;\r\n  return {\r\n    root: {\r\n      '.ms-Dropdown-title': {\r\n        borderWidth: size.size0,\r\n      },\r\n    },\r\n  };\r\n};\r\n","import { ActionButton, Dropdown, Icon, Persona, PersonaPresence, PersonaSize } from '@fluentui/react';\r\nimport * as React from 'react';\r\nimport { InjectedIntlProps } from 'react-intl';\r\nimport { RouteComponentProps } from 'react-router-dom';\r\nimport {\r\n  getAppStore,\r\n  getEntityAccessPermissions,\r\n  isPublisherRejectionUnappealable,\r\n  isTythonSelfServeUser,\r\n  onAuthLogout,\r\n} from '../../../../@data';\r\nimport { UserRoleEntity, completeAccess, hasReadAccess } from '../../../../@data/services/UserRoleService';\r\nimport { NavigationMenu } from '../../../../@data/store/schema/userrolemodels/NavigationMenu';\r\nimport { getSupportedLanguagesDropDownOptions } from '../../../../@data/utils/supportedLanguages';\r\nimport { RoutePrefix } from '../../../../Routes';\r\nimport { LOCAL_STORAGE_LOCALE } from '../../../../constants';\r\nimport { RouteName } from '../../../../pages/ad-management/@data';\r\nimport { onUpdateUserLanguage } from '../../../../pages/ad-management/Account/Settings/@data/actions';\r\nimport { injectRouterWithIntl } from '../../../../utils/ReactUtils';\r\nimport messages from './ProfilePanel.messages';\r\nimport { getButtonStyles, getClassNames, getDropdownStyles } from './ProfilePanel.styles';\r\n\r\nexport interface IProfileHeaderProps extends RouteComponentProps, InjectedIntlProps {\r\n  hidePanel: () => void;\r\n}\r\n\r\nexport const ProfilePanel = injectRouterWithIntl(\r\n  class extends React.Component<IProfileHeaderProps> {\r\n    public render(): JSX.Element {\r\n      const userContext = getAppStore().userContext;\r\n      const publisher = getAppStore().publisher;\r\n      const localStorageLocale = localStorage.getItem(LOCAL_STORAGE_LOCALE);\r\n\r\n      const { actionButtonsWrapper, dropDownWrapper, iconStyle } = getClassNames({});\r\n      const buttonStyles = getButtonStyles();\r\n      const dropdownStyles = getDropdownStyles();\r\n      const signingUp: boolean = publisher === undefined && userContext?.id === undefined;\r\n\r\n      const accessPermissions = getEntityAccessPermissions(UserRoleEntity.NavigationMenu) as NavigationMenu | null;\r\n      const hasAccessToAuditHistory = hasReadAccess(accessPermissions ? accessPermissions.auditHistory : completeAccess);\r\n\r\n      const name = userContext && userContext.name;\r\n      const email = userContext && userContext.email;\r\n      const { formatMessage } = this.props.intl;\r\n      return (\r\n        <React.Fragment>\r\n          <Persona\r\n            text={name}\r\n            secondaryText={email}\r\n            size={PersonaSize.size48}\r\n            presence={PersonaPresence.online}\r\n            showSecondaryText={true}\r\n            hidePersonaDetails={false}\r\n          />\r\n          <div className={actionButtonsWrapper}>\r\n            {isTythonSelfServeUser() && (\r\n              <ActionButton\r\n                iconProps={{ iconName: 'PlayerSettings' }}\r\n                onClick={this._onUserSettingsButtonClicked}\r\n                styles={buttonStyles}\r\n                disabled={signingUp || isPublisherRejectionUnappealable()}\r\n              >\r\n                {formatMessage(messages.userSettings)}\r\n              </ActionButton>\r\n            )}\r\n            {hasAccessToAuditHistory && (\r\n              <ActionButton\r\n                iconProps={{ iconName: 'ChangeEntitlements' }}\r\n                styles={buttonStyles}\r\n                onClick={this._onAuditHistoryButtonClicked}\r\n                disabled={signingUp || isPublisherRejectionUnappealable()}\r\n              >\r\n                {formatMessage(messages.auditHistory)}\r\n              </ActionButton>\r\n            )}\r\n\r\n            {!signingUp && isTythonSelfServeUser() && (\r\n              <div className={dropDownWrapper}>\r\n                <Icon iconName=\"LocaleLanguage\" className={iconStyle} />\r\n                <Dropdown\r\n                  options={getSupportedLanguagesDropDownOptions(getAppStore().locale)}\r\n                  onChange={this._onUserLanguageChanged}\r\n                  selectedKey={localStorageLocale}\r\n                  styles={dropdownStyles}\r\n                  disabled={signingUp}\r\n                  dropdownWidth=\"auto\"\r\n                />\r\n              </div>\r\n            )}\r\n\r\n            <ActionButton iconProps={{ iconName: 'SignOut' }} onClick={() => onAuthLogout()} styles={buttonStyles} disabled={signingUp}>\r\n              {formatMessage(messages.profileSignOut)}\r\n            </ActionButton>\r\n          </div>\r\n        </React.Fragment>\r\n      );\r\n    }\r\n\r\n    private _onUserSettingsButtonClicked = () => {\r\n      this.props.hidePanel();\r\n      const { publisher } = getAppStore();\r\n      const settingsPageRoute = `/${RoutePrefix.adManagement}/${publisher ? publisher.id + '/' : ''}${RouteName[RouteName.userSettings]}`;\r\n      this.props.history.push(settingsPageRoute);\r\n    };\r\n\r\n    private _onAuditHistoryButtonClicked = () => {\r\n      this.props.hidePanel();\r\n      const { publisher } = getAppStore();\r\n      const auditHistoryPageRoute = `/${RoutePrefix.adManagement}/${publisher ? publisher.id + '/' : ''}${\r\n        RouteName[RouteName.auditHistory]\r\n      }`;\r\n      this.props.history.push(auditHistoryPageRoute);\r\n    };\r\n\r\n    private _onUserLanguageChanged = (ev, option) => {\r\n      const localStorageLocale = localStorage.getItem(LOCAL_STORAGE_LOCALE);\r\n      if (option.key !== localStorageLocale) {\r\n        onUpdateUserLanguage(option.key);\r\n      }\r\n    };\r\n  }\r\n);\r\n","import { defineMessages } from 'react-intl';\r\n\r\nexport default defineMessages({\r\n  settingsNotImplemented: {\r\n    id: 'settings.notImplemented',\r\n    defaultMessage: 'Settings Not Implemented Yet'\r\n  },\r\n});","import * as React from 'react';\r\nimport { injectIntl, InjectedIntlProps } from 'react-intl';\r\nimport messages from './SettingsPanel.messages';\r\n\r\nexport const SettingsPanel = injectIntl(class extends React.Component<InjectedIntlProps>  {\r\n  public render(): JSX.Element {\r\n    const { formatMessage } = this.props.intl;\r\n    return (\r\n      <p>{formatMessage(messages.settingsNotImplemented)}</p>\r\n    );\r\n  }\r\n});\r\n","import { AdUnit, Channel, Filter, Property, PublisherSearch } from '..';\r\nimport { completeAccess, UserRoleEntity, userRoleKey } from '../services/UserRoleService';\r\nimport { Model as UserRoleModel } from '../store/schema/userrolemodels/Model';\r\n\r\nexport const getAccessPermission = (entity): number => {\r\n  const userRoles = localStorage.getItem(userRoleKey);\r\n  if (userRoles === null) {\r\n    return completeAccess;\r\n  }\r\n  const userRolesJSON = JSON.parse(userRoles);\r\n  const userRolesMap = new Map<string, UserRoleModel>();\r\n\r\n  // tslint:disable-next-line: forin\r\n  for (const value in userRolesJSON) {\r\n    userRolesMap.set(value, JSON.parse(userRolesJSON[value]));\r\n  }\r\n\r\n  let userRoleEntity: UserRoleModel | undefined;\r\n  if (entity === AdUnit) {\r\n    userRoleEntity = userRolesMap.get(UserRoleEntity.AdUnit);\r\n  } else if (entity === Channel) {\r\n    userRoleEntity = userRolesMap.get(UserRoleEntity.Channel);\r\n  } else if (entity === Filter) {\r\n    userRoleEntity = userRolesMap.get(UserRoleEntity.Filter);\r\n  } else if (entity === Property) {\r\n    userRoleEntity = userRolesMap.get(UserRoleEntity.Property);\r\n  } else if (entity === PublisherSearch) {\r\n    userRoleEntity = userRolesMap.get(UserRoleEntity.Publisher);\r\n  }\r\n\r\n  if (userRoleEntity) {\r\n    return userRoleEntity.accessPermission;\r\n  }\r\n\r\n  return completeAccess;\r\n};\r\n\r\nexport function getEntityAccessPermissions(userRoleEntity: UserRoleEntity): UserRoleModel | null {\r\n  const userRoles = localStorage.getItem(userRoleKey);\r\n  if (userRoles === null) {\r\n    return null;\r\n  }\r\n  const userRolesJSON = JSON.parse(userRoles);\r\n\r\n  for (const value in userRolesJSON) {\r\n    if (value === userRoleEntity) {\r\n      return JSON.parse(userRolesJSON[value]);\r\n    }\r\n  }\r\n\r\n  return null;\r\n}\r\n","import {\r\n  FontWeights,\r\n  ICheckboxStyleProps,\r\n  ICheckboxStyles,\r\n  IPanelStyleProps,\r\n  IPanelStyles,\r\n  IStyle,\r\n  IStyleFunctionOrObject,\r\n  ITheme,\r\n  classNamesFunction,\r\n  getTheme,\r\n  keyframes,\r\n  mergeStyleSets,\r\n} from '@fluentui/react';\r\nimport { IPubCenterFonts, IPubcenterSpacing, IPubcenterTheme } from '../../../theme';\r\nimport { IFormTitleStyleProps, IFormTitleStyles } from '../../components/Form';\r\nimport { noPointerEvents } from '../../utils/GlobalStyleUtils';\r\n\r\nexport interface IGridStylesProps {\r\n  theme: ITheme;\r\n}\r\n\r\nexport interface IGridStyles {\r\n  root?: IStyle;\r\n  modifyColumnDescription?: IStyle;\r\n  panelButton?: IStyle;\r\n  subComponentStyles: {\r\n    formTitle?: IStyleFunctionOrObject<IFormTitleStyleProps, IFormTitleStyles>;\r\n    modifyColumnPanel?: IStyleFunctionOrObject<IPanelStyleProps, IPanelStyles>;\r\n    columnCheckbox?: IStyleFunctionOrObject<ICheckboxStyleProps, ICheckboxStyles>;\r\n  };\r\n  emptyGridTextStyle?: IStyle;\r\n  titleContainer?: IStyle;\r\n  detailsHeaderRootStyle?: IStyle;\r\n  detailsRowRootStyle?: IStyle;\r\n  disabledRowStyle?: IStyle;\r\n  checkCell?: IStyle;\r\n  columnTooltip?: IStyle;\r\n  columnCheckboxWrapper?: IStyle;\r\n  columnHeaderCallout?: IStyle;\r\n  columnHeaderIcon?: IStyle;\r\n  calloutFocusable?: IStyle;\r\n}\r\n\r\nexport const getStyles = (props: IGridStylesProps): IGridStyles => {\r\n  const theme = (props.theme as unknown) as IPubcenterTheme;\r\n  const { palette } = theme;\r\n  const fonts = theme.fonts as IPubCenterFonts;\r\n  const spacing = theme.spacing as IPubcenterSpacing;\r\n\r\n  return mergeStyleSets({\r\n    root: {\r\n      marginTop: spacing.size8,\r\n      height: '100%',\r\n      '.ms-DetailsList': {\r\n        paddingRight: spacing.size1,\r\n        marginRight: `-${spacing.size1}`,\r\n      },\r\n      '.ms-DetailsRow-cell': {\r\n        display: 'flex',\r\n        alignItems: 'center',\r\n      },\r\n    },\r\n    titleContainer: {\r\n      display: 'flex',\r\n      justifyContent: 'space-between',\r\n    },\r\n    emptyGridTextStyle: {\r\n      ...fonts.size14,\r\n      margin: `${spacing.size16} 0 0 ${spacing.size10}`,\r\n    },\r\n    detailsHeaderRootStyle: {\r\n      fontWeight: FontWeights.regular,\r\n      padding: 0,\r\n      borderTop: `1px solid ${palette.neutralPrimary}`,\r\n      borderBottom: `1px solid ${palette.neutralPrimary}`,\r\n      '.ms-DetailsHeader-cell:not(:last-child)': {\r\n        borderRight: `0.5px solid ${palette.neutralLight}`,\r\n        marginRight: '-0.5px',\r\n      },\r\n      '.ms-DetailsHeader-cellName': {\r\n        display: 'flex',\r\n        alignItems: 'center',\r\n      },\r\n    },\r\n    detailsRowRootStyle: {\r\n      // To make the text in the cell copyable as it is not by default in fluentUI\r\n      // ------------------------------\r\n      userSelect: 'text',\r\n      cursor: 'text',\r\n      width: 'fit-content',\r\n      // ------------------------------\r\n      ...fonts.size14,\r\n      '.ms-DetailsRow-cell:not(:last-child)': {\r\n        marginRight: '-0.5px',\r\n        borderRight: `0.5px solid ${palette.neutralLight}`,\r\n      },\r\n      '.ms-DetailsRow-fields.updated': {\r\n        animation: keyframes({\r\n          '50%': {\r\n            backgroundColor: palette.themeLighter,\r\n          },\r\n        }),\r\n        animationDuration: '300ms',\r\n      },\r\n    },\r\n    disabledRowStyle: {\r\n      ...noPointerEvents,\r\n    },\r\n    checkCell: {\r\n      alignSelf: 'center',\r\n    },\r\n    columnHeaderCallout: {\r\n      display: 'flex',\r\n      alignItems: 'center',\r\n    },\r\n    columnHeaderIcon: {\r\n      color: palette.themePrimary,\r\n      padding: `0px ${spacing.size8}`,\r\n      cursor: 'pointer',\r\n      '& :hover': {\r\n        backgroundColor: palette.themeLighter,\r\n      },\r\n    },\r\n    modifyColumnDescription: [\r\n      'ms-fontWeight-semibold',\r\n      {\r\n        fontSize: theme.fonts.size12,\r\n        marginBottom: spacing.size16,\r\n      },\r\n    ],\r\n    panelButton: {\r\n      display: 'flex',\r\n      selectors: {\r\n        '.ms-Button': {\r\n          marginRight: spacing.size8,\r\n        },\r\n      },\r\n    },\r\n    subComponentStyles: {\r\n      modifyColumnPanel: {\r\n        header: {\r\n          marginBottom: spacing.size24,\r\n        },\r\n        content: {\r\n          display: 'flex',\r\n          flexDirection: 'column',\r\n        },\r\n        footer: {\r\n          borderTopStyle: 'solid',\r\n          borderColor: theme.palette.neutralLight,\r\n          borderTopWidth: 1,\r\n        },\r\n      },\r\n      columnCheckbox: {\r\n        root: {\r\n          paddingTop: spacing.size8,\r\n          paddingBottom: spacing.size8,\r\n          marginBottom: spacing.size8,\r\n        },\r\n      },\r\n    },\r\n    columnTooltip: {\r\n      paddingTop: spacing.size8,\r\n      paddingBottom: spacing.size8,\r\n      marginBottom: spacing.size8,\r\n    },\r\n    columnCheckboxWrapper: {\r\n      display: 'flex',\r\n      gap: spacing.size8,\r\n      alignItems: 'center',\r\n    },\r\n    calloutFocusable: {\r\n      '&:focus': {\r\n        border: '2px solid black',\r\n        borderRadius: spacing.size4,\r\n      },\r\n    },\r\n  });\r\n};\r\n\r\nconst classNames = classNamesFunction<IGridStylesProps, IGridStyles>();\r\n\r\nexport function getClassNames<PropType>(props?: PropType) {\r\n  return classNames(getStyles, { theme: getTheme(), ...props });\r\n}\r\n","export const PROFILE_TAB_KEY = 'profile';\r\nexport const PAYMENTS_TAB_KEY = 'payments';\r\nexport const SETTINGS_TAB_KEY = 'settings';\r\nexport const USER_MANAGEMENT_TAB_KEY = 'user';\r\nexport const REPORT_DASHBOARD_PAGE = 'dashboard';\r\n","import { mutatorAction } from 'satcheljs';\r\n\r\nimport { HomePageStatus } from '../store/schema/IHomeViewState';\r\nimport { getStore } from '../store/store';\r\n\r\nexport const setHomePageStatus = mutatorAction(\r\n  'setHomePageStatus',\r\n  (profileStatus: HomePageStatus, siteStatus: HomePageStatus, adUnitStatus: HomePageStatus, isHomePageSetupComplete: boolean) => {\r\n    getStore().profileStatus = profileStatus;\r\n    getStore().siteStatus = siteStatus;\r\n    getStore().adUnitStatus = adUnitStatus;\r\n    getStore().isSetupDone = isHomePageSetupComplete;\r\n  }\r\n);\r\n\r\nexport const setIsSetupDone = mutatorAction('setIsSetupDone', (isSetupDone: boolean) => {\r\n  getStore().isSetupDone = isSetupDone;\r\n});\r\n\r\nexport const setIsStatusLoading = mutatorAction('setIsStatusLoading', (isStatusLoading: boolean) => {\r\n  getStore().isStatusLoading = isStatusLoading;\r\n});\r\n\r\nexport const setIsFRECardShown = mutatorAction('setIsFRECardShown', (isFRECardShown: boolean) => {\r\n  getStore().isFRECardShown = isFRECardShown;\r\n});\r\n","import { EntityType } from '../enums';\r\nimport { Model } from './Model';\r\n\r\nexport interface IRejectionCode {\r\n  rejectionCodes: string;\r\n  appealDocuments?: string;\r\n}\r\n\r\nexport class EvaluationStatus extends Model {\r\n  public apiPath = undefined;\r\n  public className = 'entityEvaluation';\r\n  public entityId: number;\r\n  public approvalStatus: EntityEvaluationStatus;\r\n  public properties?: IRejectionCode;\r\n  public entityType: EntityType;\r\n}\r\n\r\nexport class PublisherEvaluationStatus extends EvaluationStatus {\r\n  public entityType: EntityType.Publisher;\r\n}\r\n\r\nexport class PropertyEvaluationStatus extends EvaluationStatus {\r\n  public entityType: EntityType.Property;\r\n}\r\n\r\nexport enum EntityEvaluationStatus {\r\n  Pending = 'Pending',\r\n  InReview = 'UnderConsideration',\r\n  Rejected = 'Rejected',\r\n  Approved = 'Approved',\r\n}\r\n\r\nexport enum EntityEvaluationErrorCode {\r\n  'P001' = 1, // TST failure\r\n  'P002' = 2, // OVet failure\r\n  'D001' = 3, // PDE failure\r\n  'U001' = 4, // Unknown or default\r\n  'R001' = 5, // ATS manual review failed\r\n\r\n  // CRM Manual Overrides\r\n  'CRM_MO_001' = 6, // Manual override to Review Case Terminated (Unappealable)\r\n  'CRM_MO_002' = 7, // Manual Deactivation of Publisher in CRM (Unappealable)\r\n\r\n  'OV_DNE_E000' = 100, // OneVet DNE failed (Unappealable)\r\n  'OV_TSS_E000' = 200, // OneVet TSS failed (Unappealable)\r\n\r\n  'OV_EV_E000' = 300, // OneVet Email Verification failed\r\n\r\n  'OV_BV_E000' = 400, // OneVet Business Verification failed - UnAppealable\r\n  'OV_BV_E001' = 401, //  OneVet Business Verification failed - Appealable\r\n\r\n  'OV_DV_E000' = 500, // OneVet Domain Verification failed - UnAppealable\r\n  'OV_DV_E001' = 501, // OneVet Domain Verification failed - Appealable\r\n\r\n  'OV_TV_E000' = 600, // OneVet Token Verification failed\r\n}\r\n\r\nexport const appealableRejectionCodes = [EntityEvaluationErrorCode['OV_BV_E001'], EntityEvaluationErrorCode['OV_DV_E001']];\r\nexport const unappealableRejectionCodes = [\r\n  EntityEvaluationErrorCode['P001'],\r\n  EntityEvaluationErrorCode['P002'],\r\n  EntityEvaluationErrorCode['D001'],\r\n  EntityEvaluationErrorCode['U001'],\r\n  EntityEvaluationErrorCode['R001'],\r\n  EntityEvaluationErrorCode['CRM_MO_001'],\r\n  EntityEvaluationErrorCode['CRM_MO_002'],\r\n  EntityEvaluationErrorCode['OV_DNE_E000'],\r\n  EntityEvaluationErrorCode['OV_TSS_E000'],\r\n  EntityEvaluationErrorCode['OV_EV_E000'],\r\n  EntityEvaluationErrorCode['OV_BV_E000'],\r\n  EntityEvaluationErrorCode['OV_DV_E000'],\r\n  EntityEvaluationErrorCode['OV_TV_E000'],\r\n];\r\n\r\nexport enum EvidenceDocumentType {\r\n  OV_BV_001, // OneVet Business Verification - Formation documents, such as articles of incorporation, partnership deed.\r\n  OV_BV_002, // OneVet Business Verification - Franchise or agency appointment letters.\r\n  OV_BV_003, // OneVet Business Verification - Government issued letter, license, registration, or certificate.\r\n  OV_BV_004, // OneVet Business Verification - Lease or tenancy documents.\r\n  OV_BV_005, // OneVet Business Verification - Letter or statement from a financial institution or a utility company.\r\n  OV_BV_006, // OneVet Business Verification - Record on a Government registry website (site/link must be displayed).\r\n  OV_BV_007, // OneVet Business Verification - Stock exchange filings or tax filing records.\r\n\r\n  OV_DV_001, // OneVet Domain Verification (Email domain) - Assignment letter from an authorized representative of the organization.\r\n  OV_DV_002, // OneVet Domain Verification (Email domain) - Domain ownership records, such as Whois.\r\n  OV_DV_003, // OneVet Domain Verification (Email domain) - Domain purchase invoices or registry confirmation records.\r\n  OV_DV_004, // OneVet Domain Verification (Email domain) - Website showing name, address, contact information and domain of the org\r\n}\r\n","import { FormattedMessage, InjectedIntl, MessageValue } from 'react-intl';\r\n\r\nexport interface IToastNotificationProps {\r\n  items?: IToastNotificationItem[];\r\n  dismissButtonAriaLabel?: string;\r\n  intl: InjectedIntl;\r\n  onRemoved?: (notification: IToastNotificationItem) => void;\r\n}\r\n\r\nexport interface IToastNotificationItemProps {\r\n  item: IToastNotificationItem;\r\n  intl: InjectedIntl;\r\n}\r\n\r\nexport interface IToastNotificationItem {\r\n  id: string;\r\n  type: ToastType;\r\n  content: IToastNotificationItemContent;\r\n}\r\n\r\nexport interface IToastNotificationItemContent {\r\n  text?: string;\r\n  textMessageDescriptor?: FormattedMessage.MessageDescriptor;\r\n  intlMessageValues?: { [key: string]: MessageValue };\r\n  suppressAutoDismiss?: boolean;\r\n  animationTime?: number;\r\n  dismissButtonAriaLabel?: string;\r\n  noDismissButton?: boolean;\r\n  onDismiss?: () => void;\r\n}\r\n\r\nexport enum ToastType {\r\n  info = 'info',\r\n  error = 'error',\r\n  warning = 'warning',\r\n  success = 'success',\r\n  loading = 'loading',\r\n}\r\n\r\nexport enum ToastIcon {\r\n  info = 'Info',\r\n  error = 'ErrorBadge',\r\n  warning = 'Info',\r\n  success = 'Completed',\r\n}\r\n","import { IStyle, ITheme } from '@fluentui/react';\r\n\r\nexport interface IManagePageStyleProps {\r\n  theme: ITheme;\r\n}\r\n\r\nexport interface IManagePageStyles {\r\n  root?: IStyle;\r\n  tokenPanelsubTitle?: IStyle;\r\n  tokenPanelsubTitleValue?: IStyle;\r\n  tokenPanelAgreement?: IStyle;\r\n  tokenPanelAgreementBtn?: IStyle;\r\n  tokenPanelDevToken?: IStyle;\r\n  tokenPanelInfoButton?: IStyle;\r\n  tokenPanelAgreementText?: IStyle;\r\n  tokenSpinner?: IStyle;\r\n  tokenFetchFail?: IStyle;\r\n}\r\n\r\nexport enum DevTokenFetch {\r\n  TokenNotFound = 'TokenNotFound',\r\n  ApiCallFailed = 'ApiCallFailed',\r\n}\r\n\r\nexport interface IDevTokenPanelParams {\r\n  userName?: string;\r\n  email?: string;\r\n  developerToken?: string;\r\n  panelClosed?: boolean;\r\n  SpinnerText?: string;\r\n  onGenerateDevToken: () => void;\r\n}\r\n","export * from './PopupCard';\r\n","import { getAppealStore } from '../../pages/ad-management/Profile/@data/store/appealStore';\r\nimport { PublisherType } from '../store/schema/enums/PublisherType';\r\nimport {\r\n  appealableRejectionCodes,\r\n  EntityEvaluationErrorCode,\r\n  EntityEvaluationStatus,\r\n  unappealableRejectionCodes,\r\n} from '../store/schema/models/EntityEvaluationStatus';\r\nimport { getAppStore } from '../store/store';\r\n\r\nexport function getCurrentPublisher() {\r\n  return getAppStore().publisher;\r\n}\r\n\r\nexport function getCurrentPublisherId() {\r\n  return getCurrentPublisher()?.id;\r\n}\r\n\r\nexport function getCurrentPublisherName() {\r\n  return getCurrentPublisher()?.name as string;\r\n}\r\n\r\nexport function isPublisherProfileDataPresent() {\r\n  return !!getCurrentPublisher()?.address;\r\n}\r\n\r\nexport function getPublisherEvaluationStatus() {\r\n  return getAppStore().publisherEvaluationStatus;\r\n}\r\n\r\nexport function getPublisherCountry() {\r\n  return getCurrentPublisher()?.address?.country;\r\n}\r\n\r\nexport function getPublisherEvaluationApprovalStatus() {\r\n  return getPublisherEvaluationStatus()?.approvalStatus;\r\n}\r\n\r\nexport function isPublisherEvaluationStatusFetchFailed() {\r\n  return getAppStore().isPublisherEvaluationStatusFetchFailed;\r\n}\r\n\r\nexport function getPublisherEvaluationRejectionCodes(): EntityEvaluationErrorCode[] {\r\n  return (\r\n    getPublisherEvaluationStatus()\r\n      ?.properties?.rejectionCodes?.split(',')\r\n      .map((code) => code.trim() as unknown as EntityEvaluationErrorCode) ?? []\r\n  );\r\n}\r\n\r\nexport function getAppealableRejectionCodes() {\r\n  return getPublisherEvaluationRejectionCodes().filter((code) =>\r\n    appealableRejectionCodes.includes(EntityEvaluationErrorCode[code] as unknown as EntityEvaluationErrorCode)\r\n  );\r\n}\r\n\r\nexport function isPublisherProfileInComplete() {\r\n  return getPublisherEvaluationApprovalStatus() === EntityEvaluationStatus.Pending;\r\n}\r\n\r\nexport function isPublisherApproved() {\r\n  return getPublisherEvaluationApprovalStatus() === EntityEvaluationStatus.Approved;\r\n}\r\n\r\n// NOTE: Currently we are handling any rejection codes.\r\n// If publisher EntityEvaluationStatus is Rejected, then publisher is shown as suspended in UI\r\nexport function isPublisherRejected() {\r\n  return getPublisherEvaluationApprovalStatus() === EntityEvaluationStatus.Rejected;\r\n}\r\n\r\nexport function isPublisherRejectionAppealable() {\r\n  return isPublisherRejected() && !isPublisherRejectionUnappealable();\r\n}\r\n\r\nexport function isPublisherRejectionUnappealable(): boolean {\r\n  // if publisher is not rejected, then it is not unappealable\r\n  if (!isPublisherRejected()) {\r\n    return false;\r\n  }\r\n\r\n  const rejectionCodes = getPublisherEvaluationRejectionCodes();\r\n  // if rejection codes is empty, then publisher rejection is unappealable\r\n  if (!rejectionCodes || rejectionCodes.length === 0) {\r\n    return true;\r\n  }\r\n\r\n  // if appeal documents list is empty, then publisher rejection is unappealable\r\n  if (getAppealDocuments().length === 0) {\r\n    return true;\r\n  }\r\n\r\n  // if any of the rejection codes is unappealable, then publisher rejection is unappealable\r\n  for (const code of rejectionCodes) {\r\n    if (unappealableRejectionCodes.includes(EntityEvaluationErrorCode[code] as unknown as EntityEvaluationErrorCode)) {\r\n      return true;\r\n    }\r\n  }\r\n\r\n  // publisher rejection is appealable if it does not have any unappealable rejection codes\r\n  return false;\r\n}\r\n\r\nexport function isPublisherUnderReview() {\r\n  const publisherEvaluationApprovalStatus = getPublisherEvaluationApprovalStatus();\r\n  if (publisherEvaluationApprovalStatus && publisherEvaluationApprovalStatus === EntityEvaluationStatus.InReview) {\r\n    return true;\r\n  }\r\n\r\n  const appealHistory = getAppealStore().appealHistory ?? [];\r\n  if (isPublisherRejected() && isPublisherRejectionAppealable() && appealHistory.length > 0) {\r\n    for (const appealStatus of appealHistory) {\r\n      // Publisher is not in review and needs to take action, if any of the appeal status is not Pending or UnderConsideration\r\n      if (appealStatus.reviewStatus !== 'Pending' && appealStatus.reviewStatus !== 'UnderConsideration') {\r\n        return false;\r\n      }\r\n    }\r\n    return true;\r\n  }\r\n\r\n  // Publisher is not review - if publisherEvaluationApprovalStatus is not InReview\r\n  // - if publisher is not rejected or if their appealHistory doesn't exist\r\n  return false;\r\n}\r\n\r\nexport function isPublisherActionRequired() {\r\n  return isPublisherRejectionAppealable() && !isPublisherUnderReview();\r\n}\r\n\r\nexport function getPublisherAccountType() {\r\n  return getCurrentPublisher()?.publisherType;\r\n}\r\n\r\nexport function isIndividualPublisher() {\r\n  return getPublisherAccountType() === PublisherType.individual;\r\n}\r\n\r\nexport function isOrganizationPublisher() {\r\n  return getPublisherAccountType() === PublisherType.organization;\r\n}\r\n\r\nexport function getAppealDocuments() {\r\n  return getAppStore().publisherEvaluationStatus?.properties?.appealDocuments?.split(',') ?? [];\r\n}\r\n\r\nexport function isAppealInReviewForRejectionCode(rejectionCode: EntityEvaluationErrorCode) {\r\n  const appealStatus = getAppealStatusForRejectionCode(rejectionCode);\r\n  if (appealStatus && (appealStatus.reviewStatus === 'Pending' || appealStatus.reviewStatus === 'UnderConsideration')) {\r\n    return true;\r\n  }\r\n  return false;\r\n}\r\n\r\nexport function getAppealStatusForRejectionCode(rejectionCode: EntityEvaluationErrorCode) {\r\n  const { appealHistory } = getAppealStore();\r\n  return appealHistory?.find((history) => history.rootRejectionCode === rejectionCode.toString());\r\n}\r\n","/**\r\n * Types the responses coming from json and decorates them with the specified classes.\r\n *\r\n * @param typeToRestore The object to copy its type from, basically just do `new ObjectName`\r\n * @param obj The erased object that we need to restore.\r\n */\r\n// tslint:disable-next-line:no-any\r\nexport function restoreTypeWithObject<T extends { constructor: any }>(typeToRestore: T, obj: any): T | undefined {\r\n  if (!obj) {\r\n    return undefined;\r\n  }\r\n\r\n  if (typeof obj === 'string') {\r\n    try {\r\n      obj = JSON.parse(obj);\r\n    } catch (_) {\r\n      return undefined;\r\n    }\r\n  }\r\n\r\n  obj.constructor = typeToRestore.constructor;\r\n  // tslint:disable-next-line:no-any\r\n  obj.__proto__ = (typeToRestore as any).__proto__;\r\n\r\n  // Add all values spread.\r\n  typeToRestore = {\r\n    ...typeToRestore,\r\n    ...obj,\r\n  };\r\n\r\n  return typeToRestore;\r\n}\r\n\r\n// tslint:disable-next-line:no-any\r\nexport function mergeTypeWithObject<T>(typeToRestore: T, obj: any): T {\r\n  return restoreTypeWithObject(typeToRestore, obj) || typeToRestore;\r\n}\r\n\r\nexport function groupBy<T, K>(list: T[], getKey: (item: T) => K) {\r\n  const map = new Map<K, T[]>();\r\n  list.forEach((item) => {\r\n    const key = getKey(item);\r\n    const collection = map.get(key);\r\n    if (!collection) {\r\n      map.set(key, [item]);\r\n    } else {\r\n      collection.push(item);\r\n    }\r\n  });\r\n  return Array.from(map);\r\n}\r\n\r\nexport function getEnumNames<T>(obj: T): string[] {\r\n  const results: string[] = [];\r\n  for (const key of Object.keys(obj).filter((k: string) => {\r\n    return !isNaN(+k);\r\n  })) {\r\n    results.push(obj[key]);\r\n  }\r\n  return results;\r\n}\r\n\r\n// tslint:disable-next-line: no-any\r\nexport function deepClone(obj: any) {\r\n  return JSON.parse(JSON.stringify(obj));\r\n}\r\n\r\n// tslint:disable-next-line: no-any\r\nexport function invert(obj: any) {\r\n  const res = {};\r\n  Object.keys(obj).forEach((key) => {\r\n    res[obj[key]] = key;\r\n  });\r\n\r\n  return res;\r\n}\r\n\r\ntype AnyObject = { [key: string]: unknown };\r\n\r\nexport function deepEqual(obj1: AnyObject, obj2: AnyObject, convertType: boolean = false): boolean {\r\n  if (obj1 === obj2) {\r\n    return true;\r\n  }\r\n\r\n  if (typeof obj1 !== 'object' || obj1 === null || typeof obj2 !== 'object' || obj2 === null) {\r\n    return false;\r\n  }\r\n\r\n  const keys1 = Object.keys(obj1);\r\n  const keys2 = Object.keys(obj2);\r\n\r\n  if (keys1.length !== keys2.length) {\r\n    return false;\r\n  }\r\n\r\n  for (const key of keys1) {\r\n    if (!obj2.hasOwnProperty(key)) {\r\n      return false;\r\n    }\r\n    if (convertType) {\r\n      // Handle type conversion for numbers and strings\r\n      if (typeof obj1[key] === 'number' && typeof obj2[key] === 'string') {\r\n        // @ts-ignore\r\n        if (obj1[key].toString() !== obj2[key]) {\r\n          return false;\r\n        }\r\n      } else if (typeof obj1[key] === 'string' && typeof obj2[key] === 'number') {\r\n        // @ts-ignore\r\n        if (obj1[key] !== obj2[key].toString()) {\r\n          return false;\r\n        }\r\n        // @ts-ignore\r\n      } else if (!deepEqual(obj1[key], obj2[key], convertType)) {\r\n        return false;\r\n      }\r\n    } else {\r\n      // @ts-ignore\r\n      if (!deepEqual(obj1[key], obj2[key], convertType)) {\r\n        return false;\r\n      }\r\n    }\r\n  }\r\n\r\n  return true;\r\n}\r\n","import { uiConfig } from '../../config/ui.config';\r\nimport {\r\n  AccountStatus,\r\n  PaymentsPageBalance,\r\n  PaymentsPageEstimatedEarnings,\r\n  UserContext,\r\n  XPayJwtTokenRequest,\r\n  XPayJwtTokenResponse,\r\n} from '../store/schema';\r\nimport { PaymentsPageEstimatedEarningsRequestParams } from '../store/schema/models/PaymentPageEstimatedEarningsRequestParams';\r\nimport { handleApiErrors, handleError } from '../utils/handleApiErrors';\r\nimport { buildRequestHeadersWithAuthToken } from '../utils/requestUtils';\r\nimport { ApiError } from './ApiService';\r\n\r\nexport async function getEstimatedEarnings(\r\n  publisherId,\r\n  requestParams: PaymentsPageEstimatedEarningsRequestParams,\r\n  userContext: UserContext\r\n): Promise<PaymentsPageEstimatedEarnings> {\r\n  const url = `${uiConfig.getApiBaseAddress()}/billing/publishers/${publisherId}/earnings?${new URLSearchParams(requestParams)}`;\r\n  const headers = await buildRequestHeadersWithAuthToken(url, userContext);\r\n\r\n  let response: Response;\r\n\r\n  try {\r\n    response = await fetch(url, {\r\n      method: 'GET',\r\n      headers: headers,\r\n    });\r\n    if (!response.ok) {\r\n      return handleApiErrors<PaymentsPageEstimatedEarnings>(response, url);\r\n    }\r\n\r\n    const responseJson = await response.json();\r\n    if (responseJson.data) {\r\n      return responseJson.data;\r\n    }\r\n    return Promise.resolve({} as PaymentsPageEstimatedEarnings);\r\n  } catch (err) {\r\n    const error = `getEstimatedEarnings operation failed for ${url}. Errors: ${err}`;\r\n    return handleError(new ApiError(500, error), url);\r\n  }\r\n}\r\nexport async function getBalance(publisherId, currencyCode, userContext: UserContext): Promise<PaymentsPageBalance> {\r\n  const url = `${uiConfig.getApiBaseAddress()}/billing/publishers/${publisherId}/balance?currencyCode=${currencyCode}`;\r\n  const headers = await buildRequestHeadersWithAuthToken(url, userContext);\r\n\r\n  let response: Response;\r\n\r\n  try {\r\n    response = await fetch(url, {\r\n      method: 'GET',\r\n      headers: headers,\r\n    });\r\n\r\n    if (!response.ok) {\r\n      return handleApiErrors<PaymentsPageBalance>(response, url);\r\n    }\r\n\r\n    const responseJson = await response.json();\r\n\r\n    if (responseJson.data) {\r\n      return responseJson.data;\r\n    }\r\n    return Promise.resolve({} as PaymentsPageBalance);\r\n  } catch (err) {\r\n    const error = `getBalance operation failed for ${url}. Errors: ${err}`;\r\n    return handleError(new ApiError(500, error), url);\r\n  }\r\n}\r\n\r\nexport const getAccountStatus = async (publisherId, userContext: UserContext): Promise<AccountStatus> => {\r\n  const url = `${uiConfig.getApiBaseAddress()}/billing/publishers/${publisherId}/xpayAccountStatus`;\r\n  const headers = await buildRequestHeadersWithAuthToken(url, userContext);\r\n  let response: Response;\r\n\r\n  try {\r\n    response = await fetch(url, {\r\n      method: 'GET',\r\n      headers: headers,\r\n    });\r\n\r\n    if (!response.ok) {\r\n      return handleApiErrors<AccountStatus>(response, url);\r\n    }\r\n\r\n    const responseJson = await response.json();\r\n\r\n    if (responseJson.data) {\r\n      return responseJson.data;\r\n    }\r\n    return Promise.resolve({} as AccountStatus);\r\n  } catch (err) {\r\n    const error = `getAccountStatus operation failed for ${url}. Errors: ${err}`;\r\n    return handleError(new ApiError(500, error), url);\r\n  }\r\n};\r\n\r\nexport async function getXPayJwtToken(body: XPayJwtTokenRequest, userContext: UserContext): Promise<XPayJwtTokenResponse> {\r\n  const url =\r\n    uiConfig.getApiBaseAddress() + '/billing/publishers/' + body.publisherId + '/generateXPayToken?countryCode=' + body.countryCode;\r\n  const headers = await buildRequestHeadersWithAuthToken(url, userContext);\r\n\r\n  let response: Response;\r\n\r\n  try {\r\n    response = await fetch(url, {\r\n      method: 'GET',\r\n      headers: headers,\r\n    });\r\n\r\n    if (!response.ok) {\r\n      return handleApiErrors<XPayJwtTokenResponse>(response, url);\r\n    }\r\n\r\n    const responseJson = await response.json();\r\n    if (responseJson.data) {\r\n      return responseJson.data;\r\n    }\r\n    return Promise.resolve({} as XPayJwtTokenResponse);\r\n  } catch (err) {\r\n    const error = `getXPayJwtToken operation failed for ${url}. Errors: ${err}`;\r\n    return handleError(new ApiError(500, error), url);\r\n  }\r\n}\r\n","import { mutatorAction } from 'satcheljs';\r\nimport { Log } from '../../../../../logging/src';\r\nimport { EntityEvaluationStatus, getAppStore, Publisher, PublisherEvaluationStatus } from '../../../../@data';\r\nimport { getAdManagementStore } from '../store/store';\r\n\r\nexport const setPublisherEvaluationStatusAction = mutatorAction(\r\n  'setPublisherEvaluationStatusAction',\r\n  (publisherEvaluationStatus: PublisherEvaluationStatus) => {\r\n    const appStore = getAppStore();\r\n    appStore.publisherEvaluationStatus = publisherEvaluationStatus;\r\n  }\r\n);\r\n\r\nexport const setPublisherEvaluationFetchFailedAction = mutatorAction('setPublisherEvaluationFetchFailedAction', (isFailed: boolean) => {\r\n  const appStore = getAppStore();\r\n  appStore.isPublisherEvaluationStatusFetchFailed = isFailed;\r\n});\r\n\r\nexport const setPublisherRejectedMessageClosedAction = mutatorAction(\r\n  'setPublisherRejectedMessageClosedAction',\r\n  (isPublisherRejectedMessageClosed: boolean) => {\r\n    const adManagementStore = getAdManagementStore();\r\n    adManagementStore.isPublisherRejectedMessageClosed = isPublisherRejectedMessageClosed;\r\n  }\r\n);\r\n\r\nexport const setPublisherEvalutionStatusToInReview = mutatorAction('setPublisherEvalutionStatusToInReview', (publisher: Publisher) => {\r\n  Log.debug('Setting evaluation status to in review, when publisher profile is edited');\r\n  const publisherEvaluationStatus: PublisherEvaluationStatus = new PublisherEvaluationStatus();\r\n  publisherEvaluationStatus.entityId = publisher.id;\r\n  publisherEvaluationStatus.approvalStatus = EntityEvaluationStatus.InReview;\r\n  getAppStore().publisherEvaluationStatus = publisherEvaluationStatus;\r\n});\r\n","import { mutatorAction } from 'satcheljs';\r\nimport { Log } from '../../../../../../../logging/src';\r\nimport { EntityPreferences, EntityType, getAppStore } from '../../../../../../@data';\r\nimport { LOCAL_STORAGE_LOCALE } from '../../../../../../constants/AppConstants';\r\nimport { INotificationPreferences, ISettingsViewModel } from '../store/schema/ISettingsViewModel';\r\nimport { getStore } from '../store/store';\r\n\r\nexport const saveRawSettings = mutatorAction('saveRawSettings', (raw: EntityPreferences) => {\r\n  getStore().raw = raw;\r\n});\r\n\r\nexport const onSettingsChanged = mutatorAction('onSettingsChanged', (active: ISettingsViewModel) => {\r\n  getStore().active = active;\r\n  if (active.systemPreferences?.locale) {\r\n    localStorage.setItem(LOCAL_STORAGE_LOCALE, active.systemPreferences.locale);\r\n    getAppStore().locale = active.systemPreferences?.locale;\r\n  }\r\n});\r\n\r\nexport const setEntityType = mutatorAction('setEntityType', (entityType: EntityType) => {\r\n  Log.debug(`Setting entityType: ${entityType}`);\r\n  getStore().active.entityType = entityType;\r\n});\r\n\r\nexport const setNotificationPreferences = mutatorAction('setNotificationPreferences', (np: INotificationPreferences) => {\r\n  getStore().active.notificationPreferences = np;\r\n});\r\n","import { PhoneVerificationGenerateCode, getAppStore, postEntity } from '../../../../../@data';\r\nimport { EvaluationStatus, Publisher } from '../../../../../@data/store';\r\n\r\nexport async function generateCodeAsync(body: PhoneVerificationGenerateCode, publisher: Publisher) {\r\n  const { userContext } = getAppStore();\r\n  const phoneVerificationResp = await postEntity<PhoneVerificationGenerateCode>(\r\n    [new EvaluationStatus(), publisher],\r\n    PhoneVerificationGenerateCode,\r\n    body,\r\n    userContext\r\n  );\r\n  return phoneVerificationResp.data;\r\n}\r\n","import { getAppStore, getCurrentPublisher, Publisher, putEntity } from '../../../../../@data';\r\n\r\nexport async function updatePublisherDetails(body: Publisher): Promise<Publisher> {\r\n  const publisher = getCurrentPublisher();\r\n  if (!publisher) {\r\n    return Promise.reject('No publisher found');\r\n  }\r\n\r\n  const { userContext } = getAppStore();\r\n  const publisherDetails = await putEntity([publisher], body, userContext);\r\n  return publisherDetails;\r\n}\r\n","import { getAppStore, postEntity } from '../../../../../@data';\r\nimport { Publisher } from '../../../../../@data/store';\r\nimport { AddressValidation } from '../../../../../@data/store/schema/models/AddressValidation';\r\n\r\nexport async function validateAddressAsync(body: AddressValidation, publisher: Publisher) {\r\n  const { userContext } = getAppStore();\r\n  const addressValidation = await postEntity([publisher], AddressValidation, body, userContext);\r\n  return addressValidation;\r\n}\r\n","import { Model } from './Model';\r\n\r\nexport class AddressValidation extends Model {\r\n  public apiPath = undefined;\r\n  public className = 'addressValidation';\r\n  public city?: string;\r\n  public country?: string;\r\n  public line1?: string;\r\n  public line2?: string;\r\n  public postalCode?: string;\r\n  public stateOrProvince?: string;\r\n  public isAddressValid?: boolean;\r\n  public isOrgAddressValid?: boolean;\r\n  public isOrg?: boolean;\r\n}\r\n","export const SMALLER_LIST_ITEM_HEIGHT = 24;\r\nexport const STANDARD_LIST_ITEM_HEIGHT = 36;\r\nexport const HEADING_ITEM_HEIGHT = 44;\r\n","export const adProvidersToNames = {\r\n  1: 'AdYouLike',\r\n  2: 'App Nexus',\r\n  3: 'Baidu',\r\n  4: 'Bing',\r\n  5: 'Dable',\r\n  6: 'EngageYa',\r\n  7: 'MediaNet',\r\n  8: 'MGID',\r\n  9: 'OutBrain',\r\n  10: 'PopIn',\r\n  11: 'PostSquare',\r\n  12: 'RevContent',\r\n  13: 'ShareThrough',\r\n  14: 'Strossle',\r\n  15: 'Taboola',\r\n  16: 'Triple Lift',\r\n  17: 'Yengo',\r\n  18: 'Criteo',\r\n  19: 'Gemini',\r\n  20: 'Taboola NetBidder',\r\n  21: 'Colombia',\r\n  22: 'SongHeng',\r\n  23: 'LockerDome',\r\n  24: 'LinkedIn',\r\n  25: 'Gecko',\r\n  26: 'Qihoo',\r\n};\r\n","import { createStore } from 'satcheljs';\r\nimport { IPaymentsPageData } from './schema';\r\n\r\n// !NOTE: This is to be added explicitly for the orchestrators to register themselves.\r\nimport { XPayJwtTokenRequest } from '../../../../../@data';\r\nimport '../orchestrators';\r\n\r\nexport const getPaymentsPageData = createStore<IPaymentsPageData>('PaymentsPageData', {\r\n  estimatedEarnings: { yearly: { isDataLoaded: false }, monthly: { isDataLoaded: false } },\r\n  balance: { isDataLoaded: false },\r\n  xpayJwtTokenStatusIsLoading: false,\r\n  xpayJwtTokenRequest: new XPayJwtTokenRequest(),\r\n});\r\n","import {\r\n  IComboBoxStyles,\r\n  IDatePickerStrings,\r\n  IDatePickerStyleProps,\r\n  IDatePickerStyles,\r\n  IRefObject,\r\n  IStyle,\r\n  IStyleFunctionOrObject,\r\n  ITheme,\r\n} from '@fluentui/react';\r\nimport { InjectedIntlProps } from 'react-intl';\r\nimport { DateTimePicker } from './DateTimePicker';\r\nimport messages from './DateTimePicker.messages';\r\n\r\nexport interface IDateTimePickerProps extends React.HTMLAttributes<HTMLDivElement>, InjectedIntlProps {\r\n  onDateTimeChanged: (value: Date) => void;\r\n  componentRef?: IRefObject<DateTimePicker>;\r\n  label?: string;\r\n  value?: Date;\r\n  disabled?: boolean;\r\n  datePlaceholder?: string;\r\n  hourPlaceholder?: string;\r\n  timePlaceholder?: string;\r\n  datePickerWidth?: number;\r\n  minDateTime?: Date;\r\n  maxDateTime?: Date;\r\n  allowSecondsField?: boolean;\r\n  styles?: Partial<IDateTimePickerStyles>;\r\n  /**\r\n   * Error message to render for TextField if date boundary (minDate, maxDate) validation fails.\r\n   */\r\n  isOutOfBoundsErrorMessage?: string;\r\n}\r\n\r\nexport interface IDateTimePickerStyleProps {\r\n  theme: ITheme;\r\n  datePickerWidth?: number;\r\n}\r\n\r\nexport interface IDateTimePickerStyles {\r\n  root?: IStyle;\r\n  colonSeperator?: IStyle;\r\n  datePicker?: IStyle;\r\n  hourPicker?: Partial<IComboBoxStyles>;\r\n  minutesPicker?: Partial<IComboBoxStyles>;\r\n  secondsPicker?: IStyle;\r\n  subComponentStyles: {\r\n    datePicker?: IStyleFunctionOrObject<IDatePickerStyleProps, IDatePickerStyles>;\r\n  };\r\n}\r\n\r\nexport const DayPickerStrings: IDatePickerStrings = {\r\n  months: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],\r\n\r\n  shortMonths: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],\r\n\r\n  days: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],\r\n\r\n  shortDays: ['S', 'M', 'T', 'W', 'T', 'F', 'S'],\r\n\r\n  goToToday: messages.goToToday.defaultMessage!,\r\n  prevMonthAriaLabel: messages.prevMonthAriaLabel.defaultMessage!,\r\n  nextMonthAriaLabel: messages.nextMonthAriaLabel.defaultMessage!,\r\n  prevYearAriaLabel: messages.prevYearAriaLabel.defaultMessage!,\r\n  nextYearAriaLabel: messages.nextYearAriaLabel.defaultMessage!,\r\n  closeButtonAriaLabel: messages.closeButtonAriaLabel.defaultMessage!,\r\n  isRequiredErrorMessage: messages.isRequiredErrorMessage.defaultMessage!,\r\n  invalidInputErrorMessage: messages.invalidDateErrorMessage.defaultMessage!,\r\n};\r\n","import { getTheme, mergeStyleSets } from '@fluentui/react';\r\nimport { IPubCenterFonts, IPubcenterSpacing } from '../../../theme';\r\nimport { ICommonStyleProps } from '../../types';\r\n\r\ntype StyleProperties = 'actionButtonsWrapper' | 'gridActionButton' | 'gridCell';\r\ntype GridCommonStyles = Record<StyleProperties, string>;\r\n\r\nconst getStyles = (props: ICommonStyleProps): GridCommonStyles => {\r\n  const spacing = props.theme.spacing as IPubcenterSpacing;\r\n  const { semanticColors: s } = props.theme;\r\n  const { size14 } = props.theme.fonts as IPubCenterFonts;\r\n\r\n  return mergeStyleSets({\r\n    actionButtonsWrapper: {\r\n      display: 'flex',\r\n      gap: spacing.size8,\r\n    },\r\n    gridActionButton: {\r\n      root: {\r\n        color: s.primaryButtonBackground,\r\n        ...size14,\r\n        height: spacing.size36,\r\n      },\r\n      rootHovered: {\r\n        color: s.primaryButtonBackgroundHovered,\r\n      },\r\n      rootPressed: {\r\n        color: s.primaryButtonBackgroundPressed,\r\n      },\r\n    },\r\n    gridCell: {\r\n      userSelect: 'text',\r\n      cursor: 'text',\r\n      width: 'fit-content',\r\n      lineHeight: spacing.size20,\r\n      margin: spacing.size8,\r\n      overflow: 'hidden',\r\n      textOverflow: 'ellipsis',\r\n    },\r\n  });\r\n};\r\n\r\nexport function getGridClassNames<PropType>(props?: PropType): GridCommonStyles {\r\n  return getStyles({ theme: getTheme(), ...props });\r\n}\r\n","import React from 'react';\r\nimport { getGridClassNames } from './GridCommonStyles';\r\n\r\nexport function GridCell({ children }): JSX.Element {\r\n  const { gridCell } = getGridClassNames();\r\n  return (\r\n    <div title={typeof children === 'string' ? children : ''} className={gridCell}>\r\n      {children}\r\n    </div>\r\n  );\r\n}\r\n","import { defineMessages } from 'react-intl';\r\n\r\nexport const notificationMessages = defineMessages({\r\n  setupPaymentButton: {\r\n    id: 'payment.setup.notification.button',\r\n    defaultMessage: 'Set up payments',\r\n  },\r\n  setupPaymentNotificationBoldedText: {\r\n    id: 'payment.setup.notification.bolded.text',\r\n    defaultMessage: 'You’ll need to set up your payment to start earning with {appName}.',\r\n  },\r\n  setupPaymentNotificationText: {\r\n    id: 'payment.setup.notification.text',\r\n    defaultMessage: `Add your payment details to get started.`,\r\n  },\r\n  loadXPayContainerFailed: {\r\n    id: 'payment.xPay.container.load.fail',\r\n    defaultMessage: 'Failed to load xPay container, please try again later.',\r\n  },\r\n});\r\n\r\nexport const paymentCheerMessages = defineMessages({\r\n  cheerMessageTitle: {\r\n    id: 'payment.cheerMessage.title',\r\n    defaultMessage: ' Your payout is ready.',\r\n  },\r\n  cheerMessageContent: {\r\n    id: 'payment.cheerMessage.content',\r\n    defaultMessage: 'You’ll need to set up your payment information to receive your payout. Add your payment details to get started.',\r\n  },\r\n  cheerMessageButtonAction: {\r\n    id: 'payment.cheerMessage.button.action',\r\n    defaultMessage: `Set up payments`,\r\n  },\r\n  cheerMessageButtonCancel: {\r\n    id: 'payment.cheerMessage.button.cancel',\r\n    defaultMessage: `Remind me later`,\r\n  },\r\n  cheerMessageCancelArialabel: {\r\n    id: 'payment.cheerMessage.button.cancel.ariaLabel',\r\n    defaultMessage: 'Close payment cheer message',\r\n  },\r\n});\r\n","import { defineMessages } from 'react-intl';\r\n\r\nexport default defineMessages({\r\n  customLabel: {\r\n    id: 'customCalender.CustomLabel',\r\n    defaultMessage: 'Custom',\r\n  },\r\n  todayLabel: {\r\n    id: 'customCalender.todayLabel',\r\n    defaultMessage: 'Today',\r\n  },\r\n  yesterdayLabel: {\r\n    id: 'customCalender.yesterdayLabel',\r\n    defaultMessage: 'Yesterday',\r\n  },\r\n  sundayTodayLabel: {\r\n    id: 'customCalender.yesterdayLabel',\r\n    defaultMessage: 'This week (Sun - Today)',\r\n  },\r\n  mondayTodayLabel: {\r\n    id: 'customCalender.sundayTodayLabel',\r\n    defaultMessage: 'This week (Mon - Today)',\r\n  },\r\n  last7FromTodayLabel: {\r\n    id: 'customCalender.mondayTodayLabel',\r\n    defaultMessage: 'Last 7 days',\r\n  },\r\n  last7FromSunToSatLabel: {\r\n    id: 'customCalender.last7FromSunToSatLabel',\r\n    defaultMessage: 'Last week (Sun - Sat)',\r\n  },\r\n});\r\n","import React from 'react';\r\n\r\nexport interface IExternalLinkProps extends React.HTMLProps<HTMLAnchorElement> {}\r\n\r\nexport function ExternalLink(props: IExternalLinkProps) {\r\n  return (\r\n    <a {...props} target=\"_blank\" rel=\"noopener noreferrer\">\r\n      {props.children}\r\n    </a>\r\n  );\r\n}\r\n","import { ITooltipHostProps, TooltipHost } from '@fluentui/react';\r\nimport React from 'react';\r\n\r\nexport interface IConditionalTooltipProps extends ITooltipHostProps {\r\n  showTooltip?: boolean;\r\n  targetSelector?: string;\r\n  children: React.ReactNode;\r\n}\r\n\r\nexport function ConditionalTooltip({ showTooltip = false, children, targetSelector, ...tooltipHostProps }: IConditionalTooltipProps) {\r\n  if (showTooltip) {\r\n    return (\r\n      <TooltipHost calloutProps={{ target: targetSelector, gapSpace: 0 }} {...tooltipHostProps}>\r\n        {children}\r\n      </TooltipHost>\r\n    );\r\n  }\r\n\r\n  return <>{children}</>;\r\n}\r\n","import { createStore } from 'satcheljs';\r\nimport { IWindowsAppFeatureFlag } from '../types';\r\n\r\nexport const getStore = createStore<IWindowsAppFeatureFlag>('WindowsAppFeatureFlag', {\r\n  isLoading: false,\r\n  isFeatureEnabled: undefined,\r\n});\r\n","import { getTheme, mergeStyleSets } from '@fluentui/react';\r\nimport { AccessibilityContrast, IPubcenterSpacing } from '../../../../../../theme';\r\nimport { ICommonStyleProps } from '../../../../../types';\r\n\r\ntype StyleProperties = 'container' | 'headerSection';\r\ntype SetupCardStyles = Record<StyleProperties, string>;\r\n\r\nexport const getStyles = (props: ICommonStyleProps): SetupCardStyles => {\r\n  const { theme } = props;\r\n  const spacing = theme.spacing as IPubcenterSpacing;\r\n  const { Activated } = AccessibilityContrast;\r\n\r\n  return mergeStyleSets({\r\n    container: {\r\n      display: 'grid',\r\n      gridTemplateColumns: `repeat(auto-fit, minmax(${spacing.size320}, 1fr))`,\r\n      gap: spacing.size14,\r\n      justifyContent: 'space-between',\r\n      cursor: 'pointer',\r\n      [Activated]: {\r\n        color: 'windowtext',\r\n        borderColor: 'window',\r\n        forcedColorAdjust: 'none',\r\n      },\r\n    },\r\n    headerSection: {\r\n      margin: `${spacing.size15} 0`,\r\n      fontSize: spacing.size20,\r\n      fontWeight: '600',\r\n    },\r\n  });\r\n};\r\n\r\nexport function getClassNames<PropType>(props?: PropType) {\r\n  return getStyles({ theme: getTheme(), ...props });\r\n}\r\n","import { FontWeights, getTheme, mergeStyleSets } from '@fluentui/react';\r\nimport { IPubCenterFonts, IPubcenterPalette, IPubcenterSpacing } from '../../../../../../../theme';\r\nimport { ICommonStyleProps } from '../../../../../../types';\r\n\r\ntype StyleProperties = 'container';\r\n\r\ntype SetupCardStyles = Record<StyleProperties, string>;\r\n\r\nexport const getStyles = (props: ICommonStyleProps): SetupCardStyles => {\r\n  const { theme } = props;\r\n  const spacing = theme.spacing as IPubcenterSpacing;\r\n  const palette = theme.palette as IPubcenterPalette;\r\n  const fonts = theme.fonts as IPubCenterFonts;\r\n\r\n  return mergeStyleSets({\r\n    container: {\r\n      width: '100%',\r\n      display: 'flex',\r\n      boxShadow: `0px 0px ${spacing.size7} 0px rgba(0,0,0,0.2)`,\r\n      borderRadius: spacing.size4,\r\n      transition: 'all 0.5s',\r\n      img: {\r\n        marginLeft: spacing.size12,\r\n      },\r\n      '& i': {\r\n        background: palette.themeLighterAlt,\r\n        color: palette.themePrimary,\r\n        fontSize: spacing.size20,\r\n        padding: spacing.size24,\r\n      },\r\n      '& div:nth-child(2)': {\r\n        display: 'flex',\r\n        flexDirection: 'column',\r\n        padding: spacing.size14,\r\n        '& span:nth-child(2)': {\r\n          color: palette.neutralSecondary,\r\n        },\r\n        '& span:nth-child(1)': {\r\n          fontSize: fonts.size16,\r\n          fontWeight: FontWeights.semibold,\r\n        },\r\n      },\r\n    },\r\n  });\r\n};\r\n\r\nexport function getClassNames<PropType>(props?: PropType) {\r\n  return getStyles({ theme: getTheme(), ...props });\r\n}\r\n","import React from 'react';\r\nimport { InjectedIntlProps } from 'react-intl';\r\nimport { injectIntlAndObserver } from '../../../../../../utils';\r\nimport { isButtonPressKey } from '../../../../../../utils/AccessibilityUtils';\r\nimport { getClassNames } from './ResourceCard.styles';\r\n\r\nexport interface IResourceCardProps {\r\n  icon?: string;\r\n  iconAlt?: string;\r\n  title: string;\r\n  description: string;\r\n  onClick?: () => void;\r\n  wrapperRef?: React.RefObject<HTMLDivElement>;\r\n  handleIconClick?: (event: React.MouseEvent<HTMLElement, MouseEvent>) => void;\r\n}\r\n\r\nconst ResourceCard = injectIntlAndObserver<InjectedIntlProps & IResourceCardProps>(({ intl, ...props }) => {\r\n  const { icon, iconAlt, title, description, onClick, handleIconClick, wrapperRef } = props;\r\n  const { container } = getClassNames();\r\n\r\n  return (\r\n    <div\r\n      ref={wrapperRef}\r\n      className={container}\r\n      onClick={onClick}\r\n      onKeyDown={(ev) => isButtonPressKey(ev.key) && onClick?.()}\r\n      tabIndex={onClick ? 0 : -1}\r\n      aria-label={title + ' ' + description}\r\n    >\r\n      {(!!icon || !!iconAlt) && <img src={icon} alt={iconAlt} onClick={handleIconClick} />}\r\n\r\n      <div>\r\n        <span>{description}</span>\r\n        <span>{title}</span>\r\n      </div>\r\n    </div>\r\n  );\r\n});\r\n\r\nexport default ResourceCard;\r\n","import { Panel, PanelType } from '@fluentui/react';\r\nimport React from 'react';\r\nimport { isTythonSelfServeUser } from '../../../../../../@data';\r\nimport AppMessages from '../../../../../../App.messages';\r\nimport { IHeaderItem, PanelTypes } from '../../../../../../components/Header/Header.types';\r\nimport { APP_NAME_NEW, CUSTOM_WIDTH } from '../../../../../../constants/AppConstants';\r\nimport { FeedbackPanel, renderFooterContent } from '../../../../../../layout/PageLayout/header-panels';\r\nimport messages from '../ResourcesSection.messages';\r\n\r\ninterface IHeaderData {\r\n  items?: IHeaderItem[];\r\n}\r\n\r\nexport const getHeaderItems = (CMUIHeaderMenuItemSerializer, formatMessage) => {\r\n  const items: IHeaderItem[] = [\r\n    {\r\n      key: 'feedback',\r\n      icon: 'Feedback',\r\n      title: formatMessage(messages.feedbackTitle, { appName: APP_NAME_NEW }),\r\n      type: PanelTypes.Feedback,\r\n      panel: FeedbackPanel,\r\n      panelProps: {\r\n        isFooterAtBottom: true,\r\n        onRenderFooterContent: renderFooterContent,\r\n      },\r\n      shouldOverflowUnderExtraSmallScreen: true,\r\n    },\r\n  ];\r\n\r\n  const itemsData: IHeaderData = {\r\n    items: CMUIHeaderMenuItemSerializer(isTythonSelfServeUser(), items),\r\n  };\r\n\r\n  return itemsData;\r\n};\r\n\r\nexport const createPanel = (item: IHeaderItem, isFeedbackOpen: boolean, formatMessage, setIsFeedbackOpen): JSX.Element => {\r\n  // For icons such as CMUI help icon, panels are integrated with 3rd party libraries no need to render native panel\r\n  if (item && !item.panel) {\r\n    return <></>;\r\n  }\r\n\r\n  return (\r\n    <Panel\r\n      headerText={item?.title}\r\n      type={PanelType.custom}\r\n      customWidth={CUSTOM_WIDTH}\r\n      isOpen={isFeedbackOpen}\r\n      isLightDismiss={true}\r\n      onDismiss={() => hidePanel(setIsFeedbackOpen)}\r\n      closeButtonAriaLabel={formatMessage(AppMessages.close)}\r\n      isFooterAtBottom={item?.panelProps?.isFooterAtBottom}\r\n      onRenderFooterContent={() => item?.panelProps?.onRenderFooterContent?.({ onDismiss: () => hidePanel(setIsFeedbackOpen) }) || null}\r\n    >\r\n      {item?.panel ? React.cloneElement(<item.panel />, { hidePanel: () => hidePanel(setIsFeedbackOpen) }) : <p>Loading...</p>}\r\n    </Panel>\r\n  );\r\n};\r\n\r\nexport const showPanel = (setIsFeedbackOpen) => {\r\n  setIsFeedbackOpen(true);\r\n};\r\n\r\nconst hidePanel = (setIsFeedbackOpen) => {\r\n  setIsFeedbackOpen(false);\r\n};\r\n","import React, { useState } from 'react';\r\nimport { InjectedIntlProps } from 'react-intl';\r\nimport { SupportPageRoute } from '../../../../../Routes';\r\nimport { IHeaderItem } from '../../../../../components/Header/Header.types';\r\nimport { APP_NAME_NEW } from '../../../../../constants/AppConstants';\r\nimport { useCMUIHelpExperience, usePreloadSVGImages } from '../../../../../hooks';\r\nimport { injectIntlAndObserver } from '../../../../../utils';\r\nimport messages from './ResourcesSection.messages';\r\nimport { getClassNames } from './ResourcesSection.styles';\r\nimport ResourceCard, { IResourceCardProps } from './components/ResourceCard';\r\nimport DocumentationIcon from './resources/DocumentationCenterIcon.svg';\r\nimport FeedBackIcon from './resources/FeedBackIcon.svg';\r\nimport SupportTeamIcon from './resources/SupportTeamIcon.svg';\r\nimport { createPanel, getHeaderItems, showPanel } from './utils/utils';\r\n\r\ninterface IHeaderData {\r\n  items?: IHeaderItem[];\r\n}\r\n\r\nexport const connectToSupportTeam = (titleParam?: string) => {\r\n  window.open(titleParam ? `${SupportPageRoute}?${titleParam}` : SupportPageRoute, '_blank');\r\n};\r\n\r\nconst ResourceSection = injectIntlAndObserver<InjectedIntlProps>(({ intl: { formatMessage } }) => {\r\n  const imgPreloadQueue = [DocumentationIcon, SupportTeamIcon, FeedBackIcon];\r\n  usePreloadSVGImages(imgPreloadQueue);\r\n  const { container, headerSection } = getClassNames();\r\n  const { CMUIHeaderMenuItemSerializer } = useCMUIHelpExperience();\r\n  const [isFeedbackOpen, setIsFeedbackOpen] = useState(false);\r\n\r\n  const itemsData: IHeaderData = getHeaderItems(CMUIHeaderMenuItemSerializer, formatMessage);\r\n\r\n  const resources: IResourceCardProps[] = [\r\n    {\r\n      icon: DocumentationIcon,\r\n      iconAlt: formatMessage(messages.learnTitle),\r\n      title: formatMessage(messages.learnTitle),\r\n      description: formatMessage(messages.learnDescription),\r\n      onClick: () => window.open('https://help.ads.microsoft.com/#apex/pcv4/en/07501/-1', '_blank'),\r\n    },\r\n    {\r\n      icon: SupportTeamIcon,\r\n      iconAlt: formatMessage(messages.assistanceTitle),\r\n      title: formatMessage(messages.assistanceTitle),\r\n      description: formatMessage(messages.assistanceDescription),\r\n      onClick: () => {\r\n        connectToSupportTeam();\r\n      },\r\n    },\r\n    {\r\n      icon: FeedBackIcon, // AccountManagement -> FeedbackIcon\r\n      iconAlt: formatMessage(messages.improveTitle, { appName: APP_NAME_NEW }),\r\n      title: formatMessage(messages.improveTitle, { appName: APP_NAME_NEW }),\r\n      description: formatMessage(messages.improveDescription),\r\n      onClick: () => {\r\n        showPanel(setIsFeedbackOpen);\r\n      },\r\n    },\r\n  ];\r\n\r\n  return (\r\n    <>\r\n      <h2 className={headerSection}>{formatMessage(messages.resourceTitle)}</h2>\r\n      {createPanel(itemsData.items![1], isFeedbackOpen, formatMessage, setIsFeedbackOpen)}\r\n      <div className={container}>\r\n        {resources.map((resource, index) => (\r\n          <ResourceCard key={index} {...resource} />\r\n        ))}\r\n      </div>\r\n    </>\r\n  );\r\n});\r\n\r\nexport default ResourceSection;\r\n","import { mutator } from 'satcheljs';\r\nimport { setNotificationPanelTriggered } from '../actions';\r\nimport { getStore } from '../store/store';\r\n\r\nmutator(setNotificationPanelTriggered, (msg) => {\r\n  getStore().isNotificationPanelTrigerred = msg.isTrigerred;\r\n});\r\n","import React from 'react';\r\nimport { RouteComponentProps } from 'react-router-dom';\r\nimport { LazyComponent } from '../../../components/LazyComponents';\r\n\r\nconst AdBlockPageLazy = React.lazy(() => import('./AdBlockPage'));\r\n\r\nexport function LazyAdBlockPage(props: RouteComponentProps) {\r\n  return <LazyComponent lazyComponent={<AdBlockPageLazy {...props} />} />;\r\n}\r\n","import { action } from 'satcheljs';\r\nimport { Filter, IStringDictionary } from '../../../../../@data';\r\nimport { IFilterViewModel } from '../store/schema';\r\n\r\nexport const onRawChanged = action('onRawChanged', (value?: Filter) => ({ value }));\r\n\r\nexport const onFilterChanged = action('onFilterChanged', (filter: IFilterViewModel) => ({ filter }));\r\n\r\nexport const onFilterErrorChanged = action('onFilterErrorChanged', (values?: IStringDictionary) => ({ values }));\r\n\r\nexport const onFetchFiltersLoading = action('onFetchFiltersLoading', (isLoading: boolean) => ({ isLoading }));\r\n\r\nexport const onFetchingFiltersData = action('onFetchingFiltersData', (isFetchingData: boolean) => ({ isFetchingData }));\r\n\r\nexport const onFiltersFetched = action('onFiltersFetched', (items: Filter[]) => ({ items }));\r\n","import { IChoiceGroupOption, IDropdownOption } from '@fluentui/react';\r\nimport { History } from 'history';\r\nimport { action } from 'satcheljs';\r\nimport { FormState } from '../../../../../components/Form';\r\nimport { IIdNamePair } from '../../../../../components/MultiSelectPicker';\r\n\r\nexport const onFormIdChanged = action('onFormIdChanged', (value: number) => ({ value }));\r\n\r\nexport const onFormFilterNameChanged = action('onFormFilterNameChanged', (value?: string) => ({ value }));\r\n\r\nexport const onFormFilterTypeChanged = action('onFormFilterTypeChanged', (value: IDropdownOption) => ({ value }));\r\n\r\nexport const onFormChannelsChanged = action('onFormChannelsChanged', (values?: IIdNamePair[]) => ({ values }));\r\n\r\nexport const onFilterChannelListChanged = action('onFilterChannelListChanged', (values?: IIdNamePair[]) => ({ values }));\r\n\r\nexport const onFilterUpdateTypeChanged = action('onFilterUpdateTypeChanged', (value: IChoiceGroupOption) => ({ value }));\r\n\r\nexport const onfilterItemsEntryTypeChanged = action('onfilterItemsEntryTypeChanged', (value: IChoiceGroupOption) => ({ value }));\r\n\r\nexport const onFormExludedUrlChanged = action('onFormExludedUrlChanged', (value?: string) => ({ value }));\r\n\r\nexport const onFormExludedAdKeywordChanged = action('onFormExludedAdKeywordChanged', (value?: string) => ({ value }));\r\n\r\nexport const onFormExludedQueryKeywordChanged = action('onFormExludedQueryKeywordChanged', (value?: string) => ({ value }));\r\n\r\nexport const onFormAppendExcludedUrlsChanged = action('onFormAppendExcludedUrlsChanged', (value?: string) => ({ value }));\r\n\r\nexport const onFormAppendExcludedAdKeywordsChanged = action('onFormAppendExcludedAdKeywordsChanged', (value?: string) => ({ value }));\r\n\r\nexport const onFormAppendExcludedQueryKeywordsChanged = action('onFormAppendExcludedQueryKeywordsChanged', (value?: string) => ({ value }));\r\n\r\nexport const onFormDownloadClicked = action('onFormDownloadClicked', (value: string) => ({ value }));\r\n\r\nexport const onFormDownloadExcludedUrlLoading = action('onFormDownloadExcludedUrlLoading', (value: boolean) => ({ value }));\r\n\r\nexport const onFormDownloadExcludedAdkeywordLoading = action('onFormDownloadExcludedAdkeywordLoading', (value: boolean) => ({ value }));\r\n\r\nexport const onFormDownloadExcludedQuerykeywordLoading = action('onFormDownloadExcludedQuerykeywordLoading', (value: boolean) => ({\r\n  value,\r\n}));\r\n\r\nexport const onFormFilterStartTimeChanged = action('onFormFilterStartTimeChanged', (value?: Date) => ({ value }));\r\n\r\nexport const onFormFilterEndTimeChanged = action('onFormFilterEndTimeChanged', (value?: Date) => ({ value }));\r\n\r\nexport const onFormResetTimeRange = action('onFormResetTimeRange');\r\nexport const onFormUndoTimeRange = action('onFormUndoTimeRange');\r\n\r\nexport const onFormInitialized = action(\r\n  'onFormInitialized',\r\n  (mode: FormState, publisherId: string, accountId: string, entityId?: string) => ({ mode, publisherId, accountId, entityId })\r\n);\r\n\r\nexport const onFormSubmitted = action('onFormSubmitted', (mode: FormState, routeHistory?: History) => ({ mode, routeHistory }));\r\n\r\nexport const onFormCancelled = action('onFormCancelled');\r\n\r\nexport const onFormCleared = action('onFormCleared');\r\n","import { action } from 'satcheljs';\r\n\r\nexport const onManagePageInitialized = action('onManagePageInitialized');\r\n","import { createStore } from 'satcheljs';\r\nimport { IFilterViewState } from './schema/IFilterViewState';\r\n\r\nexport const getFilterStore = createStore<IFilterViewState>('FilterState', {\r\n  active: {},\r\n  errors: {}\r\n});\r\n","import { mutator } from 'satcheljs';\r\nimport { Filter } from '../../../../../@data';\r\nimport { mergeTypeWithObject } from '../../../../../utils/ObjectUtils';\r\nimport {\r\n  onFetchFiltersLoading,\r\n  onFetchingFiltersData,\r\n  onFilterChanged,\r\n  onFilterErrorChanged,\r\n  onFiltersFetched,\r\n  onRawChanged,\r\n} from '../actions';\r\nimport { getFilterStore } from '../store/store';\r\n\r\nmutator(onRawChanged, (msg) => {\r\n  getFilterStore().raw = mergeTypeWithObject(new Filter(), msg.value);\r\n});\r\n\r\nmutator(onFilterChanged, (msg) => {\r\n  getFilterStore().active = msg.filter;\r\n});\r\n\r\nmutator(onFilterErrorChanged, (msg) => {\r\n  getFilterStore().errors = msg.values || {};\r\n});\r\n\r\nmutator(onFetchFiltersLoading, (msg) => {\r\n  getFilterStore().isLoading = msg.isLoading;\r\n});\r\n\r\nmutator(onFetchingFiltersData, (msg) => {\r\n  getFilterStore().isFetchingData = msg.isFetchingData;\r\n});\r\n\r\nmutator(onFiltersFetched, (msg) => {\r\n  getFilterStore().gridFilters = msg.items;\r\n});\r\n","import { mutator } from 'satcheljs';\r\nimport { FilterScope } from '../../../../../@data';\r\nimport {\r\n  onFilterChannelListChanged,\r\n  onfilterItemsEntryTypeChanged,\r\n  onFilterUpdateTypeChanged,\r\n  onFormAppendExcludedAdKeywordsChanged,\r\n  onFormAppendExcludedQueryKeywordsChanged,\r\n  onFormAppendExcludedUrlsChanged,\r\n  onFormChannelsChanged,\r\n  onFormCleared,\r\n  onFormDownloadExcludedAdkeywordLoading,\r\n  onFormDownloadExcludedQuerykeywordLoading,\r\n  onFormDownloadExcludedUrlLoading,\r\n  onFormExludedAdKeywordChanged,\r\n  onFormExludedQueryKeywordChanged,\r\n  onFormExludedUrlChanged,\r\n  onFormFilterEndTimeChanged,\r\n  onFormFilterNameChanged,\r\n  onFormFilterStartTimeChanged,\r\n  onFormFilterTypeChanged,\r\n  onFormIdChanged,\r\n  onFormResetTimeRange,\r\n  onFormUndoTimeRange,\r\n} from '../actions';\r\nimport { IFilterViewModel } from '../store/schema';\r\nimport { getFilterStore } from '../store/store';\r\n\r\nmutator(onFormIdChanged, (msg) => {\r\n  getFilterStore().active.id = msg.value;\r\n});\r\n\r\nmutator(onFormFilterNameChanged, (msg) => {\r\n  getFilterStore().active.name = msg.value;\r\n});\r\n\r\nmutator(onFormFilterNameChanged, (msg) => {\r\n  getFilterStore().active.name = msg.value;\r\n});\r\n\r\nmutator(onFormFilterTypeChanged, (msg) => {\r\n  const filterModel: IFilterViewModel = {\r\n    ...getFilterStore().active,\r\n  };\r\n  filterModel.filterType = msg.value.key as FilterScope;\r\n  getFilterStore().active = filterModel;\r\n});\r\n\r\nmutator(onFormChannelsChanged, (msg) => {\r\n  getFilterStore().active.channelsSelected = msg.values;\r\n});\r\n\r\nmutator(onFilterChannelListChanged, (msg) => {\r\n  getFilterStore().active.channels = msg.values;\r\n});\r\n\r\nmutator(onFilterUpdateTypeChanged, (msg) => {\r\n  const filterModel: IFilterViewModel = {\r\n    ...getFilterStore().active,\r\n  };\r\n  filterModel.appendOnly = msg.value.key === 'appendOnly' ? true : false;\r\n  getFilterStore().active = filterModel;\r\n});\r\n\r\nmutator(onfilterItemsEntryTypeChanged, (msg) => {\r\n  getFilterStore().active.filterItemsEntryType = msg.value.key;\r\n});\r\n\r\nmutator(onFormExludedUrlChanged, (msg) => {\r\n  getFilterStore().active.excludedUrls = msg.value;\r\n});\r\n\r\nmutator(onFormExludedAdKeywordChanged, (msg) => {\r\n  getFilterStore().active.excludedAdKeywords = msg.value;\r\n});\r\n\r\nmutator(onFormExludedQueryKeywordChanged, (msg) => {\r\n  getFilterStore().active.excludedQueryKeywords = msg.value;\r\n});\r\n\r\nmutator(onFormAppendExcludedUrlsChanged, (msg) => {\r\n  getFilterStore().active.appendExcludedUrls = msg.value;\r\n});\r\n\r\nmutator(onFormAppendExcludedAdKeywordsChanged, (msg) => {\r\n  getFilterStore().active.appendExcludedAdKeywords = msg.value;\r\n});\r\n\r\nmutator(onFormAppendExcludedQueryKeywordsChanged, (msg) => {\r\n  getFilterStore().active.appendExcludedQueryKeywords = msg.value;\r\n});\r\n\r\nmutator(onFormDownloadExcludedUrlLoading, (msg) => {\r\n  getFilterStore().active.downloadExcludedUrlLoading = msg.value;\r\n});\r\n\r\nmutator(onFormDownloadExcludedAdkeywordLoading, (msg) => {\r\n  getFilterStore().active.downloadExcludedAdkeywordLoading = msg.value;\r\n});\r\n\r\nmutator(onFormDownloadExcludedQuerykeywordLoading, (msg) => {\r\n  getFilterStore().active.downloadExcludedQueryKeywordLoading = msg.value;\r\n});\r\n\r\nmutator(onFormFilterStartTimeChanged, (msg) => {\r\n  getFilterStore().active.filterStartTime = msg.value;\r\n});\r\n\r\nmutator(onFormFilterEndTimeChanged, (msg) => {\r\n  getFilterStore().active.filterEndTime = msg.value;\r\n});\r\n\r\nmutator(onFormResetTimeRange, () => {\r\n  getFilterStore().active.filterStartTime = new Date();\r\n  getFilterStore().active.filterEndTime = undefined;\r\n});\r\n\r\nmutator(onFormUndoTimeRange, () => {\r\n  const { raw } = getFilterStore();\r\n  const localDate = new Date();\r\n  const UTCDate = new Date(\r\n    localDate.getUTCFullYear(),\r\n    localDate.getUTCMonth(),\r\n    localDate.getUTCDate(),\r\n    localDate.getUTCHours(),\r\n    localDate.getUTCMinutes()\r\n  );\r\n  getFilterStore().active.filterStartTime = raw && raw.startTimeStamp ? new Date(raw.startTimeStamp * 1000) : UTCDate;\r\n  getFilterStore().active.filterEndTime = raw && raw.endTimeStamp ? new Date(raw.endTimeStamp * 1000) : undefined;\r\n});\r\n\r\nmutator(onFormCleared, () => {\r\n  getFilterStore().active = {};\r\n});\r\n","import { orchestrator } from 'satcheljs';\r\nimport { onFormCancelled, onFormCleared } from '../actions';\r\n\r\norchestrator(onFormCancelled, () => {\r\n  onFormCleared();\r\n});\r\n","import { isTythonSelfServeUser } from '../../../@data';\r\nimport { FormState } from '../../../components/Form';\r\nimport { RoutePrefix } from '../../../Routes';\r\n\r\ntype IdType = number | string;\r\n\r\nexport function getMultiStepperRoute(\r\n  routeName: string,\r\n  operation: FormState,\r\n  publisherId: IdType,\r\n  accountId?: IdType,\r\n  entityId?: IdType,\r\n  step?: number,\r\n  showExtraBtns?: boolean\r\n): string {\r\n  const page = operation === FormState.MultiStepCreation || operation === FormState.Create ? 'create' : 'edit';\r\n  let base = '';\r\n  if (accountId) {\r\n    base = `/${RoutePrefix.adManagement}/${publisherId}-${accountId}/${routeName}/${page}`;\r\n  } else {\r\n    base = `/${RoutePrefix.adManagement}/${publisherId}/${routeName}/${page}`;\r\n  }\r\n\r\n  if (entityId && step !== undefined && showExtraBtns && isTythonSelfServeUser()) {\r\n    return `${base}/${entityId}?step=${step}&showExtraBtns=${showExtraBtns}`;\r\n  } else if (entityId && step !== undefined) {\r\n    return `${base}/${entityId}?step=${step}`;\r\n  } else if (entityId) {\r\n    return `${base}/${entityId}`;\r\n  }\r\n  return base;\r\n}\r\n","import { MessageBarType } from '@fluentui/react';\r\nimport { orchestrator } from 'satcheljs';\r\nimport { FilterDownloader, getAppStore, getEntity, onNotificationChanged } from '../../../../../@data';\r\nimport { INotificationBarItem } from '../../../../../components/NotificationBar';\r\nimport {\r\n  onFormDownloadClicked,\r\n  onFormDownloadExcludedAdkeywordLoading,\r\n  onFormDownloadExcludedQuerykeywordLoading,\r\n  onFormDownloadExcludedUrlLoading,\r\n} from '../actions';\r\nimport { getFilterStore } from '../store/store';\r\n\r\norchestrator(onFormDownloadClicked, async (msg) => {\r\n  const { publisher, userContext } = getAppStore();\r\n  const { active } = getFilterStore();\r\n\r\n  // TODO: Figure out how to internationalize orchestrators. #1632176\r\n  let notification: INotificationBarItem = {};\r\n\r\n  if (publisher) {\r\n    try {\r\n      const params = new URLSearchParams([['blockType', msg.value]]);\r\n\r\n      const filterDownloader: FilterDownloader = {\r\n        apiPath: undefined,\r\n        className: 'filterdownloader',\r\n        id: active.id,\r\n      };\r\n      switch (msg.value) {\r\n        case 'ExcludedURL':\r\n          onFormDownloadExcludedUrlLoading(true);\r\n          break;\r\n        case 'ExcludedAdKeyword':\r\n          onFormDownloadExcludedAdkeywordLoading(true);\r\n          break;\r\n        case 'ExcludedQueryKeyword':\r\n          onFormDownloadExcludedQuerykeywordLoading(true);\r\n          break;\r\n      }\r\n      const response = await getEntity<FilterDownloader>([publisher, filterDownloader], userContext, undefined, params);\r\n      const filterItems = response;\r\n\r\n      const a = document.createElement('a');\r\n      a.style.display = 'none';\r\n      a.href = filterItems.downloadUrl!;\r\n      document.body.appendChild(a);\r\n      a.click();\r\n      document.body.removeChild(a);\r\n\r\n      switch (msg.value) {\r\n        case 'ExcludedURL':\r\n          onFormDownloadExcludedUrlLoading(false);\r\n          break;\r\n        case 'ExcludedAdKeyword':\r\n          onFormDownloadExcludedAdkeywordLoading(false);\r\n          break;\r\n        case 'ExcludedQueryKeyword':\r\n          onFormDownloadExcludedQuerykeywordLoading(false);\r\n          break;\r\n      }\r\n\r\n      notification = {\r\n        text: `Download Filter_${active.id}_${msg.value}  success`,\r\n        messageBarType: MessageBarType.success,\r\n      };\r\n    } catch (e) {\r\n      notification = {\r\n        text: `Download Filter_${active.id}_${msg.value} caught an error \"${e}\"`,\r\n        messageBarType: MessageBarType.error,\r\n      };\r\n    }\r\n  } else {\r\n    notification = {\r\n      text: `No publisher is selected.`,\r\n      messageBarType: MessageBarType.error,\r\n    };\r\n  }\r\n\r\n  onNotificationChanged(notification);\r\n});\r\n","import {\r\n  Account,\r\n  getAppStore,\r\n  getEntity,\r\n  isTythonSelfServeUser,\r\n  onAccountChanged,\r\n  onPublisherChanged,\r\n  onSetFirstPartyBoost,\r\n  Publisher,\r\n} from '../../../../@data';\r\nimport { FormState } from '../../../../components/Form';\r\nimport { getMultiStepperRoute } from '../../../../layout/DetailPageWithStepper/utils/getMultiStepperRoute';\r\nimport { RoutePrefix } from '../../../../Routes';\r\nimport { RouteName } from '../store/store';\r\n\r\nexport async function setPublisherAndAccountContext(publisher: Publisher, account?: Account) {\r\n  const appStore = getAppStore();\r\n  if (appStore.publisher === undefined || appStore.publisher.id !== publisher.id) {\r\n    const publisherAsync = await getEntity<Publisher>([publisher], appStore.userContext);\r\n    onSetFirstPartyBoost(publisherAsync.publisherTier);\r\n\r\n    if (publisherAsync) {\r\n      const changedPublisher = new Publisher(publisherAsync.id, publisherAsync.name);\r\n      changedPublisher.publisherTier = publisherAsync.publisherTier;\r\n      onPublisherChanged(changedPublisher);\r\n    } else {\r\n      onPublisherChanged(undefined);\r\n    }\r\n  }\r\n\r\n  if (!!account) {\r\n    if (appStore.account === undefined || appStore.account.id !== account.id) {\r\n      if (appStore.account && appStore.account.id !== account.id && appStore.account.id === 0) {\r\n        // to allow adunit edit while all accounts option is selected\r\n        return;\r\n      }\r\n      const accountAsync = await getEntity([publisher, account], appStore.userContext);\r\n      if (accountAsync) {\r\n        onAccountChanged(new Account(accountAsync.id, accountAsync.name));\r\n      } else {\r\n        onAccountChanged(undefined);\r\n      }\r\n    }\r\n  }\r\n}\r\n\r\nexport function createReturnUrl(\r\n  entity: RouteName,\r\n  publisherId?: string,\r\n  accountId?: string,\r\n  id?: string,\r\n  formState?: FormState,\r\n  step?: number,\r\n  showExtraBtns?: boolean\r\n): string {\r\n  let returnUrl = `/${RoutePrefix.adManagement}/${RouteName[entity]}`;\r\n\r\n  switch (entity) {\r\n    case RouteName.property:\r\n      if (publisherId && !isTythonSelfServeUser()) {\r\n        returnUrl = `/${RoutePrefix.adManagement}/${publisherId}/${RouteName[entity]}`;\r\n      } else if (publisherId && isTythonSelfServeUser()) {\r\n        if (formState !== undefined) {\r\n          returnUrl = getMultiStepperRoute(RouteName[entity], formState, publisherId, accountId, id, step);\r\n        } else {\r\n          returnUrl = `/${RoutePrefix.adManagement}/${publisherId}/${RouteName[entity]}`;\r\n        }\r\n      }\r\n      break;\r\n    case RouteName.adunit:\r\n      if (publisherId && accountId === '0') {\r\n        returnUrl = `/${RoutePrefix.adManagement}/${publisherId}/${RouteName[entity]}`;\r\n      } else if (publisherId && accountId && formState !== undefined) {\r\n        returnUrl = getMultiStepperRoute(RouteName[entity], formState, publisherId, accountId, id, step, showExtraBtns);\r\n      } else {\r\n        returnUrl = `/${RoutePrefix.adManagement}/${publisherId}-${accountId}/${RouteName[entity]}`;\r\n      }\r\n      break;\r\n    case RouteName.inventory:\r\n    case RouteName.adfilter:\r\n    case RouteName.channel:\r\n    case RouteName.default:\r\n      if (publisherId && accountId) {\r\n        returnUrl = `/${RoutePrefix.adManagement}/${publisherId}-${accountId}/${RouteName[entity]}`;\r\n      }\r\n  }\r\n  return returnUrl;\r\n}\r\n","import { MessageBarType } from '@fluentui/react';\r\nimport { orchestrator } from 'satcheljs';\r\nimport {\r\n  Account,\r\n  Channel,\r\n  Filter,\r\n  FilterScope,\r\n  getAppStore,\r\n  listEntity,\r\n  onLoadingChanged,\r\n  onNotificationChanged,\r\n  Publisher,\r\n} from '../../../../../@data';\r\nimport { FormState } from '../../../../../components/Form';\r\nimport { IIdNamePair } from '../../../../../components/MultiSelectPicker';\r\nimport { setPublisherAndAccountContext } from '../../../@data/services/AdManagementService';\r\nimport { onFilterChanged, onFilterErrorChanged, onFormInitialized, onRawChanged } from '../actions';\r\nimport { fetchFilterById } from '../services/FilterService';\r\nimport { IFilterViewModel } from '../store/schema';\r\n\r\norchestrator(onFormInitialized, async (msg) => {\r\n  const { userContext } = getAppStore();\r\n\r\n  const viewModel: IFilterViewModel = {\r\n    channels: [],\r\n    filterType: FilterScope.Account,\r\n  };\r\n\r\n  const publisherId = parseInt(msg.publisherId, 10);\r\n  const accountId = parseInt(msg.accountId, 10);\r\n\r\n  if (!isNaN(publisherId) && !isNaN(accountId)) {\r\n    const publisher = new Publisher(publisherId);\r\n    const account = new Account(accountId);\r\n\r\n    try {\r\n      setPublisherAndAccountContext(publisher, account);\r\n\r\n      onFilterErrorChanged();\r\n      onLoadingChanged(true);\r\n\r\n      const response = await listEntity([publisher, account], userContext, Channel);\r\n      viewModel.channels = response ? response.map((f) => ({ id: f.id, name: f.name } as IIdNamePair)) : [];\r\n\r\n      const localeDate = new Date();\r\n      const UTCDate = new Date(\r\n        localeDate.getUTCFullYear(),\r\n        localeDate.getUTCMonth(),\r\n        localeDate.getUTCDate(),\r\n        localeDate.getUTCHours(),\r\n        localeDate.getUTCMinutes(),\r\n        0\r\n      );\r\n      // We decided to keep filter start time as current datetime by default.\r\n      viewModel.filterStartTime = UTCDate;\r\n      viewModel.filterItemsEntryType = 'manualEntry';\r\n\r\n      if (msg.mode === FormState.Edit && msg.entityId) {\r\n        const raw = await fetchFilterById(publisher, msg.entityId, userContext);\r\n\r\n        viewModel.id = raw.id;\r\n        viewModel.name = String(raw.name);\r\n        viewModel.appendOnly = raw.appendOnly;\r\n        viewModel.filterItemsEntryType = raw.appendOnly ? 'fileUpload' : 'manualEntry';\r\n\r\n        if (!viewModel.appendOnly) {\r\n          viewModel.excludedUrlsCount = raw.blockedUrls!.length;\r\n          viewModel.excludedAdkeywordsCount = raw.blockedAdKeywords!.length;\r\n          viewModel.excludedQueryKeywordsCount = raw.blockedQueryKeywords!.length;\r\n        } else {\r\n          const filterResponse = await listEntity([publisher, account], userContext, Filter);\r\n          const matchedFilter = filterResponse.filter((f) => f.id === raw.id)[0];\r\n\r\n          viewModel.excludedUrlsCount = matchedFilter.blockedUrlCount;\r\n          viewModel.excludedAdkeywordsCount = matchedFilter.blockedAdKeywordCount;\r\n          viewModel.excludedQueryKeywordsCount = matchedFilter.blockedQueryKeywordCount;\r\n        }\r\n\r\n        // Set filter Type to Standard as default.\r\n        viewModel.filterType = raw.filterScope || FilterScope.Account;\r\n\r\n        if (raw.blockedUrls) {\r\n          viewModel.excludedUrls = raw.blockedUrls.join('\\n');\r\n        }\r\n\r\n        if (raw.blockedAdKeywords) {\r\n          viewModel.excludedAdKeywords = raw.blockedAdKeywords.join('\\n');\r\n        }\r\n\r\n        if (raw.blockedQueryKeywords) {\r\n          viewModel.excludedQueryKeywords = raw.blockedQueryKeywords.join('\\n');\r\n        }\r\n\r\n        // Currently API accepts and returns start/end time in epoch. Converting epoch to Date type.\r\n        const timeZoneOffset = new Date().getTimezoneOffset();\r\n        viewModel.filterStartTime = raw.startTimeStamp ? new Date((raw.startTimeStamp + timeZoneOffset * 60) * 1000) : undefined;\r\n        viewModel.filterEndTime = raw.endTimeStamp ? new Date((raw.endTimeStamp + timeZoneOffset * 60) * 1000) : undefined;\r\n\r\n        viewModel.channelsSelected =\r\n          raw.associatedChannelIds && raw.associatedChannelIds.length > 0\r\n            ? viewModel.channels.filter((c) => raw.associatedChannelIds!.includes(c.id))\r\n            : [];\r\n\r\n        onRawChanged(raw);\r\n      } else {\r\n        onRawChanged();\r\n      }\r\n      onFilterChanged(viewModel);\r\n    } catch (e) {\r\n      onNotificationChanged({\r\n        text: 'Failed to load entity',\r\n        messageBarType: MessageBarType.severeWarning,\r\n      });\r\n    } finally {\r\n      onLoadingChanged(false);\r\n    }\r\n  } else {\r\n    onNotificationChanged({\r\n      text: `You have arrived in an invalid state, please report.`,\r\n      messageBarType: MessageBarType.severeWarning,\r\n    });\r\n  }\r\n});\r\n","import { Filter, listEntity, Publisher, UserContext } from '../../../../../@data';\r\n\r\nexport const fetchFilterById = async (publisher: Publisher, id: string, userContext?: UserContext): Promise<Filter> => {\r\n  const list = await listEntity([publisher], userContext, Filter, new URLSearchParams([['ids', id]]));\r\n\r\n  if (!list || !list.length) {\r\n    throw Error('Cannot find filter Id');\r\n  }\r\n\r\n  return list[0];\r\n};","import { MessageBarType } from '@fluentui/react';\r\nimport { orchestrator } from 'satcheljs';\r\nimport {\r\n  Filter,\r\n  FilterScope,\r\n  getAppStore,\r\n  onNavigateBack,\r\n  onNotificationChanged,\r\n  onSavingChanged,\r\n  postEntity,\r\n  putEntity,\r\n} from '../../../../../@data';\r\nimport { FormState } from '../../../../../components/Form';\r\nimport { INotificationBarItem } from '../../../../../components/NotificationBar';\r\nimport { stringToList, validateSchema } from '../../../../../utils';\r\nimport { RouteName } from '../../../@data';\r\nimport { createReturnUrl } from '../../../@data/services/AdManagementService';\r\nimport { onFilterErrorChanged, onFormCleared, onFormIdChanged, onFormSubmitted } from '../actions';\r\nimport { filterErrorModel } from '../store/schema/FilterErrorModel';\r\nimport { getFilterStore } from '../store/store';\r\n\r\norchestrator(onFormSubmitted, async (msg) => {\r\n  const { publisher, userContext, account } = getAppStore();\r\n  const { active, raw } = getFilterStore();\r\n\r\n  // TODO: Figure out how to internationalize orchestrators. #1632176\r\n  let notification: INotificationBarItem = {};\r\n\r\n  if (publisher && account && raw) {\r\n    const body: Filter = {\r\n      ...raw,\r\n      id: active.id,\r\n      name: active.name,\r\n    };\r\n\r\n    let excludedUrls, excludedAdKeywords, excludedQueryKeywords;\r\n    if (active.filterItemsEntryType === 'manualEntry') {\r\n      excludedUrls = active.excludedUrls;\r\n      excludedAdKeywords = active.excludedAdKeywords;\r\n      excludedQueryKeywords = active.excludedQueryKeywords;\r\n    } else {\r\n      excludedUrls = active.appendExcludedUrls;\r\n      excludedAdKeywords = active.appendExcludedAdKeywords;\r\n      excludedQueryKeywords = active.appendExcludedQueryKeywords;\r\n    }\r\n\r\n    try {\r\n      await validateSchema(filterErrorModel(), active);\r\n      onFilterErrorChanged();\r\n    } catch (e) {\r\n      onFilterErrorChanged(e);\r\n      onNotificationChanged({\r\n        text: `Filter - You have ${Object.keys(e).length} missing fields, please fill them to continue.`,\r\n        messageBarType: MessageBarType.severeWarning,\r\n      });\r\n      return;\r\n    }\r\n    onSavingChanged(true);\r\n\r\n    body.filterScope = active.filterType;\r\n    body.scopeId = active.filterType === FilterScope.Account ? account.id : publisher.id;\r\n    body.associatedChannelIds =\r\n      active.channelsSelected && active.filterType === FilterScope.Account ? active.channelsSelected.map((m) => m.id) : [];\r\n\r\n    const blockedAdKeywordsList: string[] = stringToList(excludedAdKeywords);\r\n    body.blockedAdKeywords = blockedAdKeywordsList;\r\n\r\n    const excludedQueryKeywordsList: string[] = stringToList(excludedQueryKeywords);\r\n    body.blockedQueryKeywords = excludedQueryKeywordsList;\r\n\r\n    const excludedUrlsList: string[] = stringToList(excludedUrls);\r\n    body.blockedUrls = excludedUrlsList;\r\n\r\n    body.appendOnly = active.appendOnly;\r\n\r\n    const timeZoneOffset = new Date().getTimezoneOffset();\r\n    body.startTimeStamp =\r\n      active.filterStartTime !== undefined\r\n        ? Math.floor((active.filterStartTime!.getTime() - timeZoneOffset * 60 * 1000) / 1000)\r\n        : undefined;\r\n    body.endTimeStamp =\r\n      active.filterEndTime !== undefined ? Math.floor((active.filterEndTime!.getTime() - timeZoneOffset * 60 * 1000) / 1000) : undefined;\r\n\r\n    try {\r\n      let entity: Filter | undefined;\r\n\r\n      if (msg.mode === FormState.Edit) {\r\n        entity = await putEntity([publisher], body, userContext, Filter);\r\n\r\n        notification = {\r\n          text: `Edited ad filter ${entity.id} success`,\r\n          messageBarType: MessageBarType.success,\r\n        };\r\n      } else {\r\n        entity = await postEntity([publisher], Filter, body, userContext);\r\n\r\n        if (entity && entity.id) {\r\n          onFormIdChanged(entity.id);\r\n        }\r\n\r\n        notification = {\r\n          text: `Created new ad filter ${entity.id} success`,\r\n          messageBarType: MessageBarType.success,\r\n        };\r\n      }\r\n\r\n      // return to manage page\r\n      const returnUrl = createReturnUrl(RouteName.adfilter, String(publisher.id), String(account.id));\r\n      onNavigateBack(msg.routeHistory, returnUrl);\r\n      onFormCleared();\r\n    } catch (e) {\r\n      notification = {\r\n        text: `Submitting the adfilter form \"${FormState[msg.mode]}\" caught an error \"${e}\"`,\r\n        messageBarType: MessageBarType.error,\r\n      };\r\n    } finally {\r\n      onSavingChanged(false);\r\n    }\r\n  } else {\r\n    notification = {\r\n      text: `Adfilter form \"${FormState[msg.mode]}\" is invalid id ${active.id}`,\r\n      messageBarType: MessageBarType.warning,\r\n    };\r\n  }\r\n\r\n  onNotificationChanged(notification);\r\n});\r\n","import { array, mixed, object, string } from 'yup';\r\nimport { FilterScope, IdNamePairErrorModel } from '../../../../../../@data/store/schema';\r\nimport { ArrayObservableSchemaYupType, StringListSchemaYupType } from '../../../../../../utils/validation';\r\nimport { IFilterViewModel } from './IFilterViewModel';\r\n\r\nexport function filterErrorModel() {\r\n  return object<IFilterViewModel>().shape({\r\n    name: string().trim().required(),\r\n    channelsSelected: new ArrayObservableSchemaYupType().of(IdNamePairErrorModel).when('filterType', {\r\n      is: FilterScope.Account,\r\n      then: array().required(),\r\n      otherwise: array(),\r\n    }),\r\n    filterType: mixed().oneOf([FilterScope.Account, FilterScope.Publisher]).required(),\r\n    excludedUrls: new StringListSchemaYupType().of(string().trim().oldDomain()),\r\n    excludedAdKeywords: new StringListSchemaYupType().of(string().trim()),\r\n    excludedQueryKeywords: new StringListSchemaYupType().of(string().trim()),\r\n  });\r\n}\r\n","import { MessageBarType } from '@fluentui/react';\r\nimport { orchestrator } from 'satcheljs';\r\nimport { Log } from '../../../../../../logging/src';\r\nimport { Filter, getAppStore, listEntity, onNotificationChanged } from '../../../../../@data';\r\nimport { onFetchFiltersLoading, onFetchingFiltersData, onFiltersFetched } from '../actions';\r\nimport { onManagePageInitialized } from '../actions/onManagePageInitialized';\r\nimport { getFilterStore } from '../store/store';\r\n\r\norchestrator(onManagePageInitialized, async () => {\r\n  try {\r\n    const { publisher, userContext, account } = getAppStore();\r\n    const filters = getFilterStore().gridFilters;\r\n\r\n    if (filters === undefined || filters.length === 0) {\r\n      onFetchFiltersLoading(true);\r\n    }\r\n    onFetchingFiltersData(true);\r\n\r\n    if (publisher && account && userContext) {\r\n      const params = new URLSearchParams([['extendedInfo', 'true']]);\r\n      const data = await listEntity([publisher, account], userContext, Filter, params);\r\n      data.forEach((filter) => {\r\n        if (!!filter.startTimeStamp && !isNaN(Number(filter.startTimeStamp))) {\r\n          filter.startTime = new Date(Number(filter.startTimeStamp) * 1000).toISOString();\r\n        }\r\n        if (!!filter.endTimeStamp && !isNaN(Number(filter.endTimeStamp))) {\r\n          filter.endTime = new Date(Number(filter.endTimeStamp) * 1000).toISOString();\r\n        }\r\n      });\r\n      onFiltersFetched(data);\r\n    }\r\n  } catch (error) {\r\n    Log.error(error);\r\n    onNotificationChanged({ messageBarType: MessageBarType.error, text: 'Failed to load ad filters' });\r\n  } finally {\r\n    onFetchFiltersLoading(false);\r\n    onFetchingFiltersData(false);\r\n  }\r\n});\r\n","import { classNamesFunction, getId, Spinner } from '@fluentui/react';\r\nimport * as React from 'react';\r\nimport { getScreenReaderTextStyles } from '../../utils/GlobalStyleUtils';\r\nimport { IBulkUploadProps, IBulkUploadStyleProps, IBulkUploadStyles } from './bulkUpload.types';\r\n\r\nconst getClassNames = classNamesFunction<IBulkUploadStyleProps, IBulkUploadStyles>();\r\n\r\ninterface IBulkUploadState {\r\n  isCalloutVisible?: boolean;\r\n  file?: string;\r\n}\r\n\r\nexport class BulkUploadBase extends React.Component<IBulkUploadProps, IBulkUploadState> {\r\n  constructor(props) {\r\n    super(props);\r\n    this.state = {\r\n      isCalloutVisible: false,\r\n    };\r\n  }\r\n\r\n  public render(): JSX.Element {\r\n    const { styles, theme, uploadDescription, isLoading, onUpload, disabled, ariaLabelledBy, ariaLabel } = this.props;\r\n    const classNames = getClassNames(styles, { theme: theme! });\r\n    const bulkUploadDescription = getId('bulkUploadDescription');\r\n\r\n    return (\r\n      <div className={classNames.root}>\r\n        <input\r\n          type=\"file\"\r\n          accept=\".txt\"\r\n          onChange={(event) => {\r\n            onUpload(event);\r\n          }}\r\n          disabled={disabled}\r\n          {...(ariaLabelledBy ? { 'aria-labelledby': ariaLabelledBy } : { 'aria-label': ariaLabel })}\r\n          aria-describedby={bulkUploadDescription}\r\n        />\r\n        {isLoading && <Spinner label=\"Uploading file...\" labelPosition=\"right\" />}\r\n        <div className={classNames.uploadDescription}>{uploadDescription}</div>\r\n        <span id={bulkUploadDescription} style={getScreenReaderTextStyles()}>\r\n          {uploadDescription}\r\n        </span>\r\n      </div>\r\n    );\r\n  }\r\n}\r\n","import { IPubcenterSpacing } from '../../../theme';\r\nimport { IBulkUploadStyleProps, IBulkUploadStyles } from './bulkUpload.types';\r\n\r\nexport const getStyles = (props: IBulkUploadStyleProps): IBulkUploadStyles => {\r\n  const { theme } = props;\r\n  const spacing = theme.spacing as IPubcenterSpacing;\r\n  return {\r\n    root: {},\r\n    uploadDescription: [\r\n      'ms-fontWeight-regular',\r\n      {\r\n        fontSize: 12,\r\n        paddingTop: spacing.size8\r\n      }\r\n    ]\r\n  };\r\n};\r\n","import { styled } from '@fluentui/react';\r\nimport { BulkUploadBase } from './bulkUpload.base';\r\nimport { getStyles } from './bulkUpload.styles';\r\nimport { IBulkUploadProps, IBulkUploadStyleProps, IBulkUploadStyles } from './bulkUpload.types';\r\n\r\nexport const BulkUpload = styled<IBulkUploadProps, IBulkUploadStyleProps, IBulkUploadStyles>(BulkUploadBase, getStyles, undefined, {\r\n  scope: 'BulkUpload',\r\n});\r\n","import {\r\n  BaseComponent,\r\n  classNamesFunction,\r\n  ComboBox,\r\n  DatePicker,\r\n  getTheme,\r\n  IComboBoxOption,\r\n  IDatePickerStrings,\r\n  IProcessedStyleSet,\r\n  TextField,\r\n} from '@fluentui/react';\r\nimport * as React from 'react';\r\nimport messages from './DateTimePicker.messages';\r\nimport { getStyles } from './DateTimePicker.styles';\r\nimport { DayPickerStrings, IDateTimePickerProps, IDateTimePickerStyleProps, IDateTimePickerStyles } from './DateTimePicker.types';\r\n\r\ninterface IDateTimePickerState {\r\n  date?: number;\r\n  month?: number;\r\n  year?: number;\r\n  hours: number;\r\n  minutes: number;\r\n  seconds: number;\r\n}\r\n\r\nconst getClassNames = classNamesFunction<IDateTimePickerStyleProps, IDateTimePickerStyles>();\r\n\r\nexport class DateTimePicker extends BaseComponent<IDateTimePickerProps, IDateTimePickerState> {\r\n  private _classNames: IProcessedStyleSet<IDateTimePickerStyles>;\r\n\r\n  constructor(props: IDateTimePickerProps) {\r\n    super(props);\r\n\r\n    const { value } = this.props;\r\n    if (value) {\r\n      this.state = {\r\n        date: value.getDate(),\r\n        month: value.getMonth(),\r\n        year: value.getFullYear(),\r\n        hours: value.getHours(),\r\n        minutes: value.getMinutes(),\r\n        seconds: value.getSeconds(),\r\n      };\r\n    } else {\r\n      this.state = {\r\n        hours: 0,\r\n        minutes: 0,\r\n        seconds: 0,\r\n      };\r\n    }\r\n  }\r\n\r\n  public componentDidUpdate(prevProps: IDateTimePickerProps, prevState: IDateTimePickerState): void {\r\n    if (prevProps !== this.props) {\r\n      const { value } = this.props;\r\n      if (value) {\r\n        this.setState({\r\n          date: value.getDate(),\r\n          month: value.getMonth(),\r\n          year: value.getFullYear(),\r\n          hours: value.getHours(),\r\n          minutes: value.getMinutes(),\r\n          seconds: value.getSeconds(),\r\n        });\r\n      }\r\n    }\r\n  }\r\n\r\n  public render(): JSX.Element {\r\n    const { formatMessage } = this.props.intl;\r\n    const {\r\n      datePickerWidth,\r\n      datePlaceholder,\r\n      label,\r\n      minDateTime,\r\n      maxDateTime,\r\n      onDateTimeChanged,\r\n      allowSecondsField,\r\n      disabled,\r\n      isOutOfBoundsErrorMessage,\r\n    } = this.props;\r\n    const { year, month, date, hours, minutes, seconds } = this.state;\r\n\r\n    const theme = getTheme();\r\n    const styles = getStyles({ theme, datePickerWidth });\r\n    this._classNames = getClassNames(styles);\r\n\r\n    const hourComboBoxOption: IComboBoxOption[] = [];\r\n\r\n    hourComboBoxOption.push({ key: 0, text: `12 AM` });\r\n    for (let i = 1; i < 12; i++) {\r\n      hourComboBoxOption.push({ key: i, text: `${i} AM` });\r\n    }\r\n    hourComboBoxOption.push({ key: 12, text: `12 PM` });\r\n    for (let i = 1; i < 12; i++) {\r\n      hourComboBoxOption.push({ key: 12 + i, text: `${i} PM` });\r\n    }\r\n\r\n    // Disabling out of bound hour options\r\n    if (this.props.value && minDateTime && this.props.value!.toDateString() === minDateTime!.toDateString()) {\r\n      hourComboBoxOption.forEach((option) => {\r\n        if (option.key < minDateTime!.getHours()) {\r\n          option.disabled = true;\r\n        }\r\n      });\r\n    }\r\n    if (this.props.value && maxDateTime && this.props.value!.toDateString() === maxDateTime!.toDateString()) {\r\n      hourComboBoxOption.forEach((option) => {\r\n        if (option.key > maxDateTime!.getHours()) {\r\n          option.disabled = true;\r\n        }\r\n      });\r\n    }\r\n\r\n    // We are only providing these options but using comboBox user can choose to add a custom value as well\r\n    const minutesComboBoxOption: IComboBoxOption[] = [\r\n      { key: 0, text: '00' },\r\n      { key: 15, text: '15' },\r\n      { key: 30, text: '30' },\r\n      { key: 45, text: '45' },\r\n    ];\r\n\r\n    // Adding a new options for the custom minute from input value\r\n    if (minutes && !minutesComboBoxOption.find((option) => option.key === minutes)) {\r\n      minutesComboBoxOption.push({ key: minutes, text: minutes.toString() });\r\n    }\r\n\r\n    const strings: IDatePickerStrings = DayPickerStrings;\r\n    strings.isOutOfBoundsErrorMessage = isOutOfBoundsErrorMessage;\r\n\r\n    return (\r\n      <div className={this._classNames.root}>\r\n        <DatePicker\r\n          strings={strings}\r\n          allowTextInput={true}\r\n          label={label ? label : formatMessage(messages.label)}\r\n          placeholder={datePlaceholder ? datePlaceholder : formatMessage(messages.datePlaceholder)}\r\n          minDate={minDateTime}\r\n          maxDate={maxDateTime}\r\n          value={this.props.value}\r\n          onSelectDate={(val: Date) => {\r\n            if (val) {\r\n              const _date = new Date(\r\n                val.getFullYear(),\r\n                val.getMonth(),\r\n                val.getDate(),\r\n                this.state.hours,\r\n                this.state.minutes,\r\n                this.state.seconds,\r\n                0\r\n              );\r\n              onDateTimeChanged(_date);\r\n              this.setState({\r\n                date: val.getDate(),\r\n                month: val.getMonth(),\r\n                year: val.getFullYear(),\r\n              });\r\n            }\r\n          }}\r\n          disabled={disabled}\r\n          styles={this._classNames.subComponentStyles.datePicker}\r\n        />\r\n        <ComboBox\r\n          selectedKey={hours}\r\n          options={hourComboBoxOption}\r\n          styles={styles.hourPicker}\r\n          disabled={disabled}\r\n          onChange={(_, option) => {\r\n            if (option) {\r\n              const _hours = parseInt(option.key.toString(), 10);\r\n\r\n              if (year && month && date) {\r\n                const _date = new Date(year, month, date, _hours, minutes, seconds, 0);\r\n                onDateTimeChanged(_date);\r\n              }\r\n              this.setState({ hours: _hours });\r\n            }\r\n          }}\r\n        />\r\n        <span className={this._classNames.colonSeperator}>{':'}</span>\r\n        <ComboBox\r\n          selectedKey={minutes}\r\n          options={minutesComboBoxOption}\r\n          allowFreeform\r\n          autoComplete=\"on\"\r\n          styles={styles.minutesPicker}\r\n          onChange={(_, option, index, value) => {\r\n            let _minutes;\r\n            if (option) {\r\n              _minutes = parseInt(option.key.toString(), 10);\r\n            } else if (!option && value) {\r\n              // since allowfreeform is true, here we are adding custom option\r\n              _minutes = parseInt(value.toString(), 10);\r\n              minutesComboBoxOption.push({ key: _minutes, text: value });\r\n            }\r\n            if (year && month && date) {\r\n              // if date is already selected, then update the datetime\r\n              const _date = new Date(year, month, date, hours, _minutes, seconds, 0);\r\n              onDateTimeChanged(_date);\r\n            }\r\n            this.setState({ minutes: _minutes });\r\n          }}\r\n          errorMessage={minutes && minutes >= 60 ? formatMessage(messages.invalidMinuteErrorMessage) : undefined}\r\n          disabled={disabled}\r\n        />\r\n        {allowSecondsField ? (\r\n          <>\r\n            <span className={this._classNames.colonSeperator}>{':'}</span>\r\n            <TextField\r\n              value={seconds ? seconds.toString() : '00'}\r\n              className={this._classNames.secondsPicker}\r\n              onChange={(_, text) => {\r\n                if (text) {\r\n                  const _seconds = parseInt(text, 10);\r\n\r\n                  if (year && month && date) {\r\n                    const _date = new Date(year, month, date, hours, minutes, _seconds, 0);\r\n                    onDateTimeChanged(_date);\r\n                  }\r\n                  this.setState({ seconds: _seconds });\r\n                }\r\n              }}\r\n              errorMessage={seconds && seconds >= 60 ? formatMessage(messages.invalidSecondsErrorMessage) : undefined}\r\n              disabled={disabled}\r\n            />\r\n          </>\r\n        ) : null}\r\n      </div>\r\n    );\r\n  }\r\n}\r\n","import { IPubcenterSpacing } from \"../../../theme\";\r\nimport { IDateTimePickerStyleProps, IDateTimePickerStyles } from \"./DateTimePicker.types\";\r\n\r\nexport const getStyles = (props: IDateTimePickerStyleProps): IDateTimePickerStyles => {\r\n  const { theme } = props\r\n  const spacing = theme.spacing as IPubcenterSpacing;\r\n  // In future we can use datePickerWidth to customise the width of the date time picker\r\n\r\n  return {\r\n    root: {\r\n        display: 'flex',\r\n        marginBottom: spacing.size16,\r\n        maxWidth: props.datePickerWidth ? props.datePickerWidth : 640,\r\n    },\r\n    colonSeperator: {\r\n      margin: '32px 8px 0 8px'\r\n    },\r\n    hourPicker: {\r\n      root: {\r\n        marginTop: '29px',\r\n        marginLeft: '16px',\r\n        maxWidth: 133,\r\n      }\r\n    },\r\n    minutesPicker: {\r\n      root: {\r\n        marginTop: '29px',\r\n        maxWidth: 133,\r\n      }\r\n    },\r\n    secondsPicker: {\r\n      marginTop: '29px',\r\n      maxWidth: 133,\r\n    },\r\n    subComponentStyles: {\r\n      datePicker: {\r\n        root: {\r\n          width: 320\r\n        }\r\n      }\r\n    }\r\n  }\r\n}","import { createStore } from 'satcheljs';\r\nimport { IChannelViewState } from './schema/IChannelViewState';\r\n\r\nexport const getStore = createStore<IChannelViewState>('ChannelState', {\r\n  active: {},\r\n  errors: {}\r\n});\r\n","import { action } from 'satcheljs';\r\nimport { Channel, IStringDictionary } from '../../../../../@data';\r\nimport { IChannelViewModel } from '../store/schema';\r\n\r\nexport const onRawChanged = action('onRawChanged', (value?: Channel) => ({ value }));\r\n\r\nexport const onChannelChanged = action('onChannelChanged', (channel: IChannelViewModel) => ({ channel }));\r\n\r\nexport const onChannelErrorChanged = action('onChannelErrorChanged', (values?: IStringDictionary) => ({ values }));\r\n\r\nexport const onFetchChannelsLoading = action('onFetchChannelsLoading', (isLoading: boolean) => ({ isLoading }));\r\n\r\nexport const onFetchingChannelsData = action('onFetchingChannelsData', (isFetchingData: boolean) => ({ isFetchingData }));\r\n\r\nexport const onChannelsFetched = action('onChannelsFetched', (items: Channel[]) => ({ items }));\r\n","import { History } from 'history';\r\nimport { action } from 'satcheljs';\r\nimport { FormState } from '../../../../../components/Form';\r\nimport { IIdNamePair } from '../../../../../components/MultiSelectPicker';\r\n\r\nexport const onFormIdChanged = action('onFormIdChanged', (value: number) => ({ value }));\r\n\r\nexport const onFormChannelNameChanged = action('onFormChannelNameChanged', (value?: string) => ({ value }));\r\n\r\nexport const onFormAdunitsChanged = action('onFormAdunitsChanged', (values: IIdNamePair[]) => ({ values }));\r\n\r\nexport const onFormFiltersChanged = action('onFormFiltersChanged', (values: IIdNamePair[]) => ({ values }));\r\n\r\nexport const onFormInitialized = action(\r\n  'onFormInitialized',\r\n  (mode: FormState, publisherId: string, accountId: string, entityId?: string) => ({ mode, publisherId, accountId, entityId })\r\n);\r\n\r\nexport const onFormSubmitted = action(\r\n  'onFormSubmitted',\r\n  (mode: FormState, routeHistory?: History, entityId?: string) => ({ mode, routeHistory, entityId })\r\n);\r\n\r\nexport const onFormCancelled = action('onFormCancelled', (mode: FormState) => ({ mode }));\r\n\r\nexport const onFormCleared = action('onFormCleared');\r\n","import { action } from 'satcheljs';\r\n\r\nexport const onManagePageInitialized = action('onManagePageInitialized');\r\n","import { defineMessages } from 'react-intl';\r\n\r\nexport default defineMessages({\r\n  inputChannelName: {\r\n    id: 'admanagement.channel.inputChannelName',\r\n    defaultMessage: 'Channel name',\r\n  },\r\n  inputAdunits: {\r\n    id: 'admanagement.channel.inputAdunits',\r\n    defaultMessage: 'Add ad units',\r\n  },\r\n  adunitPickerAriaDesc: {\r\n    id: 'admanagement.channel.adunitPickerAriaDesc',\r\n    defaultMessage: 'Select ad units to be associated with the channel'\r\n  },\r\n  channelId: {\r\n    id: 'admanagement.channel.channelId',\r\n    defaultMessage: 'Channel ID',\r\n  },\r\n  inputFilters: {\r\n    id: 'admanagement.channel.inputFilters',\r\n    defaultMessage: 'Add ad filters',\r\n  },\r\n  filterPickerAriaDesc: {\r\n    id: 'admanagement.channel.filterPickerAriaDesc',\r\n    defaultMessage: 'Select ad filters to be associated with the channel'\r\n  },\r\n  createChannel: {\r\n    id: 'admanagement.channel.createTitle',\r\n    defaultMessage: 'Create channel',\r\n  },\r\n  editChannel: {\r\n    id: 'admanagement.channel.editTitle',\r\n    defaultMessage: 'Edit channel',\r\n  },\r\n  updateChannel: {\r\n    id: 'admanagement.channel.updateChannel',\r\n    defaultMessage: 'Update channel',\r\n  },\r\n});\r\n","import { TextField } from '@fluentui/react';\r\nimport * as React from 'react';\r\nimport { getAppStore, onNavigateBack } from '../../../../@data';\r\nimport { completeAccess, hasUpdateAccess, UserRoleEntity, userRoleKey } from '../../../../@data/services/UserRoleService';\r\nimport { Channel as ChannelAccessPermissions } from '../../../../@data/store/schema/userrolemodels/Channel';\r\nimport { FormItem, FormState } from '../../../../components/Form';\r\nimport { MultiSelectPicker } from '../../../../components/MultiSelectPicker';\r\nimport { DetailPage } from '../../../../layout/DetailPage/DetailPage';\r\nimport { injectIntlWithObserver } from '../../../../utils/ReactUtils';\r\nimport { RouteName } from '../../@data';\r\nimport { createReturnUrl } from '../../@data/services/AdManagementService';\r\nimport { getStore } from '../@data';\r\nimport {\r\n  onFormAdunitsChanged,\r\n  onFormCancelled,\r\n  onFormChannelNameChanged,\r\n  onFormFiltersChanged,\r\n  onFormInitialized,\r\n  onFormSubmitted,\r\n} from '../@data/actions';\r\nimport messages from './CreateChannel.messages';\r\nimport { ICreateChannelProps, IFormInitializationState } from './CreateChannel.types';\r\n\r\nexport const CreateChannel = injectIntlWithObserver(\r\n  class CreateChannelPage extends React.Component<ICreateChannelProps, IFormInitializationState> {\r\n    constructor(props: ICreateChannelProps) {\r\n      super(props);\r\n      this.state = {\r\n        initializeForm: true,\r\n      };\r\n    }\r\n\r\n    public componentDidMount() {\r\n      const publisherId = this.props.match.params.publisherId;\r\n      const accountId = this.props.match.params.accountId;\r\n      const entityId = this.props.match.params.id;\r\n      if (publisherId && entityId && accountId === undefined && this.props.location.pathname.includes('adunit/edit')) {\r\n        onFormInitialized(FormState.InPageCreate, publisherId, '0', entityId);\r\n      }\r\n\r\n      this.setState({ id: entityId });\r\n      if (publisherId && accountId) {\r\n        onFormInitialized(this.props.mode, publisherId, accountId, entityId);\r\n      }\r\n    }\r\n\r\n    public componentDidUpdate() {\r\n      const publisherId = this.props.match.params.publisherId;\r\n      const accountId = this.props.match.params.accountId;\r\n      const entityId = this.props.match.params.id;\r\n      if (this.state.initializeForm && this.state.id !== entityId) {\r\n        this.setState({ id: entityId });\r\n        if (publisherId && accountId) {\r\n          onFormInitialized(this.props.mode, publisherId, accountId, entityId);\r\n        }\r\n      }\r\n    }\r\n\r\n    public render() {\r\n      const { formatMessage } = this.props.intl;\r\n      const store = getStore();\r\n      const { saving, loading } = getAppStore();\r\n      const publisherId = this.props.match.params.publisherId;\r\n      const accountId = this.props.match.params.accountId;\r\n\r\n      const channelAccessPermissions = this._getChannelAccessPermission();\r\n\r\n      return (\r\n        <DetailPage\r\n          titleLabel={this.props.mode === FormState.Edit ? formatMessage(messages.editChannel) : formatMessage(messages.createChannel)}\r\n          helpId={'pop_PCv4_ChannelsCreate'}\r\n          submitLabel={formatMessage(this.props.mode === FormState.Edit ? messages.updateChannel : messages.createChannel)}\r\n          onSubmit={() => this._onSubmit(publisherId, accountId)}\r\n          onCancel={() => this._onCancel(publisherId, accountId)}\r\n          onNavClick={() => this._onCancel(publisherId, accountId)}\r\n          saving={saving}\r\n          loading={loading}\r\n          pageMode={this.props.mode}\r\n        >\r\n          <FormItem formWidth={440}>\r\n            <TextField\r\n              label={formatMessage(messages.inputChannelName)}\r\n              errorMessage={store.errors.name}\r\n              required={true}\r\n              value={store.active.name}\r\n              onChange={(_, value) => onFormChannelNameChanged(value)}\r\n              disabled={this._isDisabled(\r\n                this.props.mode,\r\n                channelAccessPermissions === null ? completeAccess : channelAccessPermissions.name\r\n              )}\r\n            />\r\n          </FormItem>\r\n\r\n          {store.active.id && (\r\n            <FormItem formWidth={440}>\r\n              <TextField label={formatMessage(messages.channelId)} required={true} disabled={true} value={String(store.active.id)} />\r\n            </FormItem>\r\n          )}\r\n\r\n          <FormItem formWidth={580}>\r\n            <MultiSelectPicker\r\n              {...this.props}\r\n              label={formatMessage(messages.inputAdunits)}\r\n              ariaDescription={formatMessage(messages.adunitPickerAriaDesc)}\r\n              required={true}\r\n              errorMessage={store.errors.adunitsSelected}\r\n              items={store.active.adunits || []}\r\n              initialSelectedItems={store.active.adunitsSelected}\r\n              onSelectedItems={(items) => onFormAdunitsChanged(items)}\r\n              disabled={this._isDisabled(\r\n                this.props.mode,\r\n                channelAccessPermissions === null ? completeAccess : channelAccessPermissions.adUnitList\r\n              )}\r\n            />\r\n          </FormItem>\r\n\r\n          <FormItem formWidth={600}>\r\n            <MultiSelectPicker\r\n              {...this.props}\r\n              label={formatMessage(messages.inputFilters)}\r\n              ariaDescription={formatMessage(messages.filterPickerAriaDesc)}\r\n              errorMessage={store.errors.filtersSelected}\r\n              items={store.active.filters || []}\r\n              initialSelectedItems={store.active.filtersSelected}\r\n              onSelectedItems={(items) => onFormFiltersChanged(items)}\r\n              disabled={this._isDisabled(\r\n                this.props.mode,\r\n                channelAccessPermissions === null ? completeAccess : channelAccessPermissions.adFilters\r\n              )}\r\n            />\r\n          </FormItem>\r\n        </DetailPage>\r\n      );\r\n    }\r\n\r\n    private _onSubmit = (publisherId?: string, accountId?: string): void => {\r\n      this.setState({ initializeForm: false });\r\n      let entityId;\r\n      if (publisherId && !accountId && this.props.location.pathname.includes('adunit/edit')) {\r\n        // to enable channel creation on adunit edit page scoped to 'All accounts', fetch accountId using adunitId from route\r\n        entityId = this.props.match.params.id;\r\n      }\r\n      onFormSubmitted(this.props.mode, this.props.history, entityId);\r\n    };\r\n\r\n    private _onCancel = (publisherId?: string, accountId?: string): void => {\r\n      this.setState({ initializeForm: false });\r\n      onFormCancelled(this.props.mode);\r\n      if (this.props.mode !== FormState.InPageCreate) {\r\n        // return to manage page\r\n        const returnUrl = createReturnUrl(RouteName.channel, publisherId, accountId);\r\n        onNavigateBack(this.props.history, returnUrl);\r\n      }\r\n    };\r\n\r\n    private _getChannelAccessPermission(): ChannelAccessPermissions | null {\r\n      const userRoles = localStorage.getItem(userRoleKey);\r\n      if (userRoles === null) {\r\n        return null;\r\n      }\r\n      const userRolesJSON = JSON.parse(userRoles);\r\n\r\n      for (const value in userRolesJSON) {\r\n        if (value === UserRoleEntity.Channel) {\r\n          return JSON.parse(userRolesJSON[value]);\r\n        }\r\n      }\r\n\r\n      return null;\r\n    }\r\n\r\n    private _isDisabled(mode: FormState, permission: number): boolean {\r\n      if (mode === FormState.Create || mode === FormState.InPageCreate) {\r\n        return false;\r\n      }\r\n\r\n      return !hasUpdateAccess(permission);\r\n    }\r\n  }\r\n);\r\n","import { defineMessages } from 'react-intl';\r\n\r\nexport default defineMessages({\r\n  inputName: {\r\n    id: 'admanagement.adfilter.inputName',\r\n    defaultMessage: 'Ad filter name',\r\n  },\r\n  inputNameLength: {\r\n    id: 'admanagement.adfilter.inputNameLength',\r\n    defaultMessage: 'Do not exceed 35 characters',\r\n  },\r\n  createFilter: {\r\n    id: 'admanagement.adfilter.createFilter',\r\n    defaultMessage: 'Create ad filter',\r\n  },\r\n  editFilter: {\r\n    id: 'admanagement.adfilter.editFilter',\r\n    defaultMessage: 'Update ad filter',\r\n  },\r\n  filterId: {\r\n    id: 'admanagement.adfilter.filterId',\r\n    defaultMessage: 'Ad filter ID',\r\n  },\r\n  filterType: {\r\n    id: 'admanagement.adfilter.filterType',\r\n    defaultMessage: 'Filter Type',\r\n  },\r\n  accountFilter: {\r\n    id: 'admanagement.adfilter.accountFilter',\r\n    defaultMessage: 'Account level filter',\r\n  },\r\n  publisherFilter: {\r\n    id: 'admanagement.adfilter.publisherFilter',\r\n    defaultMessage: 'Publisher level filter',\r\n  },\r\n  inputExcludedURLs: {\r\n    id: 'admanagement.adfilter.inputExcludedURLs',\r\n    defaultMessage: 'Excluded URLs',\r\n  },\r\n  excludedUrlPlaceholder: {\r\n    id: 'admanagement.adfilter.excludedUrlPH',\r\n    defaultMessage: 'http://www.contoso.com',\r\n  },\r\n  inputExcludedKeywordAd: {\r\n    id: 'admanagement.adfilter.inputExcludedKeywordAd',\r\n    defaultMessage: 'Excluded keywords - ad level',\r\n  },\r\n  excludedKeywordPlaceholder: {\r\n    id: 'admanagement.adfilter.excludedKeywordPH',\r\n    defaultMessage: 'Example Keyword 1\\nExample Keyword 2\\nExample Keyword 3',\r\n  },\r\n  inputExcludedKeywordQuery: {\r\n    id: 'admanagement.adfilter.inputExcludedKeywordQuery',\r\n    defaultMessage: 'Excluded keywords - query level',\r\n  },\r\n  inputAttachChannel: {\r\n    id: 'admanagement.adfilter.inputAttachChannel',\r\n    defaultMessage: 'Attach to channels',\r\n  },\r\n  channelPickerAriaDesc: {\r\n    id: 'admanagement.adfilter.channelPickerAriaDesc',\r\n    defaultMessage: 'Select channels to be attached with the ad filter',\r\n  },\r\n  navMessage: {\r\n    id: 'admanagement.adfilter.navMessage',\r\n    defaultMessage: 'Go back to Ad filter management',\r\n  },\r\n  excludedItems: {\r\n    id: 'admanagement.adfilter.excludedItems',\r\n    defaultMessage: 'Excluded items',\r\n  },\r\n  excludedDescription: {\r\n    id: 'admanagement.adfilter.excludedDescription',\r\n    defaultMessage:\r\n      // tslint:disable-next-line:max-line-length\r\n      'You can enter the items you want to block manually or upload a txt. file. New items are appended to the current list and duplicates are removed.',\r\n  },\r\n  manualEntry: {\r\n    id: 'admanagement.adfilter.manualEntry',\r\n    defaultMessage: 'Manual entry',\r\n  },\r\n  fileUpload: {\r\n    id: 'admanagement.adfilter.fileUpload',\r\n    defaultMessage: 'File upload',\r\n  },\r\n  excludedUrlDescription: {\r\n    id: 'admanagement.adfilter.excludedUrlDescription',\r\n    defaultMessage: 'List URLs to exclude(one per line). May contain up to 250 URLs.',\r\n  },\r\n  excludeAdLevelKeywordsDescription: {\r\n    id: 'admanagement.adfilter.excludeAdLevelKeywordsDescription',\r\n    defaultMessage: 'List ad level keywords to exclude(one per line). May contain up to 50 keywords.',\r\n  },\r\n  excludedQueryLevelKeywordDescription: {\r\n    id: 'admanagement.adfilter.excludedQueryLevelKeywordDescription',\r\n    defaultMessage: 'List query level keywords to exclude(one per line). May contain up to 250 keywords.',\r\n  },\r\n  excludedUrlBulkUploadDescription: {\r\n    id: 'admanagement.adfilter.excludedUrlBulkUploadDescription',\r\n    defaultMessage: 'File may contain up to 5,000 urls.',\r\n  },\r\n  exlcudedKeywordsBulkUploadDescription: {\r\n    id: 'admanagement.adfilter.exlcudedKeywordsBulkUploadDescription',\r\n    defaultMessage: 'File may contain up to 5,000 keywords.',\r\n  },\r\n  exportButtonDesc: {\r\n    id: 'admanagement.adfilter.exportButtonDesc',\r\n    defaultMessage: 'Export a file containing existing {label}',\r\n  },\r\n  timeRangeSectionTitle: {\r\n    id: 'admanagement.adfilter.timeRangeSectionTitle',\r\n    defaultMessage: 'Filter Time Range',\r\n  },\r\n  timeRangeSectionDescription: {\r\n    id: 'admanagement.adfilter.timeRangeSectionDescription',\r\n    defaultMessage:\r\n      '(Optional) Select time range to apply the filter in a specific time range. Start time is set to current datetime by default.',\r\n  },\r\n  filterStartTimeLabel: {\r\n    id: 'admanagement.adfilter.filterStartTimeLabel',\r\n    defaultMessage: 'Filter Start Time (UTC)',\r\n  },\r\n  filterEndTimeLabel: {\r\n    id: 'admanagement.adfilter.filterEndTimeLabel',\r\n    defaultMessage: 'Filter End Time (UTC)',\r\n  },\r\n  filterEndTimePlaceholder: {\r\n    id: 'admanagement.adfilter.filterEndTimePlaceholder',\r\n    defaultMessage: 'Select your end date',\r\n  },\r\n  resetTimeRange: {\r\n    id: 'admanagement.adfilter.resetTimeRange',\r\n    defaultMessage: 'Reset time range',\r\n  },\r\n  undoTimeRange: {\r\n    id: 'admanagement.adfilter.undoTimeRange',\r\n    defaultMessage: 'Undo time range',\r\n  },\r\n  filterUpdateType: {\r\n    id: 'admanagement.adfilter.filterUpdateType',\r\n    defaultMessage: 'Filter update type',\r\n  },\r\n  appendOnly: {\r\n    id: 'admanagement.adfilter.appendOnly',\r\n    defaultMessage: 'Append only',\r\n  },\r\n  nonAppendOnly: {\r\n    id: 'admanagement.adfilter.nonAppendOnly',\r\n    defaultMessage: 'Non-append only',\r\n  },\r\n  startDateErrorMessage: {\r\n    id: 'admanagement.adfilter.startDateErrorMessage',\r\n    defaultMessage: 'Start date must be before end date',\r\n  },\r\n  endDateErrorMessage: {\r\n    id: 'admanagement.adfilter.endDateErrorMessage',\r\n    defaultMessage: 'End date must be after start date and current date time',\r\n  },\r\n});\r\n","import { IPubcenterSpacing } from '../../../../../theme';\r\nimport { ICreateAdFilterStyleProps, ICreateAdFilterStyles } from './CreateAdFilter.types';\r\n\r\nexport const getStyles = (props: ICreateAdFilterStyleProps): ICreateAdFilterStyles => {\r\n  const { theme } = props;\r\n  const spacing = theme.spacing as IPubcenterSpacing;\r\n  return {\r\n    description: {\r\n      fontSize: 12\r\n    },\r\n    excludedItemsTextField: {\r\n      width: 440\r\n    },\r\n    exportButton: {\r\n      display: 'flex',\r\n      flexDirection: 'row'\r\n    },\r\n    panelHeader: {\r\n      display: 'flex',\r\n      justifyContent: 'flex-end',\r\n      padding: '5px 5px 0px 0px',\r\n    },\r\n    subComponentStyles: {\r\n      inPagePanel: {},\r\n      excludedItemsLabel: {\r\n        root: {\r\n          fontSize: 16,\r\n          borderTopStyle: 'solid',\r\n          borderColor: theme.palette.neutralLight,\r\n          borderTopWidth: 1,\r\n          paddingTop: spacing.size16\r\n        }\r\n      },\r\n      excludedDescription: {\r\n        root: [\r\n          'ms-fontWeight-regular',\r\n          {\r\n            fontSize: 14\r\n          }\r\n        ]\r\n      },\r\n      choiceGroup: {\r\n        root: {\r\n          marginBottom: spacing.size16\r\n        },\r\n        flexContainer: {\r\n          display: 'flex',\r\n          flexDirection: 'row',\r\n          justifyContent: 'flex-start',\r\n          selectors: {\r\n            '.ms-ChoiceField': {\r\n              marginRight: theme.spacing.m\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n  };\r\n};\r\n","import {\r\n  IChoiceGroupStyleProps,\r\n  IChoiceGroupStyles,\r\n  ILabelStyleProps,\r\n  ILabelStyles,\r\n  IPanelStyleProps,\r\n  IPanelStyles,\r\n  IStyle,\r\n  IStyleFunction,\r\n  IStyleFunctionOrObject,\r\n  ITheme,\r\n} from '@fluentui/react';\r\nimport { IFormEditParams, IFormStateProps } from '../../../../components/Form';\r\nimport { IRouterWithIntl } from '../../../../utils/ReactUtils';\r\n\r\nexport interface IFormInitializationState {\r\n  initializeForm: boolean;\r\n  id?: string;\r\n  textFileLoading?: boolean;\r\n}\r\n\r\nexport interface ICreateAdFilterProps extends IRouterWithIntl<IFormEditParams>, IFormStateProps {\r\n  styles?: IStyleFunction<ICreateAdFilterStyleProps, ICreateAdFilterStyles>;\r\n  theme?: ITheme;\r\n}\r\n\r\nexport interface ICreateAdFilterStyleProps {\r\n  theme: ITheme;\r\n}\r\n\r\nexport interface ICreateAdFilterStyles {\r\n  description?: IStyle;\r\n  excludedItemsTextField?: IStyle;\r\n  exportButton?: IStyle;\r\n  panelHeader?: IStyle;\r\n  subComponentStyles: {\r\n    inPagePanel?: IStyleFunctionOrObject<IPanelStyleProps, IPanelStyles>;\r\n    excludedItemsLabel?: IStyleFunctionOrObject<ILabelStyleProps, ILabelStyles>;\r\n    excludedDescription?: IStyleFunctionOrObject<ILabelStyleProps, ILabelStyles>;\r\n    choiceGroup?: IStyleFunctionOrObject<IChoiceGroupStyleProps, IChoiceGroupStyles>;\r\n  };\r\n}\r\n\r\nexport enum FilterExcludedType {\r\n  Url,\r\n  AdKeyword,\r\n  QueryKeyword,\r\n}\r\n","import {\r\n  ActionButton,\r\n  ChoiceGroup,\r\n  classNamesFunction,\r\n  Dropdown,\r\n  getTheme,\r\n  IconButton,\r\n  IProcessedStyleSet,\r\n  ITextFieldProps,\r\n  Label,\r\n  Link,\r\n  Panel,\r\n  PanelType,\r\n  Spinner,\r\n  TextField,\r\n} from '@fluentui/react';\r\nimport * as React from 'react';\r\nimport { FilterScope, getAppStore, onHelpInfoCalloutOpened, onHelpInfoChanged, onNavigateBack } from '../../../../@data';\r\nimport { completeAccess, hasUpdateAccess, UserRoleEntity, userRoleKey } from '../../../../@data/services/UserRoleService';\r\nimport { Filter as FilterAccessPermissions } from '../../../../@data/store/schema/userrolemodels/Filter';\r\nimport AppMessages from '../../../../App.messages';\r\nimport { BulkUpload } from '../../../../components/bulkUpload/bulkUpload';\r\nimport { DateTimePicker } from '../../../../components/DateTimePicker/DateTimePicker';\r\nimport { FormItem, FormSection, FormState } from '../../../../components/Form';\r\nimport { FormLabel } from '../../../../components/Form/FormLabel';\r\nimport { MultiSelectPicker } from '../../../../components/MultiSelectPicker';\r\nimport { DetailPage } from '../../../../layout/DetailPage/DetailPage';\r\nimport { injectIntlWithObserver } from '../../../../utils/ReactUtils';\r\nimport { getAdManagementStore, RouteName } from '../../@data';\r\nimport { onPanelOpenChanged } from '../../@data/actions';\r\nimport { createReturnUrl } from '../../@data/services/AdManagementService';\r\nimport { CreateChannel } from '../../Channel/Create/CreateChannel';\r\nimport { getFilterStore } from '../@data';\r\nimport {\r\n  onfilterItemsEntryTypeChanged,\r\n  onFilterUpdateTypeChanged,\r\n  onFormAppendExcludedAdKeywordsChanged,\r\n  onFormAppendExcludedQueryKeywordsChanged,\r\n  onFormAppendExcludedUrlsChanged,\r\n  onFormCancelled,\r\n  onFormChannelsChanged,\r\n  onFormDownloadClicked,\r\n  onFormExludedAdKeywordChanged,\r\n  onFormExludedQueryKeywordChanged,\r\n  onFormExludedUrlChanged,\r\n  onFormFilterEndTimeChanged,\r\n  onFormFilterNameChanged,\r\n  onFormFilterStartTimeChanged,\r\n  onFormFilterTypeChanged,\r\n  onFormInitialized,\r\n  onFormResetTimeRange,\r\n  onFormSubmitted,\r\n  onFormUndoTimeRange,\r\n} from '../@data/actions';\r\nimport messages from './CreateAdFilter.messages';\r\nimport { getStyles } from './CreateAdFilter.styles';\r\nimport {\r\n  FilterExcludedType,\r\n  ICreateAdFilterProps,\r\n  ICreateAdFilterStyleProps,\r\n  ICreateAdFilterStyles,\r\n  IFormInitializationState,\r\n} from './CreateAdFilter.types';\r\n\r\nconst getClassNames = classNamesFunction<ICreateAdFilterStyleProps, ICreateAdFilterStyles>();\r\n\r\nexport const CreateAdFilter = injectIntlWithObserver(\r\n  class CreateAdFilterPage extends React.Component<ICreateAdFilterProps, IFormInitializationState> {\r\n    private _classNames: IProcessedStyleSet<ICreateAdFilterStyles>;\r\n\r\n    constructor(props: ICreateAdFilterProps) {\r\n      super(props);\r\n      this.state = {\r\n        initializeForm: true,\r\n        textFileLoading: false,\r\n      };\r\n    }\r\n\r\n    public componentDidMount() {\r\n      const publisherId = this.props.match.params.publisherId;\r\n      const accountId = this.props.match.params.accountId;\r\n      const entityId = this.props.match.params.id;\r\n      this.setState({ id: entityId });\r\n      if (publisherId && accountId) {\r\n        onFormInitialized(this.props.mode, publisherId, accountId, entityId);\r\n      }\r\n    }\r\n\r\n    public componentDidUpdate() {\r\n      const publisherId = this.props.match.params.publisherId;\r\n      const accountId = this.props.match.params.accountId;\r\n      const entityId = this.props.match.params.id;\r\n      if (this.state.initializeForm && this.state.id !== entityId) {\r\n        this.setState({ id: entityId });\r\n        if (publisherId && accountId) {\r\n          onFormInitialized(this.props.mode, publisherId, accountId, entityId);\r\n        }\r\n      }\r\n    }\r\n\r\n    public render() {\r\n      const theme = getTheme();\r\n      this._classNames = getClassNames(getStyles, { theme });\r\n      const { formatMessage } = this.props.intl;\r\n      const publisherId = this.props.match.params.publisherId;\r\n      const accountId = this.props.match.params.accountId;\r\n      const { saving, loading } = getAppStore();\r\n\r\n      return (\r\n        <DetailPage\r\n          titleLabel={formatMessage(this.props.mode === FormState.Edit ? messages.editFilter : messages.createFilter)}\r\n          helpId={'pop_PCv4_FilterCreate'}\r\n          submitLabel={formatMessage(this.props.mode === FormState.Edit ? messages.editFilter : messages.createFilter)}\r\n          onSubmit={() => this._onSubmit(publisherId, accountId)}\r\n          onCancel={() => this._onCancel(publisherId, accountId)}\r\n          onNavClick={() => this._onCancel(publisherId, accountId)}\r\n          saving={saving}\r\n          loading={loading}\r\n          pageMode={this.props.mode}\r\n        >\r\n          {this._formContent()}\r\n        </DetailPage>\r\n      );\r\n    }\r\n\r\n    private _formContent = (): JSX.Element => {\r\n      const { formatMessage } = this.props.intl;\r\n      const store = getFilterStore();\r\n      const filterAccessPermissions = this._getFilterAccessPermission();\r\n\r\n      return (\r\n        <div>\r\n          <FormItem formWidth={440}>\r\n            <TextField\r\n              label={formatMessage(messages.inputName)}\r\n              required={true}\r\n              placeholder={formatMessage(messages.inputNameLength)}\r\n              errorMessage={store.errors.name}\r\n              value={store.active.name}\r\n              onChange={(_, value) => onFormFilterNameChanged(value)}\r\n              disabled={this._isDisabled(this.props.mode, filterAccessPermissions === null ? completeAccess : filterAccessPermissions.name)}\r\n            />\r\n          </FormItem>\r\n          {store.active.id && (\r\n            <FormItem formWidth={440}>\r\n              <TextField label={formatMessage(messages.filterId)} required={true} disabled={true} value={String(store.active.id)} />\r\n            </FormItem>\r\n          )}\r\n          <FormItem>\r\n            <Dropdown\r\n              label={formatMessage(messages.filterType)}\r\n              required={true}\r\n              options={[\r\n                { key: FilterScope.Account, text: formatMessage(messages.accountFilter) },\r\n                { key: FilterScope.Publisher, text: formatMessage(messages.publisherFilter) },\r\n              ]}\r\n              defaultSelectedKey={store.active.filterType}\r\n              onChange={(_, value) => onFormFilterTypeChanged(value!!)}\r\n              errorMessage={store.errors.filterType}\r\n              disabled={this.props.mode === FormState.Edit}\r\n            />\r\n          </FormItem>\r\n          <FormItem formWidth={440}>\r\n            <ChoiceGroup\r\n              label={formatMessage(messages.filterUpdateType)}\r\n              options={[\r\n                { key: 'nonAppendOnly', text: formatMessage(messages.nonAppendOnly) },\r\n                { key: 'appendOnly', text: formatMessage(messages.appendOnly) },\r\n              ]}\r\n              styles={this._classNames.subComponentStyles.choiceGroup}\r\n              onChange={(_, value) => onFilterUpdateTypeChanged(value!!)}\r\n              selectedKey={store.active.appendOnly ? 'appendOnly' : 'nonAppendOnly'}\r\n              disabled={\r\n                this.props.mode === FormState.Edit ||\r\n                this._isDisabled(this.props.mode, filterAccessPermissions === null ? completeAccess : filterAccessPermissions.appendOnly)\r\n              }\r\n            />\r\n          </FormItem>\r\n          {store.active.filterType !== FilterScope.Publisher && (\r\n            <FormItem formWidth={600}>\r\n              <MultiSelectPicker\r\n                intl={this.props.intl}\r\n                required={true}\r\n                errorMessage={store.errors.channelsSelected}\r\n                label={formatMessage(messages.inputAttachChannel)}\r\n                ariaDescription={formatMessage(messages.channelPickerAriaDesc)}\r\n                enableCreateButton={this.props.mode !== FormState.InPageCreate}\r\n                createButtonLabel={formatMessage(AppMessages.createChannel)}\r\n                onCreateButtonClick={() => onPanelOpenChanged(true)}\r\n                items={store.active.channels || []}\r\n                initialSelectedItems={store.active.channelsSelected}\r\n                onSelectedItems={(items) => onFormChannelsChanged(items)}\r\n                disabled={this._isDisabled(\r\n                  this.props.mode,\r\n                  filterAccessPermissions === null ? completeAccess : filterAccessPermissions.channelList\r\n                )}\r\n              />\r\n            </FormItem>\r\n          )}\r\n          <FormSection\r\n            title={formatMessage(messages.excludedItems)}\r\n            formWidth={1000}\r\n            expanded={true}\r\n            ariaDescription={formatMessage(messages.excludedDescription)}\r\n          >\r\n            <Label id=\"excludedDescription\" styles={this._classNames.subComponentStyles.excludedDescription}>\r\n              {formatMessage(messages.excludedDescription)}\r\n            </Label>\r\n            <ChoiceGroup\r\n              options={[\r\n                { key: 'manualEntry', text: formatMessage(messages.manualEntry) },\r\n                { key: 'fileUpload', text: formatMessage(messages.fileUpload) },\r\n              ]}\r\n              styles={this._classNames.subComponentStyles.choiceGroup}\r\n              onChange={(_, value) => onfilterItemsEntryTypeChanged(value!!)}\r\n              selectedKey={store.active.filterItemsEntryType || 'manualEntry'}\r\n            />\r\n            {(!store.active.filterItemsEntryType || store.active.filterItemsEntryType === 'manualEntry') &&\r\n              this._excludedItemsTextField(filterAccessPermissions)}\r\n            {store.active.filterItemsEntryType === 'fileUpload' && this._excludedItemsUploadField(filterAccessPermissions)}\r\n          </FormSection>\r\n          <FormSection\r\n            title={formatMessage(messages.timeRangeSectionTitle)}\r\n            formWidth={1000}\r\n            expanded={true}\r\n            ariaDescription={formatMessage(messages.timeRangeSectionDescription)}\r\n          >\r\n            <Label id=\"excludedDescription\" styles={this._classNames.subComponentStyles.excludedDescription}>\r\n              {formatMessage(messages.timeRangeSectionDescription)}\r\n            </Label>\r\n            <DateTimePicker\r\n              intl={this.props.intl}\r\n              label={formatMessage(messages.filterStartTimeLabel)}\r\n              maxDateTime={store.active.filterEndTime}\r\n              onDateTimeChanged={onFormFilterStartTimeChanged}\r\n              value={store.active.filterStartTime ? store.active.filterStartTime : undefined}\r\n              isOutOfBoundsErrorMessage={formatMessage(messages.startDateErrorMessage)}\r\n            />\r\n            <DateTimePicker\r\n              intl={this.props.intl}\r\n              label={formatMessage(messages.filterEndTimeLabel)}\r\n              datePlaceholder={formatMessage(messages.filterEndTimePlaceholder)}\r\n              minDateTime={store.active.filterStartTime}\r\n              onDateTimeChanged={onFormFilterEndTimeChanged}\r\n              value={store.active.filterEndTime ? store.active.filterEndTime : undefined}\r\n              isOutOfBoundsErrorMessage={formatMessage(messages.endDateErrorMessage)}\r\n            />\r\n            {this.props.mode === FormState.Edit ? (\r\n              <Link onClick={(ev) => onFormUndoTimeRange()}>{formatMessage(messages.undoTimeRange)}</Link>\r\n            ) : (\r\n              <Link onClick={(ev) => onFormResetTimeRange()}>{formatMessage(messages.resetTimeRange)}</Link>\r\n            )}\r\n          </FormSection>\r\n          <Panel\r\n            isOpen={getAdManagementStore().panelIsOpen}\r\n            type={PanelType.custom}\r\n            customWidth=\"700px\"\r\n            onDismiss={() => onPanelOpenChanged(false)}\r\n            styles={this._classNames.subComponentStyles.inPagePanel}\r\n            onRenderNavigation={() => (\r\n              <div className={this._classNames.panelHeader} role=\"navigation\">\r\n                <IconButton\r\n                  iconProps={{ iconName: 'Cancel' }}\r\n                  aria-label={formatMessage(AppMessages.close)}\r\n                  onClick={() => onPanelOpenChanged(false)}\r\n                />\r\n              </div>\r\n            )}\r\n          >\r\n            <CreateChannel {...this.props} mode={FormState.InPageCreate} />\r\n          </Panel>\r\n        </div>\r\n      );\r\n    };\r\n\r\n    private _onSubmit = (publisherId?: string, accountId?: string): void => {\r\n      this.setState({ initializeForm: false });\r\n      onFormSubmitted(this.props.mode, this.props.history);\r\n    };\r\n\r\n    private _onCancel = (publisherId?: string, accountId?: string): void => {\r\n      this.setState({ initializeForm: false });\r\n      onFormCancelled();\r\n      // return to manage page\r\n      const returnUrl = createReturnUrl(RouteName.adfilter, publisherId, accountId);\r\n      onNavigateBack(this.props.history, returnUrl);\r\n    };\r\n\r\n    private _onRenderTextFieldDescription = (props: ITextFieldProps): JSX.Element => {\r\n      return <div className={this._classNames.description}>{props.description}</div>;\r\n    };\r\n\r\n    private _excludedItemsTextField = (filterAccessPermissions: FilterAccessPermissions | null): JSX.Element => {\r\n      const { formatMessage } = this.props.intl;\r\n      const store = getFilterStore();\r\n      const { helpInfo, locale } = getAppStore();\r\n      return (\r\n        <div className={this._classNames.excludedItemsTextField}>\r\n          <FormItem formWidth={440}>\r\n            <TextField\r\n              errorMessage={store.errors.excludedUrls}\r\n              multiline={true}\r\n              placeholder={formatMessage(messages.excludedUrlPlaceholder)}\r\n              description={formatMessage(messages.excludedUrlDescription)}\r\n              aria-labelledby=\"filterExcludedUrlLabel\"\r\n              onRenderLabel={() => {\r\n                return (\r\n                  <FormLabel\r\n                    id=\"filterExcludedUrlLabel\"\r\n                    labelContent={formatMessage(messages.inputExcludedURLs)}\r\n                    calloutContent={helpInfo}\r\n                    iconButtonOnClick={() => onHelpInfoCalloutOpened('pop_PCv4_FilterExcludeURL', locale)}\r\n                    calloutOnDismiss={() => onHelpInfoChanged()}\r\n                    intl={this.props.intl}\r\n                  />\r\n                );\r\n              }}\r\n              value={store.active.excludedUrls}\r\n              onChange={(_, value) => onFormExludedUrlChanged(value)}\r\n              onRenderDescription={this._onRenderTextFieldDescription}\r\n              disabled={this._isDisabled(\r\n                this.props.mode,\r\n                filterAccessPermissions === null ? completeAccess : filterAccessPermissions.excludedURLs\r\n              )}\r\n            />\r\n          </FormItem>\r\n          <FormItem formWidth={440}>\r\n            <TextField\r\n              errorMessage={store.errors.excludedAdKeywords}\r\n              multiline={true}\r\n              placeholder={formatMessage(messages.excludedKeywordPlaceholder)}\r\n              description={formatMessage(messages.excludeAdLevelKeywordsDescription)}\r\n              aria-labelledby=\"filterExcludedAdKeywordLabel\"\r\n              onRenderLabel={() => {\r\n                return (\r\n                  <FormLabel\r\n                    id=\"filterExcludedAdKeywordLabel\"\r\n                    labelContent={formatMessage(messages.inputExcludedKeywordAd)}\r\n                    calloutContent={helpInfo}\r\n                    iconButtonOnClick={() => onHelpInfoCalloutOpened('pop_PCv4_FilterExcludeKwyAd', locale)}\r\n                    calloutOnDismiss={() => onHelpInfoChanged()}\r\n                    intl={this.props.intl}\r\n                  />\r\n                );\r\n              }}\r\n              value={store.active.excludedAdKeywords}\r\n              onChange={(_, value) => onFormExludedAdKeywordChanged(value)}\r\n              onRenderDescription={this._onRenderTextFieldDescription}\r\n              disabled={this._isDisabled(\r\n                this.props.mode,\r\n                filterAccessPermissions === null ? completeAccess : filterAccessPermissions.excludedAdKeywords\r\n              )}\r\n            />\r\n          </FormItem>\r\n          <FormItem formWidth={440}>\r\n            <TextField\r\n              errorMessage={store.errors.excludedQueryKeywords}\r\n              multiline={true}\r\n              placeholder={formatMessage(messages.excludedKeywordPlaceholder)}\r\n              description={formatMessage(messages.excludedQueryLevelKeywordDescription)}\r\n              aria-labelledby=\"filterExcludedQueryKeywordLabel\"\r\n              onRenderLabel={() => {\r\n                return (\r\n                  <FormLabel\r\n                    id=\"filterExcludedQueryKeywordLabel\"\r\n                    labelContent={formatMessage(messages.inputExcludedKeywordQuery)}\r\n                    calloutContent={helpInfo}\r\n                    iconButtonOnClick={() => onHelpInfoCalloutOpened('pop_PCv4_FilterExcludeKwyQuery', locale)}\r\n                    calloutOnDismiss={() => onHelpInfoChanged()}\r\n                    intl={this.props.intl}\r\n                  />\r\n                );\r\n              }}\r\n              value={store.active.excludedQueryKeywords}\r\n              onChange={(_, value) => onFormExludedQueryKeywordChanged(value)}\r\n              onRenderDescription={this._onRenderTextFieldDescription}\r\n              disabled={this._isDisabled(\r\n                this.props.mode,\r\n                filterAccessPermissions === null ? completeAccess : filterAccessPermissions.excludedQueryKeywords\r\n              )}\r\n            />\r\n          </FormItem>\r\n        </div>\r\n      );\r\n    };\r\n\r\n    private _excludedItemsUploadField = (filterAccessPermissions: FilterAccessPermissions | null): JSX.Element => {\r\n      const { formatMessage } = this.props.intl;\r\n      const { helpInfo, locale } = getAppStore();\r\n      const store = getFilterStore();\r\n\r\n      return (\r\n        <>\r\n          <FormItem formWidth={440}>\r\n            <FormLabel\r\n              id=\"filterExcludedUrlBulkLabel\"\r\n              labelContent={formatMessage(messages.inputExcludedURLs)}\r\n              calloutContent={helpInfo}\r\n              iconButtonOnClick={() => onHelpInfoCalloutOpened('pop_PCv4_FilterExcludeURL', locale)}\r\n              calloutOnDismiss={() => onHelpInfoChanged()}\r\n              intl={this.props.intl}\r\n            />\r\n            <BulkUpload\r\n              uploadDescription={formatMessage(messages.excludedUrlBulkUploadDescription)}\r\n              isLoading={this.state.textFileLoading}\r\n              onUpload={(e) => this._uploadFile(e, FilterExcludedType.Url)}\r\n              disabled={this._isDisabled(\r\n                this.props.mode,\r\n                filterAccessPermissions === null ? completeAccess : filterAccessPermissions.excludedURLs\r\n              )}\r\n              ariaLabelledBy={'filterExcludedUrlBulkLabel'}\r\n            />\r\n            <>\r\n              <ActionButton\r\n                className={this._classNames.exportButton}\r\n                iconProps={{ iconName: 'export' }}\r\n                onClick={() => onFormDownloadClicked('ExcludedURL')}\r\n                disabled={\r\n                  this.props.mode !== FormState.Edit ||\r\n                  this._isDisabled(\r\n                    this.props.mode,\r\n                    filterAccessPermissions === null ? completeAccess : filterAccessPermissions.excludedURLs\r\n                  ) ||\r\n                  store.active.downloadExcludedUrlLoading\r\n                }\r\n                ariaDescription={formatMessage(messages.exportButtonDesc, { label: formatMessage(messages.inputExcludedURLs) })}\r\n              >\r\n                {formatMessage(AppMessages.export)}\r\n              </ActionButton>\r\n              {store.active.downloadExcludedUrlLoading && <Spinner />}\r\n            </>\r\n          </FormItem>\r\n          <FormItem formWidth={440}>\r\n            <FormLabel\r\n              id=\"filterExcludedAdKeywordBulkLabel\"\r\n              labelContent={formatMessage(messages.inputExcludedKeywordAd)}\r\n              calloutContent={helpInfo}\r\n              iconButtonOnClick={() => onHelpInfoCalloutOpened('pop_PCv4_FilterExcludeKwyAd', locale)}\r\n              calloutOnDismiss={() => onHelpInfoChanged()}\r\n              intl={this.props.intl}\r\n            />\r\n            <BulkUpload\r\n              uploadDescription={formatMessage(messages.exlcudedKeywordsBulkUploadDescription)}\r\n              isLoading={this.state.textFileLoading}\r\n              onUpload={(e) => this._uploadFile(e, FilterExcludedType.AdKeyword)}\r\n              disabled={this._isDisabled(\r\n                this.props.mode,\r\n                filterAccessPermissions === null ? completeAccess : filterAccessPermissions.excludedAdKeywords\r\n              )}\r\n              ariaLabelledBy={'filterExcludedAdKeywordBulkLabel'}\r\n            />\r\n            <>\r\n              <ActionButton\r\n                className={this._classNames.exportButton}\r\n                iconProps={{ iconName: 'export' }}\r\n                onClick={() => onFormDownloadClicked('ExcludedAdKeyword')}\r\n                disabled={\r\n                  this.props.mode !== FormState.Edit ||\r\n                  this._isDisabled(\r\n                    this.props.mode,\r\n                    filterAccessPermissions === null ? completeAccess : filterAccessPermissions.excludedAdKeywords\r\n                  ) ||\r\n                  store.active.downloadExcludedAdkeywordLoading\r\n                }\r\n                ariaDescription={formatMessage(messages.exportButtonDesc, { label: formatMessage(messages.inputExcludedKeywordAd) })}\r\n              >\r\n                {formatMessage(AppMessages.export)}\r\n              </ActionButton>\r\n              {store.active.downloadExcludedAdkeywordLoading && <Spinner />}\r\n            </>\r\n          </FormItem>\r\n          <FormItem formWidth={440}>\r\n            <FormLabel\r\n              id=\"filterExcludedQueryKeywordBulkLabel\"\r\n              labelContent={formatMessage(messages.inputExcludedKeywordQuery)}\r\n              calloutContent={helpInfo}\r\n              iconButtonOnClick={() => onHelpInfoCalloutOpened('pop_PCv4_FilterExcludeKwyQuery', locale)}\r\n              calloutOnDismiss={() => onHelpInfoChanged()}\r\n              intl={this.props.intl}\r\n            />\r\n            <BulkUpload\r\n              uploadDescription={formatMessage(messages.exlcudedKeywordsBulkUploadDescription)}\r\n              isLoading={this.state.textFileLoading}\r\n              onUpload={(e) => this._uploadFile(e, FilterExcludedType.QueryKeyword)}\r\n              disabled={this._isDisabled(\r\n                this.props.mode,\r\n                filterAccessPermissions === null ? completeAccess : filterAccessPermissions.excludedQueryKeywords\r\n              )}\r\n              ariaLabelledBy={'filterExcludedQueryKeywordBulkLabel'}\r\n            />\r\n            <>\r\n              <ActionButton\r\n                className={this._classNames.exportButton}\r\n                iconProps={{ iconName: 'export' }}\r\n                onClick={() => onFormDownloadClicked('ExcludedQueryKeyword')}\r\n                disabled={\r\n                  this.props.mode !== FormState.Edit ||\r\n                  this._isDisabled(\r\n                    this.props.mode,\r\n                    filterAccessPermissions === null ? completeAccess : filterAccessPermissions.excludedQueryKeywords\r\n                  ) ||\r\n                  store.active.downloadExcludedQueryKeywordLoading\r\n                }\r\n                ariaDescription={formatMessage(messages.exportButtonDesc, { label: formatMessage(messages.inputExcludedKeywordQuery) })}\r\n              >\r\n                {formatMessage(AppMessages.export)}\r\n              </ActionButton>\r\n              {store.active.downloadExcludedQueryKeywordLoading && <Spinner />}\r\n            </>\r\n          </FormItem>\r\n        </>\r\n      );\r\n    };\r\n\r\n    private _uploadFile(event, excludedType: FilterExcludedType) {\r\n      const file = event.target.files[0];\r\n\r\n      const reader = new FileReader();\r\n      reader.onloadstart = () => {\r\n        this.setState({ textFileLoading: true });\r\n      };\r\n      // tslint:disable-next-line\r\n      reader.onload = (event: any) => {\r\n        const content = event.target.result;\r\n        switch (excludedType) {\r\n          case FilterExcludedType.Url:\r\n            onFormAppendExcludedUrlsChanged(content);\r\n            break;\r\n          case FilterExcludedType.AdKeyword:\r\n            onFormAppendExcludedAdKeywordsChanged(content);\r\n            break;\r\n          case FilterExcludedType.QueryKeyword:\r\n            onFormAppendExcludedQueryKeywordsChanged(content);\r\n            break;\r\n        }\r\n      };\r\n      reader.onloadend = () => {\r\n        this.setState({ textFileLoading: false });\r\n      };\r\n      if (file) {\r\n        reader.readAsText(file);\r\n      }\r\n    }\r\n\r\n    private _getFilterAccessPermission(): FilterAccessPermissions | null {\r\n      const userRoles = localStorage.getItem(userRoleKey);\r\n      if (userRoles === null) {\r\n        return null;\r\n      }\r\n      const userRolesJSON = JSON.parse(userRoles);\r\n\r\n      for (const value in userRolesJSON) {\r\n        if (value === UserRoleEntity.Filter) {\r\n          return JSON.parse(userRolesJSON[value]);\r\n        }\r\n      }\r\n\r\n      return null;\r\n    }\r\n\r\n    private _isDisabled(mode: FormState, permission: number): boolean {\r\n      if (mode === FormState.Create || mode === FormState.InPageCreate) {\r\n        return false;\r\n      }\r\n\r\n      return !hasUpdateAccess(permission);\r\n    }\r\n  }\r\n);\r\n","import { defineMessages } from 'react-intl';\r\n\r\nexport default defineMessages({\r\n  create: {\r\n    id: 'adfilter.create',\r\n    defaultMessage: 'Create Ad Filter',\r\n  },\r\n  notFound: {\r\n    id: 'adfilter.notFound',\r\n    defaultMessage: 'No Ad Filters found for this account, create one.',\r\n  },\r\n  deactivateTitle: {\r\n    id: 'adfilter.deactivateTitle',\r\n    defaultMessage: 'Do you want to deactivate ad filter(s)?',\r\n  },\r\n  name: {\r\n    id: 'adfilter.name',\r\n    defaultMessage: 'Ad filter name',\r\n  },\r\n  id: {\r\n    id: 'adfilter.id',\r\n    defaultMessage: 'Ad filter ID',\r\n  },\r\n  scope: {\r\n    id: 'adfilter.scope',\r\n    defaultMessage: 'Scope',\r\n  },\r\n  excludedURL: {\r\n    id: 'adfilter.excludedURL',\r\n    defaultMessage: 'Excluded URLs',\r\n  },\r\n  excludedKeywords: {\r\n    id: 'adfilter.excludedKeywords',\r\n    defaultMessage: 'Excluded keywords',\r\n  },\r\n  channelsNumber: {\r\n    id: 'adfilter.ChannelsNumber',\r\n    defaultMessage: '# of channels',\r\n  },\r\n  channelNames: {\r\n    id: 'adfilter.channelNames',\r\n    defaultMessage: 'Channel names',\r\n  },\r\n  adfilters: {\r\n    id: 'adfilters',\r\n    defaultMessage: 'Ad filters',\r\n  },\r\n  dateRangeFilterName: {\r\n    id: 'adfilter.dateRangeFilterName',\r\n    defaultMessage: 'Date range',\r\n  },\r\n  startTime: {\r\n    id: 'adfilter.startTime',\r\n    defaultMessage: 'Start time',\r\n  },\r\n  endTime: {\r\n    id: 'adfilter.endTime',\r\n    defaultMessage: 'End time',\r\n  },\r\n  actions: {\r\n    id: 'adfilter.actions',\r\n    defaultMessage: 'Actions',\r\n  },\r\n  zeroResultTitle: {\r\n    id: 'channel.zeroResultTitle',\r\n    defaultMessage: 'No filters yet',\r\n  },\r\n  zeroResultDescription: {\r\n    id: 'channel.zeroResultDescription',\r\n    defaultMessage: 'You haven’t created any filters yet',\r\n  },\r\n  noPublisherSelected: {\r\n    id: 'property.noPublisherSelected',\r\n    defaultMessage: 'A publisher isn’t selected yet. To start managing filters, search for a publisher..',\r\n  },\r\n});\r\n","import { IDropdownOption } from '@fluentui/react';\r\nimport { Filter } from '../../../../../@data';\r\nimport AppMessages from '../../../../../App.messages';\r\nimport { FilterType, IFilterDetails } from '../../../../../components/GridFilter/GridFilter.types';\r\nimport { IFilterItem } from '../../../../../layout/GridPageV2';\r\nimport messages from '../ManagePage.messages';\r\n\r\nexport function getFilterItems(formatMessage): IFilterItem[] {\r\n  const filters: IFilterItem[] = [\r\n    { columnName: 'name', filterName: formatMessage(messages.name), filterType: FilterType.string },\r\n    { columnName: 'id', filterName: formatMessage(messages.id), filterType: FilterType.relational },\r\n    {\r\n      columnName: 'filterScope',\r\n      filterName: formatMessage(messages.scope),\r\n      filterType: FilterType.custom,\r\n      filterOptions: [\r\n        { key: 'Publisher', text: 'Publisher level filter' },\r\n        { key: 'Account', text: 'Account level filter' },\r\n      ] as IDropdownOption[],\r\n    },\r\n    {\r\n      columnName: 'status',\r\n      filterName: formatMessage(AppMessages.status),\r\n      filterType: FilterType.custom,\r\n      filterOptions: [\r\n        { key: 'Active', text: formatMessage(AppMessages.statusActive) },\r\n        { key: 'Inactive', text: formatMessage(AppMessages.statusInactive) },\r\n      ] as IDropdownOption[],\r\n    },\r\n    {\r\n      filterName: formatMessage(messages.dateRangeFilterName),\r\n      filterType: FilterType.date,\r\n      showNullsCheckboxLabel: 'Indefinite date',\r\n      customFunction: (dataRow: Filter, filterDetails: IFilterDetails) => {\r\n        const startTime = dataRow.startTimeStamp ? dataRow.startTimeStamp.toString() : undefined;\r\n        const endTime = dataRow.endTimeStamp ? dataRow.endTimeStamp.toString() : undefined;\r\n\r\n        const startDateFilter = filterDetails.startDate ? new Date(filterDetails.startDate.getTime()).toISOString() : undefined;\r\n        const endDateFilter = filterDetails.endDate ? new Date(filterDetails.endDate.getTime()).toISOString() : undefined;\r\n\r\n        if (!filterDetails.includeNulls) {\r\n          if (!startTime && !endTime) {\r\n            return false;\r\n          }\r\n\r\n          if (startDateFilter && endTime && endTime < startDateFilter) {\r\n            return false;\r\n          }\r\n          if (endDateFilter && startTime && endDateFilter < startTime) {\r\n            return false;\r\n          }\r\n          return true;\r\n        } else {\r\n          // if includeNulls is true, then return filters which are applied indefinetly.\r\n          if (endTime) {\r\n            return false;\r\n          }\r\n          return true;\r\n        }\r\n      },\r\n    },\r\n  ];\r\n\r\n  return filters;\r\n}\r\n","import { Model, getAppStore } from '../../../../../@data';\r\nimport { CommandBarActions, IBuildCommandBarProps } from '../../../../../layout/GridPageV2';\r\nimport { getFilterStore } from '../../@data';\r\nimport messages from '../ManagePage.messages';\r\nimport { getFilterItems } from './getFilterItems';\r\n\r\nexport function getCommandBarItems(formatMessage): IBuildCommandBarProps<Model> | undefined {\r\n  const { publisher, account } = getAppStore();\r\n  const { gridFilters, isLoading } = getFilterStore();\r\n\r\n  const commandBarItems: IBuildCommandBarProps<Model> | undefined =\r\n    (gridFilters && gridFilters.length !== 0 && publisher && account) || isLoading === true\r\n      ? {\r\n          primaryButtonLabel: messages.create,\r\n          includeActions: [CommandBarActions.new],\r\n          includeFarActions: [\r\n            CommandBarActions.searchBox,\r\n            CommandBarActions.addFilter,\r\n            CommandBarActions.edit,\r\n            CommandBarActions.activate,\r\n            CommandBarActions.deactivate,\r\n            CommandBarActions.delete,\r\n            CommandBarActions.download,\r\n            CommandBarActions.duplicate,\r\n            CommandBarActions.modifyColumns,\r\n          ],\r\n          filterItems: getFilterItems(formatMessage),\r\n        }\r\n      : undefined;\r\n\r\n  return commandBarItems;\r\n}\r\n","import * as React from 'react';\r\nimport { useEffect } from 'react';\r\nimport { Filter, getAppStore } from '../../../../@data';\r\nimport { DefaultRoute } from '../../../../Routes';\r\nimport { ZeroResults } from '../../../../components/ZeroResults/ZeroResults';\r\nimport { useWindowSize } from '../../../../hooks';\r\nimport { getStore as getWindowSizeStore } from '../../../../hooks/useWindowSize/store/store';\r\nimport { GridPageLayout } from '../../../../layout/GridPageLayout/GridPageLayout';\r\nimport { GridV2, IGridV2Column } from '../../../../layout/GridPageV2';\r\nimport { IRouterWithIntl, injectIntlWithObserver } from '../../../../utils/ReactUtils';\r\nimport { RouteName } from '../../@data';\r\nimport { getFilterStore } from '../@data';\r\nimport { onFiltersFetched } from '../@data/actions';\r\nimport { onManagePageInitialized } from '../@data/actions/onManagePageInitialized';\r\nimport messages from './ManagePage.messages';\r\nimport { getCommandBarItems } from './utils/getCommandBarItems';\r\nimport { getGridColumns } from './utils/getGridColumns';\r\n\r\nexport const ManagePage = injectIntlWithObserver(function FilterManagePage(props: IRouterWithIntl) {\r\n  const { publisher, account } = getAppStore();\r\n  const { gridFilters, isLoading, isFetchingData } = getFilterStore();\r\n  const { formatMessage } = props.intl;\r\n  const { windowStoreSerializer } = useWindowSize();\r\n  const { isWindowRegularSize } = windowStoreSerializer(getWindowSizeStore());\r\n  const gridDefaultColumns: IGridV2Column[] = getGridColumns(formatMessage, isWindowRegularSize, props.history);\r\n\r\n  const NoResultComponent = (\r\n    <ZeroResults\r\n      showDefaultImage\r\n      title={!!publisher ? formatMessage(messages.zeroResultTitle) : undefined}\r\n      description={formatMessage(!!publisher ? messages.zeroResultDescription : messages.noPublisherSelected)}\r\n      buttonText={formatMessage(messages.create)}\r\n      onButtonClick={\r\n        !!publisher ? () => props.history.push(`${DefaultRoute}/${publisher?.id}-${account?.id}/${RouteName.adfilter}/create`) : undefined\r\n      }\r\n    />\r\n  );\r\n\r\n  useEffect(() => {\r\n    onManagePageInitialized();\r\n    // eslint-disable-next-line\r\n  }, [publisher, account]);\r\n\r\n  return (\r\n    <GridPageLayout>\r\n      <GridV2\r\n        history={props.history}\r\n        location={props.location}\r\n        match={props.match}\r\n        entity={Filter}\r\n        pageTitle={{ title: formatMessage(messages.adfilters), helpId: 'pop_PCv4_Filters' }}\r\n        commandBarProps={getCommandBarItems(formatMessage)}\r\n        dataGridProps={{\r\n          gridV2Columns: gridDefaultColumns,\r\n          data: publisher && account ? gridFilters || [] : [],\r\n          setData: onFiltersFetched,\r\n          shimmerLines: 10,\r\n          renderZeroItemsComponent: NoResultComponent,\r\n        }}\r\n        isGridReady={!isLoading}\r\n        isDataLoading={isFetchingData}\r\n        paginationProps={{\r\n          shouldGridHandlePagination: true,\r\n        }}\r\n      />\r\n    </GridPageLayout>\r\n  );\r\n});\r\n","import { CommandBarButton } from '@fluentui/react';\r\nimport React from 'react';\r\nimport { Filter, PopupType, getAccessPermission, getAppStore } from '../../../../../@data';\r\nimport { hasDeleteAccess, hasUpdateAccess } from '../../../../../@data/services/UserRoleService';\r\nimport AppMessages from '../../../../../App.messages';\r\nimport { IGridV2Column } from '../../../../../layout/GridPageV2';\r\nimport { setDialogType } from '../../../../../layout/GridPageV2/@data/mutatorActions';\r\nimport messages from '../ManagePage.messages';\r\n\r\nexport function getGridColumns(formatMessage, isWindowRegularSize, routeHistory): IGridV2Column[] {\r\n  const appStore = getAppStore();\r\n\r\n  const columns: IGridV2Column[] = [\r\n    {\r\n      columnOrder: 1,\r\n      key: 'name',\r\n      fieldName: 'name',\r\n      name: formatMessage(messages.name),\r\n      minWidth: 100,\r\n      maxWidth: 125,\r\n      isSearchable: true,\r\n      isVisible: true,\r\n      isExportable: true,\r\n      isResizable: true,\r\n      suppressSorting: false,\r\n    },\r\n    {\r\n      columnOrder: 2,\r\n      key: 'id',\r\n      fieldName: 'id',\r\n      name: formatMessage(messages.id),\r\n      minWidth: 100,\r\n      maxWidth: 100,\r\n      isSearchable: true,\r\n      isVisible: true,\r\n      isExportable: true,\r\n      isResizable: true,\r\n    },\r\n    {\r\n      columnOrder: 3,\r\n      key: 'filterScope',\r\n      fieldName: 'filterScope',\r\n      name: formatMessage(messages.scope),\r\n      minWidth: 100,\r\n      maxWidth: 100,\r\n      isSearchable: true,\r\n      isVisible: true,\r\n      isExportable: true,\r\n    },\r\n    {\r\n      columnOrder: 4,\r\n      key: 'status',\r\n      fieldName: 'status',\r\n      name: formatMessage(AppMessages.status),\r\n      minWidth: 100,\r\n      maxWidth: 100,\r\n      isSearchable: true,\r\n      isVisible: true,\r\n      isExportable: true,\r\n    },\r\n    {\r\n      columnOrder: 5,\r\n      key: 'blockedUrlCount',\r\n      fieldName: 'blockedUrlCount',\r\n      name: formatMessage(messages.excludedURL),\r\n      minWidth: 150,\r\n      maxWidth: 150,\r\n      isSearchable: true,\r\n      isResizable: true,\r\n      isVisible: true,\r\n      isExportable: true,\r\n    },\r\n    {\r\n      columnOrder: 6,\r\n      key: 'blockedAdKeywordCount',\r\n      fieldName: 'blockedAdKeywordCount',\r\n      name: formatMessage(messages.excludedKeywords),\r\n      minWidth: 150,\r\n      maxWidth: 150,\r\n      isSearchable: true,\r\n      isResizable: true,\r\n      isVisible: true,\r\n      isExportable: true,\r\n    },\r\n    {\r\n      columnOrder: 7,\r\n      key: 'associatedChannelCount',\r\n      fieldName: 'associatedChannelCount',\r\n      name: formatMessage(messages.channelsNumber),\r\n      minWidth: 150,\r\n      maxWidth: 150,\r\n      isSearchable: true,\r\n      isResizable: true,\r\n      isVisible: true,\r\n      isExportable: true,\r\n    },\r\n    {\r\n      columnOrder: 8,\r\n      key: 'channelNames',\r\n      fieldName: 'channelNames',\r\n      name: formatMessage(messages.channelNames),\r\n      minWidth: 150,\r\n      maxWidth: 150,\r\n      isSearchable: true,\r\n      isResizable: true,\r\n      isVisible: false,\r\n      isExportable: true,\r\n      onRender: (item: Filter) => item.associatedChannelIds?.join(', '),\r\n    },\r\n    {\r\n      columnOrder: 9,\r\n      key: 'startTime',\r\n      fieldName: 'startTime',\r\n      name: formatMessage(messages.startTime),\r\n      minWidth: 150,\r\n      maxWidth: 150,\r\n      isSearchable: true,\r\n      isResizable: true,\r\n      isVisible: true,\r\n      isExportable: true,\r\n    },\r\n    {\r\n      columnOrder: 10,\r\n      key: 'endTime',\r\n      fieldName: 'endTime',\r\n      name: formatMessage(messages.endTime),\r\n      minWidth: 150,\r\n      maxWidth: 150,\r\n      isSearchable: true,\r\n      isResizable: true,\r\n      isVisible: false,\r\n      isExportable: true,\r\n    },\r\n    {\r\n      columnOrder: 11,\r\n      key: 'actions',\r\n      name: formatMessage(messages.actions),\r\n      minWidth: 150,\r\n      maxWidth: 150,\r\n      isPadded: true,\r\n      isSearchable: true,\r\n      isVisible: true,\r\n      suppressSorting: true,\r\n      onRender: (item: Filter) => {\r\n        const accessPermission = getAccessPermission(item);\r\n\r\n        return (\r\n          <div>\r\n            <CommandBarButton\r\n              id={`adunitCallout-${item.id}`}\r\n              styles={{ root: { background: 'transparent' } }}\r\n              iconProps={{ iconName: 'edit' }}\r\n              ariaLabel={formatMessage(AppMessages.edit)}\r\n              text={isWindowRegularSize ? formatMessage(AppMessages.edit) : ''}\r\n              disabled={!hasUpdateAccess(accessPermission) || appStore?.publisher === undefined || appStore?.account === undefined}\r\n              onClick={() =>\r\n                routeHistory.push(`/ad-management/${appStore?.publisher?.id}-${appStore?.account?.id}/adfilter/edit/${item.id}`)\r\n              }\r\n            />\r\n            <CommandBarButton\r\n              styles={{ root: { background: 'transparent' } }}\r\n              iconProps={{ iconName: 'Delete' }}\r\n              text={isWindowRegularSize ? formatMessage(AppMessages.delete) : ''}\r\n              onClick={() => setDialogType(PopupType.DeleteConfirmation)}\r\n              disabled={!hasDeleteAccess(accessPermission)}\r\n            />\r\n          </div>\r\n        );\r\n      },\r\n    },\r\n  ];\r\n\r\n  return columns;\r\n}\r\n","import * as React from 'react';\r\nimport { InjectedIntlProps, injectIntl } from 'react-intl';\r\nimport { Route, RouteComponentProps } from 'react-router-dom';\r\nimport { RoutePrefix } from '../../../Routes';\r\nimport { FormState } from '../../../components/Form';\r\nimport { RouteName } from '../@data';\r\nimport { onCurrentRouteChanged } from '../@data/actions';\r\nimport './@data/mutators';\r\nimport './@data/orchestrators';\r\nimport { CreateAdFilter } from './Create/CreateAdFilter';\r\nimport { ManagePage } from './Manage/ManagePage';\r\n\r\nexport const AdFilterPage = injectIntl(function AdFilterPageComponent({\r\n  match,\r\n  intl,\r\n}: RouteComponentProps & InjectedIntlProps): JSX.Element {\r\n  React.useEffect(() => {\r\n    onCurrentRouteChanged(RouteName.adfilter, intl.formatMessage);\r\n    // eslint-disable-next-line react-hooks/exhaustive-deps\r\n  }, []);\r\n\r\n  return (\r\n    <React.Fragment>\r\n      <Route exact path={`${match.url}`} component={ManagePage} />\r\n      <Route\r\n        path={`/${RoutePrefix.adManagement}/:publisherId-:accountId/${RouteName[RouteName.adfilter]}/create`}\r\n        render={(props) => <CreateAdFilter {...props} mode={FormState.Create} />}\r\n      />\r\n      <Route\r\n        path={`/${RoutePrefix.adManagement}/:publisherId-:accountId/${RouteName[RouteName.adfilter]}/edit/:id`}\r\n        render={(props) => <CreateAdFilter {...props} mode={FormState.Edit} />}\r\n      />\r\n    </React.Fragment>\r\n  );\r\n});\r\n","import { IComboBoxOption } from '@fluentui/react';\r\nimport { action } from 'satcheljs';\r\nimport { IDataGridColumn } from '../../../../../layout/GridPageV2';\r\nimport { IAdCreativeViewModel } from '../store/schema';\r\nimport { AdPerformanceData, BlockItemType } from '../store/schema/models';\r\n\r\nexport const onAdCreativeChanged = action('onAdCreativeChanged', (adcreative: IAdCreativeViewModel) => ({ adcreative }));\r\n\r\nexport const onAdSourceChanged = action('onAdSourceChanged', (adSource?: IComboBoxOption) => ({ adSource }));\r\n\r\nexport const onAdProviderChanged = action('onAdProviderChanged', (adProvider?: IComboBoxOption) => ({ adProvider }));\r\n\r\nexport const onAdCreativeAccountChanged = action('onAdCreativeAccountChanged', (account?: IComboBoxOption) => ({ account }));\r\n\r\nexport const onAdCreativeMarketChanged = action('onAdCreativeMarketChanged', (market?: IComboBoxOption) => ({ market }));\r\n\r\nexport const onAdCreativeBlockedMarketChanged = action('onAdCreativeBlockedMarketChanged', (market?: IComboBoxOption) => ({ market }));\r\n\r\nexport const onAdCreativeSearchBoxValueChanged = action('onAdCreativeSearchBoxValueChanged', (value?: string) => ({ value }));\r\n\r\nexport const onAdCreativeStartDateChanged = action('onAdCreativeStartDateChanged', (startDate?: Date) => ({ startDate }));\r\n\r\nexport const onAdCreativeEndDateChanged = action('onAdCreativeEndDateChanged', (endDate?: Date) => ({ endDate }));\r\n\r\nexport const onAdCreativeRefreshDataChanged = action('onAdCreativeRefreshDataChanged', () => ({}));\r\n\r\nexport const onAdCreativeAdPerfDataChanged = action('onAdCreativeAdPerfDataChanged', (data?: AdPerformanceData[]) => ({ data }));\r\n\r\nexport const onAdCreativeBlockPanelChanged = action('onAdCreativeBlockPanelChanged', (value: boolean, item?: BlockItemType) => ({\r\n  value,\r\n  item,\r\n}));\r\n\r\nexport const onAdCreativeExportClicked = action('onAdCreativeExportClicked', (columns?: IDataGridColumn[]) => ({ columns }));\r\n\r\nexport const onAdQualityPanelApplyButtonClicked = action('onAdQualityPanelApplyButtonClicked', () => ({}));\r\n","import { action } from 'satcheljs';\r\n\r\nexport const onTeachingBubbleStartDateStatusChanged = action('onTeachingBubbleStatusChanged', (isVisible?: boolean) => ({ isVisible }));\r\nexport const onTeachingBubbleEndDateStatusChanged = action('onTeachingBubbleStatusChanged', (isVisible?: boolean) => ({ isVisible }));\r\n","import { mutator } from 'satcheljs';\r\nimport { AdSource } from '../../../../../@data';\r\nimport {\r\n  onAdCreativeAccountChanged,\r\n  onAdCreativeAdPerfDataChanged,\r\n  onAdCreativeBlockedMarketChanged,\r\n  onAdCreativeBlockPanelChanged,\r\n  onAdCreativeChanged,\r\n  onAdCreativeEndDateChanged,\r\n  onAdCreativeExportClicked,\r\n  onAdCreativeMarketChanged,\r\n  onAdCreativeSearchBoxValueChanged,\r\n  onAdCreativeStartDateChanged,\r\n  onAdProviderChanged,\r\n  onAdSourceChanged,\r\n} from '../actions/onAdCreativeChanged';\r\nimport { onTeachingBubbleEndDateStatusChanged, onTeachingBubbleStartDateStatusChanged } from '../actions/onTeachingBubbleActions';\r\nimport { getStore } from '../store/store';\r\n\r\nmutator(onAdCreativeChanged, (msg) => {\r\n  getStore().active = msg.adcreative;\r\n});\r\n\r\nmutator(onAdSourceChanged, (msg) => {\r\n  if (msg.adSource) {\r\n    getStore().active.selectedAdSource = msg.adSource.key as AdSource;\r\n    getStore().active.adPerfData = [];\r\n  }\r\n});\r\n\r\nmutator(onAdProviderChanged, (msg) => {\r\n  if (msg.adProvider) {\r\n    getStore().active.selectedAdProviderId = msg.adProvider.key as number;\r\n  }\r\n});\r\n\r\nmutator(onAdCreativeAccountChanged, (msg) => {\r\n  if (msg.account) {\r\n    getStore().active.selectedAccount = msg.account.key as number;\r\n  } else {\r\n    getStore().active.selectedAccount = undefined;\r\n  }\r\n});\r\n\r\nmutator(onAdCreativeMarketChanged, (msg) => {\r\n  if (msg.market) {\r\n    getStore().active.selectedMarket = msg.market.key as string;\r\n  } else {\r\n    getStore().active.selectedMarket = undefined;\r\n  }\r\n});\r\n\r\nmutator(onAdCreativeBlockedMarketChanged, (msg) => {\r\n  if (msg.market) {\r\n    getStore().active.selectedBlockedMarketId = msg.market.key as number;\r\n  } else {\r\n    getStore().active.selectedBlockedMarketId = undefined;\r\n  }\r\n});\r\n\r\nmutator(onAdCreativeSearchBoxValueChanged, (msg) => {\r\n  getStore().active.searchBoxValue = msg.value;\r\n});\r\n\r\nmutator(onAdCreativeStartDateChanged, (msg) => {\r\n  // Datepicker gives date in local time at 00:00:00\r\n  getStore().active.startDate = msg.startDate;\r\n});\r\n\r\nmutator(onAdCreativeEndDateChanged, (msg) => {\r\n  // Datepicker gives date in local time at 00:00:00\r\n  getStore().active.endDate = msg.endDate;\r\n});\r\n\r\nmutator(onAdCreativeAdPerfDataChanged, (msg) => {\r\n  getStore().active.adPerfData = msg.data;\r\n});\r\n\r\nmutator(onAdCreativeBlockPanelChanged, (msg) => {\r\n  getStore().panelIsOpen = msg.value;\r\n  getStore().panelItemType = msg.item;\r\n  getStore().blockAdsPage.blockItemType = msg.item;\r\n  if (!msg.value) {\r\n    getStore().blockAdsPage = { adPerfBlockAdsData: [], channels: {} };\r\n    getStore().errors = {};\r\n  }\r\n});\r\n\r\nmutator(onAdCreativeExportClicked, (msg) => {\r\n  getStore().columns = msg.columns;\r\n});\r\n\r\nmutator(onTeachingBubbleEndDateStatusChanged, (msg) => {\r\n  const store = getStore();\r\n  store.teachingBubbleEndDate = msg.isVisible;\r\n});\r\n\r\nmutator(onTeachingBubbleStartDateStatusChanged, (msg) => {\r\n  const store = getStore();\r\n  store.teachingBubbleStartDate = msg.isVisible;\r\n});\r\n","import { defineMessages } from 'react-intl';\r\n\r\nexport default defineMessages({\r\n  startDate: {\r\n    id: 'admanagement.adquality.startDate',\r\n    defaultMessage: 'Start date (UTC)',\r\n  },\r\n  blockErrorMessage: {\r\n    id: 'admanagement.adquality.blockErrorMessage',\r\n    defaultMessage: 'Error in bulk blocking. Please select maximum of 30 ads when using bulk blocks.',\r\n  },\r\n  startDatePlaceHolder: {\r\n    id: 'admanagement.adquality.startDatePlaceHolder',\r\n    defaultMessage: 'Select start date...',\r\n  },\r\n  clearStartDateSelAriaLabel: {\r\n    id: 'admanagement.adquality.clearStartDateSelAriaLabel',\r\n    defaultMessage: 'clear start date selection',\r\n  },\r\n  clear: {\r\n    id: 'admanagement.adquality.clear',\r\n    defaultMessage: 'Clear',\r\n  },\r\n  adReview: {\r\n    id: 'admanagement.adquality.adReview',\r\n    defaultMessage: 'Ad review',\r\n  },\r\n  noAdsPerfData: {\r\n    id: 'admanagement.adquality.noAdsPerfData',\r\n    defaultMessage: 'There is no data for this selection',\r\n  },\r\n  noBlockData: {\r\n    id: 'admanagement.adquality.noBlockData',\r\n    defaultMessage: 'There are no ad blocks for this selection',\r\n  },\r\n  blockSummary: {\r\n    id: 'admanagement.adquality.blockSummary',\r\n    defaultMessage: 'Block summary',\r\n  },\r\n  endDate: {\r\n    id: 'admanagement.adquality.endDate',\r\n    defaultMessage: 'End date (UTC)',\r\n  },\r\n  endDatePlaceHolder: {\r\n    id: 'admanagement.adquality.endDatePlaceHolder',\r\n    defaultMessage: 'Select end date...',\r\n  },\r\n  clearEndDateSelAriaLabel: {\r\n    id: 'admanagement.adquality.clearEndDateSelAriaLabel',\r\n    defaultMessage: 'clear end date selection',\r\n  },\r\n  searchboxPlaceHolder: {\r\n    id: 'admanagement.adquality.searchboxPlaceHolder',\r\n    defaultMessage: 'Filter',\r\n  },\r\n  searchBoxAriaLabel: {\r\n    id: 'admanagement.adquality.searchBoxAriaLabel',\r\n    defaultMessage: 'Filter data grid',\r\n  },\r\n  accountsCombo: {\r\n    id: 'admanagement.adquality.accountsCombo',\r\n    defaultMessage: 'Accounts',\r\n  },\r\n  marketsCombo: {\r\n    id: 'admanagement.adquality.marketsCombo',\r\n    defaultMessage: 'Markets',\r\n  },\r\n  applyFilters: {\r\n    id: 'admanagement.adquality.applyFilters',\r\n    defaultMessage: 'Apply',\r\n  },\r\n  applyFiltersAriaDesc: {\r\n    id: 'admanagement.adquality.applyFiltersAriaDesc',\r\n    defaultMessage: 'Press to apply selected filters on the data grid',\r\n  },\r\n  blockAds: {\r\n    id: 'admanagement.adquality.blockad',\r\n    defaultMessage: 'Block Ads',\r\n  },\r\n  blockImages: {\r\n    id: 'admanagement.adquality.blockImages',\r\n    defaultMessage: 'Block images',\r\n  },\r\n  viewImages: {\r\n    id: 'admanagement.adquality.viewImages',\r\n    defaultMessage: 'View images',\r\n  },\r\n  blockAdsMenuButtonLabel: {\r\n    id: 'admanagement.adquality.blockAdsMenuButtonLabel',\r\n    defaultMessage: 'Block ads',\r\n  },\r\n  blockImagesMenuButtonLabel: {\r\n    id: 'admanagement.adquality.blockImagesMenuButtonLabel',\r\n    defaultMessage: 'Block/View images',\r\n  },\r\n  viewImagesDescription: {\r\n    id: 'admanagement.adquality.viewImagesDescription',\r\n    defaultMessage: 'Some images cannot be blocked. Currently the entire ad must be blocked to prevent those images from being served.',\r\n  },\r\n  blockSummaryMSGridAriaLabel: {\r\n    id: 'admanagement.adquality.blockSummaryMSGridAriaLabel',\r\n    defaultMessage: 'Grid containing details of blocked Microsoft ads',\r\n  },\r\n  blockSummaryAuctionGridAriaLabel: {\r\n    id: 'admanagement.adquality.blockSummaryAuctionGridAriaLabel',\r\n    defaultMessage: 'Grid containing details of blocked Auction ads',\r\n  },\r\n  adReviewGridAriaLabel: {\r\n    id: 'admanagement.adquality.adReviewGridAriaLabel',\r\n    defaultMessage: 'Datagrid containing ads',\r\n  },\r\n  exportGrid: {\r\n    id: 'admanagement.adquality.exportGrid',\r\n    defaultMessage: 'Export below table',\r\n  },\r\n  exportImageBlocks: {\r\n    id: 'admanagement.adquality.exportImageBlocks',\r\n    defaultMessage: 'Export all image blocks',\r\n  },\r\n  enableBlocking: {\r\n    id: 'enableBlocking',\r\n    defaultMessage: 'Enable blocking',\r\n  },\r\n  disableBlocking: {\r\n    id: 'disableBlocking',\r\n    defaultMessage: 'Disable blocking',\r\n  },\r\n  adSourceCombo: {\r\n    id: 'admanagement.adquality.adSourceCombo',\r\n    defaultMessage: 'Ad Source',\r\n  },\r\n  auctionAdSourceCombo: {\r\n    id: 'admanagement.adquality.auctionAdSourceCombo',\r\n    defaultMessage: 'Ad Provider',\r\n  },\r\n  microsoft: {\r\n    id: 'admanagement.adquality.microsoft',\r\n    defaultMessage: 'Microsoft',\r\n  },\r\n  auction: {\r\n    id: 'admanagement.adquality.auction',\r\n    defaultMessage: 'Auction',\r\n  },\r\n  xandrAuction: {\r\n    id: 'admanagement.adquality.xandrAuction',\r\n    defaultMessage: 'Xandr Auction',\r\n  },\r\n  AdId: {\r\n    id: 'admanagement.adquality.AdId',\r\n    defaultMessage: 'Ad Id - Displaying {count}',\r\n  },\r\n  blockAdTitle: {\r\n    id: 'admanagement.adquality.blockAdTitle',\r\n    defaultMessage: 'Title',\r\n  },\r\n  blockAdURL: {\r\n    id: 'admanagement.adquality.blockAdURL',\r\n    defaultMessage: 'URL',\r\n  },\r\n  selectChannel: {\r\n    id: 'admanagement.adquality.selectChannel',\r\n    defaultMessage: 'Select channel',\r\n  },\r\n  selectMarket: {\r\n    id: 'admanagement.adquality.selectMarket',\r\n    defaultMessage: 'Select market',\r\n  },\r\n  createNewChannel: {\r\n    id: 'admanagement.adquality.createNewChannel',\r\n    defaultMessage: 'Create new channel',\r\n  },\r\n  blockReasonCategory: {\r\n    id: 'admanagement.adquality.blockReasonCategory',\r\n    defaultMessage: 'Block reason category',\r\n  },\r\n  blockReason: {\r\n    id: 'admanagement.adquality.blockReason',\r\n    defaultMessage: 'Block reason sub-category',\r\n  },\r\n  additionalDetials: {\r\n    id: 'admanagement.adquality.additionalDetials',\r\n    defaultMessage: 'Additional details/reason for blocking',\r\n  },\r\n  editBlockReason: {\r\n    id: 'admanagement.adquality.editBlockReason',\r\n    defaultMessage: 'Edit block reason',\r\n  },\r\n  channelName: {\r\n    id: 'admanagement.adquality.channelName',\r\n    defaultMessage: 'Channel name',\r\n  },\r\n  addAdnuits: {\r\n    id: 'admanagement.adquality.addAdunits',\r\n    defaultMessage: 'Add ad units',\r\n  },\r\n  disallowedByNCAP: {\r\n    id: 'admanagement.adquality.disallowedByNCAP',\r\n    defaultMessage: 'Disallowed by NCAP',\r\n  },\r\n  maliciousAdvertiser: {\r\n    id: 'admanagement.adquality.maliciousAdvertiser',\r\n    defaultMessage: 'Malicious Advertiser',\r\n  },\r\n  Misspellings: {\r\n    id: 'admanagement.adquality.Misspellings',\r\n    defaultMessage: 'Ad Text Quality – Misspellings',\r\n  },\r\n  competitiveExclusion: {\r\n    id: 'admanagement.adquality.competitiveExclusion',\r\n    defaultMessage: 'Competitive Exclusion',\r\n  },\r\n  badLandingPage: {\r\n    id: 'admanagement.adquality.badLandingPage',\r\n    defaultMessage: 'Bad landing page experience',\r\n  },\r\n  misleadingAdHeadline: {\r\n    id: 'admanagement.adquality.misleadingAdHeadline',\r\n    defaultMessage: 'Misleading ad headline',\r\n  },\r\n  sensationalAdOrLandingPage: {\r\n    id: 'admanagement.adquality.sensationalAdOrLandingPage',\r\n    defaultMessage: 'Sensational ad or landing page content',\r\n  },\r\n  offensiveAdOrLandingPage: {\r\n    id: 'admanagement.adquality.offensiveAdOrLandingPage',\r\n    defaultMessage: 'Offensive ad or landing page content',\r\n  },\r\n  wrongLanguageforMarket: {\r\n    id: 'admanagement.adquality.wrongLanguageforMarket',\r\n    defaultMessage: 'Wrong language for market',\r\n  },\r\n  prohibitedAdCategory: {\r\n    id: 'admanagement.adquality.prohibitedAdCategory',\r\n    defaultMessage: 'Prohibited ad category',\r\n  },\r\n  deceptiveAdvertiser: {\r\n    id: 'admanagement.adquality.deceptiveAdvertiser',\r\n    defaultMessage: 'Deceptive advertiser',\r\n  },\r\n  otherReasonCategory: {\r\n    id: 'admanagement.adquality.otherReasonCategory',\r\n    defaultMessage: 'Other',\r\n  },\r\n  pastRevenue: {\r\n    id: 'admanagement.adquality.pastRevenue',\r\n    defaultMessage: 'Publisher 7-day revenue impact',\r\n  },\r\n  disallowedContent: {\r\n    id: 'admanagement.adquality.disallowed',\r\n    defaultMessage: 'Disallowed Content',\r\n  },\r\n  disallowedDeceptive: {\r\n    id: 'admanagement.adquality.disallowedDeceptive',\r\n    defaultMessage: 'Deceptive Products and services',\r\n  },\r\n  disallowedMisleading: {\r\n    id: 'admanagement.adquality.disallowedMisleading',\r\n    defaultMessage: 'Misleading messaging, content, or images',\r\n  },\r\n  disallowedOffensive: {\r\n    id: 'admanagement.adquality.disallowedOffensive',\r\n    defaultMessage: 'Offensive/controversial content',\r\n  },\r\n  disallowedSuffering: {\r\n    id: 'admanagement.adquality.disallowedSuffering',\r\n    defaultMessage: 'Suffering and violence',\r\n  },\r\n  disallowedDrugs: {\r\n    id: 'admanagement.adquality.disallowedDrugs',\r\n    defaultMessage: 'Drugs and related paraphernalia',\r\n  },\r\n  disallowedTobacco: {\r\n    id: 'admanagement.adquality.disallowedTobacco',\r\n    defaultMessage: 'Tobacco products',\r\n  },\r\n  disallowedSensitive: {\r\n    id: 'admanagement.adquality.disallowedSensitive',\r\n    defaultMessage: 'Sensitive advertising',\r\n  },\r\n  legalPrivacyAndSecurity: {\r\n    id: 'admanagement.adquality.legalPrivacyAndSecurity',\r\n    defaultMessage: 'Legal, privacy, and security',\r\n  },\r\n  legalMalware: {\r\n    id: 'admanagement.adquality.legalMalware',\r\n    defaultMessage: 'Malware and security',\r\n  },\r\n  legalPrivacy: {\r\n    id: 'admanagement.adquality.legalPrivacy',\r\n    defaultMessage: 'Privacy and data protection policies',\r\n  },\r\n  mediaFormats: {\r\n    id: 'admanagement.adquality.mediaFormats',\r\n    defaultMessage: 'Media formats',\r\n  },\r\n  mediaAnimation: {\r\n    id: 'admanagement.adquality.mediaAnimation',\r\n    defaultMessage: 'Animation',\r\n  },\r\n  mediaNudity: {\r\n    id: 'admanagement.adquality.mediaNudity',\r\n    defaultMessage: 'Nudity, offensive advertising',\r\n  },\r\n  relevanceAndQuality: {\r\n    id: 'admanagement.adquality.relevanceAndQuality',\r\n    defaultMessage: 'Relevance and quality',\r\n  },\r\n  relevanceLandingPage: {\r\n    id: 'admanagement.adquality.relevanceLandingPage',\r\n    defaultMessage: 'Landing pages',\r\n  },\r\n  restrictedCategories: {\r\n    id: 'admanagement.adquality.restrictedCategories',\r\n    defaultMessage: 'Restricted categories',\r\n  },\r\n  restrictedAdult: {\r\n    id: 'admanagement.adquality.restrictedAdult',\r\n    defaultMessage: 'Adult content',\r\n  },\r\n  restrictedAlcohol: {\r\n    id: 'admanagement.adquality.restrictedAlcohol',\r\n    defaultMessage: 'Alcohol',\r\n  },\r\n  restrictedBeauty: {\r\n    id: 'admanagement.adquality.restrictedBeauty',\r\n    defaultMessage: 'Beauty & Cosmetics',\r\n  },\r\n  restrictedDating: {\r\n    id: 'admanagement.adquality.restrictedDating',\r\n    defaultMessage: 'Dating / personals',\r\n  },\r\n  restrictedFinance: {\r\n    id: 'admanagement.adquality.restrictedFinance',\r\n    defaultMessage: 'Finance',\r\n  },\r\n  restrictedGambling: {\r\n    id: 'admanagement.adquality.restrictedGambling',\r\n    defaultMessage: 'Gambling and lotteries',\r\n  },\r\n  restrictedLegalServices: {\r\n    id: 'admanagement.adquality.restrictedLegalServices',\r\n    defaultMessage: 'Legal Services',\r\n  },\r\n  restrictedCompetitors: {\r\n    id: 'admanagement.adquality.restrictedCompetitors',\r\n    defaultMessage: 'Microsoft competitors',\r\n  },\r\n  restrictedPharmacy: {\r\n    id: 'admanagement.adquality.restrictedPharmacy',\r\n    defaultMessage: 'Pharmacy and healthcare',\r\n  },\r\n  restrictedPolitical: {\r\n    id: 'admanagement.adquality.restrictedPolitical',\r\n    defaultMessage: 'Political content',\r\n  },\r\n  restrictedSoftware: {\r\n    id: 'admanagement.adquality.restrictedSoftware',\r\n    defaultMessage: 'Software, freeware and shareware',\r\n  },\r\n  restrictedSolicitation: {\r\n    id: 'admanagement.adquality.restrictedSolicitation',\r\n    defaultMessage: 'Solicitation of funds/ fund-raising',\r\n  },\r\n  restrictedWeapons: {\r\n    id: 'admanagement.adquality.restrictedWeapons',\r\n    defaultMessage: 'Weapons, knives, firearms, ammunition',\r\n  },\r\n  textGuidelines: {\r\n    id: 'admanagement.adquality.textGuidelines',\r\n    defaultMessage: 'Text guidelines',\r\n  },\r\n  textAdFunctionality: {\r\n    id: 'admanagement.adquality.textAdFunctionality',\r\n    defaultMessage: 'Ad functionality',\r\n  },\r\n  textAdLanguage: {\r\n    id: 'admanagement.adquality.textAdLanguage',\r\n    defaultMessage: 'Ad language',\r\n  },\r\n  textGrammar: {\r\n    id: 'admanagement.adquality.textGrammar',\r\n    defaultMessage: 'Grammar, punctuation, and spelling',\r\n  },\r\n  imageNotRelevant: {\r\n    id: 'admanagement.adquality.imageNotRelevant',\r\n    defaultMessage: 'Image not relevant to Ad',\r\n  },\r\n  lowQualityImage: {\r\n    id: 'admanagement.adquality.lowQualityImage',\r\n    defaultMessage: 'Low quality image',\r\n  },\r\n  offensiveImage: {\r\n    id: 'admanagement.adquality.offensiveImage',\r\n    defaultMessage: 'Offensive image',\r\n  },\r\n  policyIssue: {\r\n    id: 'admanagement.adquality.policyIssue',\r\n    defaultMessage: 'Additional policy issue',\r\n  },\r\n  altAdTitleListings: {\r\n    id: 'admanagement.adquality.altAdTitleListings',\r\n    defaultMessage: 'Alternate Ad Title',\r\n  },\r\n  altAdUrlListings: {\r\n    id: 'admanagement.adquality.altAdUrlListings',\r\n    defaultMessage: 'Alternate Ad Url',\r\n  },\r\n  altAdImageListings: {\r\n    id: 'admanagement.adquality.altAdImageListings',\r\n    defaultMessage: 'Alt. Ad Image',\r\n  },\r\n  loadingAltAdCreativeListings: {\r\n    id: 'admanagement.adquality.loadingAltAdCreativeListings',\r\n    defaultMessage: 'Loading Alternate Ad Creatives',\r\n  },\r\n  noAltAdCreativeListings: {\r\n    id: 'admanagement.adquality.noAltAdCreativeListings',\r\n    defaultMessage: 'No Alternate Ad Creatives for this Ad',\r\n  },\r\n  allImages: {\r\n    id: 'admanagement.adquality.allImages',\r\n    defaultMessage: 'View all images',\r\n  },\r\n  moreImages: {\r\n    id: 'admanagement.adquality.moreImages',\r\n    defaultMessage: '... {imageListLength} more images',\r\n  },\r\n  viewOnlyImageLabel: {\r\n    id: 'admanagement.adquality.viewOnlyImageLabel',\r\n    defaultMessage: 'image {itemNumber} view only',\r\n  },\r\n  blockedLabel: {\r\n    id: 'admanagement.adquality.blockedLabel',\r\n    defaultMessage: 'BLOCKED',\r\n  },\r\n  verizonMediaWarningLabel: {\r\n    id: 'admanagement.adquality.verizonMediaWarningLabel',\r\n    defaultMessage: 'Warning : Block ads for Gemini in Pubcenter & Partner Native Tool',\r\n  },\r\n  queryTimeoutWarningHeaderLabel: {\r\n    id: 'admanagement.adquality.queryTimeoutWarningHeaderLabel',\r\n    defaultMessage: 'Querying data for date ranges greater than 5 days may time out',\r\n  },\r\n  queryTimeoutWarningDescriptionLabel: {\r\n    id: 'admanagement.adquality.queryTimeoutWarningDescriptionLabel',\r\n    defaultMessage: 'Please consider using a shorter date range or using filters if you need a date range greater than 5 days.',\r\n  },\r\n  auctionBlockAdIdLabel: {\r\n    id: 'admanagement.adquality.auctionBlockAdIdLabel',\r\n    defaultMessage: 'AdId: {uniqueCreativeAdId}',\r\n  },\r\n  accountName: {\r\n    id: 'admanagement.adquality.accountName',\r\n    defaultMessage: 'Account',\r\n  },\r\n  adId: {\r\n    id: 'admanagement.adquality.adid',\r\n    defaultMessage: 'Ad id',\r\n  },\r\n  adTitle: {\r\n    id: 'admanagement.adquality.adTitle',\r\n    defaultMessage: 'Ad title',\r\n  },\r\n  advertiser: {\r\n    id: 'admanagement.adquality.advertiser',\r\n    defaultMessage: 'Advertiser',\r\n  },\r\n  advertiserId: {\r\n    id: 'admanagement.adquality.advertiserId',\r\n    defaultMessage: 'Advertiser id',\r\n  },\r\n  advertiserAccountId: {\r\n    id: 'admanagement.adquality.advertiserAccountId',\r\n    defaultMessage: 'Advertiser account id',\r\n  },\r\n  filterPanelApplyButtonAriaDesc: {\r\n    id: 'admanagement.adquality.filterPanelApplyButtonAriaDesc',\r\n    defaultMessage: 'Click to apply selected options to the filter',\r\n  },\r\n  blockRequestSource: {\r\n    id: 'admanagement.adquality.blockRequestSource',\r\n    defaultMessage: 'Block request source',\r\n  },\r\n  adCreativeServiceLoadEntityFailed: {\r\n    id: 'admanagement.adquality.adCreativeServiceLoadEntityFailed',\r\n    defaultMessage: 'Failed to load entity',\r\n  },\r\n  adqualityInvalidState: {\r\n    id: 'admanagement.adquality.invalidState',\r\n    defaultMessage: 'You have arrived in an invalid state, please report.',\r\n  },\r\n  adqualityFailedToBlockAds: {\r\n    id: 'admanagement.adquality.failedToBlockAds',\r\n    defaultMessage: 'Failed to block ads',\r\n  },\r\n  adqualityBlockAdsMissingFields: {\r\n    id: 'admanagement.adquality.blockAdsMissingFields',\r\n    defaultMessage: 'BlockAds - You have {count} missing fields, please fill them to continue',\r\n  },\r\n  adqualityUpdateBlockedAdsStatusFailed: {\r\n    id: 'admanagement.adquality.updatedBlockedAdsStatusFailed',\r\n    defaultMessage: 'Failed to update blocked ads status',\r\n  },\r\n  adqualityBlockedAdsSuccessfully: {\r\n    id: 'admanagement.adquality.blockedAdsSuccessfully',\r\n    defaultMessage: 'Blocked ads successfully',\r\n  },\r\n  adqualityBlockImagesFailed: {\r\n    id: 'admanagement.adquality.blockImagesFailed',\r\n    defaultMessage: 'Failed to block images',\r\n  },\r\n  adqualityBlockImagesSuccess: {\r\n    id: 'admanagement.adquality.blockImagesSuccess',\r\n    defaultMessage: 'Block Images success',\r\n  },\r\n  adqualityBlockImagesMissingFields: {\r\n    id: 'admanagement.adquality.blockImagesMissingFields',\r\n    defaultMessage: 'Block Images - You have {count} missing/incorrect fields, please fill them to continue',\r\n  },\r\n  adqualityDownloadBlockedImagesFailed: {\r\n    id: 'admanagement.adquality.downloadBlockedImagesFailed',\r\n    defaultMessage: 'Failed to download blocked images',\r\n  },\r\n  adqualityDownloadBlockedImagesSuccess: {\r\n    id: 'admanagement.adquality.downloadBlockedImagesSuccess',\r\n    defaultMessage: 'Blocked images data download success',\r\n  },\r\n  adqualityDownloadAdContextFailed: {\r\n    id: 'admanagement.adquality.downloadAdContextFailed',\r\n    defaultMessage: 'Failed to download ad context',\r\n  },\r\n  adqualityNoDataToDownload: {\r\n    id: 'admanagement.adquality.noDataToDownload',\r\n    defaultMessage: 'It appears as though there is currently no data to download!',\r\n  },\r\n  adqualityBlockedAdsDataDownloadSuccess: {\r\n    id: 'admanagement.adquality.blockedAdsDataDownloadSuccess',\r\n    defaultMessage: 'Blocked ads data download success',\r\n  },\r\n  adqualityUpdatedBlockedAdsStatusSuccess: {\r\n    id: 'admanagement.adquality.updatedBlockedAdsStatusSuccess',\r\n    defaultMessage: 'Update blocked ads {ID} status success',\r\n  },\r\n  adqualityLoadListingAdDataFailed: {\r\n    id: 'admanagement.adquality.loadListingAdDataFailed',\r\n    defaultMessage: 'Failed to load ad listing data',\r\n  },\r\n  adqualityLoadRevenueAdDataFailed: {\r\n    id: 'admanagement.adquality.loadRevenueAdDataFailed',\r\n    defaultMessage: 'Failed to load ad revenue data',\r\n  },\r\n  adqualityTimeoutQueringForData: {\r\n    id: 'admanagement.adquality.timeoutQueringForData',\r\n    defaultMessage:\r\n      'An error occurred. This is likely due to a timeout querying the data for the time range selected. Please try a shorter date range. {trackingId}',\r\n  },\r\n  adqualityProvideSearchTerm: {\r\n    id: 'admanagement.adquality.provideSearchTerm',\r\n    defaultMessage: 'Please provide a search term, while searching over multiple days',\r\n  },\r\n  adqualityAdPerformanceDataDownloadSuccess: {\r\n    id: 'admanagement.adquality.adPerformanceDataDownloadSuccess',\r\n    defaultMessage: 'Ad Performance data download success',\r\n  },\r\n  adDescriptionCheckboxLabel: {\r\n    id: 'admanagement.adquality.adDescriptionCheckboxLabel',\r\n    defaultMessage: 'Include description',\r\n  },\r\n});\r\n","import messages from '../pages/ad-management/AdQuality/AdReview/AdCreativePage.messages';\r\n\r\nexport const blockReasons = {\r\n  0: [\r\n    messages.disallowedDeceptive,\r\n    messages.disallowedMisleading,\r\n    messages.disallowedOffensive,\r\n    messages.disallowedSuffering,\r\n    messages.disallowedDrugs,\r\n    messages.disallowedTobacco,\r\n    messages.disallowedSensitive,\r\n    messages.otherReasonCategory,\r\n  ],\r\n  1: [messages.legalMalware, messages.legalPrivacy, messages.otherReasonCategory],\r\n  2: [messages.mediaAnimation, messages.mediaNudity, messages.otherReasonCategory],\r\n  3: [messages.relevanceLandingPage, messages.otherReasonCategory],\r\n  4: [\r\n    messages.restrictedAdult,\r\n    messages.restrictedAlcohol,\r\n    messages.restrictedBeauty,\r\n    messages.restrictedDating,\r\n    messages.restrictedFinance,\r\n    messages.restrictedGambling,\r\n    messages.restrictedLegalServices,\r\n    messages.restrictedCompetitors,\r\n    messages.restrictedPharmacy,\r\n    messages.restrictedPolitical,\r\n    messages.restrictedSoftware,\r\n    messages.restrictedSolicitation,\r\n    messages.restrictedWeapons,\r\n    messages.otherReasonCategory,\r\n  ],\r\n  5: [messages.textAdFunctionality, messages.textAdLanguage, messages.textGrammar, messages.otherReasonCategory],\r\n};\r\n","import { action } from 'satcheljs';\r\n\r\nexport const onAdCreativePageInitialized = action('onAdCreativePageInitialized', (publisherId?: number) => ({ publisherId }));\r\n","import { IDropdownOption } from '@fluentui/react';\r\nimport { action } from 'satcheljs';\r\nimport { IStringDictionary } from '../../../../../@data';\r\nimport { IAdListingsData, IBlockItemViewModel } from '../store/schema';\r\nimport { AdPerformanceData } from '../store/schema/models';\r\n\r\nexport const onAdDescriptionChanged = action('onAdDescriptionChanged', (value: boolean) => ({ value }));\r\n\r\nexport const onBlockAdsViewChanged = action('onBlockAdsViewChanged', (value: IBlockItemViewModel) => ({ value }));\r\n\r\nexport const onBlockAdInitialized = action('onBlockAdInitiallized', (value: AdPerformanceData[], isImageBlock?: boolean) => ({\r\n  value,\r\n  isImageBlock,\r\n}));\r\n\r\nexport const onBlockAdsSamChanged = action('onBlockAdsSamChanged', (value: AdPerformanceData[]) => ({ value }));\r\n\r\nexport const onBlockAdsChanged = action('onBlockAdsChanged', (value: AdPerformanceData[]) => ({ value }));\r\n\r\nexport const onBlockImageAdsChanged = action('onBlockImageAdsChanged', (value: AdPerformanceData[], isAuctionData: boolean = false) => ({\r\n  value,\r\n  isAuctionData,\r\n}));\r\n\r\nexport const onBlockAdsImagesChanged = action(\r\n  'onBlockAdsImagesChanged',\r\n  (images?: string[], index?: number, needUrlProcess?: boolean, isAuctionData: boolean = false) => ({\r\n    images,\r\n    index,\r\n    needUrlProcess,\r\n    isAuctionData,\r\n  })\r\n);\r\n\r\nexport const onBlockAdsAdPerfDataCleared = action('onBlockAdsAdPerfDataCleared');\r\n\r\nexport const onBlockAdsBlockedImagesChanged = action('onBlockAdsBlockedImagesChanged', (item: string, isChecked?: boolean) => ({\r\n  isChecked,\r\n  item,\r\n}));\r\n\r\nexport const onBlockAdsChannelsAndRevenueChanged = action('onBlockAdsChannelsAndRevenueChanged', (value: AdPerformanceData[]) => ({\r\n  value,\r\n}));\r\n\r\nexport const onBlockAdsSelectedMarketChanged = action('onBlockAdsSelectedMarketChanged', (value: IDropdownOption) => ({ value }));\r\n\r\nexport const onBlockAdsReasonLevelsChanged = action(\r\n  'onBlockAdsReasonLevelsChanged',\r\n  (value: IDropdownOption, formatter: Function, index: number) => ({\r\n    value,\r\n    formatter,\r\n    index,\r\n  })\r\n);\r\n\r\nexport const onBlockAdsChannelsChanged = action('onBlockAdsChannelsListChanged', (accountId: number, channelId?: number) => ({\r\n  accountId,\r\n  channelId,\r\n}));\r\n\r\nexport const onBlockAdsSelectedBlockRequestSourceChanged = action(\r\n  'onBlockAdsSelectedBlockRequestSourceChanged',\r\n  (value: IDropdownOption) => ({\r\n    value,\r\n  })\r\n);\r\n\r\nexport const onBlockAdsRevenueChanged = action('onBlockAdsRevenueChanged', (value: number, index: number) => ({ value, index }));\r\n\r\nexport const onBlockAdsListingsChanged = action('onBlockAdsListingsChanged', (value: IAdListingsData, index: number) => ({ value, index }));\r\n\r\nexport const onBlockAdsBlockReasonChanged = action('onBlockAdsBlockReasonChanged', (value: IDropdownOption) => ({ value }));\r\n\r\nexport const onBlockAdsBlockDetailsChanged = action('onBlockAdsBlockDetailsChanged', (value?: string) => ({ value }));\r\n\r\nexport const onAdListingPageSelection = action('onAdListingPageSelection', (value?: number, index?: number) => ({ value, index }));\r\n\r\nexport const onBlockAdsSubmitted = action('onBlockAdsSubmitted');\r\n\r\nexport const onMSANBlockAdsSubmitted = action('onMSANBlockAdsSubmitted');\r\n\r\nexport const onSAMBlockAdsSubmitted = action('onSAMBlockAdsSubmitted');\r\n\r\nexport const onBlockImagesSubmitted = action('onBlockImagesSubmitted');\r\n\r\nexport const onBlockAdsErrorChanged = action('onBlockAdsErrorChanged', (values?: IStringDictionary) => ({ values }));\r\n\r\nexport const onBlockImagesErrorChanged = action('onBlockImagesErrorChanged', (values?: IStringDictionary) => ({ values }));\r\n","import { action } from 'satcheljs';\r\nimport { LifeCycleStatus } from '../../../../../@data';\r\nimport { IDataGridColumn } from '../../../../../layout/GridPageV2';\r\nimport { BlockAdsData, SAMBlockSummaryData } from '../store/schema/models';\r\n\r\nexport const onBlockAdsDataChanged = action('onBlockAdsDataChanged', (data?: BlockAdsData[]) => ({ data }));\r\n\r\nexport const onSAMBlockAdsDataChanged = action('onSAMBlockAdsDataChanged', (data?: SAMBlockSummaryData[]) => ({ data }));\r\n\r\nexport const onSAMBlockSummaryViewImagesClicked = action('onSAMBlockSummaryViewImagesClicked', (item: SAMBlockSummaryData) => ({\r\n  item,\r\n}));\r\n\r\nexport const onBlockedImagesExportClicked = action('onBlockedImagesExportClicked', (columns?: IDataGridColumn[]) => ({ columns }));\r\n\r\nexport const onBlockedAdsExportClicked = action('onBlockedAdsExportClicked', (columns?: IDataGridColumn[]) => ({ columns }));\r\n\r\nexport const onBlockAdsItemStatusChanged = action('onBlockAdsItemStatusChanged', (data: BlockAdsData, status: LifeCycleStatus) => ({\r\n  data,\r\n  status,\r\n}));\r\n\r\nexport const onSAMBlockAdsItemStatusChanged = action(\r\n  'onSAMBlockAdsItemStatusChanged',\r\n  (data: SAMBlockSummaryData, status: LifeCycleStatus) => ({\r\n    data,\r\n    status,\r\n  })\r\n);\r\n\r\nexport const onRefreshBlockSummary = action('onRefreshBlockSummary', () => ({}));\r\n\r\nexport const onBlockSummaryStartDateChanged = action('onBlockSummaryStartDateChanged', (startDate?: Date) => ({ startDate }));\r\n\r\nexport const onBlockSummaryEndDateChanged = action('onBlockSummaryEndDateChanged', (endDate?: Date) => ({ endDate }));\r\n","import { action } from 'satcheljs';\r\nimport { BlockedContext } from '../store/schema/models';\r\n\r\nexport const onBlockedContextChanged = action('onBlockedContextChanged', (publisherId: number) => ({ publisherId }));\r\n\r\nexport const onBlockedAdsContextChanged = action('onBlockedAdsContextChanged', (data?: BlockedContext) => {\r\n  return { data };\r\n});\r\n\r\nexport const onBlockedImagesContextChanged = action('onBlockedImagesContextChanged', (data?: string[]) => ({ data }));\r\n","import { action } from 'satcheljs';\r\nimport { IFilterPanelProps } from '../../AdReview/AdCreativePage.types';\r\n\r\nexport const onFilterPanelShown = action('onFilterPanelShown', (filterPanel: IFilterPanelProps) => ({\r\n  filterPanel,\r\n}));\r\n\r\nexport const onFilterPanelHide = action('onFilterPanelHide');\r\n","import { IDropdownOption } from '@fluentui/react';\r\nimport { mutator } from 'satcheljs';\r\nimport { AdSource } from '../../../../../@data';\r\nimport { adProvidersToNames } from '../../../../../config/adProviders';\r\nimport { blockReasons } from '../../../../../config/blockReasons';\r\nimport { xandrAdProvidersToNames } from '../../../../../config/xandrAdProviders';\r\nimport noImage from '../../AdReview/noImageAvailable.svg';\r\nimport {\r\n  onAdListingPageSelection,\r\n  onBlockAdsAdPerfDataCleared,\r\n  onBlockAdsBlockDetailsChanged,\r\n  onBlockAdsBlockedImagesChanged,\r\n  onBlockAdsBlockReasonChanged,\r\n  onBlockAdsChanged,\r\n  onBlockAdsErrorChanged,\r\n  onBlockAdsImagesChanged,\r\n  onBlockAdsReasonLevelsChanged,\r\n  onBlockAdsSamChanged,\r\n  onBlockAdsSelectedMarketChanged,\r\n  onBlockAdsViewChanged,\r\n  onBlockImageAdsChanged,\r\n  onBlockImagesErrorChanged,\r\n} from '../actions';\r\nimport {\r\n  onAdDescriptionChanged,\r\n  onBlockAdsChannelsChanged,\r\n  onBlockAdsListingsChanged,\r\n  onBlockAdsRevenueChanged,\r\n  onBlockAdsSelectedBlockRequestSourceChanged,\r\n} from '../actions/onBlockAdsFormChanged';\r\nimport { processImagesLink } from '../services/utility/utility';\r\nimport { IBlockItemViewModel } from '../store/schema';\r\nimport { AdPerformanceBlockData } from '../store/schema/models/AdPerformanceBlockData';\r\nimport { getStore } from '../store/store';\r\n\r\nmutator(onBlockAdsViewChanged, (msg) => {\r\n  getStore().blockAdsPage = msg.value;\r\n});\r\n\r\nmutator(onAdDescriptionChanged, (msg) => {\r\n  getStore().adDescription = msg.value;\r\n});\r\n\r\nmutator(onBlockAdsSamChanged, (msg) => {\r\n  const adSource = getStore().active.selectedAdSource;\r\n  const selectedAds = msg.value;\r\n  selectedAds.forEach((item) => {\r\n    const blockAdSamData: AdPerformanceBlockData = {\r\n      uniqueCreativeAdId: item.uniqueCreativeAdId,\r\n      adTitle: item.adTitle,\r\n      advertiserName: item.advertiserName,\r\n      adProvider: item.adProvider\r\n        ? adSource === AdSource.Auction\r\n          ? adProvidersToNames[item.adProvider]\r\n          : xandrAdProvidersToNames[item.adProvider]\r\n        : undefined,\r\n      adDescription: item.adDescription,\r\n      revenue: item.revenue,\r\n    };\r\n\r\n    getStore().blockAdsPage.adPerfBlockAdsData.push(blockAdSamData);\r\n  });\r\n});\r\n\r\nmutator(onBlockAdsChanged, (msg) => {\r\n  const selectedAds = msg.value;\r\n  selectedAds.forEach((item) => {\r\n    const blockAdData: AdPerformanceBlockData = {\r\n      adId: item.adId,\r\n      adUnitId: item.adUnitId,\r\n      adTitle: item.adTitle,\r\n      adURL: item.adURL,\r\n      adProvider: item.adProvider ? adProvidersToNames[item.adProvider] : undefined,\r\n      advertiserName: item.advertiserName,\r\n      advertiserAccountId: item.advertiserAccountId,\r\n      adDescription: item.adDescription,\r\n      adDestUrl: item.adDestUrl,\r\n      accountId: item.accountId,\r\n      accountName: item.accountName,\r\n    };\r\n    getStore().blockAdsPage.adPerfBlockAdsData.push(blockAdData);\r\n  });\r\n});\r\n\r\nmutator(onBlockImageAdsChanged, (msg) => {\r\n  const selectedAds = msg.value;\r\n  selectedAds.forEach((item) => {\r\n    const blockImageAdData: AdPerformanceBlockData = {\r\n      adId: item.adId,\r\n      adTitle: item.adTitle,\r\n      adUnitId: item.adUnitId,\r\n      adSource: item.adSource,\r\n      adType: item.adType,\r\n    };\r\n\r\n    getStore().blockAdsPage.adPerfBlockAdsData.push(blockImageAdData);\r\n  });\r\n});\r\n\r\nmutator(onBlockAdsImagesChanged, (msg) => {\r\n  if (msg.images) {\r\n    let imgs = processImagesLink(msg.images ? msg.images : [], noImage, msg.isAuctionData);\r\n    const filteredImages = msg.images!.filter((i) => i !== '');\r\n    imgs = msg.needUrlProcess ? imgs : filteredImages;\r\n    getStore().blockAdsPage.adPerfBlockAdsData[msg.index!].images = imgs;\r\n  }\r\n});\r\n\r\nmutator(onBlockAdsAdPerfDataCleared, (msg) => {\r\n  getStore().blockAdsPage.adPerfBlockAdsData = [];\r\n});\r\n\r\nmutator(onBlockAdsBlockedImagesChanged, (msg) => {\r\n  let imgs: string[] = [];\r\n  const blockAdsView: IBlockItemViewModel = {\r\n    ...getStore().blockAdsPage,\r\n  };\r\n  if (blockAdsView.adPerfBlockAdsData[0].blockedImages) {\r\n    blockAdsView.adPerfBlockAdsData[0].blockedImages.forEach((img) => {\r\n      imgs.push(img);\r\n    });\r\n  }\r\n  if (msg.isChecked && !imgs.includes(msg.item)) {\r\n    imgs.push(msg.item);\r\n  }\r\n  if (msg.isChecked === false && imgs.includes(msg.item)) {\r\n    imgs = imgs.filter((img) => img !== msg.item);\r\n  }\r\n\r\n  blockAdsView.adPerfBlockAdsData[0].blockedImages = imgs;\r\n  getStore().blockAdsPage = blockAdsView;\r\n});\r\n\r\nmutator(onBlockAdsSelectedBlockRequestSourceChanged, (msg) => {\r\n  getStore().blockAdsPage.selectedBlockRequestSource = msg.value.key as number;\r\n});\r\n\r\nmutator(onBlockAdsSelectedMarketChanged, (msg) => {\r\n  getStore().blockAdsPage.selectedMarket = msg.value.key as string;\r\n});\r\n\r\nmutator(onBlockAdsReasonLevelsChanged, (msg) => {\r\n  getStore().blockAdsPage.blockReasonL1 = msg.value.key as string;\r\n  const dropDownValues: IDropdownOption[] = [];\r\n  blockReasons[msg.index].forEach((value) => {\r\n    if (msg.formatter) {\r\n      dropDownValues.push({\r\n        key: msg.formatter(value),\r\n        text: msg.formatter(value),\r\n        ariaLabel: msg.formatter(value),\r\n      });\r\n    }\r\n  });\r\n\r\n  getStore().blockAdsPage.blockReasonsL2 = dropDownValues;\r\n  getStore().blockAdsPage.blockReason = undefined;\r\n});\r\n\r\nmutator(onBlockAdsChannelsChanged, (msg) => {\r\n  getStore().blockAdsPage.channels[msg.accountId] = msg.channelId;\r\n});\r\n\r\nmutator(onBlockAdsRevenueChanged, (msg) => {\r\n  getStore().blockAdsPage.adPerfBlockAdsData[msg.index].revenue = msg.value;\r\n});\r\n\r\nmutator(onBlockAdsListingsChanged, (msg) => {\r\n  getStore().blockAdsPage.adPerfBlockAdsData[msg.index].adListingsData = msg.value;\r\n});\r\n\r\nmutator(onBlockAdsBlockReasonChanged, (msg) => {\r\n  const blockReason = (getStore().blockAdsPage.blockReasonL1 + ' - ' + msg.value.key) as string;\r\n  getStore().blockAdsPage.blockReason = blockReason;\r\n});\r\n\r\nmutator(onBlockAdsBlockDetailsChanged, (msg) => {\r\n  getStore().blockAdsPage.blockDetails = msg.value;\r\n});\r\n\r\nmutator(onAdListingPageSelection, (msg) => {\r\n  if (getStore().blockAdsPage.adPerfBlockAdsData[msg.index!].adListingsData) {\r\n    getStore().blockAdsPage.adPerfBlockAdsData[msg.index!].adListingsData!.adListingSelectedPage = msg.value as number;\r\n  }\r\n});\r\n\r\nmutator(onBlockAdsErrorChanged, (msg) => {\r\n  getStore().errors = msg.values || {};\r\n});\r\n\r\nmutator(onBlockImagesErrorChanged, (msg) => {\r\n  getStore().errors = msg.values || {};\r\n});\r\n","import { mutator } from 'satcheljs';\r\nimport {\r\n  onBlockAdsDataChanged,\r\n  onBlockedAdsExportClicked,\r\n  onBlockedImagesExportClicked,\r\n  onBlockSummaryEndDateChanged,\r\n  onBlockSummaryStartDateChanged,\r\n  onSAMBlockAdsDataChanged,\r\n} from '../actions';\r\nimport { getStore } from '../store/store';\r\n\r\nmutator(onBlockAdsDataChanged, (msg) => {\r\n  getStore().active.blockSummaryData = msg.data;\r\n});\r\n\r\nmutator(onSAMBlockAdsDataChanged, (msg) => {\r\n  getStore().active.samBlockSummaryData = msg.data;\r\n});\r\n\r\nmutator(onBlockSummaryStartDateChanged, (msg) => {\r\n  getStore().active.blockSummaryStartDate = msg.startDate;\r\n});\r\n\r\nmutator(onBlockSummaryEndDateChanged, (msg) => {\r\n  if (msg.endDate) {\r\n    getStore().active.blockSummaryEndDate = new Date(\r\n      msg.endDate.getFullYear(),\r\n      msg.endDate.getMonth(),\r\n      msg.endDate.getDate(),\r\n      23,\r\n      59,\r\n      59,\r\n      999\r\n    );\r\n  }\r\n});\r\n\r\nmutator(onBlockedAdsExportClicked, (msg) => {\r\n  getStore().columns = msg.columns;\r\n});\r\n\r\nmutator(onBlockedImagesExportClicked, (msg) => {\r\n  getStore().columns = msg.columns;\r\n});\r\n","import { mutator } from 'satcheljs';\r\nimport { onBlockedAdsContextChanged, onBlockedImagesContextChanged } from '../actions';\r\nimport { getStore } from '../store/store';\r\n\r\nmutator(onBlockedAdsContextChanged, msg => {\r\n  getStore().blockedAdsContext = msg.data;\r\n});\r\n\r\nmutator(onBlockedImagesContextChanged, msg => {\r\n  getStore().blockedImagesContext = msg.data;\r\n});\r\n","import { mutator } from 'satcheljs';\r\n\r\nimport { onFilterPanelHide, onFilterPanelShown } from '../actions';\r\nimport { getStore } from '../store/store';\r\n\r\nmutator(onFilterPanelShown, (msg) => {\r\n  const store = getStore();\r\n  store.filterPanel = msg.filterPanel;\r\n});\r\n\r\nmutator(onFilterPanelHide, () => {\r\n  const store = getStore();\r\n  store.filterPanel = undefined;\r\n});\r\n","import { MessageBarType } from '@fluentui/react';\r\nimport { AdSource, ApiError, LifeCycleStatus, getAppStore, onNotificationChanged } from '../../../../../@data';\r\nimport { buildRequestHeadersWithAuthToken } from '../../../../../@data/utils/requestUtils';\r\nimport { adQualityLocales } from '../../../../../config/locale';\r\nimport { uiConfig } from '../../../../../config/ui.config';\r\nimport messages from '../../AdReview/AdCreativePage.messages';\r\nimport { IAdListingSample } from '../store/schema';\r\nimport { IAdListingsData } from '../store/schema/IAdListingsData';\r\nimport {\r\n  AdPerformanceData,\r\n  BlockAdsData,\r\n  BlockImagessData,\r\n  BlockedContext,\r\n  InvertedAdDetails,\r\n  SAMBlockAdData,\r\n} from '../store/schema/models';\r\nimport { IAdReviewModel } from '../store/schema/models/AdReviewModel';\r\nimport { BlockRequestSourceData } from '../store/schema/models/BlockRequestSourceData';\r\nimport { getStore } from '../store/store';\r\nimport { constructUrl, handleError, sanitizeBingImageUrl } from './utility/utility';\r\n\r\nexport const baseAddress = uiConfig.getAdQualityApiBaseAddress();\r\n\r\nexport async function getBlockedAdContext(publisherId: number): Promise<BlockedContext> {\r\n  const { userContext } = getAppStore();\r\n  const blockedDataUrl =\r\n    baseAddress + 'adblockdata/adunitadidtuples/' + publisherId.toString() + '?targetCustomerId=' + publisherId.toString();\r\n\r\n  const headers = await buildRequestHeadersWithAuthToken(blockedDataUrl, userContext);\r\n  const adunitAdIdPair = await fetch(blockedDataUrl, {\r\n    method: 'GET',\r\n    headers: headers,\r\n  });\r\n\r\n  const blockedContext: BlockedContext = await adunitAdIdPair.json();\r\n  return blockedContext;\r\n}\r\n\r\nexport async function getAdPerfData(body: IAdReviewModel, params: URLSearchParams): Promise<AdPerformanceData[]> {\r\n  const { active, blockedAdsContext, blockedImagesContext } = getStore();\r\n  const baseUrl = baseAddress + 'adperfdata/search';\r\n  const url = constructUrl(baseUrl, [], params);\r\n  let headers: Headers;\r\n  try {\r\n    headers = await buildRequestHeadersWithAuthToken(url);\r\n  } catch (createHeaderError) {\r\n    return handleError(createHeaderError, url);\r\n  }\r\n\r\n  try {\r\n    const response = await fetch(url, {\r\n      method: 'POST',\r\n      headers: headers,\r\n      body: JSON.stringify(body),\r\n    });\r\n\r\n    const responseJson = await response.json();\r\n    if (response.status === 500) {\r\n      const error = `data fetch operation failed for ${url}. Errors: ${response.statusText}`;\r\n      return handleError(new ApiError(response.status, error, responseJson.trackingId), url);\r\n    }\r\n\r\n    let filteredAds = responseJson.adPerformanceData ? responseJson.adPerformanceData : [];\r\n    if (active.selectedAdSource === AdSource.Microsoft) {\r\n      if (blockedAdsContext) {\r\n        const mapAdIdAdunits: Map<number, number[]> = blockedAdsContext.mapAdIdAdunits as Map<number, number[]>;\r\n        const mapAdIdAccounts: Map<number, number[]> = blockedAdsContext.mapAdIdAccounts as Map<number, number[]>;\r\n        if (mapAdIdAdunits) {\r\n          filteredAds = filteredAds.filter((a) => {\r\n            if (a.adId) {\r\n              return !(Object.keys(mapAdIdAdunits).includes(a.adId!.toString()) && mapAdIdAdunits[a.adId!].includes(a.adUnitId!));\r\n            } else {\r\n              return true;\r\n            }\r\n          });\r\n        }\r\n        if (mapAdIdAccounts) {\r\n          filteredAds = filteredAds.filter((a) => {\r\n            if (a.adId) {\r\n              return !(Object.keys(mapAdIdAccounts).includes(a.adId!.toString()) && mapAdIdAccounts[a.adId!].includes(a.accountId!));\r\n            } else {\r\n              return true;\r\n            }\r\n          });\r\n        }\r\n        if (blockedAdsContext.mapAdIdImages) {\r\n          filteredAds.forEach((ad) => {\r\n            ad.blockedImages = blockedAdsContext.mapAdIdImages!.get(ad.adId!) || [];\r\n          });\r\n        }\r\n      }\r\n      if (blockedImagesContext) {\r\n        filteredAds.forEach((ad) => {\r\n          ad.blockedAdIdImages = blockedImagesContext;\r\n          // we will need the below in case we decide to do the filtering of reported images in UI\r\n          // ad.imagesContext = [];\r\n          // if (ad.images) {\r\n          //   ad.images.forEach((image) => {\r\n          //     const imageMetadata: ImageMetaData = { imageUrl: image, isBlocked: false };\r\n          //     const imageReportDataTuple = { adId: ad.adId, imageUrl: image };\r\n          //     if (blockedImagesContext.includes(JSON.stringify(imageReportDataTuple))) {\r\n          //       imageMetadata.isBlocked = true;\r\n          //     }\r\n          //     ad.imagesContext!.push(imageMetadata);\r\n          //   });\r\n          // }\r\n        });\r\n      }\r\n    } else {\r\n      // We assume that the block summary is up-to-date for Auction blocked Ads\r\n      const locales: string[] = ['global', adQualityLocales[active.selectedMarket!]];\r\n      active.samBlockSummaryData?.filter((blockSummary) => blockSummary.locale && locales.includes(blockSummary.locale));\r\n      filteredAds.forEach((ad) => {\r\n        const blockedAdFind = active.samBlockSummaryData?.find((blockedAd) => ad.uniqueCreativeAdId === blockedAd.creativeAdId);\r\n        blockedAdFind && blockedAdFind.status === LifeCycleStatus.Active\r\n          ? (ad.status = LifeCycleStatus.Inactive)\r\n          : (ad.status = LifeCycleStatus.Active);\r\n      });\r\n    }\r\n    return filteredAds;\r\n  } catch (err) {\r\n    onNotificationChanged({\r\n      textMessageDescriptor: messages.adCreativeServiceLoadEntityFailed,\r\n      messageBarType: MessageBarType.severeWarning,\r\n    });\r\n    const error = `data fetch operation failed for ${url}. Errors: ${err}`;\r\n    return handleError(new ApiError(500, error), url);\r\n  }\r\n}\r\n\r\nexport async function getAdIdRevenue(models: string[][], params: URLSearchParams): Promise<number> {\r\n  const baseUrl = baseAddress + 'adperfdata';\r\n  const url = constructUrl(baseUrl, models, params);\r\n\r\n  let headers: Headers;\r\n  try {\r\n    headers = await buildRequestHeadersWithAuthToken(url);\r\n  } catch (createHeaderError) {\r\n    return handleError(createHeaderError, url);\r\n  }\r\n\r\n  try {\r\n    const response = await fetch(url, {\r\n      method: 'GET',\r\n      headers: headers,\r\n    });\r\n\r\n    const responseJson = await response.json();\r\n    return responseJson;\r\n  } catch (err) {\r\n    const error = `data fetch operation failed for ${url}. Errors: ${err}`;\r\n    return handleError(new ApiError(500, error), url);\r\n  }\r\n}\r\n\r\nexport async function getAdIdDetails(models: string[][], params: URLSearchParams): Promise<IAdListingsData> {\r\n  const baseUrl = baseAddress + 'adperfdata';\r\n  const url = constructUrl(baseUrl, models, params);\r\n\r\n  let headers: Headers;\r\n  try {\r\n    headers = await buildRequestHeadersWithAuthToken(url);\r\n  } catch (createHeaderError) {\r\n    return handleError(createHeaderError, url);\r\n  }\r\n\r\n  try {\r\n    const response = await fetch(url, {\r\n      method: 'GET',\r\n      headers: headers,\r\n    });\r\n\r\n    const responseListingsInverted: InvertedAdDetails = await response.json();\r\n    const titlesInverted = responseListingsInverted.adTitles as Map<string, string[]>;\r\n    const urlsInverted = responseListingsInverted.adUrls;\r\n    const destUrlsInverted = responseListingsInverted.adDestUrls;\r\n    const imagesInverted = responseListingsInverted.images;\r\n\r\n    const listingSamplesMap: Map<string, IAdListingSample> = new Map();\r\n    let listingSamples: IAdListingSample[] = [];\r\n\r\n    // Add all Titles, urls, desturls, images to each sample based on its adlisting.\r\n    for (const [eachTitle, listingsWithTheTitle] of Object.entries(titlesInverted)) {\r\n      listingsWithTheTitle.forEach((eachListing) => {\r\n        if (!listingSamplesMap.has(eachListing)) {\r\n          listingSamplesMap.set(eachListing, { adTitle: eachTitle } as IAdListingSample);\r\n        } else {\r\n          const sample = listingSamplesMap.get(eachListing);\r\n          if (sample) {\r\n            sample.adTitle = eachTitle;\r\n          }\r\n        }\r\n      });\r\n    }\r\n\r\n    for (const [eachUrl, listingsWithTheUrl] of Object.entries(urlsInverted)) {\r\n      listingsWithTheUrl.forEach((eachListing) => {\r\n        if (!listingSamplesMap.has(eachListing)) {\r\n          listingSamplesMap.set(eachListing, { adUrl: eachUrl } as IAdListingSample);\r\n        } else {\r\n          const sample = listingSamplesMap.get(eachListing);\r\n          if (sample) {\r\n            sample.adUrl = eachUrl;\r\n          }\r\n        }\r\n      });\r\n    }\r\n\r\n    for (const [eachDestUrl, listingsWithTheDestUrl] of Object.entries(destUrlsInverted)) {\r\n      listingsWithTheDestUrl.forEach((eachListing) => {\r\n        if (!listingSamplesMap.has(eachListing)) {\r\n          listingSamplesMap.set(eachListing, { adDestUrl: eachDestUrl } as IAdListingSample);\r\n        } else {\r\n          const sample = listingSamplesMap.get(eachListing);\r\n          if (sample) {\r\n            sample.adDestUrl = eachDestUrl;\r\n          }\r\n        }\r\n      });\r\n    }\r\n\r\n    for (const [eachImage, listingsWithTheImage] of Object.entries(imagesInverted)) {\r\n      listingsWithTheImage.forEach((eachListing) => {\r\n        if (!listingSamplesMap.has(eachListing)) {\r\n          listingSamplesMap.set(eachListing, { adimage: sanitizeBingImageUrl(eachImage) } as IAdListingSample);\r\n        } else {\r\n          const sample = listingSamplesMap.get(eachListing);\r\n          if (sample) {\r\n            sample.adImage = sanitizeBingImageUrl(eachImage);\r\n          }\r\n        }\r\n      });\r\n    }\r\n\r\n    listingSamples = Array.from(listingSamplesMap.values());\r\n\r\n    // in case of empty samples we will just push one empty sample to avoid downstream errors.\r\n    if (listingSamples.length < 1) {\r\n      listingSamples.push({});\r\n    }\r\n\r\n    const adListingsData: IAdListingsData = {\r\n      listingsCount: listingSamples.length,\r\n      adListingItems: listingSamples,\r\n      adListingSelectedPage: 1,\r\n    };\r\n    return adListingsData;\r\n  } catch (err) {\r\n    const error = `data fetch operation failed for ${url}. Errors: ${err}`;\r\n    return handleError(new ApiError(500, error), url);\r\n  }\r\n}\r\n\r\nexport async function getBlockRequestSources(publisherId: number): Promise<BlockRequestSourceData[]> {\r\n  let url = baseAddress + 'adperfdata/blockRequestSources';\r\n  url = url.concat('?targetCustomerId=' + publisherId);\r\n\r\n  let headers: Headers;\r\n  try {\r\n    headers = await buildRequestHeadersWithAuthToken(url);\r\n  } catch (createHeaderError) {\r\n    return handleError(createHeaderError, url);\r\n  }\r\n\r\n  try {\r\n    const response = await fetch(url, {\r\n      method: 'GET',\r\n      headers: headers,\r\n    });\r\n    const responseJson = await response.json();\r\n    return responseJson;\r\n  } catch (err) {\r\n    const error = `data fetch operation failed for ${url}. Errors: ${err}`;\r\n    return handleError(new ApiError(500, error), url);\r\n  }\r\n}\r\n\r\nexport async function createAdBlock(body: BlockAdsData[], params: URLSearchParams): Promise<BlockAdsData> {\r\n  let url = baseAddress + 'adblockdata/bulkAdBlock';\r\n  url = url.concat('?' + params.toString());\r\n\r\n  let headers: Headers;\r\n  try {\r\n    headers = await buildRequestHeadersWithAuthToken(url);\r\n  } catch (createHeaderError) {\r\n    return handleError(createHeaderError, url);\r\n  }\r\n  try {\r\n    const response = await fetch(url, {\r\n      method: 'POST',\r\n      headers: headers,\r\n      body: JSON.stringify(body),\r\n    });\r\n\r\n    const responseJson = await response.json();\r\n    return responseJson;\r\n  } catch (err) {\r\n    const error = `data fetch operation failed for ${url}. Errors: ${err}`;\r\n    return handleError(new ApiError(500, error), url);\r\n  }\r\n}\r\n\r\nexport async function createImageBlock(body: BlockImagessData, params: URLSearchParams): Promise<BlockImagessData> {\r\n  let url = baseAddress + 'adblockdata/imagereporting';\r\n\r\n  url = url.concat('?' + params.toString());\r\n\r\n  let headers: Headers;\r\n  try {\r\n    headers = await buildRequestHeadersWithAuthToken(url);\r\n  } catch (createHeaderError) {\r\n    return handleError(createHeaderError, url);\r\n  }\r\n\r\n  try {\r\n    const response = await fetch(url, {\r\n      method: 'POST',\r\n      headers: headers,\r\n      body: JSON.stringify(body),\r\n    });\r\n\r\n    const responseJson = await response.json();\r\n    return responseJson;\r\n  } catch (err) {\r\n    const error = `ad image blocking failed for ${url}. Errors: ${err}`;\r\n    return handleError(new ApiError(500, error), url);\r\n  }\r\n}\r\n\r\nexport async function createSAMAdBlock(body: SAMBlockAdData[], params: URLSearchParams): Promise<BlockAdsData> {\r\n  let url = baseAddress + 'adblockdata/samrtbBulk';\r\n  url = url.concat('?' + params.toString());\r\n\r\n  let headers: Headers;\r\n  try {\r\n    headers = await buildRequestHeadersWithAuthToken(url);\r\n  } catch (createHeaderError) {\r\n    return handleError(createHeaderError, url);\r\n  }\r\n\r\n  try {\r\n    const response = await fetch(url, {\r\n      method: 'POST',\r\n      headers: headers,\r\n      body: JSON.stringify(body),\r\n    });\r\n\r\n    const responseJson = await response.json();\r\n    return responseJson;\r\n  } catch (err) {\r\n    const error = `Data fetch operation failed for ${url}. Errors: ${err}`;\r\n    return handleError(new ApiError(500, error), url);\r\n  }\r\n}\r\n","import { ApiError, handleError, LifeCycleStatus } from '../../../../../@data';\r\nimport { buildRequestHeadersWithAuthToken } from '../../../../../@data/utils/requestUtils';\r\nimport { BlockAdsData, BlockImageSummaryData, SAMBlockSummaryData } from '../store/schema/models';\r\nimport { baseAddress } from './AdCreativeService';\r\nimport { constructUrl } from './utility/utility';\r\n\r\nexport async function deactivateBlockedAds(models: string[][], params: URLSearchParams): Promise<number> {\r\n  const baseUrl = baseAddress + 'adblockdata';\r\n  const url = constructUrl(baseUrl, models, params);\r\n\r\n  let headers: Headers;\r\n  try {\r\n    headers = await buildRequestHeadersWithAuthToken(url);\r\n  } catch (createHeaderError) {\r\n    return handleError(createHeaderError, url);\r\n  }\r\n\r\n  try {\r\n    const response = await fetch(url, {\r\n      method: 'DELETE',\r\n      headers: headers,\r\n    });\r\n\r\n    const responseJson = await response.json();\r\n    return responseJson;\r\n  } catch (err) {\r\n    const error = `data fetch operation failed for ${url}. Errors: ${err}`;\r\n    return handleError(new ApiError(500, error), url);\r\n  }\r\n}\r\n\r\nexport async function toggleSAMBlockedAds(params: URLSearchParams, body: string): Promise<number> {\r\n  let url = baseAddress + 'adblockdata/samrtbblock';\r\n  url = url.concat('?' + params.toString());\r\n\r\n  let headers: Headers;\r\n  try {\r\n    headers = await buildRequestHeadersWithAuthToken(url);\r\n  } catch (createHeaderError) {\r\n    return handleError(createHeaderError, url);\r\n  }\r\n\r\n  try {\r\n    const response = await fetch(url, {\r\n      method: 'PATCH',\r\n      headers: headers,\r\n      body: body,\r\n    });\r\n\r\n    const responseJson = await response.json();\r\n    return responseJson;\r\n  } catch (err) {\r\n    const error = `data fetch operation failed for ${url}. Errors: ${err}`;\r\n    return handleError(new ApiError(500, error), url);\r\n  }\r\n}\r\n\r\nexport async function getBlockSummaryData(models: string[][], params: URLSearchParams): Promise<BlockAdsData[]> {\r\n  const baseUrl = baseAddress + 'adblockdata';\r\n  const url = constructUrl(baseUrl, models, params);\r\n  let headers: Headers;\r\n  try {\r\n    headers = await buildRequestHeadersWithAuthToken(url);\r\n  } catch (createHeaderError) {\r\n    return handleError(createHeaderError, url);\r\n  }\r\n\r\n  try {\r\n    const response = await fetch(url, {\r\n      method: 'GET',\r\n      headers: headers,\r\n    });\r\n\r\n    const responseJson: BlockAdsData[] = await response.json();\r\n    responseJson.forEach((item) => {\r\n      const blockReasonParts = item.reasonCategory ? item.reasonCategory.split(' - ') : ' ';\r\n      item.blockReasonMainCategory = blockReasonParts[0];\r\n      item.blockReasonSubCategory = blockReasonParts[1];\r\n    });\r\n    return responseJson;\r\n  } catch (err) {\r\n    const error = `data fetch operation failed for ${url}. Errors: ${err}`;\r\n    return handleError(new ApiError(500, error), url);\r\n  }\r\n}\r\n\r\nexport async function getSAMBlockSummaryData(models: string[][], params: URLSearchParams): Promise<SAMBlockSummaryData[]> {\r\n  const baseUrl = baseAddress + 'adblockdata/samrtb';\r\n  const url = constructUrl(baseUrl, models, params);\r\n\r\n  let headers: Headers;\r\n  try {\r\n    headers = await buildRequestHeadersWithAuthToken(url);\r\n  } catch (createHeaderError) {\r\n    return handleError(createHeaderError, url);\r\n  }\r\n\r\n  try {\r\n    const response = await fetch(url, {\r\n      method: 'GET',\r\n      headers: headers,\r\n    });\r\n\r\n    const responseJson: SAMBlockSummaryData[] = await response.json();\r\n    // Set the LifeCycleStatus based on whether or not the block is applied or disabled\r\n    responseJson.forEach((item) => {\r\n      const blockReasonParts = item.blockReasonCategory ? item.blockReasonCategory.split(' - ') : ' ';\r\n      item.blockReasonMainCategory = blockReasonParts[0];\r\n      item.blockReasonSubCategory = blockReasonParts[1];\r\n      item.status = item.filterStatus === 'Applied' ? LifeCycleStatus.Active : LifeCycleStatus.Inactive;\r\n    });\r\n    return responseJson;\r\n  } catch (err) {\r\n    const error = `data fetch operation failed for ${url}. Errors: ${err}`;\r\n    return handleError(new ApiError(500, error), url);\r\n  }\r\n}\r\n\r\nexport async function getBlockImagesData(publisherId: number): Promise<BlockImageSummaryData[]> {\r\n  const params = new URLSearchParams([\r\n    ['targetCustomerId', publisherId.toString()],\r\n    ['isNativeAdmin', 'true'],\r\n  ]);\r\n  const baseUrl = baseAddress + 'adblockdata/image';\r\n  const url = constructUrl(baseUrl, [['publisher', publisherId.toString()]], params);\r\n\r\n  let headers: Headers;\r\n  try {\r\n    headers = await buildRequestHeadersWithAuthToken(url);\r\n  } catch (createHeaderError) {\r\n    return handleError(createHeaderError, url);\r\n  }\r\n  try {\r\n    const response = await fetch(url, {\r\n      method: 'GET',\r\n      headers: headers,\r\n    });\r\n\r\n    const responseJson: BlockImageSummaryData[] = await response.json();\r\n    return responseJson;\r\n  } catch (err) {\r\n    const error = `data fetch operation failed for ${url}. Errors: ${err}`;\r\n    return handleError(new ApiError(500, error), url);\r\n  }\r\n}\r\n\r\nexport async function getSAMBlockImageData(adId: string, publisherId: number): Promise<string[]> {\r\n  const models = [['images', adId]];\r\n  const baseUrl = baseAddress + 'adblockdata/samrtb';\r\n  const params = new URLSearchParams([['targetCustomerId', publisherId.toString()]]);\r\n\r\n  const url = constructUrl(baseUrl, models, params);\r\n  let headers: Headers;\r\n  try {\r\n    headers = await buildRequestHeadersWithAuthToken(url);\r\n  } catch (createHeaderError) {\r\n    return handleError(createHeaderError, url);\r\n  }\r\n  try {\r\n    const response = await fetch(url, {\r\n      method: 'GET',\r\n      headers: headers,\r\n    });\r\n\r\n    const responseJson: [number, string][] = await response.json();\r\n    const imageList: string[] = [];\r\n    responseJson.forEach((filterImage) => {\r\n      const key = 'adImageUrl';\r\n      imageList.push(filterImage[key]);\r\n    });\r\n    return imageList;\r\n  } catch (err) {\r\n    const error = `Data fetch operation failed for ${url}. Errors: ${err}`;\r\n    return handleError(new ApiError(500, error), url);\r\n  }\r\n}\r\n","import { ImageMetaData, LifeCycleStatus, Model } from '../../../../../../../@data';\r\nimport '../../../../../../../@data/store/schema/models/ImageMetaData';\r\n\r\nexport class AdPerformanceData extends Model {\r\n  public apiPath = undefined;\r\n  public className = 'adPerformanceData';\r\n  public publisherId?: number;\r\n  public accountId?: number;\r\n  public accountName?: string;\r\n  public adUnitId?: number;\r\n  public adUnitName?: string;\r\n  public advertiserId?: number;\r\n  public advertiserAccountId?: number;\r\n  public advertiserName?: string;\r\n  public adId?: number;\r\n  public uniqueCreativeAdId?: string;\r\n  public adTitle?: string;\r\n  public adDescription?: string;\r\n  public adURL?: string;\r\n  public adDestUrl?: string;\r\n  public adImpressions?: number;\r\n  public images?: string[];\r\n  public revenue?: number;\r\n  public adType?: string;\r\n  public adSource?: string;\r\n  public adunitIdAdId?: string;\r\n  public imagesContext?: ImageMetaData[];\r\n  public blockedAdIdImages?: string[];\r\n  public blockedImages: string[];\r\n  public pagetypes?: string[];\r\n  public regions?: string[];\r\n  public adProvider?: number;\r\n  public status?: LifeCycleStatus;\r\n}\r\n","import { Model } from '../../../../../../../@data';\r\n\r\nexport class BlockAdsData extends Model {\r\n  public apiPath = undefined;\r\n  public className = 'blockAdsData';\r\n  public channelId?: number;\r\n  public channelName?: string | null;\r\n  public adId?: number;\r\n  public adTitle?: string;\r\n  public allImages?: string;\r\n  public accountName?: string;\r\n  public accountId?: number;\r\n  public advertiserAccountId?: number;\r\n  public advertiserName?: string;\r\n  public blockRequestSourceId?: number;\r\n  public reason?: string;\r\n  public reasonCategory?: string;\r\n  public blockReasonMainCategory?: string;\r\n  public blockReasonSubCategory?: string;\r\n  public modifiedBy?: string;\r\n  public modifiedDateTime?: string;\r\n  public modifiedByName?: string;\r\n  public startDate?: string | null;\r\n  public endDate?: string | null;\r\n  public isEnabled?: boolean | string;\r\n  public pastRevenue?: number;\r\n}\r\n","export class BlockImagessData {\r\n  public adId?: number;\r\n  public adTitle?: string;\r\n  public adUnitId?: number;\r\n  public images?: string[];\r\n  public blockReason?: string;\r\n  public blockReasonComment?: string;\r\n  public blockedBy?: number;\r\n  public blockSource?: number;\r\n}\r\n","import { Model } from '../../../../../../../@data';\r\n\r\nexport class BlockImageSummaryData extends Model {\r\n  public apiPath = undefined;\r\n  public className = 'blockImagesSummaryData';\r\n  public adId?: number;\r\n  public adTitle?: string;\r\n  public image?: string;\r\n  public adUnitId?: number;\r\n  public blockReason?: string;\r\n  public blockReasonComment?: string;\r\n  public reportedBy?: number;\r\n  public reportedByName?: string;\r\n  public modifiedDateTime?: string;\r\n}\r\n","export enum BlockItemType {\r\n  Ads,\r\n  Images,\r\n}\r\n","import { Model } from '../../../../../../../@data';\r\n\r\nexport class SAMBlockAdData extends Model {\r\n  public apiPath = undefined;\r\n  public className = 'samBlockAdsData';\r\n  public creativeAdId?: string;\r\n  public adTitle?: string;\r\n  public allAdImages?: string[];\r\n  public advertiserName?: string;\r\n  public adProvider?: string;\r\n  public blockRequestSourceId?: number;\r\n  public reasonCategoryId?: number;\r\n  public reasonCategoryString?: string;\r\n  public blockReasonMainCategory?: string;\r\n  public blockReasonSubCategory?: string;\r\n  public reasonComment?: string;\r\n  public modifiedBy?: number;\r\n  public publisherId?: number;\r\n  public sevenDayRevenueImpact?: number;\r\n  public localeScope?: string;\r\n  public filterSource?: string;\r\n}\r\n","import { LifeCycleStatus, Model } from '../../../../../../../@data';\r\n\r\nexport class SAMBlockSummaryData extends Model {\r\n  public apiPath = undefined;\r\n  public className = 'samBlockSummaryData';\r\n  public filterId?: number;\r\n  public filterScope?: string;\r\n  public creativeAdId?: string;\r\n  public adTitle?: string;\r\n  public advertiser?: string;\r\n  public sevenDayRevenueImpact?: number;\r\n  public adProvider?: string;\r\n  public blockRequestSourceId?: number;\r\n  public locale?: string;\r\n  public allAdImages?: string[];\r\n  public blockReasonCategory?: string;\r\n  public blockReasonMainCategory?: string;\r\n  public blockReasonSubCategory?: string;\r\n  public blockReasonComment?: string;\r\n  public reportedBy?: number;\r\n  public reportedByName?: string;\r\n  public modifiedDateTime?: string;\r\n  public filterStatus?: string;\r\n  public status?: LifeCycleStatus;\r\n}\r\n","import { array, mixed, object, string } from 'yup';\r\nimport { StringListSchemaYupType } from '../../../../../../utils';\r\nimport { IBlockItemViewModel } from './IBlockItemViewModel';\r\nimport { BlockItemType } from './models';\r\n\r\nexport function blockItemErrorModel() {\r\n  return object<IBlockItemViewModel>().shape({\r\n    blockReason: string().required(),\r\n    blockItemType: mixed().oneOf([BlockItemType.Ads, BlockItemType.Images]),\r\n    adPerfBlockAdsData: array().of(\r\n      object().shape({\r\n        blockedImages: new StringListSchemaYupType().when('blockItemType', {\r\n          is: BlockItemType.Images,\r\n          then: array().required('Please select atleast one image to block'),\r\n          otherwise: array(),\r\n        }),\r\n      })\r\n    ),\r\n    blockDetails: string().max(200),\r\n  });\r\n}\r\n","import { orchestrator } from 'satcheljs';\r\nimport { onTeachingBubbleEndDateStatusChanged, onTeachingBubbleStartDateStatusChanged } from '../actions';\r\nimport {\r\n  onAdCreativeEndDateChanged, onAdCreativeStartDateChanged\r\n} from '../actions/onAdCreativeChanged';\r\nimport { getStore } from '../store/store';\r\n\r\norchestrator(onAdCreativeStartDateChanged, async (msg) => {\r\n  onAdCreativeDateChanged(onTeachingBubbleStartDateStatusChanged);\r\n});\r\n\r\norchestrator(onAdCreativeEndDateChanged, async (msg) => {\r\n  onAdCreativeDateChanged(onTeachingBubbleEndDateStatusChanged);\r\n});\r\n\r\nfunction onAdCreativeDateChanged(onTeachingBubbbleStatusChanged) {\r\n  const { active } = getStore();\r\n  const queryMayTimeoutDays = 5;\r\n  const milisecondsToDays = 1000*3600*24;\r\n\r\n  if (active.endDate !== undefined && active.startDate !== undefined\r\n      && active.endDate.toString().length !== 0 && active.startDate.toString().length !== 0) {\r\n    const diffInDays = (active.endDate.getTime() - active.startDate.getTime()) / milisecondsToDays;\r\n    if (diffInDays > queryMayTimeoutDays){\r\n        onTeachingBubbbleStatusChanged(true);\r\n    }\r\n  }\r\n}\r\n","import { MessageBarType } from '@fluentui/react';\r\nimport { orchestrator } from 'satcheljs';\r\nimport { getAppStore, onNotificationChanged, onSavingChanged } from '../../../../../@data';\r\nimport { INotificationBarItem } from '../../../../../components/NotificationBar';\r\nimport { validateSchema } from '../../../../../utils';\r\nimport messages from '../../AdReview/AdCreativePage.messages';\r\nimport {\r\n  onAdCreativeBlockPanelChanged,\r\n  onAdCreativeRefreshDataChanged,\r\n  onBlockAdsErrorChanged,\r\n  onBlockedAdsContextChanged,\r\n  onMSANBlockAdsSubmitted,\r\n  onRefreshBlockSummary,\r\n} from '../actions';\r\nimport { getBlockImagesData } from '../services/AdBlockService';\r\nimport { createAdBlock, getBlockedAdContext } from '../services/AdCreativeService';\r\nimport { blockItemErrorModel } from '../store/schema/BlockItemErrorModel';\r\nimport { BlockItemType } from '../store/schema/models';\r\nimport { BlockAdsData } from '../store/schema/models/BlockAdsData';\r\nimport { getStore } from '../store/store';\r\n\r\norchestrator(onMSANBlockAdsSubmitted, async (msg) => {\r\n  const { publisher, userContext } = getAppStore();\r\n  const { blockAdsPage } = getStore();\r\n\r\n  let notification: INotificationBarItem = {};\r\n  if (publisher && publisher.id && userContext) {\r\n    const body: BlockAdsData[] = [];\r\n    blockAdsPage.adPerfBlockAdsData.forEach(async (item, index) => {\r\n      const block: BlockAdsData = new BlockAdsData();\r\n      block.channelId = blockAdsPage.channels[item.accountId!];\r\n      block.channelName = null;\r\n      block.adId = item.adId;\r\n      block.adTitle = item.adTitle;\r\n      block.reason = blockAdsPage.blockDetails;\r\n      block.reasonCategory = blockAdsPage.blockReason;\r\n      block.advertiserAccountId = item.advertiserAccountId;\r\n      block.blockRequestSourceId = blockAdsPage.selectedBlockRequestSource;\r\n      block.modifiedBy = userContext.id.toString();\r\n      block.modifiedDateTime = new Date(Date.now()).toISOString();\r\n      block.startDate = null;\r\n      block.endDate = null;\r\n      block.isEnabled = true;\r\n      block.pastRevenue = item.revenue ? item.revenue : 0;\r\n      const imgs = item.images ? item.images : [];\r\n      block.allImages = imgs.join('___');\r\n\r\n      body.push(block);\r\n    });\r\n\r\n    const params = new URLSearchParams([['targetCustomerId', publisher.id!.toString()]]);\r\n\r\n    try {\r\n      onAdCreativeBlockPanelChanged(true, BlockItemType.Ads);\r\n      await validateSchema(blockItemErrorModel(), blockAdsPage);\r\n      onBlockAdsErrorChanged();\r\n    } catch (e) {\r\n      onBlockAdsErrorChanged(e);\r\n      onNotificationChanged({\r\n        textMessageDescriptor: messages.adqualityBlockAdsMissingFields,\r\n        intlMessageValues: { count: Object.keys(e).length },\r\n        messageBarType: MessageBarType.severeWarning,\r\n      });\r\n      return;\r\n    }\r\n\r\n    onSavingChanged(true);\r\n    try {\r\n      await createAdBlock(body, params);\r\n      notification = {\r\n        textMessageDescriptor: messages.adqualityBlockedAdsSuccessfully,\r\n        messageBarType: MessageBarType.success,\r\n      };\r\n      onNotificationChanged(notification);\r\n    } catch (e) {\r\n      onNotificationChanged({\r\n        textMessageDescriptor: messages.adqualityFailedToBlockAds,\r\n        messageBarType: MessageBarType.severeWarning,\r\n      });\r\n    } finally {\r\n      // TODO: Figure out why using onBlockedContextChanged isnt working anymore\r\n      const blockedAdContext = await getBlockedAdContext(publisher.id!);\r\n      blockedAdContext.mapAdIdImages = new Map<number, string[]>();\r\n      const blockedImageSummary = await getBlockImagesData(publisher.id!);\r\n      blockedImageSummary.forEach((element) => {\r\n        if (blockedAdContext.mapAdIdImages) {\r\n          if (blockedAdContext.mapAdIdImages.has(element.adId!)) {\r\n            blockedAdContext.mapAdIdImages.get(element.adId!)!.push(element.image!);\r\n          } else {\r\n            blockedAdContext.mapAdIdImages.set(element.adId!, [element.image!]);\r\n          }\r\n        }\r\n      });\r\n      onBlockedAdsContextChanged(blockedAdContext);\r\n      onRefreshBlockSummary();\r\n      onAdCreativeBlockPanelChanged(false);\r\n      onSavingChanged(false);\r\n      onAdCreativeRefreshDataChanged();\r\n    }\r\n  } else {\r\n    onNotificationChanged({\r\n      textMessageDescriptor: messages.adqualityInvalidState,\r\n      messageBarType: MessageBarType.severeWarning,\r\n    });\r\n  }\r\n});\r\n","import { MessageBarType } from '@fluentui/react';\r\nimport { orchestrator } from 'satcheljs';\r\nimport { getAppStore, LifeCycleStatus, onLoadingChanged, onNotificationChanged, onSavingChanged } from '../../../../../@data';\r\nimport { INotificationBarItem } from '../../../../../components/NotificationBar';\r\nimport { adQualityLocales } from '../../../../../config/locale';\r\nimport messages from '../../AdReview/AdCreativePage.messages';\r\nimport { onSAMBlockAdsDataChanged, onSAMBlockAdsItemStatusChanged } from '../actions';\r\nimport { getSAMBlockSummaryData, toggleSAMBlockedAds } from '../services/AdBlockService';\r\nimport { SAMBlockSummaryData } from '../store/schema/models';\r\nimport { getStore } from '../store/store';\r\n\r\norchestrator(onSAMBlockAdsItemStatusChanged, async (msg) => {\r\n  const { publisher, userContext } = getAppStore();\r\n  const status = msg.status;\r\n  const creativeAdId = msg.data.creativeAdId;\r\n  const locale = msg.data.locale;\r\n\r\n  let notification: INotificationBarItem = {};\r\n  let params;\r\n\r\n  if (publisher && publisher.id && userContext && creativeAdId && locale) {\r\n    params = new URLSearchParams([\r\n      ['targetCustomerId', publisher.id.toString()],\r\n      ['creativeId', creativeAdId],\r\n      ['locale', locale],\r\n    ]);\r\n\r\n    onSavingChanged(true);\r\n    onLoadingChanged(true);\r\n\r\n    try {\r\n      let result, filterStatusId;\r\n\r\n      if (status === LifeCycleStatus.Inactive) {\r\n        // Set the filter to the 'Disabled' status\r\n        filterStatusId = '4';\r\n        result = await toggleSAMBlockedAds(params, filterStatusId);\r\n      } else if (status === LifeCycleStatus.Active) {\r\n        // Set the filter to the 'Applied' status\r\n        filterStatusId = '1';\r\n        result = await toggleSAMBlockedAds(params, filterStatusId);\r\n      }\r\n\r\n      if (result) {\r\n        const active = getStore().active;\r\n        const samBlockSummaryParams = new URLSearchParams([\r\n          ['targetCustomerId', publisher.id.toString()],\r\n          ['NumImages', 2],\r\n        ]);\r\n        let samBlockSummaryData: SAMBlockSummaryData[] = [];\r\n        if (active.selectedMarket) {\r\n          samBlockSummaryData = await getSAMBlockSummaryData([['publisher', publisher.id!.toString()]], samBlockSummaryParams);\r\n          if (active.selectedBlockedMarketId !== undefined) {\r\n            if (active.selectedBlockedMarketId === 0) {\r\n              samBlockSummaryData.filter((blockSummary) => blockSummary.locale === 'global');\r\n            } else {\r\n              samBlockSummaryData.filter(\r\n                (blockSummary) =>\r\n                  blockSummary.locale === 'global' || blockSummary.locale === adQualityLocales[active.selectedBlockedMarketId!]\r\n              );\r\n            }\r\n          }\r\n        }\r\n\r\n        samBlockSummaryData.forEach((item) => {\r\n          item.status = item.filterStatus === 'Applied' ? (item.status = LifeCycleStatus.Active) : (item.status = LifeCycleStatus.Inactive);\r\n        });\r\n\r\n        onSAMBlockAdsDataChanged(samBlockSummaryData);\r\n\r\n        notification = {\r\n          text: `Update blocked ads ${creativeAdId} status success`,\r\n          messageBarType: MessageBarType.success,\r\n        };\r\n\r\n        onNotificationChanged(notification);\r\n      }\r\n    } catch (e) {\r\n      onNotificationChanged({\r\n        textMessageDescriptor: messages.adqualityUpdateBlockedAdsStatusFailed,\r\n        messageBarType: MessageBarType.severeWarning,\r\n      });\r\n    } finally {\r\n      onLoadingChanged(false);\r\n      onSavingChanged(false);\r\n    }\r\n  } else {\r\n    onNotificationChanged({\r\n      textMessageDescriptor: messages.adqualityInvalidState,\r\n      messageBarType: MessageBarType.severeWarning,\r\n    });\r\n  }\r\n});\r\n","import { MessageBarType } from '@fluentui/react';\r\nimport { orchestrator } from 'satcheljs';\r\nimport { getAppStore, onNotificationChanged, onSavingChanged } from '../../../../../@data';\r\nimport { INotificationBarItem } from '../../../../../components/NotificationBar';\r\nimport { adQualityLocales } from '../../../../../config/locale';\r\nimport { validateSchema } from '../../../../../utils';\r\nimport messages from '../../AdReview/AdCreativePage.messages';\r\nimport {\r\n  onAdCreativeBlockPanelChanged,\r\n  onAdCreativeRefreshDataChanged,\r\n  onBlockAdsErrorChanged,\r\n  onRefreshBlockSummary,\r\n  onSAMBlockAdsSubmitted,\r\n} from '../actions';\r\nimport { createSAMAdBlock } from '../services/AdCreativeService';\r\nimport { samBlockItemErrorModel } from '../store/schema/SAMBlockItemErrorModel';\r\nimport { BlockItemType, SAMBlockAdData } from '../store/schema/models';\r\nimport { getStore } from '../store/store';\r\n\r\norchestrator(onSAMBlockAdsSubmitted, async (msg) => {\r\n  const { publisher, userContext } = getAppStore();\r\n  const { blockAdsPage } = getStore();\r\n\r\n  let notification: INotificationBarItem = {};\r\n  if (publisher && publisher.id && userContext) {\r\n    const body: SAMBlockAdData[] = [];\r\n    blockAdsPage.adPerfBlockAdsData.forEach(async (item, index) => {\r\n      const block: SAMBlockAdData = new SAMBlockAdData();\r\n      block.creativeAdId = item.uniqueCreativeAdId;\r\n      block.adTitle = item.adTitle;\r\n      block.allAdImages = item.images;\r\n      block.advertiserName = item.advertiserName;\r\n      block.adProvider = item.adProvider;\r\n      block.blockRequestSourceId = blockAdsPage.selectedBlockRequestSource;\r\n      block.reasonCategoryString = blockAdsPage.blockReason;\r\n      block.reasonComment = blockAdsPage.blockDetails;\r\n      block.modifiedBy = userContext.id;\r\n      block.publisherId = publisher.id;\r\n      block.sevenDayRevenueImpact = item.revenue;\r\n      block.filterSource = 'TakedownTool';\r\n      if (blockAdsPage.selectedMarket) {\r\n        block.localeScope = blockAdsPage.selectedMarket === 'All' ? 'global' : adQualityLocales[blockAdsPage.selectedMarket];\r\n      }\r\n      body.push(block);\r\n    });\r\n\r\n    const params = new URLSearchParams([['targetCustomerId', publisher.id!.toString()]]);\r\n    try {\r\n      onAdCreativeBlockPanelChanged(true, BlockItemType.Ads);\r\n      await validateSchema(samBlockItemErrorModel(), blockAdsPage);\r\n      onBlockAdsErrorChanged();\r\n    } catch (e) {\r\n      onBlockAdsErrorChanged(e);\r\n      onNotificationChanged({\r\n        textMessageDescriptor: messages.adqualityBlockAdsMissingFields,\r\n        intlMessageValues: { count: Object.keys(e).length },\r\n        messageBarType: MessageBarType.severeWarning,\r\n      });\r\n      return;\r\n    }\r\n\r\n    onSavingChanged(true);\r\n    try {\r\n      await createSAMAdBlock(body, params);\r\n      notification = {\r\n        textMessageDescriptor: messages.adqualityBlockedAdsSuccessfully,\r\n        messageBarType: MessageBarType.success,\r\n      };\r\n      onNotificationChanged(notification);\r\n    } catch (e) {\r\n      onNotificationChanged({\r\n        textMessageDescriptor: messages.adqualityFailedToBlockAds,\r\n        messageBarType: MessageBarType.severeWarning,\r\n      });\r\n    } finally {\r\n      onRefreshBlockSummary();\r\n      onAdCreativeBlockPanelChanged(false);\r\n      onSavingChanged(false);\r\n      onAdCreativeRefreshDataChanged();\r\n    }\r\n  } else {\r\n    onNotificationChanged({\r\n      textMessageDescriptor: messages.adqualityInvalidState,\r\n      messageBarType: MessageBarType.severeWarning,\r\n    });\r\n  }\r\n});\r\n","import { mixed, object, string } from 'yup';\r\nimport { AdSource } from '../../../../../../@data';\r\nimport { IBlockItemViewModel } from './IBlockItemViewModel';\r\nimport { BlockItemType } from './models';\r\n\r\nexport function samBlockItemErrorModel() {\r\n  return object<IBlockItemViewModel>().shape({\r\n    selectedMarket: string().when('adSource', {\r\n      is: AdSource.Auction,\r\n      then: string().required(),\r\n    }),\r\n    blockReason: string().required(),\r\n    blockItemType: mixed().oneOf([BlockItemType.Ads, BlockItemType.Images]),\r\n  });\r\n}\r\n","import { orchestrator } from 'satcheljs';\r\nimport { getAppStore, onLoadingChanged } from '../../../../../@data';\r\nimport {\r\n  onAdCreativeBlockPanelChanged,\r\n  onBlockAdsImagesChanged,\r\n  onBlockImageAdsChanged,\r\n  onSAMBlockSummaryViewImagesClicked,\r\n} from '../actions';\r\nimport { getSAMBlockImageData } from '../services/AdBlockService';\r\nimport { BlockItemType } from '../store/schema/models';\r\n\r\norchestrator(onSAMBlockSummaryViewImagesClicked, async (msg) => {\r\n  if (msg.item.creativeAdId) {\r\n    onLoadingChanged(true);\r\n    const images = await getSAMBlockImageData(msg.item.creativeAdId, getAppStore().publisher!.id);\r\n    onBlockImageAdsChanged([\r\n      { apiPath: msg.item.apiPath, className: msg.item.className, blockedImages: [], uniqueCreativeAdId: msg.item.creativeAdId },\r\n    ]);\r\n    onBlockAdsImagesChanged(images, 0, false, true);\r\n    onLoadingChanged(false);\r\n    onAdCreativeBlockPanelChanged(true, BlockItemType.Images);\r\n  }\r\n});\r\n","import { MessageBarType } from '@fluentui/react';\r\nimport { orchestrator } from 'satcheljs';\r\nimport { AdSource, onNotificationChanged } from '../../../../../@data';\r\nimport { INotificationBarItem } from '../../../../../components/NotificationBar';\r\nimport messages from '../../AdReview/AdCreativePage.messages';\r\nimport { onAdCreativeExportClicked } from '../actions';\r\nimport { exportCSV } from '../services/utility/utility';\r\nimport { getStore } from '../store/store';\r\n\r\norchestrator(onAdCreativeExportClicked, async (msg) => {\r\n  let notification: INotificationBarItem = {};\r\n  const adSource = getStore().active.selectedAdSource;\r\n\r\n  const adPerfForCSVFromTable = getStore().active.adPerfData;\r\n  const columns = getStore().columns;\r\n  if (adPerfForCSVFromTable) {\r\n    if (adSource === AdSource.Microsoft && columns) {\r\n      exportCSV(adPerfForCSVFromTable, 'publisher_ad_performance.csv', columns);\r\n    } else if (columns) {\r\n      exportCSV(adPerfForCSVFromTable, 'publisher_auction_ad_performance.csv', columns);\r\n    }\r\n\r\n    notification = {\r\n      textMessageDescriptor: messages.adqualityAdPerformanceDataDownloadSuccess,\r\n      messageBarType: MessageBarType.success,\r\n    };\r\n    onNotificationChanged(notification);\r\n  } else {\r\n    onNotificationChanged({\r\n      textMessageDescriptor: messages.adqualityNoDataToDownload,\r\n      messageBarType: MessageBarType.severeWarning,\r\n    });\r\n  }\r\n});\r\n","import { IDropdownOption } from '@fluentui/react';\r\nimport { mutatorAction } from 'satcheljs';\r\nimport { FilterCondition } from '../../../../../@data/store/schema/enums/FilterCondition';\r\nimport { IIdNamePair } from '../../../../../components/MultiSelectPicker';\r\nimport { AdQualityFilterNames } from '../store/schema';\r\nimport { defaultInitialTextFilterState, getStore } from '../store/store';\r\n\r\nexport const onDropdownValueChanged = mutatorAction(\r\n  'onDropDownValueChanged',\r\n  (heading: string, value: IDropdownOption<FilterCondition>, index: number) => {\r\n    const t = getStore().filters.active?.[heading];\r\n    t.conditions[index].condition! = value.key;\r\n  }\r\n);\r\n\r\nexport const onTextBoxValueChanged = mutatorAction('onTextBoxValueChanged', (heading: string, value: string, index: number) => {\r\n  const t = getStore().filters.active?.[heading];\r\n  t.conditions[index].value = value;\r\n});\r\n\r\nexport const onDeleteTextCondition = mutatorAction(\r\n  'onDeleteTextCondition',\r\n  (heading: string, filterOption: FilterCondition, val: string) => {\r\n    const rawFilters = getStore().filters.raw;\r\n\r\n    if (rawFilters && rawFilters[heading] && rawFilters[heading].conditions) {\r\n      const conditions = rawFilters[heading].conditions;\r\n      const index = conditions.findIndex((c) => c.condition === filterOption && c.value === val);\r\n      if (index >= 0) {\r\n        conditions.splice(index, 1);\r\n      }\r\n      if (conditions.length === 0) {\r\n        conditions.push(defaultInitialTextFilterState);\r\n      }\r\n    }\r\n  }\r\n);\r\n\r\nexport const onListValueChanged = mutatorAction('onListValueChanged', (heading: string, val: string) => {\r\n  const rawFilters = getStore().filters.raw;\r\n  if (rawFilters && rawFilters[heading]) {\r\n    const listValues = rawFilters[heading].values;\r\n    const index = listValues.findIndex((c) => c.name === val);\r\n    listValues[index].isSelected = false;\r\n  }\r\n});\r\n\r\nexport const onClearAll = mutatorAction('onClearAll', () => {\r\n  const filterListType = [AdQualityFilterNames.AccountName];\r\n\r\n  const filterTextType = [\r\n    AdQualityFilterNames.CreativeAdId,\r\n    AdQualityFilterNames.Advertiser,\r\n    AdQualityFilterNames.AdvertiserId,\r\n    AdQualityFilterNames.AdvertiserAccountId,\r\n    AdQualityFilterNames.AdId,\r\n    AdQualityFilterNames.AdTitle,\r\n    AdQualityFilterNames.AdURL,\r\n    AdQualityFilterNames.LongHeadline,\r\n    AdQualityFilterNames.ShortHeadline,\r\n  ];\r\n  const rawFilters = getStore().filters.raw;\r\n  filterTextType.forEach((elem: string) => {\r\n    if (rawFilters && rawFilters[elem].conditions) {\r\n      rawFilters[elem].conditions = [defaultInitialTextFilterState];\r\n    }\r\n  });\r\n  filterListType.forEach((elem: string) => {\r\n    if (rawFilters && rawFilters[elem]) {\r\n      rawFilters[elem].values.forEach((elemList: IIdNamePair) => {\r\n        elemList.isSelected = false;\r\n      });\r\n    }\r\n  });\r\n});\r\n","import { mutatorAction } from 'satcheljs';\r\nimport { IIdNamePair } from '../../../../../components/MultiSelectPicker';\r\nimport { deepClone } from '../../../../../utils';\r\nimport { AdQualityFilterNames, IAdQualityFilter } from '../store/schema';\r\nimport { getStore } from '../store/store';\r\n\r\nexport const onAdCreativeInitialAccountsChanged = mutatorAction(\r\n  'onAdCreativeInitialAccountsChanged',\r\n  (accounts: IIdNamePair[], account: number | undefined) => {\r\n    const rawAccounts = getStore().filters?.raw?.[AdQualityFilterNames.AccountName];\r\n    if (rawAccounts) {\r\n      rawAccounts.values = accounts;\r\n    }\r\n\r\n    if (account) {\r\n      rawAccounts?.values.map((item: IIdNamePair) => {\r\n        if (item.id === account) {\r\n          item.isSelected = true;\r\n        }\r\n        return item;\r\n      });\r\n    }\r\n  }\r\n);\r\n\r\nexport const onAdCreativeInitialAdProvidersChanged = mutatorAction(\r\n  'onAdCreativeInitialAdProvidersChanged',\r\n  (auctionAdProviders: IIdNamePair[]) => {\r\n    const adProviders = getStore().filters?.raw?.[AdQualityFilterNames.AdProviders];\r\n    if (adProviders) {\r\n      adProviders.values = auctionAdProviders;\r\n    }\r\n  }\r\n);\r\n\r\nexport const onAdCreativeInitialMarketsChanged = mutatorAction('onAdCreativeInitialMarketsChanged', (auctionMarkets: IIdNamePair[]) => {\r\n  const locales = getStore().filters?.raw?.Markets;\r\n  if (locales) {\r\n    locales.values = auctionMarkets;\r\n  }\r\n});\r\n\r\nexport const onActiveFilterValuesChanged = mutatorAction(\r\n  'onActiveFilterValuesChanged',\r\n  function filterValuesChanged(raw: IAdQualityFilter) {\r\n    getStore().filters.active = deepClone(raw);\r\n  }\r\n);\r\n\r\nexport const onRawFilterValuesChanged = mutatorAction('onRawFilterValuesChanged', function filterValuesChanged(active: IAdQualityFilter) {\r\n  for (const key in active) {\r\n    if (active[key] && active[key].conditions) {\r\n      const lastElement = active[key].conditions[active[key].conditions.length - 1];\r\n      if (lastElement.condition === undefined || lastElement.value === '') {\r\n        lastElement.condition = undefined;\r\n        lastElement.value = '';\r\n        lastElement.isApplied = false;\r\n      }\r\n    }\r\n  }\r\n\r\n  getStore().filters.raw = deepClone(active);\r\n});\r\n\r\nexport const onSetIsAppliedForAllConditions = mutatorAction(\r\n  'onSetIsAppliedForAllConditions',\r\n  function setIsAppliedForAllConditions(active: IAdQualityFilter) {\r\n    for (const key in active) {\r\n      if (active[key] && active[key].conditions) {\r\n        active[key].conditions.forEach((triplet) => {\r\n          if (triplet.condition && triplet.value !== '') {\r\n            triplet.isApplied = true;\r\n          } else {\r\n            triplet.isApplied = false;\r\n          }\r\n        });\r\n      }\r\n    }\r\n  }\r\n);\r\n","import { AdSource } from '../../../../../@data';\r\nimport { FilterCondition } from '../../../../../@data/store/schema/enums/FilterCondition';\r\nimport { IIdNamePair } from '../../../../../components/MultiSelectPicker';\r\nimport { adQualityLocales } from '../../../../../config/locale';\r\nimport { AdQualityFilterNames, IConditionValue } from './schema';\r\nimport { IAdReviewModel } from './schema/models/AdReviewModel';\r\nimport { getStore } from './store';\r\n\r\nenum ConditionType {\r\n  Text,\r\n  Numerical,\r\n}\r\n\r\nfunction idAggregation(condition: FilterCondition, val: string): string {\r\n  let result: string = '';\r\n  switch (condition) {\r\n    case FilterCondition.Equals:\r\n      result = val;\r\n      break;\r\n    case FilterCondition.DoesNotEqual:\r\n      result = '-'.concat(val);\r\n      break;\r\n    default:\r\n      break;\r\n  }\r\n  return result;\r\n}\r\n\r\nfunction textAggregation(condition: FilterCondition, val: string): string {\r\n  let result: string = '';\r\n  val = val.trim();\r\n  switch (condition) {\r\n    case FilterCondition.Contains:\r\n      result = val;\r\n      break;\r\n    case FilterCondition.DoesNotContain:\r\n      const tokens = val.split(' ');\r\n      result = tokens.map((token) => (token = '-'.concat(token))).join(' ');\r\n      break;\r\n    case FilterCondition.BeginsWith:\r\n      result = val.concat('*');\r\n      break;\r\n    case FilterCondition.Equals:\r\n      result = '\"'.concat(val).concat('\"');\r\n      break;\r\n    case FilterCondition.DoesNotEqual:\r\n      result = '-\"'.concat(val).concat('\"');\r\n      break;\r\n    default:\r\n      break;\r\n  }\r\n  return result;\r\n}\r\n\r\nfunction getAggregation(type: ConditionType, condition?: FilterCondition, val?: string): string {\r\n  let result: string = '';\r\n\r\n  if (condition !== undefined && val !== undefined) {\r\n    switch (type) {\r\n      case ConditionType.Text:\r\n        result = textAggregation(condition, val);\r\n        break;\r\n\r\n      case ConditionType.Numerical:\r\n        result = idAggregation(condition, val);\r\n        break;\r\n\r\n      default:\r\n        break;\r\n    }\r\n  }\r\n  return result;\r\n}\r\n\r\nfunction getMultiTextValues(triplets: IConditionValue<string>[] | undefined, type: ConditionType): string[] {\r\n  const values = triplets?.map((triplet: IConditionValue<string>) => getAggregation(type, triplet.condition, triplet.value));\r\n  const result: string = values ? values?.filter((value: string) => value !== '').join(' | ') : '';\r\n  return result !== '' ? [result] : [];\r\n}\r\n\r\nexport function getAdQualityListValues(list: IIdNamePair[] | undefined) {\r\n  const result: string[] = [];\r\n  if (list) {\r\n    list.forEach((item: IIdNamePair) => {\r\n      if (item.isSelected) {\r\n        result.push(adQualityLocales[item.id]);\r\n      }\r\n    });\r\n  }\r\n  return result;\r\n}\r\n\r\nfunction getIdListValues(list: IIdNamePair[] | undefined) {\r\n  const result: number[] = [];\r\n  if (list) {\r\n    list.forEach((item: IIdNamePair) => {\r\n      if (item.isSelected) {\r\n        result.push(item.id);\r\n      }\r\n    });\r\n  }\r\n  return result;\r\n}\r\n\r\nfunction getIdValues(list: IIdNamePair[] | undefined) {\r\n  const result: string[] = [];\r\n  if (list) {\r\n    list.forEach((item: IIdNamePair) => {\r\n      if (item.isSelected) {\r\n        result.push(item.id.toString());\r\n      }\r\n    });\r\n  }\r\n  return result;\r\n}\r\n\r\nexport function converterIn(adSource: AdSource, rawFilter: boolean): IAdReviewModel {\r\n  const filters = rawFilter ? getStore().filters.raw : getStore().filters.active;\r\n  const result: IAdReviewModel = {\r\n    Filters: {\r\n      Text: {\r\n        adProviders: getIdValues(filters?.[AdQualityFilterNames.AdProviders]?.values),\r\n        locales: getAdQualityListValues(filters?.[AdQualityFilterNames.Markets]?.values),\r\n        uniqueCreativeAdIds: getMultiTextValues(filters?.[AdQualityFilterNames.CreativeAdId]?.conditions, ConditionType.Numerical),\r\n        advertiserNames: getMultiTextValues(filters?.[AdQualityFilterNames.Advertiser]?.conditions, ConditionType.Text),\r\n        adIds: getMultiTextValues(filters?.[AdQualityFilterNames.AdId]?.conditions, ConditionType.Numerical),\r\n        advertiserIds: getMultiTextValues(filters?.[AdQualityFilterNames.AdvertiserId]?.conditions, ConditionType.Numerical),\r\n        advertiserAccountIds: getMultiTextValues(filters?.[AdQualityFilterNames.AdvertiserAccountId]?.conditions, ConditionType.Numerical),\r\n        adTitles: getMultiTextValues(filters?.[AdQualityFilterNames.AdTitle]?.conditions, ConditionType.Text),\r\n        adUrls: getMultiTextValues(filters?.[AdQualityFilterNames.AdURL]?.conditions, ConditionType.Text),\r\n        longHeadlines: getMultiTextValues(filters?.[AdQualityFilterNames.LongHeadline]?.conditions, ConditionType.Text),\r\n        shortHeadlines: getMultiTextValues(filters?.[AdQualityFilterNames.ShortHeadline]?.conditions, ConditionType.Text),\r\n      },\r\n      Numerical: {\r\n        accountIds: getIdListValues(filters?.[AdQualityFilterNames.AccountName]?.values),\r\n        adUnitIds: [],\r\n      },\r\n    },\r\n  };\r\n\r\n  if (adSource === AdSource.Microsoft) {\r\n    delete result.Filters?.Text?.locales;\r\n    delete result.Filters?.Text?.adProviders;\r\n  }\r\n\r\n  if (adSource !== AdSource.Microsoft) {\r\n    delete result.Filters?.Text?.longHeadlines;\r\n    delete result.Filters?.Text?.shortHeadlines;\r\n  }\r\n\r\n  return result;\r\n}\r\n","import { MessageBarType } from '@fluentui/react';\r\nimport { orchestrator } from 'satcheljs';\r\nimport {\r\n  Account,\r\n  AdSource,\r\n  LifeCycleStatus,\r\n  Publisher,\r\n  getAppStore,\r\n  listEntity,\r\n  onLoadingChanged,\r\n  onNotificationChanged,\r\n} from '../../../../../@data';\r\nimport { IIdNamePair } from '../../../../../components/MultiSelectPicker';\r\nimport messages from '../../AdReview/AdCreativePage.messages';\r\nimport { onAdCreativeChanged, onBlockedContextChanged } from '../actions';\r\nimport { onAdCreativePageInitialized } from '../actions/onAdCreativePageInitialized';\r\nimport { onAdCreativeInitialAccountsChanged } from '../mutatorActions';\r\nimport { getBlockSummaryData } from '../services/AdBlockService';\r\nimport { getAdPerfData, getBlockRequestSources } from '../services/AdCreativeService';\r\nimport { TARGET_CUSTOMER_ID } from '../services/utility/constants';\r\nimport { constructAdPerfRequest } from '../services/utility/utility';\r\nimport { converterIn } from '../store/adQualityConverter';\r\nimport { IAdCreativeViewModel } from '../store/schema';\r\nimport { BlockRequestSourceData } from '../store/schema/models/BlockRequestSourceData';\r\n\r\norchestrator(onAdCreativePageInitialized, async (msg) => {\r\n  const { userContext } = getAppStore();\r\n\r\n  const viewModel: IAdCreativeViewModel = {\r\n    selectedAdSource: AdSource.Microsoft,\r\n    selectedAdProviderId: 0,\r\n    selectedBlockedMarketId: 0,\r\n  };\r\n  if (msg.publisherId) {\r\n    const publisher = new Publisher(msg.publisherId);\r\n\r\n    try {\r\n      onLoadingChanged(true);\r\n      onBlockedContextChanged(msg.publisherId);\r\n\r\n      const accounts = await listEntity([publisher], userContext, Account);\r\n      viewModel.accounts = accounts ? accounts.map((f) => ({ id: f.id, name: f.name } as IIdNamePair)) : [];\r\n      viewModel.selectedAccount = accounts[0].id;\r\n\r\n      const account = new Account(viewModel.selectedAccount);\r\n\r\n      // Set default date (for ad perf) to be the date of UTC now minus 4 hours.\r\n      // We give the 4 hour buffer for data coming in on the new day.\r\n      const defaultDateTimeLocal = new Date();\r\n      defaultDateTimeLocal.setHours(defaultDateTimeLocal.getHours() - 4);\r\n      const defaultDateUTCBased = new Date(\r\n        defaultDateTimeLocal.getUTCFullYear(),\r\n        defaultDateTimeLocal.getUTCMonth(),\r\n        defaultDateTimeLocal.getUTCDate()\r\n      );\r\n      viewModel.startDate = defaultDateUTCBased;\r\n      viewModel.endDate = defaultDateUTCBased;\r\n\r\n      const blockRequestSourcesPromise = getBlockRequestSources(msg.publisherId);\r\n      const params = new URLSearchParams([[TARGET_CUSTOMER_ID, publisher.id.toString()]]);\r\n      onAdCreativeInitialAccountsChanged(viewModel.accounts, viewModel.selectedAccount);\r\n\r\n      const data = converterIn(AdSource.Microsoft, false);\r\n      const adPerfDataPromise = getAdPerfData(constructAdPerfRequest(viewModel, data, publisher, [account.id]), params);\r\n\r\n      const blockSummaryDataPromise = getBlockSummaryData(\r\n        [['account', account.id!.toString()]],\r\n        new URLSearchParams([[TARGET_CUSTOMER_ID, msg.publisherId.toString()]])\r\n      );\r\n\r\n      const blockSummaryData = await blockSummaryDataPromise;\r\n      blockSummaryData.forEach((d) => (d.isEnabled ? (d.status = LifeCycleStatus.Active) : (d.status = LifeCycleStatus.Inactive)));\r\n\r\n      viewModel.blockSummaryData = blockSummaryData;\r\n      viewModel.adPerfData = await adPerfDataPromise;\r\n      const blockRequestData: BlockRequestSourceData[] = await blockRequestSourcesPromise;\r\n      const mappedBlockRequestData = new Map();\r\n      blockRequestData.forEach((blockRequestSource) => {\r\n        mappedBlockRequestData.set(blockRequestSource.blockRequestSourceId, blockRequestSource.blockRequestSourceName);\r\n      });\r\n      viewModel.blockRequestSourceData = mappedBlockRequestData;\r\n      onAdCreativeChanged(viewModel);\r\n    } catch (e) {\r\n      onNotificationChanged({\r\n        textMessageDescriptor: messages.adCreativeServiceLoadEntityFailed,\r\n        messageBarType: MessageBarType.severeWarning,\r\n      });\r\n    } finally {\r\n      onLoadingChanged(false);\r\n    }\r\n  } else {\r\n    onNotificationChanged({\r\n      textMessageDescriptor: messages.adqualityInvalidState,\r\n      messageBarType: MessageBarType.severeWarning,\r\n    });\r\n  }\r\n});\r\n","import { MessageBarType } from '@fluentui/react';\r\nimport { orchestrator } from 'satcheljs';\r\nimport { getAppStore, onLoadingChanged, onNotificationChanged } from '../../../../../@data';\r\nimport { validateSchema } from '../../../../../utils';\r\nimport messages from '../../AdReview/AdCreativePage.messages';\r\nimport { onAdCreativeAdPerfDataChanged, onAdCreativeRefreshDataChanged } from '../actions';\r\nimport { getAdPerfData } from '../services/AdCreativeService';\r\nimport { TARGET_CUSTOMER_ID } from '../services/utility/constants';\r\nimport { constructAdPerfRequest } from '../services/utility/utility';\r\nimport { converterIn } from '../store/adQualityConverter';\r\nimport { adCreativeViewErrorModel } from '../store/schema/AdCreativeViewErrorModel';\r\nimport { getStore } from '../store/store';\r\n\r\norchestrator(onAdCreativeRefreshDataChanged, async (msg) => {\r\n  const { publisher } = getAppStore();\r\n  const { active, adDescription } = getStore();\r\n  if (publisher && publisher.id) {\r\n    try {\r\n      await validateSchema(adCreativeViewErrorModel(), active);\r\n    } catch (e) {\r\n      onNotificationChanged({\r\n        textMessageDescriptor: messages.adqualityProvideSearchTerm,\r\n        messageBarType: MessageBarType.severeWarning,\r\n      });\r\n\r\n      return;\r\n    }\r\n\r\n    try {\r\n      onLoadingChanged(true);\r\n      const adSource = active.selectedAdSource;\r\n      if (!adSource) {\r\n        return;\r\n      }\r\n      const data = converterIn(adSource, true);\r\n      const param = new URLSearchParams([[TARGET_CUSTOMER_ID, publisher.id.toString()]]);\r\n      const adPerfDataEnhanced = await getAdPerfData(constructAdPerfRequest(active, data, publisher, undefined, adDescription), param);\r\n      onAdCreativeAdPerfDataChanged(adPerfDataEnhanced);\r\n    } catch (e) {\r\n      onNotificationChanged({\r\n        textMessageDescriptor: messages.adCreativeServiceLoadEntityFailed,\r\n        messageBarType: MessageBarType.severeWarning,\r\n      });\r\n    } finally {\r\n      onLoadingChanged(false);\r\n    }\r\n  } else {\r\n    onNotificationChanged({\r\n      textMessageDescriptor: messages.adqualityInvalidState,\r\n      messageBarType: MessageBarType.severeWarning,\r\n    });\r\n  }\r\n});\r\n","import { date, object, string } from 'yup';\r\nimport { getStore } from '../store';\r\nimport { IAdCreativeViewModel } from './IAdCreativeViewModel';\r\n\r\nexport function adCreativeViewErrorModel() {\r\n  return object<IAdCreativeViewModel>().shape({\r\n    startDate: date().required(),\r\n    endDate: date().required(),\r\n    searchBoxValue:\r\n      Math.abs(getStore().active.endDate?.getTime()! - getStore().active.startDate?.getTime()!) > 0\r\n        ? string().trim().required()\r\n        : string().trim(),\r\n  });\r\n}\r\n","import { IComboBoxOption, MessageBarType } from '@fluentui/react';\r\nimport { orchestrator } from 'satcheljs';\r\nimport { getAppStore, onNotificationChanged } from '../../../../../@data';\r\nimport messages from '../../AdReview/AdCreativePage.messages';\r\nimport { onAdCreativeAccountChanged, onAdCreativeMarketChanged, onAdProviderChanged } from '../actions/onAdCreativeChanged';\r\n\r\norchestrator(onAdProviderChanged, async (msg) => {\r\n  const { publisher } = getAppStore();\r\n  if (msg.adProvider && publisher) {\r\n    try {\r\n      onAdCreativeAccountChanged(undefined);\r\n      // en-us market\r\n      onAdCreativeMarketChanged({ key: 1033 } as IComboBoxOption);\r\n    } catch (e) {\r\n      onNotificationChanged({\r\n        textMessageDescriptor: messages.adCreativeServiceLoadEntityFailed,\r\n        messageBarType: MessageBarType.severeWarning,\r\n      });\r\n    }\r\n  }\r\n});\r\n","import { MessageBarType } from '@fluentui/react';\r\nimport { orchestrator } from 'satcheljs';\r\nimport { ApiError, getAppStore, onLoadingChanged, onNotificationChanged } from '../../../../../@data';\r\nimport messages from '../../AdReview/AdCreativePage.messages';\r\nimport { onAdCreativeAdPerfDataChanged, onAdQualityPanelApplyButtonClicked, onFilterPanelHide } from '../actions';\r\nimport { onRawFilterValuesChanged, onSetIsAppliedForAllConditions } from '../mutatorActions';\r\nimport { getAdPerfData } from '../services/AdCreativeService';\r\nimport { TARGET_CUSTOMER_ID } from '../services/utility/constants';\r\nimport { constructAdPerfRequest } from '../services/utility/utility';\r\nimport { converterIn } from '../store/adQualityConverter';\r\nimport { getStore } from '../store/store';\r\n\r\norchestrator(onAdQualityPanelApplyButtonClicked, async (msg) => {\r\n  const { publisher } = getAppStore();\r\n  const { active } = getStore();\r\n  if (publisher && publisher.id && active.selectedAdSource) {\r\n    try {\r\n      onLoadingChanged(true);\r\n      onAdCreativeAdPerfDataChanged([]);\r\n      const data = converterIn(active.selectedAdSource, false);\r\n      const param = new URLSearchParams([[TARGET_CUSTOMER_ID, publisher.id.toString()]]);\r\n      const adPerfDataEnhanced = await getAdPerfData(constructAdPerfRequest(active, data, publisher), param);\r\n      onAdCreativeAdPerfDataChanged(adPerfDataEnhanced);\r\n      const activeFilters = getStore().filters.active;\r\n      if (activeFilters) {\r\n        onSetIsAppliedForAllConditions(activeFilters);\r\n        onRawFilterValuesChanged(activeFilters);\r\n      }\r\n      onFilterPanelHide();\r\n    } catch (e) {\r\n      const apiErrorObj = e as ApiError;\r\n      if (apiErrorObj && apiErrorObj.code === 500) {\r\n        onNotificationChanged({\r\n          textMessageDescriptor: messages.adqualityTimeoutQueringForData,\r\n          intlMessageValues: { trackingId: apiErrorObj.trackingId },\r\n          messageBarType: MessageBarType.severeWarning,\r\n        });\r\n      } else {\r\n        onNotificationChanged({\r\n          textMessageDescriptor: messages.adCreativeServiceLoadEntityFailed,\r\n          messageBarType: MessageBarType.severeWarning,\r\n        });\r\n      }\r\n    } finally {\r\n      onLoadingChanged(false);\r\n    }\r\n  } else {\r\n    onNotificationChanged({\r\n      textMessageDescriptor: messages.adqualityInvalidState,\r\n      messageBarType: MessageBarType.severeWarning,\r\n    });\r\n  }\r\n});\r\n","import { IComboBoxOption, MessageBarType } from '@fluentui/react';\r\nimport { orchestrator } from 'satcheljs';\r\nimport { AdSource, getAppStore, onNotificationChanged } from '../../../../../@data';\r\nimport messages from '../../AdReview/AdCreativePage.messages';\r\nimport { onAdCreativeAccountChanged, onAdCreativeMarketChanged, onAdSourceChanged } from '../actions/onAdCreativeChanged';\r\nimport { getStore } from '../store/store';\r\n\r\norchestrator(onAdSourceChanged, async (msg) => {\r\n  const { publisher } = getAppStore();\r\n  if (msg.adSource && publisher) {\r\n    try {\r\n      const adSource = msg.adSource.key as AdSource;\r\n      if (adSource === AdSource.Microsoft) {\r\n        onAdCreativeMarketChanged(undefined);\r\n\r\n        const accounts = getStore().active.accounts;\r\n        if (accounts) {\r\n          onAdCreativeAccountChanged({ key: accounts[0].id } as IComboBoxOption);\r\n        }\r\n      } else {\r\n        onAdCreativeAccountChanged(undefined);\r\n        // en-us market\r\n        onAdCreativeMarketChanged({ key: 1033 } as IComboBoxOption);\r\n      }\r\n    } catch (e) {\r\n      onNotificationChanged({\r\n        textMessageDescriptor: messages.adCreativeServiceLoadEntityFailed,\r\n        messageBarType: MessageBarType.severeWarning,\r\n      });\r\n    }\r\n  }\r\n});\r\n","import { orchestrator } from 'satcheljs';\r\nimport { AdSource } from '../../../../../@data';\r\nimport {\r\n  onBlockAdInitialized,\r\n  onBlockAdsChanged,\r\n  onBlockAdsChannelsAndRevenueChanged,\r\n  onBlockAdsImagesChanged,\r\n  onBlockAdsSamChanged,\r\n  onBlockImageAdsChanged,\r\n} from '../actions';\r\nimport { getStore } from '../store/store';\r\n\r\norchestrator(onBlockAdInitialized, async (msg) => {\r\n  const selectedAds = msg.value;\r\n  const { active } = getStore();\r\n  if (active.selectedAdSource === AdSource.Microsoft) {\r\n    if (!msg.isImageBlock) {\r\n      onBlockAdsChanged(selectedAds);\r\n      selectedAds.forEach((item, index) => onBlockAdsImagesChanged(item.images, index, true, false));\r\n      onBlockAdsChannelsAndRevenueChanged(selectedAds);\r\n    } else {\r\n      onBlockImageAdsChanged(selectedAds, true);\r\n      selectedAds.forEach((item, index) => onBlockAdsImagesChanged(item.images, index, true, false));\r\n    }\r\n  } else {\r\n    onBlockAdsSamChanged(selectedAds);\r\n    selectedAds.forEach((item, index) => onBlockAdsImagesChanged(item.images, index, false, true));\r\n  }\r\n});\r\n","import { MessageBarType } from '@fluentui/react';\r\nimport { orchestrator } from 'satcheljs';\r\nimport { Log } from '../../../../../../logging/src';\r\nimport {\r\n  Account,\r\n  ApiError,\r\n  Channel,\r\n  getAppStore,\r\n  listEntity,\r\n  onAuthLogout,\r\n  onLoadingChanged,\r\n  onNotificationChanged,\r\n} from '../../../../../@data';\r\nimport { IIdNamePair } from '../../../../../components/MultiSelectPicker';\r\nimport messages from '../../AdReview/AdCreativePage.messages';\r\nimport {\r\n  onBlockAdsChannelsAndRevenueChanged,\r\n  onBlockAdsChannelsChanged,\r\n  onBlockAdsListingsChanged,\r\n  onBlockAdsRevenueChanged,\r\n} from '../actions';\r\nimport { getAdIdDetails, getAdIdRevenue } from '../services/AdCreativeService';\r\nimport { convertDateToString } from '../services/utility/utility';\r\nimport { getStore } from '../store/store';\r\n\r\norchestrator(onBlockAdsChannelsAndRevenueChanged, async (msg) => {\r\n  const { publisher, userContext } = getAppStore();\r\n  const { adPerfData, endDate, startDate } = getStore().active;\r\n  const selectedAds = msg.value;\r\n\r\n  const handleAPIRequestsAndResponses: Promise<void>[] = [];\r\n  selectedAds.forEach((item, index) => {\r\n    onLoadingChanged(true);\r\n    if (publisher && item.accountId && !getStore().blockAdsPage.channels[item.accountId]) {\r\n      const account = new Account(item.accountId);\r\n      const processChannelsResponse = listEntity([publisher, account], userContext, Channel).then((response) => {\r\n        const channels = response ? response.map((f) => ({ id: f.id, name: f.name } as IIdNamePair)) : [];\r\n\r\n        if (channels) {\r\n          channels.forEach((channel) => {\r\n            if (channel.name.toString().toUpperCase() === 'Default'.toUpperCase()) {\r\n              onBlockAdsChannelsChanged(item.accountId!, channel.id);\r\n            }\r\n          });\r\n        }\r\n      });\r\n\r\n      handleAPIRequestsAndResponses.push(processChannelsResponse);\r\n    } else {\r\n      onNotificationChanged({\r\n        textMessageDescriptor: messages.adqualityInvalidState,\r\n        messageBarType: MessageBarType.severeWarning,\r\n      });\r\n    }\r\n    if (publisher && publisher.id && item.adId && adPerfData && adPerfData.length > 0) {\r\n      const today = new Date(Date.now());\r\n      const startDateRevenue = new Date().setDate(today.getDate() - 7);\r\n      const endDateRevenue = new Date().setDate(today.getDate());\r\n\r\n      const paramsLastSevenDayRevenue = new URLSearchParams([\r\n        ['startdate', convertDateToString(new Date(startDateRevenue))],\r\n        ['enddate', convertDateToString(new Date(endDateRevenue))],\r\n        ['targetCustomerId', publisher.id.toString()],\r\n      ]);\r\n\r\n      const processAdidRevenueResponse = getAdIdRevenue(\r\n        [\r\n          ['publisher', publisher.id!.toString()],\r\n          ['adrevenue', item.adId.toString()],\r\n        ],\r\n        paramsLastSevenDayRevenue\r\n      )\r\n        .then((fetchedRevenue) => {\r\n          if (isNaN(fetchedRevenue)) {\r\n            fetchedRevenue = 0;\r\n          }\r\n          onBlockAdsRevenueChanged(fetchedRevenue, index);\r\n        })\r\n        .catch((e) => {\r\n          onNotificationChanged({\r\n            textMessageDescriptor: messages.adqualityLoadRevenueAdDataFailed,\r\n            messageBarType: MessageBarType.severeWarning,\r\n          });\r\n        });\r\n\r\n      handleAPIRequestsAndResponses.push(processAdidRevenueResponse);\r\n\r\n      const startDateDetails = startDate ? startDate : new Date(new Date().setDate(today.getDate() - 1));\r\n      const endDateDetails = endDate ? endDate : new Date(new Date().setDate(today.getDate()));\r\n\r\n      const paramsAdDetails = new URLSearchParams([\r\n        ['startdate', convertDateToString(startDateDetails)],\r\n        ['enddate', convertDateToString(endDateDetails)],\r\n        ['targetCustomerId', publisher.id.toString()],\r\n      ]);\r\n      const processAdidDetailsRequest = getAdIdDetails(\r\n        [\r\n          ['account', item.accountId!.toString()],\r\n          ['addetails', item.adId.toString()],\r\n        ],\r\n        paramsAdDetails\r\n      )\r\n        .then((fetchedAdDetails) => {\r\n          onBlockAdsListingsChanged(fetchedAdDetails, index);\r\n        })\r\n        .catch((e) => {\r\n          const apiErrorObj = e as ApiError;\r\n          if (apiErrorObj && apiErrorObj.code === 401) {\r\n            Log.info(apiErrorObj.message);\r\n            onAuthLogout();\r\n          } else {\r\n            onNotificationChanged({\r\n              textMessageDescriptor: messages.adqualityLoadListingAdDataFailed,\r\n              messageBarType: MessageBarType.severeWarning,\r\n            });\r\n          }\r\n        });\r\n\r\n      handleAPIRequestsAndResponses.push(processAdidDetailsRequest);\r\n    } else if (publisher && publisher.id && item.adId && adPerfData) {\r\n      onBlockAdsListingsChanged({ adListingItems: [], listingsCount: 0, adListingSelectedPage: 0 }, index);\r\n      onBlockAdsRevenueChanged(item.revenue ? item.revenue : 0, index);\r\n    } else {\r\n      onNotificationChanged({\r\n        textMessageDescriptor: messages.adqualityInvalidState,\r\n        messageBarType: MessageBarType.severeWarning,\r\n      });\r\n    }\r\n  });\r\n\r\n  await Promise.all(handleAPIRequestsAndResponses);\r\n  onLoadingChanged(false);\r\n});\r\n","import { MessageBarType } from '@fluentui/react';\r\nimport { orchestrator } from 'satcheljs';\r\nimport { getAppStore, LifeCycleStatus, onLoadingChanged, onNotificationChanged, onSavingChanged } from '../../../../../@data';\r\nimport { INotificationBarItem } from '../../../../../components/NotificationBar';\r\nimport messages from '../../AdReview/AdCreativePage.messages';\r\nimport { onBlockAdsDataChanged, onBlockAdsItemStatusChanged } from '../actions';\r\nimport { deactivateBlockedAds, getBlockSummaryData } from '../services/AdBlockService';\r\nimport { createAdBlock } from '../services/AdCreativeService';\r\nimport { BlockAdsData } from '../store/schema/models/BlockAdsData';\r\nimport { getStore } from '../store/store';\r\n\r\norchestrator(onBlockAdsItemStatusChanged, async (msg) => {\r\n  const { publisher, userContext } = getAppStore();\r\n  const status = msg.status;\r\n\r\n  let notification: INotificationBarItem = {};\r\n\r\n  if (publisher && publisher.id && userContext) {\r\n    const body: BlockAdsData = new BlockAdsData();\r\n    body.channelId = msg.data.channelId;\r\n    body.channelName = msg.data.channelName;\r\n    body.adId = msg.data.adId;\r\n    body.adTitle = msg.data.adTitle;\r\n    body.advertiserAccountId = msg.data.advertiserAccountId;\r\n    body.reason = msg.data.reason;\r\n    body.reasonCategory = msg.data.reasonCategory;\r\n    body.modifiedBy = userContext.id.toString();\r\n    body.modifiedDateTime = new Date(Date.now()).toISOString();\r\n    body.startDate = null;\r\n    body.endDate = null;\r\n    body.isEnabled = true;\r\n    body.pastRevenue = msg.data.pastRevenue;\r\n    body.allImages = msg.data.allImages;\r\n\r\n    const params = new URLSearchParams([['targetCustomerId', publisher.id.toString()]]);\r\n\r\n    onSavingChanged(true);\r\n    onLoadingChanged(true);\r\n    try {\r\n      let result;\r\n      if (status === LifeCycleStatus.Active) {\r\n        result = await createAdBlock([body], params);\r\n      } else if (status === LifeCycleStatus.Inactive) {\r\n        result = await deactivateBlockedAds(\r\n          [\r\n            ['channel', msg.data.channelId!.toString()],\r\n            ['adid', msg.data.adId!.toString()],\r\n          ],\r\n          params\r\n        );\r\n      }\r\n\r\n      if (result) {\r\n        const active = getStore().active;\r\n        const blockSummaryParams = new URLSearchParams([['targetCustomerId', publisher.id.toString()]]);\r\n        let blockSummaryData: BlockAdsData[] = [];\r\n        if (active.selectedAccount) {\r\n          if (active.selectedAccount === -1) {\r\n            blockSummaryData = await getBlockSummaryData([['publisher', publisher.id!.toString()]], blockSummaryParams);\r\n            // } else if (active.selectedAdUnit && active.selectedAdUnit !== -1) {\r\n            //   blockSummaryData = await getBlockSummaryData([['adunit', active.selectedAdUnit.toString()]], blockSummaryParams);\r\n          } else {\r\n            blockSummaryData = await getBlockSummaryData([['account', active.selectedAccount.toString()]], blockSummaryParams);\r\n          }\r\n        }\r\n        blockSummaryData.forEach((d) => (d.isEnabled ? (d.status = LifeCycleStatus.Active) : (d.status = LifeCycleStatus.Inactive)));\r\n        onBlockAdsDataChanged(blockSummaryData);\r\n      }\r\n      notification = {\r\n        textMessageDescriptor: messages.adqualityUpdatedBlockedAdsStatusSuccess,\r\n        intlMessageValues: { ID: msg.data.adId },\r\n        messageBarType: MessageBarType.success,\r\n      };\r\n\r\n      onNotificationChanged(notification);\r\n    } catch (e) {\r\n      onNotificationChanged({\r\n        textMessageDescriptor: messages.adqualityUpdateBlockedAdsStatusFailed,\r\n        messageBarType: MessageBarType.severeWarning,\r\n      });\r\n    } finally {\r\n      onLoadingChanged(false);\r\n      onSavingChanged(false);\r\n    }\r\n  } else {\r\n    onNotificationChanged({\r\n      textMessageDescriptor: messages.adqualityInvalidState,\r\n      messageBarType: MessageBarType.severeWarning,\r\n    });\r\n  }\r\n});\r\n","import { orchestrator } from 'satcheljs';\r\nimport { AdSource } from '../../../../../@data';\r\nimport { onBlockAdsSubmitted, onMSANBlockAdsSubmitted, onSAMBlockAdsSubmitted } from '../actions';\r\nimport { getStore } from '../store/store';\r\n\r\norchestrator(onBlockAdsSubmitted, async (msg) => {\r\n  const { active } = getStore();\r\n\r\n  if (active.selectedAdSource === AdSource.Microsoft) {\r\n    onMSANBlockAdsSubmitted();\r\n  } else {\r\n    onSAMBlockAdsSubmitted();\r\n  }\r\n});\r\n","import { MessageBarType } from '@fluentui/react';\r\nimport { orchestrator } from 'satcheljs';\r\nimport { getAppStore, onNotificationChanged, onSavingChanged } from '../../../../../@data';\r\nimport { INotificationBarItem } from '../../../../../components/NotificationBar';\r\nimport { validateSchema } from '../../../../../utils';\r\nimport messages from '../../AdReview/AdCreativePage.messages';\r\nimport {\r\n  onAdCreativeAdPerfDataChanged,\r\n  onAdCreativeBlockPanelChanged,\r\n  onBlockImagesErrorChanged,\r\n  onBlockImagesSubmitted,\r\n  onBlockedContextChanged,\r\n  onBlockedImagesContextChanged,\r\n} from '../actions';\r\nimport { createImageBlock } from '../services/AdCreativeService';\r\nimport { blockItemErrorModel } from '../store/schema/BlockItemErrorModel';\r\nimport { BlockImagessData } from '../store/schema/models';\r\nimport { getStore } from '../store/store';\r\n\r\norchestrator(onBlockImagesSubmitted, async (msg) => {\r\n  const { publisher, userContext } = getAppStore();\r\n  const { blockAdsPage, blockedImagesContext, active } = getStore();\r\n\r\n  let notification: INotificationBarItem = {};\r\n\r\n  if (publisher && publisher.id && userContext) {\r\n    blockAdsPage.adPerfBlockAdsData.forEach(async (item, value) => {\r\n      const body: BlockImagessData = new BlockImagessData();\r\n      body.adId = item.adId;\r\n      body.adTitle = item.adTitle;\r\n      body.adUnitId = item.adUnitId;\r\n      body.images = item.blockedImages;\r\n      body.blockReason = blockAdsPage.blockReason;\r\n      body.blockReasonComment = blockAdsPage.blockDetails;\r\n      body.blockedBy = userContext.id;\r\n      body.blockSource = 1;\r\n\r\n      const params = new URLSearchParams([['targetCustomerId', publisher.id!.toString()]]);\r\n\r\n      try {\r\n        await validateSchema(blockItemErrorModel(), blockAdsPage);\r\n        onBlockImagesErrorChanged();\r\n      } catch (e) {\r\n        onBlockImagesErrorChanged(e);\r\n        onNotificationChanged({\r\n          textMessageDescriptor: messages.adqualityBlockImagesMissingFields,\r\n          intlMessageValues: { count: Object.keys(e).length },\r\n          messageBarType: MessageBarType.severeWarning,\r\n        });\r\n        return;\r\n      }\r\n\r\n      onSavingChanged(true);\r\n      try {\r\n        await createImageBlock(body, params);\r\n\r\n        const reportedImages = blockedImagesContext ? blockedImagesContext : [];\r\n        if (item.blockedImages) {\r\n          item.blockedImages.forEach((blockImage) => {\r\n            const imageReportDataTuple = { adId: item.adId, imageUrl: blockImage };\r\n            reportedImages.push(JSON.stringify(imageReportDataTuple));\r\n          });\r\n          if (active && active.adPerfData) {\r\n            const filteredAds = active.adPerfData;\r\n            filteredAds.forEach((ad) => {\r\n              ad.blockedAdIdImages = reportedImages;\r\n              // ad.imagesContext = [];\r\n              // if (ad.images) {\r\n              //   ad.images.forEach((image) => {\r\n              //     const imageMetadata: ImageMetaData = { imageUrl: image, isBlocked: false };\r\n              //     const imageReportDataTuple = { adId: ad.adId, imageUrl: processImage(image) };\r\n              //     if (reportedImages.includes(JSON.stringify(imageReportDataTuple))) {\r\n              //       imageMetadata.isBlocked = true;\r\n              //     }\r\n              //     ad.imagesContext!.push(imageMetadata);\r\n              //   });\r\n              // }\r\n            });\r\n            onAdCreativeAdPerfDataChanged(filteredAds);\r\n            onBlockedImagesContextChanged(reportedImages);\r\n          }\r\n        }\r\n        onBlockedContextChanged(publisher.id!);\r\n\r\n        notification = {\r\n          textMessageDescriptor: messages.adqualityBlockImagesSuccess,\r\n          messageBarType: MessageBarType.success,\r\n        };\r\n        onNotificationChanged(notification);\r\n      } catch (e) {\r\n        onNotificationChanged({\r\n          textMessageDescriptor: messages.adqualityBlockImagesFailed,\r\n          messageBarType: MessageBarType.severeWarning,\r\n        });\r\n      } finally {\r\n        onAdCreativeBlockPanelChanged(false);\r\n        onSavingChanged(false);\r\n      }\r\n    });\r\n  } else {\r\n    onNotificationChanged({\r\n      textMessageDescriptor: messages.adqualityInvalidState,\r\n      messageBarType: MessageBarType.severeWarning,\r\n    });\r\n  }\r\n});\r\n","import { MessageBarType } from '@fluentui/react';\r\nimport { orchestrator } from 'satcheljs';\r\nimport { AdSource, onNotificationChanged } from '../../../../../@data';\r\nimport { INotificationBarItem } from '../../../../../components/NotificationBar';\r\nimport messages from '../../AdReview/AdCreativePage.messages';\r\nimport { onBlockedAdsExportClicked } from '../actions';\r\nimport { exportCSV } from '../services/utility/utility';\r\nimport { getStore } from '../store/store';\r\n\r\norchestrator(onBlockedAdsExportClicked, async (msg) => {\r\n  let notification: INotificationBarItem = {};\r\n  const adSource = getStore().active.selectedAdSource;\r\n  const columns = getStore().columns;\r\n\r\n  if (adSource === AdSource.Microsoft) {\r\n    const blockSummaryForCSVFromTable = getStore().active.blockSummaryData;\r\n    if (blockSummaryForCSVFromTable && columns) {\r\n      exportCSV(blockSummaryForCSVFromTable, 'publisher_ad_blocks.csv', columns);\r\n\r\n      notification = {\r\n        textMessageDescriptor: messages.adqualityBlockedAdsDataDownloadSuccess,\r\n        messageBarType: MessageBarType.success,\r\n      };\r\n      onNotificationChanged(notification);\r\n    } else {\r\n      onNotificationChanged({\r\n        textMessageDescriptor: messages.adqualityNoDataToDownload,\r\n        messageBarType: MessageBarType.severeWarning,\r\n      });\r\n    }\r\n  } else {\r\n    const blockSummaryForCSVFromTable = getStore().active.samBlockSummaryData;\r\n    if (blockSummaryForCSVFromTable && columns) {\r\n      exportCSV(blockSummaryForCSVFromTable, 'publisher_auction_ad_blocks.csv', columns);\r\n\r\n      notification = {\r\n        textMessageDescriptor: messages.adqualityBlockedAdsDataDownloadSuccess,\r\n        messageBarType: MessageBarType.success,\r\n      };\r\n      onNotificationChanged(notification);\r\n    } else {\r\n      onNotificationChanged({\r\n        textMessageDescriptor: messages.adqualityNoDataToDownload,\r\n        messageBarType: MessageBarType.severeWarning,\r\n      });\r\n    }\r\n  }\r\n});\r\n","import { MessageBarType } from '@fluentui/react';\r\nimport { orchestrator } from 'satcheljs';\r\nimport { onNotificationChanged } from '../../../../../@data';\r\nimport messages from '../../AdReview/AdCreativePage.messages';\r\nimport { onBlockedAdsContextChanged, onBlockedContextChanged } from '../actions';\r\nimport { getBlockImagesData } from '../services/AdBlockService';\r\nimport { getBlockedAdContext } from '../services/AdCreativeService';\r\n\r\norchestrator(onBlockedContextChanged, async (msg) => {\r\n  try {\r\n    const blockedAdContext = await getBlockedAdContext(msg.publisherId);\r\n    blockedAdContext.mapAdIdImages = new Map<number, string[]>();\r\n    const blockedImageSummary = await getBlockImagesData(msg.publisherId);\r\n    blockedImageSummary.forEach((element) => {\r\n      if (blockedAdContext.mapAdIdImages) {\r\n        if (blockedAdContext.mapAdIdImages.has(element.adId!)) {\r\n          blockedAdContext.mapAdIdImages.get(element.adId!)!.push(element.image!);\r\n        } else {\r\n          blockedAdContext.mapAdIdImages.set(element.adId!, [element.image!]);\r\n        }\r\n      }\r\n    });\r\n    onBlockedAdsContextChanged(blockedAdContext);\r\n  } catch (e) {\r\n    onNotificationChanged({\r\n      textMessageDescriptor: messages.adqualityDownloadAdContextFailed,\r\n      messageBarType: MessageBarType.severeWarning,\r\n    });\r\n  }\r\n});\r\n","import { MessageBarType } from '@fluentui/react';\r\nimport { orchestrator } from 'satcheljs';\r\nimport { getAppStore, onLoadingChanged, onNotificationChanged } from '../../../../../@data';\r\nimport { INotificationBarItem } from '../../../../../components/NotificationBar';\r\nimport messages from '../../AdReview/AdCreativePage.messages';\r\nimport { onBlockedImagesExportClicked } from '../actions';\r\nimport { getBlockImagesData } from '../services/AdBlockService';\r\nimport { exportCSV } from '../services/utility/utility';\r\nimport { getStore } from '../store/store';\r\n\r\norchestrator(onBlockedImagesExportClicked, async (msg) => {\r\n  const { publisher, userContext } = getAppStore();\r\n\r\n  let notification: INotificationBarItem = {};\r\n\r\n  if (publisher && publisher.id && userContext) {\r\n    onLoadingChanged(true);\r\n    try {\r\n      const blockImagesSummary = await getBlockImagesData(publisher.id);\r\n      const columns = getStore().columns;\r\n      if (columns) {\r\n        exportCSV(blockImagesSummary, 'publisher_ad_image_blocks.csv', columns);\r\n      }\r\n\r\n      notification = {\r\n        textMessageDescriptor: messages.adqualityDownloadBlockedImagesSuccess,\r\n        messageBarType: MessageBarType.success,\r\n      };\r\n      onNotificationChanged(notification);\r\n    } catch (e) {\r\n      onNotificationChanged({\r\n        textMessageDescriptor: messages.adqualityDownloadBlockedImagesFailed,\r\n        messageBarType: MessageBarType.severeWarning,\r\n      });\r\n    } finally {\r\n      onLoadingChanged(false);\r\n    }\r\n  } else {\r\n    onNotificationChanged({\r\n      textMessageDescriptor: messages.adqualityInvalidState,\r\n      messageBarType: MessageBarType.severeWarning,\r\n    });\r\n  }\r\n});\r\n","import { MessageBarType } from '@fluentui/react';\r\nimport { orchestrator } from 'satcheljs';\r\nimport { AdSource, LifeCycleStatus, getAppStore, onLoadingChanged, onNotificationChanged } from '../../../../../@data';\r\nimport { adQualityLocales } from '../../../../../config/locale';\r\nimport messages from '../../AdReview/AdCreativePage.messages';\r\nimport { onBlockAdsDataChanged, onRefreshBlockSummary, onSAMBlockAdsDataChanged } from '../actions';\r\nimport { getBlockSummaryData, getSAMBlockSummaryData } from '../services/AdBlockService';\r\nimport { BlockAdsData, SAMBlockSummaryData } from '../store/schema/models';\r\nimport { getStore } from '../store/store';\r\n\r\norchestrator(onRefreshBlockSummary, async (msg) => {\r\n  const { publisher } = getAppStore();\r\n  const { active } = getStore();\r\n  if (publisher && publisher.id) {\r\n    try {\r\n      onLoadingChanged(true);\r\n      const adSource = active.selectedAdSource;\r\n\r\n      let blockSummaryParams = new URLSearchParams([\r\n        ['targetCustomerId', publisher.id.toString()],\r\n        ['creativeagglevel', 'listingid'],\r\n        ['adtypes', 'TA,PA'],\r\n        ['adSources', 'PS,AIM'],\r\n      ]);\r\n      if (adSource === AdSource.Microsoft) {\r\n        onBlockAdsDataChanged([]);\r\n        let blockSummaryData: BlockAdsData[] = [];\r\n\r\n        if (active.selectedAccount) {\r\n          if (active.selectedAccount === -1) {\r\n            blockSummaryData = await getBlockSummaryData([['publisher', publisher.id!.toString()]], blockSummaryParams);\r\n            // } else if (active.selectedAdUnit && active.selectedAdUnit !== -1) {\r\n            //   adPerfData = await getAdPerfData([['adunit', active.selectedAdUnit.toString()]], params);\r\n            //   blockSummaryData = await getBlockSummaryData([['adunit', active.selectedAdUnit.toString()]], blockSummaryParams);\r\n          } else {\r\n            blockSummaryData = await getBlockSummaryData([['account', active.selectedAccount.toString()]], blockSummaryParams);\r\n          }\r\n        }\r\n        blockSummaryData.forEach((d) => (d.isEnabled ? (d.status = LifeCycleStatus.Active) : (d.status = LifeCycleStatus.Inactive)));\r\n\r\n        if (active.blockSummaryStartDate) {\r\n          blockSummaryData = blockSummaryData.filter(\r\n            (blockSummary) =>\r\n              blockSummary.modifiedDateTime &&\r\n              active.blockSummaryStartDate &&\r\n              new Date(blockSummary.modifiedDateTime) >= active.blockSummaryStartDate\r\n          );\r\n        }\r\n        if (active.blockSummaryEndDate) {\r\n          blockSummaryData = blockSummaryData.filter(\r\n            (blockSummary) =>\r\n              blockSummary.modifiedDateTime &&\r\n              active.blockSummaryEndDate &&\r\n              new Date(blockSummary.modifiedDateTime) <= active.blockSummaryEndDate\r\n          );\r\n        }\r\n        onBlockAdsDataChanged(blockSummaryData);\r\n      } else {\r\n        onSAMBlockAdsDataChanged([]);\r\n        let blockSummaryData: SAMBlockSummaryData[] = [];\r\n\r\n        blockSummaryParams = new URLSearchParams([\r\n          ['targetCustomerId', publisher.id.toString()],\r\n          ['NumImages', 2],\r\n        ]);\r\n\r\n        if (active.selectedMarket) {\r\n          blockSummaryData = await getSAMBlockSummaryData([['publisher', publisher.id!.toString()]], blockSummaryParams);\r\n          if (active.selectedBlockedMarketId !== undefined) {\r\n            if (active.selectedBlockedMarketId === 0) {\r\n              blockSummaryData = blockSummaryData.filter((blockSummary) => blockSummary.locale === 'global');\r\n            } else {\r\n              blockSummaryData = blockSummaryData.filter(\r\n                (blockSummary) =>\r\n                  blockSummary.locale === 'global' || blockSummary.locale === adQualityLocales[active.selectedBlockedMarketId!]\r\n              );\r\n            }\r\n          }\r\n          if (active.blockSummaryStartDate) {\r\n            blockSummaryData = blockSummaryData.filter(\r\n              (blockSummary) =>\r\n                blockSummary.modifiedDateTime &&\r\n                active.blockSummaryStartDate &&\r\n                new Date(blockSummary.modifiedDateTime) >= active.blockSummaryStartDate\r\n            );\r\n          }\r\n          if (active.blockSummaryEndDate) {\r\n            blockSummaryData = blockSummaryData.filter(\r\n              (blockSummary) =>\r\n                blockSummary.modifiedDateTime &&\r\n                active.blockSummaryEndDate &&\r\n                new Date(blockSummary.modifiedDateTime) <= active.blockSummaryEndDate\r\n            );\r\n          }\r\n          onSAMBlockAdsDataChanged(blockSummaryData);\r\n        }\r\n      }\r\n    } catch (e) {\r\n      onNotificationChanged({\r\n        textMessageDescriptor: messages.adCreativeServiceLoadEntityFailed,\r\n        messageBarType: MessageBarType.severeWarning,\r\n      });\r\n    } finally {\r\n      onLoadingChanged(false);\r\n    }\r\n  } else {\r\n    onNotificationChanged({\r\n      textMessageDescriptor: messages.adqualityInvalidState,\r\n      messageBarType: MessageBarType.severeWarning,\r\n    });\r\n  }\r\n});\r\n","import { FilterType, IFilterDetails } from '../../../../../components/GridFilter/GridFilter.types';\r\nimport { IIdNamePair } from '../../../../../components/MultiSelectPicker';\r\nimport { AdQualityFilterNames, IConditionValue } from './schema';\r\nimport { getStore } from './store';\r\n\r\nexport function getInitialFilterList(): IFilterDetails[] {\r\n  const filterListValues: IFilterDetails[] = [];\r\n\r\n  const filterListType = [AdQualityFilterNames.AccountName];\r\n\r\n  const filterTextType = [\r\n    AdQualityFilterNames.CreativeAdId,\r\n    AdQualityFilterNames.Advertiser,\r\n    AdQualityFilterNames.AdvertiserId,\r\n    AdQualityFilterNames.AdvertiserAccountId,\r\n    AdQualityFilterNames.AdId,\r\n    AdQualityFilterNames.AdTitle,\r\n    AdQualityFilterNames.AdURL,\r\n    AdQualityFilterNames.LongHeadline,\r\n    AdQualityFilterNames.ShortHeadline,\r\n  ];\r\n\r\n  filterListType.forEach((elem: string) => {\r\n    const v = getStore().filters.raw?.[elem];\r\n    if (!v?.values) {\r\n      return;\r\n    }\r\n    const arr: IIdNamePair[] = v.values.filter((item: IIdNamePair) => {\r\n      return item.isSelected;\r\n    });\r\n\r\n    arr.forEach((e: IIdNamePair, index: number) => {\r\n      const item: IFilterDetails = {\r\n        filterId: `filterList-${index}`,\r\n        columnName: undefined,\r\n        customFunction: undefined,\r\n        filterCondition: '',\r\n        filterName: elem,\r\n        filterOptions: undefined,\r\n        filterText: e.name,\r\n        filterType: FilterType.string,\r\n        includeNulls: undefined,\r\n        showNullsCheckboxLabel: undefined,\r\n      };\r\n      filterListValues.push(item);\r\n    });\r\n  });\r\n\r\n  filterTextType.forEach((elem: string) => {\r\n    const v = getStore().filters.raw?.[elem];\r\n    if (!v?.conditions) {\r\n      return;\r\n    }\r\n    const arr: IConditionValue<string>[] = v.conditions.filter((item: IConditionValue<string>) => {\r\n      return item.isApplied;\r\n    });\r\n\r\n    arr.forEach((e: IConditionValue<string>, index: number) => {\r\n      const item: IFilterDetails = {\r\n        filterId: `filterText-${index}`,\r\n        columnName: 'id',\r\n        customFunction: undefined,\r\n        filterCondition: e.condition,\r\n        filterName: elem,\r\n        filterOptions: undefined,\r\n        filterText: e.value,\r\n        filterType: FilterType.string,\r\n        includeNulls: undefined,\r\n        showNullsCheckboxLabel: undefined,\r\n      };\r\n      filterListValues.push(item);\r\n    });\r\n  });\r\n\r\n  return filterListValues;\r\n}\r\n","import { defineMessages } from 'react-intl';\r\n\r\nexport default defineMessages({\r\n  selectAll: {\r\n    id: 'listFilter.selectAll',\r\n    defaultMessage: 'Select all',\r\n  },\r\n  deselectAll: {\r\n    id: 'listFilter.deselectAll',\r\n    defaultMessage: 'Deselect all',\r\n  },\r\n});\r\n","import { getTheme, mergeStyleSets } from '@fluentui/react';\r\nimport { IPubcenterSpacing, IPubcenterTheme } from '../../../../theme';\r\nimport { IListFilterClassNames } from './ListFilter.types';\r\n\r\nexport const getClassNames = (): IListFilterClassNames => {\r\n  const theme = (getTheme() as unknown) as IPubcenterTheme;\r\n  const spacing = theme.spacing as IPubcenterSpacing;\r\n\r\n  return mergeStyleSets({\r\n    content: {\r\n      display: 'flex',\r\n      flexDirection: 'row',\r\n    },\r\n    buttonSection: {\r\n      marginLeft: 'auto',\r\n    },\r\n    checkBoxRow: {\r\n      marginTop: spacing.size10,\r\n      marginBottom: spacing.size10,\r\n    },\r\n  });\r\n};\r\n","import { Checkbox, Link, mergeStyleSets } from '@fluentui/react';\r\nimport React from 'react';\r\nimport { injectIntlAndObserver } from '../../../utils';\r\nimport { FormSection } from '../../Form';\r\nimport { IIdNamePair } from '../../MultiSelectPicker';\r\nimport messages from './ListFilter.messages';\r\nimport { getClassNames } from './ListFilter.styles';\r\nimport { IListFilterProps } from './ListFilter.types';\r\n\r\nexport const ListFilter = injectIntlAndObserver(function ListFilterComponent(props: IListFilterProps): JSX.Element {\r\n  const { formatMessage } = props.intl;\r\n  const { root, content, checkBoxRow, buttonSection } = mergeStyleSets(getClassNames());\r\n  const { selectAll, deselectAll } = messages;\r\n  const { heading, list, onSelect, onSelectAll, onDeselectAll } = props;\r\n\r\n  const areAllElementsSelected = (): boolean => {\r\n    const lst: IIdNamePair[] = list ?? [];\r\n    return lst?.every((elem: IIdNamePair) => {\r\n      return elem.isSelected;\r\n    });\r\n  };\r\n\r\n  const hasSelectedElements = (): boolean => {\r\n    const lst: IIdNamePair[] = list ?? [];\r\n    return lst?.some((elem: IIdNamePair) => {\r\n      return elem.isSelected;\r\n    });\r\n  };\r\n\r\n  return (\r\n    <div className={root}>\r\n      <FormSection formWidth={300} title={heading} expanded={hasSelectedElements()} rightChevron>\r\n        <div className={content}>\r\n          <div>\r\n            {list?.map((elemList: IIdNamePair, index: number) => {\r\n              return (\r\n                <React.Fragment key={index}>\r\n                  <div className={checkBoxRow}>\r\n                    <Checkbox\r\n                      label={elemList.name}\r\n                      checked={!!elemList.isSelected}\r\n                      onChange={(_, value) => {\r\n                        if (heading && onSelect) {\r\n                          return onSelect(heading, elemList, !!value);\r\n                        }\r\n                      }}\r\n                    />\r\n                  </div>\r\n                </React.Fragment>\r\n              );\r\n            })}\r\n          </div>\r\n          <div className={buttonSection}>\r\n            <Link\r\n              onClick={() => {\r\n                if (heading && onSelectAll && onDeselectAll) {\r\n                  return !areAllElementsSelected() ? onSelectAll(heading) : onDeselectAll(heading);\r\n                }\r\n              }}\r\n            >\r\n              {!areAllElementsSelected() ? formatMessage(selectAll) : formatMessage(deselectAll)}\r\n            </Link>\r\n          </div>\r\n        </div>\r\n      </FormSection>\r\n    </div>\r\n  );\r\n});\r\n","import { mutatorAction } from 'satcheljs';\r\nimport { IIdNamePair } from '../../../../../../components/MultiSelectPicker';\r\nimport { IConditionValue } from '../../../@data/store/schema';\r\nimport { getStore } from '../../../@data/store/store';\r\n\r\nexport const onAddRawElementToList = mutatorAction(\r\n  'onAddRawElementToList',\r\n  function onAddRawElement(heading: string, item: IConditionValue<string>) {\r\n    const activeFilters = getStore().filters.active?.[heading];\r\n    activeFilters.conditions.push(item);\r\n  }\r\n);\r\n\r\nexport const onSelectChanged = mutatorAction('onSelectChanged', function onSelect(heading: string, item: IIdNamePair, value: boolean) {\r\n  const elemList: IIdNamePair[] = getStore().filters.active?.[heading]?.values;\r\n  if (item && elemList) {\r\n    const index: number = elemList.findIndex((e: { id: number }) => e.id === item.id);\r\n    elemList[index].isSelected = value;\r\n  }\r\n});\r\n\r\nexport const onSelectAllChanged = mutatorAction('onSelectAllChanged', function onSelectAll(heading: string) {\r\n  getStore().filters.active?.[heading].values.forEach((elemList: IIdNamePair) => {\r\n    elemList.isSelected = true;\r\n  });\r\n});\r\n\r\nexport const onDeselectAllChanged = mutatorAction('onDeselectAllChanged', function onDeselectAll(heading: string) {\r\n  getStore().filters.active?.[heading].values.forEach((elemList: IIdNamePair) => {\r\n    elemList.isSelected = false;\r\n  });\r\n});\r\n","import { defineMessages } from 'react-intl';\r\n\r\nexport default defineMessages({\r\n  contains: {\r\n    id: 'textFilter.filterConditionString.contains',\r\n    defaultMessage: 'contains',\r\n  },\r\n  doesNotContain: {\r\n    id: 'textFilter.filterConditionString.doesNotContain',\r\n    defaultMessage: 'does not contain',\r\n  },\r\n  beginsWith: {\r\n    id: 'textFilter.filterConditionString.beginsWith',\r\n    defaultMessage: 'begins with',\r\n  },\r\n  endsWith: {\r\n    id: 'textFilter.filterConditionString.endsWith',\r\n    defaultMessage: 'ends with',\r\n  },\r\n  equals: {\r\n    id: 'textFilter.filterConditionString.equals',\r\n    defaultMessage: 'equals',\r\n  },\r\n  doesNotEqual: {\r\n    id: 'textFilter.filterConditionString.doesNotEqual',\r\n    defaultMessage: 'does not equal',\r\n  },\r\n  inputValue: {\r\n    id: 'textFilter.filterCondition.inputValue',\r\n    defaultMessage: 'Filter Value',\r\n  },\r\n  addMore: {\r\n    id: 'textFilter.addition.addMore',\r\n    defaultMessage: 'Add More',\r\n  },\r\n  selectFilter: {\r\n    id: 'textFilter.selectFilter',\r\n    defaultMessage: 'Select Filter',\r\n  },\r\n});\r\n","import { Dropdown, IDropdownOption, TextField } from '@fluentui/react';\r\nimport React from 'react';\r\nimport { injectIntl } from 'react-intl';\r\nimport { FilterCondition } from '../../../@data/store/schema/enums/FilterCondition';\r\nimport { FormItem } from '../../Form';\r\nimport messages from './TextFilter.messages';\r\nimport { ITextFilterProps } from './TextFilter.types';\r\n\r\nexport const TextFilter = injectIntl(function TextFilterComponent(props: ITextFilterProps): JSX.Element {\r\n  const { formatMessage } = props.intl;\r\n  const { contains, doesNotContain, beginsWith, equals, doesNotEqual, selectFilter, inputValue } = messages;\r\n  const { condition, value, index, heading, onSelectFunc, onChangeFunc } = props;\r\n\r\n  const simpleStringFilterTypeOptions: IDropdownOption[] = [\r\n    { key: FilterCondition.Equals, text: formatMessage(equals) },\r\n    { key: FilterCondition.DoesNotEqual, text: formatMessage(doesNotEqual) },\r\n  ];\r\n\r\n  const allStringFilterTypeOptions: IDropdownOption[] = [\r\n    { key: FilterCondition.Contains, text: formatMessage(contains) },\r\n    { key: FilterCondition.DoesNotContain, text: formatMessage(doesNotContain) },\r\n    { key: FilterCondition.BeginsWith, text: formatMessage(beginsWith) },\r\n    { key: FilterCondition.Equals, text: formatMessage(equals) },\r\n    { key: FilterCondition.DoesNotEqual, text: formatMessage(doesNotEqual) },\r\n  ];\r\n\r\n  const isSimpleFilter = (name: string) => {\r\n    return name.includes('Id');\r\n  };\r\n\r\n  const optionType = isSimpleFilter(heading) ? simpleStringFilterTypeOptions : allStringFilterTypeOptions;\r\n\r\n  return (\r\n    <div>\r\n      <React.Fragment key={'activePair' + index}>\r\n        <FormItem formWidth={300}>\r\n          <Dropdown\r\n            placeholder={formatMessage(selectFilter)}\r\n            defaultSelectedKey={condition}\r\n            options={optionType}\r\n            onChange={(_, val) => {\r\n              if (val) {\r\n                onSelectFunc(heading, val, index);\r\n              }\r\n            }}\r\n          />\r\n        </FormItem>\r\n        <FormItem formWidth={300}>\r\n          <TextField\r\n            placeholder={formatMessage(inputValue)}\r\n            defaultValue={value}\r\n            onChange={(_, val) => {\r\n              onChangeFunc(heading, val || '', index);\r\n            }}\r\n          />\r\n        </FormItem>\r\n      </React.Fragment>\r\n    </div>\r\n  );\r\n});\r\n","import { defineMessages } from 'react-intl';\r\n\r\nexport default defineMessages({\r\n  contains: {\r\n    id: 'textFilter.filterConditionString.contains',\r\n    defaultMessage: 'contains',\r\n  },\r\n  doesNotContain: {\r\n    id: 'textFilter.filterConditionString.doesNotContain',\r\n    defaultMessage: 'does not contain',\r\n  },\r\n  beginsWith: {\r\n    id: 'textFilter.filterConditionString.beginsWith',\r\n    defaultMessage: 'begins with',\r\n  },\r\n  endsWith: {\r\n    id: 'textFilter.filterConditionString.endsWith',\r\n    defaultMessage: 'ends with',\r\n  },\r\n  equals: {\r\n    id: 'textFilter.filterConditionString.equals',\r\n    defaultMessage: 'equals',\r\n  },\r\n  doesNotEqual: {\r\n    id: 'textFilter.filterConditionString.doesNotEqual',\r\n    defaultMessage: 'does not equal',\r\n  },\r\n  inputValue: {\r\n    id: 'textFilter.filterCondition.inputValue',\r\n    defaultMessage: 'Filter Value',\r\n  },\r\n  addMore: {\r\n    id: 'textFilter.addition.addMore',\r\n    defaultMessage: 'Add More',\r\n  },\r\n  selectFilter: {\r\n    id: 'textFilter.selectFilter',\r\n    defaultMessage: 'Select Filter',\r\n  },\r\n});\r\n","import { mergeStyleSets } from '@fluentui/react';\r\nimport { IMultiTextFiltersClassNames } from './MultiTextFilters.types';\r\n\r\nexport const getClassNames = (): IMultiTextFiltersClassNames => {\r\n  return mergeStyleSets({\r\n    root: {},\r\n  });\r\n};\r\n","import { IDropdownOption, Link, mergeStyleSets } from '@fluentui/react';\r\nimport React from 'react';\r\nimport { FilterCondition } from '../../../../../@data/store/schema/enums/FilterCondition';\r\nimport { TextFilter } from '../../../../../components/Filters/TextFilter/TextFilter';\r\nimport { FormSection } from '../../../../../components/Form';\r\nimport { injectIntlAndObserver } from '../../../../../utils';\r\nimport { onDropdownValueChanged, onTextBoxValueChanged } from '../../@data/mutatorActions';\r\nimport { IConditionValue } from '../../@data/store/schema';\r\nimport messages from './MultiTextFilters.messages';\r\nimport { getClassNames } from './MultiTextFilters.styles';\r\nimport { IMultiTextFiltersProps } from './MultiTextFilters.types';\r\n\r\nexport const MultiTextFilters = injectIntlAndObserver<IMultiTextFiltersProps>(function MultiTextFiltersComponent(\r\n  props: IMultiTextFiltersProps\r\n): JSX.Element {\r\n  const { formatMessage } = props.intl;\r\n  const { addMore } = messages;\r\n  const { root } = mergeStyleSets(getClassNames());\r\n  const { conditions = [] } = props;\r\n\r\n  const isLastPairCompleted = (): boolean => {\r\n    const lastCondition = conditions[conditions.length - 1].condition !== undefined;\r\n    const lastValue = conditions[conditions.length - 1].value !== '';\r\n    return lastCondition && lastValue;\r\n  };\r\n\r\n  const hasElements = (): boolean => {\r\n    return conditions.some((pair: IConditionValue<string>) => {\r\n      return pair.condition && pair.value !== '';\r\n    });\r\n  };\r\n\r\n  const onSelectHandle = (heading: string, value: IDropdownOption<FilterCondition>, index: number) => {\r\n    onDropdownValueChanged(heading, value, index);\r\n  };\r\n\r\n  const onChangeHandle = (heading: string, value: string, index: number) => {\r\n    onTextBoxValueChanged(heading, value, index);\r\n  };\r\n\r\n  return (\r\n    <div className={root}>\r\n      <FormSection formWidth={300} title={props.heading} expanded={hasElements()} rightChevron>\r\n        {conditions.map((pair, index: number) => (\r\n          <React.Fragment key={index}>\r\n            <TextFilter\r\n              condition={pair.condition}\r\n              value={pair.value}\r\n              index={index}\r\n              heading={props.heading}\r\n              onSelectFunc={onSelectHandle}\r\n              onChangeFunc={onChangeHandle}\r\n            />\r\n          </React.Fragment>\r\n        ))}\r\n        <Link\r\n          onClick={() => {\r\n            return props.onAddMoreClick!(props.heading);\r\n          }}\r\n          disabled={!isLastPairCompleted()}\r\n        >\r\n          {formatMessage(addMore)}\r\n        </Link>\r\n      </FormSection>\r\n    </div>\r\n  );\r\n});\r\n","import { mergeStyleSets } from '@fluentui/react';\r\nimport React from 'react';\r\nimport { injectIntl } from 'react-intl';\r\nimport { AdSource } from '../../../../@data';\r\nimport { ListFilter } from '../../../../components/Filters/ListFilter/ListFilter';\r\nimport { IIdNamePair } from '../../../../components/MultiSelectPicker';\r\nimport { AdQualityFilterNames, IConditionValue } from '../@data/store/schema';\r\nimport { onAddRawElementToList, onDeselectAllChanged, onSelectAllChanged, onSelectChanged } from './@data/mutatorActions';\r\nimport { getClassNames } from './AdQualityFilters.styles';\r\nimport { IAdQualityFiltersProps } from './AdQualityFilters.types';\r\nimport { MultiTextFilters } from './MultiTextFilters/MultiTextFilters';\r\n\r\nexport const AdQualityFilters = injectIntl<IAdQualityFiltersProps>(function AdQualityFiltersComponent(\r\n  props: IAdQualityFiltersProps\r\n): JSX.Element | null {\r\n  const { root } = mergeStyleSets(getClassNames());\r\n  const { active } = props.filtersItems;\r\n  const adSource = props.adSource;\r\n  const { shouldShowHeadlines } = props;\r\n\r\n  const filtersToRender = {\r\n    [AdSource.Microsoft]: [\r\n      AdQualityFilterNames.AccountName,\r\n      AdQualityFilterNames.Advertiser,\r\n      AdQualityFilterNames.AdvertiserId,\r\n      AdQualityFilterNames.AdvertiserAccountId,\r\n      AdQualityFilterNames.AdId,\r\n      AdQualityFilterNames.AdTitle,\r\n      AdQualityFilterNames.AdURL,\r\n      ...(shouldShowHeadlines ? [AdQualityFilterNames.LongHeadline] : []),\r\n      ...(shouldShowHeadlines ? [AdQualityFilterNames.ShortHeadline] : []),\r\n    ],\r\n    [AdSource.Auction]: [\r\n      AdQualityFilterNames.CreativeAdId,\r\n      AdQualityFilterNames.Advertiser,\r\n      AdQualityFilterNames.AdTitle,\r\n      AdQualityFilterNames.AdProviders,\r\n      AdQualityFilterNames.Markets,\r\n    ],\r\n    [AdSource.XandrAuction]: [\r\n      AdQualityFilterNames.CreativeAdId,\r\n      AdQualityFilterNames.Advertiser,\r\n      AdQualityFilterNames.AdTitle,\r\n      AdQualityFilterNames.AdProviders,\r\n      AdQualityFilterNames.Markets,\r\n    ],\r\n  };\r\n\r\n  if (!adSource) {\r\n    return null;\r\n  }\r\n  const filters = filtersToRender[adSource] || [];\r\n\r\n  const addTempConditionPair = (heading: string): void => {\r\n    const newItem: IConditionValue<string> = { condition: undefined, value: '' };\r\n    onAddRawElementToList(heading, newItem);\r\n  };\r\n\r\n  const onSelectHandle = (heading: string, item: IIdNamePair, value: boolean) => {\r\n    onSelectChanged(heading, item, value);\r\n  };\r\n\r\n  const onSelectAllHandle = (heading: string) => {\r\n    onSelectAllChanged(heading);\r\n  };\r\n\r\n  const onDeselectAllHandle = (heading: string) => {\r\n    onDeselectAllChanged(heading);\r\n  };\r\n\r\n  if (!active) {\r\n    return null;\r\n  }\r\n\r\n  return (\r\n    <div className={root}>\r\n      {filters.map((filter: AdQualityFilterNames) => {\r\n        switch (filter) {\r\n          case AdQualityFilterNames.AccountName:\r\n            return (\r\n              <ListFilter\r\n                heading={AdQualityFilterNames.AccountName}\r\n                list={active?.[AdQualityFilterNames.AccountName]?.values}\r\n                onSelect={onSelectHandle}\r\n                onSelectAll={onSelectAllHandle}\r\n                onDeselectAll={onDeselectAllHandle}\r\n              />\r\n            );\r\n          case AdQualityFilterNames.AdProviders:\r\n            return (\r\n              <ListFilter\r\n                heading={AdQualityFilterNames.AdProviders}\r\n                list={active?.[AdQualityFilterNames.AdProviders]?.values}\r\n                onSelect={onSelectHandle}\r\n                onSelectAll={onSelectAllHandle}\r\n                onDeselectAll={onDeselectAllHandle}\r\n              />\r\n            );\r\n          case AdQualityFilterNames.Markets:\r\n            return (\r\n              <ListFilter\r\n                heading={AdQualityFilterNames.Markets}\r\n                list={active?.Markets?.values}\r\n                onSelect={onSelectHandle}\r\n                onSelectAll={onSelectAllHandle}\r\n                onDeselectAll={onDeselectAllHandle}\r\n              />\r\n            );\r\n          default:\r\n            return <MultiTextFilters heading={filter} conditions={active?.[filter]?.conditions} onAddMoreClick={addTempConditionPair} />;\r\n        }\r\n      })}\r\n    </div>\r\n  );\r\n});\r\n","import { mergeStyleSets } from '@fluentui/react';\r\nimport { IAdQualityFiltersClassNames } from './AdQualityFilters.types';\r\n\r\nexport const getClassNames = (): IAdQualityFiltersClassNames => {\r\n  return mergeStyleSets({\r\n    root: {},\r\n  });\r\n};\r\n","import { IButtonStyles } from '@fluentui/react';\r\nimport { IPubcenterPalette, IPubcenterSpacing } from '../../../../../theme';\r\nimport { IAdCreativePageStyleProps, IAdCreativePageStyles } from './AdCreativePage.types';\r\n\r\nexport const getStyles = (props: IAdCreativePageStyleProps): IAdCreativePageStyles => {\r\n  const { theme } = props;\r\n  const spacing = theme.spacing as IPubcenterSpacing;\r\n  const palette = theme.palette as IPubcenterPalette;\r\n\r\n  return {\r\n    root: {\r\n      display: 'flex',\r\n      height: 'inherit',\r\n      flexDirection: 'column',\r\n      flex: 1,\r\n    },\r\n    adSourceField: {\r\n      display: 'flex',\r\n      flexDirection: 'row',\r\n      alignItems: 'flex-end',\r\n    },\r\n    adSourceFields: {\r\n      display: 'flex',\r\n      borderTop: '1px solid #EFF6FC',\r\n      borderBottom: '1px solid #EFF6FC',\r\n      minHeight: spacing.size96,\r\n    },\r\n    adReview: {\r\n      marginTop: spacing.size8,\r\n      display: 'flex',\r\n      flexDirection: 'column',\r\n      flex: 1,\r\n    },\r\n    filterFields: {\r\n      display: 'flex',\r\n      flexDirection: 'row',\r\n      alignItems: 'flex-end',\r\n    },\r\n    searchBoxItem: {\r\n      marginTop: '29px',\r\n      width: '466px',\r\n    },\r\n    descriptionCheckbox: {\r\n      marginTop: '4px',\r\n      float: 'right',\r\n    },\r\n    selectedClose: {\r\n      display: 'block',\r\n      height: spacing.size44,\r\n      textAlign: 'center',\r\n      lineHeight: spacing.size44,\r\n      cursor: 'pointer',\r\n    },\r\n    cancelIcon: {\r\n      marginTop: spacing.size4,\r\n      marginLeft: -spacing.size8,\r\n    },\r\n    applyButton: {\r\n      marginLeft: spacing.size8,\r\n      marginRight: spacing.size8,\r\n      marginBottom: spacing.size16,\r\n      marginTop: '29px',\r\n    },\r\n    blockAdChannelButton: {\r\n      display: 'flex',\r\n      flexDirection: 'row',\r\n    },\r\n    imageList: {\r\n      overflow: 'hidden',\r\n      fontSize: 0,\r\n      position: 'relative',\r\n    },\r\n    imageListTitle: {\r\n      textAlign: 'center',\r\n      outline: 'none',\r\n      position: 'relative',\r\n      float: 'left',\r\n      background: theme.palette.neutralLighter,\r\n      selectors: {\r\n        'focus:after': {\r\n          content: '',\r\n          position: 'absolute',\r\n          left: 2,\r\n          right: 2,\r\n          top: 2,\r\n          bottom: 2,\r\n          boxSizing: 'border-box',\r\n          border: `1px solid ${theme.palette.white}`,\r\n        },\r\n      },\r\n    },\r\n    imageListSizer: {\r\n      paddingBottom: '100%',\r\n    },\r\n    imageListPadder: {\r\n      position: 'absolute',\r\n      left: 2,\r\n      top: 2,\r\n      right: 2,\r\n      bottom: 2,\r\n    },\r\n    imageListLabel: {\r\n      background: 'rgba(0, 0, 0, 0.3)',\r\n      color: '#FFFFFF',\r\n      position: 'absolute',\r\n      padding: 10,\r\n      bottom: 0,\r\n      left: 0,\r\n      width: '100%',\r\n      fontSize: theme.fonts.small.fontSize,\r\n      boxSizing: 'border-box',\r\n    },\r\n    imageListImage: {\r\n      position: 'absolute',\r\n      top: 0,\r\n      left: 0,\r\n      width: '100%',\r\n      height: '100%',\r\n    },\r\n    adBlockPanelListingBox: {\r\n      minHeight: '200px',\r\n      alignItems: 'center',\r\n      display: 'flex',\r\n      border: 'black',\r\n      borderWidth: '1px',\r\n      borderStyle: 'solid',\r\n    },\r\n    adBlockPanelListingPaginatedBox: {\r\n      overflow: 'hidden',\r\n      minHeight: '150px',\r\n      margin: '4px',\r\n    },\r\n    adBlockPanelListingPaginatedLeftItems: {\r\n      float: 'left',\r\n      maxWidth: '70%',\r\n    },\r\n    adBlockPanelListingPaginatedRightItems: {\r\n      float: 'right',\r\n      maxWidth: '30%',\r\n    },\r\n    adBlockPanelListingLightText: {\r\n      fontWeight: 'normal',\r\n      fontSize: '80%',\r\n    },\r\n    adBlockPanelListingCenterLightText: {\r\n      fontWeight: 'normal',\r\n      fontSize: '80%',\r\n      textAlign: 'center',\r\n    },\r\n    adBlockPanelListingLoadingBox: {\r\n      display: 'block',\r\n      width: '100%',\r\n    },\r\n    adBlockPanelListingNoneBox: {\r\n      display: 'flex',\r\n      justifyContent: 'center',\r\n      width: '100%',\r\n    },\r\n    panelButton: {\r\n      display: 'flex',\r\n      selectors: {\r\n        '.ms-Button': {\r\n          marginRight: spacing.size8,\r\n        },\r\n      },\r\n    },\r\n    subComponentStyles: {\r\n      pivot: {\r\n        itemContainer: {\r\n          display: 'flex',\r\n          height: 'inherit',\r\n          flexDirection: 'column',\r\n          flex: 1,\r\n        },\r\n      },\r\n      formItem: {\r\n        root: {\r\n          marginLeft: spacing.size8,\r\n          marginRight: spacing.size8,\r\n          width: 'auto',\r\n        },\r\n      },\r\n      formSection: {\r\n        root: {\r\n          width: 'auto',\r\n        },\r\n        content: {\r\n          marginTop: '10px',\r\n        },\r\n      },\r\n      searchBox: {\r\n        root: {\r\n          marginTop: 'auto',\r\n          marginBottom: 'auto',\r\n        },\r\n      },\r\n      filterPanel: {\r\n        commands: {\r\n          background: palette.white,\r\n        },\r\n        main: {\r\n          width: spacing.size480,\r\n          position: 'absolute',\r\n        },\r\n        header: {\r\n          marginBottom: spacing.size24,\r\n        },\r\n        content: {\r\n          display: 'flex',\r\n          flexDirection: 'column',\r\n        },\r\n        footer: {\r\n          borderTopStyle: 'solid',\r\n          borderColor: theme.palette.neutralLight,\r\n          borderTopWidth: 1,\r\n          background: palette.white,\r\n        },\r\n      },\r\n    },\r\n  };\r\n};\r\n\r\nexport const iconButtonStyles: IButtonStyles = {\r\n  root: {\r\n    backgroundColor: '#C7E0F4',\r\n    marginRight: '8px',\r\n  },\r\n};\r\n","import {\r\n  Checkbox,\r\n  classNamesFunction,\r\n  ComboBox,\r\n  DatePicker,\r\n  DefaultButton,\r\n  DirectionalHint,\r\n  Dropdown,\r\n  FocusZone,\r\n  getTheme,\r\n  IColumn,\r\n  IComboBoxOption,\r\n  Icon,\r\n  IDropdownOption,\r\n  IProcessedStyleSet,\r\n  IRectangle,\r\n  Label,\r\n  Link,\r\n  List,\r\n  mergeStyles,\r\n  MessageBarType,\r\n  Panel,\r\n  PanelType,\r\n  Pivot,\r\n  PivotItem,\r\n  PrimaryButton,\r\n  SearchBox,\r\n  Spinner,\r\n  TeachingBubble,\r\n  TextField,\r\n} from '@fluentui/react';\r\nimport * as React from 'react';\r\nimport { AdSource, getAppStore, LayoutMode, LifeCycleStatus, onLayoutChanged, onNotificationChanged } from '../../../../@data';\r\nimport { FilterCondition } from '../../../../@data/store/schema/enums/FilterCondition';\r\nimport AppMessages from '../../../../App.messages';\r\nimport { DataGrid, DataGridSelectionMode, IDataGrid, IDataGridCommandBarProps } from '../../../../components/DataGrid';\r\nimport { DayPickerStrings } from '../../../../components/DateTimePicker/DateTimePicker.types';\r\nimport { FormItem, FormSection, FormState } from '../../../../components/Form';\r\nimport { FilterType } from '../../../../components/GridFilter/GridFilter.types';\r\nimport { IIdNamePair } from '../../../../components/MultiSelectPicker';\r\nimport { adProvidersToNames } from '../../../../config/adProviders';\r\nimport { adQualityLocales } from '../../../../config/locale';\r\nimport { xandrAdProvidersToNames } from '../../../../config/xandrAdProviders';\r\nimport { NO_VALUE_PLACEHOLDER } from '../../../../constants/AppConstants';\r\nimport { LOCALE_LANGUAGE_MAPPING } from '../../../../globalization';\r\nimport { DetailPage } from '../../../../layout/DetailPage/DetailPage';\r\nimport { CommandBarActions, IDataGridColumn, IFilterItem } from '../../../../layout/GridPageV2';\r\nimport { Pagination } from '../../../../layout/GridPageV2/components/Pagination';\r\nimport { CSVHelper, injectIntlWithObserver, IRouterWithIntl } from '../../../../utils';\r\nimport { isButtonPressKey } from '../../../../utils/AccessibilityUtils';\r\nimport {\r\n  onAdCreativePageInitialized,\r\n  onAdDescriptionChanged,\r\n  onAdListingPageSelection,\r\n  onBlockAdInitialized,\r\n  onBlockAdsAdPerfDataCleared,\r\n  onBlockAdsBlockDetailsChanged,\r\n  onBlockAdsBlockedImagesChanged,\r\n  onBlockAdsBlockReasonChanged,\r\n  onBlockAdsImagesChanged,\r\n  onBlockAdsItemStatusChanged,\r\n  onBlockAdsReasonLevelsChanged,\r\n  onBlockAdsSelectedBlockRequestSourceChanged,\r\n  onBlockAdsSelectedMarketChanged,\r\n  onBlockAdsSubmitted,\r\n  onBlockedAdsExportClicked,\r\n  onBlockedImagesExportClicked,\r\n  onBlockImageAdsChanged,\r\n  onBlockImagesSubmitted,\r\n  onBlockSummaryEndDateChanged,\r\n  onBlockSummaryStartDateChanged,\r\n  onFilterPanelHide,\r\n  onFilterPanelShown,\r\n  onRefreshBlockSummary,\r\n  onSAMBlockAdsItemStatusChanged,\r\n  onSAMBlockSummaryViewImagesClicked,\r\n  onTeachingBubbleEndDateStatusChanged,\r\n  onTeachingBubbleStartDateStatusChanged,\r\n} from '../@data/actions';\r\nimport {\r\n  onAdCreativeAccountChanged,\r\n  onAdCreativeBlockedMarketChanged,\r\n  onAdCreativeBlockPanelChanged,\r\n  onAdCreativeEndDateChanged,\r\n  onAdCreativeExportClicked,\r\n  onAdCreativeRefreshDataChanged,\r\n  onAdCreativeSearchBoxValueChanged,\r\n  onAdCreativeStartDateChanged,\r\n  onAdQualityPanelApplyButtonClicked,\r\n  onAdSourceChanged,\r\n} from '../@data/actions/onAdCreativeChanged';\r\nimport {\r\n  onActiveFilterValuesChanged,\r\n  onAdCreativeInitialAdProvidersChanged,\r\n  onAdCreativeInitialMarketsChanged,\r\n  onClearAll,\r\n  onDeleteTextCondition,\r\n  onListValueChanged,\r\n} from '../@data/mutatorActions';\r\nimport {\r\n  blockDatatoAdPerfMapper,\r\n  compareImages,\r\n  extractPlacement,\r\n  isAllImagesViewOnly,\r\n  isImageBlockable,\r\n  isImageBlocked,\r\n  processImagesLink,\r\n  samBlockSummaryToAdPerfMapper,\r\n  toHttpsLink,\r\n} from '../@data/services/utility/utility';\r\nimport { getInitialFilterList } from '../@data/store/adQualitySelectors';\r\nimport { IAdListingSample } from '../@data/store/schema';\r\nimport { AdPerformanceData, BlockAdsData, BlockItemType, SAMBlockSummaryData } from '../@data/store/schema/models';\r\nimport { AdPerformanceBlockData } from '../@data/store/schema/models/AdPerformanceBlockData';\r\nimport { getStore } from '../@data/store/store';\r\nimport { AdQualityFilters } from '../AdQualityFilters/AdQualityFilters';\r\nimport messages from './AdCreativePage.messages';\r\nimport { getStyles } from './AdCreativePage.styles';\r\nimport { IAdCreativePageStyleProps, IAdCreativePageStyles, IFilterPanelProps } from './AdCreativePage.types';\r\nimport noImage from './noImageAvailable.svg';\r\n\r\nconst getClassNames = classNamesFunction<IAdCreativePageStyleProps, IAdCreativePageStyles>();\r\nconst ROWS_PER_PAGE = 10000;\r\nconst MAX_ROW_HEIGHT = 200;\r\nconst DEFAULT_MARKET_ID = 1033;\r\nconst HEADLINE_ENABLE_DATE = new Date(\r\n  window.location.href.includes('pubcenternext-staging') || window.location.href.includes('next.pubcenter') ? '2024-08-20' : '2024-08-02'\r\n);\r\n\r\nexport const AdCreativePage = injectIntlWithObserver(\r\n  class AdCreativePageComponent extends React.Component<IRouterWithIntl> {\r\n    private _datagrid = React.createRef<IDataGrid>();\r\n    private _classNames: IProcessedStyleSet<IAdCreativePageStyles>;\r\n    private _columnCount: number;\r\n    private _columnWidth: number;\r\n    private _rowHeight: number;\r\n\r\n    private _filterItems: IFilterItem[] = [\r\n      { columnName: 'name', filterName: this.props.intl.formatMessage(messages.accountName), filterType: FilterType.string },\r\n    ];\r\n\r\n    public componentDidMount() {\r\n      const publisherId = getAppStore().publisher!.id;\r\n      onLayoutChanged(LayoutMode.Default);\r\n      onAdCreativePageInitialized(publisherId);\r\n    }\r\n\r\n    public render(): JSX.Element {\r\n      const { formatMessage } = this.props.intl;\r\n      const theme = getTheme();\r\n      this._classNames = getClassNames(getStyles, { theme });\r\n\r\n      return (\r\n        <Pivot\r\n          aria-label={formatMessage(messages.adReview)}\r\n          linkSize=\"large\"\r\n          styles={this._classNames.subComponentStyles.pivot}\r\n          className={this._classNames.root}\r\n          onLinkClick={(item) => {\r\n            if (item && item.props.headerText === formatMessage(messages.adReview)) {\r\n              onAdCreativeRefreshDataChanged();\r\n            } else {\r\n              if (getStore().active.selectedAdSource === AdSource.XandrAuction) {\r\n                const val: IComboBoxOption = {\r\n                  key: AdSource.Auction,\r\n                  text: formatMessage(messages.auction),\r\n                  ariaLabel: formatMessage(messages.auction),\r\n                };\r\n                onAdSourceChanged(val);\r\n              }\r\n            }\r\n          }}\r\n        >\r\n          <PivotItem headerText={formatMessage(messages.adReview)} className={this._classNames.adReview} itemKey={'adCreative'}>\r\n            {this._filterFields()}\r\n            {this._adPerfDataGrid()}\r\n            <Panel\r\n              isOpen={getStore().panelIsOpen}\r\n              type={PanelType.medium}\r\n              onDismiss={() => {\r\n                onAdCreativeBlockPanelChanged(false);\r\n                onLayoutChanged(LayoutMode.Default);\r\n              }}\r\n              closeButtonAriaLabel={formatMessage(AppMessages.close)}\r\n            >\r\n              {getStore().panelItemType === BlockItemType.Ads && this._blockAds(FormState.InPageCreate)}\r\n              {getStore().panelItemType === BlockItemType.Images && this._blockImages(FormState.InPageCreate)}\r\n            </Panel>\r\n          </PivotItem>\r\n          <PivotItem headerText={formatMessage(messages.blockSummary)} itemKey={'blockSummary'} className={this._classNames.adReview}>\r\n            {this._blockSummaryPageFields()}\r\n            {getStore().active.selectedAdSource === AdSource.Auction && this._SAMBlockSummaryDataGrid()}\r\n            {getStore().active.selectedAdSource === AdSource.Microsoft && this._blockSummaryDataGrid()}\r\n\r\n            <Panel\r\n              isOpen={getStore().panelIsOpen}\r\n              type={PanelType.medium}\r\n              onDismiss={() => {\r\n                onAdCreativeBlockPanelChanged(false);\r\n                onLayoutChanged(LayoutMode.Default);\r\n              }}\r\n              closeButtonAriaLabel={formatMessage(AppMessages.close)}\r\n            >\r\n              {getStore().panelItemType === BlockItemType.Images && this._blockImages(FormState.InPageEdit)}\r\n              {getStore().panelItemType === BlockItemType.Ads && this._blockAds(FormState.InPageEdit)}\r\n            </Panel>\r\n          </PivotItem>\r\n        </Pivot>\r\n      );\r\n    }\r\n\r\n    private _blockSummaryPageFields = (): JSX.Element => {\r\n      const { formatMessage } = this.props.intl;\r\n      const store = getStore();\r\n      const appStore = getAppStore();\r\n      const adSourceOptions: IDropdownOption[] = [\r\n        {\r\n          key: AdSource.Microsoft,\r\n          text: formatMessage(messages.microsoft),\r\n          ariaLabel: formatMessage(messages.microsoft),\r\n        },\r\n        {\r\n          key: AdSource.Auction,\r\n          text: formatMessage(messages.auction),\r\n          ariaLabel: formatMessage(messages.auction),\r\n        },\r\n      ];\r\n      return (\r\n        <>\r\n          <div className={this._classNames.adSourceField}>\r\n            <FormItem styles={this._classNames.subComponentStyles.formItem}>\r\n              <ComboBox\r\n                useComboBoxAsMenuWidth={true}\r\n                autoComplete=\"on\"\r\n                placeholder={formatMessage(messages.adSourceCombo)}\r\n                ariaLabel={formatMessage(messages.adSourceCombo)}\r\n                label={formatMessage(messages.adSourceCombo)}\r\n                options={adSourceOptions}\r\n                required={true}\r\n                onChange={(_, value) => {\r\n                  onAdSourceChanged(value);\r\n                }}\r\n                selectedKey={store.active.selectedAdSource}\r\n              />\r\n            </FormItem>\r\n          </div>\r\n          <div className={this._classNames.filterFields}>\r\n            <FormItem styles={this._classNames.subComponentStyles.formItem}>\r\n              <ComboBox\r\n                useComboBoxAsMenuWidth={true}\r\n                autoComplete=\"on\"\r\n                placeholder={formatMessage(messages.accountsCombo)}\r\n                ariaLabel={formatMessage(messages.accountsCombo)}\r\n                label={formatMessage(messages.accountsCombo)}\r\n                options={this._createDropDown(store.active.accounts)}\r\n                required={true}\r\n                onChange={(_, value) => onAdCreativeAccountChanged(value)}\r\n                selectedKey={store.active.selectedAccount}\r\n                disabled={store.active.selectedAdSource ? store.active.selectedAdSource === AdSource.Auction : false}\r\n                tabIndex={store.active.selectedAdSource && store.active.selectedAdSource === AdSource.Auction ? -1 : undefined}\r\n              />\r\n            </FormItem>\r\n            <FormItem styles={this._classNames.subComponentStyles.formItem}>\r\n              <ComboBox\r\n                useComboBoxAsMenuWidth={false}\r\n                autoComplete=\"on\"\r\n                placeholder={formatMessage(messages.marketsCombo)}\r\n                ariaLabel={formatMessage(messages.marketsCombo)}\r\n                label={formatMessage(messages.marketsCombo)}\r\n                options={this._createLocaleOptions(true)}\r\n                required={true}\r\n                selectedKey={store.active.selectedBlockedMarketId}\r\n                onChange={(_, value) => onAdCreativeBlockedMarketChanged(value)}\r\n                disabled={store.active.selectedAdSource ? store.active.selectedAdSource === AdSource.Microsoft : false}\r\n                tabIndex={store.active.selectedAdSource && store.active.selectedAdSource === AdSource.Microsoft ? -1 : undefined}\r\n              />\r\n            </FormItem>\r\n            <FormItem styles={this._classNames.subComponentStyles.formItem}>\r\n              <DatePicker\r\n                strings={DayPickerStrings}\r\n                allowTextInput={true}\r\n                placeholder={formatMessage(messages.startDatePlaceHolder)}\r\n                ariaLabel={formatMessage(messages.startDate)}\r\n                label={formatMessage(messages.startDate)}\r\n                value={store.active.blockSummaryStartDate}\r\n                onSelectDate={(value) => onBlockSummaryStartDateChanged(value!)}\r\n                maxDate={store.active.blockSummaryEndDate !== undefined ? store.active.blockSummaryEndDate : new Date(Date.now())}\r\n              />\r\n            </FormItem>\r\n            <FormItem styles={this._classNames.subComponentStyles.formItem}>\r\n              <span\r\n                className={this._classNames.selectedClose}\r\n                role=\"button\"\r\n                tabIndex={0}\r\n                onClick={() => onBlockSummaryStartDateChanged()}\r\n                onKeyDown={(ev) => {\r\n                  if (isButtonPressKey(ev.key)) {\r\n                    onBlockSummaryStartDateChanged();\r\n                  }\r\n                }}\r\n                aria-label={formatMessage(messages.clearStartDateSelAriaLabel)}\r\n              >\r\n                <Icon className={this._classNames.cancelIcon} iconName=\"Cancel\" />\r\n              </span>\r\n            </FormItem>\r\n            <FormItem styles={this._classNames.subComponentStyles.formItem}>\r\n              <DatePicker\r\n                strings={DayPickerStrings}\r\n                allowTextInput={true}\r\n                placeholder={formatMessage(messages.endDatePlaceHolder)}\r\n                ariaLabel={formatMessage(messages.endDatePlaceHolder)}\r\n                maxDate={new Date(Date.now() + 24 * 60 * 60 * 1000)}\r\n                minDate={store.active.blockSummaryStartDate}\r\n                label={formatMessage(messages.endDate)}\r\n                value={store.active.blockSummaryEndDate}\r\n                onSelectDate={(value) => onBlockSummaryEndDateChanged(value!)}\r\n              />\r\n            </FormItem>\r\n            <FormItem styles={this._classNames.subComponentStyles.formItem}>\r\n              <span\r\n                className={this._classNames.selectedClose}\r\n                role=\"button\"\r\n                tabIndex={0}\r\n                onClick={() => {\r\n                  onBlockSummaryEndDateChanged();\r\n                }}\r\n                onKeyDown={(ev) => {\r\n                  if (isButtonPressKey(ev.key)) {\r\n                    onBlockSummaryEndDateChanged();\r\n                  }\r\n                }}\r\n                aria-label={formatMessage(messages.clearEndDateSelAriaLabel)}\r\n              >\r\n                <Icon className={this._classNames.cancelIcon} iconName=\"Cancel\" />\r\n              </span>\r\n            </FormItem>\r\n            <PrimaryButton\r\n              text={formatMessage(messages.applyFilters)}\r\n              onClick={() => onRefreshBlockSummary()}\r\n              disabled={appStore.loading}\r\n              className={this._classNames.applyButton}\r\n              ariaDescription={formatMessage(messages.applyFiltersAriaDesc)}\r\n            />\r\n          </div>\r\n        </>\r\n      );\r\n    };\r\n\r\n    private _renderAdProviderOptions = (providersToNames: Object): IIdNamePair[] => {\r\n      const adSourceOptions: IDropdownOption[] = [];\r\n\r\n      Object.keys(providersToNames).forEach((adProvider) => {\r\n        // to exclude Bing/MSAN\r\n        if (adProvider !== '483' && adProvider !== '548' && adProvider !== '4') {\r\n          adSourceOptions!.push({\r\n            key: parseInt(adProvider, 10),\r\n            text: providersToNames[adProvider],\r\n            ariaLabel: providersToNames[adProvider],\r\n          });\r\n        }\r\n      });\r\n\r\n      adSourceOptions.sort((a, b) => {\r\n        const firstValue = a.text;\r\n        const secondValue = b.text;\r\n\r\n        return firstValue.toLowerCase() > secondValue.toLowerCase() ? 1 : -1;\r\n      });\r\n\r\n      const adProviders: IIdNamePair[] = [...adSourceOptions].map((item) => ({\r\n        id: parseInt(item.key.toString(), 10),\r\n        name: item.text,\r\n        isSelected: true,\r\n      }));\r\n\r\n      adSourceOptions.unshift({\r\n        key: 0,\r\n        text: 'All',\r\n        ariaLabel: 'All',\r\n      });\r\n\r\n      return adProviders;\r\n    };\r\n\r\n    private _blockSummaryDataGrid = (): JSX.Element => {\r\n      const store = getStore();\r\n      const { formatMessage } = this.props.intl;\r\n\r\n      const _gridDefaultColumns: IDataGridColumn[] = [\r\n        { columnName: 'adTitle', friendlyName: 'Ad title', isVisible: true, headerCSV: 'Ad_Title', isExportColumn: true },\r\n        { columnName: 'channelName', friendlyName: 'Channel', isVisible: true, headerCSV: 'Channel', isExportColumn: true },\r\n        { columnName: 'accountName', friendlyName: 'Account', isVisible: true, headerCSV: 'Account', isExportColumn: false },\r\n        { columnName: 'allImages', friendlyName: 'Ad images', isVisible: true, headerCSV: 'Ad_images', isExportColumn: false },\r\n        { columnName: 'advertiserName', friendlyName: 'Advertiser', isVisible: true, headerCSV: 'Advertiser', isExportColumn: true },\r\n        { columnName: 'adId', friendlyName: 'Ad id', isVisible: true, headerCSV: 'Ad_Id', isExportColumn: true },\r\n        {\r\n          columnName: 'reasonCategory',\r\n          friendlyName: 'Reason category',\r\n          isVisible: false,\r\n          headerCSV: 'Reason_Category',\r\n          isExportColumn: false,\r\n        },\r\n        {\r\n          columnName: 'blockReasonMainCategory',\r\n          friendlyName: 'Block category',\r\n          isVisible: false,\r\n          headerCSV: 'Block Category',\r\n          isExportColumn: true,\r\n        },\r\n        {\r\n          columnName: 'blockReasonSubCategory',\r\n          friendlyName: 'Sub category',\r\n          isVisible: false,\r\n          headerCSV: 'Sub Category',\r\n          isExportColumn: true,\r\n        },\r\n        {\r\n          columnName: 'reason',\r\n          friendlyName: 'Reason',\r\n          isVisible: true,\r\n          headerCSV: 'Reason',\r\n          isExportColumn: true,\r\n          exportFunction: CSVHelper.populateNull,\r\n        },\r\n        {\r\n          columnName: 'blockRequestSource',\r\n          friendlyName: 'Block request source',\r\n          isVisible: true,\r\n          headerCSV: 'Block request source',\r\n          isExportColumn: true,\r\n          exportFunction: CSVHelper.getBlockRequestSource,\r\n        },\r\n        {\r\n          columnName: 'pastRevenue',\r\n          friendlyName: 'Revenue impact',\r\n          isVisible: true,\r\n          headerCSV: 'Revenue_Impact_(7-day)',\r\n          isExportColumn: true,\r\n          exportFunction: CSVHelper.getRevenue,\r\n        },\r\n        {\r\n          columnName: 'modifiedDateTime',\r\n          friendlyName: 'Modified time (UTC)',\r\n          isVisible: true,\r\n          headerCSV: 'Modified_Date',\r\n          isExportColumn: true,\r\n          exportFunction: CSVHelper.extractDate,\r\n        },\r\n        { columnName: 'modifiedByName', friendlyName: 'Modified by', isVisible: true, headerCSV: 'Modified_By', isExportColumn: true },\r\n        {\r\n          columnName: 'isEnabled',\r\n          friendlyName: 'Blocking status',\r\n          isVisible: true,\r\n          headerCSV: 'Blocking_status',\r\n          isExportColumn: true,\r\n          exportFunction: CSVHelper.getBlockingStatus,\r\n        },\r\n      ];\r\n\r\n      const _gridImageDefaultColumns: IDataGridColumn[] = [\r\n        { columnName: 'adId', friendlyName: 'Ad Id', isVisible: false, headerCSV: 'Ad_Id', isExportColumn: true },\r\n        { columnName: 'adTitle', friendlyName: 'Ad title', isVisible: true, headerCSV: 'Ad_Title', isExportColumn: true },\r\n        { columnName: 'image', friendlyName: 'Image Url', isVisible: false, headerCSV: 'Image_Url', isExportColumn: true },\r\n        { columnName: 'adUnitId', friendlyName: 'Ad Unit Id', isVisible: false, headerCSV: 'Adunit_Id', isExportColumn: true },\r\n        {\r\n          columnName: 'blockReason',\r\n          friendlyName: 'Reason',\r\n          isVisible: true,\r\n          headerCSV: 'Reason',\r\n          isExportColumn: true,\r\n          exportFunction: CSVHelper.populateNull,\r\n        },\r\n        {\r\n          columnName: 'blockReasonComment',\r\n          friendlyName: 'Reason Comment',\r\n          isVisible: false,\r\n          headerCSV: 'Reason_Comment',\r\n          isExportColumn: true,\r\n        },\r\n        { columnName: 'reportedByName', friendlyName: 'Modified by', isVisible: true, headerCSV: 'Modified_By', isExportColumn: true },\r\n        {\r\n          columnName: 'modifiedDateTime',\r\n          friendlyName: 'Modified time (UTC)',\r\n          isVisible: true,\r\n          headerCSV: 'Modified_Date',\r\n          isExportColumn: true,\r\n          exportFunction: CSVHelper.extractDate,\r\n        },\r\n      ];\r\n      const _commandBarProps: IDataGridCommandBarProps = {\r\n        items: [\r\n          {\r\n            key: 'ExportImageBlock',\r\n            name: formatMessage(messages.exportImageBlocks),\r\n            iconProps: {\r\n              iconName: 'Export',\r\n            },\r\n            selectionModes: [DataGridSelectionMode.None, DataGridSelectionMode.Single, DataGridSelectionMode.Multiple],\r\n            onClick: () => {\r\n              onBlockedImagesExportClicked(_gridImageDefaultColumns);\r\n            },\r\n          },\r\n          {\r\n            key: 'ExportAdBlock',\r\n            name: formatMessage(messages.exportGrid),\r\n            iconProps: {\r\n              iconName: 'Export',\r\n            },\r\n            selectionModes: [DataGridSelectionMode.None, DataGridSelectionMode.Single, DataGridSelectionMode.Multiple],\r\n            onClick: () => {\r\n              onBlockedAdsExportClicked(_gridDefaultColumns);\r\n            },\r\n          },\r\n          {\r\n            key: 'Activate',\r\n            name: formatMessage(messages.enableBlocking),\r\n            iconProps: {\r\n              iconName: 'ActivateOrders',\r\n            },\r\n            selectionModes: [DataGridSelectionMode.Single],\r\n            selectionStatus: LifeCycleStatus.Inactive,\r\n            onClick: () => {\r\n              const items = this._getBlockDataSelectionItems();\r\n              if (items && items[0]) {\r\n                onBlockAdsItemStatusChanged(items[0], LifeCycleStatus.Active);\r\n              }\r\n            },\r\n          },\r\n          {\r\n            key: 'Deactivate',\r\n            name: formatMessage(messages.disableBlocking),\r\n            iconProps: {\r\n              iconName: 'DeactivateOrders',\r\n            },\r\n            onClick: () => {\r\n              const items = this._getBlockDataSelectionItems();\r\n              if (items && items[0]) {\r\n                onBlockAdsItemStatusChanged(items[0], LifeCycleStatus.Inactive);\r\n              }\r\n            },\r\n            selectionModes: [DataGridSelectionMode.Single],\r\n            selectionStatus: LifeCycleStatus.Active,\r\n          },\r\n          {\r\n            key: 'Edit',\r\n            name: formatMessage(messages.editBlockReason),\r\n            iconProps: {\r\n              iconName: 'Edit',\r\n            },\r\n            onClick: () => {\r\n              const items = this._getBlockDataSelectionItems();\r\n\r\n              if (items && items[0]) {\r\n                const mappedItems = blockDatatoAdPerfMapper(items);\r\n                onBlockAdInitialized(mappedItems);\r\n              }\r\n\r\n              onAdCreativeBlockPanelChanged(true, BlockItemType.Ads);\r\n            },\r\n            selectionModes: [DataGridSelectionMode.Single],\r\n            selectionStatus: LifeCycleStatus.Active,\r\n          },\r\n        ],\r\n      };\r\n\r\n      return (\r\n        <DataGrid\r\n          componentRef={this._datagrid}\r\n          intl={this.props.intl}\r\n          commandBarProps={_commandBarProps}\r\n          detailListProps={{\r\n            items: store.active.blockSummaryData ? store.active.blockSummaryData : [],\r\n            columns: _gridDefaultColumns,\r\n            onRenderItemColumn: (data: BlockAdsData, index: number, column: IColumn) =>\r\n              this._renderBlockSummaryItemColumn(data, index, column),\r\n          }}\r\n          sortByColumn={{\r\n            columnKeyToSortBy: 'modifiedDateTime',\r\n            isSortedDescending: true,\r\n          }}\r\n          ariaLabel={formatMessage(messages.blockSummaryMSGridAriaLabel)}\r\n          // notReadyProps={\r\n          //   !appStore.loading && store.active.blockSummaryData\r\n          //     ? store.active.blockSummaryData.length === 0\r\n          //       ? notReadyProps\r\n          //       : undefined\r\n          //     : undefined\r\n          // }\r\n        />\r\n      );\r\n    };\r\n\r\n    private _SAMBlockSummaryDataGrid = (): JSX.Element => {\r\n      const store = getStore();\r\n      const { formatMessage } = this.props.intl;\r\n\r\n      const _gridDefaultColumns: IDataGridColumn[] = [\r\n        { columnName: 'adTitle', friendlyName: 'Ad title', headerCSV: 'Ad_Title', isVisible: true, isExportColumn: true },\r\n        { columnName: 'adProvider', friendlyName: 'Ad provider', headerCSV: 'Ad_Provider', isVisible: true, isExportColumn: true },\r\n        { columnName: 'advertiser', friendlyName: 'Advertiser', headerCSV: 'Advertiser', isVisible: true, isExportColumn: true },\r\n        { columnName: 'allImages', friendlyName: 'Ad images', headerCSV: 'Ad_Images', isVisible: true, isExportColumn: false },\r\n        { columnName: 'creativeAdId', friendlyName: 'Ad id', headerCSV: 'Ad_id', isVisible: true, isExportColumn: true },\r\n        { columnName: 'blockReasonCategory', friendlyName: 'Reason', headerCSV: 'Reason_Category', isVisible: true, isExportColumn: false },\r\n        {\r\n          columnName: 'blockReasonMainCategory',\r\n          friendlyName: 'Block category',\r\n          isVisible: false,\r\n          headerCSV: 'Block Category',\r\n          isExportColumn: true,\r\n        },\r\n        {\r\n          columnName: 'blockReasonSubCategory',\r\n          friendlyName: 'Sub category',\r\n          isVisible: false,\r\n          headerCSV: 'Sub Category',\r\n          isExportColumn: true,\r\n        },\r\n        {\r\n          columnName: 'blockReasonComment',\r\n          friendlyName: 'blockReasonComment',\r\n          headerCSV: 'Reason',\r\n          isVisible: false,\r\n          isExportColumn: true,\r\n          exportFunction: CSVHelper.populateNull,\r\n        },\r\n        {\r\n          columnName: 'blockRequestSource',\r\n          friendlyName: 'Block request source',\r\n          headerCSV: 'Block request source',\r\n          isVisible: true,\r\n          isExportColumn: true,\r\n          exportFunction: CSVHelper.getBlockRequestSource,\r\n        },\r\n        { columnName: 'locale', friendlyName: 'Blocked market', headerCSV: 'Blocked_Market', isVisible: true, isExportColumn: true },\r\n        {\r\n          columnName: 'modifiedDateTime',\r\n          friendlyName: 'Modified time',\r\n          headerCSV: 'Modified_Date',\r\n          isVisible: true,\r\n          isExportColumn: true,\r\n          exportFunction: CSVHelper.extractDate,\r\n        },\r\n        { columnName: 'reportedByName', friendlyName: 'Modified by', headerCSV: 'Modified_By', isVisible: true, isExportColumn: true },\r\n        {\r\n          columnName: 'filterStatus',\r\n          friendlyName: 'Blocking status',\r\n          isVisible: true,\r\n          headerCSV: 'Blocking_status',\r\n          isExportColumn: true,\r\n        },\r\n      ];\r\n\r\n      const _commandBarProps: IDataGridCommandBarProps = {\r\n        items: [\r\n          {\r\n            key: 'ExportAdBlock',\r\n            name: formatMessage(messages.exportGrid),\r\n            iconProps: {\r\n              iconName: 'Export',\r\n            },\r\n            selectionModes: [DataGridSelectionMode.None, DataGridSelectionMode.Single, DataGridSelectionMode.Multiple],\r\n            onClick: () => {\r\n              onBlockedAdsExportClicked(_gridDefaultColumns);\r\n            },\r\n          },\r\n          {\r\n            key: 'Activate',\r\n            name: formatMessage(messages.enableBlocking),\r\n            iconProps: {\r\n              iconName: 'ActivateOrders',\r\n            },\r\n            selectionModes: [DataGridSelectionMode.Single],\r\n            selectionStatus: LifeCycleStatus.Inactive,\r\n            onClick: () => {\r\n              const items = this._getSAMBlockDataSelectionItems();\r\n              if (items && items[0]) {\r\n                onSAMBlockAdsItemStatusChanged(items[0], LifeCycleStatus.Active);\r\n              }\r\n            },\r\n          },\r\n          {\r\n            key: 'Deactivate',\r\n            name: formatMessage(messages.disableBlocking),\r\n            iconProps: {\r\n              iconName: 'DeactivateOrders',\r\n            },\r\n            onClick: () => {\r\n              const items = this._getSAMBlockDataSelectionItems();\r\n              if (items && items[0]) {\r\n                onSAMBlockAdsItemStatusChanged(items[0], LifeCycleStatus.Inactive);\r\n              }\r\n            },\r\n            selectionModes: [DataGridSelectionMode.Single],\r\n            selectionStatus: LifeCycleStatus.Active,\r\n          },\r\n          {\r\n            key: 'Edit',\r\n            name: formatMessage(messages.editBlockReason),\r\n            iconProps: {\r\n              iconName: 'Edit',\r\n            },\r\n            selectionModes: [DataGridSelectionMode.Single],\r\n            selectionStatus: LifeCycleStatus.Active,\r\n            onClick: () => {\r\n              const items = this._getSAMBlockDataSelectionItems();\r\n\r\n              if (items && items[0]) {\r\n                const mappedItems = samBlockSummaryToAdPerfMapper(items);\r\n                onBlockAdInitialized(mappedItems);\r\n              }\r\n              onAdCreativeBlockPanelChanged(true, BlockItemType.Ads);\r\n            },\r\n          },\r\n        ],\r\n      };\r\n\r\n      return (\r\n        <DataGrid\r\n          componentRef={this._datagrid}\r\n          intl={this.props.intl}\r\n          commandBarProps={_commandBarProps}\r\n          detailListProps={{\r\n            items: store.active.samBlockSummaryData ? store.active.samBlockSummaryData : [],\r\n            columns: _gridDefaultColumns,\r\n            onRenderItemColumn: (item: SAMBlockSummaryData, index: number, column: IColumn) =>\r\n              this._renderSAMBlockSummaryItemColumn(item, index, column),\r\n          }}\r\n          sortByColumn={{\r\n            columnKeyToSortBy: 'modifiedDateTime',\r\n            isSortedDescending: true,\r\n          }}\r\n          ariaLabel={formatMessage(messages.blockSummaryAuctionGridAriaLabel)}\r\n        />\r\n      );\r\n    };\r\n\r\n    private _filterFields = (): JSX.Element => {\r\n      const { formatMessage } = this.props.intl;\r\n      const store = getStore();\r\n      const appStore = getAppStore();\r\n      const adSourceOptions: IDropdownOption[] = [\r\n        {\r\n          key: AdSource.Microsoft,\r\n          text: formatMessage(messages.microsoft),\r\n          ariaLabel: formatMessage(messages.microsoft),\r\n        },\r\n        {\r\n          key: AdSource.Auction,\r\n          text: formatMessage(messages.auction),\r\n          ariaLabel: formatMessage(messages.auction),\r\n        },\r\n        {\r\n          key: AdSource.XandrAuction,\r\n          text: formatMessage(messages.xandrAuction),\r\n          ariaLabel: formatMessage(messages.xandrAuction),\r\n        },\r\n      ];\r\n\r\n      const auctionAdProviders = this._renderAdProviderOptions(adProvidersToNames);\r\n      const xandrAuctionAdProviders = this._renderAdProviderOptions(xandrAdProvidersToNames);\r\n\r\n      const auctionMarkets: IIdNamePair[] = [...this._createLocaleOptions()].map((item) => ({\r\n        id: parseInt(item.key.toString(), 10),\r\n        name: item.text,\r\n        isSelected: item.key === DEFAULT_MARKET_ID,\r\n      }));\r\n      const last3Months = new Date();\r\n      last3Months.setMonth(last3Months.getMonth() - 3);\r\n\r\n      return (\r\n        <>\r\n          <div className={this._classNames.adSourceFields}>\r\n            {\r\n              // Ad Source\r\n            }\r\n            <FormItem styles={this._classNames.subComponentStyles.formItem}>\r\n              <ComboBox\r\n                useComboBoxAsMenuWidth={true}\r\n                autoComplete=\"on\"\r\n                placeholder={formatMessage(messages.adSourceCombo)}\r\n                ariaLabel={formatMessage(messages.adSourceCombo)}\r\n                label={formatMessage(messages.adSourceCombo)}\r\n                options={adSourceOptions}\r\n                required={true}\r\n                onChange={(_, value) => {\r\n                  onAdSourceChanged(value);\r\n                  if (value !== undefined && value.text === 'Auction') {\r\n                    onAdCreativeInitialAdProvidersChanged(auctionAdProviders);\r\n                  } else if (value !== undefined && value.text === 'Xandr Auction') {\r\n                    onAdCreativeInitialAdProvidersChanged(xandrAuctionAdProviders);\r\n                  }\r\n                  onAdCreativeInitialMarketsChanged(auctionMarkets);\r\n                  onClearAll();\r\n                }}\r\n                selectedKey={store.active.selectedAdSource}\r\n              />\r\n            </FormItem>\r\n            {\r\n              // Start Date\r\n              store.active.selectedAdSource !== AdSource.XandrAuction && (\r\n                <FormItem styles={this._classNames.subComponentStyles.formItem}>\r\n                  <DatePicker\r\n                    id={'startDatePicker'}\r\n                    isRequired={true}\r\n                    strings={DayPickerStrings}\r\n                    allowTextInput={true}\r\n                    placeholder={formatMessage(messages.startDatePlaceHolder)}\r\n                    ariaLabel={formatMessage(messages.startDate)}\r\n                    label={formatMessage(messages.startDate)}\r\n                    value={store.active.startDate}\r\n                    onSelectDate={(value) => onAdCreativeStartDateChanged(value!)}\r\n                    maxDate={store.active.endDate}\r\n                    minDate={last3Months}\r\n                  />\r\n                </FormItem>\r\n              )\r\n            }\r\n            {\r\n              // End date\r\n              store.active.selectedAdSource !== AdSource.XandrAuction && (\r\n                <FormItem styles={this._classNames.subComponentStyles.formItem}>\r\n                  <DatePicker\r\n                    id={'endDatePicker'}\r\n                    isRequired={true}\r\n                    strings={DayPickerStrings}\r\n                    allowTextInput={true}\r\n                    placeholder={formatMessage(messages.endDatePlaceHolder)}\r\n                    ariaLabel={formatMessage(messages.endDatePlaceHolder)}\r\n                    maxDate={new Date(Date.now() + 24 * 60 * 60 * 1000)}\r\n                    minDate={store.active.startDate}\r\n                    label={formatMessage(messages.endDate)}\r\n                    value={store.active.endDate}\r\n                    onSelectDate={(value) => onAdCreativeEndDateChanged(value!)}\r\n                  />\r\n                </FormItem>\r\n              )\r\n            }\r\n            {\r\n              // SearchBox\r\n            }\r\n            <div className={this._classNames.searchBoxItem}>\r\n              <SearchBox\r\n                styles={this._classNames.subComponentStyles.searchBox}\r\n                placeholder={'Search'}\r\n                defaultValue={store.active.searchBoxValue}\r\n                onChanged={(value: string) => {\r\n                  onAdCreativeSearchBoxValueChanged(value);\r\n                }}\r\n                onSearch={(value: string) => {\r\n                  onAdCreativeSearchBoxValueChanged(value);\r\n                  onAdCreativeRefreshDataChanged();\r\n                }}\r\n              />\r\n\r\n              {store.active.selectedAdSource === AdSource.Microsoft && (\r\n                <Checkbox\r\n                  checked={store.adDescription}\r\n                  className={this._classNames.descriptionCheckbox}\r\n                  onChange={(_, value) => onAdDescriptionChanged(!!value)}\r\n                  label={formatMessage(messages.adDescriptionCheckboxLabel)}\r\n                  boxSide=\"end\"\r\n                />\r\n              )}\r\n            </div>\r\n\r\n            {\r\n              // Apply\r\n            }\r\n            <PrimaryButton\r\n              text={formatMessage(messages.applyFilters)}\r\n              onClick={() => {\r\n                onAdCreativeRefreshDataChanged();\r\n              }}\r\n              disabled={appStore.loading}\r\n              className={this._classNames.applyButton}\r\n              ariaDescription={formatMessage(messages.applyFiltersAriaDesc)}\r\n            />\r\n\r\n            {this._renderFilterPanel(store.filterPanel)}\r\n\r\n            {store.teachingBubbleEndDate ? (\r\n              <TeachingBubble\r\n                target={'#endDatePicker'}\r\n                calloutProps={{ directionalHint: DirectionalHint.bottomLeftEdge }}\r\n                hasSmallHeadline={true}\r\n                hasCloseIcon={true}\r\n                closeButtonAriaLabel={formatMessage(AppMessages.close)}\r\n                onDismiss={() => {\r\n                  onTeachingBubbleEndDateStatusChanged(false);\r\n                }}\r\n                headline={formatMessage(messages.queryTimeoutWarningHeaderLabel)}\r\n              >\r\n                {formatMessage(messages.queryTimeoutWarningDescriptionLabel)}\r\n              </TeachingBubble>\r\n            ) : null}\r\n\r\n            {store.teachingBubbleStartDate ? (\r\n              <TeachingBubble\r\n                target={'#startDatePicker'}\r\n                calloutProps={{ directionalHint: DirectionalHint.bottomLeftEdge }}\r\n                hasSmallHeadline={true}\r\n                hasCloseIcon={true}\r\n                closeButtonAriaLabel={formatMessage(AppMessages.close)}\r\n                onDismiss={() => {\r\n                  onTeachingBubbleStartDateStatusChanged(false);\r\n                }}\r\n                headline={formatMessage(messages.queryTimeoutWarningHeaderLabel)}\r\n              >\r\n                {formatMessage(messages.queryTimeoutWarningDescriptionLabel)}\r\n              </TeachingBubble>\r\n            ) : null}\r\n          </div>\r\n        </>\r\n      );\r\n    };\r\n\r\n    private _adPerfDataGrid = (): JSX.Element => {\r\n      const store = getStore();\r\n      const selectedAdSource = store.active.selectedAdSource;\r\n      const { formatMessage } = this.props.intl;\r\n      const _gridDefaultColumns: IDataGridColumn[] = [\r\n        {\r\n          columnName: 'status',\r\n          friendlyName: 'Status',\r\n          isVisible: selectedAdSource === AdSource.Auction || selectedAdSource === AdSource.XandrAuction,\r\n          headerCSV: 'Status',\r\n          isExportColumn: selectedAdSource === AdSource.Auction || selectedAdSource === AdSource.XandrAuction,\r\n          exportFunction: CSVHelper.getStatus,\r\n        },\r\n        {\r\n          columnName: 'adSource',\r\n          friendlyName: 'Ad provider',\r\n          isVisible: true,\r\n          headerCSV: 'Ad_Provider',\r\n          isExportColumn: selectedAdSource === AdSource.Microsoft,\r\n          exportFunction: () => '\"Microsoft\"',\r\n        },\r\n        {\r\n          columnName: 'adProvider',\r\n          friendlyName: 'Ad provider',\r\n          isVisible: false,\r\n          headerCSV: 'Ad_Provider',\r\n          isExportColumn: selectedAdSource === AdSource.Auction || selectedAdSource === AdSource.XandrAuction,\r\n          exportFunction: selectedAdSource === AdSource.Auction ? CSVHelper.getAdProvider : CSVHelper.getXandrAdProvider,\r\n        },\r\n        {\r\n          columnName: 'adId',\r\n          friendlyName: 'Ad id',\r\n          isVisible: selectedAdSource === AdSource.Microsoft,\r\n          headerCSV: 'Ad_Id',\r\n          isExportColumn: selectedAdSource === AdSource.Microsoft,\r\n        },\r\n        {\r\n          columnName: 'adDomain',\r\n          friendlyName: 'Ad domain',\r\n          isVisible: false,\r\n          headerCSV: 'Ad_Domain',\r\n          isExportColumn: false,\r\n        },\r\n        {\r\n          columnName: 'uniqueCreativeAdId',\r\n          friendlyName: 'Creative ad id',\r\n          isVisible: selectedAdSource === AdSource.Auction || selectedAdSource === AdSource.XandrAuction,\r\n          headerCSV: 'Creative_Ad_Id',\r\n          isExportColumn: selectedAdSource === AdSource.Auction || selectedAdSource === AdSource.XandrAuction,\r\n        },\r\n        { columnName: 'advertiserName', friendlyName: 'Advertiser', isVisible: true, headerCSV: 'Advertiser', isExportColumn: true },\r\n        {\r\n          columnName: 'advertiserId',\r\n          friendlyName: 'Advertiser id',\r\n          isVisible: selectedAdSource === AdSource.Microsoft,\r\n          headerCSV: 'Advertiser_customer_id',\r\n          isExportColumn: selectedAdSource === AdSource.Microsoft,\r\n        },\r\n        {\r\n          columnName: 'advertiserAccountId',\r\n          friendlyName: 'Advertiser account id',\r\n          isVisible: selectedAdSource === AdSource.Microsoft,\r\n          headerCSV: 'Advertiser_account_id',\r\n          isExportColumn: selectedAdSource === AdSource.Microsoft,\r\n        },\r\n        {\r\n          columnName: 'accountName',\r\n          friendlyName: 'Account name',\r\n          isVisible: selectedAdSource === AdSource.Microsoft && store.active.selectedAccount === -1,\r\n        },\r\n        { columnName: 'adTitle', friendlyName: 'Ad title', isVisible: true, headerCSV: 'Ad_Title', isExportColumn: true },\r\n        {\r\n          columnName: 'adURL',\r\n          friendlyName: 'Ad URL',\r\n          isVisible: selectedAdSource === AdSource.Microsoft || selectedAdSource === AdSource.XandrAuction,\r\n          headerCSV: 'Ad_Url',\r\n          isExportColumn: selectedAdSource === AdSource.Microsoft || selectedAdSource === AdSource.XandrAuction,\r\n        },\r\n        {\r\n          columnName: 'longHeadline',\r\n          friendlyName: 'Long Headline',\r\n          isVisible: selectedAdSource === AdSource.Microsoft && !!(store.active.startDate && store.active.startDate > HEADLINE_ENABLE_DATE),\r\n          headerCSV: 'Long Headline',\r\n          isExportColumn:\r\n            selectedAdSource === AdSource.Microsoft && !!(store.active.startDate && store.active.startDate > HEADLINE_ENABLE_DATE),\r\n        },\r\n        {\r\n          columnName: 'shortHeadline',\r\n          friendlyName: 'Short Headline',\r\n          isVisible: selectedAdSource === AdSource.Microsoft && !!(store.active.startDate && store.active.startDate > HEADLINE_ENABLE_DATE),\r\n          headerCSV: 'Short Headline',\r\n          isExportColumn:\r\n            selectedAdSource === AdSource.Microsoft && !!(store.active.startDate && store.active.startDate > HEADLINE_ENABLE_DATE),\r\n        },\r\n        {\r\n          columnName: 'adDestUrl',\r\n          friendlyName: 'Ad landing page',\r\n          isVisible: false,\r\n          headerCSV: 'Ad_Landing_Page',\r\n          isExportColumn: selectedAdSource === AdSource.Microsoft,\r\n        },\r\n        { columnName: 'images', friendlyName: 'Ad images', isVisible: true },\r\n        {\r\n          columnName: 'adUnitName',\r\n          friendlyName: 'Placement',\r\n          isVisible: selectedAdSource === AdSource.Microsoft || selectedAdSource === AdSource.Auction,\r\n          headerCSV: selectedAdSource === AdSource.Microsoft ? 'Ad_Unit' : 'Placement',\r\n          isExportColumn: selectedAdSource === AdSource.Microsoft || selectedAdSource === AdSource.Auction,\r\n          exportFunction: selectedAdSource === AdSource.Microsoft ? undefined : CSVHelper.getPlacement,\r\n        },\r\n        {\r\n          columnName: 'adImpressions',\r\n          friendlyName: 'Impressions',\r\n          isVisible: selectedAdSource !== AdSource.XandrAuction,\r\n          headerCSV: 'Impressions',\r\n          isExportColumn: selectedAdSource !== AdSource.XandrAuction,\r\n        },\r\n        {\r\n          columnName: 'revenue',\r\n          friendlyName: 'Revenue',\r\n          isVisible: false,\r\n          headerCSV: 'Revenue',\r\n          isExportColumn: selectedAdSource === AdSource.Microsoft,\r\n          exportFunction: CSVHelper.getRevenue,\r\n        },\r\n      ];\r\n\r\n      const _commandBarProps: IDataGridCommandBarProps = {\r\n        items: [\r\n          {\r\n            id: 'addFilterButton',\r\n            key: CommandBarActions.addFilter,\r\n            name: formatMessage(AppMessages.addFilter),\r\n            iconProps: {\r\n              iconName: 'Filter',\r\n            },\r\n            onClick: () => {\r\n              const filterPanel: IFilterPanelProps = {\r\n                titleLabel: formatMessage(AppMessages.filters),\r\n                descriptionLabel: formatMessage(AppMessages.filtersDescription),\r\n              };\r\n              onActiveFilterValuesChanged(getStore().filters.raw!);\r\n              onFilterPanelShown(filterPanel);\r\n            },\r\n            selectionModes: [DataGridSelectionMode.None, DataGridSelectionMode.Single, DataGridSelectionMode.Multiple],\r\n          },\r\n          {\r\n            key: 'ExportAdPerf',\r\n            name: formatMessage(AppMessages.download),\r\n            iconProps: {\r\n              iconName: 'Download',\r\n            },\r\n            selectionModes: [DataGridSelectionMode.None, DataGridSelectionMode.Single, DataGridSelectionMode.Multiple],\r\n            onClick: () => {\r\n              onAdCreativeExportClicked(_gridDefaultColumns);\r\n            },\r\n            ariaLabel: formatMessage(messages.exportGrid),\r\n          },\r\n          {\r\n            key: 'blockAds',\r\n            name: formatMessage(messages.blockAdsMenuButtonLabel),\r\n            iconProps: {\r\n              iconName: 'StatusCircleBlock',\r\n            },\r\n            selectionStatus: selectedAdSource === AdSource.Auction ? LifeCycleStatus.Active : undefined,\r\n            selectionModes: [DataGridSelectionMode.Single, DataGridSelectionMode.Multiple],\r\n            onClick: () => {\r\n              const items = this._getSelectionItems();\r\n              if (items && items.length > 30) {\r\n                onNotificationChanged({\r\n                  text: messages.blockErrorMessage.defaultMessage,\r\n                  messageBarType: MessageBarType.severeWarning,\r\n                });\r\n              } else {\r\n                onBlockAdsAdPerfDataCleared();\r\n                if (items) {\r\n                  onBlockAdInitialized(items);\r\n                }\r\n                onAdCreativeBlockPanelChanged(true, BlockItemType.Ads);\r\n              }\r\n            },\r\n          },\r\n        ],\r\n      };\r\n      if (selectedAdSource === AdSource.Microsoft) {\r\n        _commandBarProps.items.push({\r\n          key: 'blockImages',\r\n          name: formatMessage(messages.blockImagesMenuButtonLabel),\r\n          iconProps: {\r\n            iconName: 'StatusCircleBlock',\r\n          },\r\n\r\n          selectionModes: [DataGridSelectionMode.Single],\r\n          onClick: () => {\r\n            const items = this._getSelectionItems();\r\n\r\n            if (items) {\r\n              onBlockAdInitialized(items, true);\r\n            }\r\n\r\n            onAdCreativeBlockPanelChanged(true, BlockItemType.Images);\r\n          },\r\n        });\r\n      }\r\n      return (\r\n        <>\r\n          <DataGrid\r\n            componentRef={this._datagrid}\r\n            intl={this.props.intl}\r\n            commandBarProps={_commandBarProps}\r\n            detailListProps={{\r\n              items: store.active.adPerfData ? store.active.adPerfData : [],\r\n              columns: _gridDefaultColumns,\r\n              onRenderItemColumn: (item: AdPerformanceData, index: number, column: IColumn) =>\r\n                this._renderAdCreativeItemColumn(item, index, column),\r\n            }}\r\n            // filterProps={_filterProps}\r\n            sortByColumn={{\r\n              columnKeyToSortBy: 'adImpressions',\r\n              isSortedDescending: true,\r\n            }}\r\n            ariaLabel={formatMessage(messages.adReviewGridAriaLabel)}\r\n            dataGridfilterProps={{\r\n              filterItems: this._filterItems,\r\n              onFilterMenuCalloutClose: function (): void {\r\n                throw new Error('Function not implemented.');\r\n              },\r\n              onClearAll: () => onClearAll(),\r\n              onDeleteTextCondition: (heading: string, filterCondition: FilterCondition, val: string) =>\r\n                onDeleteTextCondition(heading, filterCondition, val),\r\n              onListValueChanged: (heading: string, val: string) => onListValueChanged(heading, val),\r\n              initialFilterListValues: getInitialFilterList(),\r\n              showClearAll: true,\r\n              hideCallout: true,\r\n            }}\r\n            searchResultsVisible={true}\r\n          />\r\n        </>\r\n      );\r\n    };\r\n\r\n    private _renderFilterPanel = (filterPanel?: IFilterPanelProps): JSX.Element | null => {\r\n      if (!filterPanel) {\r\n        return null;\r\n      }\r\n      const classNames = getClassNames(getStyles, { theme: getTheme() });\r\n      const store = getStore();\r\n      const appStore = getAppStore();\r\n      const selectedAdSource = store.active.selectedAdSource;\r\n\r\n      return (\r\n        <Panel\r\n          isOpen={true}\r\n          type={PanelType.smallFixedFar}\r\n          isLightDismiss\r\n          onDismiss={() => onFilterPanelHide()}\r\n          headerText={filterPanel.titleLabel}\r\n          closeButtonAriaLabel={this.props.intl.formatMessage(AppMessages.panelCloseButtonAriaDesc)}\r\n          styles={classNames.subComponentStyles.filterPanel}\r\n          isFooterAtBottom={true}\r\n          onRenderFooterContent={() => {\r\n            return (\r\n              <div className={classNames.panelButton}>\r\n                <PrimaryButton\r\n                  onClick={() => {\r\n                    onAdQualityPanelApplyButtonClicked();\r\n                  }}\r\n                  text={this.props.intl.formatMessage(AppMessages.updateFilters)}\r\n                  ariaDescription={this.props.intl.formatMessage(messages.filterPanelApplyButtonAriaDesc)}\r\n                  disabled={appStore.loading}\r\n                />\r\n                <DefaultButton onClick={() => onFilterPanelHide()} text={this.props.intl.formatMessage(AppMessages.cancel)} />\r\n              </div>\r\n            );\r\n          }}\r\n        >\r\n          <AdQualityFilters\r\n            adSource={selectedAdSource}\r\n            listFilters={store.active.accounts}\r\n            filtersItems={store.filters}\r\n            shouldShowHeadlines={\r\n              selectedAdSource === AdSource.Microsoft && !!(store.active.startDate && store.active.startDate > HEADLINE_ENABLE_DATE)\r\n            }\r\n          />\r\n        </Panel>\r\n      );\r\n    };\r\n\r\n    private _blockImages = (mode: FormState): JSX.Element => {\r\n      const { formatMessage } = this.props.intl;\r\n      const store = getStore();\r\n      const reasonCategory: IDropdownOption[] = [\r\n        {\r\n          key: formatMessage(messages.imageNotRelevant),\r\n          text: formatMessage(messages.imageNotRelevant),\r\n          ariaLabel: formatMessage(messages.imageNotRelevant),\r\n        },\r\n        {\r\n          key: formatMessage(messages.lowQualityImage),\r\n          text: formatMessage(messages.lowQualityImage),\r\n          ariaLabel: formatMessage(messages.lowQualityImage),\r\n        },\r\n        {\r\n          key: formatMessage(messages.offensiveImage),\r\n          text: formatMessage(messages.offensiveImage),\r\n          ariaLabel: formatMessage(messages.offensiveImage),\r\n        },\r\n        {\r\n          key: formatMessage(messages.policyIssue),\r\n          text: formatMessage(messages.policyIssue),\r\n          ariaLabel: formatMessage(messages.policyIssue),\r\n        },\r\n      ];\r\n      const isViewOnly = isAllImagesViewOnly(\r\n        store.blockAdsPage.adPerfBlockAdsData[0].images ? store.blockAdsPage.adPerfBlockAdsData[0].images : undefined,\r\n        store.blockAdsPage.adPerfBlockAdsData[0].adType,\r\n        store.blockAdsPage.adPerfBlockAdsData[0].adSource\r\n      );\r\n      return (\r\n        <DetailPage\r\n          titleLabel={\r\n            mode === FormState.InPageCreate && !isViewOnly ? formatMessage(messages.blockImages) : formatMessage(messages.viewImages)\r\n          }\r\n          helpId={'pop_PCv4_blockAd'}\r\n          submitLabel={\r\n            mode === FormState.InPageCreate && !isViewOnly ? formatMessage(messages.blockImages) : formatMessage(messages.viewImages)\r\n          }\r\n          onSubmit={() => {\r\n            onBlockImagesSubmitted();\r\n          }}\r\n          onCancel={() => {\r\n            onAdCreativeBlockPanelChanged(false);\r\n            onLayoutChanged(LayoutMode.Default);\r\n          }}\r\n          saving={getAppStore().saving}\r\n          pageMode={mode}\r\n          hideSubmitButton={mode !== FormState.InPageCreate || isViewOnly}\r\n        >\r\n          {isViewOnly && <div>{formatMessage(messages.viewImagesDescription)}</div>}\r\n          <FocusZone>\r\n            <List\r\n              className={this._classNames.imageList}\r\n              items={store.blockAdsPage.adPerfBlockAdsData[0].images ? store.blockAdsPage.adPerfBlockAdsData[0].images : [noImage]}\r\n              renderedWindowsAhead={4}\r\n              getItemCountForPage={this._getItemCountForPage}\r\n              getPageHeight={this._getPageHeight}\r\n              onRenderCell={this._onRenderImage}\r\n            />\r\n          </FocusZone>\r\n          {!isViewOnly && (\r\n            <>\r\n              <FormItem>\r\n                <Dropdown\r\n                  label={formatMessage(messages.blockReason)}\r\n                  ariaLabel={formatMessage(messages.blockReason)}\r\n                  options={reasonCategory}\r\n                  required={true}\r\n                  errorMessage={store.errors.blockReason}\r\n                  onChange={(_, value) => onBlockAdsBlockReasonChanged(value!)}\r\n                />\r\n              </FormItem>\r\n              <FormItem formWidth={440}>\r\n                <TextField\r\n                  multiline\r\n                  autoAdjustHeight\r\n                  label={formatMessage(messages.additionalDetials)}\r\n                  ariaLabel={formatMessage(messages.additionalDetials)}\r\n                  errorMessage={store.errors.blockDetails || store.errors.blockedImages}\r\n                  onChange={(_, value) => onBlockAdsBlockDetailsChanged(value)}\r\n                />\r\n              </FormItem>\r\n            </>\r\n          )}\r\n        </DetailPage>\r\n      );\r\n    };\r\n\r\n    private _getCurrentlySelectedListingPageItem(item: AdPerformanceBlockData): IAdListingSample {\r\n      // Make sure the listing data exists for the requested page. Return empty if it does not exist.\r\n      if (item.adListingsData && item.adListingsData.adListingItems) {\r\n        const listingSample =\r\n          item.adListingsData.adListingItems[\r\n            (item.adListingsData.adListingSelectedPage ? item.adListingsData.adListingSelectedPage : 1) - 1\r\n          ];\r\n        return listingSample ? listingSample : {};\r\n      }\r\n      return {};\r\n    }\r\n\r\n    private _blockAds = (mode: FormState): JSX.Element => {\r\n      const { formatMessage } = this.props.intl;\r\n      const store = getStore();\r\n\r\n      const reasonsCategoriesL1: IDropdownOption[] = [\r\n        {\r\n          key: formatMessage(messages.disallowedContent),\r\n          text: formatMessage(messages.disallowedContent),\r\n          ariaLabel: formatMessage(messages.disallowedContent),\r\n        },\r\n        {\r\n          key: formatMessage(messages.legalPrivacyAndSecurity),\r\n          text: formatMessage(messages.legalPrivacyAndSecurity),\r\n          ariaLabel: formatMessage(messages.legalPrivacyAndSecurity),\r\n        },\r\n        {\r\n          key: formatMessage(messages.mediaFormats),\r\n          text: formatMessage(messages.mediaFormats),\r\n          ariaLabel: formatMessage(messages.mediaFormats),\r\n        },\r\n        {\r\n          key: formatMessage(messages.relevanceAndQuality),\r\n          text: formatMessage(messages.relevanceAndQuality),\r\n          ariaLabel: formatMessage(messages.relevanceAndQuality),\r\n        },\r\n        {\r\n          key: formatMessage(messages.restrictedCategories),\r\n          text: formatMessage(messages.restrictedCategories),\r\n          ariaLabel: formatMessage(messages.restrictedCategories),\r\n        },\r\n        {\r\n          key: formatMessage(messages.textGuidelines),\r\n          text: formatMessage(messages.textGuidelines),\r\n          ariaLabel: formatMessage(messages.textGuidelines),\r\n        },\r\n      ];\r\n\r\n      let isGeminiAd = false;\r\n      isGeminiAd = store.blockAdsPage.adPerfBlockAdsData.some((item) => item.adProvider === 'Gemini');\r\n\r\n      const adDestUrls: string[] = [];\r\n      store.blockAdsPage.adPerfBlockAdsData.forEach((item) => {\r\n        adDestUrls.push(item.adDestUrl ? item.adDestUrl : item.adURL ? toHttpsLink(item.adURL) : '');\r\n      });\r\n\r\n      return (\r\n        <DetailPage\r\n          titleLabel={formatMessage(messages.blockAds)}\r\n          helpId={'pop_PCv4_blockAd'}\r\n          submitLabel={formatMessage(messages.blockAds)}\r\n          onSubmit={() => {\r\n            onBlockAdsSubmitted();\r\n          }}\r\n          onCancel={() => {\r\n            onAdCreativeBlockPanelChanged(false);\r\n            onLayoutChanged(LayoutMode.Default);\r\n          }}\r\n          saving={getAppStore().saving}\r\n          pageMode={mode}\r\n        >\r\n          <FormItem styles={this._classNames.subComponentStyles.formItem}>\r\n            <Label>{formatMessage(messages.AdId, { count: store.blockAdsPage.adPerfBlockAdsData.length })}</Label>\r\n            {store.blockAdsPage.adPerfBlockAdsData.map((item, index) => (\r\n              <FormSection\r\n                key={index}\r\n                expanded={true}\r\n                title={formatMessage(\r\n                  messages.auctionBlockAdIdLabel,\r\n                  item.uniqueCreativeAdId ? { uniqueCreativeAdId: item.uniqueCreativeAdId } : { uniqueCreativeAdId: item.adId }\r\n                )}\r\n                styles={this._classNames.subComponentStyles.formSection}\r\n              >\r\n                <Label>{formatMessage(messages.blockAdTitle)}</Label>\r\n                {item.adTitle ? item.adTitle : ''}\r\n\r\n                {store.active.selectedAdSource === AdSource.Auction && (\r\n                  <FormItem formWidth={440}>\r\n                    <Label>{formatMessage(messages.auctionAdSourceCombo)}</Label>\r\n                    {item.adProvider}\r\n                  </FormItem>\r\n                )}\r\n                {store.active.selectedAdSource === AdSource.Microsoft && (\r\n                  <FormItem formWidth={440}>\r\n                    <Label id=\"blockadUrlLabel\">{formatMessage(messages.blockAdURL)}</Label>\r\n                    <Link href={adDestUrls[index]} target=\"_blank\" aria-labelledby=\"blockadUrlLabel\">\r\n                      {item.adURL ? item.adURL : ''}\r\n                    </Link>\r\n                    <Label id=\"adAccountName\">{formatMessage(messages.accountName)}</Label>\r\n                    {item.accountName ? item.accountName : ''}\r\n                  </FormItem>\r\n                )}\r\n                {store.active.selectedAdSource === AdSource.Microsoft && (\r\n                  <FormItem>\r\n                    <Label>{formatMessage(messages.pastRevenue)}</Label>\r\n                    <div>{'$' + (item.revenue ? item.revenue.toFixed(2) : '0.0')}</div>\r\n                  </FormItem>\r\n                )}\r\n\r\n                {store.active.selectedAdSource === AdSource.Microsoft && (\r\n                  <FormItem formWidth={440}>\r\n                    <div className={this._classNames.adBlockPanelListingBox}>\r\n                      {item.adListingsData && item.adListingsData.adListingItems && item.adListingsData.adListingItems.length > 1 && (\r\n                        <div>\r\n                          <div className={this._classNames.adBlockPanelListingPaginatedBox}>\r\n                            <div className={this._classNames.adBlockPanelListingPaginatedLeftItems}>\r\n                              <Label>{formatMessage(messages.altAdTitleListings)}</Label>\r\n                              <div className={this._classNames.adBlockPanelListingLightText}>\r\n                                {this._getCurrentlySelectedListingPageItem(item).adTitle}\r\n                              </div>\r\n                              <Label>{formatMessage(messages.altAdUrlListings)}</Label>\r\n                              <Link\r\n                                className={this._classNames.adBlockPanelListingLightText}\r\n                                href={toHttpsLink(this._getCurrentlySelectedListingPageItem(item).adDestUrl as string)}\r\n                              >\r\n                                {this._getCurrentlySelectedListingPageItem(item).adUrl}\r\n                              </Link>\r\n                            </div>\r\n                            <div className={this._classNames.adBlockPanelListingPaginatedRightItems}>\r\n                              <Label>{formatMessage(messages.altAdImageListings)}</Label>\r\n                              <img\r\n                                src={this._getCurrentlySelectedListingPageItem(item).adImage}\r\n                                width={90}\r\n                                height={90}\r\n                                alt={noImage}\r\n                                style={{ margin: '2px' }}\r\n                              />\r\n                            </div>\r\n                          </div>\r\n                          <Pagination\r\n                            intl={this.props.intl}\r\n                            currentPageNumber={item.adListingsData ? item.adListingsData.adListingSelectedPage : 1}\r\n                            totalPageCount={\r\n                              item.adListingsData && item.adListingsData.adListingItems ? item.adListingsData.adListingItems.length : 1\r\n                            }\r\n                            onPageChange={(page) => {\r\n                              onAdListingPageSelection(page, index);\r\n                            }}\r\n                          />\r\n                        </div>\r\n                      )}\r\n                      {!item.adListingsData && (\r\n                        <div className={this._classNames.adBlockPanelListingLoadingBox}>\r\n                          <Label className={this._classNames.adBlockPanelListingCenterLightText}>\r\n                            {formatMessage(messages.loadingAltAdCreativeListings)}\r\n                          </Label>\r\n                          <Spinner />\r\n                        </div>\r\n                      )}\r\n                      {item.adListingsData &&\r\n                        !(item.adListingsData && item.adListingsData.adListingItems && item.adListingsData.adListingItems.length > 1) && (\r\n                          <div className={this._classNames.adBlockPanelListingNoneBox}>\r\n                            <Label className={this._classNames.adBlockPanelListingLightText}>\r\n                              {formatMessage(messages.noAltAdCreativeListings)}\r\n                            </Label>\r\n                          </div>\r\n                        )}\r\n                    </div>\r\n                  </FormItem>\r\n                )}\r\n              </FormSection>\r\n            ))}\r\n          </FormItem>\r\n          <FormItem>\r\n            <Dropdown\r\n              dropdownWidth={500}\r\n              label={formatMessage(messages.blockRequestSource)}\r\n              ariaLabel={formatMessage(messages.blockRequestSource)}\r\n              options={this._createBlockRequestSourcesDropdown(getStore().active.blockRequestSourceData!)}\r\n              onChange={(_, value) => {\r\n                onBlockAdsSelectedBlockRequestSourceChanged(value!);\r\n              }}\r\n              required={true}\r\n              errorMessage={store.errors.selectedMarket}\r\n            />\r\n          </FormItem>\r\n          {store.active.selectedAdSource !== AdSource.Microsoft && (\r\n            <FormItem>\r\n              <Dropdown\r\n                dropdownWidth={500}\r\n                label={formatMessage(messages.selectMarket)}\r\n                ariaLabel={formatMessage(messages.selectMarket)}\r\n                options={this._createBlockingMarketsDropdown(store.active.selectedMarket!)}\r\n                onChange={(_, value) => onBlockAdsSelectedMarketChanged(value!)}\r\n                required={true}\r\n                errorMessage={store.errors.selectedMarket}\r\n              />\r\n            </FormItem>\r\n          )}\r\n          {store.active.selectedAdSource === AdSource.Microsoft && (\r\n            <FormItem>\r\n              <Dropdown\r\n                dropdownWidth={500}\r\n                label={formatMessage(messages.selectChannel)}\r\n                ariaLabel={formatMessage(messages.selectChannel)}\r\n                options={[{ key: 'Default', text: 'Default', ariaLabel: 'Default' }]}\r\n                required={true}\r\n                disabled={true}\r\n                placeholder={'Default'}\r\n                errorMessage={store.errors.selectChannel}\r\n              />\r\n            </FormItem>\r\n          )}\r\n          <FormItem>\r\n            <Dropdown\r\n              dropdownWidth={300}\r\n              label={formatMessage(messages.blockReasonCategory)}\r\n              ariaLabel={formatMessage(messages.blockReasonCategory)}\r\n              options={reasonsCategoriesL1}\r\n              required={true}\r\n              errorMessage={store.errors.blockReason}\r\n              onChange={(_, value, index) => onBlockAdsReasonLevelsChanged(value!, formatMessage, index!)}\r\n            />\r\n          </FormItem>\r\n          {store.blockAdsPage.blockReasonL1 && (\r\n            <FormItem>\r\n              <Dropdown\r\n                dropdownWidth={300}\r\n                label={formatMessage(messages.blockReason)}\r\n                ariaLabel={formatMessage(messages.blockReason)}\r\n                options={store.blockAdsPage.blockReasonsL2 ? store.blockAdsPage.blockReasonsL2 : []}\r\n                required={true}\r\n                defaultSelectedKey={0}\r\n                errorMessage={store.errors.blockReason}\r\n                onChange={(_, value) => onBlockAdsBlockReasonChanged(value!)}\r\n              />\r\n            </FormItem>\r\n          )}\r\n          <FormItem formWidth={440}>\r\n            <TextField\r\n              multiline\r\n              autoAdjustHeight\r\n              label={formatMessage(messages.additionalDetials)}\r\n              ariaLabel={formatMessage(messages.additionalDetials)}\r\n              onChange={(_, value) => onBlockAdsBlockDetailsChanged(value)}\r\n            />\r\n          </FormItem>\r\n          {/* TODO: remove gemini-specific messaging once SAMRTB begins honoring adblocks for Gemini */}\r\n          {isGeminiAd && (\r\n            <Label>\r\n              <div style={{ color: 'red' }}>{formatMessage(messages.verizonMediaWarningLabel)}</div>\r\n            </Label>\r\n          )}\r\n        </DetailPage>\r\n      );\r\n    };\r\n\r\n    private _getSelectionItems() {\r\n      if (this._datagrid.current) {\r\n        const currentSelection = this._datagrid.current.getSelection();\r\n        const selectedIndices = currentSelection.getSelectedIndices();\r\n        const items = currentSelection.getItems();\r\n        const selectedItems: AdPerformanceData[] = [];\r\n        const sameAds = new Set();\r\n        selectedIndices.map((selectedIndex) => {\r\n          const adData = items[selectedIndex] as AdPerformanceData;\r\n\r\n          if (\r\n            adData.adId &&\r\n            adData.accountId &&\r\n            !sameAds.has(adData.adId.toString() + NO_VALUE_PLACEHOLDER + adData.accountId.toString())\r\n          ) {\r\n            selectedItems.push(items[selectedIndex] as AdPerformanceData);\r\n            sameAds.add(adData.adId.toString() + NO_VALUE_PLACEHOLDER + adData.accountId.toString());\r\n          } else if (!adData.adId && adData.uniqueCreativeAdId) {\r\n            selectedItems.push(items[selectedIndex] as AdPerformanceData);\r\n          }\r\n          return undefined;\r\n        });\r\n        return selectedItems;\r\n      }\r\n      return null;\r\n    }\r\n\r\n    private _getBlockDataSelectionItems() {\r\n      if (this._datagrid.current) {\r\n        const currentSelection = this._datagrid.current.getSelection();\r\n        const selectedIndices = currentSelection.getSelectedIndices();\r\n        const items = currentSelection.getItems();\r\n\r\n        const selectedItems: BlockAdsData[] = [];\r\n        selectedIndices.map((selectedIndex) => selectedItems.push(items[selectedIndex] as BlockAdsData));\r\n\r\n        return selectedItems;\r\n      }\r\n      return null;\r\n    }\r\n\r\n    private _getSAMBlockDataSelectionItems() {\r\n      if (this._datagrid.current) {\r\n        const currentSelection = this._datagrid.current.getSelection();\r\n        const selectedIndices = currentSelection.getSelectedIndices();\r\n        const items = currentSelection.getItems();\r\n\r\n        const selectedItems: SAMBlockSummaryData[] = [];\r\n        selectedIndices.map((selectedIndex) => selectedItems.push(items[selectedIndex] as SAMBlockSummaryData));\r\n\r\n        return selectedItems;\r\n      }\r\n      return null;\r\n    }\r\n\r\n    private _renderSAMBlockSummaryItemColumn(item: SAMBlockSummaryData, index: number, column: IColumn): JSX.Element {\r\n      // tslint:disable-next-line: no-string-literal\r\n      const imageList = item['allAdImages'] ? item['allAdImages'] : [];\r\n      const imageElements: JSX.Element[] = [];\r\n      for (let i = 0; i < Math.min(imageList.length, 2); i++) {\r\n        if (imageList[i] !== '') {\r\n          imageElements.push(\r\n            <a href={imageList[i]} target=\"_blank\" rel=\"noopener noreferrer\">\r\n              <img key={i} src={imageList[i]} width={90} height={90} alt={'Not available'} style={{ margin: '2px' }} />\r\n            </a>\r\n          );\r\n        }\r\n      }\r\n      imageElements.push(\r\n        <Link\r\n          onClick={async () => {\r\n            if (item.creativeAdId) {\r\n              onSAMBlockSummaryViewImagesClicked(item);\r\n            }\r\n          }}\r\n        >\r\n          {this.props.intl.formatMessage(messages.allImages)}\r\n        </Link>\r\n      );\r\n\r\n      // tslint:disable-next-line: no-string-literal\r\n      const reasonDetails: string = item['blockReasonComment'] ? item['blockReasonComment'] : 'null';\r\n      const fieldContent = item[column.fieldName as keyof SAMBlockSummaryData];\r\n\r\n      switch (column.key) {\r\n        case 'blockReasonCategory':\r\n          return (\r\n            <>\r\n              <div>\r\n                <b>Block Category: </b>\r\n                {item.blockReasonMainCategory}\r\n              </div>\r\n              <div>\r\n                <b>Sub Category: </b>\r\n                {item.blockReasonSubCategory}\r\n              </div>\r\n              <br />\r\n              <div>\r\n                <b>Details: </b>\r\n                {reasonDetails}\r\n              </div>\r\n            </>\r\n          );\r\n        case 'blockRequestSource':\r\n          return (\r\n            <span>\r\n              {item.blockRequestSourceId! === 0 ? 'N/A' : getStore().active.blockRequestSourceData?.get(item.blockRequestSourceId!)}\r\n            </span>\r\n          );\r\n        case 'sevenDayRevenueImpact':\r\n          return <span>{'$' + (fieldContent as number).toFixed(2)}</span>;\r\n        case 'modifiedDateTime':\r\n          return <span>{(fieldContent as string).substring(0, 10)}</span>;\r\n        case 'allImages':\r\n          return <span key={index}>{imageElements}</span>;\r\n\r\n        default:\r\n          return <span>{fieldContent}</span>;\r\n      }\r\n    }\r\n\r\n    private _renderBlockSummaryItemColumn(item: BlockAdsData, index: number, column: IColumn): JSX.Element {\r\n      // tslint:disable-next-line: no-string-literal\r\n      const imgs: string = item['allImages'] ? item['allImages'] : '';\r\n      const imageList = imgs.split('___');\r\n      const imageElements: JSX.Element[] = [];\r\n      for (let i = 0; i < imageList.length; i++) {\r\n        if (i < 2) {\r\n          if (imageList[i] !== '') {\r\n            imageElements.push(\r\n              <a href={imageList[i]} target=\"_blank\" rel=\"noopener noreferrer\">\r\n                <img key={i} src={imageList[i]} width={90} height={90} alt={'Not available'} style={{ margin: '2px' }} />\r\n              </a>\r\n            );\r\n          }\r\n        } else {\r\n          imageElements.push(\r\n            <Link\r\n              key={i}\r\n              onClick={() => {\r\n                onAdCreativeBlockPanelChanged(true, BlockItemType.Images);\r\n                onBlockImageAdsChanged([{ apiPath: item.apiPath, className: item.className, blockedImages: [], adId: item.adId }]);\r\n                onBlockAdsImagesChanged(imageList, 0, false);\r\n              }}\r\n            >\r\n              {this.props.intl.formatMessage(messages.moreImages, { imageListLength: imageList.length - i })}\r\n            </Link>\r\n          );\r\n          break;\r\n        }\r\n      }\r\n\r\n      // tslint:disable-next-line: no-string-literal\r\n      const reasonDetails: string = item['reason'] ? item['reason'] : 'null';\r\n\r\n      // tslint:disable-next-line: no-string-literal\r\n      const isEnabled: string = item['isEnabled'] === true ? 'Applied' : 'Disabled';\r\n\r\n      const fieldContent = item[column.fieldName as keyof BlockAdsData];\r\n\r\n      switch (column.key) {\r\n        case 'reason':\r\n          return (\r\n            <>\r\n              <div>\r\n                <b>Block Category: </b>\r\n                {item.blockReasonMainCategory}\r\n              </div>\r\n              <div>\r\n                <b>Sub Category: </b>\r\n                {item.blockReasonSubCategory}\r\n              </div>\r\n              <br />\r\n              <div>\r\n                <b>Details: </b>\r\n                {reasonDetails}\r\n              </div>\r\n            </>\r\n          );\r\n        case 'blockRequestSource':\r\n          return (\r\n            <span>\r\n              {item.blockRequestSourceId! === 0 ? 'N/A' : getStore().active.blockRequestSourceData?.get(item.blockRequestSourceId!)}\r\n            </span>\r\n          );\r\n        case 'isEnabled':\r\n          return <span key={index}>{isEnabled}</span>;\r\n        case 'pastRevenue':\r\n          return <span>{'$' + (fieldContent as number).toFixed(2)}</span>;\r\n        case 'modifiedDateTime':\r\n          return <span>{(fieldContent as string).substring(0, 10)}</span>;\r\n        case 'allImages':\r\n          return <span key={index}>{imageElements}</span>;\r\n\r\n        default:\r\n          return <span>{fieldContent}</span>;\r\n      }\r\n    }\r\n\r\n    private _renderAdCreativeItemColumn(item: AdPerformanceData, index: number, column: IColumn): JSX.Element {\r\n      // const blockedImagesContext = getStore().blockedAdsContext!.mapAdIdImages!;\r\n      // tslint:disable-next-line: no-string-literal\r\n      const isAuctionData = item['uniqueCreativeAdId'] !== undefined && item['uniqueCreativeAdId'] !== '';\r\n      // tslint:disable-next-line: no-string-literal\r\n      const imgs: string[] = item['images'] ? item['images'] : [];\r\n      const imageList = processImagesLink(imgs, noImage, isAuctionData);\r\n      const imageElements: JSX.Element[] = [];\r\n      for (let i = 0; i < imageList.length; i++) {\r\n        if (i < 2) {\r\n          let isBlocked = false;\r\n\r\n          const imageReportDataTuple = { adId: item.adId, imageUrl: imageList[i] };\r\n          if (\r\n            (item.blockedAdIdImages && item.blockedAdIdImages.includes(JSON.stringify(imageReportDataTuple))) ||\r\n            (!isAuctionData && item.blockedImages && compareImages(item.blockedImages, imageList[i]))\r\n          ) {\r\n            isBlocked = true;\r\n          }\r\n\r\n          imageElements.push(\r\n            <span key={'spanOuter' + i}>\r\n              <div\r\n                key={'divOuter' + i}\r\n                className={mergeStyles({\r\n                  position: 'absolute',\r\n                  top: i * 98 + 0,\r\n                  left: 0,\r\n                  width: '90px',\r\n                  height: '90px',\r\n                  marginLeft: '14px',\r\n                  marginTop: '12px',\r\n                  borderRadius: 4,\r\n                  backgroundColor: 'rgba(92, 86, 86, 0.534)',\r\n                })}\r\n                style={{ display: isBlocked ? 'block' : 'none' }}\r\n              >\r\n                <div\r\n                  key={'blockedtext' + i}\r\n                  className={mergeStyles({\r\n                    color: 'white',\r\n                    marginTop: '37px',\r\n                    marginLeft: '22px',\r\n                  })}\r\n                  style={{ display: isBlocked ? 'block' : 'none' }}\r\n                >\r\n                  BLOCKED\r\n                </div>\r\n              </div>\r\n              <a href={imageList[i]} target=\"_blank\" rel=\"noopener noreferrer\">\r\n                <img\r\n                  key={'AdCreativeImageCompressed' + i}\r\n                  src={imageList[i]}\r\n                  width={90}\r\n                  height={90}\r\n                  alt={noImage}\r\n                  style={{ margin: '2px' }}\r\n                />\r\n              </a>\r\n            </span>\r\n          );\r\n        } else {\r\n          imageElements.push(\r\n            <Link\r\n              key={i}\r\n              onClick={() => {\r\n                onAdCreativeBlockPanelChanged(true, BlockItemType.Images);\r\n                onBlockImageAdsChanged([item], isAuctionData);\r\n                onBlockAdsImagesChanged(item.images, 0, true, isAuctionData);\r\n              }}\r\n            >\r\n              {this.props.intl.formatMessage(messages.moreImages, { imageListLength: imageList.length - i })}\r\n            </Link>\r\n          );\r\n          break;\r\n        }\r\n      }\r\n\r\n      // tslint:disable-next-line: no-string-literal\r\n      let adProvider = '',\r\n        placement = '';\r\n      const adProviderEnum = item['adProvider'];\r\n      if (adProviderEnum && getStore().active.selectedAdSource === AdSource.Auction) {\r\n        adProvider = adProvidersToNames[adProviderEnum];\r\n        placement = extractPlacement(item);\r\n      } else if (adProviderEnum && getStore().active.selectedAdSource === AdSource.XandrAuction) {\r\n        adProvider = xandrAdProvidersToNames[adProviderEnum];\r\n        placement = item['locale'];\r\n      } else {\r\n        adProvider = 'Microsoft';\r\n        placement = item['adUnitName']!;\r\n      }\r\n      const fieldContent = item[column.fieldName as keyof AdPerformanceData];\r\n      // tslint:disable-next-line: no-string-literal\r\n      const adUrl = item['adURL'] ? item['adURL'] : '';\r\n      // tslint:disable-next-line: no-string-literal\r\n      const destUrl = item['adDestUrl'] ? item['adDestUrl'] : item['adURL'] ? item['adURL'] : '';\r\n      // tslint:disable-next-line: no-string-literal\r\n      const status = item['status'] && item['status'] === LifeCycleStatus.Inactive ? 'BLOCKED' : '';\r\n      switch (column.key) {\r\n        case 'status':\r\n          return (\r\n            <span\r\n              className={mergeStyles({\r\n                color: 'red',\r\n                width: '25px',\r\n              })}\r\n            >\r\n              {status}\r\n            </span>\r\n          );\r\n        case 'adURL':\r\n          // To Do: update it with destination Url\r\n          return (\r\n            <Link href={toHttpsLink(destUrl as string)} target=\"_blank\">\r\n              {(adUrl as string).substring(0, 80)}\r\n            </Link>\r\n          );\r\n        case 'images':\r\n          return <span key={index}>{imageElements}</span>;\r\n        case 'adSource':\r\n          return <span>{adProvider}</span>;\r\n        case 'adUnitName':\r\n          return (\r\n            <span\r\n            // className={mergeStyles({\r\n            //   display: 'inline-block',\r\n            //   width: '10em',\r\n            //   overflow: 'hidden',\r\n            //   textOverflow: 'ellipsis',\r\n            // })}\r\n            >\r\n              {placement}\r\n            </span>\r\n          );\r\n        case 'revenue':\r\n          return <span>{'$' + Math.round((fieldContent as number) * 100) / 100}</span>;\r\n        default:\r\n          return <span>{fieldContent}</span>;\r\n      }\r\n    }\r\n\r\n    private _getItemCountForPage = (itemIndex: number, surfaceRect: IRectangle): number => {\r\n      if (itemIndex === 0) {\r\n        this._columnCount = Math.ceil(surfaceRect.width / MAX_ROW_HEIGHT);\r\n        this._columnWidth = Math.floor(surfaceRect.width / this._columnCount);\r\n        this._rowHeight = this._columnWidth;\r\n      }\r\n\r\n      return this._columnCount * ROWS_PER_PAGE;\r\n    };\r\n    private _getPageHeight = (): number => {\r\n      return this._rowHeight * ROWS_PER_PAGE;\r\n    };\r\n\r\n    private _onRenderImage = (item: string, index: number): JSX.Element => {\r\n      const store = getStore();\r\n      return (\r\n        <div\r\n          className={this._classNames.imageListTitle}\r\n          data-is-focusable={true}\r\n          style={{\r\n            width: 100 / this._columnCount + '%',\r\n          }}\r\n        >\r\n          <div className={this._classNames.imageListSizer}>\r\n            <div className={this._classNames.imageListPadder}>\r\n              <a href={item} target=\"_blank\" rel=\"noopener noreferrer\">\r\n                <img src={item} alt={noImage} className={this._classNames.imageListImage} />\r\n              </a>\r\n              {!isImageBlockable(\r\n                item,\r\n                store.blockAdsPage.adPerfBlockAdsData[0].adType,\r\n                store.blockAdsPage.adPerfBlockAdsData[0].adSource\r\n              ) && (\r\n                <span className={this._classNames.imageListLabel}>\r\n                  {this.props.intl.formatMessage(messages.viewOnlyImageLabel, { itemNumber: index + 1 })}\r\n                </span>\r\n              )}\r\n              {isImageBlocked(\r\n                item,\r\n                store.blockAdsPage.adPerfBlockAdsData[0].adId!,\r\n                store.blockedImagesContext,\r\n                store.blockedAdsContext\r\n              ) && <span className={this._classNames.imageListLabel}>{this.props.intl.formatMessage(messages.blockedLabel)}</span>}\r\n              {isImageBlockable(item, store.blockAdsPage.adPerfBlockAdsData[0].adType, store.blockAdsPage.adPerfBlockAdsData[0].adSource) &&\r\n                !isImageBlocked(\r\n                  item,\r\n                  store.blockAdsPage.adPerfBlockAdsData[0].adId!,\r\n                  store.blockedImagesContext,\r\n                  store.blockedAdsContext\r\n                ) && (\r\n                  <Checkbox\r\n                    className={this._classNames.imageListLabel}\r\n                    onChange={(_, value) => onBlockAdsBlockedImagesChanged(item, value)}\r\n                  />\r\n                )}\r\n            </div>\r\n          </div>\r\n        </div>\r\n      );\r\n    };\r\n\r\n    private _createDropDown(accounts?: IIdNamePair[]): IComboBoxOption[] {\r\n      const accountList: IComboBoxOption[] = [];\r\n\r\n      if (accounts) {\r\n        accounts.forEach((account) => {\r\n          accountList!.push({\r\n            key: account.id,\r\n            text: account.name,\r\n            ariaLabel: account.name,\r\n          });\r\n        });\r\n      }\r\n      accountList.sort((a, b) => {\r\n        const firstValue = a.text;\r\n        const secondValue = b.text;\r\n\r\n        return firstValue.toLowerCase() > secondValue.toLowerCase() ? 1 : -1;\r\n      });\r\n\r\n      accountList.unshift({\r\n        key: -1,\r\n        text: 'All',\r\n        ariaLabel: 'All',\r\n      });\r\n      return accountList;\r\n    }\r\n\r\n    private _createLocaleOptions(addAll?: boolean): IComboBoxOption[] {\r\n      const availableLocales: IComboBoxOption[] = [];\r\n      const LOCALE = LOCALE_LANGUAGE_MAPPING[getAppStore().locale];\r\n\r\n      if (addAll) {\r\n        availableLocales.push({\r\n          key: 0,\r\n          text: 'All',\r\n          ariaLabel: 'All',\r\n        });\r\n      }\r\n\r\n      Object.keys(adQualityLocales).forEach((adQualityLocale) => {\r\n        availableLocales!.push({\r\n          key: parseInt(adQualityLocale, 10),\r\n          text: LOCALE[adQualityLocale],\r\n          ariaLabel: LOCALE[adQualityLocale],\r\n        });\r\n      });\r\n\r\n      availableLocales.sort((a, b) => {\r\n        const firstValue = a.text;\r\n        const secondValue = b.text;\r\n\r\n        return firstValue.toLowerCase() > secondValue.toLowerCase() ? 1 : -1;\r\n      });\r\n      return availableLocales;\r\n    }\r\n\r\n    private _createBlockingMarketsDropdown(selectedMarket: string): IComboBoxOption[] {\r\n      // TODO: re-enable market/locale-based blocking when SAMRTB begins enforcing them\r\n      // const { formatMessage } = this.props.intl;\r\n      const availableMarkets: IComboBoxOption[] = [];\r\n\r\n      availableMarkets!.push(\r\n        {\r\n          key: 'All',\r\n          text: 'All',\r\n          ariaLabel: 'All',\r\n        } /* ,\r\n        {\r\n          key: selectedMarket,\r\n          text: formatMessage(LocaleMessages[selectedMarket]),\r\n          ariaLabel: formatMessage(LocaleMessages[selectedMarket]),\r\n        }\r\n        */\r\n      );\r\n\r\n      return availableMarkets;\r\n    }\r\n\r\n    private _createBlockRequestSourcesDropdown(data: Map<number, string>): IDropdownOption[] {\r\n      const blockRequestSources: IDropdownOption[] = [];\r\n      data.forEach((blockRequestSourceName: string, blockRequestSourceId: number) => {\r\n        blockRequestSources.push({\r\n          key: blockRequestSourceId,\r\n          text: blockRequestSourceName,\r\n          ariaLabel: blockRequestSourceName,\r\n        });\r\n      });\r\n\r\n      return blockRequestSources;\r\n    }\r\n  }\r\n);\r\n","import * as React from 'react';\r\nimport { InjectedIntlProps, injectIntl } from 'react-intl';\r\nimport { Route, RouteComponentProps } from 'react-router-dom';\r\nimport { RouteName } from '../@data';\r\nimport { onCurrentRouteChanged } from '../@data/actions';\r\nimport './@data/mutators';\r\nimport './@data/orchestrators';\r\nimport { AdCreativePage } from './AdReview/AdCreativePage';\r\n\r\nexport const AdQualityPage = injectIntl(function AdQualityPageComponent(props: RouteComponentProps & InjectedIntlProps): JSX.Element {\r\n  React.useEffect(() => {\r\n    onCurrentRouteChanged(RouteName.adquality, props.intl.formatMessage);\r\n    // eslint-disable-next-line react-hooks/exhaustive-deps\r\n  }, []);\r\n\r\n  return (\r\n    <React.Fragment>\r\n      <Route exact path={`${props.match.url}`} component={AdCreativePage} />\r\n    </React.Fragment>\r\n  );\r\n});\r\n","import { useEffect, useState } from 'react';\r\n\r\nexport enum InventoryPageTabs {\r\n  Sites = 'sites',\r\n  Apps = 'apps',\r\n}\r\n\r\ntype UseEntityTypeManage = ({\r\n  isFeatureEnabled,\r\n}: {\r\n  isFeatureEnabled?: boolean;\r\n}) => {\r\n  activeSubTab: InventoryPageTabs;\r\n  setActiveSubTab: (tab: InventoryPageTabs) => void;\r\n};\r\n\r\nexport const useEntityTypeManage: UseEntityTypeManage = ({ isFeatureEnabled }) => {\r\n  const [activeSubTab, setActiveSubTab] = useState<InventoryPageTabs>(InventoryPageTabs.Sites);\r\n\r\n  useEffect(() => {\r\n    if (window.location.search.includes('view=app')) {\r\n      setActiveSubTab(InventoryPageTabs.Apps);\r\n    }\r\n  }, []);\r\n\r\n  return {\r\n    activeSubTab: isFeatureEnabled ? activeSubTab : InventoryPageTabs.Sites,\r\n    setActiveSubTab,\r\n  };\r\n};\r\n","import { defineMessages } from 'react-intl';\r\n\r\nexport default defineMessages({\r\n  sites: {\r\n    id: 'app.components.EntityTypeSwitch.sites',\r\n    defaultMessage: 'Sites',\r\n  },\r\n  apps: {\r\n    id: 'app.components.EntityTypeSwitch.apps',\r\n    defaultMessage: 'Apps',\r\n  },\r\n});\r\n","import { Divider, FluentProvider, Tab, TabList, makeStyles, webLightTheme } from '@fluentui/react-components';\r\nimport React from 'react';\r\nimport { injectIntl } from 'react-intl';\r\nimport { InventoryPageTabs } from '../../hooks/useEntityTypeManage';\r\nimport messages from './messages';\r\n\r\nconst useStyles = makeStyles({\r\n  root: {\r\n    alignItems: 'flex-start',\r\n    display: 'flex',\r\n    flexDirection: 'column',\r\n    justifyContent: 'flex-start',\r\n    rowGap: '20px',\r\n    marginLeft: '-0.8rem',\r\n  },\r\n  divider: {\r\n    width: 'calc(100% + 4rem)',\r\n    marginLeft: '-2rem',\r\n    marginBottom: '1.25rem',\r\n  },\r\n  spacer: {\r\n    marginTop: '32px',\r\n  },\r\n});\r\n\r\nconst EntityTypeSwitch = ({\r\n  intl: { formatMessage },\r\n  onTabSelect,\r\n  selectedValue,\r\n  siteTabLabel = '',\r\n  appTabLabel = '',\r\n  isFeatureEnabled = false,\r\n}) => {\r\n  const styles = useStyles();\r\n  const onTabSelected = (e, data) => onTabSelect(data.value as InventoryPageTabs);\r\n\r\n  if (!isFeatureEnabled) {\r\n    return <div className={styles.spacer} />;\r\n  }\r\n\r\n  return (\r\n    <FluentProvider theme={webLightTheme}>\r\n      <div className={styles.root}>\r\n        <TabList selectedValue={selectedValue} onTabSelect={onTabSelected}>\r\n          <Tab value={InventoryPageTabs.Sites}>{siteTabLabel || formatMessage(messages.sites)}</Tab>\r\n          <Tab value={InventoryPageTabs.Apps}>{appTabLabel || formatMessage(messages.apps)}</Tab>\r\n        </TabList>\r\n      </div>\r\n      <Divider className={styles.divider} />\r\n    </FluentProvider>\r\n  );\r\n};\r\n\r\nexport default injectIntl(EntityTypeSwitch);\r\n","import { defineMessages } from 'react-intl';\r\n\r\nexport default defineMessages({\r\n  create: {\r\n    id: 'adunit.create',\r\n    defaultMessage: 'Create Ad Unit',\r\n  },\r\n  notFound: {\r\n    id: 'adunit.notFound',\r\n    defaultMessage: 'No adunits found for this account, create one.',\r\n  },\r\n  deactivateTitle: {\r\n    id: 'adunit.deactivateTitle',\r\n    defaultMessage: 'Do you want to deactivate ad unit(s)?',\r\n  },\r\n  name: {\r\n    id: 'adunit.name',\r\n    defaultMessage: 'Ad unit name',\r\n  },\r\n  pending: {\r\n    id: 'adunit.pending',\r\n    defaultMessage: 'Pending',\r\n  },\r\n  id: {\r\n    id: 'adunit.id',\r\n    defaultMessage: 'Ad unit ID',\r\n  },\r\n  channelNames: {\r\n    id: 'adunit.channelNames',\r\n    defaultMessage: 'Channel names',\r\n  },\r\n  adUnits: {\r\n    id: 'adunit',\r\n    defaultMessage: 'Ad units',\r\n  },\r\n  accountName: {\r\n    id: 'accountName',\r\n    defaultMessage: 'Account name',\r\n  },\r\n  accountId: {\r\n    id: 'accountId',\r\n    defaultMessage: 'Account ID',\r\n  },\r\n  propertyId: {\r\n    id: 'propertyId',\r\n    defaultMessage: 'Property ID',\r\n  },\r\n  siteId: {\r\n    id: 'siteId',\r\n    defaultMessage: 'Site ID',\r\n  },\r\n  propertyUrl: {\r\n    id: 'propertyUrl',\r\n    defaultMessage: 'Website URL',\r\n  },\r\n  adUnitCreationDate: {\r\n    id: 'adUnitCreationDate',\r\n    defaultMessage: 'Creation date',\r\n  },\r\n  higherMonetization: {\r\n    id: 'higherMonetization',\r\n    defaultMessage: 'Enable mediation',\r\n  },\r\n  higherMonetizationEnabled: {\r\n    id: 'higherMonetizationEnabled',\r\n    defaultMessage: 'Enabled',\r\n  },\r\n  higherMonetizationNotSetup: {\r\n    id: 'higherMonetizationNotSetup',\r\n    defaultMessage: 'Not setup',\r\n  },\r\n  businessModel: {\r\n    id: 'businessModel',\r\n    defaultMessage: 'Business model',\r\n  },\r\n  marketClassification: {\r\n    id: 'marketClassification',\r\n    defaultMessage: 'Market Classification',\r\n  },\r\n  ownedAndOperatedCore: {\r\n    id: 'marketClassification.ownedAndOperatedCore',\r\n    defaultMessage: 'OwnedAndOperatedCore',\r\n  },\r\n  ownedAndOperated: {\r\n    id: 'marketClassification.ownedAndOperated',\r\n    defaultMessage: 'OwnedAndOperated',\r\n  },\r\n  syndicated: {\r\n    id: 'marketClassification.syndicated',\r\n    defaultMessage: 'Syndicated',\r\n  },\r\n  type: {\r\n    id: 'adUnit.type',\r\n    defaultMessage: 'Ad unit type',\r\n  },\r\n  format: {\r\n    id: 'adUnit.format',\r\n    defaultMessage: 'Ad format',\r\n  },\r\n  servingStatus: {\r\n    id: 'adUnit.servingStatus',\r\n    defaultMessage: 'Serving Status',\r\n  },\r\n  actions: {\r\n    id: 'adUnit.actions',\r\n    defaultMessage: 'Actions',\r\n  },\r\n  selectTier: {\r\n    id: 'marketClassification.selectTier',\r\n    defaultMessage: 'SelectTier',\r\n  },\r\n  sponsored: {\r\n    id: 'marketClassification.sponsored',\r\n    defaultMessage: 'Sponsored',\r\n  },\r\n  sponsoredEnhanced: {\r\n    id: 'marketClassification.sponsoredEnhanced',\r\n    defaultMessage: 'SponsoredEnhanced',\r\n  },\r\n  mediationCardNoConnectionHeader: {\r\n    id: 'mediationCard.mediationCardNoConnectionHeader',\r\n    defaultMessage: 'Enable mediation',\r\n  },\r\n  mediationCardNoConnectionDesc: {\r\n    id: 'mediationCard.mediationCardNoConnectionDesc',\r\n    defaultMessage: `Connect your ad unit to Google demand and ensure you are getting the highest bid possible for your ad inventory. We'll only serve our ads if we can deliver a higher payment compared to Google.`,\r\n  },\r\n  mediationCardNoConnectionC2A: {\r\n    id: 'mediationCard.mediationCardNoConnectionC2A',\r\n    defaultMessage: 'Set up now',\r\n  },\r\n  mediationCardConnectedHeader: {\r\n    id: 'mediationCard.mediationCardConnectedHeader',\r\n    defaultMessage: 'Mediation is enabled',\r\n  },\r\n  mediationCardConnectedDesc: {\r\n    id: 'mediationCard.mediationCardNoConnectionDesc',\r\n    defaultMessage:\r\n      'You are generating higher monetization fot this ad unit. If you would like to disable mediation, please go to click on edit mediation below',\r\n  },\r\n  mediationCardConnectedC2A: {\r\n    id: 'mediationCard.mediationCardConnectedC2A',\r\n    defaultMessage: 'Edit mediation',\r\n  },\r\n  changeName: {\r\n    id: 'mediationCard.changeName',\r\n    defaultMessage: 'Edit name',\r\n  },\r\n  changeTemplate: {\r\n    id: 'mediationCard.changeTemplate',\r\n    defaultMessage: 'Edit template',\r\n  },\r\n  zeroAdUnitsTitle: {\r\n    id: 'adunitGrid.zeroAdUnitsTitle',\r\n    defaultMessage: 'No ad units yet',\r\n  },\r\n  zeroAdUnitsDescription: {\r\n    id: 'adunitGrid.description',\r\n    defaultMessage: 'You haven’t created any ad unit yet',\r\n  },\r\n  zeroAdUnitsCallToAction: {\r\n    id: 'adunitGrid.callToAction',\r\n    defaultMessage: `Create Ad Unit`,\r\n  },\r\n  noPublisherSelected: {\r\n    id: 'adunitGrid.noPublisherSelected',\r\n    defaultMessage: 'A publisher and account isn’t selected yet. To start managing ad units, search for a publisher and choose account..',\r\n  },\r\n  prepareAdUnitsGrid: {\r\n    id: 'adunits.grid.loading.text',\r\n    defaultMessage: 'Fetching Ad Units Data...',\r\n  },\r\n  nativeAdOnboardingMsg: {\r\n    id: 'adunits.grid.tython.nativeAd.onBoarding',\r\n    defaultMessage:\r\n      \"We've streamlined the settings for native ads, making it easier to create ad units and earn with your website. {learnMore}\",\r\n  },\r\n  learnMore: {\r\n    id: 'adunits.grid.tython.nativeAd.onBoarding.learnMore',\r\n    defaultMessage: 'Learn more',\r\n  },\r\n  saveAdunitFailed: {\r\n    id: 'adunits.grid.saveAdunitFailed',\r\n    defaultMessage: 'Save ad unit failed, please see notification center for error details',\r\n  },\r\n  adUnitInvalidId: {\r\n    id: 'adunits.adUnitInvalidId',\r\n    defaultMessage: 'Adunit has invalid id {id}',\r\n  },\r\n  adunitMediationUpdateStatusFailed: {\r\n    id: 'adunits.adunitMediationUpdateStatusFailed',\r\n    defaultMessage: \"Failed to update adUnits' mediation status. Please try again!\",\r\n  },\r\n  adunitDetailsFailedToLoad: {\r\n    id: 'adunits.adunitDetailsFailedToLoad',\r\n    defaultMessage: 'Failed to load adunit details, please try again!',\r\n  },\r\n  adunitTemplateFailedToLoad: {\r\n    id: 'adunits.adunitTemplateFailedToLoad',\r\n    defaultMessage: 'Failed to load adunit template',\r\n  },\r\n  failedToLoadAdunits: {\r\n    id: 'adunits.failedToLoadAdunits',\r\n    defaultMessage: 'Failed to load adunits',\r\n  },\r\n  failedToLoadAdunitsMediationStatus: {\r\n    id: 'adunits.failedToLoadAdunitsMediationStatus',\r\n    defaultMessage: 'Failed to load adunits mediation status',\r\n  },\r\n  failedToLoadAdunit: {\r\n    id: 'adunits.failedToLoadAdunit',\r\n    defaultMessage: 'Failed to load adunit',\r\n  },\r\n  failedToFetchAdSenseAdunit: {\r\n    id: 'adunits.failedToFetchAdSenseAdunit',\r\n    defaultMessage: \"Failed to fetch connected adSense's adUnit. Please connect and try again!\",\r\n  },\r\n  noConnectionWithAdSense: {\r\n    id: 'adunits.noConnectionWithAdSense',\r\n    defaultMessage: 'No connection with AdSense. Please connect and try again!',\r\n  },\r\n  editedAdunitSuccess: {\r\n    id: 'adunit.editedAdunitSuccess',\r\n    defaultMessage: 'Edited adunit {id} success',\r\n  },\r\n  adunitNameInvalid: {\r\n    id: 'adunit.adunitNameInvalid',\r\n    defaultMessage: 'Please enter valid name',\r\n  },\r\n  createAdunitFailed: {\r\n    id: 'adunit.createAdunitFailed',\r\n    defaultMessage: 'Create ad unit failed, please try again later.',\r\n  },\r\n  createAdunitInvalidState: {\r\n    id: 'adunit.createAdunitInvalidState',\r\n    defaultMessage: 'You have arrived in an invalid state, please report.',\r\n  },\r\n});\r\n","import { defineMessages } from 'react-intl';\r\n\r\nexport default defineMessages({\r\n  title: {\r\n    id: 'adunitCallout.label',\r\n    defaultMessage: 'Update adunit name',\r\n  },\r\n});\r\n","import { getTheme, mergeStyleSets } from '@fluentui/react';\r\nimport { IPubcenterSpacing } from '../../../../../../../theme';\r\n\r\nexport interface IAdUnitCalloutClassNames {\r\n  calloutStyles: string;\r\n  textFieldContainer: string;\r\n  spinnerStyles: string;\r\n  buttonsContainer: string;\r\n}\r\n\r\nexport const getClassNames = (): IAdUnitCalloutClassNames => {\r\n  const theme = getTheme();\r\n  const spacing = theme.spacing as IPubcenterSpacing;\r\n\r\n  return mergeStyleSets({\r\n    calloutStyles: {\r\n      padding: spacing.size16\r\n    },\r\n    textFieldContainer: {\r\n      position: 'relative'\r\n    },\r\n    spinnerStyles: {\r\n        position: 'absolute',\r\n        top: spacing.size36,\r\n        right: spacing.size8,\r\n    },\r\n    buttonsContainer: {\r\n      display: 'flex',\r\n      justifyContent: 'space-between',\r\n      marginTop: spacing.size10\r\n    },\r\n  });\r\n};\r\n","import { Callout, DefaultButton, PrimaryButton, Spinner, TextField } from '@fluentui/react';\r\nimport * as React from 'react';\r\nimport { useEffect, useState } from 'react';\r\nimport { getAppStore } from '../../../../../../@data';\r\nimport AppMessages from '../../../../../../App.messages';\r\nimport { IRouterWithIntl, injectIntlAndObserver } from '../../../../../../utils';\r\nimport { getAdunitStore } from '../../../@data';\r\nimport { onAdUnitNameUpdate, onAdunitNameChanged, onFetchAdUnitName } from '../../../@data/actions';\r\nimport messages from '../../ManagePage.messages';\r\nimport callOutMessages from './AdUnitNameCallout.messages';\r\nimport { getClassNames } from './AdUnitNameCallout.styles';\r\n\r\ninterface IAdUnitCallout extends IRouterWithIntl {\r\n  visibleCallOut: number;\r\n  setVisibleCallOut: (id: number) => void;\r\n}\r\n\r\nexport const AdUnitCallout = injectIntlAndObserver(function AdUnitCalloutComponent(props: IAdUnitCallout) {\r\n  const { calloutStyles, textFieldContainer, spinnerStyles, buttonsContainer } = getClassNames();\r\n  const { intl, visibleCallOut, setVisibleCallOut } = props;\r\n  const { formatMessage } = intl;\r\n  const { publisher, account } = getAppStore();\r\n  const [isLoading, setIsLoading] = useState(false);\r\n  const [errorMessage, setErrorMessage] = useState<string>();\r\n\r\n  useEffect(() => {\r\n    if (visibleCallOut !== 0 && publisher && account) {\r\n      onFetchAdUnitName(publisher.id, account.id, visibleCallOut.toString(), setIsLoading);\r\n    }\r\n    return () => setErrorMessage('');\r\n    // eslint-disable-next-line react-hooks/exhaustive-deps\r\n  }, [visibleCallOut]);\r\n\r\n  return visibleCallOut !== 0 ? (\r\n    <Callout\r\n      ariaLabelledBy={formatMessage(callOutMessages.title)}\r\n      role=\"dialog\"\r\n      gapSpace={0}\r\n      target={`#adunitCallout-${visibleCallOut}`}\r\n      styles={{ root: calloutStyles }}\r\n      onDismiss={() => setVisibleCallOut(0)}\r\n      setInitialFocus\r\n    >\r\n      <>\r\n        <div className={textFieldContainer}>\r\n          <TextField\r\n            label={formatMessage(messages.name)}\r\n            required={true}\r\n            errorMessage={errorMessage}\r\n            value={getAdunitStore().active.name}\r\n            disabled={isLoading}\r\n            onChange={(_, value) => onAdunitNameChanged(value)}\r\n          />\r\n          {isLoading && <Spinner styles={{ root: spinnerStyles }} />}\r\n        </div>\r\n        <div className={buttonsContainer}>\r\n          <PrimaryButton\r\n            text={formatMessage(AppMessages.save)}\r\n            disabled={isLoading}\r\n            onClick={() => onAdUnitNameUpdate(formatMessage, setIsLoading, setErrorMessage, setVisibleCallOut)}\r\n          />\r\n          <DefaultButton text={formatMessage(AppMessages.cancel)} onClick={() => setVisibleCallOut(0)} />\r\n        </div>\r\n      </>\r\n    </Callout>\r\n  ) : (\r\n    <></>\r\n  );\r\n});\r\n","import { History } from 'history';\r\nimport { action } from 'satcheljs';\r\nimport { FormState } from '../../../../../../../../components/Form';\r\n\r\nexport const onScriptPageInitialized = action('onScriptPageInitialized', (publisherId: string, adunitId: string) => ({\r\n  publisherId,\r\n  adunitId,\r\n}));\r\n\r\nexport const onScriptChanged = action('onScriptChanged', (script: string | null) => ({ script }));\r\n\r\nexport const onCopyScriptIconChanged = action('onCopyScriptIconChanged', (iconName: string) => ({ iconName }));\r\n\r\nexport const onCopyCodeIconChanged = action('onCopyCodeIconChanged', (iconName: string) => ({ iconName }));\r\n\r\nexport const onScriptPageSubmitted = action('onScriptPageSubmitted', (mode: FormState, routeHistory: History, onSubmit?: () => void) => ({\r\n  mode,\r\n  routeHistory,\r\n  onSubmit,\r\n}));\r\n\r\nexport const onScriptPageFormCleared = action('onScriptPageFormCleared');\r\n","import { FormState } from './FormState';\r\n\r\nconst { Create, View, Edit, InPageCreate, InPageView, InPageEdit, MultiStepCreation, MultiStepEdit } = FormState;\r\n\r\nexport function isEditing(formState: FormState): boolean {\r\n  return [Edit, InPageEdit, MultiStepEdit].includes(formState);\r\n}\r\n\r\nexport function isCreating(formState: FormState): boolean {\r\n  return [Create, InPageCreate, MultiStepCreation].includes(formState);\r\n}\r\n\r\nexport function isViewing(formState: FormState): boolean {\r\n  return [View, InPageView].includes(formState);\r\n}\r\n\r\nexport function isInPageForm(formState: FormState): boolean {\r\n  return [InPageCreate, InPageView, InPageEdit].includes(formState);\r\n}\r\n","import { defineMessages } from 'react-intl';\r\n\r\nexport default defineMessages({\r\n  noCodeFound: {\r\n    id: 'nativeAd.scriptPage.noCodeFound',\r\n    defaultMessage: 'No code found',\r\n  },\r\n  setUpTemplate: {\r\n    id: 'nativeAd.scriptPage.setUpTemplate',\r\n    defaultMessage: 'Set up template',\r\n  },\r\n  noScriptDesc: {\r\n    id: 'nativeAd.scriptPage.noScriptDesc',\r\n    defaultMessage: `Seems like you haven't configured template for this ad unit yet, click on the button to set it up first.`,\r\n  },\r\n});\r\n","import { FontWeights, getTheme, mergeStyleSets } from '@fluentui/react';\r\nimport { IPubCenterFonts, IPubcenterSpacing } from '../../../../../../../theme';\r\nimport { INoScriptPageClassNames } from './NoScriptPage.types';\r\n\r\nexport const getClassNames = (): INoScriptPageClassNames => {\r\n  const theme = getTheme();\r\n  const spacing = theme.spacing as IPubcenterSpacing;\r\n  const fonts = theme.fonts as IPubCenterFonts;\r\n\r\n  return mergeStyleSets({\r\n    root: {\r\n      textAlign: 'center',\r\n      position: 'absolute',\r\n      top: '50%',\r\n      left: '50%',\r\n      transform: `translate(-50%, -50%)`,\r\n    },\r\n    title: {\r\n      margin: `${spacing.size16} 0`,\r\n      fontWeight: FontWeights.regular,\r\n      color: theme.palette.neutralSecondary,\r\n      fontSize: '26px',\r\n    },\r\n    description: {\r\n      marginBottom: spacing.size16,\r\n      color: theme.palette.neutralSecondary,\r\n      fontSize: fonts.size16.fontSize,\r\n      lineHeight: fonts.size16.lineHeight,\r\n    },\r\n  });\r\n};\r\n","import { DefaultButton } from '@fluentui/react';\r\nimport * as React from 'react';\r\nimport { injectIntl } from 'react-intl';\r\nimport { getAppStore } from '../../../../../../@data';\r\nimport { FormState } from '../../../../../../components/Form';\r\nimport { RouteName } from '../../../../@data';\r\nimport { createReturnUrl } from '../../../../@data/services/AdManagementService';\r\nimport NoCodeFound from '../../resources/NoCodeFound.svg';\r\nimport messages from './NoScriptPage.messages';\r\nimport { getClassNames } from './NoScriptPage.styles';\r\nimport { INoScriptPageProps } from './NoScriptPage.types';\r\n\r\nexport const NoScriptPage = injectIntl(function NoScriptPageComponent(props: INoScriptPageProps) {\r\n  const { publisher, account } = getAppStore();\r\n  const { formatMessage } = props.intl;\r\n  const { root, title, description } = getClassNames();\r\n  const setupTemplateRedirectionFromPanel = () => {\r\n    const returnUrl = createReturnUrl(RouteName.adunit, publisher?.id, account?.id, props.adunitId.toString(), FormState.MultiStepEdit, 2);\r\n    props.history.push(returnUrl);\r\n  };\r\n\r\n  const setupTemplateRedirectionInPageView = () => props.goToStep?.(2);\r\n\r\n  return (\r\n    <div className={root}>\r\n      <img src={NoCodeFound} alt={formatMessage(messages.noCodeFound)} />\r\n      <h2 className={title}>{formatMessage(messages.noCodeFound)}</h2>\r\n      <p className={description}>{formatMessage(messages.noScriptDesc)}</p>\r\n      <DefaultButton\r\n        text={formatMessage(messages.setUpTemplate)}\r\n        onClick={\r\n          props.mode === FormState.MultiStepCreation || props.mode === FormState.MultiStepEdit\r\n            ? setupTemplateRedirectionInPageView\r\n            : setupTemplateRedirectionFromPanel\r\n        }\r\n      />\r\n    </div>\r\n  );\r\n});\r\n","import { createStore } from 'satcheljs';\r\nimport { IScriptPageState } from './schema/IScriptPageState';\r\n\r\nexport const getScriptPageStore = createStore<IScriptPageState>('ScriptPageState', {\r\n  script: '',\r\n  copyScriptIcon: 'Copy',\r\n  copyCodeIcon: 'Copy',\r\n});\r\n","import { mutator } from 'satcheljs';\r\nimport { onCopyCodeIconChanged, onCopyScriptIconChanged, onScriptChanged, onScriptPageFormCleared } from '../actions/onScriptPageActions';\r\nimport { getScriptPageStore } from '../store/store';\r\n\r\nmutator(onScriptChanged, (msg) => {\r\n  getScriptPageStore().script = msg.script;\r\n});\r\n\r\nmutator(onCopyScriptIconChanged, (msg) => {\r\n  getScriptPageStore().copyScriptIcon = msg.iconName;\r\n});\r\n\r\nmutator(onCopyCodeIconChanged, (msg) => {\r\n  getScriptPageStore().copyCodeIcon = msg.iconName;\r\n});\r\n\r\nmutator(onScriptPageFormCleared, () => {\r\n  getScriptPageStore().script = '';\r\n});\r\n","import { Model } from '..';\r\n\r\nexport class AdunitServingScript extends Model {\r\n  public apiPath = undefined;\r\n  public className = 'servingScript';\r\n  public script: string;\r\n}\r\n","import { defineMessages } from 'react-intl';\r\n\r\nexport default defineMessages({\r\n  title: {\r\n    id: 'nativeAd.scriptPage.title',\r\n    defaultMessage: 'Almost there! Time to place the code',\r\n  },\r\n  tips: {\r\n    id: 'nativeAd.scriptPage.tips',\r\n    defaultMessage: `Make sure you place the ad inside your feed. You can place it in between the content of your feed, or where the feed begins or ends. However, don’t place the ad in the sidebar as this can negatively affect performance. The container you place your ad in should have variable height. Fixed height containers might result in distorted ads.`,\r\n  },\r\n  subTitle1: {\r\n    id: 'nativeAd.scriptPage.subTitle1',\r\n    defaultMessage: 'Load the following script in your header tag',\r\n  },\r\n  scriptPlacementInfo: {\r\n    id: 'nativeAd.scriptPage.scriptPlacementInfo',\r\n    defaultMessage:\r\n      'As of July 5, 2023, we launched a new version of our ad code. You will need to replace both the header script and ad code with the below if you placed them before July 5, 2023.',\r\n  },\r\n  subTitle2: {\r\n    id: 'nativeAd.scriptPage.subTitle2',\r\n    defaultMessage: 'Place the following code in your webpage where you want to render the ads.',\r\n  },\r\n  copyCodeButton: {\r\n    id: 'nativeAd.scriptPage.copyCodeButton',\r\n    defaultMessage: 'Copy code snippet',\r\n  },\r\n  copyScriptImageAlt: {\r\n    id: 'nativeAd.scriptPage.copyScriptImageAlt',\r\n    defaultMessage: 'Paste this code snippet inside head tag of your webpage.',\r\n  },\r\n  scriptCodePasteGuideline: {\r\n    id: 'nativeAd.scriptPage.scriptCodePasteGuideline',\r\n    defaultMessage: 'Click to copy script and paste it inside head tag of your webpage.',\r\n  },\r\n  copyCodeButtonDescription: {\r\n    id: 'nativeAd.scriptPage.copyCodeButtonDescription',\r\n    defaultMessage: 'Click to copy ad code and paste it in between your feed, to render in-feed ad.',\r\n  },\r\n  doneButtonLabel: {\r\n    id: 'nativeAd.scriptPage.doneButtonLabel',\r\n    defaultMessage: `I'm done`,\r\n  },\r\n  backButtonLabel: {\r\n    id: 'nativeAd.scriptPage.backButtonLabel',\r\n    defaultMessage: 'Back',\r\n  },\r\n  failedToFetchScript: {\r\n    id: 'nativeAd.scriptPage.failedToFetchScript',\r\n    defaultMessage: 'Failed to fetch script',\r\n  },\r\n  inValidStateInScriptPage: {\r\n    id: 'nativeAd.scriptPage.inValidStateScriptPage',\r\n    defaultMessage: 'You have arrived in an invalid state, please report.',\r\n  },\r\n});\r\n","import { MessageBarType } from '@fluentui/react';\r\nimport { orchestrator } from 'satcheljs';\r\nimport { AdUnit, ApiError, ApiErrorCodes, Publisher, getAppStore, getEntity, onNotificationChanged } from '../../../../../../../../@data';\r\nimport { AdunitServingScript } from '../../../../../../../../@data/store/schema/models/AdunitServingScript';\r\nimport messages from '../../ScriptPage.messages';\r\nimport { onScriptChanged, onScriptPageInitialized } from '../actions/onScriptPageActions';\r\n\r\norchestrator(onScriptPageInitialized, async (msg) => {\r\n  const publisherId = parseInt(msg.publisherId, 10);\r\n  const adunitId = parseInt(msg.adunitId, 10);\r\n  const { userContext } = getAppStore();\r\n\r\n  if (!isNaN(publisherId) && !isNaN(adunitId)) {\r\n    const publisher = new Publisher(publisherId);\r\n    const adunit = new AdUnit(adunitId);\r\n\r\n    try {\r\n      const script = (await getEntity([publisher, adunit], userContext, AdunitServingScript)).toString();\r\n      onScriptChanged(script);\r\n    } catch (e) {\r\n      const errorObj = JSON.parse((e as ApiError).message);\r\n      if (errorObj && errorObj[0].code === ApiErrorCodes.AdUnitDoesNotHaveTemplate) {\r\n        onScriptChanged(null);\r\n      } else {\r\n        onNotificationChanged({\r\n          textMessageDescriptor: messages.failedToFetchScript,\r\n          messageBarType: MessageBarType.severeWarning,\r\n        });\r\n      }\r\n    }\r\n  } else {\r\n    onNotificationChanged({\r\n      textMessageDescriptor: messages.inValidStateInScriptPage,\r\n      messageBarType: MessageBarType.severeWarning,\r\n    });\r\n  }\r\n});\r\n","import { orchestrator } from 'satcheljs';\r\nimport { getAppStore, onNavigateBack } from '../../../../../../../../@data';\r\nimport { FormState } from '../../../../../../../../components/Form';\r\nimport { RouteName } from '../../../../../../@data';\r\nimport { createReturnUrl } from '../../../../../../@data/services/AdManagementService';\r\nimport { onScriptPageFormCleared, onScriptPageSubmitted } from '../actions/onScriptPageActions';\r\n\r\norchestrator(onScriptPageSubmitted, (msg) => {\r\n  const { publisher, account } = getAppStore();\r\n\r\n  if (msg.mode !== FormState.InPageView) {\r\n    const returnUrl = createReturnUrl(RouteName.adunit, publisher!.id, account!.id);\r\n    onNavigateBack(msg.routeHistory, returnUrl);\r\n  }\r\n\r\n  onScriptPageFormCleared();\r\n  if (msg.onSubmit) {\r\n    msg.onSubmit();\r\n  }\r\n});\r\n","import { classNamesFunction, FontWeights, getTheme } from '@fluentui/react';\r\nimport { IPubcenterPalette, IPubcenterSpacing } from '../../../../../../../theme';\r\nimport { IScriptPageStyleProps, IScriptPageStyles } from './ScriptPage.types';\r\n\r\nexport const getStyles = (props?: IScriptPageStyleProps): IScriptPageStyles => {\r\n  const theme = getTheme();\r\n  const spacing = theme.spacing as IPubcenterSpacing;\r\n  const palette = theme.palette as IPubcenterPalette;\r\n  const pageWidth = spacing.size896;\r\n\r\n  return {\r\n    root: {\r\n      marginRight: spacing.size32,\r\n      maxWidth: pageWidth,\r\n    },\r\n    title: {\r\n      marginBottom: spacing.size16,\r\n      fontSize: theme.fonts.mediumPlus.fontSize,\r\n      fontWeight: FontWeights.semibold,\r\n      lineHeight: '22px',\r\n    },\r\n    tipsText: {\r\n      fontSize: theme.fonts.medium.fontSize,\r\n      lineHeight: spacing.size20,\r\n      margin: `${spacing.size16} 0`,\r\n    },\r\n    scriptWithImage: {\r\n      display: 'flex',\r\n      gap: spacing.size16,\r\n    },\r\n    scriptSectionLeft: {\r\n      display: 'flex',\r\n      flexDirection: 'column',\r\n      width: '-webkit-fill-available',\r\n    },\r\n    messageBar: {\r\n      marginBottom: spacing.size12,\r\n    },\r\n    scriptBox: {\r\n      borderColor: palette.neutralLight,\r\n      borderStyle: 'solid',\r\n      borderWidth: '1px',\r\n      padding: spacing.size12,\r\n      marginBottom: spacing.size16,\r\n    },\r\n    scriptHolder: {\r\n      display: 'block',\r\n      whiteSpace: 'pre-wrap',\r\n      wordBreak: 'break-all',\r\n      backgroundColor: palette.neutralLighter,\r\n      minHeight: spacing.size16,\r\n      maxHeight: spacing.size146,\r\n      padding: spacing.size12,\r\n      marginBottom: spacing.size12,\r\n      overflow: 'auto',\r\n      color: palette.black,\r\n      lineHeight: spacing.size16,\r\n      fontSize: theme.fonts.small.fontSize,\r\n    },\r\n  };\r\n};\r\n\r\nconst _getClassNames = classNamesFunction<IScriptPageStyleProps, IScriptPageStyles>();\r\n\r\nexport const getClassNames = (props?: IScriptPageStyleProps) => _getClassNames(getStyles, props);\r\n","import { DefaultButton } from '@fluentui/react';\r\nimport * as React from 'react';\r\nimport { useEffect } from 'react';\r\nimport { setTimeout } from 'timers';\r\nimport { Log } from '../../../../../../../logging/src';\r\nimport { getAppStore } from '../../../../../../@data';\r\nimport { FormTitle } from '../../../../../../components/Form';\r\nimport { isInPageForm } from '../../../../../../components/Form/FormState/formUtils';\r\nimport { COPY_BUTTON_TIMEOUT } from '../../../../../../constants/AppConstants';\r\nimport { injectIntlWithObserver } from '../../../../../../utils';\r\nimport { getAdunitStore } from '../../../@data';\r\nimport scriptPlacementImage from '../../resources/scriptPlacement.png';\r\nimport { NoScriptPage } from '../NoScriptPage/NoScriptPage';\r\nimport { onCopyCodeIconChanged, onCopyScriptIconChanged, onScriptPageInitialized } from './@data/actions/onScriptPageActions';\r\nimport './@data/mutators/scriptChanged';\r\nimport './@data/orchestrators';\r\nimport { getScriptPageStore } from './@data/store/store';\r\nimport messages from './ScriptPage.messages';\r\nimport { getClassNames } from './ScriptPage.styles';\r\nimport { IScriptPageProps } from './ScriptPage.types';\r\n\r\n/**\r\n *\r\n * TODO: we should not dependent on API to provide this script, going forward we need move the script\r\n * generation logic to UI side and reduce the load time for script generation.\r\n * Track this here https://msasg.visualstudio.com/Bing_Ads/_workitems/edit/7434728\r\n */\r\nconst adUnitSnippetSerializer = ({\r\n  originalScript,\r\n  adUnitId,\r\n}: {\r\n  originalScript?: string;\r\n  adUnitId?: string | number;\r\n}): string | boolean => {\r\n  // Extracting the adUnitId from the input string or from props\r\n  const adUnitIdMatch = originalScript ? originalScript.match(/adUnitId:\\s*\"(.*?)\"/)?.[1] : adUnitId ? adUnitId.toString() : '';\r\n\r\n  if (!adUnitIdMatch) {\r\n    Log.error(`Invalid props, ${originalScript}, ${adUnitId}`);\r\n    return false;\r\n  }\r\n\r\n  const output = `\r\n<div id=\"${adUnitIdMatch}\"></div>\r\n<script>\r\n  window.msAdsQueue.push(function(){\r\n    window.mmnow.render({\r\n      adUnitId: ${adUnitIdMatch},\r\n      elementId: ${adUnitIdMatch}\r\n    });\r\n  });\r\n</script>\r\n  `;\r\n  return output.trim();\r\n};\r\n\r\nexport const NativeAdScriptPage = injectIntlWithObserver(function ScriptPage(props: IScriptPageProps) {\r\n  const { formatMessage } = props.intl;\r\n  const classNames = getClassNames();\r\n  const appStore = getAppStore();\r\n  const { script: scriptRaw, copyScriptIcon, copyCodeIcon } = getScriptPageStore();\r\n  // In case of mode=FormState.InPageView, adunitId should be passed as a prop\r\n  const adunitId = props.match.params.id || props.adunitId || getAdunitStore().active.id?.toString();\r\n  let publisherId = props.match.params.publisherId;\r\n  // In case publisherId is not extracted from route, fetch it from appStore\r\n  if (!publisherId && appStore.publisher) {\r\n    publisherId = appStore.publisher?.id;\r\n  }\r\n\r\n  const script = React.useMemo(() => scriptRaw?.replace('$SITE_ID', props.siteId?.toString?.() ?? 'unknown'), [scriptRaw, props.siteId]);\r\n  const shouldManualTriggerInitialization = React.useMemo(() => props.shouldRenderComponent && publisherId && adunitId && !scriptRaw, [\r\n    props.shouldRenderComponent,\r\n    publisherId,\r\n    adunitId,\r\n    scriptRaw,\r\n  ]);\r\n  // We might have to update this script splitting logic whenever script changes\r\n  const headerScript = script?.substring(0, script.indexOf('<div'));\r\n  const adRenderingCode = ((script?.substring(script.indexOf('<div')) &&\r\n    adUnitSnippetSerializer({ originalScript: script, adUnitId: adunitId })) ||\r\n    '') as string;\r\n\r\n  const onCopyScriptClicked = (text: string) => {\r\n    navigator.clipboard.writeText(text);\r\n    // This change of icon will indicate the user that script copy was successful\r\n    onCopyScriptIconChanged('Accept');\r\n    // After 3000ms we change the icon back to 'Copy'\r\n    setTimeout(() => onCopyScriptIconChanged('Copy'), COPY_BUTTON_TIMEOUT);\r\n  };\r\n\r\n  const onCopyCodeClicked = (text: string) => {\r\n    // Replace narrow no-break space with empty space\r\n    navigator.clipboard.writeText(text.replace(/\\u202F/g, ' '));\r\n    onCopyCodeIconChanged('Accept');\r\n    setTimeout(() => onCopyCodeIconChanged('Copy'), COPY_BUTTON_TIMEOUT);\r\n  };\r\n\r\n  useEffect(() => {\r\n    if (publisherId && adunitId && adunitId !== 'undefined') {\r\n      onScriptPageInitialized(publisherId, adunitId);\r\n    }\r\n    // eslint-disable-next-line react-hooks/exhaustive-deps\r\n  }, []);\r\n\r\n  useEffect(() => {\r\n    if (shouldManualTriggerInitialization) {\r\n      onScriptPageInitialized(publisherId!, adunitId!);\r\n    }\r\n    // eslint-disable-next-line react-hooks/exhaustive-deps\r\n  }, [shouldManualTriggerInitialization]);\r\n\r\n  // This useEffect will focus on the 'Finish' button when the component is rendered\r\n  useEffect(() => {\r\n    if (script && props.shouldRenderComponent) {\r\n      const buttons = document.querySelectorAll('button');\r\n      buttons.forEach((button) => {\r\n        if (button.innerText === 'Finish') {\r\n          button.focus();\r\n        }\r\n      });\r\n    }\r\n  }, [props.shouldRenderComponent, script]); // The empty dependency array ensures this runs only once, when the component mounts.\r\n\r\n  if (props.shouldRenderComponent !== undefined && !props.shouldRenderComponent) {\r\n    return null;\r\n  }\r\n\r\n  return script === null || script === undefined ? (\r\n    <NoScriptPage {...props} mode={props.mode} adunitId={parseInt(adunitId!, 10)} />\r\n  ) : (\r\n    <div className={classNames.root}>\r\n      {isInPageForm(props.mode) && <FormTitle title={formatMessage(messages.title)} intl={props.intl} noHelpPopup={true} />}\r\n      <p className={classNames.tipsText}>{formatMessage(messages.tips)}</p>\r\n      <h2 className={classNames.title}>{formatMessage(messages.subTitle1)}</h2>\r\n      <div className={classNames.scriptWithImage}>\r\n        <div className={classNames.scriptSectionLeft}>\r\n          <div className={classNames.scriptBox}>\r\n            <code className={classNames.scriptHolder}>{headerScript}</code>\r\n            <DefaultButton\r\n              text={formatMessage(messages.copyCodeButton)}\r\n              iconProps={{ iconName: copyScriptIcon }}\r\n              onClick={() => onCopyScriptClicked(headerScript!)}\r\n              ariaDescription={formatMessage(messages.scriptCodePasteGuideline)}\r\n            />\r\n          </div>\r\n        </div>\r\n        <img src={scriptPlacementImage} alt={formatMessage(messages.copyScriptImageAlt)} width={285} height={178} />\r\n      </div>\r\n      <h2 className={classNames.title}>{formatMessage(messages.subTitle2)}</h2>\r\n      <div className={classNames.scriptBox}>\r\n        <code className={classNames.scriptHolder}>{adRenderingCode}</code>\r\n        <DefaultButton\r\n          text={formatMessage(messages.copyCodeButton)}\r\n          iconProps={{ iconName: copyCodeIcon }}\r\n          onClick={() => onCopyCodeClicked(adRenderingCode!)}\r\n          ariaDescription={formatMessage(messages.copyCodeButtonDescription)}\r\n        />\r\n      </div>\r\n    </div>\r\n  );\r\n});\r\n","import { Panel, PanelType } from '@fluentui/react';\r\nimport React from 'react';\r\nimport AppMessages from '../../../../../../App.messages';\r\nimport { FormState } from '../../../../../../components/Form';\r\nimport { IRouterWithIntl, injectIntlAndObserver } from '../../../../../../utils';\r\nimport { getAdunitStore } from '../../../@data';\r\nimport { onPanelOpenChanged } from '../../../@data/actions';\r\nimport { onScriptPageFormCleared } from '../../../TythonAdunit/components/ScriptPage/@data/actions/onScriptPageActions';\r\nimport { NativeAdScriptPage } from '../../../TythonAdunit/components/ScriptPage/ScriptPage';\r\n\r\nexport interface ICodePanelProps extends IRouterWithIntl {}\r\n\r\nexport const CodePanel = injectIntlAndObserver(function CodePanelComponent(props: ICodePanelProps) {\r\n  const { isPanelOpen, scriptProps } = getAdunitStore();\r\n\r\n  return (\r\n    <Panel\r\n      isOpen={isPanelOpen}\r\n      type={PanelType.custom}\r\n      customWidth={'900px'}\r\n      onDismiss={() => {\r\n        onPanelOpenChanged(false);\r\n        onScriptPageFormCleared();\r\n      }}\r\n      isLightDismiss\r\n      closeButtonAriaLabel={props.intl.formatMessage(AppMessages.close)}\r\n    >\r\n      <NativeAdScriptPage\r\n        {...props}\r\n        mode={FormState.InPageView}\r\n        adunitId={scriptProps?.adunitId?.toString()}\r\n        onSubmit={() => onPanelOpenChanged(false)}\r\n        onCancel={() => onPanelOpenChanged(false)}\r\n        siteId={scriptProps?.propertyId!}\r\n      />\r\n    </Panel>\r\n  );\r\n});\r\n","import { defineMessages } from 'react-intl';\r\n\r\nexport default defineMessages({\r\n  adunitId: {\r\n    id: 'adunit.id',\r\n    defaultMessage: 'Ad unit ID',\r\n  },\r\n  uploadBoostTemplate: {\r\n    id: 'upload.message',\r\n    defaultMessage: 'Upload Configuration File',\r\n  },\r\n  downloadTemplate: {\r\n    id: 'download.template',\r\n    defaultMessage: 'Download Current Template',\r\n  },\r\n  adunitType: {\r\n    id: 'adunit.type',\r\n    defaultMessage: 'Ad unit type',\r\n  },\r\n  marketPlaceOptionCore: {\r\n    id: 'marketeplace.core',\r\n    defaultMessage: 'Owned and Operated(Core)',\r\n  },\r\n  marketPlaceOptionRest: {\r\n    id: 'marketeplace.rest',\r\n    defaultMessage: 'Owned and Operated(Rest)',\r\n  },\r\n  marketPlaceOptionSyndicated: {\r\n    id: 'marketeplace.syndicated',\r\n    defaultMessage: 'Syndicated',\r\n  },\r\n  marketPlaceOptionSelectTier: {\r\n    id: 'marketplace.selectTier',\r\n    defaultMessage: 'Select Tier',\r\n  },\r\n  marketPlaceOptionsSponsored: {\r\n    id: 'marketplace.sponsored',\r\n    defaultMessage: 'Sponsored',\r\n  },\r\n  marketPlaceOptionsSponsoredEnhanced: {\r\n    id: 'marketplace.sponsoredEnhanced',\r\n    defaultMessage: 'Sponsored Enhanced',\r\n  },\r\n  adunitNameLabel: {\r\n    id: 'adunitName.label',\r\n    defaultMessage: 'Ad unit name',\r\n  },\r\n  adunitIdLabel: {\r\n    id: 'adunit.id',\r\n    defaultMessage: 'Ad unit ID',\r\n  },\r\n  marketplaceLabel: {\r\n    id: 'marketpalce.label',\r\n    defaultMessage: 'Marketplace classfication',\r\n  },\r\n  businessModelLabel: {\r\n    id: 'businessmodel.label',\r\n    defaultMessage: 'Business model',\r\n  },\r\n  businessModelLevel2AriaLabel: {\r\n    id: 'businessmodel.level2Arialabel',\r\n    defaultMessage: 'Business model level 2',\r\n  },\r\n  distributionPartnerCodesLabel: {\r\n    id: 'distributionPartnerCodes.label',\r\n    defaultMessage: 'Search Distribution Partner Codes',\r\n  },\r\n  distributionPartnerCodesLabelDescription: {\r\n    id: 'distributionPartnerCodesDescription.label',\r\n    defaultMessage: 'Please list the Distribution Partner Codes above, with one code per line',\r\n  },\r\n  distributionPartnerCodesTextfieldPlaceholder: {\r\n    id: 'distributionPartnerCodes.textfield.placeholder',\r\n    defaultMessage: 'ExamplePC01\\nExamplePC02\\nExamplePC03',\r\n  },\r\n  createPageTitle: {\r\n    id: 'create.page.title',\r\n    defaultMessage: 'Create ad unit',\r\n  },\r\n  editPageTitle: {\r\n    id: 'edit.page.title',\r\n    defaultMessage: 'Edit ad unit',\r\n  },\r\n  updateAdUnit: {\r\n    id: 'adunit.updateAdunit',\r\n    defaultMessage: 'Update ad unit',\r\n  },\r\n  continueAdUnit: {\r\n    id: 'adunit.continueAdunit',\r\n    defaultMessage: 'Continue',\r\n  },\r\n  cancelAdUnit: {\r\n    id: 'adunit.cancelAdUnit',\r\n    defaultMessage: 'Cancel',\r\n  },\r\n  previousStepAdUnit: {\r\n    id: 'adunit.previousStepAdUnit',\r\n    defaultMessage: 'Previous',\r\n  },\r\n  channelTitle: {\r\n    id: 'channel.title',\r\n    defaultMessage: 'Channels',\r\n  },\r\n  propertySectionTitle: {\r\n    id: 'property.sectionTitle',\r\n    defaultMessage: 'Properties (optional)',\r\n  },\r\n  advOptionTitle: {\r\n    id: 'advOption.title',\r\n    defaultMessage: 'Advanced Options',\r\n  },\r\n  createChannelButton: {\r\n    id: 'create.channel.button',\r\n    defaultMessage: 'Create Channel',\r\n  },\r\n  channelPickerAriaDesc: {\r\n    id: 'channelPickerAriaDesc',\r\n    defaultMessage: 'Select channels to add the ad unit',\r\n  },\r\n  servingTierTitle: {\r\n    id: 'servingTier.title',\r\n    defaultMessage: 'Serving Tier',\r\n  },\r\n  servingTierOptionLowcost: {\r\n    id: 'servingTier.option.lowcost',\r\n    defaultMessage: 'Low Cost',\r\n  },\r\n  publisherGroupConfigLabel: {\r\n    id: 'publisherGroupConfig.label',\r\n    defaultMessage: 'Publisher Group configuration',\r\n  },\r\n  publisherGroupConfigOptionDefaultPlus: {\r\n    id: 'publisherGroupConfig.option.defaultPlus',\r\n    defaultMessage: 'Default+',\r\n  },\r\n  publisherGroupConfigOptionDefault: {\r\n    id: 'publisherGroupConfig.option.default',\r\n    defaultMessage: 'Default',\r\n  },\r\n  publisherGroupConfigOptionGeneralist: {\r\n    id: 'publisherGroupConfig.option.Generalist',\r\n    defaultMessage: 'Generalist',\r\n  },\r\n  publisherGroupConfigOptionYieldOptimizer: {\r\n    id: 'publisherGroupConfig.option.yieldOptimizer',\r\n    defaultMessage: 'Yield Optimizer',\r\n  },\r\n  publisherGroupConfigOptionYieldMaximizer: {\r\n    id: 'publisherGroupConfig.option.yieldMaximizer',\r\n    defaultMessage: 'Yield Maximizer',\r\n  },\r\n  publisherGroupConfigOptionBingandYahoo: {\r\n    id: 'publisherGroupConfig.option.BingandYahoo',\r\n    defaultMessage: 'Bing/Yahoo O&O',\r\n  },\r\n  publisherGroupConfigOptionLowQualityDistribution: {\r\n    id: 'publisherGroupConfig.option.LowQualityDistribution',\r\n    defaultMessage: 'Low quality Distribution traffic',\r\n  },\r\n  publisherGroupConfigOptionMediumQualityDistribution: {\r\n    id: 'publisherGroupConfig.option.MediumQualityDistribution',\r\n    defaultMessage: 'Medium quality Distribution traffic',\r\n  },\r\n  publisherGroupConfigOptionHighQualityDistribution: {\r\n    id: 'publisherGroupConfig.option.HighQualityDistribution',\r\n    defaultMessage: 'High quality Distribution traffic',\r\n  },\r\n  privateMarketplaceLabel: {\r\n    id: 'privateMarketplace.label',\r\n    defaultMessage: 'Enable Private Marketplace',\r\n  },\r\n  privateMarketplaceTextfieldLabel: {\r\n    id: 'privateMarketplace.textfield.label',\r\n    defaultMessage: 'Private Marketplace IDs',\r\n  },\r\n  privateMarketplaceTextfieldPlaceholder: {\r\n    id: 'privateMarketplace.textfield.placeholder',\r\n    defaultMessage: 'Example ID 1, enter one per line',\r\n  },\r\n  promotionRadioOptionLabel: {\r\n    id: 'promotionOption.radio.label',\r\n    defaultMessage: 'Sponsored Product Ads Stores',\r\n  },\r\n  promotionOptionTextfieldLabel: {\r\n    id: 'promotionOption.textfield.label',\r\n    defaultMessage: 'Store IDs',\r\n  },\r\n  promotionOptionTextfieldPlaceholder: {\r\n    id: 'promotionOption.textfield.placeholder',\r\n    defaultMessage: 'Example Store ID 1, enter one per line',\r\n  },\r\n  boostRadioOptionLabel: {\r\n    id: 'boostOption.radio.label',\r\n    defaultMessage: 'Boost Advertiser Accounts',\r\n  },\r\n  boostOptionTextfieldLabel: {\r\n    id: 'boostOption.textfield.label',\r\n    defaultMessage: 'Advertiser Account IDs',\r\n  },\r\n  boostOptionTextfieldPlaceholder: {\r\n    id: 'boostOption.textfield.placeholder',\r\n    defaultMessage: 'Example Account ID 1, enter one per line',\r\n  },\r\n  propertyName: {\r\n    id: 'property.name',\r\n    defaultMessage: 'Property name',\r\n  },\r\n  propertyButton: {\r\n    id: 'property.add',\r\n    defaultMessage: 'Add property',\r\n  },\r\n  siteButton: {\r\n    id: 'site.add',\r\n    defaultMessage: 'Add site',\r\n  },\r\n  site: {\r\n    id: 'site',\r\n    defaultMessage: 'Site',\r\n  },\r\n  websiteUrl: {\r\n    id: 'property.url',\r\n    defaultMessage: 'Website URL',\r\n  },\r\n  propertyId: {\r\n    id: 'property.id',\r\n    defaultMessage: 'Property ID',\r\n  },\r\n  propertyDefaultOptionText: {\r\n    id: 'property.defaultOptionText',\r\n    defaultMessage: 'Type ID or URL to select the site',\r\n  },\r\n  propertyDefaultNotFound: {\r\n    id: 'property.defaultNotFound',\r\n    defaultMessage: 'No property found, create new property before select',\r\n  },\r\n  siteDefaultNotFound: {\r\n    id: 'site.defaultNotFound',\r\n    defaultMessage: 'No site found, create new site before select',\r\n  },\r\n  createPropertyButtonLabel: {\r\n    id: 'property.CreateButtonLabel',\r\n    defaultMessage: 'Create property',\r\n  },\r\n  propertySearchPlaceholder: {\r\n    id: 'property.SearchPlaceholder',\r\n    defaultMessage: 'Search properties by ID or URL',\r\n  },\r\n  businessModelLevel1DefaultOptionText: {\r\n    id: 'businessmodel.Level1DefaultOptionText',\r\n    defaultMessage: 'Select level 1 (optional)',\r\n  },\r\n  businessModelLevel2DefaultOptionText: {\r\n    id: 'businessmodel.Level2DefaultOptionText',\r\n    defaultMessage: 'Select level 2 (optional)',\r\n  },\r\n  propertyPickerEmptyOptionLabel: {\r\n    id: 'propertyPicker.EmptyOptionLabel',\r\n    defaultMessage: 'Select a property',\r\n  },\r\n  createPropButtonAriaDesc: {\r\n    id: 'propertyPicker.createButtonAriaDesc',\r\n    defaultMessage: 'Click this button to create property within this page',\r\n  },\r\n  propertyOptionsAriaLabel: {\r\n    id: 'propertyPicker.OptionsAriaLabel',\r\n    defaultMessage: 'Property search results',\r\n  },\r\n  propertyPickerSearchBoxAriaDesc: {\r\n    id: 'propertyPickerSearchBoxAriaDesc',\r\n    defaultMessage: 'Click enter to view all properties',\r\n  },\r\n  propertyPickerItemSelectedAnnounceMsg: {\r\n    id: 'propertyPickerItemSelectedAnnounceMsg',\r\n    defaultMessage: 'Property selected',\r\n  },\r\n  createAdunit: {\r\n    id: 'createAdunit',\r\n    defaultMessage: 'Create new ad unit',\r\n  },\r\n  newAudienceAd: {\r\n    id: 'newAudienceAd',\r\n    defaultMessage: 'New audience ad',\r\n  },\r\n  nativeAdOptionLabel: {\r\n    id: 'nativeAdOptionLabel',\r\n    defaultMessage: 'Native/Audience ad \\n\\n Match the look of your site and fit in between posts and listings.',\r\n  },\r\n  searchAdOptionLabel: {\r\n    id: 'searchAdOptionLabel',\r\n    defaultMessage: 'Search ad \\n\\n Coming soon',\r\n  },\r\n  otherAdOptionLabel: {\r\n    id: 'otherAdOptionLabel',\r\n    defaultMessage: 'Other ad \\n\\n Coming soon',\r\n  },\r\n  nativeAdDesc: {\r\n    id: 'nativeAdDesc',\r\n    defaultMessage: 'Match the look of your site and fit in between posts and listings.',\r\n  },\r\n  seeExample: {\r\n    id: 'seeExample',\r\n    defaultMessage: 'See example',\r\n  },\r\n  comingSoon: {\r\n    id: 'comingSoon',\r\n    defaultMessage: 'Coming soon',\r\n  },\r\n  templatePanelTitle: {\r\n    id: 'templatePanelTitle',\r\n    defaultMessage: 'Choose a template and style to match the feeds on your page',\r\n  },\r\n\r\n  mediationHeader: {\r\n    id: 'mediationSetupMessages.mediationHeader',\r\n    defaultMessage: 'Mediation set up',\r\n  },\r\n  mediationDescription: {\r\n    id: 'mediationSetupMessages.mediationDescription',\r\n    defaultMessage: `Connect your Google accounts to ensure you are getting the highest bid possible for your ad inventory. We'll only serve our ads if we predict we can deliver a higher payment compared to Google.`,\r\n  },\r\n  mediationToggleLabel: {\r\n    id: 'mediationSetupMessages.mediationToggleLabel',\r\n    defaultMessage: 'Enable mediation',\r\n  },\r\n  nativeAd: {\r\n    id: 'nativeAdAccordionCheckboxLabel',\r\n    defaultMessage: 'Native Ad',\r\n  },\r\n  nativeAdSubContent: {\r\n    id: 'nativeAdAccordionSubContent',\r\n    defaultMessage: 'Match the look of your site and fit in between posts and listings',\r\n  },\r\n  displayAd: {\r\n    id: 'displayAdAccordionCheckboxLabel',\r\n    defaultMessage: 'Display Ad',\r\n  },\r\n  displayAdSubContent: {\r\n    id: 'displayAdAccordionSubContent',\r\n    defaultMessage: 'Simple image ads that fit in between posts and listings',\r\n  },\r\n  nativeAdConfigLabel: {\r\n    id: 'nativeAd.configuration.label',\r\n    defaultMessage: 'Native ad configuration',\r\n  },\r\n  nativeAdConfigLabelFont: {\r\n    id: 'nativeAd.configuration.font.label',\r\n    defaultMessage: 'Font',\r\n  },\r\n  nativeAdConfigLabelTitleColor: {\r\n    id: 'nativeAd.configuration.titleColor.label',\r\n    defaultMessage: 'Title Color',\r\n  },\r\n  nativeAdConfigLabelBackgroundColor: {\r\n    id: 'nativeAd.configuration.backgroundColor.label',\r\n    defaultMessage: 'Background Color',\r\n  },\r\n  nativeAdConfigLabelButtonBackgroundColor: {\r\n    id: 'nativeAd.configuration.buttonBackgroundColor.label',\r\n    defaultMessage: 'Button Background Color',\r\n  },\r\n  nativeAdConfigMsgBarContent: {\r\n    id: 'nativeAd.configuration.messageBar.content',\r\n    defaultMessage: 'Ads might look different from the preview shown.',\r\n  },\r\n  displayAdMsgBarContent: {\r\n    id: 'displayAd.configuration.messageBar.content',\r\n    defaultMessage:\r\n      'Smart auto-sizing will adapt to your site’s container, and so the actual ads served might look slightly different from the examples shown. For smart auto-sizing to work,{displayAdMsgBarLink}',\r\n  },\r\n  displayAdMsgBarLink: {\r\n    id: 'displayAd.configuration.messageBar.link',\r\n    defaultMessage: 'ensure you have properly defined your container sizes',\r\n  },\r\n  adPreview: {\r\n    id: 'adType.preview.title',\r\n    defaultMessage: 'Ad Preview',\r\n  },\r\n  adPreviewHorizontal: {\r\n    id: 'adType.preview.title',\r\n    defaultMessage: 'Ad Preview container size horizontal',\r\n  },\r\n  adPreviewVertical: {\r\n    id: 'adType.preview.title',\r\n    defaultMessage: 'Ad preview container size vertical',\r\n  },\r\n  adPreviewContainerSize: {\r\n    id: 'adType.preview.container.size.label',\r\n    defaultMessage: 'Container size',\r\n  },\r\n  warningAdUnitTypeNotSelected: {\r\n    id: 'adType.warning.notSelected',\r\n    defaultMessage: 'At least one ad unit type should be selected.',\r\n  },\r\n  warningAdUnitTypeNotFullySelected: {\r\n    id: 'adType.warning.notFullySelected',\r\n    defaultMessage: 'Selecting fewer ad types may reduce monetization.',\r\n  },\r\n  saveAndGetCode: {\r\n    id: 'tython.adunit.create.submit.label',\r\n    defaultMessage: 'Save and get code',\r\n  },\r\n  finishAdUnitCreation: {\r\n    id: 'tython.adunit.create.submit.aftercode',\r\n    defaultMessage: 'Finish',\r\n  },\r\n  comingSoonMsg: {\r\n    id: 'tython.adunit.create.type.display.intro.msg',\r\n    defaultMessage: 'Coming Soon',\r\n  },\r\n  selectDisplayAdLayout: {\r\n    id: 'tython.adunit.create.type.display.layout.selection',\r\n    defaultMessage: 'Pick a layout for your display ad',\r\n  },\r\n  displayAdPreviewHeadline: {\r\n    id: 'tython.adunit.create.type.display.preview.headline',\r\n    defaultMessage: 'Lorem ipsum dolor sit amet',\r\n  },\r\n  displayAdPreviewTextContent: {\r\n    id: 'tython.adunit.create.type.display.preview.text.content',\r\n    defaultMessage:\r\n      'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.',\r\n  },\r\n  displayAdPreviewLearnMoreButton: {\r\n    id: 'tython.adunit.create.type.display.preview.learnMore.button',\r\n    defaultMessage: 'Learn more',\r\n  },\r\n  displayAdPreviewExamplePrimaryTitle: {\r\n    id: 'tython.adunit.create.type.display.preview.primary.title',\r\n    defaultMessage: 'Example 1',\r\n  },\r\n  displayAdPreviewExampleSecondaryTitle: {\r\n    id: 'tython.adunit.create.type.display.preview.secondary.title',\r\n    defaultMessage: 'Example 2',\r\n  },\r\n  displayAdPreviewExampleTertiaryTitle: {\r\n    id: 'tython.adunit.create.type.display.preview.tertiary.title',\r\n    defaultMessage: 'Example 3',\r\n  },\r\n  nativeAdPreviewPreviewTitle: {\r\n    id: 'tython.adunit.create.type.native.preview.title',\r\n    defaultMessage: 'Flowers for all occasions',\r\n  },\r\n  nativeAdPreviewPreviewUrl: {\r\n    id: 'tython.adunit.create.type.native.preview.url',\r\n    defaultMessage: 'example.com',\r\n  },\r\n  createAdUnitSuccessNotification: {\r\n    id: 'tython.adunit.create.success.notification',\r\n    defaultMessage: 'Created new adunit {adunitId} success',\r\n  },\r\n  editAdUnitSuccessNotification: {\r\n    id: 'tython.adunit.edit.success.notification',\r\n    defaultMessage: 'Updated adunit {adunitId} success',\r\n  },\r\n  duplicatedSiteCreationErrorToastNotification: {\r\n    id: 'tython.adunit.create.duplicated.site.error.toast.notification',\r\n    defaultMessage: 'Invalid site creation, duplicated name or url',\r\n  },\r\n  failedLoadAdUnitNotification: {\r\n    id: 'tython.adunit.load.failed.notification',\r\n    defaultMessage: 'We’re unable to load your ad unit. Please try again later.',\r\n  },\r\n  displayAdHorizontal: {\r\n    id: 'tython.adunit.display.horizontal',\r\n    defaultMessage: 'Horizontal',\r\n  },\r\n  displayAdSqaure: {\r\n    id: 'tython.adunit.display.square',\r\n    defaultMessage: 'Square',\r\n  },\r\n  displayAdVertical: {\r\n    id: 'tython.adunit.display.vertical',\r\n    defaultMessage: 'Vertical',\r\n  },\r\n  settingUpAdunitMediationSuccess: {\r\n    id: 'tython.adunit.settingUpAdunitMediationSuccess',\r\n    defaultMessage: 'Setting up adunit mediation completed successfully',\r\n  },\r\n  removingAdunitMediationSuccess: {\r\n    id: 'tython.adunit.removingAdunitMediationSuccess',\r\n    defaultMessage: 'Removing adunit mediation completed successfully',\r\n  },\r\n  updateAdunitFailed: {\r\n    id: 'tython.adunit.updateAdunitFailed',\r\n    defaultMessage: 'Update ad unit failed, please try again later.',\r\n  },\r\n  loadTythonAdunitFailed: {\r\n    id: 'tython.adunit.loadTythonAdunitFailed',\r\n    defaultMessage: 'Load ad units failed, please try again later.',\r\n  },\r\n  settingUpAdunitMediationFailed: {\r\n    id: 'tython.adunit.settingUpAdunitMediationFailed',\r\n    defaultMessage: 'Setting up adunit mediation failed',\r\n  },\r\n  removingAdunitMediationFailed: {\r\n    id: 'tython.adunit.removingAdunitMediationFailed',\r\n    defaultMessage: 'Removing adunit mediation failed',\r\n  },\r\n  createPropertyFromAdunitFailed: {\r\n    id: 'tython.adunit.createPropertyFromAdunitFailed',\r\n    defaultMessage: 'Create properties failed, please try again later.',\r\n  },\r\n  createSitePanelAccessibilityAnnouncement: {\r\n    id: 'tython.adunit.createSitePanelAccessibilityAnnouncement',\r\n    defaultMessage: 'at Dialog - Create site panel',\r\n  },\r\n  panelCloseButtonAriaLabel: {\r\n    id: 'tython.adunit.panelCloseButtonAriaLabel',\r\n    defaultMessage: 'Close',\r\n  },\r\n});\r\n","import { MessageBarType } from '@fluentui/react';\r\nimport { action } from 'mobx';\r\nimport {\r\n  Account,\r\n  AdUnit,\r\n  deleteEntity,\r\n  LifeCycleStatus,\r\n  listEntity,\r\n  onNotificationChanged,\r\n  postEntity,\r\n  Publisher,\r\n  putEntity,\r\n  showSuccessToastNotification,\r\n  TythonAdUnit,\r\n  UserContext,\r\n} from '../../../../../@data';\r\nimport {\r\n  AdSenseAdUnitStatus,\r\n  AdSenseConnectAdUnit,\r\n  AdSenseDisconnectAdUnit,\r\n  AdSenseUpdateAdUnitStatus,\r\n} from '../../../../../@data/store/schema/models/AdSenseAdUnitStatus';\r\nimport messages from '../../TythonAdunit/CreateAdunit/messages';\r\nimport { onAdunitMediationUpdateEnd, onAdunitMediationUpdateStart } from '../actions';\r\nimport { onAdSenseMediationChanged, setAdUnitsData } from '../mutatorActions';\r\nimport { getAdunitStore } from '../store/store';\r\n\r\nexport const fetchAdunitById = async (publisher: Publisher, id: string, userContext?: UserContext): Promise<AdUnit> => {\r\n  const list = await listEntity(\r\n    [publisher],\r\n    userContext,\r\n    AdUnit,\r\n    new URLSearchParams([\r\n      ['type', 'Search'],\r\n      ['ids', id],\r\n      ['details', 'true'],\r\n    ])\r\n  );\r\n\r\n  if (!list || !list.length) {\r\n    throw Error('Cannot find adunit Id');\r\n  }\r\n\r\n  return list[0];\r\n};\r\n\r\nexport const fetchAdunitMediationStatus = async (publisher: Publisher, account: Account, id: string): Promise<AdSenseAdUnitStatus[]> => {\r\n  const urlParams = new URLSearchParams();\r\n  urlParams.append('routeSuffix', 'api/mediation/admanager/getAdUnitMediationStatus');\r\n  const request: AdSenseAdUnitStatus = {\r\n    apiPath: 'preauth/mediation',\r\n    className: 'getAdUnitMediationStatus',\r\n    pubcenterAdUnitIds: [Number.parseInt(id, 10)],\r\n  };\r\n\r\n  const adUnitNotConnectedStatus: AdSenseAdUnitStatus = {\r\n    apiPath: 'preauth/mediation',\r\n    className: 'getAdUnitMediationStatus',\r\n    mediationStatus: false,\r\n  };\r\n\r\n  try {\r\n    // Set the type as any because the PUT operation in ApiService only\r\n    // returns singular item and this request for AdUnits mediation status returns array\r\n    // TODO: this call shouldn't be put call\r\n    // TODO: put operation should support array of objects as a response\r\n    // tslint:disable-next-line: no-any\r\n    const response = (await putEntity([], request, undefined, AdSenseAdUnitStatus, urlParams)) as any;\r\n\r\n    if (!response) {\r\n      return [adUnitNotConnectedStatus];\r\n    }\r\n\r\n    return response;\r\n  } catch {\r\n    return [adUnitNotConnectedStatus];\r\n  }\r\n};\r\n\r\nexport const updateAdUnitGrid = (id: number, isMediated: boolean, shouldAvoidAdUnitViewState?: boolean) => {\r\n  const adUnitsRawData = getAdunitStore().adUnitsRaw.data;\r\n  const adunit = adUnitsRawData?.find((adUnit) => adUnit.id === id);\r\n\r\n  !shouldAvoidAdUnitViewState && onAdSenseMediationChanged(isMediated);\r\n  if (adunit?.id) {\r\n    action(() => {\r\n      adunit!.mediatedWithAdSense = {\r\n        apiPath: 'preauth/mediation',\r\n        className: 'getAdUnitMediationStatus',\r\n        mediationStatus: isMediated,\r\n      };\r\n    })();\r\n    const data = adUnitsRawData!.map((adUnit) => (adUnit.id === adunit?.id ? adunit! : adUnit));\r\n    setAdUnitsData(data);\r\n  }\r\n};\r\n\r\nexport const enableAdunitMediationStatus = async (publisher: Publisher, account: Account, ids: number[]): Promise<AdSenseAdUnitStatus> => {\r\n  const request: AdSenseConnectAdUnit = {\r\n    apiPath: 'preauth/mediation',\r\n    className: 'pubcenterAdUnitsIds',\r\n    pubcenterAdUnitIds: ids,\r\n  };\r\n\r\n  const urlParamsConnect = new URLSearchParams();\r\n  urlParamsConnect.append('routeSuffix', 'api/mediation/admanager/setupAdUnitMediation');\r\n\r\n  const adUnitNotConnectedStatus: AdSenseAdUnitStatus = {\r\n    apiPath: 'preauth/mediation',\r\n    className: 'getAdUnitMediationStatus',\r\n    mediationStatus: false,\r\n  };\r\n  const urlParamsNotConnected = new URLSearchParams();\r\n  urlParamsNotConnected.append('routeSuffix', 'api/mediation/admanager/getAdUnitMediationStatus');\r\n\r\n  onAdunitMediationUpdateStart(ids);\r\n\r\n  try {\r\n    const response = (await postEntity([], AdSenseConnectAdUnit, request, undefined, urlParamsConnect, undefined)) as AdSenseConnectAdUnit;\r\n    onAdunitMediationUpdateEnd(ids);\r\n\r\n    if (!response) {\r\n      onNotificationChanged({ messageBarType: MessageBarType.error, textMessageDescriptor: messages.settingUpAdunitMediationFailed });\r\n      return adUnitNotConnectedStatus;\r\n    } else {\r\n      showSuccessToastNotification({ textMessageDescriptor: messages.settingUpAdunitMediationSuccess });\r\n      updateAdUnitGrid(ids[0], true);\r\n    }\r\n\r\n    return response;\r\n  } catch {\r\n    onAdunitMediationUpdateEnd(ids);\r\n\r\n    return adUnitNotConnectedStatus;\r\n  }\r\n};\r\n\r\nexport const disableAdunitMediationStatus = async (\r\n  publisher: Publisher,\r\n  account: Account,\r\n  ids: number[]\r\n): Promise<AdSenseAdUnitStatus[]> => {\r\n  const request: AdSenseDisconnectAdUnit = {\r\n    apiPath: 'preauth/mediation',\r\n    className: 'pubcenterAdUnitsIds',\r\n    pubcenterAdUnitIds: ids,\r\n  };\r\n\r\n  try {\r\n    onAdunitMediationUpdateStart(ids);\r\n    const urlParams = new URLSearchParams();\r\n    urlParams.append('routeSuffix', 'api/mediation/admanager/decommissionAdUnitMediation');\r\n    const list = (await deleteEntity([], AdSenseDisconnectAdUnit, undefined, urlParams, undefined, request)) as AdSenseDisconnectAdUnit[];\r\n    onAdunitMediationUpdateEnd(ids);\r\n    if (!list || !list.length) {\r\n      onNotificationChanged({ messageBarType: MessageBarType.error, textMessageDescriptor: messages.removingAdunitMediationFailed });\r\n      return [];\r\n    } else {\r\n      showSuccessToastNotification({ textMessageDescriptor: messages.removingAdunitMediationSuccess });\r\n      updateAdUnitGrid(ids[0], false);\r\n    }\r\n\r\n    return list;\r\n  } catch {\r\n    onAdunitMediationUpdateEnd(ids);\r\n\r\n    return [];\r\n  }\r\n};\r\n\r\nexport const updateAdunitMediationStatus = async (\r\n  publisher: Publisher,\r\n  account: Account,\r\n  adunits: (AdUnit | TythonAdUnit)[],\r\n  state: LifeCycleStatus\r\n): Promise<AdSenseAdUnitStatus> => {\r\n  const operation = state === LifeCycleStatus.Active ? 'true' : 'false';\r\n\r\n  const adUnitOriginalStatus: AdSenseAdUnitStatus = {\r\n    apiPath: 'preauth/mediation',\r\n    className: 'getAdUnitMediationStatus',\r\n    mediationStatus: false,\r\n  };\r\n\r\n  const request: AdSenseUpdateAdUnitStatus = {\r\n    apiPath: 'preauth/mediation',\r\n    className: 'pubcenterAdUnitsIds',\r\n    pubcenterAdUnitIds: adunits.map((adunit) => adunit.id),\r\n  };\r\n\r\n  try {\r\n    const params = new URLSearchParams();\r\n    params.append('routeSuffix', `api/mediation/admanager/adunits/updateStatus?activate=${operation}`);\r\n    const response = await putEntity([], request, undefined, AdSenseUpdateAdUnitStatus, params, undefined);\r\n\r\n    if (!response) {\r\n      return adUnitOriginalStatus;\r\n    }\r\n\r\n    return response;\r\n  } catch {\r\n    return adUnitOriginalStatus;\r\n  }\r\n};\r\n","import { IDropdownOption } from '@fluentui/react';\r\nimport { AdUnit, isTythonSelfServeUser } from '../../../../../@data';\r\nimport AppMessages from '../../../../../App.messages';\r\nimport { FilterType, IFilterDetails } from '../../../../../components/GridFilter/GridFilter.types';\r\nimport { IFilterItem } from '../../../../../layout/GridPageV2';\r\nimport messages from '../ManagePage.messages';\r\n\r\nexport function getFilterItems(formatMessage, isAppItems = false): IFilterItem[] {\r\n  const nonTythonFilters: IFilterItem[] = [\r\n    { columnName: 'id', filterName: formatMessage(messages.id), filterType: FilterType.relational },\r\n    {\r\n      columnName: 'status',\r\n      filterName: formatMessage(AppMessages.status),\r\n      filterType: FilterType.custom,\r\n      filterOptions: [\r\n        { key: 'Active', text: formatMessage(AppMessages.statusActive) },\r\n        { key: 'Inactive', text: formatMessage(AppMessages.statusInactive) },\r\n      ] as IDropdownOption[],\r\n    },\r\n    { columnName: 'propertyUrl', filterName: formatMessage(messages.propertyUrl), filterType: FilterType.string },\r\n    {\r\n      columnName: 'propertyId',\r\n      filterName: formatMessage(messages.propertyId),\r\n      filterType: FilterType.relational,\r\n    },\r\n    { columnName: 'creationDate', filterName: formatMessage(messages.adUnitCreationDate), filterType: FilterType.date },\r\n    { columnName: 'taxonomy', filterName: formatMessage(messages.businessModel), filterType: FilterType.string },\r\n    {\r\n      columnName: 'marketClassification',\r\n      filterName: formatMessage(messages.marketClassification),\r\n      filterType: FilterType.custom,\r\n      filterOptions: [\r\n        { key: 'OwnedAndOperatedCore', text: formatMessage(messages.ownedAndOperatedCore) },\r\n        { key: 'OwnedAndOperated', text: formatMessage(messages.ownedAndOperated) },\r\n        { key: 'Syndicated', text: formatMessage(messages.syndicated) },\r\n        { key: 'Sponsored', text: formatMessage(messages.sponsored) },\r\n        { key: 'SponsoredEnhanced', text: formatMessage(messages.sponsoredEnhanced) },\r\n      ] as IDropdownOption[],\r\n    },\r\n  ];\r\n\r\n  let tythonFilters: IFilterItem[] = [\r\n    { columnName: 'id', filterName: formatMessage(messages.id), filterType: FilterType.relational },\r\n    { columnName: 'name', filterName: formatMessage(messages.name), filterType: FilterType.string },\r\n    {\r\n      columnName: 'status',\r\n      filterName: formatMessage(AppMessages.status),\r\n      filterType: FilterType.custom,\r\n      filterOptions: [\r\n        { key: 'Active', text: formatMessage(AppMessages.statusActive) },\r\n        { key: 'Inactive', text: formatMessage(AppMessages.statusInactive) },\r\n      ] as IDropdownOption[],\r\n    },\r\n    { columnName: 'propertyUrl', filterName: formatMessage(messages.propertyUrl), filterType: FilterType.string },\r\n    {\r\n      columnName: 'mediatedWithAdSense',\r\n      filterName: formatMessage(messages.higherMonetization),\r\n      filterType: FilterType.custom,\r\n      filterOptions: [\r\n        { key: 'true', text: formatMessage(AppMessages.on) },\r\n        { key: 'false', text: formatMessage(AppMessages.off) },\r\n      ] as IDropdownOption[],\r\n      customFunction: (dataRow: AdUnit, filterDetails: IFilterDetails) => {\r\n        if (dataRow.mediatedWithAdSense.mediationStatus?.toString() === filterDetails.filterCondition) {\r\n          return true;\r\n        }\r\n        return false;\r\n      },\r\n    },\r\n  ];\r\n\r\n  if (isAppItems) {\r\n    tythonFilters = tythonFilters.filter((f) => !['mediatedWithAdSense', 'propertyUrl'].includes(f.columnName!));\r\n  }\r\n\r\n  return isTythonSelfServeUser() ? tythonFilters : nonTythonFilters;\r\n}\r\n","import { PrimaryButton } from '@fluentui/react';\r\nimport React from 'react';\r\nimport { AdUnit, Model, getAccessPermission, getAppStore, isTythonSelfServeUser } from '../../../../../@data';\r\nimport { hasCreateAccess } from '../../../../../@data/services/UserRoleService';\r\nimport {\r\n  CommandBarActions,\r\n  Direction,\r\n  GridSelectionMode,\r\n  IBuildCommandBarProps,\r\n  IGridPageCommandBarItemProps,\r\n} from '../../../../../layout/GridPageV2';\r\nimport { getTythonAdUnitCreatePageRoute } from '../../../../../utils/routeUtils';\r\nimport { getAdunitStore } from '../../@data';\r\nimport { updateAdUnitMediationStatus } from '../../@data/actions';\r\nimport { disableAdunitMediationStatus } from '../../@data/services/AdunitService';\r\nimport messages from '../ManagePage.messages';\r\nimport { getFilterItems } from './getFilterItems';\r\n\r\nexport function getCommandBarItems(formatMessage, history, match, isWindowExtraSmallSize): IBuildCommandBarProps<Model> | undefined {\r\n  const { publisher, account } = getAppStore();\r\n  const {\r\n    adUnitsRaw: { data, isLoading },\r\n    mediationUpdatePool,\r\n  } = getAdunitStore();\r\n\r\n  const nonTythonItems: IBuildCommandBarProps<Model> | undefined =\r\n    (data && data.length !== 0 && publisher && account) || isLoading\r\n      ? {\r\n          includeActions: [CommandBarActions.custom],\r\n          includeFarActions: [\r\n            CommandBarActions.searchBox,\r\n            CommandBarActions.addFilter,\r\n            CommandBarActions.edit,\r\n            CommandBarActions.activate,\r\n            CommandBarActions.deactivate,\r\n            CommandBarActions.delete,\r\n            CommandBarActions.download,\r\n            CommandBarActions.modifyColumns,\r\n            CommandBarActions.duplicate,\r\n            CommandBarActions.export,\r\n            CommandBarActions.upload,\r\n          ],\r\n          getCustomCommandBarItems: () => {\r\n            const accessPermission = getAccessPermission(AdUnit);\r\n\r\n            const commandBarItems: IGridPageCommandBarItemProps[] = [\r\n              {\r\n                key: 'new',\r\n                placement: { direction: Direction.before },\r\n                commandBarButtonAs: () => (\r\n                  <PrimaryButton\r\n                    iconProps={{ iconName: 'Add' }}\r\n                    text={isWindowExtraSmallSize ? '' : formatMessage(messages.create)}\r\n                    onClick={() => {\r\n                      history.push(`${match.url}/create`);\r\n                    }}\r\n                    disabled={\r\n                      (data === undefined && publisher === undefined && account === undefined) ||\r\n                      account?.id === 0 ||\r\n                      isLoading ||\r\n                      !hasCreateAccess(accessPermission)\r\n                    }\r\n                  />\r\n                ),\r\n                selectionModes: [GridSelectionMode.None],\r\n              },\r\n            ];\r\n\r\n            return commandBarItems;\r\n          },\r\n          filterItems: getFilterItems(formatMessage),\r\n        }\r\n      : undefined;\r\n\r\n  const tythonItems: IBuildCommandBarProps<Model> | undefined =\r\n    (data && data.length !== 0) || isLoading\r\n      ? {\r\n          primaryButtonUrl: getTythonAdUnitCreatePageRoute(),\r\n          primaryButtonLabel: messages.create,\r\n          includeActions: [CommandBarActions.new],\r\n          includeFarActions: [\r\n            CommandBarActions.searchBox,\r\n            CommandBarActions.addFilter,\r\n            CommandBarActions.edit,\r\n            CommandBarActions.activate,\r\n            CommandBarActions.deactivate,\r\n            CommandBarActions.code,\r\n            CommandBarActions.delete,\r\n            CommandBarActions.download,\r\n            CommandBarActions.modifyColumns,\r\n          ].filter((item) =>\r\n            mediationUpdatePool.length\r\n              ? ![CommandBarActions.edit, CommandBarActions.deactivate, CommandBarActions.delete].includes(item)\r\n              : item\r\n          ),\r\n          onPreDeleteItems: async (items: Model[]) => {\r\n            const deletedItem = items[0] as AdUnit;\r\n            if (publisher && account && deletedItem && deletedItem?.mediatedWithAdSense?.mediationStatus === true) {\r\n              await disableAdunitMediationStatus(publisher, account, [deletedItem.id]);\r\n            }\r\n          },\r\n          onItemsStatusChanged: (adunits, status) => updateAdUnitMediationStatus(adunits as AdUnit[], status),\r\n          filterItems: getFilterItems(formatMessage),\r\n        }\r\n      : undefined;\r\n\r\n  return isTythonSelfServeUser() ? tythonItems : nonTythonItems;\r\n}\r\n","import { DirectionalHint, HoverCard, HoverCardType, ICalloutProps, Icon } from '@fluentui/react';\r\nimport React from 'react';\r\nimport { getClassNames } from '../GridV2.styles';\r\n\r\ninterface IHeaderInfoCalloutProps {\r\n  placement?: DirectionalHint;\r\n  calloutContent: JSX.Element | null;\r\n  width?: number;\r\n  hoverCardStyles?: React.CSSProperties;\r\n  calloutProps?: ICalloutProps;\r\n}\r\n\r\nexport const HeaderInfoCallout = (headerInfo: IHeaderInfoCalloutProps) => {\r\n  const {\r\n    placement = DirectionalHint.bottomCenter,\r\n    calloutContent,\r\n    width = 490,\r\n    hoverCardStyles = { width: width, padding: '18px' },\r\n    calloutProps = {\r\n      isBeakVisible: true,\r\n    },\r\n  } = headerInfo;\r\n  const { columnHeaderCallout, columnHeaderIcon } = getClassNames();\r\n\r\n  return (props, defaultRender) => {\r\n    if (!defaultRender || !props) {\r\n      return null;\r\n    }\r\n\r\n    return (\r\n      <div className={columnHeaderCallout}>\r\n        {defaultRender?.(props)}\r\n\r\n        <HoverCard\r\n          style={hoverCardStyles}\r\n          plainCardProps={{\r\n            directionalHint: placement,\r\n            calloutProps: calloutProps,\r\n            onRenderPlainCard: () => calloutContent,\r\n          }}\r\n          type={HoverCardType.plain}\r\n          sticky={true}\r\n        >\r\n          <Icon className={columnHeaderIcon} title=\"clarityTourIcon\" iconName={'info'} />\r\n        </HoverCard>\r\n      </div>\r\n    );\r\n  };\r\n};\r\n","import { classNamesFunction } from '@fluentui/react';\r\nimport { IPubcenterTheme } from '../../../../../theme';\r\nimport { IManagePageStyleProps, IManagePageStyles } from './ManagePage.types';\r\n\r\nexport const getStyles = (props: IManagePageStyleProps): IManagePageStyles => {\r\n  const theme = (props.theme as unknown) as IPubcenterTheme;\r\n  const { fonts, spacing, palette } = theme;\r\n\r\n  return {\r\n    gridContainer: {\r\n      marginLeft: spacing.size32,\r\n      marginTop: spacing.size32,\r\n      marginRight: spacing.size32,\r\n      display: 'flex',\r\n      flexDirection: 'column',\r\n      height: 'inherit',\r\n      flex: 1,\r\n    },\r\n    loadingGrid: {\r\n      margin: 'auto',\r\n    },\r\n    title: {\r\n      ...fonts.size20,\r\n    },\r\n    hoverCardHost: {\r\n      display: 'flex',\r\n      alignItems: 'center',\r\n    },\r\n    actionButtonsContainer: {\r\n      display: 'flex',\r\n      gap: '12px',\r\n      height: '100%',\r\n    },\r\n    monetizationUnderline: {\r\n      borderBottom: `1px dotted ${palette.themePrimary}`,\r\n      width: 'fit-content',\r\n      '&:focus, &:hover': {\r\n        textDecoration: 'underline',\r\n        display: 'block',\r\n        border: '1px solid #A9A9A9',\r\n      },\r\n    },\r\n    mediationHelpIcon: {\r\n      color: palette.themePrimary,\r\n      padding: `0px ${spacing.size8} px`,\r\n      cursor: 'pointer',\r\n    },\r\n    onBoardingMsg: {\r\n      background: palette.themeLighterAlt,\r\n    },\r\n  };\r\n};\r\n\r\nexport const getClassNames = classNamesFunction<IManagePageStyleProps, IManagePageStyles>();\r\n","import {\r\n  CommandBarButton,\r\n  DirectionalHint,\r\n  HoverCard,\r\n  HoverCardType,\r\n  IContextualMenuItem,\r\n  IProcessedStyleSet,\r\n  Link,\r\n  Shimmer,\r\n  getTheme,\r\n} from '@fluentui/react';\r\nimport React from 'react';\r\nimport {\r\n  AdUnit,\r\n  LifeCycleStatus,\r\n  PopupType,\r\n  ServingStatus,\r\n  ServingStatusLabel,\r\n  getAccessPermission,\r\n  getAppStore,\r\n  isTythonSelfServeUser,\r\n} from '../../../../../@data';\r\nimport { hasDeleteAccess, hasUpdateAccess } from '../../../../../@data/services/UserRoleService';\r\nimport AppMessages from '../../../../../App.messages';\r\nimport { FormState } from '../../../../../components/Form';\r\nimport { IGridV2Column } from '../../../../../layout/GridPageV2';\r\nimport { setDialogType } from '../../../../../layout/GridPageV2/@data/mutatorActions';\r\nimport { HeaderInfoCallout } from '../../../../../layout/GridPageV2/components/HeaderInfoCallout';\r\nimport { RouteName } from '../../../@data';\r\nimport { createReturnUrl } from '../../../@data/services/AdManagementService';\r\nimport { getGoogleAdSenseStore } from '../../../Account/Settings/components/GoogleConnector/@data';\r\nimport adManagementMessages from '../../../AdManagement.messages';\r\nimport { getGridPropertyStore } from '../../../Property/Manage/__data__/store/store';\r\nimport { getAdunitStore, isPartnerCodeEnabled } from '../../@data';\r\nimport { onPanelOpenChanged } from '../../@data/actions';\r\nimport messages from '../ManagePage.messages';\r\nimport { getClassNames, getStyles } from '../ManagePage.styles';\r\nimport { IManagePageStyles } from '../ManagePage.types';\r\n\r\nlet FormatMessage;\r\nlet Styles: IProcessedStyleSet<IManagePageStyles>;\r\nlet History;\r\n\r\nconst editRouter = (item: AdUnit, step?: number, showExtraBtns?: boolean) => {\r\n  const { publisher, account } = getAppStore();\r\n  const returnUrl = createReturnUrl(RouteName.adunit, publisher!.id, account!.id, item.id, FormState.MultiStepEdit, step, showExtraBtns);\r\n  History.push(returnUrl);\r\n};\r\n\r\nconst getCallOutContent = (item: AdUnit): JSX.Element => {\r\n  const isMediated = item?.mediatedWithAdSense?.mediationStatus;\r\n  const header = isMediated ? messages.mediationCardConnectedHeader : messages.mediationCardNoConnectionHeader;\r\n  const description = isMediated ? messages.mediationCardConnectedDesc : messages.mediationCardNoConnectionDesc;\r\n  const callToActionLabel = isMediated ? messages.mediationCardConnectedC2A : messages.mediationCardNoConnectionC2A;\r\n\r\n  return (\r\n    <>\r\n      <h3 className={Styles.title}>{FormatMessage(header)}</h3>\r\n      <p>{FormatMessage(description)}</p>\r\n      <Link onClick={() => editRouter(item, 0, true)}>{FormatMessage(callToActionLabel)}</Link>\r\n    </>\r\n  );\r\n};\r\n\r\nconst getServingStatusLabel = (servingStatus: ServingStatus, formatMessage) => {\r\n  const servingStatusType = Object.keys(ServingStatus)[Object.values(ServingStatus).indexOf(servingStatus)];\r\n  return servingStatusType ? formatMessage(adManagementMessages[ServingStatusLabel[servingStatusType]]) : '';\r\n};\r\n\r\nexport function getGridColumns(\r\n  formatMessage,\r\n  routeHistory,\r\n  isWindowRegularSize,\r\n  setAdUnitCallout,\r\n  isFetchingAdUnitStatus,\r\n  isFetchingPropertyStatus,\r\n  propertyServingConfigs\r\n): IGridV2Column[] {\r\n  FormatMessage = formatMessage;\r\n  History = routeHistory;\r\n\r\n  const { publisher, account } = getAppStore();\r\n  const classNames = getClassNames(getStyles, { theme: getTheme() });\r\n  const isAdSenseConnected = getGoogleAdSenseStore().active.isMediationEnabled;\r\n  Styles = classNames;\r\n\r\n  const commonColumns: IGridV2Column[] = [\r\n    {\r\n      columnOrder: 2,\r\n      key: 'name',\r\n      fieldName: 'name',\r\n      name: formatMessage(messages.name),\r\n      minWidth: 100,\r\n      maxWidth: 125,\r\n      isSearchable: true,\r\n      isVisible: true,\r\n      isExportable: true,\r\n      isResizable: true,\r\n      suppressSorting: false,\r\n    },\r\n    {\r\n      columnOrder: 3,\r\n      key: 'id',\r\n      fieldName: 'id',\r\n      name: formatMessage(messages.id),\r\n      minWidth: 100,\r\n      maxWidth: 100,\r\n      isSearchable: true,\r\n      isVisible: true,\r\n      isExportable: true,\r\n      isResizable: true,\r\n    },\r\n    {\r\n      columnOrder: 4,\r\n      key: 'status',\r\n      name: formatMessage(messages.servingStatus),\r\n      minWidth: 100,\r\n      maxWidth: 100,\r\n      isSearchable: true,\r\n      isVisible: true,\r\n      isExportable: true,\r\n      onRender: (item: AdUnit) => {\r\n        if (isTythonSelfServeUser()) {\r\n          if (item.status === LifeCycleStatus.Inactive) {\r\n            return getServingStatusLabel(ServingStatus.NotServing, formatMessage);\r\n          }\r\n\r\n          const servingStatus = getGridPropertyStore()?.servingConfigs?.find((config) => item.propertyId === config.propertyId)\r\n            ?.servingStatus;\r\n\r\n          return getGridPropertyStore().isFetchingPropertyStatus && servingStatus === undefined ? (\r\n            <Shimmer styles={{ root: { display: 'flex', alignItems: 'center', height: '100%' }, shimmerWrapper: { height: '7px' } }} />\r\n          ) : (\r\n            getServingStatusLabel(ServingStatus[servingStatus!], formatMessage)\r\n          );\r\n        } else {\r\n          return item.status;\r\n        }\r\n      },\r\n    },\r\n    {\r\n      columnOrder: 5,\r\n      key: 'propertyUrl',\r\n      fieldName: 'propertyUrl',\r\n      name: formatMessage(messages.propertyUrl),\r\n      minWidth: 150,\r\n      maxWidth: 150,\r\n      isSearchable: true,\r\n      isResizable: true,\r\n      isVisible: true,\r\n      isExportable: true,\r\n    },\r\n    {\r\n      columnOrder: 7,\r\n      key: 'creationDate',\r\n      fieldName: 'creationDate',\r\n      name: formatMessage(messages.adUnitCreationDate),\r\n      minWidth: 150,\r\n      maxWidth: 150,\r\n      isSearchable: true,\r\n      isResizable: true,\r\n      isVisible: true,\r\n      isExportable: true,\r\n    },\r\n    {\r\n      columnOrder: 10,\r\n      key: 'actions',\r\n      name: formatMessage(messages.actions),\r\n      minWidth: 220,\r\n      maxWidth: 220,\r\n      isPadded: true,\r\n      isSearchable: true,\r\n      isVisible: true,\r\n      suppressSorting: true,\r\n      onRender: (item: AdUnit) => {\r\n        const accessPermission = getAccessPermission(item);\r\n\r\n        const nonTythonEditAdUnitOptions: IContextualMenuItem[] = [\r\n          {\r\n            key: 'name',\r\n            text: formatMessage(messages.changeName),\r\n            onClick: () => setAdUnitCallout(item.id),\r\n          },\r\n        ];\r\n\r\n        const editAdUnitOptions = isTythonSelfServeUser() ? undefined : { items: nonTythonEditAdUnitOptions };\r\n\r\n        const editButtonOnClick = isTythonSelfServeUser()\r\n          ? () => History.push(createReturnUrl(RouteName.adunit, publisher?.id, account?.id, item.id, FormState.Edit))\r\n          : undefined;\r\n\r\n        return (\r\n          <div className={classNames.actionButtonsContainer}>\r\n            <CommandBarButton\r\n              id={`adunitCallout-${item.id}`}\r\n              styles={{ root: { background: 'transparent' } }}\r\n              iconProps={{ iconName: 'edit' }}\r\n              ariaLabel={formatMessage(AppMessages.edit)}\r\n              text={isWindowRegularSize ? formatMessage(AppMessages.edit) : ''}\r\n              menuProps={editAdUnitOptions}\r\n              disabled={!hasUpdateAccess(accessPermission) || getAdunitStore().mediationUpdatePool.includes(item.id)}\r\n              onClick={editButtonOnClick}\r\n            />\r\n            {isTythonSelfServeUser() && item.propertyId !== undefined && (\r\n              <CommandBarButton\r\n                styles={{ root: { background: 'transparent' } }}\r\n                iconProps={{ iconName: 'PasteAsCode' }}\r\n                ariaLabel={formatMessage(AppMessages.code)}\r\n                text={isWindowRegularSize ? formatMessage(AppMessages.code) : ''}\r\n                onClick={() => onPanelOpenChanged(true, item.propertyId, item.id)}\r\n              />\r\n            )}\r\n            <CommandBarButton\r\n              data-test-id={`grid-delete-action-${item.id}`}\r\n              styles={{ root: { background: 'transparent' } }}\r\n              iconProps={{ iconName: 'Delete' }}\r\n              text={isWindowRegularSize ? formatMessage(AppMessages.delete) : ''}\r\n              onClick={() => setDialogType(PopupType.DeleteConfirmation)}\r\n              disabled={!hasDeleteAccess(accessPermission) || getAdunitStore().mediationUpdatePool.includes(item.id)}\r\n            />\r\n          </div>\r\n        );\r\n      },\r\n    },\r\n  ];\r\n\r\n  const tythonColumns: IGridV2Column[] = [\r\n    {\r\n      columnOrder: 9,\r\n      key: 'monetization',\r\n      fieldName: 'monetization',\r\n      name: formatMessage(messages.higherMonetization),\r\n      minWidth: 175,\r\n      maxWidth: 175,\r\n      suppressSorting: true,\r\n      isSearchable: true,\r\n      isVisible: isAdSenseConnected,\r\n      isShowingDisabled: !isAdSenseConnected,\r\n      onRenderHeader: HeaderInfoCallout({\r\n        calloutContent: (\r\n          <div>\r\n            <span className={classNames.title}>{formatMessage(messages.mediationCardNoConnectionHeader)}</span>\r\n            <p>{formatMessage(messages.mediationCardNoConnectionDesc)}</p>\r\n          </div>\r\n        ),\r\n      }),\r\n      onRender: (item: AdUnit) => {\r\n        return getAdunitStore().isFetchingAdUnitStatus && item.mediatedWithAdSense === undefined ? (\r\n          <Shimmer styles={{ root: { display: 'flex', alignItems: 'center', height: '100%' }, shimmerWrapper: { height: '7px' } }} />\r\n        ) : (\r\n          <HoverCard\r\n            style={{\r\n              width: 360,\r\n              padding: '0px 15px 20px 15px',\r\n            }}\r\n            plainCardProps={{\r\n              directionalHint: DirectionalHint.leftTopEdge,\r\n              calloutProps: {\r\n                isBeakVisible: true,\r\n              },\r\n              onRenderPlainCard: () => getCallOutContent(item),\r\n            }}\r\n            instantOpenOnClick\r\n            type={HoverCardType.plain}\r\n            hidden={getAdunitStore().mediationUpdatePool.includes(item.id)}\r\n            trapFocus\r\n            setInitialFocus\r\n            tabIndex={0}\r\n            className={classNames.monetizationUnderline}\r\n          >\r\n            <div className={classNames.monetizationUnderline} tabIndex={0}>\r\n              {getAdunitStore().mediationUpdatePool.includes(item.id)\r\n                ? formatMessage(messages.pending)\r\n                : item?.mediatedWithAdSense?.mediationStatus\r\n                ? formatMessage(messages.higherMonetizationEnabled)\r\n                : formatMessage(messages.higherMonetizationNotSetup)}\r\n            </div>\r\n          </HoverCard>\r\n        );\r\n      },\r\n    },\r\n  ];\r\n\r\n  const nonTythonColumns: IGridV2Column[] = [\r\n    {\r\n      columnOrder: 0,\r\n      key: 'accountName',\r\n      fieldName: 'accountName',\r\n      name: formatMessage(messages.accountName),\r\n      minWidth: 100,\r\n      maxWidth: 100,\r\n      isVisible: false,\r\n      isExportable: true,\r\n      isResizable: true,\r\n      isSearchable: true,\r\n    },\r\n    {\r\n      columnOrder: 1,\r\n      key: 'accountId',\r\n      fieldName: 'accountId',\r\n      name: formatMessage(messages.accountId),\r\n      minWidth: 100,\r\n      maxWidth: 100,\r\n      isVisible: false,\r\n      isExportable: true,\r\n      isResizable: true,\r\n      isSearchable: true,\r\n    },\r\n    {\r\n      columnOrder: 6,\r\n      key: 'propertyId',\r\n      fieldName: 'propertyId',\r\n      name: formatMessage(messages.propertyId),\r\n      minWidth: 150,\r\n      maxWidth: 150,\r\n      isSearchable: true,\r\n      isResizable: true,\r\n      isVisible: false,\r\n      isExportable: true,\r\n    },\r\n    {\r\n      columnOrder: 4.5,\r\n      key: 'partnerCodes',\r\n      fieldName: 'partnerCodes',\r\n      name: formatMessage(AppMessages.partnerCodes),\r\n      minWidth: 100,\r\n      maxWidth: 150,\r\n      isVisible: isPartnerCodeEnabled(publisher?.id.toString()),\r\n      isExportable: true,\r\n      isResizable: true,\r\n      isSearchable: true,\r\n      onRender: (item: AdUnit) => {\r\n        if (Array.isArray(item.partnerCodes)) {\r\n          return item.partnerCodes.join(', ');\r\n        } else {\r\n          return item.partnerCodes;\r\n        }\r\n      },\r\n    },\r\n    {\r\n      columnOrder: 8,\r\n      key: 'taxonomy',\r\n      fieldName: 'taxonomy',\r\n      name: formatMessage(messages.businessModel),\r\n      minWidth: 150,\r\n      maxWidth: 150,\r\n      isSearchable: true,\r\n      isResizable: true,\r\n      isVisible: false,\r\n      isExportable: true,\r\n    },\r\n  ];\r\n\r\n  return [...commonColumns, ...(isTythonSelfServeUser() ? tythonColumns : nonTythonColumns)];\r\n}\r\n","import * as React from 'react';\r\nimport { useEffect, useState } from 'react';\r\nimport { AdUnit, InventoryPlatformType, getAppStore } from '../../../../@data';\r\nimport { isTythonSelfServeUser } from '../../../../@data/utils/checkUserType';\r\nimport { FormState } from '../../../../components/Form';\r\nimport { ZeroResults } from '../../../../components/ZeroResults/ZeroResults';\r\nimport { useWindowSize } from '../../../../hooks';\r\nimport { getStore as getWindowSizeStore } from '../../../../hooks/useWindowSize/store/store';\r\nimport { GridPageLayout } from '../../../../layout/GridPageLayout/GridPageLayout';\r\nimport { IGridV2Column } from '../../../../layout/GridPageV2';\r\nimport { GridV2 } from '../../../../layout/GridPageV2/GridV2';\r\nimport { IRouterWithIntl, injectIntlAndObserver } from '../../../../utils/ReactUtils';\r\nimport { RouteName } from '../../@data';\r\nimport { createReturnUrl } from '../../@data/services/AdManagementService';\r\nimport { getGridPropertyStore } from '../../Property/Manage/__data__/store/store';\r\nimport { getAdunitStore } from '../@data';\r\nimport { onManagePageInitialized } from '../@data/actions/onManagePageInitialized';\r\nimport { setAdUnitsData } from '../@data/mutatorActions';\r\nimport messages from './ManagePage.messages';\r\nimport { AdUnitCallout } from './components/AdUnitNameCallout/AdUnitNameCallout';\r\nimport { CodePanel } from './components/CodePanel/CodePanel';\r\nimport { getCommandBarItems } from './utils/getCommandBarItems';\r\nimport { getGridColumns } from './utils/getGridColumns';\r\n\r\nexport interface IManagePageProps extends IRouterWithIntl {\r\n  withParentLayout?: boolean;\r\n  abortDataFetch?: boolean;\r\n}\r\n\r\nconst { windowStoreSerializer } = useWindowSize();\r\n\r\nexport const ManagePage = injectIntlAndObserver((props: IManagePageProps) => {\r\n  const { history, match, withParentLayout, abortDataFetch } = props;\r\n  const tythonUser = isTythonSelfServeUser();\r\n  const { publisher, account } = getAppStore();\r\n  const { adUnitsRaw } = getAdunitStore();\r\n  const { formatMessage } = props.intl;\r\n  const { isWindowRegularSize, isWindowExtraSmallSize } = windowStoreSerializer(getWindowSizeStore());\r\n  const [visibleCallOut, setVisibleCallOut] = useState<number>(0);\r\n  const gridDefaultColumns: IGridV2Column[] = getGridColumns(\r\n    formatMessage,\r\n    history,\r\n    isWindowRegularSize,\r\n    setVisibleCallOut,\r\n    getAdunitStore().isFetchingAdUnitStatus,\r\n    getGridPropertyStore().isFetchingPropertyStatus,\r\n    undefined // Added this for tython manage page that will enable in future\r\n  );\r\n\r\n  const NoResultComponent = (\r\n    <ZeroResults\r\n      showDefaultImage\r\n      title={tythonUser || (!tythonUser && !!publisher && !!account) ? formatMessage(messages.zeroAdUnitsTitle) : undefined}\r\n      description={formatMessage(\r\n        tythonUser || (!tythonUser && publisher && account) ? messages.zeroAdUnitsDescription : messages.noPublisherSelected\r\n      )}\r\n      buttonText={formatMessage(messages.zeroAdUnitsCallToAction)}\r\n      onButtonClick={\r\n        tythonUser || (!tythonUser && !!publisher && !!account)\r\n          ? () => {\r\n              const returnUrl = createReturnUrl(\r\n                RouteName.adunit,\r\n                publisher!.id,\r\n                account!.id,\r\n                undefined,\r\n                isTythonSelfServeUser() ? FormState.MultiStepCreation : FormState.Create\r\n              );\r\n              history.push(returnUrl);\r\n            }\r\n          : undefined\r\n      }\r\n    />\r\n  );\r\n\r\n  useEffect(() => {\r\n    if (abortDataFetch) {\r\n      return;\r\n    }\r\n    onManagePageInitialized();\r\n    // eslint-disable-next-line\r\n  }, [publisher, account]);\r\n\r\n  const adUnitsGridReady = tythonUser ? !adUnitsRaw.isLoading && !getGridPropertyStore().isFetchingPropertyStatus : !adUnitsRaw.isLoading;\r\n  const adUnitsGridData = publisher && account ? adUnitsRaw.data || [] : [];\r\n  const pageContent = (\r\n    <>\r\n      <GridV2\r\n        history={history}\r\n        location={props.location}\r\n        match={match}\r\n        entity={AdUnit}\r\n        pageTitle={{ title: formatMessage(messages.adUnits), helpId: 'pop_PCv4_AdUnits' }}\r\n        commandBarProps={getCommandBarItems(formatMessage, history, match, isWindowExtraSmallSize)}\r\n        isGridReady={adUnitsGridReady}\r\n        isDataLoading={adUnitsRaw.isFetchingData}\r\n        dataGridProps={{\r\n          gridV2Columns: gridDefaultColumns,\r\n          data: tythonUser\r\n            ? adUnitsGridData.filter((adunit) =>\r\n                getGridPropertyStore()?.servingConfigs?.find(\r\n                  (config) => config.propertyId === adunit.propertyId && config.inventoryPlatformType !== InventoryPlatformType.UWP\r\n                )\r\n              )\r\n            : adUnitsGridData,\r\n          setData: setAdUnitsData,\r\n          shimmerLines: 10,\r\n          renderZeroItemsComponent: NoResultComponent,\r\n          noEntityFound: messages.notFound,\r\n        }}\r\n        paginationProps={{\r\n          shouldGridHandlePagination: true,\r\n        }}\r\n      />\r\n      <>{isTythonSelfServeUser() && <CodePanel {...props} />}</>\r\n      <AdUnitCallout {...props} visibleCallOut={visibleCallOut} setVisibleCallOut={setVisibleCallOut} />\r\n    </>\r\n  );\r\n\r\n  return withParentLayout ? <>{pageContent}</> : <GridPageLayout>{pageContent}</GridPageLayout>;\r\n});\r\n","import { defineMessages } from 'react-intl';\r\n\r\nexport default defineMessages({\r\n  appAdunitCodePanelTitle: {\r\n    id: 'appAdunit.codePanelTitle',\r\n    defaultMessage: 'Ad unit code template',\r\n  },\r\n  appAdunitManagePageGridTitle: {\r\n    id: 'appAdunit.managePageGridTitle',\r\n    defaultMessage: 'App ad units',\r\n  },\r\n  zeroAdUnitsTitle: {\r\n    id: 'appAdunit.zeroAdUnitsTitle',\r\n    defaultMessage: 'No ad units found by apps',\r\n  },\r\n  zeroAdUnitsDescription: {\r\n    id: 'appAdunit.zeroAdUnitsDescription',\r\n    defaultMessage: 'Create an app ad unit to start monetizing your app',\r\n  },\r\n  zeroAdUnitsCallToAction: {\r\n    id: 'appAdunit.zeroAdUnitsCallToAction',\r\n    defaultMessage: 'Create an App Ad Unit',\r\n  },\r\n  gridColumnTitleAppName: {\r\n    id: 'appAdunit.gridColumnTitleAppName',\r\n    defaultMessage: 'App Name',\r\n  },\r\n  gridColumnTitleAppId: {\r\n    id: 'appAdunit.gridColumnTitleAppId',\r\n    defaultMessage: 'App ID',\r\n  },\r\n  gridColumnTitleConnectedApp: {\r\n    id: 'appAdunit.gridColumnTitleConnectedApp',\r\n    defaultMessage: 'App connected',\r\n  },\r\n  gridColumnTitleAdUnitPlatform: {\r\n    id: 'appAdunit.gridColumnTitleAdUnitPlatform',\r\n    defaultMessage: 'Ad unit platform',\r\n  },\r\n  gridColumnTitleAppAdUnitStatus: {\r\n    id: 'appAdunit.gridColumnTitleAppAdUnitStatus',\r\n    defaultMessage: 'Status',\r\n  },\r\n  gridColumnTitleIssues: {\r\n    id: 'appAdunit.gridColumnTitleIssues',\r\n    defaultMessage: 'Issues',\r\n  },\r\n  gridColumnTitleActions: {\r\n    id: 'appAdunit.gridColumnTitleActions',\r\n    defaultMessage: 'Actions',\r\n  },\r\n  gridCreateButtonLabel: {\r\n    id: 'appAdunit.gridCreateButtonLabel',\r\n    defaultMessage: 'Create App Ad Unit',\r\n  },\r\n  propertyInventoryTypeLabelUWP: {\r\n    id: 'appAdunit.propertyInventoryTypeLabelUWP',\r\n    defaultMessage: 'Windows UWP',\r\n  },\r\n  siteTabLabel: {\r\n    id: 'appAdunit.siteTabLabel',\r\n    defaultMessage: 'By sites',\r\n  },\r\n  appTabLabel: {\r\n    id: 'appAdunit.appTabLabel',\r\n    defaultMessage: 'By apps',\r\n  },\r\n});\r\n","import { makeStyles, shorthands, tokens } from '@fluentui/react-components';\r\n\r\nexport const useAppAdUnitCodePanelStyles = makeStyles({\r\n  textArea: {\r\n    width: '100%',\r\n    height: '236px',\r\n    '> textarea': {\r\n      maxHeight: '100%',\r\n    },\r\n  },\r\n  textAreaWrapper: {\r\n    ':hover': {\r\n      '> button': {\r\n        zIndex: 100,\r\n      },\r\n    },\r\n    position: 'relative',\r\n    ...shorthands.padding(tokens.spacingVerticalM),\r\n  },\r\n  codeBlocOnlyTextWrapper: {\r\n    width: '600px',\r\n  },\r\n  copyButton: {\r\n    position: 'absolute',\r\n    right: tokens.spacingHorizontalXXL,\r\n    top: tokens.spacingVerticalXXL,\r\n  },\r\n  additionalCodeArea: {\r\n    height: '300px',\r\n  },\r\n});\r\n","import {\r\n  Button,\r\n  Card,\r\n  DrawerBody,\r\n  DrawerHeader,\r\n  DrawerHeaderTitle,\r\n  FluentProvider,\r\n  OverlayDrawer,\r\n  Textarea,\r\n  mergeClasses,\r\n  webLightTheme,\r\n} from '@fluentui/react-components';\r\nimport { Checkmark16Regular, Copy16Regular, Dismiss24Regular } from '@fluentui/react-icons';\r\nimport React, { useState } from 'react';\r\nimport { injectIntl } from 'react-intl';\r\nimport { AdUnit, getAppStore } from '../../../../../@data';\r\nimport messages from '../messages';\r\nimport { useAppAdUnitCodePanelStyles } from '../styles';\r\nimport { AppAdUnitCodePanelType, UseAppAdUnitCodePanel } from '../types';\r\n\r\nexport const useAppAdUnitCodePanel: UseAppAdUnitCodePanel = (renderCodeBlockOnly = false) => {\r\n  const [isPanelOpen, setIsPanelOpen] = useState(false);\r\n  const [codeContent, setCodeContent] = useState('');\r\n  const [adunitCode, setAdunitCode] = useState('');\r\n  const [configCode, setConfigCode] = useState('');\r\n  const { publisher } = getAppStore();\r\n  const onPanelTrigger = (open: boolean, item?: AdUnit) => {\r\n    setIsPanelOpen(open);\r\n    const codeForAdUnit = `<!-- MainPage.xaml -->\r\n    <Page\r\n        ...\r\n        xmlns:adSdk=\"using:Microsoft.AdSdk.Uwp\">\r\n\r\n        <!-- Placement Code is required! -->\r\n        <adSdk:AdControl x:Name=\"NativeAdControl\" PlacementCode=\"adunit_${item?.id}\" Width=\"300\" Height=\"250\" CornerRadius=\"15\" Background=\"Transparent\"/>\r\n    </Page>`;\r\n    const codeForConfig = `/* MainPage.xaml.cs */\r\n    using Microsoft.AdSdk.Uwp;\r\n\r\n    public sealed partial class MainPage : Page\r\n    {\r\n        public MainPage()\r\n        {\r\n            NativeAdControl.SdkConfiguration = SdkConfigFactory.Create(\r\n                callback: (SdkConfigurationOptions options) =>\r\n                {\r\n                    options.PublisherCode = \"publisher_${publisher?.id}\";\r\n                    options.MemberId = \"14163\";\r\n                });\r\n        }\r\n    }`;\r\n    if (item) {\r\n      setCodeContent(`${codeForAdUnit}\\n${codeForConfig}`.replace(/\\u202F/g, ' '));\r\n      setAdunitCode(codeForAdUnit.replace(/\\u202F/g, ' '));\r\n      setConfigCode(codeForConfig.replace(/\\u202F/g, ' '));\r\n    }\r\n  };\r\n\r\n  return {\r\n    isPanelOpen,\r\n    codeContent,\r\n    onPanelTrigger,\r\n    renderCodeBlockOnly,\r\n    adunitCode,\r\n    configCode,\r\n  };\r\n};\r\n\r\nconst AppAdUnitCodePanel: AppAdUnitCodePanelType = ({\r\n  intl: { formatMessage },\r\n  isPanelOpen,\r\n  onPanelTrigger,\r\n  codeContent,\r\n  renderCodeBlockOnly = false,\r\n  adunitCode,\r\n  configCode,\r\n}) => {\r\n  const classNames = useAppAdUnitCodePanelStyles();\r\n  const [isContentCopied, setIsContentCopied] = useState(false);\r\n\r\n  const onCopy = () => {\r\n    navigator.clipboard.writeText(codeContent);\r\n    setIsContentCopied(true);\r\n  };\r\n\r\n  const codeBlock = (\r\n    <Card\r\n      className={mergeClasses(classNames.textAreaWrapper, renderCodeBlockOnly ? classNames.codeBlocOnlyTextWrapper : '')}\r\n      appearance=\"outline\"\r\n      onMouseLeave={() => setIsContentCopied(false)}\r\n    >\r\n      <Button\r\n        className={classNames.copyButton}\r\n        icon={isContentCopied ? <Checkmark16Regular /> : <Copy16Regular />}\r\n        onClick={() => onCopy()}\r\n      />\r\n      <Textarea resize=\"none\" appearance=\"filled-darker\" size=\"medium\" className={classNames.textArea} value={adunitCode} />\r\n      <Textarea\r\n        resize=\"none\"\r\n        appearance=\"filled-darker\"\r\n        size=\"medium\"\r\n        className={mergeClasses(classNames.textArea, classNames.additionalCodeArea)}\r\n        value={configCode}\r\n      />\r\n    </Card>\r\n  );\r\n\r\n  if (renderCodeBlockOnly) {\r\n    return isPanelOpen ? codeBlock : <></>;\r\n  }\r\n\r\n  return (\r\n    <FluentProvider theme={webLightTheme}>\r\n      <OverlayDrawer position=\"end\" size=\"medium\" open={isPanelOpen} onOpenChange={(_, { open }) => onPanelTrigger(open)}>\r\n        <DrawerHeader>\r\n          <DrawerHeaderTitle\r\n            action={<Button appearance=\"subtle\" aria-label=\"Close\" icon={<Dismiss24Regular />} onClick={() => onPanelTrigger(false)} />}\r\n          >\r\n            {formatMessage(messages.appAdunitCodePanelTitle)}\r\n          </DrawerHeaderTitle>\r\n        </DrawerHeader>\r\n        <DrawerBody>{codeBlock}</DrawerBody>\r\n      </OverlayDrawer>\r\n    </FluentProvider>\r\n  );\r\n};\r\n\r\nexport default injectIntl(AppAdUnitCodePanel);\r\n","import { CommandBarButton } from '@fluentui/react';\r\nimport React from 'react';\r\nimport {\r\n  AdUnit,\r\n  InventoryPlatformType,\r\n  Model,\r\n  PopupType,\r\n  getAccessPermission,\r\n  getAppStore,\r\n  isTythonSelfServeUser,\r\n} from '../../../../../@data';\r\nimport { hasDeleteAccess, hasUpdateAccess } from '../../../../../@data/services/UserRoleService';\r\nimport AppMessages from '../../../../../App.messages';\r\nimport { ZeroResults } from '../../../../../components/ZeroResults/ZeroResults';\r\nimport { CommandBarActions, IBuildCommandBarProps, IGridV2Column } from '../../../../../layout/GridPageV2';\r\nimport { setDialogType } from '../../../../../layout/GridPageV2/@data/mutatorActions';\r\nimport { getTythonAppAdunitCreationRoute, getTythonAppAdunitEditionRoute } from '../../../../../utils/routeUtils';\r\nimport { getAdunitStore } from '../../../Adunit/@data';\r\nimport { setAdUnitsData } from '../../../Adunit/@data/mutatorActions';\r\nimport { getFilterItems } from '../../../Adunit/Manage/utils/getFilterItems';\r\nimport { getGridPropertyStore } from '../../../Property/Manage/__data__/store/store';\r\nimport messages from '../messages';\r\nimport { UseAppAdsGridType } from '../types';\r\n\r\nconst InventoryPlatformTypeLabel = {\r\n  [InventoryPlatformType.UWP]: messages.propertyInventoryTypeLabelUWP,\r\n};\r\n\r\n// @ts-ignore TODO: fix types\r\nconst useAppAdsGrid: UseAppAdsGridType = ({ formatMessage, history, onPanelTrigger }) => {\r\n  const { publisher, account } = getAppStore();\r\n  const { adUnitsRaw } = getAdunitStore();\r\n  const adUnitsGridData = publisher && account ? adUnitsRaw.data || [] : [];\r\n\r\n  const NoResultComponent = (\r\n    <ZeroResults\r\n      showDefaultImage\r\n      title={formatMessage(messages.zeroAdUnitsTitle)}\r\n      description={formatMessage(messages.zeroAdUnitsDescription)}\r\n      buttonText={formatMessage(messages.zeroAdUnitsCallToAction)}\r\n      onButtonClick={() => history.push(getTythonAppAdunitCreationRoute())}\r\n    />\r\n  );\r\n\r\n  const columns: IGridV2Column[] = [\r\n    {\r\n      columnOrder: 2,\r\n      key: 'name',\r\n      fieldName: 'name',\r\n      name: formatMessage(messages.gridColumnTitleAppName),\r\n      minWidth: 100,\r\n      maxWidth: 125,\r\n      isSearchable: true,\r\n      isVisible: true,\r\n      isExportable: true,\r\n      isResizable: true,\r\n      suppressSorting: false,\r\n    },\r\n    {\r\n      columnOrder: 3,\r\n      key: 'id',\r\n      fieldName: 'id',\r\n      name: formatMessage(messages.gridColumnTitleAppId),\r\n      minWidth: 100,\r\n      maxWidth: 100,\r\n      isSearchable: true,\r\n      isVisible: true,\r\n      isExportable: true,\r\n      isResizable: true,\r\n    },\r\n    {\r\n      columnOrder: 4,\r\n      key: 'connectedApp',\r\n      fieldName: 'connectedApp',\r\n      name: formatMessage(messages.gridColumnTitleConnectedApp),\r\n      minWidth: 150,\r\n      maxWidth: 150,\r\n      isSearchable: true,\r\n      isResizable: true,\r\n      isVisible: true,\r\n      isExportable: true,\r\n      onRender: (item: AdUnit) => {\r\n        const servingConfig = getGridPropertyStore()?.servingConfigs?.find((config) => item.propertyId === config.propertyId);\r\n        return servingConfig?.name;\r\n      },\r\n      exportFunction: (item: AdUnit) => {\r\n        const servingConfig = getGridPropertyStore()?.servingConfigs?.find((config) => item.propertyId === config.propertyId);\r\n        return servingConfig?.name;\r\n      },\r\n    },\r\n    {\r\n      columnOrder: 5,\r\n      key: 'platform',\r\n      fieldName: 'platform',\r\n      name: formatMessage(messages.gridColumnTitleAdUnitPlatform),\r\n      minWidth: 150,\r\n      maxWidth: 150,\r\n      isSearchable: true,\r\n      isResizable: true,\r\n      isVisible: true,\r\n      isExportable: true,\r\n      onRender: (item: AdUnit) => {\r\n        const servingConfig = getGridPropertyStore()?.servingConfigs?.find((config) => item.propertyId === config.propertyId);\r\n        return formatMessage(InventoryPlatformTypeLabel[servingConfig?.inventoryPlatformType!]);\r\n      },\r\n      exportFunction: (item: AdUnit) => {\r\n        const servingConfig = getGridPropertyStore()?.servingConfigs?.find((config) => item.propertyId === config.propertyId);\r\n        return formatMessage(InventoryPlatformTypeLabel[servingConfig?.inventoryPlatformType!]);\r\n      },\r\n    },\r\n    {\r\n      columnOrder: 6,\r\n      key: 'status',\r\n      fieldName: 'status',\r\n      name: formatMessage(messages.gridColumnTitleAppAdUnitStatus),\r\n      minWidth: 150,\r\n      maxWidth: 150,\r\n      isSearchable: true,\r\n      isResizable: true,\r\n      isVisible: true,\r\n      isExportable: true,\r\n    },\r\n    {\r\n      columnOrder: 8,\r\n      key: 'actions',\r\n      name: formatMessage(messages.gridColumnTitleActions),\r\n      minWidth: 150,\r\n      maxWidth: 150,\r\n      isSearchable: true,\r\n      isResizable: true,\r\n      isVisible: true,\r\n      isExportable: false,\r\n      onRender: (item: AdUnit) => {\r\n        const accessPermission = getAccessPermission(item);\r\n\r\n        const editAdUnitOptions = undefined;\r\n\r\n        const editButtonOnClick = () => history.push(`${getTythonAppAdunitEditionRoute(item.id)}`);\r\n        const isWindowRegularSize = true; // TODO: revisit responsive\r\n        return (\r\n          <div>\r\n            <CommandBarButton\r\n              id={`appAdunitCallout-${item.id}`}\r\n              styles={{ root: { background: 'transparent' } }}\r\n              iconProps={{ iconName: 'edit' }}\r\n              ariaLabel={formatMessage(AppMessages.edit)}\r\n              text={isWindowRegularSize ? formatMessage(AppMessages.edit) : ''}\r\n              menuProps={editAdUnitOptions}\r\n              disabled={!hasUpdateAccess(accessPermission)}\r\n              onClick={editButtonOnClick}\r\n            />\r\n            <CommandBarButton\r\n              styles={{ root: { background: 'transparent' } }}\r\n              iconProps={{ iconName: 'PasteAsCode' }}\r\n              ariaLabel={formatMessage(AppMessages.code)}\r\n              text={isWindowRegularSize ? formatMessage(AppMessages.code) : ''}\r\n              onClick={() => onPanelTrigger(true, item)}\r\n            />\r\n            <CommandBarButton\r\n              data-test-id={`grid-delete-action-${item.id}`}\r\n              styles={{ root: { background: 'transparent' } }}\r\n              iconProps={{ iconName: 'Delete' }}\r\n              text={isWindowRegularSize ? formatMessage(AppMessages.delete) : ''}\r\n              onClick={() => setDialogType(PopupType.DeleteConfirmation)}\r\n              disabled={!hasDeleteAccess(accessPermission)}\r\n            />\r\n          </div>\r\n        );\r\n      },\r\n    },\r\n  ];\r\n\r\n  const dataGridProps = {\r\n    gridV2Columns: columns,\r\n    shimmerLines: 10,\r\n    renderZeroItemsComponent: NoResultComponent,\r\n    setData: setAdUnitsData,\r\n    data: isTythonSelfServeUser()\r\n      ? adUnitsGridData.filter((adunit) =>\r\n          getGridPropertyStore()?.servingConfigs?.find(\r\n            (config) => config.propertyId === adunit.propertyId && config.inventoryPlatformType === InventoryPlatformType.UWP\r\n          )\r\n        )\r\n      : adUnitsGridData,\r\n  };\r\n\r\n  const commandBarItems: IBuildCommandBarProps<Model> = {\r\n    primaryButtonUrl: getTythonAppAdunitCreationRoute(),\r\n    primaryButtonLabel: messages.gridCreateButtonLabel,\r\n    includeActions: [CommandBarActions.new],\r\n    includeFarActions: [\r\n      CommandBarActions.searchBox,\r\n      CommandBarActions.addFilter,\r\n      CommandBarActions.code,\r\n      CommandBarActions.download,\r\n      CommandBarActions.modifyColumns,\r\n    ],\r\n    filterItems: getFilterItems(formatMessage, true),\r\n  };\r\n\r\n  return {\r\n    dataGridProps,\r\n    commandBarItems,\r\n  };\r\n};\r\n\r\nexport default useAppAdsGrid;\r\n","import React from 'react';\r\nimport { AdUnit, isTythonSelfServeUser } from '../../../../@data';\r\nimport { GridV2 } from '../../../../layout/GridPageV2';\r\nimport { injectRouterAndIntlWithObserver } from '../../../../utils';\r\nimport { getAdunitStore } from '../../Adunit/@data';\r\nimport { getGridPropertyStore } from '../../Property/Manage/__data__/store/store';\r\nimport { AppAdsManagePageType } from '../Manage/types';\r\nimport AppAdUnitCodePanel, { useAppAdUnitCodePanel } from './hooks/useAppAdUnitCodePanel';\r\nimport useAppAdsGrid from './hooks/useAppAdsGrid';\r\nimport messages from './messages';\r\n\r\nconst AppAdsManagePage: AppAdsManagePageType = ({ intl: { formatMessage }, match, history, location }) => {\r\n  const { adUnitsRaw } = getAdunitStore();\r\n  const adUnitPanelProps = useAppAdUnitCodePanel();\r\n  const { dataGridProps, commandBarItems } = useAppAdsGrid({ formatMessage, history, onPanelTrigger: adUnitPanelProps.onPanelTrigger });\r\n  const adUnitsGridReady = isTythonSelfServeUser()\r\n    ? !adUnitsRaw.isLoading && !getGridPropertyStore().isFetchingPropertyStatus\r\n    : !adUnitsRaw.isLoading;\r\n\r\n  return (\r\n    <div>\r\n      <AppAdUnitCodePanel {...adUnitPanelProps} />\r\n      <GridV2\r\n        history={history}\r\n        location={location}\r\n        match={match}\r\n        entity={AdUnit}\r\n        pageTitle={{ title: formatMessage(messages.appAdunitManagePageGridTitle), helpId: 'pop_PCv4_AdUnits' }}\r\n        isGridReady={adUnitsGridReady}\r\n        dataGridProps={dataGridProps}\r\n        commandBarProps={commandBarItems}\r\n        paginationProps={{\r\n          shouldGridHandlePagination: true,\r\n        }}\r\n      />\r\n    </div>\r\n  );\r\n};\r\n\r\nexport default injectRouterAndIntlWithObserver(AppAdsManagePage);\r\n","import React, { useEffect } from 'react';\r\nimport { getAppStore } from '../../../../@data';\r\nimport EntityTypeSwitch from '../../../../components/EntityTypeSwitch';\r\nimport { InventoryPageTabs, useEntityTypeManage } from '../../../../hooks/useEntityTypeManage';\r\nimport { getStore as getWindowsAppFeatureFlagStore } from '../../../../hooks/useWindowsAppFeatureFlag/store/store';\r\nimport { GridPageLayout } from '../../../../layout/GridPageLayout/GridPageLayout';\r\nimport { injectRouterWithIntl } from '../../../../utils';\r\nimport { onManagePageInitialized } from '../../Adunit/@data/actions';\r\nimport { ManagePage } from '../../Adunit/Manage/ManagePage';\r\nimport AppAdsManagePage from './AppAdsManagePage';\r\nimport messages from './messages';\r\n\r\nexport const TythonAppManagePage = injectRouterWithIntl(({ history, match, location, intl: { formatMessage } }) => {\r\n  const { isFeatureEnabled } = getWindowsAppFeatureFlagStore();\r\n  const { activeSubTab, setActiveSubTab } = useEntityTypeManage({ isFeatureEnabled });\r\n  const SiteAdsManageView = <ManagePage withParentLayout history={history} match={match} location={location} abortDataFetch />;\r\n  const AppAdsManageView = <AppAdsManagePage />;\r\n  const { publisher, account } = getAppStore();\r\n\r\n  useEffect(() => {\r\n    if (publisher && account) {\r\n      onManagePageInitialized();\r\n    }\r\n  }, [publisher, account]);\r\n\r\n  return (\r\n    <GridPageLayout withSubHeader>\r\n      <EntityTypeSwitch\r\n        selectedValue={activeSubTab}\r\n        onTabSelect={setActiveSubTab}\r\n        siteTabLabel={formatMessage(messages.siteTabLabel)}\r\n        appTabLabel={formatMessage(messages.appTabLabel)}\r\n        isFeatureEnabled={isFeatureEnabled}\r\n      />\r\n      {activeSubTab === InventoryPageTabs.Sites ? SiteAdsManageView : <></>}\r\n      {activeSubTab === InventoryPageTabs.Apps ? AppAdsManageView : <></>}\r\n    </GridPageLayout>\r\n  );\r\n});\r\n","import { mutator } from 'satcheljs';\r\nimport { AdUnit } from '../../../../../@data';\r\nimport { mergeTypeWithObject } from '../../../../../utils';\r\nimport { onAdunitChanged, onAdunitErrorChanged, onAdunitMediationUpdateEnd, onAdunitMediationUpdateStart, onRawChanged } from '../actions/';\r\nimport { getAdunitStore } from '../store/store';\r\n\r\nmutator(onRawChanged, (msg) => {\r\n  getAdunitStore().raw = mergeTypeWithObject(new AdUnit(), msg.value);\r\n});\r\n\r\nmutator(onAdunitChanged, (msg) => {\r\n  getAdunitStore().active = msg.adunit;\r\n});\r\n\r\nmutator(onAdunitErrorChanged, (msg) => {\r\n  getAdunitStore().errors = msg.values || {};\r\n});\r\n\r\nmutator(onAdunitMediationUpdateStart, (msg) => {\r\n  getAdunitStore().mediationUpdatePool = [...getAdunitStore().mediationUpdatePool, ...msg.ids];\r\n});\r\n\r\nmutator(onAdunitMediationUpdateEnd, (msg) => {\r\n  getAdunitStore().mediationUpdatePool = getAdunitStore().mediationUpdatePool.filter((id) => !msg.ids.includes(id));\r\n});\r\n","import { mutator } from 'satcheljs';\r\nimport { AdUnitMarketClassification, AdUnitServingTier, PublisherGroupConfig } from '../../../../../@data';\r\nimport {\r\n  onAdUnitFormSubmittable,\r\n  onAdunitChannelListChanged,\r\n  onAdunitIdChanged,\r\n  onAdunitNameChanged,\r\n  onAdunitPropertyListChanged,\r\n  onAdunitTypeChanged,\r\n  onAssociatedPropertyChanged,\r\n  onBusinessModelChanged,\r\n  onChannelsChanged,\r\n  onCreatePropertyPanelOpenChanged,\r\n  onDistributionPartnerCodesChanged,\r\n  onFormCleared,\r\n  onImpressionFeedbackSignalChanged,\r\n  onMarketplaceChanged,\r\n  onPubGroupConfigChanged,\r\n  onServingTierChanged,\r\n  onStoreIdsChanged,\r\n} from '../actions';\r\nimport { getAdunitStore } from '../store/store';\r\n\r\nmutator(onAdunitIdChanged, (msg) => {\r\n  getAdunitStore().active.id = msg.value;\r\n});\r\n\r\nmutator(onAdunitNameChanged, (msg) => {\r\n  getAdunitStore().active.name = msg.value;\r\n});\r\n\r\nmutator(onAdunitTypeChanged, (msg) => {\r\n  getAdunitStore().active.adUnitType = msg.value;\r\n});\r\n\r\nmutator(onMarketplaceChanged, (msg) => {\r\n  getAdunitStore().active.marketClassification = msg.value.key as AdUnitMarketClassification;\r\n});\r\n\r\nmutator(onBusinessModelChanged, (msg) => {\r\n  if (msg.value) {\r\n    getAdunitStore().active.businessModel = parseInt(msg.value.key.toString(), 10);\r\n  }\r\n});\r\n\r\nmutator(onChannelsChanged, (msg) => {\r\n  getAdunitStore().active.channelsSelected = msg.values;\r\n});\r\n\r\nmutator(onAdunitChannelListChanged, (msg) => {\r\n  getAdunitStore().active.channels = msg.values;\r\n});\r\n\r\nmutator(onAssociatedPropertyChanged, (msg) => {\r\n  getAdunitStore().active.propertySelected = msg.value;\r\n});\r\n\r\nmutator(onAdunitPropertyListChanged, (msg) => {\r\n  getAdunitStore().active.properties = msg.values;\r\n});\r\n\r\nmutator(onCreatePropertyPanelOpenChanged, (msg) => {\r\n  getAdunitStore().active.createPropertyPanelOpen = msg.isOpen;\r\n});\r\n\r\nmutator(onServingTierChanged, (msg) => {\r\n  if (msg.value) {\r\n    getAdunitStore().active.servingTier = msg.value.key as AdUnitServingTier;\r\n  }\r\n});\r\n\r\nmutator(onAdUnitFormSubmittable, (msg) => {\r\n  getAdunitStore().isSubmittable = msg.isSubmittable;\r\n});\r\n\r\nmutator(onPubGroupConfigChanged, (msg) => {\r\n  if (msg.value) {\r\n    getAdunitStore().active.publisherGroupConfig = msg.value.key as PublisherGroupConfig;\r\n  }\r\n});\r\n\r\nmutator(onStoreIdsChanged, (msg) => {\r\n  getAdunitStore().active.storeIds = msg.values;\r\n});\r\n\r\nmutator(onFormCleared, () => {\r\n  getAdunitStore().active = {};\r\n  getAdunitStore().template = undefined;\r\n});\r\n\r\nmutator(onDistributionPartnerCodesChanged, (msg) => {\r\n  if (msg.value) {\r\n    getAdunitStore().active.distributionPartnerCodes = msg.value;\r\n  }\r\n});\r\n\r\nmutator(onImpressionFeedbackSignalChanged, (msg) => {\r\n  getAdunitStore().active.isImpressionFeedbackRequired = !!msg.value;\r\n});\r\n","import { mutator } from 'satcheljs';\r\nimport { onPanelOpenChanged } from '../actions';\r\nimport { getAdunitStore } from '../store/store';\r\n\r\nmutator(onPanelOpenChanged, (msg) => {\r\n  getAdunitStore().isPanelOpen = msg.isPanelOpen;\r\n  getAdunitStore().scriptProps = { propertyId: msg.activePropertyId!, adunitId: msg.activeAdUnitId! };\r\n});\r\n","import { when } from 'mobx';\r\nimport { orchestrator } from 'satcheljs';\r\nimport { Log } from '../../../../../../logging/src';\r\nimport { getAppStore } from '../../../../../@data';\r\nimport { onPopupOpenChanged, showErrorToastNotification } from '../../../../../@data/mutatorActions';\r\nimport { AdSenseOAuthStatus } from '../../../../../@data/store/schema/enums/AdSenseOAuthStatus';\r\nimport { PopupType } from '../../../../../@data/store/schema/enums/PopupType';\r\nimport { getGoogleAdSenseStore } from '../../../Account/Settings/components/GoogleConnector/@data';\r\nimport { onInitializeGoogleAccount } from '../../../Account/Settings/components/GoogleConnector/@data/actions';\r\nimport messages from '../../Manage/ManagePage.messages';\r\nimport { fetchAdUnitMediationStatus } from '../actions';\r\nimport { onAdSenseMediationToggleChanged } from '../mutatorActions';\r\nimport { fetchAdunitMediationStatus } from '../services/AdunitService';\r\n\r\norchestrator(fetchAdUnitMediationStatus, async ({ adUnitId, showLoadingSpinner = false, showNotifications = true }) => {\r\n  const { publisher, account } = getAppStore();\r\n\r\n  if (publisher && account) {\r\n    let adSenseConnectionState = AdSenseOAuthStatus.Success.toString();\r\n\r\n    onInitializeGoogleAccount(false);\r\n    await when(() => {\r\n      const { active: googleAdSense } = getGoogleAdSenseStore();\r\n\r\n      if (!!googleAdSense.connectionStatus) {\r\n        adSenseConnectionState = googleAdSense.connectionStatus;\r\n      }\r\n\r\n      return !!googleAdSense.connectionStatus;\r\n    });\r\n\r\n    if (adSenseConnectionState === AdSenseOAuthStatus.None.toString() && showNotifications) {\r\n      showErrorToastNotification({ textMessageDescriptor: messages.noConnectionWithAdSense });\r\n      return;\r\n    }\r\n\r\n    try {\r\n      const list = await fetchAdunitMediationStatus(publisher, account, adUnitId);\r\n\r\n      if (list[0].mediationStatus) {\r\n        onAdSenseMediationToggleChanged(true);\r\n      } else {\r\n        onAdSenseMediationToggleChanged(false);\r\n        if (showNotifications) {\r\n          showErrorToastNotification({ textMessageDescriptor: messages.failedToFetchAdSenseAdunit });\r\n        }\r\n      }\r\n    } catch (error) {\r\n      onAdSenseMediationToggleChanged(false);\r\n      if (showNotifications) {\r\n        showErrorToastNotification({ textMessageDescriptor: messages.failedToFetchAdSenseAdunit });\r\n      }\r\n      Log.error(`Error while fetching connected adSense's adUnit: ${error}`);\r\n    } finally {\r\n      if (showLoadingSpinner) {\r\n        onPopupOpenChanged(PopupType.None);\r\n      }\r\n    }\r\n  } else {\r\n    onAdSenseMediationToggleChanged(false);\r\n    showErrorToastNotification({ textMessageDescriptor: messages.failedToFetchAdSenseAdunit });\r\n  }\r\n});\r\n","import { orchestrator } from 'satcheljs';\r\nimport { Account, getAppStore, Publisher, showErrorToastNotification } from '../../../../../@data';\r\nimport { setPublisherAndAccountContext } from '../../../@data/services/AdManagementService';\r\nimport messages from '../../Manage/ManagePage.messages';\r\nimport { onAdunitChanged, onAdunitErrorChanged, onFetchAdUnitName, onRawChanged } from '../actions';\r\nimport { fetchAdunitById } from '../services/AdunitService';\r\nimport { IAdunitViewModel } from '../store/schema';\r\n\r\norchestrator(onFetchAdUnitName, async ({ publisherId, accountId, entityId, setIsLoading }) => {\r\n  const { userContext } = getAppStore();\r\n  const viewModel: IAdunitViewModel = {};\r\n  const parsedPublisherId = parseInt(publisherId, 10);\r\n  const parsedAccountId = parseInt(accountId, 10);\r\n\r\n  if (!isNaN(parsedPublisherId) && !isNaN(parsedAccountId) && entityId) {\r\n    const publisher = new Publisher(parsedPublisherId);\r\n    const account = new Account(parsedAccountId);\r\n\r\n    try {\r\n      setPublisherAndAccountContext(publisher, account);\r\n      onAdunitErrorChanged();\r\n      setIsLoading(true);\r\n      const raw = await fetchAdunitById(publisher, entityId, userContext);\r\n\r\n      viewModel.id = raw.id;\r\n      viewModel.name = String(raw.name);\r\n\r\n      onRawChanged(raw);\r\n      onAdunitChanged(viewModel);\r\n    } catch (e) {\r\n      showErrorToastNotification({ textMessageDescriptor: messages.failedToLoadAdunit });\r\n    } finally {\r\n      setIsLoading(false);\r\n    }\r\n  } else {\r\n    showErrorToastNotification({ textMessageDescriptor: messages.failedToLoadAdunit });\r\n  }\r\n});\r\n","import { mutatorAction } from 'satcheljs';\r\nimport { NativeAdTemplate } from '../../../../../@data';\r\nimport { getAdunitStore } from '../store/store';\r\n\r\nexport const setTemplate = mutatorAction('setTemplate', (template: NativeAdTemplate) => {\r\n  getAdunitStore().template = template;\r\n});\r\n","import { orchestrator } from 'satcheljs';\r\nimport { AdUnit, getAppStore, listEntity, NativeAdTemplate, onLoadingChanged, showErrorToastNotification } from '../../../../../@data';\r\nimport messages from '../../Manage/ManagePage.messages';\r\nimport { onFetchAdUnitTemplate } from '../actions';\r\nimport { setTemplate } from '../mutatorActions/setAdUnitTemplate';\r\n\r\norchestrator(onFetchAdUnitTemplate, async ({ entityId }) => {\r\n  const { publisher, account, userContext } = getAppStore();\r\n\r\n  if (publisher && account && entityId) {\r\n    const adUnit = new AdUnit(entityId);\r\n    onLoadingChanged(true);\r\n\r\n    try {\r\n      const template = await listEntity([publisher, adUnit], userContext, NativeAdTemplate);\r\n      if (template.length !== 0) {\r\n        const adUnitid = +(entityId ?? 0);\r\n        template[0].adUnitId = adUnitid;\r\n        setTemplate(template[0]);\r\n      }\r\n    } catch (e) {\r\n      showErrorToastNotification({ textMessageDescriptor: messages.adunitTemplateFailedToLoad });\r\n    } finally {\r\n      onLoadingChanged(false);\r\n    }\r\n  } else {\r\n    showErrorToastNotification({ textMessageDescriptor: messages.adunitTemplateFailedToLoad });\r\n  }\r\n});\r\n","import { action, orchestrator } from 'satcheljs';\r\nimport { getAppStore, isTythonSelfServeUser } from '../../../../../@data';\r\nimport { fetchPropertiesServingConfigs } from '../../../AdBlock/@data/services';\r\nimport { setPropertiesFetching, setPropertiesServingConfigs } from '../../Manage/__data__/mutatorActions';\r\n\r\nexport const loadPropertiesServingConfigs = action('loadPropertiesServingConfigs');\r\n\r\norchestrator(loadPropertiesServingConfigs, async () => {\r\n  const { publisher } = getAppStore();\r\n\r\n  if (publisher && isTythonSelfServeUser()) {\r\n    setPropertiesFetching(true);\r\n    const propertyServingConfig = await fetchPropertiesServingConfigs(publisher);\r\n    setPropertiesServingConfigs(propertyServingConfig);\r\n    setPropertiesFetching(false);\r\n  }\r\n});\r\n","import { action, orchestrator } from 'satcheljs';\r\nimport { Log } from '../../../../../../logging/src';\r\nimport { Property, getAppStore, listEntity, showErrorToastNotification } from '../../../../../@data';\r\nimport { setLoading, setPropertyData } from '../../Manage/__data__/mutatorActions';\r\nimport messages from '../../Property.messages';\r\nimport { loadPropertiesServingConfigs } from './loadPropertyServingConfigs';\r\n\r\nexport const fetchPropertiesDataAction = action('fetchPropertiesDataAction');\r\n\r\norchestrator(fetchPropertiesDataAction, async () => {\r\n  try {\r\n    const { publisher, userContext } = getAppStore();\r\n    if (!publisher) {\r\n      return;\r\n    }\r\n\r\n    setLoading(true);\r\n    const data = await listEntity([publisher], userContext, Property);\r\n    setPropertyData(data);\r\n    loadPropertiesServingConfigs();\r\n  } catch (error) {\r\n    Log.error(error);\r\n    showErrorToastNotification({ textMessageDescriptor: messages.failedToLoadSites });\r\n  } finally {\r\n    setLoading(false);\r\n  }\r\n});\r\n","import { orchestrator } from 'satcheljs';\r\nimport { Log } from '../../../../../../logging/src';\r\nimport { AdUnit, getAppStore, isTythonSelfServeUser, listEntity, putEntity, showErrorToastNotification } from '../../../../../@data';\r\nimport { AdSenseOAuthStatus } from '../../../../../@data/store/schema/enums/AdSenseOAuthStatus';\r\nimport { AdSenseAdUnitStatus } from '../../../../../@data/store/schema/models/AdSenseAdUnitStatus';\r\nimport { getGoogleAdSenseStore } from '../../../Account/Settings/components/GoogleConnector/@data';\r\nimport { loadPropertiesServingConfigs } from '../../../Property/@data/orchestrators';\r\nimport messages from '../../Manage/ManagePage.messages';\r\nimport { fetchAdUnitsDataAction } from '../actions';\r\nimport { setAdUnitsData, setAdUnitsDataFetching, setAdUnitsLoading, setAdUnitsMediationFetching } from '../mutatorActions';\r\nimport { getAdunitStore } from '../store/store';\r\n\r\norchestrator(fetchAdUnitsDataAction, async () => {\r\n  try {\r\n    const { publisher, userContext, account } = getAppStore();\r\n    const { adUnitsRaw } = getAdunitStore();\r\n\r\n    if (!publisher) {\r\n      return;\r\n    }\r\n\r\n    if (publisher && account) {\r\n      // make a get request\r\n      setAdUnitsDataFetching(true);\r\n      if (adUnitsRaw.data === undefined || adUnitsRaw.data.length === 0) {\r\n        setAdUnitsLoading(true);\r\n      }\r\n      const params = new URLSearchParams([['extendedInfo', 'true']]);\r\n      const data = await listEntity([publisher, account], userContext, AdUnit, params);\r\n      data.forEach((adUnit) => {\r\n        if (!!adUnit.creationDate) {\r\n          adUnit.creationDate = new Date(adUnit.creationDate).toISOString();\r\n        }\r\n      });\r\n      if (!!adUnitsRaw.data?.[0]?.mediatedWithAdSense) {\r\n        data?.forEach((adUnit) => {\r\n          const adUnitStatus = adUnitsRaw.data?.find((item) => item.id === Number(adUnit.id))?.mediatedWithAdSense;\r\n          if (adUnitStatus) {\r\n            adUnit.mediatedWithAdSense = adUnitStatus;\r\n          }\r\n        });\r\n      }\r\n      data.sort((a, b) => {\r\n        if (a.creationDate && b.creationDate) {\r\n          return new Date(b.creationDate).getTime() - new Date(a.creationDate).getTime();\r\n        }\r\n        return 0;\r\n      });\r\n      setAdUnitsData(data);\r\n\r\n      // Fetch adunit serving configs\r\n      if (isTythonSelfServeUser()) {\r\n        // We need property serving config to derive final adunit serving status\r\n        loadPropertiesServingConfigs();\r\n      }\r\n\r\n      const { active } = getGoogleAdSenseStore();\r\n\r\n      try {\r\n        if (active.connectionStatus === AdSenseOAuthStatus.Success && active.isMediationEnabled) {\r\n          setAdUnitsMediationFetching(true);\r\n          const adUnitIds = data?.map((item) => item.id.toString()) as string[];\r\n          if (adUnitIds && adUnitIds.length !== 0) {\r\n            const request: AdSenseAdUnitStatus = {\r\n              apiPath: 'preauth/mediation',\r\n              className: 'getAdUnitMediationStatus',\r\n              pubcenterAdUnitIds: adUnitIds.map((id) => Number.parseInt(id, 10)),\r\n            };\r\n\r\n            const urlParams = new URLSearchParams();\r\n            urlParams.append('routeSuffix', 'api/mediation/admanager/getAdUnitMediationStatus');\r\n            // Set the type as any because the PUT operation in ApiService only\r\n            // returns singular item and this request for AdUnits mediation status returns array\r\n            // TODO: this call shouldn't be put call\r\n            // TODO: put operation should support array of objects as a response\r\n            // tslint:disable-next-line: no-any\r\n            const response = (await putEntity([], request, undefined, AdSenseAdUnitStatus, urlParams)) as any;\r\n\r\n            if (response) {\r\n              data?.forEach((adUnit) => {\r\n                const adUnitStatus = response.find((pubcenterAdUnitId) => pubcenterAdUnitId.pubcenterAdUnitId === Number(adUnit.id));\r\n                if (adUnitStatus) {\r\n                  adUnit.mediatedWithAdSense = adUnitStatus;\r\n                }\r\n              });\r\n            }\r\n          }\r\n        }\r\n      } catch (error) {\r\n        Log.error(error);\r\n        data?.forEach((adUnit) => {\r\n          adUnit.mediatedWithAdSense = {\r\n            apiPath: 'preauth/mediation',\r\n            className: 'getAdUnitMediationStatus',\r\n            mediationStatus: false,\r\n          };\r\n        });\r\n        showErrorToastNotification({ textMessageDescriptor: messages.failedToLoadAdunitsMediationStatus });\r\n      }\r\n\r\n      setAdUnitsData(data);\r\n      // set the response data in adUnitsRaw.data\r\n    }\r\n  } catch (error) {\r\n    Log.error(error);\r\n    showErrorToastNotification({ textMessageDescriptor: messages.failedToLoadAdunits });\r\n  } finally {\r\n    setAdUnitsLoading(false);\r\n    setAdUnitsMediationFetching(false);\r\n    setAdUnitsDataFetching(false);\r\n  }\r\n});\r\n","import { orchestrator } from 'satcheljs';\r\nimport { onFormCancelled, onFormCleared } from '../actions';\r\n\r\norchestrator(onFormCancelled, () => {\r\n  onFormCleared();\r\n});\r\n","import { MessageBarType } from '@fluentui/react';\r\nimport { orchestrator } from 'satcheljs';\r\nimport {\r\n  Account,\r\n  AdUnit,\r\n  AdUnitMarketClassification,\r\n  AdUnitType,\r\n  Channel,\r\n  getAppStore,\r\n  listEntity,\r\n  NativeAdTemplate,\r\n  onLoadingChanged,\r\n  onNotificationChanged,\r\n  Property,\r\n  Publisher,\r\n  PublisherGroupConfig,\r\n  showErrorToastNotification,\r\n} from '../../../../../@data';\r\nimport { getAdUnitTaxonomyValues } from '../../../../../@data/services/MetadataService';\r\nimport { isTythonSelfServeUser } from '../../../../../@data/utils/checkUserType';\r\nimport { FormState } from '../../../../../components/Form';\r\nimport { IIdNamePair } from '../../../../../components/MultiSelectPicker';\r\nimport { setPublisherAndAccountContext } from '../../../@data/services/AdManagementService';\r\nimport messages from '../../Manage/ManagePage.messages';\r\nimport { onAdunitChanged, onAdunitErrorChanged, onFormInitialized, onRawChanged } from '../actions';\r\nimport { onAdunitEnablePrivateMarketplaceChanged } from '../mutatorActions';\r\nimport { fetchAdunitById, fetchAdunitMediationStatus } from '../services/AdunitService';\r\nimport { IAdunitViewModel } from '../store/schema';\r\n\r\norchestrator(onFormInitialized, async ({ mode, publisherId, accountId, entityId, showLoadingSpinner = true }) => {\r\n  const { userContext } = getAppStore();\r\n\r\n  const viewModel: IAdunitViewModel = {\r\n    channels: [],\r\n    marketClassification: AdUnitMarketClassification.Syndicated,\r\n    publisherGroupConfig: PublisherGroupConfig.DefaultPlus,\r\n  };\r\n\r\n  const parsedPublisherId = parseInt(publisherId, 10);\r\n  const parsedAccountId = parseInt(accountId, 10);\r\n  const tythonRole = isTythonSelfServeUser();\r\n\r\n  if (!isNaN(parsedPublisherId) && !isNaN(parsedAccountId)) {\r\n    const publisher = new Publisher(parsedPublisherId);\r\n    let account = new Account(parsedAccountId);\r\n\r\n    try {\r\n      setPublisherAndAccountContext(publisher, account);\r\n\r\n      onAdunitErrorChanged();\r\n      if (showLoadingSpinner) {\r\n        onLoadingChanged(true);\r\n      }\r\n\r\n      if (mode !== FormState.Edit && mode !== FormState.InPageEdit) {\r\n        let response;\r\n\r\n        if (tythonRole) {\r\n          response = await Promise.all([listEntity([publisher], userContext, Property)]);\r\n          viewModel.properties = response[0];\r\n          viewModel.adUnitType = AdUnitType.Native;\r\n        } else {\r\n          response = await Promise.all([\r\n            listEntity([publisher, account], userContext, Channel),\r\n            listEntity([publisher], userContext, Property),\r\n          ]);\r\n          viewModel.channels = response[0] ? response[0].map((f) => ({ id: f.id, name: f.name } as IIdNamePair)) : [];\r\n          viewModel.properties = response[1];\r\n        }\r\n      }\r\n\r\n      viewModel.adUnitTaxonomyValues = await getAdUnitTaxonomyValues();\r\n\r\n      if (\r\n        (mode === FormState.Edit ||\r\n          mode === FormState.InPageEdit ||\r\n          mode === FormState.MultiStepCreation ||\r\n          mode === FormState.MultiStepEdit) &&\r\n        entityId\r\n      ) {\r\n        const raw = await fetchAdunitById(publisher, entityId, userContext);\r\n\r\n        account = new Account(raw.accountId);\r\n\r\n        let response;\r\n\r\n        if (tythonRole) {\r\n          response = await Promise.all([\r\n            listEntity([publisher], userContext, Property),\r\n            fetchAdunitMediationStatus(publisher, account, entityId),\r\n          ]);\r\n\r\n          viewModel.properties = response[0];\r\n          viewModel.adUnitType = AdUnitType.Native;\r\n          viewModel.adSenseMediationToggle = response[1][0].mediationStatus;\r\n          viewModel.adSenseMediationStatus = response[1][0].mediationStatus;\r\n        } else {\r\n          const adUnit = new AdUnit(entityId);\r\n\r\n          response = await Promise.all([\r\n            listEntity([publisher, account], userContext, Channel),\r\n            listEntity([publisher], userContext, Property),\r\n          ]);\r\n\r\n          try {\r\n            const isBoost = sessionStorage.getItem('IsBoostPublisher');\r\n            if (isBoost === 'true') {\r\n              const template = await listEntity([publisher, adUnit], userContext, NativeAdTemplate);\r\n              if (template && template.length > 0) {\r\n                const adUnitid = +(entityId ?? 0);\r\n                template[0].adUnitId = adUnitid;\r\n                viewModel.BoostTemplate = template[0];\r\n              }\r\n            }\r\n          } catch (e) {\r\n            showErrorToastNotification({ textMessageDescriptor: messages.adunitTemplateFailedToLoad });\r\n          }\r\n\r\n          viewModel.channels = response[0] ? response[0].map((f) => ({ id: f.id, name: f.name } as IIdNamePair)) : [];\r\n          viewModel.channelsSelected = raw.channelIds ? viewModel.channels?.filter((c) => raw.channelIds.includes(c.id)) : [];\r\n          viewModel.properties = response[1];\r\n        }\r\n\r\n        const enablePrivateMarketplace = raw.storeIds ? raw.storeIds.length !== 0 : false;\r\n\r\n        viewModel.id = raw.id;\r\n        viewModel.name = String(raw.name);\r\n        viewModel.marketClassification = raw.classification ? raw.classification.marketClassification : undefined;\r\n        viewModel.existingFinancialClassification = raw.classification ? raw.classification.financialClassification : undefined;\r\n\r\n        viewModel.businessModel = raw.attributes ? raw.attributes.Taxonomy : undefined;\r\n        viewModel.isImpressionFeedbackRequired = !!raw.requireImpressionFeedbackForBillableTraffic;\r\n\r\n        viewModel.publisherGroupConfig = raw.publisherGroupConfiguration;\r\n        viewModel.servingTier = raw.servingCostTier;\r\n\r\n        if (raw.partnerCodes) {\r\n          viewModel.distributionPartnerCodes = raw.partnerCodes.join('\\n');\r\n        }\r\n\r\n        viewModel.propertySelected = raw.propertyId ? viewModel.properties?.filter((p) => p.id === raw.propertyId)[0] : undefined;\r\n\r\n        if (raw.storeIds) {\r\n          viewModel.storeIds = raw.storeIds.join('\\n');\r\n        }\r\n\r\n        onRawChanged(raw);\r\n        onAdunitEnablePrivateMarketplaceChanged(enablePrivateMarketplace);\r\n      } else {\r\n        onRawChanged();\r\n        onAdunitEnablePrivateMarketplaceChanged(false);\r\n      }\r\n\r\n      onAdunitChanged(viewModel);\r\n    } catch (e) {\r\n      showErrorToastNotification({ textMessageDescriptor: messages.adunitDetailsFailedToLoad });\r\n    } finally {\r\n      if (showLoadingSpinner) {\r\n        onLoadingChanged(false);\r\n      }\r\n    }\r\n  } else {\r\n    onNotificationChanged({\r\n      textMessageDescriptor: messages.createAdunitInvalidState,\r\n      messageBarType: MessageBarType.severeWarning,\r\n    });\r\n  }\r\n});\r\n","import { IBreadcrumbStyleProps, IBreadcrumbStyles, IStyle, IStyleFunctionOrObject, ITheme } from '@fluentui/react';\r\nimport { ReactElement } from 'react';\r\nimport { InjectedIntlProps } from 'react-intl';\r\nimport { FormState, IFormEditParams } from '../../components/Form';\r\nimport { IFormTitleStyleProps, IFormTitleStyles } from '../../components/Form/FormTitle';\r\nimport { StepperDirection } from '../../components/Stepper/Stepper.types';\r\nimport { IRouterWithIntl } from '../../utils';\r\n\r\nexport enum StepState {\r\n  Empty,\r\n  Dirty\r\n}\r\n\r\nexport interface IStepperStep {\r\n  name: string;\r\n  helpId?: string;\r\n  component: ReactElement;\r\n  nextBtnLbl?: string;\r\n  previousBtnLbl?: string;\r\n  submitButtonDisabled?: boolean;\r\n  allowFreeNavigation?: boolean;\r\n  freeNavigationErrorMessage?: string;\r\n  hideStep?: boolean;\r\n  isNextDisabled?: boolean;\r\n  isStepDirty?: boolean;\r\n  extraButtons?:  ReactElement[];\r\n  /** In case we need some additional actions for next/previous buttons prior to changing current step */\r\n  onNext?: (action: () => void, stepState: StepState) => void;\r\n  onPrevious?: () => void;\r\n  title?:string\r\n}\r\n\r\nexport interface IDetailPageWithStepperProps extends InjectedIntlProps, IRouterWithIntl<IFormEditParams> {\r\n  process: string,\r\n  steps: IStepperStep[],\r\n  pageMode: FormState;\r\n  backToBase: () => void,\r\n  openStep?: number,\r\n  direction?: StepperDirection,\r\n  styles?: Partial<IDetailPageWithStepperStyles>;\r\n}\r\n\r\nexport interface IDetailPageWithStepperStyleProps {\r\n  theme: ITheme;\r\n  pageMode?: FormState;\r\n  direction?: StepperDirection,\r\n}\r\n\r\nexport interface IDetailPageWithStepperStyles {\r\n  root: IStyle;\r\n  navBackButton?: IStyle;\r\n  scrollablePanel?: IStyle;\r\n  content?: IStyle;\r\n  buttons?: IStyle;\r\n  subComponentStyles: {\r\n    formTitle?: IStyleFunctionOrObject<IFormTitleStyleProps, IFormTitleStyles>;\r\n    breadcrumb?: IStyleFunctionOrObject<IBreadcrumbStyleProps, IBreadcrumbStyles>;\r\n  };\r\n  mainContainer?: IStyle;\r\n  leftPane?: IStyle;\r\n  rightPane?: IStyle;\r\n}\r\n","import { defineMessages } from 'react-intl';\r\n\r\nexport default defineMessages({\r\n  adunitId: {\r\n    id: 'adunit.id',\r\n    defaultMessage: 'Ad unit ID',\r\n  },\r\n  uploadBoostTemplate: {\r\n    id: 'upload.message',\r\n    defaultMessage: 'Upload Configuration File',\r\n  },\r\n  downloadTemplate: {\r\n    id: 'download.template',\r\n    defaultMessage: 'Download Current Template',\r\n  },\r\n  adunitType: {\r\n    id: 'adunit.type',\r\n    defaultMessage: 'Ad unit type',\r\n  },\r\n  marketPlaceOptionCore: {\r\n    id: 'marketeplace.core',\r\n    defaultMessage: 'Owned and Operated(Core)',\r\n  },\r\n  marketPlaceOptionRest: {\r\n    id: 'marketeplace.rest',\r\n    defaultMessage: 'Owned and Operated(Rest)',\r\n  },\r\n  marketPlaceOptionSyndicated: {\r\n    id: 'marketeplace.syndicated',\r\n    defaultMessage: 'Syndicated',\r\n  },\r\n  marketPlaceOptionSelectTier: {\r\n    id: 'marketplace.selectTier',\r\n    defaultMessage: 'Select Tier',\r\n  },\r\n  marketPlaceOptionsSponsored: {\r\n    id: 'marketplace.sponsored',\r\n    defaultMessage: 'Sponsored',\r\n  },\r\n  marketPlaceOptionsSponsoredEnhanced: {\r\n    id: 'marketplace.sponsoredEnhanced',\r\n    defaultMessage: 'Sponsored Enhanced',\r\n  },\r\n  adunitNameLabel: {\r\n    id: 'adunitName.label',\r\n    defaultMessage: 'Ad unit name',\r\n  },\r\n  adunitIdLabel: {\r\n    id: 'adunit.id',\r\n    defaultMessage: 'Ad unit ID',\r\n  },\r\n  marketplaceLabel: {\r\n    id: 'marketpalce.label',\r\n    defaultMessage: 'Marketplace classfication',\r\n  },\r\n  businessModelLabel: {\r\n    id: 'businessmodel.label',\r\n    defaultMessage: 'Business model',\r\n  },\r\n  businessModelLevel2AriaLabel: {\r\n    id: 'businessmodel.level2Arialabel',\r\n    defaultMessage: 'Business model level 2',\r\n  },\r\n  distributionPartnerCodesLabel: {\r\n    id: 'distributionPartnerCodes.label',\r\n    defaultMessage: 'Search Distribution Partner Codes',\r\n  },\r\n  distributionPartnerCodesLabelDescription: {\r\n    id: 'distributionPartnerCodesDescription.label',\r\n    defaultMessage: 'Please list the Distribution Partner Codes above, with one code per line',\r\n  },\r\n  distributionPartnerCodesTextfieldPlaceholder: {\r\n    id: 'distributionPartnerCodes.textfield.placeholder',\r\n    defaultMessage: 'ExamplePC01\\nExamplePC02\\nExamplePC03',\r\n  },\r\n  createPageTitle: {\r\n    id: 'create.page.title',\r\n    defaultMessage: 'Create ad unit',\r\n  },\r\n  editPageTitle: {\r\n    id: 'edit.page.title',\r\n    defaultMessage: 'Edit ad unit',\r\n  },\r\n  updateAdUnit: {\r\n    id: 'adunit.updateAdunit',\r\n    defaultMessage: 'Update ad unit',\r\n  },\r\n  continueAdUnit: {\r\n    id: 'adunit.continueAdunit',\r\n    defaultMessage: 'Continue',\r\n  },\r\n  cancelAdUnit: {\r\n    id: 'adunit.cancelAdUnit',\r\n    defaultMessage: 'Cancel',\r\n  },\r\n  previousStepAdUnit: {\r\n    id: 'adunit.previousStepAdUnit',\r\n    defaultMessage: 'Previous',\r\n  },\r\n  channelTitle: {\r\n    id: 'channel.title',\r\n    defaultMessage: 'Channels',\r\n  },\r\n  propertySectionTitle: {\r\n    id: 'property.sectionTitle',\r\n    defaultMessage: 'Properties (optional)',\r\n  },\r\n  advOptionTitle: {\r\n    id: 'advOption.title',\r\n    defaultMessage: 'Advanced Options',\r\n  },\r\n  createChannelButton: {\r\n    id: 'create.channel.button',\r\n    defaultMessage: 'Create Channel',\r\n  },\r\n  channelPickerAriaDesc: {\r\n    id: 'channelPickerAriaDesc',\r\n    defaultMessage: 'Select channels to add the ad unit',\r\n  },\r\n  servingTierTitle: {\r\n    id: 'servingTier.title',\r\n    defaultMessage: 'Serving Tier',\r\n  },\r\n  servingTierOptionLowcost: {\r\n    id: 'servingTier.option.lowcost',\r\n    defaultMessage: 'Low Cost',\r\n  },\r\n  publisherGroupConfigLabel: {\r\n    id: 'publisherGroupConfig.label',\r\n    defaultMessage: 'Publisher Group configuration',\r\n  },\r\n  publisherGroupConfigOptionDefaultPlus: {\r\n    id: 'publisherGroupConfig.option.defaultPlus',\r\n    defaultMessage: 'Default+',\r\n  },\r\n  publisherGroupConfigOptionDefault: {\r\n    id: 'publisherGroupConfig.option.default',\r\n    defaultMessage: 'Default',\r\n  },\r\n  publisherGroupConfigOptionGeneralist: {\r\n    id: 'publisherGroupConfig.option.Generalist',\r\n    defaultMessage: 'Generalist',\r\n  },\r\n  publisherGroupConfigOptionYieldOptimizer: {\r\n    id: 'publisherGroupConfig.option.yieldOptimizer',\r\n    defaultMessage: 'Yield Optimizer',\r\n  },\r\n  publisherGroupConfigOptionYieldMaximizer: {\r\n    id: 'publisherGroupConfig.option.yieldMaximizer',\r\n    defaultMessage: 'Yield Maximizer',\r\n  },\r\n  publisherGroupConfigOptionBingandYahoo: {\r\n    id: 'publisherGroupConfig.option.BingandYahoo',\r\n    defaultMessage: 'Bing/Yahoo O&O',\r\n  },\r\n  publisherGroupConfigOptionLowQualityDistribution: {\r\n    id: 'publisherGroupConfig.option.LowQualityDistribution',\r\n    defaultMessage: 'Low quality Distribution traffic',\r\n  },\r\n  publisherGroupConfigOptionMediumQualityDistribution: {\r\n    id: 'publisherGroupConfig.option.MediumQualityDistribution',\r\n    defaultMessage: 'Medium quality Distribution traffic',\r\n  },\r\n  publisherGroupConfigOptionHighQualityDistribution: {\r\n    id: 'publisherGroupConfig.option.HighQualityDistribution',\r\n    defaultMessage: 'High quality Distribution traffic',\r\n  },\r\n  privateMarketplaceLabel: {\r\n    id: 'privateMarketplace.label',\r\n    defaultMessage: 'Enable Private Marketplace',\r\n  },\r\n  privateMarketplaceTextfieldLabel: {\r\n    id: 'privateMarketplace.textfield.label',\r\n    defaultMessage: 'Private Marketplace IDs',\r\n  },\r\n  privateMarketplaceTextfieldPlaceholder: {\r\n    id: 'privateMarketplace.textfield.placeholder',\r\n    defaultMessage: 'Example ID 1, enter one per line',\r\n  },\r\n  promotionRadioOptionLabel: {\r\n    id: 'promotionOption.radio.label',\r\n    defaultMessage: 'Sponsored Product Ads Stores',\r\n  },\r\n  promotionOptionTextfieldLabel: {\r\n    id: 'promotionOption.textfield.label',\r\n    defaultMessage: 'Store IDs',\r\n  },\r\n  promotionOptionTextfieldPlaceholder: {\r\n    id: 'promotionOption.textfield.placeholder',\r\n    defaultMessage: 'Example Store ID 1, enter one per line',\r\n  },\r\n  boostRadioOptionLabel: {\r\n    id: 'boostOption.radio.label',\r\n    defaultMessage: 'Boost Advertiser Accounts',\r\n  },\r\n  boostOptionTextfieldLabel: {\r\n    id: 'boostOption.textfield.label',\r\n    defaultMessage: 'Advertiser Account IDs',\r\n  },\r\n  boostOptionTextfieldPlaceholder: {\r\n    id: 'boostOption.textfield.placeholder',\r\n    defaultMessage: 'Example Account ID 1, enter one per line',\r\n  },\r\n  propertyName: {\r\n    id: 'property.name',\r\n    defaultMessage: 'Property name',\r\n  },\r\n  propertyButton: {\r\n    id: 'property.add',\r\n    defaultMessage: 'Add property',\r\n  },\r\n  siteButton: {\r\n    id: 'site.add',\r\n    defaultMessage: 'Add site',\r\n  },\r\n  site: {\r\n    id: 'site',\r\n    defaultMessage: 'Site',\r\n  },\r\n  websiteUrl: {\r\n    id: 'property.url',\r\n    defaultMessage: 'Website URL',\r\n  },\r\n  propertyId: {\r\n    id: 'property.id',\r\n    defaultMessage: 'Property ID',\r\n  },\r\n  propertyDefaultOptionText: {\r\n    id: 'property.defaultOptionText',\r\n    defaultMessage: 'Type ID or URL to select the site',\r\n  },\r\n  propertyDefaultNotFound: {\r\n    id: 'property.defaultNotFound',\r\n    defaultMessage: 'No property found, create new property before select',\r\n  },\r\n  siteDefaultNotFound: {\r\n    id: 'site.defaultNotFound',\r\n    defaultMessage: 'No site found, create new site before select',\r\n  },\r\n  createPropertyButtonLabel: {\r\n    id: 'property.CreateButtonLabel',\r\n    defaultMessage: 'Create property',\r\n  },\r\n  propertySearchPlaceholder: {\r\n    id: 'property.SearchPlaceholder',\r\n    defaultMessage: 'Search properties by ID or URL',\r\n  },\r\n  businessModelLevel1DefaultOptionText: {\r\n    id: 'businessmodel.Level1DefaultOptionText',\r\n    defaultMessage: 'Select level 1 (optional)',\r\n  },\r\n  businessModelLevel2DefaultOptionText: {\r\n    id: 'businessmodel.Level2DefaultOptionText',\r\n    defaultMessage: 'Select level 2 (optional)',\r\n  },\r\n  propertyPickerEmptyOptionLabel: {\r\n    id: 'propertyPicker.EmptyOptionLabel',\r\n    defaultMessage: 'Select a property',\r\n  },\r\n  createPropButtonAriaDesc: {\r\n    id: 'propertyPicker.createButtonAriaDesc',\r\n    defaultMessage: 'Click this button to create property within this page',\r\n  },\r\n  propertyOptionsAriaLabel: {\r\n    id: 'propertyPicker.OptionsAriaLabel',\r\n    defaultMessage: 'Property search results',\r\n  },\r\n  propertyPickerSearchBoxAriaDesc: {\r\n    id: 'propertyPickerSearchBoxAriaDesc',\r\n    defaultMessage: 'Click enter to view all properties',\r\n  },\r\n  propertyPickerItemSelectedAnnounceMsg: {\r\n    id: 'propertyPickerItemSelectedAnnounceMsg',\r\n    defaultMessage: 'Property selected',\r\n  },\r\n  createAdunit: {\r\n    id: 'createAdunit',\r\n    defaultMessage: 'Create new ad unit',\r\n  },\r\n  newAudienceAd: {\r\n    id: 'newAudienceAd',\r\n    defaultMessage: 'New audience ad',\r\n  },\r\n  nativeAdOptionLabel: {\r\n    id: 'nativeAdOptionLabel',\r\n    defaultMessage: 'Native/Audience ad \\n\\n Match the look of your site and fit in between posts and listings.',\r\n  },\r\n  searchAdOptionLabel: {\r\n    id: 'searchAdOptionLabel',\r\n    defaultMessage: 'Search ad \\n\\n Coming soon',\r\n  },\r\n  otherAdOptionLabel: {\r\n    id: 'otherAdOptionLabel',\r\n    defaultMessage: 'Other ad \\n\\n Coming soon',\r\n  },\r\n  nativeAdDesc: {\r\n    id: 'nativeAdDesc',\r\n    defaultMessage: 'Match the look of your site and fit in between posts and listings.',\r\n  },\r\n  seeExample: {\r\n    id: 'seeExample',\r\n    defaultMessage: 'See example',\r\n  },\r\n  comingSoon: {\r\n    id: 'comingSoon',\r\n    defaultMessage: 'Coming soon',\r\n  },\r\n  templatePanelTitle: {\r\n    id: 'templatePanelTitle',\r\n    defaultMessage: 'Choose a template and style to match the feeds on your page',\r\n  },\r\n\r\n  mediationHeader: {\r\n    id: 'mediationSetupMessages.mediationHeader',\r\n    defaultMessage: 'Mediation set up',\r\n  },\r\n  mediationDescription: {\r\n    id: 'mediationSetupMessages.mediationDescription',\r\n    defaultMessage: `Connect your Google accounts to ensure you are getting the highest bid possible for your ad inventory. We'll only serve our ads if we predict we can deliver a higher payment compared to Google.`,\r\n  },\r\n  mediationToggleLabel: {\r\n    id: 'mediationSetupMessages.mediationToggleLabel',\r\n    defaultMessage: 'Enable mediation',\r\n  },\r\n  nativeAd: {\r\n    id: 'nativeAdAccordionCheckboxLabel',\r\n    defaultMessage: 'Native Ad',\r\n  },\r\n  nativeAdSubContent: {\r\n    id: 'nativeAdAccordionSubContent',\r\n    defaultMessage: 'Match the look of your site and fit in between posts and listings',\r\n  },\r\n  displayAd: {\r\n    id: 'displayAdAccordionCheckboxLabel',\r\n    defaultMessage: 'Display Ad',\r\n  },\r\n  displayAdSubContent: {\r\n    id: 'displayAdAccordionSubContent',\r\n    defaultMessage: 'Simple image ads that fit in between posts and listings',\r\n  },\r\n  nativeAdConfigLabel: {\r\n    id: 'nativeAd.configuration.label',\r\n    defaultMessage: 'Native ad configuration',\r\n  },\r\n  nativeAdConfigLabelFont: {\r\n    id: 'nativeAd.configuration.font.label',\r\n    defaultMessage: 'Font',\r\n  },\r\n  nativeAdConfigLabelTitleColor: {\r\n    id: 'nativeAd.configuration.titleColor.label',\r\n    defaultMessage: 'Title Color',\r\n  },\r\n  nativeAdConfigLabelBackgroundColor: {\r\n    id: 'nativeAd.configuration.backgroundColor.label',\r\n    defaultMessage: 'Background Color',\r\n  },\r\n  nativeAdConfigLabelButtonBackgroundColor: {\r\n    id: 'nativeAd.configuration.buttonBackgroundColor.label',\r\n    defaultMessage: 'Button Background Color',\r\n  },\r\n  nativeAdConfigMsgBarContent: {\r\n    id: 'nativeAd.configuration.messageBar.content',\r\n    defaultMessage: 'Ads might look different from the preview shown.',\r\n  },\r\n  displayAdMsgBarContent: {\r\n    id: 'displayAd.configuration.messageBar.content',\r\n    defaultMessage:\r\n      'Smart auto-sizing will adapt to your site’s container, and so the actual ads served might look slightly different from the examples shown. For smart auto-sizing to work, {displayAdMsgBarLink}',\r\n  },\r\n  displayAdMsgBarLink: {\r\n    id: 'displayAd.configuration.messageBar.link',\r\n    defaultMessage: 'ensure you have properly defined your container sizes',\r\n  },\r\n  adPreview: {\r\n    id: 'adType.preview.title',\r\n    defaultMessage: 'Ad Preview',\r\n  },\r\n  adPreviewContainerSize: {\r\n    id: 'adType.preview.container.size.label',\r\n    defaultMessage: 'Container size',\r\n  },\r\n  warningAdUnitTypeNotSelected: {\r\n    id: 'adType.warning.notSelected',\r\n    defaultMessage: 'At least one ad unit type should be selected.',\r\n  },\r\n  warningAdUnitTypeNotFullySelected: {\r\n    id: 'adType.warning.notFullySelected',\r\n    defaultMessage: 'Selecting fewer ad types may reduce monetization.',\r\n  },\r\n  saveAndGetCode: {\r\n    id: 'tython.adunit.create.submit.label',\r\n    defaultMessage: 'Save and get code',\r\n  },\r\n  finishAdUnitCreation: {\r\n    id: 'tython.adunit.create.submit.aftercode',\r\n    defaultMessage: 'Finish',\r\n  },\r\n  comingSoonMsg: {\r\n    id: 'tython.adunit.create.type.display.intro.msg',\r\n    defaultMessage: 'Coming Soon',\r\n  },\r\n  selectDisplayAdLayout: {\r\n    id: 'tython.adunit.create.type.display.layout.selection',\r\n    defaultMessage: 'Pick a layout for your display ad',\r\n  },\r\n  displayAdPreviewHeadline: {\r\n    id: 'tython.adunit.create.type.display.preview.headline',\r\n    defaultMessage: 'Lorem ipsum dolor sit amet',\r\n  },\r\n  displayAdPreviewTextContent: {\r\n    id: 'tython.adunit.create.type.display.preview.text.content',\r\n    defaultMessage:\r\n      'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.',\r\n  },\r\n  displayAdPreviewLearnMoreButton: {\r\n    id: 'tython.adunit.create.type.display.preview.learnMore.button',\r\n    defaultMessage: 'LEARN MORE',\r\n  },\r\n  displayAdPreviewExamplePrimaryTitle: {\r\n    id: 'tython.adunit.create.type.display.preview.primary.title',\r\n    defaultMessage: 'Example 1',\r\n  },\r\n  displayAdPreviewExampleSecondaryTitle: {\r\n    id: 'tython.adunit.create.type.display.preview.secondary.title',\r\n    defaultMessage: 'Example 2',\r\n  },\r\n  displayAdPreviewExampleTertiaryTitle: {\r\n    id: 'tython.adunit.create.type.display.preview.tertiary.title',\r\n    defaultMessage: 'Example 3',\r\n  },\r\n  requiredFeedbackSignalsLabel: {\r\n    id: 'requiredFeedbackSignals.label',\r\n    defaultMessage: 'Required feedback signals',\r\n  },\r\n  requiredImpressionFeedbackSignalOptionLabel: {\r\n    id: 'requiredImpressionFeedbackSignalOption.radio.label',\r\n    defaultMessage: 'Impression feedback (usually required for native ads and not search ads)',\r\n  },\r\n  defaultAdUnitName: {\r\n    id: 'tython.default.adUnit.name',\r\n    defaultMessage: 'Ad unit {number}',\r\n  },\r\n  adunitErrorInForm: {\r\n    id: 'tython.adunits.adunitErrorInForm',\r\n    defaultMessage: 'Adunit - You have {count} errors in the form, please fix them to continue.',\r\n  },\r\n  createdAdunitSuccess: {\r\n    id: 'tython.adunits.createdAdunitSuccess',\r\n    defaultMessage: 'Created new adunit {id} success',\r\n  },\r\n  editedAdunitSuccess: {\r\n    id: 'tython.adunits.editedAdunitSuccess',\r\n    defaultMessage: 'Edited adunit {id} success',\r\n  },\r\n  loadPropertyFailedInAdunit: {\r\n    id: 'tython.adunit.loadPropertyFailedInAdunit',\r\n    defaultMessage: 'Load property failed, please try again later.',\r\n  },\r\n});\r\n","import { string } from 'yup';\r\nimport { StringListTransformerYupType } from '../../../../utils/validation';\r\n\r\nconst alphaNumericRegex = /^[a-zA-Z0-9]+$/;\r\nconst minStrLength = 4;\r\nconst maxStrLength = 10;\r\n\r\nexport const PartnerCodesValidationSchema = new StringListTransformerYupType()\r\n  .of(\r\n    string()\r\n      .matches(alphaNumericRegex, 'Partner Code should be alphanumeric')\r\n      .min(minStrLength, `Partner Code should be at least ${minStrLength} characters long`)\r\n      .max(maxStrLength, `Partner Code should be no more than ${maxStrLength} characters long`)\r\n  )\r\n  .test('is-unique', 'Partner Codes should be unique', function (partnerCodeList) {\r\n    if (!partnerCodeList) {\r\n      return true;\r\n    }\r\n\r\n    // Check if the list has any duplicates. Eg: ['PC1', 'pC1'] is not valid.\r\n    const partnerCodesWithoutDuplicates = new Set(\r\n      partnerCodeList.map(item => item.toLowerCase()));\r\n\r\n    return partnerCodesWithoutDuplicates.size === partnerCodeList.length;\r\n  });\r\n","import { MessageBarType } from '@fluentui/react';\r\nimport { orchestrator } from 'satcheljs';\r\nimport { Log } from '../../../../../../logging/src';\r\nimport {\r\n  AdUnit,\r\n  AdUnitMarketClassification,\r\n  AdUnitRPSGuarantee,\r\n  AdUnitType,\r\n  ApiError,\r\n  getAppStore,\r\n  IAdUnitClassification,\r\n  IAdUnitFinancialClassification,\r\n  NativeAdTemplate,\r\n  onNavigateBack,\r\n  onNotificationChanged,\r\n  onSavingChanged,\r\n  postEntity,\r\n  putEntity,\r\n  showErrorToastNotification,\r\n  showSuccessToastNotification,\r\n} from '../../../../../@data';\r\nimport { isTythonSelfServeUser } from '../../../../../@data/utils/checkUserType';\r\nimport { FormState } from '../../../../../components/Form';\r\nimport { INotificationBarItem } from '../../../../../components/NotificationBar';\r\nimport { StepState } from '../../../../../layout/DetailPageWithStepper/DetailPageWithStepper.types';\r\nimport { stringToList, validateSchema } from '../../../../../utils';\r\nimport { RouteName } from '../../../@data';\r\nimport { createReturnUrl } from '../../../@data/services/AdManagementService';\r\nimport messages from '../../Create/CreateAdunit.messages';\r\nimport { onAdunitErrorChanged, onAdunitIdChanged, onFormCleared, onFormSubmitted, onPanelOpenChanged } from '../actions';\r\nimport { setAdUnitsData } from '../mutatorActions';\r\nimport { disableAdunitMediationStatus, enableAdunitMediationStatus } from '../services/AdunitService';\r\nimport { adunitErrorModel } from '../store/schema/AdunitErrorModel';\r\nimport { getAdunitStore } from '../store/store';\r\n\r\norchestrator(onFormSubmitted, async (msg) => {\r\n  const { publisher, userContext, account } = getAppStore();\r\n  const { active, raw, template } = getAdunitStore();\r\n\r\n  let notification: INotificationBarItem = {};\r\n\r\n  if (publisher && account && raw) {\r\n    const body: AdUnit = {\r\n      ...raw,\r\n      id: active.id,\r\n      name: active.name,\r\n    };\r\n\r\n    try {\r\n      await validateSchema(adunitErrorModel(), active);\r\n      onAdunitErrorChanged();\r\n    } catch (e) {\r\n      Log.error(e);\r\n      onAdunitErrorChanged(e);\r\n      showErrorToastNotification({\r\n        textMessageDescriptor: messages.adunitErrorInForm,\r\n        intlMessageValues: { count: Object.keys(e).length },\r\n      });\r\n\r\n      return;\r\n    }\r\n\r\n    onSavingChanged(true);\r\n\r\n    const classification: IAdUnitClassification = {\r\n      marketClassification: active.marketClassification ? active.marketClassification : AdUnitMarketClassification.Syndicated,\r\n      financialClassification: active.existingFinancialClassification\r\n        ? active.existingFinancialClassification\r\n        : ({\r\n            rpsGuarantee: AdUnitRPSGuarantee.None,\r\n          } as IAdUnitFinancialClassification),\r\n    };\r\n\r\n    body.accountId = account ? account.id : 0;\r\n    body.adUnitType = AdUnitType.Search;\r\n    body.classification = classification;\r\n    body.attributes = active.businessModel && active.businessModel !== 0 ? { Taxonomy: active.businessModel } : undefined;\r\n    body.channelIds = active.channelsSelected ? active.channelsSelected.map((m) => m.id) : [];\r\n    body.publisherGroupConfiguration = active.publisherGroupConfig;\r\n    body.servingCostTier = active.servingTier;\r\n    body.partnerCodes = stringToList(active.distributionPartnerCodes);\r\n    body.propertyId = active.propertySelected ? active.propertySelected.id : undefined;\r\n    body.requireImpressionFeedbackForBillableTraffic = !!active.isImpressionFeedbackRequired;\r\n\r\n    body.storeIds = active.storeIds\r\n      ? active.storeIds\r\n          .split('\\n')\r\n          .filter((i) => i !== '')\r\n          .map((id) => +id)\r\n      : [];\r\n\r\n    try {\r\n      let entity: AdUnit | undefined;\r\n\r\n      if (\r\n        msg.mode === FormState.Edit ||\r\n        msg.mode === FormState.InPageEdit ||\r\n        msg.mode === FormState.MultiStepEdit ||\r\n        (msg.mode === FormState.MultiStepCreation && msg.stepState === StepState.Dirty)\r\n      ) {\r\n        // while adunit is being edited when all accounts is set in manage page\r\n        body.accountId = raw.accountId;\r\n        entity = await putEntity([publisher], body, userContext, AdUnit, new URLSearchParams([['type', 'Search']]));\r\n        showSuccessToastNotification({ textMessageDescriptor: messages.editedAdunitSuccess, intlMessageValues: { id: entity.id } });\r\n\r\n        if (entity) {\r\n          const adUnitsGrid = getAdunitStore().adUnitsRaw.data;\r\n          const propertyUrl = adUnitsGrid?.find((adUnit) => adUnit.id === entity?.id)?.propertyUrl;\r\n          entity.propertyUrl = propertyUrl;\r\n        }\r\n\r\n        const adUnitsRawData = getAdunitStore().adUnitsRaw.data;\r\n        if (adUnitsRawData && entity) {\r\n          const data = adUnitsRawData.map((adUnit) => (adUnit.id === entity?.id ? entity! : adUnit));\r\n          setAdUnitsData(data);\r\n        }\r\n\r\n        try {\r\n          const isBoost = sessionStorage.getItem('IsBoostPublisher');\r\n          if (template && isBoost === 'true' && JSON.stringify(template) !== JSON.stringify(active.BoostTemplate)) {\r\n            entity.className = new AdUnit().className;\r\n            template.className = new NativeAdTemplate().className;\r\n            await putEntity([publisher, entity], template, userContext, NativeAdTemplate);\r\n          }\r\n        } catch (e) {\r\n          Log.error(e);\r\n          const apiErrorObj = e as ApiError;\r\n          const errMsg = apiErrorObj.message;\r\n          notification = {\r\n            text: `Boost Template Upload Failed for adunit \"${entity.id} , caught an error \"${errMsg}\"`,\r\n            messageBarType: MessageBarType.error,\r\n          };\r\n        }\r\n      } else {\r\n        entity = await postEntity([publisher], AdUnit, body, userContext, new URLSearchParams([['type', 'Search']]));\r\n\r\n        if (entity && entity.id) {\r\n          onAdunitIdChanged(entity.id);\r\n        }\r\n        showSuccessToastNotification({ textMessageDescriptor: messages.createdAdunitSuccess, intlMessageValues: { id: entity.id } });\r\n\r\n        try {\r\n          if (template) {\r\n            entity.className = new AdUnit().className;\r\n            template.className = new NativeAdTemplate().className;\r\n            await postEntity([publisher, entity], NativeAdTemplate, template, userContext);\r\n          }\r\n        } catch (e) {\r\n          Log.error(e);\r\n          const apiErrorObj = e as ApiError;\r\n          const errMsg = apiErrorObj.message;\r\n          notification = {\r\n            text: `Boost Template Upload Failed for adunit \"${entity.id}, caught an error \"${errMsg}\"`,\r\n            messageBarType: MessageBarType.error,\r\n          };\r\n          onNotificationChanged(notification);\r\n        }\r\n      }\r\n\r\n      onPanelOpenChanged(false, body.propertyId, entity.id);\r\n\r\n      const returnUrl = createReturnUrl(\r\n        RouteName.adunit,\r\n        String(publisher.id),\r\n        String(account.id),\r\n        String(entity.id),\r\n        isTythonSelfServeUser() ? msg.mode : undefined\r\n      );\r\n      // return to manage page if the adunit creation isn't multi-step process (for tython users only)\r\n      onNavigateBack(msg.routeHistory, returnUrl);\r\n      if (!isTythonSelfServeUser()) {\r\n        onFormCleared();\r\n      }\r\n\r\n      if (active.adSenseMediationStatus !== active.adSenseMediationToggle && msg.shouldHandleMediation) {\r\n        if (active.adSenseMediationToggle) {\r\n          enableAdunitMediationStatus(publisher, account, [active?.id!]);\r\n        } else {\r\n          disableAdunitMediationStatus(publisher, account, [active?.id!]);\r\n        }\r\n      }\r\n\r\n      // proceed to the next step in the creation process (for tython users only)\r\n      if (msg.onSubmit) {\r\n        msg.onSubmit();\r\n      }\r\n    } catch (e) {\r\n      Log.error(e);\r\n      const apiErrorObj = e as ApiError;\r\n      let errMsg = apiErrorObj.message;\r\n      errMsg = errMsg.substring(errMsg.indexOf(`{\"errors\":`));\r\n      notification = {\r\n        text: errMsg.includes('InvalidPartnerCodes')\r\n          ? 'One of the Search Distribution Partner Codes is already associated with another adunit'\r\n          : `Submitting the adunit form \"${FormState[msg.mode]}\" caught an error \"${errMsg}\"`,\r\n        messageBarType: MessageBarType.error,\r\n      };\r\n      onNotificationChanged(notification);\r\n    } finally {\r\n      onSavingChanged(false);\r\n    }\r\n  } else {\r\n    notification = {\r\n      text: `Adunit form \"${FormState[msg.mode]}\" is invalid id ${active.id}`,\r\n      messageBarType: MessageBarType.warning,\r\n    };\r\n    onNotificationChanged(notification);\r\n  }\r\n});\r\n","import { mixed, number, object, string } from 'yup';\r\nimport { AdUnitType, IdNamePairErrorModel } from '../../../../../../@data/store/schema';\r\nimport { PartnerCodesValidationSchema } from '../../../../../../@data/store/schema/viewmodels/PartnerCodesValidationModel';\r\nimport { isTythonSelfServeUser } from '../../../../../../@data/utils/checkUserType';\r\nimport { ArrayObservableSchemaYupType, StringListSchemaYupType } from '../../../../../../utils/validation';\r\nimport { IAdunitViewModel } from './IAdunitViewModel';\r\n\r\nexport function adunitErrorModel() {\r\n  return object<IAdunitViewModel>().shape({\r\n    name: string().trim().required(),\r\n    channelsSelected: new ArrayObservableSchemaYupType().of(IdNamePairErrorModel),\r\n    storeIds: new StringListSchemaYupType().of(number().integer()),\r\n    distributionPartnerCodes: PartnerCodesValidationSchema,\r\n    propertySelected: isTythonSelfServeUser() ? string().required() : string(),\r\n    adUnitType:  isTythonSelfServeUser() ? mixed<AdUnitType>().required() : string()\r\n  });\r\n}\r\n","import { when } from 'mobx';\r\nimport { orchestrator } from 'satcheljs';\r\nimport { getAppStore, isTythonSelfServeUser } from '../../../../../@data';\r\nimport { AdSenseOAuthStatus } from '../../../../../@data/store/schema/enums/AdSenseOAuthStatus';\r\nimport { getGoogleAdSenseStore } from '../../../Account/Settings/components/GoogleConnector/@data';\r\nimport { onInitializeGoogleAccount as fetchAdSenseAccount } from '../../../Account/Settings/components/GoogleConnector/@data/actions';\r\nimport { fetchAdUnitsDataAction } from '../actions';\r\nimport { onManagePageInitialized } from '../actions/onManagePageInitialized';\r\nimport { setAdUnitsLoading } from '../mutatorActions';\r\nimport { getAdunitStore } from '../store/store';\r\n\r\norchestrator(onManagePageInitialized, async () => {\r\n  const { publisher, account, userContext } = getAppStore();\r\n  const { active } = getGoogleAdSenseStore();\r\n  const {\r\n    adUnitsRaw: { data },\r\n  } = getAdunitStore();\r\n\r\n  if (publisher && account && userContext) {\r\n    if (data === undefined || data.length === 0) {\r\n      setAdUnitsLoading(true);\r\n    }\r\n\r\n    if (isTythonSelfServeUser()) {\r\n      fetchAdSenseAccount(false, false);\r\n      await when(() => {\r\n        const { active: googleAdSenseActive } = getGoogleAdSenseStore();\r\n        return !!googleAdSenseActive.connectionStatus;\r\n      });\r\n    }\r\n    fetchAdUnitsDataAction();\r\n\r\n    await when(() => {\r\n      const { adUnitsRaw } = getAdunitStore();\r\n      if (adUnitsRaw.data !== undefined) {\r\n        setAdUnitsLoading(false);\r\n        return true;\r\n      }\r\n      return false;\r\n    });\r\n\r\n    if (isTythonSelfServeUser() && active.connectionStatus === AdSenseOAuthStatus.Success) {\r\n      // wait when data inside adUnitRaw is set with the new response data\r\n      await when(() => {\r\n        const { adUnitsRaw } = getAdunitStore();\r\n        return !!adUnitsRaw.data?.[0]?.mediatedWithAdSense;\r\n      });\r\n    }\r\n  }\r\n});\r\n","import { orchestrator } from 'satcheljs';\r\nimport { Log } from '../../../../../../logging/src';\r\nimport { getAppStore, showErrorToastNotification } from '../../../../../@data';\r\nimport messages from '../../Manage/ManagePage.messages';\r\nimport { updateAdUnitMediationStatus } from '../actions';\r\nimport { updateAdunitMediationStatus } from '../services/AdunitService';\r\n\r\norchestrator(updateAdUnitMediationStatus, async ({ adUnits, state }) => {\r\n  const { publisher, account } = getAppStore();\r\n\r\n  if (publisher && account) {\r\n    try {\r\n      await updateAdunitMediationStatus(publisher, account, adUnits, state);\r\n    } catch (error) {\r\n      showErrorToastNotification({ textMessageDescriptor: messages.adunitMediationUpdateStatusFailed });\r\n      Log.error(`Error while updating adUnits' mediation status: ${error}`);\r\n    }\r\n  }\r\n});\r\n","import { orchestrator } from 'satcheljs';\r\nimport { Log } from '../../../../../../logging/src';\r\nimport { AdUnit, ApiError, getAppStore, putEntity, showErrorToastNotification, showSuccessToastNotification } from '../../../../../@data';\r\nimport messages from '../../Manage/ManagePage.messages';\r\nimport { onAdUnitNameUpdate } from '../actions';\r\nimport { setAdUnitsData } from '../mutatorActions';\r\nimport { getAdunitStore } from '../store/store';\r\n\r\norchestrator(onAdUnitNameUpdate, async ({ formatMessage, setIsLoading, setErrorMessage, setVisibleCallOut }) => {\r\n  const { publisher, userContext, account } = getAppStore();\r\n  const { active, raw } = getAdunitStore();\r\n\r\n  if (active.name?.trim().length === 0) {\r\n    setErrorMessage(formatMessage(messages.adunitNameInvalid));\r\n    return;\r\n  }\r\n\r\n  if (publisher && account && raw) {\r\n    const body: AdUnit = {\r\n      ...raw,\r\n      id: active.id,\r\n      name: active.name,\r\n    };\r\n\r\n    setIsLoading(true);\r\n\r\n    try {\r\n      let entity: AdUnit | undefined;\r\n\r\n      // while adunit is being edited when all accounts is set in manage page\r\n      body.accountId = raw.accountId;\r\n      entity = await putEntity([publisher], body, userContext, AdUnit, new URLSearchParams([['type', 'Search']]));\r\n\r\n      showSuccessToastNotification({ textMessageDescriptor: messages.editedAdunitSuccess, intlMessageValues: { id: entity.id } });\r\n\r\n      let adUnitsRawData = [...(getAdunitStore().adUnitsRaw.data || [])];\r\n      if (adUnitsRawData && entity) {\r\n        adUnitsRawData = adUnitsRawData.map((adUnit) => {\r\n          const adUnitData = { ...adUnit };\r\n          if (adUnitData.id === entity?.id) {\r\n            adUnitData.name = entity?.name;\r\n            return adUnitData;\r\n          } else {\r\n            return adUnit;\r\n          }\r\n        });\r\n        setAdUnitsData(adUnitsRawData);\r\n      }\r\n    } catch (e) {\r\n      Log.error(e);\r\n      const apiErrorObj = e as ApiError;\r\n      let errMsg = apiErrorObj.message;\r\n      errMsg = errMsg.substring(errMsg.indexOf(`{\"errors\":`));\r\n      showErrorToastNotification({ text: `Update adunit name caught an error \"${errMsg}\"` });\r\n    } finally {\r\n      setIsLoading(false);\r\n      setVisibleCallOut(0);\r\n    }\r\n  } else {\r\n    showErrorToastNotification({ textMessageDescriptor: messages.adUnitInvalidId, intlMessageValues: { id: active.id } });\r\n    setVisibleCallOut(0);\r\n  }\r\n});\r\n","import { IPropertyPickerStyleProps, IPropertyPickerStyles } from './PropertyPicker.types';\r\n\r\nexport const getStyles = (props: IPropertyPickerStyleProps): IPropertyPickerStyles => {\r\n  const { theme } = props;\r\n\r\n  return {\r\n    searchBox: {\r\n      width: 342,\r\n      marginTop: theme.spacing.s1,\r\n    },\r\n    list: {\r\n      flex: 1,\r\n      overflowY: 'auto',\r\n    },\r\n    listItem: {\r\n      padding: theme.spacing.s1,\r\n      selectors: {\r\n        '&:focus, &:hover': {\r\n          backgroundColor: theme.palette.neutralLight,\r\n        },\r\n      },\r\n    },\r\n    listItemLabel: [\r\n      theme.fonts.medium,\r\n      {\r\n        flex: 1,\r\n        textOverflow: 'ellipsis',\r\n        overflow: 'hidden',\r\n        whiteSpace: 'nowrap',\r\n      },\r\n    ],\r\n  };\r\n};\r\n","/* eslint-disable jsx-a11y/interactive-supports-focus */\r\nimport {\r\n    ActionButton,\r\n    Announced,\r\n    Callout,\r\n    classNamesFunction,\r\n    DirectionalHint,\r\n    FocusZone,\r\n    FocusZoneDirection,\r\n    getTheme,\r\n    IProcessedStyleSet,\r\n    SearchBox\r\n} from '@fluentui/react';\r\nimport React from 'react';\r\nimport { isButtonPressKey } from '../../utils/AccessibilityUtils';\r\nimport { getScreenReaderTextStyles } from '../../utils/GlobalStyleUtils';\r\nimport { getStyles } from './PropertyPicker.styles';\r\nimport { IPropertyPickerItem, IPropertyPickerProps, IPropertyPickerStyleProps, IPropertyPickerStyles } from './PropertyPicker.types';\r\n\r\ninterface IPropertyPickerState {\r\n  filteredItems: IPropertyPickerItem[];\r\n  isCalloutVisible: boolean;\r\n  announceItemSelected: boolean;\r\n}\r\n\r\nconst getClassNames = classNamesFunction<IPropertyPickerStyleProps, IPropertyPickerStyles>();\r\n\r\nexport class PropertyPicker extends React.Component<IPropertyPickerProps, IPropertyPickerState> {\r\n  private _classNames: IProcessedStyleSet<IPropertyPickerStyles>;\r\n\r\n  constructor(props: IPropertyPickerProps) {\r\n    super(props);\r\n\r\n    this.state = {\r\n      filteredItems: props.items,\r\n      isCalloutVisible: false,\r\n      announceItemSelected: false,\r\n    };\r\n  }\r\n\r\n  public componentDidUpdate(prevProps: IPropertyPickerProps) {\r\n    if (prevProps.items !== this.props.items) {\r\n      this.setState({\r\n        filteredItems: this.props.items,\r\n      });\r\n    }\r\n  }\r\n\r\n  public render(): JSX.Element {\r\n    const theme = getTheme();\r\n    this._classNames = getClassNames(getStyles, { theme });\r\n    const {\r\n      createButtonLabel,\r\n      onCreateButtonClick,\r\n      isCreateButtonDisabled,\r\n      searchBoxPlaceholder,\r\n      onListItemClicked,\r\n      propertyOptionsAriaLabel,\r\n      createButtonAriaDescription,\r\n      searchBoxAriaDescription,\r\n      itemSelectedAnnounceMessage,\r\n    } = this.props;\r\n\r\n    const listItems: JSX.Element[] = [];\r\n\r\n    // add empty item to allow deselecting a selected property\r\n    listItems.push(\r\n      <div\r\n        className={this._classNames.listItem}\r\n        key={0}\r\n        onClick={() => {\r\n          onListItemClicked(undefined);\r\n          this.setState({ isCalloutVisible: false });\r\n        }}\r\n        onKeyDown={(ev) => {\r\n          if (isButtonPressKey(ev.key)) {\r\n            onListItemClicked(undefined);\r\n            this.setState({ isCalloutVisible: false });\r\n          }\r\n        }}\r\n        role=\"option\"\r\n        aria-selected={false}\r\n        data-is-focusable={true}\r\n      >\r\n        {this.props.emptyOptionLabel ? this.props.emptyOptionLabel : ''}\r\n      </div>\r\n    );\r\n\r\n    this.state.filteredItems.forEach((item: IPropertyPickerItem, index: number) => {\r\n      listItems.push(\r\n        <div\r\n          className={this._classNames.listItem}\r\n          key={item.id}\r\n          onClick={() => {\r\n            onListItemClicked(item);\r\n            this.setState({ isCalloutVisible: false, announceItemSelected: true });\r\n          }}\r\n          onKeyDown={(ev) => {\r\n            if (isButtonPressKey(ev.key)) {\r\n              onListItemClicked(item);\r\n              this.setState({ isCalloutVisible: false, announceItemSelected: true });\r\n            }\r\n          }}\r\n          role=\"option\"\r\n          aria-selected={false}\r\n          data-is-focusable={true}\r\n          data-item-index={index}\r\n        >\r\n          <span className={this._classNames.listItemLabel}>{item.id + ' - (' + item.url + ')'}</span>\r\n        </div>\r\n      );\r\n    });\r\n\r\n    return (\r\n      <>\r\n        {this.state.announceItemSelected && <Announced message={itemSelectedAnnounceMessage} aria-live=\"assertive\" />}\r\n        <ActionButton\r\n          iconProps={{ iconName: 'add' }}\r\n          onClick={onCreateButtonClick}\r\n          disabled={isCreateButtonDisabled}\r\n          ariaDescription={createButtonAriaDescription}\r\n        >\r\n          {createButtonLabel}\r\n        </ActionButton>\r\n\r\n        <div id={'searchBox'} className={this._classNames.searchBox}>\r\n          <SearchBox\r\n            placeholder={searchBoxPlaceholder}\r\n            underlined={true}\r\n            onChange={(_, filter: string) => this._onCallSuggestionsChanged(filter)}\r\n            onSearch={() => this.setState({ isCalloutVisible: true })}\r\n            aria-describedby={'searchBoxAriaDesc'}\r\n          />\r\n        </div>\r\n        {this.state.isCalloutVisible ? (\r\n          <Callout\r\n            target={'#searchBox'}\r\n            directionalHint={DirectionalHint.bottomLeftEdge}\r\n            gapSpace={0}\r\n            isBeakVisible={false}\r\n            calloutWidth={400}\r\n            preventDismissOnScroll={true}\r\n            setInitialFocus={true}\r\n            onDismiss={() => this.setState({ isCalloutVisible: false })}\r\n            onKeyDown={(ev: React.KeyboardEvent<HTMLDivElement>) => {\r\n              // Earlier clicking tab was taking focus out of context and hence breaking the navigation order\r\n              // Dismissing the callout makes sure that it will focus on the next active element in the tab order.\r\n              if (ev.key === 'Tab' || (ev.shiftKey && ev.key === 'Tab')) {\r\n                this.setState({ isCalloutVisible: false });\r\n              }\r\n            }}\r\n          >\r\n            <FocusZone\r\n              direction={FocusZoneDirection.vertical}\r\n              isCircularNavigation={true}\r\n              role=\"listbox\"\r\n              aria-labelledby={'propertyOptionsAriaLabel'}\r\n            >\r\n              {listItems}\r\n            </FocusZone>\r\n          </Callout>\r\n        ) : null}\r\n        <span id=\"propertyOptionsAriaLabel\" style={getScreenReaderTextStyles()}>\r\n          {propertyOptionsAriaLabel}\r\n        </span>\r\n        <span id=\"searchBoxAriaDesc\" style={getScreenReaderTextStyles()}>\r\n          {searchBoxAriaDescription}\r\n        </span>\r\n      </>\r\n    );\r\n  }\r\n\r\n  private _onCallSuggestionsChanged = (filter: string) => {\r\n    const filteredItems = this.props.items.filter((p) => {\r\n      const idUrlString = p.id.toString() + p.url.toLocaleLowerCase();\r\n      return idUrlString.indexOf(filter.toLocaleLowerCase()) !== -1;\r\n    });\r\n\r\n    this.setState({ filteredItems: filteredItems });\r\n  };\r\n}\r\n","import { defineMessages } from 'react-intl';\r\n\r\nexport default defineMessages({\r\n  adUnitSiteLoading: {\r\n    id: 'tython.adunit.site.isLoading',\r\n    defaultMessage: 'Loading...',\r\n  },\r\n});\r\n","import { IPropertySitePickerStyleProps, IPropertySitePickerStyles } from './PropertySitePicker.types';\r\n\r\nexport const getStyles = (props: IPropertySitePickerStyleProps): IPropertySitePickerStyles => {\r\n  const { theme } = props;\r\n\r\n  return {\r\n    searchBox: {\r\n      width: 440,\r\n      height: 32,\r\n      marginTop: theme.spacing.s1,\r\n      borderRadius: '2px',\r\n      textDecorationColor: theme.palette.green,\r\n    },\r\n    list: {\r\n      flex: 1,\r\n      overflowY: 'auto',\r\n    },\r\n    listItem: {\r\n      padding: theme.spacing.s1,\r\n      selectors: {\r\n        '&:focus, &:hover': {\r\n          backgroundColor: theme.palette.neutralLight,\r\n        },\r\n      },\r\n    },\r\n    listItemLabel: [\r\n      theme.fonts.medium,\r\n      {\r\n        flex: 1,\r\n        textOverflow: 'ellipsis',\r\n        overflow: 'hidden',\r\n        whiteSpace: 'nowrap',\r\n      },\r\n    ],\r\n    searchContent: [\r\n      {\r\n        icon: {\r\n          display: 'none',\r\n        },\r\n        iconContainer: {\r\n          display: 'none',\r\n        },\r\n        field: {\r\n          padding: '0px 4px',\r\n        },\r\n      },\r\n    ],\r\n  };\r\n};\r\n","/* eslint-disable jsx-a11y/interactive-supports-focus */\r\nimport {\r\n  Announced,\r\n  Callout,\r\n  classNamesFunction,\r\n  DirectionalHint,\r\n  FocusZone,\r\n  FocusZoneDirection,\r\n  getTheme,\r\n  IProcessedStyleSet,\r\n  Label,\r\n  SearchBox,\r\n} from '@fluentui/react';\r\nimport React from 'react';\r\nimport { getScreenReaderTextStyles } from '../../utils/GlobalStyleUtils';\r\nimport messages from './PropertySitePicker.messages';\r\nimport { getStyles } from './PropertySitePicker.styles';\r\nimport {\r\n  IPropertySitePickerItem,\r\n  IPropertySitePickerProps,\r\n  IPropertySitePickerStyleProps,\r\n  IPropertySitePickerStyles,\r\n} from './PropertySitePicker.types';\r\ninterface IPropertySitePickerState {\r\n  searchText: string;\r\n  filteredItems: IPropertySitePickerItem[];\r\n  isCalloutVisible: boolean;\r\n  announceItemSelected: boolean;\r\n}\r\n\r\nconst getClassNames = classNamesFunction<IPropertySitePickerStyleProps, IPropertySitePickerStyles>();\r\n\r\nexport class PropertySitePicker extends React.Component<IPropertySitePickerProps, IPropertySitePickerState> {\r\n  private _classNames: IProcessedStyleSet<IPropertySitePickerStyles>;\r\n\r\n  constructor(props: IPropertySitePickerProps) {\r\n    super(props);\r\n\r\n    this.state = {\r\n      searchText: '',\r\n      filteredItems: props.items,\r\n      isCalloutVisible: false,\r\n      announceItemSelected: false,\r\n    };\r\n  }\r\n\r\n  public componentDidUpdate(prevProps: IPropertySitePickerProps) {\r\n    if (prevProps.items !== this.props.items) {\r\n      this.setState({\r\n        filteredItems: this.props.items,\r\n      });\r\n    }\r\n  }\r\n\r\n  public render(): JSX.Element {\r\n    const theme = getTheme();\r\n    this._classNames = getClassNames(getStyles, { theme });\r\n    const {\r\n      title,\r\n      searchBoxPlaceholder,\r\n      onListItemClicked,\r\n      propertyOptionsAriaLabel,\r\n      searchBoxAriaDescription,\r\n      itemSelectedAnnounceMessage,\r\n      isLoading,\r\n      isDisabled,\r\n      clearSearchOnSelect,\r\n      formatMessage,\r\n    } = this.props;\r\n    const { searchText, filteredItems, isCalloutVisible, announceItemSelected } = this.state;\r\n\r\n    const listItems: JSX.Element[] = [];\r\n\r\n    listItems.push(\r\n      <div\r\n        className={this._classNames.listItem}\r\n        key={0}\r\n        onClick={() => {\r\n          onListItemClicked(undefined);\r\n          this.setState({ isCalloutVisible: false });\r\n        }}\r\n        onKeyDown={(ev) => {\r\n          if (ev.key === 'Enter' || ev.key === ' ') {\r\n            onListItemClicked(undefined);\r\n            this.setState({ isCalloutVisible: false });\r\n          }\r\n        }}\r\n        role=\"option\"\r\n        aria-selected={false}\r\n        data-is-focusable={true}\r\n      >\r\n        {this.props.emptyOptionLabel ? this.props.emptyOptionLabel : ''}\r\n      </div>\r\n    );\r\n\r\n    filteredItems.forEach((item: IPropertySitePickerItem, index: number) => {\r\n      listItems.push(\r\n        <div\r\n          className={this._classNames.listItem}\r\n          key={item.id}\r\n          onClick={() => {\r\n            onListItemClicked(item);\r\n            this.setState({\r\n              isCalloutVisible: false,\r\n              announceItemSelected: true,\r\n              searchText: clearSearchOnSelect ? '' : searchText,\r\n            });\r\n          }}\r\n          onKeyDown={(ev) => {\r\n            if (ev.key === 'Enter' || ev.key === ' ') {\r\n              onListItemClicked(item);\r\n              this.setState({\r\n                isCalloutVisible: false,\r\n                announceItemSelected: true,\r\n                searchText: clearSearchOnSelect ? '' : searchText,\r\n              });\r\n            }\r\n          }}\r\n          // eslint-disable-next-line jsx-a11y/role-has-required-aria-props\r\n          role=\"option\"\r\n          // TODO: add i18n\r\n          aria-label={`${item.id + ' - (' + item.url + ')'} ${searchBoxPlaceholder?.includes(`${item.id}`) ? 'selected' : 'not selected'}`}\r\n          data-is-focusable={true}\r\n          data-item-index={index}\r\n        >\r\n          <span className={this._classNames.listItemLabel}>{item.id + ' - (' + item.url + ')'}</span>\r\n        </div>\r\n      );\r\n    });\r\n\r\n    return (\r\n      <>\r\n        {announceItemSelected && <Announced message={itemSelectedAnnounceMessage} aria-live=\"assertive\" />}\r\n\r\n        <div id={'searchBox'} className={this._classNames.searchBox}>\r\n          <Label required={true}>{title}</Label>\r\n          <SearchBox\r\n            styles={{\r\n              iconContainer: {\r\n                display: 'none',\r\n              },\r\n              field: {\r\n                padding: '0px 4px',\r\n              },\r\n            }}\r\n            value={searchText}\r\n            placeholder={isLoading ? formatMessage(messages.adUnitSiteLoading) : searchBoxPlaceholder}\r\n            required={true}\r\n            underlined={false}\r\n            onChange={(_, filter: string) => {\r\n              this.setState({ searchText: filter });\r\n              this._onCallSuggestionsChanged(filter);\r\n            }}\r\n            onSearch={() => this.setState({ isCalloutVisible: true })}\r\n            aria-describedby={'searchBoxAriaDesc'}\r\n            onClick={() => {\r\n              this.setState({ isCalloutVisible: true });\r\n            }}\r\n            disabled={isLoading || isDisabled}\r\n            ariaLabel={title}\r\n          />\r\n        </div>\r\n        {isCalloutVisible ? (\r\n          <Callout\r\n            target={'#searchBox'}\r\n            directionalHint={DirectionalHint.bottomLeftEdge}\r\n            gapSpace={0}\r\n            isBeakVisible={false}\r\n            calloutWidth={400}\r\n            preventDismissOnScroll={true}\r\n            setInitialFocus={true}\r\n            styles={{ root: { marginTop: '32px' } }}\r\n            onDismiss={() => this.setState({ isCalloutVisible: false })}\r\n            onKeyDown={(ev: React.KeyboardEvent<HTMLDivElement>) => {\r\n              if (ev.key === 'Tab' || (ev.shiftKey && ev.key === 'Tab')) {\r\n                this.setState({ isCalloutVisible: false });\r\n              }\r\n            }}\r\n          >\r\n            <FocusZone\r\n              direction={FocusZoneDirection.vertical}\r\n              isCircularNavigation={true}\r\n              role=\"listbox\"\r\n              aria-labelledby={'propertyOptionsAriaLabel'}\r\n            >\r\n              {listItems}\r\n            </FocusZone>\r\n          </Callout>\r\n        ) : null}\r\n        <span id=\"propertyOptionsAriaLabel\" style={getScreenReaderTextStyles()}>\r\n          {propertyOptionsAriaLabel}\r\n        </span>\r\n        <span id=\"searchBoxAriaDesc\" style={getScreenReaderTextStyles()}>\r\n          {searchBoxAriaDescription}\r\n        </span>\r\n      </>\r\n    );\r\n  }\r\n\r\n  private _onCallSuggestionsChanged = (filter: string) => {\r\n    const filteredItems = this.props.items.filter((p) => {\r\n      const idUrlString = p.id.toString() + p.url.toLocaleLowerCase();\r\n      return idUrlString.indexOf(filter.toLocaleLowerCase()) !== -1;\r\n    });\r\n\r\n    this.setState({ filteredItems: filteredItems });\r\n  };\r\n}\r\n","import { createStore } from 'satcheljs';\r\nimport { IPropertyViewState } from './schema/IPropertyViewState';\r\n\r\nexport const getCreatePropertyStore = createStore<IPropertyViewState>('CreatePropertyState', {\r\n  active: {},\r\n  errors: {},\r\n  isSubmittable: false,\r\n});\r\n","import { defineMessages } from 'react-intl';\r\n\r\nexport default defineMessages({\r\n  propertyId: {\r\n    id: 'admanagement.property.propertyId',\r\n    defaultMessage: 'Property ID',\r\n  },\r\n});\r\n","import { TextField } from '@fluentui/react';\r\nimport React from 'react';\r\nimport { InjectedIntlProps } from 'react-intl';\r\nimport { FormItem } from '../../../../../../components/Form';\r\nimport { injectIntlAndObserver } from '../../../../../../utils';\r\nimport messages from './messages';\r\n\r\nexport interface IPropertyIdFieldProps {\r\n  id?: number;\r\n}\r\n\r\nconst PropertyIdField = injectIntlAndObserver<InjectedIntlProps & IPropertyIdFieldProps>(({ intl: { formatMessage }, id }) => {\r\n  if (id === undefined) {\r\n    return null;\r\n  }\r\n\r\n  return (\r\n    <FormItem>\r\n      <TextField label={formatMessage(messages.propertyId)} required={true} disabled={true} value={String(id)} />\r\n    </FormItem>\r\n  );\r\n});\r\n\r\nexport default PropertyIdField;\r\n","import { mutatorAction } from 'satcheljs';\r\nimport { IStringDictionary, Property } from '../../../../../../@data';\r\nimport { mergeTypeWithObject } from '../../../../../../utils';\r\nimport { IClarityParams } from '../../../Manage/components/ClarityPanel/types';\r\nimport { IPropertyViewModel } from '../store/schema';\r\nimport { getCreatePropertyStore } from '../store/store';\r\n\r\nexport const onRawChanged = mutatorAction('onRawChanged', (property?: Property) => {\r\n  getCreatePropertyStore().raw = mergeTypeWithObject(new Property(), property);\r\n});\r\n\r\nexport const onPropertyChanged = mutatorAction('onPropertyChanged', (property: IPropertyViewModel) => {\r\n  getCreatePropertyStore().active = property;\r\n});\r\n\r\nexport const onPropertyErrorChanged = mutatorAction('onPropertyErrorChanged', (values?: IStringDictionary) => {\r\n  const store = getCreatePropertyStore();\r\n  if (!store.errors.name && !store.errors.url && !store.errors.approvalStatus && !store.errors.approvalStatusComments && !!values) {\r\n    getCreatePropertyStore().errors = values;\r\n  } else if (\r\n    !!getCreatePropertyStore().errors.name ||\r\n    !!getCreatePropertyStore().errors.url ||\r\n    !!getCreatePropertyStore().errors.approvalStatus ||\r\n    !!getCreatePropertyStore().errors.approvalStatusComments\r\n  ) {\r\n    getCreatePropertyStore().errors = values || {};\r\n  }\r\n});\r\n\r\nexport const onFormCleared = mutatorAction('onFormCleared', () => {\r\n  getCreatePropertyStore().active = {};\r\n});\r\n\r\nexport const onFormSubmittable = mutatorAction('onFormSubmittable', (isSubmittable: boolean) => {\r\n  getCreatePropertyStore().isSubmittable = isSubmittable;\r\n});\r\n\r\nexport const onIdChanged = mutatorAction('onIdChanged', (id: number) => {\r\n  getCreatePropertyStore().active.id = id;\r\n});\r\n\r\nexport const onNameChanged = mutatorAction('onNameChanged', (name: string) => {\r\n  getCreatePropertyStore().active.name = name;\r\n});\r\n\r\nexport const onUrlChanged = mutatorAction('onUrlChanged', (url: string) => {\r\n  getCreatePropertyStore().active.url = url.trim();\r\n});\r\n\r\nexport const onClarityChanged = mutatorAction('onClarityChanged', (clarity: IClarityParams) => {\r\n  getCreatePropertyStore().active.clarity = clarity;\r\n});\r\n\r\nexport const onClarityIdChanged = mutatorAction('onClarityIdChanged', (id?: string) => {\r\n  const clarity = getCreatePropertyStore().active.clarity;\r\n  if (clarity !== undefined) {\r\n    clarity.clarityId = id?.trim();\r\n  }\r\n});\r\n\r\nexport const onEditClarityId = mutatorAction('onEditClarityId', (edit: boolean) => {\r\n  const clarity = getCreatePropertyStore().active.clarity;\r\n  if (clarity) {\r\n    clarity.clarityEdit = edit;\r\n  }\r\n});\r\n\r\nexport const onSettingClarityErrorMessage = mutatorAction('onSettingClarityErrorMessage', (error: string) => {\r\n  const store = getCreatePropertyStore();\r\n  store.errors.clarity = error;\r\n  const clarity = store.active.clarity;\r\n  if (clarity) {\r\n    clarity.clarityErrorMessage = error;\r\n  }\r\n});\r\n","import { UserRoleEntity, userRoleKey } from '../../../../../../../@data/services/UserRoleService';\r\nimport { Property as PropertyAccessPermissions } from '../../../../../../../@data/store/schema/userrolemodels/Property';\r\n\r\nexport function GetPropertyAccessPermission(): PropertyAccessPermissions | null {\r\n  const userRoles = localStorage.getItem(userRoleKey);\r\n  if (userRoles === null) {\r\n    return null;\r\n  }\r\n  const userRolesJSON = JSON.parse(userRoles);\r\n\r\n  for (const value in userRolesJSON) {\r\n    if (value === UserRoleEntity.Property) {\r\n      return JSON.parse(userRolesJSON[value]);\r\n    }\r\n  }\r\n\r\n  return null;\r\n}\r\n","import { hasUpdateAccess } from '../../../../../../../@data/services/UserRoleService';\r\nimport { FormState } from '../../../../../../../components/Form';\r\n\r\nexport function IsDisabled(mode: FormState, permission: number): boolean {\r\n  if (mode === FormState.Create || mode === FormState.InPageCreate) {\r\n    return false;\r\n  }\r\n\r\n  return !hasUpdateAccess(permission);\r\n}\r\n","import { defineMessages } from 'react-intl';\r\n\r\nexport default defineMessages({\r\n  inputPropertyName: {\r\n    id: 'admanagement.property.inputPropertyName',\r\n    defaultMessage: 'Property name',\r\n  },\r\n  inputSiteName: {\r\n    id: 'admanagement.site.inputSiteName',\r\n    defaultMessage: 'Site name',\r\n  },\r\n  propertyNameLength: {\r\n    id: 'admanagement.property.propertyNameLength',\r\n    defaultMessage: 'Maximum of 35 characters',\r\n  },\r\n});\r\n","import { TextField } from '@fluentui/react';\r\nimport React, { useEffect, useRef } from 'react';\r\nimport { InjectedIntlProps } from 'react-intl';\r\nimport { isTythonSelfServeUser } from '../../../../../../@data';\r\nimport { completeAccess } from '../../../../../../@data/services/UserRoleService';\r\nimport AppMessages from '../../../../../../App.messages';\r\nimport { FormItem, FormState } from '../../../../../../components/Form';\r\nimport { PROPERTY_NAME_INPUT } from '../../../../../../constants/DataTestIdConstants';\r\nimport { injectIntlAndObserver } from '../../../../../../utils';\r\nimport { onNameChanged } from '../../__data__/mutatorActions';\r\nimport { getCreatePropertyStore } from '../../__data__/store/store';\r\nimport { GetPropertyAccessPermission } from '../../variations/CreateNonTythonProperty/utils/GetPropertyAccessPermissions';\r\nimport { IsDisabled } from '../../variations/CreateNonTythonProperty/utils/IsFieldDisabled';\r\nimport messages from './messages';\r\n\r\nexport interface IPropertyNameInputFieldProps {\r\n  mode: FormState;\r\n}\r\n\r\nconst PropertyNameInputField = injectIntlAndObserver<InjectedIntlProps & IPropertyNameInputFieldProps>(\r\n  ({ intl: { formatMessage }, mode }) => {\r\n    const {\r\n      active: { name },\r\n      errors: { name: error },\r\n    } = getCreatePropertyStore();\r\n    const propertyAccessPermissions = GetPropertyAccessPermission();\r\n    const accessLevel = propertyAccessPermissions === null ? completeAccess : propertyAccessPermissions.name;\r\n    const inputRef = useRef(null);\r\n\r\n    useEffect(() => {\r\n      if (inputRef.current === null) {\r\n        return;\r\n      }\r\n      const container = document.getElementById('propertyId') as HTMLElement;\r\n      const label = container.getElementsByClassName('ms-Label')[0] as HTMLElement;\r\n      if (label) {\r\n        label.title = formatMessage(AppMessages.required);\r\n      }\r\n      // eslint-disable-next-line react-hooks/exhaustive-deps\r\n    }, [inputRef.current]);\r\n\r\n    return (\r\n      <FormItem id=\"propertyId\">\r\n        <TextField\r\n          label={formatMessage(isTythonSelfServeUser() ? messages.inputSiteName : messages.inputPropertyName)}\r\n          componentRef={inputRef}\r\n          required={true}\r\n          aria-required={true}\r\n          errorMessage={error}\r\n          value={name}\r\n          placeholder={formatMessage(messages.propertyNameLength)}\r\n          onChange={(_, value) => onNameChanged(value!)}\r\n          disabled={IsDisabled(mode, accessLevel)}\r\n          data-test-id={PROPERTY_NAME_INPUT}\r\n        />\r\n      </FormItem>\r\n    );\r\n  }\r\n);\r\n\r\nexport default PropertyNameInputField;\r\n","import { defineMessages } from 'react-intl';\r\n\r\nexport default defineMessages({\r\n  websiteUrl: {\r\n    id: 'admanagement.property.websiteUrl',\r\n    defaultMessage: 'Website URL',\r\n  },\r\n  siteUrl: {\r\n    id: 'admanagement.property.siteUrl',\r\n    defaultMessage: 'Site Domain',\r\n  },\r\n  websiteUrlExample: {\r\n    id: 'admanagement.property.websiteUrlExample',\r\n    defaultMessage: 'Enter your Site Domain. ex: www.website.com',\r\n  },\r\n  websiteUrlInvalidMsg: {\r\n    id: 'admanagement.property.websiteUrlInvalidMsg',\r\n    defaultMessage: 'Invalid domain',\r\n  },\r\n});\r\n","import { TextField } from '@fluentui/react';\r\nimport React, { useEffect, useRef } from 'react';\r\nimport { InjectedIntlProps } from 'react-intl';\r\nimport { isTythonSelfServeUser } from '../../../../../../@data';\r\nimport AppMessages from '../../../../../../App.messages';\r\nimport { FormItem, FormState } from '../../../../../../components/Form';\r\nimport { PROPERTY_DOMAIN_INPUT } from '../../../../../../constants/DataTestIdConstants';\r\nimport { StepState } from '../../../../../../layout/DetailPageWithStepper/DetailPageWithStepper.types';\r\nimport { injectIntlAndObserver } from '../../../../../../utils';\r\nimport { onPropertyErrorChanged, onUrlChanged } from '../../__data__/mutatorActions';\r\nimport { getCreatePropertyStore } from '../../__data__/store/store';\r\nimport messages from './messages';\r\n\r\nexport interface IPropertyUrlInputFieldProps {\r\n  mode: FormState;\r\n  stepState?: StepState;\r\n}\r\n\r\nconst PropertyUrlInputField = injectIntlAndObserver<InjectedIntlProps & IPropertyUrlInputFieldProps>(\r\n  ({ intl: { formatMessage }, mode, stepState }) => {\r\n    const {\r\n      active: { url },\r\n      errors,\r\n    } = getCreatePropertyStore();\r\n    const { url: error } = errors;\r\n    const inputRef = useRef(null);\r\n    const pattern = new RegExp(/^(?!https?:\\/\\/)(?!.*\\/)[\\w.-]+\\.[\\w-]{2,}$/i);\r\n    const prefixStyle = { prefix: { padding: '0px 5px' }, field: { padding: '0px 2px' } };\r\n\r\n    useEffect(() => {\r\n      if (inputRef.current === null) {\r\n        return;\r\n      }\r\n      const container = document.getElementById('propertyUrl') as HTMLElement;\r\n      const label = container.getElementsByClassName('ms-Label')[0] as HTMLElement;\r\n      if (label) {\r\n        label.title = formatMessage(AppMessages.required);\r\n      }\r\n      // eslint-disable-next-line react-hooks/exhaustive-deps\r\n    }, [inputRef.current]);\r\n\r\n    return (\r\n      <FormItem id=\"propertyUrl\">\r\n        <TextField\r\n          label={formatMessage(isTythonSelfServeUser() ? messages.siteUrl : messages.websiteUrl)}\r\n          required={true}\r\n          errorMessage={error}\r\n          value={url}\r\n          disabled={\r\n            [FormState.Edit, FormState.MultiStepEdit].includes(mode) ||\r\n            (stepState === StepState.Dirty && mode === FormState.MultiStepCreation)\r\n          }\r\n          placeholder={formatMessage(messages.websiteUrlExample)}\r\n          onChange={(_, value) => {\r\n            onUrlChanged(value!);\r\n            if (value) {\r\n              onPropertyErrorChanged({\r\n                ...errors,\r\n                url: pattern.test(value) ? undefined : formatMessage(messages.websiteUrlInvalidMsg),\r\n              });\r\n            }\r\n          }}\r\n          componentRef={inputRef}\r\n          prefix=\"https://\"\r\n          styles={prefixStyle}\r\n          data-test-id={PROPERTY_DOMAIN_INPUT}\r\n        />\r\n      </FormItem>\r\n    );\r\n  }\r\n);\r\n\r\nexport default PropertyUrlInputField;\r\n","import { defineMessages } from 'react-intl';\r\n\r\nexport default defineMessages({\r\n  createPageTitle: {\r\n    id: 'admanagement.property.createTitle',\r\n    defaultMessage: 'Create property',\r\n  },\r\n  createSitePageTitle: {\r\n    id: 'admanagement.site.createTitle',\r\n    defaultMessage: 'Create site',\r\n  },\r\n  editPageTitle: {\r\n    id: 'admanagement.property.editTitle',\r\n    defaultMessage: 'Update property',\r\n  },\r\n  editSitePageTitle: {\r\n    id: 'admanagement.site.editTitle',\r\n    defaultMessage: 'Update site',\r\n  },\r\n});\r\n","import { ClarityType, isTythonSelfServeUser, onNavigateBack } from '../../../../../@data';\r\nimport { FormState } from '../../../../../components/Form';\r\nimport { RouteName } from '../../../@data';\r\nimport { createReturnUrl } from '../../../@data/services/AdManagementService';\r\nimport { onFormCleared } from '../__data__/mutatorActions';\r\nimport { IPropertyViewModel } from '../__data__/store/schema';\r\nimport messages from '../variations/CreateNonTythonProperty/messages';\r\n\r\nconst useDetailsPageButtonsStatus = (history, mode, onSubmit, onCancel, formatMessage) => {\r\n  const isTythonUser = isTythonSelfServeUser();\r\n\r\n  const titleLabel =\r\n    mode === FormState.Edit\r\n      ? formatMessage(isTythonUser ? messages.editSitePageTitle : messages.editPageTitle)\r\n      : formatMessage(isTythonUser ? messages.createSitePageTitle : messages.createPageTitle);\r\n\r\n  const submitLabel =\r\n    mode === FormState.Edit\r\n      ? formatMessage(isTythonUser ? messages.editSitePageTitle : messages.editPageTitle)\r\n      : formatMessage(isTythonUser ? messages.createSitePageTitle : messages.createPageTitle);\r\n\r\n  const isSubmitButtonDisabled = (active): boolean => {\r\n    if (!active.name || !active.url || active.approvalStatus === undefined) {\r\n      return true;\r\n    }\r\n\r\n    /* For tython users selecting clarity type is mandatory*/\r\n    if (isTythonUser) {\r\n      return !(\r\n        (active.tythonClarity?.connectingClarityApprovalTython && active.tythonClarity?.clarityType === ClarityType.Behavioral) ||\r\n        active.tythonClarity?.clarityType === ClarityType.Fraud\r\n      );\r\n    }\r\n\r\n    return false;\r\n  };\r\n\r\n  const onHandleSubmit = (active: IPropertyViewModel): void => {\r\n    if (onSubmit) {\r\n      onSubmit({\r\n        url: active?.url as string,\r\n        name: active?.name as string,\r\n        clarityType: active?.clarity?.clarityType,\r\n        clarityId: active?.clarity?.clarityId,\r\n      });\r\n      return;\r\n    }\r\n  };\r\n\r\n  const onHandleCancel = (publisherId?: string, accountId?: string): void => {\r\n    onFormCleared();\r\n\r\n    if (onCancel) {\r\n      onCancel();\r\n      return;\r\n    }\r\n\r\n    if (mode !== FormState.InPageCreate) {\r\n      // return to manage page\r\n      const returnUrl = createReturnUrl(isTythonUser ? RouteName.inventory : RouteName.property, publisherId, accountId);\r\n      onNavigateBack(history, returnUrl);\r\n    }\r\n  };\r\n\r\n  return {\r\n    titleLabel,\r\n    submitLabel,\r\n    isSubmitButtonDisabled,\r\n    onHandleSubmit,\r\n    onHandleCancel,\r\n  };\r\n};\r\n\r\nexport default useDetailsPageButtonsStatus;\r\n","import { Property, Publisher, UserContext, listEntity } from '../../../../../@data';\r\n\r\nexport const fetchPropertyById = async (\r\n  publisher: Publisher,\r\n  id: string,\r\n  userContext?: UserContext,\r\n  updateLoadingStatus?: (isLoading: boolean) => void\r\n): Promise<Property> => {\r\n  updateLoadingStatus?.(true);\r\n  const list = await listEntity(\r\n    [publisher],\r\n    userContext,\r\n    Property,\r\n    new URLSearchParams([\r\n      ['type', 'Search'],\r\n      ['ids', id],\r\n    ])\r\n  );\r\n\r\n  if (!list || !list.length) {\r\n    throw Error('Cannot find property Id');\r\n  }\r\n  updateLoadingStatus?.(false);\r\n  return list[0];\r\n};\r\n","import { action, orchestrator } from 'satcheljs';\r\n\r\nimport {\r\n  AdUnit,\r\n  ClarityStatus,\r\n  PropertyApprovalStatus,\r\n  Publisher,\r\n  getAppStore,\r\n  listEntity,\r\n  onLoadingChanged,\r\n  showErrorToastNotification,\r\n} from '../../../../../../../../@data';\r\nimport { FormState } from '../../../../../../../../components/Form';\r\nimport { IHierarchicalPickerItem } from '../../../../../../../../components/HierarchicalMultiSelectPicker';\r\nimport { fetchPropertyById } from '../../../../../@data/services/PropertyService';\r\nimport PropertyMessages from '../../../../../Property.messages';\r\nimport { onPropertyChanged, onPropertyErrorChanged, onRawChanged } from '../../../../__data__/mutatorActions';\r\nimport { IPropertyViewModel } from '../../../../__data__/store/schema';\r\n\r\nexport const onFormInitialized = action(\r\n  'onFormInitialized',\r\n  (mode: FormState, publisherId: string, accountId?: string, entityId?: string) => ({\r\n    mode,\r\n    publisherId,\r\n    accountId,\r\n    entityId,\r\n  })\r\n);\r\n\r\norchestrator(onFormInitialized, async (msg) => {\r\n  const { userContext } = getAppStore();\r\n\r\n  const property: IPropertyViewModel = {};\r\n  property.clarity = {};\r\n\r\n  const publisherId = parseInt(msg.publisherId, 10);\r\n  if (!isNaN(publisherId)) {\r\n    const publisher = new Publisher(publisherId);\r\n    try {\r\n      onPropertyErrorChanged();\r\n      onLoadingChanged(true);\r\n\r\n      if (msg.mode === FormState.Edit && msg.entityId) {\r\n        const rawProperty = await fetchPropertyById(publisher, msg.entityId, userContext);\r\n        property.id = rawProperty.id;\r\n        property.name = String(rawProperty.name);\r\n        property.url = rawProperty.url;\r\n        property.approvalStatusComments = rawProperty.approvalStatusComments;\r\n        property.approvalStatus = rawProperty.approvalStatus;\r\n\r\n        const adunits = await listEntity([publisher], userContext, AdUnit, new URLSearchParams([['extendedInfo', 'true']]));\r\n        property.adunits = adunits.map(\r\n          (a) => ({ id: a.id, name: a.name, parentId: a.accountId, parentName: a.accountName } as IHierarchicalPickerItem)\r\n        );\r\n\r\n        property.adunitsSelected = rawProperty.associatedAdUnitIds\r\n          ? property.adunits.filter((f) => f.id && rawProperty.associatedAdUnitIds!.includes(f.id))\r\n          : [];\r\n\r\n        property.clarity.clarityId = rawProperty.clarityProjectId;\r\n        property.clarity.originalClarityId = rawProperty.clarityProjectId;\r\n        if (rawProperty.clarityStatus) {\r\n          const status: ClarityStatus = ClarityStatus[rawProperty.clarityStatus];\r\n          property.clarity.clarityLinkingEnabled = status === ClarityStatus.NotConnected ? false : true;\r\n          property.clarity.clarityStatus = status || ClarityStatus.Approved;\r\n          property.clarity.clarityEdit = status === ClarityStatus.Approved || status === undefined ? false : true;\r\n        }\r\n\r\n        onRawChanged(rawProperty);\r\n      } else {\r\n        onRawChanged();\r\n        property.approvalStatus = PropertyApprovalStatus.Approved;\r\n      }\r\n      onPropertyChanged(property);\r\n    } catch (e) {\r\n      showErrorToastNotification({ textMessageDescriptor: PropertyMessages.propertyLoadError });\r\n    } finally {\r\n      onLoadingChanged(false);\r\n    }\r\n  } else {\r\n    showErrorToastNotification({\r\n      textMessageDescriptor: PropertyMessages.invalidState,\r\n    });\r\n  }\r\n});\r\n","import { action, orchestrator } from 'satcheljs';\r\n\r\nimport { Log } from '../../../../../../../../../logging/src';\r\nimport {\r\n  ApiError,\r\n  NotificationLabel,\r\n  NotificationSeverity,\r\n  Property,\r\n  getAppStore,\r\n  listEntity,\r\n  onNavigateBack,\r\n  onNotificationCardAdded,\r\n  onSavingChanged,\r\n  postEntity,\r\n  putEntity,\r\n  showErrorToastNotification,\r\n  showSuccessToastNotification,\r\n} from '../../../../../../../../@data';\r\nimport notificationMessages from '../../../../../../../../NotificationsPanel.Types.messages';\r\nimport { FormState } from '../../../../../../../../components/Form';\r\nimport { validateSchema } from '../../../../../../../../utils';\r\nimport { RouteName } from '../../../../../../@data';\r\nimport { createReturnUrl } from '../../../../../../@data/services/AdManagementService';\r\nimport { getAdunitStore } from '../../../../../../Adunit/@data';\r\nimport { onAdunitPropertyListChanged } from '../../../../../../Adunit/@data/actions';\r\nimport { fetchPropertyById } from '../../../../../@data/services/PropertyService';\r\nimport { getGridPropertyStore } from '../../../../../Manage/__data__/store/store';\r\nimport PropertyMessages from '../../../../../Property.messages';\r\nimport { onFormCleared, onIdChanged, onPropertyErrorChanged, onSettingClarityErrorMessage } from '../../../../__data__/mutatorActions';\r\nimport { nonTythonPropertyErrorModel } from '../../../../__data__/store/schema';\r\nimport { getCreatePropertyStore } from '../../../../__data__/store/store';\r\n\r\nexport const onFormSubmitted = action('onFormSubmitted', (mode: FormState, routeHistory?, onSubmit?: () => void) => ({\r\n  mode,\r\n  routeHistory,\r\n  onSubmit,\r\n}));\r\n\r\n/**\r\n * 1) Set Loading to true\r\n * 2) Submit API call to Submit Data to Store\r\n * 3) Check errors, if any, send action to notification that error exists\r\n * 4) Clear the form\r\n * 5) Navigate back to property list\r\n */\r\norchestrator(onFormSubmitted, async ({ mode, routeHistory, onSubmit }) => {\r\n  const { publisher, account, userContext } = getAppStore();\r\n  const { active, raw } = getCreatePropertyStore();\r\n\r\n  if (publisher && raw) {\r\n    const body: Property = {\r\n      ...raw,\r\n      id: active.id,\r\n      name: active.name,\r\n    };\r\n\r\n    onSavingChanged(true);\r\n\r\n    try {\r\n      let properties = getGridPropertyStore().data;\r\n\r\n      if (properties === undefined || properties.length === 0) {\r\n        properties = await listEntity([publisher], userContext, Property);\r\n      }\r\n\r\n      await validateSchema(nonTythonPropertyErrorModel(active, mode === FormState.Edit, properties), active);\r\n      onPropertyErrorChanged();\r\n    } catch (e) {\r\n      onSavingChanged(false);\r\n      onPropertyErrorChanged(e);\r\n      showErrorToastNotification({\r\n        textMessageDescriptor: PropertyMessages.propertyFormError,\r\n        intlMessageValues: { errorCount: Object.keys(e).length },\r\n      });\r\n      return;\r\n    }\r\n\r\n    if (publisher.id) {\r\n      body.publisherId = publisher.id;\r\n    }\r\n\r\n    if (active.approvalStatus) {\r\n      body.approvalStatus = active.approvalStatus;\r\n    }\r\n\r\n    if (active.url) {\r\n      body.url = active.url;\r\n    }\r\n\r\n    body.enableMicrosoftClarity = active.clarity?.clarityLinkingEnabled;\r\n    if (active.clarity?.clarityId) {\r\n      body.clarityProjectId = active.clarity.clarityId;\r\n    }\r\n\r\n    body.approvalStatusComments = active.approvalStatusComments ? active.approvalStatusComments : '';\r\n    body.associatedAdUnitIds = active.adunitsSelected ? active.adunitsSelected.map((a) => a.id!) : [];\r\n\r\n    try {\r\n      let entity: Property | undefined;\r\n\r\n      if (mode === FormState.Edit) {\r\n        entity = await putEntity([publisher], body, userContext, Property);\r\n        showSuccessToastNotification({\r\n          textMessageDescriptor: PropertyMessages.propertyEditSuccess,\r\n          intlMessageValues: { entityId: entity.id },\r\n        });\r\n      } else {\r\n        entity = await postEntity([publisher], Property, body, userContext);\r\n        if (entity && entity.id) {\r\n          onIdChanged(entity.id);\r\n\r\n          if (mode === FormState.InPageCreate) {\r\n            const adunitStore = getAdunitStore();\r\n\r\n            const property = await fetchPropertyById(publisher, entity.id + '', userContext);\r\n            const adunitPropertyList = [] as Property[];\r\n\r\n            if (adunitStore.active.properties) {\r\n              adunitPropertyList.push(...adunitStore.active.properties);\r\n            }\r\n            adunitPropertyList.push(property);\r\n            onAdunitPropertyListChanged(adunitPropertyList);\r\n          }\r\n        }\r\n        showSuccessToastNotification({\r\n          textMessageDescriptor: PropertyMessages.propertyCreateSuccess,\r\n          intlMessageValues: { entityId: entity.id },\r\n        });\r\n      }\r\n\r\n      if (mode !== FormState.InPageCreate) {\r\n        const returnUrl = createReturnUrl(\r\n          RouteName.property,\r\n          String(publisher.id),\r\n          (account && String(account.id)) || undefined,\r\n          String(entity.id),\r\n          mode\r\n        );\r\n        if (routeHistory) {\r\n          onNavigateBack(routeHistory, returnUrl);\r\n        }\r\n      }\r\n\r\n      onFormCleared();\r\n      onSubmit?.();\r\n    } catch (e) {\r\n      const getClarityErrorMessage = (e: ApiError) => {\r\n        if (e.code === 404) {\r\n          return 'Clarity project ID does not exist';\r\n        } else {\r\n          return e.message.split(`description\":\"`)[1].split(`\"`)[0];\r\n        }\r\n      };\r\n\r\n      Log.error(e);\r\n      const apiErrorObj = e as ApiError;\r\n      if (apiErrorObj.code === 404) {\r\n        onSettingClarityErrorMessage(getClarityErrorMessage(apiErrorObj));\r\n      } else {\r\n        onSettingClarityErrorMessage(getClarityErrorMessage(apiErrorObj));\r\n      }\r\n\r\n      onNotificationCardAdded({\r\n        // tslint:disable-next-line: no-any\r\n        severity: NotificationSeverity.Error,\r\n        titleMessageDescriptor: notificationMessages.PropertyEditFailedNotificationTitle,\r\n        contentMessageDescriptor: notificationMessages.PropertyEditFailedNotificationContent,\r\n        notificationLabel: NotificationLabel.PropertyEditFailedNotification,\r\n      });\r\n    } finally {\r\n      onSavingChanged(false);\r\n    }\r\n  } else {\r\n    showErrorToastNotification({\r\n      textMessageDescriptor: PropertyMessages.invalidForm,\r\n      intlMessageValues: { formOperation: FormState[mode], entityId: active.id },\r\n    });\r\n  }\r\n});\r\n","import { mixed, object, string } from 'yup';\r\nimport { Property, PropertyApprovalStatus } from '../../../../../../../@data';\r\nimport { IPropertyViewModel } from './IPropertyViewModel';\r\n\r\nexport function nonTythonPropertyErrorModel(form: IPropertyViewModel, isEditMode: boolean, properties: Property[] = []) {\r\n  return object<IPropertyViewModel>().shape({\r\n    name: string().trim().required() && string().max(35).duplicateName(properties, form),\r\n    url: string().trim().domain().required() && string().trim().duplicateDomain(properties, isEditMode, form),\r\n    approvalStatusComments: string(),\r\n    approvalStatus: mixed()\r\n      .oneOf([\r\n        PropertyApprovalStatus.Approved,\r\n        PropertyApprovalStatus.AutoApproved,\r\n        PropertyApprovalStatus.Rejected,\r\n        PropertyApprovalStatus.UnderManualReview,\r\n      ])\r\n      .required(),\r\n  });\r\n}\r\n\r\nexport function tythonPropertyErrorModel(form: IPropertyViewModel, isEditMode: boolean, properties: Property[] = []) {\r\n  return object<IPropertyViewModel>().shape({\r\n    name: string().trim().required() && string().max(35).duplicateName(properties, form),\r\n    url:\r\n      string().trim().domain().required() &&\r\n      string()\r\n        .trim()\r\n        .duplicateDomain(properties, isEditMode, form)\r\n        .test('url', 'Invalid domain name', (value) => new RegExp(/^(?!https?:\\/\\/)(?!.*\\/)[\\w.-]+\\.[\\w-]{2,}$/i).test(value)),\r\n  });\r\n}\r\n","import { action, orchestrator } from 'satcheljs';\r\nimport { AdUnit, Publisher, getAppStore, listEntity, onLoadingChanged, showErrorToastNotification } from '../../../../../../../../@data';\r\nimport { FormState } from '../../../../../../../../components/Form';\r\nimport { IHierarchicalPickerItem } from '../../../../../../../../components/HierarchicalMultiSelectPicker';\r\nimport PropertyMessages from '../../../../../Property.messages';\r\nimport { onPropertyChanged } from '../../../../__data__/mutatorActions';\r\nimport { IPropertyViewModel } from '../../../../__data__/store/schema';\r\nimport { getCreatePropertyStore } from '../../../../__data__/store/store';\r\n\r\nexport const loadAttachedAdUnits = action(\r\n  'loadAttachedAdUnits',\r\n  (mode: FormState, publisherId: string, accountId?: string, entityId?: string) => ({\r\n    mode,\r\n    publisherId,\r\n    accountId,\r\n    entityId,\r\n  })\r\n);\r\n\r\norchestrator(loadAttachedAdUnits, async (msg) => {\r\n  const { active, raw } = getCreatePropertyStore();\r\n  const { userContext } = getAppStore();\r\n  const publisherId = parseInt(msg.publisherId, 10);\r\n\r\n  if (!isNaN(publisherId)) {\r\n    try {\r\n      const property: IPropertyViewModel = { ...active };\r\n\r\n      onLoadingChanged(true);\r\n\r\n      const publisher = new Publisher(publisherId);\r\n      const adunits = await listEntity([publisher], userContext, AdUnit, new URLSearchParams([['extendedInfo', 'true']]));\r\n      property.adunits = adunits.map(\r\n        (a) => ({ id: a.id, name: a.name, parentId: a.accountId, parentName: a.accountName } as IHierarchicalPickerItem)\r\n      );\r\n\r\n      if (msg.mode === FormState.Edit && msg.entityId) {\r\n        property.adunitsSelected = raw?.associatedAdUnitIds\r\n          ? property.adunits.filter((f) => f.id && raw.associatedAdUnitIds!.includes(f.id))\r\n          : [];\r\n      }\r\n\r\n      onPropertyChanged(property);\r\n    } catch (e) {\r\n      showErrorToastNotification({ textMessageDescriptor: PropertyMessages.adUnitsFetchFailed });\r\n    } finally {\r\n      onLoadingChanged(false);\r\n    }\r\n  } else {\r\n    showErrorToastNotification({ textMessageDescriptor: PropertyMessages.adUnitsFetchFailed });\r\n  }\r\n});\r\n","import { mutatorAction } from 'satcheljs';\r\nimport { PropertyApprovalStatus } from '../../../../../../../../@data';\r\nimport { IHierarchicalPickerItem } from '../../../../../../../../components/HierarchicalMultiSelectPicker';\r\nimport { getCreatePropertyStore } from '../../../../__data__/store/store';\r\n\r\nexport const onApprovalStatusChanged = mutatorAction('onApprovalStatusChanged', (status: PropertyApprovalStatus) => {\r\n  getCreatePropertyStore().active.approvalStatus = status;\r\n});\r\n\r\nexport const onApprovalStatusCommentsChanged = mutatorAction('onApprovalStatusCommentsChanged', (comments: string) => {\r\n  getCreatePropertyStore().active.approvalStatusComments = comments;\r\n});\r\n\r\nexport const onAttachedAdunitsChanged = mutatorAction('onAttachedAdunitsChanged', (adunits: IHierarchicalPickerItem[]) => {\r\n  getCreatePropertyStore().active.adunitsSelected = adunits;\r\n});\r\n\r\nexport const onEnableClarityToggleChanged = mutatorAction('onEnableClarityToggleChanged', (enabled: boolean) => {\r\n  const store = getCreatePropertyStore();\r\n  const clarity = store.active.clarity;\r\n  if (clarity) {\r\n    clarity.clarityLinkingEnabled = enabled;\r\n    if (enabled === false) {\r\n      clarity.clarityId = '';\r\n    } else {\r\n      clarity.clarityId = clarity.originalClarityId?.trim();\r\n    }\r\n  }\r\n});\r\n","import { action, orchestrator } from 'satcheljs';\r\nimport { Log } from '../../../../../../../logging/src';\r\nimport {\r\n  Property,\r\n  Publisher,\r\n  PublisherTier,\r\n  getAppStore,\r\n  getEntity,\r\n  isTythonSelfServeUser,\r\n  listEntity,\r\n  showErrorToastNotification,\r\n} from '../../../../../../@data';\r\nimport { fetchPropertiesServingConfigs } from '../../../../AdBlock/@data/services';\r\nimport PropertyMessages from '../../../Property.messages';\r\nimport { setFetchingData, setLoading, setPropertiesFetching, setPropertiesServingConfigs, setPropertyData } from '../mutatorActions';\r\nimport { getGridPropertyStore } from '../store/store';\r\n\r\nexport const onManagePageInitialized = action('onManagePageInitialized');\r\n\r\norchestrator(onManagePageInitialized, async () => {\r\n  try {\r\n    const { publisher, userContext } = getAppStore();\r\n    const properties = getGridPropertyStore().data;\r\n\r\n    if (publisher && userContext) {\r\n      if (properties === undefined || properties.length === 0) {\r\n        setLoading(true);\r\n      }\r\n      setFetchingData(true);\r\n      setPropertiesFetching(true);\r\n\r\n      const data = await listEntity([publisher], userContext, Property);\r\n\r\n      let publisherFullInfo = {} as Publisher;\r\n      if (!isTythonSelfServeUser()) {\r\n        publisherFullInfo = await getEntity<Publisher>([publisher], userContext);\r\n      }\r\n\r\n      // Check for self serve user or publisher service level if publisher is being searched from Internal UI\r\n      // This is because only self serve publishers have property serving configs that need to be fetched\r\n      if ((isTythonSelfServeUser() || publisherFullInfo.publisherTier === PublisherTier.SelfServe3rdParty) && data.length > 0) {\r\n        const propertyServingConfig = await fetchPropertiesServingConfigs(publisher);\r\n        data.forEach((property) => {\r\n          const propertyServingConfigForProperty = propertyServingConfig.find((config) => config.propertyId === property.id);\r\n          if (propertyServingConfigForProperty) {\r\n            property.servingConfig = propertyServingConfigForProperty;\r\n          }\r\n        });\r\n        setPropertiesServingConfigs(propertyServingConfig);\r\n      }\r\n\r\n      setPropertyData(data.sort((a, b) => b.id - a.id));\r\n      setLoading(false);\r\n    }\r\n  } catch (error) {\r\n    Log.error(error);\r\n    showErrorToastNotification({ textMessageDescriptor: PropertyMessages.propertiesFetchFailed });\r\n  } finally {\r\n    setLoading(false);\r\n    setFetchingData(false);\r\n    setPropertiesFetching(false);\r\n  }\r\n});\r\n","import { ITheme } from '@fluentui/react';\r\nimport { ClarityStatus } from '../../../../../../@data';\r\n\r\nexport interface IClarityParams {\r\n  clarityId?: string;\r\n  originalClarityId?: string;\r\n  clarityLinkingEnabled?: boolean;\r\n  clarityErrorMessage?: string;\r\n  clarityEdit?: boolean;\r\n  clarityStatus?: ClarityStatus;\r\n}\r\n\r\nexport interface IClarityPanelStyleProps {\r\n  theme: ITheme;\r\n}\r\n\r\nexport interface IClarityPanelStyle {\r\n  panelButton?: string;\r\n  panelDescriptor?: string;\r\n  panelAgreement?: string;\r\n  panelPendingResendButton?: string;\r\n}\r\n\r\nexport enum ClarityErrors {\r\n  ClarityProjectNotLinked = 'ClarityProjectNotLinked',\r\n  ClarityProjectUnlinkingFailed = 'ClarityProjectUnlinkingFailed',\r\n}\r\n","import { action, orchestrator } from 'satcheljs';\r\nimport {\r\n  ApiError,\r\n  ClarityStatus,\r\n  Property,\r\n  getAppStore,\r\n  onLoadingChanged,\r\n  patchEntity,\r\n  showErrorToastNotification,\r\n  showSuccessToastNotification,\r\n} from '../../../../../../@data';\r\nimport { UpdateClarityProject } from '../../../../../../@data/store/schema/models/UpdateClarityProject';\r\nimport { onSettingClarityErrorMessage } from '../../../Create/__data__/mutatorActions';\r\nimport { getCreatePropertyStore } from '../../../Create/__data__/store/store';\r\nimport PropertyMessages from '../../../Property.messages';\r\nimport { ClarityErrors } from '../../components/ClarityPanel/types';\r\nimport { setClarityPanelVisibility, setPropertyData } from '../mutatorActions';\r\nimport { getGridPropertyStore } from '../store/store';\r\n\r\nexport const onClarityUpdate = action('onClarityUpdate');\r\n\r\norchestrator(onClarityUpdate, async () => {\r\n  const { publisher, userContext } = getAppStore();\r\n  const {\r\n    active: { clarity },\r\n  } = getCreatePropertyStore();\r\n  const { data, selectedPropertyId: propertyId } = getGridPropertyStore();\r\n\r\n  if (publisher && propertyId) {\r\n    try {\r\n      onLoadingChanged(true);\r\n\r\n      const body: UpdateClarityProject = {\r\n        apiPath: undefined,\r\n        className: 'updateClarityProject',\r\n        propertyId: propertyId.toString(),\r\n        clarityProjectId: clarity?.clarityId,\r\n        enableMicrosoftClarity: clarity?.clarityLinkingEnabled,\r\n      };\r\n\r\n      await patchEntity([publisher, new Property()], UpdateClarityProject, body, userContext);\r\n\r\n      if (data) {\r\n        const updatedProperty = { ...data.find((property) => property.id.toString() === propertyId) };\r\n\r\n        if (updatedProperty) {\r\n          if (clarity?.clarityLinkingEnabled === true) {\r\n            showSuccessToastNotification({\r\n              textMessageDescriptor: PropertyMessages.clarityLinkSuccess,\r\n            });\r\n            updatedProperty.clarityStatus = ClarityStatus.Pending;\r\n            updatedProperty.clarityProjectId = clarity?.clarityId;\r\n          } else {\r\n            showSuccessToastNotification({\r\n              textMessageDescriptor: PropertyMessages.clarityUnlinkSuccess,\r\n            });\r\n            updatedProperty.clarityProjectId = undefined;\r\n            updatedProperty.clarityStatus = ClarityStatus.NotConnected;\r\n          }\r\n        }\r\n\r\n        const updatedProperties: Property[] = data.map((property) => {\r\n          if (property.id.toString() === propertyId) {\r\n            return updatedProperty as Property;\r\n          } else {\r\n            return property as Property;\r\n          }\r\n        });\r\n\r\n        setPropertyData(updatedProperties);\r\n        setClarityPanelVisibility(false);\r\n      }\r\n    } catch (e) {\r\n      const apiErrorObj = e as ApiError;\r\n      if (apiErrorObj && apiErrorObj.code === 404) {\r\n        onSettingClarityErrorMessage(JSON.parse(apiErrorObj.message)[0].description);\r\n      } else if (apiErrorObj && apiErrorObj.code === 400) {\r\n        const error = ClarityErrors[JSON.parse(apiErrorObj.message)[0].code];\r\n        if (error === ClarityErrors.ClarityProjectNotLinked || error === ClarityErrors.ClarityProjectUnlinkingFailed) {\r\n          showErrorToastNotification({ text: JSON.parse(apiErrorObj.message)[0].description });\r\n          setClarityPanelVisibility(false);\r\n        } else {\r\n          onSettingClarityErrorMessage(JSON.parse(apiErrorObj.message)[0].description);\r\n        }\r\n      } else {\r\n        // Add check for link or unlink request\r\n        showErrorToastNotification({\r\n          textMessageDescriptor: PropertyMessages.clarityLinkFailed,\r\n          intlMessageValues: { projectId: clarity?.clarityId },\r\n        });\r\n      }\r\n    } finally {\r\n      onLoadingChanged(false);\r\n    }\r\n  } else {\r\n    showErrorToastNotification({ textMessageDescriptor: PropertyMessages.invalidState });\r\n  }\r\n});\r\n","import { defineMessages } from 'react-intl';\r\n\r\nexport default defineMessages({\r\n  linkingNote: {\r\n    id: 'property.clarity.linkingNote',\r\n    defaultMessage: '{status}. Click {here} to resend the request again.',\r\n  },\r\n  cancelledStatus: {\r\n    id: 'property.clarity.cancelledStatus',\r\n    defaultMessage: 'Request was cancelled',\r\n  },\r\n  pendingStatus: {\r\n    id: 'property.clarity.pendingStatus',\r\n    defaultMessage: 'Pending Approval',\r\n  },\r\n  declinedStatus: {\r\n    id: 'property.clarity.declinedStatus',\r\n    defaultMessage: 'Request was declined',\r\n  },\r\n  expiredStatus: {\r\n    id: 'property.clarity.expiredStatus',\r\n    defaultMessage: 'Request was expired',\r\n  },\r\n});\r\n","import { FontWeights, getTheme, mergeStyleSets } from '@fluentui/react';\r\nimport { IPubCenterFonts, IPubcenterPalette, IPubcenterSpacing } from '../../../../../../../../../../../theme';\r\n\r\nexport interface IInputFieldStyle {\r\n  note?: string;\r\n}\r\n\r\nexport const getClassNames = (): IInputFieldStyle => {\r\n  const theme = getTheme();\r\n  const spacing = theme.spacing as IPubcenterSpacing;\r\n  const palette = theme.palette as IPubcenterPalette;\r\n  const fonts = theme.fonts as IPubCenterFonts;\r\n\r\n  return mergeStyleSets({\r\n    note: {\r\n      width: 'inherit',\r\n      display: 'flex',\r\n      alignItems: 'center',\r\n      backgroundColor: palette.neutralLighterAlt,\r\n      fontSize: fonts.size12.fontSize,\r\n      fontWeight: FontWeights.light,\r\n      margin: `${spacing.size12} 0`,\r\n      padding: `${spacing.size12} ${spacing.size6}`,\r\n    },\r\n  });\r\n};\r\n","import { IconButton, Link, TextField } from '@fluentui/react';\r\nimport React from 'react';\r\nimport { FormattedMessage, InjectedIntlProps } from 'react-intl';\r\nimport { ClarityStatus } from '../../../../../../../../../../@data';\r\nimport AppMessages from '../../../../../../../../../../App.messages';\r\nimport { FormItem } from '../../../../../../../../../../components/Form';\r\nimport { useWindowSize } from '../../../../../../../../../../hooks';\r\nimport { getStore } from '../../../../../../../../../../hooks/useWindowSize/store/store';\r\nimport { injectIntlAndObserver } from '../../../../../../../../../../utils';\r\nimport { onClarityUpdate } from '../../../../../../../Manage/__data__/orchestrators';\r\nimport { IClarityParams } from '../../../../../../../Manage/components/ClarityPanel/types';\r\nimport { onClarityIdChanged, onEditClarityId } from '../../../../../../__data__/mutatorActions';\r\nimport { onResendClarityLink } from '../../../../../../__data__/orchestrators';\r\nimport { getCreatePropertyStore } from '../../../../../../__data__/store/store';\r\nimport messages from './messages';\r\nimport { getClassNames } from './styles';\r\n\r\ninterface IClarityInputFieldProps {\r\n  configs?: IClarityParams;\r\n  isShownInPanel?: boolean;\r\n}\r\n\r\nconst { windowStoreSerializer } = useWindowSize();\r\n\r\nconst ClarityInputField = injectIntlAndObserver<InjectedIntlProps & IClarityInputFieldProps>(\r\n  ({ intl, configs, isShownInPanel = false }) => {\r\n    const {\r\n      originalClarityId: existingId,\r\n      clarityId: id,\r\n      clarityStatus: status,\r\n      clarityEdit: isEditable,\r\n      clarityErrorMessage: error = '',\r\n      clarityLinkingEnabled,\r\n    } = configs || {};\r\n\r\n    const { formatMessage } = intl;\r\n    const { note } = getClassNames();\r\n    const { isWindowSmallSize } = windowStoreSerializer(getStore());\r\n    const { active } = getCreatePropertyStore();\r\n\r\n    const shouldShowNote: boolean =\r\n      status === ClarityStatus.Pending ||\r\n      status === ClarityStatus.Declined ||\r\n      status === ClarityStatus.Expired ||\r\n      status === ClarityStatus.Cancelled;\r\n\r\n    const getLinkStatusNote = (): string => {\r\n      switch (status) {\r\n        case ClarityStatus.Pending:\r\n          return formatMessage(messages.pendingStatus);\r\n        case ClarityStatus.Declined:\r\n          return formatMessage(messages.declinedStatus);\r\n        case ClarityStatus.Cancelled:\r\n          return formatMessage(messages.cancelledStatus);\r\n        case ClarityStatus.Expired:\r\n          return formatMessage(messages.expiredStatus);\r\n        default:\r\n          return '';\r\n      }\r\n    };\r\n\r\n    return (\r\n      <FormItem formWidth={isWindowSmallSize ? 324 : 440}>\r\n        <TextField\r\n          iconProps={{\r\n            iconName: status === ClarityStatus.Approved ? 'Cancel' : '',\r\n            style: {\r\n              pointerEvents: 'auto',\r\n              cursor: 'pointer',\r\n            },\r\n            onClick: () => onEditClarityId(!isEditable),\r\n          }}\r\n          required={true}\r\n          value={id}\r\n          errorMessage={error}\r\n          onChange={(_, value) => onClarityIdChanged(value)}\r\n        />\r\n        {existingId === id && shouldShowNote && (\r\n          <div className={note}>\r\n            <IconButton iconProps={{ iconName: 'Info' }} />\r\n            <FormattedMessage\r\n              {...messages.linkingNote}\r\n              values={{\r\n                here: (\r\n                  <Link\r\n                    onClick={() =>\r\n                      isShownInPanel ? onClarityUpdate() : onResendClarityLink(active.id?.toString()!, existingId!, clarityLinkingEnabled)\r\n                    }\r\n                  >\r\n                    {formatMessage(AppMessages.here)}\r\n                  </Link>\r\n                ),\r\n                status: getLinkStatusNote(),\r\n              }}\r\n            />\r\n          </div>\r\n        )}\r\n      </FormItem>\r\n    );\r\n  }\r\n);\r\n\r\nexport default ClarityInputField;\r\n","import { IconButton, Link } from '@fluentui/react';\r\nimport { observer } from 'mobx-react';\r\nimport React from 'react';\r\nimport { CLARITY_WEB_APP } from '../../../../../../../../../../constants/AppConstants';\r\nimport { IClarityParams } from '../../../../../../../Manage/components/ClarityPanel/types';\r\nimport { onClarityIdChanged, onEditClarityId } from '../../../../../../__data__/mutatorActions';\r\n\r\ninterface IConnectedClarityFieldProps {\r\n  configs?: IClarityParams;\r\n}\r\n\r\nconst ConnectedClarityField = observer(({ configs }: IConnectedClarityFieldProps) => {\r\n  const { originalClarityId: existingId, clarityId: id, clarityEdit: isEditable } = configs || {};\r\n\r\n  return (\r\n    <>\r\n      {id && (\r\n        <Link href={CLARITY_WEB_APP.replace('{id}', id)} target=\"_blank\" rel=\"noreferrer noopener\">\r\n          {id}\r\n        </Link>\r\n      )}\r\n      <IconButton\r\n        iconProps={{ iconName: 'Edit' }}\r\n        onClick={() => {\r\n          onEditClarityId(!isEditable);\r\n          if (existingId) {\r\n            onClarityIdChanged(existingId);\r\n          }\r\n        }}\r\n      />\r\n    </>\r\n  );\r\n});\r\n\r\nexport default ConnectedClarityField;\r\n","import { defineMessages } from 'react-intl';\r\n\r\nexport default defineMessages({\r\n  clarityProjectDetails: {\r\n    id: 'admanagement.property.clarityProjectDetails',\r\n    defaultMessage: 'Clarity project details',\r\n  },\r\n  enableMicrosoftClarity: {\r\n    id: 'property.clarity.enableMicrosoftClarity',\r\n    defaultMessage: 'Enable Clarity',\r\n  },\r\n  clarityProjectId: {\r\n    id: 'property.clarity.existingClarityProjectLabel',\r\n    defaultMessage: 'Clarity Project ID',\r\n  },\r\n  clarityProjectResendButton: {\r\n    id: 'property.clarity.clarityProjectResendButton',\r\n    defaultMessage: 'Resend',\r\n  },\r\n});\r\n","import { Toggle } from '@fluentui/react';\r\nimport React from 'react';\r\nimport { InjectedIntlProps } from 'react-intl';\r\nimport { ClarityStatus, getAppStore, onHelpInfoCalloutOpened, onHelpInfoChanged } from '../../../../../../../../@data';\r\nimport { completeAccess, hasReadAccess } from '../../../../../../../../@data/services/UserRoleService';\r\nimport { FormItem, FormSection, FormState } from '../../../../../../../../components/Form';\r\nimport { FormLabel } from '../../../../../../../../components/Form/FormLabel';\r\nimport { injectIntlAndObserver } from '../../../../../../../../utils';\r\nimport { IClarityParams } from '../../../../../Manage/components/ClarityPanel/types';\r\nimport { onEnableClarityToggleChanged } from '../../__data__/mutatorActions';\r\nimport { GetPropertyAccessPermission } from '../../utils/GetPropertyAccessPermissions';\r\nimport { IsDisabled } from '../../utils/IsFieldDisabled';\r\nimport ClarityInputField from './components/ClarityInputField';\r\nimport ConnectedClarityField from './components/ConnectedClarityField';\r\nimport messages from './messages';\r\n\r\ninterface IClarityInputFieldProps {\r\n  mode: FormState;\r\n  clarityConfigs: IClarityParams | undefined;\r\n  isShownInPanel?: boolean;\r\n}\r\n\r\nconst ClaritySection = injectIntlAndObserver<InjectedIntlProps & IClarityInputFieldProps>(\r\n  ({ intl, mode, clarityConfigs, isShownInPanel = false }) => {\r\n    const { helpInfo, locale } = getAppStore();\r\n\r\n    const { formatMessage } = intl;\r\n\r\n    const propertyAccessPermissions = GetPropertyAccessPermission();\r\n    const accessLevel = propertyAccessPermissions === null ? completeAccess : propertyAccessPermissions.clarity;\r\n\r\n    if (!hasReadAccess(accessLevel)) {\r\n      return null;\r\n    }\r\n\r\n    const showToggle = mode === FormState.Edit && hasReadAccess(accessLevel) && clarityConfigs?.clarityStatus;\r\n    const showInput = mode !== FormState.Edit || clarityConfigs?.clarityStatus !== ClarityStatus.Approved || clarityConfigs?.clarityEdit;\r\n\r\n    const getLabel = (): JSX.Element => {\r\n      return (\r\n        <FormLabel\r\n          id={'clarityProjectId'}\r\n          labelContent={formatMessage(messages.clarityProjectId)}\r\n          calloutContent={helpInfo}\r\n          iconButtonOnClick={() => onHelpInfoCalloutOpened('pop_PCv4_EnableMSClarity', locale)}\r\n          calloutOnDismiss={() => onHelpInfoChanged()}\r\n          intl={intl}\r\n        />\r\n      );\r\n    };\r\n\r\n    const getClaritySection = () => {\r\n      return (\r\n        <>\r\n          {showToggle && (\r\n            <FormItem>\r\n              <Toggle\r\n                inlineLabel={true}\r\n                label={formatMessage(messages.enableMicrosoftClarity)}\r\n                checked={clarityConfigs?.clarityLinkingEnabled}\r\n                onChange={(_, value) => onEnableClarityToggleChanged(value || false)}\r\n                disabled={IsDisabled(mode, accessLevel)}\r\n              />\r\n            </FormItem>\r\n          )}\r\n\r\n          {(clarityConfigs?.clarityLinkingEnabled || mode !== FormState.Edit) && (\r\n            <>\r\n              {getLabel()}\r\n              {showInput ? (\r\n                <ClarityInputField configs={clarityConfigs} isShownInPanel={isShownInPanel} />\r\n              ) : (\r\n                <ConnectedClarityField configs={clarityConfigs} />\r\n              )}\r\n            </>\r\n          )}\r\n        </>\r\n      );\r\n    };\r\n\r\n    return isShownInPanel ? (\r\n      getClaritySection()\r\n    ) : (\r\n      <FormSection title={formatMessage(messages.clarityProjectDetails)} hasBorderBottom={false}>\r\n        {getClaritySection()}\r\n      </FormSection>\r\n    );\r\n  }\r\n);\r\n\r\nexport default ClaritySection;\r\n","import { defineMessages } from 'react-intl';\r\n\r\nexport default defineMessages({\r\n  approvalStatus: {\r\n    id: 'admanagement.property.approvalStatus',\r\n    defaultMessage: 'Approval status',\r\n  },\r\n  approved: {\r\n    id: 'admanagement.property.approved',\r\n    defaultMessage: 'Approved',\r\n  },\r\n  autoApproved: {\r\n    id: 'admanagement.property.autoApproved',\r\n    defaultMessage: 'Auto-approved',\r\n  },\r\n  rejected: {\r\n    id: 'admanagement.property.rejected',\r\n    defaultMessage: 'Rejected',\r\n  },\r\n  manualreview: {\r\n    id: 'admanagement.property.manualreview',\r\n    defaultMessage: 'Under manual review',\r\n  },\r\n});\r\n","import { IDropdownOption } from '@fluentui/react';\r\nimport { PropertyApprovalStatus } from '../../../../../../../../../@data';\r\nimport messages from '../messages';\r\n\r\nexport function GetApprovalStatusOptions(formatMessage): IDropdownOption[] {\r\n  return [\r\n    { key: PropertyApprovalStatus.Approved, text: formatMessage(messages.approved), ariaLabel: formatMessage(messages.approved) },\r\n    {\r\n      key: PropertyApprovalStatus.AutoApproved,\r\n      text: formatMessage(messages.autoApproved),\r\n      ariaLabel: formatMessage(messages.autoApproved),\r\n    },\r\n    { key: PropertyApprovalStatus.Rejected, text: formatMessage(messages.rejected), ariaLabel: formatMessage(messages.rejected) },\r\n    {\r\n      key: PropertyApprovalStatus.UnderManualReview,\r\n      text: formatMessage(messages.manualreview),\r\n      ariaLabel: formatMessage(messages.manualreview),\r\n    },\r\n  ];\r\n}\r\n","import { Dropdown } from '@fluentui/react';\r\nimport React from 'react';\r\nimport { InjectedIntlProps } from 'react-intl';\r\nimport { PropertyApprovalStatus } from '../../../../../../../../@data';\r\nimport { completeAccess, hasReadAccess } from '../../../../../../../../@data/services/UserRoleService';\r\nimport { FormItem, FormState } from '../../../../../../../../components/Form';\r\nimport { injectIntlAndObserver } from '../../../../../../../../utils';\r\nimport { getCreatePropertyStore } from '../../../../__data__/store/store';\r\nimport { onApprovalStatusChanged } from '../../__data__/mutatorActions';\r\nimport { GetPropertyAccessPermission } from '../../utils/GetPropertyAccessPermissions';\r\nimport { IsDisabled } from '../../utils/IsFieldDisabled';\r\nimport messages from './messages';\r\nimport { GetApprovalStatusOptions } from './utils/GetApprovalStatusOptions';\r\n\r\nexport interface IPropertyApprovalStateFieldProps {\r\n  mode: FormState;\r\n}\r\n\r\nconst PropertyApprovalStateField = injectIntlAndObserver<InjectedIntlProps & IPropertyApprovalStateFieldProps>(\r\n  ({ intl: { formatMessage }, mode }): JSX.Element | null => {\r\n    const { active, errors } = getCreatePropertyStore();\r\n    const propertyAccessPermissions = GetPropertyAccessPermission();\r\n    const accessLevel = propertyAccessPermissions === null ? completeAccess : propertyAccessPermissions.approvalStatus;\r\n\r\n    if (!hasReadAccess(accessLevel)) {\r\n      return null;\r\n    }\r\n\r\n    return (\r\n      <FormItem>\r\n        <Dropdown\r\n          label={formatMessage(messages.approvalStatus)}\r\n          required={true}\r\n          defaultSelectedKey={active.approvalStatus}\r\n          selectedKey={active.approvalStatus}\r\n          errorMessage={errors.approvalStatus}\r\n          options={GetApprovalStatusOptions(formatMessage)}\r\n          onChange={(_, value) => onApprovalStatusChanged(value?.key as PropertyApprovalStatus)}\r\n          disabled={IsDisabled(mode, accessLevel)}\r\n        />\r\n      </FormItem>\r\n    );\r\n  }\r\n);\r\n\r\nexport default PropertyApprovalStateField;\r\n","import { defineMessages } from 'react-intl';\r\n\r\nexport default defineMessages({\r\n  notes: {\r\n    id: 'admanagement.property.notes',\r\n    defaultMessage: 'Notes',\r\n  },\r\n});\r\n","import { TextField } from '@fluentui/react';\r\nimport React from 'react';\r\nimport { InjectedIntlProps } from 'react-intl';\r\nimport { completeAccess, hasReadAccess } from '../../../../../../../../@data/services/UserRoleService';\r\nimport { FormItem, FormState } from '../../../../../../../../components/Form';\r\nimport { injectIntlAndObserver } from '../../../../../../../../utils';\r\nimport { getCreatePropertyStore } from '../../../../__data__/store/store';\r\nimport { onApprovalStatusCommentsChanged } from '../../__data__/mutatorActions';\r\nimport { GetPropertyAccessPermission } from '../../utils/GetPropertyAccessPermissions';\r\nimport { IsDisabled } from '../../utils/IsFieldDisabled';\r\nimport messages from './messages';\r\n\r\nexport interface IPropertyApprovalStatusInputFieldProps {\r\n  mode: FormState;\r\n}\r\n\r\nconst PropertyApprovalStatusInputField = injectIntlAndObserver<InjectedIntlProps & IPropertyApprovalStatusInputFieldProps>(\r\n  ({ intl: { formatMessage }, mode }) => {\r\n    const { active, errors } = getCreatePropertyStore();\r\n    const propertyAccessPermissions = GetPropertyAccessPermission();\r\n    const accessLevel = propertyAccessPermissions === null ? completeAccess : propertyAccessPermissions.notes;\r\n\r\n    if (!hasReadAccess(accessLevel)) {\r\n      return null;\r\n    }\r\n\r\n    return (\r\n      <FormItem>\r\n        <TextField\r\n          label={formatMessage(messages.notes)}\r\n          required={false}\r\n          errorMessage={errors.approvalStatusComments}\r\n          multiline={true}\r\n          value={active.approvalStatusComments}\r\n          onChange={(_, value) => onApprovalStatusCommentsChanged(value || '')}\r\n          disabled={IsDisabled(mode, accessLevel)}\r\n        />\r\n      </FormItem>\r\n    );\r\n  }\r\n);\r\n\r\nexport default PropertyApprovalStatusInputField;\r\n","import { defineMessages } from 'react-intl';\r\n\r\nexport default defineMessages({\r\n  pickerAriaDescription: {\r\n    id: 'hierarchicalMultiSelectPicker.pickerAriaDescription',\r\n    defaultMessage: 'Select items using the hierarchical multi-selection picker'\r\n  },\r\n  createButtonAriaDesc: {\r\n    id: 'hierarchicalMultiSelectPicker.createButtonAriaDesc',\r\n    defaultMessage: 'Click this button to {createElement} within this page'\r\n  },\r\n  addAllAriaDescription: {\r\n    id: 'hierarchicalMultiSelectPicker.addAllAriaDescription',\r\n    defaultMessage: 'Click this button to select all items of group {groupName}'\r\n  },\r\n  removeAllAriaDescription: {\r\n    id: 'hierarchicalMultiSelectPicker.removeAllAriaDescription',\r\n    defaultMessage: 'Click to remove all selected items'\r\n  },\r\n  addIconAriaLabel: {\r\n    id: 'hierarchicalMultiSelectPicker.addIconAriaLabel',\r\n    defaultMessage: 'Add item'\r\n  },\r\n  removeIconAriaLabel: {\r\n    id: 'hierarchicalMultiSelectPicker.removeIconAriaLabel',\r\n    defaultMessage: 'Remove item'\r\n  },\r\n  expandGroupAriaLabel: {\r\n    id: 'hierarchicalMultiSelectPicker.expandGroupAriaLabel',\r\n    defaultMessage: 'Expand group'\r\n  },\r\n  selectedListAriaLabel: {\r\n    id: 'hierarchicalMultiSelectPicker.selectedListAriaLabel',\r\n    defaultMessage: 'List of selected items grouped by group name'\r\n  }\r\n});","import {\r\n  ActionButton,\r\n  BaseComponent,\r\n  classNamesFunction,\r\n  css,\r\n  DelayedRender,\r\n  FocusZone,\r\n  FocusZoneDirection,\r\n  getId,\r\n  Icon,\r\n  IGroup,\r\n  IProcessedStyleSet,\r\n  Label,\r\n  Link,\r\n  nullRender,\r\n  SearchBox,\r\n  VerticalDivider,\r\n} from '@fluentui/react';\r\nimport * as React from 'react';\r\nimport AppMessages from '../../App.messages';\r\nimport { isButtonPressKey } from '../../utils/AccessibilityUtils';\r\nimport { getScreenReaderTextStyles } from '../../utils/GlobalStyleUtils';\r\nimport messages from './HierarchicalMultiSelectPicker.messages';\r\nimport {\r\n  IHierarchicalMultiSelectPickerProps,\r\n  IHierarchicalMultiSelectPickerStyleProps,\r\n  IHierarchicalMultiSelectPickerStyles,\r\n  IHierarchicalPickerItem,\r\n} from './HierarchicalMultiSelectPicker.types';\r\n\r\nconst getClassNames = classNamesFunction<IHierarchicalMultiSelectPickerStyleProps, IHierarchicalMultiSelectPickerStyles>();\r\n\r\nexport interface IHierarchicalMultiSelectPickerState {\r\n  filteredItems: IHierarchicalPickerItem[];\r\n  subItems: IHierarchicalPickerItem[];\r\n  selectedItems: IHierarchicalPickerItem[];\r\n  expandedGroup?: IGroup;\r\n}\r\n\r\nexport class HierarchicalMultiSelectPickerBase extends BaseComponent<\r\n  IHierarchicalMultiSelectPickerProps,\r\n  IHierarchicalMultiSelectPickerState\r\n> {\r\n  private _id: string;\r\n  private _classNames: IProcessedStyleSet<IHierarchicalMultiSelectPickerStyles>;\r\n\r\n  constructor(props: IHierarchicalMultiSelectPickerProps) {\r\n    super(props);\r\n\r\n    this._id = props.id || getId('HierarchicalMultiSelectPicker');\r\n\r\n    const allItems = this.props.items;\r\n    const selectedItems = this._getIntersection(allItems, this.props.initialSelectedItems || []);\r\n    selectedItems.forEach((item) => {\r\n      if (item && item.id) {\r\n        allItems.find((i) => i.id === item.id)!.isSelected = true;\r\n      }\r\n    });\r\n\r\n    this.state = {\r\n      filteredItems: [...allItems],\r\n      subItems: [],\r\n      selectedItems: selectedItems,\r\n    };\r\n  }\r\n\r\n  public componentDidUpdate(prevProps: IHierarchicalMultiSelectPickerProps) {\r\n    let initialSelectedItems = this.state.selectedItems;\r\n\r\n    if (this.props.initialSelectedItems !== prevProps.initialSelectedItems) {\r\n      initialSelectedItems = this.props.initialSelectedItems || [];\r\n    }\r\n\r\n    if (this.props.items !== prevProps.items || this.props.initialSelectedItems !== prevProps.initialSelectedItems) {\r\n      const intersectedSelectedItems = this._getIntersection(initialSelectedItems, this.props.items);\r\n      const availableItems = [...this.props.items];\r\n\r\n      intersectedSelectedItems.forEach((item) => {\r\n        availableItems.find((i) => i.id === item.id)!.isSelected = true;\r\n      });\r\n\r\n      this.setState({\r\n        filteredItems: [...this.props.items],\r\n        selectedItems: intersectedSelectedItems,\r\n      });\r\n    }\r\n  }\r\n\r\n  public render(): JSX.Element {\r\n    const {\r\n      styles,\r\n      theme,\r\n      errorMessage,\r\n      label,\r\n      onRenderLabel = this._onRenderLabel,\r\n      enableCreateButton,\r\n      createButtonLabel,\r\n      onCreateButtonClick,\r\n      disabled,\r\n      intl,\r\n    } = this.props;\r\n    this._classNames = getClassNames(styles, { theme: theme!, hasErrorMessage: !!errorMessage });\r\n\r\n    return (\r\n      <div className={this._classNames.root}>\r\n        {onRenderLabel(this.props, this._onRenderLabel)}\r\n        {enableCreateButton && (\r\n          <ActionButton\r\n            iconProps={{ iconName: 'add' }}\r\n            onClick={onCreateButtonClick}\r\n            disabled={disabled}\r\n            ariaDescription={intl.formatMessage(messages.createButtonAriaDesc, { createElement: createButtonLabel })}\r\n          >\r\n            {createButtonLabel}\r\n          </ActionButton>\r\n        )}\r\n        <div\r\n          className={this._classNames.picker}\r\n          role=\"form\"\r\n          {...(label ? { 'aria-labelledy': 'hierarchicalMultiSelectPickerLabel' } : {})}\r\n          aria-describedby=\"hierarchicalPickerAriaDescription\"\r\n        >\r\n          {this._renderItemsPane()}\r\n          {this._renderSelectedItemsPane()}\r\n        </div>\r\n        {errorMessage && (\r\n          <div role=\"alert\">\r\n            <DelayedRender>\r\n              <p className={this._classNames.errorMessage}>\r\n                <span data-automation-id=\"error-message\">{errorMessage}</span>\r\n              </p>\r\n            </DelayedRender>\r\n          </div>\r\n        )}\r\n\r\n        <span id=\"hierarchicalPickerAriaDescription\" style={getScreenReaderTextStyles()}>\r\n          {intl.formatMessage(messages.pickerAriaDescription)}\r\n        </span>\r\n      </div>\r\n    );\r\n  }\r\n\r\n  private _onRenderLabel = (props: IHierarchicalMultiSelectPickerProps): JSX.Element | null => {\r\n    const { label, required } = props;\r\n\r\n    if (label) {\r\n      return (\r\n        <Label id=\"hierarchicalMultiSelectPickerLabel\" required={required} htmlFor={this._id}>\r\n          {props.label}\r\n        </Label>\r\n      );\r\n    }\r\n\r\n    return null;\r\n  };\r\n\r\n  private _renderItemsPane = (): JSX.Element => {\r\n    const { searchBoxPlaceHolder, initialSearchBoxPlaceHolder, disabled } = this.props;\r\n    const { expandedGroup } = this.state;\r\n    const _searchBoxPlaceHolder = expandedGroup || !initialSearchBoxPlaceHolder ? searchBoxPlaceHolder : initialSearchBoxPlaceHolder;\r\n\r\n    return (\r\n      <div className={css(this._classNames.itemsPane, disabled ? this._classNames.disabledPanel : '')}>\r\n        <SearchBox\r\n          styles={this._classNames.subComponentStyles.search}\r\n          underlined={true}\r\n          placeholder={_searchBoxPlaceHolder}\r\n          onChange={(_, value: string) => this._onSearchChange(value)}\r\n          ariaLabel={_searchBoxPlaceHolder}\r\n        />\r\n\r\n        <div className={this._classNames.subPane} role=\"tree\">\r\n          {this._renderGroupsPane()}\r\n          <VerticalDivider />\r\n          {this._renderSubItemsPane()}\r\n        </div>\r\n      </div>\r\n    );\r\n  };\r\n\r\n  private _renderGroupsPane = (): JSX.Element => {\r\n    const { onFilteredItemsLabel, disabled } = this.props;\r\n    const { filteredItems, expandedGroup } = this.state;\r\n    const groups = this._createGroups(filteredItems);\r\n\r\n    return (\r\n      <div className={this._classNames.subItemsPane} role=\"presentation\">\r\n        <span className={css(this._classNames.header, this._classNames.headerLabel)}>{onFilteredItemsLabel(groups.length)}</span>\r\n        <FocusZone className={this._classNames.list} isCircularNavigation={true} direction={FocusZoneDirection.vertical}>\r\n          {groups.map((group: IGroup, index: number) => (\r\n            <div\r\n              className={css(\r\n                this._classNames.listItem,\r\n                expandedGroup && expandedGroup.name === group.name ? this._classNames.disabledListItem : ''\r\n              )}\r\n              id={`hierarchicalPickerGroup-${index}`}\r\n              key={`hierarchicalPickerGroup-${index}`}\r\n              role=\"treeitem\"\r\n              aria-expanded={expandedGroup && expandedGroup.name === group.name ? true : false}\r\n              aria-selected={expandedGroup && expandedGroup.name === group.name ? true : false}\r\n              tabIndex={disabled ? -1 : 0}\r\n              onClick={!disabled ? this._onGroupExpandedClick : undefined}\r\n              onKeyDown={(ev) => isButtonPressKey(ev.key) && !disabled && this._onGroupExpandedClick(ev)}\r\n              data-list-index={index}\r\n              data-is-focusable={disabled || (expandedGroup && expandedGroup.name === group.name) ? false : true}\r\n            >\r\n              <span className={this._classNames.listItemLabel}>{group.name}</span>\r\n              <Icon\r\n                iconName={'ChevronRight'}\r\n                styles={this._classNames.subComponentStyles.iconButton}\r\n                aria-label={this.props.intl.formatMessage(messages.expandGroupAriaLabel)}\r\n              />\r\n            </div>\r\n          ))}\r\n        </FocusZone>\r\n      </div>\r\n    );\r\n  };\r\n\r\n  private _renderSubItemsPane = (): JSX.Element => {\r\n    const { subItems, expandedGroup } = this.state;\r\n    const { disabled, intl } = this.props;\r\n\r\n    let renderAddAll = nullRender();\r\n    if (subItems.length > 0) {\r\n      renderAddAll = (\r\n        <>\r\n          <Link className={this._classNames.textButton} onClick={this._onAddAll} disabled={disabled} aria-describedby=\"addAllAriaDesc\">\r\n            {intl.formatMessage(AppMessages.addAll)}{' '}\r\n          </Link>\r\n\r\n          <span id=\"addAllAriaDesc\" style={getScreenReaderTextStyles()}>\r\n            {intl.formatMessage(messages.addAllAriaDescription, { groupName: expandedGroup ? expandedGroup.name : '' })}\r\n          </span>\r\n        </>\r\n      );\r\n    }\r\n\r\n    return (\r\n      <div className={this._classNames.subItemsPane} role=\"presentation\">\r\n        <div className={this._classNames.header}>\r\n          <span className={this._classNames.headerLabel}>{this.props.onSubItemsLabel(subItems.length)}</span>\r\n          {renderAddAll}\r\n        </div>\r\n        <FocusZone className={this._classNames.list} role=\"group\" direction={FocusZoneDirection.vertical} isCircularNavigation={true}>\r\n          {subItems.map((item: IHierarchicalPickerItem, index: number) => (\r\n            <div\r\n              className={css(this._classNames.listItem, item.isSelected ? this._classNames.disabledListItem : '')}\r\n              id={`hierarchicalPickerItem-${index}`}\r\n              key={`hierarchicalPickerItem-${index}`}\r\n              role=\"treeitem\"\r\n              aria-selected={item.isSelected}\r\n              tabIndex={!disabled ? 0 : -1}\r\n              onClick={!disabled && !item.isSelected ? this._onItemAddedClick : undefined}\r\n              onKeyDown={(ev) => {\r\n                if (isButtonPressKey(ev.key) && !disabled && !item.isSelected) {\r\n                  this._onItemAddedClick(ev);\r\n                }\r\n              }}\r\n              data-list-index={index}\r\n              data-is-focusable={!disabled && !item.isSelected}\r\n            >\r\n              <span className={this._classNames.listItemLabel}>{item.name}</span>\r\n              {!item.isSelected ? (\r\n                <Icon\r\n                  iconName={'Add'}\r\n                  aria-label={intl.formatMessage(messages.addIconAriaLabel)}\r\n                  styles={this._classNames.subComponentStyles.iconButton}\r\n                />\r\n              ) : null}\r\n            </div>\r\n          ))}\r\n        </FocusZone>\r\n      </div>\r\n    );\r\n  };\r\n\r\n  private _renderSelectedItemsPane = (): JSX.Element => {\r\n    const { selectedItems } = this.state;\r\n    const { onSelectedItemsLabel, disabled, intl } = this.props;\r\n    const selectedCount = selectedItems.length;\r\n\r\n    let renderRemoveAll = nullRender();\r\n    if (selectedCount > 0) {\r\n      renderRemoveAll = (\r\n        <>\r\n          <Link\r\n            className={this._classNames.textButton}\r\n            onClick={this._onRemoveAll}\r\n            disabled={disabled}\r\n            aria-describedby=\"removeAllAriaDesc\"\r\n          >\r\n            {intl.formatMessage(AppMessages.removeAll)}\r\n          </Link>\r\n\r\n          <span id=\"removeAllAriaDesc\" style={getScreenReaderTextStyles()}>\r\n            {intl.formatMessage(messages.removeAllAriaDescription)}\r\n          </span>\r\n        </>\r\n      );\r\n    }\r\n    const groups = this._createGroups(selectedItems);\r\n\r\n    return (\r\n      <div className={css(this._classNames.itemsPane, disabled ? this._classNames.disabledPanel : '')} role=\"presentation\">\r\n        <span className={css(this._classNames.header, this._classNames.headerLabel)}>{onSelectedItemsLabel(selectedCount)}</span>\r\n        {renderRemoveAll}\r\n\r\n        <FocusZone\r\n          className={this._classNames.list}\r\n          role=\"listbox\"\r\n          aria-label={intl.formatMessage(messages.selectedListAriaLabel)}\r\n          direction={FocusZoneDirection.vertical}\r\n          isCircularNavigation={true}\r\n        >\r\n          {groups.map((group: IGroup) => {\r\n            const groupSubItems = selectedItems.slice(group.startIndex, group.startIndex + group.count);\r\n            return (\r\n              <>\r\n                <span className={this._classNames.groupHeader}>\r\n                  {group.name}\r\n                  <Icon role=\"presentation\" className={this._classNames.groupHeaderIcon} iconName={'ChevronRight'} />\r\n                </span>\r\n\r\n                {groupSubItems.map((item: IHierarchicalPickerItem, index: number) => (\r\n                  <div\r\n                    className={css(this._classNames.listItem, this._classNames.selectedPaneItem)}\r\n                    id={`hierarchicalPickerSelItem-${index}`}\r\n                    role=\"option\"\r\n                    aria-selected={true}\r\n                    tabIndex={!disabled ? 0 : -1}\r\n                    onClick={!disabled ? this._onItemRemovedClick : undefined}\r\n                    onKeyDown={(ev) => isButtonPressKey(ev.key) && !disabled && this._onItemRemovedClick(ev)}\r\n                    data-list-index={index}\r\n                    data-is-focusable={!disabled}\r\n                  >\r\n                    <span className={this._classNames.listItemLabel}>{item.name}</span>\r\n                    <Icon\r\n                      iconName={'remove'}\r\n                      styles={this._classNames.subComponentStyles.iconButton}\r\n                      aria-label={intl.formatMessage(messages.removeIconAriaLabel)}\r\n                    />\r\n                  </div>\r\n                ))}\r\n              </>\r\n            );\r\n          })}\r\n        </FocusZone>\r\n      </div>\r\n    );\r\n  };\r\n\r\n  private _onGroupExpandedClick = (ev: React.MouseEvent<HTMLDivElement> | React.KeyboardEvent<HTMLDivElement>): void => {\r\n    const filteredItems = [...this.state.filteredItems];\r\n    const groups = this._createGroups(filteredItems);\r\n\r\n    const index = this._getIndexOfItemAtElement(ev);\r\n\r\n    if (index !== undefined) {\r\n      const group = groups[index];\r\n      const subItems = filteredItems.slice(group.startIndex, group.startIndex + group.count);\r\n\r\n      this.setState({\r\n        subItems: subItems,\r\n        expandedGroup: group,\r\n      });\r\n    }\r\n  };\r\n\r\n  private _onItemAddedClick = (ev: React.MouseEvent<HTMLDivElement> | React.KeyboardEvent<HTMLDivElement>): void => {\r\n    const subItems = [...this.state.subItems];\r\n    const filteredItems = [...this.state.filteredItems];\r\n\r\n    const index = this._getIndexOfItemAtElement(ev);\r\n\r\n    if (index !== undefined) {\r\n      const item = subItems[index];\r\n      item.isSelected = true;\r\n      const selectedItems = [...this.state.selectedItems, item];\r\n\r\n      filteredItems.forEach((i) => {\r\n        if (i.id === item.id) {\r\n          i.isSelected = true;\r\n        }\r\n      });\r\n\r\n      this.setState({\r\n        filteredItems: filteredItems,\r\n        subItems: subItems,\r\n        selectedItems: selectedItems,\r\n      });\r\n\r\n      if (this.props.onSelectedItems) {\r\n        this.props.onSelectedItems(selectedItems);\r\n      }\r\n    }\r\n  };\r\n\r\n  private _onItemRemovedClick = (ev: React.MouseEvent<HTMLDivElement> | React.KeyboardEvent<HTMLDivElement>): void => {\r\n    const selectedItems = [...this.state.selectedItems];\r\n    const filteredItems = [...this.state.filteredItems];\r\n    const subItems = [...this.state.subItems];\r\n\r\n    const index = this._getIndexOfItemAtElement(ev);\r\n\r\n    if (index !== undefined) {\r\n      const item = selectedItems[index];\r\n      const remainingSelectedItems = selectedItems.filter((i) => i !== item);\r\n\r\n      filteredItems.forEach((i) => {\r\n        if (i.id === item.id) {\r\n          i.isSelected = false;\r\n        }\r\n      });\r\n\r\n      subItems.forEach((i) => {\r\n        if (i.id === item.id) {\r\n          i.isSelected = false;\r\n        }\r\n      });\r\n\r\n      this.setState({\r\n        selectedItems: remainingSelectedItems,\r\n        subItems: subItems,\r\n        filteredItems: filteredItems,\r\n      });\r\n\r\n      if (this.props.onSelectedItems) {\r\n        this.props.onSelectedItems(remainingSelectedItems);\r\n      }\r\n    }\r\n  };\r\n\r\n  private _getIndexOfItemAtElement(ev: React.MouseEvent<HTMLDivElement> | React.KeyboardEvent<HTMLDivElement>): number | undefined {\r\n    const el = ev.currentTarget as HTMLDivElement;\r\n\r\n    if (el.getAttribute('data-list-index')) {\r\n      const index = Number(el.getAttribute('data-list-index'));\r\n      return index;\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  private _onSearchChange = (query: string): void => {\r\n    const queryName = query.toLocaleLowerCase();\r\n    const allItems = this.props.items;\r\n    let subItems: IHierarchicalPickerItem[] = [];\r\n\r\n    const { expandedGroup } = this.state;\r\n    if (expandedGroup) {\r\n      allItems.sort((a, b) => (a.parentName && b.parentName && a.parentName.toLowerCase() < b.parentName.toLowerCase() ? -1 : 1));\r\n      subItems = allItems.slice(expandedGroup.startIndex, expandedGroup.startIndex + expandedGroup.count);\r\n    }\r\n\r\n    this.setState({\r\n      filteredItems: allItems.filter((item) => {\r\n        const name = item.parentName;\r\n        return name!.toString().toLocaleLowerCase().indexOf(queryName) !== -1;\r\n      }),\r\n      subItems: subItems.filter((item) => {\r\n        const name = item.name;\r\n        return name!.toString().toLocaleLowerCase().indexOf(queryName) !== -1;\r\n      }),\r\n    });\r\n  };\r\n\r\n  private _getIntersection = (collectionA: IHierarchicalPickerItem[], collectionB: IHierarchicalPickerItem[]) => {\r\n    return collectionA.filter((selectedItem) => collectionB.some((item) => selectedItem.id === item.id));\r\n  };\r\n\r\n  private _onRemoveAll = (ev: React.MouseEvent<HTMLElement>): void => {\r\n    const filterItems = [...this.state.filteredItems];\r\n    const subItems = [...this.state.subItems];\r\n    filterItems.map((item) => (item.isSelected = false));\r\n    subItems.map((item) => (item.isSelected = false));\r\n\r\n    // reset items isSelected props on removeAll clicked;\r\n    this.props.items.map((item) => (item.isSelected = false));\r\n\r\n    this.setState({\r\n      selectedItems: [],\r\n      subItems: subItems,\r\n      filteredItems: filterItems,\r\n    });\r\n\r\n    if (this.props.onSelectedItems) {\r\n      this.props.onSelectedItems([]);\r\n    }\r\n  };\r\n\r\n  private _onAddAll = (): void => {\r\n    const selectedItems = [...this.state.selectedItems];\r\n    const filteredItems = [...this.state.filteredItems];\r\n    const subItems = [...this.state.subItems];\r\n\r\n    subItems.forEach((item) => {\r\n      if (!item.isSelected) {\r\n        selectedItems.push(item);\r\n      }\r\n      item.isSelected = true;\r\n    });\r\n\r\n    selectedItems.forEach((item) => {\r\n      filteredItems.find((i) => i.id === item.id)!.isSelected = true;\r\n    });\r\n\r\n    this.setState({\r\n      selectedItems: selectedItems,\r\n      subItems: subItems,\r\n      filteredItems: filteredItems,\r\n    });\r\n\r\n    if (this.props.onSelectedItems) {\r\n      this.props.onSelectedItems(selectedItems);\r\n    }\r\n  };\r\n\r\n  private _createGroups = (items: IHierarchicalPickerItem[]): IGroup[] => {\r\n    items.sort((a, b) => (a.parentName && b.parentName && a.parentName.toLowerCase() < b.parentName.toLowerCase() ? -1 : 1));\r\n\r\n    const groups = items.reduce((current: IGroup[], item: IHierarchicalPickerItem, index: number) => {\r\n      const currentGroup = current[current.length - 1];\r\n      if (item.parentId) {\r\n        const itemColumnValue = item.parentId.toString();\r\n\r\n        if (!currentGroup || currentGroup.key !== itemColumnValue) {\r\n          current.push({\r\n            key: itemColumnValue,\r\n            name: item.parentName || '',\r\n            startIndex: index,\r\n            count: 1,\r\n            level: 0,\r\n          });\r\n        } else {\r\n          currentGroup.count++;\r\n        }\r\n      }\r\n      return current;\r\n    }, [] as IGroup[]);\r\n    return groups;\r\n  };\r\n}\r\n","import { AnimationClassNames, FontWeights } from '@fluentui/react';\r\nimport { IHierarchicalMultiSelectPickerStyleProps, IHierarchicalMultiSelectPickerStyles } from '.';\r\nimport { IPubcenterSpacing } from '../../../theme';\r\n\r\nexport const getStyles = (props: IHierarchicalMultiSelectPickerStyleProps): IHierarchicalMultiSelectPickerStyles => {\r\n  const { theme, height, hasErrorMessage } = props;\r\n  const spacing = theme.spacing as IPubcenterSpacing;\r\n  const defaultHeight = 260;\r\n  const { semanticColors } = theme;\r\n\r\n  return {\r\n    root: ['ms-HierarchicalMultiSelectPicker'],\r\n    picker: {\r\n      height: height || defaultHeight,\r\n      display: 'flex',\r\n      flexDirection: 'row',\r\n      marginTop: spacing.size8,\r\n      width: 860,\r\n    },\r\n    itemsPane: [\r\n      {\r\n        display: 'flex',\r\n        flex: 1,\r\n        flexDirection: 'column',\r\n        overflow: 'hidden',\r\n        borderWidth: 1,\r\n        borderStyle: 'solid',\r\n        borderColor: theme.palette.neutralTertiary,\r\n        selectors: {\r\n          ':first-child': {\r\n            marginRight: spacing.size16,\r\n            flex: 2,\r\n          },\r\n        },\r\n      },\r\n      hasErrorMessage && {\r\n        borderColor: semanticColors.errorText,\r\n        selectors: {\r\n          '&:focus, &:hover': {\r\n            borderColor: semanticColors.errorText,\r\n          },\r\n        },\r\n      },\r\n    ],\r\n    subPane: [\r\n      {\r\n        display: 'flex',\r\n        flexDirection: 'row',\r\n        overflowY: 'auto',\r\n        height: '-webkit-fill-available',\r\n      },\r\n    ],\r\n    subItemsPane: [\r\n      {\r\n        display: 'flex',\r\n        flex: 1,\r\n        flexDirection: 'column',\r\n        overflow: 'hidden',\r\n      },\r\n    ],\r\n    header: {\r\n      display: 'flex',\r\n      flexDirection: 'row',\r\n      justifyContent: 'space-between',\r\n      marginTop: spacing.size8,\r\n      marginBottom: spacing.size8,\r\n    },\r\n    headerLabel: [\r\n      'ms-font-m',\r\n      {\r\n        fontWeight: FontWeights.semibold,\r\n        marginLeft: spacing.size8,\r\n      },\r\n    ],\r\n    textButton: {\r\n      display: 'flex',\r\n      alignSelf: 'flex-end',\r\n      marginRight: spacing.size8,\r\n    },\r\n    errorMessage: [\r\n      'ms-HierarchicalMultiSelectPicker-errorMessage',\r\n      AnimationClassNames.slideDownIn20,\r\n      theme.fonts.small,\r\n      {\r\n        color: semanticColors.errorText,\r\n        margin: 0,\r\n        paddingTop: 5,\r\n        display: 'flex',\r\n        alignItems: 'center',\r\n      },\r\n    ],\r\n    list: {\r\n      flex: 1,\r\n      overflowY: 'auto',\r\n    },\r\n    disabledPanel: {\r\n      backgroundColor: theme.palette.neutralLighter,\r\n    },\r\n    listItem: {\r\n      display: 'flex',\r\n      paddingLeft: spacing.size8,\r\n      paddingRight: spacing.size8,\r\n      height: spacing.size36,\r\n      lineHeight: spacing.size36,\r\n      cursor: 'pointer',\r\n      selectors: {\r\n        ':hover': {\r\n          backgroundColor: theme.palette.neutralLighter,\r\n        },\r\n      },\r\n    },\r\n    disabledListItem: {\r\n      backgroundColor: theme.palette.neutralLight,\r\n    },\r\n    listItemLabel: [\r\n      'ms-font-m',\r\n      {\r\n        flex: 1,\r\n        textOverflow: 'ellipsis',\r\n        overflow: 'hidden',\r\n        whiteSpace: 'nowrap',\r\n      },\r\n    ],\r\n    headerTitle: [\r\n      theme.fonts.medium,\r\n      {\r\n        padding: '10px 0',\r\n        fontWeight: FontWeights.semibold,\r\n        marginLeft: spacing.size8,\r\n      },\r\n    ],\r\n    groupHeader: [\r\n      'ms-font-m',\r\n      {\r\n        display: 'flex',\r\n        alignItems: 'center',\r\n        marginTop: spacing.size8,\r\n        marginLeft: spacing.size4,\r\n        color: theme.palette.neutralSecondary,\r\n      },\r\n    ],\r\n    groupHeaderIcon: {\r\n      marginLeft: spacing.size4,\r\n    },\r\n    selectedPaneItem: {\r\n      paddingLeft: spacing.size16,\r\n    },\r\n    subComponentStyles: {\r\n      search: {\r\n        root: {\r\n          height: spacing.size48,\r\n        },\r\n      },\r\n      iconButton: {\r\n        root: [\r\n          'ms-font-m',\r\n          {\r\n            color: theme.palette.themePrimary,\r\n          },\r\n        ],\r\n      },\r\n    },\r\n  };\r\n};\r\n","import { styled } from '@fluentui/react';\r\nimport { HierarchicalMultiSelectPickerBase } from './HierarchicalMultiSelectPicker.base';\r\nimport { getStyles } from './HierarchicalMultiSelectPicker.styles';\r\n\r\nexport const HierarchicalMultiSelectPicker = styled(HierarchicalMultiSelectPickerBase, getStyles, undefined, {\r\n  scope: 'HierarchicalMultiSelectPicker',\r\n});\r\n","import { defineMessages } from 'react-intl';\r\n\r\nexport default defineMessages({\r\n  attachedAdUnits: {\r\n    id: 'admanagement.property.attachedAdUnits',\r\n    defaultMessage: 'Attached Ad units',\r\n  },\r\n  searchBoxPlaceHolder: {\r\n    id: 'admanagement.property.searchBoxPlaceHolder',\r\n    defaultMessage: 'Search ad unit or account by name',\r\n  },\r\n  initialSearchBoxPlaceHolder: {\r\n    id: 'admanagement.property.initialSearchBoxPlaceHolder',\r\n    defaultMessage: 'Search account by name',\r\n  },\r\n  adUnitPickerAccountsCountLabel: {\r\n    id: 'admanagement.property.adUnitPicker.AccountsCountLabel',\r\n    defaultMessage: 'Accounts: {count}',\r\n  },\r\n  adUnitPickerAdUnitsCountLabel: {\r\n    id: 'admanagement.property.adUnitPicker.AdUnitsCountLabel',\r\n    defaultMessage: 'Ad units: {count}',\r\n  },\r\n});\r\n","import React, { useEffect, useState } from 'react';\r\nimport { completeAccess, hasReadAccess } from '../../../../../../../../@data/services/UserRoleService';\r\nimport AppMessages from '../../../../../../../../App.messages';\r\nimport { FormItem, FormSection, FormState, IFormEditParams } from '../../../../../../../../components/Form';\r\nimport { HierarchicalMultiSelectPicker } from '../../../../../../../../components/HierarchicalMultiSelectPicker';\r\nimport { IRouterWithIntl, injectIntlWithObserver } from '../../../../../../../../utils';\r\nimport { getCreatePropertyStore } from '../../../../__data__/store/store';\r\nimport { onAttachedAdunitsChanged } from '../../__data__/mutatorActions';\r\nimport { loadAttachedAdUnits } from '../../__data__/orchestrators';\r\nimport { GetPropertyAccessPermission } from '../../utils/GetPropertyAccessPermissions';\r\nimport { IsDisabled } from '../../utils/IsFieldDisabled';\r\nimport messages from './messages';\r\n\r\nexport interface IPropertyAttachedAdUnitsFieldProps {\r\n  mode: FormState;\r\n}\r\n\r\nconst PropertyAttachedAdUnitsField = injectIntlWithObserver<IRouterWithIntl<IFormEditParams> & IPropertyAttachedAdUnitsFieldProps>(\r\n  ({ intl, mode, match }) => {\r\n    const { formatMessage } = intl;\r\n    const { active } = getCreatePropertyStore();\r\n    const propertyAccessPermissions = GetPropertyAccessPermission();\r\n    const accessLevel = propertyAccessPermissions === null ? completeAccess : propertyAccessPermissions.attachedAdUnits;\r\n    const { publisherId, accountId, id: entityId } = match.params;\r\n    const [isExpanded, setExpanded] = useState(false);\r\n\r\n    if (!hasReadAccess(accessLevel)) {\r\n      return null;\r\n    }\r\n\r\n    useEffect(() => {\r\n      if (isExpanded && publisherId && active.adunits === undefined) {\r\n        loadAttachedAdUnits(mode, publisherId, accountId, entityId);\r\n      }\r\n      // eslint-disable-next-line react-hooks/exhaustive-deps\r\n    }, [publisherId, entityId, isExpanded, active.adunits]);\r\n\r\n    return (\r\n      <FormSection title={formatMessage(messages.attachedAdUnits)} hasBorderBottom={false} sectionStateChange={setExpanded}>\r\n        <FormItem>\r\n          <HierarchicalMultiSelectPicker\r\n            items={active.adunits || []}\r\n            searchBoxPlaceHolder={formatMessage(messages.searchBoxPlaceHolder)}\r\n            initialSearchBoxPlaceHolder={formatMessage(messages.initialSearchBoxPlaceHolder)}\r\n            onFilteredItemsLabel={(count: number) => formatMessage(messages.adUnitPickerAccountsCountLabel, { count: count })}\r\n            onSelectedItemsLabel={(count: number) => formatMessage(AppMessages.multiSelectPickerSelectedItemsLabel, { count: count })}\r\n            onSubItemsLabel={(count) => formatMessage(messages.adUnitPickerAdUnitsCountLabel, { count: count })}\r\n            onSelectedItems={(items) => onAttachedAdunitsChanged(items)}\r\n            initialSelectedItems={active.adunitsSelected}\r\n            intl={intl}\r\n            disabled={IsDisabled(mode, accessLevel)}\r\n          />\r\n        </FormItem>\r\n      </FormSection>\r\n    );\r\n  }\r\n);\r\n\r\nexport default PropertyAttachedAdUnitsField;\r\n","import * as React from 'react';\r\nimport { useEffect, useState } from 'react';\r\nimport { getAppStore } from '../../../../../../@data';\r\n\r\nimport { DetailPage } from '../../../../../../layout/DetailPage/DetailPage';\r\nimport { injectIntlWithObserver } from '../../../../../../utils/ReactUtils';\r\nimport { getCreatePropertyStore } from '../../__data__/store/store';\r\nimport PropertyIdField from '../../components/PropertyIdField';\r\nimport PropertyNameInputField from '../../components/PropertyNameInputField';\r\nimport PropertyUrlInputField from '../../components/PropertyUrlInputField';\r\nimport useDetailsPageButtonsStatus from '../../utils/useDetailsPageButtonsStatus';\r\nimport { onFormInitialized, onFormSubmitted } from './__data__/orchestrators';\r\nimport ClaritySection from './components/ClarityFormSection';\r\nimport PropertyApprovalStateField from './components/PropertyApprovalStateField';\r\nimport PropertyApprovalStatusInputField from './components/PropertyApprovalStatusInputField';\r\nimport PropertyAttachedAdUnitsField from './components/PropertyAttachedAdUnitsField';\r\nimport { ICreatePropertyProps, IFormInitializationState } from './types';\r\n\r\nexport const CreateProperty = injectIntlWithObserver<ICreatePropertyProps & IFormInitializationState>((props) => {\r\n  const {\r\n    match,\r\n    mode,\r\n    intl: { formatMessage },\r\n    history,\r\n    onSubmit,\r\n    onCancel,\r\n    isInPanel,\r\n    saving: savingProp,\r\n  } = props;\r\n  const { saving, loading } = getAppStore();\r\n  const { active } = getCreatePropertyStore();\r\n  const { publisherId, accountId, id: entityId } = match.params;\r\n\r\n  const [activePropertyId, setActivePropertyId] = useState(entityId);\r\n  const { titleLabel, submitLabel, onHandleCancel, isSubmitButtonDisabled } = useDetailsPageButtonsStatus(\r\n    history,\r\n    mode,\r\n    onSubmit,\r\n    onCancel,\r\n    formatMessage\r\n  );\r\n\r\n  useEffect(() => {\r\n    if (activePropertyId !== entityId) {\r\n      setActivePropertyId(entityId);\r\n      if (publisherId) {\r\n        onFormInitialized(mode, publisherId, accountId, entityId);\r\n      }\r\n    }\r\n    // eslint-disable-next-line react-hooks/exhaustive-deps\r\n  }, [entityId]);\r\n\r\n  useEffect(() => {\r\n    if (publisherId) {\r\n      onFormInitialized(mode, publisherId, accountId, entityId);\r\n    }\r\n    // eslint-disable-next-line react-hooks/exhaustive-deps\r\n  }, []);\r\n\r\n  return (\r\n    <DetailPage\r\n      titleLabel={titleLabel}\r\n      helpId={'pop_PCv4_PropertiesCreate'}\r\n      submitLabel={submitLabel}\r\n      onCancel={() => onHandleCancel(publisherId, accountId)}\r\n      onSubmit={() => onFormSubmitted(mode, history, onSubmit)}\r\n      onNavClick={() => onHandleCancel(publisherId, accountId)}\r\n      saving={saving || savingProp}\r\n      loading={loading}\r\n      pageMode={mode}\r\n      hasFormTitle\r\n      submitButtonDisabled={isSubmitButtonDisabled(active)}\r\n      additionalHeightBoundary={isInPanel}\r\n    >\r\n      <PropertyNameInputField mode={mode} />\r\n      <PropertyIdField id={active.id} />\r\n      <PropertyUrlInputField mode={mode} />\r\n      <PropertyApprovalStateField mode={mode} />\r\n      <ClaritySection mode={mode} clarityConfigs={active.clarity} />\r\n      <PropertyAttachedAdUnitsField {...props} mode={mode} />\r\n      <PropertyApprovalStatusInputField mode={mode} />\r\n    </DetailPage>\r\n  );\r\n});\r\n","// Copy of NativeAdTemplate with nessesary edits for boost user experience\r\n// tslint:disable: max-line-length\r\n\r\nimport { Model } from './Model';\r\nimport { Asset, RenderingConfig } from './NativeAdTemplate';\r\n\r\nexport class NativeAdTemplateBoost extends Model {\r\n  public apiPath = undefined;\r\n  public className = 'templates';\r\n\r\n  public type: TemplateTypeNumber;\r\n  public adUnitId: number;\r\n  public numberOfAds: number;\r\n  public assets: Asset[];\r\n  public renderingConfig: RenderingConfig;\r\n}\r\n\r\nexport enum TemplateTypeNumber {\r\n  Custom = 0,\r\n  ImageAbove = 1,\r\n  ImageOnSide = 2,\r\n  TitleAbove = 3,\r\n  TextOnly = 4,\r\n  TextOnImage = 5,\r\n}\r\n","// Approximate to the closest prefixed unit\r\nconst BYTE_UNITS = ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];\r\nexport function convertSizeToReadableUnits(numberOfBytes): string {\r\n  const exponent = Math.min(Math.floor(Math.log(numberOfBytes) / Math.log(1024)), BYTE_UNITS.length - 1);\r\n\r\n  const approx = numberOfBytes / 1024 ** exponent;\r\n  const output = exponent === 0 ? `${numberOfBytes}B` : `${approx.toFixed(0)} ${BYTE_UNITS[exponent]}`;\r\n  return output;\r\n}\r\n","import { defineMessages } from 'react-intl';\r\n\r\nexport default defineMessages({\r\n  nonCSVFileUploadError: {\r\n    id: 'boost.nonCSVFileUploadError',\r\n    defaultMessage: 'File upload failed. Please upload only CSV file.',\r\n  },\r\n  uploadSizeLimitError: {\r\n    id: 'boost.uploadSizeLimitError',\r\n    defaultMessage: \"File size can't exceed {limit}. Please upload a smaller file.\",\r\n  },\r\n  uploadError: {\r\n    id: 'boost.uploadError',\r\n    defaultMessage: \"The file didn't upload. Please upload it again.\",\r\n  },\r\n  downloadTemplate: {\r\n    id: 'boost.template',\r\n    defaultMessage: 'Download Current Template',\r\n  },\r\n  uploadFile: {\r\n    id: 'boost.uploadFile',\r\n    defaultMessage: 'Upload file',\r\n  },\r\n  errorMessage: {\r\n    id: 'boost.errorMessage',\r\n    defaultMessage: 'Incorrect JSON, fix JSON and then replace the file',\r\n  },\r\n});\r\n","import { getTheme, ITheme, mergeStyleSets } from '@fluentui/react';\r\nimport { IPubcenterTheme } from '../../../../../../../theme';\r\nimport { flexWithAlignCenter, flexWithJustifyBetween } from '../../../../../../utils/GlobalStyleUtils';\r\n\r\nexport interface IBoostTemplateUploadStyleProps {\r\n  theme: ITheme;\r\n  isError?: boolean;\r\n}\r\n\r\ntype StyleProperties =\r\n  | 'fileUploadContainerStyle'\r\n  | 'fileUploadLabelStyle'\r\n  | 'fileUploadDescriptionStyle'\r\n  | 'fileInputStyle'\r\n  | 'uploadStatusStyle'\r\n  | 'errorStyle'\r\n  | 'progressContainerStyle'\r\n  | 'actionContainerStyle'\r\n  | 'fileUploadedStyle'\r\n  | 'csvTemplateLinkStyle';\r\ntype BoostTemplateUploadStyles = Record<StyleProperties, string>;\r\n\r\nexport const getStyles = (props: IBoostTemplateUploadStyleProps): BoostTemplateUploadStyles => {\r\n  const theme = (props.theme as unknown) as IPubcenterTheme;\r\n  const { spacing, palette, fonts } = theme;\r\n\r\n  return mergeStyleSets({\r\n    fileUploadContainerStyle: {\r\n      ...flexWithAlignCenter,\r\n      justifyContent: 'center',\r\n      flexDirection: 'column',\r\n      background: palette.neutralLighterAlt,\r\n      border: `1px dashed ${props.isError ? palette.red : palette.neutralQuaternaryAlt}`,\r\n      padding: spacing.size24,\r\n      marginBottom: spacing.size2,\r\n      borderRadius: spacing.size4,\r\n    },\r\n    fileInputStyle: {\r\n      display: 'none',\r\n    },\r\n    fileUploadLabelStyle: {\r\n      color: palette.highContrastPrimary,\r\n      cursor: 'pointer',\r\n    },\r\n    csvTemplateLinkStyle: {\r\n      color: palette.highContrastLink,\r\n    },\r\n    fileUploadDescriptionStyle: {\r\n      ...fonts.size12,\r\n      marginTop: spacing.size4,\r\n      opacity: '0.8',\r\n    },\r\n    fileUploadedStyle: {\r\n      ...flexWithJustifyBetween,\r\n      width: '100%',\r\n    },\r\n    uploadStatusStyle: {\r\n      ...fonts.size12,\r\n      opacity: 0.8,\r\n      marginTop: spacing.size8,\r\n    },\r\n    actionContainerStyle: {\r\n      display: 'flex',\r\n      gap: spacing.size12,\r\n    },\r\n    errorStyle: {\r\n      color: palette.red,\r\n    },\r\n    progressContainerStyle: {\r\n      flexGrow: 1,\r\n      marginRight: spacing.size12,\r\n    },\r\n  });\r\n};\r\n\r\nexport function getClassNames<PropType>(props?: PropType): BoostTemplateUploadStyles {\r\n  return getStyles({ theme: getTheme(), ...props });\r\n}\r\n","import { IconButton, MessageBarType, ProgressIndicator } from '@fluentui/react';\r\nimport React, { useEffect, useRef, useState } from 'react';\r\nimport { InjectedIntlProps } from 'react-intl';\r\nimport { NativeAdTemplate, onNotificationChanged } from '../../../../../../@data';\r\nimport { NativeAdTemplateBoost, TemplateTypeNumber } from '../../../../../../@data/store/schema/models/NativeAdTemplateBoost';\r\nimport AppMessages from '../../../../../../App.messages';\r\nimport { injectIntlAndObserver } from '../../../../../../utils';\r\nimport { convertSizeToReadableUnits } from '../../../../../../utils/UnitsUtils';\r\nimport { getAdunitStore } from '../../../@data';\r\nimport messages from './BoostJsonFileUpload.messages';\r\nimport { getClassNames } from './BoostJsonFileUpload.styles';\r\n\r\nconst ACCEPTED_FILE_EXTENSION = '.JSON';\r\nconst JSON_FILE_TYPE = 'text/JSON';\r\nexport interface IBoostJsonFileUpload {\r\n  adUnitId?: string;\r\n  onNewFileUpload: (file: NativeAdTemplate) => void;\r\n  onReplaceFile?: (file: NativeAdTemplate) => void;\r\n  existingDomains?: string[];\r\n}\r\n\r\nexport interface IFileUploadStats {\r\n  name?: string;\r\n  type?: string;\r\n  size?: number;\r\n  readableSize?: string;\r\n  successCount?: number;\r\n  failureCount?: number;\r\n  conflictCount?: number;\r\n}\r\n\r\nenum FileOperation {\r\n  NewUpload,\r\n  Append,\r\n  Replace,\r\n}\r\n\r\nexport const LAST_FILE_UPLOAD_INFO_KEY = 'lastFileUploadInfo';\r\n\r\nexport const BoostJsonFileUpload = injectIntlAndObserver(\r\n  ({ adUnitId, intl, onNewFileUpload, onReplaceFile }: IBoostJsonFileUpload & InjectedIntlProps) => {\r\n    const {\r\n      active: { BoostTemplate },\r\n    } = getAdunitStore();\r\n\r\n    const { formatMessage } = intl;\r\n    const [isUploadInProgress, setIsUploadInProgress] = useState(false);\r\n    const [fileUploadError, setFileUploadError] = useState<string | null>(null);\r\n    const [fileUploadStats, setFileUploadStats] = useState<IFileUploadStats | null>(null);\r\n    const [template, setTemplate] = useState<NativeAdTemplate | undefined>(BoostTemplate);\r\n\r\n    const fileReader = useRef(new FileReader());\r\n    let fileOperation: FileOperation;\r\n\r\n    const {\r\n      fileInputStyle,\r\n      fileUploadContainerStyle,\r\n      fileUploadLabelStyle,\r\n      fileUploadedStyle,\r\n      errorStyle,\r\n      progressContainerStyle,\r\n      actionContainerStyle,\r\n    } = getClassNames({\r\n      isError: !!fileUploadError,\r\n    });\r\n\r\n    function getFileUploadStorageKey() {\r\n      return 'boostAdUnitTemplateJsonFile';\r\n    }\r\n\r\n    function handleReplaceFile(event) {\r\n      fileOperation = FileOperation.Replace;\r\n      return handleFileUpload(event);\r\n    }\r\n\r\n    function handleNewFileUpload(event) {\r\n      fileOperation = FileOperation.NewUpload;\r\n      return handleFileUpload(event);\r\n    }\r\n\r\n    function boostFileValidation(JsonObject) {\r\n      return (\r\n        JsonObject.type !== undefined &&\r\n        JsonObject.numberOfAds !== undefined &&\r\n        JsonObject.assets !== undefined &&\r\n        JsonObject.renderingConfig !== undefined\r\n      );\r\n    }\r\n\r\n    function handleFileUpload(event) {\r\n      setFileUploadError(null);\r\n      const file = event.target.files[0] as File;\r\n      const { size, name, type } = file || {};\r\n\r\n      setFileUploadStats({ readableSize: convertSizeToReadableUnits(size), size, name, type });\r\n\r\n      const readerInstance = fileReader.current;\r\n\r\n      readerInstance.onloadstart = () => setIsUploadInProgress(true);\r\n      readerInstance.onloadend = () => {\r\n        const { result } = readerInstance;\r\n        if (typeof result !== 'string') {\r\n          const errorMessage = formatMessage(messages.errorMessage);\r\n          const errorDiv = document.createElement('div');\r\n          errorDiv.innerHTML = errorMessage;\r\n          document.body.appendChild(errorDiv);\r\n          onNotificationChanged({ text: errorMessage, messageBarType: MessageBarType.error });\r\n          setFileUploadError(formatMessage(messages.uploadError));\r\n          return;\r\n        }\r\n\r\n        try {\r\n          const JsonObject: NativeAdTemplate = JSON.parse(result);\r\n          if (!boostFileValidation(JsonObject)) {\r\n            // setFileUploadStats({ name: 'ERROR: Incorrect Format' });\r\n            setFileUploadError(formatMessage(messages.uploadError));\r\n            return;\r\n          }\r\n\r\n          if (fileOperation === FileOperation.Replace && fileUploadStats) {\r\n            onReplaceFile?.(JsonObject);\r\n          } else {\r\n            onNewFileUpload(JsonObject);\r\n          }\r\n          setTemplate(JsonObject);\r\n        } catch (e) {\r\n          const errorMessage = formatMessage(messages.errorMessage);\r\n          setFileUploadError(formatMessage(messages.uploadError));\r\n          onNotificationChanged({ text: errorMessage, messageBarType: MessageBarType.error });\r\n        }\r\n\r\n        setFileUploadStats((prevValue) => ({\r\n          ...prevValue,\r\n        }));\r\n      };\r\n\r\n      readerInstance.readAsText(file, JSON_FILE_TYPE);\r\n    }\r\n\r\n    function isNoFileUploadedYet() {\r\n      return !isUploadInProgress && !fileUploadStats && template === undefined;\r\n    }\r\n\r\n    function shouldShowFileDetails(): boolean {\r\n      return !!fileUploadStats && !isUploadInProgress;\r\n    }\r\n\r\n    function cancelUpload() {\r\n      fileReader.current.abort();\r\n      setIsUploadInProgress(false);\r\n    }\r\n\r\n    function renderUploadInProgressSection() {\r\n      const { name } = fileUploadStats || {};\r\n      if (!isUploadInProgress || !name) {\r\n        return null;\r\n      }\r\n\r\n      return (\r\n        <div className={fileUploadedStyle}>\r\n          <div className={progressContainerStyle}>\r\n            <div className=\"fileNameStyle\">{name}</div>\r\n            <ProgressIndicator />\r\n          </div>\r\n          <div className=\"closeContainerStyle\">\r\n            <IconButton iconProps={{ iconName: 'Cancel' }} onClick={cancelUpload} />\r\n          </div>\r\n        </div>\r\n      );\r\n    }\r\n\r\n    function renderFileUploadedSection() {\r\n      if (!fileUploadStats) {\r\n        return null;\r\n      }\r\n\r\n      const { name, readableSize } = fileUploadStats;\r\n      return (\r\n        <div className={fileUploadedStyle}>\r\n          <div>\r\n            <div className=\"fileName\">\r\n              {name} ({readableSize})\r\n            </div>\r\n          </div>\r\n          <div className={actionContainerStyle}>\r\n            <label className={fileUploadLabelStyle} tabIndex={0}>\r\n              <input type=\"file\" className={fileInputStyle} accept={ACCEPTED_FILE_EXTENSION} onChange={handleReplaceFile} />\r\n              {formatMessage(AppMessages.replace)}\r\n            </label>\r\n          </div>\r\n        </div>\r\n      );\r\n    }\r\n\r\n    function renderNoFileUploadedSection() {\r\n      return (\r\n        <label className={fileUploadLabelStyle} tabIndex={0}>\r\n          <input type=\"file\" className={fileInputStyle} accept={ACCEPTED_FILE_EXTENSION} onChange={handleNewFileUpload} />\r\n          {formatMessage(messages.uploadFile)}\r\n        </label>\r\n      );\r\n    }\r\n\r\n    const handleDownload = async () => {\r\n      // Code to download file goes here...\r\n      if (template !== undefined) {\r\n        const jsonLink = document.createElement('a');\r\n        // Need logic to turn the string into number\r\n        const ParsedBoostTemplate: NativeAdTemplateBoost = JSON.parse(JSON.stringify(template));\r\n        ParsedBoostTemplate.type = TemplateTypeNumber[template.type as keyof typeof TemplateTypeNumber];\r\n        jsonLink.setAttribute(\r\n          'download',\r\n          ParsedBoostTemplate.name ? ParsedBoostTemplate.name.toString() + '.JSON' : 'CurrentTemplate.JSON'\r\n        );\r\n        const dataStr = 'data:text/json;charset=utf-8,' + encodeURIComponent(JSON.stringify(ParsedBoostTemplate));\r\n        jsonLink.setAttribute('href', dataStr);\r\n        document.body.appendChild(jsonLink);\r\n        jsonLink.click();\r\n        document.body.removeChild(jsonLink);\r\n      } else {\r\n        alert('No template found');\r\n      }\r\n    };\r\n\r\n    useEffect(() => {\r\n      if (fileUploadStats && !fileUploadError) {\r\n        sessionStorage.setItem(getFileUploadStorageKey(), JSON.stringify(fileUploadStats));\r\n        setIsUploadInProgress(false);\r\n      }\r\n    }, [fileUploadStats, fileUploadError]);\r\n\r\n    useEffect(() => {\r\n      return () => {\r\n        if (template === undefined) {\r\n          setFileUploadStats(null);\r\n        }\r\n      };\r\n      // eslint-disable-next-line\r\n    }, []);\r\n\r\n    return (\r\n      <>\r\n        <div className={fileUploadContainerStyle}>\r\n          {isUploadInProgress && renderUploadInProgressSection()}\r\n          {shouldShowFileDetails() && renderFileUploadedSection()}\r\n          {isNoFileUploadedYet() && renderNoFileUploadedSection()}\r\n          {fileUploadStats === null && template && (\r\n            <div className={fileUploadedStyle} tabIndex={0}>\r\n              <label className={fileUploadLabelStyle} onClick={handleDownload}>\r\n                {formatMessage(messages.downloadTemplate)}\r\n              </label>\r\n              <div className={actionContainerStyle}>\r\n                <label className={fileUploadLabelStyle} tabIndex={0}>\r\n                  <input type=\"file\" className={fileInputStyle} accept={ACCEPTED_FILE_EXTENSION} onChange={handleReplaceFile} />\r\n                  {formatMessage(AppMessages.replace)}\r\n                </label>\r\n              </div>\r\n            </div>\r\n          )}\r\n        </div>\r\n        {fileUploadError && <div className={errorStyle}>{fileUploadError}</div>}\r\n      </>\r\n    );\r\n  }\r\n);\r\n","import { defineMessages } from 'react-intl';\r\n\r\nexport const mediationPopupMessages = defineMessages({\r\n  title: {\r\n    id: 'mediationPopupMessages.title',\r\n    defaultMessage: 'Are you sure you want to opt out of mediation?',\r\n  },\r\n  description: {\r\n    id: 'mediationPopupMessages.description',\r\n    defaultMessage: 'Mediation will help boost your revenue for each ad placement.',\r\n  },\r\n  turnOff: {\r\n    id: 'mediationPopupMessages.turnOff',\r\n    defaultMessage: 'Turn off',\r\n  },\r\n});\r\n","import React from 'react';\r\nimport { InjectedIntlProps } from 'react-intl';\r\nimport { getAppStore } from '../../../../../../@data';\r\nimport { onPopupOpenChanged } from '../../../../../../@data/mutatorActions';\r\nimport { PopupType } from '../../../../../../@data/store/schema/enums/PopupType';\r\nimport messages from '../../../../../../App.messages';\r\nimport { PopupCard } from '../../../../../../components/Popup';\r\nimport { injectIntlAndObserver } from '../../../../../../utils';\r\nimport { onAdSenseMediationToggleChanged } from '../../../@data/mutatorActions';\r\n\r\nimport { mediationPopupMessages } from './DisablingMediationPopup.messages';\r\n\r\nexport interface IOptOutMediationPopupProps extends InjectedIntlProps {}\r\n\r\nexport const OptOutMediationPopup = injectIntlAndObserver(function DisablingMediationComponent({\r\n  intl: { formatMessage },\r\n}: IOptOutMediationPopupProps): JSX.Element {\r\n  const { openedPopup } = getAppStore();\r\n\r\n  return (\r\n    <PopupCard\r\n      isShown={openedPopup === PopupType.AdUnitOptOut}\r\n      popUpTitle={formatMessage(mediationPopupMessages.title)}\r\n      popUpDescription={formatMessage(mediationPopupMessages.description)}\r\n      primaryButtonAriaLabel={formatMessage(mediationPopupMessages.turnOff)}\r\n      secondaryButtonAriaLabel={formatMessage(messages.cancel)}\r\n      onPopupDismiss={() => {\r\n        onPopupOpenChanged(PopupType.None);\r\n        onAdSenseMediationToggleChanged(true);\r\n      }}\r\n      onPrimaryButtonClick={() => {\r\n        onPopupOpenChanged(PopupType.None);\r\n        onAdSenseMediationToggleChanged(false);\r\n      }}\r\n      onSecondaryButtonClick={() => {\r\n        onPopupOpenChanged(PopupType.None);\r\n        onAdSenseMediationToggleChanged(true);\r\n      }}\r\n    />\r\n  );\r\n});\r\n","export const DEFAULT_AD_PREVIEW_FONT = 'Arial';\r\nexport const DEFAULT_AD_PREVIEW_BACKGROUND_COLOR = '#ffffff';\r\nexport const DEFAULT_AD_PREVIEW_BUTTON_BACKGROUND_COLOR = '#ffffff';\r\nexport const DEFAULT_AD_PREVIEW_TITLE_BACKGROUND_COLOR = '#3a474e';\r\n\r\nexport enum TythonAdTypes {\r\n  Native = 'Native',\r\n  Display = 'Display',\r\n}\r\n\r\nexport enum TythonAdUnitDisplayAdTypeLayout {\r\n  Horizontal = 'Horizontal',\r\n  Square = 'Square',\r\n  Vertical = 'Vertical',\r\n}\r\n\r\nexport type TythonAdUnitDisplayAdTypeLayoutKey = keyof typeof TythonAdUnitDisplayAdTypeLayout;\r\n\r\nexport const TythonAdUnitDisplayAdTypeLayoutLabel: { [key in TythonAdUnitDisplayAdTypeLayoutKey]: string } = {\r\n  Horizontal: 'displayAdHorizontal',\r\n  Square: 'displayAdSqaure',\r\n  Vertical: 'displayAdVertical',\r\n};\r\n","import { IProcessedStyleSet, getTheme } from '@fluentui/react';\r\nimport { useCallback, useEffect, useMemo, useState } from 'react';\r\nimport { IAdUnitTypeSelectorProps } from '.';\r\nimport { usePreloadSVGImages } from '../../../../../../hooks';\r\nimport { getClassNames } from '../../../Create/CreateAdunit';\r\nimport { getStyles } from '../../../Create/CreateAdunit.styles';\r\nimport { ICreateAdunitStyles } from '../../../Create/CreateAdunit.types';\r\nimport { TythonAdTypes, TythonAdUnitDisplayAdTypeLayout } from '../../CreateAdunit/constants';\r\nimport HorizontalBottomAdPreview from '../../resources/HorizontalBottomAdPreview.svg';\r\nimport HorizontalUpperAdPreview from '../../resources/HorizontalUpperAdPreview.svg';\r\nimport SquareBottomAdPreview from '../../resources/SquareBottomAdPreview.svg';\r\nimport SquareLeftAdPreview from '../../resources/SquareLeftAdPreview.svg';\r\nimport VerticalBottomAdPreview from '../../resources/VerticalBottomAdPreview.svg';\r\nimport VerticalLeftAdPreview from '../../resources/VerticalLeftAdPreview.svg';\r\nimport { IAdPreviewConfig } from './PreviewComponent';\r\n\r\ntype UseAdUnitTypeSelector = ({\r\n  adTypes,\r\n  nativeProperties,\r\n  onChange,\r\n}: IAdUnitTypeSelectorProps) => {\r\n  classNames: IProcessedStyleSet<ICreateAdunitStyles>;\r\n  isSdkLoaded: boolean;\r\n  adPreviewConfig: IAdPreviewConfig;\r\n  isNativeAdActive: boolean;\r\n  isDisplayAdActive: boolean;\r\n  shouldRenderNoSelectionMsg: boolean;\r\n  shouldRenderFewerSelectionMsg: boolean;\r\n  displayAdLayout: TythonAdUnitDisplayAdTypeLayout;\r\n  onDisaplayAdLayoutChange: (layout: TythonAdUnitDisplayAdTypeLayout) => void;\r\n  onAdPreviewConfigChange: (key: keyof IAdPreviewConfig, value?: string) => void;\r\n  onToggleNativeAd: (active: boolean) => void;\r\n  onToggleDisplayAd: (active: boolean) => void;\r\n  onToggleAdType: (active: boolean, type: TythonAdTypes) => void;\r\n};\r\n\r\nexport const DEFAULT_AD_PREVIEW_HEIGHT = 250;\r\nconst DEFAULT_AD_PREVIEW_WIDTH = 500;\r\nconst NUMERIC_FIELDS = ['adHeight', 'adWidth'];\r\n\r\nconst theme = getTheme();\r\n\r\nconst useAdUnitTypeSelector: UseAdUnitTypeSelector = ({ adTypes = [], nativeProperties, onChange }) => {\r\n  const { fontFamily, background, buttonBackground, titleColor } = nativeProperties ?? {};\r\n  const [isSdkLoaded, setSdkLoaded] = useState<boolean>(false);\r\n  const [adDimensions, setAdDimensions] = useState<[number, number]>([DEFAULT_AD_PREVIEW_HEIGHT, DEFAULT_AD_PREVIEW_WIDTH]);\r\n  const [displayAdLayout, setDisplayAdLayout] = useState<TythonAdUnitDisplayAdTypeLayout>(TythonAdUnitDisplayAdTypeLayout.Horizontal);\r\n\r\n  const imageList = [\r\n    HorizontalUpperAdPreview,\r\n    VerticalLeftAdPreview,\r\n    SquareLeftAdPreview,\r\n    HorizontalBottomAdPreview,\r\n    SquareBottomAdPreview,\r\n    VerticalBottomAdPreview,\r\n  ];\r\n  usePreloadSVGImages(imageList);\r\n\r\n  const classNames = getClassNames(getStyles, {\r\n    theme,\r\n    adPreviewHeight: adDimensions[0],\r\n    adPreviewWidth: adDimensions[1],\r\n  });\r\n\r\n  const adPreviewConfig = useMemo(\r\n    () => ({\r\n      adHeight: adDimensions[0],\r\n      adWidth: adDimensions[1],\r\n      fontFamily: fontFamily,\r\n      background: background,\r\n      buttonBackground: buttonBackground,\r\n      titleColor: titleColor,\r\n    }),\r\n    // eslint-disable-next-line react-hooks/exhaustive-deps\r\n    [adDimensions, nativeProperties]\r\n  );\r\n\r\n  const [isNativeAdActive, isDisplayAdActive, shouldRenderNoSelectionMsg, shouldRenderFewerSelectionMsg] = useMemo(\r\n    () => [\r\n      adTypes?.includes(TythonAdTypes.Native),\r\n      adTypes?.includes(TythonAdTypes.Display),\r\n      adTypes ? adTypes.length === 0 : false,\r\n      adTypes ? adTypes.length === 1 : false,\r\n    ],\r\n    [adTypes]\r\n  );\r\n\r\n  const onAdPreviewConfigChange = (key: keyof IAdPreviewConfig, value: string) => {\r\n    switch (key) {\r\n      case 'adHeight': {\r\n        setAdDimensions([Number(value), adDimensions[1]]);\r\n        break;\r\n      }\r\n\r\n      case 'adWidth': {\r\n        setAdDimensions([adDimensions[0], Number(value)]);\r\n        break;\r\n      }\r\n\r\n      default: {\r\n        const { adHeight, adWidth, ...nativePropertyConfigs } = adPreviewConfig;\r\n        onChange({ nativeProperties: { ...nativePropertyConfigs, [key]: NUMERIC_FIELDS.includes(key) ? Number(value) : value } });\r\n      }\r\n    }\r\n  };\r\n\r\n  const onToggleAdType = useCallback(\r\n    (active: boolean, type: TythonAdTypes) => {\r\n      if (active) {\r\n        onChange({ adTypes: Array.from(new Set([...adTypes, type])) });\r\n      } else {\r\n        onChange({ adTypes: adTypes.filter((currentType) => currentType !== type) });\r\n      }\r\n    },\r\n    // eslint-disable-next-line react-hooks/exhaustive-deps\r\n    [adTypes]\r\n  );\r\n\r\n  // load ad preview SDK at parent level to cache the script\r\n  useEffect(() => {\r\n    const script = document.createElement('script');\r\n    script.src = 'https://adsdk.microsoft.com/ad-preview/sdk.js';\r\n    script.async = true;\r\n    script.crossOrigin = 'anonymous';\r\n\r\n    script.onload = () => {\r\n      setSdkLoaded(true);\r\n    };\r\n\r\n    document.head.appendChild(script);\r\n\r\n    // Cleanup function to remove the script when component unmounts\r\n    return () => {\r\n      document.head.removeChild(script);\r\n    };\r\n  }, []);\r\n\r\n  /**\r\n   * pre-load svg when component mounts\r\n   * TODO: move this to a common hook\r\n   */\r\n\r\n  // useEffect(() => {\r\n  //   const imageList = [\r\n  //     HorizontalUpperAdPreview,\r\n  //     VerticalLeftAdPreview,\r\n  //     SquareLeftAdPreview,\r\n  //     HorizontalBottomAdPreview,\r\n  //     SquareBottomAdPreview,\r\n  //     VerticalBottomAdPreview,\r\n  //   ];\r\n  //   const preloadContainer = document.createElement('div');\r\n  //   preloadContainer.style.display = 'none';\r\n\r\n  //   imageList.forEach((imageSrc) => {\r\n  //     const img = new Image();\r\n  //     img.src = imageSrc;\r\n  //     img.width = 0;\r\n  //     img.height = 0;\r\n  //     preloadContainer.appendChild(img);\r\n  //   });\r\n\r\n  //   document.body.appendChild(preloadContainer);\r\n\r\n  //   return () => {\r\n  //     // Cleanup to remove the preloaded images when not needed\r\n  //     document.body.removeChild(preloadContainer);\r\n  //   };\r\n  // }, []);\r\n\r\n  return {\r\n    isSdkLoaded,\r\n    classNames,\r\n    adPreviewConfig,\r\n    isNativeAdActive,\r\n    isDisplayAdActive,\r\n    shouldRenderNoSelectionMsg,\r\n    shouldRenderFewerSelectionMsg,\r\n    displayAdLayout,\r\n    onDisaplayAdLayoutChange: setDisplayAdLayout,\r\n    onToggleAdType,\r\n    onAdPreviewConfigChange,\r\n    onToggleDisplayAd: (active) => onToggleAdType(active, TythonAdTypes.Display),\r\n    onToggleNativeAd: (active) => onToggleAdType(active, TythonAdTypes.Native),\r\n  };\r\n};\r\n\r\nexport default useAdUnitTypeSelector;\r\n","import { ITheme } from '@fluentui/react';\r\nimport { FontWeights } from '@fluentui/theme';\r\nimport { BreakPoints, IPubCenterFonts, IPubcenterBoxShadow, IPubcenterPalette, IPubcenterSpacing } from '../../../../../theme';\r\nimport { TythonAdUnitDisplayAdTypeLayout } from '../TythonAdunit/CreateAdunit/constants';\r\nimport { DEFAULT_AD_PREVIEW_HEIGHT } from '../TythonAdunit/components/AdUnitTypeSelector/useAdUnitTypeSelector';\r\nimport { ICreateAdunitStyleProps, ICreateAdunitStyles } from './CreateAdunit.types';\r\n\r\nexport const getStyles = (props: ICreateAdunitStyleProps): ICreateAdunitStyles => {\r\n  const { theme, adPreviewHeight, displayAdLayout } = props;\r\n  const spacing = theme.spacing as IPubcenterSpacing;\r\n  const fonts = theme.fonts as IPubCenterFonts;\r\n  const { ResponsiveSmall } = BreakPoints;\r\n  const palette = theme.palette as IPubcenterPalette;\r\n  const boxShadow = (theme as ITheme & { boxShadow: IPubcenterBoxShadow }).boxShadow;\r\n  const [isDisplayAdHorizontal, isDisplayAdSquare, isDisplayVertical] = [\r\n    displayAdLayout === TythonAdUnitDisplayAdTypeLayout.Horizontal,\r\n    displayAdLayout === TythonAdUnitDisplayAdTypeLayout.Square,\r\n    displayAdLayout === TythonAdUnitDisplayAdTypeLayout.Vertical,\r\n  ];\r\n  return {\r\n    root: {\r\n      marginTop: theme.spacing.m,\r\n      marginLeft: theme.spacing.m,\r\n    },\r\n    title: [\r\n      'ms-font-xl',\r\n      {\r\n        display: 'flex',\r\n        marginBottom: theme.spacing.l1,\r\n      },\r\n    ],\r\n    adtypesTitle: {\r\n      display: 'flex',\r\n    },\r\n    channelTitle: {\r\n      display: 'flex',\r\n      justifyContent: 'flex-start',\r\n      marginTop: spacing.size12,\r\n      marginBottom: spacing.size16,\r\n    },\r\n    button: {\r\n      background: 'none',\r\n      border: 'none',\r\n      height: '28px',\r\n      fontSize: '14px',\r\n      color: '#0078D4',\r\n\r\n      cursor: 'pointer',\r\n      position: 'relative',\r\n      top: '38px',\r\n      borderRadius: '2px',\r\n      marginLeft: spacing.size4,\r\n      boxSizing: 'border-box',\r\n      selectors: {\r\n        ':focus': {\r\n          outline: `2px solid ${palette.themePrimary}`,\r\n        },\r\n      },\r\n    },\r\n    businessModel: {\r\n      display: 'flex',\r\n      flexDirection: 'row',\r\n    },\r\n    businessModelLevel2Dropdown: {\r\n      display: 'flex',\r\n      flexDirection: 'row',\r\n      position: 'relative',\r\n      margin: '28.5px 0 0 21px',\r\n    },\r\n    dropdown: {\r\n      width: '220px',\r\n    },\r\n    combobox: {\r\n      width: '400px',\r\n    },\r\n    multiSelectPicker: {\r\n      marginBottom: theme.spacing.s1,\r\n    },\r\n    propertySection: {\r\n      display: 'flex',\r\n      flexDirection: 'column',\r\n      marginLeft: spacing.size16,\r\n    },\r\n    siteSection: {\r\n      display: 'flex',\r\n      flexDirection: 'row',\r\n      marginBottom: 50,\r\n    },\r\n    fileUploadLabelStyle: {\r\n      color: palette.themePrimary,\r\n      cursor: 'pointer',\r\n      float: 'right',\r\n      marginLeft: 'auto',\r\n    },\r\n    boostUploadDiv: {\r\n      display: 'flex',\r\n      alignItems: 'center',\r\n    },\r\n    boostUploadOuter: {\r\n      marginBottom: '0px',\r\n      paddingBottom: '0px',\r\n    },\r\n    advanceOptionTextfieldLabel: {\r\n      display: 'flex',\r\n      alignItems: 'center',\r\n    },\r\n    formAction: {\r\n      marginTop: theme.spacing.l1,\r\n      display: 'flex',\r\n      justifyContent: 'space-between',\r\n    },\r\n    propertyDetails: {\r\n      paddingTop: spacing.size12,\r\n    },\r\n    adTypeContainer: {\r\n      marginTop: spacing.size48,\r\n    },\r\n    subComponentStyles: {\r\n      servingTierChoiceGroup: {\r\n        flexContainer: {\r\n          display: 'flex',\r\n          flexDirection: 'row',\r\n          justifyContent: 'flex-start',\r\n          selectors: {\r\n            '.ms-ChoiceField': {\r\n              marginRight: theme.spacing.m,\r\n            },\r\n          },\r\n        },\r\n      },\r\n      formSection: {\r\n        root: {\r\n          borderBottomWidth: 0,\r\n        },\r\n      },\r\n      checkbox: {\r\n        root: {\r\n          marginBottom: theme.spacing.s1,\r\n        },\r\n      },\r\n      adTypeChoiceGroupOption: {\r\n        root: {\r\n          margin: `0 ${spacing.size16} ${spacing.size16} 0`,\r\n          borderRadius: '5px',\r\n          height: 'auto',\r\n          [ResponsiveSmall]: {\r\n            width: '100%',\r\n          },\r\n        },\r\n        choiceFieldWrapper: {\r\n          [ResponsiveSmall]: {\r\n            width: '100%',\r\n          },\r\n        },\r\n        labelWrapper: {\r\n          height: 'fit-content',\r\n          margin: `${spacing.size16} 0`,\r\n          lineHeight: 'normal',\r\n        },\r\n      },\r\n      textBox: {\r\n        root: {\r\n          width: spacing.size96,\r\n        },\r\n        prefix: {\r\n          padding: 0,\r\n          background: 'none',\r\n        },\r\n        errorMessage: {\r\n          width: spacing.size128,\r\n        },\r\n      },\r\n    },\r\n    mediationHeader: [\r\n      'ms-fontWeight-semibold',\r\n      {\r\n        ...fonts.size20,\r\n      },\r\n    ],\r\n    mediationToggle: {\r\n      display: 'flex',\r\n      alignItems: 'baseline',\r\n      gap: spacing.size16,\r\n      fontWeight: fonts.size14Medium.fontWeight,\r\n    },\r\n    adunitTypeAccordionWrapper: {\r\n      width: `calc(100% - ${spacing.size48})`,\r\n      position: 'relative',\r\n      '.ms-Overlay': {\r\n        userSelect: 'none', // Standard syntax\r\n        WebkitUserSelect: 'none', // Chrome, Safari, and Opera\r\n        MozUserSelect: 'none', // Firefox\r\n        msUserSelect: 'none', // IE 10+\r\n        display: 'flex',\r\n        justifyContent: 'center',\r\n        alignItems: 'center',\r\n        zIndex: 2,\r\n        fontSize: '20px',\r\n        backgroundColor: 'rgba(228, 227, 226, 0.5)',\r\n        fontWeight: 700,\r\n        color: palette.neutralSecondaryAltWhiteContrast,\r\n        position: 'absolute',\r\n        width: '100%',\r\n        borderRadius: spacing.size12,\r\n      },\r\n    },\r\n    adunitTypeAccordionCheckboxLabel: {\r\n      'ms-checkbox-text': {\r\n        fontSize: spacing.size18,\r\n      },\r\n    },\r\n    adunitTypeWarningMsgBar: {\r\n      width: `calc(100% - ${spacing.size48})`,\r\n    },\r\n    adunitTypeAccordionContentWrapper: {\r\n      width: '100%',\r\n      '.nativeAdType': {\r\n        minHeight: (adPreviewHeight ?? DEFAULT_AD_PREVIEW_HEIGHT) + 146,\r\n      },\r\n      [ResponsiveSmall]: {\r\n        flexDirection: 'column',\r\n      },\r\n    },\r\n    adunitTypeLeftSection: {\r\n      borderRight: `${spacing.size1} solid ${palette.neutralLight}`,\r\n      padding: `${spacing.size24} ${spacing.size46}`,\r\n      width: spacing.size480,\r\n      [ResponsiveSmall]: {\r\n        width: `calc(100% - ${spacing.size92})`,\r\n      },\r\n    },\r\n    adunitTypeRightSection: {\r\n      padding: `${spacing.size24} ${spacing.size46}`,\r\n      [ResponsiveSmall]: {\r\n        width: `calc(100% - ${spacing.size92})`,\r\n        borderTop: `${spacing.size1} solid ${palette.neutralLight}`,\r\n      },\r\n    },\r\n    previewSDKWrapper: {\r\n      [ResponsiveSmall]: {\r\n        maxWidth: '100%',\r\n        overflowX: 'auto',\r\n      },\r\n      '& > div > div[data-template=\"horizontal\"]': {\r\n        boxShadow: boxShadow.soft,\r\n      },\r\n    },\r\n    adunitTypeFormTitlePrimary: {\r\n      fontSize: spacing.size16,\r\n      fontWeight: 600,\r\n      color: palette.black,\r\n      marginBottom: spacing.size12,\r\n    },\r\n    boldFieldTitle: {\r\n      lineHeight: spacing.size20,\r\n      fontSize: spacing.size14,\r\n      fontWeight: FontWeights.semibold,\r\n      marginRight: spacing.size2,\r\n    },\r\n    horizontalSelectionWrapper: {\r\n      display: 'flex',\r\n      alignItems: 'center',\r\n      marginTop: spacing.size12,\r\n    },\r\n    infoMsgBar: {\r\n      backgroundColor: palette.themeLighterAlt,\r\n      '.ms-MessageBar-content': { alignItems: 'center' },\r\n    },\r\n    expandIcon: {\r\n      paddingLeft: spacing.size4,\r\n    },\r\n    newPropertyPanelHeader: {\r\n      display: 'flex',\r\n      justifyContent: 'flex-end',\r\n      padding: '5px 5px 0px 0px',\r\n    },\r\n    adPreviewWrapper: {\r\n      overflowY: 'auto',\r\n      width: '100%',\r\n    },\r\n    mediationDescriptionWrapper: {\r\n      [ResponsiveSmall]: {\r\n        width: spacing.size320,\r\n      },\r\n    },\r\n    adunitTypeDisplayAdPreviewHead: {\r\n      display: 'flex',\r\n      flexDirection: 'column',\r\n      justifyContent: 'space-between',\r\n      '>span': {\r\n        marginBottom: 0,\r\n        [ResponsiveSmall]: {\r\n          marginBottom: spacing.size6,\r\n        },\r\n      },\r\n    },\r\n    adunitTypeDisplayAdPreviewHeadButtons: {\r\n      textAlign: 'right',\r\n      [ResponsiveSmall]: {\r\n        textAlign: 'left',\r\n      },\r\n      marginBottom: spacing.size18,\r\n      '.ms-Pivot--tabs': {\r\n        '.ms-Pivot-linkContent': {\r\n          padding: `0px ${spacing.size12}`,\r\n        },\r\n        '.ms-Button': {\r\n          border: `1px solid ${palette.neutralLight}`,\r\n          height: spacing.size36,\r\n        },\r\n        '.ms-Button:nth-child(2)': {\r\n          borderLeft: 'none',\r\n          borderRight: 'none',\r\n        },\r\n        '.is-selected': {\r\n          fontWeight: 600,\r\n        },\r\n      },\r\n    },\r\n    adunitTypeDisplayAdPreviewContainer: {},\r\n    adunitTypeDisplayAdPreviewLayoutWrapper: {\r\n      overflowX: 'auto',\r\n      paddingBottom: spacing.size12,\r\n      display: 'flex',\r\n      flexDirection: isDisplayAdHorizontal ? 'column' : 'row',\r\n      gap: spacing.size12,\r\n      img: {\r\n        boxShadow: boxShadow.soft,\r\n        display: 'block',\r\n        ...(isDisplayAdHorizontal ? { width: spacing.size600 } : {}),\r\n        ...(isDisplayAdSquare ? { width: spacing.size250 } : {}),\r\n        ...(isDisplayVertical ? { width: spacing.size160 } : {}),\r\n      },\r\n      ...(isDisplayAdSquare || isDisplayVertical\r\n        ? {\r\n            '> div:nth-child(1)': {\r\n              marginRight: spacing.size12,\r\n            },\r\n            '> div:nth-child(2)': {\r\n              marginRight: spacing.size12,\r\n            },\r\n          }\r\n        : {}),\r\n    },\r\n    /**\r\n     *  the last vertical ad preview has different border width, adding\r\n     *  this class to override the nested img width.\r\n     */\r\n    verticalAdPreviewBottomWrapper: {\r\n      width: `${spacing.size159} !important`,\r\n    },\r\n    displayAdPreviewExampleTitle: {\r\n      fontWeight: 600,\r\n      marginBottom: spacing.size6,\r\n    },\r\n  };\r\n};\r\n","import {\r\n  Checkbox,\r\n  ChoiceGroup,\r\n  classNamesFunction,\r\n  Dropdown,\r\n  getTheme,\r\n  IChoiceGroupOption,\r\n  IconButton,\r\n  IDropdownOption,\r\n  IProcessedStyleSet,\r\n  Label,\r\n  Panel,\r\n  PanelType,\r\n  Stack,\r\n  TextField,\r\n  Toggle,\r\n} from '@fluentui/react';\r\nimport * as React from 'react';\r\nimport { Log } from '../../../../../logging/src/Log';\r\nimport {\r\n  AdUnitMarketClassification,\r\n  AdUnitServingTier,\r\n  getAppStore,\r\n  NativeAdTemplate,\r\n  onHelpInfoCalloutOpened,\r\n  onHelpInfoChanged,\r\n  onNavigateBack,\r\n  PrivateMarketplace,\r\n  PublisherGroupConfig,\r\n  PublisherTier,\r\n} from '../../../../@data';\r\nimport { onPopupOpenChanged } from '../../../../@data/mutatorActions';\r\nimport { completeAccess, hasReadAccess, hasUpdateAccess, UserRoleEntity, userRoleKey } from '../../../../@data/services/UserRoleService';\r\nimport { AdSenseOAuthStatus } from '../../../../@data/store/schema/enums/AdSenseOAuthStatus';\r\nimport { PopupType } from '../../../../@data/store/schema/enums/PopupType';\r\nimport { AdUnit as AdUnitAccessPermissions } from '../../../../@data/store/schema/userrolemodels/AdUnit';\r\nimport { Property as PropertyAccessPermissions } from '../../../../@data/store/schema/userrolemodels/Property';\r\nimport { isTythonSelfServeUser } from '../../../../@data/utils/checkUserType';\r\nimport AppMessages from '../../../../App.messages';\r\nimport { FormItem, FormSection, FormState } from '../../../../components/Form';\r\nimport { FormLabel } from '../../../../components/Form/FormLabel';\r\nimport { isCreating, isEditing } from '../../../../components/Form/FormState/formUtils';\r\nimport { MultiSelectPicker } from '../../../../components/MultiSelectPicker/MultiSelectPicker';\r\nimport { DetailPage } from '../../../../layout/DetailPage/DetailPage';\r\nimport { StepState } from '../../../../layout/DetailPageWithStepper/DetailPageWithStepper.types';\r\nimport { PropertyPicker } from '../../../../layout/PropertyPicker/PropertyPicker';\r\nimport { IPropertyPickerItem } from '../../../../layout/PropertyPicker/PropertyPicker.types';\r\nimport { PropertySitePicker } from '../../../../layout/PropertySitePicker/PropertySitePicker';\r\nimport { injectIntlWithObserver } from '../../../../utils/ReactUtils';\r\nimport { getAdManagementStore, RouteName } from '../../@data';\r\nimport { onPanelOpenChanged } from '../../@data/actions';\r\nimport { createReturnUrl } from '../../@data/services/AdManagementService';\r\nimport { getGoogleAdSenseStore } from '../../Account/Settings/components/GoogleConnector/@data';\r\nimport { CreateProperty } from '../../Property/Create/variations/CreateNonTythonProperty';\r\nimport propertyMessages from '../../Property/Create/variations/CreateNonTythonProperty/messages';\r\nimport { getAdunitStore, isPartnerCodeEnabled } from '../@data';\r\nimport {\r\n  onAdunitNameChanged,\r\n  onAssociatedPropertyChanged,\r\n  onBusinessModelChanged,\r\n  onChannelsChanged,\r\n  onCreatePropertyPanelOpenChanged,\r\n  onDistributionPartnerCodesChanged,\r\n  onFormCancelled,\r\n  onFormInitialized,\r\n  onFormSubmitted,\r\n  onImpressionFeedbackSignalChanged,\r\n  onMarketplaceChanged,\r\n  onPubGroupConfigChanged,\r\n  onServingTierChanged,\r\n  onStoreIdsChanged,\r\n} from '../@data/actions';\r\nimport { onAdSenseMediationToggleChanged, onAdunitPrivateMarketplaceChanged } from '../@data/mutatorActions';\r\nimport { setTemplate } from '../@data/mutatorActions/setAdUnitTemplate';\r\nimport { BoostJsonFileUpload } from './components/BoostTemplateUploader/BoostJsonFileUpload';\r\nimport { OptOutMediationPopup } from './components/DisablingMediationPopup';\r\nimport messages from './CreateAdunit.messages';\r\nimport { getStyles } from './CreateAdunit.styles';\r\nimport { ICreateAdunitProps, ICreateAdunitStyleProps, ICreateAdunitStyles, IFormInitializationState } from './CreateAdunit.types';\r\n\r\nexport const getClassNames = classNamesFunction<ICreateAdunitStyleProps, ICreateAdunitStyles>();\r\nexport const CreateAdunit = injectIntlWithObserver(\r\n  class CreateAdunitPage extends React.Component<ICreateAdunitProps, IFormInitializationState> {\r\n    private _classNames: IProcessedStyleSet<ICreateAdunitStyles>;\r\n    private _tythonUser = isTythonSelfServeUser();\r\n\r\n    constructor(props: ICreateAdunitProps) {\r\n      super(props);\r\n      this.state = {\r\n        initializeForm: true,\r\n        downloadTemplateMounted: false,\r\n      };\r\n    }\r\n    public async componentDidMount() {\r\n      const appStore = getAppStore();\r\n      const params = this.props.match.params;\r\n      const { privateMarketplace } = getAdunitStore();\r\n\r\n      // Adunit id should be passed as props, if not present in route, incase of InPage modes\r\n      const entityId = params.id || this.props.adunitId;\r\n      this.setState({ id: entityId, privateMarketPlaceCheck: privateMarketplace });\r\n\r\n      if (params.publisherId && params.accountId) {\r\n        onFormInitialized(this.props.mode, params.publisherId, params.accountId, entityId);\r\n      } else if (appStore.publisher && appStore.account) {\r\n        onFormInitialized(this.props.mode, appStore.publisher.id, appStore.account.id, entityId);\r\n      }\r\n    }\r\n\r\n    public async componentDidUpdate(prevProps, prevState) {\r\n      const { active } = getAdunitStore();\r\n\r\n      if (active.BoostTemplate && prevState.privateMarketPlaceCheck !== PrivateMarketplace.Boost) {\r\n        this.setState({ privateMarketPlaceCheck: PrivateMarketplace.Boost });\r\n      }\r\n    }\r\n\r\n    public render(): JSX.Element {\r\n      const theme = getTheme();\r\n      this._classNames = getClassNames(getStyles, { theme });\r\n      const { mode, stepState } = this.props;\r\n      const { saving, loading } = getAppStore();\r\n\r\n      const { formatMessage } = this.props.intl;\r\n      const publisherId = this.props.match.params.publisherId;\r\n      const accountId = this.props.match.params.accountId || '0';\r\n\r\n      const store = getAdunitStore();\r\n      const { helpInfo, locale } = getAppStore();\r\n      const { active } = getGoogleAdSenseStore();\r\n\r\n      const marketPlaceDropdownOptions: IDropdownOption[] = [\r\n        {\r\n          key: AdUnitMarketClassification.OwnedAndOperatedCore,\r\n          text: formatMessage(messages.marketPlaceOptionCore),\r\n          ariaLabel: formatMessage(messages.marketPlaceOptionCore),\r\n          title: '',\r\n        },\r\n        {\r\n          key: AdUnitMarketClassification.OwnedAndOperated,\r\n          text: formatMessage(messages.marketPlaceOptionRest),\r\n          ariaLabel: formatMessage(messages.marketPlaceOptionRest),\r\n          title: '',\r\n        },\r\n        {\r\n          key: AdUnitMarketClassification.Syndicated,\r\n          text: formatMessage(messages.marketPlaceOptionSyndicated),\r\n          ariaLabel: formatMessage(messages.marketPlaceOptionSyndicated),\r\n          title: '',\r\n        },\r\n        {\r\n          key: AdUnitMarketClassification.Sponsored,\r\n          text: formatMessage(messages.marketPlaceOptionsSponsored),\r\n          ariaLabel: formatMessage(messages.marketPlaceOptionsSponsored),\r\n          title: '',\r\n        },\r\n        {\r\n          key: AdUnitMarketClassification.SponsoredEnhanced,\r\n          text: formatMessage(messages.marketPlaceOptionsSponsoredEnhanced),\r\n          ariaLabel: formatMessage(messages.marketPlaceOptionsSponsoredEnhanced),\r\n          title: '',\r\n        },\r\n        {\r\n          key: AdUnitMarketClassification.SelectTier,\r\n          text: formatMessage(messages.marketPlaceOptionSelectTier),\r\n          ariaLabel: formatMessage(messages.marketPlaceOptionSelectTier),\r\n          title: '',\r\n        },\r\n      ];\r\n\r\n      const businessModelDropdownOptions: IDropdownOption[] = [\r\n        { key: 0, text: formatMessage(messages.businessModelLevel1DefaultOptionText), title: '' },\r\n      ];\r\n      if (store.active.adUnitTaxonomyValues) {\r\n        store.active.adUnitTaxonomyValues\r\n          .filter((a) => !a.parentValue)\r\n          .forEach((a) =>\r\n            businessModelDropdownOptions.push({ key: a.key, text: a.displayName, ariaLabel: a.displayName, title: '' } as IDropdownOption)\r\n          );\r\n      }\r\n\r\n      let businessModelLevel1Key = 0,\r\n        businessModelLevel2Key = 0;\r\n      if (store.active.businessModel && store.active.adUnitTaxonomyValues) {\r\n        const selectedBusinessModel = store.active.adUnitTaxonomyValues.filter((a) => a.key === store.active.businessModel)[0];\r\n        if (selectedBusinessModel) {\r\n          if (selectedBusinessModel.parentValue) {\r\n            businessModelLevel2Key = selectedBusinessModel.key;\r\n\r\n            const parentBusinessModel = store.active.adUnitTaxonomyValues.filter((a) => a.value === selectedBusinessModel.parentValue)[0];\r\n            businessModelLevel1Key = parentBusinessModel.key;\r\n          } else {\r\n            businessModelLevel1Key = selectedBusinessModel.key;\r\n          }\r\n        } else {\r\n          Log.write('selectedBusinessModel cannot be found or API failed to fetch adunit taxonomy values');\r\n        }\r\n      } else {\r\n        Log.write('adunit taxonomy is null');\r\n      }\r\n\r\n      const adunitAccessPermissions = this._getAdUnitAccessPermission();\r\n      const propertyAccessPermissions = this._getPropertyAccessPermission();\r\n\r\n      const addProperty = () => {\r\n        onPanelOpenChanged(true);\r\n        onCreatePropertyPanelOpenChanged(true);\r\n      };\r\n\r\n      const isValidPublisherForFeedbackSignals = () => {\r\n        const publisherTier = getAppStore().publisher?.publisherTier;\r\n        Log.write('PublisherTier: ' + publisherTier);\r\n\r\n        if (\r\n          publisherTier === PublisherTier.InternalPremium ||\r\n          publisherTier === PublisherTier.ManagedPremium ||\r\n          publisherTier === PublisherTier.SelfServe1stPartyBoost\r\n        ) {\r\n          return true;\r\n        }\r\n        return false;\r\n      };\r\n\r\n      const renderAdunitDetails = () => (\r\n        <>\r\n          {/** Ad unit name */}\r\n          <FormItem formWidth={440}>\r\n            <TextField\r\n              label={formatMessage(messages.adunitNameLabel)}\r\n              required={true}\r\n              errorMessage={store.errors.name}\r\n              value={store.active.name}\r\n              onChange={(_, value) => onAdunitNameChanged(value)}\r\n              disabled={this._isDisabled(mode, adunitAccessPermissions === null ? completeAccess : adunitAccessPermissions.name)}\r\n            />\r\n          </FormItem>\r\n          {/** Ad unit id */}\r\n          {(isEditing(mode) || (isCreating(mode) && stepState === StepState.Dirty)) && (\r\n            <FormItem formWidth={440}>\r\n              <TextField label={formatMessage(messages.adunitId)} required={true} disabled={true} value={String(store.active.id ?? '')} />\r\n            </FormItem>\r\n          )}\r\n          {/** Ad unit site id + site url */}\r\n          {this._tythonUser &&\r\n            hasReadAccess(propertyAccessPermissions === null ? completeAccess : propertyAccessPermissions.websiteURL) &&\r\n            (isEditing(mode) || (isCreating(mode) && stepState === StepState.Dirty)) && (\r\n              <FormItem formWidth={440}>\r\n                <TextField\r\n                  label={formatMessage(messages.site)}\r\n                  required={true}\r\n                  disabled={true}\r\n                  value={\r\n                    loading\r\n                      ? ''\r\n                      : store.active.propertySelected\r\n                      ? store.active.propertySelected.id + ' - ' + store.active.propertySelected.url\r\n                      : formatMessage(messages.siteDefaultNotFound)\r\n                  }\r\n                />\r\n              </FormItem>\r\n            )}\r\n          {/** Ad unit marketplace */}\r\n          {hasReadAccess(adunitAccessPermissions === null ? completeAccess : adunitAccessPermissions.markeplaceClassification) && (\r\n            <FormItem>\r\n              <Dropdown\r\n                label={formatMessage(messages.marketplaceLabel)}\r\n                required={true}\r\n                options={marketPlaceDropdownOptions}\r\n                defaultSelectedKey={store.active.marketClassification}\r\n                onChange={(_, value) => onMarketplaceChanged(value!)}\r\n                disabled={this._isDisabled(\r\n                  mode,\r\n                  adunitAccessPermissions === null ? completeAccess : adunitAccessPermissions.markeplaceClassification\r\n                )}\r\n              />\r\n            </FormItem>\r\n          )}\r\n          {/** Ad unit business model */}\r\n          {hasReadAccess(adunitAccessPermissions === null ? completeAccess : adunitAccessPermissions.businessModel) && (\r\n            <div className={this._classNames.businessModel}>\r\n              <FormItem formWidth={241}>\r\n                <Dropdown\r\n                  label={formatMessage(messages.businessModelLabel)}\r\n                  options={businessModelDropdownOptions}\r\n                  defaultSelectedKey={businessModelLevel1Key}\r\n                  onChange={(_, value) => onBusinessModelChanged(value)}\r\n                  disabled={this._isDisabled(\r\n                    mode,\r\n                    adunitAccessPermissions === null ? completeAccess : adunitAccessPermissions.businessModel\r\n                  )}\r\n                />\r\n              </FormItem>\r\n              <FormItem formWidth={241}>\r\n                <div className={this._classNames.businessModelLevel2Dropdown}>\r\n                  <Dropdown\r\n                    className={this._classNames.dropdown}\r\n                    ariaLabel={formatMessage(messages.businessModelLevel2AriaLabel)}\r\n                    options={this._fetchBusinessModelLevel2Options(businessModelLevel1Key)}\r\n                    defaultSelectedKey={businessModelLevel2Key}\r\n                    onChange={(_, value) => {\r\n                      if (value && value.key !== 0) {\r\n                        onBusinessModelChanged(value);\r\n                      }\r\n                    }}\r\n                    disabled={\r\n                      this._isDisabled(mode, adunitAccessPermissions === null ? completeAccess : adunitAccessPermissions.businessModel) ||\r\n                      !store.active.businessModel\r\n                    }\r\n                  />\r\n                </div>\r\n              </FormItem>\r\n            </div>\r\n          )}\r\n\r\n          {isValidPublisherForFeedbackSignals() && (\r\n            <FormItem formWidth={480}>\r\n              <FormLabel\r\n                id=\"requiredFeedbackSignalsRadioLabel\"\r\n                labelContent={formatMessage(messages.requiredFeedbackSignalsLabel)}\r\n                calloutContent={helpInfo}\r\n                iconButtonOnClick={() => onHelpInfoCalloutOpened('pop_PCv4_AdUnitsFeedbackSignals', locale)}\r\n                calloutOnDismiss={() => onHelpInfoChanged()}\r\n                intl={this.props.intl}\r\n              />\r\n              <Checkbox\r\n                id={formatMessage(messages.requiredImpressionFeedbackSignalOptionLabel)}\r\n                aria-label={formatMessage(messages.requiredImpressionFeedbackSignalOptionLabel)}\r\n                label={formatMessage(messages.requiredImpressionFeedbackSignalOptionLabel)}\r\n                checked={!!store.active.isImpressionFeedbackRequired}\r\n                onChange={(_, value) => onImpressionFeedbackSignalChanged(value)}\r\n                styles={this._classNames.subComponentStyles.checkbox}\r\n              />\r\n            </FormItem>\r\n          )}\r\n\r\n          {/** Ad unit Search Distribution Partner Codes */}\r\n          {isPartnerCodeEnabled(publisherId) &&\r\n            hasReadAccess(adunitAccessPermissions === null ? completeAccess : adunitAccessPermissions.distributionPartnerCodes) && (\r\n              <FormItem formWidth={440}>\r\n                <div className={this._classNames.distributionPartnerCodes}>\r\n                  <TextField\r\n                    errorMessage={store.errors.distributionPartnerCodes}\r\n                    multiline={true}\r\n                    placeholder={formatMessage(messages.distributionPartnerCodesTextfieldPlaceholder)}\r\n                    description={formatMessage(messages.distributionPartnerCodesLabelDescription)}\r\n                    aria-labelledby=\"distributionPartnerCodesLabel\"\r\n                    onRenderLabel={() => {\r\n                      return (\r\n                        <FormLabel\r\n                          id=\"distributionPartnerCodesLabel\"\r\n                          labelContent={formatMessage(messages.distributionPartnerCodesLabel)}\r\n                          calloutContent={helpInfo}\r\n                          iconButtonOnClick={() => onHelpInfoCalloutOpened('pop_PCv4_SearchDistributionPartner', locale)}\r\n                          calloutOnDismiss={() => onHelpInfoChanged()}\r\n                          intl={this.props.intl}\r\n                        />\r\n                      );\r\n                    }}\r\n                    value={store.active.distributionPartnerCodes}\r\n                    onChange={(_, value) => onDistributionPartnerCodesChanged(value)}\r\n                    disabled={this._isDisabled(\r\n                      this.props.mode,\r\n                      adunitAccessPermissions === null ? completeAccess : adunitAccessPermissions.distributionPartnerCodes\r\n                    )}\r\n                  />\r\n                </div>\r\n              </FormItem>\r\n            )}\r\n          {/** Ad unit channel */}\r\n          {hasReadAccess(adunitAccessPermissions === null ? completeAccess : adunitAccessPermissions.channelList) && (\r\n            <FormSection title={formatMessage(messages.channelTitle)} styles={this._classNames.subComponentStyles.formSection}>\r\n              {this._channelList(adunitAccessPermissions)}\r\n            </FormSection>\r\n          )}\r\n          {/** Ad unit property */}\r\n          {/* tslint:disable-next-line: max-line-length */}\r\n          {!this._tythonUser && hasReadAccess(propertyAccessPermissions === null ? completeAccess : propertyAccessPermissions.websiteURL) && (\r\n            <FormSection title={formatMessage(messages.propertySectionTitle)} styles={this._classNames.subComponentStyles.formSection}>\r\n              {this._propertyPicker(adunitAccessPermissions)}\r\n            </FormSection>\r\n          )}\r\n          {/** Ad unit site for Tython */}\r\n          {this._tythonUser &&\r\n            (isCreating(mode) || stepState === StepState.Empty) &&\r\n            hasReadAccess(propertyAccessPermissions === null ? completeAccess : propertyAccessPermissions.websiteURL) &&\r\n            !store.active.id && (\r\n              <FormItem formWidth={550}>\r\n                <div className={this._classNames.siteSection}>\r\n                  {this._propertySitePicker(adunitAccessPermissions)}\r\n                  <button onClick={addProperty} className={this._classNames.button}>\r\n                    {formatMessage(messages.siteButton)}\r\n                  </button>\r\n                </div>\r\n              </FormItem>\r\n            )}\r\n          {/** Ad unit advanced options */}\r\n          {hasReadAccess(adunitAccessPermissions === null ? completeAccess : adunitAccessPermissions.servingTier) && (\r\n            <FormSection title={formatMessage(messages.advOptionTitle)} styles={this._classNames.subComponentStyles.formSection}>\r\n              {this._advancedOptions(adunitAccessPermissions)}\r\n            </FormSection>\r\n          )}\r\n          {/** Ad unit property panel */}\r\n          {hasReadAccess(propertyAccessPermissions === null ? completeAccess : propertyAccessPermissions.websiteURL) &&\r\n            this._renderPropertyPanel(store.isPanelOpen)}\r\n          {/** Ad unit type choice group */}\r\n          {/* TODO: remove tython components */}\r\n          {/* {this._tythonUser && isCreating(mode) && store.active.adUnitType && (\r\n            <div className={this._classNames.adTypeContainer}>\r\n              <ChoiceGroup\r\n                label={formatMessage(messages.adunitType)}\r\n                options={renderAdTypeOptions(formatMessage, this._classNames.subComponentStyles.adTypeChoiceGroupOption)}\r\n                required={true}\r\n                selectedKey={store.active.adUnitType}\r\n                onChange={(_, option: IChoiceGroupOption) => {\r\n                  onAdunitTypeChanged(option.key as AdUnitType);\r\n                }}\r\n              />\r\n            </div>\r\n          )} */}\r\n          {/* {this._tythonUser && <AdUnitTypeSelector />} */}\r\n          {/** Ad unit mediation toggle */}\r\n          {this._tythonUser && active.connectionStatus === AdSenseOAuthStatus.Success && active.isMediationEnabled === true && (\r\n            <>\r\n              <OptOutMediationPopup />\r\n              <div className={this._classNames.mediationHeader}>{formatMessage(messages.mediationHeader)}</div>\r\n              <div>\r\n                <p>{formatMessage(messages.mediationDescription)}</p>\r\n              </div>\r\n              <div className={this._classNames.mediationToggle}>\r\n                <p>{formatMessage(messages.mediationToggleLabel)}</p>\r\n                <Toggle\r\n                  ariaLabel={formatMessage(messages.mediationToggleLabel)}\r\n                  checked={store.active.adSenseMediationToggle === true}\r\n                  title=\"mediationToggle\"\r\n                  onChange={(_, state) => {\r\n                    onAdSenseMediationToggleChanged(state || false);\r\n\r\n                    if (store.active.adSenseMediationStatus === true && state === false) {\r\n                      onPopupOpenChanged(PopupType.AdUnitOptOut);\r\n                    }\r\n                  }}\r\n                />\r\n              </div>\r\n            </>\r\n          )}\r\n        </>\r\n      );\r\n\r\n      return mode !== FormState.MultiStepCreation && mode !== FormState.MultiStepEdit ? (\r\n        <DetailPage\r\n          titleLabel={formatMessage(isEditing(mode) ? messages.editPageTitle : messages.createPageTitle)}\r\n          helpId={'pop_PCv4_AdUnitsCreate'}\r\n          submitLabel={this._getSubmitLabel(mode)}\r\n          onSubmit={() => this._onSubmit(publisherId, accountId)}\r\n          onCancel={() => this._onCancel(publisherId, accountId)}\r\n          onNavClick={() => this._onCancel(publisherId, accountId)}\r\n          saving={saving}\r\n          loading={loading}\r\n          pageMode={mode}\r\n        >\r\n          {renderAdunitDetails()}\r\n        </DetailPage>\r\n      ) : (\r\n        renderAdunitDetails()\r\n      );\r\n    }\r\n\r\n    /**\r\n     *\tTakes a boolean, and return a Panel component\r\n     *\t@param isPanelOpen second input\r\n     *\t@returns Property Panel component\r\n     */\r\n\r\n    private _renderPropertyPanel = (isPanelOpen?: boolean | null): JSX.Element => {\r\n      const store = getAdunitStore();\r\n      const { formatMessage } = this.props.intl;\r\n      return (\r\n        <Panel\r\n          isOpen={getAdManagementStore().panelIsOpen}\r\n          type={PanelType.medium}\r\n          customWidth={store.active.createPropertyPanelOpen ? '500px' : '700px'}\r\n          onDismiss={() => {\r\n            onPanelOpenChanged(false);\r\n            if (store.active.createPropertyPanelOpen) {\r\n              onCreatePropertyPanelOpenChanged(false);\r\n            }\r\n          }}\r\n          onRenderNavigation={() => (\r\n            <div className={this._classNames.newPropertyPanelHeader} role=\"navigation\">\r\n              <IconButton\r\n                iconProps={{ iconName: 'Cancel' }}\r\n                aria-label={formatMessage(AppMessages.close)}\r\n                onClick={() => {\r\n                  onPanelOpenChanged(false);\r\n                  if (store.active.createPropertyPanelOpen) {\r\n                    onCreatePropertyPanelOpenChanged(false);\r\n                  }\r\n                }}\r\n              />\r\n            </div>\r\n          )}\r\n          headerText={formatMessage(propertyMessages.createPageTitle)}\r\n          headerTextProps={{ hidden: true }}\r\n        >\r\n          {store.active.createPropertyPanelOpen && (\r\n            <CreateProperty\r\n              {...this.props}\r\n              mode={FormState.InPageCreate}\r\n              onCancel={() => {\r\n                onPanelOpenChanged(false);\r\n                if (store.active.createPropertyPanelOpen) {\r\n                  onCreatePropertyPanelOpenChanged(false);\r\n                }\r\n              }}\r\n              onSubmit={() => {\r\n                onPanelOpenChanged(false);\r\n                onCreatePropertyPanelOpenChanged(false);\r\n              }}\r\n            />\r\n          )}\r\n        </Panel>\r\n      );\r\n    };\r\n\r\n    /**\r\n     *\tTakes an access permission and return a channel MultiSelectPicker component\r\n     *\t@param adUnitAccessPermissions input to _channelList\r\n     *\t@returns channel MultiSelectPicker component\r\n     */\r\n\r\n    private _channelList = (adunitAccessPermissions: AdUnitAccessPermissions | null): JSX.Element => {\r\n      const { formatMessage } = this.props.intl;\r\n      const store = getAdunitStore();\r\n      const selectedChannels = store.active.channelsSelected;\r\n      return (\r\n        <MultiSelectPicker\r\n          className={this._classNames.multiSelectPicker}\r\n          intl={this.props.intl}\r\n          required={true}\r\n          ariaDescription={formatMessage(messages.channelPickerAriaDesc)}\r\n          errorMessage={store.errors.channelsSelected}\r\n          items={store.active.channels || []}\r\n          onSelectedItems={(items) => onChannelsChanged(items)}\r\n          initialSelectedItems={selectedChannels}\r\n          enableCreateButton={this.props.mode !== FormState.InPageCreate}\r\n          createButtonLabel={formatMessage(AppMessages.createChannel)}\r\n          onCreateButtonClick={() => onPanelOpenChanged(true)}\r\n          disabled={this._isDisabled(\r\n            this.props.mode,\r\n            adunitAccessPermissions === null ? completeAccess : adunitAccessPermissions.channelList\r\n          )}\r\n        />\r\n      );\r\n    };\r\n\r\n    /**\r\n     *\tTakes an access permission and return a site PropertySitePicker component\r\n     *\t@param adUnitAccessPermissions input to _propertySitePicker\r\n     *\t@returns site PropertySitePicker component\r\n     */\r\n\r\n    private _propertySitePicker = (adUnitAccessPermissions: AdUnitAccessPermissions | null): JSX.Element => {\r\n      const { formatMessage } = this.props.intl;\r\n      const store = getAdunitStore();\r\n      const properties = store.active.properties\r\n        ? store.active.properties.map((p) => ({ id: p.id, url: p.url } as IPropertyPickerItem))\r\n        : [];\r\n\r\n      return (\r\n        <PropertySitePicker\r\n          title={formatMessage(messages.site)}\r\n          items={properties}\r\n          searchBoxPlaceholder={\r\n            store.active.propertySelected\r\n              ? store.active.propertySelected.id + ' - ' + store.active.propertySelected.url\r\n              : formatMessage(messages.propertyDefaultOptionText)\r\n          }\r\n          propertyOptionsAriaLabel={formatMessage(messages.propertyOptionsAriaLabel)}\r\n          onCreateButtonClick={() => {\r\n            onPanelOpenChanged(true);\r\n            onCreatePropertyPanelOpenChanged(true);\r\n          }}\r\n          onListItemClicked={(item) => {\r\n            if (item && store.active.properties) {\r\n              const selectedProperty = store.active.properties.filter((p) => p.id === item.id)[0];\r\n              onAssociatedPropertyChanged(selectedProperty);\r\n            } else {\r\n              onAssociatedPropertyChanged(undefined);\r\n            }\r\n          }}\r\n          emptyOptionLabel={formatMessage(messages.propertyPickerEmptyOptionLabel)}\r\n          searchBoxAriaDescription={formatMessage(messages.propertyPickerSearchBoxAriaDesc)}\r\n          itemSelectedAnnounceMessage={formatMessage(messages.propertyPickerItemSelectedAnnounceMsg)}\r\n          formatMessage={formatMessage}\r\n        />\r\n      );\r\n    };\r\n\r\n    /**\r\n     *\tTakes an access permission and return a site PropertyPicker component\r\n     *\t@param adUnitAccessPermissions input to _propertyPicker\r\n     *\t@returns property PropertyPicker component\r\n     */\r\n\r\n    private _propertyPicker = (adUnitAccessPermissions: AdUnitAccessPermissions | null): JSX.Element => {\r\n      const { formatMessage } = this.props.intl;\r\n      const store = getAdunitStore();\r\n      const properties = store.active.properties\r\n        ? store.active.properties.map((p) => ({ id: p.id, url: p.url } as IPropertyPickerItem))\r\n        : [];\r\n\r\n      return (\r\n        <div className={this._classNames.propertySection}>\r\n          <PropertyPicker\r\n            items={properties}\r\n            searchBoxPlaceholder={formatMessage(messages.propertySearchPlaceholder)}\r\n            isCreateButtonDisabled={this.props.mode === FormState.InPageCreate}\r\n            createButtonLabel={formatMessage(messages.createPropertyButtonLabel)}\r\n            propertyOptionsAriaLabel={formatMessage(messages.propertyOptionsAriaLabel)}\r\n            onCreateButtonClick={() => {\r\n              onPanelOpenChanged(true);\r\n              onCreatePropertyPanelOpenChanged(true);\r\n            }}\r\n            onListItemClicked={(item) => {\r\n              if (item && store.active.properties) {\r\n                const selectedProperty = store.active.properties.filter((p) => p.id === item.id)[0];\r\n                onAssociatedPropertyChanged(selectedProperty);\r\n              } else {\r\n                onAssociatedPropertyChanged(undefined);\r\n              }\r\n            }}\r\n            emptyOptionLabel={formatMessage(messages.propertyPickerEmptyOptionLabel)}\r\n            createButtonAriaDescription={formatMessage(messages.createPropButtonAriaDesc)}\r\n            searchBoxAriaDescription={formatMessage(messages.propertyPickerSearchBoxAriaDesc)}\r\n            itemSelectedAnnounceMessage={formatMessage(messages.propertyPickerItemSelectedAnnounceMsg)}\r\n          />\r\n\r\n          {store.active.propertySelected && (\r\n            <div className={this._classNames.propertyDetails}>\r\n              <FormItem>\r\n                <Label aria-label={formatMessage(messages.propertyName)}>{formatMessage(messages.propertyName)}</Label>\r\n                {store.active.propertySelected!.name}\r\n              </FormItem>\r\n              <FormItem>\r\n                <Label>{formatMessage(messages.websiteUrl)}</Label>\r\n                {store.active.propertySelected.url}\r\n              </FormItem>\r\n              <FormItem>\r\n                <Label>{formatMessage(messages.propertyId)}</Label>\r\n                {store.active.propertySelected.id}\r\n              </FormItem>\r\n            </div>\r\n          )}\r\n        </div>\r\n      );\r\n    };\r\n\r\n    /**\r\n     *\tTakes an access permission and return advance options section\r\n     *\t@param adUnitAccessPermissions input to _advancedOptions\r\n     *\t@returns advance options section\r\n     */\r\n\r\n    private _advancedOptions = (adunitAccessPermissions: AdUnitAccessPermissions | null): JSX.Element => {\r\n      const { formatMessage } = this.props.intl;\r\n      const store = getAdunitStore();\r\n      const { helpInfo, locale } = getAppStore();\r\n      const ChoiceGroupOption: IChoiceGroupOption[] = [\r\n        {\r\n          key: AdUnitServingTier.Default,\r\n          text: formatMessage(AppMessages.default),\r\n          ariaLabel: formatMessage(AppMessages.default),\r\n        },\r\n        {\r\n          key: AdUnitServingTier.lowCost,\r\n          text: formatMessage(messages.servingTierOptionLowcost),\r\n          ariaLabel: formatMessage(messages.servingTierOptionLowcost),\r\n        },\r\n      ];\r\n      const isBoost = sessionStorage.getItem('IsBoostPublisher');\r\n\r\n      const handlePrivateMarketPlace = (\r\n        ev: React.FormEvent<HTMLElement | HTMLInputElement> | undefined,\r\n        checked: boolean | undefined,\r\n        type: PrivateMarketplace\r\n      ) => {\r\n        if (!checked) {\r\n          onAdunitPrivateMarketplaceChanged(undefined);\r\n          this.setState({ privateMarketPlaceCheck: undefined });\r\n        } else {\r\n          if (type === PrivateMarketplace.InHouse) {\r\n            this.setState({ privateMarketPlaceCheck: PrivateMarketplace.InHouse });\r\n          } else {\r\n            this.setState({ privateMarketPlaceCheck: PrivateMarketplace.Boost });\r\n          }\r\n          onAdunitPrivateMarketplaceChanged(type);\r\n        }\r\n      };\r\n\r\n      return (\r\n        <>\r\n          {hasReadAccess(adunitAccessPermissions === null ? completeAccess : adunitAccessPermissions.servingTier) && (\r\n            <FormItem>\r\n              <FormLabel\r\n                id=\"servingTierTitle\"\r\n                labelContent={formatMessage(messages.servingTierTitle)}\r\n                calloutContent={helpInfo}\r\n                iconButtonOnClick={() => onHelpInfoCalloutOpened('pop_PCv4_AdUnitsTier', locale)}\r\n                calloutOnDismiss={() => onHelpInfoChanged()}\r\n                intl={this.props.intl}\r\n                disableHeading\r\n                disableAriaLevel\r\n              />\r\n              <ChoiceGroup\r\n                options={ChoiceGroupOption}\r\n                ariaLabelledBy={'servingTierTitle'}\r\n                styles={this._classNames.subComponentStyles.servingTierChoiceGroup}\r\n                onChange={(_, value) => onServingTierChanged(value!)}\r\n                selectedKey={store.active.servingTier ?? AdUnitServingTier.Default}\r\n                disabled={this._isDisabled(\r\n                  this.props.mode,\r\n                  adunitAccessPermissions === null ? completeAccess : adunitAccessPermissions.servingTier\r\n                )}\r\n              />\r\n            </FormItem>\r\n          )}\r\n          <FormItem>\r\n            <Dropdown\r\n              label={formatMessage(messages.publisherGroupConfigLabel)}\r\n              ariaLabel={formatMessage(messages.publisherGroupConfigLabel)}\r\n              defaultSelectedKey={store.active.publisherGroupConfig}\r\n              onChange={(_, value) => onPubGroupConfigChanged(value)}\r\n              options={[\r\n                {\r\n                  key: PublisherGroupConfig.DefaultPlus,\r\n                  text: formatMessage(messages.publisherGroupConfigOptionDefaultPlus),\r\n                  ariaLabel: formatMessage(messages.publisherGroupConfigOptionDefaultPlus),\r\n                },\r\n                {\r\n                  key: PublisherGroupConfig.Default,\r\n                  text: formatMessage(messages.publisherGroupConfigOptionDefault),\r\n                  ariaLabel: formatMessage(messages.publisherGroupConfigOptionDefault),\r\n                },\r\n                {\r\n                  key: PublisherGroupConfig.Generalist,\r\n                  text: formatMessage(messages.publisherGroupConfigOptionGeneralist),\r\n                  ariaLabel: formatMessage(messages.publisherGroupConfigOptionGeneralist),\r\n                },\r\n                {\r\n                  key: PublisherGroupConfig.YieldOptimize,\r\n                  text: formatMessage(messages.publisherGroupConfigOptionYieldOptimizer),\r\n                  ariaLabel: formatMessage(messages.publisherGroupConfigOptionYieldOptimizer),\r\n                },\r\n                {\r\n                  key: PublisherGroupConfig.YieldMaximize,\r\n                  text: formatMessage(messages.publisherGroupConfigOptionYieldMaximizer),\r\n                  ariaLabel: formatMessage(messages.publisherGroupConfigOptionYieldMaximizer),\r\n                },\r\n                {\r\n                  key: PublisherGroupConfig.BingYahooOAndO,\r\n                  text: formatMessage(messages.publisherGroupConfigOptionBingandYahoo),\r\n                  ariaLabel: formatMessage(messages.publisherGroupConfigOptionBingandYahoo),\r\n                },\r\n                {\r\n                  key: PublisherGroupConfig.LowQualityDistribution,\r\n                  text: formatMessage(messages.publisherGroupConfigOptionLowQualityDistribution),\r\n                  ariaLabel: formatMessage(messages.publisherGroupConfigOptionLowQualityDistribution),\r\n                },\r\n                {\r\n                  key: PublisherGroupConfig.MediumQualityDistribution,\r\n                  text: formatMessage(messages.publisherGroupConfigOptionMediumQualityDistribution),\r\n                  ariaLabel: formatMessage(messages.publisherGroupConfigOptionMediumQualityDistribution),\r\n                },\r\n                {\r\n                  key: PublisherGroupConfig.HighQualityDistribution,\r\n                  text: formatMessage(messages.publisherGroupConfigOptionHighQualityDistribution),\r\n                  ariaLabel: formatMessage(messages.publisherGroupConfigOptionHighQualityDistribution),\r\n                },\r\n              ]}\r\n              disabled={this._isDisabled(\r\n                this.props.mode,\r\n                adunitAccessPermissions === null ? completeAccess : adunitAccessPermissions.publisherGroupConfig\r\n              )}\r\n            />\r\n          </FormItem>\r\n          {hasReadAccess(adunitAccessPermissions === null ? completeAccess : adunitAccessPermissions.inhousePromotions) && (\r\n            <FormItem formWidth={440}>\r\n              <FormLabel\r\n                id=\"privateMarketplaceRadioLabel\"\r\n                labelContent={formatMessage(messages.privateMarketplaceLabel)}\r\n                calloutContent={helpInfo}\r\n                iconButtonOnClick={() => onHelpInfoCalloutOpened('pop_PCv4_AdUnitsPromotions', locale)}\r\n                calloutOnDismiss={() => onHelpInfoChanged()}\r\n                intl={this.props.intl}\r\n                disableHeading\r\n                disableAriaLevel\r\n              />\r\n              <Stack tokens={{ childrenGap: 10 }}>\r\n                <Checkbox\r\n                  id={formatMessage(messages.promotionRadioOptionLabel)}\r\n                  aria-label={formatMessage(messages.promotionRadioOptionLabel)}\r\n                  ariaLabelledBy={'privateMarketplaceRadioLabel'}\r\n                  label={formatMessage(messages.promotionRadioOptionLabel)}\r\n                  checked={this.state.privateMarketPlaceCheck === PrivateMarketplace.InHouse}\r\n                  onChange={(ev, checked) => handlePrivateMarketPlace(ev, checked, PrivateMarketplace.InHouse)}\r\n                  disabled={this._isDisabled(\r\n                    this.props.mode,\r\n                    adunitAccessPermissions === null ? completeAccess : adunitAccessPermissions.inhousePromotions\r\n                  )}\r\n                  styles={{ checkbox: { borderRadius: '100%' } }}\r\n                />\r\n                <Checkbox\r\n                  id={formatMessage(messages.boostRadioOptionLabel)}\r\n                  aria-label={formatMessage(messages.promotionRadioOptionLabel)}\r\n                  ariaLabelledBy={'privateMarketplaceRadioLabel'}\r\n                  label={formatMessage(messages.boostRadioOptionLabel)}\r\n                  checked={this.state.privateMarketPlaceCheck === PrivateMarketplace.Boost}\r\n                  onChange={(ev, checked) => handlePrivateMarketPlace(ev, checked, PrivateMarketplace.Boost)}\r\n                  disabled={this._isDisabled(\r\n                    this.props.mode,\r\n                    adunitAccessPermissions === null ? completeAccess : adunitAccessPermissions.inhousePromotions\r\n                  )}\r\n                  styles={{ checkbox: { borderRadius: '100%' } }}\r\n                />\r\n              </Stack>\r\n              {store.enablePrivateMarketplace && (\r\n                <FormItem formWidth={440}>\r\n                  <TextField\r\n                    multiline\r\n                    autoAdjustHeight\r\n                    placeholder={formatMessage(this._getAdvertisersWhitelistTextFieldPlaceholder())}\r\n                    ariaLabel={formatMessage(this._getAdvertisersWhitelistTextFieldPlaceholder())}\r\n                    errorMessage={store.errors.storeIds}\r\n                    onRenderLabel={this._onRenderAdvertiserWhitelistLabel}\r\n                    value={store.active.storeIds}\r\n                    onChange={(_, value) => onStoreIdsChanged(value)}\r\n                    disabled={this._isDisabled(\r\n                      this.props.mode,\r\n                      adunitAccessPermissions === null ? completeAccess : adunitAccessPermissions.inhousePromotions\r\n                    )}\r\n                  />\r\n                </FormItem>\r\n              )}\r\n\r\n              {this.state.privateMarketPlaceCheck === PrivateMarketplace.Boost && isBoost === 'true' && (\r\n                <div className={this._classNames.boostUploadOuter}>\r\n                  <div className={this._classNames.boostUploadDiv}>\r\n                    <p>{this.props.intl.formatMessage(messages.uploadBoostTemplate)}</p>\r\n                  </div>\r\n                  <BoostJsonFileUpload\r\n                    {...this.props}\r\n                    adUnitId={this.props.match.params.id || this.props.adunitId}\r\n                    onNewFileUpload={(file: NativeAdTemplate) => setTemplate(file)}\r\n                    onReplaceFile={(file: NativeAdTemplate) => setTemplate(file)}\r\n                  />\r\n                </div>\r\n              )}\r\n            </FormItem>\r\n          )}\r\n        </>\r\n      );\r\n    };\r\n\r\n    private _fetchBusinessModelLevel2Options = (businessModelLevel1Key?: number) => {\r\n      const dropdownoptions: IDropdownOption[] = [\r\n        { key: 0, text: this.props.intl.formatMessage(messages.businessModelLevel2DefaultOptionText) },\r\n      ];\r\n      const { adUnitTaxonomyValues } = getAdunitStore().active;\r\n      if (adUnitTaxonomyValues && businessModelLevel1Key) {\r\n        const level1BusinessModel = adUnitTaxonomyValues.filter((a) => a.key === businessModelLevel1Key)[0];\r\n        const businessModelLevel2Values = adUnitTaxonomyValues.filter((a) => a.parentValue === level1BusinessModel.value);\r\n        businessModelLevel2Values.forEach((a) =>\r\n          dropdownoptions.push({ key: a.key, text: a.displayName, ariaLabel: a.displayName } as IDropdownOption)\r\n        );\r\n      }\r\n\r\n      return dropdownoptions;\r\n    };\r\n    private _getAdvertisersWhitelistTextFieldLabel = () => {\r\n      const store = getAdunitStore();\r\n      return store.privateMarketplace === PrivateMarketplace.InHouse\r\n        ? messages.promotionOptionTextfieldLabel\r\n        : store.privateMarketplace === PrivateMarketplace.Boost\r\n        ? messages.boostOptionTextfieldLabel\r\n        : messages.privateMarketplaceTextfieldLabel;\r\n    };\r\n    private _getAdvertisersWhitelistTextFieldPlaceholder = () => {\r\n      const store = getAdunitStore();\r\n      return store.privateMarketplace === PrivateMarketplace.InHouse\r\n        ? messages.promotionOptionTextfieldPlaceholder\r\n        : store.privateMarketplace === PrivateMarketplace.Boost\r\n        ? messages.boostOptionTextfieldPlaceholder\r\n        : messages.privateMarketplaceTextfieldPlaceholder;\r\n    };\r\n    private _onRenderAdvertiserWhitelistLabel = (): JSX.Element => {\r\n      const { formatMessage } = this.props.intl;\r\n      const { helpInfo, locale } = getAppStore();\r\n      return (\r\n        <FormLabel\r\n          id=\"promotionsInputLabel\"\r\n          labelContent={formatMessage(this._getAdvertisersWhitelistTextFieldLabel())}\r\n          calloutContent={helpInfo}\r\n          iconButtonOnClick={() => onHelpInfoCalloutOpened('pop_PCv4_AdUnitsPromotions', locale)}\r\n          calloutOnDismiss={() => onHelpInfoChanged()}\r\n          intl={this.props.intl}\r\n        />\r\n      );\r\n    };\r\n\r\n    private _onSubmit = (publisherId?: string, accountId?: string): void => {\r\n      this.setState({ initializeForm: false });\r\n      onFormSubmitted(this.props.mode, this.props.history);\r\n      Log.debug('Ad Unit form submitted');\r\n    };\r\n\r\n    private _onCancel = (publisherId?: string, accountId?: string): void => {\r\n      const { mode, onCancel } = this.props;\r\n      this.setState({ initializeForm: false });\r\n      onFormCancelled();\r\n\r\n      if (mode !== FormState.InPageCreate && mode !== FormState.InPageEdit) {\r\n        // return to manage page\r\n        const returnUrl = createReturnUrl(RouteName.adunit, publisherId, accountId);\r\n        onNavigateBack(this.props.history, returnUrl);\r\n      }\r\n      if (onCancel) {\r\n        onCancel();\r\n      }\r\n      Log.debug('Ad Unit form cancelled');\r\n    };\r\n\r\n    private _getAdUnitAccessPermission(): AdUnitAccessPermissions | null {\r\n      const userRoles = localStorage.getItem(userRoleKey);\r\n      if (userRoles === null) {\r\n        return null;\r\n      }\r\n      const userRolesJSON = JSON.parse(userRoles);\r\n\r\n      for (const value in userRolesJSON) {\r\n        if (value === UserRoleEntity.AdUnit) {\r\n          return JSON.parse(userRolesJSON[value]);\r\n        }\r\n      }\r\n\r\n      return null;\r\n    }\r\n\r\n    private _getPropertyAccessPermission(): PropertyAccessPermissions | null {\r\n      const userRoles = localStorage.getItem(userRoleKey);\r\n      if (userRoles === null) {\r\n        return null;\r\n      }\r\n      const userRolesJSON = JSON.parse(userRoles);\r\n\r\n      for (const value in userRolesJSON) {\r\n        if (value === UserRoleEntity.Property) {\r\n          return JSON.parse(userRolesJSON[value]);\r\n        }\r\n      }\r\n\r\n      return null;\r\n    }\r\n\r\n    /**\r\n     *\tTakes FormState and returns correct label for tython or non-tython user\r\n     *\t@param mode input to _getSubmitLabel\r\n     *\t@returns label depending on mode (Create || Edit) && (tython user)\r\n     */\r\n\r\n    private _getSubmitLabel(mode: FormState): string {\r\n      const { formatMessage } = this.props.intl;\r\n      let submitButtonLabel: ReactIntl.FormattedMessage.MessageDescriptor;\r\n\r\n      if (mode === FormState.Edit || mode === FormState.InPageEdit) {\r\n        submitButtonLabel = messages.updateAdUnit;\r\n      } else {\r\n        if (this._tythonUser) {\r\n          submitButtonLabel = messages.continueAdUnit;\r\n        } else {\r\n          submitButtonLabel = messages.createPageTitle;\r\n        }\r\n      }\r\n\r\n      return formatMessage(submitButtonLabel);\r\n    }\r\n\r\n    private _isDisabled(mode: FormState, permission: number): boolean {\r\n      if (mode === FormState.Create || mode === FormState.InPageCreate) {\r\n        return false;\r\n      }\r\n\r\n      return !hasUpdateAccess(permission);\r\n    }\r\n  }\r\n);\r\n","import { ITheme } from '@fluentui/react';\r\nimport { FontWeights } from '@fluentui/theme';\r\nimport { BreakPoints, IPubCenterFonts, IPubcenterBoxShadow, IPubcenterPalette, IPubcenterSpacing } from '../../../../../../theme';\r\nimport { ICreateAdunitStyleProps, ICreateAdunitStyles } from '../../Create/CreateAdunit.types';\r\nimport { DEFAULT_AD_PREVIEW_HEIGHT } from '../components/AdUnitTypeSelector/useAdUnitTypeSelector';\r\nimport { TythonAdUnitDisplayAdTypeLayout } from './constants';\r\n\r\nexport const getStyles = (props: ICreateAdunitStyleProps): ICreateAdunitStyles => {\r\n  const { theme, adPreviewHeight, displayAdLayout } = props;\r\n  const spacing = theme.spacing as IPubcenterSpacing;\r\n  const fonts = theme.fonts as IPubCenterFonts;\r\n  const { ResponsiveSmall } = BreakPoints;\r\n  const palette = theme.palette as IPubcenterPalette;\r\n  const boxShadow = (theme as ITheme & { boxShadow: IPubcenterBoxShadow }).boxShadow;\r\n  const [isDisplayAdHorizontal, isDisplayAdSquare, isDisplayVertical] = [\r\n    displayAdLayout === TythonAdUnitDisplayAdTypeLayout.Horizontal,\r\n    displayAdLayout === TythonAdUnitDisplayAdTypeLayout.Square,\r\n    displayAdLayout === TythonAdUnitDisplayAdTypeLayout.Vertical,\r\n  ];\r\n  return {\r\n    root: {\r\n      marginTop: theme.spacing.m,\r\n      marginLeft: theme.spacing.m,\r\n    },\r\n    title: [\r\n      'ms-font-xl',\r\n      {\r\n        display: 'flex',\r\n        marginBottom: theme.spacing.l1,\r\n      },\r\n    ],\r\n    adtypesTitle: {\r\n      display: 'flex',\r\n    },\r\n    channelTitle: {\r\n      display: 'flex',\r\n      justifyContent: 'flex-start',\r\n      marginTop: spacing.size12,\r\n      marginBottom: spacing.size16,\r\n    },\r\n    button: {\r\n      background: 'none',\r\n      border: 'none',\r\n      height: '28px',\r\n      fontSize: '14px',\r\n      color: '#0078D4',\r\n\r\n      cursor: 'pointer',\r\n      position: 'relative',\r\n      top: '38px',\r\n      borderRadius: '2px',\r\n      marginLeft: spacing.size4,\r\n      boxSizing: 'border-box',\r\n      selectors: {\r\n        ':focus': {\r\n          outline: `2px solid ${palette.themePrimary}`,\r\n        },\r\n      },\r\n    },\r\n    businessModel: {\r\n      display: 'flex',\r\n      flexDirection: 'row',\r\n    },\r\n    businessModelLevel2Dropdown: {\r\n      display: 'flex',\r\n      flexDirection: 'row',\r\n      position: 'relative',\r\n      margin: '28.5px 0 0 21px',\r\n    },\r\n    dropdown: {\r\n      width: '220px',\r\n    },\r\n    combobox: {\r\n      width: '400px',\r\n    },\r\n    multiSelectPicker: {\r\n      marginBottom: theme.spacing.s1,\r\n    },\r\n    propertySection: {\r\n      display: 'flex',\r\n      flexDirection: 'column',\r\n      marginLeft: spacing.size16,\r\n    },\r\n    siteSection: {\r\n      display: 'flex',\r\n      flexDirection: 'row',\r\n      marginBottom: 50,\r\n    },\r\n    fileUploadLabelStyle: {\r\n      color: palette.themePrimary,\r\n      cursor: 'pointer',\r\n      float: 'right',\r\n      marginLeft: 'auto',\r\n    },\r\n    boostUploadDiv: {\r\n      display: 'flex',\r\n      alignItems: 'center',\r\n    },\r\n    boostUploadOuter: {\r\n      marginBottom: '0px',\r\n      paddingBottom: '0px',\r\n    },\r\n    advanceOptionTextfieldLabel: {\r\n      display: 'flex',\r\n      alignItems: 'center',\r\n    },\r\n    formAction: {\r\n      marginTop: theme.spacing.l1,\r\n      display: 'flex',\r\n      justifyContent: 'space-between',\r\n    },\r\n    propertyDetails: {\r\n      paddingTop: spacing.size12,\r\n    },\r\n    adTypeContainer: {\r\n      marginTop: spacing.size48,\r\n    },\r\n    subComponentStyles: {\r\n      servingTierChoiceGroup: {\r\n        flexContainer: {\r\n          display: 'flex',\r\n          flexDirection: 'row',\r\n          justifyContent: 'flex-start',\r\n          selectors: {\r\n            '.ms-ChoiceField': {\r\n              marginRight: theme.spacing.m,\r\n            },\r\n          },\r\n        },\r\n      },\r\n      formSection: {\r\n        root: {\r\n          borderBottomWidth: 0,\r\n        },\r\n      },\r\n      checkbox: {\r\n        root: {\r\n          marginBottom: theme.spacing.s1,\r\n        },\r\n      },\r\n      adTypeChoiceGroupOption: {\r\n        root: {\r\n          margin: `0 ${spacing.size16} ${spacing.size16} 0`,\r\n          borderRadius: '5px',\r\n          height: 'auto',\r\n          [ResponsiveSmall]: {\r\n            width: '100%',\r\n          },\r\n        },\r\n        choiceFieldWrapper: {\r\n          [ResponsiveSmall]: {\r\n            width: '100%',\r\n          },\r\n        },\r\n        labelWrapper: {\r\n          height: 'fit-content',\r\n          margin: `${spacing.size16} 0`,\r\n          lineHeight: 'normal',\r\n        },\r\n      },\r\n      textBox: {\r\n        root: {\r\n          width: spacing.size96,\r\n        },\r\n        prefix: {\r\n          padding: 0,\r\n          background: 'none',\r\n        },\r\n        errorMessage: {\r\n          width: spacing.size128,\r\n        },\r\n      },\r\n    },\r\n    mediationHeader: [\r\n      'ms-fontWeight-semibold',\r\n      {\r\n        ...fonts.size20,\r\n      },\r\n    ],\r\n    mediationToggle: {\r\n      display: 'flex',\r\n      alignItems: 'baseline',\r\n      gap: spacing.size16,\r\n      fontWeight: fonts.size14Medium.fontWeight,\r\n    },\r\n    adunitTypeAccordionWrapper: {\r\n      width: `calc(100% - ${spacing.size48})`,\r\n      position: 'relative',\r\n      '.ms-Overlay': {\r\n        userSelect: 'none', // Standard syntax\r\n        WebkitUserSelect: 'none', // Chrome, Safari, and Opera\r\n        MozUserSelect: 'none', // Firefox\r\n        msUserSelect: 'none', // IE 10+\r\n        display: 'flex',\r\n        justifyContent: 'center',\r\n        alignItems: 'center',\r\n        zIndex: 2,\r\n        fontSize: '20px',\r\n        backgroundColor: 'rgba(228, 227, 226, 0.5)',\r\n        fontWeight: 700,\r\n        color: palette.neutralSecondaryAltWhiteContrast,\r\n        position: 'absolute',\r\n        width: '100%',\r\n        borderRadius: spacing.size12,\r\n      },\r\n    },\r\n    adunitTypeAccordionCheckboxLabel: {\r\n      'ms-checkbox-text': {\r\n        fontSize: spacing.size18,\r\n      },\r\n    },\r\n    adunitTypeWarningMsgBar: {\r\n      width: `calc(100% - ${spacing.size48})`,\r\n    },\r\n    adunitTypeAccordionContentWrapper: {\r\n      width: '100%',\r\n      '.nativeAdType': {\r\n        minHeight: (adPreviewHeight ?? DEFAULT_AD_PREVIEW_HEIGHT) + 146,\r\n      },\r\n      [ResponsiveSmall]: {\r\n        flexDirection: 'column',\r\n      },\r\n    },\r\n    adunitTypeLeftSection: {\r\n      borderRight: `${spacing.size1} solid ${palette.neutralLight}`,\r\n      padding: `${spacing.size24} ${spacing.size46}`,\r\n      width: spacing.size480,\r\n      [ResponsiveSmall]: {\r\n        width: `calc(100% - ${spacing.size92})`,\r\n      },\r\n    },\r\n    adunitTypeRightSection: {\r\n      padding: `${spacing.size24} ${spacing.size46}`,\r\n      [ResponsiveSmall]: {\r\n        width: `calc(100% - ${spacing.size92})`,\r\n        borderTop: `${spacing.size1} solid ${palette.neutralLight}`,\r\n      },\r\n    },\r\n    previewSDKWrapper: {\r\n      [ResponsiveSmall]: {\r\n        maxWidth: '100%',\r\n        overflowX: 'auto',\r\n      },\r\n      '& > div > div[data-template=\"horizontal\"]': {\r\n        boxShadow: boxShadow.soft,\r\n      },\r\n    },\r\n    adunitTypeFormTitlePrimary: {\r\n      fontSize: spacing.size16,\r\n      fontWeight: 600,\r\n      color: palette.black,\r\n      marginBottom: spacing.size12,\r\n    },\r\n    boldFieldTitle: {\r\n      lineHeight: spacing.size20,\r\n      fontSize: spacing.size14,\r\n      fontWeight: FontWeights.semibold,\r\n      marginRight: spacing.size2,\r\n    },\r\n    horizontalSelectionWrapper: {\r\n      display: 'flex',\r\n      alignItems: 'center',\r\n      marginTop: spacing.size12,\r\n    },\r\n    infoMsgBar: {\r\n      backgroundColor: palette.themeLighterAlt,\r\n      '.ms-MessageBar-content': { alignItems: 'center' },\r\n    },\r\n    expandIcon: {\r\n      paddingLeft: spacing.size4,\r\n    },\r\n    newPropertyPanelHeader: {\r\n      background: 'transparent',\r\n      right: '0px',\r\n      position: 'fixed',\r\n      ':focus': {\r\n        border: '1px solid black',\r\n      },\r\n    },\r\n    adPreviewWrapper: {\r\n      overflowY: 'auto',\r\n      width: '100%',\r\n    },\r\n    mediationDescriptionWrapper: {\r\n      [ResponsiveSmall]: {\r\n        width: spacing.size320,\r\n      },\r\n    },\r\n    adunitTypeDisplayAdPreviewHead: {\r\n      display: 'flex',\r\n      flexDirection: 'column',\r\n      justifyContent: 'space-between',\r\n      '>span': {\r\n        marginBottom: 0,\r\n        [ResponsiveSmall]: {\r\n          marginBottom: spacing.size6,\r\n        },\r\n      },\r\n    },\r\n    adunitTypeDisplayAdPreviewHeadButtons: {\r\n      textAlign: 'right',\r\n      [ResponsiveSmall]: {\r\n        textAlign: 'left',\r\n      },\r\n      marginBottom: spacing.size18,\r\n      '.ms-Pivot--tabs': {\r\n        '.ms-Pivot-linkContent': {\r\n          padding: `0px ${spacing.size12}`,\r\n        },\r\n        '.ms-Button': {\r\n          border: `1px solid ${palette.neutralLight}`,\r\n          height: spacing.size36,\r\n        },\r\n        '.ms-Button:nth-child(2)': {\r\n          borderLeft: 'none',\r\n          borderRight: 'none',\r\n        },\r\n        '.is-selected': {\r\n          fontWeight: 600,\r\n        },\r\n      },\r\n    },\r\n    adunitTypeDisplayAdPreviewContainer: {},\r\n    adunitTypeDisplayAdPreviewLayoutWrapper: {\r\n      overflowX: 'auto',\r\n      paddingBottom: spacing.size12,\r\n      display: 'flex',\r\n      flexDirection: isDisplayAdHorizontal ? 'column' : 'row',\r\n      gap: spacing.size12,\r\n      img: {\r\n        boxShadow: boxShadow.soft,\r\n        display: 'block',\r\n        ...(isDisplayAdHorizontal ? { width: spacing.size600 } : {}),\r\n        ...(isDisplayAdSquare ? { width: spacing.size250 } : {}),\r\n        ...(isDisplayVertical ? { width: spacing.size160 } : {}),\r\n      },\r\n      ...(isDisplayAdSquare || isDisplayVertical\r\n        ? {\r\n            '> div:nth-child(1)': {\r\n              marginRight: spacing.size12,\r\n            },\r\n            '> div:nth-child(2)': {\r\n              marginRight: spacing.size12,\r\n            },\r\n          }\r\n        : {}),\r\n    },\r\n    /**\r\n     *  the last vertical ad preview has different border width, adding\r\n     *  this class to override the nested img width.\r\n     */\r\n    verticalAdPreviewBottomWrapper: {\r\n      width: `${spacing.size159} !important`,\r\n    },\r\n    displayAdPreviewExampleTitle: {\r\n      fontWeight: 600,\r\n      marginBottom: spacing.size6,\r\n    },\r\n  };\r\n};\r\n","import { defineMessages } from 'react-intl';\r\n\r\nexport const mediationPopupMessages = defineMessages({\r\n  title: {\r\n    id: 'mediationPopupMessages.title',\r\n    defaultMessage: 'Are you sure you want to opt out of mediation?',\r\n  },\r\n  description: {\r\n    id: 'mediationPopupMessages.description',\r\n    defaultMessage: 'Mediation will help boost your revenue for each ad placement.',\r\n  },\r\n  turnOff: {\r\n    id: 'mediationPopupMessages.turnOff',\r\n    defaultMessage: 'Turn off',\r\n  },\r\n});\r\n","import React from 'react';\r\nimport { InjectedIntlProps, injectIntl } from 'react-intl';\r\nimport messages from '../../../../../../../App.messages';\r\nimport { PopupCard } from '../../../../../../../components/Popup';\r\nimport { mediationPopupMessages } from './DisablingMediationPopup.messages';\r\n\r\nexport interface IOptOutMediationPopupProps extends InjectedIntlProps {\r\n  popupProps: {\r\n    isShown: boolean;\r\n    onDismiss: () => void;\r\n    onPrimaryClick: () => void;\r\n    onSecondaryClick: () => void;\r\n  };\r\n}\r\n\r\nexport const OptOutMediationPopup = injectIntl(function DisablingMediationComponent({\r\n  intl: { formatMessage },\r\n  popupProps,\r\n}: IOptOutMediationPopupProps): JSX.Element {\r\n  return (\r\n    <PopupCard\r\n      isShown={popupProps.isShown}\r\n      popUpTitle={formatMessage(mediationPopupMessages.title)}\r\n      popUpDescription={formatMessage(mediationPopupMessages.description)}\r\n      primaryButtonAriaLabel={formatMessage(mediationPopupMessages.turnOff)}\r\n      secondaryButtonAriaLabel={formatMessage(messages.cancel)}\r\n      onPopupDismiss={() => popupProps.onDismiss()}\r\n      onPrimaryButtonClick={() => popupProps.onPrimaryClick()}\r\n      onSecondaryButtonClick={() => popupProps.onSecondaryClick()}\r\n    />\r\n  );\r\n});\r\n","import { getTheme, Spinner, Toggle } from '@fluentui/react';\r\nimport React, { useState } from 'react';\r\nimport { InjectedIntlProps } from 'react-intl';\r\nimport { injectIntlAndObserver } from '../../../../../../utils';\r\nimport { getClassNames } from '../../../Create/CreateAdunit';\r\nimport messages from '../../CreateAdunit/messages';\r\nimport { getStyles } from '../../CreateAdunit/styles';\r\nimport { ITythonAdUnit } from '../../CreateAdunit/types';\r\nimport { OptOutMediationPopup } from './DisablingMediationPopup';\r\n\r\nexport interface IAdUnitMediationSelectorProps {\r\n  activeAdunit?: ITythonAdUnit;\r\n  shouldRenderComponent: boolean;\r\n  toggleIsLoading: boolean;\r\n  onAdunitMediationChange: (active: boolean) => void;\r\n}\r\n\r\nconst AdUnitMediationSelector = injectIntlAndObserver(function DisablingMediationComponent({\r\n  intl: { formatMessage },\r\n  activeAdunit,\r\n  shouldRenderComponent,\r\n  toggleIsLoading,\r\n  onAdunitMediationChange,\r\n}: IAdUnitMediationSelectorProps & InjectedIntlProps): JSX.Element | null {\r\n  const [shouldRenderMediationOptOutPopUp, setShouldRenderMediationOptOutPopUp] = useState(false);\r\n\r\n  const theme = getTheme();\r\n  const classNames = getClassNames(getStyles, { theme });\r\n\r\n  if (!shouldRenderComponent) {\r\n    return null;\r\n  }\r\n\r\n  const popupProps = {\r\n    isShown: shouldRenderMediationOptOutPopUp,\r\n    onDismiss: () => setShouldRenderMediationOptOutPopUp(false),\r\n    onPrimaryClick: () => {\r\n      onAdunitMediationChange(false);\r\n      setShouldRenderMediationOptOutPopUp(false);\r\n    },\r\n    onSecondaryClick: () => setShouldRenderMediationOptOutPopUp(false),\r\n  };\r\n\r\n  return (\r\n    <>\r\n      <OptOutMediationPopup popupProps={popupProps} />\r\n      <div className={classNames.mediationHeader}>{formatMessage(messages.mediationHeader)}</div>\r\n      <div>\r\n        <p className={classNames.mediationDescriptionWrapper}>{formatMessage(messages.mediationDescription)}</p>\r\n      </div>\r\n      <div className={classNames.mediationToggle}>\r\n        <p>{formatMessage(messages.mediationToggleLabel)}</p>\r\n        {toggleIsLoading ? (\r\n          <Spinner />\r\n        ) : (\r\n          <Toggle\r\n            ariaLabel={formatMessage(messages.mediationToggleLabel)}\r\n            checked={activeAdunit?.mediationEnabled === true}\r\n            title=\"mediationToggle\"\r\n            onChange={(_, state) => {\r\n              if (!state) {\r\n                setShouldRenderMediationOptOutPopUp(true);\r\n              } else {\r\n                onAdunitMediationChange(state);\r\n              }\r\n            }}\r\n          />\r\n        )}\r\n      </div>\r\n    </>\r\n  );\r\n});\r\n\r\nexport default AdUnitMediationSelector;\r\n","import { TextField } from '@fluentui/react';\r\nimport React from 'react';\r\nimport { InjectedIntlProps } from 'react-intl';\r\nimport { FormItem } from '../../../../../../components/Form';\r\nimport { useWindowSize } from '../../../../../../hooks';\r\nimport { getStore } from '../../../../../../hooks/useWindowSize/store/store';\r\nimport { injectIntlAndObserver } from '../../../../../../utils';\r\nimport messages from '../../CreateAdunit/messages';\r\n\r\nexport interface IAdUnitNameInputFieldProps {\r\n  errorMsg?: string;\r\n  value?: string;\r\n  onChange: (_, value: string) => void;\r\n  disabled: boolean;\r\n  shouldRenderComponent: boolean;\r\n}\r\n\r\nconst { windowStoreSerializer } = useWindowSize();\r\n\r\nconst AdUnitNameInputField = injectIntlAndObserver<InjectedIntlProps & IAdUnitNameInputFieldProps>(\r\n  ({ intl: { formatMessage }, errorMsg, value, onChange, disabled, shouldRenderComponent }) => {\r\n    const { isWindowSmallSize } = windowStoreSerializer(getStore());\r\n\r\n    if (!shouldRenderComponent) {\r\n      return null;\r\n    }\r\n    return (\r\n      <FormItem formWidth={isWindowSmallSize ? 324 : 440}>\r\n        <TextField\r\n          label={formatMessage(messages.adunitNameLabel)}\r\n          required={true}\r\n          errorMessage={errorMsg}\r\n          value={value}\r\n          onChange={onChange}\r\n          disabled={disabled}\r\n          data-test-id=\"adunit-name-input\"\r\n        />\r\n      </FormItem>\r\n    );\r\n  }\r\n);\r\n\r\nexport default AdUnitNameInputField;\r\n","export interface IStepperProps {\r\n  labelArray: string[];\r\n  currentStep: number;\r\n  direction?: StepperDirection,\r\n  styleProps?: string;\r\n  goToStep?: (step: number) => void;\r\n  updateStep?: (step: number) => void;\r\n  isStepMarked?: (step: number) => boolean;\r\n}\r\n\r\nexport interface IStepperStyleProps {\r\n  direction?: StepperDirection;\r\n}\r\n\r\nexport interface IStepperStyles {\r\n  stepWrapper?: string;\r\n}\r\n\r\nexport enum StepperDirection {\r\n  Vertical,\r\n  Horizontal\r\n}\r\n","import { FontWeights, getTheme, mergeStyleSets } from '@fluentui/react';\r\nimport { IPubcenterTheme } from '../../../theme';\r\nimport { IStepClassNames, IStepStyleProps } from './Step.types';\r\nimport { StepperDirection } from './Stepper.types';\r\n\r\nexport const  getStyles = (props: IStepStyleProps): IStepClassNames => {\r\n  const theme = (props.theme as unknown) as IPubcenterTheme;\r\n  const { fonts, spacing, palette } = theme;\r\n  const weight = FontWeights;\r\n\r\n  const circleAbstract = {\r\n    marginTop: spacing.size6,\r\n    width: spacing.size18,\r\n    height: spacing.size18,\r\n    borderRadius: '50%',\r\n    lineHeight: spacing.size18,\r\n    position: 'relative',\r\n    textAlign: 'center',\r\n    borderWidth: spacing.size2,\r\n    borderStyle: 'solid',\r\n  }\r\n\r\n  const verticalStepStyles = {\r\n    stepBlock: {\r\n      display: 'flex',\r\n      flexDirection: 'column',\r\n      border: 0,\r\n      padding: 0,\r\n      background: 'transparent'\r\n    },\r\n    stepTitle: {\r\n      fontSize: fonts.size10,\r\n      cursor: 'pointer'\r\n    },\r\n    stepTitleSelected: {\r\n      fontWeight: weight.semibold,\r\n    },\r\n    circleWrapper: {\r\n      position: 'relative',\r\n      display: 'flex',\r\n      flexDirection: 'row',\r\n      alignItems: 'baseline',\r\n      gap: spacing.size10,\r\n    },\r\n    circleLabel: {\r\n      display: 'flex',\r\n      flexDirection: 'column',\r\n      gap: 5\r\n    },\r\n    circle: {\r\n      ...circleAbstract,\r\n      color: 'transparent',\r\n      backgroundColor: 'transparent',\r\n      borderColor: palette.neutralLight,\r\n    },\r\n    circleSelected: {\r\n      ...circleAbstract,\r\n      color: palette.themeLight,\r\n      backgroundColor: palette.themeLight,\r\n      borderColor: palette.themeLight,\r\n    },\r\n    circleMarked: {\r\n      ...circleAbstract,\r\n      color: palette.white,\r\n      backgroundColor: palette.themePrimary,\r\n      borderColor: palette.themePrimary,\r\n    },\r\n    barStyle: {\r\n      width: spacing.size2,\r\n      height: '25px',\r\n      margin: `${spacing.size8} auto`,\r\n      backgroundColor: palette.neutralQuaternaryAlt,\r\n    },\r\n  }\r\n\r\n  const horizontalStepStyles = {\r\n    stepBlock: {\r\n      marginTop: spacing.size24,\r\n      border: 0,\r\n      padding: 0,\r\n      background: 'transparent'\r\n    },\r\n    stepTitle: {\r\n      fontSize: fonts.size10,\r\n      marginTop: spacing.size12,\r\n      textAlign: 'center'\r\n    },\r\n    stepTitleSelected: {\r\n      fontWeight: weight.semibold,\r\n    },\r\n    circleWrapper: {\r\n      padding: '0px 115px',\r\n      position: 'relative',\r\n    },\r\n    circleLabel: {},\r\n    circle: {\r\n      ...circleAbstract,\r\n      color: palette.white,\r\n      backgroundColor: palette.white,\r\n      borderColor: palette.neutralLight,\r\n    },\r\n    circleSelected: {\r\n      ...circleAbstract,\r\n      color: palette.themeLight,\r\n      backgroundColor: palette.themeLight,\r\n      borderColor: palette.themeLight,\r\n    },\r\n    circleMarked: {\r\n      ...circleAbstract,\r\n      color: palette.white,\r\n      backgroundColor: palette.themePrimary,\r\n      borderColor: palette.themePrimary,\r\n      fontSize: fonts.size10,\r\n    },\r\n    barStyle: {\r\n      content: '',\r\n      width: '80%',\r\n      height: '2px',\r\n      position: 'absolute',\r\n      backgroundColor: palette.neutralQuaternaryAlt,\r\n      margin: 'auto',\r\n      top: 0,\r\n      bottom: 0,\r\n      left: '150px',\r\n    },\r\n  };\r\n\r\n  return mergeStyleSets(props.direction === StepperDirection.Horizontal ? horizontalStepStyles: verticalStepStyles );\r\n};\r\n\r\nexport function getClassNames<PropType>(props?: PropType): IStepClassNames {\r\n  return getStyles({ direction: StepperDirection.Horizontal, theme: getTheme(), ...props });\r\n}","import { Icon, mergeStyleSets } from '@fluentui/react';\r\nimport React from 'react';\r\nimport { injectIntl } from 'react-intl';\r\nimport { getClassNames } from './Step.style';\r\nimport { IStepProps } from './Step.types';\r\nimport { StepperDirection } from './Stepper.types';\r\n\r\nexport const Step = injectIntl<IStepProps>(function StepComponent({\r\n  label,\r\n  styleProps,\r\n  index,\r\n  totalSteps,\r\n  updateStep,\r\n  goToStep,\r\n  isSelected,\r\n  isMarked,\r\n  isLastChild,\r\n  direction,\r\n}) {\r\n  const {\r\n    stepBlock,\r\n    circleWrapper,\r\n    barStyle,\r\n    circle,\r\n    circleSelected,\r\n    circleMarked,\r\n    circleLabel,\r\n    stepTitle,\r\n    stepTitleSelected,\r\n  } = mergeStyleSets(getClassNames({ direction }), styleProps);\r\n\r\n  const updateStepClick = (e) => {\r\n    updateStep?.(e);\r\n    goToStep?.(index);\r\n  };\r\n\r\n  const getAriaLabel = () => {\r\n    return `${label} - step ${index + 1} of ${totalSteps}, ${isMarked ? 'completed' : 'uncompleted'}`;\r\n  };\r\n\r\n  return (\r\n    <button className={stepBlock} role=\"presentation\" onClick={updateStepClick} aria-label={getAriaLabel()}>\r\n      <div className={circleWrapper}>\r\n        <div className={direction === StepperDirection.Vertical ? circleLabel : ''}>\r\n          <Icon className={isSelected ? circleSelected : isMarked ? circleMarked : circle} iconName=\"CheckMark\" />\r\n          <div className={isLastChild ? '' : barStyle} />\r\n        </div>\r\n        {direction === StepperDirection.Vertical && <div className={`${stepTitle} ${isSelected && stepTitleSelected}`}>{label}</div>}\r\n      </div>\r\n      {direction === StepperDirection.Horizontal && <div className={`${stepTitle} ${isSelected && stepTitleSelected}`}>{label}</div>}\r\n    </button>\r\n  );\r\n});\r\n","import { getTheme, mergeStyleSets } from '@fluentui/react';\r\nimport { IPubcenterSpacing, IPubcenterTheme } from '../../../theme';\r\nimport { flexWithCenter } from '../../utils/GlobalStyleUtils';\r\nimport { IStepperStyleProps, IStepperStyles, StepperDirection } from './Stepper.types';\r\n\r\nexport const getStyles = (props: IStepperStyleProps): IStepperStyles => {\r\n  const theme = (getTheme() as unknown) as IPubcenterTheme;\r\n  const spacing = theme.spacing as IPubcenterSpacing;\r\n\r\n  const verticalStepStyles = {\r\n    stepWrapper: {\r\n      display: 'flex',\r\n      flexDirection: 'column'\r\n    },\r\n  }\r\n\r\n  const horizontalStepStyles = {\r\n    stepWrapper: {\r\n      ...flexWithCenter,\r\n      marginBottom: spacing.size20,\r\n      marginLeft: spacing.size12,\r\n    },\r\n  }\r\n\r\n  return mergeStyleSets(props.direction === StepperDirection.Horizontal ? horizontalStepStyles : verticalStepStyles);\r\n};\r\n\r\nexport function getClassNames<PropType>(props?: PropType) {\r\n  return getStyles({ direction: StepperDirection.Horizontal, ...props });\r\n}\r\n","import { mergeStyleSets } from '@fluentui/react';\r\nimport React from 'react';\r\nimport { injectIntl } from 'react-intl';\r\nimport { Step } from './Step';\r\nimport { getClassNames } from './Stepper.style';\r\nimport { IStepperProps, StepperDirection } from './Stepper.types';\r\n\r\nexport const Stepper = injectIntl<IStepperProps>(function StepperComponent({\r\n  direction = StepperDirection.Horizontal,\r\n  labelArray,\r\n  currentStep,\r\n  styleProps,\r\n  goToStep,\r\n  updateStep,\r\n  isStepMarked,\r\n}) {\r\n  const { stepWrapper } = mergeStyleSets(getClassNames({ direction }), styleProps);\r\n\r\n  return (\r\n    <div className={stepWrapper} role=\"navigation\" aria-label=\"Stepper\">\r\n      {labelArray.map((item, index) => (\r\n        <Step\r\n          key={index}\r\n          label={item}\r\n          direction={direction}\r\n          goToStep={goToStep}\r\n          updateStep={updateStep}\r\n          index={index}\r\n          isSelected={currentStep === index + 1}\r\n          totalSteps={labelArray.length}\r\n          isMarked={isStepMarked ? isStepMarked?.(index) : currentStep >= index + 1}\r\n          isLastChild={index === labelArray.length - 1}\r\n        />\r\n      ))}\r\n    </div>\r\n  );\r\n});\r\n","import { defineMessages } from 'react-intl';\r\n\r\nexport default defineMessages({\r\n  backButtonAriaDesc: {\r\n    id: 'detailPageWithStepper.backButtonAriaDesc',\r\n    defaultMessage: 'Click to go back to manage page'\r\n  },\r\n  breadcrumbAriaLabel: {\r\n    id: 'detailPageWithStepper.breadcrumbAriaLabel',\r\n    defaultMessage: 'Bread crumb showing the heirarchy of subpages'\r\n  },\r\n  stepperGoToFutureStepError: {\r\n    id: 'detailPageWithStepper.stepperGoToFutureStepError',\r\n    defaultMessage: 'Can not move directly to this step'\r\n  }\r\n});","import { getTheme, mergeStyleSets } from '@fluentui/react';\r\nimport { BreakPoints, IPubcenterTheme } from '../../../theme';\r\nimport { StepperDirection } from '../../components/Stepper/Stepper.types';\r\nimport { IDetailPageWithStepperStyleProps, IDetailPageWithStepperStyles } from './DetailPageWithStepper.types';\r\n\r\nconst STEPPER_CONTAINER_WIDTH = 270;\r\n\r\nexport const getStyles = (props: IDetailPageWithStepperStyleProps): IDetailPageWithStepperStyles => {\r\n  const theme = (props.theme as unknown) as IPubcenterTheme;\r\n  const { fonts, spacing, palette } = theme;\r\n  const direction = props.direction;\r\n  const { ResponsiveSmall, ResponsiveMedium } = BreakPoints;\r\n\r\n  return mergeStyleSets({\r\n    root: {\r\n      display: 'flex',\r\n      flexDirection: 'column',\r\n      overflowY: 'auto',\r\n      flex: '1',\r\n    },\r\n    navBackButton: [\r\n      'ms-navBackButton',\r\n      {\r\n        display: 'flex',\r\n        backgroundColor: palette.neutralLighter,\r\n        height: spacing.size44,\r\n        alignItems: 'center',\r\n      },\r\n    ],\r\n    mainContainer: {\r\n      display: 'flex',\r\n      flex: '1',\r\n      flexDirection: direction === StepperDirection.Horizontal ? 'column' : 'row',\r\n      alignItems: direction === StepperDirection.Horizontal ? 'center' : 'stretch',\r\n      [ResponsiveMedium]: {\r\n        display: 'block',\r\n      },\r\n      [ResponsiveSmall]: {\r\n        display: 'block',\r\n      },\r\n    },\r\n    leftPane: {\r\n      display: 'flex',\r\n      font: fonts.size14,\r\n      textAlign: 'center',\r\n      backgroundColor: palette.neutralLighterAlt,\r\n      padding: `${spacing.size32} ${spacing.size48} ${spacing.size32} ${spacing.size24}`,\r\n      minWidth: 'max-content',\r\n      maxWidth: STEPPER_CONTAINER_WIDTH,\r\n      [ResponsiveMedium]: {\r\n        backgroundColor: 'transparent',\r\n      },\r\n      [ResponsiveSmall]: {\r\n        backgroundColor: 'transparent',\r\n      },\r\n    },\r\n    rightPane: {\r\n      flexGrow: '1',\r\n    },\r\n    scrollablePanel: {\r\n      display: 'flex',\r\n      flexDirection: 'column',\r\n      overflowY: 'auto',\r\n      height: '90%',\r\n      maxHeight: '75vh',\r\n      width: '100%',\r\n      marginBottom: spacing.size12,\r\n      [ResponsiveMedium]: {\r\n        maxHeight: 'none',\r\n      },\r\n      [ResponsiveSmall]: {\r\n        maxHeight: 'none',\r\n      },\r\n    },\r\n    content: {\r\n      marginLeft: spacing.size48,\r\n      position: 'relative',\r\n      height: 'inherit',\r\n      marginRight: '3rem',\r\n    },\r\n    buttons: {\r\n      borderTop: `1px solid ${palette.neutralLight}`,\r\n      position: 'static',\r\n      bottom: '0',\r\n      display: 'flex',\r\n      padding: `${spacing.size16} 0 ${spacing.size16} ${spacing.size48}`,\r\n      selectors: {\r\n        '.ms-Button': {\r\n          marginRight: spacing.size8,\r\n        },\r\n      },\r\n    },\r\n    subComponentStyles: {\r\n      formTitle: {\r\n        root: {\r\n          marginLeft: spacing.size48,\r\n          marginTop: spacing.size32,\r\n          marginBottom: spacing.size24,\r\n        },\r\n      },\r\n      breadcrumb: {\r\n        root: {\r\n          margin: 0,\r\n          alignItems: 'center',\r\n        },\r\n        item: {\r\n          lineHeight: '22px',\r\n          fontSize: fonts.mediumPlus?.fontSize,\r\n          color: theme.palette.neutralPrimary,\r\n        },\r\n        chevron: {\r\n          lineHeight: '22px',\r\n          color: palette.neutralPrimary,\r\n        },\r\n      },\r\n    },\r\n  });\r\n};\r\n\r\nexport function getClassNames<PropType>(props?: PropType): IDetailPageWithStepperStyles {\r\n  return getStyles({ theme: getTheme(), ...props });\r\n}\r\n","import { defineMessages } from 'react-intl';\r\n\r\nexport const leavePagePopupMessages = defineMessages({\r\n  title: {\r\n    id: 'leavePagePopupMessages.title',\r\n    defaultMessage: 'Are you sure to leave this page?',\r\n  },\r\n  description: {\r\n    id: 'leavePagePopupMessages.description',\r\n    defaultMessage: 'You haven’t finished the entire set up yet. Changes you made may not be saved.',\r\n  },\r\n  stayOnPage: {\r\n    id: 'leavePagePopupMessages.submit',\r\n    defaultMessage: 'Stay on page',\r\n  },\r\n  leavePage: {\r\n    id: 'leavePagePopupMessages.cancel',\r\n    defaultMessage: 'Leave page',\r\n  },\r\n});\r\n","import React from 'react';\r\nimport { InjectedIntlProps } from 'react-intl';\r\nimport { getAppStore } from '../../../@data';\r\nimport { onPopupOpenChanged } from '../../../@data/mutatorActions';\r\nimport { PopupType } from '../../../@data/store/schema/enums/PopupType';\r\nimport { PopupCard } from '../../../components/Popup';\r\nimport { injectIntlAndObserver } from '../../../utils';\r\nimport { leavePagePopupMessages } from './LeavePagePopup.messages';\r\n\r\nexport interface ILeavePagePopupProps extends InjectedIntlProps {\r\n  onSubmit?: () => void;\r\n}\r\n\r\nexport const LeavePagePopup = injectIntlAndObserver(function LeavePagePopupComponent({\r\n  onSubmit,\r\n  intl: { formatMessage },\r\n}: ILeavePagePopupProps): JSX.Element {\r\n  const { openedPopup } = getAppStore();\r\n\r\n  return (\r\n    <PopupCard\r\n      isShown={PopupType.Leaving === openedPopup}\r\n      popUpTitle={formatMessage(leavePagePopupMessages.title)}\r\n      popUpDescription={formatMessage(leavePagePopupMessages.description)}\r\n      primaryButtonAriaLabel={formatMessage(leavePagePopupMessages.stayOnPage)}\r\n      secondaryButtonAriaLabel={formatMessage(leavePagePopupMessages.leavePage)}\r\n      onPopupDismiss={() => {\r\n        onPopupOpenChanged(PopupType.None);\r\n      }}\r\n      onPrimaryButtonClick={async () => {\r\n        onPopupOpenChanged(PopupType.None);\r\n      }}\r\n      onSecondaryButtonClick={() => {\r\n        onSubmit?.();\r\n        onPopupOpenChanged(PopupType.None);\r\n      }}\r\n    />\r\n  );\r\n});\r\n","import { IBreadcrumbItem } from '@fluentui/react';\r\nimport { useEffect, useState } from 'react';\r\nimport { onPopupOpenChanged, showInfoToastNotification } from '../../../@data/mutatorActions';\r\nimport { PopupType } from '../../../@data/store/schema/enums/PopupType';\r\nimport { FormState } from '../../../components/Form';\r\nimport { IStepperStep, StepState } from '../DetailPageWithStepper.types';\r\n\r\nexport const useStepperLogic = (\r\n  pageMode: FormState,\r\n  process: string,\r\n  steps: IStepperStep[],\r\n  startAt: number,\r\n  backToBase: () => void,\r\n  goToErrorMessage: string\r\n) => {\r\n  const [currentStep, setCurrentStep] = useState(startAt);\r\n  const [stepsState, setStepState] = useState(Array(steps.length).fill(StepState.Empty));\r\n\r\n  const updateStepState = (step: number) => {\r\n    setStepState((prevState) => {\r\n      const newState = prevState;\r\n      newState[step] = StepState.Dirty;\r\n      return newState;\r\n    });\r\n  };\r\n\r\n  const reset = () => {\r\n    setCurrentStep(0);\r\n    setStepState(Array(steps.length).fill(StepState.Empty));\r\n  };\r\n\r\n  const nextStep = () => {\r\n    const stepUpdater = () => {\r\n      if (currentStep + 1 === steps.length) {\r\n        reset();\r\n        return;\r\n      }\r\n\r\n      setCurrentStep((prevStep) => (prevStep >= steps.length - 1 ? prevStep : prevStep + 1));\r\n      updateStepState(currentStep);\r\n    };\r\n\r\n    if (steps[currentStep].onNext) {\r\n      steps[currentStep].onNext?.(stepUpdater, stepsState[currentStep]);\r\n    } else {\r\n      stepUpdater();\r\n    }\r\n  };\r\n\r\n  const previousStep = () => {\r\n    if (currentStep - 1 === -1) {\r\n      backToBase();\r\n      return;\r\n    }\r\n\r\n    setCurrentStep((prevStep) => (prevStep <= 0 ? prevStep : prevStep - 1));\r\n    updateStepState(currentStep);\r\n  };\r\n\r\n  const navigateBack = () => {\r\n    onPopupOpenChanged(PopupType.Leaving);\r\n  };\r\n\r\n  const goToStep = (step: number) => {\r\n    if (\r\n      steps[step].allowFreeNavigation === false ||\r\n      (!steps[step].allowFreeNavigation && stepsState[step] === StepState.Empty) ||\r\n      (pageMode === FormState.MultiStepCreation && stepsState[step] === StepState.Empty)\r\n    ) {\r\n      showInfoToastNotification({ text: steps[step].freeNavigationErrorMessage || goToErrorMessage });\r\n      return;\r\n    }\r\n\r\n    setCurrentStep(step);\r\n    updateStepState(step);\r\n  };\r\n\r\n  const getStepperTitle = (): string[] => steps.map((step) => step.name);\r\n\r\n  const getBreadCrumpTitle = (): IBreadcrumbItem[] => [\r\n    {\r\n      key: '1',\r\n      text: process,\r\n    },\r\n    {\r\n      key: '2',\r\n      text: steps[currentStep].name,\r\n    },\r\n  ];\r\n\r\n  useEffect(() => {\r\n    const url = new URL(window.location.href);\r\n    url.searchParams.set('step', currentStep.toString());\r\n    window.history.replaceState('', '', url.toString());\r\n    // eslint-disable-next-line react-hooks/exhaustive-deps\r\n  }, [currentStep]);\r\n\r\n  useEffect(() => {\r\n    setStepState(\r\n      Array(steps.length)\r\n        .fill(StepState.Dirty)\r\n        .map((stepState, index) => {\r\n          if (steps[index].isStepDirty === false) {\r\n            stepState = StepState.Empty;\r\n          }\r\n          return stepState;\r\n        })\r\n    );\r\n\r\n    // eslint-disable-next-line react-hooks/exhaustive-deps\r\n  }, [pageMode, steps]);\r\n\r\n  return {\r\n    currentStep,\r\n    step: steps[currentStep],\r\n    state: stepsState[currentStep],\r\n    stepsState,\r\n    goToStep,\r\n    nextStep,\r\n    previousStep,\r\n    navigateBack,\r\n    getStepperTitle: getStepperTitle(),\r\n    getBreadCrumpTitle: getBreadCrumpTitle(),\r\n  };\r\n};\r\n","import {\r\n  ActionButton,\r\n  Breadcrumb,\r\n  DefaultButton,\r\n  getId,\r\n  IBreadcrumbData,\r\n  mergeStyleSets,\r\n  Overlay,\r\n  PrimaryButton,\r\n  Spinner,\r\n} from '@fluentui/react';\r\nimport * as React from 'react';\r\nimport { useEffect } from 'react';\r\nimport { getAppStore, LayoutMode, onHelpInfoCalloutOpened, onHelpInfoChanged, onLayoutChanged } from '../../@data';\r\nimport AppMessages from '../../App.messages';\r\nimport { FormTitle } from '../../components/Form';\r\nimport { isInPageForm } from '../../components/Form/FormState/formUtils';\r\nimport { Main } from '../../components/Main/Main';\r\nimport { Stepper } from '../../components/Stepper/Stepper';\r\nimport { StepperDirection } from '../../components/Stepper/Stepper.types';\r\nimport { injectIntlAndObserver } from '../../utils';\r\nimport messages from './DetailPageWithStepper.messages';\r\nimport { getClassNames } from './DetailPageWithStepper.styles';\r\nimport { IDetailPageWithStepperProps, StepState } from './DetailPageWithStepper.types';\r\nimport { LeavePagePopup } from './LeavePagePopup';\r\nimport { useStepperLogic } from './utils/useStepperLogic';\r\n\r\n/**\r\n * DetailPageWithStepper is a layout component which is to be used when a form is displayed\r\n * with submit, cancel buttons and Stepper. And the page should have a title and a help icon.\r\n */\r\nexport const DetailPageWithStepper = injectIntlAndObserver(function DetailsPageWithStepperComponent(props: IDetailPageWithStepperProps) {\r\n  const searchParams = new URLSearchParams(props.location.search);\r\n  const showExtraBtns = searchParams.get('showExtraBtns');\r\n\r\n  const { formatMessage } = props.intl;\r\n  const { helpInfo, locale } = getAppStore();\r\n  const formTitleId = getId('formTitle');\r\n  const { process, pageMode, styles, steps, openStep, backToBase, direction = StepperDirection.Vertical } = props;\r\n  const { root, navBackButton, scrollablePanel, buttons, content, subComponentStyles, mainContainer, leftPane, rightPane } = mergeStyleSets(\r\n    getClassNames({ pageMode, direction }),\r\n    styles\r\n  );\r\n  const {\r\n    currentStep,\r\n    state,\r\n    stepsState,\r\n    goToStep,\r\n    nextStep,\r\n    previousStep,\r\n    navigateBack,\r\n    getStepperTitle,\r\n    getBreadCrumpTitle,\r\n  } = useStepperLogic(pageMode, process, steps, openStep || 0, backToBase, formatMessage(messages.stepperGoToFutureStepError));\r\n\r\n  const { saving, loading } = getAppStore();\r\n  const showOverlay = saving || loading;\r\n\r\n  const getSubmitLabel = (idx: number): string => {\r\n    const label = idx === steps.length - 1 ? AppMessages.finish : AppMessages.continue;\r\n    return props.steps[idx].nextBtnLbl || formatMessage(label);\r\n  };\r\n\r\n  const getCancelLabel = (idx: number): string => {\r\n    const label = idx === 0 ? AppMessages.cancel : AppMessages.previous;\r\n    return props.steps[idx].previousBtnLbl || formatMessage(label);\r\n  };\r\n\r\n  useEffect(() => {\r\n    if (!isInPageForm(pageMode)) {\r\n      onLayoutChanged(LayoutMode.ContentOnly);\r\n    }\r\n    // eslint-disable-next-line react-hooks/exhaustive-deps\r\n  }, []);\r\n\r\n  return (\r\n    <div className={root}>\r\n      {!isInPageForm(pageMode) && (\r\n        <div className={navBackButton}>\r\n          {showOverlay && <Overlay />}\r\n          <ActionButton\r\n            id=\"backButton\"\r\n            iconProps={{\r\n              iconName: 'Back',\r\n            }}\r\n            onClick={() => navigateBack()}\r\n            ariaDescription={formatMessage(messages.backButtonAriaDesc)}\r\n          >\r\n            {formatMessage(AppMessages.back)}\r\n          </ActionButton>\r\n          <Breadcrumb\r\n            items={getBreadCrumpTitle}\r\n            onReduceData={(data: IBreadcrumbData) => {\r\n              return undefined;\r\n            }}\r\n            ariaLabel={formatMessage(messages.breadcrumbAriaLabel)}\r\n            styles={subComponentStyles.breadcrumb}\r\n          />\r\n        </div>\r\n      )}\r\n\r\n      <div className={mainContainer}>\r\n        {steps && (\r\n          <div className={leftPane}>\r\n            <Stepper\r\n              direction={direction}\r\n              labelArray={getStepperTitle}\r\n              currentStep={currentStep! + 1}\r\n              goToStep={goToStep}\r\n              isStepMarked={(step) => stepsState[step] === StepState.Dirty}\r\n            />\r\n          </div>\r\n        )}\r\n\r\n        <div className={rightPane}>\r\n          <Main className={scrollablePanel}>\r\n            {showOverlay && <Overlay />}\r\n            {steps[currentStep].name || steps[currentStep].title ? (\r\n              <FormTitle\r\n                id={formTitleId}\r\n                title={steps[currentStep].title || steps[currentStep].name}\r\n                calloutContent={helpInfo}\r\n                iconButtonOnClick={() => onHelpInfoCalloutOpened(steps[currentStep].helpId || '', locale) || undefined}\r\n                calloutOnDismiss={() => onHelpInfoChanged()}\r\n                styles={subComponentStyles.formTitle}\r\n                intl={props.intl}\r\n                noHelpPopup={steps[currentStep].helpId !== undefined ? false : true}\r\n              />\r\n            ) : null}\r\n\r\n            <div role=\"form\" aria-labelledby={formTitleId} className={content}>\r\n              {React.cloneElement(steps[currentStep].component, { stepState: state, goToStep: goToStep, ...props })}\r\n              {showOverlay && <Overlay />}\r\n            </div>\r\n          </Main>\r\n          <div className={buttons}>\r\n            {!steps[currentStep].submitButtonDisabled && (\r\n              <PrimaryButton\r\n                id=\"primaryButton\"\r\n                text={getSubmitLabel(currentStep)}\r\n                onClick={() => {\r\n                  nextStep();\r\n                }}\r\n                disabled={saving || steps[currentStep].isNextDisabled}\r\n              />\r\n            )}\r\n\r\n            <DefaultButton\r\n              id=\"defaultButton\"\r\n              text={getCancelLabel(currentStep)}\r\n              onClick={previousStep}\r\n              disabled={saving}\r\n              ariaDescription={formatMessage(messages.backButtonAriaDesc)}\r\n            />\r\n\r\n            {showExtraBtns && steps[currentStep].extraButtons}\r\n\r\n            {saving && <Spinner label={formatMessage(AppMessages.saving)} labelPosition={'right'} />}\r\n          </div>\r\n        </div>\r\n      </div>\r\n\r\n      <LeavePagePopup onSubmit={() => props.backToBase()} />\r\n    </div>\r\n  );\r\n});\r\n","import { Property, showErrorToastNotification } from '../../../../../../../@data';\r\nimport { validateSchema } from '../../../../../../../utils';\r\nimport PropertyMessages from '../../../../Property.messages';\r\nimport { onPropertyErrorChanged } from '../../../__data__/mutatorActions';\r\nimport { IPropertyViewModel, tythonPropertyErrorModel } from '../../../__data__/store/schema';\r\nimport { getCreatePropertyStore } from '../../../__data__/store/store';\r\n\r\nexport const isFormValid = async (\r\n  properties: Property[],\r\n  isEditMode: boolean,\r\n  active: IPropertyViewModel = getCreatePropertyStore().active\r\n): Promise<boolean> => {\r\n  try {\r\n    await validateSchema(tythonPropertyErrorModel(active, isEditMode, properties), active);\r\n    onPropertyErrorChanged();\r\n    return true;\r\n  } catch (e) {\r\n    onPropertyErrorChanged(e);\r\n    showErrorToastNotification({\r\n      textMessageDescriptor: PropertyMessages.propertyFormError,\r\n      intlMessageValues: { errorCount: Object.keys(e).length },\r\n    });\r\n    return false;\r\n  }\r\n};\r\n","import { action, orchestrator } from 'satcheljs';\r\n\r\nimport { Log } from '../../../../../../../../../logging/src';\r\nimport {\r\n  ApiError,\r\n  ClarityType,\r\n  NotificationLabel,\r\n  NotificationSeverity,\r\n  Property,\r\n  PropertyApprovalStatus,\r\n  getAppStore,\r\n  listEntity,\r\n  onNavigateBack,\r\n  onNotificationCardAdded,\r\n  onSavingChanged,\r\n  postEntity,\r\n  putEntity,\r\n  showErrorToastNotification,\r\n  showSuccessToastNotification,\r\n} from '../../../../../../../../@data';\r\nimport notificationMessages from '../../../../../../../../NotificationsPanel.Types.messages';\r\nimport { FormState } from '../../../../../../../../components/Form';\r\nimport { StepState } from '../../../../../../../../layout/DetailPageWithStepper/DetailPageWithStepper.types';\r\nimport { RouteName } from '../../../../../../@data';\r\nimport { createReturnUrl } from '../../../../../../@data/services/AdManagementService';\r\nimport { getGridPropertyStore } from '../../../../../Manage/__data__/store/store';\r\nimport PropertyMessages from '../../../../../Property.messages';\r\nimport { onIdChanged, onSettingClarityErrorMessage } from '../../../../__data__/mutatorActions';\r\nimport { getCreatePropertyStore } from '../../../../__data__/store/store';\r\nimport { isFormValid } from '../../utils/validateForm';\r\n\r\nexport const onFormSubmitted = action(\r\n  'onFormSubmitted',\r\n  (mode: FormState, routeHistory?, onSubmit?: () => void, stepState?: StepState) => ({\r\n    mode,\r\n    routeHistory,\r\n    onSubmit,\r\n    stepState,\r\n  })\r\n);\r\n\r\n/**\r\n * 1) Set Loading to true\r\n * 2) Submit API call to Submit Data to Store\r\n * 3) Check errors, if any, send action to notification that error exists\r\n * 4) Clear the form\r\n * 5) Navigate back to property list\r\n */\r\norchestrator(onFormSubmitted, async (msg) => {\r\n  const { publisher, userContext } = getAppStore();\r\n  const { active, raw } = getCreatePropertyStore();\r\n\r\n  if (publisher && raw) {\r\n    const body: Property = {\r\n      ...raw,\r\n      id: active.id,\r\n      name: active.name,\r\n      approvalStatus: PropertyApprovalStatus.Approved,\r\n      approvalStatusComments: '',\r\n      associatedAdUnitIds: [],\r\n    };\r\n\r\n    onSavingChanged(true);\r\n\r\n    const properties = getGridPropertyStore().data || (await listEntity([publisher], userContext, Property));\r\n    const isEditOperation =\r\n      msg.mode === FormState.MultiStepEdit || (msg.mode === FormState.MultiStepCreation && msg.stepState === StepState.Dirty);\r\n\r\n    const isValid = await isFormValid(properties, isEditOperation, active);\r\n    if (!isValid) {\r\n      onSavingChanged(false);\r\n      return;\r\n    }\r\n\r\n    if (publisher.id) {\r\n      body.publisherId = publisher.id;\r\n    }\r\n\r\n    if (active.url) {\r\n      body.url = active.url;\r\n    }\r\n\r\n    if (active.clarity) {\r\n      if (active.clarity.clarityType !== ClarityType.None) {\r\n        body.clarityType = active.clarity.clarityType;\r\n      } else {\r\n        body.clarityProjectIdForTython = active.clarity.clarityId;\r\n      }\r\n    }\r\n\r\n    try {\r\n      let property: Property | undefined;\r\n\r\n      if (isEditOperation) {\r\n        property = await putEntity([publisher], body, userContext, Property);\r\n        showSuccessToastNotification({\r\n          textMessageDescriptor: PropertyMessages.propertyEditSuccess,\r\n          intlMessageValues: { entityId: property.id },\r\n        });\r\n      } else {\r\n        property = await postEntity([publisher], Property, body, userContext);\r\n        if (property && property.id) {\r\n          onIdChanged(property.id);\r\n        }\r\n        showSuccessToastNotification({\r\n          textMessageDescriptor: PropertyMessages.propertyCreateSuccess,\r\n          intlMessageValues: { entityId: property.id },\r\n        });\r\n        if (active.clarity?.clarityType === ClarityType.None) {\r\n          showSuccessToastNotification({\r\n            textMessageDescriptor: PropertyMessages.clarityRequestSuccess,\r\n          });\r\n        }\r\n      }\r\n\r\n      if (msg.mode !== FormState.InPageCreate) {\r\n        // return to manage page\r\n        const returnUrl = createReturnUrl(RouteName.property, String(publisher.id), undefined, String(property.id), msg.mode);\r\n        onNavigateBack(msg.routeHistory, returnUrl);\r\n      }\r\n\r\n      msg.onSubmit?.();\r\n    } catch (e) {\r\n      const getClarityErrorMessage = (e: ApiError) => {\r\n        if (e.code === 404) {\r\n          return 'Clarity project ID does not exist';\r\n        } else {\r\n          return e.message.split(`description\":\"`)[1].split(`\"`)[0];\r\n        }\r\n      };\r\n\r\n      Log.error(e);\r\n      const apiErrorObj = e as ApiError;\r\n      if (apiErrorObj.code === 404) {\r\n        onSettingClarityErrorMessage(getClarityErrorMessage(apiErrorObj));\r\n      } else if (apiErrorObj.code === 500) {\r\n        showErrorToastNotification({ textMessageDescriptor: notificationMessages.PropertyEditFailedNotificationContent });\r\n      } else {\r\n        onSettingClarityErrorMessage(getClarityErrorMessage(apiErrorObj));\r\n      }\r\n\r\n      onNotificationCardAdded({\r\n        // tslint:disable-next-line: no-any\r\n        severity: NotificationSeverity.Error,\r\n        titleMessageDescriptor: notificationMessages.PropertyEditFailedNotificationTitle,\r\n        contentMessageDescriptor: notificationMessages.PropertyEditFailedNotificationContent,\r\n        notificationLabel: NotificationLabel.PropertyEditFailedNotification,\r\n      });\r\n    } finally {\r\n      onSavingChanged(false);\r\n    }\r\n  } else {\r\n    showErrorToastNotification({\r\n      textMessageDescriptor: PropertyMessages.invalidForm,\r\n      intlMessageValues: { formOperation: FormState[msg.mode], entityId: active.id },\r\n    });\r\n  }\r\n});\r\n","import { defineMessages } from 'react-intl';\r\n\r\nexport default defineMessages({\r\n  adsText: {\r\n    id: 'adsText.adsTxt',\r\n    defaultMessage: `Ads.txt`,\r\n  },\r\n  adsTextExplanation: {\r\n    id: 'adsText.explanation',\r\n    defaultMessage: `As a {appName} publisher, you’re required to declare that {appName} is an authorized seller for your advertising inventory by including your publisher ID in your ads.txt file. Please note that each site you register with {appName} must have an ads.txt file that adheres to these guidelines.`,\r\n  },\r\n  adsTextObligation: {\r\n    id: 'adsText.AdsTextObligation',\r\n    defaultMessage:\r\n      'As a {appName} publisher, you’re required to declare that {appName} is an authorized seller by including your publisher ID in your ads.txt file. Each site you register with your {appName} account must have an ads.txt file added to the root directory. The root directory refers to the folder or directory immediately following the top-level domain of your website (e.g., contoso.com/ads.txt).',\r\n  },\r\n  createAdsTxtStepTitle: {\r\n    id: 'adsText.createAdsTxtStepTitle',\r\n    defaultMessage: 'Create an ads.txt file',\r\n  },\r\n  addpubCenterToFileStepTitle: {\r\n    id: 'adsText.addpubCenterToFileStepTitle',\r\n    defaultMessage: 'Add {appName} to an existing ads.txt file',\r\n  },\r\n  copyCodeButton: {\r\n    id: 'adsText.copyCodeButton',\r\n    defaultMessage: 'Copy',\r\n  },\r\n  stepOne: {\r\n    id: 'adsText.stepOne',\r\n    defaultMessage: `Step 1`,\r\n  },\r\n  stepTwo: {\r\n    id: 'adsText.stepTwo',\r\n    defaultMessage: 'Step 2',\r\n  },\r\n  stepThree: {\r\n    id: 'adsText.stepThree',\r\n    defaultMessage: 'Step 3',\r\n  },\r\n  downloadFilePrefix: {\r\n    id: 'adsText.downloadFilePrefix',\r\n    defaultMessage: 'Download an ',\r\n  },\r\n  downloadFile: {\r\n    id: 'adsText.downloadFile',\r\n    defaultMessage: 'ads.txt file.',\r\n  },\r\n  addingFileToRootDirectoryStep: {\r\n    id: 'adsText.addingFileToRootDirectory',\r\n    defaultMessage:\r\n      'Upload your ads.txt file to the root directory of your site. The root directory refers to the folder or directory immediately following the top level domain of your website (e.g. contoso.com/ads.txt).',\r\n  },\r\n  verifyingFileStep: {\r\n    id: 'adsText.verifyingFileStep',\r\n    defaultMessage:\r\n      'Check if the content of the file is displayed when you access the ads.txt URL (https://example.com/ads.txt) using a web browser. If you can view the file content in the browser, it’s likely that {appName} will be able to locate it successfully.',\r\n  },\r\n  addpubCenterToFileStep: {\r\n    id: 'adsText.addpubCenterToFileStep',\r\n    defaultMessage: 'Find your existing ads.txt and copy paste the following records',\r\n  },\r\n});\r\n","import { FontWeights, IStyle, IStyleFunctionOrObject, ITheme, classNamesFunction, getTheme } from '@fluentui/react';\r\nimport { BreakPoints, IPubcenterPalette, IPubcenterSpacing } from '../../../../../../../../../theme';\r\nimport { IFormSectionStyleProps, IFormSectionStyles } from '../../../../../../../../components/Form';\r\nimport { flexWithAlignCenter, flexWithJustifyBetween } from '../../../../../../../../utils/GlobalStyleUtils';\r\n\r\nexport interface IAdsTextStyleProps {\r\n  theme: ITheme;\r\n}\r\nexport interface IAdsTextStyles {\r\n  container: IStyle;\r\n  scriptBox: IStyle;\r\n  scriptHolder: IStyle;\r\n  stepHeader: IStyle;\r\n  subComponentStyles: {\r\n    formSection?: IStyleFunctionOrObject<IFormSectionStyleProps, IFormSectionStyles>;\r\n  };\r\n  fileUploadContainerStyle: IStyle;\r\n  fileUploadedStyle: IStyle;\r\n  actionContainerStyle: IStyle;\r\n  fileUploadLabelStyle: IStyle;\r\n  poolImage: IStyle;\r\n}\r\n\r\nexport const getStyles = (props: IAdsTextStyleProps): IAdsTextStyles => {\r\n  const theme = getTheme();\r\n  const spacing = theme.spacing as IPubcenterSpacing;\r\n  const palette = theme.palette as IPubcenterPalette;\r\n  const { ResponsiveMedium } = BreakPoints;\r\n\r\n  return {\r\n    container: {\r\n      display: 'flex',\r\n      alignItems: 'flex-start',\r\n      '& > :first-child': {\r\n        flex: '3 1 75%',\r\n      },\r\n    },\r\n    poolImage: {\r\n      [ResponsiveMedium]: {\r\n        display: 'none',\r\n      },\r\n    },\r\n    subComponentStyles: {\r\n      formSection: {\r\n        root: {\r\n          width: 'inherit',\r\n          borderTop: 'none',\r\n          borderBottom: 'none',\r\n        },\r\n      },\r\n    },\r\n    scriptBox: {\r\n      borderColor: palette.neutralLight,\r\n      borderStyle: 'solid',\r\n      borderWidth: '1px',\r\n      padding: spacing.size12,\r\n      marginBottom: spacing.size16,\r\n    },\r\n    scriptHolder: {\r\n      display: 'block',\r\n      whiteSpace: 'pre-wrap',\r\n      wordBreak: 'break-all',\r\n      backgroundColor: palette.neutralLighter,\r\n      minHeight: spacing.size16,\r\n      maxHeight: spacing.size128,\r\n      padding: spacing.size12,\r\n      marginBottom: spacing.size12,\r\n      overflow: 'auto',\r\n      color: palette.black,\r\n      lineHeight: spacing.size16,\r\n      fontSize: theme.fonts.small.fontSize,\r\n    },\r\n    stepHeader: {\r\n      fontWeight: FontWeights.semibold,\r\n      display: 'inline-block',\r\n      margin: `${spacing.size10} 0px`,\r\n    },\r\n    fileUploadContainerStyle: {\r\n      ...flexWithAlignCenter,\r\n      justifyContent: 'center',\r\n      flexDirection: 'column',\r\n      background: palette.neutralLighterAlt,\r\n      border: `1px dashed ${palette.neutralQuaternaryAlt}`,\r\n      padding: spacing.size24,\r\n      marginBottom: spacing.size2,\r\n      borderRadius: spacing.size4,\r\n    },\r\n    fileUploadedStyle: {\r\n      ...flexWithJustifyBetween,\r\n      width: '100%',\r\n      '& > :first-child': {\r\n        ...flexWithAlignCenter,\r\n        gap: spacing.size8,\r\n      },\r\n    },\r\n    actionContainerStyle: {\r\n      display: 'flex',\r\n      gap: spacing.size12,\r\n    },\r\n    fileUploadLabelStyle: {\r\n      color: palette.highContrastPrimary,\r\n      cursor: 'pointer',\r\n    },\r\n  };\r\n};\r\n\r\nexport const getClassNames = classNamesFunction<IAdsTextStyleProps, IAdsTextStyles>();\r\n","import { DefaultButton, Image, Link, getTheme } from '@fluentui/react';\r\nimport React, { useState } from 'react';\r\nimport { InjectedIntlProps } from 'react-intl';\r\nimport { getAppStore } from '../../../../../../../../@data';\r\nimport AppMessages from '../../../../../../../../App.messages';\r\nimport { FormSection } from '../../../../../../../../components/Form';\r\nimport { APP_NAME_NEW, COPY_BUTTON_TIMEOUT } from '../../../../../../../../constants/AppConstants';\r\nimport { injectIntlWithObserver } from '../../../../../../../../utils';\r\nimport fileIcon from '../../resources/fileIcon.svg';\r\nimport fishpool from '../../resources/fishpool.svg';\r\nimport messages from './messages';\r\nimport { getClassNames, getStyles } from './styles';\r\n\r\nexport interface IAdsTextPageProps extends InjectedIntlProps {}\r\n\r\nexport const AdsTextPage = injectIntlWithObserver(function AdsTextPageComponent(props: IAdsTextPageProps) {\r\n  const { formatMessage } = props.intl;\r\n  const { publisher } = getAppStore();\r\n  const {\r\n    container,\r\n    scriptBox,\r\n    scriptHolder,\r\n    stepHeader,\r\n    subComponentStyles,\r\n    fileUploadContainerStyle,\r\n    fileUploadedStyle,\r\n    actionContainerStyle,\r\n    fileUploadLabelStyle,\r\n    poolImage,\r\n  } = getClassNames(getStyles, { theme: getTheme() });\r\n  const [copyScriptIcon, onCopyScriptIconChanged] = useState('Copy');\r\n\r\n  const content = `appnexus.com, 14163, RESELLER \\nmonetizenow.microsoft.com, ${publisher?.id}, DIRECT`;\r\n  const file = new Blob([content], { type: 'text/plain' });\r\n\r\n  const onCopyScriptClicked = (text: string) => {\r\n    navigator.clipboard.writeText(text);\r\n    // This change of icon will indicate the user that script copy was successful\r\n    onCopyScriptIconChanged('Accept');\r\n    // After 3000ms we change the icon back to 'Copy'\r\n    setTimeout(() => onCopyScriptIconChanged('Copy'), COPY_BUTTON_TIMEOUT);\r\n  };\r\n\r\n  return (\r\n    <div className={container}>\r\n      <div>\r\n        <p>{formatMessage(messages.adsTextExplanation, { appName: APP_NAME_NEW })}</p>\r\n        <FormSection styles={subComponentStyles.formSection} title={formatMessage(messages.createAdsTxtStepTitle)}>\r\n          <label className={stepHeader}>{formatMessage(messages.stepOne)}</label>\r\n          <div className={fileUploadContainerStyle}>\r\n            <div className={fileUploadedStyle}>\r\n              <div>\r\n                <Image src={fileIcon} alt={formatMessage(messages.adsText)} />\r\n                {formatMessage(messages.adsText)}\r\n              </div>\r\n              <div className={actionContainerStyle}>\r\n                <label className={fileUploadLabelStyle} tabIndex={0}>\r\n                  <Link href={URL?.createObjectURL?.(file)} download=\"ads.txt\">\r\n                    {formatMessage(AppMessages.download)}\r\n                  </Link>\r\n                </label>\r\n              </div>\r\n            </div>\r\n          </div>\r\n          <label className={stepHeader}>{formatMessage(messages.stepTwo)}</label>\r\n          <p>{formatMessage(messages.addingFileToRootDirectoryStep)}</p>\r\n          <label className={stepHeader}>{formatMessage(messages.stepThree)}</label>\r\n          <p>{formatMessage(messages.verifyingFileStep, { appName: APP_NAME_NEW })}</p>\r\n        </FormSection>\r\n        <FormSection\r\n          styles={subComponentStyles.formSection}\r\n          title={formatMessage(messages.addpubCenterToFileStepTitle, { appName: APP_NAME_NEW })}\r\n        >\r\n          <label className={stepHeader}>{formatMessage(messages.stepOne)}</label>\r\n          <p>{formatMessage(messages.addpubCenterToFileStep)}</p>\r\n          <div className={scriptBox}>\r\n            <code className={scriptHolder}>\r\n              <span>{content}</span>\r\n            </code>\r\n            <DefaultButton\r\n              text={formatMessage(messages.copyCodeButton)}\r\n              iconProps={{ iconName: copyScriptIcon }}\r\n              onClick={() => onCopyScriptClicked(content)}\r\n            />\r\n          </div>\r\n          <label className={stepHeader}>{formatMessage(messages.stepTwo)}</label>\r\n          <p>{formatMessage(messages.addingFileToRootDirectoryStep)}</p>\r\n        </FormSection>\r\n      </div>\r\n      <Image className={poolImage} src={fishpool} imageFit={1} alt={formatMessage(messages.adsText)} />\r\n    </div>\r\n  );\r\n});\r\n","import { action, orchestrator } from 'satcheljs';\r\n\r\nimport {\r\n  ClarityStatus,\r\n  ClarityType,\r\n  Publisher,\r\n  getAppStore,\r\n  listEntity,\r\n  onLoadingChanged,\r\n  showErrorToastNotification,\r\n} from '../../../../../../../../@data';\r\nimport { PropertyServingConfigs } from '../../../../../../../../@data/store/schema/models/ServingConfigs';\r\nimport { FormState } from '../../../../../../../../components/Form';\r\nimport { fetchPropertyById } from '../../../../../@data/services/PropertyService';\r\nimport PropertyMessages from '../../../../../Property.messages';\r\nimport { onPropertyChanged, onPropertyErrorChanged, onRawChanged } from '../../../../__data__/mutatorActions';\r\nimport { IPropertyViewModel } from '../../../../__data__/store/schema';\r\n\r\nexport const onFormInitialized = action(\r\n  'onFormInitialized',\r\n  (mode: FormState, publisherId: string, accountId?: string, entityId?: string) => ({\r\n    mode,\r\n    publisherId,\r\n    accountId,\r\n    entityId,\r\n  })\r\n);\r\n\r\norchestrator(onFormInitialized, async (msg) => {\r\n  const { userContext } = getAppStore();\r\n\r\n  const property: IPropertyViewModel = {};\r\n  property.clarity = {};\r\n\r\n  const publisherId = parseInt(msg.publisherId, 10);\r\n  if (!isNaN(publisherId)) {\r\n    const publisher = new Publisher(publisherId);\r\n    try {\r\n      onPropertyErrorChanged();\r\n      onLoadingChanged(true);\r\n\r\n      if (\r\n        (msg.mode === FormState.Edit || msg.mode === FormState.MultiStepEdit || msg.mode === FormState.MultiStepCreation) &&\r\n        msg.entityId\r\n      ) {\r\n        const rawProperty = await fetchPropertyById(publisher, msg.entityId, userContext);\r\n        property.id = rawProperty.id;\r\n        property.name = String(rawProperty.name);\r\n        property.url = rawProperty.url;\r\n        property.approvalStatus = rawProperty.approvalStatus;\r\n\r\n        const propertyConfigs = await listEntity([publisher], userContext, PropertyServingConfigs);\r\n        propertyConfigs?.forEach((p) => {\r\n          if (p.propertyId.toString() === msg.entityId && p.clarityConfig?.clarityId) {\r\n            if (p.clarityConfig?.clarityType && ClarityType[p.clarityConfig?.clarityType] !== ClarityType.None) {\r\n              const type: ClarityType = ClarityType[p.clarityConfig?.clarityType];\r\n              property.clarity = {\r\n                originalClarityType: type,\r\n                clarityType: type,\r\n                approvalBehavioralOption: type === ClarityType.Behavioral,\r\n                clarityStatus: p.clarityConfig.clarityStatus ? ClarityStatus[p.clarityConfig.clarityStatus] : ClarityStatus.NotConnected,\r\n              };\r\n            } else {\r\n              property.clarity = {\r\n                originalClarityType: ClarityType.None,\r\n                clarityType: ClarityType.None,\r\n                clarityStatus: p.clarityConfig.clarityStatus ? ClarityStatus[p.clarityConfig.clarityStatus] : ClarityStatus.NotConnected,\r\n                clarityId: p.clarityConfig.clarityId,\r\n                originalClarityId: p.clarityConfig.clarityId,\r\n                approvalBehavioralOption: false,\r\n              };\r\n            }\r\n          }\r\n        });\r\n\r\n        onRawChanged(rawProperty);\r\n      } else {\r\n        onRawChanged();\r\n      }\r\n      onPropertyChanged(property);\r\n      onLoadingChanged(false);\r\n    } catch (e) {\r\n      showErrorToastNotification({ textMessageDescriptor: PropertyMessages.propertyLoadError });\r\n    } finally {\r\n      onLoadingChanged(false);\r\n    }\r\n  } else {\r\n    showErrorToastNotification({ textMessageDescriptor: PropertyMessages.invalidState });\r\n  }\r\n});\r\n","import { mutatorAction } from 'satcheljs';\r\nimport { ClarityType } from '../../../../../../../../@data';\r\nimport { getCreatePropertyStore } from '../../../../__data__/store/store';\r\n\r\nexport const onClarityTypeChanged = mutatorAction('onClarityTypeChanged', (type?: ClarityType) => {\r\n  const clarity = getCreatePropertyStore().active.clarity;\r\n  if (clarity !== undefined) {\r\n    if (type !== ClarityType.Behavioral && clarity.originalClarityType !== ClarityType.Behavioral) {\r\n      clarity.approvalBehavioralOption = false;\r\n    }\r\n    if (type !== ClarityType.None) {\r\n      // If option changed from existing to other, clear the clarity id to not send it and confuse the API\r\n      clarity.clarityId = '';\r\n    }\r\n    clarity.clarityType = type;\r\n  }\r\n});\r\n\r\nexport const onApprovalBehavioralTC = mutatorAction('onApprovalBehavioralTC', (isApproved: boolean) => {\r\n  const clarity = getCreatePropertyStore().active.clarity;\r\n  if (clarity !== undefined) {\r\n    clarity.approvalBehavioralOption = isApproved;\r\n  }\r\n});\r\n","import { defineMessages } from 'react-intl';\r\n\r\nexport default defineMessages({\r\n  microsoftClarity: {\r\n    id: 'clarity.microsoftClarity',\r\n    defaultMessage: 'Microsoft Clarity',\r\n  },\r\n  microsoftClarityTC: {\r\n    id: 'clarity.microsoftClarityTC',\r\n    defaultMessage: 'I’ve reviewed the {privacy} and agree to grant Microsoft permission to collect and use this data.',\r\n  },\r\n  microsoftClarityPrivacy: {\r\n    id: 'clarity.microsoftClarityPrivacy',\r\n    defaultMessage: 'privacy statement',\r\n  },\r\n  microsoftClarityInformation: {\r\n    id: 'clarity.microsoftClarityTermsOfUse',\r\n    defaultMessage:\r\n      'Microsoft Clarity can help provide insights into your site’s performance and better protect you from fraudulent activity. ',\r\n  },\r\n  microsoftClarityTermsOfUse: {\r\n    id: 'clarity.microsoftClarityTermsOfUse',\r\n    defaultMessage: 'Learn more about Clarity.',\r\n  },\r\n  advancedOptionHeader: {\r\n    id: 'clarity.advancedOptionHeader',\r\n    defaultMessage: 'Clarity – Advanced insights & behavioral analytics',\r\n  },\r\n  advancedOptionDesc: {\r\n    id: 'clarity.advancedOptionDesc',\r\n    defaultMessage:\r\n      'Clarity - Advanced insights and behavioral analytics  provides behavior-focused insights into how people interact with your website. With instant heat maps and session recordings, you can identify the most engaging sections on your sites and measure visitor scrolling behavior that can turn site analytics into opportunities.',\r\n  },\r\n  advancedOptionApproval: {\r\n    id: 'clarity.advancedOptionApproval',\r\n    defaultMessage: 'Clarity Advanced privacy statement approval ',\r\n  },\r\n  basicOptionHeader: {\r\n    id: 'clarity.basicOptionHeader',\r\n    defaultMessage: 'Clarity – Basic Insights',\r\n  },\r\n  basicOptionDesc: {\r\n    id: 'clarity.basicOptionDesc',\r\n    defaultMessage:\r\n      'Clarity - Basic Insights provides fraud detection and leverages data collected from your website to identify and mitigate potential threats to your account.',\r\n  },\r\n  existingClarityOptionHeader: {\r\n    id: 'clarity.existingClarityOptionHeader',\r\n    defaultMessage: 'I have an existing Clarity project',\r\n  },\r\n  existingClarityOptionDesc: {\r\n    id: 'clarity.existingClarityOptionDesc',\r\n    defaultMessage: `You can find it in the project URL from the browser. {br}\r\n      Example: https://clarity.microsoft.com/projects/view/”projectid”/ {br}\r\n      Project linking can be completed once the admin of Clarity project approves this linking by clicking on “Approve” from their email.`,\r\n  },\r\n  advantageOneHeader: {\r\n    id: 'clarity.advantageOneHeader',\r\n    defaultMessage: 'Powerful insights',\r\n  },\r\n  advantageOneDesc: {\r\n    id: 'clarity.advantageOneDesc',\r\n    defaultMessage: 'Quickly discover where users get frustrated and turn these problems into opportunities.',\r\n  },\r\n  advantageTwoHeader: {\r\n    id: 'clarity.advantageTwoHeader',\r\n    defaultMessage: 'Instant heatmaps',\r\n  },\r\n  advantageTwoDesc: {\r\n    id: 'clarity.advantageTwoDesc',\r\n    defaultMessage:\r\n      'Quickly view which areas on your page drive the most engagement and how far your visitors scroll with Clarity instant heatmaps.',\r\n  },\r\n  advantageThreeHeader: {\r\n    id: 'clarity.advantageThreeHeader',\r\n    defaultMessage: 'Session recordings',\r\n  },\r\n  advantageThreeDesc: {\r\n    id: 'clarity.advantageThreeDesc',\r\n    defaultMessage: `Go beyond the numbers. View what's working on your site, learn what needs to be fixed, and test new ideas`,\r\n  },\r\n  recommendationTag: {\r\n    id: 'clarity.recommendationTag',\r\n    defaultMessage: 'RECOMMENDED',\r\n  },\r\n  sidePanelPending: {\r\n    id: 'property.sidePanelPending',\r\n    defaultMessage: 'Pending Approval. Click continue to resubmit the request.',\r\n  },\r\n  sidePanelDeclined: {\r\n    id: 'property.sidePanelDeclined',\r\n    defaultMessage: 'Request was declined. Click continue to resubmit the request.',\r\n  },\r\n  sidePanelExpired: {\r\n    id: 'property.sidePanelExpired',\r\n    defaultMessage: 'Request was expired. Click continue to resubmit the request.',\r\n  },\r\n  sidePanelCancelled: {\r\n    id: 'property.sidePanelCancelled',\r\n    defaultMessage: 'Request was cancelled. Click continue to resubmit the request.',\r\n  },\r\n  clarityId: {\r\n    id: 'property.clarityId',\r\n    defaultMessage: 'Clarity Project id',\r\n  },\r\n});\r\n","import { FontWeights, IStyle, ITheme, classNamesFunction, getTheme } from '@fluentui/react';\r\nimport { BreakPoints, IPubCenterFonts, IPubcenterPalette, IPubcenterSpacing } from '../../../../../../../../../../../theme';\r\n\r\nexport interface IClarityOptionsStyleProps {\r\n  theme: ITheme;\r\n}\r\nexport interface IClarityOptionsStyle {\r\n  wrapper: IStyle;\r\n  wrapperTitle: IStyle;\r\n  section: IStyle;\r\n  sectionDetails: IStyle;\r\n  disabledSection: IStyle;\r\n  sectionSelector: IStyle;\r\n  title: IStyle;\r\n  desc: IStyle;\r\n  advantageWrapper: IStyle;\r\n  advantageSection: IStyle;\r\n  toggle: IStyle;\r\n  imageWrapper: IStyle;\r\n  recommendationTag: IStyle;\r\n  advantageHeader: IStyle;\r\n  panelPending: IStyle;\r\n  panelProjectIdApprovedSection: IStyle;\r\n  errorMessage: IStyle;\r\n}\r\n\r\nexport const getStyles = (props: IClarityOptionsStyleProps): IClarityOptionsStyle => {\r\n  const theme = getTheme();\r\n  const spacing = theme.spacing as IPubcenterSpacing;\r\n  const fonts = theme.fonts as IPubCenterFonts;\r\n  const palette = theme.palette as IPubcenterPalette;\r\n  const { ResponsiveSmall, ResponsiveMedium } = BreakPoints;\r\n\r\n  return {\r\n    wrapper: {\r\n      display: 'flex',\r\n      gap: spacing.size16,\r\n      marginTop: spacing.size24,\r\n      flexDirection: 'column',\r\n      position: 'relative',\r\n      transition: 'all 0.3s ease - in -out',\r\n    },\r\n    wrapperTitle: {\r\n      fontWeight: FontWeights.semibold,\r\n      selectors: {\r\n        '::after': {\r\n          marginLeft: spacing.size6,\r\n          content: \"'*'\",\r\n          color: 'red',\r\n        },\r\n      },\r\n    },\r\n    section: {\r\n      display: 'grid',\r\n      gridTemplateColumns: 'auto 10fr',\r\n      gap: spacing.size6,\r\n      border: `1px solid ${palette.neutralLight}`,\r\n      position: 'relative',\r\n      [ResponsiveMedium]: {\r\n        gridTemplateColumns: '1fr',\r\n      },\r\n      [ResponsiveSmall]: {\r\n        gridTemplateColumns: '1fr',\r\n      },\r\n    },\r\n    sectionDetails: {\r\n      padding: `${spacing.size24} ${spacing.size16}`,\r\n      display: 'flex',\r\n      flexDirection: 'column',\r\n      justifyContent: 'space-between',\r\n    },\r\n    disabledSection: {\r\n      background: 'rgb(243, 242, 241, 0.4)',\r\n      position: 'absolute',\r\n      width: '100%',\r\n      height: '100%',\r\n      zIndex: '999',\r\n      cursor: 'not-allowed',\r\n    },\r\n    sectionSelector: {\r\n      position: 'absolute',\r\n      zIndex: '998',\r\n      left: spacing.size16,\r\n    },\r\n    title: {\r\n      ...fonts.size18,\r\n      fontWeight: FontWeights.semibold,\r\n      marginBlockStart: '0.5em',\r\n      marginBlockEnd: '0.25em',\r\n    },\r\n    desc: {\r\n      ...fonts.size14,\r\n      color: palette.disabledGray,\r\n      overflowWrap: 'anywhere',\r\n    },\r\n    advantageWrapper: {\r\n      display: 'grid',\r\n      gridTemplateColumns: '1fr 1fr 1fr',\r\n      gap: spacing.size8,\r\n      marginTop: spacing.size16,\r\n      [ResponsiveSmall]: {\r\n        gridTemplateColumns: '1fr',\r\n      },\r\n    },\r\n    advantageHeader: {\r\n      display: 'flex',\r\n      alignItems: 'baseline',\r\n      gap: spacing.size8,\r\n      [ResponsiveSmall]: {\r\n        gap: 0,\r\n        flexDirection: 'column',\r\n        '& :nth-child(2)': {\r\n          marginBlockStart: '0',\r\n          marginBlockEnd: '0.75em',\r\n        },\r\n      },\r\n    },\r\n    advantageSection: {\r\n      backgroundColor: palette.neutralLighter,\r\n      width: 'fit-content',\r\n      padding: spacing.size8,\r\n      display: 'flex',\r\n      gap: spacing.size8,\r\n      '& :nth-child(2)': {\r\n        '& :first-child': {\r\n          fontWeight: FontWeights.semibold,\r\n          marginBlockStart: '0',\r\n          marginBlockEnd: '0.25em',\r\n        },\r\n      },\r\n    },\r\n    toggle: {\r\n      marginTop: spacing.size8,\r\n    },\r\n    imageWrapper: {\r\n      width: '260px',\r\n      backgroundColor: '#F5F8FA',\r\n      cursor: 'pointer',\r\n      [ResponsiveMedium]: {\r\n        width: '100%',\r\n        height: '180px',\r\n      },\r\n      [ResponsiveSmall]: {\r\n        width: '100%',\r\n        height: '180px',\r\n      },\r\n    },\r\n    recommendationTag: {\r\n      backgroundColor: palette.success,\r\n      color: palette.green,\r\n      width: 'fit-content',\r\n      borderRadius: spacing.size4,\r\n      padding: spacing.size6,\r\n    },\r\n    panelPending: {\r\n      display: 'flex',\r\n      gap: spacing.size6,\r\n      alignItems: 'center',\r\n      backgroundColor: palette.messageBarError,\r\n      margin: `${spacing.size12} 0 ${spacing.size12} 0`,\r\n      padding: `${spacing.size12} ${spacing.size12}`,\r\n    },\r\n    panelProjectIdApprovedSection: {\r\n      display: 'flex',\r\n      gap: spacing.size8,\r\n      alignItems: 'center',\r\n      margin: `${spacing.size8} 0 ${spacing.size4} 0`,\r\n    },\r\n    errorMessage: {\r\n      fontSize: fonts.size12.fontSize,\r\n      color: 'rgb(164, 38, 44)',\r\n    },\r\n  };\r\n};\r\n\r\nexport const getClassNames = classNamesFunction<IClarityOptionsStyleProps, IClarityOptionsStyle>();\r\n","import { Checkbox, ChoiceGroup, Icon, IconButton, Image, Link, TextField, getTheme } from '@fluentui/react';\r\nimport React from 'react';\r\nimport { FormattedMessage, InjectedIntlProps } from 'react-intl';\r\nimport { ClarityStatus, ClarityType } from '../../../../../../../../../../@data';\r\nimport AppMessages from '../../../../../../../../../../App.messages';\r\nimport { CLARITY_HOME_WEB_APP, CLARITY_PRIVACY_STATEMENT, CLARITY_WEB_APP } from '../../../../../../../../../../constants/AppConstants';\r\nimport {\r\n  CLARITY_BASIC_RADIO_BUTTON,\r\n  CLARITY_BEHAVIORAL_RADIO_BUTTON,\r\n  CLARITY_EXISTING_RADIO_BUTTON,\r\n} from '../../../../../../../../../../constants/DataTestIdConstants';\r\nimport { useWindowSize } from '../../../../../../../../../../hooks';\r\nimport { getStore as getWindowStore } from '../../../../../../../../../../hooks/useWindowSize/store/store';\r\nimport { StepState } from '../../../../../../../../../../layout/DetailPageWithStepper/DetailPageWithStepper.types';\r\nimport { IRouterWithIntl, injectIntlAndObserver } from '../../../../../../../../../../utils';\r\nimport { onClarityIdChanged, onEditClarityId } from '../../../../../../__data__/mutatorActions';\r\nimport { getCreatePropertyStore } from '../../../../../../__data__/store/store';\r\nimport { onApprovalBehavioralTC, onClarityTypeChanged } from '../../../../__data__/mutatorActions';\r\nimport messages from './messages';\r\nimport codeFree from './resources/codeFree.svg';\r\nimport existingClarity from './resources/existingClarity.svg';\r\nimport richBehavior from './resources/richBehavior.svg';\r\nimport { getClassNames, getStyles } from './styles';\r\nexport interface IClarityOptionsProps extends IRouterWithIntl {\r\n  stepState?: StepState;\r\n}\r\n\r\nconst { windowStoreSerializer } = useWindowSize();\r\n\r\nexport const ClarityOptions = injectIntlAndObserver<InjectedIntlProps & IClarityOptionsProps>((props: IClarityOptionsProps) => {\r\n  const { intl } = props;\r\n  const { formatMessage } = intl;\r\n  const {\r\n    active: { clarity },\r\n  } = getCreatePropertyStore();\r\n  const {\r\n    clarityType,\r\n    approvalBehavioralOption,\r\n    clarityId,\r\n    clarityEdit,\r\n    originalClarityType,\r\n    originalClarityId,\r\n    clarityStatus,\r\n    clarityErrorMessage,\r\n  } = clarity || {};\r\n  const chosenType = clarityType !== undefined ? clarityType.toString() : '';\r\n  const isChosen = approvalBehavioralOption || false;\r\n\r\n  const {\r\n    wrapper,\r\n    wrapperTitle,\r\n    section,\r\n    sectionDetails,\r\n    disabledSection,\r\n    sectionSelector,\r\n    title,\r\n    desc,\r\n    toggle,\r\n    advantageWrapper,\r\n    advantageSection,\r\n    imageWrapper,\r\n    recommendationTag,\r\n    advantageHeader,\r\n    panelPending,\r\n    panelProjectIdApprovedSection,\r\n    errorMessage,\r\n  } = getClassNames(getStyles, {\r\n    theme: getTheme(),\r\n  });\r\n  const checkMark = <span>&#10003;</span>;\r\n  const { isWindowRegularSize } = windowStoreSerializer(getWindowStore());\r\n\r\n  const getAdvantage = (header: string, description: string) => {\r\n    return (\r\n      <div className={advantageSection}>\r\n        {checkMark}\r\n        <div>\r\n          <p>{header}</p>\r\n          <span>{description}</span>\r\n        </div>\r\n      </div>\r\n    );\r\n  };\r\n\r\n  const getChoiceImage = (imgSrc: string, imgAlt: FormattedMessage.MessageDescriptor, onClick: (e) => void) => {\r\n    return isWindowRegularSize ? (\r\n      <Image className={imageWrapper} onClick={onClick} src={imgSrc} imageFit={1} alt={formatMessage(imgAlt)} />\r\n    ) : (\r\n      <div />\r\n    );\r\n  };\r\n\r\n  const getInformationMessage = (status?: ClarityStatus) => {\r\n    switch (status) {\r\n      case ClarityStatus.Pending:\r\n        return messages.sidePanelPending;\r\n      case ClarityStatus.Declined:\r\n        return messages.sidePanelDeclined;\r\n      case ClarityStatus.Expired:\r\n        return messages.sidePanelExpired;\r\n      case ClarityStatus.Cancelled:\r\n        return messages.sidePanelCancelled;\r\n      default:\r\n        return messages.sidePanelPending;\r\n    }\r\n  };\r\n\r\n  const onOptionClick = (e, value) => {\r\n    if (props.stepState === StepState.Dirty && clarityType === value) {\r\n      return;\r\n    }\r\n    if (clarityType === value) {\r\n      onClarityTypeChanged(undefined);\r\n    } else {\r\n      onClarityTypeChanged(value);\r\n    }\r\n\r\n    e.preventDefault();\r\n  };\r\n\r\n  return (\r\n    <div className={wrapper}>\r\n      <span className={wrapperTitle} title={formatMessage(AppMessages.required)}>\r\n        {formatMessage(messages.microsoftClarity)}\r\n      </span>\r\n      <span>\r\n        {formatMessage(messages.microsoftClarityInformation)}\r\n        <Link href={CLARITY_HOME_WEB_APP} target=\"_blank\" rel=\"noreferrer noopener\" underline>\r\n          {formatMessage(messages.microsoftClarityTermsOfUse)}\r\n        </Link>\r\n      </span>\r\n      <div className={section}>\r\n        {(originalClarityType === ClarityType.None || originalClarityType === ClarityType.Fraud) && <div className={disabledSection} />}\r\n\r\n        <ChoiceGroup\r\n          ariaLabelledBy={formatMessage(messages.advancedOptionHeader)}\r\n          selectedKey={chosenType}\r\n          className={sectionSelector}\r\n          options={[\r\n            {\r\n              key: '1',\r\n              text: '',\r\n              ariaLabel: formatMessage(messages.advancedOptionHeader),\r\n              onClick: (e) => onOptionClick(e, ClarityType.Behavioral),\r\n              onKeyDown: (e) => e.key === 'Enter' && onOptionClick(e, ClarityType.Behavioral),\r\n            },\r\n          ]}\r\n          disabled={originalClarityType === ClarityType.None || originalClarityType === ClarityType.Fraud}\r\n          data-test-id={CLARITY_BEHAVIORAL_RADIO_BUTTON}\r\n        />\r\n\r\n        {getChoiceImage(\r\n          richBehavior,\r\n          messages.advancedOptionHeader,\r\n          (e) => originalClarityType !== ClarityType.None && onOptionClick(e, ClarityType.Behavioral)\r\n        )}\r\n        <div className={sectionDetails}>\r\n          <div>\r\n            <div className={advantageHeader}>\r\n              <p className={title}>{formatMessage(messages.advancedOptionHeader)}</p>\r\n              <p className={recommendationTag}>{formatMessage(messages.recommendationTag)}</p>\r\n            </div>\r\n            <span className={desc}>{formatMessage(messages.advancedOptionDesc)}</span>\r\n          </div>\r\n          <div className={advantageWrapper}>\r\n            {getAdvantage(formatMessage(messages.advantageOneHeader), formatMessage(messages.advantageOneDesc))}\r\n            {getAdvantage(formatMessage(messages.advantageTwoHeader), formatMessage(messages.advantageTwoDesc))}\r\n            {getAdvantage(formatMessage(messages.advantageThreeHeader), formatMessage(messages.advantageThreeDesc))}\r\n          </div>\r\n          {chosenType === ClarityType.Behavioral.toString() && (\r\n            <Checkbox\r\n              checked={isChosen}\r\n              className={toggle}\r\n              onChange={(_, state) => onApprovalBehavioralTC(state || false)}\r\n              title={formatMessage(messages.advancedOptionApproval)}\r\n              aria-hidden={true}\r\n              disabled={originalClarityType === ClarityType.Behavioral}\r\n              onRenderLabel={() => (\r\n                <FormattedMessage\r\n                  {...messages.microsoftClarityTC}\r\n                  values={{\r\n                    privacy: (\r\n                      <Link href={CLARITY_PRIVACY_STATEMENT} target=\"_blank\" rel=\"noreferrer noopener\" underline>\r\n                        {formatMessage(messages.microsoftClarityPrivacy)}\r\n                      </Link>\r\n                    ),\r\n                  }}\r\n                />\r\n              )}\r\n            />\r\n          )}\r\n        </div>\r\n      </div>\r\n      <div className={section}>\r\n        {(originalClarityType === ClarityType.None || originalClarityType === ClarityType.Behavioral) && (\r\n          <div className={disabledSection} />\r\n        )}\r\n\r\n        <ChoiceGroup\r\n          ariaLabelledBy={formatMessage(messages.basicOptionHeader)}\r\n          selectedKey={chosenType}\r\n          className={sectionSelector}\r\n          options={[{ key: '0', text: '', ariaLabel: formatMessage(messages.basicOptionHeader) }]}\r\n          onClick={(e) => onOptionClick(e, ClarityType.Fraud)}\r\n          onKeyDown={(e) => e.key === 'Enter' && onOptionClick(e, ClarityType.Fraud)}\r\n          disabled={originalClarityType === ClarityType.Behavioral || originalClarityType === ClarityType.None}\r\n          data-test-id={CLARITY_BASIC_RADIO_BUTTON}\r\n        />\r\n        {getChoiceImage(\r\n          codeFree,\r\n          messages.basicOptionHeader,\r\n          (e) =>\r\n            originalClarityType !== ClarityType.Behavioral &&\r\n            originalClarityType !== ClarityType.None &&\r\n            onOptionClick(e, ClarityType.Fraud)\r\n        )}\r\n        <div className={sectionDetails}>\r\n          <div>\r\n            <p className={title}>{formatMessage(messages.basicOptionHeader)}</p>\r\n            <span className={desc}>{formatMessage(messages.basicOptionDesc)}</span>\r\n          </div>\r\n          <div className={advantageWrapper}>\r\n            {getAdvantage(formatMessage(messages.advantageOneHeader), formatMessage(messages.advantageOneDesc))}\r\n          </div>\r\n        </div>\r\n      </div>\r\n\r\n      <div className={section}>\r\n        <ChoiceGroup\r\n          ariaLabelledBy={formatMessage(messages.existingClarityOptionHeader)}\r\n          selectedKey={chosenType}\r\n          className={sectionSelector}\r\n          options={[{ key: '2', text: '', ariaLabel: formatMessage(messages.existingClarityOptionHeader) }]}\r\n          onClick={(e) => onOptionClick(e, ClarityType.None)}\r\n          onKeyDown={(e) => e.key === 'Enter' && onOptionClick(e, ClarityType.None)}\r\n          data-test-id={CLARITY_EXISTING_RADIO_BUTTON}\r\n        />\r\n        {getChoiceImage(existingClarity, messages.existingClarityOptionHeader, (e) => onOptionClick(e, ClarityType.None))}\r\n        <div className={sectionDetails}>\r\n          <div>\r\n            <p className={title}>{formatMessage(messages.existingClarityOptionHeader)}</p>\r\n            <span className={desc}>\r\n              <FormattedMessage {...messages.existingClarityOptionDesc} values={{ br: <br /> }} />\r\n            </span>\r\n          </div>\r\n          <div>\r\n            {originalClarityId === undefined || clarityEdit ? (\r\n              <div className={panelProjectIdApprovedSection}>\r\n                <TextField\r\n                  iconProps={{\r\n                    iconName: clarityEdit ? 'Cancel' : '',\r\n                    style: {\r\n                      pointerEvents: 'auto',\r\n                      cursor: 'pointer',\r\n                    },\r\n                    onClick: (e) => {\r\n                      onEditClarityId(!clarityEdit);\r\n                      if (originalClarityId) {\r\n                        onClarityIdChanged(originalClarityId);\r\n                      }\r\n                    },\r\n                  }}\r\n                  ariaLabel={formatMessage(messages.clarityId)}\r\n                  disabled={chosenType !== ClarityType.None.toString()}\r\n                  errorMessage={clarityErrorMessage}\r\n                  value={clarityId}\r\n                  onClick={(e) => e.stopPropagation()}\r\n                  onChange={(_, value: string) => onClarityIdChanged(value)}\r\n                />\r\n              </div>\r\n            ) : (\r\n              <>\r\n                <div className={panelProjectIdApprovedSection}>\r\n                  {clarityStatus === ClarityStatus.Approved ? (\r\n                    <Link href={CLARITY_WEB_APP.replace('{id}', originalClarityId)} target=\"_blank\" rel=\"noreferrer noopener\">\r\n                      {originalClarityId}\r\n                    </Link>\r\n                  ) : (\r\n                    <>\r\n                      <span>{originalClarityId}</span>\r\n                    </>\r\n                  )}\r\n                  <IconButton iconProps={{ iconName: 'Edit' }} onClick={() => onEditClarityId(!clarityEdit)} />\r\n                </div>\r\n                {clarityErrorMessage !== undefined && <span className={errorMessage}>{clarityErrorMessage}</span>}\r\n              </>\r\n            )}\r\n            {clarityStatus !== ClarityStatus.Approved && !!originalClarityId && (\r\n              <div className={panelPending}>\r\n                <Icon iconName={'Info'} aria-label={formatMessage(AppMessages.infoLabel)} />\r\n                {formatMessage(getInformationMessage(clarityStatus))}\r\n              </div>\r\n            )}\r\n          </div>\r\n        </div>\r\n      </div>\r\n    </div>\r\n  );\r\n});\r\n","import * as React from 'react';\r\nimport { useEffect, useState } from 'react';\r\nimport { IFormEditParams, IFormStateProps } from '../../../../../../../../components/Form';\r\nimport { StepState } from '../../../../../../../../layout/DetailPageWithStepper/DetailPageWithStepper.types';\r\nimport { IRouterWithIntl, injectIntlWithObserver } from '../../../../../../../../utils/ReactUtils';\r\nimport { getCreatePropertyStore } from '../../../../__data__/store/store';\r\nimport PropertyIdField from '../../../../components/PropertyIdField';\r\nimport PropertyNameInputField from '../../../../components/PropertyNameInputField';\r\nimport PropertyUrlInputField from '../../../../components/PropertyUrlInputField';\r\nimport { onFormInitialized } from '../../__data__/orchestrators';\r\nimport { ClarityOptions } from './components/ClarityOptions';\r\n\r\nexport interface IFormInitializationState {\r\n  initializeForm?: boolean;\r\n  id?: string;\r\n}\r\n\r\nexport interface ICreatePropertyProps extends IRouterWithIntl<IFormEditParams>, IFormStateProps {\r\n  stepState?: StepState;\r\n}\r\n\r\nexport const CreateProperty = injectIntlWithObserver<ICreatePropertyProps & IFormInitializationState>((props) => {\r\n  const { match, mode, stepState } = props;\r\n  const { publisherId, accountId, id: entityId } = match.params;\r\n  const { active } = getCreatePropertyStore();\r\n  const [activePropertyId, setActivePropertyId] = useState(entityId);\r\n\r\n  useEffect(() => {\r\n    if (activePropertyId === entityId || publisherId === undefined) {\r\n      return;\r\n    }\r\n    setActivePropertyId(entityId);\r\n    onFormInitialized(mode, publisherId, accountId, entityId);\r\n    // eslint-disable-next-line react-hooks/exhaustive-deps\r\n  }, [entityId]);\r\n\r\n  useEffect(() => {\r\n    if (publisherId === undefined) {\r\n      return;\r\n    }\r\n    onFormInitialized(mode, publisherId, accountId, entityId);\r\n    // eslint-disable-next-line react-hooks/exhaustive-deps\r\n  }, []);\r\n\r\n  return (\r\n    <>\r\n      <PropertyNameInputField mode={mode} />\r\n      <PropertyIdField id={active.id} />\r\n      <PropertyUrlInputField mode={mode} stepState={stepState} />\r\n      <ClarityOptions {...props} stepState={stepState} />\r\n    </>\r\n  );\r\n});\r\n","import { History } from 'history';\r\nimport { action } from 'satcheljs';\r\nimport { FormState } from '../../../../../../../../../../components/Form';\r\n\r\nexport const onScriptPageInitialized = action('onScriptPageInitialized', (publisherId: string, propertyId: string) => ({\r\n  publisherId,\r\n  propertyId,\r\n}));\r\n\r\nexport const onScriptPageSubmitted = action('onScriptPageSubmitted', (mode: FormState, routeHistory: History, onSubmit?: () => void) => ({\r\n  mode,\r\n  routeHistory,\r\n  onSubmit,\r\n}));\r\n\r\nexport const onFormCleared = action('onFormCleared');\r\n\r\nexport const onClarityProjectChanged = action('onClarityProjectChanged', (id: string) => ({ id }));\r\n\r\nexport const onCopyScriptIconChanged = action('onCopyScriptIconChanged', (iconName: string) => ({ iconName }));\r\n","import { createStore } from 'satcheljs';\r\nexport interface IScriptPageState {\r\n  copyScriptIcon: string;\r\n  clarityProjectId: string;\r\n}\r\n\r\nexport const getPropertyScriptPageStore = createStore<IScriptPageState>('PropertyScriptPageState', {\r\n  copyScriptIcon: 'Copy',\r\n  clarityProjectId: '',\r\n});\r\n","import { mutator } from 'satcheljs';\r\nimport { onClarityProjectChanged, onCopyScriptIconChanged, onFormCleared } from '../actions/onScriptPageActions';\r\nimport { getPropertyScriptPageStore } from '../store/store';\r\n\r\nmutator(onCopyScriptIconChanged, (msg) => {\r\n  getPropertyScriptPageStore().copyScriptIcon = msg.iconName;\r\n});\r\n\r\nmutator(onFormCleared, () => {\r\n  getPropertyScriptPageStore().clarityProjectId = '';\r\n});\r\n\r\nmutator(onClarityProjectChanged, (msg) => {\r\n  getPropertyScriptPageStore().clarityProjectId = msg.id;\r\n});\r\n","import { defineMessages } from 'react-intl';\r\n\r\nexport default defineMessages({\r\n  title: {\r\n    id: 'scriptPage.title',\r\n    defaultMessage: 'Finish creating your site by placing the code in your header tag.',\r\n  },\r\n  tips: {\r\n    id: 'scriptPage.tips',\r\n    defaultMessage: `Make sure that you insert the ad inside your feed. You can choose to place it in your feed's content or at the beginning or end of your feed. Avoid placing the ad in the sidebar, as it may negatively impact performance. The container you use to place your ad should have a variable height, as fixed height containers may cause the ad to appear distorted.`,\r\n  },\r\n  subTitle: {\r\n    id: 'scriptPage.subTitle',\r\n    defaultMessage: 'Load the following script in your header tag',\r\n  },\r\n  copyCodeButton: {\r\n    id: 'scriptPage.copyCodeButton',\r\n    defaultMessage: 'Copy code snippet',\r\n  },\r\n  microsoftClarity: {\r\n    id: 'scriptPage.microsoftClarity',\r\n    defaultMessage: 'Microsoft Clarity',\r\n  },\r\n  microsoftConnectedClarity: {\r\n    id: 'scriptPage.microsoftConnectedClarity',\r\n    defaultMessage: 'Your Clarity project ID is: {projectId}. To get the analytical data please visit ',\r\n  },\r\n  microsoftClarityConnectedAccountNotice: {\r\n    id: 'scriptPage.microsoftClarityConnectedAccountNotice',\r\n    defaultMessage: 'Note: Please use same MSA account to log in.',\r\n  },\r\n  microsoftClarityEmailSentNotice: {\r\n    id: 'scriptPage.microsoftClarityEmailSentNotice',\r\n    defaultMessage: 'Email sent, please go check and approve the connection of the Clarity project.',\r\n  },\r\n  scriptPageInvalidState: {\r\n    id: 'scriptPage.scriptPageInvalidState',\r\n    defaultMessage: 'You have arrived in an invalid state, please report.',\r\n  },\r\n  scriptPageFailedToLoadClarityProject: {\r\n    id: 'scriptPage.scriptPageFailedToLoadClarityProject',\r\n    defaultMessage: 'Failed to fetch clarity project',\r\n  },\r\n});\r\n","import { MessageBarType } from '@fluentui/react';\r\nimport { orchestrator } from 'satcheljs';\r\nimport { getAppStore, listEntity, onLoadingChanged, onNotificationChanged, Publisher } from '../../../../../../../../../../@data';\r\nimport { PropertyServingConfigs } from '../../../../../../../../../../@data/store/schema/models/ServingConfigs';\r\nimport messages from '../../messages';\r\nimport { onClarityProjectChanged, onScriptPageInitialized } from '../actions/onScriptPageActions';\r\n\r\norchestrator(onScriptPageInitialized, async (msg) => {\r\n  const publisherId = parseInt(msg.publisherId, 10);\r\n  const propertyId = parseInt(msg.propertyId, 10);\r\n  const { userContext } = getAppStore();\r\n\r\n  if (!isNaN(publisherId) && !isNaN(propertyId)) {\r\n    const publisher = new Publisher(publisherId);\r\n    onLoadingChanged(true);\r\n\r\n    try {\r\n      const propertiesServingConfigs = await listEntity([publisher], userContext, PropertyServingConfigs);\r\n      const propertyConfig = propertiesServingConfigs.find((config) => config.propertyId === propertyId);\r\n      onClarityProjectChanged(propertyConfig?.clarityConfig?.clarityId || '');\r\n    } catch (e) {\r\n      onNotificationChanged({\r\n        textMessageDescriptor: messages.scriptPageFailedToLoadClarityProject,\r\n        messageBarType: MessageBarType.severeWarning,\r\n      });\r\n    } finally {\r\n      onLoadingChanged(false);\r\n    }\r\n  } else {\r\n    onNotificationChanged({\r\n      textMessageDescriptor: messages.scriptPageInvalidState,\r\n      messageBarType: MessageBarType.severeWarning,\r\n    });\r\n  }\r\n});\r\n","import { orchestrator } from 'satcheljs';\r\nimport { getAppStore, isTythonSelfServeUser, onNavigateBack } from '../../../../../../../../../../@data';\r\nimport { getTythonInventoryPage } from '../../../../../../../../../../utils/routeUtils';\r\nimport { RouteName } from '../../../../../../../../@data';\r\nimport { createReturnUrl } from '../../../../../../../../@data/services/AdManagementService';\r\nimport { onFormCleared, onScriptPageSubmitted } from '../actions/onScriptPageActions';\r\n\r\norchestrator(onScriptPageSubmitted, (msg) => {\r\n  const { publisher } = getAppStore();\r\n\r\n  const returnUrl = createReturnUrl(RouteName.property, publisher!.id, undefined);\r\n  onNavigateBack(msg.routeHistory, isTythonSelfServeUser() ? getTythonInventoryPage() : returnUrl);\r\n\r\n  onFormCleared();\r\n  if (msg.onSubmit) {\r\n    msg.onSubmit();\r\n  }\r\n});\r\n","import { FontWeights, getTheme, mergeStyleSets } from '@fluentui/react';\r\nimport { BreakPoints, IPubCenterFonts, IPubcenterPalette, IPubcenterSpacing } from '../../../../../../../../../theme';\r\nimport { ICommonStyleProps } from '../../../../../../../../types';\r\n\r\ntype StyleProperties =\r\n  | 'root'\r\n  | 'title'\r\n  | 'tipsText'\r\n  | 'scriptWithImage'\r\n  | 'scriptSectionLeft'\r\n  | 'messageBar'\r\n  | 'scriptBox'\r\n  | 'scriptHolder'\r\n  | 'clarityContainer'\r\n  | 'claritySection'\r\n  | 'claritySectionTitle'\r\n  | 'panelPending'\r\n  | 'panelPendingText';\r\n\r\ntype ScriptStyles = Record<StyleProperties, string>;\r\n\r\nexport interface IScriptStylesProps extends ICommonStyleProps {\r\n  isShownInPanel?: boolean;\r\n}\r\n\r\nexport const getStyles = (props?: IScriptStylesProps): ScriptStyles => {\r\n  const theme = getTheme();\r\n  const spacing = theme.spacing as IPubcenterSpacing;\r\n  const palette = theme.palette as IPubcenterPalette;\r\n  const fonts = theme.fonts as IPubCenterFonts;\r\n  const { ResponsiveMedium, ResponsiveExtraSmall, ResponsiveSmall } = BreakPoints;\r\n\r\n  return mergeStyleSets({\r\n    root: {\r\n      marginRight: spacing.size32,\r\n      display: 'grid',\r\n      gridTemplateColumns: `${props?.isShownInPanel ? '1f' : '2fr 1fr'}`,\r\n      gap: spacing.size40,\r\n      [ResponsiveMedium]: {\r\n        gridTemplateColumns: '1fr',\r\n      },\r\n      [ResponsiveSmall]: {\r\n        gridTemplateColumns: '1fr',\r\n      },\r\n      [ResponsiveExtraSmall]: {\r\n        gridTemplateColumns: '1fr',\r\n      },\r\n    },\r\n    title: {\r\n      marginBottom: spacing.size16,\r\n      fontSize: theme.fonts.mediumPlus.fontSize,\r\n      fontWeight: FontWeights.semibold,\r\n      lineHeight: '22px',\r\n    },\r\n    tipsText: {\r\n      fontSize: theme.fonts.medium.fontSize,\r\n      lineHeight: spacing.size20,\r\n      margin: `${spacing.size16} 0`,\r\n    },\r\n    scriptWithImage: {\r\n      display: 'flex',\r\n      gap: spacing.size16,\r\n      [ResponsiveSmall]: {\r\n        flexDirection: 'column-reverse',\r\n        alignItems: 'center',\r\n      },\r\n      [ResponsiveExtraSmall]: {\r\n        flexDirection: 'column-reverse',\r\n        alignItems: 'center',\r\n      },\r\n    },\r\n    scriptSectionLeft: {\r\n      display: 'flex',\r\n      flexDirection: 'column',\r\n      width: '-webkit-fill-available',\r\n    },\r\n    messageBar: {\r\n      marginBottom: spacing.size12,\r\n      backgroundColor: theme.palette.themeLighterAlt,\r\n    },\r\n    scriptBox: {\r\n      borderColor: palette.neutralLight,\r\n      borderStyle: 'solid',\r\n      borderWidth: '1px',\r\n      padding: spacing.size12,\r\n      marginBottom: spacing.size16,\r\n    },\r\n    scriptHolder: {\r\n      display: 'block',\r\n      whiteSpace: 'pre-wrap',\r\n      wordBreak: 'break-all',\r\n      backgroundColor: palette.neutralLighter,\r\n      minHeight: spacing.size16,\r\n      maxHeight: spacing.size128,\r\n      padding: spacing.size12,\r\n      marginBottom: spacing.size12,\r\n      overflow: 'auto',\r\n      color: palette.black,\r\n      lineHeight: spacing.size16,\r\n      fontSize: theme.fonts.small.fontSize,\r\n    },\r\n    clarityContainer: {\r\n      border: `1px solid ${palette.neutralLight}`,\r\n      borderRadius: 10,\r\n      height: 'fit-content',\r\n    },\r\n    claritySection: {\r\n      padding: spacing.size32,\r\n    },\r\n    claritySectionTitle: {\r\n      ...fonts.size20,\r\n    },\r\n    panelPending: {\r\n      width: 'inherit',\r\n      display: 'flex',\r\n      alignItems: 'center',\r\n      backgroundColor: theme.palette.neutralLighterAlt,\r\n      fontSize: theme.fonts.small.fontSize,\r\n      fontWeight: FontWeights.light,\r\n      marginTop: spacing.size12,\r\n      marginButtom: spacing.size6,\r\n      paddingTop: spacing.size12,\r\n      paddingBottom: spacing.size12,\r\n      paddingRight: spacing.size6,\r\n      paddingLeft: spacing.size6,\r\n    },\r\n    panelPendingText: {\r\n      backgroundColor: theme.palette.neutralLighterAlt,\r\n    },\r\n  });\r\n};\r\n\r\nexport function getClassNames<IScriptStyles>(props?: IScriptStyles): ScriptStyles {\r\n  return getStyles({ theme: getTheme(), ...props });\r\n}\r\n","import { DefaultButton, IconButton, Link } from '@fluentui/react';\r\nimport * as React from 'react';\r\nimport { useEffect } from 'react';\r\nimport { setTimeout } from 'timers';\r\nimport { ClarityStatus, getAppStore } from '../../../../../../../../@data';\r\nimport AppMessages from '../../../../../../../../App.messages';\r\nimport { FormTitle, IFormEditParams } from '../../../../../../../../components/Form';\r\nimport { CLARITY_WEB_APP, COPY_BUTTON_TIMEOUT } from '../../../../../../../../constants/AppConstants';\r\nimport { IRouterWithIntl, injectIntlWithObserver } from '../../../../../../../../utils';\r\nimport { getCreatePropertyStore } from '../../../../__data__/store/store';\r\nimport clarityLogo from '../../resources/clarityLogo.svg';\r\nimport scriptPlacementImage from '../../resources/scriptPlacement.png';\r\nimport { onCopyScriptIconChanged, onScriptPageInitialized } from './@data/actions/onScriptPageActions';\r\nimport './@data/mutators/scriptChanged';\r\nimport './@data/orchestrators';\r\nimport { getPropertyScriptPageStore } from './@data/store/store';\r\nimport messages from './messages';\r\nimport { getClassNames } from './styles';\r\n\r\nexport interface IScriptPageProps extends IRouterWithIntl<IFormEditParams> {\r\n  siteId?: string;\r\n  clarityStatus?: ClarityStatus;\r\n  isShownInPanel?: boolean;\r\n}\r\n\r\nexport const PropertyScriptPage = injectIntlWithObserver(function ScriptPage(props: IScriptPageProps) {\r\n  const { formatMessage } = props.intl;\r\n  const classNames = getClassNames({ isShownInPanel: props.isShownInPanel || false });\r\n  const appStore = getAppStore();\r\n  const { copyScriptIcon, clarityProjectId } = getPropertyScriptPageStore();\r\n  const { active } = getCreatePropertyStore();\r\n\r\n  let publisherId = props.match.params.publisherId;\r\n  const propertyId = props.isShownInPanel ? props.siteId : props.match.params.id;\r\n\r\n  // In case publisherId is not extracted from route, fetch it from appStore\r\n  if (!publisherId && appStore.publisher) {\r\n    publisherId = appStore.publisher?.id;\r\n  }\r\n\r\n  const HEADER_SCRIPT = `<script>window.msAdsQueue = window.msAdsQueue || [];</script>\r\n  <script async src=\"https://adsdk.microsoft.com/mmnow/sdk.js?siteId=${propertyId}&publisherId=${publisherId}\" crossorigin=\"anonymous\"></script>`;\r\n\r\n  const onCopyScriptClicked = (text: string) => {\r\n    navigator.clipboard.writeText(text);\r\n    // This change of icon will indicate the user that script copy was successful\r\n    onCopyScriptIconChanged('Accept');\r\n    // After 3000ms we change the icon back to 'Copy'\r\n    setTimeout(() => onCopyScriptIconChanged('Copy'), COPY_BUTTON_TIMEOUT);\r\n  };\r\n\r\n  useEffect(() => {\r\n    if (publisherId && propertyId) {\r\n      onScriptPageInitialized(publisherId, propertyId);\r\n    }\r\n    // eslint-disable-next-line react-hooks/exhaustive-deps\r\n  }, []);\r\n\r\n  return (\r\n    <div className={classNames.root}>\r\n      <div>\r\n        <FormTitle title={formatMessage(messages.title)} intl={props.intl} noHelpPopup={true} />\r\n        <p className={classNames.tipsText}>{formatMessage(messages.tips)}</p>\r\n        <h2 className={classNames.title}>{formatMessage(messages.subTitle)}</h2>\r\n        <div className={classNames.scriptWithImage}>\r\n          <div className={classNames.scriptSectionLeft}>\r\n            <div className={classNames.scriptBox}>\r\n              <code className={classNames.scriptHolder}>{HEADER_SCRIPT}</code>\r\n              <DefaultButton\r\n                text={formatMessage(messages.copyCodeButton)}\r\n                iconProps={{ iconName: copyScriptIcon }}\r\n                onClick={() => onCopyScriptClicked(HEADER_SCRIPT!)}\r\n              />\r\n            </div>\r\n          </div>\r\n          <img src={scriptPlacementImage} alt={formatMessage(messages.tips)} width={285} height={178} />\r\n        </div>\r\n      </div>\r\n      {clarityProjectId && (\r\n        <div className={classNames.clarityContainer}>\r\n          <div className={classNames.claritySection}>\r\n            <img src={clarityLogo} alt={'clarityLogo'} />\r\n            <p role=\"heading\" className={classNames.claritySectionTitle} aria-level={6}>\r\n              {formatMessage(messages.microsoftClarity)}\r\n            </p>\r\n            <span>\r\n              {formatMessage(messages.microsoftConnectedClarity).replace('{projectId}', clarityProjectId)}\r\n              <Link href={CLARITY_WEB_APP.replace('{id}', clarityProjectId)} target=\"_blank\" rel=\"noreferrer noopener\">\r\n                {formatMessage(AppMessages.here)}\r\n              </Link>\r\n            </span>\r\n            <br />\r\n            <span>{formatMessage(messages.microsoftClarityConnectedAccountNotice)}</span>\r\n          </div>\r\n          {(active.clarity?.clarityStatus === ClarityStatus.Pending || props.clarityStatus === ClarityStatus.Pending) && (\r\n            <div className={classNames.panelPending}>\r\n              <div>\r\n                <IconButton iconProps={{ iconName: 'Info' }} />\r\n              </div>\r\n              <div className={classNames.panelPendingText}>{formatMessage(messages.microsoftClarityEmailSentNotice)}</div>\r\n            </div>\r\n          )}\r\n        </div>\r\n      )}\r\n    </div>\r\n  );\r\n});\r\n","import { defineMessages } from 'react-intl';\r\n\r\nexport default defineMessages({\r\n  processNameCreate: {\r\n    id: 'siteCreationProcess.processNameCreate',\r\n    defaultMessage: 'Create site',\r\n  },\r\n  processNameEdit: {\r\n    id: 'siteCreationProcess.processNameEdit',\r\n    defaultMessage: 'Edit site',\r\n  },\r\n  CreateSiteStep: {\r\n    id: 'siteCreationProcess.CreateSiteStep',\r\n    defaultMessage: 'Site details',\r\n  },\r\n  AdsTxtCreationStep: {\r\n    id: 'siteCreationProcess.AdsTxtCreationStep',\r\n    defaultMessage: 'Ads.txt creation',\r\n  },\r\n  GetCodeAndFinishStep: {\r\n    id: 'siteCreationProcess.GetCodeAndFinishStep',\r\n    defaultMessage: 'Get code',\r\n  },\r\n  createPropertyBtnLbl: {\r\n    id: 'siteCreationProcess.createPropertyBtnLbl',\r\n    defaultMessage: 'Create Property',\r\n  },\r\n  createPropertySuccessNotification: {\r\n    id: 'siteCreationProcess.createPropertySuccessNotification',\r\n    defaultMessage: 'You’ve successfully created a new property {entityId}',\r\n  },\r\n  clarityProjectDoesNotExistNotification: {\r\n    id: 'siteCreationProcess.clarityProjectDoesNotExistNotification',\r\n    defaultMessage: 'Clarity project ID does not exist',\r\n  },\r\n  createPropertyFailedNotification: {\r\n    id: 'siteCreationProcess.createPropertyFailedNotification',\r\n    defaultMessage: 'Create properties failed, please try again later.',\r\n  },\r\n});\r\n","import * as React from 'react';\r\nimport { useEffect, useState } from 'react';\r\nimport { ClarityType, getAppStore, onNavigateBack } from '../../../../../../@data';\r\nimport { FormState, IFormEditParams } from '../../../../../../components/Form';\r\nimport { DetailPage } from '../../../../../../layout/DetailPage/DetailPage';\r\nimport { DetailPageWithStepper } from '../../../../../../layout/DetailPageWithStepper/DetailPageWithStepper';\r\nimport { IStepperStep } from '../../../../../../layout/DetailPageWithStepper/DetailPageWithStepper.types';\r\nimport { IRouterWithIntl, injectIntlWithObserver } from '../../../../../../utils';\r\nimport { getTythonInventoryPage } from '../../../../../../utils/routeUtils';\r\nimport { onFormCleared } from '../../__data__/mutatorActions';\r\nimport { IClarityParams } from '../../__data__/store/schema';\r\nimport { getCreatePropertyStore } from '../../__data__/store/store';\r\nimport useDetailsPageButtonsStatus from '../../utils/useDetailsPageButtonsStatus';\r\nimport { onFormSubmitted } from './__data__/orchestrators/formSubmitted';\r\nimport { AdsTextPage } from './components/AdsTextPage';\r\nimport { CreateProperty } from './components/CreateProperty';\r\nimport { PropertyScriptPage } from './components/ScriptPage';\r\nimport { onScriptPageSubmitted } from './components/ScriptPage/@data/actions/onScriptPageActions';\r\nimport messages from './messages';\r\n\r\ninterface ICreateTythonPropertyProps extends IRouterWithIntl<IFormEditParams> {\r\n  mode: FormState;\r\n  startStep?: number;\r\n  onSubmit?: ({ name, url, clarity }: { name: string; url: string; clarity: IClarityParams }) => void;\r\n  saving?: boolean;\r\n  onCancel?: () => void;\r\n}\r\n\r\nexport const CreateTythonProperty = injectIntlWithObserver((props: ICreateTythonPropertyProps) => {\r\n  const { id: propertyId, publisherId, accountId } = props.match.params;\r\n  const searchParams = new URLSearchParams(props.location.search);\r\n  const step = searchParams.get('step');\r\n  const { formatMessage } = props.intl;\r\n  const { active: activeProperty } = getCreatePropertyStore();\r\n  const { name, url, clarity } = activeProperty;\r\n  const { clarityType, clarityId, approvalBehavioralOption } = clarity || { clarityType: undefined };\r\n  const { titleLabel, submitLabel, onHandleSubmit, onHandleCancel } = useDetailsPageButtonsStatus(\r\n    props.history,\r\n    props.mode,\r\n    props.onSubmit,\r\n    props.onCancel,\r\n    formatMessage\r\n  );\r\n  const { saving, loading } = getAppStore();\r\n  const [isPropertyFormSubmittable, onPropertyFormSubmittable] = useState<boolean>(false);\r\n\r\n  // Evaluates whether the submit button for the CreateProperty (First step) is enabled or disabled by checking\r\n  // 1 - Property name\r\n  // 2 - Property URL\r\n  // 3 - Clarity option is advanced and user approved T&C of linking clarity OR Clarity option is basic\r\n  useEffect(() => {\r\n    if (\r\n      name &&\r\n      url &&\r\n      name?.length !== 0 &&\r\n      url?.length !== 0 &&\r\n      ((clarityType === ClarityType.Behavioral && approvalBehavioralOption === true) ||\r\n        clarityType === ClarityType.Fraud ||\r\n        (clarityType === ClarityType.None && !!clarityId && clarityId?.length !== 0))\r\n    ) {\r\n      onPropertyFormSubmittable(true);\r\n    } else {\r\n      onPropertyFormSubmittable(false);\r\n    }\r\n    // eslint-disable-next-line react-hooks/exhaustive-deps\r\n  }, [name, url, approvalBehavioralOption, clarityType, clarityId]);\r\n\r\n  const clearStores = () => {\r\n    onFormCleared();\r\n  };\r\n\r\n  const steps: IStepperStep[] = [\r\n    {\r\n      name: formatMessage(messages.CreateSiteStep),\r\n      component: <CreateProperty {...props} />,\r\n      helpId: 'pop_PCv4_PropertiesCreate',\r\n      isNextDisabled: !isPropertyFormSubmittable,\r\n      isStepDirty: propertyId !== undefined,\r\n      onNext: (action, stepState) => onFormSubmitted(props.mode, props.history, action, stepState),\r\n    },\r\n    {\r\n      name: formatMessage(messages.AdsTxtCreationStep),\r\n      isStepDirty: propertyId !== undefined,\r\n      component: <AdsTextPage {...props} />,\r\n    },\r\n    {\r\n      name: formatMessage(messages.GetCodeAndFinishStep),\r\n      component: <PropertyScriptPage {...props} />,\r\n      isStepDirty: propertyId !== undefined,\r\n      onNext: (action, _) => {\r\n        clearStores();\r\n        onScriptPageSubmitted(props.mode, props.history, action);\r\n      },\r\n    },\r\n  ];\r\n\r\n  return props.mode === FormState.InPageCreate ? (\r\n    <DetailPage\r\n      titleLabel={titleLabel}\r\n      helpId={'pop_PCv4_PropertiesCreate'}\r\n      submitLabel={submitLabel}\r\n      onCancel={() => onHandleCancel(publisherId, accountId)}\r\n      onSubmit={() => onHandleSubmit(activeProperty)}\r\n      onNavClick={() => onHandleCancel(publisherId, accountId)}\r\n      saving={saving || props.saving}\r\n      loading={loading}\r\n      pageMode={props.mode}\r\n      hasFormTitle\r\n      submitButtonDisabled={!isPropertyFormSubmittable}\r\n      additionalHeightBoundary={true}\r\n    >\r\n      <CreateProperty {...props} />\r\n    </DetailPage>\r\n  ) : (\r\n    <DetailPageWithStepper\r\n      process={\r\n        props.mode === FormState.MultiStepCreation ? formatMessage(messages.processNameCreate) : formatMessage(messages.processNameEdit)\r\n      }\r\n      openStep={(step && Number(step)) || 0}\r\n      steps={steps.filter((stepToBeFiltered) => !stepToBeFiltered.hideStep)}\r\n      pageMode={props.mode}\r\n      backToBase={() => {\r\n        clearStores();\r\n        onNavigateBack(props.history, getTythonInventoryPage());\r\n      }}\r\n      {...props}\r\n    />\r\n  );\r\n});\r\n","import { Announced, IconButton, Panel, PanelType, getTheme } from '@fluentui/react';\r\nimport React, { useEffect } from 'react';\r\nimport { InjectedIntlProps } from 'react-intl';\r\nimport { RouteComponentProps } from 'react-router-dom';\r\nimport { ClarityType } from '../../../../../../@data';\r\nimport AppMessages from '../../../../../../App.messages';\r\nimport { FormItem, FormState } from '../../../../../../components/Form';\r\nimport { useWindowSize } from '../../../../../../hooks';\r\nimport { getStore } from '../../../../../../hooks/useWindowSize/store/store';\r\nimport { IPropertyPickerItem } from '../../../../../../layout/PropertyPicker/PropertyPicker.types';\r\nimport { PropertySitePicker } from '../../../../../../layout/PropertySitePicker/PropertySitePicker';\r\nimport { IPropertySitePickerItem } from '../../../../../../layout/PropertySitePicker/PropertySitePicker.types';\r\nimport { injectIntlAndObserver } from '../../../../../../utils';\r\nimport propertyMessages from '../../../../Property/Create/variations/CreateNonTythonProperty/messages';\r\nimport { CreateTythonProperty } from '../../../../Property/Create/variations/CreateTythonProperty';\r\nimport { getClassNames } from '../../../Create/CreateAdunit';\r\nimport messages from '../../CreateAdunit/messages';\r\nimport { getStyles } from '../../CreateAdunit/styles';\r\n\r\nexport interface IAdUnitSiteSelectorProps {\r\n  options: IPropertyPickerItem[];\r\n  onAddSiteClick: () => void;\r\n  searchBoxPlaceholder: string;\r\n  onSiteChange: (item?: IPropertySitePickerItem) => void;\r\n  isPropertyPanelActive: boolean;\r\n  onCloseNewPropertyPanel: () => void;\r\n  onCreatingNewProperty: ({\r\n    name,\r\n    url,\r\n    clarityType,\r\n    clarityId,\r\n  }: {\r\n    name: string;\r\n    url: string;\r\n    clarityType?: ClarityType;\r\n    clarityId?: string;\r\n  }) => void;\r\n  isLoading?: boolean;\r\n  isSaving?: boolean;\r\n  isDisabled?: boolean;\r\n  shouldRenderComponent: boolean;\r\n}\r\n\r\nconst { windowStoreSerializer } = useWindowSize();\r\n\r\nconst AdUnitSiteSelector = injectIntlAndObserver<InjectedIntlProps & IAdUnitSiteSelectorProps & RouteComponentProps>(\r\n  ({\r\n    intl: { formatMessage },\r\n    onCloseNewPropertyPanel,\r\n    isPropertyPanelActive,\r\n    options,\r\n    searchBoxPlaceholder,\r\n    onSiteChange,\r\n    onAddSiteClick,\r\n    onCreatingNewProperty,\r\n    isLoading,\r\n    isSaving,\r\n    isDisabled,\r\n    shouldRenderComponent,\r\n    ...routeProps\r\n  }) => {\r\n    const { isWindowSmallSize } = windowStoreSerializer(getStore());\r\n\r\n    const theme = getTheme();\r\n    const classNames = getClassNames(getStyles, { theme });\r\n\r\n    /**\r\n     * we passed type = custom to Panel component, by default this will not focus to close button\r\n     * when panel expanded, based on a11y requirement we need to focus to close button when panel expanded\r\n     * so added this useEffect to focus to close button when panel expanded\r\n     */\r\n    useEffect(() => {\r\n      if (isPropertyPanelActive) {\r\n        // Adding a small delay to ensure the element is available\r\n        const timer = setTimeout(() => {\r\n          const closeButton = document.getElementById('adunit-site-panel-close-button');\r\n          if (closeButton) {\r\n            closeButton.focus();\r\n          }\r\n        }, 0); // Delay is set to 0, but it ensures it runs after the DOM update\r\n\r\n        // Cleanup the timeout if the component unmounts\r\n        return () => clearTimeout(timer);\r\n      }\r\n    }, [isPropertyPanelActive]);\r\n\r\n    return shouldRenderComponent ? (\r\n      <>\r\n        <FormItem formWidth={isWindowSmallSize ? 328 : 546}>\r\n          <div className={classNames.siteSection}>\r\n            <PropertySitePicker\r\n              title={formatMessage(messages.site)}\r\n              items={options}\r\n              searchBoxPlaceholder={searchBoxPlaceholder}\r\n              propertyOptionsAriaLabel={formatMessage(messages.propertyOptionsAriaLabel)}\r\n              onListItemClicked={onSiteChange}\r\n              emptyOptionLabel={formatMessage(messages.propertyPickerEmptyOptionLabel)}\r\n              searchBoxAriaDescription={formatMessage(messages.propertyPickerSearchBoxAriaDesc)}\r\n              itemSelectedAnnounceMessage={formatMessage(messages.propertyPickerItemSelectedAnnounceMsg)}\r\n              isLoading={isLoading}\r\n              isDisabled={isDisabled}\r\n              clearSearchOnSelect\r\n              formatMessage={formatMessage}\r\n            />\r\n            {!isDisabled && (\r\n              <button onClick={onAddSiteClick} className={classNames.button}>\r\n                {formatMessage(messages.siteButton)}\r\n              </button>\r\n            )}\r\n          </div>\r\n          <Panel\r\n            isOpen={isPropertyPanelActive}\r\n            type={PanelType.custom}\r\n            onDismiss={onCloseNewPropertyPanel}\r\n            onRenderNavigation={() => (\r\n              <IconButton\r\n                className={classNames.newPropertyPanelHeader}\r\n                iconProps={{ iconName: 'Cancel' }}\r\n                aria-label={formatMessage(AppMessages.close)}\r\n                onClick={onCloseNewPropertyPanel}\r\n                id=\"adunit-site-panel-close-button\"\r\n              />\r\n            )}\r\n            headerText={formatMessage(propertyMessages.createSitePageTitle)}\r\n            headerTextProps={{ hidden: true }}\r\n            closeButtonAriaLabel={formatMessage(messages.panelCloseButtonAriaLabel)}\r\n          >\r\n            <Announced message={formatMessage(messages.createSitePanelAccessibilityAnnouncement)} />\r\n            {isPropertyPanelActive && (\r\n              <CreateTythonProperty\r\n                {...routeProps}\r\n                onSubmit={onCreatingNewProperty}\r\n                mode={FormState.InPageCreate}\r\n                saving={isSaving}\r\n                onCancel={onCloseNewPropertyPanel}\r\n              />\r\n            )}\r\n          </Panel>\r\n        </FormItem>\r\n      </>\r\n    ) : null;\r\n  }\r\n);\r\n\r\nexport default AdUnitSiteSelector;\r\n","import { IStyle, ITheme } from '@fluentui/react';\r\nimport { IPubcenterPalette, IPubcenterSpacing } from '../../../theme';\r\n\r\nexport interface IAccordionStyleProps {\r\n  theme: ITheme;\r\n  isExpanded: boolean;\r\n  isActive: boolean;\r\n}\r\n\r\nexport interface IAccordionStyles {\r\n  accordionControlWrapper: IStyle;\r\n  accordionToggleCheckboxLabel: IStyle;\r\n  accordionContentWrapper: IStyle;\r\n  accordionChevron: IStyle;\r\n  subContentText: IStyle;\r\n}\r\n\r\nexport const getStyles = (props: IAccordionStyleProps): IAccordionStyles => {\r\n  const { theme, isExpanded } = props;\r\n  const spacing = theme.spacing as IPubcenterSpacing;\r\n  const palette = theme.palette as IPubcenterPalette;\r\n\r\n  return {\r\n    accordionControlWrapper: {\r\n      borderTopLeftRadius: spacing.size12,\r\n      borderTopRightRadius: spacing.size12,\r\n      border: `${spacing.size1} solid ${palette.neutralLight}`,\r\n      padding: `${spacing.size16} ${spacing.size18}`,\r\n      ...(!isExpanded && { borderBottomWidth: 0 }),\r\n      '&:hover': {\r\n        '.triggerIcon': {\r\n          fontWeight: 'bold',\r\n        },\r\n      },\r\n    },\r\n    accordionToggleCheckboxLabel: {\r\n      '.ms-Checkbox-text': {\r\n        fontSize: spacing.size18,\r\n        fontWeight: 600,\r\n      },\r\n    },\r\n    accordionContentWrapper: {\r\n      borderBottomLeftRadius: spacing.size12,\r\n      borderBottomRightRadius: spacing.size12,\r\n      border: `${spacing.size1} solid ${palette.neutralLight}`,\r\n      padding: `${spacing.size16}`,\r\n      borderTopWidth: 0,\r\n      ...(!isExpanded && { paddingTop: 0 }),\r\n      ...(isExpanded && { padding: 0 }),\r\n    },\r\n    accordionChevron: {\r\n      cursor: 'pointer',\r\n      padding: `${spacing.size10} ${spacing.size10} ${spacing.size10} ${spacing.size46}`,\r\n      margin: `-${spacing.size10} -${spacing.size10} -${spacing.size10} -${spacing.size46}`,\r\n      background: 'transparent',\r\n    },\r\n    subContentText: { color: palette.neutralTertiaryWhiteContrast, marginLeft: spacing.size30 },\r\n  };\r\n};\r\n","import { defineMessages } from 'react-intl';\r\n\r\nexport default defineMessages({\r\n  accordionCheckBoxArialLabelChecked: {\r\n    id: 'accordion.checkbox.arial.checked',\r\n    defaultMessage: 'Toggle checkbox to uncheck and collapse accordion for {title}',\r\n  },\r\n  accordionCheckBoxArialLabelUnchecked: {\r\n    id: 'accordion.checkbox.arial.unchecked',\r\n    defaultMessage: 'Toggle checkbox to enable and expand accordion for {title}',\r\n  },\r\n});\r\n","import { Checkbox, classNamesFunction, css, getTheme, Icon, Overlay, Stack, StackItem, Text } from '@fluentui/react';\r\nimport { useBoolean } from '@fluentui/react-hooks';\r\nimport React, { useEffect } from 'react';\r\nimport { InjectedIntlProps, injectIntl } from 'react-intl';\r\nimport { isButtonPressKey } from '../../utils/AccessibilityUtils';\r\nimport { getStyles, IAccordionStyleProps, IAccordionStyles } from './Accordion.styles';\r\nimport messages from './messages';\r\n\r\ninterface IAccordionProps {\r\n  isActive: boolean;\r\n  onToggle: (active: boolean) => void;\r\n  id: string;\r\n  label: string;\r\n  children: React.ReactNode;\r\n  subContent?: string;\r\n  wrapperClassName: string;\r\n  disableMsg?: string;\r\n  defaultExpanded?: boolean;\r\n}\r\n\r\nconst Accordion = injectIntl<InjectedIntlProps & IAccordionProps>(\r\n  ({ isActive, onToggle, id, label, children, subContent, wrapperClassName, disableMsg, defaultExpanded, intl: { formatMessage } }) => {\r\n    const theme = getTheme();\r\n    const getClassNames = classNamesFunction<IAccordionStyleProps, IAccordionStyles>();\r\n    const [isExpanded, { toggle: toggleExpand, setFalse: collapseAccordion, setTrue: expandAccordion }] = useBoolean(isActive);\r\n    const classNames = getClassNames(getStyles, { theme, isExpanded, isActive });\r\n    const onChange = (ev?: React.FormEvent<HTMLElement | HTMLInputElement>, checked?: boolean): void => {\r\n      onToggle(!!checked);\r\n      if (checked) {\r\n        expandAccordion();\r\n      } else {\r\n        collapseAccordion();\r\n      }\r\n    };\r\n\r\n    /**\r\n     * If defaultExpanded is true, expand the accordion\r\n     */\r\n    useEffect(() => {\r\n      if (defaultExpanded) {\r\n        expandAccordion();\r\n      }\r\n      // eslint-disable-next-line react-hooks/exhaustive-deps\r\n    }, []);\r\n\r\n    return (\r\n      <div className={wrapperClassName} tabIndex={0} aria-label={label + ' ' + (subContent ?? '')}>\r\n        {disableMsg && <Overlay className={wrapperClassName}>{disableMsg}</Overlay>}\r\n        <Stack enableScopedSelectors horizontal horizontalAlign=\"space-between\" className={classNames.accordionControlWrapper}>\r\n          <StackItem>\r\n            <Checkbox\r\n              className={classNames.accordionToggleCheckboxLabel}\r\n              id={`accordion-${id}`}\r\n              checked={isActive}\r\n              label={label}\r\n              onChange={onChange}\r\n              disabled={!!disableMsg}\r\n              ariaLabel={formatMessage(\r\n                isActive ? messages.accordionCheckBoxArialLabelChecked : messages.accordionCheckBoxArialLabelUnchecked,\r\n                { title: label }\r\n              )}\r\n            />\r\n          </StackItem>\r\n          <StackItem>\r\n            <Icon\r\n              onClick={toggleExpand}\r\n              onKeyDown={(ev) => isButtonPressKey(ev.key) && toggleExpand()}\r\n              iconName={isExpanded ? 'ChevronUpMed' : 'ChevronDownMed'}\r\n              aria-label={isExpanded ? 'Expanded' : 'Collapsed'}\r\n              className={css(classNames.accordionChevron, 'triggerIcon')}\r\n              tabIndex={0}\r\n            />\r\n          </StackItem>\r\n        </Stack>\r\n        <Stack enableScopedSelectors horizontal className={classNames.accordionContentWrapper}>\r\n          {isExpanded && children}\r\n          {!isExpanded && <Text className={classNames.subContentText}>{subContent}</Text>}\r\n        </Stack>\r\n      </div>\r\n    );\r\n  }\r\n);\r\n\r\nexport default Accordion;\r\n","import { defineMessages } from 'react-intl';\r\n\r\nexport default defineMessages({\r\n  themeColors: {\r\n    id: 'colorPicker.themeColors',\r\n    defaultMessage: 'Theme Colors',\r\n  },\r\n  customColor: {\r\n    id: 'colorPicker.customColor',\r\n    defaultMessage: 'Custom Color',\r\n  },\r\n  colorPicker: {\r\n    id: 'colorPicker.colorPicker',\r\n    defaultMessage: 'Pick a color',\r\n  },\r\n});\r\n","import { FontWeights, getTheme, mergeStyleSets } from '@fluentui/react';\r\nimport { IPubcenterPalette, IPubcenterSpacing } from '../../../theme';\r\nimport { IColorPickerClassNames, IColorPickerStyleProps } from './ColorPicker.types';\r\n\r\nexport const getClassNames = (props: IColorPickerStyleProps): IColorPickerClassNames => {\r\n  const theme = getTheme();\r\n  const spacing = theme.spacing as IPubcenterSpacing;\r\n  const palette = theme.palette as IPubcenterPalette;\r\n\r\n  return mergeStyleSets({\r\n    root: {\r\n      display: 'flex',\r\n      padding: `3px ${spacing.size8}`,\r\n      cursor: 'pointer',\r\n      backgroundColor: palette.white,\r\n      border: `1px solid`,\r\n      borderColor: 'transparent',\r\n      selectors: {\r\n        ':hover': {\r\n          backgroundColor: palette.neutralLighter,\r\n        },\r\n        '&:pressed': {\r\n          backgroundColor: palette.neutralLight,\r\n        },\r\n        '&:focus': {\r\n          borderRadius: '2px',\r\n          borderColor: palette.neutralSecondary,\r\n        },\r\n      },\r\n    },\r\n    container: {\r\n      display: 'relative',\r\n    },\r\n    iconContainer: {\r\n      display: 'flex',\r\n      flexDirection: 'column',\r\n      marginRight: spacing.size8,\r\n    },\r\n    bucketIcon: {\r\n      fontSize: theme.fonts.xLarge.fontSize,\r\n      color: palette.neutralPrimary,\r\n    },\r\n    chevronIcon: {\r\n      color: palette.neutralPrimary,\r\n      fontSize: theme.fonts.small.fontSize,\r\n      alignContent: 'center',\r\n      width: spacing.size12,\r\n      paddingTop: spacing.size8,\r\n    },\r\n    colorIcon: {\r\n      borderWidth: '0.5px',\r\n      borderStyle: 'solid',\r\n      borderColor: palette.neutralQuaternaryAlt,\r\n      height: spacing.size4,\r\n      backgroundColor: props.colorSelected,\r\n      marginTop: spacing.size2,\r\n    },\r\n    boldFieldTitle: {\r\n      lineHeight: spacing.size20,\r\n      fontSize: theme.fonts.medium.fontSize,\r\n      fontWeight: FontWeights.semibold,\r\n      color: palette.neutralPrimary,\r\n    },\r\n    swatchColorPickerCallout: {\r\n      padding: spacing.size12,\r\n      width: 'fit-content',\r\n      backgroundColor: palette.white,\r\n      gap: spacing.size8,\r\n      position: 'absolute',\r\n      boxShadow: '0px 1.2px 3.6px rgba(0,0,0.1), 0px 6.4px 14.4px rgba(0,0,0.13)',\r\n    },\r\n  });\r\n};\r\n","import { IColorCellProps } from '@fluentui/react';\r\n\r\nexport const swatchColors: IColorCellProps[] = [\r\n  { id: 'a', label: 'Soft peach', color: '#f8ece9' },\r\n  { id: 'b', label: 'Early dawn', color: '#fdf8e8' },\r\n  { id: 'c', label: 'White smoke', color: '#f0f7ef' },\r\n  { id: 'd', label: 'Porcelain', color: '#e8effd' },\r\n  { id: 'e', label: 'Amour', color: '#f4ecf7' },\r\n  { id: 'f', label: 'White', color: '#ffffff' },\r\n  { id: 'g', label: 'Pale rose', color: '#edc9c4' },\r\n  { id: 'h', label: 'Pale peach', color: '#f9e9b8' },\r\n  { id: 'i', label: 'Beryl green', color: '#cee5cb' },\r\n  { id: 'j', label: 'Light blue', color: '#cad9f9' },\r\n  { id: 'k', label: 'Pink flare', color: '#dbbfe4' },\r\n  { id: 'l', label: 'Light grey', color: '#dddddd' },\r\n  { id: 'm', label: 'Faded red', color: '#ca5040' },\r\n  { id: 'n', label: 'Light orange', color: '#eab73e' },\r\n  { id: 'o', label: 'Dull green', color: '#67ad5b' },\r\n  { id: 'p', label: 'Soft blue', color: '#5383ec' },\r\n  { id: 'q', label: 'Warm purple', color: '#9031aa' },\r\n  { id: 'r', label: 'Grey', color: '#777777' },\r\n  { id: 's', label: 'Brownish red', color: '#ab3d2b' },\r\n  { id: 't', label: 'Orange', color: '#e08731' },\r\n  { id: 'u', label: 'Green', color: '#326f3e' },\r\n  { id: 'v', label: 'Blue', color: '#3555bf' },\r\n  { id: 'w', label: 'Purple', color: '#612194' },\r\n  { id: 'x', label: 'Black', color: '#3a474e' },\r\n];\r\n\r\nexport const defaultColor = '#ffffff';\r\n\r\nexport const getColorByHex = (hex: string): IColorCellProps | undefined => {\r\n  return swatchColors.find((color) => color.color === hex.toLocaleLowerCase());\r\n};\r\n","import {\r\n  Callout,\r\n  DirectionalHint,\r\n  FocusZone,\r\n  FocusZoneTabbableElements,\r\n  getId,\r\n  Icon,\r\n  MaskedTextField,\r\n  SwatchColorPicker,\r\n} from '@fluentui/react';\r\nimport React, { useEffect, useRef, useState } from 'react';\r\nimport { injectIntl } from 'react-intl';\r\nimport { isButtonPressKey } from '../../utils/AccessibilityUtils';\r\nimport messages from './ColorPicker.messages';\r\nimport { getClassNames } from './ColorPicker.styles';\r\nimport { IColorPickerProps } from './ColorPicker.types';\r\nimport { defaultColor, getColorByHex, swatchColors } from './swatchColors';\r\n\r\nconst HEX_COLOR_PREFIX = 'Hex ';\r\nconst HEX_CHARACTER_REGEX = /[0-9a-fA-F]/;\r\nconst HEX_MASK_REGEX = /(Hex )*(_)*/g;\r\n\r\nexport const ColorPicker = injectIntl(function ColorPickerComponent(props: IColorPickerProps): JSX.Element {\r\n  const [color, setColor] = useState(props.selectedColor || props.defaultColor || defaultColor);\r\n  const [calloutVisible, setCalloutVisible] = useState(false);\r\n  const [customColor, setCustomColor] = useState(\r\n    swatchColors.find((swatchColor) => swatchColor.color === props.selectedColor) ? undefined : props.selectedColor\r\n  );\r\n  const [buttonId] = useState(getId('colorPicker'));\r\n  const colorPickerButtonRef = useRef<HTMLButtonElement>(null);\r\n  const classNames = getClassNames({ colorSelected: customColor ?? color });\r\n  const { formatMessage } = props.intl;\r\n\r\n  function handleColorChanged(_color: string) {\r\n    setColor(_color);\r\n    setCalloutVisible(false);\r\n    setCustomColor(undefined);\r\n\r\n    props.onChange?.(_color);\r\n  }\r\n  function handleHexCodeFieldChanged(ev) {\r\n    const hexValue = ev.target.value.replaceAll(HEX_MASK_REGEX, '');\r\n    if (hexValue !== '#') {\r\n      setCustomColor(hexValue);\r\n      setColor(color || defaultColor);\r\n      props.onChange?.(hexValue);\r\n    }\r\n  }\r\n\r\n  useEffect(() => {\r\n    if (props.selectedColor && props.controlled) {\r\n      setColor(props.selectedColor);\r\n    }\r\n  }, [props.selectedColor, props.controlled]);\r\n\r\n  const onCalloutDismiss = () => {\r\n    setCalloutVisible(false);\r\n    colorPickerButtonRef?.current?.focus();\r\n  };\r\n  return (\r\n    <div className={classNames.container}>\r\n      <button\r\n        type=\"button\"\r\n        title={\r\n          formatMessage(messages.colorPicker) +\r\n          (props.colorType ? ` for ${props.colorType}` : '') +\r\n          ` selected: ${color || customColor || ''}`\r\n        }\r\n        id={buttonId}\r\n        className={classNames.root}\r\n        onClick={() => setCalloutVisible(true)}\r\n        onKeyDown={(ev) => isButtonPressKey(ev.key) && setCalloutVisible(true)}\r\n        ref={colorPickerButtonRef}\r\n      >\r\n        <div className={classNames.iconContainer}>\r\n          <Icon iconName=\"BucketColor\" className={classNames.bucketIcon} />\r\n          <div className={classNames.colorIcon} />\r\n        </div>\r\n        <Icon iconName=\"ChevronDown\" className={classNames.chevronIcon} />\r\n      </button>\r\n      {calloutVisible && (\r\n        <Callout\r\n          className={`${classNames.swatchColorPickerCallout} ms-Fabric--isFocusVisible`}\r\n          target={`#${buttonId}`}\r\n          role=\"dialog\"\r\n          onDismiss={onCalloutDismiss}\r\n          isBeakVisible={false}\r\n          setInitialFocus={true}\r\n          directionalHint={DirectionalHint.bottomRightEdge}\r\n          ariaLabel=\"Color picker\"\r\n        >\r\n          <label className={classNames.boldFieldTitle}>{formatMessage(messages.themeColors)}</label>\r\n          <FocusZone handleTabKey={FocusZoneTabbableElements.all} isCircularNavigation defaultTabbableElement={'#swatchColorPicker-b-1'}>\r\n            <SwatchColorPicker\r\n              colorCells={swatchColors}\r\n              columnCount={6}\r\n              cellShape={'circle'}\r\n              defaultSelectedId={customColor ? undefined : getColorByHex(color)?.id || getColorByHex(defaultColor)?.id}\r\n              onChange={(_, id, _color) => handleColorChanged(_color || defaultColor)}\r\n              id=\"swatchColorPicker\"\r\n              doNotContainWithinFocusZone\r\n            />\r\n            <MaskedTextField\r\n              label={formatMessage(messages.customColor)}\r\n              mask={`${HEX_COLOR_PREFIX}#******`}\r\n              value={customColor}\r\n              maskFormat={{ '*': HEX_CHARACTER_REGEX }}\r\n              onBlur={handleHexCodeFieldChanged}\r\n              onKeyUp={(ev) => isButtonPressKey(ev.key) && handleHexCodeFieldChanged(ev)}\r\n            />\r\n          </FocusZone>\r\n        </Callout>\r\n      )}\r\n    </div>\r\n  );\r\n});\r\n","import { IDropdownOption } from '@fluentui/react';\r\n\r\nexport const fontOptions: IDropdownOption[] = [\r\n  { key: 'Arial', text: 'Arial' },\r\n  { key: 'Arial Black', text: 'Arial Black' },\r\n  { key: 'Calibri', text: 'Calibri' },\r\n  { key: 'Calibri Light', text: 'Calibri Light' },\r\n  { key: 'Cambria', text: 'Cambria' },\r\n  { key: 'Comic Sans MS', text: 'Comic Sans MS' },\r\n  { key: 'Courier New', text: 'Courier New' },\r\n  { key: 'Garamond', text: 'Garamond' },\r\n  { key: 'Georgia', text: 'Georgia' },\r\n  { key: 'Helvetica', text: 'Helvetica' },\r\n  { key: 'Impact', text: 'Impact' },\r\n  // Removing these fonts temporarily, as they are not being reflected in UI\r\n  // { key: 'Lato', text: 'Lato' },\r\n  // { key: 'Open Sans', text: 'Open Sans' },\r\n  // { key: 'Poppins', text: 'Poppins' },\r\n  // { key: 'Roboto', text: 'Roboto' },\r\n  // { key: 'Raleway', text: 'Raleway' },\r\n  { key: 'Segoe UI', text: 'Segoe UI' },\r\n  { key: 'Sitka Heading', text: 'Sitka Heading' },\r\n  { key: 'Tahoma', text: 'Tahoma' },\r\n  { key: 'Times New Roman', text: 'Times New Roman' },\r\n  { key: 'Verdana', text: 'Verdana' },\r\n];\r\n","import React, { useEffect, useRef } from 'react';\r\nimport { InjectedIntl, injectIntl } from 'react-intl';\r\nimport messages from '../../CreateAdunit/messages';\r\n\r\ntype AdPreviewType = (container: HTMLDivElement | null) => void;\r\ndeclare global {\r\n  // tslint:disable-next-line:interface-name\r\n  interface Window {\r\n    AdPreview: AdPreviewType;\r\n  }\r\n}\r\n\r\nexport interface IAdPreviewConfig {\r\n  adWidth: number;\r\n  adHeight: number;\r\n  background?: string;\r\n  fontFamily?: string;\r\n  titleColor?: string;\r\n  buttonBackground?: string;\r\n}\r\n\r\ninterface IAdPreviewProps {\r\n  config: IAdPreviewConfig;\r\n}\r\n\r\nconst AdPreview: React.FC<IAdPreviewProps & { intl: InjectedIntl }> = ({ config, intl: { formatMessage } }) => {\r\n  const containerRef = useRef<HTMLDivElement>(null);\r\n  const adPreviewRef = useRef<null | {\r\n    render: (\r\n      config,\r\n      secondaryConfigs?: { image: { src: string; width: number; height: number }; title: string; providerName: string; ctaText: string }\r\n    ) => void;\r\n  }>(null); // new ref to store adPreview instance\r\n\r\n  useEffect(() => {\r\n    const container = containerRef.current;\r\n    if (container && window.AdPreview) {\r\n      adPreviewRef.current = new window.AdPreview(container);\r\n    }\r\n  }, []); // Empty array to only run once\r\n\r\n  useEffect(() => {\r\n    if (adPreviewRef.current) {\r\n      adPreviewRef.current.render(config, {\r\n        image: {\r\n          src: 'https://adsdk.microsoft.com/assets/images/ad-preview.png',\r\n          width: config.adWidth,\r\n          height: config.adHeight,\r\n        },\r\n        title: formatMessage(messages.nativeAdPreviewPreviewTitle),\r\n        providerName: formatMessage(messages.nativeAdPreviewPreviewUrl),\r\n        ctaText: formatMessage(messages.displayAdPreviewLearnMoreButton),\r\n      });\r\n    } // eslint-disable-next-line react-hooks/exhaustive-deps\r\n  }, [config]); // Run every time config changes\r\n\r\n  return <div ref={containerRef} />;\r\n};\r\n\r\nexport default injectIntl(AdPreview);\r\n","import { Dropdown, MessageBar, Pivot, PivotItem, Stack, Text, TextField, css, getTheme } from '@fluentui/react';\r\nimport React from 'react';\r\nimport { FormattedMessage, InjectedIntlProps, injectIntl } from 'react-intl';\r\nimport Accordion from '../../../../../../components/Accordion';\r\nimport { ColorPicker } from '../../../../../../components/ColorPicker/ColorPicker';\r\nimport { FormLabel } from '../../../../../../components/Form/FormLabel';\r\nimport { useCMUIHelpExperience } from '../../../../../../hooks';\r\nimport { getClassNames } from '../../../Create/CreateAdunit';\r\nimport { TythonAdUnitDisplayAdTypeLayout, TythonAdUnitDisplayAdTypeLayoutLabel } from '../../CreateAdunit/constants';\r\nimport messages from '../../CreateAdunit/messages';\r\nimport { getStyles } from '../../CreateAdunit/styles';\r\nimport { AdTypes, NativeAdProperties } from '../../CreateAdunit/types';\r\nimport AutoFitHeight from '../../resources/AutoFitHeight.svg';\r\nimport AutoFitWidth from '../../resources/AutoFitWidth.svg';\r\nimport HorizontalBottomAdPreview from '../../resources/HorizontalBottomAdPreview.svg';\r\nimport HorizontalUpperAdPreview from '../../resources/HorizontalUpperAdPreview.svg';\r\nimport SquareBottomAdPreview from '../../resources/SquareBottomAdPreview.svg';\r\nimport SquareLeftAdPreview from '../../resources/SquareLeftAdPreview.svg';\r\nimport VerticalBottomAdPreview from '../../resources/VerticalBottomAdPreview.svg';\r\nimport VerticalLeftAdPreview from '../../resources/VerticalLeftAdPreview.svg';\r\nimport { fontOptions } from '../../services/fontOptions';\r\nimport AdPreview from './PreviewComponent';\r\nimport useAdUnitTypeSelector from './useAdUnitTypeSelector';\r\n\r\nexport interface IAdUnitTypeSelectorProps {\r\n  adTypes: AdTypes;\r\n  nativeProperties: NativeAdProperties;\r\n  shouldRenderComponent?: boolean;\r\n  isLoading?: boolean;\r\n  onChange: ({ adTypes, nativeProperties }: { adTypes?: AdTypes; nativeProperties?: NativeAdProperties }) => void;\r\n}\r\n\r\nconst AdUnitTypeSelector = injectIntl<InjectedIntlProps & IAdUnitTypeSelectorProps>(\r\n  ({ intl, shouldRenderComponent, isLoading, ...props }) => {\r\n    if (!shouldRenderComponent) {\r\n      return null;\r\n    }\r\n    const theme = getTheme();\r\n    const { formatMessage } = intl;\r\n    const {\r\n      isSdkLoaded,\r\n      adPreviewConfig,\r\n      isNativeAdActive,\r\n      isDisplayAdActive,\r\n      shouldRenderFewerSelectionMsg,\r\n      shouldRenderNoSelectionMsg,\r\n      displayAdLayout,\r\n      onDisaplayAdLayoutChange,\r\n      onToggleNativeAd,\r\n      onToggleDisplayAd,\r\n      onAdPreviewConfigChange,\r\n    } = useAdUnitTypeSelector({ ...props });\r\n    const { CMUIPopupArticleByIdAnchor } = useCMUIHelpExperience();\r\n\r\n    const classNames = getClassNames(getStyles, { theme, displayAdLayout });\r\n\r\n    return (\r\n      <div className={classNames.adTypeContainer}>\r\n        <FormLabel\r\n          id=\"adunitTypeLabel\"\r\n          labelContent={formatMessage(messages.adunitType)}\r\n          intl={intl}\r\n          labelRequired\r\n          noInfoButton\r\n          disableHeading\r\n          disableAriaLevel\r\n        />\r\n        <Accordion\r\n          isActive={isNativeAdActive}\r\n          onToggle={onToggleNativeAd}\r\n          id=\"adUnit-native-ad-selector\"\r\n          label={formatMessage(messages.nativeAd)}\r\n          subContent={formatMessage(messages.nativeAdSubContent)}\r\n          wrapperClassName={classNames.adunitTypeAccordionWrapper}\r\n        >\r\n          <Stack enableScopedSelectors horizontal className={classNames.adunitTypeAccordionContentWrapper}>\r\n            <Stack.Item className={classNames.adunitTypeLeftSection}>\r\n              <div className=\"nativeAdType\">\r\n                <Text className={classNames.adunitTypeFormTitlePrimary} block role=\"heading\" aria-level={2}>\r\n                  {formatMessage(messages.nativeAdConfigLabel)}\r\n                </Text>\r\n                {/* Font selection */}\r\n                <Dropdown\r\n                  label={formatMessage(messages.nativeAdConfigLabelFont)}\r\n                  options={fontOptions}\r\n                  selectedKey={adPreviewConfig.fontFamily}\r\n                  onChange={(_, option) => onAdPreviewConfigChange('fontFamily', option!.text)}\r\n                />\r\n                {/* Title color selection */}\r\n                <div className={classNames.horizontalSelectionWrapper}>\r\n                  <label className={classNames.boldFieldTitle}>{formatMessage(messages.nativeAdConfigLabelTitleColor)}</label>\r\n                  <ColorPicker\r\n                    selectedColor={adPreviewConfig.titleColor}\r\n                    onChange={(color) => onAdPreviewConfigChange('titleColor', color)}\r\n                    colorType={formatMessage(messages.nativeAdConfigLabelTitleColor)}\r\n                  />\r\n                </div>\r\n                {/* Background color selection */}\r\n                <div className={classNames.horizontalSelectionWrapper}>\r\n                  <label className={classNames.boldFieldTitle}>{formatMessage(messages.nativeAdConfigLabelBackgroundColor)}</label>\r\n                  <ColorPicker\r\n                    selectedColor={adPreviewConfig.background}\r\n                    onChange={(color) => onAdPreviewConfigChange('background', color)}\r\n                    colorType={formatMessage(messages.nativeAdConfigLabelBackgroundColor)}\r\n                  />\r\n                </div>\r\n                {/* Botton background color selection */}\r\n                <div className={classNames.horizontalSelectionWrapper}>\r\n                  <label className={classNames.boldFieldTitle}>{formatMessage(messages.nativeAdConfigLabelButtonBackgroundColor)}</label>\r\n                  <ColorPicker\r\n                    selectedColor={adPreviewConfig.buttonBackground}\r\n                    onChange={(color) => onAdPreviewConfigChange('buttonBackground', color)}\r\n                    colorType={formatMessage(messages.nativeAdConfigLabelButtonBackgroundColor)}\r\n                  />\r\n                </div>\r\n                <br />\r\n                <MessageBar messageBarType={0} className={classNames.infoMsgBar}>\r\n                  {formatMessage(messages.nativeAdConfigMsgBarContent)}\r\n                </MessageBar>\r\n              </div>\r\n            </Stack.Item>\r\n            <Stack.Item className={css(classNames.adunitTypeRightSection, classNames.adPreviewWrapper)}>\r\n              <div>\r\n                <Text className={classNames.adunitTypeFormTitlePrimary} block role=\"heading\" aria-level={2}>\r\n                  {formatMessage(messages.adPreview)}\r\n                </Text>\r\n                <div className={classNames.horizontalSelectionWrapper}>\r\n                  <label className={classNames.boldFieldTitle}>\r\n                    {formatMessage(messages.adPreviewContainerSize)}&nbsp;&nbsp;&nbsp;&nbsp;\r\n                  </label>\r\n                  <TextField\r\n                    id=\"adCardWidthTextBox\"\r\n                    ariaLabel=\"adjustWidth\"\r\n                    styles={classNames.subComponentStyles.textBox}\r\n                    value={adPreviewConfig.adWidth.toString()}\r\n                    onChange={(_, val) => onAdPreviewConfigChange('adWidth', val)}\r\n                    type=\"number\"\r\n                    onRenderPrefix={() => (\r\n                      <img className={classNames.expandIcon} src={AutoFitWidth} alt={formatMessage(messages.adPreviewHorizontal)} />\r\n                    )}\r\n                  />\r\n                  <label className={classNames.boldFieldTitle}>&nbsp;&nbsp;X&nbsp;&nbsp;</label>\r\n                  <TextField\r\n                    id=\"adCardHeightTextBox\"\r\n                    ariaLabel=\"adjustHeight\"\r\n                    styles={classNames.subComponentStyles.textBox}\r\n                    value={adPreviewConfig.adHeight.toString()}\r\n                    onChange={(_, val) => onAdPreviewConfigChange('adHeight', val)}\r\n                    type=\"number\"\r\n                    onRenderPrefix={() => (\r\n                      <img className={classNames.expandIcon} src={AutoFitHeight} alt={formatMessage(messages.adPreviewVertical)} />\r\n                    )}\r\n                  />\r\n                </div>\r\n                <br />\r\n                <div className={classNames.previewSDKWrapper}>{isSdkLoaded && <AdPreview config={{ ...adPreviewConfig }} />}</div>\r\n              </div>\r\n            </Stack.Item>\r\n          </Stack>\r\n        </Accordion>\r\n        <br />\r\n        <Accordion\r\n          isActive={isDisplayAdActive}\r\n          onToggle={onToggleDisplayAd}\r\n          id=\"adUnit-display-ad-selector\"\r\n          label={formatMessage(messages.displayAd)}\r\n          subContent={formatMessage(messages.displayAdSubContent)}\r\n          wrapperClassName={classNames.adunitTypeAccordionWrapper}\r\n        >\r\n          <Stack enableScopedSelectors horizontal className={classNames.adunitTypeAccordionContentWrapper}>\r\n            <Stack.Item className={classNames.adunitTypeLeftSection}>\r\n              <MessageBar messageBarType={0} className={classNames.infoMsgBar}>\r\n                <FormattedMessage\r\n                  {...messages.displayAdMsgBarContent}\r\n                  values={{\r\n                    displayAdMsgBarLink: <CMUIPopupArticleByIdAnchor query=\"ext07504\" name={formatMessage(messages.displayAdMsgBarLink)} />,\r\n                  }}\r\n                />\r\n              </MessageBar>\r\n            </Stack.Item>\r\n            <Stack.Item className={css(classNames.adunitTypeRightSection, classNames.adPreviewWrapper)}>\r\n              <div className={classNames.adunitTypeDisplayAdPreviewHead}>\r\n                <Text className={classNames.adunitTypeFormTitlePrimary} block role=\"heading\" aria-level={2}>\r\n                  {formatMessage(messages.adPreview)}\r\n                </Text>\r\n                <div className={classNames.adunitTypeDisplayAdPreviewHeadButtons}>\r\n                  <Pivot\r\n                    aria-label={formatMessage(messages.selectDisplayAdLayout)}\r\n                    linkSize=\"normal\"\r\n                    linkFormat=\"tabs\"\r\n                    onLinkClick={(a) => onDisaplayAdLayoutChange(a?.props.itemKey as TythonAdUnitDisplayAdTypeLayout)}\r\n                    selectedKey={displayAdLayout}\r\n                  >\r\n                    {Object.values(TythonAdUnitDisplayAdTypeLayout).map((layoutKey) => (\r\n                      <PivotItem\r\n                        headerText={formatMessage(\r\n                          messages[\r\n                            TythonAdUnitDisplayAdTypeLayoutLabel[\r\n                              Object.keys(TythonAdUnitDisplayAdTypeLayout)[\r\n                                Object.values(TythonAdUnitDisplayAdTypeLayout).indexOf(layoutKey)\r\n                              ]\r\n                            ]\r\n                          ]\r\n                        )}\r\n                        itemKey={layoutKey}\r\n                      />\r\n                    ))}\r\n                  </Pivot>\r\n                </div>\r\n              </div>\r\n              <div>\r\n                <div className={classNames.adunitTypeDisplayAdPreviewLayoutWrapper}>\r\n                  <div className={classNames.adunitTypeDisplayAdPreviewContainer}>\r\n                    <Text className={classNames.displayAdPreviewExampleTitle} block>\r\n                      {formatMessage(messages.displayAdPreviewExamplePrimaryTitle)}\r\n                    </Text>\r\n                    {displayAdLayout === TythonAdUnitDisplayAdTypeLayout.Horizontal && (\r\n                      <img src={HorizontalUpperAdPreview} alt={formatMessage(messages.adPreview)} />\r\n                    )}\r\n                    {displayAdLayout === TythonAdUnitDisplayAdTypeLayout.Square && (\r\n                      <img src={SquareLeftAdPreview} alt={formatMessage(messages.adPreview)} />\r\n                    )}\r\n                    {displayAdLayout === TythonAdUnitDisplayAdTypeLayout.Vertical && (\r\n                      <img src={VerticalLeftAdPreview} alt={formatMessage(messages.adPreview)} />\r\n                    )}\r\n                  </div>\r\n                  <div className={classNames.adunitTypeDisplayAdPreviewContainer}>\r\n                    <Text className={classNames.displayAdPreviewExampleTitle} block>\r\n                      {formatMessage(messages.displayAdPreviewExampleSecondaryTitle)}\r\n                    </Text>\r\n                    {displayAdLayout === TythonAdUnitDisplayAdTypeLayout.Horizontal && (\r\n                      <img src={HorizontalBottomAdPreview} alt={formatMessage(messages.adPreview)} />\r\n                    )}\r\n                    {displayAdLayout === TythonAdUnitDisplayAdTypeLayout.Square && (\r\n                      <img src={SquareBottomAdPreview} alt={formatMessage(messages.adPreview)} />\r\n                    )}\r\n                    {displayAdLayout === TythonAdUnitDisplayAdTypeLayout.Vertical && (\r\n                      <img\r\n                        className={classNames.verticalAdPreviewBottomWrapper}\r\n                        src={VerticalBottomAdPreview}\r\n                        alt={formatMessage(messages.adPreview)}\r\n                      />\r\n                    )}\r\n                  </div>\r\n                </div>\r\n              </div>\r\n            </Stack.Item>\r\n          </Stack>\r\n        </Accordion>\r\n        <br />\r\n        {shouldRenderNoSelectionMsg && !isLoading && (\r\n          <MessageBar messageBarType={1} className={classNames.adunitTypeWarningMsgBar}>\r\n            {formatMessage(messages.warningAdUnitTypeNotSelected)}\r\n          </MessageBar>\r\n        )}\r\n        {shouldRenderFewerSelectionMsg && !isLoading && (\r\n          <MessageBar messageBarType={5} className={classNames.adunitTypeWarningMsgBar}>\r\n            {formatMessage(messages.warningAdUnitTypeNotFullySelected)}\r\n          </MessageBar>\r\n        )}\r\n        <br />\r\n        <br />\r\n      </div>\r\n    );\r\n  }\r\n);\r\n\r\nexport default AdUnitTypeSelector;\r\n","import { Log } from '../../../../../../logging/src';\r\nimport {\r\n  InventoryPlatformType,\r\n  NotificationLabel,\r\n  NotificationSeverity,\r\n  Property,\r\n  Publisher,\r\n  UserContext,\r\n  listEntity,\r\n  onNotificationCardAdded,\r\n} from '../../../../../@data';\r\nimport { PropertyServingConfigs } from '../../../../../@data/store/schema/models/ServingConfigs';\r\nimport notificationMessages from '../../../../../NotificationsPanel.Types.messages';\r\nimport { IPropertySitePickerItem } from '../../../../../layout/PropertySitePicker/PropertySitePicker.types';\r\nimport { setPropertyData } from '../../../Property/Manage/__data__/mutatorActions';\r\n\r\nexport const fetchProperties = async (\r\n  publisher: Publisher,\r\n  userContext?: UserContext,\r\n  updateLoadingStatus?: (isLoading: boolean) => void\r\n) => {\r\n  let data;\r\n  updateLoadingStatus?.(true);\r\n  try {\r\n    const propertiesPromise = listEntity([publisher!], userContext, Property);\r\n    const propertyConfigsPromise = listEntity([publisher], userContext, PropertyServingConfigs);\r\n    const [properties, propertyConfigs] = await Promise.all([propertiesPromise, propertyConfigsPromise]);\r\n    data = properties.filter(\r\n      (p) => p.id && propertyConfigs.some((pc) => pc.propertyId === p.id && pc.inventoryPlatformType !== InventoryPlatformType.UWP)\r\n    );\r\n  } catch (e) {\r\n    onNotificationCardAdded({\r\n      // tslint:disable-next-line: no-any\r\n      severity: NotificationSeverity.Error,\r\n      titleMessageDescriptor: notificationMessages.LoadingSitesFailedTitle,\r\n      contentMessageDescriptor: notificationMessages.LoadingSitesFailedContent,\r\n      notificationLabel: NotificationLabel.LoadingSitesFailed,\r\n    });\r\n    Log.error(`properties failed to fetch ${e}`);\r\n  } finally {\r\n    updateLoadingStatus?.(false);\r\n    if (!data) {\r\n      return [];\r\n    }\r\n    Log.info('Properties fetched in ad unit builder form');\r\n    setPropertyData(data);\r\n    return data;\r\n  }\r\n};\r\n\r\nexport const propertySerializer = (properties: Property[]): IPropertySitePickerItem[] => properties.map((p) => ({ id: p.id, url: p.url }));\r\n","import { Property } from '../../../../../@data';\r\n\r\nexport const getSiteSelectionSummary = (properties: Property[], propertyId?: number): string | undefined => {\r\n  if (!propertyId) {\r\n    return undefined;\r\n  }\r\n\r\n  const property = properties.find((p) => p.id === propertyId);\r\n\r\n  return property ? `${property.id} - ${property.url}` : undefined;\r\n};\r\n","import { MessageBarType } from '@fluentui/react';\r\nimport { InjectedIntl } from 'react-intl';\r\nimport { Log } from '../../../../../../logging/src';\r\nimport { Publisher, TythonAdUnit, TythonAdUnitServingConfig, UserContext, listEntity, onNotificationChanged } from '../../../../../@data';\r\nimport messages from '../CreateAdunit/messages';\r\n\r\nexport const fetchTythonAdUnitById = async (\r\n  publisher: Publisher,\r\n  userContext: UserContext,\r\n  id: string,\r\n  formatMessage: InjectedIntl['formatMessage'],\r\n  updateLoadingStatus?: (isLoading: boolean) => void\r\n): Promise<TythonAdUnitServingConfig> => {\r\n  updateLoadingStatus?.(true);\r\n  try {\r\n    // Instantiate a new TythonAdUnit and assign the id\r\n    const adUnit = new TythonAdUnit(id);\r\n    adUnit.className = `adunits`;\r\n    // Construct the URL parameters\r\n    const urlParams = new URLSearchParams([['extendedinfo', 'true']]);\r\n\r\n    // Call listEntity with the publisher and AdUnit models, passing `undefined` for the `entity` parameter\r\n    const data = await listEntity([publisher, adUnit], userContext, TythonAdUnit, urlParams);\r\n\r\n    updateLoadingStatus?.(false);\r\n\r\n    return (data as unknown) as TythonAdUnitServingConfig;\r\n  } catch (e) {\r\n    updateLoadingStatus?.(false);\r\n    onNotificationChanged({ messageBarType: MessageBarType.error, text: formatMessage(messages.failedLoadAdUnitNotification) });\r\n    Log.error(`Load tython adunit by id(${id}) failed - ${e}`);\r\n    return Promise.reject();\r\n  }\r\n};\r\n","import { MessageBarType } from '@fluentui/react';\r\nimport { useEffect, useMemo, useRef, useState } from 'react';\r\nimport { InjectedIntl } from 'react-intl';\r\nimport { Log } from '../../../../../../logging/src';\r\nimport {\r\n  AdUnit,\r\n  ClarityType,\r\n  IAppState,\r\n  Property,\r\n  TythonAdUnitServingConfig,\r\n  listEntity,\r\n  onNotificationChanged,\r\n} from '../../../../../@data';\r\nimport { useStateWithLatestCallback } from '../../../../../hooks';\r\nimport { IGoogleAdSenseViewState } from '../../../Account/Settings/components/GoogleConnector/@data';\r\nimport { onInitializeGoogleAccount as fetchAdSenseAccountStatus } from '../../../Account/Settings/components/GoogleConnector/@data/actions';\r\nimport { fetchPropertyById } from '../../../Property/@data/services/PropertyService';\r\nimport { createProperty as createPropertyService } from '../../../Property/Create/variations/CreateTythonProperty/__data__/services/createProperty';\r\nimport { fetchAdunitMediationStatus } from '../../@data/services/AdunitService';\r\nimport { IAdunitViewState } from '../../@data/store/schema/IAdunitViewState';\r\nimport messages from '../../Create/CreateAdunit.messages';\r\nimport { fetchProperties } from '../services/loadProperties';\r\nimport { fetchTythonAdUnitById } from '../services/loadTythonAdUnitById';\r\nimport {\r\n  DEFAULT_AD_PREVIEW_BACKGROUND_COLOR,\r\n  DEFAULT_AD_PREVIEW_BUTTON_BACKGROUND_COLOR,\r\n  DEFAULT_AD_PREVIEW_FONT,\r\n  DEFAULT_AD_PREVIEW_TITLE_BACKGROUND_COLOR,\r\n  TythonAdTypes,\r\n} from './constants';\r\nimport { AdTypes, ITythonAdUnit, NativeAdProperties } from './types';\r\n\r\nexport type UseAdUnitData = ({\r\n  appStore,\r\n  googleAdsenseStore,\r\n  onPropertyCreated,\r\n  formatMessage,\r\n}: {\r\n  appStore: IAppState;\r\n  googleAdsenseStore: IGoogleAdSenseViewState;\r\n  onPropertyCreated: () => void;\r\n  adUnitsStore: IAdunitViewState;\r\n  formatMessage: InjectedIntl['formatMessage'];\r\n}) => {\r\n  properties: Property[];\r\n  isPropertyLoading: boolean;\r\n  isPropertySaving: boolean;\r\n  getActiveAdunit: () => ITythonAdUnit | undefined;\r\n  activeAdunit: ITythonAdUnit | undefined;\r\n  setActiveAdunit: (adunit: ITythonAdUnit | undefined) => void;\r\n  createProperty: (property: { url: string; name: string; clarityType?: ClarityType; clarityId?: string }) => void;\r\n  isAdUnitSaving: boolean;\r\n  isValidAdUnit: boolean;\r\n  isAdUnitLoading: boolean;\r\n  isAdUnitMediationLoading: boolean;\r\n  initialAdUnit: ITythonAdUnit | undefined;\r\n  setIsAdUnitSaving: (isLoading: boolean) => void;\r\n  isAdUnitInitialized: boolean;\r\n};\r\n\r\nconst extractAdUnitId = (url: string): string | null => {\r\n  const regex = /\\/adunit\\/edit\\/(\\d+)/;\r\n  const match = url.match(regex);\r\n  return match ? match[1] : null;\r\n};\r\n\r\nexport const convertToTythonAdUnitViewState = (data: TythonAdUnitServingConfig): ITythonAdUnit => ({\r\n  id: data.adUnitId,\r\n  accountId: data.accountId,\r\n  propertyId: data.propertyId,\r\n  name: data.adUnitName,\r\n  adTypes: data.adTypes as AdTypes,\r\n  nativeProperties: data.nativeProperties as NativeAdProperties,\r\n  mediationEnabled: false, // this field is not present in your mock data\r\n  raw: data as { id?: number },\r\n});\r\n\r\nexport const getLargestAdUnitNumber = (arr: string[]): number => {\r\n  let max = arr.length + 1; // Initialize to length of array + 1\r\n\r\n  arr.forEach((str) => {\r\n    const match = str.match(/^Ad Unit (\\d+)$/); // The regex now ensures that only numbers follow \"Ad Unit \"\r\n    if (match && match[1]) {\r\n      const num = parseInt(match[1], 10) + 1;\r\n      max = Math.max(max, num);\r\n    }\r\n  });\r\n  return max;\r\n};\r\n\r\n/**\r\n * This hook mainly provides data and render state for ad unit form, it will take appStore and\r\n * goggleAdsenseStore to understand ad unit creation page render behavior\r\n */\r\nconst useAdUnitData: UseAdUnitData = ({ appStore, googleAdsenseStore, onPropertyCreated, adUnitsStore, formatMessage }) => {\r\n  const [properties, setProperties] = useState<Property[]>([]);\r\n  const [isPropertyLoading, setIsPropertyLoading] = useState<boolean>(false);\r\n  const [isPropertySaving, setIsPropertySaving] = useState<boolean>(false);\r\n  const [isAdUnitLoading, setIsAdUnitLoading] = useState<boolean>(false);\r\n  const [isAdUnitMediationLoading, setIsAdUnitMediationLoading] = useState<boolean>(false);\r\n  const [isAdUnitSaving, setIsAdUnitSaving] = useState<boolean>(false);\r\n  const isPropertyLoadHandled = useRef<boolean>(false);\r\n  const isAdUnitLoadHandled = useRef<boolean>(false);\r\n  const isMediationLoadHandled = useRef<boolean>(false);\r\n  const [activeAdunit, setActiveAdunit, getActiveAdunit] = useStateWithLatestCallback<ITythonAdUnit | undefined>(undefined);\r\n  const initialAdUnit = useRef<ITythonAdUnit | undefined>(undefined);\r\n  const { publisher, userContext, account } = appStore;\r\n  const { adUnitsRaw } = adUnitsStore;\r\n  const shouldFetchProperties = useMemo(() => publisher && !isPropertyLoadHandled.current, [publisher]);\r\n  const isCreatingNewAdUnit = window?.location?.href.includes('adunit/create');\r\n  const isValidAdUnit = useMemo<boolean>(() => !!(activeAdunit?.adTypes?.length && activeAdunit.name && activeAdunit.propertyId), [\r\n    activeAdunit,\r\n  ]);\r\n  const existingAdUnitId = extractAdUnitId(window?.location?.href);\r\n  /**\r\n   * fetch mediation status per ad unit\r\n   * when\r\n   * - user editing an existing ad unit\r\n   * - user level mediation is enabled at account setting page\r\n   * - ad unit is fetched and id is ready to use\r\n   * - publisher and account are both loaded from appStore\r\n   */\r\n  const shouldFetchAdUnitMediationStatus = useMemo(\r\n    () => googleAdsenseStore.active?.isMediationEnabled && publisher && account && activeAdunit?.id && !isMediationLoadHandled.current,\r\n    // eslint-disable-next-line react-hooks/exhaustive-deps\r\n    [googleAdsenseStore.active?.isMediationEnabled, publisher, account, activeAdunit]\r\n  );\r\n\r\n  /**\r\n   * dependency value to initialize page during creation experience\r\n   */\r\n  const shouldInitializeHookOnCreation = useMemo(\r\n    () => isCreatingNewAdUnit && userContext && publisher && account?.id && !isAdUnitLoadHandled.current,\r\n    [isCreatingNewAdUnit, userContext, publisher, account]\r\n  );\r\n\r\n  /**\r\n   * dependency value to initialize page during edition experience\r\n   */\r\n  const shouldInitializeHookOnEdition = useMemo(() => existingAdUnitId && userContext && publisher && !isAdUnitLoadHandled.current, [\r\n    existingAdUnitId,\r\n    userContext,\r\n    publisher,\r\n  ]);\r\n\r\n  useEffect(() => {\r\n    const fetchData = async () => {\r\n      const data = await fetchProperties(publisher!, userContext, setIsPropertyLoading);\r\n      setProperties(data);\r\n    };\r\n\r\n    fetchData();\r\n    // eslint-disable-next-line react-hooks/exhaustive-deps\r\n  }, [shouldFetchProperties]);\r\n\r\n  useEffect(() => {\r\n    fetchAdSenseAccountStatus(true, false);\r\n  }, []);\r\n\r\n  useEffect(() => {\r\n    if (shouldFetchAdUnitMediationStatus) {\r\n      const fetchData = async () => {\r\n        setIsAdUnitMediationLoading(true);\r\n        const data = await fetchAdunitMediationStatus(publisher!, account!, `${activeAdunit?.id}`);\r\n        const isAdUnitMediationEnabled = data?.[0]?.mediationStatus;\r\n        initialAdUnit.current = { ...initialAdUnit.current!, mediationEnabled: isAdUnitMediationEnabled };\r\n        setActiveAdunit({ ...getActiveAdunit()!, mediationEnabled: isAdUnitMediationEnabled });\r\n        setIsAdUnitMediationLoading(false);\r\n        isMediationLoadHandled.current = true;\r\n      };\r\n      fetchData();\r\n    }\r\n    // eslint-disable-next-line react-hooks/exhaustive-deps\r\n  }, [shouldFetchAdUnitMediationStatus]);\r\n\r\n  useEffect(() => {\r\n    const generateNewAdUnitName = async () => {\r\n      let newAdunitName = '';\r\n      try {\r\n        let data;\r\n        if (adUnitsRaw.data !== undefined) {\r\n          data = adUnitsRaw.data;\r\n        } else {\r\n          const params = new URLSearchParams([['extendedInfo', 'true']]);\r\n          data = await listEntity([publisher!, account!], userContext, AdUnit, params);\r\n        }\r\n        newAdunitName = data?.length\r\n          ? formatMessage(messages.defaultAdUnitName, { number: getLargestAdUnitNumber(data.map((d) => d.name)) })\r\n          : '';\r\n      } catch (e) {\r\n        Log.error(`Fetch Ad Unit failed, ${e}`);\r\n      }\r\n      return newAdunitName;\r\n    };\r\n\r\n    const initializeDefaultAdUnit = async () => {\r\n      if (shouldInitializeHookOnCreation) {\r\n        const newAdunitName = await generateNewAdUnitName();\r\n        setActiveAdunit({\r\n          name: newAdunitName,\r\n          adTypes: [TythonAdTypes.Native, TythonAdTypes.Display],\r\n          mediationEnabled: false,\r\n          nativeProperties: {\r\n            fontFamily: DEFAULT_AD_PREVIEW_FONT,\r\n            background: DEFAULT_AD_PREVIEW_BACKGROUND_COLOR,\r\n            buttonBackground: DEFAULT_AD_PREVIEW_BUTTON_BACKGROUND_COLOR,\r\n            titleColor: DEFAULT_AD_PREVIEW_TITLE_BACKGROUND_COLOR,\r\n          },\r\n        });\r\n        isAdUnitLoadHandled.current = true;\r\n      }\r\n    };\r\n\r\n    initializeDefaultAdUnit();\r\n    // eslint-disable-next-line react-hooks/exhaustive-deps\r\n  }, [shouldInitializeHookOnCreation]);\r\n\r\n  useEffect(() => {\r\n    if (shouldInitializeHookOnEdition) {\r\n      // load adunit\r\n      const fetchAdUnit = async () => {\r\n        const data = await fetchTythonAdUnitById(publisher!, userContext!, existingAdUnitId!, formatMessage, setIsAdUnitLoading);\r\n        const fetchedAdUnit = convertToTythonAdUnitViewState(data);\r\n        initialAdUnit.current = fetchedAdUnit;\r\n        setActiveAdunit(fetchedAdUnit);\r\n        isAdUnitLoadHandled.current = true;\r\n      };\r\n      fetchAdUnit();\r\n    }\r\n    // eslint-disable-next-line react-hooks/exhaustive-deps\r\n  }, [shouldInitializeHookOnEdition]);\r\n\r\n  const createProperty = async (property: { url: string; name: string; clarityType?: ClarityType; clarityId?: string }) => {\r\n    const res = await createPropertyService(publisher!, property, formatMessage, userContext, setIsPropertySaving);\r\n    if (res?.id) {\r\n      /**\r\n       * close the property panel in ad unit creation page and\r\n       * render loading experience to fetch latest properties\r\n       */\r\n      onPropertyCreated();\r\n      try {\r\n        const newProperty = await fetchPropertyById(publisher!, res.id, userContext, setIsPropertyLoading);\r\n        setProperties([newProperty, ...properties]);\r\n      } catch (e) {\r\n        onNotificationChanged({\r\n          messageBarType: MessageBarType.error,\r\n          textMessageDescriptor: messages.loadPropertyFailedInAdunit,\r\n        });\r\n      }\r\n    }\r\n  };\r\n\r\n  return {\r\n    properties,\r\n    isPropertyLoading,\r\n    isPropertySaving,\r\n    activeAdunit,\r\n    initialAdUnit: initialAdUnit.current,\r\n    isValidAdUnit,\r\n    isAdUnitMediationLoading,\r\n    isAdUnitSaving,\r\n    isAdUnitLoading,\r\n    isAdUnitInitialized: isAdUnitLoadHandled.current,\r\n    setIsAdUnitSaving,\r\n    setActiveAdunit,\r\n    getActiveAdunit,\r\n    createProperty,\r\n    setIsAdUnitLoading,\r\n  };\r\n};\r\n\r\nexport default useAdUnitData;\r\n","import { InjectedIntl } from 'react-intl';\r\nimport {\r\n  ApiError,\r\n  ClarityType,\r\n  Property,\r\n  PropertyApprovalStatus,\r\n  Publisher,\r\n  UserContext,\r\n  postEntity,\r\n  showErrorToastNotification,\r\n  showSuccessToastNotification,\r\n} from '../../../../../../../../@data';\r\nimport PropertyMessages from '../../../../../Property.messages';\r\nimport { onSettingClarityErrorMessage } from '../../../../__data__/mutatorActions';\r\nimport messages from '../../messages';\r\n\r\nexport const createProperty = async (\r\n  publisher: Publisher,\r\n  property: { url?: string; name?: string; clarityType?: ClarityType; clarityId?: string },\r\n  formatMessage: InjectedIntl['formatMessage'],\r\n  userContext?: UserContext,\r\n  updateLoadingStatus?: (isLoading: boolean) => void\r\n) => {\r\n  const body = {\r\n    publisherId: publisher.id,\r\n    approvalStatus: PropertyApprovalStatus.Approved, // always approved for tython flow\r\n    url: property.url,\r\n    name: property.name,\r\n    approvalStatusComments: '',\r\n    className: 'properties',\r\n    associatedAdUnitIds: [],\r\n    apiPath: undefined,\r\n    clarityType: property.clarityType !== ClarityType.None ? property.clarityType : undefined,\r\n    clarityProjectIdForTython: property.clarityType === ClarityType.None ? property.clarityId : undefined,\r\n  };\r\n\r\n  let data;\r\n  try {\r\n    updateLoadingStatus?.(true);\r\n\r\n    data = await postEntity([publisher], Property, (body as unknown) as Property, userContext);\r\n    showSuccessToastNotification({ text: formatMessage(messages.createPropertySuccessNotification, { entityId: data.id }) });\r\n  } catch (e) {\r\n    const getClarityErrorMessage = (e: ApiError) => {\r\n      if (e.code === 404) {\r\n        return formatMessage(messages.clarityProjectDoesNotExistNotification);\r\n      } else {\r\n        return e.message.split(`description\":\"`)[1].split(`\"`)[0];\r\n      }\r\n    };\r\n\r\n    const apiErrorObj = e as ApiError;\r\n    if (apiErrorObj.code === 404) {\r\n      onSettingClarityErrorMessage(getClarityErrorMessage(apiErrorObj));\r\n    } else {\r\n      onSettingClarityErrorMessage(getClarityErrorMessage(apiErrorObj));\r\n    }\r\n    showErrorToastNotification({ textMessageDescriptor: PropertyMessages.propertyCreateFailed });\r\n  } finally {\r\n    updateLoadingStatus?.(false);\r\n  }\r\n  return data;\r\n};\r\n","import { MessageBarType } from '@fluentui/react';\r\nimport { Log } from '../../../../../../logging/src';\r\nimport {\r\n  Account,\r\n  NotificationLabel,\r\n  NotificationSeverity,\r\n  Publisher,\r\n  TythonAdUnit,\r\n  UserContext,\r\n  buildRequestHeadersWithAuthToken,\r\n  constructUrl,\r\n  onNotificationCardAdded,\r\n  onNotificationChanged,\r\n  showErrorToastNotification,\r\n} from '../../../../../@data';\r\nimport notificationMessages from '../../../../../NotificationsPanel.Types.messages';\r\nimport messages from '../../Manage/ManagePage.messages';\r\nimport { ITythonAdUnit } from '../CreateAdunit/types';\r\n\r\nexport const createTythonAdUnit = async (\r\n  publisher: Publisher,\r\n  userContext: UserContext,\r\n  account: Account,\r\n  adunit: ITythonAdUnit,\r\n  updateLoadingStatus?: (isLoading: boolean) => void\r\n): Promise<TythonAdUnit> => {\r\n  updateLoadingStatus?.(true);\r\n  const adUnit = new TythonAdUnit();\r\n  adUnit.className = 'adunits';\r\n\r\n  const body = {\r\n    servingConfig: {\r\n      adUnitName: adunit.name,\r\n      adUnitId: adunit.id,\r\n      accountId: account.id,\r\n      propertyId: adunit.propertyId,\r\n      adTypes: adunit.adTypes,\r\n      nativeProperties: adunit.nativeProperties,\r\n      servingStatus: 'Serving',\r\n      enablebCat: false,\r\n      bCat: [],\r\n      xCat: [],\r\n      enablebAdv: false,\r\n      bAdv: [],\r\n    },\r\n  };\r\n\r\n  const requestUrl = constructUrl([publisher, adUnit], undefined, undefined, undefined, 'servingConfig');\r\n  const headers = await buildRequestHeadersWithAuthToken(requestUrl, userContext);\r\n\r\n  try {\r\n    const response = await fetch(requestUrl, {\r\n      method: 'POST',\r\n      body: JSON.stringify(body),\r\n      headers: headers,\r\n    });\r\n\r\n    if (!response.ok) {\r\n      const resRaw = await response.json();\r\n      showErrorToastNotification({\r\n        text: `Save Ad Unit Failed, ${\r\n          resRaw?.errors?.[0]?.description ?? response.statusText\r\n        }. Please find more details in the notification center.`,\r\n      });\r\n      onNotificationCardAdded({\r\n        // tslint:disable-next-line: no-any\r\n        severity: NotificationSeverity.Error,\r\n        titleMessageDescriptor: notificationMessages.CreateTythonAdUnitFailedTitle,\r\n        content: `Error code: ${resRaw?.errors?.[0]?.code ?? response.status}; Error status: ${\r\n          resRaw?.errors?.[0]?.description ?? response.statusText\r\n        }`,\r\n        notificationLabel: NotificationLabel.CreateTythonAdUnitFailed,\r\n      });\r\n      updateLoadingStatus?.(false);\r\n      Log.error(`create ad unit failed: ${response.status} ${response.statusText}`);\r\n      return Promise.reject();\r\n    }\r\n\r\n    const data: TythonAdUnit = await response.json();\r\n    updateLoadingStatus?.(false);\r\n    return Promise.resolve(data);\r\n  } catch (e) {\r\n    updateLoadingStatus?.(false);\r\n    onNotificationChanged({\r\n      messageBarType: MessageBarType.error,\r\n      textMessageDescriptor: messages.createAdunitFailed,\r\n    });\r\n    Log.error(e);\r\n    return Promise.reject();\r\n  }\r\n};\r\n","import { MessageBarType } from '@fluentui/react';\r\nimport {\r\n  AdSenseAdUnitStatus,\r\n  AdSenseConnectAdUnit,\r\n  onNotificationChanged,\r\n  postEntity,\r\n  showSuccessToastNotification,\r\n} from '../../../../../@data';\r\nimport { onAdunitMediationUpdateEnd, onAdunitMediationUpdateStart } from '../../@data/actions';\r\nimport { updateAdUnitGrid } from '../../@data/services/AdunitService';\r\nimport messages from '../CreateAdunit/messages';\r\n\r\nconst adUnitNotConnectedStatus: AdSenseAdUnitStatus = {\r\n  apiPath: 'preauth/mediation',\r\n  className: 'getAdUnitMediationStatus',\r\n  mediationStatus: false,\r\n};\r\n\r\nexport const enableTythonAdUnitMediation = async (ids: number[], onRequestSuccess?: () => void): Promise<AdSenseAdUnitStatus> => {\r\n  const request: AdSenseConnectAdUnit = {\r\n    apiPath: 'preauth/mediation',\r\n    className: 'pubcenterAdUnitsIds',\r\n    pubcenterAdUnitIds: ids,\r\n  };\r\n  const urlParamsConnect = new URLSearchParams();\r\n  urlParamsConnect.append('routeSuffix', 'api/mediation/admanager/setupAdUnitMediation');\r\n  try {\r\n    onAdunitMediationUpdateStart(ids);\r\n    const response = await postEntity([], AdSenseConnectAdUnit, request, undefined, urlParamsConnect, undefined);\r\n    if (!response) {\r\n      onNotificationChanged({ messageBarType: MessageBarType.error, textMessageDescriptor: messages.settingUpAdunitMediationFailed });\r\n      return adUnitNotConnectedStatus;\r\n    } else {\r\n      showSuccessToastNotification({ textMessageDescriptor: messages.settingUpAdunitMediationSuccess });\r\n      // only 1 ad unit will be updated for mediation, so first one in the array is the source of truth\r\n      updateAdUnitGrid(ids[0], true, true);\r\n      onRequestSuccess?.();\r\n      return response;\r\n    }\r\n  } catch {\r\n    return adUnitNotConnectedStatus;\r\n  } finally {\r\n    onAdunitMediationUpdateEnd(ids);\r\n  }\r\n};\r\n","import { MessageBarType } from '@fluentui/react';\r\nimport { Log } from '../../../../../../logging/src';\r\nimport {\r\n  Publisher,\r\n  TythonAdUnit,\r\n  UserContext,\r\n  buildRequestHeadersWithAuthToken,\r\n  constructUrl,\r\n  onNotificationChanged,\r\n} from '../../../../../@data';\r\nimport { deepEqual } from '../../../../../utils';\r\nimport messages from '../CreateAdunit/messages';\r\nimport { ITythonAdUnit } from '../CreateAdunit/types';\r\n\r\nexport const updateTythonAdUnit = async (\r\n  publisher: Publisher,\r\n  userContext: UserContext,\r\n  adunit: ITythonAdUnit,\r\n  isAdUnitNameUpdated: boolean,\r\n  updateLoadingStatus?: (isLoading: boolean) => void\r\n): Promise<TythonAdUnit | { isDirty?: boolean }> => {\r\n  updateLoadingStatus?.(true);\r\n  const adUnit = new TythonAdUnit(adunit.id);\r\n  adUnit.className = 'adunits';\r\n  const urlParams = new URLSearchParams();\r\n  urlParams.append('extendedinfo', 'true');\r\n\r\n  const body = {\r\n    servingConfig: {\r\n      ...(adunit.raw! as ITythonAdUnit),\r\n      adUnitName: adunit.name,\r\n      adUnitId: adunit.id,\r\n      accountId: adunit.accountId,\r\n      propertyId: adunit.propertyId,\r\n      adTypes: adunit.adTypes,\r\n      nativeProperties: adunit.nativeProperties,\r\n    },\r\n  };\r\n\r\n  const isMadeNoChange = deepEqual(adunit.raw!, { ...body.servingConfig, adUnitName: adunit.name }, true);\r\n\r\n  if (isMadeNoChange) {\r\n    updateLoadingStatus?.(false);\r\n    return Promise.resolve({ isDirty: false });\r\n  }\r\n  /**\r\n   * if there is no update to ad unit name, we will delete the name\r\n   * property in the payload for backend perf enhancement\r\n   */\r\n  if (!isAdUnitNameUpdated) {\r\n    delete body.servingConfig.adUnitName;\r\n  }\r\n\r\n  const requestUrl = constructUrl([publisher, adUnit], undefined, urlParams, undefined, 'servingConfig');\r\n  const headers = await buildRequestHeadersWithAuthToken(requestUrl, userContext);\r\n\r\n  try {\r\n    const response = await fetch(requestUrl, {\r\n      method: 'PUT',\r\n      body: JSON.stringify(body),\r\n      headers: headers,\r\n    });\r\n\r\n    if (!response.ok) {\r\n      onNotificationChanged({\r\n        messageBarType: MessageBarType.error,\r\n        text: `Update ad unit failed: ${response.status} ${response.statusText}`,\r\n      });\r\n      updateLoadingStatus?.(false);\r\n      Log.error(`Update ad unit failed: ${response.status} ${response.statusText}`);\r\n      return Promise.reject();\r\n    }\r\n\r\n    const data: TythonAdUnit = await response.json();\r\n    updateLoadingStatus?.(false);\r\n    return Promise.resolve(data);\r\n  } catch (e) {\r\n    updateLoadingStatus?.(false);\r\n    onNotificationChanged({ messageBarType: MessageBarType.error, textMessageDescriptor: messages.updateAdunitFailed });\r\n    Log.error(e);\r\n    return Promise.reject();\r\n  }\r\n};\r\n","import { useCallback } from 'react';\r\nimport { InjectedIntl } from 'react-intl';\r\nimport { RouteComponentProps } from 'react-router-dom';\r\nimport { Log } from '../../../../../../logging/src';\r\nimport {\r\n  ClarityType,\r\n  IAppState,\r\n  NotificationLabel,\r\n  NotificationSeverity,\r\n  Property,\r\n  onNotificationCardAdded,\r\n  showErrorToastNotification,\r\n  showSuccessToastNotification,\r\n} from '../../../../../@data';\r\nimport notificationMessages from '../../../../../NotificationsPanel.Types.messages';\r\nimport { IPropertySitePickerItem } from '../../../../../layout/PropertySitePicker/PropertySitePicker.types';\r\nimport { getTythonAdsManageRoute } from '../../../../../utils/routeUtils';\r\nimport { IGoogleAdSenseViewState } from '../../../Account/Settings/components/GoogleConnector/@data';\r\nimport { isFormValid } from '../../../Property/Create/variations/CreateTythonProperty/utils/validateForm';\r\nimport { createTythonAdUnit } from '../services/createTythonAdUnit';\r\nimport { disableTythonAdUnitMediation } from '../services/disableTythonAdUnitMediation';\r\nimport { enableTythonAdUnitMediation } from '../services/enableTythonAdUnitMediation';\r\nimport { updateTythonAdUnit } from '../services/updateTythonAdUnit';\r\nimport messages from './messages';\r\nimport { AdTypes, ITythonAdUnit, NativeAdProperties } from './types';\r\n\r\ntype UseAdunitEventHandlersProps = {\r\n  getActiveAdunit: () => ITythonAdUnit | undefined;\r\n  setActiveAdunit: (adUnit: ITythonAdUnit) => void;\r\n  setIsAdUnitSaving: (isSaving: boolean) => void;\r\n  createProperty: (property: { url: string; name: string; clarityType?: ClarityType; clarityId?: string }) => void;\r\n  activeNewPropertyCreation: () => void;\r\n  activeScriptView: () => void;\r\n  formatMessage: InjectedIntl['formatMessage'];\r\n  appStore: IAppState;\r\n  googleAdsenseStore: IGoogleAdSenseViewState;\r\n  initialAdUnit: ITythonAdUnit | undefined;\r\n  routeProps: RouteComponentProps;\r\n  properties: Property[];\r\n  deActiveNewPropertyCreation: () => void;\r\n};\r\n\r\nconst useAdunitEventHandlers = ({\r\n  getActiveAdunit,\r\n  setActiveAdunit,\r\n  createProperty,\r\n  activeNewPropertyCreation,\r\n  setIsAdUnitSaving,\r\n  activeScriptView,\r\n  deActiveNewPropertyCreation,\r\n  formatMessage,\r\n  appStore,\r\n  googleAdsenseStore,\r\n  initialAdUnit,\r\n  routeProps,\r\n  properties,\r\n}: UseAdunitEventHandlersProps) => {\r\n  const onRedirectBackToAdUnitManagePage = useCallback(() => {\r\n    const { publisher, account } = appStore;\r\n    if (!publisher || !account) {\r\n      return;\r\n    }\r\n    routeProps.history.push(getTythonAdsManageRoute());\r\n  }, [appStore, routeProps.history]);\r\n\r\n  const onAdunitNameChange = useCallback(\r\n    (_, value: string) => {\r\n      const currentActiveAdunit = getActiveAdunit();\r\n      setActiveAdunit({ ...currentActiveAdunit, name: value } as ITythonAdUnit);\r\n    },\r\n    [getActiveAdunit, setActiveAdunit]\r\n  );\r\n\r\n  const onAdunitTypeChange = useCallback(\r\n    ({ adTypes, nativeProperties }: { adTypes?: AdTypes; nativeProperties?: NativeAdProperties }) => {\r\n      const currentActiveAdunit = getActiveAdunit();\r\n      setActiveAdunit({\r\n        ...currentActiveAdunit,\r\n        ...(adTypes ? { adTypes: adTypes } : {}),\r\n        ...(nativeProperties ? { nativeProperties: nativeProperties } : {}),\r\n      } as ITythonAdUnit);\r\n    },\r\n    [getActiveAdunit, setActiveAdunit]\r\n  );\r\n\r\n  const onAdunitMediationChange = useCallback(\r\n    (active: boolean) => {\r\n      const currentActiveAdunit = getActiveAdunit();\r\n      setActiveAdunit({ ...currentActiveAdunit, mediationEnabled: active } as ITythonAdUnit);\r\n    },\r\n    [getActiveAdunit, setActiveAdunit]\r\n  );\r\n\r\n  const onAddSiteClick = useCallback(() => {\r\n    activeNewPropertyCreation();\r\n  }, [activeNewPropertyCreation]);\r\n\r\n  const onSiteChange = useCallback(\r\n    (item: IPropertySitePickerItem) => {\r\n      const currentActiveAdunit = getActiveAdunit();\r\n      setActiveAdunit({ ...currentActiveAdunit, propertyId: item.id } as ITythonAdUnit);\r\n    },\r\n    [getActiveAdunit, setActiveAdunit]\r\n  );\r\n\r\n  const onCreatingNewProperty = useCallback(\r\n    async ({ name, url, clarityType, clarityId }: { name: string; url: string; clarityType?: ClarityType; clarityId?: string }) => {\r\n      const isValid = await isFormValid(properties, false, undefined);\r\n      if (!isValid) {\r\n        showErrorToastNotification({ text: formatMessage(messages.duplicatedSiteCreationErrorToastNotification) });\r\n        onNotificationCardAdded({\r\n          // tslint:disable-next-line: no-any\r\n          severity: NotificationSeverity.Error,\r\n          title: formatMessage(notificationMessages.DuplicatedSiteCreationErrorNotificationTitle),\r\n          content: formatMessage(notificationMessages.DuplicatedSiteCreationErrorNotificationContent, { name: name, url: url }),\r\n          intlContentMessageValues: { name: name, url: url },\r\n          notificationLabel: NotificationLabel.DuplicatedSiteCreationErrorNotification,\r\n        });\r\n        return;\r\n      }\r\n      await createProperty({ name, url, clarityType, clarityId });\r\n    },\r\n    // eslint-disable-next-line react-hooks/exhaustive-deps\r\n    [createProperty, properties]\r\n  );\r\n\r\n  const onAdUnitSubmit = useCallback(async () => {\r\n    const isCreatingNewAdUnit = window?.location?.href.includes('adunit/create');\r\n    const activeAdunit = getActiveAdunit();\r\n    const { publisher, userContext, account } = appStore;\r\n\r\n    if (!publisher || !userContext || !account || !activeAdunit) {\r\n      return;\r\n    }\r\n\r\n    if (isCreatingNewAdUnit) {\r\n      await createTythonAdUnit(publisher, userContext, account, activeAdunit, setIsAdUnitSaving).then((data) => {\r\n        Log.info(`create tython ad unit success ${JSON.stringify(data)}`);\r\n        const currentActiveAdunit = getActiveAdunit()!;\r\n        const newAdUnitId = data.data.servingConfig?.adUnitId!;\r\n        showSuccessToastNotification({ text: formatMessage(messages.createAdUnitSuccessNotification, { adunitId: newAdUnitId }) });\r\n        setActiveAdunit({ ...currentActiveAdunit, id: newAdUnitId });\r\n        if (activeAdunit.mediationEnabled) {\r\n          enableTythonAdUnitMediation([newAdUnitId]);\r\n        }\r\n        activeScriptView();\r\n      });\r\n    } else {\r\n      await updateTythonAdUnit(publisher, userContext, activeAdunit, initialAdUnit?.name !== activeAdunit.name, setIsAdUnitSaving).then(\r\n        (data) => {\r\n          if (data && (data as { isDirty?: boolean }).isDirty === false) {\r\n            activeScriptView();\r\n            return;\r\n          }\r\n          Log.info(`update tython ad unit success ${JSON.stringify(data)}`);\r\n          /**\r\n           * update mediation if save ad unit success\r\n           */\r\n          if (activeAdunit.mediationEnabled !== initialAdUnit?.mediationEnabled) {\r\n            activeAdunit.mediationEnabled && enableTythonAdUnitMediation([activeAdunit.id!]);\r\n            !activeAdunit.mediationEnabled && disableTythonAdUnitMediation([activeAdunit.id!]);\r\n          }\r\n          showSuccessToastNotification({ text: formatMessage(messages.editAdUnitSuccessNotification, { adunitId: activeAdunit.id }) });\r\n          activeScriptView();\r\n        }\r\n      );\r\n    }\r\n    // eslint-disable-next-line react-hooks/exhaustive-deps\r\n  }, [getActiveAdunit, appStore, googleAdsenseStore, initialAdUnit]);\r\n\r\n  return {\r\n    onAdunitNameChange,\r\n    onAdunitTypeChange,\r\n    onAdUnitSubmit,\r\n    onAdunitMediationChange,\r\n    onAddSiteClick,\r\n    onSiteChange,\r\n    onCreatingNewProperty,\r\n    onRedirectBackToAdUnitManagePage,\r\n  };\r\n};\r\n\r\nexport default useAdunitEventHandlers;\r\n","import { MessageBarType } from '@fluentui/react';\r\nimport {\r\n  AdSenseAdUnitStatus,\r\n  AdSenseDisconnectAdUnit,\r\n  deleteEntity,\r\n  onNotificationChanged,\r\n  showSuccessToastNotification,\r\n} from '../../../../../@data';\r\nimport { onAdunitMediationUpdateEnd, onAdunitMediationUpdateStart } from '../../@data/actions';\r\nimport { updateAdUnitGrid } from '../../@data/services/AdunitService';\r\nimport messages from '../CreateAdunit/messages';\r\n\r\nexport const disableTythonAdUnitMediation = async (ids: number[], onRequestStart?: () => void): Promise<AdSenseAdUnitStatus[]> => {\r\n  const request: AdSenseDisconnectAdUnit = {\r\n    apiPath: 'preauth/mediation',\r\n    className: 'pubcenterAdUnitsIds',\r\n    pubcenterAdUnitIds: ids,\r\n  };\r\n  const urlParams = new URLSearchParams();\r\n  urlParams.append('routeSuffix', 'api/mediation/admanager/decommissionAdUnitMediation');\r\n  try {\r\n    onRequestStart?.();\r\n    onAdunitMediationUpdateStart(ids);\r\n    const response = (await deleteEntity(\r\n      [],\r\n      AdSenseDisconnectAdUnit,\r\n      undefined,\r\n      urlParams,\r\n      undefined,\r\n      request\r\n    )) as AdSenseDisconnectAdUnit[];\r\n    if (!response) {\r\n      onNotificationChanged({\r\n        messageBarType: MessageBarType.error,\r\n        textMessageDescriptor: messages.removingAdunitMediationFailed,\r\n      });\r\n      return [];\r\n    } else {\r\n      showSuccessToastNotification({ textMessageDescriptor: messages.removingAdunitMediationSuccess });\r\n      // only 1 ad unit will be updated for mediation, so first one in the array is the source of truth\r\n      updateAdUnitGrid(ids[0], false, true);\r\n      return response;\r\n    }\r\n  } catch {\r\n    return [];\r\n  } finally {\r\n    onAdunitMediationUpdateEnd(ids);\r\n  }\r\n};\r\n","import { useBoolean } from '@fluentui/react-hooks';\r\nimport { useMemo } from 'react';\r\nimport { RouteComponentProps } from 'react-router-dom';\r\nimport messages from '../../Create/CreateAdunit.messages';\r\nimport { IAdUnitMediationSelectorProps } from '../components/AdUnitMediationSelector';\r\nimport { IAdUnitNameInputFieldProps } from '../components/AdUnitNameInput';\r\nimport { IAdUnitSiteSelectorProps } from '../components/AdUnitSiteSelector';\r\nimport { IAdUnitTypeSelectorProps } from '../components/AdUnitTypeSelector';\r\nimport { IScriptPageProps } from '../components/ScriptPage/ScriptPage.types';\r\nimport { propertySerializer } from '../services/loadProperties';\r\nimport { getSiteSelectionSummary } from '../services/utils';\r\nimport { AdTypes, NativeAdProperties, TythonAdUnitDetailPageProps, UseCreateTythonAdunitRenderControl } from './types';\r\nimport useAdUnitData from './useAdUnitData';\r\nimport useAdunitEventHandlers from './useAdUnitEventHandlers';\r\n\r\n/**\r\n * This is the hook to serve components render behavior in ad unit creation flow for tython experience\r\n * it will take satcheljs store values as props to compose props for adunit builder form components.\r\n * Please see @type UseCreateTythonAdunitRenderControl for hook usages\r\n */\r\nconst useCreateTythonAdunitRenderControl: UseCreateTythonAdunitRenderControl = ({\r\n  appStore,\r\n  googleAdsenseStore,\r\n  mode,\r\n  routeProps,\r\n  intl,\r\n  adUnitsStore,\r\n}) => {\r\n  const { formatMessage } = intl ?? {};\r\n  const isEditing = !window?.location?.href.includes('adunit/create');\r\n  const [isScriptViewActive, { setTrue: activeScriptView }] = useBoolean(false);\r\n  const [isPropertyPanelActive, { setTrue: activeNewPropertyCreation, setFalse: deActiveNewPropertyCreation }] = useBoolean(false);\r\n  const {\r\n    properties,\r\n    isPropertyLoading,\r\n    isValidAdUnit,\r\n    isPropertySaving,\r\n    isAdUnitMediationLoading,\r\n    activeAdunit,\r\n    initialAdUnit,\r\n    isAdUnitSaving,\r\n    isAdUnitLoading,\r\n    isAdUnitInitialized,\r\n    setIsAdUnitSaving,\r\n    setActiveAdunit,\r\n    getActiveAdunit,\r\n    createProperty,\r\n  } = useAdUnitData({\r\n    appStore,\r\n    googleAdsenseStore,\r\n    onPropertyCreated: deActiveNewPropertyCreation,\r\n    adUnitsStore,\r\n    formatMessage,\r\n  });\r\n\r\n  const {\r\n    onAdunitNameChange,\r\n    onAdunitTypeChange,\r\n    onAdunitMediationChange,\r\n    onAddSiteClick,\r\n    onSiteChange,\r\n    onCreatingNewProperty,\r\n    onAdUnitSubmit,\r\n    onRedirectBackToAdUnitManagePage,\r\n  } = useAdunitEventHandlers({\r\n    getActiveAdunit,\r\n    setActiveAdunit,\r\n    createProperty,\r\n    activeNewPropertyCreation,\r\n    setIsAdUnitSaving,\r\n    activeScriptView,\r\n    deActiveNewPropertyCreation,\r\n    formatMessage,\r\n    routeProps,\r\n    appStore,\r\n    googleAdsenseStore,\r\n    initialAdUnit,\r\n    properties,\r\n  });\r\n\r\n  const adUnitNameProps = useMemo<IAdUnitNameInputFieldProps>(\r\n    () => ({\r\n      onChange: onAdunitNameChange,\r\n      value: activeAdunit?.name,\r\n      errorMsg: undefined,\r\n      disabled: false,\r\n      shouldRenderComponent: !isScriptViewActive,\r\n    }),\r\n    // eslint-disable-next-line react-hooks/exhaustive-deps\r\n    [activeAdunit?.name, isScriptViewActive]\r\n  );\r\n\r\n  const adUnitSiteProps = useMemo<IAdUnitSiteSelectorProps & RouteComponentProps>(\r\n    () => ({\r\n      options: propertySerializer(properties),\r\n      onAddSiteClick,\r\n      onSiteChange,\r\n      searchBoxPlaceholder:\r\n        getSiteSelectionSummary(properties, activeAdunit?.propertyId) ?? formatMessage(messages.propertyDefaultOptionText),\r\n      isPropertyPanelActive,\r\n      onCloseNewPropertyPanel: deActiveNewPropertyCreation,\r\n      onCreatingNewProperty,\r\n      isLoading: isPropertyLoading,\r\n      isSaving: isPropertySaving,\r\n      shouldRenderComponent: !isScriptViewActive,\r\n      isDisabled: isEditing,\r\n      ...routeProps,\r\n    }),\r\n    // eslint-disable-next-line react-hooks/exhaustive-deps\r\n    [activeAdunit?.propertyId, isPropertyLoading, isPropertySaving, properties, isPropertyPanelActive, routeProps, isScriptViewActive]\r\n  );\r\n\r\n  const adUnitTypeProps = useMemo<IAdUnitTypeSelectorProps>(\r\n    () => ({\r\n      nativeProperties: activeAdunit?.nativeProperties as NativeAdProperties,\r\n      adTypes: activeAdunit?.adTypes as AdTypes,\r\n      onChange: onAdunitTypeChange,\r\n      shouldRenderComponent: !isScriptViewActive,\r\n      isLoading: isAdUnitLoading || appStore.loading || !isAdUnitInitialized,\r\n      intl,\r\n    }),\r\n    // eslint-disable-next-line react-hooks/exhaustive-deps\r\n    [activeAdunit?.adTypes, activeAdunit?.nativeProperties, intl, isScriptViewActive, isAdUnitLoading, appStore.loading]\r\n  );\r\n\r\n  const adUnitMediationProps = useMemo<IAdUnitMediationSelectorProps>(\r\n    () => ({\r\n      activeAdunit,\r\n      toggleIsLoading: isAdUnitMediationLoading,\r\n      shouldRenderComponent: !!googleAdsenseStore?.active?.isMediationEnabled && !isScriptViewActive,\r\n      onAdunitMediationChange,\r\n    }),\r\n    // eslint-disable-next-line react-hooks/exhaustive-deps\r\n    [activeAdunit, googleAdsenseStore?.active?.isMediationEnabled, isScriptViewActive, isAdUnitMediationLoading]\r\n  );\r\n\r\n  const adUnitScriptPageProps = useMemo<IScriptPageProps>(\r\n    () => ({\r\n      adunitId: `${activeAdunit?.id}`,\r\n      siteId: activeAdunit?.propertyId,\r\n      shouldRenderComponent: isScriptViewActive,\r\n      intl,\r\n      mode,\r\n      ...routeProps,\r\n    }),\r\n    // eslint-disable-next-line react-hooks/exhaustive-deps\r\n    [isScriptViewActive, appStore.publisher?.id, activeAdunit?.id, routeProps, intl, mode, isScriptViewActive]\r\n  );\r\n\r\n  const adUnitDetailPageProps = useMemo<TythonAdUnitDetailPageProps>(\r\n    () => ({\r\n      saving: isAdUnitSaving,\r\n      loading: isAdUnitLoading,\r\n      onSubmit: isScriptViewActive ? onRedirectBackToAdUnitManagePage : onAdUnitSubmit,\r\n      onCancel: isScriptViewActive ? undefined : onRedirectBackToAdUnitManagePage,\r\n      submitButtonDisabled: !isValidAdUnit || appStore.loading,\r\n      submitLabel: formatMessage(isScriptViewActive ? messages.finishAdUnitCreation : messages.saveAndGetCode),\r\n      titleLabel: formatMessage(isEditing ? messages.editPageTitle : messages.createPageTitle),\r\n      hasFormTitle: true,\r\n      hideNavButton: isScriptViewActive,\r\n    }),\r\n    // eslint-disable-next-line react-hooks/exhaustive-deps\r\n    [isAdUnitSaving, isAdUnitLoading, isScriptViewActive, isValidAdUnit, isEditing, onAdUnitSubmit, onRedirectBackToAdUnitManagePage]\r\n  );\r\n\r\n  return {\r\n    adUnitNameProps,\r\n    adUnitSiteProps,\r\n    adUnitTypeProps,\r\n    adUnitMediationProps,\r\n    adUnitDetailPageProps,\r\n    adUnitScriptPageProps,\r\n    isScriptViewActive,\r\n  };\r\n};\r\n\r\nexport default useCreateTythonAdunitRenderControl;\r\n","import React from 'react';\r\nimport { InjectedIntlProps } from 'react-intl';\r\nimport { RouteComponentProps } from 'react-router-dom';\r\nimport { getAppStore } from '../../../../../@data';\r\nimport { FormState } from '../../../../../components/Form';\r\nimport { DetailPage } from '../../../../../layout/DetailPage/DetailPage';\r\nimport { injectIntlAndObserver } from '../../../../../utils';\r\nimport { getGoogleAdSenseStore } from '../../../Account/Settings/components/GoogleConnector/@data';\r\nimport { getAdunitStore } from '../../@data';\r\nimport AdUnitMediationSelector from '../components/AdUnitMediationSelector';\r\nimport AdUnitNameInputField from '../components/AdUnitNameInput';\r\nimport AdUnitSiteSelector from '../components/AdUnitSiteSelector';\r\nimport AdUnitTypeSelector from '../components/AdUnitTypeSelector';\r\nimport { NativeAdScriptPage } from '../components/ScriptPage/ScriptPage';\r\nimport useCreateTythonAdunitRenderControl from './useCreateTythonAdunit';\r\n\r\ninterface ICreateTythonAdunitProps {\r\n  mode: FormState;\r\n  routeProps: RouteComponentProps;\r\n}\r\n\r\nconst CreateTythonAdunit = injectIntlAndObserver<InjectedIntlProps & ICreateTythonAdunitProps>(({ intl, mode, routeProps }) => {\r\n  const appStore = getAppStore();\r\n  const googleAdsenseStore = getGoogleAdSenseStore();\r\n  const adUnitsStore = getAdunitStore();\r\n  const {\r\n    adUnitNameProps,\r\n    adUnitSiteProps,\r\n    adUnitTypeProps,\r\n    adUnitMediationProps,\r\n    adUnitDetailPageProps,\r\n    adUnitScriptPageProps,\r\n  } = useCreateTythonAdunitRenderControl({\r\n    appStore,\r\n    googleAdsenseStore,\r\n    mode,\r\n    routeProps,\r\n    intl,\r\n    adUnitsStore,\r\n  });\r\n\r\n  return (\r\n    <DetailPage helpId={'pop_PCv4_AdUnitsCreate'} pageMode={mode} {...adUnitDetailPageProps}>\r\n      <AdUnitNameInputField {...adUnitNameProps} />\r\n      <AdUnitSiteSelector {...adUnitSiteProps} />\r\n      <AdUnitTypeSelector {...adUnitTypeProps} />\r\n      <AdUnitMediationSelector {...adUnitMediationProps} />\r\n      <NativeAdScriptPage {...adUnitScriptPageProps} />\r\n    </DetailPage>\r\n  );\r\n});\r\n\r\nexport default CreateTythonAdunit;\r\n","import { InjectedIntlProps } from 'react-intl';\r\nimport { AppAdUnitPrimaryFormProps, AppAdUnitResultSummaryProps, AppAdUnitTypeFormProps } from '../CreateAdUnit/types';\r\n\r\nexport type AppAdUnitPrimaryFormType = (props: AppAdUnitPrimaryFormProps & InjectedIntlProps) => JSX.Element;\r\n\r\nexport type AppAdUnitTypeFormType = (props: AppAdUnitTypeFormProps & InjectedIntlProps) => JSX.Element;\r\n\r\nexport type V2SectionalAccordionType = (props: {\r\n  onTitleToggle: (isSelected?: boolean) => void;\r\n  isAccordionSelected: boolean;\r\n  onRenderLeft: () => JSX.Element;\r\n  onRenderRight?: () => JSX.Element;\r\n  titleLabel: string;\r\n  disabled?: boolean;\r\n  isLoading: boolean;\r\n}) => JSX.Element;\r\n\r\nexport enum AppAdUnitPreviewLayout {\r\n  Horizontal = 0,\r\n  Vertical = 1,\r\n  Square = 2,\r\n}\r\n\r\nexport type StaticAdPreviewType = (props: { dimension?: string } & InjectedIntlProps) => JSX.Element;\r\n\r\nexport type AppAdUnitResultSummaryType = (props: AppAdUnitResultSummaryProps & InjectedIntlProps) => JSX.Element;\r\n","import { defineMessages } from 'react-intl';\r\n\r\nexport default defineMessages({\r\n  createNewAppAdUnitPrimaryFormTitle: {\r\n    id: 'appAdUnit.createNewAppAdUnitPrimaryFormTitle',\r\n    defaultMessage: 'App details',\r\n  },\r\n  appAdUnitNameFieldLabel: {\r\n    id: 'appAdUnit.appAdUnitNameFieldLabel',\r\n    defaultMessage: 'Ad unit name',\r\n  },\r\n  appAdUnitApplicationIdFieldLabel: {\r\n    id: 'appAdUnit.appAdUnitApplicationIdFieldLabel',\r\n    defaultMessage: 'Connected application',\r\n  },\r\n  appAdUnitTypeFieldLabel: {\r\n    id: 'appAdUnit.appAdUnitTypeFieldLabel',\r\n    defaultMessage: 'Ad types',\r\n  },\r\n  appAdUnitTypeBanner: {\r\n    id: 'appAdUnit.appAdUnitTypeBanner',\r\n    defaultMessage: 'Banner',\r\n  },\r\n  appAdUnitTypeInterstitial: {\r\n    id: 'appAdUnit.appAdUnitTypeInterstitial',\r\n    defaultMessage: 'Interstitial',\r\n  },\r\n  appAdUnitTypeNative: {\r\n    id: 'appAdUnit.appAdUnitTypeNative',\r\n    defaultMessage: 'Native',\r\n  },\r\n  appAdUnitTypeBannerDescription: {\r\n    id: 'appAdUnit.appAdUnitTypeBannerDescription',\r\n    defaultMessage:\r\n      \"Rectangular ads that occupy a portion of an app's layout; can be refreshed automatically after a period of time. See {helpLink} for more information.\",\r\n  },\r\n  appAdUnitTypeBannerHelpLink: {\r\n    id: 'appAdUnit.appAdUnitTypeBannerHelpLink',\r\n    defaultMessage: 'Overview of banner ads',\r\n  },\r\n  appAdUnitTypeInterstitialDescription: {\r\n    id: 'appAdUnit.appAdUnitTypeInterstitialDescription',\r\n    defaultMessage:\r\n      'Full-page ad format that appears at natural breaks and transitions, such as level completion. See {helpLink} for more information.',\r\n  },\r\n  appAdUnitTypeInterstitialHelpLink: {\r\n    id: 'appAdUnit.appAdUnitTypeInterstitialHelpLink',\r\n    defaultMessage: 'Overview of interstitial ads',\r\n  },\r\n  appAdUnitTypeNativeDescription: {\r\n    id: 'appAdUnit.appAdUnitTypeNativeDescription',\r\n    defaultMessage:\r\n      'Customizable ad format that matches the look and feel of your app; appears inline with app content. See {helpLink} for more information.',\r\n  },\r\n  overviewNativeAdsLink: {\r\n    id: 'appAdUnit.overviewNativeAdsLink',\r\n    defaultMessage: 'Overview of native ads',\r\n  },\r\n  appAdUnitTypeDisplayAdsTitle: {\r\n    id: 'appAdUnit.appAdUnitTypeDisplayAdsTitle',\r\n    defaultMessage: 'Display ad',\r\n  },\r\n  appAdUnitTypeNativeAdsTitle: {\r\n    id: 'appAdUnit.appAdUnitTypeNativeAdsTitle',\r\n    defaultMessage: 'Native ad',\r\n  },\r\n  appAdUnitTypeVideoAdsTitle: {\r\n    id: 'appAdUnit.appAdUnitTypeVideoAdsTitle',\r\n    defaultMessage: 'Video ad',\r\n  },\r\n  appAdUnitDisplayAdsBannerAdSizeLabel: {\r\n    id: 'appAdUnit.appAdUnitDisplayAdsBannerAdSizeLabel',\r\n    defaultMessage: 'Size',\r\n  },\r\n  appAdUnitVideoAdsInterstitialVideoAdConfigTitle: {\r\n    id: 'appAdUnit.appAdUnitVideoAdsInterstitialVideoAdConfigTitle',\r\n    defaultMessage: 'Video ad configuration',\r\n  },\r\n  appAdUnitNativeAdConfigTitle: {\r\n    id: 'appAdUnit.appAdUnitNativeAdConfigTitle',\r\n    defaultMessage: 'Native ad configuration',\r\n  },\r\n  appAdUnitNativeAdsConfigFontLabel: {\r\n    id: 'appAdUnit.appAdUnitNativeAdsConfigFontLabel',\r\n    defaultMessage: 'Font',\r\n  },\r\n  appAdUnitNativeAdsConfigTitleColorLabel: {\r\n    id: 'appAdUnit.appAdUnitNativeAdsConfigTitleColorLabel',\r\n    defaultMessage: 'Title color',\r\n  },\r\n  appAdUnitNativeAdsConfigBackgroundLabel: {\r\n    id: 'appAdUnit.appAdUnitNativeAdsConfigBackgroundLabel',\r\n    defaultMessage: 'Background color',\r\n  },\r\n  appAdUnitNativeAdsConfigButtonBackgroundLabel: {\r\n    id: 'appAdUnit.appAdUnitNativeAdsConfigButtonBackgroundLabel',\r\n    defaultMessage: 'Button background color',\r\n  },\r\n  appAdUnitNativeAdsConfigMsgBar: {\r\n    id: 'appAdUnit.appAdUnitNativeAdsConfigMsgBar',\r\n    defaultMessage: 'Ads might look different from the preview shown.',\r\n  },\r\n  appAdUnitVideoAdsInterstitialVideoAdConfigVideoSkipLabel: {\r\n    id: 'appAdUnit.appAdUnitVideoAdsInterstitialVideoAdConfigVideoSkipLabel',\r\n    defaultMessage: 'Can users skip the video?',\r\n  },\r\n  createNewAppAdUnitBannerAdTypeFormTitle: {\r\n    id: 'appAdUnit.createNewAppAdUnitBannerAdTypeFormTitle',\r\n    defaultMessage: 'Banner ad media types',\r\n  },\r\n  createNewAppAdUnitInterstitialAdTypeFormTitle: {\r\n    id: 'appAdUnit.createNewAppAdUnitInterstitialAdTypeFormTitle',\r\n    defaultMessage: 'Interstitial ad media types',\r\n  },\r\n  createNewAppAdUnitNativeAdTypeFormTitle: {\r\n    id: 'appAdUnit.createNewAppAdUnitNativeAdTypeFormTitle',\r\n    defaultMessage: 'Native ad media types',\r\n  },\r\n  adTypeInfoMsgContent: {\r\n    id: 'appAdUnit.adTypeInfoMsgContent',\r\n    defaultMessage:\r\n      'Smart auto-sizing will adapt to your site’s container, and so the actual ads served might look slightly different from the examples shown. For smart auto-sizing to work, {helpLink}.',\r\n  },\r\n  adTypeInfoMsgHelpLink: {\r\n    id: 'appAdUnit.adTypeInfoMsgHelpLink',\r\n    defaultMessage: 'ensure you have properly defined your container sizes',\r\n  },\r\n  adTypePreviewTitle: {\r\n    id: 'appAdUnit.adTypePreviewTitle',\r\n    defaultMessage: 'Ad preview',\r\n  },\r\n  adTypePreviewLayoutHorizontal: {\r\n    id: 'appAdUnit.adTypePreviewLayoutHorizontal',\r\n    defaultMessage: 'Horizontal',\r\n  },\r\n  adTypePreviewLayoutVertical: {\r\n    id: 'appAdUnit.adTypePreviewLayoutVertical',\r\n    defaultMessage: 'Vertical',\r\n  },\r\n  adTypePreviewLayoutSquare: {\r\n    id: 'appAdUnit.adTypePreviewLayoutSquare',\r\n    defaultMessage: 'Square',\r\n  },\r\n  adUnitFormCancelLabel: {\r\n    id: 'appAdUnit.adUnitFormCancelLabel',\r\n    defaultMessage: 'Cancel',\r\n  },\r\n  adUnitFormPreviousLabel: {\r\n    id: 'appAdUnit.adUnitFormPreviousLabel',\r\n    defaultMessage: 'Previous',\r\n  },\r\n  adUnitFormNextLabel: {\r\n    id: 'appAdUnit.adUnitFormNextLabel',\r\n    defaultMessage: 'Next',\r\n  },\r\n  adUnitFormDoneLabel: {\r\n    id: 'appAdUnit.adUnitFormDoneLabel',\r\n    defaultMessage: 'Done',\r\n  },\r\n  adUnitFormSubmissionLabelSuccess: {\r\n    id: 'appAdUnit.adUnitFormSubmissionLabelSuccess',\r\n    defaultMessage: 'Place the ad unit inside your app',\r\n  },\r\n  adUnitResultSummarySecondaryContent: {\r\n    id: 'appAdUnit.adUnitResultSummarySecondaryContent',\r\n    defaultMessage: 'Ad unit is successfully created. New ad unit may take up to an hour to start showing ads.',\r\n  },\r\n  adUnitResultSummarySecondaryContentSecondary: {\r\n    id: 'appAdUnit.adUnitResultSummarySecondaryContentSecondary',\r\n    defaultMessage: 'Follow these instructions to place the ad unit inside your app.',\r\n  },\r\n  adUnitResultSummaryCodeHelpContent: {\r\n    id: 'appAdUnit.adUnitResultSummaryCodeHelpContent',\r\n    defaultMessage: 'Need help with ad unit code? Try this.',\r\n  },\r\n  adUnitResultSummaryCodeButton: {\r\n    id: 'appAdUnit.adUnitResultSummaryCodeButton',\r\n    defaultMessage: 'Show code template',\r\n  },\r\n  adUnitResultSummaryCodeButtonInactive: {\r\n    id: 'appAdUnit.adUnitResultSummaryCodeButtonInactive',\r\n    defaultMessage: 'Hide code template',\r\n  },\r\n  adUnitResultSummaryFollowInstructionContent1: {\r\n    id: 'appAdUnit.adUnitResultSummaryFollowInstructionContent1',\r\n    defaultMessage: 'Next, place the ad unit inside your app',\r\n  },\r\n  adUnitResultSummaryFollowInstructionContent2: {\r\n    id: 'appAdUnit.adUnitResultSummaryFollowInstructionContent2',\r\n    defaultMessage: 'Follow these instructions:',\r\n  },\r\n  adUnitResultSummaryFollowInstructionContent3: {\r\n    id: 'appAdUnit.adUnitResultSummaryFollowInstructionContent3',\r\n    defaultMessage: 'Complete the instructions in the {helpLink} using this publisher code',\r\n  },\r\n  adUnitResultSummaryFollowInstructionContent3HelpLink: {\r\n    id: 'appAdUnit.adUnitResultSummaryFollowInstructionContent3HelpLink',\r\n    defaultMessage: 'Microsoft pubCenter Ads SDK guide',\r\n  },\r\n  adUnitResultSummaryFollowInstructionContent4: {\r\n    id: 'appAdUnit.adUnitResultSummaryFollowInstructionContent4',\r\n    defaultMessage:\r\n      \"Follow the {helpLink} to integrate the SDK. You'll specify ad type, size, and placement when you integrate the code using this Ad Unit Code (Placement Code):\",\r\n  },\r\n  adUnitResultSummaryFollowInstructionContent4HelpLink: {\r\n    id: 'appAdUnit.adUnitResultSummaryFollowInstructionContent4HelpLink',\r\n    defaultMessage: 'banner implementation guide',\r\n  },\r\n  adUnitResultSummaryFollowInstructionContent5: {\r\n    id: 'appAdUnit.adUnitResultSummaryFollowInstructionContent5',\r\n    defaultMessage: 'Review the {helpLink} to ensure your implementation complies.',\r\n  },\r\n  adUnitResultSummaryFollowInstructionContent5HelpLink: {\r\n    id: 'appAdUnit.adUnitResultSummaryFollowInstructionContent5HelpLink',\r\n    defaultMessage: 'Microsoft pubCenter Ad Policies',\r\n  },\r\n  copyCode: {\r\n    id: 'appAdUnit.copyCode',\r\n    defaultMessage: 'Copy text',\r\n  },\r\n  copiedCode: {\r\n    id: 'appAdUnit.copiedCode',\r\n    defaultMessage: 'Copied!',\r\n  },\r\n  adPreviewPrimaryTitle: {\r\n    id: 'appAdUnit.adPreviewPrimaryTitle',\r\n    defaultMessage: 'Floral arrangements for all occasions',\r\n  },\r\n  adPreviewPrimaryDescriptionLine1: {\r\n    id: 'appAdUnit.adPreviewPrimaryDescriptionLine1',\r\n    defaultMessage: 'the leading floral experts',\r\n  },\r\n  adPreviewPrimaryDescriptionLine2: {\r\n    id: 'appAdUnit.adPreviewPrimaryDescriptionLine2',\r\n    defaultMessage: 'We use only the freshest, highest-quality flowers and greenery to ensure that each bouquet is a work of art.',\r\n  },\r\n  adPreviewPrimaryDescriptionActionButton: {\r\n    id: 'appAdUnit.adPreviewPrimaryDescriptionActionButton',\r\n    defaultMessage: 'Shop now',\r\n  },\r\n  adPreviewAdBadgeContent: {\r\n    id: 'appAdUnit.adPreviewAdBadgeContent',\r\n    defaultMessage: 'Ad',\r\n  },\r\n  appDetailSubTitle: {\r\n    id: 'appAdUnit.appDetailSubTitle',\r\n    defaultMessage: 'Currently we only support adding live apps that are in the Microsoft Store',\r\n  },\r\n  appAdUnitNamePlaceholder: {\r\n    id: 'appAdUnit.appAdUnitNamePlaceholder',\r\n    defaultMessage: 'Enter Ad Unit Name',\r\n  },\r\n  appAdUnitVideoSkipYes: {\r\n    id: 'appAdUnit.appAdUnitVideoSkipYes',\r\n    defaultMessage: 'Yes, video can be skipped.',\r\n  },\r\n  appAdUnitVideoSkipNo: {\r\n    id: 'appAdUnit.appAdUnitVideoSkipNo',\r\n    defaultMessage: 'No, video cannot be skipped.',\r\n  },\r\n  appAdUnitVideoAdsDuration: {\r\n    id: 'appAdUnit.appAdUnitVideoAdsDuration',\r\n    defaultMessage: 'Video duration',\r\n  },\r\n  appAdUnitVideoAdsDurationMetric: {\r\n    id: 'appAdUnit.appAdUnitVideoAdsDurationMetric',\r\n    defaultMessage: 'seconds',\r\n  },\r\n  appAdUnitNativePreviewTitle: {\r\n    id: 'appAdUnit.appAdUnitNativePreviewTitle',\r\n    defaultMessage: 'Ad preview',\r\n  },\r\n  nativeAdPreviewContainerSize: {\r\n    id: 'appAdUnit.nativeAdPreviewContainerSize',\r\n    defaultMessage: 'Container size',\r\n  },\r\n  appAdUnitVideoPlayMethodAutoSoundOn: {\r\n    id: 'appAdUnit.appAdUnitVideoPlayMethodAutoSoundOn',\r\n    defaultMessage: 'Auto-play, sound on',\r\n  },\r\n  appAdUnitVideoPlayMethodAutoSoundOff: {\r\n    id: 'appAdUnit.appAdUnitVideoPlayMethodAutoSoundOff',\r\n    defaultMessage: 'Auto-play, sound off',\r\n  },\r\n  appAdUnitVideoPlayMethodClickToPlay: {\r\n    id: 'appAdUnit.appAdUnitVideoPlayMethodClickToPlay',\r\n    defaultMessage: 'Click-to-play',\r\n  },\r\n  appAdUnitVideoPlayMethodMouseOff: {\r\n    id: 'appAdUnit.appAdUnitVideoPlayMethodMouseOff',\r\n    defaultMessage: 'Mouse-off',\r\n  },\r\n  appAdUnitVideoPlayMethodAutoplay: {\r\n    id: 'appAdUnit.appAdUnitVideoPlayMethodAutoplay',\r\n    defaultMessage: 'Auto-play',\r\n  },\r\n  appAdUnitVideoPlayMethodSoundUnknown: {\r\n    id: 'appAdUnit.appAdUnitVideoPlayMethodSoundUnknown',\r\n    defaultMessage: 'Sound unknown',\r\n  },\r\n  appAdUnitVideoPlayMethodFieldLabel: {\r\n    id: 'appAdUnit.appAdUnitVideoPlayMethodFieldLabel',\r\n    defaultMessage: 'Video auto-play method',\r\n  },\r\n  appAdUnitUpdateSuccess: {\r\n    id: 'appAdUnit.appAdUnitUpdateSuccess',\r\n    defaultMessage: 'Updated app ad unit {adunitId} success',\r\n  },\r\n});\r\n","import { InjectedIntl } from 'react-intl';\r\nimport { RouteComponentProps } from 'react-router';\r\nimport { IAppState } from '../../../../../@data';\r\nimport { FormState } from '../../../../../components/Form';\r\nimport { IAdPreviewConfig } from '../../TythonAdunit/components/AdUnitTypeSelector/PreviewComponent';\r\nimport { AppAdUnitPreviewLayout } from '../components/types';\r\nimport messages from '../messages';\r\n\r\nexport enum AppAdUnitType {\r\n  Display = 'Display',\r\n  Video = 'Video',\r\n  Native = 'Native',\r\n}\r\n\r\nexport const AppAdUnitBannerSize = {\r\n  '320 x 50': {\r\n    value: '320 x 50',\r\n    width: 320,\r\n    height: 50,\r\n    layout: AppAdUnitPreviewLayout.Horizontal,\r\n  },\r\n  '300 x 250': {\r\n    value: '300 x 250',\r\n    width: 300,\r\n    height: 250,\r\n    layout: AppAdUnitPreviewLayout.Horizontal,\r\n  },\r\n  '300 x 50': {\r\n    value: '300 x 50',\r\n    width: 300,\r\n    height: 50,\r\n    layout: AppAdUnitPreviewLayout.Horizontal,\r\n  },\r\n  '728 x 90': {\r\n    value: '728 x 90',\r\n    width: 728,\r\n    height: 90,\r\n    layout: AppAdUnitPreviewLayout.Horizontal,\r\n  },\r\n};\r\n\r\nexport type VideoPlayMethod = 'auto_sound_on' | 'auto_sound_off' | 'click_to_play' | 'mouse_off' | 'auto_play' | 'sound_unknown';\r\n\r\ntype AppAdUnitVideoPlayMethodItem = {\r\n  label: ReactIntl.FormattedMessage.MessageDescriptor;\r\n  value: VideoPlayMethod;\r\n};\r\n\r\nexport const appAdUnitVideoPlayMethod: AppAdUnitVideoPlayMethodItem[] = [\r\n  {\r\n    label: messages.appAdUnitVideoPlayMethodAutoSoundOn,\r\n    value: 'auto_sound_on',\r\n  },\r\n  {\r\n    label: messages.appAdUnitVideoPlayMethodAutoSoundOff,\r\n    value: 'auto_sound_off',\r\n  },\r\n  {\r\n    label: messages.appAdUnitVideoPlayMethodClickToPlay,\r\n    value: 'click_to_play',\r\n  },\r\n  {\r\n    label: messages.appAdUnitVideoPlayMethodMouseOff,\r\n    value: 'mouse_off',\r\n  },\r\n  {\r\n    label: messages.appAdUnitVideoPlayMethodAutoplay,\r\n    value: 'auto_play',\r\n  },\r\n  {\r\n    label: messages.appAdUnitVideoPlayMethodSoundUnknown,\r\n    value: 'sound_unknown',\r\n  },\r\n];\r\n\r\nexport type SelectedAppAdUnitBannerSize = keyof typeof AppAdUnitBannerSize;\r\nexport interface ICreateTythonAppAdunitProps {\r\n  mode: FormState;\r\n  routeProps: RouteComponentProps;\r\n}\r\n\r\nexport type AppAdUnitPrimaryFormProps = {\r\n  adUnitName: string | undefined;\r\n  onAdUnitNameChange: (value: string) => void;\r\n  adUnitApplicationId: string | undefined;\r\n  onAdUnitApplicationIdChange: (value: string) => void;\r\n  adUnitType: AppAdUnitType | undefined;\r\n  onAdUnitTypeChange: (value: AppAdUnitType) => void;\r\n  shouldRenderPrimaryForm: boolean;\r\n  validationError: { addUnitName?: string };\r\n  applicationOptions: { key: number; label: string; secondaryLabel: string }[];\r\n  selectedBannerAdUnitAdSize: SelectedAppAdUnitBannerSize;\r\n  onBannerAdUnitAdSizeChange: (value: SelectedAppAdUnitBannerSize) => void;\r\n  bannerAdSizeOptions: { key: string; value: string }[];\r\n  videoAdUnitSkipAllowed: boolean | undefined;\r\n  onVideoAdUnitSkipAllowedChange: (value: boolean) => void;\r\n  videoAdUnitDuration: string | undefined;\r\n  onVideoAdUnitDurationChange: (value?: string) => void;\r\n  nativeAdUnitConfig: IAdPreviewConfig;\r\n  onNativeAdUnitConfigChange: (config: IAdPreviewConfig) => void;\r\n  videoAdUnitPlayMethod: VideoPlayMethod;\r\n  onVideoAdUnitPlayMethodChange: (method: VideoPlayMethod) => void;\r\n  isAdUnitLoading: boolean;\r\n  isEditMode: boolean;\r\n};\r\n\r\nexport type AppAdUnitTypeFormProps = {\r\n  shouldRenderAdTypeForm: boolean;\r\n  adUnitType?: AppAdUnitType;\r\n  bannerAdSizeOptions: { key: string; value: string }[];\r\n  selectedBannerAdUnitAdSize: SelectedAppAdUnitBannerSize;\r\n  onBannerAdUnitAdSizeChange: (value: SelectedAppAdUnitBannerSize) => void;\r\n};\r\n\r\nexport type AppAdUnitDetailPageProps = {\r\n  saving: boolean;\r\n  loading: boolean;\r\n  onSubmit: () => void;\r\n  onCancel?: () => void;\r\n  submitButtonDisabled: boolean;\r\n  submitLabel: string;\r\n  titleLabel: string;\r\n  cancelLabel: string;\r\n  hasFormTitle: boolean;\r\n  hideNavButton: boolean;\r\n  pageMode: FormState;\r\n  helpId?: string;\r\n  overlayHeight?: string;\r\n};\r\n\r\nexport type UseCreateTythonAppAdUnitProps = {\r\n  appStore: IAppState;\r\n  formatMessage: InjectedIntl['formatMessage'];\r\n  routeProps: RouteComponentProps;\r\n} & ICreateTythonAppAdunitProps;\r\n\r\nexport type AppAdUnitResultSummaryProps = {\r\n  shouldRenderResultSummary: boolean;\r\n  adUnitId: string;\r\n};\r\n\r\nexport type UseCreateTythonAppAdUnitType = (\r\n  props: UseCreateTythonAppAdUnitProps\r\n) => {\r\n  primaryFormProps: AppAdUnitPrimaryFormProps;\r\n  detailPageProps: AppAdUnitDetailPageProps;\r\n  resultSummaryProps: AppAdUnitResultSummaryProps;\r\n};\r\n","import { Spinner } from '@fluentui/react-components';\r\nimport React, { useEffect } from 'react';\r\nimport { onHelpInfoChanged } from '../../../../../@data';\r\n\r\nexport const InfoLabelContent = ({ html }) => {\r\n  useEffect(() => {\r\n    return () => {\r\n      onHelpInfoChanged();\r\n    };\r\n  }, []);\r\n\r\n  if (!html) {\r\n    return <Spinner size=\"tiny\" />;\r\n  }\r\n\r\n  return <div dangerouslySetInnerHTML={{ __html: html }} />;\r\n};\r\n","import { makeStyles, shorthands, tokens, typographyStyles } from '@fluentui/react-components';\r\nimport { BreakPoints } from '../../../../../../theme';\r\nimport AdPreviewBackground from './resources/adPreviewBackground.png';\r\n\r\nconst { ResponsiveSmall } = BreakPoints;\r\n\r\nexport const useAppAdUnitPrimaryFormStyles = makeStyles({\r\n  previewSDKWrapper: {\r\n    [ResponsiveSmall]: {\r\n      maxWidth: '100%',\r\n      overflowX: 'auto',\r\n    },\r\n    '& > div > div[data-template=\"horizontal\"]': {\r\n      boxShadow: tokens.shadow4Brand,\r\n    },\r\n  },\r\n  dimensionInputsWrapper: {\r\n    display: 'flex',\r\n    flexDirection: 'row',\r\n    alignItems: 'center',\r\n    marginTop: tokens.spacingVerticalM,\r\n    marginBottom: tokens.spacingVerticalM,\r\n    ...shorthands.gap(tokens.spacingHorizontalM),\r\n  },\r\n  dimensionInput: {\r\n    width: '100px',\r\n  },\r\n  colorSelectorWrapper: {\r\n    display: 'flex',\r\n    flexDirection: 'row',\r\n    justifyContent: 'space-between',\r\n    alignItems: 'center',\r\n    marginTop: tokens.spacingVerticalM,\r\n  },\r\n  sectionTitle: {\r\n    ...typographyStyles.title3,\r\n  },\r\n  applicationDropdown: {\r\n    width: '100%',\r\n  },\r\n  cardsWrapper: {\r\n    display: 'flex',\r\n  },\r\n  card: {\r\n    height: '388px',\r\n    width: '187px',\r\n    marginRight: tokens.spacingHorizontalL,\r\n  },\r\n  cardTitleRadioCheckbox: {\r\n    justifyContent: 'space-between',\r\n    alignItems: 'center',\r\n    flexGrow: '0 !important',\r\n    marginTop: tokens.spacingHorizontalM,\r\n  },\r\n  subTitle: {\r\n    color: tokens.colorNeutralForeground2,\r\n    marginTop: '-24px',\r\n    marginBottom: tokens.spacingVerticalM,\r\n  },\r\n  body1Storng: {\r\n    ...typographyStyles.body1Strong,\r\n  },\r\n  dimensionDropdown: {\r\n    width: '100%',\r\n  },\r\n  msgBar: {\r\n    backgroundColor: tokens.colorBrandBackgroundInvertedSelected,\r\n    marginTop: tokens.spacingHorizontalM,\r\n  },\r\n  required: {\r\n    '::after': {\r\n      content: `\" *\"`,\r\n      color: tokens.colorPaletteRedForeground3,\r\n      paddingRight: tokens.spacingHorizontalM,\r\n    },\r\n  },\r\n  infoButton: {\r\n    width: tokens.spacingHorizontalL,\r\n    height: tokens.spacingVerticalL,\r\n    display: 'contents',\r\n    '::before': {\r\n      content: `\" *\"`,\r\n      color: tokens.colorPaletteRedForeground3,\r\n    },\r\n  },\r\n  infoBubbleNoRequire: {\r\n    width: tokens.spacingHorizontalL,\r\n    height: tokens.spacingVerticalL,\r\n    display: 'contents',\r\n  },\r\n  propertyOption: {\r\n    ...shorthands.padding(tokens.spacingVerticalSNudge),\r\n    '> div': {\r\n      display: 'flex',\r\n      justifyContent: 'space-between',\r\n      alignItems: 'center',\r\n      width: '100%',\r\n    },\r\n  },\r\n});\r\n\r\nexport const useAppAdUnitTypeFormStyles = makeStyles({\r\n  body1Storng: {\r\n    ...typographyStyles.body1Strong,\r\n  },\r\n  dimensionDropdown: {\r\n    width: '100%',\r\n  },\r\n  msgBar: {\r\n    backgroundColor: tokens.colorBrandBackgroundInvertedSelected,\r\n    marginTop: tokens.spacingHorizontalM,\r\n  },\r\n  required: {\r\n    '::after': {\r\n      content: `\" *\"`,\r\n      color: tokens.colorPaletteRedForeground3,\r\n      paddingRight: tokens.spacingHorizontalM,\r\n    },\r\n  },\r\n});\r\n\r\nexport const useV2SectionalAccordionStyles = makeStyles({\r\n  card: {\r\n    width: 'calc(100% - 48px)',\r\n    maxWidth: '1360px',\r\n  },\r\n  horizontalDivider: {\r\n    width: 'calc(100% + 24px)',\r\n    marginLeft: '-12px',\r\n  },\r\n  titleWrapper: {\r\n    display: 'flex',\r\n    justifyContent: 'space-between',\r\n    alignItems: 'center',\r\n  },\r\n  contentWrapper: {\r\n    display: 'flex',\r\n    flexDirection: 'row',\r\n    height: '400px',\r\n  },\r\n  verticalDivider: {\r\n    height: 'calc(100% + 24px)',\r\n    marginTop: `-12px`,\r\n    maxWidth: tokens.spacingHorizontalXXS,\r\n  },\r\n  contentLeft: {\r\n    width: '368px',\r\n    minWidth: '368px',\r\n    paddingRight: tokens.spacingHorizontalM,\r\n  },\r\n  contentRight: {\r\n    paddingLeft: tokens.spacingHorizontalM,\r\n    width: '100%',\r\n    maxWidth: 'calc(100% - 380px - 12px)', // 100% - left content width - right side padding\r\n  },\r\n  chevronIcon: {\r\n    cursor: 'pointer',\r\n    ...shorthands.padding(tokens.spacingVerticalSNudge),\r\n  },\r\n  disabled: {\r\n    display: 'none',\r\n  },\r\n});\r\n\r\nexport const useAppAdUnitResultSummaryStyles = makeStyles({\r\n  root: {\r\n    marginTop: '48px',\r\n  },\r\n  stepAvatar: {\r\n    marginRight: tokens.spacingHorizontalM,\r\n  },\r\n  checkMarkLogo: {\r\n    marginLeft: 'calc((100% - 256px)/2)',\r\n  },\r\n  codeCard: {\r\n    maxWidth: '600px',\r\n    height: '88px',\r\n    display: 'flex',\r\n    flexDirection: 'row',\r\n    alignItems: 'center',\r\n    justifyContent: 'space-between',\r\n  },\r\n  codeIcon: {\r\n    width: '64px',\r\n    flexGrow: '0 !important',\r\n  },\r\n  codeCardContent: {\r\n    display: 'flex',\r\n    flexDirection: 'row',\r\n    alignItems: 'center',\r\n    justifyContent: 'space-between',\r\n    width: 'calc(100% - 64px)',\r\n    height: '52px',\r\n    backgroundColor: tokens.colorNeutralBackground3,\r\n    ...shorthands.padding(0, tokens.spacingHorizontalM),\r\n  },\r\n  codeCardWrapper: {\r\n    paddingLeft: tokens.spacingHorizontalXXL,\r\n    marginLeft: tokens.spacingHorizontalS,\r\n    marginTop: tokens.spacingHorizontalS,\r\n    paddingBottom: tokens.spacingVerticalMNudge,\r\n    marginBottom: tokens.spacingVerticalSNudge,\r\n    ...shorthands.borderLeft(tokens.strokeWidthThicker, 'solid', tokens.colorNeutralBackground1Selected),\r\n  },\r\n  codeHelpText: {\r\n    ...shorthands.margin(tokens.spacingVerticalS, 0),\r\n  },\r\n  codePanelButton: {\r\n    marginBottom: tokens.spacingVerticalSNudge,\r\n  },\r\n});\r\n\r\nexport const useAppAdUnitPreviewStyles = makeStyles({\r\n  root: {\r\n    height: '100%',\r\n  },\r\n  tittleWrapper: {\r\n    display: 'flex',\r\n    justifyContent: 'space-between',\r\n    alignItems: 'flex-start',\r\n  },\r\n  layoutTagsWrapper: {\r\n    display: 'flex',\r\n    ...shorthands.gap(tokens.spacingHorizontalXXS),\r\n  },\r\n  previewWrapper: {\r\n    marginTop: tokens.spacingVerticalM,\r\n    position: 'relative',\r\n    height: 'calc(100% - 48px + 12px)', // 100% - title height + 12px margin\r\n    overflowX: 'scroll',\r\n    paddingLeft: tokens.spacingHorizontalM,\r\n  },\r\n  HorizontalBottomAdPreview: {\r\n    width: '768px',\r\n    marginLeft: '-5px',\r\n  },\r\n  SquareBottomAdPreview: {\r\n    width: '294px',\r\n    position: 'absolute',\r\n    top: '-5px',\r\n  },\r\n  VerticalLeftAdPreview: {\r\n    width: '134px',\r\n    position: 'absolute',\r\n  },\r\n  VerticalBottomAdPreview: {\r\n    width: '137px',\r\n    position: 'absolute',\r\n    left: '139px',\r\n    top: '-5px',\r\n  },\r\n});\r\n\r\nconst squareAdPreviewContainerSize = {\r\n  width: '286px',\r\n  height: '286px',\r\n  minWidth: '286px',\r\n  minHeight: '286px',\r\n  maxWidth: '286px',\r\n  maxHeight: '286px',\r\n};\r\n\r\nconst horizontalAdPreviewContainerSize = {\r\n  width: '766px',\r\n  height: '122px',\r\n};\r\n\r\nconst flowerBackgroundImg = {\r\n  backgroundImage: `linear-gradient(rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0.1)), url(${AdPreviewBackground})`,\r\n  backgroundSize: 'cover',\r\n};\r\n\r\nconst verticalAdPreviewContainerSize = {\r\n  width: '134px',\r\n  height: '305px',\r\n};\r\n\r\nconst horizontalAdIconPosition = {\r\n  right: tokens.spacingVerticalL,\r\n  top: tokens.spacingVerticalL,\r\n};\r\n\r\nconst adIconSize = {\r\n  width: tokens.spacingVerticalL,\r\n};\r\n\r\nconst adBadgeStyle = {\r\n  backgroundColor: tokens.colorNeutralForegroundInverted,\r\n  color: tokens.colorNeutralForeground3,\r\n  fontSize: tokens.fontSizeBase200,\r\n  lineHeight: tokens.lineHeightBase200,\r\n  cursor: 'default',\r\n  ...shorthands.borderRadius(tokens.borderRadiusSmall),\r\n  ...shorthands.border(tokens.strokeWidthThin, 'solid', tokens.colorNeutralBackground2Pressed),\r\n  ...shorthands.padding(0, tokens.spacingHorizontalM),\r\n};\r\n\r\nconst secondarySubtitleStyles = {\r\n  textShadow: tokens.shadow64Brand,\r\n  color: tokens.colorNeutralBackground1,\r\n  fontWeight: tokens.fontWeightBold,\r\n};\r\n\r\nexport const useAdPreviewRendererStyles = makeStyles({\r\n  nonSelectableText: {\r\n    userSelect: 'none',\r\n    '-ms-user-select': 'none',\r\n    '-moz-user-select': 'none',\r\n    '-webkit-user-select': 'none',\r\n  },\r\n  primaryAdWrapperHorizontal: {\r\n    ...horizontalAdPreviewContainerSize,\r\n    position: 'relative',\r\n  },\r\n  primaryAdWrapperVertical: {\r\n    ...verticalAdPreviewContainerSize,\r\n    position: 'relative',\r\n    justifyContent: 'flex-start',\r\n    backgroundImage: `linear-gradient(to top, ${tokens.colorNeutralBackground5} 40px, transparent 56px)`,\r\n  },\r\n  primaryAdWrapperSquare: {\r\n    ...squareAdPreviewContainerSize,\r\n    position: 'relative',\r\n    justifyContent: 'flex-start',\r\n    backgroundImage: `linear-gradient(to top, ${tokens.colorNeutralBackground5} 40px, transparent 56px)`,\r\n  },\r\n  secondaryAdWrapperHorizontal: {\r\n    ...horizontalAdPreviewContainerSize,\r\n    ...flowerBackgroundImg,\r\n    position: 'relative',\r\n    backgroundPositionY: 'center',\r\n  },\r\n  secondaryAdWrapperSquare: {\r\n    ...squareAdPreviewContainerSize,\r\n    ...flowerBackgroundImg,\r\n    position: 'relative',\r\n    backgroundPositionY: 'center',\r\n  },\r\n  secondaryAdWrapperVertical: {\r\n    ...verticalAdPreviewContainerSize,\r\n    ...flowerBackgroundImg,\r\n    position: 'relative',\r\n    backgroundPositionX: 'center',\r\n    justifyContent: 'flex-start',\r\n  },\r\n  previewCardWrapperHorizontal: {\r\n    display: 'flex',\r\n    flexDirection: 'column',\r\n    ...shorthands.gap(tokens.spacingHorizontalS),\r\n  },\r\n  previewCardWrapperVertical: {\r\n    display: 'flex',\r\n    flexDirection: 'row',\r\n    ...shorthands.gap(tokens.spacingHorizontalS),\r\n  },\r\n  previewCardWrapperSquare: {\r\n    display: 'flex',\r\n    flexDirection: 'row',\r\n    ...shorthands.gap(tokens.spacingHorizontalS),\r\n  },\r\n  primaryAdIconHorizontal: {\r\n    ...horizontalAdIconPosition,\r\n    ...adIconSize,\r\n    position: 'absolute',\r\n  },\r\n  primaryAdIconVertical: {\r\n    ...adIconSize,\r\n    position: 'absolute',\r\n    right: tokens.spacingVerticalXXS,\r\n    top: tokens.spacingVerticalXXS,\r\n  },\r\n  primaryAdIconSquare: {\r\n    ...adIconSize,\r\n    position: 'absolute',\r\n    right: tokens.spacingVerticalXXS,\r\n    top: tokens.spacingVerticalXXS,\r\n  },\r\n  secondaryAdIconHorizontal: {\r\n    ...horizontalAdIconPosition,\r\n    ...adIconSize,\r\n    position: 'absolute',\r\n  },\r\n  secondaryAdIconSquare: {\r\n    ...adIconSize,\r\n    position: 'absolute',\r\n    right: tokens.spacingVerticalXXS,\r\n    bottom: tokens.spacingVerticalXXS,\r\n  },\r\n  secondaryAdIconVertical: {\r\n    ...adIconSize,\r\n    position: 'absolute',\r\n    right: tokens.spacingVerticalXXS,\r\n    bottom: tokens.spacingVerticalXXS,\r\n  },\r\n  primaryAdButtonHorizontal: {\r\n    position: 'absolute',\r\n    right: '36px',\r\n    top: '46px',\r\n  },\r\n  primaryAdButtonVertical: {\r\n    position: 'absolute',\r\n    bottom: tokens.spacingVerticalM,\r\n    left: tokens.spacingHorizontalL,\r\n  },\r\n  primaryAdButtonSquare: {\r\n    position: 'absolute',\r\n    bottom: tokens.spacingVerticalM,\r\n    left: '92px',\r\n  },\r\n  secondaryAdButtonHorizontal: {\r\n    position: 'absolute',\r\n    right: '64px',\r\n    top: '46px',\r\n    backgroundColor: tokens.colorStatusDangerBackground2,\r\n    color: tokens.colorNeutralBackground1,\r\n    shadow: tokens.shadow64,\r\n  },\r\n  secondaryAdButtonSquare: {\r\n    position: 'absolute',\r\n    right: '96px',\r\n    bottom: '46px',\r\n    backgroundColor: tokens.colorStatusDangerBackground2,\r\n    color: tokens.colorNeutralBackground1,\r\n    shadow: tokens.shadow64,\r\n  },\r\n  secondaryAdButtonVertical: {\r\n    position: 'absolute',\r\n    bottom: '40px',\r\n    left: tokens.spacingHorizontalL,\r\n    backgroundColor: tokens.colorStatusDangerBackground2,\r\n    color: tokens.colorNeutralBackground1,\r\n    shadow: tokens.shadow64,\r\n  },\r\n  primaryAdBadgeHorizontal: {\r\n    position: 'absolute',\r\n    right: '36px',\r\n    top: '15px',\r\n    ...adBadgeStyle,\r\n  },\r\n  primaryAdBadgeSquare: {\r\n    position: 'absolute',\r\n    right: tokens.spacingHorizontalXXL,\r\n    top: '1px',\r\n    ...adBadgeStyle,\r\n  },\r\n  primaryAdBadgeVertical: {\r\n    position: 'absolute',\r\n    right: tokens.spacingVerticalXL,\r\n    top: tokens.spacingVerticalXXS,\r\n    ...adBadgeStyle,\r\n  },\r\n  secondaryBadgeHorizontal: {\r\n    position: 'absolute',\r\n    bottom: tokens.spacingVerticalM,\r\n    left: tokens.spacingVerticalXXL,\r\n    ...adBadgeStyle,\r\n  },\r\n  secondaryBadgeSquare: {\r\n    position: 'absolute',\r\n    bottom: tokens.spacingVerticalXXS,\r\n    left: tokens.spacingVerticalXXS,\r\n    ...adBadgeStyle,\r\n  },\r\n  secondaryBadgeVertical: {\r\n    position: 'absolute',\r\n    bottom: tokens.spacingVerticalXXS,\r\n    left: tokens.spacingVerticalXXS,\r\n    ...adBadgeStyle,\r\n  },\r\n  secondarySubtitleHorizontal: {\r\n    ...secondarySubtitleStyles,\r\n    marginTop: tokens.spacingHorizontalM,\r\n    marginLeft: tokens.spacingHorizontalS,\r\n  },\r\n  secondarySubtitleSquare: {\r\n    ...secondarySubtitleStyles,\r\n    marginTop: '48px',\r\n    marginLeft: tokens.spacingHorizontalS,\r\n  },\r\n  secondarySubtitleVertical: {\r\n    ...secondarySubtitleStyles,\r\n    textAlign: 'center',\r\n    fontSize: tokens.fontSizeBase400,\r\n    lineHeight: tokens.lineHeightBase300,\r\n    marginTop: tokens.spacingHorizontalXXL,\r\n  },\r\n  primaryTitleVertical: {\r\n    fontSize: tokens.fontSizeBase400,\r\n    lineHeight: tokens.lineHeightBase400,\r\n  },\r\n  primaryTitleSquare: {\r\n    marginTop: tokens.spacingVerticalS,\r\n  },\r\n  displayNone: {\r\n    display: 'none',\r\n  },\r\n  primaryBodyVertical: {\r\n    marginTop: '-60px',\r\n    lineHeight: tokens.spacingVerticalL,\r\n  },\r\n  primaryBodySquare: {\r\n    marginTop: '-34px',\r\n  },\r\n});\r\n","import { Body1, Body1Strong, Button, Field, InfoLabel, Input, Label, LabelProps, Spinner } from '@fluentui/react-components';\r\nimport React, { useState } from 'react';\r\nimport { injectIntl } from 'react-intl';\r\nimport { getAppStore, onHelpInfoCalloutOpened } from '../../../../../@data';\r\nimport { useNativeAdSdk } from '../../../../../hooks';\r\nimport AdPreview from '../../TythonAdunit/components/AdUnitTypeSelector/PreviewComponent';\r\nimport AutoFitHeight from '../../TythonAdunit/resources/AutoFitHeight.svg';\r\nimport AutoFitWidth from '../../TythonAdunit/resources/AutoFitWidth.svg';\r\nimport messages from '../messages';\r\nimport { InfoLabelContent } from './V2HelpInfoBubble';\r\nimport { useAppAdUnitPrimaryFormStyles } from './styles';\r\n\r\nconst NativeAdDynamicAdPreview = ({ intl: { formatMessage }, config }) => {\r\n  const { isSdkLoaded } = useNativeAdSdk();\r\n\r\n  const { helpInfo, locale } = getAppStore();\r\n  const classNames = useAppAdUnitPrimaryFormStyles();\r\n  const [adWidth, setAdWidth] = useState(config.adWidth);\r\n  const [adHeight, setAdHeight] = useState(config.adHeight);\r\n\r\n  return (\r\n    <>\r\n      <Field\r\n        label={{\r\n          children: (_: unknown, slotProps: LabelProps) => (\r\n            <Label>\r\n              <Body1Strong>{formatMessage(messages.appAdUnitNativePreviewTitle)}</Body1Strong>\r\n              <Button\r\n                className={classNames.infoBubbleNoRequire}\r\n                appearance=\"transparent\"\r\n                onClick={() => onHelpInfoCalloutOpened('pop_PCv4_SiteLevel', locale)}\r\n              >\r\n                <InfoLabel info={<InfoLabelContent html={helpInfo} />} />\r\n              </Button>\r\n            </Label>\r\n          ),\r\n        }}\r\n        className={classNames.sectionTitle}\r\n      />\r\n      <div className={classNames.dimensionInputsWrapper}>\r\n        <Body1>{formatMessage(messages.nativeAdPreviewContainerSize)}</Body1>\r\n        <Input\r\n          className={classNames.dimensionInput}\r\n          contentBefore={<img src={AutoFitWidth} alt={formatMessage(messages.nativeAdPreviewContainerSize)} />}\r\n          value={`${adWidth}` ?? ''}\r\n          onChange={(e) => {\r\n            const newValue = parseInt(e.target.value, 10);\r\n            if (newValue >= 0) {\r\n              setAdWidth(newValue);\r\n            } else if (e.target.value === '') {\r\n              setAdWidth(0);\r\n            }\r\n          }}\r\n          type=\"number\"\r\n        />\r\n        <Body1Strong>x</Body1Strong>\r\n        <Input\r\n          className={classNames.dimensionInput}\r\n          contentBefore={<img src={AutoFitHeight} alt={formatMessage(messages.nativeAdPreviewContainerSize)} />}\r\n          value={`${adHeight}` ?? ''}\r\n          onChange={(e) => {\r\n            const newValue = parseInt(e.target.value, 10);\r\n            if (newValue >= 0) {\r\n              setAdHeight(newValue);\r\n            } else if (e.target.value === '') {\r\n              setAdHeight(0);\r\n            }\r\n          }}\r\n          type=\"number\"\r\n        />\r\n      </div>\r\n      {isSdkLoaded ? (\r\n        <div className={classNames.previewSDKWrapper}>\r\n          <AdPreview config={{ ...config, adHeight: adHeight, adWidth: adWidth }} />\r\n        </div>\r\n      ) : (\r\n        <Spinner size=\"tiny\" />\r\n      )}\r\n    </>\r\n  );\r\n};\r\n\r\nexport default injectIntl(NativeAdDynamicAdPreview);\r\n","import { Body1, Button, Caption1, Card, Subtitle1, mergeClasses } from '@fluentui/react-components';\r\nimport React from 'react';\r\nimport { InjectedIntlProps, injectIntl } from 'react-intl';\r\nimport messages from '../messages';\r\nimport AdVector from './resources/adVector.svg';\r\nimport { useAdPreviewRendererStyles } from './styles';\r\nimport { AppAdUnitPreviewLayout } from './types';\r\n\r\nconst AdPreviewDynamicRenderer: React.FC<InjectedIntlProps & { layout: AppAdUnitPreviewLayout }> = ({\r\n  intl: { formatMessage },\r\n  layout,\r\n}) => {\r\n  const classNames = useAdPreviewRendererStyles();\r\n\r\n  const classes = React.useMemo(\r\n    () => ({\r\n      previewCardWrapperClass: {\r\n        [AppAdUnitPreviewLayout.Horizontal]: classNames.previewCardWrapperHorizontal,\r\n        [AppAdUnitPreviewLayout.Square]: classNames.previewCardWrapperSquare,\r\n        [AppAdUnitPreviewLayout.Vertical]: classNames.previewCardWrapperVertical,\r\n      },\r\n      primaryAdWrapperClass: {\r\n        [AppAdUnitPreviewLayout.Horizontal]: classNames.primaryAdWrapperHorizontal,\r\n        [AppAdUnitPreviewLayout.Square]: classNames.primaryAdWrapperSquare,\r\n        [AppAdUnitPreviewLayout.Vertical]: classNames.primaryAdWrapperVertical,\r\n      },\r\n      primaryButtonClass: {\r\n        [AppAdUnitPreviewLayout.Horizontal]: classNames.primaryAdButtonHorizontal,\r\n        [AppAdUnitPreviewLayout.Square]: classNames.primaryAdButtonSquare,\r\n        [AppAdUnitPreviewLayout.Vertical]: classNames.primaryAdButtonVertical,\r\n      },\r\n      primaryTitleClass: {\r\n        [AppAdUnitPreviewLayout.Vertical]: classNames.primaryTitleVertical,\r\n        [AppAdUnitPreviewLayout.Square]: classNames.primaryTitleSquare,\r\n      },\r\n      primaryAdVectorClass: {\r\n        [AppAdUnitPreviewLayout.Horizontal]: classNames.primaryAdIconHorizontal,\r\n        [AppAdUnitPreviewLayout.Square]: classNames.primaryAdIconSquare,\r\n        [AppAdUnitPreviewLayout.Vertical]: classNames.primaryAdIconVertical,\r\n      },\r\n      primaryAdBadgeClass: {\r\n        [AppAdUnitPreviewLayout.Horizontal]: classNames.primaryAdBadgeHorizontal,\r\n        [AppAdUnitPreviewLayout.Square]: classNames.primaryAdBadgeSquare,\r\n        [AppAdUnitPreviewLayout.Vertical]: classNames.primaryAdBadgeVertical,\r\n      },\r\n      primaryCaptionClass: {\r\n        [AppAdUnitPreviewLayout.Vertical]: classNames.displayNone,\r\n        [AppAdUnitPreviewLayout.Square]: classNames.displayNone,\r\n      },\r\n      primaryBodyClass: {\r\n        [AppAdUnitPreviewLayout.Vertical]: classNames.primaryBodyVertical,\r\n        [AppAdUnitPreviewLayout.Square]: classNames.primaryBodySquare,\r\n      },\r\n      secondaryAdWrapperClass: {\r\n        [AppAdUnitPreviewLayout.Horizontal]: classNames.secondaryAdWrapperHorizontal,\r\n        [AppAdUnitPreviewLayout.Square]: classNames.secondaryAdWrapperSquare,\r\n        [AppAdUnitPreviewLayout.Vertical]: classNames.secondaryAdWrapperVertical,\r\n      },\r\n      secondarySubtitleClass: {\r\n        [AppAdUnitPreviewLayout.Horizontal]: classNames.secondarySubtitleHorizontal,\r\n        [AppAdUnitPreviewLayout.Square]: classNames.secondarySubtitleSquare,\r\n        [AppAdUnitPreviewLayout.Vertical]: classNames.secondarySubtitleVertical,\r\n      },\r\n      secondaryButtonClass: {\r\n        [AppAdUnitPreviewLayout.Horizontal]: classNames.secondaryAdButtonHorizontal,\r\n        [AppAdUnitPreviewLayout.Square]: classNames.secondaryAdButtonSquare,\r\n        [AppAdUnitPreviewLayout.Vertical]: classNames.secondaryAdButtonVertical,\r\n      },\r\n      secondaryAdVectorClass: {\r\n        [AppAdUnitPreviewLayout.Horizontal]: classNames.secondaryAdIconHorizontal,\r\n        [AppAdUnitPreviewLayout.Square]: classNames.secondaryAdIconSquare,\r\n        [AppAdUnitPreviewLayout.Vertical]: classNames.secondaryAdIconVertical,\r\n      },\r\n      secondaryAdBadgeClass: {\r\n        [AppAdUnitPreviewLayout.Horizontal]: classNames.secondaryBadgeHorizontal,\r\n        [AppAdUnitPreviewLayout.Square]: classNames.secondaryBadgeSquare,\r\n        [AppAdUnitPreviewLayout.Vertical]: classNames.secondaryBadgeVertical,\r\n      },\r\n    }),\r\n    // eslint-disable-next-line react-hooks/exhaustive-deps\r\n    [layout]\r\n  );\r\n  return (\r\n    <>\r\n      <div className={mergeClasses(classes.previewCardWrapperClass[layout], classNames.nonSelectableText)}>\r\n        <Card className={mergeClasses(classes.primaryAdWrapperClass[layout])}>\r\n          <Subtitle1 className={mergeClasses(classes.primaryTitleClass[layout])}>{formatMessage(messages.adPreviewPrimaryTitle)}</Subtitle1>\r\n          <Caption1 className={mergeClasses(classes.primaryCaptionClass[layout])}>\r\n            {formatMessage(messages.adPreviewPrimaryDescriptionLine1)}\r\n          </Caption1>\r\n          <Body1 className={mergeClasses(classes.primaryBodyClass[layout])}>\r\n            {formatMessage(messages.adPreviewPrimaryDescriptionLine2)}\r\n          </Body1>\r\n          <Button appearance=\"primary\" className={mergeClasses(classes.primaryButtonClass[layout])}>\r\n            {formatMessage(messages.adPreviewPrimaryDescriptionActionButton)}\r\n          </Button>\r\n          <img\r\n            className={mergeClasses(classes.primaryAdVectorClass[layout])}\r\n            src={AdVector}\r\n            alt={formatMessage(messages.adPreviewPrimaryTitle)}\r\n          />\r\n          <div className={mergeClasses(classes.primaryAdBadgeClass[layout])}>{formatMessage(messages.adPreviewAdBadgeContent)}</div>\r\n        </Card>\r\n        <Card className={mergeClasses(classes.secondaryAdWrapperClass[layout])}>\r\n          <Subtitle1 className={mergeClasses(classes.secondarySubtitleClass[layout])}>\r\n            {formatMessage(messages.adPreviewPrimaryTitle)}\r\n          </Subtitle1>\r\n          <Button className={mergeClasses(classes.secondaryButtonClass[layout])}>\r\n            {formatMessage(messages.adPreviewPrimaryDescriptionActionButton)}\r\n          </Button>\r\n          <img\r\n            className={mergeClasses(classes.secondaryAdVectorClass[layout])}\r\n            src={AdVector}\r\n            alt={formatMessage(messages.adPreviewPrimaryTitle)}\r\n          />\r\n          <div className={mergeClasses(classes.secondaryAdBadgeClass[layout])}>{formatMessage(messages.adPreviewAdBadgeContent)}</div>\r\n        </Card>\r\n      </div>\r\n    </>\r\n  );\r\n};\r\n\r\nexport default injectIntl(AdPreviewDynamicRenderer);\r\n","import { Body1Strong, InteractionTag, InteractionTagPrimary } from '@fluentui/react-components';\r\nimport React, { useEffect, useState } from 'react';\r\nimport { injectIntl } from 'react-intl';\r\nimport messages from '../messages';\r\nimport AdPreviewDynamicRenderer from './AdPreviewDynamicRenderer';\r\nimport { useAppAdUnitPreviewStyles } from './styles';\r\nimport { AppAdUnitPreviewLayout, StaticAdPreviewType } from './types';\r\n\r\nconst StaticAdPreview: StaticAdPreviewType = ({ intl: { formatMessage }, dimension }) => {\r\n  const [previewLayout, setPreviewLayout] = useState<AppAdUnitPreviewLayout>(AppAdUnitPreviewLayout.Horizontal);\r\n\r\n  const classNames = useAppAdUnitPreviewStyles();\r\n\r\n  const shouldRenderSquareAdPreview = true; // TODO: update this\r\n\r\n  useEffect(() => {\r\n    setPreviewLayout(AppAdUnitPreviewLayout.Horizontal);\r\n  }, []);\r\n\r\n  return (\r\n    <div className={classNames.root}>\r\n      <div className={classNames.tittleWrapper}>\r\n        <Body1Strong>{formatMessage(messages.adTypePreviewTitle)}</Body1Strong>\r\n        {!dimension && (\r\n          <div className={classNames.layoutTagsWrapper}>\r\n            <InteractionTag\r\n              onClick={() => setPreviewLayout(AppAdUnitPreviewLayout.Horizontal)}\r\n              appearance={previewLayout === AppAdUnitPreviewLayout.Horizontal ? 'brand' : 'filled'}\r\n            >\r\n              <InteractionTagPrimary>{formatMessage(messages.adTypePreviewLayoutHorizontal)}</InteractionTagPrimary>\r\n            </InteractionTag>\r\n            {shouldRenderSquareAdPreview && (\r\n              <InteractionTag\r\n                onClick={() => setPreviewLayout(AppAdUnitPreviewLayout.Square)}\r\n                appearance={previewLayout === AppAdUnitPreviewLayout.Square ? 'brand' : 'filled'}\r\n              >\r\n                <InteractionTagPrimary>{formatMessage(messages.adTypePreviewLayoutSquare)}</InteractionTagPrimary>\r\n              </InteractionTag>\r\n            )}\r\n            <InteractionTag\r\n              onClick={() => setPreviewLayout(AppAdUnitPreviewLayout.Vertical)}\r\n              appearance={previewLayout === AppAdUnitPreviewLayout.Vertical ? 'brand' : 'filled'}\r\n            >\r\n              <InteractionTagPrimary>{formatMessage(messages.adTypePreviewLayoutVertical)}</InteractionTagPrimary>\r\n            </InteractionTag>\r\n          </div>\r\n        )}\r\n      </div>\r\n      <div className={classNames.previewWrapper}>\r\n        <AdPreviewDynamicRenderer layout={previewLayout} />\r\n      </div>\r\n    </div>\r\n  );\r\n};\r\n\r\nexport default injectIntl(StaticAdPreview);\r\n","import { Card, Divider, Radio, Subtitle2, mergeClasses } from '@fluentui/react-components';\r\nimport { ChevronDown24Regular, ChevronUp24Regular } from '@fluentui/react-icons';\r\nimport React, { useEffect } from 'react';\r\nimport { isButtonPressKey } from '../../../../../utils/AccessibilityUtils';\r\nimport { useV2SectionalAccordionStyles } from './styles';\r\nimport { V2SectionalAccordionType } from './types';\r\n\r\n/**\r\n * this is same accordion as in ad unit detail page but build on top of fluent 2\r\n */\r\n\r\nconst V2SectionalAccordion: V2SectionalAccordionType = ({\r\n  onTitleToggle,\r\n  isAccordionSelected,\r\n  onRenderLeft,\r\n  onRenderRight,\r\n  titleLabel,\r\n  disabled,\r\n  isLoading,\r\n}) => {\r\n  const classNames = useV2SectionalAccordionStyles();\r\n  const [isComponentExpanded, setIsComponentExpanded] = React.useState(false);\r\n  const shouldComponentExpand = isComponentExpanded && !isLoading;\r\n  const onTitleChecked = (checked) => {\r\n    onTitleToggle();\r\n    setIsComponentExpanded(checked);\r\n  };\r\n\r\n  useEffect(() => {\r\n    setIsComponentExpanded(isAccordionSelected);\r\n  }, [isAccordionSelected]);\r\n\r\n  return (\r\n    <Card className={classNames.card}>\r\n      <div className={classNames.titleWrapper}>\r\n        <Radio\r\n          disabled={isLoading ? true : disabled}\r\n          checked={isLoading ? false : isAccordionSelected}\r\n          onChange={(_, data) => onTitleChecked(data.value)}\r\n          label={<Subtitle2>{titleLabel}</Subtitle2>}\r\n          onKeyDown={(ev) => {\r\n            if (isButtonPressKey(ev.key)) {\r\n              onTitleChecked(isAccordionSelected);\r\n            }\r\n          }}\r\n        />\r\n        {shouldComponentExpand ? (\r\n          <ChevronUp24Regular\r\n            tabIndex={0}\r\n            onClick={() => setIsComponentExpanded(false)}\r\n            className={mergeClasses(classNames.chevronIcon, disabled ? classNames.disabled : '')}\r\n            onKeyDown={(ev) => {\r\n              if (isButtonPressKey(ev.key)) {\r\n                setIsComponentExpanded(false);\r\n              }\r\n            }}\r\n          />\r\n        ) : (\r\n          <ChevronDown24Regular\r\n            tabIndex={0}\r\n            onClick={() => setIsComponentExpanded(true)}\r\n            className={mergeClasses(classNames.chevronIcon, disabled ? classNames.disabled : '')}\r\n            onKeyDown={(ev) => {\r\n              if (isButtonPressKey(ev.key)) {\r\n                setIsComponentExpanded(true);\r\n              }\r\n            }}\r\n          />\r\n        )}\r\n      </div>\r\n      {shouldComponentExpand && (\r\n        <>\r\n          <Divider className={classNames.horizontalDivider} />\r\n          <div className={classNames.contentWrapper}>\r\n            <div className={classNames.contentLeft}>{onRenderLeft()}</div>\r\n            {onRenderRight ? <Divider className={classNames.verticalDivider} vertical /> : <></>}\r\n            {onRenderRight ? <div className={classNames.contentRight}>{onRenderRight()}</div> : <></>}\r\n          </div>\r\n        </>\r\n      )}\r\n    </Card>\r\n  );\r\n};\r\n\r\nexport default V2SectionalAccordion;\r\n","import {\r\n  Body1,\r\n  Body1Strong,\r\n  Body1Stronger,\r\n  Button,\r\n  Caption1,\r\n  Caption1Strong,\r\n  Dropdown,\r\n  Field,\r\n  InfoLabel,\r\n  Input,\r\n  Label,\r\n  LabelProps,\r\n  MessageBar,\r\n  MessageBarBody,\r\n  Option,\r\n  Radio,\r\n} from '@fluentui/react-components';\r\nimport React from 'react';\r\nimport { FormattedMessage } from 'react-intl';\r\nimport { getAppStore, onHelpInfoCalloutOpened } from '../../../../../@data';\r\nimport { ColorPicker } from '../../../../../components/ColorPicker/ColorPicker';\r\nimport { FormItem } from '../../../../../components/Form';\r\nimport { useCMUIHelpExperience } from '../../../../../hooks';\r\nimport { injectIntlAndObserver } from '../../../../../utils';\r\nimport { fontOptions } from '../../TythonAdunit/services/fontOptions';\r\nimport { AppAdUnitType, SelectedAppAdUnitBannerSize, VideoPlayMethod, appAdUnitVideoPlayMethod } from '../CreateAdUnit/types';\r\nimport messages from '../messages';\r\nimport NativeAdDynamicAdPreview from './NativeAdDynamicAdPreview';\r\nimport StaticAdPreview from './StaticAdPreview';\r\nimport { InfoLabelContent } from './V2HelpInfoBubble';\r\nimport V2SectionalAccordion from './V2SectionalAccordion';\r\nimport { useAppAdUnitPrimaryFormStyles } from './styles';\r\nimport { AppAdUnitPrimaryFormType } from './types';\r\n\r\n/**\r\n * this form is build on top of fluent 2, it is required to wrap it inside a fluent provider\r\n * @returns\r\n */\r\nconst AppAdUnitPrimaryForm: AppAdUnitPrimaryFormType = ({\r\n  intl: { formatMessage },\r\n  applicationOptions,\r\n  adUnitName,\r\n  adUnitType,\r\n  adUnitApplicationId,\r\n  onAdUnitApplicationIdChange,\r\n  onAdUnitNameChange,\r\n  onAdUnitTypeChange,\r\n  validationError,\r\n  shouldRenderPrimaryForm,\r\n  selectedBannerAdUnitAdSize,\r\n  onBannerAdUnitAdSizeChange,\r\n  bannerAdSizeOptions,\r\n  videoAdUnitSkipAllowed,\r\n  onVideoAdUnitSkipAllowedChange,\r\n  videoAdUnitDuration,\r\n  onVideoAdUnitDurationChange,\r\n  nativeAdUnitConfig,\r\n  onNativeAdUnitConfigChange,\r\n  videoAdUnitPlayMethod,\r\n  onVideoAdUnitPlayMethodChange,\r\n  isAdUnitLoading,\r\n  isEditMode,\r\n}) => {\r\n  const classNames = useAppAdUnitPrimaryFormStyles();\r\n  const { CMUIPopupArticleByIdAnchor } = useCMUIHelpExperience();\r\n\r\n  if (!shouldRenderPrimaryForm) {\r\n    return <></>;\r\n  }\r\n\r\n  const { helpInfo, locale } = getAppStore();\r\n\r\n  const adTypeAccordionItems = [\r\n    {\r\n      adType: AppAdUnitType.Native,\r\n      title: formatMessage(messages.appAdUnitTypeNativeAdsTitle),\r\n      summary: () => (\r\n        <>\r\n          <Body1Stronger block>{formatMessage(messages.appAdUnitNativeAdConfigTitle)}</Body1Stronger>\r\n          <br />\r\n          <Field\r\n            label={{\r\n              children: (_: unknown, slotProps: LabelProps) => (\r\n                <Label>\r\n                  <Body1>{formatMessage(messages.appAdUnitNativeAdsConfigFontLabel)}</Body1>\r\n                  <Button\r\n                    className={classNames.infoBubbleNoRequire}\r\n                    appearance=\"transparent\"\r\n                    onClick={() => onHelpInfoCalloutOpened('pop_PCv4_SiteLevel', locale)}\r\n                  >\r\n                    <InfoLabel info={<InfoLabelContent html={helpInfo} />} />\r\n                  </Button>\r\n                </Label>\r\n              ),\r\n            }}\r\n          />\r\n          <Dropdown\r\n            className={classNames.dimensionDropdown}\r\n            onOptionSelect={(ev, data) => onNativeAdUnitConfigChange({ ...nativeAdUnitConfig, fontFamily: data.optionValue! })}\r\n            selectedOptions={[nativeAdUnitConfig.fontFamily!]}\r\n            value={nativeAdUnitConfig.fontFamily}\r\n          >\r\n            {fontOptions.map((option) => (\r\n              <Option key={option.key} value={option.key as string} checkIcon={undefined}>\r\n                {option.text}\r\n              </Option>\r\n            ))}\r\n          </Dropdown>\r\n          <div className={classNames.colorSelectorWrapper}>\r\n            <Body1>{formatMessage(messages.appAdUnitNativeAdsConfigTitleColorLabel)}</Body1>\r\n            <ColorPicker\r\n              selectedColor={nativeAdUnitConfig.titleColor}\r\n              onChange={(color) => onNativeAdUnitConfigChange({ ...nativeAdUnitConfig, titleColor: color })}\r\n              colorType={formatMessage(messages.appAdUnitNativeAdsConfigTitleColorLabel)}\r\n              controlled\r\n            />\r\n          </div>\r\n          <div className={classNames.colorSelectorWrapper}>\r\n            <Body1>{formatMessage(messages.appAdUnitNativeAdsConfigBackgroundLabel)}</Body1>\r\n            <ColorPicker\r\n              selectedColor={nativeAdUnitConfig.background}\r\n              onChange={(color) => onNativeAdUnitConfigChange({ ...nativeAdUnitConfig, background: color })}\r\n              colorType={formatMessage(messages.appAdUnitNativeAdsConfigBackgroundLabel)}\r\n              controlled\r\n            />\r\n          </div>\r\n          <div className={classNames.colorSelectorWrapper}>\r\n            <Body1>{formatMessage(messages.appAdUnitNativeAdsConfigButtonBackgroundLabel)}</Body1>\r\n            <ColorPicker\r\n              selectedColor={nativeAdUnitConfig.buttonBackground}\r\n              onChange={(color) => onNativeAdUnitConfigChange({ ...nativeAdUnitConfig, buttonBackground: color })}\r\n              colorType={formatMessage(messages.appAdUnitNativeAdsConfigButtonBackgroundLabel)}\r\n              controlled\r\n            />\r\n          </div>\r\n          <MessageBar intent=\"info\" className={classNames.msgBar}>\r\n            <MessageBarBody>\r\n              <Caption1>{formatMessage(messages.appAdUnitNativeAdsConfigMsgBar)}</Caption1>\r\n            </MessageBarBody>\r\n          </MessageBar>\r\n        </>\r\n      ),\r\n      preview: () => <NativeAdDynamicAdPreview config={nativeAdUnitConfig} />,\r\n    },\r\n    {\r\n      adType: AppAdUnitType.Display,\r\n      title: formatMessage(messages.appAdUnitTypeDisplayAdsTitle),\r\n      summary: () => (\r\n        <>\r\n          <Field\r\n            label={{\r\n              children: (_: unknown, slotProps: LabelProps) => (\r\n                <Label>\r\n                  <Body1Strong>{formatMessage(messages.appAdUnitDisplayAdsBannerAdSizeLabel)}</Body1Strong>\r\n                  <Button\r\n                    className={classNames.infoBubbleNoRequire}\r\n                    appearance=\"transparent\"\r\n                    onClick={() => onHelpInfoCalloutOpened('pop_PCv4_SiteLevel', locale)}\r\n                  >\r\n                    <InfoLabel info={<InfoLabelContent html={helpInfo} />} />\r\n                  </Button>\r\n                </Label>\r\n              ),\r\n            }}\r\n          />\r\n          <Dropdown\r\n            className={classNames.dimensionDropdown}\r\n            onOptionSelect={(ev, data) => onBannerAdUnitAdSizeChange(data.optionValue! as SelectedAppAdUnitBannerSize)}\r\n            selectedOptions={[selectedBannerAdUnitAdSize]}\r\n            value={selectedBannerAdUnitAdSize}\r\n          >\r\n            {bannerAdSizeOptions.map((option) => (\r\n              <Option key={option.key} value={option.key} checkIcon={undefined}>\r\n                {option.value}\r\n              </Option>\r\n            ))}\r\n          </Dropdown>\r\n          <MessageBar intent=\"info\" className={classNames.msgBar}>\r\n            <MessageBarBody>\r\n              <Caption1>\r\n                <FormattedMessage\r\n                  {...messages.adTypeInfoMsgContent}\r\n                  values={{\r\n                    helpLink: (\r\n                      <CMUIPopupArticleByIdAnchor query={'ext07504'} name={formatMessage(messages.adTypeInfoMsgHelpLink)} useV2Link />\r\n                    ),\r\n                  }}\r\n                />\r\n              </Caption1>\r\n            </MessageBarBody>\r\n          </MessageBar>\r\n        </>\r\n      ),\r\n      preview: () => <StaticAdPreview dimension={selectedBannerAdUnitAdSize} />,\r\n    },\r\n    {\r\n      adType: AppAdUnitType.Video,\r\n      disabled: true,\r\n      title: formatMessage(messages.appAdUnitTypeVideoAdsTitle),\r\n      summary: () => (\r\n        <>\r\n          <Body1Stronger block>{formatMessage(messages.appAdUnitVideoAdsInterstitialVideoAdConfigTitle)}</Body1Stronger>\r\n          <br />\r\n          <Field\r\n            label={{\r\n              children: (_: unknown, slotProps: LabelProps) => (\r\n                <Label>\r\n                  <Body1Strong>{formatMessage(messages.appAdUnitVideoAdsInterstitialVideoAdConfigVideoSkipLabel)}</Body1Strong>\r\n                  <Button\r\n                    className={classNames.infoButton}\r\n                    appearance=\"transparent\"\r\n                    onClick={() => onHelpInfoCalloutOpened('pop_PCv4_SiteLevel', locale)}\r\n                  >\r\n                    <InfoLabel info={<InfoLabelContent html={helpInfo} />} />\r\n                  </Button>\r\n                </Label>\r\n              ),\r\n            }}\r\n          />\r\n          <Radio\r\n            checked={videoAdUnitSkipAllowed === true}\r\n            onChange={() => onVideoAdUnitSkipAllowedChange(true)}\r\n            label={<Body1>{formatMessage(messages.appAdUnitVideoSkipYes)}</Body1>}\r\n          />\r\n          <Radio\r\n            checked={videoAdUnitSkipAllowed === false}\r\n            onChange={() => onVideoAdUnitSkipAllowedChange(false)}\r\n            label={<Body1>{formatMessage(messages.appAdUnitVideoSkipNo)}</Body1>}\r\n          />\r\n          <Field\r\n            label={{\r\n              children: (_: unknown, slotProps: LabelProps) => (\r\n                <Label>\r\n                  <Body1Strong>{formatMessage(messages.appAdUnitVideoAdsDuration)}</Body1Strong>\r\n                  <Button\r\n                    className={classNames.infoButton}\r\n                    appearance=\"transparent\"\r\n                    onClick={() => onHelpInfoCalloutOpened('pop_PCv4_SiteLevel', locale)}\r\n                  >\r\n                    <InfoLabel info={<InfoLabelContent html={helpInfo} />} />\r\n                  </Button>\r\n                </Label>\r\n              ),\r\n            }}\r\n          />\r\n          <Input\r\n            contentAfter={<Body1>{formatMessage(messages.appAdUnitVideoAdsDurationMetric)}</Body1>}\r\n            value={videoAdUnitDuration ?? ''}\r\n            placeholder=\"0-30\"\r\n            onChange={(e) => {\r\n              const newValue = parseInt(e.target.value, 10);\r\n              if (newValue >= 0 && newValue <= 30) {\r\n                onVideoAdUnitDurationChange(`${newValue}`);\r\n              } else if (e.target.value === '') {\r\n                onVideoAdUnitDurationChange(undefined); // Handle empty string if the input is cleared\r\n              }\r\n            }}\r\n            type=\"number\"\r\n          />\r\n          <Field\r\n            label={{\r\n              children: (_: unknown, slotProps: LabelProps) => (\r\n                <Label>\r\n                  <Body1Strong>{formatMessage(messages.appAdUnitVideoPlayMethodFieldLabel)}</Body1Strong>\r\n                  <Button\r\n                    className={classNames.infoButton}\r\n                    appearance=\"transparent\"\r\n                    onClick={() => onHelpInfoCalloutOpened('pop_PCv4_SiteLevel', locale)}\r\n                  >\r\n                    <InfoLabel info={<InfoLabelContent html={helpInfo} />} />\r\n                  </Button>\r\n                </Label>\r\n              ),\r\n            }}\r\n          />\r\n          <Dropdown\r\n            className={classNames.dimensionDropdown}\r\n            onOptionSelect={(ev, data) => onVideoAdUnitPlayMethodChange(data.optionValue! as VideoPlayMethod)}\r\n            selectedOptions={[videoAdUnitPlayMethod]}\r\n            value={formatMessage(appAdUnitVideoPlayMethod.find((item) => item.value === videoAdUnitPlayMethod)?.label!)}\r\n          >\r\n            {appAdUnitVideoPlayMethod.map((option) => (\r\n              <Option key={option.value} value={option.value} checkIcon={undefined}>\r\n                {formatMessage(option.label)}\r\n              </Option>\r\n            ))}\r\n          </Dropdown>\r\n        </>\r\n      ),\r\n    },\r\n  ];\r\n\r\n  return (\r\n    <>\r\n      <Body1 className={classNames.subTitle} block>\r\n        {formatMessage(messages.appDetailSubTitle)}\r\n      </Body1>\r\n      <FormItem>\r\n        <Field\r\n          label={{\r\n            children: (_: unknown, slotProps: LabelProps) => (\r\n              <Label>\r\n                {formatMessage(messages.appAdUnitNameFieldLabel)}\r\n                <Button\r\n                  id={adUnitName}\r\n                  className={classNames.infoButton}\r\n                  appearance=\"transparent\"\r\n                  onClick={() => onHelpInfoCalloutOpened('pop_PCv4_SiteLevel', locale)}\r\n                >\r\n                  <InfoLabel info={<InfoLabelContent html={helpInfo} />} />\r\n                </Button>\r\n              </Label>\r\n            ),\r\n          }}\r\n          aria-required={true}\r\n          validationMessage={validationError.addUnitName}\r\n          className={classNames.sectionTitle}\r\n        >\r\n          <Input\r\n            value={adUnitName ? `${adUnitName}` : ''}\r\n            placeholder={formatMessage(messages.appAdUnitNamePlaceholder)}\r\n            disabled={isAdUnitLoading}\r\n            onChange={(_, data) => onAdUnitNameChange(data.value)}\r\n          />\r\n        </Field>\r\n      </FormItem>\r\n      <FormItem>\r\n        <Field\r\n          label={{\r\n            children: (_: unknown, slotProps: LabelProps) => (\r\n              <Label>\r\n                {formatMessage(messages.appAdUnitApplicationIdFieldLabel)}\r\n                <Button\r\n                  className={classNames.infoButton}\r\n                  appearance=\"transparent\"\r\n                  onClick={() => onHelpInfoCalloutOpened('pop_PCv4_UniversalBlockSetting', locale)}\r\n                >\r\n                  <InfoLabel info={<InfoLabelContent html={helpInfo} />} />\r\n                </Button>\r\n              </Label>\r\n            ),\r\n          }}\r\n          required={true}\r\n          aria-required={true}\r\n          validationMessage={validationError.addUnitName}\r\n          className={classNames.sectionTitle}\r\n        >\r\n          <Dropdown\r\n            className={classNames.applicationDropdown}\r\n            onOptionSelect={(ev, data) => onAdUnitApplicationIdChange(data.optionValue!)}\r\n            value={adUnitApplicationId ? applicationOptions.find((item) => item.key === +adUnitApplicationId)?.label : ''}\r\n            disabled={isEditMode}\r\n          >\r\n            {applicationOptions.map((option) => (\r\n              <Option key={option.key} value={`${option.key}`} className={classNames.propertyOption} text={option.label}>\r\n                <div>\r\n                  <Caption1Strong>{option.label}</Caption1Strong>\r\n                  <Caption1>{option.secondaryLabel}</Caption1>\r\n                </div>\r\n              </Option>\r\n            ))}\r\n          </Dropdown>\r\n        </Field>\r\n      </FormItem>\r\n      <FormItem>\r\n        <Field\r\n          label={{\r\n            children: (_: unknown, slotProps: LabelProps) => (\r\n              <Label>\r\n                {formatMessage(messages.appAdUnitTypeFieldLabel)}\r\n                <Button\r\n                  className={classNames.infoButton}\r\n                  appearance=\"transparent\"\r\n                  onClick={() => onHelpInfoCalloutOpened('pop_PCv4_UniversalBlockSetting', locale)}\r\n                >\r\n                  <InfoLabel info={<InfoLabelContent html={helpInfo} />} />\r\n                </Button>\r\n              </Label>\r\n            ),\r\n          }}\r\n          required={true}\r\n          aria-required={true}\r\n          className={classNames.sectionTitle}\r\n        />\r\n      </FormItem>\r\n      {adTypeAccordionItems.map((item) => (\r\n        <>\r\n          <V2SectionalAccordion\r\n            key={item.adType}\r\n            isAccordionSelected={adUnitType === item.adType}\r\n            onTitleToggle={() => onAdUnitTypeChange(item.adType)}\r\n            onRenderLeft={item.summary}\r\n            onRenderRight={item.preview}\r\n            titleLabel={item.title}\r\n            disabled={item.disabled}\r\n            isLoading={isAdUnitLoading}\r\n          />\r\n          <br />\r\n        </>\r\n      ))}\r\n    </>\r\n  );\r\n};\r\n\r\nexport default injectIntlAndObserver(AppAdUnitPrimaryForm);\r\n","import { Avatar, Body1, Body2, Button, Card, Link, Title3 } from '@fluentui/react-components';\r\nimport { Copy20Regular } from '@fluentui/react-icons';\r\nimport React, { useEffect } from 'react';\r\nimport { FormattedMessage, injectIntl } from 'react-intl';\r\nimport { AdUnit, getAppStore } from '../../../../../@data';\r\nimport AppAdUnitCodePanel, { useAppAdUnitCodePanel } from '../../../Ads/Manage/hooks/useAppAdUnitCodePanel';\r\nimport messages from '../messages';\r\nimport CodeIcon from './resources/codeIcon.svg';\r\nimport { useAppAdUnitResultSummaryStyles } from './styles';\r\nimport { AppAdUnitResultSummaryType } from './types';\r\n\r\nconst AppAdUnitResultSummary: AppAdUnitResultSummaryType = ({ adUnitId, shouldRenderResultSummary, intl: { formatMessage } }) => {\r\n  const classNames = useAppAdUnitResultSummaryStyles();\r\n  const adUnitPanelProps = useAppAdUnitCodePanel(true);\r\n  const { publisher } = getAppStore();\r\n  const [isCodeBlockActive, setIsCodeBlockActive] = React.useState<boolean>(false);\r\n\r\n  const onCopy = (content: string) => {\r\n    navigator.clipboard.writeText(content);\r\n  };\r\n\r\n  useEffect(() => {\r\n    adUnitPanelProps.onPanelTrigger(isCodeBlockActive, ({ id: adUnitId } as unknown) as AdUnit);\r\n    // eslint-disable-next-line react-hooks/exhaustive-deps\r\n  }, [isCodeBlockActive]);\r\n\r\n  if (!shouldRenderResultSummary) {\r\n    return <></>;\r\n  }\r\n\r\n  const publisherIdCodeSnippet = `publisher_${publisher?.id}`;\r\n  return (\r\n    <div className={classNames.root}>\r\n      <Title3 block align=\"start\">\r\n        {formatMessage(messages.adUnitFormSubmissionLabelSuccess)}\r\n      </Title3>\r\n      <br />\r\n      <Body2 block align=\"start\">\r\n        {formatMessage(messages.adUnitResultSummarySecondaryContent)}\r\n      </Body2>\r\n      <Body2 block align=\"start\">\r\n        {formatMessage(messages.adUnitResultSummarySecondaryContentSecondary)}\r\n      </Body2>\r\n      <br />\r\n      <Body1 block>\r\n        <Avatar initials=\"1\" size={20} color=\"navy\" className={classNames.stepAvatar} />\r\n        <FormattedMessage\r\n          {...messages.adUnitResultSummaryFollowInstructionContent3}\r\n          values={{\r\n            helpLink: (\r\n              <Link\r\n                target=\"_blank\"\r\n                href=\"https://eng.ms/docs/experiences-devices/webxt/microsoft-ads/pubcenter/microsoftadssdk/microsoft-ads-sdk/ads/docs/quickstart-guide\"\r\n              >\r\n                {formatMessage(messages.adUnitResultSummaryFollowInstructionContent3HelpLink)}\r\n              </Link>\r\n            ),\r\n          }}\r\n        />\r\n      </Body1>\r\n      <div className={classNames.codeCardWrapper}>\r\n        <Card className={classNames.codeCard}>\r\n          <img src={CodeIcon} className={classNames.codeIcon} alt={formatMessage(messages.adUnitResultSummaryFollowInstructionContent3)} />\r\n          <div className={classNames.codeCardContent}>\r\n            <Body1>{publisherIdCodeSnippet}</Body1>\r\n            <Button onClick={() => onCopy(publisherIdCodeSnippet)} icon={<Copy20Regular />} />\r\n          </div>\r\n        </Card>\r\n      </div>\r\n\r\n      <Body1 block>\r\n        <Avatar initials=\"2\" size={20} color=\"navy\" className={classNames.stepAvatar} />\r\n        <FormattedMessage\r\n          {...messages.adUnitResultSummaryFollowInstructionContent4}\r\n          values={{\r\n            helpLink: formatMessage(messages.adUnitResultSummaryFollowInstructionContent4HelpLink),\r\n          }}\r\n        />\r\n      </Body1>\r\n      <div className={classNames.codeCardWrapper}>\r\n        <Card className={classNames.codeCard}>\r\n          <img src={CodeIcon} className={classNames.codeIcon} alt={formatMessage(messages.adUnitResultSummaryFollowInstructionContent4)} />\r\n          <div className={classNames.codeCardContent}>\r\n            <Body1>{`adunit_${adUnitId}`}</Body1>\r\n            <Button onClick={() => onCopy(`adunit_${adUnitId}`)} icon={<Copy20Regular />} />\r\n          </div>\r\n        </Card>\r\n        <Body1 block align=\"start\" className={classNames.codeHelpText}>\r\n          {formatMessage(messages.adUnitResultSummaryCodeHelpContent)}\r\n        </Body1>\r\n        <Button onClick={() => setIsCodeBlockActive(!isCodeBlockActive)} className={classNames.codePanelButton}>\r\n          {formatMessage(\r\n            adUnitPanelProps.isPanelOpen ? messages.adUnitResultSummaryCodeButtonInactive : messages.adUnitResultSummaryCodeButton\r\n          )}\r\n        </Button>\r\n        <AppAdUnitCodePanel {...adUnitPanelProps} />\r\n      </div>\r\n\r\n      <Body1 block>\r\n        <Avatar initials=\"3\" size={20} color=\"navy\" className={classNames.stepAvatar} />\r\n        <FormattedMessage\r\n          {...messages.adUnitResultSummaryFollowInstructionContent5}\r\n          values={{\r\n            helpLink: formatMessage(messages.adUnitResultSummaryFollowInstructionContent5HelpLink),\r\n          }}\r\n        />\r\n      </Body1>\r\n    </div>\r\n  );\r\n};\r\n\r\nexport default injectIntl(AppAdUnitResultSummary);\r\n","import { useCallback, useEffect, useMemo, useState } from 'react';\r\nimport { Log } from '../../../../../../logging/src';\r\nimport { InventoryPlatformType, TythonAdUnitServingConfig, getAppStore, showSuccessToastNotification } from '../../../../../@data';\r\nimport { PropertyServingConfigs } from '../../../../../@data/store/schema/models/ServingConfigs';\r\nimport { FormState } from '../../../../../components/Form';\r\nimport { getTythonAdsManageRoute } from '../../../../../utils/routeUtils';\r\nimport { fetchPropertiesServingConfigs } from '../../../AdBlock/@data/services';\r\nimport {\r\n  DEFAULT_AD_PREVIEW_BACKGROUND_COLOR,\r\n  DEFAULT_AD_PREVIEW_BUTTON_BACKGROUND_COLOR,\r\n  DEFAULT_AD_PREVIEW_FONT,\r\n  DEFAULT_AD_PREVIEW_TITLE_BACKGROUND_COLOR,\r\n} from '../../TythonAdunit/CreateAdunit/constants';\r\nimport { ITythonAdUnit } from '../../TythonAdunit/CreateAdunit/types';\r\nimport { IAdPreviewConfig } from '../../TythonAdunit/components/AdUnitTypeSelector/PreviewComponent';\r\nimport { createTythonAdUnit } from '../../TythonAdunit/services/createTythonAdUnit';\r\nimport { fetchTythonAdUnitById } from '../../TythonAdunit/services/loadTythonAdUnitById';\r\nimport { updateTythonAdUnit } from '../../TythonAdunit/services/updateTythonAdUnit';\r\nimport messages from '../messages';\r\nimport {\r\n  AppAdUnitBannerSize,\r\n  AppAdUnitDetailPageProps,\r\n  AppAdUnitType,\r\n  SelectedAppAdUnitBannerSize,\r\n  UseCreateTythonAppAdUnitType,\r\n  VideoPlayMethod,\r\n} from './types';\r\n\r\nconst DEFAULT_NATIVE_CONFIG = {\r\n  adWidth: 500,\r\n  adHeight: 250,\r\n  fontFamily: DEFAULT_AD_PREVIEW_FONT,\r\n  background: DEFAULT_AD_PREVIEW_BACKGROUND_COLOR,\r\n  buttonBackground: DEFAULT_AD_PREVIEW_BUTTON_BACKGROUND_COLOR,\r\n  titleColor: DEFAULT_AD_PREVIEW_TITLE_BACKGROUND_COLOR,\r\n};\r\n\r\nconst mapPropertyToApplicationOptions = (servingConfigs: PropertyServingConfigs[]) => {\r\n  return servingConfigs\r\n    .filter((item) => item.inventoryPlatformType === InventoryPlatformType.UWP)\r\n    .map((property) => ({\r\n      key: property.propertyId! as number,\r\n      secondaryLabel: property.MicrosoftStoreAppId as string,\r\n      label: property.name as string,\r\n    }));\r\n};\r\n\r\nconst useCreateTythonAppAdUnit: UseCreateTythonAppAdUnitType = ({ mode, formatMessage, routeProps }) => {\r\n  const [adUnitName, setAdUnitName] = useState<string | undefined>(undefined);\r\n  const [adUnitApplicationId, setAdUnitApplicationId] = useState<string | undefined>(undefined); // property id\r\n  // const [adUnitType, setAdUnitType] = useState<AppAdUnitType | undefined>(undefined);\r\n  const [adUnitType, setAdUnitType] = useState<AppAdUnitType | undefined>(AppAdUnitType.Native);\r\n  const [bannerAdUnitAdSize, setBannerAdUnitAdSize] = useState<SelectedAppAdUnitBannerSize>('320 x 50');\r\n  const [videoAdUnitPlayMethod, setVideoAdUnitPlayMethod] = useState<VideoPlayMethod>('auto_sound_on');\r\n  const [applicationOptions, setApplicationOptions] = useState<{ key: number; label: string; secondaryLabel: string }[]>([]);\r\n  const [videoAdUnitSkipAllowed, setVideoAdUnitSkipAllowed] = useState<boolean | undefined>(undefined);\r\n  const [videoAdUnitDuration, setVideoAdUnitDuration] = useState<string | undefined>(undefined);\r\n  const [nativeAdUnitConfig, setNativeAdUnitConfig] = useState<IAdPreviewConfig>(DEFAULT_NATIVE_CONFIG);\r\n  const [rawAdUnit, setRawAdUnit] = useState<TythonAdUnitServingConfig | undefined>(undefined);\r\n\r\n  const [shouldRenderPrimaryForm, setShouldRenderPrimaryForm] = useState<boolean>(true);\r\n  const [shouldRenderResultSummary, setShouldRenderResultSummary] = useState<boolean>(false);\r\n  const [isSavingAdUnit, setIsSavingAdUnit] = useState<boolean>(false);\r\n  const [isAdUnitLoading, setIsAdUnitLoading] = useState<boolean>(false);\r\n  const { publisher, userContext, account } = getAppStore();\r\n  const isEditMode = mode === FormState.Edit || rawAdUnit !== undefined;\r\n\r\n  /**\r\n   * initialize form props for existing ad unit\r\n   */\r\n  useEffect(() => {\r\n    // load property serving configs\r\n    async function asyncInitAdUnitData(formStateMode: FormState) {\r\n      const propertyServingConfigPromise = fetchPropertiesServingConfigs(publisher!);\r\n      setIsAdUnitLoading(true);\r\n      if (formStateMode === FormState.Edit) {\r\n        try {\r\n          const adUnitId = (routeProps.match.params as { id: string }).id!;\r\n          const fetchedAdUnitPromise = fetchTythonAdUnitById(publisher!, userContext!, adUnitId!, formatMessage);\r\n          const [propertyServingConfig, adUnitRaw] = await Promise.all([propertyServingConfigPromise, fetchedAdUnitPromise]);\r\n          const nextOptions = mapPropertyToApplicationOptions(propertyServingConfig);\r\n          setApplicationOptions(nextOptions);\r\n          setRawAdUnit(adUnitRaw);\r\n          setAdUnitName(adUnitRaw.adUnitName);\r\n          setAdUnitApplicationId(`${adUnitRaw.propertyId}`);\r\n          setAdUnitType((adUnitRaw.adTypes[0] as unknown) as AppAdUnitType);\r\n          if (((adUnitRaw.adTypes[0] as unknown) as AppAdUnitType) === AppAdUnitType.Native) {\r\n            setNativeAdUnitConfig({ ...DEFAULT_NATIVE_CONFIG, ...adUnitRaw.nativeProperties } as IAdPreviewConfig);\r\n          }\r\n        } catch (e) {\r\n          console.error(e);\r\n        } finally {\r\n          setIsAdUnitLoading(false);\r\n        }\r\n      } else {\r\n        try {\r\n          const [propertyServingConfig] = await Promise.all([propertyServingConfigPromise]);\r\n          if (propertyServingConfig.length) {\r\n            const nextOptions = mapPropertyToApplicationOptions(propertyServingConfig);\r\n            setApplicationOptions(nextOptions);\r\n          }\r\n        } catch (e) {\r\n          console.error(e);\r\n        } finally {\r\n          setIsAdUnitLoading(false);\r\n        }\r\n      }\r\n    }\r\n    asyncInitAdUnitData(mode);\r\n    // eslint-disable-next-line react-hooks/exhaustive-deps\r\n  }, []);\r\n\r\n  const primaryFormProps = useMemo(() => {\r\n    const validationError = {\r\n      addUnitName: undefined,\r\n    };\r\n    return {\r\n      adUnitName,\r\n      onAdUnitNameChange: setAdUnitName,\r\n      adUnitApplicationId,\r\n      onAdUnitApplicationIdChange: setAdUnitApplicationId,\r\n      adUnitType,\r\n      onAdUnitTypeChange: setAdUnitType,\r\n      shouldRenderPrimaryForm,\r\n      validationError,\r\n      applicationOptions: applicationOptions,\r\n      selectedBannerAdUnitAdSize: bannerAdUnitAdSize,\r\n      onBannerAdUnitAdSizeChange: setBannerAdUnitAdSize,\r\n      bannerAdSizeOptions: Object.values(AppAdUnitBannerSize).map((item) => ({ ...item, key: item.value })),\r\n      videoAdUnitSkipAllowed,\r\n      onVideoAdUnitSkipAllowedChange: setVideoAdUnitSkipAllowed,\r\n      videoAdUnitDuration,\r\n      onVideoAdUnitDurationChange: setVideoAdUnitDuration,\r\n      nativeAdUnitConfig,\r\n      onNativeAdUnitConfigChange: setNativeAdUnitConfig,\r\n      videoAdUnitPlayMethod,\r\n      onVideoAdUnitPlayMethodChange: setVideoAdUnitPlayMethod,\r\n      isAdUnitLoading,\r\n      isEditMode,\r\n    };\r\n  }, [\r\n    adUnitName,\r\n    adUnitApplicationId,\r\n    videoAdUnitSkipAllowed,\r\n    adUnitType,\r\n    shouldRenderPrimaryForm,\r\n    bannerAdUnitAdSize,\r\n    applicationOptions,\r\n    videoAdUnitDuration,\r\n    nativeAdUnitConfig,\r\n    videoAdUnitPlayMethod,\r\n    isAdUnitLoading,\r\n    isEditMode,\r\n  ]);\r\n\r\n  const onAdUnitSubmit = useCallback(async () => {\r\n    const isCreatingNewAdUnit = window?.location?.href.includes('adunit/createApp');\r\n\r\n    if (!publisher || !userContext || !account) {\r\n      return;\r\n    }\r\n    const { adHeight, adWidth, ...deStructuredNativeConfig } = nativeAdUnitConfig;\r\n\r\n    if (isCreatingNewAdUnit) {\r\n      await createTythonAdUnit(\r\n        publisher,\r\n        userContext,\r\n        account,\r\n        ({\r\n          propertyId: adUnitApplicationId,\r\n          name: adUnitName,\r\n          adTypes: [adUnitType!],\r\n          nativeProperties: deStructuredNativeConfig,\r\n        } as unknown) as ITythonAdUnit,\r\n        setIsSavingAdUnit\r\n      )\r\n        .then((data) => {\r\n          setRawAdUnit(data.data.servingConfig);\r\n          setShouldRenderResultSummary(true);\r\n          setShouldRenderPrimaryForm(false);\r\n        })\r\n        .catch((e) => {\r\n          console.error(e);\r\n        });\r\n    } else {\r\n      await updateTythonAdUnit(\r\n        publisher,\r\n        userContext,\r\n        ({\r\n          raw: rawAdUnit,\r\n          id: rawAdUnit?.adUnitId,\r\n          propertyId: adUnitApplicationId,\r\n          name: adUnitName,\r\n          adTypes: [adUnitType!],\r\n          nativeProperties: deStructuredNativeConfig,\r\n          accountId: rawAdUnit?.accountId,\r\n        } as unknown) as ITythonAdUnit,\r\n        rawAdUnit?.adUnitName !== adUnitName,\r\n        setIsSavingAdUnit\r\n      ).then((data) => {\r\n        if (data && (data as { isDirty?: boolean }).isDirty === false) {\r\n          setShouldRenderResultSummary(true);\r\n          setShouldRenderPrimaryForm(false);\r\n          return;\r\n        }\r\n        Log.info(`update tython ad unit success ${JSON.stringify(data)}`);\r\n        showSuccessToastNotification({ text: formatMessage(messages.appAdUnitUpdateSuccess, { adunitId: rawAdUnit?.adUnitId }) });\r\n        setShouldRenderResultSummary(true);\r\n        setShouldRenderPrimaryForm(false);\r\n      });\r\n    }\r\n    // eslint-disable-next-line react-hooks/exhaustive-deps\r\n  }, [nativeAdUnitConfig, adUnitName, adUnitApplicationId, adUnitType]);\r\n\r\n  const detailPageProps = useMemo(() => {\r\n    // Define default properties\r\n    let props: AppAdUnitDetailPageProps = {\r\n      saving: isSavingAdUnit,\r\n      overlayHeight: '100vh',\r\n      loading: isAdUnitLoading,\r\n      onSubmit: () => {\r\n        return;\r\n      },\r\n      submitButtonDisabled: isAdUnitLoading,\r\n      submitLabel: '',\r\n      titleLabel: '',\r\n      cancelLabel: '',\r\n      hasFormTitle: true,\r\n      hideNavButton: false,\r\n      pageMode: mode,\r\n    };\r\n\r\n    if (shouldRenderPrimaryForm) {\r\n      props = {\r\n        ...props,\r\n        titleLabel: formatMessage(messages.createNewAppAdUnitPrimaryFormTitle),\r\n        cancelLabel: formatMessage(messages.adUnitFormCancelLabel),\r\n        submitLabel: formatMessage(messages.adUnitFormNextLabel),\r\n        onSubmit: () => {\r\n          onAdUnitSubmit();\r\n        },\r\n        onCancel: () => routeProps.history.push(getTythonAdsManageRoute(true)),\r\n      };\r\n    } else {\r\n      props = {\r\n        ...props,\r\n        submitLabel: formatMessage(messages.adUnitFormDoneLabel),\r\n        onSubmit: () => routeProps.history.push(getTythonAdsManageRoute(true)),\r\n        hideNavButton: true,\r\n      };\r\n    }\r\n\r\n    return props;\r\n    // eslint-disable-next-line react-hooks/exhaustive-deps\r\n  }, [mode, shouldRenderPrimaryForm, adUnitType, shouldRenderResultSummary, isSavingAdUnit, onAdUnitSubmit, isAdUnitLoading]);\r\n\r\n  const resultSummaryProps = useMemo(() => {\r\n    return {\r\n      shouldRenderResultSummary,\r\n      adUnitId: rawAdUnit?.adUnitId?.toString() ?? '',\r\n    };\r\n    // eslint-disable-next-line react-hooks/exhaustive-deps\r\n  }, [shouldRenderResultSummary, rawAdUnit]);\r\n\r\n  return {\r\n    primaryFormProps,\r\n    detailPageProps,\r\n    resultSummaryProps,\r\n  };\r\n};\r\n\r\nexport default useCreateTythonAppAdUnit;\r\n","import { FluentProvider, webLightTheme } from '@fluentui/react-components';\r\nimport React from 'react';\r\nimport { InjectedIntlProps } from 'react-intl';\r\nimport { getAppStore } from '../../../../../@data';\r\nimport { DetailPage } from '../../../../../layout/DetailPage/DetailPage';\r\nimport { injectIntlAndObserver } from '../../../../../utils';\r\nimport AppAdUnitPrimaryForm from '../components/AppAdUnitPrimaryForm';\r\nimport AppAdUnitResultSummary from '../components/AppAdUnitResultSummary';\r\nimport { ICreateTythonAppAdunitProps } from './types';\r\nimport useCreateTythonAppAdUnit from './useCreateTythonAppAdUnit';\r\n\r\nconst CreateTythonAppAdUnit = injectIntlAndObserver<InjectedIntlProps & ICreateTythonAppAdunitProps>(\r\n  ({ intl: { formatMessage }, mode, routeProps }) => {\r\n    const appStore = getAppStore();\r\n    const { detailPageProps, primaryFormProps, resultSummaryProps } = useCreateTythonAppAdUnit({\r\n      mode,\r\n      formatMessage,\r\n      appStore,\r\n      routeProps,\r\n    });\r\n\r\n    return (\r\n      <DetailPage {...detailPageProps}>\r\n        <FluentProvider theme={webLightTheme}>\r\n          <AppAdUnitPrimaryForm {...primaryFormProps} />\r\n          <AppAdUnitResultSummary {...resultSummaryProps} />\r\n        </FluentProvider>\r\n      </DetailPage>\r\n    );\r\n  }\r\n);\r\n\r\nexport default CreateTythonAppAdUnit;\r\n","import * as React from 'react';\r\nimport { useEffect } from 'react';\r\nimport { InjectedIntlProps } from 'react-intl';\r\nimport { Route, RouteComponentProps, Switch } from 'react-router-dom';\r\nimport { isTythonSelfServeUser } from '../../../@data';\r\nimport { RoutePrefix } from '../../../Routes';\r\nimport { FormState } from '../../../components/Form';\r\nimport { injectIntlWithObserver } from '../../../utils';\r\nimport { getTythonAppAdunitCreationRoute } from '../../../utils/routeUtils';\r\nimport { RouteName } from '../@data';\r\nimport { onCurrentRouteChanged } from '../@data/actions';\r\nimport './@data/mutatorActions';\r\nimport './@data/mutators';\r\nimport './@data/orchestrators';\r\nimport { CreateAdunit } from './Create/CreateAdunit';\r\nimport { ManagePage } from './Manage/ManagePage';\r\nimport CreateTythonAdunit from './TythonAdunit/CreateAdunit';\r\nimport CreateTythonAppAdUnit from './TythonAppAdUnit/CreateAdUnit';\r\n\r\nenum Operation {\r\n  Create,\r\n  Edit,\r\n}\r\n\r\nexport const AdunitPage = injectIntlWithObserver(function AdUnitPageComponent(props: RouteComponentProps & InjectedIntlProps) {\r\n  const _tythonUser = isTythonSelfServeUser();\r\n\r\n  const getRedirectionPage = (operation: Operation, componentProps: RouteComponentProps, isAppAdunit = false) => {\r\n    const mode = operation === Operation.Create ? FormState.Create : FormState.Edit;\r\n    if (_tythonUser) {\r\n      if (isAppAdunit) {\r\n        return <CreateTythonAppAdUnit routeProps={componentProps} mode={mode} />;\r\n      }\r\n      return <CreateTythonAdunit routeProps={componentProps} mode={mode} />;\r\n    } else {\r\n      return <CreateAdunit {...componentProps} mode={mode} />;\r\n    }\r\n  };\r\n\r\n  useEffect(() => {\r\n    onCurrentRouteChanged(RouteName.adunit, props.intl.formatMessage);\r\n    // eslint-disable-next-line react-hooks/exhaustive-deps\r\n  }, []);\r\n\r\n  return (\r\n    <React.Fragment>\r\n      <Switch>\r\n        {/* TODO: use the new TythonManagePage when ad unit serving config api is fully migrated */}\r\n        {/* <Route exact path={`${props.match.url}`} component={_tythonUser ? TythonManagePage : ManagePage} /> */}\r\n        <Route exact path={`${props.match.url}`} component={ManagePage} />\r\n        <Route\r\n          exact\r\n          path={`/${RoutePrefix.adManagement}/:publisherId-:accountId/${RouteName[RouteName.adunit]}/create`}\r\n          render={(componentProps) => getRedirectionPage(Operation.Create, componentProps)}\r\n        />\r\n        <Route\r\n          exact\r\n          path={getTythonAppAdunitCreationRoute()}\r\n          render={(componentProps) => getRedirectionPage(Operation.Create, componentProps, true)}\r\n        />\r\n        <Route\r\n          exact\r\n          path={`/${RoutePrefix.adManagement}/:publisherId-:accountId/${RouteName.adunit}/editApp/:id`}\r\n          render={(componentProps) => getRedirectionPage(Operation.Edit, componentProps, true)}\r\n        />\r\n        <Route\r\n          exact\r\n          path={`/${RoutePrefix.adManagement}/:publisherId/${RouteName.adunit}/editApp/:id`}\r\n          render={(componentProps) => getRedirectionPage(Operation.Edit, componentProps, true)}\r\n        />\r\n        <Route\r\n          path={`/${RoutePrefix.adManagement}/:publisherId-:accountId/${RouteName[RouteName.adunit]}/create/:id`}\r\n          render={(componentProps) => getRedirectionPage(Operation.Create, componentProps)}\r\n        />\r\n        <Route\r\n          exact\r\n          path={`/${RoutePrefix.adManagement}/:publisherId-:accountId/${RouteName[RouteName.adunit]}/edit/:id`}\r\n          render={(componentProps) => getRedirectionPage(Operation.Edit, componentProps)}\r\n        />\r\n        <Route\r\n          exact\r\n          path={`/${RoutePrefix.adManagement}/:publisherId/${RouteName[RouteName.adunit]}/edit/:id`}\r\n          render={(componentProps) => getRedirectionPage(Operation.Edit, componentProps)}\r\n        />\r\n        <Route\r\n          exact\r\n          path={`/${RoutePrefix.adManagement}/:publisherId-:accountId/${RouteName[RouteName.adunit]}/edit/:id?step=:step`}\r\n          render={(componentProps) => getRedirectionPage(Operation.Edit, componentProps)}\r\n        />\r\n        <Route\r\n          exact\r\n          path={`/${RoutePrefix.adManagement}/:publisherId-:accountId/${\r\n            RouteName[RouteName.adunit]\r\n          }/edit/:id?step=:step&showExtraBtns/:showExtraBtns`}\r\n          render={(componentProps) => getRedirectionPage(Operation.Edit, componentProps)}\r\n        />\r\n      </Switch>\r\n    </React.Fragment>\r\n  );\r\n});\r\n","import { mutator } from 'satcheljs';\r\nimport { Channel } from '../../../../../@data';\r\nimport { mergeTypeWithObject } from '../../../../../utils';\r\nimport {\r\n  onChannelChanged,\r\n  onChannelErrorChanged,\r\n  onChannelsFetched,\r\n  onFetchChannelsLoading,\r\n  onFetchingChannelsData,\r\n  onRawChanged,\r\n} from '../actions';\r\nimport { getStore } from '../store/store';\r\n\r\nmutator(onRawChanged, (msg) => {\r\n  getStore().raw = mergeTypeWithObject(new Channel(), msg.value);\r\n});\r\n\r\nmutator(onChannelChanged, (msg) => {\r\n  getStore().active = msg.channel;\r\n});\r\n\r\nmutator(onFetchChannelsLoading, (msg) => {\r\n  getStore().isLoading = msg.isLoading;\r\n});\r\n\r\nmutator(onFetchingChannelsData, (msg) => {\r\n  getStore().isFetchingData = msg.isFetchingData;\r\n});\r\n\r\nmutator(onChannelsFetched, (msg) => {\r\n  getStore().gridChannels = msg.items;\r\n});\r\n\r\nmutator(onChannelErrorChanged, (msg) => {\r\n  const store = getStore();\r\n  if (!store.errors.name && !store.errors.adunitsSelected && !store.errors.filtersSelected && !!msg.values) {\r\n    getStore().errors = msg.values;\r\n  } else if (!!getStore().errors.name || !!getStore().errors.adunitsSelected || !!getStore().errors.filtersSelected) {\r\n    getStore().errors = msg.values || {};\r\n  }\r\n});\r\n","import { mutator } from 'satcheljs';\r\nimport { onFormAdunitsChanged, onFormChannelNameChanged, onFormCleared, onFormFiltersChanged, onFormIdChanged } from '../actions';\r\nimport { getStore } from '../store/store';\r\n\r\nmutator(onFormIdChanged, msg => {\r\n  getStore().active.id = msg.value;\r\n});\r\n\r\nmutator(onFormChannelNameChanged, msg => {\r\n  getStore().active.name = msg.value;\r\n});\r\n\r\nmutator(onFormAdunitsChanged, msg => {\r\n  getStore().active.adunitsSelected = msg.values;\r\n});\r\n\r\nmutator(onFormFiltersChanged, msg => {\r\n  getStore().active.filtersSelected = msg.values;\r\n});\r\n\r\nmutator(onFormCleared, () => {\r\n  getStore().active = {};\r\n});\r\n","import { orchestrator } from 'satcheljs';\r\nimport { FormState } from '../../../../../components/Form';\r\nimport { onPanelOpenChanged } from '../../../@data/actions';\r\nimport { onFormCancelled, onFormCleared } from '../actions';\r\n\r\norchestrator(onFormCancelled, async msg => {\r\n  onFormCleared();\r\n  if (msg.mode === FormState.InPageCreate) {\r\n    onPanelOpenChanged(false);\r\n  }\r\n});\r\n","import { Channel, listEntity, Publisher, UserContext } from '../../../../../@data';\r\n\r\nexport const fetchChannelById = async (publisher: Publisher, id: string, userContext?: UserContext): Promise<Channel> => {\r\n  const list = await listEntity([publisher], userContext, Channel, new URLSearchParams([['ids', id]]));\r\n\r\n  if (!list || !list.length) {\r\n    throw Error('Cannot find channel Id');\r\n  }\r\n\r\n  return list[0];\r\n};\r\n","import { MessageBarType } from '@fluentui/react';\r\nimport { orchestrator } from 'satcheljs';\r\nimport {\r\n  Account,\r\n  AdUnit,\r\n  Filter,\r\n  FilterScope,\r\n  getAppStore,\r\n  listEntity,\r\n  onLoadingChanged,\r\n  onNotificationChanged,\r\n  Publisher,\r\n} from '../../../../../@data';\r\nimport { FormState } from '../../../../../components/Form';\r\nimport { IIdNamePair } from '../../../../../components/MultiSelectPicker';\r\nimport { setPublisherAndAccountContext } from '../../../@data/services/AdManagementService';\r\nimport { fetchAdunitById } from '../../../Adunit/@data/services/AdunitService';\r\nimport { onChannelChanged, onChannelErrorChanged, onFormInitialized, onRawChanged } from '../actions';\r\nimport { fetchChannelById } from '../services/ChannelService';\r\nimport { IChannelViewModel } from '../store/schema';\r\n\r\norchestrator(onFormInitialized, async (msg) => {\r\n  const { userContext } = getAppStore();\r\n\r\n  const viewModel: IChannelViewModel = {\r\n    filters: [],\r\n    adunits: [],\r\n  };\r\n\r\n  const publisherId = parseInt(msg.publisherId, 10);\r\n  let accountId = parseInt(msg.accountId, 10);\r\n\r\n  // To load create channel page in adunit edit page with 'All accounts' scope\r\n  if (!isNaN(publisherId) && accountId === 0 && msg.mode === FormState.InPageCreate && msg.entityId) {\r\n    const adunit = await fetchAdunitById(new Publisher(publisherId), msg.entityId, userContext);\r\n    accountId = adunit.accountId || NaN;\r\n  }\r\n\r\n  if (!isNaN(publisherId) && !isNaN(accountId)) {\r\n    const publisher = new Publisher(publisherId);\r\n    const account = new Account(accountId);\r\n\r\n    try {\r\n      setPublisherAndAccountContext(publisher, account);\r\n\r\n      onChannelErrorChanged();\r\n      onLoadingChanged(true);\r\n\r\n      const response = await Promise.all([\r\n        listEntity([publisher, account], userContext, AdUnit),\r\n        listEntity([publisher, account], userContext, Filter),\r\n      ]);\r\n\r\n      viewModel.adunits = response[0] ? response[0]!.map((f) => ({ id: f.id, name: f.name } as IIdNamePair)) : [];\r\n\r\n      // Filters for this scenario need to be scoped by Account, in order to edit/save them in UI.\r\n      viewModel.filters = response[1]\r\n        ? response[1]!.filter((f) => f.filterScope === FilterScope.Account).map((f) => ({ id: f.id, name: f.name } as IIdNamePair))\r\n        : [];\r\n\r\n      if (msg.mode === FormState.Edit && msg.entityId) {\r\n        const raw = await fetchChannelById(publisher, msg.entityId, userContext);\r\n\r\n        viewModel.id = raw.id;\r\n        viewModel.name = String(raw.name);\r\n        viewModel.filtersSelected = raw.associatedFilterIds ? viewModel.filters.filter((a) => raw.associatedFilterIds!.includes(a.id)) : [];\r\n        viewModel.adunitsSelected = raw.associatedAdUnitIds ? viewModel.adunits.filter((f) => raw.associatedAdUnitIds!.includes(f.id)) : [];\r\n\r\n        onRawChanged(raw);\r\n      } else {\r\n        onRawChanged();\r\n      }\r\n\r\n      onChannelChanged(viewModel);\r\n    } catch (e) {\r\n      onNotificationChanged({\r\n        text: 'Failed to load entity',\r\n        messageBarType: MessageBarType.severeWarning,\r\n      });\r\n    } finally {\r\n      onLoadingChanged(false);\r\n    }\r\n  } else {\r\n    onNotificationChanged({\r\n      text: `You have arrived in an invalid state, please report.`,\r\n      messageBarType: MessageBarType.severeWarning,\r\n    });\r\n  }\r\n});\r\n","import { MessageBarType } from '@fluentui/react';\r\nimport { orchestrator } from 'satcheljs';\r\nimport {\r\n  Channel,\r\n  ChannelType,\r\n  getAppStore,\r\n  onNavigateBack,\r\n  onNotificationChanged,\r\n  onSavingChanged,\r\n  postEntity,\r\n  putEntity,\r\n} from '../../../../../@data';\r\nimport { FormState } from '../../../../../components/Form';\r\nimport { IIdNamePair } from '../../../../../components/MultiSelectPicker';\r\nimport { INotificationBarItem } from '../../../../../components/NotificationBar';\r\nimport { validateSchema } from '../../../../../utils';\r\nimport { RouteName } from '../../../@data';\r\nimport { onPanelOpenChanged } from '../../../@data/actions';\r\nimport { createReturnUrl } from '../../../@data/services/AdManagementService';\r\nimport { onFilterChannelListChanged } from '../../../AdFilter/@data/actions';\r\nimport { getFilterStore } from '../../../AdFilter/@data/store/store';\r\nimport { getAdunitStore } from '../../../Adunit/@data';\r\nimport { onAdunitChannelListChanged } from '../../../Adunit/@data/actions';\r\nimport { fetchAdunitById } from '../../../Adunit/@data/services/AdunitService';\r\nimport { onChannelErrorChanged, onFormCleared, onFormIdChanged, onFormSubmitted } from '../actions';\r\nimport { fetchChannelById } from '../services/ChannelService';\r\nimport { channelErrorModel } from '../store/schema/ChannelErrorModel';\r\nimport { getStore } from '../store/store';\r\n\r\n/**\r\n * 1) Set Loading to true\r\n * 2) Submit API call to Submit Data to Store\r\n * 3) Check errors, if any, send action to notification that error exists\r\n * 4) Clear the form\r\n * 5) Navigate back to channel list\r\n */\r\norchestrator(onFormSubmitted, async (msg) => {\r\n  const { publisher, account, userContext } = getAppStore();\r\n  const { active, raw } = getStore();\r\n\r\n  let notification: INotificationBarItem = {};\r\n\r\n  if (userContext && publisher && account && raw) {\r\n    const body: Channel = {\r\n      ...raw,\r\n      id: active.id,\r\n      name: active.name,\r\n      accountId: account.id,\r\n    };\r\n\r\n    if (body.accountId === 0 && msg.entityId && msg.mode === FormState.InPageCreate) {\r\n      // fetch accountId using adunit id\r\n      const adunit = await fetchAdunitById(publisher, msg.entityId, userContext);\r\n      body.accountId = adunit.accountId || NaN;\r\n    }\r\n\r\n    try {\r\n      await validateSchema(channelErrorModel(), active);\r\n      onChannelErrorChanged();\r\n    } catch (e) {\r\n      onChannelErrorChanged(e);\r\n      onNotificationChanged({\r\n        text: `Channel - You have ${Object.keys(e).length} missing fields, please fill them to continue.`,\r\n        messageBarType: MessageBarType.severeWarning,\r\n      });\r\n      return;\r\n    }\r\n\r\n    onSavingChanged(true);\r\n\r\n    body.type = ChannelType.CUSTOM;\r\n    body.urls = [];\r\n    body.associatedAdUnitIds = active.adunitsSelected ? active.adunitsSelected.map((m) => m.id) : [];\r\n    body.associatedFilterIds = active.filtersSelected ? active.filtersSelected.map((m) => m.id) : [];\r\n\r\n    try {\r\n      let entity: Channel | undefined;\r\n\r\n      if (msg.mode === FormState.Edit) {\r\n        entity = await putEntity([publisher], body, userContext, Channel);\r\n\r\n        notification = {\r\n          text: `Edited channel ${entity.id} success`,\r\n          messageBarType: MessageBarType.success,\r\n        };\r\n      } else {\r\n        entity = await postEntity([publisher], Channel, body, userContext);\r\n\r\n        if (entity && entity.id) {\r\n          onFormIdChanged(entity.id);\r\n          const filterStore = getFilterStore();\r\n          const adunitStore = getAdunitStore();\r\n\r\n          const channel = await fetchChannelById(publisher, entity.id + '', userContext);\r\n          const filterChannelList = [] as IIdNamePair[];\r\n          const adunitChannelList = [] as IIdNamePair[];\r\n\r\n          if (filterStore.active.channels) {\r\n            const newChannel = { id: channel.id, name: channel.name } as IIdNamePair;\r\n            filterChannelList.push(...filterStore.active.channels);\r\n            filterChannelList.push(newChannel);\r\n          }\r\n\r\n          if (adunitStore.active.channels) {\r\n            const newChannel = { id: channel.id, name: channel.name } as IIdNamePair;\r\n            adunitChannelList.push(...adunitStore.active.channels);\r\n            adunitChannelList.push(newChannel);\r\n          }\r\n          onFilterChannelListChanged(filterChannelList);\r\n          onAdunitChannelListChanged(adunitChannelList);\r\n        }\r\n\r\n        notification = {\r\n          text: `Created new channel ${entity.id} success`,\r\n          messageBarType: MessageBarType.success,\r\n        };\r\n      }\r\n\r\n      if (msg.mode === FormState.InPageCreate) {\r\n        onPanelOpenChanged(false);\r\n      } else {\r\n        // return to manage page\r\n        const returnUrl = createReturnUrl(RouteName.channel, String(publisher.id), String(account.id));\r\n        onNavigateBack(msg.routeHistory, returnUrl);\r\n      }\r\n\r\n      onFormCleared();\r\n    } catch (e) {\r\n      notification = {\r\n        text: `Submitting the channel form \"${FormState[msg.mode]}\" caught an error \"${e}\"`,\r\n        messageBarType: MessageBarType.error,\r\n      };\r\n    } finally {\r\n      onSavingChanged(false);\r\n    }\r\n  } else {\r\n    notification = {\r\n      text: `Channel form \"${FormState[msg.mode]}\" is invalid id ${active.id}`,\r\n      messageBarType: MessageBarType.warning,\r\n    };\r\n  }\r\n\r\n  onNotificationChanged(notification);\r\n});\r\n","import { object, string } from 'yup';\r\nimport { IdNamePairErrorModel } from '../../../../../../@data/store/schema';\r\nimport { ArrayObservableSchemaYupType } from '../../../../../../utils/validation';\r\nimport { IChannelViewModel } from './IChannelViewModel';\r\n\r\nexport function channelErrorModel() {\r\n  return object<IChannelViewModel>().shape({\r\n    name: string().trim().required(),\r\n    adunitsSelected: new ArrayObservableSchemaYupType().of(IdNamePairErrorModel).required(),\r\n    filtersSelected: new ArrayObservableSchemaYupType().of(IdNamePairErrorModel)\r\n  });\r\n}\r\n","import { MessageBarType } from '@fluentui/react';\r\nimport { orchestrator } from 'satcheljs';\r\nimport { Log } from '../../../../../../logging/src';\r\nimport { Channel, getAppStore, listEntity, onNotificationChanged } from '../../../../../@data';\r\nimport { onChannelsFetched, onFetchChannelsLoading, onFetchingChannelsData } from '../actions';\r\nimport { onManagePageInitialized } from '../actions/onManagePageInitialized';\r\nimport { getStore } from '../store/store';\r\n\r\norchestrator(onManagePageInitialized, async () => {\r\n  try {\r\n    const { publisher, userContext, account } = getAppStore();\r\n    const channels = getStore().gridChannels;\r\n\r\n    if (channels === undefined || channels.length === 0) {\r\n      onFetchChannelsLoading(true);\r\n    }\r\n    onFetchingChannelsData(true);\r\n\r\n    if (publisher && account && userContext) {\r\n      const params = new URLSearchParams([['extendedInfo', 'true']]);\r\n      const data = await listEntity([publisher, account], userContext, Channel, params);\r\n      onChannelsFetched(data);\r\n    } else {\r\n      onChannelsFetched([]);\r\n    }\r\n  } catch (error) {\r\n    Log.error(error);\r\n    onNotificationChanged({ messageBarType: MessageBarType.error, text: 'Failed to load channels' });\r\n  } finally {\r\n    onFetchingChannelsData(false);\r\n    onFetchChannelsLoading(false);\r\n  }\r\n});\r\n","import { defineMessages } from 'react-intl';\r\n\r\nexport default defineMessages({\r\n  create: {\r\n    id: 'channel.create',\r\n    defaultMessage: 'Create Channel',\r\n  },\r\n  notFound: {\r\n    id: 'channel.notFound',\r\n    defaultMessage: 'No channels found for this account, create one.',\r\n  },\r\n  deactivateTitle: {\r\n    id: 'channel.deactivateTitle',\r\n    defaultMessage: 'Do you want to deactivate channel(s)?',\r\n  },\r\n  channelName: {\r\n    id: 'channel.channelName',\r\n    defaultMessage: 'Channel name',\r\n  },\r\n  channelId: {\r\n    id: 'channel.channelId',\r\n    defaultMessage: 'Channel ID',\r\n  },\r\n  adunitsNumber: {\r\n    id: 'channel.adunitsNumber',\r\n    defaultMessage: '# of ad units',\r\n  },\r\n  adunitNames: {\r\n    id: 'channel.adunitNames',\r\n    defaultMessage: 'Ad unit names',\r\n  },\r\n  adfiltersNumber: {\r\n    id: 'channel.adfiltersNumber',\r\n    defaultMessage: '# of ad filters',\r\n  },\r\n  adfilterNames: {\r\n    id: 'channel.adfilterNames',\r\n    defaultMessage: 'Ad filter names',\r\n  },\r\n  channels: {\r\n    id: 'channels',\r\n    defaultMessage: 'Channels',\r\n  },\r\n  actions: {\r\n    id: 'property.actions',\r\n    defaultMessage: 'Actions',\r\n  },\r\n  zeroResultTitle: {\r\n    id: 'channel.zeroResultTitle',\r\n    defaultMessage: 'No channels yet',\r\n  },\r\n  zeroResultDescription: {\r\n    id: 'channel.zeroResultDescription',\r\n    defaultMessage: 'You haven’t created any channel yet',\r\n  },\r\n  noPublisherSelected: {\r\n    id: 'property.noPublisherSelected',\r\n    defaultMessage: 'A publisher isn’t selected yet. To start managing channels, search for a publisher..',\r\n  },\r\n});\r\n","import { Model, getAppStore } from '../../../../../@data';\r\nimport { CommandBarActions, IBuildCommandBarProps } from '../../../../../layout/GridPageV2';\r\nimport { getStore } from '../../@data';\r\nimport messages from '../ManagePage.messages';\r\n\r\nexport function getCommandBarItems(): IBuildCommandBarProps<Model> | undefined {\r\n  const { publisher, account } = getAppStore();\r\n  const { gridChannels, isLoading } = getStore();\r\n\r\n  const commandBarItems: IBuildCommandBarProps<Model> | undefined =\r\n    (gridChannels && gridChannels.length !== 0 && publisher && account) || isLoading\r\n      ? {\r\n          primaryButtonLabel: messages.create,\r\n          includeActions: [CommandBarActions.new],\r\n          includeFarActions: [\r\n            CommandBarActions.searchBox,\r\n            CommandBarActions.edit,\r\n            CommandBarActions.activate,\r\n            CommandBarActions.deactivate,\r\n            CommandBarActions.delete,\r\n            CommandBarActions.download,\r\n            CommandBarActions.modifyColumns,\r\n          ],\r\n        }\r\n      : undefined;\r\n\r\n  return commandBarItems;\r\n}\r\n","import * as React from 'react';\r\nimport { useEffect } from 'react';\r\nimport { Channel, getAppStore } from '../../../../@data';\r\nimport { DefaultRoute } from '../../../../Routes';\r\nimport { ZeroResults } from '../../../../components/ZeroResults/ZeroResults';\r\nimport { useWindowSize } from '../../../../hooks';\r\nimport { getStore as getWindowSizeStore } from '../../../../hooks/useWindowSize/store/store';\r\nimport { GridPageLayout } from '../../../../layout/GridPageLayout/GridPageLayout';\r\nimport { GridV2, IGridV2Column } from '../../../../layout/GridPageV2';\r\nimport { IRouterWithIntl, injectIntlWithObserver } from '../../../../utils/ReactUtils';\r\nimport { RouteName } from '../../@data';\r\nimport { getStore } from '../@data';\r\nimport { onChannelsFetched } from '../@data/actions';\r\nimport { onManagePageInitialized } from '../@data/actions/onManagePageInitialized';\r\nimport messages from './ManagePage.messages';\r\nimport { getCommandBarItems } from './utils/getCommandBarItems';\r\nimport { getGridColumns } from './utils/getGridColumns';\r\n\r\nexport const ManagePage = injectIntlWithObserver(function ChannelManagePage(props: IRouterWithIntl) {\r\n  const { publisher, account } = getAppStore();\r\n  const { gridChannels, isLoading, isFetchingData } = getStore();\r\n  const { formatMessage } = props.intl;\r\n  const { windowStoreSerializer } = useWindowSize();\r\n  const { isWindowRegularSize } = windowStoreSerializer(getWindowSizeStore());\r\n  const gridDefaultColumns: IGridV2Column[] = getGridColumns(formatMessage, isWindowRegularSize, props.history);\r\n\r\n  const NoResultComponent = (\r\n    <ZeroResults\r\n      showDefaultImage\r\n      title={!!publisher ? formatMessage(messages.zeroResultTitle) : undefined}\r\n      description={formatMessage(!!publisher ? messages.zeroResultDescription : messages.noPublisherSelected)}\r\n      buttonText={formatMessage(messages.create)}\r\n      onButtonClick={\r\n        !!publisher ? () => props.history.push(`${DefaultRoute}/${publisher?.id}-${account?.id}/${RouteName.channel}/create`) : undefined\r\n      }\r\n    />\r\n  );\r\n\r\n  useEffect(() => {\r\n    onManagePageInitialized();\r\n  }, [publisher, account]);\r\n\r\n  return (\r\n    <GridPageLayout>\r\n      <GridV2\r\n        history={props.history}\r\n        location={props.location}\r\n        match={props.match}\r\n        entity={Channel}\r\n        pageTitle={{ title: formatMessage(messages.channels), helpId: 'pop_PCv4_Channels' }}\r\n        commandBarProps={getCommandBarItems()}\r\n        dataGridProps={{\r\n          gridV2Columns: gridDefaultColumns,\r\n          data: publisher && account ? gridChannels || [] : [],\r\n          setData: onChannelsFetched,\r\n          shimmerLines: 10,\r\n          renderZeroItemsComponent: NoResultComponent,\r\n          noEntityFound: messages.notFound,\r\n        }}\r\n        isGridReady={!isLoading}\r\n        isDataLoading={isFetchingData}\r\n        paginationProps={{\r\n          shouldGridHandlePagination: true,\r\n        }}\r\n      />\r\n    </GridPageLayout>\r\n  );\r\n});\r\n","import { CommandBarButton } from '@fluentui/react';\r\nimport React from 'react';\r\nimport { Channel, PopupType, getAccessPermission, getAppStore } from '../../../../../@data';\r\nimport { hasDeleteAccess, hasUpdateAccess } from '../../../../../@data/services/UserRoleService';\r\nimport AppMessages from '../../../../../App.messages';\r\nimport { IGridV2Column } from '../../../../../layout/GridPageV2';\r\nimport { setDialogType } from '../../../../../layout/GridPageV2/@data/mutatorActions';\r\nimport messages from '../ManagePage.messages';\r\n\r\nexport function getGridColumns(formatMessage, isWindowRegularSize, routeHistory): IGridV2Column[] {\r\n  const appStore = getAppStore();\r\n\r\n  const columns: IGridV2Column[] = [\r\n    {\r\n      key: 'name',\r\n      fieldName: 'name',\r\n      name: formatMessage(messages.channelName),\r\n      minWidth: 100,\r\n      maxWidth: 125,\r\n      isSearchable: true,\r\n      isVisible: true,\r\n      isExportable: true,\r\n      isResizable: true,\r\n      suppressSorting: false,\r\n      onRender: (item: Channel) => item.name,\r\n    },\r\n    {\r\n      key: 'id',\r\n      fieldName: 'id',\r\n      name: formatMessage(messages.channelId),\r\n      minWidth: 100,\r\n      maxWidth: 100,\r\n      isSearchable: true,\r\n      isVisible: true,\r\n      isExportable: true,\r\n      isResizable: true,\r\n      onRender: (item: Channel) => item.id,\r\n    },\r\n    {\r\n      key: 'status',\r\n      name: formatMessage(AppMessages.status),\r\n      minWidth: 100,\r\n      maxWidth: 100,\r\n      isSearchable: true,\r\n      isVisible: true,\r\n      isExportable: true,\r\n      onRender: (item: Channel) => item.status,\r\n    },\r\n    {\r\n      key: 'associatedAdUnitCount',\r\n      fieldName: 'associatedAdUnitCount',\r\n      name: formatMessage(messages.adunitsNumber),\r\n      minWidth: 150,\r\n      maxWidth: 150,\r\n      isSearchable: true,\r\n      isResizable: true,\r\n      isVisible: true,\r\n      isExportable: true,\r\n      onRender: (item: Channel) => item.associatedAdUnitCount,\r\n    },\r\n    {\r\n      key: 'associatedAdUnitNames',\r\n      fieldName: 'associatedAdUnitNames',\r\n      name: formatMessage(messages.adunitNames),\r\n      minWidth: 150,\r\n      maxWidth: 150,\r\n      isSearchable: true,\r\n      isResizable: true,\r\n      isVisible: false,\r\n      isExportable: true,\r\n      onRender: (item: Channel) => item.associatedAdUnitIds?.length,\r\n    },\r\n    {\r\n      key: 'associatedFilterCount',\r\n      fieldName: 'associatedFilterCount',\r\n      name: formatMessage(messages.adfiltersNumber),\r\n      minWidth: 150,\r\n      maxWidth: 150,\r\n      isSearchable: true,\r\n      isResizable: true,\r\n      isVisible: true,\r\n      isExportable: true,\r\n      onRender: (item: Channel) => item.associatedFilterCount,\r\n    },\r\n    {\r\n      key: 'associatedFilterNames',\r\n      fieldName: 'associatedFilterNames',\r\n      name: formatMessage(messages.adfilterNames),\r\n      minWidth: 150,\r\n      maxWidth: 150,\r\n      isSearchable: true,\r\n      isResizable: true,\r\n      isVisible: false,\r\n      isExportable: true,\r\n      onRender: (item: Channel) => item.associatedFilterIds?.length,\r\n    },\r\n    {\r\n      key: 'actions',\r\n      name: formatMessage(messages.actions),\r\n      minWidth: 150,\r\n      maxWidth: 150,\r\n      isPadded: true,\r\n      isSearchable: true,\r\n      isVisible: true,\r\n      suppressSorting: true,\r\n      onRender: (item: Channel) => {\r\n        const accessPermission = getAccessPermission(item);\r\n\r\n        return (\r\n          <div>\r\n            <CommandBarButton\r\n              id={`adunitCallout-${item.id}`}\r\n              styles={{ root: { background: 'transparent' } }}\r\n              iconProps={{ iconName: 'edit' }}\r\n              ariaLabel={formatMessage(AppMessages.edit)}\r\n              text={isWindowRegularSize ? formatMessage(AppMessages.edit) : ''}\r\n              disabled={!hasUpdateAccess(accessPermission) || appStore?.publisher === undefined || appStore?.account === undefined}\r\n              onClick={() =>\r\n                routeHistory.push(`/ad-management/${appStore?.publisher?.id}-${appStore?.account?.id}/channel/edit/${item.id}`)\r\n              }\r\n            />\r\n            <CommandBarButton\r\n              styles={{ root: { background: 'transparent' } }}\r\n              iconProps={{ iconName: 'Delete' }}\r\n              text={isWindowRegularSize ? formatMessage(AppMessages.delete) : ''}\r\n              onClick={() => setDialogType(PopupType.DeleteConfirmation)}\r\n              disabled={!hasDeleteAccess(accessPermission)}\r\n            />\r\n          </div>\r\n        );\r\n      },\r\n    },\r\n  ];\r\n\r\n  return columns;\r\n}\r\n","import * as React from 'react';\r\nimport { useEffect } from 'react';\r\nimport { InjectedIntlProps } from 'react-intl';\r\nimport { Route, RouteComponentProps } from 'react-router-dom';\r\nimport { RoutePrefix } from '../../../Routes';\r\nimport { FormState } from '../../../components/Form';\r\nimport { injectIntlWithObserver } from '../../../utils';\r\nimport { RouteName } from '../@data';\r\nimport { onCurrentRouteChanged } from '../@data/actions';\r\nimport './@data/mutators';\r\nimport './@data/orchestrators';\r\nimport { CreateChannel } from './Create/CreateChannel';\r\nimport { ManagePage } from './Manage/ManagePage';\r\n\r\nexport const ChannelPage = injectIntlWithObserver(function ChannelPageComponent(props: RouteComponentProps & InjectedIntlProps) {\r\n  useEffect(() => {\r\n    onCurrentRouteChanged(RouteName.channel, props.intl.formatMessage);\r\n    // eslint-disable-next-line react-hooks/exhaustive-deps\r\n  }, []);\r\n\r\n  return (\r\n    <React.Fragment>\r\n      <Route exact path={`${props.match.url}`} component={ManagePage} />\r\n      <Route\r\n        path={`/${RoutePrefix.adManagement}/:publisherId-:accountId/${RouteName[RouteName.channel]}/create`}\r\n        render={(propsToRender) => <CreateChannel {...propsToRender} mode={FormState.Create} />}\r\n      />\r\n      <Route\r\n        path={`/${RoutePrefix.adManagement}/:publisherId-:accountId/${RouteName[RouteName.channel]}/edit/:id`}\r\n        render={(propsToRender) => <CreateChannel {...propsToRender} mode={FormState.Edit} />}\r\n      />\r\n    </React.Fragment>\r\n  );\r\n});\r\n","import { getTheme, mergeStyleSets } from '@fluentui/react';\r\nimport { AccessibilityContrast, IPubcenterPalette, IPubcenterSpacing } from '../../../../../../theme';\r\nimport { ICommonStyleProps } from '../../../../../types';\r\n\r\ntype StyleProperties = 'containerStyle' | 'contentStyle' | 'headerStyle' | 'dateStyle' | 'descriptionStyle' | 'buttonStyle';\r\ntype SetupCardStyles = Record<StyleProperties, string>;\r\n\r\nexport const getStyles = (props: ICommonStyleProps): SetupCardStyles => {\r\n  const { theme } = props;\r\n  const spacing = theme.spacing as IPubcenterSpacing;\r\n  const palette = theme.palette as IPubcenterPalette;\r\n  const { Activated } = AccessibilityContrast;\r\n\r\n  return mergeStyleSets({\r\n    containerStyle: {\r\n      display: 'flex',\r\n      flexDirection: 'column',\r\n      width: 'auto',\r\n      boxShadow: `0px 0px ${spacing.size7} 0px rgba(0,0,0,0.2)`,\r\n      transition: '0.3s',\r\n      borderRadius: spacing.size4,\r\n      flex: 1,\r\n      [Activated]: {\r\n        color: 'windowtext',\r\n        borderColor: 'window',\r\n        forcedColorAdjust: 'none',\r\n      },\r\n    },\r\n    contentStyle: {\r\n      justifyContent: 'center',\r\n      display: 'flex',\r\n      flexDirection: 'column',\r\n      paddingLeft: spacing.size16,\r\n      paddingRight: spacing.size10,\r\n    },\r\n    headerStyle: { margin: `${spacing.size10} 0px`, fontSize: spacing.size18, fontWeight: '600' },\r\n    dateStyle: { color: palette.darkSilver, fontSize: spacing.size12, marginBottom: spacing.size6 },\r\n    descriptionStyle: {\r\n      marginTop: '0px',\r\n    },\r\n    buttonStyle: {\r\n      display: 'flex',\r\n      alignItems: 'flex-end',\r\n      paddingLeft: spacing.size16,\r\n      paddingBottom: spacing.size16,\r\n      marginTop: 'auto',\r\n    },\r\n  });\r\n};\r\n\r\nexport function getClassNames<PropType>(props?: PropType) {\r\n  return getStyles({ theme: getTheme(), ...props });\r\n}\r\n","import { Shimmer } from '@fluentui/react';\r\nimport React, { ReactElement } from 'react';\r\nimport { InjectedIntlProps } from 'react-intl';\r\nimport { useI18n } from '../../../../../../i18n/useI18n';\r\nimport { getAppStore } from '../../../../../@data';\r\nimport { injectIntlAndObserver } from '../../../../../utils';\r\nimport { getStore } from '../../../Account/Settings/@data/store/store';\r\nimport { getClassNames } from './AnnouncementCard.styles';\r\nimport { getShimmerAnnouncementCard } from './utils/getShimmerAnnouncementCards';\r\nimport { dateFormate } from './utils/utils';\r\n\r\nexport interface IAnnouncementCard {\r\n  title: string;\r\n  description: string;\r\n  date: number;\r\n  button?: ReactElement;\r\n}\r\n\r\nexport interface IAnnouncementCardProps extends InjectedIntlProps {\r\n  card: IAnnouncementCard;\r\n}\r\n\r\nexport const AnnouncementCard = injectIntlAndObserver(function AnnouncementCardComponent(props: IAnnouncementCardProps) {\r\n  // need to be loaded from store, is the value of announcement in store is retrieved or not. ex: undefined or not\r\n  const isDataLoaded = false;\r\n  const { publisher, userContext } = getAppStore();\r\n  const { systemPreferences } = getStore().active;\r\n  const { locale } = useI18n({ systemPreferences, publisher, userContext });\r\n  const date = new Date(props.card.date);\r\n  const { containerStyle, contentStyle, headerStyle, dateStyle, descriptionStyle, buttonStyle } = getClassNames();\r\n\r\n  return (\r\n    <div className={containerStyle}>\r\n      {!isDataLoaded ? (\r\n        <>\r\n          <div className={contentStyle}>\r\n            <span className={headerStyle}>{props.card.title}</span>\r\n            <span className={dateStyle}>{dateFormate(date, locale)}</span>\r\n            <p className={descriptionStyle}>{props.card.description}</p>\r\n          </div>\r\n          <div className={buttonStyle}>{props.card.button}</div>\r\n        </>\r\n      ) : (\r\n        <Shimmer customElementsGroup={getShimmerAnnouncementCard()} style={{ minHeight: '320px' }} />\r\n      )}\r\n    </div>\r\n  );\r\n});\r\n","import React from 'react';\r\n\r\nfunction ordinal(dayNum: number): string {\r\n  const suffixes = {\r\n    '1': 'st',\r\n    '21': 'st',\r\n    '31': 'st',\r\n    '2': 'nd',\r\n    '22': 'nd',\r\n    '3': 'rd',\r\n    '23': 'rd',\r\n  };\r\n  return suffixes[dayNum] || 'th';\r\n}\r\n\r\nexport function dateFormate(date: Date, locale: string): JSX.Element {\r\n  return (\r\n    <>\r\n      {date.toLocaleString(locale, { month: 'long' }) + ' ' + date.getDate()}\r\n      <sup>{ordinal(date.getDate())}</sup>\r\n      {', ' + date.getFullYear()}\r\n    </>\r\n  );\r\n}\r\n","import { defineMessages } from 'react-intl';\r\n\r\nexport default defineMessages({\r\n  announcementTitle: {\r\n    id: 'announcement.title',\r\n    defaultMessage: 'Announcements',\r\n  },\r\n  firstAnnouncementTitle: {\r\n    id: 'firstAnnouncement.title',\r\n    defaultMessage: 'New customer support experience',\r\n  },\r\n  firstAnnouncementDescription: {\r\n    id: 'firstAnnouncement.description',\r\n    defaultMessage: 'Our new webform makes it easier for you to contact our customer support team.',\r\n  },\r\n  firstAnnouncementButton: {\r\n    id: 'firstAnnouncement.button',\r\n    defaultMessage: 'Contact Support',\r\n  },\r\n  secondAnnouncementTitle: {\r\n    id: 'secondAnnouncement.title',\r\n    defaultMessage: 'We’ve updated the settings for native ads',\r\n  },\r\n  secondAnnouncementDescription: {\r\n    id: 'secondAnnouncement.description',\r\n    defaultMessage: 'The updated settings for native ads make it easier to create ad units and earn from your website.',\r\n  },\r\n  secondAnnouncementButton: {\r\n    id: 'secondAnnouncement.button',\r\n    defaultMessage: 'Learn more',\r\n  },\r\n  thirdAnnouncementTitle: {\r\n    id: 'thirdAnnouncement.title',\r\n    defaultMessage: 'Preview your Google mediation report',\r\n  },\r\n  thirdAnnouncementDescription: {\r\n    id: 'thirdAnnouncement.description',\r\n    defaultMessage:\r\n      'You can now preview your Google mediation report directly in the Reports tab. Please note, this feature is only accessible to users who have Google mediation enabled. You can activate Google mediation by selecting Account > Settings > Connect.',\r\n  },\r\n  thirdAnnouncementButton: {\r\n    id: 'thirdAnnouncement.button',\r\n    defaultMessage: 'View reports',\r\n  },\r\n});\r\n","import { getTheme, mergeStyleSets } from '@fluentui/react';\r\nimport { IPubcenterPalette, IPubcenterSpacing } from '../../../../../../theme';\r\nimport { ICommonStyleProps } from '../../../../../types';\r\n\r\ntype StyleProperties = 'cardsContainer' | 'buttonStyle' | 'headerSection';\r\ntype GettingStartedStyles = Record<StyleProperties, string>;\r\n\r\nexport const getStyles = (props: ICommonStyleProps): GettingStartedStyles => {\r\n  const { theme } = props;\r\n  const spacing = theme.spacing as IPubcenterSpacing;\r\n  const palette = theme.palette as IPubcenterPalette;\r\n\r\n  return mergeStyleSets({\r\n    cardsContainer: {\r\n      display: 'grid',\r\n      gridTemplateColumns: `repeat(auto-fit, minmax(${spacing.size260}, 1fr))`,\r\n      justifyContent: 'space-between',\r\n      gap: spacing.size15,\r\n    },\r\n    buttonStyle: {\r\n      justifyContent: 'center',\r\n      display: 'flex',\r\n      background: palette.white,\r\n      color: palette.neutralPrimary,\r\n      border: `${spacing.size1} solid ${palette['NeutralStroke1.Rest']}`,\r\n      borderRadius: spacing.size4,\r\n      selectors: {\r\n        '&:focus': {\r\n          border: '2px solid black',\r\n        },\r\n        ':hover': {\r\n          background: palette.neutralLighter,\r\n          border: `${spacing.size1} solid ${palette['NeutralStroke1.Rest']}`,\r\n          color: palette.neutralPrimary,\r\n        },\r\n      },\r\n    },\r\n    headerSection: {\r\n      margin: `${spacing.size15} 0px`,\r\n      fontSize: spacing.size20,\r\n      fontWeight: '600',\r\n    },\r\n  });\r\n};\r\n\r\nexport function getClassNames<PropType>(props?: PropType) {\r\n  return getStyles({ theme: getTheme(), ...props });\r\n}\r\n","import { PrimaryButton } from '@fluentui/react';\r\nimport React from 'react';\r\nimport { IHeaderItem } from '../../../../../../components/Header/Header.types';\r\nimport { getTythonReportDashboardPageRoute } from '../../../../../../utils/routeUtils';\r\nimport { IAnnouncementCard } from '../../AnnouncementCard/AnnouncementCard';\r\nimport { connectToSupportTeam } from '../../ResourcesSection/ResourcesSection';\r\nimport messages from '../Announcements.message';\r\nimport { getClassNames } from '../Announcements.styles';\r\n\r\nexport const getAnnouncementCards = (\r\n  history,\r\n  setIsNotificationPanelOpen,\r\n  itemData: IHeaderItem,\r\n  CMUIPopupArticleUsingButton,\r\n  formatMessage\r\n): IAnnouncementCard[] => {\r\n  const { buttonStyle } = getClassNames();\r\n\r\n  const announcementCards: IAnnouncementCard[] = [\r\n    {\r\n      title: formatMessage(messages.firstAnnouncementTitle),\r\n      description: formatMessage(messages.firstAnnouncementDescription),\r\n      date: 1705693326950,\r\n      button: (\r\n        <PrimaryButton\r\n          text={formatMessage(messages.firstAnnouncementButton)}\r\n          className={buttonStyle}\r\n          onClick={() => connectToSupportTeam()}\r\n          tabIndex={0}\r\n        />\r\n      ),\r\n    },\r\n    {\r\n      title: formatMessage(messages.secondAnnouncementTitle),\r\n      description: formatMessage(messages.secondAnnouncementDescription),\r\n      date: 1693008001000,\r\n      button: (\r\n        <CMUIPopupArticleUsingButton\r\n          query=\"ext07504\"\r\n          className={itemData.className}\r\n          anchorStyle={{ textDecoration: 'none', color: 'black' }}\r\n          formatMessage={formatMessage}\r\n          buttonText={messages.secondAnnouncementButton}\r\n          buttonStyle={buttonStyle}\r\n        />\r\n      ),\r\n    },\r\n    {\r\n      title: formatMessage(messages.thirdAnnouncementTitle),\r\n      description: formatMessage(messages.thirdAnnouncementDescription),\r\n      date: 1693008001000,\r\n      button: (\r\n        <PrimaryButton\r\n          text={formatMessage(messages.thirdAnnouncementButton)}\r\n          className={buttonStyle}\r\n          onClick={() => handleViewReportButton()}\r\n          tabIndex={0}\r\n        />\r\n      ),\r\n    },\r\n  ];\r\n\r\n  function handleViewReportButton() {\r\n    history.push(getTythonReportDashboardPageRoute());\r\n  }\r\n\r\n  return announcementCards;\r\n};\r\n","import { Panel, PanelType } from '@fluentui/react';\r\nimport React from 'react';\r\nimport { getAppStore, isTythonSelfServeUser } from '../../../../../../@data';\r\nimport AppMessages from '../../../../../../App.messages';\r\nimport { IHeaderItem, PanelTypes } from '../../../../../../components/Header/Header.types';\r\nimport { CUSTOM_WIDTH } from '../../../../../../constants/AppConstants';\r\nimport messages from '../../../../../../layout/GlobalSearchHeader/GlobalSearchHeader.messages';\r\nimport { NotificationsPanel, renderNotificationFooterContent } from '../../../../../../layout/PageLayout/header-panels';\r\n\r\ninterface IHeaderData {\r\n  items?: IHeaderItem[];\r\n}\r\n\r\nexport const getHeaderItems = (CMUIHeaderMenuItemSerializer, formatMessage) => {\r\n  const notifications = getAppStore().panelNotifications;\r\n  const items: IHeaderItem[] = [\r\n    {\r\n      key: 'notifications',\r\n      icon: 'Notifications',\r\n      title: formatMessage(messages.notifications),\r\n      type: PanelTypes.Notifications,\r\n      panel: NotificationsPanel,\r\n      panelProps: {\r\n        isFooterAtBottom: true,\r\n        onRenderFooterContent: renderNotificationFooterContent,\r\n      },\r\n      shouldOverflowUnderExtraSmallScreen: true,\r\n      showRedDot: notifications && notifications.length > 0,\r\n    },\r\n  ];\r\n\r\n  const itemsData: IHeaderData = {\r\n    items: CMUIHeaderMenuItemSerializer(isTythonSelfServeUser(), items),\r\n  };\r\n\r\n  return itemsData;\r\n};\r\n\r\nexport const createPanel = (\r\n  item: IHeaderItem,\r\n  isNotificationPanelOpen: boolean,\r\n  formatMessage,\r\n  setIsNotificationPanelOpen\r\n): JSX.Element => {\r\n  // For icons such as CMUI help icon, panels are integrated with 3rd party libraries no need to render native panel\r\n  if (item && !item.panel) {\r\n    return <></>;\r\n  }\r\n\r\n  return (\r\n    <Panel\r\n      headerText={item?.title}\r\n      type={PanelType.custom}\r\n      customWidth={CUSTOM_WIDTH}\r\n      isOpen={isNotificationPanelOpen}\r\n      isLightDismiss={true}\r\n      onDismiss={() => hidePanel(setIsNotificationPanelOpen)}\r\n      closeButtonAriaLabel={formatMessage(AppMessages.close)}\r\n      isFooterAtBottom={item?.panelProps?.isFooterAtBottom}\r\n      onRenderFooterContent={() =>\r\n        item?.panelProps?.onRenderFooterContent?.({ onDismiss: () => hidePanel(setIsNotificationPanelOpen) }) || null\r\n      }\r\n    >\r\n      {item?.panel ? React.cloneElement(<item.panel />, { hidePanel: () => hidePanel(setIsNotificationPanelOpen) }) : <p>Loading...</p>}\r\n    </Panel>\r\n  );\r\n};\r\n\r\nexport const showPanel = (setIsNotificationPanelOpen) => {\r\n  setIsNotificationPanelOpen(true);\r\n};\r\n\r\nconst hidePanel = (setIsNotificationPanelOpen) => {\r\n  setIsNotificationPanelOpen(false);\r\n};\r\n","import React, { useState } from 'react';\r\nimport { IHeaderItem } from '../../../../../components/Header/Header.types';\r\nimport { useCMUIHelpExperience } from '../../../../../hooks';\r\nimport { injectRouterAndIntlWithObserver } from '../../../../../utils';\r\nimport { AnnouncementCard, IAnnouncementCard } from '../AnnouncementCard/AnnouncementCard';\r\nimport messages from './Announcements.message';\r\nimport { getClassNames } from './Announcements.styles';\r\nimport { getAnnouncementCards } from './utils/getAnnouncementCards';\r\nimport { createPanel, getHeaderItems } from './utils/utils';\r\n\r\ninterface IHeaderData {\r\n  items?: IHeaderItem[];\r\n}\r\n\r\nexport const Announcements = injectRouterAndIntlWithObserver(function AnnouncementsComponent(props) {\r\n  const { cardsContainer, headerSection } = getClassNames();\r\n  const { formatMessage } = props.intl;\r\n  const { CMUIHeaderMenuItemSerializer, CMUIPopupArticleUsingButton } = useCMUIHelpExperience();\r\n  const [isNotificationPanelOpen, setIsNotificationPanelOpen] = useState(false);\r\n\r\n  const itemsData: IHeaderData = getHeaderItems(CMUIHeaderMenuItemSerializer, formatMessage);\r\n\r\n  // TODO\r\n  // Get the annoucements from BE using a new endpoint through a useEffect\r\n\r\n  const displayAnnouncementCards = (cards: IAnnouncementCard[]) => {\r\n    return cards.map((card, index) => <AnnouncementCard card={card} key={index} />);\r\n  };\r\n\r\n  return (\r\n    <div>\r\n      <h2 className={headerSection}>{formatMessage(messages.announcementTitle)}</h2>\r\n      {createPanel(itemsData.items![1], isNotificationPanelOpen, formatMessage, setIsNotificationPanelOpen)}\r\n      <div className={cardsContainer}>\r\n        {displayAnnouncementCards(\r\n          getAnnouncementCards(props.history, setIsNotificationPanelOpen, itemsData.items![0], CMUIPopupArticleUsingButton, formatMessage)\r\n        )}\r\n      </div>\r\n    </div>\r\n  );\r\n});\r\n","import { defineMessages } from 'react-intl';\r\n\r\nexport default defineMessages({\r\n  faqTitle: {\r\n    id: 'faq.title',\r\n    defaultMessage: 'FAQ: Setup and Activation',\r\n  },\r\n  firstQuestion: {\r\n    id: 'first.question',\r\n    defaultMessage: 'How do I activate my {appName} account?',\r\n  },\r\n  firstAnswer: {\r\n    id: 'first.answer',\r\n    defaultMessage: `You can take the following steps to activate your account:\r\n    1. Submit your profile for review and approval.\r\n    2. Connect and submit your site for review.\r\n    3. Ensure that an ad unit status is actively serving.\r\n    Upon successful completion of these steps, your account will be activated, and your site will be eligible to show ads.`,\r\n  },\r\n  secondQuestion: {\r\n    id: 'second.question',\r\n    defaultMessage: 'Can I earn money from my website if I’m located outside of the United States?',\r\n  },\r\n  secondAnswer: {\r\n    id: 'second.answer',\r\n    defaultMessage:\r\n      'No, we only provide access to publishers with active bank accounts in the United States. If you’re located outside of the United States and wish to express your interest, please connect with us ',\r\n  },\r\n  thirdQuestion: {\r\n    id: 'third.question',\r\n    defaultMessage: 'Can I earn money from multiple sites using one account?',\r\n  },\r\n  thirdAnswer: {\r\n    id: 'third.answer',\r\n    defaultMessage: 'Yes, you can add multiple sites to your account. After completing our site review, your site will be ready to earn.',\r\n  },\r\n  fourthQuestion: {\r\n    id: 'fourth.question',\r\n    defaultMessage: 'Why is my website status pending? What can I do to change its status?',\r\n  },\r\n  fourthAnswer: {\r\n    id: 'fourth.answer',\r\n    defaultMessage:\r\n      'Your website may be pending because your profile review isn’t complete. Once your profile review is complete, we’ll continue with your site review and your website status will reflect this change.',\r\n  },\r\n  fifthQuestion: {\r\n    id: 'fifth.question',\r\n    defaultMessage: 'Can I correct an error that I made while submitting my profile?',\r\n  },\r\n  fifthAnswer: {\r\n    id: 'fifth.answer',\r\n    defaultMessage:\r\n      'Once your profile is submitted, you won’t be able to edit until the review process is finalized. If you need to make changes to your profile during the review process, please ',\r\n  },\r\n  contactSupport: {\r\n    id: 'contact.support',\r\n    defaultMessage: 'contact support.',\r\n  },\r\n  redirectUser: {\r\n    id: 'redirect.user',\r\n    defaultMessage: 'here.',\r\n  },\r\n});\r\n","import { getTheme, mergeStyleSets } from '@fluentui/react';\r\nimport { IPubcenterSpacing } from '../../../../../../theme';\r\nimport { ICommonStyleProps } from '../../../../../types';\r\n\r\ntype StyleProperties = 'container' | 'headerSection';\r\ntype SetupCardStyles = Record<StyleProperties, string>;\r\n\r\nexport const getStyles = (props: ICommonStyleProps): SetupCardStyles => {\r\n  const { theme } = props;\r\n  const spacing = theme.spacing as IPubcenterSpacing;\r\n\r\n  return mergeStyleSets({\r\n    container: {\r\n      display: 'flex',\r\n      flexDirection: 'column',\r\n      cursor: 'pointer',\r\n      boxShadow: `0px 0px ${spacing.size7} 0px rgba(0,0,0,0.2)`,\r\n    },\r\n    headerSection: {\r\n      margin: `${spacing.size15} 0px`,\r\n      fontSize: spacing.size20,\r\n      fontWeight: '600',\r\n    },\r\n  });\r\n};\r\n\r\nexport function getClassNames<PropType>(props?: PropType) {\r\n  return getStyles({ theme: getTheme(), ...props });\r\n}\r\n","import { getTheme, mergeStyleSets } from '@fluentui/react';\r\nimport { IPubcenterPalette, IPubcenterSpacing } from '../../../../../../../theme';\r\nimport { ICommonStyleProps } from '../../../../../../types';\r\n\r\ntype StyleProperties = 'details' | 'titleStyle' | 'content' | 'arrow';\r\n\r\ntype SetupCardStyles = Record<StyleProperties, string>;\r\n\r\nexport const getStyles = (props: ICommonStyleProps): SetupCardStyles => {\r\n  const { theme } = props;\r\n  const spacing = theme.spacing as IPubcenterSpacing;\r\n  const palette = theme.palette as IPubcenterPalette;\r\n\r\n  return mergeStyleSets({\r\n    details: {\r\n      borderRadius: `0px 0px ${spacing.size1} 0px`,\r\n      borderBottom: `${spacing.size1} solid ${palette.neutralLight}`,\r\n      cursor: 'pointer',\r\n      summary: {\r\n        listStyle: 'none',\r\n        display: 'flex',\r\n      },\r\n    },\r\n    titleStyle: {\r\n      userSelect: 'none',\r\n      padding: `${spacing.size16} ${spacing.size12}`,\r\n      fontWeight: 600,\r\n      fontSize: spacing.size16,\r\n    },\r\n    content: {\r\n      borderTop: `${spacing.size1} solid ${palette.azureishWhite}`,\r\n      padding: `${spacing.size16} ${spacing.size12} ${spacing.size16} ${spacing.size48}`,\r\n      cursor: 'default',\r\n      color: palette['NeutralForeground3.Rest'],\r\n      '> a': {\r\n        color: palette['CompoundBrandForeground1.Rest'],\r\n        textDecoration: 'none',\r\n      },\r\n    },\r\n    arrow: {\r\n      pointerEvents: 'none',\r\n      userSelect: 'none',\r\n      display: 'flex',\r\n      alignItems: 'center',\r\n      justifyContent: 'center',\r\n      width: spacing.size36,\r\n      paddingLeft: spacing.size6,\r\n    },\r\n  });\r\n};\r\n\r\nexport function getClassNames<PropType>(props?: PropType) {\r\n  return getStyles({ theme: getTheme(), ...props });\r\n}\r\n","import { Icon } from '@fluentui/react';\r\nimport React, { ReactNode } from 'react';\r\nimport { InjectedIntlProps } from 'react-intl';\r\nimport { injectIntlAndObserver } from '../../../../../../utils';\r\nimport { getClassNames } from './FAQCard.styles';\r\n\r\nexport interface IFAQProps {\r\n  title: string;\r\n  description: ReactNode;\r\n  isOpen?: boolean;\r\n  order?: number;\r\n  setIsOpen?: (index: number) => void;\r\n}\r\n\r\nconst FAQCard = injectIntlAndObserver<InjectedIntlProps & IFAQProps>(({ intl, ...props }) => {\r\n  const { title, description, isOpen, order } = props;\r\n  const { details, titleStyle, arrow, content } = getClassNames();\r\n\r\n  return (\r\n    <details className={details} open={isOpen}>\r\n      <summary\r\n        onClick={(e) => {\r\n          props.setIsOpen?.(isOpen ? -1 : order ?? -1);\r\n          e.preventDefault();\r\n        }}\r\n      >\r\n        <Icon className={arrow} iconName={isOpen ? 'ChevronDown' : 'ChevronRight'} />\r\n        <span className={titleStyle}>{title}</span>\r\n      </summary>\r\n\r\n      <div className={content}>{description}</div>\r\n    </details>\r\n  );\r\n});\r\n\r\nexport default FAQCard;\r\n","import React, { useState } from 'react';\r\nimport { InjectedIntlProps } from 'react-intl';\r\nimport { isTythonSelfServeUser } from '../../../../../@data';\r\nimport { SupportPageRoute } from '../../../../../Routes';\r\nimport { APP_NAME_NEW, SUPPORT_EMAIL } from '../../../../../constants/AppConstants';\r\nimport { injectIntlAndObserver } from '../../../../../utils';\r\nimport { getStore } from '../../@data/store/store';\r\nimport messages from './FAQSection.messages';\r\nimport { getClassNames } from './FAQSection.styles';\r\nimport FAQCard, { IFAQProps } from './components/FAQCard';\r\n\r\nconst FAQSection = injectIntlAndObserver<InjectedIntlProps>(({ intl: { formatMessage, formatHTMLMessage } }) => {\r\n  const { container, headerSection } = getClassNames();\r\n  // TODO - get isSetupDone from the store to control display of section\r\n  const { isSetupDone } = getStore();\r\n  const [isOpen, setIsOpen] = useState(-1);\r\n  const resources: IFAQProps[] = [\r\n    {\r\n      title: formatMessage(messages.firstQuestion, { appName: APP_NAME_NEW }),\r\n      description: formatMessage(messages.firstAnswer),\r\n    },\r\n    {\r\n      title: formatMessage(messages.secondQuestion),\r\n      description: (\r\n        <>\r\n          {formatMessage(messages.secondAnswer)}\r\n          <a href=\"https://about.ads.microsoft.com/en-us/h/a/publishers\">{formatMessage(messages.redirectUser)}</a>\r\n        </>\r\n      ),\r\n    },\r\n    {\r\n      title: formatMessage(messages.thirdQuestion),\r\n      description: formatMessage(messages.thirdAnswer),\r\n    },\r\n    {\r\n      title: formatMessage(messages.fourthQuestion),\r\n      description: formatMessage(messages.fourthAnswer),\r\n    },\r\n    {\r\n      title: formatMessage(messages.fifthQuestion),\r\n      description: (\r\n        <>\r\n          {formatMessage(messages.fifthAnswer)}\r\n          <a href={isTythonSelfServeUser() ? `${SupportPageRoute}` : `mailto:${SUPPORT_EMAIL}`}>{formatMessage(messages.contactSupport)}</a>\r\n        </>\r\n      ),\r\n    },\r\n  ];\r\n\r\n  return (\r\n    <>\r\n      {!isSetupDone ? (\r\n        <div>\r\n          <h2 className={headerSection}>{formatMessage(messages.faqTitle)}</h2>\r\n          <div className={container}>\r\n            {resources.map((resource, index) => (\r\n              <FAQCard key={index} {...resource} isOpen={isOpen === index} order={index} setIsOpen={setIsOpen} />\r\n            ))}\r\n          </div>\r\n        </div>\r\n      ) : null}\r\n    </>\r\n  );\r\n});\r\n\r\nexport default FAQSection;\r\n","import { defineMessages } from 'react-intl';\r\n\r\nexport default defineMessages({\r\n  title1: {\r\n    id: 'home.fre.cards.title1',\r\n    defaultMessage: 'Welcome to the new Monetize Now',\r\n  },\r\n  title2: {\r\n    id: 'home.fre.cards.title2',\r\n    defaultMessage: `Bookmark our new site`,\r\n  },\r\n  title3: {\r\n    id: 'home.fre.cards.title3',\r\n    defaultMessage: 'Start earning with beautiful ads',\r\n  },\r\n  description1: {\r\n    id: 'home.fre.cards.description1',\r\n    defaultMessage: `You're seeing our updated look! All the functions you know and love are still here. Enjoy the enhanced experience as you navigate through the familiar features in our new Monetize Now!`,\r\n  },\r\n  description2: {\r\n    id: 'home.fre.cards.description2',\r\n    defaultMessage: `Don't forget to update your bookmarks! Our website has a new URL. Save it now to keep your access quick and easy: {newDomain}.`,\r\n  },\r\n  description3: {\r\n    id: 'home.fre.cards.description3',\r\n    defaultMessage: `Unlock the potential to earn more with Monetize Now. Serve ads that not only drive higher engagement but also blend seamlessly with your site. Get started now and watch your earnings grow!`,\r\n  },\r\n  notNowButton: {\r\n    id: 'home.fre.cards.button',\r\n    defaultMessage: 'Not now',\r\n  },\r\n  dialogAriaLabel: {\r\n    id: 'home.fre.cards.dialogAriaLabel',\r\n    defaultMessage: 'First Run Experience Dialog for users redirected from Pubcenter domain',\r\n  },\r\n});\r\n","import {\r\n  FontWeights,\r\n  IDialogContentStyleProps,\r\n  IDialogContentStyles,\r\n  IDialogStyleProps,\r\n  IDialogStyles,\r\n  IStyleFunctionOrObject,\r\n  getTheme,\r\n  mergeStyleSets,\r\n} from '@fluentui/react';\r\nimport { IPubCenterFonts, IPubcenterSpacing } from '../../../../../../theme';\r\n\r\nexport interface IFRECardStyles {\r\n  root: string;\r\n  dot: string;\r\n  selectedDot: string;\r\n  content: string;\r\n  title: string;\r\n  description: string;\r\n  primaryButton: string;\r\n  subComponentStyles: {\r\n    dialogContent: IStyleFunctionOrObject<IDialogContentStyleProps, IDialogContentStyles>;\r\n    dialog: IStyleFunctionOrObject<IDialogStyleProps, IDialogStyles>;\r\n  };\r\n}\r\n\r\nexport const getFRECardStyles = () => {\r\n  const theme = getTheme();\r\n  const spacing = theme.spacing as IPubcenterSpacing;\r\n  const fonts = theme.fonts as IPubCenterFonts;\r\n\r\n  return mergeStyleSets({\r\n    root: {\r\n      borderRadius: spacing.size16,\r\n      boxShadow: theme.effects.elevation16,\r\n    },\r\n    dot: {\r\n      width: spacing.size8,\r\n      height: spacing.size8,\r\n      borderRadius: '50%',\r\n      backgroundColor: '#185ABD',\r\n      opacity: 0.3,\r\n    },\r\n    selectedDot: {\r\n      width: spacing.size16,\r\n      height: spacing.size8,\r\n      borderRadius: spacing.size8,\r\n      backgroundColor: '#185ABD',\r\n    },\r\n    content: {\r\n      padding: spacing.size24,\r\n    },\r\n    title: {\r\n      ...fonts.size20,\r\n      fontWeight: FontWeights.semibold,\r\n      marginBottom: spacing.size20,\r\n    },\r\n    description: {\r\n      ...fonts.size14,\r\n      marginBottom: spacing.size36,\r\n    },\r\n    subComponentStyles: {\r\n      dialogContent: {\r\n        header: { display: 'none' },\r\n        inner: { padding: 0 },\r\n      },\r\n      dialog: {\r\n        dialogDefaultMaxWidth: spacing.size600,\r\n        main: {\r\n          borderRadius: spacing.size16,\r\n          '@media(min-width: 640px)': {\r\n            maxWidth: spacing.size600,\r\n          },\r\n        },\r\n      },\r\n    },\r\n  });\r\n};\r\n","import { DefaultButton, Image, PrimaryButton, Stack } from '@fluentui/react';\r\nimport React from 'react';\r\nimport { InjectedIntlProps, injectIntl } from 'react-intl';\r\nimport AppMessages from '../../../../../App.messages';\r\nimport messages from './messages';\r\nimport { getFRECardStyles } from './styles';\r\n\r\nexport interface ICardProps {\r\n  title: string;\r\n  description: string;\r\n  imageSrc?: string;\r\n  imageAlt?: string;\r\n}\r\n\r\nexport interface IFRECardProps extends ICardProps {\r\n  isLastCard?: boolean;\r\n  selectedCardIndex?: number;\r\n  totalCardCount: number;\r\n  dismissDialog: () => void;\r\n  nextButtonClicked: () => void;\r\n}\r\n\r\nexport const FRECard = injectIntl(\r\n  ({\r\n    title,\r\n    description,\r\n    imageAlt,\r\n    imageSrc,\r\n    isLastCard,\r\n    selectedCardIndex = 0,\r\n    totalCardCount,\r\n    dismissDialog,\r\n    nextButtonClicked,\r\n    intl,\r\n  }: IFRECardProps & InjectedIntlProps) => {\r\n    const { formatMessage } = intl;\r\n    const { dot, selectedDot, content, title: titleStyle, description: descStyle } = getFRECardStyles();\r\n\r\n    return (\r\n      <>\r\n        {imageSrc && <Image width={600} height={324} src={imageSrc} alt={imageAlt} loading=\"lazy\" />}\r\n\r\n        <div className={content}>\r\n          <div className={titleStyle} role=\"heading\" aria-level={2}>\r\n            {title}\r\n          </div>\r\n          <div className={descStyle}>{description}</div>\r\n\r\n          <Stack horizontal horizontalAlign={'space-between'}>\r\n            {!isLastCard && <DefaultButton text={formatMessage(messages.notNowButton)} onClick={dismissDialog} shape={'rounded'} />}\r\n\r\n            <Stack horizontal tokens={{ childrenGap: '7px', maxHeight: '32px' }}>\r\n              {Array.from(Array(totalCardCount).keys()).map((_, index) => (\r\n                <span key={index} className={index === selectedCardIndex ? selectedDot : dot} />\r\n              ))}\r\n            </Stack>\r\n\r\n            {!isLastCard ? (\r\n              <PrimaryButton text={formatMessage(AppMessages.next)} onClick={nextButtonClicked} shape={'rounded'} />\r\n            ) : (\r\n              <PrimaryButton text={formatMessage(AppMessages.finish)} onClick={dismissDialog} shape={'rounded'} />\r\n            )}\r\n          </Stack>\r\n        </div>\r\n      </>\r\n    );\r\n  }\r\n);\r\n","import { Dialog } from '@fluentui/react';\r\nimport React from 'react';\r\nimport { injectIntl } from 'react-intl';\r\nimport { TYTHON_NEW_PROD } from '../../../../../constants';\r\nimport { usePreloadSVGImages } from '../../../../../hooks';\r\nimport { getScreenReaderTextStyles } from '../../../../../utils/GlobalStyleUtils';\r\nimport { setIsFRECardShown } from '../../@data/mutatorActions';\r\nimport '../../@data/orchestrators';\r\nimport { FRECard, ICardProps } from './FRECard';\r\nimport messages from './messages';\r\nimport fre1 from './resources/fre-1.jpg';\r\nimport fre2 from './resources/fre-2.jpg';\r\nimport fre3 from './resources/fre-3.jpg';\r\nimport { getFRECardStyles } from './styles';\r\n\r\nexport const FREContainer = injectIntl(({ intl }) => {\r\n  const { formatMessage } = intl;\r\n  const { subComponentStyles } = getFRECardStyles();\r\n\r\n  const [currentStep, updateCurrentStep] = React.useState(0);\r\n  usePreloadSVGImages([fre1, fre2, fre3]);\r\n\r\n  const cards: ICardProps[] = [\r\n    {\r\n      title: formatMessage(messages.title1),\r\n      description: formatMessage(messages.description1),\r\n      imageSrc: fre1,\r\n      imageAlt: formatMessage(messages.title1),\r\n    },\r\n    {\r\n      title: formatMessage(messages.title2),\r\n      description: formatMessage(messages.description2, { newDomain: TYTHON_NEW_PROD }),\r\n      imageSrc: fre2,\r\n      imageAlt: formatMessage(messages.title2),\r\n    },\r\n    {\r\n      title: formatMessage(messages.title3),\r\n      description: formatMessage(messages.description3),\r\n      imageSrc: fre3,\r\n      imageAlt: formatMessage(messages.title3),\r\n    },\r\n  ];\r\n\r\n  return (\r\n    <Dialog\r\n      hidden={false}\r\n      styles={subComponentStyles.dialog}\r\n      modalProps={{ titleAriaId: 'freDialogAria' }}\r\n      dialogContentProps={{ styles: subComponentStyles.dialogContent }}\r\n    >\r\n      <FRECard\r\n        {...cards[currentStep]}\r\n        dismissDialog={() => setIsFRECardShown(false)}\r\n        nextButtonClicked={() => updateCurrentStep(currentStep + 1)}\r\n        totalCardCount={cards.length}\r\n        isLastCard={currentStep === cards.length - 1}\r\n        selectedCardIndex={currentStep}\r\n      />\r\n      <span id=\"freDialogAria\" style={getScreenReaderTextStyles()}>\r\n        {formatMessage(messages.dialogAriaLabel)}\r\n      </span>\r\n    </Dialog>\r\n  );\r\n});\r\n","import { defineMessages } from 'react-intl';\r\n\r\nexport default defineMessages({\r\n  profileCardTitleNotStarted: {\r\n    id: 'profileCardNotStarted.title',\r\n    defaultMessage: 'Create your profile',\r\n  },\r\n  profileCardDescriptionNotStarted: {\r\n    id: 'profileCardNotStarted.description',\r\n    defaultMessage: 'We’ll need to verify your identity as an individual or business before displaying ads on your site.',\r\n  },\r\n  profileCardButtonNotStarted: {\r\n    id: 'profileCardNotStarted.button',\r\n    defaultMessage: 'Create your profile',\r\n  },\r\n  siteCardTitleNotStarted: {\r\n    id: 'siteCardNotStarted.title',\r\n    defaultMessage: 'Connect your site',\r\n  },\r\n  siteCardDescriptionNotStarted: {\r\n    id: 'siteCardNotStarted.description',\r\n    defaultMessage: 'Connect your site by adding its top level domain.',\r\n  },\r\n  siteCardButtonNotStarted: {\r\n    id: 'siteCardNotStarted.button',\r\n    defaultMessage: 'Connect your site',\r\n  },\r\n  adUnitCardTitleNotStarted: {\r\n    id: 'adUnitCardNotStarted.title',\r\n    defaultMessage: 'Create an ad unit',\r\n  },\r\n  adUnitCardDescriptionNotStarted: {\r\n    id: 'adUnitCardNotStarted.description',\r\n    defaultMessage: 'Customize the way ads will display on your website.',\r\n  },\r\n  adUnitCardButtonNotStarted: {\r\n    id: 'adUnitCardNotStarted.button',\r\n    defaultMessage: 'Create Ad Unit',\r\n  },\r\n  profileCardTitleAwaitingForVerification: {\r\n    id: 'profileCard.title',\r\n    defaultMessage: 'Your profile is awaiting verification',\r\n  },\r\n  profileCardDescriptionAwaitingForVerification: {\r\n    id: 'profileCard.description',\r\n    defaultMessage:\r\n      \"Thank you for submitting your profile for review. We'll complete the review within seven business days, and once the review is complete, we'll notify you by email.\",\r\n  },\r\n  profileCardButtonAwaitingForVerification: {\r\n    id: 'profileCardAwaitingForVerification.button',\r\n    defaultMessage: 'View your profile',\r\n  },\r\n  siteCardTitleAwaitingForVerification: {\r\n    id: 'siteCard.title',\r\n    defaultMessage: 'Site in review',\r\n  },\r\n  siteCardDescriptionAwaitingForVerification: {\r\n    id: 'siteCard.description',\r\n    defaultMessage:\r\n      \"Thank you for submitting your site for review. We'll notify you by email when the review is complete. Please note that it usually takes 7 days for a site to be reviewed. In the meantime, you can continue to submit more sites to increase your earnings.\",\r\n  },\r\n  siteCardButtonAwaitingForVerification: {\r\n    id: 'siteCardAwaitingForVerification.button',\r\n    defaultMessage: 'Add more sites',\r\n  },\r\n  profileCardTitleCompleted: {\r\n    id: 'profileCard.title',\r\n    defaultMessage: 'Profile setup complete',\r\n  },\r\n  profileCardDescriptionCompleted: {\r\n    id: 'profileCard.description',\r\n    defaultMessage: 'We verified your data and approved you as a publisher.',\r\n  },\r\n  profileCardButtonCompleted: {\r\n    id: 'profileCardCompleted.button',\r\n    defaultMessage: 'View your profile',\r\n  },\r\n  siteCardTitleCompleted: {\r\n    id: 'siteCard.title',\r\n    defaultMessage: 'Site setup complete',\r\n  },\r\n  siteCardDescriptionCompleted: {\r\n    id: 'siteCard.description.cardCompleted',\r\n    defaultMessage:\r\n      'We’ve verified and approved your site. In the meantime, you can continue to submit more sites to increase your earnings. ',\r\n  },\r\n  siteCardButtonCompleted: {\r\n    id: 'siteCardCompleted.button',\r\n    defaultMessage: 'Add more sites',\r\n  },\r\n  adUnitCardTitleCompleted: {\r\n    id: 'adUnitCard.title',\r\n    defaultMessage: 'Ad unit setup complete',\r\n  },\r\n  adUnitCardDescriptionCompleted: {\r\n    id: 'adUnitCard.description',\r\n    defaultMessage: 'You’ve set up your ad unit. Adding more ad units may help you earn more with your site.',\r\n  },\r\n  adUnitCardButtonCompleted: {\r\n    id: 'adUnitsCardCompleted.button',\r\n    defaultMessage: 'Add more ad units',\r\n  },\r\n  setupProfile: {\r\n    id: 'setup.profile',\r\n    defaultMessage: 'Profile Setup',\r\n  },\r\n  setupSite: {\r\n    id: 'setup.site',\r\n    defaultMessage: 'Site Setup',\r\n  },\r\n  setupAdunit: {\r\n    id: 'setup.adunit',\r\n    defaultMessage: 'Ad unit Setup',\r\n  },\r\n  NotStarted: {\r\n    id: 'homepageStatus.notStarted',\r\n    defaultMessage: 'Not started',\r\n  },\r\n  AwaitingVerification: {\r\n    id: 'homepageStatus.awaitingVerification',\r\n    defaultMessage: 'Awaiting verification',\r\n  },\r\n  Completed: {\r\n    id: 'homepageStatus.completed',\r\n    defaultMessage: 'Completed',\r\n  },\r\n  Rejected: {\r\n    id: 'homepageStatus.rejected',\r\n    defaultMessage: 'Needs attention',\r\n  },\r\n  profileCardTitleNeedsAttention: {\r\n    id: 'profileCardNeedsAttention.title',\r\n    defaultMessage: 'Your profile needs attention',\r\n  },\r\n  profileCardDescriptionNeedsAttention: {\r\n    id: 'profileCardNeedsAttention.description',\r\n    defaultMessage: 'There was a problem with your profile. Please follow the instructions to resolve the issue.',\r\n  },\r\n  profileCardButtonNeedsAttention: {\r\n    id: 'profileCardNeedsAttention.button',\r\n    defaultMessage: 'View profile',\r\n  },\r\n});\r\n","import { ReactElement } from 'react';\r\nimport { HomePageStatus } from '../../@data/store/schema/IHomeViewState';\r\n\r\nexport interface ISetupCard {\r\n  title: string;\r\n  description: string;\r\n  image?: string;\r\n  imageAlt?: string;\r\n  status?: HomePageStatus;\r\n  button?: ReactElement;\r\n  steps?: number;\r\n  hidden?: boolean;\r\n  onLoad?: () => void;\r\n  cardType?: SetupCardType;\r\n}\r\n\r\nexport enum SetupCardType {\r\n  GetStarted = 'GetStarted',\r\n  Recommendations = 'Recommendations',\r\n}\r\n","import { getTheme, mergeStyleSets } from '@fluentui/react';\r\nimport { AccessibilityContrast, IPubcenterPalette, IPubcenterSpacing } from '../../../../../../theme';\r\nimport { ICommonStyleProps } from '../../../../../types';\r\nimport { SetupCardType } from './SetupCardUtils';\r\n\r\ntype StyleProperties =\r\n  | 'titleStyle'\r\n  | 'statusStyle'\r\n  | 'progressStepsContainerStyle'\r\n  | 'progressStepStyle'\r\n  | 'setupCardContainerStyle'\r\n  | 'imageContainerStyle'\r\n  | 'imageStyle'\r\n  | 'setupContentStyle'\r\n  | 'descriptionStyle'\r\n  | 'setupCardButtonStyle';\r\ntype SetupCardStyles = Record<StyleProperties, string>;\r\n\r\nexport const getStyles = (props: ICommonStyleProps & { cardType?: SetupCardType }): SetupCardStyles => {\r\n  const { theme, cardType } = props;\r\n  const spacing = theme.spacing as IPubcenterSpacing;\r\n  const palette = theme.palette as IPubcenterPalette;\r\n  const { Activated } = AccessibilityContrast;\r\n\r\n  return mergeStyleSets({\r\n    titleStyle: {\r\n      margin: `${spacing.size10} 0px`,\r\n      fontSize: spacing.size18,\r\n      fontWeight: '600',\r\n    },\r\n    statusStyle: {\r\n      margin: `${spacing.size10} 0px`,\r\n      fontSize: spacing.size14,\r\n      fontWeight: '600',\r\n    },\r\n    progressStepsContainerStyle: {\r\n      height: spacing.size12,\r\n      background: palette.neutralQuaternary,\r\n      boxShadow: `${spacing.size2} ${spacing.size14} ${spacing.size15} -7px rgba(30, 166, 250, 0.36)`,\r\n      borderRadius: spacing.size2,\r\n      transition: 'all 0.5s',\r\n      flex: 1,\r\n      [Activated]: {\r\n        color: 'window',\r\n        backgroundColor: 'windowtext',\r\n        borderColor: 'windowtext',\r\n        forcedColorAdjust: 'none',\r\n      },\r\n    },\r\n    progressStepStyle: {\r\n      display: 'flex',\r\n      flexDirection: 'row',\r\n      width: 'calc(100% - 5%)',\r\n      gap: '5px',\r\n      '& :nth-child(1)': {\r\n        borderTopLeftRadius: spacing.size4,\r\n        borderBottomLeftRadius: spacing.size4,\r\n      },\r\n      '& :nth-child(last)': {\r\n        borderTopRightRadius: spacing.size4,\r\n        borderBottomRightRadius: spacing.size4,\r\n      },\r\n    },\r\n    setupCardContainerStyle: {\r\n      display: 'flex',\r\n      flexDirection: 'column',\r\n      width: 'auto',\r\n      boxShadow: `0px 0px ${spacing.size7} 0px rgba(0,0,0,0.2)`,\r\n      transition: '0.3s',\r\n      borderRadius: spacing.size4,\r\n      flex: 1,\r\n      [Activated]: {\r\n        color: 'windowtext',\r\n        borderColor: 'window',\r\n        forcedColorAdjust: 'none',\r\n      },\r\n    },\r\n    imageContainerStyle: {\r\n      justifyContent: 'center',\r\n      display: 'flex',\r\n      borderRadius: `${spacing.size4} ${spacing.size4} 0px 0px`,\r\n      marginTop: spacing.size6,\r\n    },\r\n    imageStyle: {\r\n      minHeight: spacing.size120,\r\n      borderRadius: `${spacing.size4} ${spacing.size4} 0px 0px`,\r\n    },\r\n    setupContentStyle: {\r\n      justifyContent: 'center',\r\n      display: 'flex',\r\n      flexDirection: 'column',\r\n      paddingLeft: spacing.size16,\r\n      paddingRight: spacing.size10,\r\n    },\r\n    descriptionStyle: {\r\n      marginTop: '0px',\r\n    },\r\n    setupCardButtonStyle: {\r\n      display: 'flex',\r\n      alignItems: 'flex-end',\r\n      paddingLeft: spacing.size16,\r\n      paddingBottom: spacing.size16,\r\n      marginTop: 'auto',\r\n      '> button': {\r\n        borderRadius: spacing.size4,\r\n        ...(cardType === SetupCardType.GetStarted ? { backgroundColor: palette['BrandBackground.Rest'] } : {}),\r\n      },\r\n    },\r\n  });\r\n};\r\n\r\nexport function getClassNames<PropType>(props?: PropType) {\r\n  return getStyles({ theme: getTheme(), ...props });\r\n}\r\n","import { ShimmerElementType, ShimmerElementsGroup } from '@fluentui/react';\r\nimport React from 'react';\r\n\r\nexport const getShimmerSetupCard = (): JSX.Element => {\r\n  const styles = {\r\n    root: {\r\n      // Set the background color to white\r\n      background: 'linear-gradient(to right, #E6E6E6,60%, white)',\r\n    },\r\n  };\r\n\r\n  const stylesButton = {\r\n    root: {\r\n      // Set the background color to white\r\n      background: 'linear-gradient(to right, #E6E6E6,30%, white)',\r\n    },\r\n  };\r\n  return (\r\n    <div>\r\n      <ShimmerElementsGroup flexWrap width=\"100%\" shimmerElements={[{ type: ShimmerElementType.line, width: '100%', height: 90 }]} />\r\n      <ShimmerElementsGroup flexWrap width=\"100%\" shimmerElements={[{ type: ShimmerElementType.gap, width: '100%', height: 15 }]} />\r\n      <ShimmerElementsGroup\r\n        styles={styles}\r\n        flexWrap\r\n        width=\"100%\"\r\n        shimmerElements={[\r\n          { type: ShimmerElementType.gap, width: '10%', height: 50 },\r\n          { type: ShimmerElementType.line, width: '80%', height: 50, verticalAlign: 'bottom' },\r\n          { type: ShimmerElementType.gap, width: '10%', height: 50 },\r\n        ]}\r\n      />\r\n\r\n      <ShimmerElementsGroup flexWrap width=\"100%\" shimmerElements={[{ type: ShimmerElementType.gap, width: '100%', height: 5 }]} />\r\n\r\n      <ShimmerElementsGroup\r\n        styles={styles}\r\n        flexWrap\r\n        width=\"100%\"\r\n        shimmerElements={[\r\n          { type: ShimmerElementType.gap, width: '10%', height: 20 },\r\n          { type: ShimmerElementType.line, width: '80%', height: 20, verticalAlign: 'bottom' },\r\n          { type: ShimmerElementType.gap, width: '10%', height: 20 },\r\n        ]}\r\n      />\r\n      <ShimmerElementsGroup flexWrap width=\"100%\" shimmerElements={[{ type: ShimmerElementType.gap, width: '100%', height: 5 }]} />\r\n\r\n      <ShimmerElementsGroup\r\n        styles={styles}\r\n        flexWrap\r\n        width=\"100%\"\r\n        shimmerElements={[\r\n          { type: ShimmerElementType.gap, width: '10%', height: 20 },\r\n          { type: ShimmerElementType.line, width: '80%', height: 20, verticalAlign: 'bottom' },\r\n          { type: ShimmerElementType.gap, width: '10%', height: 20 },\r\n        ]}\r\n      />\r\n      <ShimmerElementsGroup flexWrap width=\"100%\" shimmerElements={[{ type: ShimmerElementType.gap, width: '100%', height: 55 }]} />\r\n\r\n      <ShimmerElementsGroup\r\n        styles={stylesButton}\r\n        flexWrap\r\n        width=\"100%\"\r\n        shimmerElements={[\r\n          { type: ShimmerElementType.gap, width: '10%', height: 20 },\r\n          { type: ShimmerElementType.line, width: '50%', height: 30, verticalAlign: 'bottom' },\r\n          { type: ShimmerElementType.gap, width: '40%', height: 20 },\r\n        ]}\r\n      />\r\n    </div>\r\n  );\r\n};\r\n","import React from 'react';\r\nimport { HomePageStatus } from '../../../@data/store/schema/IHomeViewState';\r\nimport { getClassNames } from '../SetupCard.styles';\r\n\r\nexport const getProgressBar = (steps?: number, status?: HomePageStatus): JSX.Element => {\r\n  const { progressStepsContainerStyle, progressStepStyle } = getClassNames();\r\n\r\n  // colors: notStarted:#D2D0CE awaitingForVerification:#0078D4 completed:#107C10 needsAttention(Rejected):#F7630C\r\n  const getProgressBarColor = () => {\r\n    if (status && HomePageStatus[status] === HomePageStatus.AwaitingVerification) {\r\n      return '#0078D4';\r\n    }\r\n    if (status && HomePageStatus[status] === HomePageStatus.Rejected) {\r\n      return '#F7630C';\r\n    }\r\n    return '#107C10';\r\n  };\r\n\r\n  if (!steps) {\r\n    return <></>;\r\n  }\r\n\r\n  const bars = [...Array(steps)].map((step, i) => {\r\n    return (\r\n      <div\r\n        className={progressStepsContainerStyle}\r\n        key={i}\r\n        style={{\r\n          background:\r\n            (status &&\r\n              (HomePageStatus[status] === HomePageStatus.AwaitingVerification || HomePageStatus[status] === HomePageStatus.Rejected) &&\r\n              i <= steps - 2) ||\r\n            (status && HomePageStatus[status] === HomePageStatus.Completed && i <= steps - 1)\r\n              ? getProgressBarColor()\r\n              : undefined,\r\n        }}\r\n      />\r\n    );\r\n  });\r\n\r\n  return <div className={progressStepStyle}>{bars}</div>;\r\n};\r\n","import { Image, Shimmer } from '@fluentui/react';\r\nimport React from 'react';\r\nimport { InjectedIntlProps } from 'react-intl';\r\nimport { injectIntlAndObserver } from '../../../../../utils';\r\nimport { getGoogleAdSenseStore } from '../../../Account/Settings/components/GoogleConnector/@data';\r\nimport { getStore } from '../../@data/store/store';\r\nimport messages from './SetupCard.messages';\r\nimport { getClassNames } from './SetupCard.styles';\r\nimport { ISetupCard } from './SetupCardUtils';\r\nimport { getShimmerSetupCard } from './utils/getShimmerSetupCard';\r\nimport { getProgressBar } from './utils/renderProgressBar';\r\n\r\nexport interface ISetupCardProps extends InjectedIntlProps {\r\n  card: ISetupCard;\r\n}\r\n\r\nexport const SetupCard = injectIntlAndObserver(function SetupCardComponent({ intl: { formatMessage }, card }: ISetupCardProps) {\r\n  // need to be loaded from store, either the value itself or status of other entities are retrieved\r\n  const { adUnitStatus, siteStatus, profileStatus, isSetupDone } = getStore();\r\n  const { active } = getGoogleAdSenseStore();\r\n  const {\r\n    titleStyle,\r\n    statusStyle,\r\n    setupCardContainerStyle,\r\n    imageContainerStyle,\r\n    imageStyle,\r\n    setupContentStyle,\r\n    descriptionStyle,\r\n    setupCardButtonStyle,\r\n  } = getClassNames({ cardType: card.cardType });\r\n\r\n  const isStatusFieldsHaveValue = (statusAdUnit, statusSite, statusProfile) => {\r\n    return statusAdUnit !== undefined && statusSite !== undefined && statusProfile !== undefined;\r\n  };\r\n  const showContent = isSetupDone\r\n    ? active.connectionStatus !== undefined\r\n      ? true\r\n      : false\r\n    : isStatusFieldsHaveValue(adUnitStatus, siteStatus, profileStatus);\r\n\r\n  return (\r\n    <div className={setupCardContainerStyle}>\r\n      {showContent ? (\r\n        <>\r\n          <div className={imageContainerStyle}>{card.image && <Image src={card.image} className={imageStyle} alt={card.imageAlt} />}</div>\r\n          <div className={setupContentStyle}>\r\n            <span className={titleStyle}>{card.title}</span>\r\n            {getProgressBar(card.steps, card.status)}\r\n            {card.status && <span className={statusStyle}>{formatMessage(messages[card.status])}</span>}\r\n            <p className={descriptionStyle}>{card.description}</p>\r\n          </div>\r\n          <div className={setupCardButtonStyle}>{card.button}</div>\r\n        </>\r\n      ) : (\r\n        <Shimmer customElementsGroup={getShimmerSetupCard()} style={{ minHeight: '320px' }} />\r\n      )}\r\n    </div>\r\n  );\r\n});\r\n","import { defineMessages } from 'react-intl';\r\n\r\nexport default defineMessages({\r\n  gettingStartedTitle: {\r\n    id: 'gettingStarted.title',\r\n    defaultMessage: 'Get started',\r\n  },\r\n});\r\n","import { getTheme, mergeStyleSets } from '@fluentui/react';\r\nimport { IPubcenterSpacing } from '../../../../../../theme';\r\nimport { ICommonStyleProps } from '../../../../../types';\r\n\r\ntype StyleProperties = 'cardsContainer' | 'headerSection';\r\ntype GettingStartedStyles = Record<StyleProperties, string>;\r\n\r\nexport const getStyles = (props: ICommonStyleProps): GettingStartedStyles => {\r\n  const { theme } = props;\r\n  const spacing = theme.spacing as IPubcenterSpacing;\r\n  return mergeStyleSets({\r\n    cardsContainer: {\r\n      display: 'grid',\r\n      gridTemplateColumns: `repeat(auto-fit, minmax(${spacing.size260}, 1fr))`,\r\n      justifyContent: 'space-between',\r\n      gap: spacing.size15,\r\n    },\r\n    headerSection: {\r\n      margin: `${spacing.size15} 0px`,\r\n      fontSize: spacing.size20,\r\n      fontWeight: '600',\r\n    },\r\n  });\r\n};\r\n\r\nexport function getClassNames<PropType>(props?: PropType) {\r\n  return getStyles({ theme: getTheme(), ...props });\r\n}\r\n","import { PrimaryButton } from '@fluentui/react';\r\nimport React from 'react';\r\nimport { HomePageStatus } from '../../../@data/store/schema/IHomeViewState';\r\nimport messages from '../../SetupCard/SetupCard.messages';\r\nimport { ISetupCard, SetupCardType } from '../../SetupCard/SetupCardUtils';\r\n\r\nexport const getSetupCards = (\r\n  handleProfileCardButtonClick,\r\n  handleCompleteProfileCardButtonClick,\r\n  handleSiteCardButtonClick,\r\n  handleAdUnitCardButtonClick,\r\n  profileCardInfo,\r\n  siteCardInfo,\r\n  adunitCardInfo,\r\n  adUnitStatus: HomePageStatus,\r\n  siteStatus: HomePageStatus,\r\n  profileStatus: HomePageStatus,\r\n  formatMessage\r\n): ISetupCard[] => {\r\n  const gettingStartedCards: ISetupCard[] = [\r\n    {\r\n      title: profileCardInfo[HomePageStatus[profileStatus]][0],\r\n      description: profileCardInfo[HomePageStatus[profileStatus]][1],\r\n      button: (\r\n        <PrimaryButton\r\n          text={profileCardInfo[HomePageStatus[profileStatus]][2]}\r\n          style={{\r\n            justifyContent: 'center',\r\n            display: 'flex',\r\n          }}\r\n          onClick={() => (isProfileNotStarted(profileStatus) ? handleCompleteProfileCardButtonClick() : handleProfileCardButtonClick())}\r\n        />\r\n      ),\r\n      image: profileCardInfo[HomePageStatus[profileStatus]][3],\r\n      imageAlt: formatMessage(messages.setupProfile),\r\n      status: profileStatus, // formatMessage(messages[profileStatus])\r\n      steps: 2,\r\n      cardType: SetupCardType.GetStarted,\r\n    },\r\n    {\r\n      title: siteCardInfo[HomePageStatus[siteStatus]][0],\r\n      description: siteCardInfo[HomePageStatus[siteStatus]][1],\r\n      button: (\r\n        <PrimaryButton\r\n          text={siteCardInfo[HomePageStatus[siteStatus]][2]}\r\n          style={{\r\n            justifyContent: 'center',\r\n            display: 'flex',\r\n          }}\r\n          onClick={() => handleSiteCardButtonClick()}\r\n        />\r\n      ),\r\n      image: siteCardInfo[HomePageStatus[siteStatus]][3],\r\n      imageAlt: formatMessage(messages.setupSite),\r\n      status: siteStatus, // formatMessage(messages[siteStatus]),\r\n      steps: 2,\r\n      cardType: SetupCardType.GetStarted,\r\n    },\r\n    {\r\n      title: adunitCardInfo[HomePageStatus[adUnitStatus]][0],\r\n      description: adunitCardInfo[HomePageStatus[adUnitStatus]][1],\r\n      button: (\r\n        <PrimaryButton\r\n          text={adunitCardInfo[HomePageStatus[adUnitStatus]][2]}\r\n          style={{\r\n            justifyContent: 'center',\r\n            display: 'flex',\r\n          }}\r\n          onClick={() => handleAdUnitCardButtonClick()}\r\n        />\r\n      ),\r\n      image: adunitCardInfo[HomePageStatus[adUnitStatus]][3],\r\n      imageAlt: formatMessage(messages.setupAdunit),\r\n      status: adUnitStatus, // formatMessage(messages[adUnitStatus]),\r\n      steps: 1,\r\n      cardType: SetupCardType.GetStarted,\r\n    },\r\n  ];\r\n\r\n  return gettingStartedCards;\r\n};\r\n\r\nexport const getSetupCardsPlaceholder = (): ISetupCard[] => {\r\n  return [\r\n    {\r\n      title: '',\r\n      description: '',\r\n    },\r\n    {\r\n      title: '',\r\n      description: '',\r\n    },\r\n    {\r\n      title: '',\r\n      description: '',\r\n    },\r\n  ];\r\n};\r\n\r\nconst isProfileNotStarted = (profileStatus: HomePageStatus): boolean => {\r\n  return HomePageStatus[profileStatus] === HomePageStatus.NotStarted;\r\n};\r\n","import messages from '../../SetupCard/SetupCard.messages';\r\n// Since each state in Getting started card has a different title and description, so we will create a dictionary where the key\r\n// is status and value is ['title', 'description', 'button text']\r\nimport AdUnitStep1 from '../../SetupCard/resources/AdUnitStep1.svg';\r\nimport AdUnitStep2 from '../../SetupCard/resources/AdUnitStep2.svg';\r\nimport ProfileStep1 from '../../SetupCard/resources/ProfileStep1.svg';\r\nimport ProfileStep2 from '../../SetupCard/resources/ProfileStep2.svg';\r\nimport ProfileStep3 from '../../SetupCard/resources/ProfileStep3.svg';\r\nimport ProfileStep4 from '../../SetupCard/resources/ProfileStep4.svg';\r\nimport SiteStep1 from '../../SetupCard/resources/SiteStep1.svg';\r\nimport SiteStep2 from '../../SetupCard/resources/SiteStep2.svg';\r\nimport SiteStep3 from '../../SetupCard/resources/SiteStep3.svg';\r\n\r\nexport const getProfileCardInfo = (formatMessage) => {\r\n  return {\r\n    NotStarted: [\r\n      formatMessage(messages.profileCardTitleNotStarted),\r\n      formatMessage(messages.profileCardDescriptionNotStarted),\r\n      formatMessage(messages.profileCardButtonNotStarted),\r\n      ProfileStep1,\r\n    ],\r\n    AwaitingVerification: [\r\n      formatMessage(messages.profileCardTitleAwaitingForVerification),\r\n      formatMessage(messages.profileCardDescriptionAwaitingForVerification),\r\n      formatMessage(messages.profileCardButtonAwaitingForVerification),\r\n      ProfileStep2,\r\n    ],\r\n    Completed: [\r\n      formatMessage(messages.profileCardTitleCompleted),\r\n      formatMessage(messages.profileCardDescriptionCompleted),\r\n      formatMessage(messages.profileCardButtonCompleted),\r\n      ProfileStep3,\r\n    ],\r\n    Rejected: [\r\n      formatMessage(messages.profileCardTitleNeedsAttention),\r\n      formatMessage(messages.profileCardDescriptionNeedsAttention),\r\n      formatMessage(messages.profileCardButtonNeedsAttention),\r\n      ProfileStep4,\r\n    ],\r\n  };\r\n};\r\n\r\nexport const getSiteCardInfo = (formatMessage) => {\r\n  return {\r\n    NotStarted: [\r\n      formatMessage(messages.siteCardTitleNotStarted),\r\n      formatMessage(messages.siteCardDescriptionNotStarted),\r\n      formatMessage(messages.siteCardButtonNotStarted),\r\n      SiteStep1,\r\n    ],\r\n    AwaitingVerification: [\r\n      formatMessage(messages.siteCardTitleAwaitingForVerification),\r\n      formatMessage(messages.siteCardDescriptionAwaitingForVerification),\r\n      formatMessage(messages.siteCardButtonAwaitingForVerification),\r\n      SiteStep2,\r\n    ],\r\n    Completed: [\r\n      formatMessage(messages.siteCardTitleCompleted),\r\n      formatMessage(messages.siteCardDescriptionCompleted),\r\n      formatMessage(messages.siteCardButtonCompleted),\r\n      SiteStep3,\r\n    ],\r\n  };\r\n};\r\n\r\nexport const getAdunitCardInfo = (formatMessage) => {\r\n  return {\r\n    NotStarted: [\r\n      formatMessage(messages.adUnitCardTitleNotStarted),\r\n      formatMessage(messages.adUnitCardDescriptionNotStarted),\r\n      formatMessage(messages.adUnitCardButtonNotStarted),\r\n      AdUnitStep1,\r\n    ],\r\n    Completed: [\r\n      formatMessage(messages.adUnitCardTitleCompleted),\r\n      formatMessage(messages.adUnitCardDescriptionCompleted),\r\n      formatMessage(messages.adUnitCardButtonCompleted),\r\n      AdUnitStep2,\r\n    ],\r\n  };\r\n};\r\n\r\nexport const getStatusCardsInfo = (formatMessage) => {\r\n  return {\r\n    profileCardInfo: getProfileCardInfo(formatMessage),\r\n    siteCardInfo: getSiteCardInfo(formatMessage),\r\n    adunitCardInfo: getAdunitCardInfo(formatMessage),\r\n  };\r\n};\r\n","import React, { useEffect } from 'react';\r\nimport { injectRouterAndIntlWithObserver } from '../../../../../utils';\r\nimport {\r\n  getTythonAdUnitCreatePageRoute,\r\n  getTythonAdsCreationPageRoute,\r\n  getTythonInventoryCreationPageRoute,\r\n  getTythonProfilePageRoute,\r\n  getTythonSiteCreatePageRoute,\r\n} from '../../../../../utils/routeUtils';\r\n\r\nimport { usePreloadSVGImages } from '../../../../../hooks';\r\nimport { getStore as getWindowsAppFeatureFlagStore } from '../../../../../hooks/useWindowsAppFeatureFlag/store/store';\r\nimport ConnectAppImg from '../../../../../layout/EntityCreationLayout/connectApp.svg';\r\nimport ConnectSiteImg from '../../../../../layout/EntityCreationLayout/connectSite.svg';\r\nimport { editProfileAction } from '../../../Profile/@data/actions';\r\nimport { fetchSetupCardsStatus } from '../../@data/actions';\r\nimport { getStore } from '../../@data/store/store';\r\nimport { SetupCard } from '../SetupCard/SetupCard';\r\nimport { ISetupCard } from '../SetupCard/SetupCardUtils';\r\nimport AdUnitStep1 from '../SetupCard/resources/AdUnitStep1.svg';\r\nimport AdUnitStep2 from '../SetupCard/resources/AdUnitStep2.svg';\r\nimport ProfileStep1 from '../SetupCard/resources/ProfileStep1.svg';\r\nimport ProfileStep2 from '../SetupCard/resources/ProfileStep2.svg';\r\nimport ProfileStep3 from '../SetupCard/resources/ProfileStep3.svg';\r\nimport SiteStep1 from '../SetupCard/resources/SiteStep1.svg';\r\nimport SiteStep2 from '../SetupCard/resources/SiteStep2.svg';\r\nimport SiteStep3 from '../SetupCard/resources/SiteStep3.svg';\r\nimport messages from './GettingStarted.messages';\r\nimport { getClassNames } from './GettingStarted.styles';\r\nimport { getSetupCards, getSetupCardsPlaceholder } from './utils/getCards';\r\nimport { getStatusCardsInfo } from './utils/getStatusMessages';\r\n\r\nexport const GettingStarted = injectRouterAndIntlWithObserver(function GettingStartedComponent({ intl: { formatMessage }, history }) {\r\n  const { cardsContainer, headerSection } = getClassNames();\r\n  const { profileCardInfo, siteCardInfo, adunitCardInfo } = getStatusCardsInfo(formatMessage);\r\n  const { isFeatureEnabled } = getWindowsAppFeatureFlagStore();\r\n  // TODO - get isSetupDone from the store to control display of section\r\n  const { adUnitStatus, siteStatus, profileStatus, isSetupDone } = getStore();\r\n  let gettingStartedCards: ISetupCard[] = getSetupCardsPlaceholder();\r\n\r\n  usePreloadSVGImages([\r\n    ConnectAppImg,\r\n    ConnectSiteImg,\r\n    AdUnitStep1,\r\n    AdUnitStep2,\r\n    ProfileStep1,\r\n    ProfileStep2,\r\n    ProfileStep3,\r\n    SiteStep1,\r\n    SiteStep2,\r\n    SiteStep3,\r\n  ]);\r\n\r\n  if (adUnitStatus && siteStatus && profileStatus) {\r\n    gettingStartedCards = getSetupCards(\r\n      handleProfileCardButtonClick,\r\n      handleCompleteProfileCardButtonClick,\r\n      handleSiteCardButtonClick,\r\n      handleAdUnitCardButtonClick,\r\n      profileCardInfo,\r\n      siteCardInfo,\r\n      adunitCardInfo,\r\n      adUnitStatus,\r\n      siteStatus,\r\n      profileStatus,\r\n      formatMessage\r\n    );\r\n  }\r\n\r\n  function handleCompleteProfileCardButtonClick() {\r\n    editProfileAction();\r\n    history.push(getTythonProfilePageRoute());\r\n  }\r\n\r\n  function handleProfileCardButtonClick() {\r\n    history.push(getTythonProfilePageRoute());\r\n  }\r\n\r\n  function handleSiteCardButtonClick() {\r\n    history.push(isFeatureEnabled ? getTythonInventoryCreationPageRoute() : getTythonSiteCreatePageRoute());\r\n  }\r\n\r\n  function handleAdUnitCardButtonClick() {\r\n    history.push(isFeatureEnabled ? getTythonAdsCreationPageRoute() : getTythonAdUnitCreatePageRoute());\r\n  }\r\n\r\n  useEffect(() => {\r\n    // Make a call to fetch status for Profile, sites and adunit\r\n    fetchSetupCardsStatus();\r\n  }, []);\r\n\r\n  const displaySetupCards = (cards: ISetupCard[]) => {\r\n    return cards.map((card, index) => <SetupCard card={card} key={index} />);\r\n  };\r\n\r\n  return (\r\n    <>\r\n      {!isSetupDone ? (\r\n        <div>\r\n          <h2 className={headerSection}>{formatMessage(messages.gettingStartedTitle)}</h2>\r\n          <div className={cardsContainer}>{displaySetupCards(gettingStartedCards)}</div>\r\n        </div>\r\n      ) : null}\r\n    </>\r\n  );\r\n});\r\n","import { mergeStyleSets } from '@fluentui/merge-styles';\r\nimport { getTheme } from '@fluentui/style-utilities';\r\nimport { IPubcenterSpacing } from '../../../../../../theme';\r\nimport { ICommonStyleProps } from '../../../../../types';\r\n\r\ntype StyleProperties = 'titleStyle' | 'sectionContainerStyle';\r\ntype PerformanceSectionStyles = Record<StyleProperties, string>;\r\n\r\nexport const getStyles = (props: ICommonStyleProps): PerformanceSectionStyles => {\r\n  const { theme } = props;\r\n  const spacing = theme.spacing as IPubcenterSpacing;\r\n\r\n  return mergeStyleSets({\r\n    titleStyle: {\r\n      margin: `${spacing.size15} 0px`,\r\n      fontSize: spacing.size20,\r\n      fontWeight: 600,\r\n    },\r\n    sectionContainerStyle: {\r\n      display: 'grid',\r\n      gridTemplateColumns: `repeat(auto-fit, minmax(${spacing.size260}, 1fr))`,\r\n      justifyContent: 'space-between',\r\n      gap: spacing.size15,\r\n    },\r\n  });\r\n};\r\n\r\nexport function getClassNames<PropType>(props?: PropType) {\r\n  return getStyles({ theme: getTheme(), ...props });\r\n}\r\n","import { getTheme } from '@fluentui/react';\r\nimport { IChartProps } from '@fluentui/react-charting';\r\nimport React from 'react';\r\nimport { IPubcenterPalette, IPubcenterTheme } from '../../../../../../../theme';\r\nimport { PaymentsPageBalance } from '../../../../../../@data';\r\nimport { roundNumber } from '../../../../../../utils';\r\n\r\nexport function mapToBarChartData(data?: PaymentsPageBalance): IChartProps[] {\r\n  const theme = (getTheme() as unknown) as IPubcenterTheme;\r\n  const palette = theme.palette as IPubcenterPalette;\r\n\r\n  const chartData: IChartProps[] = [\r\n    {\r\n      chartData: [\r\n        {\r\n          horizontalBarChartdata: {\r\n            x: data ? (roundNumber(data.currBalance, 2) === 0 ? 0.1 : roundNumber(data.currBalance, 2)) : 0,\r\n            y: data ? data.threshold : 0,\r\n          },\r\n          color: data && roundNumber(data.currBalance, 2) === 0 ? palette.white : palette.blue,\r\n          yAxisCalloutData: `${data ? data.currBalance : 0}$`,\r\n        },\r\n      ],\r\n    },\r\n  ];\r\n  return chartData;\r\n}\r\n\r\nexport function getBarChartCustomData(payout: string) {\r\n  const theme = (getTheme() as unknown) as IPubcenterTheme;\r\n  const palette = theme.palette as IPubcenterPalette;\r\n  return (props: IChartProps) => {\r\n    return (\r\n      <div\r\n        style={{\r\n          display: 'flex',\r\n          height: '30px',\r\n          width: '63px',\r\n          background: palette['NeutralBackground3.Rest'],\r\n          marginBottom: '5px',\r\n          justifyContent: 'center',\r\n          clipPath: 'polygon(0% 0%, 100% 0%, 100% 100%, 90% 80%, 0% 80%)',\r\n          borderRadius: '5px',\r\n        }}\r\n      >\r\n        <span style={{ fontSize: '14px', fontWeight: 400 }}>{payout}</span>\r\n      </div>\r\n    );\r\n  };\r\n}\r\n","import { IStyle, mergeStyleSets } from '@fluentui/merge-styles';\r\nimport { getTheme } from '@fluentui/style-utilities';\r\nimport { IPubcenterPalette, IPubcenterSpacing } from '../../../../../../../theme';\r\nimport { ICommonStyleProps } from '../../../../../../types';\r\n\r\nexport interface IBalanceCardStyles {\r\n  cardContainerStyle: string;\r\n  contentStyle: string;\r\n  balanceImageStyle: string;\r\n  balanceStyle: string;\r\n  balanceTextStyle: string;\r\n  currentBalanceStyle: string;\r\n  lastPaymentInfoStyle: string;\r\n  imageStyle: string;\r\n  barChartSectionStyle: string;\r\n  currentBalanceInfoStyle: string;\r\n  currentBalanceInfoTextStyle: string;\r\n  iconSectionStyle: string;\r\n  iconStyle: string;\r\n  iconContentStyle: string;\r\n  iconTextStyle: string;\r\n  subComponentStyles: {\r\n    chartTitle: IStyle;\r\n    items: IStyle;\r\n  };\r\n}\r\n\r\nexport const getStyles = (props: ICommonStyleProps): IBalanceCardStyles => {\r\n  const { theme } = props;\r\n  const spacing = theme.spacing as IPubcenterSpacing;\r\n  const palette = theme.palette as IPubcenterPalette;\r\n\r\n  return mergeStyleSets({\r\n    cardContainerStyle: {\r\n      display: 'flex',\r\n      flexDirection: 'column',\r\n      width: 'auto',\r\n      boxShadow: '0px 0px 7px 0px rgba(0,0,0,0.2)',\r\n      transition: '0.3s',\r\n      borderRadius: spacing.size10,\r\n      flex: 1,\r\n      gridColumn: 'span 1',\r\n      minHeight: spacing.size256,\r\n    },\r\n    contentStyle: {\r\n      display: 'flex',\r\n      flexDirection: 'column',\r\n      margin: `${spacing.size10} ${spacing.size15}`,\r\n      height: '100%',\r\n    },\r\n    balanceImageStyle: {\r\n      display: 'flex',\r\n    },\r\n    balanceStyle: {\r\n      width: spacing.size150,\r\n      marginRight: 'auto',\r\n    },\r\n    balanceTextStyle: {\r\n      fontSize: spacing.size16,\r\n      fontWeight: 600,\r\n    },\r\n    currentBalanceStyle: {\r\n      margin: '0px',\r\n      fontSize: spacing.size28,\r\n      fontWeight: 600,\r\n    },\r\n    lastPaymentInfoStyle: {\r\n      fontSize: spacing.size12,\r\n      fontWeight: 400,\r\n      marginTop: spacing.size4,\r\n    },\r\n    imageStyle: {\r\n      display: 'flex',\r\n      marginTop: spacing.size10,\r\n    },\r\n    barChartSectionStyle: {\r\n      marginTop: spacing.size20,\r\n    },\r\n    currentBalanceInfoStyle: {\r\n      display: 'flex',\r\n      justifyContent: 'flex-end',\r\n    },\r\n    currentBalanceInfoTextStyle: {\r\n      fontSize: spacing.size10,\r\n      fontWeight: 400,\r\n    },\r\n    iconSectionStyle: {\r\n      marginTop: spacing.size40,\r\n    },\r\n    iconStyle: {\r\n      border: 'none',\r\n      padding: '0px',\r\n      cursor: 'pointer',\r\n      fontStyle: 'normal',\r\n    },\r\n    iconContentStyle: {\r\n      width: 'auto',\r\n      padding: `0px ${spacing.size12}`,\r\n      height: spacing.size32,\r\n      border: `${spacing.size1} solid ${palette['NeutralStroke1.Rest']}`,\r\n      borderRadius: spacing.size4,\r\n      justifyContent: 'center',\r\n      alignItems: 'center',\r\n      display: 'flex',\r\n      ':hover': {\r\n        backgroundColor: palette['NeutralBackground3.Rest'],\r\n        cursor: 'pointer',\r\n      },\r\n    },\r\n    iconTextStyle: {\r\n      marginLeft: spacing.size10,\r\n      marginBottom: spacing.size4,\r\n      color: palette['NeutralForeground1.Rest'],\r\n      fontSize: spacing.size14,\r\n      fontWeight: 600,\r\n    },\r\n    subComponentStyles: {\r\n      chartTitle: {\r\n        justifyContent: 'flex-end',\r\n      },\r\n      items: {\r\n        marginBottom: '3px',\r\n      },\r\n    },\r\n  });\r\n};\r\n\r\nexport function getClassNames<PropType>(props?: PropType) {\r\n  return getStyles({ theme: getTheme(), ...props });\r\n}\r\n","import { defineMessages } from 'react-intl';\r\n\r\nexport default defineMessages({\r\n  performanceSectionTitle: {\r\n    id: 'performanceSection.title',\r\n    defaultMessage: 'Your Performance Snapshot',\r\n  },\r\n  viewPayment: {\r\n    id: 'viewPayment.button',\r\n    defaultMessage: 'View Payment',\r\n  },\r\n  lastEarned: {\r\n    id: 'lastEarned.text',\r\n    defaultMessage: 'earned since last payment',\r\n  },\r\n  balanceCardTitle: {\r\n    id: 'balanceCard.title',\r\n    defaultMessage: 'Balance',\r\n  },\r\n  payout: {\r\n    id: 'payout.popup',\r\n    defaultMessage: 'Payout!',\r\n  },\r\n  balanceImage: {\r\n    id: 'balance.image',\r\n    defaultMessage: 'Balance Image',\r\n  },\r\n  performanceCardTitle: {\r\n    id: 'performanceCard.title',\r\n    defaultMessage: 'Performance',\r\n  },\r\n  metricsDaterange: {\r\n    id: 'metric.daterange',\r\n    defaultMessage: 'Last 30 days',\r\n  },\r\n  viewReports: {\r\n    id: 'viewReports.button',\r\n    defaultMessage: 'View Reports',\r\n  },\r\n});\r\n","import { Icon, Image, Shimmer } from '@fluentui/react';\r\nimport { HorizontalBarChart } from '@fluentui/react-charting';\r\nimport React from 'react';\r\nimport { useI18n } from '../../../../../../../i18n/useI18n';\r\nimport { getAppStore } from '../../../../../../@data';\r\nimport { injectRouterAndIntlWithObserver } from '../../../../../../utils';\r\nimport { getTythonPaymentPageRoute } from '../../../../../../utils/routeUtils';\r\nimport { getPaymentsPageBalance } from '../../../../Account/@data/store/selectors';\r\nimport { getStore } from '../../../../Account/Settings/@data/store/store';\r\nimport balanceImg from '../resources/BalanceImg.svg';\r\nimport paymentImg from '../resources/Payment.svg';\r\nimport { getBarChartCustomData, mapToBarChartData } from '../utils/balanceHelper';\r\nimport { getBalanceHorizontalBarShimmer, getBalanceValueShimmer } from '../utils/getBalanceShimmers';\r\nimport { getClassNames } from './BalanceCard.styles';\r\nimport messages from './messages';\r\n\r\nconst CURRENCY = 'USD';\r\n\r\nconst BalanceCard = injectRouterAndIntlWithObserver(({ intl: { formatMessage }, history }) => {\r\n  const { data, isDataLoaded } = getPaymentsPageBalance();\r\n  const {\r\n    cardContainerStyle,\r\n    contentStyle,\r\n    balanceImageStyle,\r\n    balanceStyle,\r\n    balanceTextStyle,\r\n    currentBalanceStyle,\r\n    lastPaymentInfoStyle,\r\n    imageStyle,\r\n    barChartSectionStyle,\r\n    currentBalanceInfoStyle,\r\n    currentBalanceInfoTextStyle,\r\n    iconSectionStyle,\r\n    iconStyle,\r\n    iconContentStyle,\r\n    iconTextStyle,\r\n  } = getClassNames();\r\n\r\n  const { publisher, userContext } = getAppStore();\r\n  const { systemPreferences } = getStore().active;\r\n  const { locale } = useI18n({ systemPreferences, publisher, userContext });\r\n\r\n  const currentBalance = Number(data?.currBalance).toLocaleString(locale, { style: 'currency', currency: CURRENCY });\r\n\r\n  const styles = {\r\n    chartTitle: {\r\n      justifyContent: 'flex-end',\r\n    },\r\n    items: {\r\n      marginBottom: '3px',\r\n    },\r\n  };\r\n\r\n  function handleViewPaymentButton() {\r\n    history.push(getTythonPaymentPageRoute());\r\n  }\r\n\r\n  return (\r\n    <>\r\n      <div className={cardContainerStyle}>\r\n        <div className={contentStyle}>\r\n          <div className={balanceImageStyle}>\r\n            <div className={balanceStyle}>\r\n              <h3 className={balanceTextStyle}>{formatMessage(messages.balanceCardTitle)}</h3>\r\n              {isDataLoaded ? (\r\n                <>\r\n                  <p className={currentBalanceStyle}>{currentBalance}</p>\r\n                  <p className={lastPaymentInfoStyle}>{formatMessage(messages.lastEarned)}</p>\r\n                </>\r\n              ) : (\r\n                <Shimmer customElementsGroup={getBalanceValueShimmer()} />\r\n              )}\r\n            </div>\r\n            <div className={imageStyle}>\r\n              <Image src={balanceImg} alt={formatMessage(messages.balanceImage)} />\r\n            </div>\r\n          </div>\r\n          <div className={barChartSectionStyle}>\r\n            {isDataLoaded ? (\r\n              <>\r\n                <HorizontalBarChart\r\n                  barHeight={15}\r\n                  data={mapToBarChartData(data)}\r\n                  barChartCustomData={getBarChartCustomData(formatMessage(messages.payout))}\r\n                  styles={{ ...styles }}\r\n                  hideTooltip\r\n                />\r\n                <div className={currentBalanceInfoStyle}>\r\n                  <span className={currentBalanceInfoTextStyle}>{`${currentBalance} / $${data?.threshold}`}</span>\r\n                </div>\r\n              </>\r\n            ) : (\r\n              <Shimmer customElementsGroup={getBalanceHorizontalBarShimmer()} />\r\n            )}\r\n          </div>\r\n\r\n          <div className={iconSectionStyle}>\r\n            <Icon className={iconStyle} onClick={() => handleViewPaymentButton()}>\r\n              <div className={iconContentStyle}>\r\n                <Image src={paymentImg} />\r\n                <span className={iconTextStyle}>{formatMessage(messages.viewPayment)}</span>\r\n              </div>\r\n            </Icon>\r\n          </div>\r\n        </div>\r\n      </div>\r\n    </>\r\n  );\r\n});\r\n\r\nexport default BalanceCard;\r\n","import { ShimmerElementType, ShimmerElementsGroup } from '@fluentui/react';\r\nimport React from 'react';\r\n\r\nexport const getBalanceValueShimmer = (): JSX.Element => {\r\n  return (\r\n    <div>\r\n      <ShimmerElementsGroup flexWrap width=\"100%\" shimmerElements={[{ type: ShimmerElementType.line, width: '100%', height: 37 }]} />\r\n    </div>\r\n  );\r\n};\r\n\r\nexport const getBalanceHorizontalBarShimmer = (): JSX.Element => {\r\n  return (\r\n    <div>\r\n      <ShimmerElementsGroup flexWrap width=\"100%\" shimmerElements={[{ type: ShimmerElementType.line, width: '100%', height: 16 }]} />\r\n      <ShimmerElementsGroup\r\n        backgroundColor={'transparent'}\r\n        flexWrap\r\n        width=\"100%\"\r\n        shimmerElements={[\r\n          { type: ShimmerElementType.gap, width: '60%', height: 14 },\r\n          { type: ShimmerElementType.line, width: '40%', height: 14, verticalAlign: 'bottom' },\r\n        ]}\r\n      />\r\n    </div>\r\n  );\r\n};\r\n","import { mergeStyleSets } from '@fluentui/merge-styles';\r\nimport { getTheme } from '@fluentui/style-utilities';\r\nimport { IPubcenterSpacing } from '../../../../../../../theme';\r\nimport { ICommonStyleProps } from '../../../../../../types';\r\n\r\ntype StyleProperties = 'titleStyle' | 'valueStyle';\r\n\r\ntype MetricItemStyles = Record<StyleProperties, string>;\r\n\r\nexport const getStyles = (props: ICommonStyleProps): MetricItemStyles => {\r\n  const { theme } = props;\r\n  const spacing = theme.spacing as IPubcenterSpacing;\r\n\r\n  return mergeStyleSets({\r\n    titleStyle: {\r\n      flex: '1 1 auto',\r\n      borderBottom: '1px dotted black',\r\n      fontSize: spacing.size12,\r\n      fontWeight: 400,\r\n      margin: `0px 0px ${spacing.size4} 0px`,\r\n    },\r\n    valueStyle: {\r\n      fontSize: spacing.size24,\r\n      fontWeight: 600,\r\n      margin: '0px',\r\n    },\r\n  });\r\n};\r\n\r\nexport function getClassNames<PropType>(props?: PropType) {\r\n  return getStyles({ theme: getTheme(), ...props });\r\n}\r\n","import { Icon, Shimmer, TooltipHost } from '@fluentui/react';\r\nimport React from 'react';\r\nimport { InjectedIntlProps } from 'react-intl';\r\nimport { injectIntlAndObserver } from '../../../../../../utils';\r\nimport { getPerformanceShimmer } from '../utils/getPerformanceShimmer';\r\nimport { getClassNames } from './MetricItem.styles';\r\n\r\nexport interface IMetricItemProps extends InjectedIntlProps {\r\n  title: string;\r\n  dataValue: string;\r\n  isDataLoaded?: boolean;\r\n}\r\n\r\nconst MetricItem = injectIntlAndObserver<IMetricItemProps>((props: IMetricItemProps) => {\r\n  const { titleStyle, valueStyle } = getClassNames();\r\n  return (\r\n    <>\r\n      <span className={titleStyle}>\r\n        {props.title}\r\n        {props.title.length === 0 ? (\r\n          ''\r\n        ) : (\r\n          <TooltipHost content=\"description\">\r\n            <Icon iconName=\"info\" style={{ display: 'none', marginLeft: '5px' }} />\r\n          </TooltipHost>\r\n        )}\r\n      </span>\r\n      {props.isDataLoaded ? (\r\n        <p className={valueStyle}>{props.dataValue ? props.dataValue : '--'}</p>\r\n      ) : (\r\n        <Shimmer customElementsGroup={getPerformanceShimmer()} />\r\n      )}\r\n    </>\r\n  );\r\n});\r\n\r\nexport default MetricItem;\r\n","import { ShimmerElementType, ShimmerElementsGroup } from '@fluentui/react';\r\nimport React from 'react';\r\n\r\nexport const getPerformanceShimmer = (): JSX.Element => {\r\n  return (\r\n    <div style={{ width: '142px' }}>\r\n      <ShimmerElementsGroup flexWrap width=\"100%\" shimmerElements={[{ type: ShimmerElementType.line, width: '100%', height: 37 }]} />\r\n    </div>\r\n  );\r\n};\r\n","import { mergeStyleSets } from '@fluentui/merge-styles';\r\nimport { getTheme } from '@fluentui/style-utilities';\r\nimport { BreakPoints, IPubcenterPalette, IPubcenterSpacing } from '../../../../../../../theme';\r\nimport { ICommonStyleProps } from '../../../../../../types';\r\n\r\ntype StyleProperties =\r\n  | 'cardContainerStyle'\r\n  | 'cardContentStyle'\r\n  | 'headerStyle'\r\n  | 'titleStyle'\r\n  | 'timeRangeStyle'\r\n  | 'metricsContainerStyle'\r\n  | 'metricStyle'\r\n  | 'iconContainerStyle'\r\n  | 'iconStyle'\r\n  | 'iconContentStyle'\r\n  | 'iconTextStyle';\r\n\r\ntype PerformanceCardStyles = Record<StyleProperties, string>;\r\n\r\nexport const getStyles = (props: ICommonStyleProps): PerformanceCardStyles => {\r\n  const { theme } = props;\r\n  const spacing = theme.spacing as IPubcenterSpacing;\r\n  const palette = theme.palette as IPubcenterPalette;\r\n  const { ResponsiveExtraLarge } = BreakPoints;\r\n  return mergeStyleSets({\r\n    cardContainerStyle: {\r\n      display: 'flex',\r\n      flexDirection: 'column',\r\n      width: 'auto',\r\n      boxShadow: '0px 0px 7px 0px rgba(0,0,0,0.2)',\r\n      transition: '0.3s',\r\n      borderRadius: spacing.size10,\r\n      flex: 1,\r\n      gridColumn: 'span 2',\r\n      minHeight: spacing.size256,\r\n    },\r\n    cardContentStyle: {\r\n      display: 'flex',\r\n      marginLeft: spacing.size20,\r\n      flexDirection: 'column',\r\n      height: '100%',\r\n    },\r\n    headerStyle: {\r\n      display: 'flex',\r\n    },\r\n    titleStyle: {\r\n      fontSize: spacing.size16,\r\n      fontWeight: 600,\r\n    },\r\n    timeRangeStyle: {\r\n      fontSize: spacing.size12,\r\n      fontWeight: 400,\r\n      marginTop: spacing.size20,\r\n      marginLeft: spacing.size10,\r\n    },\r\n    metricsContainerStyle: {\r\n      display: 'grid',\r\n      gridTemplateColumns: `repeat(auto-fit, minmax(150px, 1fr))`,\r\n      justifyContent: 'space-around',\r\n      gap: spacing.size30,\r\n      [ResponsiveExtraLarge]: {\r\n        gap: spacing.size54,\r\n      },\r\n    },\r\n    metricStyle: {\r\n      display: 'flex',\r\n      alignItems: 'baseline',\r\n      flexDirection: 'column',\r\n      minWidth: spacing.size126,\r\n      width: spacing.size142,\r\n      height: spacing.size52,\r\n    },\r\n    iconContainerStyle: {\r\n      marginTop: 'auto',\r\n      marginBottom: spacing.size12,\r\n    },\r\n    iconStyle: {\r\n      background: 'white',\r\n      border: 'none',\r\n      padding: '0px',\r\n      cursor: 'pointer',\r\n      fontStyle: 'normal',\r\n    },\r\n    iconContentStyle: {\r\n      width: 'auto',\r\n      padding: `0px ${spacing.size12}`,\r\n      height: spacing.size32,\r\n      border: `${spacing.size1} solid ${palette['NeutralStroke1.Rest']}`,\r\n      borderRadius: spacing.size4,\r\n      justifyContent: 'center',\r\n      alignItems: 'center',\r\n      display: 'flex',\r\n      ':hover': {\r\n        backgroundColor: palette['NeutralBackground3.Rest'],\r\n        cursor: 'pointer',\r\n      },\r\n    },\r\n    iconTextStyle: {\r\n      marginLeft: spacing.size10,\r\n      marginBottom: spacing.size4,\r\n      color: palette['NeutralForeground1.Rest'],\r\n      fontSize: spacing.size14,\r\n      fontWeight: 600,\r\n    },\r\n  });\r\n};\r\n\r\nexport function getClassNames<PropType>(props?: PropType) {\r\n  return getStyles({ theme: getTheme(), ...props });\r\n}\r\n","import { Icon, Image } from '@fluentui/react';\r\nimport React from 'react';\r\nimport { useI18n } from '../../../../../../../i18n/useI18n';\r\nimport { getAppStore } from '../../../../../../@data';\r\nimport { injectRouterAndIntlWithObserver } from '../../../../../../utils';\r\nimport { getTythonReportDashboardPageRoute } from '../../../../../../utils/routeUtils';\r\nimport { TythonColumnsEnum } from '../../../../../report/@data/store/schema/ColumnsEnum';\r\nimport { TythonReportingDataRow } from '../../../../../report/DashboardCards/@data/store/schema';\r\nimport { constructRequestBody } from '../../../../../report/DashboardCards/ReportCard/ReportCard.helpers';\r\nimport { ChartGrain, ReportCardType } from '../../../../../report/DashboardCards/ReportCard/ReportCard.types';\r\nimport { useReportMetadata, useReportQuery } from '../../../../../report/hooks/useReportQuery';\r\nimport { getReportColumnMetadataDisplayName } from '../../../../../report/utils/intlHelper';\r\nimport { formatMetric } from '../../../../../report/utils/metricsFormatter';\r\nimport { getStore } from '../../../../Account/Settings/@data/store/store';\r\nimport dataUsage from '../resources/Data_Usage.svg';\r\nimport MetricItem from './MetricItem';\r\nimport { getClassNames } from './PerformanceCard.styles';\r\nimport messages from './messages';\r\n\r\nconst PerformanceCard = injectRouterAndIntlWithObserver(({ intl: { formatMessage }, history }) => {\r\n  const DAYS_BACK: number = 30;\r\n  const dateRange = {\r\n    startDate: new Date(new Date().setDate(new Date().getDate() - DAYS_BACK)),\r\n    endDate: new Date(),\r\n  };\r\n  const { data: reportMetadata } = useReportMetadata();\r\n  const isMetadataLoaded = !!reportMetadata;\r\n  const { data: summaryData } = useReportQuery(\r\n    constructRequestBody(ReportCardType.SUMMARY, dateRange, ChartGrain.NONE, [], [], reportMetadata?.metrics || []),\r\n    false,\r\n    isMetadataLoaded\r\n  );\r\n  const isDataLoaded = !!summaryData;\r\n  const summary = (summaryData && summaryData[0] ? summaryData[0] : { DateTime: '' }) as TythonReportingDataRow;\r\n  const { publisher, userContext } = getAppStore();\r\n  const { systemPreferences } = getStore().active;\r\n  const { locale } = useI18n({ systemPreferences, publisher, userContext });\r\n\r\n  const {\r\n    cardContainerStyle,\r\n    cardContentStyle,\r\n    headerStyle,\r\n    titleStyle,\r\n    timeRangeStyle,\r\n    metricsContainerStyle,\r\n    metricStyle,\r\n    iconContainerStyle,\r\n    iconStyle,\r\n    iconContentStyle,\r\n    iconTextStyle,\r\n  } = getClassNames();\r\n\r\n  function handleViewReportButton() {\r\n    history.push(getTythonReportDashboardPageRoute());\r\n  }\r\n\r\n  return (\r\n    <>\r\n      <div className={cardContainerStyle}>\r\n        <div className={cardContentStyle}>\r\n          <div className={headerStyle}>\r\n            <h3 className={titleStyle}>{formatMessage(messages.performanceCardTitle)}</h3>\r\n            <p className={timeRangeStyle}>{formatMessage(messages.metricsDaterange)}</p>\r\n          </div>\r\n\r\n          <div className={metricsContainerStyle}>\r\n            <div className={metricStyle}>\r\n              <MetricItem\r\n                title={(isMetadataLoaded && getReportColumnMetadataDisplayName(TythonColumnsEnum.Revenue, formatMessage)) || ''}\r\n                dataValue={`${formatMetric(TythonColumnsEnum.Revenue, summary.Revenue, locale)}`}\r\n                isDataLoaded={isDataLoaded}\r\n              />\r\n            </div>\r\n            <div className={metricStyle}>\r\n              <MetricItem\r\n                title={(isMetadataLoaded && getReportColumnMetadataDisplayName(TythonColumnsEnum.FillRate, formatMessage)) || ''}\r\n                dataValue={`${formatMetric(TythonColumnsEnum.FillRate, summary.FillRate, locale)}`}\r\n                isDataLoaded={isDataLoaded}\r\n              />\r\n            </div>\r\n            <div className={metricStyle}>\r\n              <MetricItem\r\n                title={(isMetadataLoaded && getReportColumnMetadataDisplayName(TythonColumnsEnum.ImpressionsServed, formatMessage)) || ''}\r\n                dataValue={`${formatMetric(TythonColumnsEnum.ImpressionsServed, summary.ImpressionsServed, locale)}`}\r\n                isDataLoaded={isDataLoaded}\r\n              />\r\n            </div>\r\n            <div className={metricStyle}>\r\n              <MetricItem\r\n                title={(isMetadataLoaded && getReportColumnMetadataDisplayName(TythonColumnsEnum.Viewability, formatMessage)) || ''}\r\n                dataValue={`${formatMetric(TythonColumnsEnum.Viewability, summary.Viewability, locale)}`}\r\n                isDataLoaded={isDataLoaded}\r\n              />\r\n            </div>\r\n            <div className={metricStyle}>\r\n              <MetricItem\r\n                title={(isMetadataLoaded && getReportColumnMetadataDisplayName(TythonColumnsEnum.ImpressionsViewed, formatMessage)) || ''}\r\n                dataValue={`${formatMetric(TythonColumnsEnum.ImpressionsViewed, summary.ImpressionsViewed, locale)}`}\r\n                isDataLoaded={isDataLoaded}\r\n              />\r\n            </div>\r\n            <div className={metricStyle}>\r\n              <MetricItem\r\n                title={(isMetadataLoaded && getReportColumnMetadataDisplayName(TythonColumnsEnum.CTR, formatMessage)) || ''}\r\n                dataValue={`${formatMetric(TythonColumnsEnum.CTR, summary.CTR, locale)}`}\r\n                isDataLoaded={isDataLoaded}\r\n              />\r\n            </div>\r\n            <div className={metricStyle}>\r\n              <MetricItem\r\n                title={(isMetadataLoaded && getReportColumnMetadataDisplayName(TythonColumnsEnum.eCPM, formatMessage)) || ''}\r\n                dataValue={`${formatMetric(TythonColumnsEnum.eCPM, summary.eCPM, locale)}`}\r\n                isDataLoaded={isDataLoaded}\r\n              />\r\n            </div>\r\n            <div className={metricStyle}>\r\n              <MetricItem\r\n                title={(isMetadataLoaded && getReportColumnMetadataDisplayName(TythonColumnsEnum.Clicks, formatMessage)) || ''}\r\n                dataValue={`${formatMetric(TythonColumnsEnum.Clicks, summary.Clicks, locale)}`}\r\n                isDataLoaded={isDataLoaded}\r\n              />\r\n            </div>\r\n          </div>\r\n          <div className={iconContainerStyle}>\r\n            <Icon className={iconStyle} onClick={() => handleViewReportButton()}>\r\n              <div className={iconContentStyle}>\r\n                <Image src={dataUsage} />\r\n                <span className={iconTextStyle}>{formatMessage(messages.viewReports)}</span>\r\n              </div>\r\n            </Icon>\r\n          </div>\r\n        </div>\r\n      </div>\r\n    </>\r\n  );\r\n});\r\n\r\nexport default PerformanceCard;\r\n","import React from 'react';\r\nimport { InjectedIntlProps } from 'react-intl';\r\nimport { getEntityAccessPermissions } from '../../../../../@data';\r\nimport { UserRoleEntity, completeAccess, hasReadAccess } from '../../../../../@data/services/UserRoleService';\r\nimport { PublisherProfileTabs } from '../../../../../@data/store/schema/userrolemodels/PublisherProfileTabs';\r\nimport { injectIntlAndObserver } from '../../../../../utils';\r\nimport { getStore } from '../../@data/store/store';\r\nimport { getClassNames } from './PerformanceSection.styles';\r\nimport BalanceCard from './components/BalanceCard';\r\nimport PerformanceCard from './components/PerformanceCard';\r\nimport messages from './components/messages';\r\n\r\nconst PerformanceSection = injectIntlAndObserver<InjectedIntlProps>(({ intl: { formatMessage } }) => {\r\n  const { isSetupDone } = getStore();\r\n  const { titleStyle, sectionContainerStyle } = getClassNames();\r\n  const publisherProfileAccess = getEntityAccessPermissions(UserRoleEntity.PublisherProfileTabs) as PublisherProfileTabs | null;\r\n  const hasPaymentAccess = hasReadAccess(publisherProfileAccess === null ? completeAccess : publisherProfileAccess.payments);\r\n  return (\r\n    <>\r\n      {isSetupDone ? (\r\n        <div>\r\n          <h2 className={titleStyle}>{formatMessage(messages.performanceSectionTitle)}</h2>\r\n          <div className={sectionContainerStyle}>\r\n            {hasPaymentAccess && <BalanceCard />}\r\n            <PerformanceCard />\r\n          </div>\r\n        </div>\r\n      ) : null}\r\n    </>\r\n  );\r\n});\r\n\r\nexport default PerformanceSection;\r\n","import { defineMessages } from 'react-intl';\r\n\r\nexport default defineMessages({\r\n  recommendationsTitle: {\r\n    id: 'recommendations.title',\r\n    defaultMessage: 'Recommendations',\r\n  },\r\n  setupPaymentTitle: {\r\n    id: 'setupPayment.title',\r\n    defaultMessage: 'Setup payment method',\r\n  },\r\n  setupPaymentDescription: {\r\n    id: 'setupPayment.description',\r\n    defaultMessage: 'Provide payment details to ensure your revenue is paid out correctly.',\r\n  },\r\n  setupPaymentButton: {\r\n    id: 'setupPayment.button',\r\n    defaultMessage: 'Go to Payments',\r\n  },\r\n  setupMediationTitle: {\r\n    id: 'setupMediation.title',\r\n    defaultMessage: 'Enable Google Mediation',\r\n  },\r\n  setupMediationDescription: {\r\n    id: 'setupMediation.description',\r\n    defaultMessage: 'Run your Google ads using {appName} to get maximum value for your ad inventory.',\r\n  },\r\n  setupMediationButton: {\r\n    id: 'setupMediation.button',\r\n    defaultMessage: 'Setup mediation',\r\n  },\r\n  setupAdsTxtTitle: {\r\n    id: 'setupAdsTxt.title',\r\n    defaultMessage: 'Enable Ads.txt on all sites',\r\n  },\r\n  setupAdsTxtDescription: {\r\n    id: 'setupAdsTxt.description',\r\n    defaultMessage: 'Install this file to verify your authenticity and increase the amount of advertisers who can advertise on your site.',\r\n  },\r\n  setupAdsTxtButton: {\r\n    id: 'setupAdsTxt.button',\r\n    defaultMessage: 'View sites',\r\n  },\r\n  paymentImage: {\r\n    id: 'payment.image',\r\n    defaultMessage: 'Payment Image',\r\n  },\r\n  mediationImage: {\r\n    id: 'mediation.image',\r\n    defaultMessage: 'Mediation Image',\r\n  },\r\n  adsTxtImage: {\r\n    id: 'adsTxt.image',\r\n    defaultMessage: 'Ads Txt image',\r\n  },\r\n  adBlockCardTitle: {\r\n    id: 'adblock.card.title',\r\n    defaultMessage: 'Set ad blocks',\r\n  },\r\n  adBlockCardDescription: {\r\n    id: 'adblock.card.description',\r\n    defaultMessage: 'Ad blocks shape which ads will show up on your sites ensuring that only content you approve of will be shown.',\r\n  },\r\n  adBlockCardAction: {\r\n    id: 'adblock.card.action',\r\n    defaultMessage: 'Ad blocks',\r\n  },\r\n});\r\n","import { getTheme, mergeStyleSets } from '@fluentui/react';\r\nimport { IPubcenterSpacing } from '../../../../../../theme';\r\nimport { ICommonStyleProps } from '../../../../../types';\r\n\r\ntype StyleProperties = 'cardsContainer' | 'headerSection';\r\ntype GettingStartedStyles = Record<StyleProperties, string>;\r\n\r\nexport const getStyles = (props: ICommonStyleProps): GettingStartedStyles => {\r\n  const { theme } = props;\r\n  const spacing = theme.spacing as IPubcenterSpacing;\r\n  return mergeStyleSets({\r\n    cardsContainer: {\r\n      display: 'grid',\r\n      gridTemplateColumns: `repeat(auto-fit, minmax(${spacing.size260}, 1fr))`,\r\n      justifyContent: 'space-between',\r\n      gap: '15px',\r\n    },\r\n    headerSection: {\r\n      margin: '15px 0px',\r\n      fontSize: '20px',\r\n      fontWeight: '600',\r\n    },\r\n  });\r\n};\r\n\r\nexport function getClassNames<PropType>(props?: PropType) {\r\n  return getStyles({ theme: getTheme(), ...props });\r\n}\r\n","import { DefaultButton, getTheme } from '@fluentui/react';\r\nimport React from 'react';\r\nimport { IPubcenterPalette, IPubcenterSpacing, IPubcenterTheme } from '../../../../../../../theme';\r\nimport { getEntityAccessPermissions } from '../../../../../../@data';\r\nimport { UserRoleEntity, completeAccess, hasReadAccess } from '../../../../../../@data/services/UserRoleService';\r\nimport { PublisherProfileTabs } from '../../../../../../@data/store/schema/userrolemodels/PublisherProfileTabs';\r\nimport { APP_NAME_NEW } from '../../../../../../constants/AppConstants';\r\nimport { getAccountStatus } from '../../../../Account/@data/store/selectors';\r\nimport paymentImg from '../../PerformanceSection/resources/Payment.svg';\r\nimport { ISetupCard, SetupCardType } from '../../SetupCard/SetupCardUtils';\r\nimport messages from '../RecommendationsSection.messages';\r\nimport adBlock from '../resources/adBlock.svg';\r\nimport adsTxt from '../resources/adsTxt.svg';\r\nimport mediationImage from '../resources/mediation.svg';\r\nimport mediationIcon from '../resources/mediationIcon.svg';\r\nimport paymentImage from '../resources/payment.svg';\r\n\r\nexport const getRecommendationsCardsPlaceholder = (): ISetupCard[] => {\r\n  return [\r\n    {\r\n      title: '',\r\n      description: '',\r\n    },\r\n    {\r\n      title: '',\r\n      description: '',\r\n    },\r\n    {\r\n      title: '',\r\n      description: '',\r\n    },\r\n  ];\r\n};\r\n\r\nexport const getRecommendationsCards = (\r\n  formatMessage,\r\n  handlePaymentCardButtonClick,\r\n  handleMediationButtonClick,\r\n  handleAdsTxtCardButtonClick,\r\n  handleAdBlockCardButtonClick,\r\n  isMediationEnabeled\r\n): ISetupCard[] => {\r\n  const NOT_CREATED_ACCOUNT_STATUS = 'NotCreated';\r\n  const theme = (getTheme() as unknown) as IPubcenterTheme;\r\n  const palette = theme.palette as IPubcenterPalette;\r\n  const spacing = theme.spacing as IPubcenterSpacing;\r\n  const actionButtonStyle = {\r\n    justifyContent: 'center',\r\n    display: 'flex',\r\n    border: `${spacing.size1} solid ${palette['NeutralStroke1.Rest']}`,\r\n    borderRadius: spacing.size4,\r\n  };\r\n  const actionButtonTextStyle = { lineHeight: spacing.size12, fontWeight: 600, marginLeft: spacing.size6 };\r\n  const accountStatus = getAccountStatus();\r\n  const publisherProfileAccess = getEntityAccessPermissions(UserRoleEntity.PublisherProfileTabs) as PublisherProfileTabs | null;\r\n  const hasPaymentAccess = hasReadAccess(publisherProfileAccess === null ? completeAccess : publisherProfileAccess.payments);\r\n  const gettingStartedCards: ISetupCard[] = [\r\n    {\r\n      title: formatMessage(messages.setupPaymentTitle),\r\n      description: formatMessage(messages.setupPaymentDescription),\r\n      button: (\r\n        <DefaultButton style={actionButtonStyle} onClick={() => handlePaymentCardButtonClick()}>\r\n          <img src={paymentImg} alt={formatMessage(messages.setupPaymentButton)} />\r\n          <span style={actionButtonTextStyle}>{formatMessage(messages.setupPaymentButton)}</span>\r\n        </DefaultButton>\r\n      ),\r\n      image: paymentImage,\r\n      imageAlt: formatMessage(messages.paymentImage),\r\n      hidden: !hasPaymentAccess || accountStatus !== NOT_CREATED_ACCOUNT_STATUS,\r\n      cardType: SetupCardType.Recommendations,\r\n    },\r\n    {\r\n      title: formatMessage(messages.setupMediationTitle),\r\n      description: formatMessage(messages.setupMediationDescription, { appName: APP_NAME_NEW }),\r\n      button: (\r\n        <DefaultButton style={actionButtonStyle} onClick={() => handleMediationButtonClick()}>\r\n          <img src={mediationIcon} alt={formatMessage(messages.setupMediationButton)} />\r\n          <span style={actionButtonTextStyle}>{formatMessage(messages.setupMediationButton)}</span>\r\n        </DefaultButton>\r\n      ),\r\n      image: mediationImage,\r\n      imageAlt: formatMessage(messages.mediationImage),\r\n      hidden: isMediationEnabeled,\r\n      cardType: SetupCardType.Recommendations,\r\n    },\r\n    {\r\n      title: formatMessage(messages.setupAdsTxtTitle),\r\n      description: formatMessage(messages.setupAdsTxtDescription),\r\n      button: (\r\n        <DefaultButton style={actionButtonStyle} onClick={() => handleAdsTxtCardButtonClick()}>\r\n          <img src={paymentImg} alt={formatMessage(messages.setupAdsTxtButton)} />\r\n          <span style={actionButtonTextStyle}>{formatMessage(messages.setupAdsTxtButton)}</span>\r\n        </DefaultButton>\r\n      ),\r\n      image: adsTxt,\r\n      imageAlt: formatMessage(messages.adsTxtImage),\r\n      cardType: SetupCardType.Recommendations,\r\n    },\r\n    {\r\n      title: formatMessage(messages.adBlockCardTitle),\r\n      description: formatMessage(messages.adBlockCardDescription),\r\n      button: (\r\n        <DefaultButton style={actionButtonStyle} onClick={() => handleAdBlockCardButtonClick()}>\r\n          <img src={paymentImg} alt={formatMessage(messages.adBlockCardAction)} />\r\n          <span style={actionButtonTextStyle}>{formatMessage(messages.adBlockCardAction)}</span>\r\n        </DefaultButton>\r\n      ),\r\n      image: adBlock,\r\n      imageAlt: formatMessage(messages.adBlockCardAction),\r\n      cardType: SetupCardType.Recommendations,\r\n    },\r\n  ];\r\n\r\n  return gettingStartedCards;\r\n};\r\n","import React, { useEffect } from 'react';\r\nimport { usePreloadSVGImages } from '../../../../../hooks';\r\nimport { injectRouterAndIntlWithObserver } from '../../../../../utils';\r\nimport {\r\n  getAdBlocksPageRoute,\r\n  getSitesRoute,\r\n  getTythonAccountSettingPageRoute,\r\n  getTythonPaymentPageRoute,\r\n} from '../../../../../utils/routeUtils';\r\nimport { getGoogleAdSenseStore } from '../../../Account/Settings/components/GoogleConnector/@data';\r\nimport { onInitializeRecommendationSection } from '../../@data/actions';\r\nimport { getStore } from '../../@data/store/store';\r\nimport performanceImg from '../PerformanceSection/resources/Payment.svg';\r\nimport { SetupCard } from '../SetupCard/SetupCard';\r\nimport { ISetupCard } from '../SetupCard/SetupCardUtils';\r\nimport messages from './RecommendationsSection.messages';\r\nimport { getClassNames } from './RecommendationsSection.styles';\r\nimport adBlockImg from './resources/adBlock.svg';\r\nimport adsTxtImg from './resources/adsTxt.svg';\r\nimport mediationImg from './resources/mediation.svg';\r\nimport mediationIconImg from './resources/mediationIcon.svg';\r\nimport paymentImg from './resources/payment.svg';\r\nimport { getRecommendationsCards, getRecommendationsCardsPlaceholder } from './utils/getCards';\r\n\r\nexport const RecommendationsSection = injectRouterAndIntlWithObserver(function RecommendationsSectionComponent({\r\n  intl: { formatMessage },\r\n  history,\r\n}) {\r\n  const imgPreloadQueue = [adBlockImg, adsTxtImg, mediationImg, mediationIconImg, paymentImg, performanceImg];\r\n  usePreloadSVGImages(imgPreloadQueue);\r\n  const { cardsContainer, headerSection } = getClassNames();\r\n  const { isSetupDone } = getStore();\r\n  const { active } = getGoogleAdSenseStore();\r\n\r\n  let recommendationsCards = getRecommendationsCardsPlaceholder();\r\n\r\n  if (active.connectionStatus) {\r\n    recommendationsCards = getRecommendationsCards(\r\n      formatMessage,\r\n      handlePaymentCardButtonClick,\r\n      handleMediationButtonClick,\r\n      handleAdsTxtCardButtonClick,\r\n      handleAdBlockCardButtonClick,\r\n      active.isMediationEnabled\r\n    );\r\n  }\r\n\r\n  useEffect(() => {\r\n    onInitializeRecommendationSection();\r\n  }, []);\r\n\r\n  function handlePaymentCardButtonClick() {\r\n    history.push(getTythonPaymentPageRoute());\r\n  }\r\n\r\n  function handleMediationButtonClick() {\r\n    history.push(getTythonAccountSettingPageRoute());\r\n  }\r\n\r\n  function handleAdsTxtCardButtonClick() {\r\n    history.push(getSitesRoute());\r\n  }\r\n\r\n  function handleAdBlockCardButtonClick() {\r\n    history.push(getAdBlocksPageRoute());\r\n  }\r\n\r\n  const displaySetupCards = (cards: ISetupCard[]) => {\r\n    return cards.filter((card) => !card.hidden).map((card, index) => <SetupCard card={card} key={index} />);\r\n  };\r\n\r\n  return (\r\n    <>\r\n      {isSetupDone ? (\r\n        <div>\r\n          <h2 className={headerSection}>{formatMessage(messages.recommendationsTitle)}</h2>\r\n          <div className={cardsContainer}>{displaySetupCards(recommendationsCards)}</div>\r\n        </div>\r\n      ) : null}\r\n    </>\r\n  );\r\n});\r\n","import { defineMessages } from 'react-intl';\r\n\r\nexport default defineMessages({\r\n  notFound: {\r\n    id: 'home.notFound',\r\n    defaultMessage: 'No home found for this account.',\r\n  },\r\n  noPublisherSelected: {\r\n    id: 'home.noPublisherSelected',\r\n    defaultMessage: 'You arrived in an invalid state, please report.',\r\n  },\r\n  home: {\r\n    id: 'home',\r\n    defaultMessage: 'Home',\r\n  },\r\n  welcome: {\r\n    id: 'home.welcome',\r\n    defaultMessage: 'Welcome to {appName}',\r\n  },\r\n  showMore: {\r\n    id: 'home.showMore',\r\n    defaultMessage: 'Show more',\r\n  },\r\n  contentDialog: {\r\n    id: 'home.dialog.content',\r\n    defaultMessage: \"We're happy you're here! Now you can connect with your websites and create ads!\",\r\n  },\r\n  buttonDialog: {\r\n    id: 'home.dialog.button',\r\n    defaultMessage: 'Get started',\r\n  },\r\n});\r\n","import { getTheme, IStackTokens, mergeStyleSets } from '@fluentui/react';\r\nimport { ICommonStyleProps } from '../../../../types';\r\nimport { noPointerEvents } from '../../../../utils/GlobalStyleUtils';\r\nimport { BreakPoints, IPubcenterTheme } from './../../../../../theme';\r\n\r\ntype StyleProperties = 'buttonStyle' | 'disabledLink' | 'homepageCards' | 'placeholder';\r\ntype ManagePageStyles = Record<StyleProperties, string>;\r\nconst { ResponsiveMedium, ResponsiveSmall } = BreakPoints;\r\n\r\nexport const getStyles = (props: ICommonStyleProps): ManagePageStyles => {\r\n  return mergeStyleSets({\r\n    buttonStyle: {\r\n      background: 'linear-gradient(88.27deg, #077BE6 -0.89%, #0A85E7 48.14%, #20AAE7 99.27%)',\r\n    },\r\n    disabledLink: {\r\n      ...noPointerEvents,\r\n    },\r\n    homepageCards: {\r\n      display: 'grid',\r\n      gridTemplateColumns: '49.5% 49.5%',\r\n      columnGap: '1%',\r\n      rowGap: '2%',\r\n      [ResponsiveMedium]: {\r\n        gridTemplateColumns: '100%',\r\n        columnGap: '0',\r\n      },\r\n      [ResponsiveSmall]: {\r\n        gridTemplateColumns: '100%',\r\n        columnGap: '0',\r\n      },\r\n    },\r\n    placeholder: {\r\n      height: '100%',\r\n    },\r\n  });\r\n};\r\n\r\nexport function getClassNames<PropType>(props?: PropType): ManagePageStyles {\r\n  return getStyles({ theme: getTheme(), ...props });\r\n}\r\n\r\nexport function getStackTokens(): IStackTokens {\r\n  const theme = (getTheme() as unknown) as IPubcenterTheme;\r\n  const spacing = theme.spacing;\r\n\r\n  return { childrenGap: spacing.size12 };\r\n}\r\n","import { Stack } from '@fluentui/react';\r\nimport React, { useEffect } from 'react';\r\nimport { PublisherTier, getAppStore, onUserFirstTime } from '../../../../@data';\r\nimport { APP_NAME_NEW, TYTHON_DOMAIN_REDIRECTION_CACHE_KEY, WELCOME_SEND_FLAG } from '../../../../constants/AppConstants';\r\nimport { EmptyLayout } from '../../../../layout/EmptyLayout/EmptyLayout';\r\nimport { injectIntlWithObserver } from '../../../../utils';\r\nimport { sendWelcomeToPubcenterEmail } from '../../../partner-management/User/@data/actions';\r\nimport { triggerOneVetAPIs } from '../@data/actions';\r\nimport { setIsFRECardShown } from '../@data/mutatorActions';\r\nimport { getStore } from '../@data/store/store';\r\nimport { Announcements } from '../components/Announcements/Announcements';\r\nimport FAQSection from '../components/FAQSection/FAQSection';\r\nimport { FREContainer } from '../components/FRECards/FREContainer';\r\nimport { GettingStarted } from '../components/GettingStarted/GettingStarted';\r\nimport PerformanceSection from '../components/PerformanceSection/PerformanceSection';\r\nimport { RecommendationsSection } from '../components/RecommendationsSection/RecommendationsSection';\r\nimport ResourceSection from '../components/ResourcesSection/ResourcesSection';\r\nimport messages from './ManagePage.messages';\r\nimport { getStackTokens } from './ManagePage.styles';\r\n\r\nexport const ManagePage = injectIntlWithObserver(function ManagePageComponent(props) {\r\n  const { formatMessage } = props.intl;\r\n  const { isFirstTimeUser, publisher } = getAppStore();\r\n\r\n  useEffect(() => {\r\n    if (sessionStorage.getItem(WELCOME_SEND_FLAG) === 'true' && publisher && publisher.publisherTier === PublisherTier.SelfServe3rdParty) {\r\n      sendWelcomeToPubcenterEmail();\r\n    }\r\n  }, [publisher]);\r\n\r\n  useEffect(() => {\r\n    triggerOneVetAPIs(isFirstTimeUser ? 'signup' : 'login');\r\n    setIsFRECardShown(isFirstTimeUser || sessionStorage.getItem(TYTHON_DOMAIN_REDIRECTION_CACHE_KEY) === 'true');\r\n    setTimeout(() => {\r\n      sessionStorage.setItem(TYTHON_DOMAIN_REDIRECTION_CACHE_KEY, 'false');\r\n      onUserFirstTime(false);\r\n    }, 1000);\r\n  }, [isFirstTimeUser]);\r\n\r\n  return (\r\n    <>\r\n      {getStore().isFRECardShown && <FREContainer />}\r\n      <EmptyLayout headingTitle={formatMessage(messages.welcome, { appName: APP_NAME_NEW })}>\r\n        <Stack enableScopedSelectors tokens={getStackTokens()}>\r\n          <GettingStarted />\r\n          <PerformanceSection />\r\n          <RecommendationsSection />\r\n          <Announcements />\r\n          <FAQSection />\r\n          <ResourceSection />\r\n        </Stack>\r\n      </EmptyLayout>\r\n    </>\r\n  );\r\n});\r\n","import React, { useEffect } from 'react';\r\nimport { InjectedIntlProps, injectIntl } from 'react-intl';\r\nimport { Route, RouteComponentProps, Switch } from 'react-router-dom';\r\nimport { LayoutMode, onLayoutChanged } from '../../../@data';\r\nimport { RouteName } from '../@data';\r\nimport { fetchPublisherEvaluationStatusAction, onCurrentRouteChanged } from '../@data/actions';\r\nimport { ManagePage } from './Manage/ManagePage';\r\n\r\nexport const HomePage = injectIntl(function HomePageComponent(props: RouteComponentProps & InjectedIntlProps): JSX.Element {\r\n  useEffect(() => {\r\n    onLayoutChanged(LayoutMode.Default);\r\n    onCurrentRouteChanged(RouteName.home, props.intl.formatMessage);\r\n    fetchPublisherEvaluationStatusAction({ cache: false });\r\n    // eslint-disable-next-line react-hooks/exhaustive-deps\r\n  }, []);\r\n\r\n  return (\r\n    <Switch>\r\n      <Route exact path={props.match.url} component={ManagePage} />\r\n    </Switch>\r\n  );\r\n});\r\n","import {\r\n  classNamesFunction,\r\n  ICalloutContentStyleProps,\r\n  ICalloutContentStyles,\r\n  IStyle,\r\n  IStyleFunctionOrObject,\r\n  ITheme,\r\n} from '@fluentui/react';\r\nimport { IPubcenterTheme } from '../../../theme';\r\n\r\nexport interface IHoverStyleProps {\r\n  theme: ITheme;\r\n}\r\n\r\nexport interface IHoverStyles {\r\n  hoverCard: IStyleFunctionOrObject<ICalloutContentStyleProps, ICalloutContentStyles>;\r\n  footer: IStyle;\r\n  primaryButton: IStyle;\r\n  defaultButton: IStyle;\r\n}\r\n\r\nexport const getStyles = (props: IHoverStyleProps): IHoverStyles => {\r\n  const theme = (props.theme as unknown) as IPubcenterTheme;\r\n  const { palette, spacing } = theme;\r\n\r\n  return {\r\n    hoverCard: {\r\n      beakCurtain: {\r\n        background: palette.themePrimary,\r\n      },\r\n      root: {\r\n        color: palette.white,\r\n        padding: spacing.size18,\r\n      },\r\n    },\r\n    footer: {\r\n      display: 'flex',\r\n      alignItems: 'center',\r\n      justifyContent: 'space-between',\r\n      marginTop: spacing.size12,\r\n    },\r\n    primaryButton: {\r\n      backgroundColor: palette.white,\r\n      color: palette.themePrimary,\r\n      '&:hover': {\r\n        backgroundColor: palette.themePrimary,\r\n        color: palette.white,\r\n        borderColor: palette.white,\r\n      },\r\n      '&:focus': {\r\n        backgroundColor: palette.themePrimary,\r\n        color: palette.white,\r\n        borderColor: palette.white,\r\n      },\r\n    },\r\n    defaultButton: {\r\n      backgroundColor: palette.themePrimary,\r\n      color: palette.white,\r\n      borderColor: palette.white,\r\n      marginRight: spacing.size8,\r\n      '&:hover': {\r\n        backgroundColor: palette.white,\r\n        color: palette.themePrimary,\r\n      },\r\n      '&:focus': {\r\n        backgroundColor: palette.white,\r\n        color: palette.themePrimary,\r\n      },\r\n    },\r\n  };\r\n};\r\n\r\nexport const getClassNames = classNamesFunction<IHoverStyleProps, IHoverStyles>();\r\n","import { Callout, DefaultButton, PrimaryButton, getTheme } from '@fluentui/react';\r\nimport React, { useState } from 'react';\r\nimport { InjectedIntlProps, injectIntl } from 'react-intl';\r\nimport AppMessages from '../../App.messages';\r\nimport { getClassNames, getStyles } from './styles';\r\n\r\nexport interface ITutorialCalloutProps {\r\n  steps: ITutorialCalloutSteps[];\r\n  isOpen: boolean;\r\n  onChangeState: () => void;\r\n}\r\n\r\nexport interface ITutorialCalloutSteps {\r\n  containerId: string;\r\n  isContentReady: boolean;\r\n  content: JSX.Element;\r\n  contentWidth?: number;\r\n  backgroundColor?: string;\r\n}\r\n\r\nconst TutorialCallout = injectIntl((props: ITutorialCalloutProps & InjectedIntlProps) => {\r\n  const [tutorialStep, setTutorialStep] = useState(0);\r\n  const {\r\n    isOpen,\r\n    onChangeState,\r\n    steps,\r\n    intl: { formatMessage },\r\n  } = props;\r\n  const { containerId, content, contentWidth, backgroundColor } = steps[tutorialStep];\r\n  const { footer, primaryButton, defaultButton } = getClassNames(getStyles, { theme: getTheme() });\r\n\r\n  if (!isOpen) {\r\n    return <></>;\r\n  }\r\n\r\n  const onUpdateTutorialStep = (step: number) => {\r\n    if (steps[step].isContentReady === true) {\r\n      setTutorialStep(step);\r\n    }\r\n  };\r\n\r\n  const onDismissTutorialCallout = () => {\r\n    onChangeState();\r\n    setTutorialStep(0);\r\n  };\r\n\r\n  return (\r\n    <Callout\r\n      role=\"dialog\"\r\n      gapSpace={0}\r\n      backgroundColor={backgroundColor ?? '#0078D4'}\r\n      calloutWidth={contentWidth ?? 400}\r\n      target={`#${containerId}`}\r\n      shouldDismissOnWindowFocus={true}\r\n      onDismiss={() => onDismissTutorialCallout()}\r\n      setInitialFocus\r\n      styles={getStyles({ theme: getTheme() }).hoverCard}\r\n    >\r\n      {content}\r\n      {steps.length > 1 && (\r\n        <div className={footer}>\r\n          <span>\r\n            {tutorialStep + 1} {formatMessage(AppMessages.of)} {steps.length}\r\n          </span>\r\n          <div>\r\n            {tutorialStep > 0 && (\r\n              <DefaultButton className={defaultButton} onClick={() => onUpdateTutorialStep(tutorialStep - 1)}>\r\n                {formatMessage(AppMessages.previous)}\r\n              </DefaultButton>\r\n            )}\r\n            {tutorialStep === steps.length - 1 && (\r\n              <PrimaryButton className={primaryButton} onClick={() => onDismissTutorialCallout()}>\r\n                {formatMessage(AppMessages.finish)}\r\n              </PrimaryButton>\r\n            )}\r\n          </div>\r\n          {tutorialStep < steps.length - 1 && (\r\n            <PrimaryButton className={primaryButton} onClick={() => onUpdateTutorialStep(tutorialStep + 1)}>\r\n              {formatMessage(AppMessages.next)}\r\n            </PrimaryButton>\r\n          )}\r\n        </div>\r\n      )}\r\n    </Callout>\r\n  );\r\n});\r\n\r\nexport default TutorialCallout;\r\n","import { defineMessages } from 'react-intl';\r\n\r\nexport default defineMessages({\r\n  statusCmdBtnAriaLabel: {\r\n    id: 'gridPage.clarityStatusCmdBtnAriaLabel',\r\n    defaultMessage: 'Click to display clarity status',\r\n  },\r\n  update: {\r\n    id: 'property.update',\r\n    defaultMessage: 'Update property',\r\n  },\r\n  sidePanelLabel: {\r\n    id: 'property.sidePanelLabel',\r\n    defaultMessage: 'Clarity',\r\n  },\r\n  sidePanelDescription: {\r\n    id: 'property.sidePanelDescription',\r\n    defaultMessage: 'To connect the Clarity project associated with property ID {id}, turn on the toggle to enable Clarity.',\r\n  },\r\n  sidePanelTC: {\r\n    id: 'property.sidePanelTC',\r\n    defaultMessage:\r\n      'Microsoft Clarity is a free behavioral analysis tool that provides insights into how customers interact with your website. By enabling Clarity tracking, you agree to the Clarity terms of use and privacy policy. Clarity should not be used on sites that contain sensitive data, including information related to government, customer health care, or customer financial services.',\r\n  },\r\n  sidePanelUpdateProperty: {\r\n    id: 'property.sidePanelUpdateProperty',\r\n    defaultMessage: 'Update property',\r\n  },\r\n});\r\n","import { DefaultButton, getTheme, IconButton, Panel, PanelType, PrimaryButton } from '@fluentui/react';\r\nimport React from 'react';\r\nimport { InjectedIntlProps } from 'react-intl';\r\nimport AppMessages from '../../../../../../App.messages';\r\nimport { FormState } from '../../../../../../components/Form';\r\nimport { injectIntlAndObserver } from '../../../../../../utils';\r\nimport { getCreatePropertyStore } from '../../../Create/__data__/store/store';\r\nimport ClaritySection from '../../../Create/variations/CreateNonTythonProperty/components/ClarityFormSection';\r\nimport { setClarityPanelVisibility } from '../../__data__/mutatorActions';\r\nimport { onClarityUpdate } from '../../__data__/orchestrators/updateClarity';\r\nimport { getGridPropertyStore } from '../../__data__/store/store';\r\nimport messages from './messages';\r\nimport { getStyles } from './styles';\r\n\r\nconst ClarityPanel = injectIntlAndObserver<InjectedIntlProps>(\r\n  ({ intl }): JSX.Element => {\r\n    const {\r\n      active: { clarity },\r\n    } = getCreatePropertyStore();\r\n    const { isPanelOpen, selectedPropertyId } = getGridPropertyStore();\r\n    const { originalClarityId, clarityId } = clarity || {};\r\n    const { panelButton, panelDescriptor, panelAgreement } = getStyles({ theme: getTheme() });\r\n    const { formatMessage } = intl;\r\n\r\n    const isDisabled = (originalClarityId?.length === 0 && clarityId?.length === 0) || originalClarityId === clarityId;\r\n\r\n    return (\r\n      <Panel\r\n        isOpen={isPanelOpen}\r\n        type={PanelType.medium}\r\n        onDismiss={() => setClarityPanelVisibility(false)}\r\n        headerText={formatMessage(messages.sidePanelLabel)}\r\n        closeButtonAriaLabel={formatMessage(AppMessages.panelCloseButtonAriaDesc)}\r\n        isFooterAtBottom={true}\r\n        onRenderFooterContent={() => {\r\n          return (\r\n            <div className={panelButton}>\r\n              <PrimaryButton\r\n                onClick={onClarityUpdate}\r\n                text={formatMessage(messages.update)}\r\n                ariaDescription={formatMessage(messages.update)}\r\n                disabled={isDisabled}\r\n              />\r\n              <DefaultButton onClick={() => setClarityPanelVisibility(false)} text={formatMessage(AppMessages.cancel)} />\r\n            </div>\r\n          );\r\n        }}\r\n      >\r\n        <div className={panelDescriptor}>{formatMessage(messages.sidePanelDescription, { id: selectedPropertyId })}</div>\r\n\r\n        <ClaritySection mode={FormState.Edit} clarityConfigs={clarity} isShownInPanel={true} />\r\n\r\n        <div className={panelAgreement}>\r\n          <IconButton iconProps={{ iconName: 'Info' }} />\r\n          <div>{formatMessage(messages.sidePanelTC)}</div>\r\n        </div>\r\n      </Panel>\r\n    );\r\n  }\r\n);\r\n\r\nexport default ClarityPanel;\r\n","import { mergeStyleSets } from '@fluentui/react';\r\nimport { IPubcenterSpacing } from '../../../../../../../theme';\r\nimport { IClarityPanelStyle, IClarityPanelStyleProps } from './types';\r\n\r\nexport const getStyles = (props: IClarityPanelStyleProps): IClarityPanelStyle => {\r\n  const { theme } = props;\r\n  const spacing = theme.spacing as IPubcenterSpacing;\r\n\r\n  return mergeStyleSets({\r\n    panelButton: {\r\n      display: 'flex',\r\n      gap: spacing.size8,\r\n    },\r\n    panelAgreement: {\r\n      width: 'inherit',\r\n      display: 'flex',\r\n      alignItems: 'center',\r\n      backgroundColor: theme.palette.themeLighterAlt,\r\n      fontSize: theme.fonts.small.fontSize,\r\n      padding: `${spacing.size12} ${spacing.size6}`,\r\n      marginTop: spacing.size12,\r\n    },\r\n    panelDescriptor: {\r\n      marginTop: spacing.size12,\r\n      fontSize: theme.fonts.small.fontSize,\r\n    },\r\n    panelPendingResendButton: {\r\n      textDecoration: 'underline',\r\n      color: theme.palette.blue,\r\n      cursor: 'Pointer',\r\n      paddingRight: spacing.size2,\r\n      paddingLeft: spacing.size2,\r\n    },\r\n  });\r\n};\r\n","import { Panel, PanelType } from '@fluentui/react';\r\nimport React from 'react';\r\nimport AppMessages from '../../../../../../App.messages';\r\nimport { IRouterWithIntl, injectIntlAndObserver } from '../../../../../../utils';\r\nimport { PropertyScriptPage } from '../../../Create/variations/CreateTythonProperty/components/ScriptPage';\r\nimport { setCodePanelVisibility } from '../../__data__/mutatorActions';\r\nimport { getGridPropertyStore } from '../../__data__/store/store';\r\n\r\nexport interface ICodePanelProps extends IRouterWithIntl {}\r\n\r\nexport const CodePanel = injectIntlAndObserver(function CodePanelComponent(props: ICodePanelProps) {\r\n  const { isCodePanelOpen, selectedPropertyId, clarityPanel } = getGridPropertyStore();\r\n\r\n  return (\r\n    <Panel\r\n      isOpen={isCodePanelOpen}\r\n      type={PanelType.custom}\r\n      customWidth={'900px'}\r\n      onDismiss={() => {\r\n        setCodePanelVisibility(false);\r\n      }}\r\n      isLightDismiss\r\n      closeButtonAriaLabel={props.intl.formatMessage(AppMessages.close)}\r\n    >\r\n      <PropertyScriptPage {...props} isShownInPanel={true} siteId={selectedPropertyId} clarityStatus={clarityPanel?.clarityStatus} />\r\n    </Panel>\r\n  );\r\n});\r\n","import { defineMessages } from 'react-intl';\r\n\r\nexport default defineMessages({\r\n  create: {\r\n    id: 'property.create',\r\n    defaultMessage: 'Create Property',\r\n  },\r\n  siteCreate: {\r\n    id: 'property.create',\r\n    defaultMessage: 'Create Site',\r\n  },\r\n  update: {\r\n    id: 'property.update',\r\n    defaultMessage: 'Update property',\r\n  },\r\n  notFound: {\r\n    id: 'property.notFound',\r\n    defaultMessage: 'No properties found for this account, create one.',\r\n  },\r\n  siteNotFound: {\r\n    id: 'property.notFound',\r\n    defaultMessage: 'No sites found for this account, create one.',\r\n  },\r\n  noPublisherSelected: {\r\n    id: 'property.noPublisherSelected',\r\n    defaultMessage: 'A publisher isn’t selected yet. To start managing properties, search for a publisher..',\r\n  },\r\n  deactivateTitle: {\r\n    id: 'property.deactivateTitle',\r\n    defaultMessage: 'Do you want to deactivate property(s)?',\r\n  },\r\n  deactivateSiteTitle: {\r\n    id: 'property.deactivateTitle',\r\n    defaultMessage: 'Do you want to deactivate site(s)?',\r\n  },\r\n  name: {\r\n    id: 'property.name',\r\n    defaultMessage: 'Property name',\r\n  },\r\n  siteName: {\r\n    id: 'property.name',\r\n    defaultMessage: 'Site Name',\r\n  },\r\n  id: {\r\n    id: 'property.id',\r\n    defaultMessage: 'Property ID',\r\n  },\r\n  siteId: {\r\n    id: 'property.id',\r\n    defaultMessage: 'Site ID',\r\n  },\r\n  url: {\r\n    id: 'property.url',\r\n    defaultMessage: 'Website URL',\r\n  },\r\n  approvalStatus: {\r\n    id: 'property.approvalStatus',\r\n    defaultMessage: 'Approval status',\r\n  },\r\n  issues: {\r\n    id: 'property.issues',\r\n    defaultMessage: 'Issues',\r\n  },\r\n  properties: {\r\n    id: 'property.properties',\r\n    defaultMessage: 'Properties',\r\n  },\r\n  sites: {\r\n    id: 'property.sites',\r\n    defaultMessage: 'Sites',\r\n  },\r\n  sitesCannotServeMessage: {\r\n    id: 'property.sitesCannotServeMessage',\r\n    defaultMessage: 'Sites cannot serve ads until your profile is submitted and approved {learn}',\r\n  },\r\n  clarityStatus: {\r\n    id: 'property.clarityStatus',\r\n    defaultMessage: 'Clarity status',\r\n  },\r\n  clarityPending: {\r\n    id: 'property.clarityPending',\r\n    defaultMessage: 'Pending',\r\n  },\r\n  clarityPendingApproval: {\r\n    id: 'property.clarityPendingApproval',\r\n    defaultMessage: 'Pending Approval',\r\n  },\r\n  clarityRejected: {\r\n    id: 'property.clarityRejected',\r\n    defaultMessage: 'Rejected',\r\n  },\r\n  clarityNotConnected: {\r\n    id: 'property.clarityNotConnected',\r\n    defaultMessage: 'Not Connected',\r\n  },\r\n  clarityApproved: {\r\n    id: 'property.clarityApproved',\r\n    defaultMessage: 'Approved',\r\n  },\r\n  clarityExpired: {\r\n    id: 'property.clarityExpired',\r\n    defaultMessage: 'Expired',\r\n  },\r\n  clarityCancelled: {\r\n    id: 'property.clarityCancelled',\r\n    defaultMessage: 'Cancelled',\r\n  },\r\n  clarityNotFound: {\r\n    id: 'property.clarityNotFound',\r\n    defaultMessage: 'Not Found',\r\n  },\r\n  clarityLinkStatusCalloutTitle: {\r\n    id: 'property.clarityLinkStatusCalloutTitle',\r\n    defaultMessage: 'Microsoft Clarity Project',\r\n  },\r\n  clarityLinkStatusCalloutProjectStatus: {\r\n    id: 'property.clarityLinkStatusCalloutTitle',\r\n    defaultMessage: '{id}: Link request {status}',\r\n  },\r\n  clarityLinkPendingStatus: {\r\n    id: 'property.clarityLinkPendingStatus',\r\n    defaultMessage: 'Pending Approval',\r\n  },\r\n  clarityLinkRejectedStatus: {\r\n    id: 'property.clarityLinkRejectedStatus',\r\n    defaultMessage: ' Request rejected',\r\n  },\r\n  clarityLinkCancelledStatus: {\r\n    id: 'property.clarityLinkCancelledStatus',\r\n    defaultMessage: 'Cancelled',\r\n  },\r\n  clarityLinkExpiredStatus: {\r\n    id: 'property.clarityLinkExpiredStatus',\r\n    defaultMessage: 'Request expired',\r\n  },\r\n  clarityLinkPendingStatusCalloutDescription: {\r\n    id: 'property.clarityLinkPendingStatusCalloutDescription',\r\n    defaultMessage: 'Request to link your Clarity project pending on Clarity Admin.',\r\n  },\r\n  clarityLinkRejectStatusCalloutDescription: {\r\n    id: 'property.clarityLinkRejectStatusCalloutDescription',\r\n    defaultMessage: 'Request to connect Clarity project was rejected',\r\n  },\r\n  clarityLinkCancelledStatusCalloutDescription: {\r\n    id: 'property.clarityLinkCancelledStatusCalloutDescription',\r\n    defaultMessage: 'Linked Clarity project does not exist.',\r\n  },\r\n  clarityLinkExpiredStatusCalloutDescription: {\r\n    id: 'property.clarityLinkExpiredStatusCalloutDescription',\r\n    defaultMessage: ' Request to link your Clarity project expired.',\r\n  },\r\n  clarityLinkNotConnectedStatusCalloutDescription: {\r\n    id: 'property.clarityLinkNotConnectedStatusCalloutDescription',\r\n    defaultMessage: 'Request to link your Clarity project. Click below send the link request.',\r\n  },\r\n  clarityLinkNotFoundStatusCalloutDescription: {\r\n    id: 'property.clarityLinkNotFoundStatusCalloutDescription',\r\n    defaultMessage: 'Clarity hasn’t been added to this site. Clarity can be added from site edit screen.',\r\n  },\r\n  clarityLinkStatusCalloutResendAction: {\r\n    id: 'property.clarityLinkStatusCalloutResendAction',\r\n    defaultMessage: 'Resend link request',\r\n  },\r\n  clarityLinkStatusRejected: {\r\n    id: 'property.clarityLinkStatusRejected',\r\n    defaultMessage: 'Link request rejected',\r\n  },\r\n  clarityLinkStatusPendingApproval: {\r\n    id: 'property.clarityLinkStatusPendingApproval',\r\n    defaultMessage: 'Pending Approval',\r\n  },\r\n  clarityProject: {\r\n    id: 'property.clarityProject',\r\n    defaultMessage: 'Clarity project ID',\r\n  },\r\n  clarityProjectInfo: {\r\n    id: 'property.clarityProjectInfo',\r\n    defaultMessage: 'This column shows your bundled Clarity ID.',\r\n  },\r\n  servingStatus: {\r\n    id: 'property.servingStatus',\r\n    defaultMessage: 'Serving status',\r\n  },\r\n  status: {\r\n    id: 'property.status',\r\n    defaultMessage: 'Status',\r\n  },\r\n  actions: {\r\n    id: 'property.actions',\r\n    defaultMessage: 'Actions',\r\n  },\r\n  zeroResultTitleNonTython: {\r\n    id: 'property.titleNonTython',\r\n    defaultMessage: 'No properties yet',\r\n  },\r\n  zeroResultTitle: {\r\n    id: 'property.title',\r\n    defaultMessage: 'No sites yet',\r\n  },\r\n  zeroResultDescription: {\r\n    id: 'property.description',\r\n    defaultMessage: 'You haven’t created any site yet',\r\n  },\r\n  zeroResultDescriptionNonTython: {\r\n    id: 'property.descriptionNonTython',\r\n    defaultMessage: 'You haven’t created any property yet',\r\n  },\r\n  zeroResultcallToAction: {\r\n    id: 'property.callToAction',\r\n    defaultMessage: 'Create site',\r\n  },\r\n  clarityTour: {\r\n    id: 'property.clarityTour',\r\n    defaultMessage: 'Clarity Tour',\r\n  },\r\n  clarityTourSecondPageHeader: {\r\n    id: 'property.clarityTourSecondPageHeader',\r\n    defaultMessage: 'Jump to Clarity with one click',\r\n  },\r\n  clarityTourSecondPageDesc: {\r\n    id: 'property.clarityTourSecondPageDesc',\r\n    defaultMessage: 'When you want to check the site performance in Clarity, clicking on the Clarity project id from here.',\r\n  },\r\n  statusTourFirstPageHeader: {\r\n    id: 'property.statusTourFirstPageHeader',\r\n    defaultMessage: 'Site Status',\r\n  },\r\n  statusTourFirstPageDesc: {\r\n    id: 'property.statusTourFirstPageDesc',\r\n    defaultMessage:\r\n      'This column will show each sites serving status. If you view one of these sites in another context, you can hover or click on the tag to get more information.',\r\n  },\r\n  statusTourSecondPageHeader: {\r\n    id: 'property.statusTourSecondPageHeader',\r\n    defaultMessage: 'Issues',\r\n  },\r\n  statusTourSecondPageDesc: {\r\n    id: 'property.statusTourSecondPageDesc',\r\n    defaultMessage:\r\n      'Any issues with your sites will appear here. Blocking issues are shown with a red dot while non-blocking issues are shown with an orange dot.',\r\n  },\r\n  clarityBenefits: {\r\n    id: 'property.clarityBenefits',\r\n    defaultMessage: 'What more can you do in Clarity:',\r\n  },\r\n  clarityFirstBenefit: {\r\n    id: 'property.clarityFirstBenefit',\r\n    defaultMessage: 'Clarity masks all sensitive content on your site by default. Review your settings',\r\n  },\r\n  claritySecondBenefit: {\r\n    id: 'property.claritySecondBenefit',\r\n    defaultMessage: 'Check our all Clarity features with our',\r\n  },\r\n  claritySecondBenefitRedirection: {\r\n    id: 'property.claritySecondBenefitRedirection',\r\n    defaultMessage: ' live demo',\r\n  },\r\n  clarityThirdBenefit: {\r\n    id: 'property.clarityThirdBenefit',\r\n    defaultMessage: 'Add site and',\r\n  },\r\n  clarityThirdBenefitRedirection: {\r\n    id: 'property.clarityThirdBenefitRedirection',\r\n    defaultMessage: 'privacy disclosures',\r\n  },\r\n  siteServingAds: {\r\n    id: 'property.siteServingAds',\r\n    defaultMessage: 'Site is currently serving ads',\r\n  },\r\n  siteServingAdsWithoutAdsTxt: {\r\n    id: 'property.siteServingAdsWithoutAdsTxt',\r\n    defaultMessage: 'Site performance could be enhanced by adding Ads.txt. {more}',\r\n  },\r\n  siteServingAdsWithoutScript: {\r\n    id: 'property.siteServingAdsWithoutScript',\r\n    defaultMessage: 'Site is ready to show ads. Please add {snippet} in your webpage',\r\n  },\r\n  sitePendingWithApprovedProfile: {\r\n    id: 'property.sitePendingWithApprovedProfile',\r\n    defaultMessage:\r\n      'Your site is being reviewed. The review takes seven business days, and you will be notified by email once the review is approved.',\r\n  },\r\n  sitePendingWithoutApprovedProfile: {\r\n    id: 'property.sitePendingWithoutApprovedProfile',\r\n    defaultMessage: 'Your site review is pending. We will review your site after your profile is approved',\r\n  },\r\n  siteRejected: {\r\n    id: 'property.siteRejected',\r\n    defaultMessage:\r\n      'This site has been rejected. Please make sure that it follows {guidelines}. If you update your site and would like it to be reviewed again, please delete this site and add it to {appName} again as a new site.',\r\n  },\r\n  siteNotServingIssuesHeader: {\r\n    id: 'property.siteNotServingIssuesHeader',\r\n    defaultMessage: 'Issues with this site:',\r\n  },\r\n  siteNotServingPubCenterScriptInActive: {\r\n    id: 'property.siteNotServingPubCenterScriptInActive',\r\n    defaultMessage: 'Script not found',\r\n  },\r\n  siteNotServingSiteIsRejected: {\r\n    id: 'property.siteNotServingSiteIsRejected',\r\n    defaultMessage: 'Site is rejected',\r\n  },\r\n  siteNotServingWithoutAdsTxt: {\r\n    id: 'property.siteNotServingWithoutAdsTxt',\r\n    defaultMessage: 'Ads.txt is not found',\r\n  },\r\n  codeSnippet: {\r\n    id: 'property.codeSnippet',\r\n    defaultMessage: 'code snippet',\r\n  },\r\n  siteApprovalGuideLines: {\r\n    id: 'property.siteApprovalGuideLines',\r\n    defaultMessage: 'site approval guidelines',\r\n  },\r\n  approvalStatusPendingInfo: {\r\n    id: 'property.approvalStatusPendingInfo',\r\n    defaultMessage: 'Pending: Your site is awaiting verification to be approved.',\r\n  },\r\n  approvalStatusApprovalInfo: {\r\n    id: 'property.approvalStatusApprovalInfo',\r\n    defaultMessage: 'Approved: Your site is ready to show ads.',\r\n  },\r\n  approvalStatusRejectedInfo: {\r\n    id: 'property.approvalStatusRejectedInfo',\r\n    defaultMessage: 'Rejected: Your site is reviewed and not approved.',\r\n  },\r\n  approvalStatusInfoHelp: {\r\n    id: 'property.approvalStatusInfoHelp',\r\n    defaultMessage: 'If you need more help, please visit {guidelines} or {support}.',\r\n  },\r\n  approvalStatusInfoGuideLines: {\r\n    id: 'property.approvalStatusInfoGuideLines',\r\n    defaultMessage: 'site approval guidelines',\r\n  },\r\n  approvalStatusInfoSupport: {\r\n    id: 'property.approvalStatusInfoSupport',\r\n    defaultMessage: 'contact support',\r\n  },\r\n  deletePropertyPopupTitle: {\r\n    id: 'property.deletePopupApproval',\r\n    defaultMessage: 'Are you sure you want to delete this site?',\r\n  },\r\n  deletePropertyPopupDescription: {\r\n    id: 'property.deletePopupDescription',\r\n    defaultMessage: 'By deleting this site, you’ll unlink the ad units associated with it',\r\n  },\r\n});\r\n","import { classNamesFunction, FontWeights, IStyle, ITheme } from '@fluentui/react';\r\nimport { IPubcenterTheme } from '../../../../../theme';\r\n\r\nexport interface IManagePageStyleProps {\r\n  theme: ITheme;\r\n}\r\n\r\nexport interface IManagePageStyles {\r\n  redirectionLink: IStyle;\r\n  hoverCardTitle: IStyle;\r\n  hoverCardInfo: IStyle;\r\n  clarityCalloutTitle: IStyle;\r\n  clarityStatusUnderline: IStyle;\r\n  clarityCalloutFooter: IStyle;\r\n  errorMsg: IStyle;\r\n  errorMsgContent: IStyle;\r\n  errorBulletPoint: IStyle;\r\n  warningBulletPoint: IStyle;\r\n  propertyIssuesUnorderedList: IStyle;\r\n}\r\n\r\nexport const getStyles = (props: IManagePageStyleProps): IManagePageStyles => {\r\n  const theme = (props.theme as unknown) as IPubcenterTheme;\r\n  const { fonts, spacing, palette } = theme;\r\n\r\n  return {\r\n    redirectionLink: {\r\n      color: palette.white,\r\n      cursor: 'pointer',\r\n      textDecorationLine: 'underline',\r\n      '&:hover': {\r\n        color: palette.white,\r\n      },\r\n      '&:active': {\r\n        color: palette.white,\r\n      },\r\n      '&:focus': {\r\n        color: palette.white,\r\n      },\r\n    },\r\n    hoverCardTitle: {\r\n      fontSize: fonts.size16.fontSize,\r\n      fontWeight: fonts.size14Medium.fontWeight,\r\n      marginBottom: spacing.size10,\r\n    },\r\n    hoverCardInfo: {\r\n      display: 'flex',\r\n      flexDirection: 'column',\r\n      lineHeight: fonts.size14Medium.lineHeight,\r\n    },\r\n    clarityCalloutTitle: {\r\n      ...fonts.size20,\r\n    },\r\n    clarityCalloutFooter: {\r\n      display: 'flex',\r\n      justifyContent: 'space-between',\r\n    },\r\n    clarityStatusUnderline: {\r\n      borderBottom: `1px dotted ${palette.themePrimary}`,\r\n      width: 'fit-content',\r\n      boxSizing: 'border-box',\r\n    },\r\n    errorMsg: {\r\n      border: `1px solid ${palette.paleChestnut}`,\r\n      borderRadius: spacing.size4,\r\n      marginBottom: spacing.size10,\r\n      i: {\r\n        display: 'flex',\r\n        alignSelf: 'center',\r\n      },\r\n    },\r\n    errorMsgContent: {\r\n      fontSize: fonts.size14.fontSize,\r\n      fontWeight: FontWeights.semibold,\r\n    },\r\n    errorBulletPoint: {\r\n      '&::marker': {\r\n        color: palette.redDark,\r\n      },\r\n    },\r\n    warningBulletPoint: {\r\n      ' &::marker': {\r\n        color: palette.orangeLighter,\r\n      },\r\n    },\r\n    propertyIssuesUnorderedList: {\r\n      margin: 0,\r\n    },\r\n  };\r\n};\r\n\r\nexport const getClassNames = classNamesFunction<IManagePageStyleProps, IManagePageStyles>();\r\n","import { Link, getTheme } from '@fluentui/react';\r\nimport * as React from 'react';\r\nimport { FormattedMessage, MessageValue } from 'react-intl';\r\nimport { PropertyServingConfigs } from '../../../../../@data/store/schema/models/ServingConfigs';\r\nimport { CLARITY_DEMO, CLARITY_PRIVACY_DISCLOSURE } from '../../../../../constants/AppConstants';\r\nimport { ITutorialCalloutSteps } from '../../../../../layout/TutorialCallout';\r\nimport messages from '../messages';\r\nimport { getClassNames, getStyles } from '../styles';\r\n\r\nexport const getClarityTutorialSteps = (\r\n  formatMessage: (messageDescriptor: FormattedMessage.MessageDescriptor, values?: { [key: string]: MessageValue }) => string,\r\n  configs?: PropertyServingConfigs[]\r\n): ITutorialCalloutSteps[] => {\r\n  const styles = getClassNames(getStyles, { theme: getTheme() });\r\n\r\n  return [\r\n    {\r\n      containerId: 'clarityTourIcon',\r\n      content: (\r\n        <div className={styles.hoverCardInfo}>\r\n          <span className={styles.hoverCardTitle}>{formatMessage(messages.clarityTour)}</span>\r\n          <span>{formatMessage(messages.clarityBenefits)}</span>\r\n          <ol>\r\n            <li>{formatMessage(messages.clarityFirstBenefit)}</li>\r\n            <li>\r\n              {formatMessage(messages.claritySecondBenefit)}{' '}\r\n              <Link href={CLARITY_DEMO} target=\"_blank\" rel=\"noreferrer noopener\" className={styles.redirectionLink}>\r\n                {formatMessage(messages.claritySecondBenefitRedirection)}\r\n              </Link>\r\n            </li>\r\n            <li>\r\n              {formatMessage(messages.clarityThirdBenefit)}{' '}\r\n              <Link href={CLARITY_PRIVACY_DISCLOSURE} target=\"_blank\" rel=\"noreferrer noopener\" className={styles.redirectionLink}>\r\n                {formatMessage(messages.clarityThirdBenefitRedirection)}\r\n              </Link>\r\n            </li>\r\n          </ol>\r\n        </div>\r\n      ),\r\n      isContentReady: true,\r\n    },\r\n    {\r\n      containerId: 'clarityProjectId',\r\n      content: (\r\n        <div className={styles.hoverCardInfo}>\r\n          <span className={styles.hoverCardTitle}>{formatMessage(messages.clarityTourSecondPageHeader)}</span>\r\n          <span>{formatMessage(messages.clarityTourSecondPageDesc)}</span>\r\n        </div>\r\n      ),\r\n      isContentReady: (configs && configs?.length > 0 && configs.some((config) => config.clarityConfig?.clarityId !== undefined)) || false,\r\n    },\r\n  ];\r\n};\r\n","import { Model } from '../../../../../../../@data';\r\nimport { ClarityStatus } from '../../../../../../../@data/store/schema/enums/ClarityStatus';\r\nimport { isTythonSelfServeUser } from '../../../../../../../@data/utils/checkUserType';\r\nimport { CommandBarActions, Direction, GridSelectionMode, IGridPageCommandBarItemProps } from '../../../../../../../layout/GridPageV2';\r\nimport { onClarityChanged } from '../../../../Create/__data__/mutatorActions';\r\nimport { setClarityPanelVisibility, setSelectedPropertyId } from '../../../__data__/mutatorActions';\r\nimport messages from '../messages';\r\nimport { IClarityParams } from '../types';\r\n\r\nexport const getClarityCommandBarItems = (selectedItems: () => Model[], formatMessage): IGridPageCommandBarItemProps[] => {\r\n  if (isTythonSelfServeUser()) {\r\n    return [];\r\n  }\r\n\r\n  const clarityItem = {\r\n    key: CommandBarActions.clarity,\r\n    name: formatMessage(messages.sidePanelLabel),\r\n    iconProps: {\r\n      iconName: 'AddLink',\r\n    },\r\n    ariaLabel: formatMessage(messages.statusCmdBtnAriaLabel),\r\n    placement: { direction: Direction.after },\r\n    onClick: () => {\r\n      const selectedItem = selectedItems();\r\n      /* tslint:disable:no-string-literal */\r\n      if (selectedItem && selectedItem[0]['id']) {\r\n        const status: ClarityStatus = ClarityStatus[selectedItem[0]['clarityStatus']];\r\n        const clarityId: string = selectedItem[0]['clarityProjectId'];\r\n\r\n        const clarityPanelDisplayParams: IClarityParams = {\r\n          clarityLinkingEnabled: status === ClarityStatus.NotConnected ? false : true,\r\n          clarityStatus: status || ClarityStatus.Approved,\r\n          clarityId: clarityId ? clarityId : '',\r\n          originalClarityId: clarityId ? clarityId : '',\r\n          clarityEdit: status === ClarityStatus.Approved || status === undefined ? false : true,\r\n        };\r\n        setSelectedPropertyId(selectedItem[0]['id'].toString());\r\n        onClarityChanged(clarityPanelDisplayParams);\r\n        setClarityPanelVisibility(true);\r\n      }\r\n    },\r\n    selectionModes: [GridSelectionMode.Single],\r\n    // disabled: !hasCreateAccess(params.accessPermission),\r\n  };\r\n\r\n  return [clarityItem];\r\n};\r\n","import { isTythonSelfServeUser } from '../../../../../@data';\r\nimport { FilterType } from '../../../../../components/GridFilter/GridFilter.types';\r\nimport { IFilterItem } from '../../../../../layout/GridPageV2';\r\nimport messages from '../messages';\r\n\r\nexport const getFilterItems = (formatMessage): IFilterItem[] => {\r\n  const tythonFilters: IFilterItem[] = [\r\n    { columnName: 'id', filterName: formatMessage(messages.siteId), filterType: FilterType.relational },\r\n    { columnName: 'name', filterName: formatMessage(messages.siteName), filterType: FilterType.string },\r\n    { columnName: 'url', filterName: formatMessage(messages.url), filterType: FilterType.string },\r\n    // {\r\n    //   columnName: 'status',\r\n    //   filterName: formatMessage(AppMessages.status),\r\n    //   filterType: FilterType.custom,\r\n    //   filterOptions: [\r\n    //     { key: 'Active', text: formatMessage(AppMessages.statusActive) },\r\n    //     { key: 'Inactive', text: formatMessage(AppMessages.statusInactive) },\r\n    //   ] as IDropdownOption[],\r\n    // },\r\n  ];\r\n\r\n  const nonTythonFilters: IFilterItem[] = [];\r\n\r\n  return isTythonSelfServeUser() ? tythonFilters : nonTythonFilters;\r\n};\r\n","import { Model, isTythonSelfServeUser } from '../../../../../@data';\r\nimport { CommandBarActions, IBuildCommandBarProps } from '../../../../../layout/GridPageV2';\r\nimport { getTythonSiteCreatePageRoute } from '../../../../../utils/routeUtils';\r\nimport { setPropertiesFetching } from '../__data__/mutatorActions';\r\nimport { getGridPropertyStore } from '../__data__/store/store';\r\nimport { getClarityCommandBarItems } from '../components/ClarityPanel/utils/getCommandBarItems';\r\nimport messages from '../messages';\r\nimport { getFilterItems } from './getFilterItems';\r\n\r\nexport function getCommandBarItems(formatMessage): IBuildCommandBarProps<Model> | undefined {\r\n  const { data, isLoading } = getGridPropertyStore();\r\n\r\n  const onUpdatePropertyEnd = () => setPropertiesFetching(false);\r\n  const nonTythonItems: IBuildCommandBarProps<Model> | undefined =\r\n    (data && data.length !== 0) || isLoading\r\n      ? {\r\n          primaryButtonLabel: messages.create,\r\n          includeActions: [CommandBarActions.new],\r\n          includeFarActions: [\r\n            CommandBarActions.searchBox,\r\n            CommandBarActions.edit,\r\n            CommandBarActions.activate,\r\n            CommandBarActions.deactivate,\r\n            CommandBarActions.delete,\r\n            CommandBarActions.download,\r\n            CommandBarActions.modifyColumns,\r\n            CommandBarActions.clarity,\r\n          ],\r\n          getCustomCommandBarItems: (getSelectedItems) => getClarityCommandBarItems(getSelectedItems, formatMessage),\r\n          filterItems: getFilterItems(formatMessage),\r\n        }\r\n      : undefined;\r\n\r\n  const tythonItems: IBuildCommandBarProps<Model> | undefined =\r\n    (data && data.length !== 0) || isLoading\r\n      ? {\r\n          primaryButtonLabel: messages.siteCreate,\r\n          primaryButtonUrl: getTythonSiteCreatePageRoute(),\r\n          includeActions: [CommandBarActions.new],\r\n          includeFarActions: [\r\n            CommandBarActions.searchBox,\r\n            CommandBarActions.addFilter,\r\n            CommandBarActions.edit,\r\n            // CommandBarActions.activate,\r\n            // CommandBarActions.deactivate,\r\n            CommandBarActions.delete,\r\n            CommandBarActions.download,\r\n            CommandBarActions.modifyColumns,\r\n          ],\r\n          onDeactivateDialogDismiss: onUpdatePropertyEnd,\r\n          filterItems: getFilterItems(formatMessage),\r\n          deleteLabels: {\r\n            title: messages.deletePropertyPopupTitle,\r\n            description: messages.deletePropertyPopupDescription,\r\n          },\r\n        }\r\n      : undefined;\r\n\r\n  return isTythonSelfServeUser() ? tythonItems : nonTythonItems;\r\n}\r\n","import { Link } from '@fluentui/react';\r\nimport React from 'react';\r\nimport { FormattedMessage, MessageValue } from 'react-intl';\r\nimport { AdsTxtStatus, Property } from '../../../../../@data';\r\nimport AppMessages from '../../../../../App.messages';\r\nimport { ADS_DOT_TEXT_HELP_URL, APP_NAME_NEW, CONNECT_SITE_HELP_URL } from '../../../../../constants/AppConstants';\r\nimport { setCodePanelVisibility } from '../__data__/mutatorActions';\r\nimport messages from '../messages';\r\n\r\ntype Statuses = {\r\n  [key: string]: Status;\r\n};\r\n\r\ntype Status = {\r\n  defaultMessage: JSX.Element | string | null;\r\n  issues: Issues;\r\n};\r\n\r\ntype Issues = Array<{ type: string; isActive: boolean; message: JSX.Element | string }>;\r\n\r\nexport const getServingStatusCalloutContent = (\r\n  formatMessage: (messageDescriptor: FormattedMessage.MessageDescriptor, values?: { [key: string]: MessageValue }) => string,\r\n  isPublisherRejected: boolean,\r\n  item: Property\r\n): JSX.Element | null => {\r\n  if (item === undefined || item.servingConfig === undefined) {\r\n    return null;\r\n  }\r\n\r\n  const { servingStatus, scriptStatus, adsDotTxtStatus } = item.servingConfig;\r\n\r\n  const toolTipContent: Statuses = {\r\n    Serving: {\r\n      defaultMessage: formatMessage(messages.siteServingAds),\r\n      issues: [\r\n        {\r\n          type: 'noAdsTxt',\r\n          isActive: (adsDotTxtStatus && AdsTxtStatus[adsDotTxtStatus.toString()] === AdsTxtStatus.NotFound) || false,\r\n          message: (\r\n            <FormattedMessage\r\n              {...messages.siteServingAds}\r\n              values={{\r\n                more: (\r\n                  <Link href={ADS_DOT_TEXT_HELP_URL} target=\"_blank\" rel=\"noreferrer noopener\">\r\n                    {formatMessage(AppMessages.readMore)}\r\n                  </Link>\r\n                ),\r\n              }}\r\n            />\r\n          ),\r\n        },\r\n        {\r\n          type: 'noScript',\r\n          isActive: scriptStatus === false,\r\n          message: (\r\n            <FormattedMessage\r\n              {...messages.siteServingAdsWithoutScript}\r\n              values={{\r\n                snippet: (\r\n                  <Link\r\n                    onClick={() => setCodePanelVisibility(true, item?.id.toString(), item?.servingConfig?.clarityConfig?.clarityStatus)}\r\n                  >\r\n                    {formatMessage(messages.codeSnippet)}\r\n                  </Link>\r\n                ),\r\n              }}\r\n            />\r\n          ),\r\n        },\r\n      ],\r\n    },\r\n    Pending: {\r\n      defaultMessage: null,\r\n      issues: [\r\n        {\r\n          type: 'siteReview',\r\n          isActive: isPublisherRejected === true,\r\n          message: formatMessage(messages.sitePendingWithApprovedProfile),\r\n        },\r\n        {\r\n          type: 'domainReview',\r\n          isActive: isPublisherRejected === false,\r\n          message: formatMessage(messages.sitePendingWithoutApprovedProfile),\r\n        },\r\n      ],\r\n    },\r\n    NotServing: {\r\n      defaultMessage: (\r\n        <FormattedMessage\r\n          {...messages.siteRejected}\r\n          values={{\r\n            guidelines: (\r\n              <Link href={CONNECT_SITE_HELP_URL} target=\"_blank\" rel=\"noreferrer noopener\">\r\n                {formatMessage(messages.siteApprovalGuideLines)}\r\n              </Link>\r\n            ),\r\n            appName: APP_NAME_NEW,\r\n          }}\r\n        />\r\n      ),\r\n      issues: [],\r\n    },\r\n  };\r\n\r\n  const status = toolTipContent[servingStatus];\r\n  if (status === undefined) {\r\n    return null;\r\n  }\r\n\r\n  const getStatusMessage = (toolTipStatus: Status): JSX.Element | string | null | undefined => {\r\n    const issues = toolTipStatus.issues;\r\n    return issues.length > 0 ? issues.find((issue) => issue.isActive)?.message : toolTipStatus.defaultMessage;\r\n  };\r\n\r\n  return <>{getStatusMessage(status)}</>;\r\n};\r\n","import { CommandBarButton, DirectionalHint, IconButton, Link, getTheme } from '@fluentui/react';\r\nimport React from 'react';\r\nimport {\r\n  AdsTxtStatus,\r\n  ClarityStatus,\r\n  EntityEvaluationStatus,\r\n  PopupType,\r\n  Property,\r\n  ServingStatus,\r\n  ServingStatusLabel,\r\n  getAccessPermission,\r\n  getAppStore,\r\n  isTythonSelfServeUser,\r\n} from '../../../../../@data';\r\nimport {\r\n  UserRoleEntity,\r\n  completeAccess,\r\n  hasDeleteAccess,\r\n  hasReadAccess,\r\n  hasUpdateAccess,\r\n  userRoleKey,\r\n} from '../../../../../@data/services/UserRoleService';\r\nimport { Property as PropertyAccessPermissions } from '../../../../../@data/store/schema/userrolemodels/Property';\r\nimport AppMessages from '../../../../../App.messages';\r\nimport {\r\n  ADS_DOT_TEXT_HELP_URL,\r\n  CLARITY_WEB_APP,\r\n  CONNECT_SITE_HELP_URL,\r\n  SITE_APPROVAL_HELP_URL,\r\n} from '../../../../../constants/AppConstants';\r\nimport { IGridV2Column } from '../../../../../layout/GridPageV2';\r\nimport { setDialogType } from '../../../../../layout/GridPageV2/@data/mutatorActions';\r\nimport adManagementMessages from '../../../AdManagement.messages';\r\nimport messages from '../messages';\r\n\r\nimport { FormattedMessage } from 'react-intl';\r\nimport { FormState } from '../../../../../components/Form';\r\nimport Tag, { TagType } from '../../../../../components/Tag';\r\nimport { CellInfoCallout } from '../../../../../layout/GridPageV2/components/CellInfoCallout';\r\nimport { HeaderInfoCallout } from '../../../../../layout/GridPageV2/components/HeaderInfoCallout';\r\nimport { RouteName } from '../../../@data';\r\nimport { createReturnUrl } from '../../../@data/services/AdManagementService';\r\nimport { connectToSupportTeam } from '../../../Home/components/ResourcesSection/ResourcesSection';\r\nimport { onResendClarityLink } from '../../Create/__data__/orchestrators';\r\nimport { setCodePanelVisibility } from '../__data__/mutatorActions';\r\nimport { getGridPropertyStore } from '../__data__/store/store';\r\nimport { getClassNames, getStyles } from '../styles';\r\nimport { getServingStatusCalloutContent } from './getServingStatusCalloutContent';\r\n\r\nexport const getTagType = (status: ServingStatus): TagType => {\r\n  switch (status) {\r\n    case ServingStatus.Serving:\r\n      return TagType.Success;\r\n    case ServingStatus.Pending:\r\n      return TagType.Pending;\r\n    case ServingStatus.NotServing:\r\n      return TagType.Fail;\r\n    default:\r\n      return TagType.Pending;\r\n  }\r\n};\r\n\r\nconst getClarityStatus = (status?: ClarityStatus, formatMessage?) => {\r\n  switch (status) {\r\n    case ClarityStatus.Approved:\r\n      return formatMessage(messages.clarityApproved);\r\n    case ClarityStatus.Pending:\r\n      return formatMessage(messages.clarityPendingApproval);\r\n    case ClarityStatus.Declined:\r\n      return formatMessage(messages.clarityRejected);\r\n    case ClarityStatus.Expired:\r\n      return formatMessage(messages.clarityExpired);\r\n    case ClarityStatus.Cancelled:\r\n      return formatMessage(messages.clarityCancelled);\r\n    case ClarityStatus.NotFound:\r\n      return formatMessage(messages.clarityNotFound);\r\n    default:\r\n      return formatMessage(messages.clarityNotConnected);\r\n  }\r\n};\r\n\r\nconst getClarityCalloutDescriptionStatus = (status?: ClarityStatus): ReactIntl.FormattedMessage.MessageDescriptor => {\r\n  switch (status) {\r\n    case ClarityStatus.Pending:\r\n      return messages.clarityLinkPendingStatusCalloutDescription;\r\n    case ClarityStatus.Declined:\r\n      return messages.clarityLinkRejectStatusCalloutDescription;\r\n    case ClarityStatus.Expired:\r\n      return messages.clarityLinkExpiredStatusCalloutDescription;\r\n    case ClarityStatus.Cancelled:\r\n      return messages.clarityLinkCancelledStatusCalloutDescription;\r\n    case ClarityStatus.NotConnected:\r\n      return messages.clarityLinkNotConnectedStatusCalloutDescription;\r\n    default:\r\n      return messages.clarityLinkNotConnectedStatusCalloutDescription;\r\n  }\r\n};\r\n\r\nconst editRouter = (item: Property, routeHistory, step?: number, showExtraBtns?: boolean) => {\r\n  const { publisher, account } = getAppStore();\r\n  const returnUrl = createReturnUrl(RouteName.property, publisher!.id, account!.id, item.id, FormState.MultiStepEdit, step, showExtraBtns);\r\n  routeHistory.push(returnUrl);\r\n};\r\n\r\nconst getCallOutContent = (\r\n  item: Property,\r\n  formatMessage,\r\n  routeHistory,\r\n  clarityProjectId?: string,\r\n  status?: ClarityStatus\r\n): JSX.Element | null => {\r\n  const styles = getClassNames(getStyles, { theme: getTheme() });\r\n\r\n  return status === ClarityStatus.NotFound ? (\r\n    formatMessage(messages.clarityLinkNotFoundStatusCalloutDescription)\r\n  ) : (\r\n    <>\r\n      <span className={styles.clarityCalloutTitle}>{formatMessage(messages.clarityLinkStatusCalloutTitle)}</span>\r\n      {status !== ClarityStatus.NotConnected && (\r\n        <>\r\n          <br />\r\n          <span className={styles.clarityCalloutTitle}>\r\n            {formatMessage(messages.clarityLinkStatusCalloutProjectStatus, {\r\n              id: clarityProjectId,\r\n              status: getClarityStatus(status, formatMessage),\r\n            })}\r\n          </span>\r\n        </>\r\n      )}\r\n      <p>{formatMessage(getClarityCalloutDescriptionStatus(status))}</p>\r\n      <div className={styles.clarityCalloutFooter}>\r\n        <Link onClick={() => onResendClarityLink(item.id, clarityProjectId!)}>\r\n          {formatMessage(messages.clarityLinkStatusCalloutResendAction)}\r\n        </Link>\r\n        <Link onClick={() => editRouter(item, routeHistory, 0, true)}>{formatMessage(AppMessages.edit)}</Link>\r\n      </div>\r\n    </>\r\n  );\r\n};\r\n\r\nconst getPropertyAccessPermission = (): PropertyAccessPermissions | null => {\r\n  const userRoles = localStorage.getItem(userRoleKey);\r\n  if (userRoles === null) {\r\n    return null;\r\n  }\r\n  const userRolesJSON = JSON.parse(userRoles);\r\n\r\n  for (const value in userRolesJSON) {\r\n    if (value === UserRoleEntity.Property) {\r\n      return JSON.parse(userRolesJSON[value]);\r\n    }\r\n  }\r\n\r\n  return null;\r\n};\r\n\r\nexport const getServingStatusLabel = (servingStatus: ServingStatus, formatMessage) => {\r\n  const servingStatusType = Object.keys(ServingStatus)[Object.values(ServingStatus).indexOf(servingStatus)];\r\n  return servingStatusType ? formatMessage(adManagementMessages[ServingStatusLabel[servingStatusType]]) : '';\r\n};\r\n\r\nexport const getGridColumns = (\r\n  formatMessage,\r\n  routeHistory,\r\n  isWindowRegularSize,\r\n  isFetchingPropertyStatus,\r\n  servingConfigs,\r\n  changeState\r\n): IGridV2Column[] => {\r\n  const tythonUser = isTythonSelfServeUser();\r\n  const propertyAccessPermissions = getPropertyAccessPermission();\r\n  const { publisher, publisherEvaluationStatus } = getAppStore();\r\n  const styles = getClassNames(getStyles, { theme: getTheme() });\r\n  const isPublisherRejected = publisherEvaluationStatus?.approvalStatus === EntityEvaluationStatus.Rejected;\r\n\r\n  const commonColumns: IGridV2Column[] = [\r\n    {\r\n      columnOrder: 0,\r\n      key: 'name',\r\n      fieldName: 'name',\r\n      name: formatMessage(tythonUser ? messages.siteName : messages.name),\r\n      minWidth: 80,\r\n      maxWidth: 150,\r\n      isSearchable: true,\r\n      isVisible: tythonUser ? true : hasReadAccess(propertyAccessPermissions === null ? completeAccess : propertyAccessPermissions.name),\r\n      isShowingDisabled: tythonUser\r\n        ? true\r\n        : hasReadAccess(propertyAccessPermissions === null ? completeAccess : propertyAccessPermissions.name),\r\n      isExportable: true,\r\n      isResizable: true,\r\n      suppressSorting: false,\r\n    },\r\n    {\r\n      columnOrder: 1,\r\n      key: 'id',\r\n      fieldName: 'id',\r\n      name: formatMessage(tythonUser ? messages.siteId : messages.id),\r\n      minWidth: 50,\r\n      maxWidth: 100,\r\n      isSearchable: true,\r\n      isVisible: tythonUser ? true : hasReadAccess(propertyAccessPermissions === null ? completeAccess : propertyAccessPermissions.id),\r\n      isShowingDisabled: tythonUser\r\n        ? true\r\n        : hasReadAccess(propertyAccessPermissions === null ? completeAccess : propertyAccessPermissions.id),\r\n      isExportable: true,\r\n      isResizable: true,\r\n      isSortedDescending: true,\r\n    },\r\n    {\r\n      columnOrder: 2,\r\n      key: 'url',\r\n      fieldName: 'url',\r\n      name: formatMessage(messages.url),\r\n      minWidth: 100,\r\n      maxWidth: 150,\r\n      isSearchable: true,\r\n      isResizable: true,\r\n      isVisible: tythonUser\r\n        ? true\r\n        : hasReadAccess(propertyAccessPermissions === null ? completeAccess : propertyAccessPermissions.websiteURL),\r\n      isShowingDisabled: tythonUser\r\n        ? true\r\n        : hasReadAccess(propertyAccessPermissions === null ? completeAccess : propertyAccessPermissions.websiteURL),\r\n      isExportable: true,\r\n    },\r\n    {\r\n      columnOrder: 99,\r\n      key: 'actions',\r\n      name: formatMessage(messages.actions),\r\n      minWidth: 220,\r\n      maxWidth: 350,\r\n      isPadded: true,\r\n      isResizable: true,\r\n      isSearchable: true,\r\n      isVisible: true,\r\n      suppressSorting: true,\r\n      onRender: (item: Property) => {\r\n        const accessPermission = getAccessPermission(item);\r\n\r\n        return (\r\n          <div>\r\n            <CommandBarButton\r\n              id={`siteCallout-${item.id}`}\r\n              styles={{ root: { background: 'transparent' } }}\r\n              iconProps={{ iconName: 'edit' }}\r\n              ariaLabel={formatMessage(AppMessages.edit)}\r\n              text={isWindowRegularSize ? formatMessage(AppMessages.edit) : ''}\r\n              disabled={!hasUpdateAccess(accessPermission) || publisher === undefined}\r\n              onClick={() => routeHistory.push(`/ad-management/${publisher?.id}/property/edit/${item.id}`)}\r\n            />\r\n            {isTythonSelfServeUser() && item.id !== undefined && (\r\n              <CommandBarButton\r\n                styles={{ root: { background: 'transparent' } }}\r\n                iconProps={{ iconName: 'PasteAsCode' }}\r\n                ariaLabel={formatMessage(AppMessages.code)}\r\n                text={isWindowRegularSize ? formatMessage(AppMessages.code) : ''}\r\n                onClick={() => setCodePanelVisibility(true, item.id.toString(), item.servingConfig?.clarityConfig?.clarityStatus)}\r\n              />\r\n            )}\r\n            <CommandBarButton\r\n              styles={{ root: { background: 'transparent' } }}\r\n              iconProps={{ iconName: 'Delete' }}\r\n              text={isWindowRegularSize ? formatMessage(AppMessages.delete) : ''}\r\n              onClick={() => setDialogType(PopupType.DeleteConfirmation)}\r\n              disabled={!hasDeleteAccess(accessPermission)}\r\n            />\r\n          </div>\r\n        );\r\n      },\r\n    },\r\n  ];\r\n\r\n  const tythonColumns: IGridV2Column[] = [\r\n    {\r\n      columnOrder: 4,\r\n      key: 'servingConfig.servingStatus',\r\n      fieldName: 'servingConfig.servingStatus',\r\n      name: formatMessage(messages.approvalStatus),\r\n      minWidth: 50,\r\n      maxWidth: 200,\r\n      isSearchable: true,\r\n      isResizable: true,\r\n      isVisible: true,\r\n      isExportable: true,\r\n      isLoading: getGridPropertyStore().isFetchingPropertyStatus && getGridPropertyStore()?.servingConfigs === undefined,\r\n      exportFunction: (item: Property) => item?.servingConfig?.servingStatus,\r\n      onRenderHeader: HeaderInfoCallout({\r\n        width: 350,\r\n        calloutContent: (\r\n          <div>\r\n            <ul style={{ paddingInlineStart: 20 }}>\r\n              <li>{formatMessage(messages.approvalStatusPendingInfo)}</li>\r\n              <li>{formatMessage(messages.approvalStatusApprovalInfo)}</li>\r\n              <li>{formatMessage(messages.approvalStatusRejectedInfo)}</li>\r\n            </ul>\r\n            <FormattedMessage\r\n              {...messages.approvalStatusInfoHelp}\r\n              values={{\r\n                guidelines: (\r\n                  <Link href={SITE_APPROVAL_HELP_URL} target=\"_blank\" rel=\"noreferrer noopener\">\r\n                    {formatMessage(messages.approvalStatusInfoGuideLines)}\r\n                  </Link>\r\n                ),\r\n                support: (\r\n                  <Link onClick={() => connectToSupportTeam()} aria-label={formatMessage(messages.approvalStatusInfoGuideLines)}>\r\n                    {formatMessage(messages.approvalStatusInfoSupport)}\r\n                  </Link>\r\n                ),\r\n              }}\r\n            />\r\n          </div>\r\n        ),\r\n      }),\r\n      onRenderData: (item: Property) =>\r\n        item?.servingConfig?.servingStatus ? (\r\n          <Tag\r\n            status={getTagType(ServingStatus[item?.servingConfig?.servingStatus])}\r\n            text={getServingStatusLabel(ServingStatus[item?.servingConfig?.servingStatus], formatMessage)}\r\n            calloutProps={{\r\n              placement: DirectionalHint.topCenter,\r\n              calloutContent: getServingStatusCalloutContent(formatMessage, isPublisherRejected, item),\r\n            }}\r\n          />\r\n        ) : (\r\n          <></>\r\n        ),\r\n    },\r\n    {\r\n      columnOrder: 3,\r\n      key: 'servingConfig.clarityConfig.clarityId',\r\n      fieldName: 'servingConfig.clarityConfig.clarityId',\r\n      name: formatMessage(messages.clarityProject),\r\n      minWidth: 50,\r\n      maxWidth: 200,\r\n      isSearchable: true,\r\n      isVisible: true,\r\n      isExportable: true,\r\n      isResizable: true,\r\n      isLoading: getGridPropertyStore().isFetchingPropertyStatus && getGridPropertyStore()?.servingConfigs === undefined,\r\n      exportFunction: (item: Property) => {\r\n        const clarityProjectId = item?.servingConfig?.clarityConfig?.clarityId;\r\n        const clarityStatus = item?.servingConfig?.clarityConfig?.clarityStatus;\r\n\r\n        if (clarityProjectId && clarityStatus === ClarityStatus.Approved) {\r\n          const refLink = CLARITY_WEB_APP.replace('{id}', clarityProjectId);\r\n          return `=HYPERLINK(\"${refLink}\", \"${clarityProjectId}\")`;\r\n        } else {\r\n          return getClarityStatus(clarityStatus, formatMessage);\r\n        }\r\n      },\r\n      onRenderHeader: () => {\r\n        return (\r\n          <>\r\n            {formatMessage(messages.clarityProject)}\r\n            <IconButton\r\n              id=\"clarityTourIcon\"\r\n              title=\"Information\"\r\n              iconProps={{ iconName: 'Info' }}\r\n              onClick={(e) => {\r\n                changeState();\r\n                e.stopPropagation();\r\n              }}\r\n            />\r\n          </>\r\n        );\r\n      },\r\n      onRenderData: (item: Property) => {\r\n        const clarityProjectId = item?.servingConfig?.clarityConfig?.clarityId;\r\n        const clarityStatus = item?.servingConfig?.clarityConfig?.clarityStatus;\r\n\r\n        if (clarityProjectId && clarityStatus === ClarityStatus.Approved) {\r\n          return (\r\n            <Link id=\"clarityProjectId\" href={CLARITY_WEB_APP.replace('{id}', clarityProjectId)} target=\"_blank\" rel=\"noreferrer noopener\">\r\n              {clarityProjectId}\r\n            </Link>\r\n          );\r\n        } else {\r\n          return clarityStatus === ClarityStatus.NotConnected || clarityStatus === undefined ? (\r\n            getClarityStatus(clarityStatus, formatMessage)\r\n          ) : (\r\n            <CellInfoCallout\r\n              placement={DirectionalHint.bottomCenter}\r\n              calloutContent={getCallOutContent(item, formatMessage, routeHistory, clarityProjectId, clarityStatus)}\r\n            >\r\n              <div className={styles.clarityStatusUnderline}>{getClarityStatus(clarityStatus, formatMessage)}</div>\r\n            </CellInfoCallout>\r\n          );\r\n        }\r\n      },\r\n    },\r\n    {\r\n      columnOrder: 5,\r\n      key: 'issues',\r\n      fieldName: 'issues',\r\n      name: formatMessage(messages.issues),\r\n      minWidth: 180,\r\n      maxWidth: 300,\r\n      isSearchable: true,\r\n      isVisible: true,\r\n      isExportable: true,\r\n      isResizable: true,\r\n      isLoading: getGridPropertyStore().isFetchingPropertyStatus && getGridPropertyStore()?.servingConfigs === undefined,\r\n      onRenderData: (item: Property) => (\r\n        <>\r\n          <ul className={styles.propertyIssuesUnorderedList}>\r\n            {item?.servingConfig?.scriptStatus === false && (\r\n              <li className={styles.errorBulletPoint}>\r\n                <Link onClick={() => setCodePanelVisibility(true, item?.id.toString(), item?.servingConfig?.clarityConfig?.clarityStatus)}>\r\n                  {formatMessage(messages.siteNotServingPubCenterScriptInActive)}\r\n                </Link>\r\n              </li>\r\n            )}\r\n            {item?.servingConfig?.servingStatus &&\r\n              ServingStatus[item?.servingConfig?.servingStatus.toString()] === ServingStatus.NotServing && (\r\n                <li className={styles.errorBulletPoint}>\r\n                  <Link href={CONNECT_SITE_HELP_URL} target=\"_blank\" rel=\"noreferrer noopener\">\r\n                    {formatMessage(messages.siteNotServingSiteIsRejected)}\r\n                  </Link>\r\n                </li>\r\n              )}\r\n            {item?.servingConfig?.adsDotTxtStatus &&\r\n              (AdsTxtStatus[item?.servingConfig?.adsDotTxtStatus?.toString()] === AdsTxtStatus.NotFound ||\r\n                AdsTxtStatus[item?.servingConfig?.adsDotTxtStatus?.toString()] === AdsTxtStatus.Scanning) && (\r\n                <li className={styles.warningBulletPoint}>\r\n                  <Link href={ADS_DOT_TEXT_HELP_URL} target=\"_blank\" rel=\"noreferrer noopener\">\r\n                    {formatMessage(messages.siteNotServingWithoutAdsTxt)}\r\n                  </Link>\r\n                </li>\r\n              )}\r\n          </ul>\r\n        </>\r\n      ),\r\n    },\r\n  ];\r\n\r\n  const nonTythonColumns: IGridV2Column[] = [\r\n    {\r\n      columnOrder: 3,\r\n      key: 'status',\r\n      fieldName: 'status',\r\n      name: formatMessage(messages.status),\r\n      minWidth: 50,\r\n      maxWidth: 100,\r\n      isSearchable: true,\r\n      isVisible: true,\r\n      isExportable: true,\r\n      isResizable: true,\r\n      suppressSorting: false,\r\n    },\r\n    {\r\n      columnOrder: 4,\r\n      key: 'approvalStatus',\r\n      fieldName: 'approvalStatus',\r\n      name: formatMessage(tythonUser ? messages.approvalStatus : messages.approvalStatus),\r\n      minWidth: 50,\r\n      maxWidth: 100,\r\n      isSearchable: true,\r\n      isVisible: hasReadAccess(propertyAccessPermissions === null ? completeAccess : propertyAccessPermissions.approvalStatus),\r\n      isShowingDisabled: hasReadAccess(propertyAccessPermissions === null ? completeAccess : propertyAccessPermissions.approvalStatus),\r\n      isExportable: true,\r\n      isResizable: true,\r\n      onRender: (item: Property) => item.approvalStatus,\r\n    },\r\n    {\r\n      columnOrder: 5,\r\n      key: 'clarityStatus',\r\n      fieldName: 'clarityStatus',\r\n      name: formatMessage(messages.clarityStatus),\r\n      minWidth: 100,\r\n      maxWidth: 150,\r\n      isResizable: true,\r\n      isSearchable: true,\r\n      isVisible: hasReadAccess(propertyAccessPermissions === null ? completeAccess : propertyAccessPermissions.clarity),\r\n      isShowingDisabled: hasReadAccess(propertyAccessPermissions === null ? completeAccess : propertyAccessPermissions.clarity),\r\n      isExportable: true,\r\n      onRender: (item: Property) => {\r\n        if (item.clarityProjectId && (item.clarityStatus === 'Approved' || item.clarityStatus === item.clarityProjectId)) {\r\n          return (\r\n            <Link href={CLARITY_WEB_APP.replace('{id}', item?.clarityProjectId)} target=\"_blank\" rel=\"noreferrer noopener\">\r\n              {item.clarityStatus}\r\n            </Link>\r\n          );\r\n        } else {\r\n          return item.clarityStatus;\r\n        }\r\n      },\r\n      exportFunction: (item: Property) => {\r\n        if (item.clarityStatus === 'Approved' && item.clarityProjectId) {\r\n          const refLink = CLARITY_WEB_APP.replace('{id}', item.clarityProjectId);\r\n          return `=HYPERLINK(\"${refLink}\", \"${item.clarityProjectId}\")`;\r\n        } else {\r\n          return item.clarityStatus;\r\n        }\r\n      },\r\n    },\r\n  ];\r\n\r\n  if (getGridPropertyStore().servingConfigs !== undefined && getGridPropertyStore().servingConfigs!.length > 0) {\r\n    nonTythonColumns.push({\r\n      columnOrder: 4.5,\r\n      key: 'servingStatus',\r\n      fieldName: 'servingStatus',\r\n      name: formatMessage(messages.servingStatus),\r\n      minWidth: 100,\r\n      maxWidth: 200,\r\n      isSearchable: true,\r\n      isVisible: true,\r\n      isExportable: true,\r\n      isResizable: true,\r\n      suppressSorting: false,\r\n      isLoading: getGridPropertyStore().isFetchingPropertyStatus && getGridPropertyStore()?.servingConfigs === undefined,\r\n      onRenderData: (item: Property) => {\r\n        const servingStatus = getGridPropertyStore()?.servingConfigs?.find((property) => property.propertyId === item.id)?.servingStatus;\r\n        return <>{servingStatus}</>;\r\n      },\r\n    });\r\n  }\r\n\r\n  const newColumns = [...commonColumns, ...(isTythonSelfServeUser() ? tythonColumns : nonTythonColumns)];\r\n  return newColumns;\r\n};\r\n","import { Link, SelectionMode, getTheme } from '@fluentui/react';\r\nimport * as React from 'react';\r\nimport { useEffect, useState } from 'react';\r\nimport { FormattedMessage } from 'react-intl';\r\nimport { EntityEvaluationStatus, InventoryPlatformType, Property, getAppStore } from '../../../../@data';\r\nimport { isTythonSelfServeUser } from '../../../../@data/utils/checkUserType';\r\nimport AppMessages from '../../../../App.messages';\r\nimport { DefaultRoute } from '../../../../Routes';\r\nimport { ZeroResults } from '../../../../components/ZeroResults/ZeroResults';\r\nimport { useWindowSize } from '../../../../hooks';\r\nimport { getStore as getWindowSizeStore } from '../../../../hooks/useWindowSize/store/store';\r\nimport { GridPageLayout } from '../../../../layout/GridPageLayout/GridPageLayout';\r\nimport { GridV2, IGridV2Column } from '../../../../layout/GridPageV2';\r\nimport TutorialCallout from '../../../../layout/TutorialCallout';\r\nimport { IRouterWithIntl, injectIntlAndObserver } from '../../../../utils/ReactUtils';\r\nimport { RouteName } from '../../@data';\r\nimport { fetchPublisherEvaluationStatusAction } from '../../@data/actions';\r\nimport { setPropertyData } from './__data__/mutatorActions';\r\nimport { onManagePageInitialized } from './__data__/orchestrators';\r\nimport { getGridPropertyStore } from './__data__/store/store';\r\nimport ClarityPanel from './components/ClarityPanel';\r\nimport { CodePanel } from './components/CodePanel/CodePanel';\r\nimport messages from './messages';\r\nimport { getClassNames, getStyles } from './styles';\r\nimport { getClarityTutorialSteps } from './utils/getClarityTutorialSteps';\r\nimport { getCommandBarItems } from './utils/getCommandBarItems';\r\nimport { getGridColumns } from './utils/getGridColumns';\r\n\r\nconst { windowStoreSerializer } = useWindowSize();\r\n\r\nexport const ManagePage = injectIntlAndObserver((props: IRouterWithIntl & { withParentLayout?: boolean; abortDataFetch?: boolean }) => {\r\n  const { publisher, publisherEvaluationStatus } = getAppStore();\r\n  const tythonUser = isTythonSelfServeUser();\r\n  const { history, intl, location, match, withParentLayout, abortDataFetch = false } = props;\r\n  const { formatMessage } = intl;\r\n  const { isWindowRegularSize } = windowStoreSerializer(getWindowSizeStore());\r\n  const store = getGridPropertyStore();\r\n  const [clarityTutorialCallout, setClarityTutorialCallout] = useState(false);\r\n  const styles = getClassNames(getStyles, { theme: getTheme() });\r\n  const isPublisherRejected = publisherEvaluationStatus?.approvalStatus === EntityEvaluationStatus.Rejected;\r\n\r\n  const changeClarityCalloutVisibility = () => setClarityTutorialCallout((prevState) => !prevState);\r\n\r\n  const gridDefaultColumns: IGridV2Column[] = getGridColumns(\r\n    formatMessage,\r\n    props.history,\r\n    isWindowRegularSize,\r\n    getGridPropertyStore().isFetchingPropertyStatus,\r\n    getGridPropertyStore().servingConfigs,\r\n    changeClarityCalloutVisibility\r\n  );\r\n\r\n  const NoResultComponent = (\r\n    <ZeroResults\r\n      showDefaultImage\r\n      title={\r\n        tythonUser || (!tythonUser && !!publisher)\r\n          ? formatMessage(tythonUser ? messages.zeroResultTitle : messages.zeroResultTitleNonTython)\r\n          : undefined\r\n      }\r\n      description={formatMessage(\r\n        tythonUser ? messages.zeroResultDescription : !!publisher ? messages.zeroResultDescriptionNonTython : messages.noPublisherSelected\r\n      )}\r\n      buttonText={formatMessage(tythonUser ? messages.siteCreate : messages.create)}\r\n      onButtonClick={\r\n        tythonUser || (!tythonUser && !!publisher)\r\n          ? () => history.push(`${DefaultRoute}/${publisher?.id}/${RouteName.property}/create`)\r\n          : undefined\r\n      }\r\n    />\r\n  );\r\n\r\n  useEffect(() => {\r\n    if ((publisher !== undefined && store?.data && store?.data[0]?.publisherId === publisher?.id) || abortDataFetch) {\r\n      return;\r\n    }\r\n    onManagePageInitialized();\r\n    fetchPublisherEvaluationStatusAction({ cache: false });\r\n    // eslint-disable-next-line\r\n  }, [publisher]);\r\n\r\n  const pageContent = (\r\n    <>\r\n      <TutorialCallout\r\n        steps={getClarityTutorialSteps(formatMessage, store.servingConfigs)}\r\n        isOpen={clarityTutorialCallout}\r\n        onChangeState={changeClarityCalloutVisibility}\r\n      />\r\n\r\n      <ClarityPanel {...props} />\r\n      <>{isTythonSelfServeUser() && <CodePanel {...props} />}</>\r\n      <GridV2\r\n        history={history}\r\n        location={location}\r\n        match={match}\r\n        entity={Property}\r\n        pageTitle={{\r\n          title: formatMessage(tythonUser ? messages.sites : messages.properties),\r\n          helpId: tythonUser ? 'pop_PCv4_Sites' : 'pop_PCv4_Properties',\r\n        }}\r\n        msgBarProps={\r\n          isPublisherRejected\r\n            ? {\r\n                messageBarType: 1,\r\n                children: (\r\n                  <span className={styles.errorMsgContent}>\r\n                    <FormattedMessage\r\n                      {...messages.sitesCannotServeMessage}\r\n                      values={{ learn: <Link>{formatMessage(AppMessages.learnMore)}</Link> }}\r\n                    />\r\n                  </span>\r\n                ),\r\n                className: styles.errorMsg,\r\n              }\r\n            : undefined\r\n        }\r\n        isGridReady={!store.isLoading}\r\n        isDataLoading={store.isFetchingData}\r\n        commandBarProps={getCommandBarItems(formatMessage)}\r\n        dataGridProps={{\r\n          gridV2Columns: gridDefaultColumns,\r\n          data: publisher\r\n            ? store.data?.filter?.((property) => property.servingConfig?.inventoryPlatformType !== InventoryPlatformType.UWP) || []\r\n            : [],\r\n          setData: setPropertyData,\r\n          shimmerLines: 10,\r\n          selectionMode: SelectionMode.single,\r\n          renderZeroItemsComponent: NoResultComponent,\r\n          noEntityFound: tythonUser ? messages.siteNotFound : messages.notFound,\r\n        }}\r\n        paginationProps={{\r\n          shouldGridHandlePagination: true,\r\n        }}\r\n      />\r\n    </>\r\n  );\r\n  return withParentLayout ? <>{pageContent}</> : <GridPageLayout>{pageContent}</GridPageLayout>;\r\n});\r\n","import { defineMessages } from 'react-intl';\r\n\r\nexport default defineMessages({\r\n  appInventoryTableTitle: {\r\n    id: 'inventory.manage.app.title',\r\n    defaultMessage: 'Apps',\r\n  },\r\n  appsCannotServeMessage: {\r\n    id: 'inventory.manage.app.appsCannotServeMessage',\r\n    defaultMessage: 'Apps cannot serve ads until your profile is submitted and approved {learn}',\r\n  },\r\n  learnMore: {\r\n    id: 'app.learnMore',\r\n    defaultMessage: 'Learn more',\r\n  },\r\n  appNameColumnLabel: {\r\n    id: 'inventory.app.appNameColumnLabel',\r\n    defaultMessage: 'App Name',\r\n  },\r\n  appIdColumnLabel: {\r\n    id: 'inventory.app.appIdColumnLabel',\r\n    defaultMessage: 'App ID',\r\n  },\r\n  appUrlColumnLabel: {\r\n    id: 'inventory.app.appUrlColumnLabel',\r\n    defaultMessage: 'App URL',\r\n  },\r\n  appAdUnitPlatformColumnLabel: {\r\n    id: 'inventory.app.appAdUnitPlatformColumnLabel',\r\n    defaultMessage: 'Ad unit platform',\r\n  },\r\n  appAdUnitStatusColumnLabel: {\r\n    id: 'inventory.app.appAdUnitStatusColumnLabel',\r\n    defaultMessage: 'Status',\r\n  },\r\n  appAdUnitActionsColumnLabel: {\r\n    id: 'inventory.app.appAdUnitActionsColumnLabel',\r\n    defaultMessage: 'Actions',\r\n  },\r\n  appAdunitGridCreateButtonLabel: {\r\n    id: 'inventory.app.adunitGridCreateButtonLabel',\r\n    defaultMessage: 'Create An App',\r\n  },\r\n  appInventoryIssueColumnLabel: {\r\n    id: 'inventory.app.appInventoryIssueColumnLabel',\r\n    defaultMessage: 'Issues',\r\n  },\r\n  appInventoryZeroResultTitle: {\r\n    id: 'inventory.app.appInventoryZeroResultTitle',\r\n    defaultMessage: 'No inventory found by apps',\r\n  },\r\n  appInventoryZeroResultDescription: {\r\n    id: 'inventory.app.appInventoryZeroResultDescription',\r\n    defaultMessage: 'Create an app to start serving ads',\r\n  },\r\n  appInventoryZeroResultCallToAction: {\r\n    id: 'inventory.app.appInventoryZeroResultCallToAction',\r\n    defaultMessage: 'Create an App',\r\n  },\r\n  appInventoryDeletePopupTitle: {\r\n    id: 'inventory.app.appInventoryDeletePopupTitle',\r\n    defaultMessage: 'Are you sure you want to delete this app?',\r\n  },\r\n  appInventoryDeletePopupDescription: {\r\n    id: 'inventory.app.appInventoryDeletePopupDescription',\r\n    defaultMessage: 'By deleting this app, you’ll unlink the app ad units associated with it',\r\n  },\r\n});\r\n","import { CommandBarButton } from '@fluentui/react';\r\nimport React from 'react';\r\nimport { Model, PopupType, Property, getAccessPermission } from '../../../../@data';\r\nimport { hasDeleteAccess } from '../../../../@data/services/UserRoleService';\r\nimport AppMessages from '../../../../App.messages';\r\nimport { ZeroResults } from '../../../../components/ZeroResults/ZeroResults';\r\nimport { CommandBarActions, IBuildCommandBarProps } from '../../../../layout/GridPageV2';\r\nimport { setDialogType } from '../../../../layout/GridPageV2/@data/mutatorActions';\r\nimport { getTythonAppInventoryCreationRoute, getTythonAppInventoryEditionRoute } from '../../../../utils/routeUtils';\r\nimport messages from './messages';\r\n\r\nconst useAppInventoryGrid = (formatMessage, routeHistory, isWindowRegularSize, publisher) => {\r\n  const NoResultComponent = (\r\n    <ZeroResults\r\n      showDefaultImage\r\n      title={formatMessage(messages.appInventoryZeroResultTitle)}\r\n      description={formatMessage(messages.appInventoryZeroResultDescription)}\r\n      buttonText={formatMessage(messages.appInventoryZeroResultCallToAction)}\r\n      onButtonClick={() => routeHistory.push(getTythonAppInventoryCreationRoute())}\r\n    />\r\n  );\r\n\r\n  const gridColumns = [\r\n    {\r\n      columnOrder: 0,\r\n      key: 'name',\r\n      fieldName: 'name',\r\n      name: formatMessage(messages.appNameColumnLabel),\r\n      minWidth: 150,\r\n      maxWidth: 150,\r\n      isSearchable: true,\r\n      isVisible: true,\r\n      isShowingDisabled: true,\r\n      isExportable: true,\r\n      isResizable: true,\r\n      suppressSorting: false,\r\n    },\r\n    {\r\n      columnOrder: 1,\r\n      key: 'id',\r\n      fieldName: 'id',\r\n      name: formatMessage(messages.appIdColumnLabel),\r\n      minWidth: 100,\r\n      maxWidth: 100,\r\n      isSearchable: true,\r\n      isVisible: true,\r\n      isShowingDisabled: true,\r\n      isExportable: true,\r\n      isResizable: true,\r\n      isSortedDescending: true,\r\n    },\r\n    {\r\n      columnOrder: 2,\r\n      key: 'url',\r\n      fieldName: 'url',\r\n      name: formatMessage(messages.appUrlColumnLabel),\r\n      minWidth: 150,\r\n      maxWidth: 150,\r\n      isSearchable: true,\r\n      isResizable: true,\r\n      isVisible: true,\r\n      isShowingDisabled: true,\r\n      isExportable: true,\r\n    },\r\n    {\r\n      columnOrder: 99,\r\n      key: 'actions',\r\n      name: formatMessage(messages.appAdUnitActionsColumnLabel),\r\n      minWidth: 220,\r\n      maxWidth: 220,\r\n      isPadded: true,\r\n      isSearchable: true,\r\n      isVisible: true,\r\n      suppressSorting: true,\r\n      onRender: (item: Property) => {\r\n        const accessPermission = getAccessPermission(item);\r\n\r\n        return (\r\n          <div>\r\n            <CommandBarButton\r\n              id={`siteCallout-${item.id}`}\r\n              styles={{ root: { background: 'transparent' } }}\r\n              iconProps={{ iconName: 'edit' }}\r\n              ariaLabel={formatMessage(AppMessages.edit)}\r\n              text={isWindowRegularSize ? formatMessage(AppMessages.edit) : ''}\r\n              disabled={false}\r\n              onClick={() => routeHistory.push(`${getTythonAppInventoryEditionRoute(item.id)}`)}\r\n            />\r\n            <CommandBarButton\r\n              styles={{ root: { background: 'transparent' } }}\r\n              iconProps={{ iconName: 'Delete' }}\r\n              text={isWindowRegularSize ? formatMessage(AppMessages.delete) : ''}\r\n              onClick={() => setDialogType(PopupType.DeleteConfirmation)}\r\n              disabled={!hasDeleteAccess(accessPermission)}\r\n            />\r\n          </div>\r\n        );\r\n      },\r\n    },\r\n  ];\r\n\r\n  const pageTitle = {\r\n    title: formatMessage(messages.appInventoryTableTitle),\r\n    helpId: 'pop_PCv4_Sites',\r\n  };\r\n\r\n  const commandBarItems: IBuildCommandBarProps<Model> = {\r\n    primaryButtonUrl: getTythonAppInventoryCreationRoute(),\r\n    primaryButtonLabel: messages.appAdunitGridCreateButtonLabel,\r\n    includeActions: [CommandBarActions.new],\r\n    includeFarActions: [CommandBarActions.searchBox, CommandBarActions.code, CommandBarActions.download, CommandBarActions.modifyColumns],\r\n    filterItems: [],\r\n    deleteLabels: {\r\n      title: messages.appInventoryDeletePopupTitle,\r\n      description: messages.appInventoryDeletePopupDescription,\r\n    },\r\n  };\r\n\r\n  return { gridColumns, pageTitle, commandBarItems, NoResultComponent };\r\n};\r\n\r\nexport default useAppInventoryGrid;\r\n","import { Link, SelectionMode } from '@fluentui/react';\r\nimport React from 'react';\r\nimport { FormattedMessage } from 'react-intl';\r\nimport { EntityEvaluationStatus, InventoryPlatformType, Property, getAppStore } from '../../../../@data';\r\nimport { useWindowSize } from '../../../../hooks';\r\nimport { getStore as getWindowSizeStore } from '../../../../hooks/useWindowSize/store/store';\r\nimport { GridV2 } from '../../../../layout/GridPageV2';\r\nimport { injectRouterAndIntlWithObserver } from '../../../../utils';\r\nimport { setPropertyData } from '../../Property/Manage/__data__/mutatorActions';\r\nimport { getGridPropertyStore } from '../../Property/Manage/__data__/store/store';\r\nimport messages from './messages';\r\nimport { AppInventoryManagePageType } from './types';\r\nimport useAppInventoryGrid from './useAppInventoryGrid';\r\n\r\nconst { windowStoreSerializer } = useWindowSize();\r\n\r\nconst AppInventoryManagePage: AppInventoryManagePageType = ({ intl: { formatMessage }, history, location, match }) => {\r\n  const { isWindowRegularSize } = windowStoreSerializer(getWindowSizeStore());\r\n  const { publisher, publisherEvaluationStatus } = getAppStore();\r\n  const isPublisherRejected = publisherEvaluationStatus?.approvalStatus === EntityEvaluationStatus.Rejected;\r\n  const store = getGridPropertyStore();\r\n  const { gridColumns, pageTitle, commandBarItems, NoResultComponent } = useAppInventoryGrid(\r\n    formatMessage,\r\n    history,\r\n    isWindowRegularSize,\r\n    publisher\r\n  );\r\n\r\n  return (\r\n    <div>\r\n      <GridV2\r\n        history={history}\r\n        location={location}\r\n        match={match}\r\n        entity={Property}\r\n        pageTitle={pageTitle}\r\n        msgBarProps={\r\n          isPublisherRejected\r\n            ? {\r\n                messageBarType: 1,\r\n                children: (\r\n                  <span>\r\n                    <FormattedMessage\r\n                      {...messages.appsCannotServeMessage}\r\n                      values={{ learn: <Link>{formatMessage(messages.learnMore)}</Link> }}\r\n                    />\r\n                  </span>\r\n                ),\r\n              }\r\n            : undefined\r\n        }\r\n        isGridReady={!store.isLoading}\r\n        isDataLoading={store.isFetchingData}\r\n        commandBarProps={commandBarItems}\r\n        dataGridProps={{\r\n          gridV2Columns: gridColumns,\r\n          data: publisher\r\n            ? store.data?.filter?.((property) => property.servingConfig?.inventoryPlatformType === InventoryPlatformType.UWP) || []\r\n            : [],\r\n          setData: setPropertyData,\r\n          shimmerLines: 10,\r\n          selectionMode: SelectionMode.single,\r\n          renderZeroItemsComponent: NoResultComponent,\r\n        }}\r\n        paginationProps={{\r\n          shouldGridHandlePagination: true,\r\n        }}\r\n      />\r\n    </div>\r\n  );\r\n};\r\n\r\nexport default (injectRouterAndIntlWithObserver(AppInventoryManagePage) as unknown) as React.FC;\r\n","import { observer } from 'mobx-react';\r\nimport React, { useEffect } from 'react';\r\nimport { withRouter } from 'react-router-dom';\r\nimport { getAppStore } from '../../../../@data';\r\nimport EntityTypeSwitch from '../../../../components/EntityTypeSwitch';\r\nimport { InventoryPageTabs, useEntityTypeManage } from '../../../../hooks/useEntityTypeManage';\r\nimport { getStore as getWindowsAppFeatureFlagStore } from '../../../../hooks/useWindowsAppFeatureFlag/store/store';\r\nimport { GridPageLayout } from '../../../../layout/GridPageLayout/GridPageLayout';\r\nimport { fetchPublisherEvaluationStatusAction } from '../../@data/actions';\r\nimport { ManagePage } from '../../Property/Manage';\r\nimport { onManagePageInitialized } from '../../Property/Manage/__data__/orchestrators';\r\nimport { getGridPropertyStore } from '../../Property/Manage/__data__/store/store';\r\nimport AppInventoryManagePage from './AppInventoryManagePage';\r\n\r\nexport const TythonInventoryManagePage = withRouter(\r\n  observer(({ history, match, location }) => {\r\n    const { isFeatureEnabled } = getWindowsAppFeatureFlagStore();\r\n    const { activeSubTab, setActiveSubTab } = useEntityTypeManage({ isFeatureEnabled });\r\n    const SiteManageView = <ManagePage withParentLayout history={history} match={match} location={location} abortDataFetch />;\r\n    const AppInventoryManageView = <AppInventoryManagePage />;\r\n    const store = getGridPropertyStore();\r\n\r\n    const { publisher } = getAppStore();\r\n\r\n    useEffect(() => {\r\n      if (publisher !== undefined && store?.data && store?.data[0]?.publisherId === publisher?.id) {\r\n        return;\r\n      }\r\n      onManagePageInitialized();\r\n      fetchPublisherEvaluationStatusAction({ cache: false });\r\n      // eslint-disable-next-line\r\n    }, [publisher]);\r\n\r\n    return (\r\n      <GridPageLayout withSubHeader>\r\n        <EntityTypeSwitch selectedValue={activeSubTab} onTabSelect={setActiveSubTab} isFeatureEnabled={isFeatureEnabled} />\r\n        {activeSubTab === InventoryPageTabs.Sites ? SiteManageView : <></>}\r\n        {activeSubTab === InventoryPageTabs.Apps ? AppInventoryManageView : <></>}\r\n      </GridPageLayout>\r\n    );\r\n  })\r\n);\r\n","import { Spinner } from '@fluentui/react-components';\r\nimport React, { useEffect } from 'react';\r\nimport { onHelpInfoChanged } from '../../@data';\r\n\r\nexport const HelpcenterInfoBubbleV2 = ({ html }) => {\r\n  useEffect(() => {\r\n    return () => {\r\n      onHelpInfoChanged();\r\n    };\r\n  }, []);\r\n  if (!html) {\r\n    return <Spinner size=\"tiny\" />;\r\n  }\r\n  return <div dangerouslySetInnerHTML={{ __html: html }} />;\r\n};\r\n","import { defineMessages } from 'react-intl';\r\n\r\nexport default defineMessages({\r\n  errorSellerIdDoesNotMatchApp: {\r\n    id: 'appInventoryForm.errorSellerIdDoesNotMatchApp',\r\n    defaultMessage: 'SellerId does not match provided App.',\r\n  },\r\n  errorPropertyNameAlreadyExists: {\r\n    id: 'appInventoryForm.errorPropertyNameAlreadyExists',\r\n    defaultMessage: 'An inventory by this name already exists',\r\n  },\r\n  errorInventoryAppUrlAlreadyExists: {\r\n    id: 'appInventoryForm.errorPropertyNameAlreadyExists',\r\n    defaultMessage: 'An inventory by this url already exists',\r\n  },\r\n  processNameCreate: {\r\n    id: 'appInventoryForm.processNameCreate',\r\n    defaultMessage: 'Create app',\r\n  },\r\n  processNameEdit: {\r\n    id: 'appInventoryForm.processNameEdit',\r\n    defaultMessage: 'Edit app',\r\n  },\r\n  CreateSiteStep: {\r\n    id: 'appInventoryForm.CreateSiteStep',\r\n    defaultMessage: 'App details',\r\n  },\r\n  AdsTxtCreationStep: {\r\n    id: 'appInventoryForm.AdsTxtCreationStep',\r\n    defaultMessage: 'Ads.txt creation',\r\n  },\r\n  AdsTxtCreationStepTitle: {\r\n    id: 'appInventoryForm.AdsTxtCreationStepTitle',\r\n    defaultMessage: 'Create ads.txt file',\r\n  },\r\n  GetCodeAndFinishStep: {\r\n    id: 'appInventoryForm.GetCodeAndFinishStep',\r\n    defaultMessage: 'Get code',\r\n  },\r\n  appNameFieldLabel: {\r\n    id: 'appInventoryForm.appNameFieldLabel',\r\n    defaultMessage: 'App Name',\r\n  },\r\n  appSellerIdFieldLabel: {\r\n    id: 'appInventoryForm.appSellerIdFieldLabel',\r\n    defaultMessage: 'Seller ID',\r\n  },\r\n  appUrlFieldLabel: {\r\n    id: 'appInventoryForm.appUrlFieldLabel',\r\n    defaultMessage: 'App Url',\r\n  },\r\n  appNameFieldPlaceholder: {\r\n    id: 'appInventoryForm.appNameFieldPlaceholder',\r\n    defaultMessage: 'Enter the name of your App',\r\n  },\r\n  appSellerIdFieldPlaceholder: {\r\n    id: 'appInventoryForm.appSellerIdFieldPlaceholder',\r\n    defaultMessage: 'Enter the name of your windows store seller id',\r\n  },\r\n  appUrlFieldPlaceholder: {\r\n    id: 'appInventoryForm.appUrlFieldPlaceholder',\r\n    defaultMessage: 'Enter app URL',\r\n  },\r\n  appPlatformInfo: {\r\n    id: 'appInventoryForm.appPlatformInfo',\r\n    defaultMessage: 'Currently Ads SDK supports only Windows UWP framework. Future support for additional frameworks will be added soon.',\r\n  },\r\n  appPlatformWindowsUWPLabel: {\r\n    id: 'appInventoryForm.appPlatformWindowsUWPLabel',\r\n    defaultMessage: 'Windows UWP',\r\n  },\r\n  appPlatformTitleLabel: {\r\n    id: 'appInventoryForm.appPlatformTitleLabel',\r\n    defaultMessage: 'App Platform',\r\n  },\r\n  appPlatformConnectLiveAppInfo: {\r\n    id: 'appInventoryForm.appPlatformConnectLiveAppInfo',\r\n    defaultMessage: 'Your app must be live in the Microsoft Store for us to serve ads. Please search your app using Store ID',\r\n  },\r\n  appPlatformConnectLiveAppTitleLabel: {\r\n    id: 'appInventoryForm.appPlatformConnectLiveAppTitleLabel',\r\n    defaultMessage: 'Connect your live app',\r\n  },\r\n  appSearchFieldPlaceholder: {\r\n    id: 'appInventoryForm.appSearchFieldPlaceholder',\r\n    defaultMessage: 'Search for your app by Store ID',\r\n  },\r\n  appAgreement: {\r\n    id: 'appInventoryForm.appAgreement',\r\n    defaultMessage: 'COPPA Agreement',\r\n  },\r\n  appAgreementSection1: {\r\n    id: 'appInventoryForm.appAgreementSection1',\r\n    defaultMessage:\r\n      'In accordance with the Children’s Online Privacy Protection Act (COPPA) in the United States, we require all partners using Microsoft’s Monetize services to identify whether or not their apps are primarily directed toward children under the age of thirteen (13).',\r\n  },\r\n  appAgreementSection2: {\r\n    id: 'appInventoryForm.appAgreementSection2',\r\n    defaultMessage:\r\n      'By clicking “Agree” below, partner: (i) represents that this app is not primarily directed at children under age thirteen (13), and (ii) agrees that this app will not be tagged as primarily child-directed.',\r\n  },\r\n  appAgreementCheckboxLabel: {\r\n    id: 'appInventoryForm.appAgreementCheckboxLabel',\r\n    defaultMessage: 'I agree',\r\n  },\r\n  getCodeTitle: {\r\n    id: 'appInventoryForm.getCodeTitle',\r\n    defaultMessage: 'Your app set-up is almost complete',\r\n  },\r\n  finishStepperTittle: {\r\n    id: 'appInventoryForm.finishStepperTittle',\r\n    defaultMessage: 'Finish',\r\n  },\r\n  finishPageExpectNextTitle: {\r\n    id: 'appInventoryForm.finishPageExpectNextTitle',\r\n    defaultMessage: 'What to expect next?',\r\n  },\r\n  finishPageExpectNextContent1: {\r\n    id: 'appInventoryForm.finishPageExpectNextContent1',\r\n    defaultMessage: 'Now that your app is set up, please ensure your have added app-ads.txt on your website for an unhindered ad delivery.',\r\n  },\r\n  finishPageExpectNextContent2: {\r\n    id: 'appInventoryForm.finishPageExpectNextContent2',\r\n    defaultMessage:\r\n      'We will now review your ad to make sure it’s ready to show ads. App reviews typically take 7 business days. Ad serving is will be restricted until the review is complete.',\r\n  },\r\n  finishPageExpectNextContentHelpLink: {\r\n    id: 'appInventoryForm.finishPageExpectNextContentHelpLink',\r\n    defaultMessage: 'Learn more about app review process',\r\n  },\r\n  finishPageExpectNextTitle2: {\r\n    id: 'appInventoryForm.finishPageExpectNextTitle2',\r\n    defaultMessage: 'Next Steps',\r\n  },\r\n  finishPageCardTitle: {\r\n    id: 'appInventoryForm.finishPageCardTitle',\r\n    defaultMessage: 'Set up ad unit for your App',\r\n  },\r\n  finishPageActionButtonLabel: {\r\n    id: 'appInventoryForm.finishPageActionButtonLabel',\r\n    defaultMessage: 'Create App ad unit',\r\n  },\r\n  finishPageCardContent: {\r\n    id: 'appInventoryForm.finishPageCardContent',\r\n    defaultMessage: 'Set up ad placements for this app so that when your app is approved, you can start serving ads right away',\r\n  },\r\n  CreateSiteStepFormTitle: {\r\n    id: 'appInventoryForm.CreateSiteStepFormTitle',\r\n    defaultMessage: 'Add your App details',\r\n  },\r\n  loadingLabel: {\r\n    id: 'appInventoryForm.loadingLabel',\r\n    defaultMessage: 'Loading...',\r\n  },\r\n  coopaTnCInfo: {\r\n    id: 'appInventoryForm.coopaTnCInfo',\r\n    defaultMessage:\r\n      'Partners may have other legal obligations under COPPA. Please review the FTC’s guidance and/or seek your own advice of counsel. Microsoft pubCenter tools are designed only to facilitate compliance and do not relieve partners of their legal obligations, including under COPPA.',\r\n  },\r\n  appPropertyInvalidUrl: {\r\n    id: 'appInventoryForm.appPropertyInvalidUrl',\r\n    defaultMessage: 'Invalid URL, no path or query parameters',\r\n  },\r\n});\r\n","import { makeStyles, shorthands, tokens, typographyStyles } from '@fluentui/react-components';\r\nimport { BreakPoints } from '../../../../../../../../theme';\r\n\r\nexport const useAppPropertyDetailPageStyles = makeStyles({\r\n  sectionTitle: {\r\n    ...typographyStyles.title3,\r\n  },\r\n  sectionTitleOffset: {\r\n    marginBottom: tokens.spacingVerticalXS,\r\n  },\r\n  textTitle: {\r\n    ...typographyStyles.body1Strong,\r\n    '::after': {\r\n      content: `\" *\"`,\r\n      color: tokens.colorPaletteRedForeground3,\r\n      paddingRight: tokens.spacingHorizontalM,\r\n    },\r\n  },\r\n  infoMsgBar: {\r\n    ...typographyStyles.caption1Strong,\r\n    marginBottom: tokens.spacingVerticalXS,\r\n    paddingTop: tokens.spacingVerticalXS,\r\n    paddingBottom: tokens.spacingVerticalXS,\r\n  },\r\n  agreementTitle: {\r\n    ...typographyStyles.body1,\r\n    color: tokens.colorNeutralForeground3,\r\n  },\r\n  agreementContent: {\r\n    ...typographyStyles.caption1,\r\n    color: tokens.colorNeutralForeground3,\r\n  },\r\n  platformDropdown: {\r\n    width: '100%',\r\n  },\r\n  infoButton: {\r\n    width: tokens.spacingHorizontalL,\r\n    height: tokens.spacingVerticalL,\r\n    display: 'contents',\r\n    '::before': {\r\n      content: `\" *\"`,\r\n      color: tokens.colorPaletteRedForeground3,\r\n    },\r\n    ':hover': {\r\n      backgroundColor: 'transparent',\r\n    },\r\n  },\r\n  skeletonWrapper: {\r\n    width: '96px',\r\n    marginTop: tokens.spacingVerticalSNudge,\r\n    marginBottom: tokens.spacingVerticalSNudge,\r\n  },\r\n  urlPrefix: {\r\n    backgroundColor: tokens.colorSubtleBackgroundSelected,\r\n    color: tokens.colorNeutralStrokeAccessible,\r\n    height: '28px',\r\n    marginLeft: '-9px',\r\n    paddingLeft: '10px',\r\n    paddingRight: '6px',\r\n    display: 'flex',\r\n    justifyContent: 'center',\r\n    alignItems: 'center',\r\n    marginTop: '-1px',\r\n  },\r\n});\r\n\r\nexport const useConnectAppDropdownStyles = makeStyles({\r\n  containerWrapper: {\r\n    '>span': {\r\n      width: '100%',\r\n    },\r\n  },\r\n  appSearchIcon: {\r\n    transform: 'scaleX(-1)',\r\n  },\r\n  isHiding: {\r\n    display: 'none',\r\n  },\r\n  optionCardWrapper: {\r\n    display: 'flex',\r\n    flexDirection: 'row',\r\n    alignItems: 'center',\r\n    justifyContent: 'space-between',\r\n  },\r\n  optionCardSelectable: {\r\n    minHeight: '64px',\r\n    ':hover': {\r\n      backgroundColor: tokens.colorNeutralBackground1Hover,\r\n      cursor: 'pointer',\r\n    },\r\n    ...shorthands.borderRadius(tokens.borderRadiusNone),\r\n    ...shorthands.padding(tokens.spacingHorizontalM, tokens.spacingHorizontalSNudge),\r\n  },\r\n  optionCardTitle: {\r\n    marginLeft: tokens.spacingHorizontalSNudge,\r\n    color: tokens.colorNeutralForeground1,\r\n  },\r\n  optionCardImgIcon: {\r\n    width: '48px',\r\n  },\r\n  optionCardAppId: {},\r\n  optionInnerWrapper: {\r\n    display: 'flex',\r\n    alignItems: 'center',\r\n    justifyContent: 'flex-start',\r\n  },\r\n  optionInnerWrapperLower: {\r\n    display: 'flex',\r\n    alignItems: 'center',\r\n    justifyContent: 'flex-end',\r\n    color: tokens.colorNeutralForeground3,\r\n  },\r\n  infoMsgBar: {\r\n    ...typographyStyles.caption1Strong,\r\n    marginBottom: tokens.spacingVerticalXS,\r\n    paddingTop: tokens.spacingVerticalXS,\r\n    paddingBottom: tokens.spacingVerticalXS,\r\n  },\r\n  optionsWrapper: {\r\n    maxHeight: '194px',\r\n    overflowY: 'scroll',\r\n    ...shorthands.padding(0),\r\n    ...shorthands.gap(0),\r\n    '::-webkit-scrollbar': {\r\n      display: 'none',\r\n    },\r\n    '-ms-overflow-style': 'none',\r\n    'scrollbar-width': 'none',\r\n  },\r\n});\r\nexport const useAppPropertyFinishPageStyles = makeStyles({\r\n  title: {\r\n    ...typographyStyles.subtitle1,\r\n  },\r\n  content: {\r\n    color: tokens.colorNeutralForeground3,\r\n  },\r\n  root: {\r\n    width: '800px',\r\n  },\r\n  cardTitle: {\r\n    color: tokens.colorNeutralForeground1,\r\n  },\r\n  divider: {\r\n    height: '96px',\r\n    width: 'calc(100vw - 96px - 222px)', // 96px layout horizontal padding + 222px of stepper nav, nav will take 0px width in smaller screen\r\n    [BreakPoints.ResponsiveMedium]: {\r\n      width: 'calc(100vw - 96px)',\r\n    },\r\n    [BreakPoints.ResponsiveSmall]: {\r\n      width: 'calc(100vw - 96px)',\r\n    },\r\n    [BreakPoints.ResponsiveExtraSmall]: {\r\n      width: 'calc(100vw - 96px)',\r\n    },\r\n  },\r\n  actionDivWrapper: {\r\n    display: 'flex',\r\n    flexDirection: 'row',\r\n    justifyContent: 'flex-start',\r\n    alignItems: 'center',\r\n    '> img': {\r\n      ...shorthands.padding(0, tokens.spacingHorizontalM, 0, 0),\r\n    },\r\n  },\r\n});\r\n","import { Body1Strong, Caption1, Card, Input, Skeleton, SkeletonItem, Spinner, mergeClasses } from '@fluentui/react-components';\r\nimport React, { useEffect, useMemo, useRef, useState } from 'react';\r\nimport { InjectedIntlProps } from 'react-intl';\r\nimport { Log } from '../../../../../../../../logging/src';\r\nimport { buildRequestHeadersWithAuthToken, getAppStore } from '../../../../../../../@data';\r\nimport { uiConfig } from '../../../../../../../config/ui.config';\r\nimport { useDebouncedValue } from '../../../../../../../hooks';\r\nimport useOnClickOutside from '../../../../../../../hooks/useOnClickOutside';\r\nimport { injectIntlAndObserver } from '../../../../../../../utils';\r\nimport messages from '../messages';\r\nimport SearchIcon from '../resources/SearchIcon.svg';\r\nimport { useConnectAppDropdownStyles } from './styles';\r\n\r\ntype ConnectAppDropdownProps = {\r\n  inventoryAppStoreId: string;\r\n  onChange: (value: string) => void;\r\n  isSaving?: boolean;\r\n  onChangeCallback?: (value: string) => void;\r\n} & InjectedIntlProps;\r\n\r\ntype ConnectAppDropdownType = React.FC<ConnectAppDropdownProps>;\r\n\r\nconst ConnectAppDropdown: ConnectAppDropdownType = ({\r\n  inventoryAppStoreId,\r\n  isSaving,\r\n  onChange,\r\n  onChangeCallback,\r\n  intl: { formatMessage },\r\n}) => {\r\n  const [searchString, setSearchString] = useState('');\r\n  const [appOptions, setAppOptions] = useState([]); // TODO: update type\r\n  const [selectedOption, setSelectedOption] = useState(undefined);\r\n  const debouncedAppSearchString = useDebouncedValue(searchString, 500);\r\n  const [shouldRenderOptions, setShouldRenderOptions] = useState(false);\r\n  const [isSearching, setIsSearching] = useState(false);\r\n  const { userContext } = getAppStore();\r\n  const isEditMode = window.location.pathname.includes('editApp');\r\n  const isOptionInitialized = useRef(false);\r\n  const optionMenuRef = useRef<HTMLDivElement>(null);\r\n  const classNames = useConnectAppDropdownStyles();\r\n  useOnClickOutside(optionMenuRef, () => {\r\n    setShouldRenderOptions(false);\r\n  });\r\n  const shouldInitializeOptions = isEditMode && !isOptionInitialized.current && inventoryAppStoreId;\r\n\r\n  const fetchAppSearchData = async (searchedString, signal?: AbortSignal) => {\r\n    if (searchedString.length) {\r\n      const url = `${uiConfig.getApiBaseAddress('1.2')}/metadata/store?appId=${searchedString}&market=en-US`;\r\n      try {\r\n        setIsSearching(true);\r\n        const headers = await buildRequestHeadersWithAuthToken(url, userContext);\r\n\r\n        const response = await fetch(url, { method: 'GET', headers: headers, signal });\r\n        if (!response.ok) {\r\n          Log.error(`HTTP error! status: ${response.status}`);\r\n        }\r\n        const appSearchResult = await response.json();\r\n        setAppOptions(appSearchResult.data.matchingApps);\r\n        setShouldRenderOptions(true);\r\n        if (!signal) {\r\n          setSelectedOption(appSearchResult.data.matchingApps[0]);\r\n        }\r\n      } catch (error) {\r\n        if (error.name === 'AbortError') {\r\n          console.error('Fetch aborted:', searchedString);\r\n        } else {\r\n          Log.error(error);\r\n        }\r\n      } finally {\r\n        setIsSearching(false);\r\n      }\r\n    } else {\r\n      setAppOptions([]);\r\n    }\r\n  };\r\n\r\n  useEffect(() => {\r\n    // Create an instance of AbortController\r\n    const controller = new AbortController();\r\n    const signal = controller.signal;\r\n    fetchAppSearchData(debouncedAppSearchString, signal);\r\n    // Cleanup function that aborts the fetch when the component unmounts or debouncedAppSearchString changes\r\n    return () => {\r\n      controller.abort();\r\n    };\r\n    // eslint-disable-next-line react-hooks/exhaustive-deps\r\n  }, [debouncedAppSearchString]);\r\n\r\n  useEffect(() => {\r\n    if (shouldInitializeOptions) {\r\n      fetchAppSearchData(inventoryAppStoreId);\r\n    }\r\n    // eslint-disable-next-line react-hooks/exhaustive-deps\r\n  }, [shouldInitializeOptions]);\r\n\r\n  const onOptionSelect = (option) => {\r\n    setShouldRenderOptions(false);\r\n    onChange(option.appId);\r\n    setSelectedOption(option);\r\n    setSearchString('');\r\n    onChangeCallback?.(option.appName);\r\n  };\r\n\r\n  const renderAppCard = (option, isEditable) => {\r\n    const content = (\r\n      <>\r\n        <div className={classNames.optionInnerWrapper}>\r\n          <img className={classNames.optionCardImgIcon} src={option.iconImageUrl} alt={option.appName} />\r\n          <Body1Strong block className={classNames.optionCardTitle}>\r\n            {option.appName}\r\n          </Body1Strong>\r\n        </div>\r\n        <div className={classNames.optionInnerWrapperLower}>\r\n          <Caption1 className={classNames.optionCardAppId}>{option.appId}</Caption1>\r\n        </div>\r\n      </>\r\n    );\r\n\r\n    if (!isEditable) {\r\n      return (\r\n        <Card appearance=\"outline\" className={classNames.optionCardWrapper}>\r\n          {content}\r\n        </Card>\r\n      );\r\n    }\r\n    return (\r\n      <Card className={mergeClasses(classNames.optionCardWrapper, classNames.optionCardSelectable)} onClick={() => onOptionSelect(option)}>\r\n        {content}\r\n      </Card>\r\n    );\r\n  };\r\n\r\n  const [\r\n    shouldRenderSearchInput,\r\n    shouldRenderAppPreviewForExistingInventory,\r\n    shouldRenderAppOptionsDropdown,\r\n    shouldRenderSelectedAppPreview,\r\n  ] = useMemo(\r\n    () => [!isEditMode, selectedOption, !isEditMode && shouldRenderOptions, !isEditMode && selectedOption && !shouldRenderOptions],\r\n    // eslint-disable-next-line react-hooks/exhaustive-deps\r\n    [isEditMode, appOptions, shouldRenderOptions, selectedOption]\r\n  );\r\n\r\n  return (\r\n    <>\r\n      {isSaving && (\r\n        <Skeleton>\r\n          <SkeletonItem />\r\n        </Skeleton>\r\n      )}\r\n      <div className={isSaving ? classNames.isHiding : classNames.containerWrapper}>\r\n        {shouldRenderSearchInput && (\r\n          <Input\r\n            id=\"connectAppId\"\r\n            value={searchString}\r\n            placeholder={formatMessage(messages.appSearchFieldPlaceholder)}\r\n            onClick={() => setShouldRenderOptions(true)}\r\n            disabled={false}\r\n            onChange={(_, data) => setSearchString(data.value.toUpperCase())}\r\n            contentBefore={\r\n              <img className={classNames.appSearchIcon} src={SearchIcon} alt={formatMessage(messages.appSearchFieldPlaceholder)} />\r\n            }\r\n            onBlur={(e) => {\r\n              if (selectedOption && appOptions.length === 0) {\r\n                setShouldRenderOptions(false);\r\n              }\r\n            }}\r\n            contentAfter={isSearching ? <Spinner size=\"tiny\" /> : undefined}\r\n          />\r\n        )}\r\n\r\n        {isEditMode ? (shouldRenderAppPreviewForExistingInventory && renderAppCard(selectedOption, false)) || <Spinner /> : <></>}\r\n\r\n        {shouldRenderAppOptionsDropdown && appOptions.length > 0 && (\r\n          <Card ref={optionMenuRef} className={classNames.optionsWrapper}>\r\n            {appOptions.map((option) => renderAppCard(option, true))}\r\n          </Card>\r\n        )}\r\n\r\n        {(shouldRenderSelectedAppPreview && renderAppCard(selectedOption, false)) || <></>}\r\n      </div>\r\n    </>\r\n  );\r\n};\r\n\r\nexport default injectIntlAndObserver<ConnectAppDropdownProps>(ConnectAppDropdown);\r\n","import {\r\n  Body1,\r\n  Button,\r\n  Caption1,\r\n  Checkbox,\r\n  Dropdown,\r\n  Field,\r\n  FluentProvider,\r\n  InfoLabel,\r\n  Input,\r\n  Label,\r\n  LabelProps,\r\n  MessageBar,\r\n  Skeleton,\r\n  SkeletonItem,\r\n  Text,\r\n  mergeClasses,\r\n  webLightTheme,\r\n} from '@fluentui/react-components';\r\nimport React from 'react';\r\nimport { InjectedIntlProps, injectIntl } from 'react-intl';\r\nimport { getAppStore, onHelpInfoCalloutOpened } from '../../../../../../../@data';\r\nimport { FormItem, FormState } from '../../../../../../../components/Form';\r\nimport { HelpcenterInfoBubbleV2 } from '../../../../../../../components/HelpcenterInfoBubbleV2';\r\nimport messages from '../messages';\r\nimport ConnectAppDropdown from './ConnectAppDropdown';\r\nimport { useAppPropertyDetailPageStyles } from './styles';\r\n\r\ntype AppPropertyDetailFormProps = {\r\n  mode: FormState;\r\n  appName: string;\r\n  isAppNameInputDisabled: boolean;\r\n  onAppNameChange: (value: string) => void;\r\n  appUrl: string;\r\n  isAppUrlInputDisabled: boolean;\r\n  onAppUrlChange: (value: string) => void;\r\n  appSearchString: string;\r\n  onAppSearchStringChange: (value: string) => void;\r\n  appAgreement: boolean;\r\n  onAppAgreementChange: (value: boolean) => void;\r\n  appSellerId: string;\r\n  onAppSellerIdChange: (value: string) => void;\r\n  inventoryAppStoreId: string;\r\n  onInventoryAppStoreIdChange: (value: string) => void;\r\n  isSaving: boolean;\r\n  errorState: { appSellerId?: string; appName?: string; appUrl?: string };\r\n};\r\n\r\ntype AppPropertyDetaulFormType = React.FC<AppPropertyDetailFormProps & InjectedIntlProps>;\r\n\r\nconst AppPropertyDetailForm: AppPropertyDetaulFormType = ({\r\n  intl: { formatMessage },\r\n  onAppNameChange,\r\n  appName,\r\n  isAppNameInputDisabled,\r\n  onAppUrlChange,\r\n  appUrl,\r\n  isAppUrlInputDisabled,\r\n  appAgreement,\r\n  onAppAgreementChange,\r\n  appSellerId,\r\n  onAppSellerIdChange,\r\n  inventoryAppStoreId,\r\n  onInventoryAppStoreIdChange,\r\n  isSaving,\r\n  errorState,\r\n}) => {\r\n  const classNames = useAppPropertyDetailPageStyles();\r\n  const isEditMode = window.location.pathname.includes('editApp');\r\n  const { helpInfo, locale } = getAppStore();\r\n  const renderSkeleton = () => (\r\n    <Skeleton>\r\n      <SkeletonItem />\r\n    </Skeleton>\r\n  );\r\n\r\n  return (\r\n    <>\r\n      <FluentProvider theme={webLightTheme}>\r\n        <FormItem>\r\n          <Body1>{formatMessage(messages.appPlatformInfo)}</Body1>\r\n        </FormItem>\r\n\r\n        <FormItem id=\"appInventoryPlatform\">\r\n          <Text block className={mergeClasses(classNames.textTitle, classNames.sectionTitleOffset)}>\r\n            {formatMessage(messages.appPlatformTitleLabel)}\r\n          </Text>\r\n          <Dropdown className={classNames.platformDropdown} placeholder={formatMessage(messages.appPlatformWindowsUWPLabel)} disabled />\r\n        </FormItem>\r\n\r\n        <FormItem id=\"appInventoryConnectAppId\">\r\n          <Field\r\n            label={{\r\n              children: (_: unknown, slotProps: LabelProps) => (\r\n                <Label className={classNames.sectionTitleOffset}>\r\n                  {formatMessage(messages.appPlatformConnectLiveAppTitleLabel)}\r\n                  <Button\r\n                    className={classNames.infoButton}\r\n                    appearance=\"transparent\"\r\n                    onClick={() => onHelpInfoCalloutOpened('pop_PCv4_UniversalBlockSetting', locale)}\r\n                  >\r\n                    <InfoLabel info={<HelpcenterInfoBubbleV2 html={helpInfo} />} />\r\n                  </Button>\r\n                </Label>\r\n              ),\r\n            }}\r\n            aria-required={true}\r\n            className={classNames.sectionTitle}\r\n          >\r\n            <ConnectAppDropdown inventoryAppStoreId={inventoryAppStoreId} onChange={onInventoryAppStoreIdChange} isSaving={isSaving} />\r\n          </Field>\r\n        </FormItem>\r\n\r\n        <FormItem id=\"appInventoryName\">\r\n          <Field\r\n            label={formatMessage(messages.appNameFieldLabel)}\r\n            required={true}\r\n            aria-required={true}\r\n            className={classNames.sectionTitle}\r\n            {...(errorState.appName && { validationMessage: errorState.appName, validationState: 'error' })}\r\n          >\r\n            {isSaving ? (\r\n              renderSkeleton()\r\n            ) : (\r\n              <Input\r\n                id=\"appInventoryName\"\r\n                value={appName}\r\n                placeholder={formatMessage(messages.appNameFieldPlaceholder)}\r\n                disabled={isAppNameInputDisabled}\r\n                onChange={(_, data) => onAppNameChange(data.value.slice(0, 200))} // limit to 200 characters\r\n              />\r\n            )}\r\n          </Field>\r\n        </FormItem>\r\n\r\n        {!isEditMode && (\r\n          <FormItem id=\"appInventorySellerId\">\r\n            <Field\r\n              label={{\r\n                children: (_: unknown, slotProps: LabelProps) => (\r\n                  <Label className={classNames.sectionTitleOffset}>\r\n                    {formatMessage(messages.appSellerIdFieldLabel)}\r\n                    <Button\r\n                      className={classNames.infoButton}\r\n                      appearance=\"transparent\"\r\n                      onClick={() => onHelpInfoCalloutOpened('pop_PCv4_SiteLevel', locale)}\r\n                    >\r\n                      <InfoLabel info={<HelpcenterInfoBubbleV2 html={helpInfo} />} />\r\n                    </Button>\r\n                  </Label>\r\n                ),\r\n              }}\r\n              aria-required={true}\r\n              className={classNames.sectionTitle}\r\n              {...(errorState.appSellerId && { validationMessage: errorState.appSellerId, validationState: 'error' })}\r\n            >\r\n              {isSaving ? (\r\n                renderSkeleton()\r\n              ) : (\r\n                <Input\r\n                  id=\"appInventorySellerId\"\r\n                  value={appSellerId}\r\n                  placeholder={formatMessage(messages.appSellerIdFieldPlaceholder)}\r\n                  disabled={isAppNameInputDisabled}\r\n                  onChange={(_, data) => onAppSellerIdChange(data.value)}\r\n                />\r\n              )}\r\n            </Field>\r\n          </FormItem>\r\n        )}\r\n\r\n        <FormItem id=\"appInventoryUrl\">\r\n          <Field\r\n            className={classNames.sectionTitle}\r\n            label={formatMessage(messages.appUrlFieldLabel)}\r\n            required={true}\r\n            aria-required={true}\r\n            {...(errorState.appUrl && { validationMessage: errorState.appUrl, validationState: 'error' })}\r\n          >\r\n            {isSaving ? (\r\n              renderSkeleton()\r\n            ) : (\r\n              <Input\r\n                type=\"url\"\r\n                contentBefore={<span className={classNames.urlPrefix}>https://</span>}\r\n                id=\"appInventoryUrl\"\r\n                value={appUrl}\r\n                placeholder={formatMessage(messages.appUrlFieldPlaceholder)}\r\n                disabled={isAppUrlInputDisabled}\r\n                onChange={(_, data) => onAppUrlChange(data.value)}\r\n              />\r\n            )}\r\n          </Field>\r\n        </FormItem>\r\n\r\n        {!isEditMode && (\r\n          <>\r\n            <Field label={formatMessage(messages.appAgreement)} required={true} aria-required={true} className={classNames.sectionTitle} />\r\n            <Caption1 block className={classNames.agreementContent}>\r\n              {formatMessage(messages.appAgreementSection1)}\r\n            </Caption1>\r\n            <Caption1 block className={classNames.agreementContent}>\r\n              {formatMessage(messages.appAgreementSection2)}\r\n            </Caption1>\r\n            {isSaving ? (\r\n              <div className={classNames.skeletonWrapper}>{renderSkeleton()}</div>\r\n            ) : (\r\n              <Checkbox\r\n                className={classNames.agreementTitle}\r\n                id=\"appInventoryAgreement\"\r\n                checked={appAgreement}\r\n                label={formatMessage(messages.appAgreementCheckboxLabel)}\r\n                onChange={(ev, data) => onAppAgreementChange(!!data.checked)}\r\n              />\r\n            )}\r\n            <MessageBar className={classNames.infoMsgBar} intent=\"info\">\r\n              <Caption1>{formatMessage(messages.coopaTnCInfo)}</Caption1>\r\n            </MessageBar>\r\n          </>\r\n        )}\r\n      </FluentProvider>\r\n    </>\r\n  );\r\n};\r\n\r\nexport default injectIntl(AppPropertyDetailForm);\r\n","import { Body1, Body1Strong, Body2, Button, Card, Divider, FluentProvider, webLightTheme } from '@fluentui/react-components';\r\nimport React from 'react';\r\nimport { useCMUIHelpExperience } from '../../../../../../../hooks/useCMUIHelpExperience';\r\nimport { IRouterWithIntl, injectRouterWithIntl } from '../../../../../../../utils';\r\nimport { getTythonAppAdunitCreationRoute } from '../../../../../../../utils/routeUtils';\r\nimport messages from '../messages';\r\nimport CreateAppIcon from '../resources/CreateAppIcon.svg';\r\nimport { useAppPropertyFinishPageStyles } from './styles';\r\n\r\ntype FinishPageType = React.FC<IRouterWithIntl>;\r\n\r\nconst FinishPage: FinishPageType = ({ intl: { formatMessage }, history }) => {\r\n  const { CMUIPopupArticleByIdAnchor } = useCMUIHelpExperience();\r\n  const classNames = useAppPropertyFinishPageStyles();\r\n  return (\r\n    <>\r\n      <FluentProvider theme={webLightTheme}>\r\n        <div className={classNames.root}>\r\n          <Body1 className={classNames.content} block>\r\n            {formatMessage(messages.finishPageExpectNextContent1)}\r\n          </Body1>\r\n          <br />\r\n          <Body1 className={classNames.content} block>\r\n            {formatMessage(messages.finishPageExpectNextContent2)}\r\n          </Body1>\r\n          <Body1 block>\r\n            <CMUIPopupArticleByIdAnchor query=\"ext07504\" name={formatMessage(messages.finishPageExpectNextContentHelpLink)} />\r\n          </Body1>\r\n          <Divider className={classNames.divider} />\r\n          <Body2 className={classNames.title} block>\r\n            {formatMessage(messages.finishPageExpectNextTitle2)}\r\n          </Body2>\r\n          <br />\r\n          <Card>\r\n            <div className={classNames.actionDivWrapper}>\r\n              <img src={CreateAppIcon} alt={formatMessage(messages.finishPageCardTitle)} />\r\n              <div>\r\n                <Body1Strong block className={classNames.cardTitle}>\r\n                  {formatMessage(messages.finishPageCardTitle)}\r\n                </Body1Strong>\r\n                <Body1 block className={classNames.content}>\r\n                  {formatMessage(messages.finishPageCardContent)}\r\n                </Body1>\r\n                <Button onClick={() => history.push(getTythonAppAdunitCreationRoute())}>\r\n                  <Body1Strong>{formatMessage(messages.finishPageActionButtonLabel)}</Body1Strong>\r\n                </Button>\r\n              </div>\r\n            </div>\r\n          </Card>\r\n        </div>\r\n      </FluentProvider>\r\n    </>\r\n  );\r\n};\r\n\r\nexport default injectRouterWithIntl(FinishPage);\r\n","import { useEffect, useMemo, useState } from 'react';\r\nimport { Log } from '../../../../../../../logging/src';\r\nimport { InventoryPlatformType, Property, listEntity, postEntity, putEntity } from '../../../../../../@data';\r\nimport { PropertyServingConfigs } from '../../../../../../@data/store/schema/models/ServingConfigs';\r\nimport { fetchPropertyById } from '../../../@data/services/PropertyService';\r\nimport messages from './messages';\r\n\r\nenum ErrorType {\r\n  SellerIdDoesNotMatchApp = 'SellerIdDoesNotMatchApp',\r\n  PropertyNameAlreadyExists = 'PropertyNameAlreadyExists',\r\n}\r\n\r\nconst useCreateTythonAppProperty = ({ mode, propertyId, publisher, userContext, formatMessage }) => {\r\n  const [appName, setAppName] = useState<string>('');\r\n  const [appUrl, setAppUrl] = useState<string>('');\r\n  const [appSearchString, setAppSearchString] = useState<string>('');\r\n  const [appAgreement, setAppAgreement] = useState<boolean>(false);\r\n  const [appSellerId, setAppSellerId] = useState<string>('');\r\n  const [isPropertyLoading, setIsPropertyLoading] = useState<boolean>(false);\r\n  const [inventoryAppStoreId, setInventoryAppStoreId] = useState<string>(''); // TODO: update type\r\n  const [rawProperty, setRawProperty] = useState<Property | undefined>(undefined); // TODO: update type\r\n  const [rawPropertyServingConfigs, setRawPropertyServingConfigs] = useState<PropertyServingConfigs[] | undefined>(undefined);\r\n  const [isSaving, setIsSaving] = useState<boolean>(false);\r\n  const [errorState, setErrorState] = useState({ appSellerId: undefined, appName: undefined, appUrl: undefined });\r\n  const isEditMode = propertyId;\r\n\r\n  // clean up app url error state when updating url\r\n  useEffect(() => {\r\n    setErrorState({ ...errorState, appUrl: undefined });\r\n    // eslint-disable-next-line react-hooks/exhaustive-deps\r\n  }, [appUrl]);\r\n\r\n  // clean up app seller id error state when updating seller id\r\n  useEffect(() => {\r\n    setErrorState({ ...errorState, appSellerId: undefined });\r\n    // eslint-disable-next-line react-hooks/exhaustive-deps\r\n  }, [appSellerId]);\r\n\r\n  // clean up app name error state when updating app name\r\n  useEffect(() => {\r\n    setErrorState({ ...errorState, appName: undefined });\r\n    // eslint-disable-next-line react-hooks/exhaustive-deps\r\n  }, [appName]);\r\n\r\n  const handlePropertyErrors = (error) => {\r\n    try {\r\n      const nextErrorState = { ...errorState };\r\n      const errorMsg = Error(error).message.toString();\r\n      if (errorMsg.includes(ErrorType.SellerIdDoesNotMatchApp)) {\r\n        nextErrorState.appSellerId = formatMessage(messages.errorSellerIdDoesNotMatchApp);\r\n      }\r\n      if (errorMsg.includes(ErrorType.PropertyNameAlreadyExists)) {\r\n        nextErrorState.appName = formatMessage(messages.errorPropertyNameAlreadyExists);\r\n      }\r\n      setErrorState(nextErrorState);\r\n    } catch (e) {\r\n      Log.error(`error in app inventory view: ${error}`);\r\n    }\r\n  };\r\n\r\n  const onAppPropertyFormSubmit = async (action) => {\r\n    let shouldRedirect = false;\r\n    if (!isEditMode && rawPropertyServingConfigs?.some((p) => p.url === appUrl)) {\r\n      setErrorState({ ...errorState, appUrl: formatMessage(messages.errorInventoryAppUrlAlreadyExists) });\r\n      return;\r\n    }\r\n    if (!isEditMode && appUrl.includes('/')) {\r\n      setErrorState({ ...errorState, appUrl: formatMessage(messages.appPropertyInvalidUrl) });\r\n      return;\r\n    }\r\n\r\n    try {\r\n      setIsSaving(true);\r\n      const appProperty = {\r\n        name: appName,\r\n        className: 'properties',\r\n        approvalStatus: 'Approved',\r\n        approvalStatusComments: '',\r\n        publisherId: publisher.id,\r\n        url: appUrl,\r\n        MicrosoftStoreAppId: inventoryAppStoreId,\r\n        COPPAAgreement: appAgreement,\r\n        inventoryPlatformType: InventoryPlatformType.UWP,\r\n        associatedAdUnitIds: [],\r\n        clarityType: 1,\r\n        PartnerCenterSellerId: appSellerId,\r\n      };\r\n\r\n      if (isEditMode) {\r\n        const property = await putEntity(\r\n          [publisher],\r\n          ({ ...appProperty, id: rawProperty?.id!, etag: rawProperty?.eTag } as unknown) as Property,\r\n          userContext,\r\n          Property\r\n        );\r\n        setRawProperty(property);\r\n        action();\r\n      } else {\r\n        const property = await postEntity([publisher], Property, (appProperty as unknown) as Property, userContext);\r\n        const appPropertyId = property.id;\r\n        shouldRedirect = true;\r\n        window.location.replace(`/ad-management/${publisher.id}/property/editApp/${appPropertyId}?step=1`);\r\n        return Promise.resolve();\r\n      }\r\n    } catch (error) {\r\n      handlePropertyErrors(error);\r\n    } finally {\r\n      !shouldRedirect && setIsSaving(false);\r\n    }\r\n  };\r\n\r\n  const isValidAppInventoryCreation = useMemo(() => {\r\n    if (isEditMode) {\r\n      return appName.trim() !== '' && appUrl.trim() !== '' && inventoryAppStoreId.trim() !== '';\r\n    }\r\n    return appName.trim() !== '' && appUrl.trim() !== '' && appSellerId.trim() !== '' && inventoryAppStoreId.trim() !== '';\r\n  }, [appName, appUrl, appSellerId, inventoryAppStoreId, isEditMode]);\r\n\r\n  useEffect(() => {\r\n    async function fetchPropertyData() {\r\n      setIsPropertyLoading(true);\r\n      if (isEditMode) {\r\n        try {\r\n          const fetchPropertyPromise = fetchPropertyById(publisher, propertyId, userContext);\r\n          const propertyConfigsPromise = listEntity([publisher], userContext, PropertyServingConfigs);\r\n          const [savedProperty, propertyConfigs] = await Promise.all([fetchPropertyPromise, propertyConfigsPromise]);\r\n          const propertyConfig = propertyConfigs.find((p) => p.propertyId.toString() === propertyId);\r\n          setRawPropertyServingConfigs(propertyConfigs);\r\n          setAppName(savedProperty.name! as string);\r\n          setAppUrl(savedProperty.url! as string);\r\n          setInventoryAppStoreId(propertyConfig?.MicrosoftStoreAppId! as string);\r\n          setRawProperty(savedProperty);\r\n          setAppAgreement(savedProperty.COPPAAgreement! as boolean);\r\n        } catch (error) {\r\n          handlePropertyErrors(error);\r\n        } finally {\r\n          setIsPropertyLoading(false);\r\n        }\r\n      } else {\r\n        try {\r\n          const propertyServingConfigs = await listEntity([publisher], userContext, PropertyServingConfigs);\r\n          setRawPropertyServingConfigs(propertyServingConfigs);\r\n        } catch (error) {\r\n          console.error(error);\r\n        } finally {\r\n          setIsPropertyLoading(false);\r\n        }\r\n      }\r\n    }\r\n    fetchPropertyData();\r\n    // eslint-disable-next-line react-hooks/exhaustive-deps\r\n  }, []);\r\n\r\n  const appPropertyFormProps = {\r\n    mode,\r\n    appName: isPropertyLoading ? formatMessage(messages.loadingLabel) : appName,\r\n    onAppNameChange: setAppName,\r\n    isAppNameInputDisabled: isPropertyLoading,\r\n    appUrl: isPropertyLoading ? formatMessage(messages.loadingLabel) : appUrl,\r\n    onAppUrlChange: setAppUrl,\r\n    isAppUrlInputDisabled: isPropertyLoading || isEditMode,\r\n    appSearchString,\r\n    onAppSearchStringChange: setAppSearchString,\r\n    appAgreement,\r\n    onAppAgreementChange: setAppAgreement,\r\n    appSellerId,\r\n    onAppSellerIdChange: setAppSellerId,\r\n    inventoryAppStoreId,\r\n    onInventoryAppStoreIdChange: setInventoryAppStoreId,\r\n    isSaving,\r\n    errorState,\r\n  };\r\n\r\n  return {\r\n    isValidAppInventoryCreation,\r\n    appPropertyFormProps,\r\n    onAppPropertyFormSubmit,\r\n  };\r\n};\r\n\r\nexport default useCreateTythonAppProperty;\r\n","import React from 'react';\r\nimport { InjectedIntlProps } from 'react-intl';\r\nimport { RouteComponentProps } from 'react-router-dom';\r\nimport { getAppStore } from '../../../../../../@data';\r\nimport { FormState } from '../../../../../../components/Form';\r\nimport { DetailPageWithStepper } from '../../../../../../layout/DetailPageWithStepper/DetailPageWithStepper';\r\nimport { IStepperStep } from '../../../../../../layout/DetailPageWithStepper/DetailPageWithStepper.types';\r\nimport { injectRouterAndIntlWithObserver } from '../../../../../../utils';\r\nimport { getTythonInventoryPage } from '../../../../../../utils/routeUtils';\r\nimport { AdsTextPage } from '../CreateTythonProperty/components/AdsTextPage';\r\nimport AppPropertyDetailForm from './components/AppPropertyDetailForm';\r\nimport FinishPage from './components/FinishPage';\r\nimport messages from './messages';\r\nimport useCreateTythonAppProperty from './useCreateTythonAppProperty';\r\n\r\ntype CreateTythonAppPropertyProps = {\r\n  mode: FormState;\r\n};\r\n\r\ntype CreateTythonAppPropertyType = React.FC<CreateTythonAppPropertyProps & InjectedIntlProps & RouteComponentProps>;\r\n\r\nconst CreateTythonAppProperty: CreateTythonAppPropertyType = ({ mode, intl: { formatMessage }, history, location, match }) => {\r\n  const { id: propertyId } = match.params as { id: string };\r\n  const { publisher, userContext } = getAppStore();\r\n  const { appPropertyFormProps, isValidAppInventoryCreation, onAppPropertyFormSubmit } = useCreateTythonAppProperty({\r\n    mode,\r\n    propertyId,\r\n    publisher,\r\n    userContext,\r\n    formatMessage,\r\n  });\r\n\r\n  const steps: IStepperStep[] = [\r\n    {\r\n      name: formatMessage(messages.CreateSiteStep),\r\n      title: formatMessage(messages.CreateSiteStepFormTitle),\r\n      component: <AppPropertyDetailForm {...appPropertyFormProps} />,\r\n      // helpId: 'pop_PCv4_UniversalBlockSetting', //TODO: update help id for App inventory\r\n      isNextDisabled: !!!isValidAppInventoryCreation || appPropertyFormProps.isSaving,\r\n      isStepDirty: propertyId !== undefined, // TODO: update dirty flag\r\n      onNext: onAppPropertyFormSubmit,\r\n    },\r\n    {\r\n      name: formatMessage(messages.AdsTxtCreationStep),\r\n      title: formatMessage(messages.AdsTxtCreationStepTitle),\r\n      isStepDirty: propertyId !== undefined,\r\n      component: <AdsTextPage history={history} location={location} match={match} />,\r\n    },\r\n    {\r\n      name: formatMessage(messages.finishStepperTittle),\r\n      title: formatMessage(messages.getCodeTitle),\r\n      component: <FinishPage />,\r\n      isStepDirty: propertyId !== undefined,\r\n      onNext: () => history.push(getTythonInventoryPage(true)),\r\n    },\r\n  ];\r\n\r\n  return (\r\n    <>\r\n      <DetailPageWithStepper\r\n        openStep={window.location.search.includes('step=1') ? 1 : 0}\r\n        process={mode === FormState.MultiStepCreation ? formatMessage(messages.processNameCreate) : formatMessage(messages.processNameEdit)}\r\n        steps={steps}\r\n        pageMode={mode}\r\n        backToBase={() => history.goBack()}\r\n        history={history}\r\n        location={location}\r\n        match={match}\r\n      />\r\n    </>\r\n  );\r\n};\r\n\r\nexport default injectRouterAndIntlWithObserver(CreateTythonAppProperty);\r\n","import * as React from 'react';\r\nimport { useEffect } from 'react';\r\nimport { InjectedIntlProps } from 'react-intl';\r\nimport { Route, RouteComponentProps, Switch } from 'react-router-dom';\r\nimport { isTythonSelfServeUser } from '../../../@data';\r\nimport { RoutePrefix } from '../../../Routes';\r\nimport { FormState } from '../../../components/Form';\r\nimport { injectIntlWithObserver } from '../../../utils';\r\nimport { RouteName } from '../@data';\r\nimport { onCurrentRouteChanged } from '../@data/actions';\r\nimport './@data/orchestrators';\r\nimport { CreateProperty } from './Create/variations/CreateNonTythonProperty';\r\nimport CreateTythonAppProperty from './Create/variations/CreateTythonAppProperty';\r\nimport { CreateTythonProperty } from './Create/variations/CreateTythonProperty';\r\nimport { ManagePage } from './Manage';\r\n\r\nexport const PropertyPage = injectIntlWithObserver((props: RouteComponentProps & InjectedIntlProps) => {\r\n  const isTythonUser = isTythonSelfServeUser();\r\n\r\n  const getRedirectionPage = (operation: FormState, componentProps: RouteComponentProps, isAppProperty = false) => {\r\n    if (isTythonUser) {\r\n      const mode = operation === FormState.Create ? FormState.MultiStepCreation : FormState.MultiStepEdit;\r\n      if (isAppProperty) {\r\n        // @ts-ignore\r\n        return <CreateTythonAppProperty mode={mode} />;\r\n      }\r\n      return <CreateTythonProperty {...componentProps} mode={mode} />;\r\n    } else {\r\n      const mode = operation === FormState.Create ? FormState.Create : FormState.Edit;\r\n      return <CreateProperty {...componentProps} mode={mode} />;\r\n    }\r\n  };\r\n\r\n  useEffect(() => {\r\n    onCurrentRouteChanged(RouteName.property, props.intl.formatMessage);\r\n    // eslint-disable-next-line react-hooks/exhaustive-deps\r\n  }, []);\r\n\r\n  return (\r\n    <React.Fragment>\r\n      <Switch>\r\n        <Route exact path={`${props.match.url}`} component={ManagePage} />\r\n        <Route\r\n          exact\r\n          path={`/${RoutePrefix.adManagement}/:publisherId/${RouteName[RouteName.property]}/create`}\r\n          render={(componentProps) => getRedirectionPage(FormState.Create, componentProps)}\r\n        />\r\n        <Route\r\n          path={`/${RoutePrefix.adManagement}/:publisherId/${RouteName[RouteName.property]}/create/:id`}\r\n          render={(componentProps) => getRedirectionPage(FormState.Create, componentProps)}\r\n        />\r\n        <Route\r\n          path={`/${RoutePrefix.adManagement}/:publisherId/${RouteName[RouteName.property]}/edit/:id`}\r\n          render={(componentProps) => getRedirectionPage(FormState.Edit, componentProps)}\r\n        />\r\n        <Route\r\n          path={`/${RoutePrefix.adManagement}/:publisherId/${RouteName[RouteName.property]}/createApp`}\r\n          render={(componentProps) => getRedirectionPage(FormState.Create, componentProps, true)}\r\n        />\r\n        <Route\r\n          path={`/${RoutePrefix.adManagement}/:publisherId/${RouteName[RouteName.property]}/editApp/:id`}\r\n          render={(componentProps) => getRedirectionPage(FormState.Create, componentProps, true)}\r\n        />\r\n      </Switch>\r\n    </React.Fragment>\r\n  );\r\n});\r\n","import { isPublisherRejectionUnappealable, isTythonSelfServeUser } from '../../../../@data';\r\nimport AppMessages from '../../../../App.messages';\r\nimport { IRoute } from '../../../../Routes.types';\r\nimport { BaseReportPage } from '../../../report/BaseReportPage';\r\nimport { AccountPage } from '../../Account';\r\nimport { LazyAdBlockPage } from '../../AdBlock/LazyAdBlockPage';\r\nimport { AdFilterPage } from '../../AdFilter/AdFilterPage';\r\nimport { AdQualityPage } from '../../AdQuality/AdQualityPage';\r\nimport { TythonAppManagePage } from '../../Ads/Manage';\r\nimport { AdunitPage } from '../../Adunit/AdunitPage';\r\nimport { ChannelPage } from '../../Channel/ChannelPage';\r\nimport { HomePage } from '../../Home/HomePage';\r\nimport { TythonInventoryManagePage } from '../../Inventory/Manage';\r\nimport { PropertyPage } from '../../Property';\r\nimport { RouteName } from '../store/store';\r\n\r\nexport function getRoutes(formatMessage): IRoute[] {\r\n  const routes: IRoute[] = [\r\n    {\r\n      key: RouteName[RouteName.adunit],\r\n      text: formatMessage(AppMessages.navAdUnits),\r\n      icon: 'AdUnit',\r\n      disabled: isPublisherRejectionUnappealable(),\r\n      component: AdunitPage,\r\n    },\r\n    {\r\n      key: RouteName[RouteName.channel],\r\n      text: formatMessage(AppMessages.navChannels),\r\n      icon: 'AdUnitChannel',\r\n      component: ChannelPage,\r\n    },\r\n    {\r\n      key: RouteName[RouteName.adfilter],\r\n      text: formatMessage(AppMessages.navAdFilters),\r\n      icon: 'Filter',\r\n      component: AdFilterPage,\r\n    },\r\n    {\r\n      key: RouteName[RouteName.property],\r\n      text: isTythonSelfServeUser() ? formatMessage(AppMessages.navSites) : formatMessage(AppMessages.navProperties),\r\n      icon: isTythonSelfServeUser() ? 'Favicon' : 'BusinessHoursSign',\r\n      component: PropertyPage,\r\n      disabled: isPublisherRejectionUnappealable(),\r\n    },\r\n    {\r\n      key: RouteName[RouteName.adquality],\r\n      text: formatMessage(AppMessages.navAdQuality),\r\n      icon: 'Blocked',\r\n      component: AdQualityPage,\r\n    },\r\n  ];\r\n\r\n  if (isTythonSelfServeUser()) {\r\n    routes.unshift({\r\n      key: RouteName[RouteName.home],\r\n      text: formatMessage(AppMessages.navHome),\r\n      icon: 'Home',\r\n      component: HomePage,\r\n    });\r\n    routes.push({\r\n      key: RouteName[RouteName.inventory],\r\n      text: formatMessage(AppMessages.navInventory),\r\n      icon: 'Inventory',\r\n      disabled: isPublisherRejectionUnappealable(),\r\n      component: (TythonInventoryManagePage as unknown) as React.ComponentType,\r\n    });\r\n    routes.push({\r\n      key: RouteName[RouteName.ads],\r\n      text: formatMessage(AppMessages.navAds),\r\n      icon: 'Ads',\r\n      disabled: isPublisherRejectionUnappealable(),\r\n      component: (TythonAppManagePage as unknown) as React.ComponentType,\r\n    });\r\n    routes.push({\r\n      key: RouteName[RouteName.adblock],\r\n      text: formatMessage(AppMessages.navAdBlocks),\r\n      disabled: isPublisherRejectionUnappealable(),\r\n      icon: 'AdUnitBlock',\r\n      component: LazyAdBlockPage,\r\n    });\r\n    routes.push({\r\n      key: RouteName[RouteName.dashboard],\r\n      text: formatMessage(AppMessages.navReports),\r\n      icon: 'CRMReport',\r\n      disabled: isPublisherRejectionUnappealable(),\r\n      component: BaseReportPage,\r\n    });\r\n    routes.push({\r\n      key: RouteName[RouteName.publisherProfile],\r\n      text: formatMessage(AppMessages.navAccount),\r\n      icon: 'AccountManagement',\r\n      component: AccountPage,\r\n      disabled: isPublisherRejectionUnappealable(),\r\n    });\r\n  }\r\n\r\n  return routes;\r\n}\r\n","import React from 'react';\r\nimport { LazyComponent } from '../../../components/LazyComponents';\r\n// @ts-ignore\r\nconst ProfilePageLazy = React.lazy(() => import('./ProfilePage'));\r\n\r\nexport function LazyProfilePage() {\r\n  return <LazyComponent lazyComponent={<ProfilePageLazy />} />;\r\n}\r\n","import { action } from 'satcheljs';\r\nimport { UserInvitation } from '../../../../../../@data';\r\n\r\nexport const onUserInvited = action('onUserInvited');\r\n\r\nexport const onResendUserInvitation = action('onResendUserInvitation', (userInvite: UserInvitation) => ({ userInvite }));\r\n\r\nexport const onDeleteUserInvitation = action('onDeleteUserInvitation', (userInvite: UserInvitation) => ({ userInvite }));\r\n\r\nexport const loadUserInvitations = action('loadUserInvitations');\r\n\r\nexport const dismissUserInvitePanel = action('dismissUserInvitePanel');\r\n","import { createStore } from 'satcheljs';\r\nimport { IStringDictionary, User, UserInvitation } from '../../../../../@data';\r\nimport { EN_LOCALE_KEY, LOCAL_STORAGE_LOCALE } from '../../../../../constants';\r\nimport { IUserInviteViewModel } from './schema/UserInviteViewModel';\r\n\r\nexport interface IUserInvitationState {\r\n  userInviteErrors?: IStringDictionary;\r\n  userInvitePanelOpen: boolean;\r\n  selectedItem?: User;\r\n  userInvitations: UserInvitation[];\r\n  userInviteViewModel: IUserInviteViewModel;\r\n}\r\n\r\nexport const getUserInvitationStore = createStore<IUserInvitationState>('UserInvitationState', {\r\n  userInviteErrors: {},\r\n  userInvitePanelOpen: false,\r\n  userInvitations: [],\r\n  userInviteViewModel: {\r\n    recipientPreferredLang: localStorage.getItem(LOCAL_STORAGE_LOCALE) ?? EN_LOCALE_KEY,\r\n  },\r\n});\r\n","import { mutatorAction } from 'satcheljs';\r\nimport { Log } from '../../../../../../../logging/src';\r\nimport { IStringDictionary, UserInvitation } from '../../../../../../@data';\r\nimport { getUserInvitationStore } from '../store';\r\n\r\nexport const setUserInvitationErrors = mutatorAction('setUserInvitationErrors', (errors?: IStringDictionary) => {\r\n  getUserInvitationStore().userInviteErrors = errors;\r\n});\r\n\r\nexport const setUserInvitationPanelStatus = mutatorAction('setUserInvitationPanelStatus', (isPanelOpen: boolean) => {\r\n  getUserInvitationStore().userInvitePanelOpen = isPanelOpen;\r\n});\r\n\r\nexport const setUserInvitations = mutatorAction('setUserInvitations', (userInvitations?: UserInvitation[]) => {\r\n  getUserInvitationStore().userInvitations = userInvitations || [];\r\n});\r\n\r\nexport const updateUserInvitationExpiry = mutatorAction('updateUserInvitationExpiry', (id: number, date: Date) => {\r\n  const { userInvitations } = getUserInvitationStore();\r\n\r\n  const userInvitation = userInvitations?.find((ui) => ui.id === id);\r\n  if (userInvitation) {\r\n    userInvitation.expirationDate = date;\r\n\r\n    getUserInvitationStore().userInvitations = [...userInvitations];\r\n    Log.info(`Updated user invitation expiry date to ${userInvitation.expirationDate}`);\r\n  }\r\n});\r\n","import { mutatorAction } from 'satcheljs';\r\nimport { UserRole } from '../../../../../../@data';\r\nimport { getUserInvitationStore } from '../store';\r\n\r\nexport const setFirstName = mutatorAction('setFirstName', (value: string) => {\r\n  getUserInvitationStore().userInviteViewModel.firstName = value;\r\n});\r\n\r\nexport const setLastName = mutatorAction('setLastName', (value: string) => {\r\n  getUserInvitationStore().userInviteViewModel.lastName = value;\r\n});\r\n\r\nexport const updateEmail = mutatorAction('updateEmail', (value: string) => {\r\n  getUserInvitationStore().userInviteViewModel.email = value;\r\n});\r\n\r\nexport const updateRecipientPreferredLanguage = mutatorAction('updateRecipientPreferredLanguage', (value: string) => {\r\n  getUserInvitationStore().userInviteViewModel.recipientPreferredLang = value;\r\n});\r\n\r\nexport const updateRole = mutatorAction('updateRole', (value: UserRole) => {\r\n  getUserInvitationStore().userInviteViewModel.userRole = value;\r\n});\r\n\r\nexport const onFormCleared = mutatorAction('onFormCleared', () => {\r\n  getUserInvitationStore().userInviteViewModel = {};\r\n});\r\n","import { defineMessages } from 'react-intl';\r\n\r\nexport default defineMessages({\r\n  invite: {\r\n    id: 'userInvitations.invite',\r\n    defaultMessage: 'Invite',\r\n  },\r\n  inviteUser: {\r\n    id: 'userInvitations.inviteUser',\r\n    defaultMessage: 'Invite user',\r\n  },\r\n  resend: {\r\n    id: 'userInvitations.resend',\r\n    defaultMessage: 'Resend',\r\n  },\r\n  send: {\r\n    id: 'userInvitations.send',\r\n    defaultMessage: 'Send invite',\r\n  },\r\n  expirationDate: {\r\n    id: 'userInvitations.expirationDate',\r\n    defaultMessage: 'Invitation expiration date',\r\n  },\r\n  panelDescription: {\r\n    id: 'userInvitations.panelDescription',\r\n    defaultMessage: `Provide the email address and select the user role for the person you'd like to invite.`,\r\n  },\r\n  inviteUserEmailTitle: {\r\n    id: 'userInvitations.inviteUserEmailTitle',\r\n    defaultMessage: 'Email',\r\n  },\r\n  recipientPreferredLanguageTitle: {\r\n    id: 'userInvitations.inviteUserRecipientPreferredLangTitle',\r\n    defaultMessage: \"Recipient's preferred language\",\r\n  },\r\n  emailPlaceholder: {\r\n    id: 'userInvitations.emailPlaceholder',\r\n    defaultMessage: 'Email address',\r\n  },\r\n  pending: {\r\n    id: 'userInvitations.pending',\r\n    defaultMessage: 'Pending',\r\n  },\r\n  expired: {\r\n    id: 'userInvitations.expired',\r\n    defaultMessage: 'Expired',\r\n  },\r\n  firstNameTitle: {\r\n    id: 'userInvitations.firstNameTitle',\r\n    defaultMessage: 'First name',\r\n  },\r\n  lastNameTitle: {\r\n    id: 'userInvitations.lastNameTitle',\r\n    defaultMessage: 'Last name',\r\n  },\r\n  zeroInvitationsTitle: {\r\n    id: 'userInvitations.zeroInvitationsTitle',\r\n    defaultMessage: 'No pending invitations',\r\n  },\r\n  failedToFetchInvitedUser: {\r\n    id: 'userInvitations.failedToFetchInvitedUserDetails',\r\n    defaultMessage: 'Failed to fetch invited user details',\r\n  },\r\n  invalidState: {\r\n    id: 'userInvitations.invalidState',\r\n    defaultMessage: 'You have arrived in an invalid state, please re-login or report if issue persists.',\r\n  },\r\n  resendEmailInviteFailed: {\r\n    id: 'resendEmailInvite.failed',\r\n    defaultMessage: 'We’re unable to resend the user invitation email at this time. Please try again later.',\r\n  },\r\n  userInvitedNewUserSuccessfully: {\r\n    id: 'userInvitations.invitedNewUserSuccessfully',\r\n    defaultMessage: 'Invited new user successfully!',\r\n  },\r\n  userInvitedNewUserFailed: {\r\n    id: 'userInvitations.inviteNewUserFailed',\r\n    defaultMessage: 'Submitting the user invitation form caught an error \"{error}\"',\r\n  },\r\n  userInvitationResendSuccessfully: {\r\n    id: 'userInvitations.resendInvitationSuccessfully',\r\n    defaultMessage: 'Resend user invitation to {email} successfully',\r\n  },\r\n  userInvitationInvalidState: {\r\n    id: 'userInvitation.deleteUserInvalidState',\r\n    defaultMessage: 'You have arrived in an invalid state, please report.',\r\n  },\r\n  userInvitationDeletedInvitationSuccessfully: {\r\n    id: 'userInvitation.deletedUserInvitationSuccessfully',\r\n    defaultMessage: 'Deleted invitation for {email} successfully',\r\n  },\r\n  userInvitationDeletingUserInvitation: {\r\n    id: 'userInvitation.deletingUserInvitation',\r\n    defaultMessage: 'Deleting user invitation',\r\n  },\r\n  userInvitationInvalidStateReportOrLogin: {\r\n    id: 'userInvitation.userInvitationInvalidStateReportOrLogin',\r\n    defaultMessage: 'You have arrived in an invalid state, please re-login or report if issue persists.',\r\n  },\r\n  userInviteFormFailed: {\r\n    id: 'userInvitation.userInviteFormFailed',\r\n    defaultMessage: 'User Invite form has {count} errors, please fix them to continue.',\r\n  },\r\n});\r\n","import { orchestrator } from 'satcheljs';\r\nimport { Log } from '../../../../../../../logging/src';\r\nimport { deleteEntity, getAppStore, UserInvitation } from '../../../../../../@data';\r\nimport {\r\n  showErrorToastNotification,\r\n  showInfoToastNotification,\r\n  showSuccessToastNotification,\r\n} from '../../../../../../@data/mutatorActions';\r\nimport messages from '../../UserInvitations.messages';\r\nimport { onDeleteUserInvitation } from '../actions/userInvitationActions';\r\nimport { setUserInvitations } from '../mutatorActions';\r\nimport { getUserInvitationStore } from '../store';\r\n\r\norchestrator(onDeleteUserInvitation, async ({ userInvite }) => {\r\n  const { publisher, userContext } = getAppStore();\r\n\r\n  if (userInvite && publisher && userContext) {\r\n    const entityInstance = new UserInvitation(userInvite.id);\r\n\r\n    try {\r\n      showInfoToastNotification({ textMessageDescriptor: messages.userInvitationDeletingUserInvitation });\r\n      await deleteEntity([publisher, entityInstance], undefined, userContext);\r\n\r\n      const { userInvitations } = getUserInvitationStore();\r\n      setUserInvitations(userInvitations.filter((ui) => ui.id !== userInvite.id));\r\n\r\n      showSuccessToastNotification({\r\n        textMessageDescriptor: messages.userInvitationDeletedInvitationSuccessfully,\r\n        intlMessageValues: { email: userInvite.email },\r\n      });\r\n    } catch (e) {\r\n      Log.error(e);\r\n    }\r\n  } else {\r\n    showErrorToastNotification({ textMessageDescriptor: messages.userInvitationInvalidState });\r\n  }\r\n});\r\n","import { orchestrator } from 'satcheljs';\r\nimport { dismissUserInvitePanel } from '../actions/userInvitationActions';\r\nimport { onFormCleared, setUserInvitationErrors, setUserInvitationPanelStatus } from '../mutatorActions';\r\n\r\norchestrator(dismissUserInvitePanel, () => {\r\n  setUserInvitationPanelStatus(false);\r\n  setUserInvitationErrors();\r\n  onFormCleared();\r\n});\r\n","import { action } from 'satcheljs';\r\nimport { UserRole } from '../../../../../../@data';\r\n\r\nexport const onUserRoleChanged = action('onUserRoleChanged', (role: UserRole) => ({ role }));\r\n\r\nexport const onUsersDeleted = action(\r\n  'onUsersDeleted',\r\n  (\r\n    formatMessage: (\r\n      messageDescriptor: ReactIntl.FormattedMessage.MessageDescriptor,\r\n      values?:\r\n        | {\r\n            [key: string]: ReactIntl.MessageValue;\r\n          }\r\n        | undefined\r\n    ) => string\r\n  ) => ({ formatMessage })\r\n);\r\n\r\nexport const loadUsers = action('loadUsers');\r\n","import { orchestrator } from 'satcheljs';\r\nimport { Log } from '../../../../../../../logging/src';\r\nimport { getAppStore, listEntity, onLoadingChanged, showErrorToastNotification, UserInvitation } from '../../../../../../@data';\r\nimport { loadUsers } from '../../../Users/@data/actions/usersTabActions';\r\nimport messages from '../../UserInvitations.messages';\r\nimport { setUserInvitations } from '../mutatorActions';\r\n\r\norchestrator(loadUsers, async () => {\r\n  const { userContext, publisher } = getAppStore();\r\n  Log.debug('Loading user invitations');\r\n\r\n  if (userContext && publisher) {\r\n    try {\r\n      onLoadingChanged(true);\r\n\r\n      const userInvitations = await listEntity([publisher], userContext, UserInvitation);\r\n      setUserInvitations(userInvitations);\r\n    } catch (e) {\r\n      showErrorToastNotification({ textMessageDescriptor: messages.failedToFetchInvitedUser });\r\n    } finally {\r\n      onLoadingChanged(false);\r\n    }\r\n  } else {\r\n    showErrorToastNotification({ textMessageDescriptor: messages.invalidState });\r\n  }\r\n});\r\n","import { MessageBarType } from '@fluentui/react';\r\nimport { orchestrator } from 'satcheljs';\r\nimport { Log } from '../../../../../../../logging/src';\r\nimport {\r\n  getAppStore,\r\n  onNotificationChanged,\r\n  postEntity,\r\n  showErrorToastNotification,\r\n  showSuccessToastNotification,\r\n  UserInvitation,\r\n  UserInvitationResend,\r\n} from '../../../../../../@data';\r\nimport messages from '../../UserInvitations.messages';\r\nimport { onResendUserInvitation } from '../actions/userInvitationActions';\r\nimport { updateUserInvitationExpiry } from '../mutatorActions';\r\n\r\norchestrator(onResendUserInvitation, async (msg) => {\r\n  const { publisher, userContext } = getAppStore();\r\n\r\n  if (publisher && userContext) {\r\n    const newInvite = new UserInvitation();\r\n    newInvite.id = msg.userInvite.id;\r\n    try {\r\n      await postEntity([publisher, newInvite], UserInvitationResend, newInvite, userContext);\r\n\r\n      /* Updating the user invitation expiry date on successful resend */\r\n      updateUserInvitationExpiry(msg.userInvite.id, new Date(new Date().setDate(new Date().getDate() + 30)));\r\n\r\n      showSuccessToastNotification({\r\n        textMessageDescriptor: messages.userInvitationResendSuccessfully,\r\n        intlMessageValues: { email: msg.userInvite.email },\r\n      });\r\n    } catch (e) {\r\n      Log.error(`Failed to resend email invite, error: ${JSON.stringify(e)}`);\r\n      showErrorToastNotification({ textMessageDescriptor: messages.resendEmailInviteFailed });\r\n    }\r\n  } else {\r\n    onNotificationChanged({\r\n      messageBarType: MessageBarType.error,\r\n      textMessageDescriptor: messages.userInvitationInvalidStateReportOrLogin,\r\n    });\r\n  }\r\n});\r\n","import { MessageBarType } from '@fluentui/react';\r\nimport { orchestrator } from 'satcheljs';\r\nimport {\r\n  getAppStore,\r\n  onNotificationChanged,\r\n  onSavingChanged,\r\n  postEntity,\r\n  showErrorToastNotification,\r\n  showSuccessToastNotification,\r\n  UserInvitation,\r\n  UserInvitationType,\r\n  UserRole,\r\n  UserRoleEntityType,\r\n} from '../../../../../../@data';\r\nimport { reverseLocales } from '../../../../../../config/locale';\r\nimport { validateSchema } from '../../../../../../utils';\r\nimport { userRoleToRoleIdMap } from '../../../utils/userRoleUtils';\r\nimport messages from '../../UserInvitations.messages';\r\nimport { onUserInvited } from '../actions/userInvitationActions';\r\nimport { onFormCleared, setUserInvitationErrors, setUserInvitationPanelStatus, setUserInvitations } from '../mutatorActions';\r\nimport { UserInviteErrorModel } from '../schema/UserInviteErrorModel';\r\nimport { getUserInvitationStore } from '../store';\r\n\r\norchestrator(onUserInvited, async () => {\r\n  const { publisher, account, userContext } = getAppStore();\r\n  const userInvite = getUserInvitationStore().userInviteViewModel;\r\n\r\n  if (publisher && userContext) {\r\n    try {\r\n      onSavingChanged(true);\r\n      try {\r\n        await validateSchema(UserInviteErrorModel(), userInvite);\r\n\r\n        setUserInvitationErrors();\r\n      } catch (e) {\r\n        setUserInvitationErrors(e);\r\n        onNotificationChanged({\r\n          messageBarType: MessageBarType.error,\r\n          textMessageDescriptor: messages.userInviteFormFailed,\r\n          intlMessageValues: { count: Object.keys(e).length },\r\n        });\r\n        return;\r\n      }\r\n\r\n      if (userInvite.userRole) {\r\n        const entity = new UserInvitation();\r\n        entity.firstName = userInvite.firstName;\r\n        entity.lastName = userInvite.lastName;\r\n        entity.email = userInvite.email;\r\n        entity.userInvitationType = UserInvitationType.PubCenterSelfServeUser;\r\n        entity.lcid =\r\n          userInvite.recipientPreferredLang && reverseLocales[userInvite.recipientPreferredLang]\r\n            ? reverseLocales[userInvite.recipientPreferredLang]\r\n            : 1033;\r\n        entity.entityRoles = [\r\n          {\r\n            entityId: publisher.id,\r\n            userRole: userInvite.userRole,\r\n            entityType: UserRoleEntityType.Customer,\r\n          },\r\n        ];\r\n\r\n        if ([UserRole.AccountManager, UserRole.ReportUser].includes(userInvite.userRole) && account) {\r\n          entity.entityRoles.push({\r\n            entityId: account.id,\r\n            userRole: userInvite.userRole,\r\n            entityType: UserRoleEntityType.Account,\r\n          });\r\n        }\r\n\r\n        const response = await postEntity([publisher], UserInvitation, entity, userContext);\r\n\r\n        if (response) {\r\n          const date = new Date();\r\n          // Updating the expiry date to 30 days from the time of invitaion sent\r\n          date.setDate(date.getDate() + 30);\r\n          entity.expirationDate = date;\r\n          const userRoleId = userInvite.userRole ? userRoleToRoleIdMap.get(userInvite.userRole) : undefined;\r\n          entity.roleIds = userRoleId ? [userRoleId] : [];\r\n          entity.id = response;\r\n\r\n          const { userInvitations } = getUserInvitationStore();\r\n          setUserInvitations([...userInvitations, entity]);\r\n\r\n          setUserInvitationPanelStatus(false);\r\n          onFormCleared();\r\n        }\r\n\r\n        showSuccessToastNotification({ textMessageDescriptor: messages.userInvitedNewUserSuccessfully });\r\n      }\r\n    } catch (e) {\r\n      showErrorToastNotification({ textMessageDescriptor: messages.userInvitedNewUserFailed, intlMessageValues: { error: e } });\r\n    } finally {\r\n      onSavingChanged(false);\r\n    }\r\n  } else {\r\n    onNotificationChanged({\r\n      messageBarType: MessageBarType.error,\r\n      textMessageDescriptor: messages.userInvitationInvalidStateReportOrLogin,\r\n    });\r\n  }\r\n});\r\n","import { mixed, object, string } from 'yup';\r\nimport { UserRole } from '../../../../../../@data';\r\nimport { IUserInviteViewModel } from './UserInviteViewModel';\r\n\r\nexport function UserInviteErrorModel() {\r\n  return object<IUserInviteViewModel>().shape({\r\n    firstName: string().trim().required(),\r\n    lastName: string().trim().required(),\r\n    email: string().email().required(),\r\n    recipientPreferredLang: string().trim().required(),\r\n    userRole: mixed()\r\n      .oneOf([\r\n        UserRole.AccountManager,\r\n        UserRole.AdView,\r\n        UserRole.ListManager,\r\n        UserRole.PublisherAdmin,\r\n        UserRole.ReportUser,\r\n        UserRole.SuperAdmin,\r\n      ])\r\n      .required(),\r\n  });\r\n}\r\n","import { getTheme, mergeStyleSets } from '@fluentui/react';\r\nimport { IPubCenterFonts, IPubcenterSpacing } from '../../../../theme';\r\n\r\nexport interface IUserManagementStyles {\r\n  root: string;\r\n  actionButtonsWrapper: string;\r\n  roleDesc: string;\r\n}\r\n\r\nexport const getClassNames = (): IUserManagementStyles => {\r\n  const theme = getTheme();\r\n  const spacing = theme.spacing as IPubcenterSpacing;\r\n  const fonts = theme.fonts as IPubCenterFonts;\r\n\r\n  return mergeStyleSets({\r\n    root: {\r\n      marginTop: spacing.size32,\r\n    },\r\n    actionButtonsWrapper: {\r\n      display: 'flex',\r\n      gap: spacing.size8,\r\n      flexWrap: 'wrap',\r\n    },\r\n    roleDesc: {\r\n      paddingLeft: spacing.size24,\r\n      paddingTop: spacing.size4,\r\n      ...fonts.size12,\r\n      color: theme.palette.neutralSecondary,\r\n    },\r\n  });\r\n};\r\n","import UserMessages from '../UserManagement.messages';\r\n\r\nimport { ActionButton } from '@fluentui/react';\r\nimport React from 'react';\r\nimport { UserInvitation } from '../../../../@data';\r\nimport AppMessages from '../../../../App.messages';\r\nimport { GridCell } from '../../../../components/GridWithCustomColumns';\r\nimport { IGridV2Column } from '../../../../layout/GridPageV2';\r\nimport { getClassNames } from '../UserManagement.styles';\r\nimport { getUserRoleMapping } from '../utils/userRoleUtils';\r\nimport { onDeleteUserInvitation, onResendUserInvitation } from './@data/actions/userInvitationActions';\r\nimport UserInvitationsMessages from './UserInvitations.messages';\r\n\r\nexport function getColumns(intl, longestEmailLength): IGridV2Column[] {\r\n  const { formatMessage } = intl;\r\n  const { actionButtonsWrapper } = getClassNames();\r\n  const { pending, expirationDate, expired, resend } = UserInvitationsMessages;\r\n\r\n  const getUserInvitationExpiryStatus = (invite: UserInvitation) => {\r\n    const currTime = new Date();\r\n    const expiryDate = invite.expirationDate ? new Date(invite.expirationDate) : undefined;\r\n    return expiryDate ? formatMessage(expiryDate > currTime ? pending : expired) : '';\r\n  };\r\n\r\n  return [\r\n    {\r\n      columnOrder: 0,\r\n      key: 'email',\r\n      name: formatMessage(UserMessages.email),\r\n      ariaLabel: formatMessage(AppMessages.sortByColumnHeaderTooltipLabel, { columnName: formatMessage(UserMessages.email) }),\r\n      minWidth: longestEmailLength,\r\n      maxWidth: longestEmailLength + 10,\r\n      isSearchable: true,\r\n      isVisible: true,\r\n      isExportable: true,\r\n      isResizable: true,\r\n      sortableValue: (invite: UserInvitation) => invite.email ?? '',\r\n      onRender: (invite: UserInvitation) => <GridCell>{invite.email}</GridCell>,\r\n    },\r\n    {\r\n      columnOrder: 1,\r\n      key: 'role',\r\n      name: formatMessage(UserMessages.role),\r\n      ariaLabel: formatMessage(AppMessages.sortByColumnHeaderTooltipLabel, { columnName: formatMessage(UserMessages.role) }),\r\n      minWidth: 100,\r\n      maxWidth: 150,\r\n      isSearchable: true,\r\n      isVisible: true,\r\n      isExportable: true,\r\n      isResizable: true,\r\n      sortableValue: (invite: UserInvitation) => getUserRoleMapping(invite.roleIds, formatMessage),\r\n      onRender: (invite: UserInvitation) => <GridCell>{getUserRoleMapping(invite.roleIds, formatMessage)}</GridCell>,\r\n    },\r\n    {\r\n      columnOrder: 2,\r\n      key: 'status',\r\n      name: formatMessage(AppMessages.status),\r\n      ariaLabel: formatMessage(AppMessages.sortByColumnHeaderTooltipLabel, { columnName: formatMessage(AppMessages.status) }),\r\n      minWidth: 50,\r\n      maxWidth: 100,\r\n      isSearchable: true,\r\n      isVisible: true,\r\n      isExportable: true,\r\n      isResizable: true,\r\n      sortableValue: getUserInvitationExpiryStatus,\r\n      onRender: (invite: UserInvitation) => <GridCell>{getUserInvitationExpiryStatus(invite)}</GridCell>,\r\n    },\r\n    {\r\n      columnOrder: 3,\r\n      key: 'expirationDate',\r\n      name: formatMessage(expirationDate),\r\n      ariaLabel: formatMessage(AppMessages.sortByColumnHeaderTooltipLabel, { columnName: formatMessage(expirationDate) }),\r\n      minWidth: 100,\r\n      maxWidth: 150,\r\n      isVisible: true,\r\n      isExportable: true,\r\n      isResizable: true,\r\n      sortableValue: (invite: UserInvitation) => new Date(invite.expirationDate as Date).toISOString() ?? '',\r\n      onRender: (invite: UserInvitation) => {\r\n        const expiryDate = invite.expirationDate ? new Date(invite.expirationDate) : undefined;\r\n        const expiryDateString = expiryDate ? expiryDate.toISOString().split('T')[0] : '';\r\n        return <GridCell>{expiryDateString}</GridCell>;\r\n      },\r\n    },\r\n    {\r\n      columnOrder: 4,\r\n      key: 'actions',\r\n      name: formatMessage(UserMessages.actions),\r\n      minWidth: 180,\r\n      maxWidth: 200,\r\n      isVisible: true,\r\n      isExportable: false,\r\n      suppressSorting: true,\r\n      isPadded: true,\r\n      isResizable: true,\r\n      onRender: (invite: UserInvitation) => {\r\n        return (\r\n          <div className={actionButtonsWrapper}>\r\n            <ActionButton iconProps={{ iconName: 'Send' }} onClick={(ev) => onResendUserInvitation(invite)}>\r\n              {formatMessage(resend)}\r\n            </ActionButton>\r\n            <ActionButton iconProps={{ iconName: 'delete' }} onClick={() => onDeleteUserInvitation(invite)}>\r\n              {formatMessage(AppMessages.delete)}\r\n            </ActionButton>\r\n          </div>\r\n        );\r\n      },\r\n    },\r\n  ];\r\n}\r\n","import { getTheme, mergeStyleSets } from '@fluentui/react';\r\nimport { IPubcenterSpacing } from '../../theme';\r\nimport { ICommonStyleProps } from '../types';\r\n\r\ntype StyleProperties = 'panelTitleStyle' | 'panelFooterButtonsWrapper' | 'panelDescription';\r\ntype SettingsPageStyles = Record<StyleProperties, string>;\r\n\r\nexport const getStyles = (props: ICommonStyleProps): SettingsPageStyles => {\r\n  const { palette } = props.theme;\r\n  const spacing = props.theme.spacing as IPubcenterSpacing;\r\n\r\n  return mergeStyleSets({\r\n    panelTitleStyle: {\r\n      marginTop: spacing.size16,\r\n    },\r\n    panelFooterButtonsWrapper: {\r\n      display: 'flex',\r\n      gap: spacing.size8,\r\n    },\r\n    panelDescription: {\r\n      padding: `${spacing.size16} 0`,\r\n      color: palette.neutralSecondary,\r\n    },\r\n  });\r\n};\r\n\r\nexport function getPanelClassNames<PropType>(props?: PropType): SettingsPageStyles {\r\n  return getStyles({ theme: getTheme(), ...props });\r\n}\r\n","import { IChoiceGroupOption } from '@fluentui/react';\r\nimport React from 'react';\r\nimport { UserRole } from '../../../../@data';\r\nimport UserManagementMessages from '../UserManagement.messages';\r\nimport { getClassNames } from '../UserManagement.styles';\r\n\r\nexport function getUserRoleChoiceGroupOptions(intl) {\r\n  const { formatMessage } = intl;\r\n  const { roleDesc } = getClassNames();\r\n  const { superAdmin, accountManager, reportUser, superAdminDesc, accountManagerDesc, reportUserDesc } = UserManagementMessages;\r\n\r\n  function renderChoiceGroupOption(props, render, description) {\r\n    return (\r\n      <React.Fragment>\r\n        {render?.(props)}\r\n        <div className={roleDesc}>{formatMessage(description)}</div>\r\n      </React.Fragment>\r\n    );\r\n  }\r\n\r\n  const choiceGroupOptions: IChoiceGroupOption[] = [\r\n    {\r\n      key: UserRole.SuperAdmin,\r\n      text: formatMessage(superAdmin),\r\n      onRenderField: (props, render) => renderChoiceGroupOption(props, render, superAdminDesc),\r\n    },\r\n    {\r\n      key: UserRole.AccountManager,\r\n      text: formatMessage(accountManager),\r\n      onRenderField: (props, render) => renderChoiceGroupOption(props, render, accountManagerDesc),\r\n    },\r\n    {\r\n      key: UserRole.ReportUser,\r\n      text: formatMessage(reportUser),\r\n      onRenderField: (props, render) => renderChoiceGroupOption(props, render, reportUserDesc),\r\n    },\r\n  ];\r\n\r\n  return choiceGroupOptions;\r\n}\r\n","import { ChoiceGroup, DefaultButton, Dropdown, Panel, PanelType, PrimaryButton, TextField } from '@fluentui/react';\r\nimport React, { useEffect } from 'react';\r\nimport { UserRole, getAppStore } from '../../../../@data';\r\nimport { getSupportedLanguagesDropDownOptions } from '../../../../@data/utils/supportedLanguages';\r\nimport AppMessages from '../../../../App.messages';\r\nimport { FormItem } from '../../../../components/Form';\r\nimport { getPanelClassNames } from '../../../../styles/PanelStyles';\r\nimport { injectIntlAndObserver } from '../../../../utils';\r\nimport UserManagementMessages from '../UserManagement.messages';\r\nimport { getUserRoleChoiceGroupOptions } from '../components/UserRoleChoiceGroupOptions';\r\nimport { onUserInvited } from './@data/actions/userInvitationActions';\r\nimport { setFirstName, setLastName, updateEmail, updateRecipientPreferredLanguage, updateRole } from './@data/mutatorActions';\r\nimport { setUserInvitationPanelStatus } from './@data/mutatorActions/onUserInvitationTabChanged';\r\nimport { getUserInvitationStore } from './@data/store';\r\nimport messages from './UserInvitations.messages';\r\n\r\nconst USER_INVITE_PANEL_WIDTH = '466px';\r\nconst PANEL_FIELD_WIDTH = 416;\r\n\r\nexport const UserInvitePanel = injectIntlAndObserver(function UserInvitePanelComponent({ intl }) {\r\n  const { formatMessage } = intl;\r\n  const {\r\n    inviteUser,\r\n    panelDescription,\r\n    inviteUserEmailTitle,\r\n    emailPlaceholder,\r\n    send,\r\n    firstNameTitle,\r\n    lastNameTitle,\r\n    recipientPreferredLanguageTitle,\r\n  } = messages;\r\n  const { locale } = getAppStore();\r\n  const { panelDescription: panelDesc, panelFooterButtonsWrapper } = getPanelClassNames();\r\n  const { userInvitePanelOpen, userInviteErrors } = getUserInvitationStore();\r\n\r\n  const { firstName, lastName, email, userRole, recipientPreferredLang } = getUserInvitationStore().userInviteViewModel;\r\n  const onDismiss = () => setUserInvitationPanelStatus(false);\r\n\r\n  useEffect(() => {\r\n    updateRecipientPreferredLanguage(locale);\r\n  }, [locale]);\r\n\r\n  const isFormComplete = () => {\r\n    if (firstName?.trim() !== '' && lastName?.trim() !== '' && email?.trim() !== '' && recipientPreferredLang?.trim() !== '' && userRole) {\r\n      return true;\r\n    } else {\r\n      return false;\r\n    }\r\n  };\r\n\r\n  const onUserLanguageChanged = (ev, option) => {\r\n    updateRecipientPreferredLanguage(option.key);\r\n  };\r\n\r\n  if (!userInvitePanelOpen) {\r\n    return null;\r\n  }\r\n\r\n  return (\r\n    <React.Fragment>\r\n      <Panel\r\n        headerText={formatMessage(inviteUser)}\r\n        isOpen={userInvitePanelOpen}\r\n        type={PanelType.custom}\r\n        customWidth={USER_INVITE_PANEL_WIDTH}\r\n        onDismiss={onDismiss}\r\n        closeButtonAriaLabel={formatMessage(AppMessages.close)}\r\n        isFooterAtBottom={true}\r\n        onRenderFooterContent={() => {\r\n          return (\r\n            <div className={panelFooterButtonsWrapper}>\r\n              <PrimaryButton text={formatMessage(send)} disabled={!isFormComplete()} onClick={onUserInvited} />\r\n              <DefaultButton text={formatMessage(AppMessages.cancel)} onClick={onDismiss} />\r\n            </div>\r\n          );\r\n        }}\r\n      >\r\n        <React.Fragment>\r\n          <div className={panelDesc}>{formatMessage(panelDescription)}</div>\r\n          <FormItem formWidth={PANEL_FIELD_WIDTH}>\r\n            <TextField\r\n              required\r\n              label={formatMessage(firstNameTitle)}\r\n              ariaLabel={formatMessage(firstNameTitle)}\r\n              value={firstName}\r\n              onChange={(_, value: string) => setFirstName(value)}\r\n              errorMessage={userInviteErrors?.firstName}\r\n            />\r\n          </FormItem>\r\n          <FormItem formWidth={PANEL_FIELD_WIDTH}>\r\n            <TextField\r\n              required\r\n              label={formatMessage(lastNameTitle)}\r\n              ariaLabel={formatMessage(lastNameTitle)}\r\n              value={lastName}\r\n              onChange={(_, value: string) => setLastName(value)}\r\n              errorMessage={userInviteErrors?.lastName}\r\n            />\r\n          </FormItem>\r\n          <FormItem formWidth={PANEL_FIELD_WIDTH}>\r\n            <TextField\r\n              label={formatMessage(inviteUserEmailTitle)}\r\n              placeholder={formatMessage(emailPlaceholder)}\r\n              value={email}\r\n              onChange={(_, val: string) => updateEmail(val)}\r\n              errorMessage={userInviteErrors?.email}\r\n              required\r\n            />\r\n          </FormItem>\r\n          <FormItem formWidth={PANEL_FIELD_WIDTH}>\r\n            <Dropdown\r\n              label={formatMessage(recipientPreferredLanguageTitle)}\r\n              options={getSupportedLanguagesDropDownOptions(locale)}\r\n              onChange={onUserLanguageChanged}\r\n              selectedKey={recipientPreferredLang}\r\n              errorMessage={userInviteErrors?.recipientPreferredLang}\r\n              required\r\n            />\r\n          </FormItem>\r\n          <FormItem formWidth={PANEL_FIELD_WIDTH}>\r\n            <ChoiceGroup\r\n              label={formatMessage(UserManagementMessages.role)}\r\n              options={getUserRoleChoiceGroupOptions(intl)}\r\n              onChange={(_, option) => option && updateRole(option!.key as UserRole)}\r\n              defaultSelectedKey={userRole}\r\n            />\r\n          </FormItem>\r\n        </React.Fragment>\r\n      </Panel>\r\n    </React.Fragment>\r\n  );\r\n});\r\n","import { PrimaryButton } from '@fluentui/react';\r\nimport React from 'react';\r\nimport { injectIntl } from 'react-intl';\r\nimport { ZeroResults } from '../../../../components/ZeroResults/ZeroResults';\r\nimport desertImage from '../../AdBlock/resources/Desert.svg';\r\nimport { setUserInvitationPanelStatus } from './@data/mutatorActions';\r\nimport UserInvitationsMessages from './UserInvitations.messages';\r\n\r\nexport const ZeroInvitations = injectIntl(function ZeroInvitationsComponent({ intl: { formatMessage } }) {\r\n  return (\r\n    <>\r\n      <ZeroResults imageSrc={desertImage} title={formatMessage(UserInvitationsMessages.zeroInvitationsTitle)}>\r\n        <PrimaryButton\r\n          iconProps={{ iconName: 'Add' }}\r\n          text={formatMessage(UserInvitationsMessages.inviteUser)}\r\n          onClick={() => setUserInvitationPanelStatus(true)}\r\n        />\r\n      </ZeroResults>\r\n    </>\r\n  );\r\n});\r\n","import { PrimaryButton } from '@fluentui/react';\r\nimport React, { useEffect, useMemo } from 'react';\r\nimport { UserInvitation, getAppStore } from '../../../../@data';\r\nimport { useCanvasTextWidth } from '../../../../hooks';\r\nimport {\r\n  CommandBarActions,\r\n  Direction,\r\n  GridSelectionMode,\r\n  GridV2,\r\n  IBuildCommandBarProps,\r\n  IGridPageCommandBarItemProps,\r\n} from '../../../../layout/GridPageV2';\r\nimport { IRouterWithIntl, injectRouterAndIntlWithObserver } from '../../../../utils';\r\nimport { loadUserInvitations } from './@data/actions/userInvitationActions';\r\nimport './@data/mutatorActions';\r\nimport { setUserInvitationPanelStatus, setUserInvitations } from './@data/mutatorActions';\r\nimport './@data/orchestrators';\r\nimport { getUserInvitationStore } from './@data/store';\r\nimport { getColumns } from './UserInvitationColumns';\r\nimport UserInvitationsMessages from './UserInvitations.messages';\r\nimport { UserInvitePanel } from './UserInvitePanel';\r\nimport { ZeroInvitations } from './ZeroInvitations';\r\n\r\nexport interface IUserInvitationProps extends IRouterWithIntl {}\r\n\r\nexport const UserInvitationsTab = injectRouterAndIntlWithObserver(function UserInvitationsTabComponent(props: IUserInvitationProps) {\r\n  const { formatMessage } = props.intl;\r\n  const { publisher } = getAppStore();\r\n  const { userInvitations } = getUserInvitationStore();\r\n\r\n  const longestEmail = useMemo(\r\n    () => userInvitations?.map((user) => user.email || '').reduce((a, b) => (a.length > b.length ? a : b), '') || '',\r\n    [userInvitations]\r\n  );\r\n\r\n  useEffect(() => {\r\n    loadUserInvitations();\r\n    // eslint-disable-next-line react-hooks/exhaustive-deps\r\n  }, []);\r\n\r\n  const commandBarProps: IBuildCommandBarProps<UserInvitation> = {\r\n    includeActions: [CommandBarActions.searchBox],\r\n    getCustomCommandBarItems: () => {\r\n      const commandBarItems: IGridPageCommandBarItemProps[] = [\r\n        {\r\n          key: 'inviteUser',\r\n          placement: { direction: Direction.before },\r\n          commandBarButtonAs: () => (\r\n            <PrimaryButton\r\n              iconProps={{ iconName: 'Add' }}\r\n              text={formatMessage(UserInvitationsMessages.invite)}\r\n              onClick={() => setUserInvitationPanelStatus(true)}\r\n            />\r\n          ),\r\n          selectionModes: [GridSelectionMode.None],\r\n        },\r\n      ];\r\n\r\n      return commandBarItems;\r\n    },\r\n  };\r\n\r\n  return (\r\n    <React.Fragment>\r\n      <GridV2\r\n        {...props}\r\n        isGridReady={!!publisher}\r\n        entity={UserInvitation}\r\n        commandBarProps={userInvitations.length > 0 ? commandBarProps : undefined}\r\n        dataGridProps={{\r\n          gridV2Columns: getColumns(props.intl, useCanvasTextWidth(longestEmail)),\r\n          data: userInvitations,\r\n          setData: setUserInvitations,\r\n          renderZeroItemsComponent: <ZeroInvitations />,\r\n        }}\r\n        paginationProps={{\r\n          shouldGridHandlePagination: true,\r\n        }}\r\n      />\r\n      <UserInvitePanel {...props} />\r\n    </React.Fragment>\r\n  );\r\n});\r\n","import { getTheme, IButtonStyles, mergeStyleSets } from '@fluentui/react';\r\nimport { IPubcenterPalette, IPubcenterTheme } from '../../../theme';\r\nimport { ICommonStyleProps } from '../../types';\r\n\r\ntype StyleProperties =  'confirmation';\r\ntype PopupCardStyles = Record<StyleProperties, string>;\r\nexport const getStyles = (props: ICommonStyleProps): PopupCardStyles => {\r\n  const theme = props.theme as unknown as IPubcenterTheme;\r\n  const { spacing } = theme;\r\n\r\n  return mergeStyleSets({\r\n    confirmation: {\r\n      paddingBottom: spacing.size4,\r\n    },\r\n  });\r\n};\r\nexport function getClassNames<PropType>(props?: PropType): PopupCardStyles {\r\n  return getStyles({ theme: getTheme(), ...props });\r\n}\r\n\r\nexport const getPermanentDeleteButtonStyles = (): IButtonStyles => {\r\n  const palette = getTheme().palette as IPubcenterPalette;\r\n  const customStyles = {\r\n    backgroundColor: palette.redDark,\r\n    borderColor: palette.redDark,\r\n  };\r\n\r\n  return {\r\n    root: {\r\n      ...customStyles,\r\n    },\r\n    rootHovered: {\r\n      ...customStyles,\r\n    },\r\n    rootFocused: {\r\n      ...customStyles,\r\n    },\r\n    rootPressed: {\r\n      ...customStyles,\r\n    },\r\n  };\r\n};\r\n","import { DefaultButton, DialogFooter, PrimaryButton, TextField } from '@fluentui/react';\r\nimport React, { useState } from 'react';\r\nimport { FormattedMessage, InjectedIntlProps } from 'react-intl';\r\nimport AppMessages from '../../App.messages';\r\nimport { IDestructiveDialogLabelsProps } from '../../layout/GridPageV2';\r\nimport { injectIntlAndObserver } from '../../utils';\r\nimport { PopupCard } from './PopupCard';\r\nimport { getClassNames, getPermanentDeleteButtonStyles } from './PopupCard.styles';\r\n\r\nexport interface IDeleteConfirmationPopupProps extends InjectedIntlProps {\r\n  onDeleteClicked: () => void;\r\n  onDialogDismissed: () => void;\r\n  isOpen: boolean;\r\n  deleteLabels?: IDestructiveDialogLabelsProps;\r\n  confirmActionMessage?: FormattedMessage.MessageDescriptor;\r\n  deleteButtonText?: FormattedMessage.MessageDescriptor;\r\n}\r\n\r\nexport const DeleteConfirmationPopup = injectIntlAndObserver(function DeleteConfirmationPopupComp({\r\n  intl: { formatMessage },\r\n  onDeleteClicked,\r\n  onDialogDismissed,\r\n  isOpen,\r\n  deleteLabels,\r\n  confirmActionMessage,\r\n  deleteButtonText,\r\n}: IDeleteConfirmationPopupProps): JSX.Element | null {\r\n  const [confirmationText, setConfirmationText] = useState('');\r\n  const { confirmation } = getClassNames();\r\n\r\n  if (!isOpen) {\r\n    return null;\r\n  }\r\n\r\n  return (\r\n    <PopupCard\r\n      isShown={isOpen}\r\n      popUpTitle={formatMessage(deleteLabels?.title ?? AppMessages.deleteGenericTitle)}\r\n      popUpDescription={formatMessage(deleteLabels?.description ?? AppMessages.userDeleteWarning)}\r\n      onPopupDismiss={onDialogDismissed}\r\n    >\r\n      <React.Fragment>\r\n        <div className={confirmation}>{formatMessage(confirmActionMessage ?? AppMessages.confirmActionMessage)}</div>\r\n        <TextField value={confirmationText} onChange={(_, val: string) => setConfirmationText(val)} />\r\n        <DialogFooter>\r\n          <PrimaryButton\r\n            text={formatMessage(deleteButtonText ?? AppMessages.permanentDelete)}\r\n            disabled={confirmationText.toLowerCase() !== 'yes'}\r\n            onClick={() => {\r\n              onDeleteClicked();\r\n              onDialogDismissed();\r\n            }}\r\n            styles={getPermanentDeleteButtonStyles()}\r\n          />\r\n          <DefaultButton onClick={() => onDialogDismissed()} text={formatMessage(AppMessages.cancel)} />\r\n        </DialogFooter>\r\n      </React.Fragment>\r\n    </PopupCard>\r\n  );\r\n});\r\n","import { createStore } from 'satcheljs';\r\nimport { User } from '../../../../../@data';\r\n\r\nexport interface IUserManagementState {\r\n  roleChangePanelOpen: boolean;\r\n  selectedItem?: User;\r\n  users: User[];\r\n}\r\n\r\nexport const getUserManagementStore = createStore<IUserManagementState>('UserManagementState', {\r\n  roleChangePanelOpen: false,\r\n  users: [],\r\n});\r\n","import { mutatorAction } from 'satcheljs';\r\nimport { User } from '../../../../../../@data';\r\nimport { getUserManagementStore } from '../store';\r\n\r\nexport const setUserRoleChangePanelStatus = mutatorAction('setUserRoleChangePanelStatus', (isPanelOpen: boolean, selectedItem?: User) => {\r\n  getUserManagementStore().roleChangePanelOpen = isPanelOpen;\r\n  getUserManagementStore().selectedItem = selectedItem;\r\n});\r\n\r\nexport const setSelectedItem = mutatorAction('setSelectedItem', (selectedItem: User) => {\r\n  getUserManagementStore().selectedItem = selectedItem;\r\n});\r\n\r\nexport const setUsers = mutatorAction('setUsers', (users?: User[]) => {\r\n  getUserManagementStore().users = users || [];\r\n});\r\n\r\n// tslint:disable-next-line: no-any\r\nexport const updateUserRole = mutatorAction('updateUserRole', (user: User, updatedUser: any) => {\r\n  const { users } = getUserManagementStore();\r\n  const userToUpdate = users.find((item) => user.id === item.id);\r\n\r\n  if (userToUpdate) {\r\n    userToUpdate.userRoleDetails = updatedUser.userRoleDetails;\r\n    userToUpdate.userRoleDetailsETag = updatedUser.eTag;\r\n  }\r\n});\r\n","import { MessageBarType } from '@fluentui/react';\r\nimport { orchestrator } from 'satcheljs';\r\nimport {\r\n  deleteEntity,\r\n  getAppStore,\r\n  onNotificationChanged,\r\n  showErrorToastNotification,\r\n  showSuccessToastNotification,\r\n  User,\r\n} from '../../../../../../@data';\r\nimport { getSuccessNotificationDeleteItem } from '../../../../../../utils';\r\nimport messages from '../../../UserManagement.messages';\r\nimport { onUsersDeleted } from '../actions/usersTabActions';\r\nimport { setUsers } from '../mutatorActions';\r\nimport { getUserManagementStore } from '../store';\r\n\r\norchestrator(onUsersDeleted, async (msg) => {\r\n  const { publisher, userContext } = getAppStore();\r\n  const { selectedItem, users } = getUserManagementStore();\r\n\r\n  if (userContext && publisher && selectedItem) {\r\n    const entityInstance = new User(selectedItem.id);\r\n    try {\r\n      const result = await deleteEntity([publisher, entityInstance], undefined, userContext);\r\n\r\n      if (result && users) {\r\n        setUsers(users.filter((user) => user.id !== entityInstance.id));\r\n      }\r\n\r\n      showSuccessToastNotification({ text: getSuccessNotificationDeleteItem([selectedItem], entityInstance, msg.formatMessage) });\r\n    } catch (e) {\r\n      showErrorToastNotification({ textMessageDescriptor: messages.userManagementFailedToDeleteItem });\r\n    }\r\n  } else {\r\n    onNotificationChanged({\r\n      messageBarType: MessageBarType.error,\r\n      textMessageDescriptor: messages.userManagementInvalidState,\r\n    });\r\n  }\r\n});\r\n","import { MessageBarType } from '@fluentui/react';\r\nimport { orchestrator } from 'satcheljs';\r\nimport {\r\n  getAppStore,\r\n  listEntity,\r\n  onLoadingChanged,\r\n  onNotificationChanged,\r\n  showErrorToastNotification,\r\n  User,\r\n} from '../../../../../../@data';\r\nimport messages from '../../../UserManagement.messages';\r\nimport { loadUsers } from '../actions/usersTabActions';\r\nimport { setUsers } from '../mutatorActions';\r\n\r\norchestrator(loadUsers, async () => {\r\n  const { userContext, publisher } = getAppStore();\r\n\r\n  if (userContext && publisher) {\r\n    try {\r\n      onLoadingChanged(true);\r\n\r\n      const users = await listEntity([publisher], userContext, User, new URLSearchParams([['extendedInfo', 'true']]));\r\n      setUsers(users);\r\n    } catch (e) {\r\n      showErrorToastNotification({ textMessageDescriptor: messages.loadUserDetailsFailed });\r\n    } finally {\r\n      onLoadingChanged(false);\r\n    }\r\n  } else {\r\n    onNotificationChanged({\r\n      messageBarType: MessageBarType.error,\r\n      textMessageDescriptor: messages.userManagementInvalidState,\r\n    });\r\n  }\r\n});\r\n","import { MessageBarType } from '@fluentui/react';\r\nimport { orchestrator } from 'satcheljs';\r\nimport {\r\n  getAppStore,\r\n  onAuthLogout,\r\n  onNotificationChanged,\r\n  onSavingChanged,\r\n  patchEntity,\r\n  showErrorToastNotification,\r\n  showSuccessToastNotification,\r\n  User,\r\n  UserRole,\r\n  UserRoleEntityType,\r\n  UserRoleUpdate,\r\n} from '../../../../../../@data';\r\nimport messages from '../../../UserManagement.messages';\r\nimport { onUserRoleChanged } from '../actions/usersTabActions';\r\nimport { updateUserRole } from '../mutatorActions';\r\nimport { getUserManagementStore } from '../store';\r\n\r\norchestrator(onUserRoleChanged, async (msg) => {\r\n  const { publisher, account, userContext } = getAppStore();\r\n  const user = getUserManagementStore().selectedItem;\r\n\r\n  if (user && publisher && userContext) {\r\n    try {\r\n      onSavingChanged(true);\r\n\r\n      const entity = new UserRoleUpdate();\r\n\r\n      entity.eTag = user.userRoleDetailsETag;\r\n      entity.removedRoles = user.userRoleDetails || [];\r\n      entity.addedRoles = [\r\n        {\r\n          entityId: publisher.id,\r\n          userRole: msg.role,\r\n          entityType: UserRoleEntityType.Customer,\r\n        },\r\n      ];\r\n\r\n      if ([UserRole.AccountManager, UserRole.ReportUser].includes(msg.role) && account) {\r\n        entity.addedRoles.push({\r\n          entityId: account.id,\r\n          userRole: msg.role,\r\n          entityType: UserRoleEntityType.Account,\r\n        });\r\n      }\r\n\r\n      user.className = new User().className;\r\n      const response = await patchEntity([publisher, user], UserRoleUpdate, entity, userContext);\r\n\r\n      updateUserRole(user, response);\r\n\r\n      if (user.id === userContext.id) {\r\n        // User role has changed, so logout the user to provide different UX\r\n        onAuthLogout();\r\n      }\r\n\r\n      showSuccessToastNotification({\r\n        textMessageDescriptor: messages.editedUserRoleSuccessfully,\r\n        intlMessageValues: { username: user.username },\r\n      });\r\n    } catch (e) {\r\n      showErrorToastNotification({ textMessageDescriptor: messages.userRoleChangeFailed });\r\n    } finally {\r\n      onSavingChanged(false);\r\n    }\r\n  } else {\r\n    onNotificationChanged({\r\n      messageBarType: MessageBarType.error,\r\n      textMessageDescriptor: messages.userManagementInvalidState,\r\n    });\r\n  }\r\n});\r\n","import { ChoiceGroup, DefaultButton, Panel, PanelType, PrimaryButton } from '@fluentui/react';\r\nimport React, { useState } from 'react';\r\nimport { UserRole } from '../../../../@data';\r\nimport AppMessages from '../../../../App.messages';\r\nimport { FormItem } from '../../../../components/Form';\r\nimport { getPanelClassNames } from '../../../../styles/PanelStyles';\r\nimport { injectIntlAndObserver } from '../../../../utils';\r\nimport UserManagementMessages from '../UserManagement.messages';\r\nimport { getUserRoleChoiceGroupOptions } from '../components/UserRoleChoiceGroupOptions';\r\nimport { getUserRoleFromUser } from '../utils/userRoleUtils';\r\nimport { onUserRoleChanged } from './@data/actions/usersTabActions';\r\nimport './@data/mutatorActions';\r\nimport { setUserRoleChangePanelStatus } from './@data/mutatorActions/onUsersTabChanged';\r\nimport './@data/orchestrators';\r\nimport { getUserManagementStore } from './@data/store';\r\n\r\nconst ROLE_CHANGE_PANEL_WIDTH = '466px';\r\nconst PANEL_FIELD_WIDTH = 416;\r\n\r\nexport const UserRoleChangePanel = injectIntlAndObserver(function UserRoleChangePanelComponent({ intl }) {\r\n  const { roleChangePanelOpen, selectedItem } = getUserManagementStore();\r\n  const { formatMessage } = intl;\r\n  const { changeUserRole, roleChangePanelDesc } = UserManagementMessages;\r\n  const { panelFooterButtonsWrapper, panelDescription } = getPanelClassNames();\r\n\r\n  const onDismiss = () => setUserRoleChangePanelStatus(false, undefined);\r\n  const existingUserRole = selectedItem ? getUserRoleFromUser(selectedItem) : undefined;\r\n\r\n  const [role, setUserRole] = useState<UserRole | undefined>(existingUserRole);\r\n\r\n  return (\r\n    <Panel\r\n      headerText={formatMessage(changeUserRole)}\r\n      isOpen={roleChangePanelOpen}\r\n      type={PanelType.custom}\r\n      customWidth={ROLE_CHANGE_PANEL_WIDTH}\r\n      onDismiss={onDismiss}\r\n      closeButtonAriaLabel={formatMessage(AppMessages.close)}\r\n      isFooterAtBottom={true}\r\n      onRenderFooterContent={() => {\r\n        return (\r\n          <div className={panelFooterButtonsWrapper}>\r\n            <PrimaryButton\r\n              id=\"roleChangeButton\"\r\n              text={formatMessage(AppMessages.save)}\r\n              disabled={!role || role === existingUserRole}\r\n              onClick={(ev) => {\r\n                if (role) {\r\n                  onUserRoleChanged(role);\r\n                  onDismiss();\r\n                }\r\n              }}\r\n            />\r\n            <DefaultButton text={formatMessage(AppMessages.cancel)} onClick={onDismiss} />\r\n          </div>\r\n        );\r\n      }}\r\n    >\r\n      <React.Fragment>\r\n        <div className={panelDescription}>{formatMessage(roleChangePanelDesc)}</div>\r\n        <FormItem formWidth={PANEL_FIELD_WIDTH}>\r\n          <ChoiceGroup\r\n            selectedKey={role || existingUserRole}\r\n            options={getUserRoleChoiceGroupOptions(intl)}\r\n            onChange={(_, option) => setUserRole(option?.key as UserRole)}\r\n          />\r\n        </FormItem>\r\n      </React.Fragment>\r\n    </Panel>\r\n  );\r\n});\r\n","import { ActionButton, mergeStyleSets } from '@fluentui/react';\r\nimport React from 'react';\r\nimport { InjectedIntl } from 'react-intl';\r\nimport { INamePair, User } from '../../../../@data';\r\nimport { onPopupOpenChanged } from '../../../../@data/mutatorActions';\r\nimport { getPrimaryUserId } from '../../../../@data/store';\r\nimport { PopupType } from '../../../../@data/store/schema/enums/PopupType';\r\nimport AppMessages from '../../../../App.messages';\r\nimport { GridCell, getGridClassNames } from '../../../../components/GridWithCustomColumns';\r\nimport { IGridV2Column } from '../../../../layout/GridPageV2/GridV2.types';\r\nimport messages from '../UserManagement.messages';\r\nimport { getUserRoleString } from '../utils/userRoleUtils';\r\nimport { setSelectedItem, setUserRoleChangePanelStatus } from './@data/mutatorActions';\r\n\r\nexport const getUserName = (name?: INamePair, userName?: string) => {\r\n  return name ? name.firstName ?? '' + name.lastName ?? '' : userName ?? '';\r\n};\r\n\r\nexport function getColumns(intl: InjectedIntl, longestNameLength, longestEmailLength): IGridV2Column[] {\r\n  const { formatMessage } = intl;\r\n  const { gridActionButton, actionButtonsWrapper } = mergeStyleSets(getGridClassNames());\r\n  const primaryUserId = getPrimaryUserId();\r\n\r\n  return [\r\n    {\r\n      columnOrder: 0,\r\n      key: 'name',\r\n      name: formatMessage(AppMessages.name),\r\n      ariaLabel: formatMessage(AppMessages.sortByColumnHeaderTooltipLabel, { columnName: formatMessage(AppMessages.name) }),\r\n      minWidth: longestNameLength,\r\n      maxWidth: longestNameLength + 10,\r\n      sortableValue: (item: User) => getUserName(item.name, item.username),\r\n      isSearchable: true,\r\n      isVisible: true,\r\n      isExportable: true,\r\n      isResizable: true,\r\n      onRender: (item: User) => <GridCell>{getUserName(item.name, item.username)}</GridCell>,\r\n    },\r\n    {\r\n      columnOrder: 1,\r\n      key: 'email',\r\n      name: formatMessage(messages.email),\r\n      ariaLabel: formatMessage(AppMessages.sortByColumnHeaderTooltipLabel, { columnName: formatMessage(messages.email) }),\r\n      minWidth: longestEmailLength,\r\n      maxWidth: longestEmailLength + 10,\r\n      isSearchable: true,\r\n      isVisible: true,\r\n      isExportable: true,\r\n      isResizable: true,\r\n      sortableValue: (item: User) => item.email || '',\r\n      onRender: (item: User) => <GridCell>{item.email}</GridCell>,\r\n    },\r\n    {\r\n      columnOrder: 2,\r\n      key: 'userRole',\r\n      name: formatMessage(messages.role),\r\n      ariaLabel: formatMessage(AppMessages.sortByColumnHeaderTooltipLabel, { columnName: formatMessage(messages.role) }),\r\n      minWidth: 100,\r\n      maxWidth: 150,\r\n      isSearchable: true,\r\n      isVisible: true,\r\n      isExportable: true,\r\n      isResizable: true,\r\n      sortableValue: (item: User) => getUserRoleString(formatMessage, item),\r\n      onRender: (item: User) => <GridCell>{getUserRoleString(formatMessage, item)}</GridCell>,\r\n    },\r\n    {\r\n      columnOrder: 3,\r\n      key: 'actions',\r\n      name: formatMessage(messages.actions),\r\n      minWidth: 200,\r\n      maxWidth: 300,\r\n      suppressSorting: true,\r\n      isPadded: true,\r\n      isVisible: true,\r\n      isResizable: true,\r\n      isExportable: false,\r\n      onRender: (item: User) => {\r\n        return (\r\n          <div className={actionButtonsWrapper}>\r\n            <ActionButton\r\n              className={gridActionButton}\r\n              iconProps={{ iconName: 'PeopleRepeat' }}\r\n              disabled={primaryUserId === item.id}\r\n              onClick={(ev) => {\r\n                ev.preventDefault();\r\n                ev.stopPropagation();\r\n                setUserRoleChangePanelStatus(true, item);\r\n              }}\r\n            >\r\n              {formatMessage(messages.role)}\r\n            </ActionButton>\r\n            <ActionButton\r\n              className={gridActionButton}\r\n              iconProps={{ iconName: 'delete' }}\r\n              disabled={primaryUserId === item.id}\r\n              onClick={(ev) => {\r\n                onPopupOpenChanged(PopupType.DeleteConfirmation);\r\n                setSelectedItem(item);\r\n              }}\r\n            >\r\n              {formatMessage(AppMessages.delete)}\r\n            </ActionButton>\r\n          </div>\r\n        );\r\n      },\r\n    },\r\n  ];\r\n}\r\n","import React, { useEffect, useMemo } from 'react';\r\nimport { Log } from '../../../../../logging/src';\r\nimport { User, getAppStore } from '../../../../@data';\r\nimport { onPopupOpenChanged } from '../../../../@data/mutatorActions';\r\nimport { getPrimaryUserId } from '../../../../@data/store';\r\nimport { PopupType } from '../../../../@data/store/schema/enums/PopupType';\r\nimport AppMessages from '../../../../App.messages';\r\nimport { DeleteConfirmationPopup } from '../../../../components/Popup/DeleteConfirmationPopup';\r\nimport { useCanvasTextWidth } from '../../../../hooks';\r\nimport {\r\n  CommandBarActions,\r\n  Direction,\r\n  GridSelectionMode,\r\n  GridV2,\r\n  IGridPageCommandBarItemProps,\r\n  IGridV2Column,\r\n} from '../../../../layout/GridPageV2';\r\nimport { IRouterWithIntl, injectRouterAndIntlWithObserver } from '../../../../utils';\r\nimport messages from '../UserManagement.messages';\r\nimport { loadUsers, onUsersDeleted } from './@data/actions/usersTabActions';\r\nimport './@data/mutatorActions';\r\nimport { setSelectedItem, setUserRoleChangePanelStatus } from './@data/mutatorActions';\r\nimport './@data/orchestrators';\r\nimport { getUserManagementStore } from './@data/store';\r\nimport { UserRoleChangePanel } from './UserRoleChangePanel';\r\nimport { getColumns, getUserName } from './UsersTabColumns';\r\n\r\nconst USER_ROLE_CHANGE_KEY = 'userRoleChange';\r\n\r\nexport interface IUserPageProps extends IRouterWithIntl {}\r\n\r\nexport const UsersTab = injectRouterAndIntlWithObserver(function UsersTabComponent(props: IUserPageProps) {\r\n  const { formatMessage } = props.intl;\r\n  const { publisher, openedPopup } = getAppStore();\r\n  const { users } = getUserManagementStore();\r\n  const primaryUserId = getPrimaryUserId();\r\n\r\n  const longestEmail = useMemo(() => users?.map((user) => user.email || '').reduce((a, b) => (a.length > b.length ? a : b), '') || '', [\r\n    users,\r\n  ]);\r\n  const longestName = useMemo(\r\n    () => users?.map((user) => getUserName(user.name, user.username)).reduce((a, b) => (a.length > b.length ? a : b), '') || '',\r\n    [users]\r\n  );\r\n  const gridDefaultColumns: IGridV2Column[] = getColumns(props.intl, useCanvasTextWidth(longestName), useCanvasTextWidth(longestEmail));\r\n\r\n  useEffect(() => {\r\n    loadUsers();\r\n    // eslint-disable-next-line react-hooks/exhaustive-deps\r\n  }, []);\r\n\r\n  return (\r\n    <React.Fragment>\r\n      <GridV2\r\n        {...props}\r\n        notGridReadyLabel={formatMessage(messages.gridNotReadyLabel)}\r\n        isGridReady={!!publisher}\r\n        entity={User}\r\n        commandBarProps={{\r\n          searchBoxPlaceholder: messages.searchByNamePlaceholder,\r\n          includeFarActions: [CommandBarActions.searchBox, CommandBarActions.modifyColumns, CommandBarActions.download],\r\n          getCustomCommandBarItems: (getSelectedItems) => {\r\n            if (getSelectedItems().some((user) => user.id === primaryUserId)) {\r\n              return [];\r\n            }\r\n            const commandBarItems: IGridPageCommandBarItemProps[] = [\r\n              {\r\n                key: CommandBarActions.delete,\r\n                name: formatMessage(AppMessages.delete),\r\n                iconProps: {\r\n                  iconName: 'Delete',\r\n                },\r\n                placement: { direction: Direction.before },\r\n                onClick: () => {\r\n                  const selectedItems = getSelectedItems() as User[];\r\n                  Log.debug(`User command bar delete clicked: ${selectedItems.map((user) => user.username).toString()}`);\r\n\r\n                  if (selectedItems.length > 0) {\r\n                    onPopupOpenChanged(PopupType.DeleteConfirmation);\r\n                    setSelectedItem(selectedItems[0]);\r\n                  }\r\n                },\r\n                selectionModes: [GridSelectionMode.Single],\r\n              },\r\n              {\r\n                key: USER_ROLE_CHANGE_KEY,\r\n                name: formatMessage(messages.role),\r\n                iconProps: { iconName: 'PeopleRepeat' },\r\n                placement: { direction: Direction.before },\r\n                onClick: () => {\r\n                  const selectedItems = getSelectedItems() as User[];\r\n                  Log.debug(`User command bar role change clicked: ${JSON.stringify(selectedItems)}`);\r\n\r\n                  if (selectedItems.length > 0) {\r\n                    setUserRoleChangePanelStatus(true, selectedItems[0]);\r\n                  }\r\n                },\r\n                selectionModes: [GridSelectionMode.Single],\r\n              },\r\n            ];\r\n\r\n            return commandBarItems;\r\n          },\r\n        }}\r\n        dataGridProps={{\r\n          gridV2Columns: gridDefaultColumns,\r\n          data: users,\r\n          setData: loadUsers,\r\n          noEntityFound: messages.noEntityFound,\r\n        }}\r\n        paginationProps={{\r\n          shouldGridHandlePagination: true,\r\n        }}\r\n      />\r\n      <UserRoleChangePanel {...props} />\r\n      <DeleteConfirmationPopup\r\n        onDeleteClicked={() => onUsersDeleted(formatMessage)}\r\n        isOpen={openedPopup === PopupType.DeleteConfirmation}\r\n        onDialogDismissed={() => onPopupOpenChanged(PopupType.None)}\r\n        deleteLabels={{ title: messages.deleteConfirmationDialogTitle, description: messages.deleteConfirmationDialogDesc }}\r\n        confirmActionMessage={messages.confirmActionMessage}\r\n        deleteButtonText={messages.deleteButtonText}\r\n      />\r\n    </React.Fragment>\r\n  );\r\n});\r\n","import React from 'react';\r\nimport { getAppStore, onHelpInfoCalloutOpened, onHelpInfoChanged } from '../../../@data';\r\nimport { FormTitle } from '../../../components/Form';\r\nimport { Tabs } from '../../../components/Tabs';\r\nimport { injectIntlAndObserver } from '../../../utils';\r\nimport { UserInvitationsTab } from './UserInvitations/UserInvitations';\r\nimport messages from './UserManagement.messages';\r\nimport { getClassNames } from './UserManagement.styles';\r\nimport { UsersTab } from './Users/UsersTab';\r\n\r\nconst UserManagementPage = injectIntlAndObserver(function UserManagementPageComponent({ intl }) {\r\n  const { title, usersTab, userInvitationsTab } = messages;\r\n  const { formatMessage } = intl;\r\n  const { root } = getClassNames();\r\n  const { helpInfo, locale } = getAppStore();\r\n\r\n  return (\r\n    <div className={root}>\r\n      <FormTitle\r\n        intl={intl}\r\n        title={formatMessage(title)}\r\n        id=\"pop_PCv4_User_Managment\"\r\n        calloutContent={helpInfo}\r\n        iconButtonOnClick={() => onHelpInfoCalloutOpened('pop_PCv4_User_Managment', locale)}\r\n        calloutOnDismiss={() => onHelpInfoChanged()}\r\n      />\r\n\r\n      <Tabs\r\n        tabs={[\r\n          {\r\n            key: 'users',\r\n            headerText: formatMessage(usersTab),\r\n            component: <UsersTab />,\r\n          },\r\n          {\r\n            key: 'userInvitations',\r\n            headerText: formatMessage(userInvitationsTab),\r\n            component: <UserInvitationsTab />,\r\n          },\r\n        ]}\r\n      />\r\n    </div>\r\n  );\r\n});\r\n\r\nexport default UserManagementPage;\r\n","import { defineMessages } from 'react-intl';\r\n\r\nexport default defineMessages({\r\n  pageTitle: {\r\n    id: 'paymentsPage.pageTitle',\r\n    defaultMessage: 'Payments',\r\n  },\r\n  estimatedEarningsNoDataText: {\r\n    id: 'paymentsPage.estimatedEarningsNoDataText',\r\n    defaultMessage: 'There is no data available for the selected date range.',\r\n  },\r\n  estimatedEarningsNoDataMessage: {\r\n    id: 'paymentsPage.estimatedEarningsNoDataMessage',\r\n    defaultMessage:\r\n      'To update the graph, please select a different date range. If the graph still appears blank, your account may not have data available for the selected date range.',\r\n  },\r\n  estimatedEarningsTitle: {\r\n    id: 'paymentsPage.estimatedEarningsTitle',\r\n    defaultMessage: 'Estimated earnings',\r\n  },\r\n  balanceTitle: {\r\n    id: 'paymentsPage.balanceTitle',\r\n    defaultMessage: 'Balance',\r\n  },\r\n  thresholdNotification: {\r\n    id: 'paymentsPage.thresholdNotification',\r\n    defaultMessage: 'You can withdraw your earnings once you reach the {threshold} minimum payout threshold.',\r\n  },\r\n  nextPayout: {\r\n    id: 'paymentsPage.nextPayout',\r\n    defaultMessage: 'You’ll receive your next payout once you reach the threshold amount',\r\n  },\r\n  nextPayoutDate: {\r\n    id: 'paymentsPage.nextPayoutDate',\r\n    defaultMessage: 'You’ve reached your payout threshold and your payout will occur on',\r\n  },\r\n  lastPayoutDate: {\r\n    id: 'paymentsPage.nextPayoutDate',\r\n    defaultMessage: 'Your last payout was on',\r\n  },\r\n  yourThreshold: {\r\n    id: 'paymentsPage.yourThreshold',\r\n    defaultMessage: 'Your Payment Threshold is',\r\n  },\r\n  reachedThreshold: {\r\n    id: 'paymentsPage.reachedThreshold',\r\n    defaultMessage: 'You’ve reached your payout threshold.',\r\n  },\r\n  genericNextPayout: {\r\n    id: 'paymentsPage.genericNextPayout',\r\n    defaultMessage: 'Earnings will be paid out on the 15th of the second month after you reach the minimum payout threshold.',\r\n  },\r\n  estimatedEarningMonthly: {\r\n    id: 'paymentPage.estimatedEarningMonthly',\r\n    defaultMessage: 'Monthly',\r\n  },\r\n  estimatedEarningYearly: {\r\n    id: 'paymentPage.estimatedEarningYearly',\r\n    defaultMessage: 'Yearly',\r\n  },\r\n});\r\n","import { getTheme, IStackTokens, ITheme, mergeStyleSets } from '@fluentui/react';\r\nimport { IPubcenterPalette, IPubcenterTheme } from '../../../../../theme';\r\n\r\ninterface IPaymentsPageStyleProps {\r\n  theme: ITheme;\r\n}\r\ntype StyleProperties = 'chartCard' | 'pageTitleStyle' | 'cardsTitleBarStyle';\r\ntype PaymentsPageStyles = Record<StyleProperties, string>;\r\n\r\nexport const getStyles = (props: IPaymentsPageStyleProps): PaymentsPageStyles => {\r\n  const theme = (props.theme as unknown) as IPubcenterTheme;\r\n  const palette = theme.palette as IPubcenterPalette;\r\n  const { spacing } = theme;\r\n  return mergeStyleSets({\r\n    chartCard: {\r\n      width: '49%',\r\n      height: 'auto',\r\n    },\r\n    pageTitleStyle: {\r\n      margin: `${spacing.size32} 0 ${spacing.size12}`,\r\n    },\r\n    cardsTitleBarStyle: {\r\n      borderBottom: `1px solid ${palette.neutralLight}`,\r\n      minHeight: '30px',\r\n    },\r\n  });\r\n};\r\nexport const chartsContainersStyles = { root: { padding: '1rem' } };\r\nexport function getClassNames<PropType>(props?: PropType) {\r\n  return getStyles({ theme: getTheme(), ...props });\r\n}\r\nexport function getStackTokens(): IStackTokens {\r\n  const theme = (getTheme() as unknown) as IPubcenterTheme;\r\n  const spacing = theme.spacing;\r\n\r\n  return { childrenGap: spacing.size12 };\r\n}\r\n","import { getTheme, IStackTokens, ITheme, mergeStyleSets } from '@fluentui/react';\r\nimport { IPubcenterPalette, IPubcenterTheme } from '../../../../../../theme';\r\n\r\nexport interface IBalanceStyleProps {\r\n  theme: ITheme;\r\n}\r\n\r\ntype StyleProperties = 'paymentThreshold' | 'iconStyle' | 'notificationMessage' | 'cardContainer';\r\ntype BalanceStyles = Record<StyleProperties, string>;\r\n\r\nexport const getStyles = (props: IBalanceStyleProps): BalanceStyles => {\r\n  const { theme } = props;\r\n  const palette = theme.palette as IPubcenterPalette;\r\n  return mergeStyleSets({\r\n    paymentThreshold: {\r\n      paddingTop: 40,\r\n      fontSize: 18,\r\n    },\r\n    iconStyle: {\r\n      marginRight: '10px',\r\n    },\r\n    notificationMessage: {\r\n      backgroundColor: palette.themeLighter,\r\n    },\r\n    cardContainer: {\r\n      height: '100%',\r\n    },\r\n  });\r\n};\r\nexport function getClassNames<PropType>(props?: PropType) {\r\n  return getStyles({ theme: getTheme(), ...props });\r\n}\r\n\r\nexport function getStackTokens(): IStackTokens {\r\n  const theme = (getTheme() as unknown) as IPubcenterTheme;\r\n  const spacing = theme.spacing;\r\n\r\n  return { childrenGap: spacing.size12 };\r\n}\r\n","import { getTheme, MessageBar, ShimmerElementsGroup, ShimmerElementType } from '@fluentui/react';\r\nimport { IChartDataPoint, IChartProps } from '@fluentui/react-charting';\r\nimport React from 'react';\r\nimport { IPubcenterPalette, IPubcenterTheme } from '../../../../../../theme';\r\nimport { PaymentsPageBalance } from '../../../../../@data';\r\nimport { roundNumber } from '../../../../../utils';\r\nimport { getClassNames } from './Balance.styles';\r\n\r\nexport const getChartShimmerCustomElements = () => {\r\n  return (\r\n    <div>\r\n      <ShimmerElementsGroup\r\n        flexWrap\r\n        width=\"100%\"\r\n        shimmerElements={[\r\n          { type: ShimmerElementType.line, width: '100%' },\r\n          { type: ShimmerElementType.gap, height: 30, width: '100%' },\r\n          { type: ShimmerElementType.line, width: '100%' },\r\n          { type: ShimmerElementType.gap, height: 30, width: '100%' },\r\n          { type: ShimmerElementType.line, width: '100%' },\r\n          { type: ShimmerElementType.gap, height: 30, width: '100%' },\r\n          { type: ShimmerElementType.line, width: '100%' },\r\n          { type: ShimmerElementType.gap, height: 30, width: '100%' },\r\n          { type: ShimmerElementType.line, width: '100%' },\r\n          { type: ShimmerElementType.gap, height: 30, width: '100%' },\r\n          { type: ShimmerElementType.line, width: '100%' },\r\n        ]}\r\n      />\r\n    </div>\r\n  );\r\n};\r\n\r\nexport function mapToBarChartData(data?: PaymentsPageBalance): IChartProps[] {\r\n  const theme = (getTheme() as unknown) as IPubcenterTheme;\r\n  const palette = theme.palette as IPubcenterPalette;\r\n\r\n  const chartData: IChartProps[] = [\r\n    {\r\n      chartTitle: 'Balance',\r\n      chartData: [\r\n        {\r\n          legend: 'Balance',\r\n          horizontalBarChartdata: {\r\n            x: data ? (roundNumber(data.currBalance, 2) === 0 ? 0.1 : roundNumber(data.currBalance, 2)) : 0,\r\n            y: data ? data.threshold : 0,\r\n          },\r\n          color: data && roundNumber(data.currBalance, 2) === 0 ? palette.white : palette.blue,\r\n          yAxisCalloutData: `${data ? data.currBalance : 0}$`,\r\n        },\r\n      ],\r\n    },\r\n  ];\r\n  return chartData;\r\n}\r\n\r\nexport function getBarChartCustomData(currencyCode: string, locale: string) {\r\n  return (props: IChartProps) => {\r\n    const chartData: IChartDataPoint = props!.chartData![0];\r\n    const y = chartData.horizontalBarChartdata!.y;\r\n    return (\r\n      <div>\r\n        <span>{`${formatByCurrencyAndLocale(y, locale, currencyCode)} ${currencyCode}`} </span>\r\n      </div>\r\n    );\r\n  };\r\n}\r\nexport function getFooterNotification(message: string): React.ReactNode {\r\n  const { notificationMessage } = getClassNames();\r\n  return <MessageBar className={notificationMessage}>{message}</MessageBar>;\r\n}\r\n\r\nexport function formatByCurrencyAndLocale(paymentThreshold: number, sysLocale: string, sysCurrency: string) {\r\n  return paymentThreshold.toLocaleString(sysLocale, { style: 'currency', currency: sysCurrency });\r\n}\r\n","import { Icon, Stack } from '@fluentui/react';\r\nimport { HorizontalBarChart } from '@fluentui/react-charting';\r\nimport React from 'react';\r\nimport { InjectedIntlProps } from 'react-intl';\r\nimport { useI18n } from '../../../../../../i18n/useI18n';\r\nimport { getAppStore } from '../../../../../@data';\r\nimport { Card } from '../../../../../components/Card/Card';\r\nimport { DEFAULT_CURRENCY_CODE } from '../../../../../constants/AppConstants';\r\nimport { injectIntlAndObserver } from '../../../../../utils';\r\nimport { getPaymentsPageBalance } from '../../@data/store/selectors';\r\nimport { getStore } from '../../Settings/@data/store/store';\r\nimport messages from '../PaymentsPage.messages';\r\nimport { getClassNames as getPaymentsCommonClassNames } from '../PaymentsPage.styles';\r\nimport {\r\n  formatByCurrencyAndLocale,\r\n  getBarChartCustomData,\r\n  getChartShimmerCustomElements,\r\n  getFooterNotification,\r\n  mapToBarChartData,\r\n} from './Balance.helpers';\r\nimport { getClassNames, getStackTokens } from './Balance.styles';\r\n\r\nconst DATA_METRIC_ID = 'balance-card';\r\nconst CHART_DATA_METRIC_ID = 'balance-chart';\r\nexport interface IBalanceProps extends InjectedIntlProps {}\r\nexport const Balance = injectIntlAndObserver<IBalanceProps>((props) => {\r\n  const { cardContainer } = getClassNames();\r\n  const { intl } = props;\r\n  const { formatMessage } = intl;\r\n  const classNames = getClassNames(props);\r\n  const { cardsTitleBarStyle } = getPaymentsCommonClassNames(props);\r\n  const { data, isDataLoaded } = getPaymentsPageBalance();\r\n  const paymentThreshold = data?.threshold ?? 0;\r\n  const passedThreshold = data && data?.currBalance >= paymentThreshold;\r\n  const { systemPreferences } = getStore().active;\r\n  const { currency: sysCurrency } = systemPreferences ?? { currency: DEFAULT_CURRENCY_CODE };\r\n  const { publisher, userContext } = getAppStore();\r\n  const { locale } = useI18n({ systemPreferences, publisher, userContext });\r\n\r\n  const formattedThreshold = formatByCurrencyAndLocale(paymentThreshold, locale, sysCurrency ?? DEFAULT_CURRENCY_CODE);\r\n  return (\r\n    <div className={cardContainer} data-metric={DATA_METRIC_ID}>\r\n      <Card\r\n        titleText={formatMessage(messages.balanceTitle)}\r\n        shimmerCustomElement={getChartShimmerCustomElements()}\r\n        isDataLoaded={!!isDataLoaded}\r\n        footerComponents={\r\n          !passedThreshold ? getFooterNotification(formatMessage(messages.thresholdNotification, { threshold: formattedThreshold })) : ''\r\n        }\r\n        styleProps={{ titleBar: cardsTitleBarStyle }}\r\n      >\r\n        <Stack data-metric={CHART_DATA_METRIC_ID} enableScopedSelectors tokens={getStackTokens()}>\r\n          <Stack enableScopedSelectors>\r\n            <div className={classNames.paymentThreshold}>\r\n              {!passedThreshold\r\n                ? `${formatMessage(messages.yourThreshold)} ${formattedThreshold}`\r\n                : formatMessage(messages.reachedThreshold)}\r\n            </div>\r\n            <h1>\r\n              {Number(data?.currBalance).toLocaleString(locale, {\r\n                style: 'currency',\r\n                currency: sysCurrency ?? DEFAULT_CURRENCY_CODE,\r\n              })}\r\n            </h1>\r\n            <HorizontalBarChart\r\n              barHeight={30}\r\n              data={mapToBarChartData(data)}\r\n              barChartCustomData={getBarChartCustomData(sysCurrency ?? DEFAULT_CURRENCY_CODE, locale)}\r\n              hideTooltip\r\n            />\r\n            <div>\r\n              <Icon className={classNames.iconStyle} iconName=\"Calendar\" />\r\n              <span>{formatMessage(messages.genericNextPayout)}</span>\r\n            </div>\r\n          </Stack>\r\n        </Stack>\r\n      </Card>\r\n    </div>\r\n  );\r\n});\r\n","import { getTheme, IStackTokens, ITheme, mergeStyleSets } from '@fluentui/react';\r\nimport { AccessibilityContrast, IPubcenterPalette, IPubcenterTheme } from '../../../../../../theme';\r\nexport interface IEstimatedEarningsStyleProps {\r\n  theme: ITheme;\r\n}\r\n\r\ntype StyleProperties = 'activeButton' | 'buttonBorder' | 'chartTypes' | 'cardContainer';\r\ntype EstimatedEarningsStyles = Record<StyleProperties, string>;\r\n\r\nexport const getStyles = (props: IEstimatedEarningsStyleProps): EstimatedEarningsStyles => {\r\n  const { theme } = props;\r\n  const palette = theme.palette as IPubcenterPalette;\r\n  const { Activated } = AccessibilityContrast;\r\n\r\n  return mergeStyleSets({\r\n    activeButton: {\r\n      backgroundColor: palette.themePrimary,\r\n      color: palette.themeLight,\r\n      ':hover': {\r\n        backgroundColor: palette.themePrimary,\r\n        color: palette.themeLight,\r\n      },\r\n      ':active': {\r\n        backgroundColor: palette.themePrimary,\r\n        color: palette.themeLight,\r\n      },\r\n      [Activated]: {\r\n        color: 'window',\r\n        backgroundColor: 'windowtext',\r\n        borderColor: 'windowtext',\r\n        forcedColorAdjust: 'none',\r\n      },\r\n    },\r\n    buttonBorder: {\r\n      border: '1px solid',\r\n      borderRadius: '2px',\r\n      borderColor: palette.neutralLight,\r\n    },\r\n    chartTypes: {\r\n      marginRight: '15px !important',\r\n    },\r\n    cardContainer: {\r\n      height: '100%',\r\n    },\r\n  });\r\n};\r\nexport function getClassNames<PropType>(props?: PropType) {\r\n  return getStyles({ theme: getTheme(), ...props });\r\n}\r\nexport function getStackTokens(): IStackTokens {\r\n  const theme = (getTheme() as unknown) as IPubcenterTheme;\r\n  const spacing = theme.spacing;\r\n\r\n  return { childrenGap: spacing.size12 };\r\n}\r\n","import { DefaultButton, IconButton, ShimmerElementsGroup, ShimmerElementType } from '@fluentui/react';\r\nimport { IChartProps, ILineChartPoints, IVerticalBarChartDataPoint, LineChart, VerticalBarChart } from '@fluentui/react-charting';\r\nimport React, { ReactNode } from 'react';\r\nimport { PaymentsPageEstimatedEarnings } from '../../../../../@data';\r\nimport { EmptyChart } from '../../../../../components/EmptyChart/EmptyChart';\r\nimport messages from '../PaymentsPage.messages';\r\nimport { getClassNames } from './EstimatedEarnings.styles';\r\nimport { ChartGrain, EstimatedEarningsChartTypes } from './EstimatedEarnings.types';\r\n\r\nconst chartColor = '#0099BC';\r\nexport const getShimmerCustomElements = () => {\r\n  return (\r\n    <div>\r\n      <ShimmerElementsGroup\r\n        flexWrap\r\n        width=\"100%\"\r\n        shimmerElements={[\r\n          { type: ShimmerElementType.line, width: '100%' },\r\n          { type: ShimmerElementType.gap, height: 30, width: '100%' },\r\n          { type: ShimmerElementType.line, width: '100%' },\r\n          { type: ShimmerElementType.gap, height: 30, width: '100%' },\r\n          { type: ShimmerElementType.line, width: '100%' },\r\n          { type: ShimmerElementType.gap, height: 30, width: '100%' },\r\n          { type: ShimmerElementType.line, width: '100%' },\r\n          { type: ShimmerElementType.gap, height: 30, width: '100%' },\r\n          { type: ShimmerElementType.line, width: '100%' },\r\n          { type: ShimmerElementType.gap, height: 30, width: '100%' },\r\n          { type: ShimmerElementType.line, width: '100%' },\r\n        ]}\r\n      />\r\n    </div>\r\n  );\r\n};\r\n\r\nexport function mapToLineChartData(data: PaymentsPageEstimatedEarnings, grain) {\r\n  const points: ILineChartPoints[] = [\r\n    {\r\n      data: data.earningDates.map((date, index) => {\r\n        const localDate = parseDateKey(date);\r\n\r\n        return { x: localDate, y: +data.earningValues[index].toFixed(2) };\r\n      }),\r\n      legend: 'Balance',\r\n      color: chartColor,\r\n    },\r\n  ];\r\n  const chartData: IChartProps = {\r\n    chartTitle: 'Line Chart',\r\n    lineChartData: points,\r\n  };\r\n  return chartData;\r\n}\r\n\r\nfunction parseDateKey(date: string) {\r\n  const dateArray = date.split('-');\r\n  const year = Number(dateArray[0]);\r\n  const month = Number(dateArray[1]) || 1;\r\n  const localDate = new Date(year, month - 1, 1, 0, 0, 0);\r\n  return localDate;\r\n}\r\n\r\nexport function mapToBarChartData(data: PaymentsPageEstimatedEarnings, grain): IVerticalBarChartDataPoint[] {\r\n  const dynamicData: IVerticalBarChartDataPoint[] = data.earningDates.map((date, index) => {\r\n    const localDate = parseDateKey(date);\r\n    const localeMonth = localDate.toLocaleString('default', { month: 'short' });\r\n    const localYear = localDate.toLocaleString('default', { year: 'numeric' });\r\n    // \\u2800 is unicode BRAILLE PATTERN BLANK character which is rendered as empty space\r\n    // work around to prevent year from being parsed as number\r\n    const xValue = grain === ChartGrain.MONTHLY ? `${localeMonth} ${localYear}` : `\\u2800${localYear}\\u2800`;\r\n    return { x: xValue, y: data.earningValues[index] };\r\n  });\r\n  return dynamicData;\r\n}\r\n\r\nexport const getTopBarActions = (currentChartTypeStateManagement, activeGrainStateManagement, formatMessage, props): ReactNode => {\r\n  const { setCurrentChartType, currentChartType } = currentChartTypeStateManagement;\r\n  const { activeGrain, setActiveGrain } = activeGrainStateManagement;\r\n  const isMonthlyGrain = activeGrain === ChartGrain.MONTHLY;\r\n  const isYearlyGrain = activeGrain === ChartGrain.YEARLY;\r\n  const classNames = getClassNames(props);\r\n  const { activeButton, buttonBorder, chartTypes } = classNames;\r\n  return (\r\n    <>\r\n      <div className={`${chartTypes} ${buttonBorder}`}>\r\n        <IconButton\r\n          iconProps={{ iconName: 'LineChart' }}\r\n          ariaLabel=\"Line chart\"\r\n          className={currentChartType === EstimatedEarningsChartTypes.LINE ? activeButton : ''}\r\n          aria-expanded={currentChartType === EstimatedEarningsChartTypes.LINE ? true : false}\r\n          onClick={() => {\r\n            setCurrentChartType(EstimatedEarningsChartTypes.LINE);\r\n          }}\r\n        />\r\n        <IconButton\r\n          iconProps={{ iconName: 'BarChartVertical' }}\r\n          ariaLabel=\"Bar chart vertical\"\r\n          className={currentChartType === EstimatedEarningsChartTypes.VERTICAL_BAR ? activeButton : ''}\r\n          aria-expanded={currentChartType === EstimatedEarningsChartTypes.VERTICAL_BAR ? true : false}\r\n          onClick={() => {\r\n            setCurrentChartType(EstimatedEarningsChartTypes.VERTICAL_BAR);\r\n          }}\r\n        />\r\n      </div>\r\n      <div className={buttonBorder}>\r\n        <DefaultButton\r\n          ariaLabel=\"Monthly\"\r\n          className={isMonthlyGrain ? activeButton : buttonBorder}\r\n          toggle\r\n          checked={isMonthlyGrain}\r\n          text={formatMessage(messages.estimatedEarningMonthly)}\r\n          onClick={() => {\r\n            setActiveGrain(ChartGrain.MONTHLY);\r\n          }}\r\n          allowDisabledFocus\r\n        />\r\n        <DefaultButton\r\n          ariaLabel=\"Yearly\"\r\n          className={isYearlyGrain ? activeButton : buttonBorder}\r\n          toggle\r\n          checked={isYearlyGrain}\r\n          text={formatMessage(messages.estimatedEarningYearly)}\r\n          onClick={() => {\r\n            setActiveGrain(ChartGrain.YEARLY);\r\n          }}\r\n          allowDisabledFocus\r\n        />\r\n      </div>\r\n    </>\r\n  );\r\n};\r\n\r\nexport const getChart = (\r\n  currentChartType: EstimatedEarningsChartTypes,\r\n  currentGrain: ChartGrain,\r\n  data: PaymentsPageEstimatedEarnings,\r\n  size: { height: number; width: number },\r\n  formatMessage\r\n) => {\r\n  if (!data || !data.earningDates || data.earningDates.length <= 0) {\r\n    return (\r\n      <EmptyChart\r\n        noDataText={formatMessage(messages.estimatedEarningsNoDataText)}\r\n        noDataMessage={formatMessage(messages.estimatedEarningsNoDataMessage)}\r\n        showGridLines\r\n      />\r\n    );\r\n  }\r\n  switch (currentChartType) {\r\n    case EstimatedEarningsChartTypes.LINE:\r\n      return (\r\n        <LineChart\r\n          yMaxValue={200}\r\n          hideLegend={true}\r\n          data={mapToLineChartData(data, currentGrain)}\r\n          height={size.height}\r\n          width={size.width}\r\n          customDateTimeFormatter={customFormatDateAxisData(currentGrain)}\r\n          tickValues={data.earningDates.map((date) => parseDateKey(date))}\r\n        />\r\n      );\r\n    case EstimatedEarningsChartTypes.VERTICAL_BAR:\r\n      return (\r\n        <VerticalBarChart\r\n          useSingleColor={true}\r\n          colors={[chartColor]}\r\n          hideLegend={true}\r\n          yMaxValue={200}\r\n          data={mapToBarChartData(data, currentGrain)}\r\n          height={size.height}\r\n          width={size.width}\r\n        />\r\n      );\r\n  }\r\n};\r\nfunction customFormatDateAxisData(currentGrain: ChartGrain): (dateTime: Date) => string {\r\n  return (dateTime) => {\r\n    const month = dateTime.toLocaleString('default', { month: 'short' });\r\n    const year = dateTime.toLocaleString('default', { year: 'numeric' });\r\n    const xValue = currentGrain === ChartGrain.MONTHLY ? `${month} ${year}` : `${year}`;\r\n    return xValue;\r\n  };\r\n}\r\n","import React, { useEffect, useRef, useState } from 'react';\r\nimport { Card } from '../../../../../components/Card/Card';\r\nimport { useIntersectionObserverWithRefCallback } from '../../../../../hooks';\r\nimport { injectIntlAndObserver } from '../../../../../utils';\r\nimport { fetchPaymentsPageEstimatedEarnings } from '../../@data/actions';\r\nimport { getPaymentsPageEstimatedEarnings } from '../../@data/store/selectors';\r\nimport messages from '../PaymentsPage.messages';\r\nimport { getClassNames as getPaymentsCommonClassNames } from '../PaymentsPage.styles';\r\nimport { getChart, getShimmerCustomElements, getTopBarActions } from './EstimatedEarnings.helpers';\r\nimport { getClassNames } from './EstimatedEarnings.styles';\r\nimport { IEstimatedEarningsProps } from './EstimatedEarnings.types';\r\n\r\nconst DATA_METRIC_ID = 'estimated-earnings-card';\r\nconst CHART_DATA_METRIC_ID = 'estimated-earnings-chart';\r\nexport const EstimatedEarnings = injectIntlAndObserver<IEstimatedEarningsProps>((props) => {\r\n  const { cardContainer } = getClassNames();\r\n  const { cardsTitleBarStyle } = getPaymentsCommonClassNames(props);\r\n  const { defaultChartType, defaultChartGrain, intl } = props;\r\n  const { formatMessage } = intl;\r\n  const [activeGrain, setActiveGrain] = useState(defaultChartGrain);\r\n  const estimatedEarningsAllGrainData = getPaymentsPageEstimatedEarnings();\r\n  const { data, isDataLoaded } = estimatedEarningsAllGrainData[activeGrain];\r\n  const [intersectionEntry, targetObservationRef] = useIntersectionObserverWithRefCallback({});\r\n  const isCardVisible = !!intersectionEntry?.isIntersecting;\r\n  const [currentChartType, setCurrentChartType] = useState(defaultChartType);\r\n  const ref = useRef<HTMLDivElement>(null);\r\n  const [parentCardHeight, setHeight] = useState(0);\r\n  const [parentCardWidth, setWidth] = useState(0);\r\n  useEffect(() => {\r\n    if (!isDataLoaded && isCardVisible) {\r\n      fetchPaymentsPageEstimatedEarnings(activeGrain);\r\n    }\r\n  }, [isCardVisible, isDataLoaded, activeGrain]);\r\n  useEffect(() => {\r\n    const resizeObserver = new ResizeObserver((event) => {\r\n      setWidth(event[0].contentBoxSize[0].inlineSize);\r\n      setHeight(event[0].contentBoxSize[0].blockSize);\r\n    });\r\n\r\n    ref.current && resizeObserver.observe(ref.current);\r\n  });\r\n\r\n  return (\r\n    <div className={cardContainer} data-metric={DATA_METRIC_ID} ref={targetObservationRef}>\r\n      <Card\r\n        titleText={formatMessage(messages.estimatedEarningsTitle)}\r\n        shimmerCustomElement={getShimmerCustomElements()}\r\n        isDataLoaded={isDataLoaded}\r\n        cardTopBarActions={getTopBarActions(\r\n          { currentChartType, setCurrentChartType },\r\n          { activeGrain, setActiveGrain },\r\n          formatMessage,\r\n          props\r\n        )}\r\n        styleProps={{ titleBar: cardsTitleBarStyle }}\r\n      >\r\n        <div data-metric={CHART_DATA_METRIC_ID} ref={ref}>\r\n          {getChart(currentChartType, activeGrain, data!, { height: parentCardHeight, width: parentCardWidth }, formatMessage)}\r\n        </div>\r\n      </Card>\r\n    </div>\r\n  );\r\n});\r\n","import { Stack } from '@fluentui/react';\r\nimport React from 'react';\r\nimport { getAppStore, onHelpInfoCalloutOpened, onHelpInfoChanged } from '../../../../@data';\r\nimport { FormTitle } from '../../../../components/Form';\r\nimport { injectIntlAndObserver } from '../../../../utils';\r\nimport '../@data/orchestrators';\r\nimport { Balance } from './Balance/Balance';\r\nimport { EstimatedEarnings } from './EstimatedEarnings/EstimatedEarnings';\r\nimport { ChartGrain, EstimatedEarningsChartTypes } from './EstimatedEarnings/EstimatedEarnings.types';\r\nimport { PaymentsOnboarding } from './Onboarding/PaymentsOnboarding';\r\nimport messages from './PaymentsPage.messages';\r\nimport { chartsContainersStyles, getClassNames, getStackTokens } from './PaymentsPage.styles';\r\n\r\nexport const PaymentsPage = injectIntlAndObserver((props) => {\r\n  const classNames = getClassNames(props);\r\n  const { intl } = props;\r\n  const { formatMessage } = intl;\r\n  const { helpInfo, locale } = getAppStore();\r\n\r\n  return (\r\n    <div className=\"paymentsPageRoot\">\r\n      <FormTitle\r\n        intl={intl}\r\n        title={formatMessage(messages.pageTitle)}\r\n        styles={{ root: classNames.pageTitleStyle }}\r\n        id=\"pop_PCv4_Payments\"\r\n        calloutContent={helpInfo}\r\n        iconButtonOnClick={() => onHelpInfoCalloutOpened('pop_PCv4_Payments', locale)}\r\n        calloutOnDismiss={() => onHelpInfoChanged()}\r\n      />\r\n\r\n      <Stack styles={chartsContainersStyles} horizontal horizontalAlign=\"space-between\" wrap tokens={getStackTokens()}>\r\n        <Stack.Item className={classNames.chartCard} grow>\r\n          <Balance />\r\n        </Stack.Item>\r\n        <Stack.Item className={classNames.chartCard} grow>\r\n          <EstimatedEarnings defaultChartType={EstimatedEarningsChartTypes.LINE} defaultChartGrain={ChartGrain.MONTHLY} />\r\n        </Stack.Item>\r\n      </Stack>\r\n      <Stack horizontal horizontalAlign=\"space-between\" wrap tokens={getStackTokens()}>\r\n        <Stack.Item className={classNames.chartCard} grow>\r\n          <PaymentsOnboarding />\r\n        </Stack.Item>\r\n      </Stack>\r\n    </div>\r\n  );\r\n});\r\n","import React, { lazy } from 'react';\r\nimport { LazyComponent } from '../../../../components/LazyComponents';\r\n\r\n// @ts-ignore\r\nconst SettingsPageLazy = lazy(() => import('./AccountSettingsPage'));\r\n\r\nexport function LazySettingsPage() {\r\n  return <LazyComponent lazyComponent={<SettingsPageLazy />} />;\r\n}\r\n","import { defineMessages } from 'react-intl';\r\n\r\nexport const accountManageMessages = defineMessages({\r\n  profileTab: {\r\n    id: 'accountManageMessages.profileTab',\r\n    defaultMessage: 'Profile Information',\r\n  },\r\n  paymentsTab: {\r\n    id: 'accountManageMessages.paymentsTab',\r\n    defaultMessage: 'Payments',\r\n  },\r\n  settingsTab: {\r\n    id: 'accountManageMessages.settingsTab',\r\n    defaultMessage: 'Account settings',\r\n  },\r\n  userManagementTab: {\r\n    id: 'accountManageMessages.userManagementTab',\r\n    defaultMessage: 'User Management',\r\n  },\r\n});\r\n","import { getTheme, mergeStyleSets } from '@fluentui/react';\r\nimport { IPubcenterTheme } from '../../../../../theme';\r\nimport { ICommonStyleProps } from '../../../../types';\r\n\r\nexport interface IManagePageStyles {\r\n  layoutRootStyle?: string;\r\n}\r\n\r\nexport const getStyles = (props: ICommonStyleProps): IManagePageStyles => {\r\n  const theme = (props.theme as unknown) as IPubcenterTheme;\r\n  const { spacing } = theme;\r\n\r\n  return mergeStyleSets({\r\n    layoutRootStyle: {\r\n      paddingTop: 0,\r\n      paddingLeft: spacing.size24,\r\n    },\r\n  });\r\n};\r\n\r\nexport function getClassNames<PropType>(props?: PropType): IManagePageStyles {\r\n  return getStyles({ theme: getTheme(), ...props });\r\n}\r\n","import React from 'react';\r\nimport { completeAccess, hasReadAccess, UserRoleEntity } from '../../../../@data/services/UserRoleService';\r\nimport { PublisherProfileTabs } from '../../../../@data/store/schema/userrolemodels/PublisherProfileTabs';\r\nimport { getEntityAccessPermissions } from '../../../../@data/utils/getAccessPermission';\r\nimport { ITabProps, Tabs } from '../../../../components/Tabs';\r\nimport { EmptyLayout } from '../../../../layout/EmptyLayout/EmptyLayout';\r\nimport { injectIntlWithObserver } from '../../../../utils';\r\nimport { LazyProfilePage } from '../../Profile/LazyProfilePage';\r\nimport UserManagementPage from '../../UserManagement/UserManagement';\r\nimport { PAYMENTS_TAB_KEY, PROFILE_TAB_KEY, SETTINGS_TAB_KEY, USER_MANAGEMENT_TAB_KEY } from '../constants';\r\nimport { PaymentsPage } from '../Payments/PaymentsPage';\r\nimport { LazySettingsPage } from '../Settings/LazySettingsPage';\r\nimport { accountManageMessages } from './ManagePage.messages';\r\nimport { getClassNames } from './ManagePage.styles';\r\n\r\n// TODO: Refactor this to use a common component for lazy loading logic\r\n\r\nexport const ManagePage = injectIntlWithObserver(({ intl: { formatMessage } }) => {\r\n  const { layoutRootStyle } = getClassNames();\r\n\r\n  const publisherProfileAccess = getEntityAccessPermissions(UserRoleEntity.PublisherProfileTabs) as PublisherProfileTabs | null;\r\n\r\n  function getTabs() {\r\n    const tabs: ITabProps[] = [];\r\n\r\n    if (hasReadAccess(publisherProfileAccess === null ? completeAccess : publisherProfileAccess.profile)) {\r\n      tabs.push({\r\n        key: PROFILE_TAB_KEY,\r\n        headerText: formatMessage(accountManageMessages.profileTab),\r\n        component: <LazyProfilePage />,\r\n      });\r\n    }\r\n\r\n    if (hasReadAccess(publisherProfileAccess === null ? completeAccess : publisherProfileAccess.userManagement)) {\r\n      tabs.push({\r\n        key: USER_MANAGEMENT_TAB_KEY,\r\n        headerText: formatMessage(accountManageMessages.userManagementTab),\r\n        component: <UserManagementPage />,\r\n      });\r\n    }\r\n\r\n    if (hasReadAccess(publisherProfileAccess === null ? completeAccess : publisherProfileAccess.payments)) {\r\n      tabs.push({\r\n        key: PAYMENTS_TAB_KEY,\r\n        headerText: formatMessage(accountManageMessages.paymentsTab),\r\n        component: <PaymentsPage />, // Any custom component can be passed here\r\n      });\r\n    }\r\n\r\n    if (hasReadAccess(publisherProfileAccess === null ? completeAccess : publisherProfileAccess.settings)) {\r\n      tabs.push({\r\n        key: SETTINGS_TAB_KEY,\r\n        headerText: formatMessage(accountManageMessages.settingsTab),\r\n        component: <LazySettingsPage />,\r\n      });\r\n    }\r\n\r\n    return tabs;\r\n  }\r\n\r\n  return (\r\n    <EmptyLayout styleProps={{ root: layoutRootStyle }}>\r\n      <Tabs tabs={getTabs()} />\r\n    </EmptyLayout>\r\n  );\r\n});\r\n","import React, { useEffect } from 'react';\r\nimport { InjectedIntlProps, injectIntl } from 'react-intl';\r\nimport { RouteComponentProps } from 'react-router-dom';\r\nimport { LayoutMode, onLayoutChanged } from '../../../@data';\r\nimport { RouteName } from '../@data';\r\nimport { onCurrentRouteChanged } from '../@data/actions';\r\nimport { ManagePage } from './Manage/ManagePage';\r\n\r\nexport const AccountPage = injectIntl(function AccountPageComponent(props: RouteComponentProps & InjectedIntlProps): JSX.Element {\r\n  useEffect(() => {\r\n    onLayoutChanged(LayoutMode.Default);\r\n    onCurrentRouteChanged(RouteName.publisherProfile, props.intl.formatMessage);\r\n    // eslint-disable-next-line react-hooks/exhaustive-deps\r\n  }, []);\r\n\r\n  return <ManagePage {...props} />;\r\n});\r\n","import { action } from 'satcheljs';\r\nimport { MediationReportingDataRequestBody } from '../../../../../@data/store/schema/models/MediationReportingDataRequestBody';\r\nimport { ReportColumnMembersParams } from '../../../../../@data/store/schema/models/ReportColumnMembersParams';\r\nimport { ReportingDataRequestBody } from '../../../../../@data/store/schema/models/ReportingDataRequestBody';\r\nimport { ReportCardType } from '../../ReportCard/ReportCard.types';\r\n\r\nexport const fetchReportPageSummary = action('fetchReportPageSummary', (reportRequestBody: ReportingDataRequestBody) => ({\r\n  reportRequestBody,\r\n}));\r\nexport const fetchReportPageMediationSummary = action(\r\n  'fetchReportPageMediationSummary',\r\n  (reportRequestBody: MediationReportingDataRequestBody) => ({\r\n    reportRequestBody,\r\n  })\r\n);\r\nexport const fetchReportPageSites = action('fetchReportPageSites', (reportRequestBody: ReportingDataRequestBody) => ({\r\n  reportRequestBody,\r\n}));\r\nexport const fetchReportPageAdUnits = action('fetchReportPageAdUnits', (reportRequestBody: ReportingDataRequestBody) => ({\r\n  reportRequestBody,\r\n}));\r\nexport const fetchReportPageCountry = action('fetchReportPageCountry', (reportRequestBody: ReportingDataRequestBody) => ({\r\n  reportRequestBody,\r\n}));\r\nexport const fetchReportPageMediation = action('fetchReportPageMediation', (reportRequestBody: MediationReportingDataRequestBody) => ({\r\n  reportRequestBody,\r\n}));\r\nexport const fetchReportPagePerformance = action('fetchReportPagePerformance', (reportRequestBody: ReportingDataRequestBody) => ({\r\n  reportRequestBody,\r\n}));\r\nexport const fetchReportPageDetailedSites = action('fetchReportPageDetailedSites', (reportRequestBody: ReportingDataRequestBody) => ({\r\n  reportRequestBody,\r\n}));\r\nexport const fetchReportPageDetailedAdUnits = action('fetchReportPageDetailedAdUnits', (reportRequestBody: ReportingDataRequestBody) => ({\r\n  reportRequestBody,\r\n}));\r\nexport const fetchReportPageDetailedPerformance = action(\r\n  'fetchReportPageDetailedPerformance',\r\n  (reportRequestBody: ReportingDataRequestBody) => ({\r\n    reportRequestBody,\r\n  })\r\n);\r\nexport const fetchReportPageDetailedCountry = action('fetchReportPageDetailedCountry', (reportRequestBody: ReportingDataRequestBody) => ({\r\n  reportRequestBody,\r\n}));\r\nexport const fetchReportPageDetailedMediation = action(\r\n  'fetchReportPageDetailedMediation',\r\n  (reportRequestBody: MediationReportingDataRequestBody) => ({\r\n    reportRequestBody,\r\n  })\r\n);\r\nexport const fetchMediationReportsMetadata = action('fetchMediationReportsMetadata');\r\nexport const fetchReportsMetadata = action('fetchReportsMetadata');\r\nexport const fetchReportDimensionColumnMembers = action(\r\n  'fetchReportDimensionColumnMembers',\r\n  (requestParams: ReportColumnMembersParams, reportCardType?: ReportCardType) => ({\r\n    requestParams,\r\n    reportCardType,\r\n  })\r\n);\r\n","import { mutatorAction } from 'satcheljs';\r\nimport { IColumnMemberDetails } from '../store/schema';\r\nimport { getReportPageStore } from '../store/store';\r\n\r\nexport const setColumnMembers = mutatorAction('setColumnMembers', (dimension: string, columnMembers: IColumnMemberDetails[]) => {\r\n  getReportPageStore().columnMembers[dimension] = { isDataLoaded: true, data: columnMembers };\r\n});\r\nexport const resetColumnMembers = mutatorAction('resetColumnMembers', () => {\r\n  getReportPageStore().columnMembers = {};\r\n});\r\nexport const setReportType = mutatorAction('setReportType', (reportType: string) => {\r\n  getReportPageStore().reportType = reportType;\r\n});\r\n","import { defineMessages } from 'react-intl';\r\n\r\nexport default defineMessages({\r\n  profileTitle: {\r\n    id: 'profile.title',\r\n    defaultMessage: 'Profile',\r\n  },\r\n  profileHeading: {\r\n    id: 'profile.heading',\r\n    defaultMessage: 'Profile management',\r\n  },\r\n  profileDescription: {\r\n    id: 'profile.description',\r\n    defaultMessage: \"You cannot manually update your profile at this time. Don't worry—you will be able to soon!\",\r\n  },\r\n  profileSubtitle: {\r\n    id: 'profile.subtitle',\r\n    defaultMessage: 'COMING SOON',\r\n  },\r\n  profileIncomplete: {\r\n    id: 'profile.incomplete',\r\n    defaultMessage: 'Complete your profile; tell us more about you!',\r\n  },\r\n  manageProfile: {\r\n    id: 'profile.manage',\r\n    defaultMessage: 'Manage your profile',\r\n  },\r\n  underReviewTitle: {\r\n    id: 'profile.underReviewTitle',\r\n    defaultMessage: \"We're reviewing your profile\",\r\n  },\r\n  underReviewDescription: {\r\n    id: 'profile.underReviewDescription',\r\n    defaultMessage: \"Our review can take up to seven business days, and we'll notify you as soon as it's approved.\",\r\n  },\r\n  approvedTitle: {\r\n    id: 'profile.approvedTitle',\r\n    defaultMessage: 'Your account is now active',\r\n  },\r\n  approvedDescription: {\r\n    id: 'profile.approvedDescription',\r\n    defaultMessage: 'Congratulations! We successfully verified your profile and activated your account!',\r\n  },\r\n  retryTitle: {\r\n    id: 'profile.retryTitle',\r\n    defaultMessage: 'Your profile needs attention!',\r\n  },\r\n  retryDescription: {\r\n    id: 'profile.retryDescription',\r\n    defaultMessage: \"Your profile doesn't meet our policy requirements. Please review your profile before taking further action.\",\r\n  },\r\n  rejectedTitle: {\r\n    id: 'profile.rejectedTitle',\r\n    defaultMessage: \"We weren't able to verify your identity\",\r\n  },\r\n  rejectedDescriptionPart1: {\r\n    id: 'profile.rejectedDescriptionPart1',\r\n    defaultMessage: \"Because your account doesn't comply with our\",\r\n  },\r\n  rejectedDescriptionPart2: {\r\n    id: 'profile.rejectedDescriptionPart2',\r\n    defaultMessage: 'it has seven days before removal. If you have any questions or concerns regarding our decision, please contact',\r\n  },\r\n  rejectedBannerPart1: {\r\n    id: 'profile.rejectedBannerPart1',\r\n    defaultMessage: \"We have rejected your profile because it doesn't comply with our\",\r\n  },\r\n  rejectedBannerPart2: {\r\n    id: 'profile.rejectedBannerPart2',\r\n    defaultMessage: 'Your account will be removed in 7 days.',\r\n  },\r\n  termsAndConditions: {\r\n    id: 'profile.termsAndConditions',\r\n    defaultMessage: 'Terms and Conditions',\r\n  },\r\n  viewProfile: {\r\n    id: 'profile.notification.button',\r\n    defaultMessage: 'View profile',\r\n  },\r\n});\r\n","import { action } from 'satcheljs';\r\n\r\nexport const onFetchPublisherPreferences = action('onFetchEntityPreferences');\r\n\r\nexport const onFetchUserPreferences = action('onFetchEntityPreferences', (locale?: string) => ({ locale }));\r\n\r\nexport const onUpdateSystemPreferences = action('onUpdateSystemPreferences');\r\n\r\nexport const onUpdateUserLanguage = action(\r\n  'onUpdateUserLanguage',\r\n  (locale, closePanel?: () => void, setFormChanged?: (state: boolean) => void) => ({ closePanel, setFormChanged, locale })\r\n);\r\n","import { action } from 'satcheljs';\r\n\r\nexport const onFetchTnC = action('onFetchTnC', (locale?: string) => ({ locale }));\r\n\r\nexport const setNotificationPanelTriggered = action('setNotificationPanelTriggered', (isTrigerred: boolean) => ({ isTrigerred }));\r\n","import { FontWeights, getTheme, mergeStyleSets } from '@fluentui/react';\r\nimport { IPubCenterFonts, IPubcenterSpacing } from '../../../theme';\r\nimport { IEmptyLayoutStyleProps, IEmptyLayoutStyles } from './EmptyLayout.types';\r\n\r\nexport const getStyles = (props: IEmptyLayoutStyleProps): IEmptyLayoutStyles => {\r\n  const { theme } = props;\r\n  const spacing = theme.spacing as IPubcenterSpacing;\r\n  const { size16, size32 } = spacing;\r\n  const fonts = theme.fonts as IPubCenterFonts;\r\n\r\n  return mergeStyleSets({\r\n    root: {\r\n      padding: size32,\r\n      overflowY: 'auto',\r\n      display: 'flex',\r\n      flexDirection: 'column',\r\n      flex: '1 1 0',\r\n    },\r\n    heading: {\r\n      margin: `0 0 ${size16} 0`,\r\n      ...fonts.size28,\r\n      fontWeight: FontWeights.semibold,\r\n    },\r\n    description: {\r\n      ...fonts.size16,\r\n      marginBottom: size16,\r\n    },\r\n  });\r\n};\r\n\r\nexport function getClassNames<PropType>(props?: PropType): IEmptyLayoutStyles {\r\n  return getStyles({ theme: getTheme(), ...props });\r\n}\r\n","import { mergeStyleSets } from '@fluentui/react';\r\nimport React from 'react';\r\nimport { Main } from '../../components/Main/Main';\r\nimport { getClassNames } from './EmptyLayout.styles';\r\nimport { IEmptyLayoutProps } from './EmptyLayout.types';\r\n\r\nexport function EmptyLayout({ headingTitle, descriptionText, children, styleProps }: IEmptyLayoutProps): JSX.Element {\r\n  const { root, heading, description } = mergeStyleSets(getClassNames(), styleProps);\r\n\r\n  return (\r\n    <Main className={root}>\r\n      {headingTitle && <h1 className={heading}>{headingTitle}</h1>}\r\n      {descriptionText && <div className={description}>{descriptionText}</div>}\r\n      {children}\r\n    </Main>\r\n  );\r\n}\r\n","import { createStore } from 'satcheljs';\r\nimport { DEFAULT_NON_TYTHON_TNC, DEFAULT_TNC } from '../orchestrators';\r\n\r\nexport interface ITnC {\r\n  content: string;\r\n  nonTythonContent: string;\r\n  latestTnCReleaseDate?: string;\r\n  latestTnCVersion?: string;\r\n  isDataLoaded: boolean;\r\n  isNotificationPanelTrigerred?: boolean;\r\n}\r\n\r\nexport const getStore = createStore<ITnC>('ITnC', {\r\n  content: DEFAULT_TNC,\r\n  nonTythonContent: DEFAULT_NON_TYTHON_TNC,\r\n  latestTnCReleaseDate: undefined,\r\n  latestTnCVersion: undefined,\r\n  isDataLoaded: false,\r\n  isNotificationPanelTrigerred: false,\r\n});\r\n","import { defineMessages } from 'react-intl';\r\n\r\nexport default defineMessages({\r\n  notificationText: {\r\n    id: 'detectAdBlock.notificationText',\r\n    defaultMessage:\r\n      'An Adblocker is detected. Part of the website might not work with Adblocker enabled. Please consider disabling it for this website.',\r\n  },\r\n});\r\n","import { MessageBarType } from '@fluentui/react';\r\nimport { useEffect } from 'react';\r\nimport { injectIntl } from 'react-intl';\r\nimport { onNotificationChanged } from '../../@data';\r\nimport { useDetectAdBlock } from '../../hooks/useDetectAdBlock';\r\nimport { INotificationBarItem } from '../NotificationBar';\r\nimport messages from './DetectAdBlock.messages';\r\n\r\nexport const DetectAdBlock = injectIntl(({ intl }) => {\r\n  const adBlockDetected = useDetectAdBlock();\r\n\r\n  useEffect(() => {\r\n    if (adBlockDetected) {\r\n      const notification: INotificationBarItem = {\r\n        text: intl.formatMessage(messages.notificationText),\r\n        messageBarType: MessageBarType.warning,\r\n        suppressAutoDismiss: true,\r\n      };\r\n\r\n      onNotificationChanged(notification);\r\n    }\r\n  }, [adBlockDetected, intl]);\r\n\r\n  return null;\r\n});\r\n","/* tslint:disable */\r\nimport { AnimationClassNames, getFocusStyle, IStyle } from '@fluentui/react';\r\nimport { BreakPoints } from '../../../theme';\r\nimport { noPointerEvents } from '../../utils/GlobalStyleUtils';\r\nimport { INavStyleProps, INavStyles } from './Nav.types';\r\n\r\nexport type INavItemStyle = {\r\n  root?: IStyle;\r\n  iconColumn?: IStyle;\r\n  nameColumn?: IStyle;\r\n};\r\n\r\nexport type IFloatingNavStyle = IStyle & {\r\n  root?: IStyle;\r\n  withChild?: IStyle;\r\n};\r\n\r\nconst { ResponsiveSmall } = BreakPoints;\r\n\r\nconst navFontSize = 14;\r\nconst navTextColor = '#FFF';\r\nconst navWidth = 228;\r\nconst navCollapsedWidth = 48;\r\nconst shortenedIconWidth = 32;\r\nconst navFloatingWidth = 230;\r\nconst navItemHeight = 48;\r\nconst navChildItemHeight = 32;\r\nconst navBackgroundColor = '#EDEBE9';\r\nconst floatingNavBackgroundColor = 'rgba(255,255,255,1)';\r\nconst navItemHoverColor = '#CCCCCC';\r\nconst navGroupSeparatorItemHeight = 40;\r\nconst navGroupSeparatorWithGroupNameHeight = 70;\r\nconst navItemWithChildBgColor = '#CCCCCC';\r\nconst navItemSelectedColor = '#B7B7B7';\r\nconst navItemIndentSize = 50;\r\nconst navFloatingItemIndentSize = 20;\r\nconst BackDropSelector = '@supports (backdrop-filter: blur(20px)) or (-webkit-backdrop-filter: blur(20px))';\r\nconst navItemContainerSelector = 'ul';\r\nconst navFocusZoneInnerContainerSelector = 'div#navFocusZone>nav';\r\nconst navExpandCollapseButtonInnerContainerSelector = 'a#expandCollapseButton';\r\nconst navExpandCollapseButtonBackgroundContainerSelector = 'i[data-icon-name=\"GlobalNavButton\"]';\r\n\r\nconst getResponsiveNavStyles = (isCollapsed = false) => ({\r\n  [ResponsiveSmall]: {\r\n    width: isCollapsed ? 0 : navWidth,\r\n    ...(isCollapsed\r\n      ? {}\r\n      : {\r\n          position: 'absolute',\r\n          height: `calc(100vh - ${navItemHeight}px)`,\r\n        }),\r\n    [navItemContainerSelector]: {\r\n      ...(isCollapsed ? { display: 'none' } : {}),\r\n    },\r\n    [navFocusZoneInnerContainerSelector]: {\r\n      top: 0,\r\n      position: 'fixed',\r\n      width: navWidth,\r\n    },\r\n    [navExpandCollapseButtonInnerContainerSelector]: {\r\n      ...(isCollapsed ? {} : { backgroundColor: 'rgb(237, 235, 233)' }),\r\n      width: isCollapsed ? navCollapsedWidth : navWidth,\r\n    },\r\n    [navExpandCollapseButtonBackgroundContainerSelector]: {\r\n      ...(isCollapsed ? { color: '#ffffff' } : {}),\r\n    },\r\n  },\r\n});\r\n\r\nexport const getStyles = (props: INavStyleProps): INavStyles => {\r\n  const { isSelected, hasChildren, nestingLevel, isCollapsed, scrollTop, isChildLinkSelected, hasGroupName, theme, groupIndex } = props;\r\n\r\n  const isFirstNavGroup = groupIndex === 0;\r\n\r\n  return {\r\n    root: {\r\n      width: isCollapsed ? navCollapsedWidth : navWidth,\r\n      backgroundColor: navBackgroundColor,\r\n      color: navTextColor,\r\n      selectors: {\r\n        ul: {\r\n          listStyleType: 'none',\r\n          padding: 0,\r\n          margin: 0,\r\n          fontSize: navFontSize,\r\n          selectors: {\r\n            'li:hover >div': {\r\n              display: 'block',\r\n            },\r\n          },\r\n        },\r\n        a: {\r\n          color: `${navTextColor} !important`,\r\n          outline: 'none',\r\n        },\r\n      },\r\n      ...getResponsiveNavStyles(isCollapsed),\r\n    },\r\n    overlay: {\r\n      [ResponsiveSmall]: {\r\n        ...(isCollapsed\r\n          ? {}\r\n          : {\r\n              width: `calc(100vw - ${navWidth}px)`,\r\n              height: `calc(100vh - ${navItemHeight}px)`,\r\n              backgroundColor: '#000000',\r\n              opacity: 0.3,\r\n              marginLeft: navWidth,\r\n              position: 'absolute',\r\n            }),\r\n      },\r\n    },\r\n    navItemRoot: {\r\n      height: !!nestingLevel && nestingLevel > 0 ? navChildItemHeight : navItemHeight,\r\n      cursor: 'pointer',\r\n      paddingLeft: !!nestingLevel && nestingLevel > 0 ? nestingLevel * navItemIndentSize : 'inherit',\r\n      selectors: {\r\n        ':hover': {\r\n          backgroundColor: hasChildren ? navItemWithChildBgColor : navItemHoverColor,\r\n        },\r\n        ':active': {\r\n          backgroundColor: navItemSelectedColor,\r\n        },\r\n      },\r\n    },\r\n    navItemBarMarker: {\r\n      marginLeft: !!nestingLevel && nestingLevel > 0 && !hasChildren ? '-10px' : '6px',\r\n      marginRight: !!nestingLevel && nestingLevel > 0 && !hasChildren ? '8px' : '0px',\r\n      marginTop: !!nestingLevel && nestingLevel > 0 ? '7px' : '12px',\r\n      width: '2px',\r\n      height: !!nestingLevel && nestingLevel > 0 ? '18px' : '24px',\r\n      backgroundColor: '#0078D4',\r\n      display: isSelected || isChildLinkSelected ? 'inline-block' : 'none',\r\n      borderWidth: 0,\r\n    },\r\n    navItemIconColumn: {\r\n      width: isSelected || isChildLinkSelected ? shortenedIconWidth : navCollapsedWidth,\r\n      fontSize: '16px',\r\n      lineHeight: !!nestingLevel && nestingLevel > 0 ? navChildItemHeight : navItemHeight,\r\n      textAlign: 'center',\r\n      color: '#000000',\r\n      verticalAlign: 'top',\r\n    },\r\n    navItemNameColumn: {\r\n      width: '100%',\r\n      marginLeft: isChildLinkSelected || (!hasChildren && isSelected && !(nestingLevel && nestingLevel > 0)) ? '8px' : '0px',\r\n      lineHeight: !!nestingLevel && nestingLevel > 0 ? navChildItemHeight : navItemHeight,\r\n      verticalAlign: 'top',\r\n      display: 'inline-block',\r\n      textOverflow: 'ellipsis',\r\n      overflow: 'hidden',\r\n      whiteSpace: 'nowrap',\r\n      color: '#000000',\r\n    },\r\n    navSlimItemRoot: {\r\n      selectors: {\r\n        ':hover': {\r\n          backgroundColor: hasChildren ? navItemWithChildBgColor : navItemHoverColor,\r\n        },\r\n      },\r\n    },\r\n    navFloatingRoot: [\r\n      {\r\n        display: 'none',\r\n        zIndex: 1901,\r\n        position: 'absolute',\r\n        marginLeft: navCollapsedWidth,\r\n        marginTop: -navItemHeight - (!!scrollTop && scrollTop > 0 ? scrollTop : 0),\r\n        width: navFloatingWidth,\r\n        color: navTextColor,\r\n        boxShadow: '0px 1.2px 3.6px rgba(0, 0, 0, 0.18), 0px 6.4px 14.4px rgba(0, 0, 0, 0.22)',\r\n        backgroundColor: floatingNavBackgroundColor,\r\n        opacity: '0.6',\r\n        selectors: {\r\n          [BackDropSelector]: {\r\n            webkitBackdropFilter: 'blur(20px) saturate(125%)',\r\n            backdropFilter: 'blur(20px) saturate(125%)',\r\n            backgroundColor: 'rgba(255,255,255,.6)',\r\n          },\r\n          a: {\r\n            width: '100%',\r\n            backgroundColor: 'inherit',\r\n          },\r\n        },\r\n      },\r\n      AnimationClassNames.slideRightIn20,\r\n    ],\r\n    navFloatingItemRoot: {\r\n      height: !!nestingLevel && nestingLevel > 0 ? navChildItemHeight : navItemHeight,\r\n      cursor: 'pointer',\r\n      backgroundColor: !(nestingLevel && nestingLevel > 0) ? navItemHoverColor : floatingNavBackgroundColor,\r\n      paddingLeft: navFloatingItemIndentSize,\r\n      selectors: {\r\n        ':hover': {\r\n          backgroundColor: !!nestingLevel && nestingLevel > 0 ? navItemHoverColor : 'unset',\r\n        },\r\n        ':active': {\r\n          backgroundColor: navItemSelectedColor,\r\n        },\r\n      },\r\n    },\r\n    navGroupSeparatorRoot: isFirstNavGroup\r\n      ? {\r\n          width: '100%',\r\n          height: hasGroupName ? navGroupSeparatorItemHeight : undefined,\r\n          textAlign: 'center',\r\n        }\r\n      : {\r\n          width: '100%',\r\n          height: hasGroupName ? navGroupSeparatorWithGroupNameHeight : navGroupSeparatorItemHeight,\r\n          textAlign: 'center',\r\n        },\r\n    navGroupSeparatorHrLine: isFirstNavGroup\r\n      ? undefined\r\n      : {\r\n          position: 'relative',\r\n          height: '20px',\r\n          borderBottom: `1px solid ${navItemWithChildBgColor}`,\r\n        },\r\n    navGroupSeparatorHeaderGroupName: {\r\n      position: 'absolute',\r\n      marginTop: isFirstNavGroup || !hasGroupName ? undefined : '40px',\r\n      left: '16px',\r\n      color: '#000000',\r\n      fontWeight: 'bold',\r\n    },\r\n    navToggler: {\r\n      height: navItemHeight,\r\n      cursor: 'pointer',\r\n      selectors: {\r\n        ':hover': {\r\n          backgroundColor: navItemHoverColor,\r\n        },\r\n      },\r\n      textAlign: 'left',\r\n    },\r\n    disabledStyle: {\r\n      ...noPointerEvents,\r\n      opacity: 0.5,\r\n    },\r\n    focusedStyle: [\r\n      getFocusStyle(theme, undefined, undefined, undefined, 'transparent', undefined),\r\n      {\r\n        display: 'block',\r\n        position: 'relative',\r\n        height: !!nestingLevel && nestingLevel > 0 ? navChildItemHeight : navItemHeight,\r\n        width: '100%',\r\n        lineHeight: !!nestingLevel && nestingLevel > 0 ? navChildItemHeight : navItemHeight,\r\n      },\r\n    ],\r\n  };\r\n};\r\n\r\n/* tslint:enable */\r\n","/* tslint:disable */\r\n\r\nimport {\r\n  INavLink as OfficeFabricNavLink,\r\n  INavLinkGroup,\r\n  INavState as OfficeFabricINavState,\r\n  IStyle,\r\n  IStyleFunctionOrObject,\r\n  ITheme,\r\n} from '@fluentui/react';\r\nimport { InjectedIntlProps } from 'react-intl';\r\n\r\n/* tslint:enable */\r\n\r\nexport enum NavGroupType {\r\n  ToggleGroup,\r\n  MenuGroup,\r\n  CustomizationGroup,\r\n}\r\n\r\nexport interface INavProps {\r\n  /**\r\n   * A collection of link groups to display in the navigation bar\r\n   */\r\n  groups: ICustomNavLinkGroup[] | null;\r\n\r\n  /**\r\n   * (Optional) The key of the nav item initially selected.\r\n   */\r\n  initialSelectedKey?: string;\r\n\r\n  /**\r\n   * (Optional) The key of the nav item selected by caller.\r\n   */\r\n  selectedKey?: string;\r\n\r\n  /**\r\n   * (Optional) Used to toggle the nav component between expanded and collapsed state\r\n   */\r\n  isNavCollapsed?: boolean;\r\n\r\n  /**\r\n   * (Optional) If used inside a parent element with scrollbar, provide the parent element id to properly position\r\n   * the floating nav by considering the scroll bar.\r\n   */\r\n  navScrollerId?: string;\r\n\r\n  /**\r\n   * (Optional) Aria label for the main menu\r\n   */\r\n\r\n  ariaLabel?: string;\r\n\r\n  /**\r\n   * (Optional) Call to provide customized styling that will layer on top of the variant rules\r\n   */\r\n  styles?: IStyleFunctionOrObject<INavStyleProps, INavStyles>;\r\n\r\n  /**\r\n   * (Optional) Used for telemetry\r\n   */\r\n  dataHint?: string;\r\n\r\n  /**\r\n   * (Optional) When enabled\r\n   * 1. Links will consider isHidden property to show/hide itself.\r\n   * 2. There will be a customization group with show more/less link to show/hide hidden links.\r\n   * 3. There will also be an edit nav link button. This is for the partner to implement the UX which\r\n   * will customize the isHidden property of the nav link (possibly through a flyout and refresh the Nav component).\r\n   */\r\n  enableCustomization?: boolean;\r\n\r\n  /**\r\n   * Used to override isHidden property of the Nav link when the \"Show More\" link is clicked\r\n   */\r\n  showMore?: boolean;\r\n\r\n  /**\r\n   * Theme provided by HOC.\r\n   */\r\n  theme?: ITheme;\r\n\r\n  /**\r\n   * (Optional) callback for the parent component when the nav component is toggled between expanded and collapsed state\r\n   */\r\n  onNavCollapsedCallback?(isCollapsed: boolean): void;\r\n\r\n  /**\r\n   * (Optional) callback for the Nav and SlimNav component when the \"Show more\" / \"Show less\" nav link is clicked.\r\n   * The state \"showMore\" stays in the parent NavToggler component to keep show more/less state of Nav and SlimNav component in sync.\r\n   */\r\n  onShowMoreLinkClicked?(ev: React.MouseEvent<HTMLElement>): void;\r\n\r\n  /**\r\n   * (Optional) callback for the parent component when the nav node is toggled between expanded and collapsed state\r\n   */\r\n  onNavNodeExpandedCallback?(nodeKey: string, isExpanded: boolean): void;\r\n\r\n  /**\r\n   * (Optional) callback for the parent component when the edit nav node is clicked\r\n   */\r\n  onEditLeftNavClickedCallback?(): void;\r\n}\r\n\r\nexport interface INavTogglerProps extends INavProps, InjectedIntlProps {\r\n  /**\r\n   * (Optional) callback for the consumer of NavToggler to know about the \"Show more\" / \"Show less\" event.\r\n   */\r\n  onShowMoreLinkClicked?(ev: React.MouseEvent<HTMLElement>, showMore?: boolean): void;\r\n}\r\n\r\nexport interface INavState extends OfficeFabricINavState {\r\n  /**\r\n   * Used to toggle the nav component between expanded and collapsed state.\r\n   */\r\n  isNavCollapsed?: boolean;\r\n\r\n  /**\r\n   * Used to override isHidden property of the Nav link when the \"Show More\" link is clicked\r\n   */\r\n  showMore?: boolean;\r\n\r\n  /**\r\n   * Used to lock the auto collapse logic when user manually expand the navigation\r\n   */\r\n  lockAutoCollapse?: boolean;\r\n}\r\n\r\nexport interface INavLink extends OfficeFabricNavLink {\r\n  /**\r\n   * (Optional) Used to adjust the floating nav when the scrollbar appears\r\n   */\r\n  scrollTop?: number;\r\n\r\n  /**\r\n   * (Optional) Show / hide the nav link\r\n   */\r\n  isHidden?: boolean;\r\n\r\n  /**\r\n   * (Optional) Localized alternate text for the name field.\r\n   */\r\n  alternateText?: string;\r\n\r\n  /**\r\n   * (Optional) To identify whether this link is show more/less and\r\n   * provide internal implementation to show/hide nav links based on isHidden property.\r\n   */\r\n  isShowMoreLink?: boolean;\r\n\r\n  /**\r\n   * (Optional) Provides an ability to toggle auto expand when the selectedKey prop is one of the child of this link\r\n   */\r\n  disableAutoExpand?: boolean;\r\n}\r\n\r\nexport interface ICustomNaveLink extends INavLink {\r\n  /**\r\n   * (Optional) Used to provide the tooltip text\r\n   */\r\n  tooltipText?: string;\r\n}\r\n\r\nexport interface ICustomNavLinkGroup extends INavLinkGroup {\r\n  /**\r\n   * Used to identify whether the nav group is toggle group or menu group or the customization group.\r\n   */\r\n  groupType: NavGroupType;\r\n\r\n  /**\r\n   * Used to show custom nav links\r\n   */\r\n  links: ICustomNaveLink[];\r\n}\r\n\r\nexport interface INavStyleProps {\r\n  /**\r\n   * Accept theme prop.\r\n   */\r\n  theme: ITheme;\r\n\r\n  /**\r\n   * is element selected boolean\r\n   */\r\n  isSelected?: boolean;\r\n\r\n  /**\r\n   * has children boolean\r\n   */\r\n  hasChildren?: boolean;\r\n\r\n  /**\r\n   * has group name\r\n   */\r\n  hasGroupName?: boolean;\r\n\r\n  /**\r\n   * has child be selected boolean\r\n   */\r\n  isChildLinkSelected?: boolean;\r\n\r\n  /**\r\n   * nesting level of the nav item in the nav tree\r\n   */\r\n  nestingLevel?: number;\r\n\r\n  /**\r\n   * is nav collapsed boolean\r\n   */\r\n  isCollapsed?: boolean;\r\n\r\n  /**\r\n   * if the component is hosted inside a scroll bar, send the scrollTop to position the floating nav relative to it's parent\r\n   */\r\n  scrollTop?: number;\r\n\r\n  /**\r\n   * zero based nav group index in the nav\r\n   */\r\n  groupIndex?: number;\r\n}\r\n\r\nexport interface INavStyles {\r\n  /**\r\n   * Style set for the nav component root\r\n   */\r\n  root: IStyle;\r\n\r\n  /**\r\n   * Style set for the nav item root\r\n   */\r\n  navItemRoot: IStyle;\r\n\r\n  /**\r\n   * Style set for the bar marker in the nav item\r\n   */\r\n  navItemBarMarker: IStyle;\r\n\r\n  /**\r\n   * Style set for the icon column in the nav item\r\n   */\r\n  navItemIconColumn: IStyle;\r\n\r\n  /**\r\n   * Style set for the name column in the nav item\r\n   */\r\n  navItemNameColumn: IStyle;\r\n\r\n  /**\r\n   * Style set for the slim version of nav item\r\n   */\r\n  navSlimItemRoot: IStyle;\r\n\r\n  /**\r\n   * Style set for the floating nav root in the slim version\r\n   */\r\n  navFloatingRoot: IStyle;\r\n\r\n  /**\r\n   * Style set for the floating nav item root\r\n   */\r\n  navFloatingItemRoot: IStyle;\r\n\r\n  /**\r\n   * Style set for the nav group separator\r\n   */\r\n  navGroupSeparatorRoot: IStyle;\r\n\r\n  /**\r\n   * Style set for the horizontal line in nav group separator\r\n   */\r\n  navGroupSeparatorHrLine: IStyle;\r\n\r\n  /**\r\n   * Style set for the group name in nav group separator\r\n   */\r\n  navGroupSeparatorHeaderGroupName: IStyle;\r\n\r\n  /**\r\n   * Style set for the nav toggler which toggles expanded and slim nav\r\n   */\r\n  navToggler: IStyle;\r\n\r\n  /**\r\n   * Style set to apply border on keyboard focus\r\n   */\r\n  focusedStyle: IStyle;\r\n\r\n  /**\r\n   * Style set to stop pointer events\r\n   *\r\n   */\r\n  disabledStyle: IStyle;\r\n  /**\r\n   * Overlay stylings for responsive nav\r\n   */\r\n  overlay: IStyle;\r\n}\r\n\r\nexport interface INavLinkProps extends React.AllHTMLAttributes<HTMLAnchorElement> {\r\n  /**\r\n   * Used for telemetry\r\n   */\r\n  dataHint?: string;\r\n\r\n  /**\r\n   * Used for telemetry\r\n   */\r\n  dataValue?: string;\r\n\r\n  /**\r\n   * Used by the screen reader to describe the nav link\r\n   */\r\n  ariaLabel?: string;\r\n\r\n  /**\r\n   * True means the nav link is currently expanded (visible), false means the nav link is currently collapsed (invisible)\r\n   */\r\n  ariaExpanded?: boolean;\r\n\r\n  /**\r\n   * The true means it is the current item within a set. False means it is not the current item.\r\n   * \"page\" means that it is the current page within a set of pages.\r\n   */\r\n  ariaCurrent?: boolean | 'page';\r\n\r\n  /**\r\n   * CSS class for the nav link container\r\n   */\r\n  rootClassName?: string;\r\n\r\n  /**\r\n   * Icon name for the icon shown on the left side of the nav link\r\n   */\r\n  leftIconName?: string;\r\n\r\n  /**\r\n   * Icon name for the icon shown on the right side of the nav link\r\n   */\r\n  rightIconName?: string;\r\n\r\n  /**\r\n   * CSS class for the text part of the nav link\r\n   */\r\n  textClassName?: string;\r\n\r\n  /**\r\n   * CSS class for the icon part of the nav link\r\n   */\r\n  iconClassName?: string;\r\n\r\n  /**\r\n   * CSS class for the bar marker part of the nav link\r\n   */\r\n  barClassName?: string;\r\n\r\n  /**\r\n   * Style to apply border on keyboard focus\r\n   */\r\n  focusedStyle?: string;\r\n\r\n  /**\r\n   * Style to stop pointer events\r\n   */\r\n  disabledStyle?: string;\r\n}\r\n","import { getDocument, INav } from '@fluentui/react';\r\nimport * as React from 'react';\r\nimport { INavLink, INavProps, INavState } from './Nav.types';\r\n\r\nexport class NavBase extends React.Component<INavProps, INavState> implements INav {\r\n  protected _hasAtleastOneHiddenLink = false;\r\n\r\n  public get selectedKey(): string | undefined {\r\n    return this.state.selectedKey;\r\n  }\r\n\r\n  // mandatory function from the INav interface. Focus on the first button/link when called\r\n  public focus(forceIntoFirstElement?: boolean | undefined): boolean {\r\n    const document = getDocument();\r\n    const expandCollapseButton = document ? (document.querySelector('#expandCollapseButton') as HTMLElement) : null;\r\n    const navFocusZone = document ? (document.querySelector('#navFocusZone') as HTMLElement) : null;\r\n\r\n    if (forceIntoFirstElement && !!expandCollapseButton) {\r\n      expandCollapseButton.focus();\r\n      return true;\r\n    }\r\n\r\n    if (navFocusZone) {\r\n      navFocusZone.focus();\r\n      return true;\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  protected getPreferredSelectedKey(): string {\r\n    let selectedKey = '';\r\n\r\n    // if caller passes in selectedKey, use it as first choice or use current state.selectedKey\r\n    if (this.props.selectedKey) {\r\n      selectedKey = this.props.selectedKey;\r\n    } else if (this.state.selectedKey) {\r\n      selectedKey = this.state.selectedKey;\r\n    }\r\n\r\n    return selectedKey;\r\n  }\r\n\r\n  /* given a link, find if one of the child is selected */\r\n  protected isChildLinkSelected(link: INavLink): boolean {\r\n    const selectedKey = this.getPreferredSelectedKey();\r\n\r\n    if (!selectedKey || !link || !link.links || link.links.length === 0) {\r\n      return false;\r\n    }\r\n\r\n    return link.links.some((childLink: INavLink) => {\r\n      return !!childLink && childLink.key === selectedKey;\r\n    });\r\n  }\r\n\r\n  // given a link and an optional includeChildren parameter, find if the link or any of the children is selected\r\n  protected isLinkSelected(link: INavLink, includeChildren: boolean): boolean {\r\n    const selectedKey = this.getPreferredSelectedKey();\r\n\r\n    if (!selectedKey || !link) {\r\n      return false;\r\n    }\r\n\r\n    // check if the link or any of the child link is selected\r\n    return link.key === selectedKey || (includeChildren && this.isChildLinkSelected(link));\r\n  }\r\n\r\n  protected getLinkText(link: INavLink, showMore?: boolean): string | undefined {\r\n    if (!link) {\r\n      return undefined;\r\n    }\r\n\r\n    if (link.isShowMoreLink && !showMore && link.alternateText) {\r\n      // if the link is show more/less link, based on the showMore state; return \"Show more\" localized text\r\n      return link.alternateText;\r\n    }\r\n\r\n    return link.name;\r\n  }\r\n\r\n  // find if atleast one child link is visible using isHidden property\r\n  // showMore flag will overwrite isHidden property\r\n  protected hasAtleastOneVisibleLink(links: INavLink[], showMore?: boolean): boolean {\r\n    if (!links || links.length === 0) {\r\n      return false;\r\n    }\r\n\r\n    return (\r\n      links.some((link: INavLink): boolean => {\r\n        return !link.isHidden;\r\n      }) || !!showMore\r\n    );\r\n  }\r\n}\r\n","import { Icon, IStyle, mergeStyles } from '@fluentui/react';\r\nimport * as React from 'react';\r\nimport { isPublisherRejectionUnappealable } from '../../@data';\r\nimport { INavLinkProps } from './Nav.types';\r\n\r\n/**\r\n * Represents a composed link in the Nav component.\r\n */\r\nexport const NavLink: React.FunctionComponent<INavLinkProps> = (props: INavLinkProps) => {\r\n  if (!props) {\r\n    return null;\r\n  }\r\n\r\n  const {\r\n    rightIconName,\r\n    leftIconName,\r\n    id,\r\n    href,\r\n    target,\r\n    disabled,\r\n    onClick,\r\n    dataHint,\r\n    dataValue,\r\n    ariaLabel,\r\n    ariaExpanded,\r\n    ariaCurrent,\r\n    title,\r\n    role,\r\n    rootClassName,\r\n    barClassName,\r\n    content,\r\n    iconClassName,\r\n    textClassName,\r\n    focusedStyle,\r\n    disabledStyle,\r\n  } = props;\r\n\r\n  const computedTextWidth: IStyle = {\r\n    // 100px to accommodate left and right icons (48px each)\r\n    width: 'calc(100% - 96px)',\r\n  };\r\n\r\n  if (!rightIconName && !leftIconName) {\r\n    // no icons, take full with to text\r\n    computedTextWidth.width = '100%';\r\n  } else if (!leftIconName || !rightIconName) {\r\n    // 48px to the left or right icon\r\n    computedTextWidth.width = 'calc(100% - 48px)';\r\n  }\r\n\r\n  const fixedIconWidth: IStyle = {\r\n    width: '48px',\r\n    display: rightIconName === 'OpenInNewWindow' ? 'none' : 'inline-block',\r\n  };\r\n\r\n  return (\r\n    <>\r\n      <a\r\n        id={id}\r\n        href={href}\r\n        target={target}\r\n        onClick={onClick}\r\n        data-hint={dataHint}\r\n        data-value={dataValue}\r\n        aria-label={ariaLabel}\r\n        aria-expanded={ariaExpanded}\r\n        aria-current={ariaCurrent}\r\n        role={role}\r\n        className={disabled ? disabledStyle : focusedStyle}\r\n        title={title}\r\n        style={{ pointerEvents: isPublisherRejectionUnappealable() ? 'none' : undefined }}\r\n      >\r\n        <div className={rootClassName} aria-hidden=\"true\">\r\n          <hr className={barClassName} />\r\n          {leftIconName ? <Icon iconName={leftIconName} className={iconClassName} /> : null}\r\n          {content ? <div className={mergeStyles(textClassName, computedTextWidth)}>{content}</div> : null}\r\n          {rightIconName ? <Icon iconName={rightIconName} className={mergeStyles(iconClassName, fixedIconWidth)} /> : null}\r\n        </div>\r\n      </a>\r\n    </>\r\n  );\r\n};\r\n","import { AnimationClassNames, classNamesFunction, styled } from '@fluentui/react';\r\nimport * as React from 'react';\r\nimport { getStyles } from './Nav.styles';\r\nimport { ICustomNavLinkGroup, INavLink, INavProps, INavState, INavStyleProps, INavStyles, NavGroupType } from './Nav.types';\r\nimport { NavBase } from './NavBase';\r\nimport { NavLink } from './NavLink';\r\n\r\nconst getClassNames = classNamesFunction<INavStyleProps, INavStyles>();\r\n\r\nclass NavComponent extends NavBase {\r\n  constructor(props: INavProps) {\r\n    super(props);\r\n\r\n    this.state = {\r\n      isLinkExpandStateChanged: false,\r\n      selectedKey: props.initialSelectedKey || props.selectedKey,\r\n      isGroupCollapsed: {},\r\n    };\r\n  }\r\n\r\n  public render() {\r\n    if (!this.props.groups || this.props.groups.length === 0) {\r\n      return null;\r\n    }\r\n\r\n    // reset the flag\r\n    // on render link, find if there is atleast one hidden link to display \"Show more\" link\r\n    this._hasAtleastOneHiddenLink = false;\r\n\r\n    return (\r\n      <>\r\n        {this.props.groups.map((group: ICustomNavLinkGroup, groupIndex: number) => {\r\n          return this._renderGroup(group, groupIndex);\r\n        })}\r\n      </>\r\n    );\r\n  }\r\n\r\n  private _onLinkClicked(link: INavLink, ev: React.MouseEvent<HTMLElement>): void {\r\n    const nextState: INavState = {\r\n      selectedKey: link.key,\r\n      isGroupCollapsed: {},\r\n    };\r\n\r\n    const hasChildren = link.links && link.links.length > 0;\r\n\r\n    if (hasChildren) {\r\n      // show child links\r\n      link.isExpanded = !link.isExpanded;\r\n\r\n      nextState.isLinkExpandStateChanged = true;\r\n\r\n      if (!!this.props.onNavNodeExpandedCallback && link.key) {\r\n        this.props.onNavNodeExpandedCallback(link.key, link.isExpanded);\r\n      }\r\n    } else if (link.onClick) {\r\n      if (!!this.props.onEditLeftNavClickedCallback && link.key && link.key === 'EditNavLink') {\r\n        this.props.onEditLeftNavClickedCallback();\r\n      } else {\r\n        // if there is a onClick defined, call it\r\n        link.onClick(ev, link);\r\n      }\r\n    }\r\n\r\n    this.setState(nextState);\r\n\r\n    if (hasChildren || link.onClick) {\r\n      // prevent further action if the link has children or onClick handler is defined\r\n      ev.preventDefault();\r\n    }\r\n\r\n    ev.stopPropagation();\r\n  }\r\n\r\n  private _renderCompositeLink(link: INavLink, linkIndex: number, nestingLevel: number): React.ReactElement<{}> | null {\r\n    if (!link) {\r\n      return null;\r\n    }\r\n\r\n    let ariaExpanded: boolean | undefined = undefined;\r\n    let rightIconName = '';\r\n    if (link.links && link.links.length > 0 && nestingLevel === 0) {\r\n      // for the first level link, show chevron icon if there is a children\r\n      rightIconName = link.isExpanded ? 'ChevronUp' : 'ChevronDown';\r\n\r\n      ariaExpanded = !!link.isExpanded;\r\n    } else if (link.url && link.target && link.target === '_blank') {\r\n      // for external links, show an icon\r\n      rightIconName = 'OpenInNewWindow';\r\n    }\r\n\r\n    // show nav icon for the first level only\r\n    const leftIconName = nestingLevel === 0 ? link.icon : undefined;\r\n    const isLinkSelected = this.isLinkSelected(link, false /* includeChildren */);\r\n    const isChildLinkSelected = this.isChildLinkSelected(link);\r\n    const hasChildren = !!link.links && link.links.length > 0;\r\n    const isSelected = (isLinkSelected && !hasChildren) || (isChildLinkSelected && !link.isExpanded);\r\n    const { styles, showMore, onShowMoreLinkClicked, dataHint, theme } = this.props;\r\n    const classNames = getClassNames(styles!, { isSelected, nestingLevel, isChildLinkSelected, theme: theme! });\r\n    const linkText = this.getLinkText(link, showMore);\r\n    const onClickHandler = link.isShowMoreLink && onShowMoreLinkClicked ? onShowMoreLinkClicked : this._onLinkClicked.bind(this, link);\r\n\r\n    let ariaCurrent: boolean | 'page' | undefined = undefined;\r\n    if (isSelected) {\r\n      // Set as current page within a set of pages.\r\n      ariaCurrent = 'page';\r\n    }\r\n\r\n    return (\r\n      <NavLink\r\n        id={link.key}\r\n        content={linkText}\r\n        href={link.url}\r\n        target={link.target}\r\n        onClick={onClickHandler}\r\n        dataHint={dataHint}\r\n        dataValue={link.key}\r\n        disabled={link.disabled}\r\n        ariaLabel={linkText}\r\n        ariaExpanded={ariaExpanded}\r\n        ariaCurrent={ariaCurrent}\r\n        title={link.title}\r\n        role=\"menuitem\"\r\n        rootClassName={classNames.navItemRoot}\r\n        leftIconName={leftIconName}\r\n        rightIconName={rightIconName === '' ? undefined : rightIconName}\r\n        textClassName={classNames.navItemNameColumn}\r\n        iconClassName={classNames.navItemIconColumn}\r\n        barClassName={classNames.navItemBarMarker}\r\n        focusedStyle={classNames.focusedStyle}\r\n        disabledStyle={classNames.disabledStyle}\r\n      />\r\n    );\r\n  }\r\n\r\n  private _renderLink(link: INavLink, linkIndex: number, nestingLevel: number): React.ReactElement<{}> | null {\r\n    if (!link) {\r\n      return null;\r\n    }\r\n\r\n    const linkText = this.getLinkText(link, this.props.showMore);\r\n\r\n    return (\r\n      <li key={link.key || linkIndex} title={linkText} role=\"menuitem\">\r\n        <span role=\"link\">\r\n          {this._renderCompositeLink(link, linkIndex, nestingLevel)}\r\n          {\r\n            // show child links\r\n            // 1. only for the first level and\r\n            // 2. if the link is expanded\r\n            nestingLevel === 0 && link.isExpanded ? (\r\n              <div className={AnimationClassNames.slideDownIn20}>{this._renderLinks(link.links as INavLink[], ++nestingLevel)}</div>\r\n            ) : null\r\n          }\r\n        </span>\r\n      </li>\r\n    );\r\n  }\r\n\r\n  private _renderLinks(links: INavLink[], nestingLevel: number): React.ReactElement<{}> | null {\r\n    if (!links || links.length === 0) {\r\n      return null;\r\n    }\r\n\r\n    const { enableCustomization, showMore } = this.props;\r\n\r\n    return (\r\n      <ul role=\"menu\">\r\n        {links.map((link: INavLink, linkIndex: number) => {\r\n          if (enableCustomization && link.isHidden) {\r\n            // atleast one link is hidden\r\n            this._hasAtleastOneHiddenLink = true;\r\n          }\r\n          if (enableCustomization && link.isHidden && !showMore) {\r\n            // atleast one link is hidden\r\n            this._hasAtleastOneHiddenLink = true;\r\n\r\n            // \"Show more\" overrides isHidden property\r\n            return null;\r\n          } else if (link.isShowMoreLink && !this._hasAtleastOneHiddenLink) {\r\n            // there is no hidden link, hide \"Show more\" link\r\n            return null;\r\n          } else {\r\n            return this._renderLink(link, linkIndex, nestingLevel);\r\n          }\r\n        })}\r\n      </ul>\r\n    );\r\n  }\r\n\r\n  private _renderGroup(group: ICustomNavLinkGroup, groupIndex: number): React.ReactElement<{}> | null {\r\n    if (!group || !group.links || group.links.length === 0) {\r\n      return null;\r\n    }\r\n\r\n    const { styles, enableCustomization, theme } = this.props;\r\n    const hasGroupName = !!group.name;\r\n\r\n    // skip customization group if customization is not enabled\r\n    if (!enableCustomization && group.groupType === NavGroupType.CustomizationGroup) {\r\n      return null;\r\n    }\r\n\r\n    const classNames = getClassNames(styles!, { hasGroupName, groupIndex, theme: theme! });\r\n\r\n    // display group header for groups with visible links\r\n    const isGroupHeaderVisible = this.hasAtleastOneVisibleLink(group.links, this.props.showMore);\r\n\r\n    return (\r\n      <div key={groupIndex}>\r\n        {isGroupHeaderVisible ? (\r\n          <div className={classNames.navGroupSeparatorRoot}>\r\n            <div className={classNames.navGroupSeparatorHrLine}>\r\n              {hasGroupName && <span className={classNames.navGroupSeparatorHeaderGroupName}>{group.name}</span>}\r\n            </div>\r\n          </div>\r\n        ) : null}\r\n        {this._renderLinks(group.links, 0 /* nestingLevel */)}\r\n      </div>\r\n    );\r\n  }\r\n}\r\n\r\nexport const Nav = styled<INavProps, INavStyleProps, INavStyles>(NavComponent, getStyles);\r\n\r\n/* tslint:enable */\r\n","import { defineMessages } from 'react-intl';\r\n\r\nexport default defineMessages({\r\n  collapseMenu: {\r\n    id: 'nav.collapseMenu',\r\n    defaultMessage: 'Collapse main menu',\r\n  },\r\n  expandMenu: {\r\n    id: 'nav.expandMenu',\r\n    defaultMessage: 'Expand main menu',\r\n  },\r\n});\r\n","/* tslint:disable */\r\nimport { classNamesFunction, getId, styled } from '@fluentui/react';\r\nimport * as React from 'react';\r\nimport { getStyles } from './Nav.styles';\r\nimport { ICustomNavLinkGroup, INavLink, INavProps, INavState, INavStyleProps, INavStyles, NavGroupType } from './Nav.types';\r\nimport { NavBase } from './NavBase';\r\nimport { NavLink } from './NavLink';\r\n\r\nconst getClassNames = classNamesFunction<INavStyleProps, INavStyles>();\r\n\r\nclass SlimNavComponent extends NavBase {\r\n  // store the previous floating nav shown to close when the current floating nav shows up.\r\n  private _prevFloatingNav: any;\r\n\r\n  constructor(props: INavProps) {\r\n    super(props);\r\n\r\n    this.state = {\r\n      isLinkExpandStateChanged: false,\r\n      selectedKey: props.initialSelectedKey || props.selectedKey,\r\n      isGroupCollapsed: {},\r\n    };\r\n  }\r\n\r\n  public get selectedKey(): string | undefined {\r\n    return this.state.selectedKey;\r\n  }\r\n\r\n  public render() {\r\n    if (!this.props.groups || this.props.groups.length === 0) {\r\n      return null;\r\n    }\r\n\r\n    // reset the flag\r\n    // on render link, find if there is atleast one hidden link to display \"Show more\" link\r\n    this._hasAtleastOneHiddenLink = false;\r\n\r\n    return (\r\n      <>\r\n        {this.props.groups.map((group: ICustomNavLinkGroup, groupIndex: number) => {\r\n          return this._renderGroup(group, groupIndex);\r\n        })}\r\n      </>\r\n    );\r\n  }\r\n\r\n  private _onLinkClicked(link: INavLink, ev: React.MouseEvent<HTMLElement>): void {\r\n    // set selected node\r\n    const nextState: INavState = {\r\n      selectedKey: link.key,\r\n      isGroupCollapsed: {},\r\n    };\r\n    this.setState(nextState);\r\n\r\n    const hasChildren = link.links && link.links.length > 0;\r\n\r\n    // if there is no children and onClick handler is defined, call it\r\n    if (!hasChildren && link.onClick) {\r\n      if (!!this.props.onEditLeftNavClickedCallback && link.key && link.key === 'EditNavLink') {\r\n        this.props.onEditLeftNavClickedCallback();\r\n      } else {\r\n        // if there is a onClick defined, call it\r\n        link.onClick(ev, link);\r\n      }\r\n    }\r\n\r\n    // prevent url action on anchor tag if the node has a children or if the onClick handler is defined\r\n    if (hasChildren || link.onClick) {\r\n      ev.preventDefault();\r\n    }\r\n\r\n    ev.stopPropagation();\r\n  }\r\n\r\n  private _getScrollTop(): number | undefined {\r\n    if (!this.props.navScrollerId) {\r\n      return undefined;\r\n    }\r\n\r\n    const navScroller = document.getElementById(this.props.navScrollerId) as HTMLElement;\r\n\r\n    if (navScroller && navScroller.scrollTop > 0) {\r\n      return navScroller.scrollTop;\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  private _onLinkMouseEnterOrLeave(link: INavLink, ev: React.SyntheticEvent<HTMLElement>): void {\r\n    link.scrollTop = this._getScrollTop();\r\n    this.setState({ isLinkExpandStateChanged: true });\r\n\r\n    ev.preventDefault();\r\n    ev.stopPropagation();\r\n\r\n    if (this._prevFloatingNav) {\r\n      this._prevFloatingNav.removeAttribute('style');\r\n    }\r\n  }\r\n\r\n  private _getFloatingNav(parentElement: HTMLElement | null): HTMLDivElement | undefined {\r\n    if (!parentElement) {\r\n      return;\r\n    }\r\n\r\n    return parentElement.querySelector('[data-floating-nav]') as HTMLDivElement;\r\n  }\r\n\r\n  private _onFocus(event: React.SyntheticEvent<HTMLElement>): void {\r\n    const currentFloatingNav = this._getFloatingNav((event.target as HTMLElement).parentElement);\r\n\r\n    if (!currentFloatingNav) {\r\n      return;\r\n    }\r\n    currentFloatingNav.setAttribute('style', 'display: block');\r\n    this._prevFloatingNav = currentFloatingNav;\r\n  }\r\n\r\n  private _onBlur(event: React.SyntheticEvent<HTMLElement>): void {\r\n    const currentFloatingNav = this._getFloatingNav((event.target as HTMLElement).parentElement);\r\n\r\n    if (!currentFloatingNav) {\r\n      return;\r\n    }\r\n    currentFloatingNav.removeAttribute('style');\r\n  }\r\n\r\n  private _onKeyDown(event: React.SyntheticEvent<HTMLElement>): void {\r\n    const nativeEvent = event as any;\r\n    const currentFloatingNav = this._getFloatingNav((nativeEvent.target as HTMLElement).parentElement);\r\n\r\n    if (!currentFloatingNav) {\r\n      return;\r\n    }\r\n\r\n    // Enter and Right Arrow\r\n    if (nativeEvent.keyCode === 13 || nativeEvent.keyCode === 39) {\r\n      currentFloatingNav.setAttribute('style', 'display: block');\r\n      this._prevFloatingNav = currentFloatingNav;\r\n    } else {\r\n      currentFloatingNav.removeAttribute('style');\r\n    }\r\n  }\r\n\r\n  private _renderCompositeLink(link: INavLink, linkIndex: number, nestingLevel: number): React.ReactElement<{}> | null {\r\n    if (!link) {\r\n      return null;\r\n    }\r\n\r\n    let rightIconName = '';\r\n    if (link.url && link.target && link.target === '_blank') {\r\n      // for external links, show an icon\r\n      rightIconName = 'OpenInNewWindow';\r\n    }\r\n\r\n    const isSelected = nestingLevel > 0 && this.isLinkSelected(link, false /* includeChildren */);\r\n    const { styles, showMore, dataHint, onShowMoreLinkClicked, theme } = this.props;\r\n    const classNames = getClassNames(styles!, { isSelected, nestingLevel, theme: theme! });\r\n    const linkText = this.getLinkText(link, showMore);\r\n    const onClickHandler = link.isShowMoreLink && onShowMoreLinkClicked ? onShowMoreLinkClicked : this._onLinkClicked.bind(this, link);\r\n\r\n    return (\r\n      <NavLink\r\n        id={getId(link.key)}\r\n        content={linkText}\r\n        href={link.url}\r\n        target={link.target}\r\n        dataHint={dataHint}\r\n        dataValue={link.key}\r\n        ariaLabel={linkText}\r\n        title={link.title}\r\n        role=\"menuitem\"\r\n        onClick={onClickHandler}\r\n        rootClassName={classNames.navFloatingItemRoot}\r\n        rightIconName={rightIconName === '' ? undefined : rightIconName}\r\n        textClassName={classNames.navItemNameColumn}\r\n        iconClassName={classNames.navItemIconColumn}\r\n        barClassName={classNames.navItemBarMarker}\r\n        focusedStyle={classNames.focusedStyle}\r\n      />\r\n    );\r\n  }\r\n\r\n  private _renderFloatingLink(link: INavLink, linkIndex: number, nestingLevel: number): React.ReactElement<{}> | null {\r\n    if (!link) {\r\n      return null;\r\n    }\r\n\r\n    const linkText = this.getLinkText(link, this.props.showMore);\r\n\r\n    return (\r\n      <li key={link.key || linkIndex} title={linkText} role=\"none\">\r\n        {this._renderCompositeLink(link, linkIndex, nestingLevel)}\r\n        {\r\n          // show child links\r\n          // 1. only for the first level\r\n          nestingLevel === 0 ? <div>{this._renderFloatingLinks(link.links as INavLink[], ++nestingLevel)}</div> : null\r\n        }\r\n      </li>\r\n    );\r\n  }\r\n\r\n  private _renderFloatingLinks(links: INavLink[], nestingLevel: number): React.ReactElement<{}> | null {\r\n    if (!links || links.length === 0) {\r\n      return null;\r\n    }\r\n\r\n    return (\r\n      <ul role=\"menu\">\r\n        {links.map((link: INavLink, linkIndex: number) => {\r\n          return this._renderFloatingLink(link, linkIndex, nestingLevel);\r\n        })}\r\n      </ul>\r\n    );\r\n  }\r\n\r\n  private _renderFloatingNav(link: INavLink, _linkIndex: number): React.ReactElement<{}> | null {\r\n    if (!link) {\r\n      return null;\r\n    }\r\n\r\n    const hasChildren = !!link.links && link.links.length > 0;\r\n    const { styles, theme } = this.props;\r\n    const classNames = getClassNames(styles!, { hasChildren, scrollTop: link.scrollTop, theme: theme! });\r\n\r\n    return (\r\n      <div className={classNames.navFloatingRoot} data-floating-nav>\r\n        {this._renderFloatingLinks([link], 0 /* nestingLevel */)}\r\n      </div>\r\n    );\r\n  }\r\n\r\n  private _renderLink(link: INavLink, linkIndex: number, _nestingLevel: number): React.ReactElement<{}> | null {\r\n    if (!link) {\r\n      return null;\r\n    }\r\n\r\n    const isSelected = this.isLinkSelected(link, true /* includeChildren */);\r\n    const hasChildren = !!link.links && link.links.length > 0;\r\n    const { styles, showMore, onShowMoreLinkClicked, dataHint, theme } = this.props;\r\n    const classNames = getClassNames(styles!, { isSelected, hasChildren, theme: theme! });\r\n    const linkText = this.getLinkText(link, showMore);\r\n    const onClickHandler = link.isShowMoreLink && onShowMoreLinkClicked ? onShowMoreLinkClicked : this._onLinkClicked.bind(this, link);\r\n\r\n    let ariaCurrent: boolean | 'page' | undefined = undefined;\r\n    if (isSelected) {\r\n      // Set as current page within a set of pages.\r\n      ariaCurrent = 'page';\r\n    }\r\n\r\n    return (\r\n      <li\r\n        key={link.key || linkIndex}\r\n        onMouseEnter={this._onLinkMouseEnterOrLeave.bind(this, link)}\r\n        onMouseLeave={this._onLinkMouseEnterOrLeave.bind(this, link)}\r\n        onKeyDown={this._onKeyDown.bind(this)}\r\n        onFocus={this._onFocus.bind(this)}\r\n        onBlur={this._onBlur.bind(this)}\r\n        title={linkText}\r\n        className={classNames.navSlimItemRoot}\r\n        role=\"menuitem\"\r\n      >\r\n        <span role=\"link\">\r\n          <NavLink\r\n            id={getId(link.key)}\r\n            href={link.url}\r\n            target={link.target}\r\n            dataHint={dataHint}\r\n            dataValue={link.key}\r\n            ariaLabel={linkText}\r\n            ariaCurrent={ariaCurrent}\r\n            role=\"menuitem\"\r\n            onClick={onClickHandler}\r\n            rootClassName={classNames.navItemRoot}\r\n            leftIconName={link.icon}\r\n            iconClassName={classNames.navItemIconColumn}\r\n            barClassName={classNames.navItemBarMarker}\r\n            focusedStyle={classNames.focusedStyle}\r\n          />\r\n          {this._renderFloatingNav(link, linkIndex)}\r\n        </span>\r\n      </li>\r\n    );\r\n  }\r\n\r\n  private _renderLinks(links: INavLink[], nestingLevel: number): React.ReactElement<{}> | null {\r\n    if (!links || links.length === 0) {\r\n      return null;\r\n    }\r\n\r\n    const { enableCustomization, showMore } = this.props;\r\n\r\n    return (\r\n      <ul role=\"menu\">\r\n        {links.map((link: INavLink, linkIndex: number) => {\r\n          if (enableCustomization && link.isHidden && !showMore) {\r\n            // atleast one link is hidden\r\n            this._hasAtleastOneHiddenLink = true;\r\n\r\n            // \"Show more\" overrides isHidden property\r\n            return null;\r\n          } else if (link.isShowMoreLink && !this._hasAtleastOneHiddenLink && !showMore) {\r\n            // there is no hidden link, hide \"Show more\" link\r\n            return null;\r\n          } else {\r\n            return this._renderLink(link, linkIndex, nestingLevel);\r\n          }\r\n        })}\r\n      </ul>\r\n    );\r\n  }\r\n\r\n  private _renderGroup(group: ICustomNavLinkGroup, groupIndex: number): React.ReactElement<{}> | null {\r\n    if (!group || !group.links || group.links.length === 0) {\r\n      return null;\r\n    }\r\n\r\n    const { styles, enableCustomization, theme } = this.props;\r\n\r\n    // skip customization group if customization is not enabled\r\n    if (!enableCustomization && group.groupType === NavGroupType.CustomizationGroup) {\r\n      return null;\r\n    }\r\n\r\n    const classNames = getClassNames(styles!, { groupIndex, theme: theme! });\r\n\r\n    // display group header for groups with visible links\r\n    const isGroupHeaderVisible = this.hasAtleastOneVisibleLink(group.links, this.props.showMore);\r\n\r\n    return (\r\n      <div key={groupIndex}>\r\n        {isGroupHeaderVisible ? (\r\n          <div className={classNames.navGroupSeparatorRoot}>\r\n            <div className={classNames.navGroupSeparatorHrLine} />\r\n          </div>\r\n        ) : null}\r\n        {this._renderLinks(group.links, 0 /* nestingLevel */)}\r\n      </div>\r\n    );\r\n  }\r\n}\r\n\r\nexport const SlimNav = styled<INavProps, INavStyleProps, INavStyles>(SlimNavComponent, getStyles);\r\n/* tslint:enable */\r\n","/* tslint:disable */\r\nimport { classNamesFunction, DirectionalHint, FocusZone, FocusZoneDirection, styled } from '@fluentui/react';\r\nimport * as React from 'react';\r\nimport { debounce, useWindowSize } from '../../hooks';\r\nimport { getStore } from '../../hooks/useWindowSize/store/store';\r\nimport { ConditionalTooltip } from '../ConditionalTooltip';\r\nimport { Nav } from './Nav';\r\nimport { getStyles } from './Nav.styles';\r\nimport { ICustomNavLinkGroup, INavState, INavStyleProps, INavStyles, INavTogglerProps, NavGroupType } from './Nav.types';\r\nimport { NavLink } from './NavLink';\r\nimport messages from './NavToggler.messages';\r\nimport { SlimNav } from './SlimNav';\r\n\r\nconst getClassNames = classNamesFunction<INavStyleProps, INavStyles>();\r\nconst { windowSizeFormatter, windowStoreSerializer } = useWindowSize();\r\n\r\nclass NavTogglerComponent extends React.Component<INavTogglerProps, INavState> {\r\n  constructor(props: INavTogglerProps) {\r\n    super(props);\r\n\r\n    this.state = {\r\n      isNavCollapsed: props.isNavCollapsed ? props.isNavCollapsed : false,\r\n      showMore: props.showMore ? props.showMore : false,\r\n      isGroupCollapsed: {},\r\n      lockAutoCollapse: false,\r\n    };\r\n\r\n    this._onShowMoreLinkClicked = this._onShowMoreLinkClicked.bind(this);\r\n  }\r\n\r\n  public triggerNavCollapse = (expand = true) => {\r\n    this.props.onNavCollapsedCallback?.(expand);\r\n    this.setState({ ...this.state, isNavCollapsed: expand });\r\n  };\r\n\r\n  public onOverlayClick = () => {\r\n    const { isWindowSmallSize, isWindowExtraSmallSize } = windowStoreSerializer(getStore());\r\n    if ((isWindowSmallSize || isWindowExtraSmallSize) && !this.state.isNavCollapsed) {\r\n      this.triggerNavCollapse();\r\n    }\r\n  };\r\n\r\n  // auto collapse nav bar when resizing to a smaller size\r\n  public handleResizeCollapseReset = () => {\r\n    if (this.state.lockAutoCollapse && this.state.isNavCollapsed) {\r\n      return;\r\n    }\r\n    const isWindowNonRegularSize = windowSizeFormatter(window.innerWidth) !== 'regular';\r\n    if (isWindowNonRegularSize && !this.state.isNavCollapsed) {\r\n      this.triggerNavCollapse();\r\n    }\r\n    if (!isWindowNonRegularSize && this.state.isNavCollapsed) {\r\n      this.triggerNavCollapse(false);\r\n    }\r\n  };\r\n\r\n  public componentDidMount(): void {\r\n    window.addEventListener('resize', debounce(this.handleResizeCollapseReset, 10));\r\n  }\r\n\r\n  public componentWillUnmount(): void {\r\n    window.removeEventListener('resize', debounce(this.handleResizeCollapseReset, 10));\r\n  }\r\n\r\n  // in small window size when nav item is clicked, nav should auto collapse\r\n  public componentDidUpdate(prevProps: Readonly<INavTogglerProps>, prevState: Readonly<INavState>, snapshot?: any): void {\r\n    const { isWindowSmallSize, isWindowExtraSmallSize } = windowStoreSerializer(getStore());\r\n    const shouldTriggerNavCollapse =\r\n      prevProps.selectedKey !== this.props.selectedKey && (isWindowSmallSize || isWindowExtraSmallSize) && !this.state.isNavCollapsed;\r\n    if (shouldTriggerNavCollapse) {\r\n      this.triggerNavCollapse();\r\n    }\r\n  }\r\n\r\n  public render() {\r\n    if (!this.props.groups || this.props.groups.length === 0) {\r\n      return null;\r\n    }\r\n\r\n    const { isNavCollapsed, showMore } = this.state;\r\n\r\n    const { styles, groups, theme, ariaLabel } = this.props;\r\n    const classNames = getClassNames(styles!, { isCollapsed: isNavCollapsed, theme: theme! });\r\n\r\n    const toggleNavGroups = groups.filter((navGroup: ICustomNavLinkGroup) => {\r\n      return !!navGroup && navGroup.groupType === NavGroupType.ToggleGroup;\r\n    });\r\n\r\n    const nonToggleNavGroups = groups.filter((navGroup: ICustomNavLinkGroup) => {\r\n      return !!navGroup && navGroup.groupType !== NavGroupType.ToggleGroup;\r\n    });\r\n\r\n    return (\r\n      <div className={classNames.root}>\r\n        <FocusZone id={'navFocusZone'} direction={FocusZoneDirection.vertical}>\r\n          <div className={classNames.overlay} onClick={this.onOverlayClick} />\r\n          <nav aria-label={ariaLabel}>\r\n            {this._renderExpandCollapseNavItem(toggleNavGroups)}\r\n            {isNavCollapsed ? (\r\n              <SlimNav\r\n                groups={nonToggleNavGroups}\r\n                selectedKey={this.props.selectedKey}\r\n                navScrollerId={this.props.navScrollerId}\r\n                dataHint={this.props.dataHint}\r\n                enableCustomization={this.props.enableCustomization}\r\n                showMore={showMore}\r\n                onShowMoreLinkClicked={this._onShowMoreLinkClicked}\r\n                onEditLeftNavClickedCallback={this.props.onEditLeftNavClickedCallback}\r\n              />\r\n            ) : (\r\n              <Nav\r\n                groups={nonToggleNavGroups}\r\n                selectedKey={this.props.selectedKey}\r\n                dataHint={this.props.dataHint}\r\n                enableCustomization={this.props.enableCustomization}\r\n                showMore={showMore}\r\n                onShowMoreLinkClicked={this._onShowMoreLinkClicked}\r\n                onNavNodeExpandedCallback={this.props.onNavNodeExpandedCallback}\r\n                onEditLeftNavClickedCallback={this.props.onEditLeftNavClickedCallback}\r\n              />\r\n            )}\r\n          </nav>\r\n        </FocusZone>\r\n      </div>\r\n    );\r\n  }\r\n\r\n  private _onNavCollapseClicked(ev: React.MouseEvent<HTMLElement>): void {\r\n    this.setState((prevState: INavState) => {\r\n      const isNavCollapsed = !prevState.isNavCollapsed;\r\n\r\n      // inform the caller about the collapse event\r\n      if (!!this.props.onNavCollapsedCallback) {\r\n        this.props.onNavCollapsedCallback(isNavCollapsed);\r\n      }\r\n\r\n      return {\r\n        isNavCollapsed: isNavCollapsed,\r\n        /**\r\n         * manual toggle nav will disable the auto collapse logic while resizing, only manual toggle nav again will unlock the auto collapse logic\r\n         */\r\n        lockAutoCollapse: !this.state.lockAutoCollapse,\r\n      };\r\n    });\r\n\r\n    ev.preventDefault();\r\n    ev.stopPropagation();\r\n  }\r\n\r\n  private _renderExpandCollapseNavItem(toggleNavGroups: ICustomNavLinkGroup[]): React.ReactElement<{}> | null {\r\n    const { formatMessage } = this.props.intl;\r\n    if ((!!toggleNavGroups && toggleNavGroups.length === 0) || !toggleNavGroups[0].links || toggleNavGroups[0].links.length === 0) {\r\n      // There is no toggle group with links defined\r\n      return null;\r\n    }\r\n\r\n    const isNavCollapsed = this.state.isNavCollapsed;\r\n    const { styles, dataHint, theme } = this.props;\r\n    const classNames = getClassNames(styles!, { theme: theme! });\r\n    const link = toggleNavGroups[0].links[0];\r\n    const navLinkId = 'expandCollapseButton';\r\n\r\n    return (\r\n      <ConditionalTooltip\r\n        showTooltip={!!link.tooltipText}\r\n        targetSelector={`#${navLinkId}`}\r\n        content={link.tooltipText}\r\n        directionalHint={DirectionalHint.bottomAutoEdge}\r\n      >\r\n        <NavLink\r\n          id={navLinkId}\r\n          href={link.url}\r\n          content={link.name}\r\n          disabled={link.disabled}\r\n          onClick={this._onNavCollapseClicked.bind(this)}\r\n          ariaExpanded={!isNavCollapsed}\r\n          dataHint={dataHint}\r\n          dataValue={link.key}\r\n          rootClassName={classNames.navToggler}\r\n          leftIconName={link.icon}\r\n          iconClassName={classNames.navItemIconColumn}\r\n          barClassName={classNames.navItemBarMarker}\r\n          textClassName={classNames.navItemNameColumn}\r\n          focusedStyle={classNames.focusedStyle}\r\n          role=\"button\"\r\n          ariaLabel={formatMessage(isNavCollapsed ? messages.expandMenu : messages.collapseMenu)}\r\n        />\r\n      </ConditionalTooltip>\r\n    );\r\n  }\r\n\r\n  private _onShowMoreLinkClicked(ev: React.MouseEvent<HTMLElement>): void {\r\n    ev.preventDefault();\r\n    ev.stopPropagation();\r\n\r\n    this.setState((prevState: INavState) => {\r\n      // let the consumer know about the \"show more\" or \"show less\" event\r\n      if (this.props.onShowMoreLinkClicked) {\r\n        this.props.onShowMoreLinkClicked(ev, !prevState.showMore);\r\n      }\r\n\r\n      return {\r\n        showMore: !prevState.showMore,\r\n      };\r\n    });\r\n  }\r\n}\r\n\r\nexport const NavToggler = styled<INavTogglerProps, INavStyleProps, INavStyles>(NavTogglerComponent, getStyles);\r\n/* tslint:enable */\r\n","import * as React from 'react';\r\nimport { FormattedMessage } from 'react-intl';\r\nimport { RouteComponentProps } from 'react-router';\r\n\r\nexport const NotFound = (props: RouteComponentProps) => (\r\n  <h1>\r\n    <FormattedMessage\r\n      id=\"notfound\"\r\n      defaultMessage=\"No match for {pathname}\"\r\n      values={{\r\n        pathname: <code>{props.location.pathname}</code>\r\n      }}\r\n    />\r\n  </h1>\r\n);\r\n","import { IPubcenterPalette, IPubcenterSpacing } from '../../../theme';\r\nimport { TythonNavStyleProps, TythonNavStyles } from './types';\r\n\r\nconst renderNormalIcon = {\r\n  '.fui-Tab__icon': {\r\n    '.navIconActive': {\r\n      display: 'none',\r\n    },\r\n    '.navIcon': {\r\n      display: 'block',\r\n    },\r\n  },\r\n};\r\nconst renderActiveIcon = {\r\n  '.fui-Tab__icon': {\r\n    '.navIconActive': {\r\n      display: 'block',\r\n    },\r\n    '.navIcon': {\r\n      display: 'none',\r\n    },\r\n  },\r\n};\r\n\r\nexport const getStyles = (props: TythonNavStyleProps): TythonNavStyles => {\r\n  const { theme } = props;\r\n  const spacing = theme.spacing as IPubcenterSpacing;\r\n  const palette = theme.palette as IPubcenterPalette;\r\n\r\n  return {\r\n    container: {\r\n      background: palette['NeutralBackground4.Rest'],\r\n      '.fui-TabList': {\r\n        height: '100%',\r\n        width: spacing.size64,\r\n      },\r\n      '.side-navigation-item-button': {\r\n        display: 'flex',\r\n        flexDirection: 'column',\r\n        width: '100%',\r\n        padding: `${spacing.size12} ${spacing.size6}`,\r\n        '.fui-Tab__content': {\r\n          fontWeight: 400,\r\n          fontSize: spacing.size10,\r\n          lineHeight: spacing.size14,\r\n          color: palette['NeutralForeground2.Rest'],\r\n        },\r\n        '.side-navigation-item-text': {\r\n          display: 'block',\r\n          maxWidth: spacing.size56,\r\n        },\r\n        ...renderNormalIcon,\r\n      },\r\n      '.side-navigation-item-button:hover': {\r\n        background: palette['NeutralBackground3.Rest'],\r\n        borderLeft: `${spacing.size2} solid ${palette['NeutralStroke1.Rest']}`,\r\n        '.fui-Tab__content': {\r\n          color: palette['CompoundBrandForeground1.Rest'],\r\n        },\r\n        ...renderActiveIcon,\r\n      },\r\n      '.side-navigation-item-button[aria-selected=\"true\"]:hover': {\r\n        '.fui-Tab__content': {\r\n          color: palette['CompoundBrandForeground1.Hover'],\r\n        },\r\n      },\r\n      '.side-navigation-item-button[aria-selected=\"true\"]': {\r\n        borderLeft: `${spacing.size2} solid ${palette['CompoundBrandForeground1.Rest']}`,\r\n        '.fui-Tab__content': {\r\n          color: palette['CompoundBrandForeground1.Rest'],\r\n        },\r\n        ...renderActiveIcon,\r\n      },\r\n      '.fui-Tab__content--reserved-space': {\r\n        height: 0,\r\n      },\r\n    },\r\n  };\r\n};\r\n","import { SideNavigationProps } from '@bingads-webui-fluent-component/navigation';\r\nimport { classNamesFunction, getTheme } from '@fluentui/react';\r\nimport { useEffect, useState } from 'react';\r\nimport { AuditHistoryRoute, HomePageRoute, UserLevelSettingRoute } from '../../Routes';\r\nimport { ICustomNavLinkGroup } from '../../components/Nav';\r\nimport { getRoutes } from '../../pages/ad-management/@data/services/getAdmanagementRoutes';\r\nimport { getStore } from '../../pages/ad-management/Account/Settings/@data/store/store';\r\nimport { getStyles } from './styles';\r\nimport { TythonNavStyleProps, TythonNavStyles, UseTythonNav } from './types';\r\n\r\nconst useTythonNav: UseTythonNav = (props) => {\r\n  const {\r\n    accessibleRoutes,\r\n    history,\r\n    generateNavIcons,\r\n    intl: { formatMessage },\r\n  } = props;\r\n  const { systemPreferences } = getStore().active;\r\n  const [navItems, setNavItems] = useState<SideNavigationProps['items']>([]);\r\n  const theme = getTheme();\r\n  const getClassNames = classNamesFunction<TythonNavStyleProps, TythonNavStyles>();\r\n  const classNames = getClassNames(getStyles, { theme });\r\n  const handleNavItemClick = (url: string, id: string) => {\r\n    url && history.push(url);\r\n  };\r\n\r\n  const generateNavItems = (input: ICustomNavLinkGroup[]): SideNavigationProps['items'] => {\r\n    return input.map((group) => {\r\n      return group.links.map((link) => {\r\n        let isNavItemSelected = history.location.pathname.includes(link.url);\r\n        // corner case - when user navigates to home page from logo click\r\n        if (history.location.pathname === HomePageRoute && link.icon === 'Home') {\r\n          isNavItemSelected = true;\r\n        }\r\n        // corner case - when user navigates to pages where we don't have a nav item for them. e.g. Audit History, User Level Setting page\r\n        if (history.location.pathname.includes(AuditHistoryRoute) || history.location.pathname.includes(UserLevelSettingRoute)) {\r\n          isNavItemSelected = false;\r\n        }\r\n        return {\r\n          text: getRoutes(formatMessage).find((route) => route.text === link.name)?.text ?? '',\r\n          onClick: () => handleNavItemClick(link.url, link.key ?? ''),\r\n          icon: generateNavIcons(link.icon),\r\n          title: link.title ?? '',\r\n          disabled: link.disabled ?? false,\r\n          id: link.key ?? '',\r\n          tooltipText: link.tooltipText ?? '',\r\n          isSelected: isNavItemSelected,\r\n        };\r\n      });\r\n    });\r\n  };\r\n\r\n  /**\r\n   * Initialize nav items\r\n   */\r\n  useEffect(() => {\r\n    setNavItems(generateNavItems(accessibleRoutes));\r\n    // eslint-disable-next-line react-hooks/exhaustive-deps\r\n  }, []);\r\n\r\n  /**\r\n   * lifecycle hook to update nav render conditions when\r\n   * - url updated\r\n   * - locale updated\r\n   */\r\n  useEffect(() => {\r\n    setNavItems(generateNavItems(accessibleRoutes));\r\n    // eslint-disable-next-line react-hooks/exhaustive-deps\r\n  }, [history.location.pathname, systemPreferences?.locale]);\r\n\r\n  /**\r\n   * accessibility enhancement: set tabindex to -1 for dummy elements in ads UI kit nav component\r\n   */\r\n  useEffect(() => {\r\n    const checkRender = () => {\r\n      const element = document?.querySelectorAll('i[data-tabster-dummy]');\r\n      if (element?.length) {\r\n        element.forEach((el) => {\r\n          el.setAttribute('tabindex', '-1');\r\n        });\r\n      } else {\r\n        window.requestAnimationFrame(checkRender);\r\n      }\r\n    };\r\n\r\n    checkRender();\r\n  }, []);\r\n\r\n  return { navItems, classNames };\r\n};\r\n\r\nexport default useTythonNav;\r\n","import { SideNavigation } from '@bingads-webui-fluent-component/navigation';\r\nimport { css } from '@fluentui/react';\r\nimport React from 'react';\r\nimport {\r\n  AccountNavIcon,\r\n  AccountNavIconActive,\r\n  AdBlockNavIcon,\r\n  AdBlockNavIconActive,\r\n  AdUnitNavIcon,\r\n  AdUnitNavIconActive,\r\n  AdsIcon,\r\n  AdsIconActive,\r\n  HomeNavIcon,\r\n  HomeNavIconActive,\r\n  InventoryIcon,\r\n  InventoryIconActive,\r\n  ReportNavIcon,\r\n  ReportNavIconActive,\r\n  SiteNavIcon,\r\n  SiteNavIconActive,\r\n} from './resources';\r\nimport { GenerateNavIcons, TythonNavComponent } from './types';\r\nimport useTythonNav from './useTythonNav';\r\n\r\nconst generateNavIcons: GenerateNavIcons = (iconName, className) => {\r\n  let iconSrc;\r\n  let iconSrcActive;\r\n  switch (iconName) {\r\n    case 'Home':\r\n      iconSrc = HomeNavIcon;\r\n      iconSrcActive = HomeNavIconActive;\r\n      break;\r\n    case 'AdUnit':\r\n      iconSrc = AdUnitNavIcon;\r\n      iconSrcActive = AdUnitNavIconActive;\r\n      break;\r\n    case 'Favicon':\r\n      iconSrc = SiteNavIcon;\r\n      iconSrcActive = SiteNavIconActive;\r\n      break;\r\n    case 'AdUnitBlock':\r\n      iconSrc = AdBlockNavIcon;\r\n      iconSrcActive = AdBlockNavIconActive;\r\n      break;\r\n    case 'CRMReport':\r\n      iconSrc = ReportNavIcon;\r\n      iconSrcActive = ReportNavIconActive;\r\n      break;\r\n    case 'AccountManagement':\r\n      iconSrc = AccountNavIcon;\r\n      iconSrcActive = AccountNavIconActive;\r\n      break;\r\n    case 'Inventory':\r\n      iconSrc = InventoryIcon;\r\n      iconSrcActive = InventoryIconActive;\r\n      break;\r\n    case 'Ads':\r\n      iconSrc = AdsIcon;\r\n      iconSrcActive = AdsIconActive;\r\n      break;\r\n    default:\r\n      iconSrc = undefined;\r\n      iconSrcActive = undefined;\r\n  }\r\n  return () => (\r\n    <>\r\n      <img src={iconSrc} alt={iconName} className={css(className, 'navIcon')} />\r\n      <img src={iconSrcActive} alt={iconName} className={css(className, 'navIconActive')} />\r\n    </>\r\n  );\r\n};\r\n\r\nconst TythonNav: TythonNavComponent = (props) => {\r\n  const { accessibleRoutes, history, intl } = props;\r\n  const { navItems, classNames } = useTythonNav({ accessibleRoutes, history, generateNavIcons, intl });\r\n\r\n  return (\r\n    <div className={classNames.container}>\r\n      <SideNavigation items={navItems} />\r\n    </div>\r\n  );\r\n};\r\n\r\nexport default TythonNav;\r\n","import { defineMessages } from 'react-intl';\r\n\r\nexport default defineMessages({\r\n  mainMenuAriaLabel: {\r\n    id: 'contentLayout.mainMenuAriaLabel',\r\n    defaultMessage: 'Main menu',\r\n  },\r\n});\r\n","import { IContentLayoutStyleProps, IContentLayoutStyles } from './ContentLayout.types';\r\n\r\nexport const getStyles = (props: IContentLayoutStyleProps): IContentLayoutStyles => {\r\n  const { theme } = props;\r\n\r\n  return {\r\n    root: {\r\n      display: 'flex',\r\n      flexDirection: 'column',\r\n      height: 'inherit',\r\n      flex: 1\r\n    },\r\n    menuAndContent: {\r\n      display: 'flex',\r\n      flexDirection: 'row',\r\n      height: 'inherit',\r\n      flex: 1,\r\n      overflowY: 'auto'\r\n    },\r\n    appNav: [\r\n      'ms-appNav',\r\n      {\r\n        overflowY: 'auto',\r\n        zIndex: 999,\r\n        display: 'flex'\r\n      }\r\n    ],\r\n    appContent: {\r\n      backgroundColor: theme.palette.white,\r\n      flex: 1,\r\n      overflowY: 'auto',\r\n      position: 'relative',\r\n      display: 'flex',\r\n      flexDirection: 'column'\r\n    },\r\n    appContentRoutes: {\r\n      flex: 1,\r\n      display: 'flex',\r\n      flexDirection: 'column'\r\n    }\r\n  };\r\n};\r\n","import { classNamesFunction, getTheme, INavLink } from '@fluentui/react';\r\nimport * as React from 'react';\r\nimport { Route, Switch } from 'react-router';\r\nimport { getAppStore, LayoutMode, onMenuCollapsedChanged } from '../../@data';\r\nimport { completeAccess, hasReadAccess, UserRoleEntity } from '../../@data/services/UserRoleService';\r\nimport { NavigationMenu } from '../../@data/store/schema/userrolemodels/NavigationMenu';\r\nimport { isTythonSelfServeUser } from '../../@data/utils/checkUserType';\r\nimport { getEntityAccessPermissions } from '../../@data/utils/getAccessPermission';\r\nimport { DetectAdBlock } from '../../components/DetectAdBlock/DetectAdBlock';\r\nimport { Main } from '../../components/Main/Main';\r\nimport { ICustomNaveLink, ICustomNavLinkGroup, NavGroupType, NavToggler } from '../../components/Nav';\r\nimport { useWindowSize } from '../../hooks';\r\nimport { getStore } from '../../hooks/useWindowSize/store/store';\r\nimport { RouteName } from '../../pages/ad-management/@data';\r\nimport { IRoute } from '../../Routes.types';\r\nimport { injectIntlWithObserver } from '../../utils';\r\nimport { getAdUnitRoute, getSitesRoute } from '../../utils/routeUtils';\r\nimport { Footer } from '../Footer/Footer';\r\nimport { InternationalizationLayout } from '../InternationalizationLayout';\r\nimport { NotFound } from '../NotFound/NotFound';\r\nimport { NotificationLayout } from '../NotificationLayout';\r\nimport TythonNav from '../TythonNav';\r\nimport messages from './ContentLayout.messages';\r\nimport { getStyles } from './ContentLayout.styles';\r\nimport { IContentLayoutProps, IContentLayoutStyleProps, IContentLayoutStyles } from './ContentLayout.types';\r\n\r\nconst getClassNames = classNamesFunction<IContentLayoutStyleProps, IContentLayoutStyles>();\r\nconst { windowStoreSerializer } = useWindowSize();\r\n/**\r\n * ContentLayout component is used to render the snackbar notifications, side-nav menu conditionally\r\n * and a custom header below the global header.\r\n */\r\nexport const ContentLayout = injectIntlWithObserver(\r\n  class ContentLayoutComponent extends React.Component<IContentLayoutProps> {\r\n    // when layout initial load, define nav manu collapse based on window size\r\n    public componentDidMount(): void {\r\n      const { isWindowRegularSize } = windowStoreSerializer(getStore());\r\n      if (!isWindowRegularSize) {\r\n        onMenuCollapsedChanged(true);\r\n      }\r\n    }\r\n\r\n    public render(): JSX.Element {\r\n      const classNames = getClassNames(getStyles, { theme: getTheme() });\r\n      const renderedHeader = this.props.onRenderHeader && this.props.onRenderHeader();\r\n\r\n      const isDefaultLayout = getAppStore().layout === LayoutMode.Default;\r\n\r\n      let menuRenderer: JSX.Element | undefined;\r\n\r\n      if (this.props.menuProps) {\r\n        menuRenderer = (\r\n          <div className={classNames.appNav}>\r\n            {isTythonSelfServeUser() ? (\r\n              <TythonNav {...this.props} accessibleRoutes={this._getNavigationAccess(this.props.menuProps.routes)} />\r\n            ) : (\r\n              <NavToggler\r\n                intl={this.props.intl}\r\n                groups={this._getNavigationAccess(this.props.menuProps.routes)}\r\n                dataHint=\"LeftNav\"\r\n                enableCustomization={true}\r\n                isNavCollapsed={getAppStore().menuCollapsed}\r\n                selectedKey={this.props.location.pathname}\r\n                onNavCollapsedCallback={(isCollapsed) => onMenuCollapsedChanged(isCollapsed)}\r\n                ariaLabel={this.props.intl.formatMessage(messages.mainMenuAriaLabel)}\r\n              />\r\n            )}\r\n          </div>\r\n        );\r\n      }\r\n\r\n      return (\r\n        <React.Fragment>\r\n          <DetectAdBlock />\r\n          <div className={classNames.root}>\r\n            <InternationalizationLayout publisher={getAppStore().publisher} userContext={getAppStore().userContext} />\r\n            <NotificationLayout {...this.props} ignoreGlobalAsync={this.props.ignoreNotificationAsync}>\r\n              <div className={classNames.menuAndContent}>\r\n                {isDefaultLayout && menuRenderer}\r\n                <Main className={classNames.appContent}>\r\n                  {isDefaultLayout && renderedHeader}\r\n                  <Switch>\r\n                    {this.props.children}\r\n                    <Route path=\"*\" component={NotFound} />\r\n                  </Switch>\r\n                  <Footer {...this.props} />\r\n                </Main>\r\n              </div>\r\n            </NotificationLayout>\r\n          </div>\r\n        </React.Fragment>\r\n      );\r\n    }\r\n\r\n    private _getNavigationAccess(routes: IRoute[]): ICustomNavLinkGroup[] {\r\n      const toggleNavLinkName = '';\r\n      const navAccessPermissions = getEntityAccessPermissions(UserRoleEntity.NavigationMenu) as NavigationMenu | null;\r\n\r\n      let navMenuLinks: ICustomNaveLink[] = [];\r\n\r\n      routes.forEach((route: IRoute) => {\r\n        const routeName = this._getRouteName(route.key);\r\n        const isTythonRoute = isTythonSelfServeUser() && [RouteName.inventory, RouteName.ads].includes(routeName as RouteName);\r\n\r\n        if (hasReadAccess(navAccessPermissions === null ? completeAccess : navAccessPermissions[routeName]) || isTythonRoute) {\r\n          navMenuLinks.push({\r\n            name: route.text,\r\n            url: this.props.match.url + route.key,\r\n            onClick: this._onNavClicked,\r\n            icon: route.icon,\r\n            title: route.text,\r\n            disabled: route.disabled,\r\n            key: this.props.match.url + route.key,\r\n          });\r\n        }\r\n      });\r\n\r\n      if (isTythonSelfServeUser()) {\r\n        const tythonExcludedRoutes = [getAdUnitRoute(), getSitesRoute()];\r\n        navMenuLinks = navMenuLinks.filter((link) => !tythonExcludedRoutes.includes(link.url));\r\n      }\r\n\r\n      const toggleGroup = isTythonSelfServeUser()\r\n        ? []\r\n        : [\r\n            {\r\n              links: [\r\n                {\r\n                  name: toggleNavLinkName,\r\n                  url: '#',\r\n                  icon: 'GlobalNavButton',\r\n                  key: 'key',\r\n                  tooltipText: toggleNavLinkName,\r\n                },\r\n              ],\r\n              groupType: NavGroupType.ToggleGroup,\r\n            },\r\n          ];\r\n\r\n      return [\r\n        ...toggleGroup,\r\n        {\r\n          links: navMenuLinks,\r\n          groupType: NavGroupType.MenuGroup,\r\n        },\r\n      ];\r\n    }\r\n\r\n    private _onNavClicked = (e: React.MouseEvent<HTMLElement>, nl: INavLink) => {\r\n      e.preventDefault();\r\n\r\n      if (!nl) {\r\n        return;\r\n      }\r\n\r\n      this.props.history.push(nl.url);\r\n    };\r\n\r\n    private _getRouteName = (key: string) => {\r\n      const keyParts = key.split('/');\r\n      const lastPart = keyParts[keyParts.length - 1];\r\n      return lastPart.split('?')[0];\r\n    };\r\n  }\r\n);\r\n","import { getTheme, mergeStyleSets } from '@fluentui/react';\r\nimport { ICommonStyleProps } from '../../types';\r\n\r\ntype StyleProperties = 'overlayStyle' | 'spinnerStyle';\r\nexport type PageSpinnerStyles = Record<StyleProperties, string>;\r\n\r\nexport const getStyles = (props: ICommonStyleProps): PageSpinnerStyles => {\r\n  return mergeStyleSets({\r\n    overlayStyle: {\r\n      flex: 1,\r\n      display: 'flex',\r\n      position: 'fixed',\r\n      zIndex: 9999999, // This should be of largest z-index to always appear at the top\r\n    },\r\n    spinnerStyle: {\r\n      flex: 1,\r\n      display: 'flex',\r\n      selectors: {\r\n        '.ms-Spinner-circle': {\r\n          height: 67,\r\n          width: 67,\r\n        },\r\n      },\r\n    },\r\n  });\r\n};\r\n\r\nexport function getClassNames<PropType>(props?: PropType): PageSpinnerStyles {\r\n  return getStyles({ theme: getTheme(), ...props });\r\n}\r\n","import { mergeStyleSets, Overlay, Spinner } from '@fluentui/react';\r\nimport React from 'react';\r\nimport { LOADING_SPINNER } from '../../constants/DataTestIdConstants';\r\nimport { getClassNames, PageSpinnerStyles } from './PageSpinner.styles';\r\n\r\nexport interface IPageSpinnerProps {\r\n  label?: string;\r\n  styleProps?: Partial<PageSpinnerStyles>;\r\n}\r\n\r\nexport function PageSpinner({ label, styleProps }: IPageSpinnerProps): JSX.Element {\r\n  const { overlayStyle, spinnerStyle } = mergeStyleSets(getClassNames(), styleProps);\r\n\r\n  return (\r\n    <Overlay data-test-id={LOADING_SPINNER} className={overlayStyle}>\r\n      <Spinner className={spinnerStyle} label={label} labelPosition=\"bottom\" />\r\n    </Overlay>\r\n  );\r\n}\r\n","import { defineMessages } from 'react-intl';\r\n\r\nexport default defineMessages({\r\n  footerAriaLabel: {\r\n    id: 'footer.footerAriaLabel',\r\n    defaultMessage: 'Footer',\r\n  },\r\n  legal: {\r\n    id: 'footer.legal',\r\n    defaultMessage: 'Legal',\r\n  },\r\n  privacyCookies: {\r\n    id: 'footer.privacyCookies',\r\n    defaultMessage: 'Privacy & Cookies',\r\n  },\r\n  consumerHealthPrivacy: {\r\n    id: 'footer.consumerHealthPrivacy',\r\n    defaultMessage: 'Consumer Health Privacy',\r\n  },\r\n  contactSupport: {\r\n    id: 'footer.contactSupport',\r\n    defaultMessage: 'Contact Support',\r\n  },\r\n  copyrightMicrosoft: {\r\n    id: 'footer.copyrightMicrosoft',\r\n    defaultMessage: '\\u00a9 Microsoft 2024',\r\n  },\r\n});\r\n","import { BreakPoints } from '../../../theme';\r\nimport { IFooterStyleProps, IFooterStyles } from './Footer.types';\r\n\r\nexport const getStyles = (props: IFooterStyleProps): IFooterStyles => {\r\n  const { theme } = props;\r\n  const { ResponsiveSmall } = BreakPoints;\r\n\r\n  return {\r\n    root: {\r\n      display: 'block',\r\n      backgroundColor: theme.palette['NeutralBackground4.Rest'],\r\n      padding: '13px 15px',\r\n      width: '-webkit-fill-available',\r\n      minWidth: `-moz-available`,\r\n      [ResponsiveSmall]: {\r\n        padding: '0px 15px',\r\n      },\r\n    },\r\n    footerLinks: {\r\n      color: theme.palette.themeDarkAlt,\r\n      fontSize: theme.fonts.smallPlus.fontSize,\r\n      padding: '0 15px',\r\n      lineHeight: '22px',\r\n      cursor: 'pointer',\r\n      textDecoration: 'none',\r\n      [ResponsiveSmall]: {\r\n        lineHeight: theme.fonts.small.fontSize,\r\n        padding: '0px 8px',\r\n      },\r\n    },\r\n    copyrightText: {\r\n      fontSize: theme.fonts.smallPlus.fontSize,\r\n      padding: '0 15px',\r\n      lineHeight: '22px',\r\n      [ResponsiveSmall]: {\r\n        lineHeight: theme.fonts.small.fontSize,\r\n        padding: '0px 8px',\r\n      },\r\n    },\r\n  };\r\n};\r\n","import { classNamesFunction, getTheme, IProcessedStyleSet } from '@fluentui/react';\r\nimport React from 'react';\r\nimport { injectIntl } from 'react-intl';\r\nimport { isTythonSelfServeUser } from '../../@data';\r\nimport { ExternalLink } from '../../components/ExternalLink';\r\nimport { SUPPORT_EMAIL, TNC_HREF_PATH } from '../../constants/AppConstants';\r\nimport { SupportPageRoute } from '../../Routes';\r\nimport messages from './Footer.messages';\r\nimport { getStyles } from './Footer.styles';\r\nimport { IFooterProps, IFooterStyleProps, IFooterStyles } from './Footer.types';\r\n\r\nconst theme = getTheme();\r\nconst getClassNames = classNamesFunction<IFooterStyleProps, IFooterStyles>();\r\nconst CONSUMER_HEALTH_PRIVACY_URL = 'https://go.microsoft.com/fwlink/?linkid=2259814';\r\n\r\nexport const Footer = injectIntl(\r\n  class extends React.Component<IFooterProps> {\r\n    private _classNames: IProcessedStyleSet<IFooterStyles>;\r\n\r\n    public render(): JSX.Element {\r\n      this._classNames = getClassNames(getStyles, { theme });\r\n      const formatMessage = this.props.intl.formatMessage;\r\n\r\n      return (\r\n        <footer className={this._classNames.root} aria-label={formatMessage(messages.footerAriaLabel)}>\r\n          <ExternalLink href={TNC_HREF_PATH} className={this._classNames.footerLinks} aria-label={formatMessage(messages.legal)}>\r\n            {formatMessage(messages.legal)}\r\n          </ExternalLink>\r\n\r\n          <ExternalLink\r\n            href=\"http://go.microsoft.com/fwlink/?LinkId=248681\"\r\n            className={this._classNames.footerLinks}\r\n            aria-label={formatMessage(messages.privacyCookies)}\r\n          >\r\n            {formatMessage(messages.privacyCookies)}\r\n          </ExternalLink>\r\n\r\n          <ExternalLink\r\n            href={CONSUMER_HEALTH_PRIVACY_URL}\r\n            className={this._classNames.footerLinks}\r\n            aria-label={formatMessage(messages.consumerHealthPrivacy)}\r\n          >\r\n            {formatMessage(messages.consumerHealthPrivacy)}\r\n          </ExternalLink>\r\n\r\n          <ExternalLink\r\n            href={isTythonSelfServeUser() ? `${SupportPageRoute}` : `mailto:${SUPPORT_EMAIL}`}\r\n            aria-label={formatMessage(messages.contactSupport)}\r\n            className={this._classNames.footerLinks}\r\n          >\r\n            {formatMessage(messages.contactSupport)}\r\n          </ExternalLink>\r\n\r\n          <span className={this._classNames.copyrightText}>{formatMessage(messages.copyrightMicrosoft)}</span>\r\n        </footer>\r\n      );\r\n    }\r\n  }\r\n);\r\n","export const upperCaseCountryCode = (locale: string): string => {\r\n  const arr = locale.split('-');\r\n  arr[1] = arr[1].toUpperCase();\r\n\r\n  return arr[0] + '-' + arr[1];\r\n};\r\n","export enum AccountProfileFeature {\r\n  EnableAdUnitDebugging = 'EnableAdUnitDebugging',\r\n  EnablePassedUrls = 'EnablePassedUrls',\r\n  EnablePassedKeywords = 'EnablePassedKeywords',\r\n  EnableCrawling = 'EnableCrawling',\r\n  EnableGlobalDefaultKeywords = 'EnableGlobalDefaultKeywords',\r\n  EnableAdultAds = 'EnableAdultAds'\r\n}\r\n","import { defineMessages } from 'react-intl';\r\n\r\nexport default defineMessages({\r\n  profileNotImplemented: {\r\n    id: 'profile.notImplemented',\r\n    defaultMessage: 'Profile Not Implemented Yet',\r\n  },\r\n  profileSignOut: {\r\n    id: 'profile.signout',\r\n    defaultMessage: 'Sign out',\r\n  },\r\n  userSettings: {\r\n    id: 'profile.userSettings',\r\n    defaultMessage: 'User settings',\r\n  },\r\n  auditHistory: {\r\n    id: 'profile.auditHistory',\r\n    defaultMessage: 'Audit history',\r\n  },\r\n});\r\n","module.exports = __webpack_public_path__ + \"static/media/Payment.b6d8fb79.svg\";","export function downloadFile(dataUrl: string, filename: string) {\r\n  if (!filename || !dataUrl) {\r\n    return;\r\n  }\r\n  const link = document.createElement('a');\r\n  link.setAttribute('download', filename);\r\n  link.setAttribute('href', dataUrl);\r\n  document.body.appendChild(link);\r\n  link.click();\r\n  document.body.removeChild(link);\r\n}\r\n","import { MessageBarType, getTheme } from '@fluentui/react';\r\nimport html2canvas from 'html2canvas';\r\nimport { IPubcenterSpacing } from '../../../../theme';\r\nimport { onNotificationChanged } from '../../../@data';\r\nimport { breakdownDate } from '../../../utils';\r\nimport { IMetadataElement } from '../DashboardCards/@data/store/schema';\r\nimport { ChartGrain } from '../DashboardCards/ReportCard/ReportCard.types';\r\nimport messages from '../Report.messages';\r\nimport { ICustomCalenderDateRange } from '../components/CustomCalender/CustomCalender.types';\r\nimport { downloadCSV } from './downloadCSV';\r\nimport { downloadFile } from './downloadFile';\r\nimport { FormatMessageFuncType, getReportColumnMetadataDisplayName } from './intlHelper';\r\n\r\nexport function exportToCsv(data: object[], columns: IMetadataElement[], filename, formatMessage: FormatMessageFuncType) {\r\n  if (!filename || columns.length <= 0) {\r\n    return;\r\n  }\r\n  const csvData = data\r\n    .map((row) => {\r\n      return columns\r\n        .map((col) => {\r\n          return row[col.key];\r\n        })\r\n        .join(',');\r\n    })\r\n    .join('\\n');\r\n  const csvHeaders = columns\r\n    .map((col) => {\r\n      return getReportColumnMetadataDisplayName(col.key, formatMessage);\r\n    })\r\n    .join(',');\r\n\r\n  downloadCSV(csvData, csvHeaders, filename);\r\n}\r\n\r\nexport async function exportToPNG(node: HTMLElement, filename: string) {\r\n  try {\r\n    if (!filename || !node) {\r\n      return;\r\n    }\r\n    const theme = getTheme();\r\n    const spacing = theme.spacing as IPubcenterSpacing;\r\n    node.style.padding = `${spacing.size8} ${spacing.size16}`;\r\n    const dataUrl = (await html2canvas(node)).toDataURL();\r\n    downloadFile(dataUrl, `${filename}.png`);\r\n  } catch (error) {\r\n    onNotificationChanged({\r\n      messageBarType: MessageBarType.error,\r\n      textMessageDescriptor: messages.failedToExportReportAsPNG,\r\n    });\r\n  }\r\n}\r\nexport function getExportFileName(\r\n  calendarDateRange: ICustomCalenderDateRange,\r\n  chartGrain: ChartGrain,\r\n  reportTitle: string,\r\n  locale: string\r\n) {\r\n  const brokenDownStartDate = breakdownDate(calendarDateRange.startDate, locale);\r\n  const brokenDownEndDate = breakdownDate(calendarDateRange.endDate, locale);\r\n  const startDateString = `${brokenDownStartDate.month}-${brokenDownStartDate.day}-${brokenDownStartDate.year}`;\r\n  const endDateString = `${brokenDownEndDate.month}-${brokenDownEndDate.day}-${brokenDownEndDate.year}`;\r\n  const exportedFileName = chartGrain ? constructName(reportTitle, chartGrain, startDateString, endDateString) : '';\r\n  return exportedFileName;\r\n}\r\n\r\nexport function constructName(reportName: string, currentChartGrain: ChartGrain, startDateString: string, endDateString: string) {\r\n  return `${reportName}${currentChartGrain === ChartGrain.NONE ? '-' : `-${currentChartGrain}-`}${startDateString}-to-${endDateString}`;\r\n}\r\n","import { downloadFile } from './downloadFile';\r\n\r\nexport function downloadCSV(csvData: string, csvHeaders: string, filename: string) {\r\n  if (!filename) {\r\n    return;\r\n  }\r\n  const csvDataMarker = 'data:text/csv;charset=utf-8,';\r\n  const csvFileData = csvDataMarker + (csvHeaders ? `${csvHeaders}\\n` : '') + csvData;\r\n  const encodedCSV = encodeURI(csvFileData);\r\n  downloadFile(encodedCSV, filename);\r\n}\r\n","import { Model } from './Model';\r\n\r\nexport class ReportingDataResponse {\r\n  public TrackingGuid: string;\r\n  public CallerGuid: string;\r\n  public Data: ReportingDataRow[];\r\n}\r\nexport class MediationReportingDataResponse {\r\n  public trackingId: string;\r\n  public data: MediationReportingDataRow[];\r\n}\r\n\r\nexport class ReportingDataRow extends Model {\r\n  public className: string = '';\r\n  public apiPath: string = '';\r\n}\r\nexport class TythonReportingDataRow extends ReportingDataRow {\r\n  public DateTime?: string;\r\n  public AccountId?: string;\r\n  public AccountName?: string;\r\n  public AdUnitId?: string;\r\n  public AdUnitName?: string;\r\n  public Country?: string;\r\n  public CountryCode?: string;\r\n  public ImpressionsServed?: number;\r\n  public ImpressionsViewed?: number;\r\n  public Viewability?: string;\r\n  public Revenue?: number;\r\n  public eCPM?: string;\r\n  public Clicks?: number;\r\n  public CTR?: string;\r\n  public FillRate?: string;\r\n}\r\nexport class MediationReportingDataRow extends ReportingDataRow {\r\n  public AdUnitId?: string;\r\n  public PubCenterAdUnitId?: string;\r\n  public AdUnitName?: string;\r\n  public SiteName?: string;\r\n  public Country?: string;\r\n  public Date?: string;\r\n  public OperatingSystem?: string;\r\n  public Revenue?: number;\r\n  public Impressions?: number;\r\n  public AdClicks?: number;\r\n  public AdCTR?: string;\r\n  public AdECPM?: string;\r\n}\r\n","import { MediationReportingDataRow, TythonReportingDataRow } from '../../../../../../@data/store/schema/models/ReportingDataResponse';\r\nimport { ChartGrain } from '../../../ReportCard/ReportCard.types';\r\n\r\nexport interface IReportPageReportData<DataType> {\r\n  isDataLoaded?: boolean;\r\n  isDetailedDataLoaded?: boolean;\r\n  data?: DataType[];\r\n  detailedData?: DataType[];\r\n}\r\nexport interface IReportsMetadata {\r\n  dimensions: IMetadataElement[];\r\n  metrics: IMetadataElement[];\r\n  grains: IMetadataElement[];\r\n  isMetadataLoaded: boolean;\r\n}\r\nexport interface IMetadataElement {\r\n  key: string;\r\n  displayName: string;\r\n  filterKey: string;\r\n  incompatibleFields: string[];\r\n}\r\nexport interface IGrainedReportData<DataType> {\r\n  [ChartGrain.NONE]: IReportPageReportData<DataType>;\r\n  [ChartGrain.HOURLY]: IReportPageReportData<DataType>;\r\n  [ChartGrain.DAILY]: IReportPageReportData<DataType>;\r\n  [ChartGrain.WEEKLY]: IReportPageReportData<DataType>;\r\n  [ChartGrain.MONTHLY]: IReportPageReportData<DataType>;\r\n  [ChartGrain.YEARLY]: IReportPageReportData<DataType>;\r\n  [ChartGrain.MONTH_AND_YEAR]: IReportPageReportData<DataType>;\r\n}\r\n\r\nexport type ColumnMembers = Record<string, IColumnMembersData>;\r\nexport interface IColumnMembersData {\r\n  isDataLoaded?: boolean;\r\n  data?: IColumnMemberDetails[];\r\n}\r\nexport interface IColumnMemberDetails {\r\n  Id: string;\r\n  Value: string;\r\n  DisplayName: string;\r\n}\r\n\r\nexport interface IReportPageData {\r\n  reportType: string;\r\n  metadata: IReportsMetadata;\r\n  mediationMetadata: IReportsMetadata;\r\n  columnMembers: ColumnMembers;\r\n  summary: IGrainedReportData<TythonReportingDataRow>;\r\n  mediationSummary: IGrainedReportData<MediationReportingDataRow>;\r\n  sites: IGrainedReportData<TythonReportingDataRow>;\r\n  country: IGrainedReportData<TythonReportingDataRow>;\r\n  adUnits: IGrainedReportData<TythonReportingDataRow>;\r\n  mediation: IGrainedReportData<MediationReportingDataRow>;\r\n  performance: IGrainedReportData<TythonReportingDataRow>;\r\n}\r\n\r\nexport enum ReportDataSource {\r\n  MSXTython = 'MSXTython',\r\n  TythonV2 = 'TythonV2',\r\n}\r\n","import { BaseButton, classNamesFunction, getTheme, ITheme, Spinner, Text } from '@fluentui/react';\r\nimport React from 'react';\r\nimport { APP_NAME_NEW } from '../../../../../constants/AppConstants';\r\nimport { AccountPageRoute } from '../../../../../Routes';\r\nimport { injectIntlAndObserver, injectRouterAndIntlWithObserver, IRouterWithIntl } from '../../../../../utils';\r\nimport { PAYMENTS_TAB_KEY } from '../../constants';\r\nimport { notificationMessages } from './paymentsOnboarding.messages';\r\nimport { getStyles, IPaymentsOnboardingStyles } from './PaymentsOnboarding.styles';\r\nimport usePaymentsOnboarding, { SETUP_PAYMENTS_NOTIFICATION_ACTION_BUTTON_ID } from './usePaymentsOnboarding';\r\n\r\nconst getClassNames = classNamesFunction<{ theme: ITheme }, IPaymentsOnboardingStyles>();\r\nexport const classNames = getClassNames(getStyles, { theme: getTheme() });\r\nconst ONBOARDING_CONTAINER_ID = 'onboarding-container';\r\n\r\nexport const PaymentsOnboarding = injectIntlAndObserver(({ intl: { formatMessage } }) => {\r\n  // render logic\r\n  const { xPayContainerRef, isInitializingXPayContainer } = usePaymentsOnboarding(formatMessage);\r\n\r\n  return (\r\n    <div className={classNames.root}>\r\n      {isInitializingXPayContainer && <Spinner className={classNames.xPayLoadingSpinner} />}\r\n      <div\r\n        id={ONBOARDING_CONTAINER_ID}\r\n        ref={xPayContainerRef}\r\n        className={(isInitializingXPayContainer && classNames.transparentContainer) || undefined}\r\n      />\r\n    </div>\r\n  );\r\n});\r\n\r\nexport const SetupPaymentNotification = injectRouterAndIntlWithObserver<IRouterWithIntl & { publisher: string; onAction: () => void }>(\r\n  ({ onAction, history, publisher: publisherId, intl: { formatMessage } }) => (\r\n    <div className={classNames.setupNotificationWrapper}>\r\n      <Text className={classNames.setupNotificationText}>\r\n        <b>\r\n          {formatMessage(notificationMessages.setupPaymentNotificationBoldedText, {\r\n            appName: APP_NAME_NEW,\r\n          })}\r\n        </b>{' '}\r\n        {formatMessage(notificationMessages.setupPaymentNotificationText)}\r\n      </Text>\r\n      {!history.location.pathname.includes(`${AccountPageRoute}#${PAYMENTS_TAB_KEY}`) && (\r\n        <BaseButton\r\n          className={classNames.actionButton}\r\n          id={SETUP_PAYMENTS_NOTIFICATION_ACTION_BUTTON_ID}\r\n          onClick={() => {\r\n            history.push(`/ad-management/${publisherId}${AccountPageRoute}#${PAYMENTS_TAB_KEY}`, { defaultTab: PAYMENTS_TAB_KEY });\r\n            onAction();\r\n          }}\r\n        >\r\n          {formatMessage(notificationMessages.setupPaymentButton)}\r\n        </BaseButton>\r\n      )}\r\n    </div>\r\n  )\r\n);\r\n","import { IStyle } from '@fluentui/merge-styles';\r\nimport { ITheme } from '@fluentui/theme';\r\nimport { BreakPoints, IPubcenterSpacing } from '../../../../../../theme';\r\n\r\nexport interface IPaymentsOnboardingStyles {\r\n  root: IStyle;\r\n  buttonContainer: IStyle;\r\n  dialogContentContainer: IStyle;\r\n  text: IStyle;\r\n  defaultButton: IStyle;\r\n  xPayContainer: IStyle;\r\n  xPayOverlay: IStyle;\r\n  setupNotificationWrapper: IStyle;\r\n  setupNotificationText: IStyle;\r\n  xPayLoadingSpinner: IStyle;\r\n  transparentContainer: IStyle;\r\n  targetPointer: IStyle;\r\n  actionButton: IStyle;\r\n  tncNotificationText: IStyle;\r\n}\r\nexport interface IPaymentOnboardingStyleProps {\r\n  theme: ITheme;\r\n}\r\n\r\nexport const getStyles = (props: IPaymentOnboardingStyleProps): IPaymentsOnboardingStyles => {\r\n  const { theme } = props;\r\n  const spacing = theme.spacing as IPubcenterSpacing;\r\n  const { ResponsiveSmall } = BreakPoints;\r\n\r\n  return {\r\n    root: {\r\n      padding: spacing.size8,\r\n      [`#xpay-cpconboarding-container > div:nth-child(2) > div:nth-child(1)`]: { boxShadow: '1px 1px 4px -2px lightgray' },\r\n    },\r\n    buttonContainer: {\r\n      display: 'flex',\r\n      marginTop: spacing.l2,\r\n      justifyContent: 'flex-end',\r\n      '> button:first-child': { marginRight: spacing.size12 },\r\n    },\r\n    dialogContentContainer: {},\r\n    setupNotificationWrapper: {\r\n      display: 'flex',\r\n      width: `calc(100vw - 64px)`,\r\n      justifyContent: 'space-between',\r\n      alignItems: 'center',\r\n    },\r\n    xPayContainer: {\r\n      zIndex: 4,\r\n      position: 'relative',\r\n      backgroundColor: '#ffffff',\r\n      borderRadius: 12,\r\n    },\r\n    xPayOverlay: { backgroundColor: 'lightgray', opacity: 0.6, zIndex: 3, overflowY: 'auto', transition: 'opacity 3s ease-in-out' },\r\n    text: { color: theme.semanticColors.primaryButtonText },\r\n    defaultButton: { color: theme.semanticColors.primaryButtonBackground },\r\n    xPayLoadingSpinner: {\r\n      paddingTop: 24,\r\n    },\r\n    transparentContainer: { opacity: 0 },\r\n    setupNotificationText: {\r\n      maxWidth: 'calc(100vw - 181px)',\r\n      [ResponsiveSmall]: {\r\n        alignSelf: 'center',\r\n      },\r\n    },\r\n    tncNotificationText: {\r\n      alignItems: 'center',\r\n      maxWidth: 'calc(100vw - 164px)',\r\n      [ResponsiveSmall]: {\r\n        alignSelf: 'center',\r\n      },\r\n    },\r\n    targetPointer: {\r\n      position: 'absolute',\r\n      width: 24,\r\n      height: 24,\r\n      backgroundColor: 'rgb(0, 120, 212)',\r\n      transform: 'rotate(132deg)',\r\n      bottom: -6,\r\n      left: 30,\r\n    },\r\n    actionButton: {\r\n      height: spacing.size24,\r\n    },\r\n  };\r\n};\r\n","module.exports = __webpack_public_path__ + \"static/media/noImageAvailable.86bd217e.svg\";","import { ISubGeography } from '../..';\r\nimport { getMetaDataStore } from './store';\r\n\r\nexport function getStatesOfCountry(country: string): ISubGeography[] {\r\n  const metadataStore = getMetaDataStore();\r\n  return metadataStore.raw?.states?.[country] || [];\r\n}\r\n\r\nexport function isStatesPresentForCountry(country: string): boolean {\r\n  return getStatesOfCountry(country).length > 0;\r\n}\r\n\r\nexport function getStatesDropdownOptions(country: string): { key: string; text: string }[] {\r\n  return getStatesOfCountry(country).map((state) => ({ key: state.code, text: state.name }));\r\n}\r\n","export enum ClarityStatus {\r\n  NotConnected = 'NotConnected',\r\n  Approved = 'Approved',\r\n  Declined = 'Declined',\r\n  Expired = 'Expired',\r\n  Pending = 'Pending',\r\n  Cancelled = 'Cancelled',\r\n  NotFound = 'NotFound',\r\n}\r\n","import { createStore } from 'satcheljs';\r\nimport { IAppealStateState } from './schema/IAppealState';\r\n\r\nexport const getAppealStore = createStore<IAppealStateState>('AppealState', {\r\n  documentUploadStatus: [],\r\n  isDocumentUploadPanelOpen: false,\r\n});\r\n","export const xandrAdProvidersToNames = {\r\n  2: 'Xandr Invest',\r\n  8: 'MediaMath',\r\n  13: 'OwnerIQ',\r\n  17: 'Roku OneView',\r\n  18: 'Zeta DSP',\r\n  20: 'Amobee',\r\n  33: 'Peer39',\r\n  34: 'Epsilon',\r\n  44: 'Quantcast',\r\n  48: 'Proximic',\r\n  52: 'Criteo',\r\n  54: 'iPromote',\r\n  65: 'eyeReturn',\r\n  66: 'Simpli.fi',\r\n  74: 'ClickDistrict (Platform 161 / Verve DSP)',\r\n  78: 'Accordant Media, LLC',\r\n  82: 'The Trade Desk',\r\n  87: 'Buzzlogic',\r\n  89: 'Grapeshot',\r\n  91: 'AdForm',\r\n  94: 'AdGear',\r\n  96: 'Media.Net',\r\n  98: 'DoubleVerify',\r\n  100: 'sociomantic labs GmbH',\r\n  101: 'Display & Video 360',\r\n  107: 'Bidtheatre',\r\n  112: 'Delta Projects',\r\n  114: 'AcuityAds',\r\n  115: 'Bering Data Provider',\r\n  120: 'Integral Ad Science',\r\n  122: 'Dealer.com',\r\n  123: 'Vizury Interactive Solutions Pvt. Ltd.',\r\n  125: 'FOutClient01Bidder',\r\n  129: 'Platform Services Test Bidder',\r\n  133: 'Basis Technologies',\r\n  137: 'Semcasting',\r\n  139: 'adtheorent_bidder',\r\n  145: 'AdPilot',\r\n  158: 'Adobe - Display',\r\n  160: 'AppNexus Testing Data Provider Bidder',\r\n  164: 'LiquidM Technology GmbH',\r\n  172: 'NextRoll',\r\n  177: 'Adloox (Data Provider)',\r\n  179: 'El Toro (Data Provider)',\r\n  180: 'Crimson Tangerine Ltd.',\r\n  182: 'shong',\r\n  183: 'Yahoo DSP',\r\n  188: 'Amazon Advertising',\r\n  194: 'Mediarithmics',\r\n  197: 'mbr targeting GmbH',\r\n  216: 'Mobile Listening Bidder',\r\n  218: 'The Weather Channel, LLC (Data Provider)',\r\n  222: 'Rockerbox, Inc',\r\n  225: 'MaxPoint Interactive',\r\n  226: '4Info, Inc.',\r\n  228: 'BlueCava, Inc.',\r\n  230: 'TradeLab (Data Provider)',\r\n  236: 'Opt Out Advertising B.V.',\r\n  240: 'Ubimo',\r\n  245: 'Media IQ Digital Ltd',\r\n  247: 'Addictive Mobility',\r\n  254: 'Active Agent',\r\n  256: 'Platform Integrations Test RTDP (Data Provider)',\r\n  259: 'dw_bidder_capacity',\r\n  260: 'Triapodi LTD',\r\n  264: 'Samba RDP',\r\n  268: 'Civolution B.V. (Data Provider)',\r\n  271: 'Accordant Media, LLC - 2',\r\n  276: 'So-net Media Networks',\r\n  283: 'adsquare GmbH',\r\n  290: 'AppNexus Floor Optimization',\r\n  291: 'Deqwas Inc.',\r\n  297: 'LDMobile (netADge)',\r\n  301: 'Adserver Test (Data Provider)',\r\n  302: 'remerge bidder',\r\n  304: 'Factual Inc (Data Provider)',\r\n  305: 'Exponential Interactive, Inc.',\r\n  306: 'AdDaptive Intelligence, Inc.',\r\n  313: 'TradeLab2',\r\n  315: 'RTB House',\r\n  319: 'A.Mob',\r\n  320: 'Travel Audience GmbH',\r\n  326: 'Integral Ad Science (Data Provider 2)',\r\n  327: 'AppNexus Programmable Data (Data Provider)',\r\n  328: 'StackAdapt',\r\n  329: 'Accordant Media, LLC',\r\n  331: 'Beeswax',\r\n  332: 'Mediasmart Mobile S.L.',\r\n  333: 'Bidtellect',\r\n  335: 'Emerse Sverige AB',\r\n  337: 'Schibsted',\r\n  341: 'Mindlytix SAS',\r\n  347: 'Digital To Store Limited',\r\n  349: 'apd_scylla',\r\n  351: 'Adelphic',\r\n  353: 'Jaduda GmbH',\r\n  359: 'Biga Bid Media Ltd',\r\n  360: 'Chalk Digital, Inc.',\r\n  363: 'Kobler AS',\r\n  368: 'TAPTAP Networks, S.L',\r\n  370: 'Blis Media Ltd.',\r\n  373: 'LinkedIn Bidder',\r\n  375: 'RhythmOne LLC',\r\n  376: 'Mobile Professionals B.V.',\r\n  384: 'Appier Inc.',\r\n  385: 'Kontekstno-mediynye tekhnologii',\r\n  386: 'Nanigans Bidder',\r\n  388: 'Bidswitch',\r\n  389: 'AdElement, Inc.',\r\n  390: 'Adello Group AG',\r\n  394: 'Localsensor B.V.',\r\n  397: 'Adtube AS',\r\n  399: 'Zemanta',\r\n  402: 'Lerta Business Inc.',\r\n  405: 'Hawk (TabMo SAS)',\r\n  408: 'Smadex SL',\r\n  421: 'AN Data Science Internal 1',\r\n  423: 'Smartology',\r\n  425: 'Mediakeys Platform',\r\n  427: 'Adobe - Video',\r\n  430: 'Yandex Europe AG',\r\n  431: 'Kika Tech Inc',\r\n  433: 'ZypMedia, Inc. (Compulse)',\r\n  435: 'ReadPeak',\r\n  437: 'SundaySky, Inc.',\r\n  438: 'M1D (BidSwitch)',\r\n  440: 'YDN',\r\n  442: 'Knorex Pte. Ltd.',\r\n  443: 'Prebid Server',\r\n  446: 'Dynalyst',\r\n  448: 'US3',\r\n  449: 'OC GROUP TECNOLOGIA DA INFORMACAO LTDA',\r\n  451: 'National Media Connection',\r\n  453: 'Pocketmath, Inc.',\r\n  454: 'digiseg apn gateway',\r\n  457: 'YJ Test',\r\n  461: 'Beemray OY (Data Provider)',\r\n  462: 'appnexus-video',\r\n  463: 'DeepIntent, Inc.',\r\n  464: 'SMARTSTREAM.TV GmbH',\r\n  465: 'ITN Holdings, LLC',\r\n  466: 'Craid Inc.',\r\n  467: 'NetSeer, Inc. (Data Provider)',\r\n  468: 'Eyeview Inc.',\r\n  471: 'SQUARED (Data Provider Test 12)',\r\n  472: 'Semasio GmbH (Data Provider)',\r\n  473: 'Axel Springer Teaser Ad GmbH',\r\n  474: \"DO NOT USE - Kayla's test\",\r\n  480: 'Mnet_bidder_2.0',\r\n  481: 'PLAYGROUND XYZ (Data Provider)',\r\n  482: 'MadHive Inc.',\r\n  483: 'MSAN',\r\n  484: 'AdLede (Data Provider)',\r\n  488: 'Emetriq GmbH RT (Data Provider)',\r\n  490: 'test-1',\r\n  492: 'test (can be deleted)',\r\n  493: 'test2 (can be deleted)',\r\n  494: 'PulsePoint, Inc.',\r\n  508: 'Nano Interactive GmbH (Data Provider)',\r\n  512: 'Test1Bdr',\r\n  514: 'Test2',\r\n  522: 'Silver Bullet Media Services (Data Provider)',\r\n  523: 'Inmar-OIQ, LLC',\r\n  524: 'GCN INC',\r\n  526: 'GUM GUM Inc (Data Provider)',\r\n  528: 'Qwarry (Data Provider)',\r\n  529: 'Baidu (Hong Kong) Limited',\r\n  530: 'Cognitiv',\r\n  534: 'Ericson Emodo',\r\n  535: 'Stirista_Bidder',\r\n  537: 'OctillionMediaLLC',\r\n  539: 'Sirdata SAS (Data Provider)',\r\n  541: 'Seedtag Advertising SL (Data Provider)',\r\n  542: 'ALLIANCE GRAVITY DATA MEDIA (Data Provider)',\r\n  543: 'Adelaide Metrics Inc. (Data Provider)',\r\n  544: 'MGID Inc',\r\n  545: 'Audigent (Data Provider)',\r\n  546: 'Cognitiv Corp, a Delaware corp (Data Provider)',\r\n  548: 'MSAN Test',\r\n  550: 'Proxistore (Data Provider)',\r\n  551: 'CTV AppNexus Programmable Data (Data Provider)',\r\n  552: 'non CTV AppNexus Programmable Data (Data Provider)',\r\n  553: 'GDMServices, Inc. d/b/a Bidmind',\r\n  554: 'DealerX',\r\n  555: 'Predictive Audiences RealTime APD',\r\n  556: 'MNTN',\r\n  557: 'Ravel Technologies (Data Provider)',\r\n  558: 'Audigent (Test)',\r\n  559: 'Choreograph RTDP (Data Provider)',\r\n  560: 'Decide',\r\n  561: 'Goldfish Ads, LLC (Data Provider)',\r\n};\r\n","export function startOfDay(date: Date) {\r\n  const newDate = new Date(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate(), 0, 0, 0, 0));\r\n  return newDate;\r\n}\r\nexport function endOfDay(date: Date) {\r\n  const newDate = new Date(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate(), 23, 59, 59, 0));\r\n  return newDate;\r\n}\r\nexport const daysAheadOfToday = (dateString: string): number => {\r\n  const today = new Date();\r\n  const date = new Date(dateString);\r\n  const diffTime = date.getTime() - today.getTime();\r\n  const diffDays = Math.ceil(diffTime / (1000 * 60 * 60 * 24));\r\n  return diffDays;\r\n};\r\nexport const breakdownDate = (date: Date, locale): { year: string; month: string; day: string } => {\r\n  const year = date.toLocaleString(locale, { year: 'numeric' });\r\n  const month = date.toLocaleString(locale, { month: 'short' });\r\n  const day = date.toLocaleString(locale, { day: '2-digit' });\r\n  return { year, month, day };\r\n};\r\n","import { addMethod, string, StringSchema } from 'yup';\r\nimport { Property } from '../../@data';\r\nimport { IPropertyViewModel } from '../../pages/ad-management/Property/Create/__data__/store/schema';\r\n\r\ndeclare module 'yup' {\r\n  // tslint:disable-next-line:interface-name\r\n  interface StringSchema {\r\n    domain(message?: TestOptionsMessage): StringSchema;\r\n    oldDomain(message?: TestOptionsMessage): StringSchema;\r\n    duplicateDomain(sites: Property[], isEditMode: boolean, activeSite: IPropertyViewModel): StringSchema;\r\n    name(message?: TestOptionsMessage): StringSchema;\r\n    duplicateName(sites: Property[], activeSite: IPropertyViewModel): StringSchema;\r\n  }\r\n}\r\n;\r\n\r\nexport function domainInitialize(defaultMessage: string) {\r\n  const rDomain = /^(https?:\\/\\/)?([a-zA-Z0-9]+\\.)?[a-zA-Z0-9][a-zA-Z0-9-]+\\.[a-zA-Z]{2,}?\\/?.*(?<!\\/)$|^(\\*\\.([a-zA-Z0-9]+)((.[a-zA-Z0-9]+)?)+)$/i\r\n  const pattern = new RegExp('^(?!://)([a-zA-Z0-9-_]+.)*[a-zA-Z0-9][a-zA-Z0-9-_]+.[a-zA-Z]{2,11}?$', 'i');\r\n\r\n  function domainStringValidator(this: StringSchema, message?: string) {\r\n    return this.matches(rDomain, { message: message ?? defaultMessage, excludeEmptyString: true });\r\n  }\r\n\r\n  function tythonDomainStringValidator(this: StringSchema, message?: string) {\r\n    return (\r\n      this.matches(rDomain, { message: message ?? defaultMessage, excludeEmptyString: true }) &&\r\n      this.matches(pattern, { message: message ?? defaultMessage, excludeEmptyString: true })\r\n    );\r\n  }\r\n\r\n  addMethod(string, 'oldDomain', domainStringValidator);\r\n  addMethod(string, 'domain', tythonDomainStringValidator);\r\n}\r\n\r\nexport function duplicateDomainInitialize(defaultMessage: string) {\r\n  // This function retrieves the domain name from the already saved site domains, if the sites saved contains 'www.' or 'https://'\r\n  // it just retrieves the domain name without 'www.'\r\n  function getDomainNameFromURL(websiteURL: string): string {\r\n    let getTheHostName: string;\r\n    if (websiteURL.indexOf('//') > -1) {\r\n      getTheHostName = websiteURL.split('/')[2];\r\n    } else {\r\n      getTheHostName = websiteURL.split('/')[0];\r\n    }\r\n    getTheHostName = getTheHostName.split(':')[0];\r\n    getTheHostName = getTheHostName.split('?')[0];\r\n    getTheHostName = getTheHostName.split('www.')[1] ?? getTheHostName;\r\n    return getTheHostName;\r\n  }\r\n\r\n  function checkSiteDomainDuplicates(this: StringSchema, sites: Property[], isEditMode: boolean, activeSite?: IPropertyViewModel) {\r\n    if (!isEditMode) {\r\n      const sitesDomain = sites.filter((site) => site.url && site.id !== activeSite?.id).map((site) => getDomainNameFromURL(site.url));\r\n\r\n      return this.test('domain-duplicate', defaultMessage, (value: string) => {\r\n        const domainName = value.split('www.')[1] ?? value;\r\n        return !sitesDomain.some((site) => site === domainName);\r\n      });\r\n    } else {\r\n      return this.test('domain-duplicate', defaultMessage, () => true);\r\n    }\r\n  }\r\n\r\n  addMethod(string, 'duplicateDomain', checkSiteDomainDuplicates);\r\n}\r\n\r\nexport function nameInitialize(defaultMessage: string) {\r\n  const nameRegex = /^[^\\d^\\W].*$/i;\r\n\r\n  function nameStringValidator(this: StringSchema, message?: string) {\r\n    return this.matches(nameRegex, { message: message ?? defaultMessage, excludeEmptyString: true });\r\n  }\r\n\r\n  addMethod(string, 'name', nameStringValidator);\r\n}\r\n\r\nexport function duplicateNameInitialize(defaultMessage: string) {\r\n  function checkSiteNameDuplicates(this: StringSchema, sites: Property[], activeSite?: IPropertyViewModel) {\r\n    return this.test('name-duplicate', defaultMessage, (value: string) => {\r\n      return !sites.filter((site) => site.id !== activeSite?.id).some((site) => site.name === value);\r\n    });\r\n  }\r\n\r\n  addMethod(string, 'duplicateName', checkSiteNameDuplicates);\r\n}\r\n","import { createStore } from \"satcheljs\";\r\nimport \"../orchestrators\";\r\nimport { IGoogleAdSenseViewState } from \"./schema/IGoogleAdSenseViewState\";\r\n\r\nexport const getGoogleAdSenseStore = createStore<IGoogleAdSenseViewState>('IGoogleAdSenseViewState', {\r\n  active: {}\r\n});","import { uiConfig } from '../../config/ui.config';\r\nimport { IColumnMemberDetails, IMetadataElement } from '../../pages/report/DashboardCards/@data/store/schema';\r\nimport { ReportColumnMembersParams } from '../store/schema/models/ReportColumnMembersParams';\r\nimport { ReportingDataRequestBody } from '../store/schema/models/ReportingDataRequestBody';\r\nimport { ReportingDataResponse } from '../store/schema/models/ReportingDataResponse';\r\nimport { handleApiErrors, handleError } from '../utils/handleApiErrors';\r\nimport { buildRequestHeadersWithAuthToken } from '../utils/requestUtils';\r\nimport { ApiError } from './ApiService';\r\n\r\nexport async function getReportData(\r\n  requestBody: ReportingDataRequestBody,\r\n  abortController: AbortController\r\n): Promise<{ data: ReportingDataResponse; aborted: boolean }> {\r\n  const baseUrl = `${uiConfig.getReportingApiBaseAddress()}`;\r\n  const redirectUrl = 'data';\r\n  const url = baseUrl + redirectUrl;\r\n\r\n  const headers = await buildRequestHeadersWithAuthToken(url);\r\n\r\n  let response: Response;\r\n  try {\r\n    response = await fetch(url, {\r\n      method: 'POST',\r\n      headers: headers,\r\n      body: JSON.stringify(requestBody),\r\n      signal: abortController.signal,\r\n    });\r\n    if (!response.ok) {\r\n      return handleApiErrors<{ data: ReportingDataResponse; aborted: boolean }>(response, url);\r\n    }\r\n\r\n    const responseJson = await response.json();\r\n    if (responseJson) {\r\n      return { data: responseJson, aborted: false };\r\n    }\r\n    return Promise.resolve({ aborted: false } as { data: ReportingDataResponse; aborted: boolean });\r\n  } catch (err) {\r\n    if (err.name === 'AbortError') {\r\n      return Promise.resolve({ aborted: true } as { data: ReportingDataResponse; aborted: boolean });\r\n    }\r\n    const error = `getReportData operation failed for ${url}. Errors: ${err}`;\r\n    return handleError(new ApiError(500, error), url);\r\n  }\r\n}\r\n\r\nexport async function getDimensions(reportType: string): Promise<IMetadataElement[]> {\r\n  const baseUrl = `${uiConfig.getReportingApiBaseAddress()}`;\r\n  const redirectUrl = `metadata/dimensions?reportType=${reportType}`;\r\n  const url = baseUrl + redirectUrl;\r\n\r\n  const headers = await buildRequestHeadersWithAuthToken(url);\r\n\r\n  let response: Response;\r\n\r\n  try {\r\n    response = await fetch(url, {\r\n      method: 'GET',\r\n      headers,\r\n    });\r\n\r\n    if (!response.ok) {\r\n      return handleApiErrors<IMetadataElement[]>(response, url);\r\n    }\r\n\r\n    const responseJson = await response.json();\r\n\r\n    if (responseJson) {\r\n      return responseJson;\r\n    }\r\n    return Promise.resolve([]);\r\n  } catch (err) {\r\n    const error = `getDimensions operation failed for ${url}. Errors: ${err}`;\r\n    return handleError(new ApiError(500, error), url);\r\n  }\r\n}\r\n\r\nexport async function getMetrics(reportType: string): Promise<IMetadataElement[]> {\r\n  const baseUrl = `${uiConfig.getReportingApiBaseAddress()}`;\r\n  const redirectUrl = `metadata/metrics?reportType=${reportType}`;\r\n  const url = baseUrl + redirectUrl;\r\n\r\n  const headers = await buildRequestHeadersWithAuthToken(url);\r\n\r\n  let response: Response;\r\n\r\n  try {\r\n    response = await fetch(url, {\r\n      method: 'GET',\r\n      headers,\r\n    });\r\n\r\n    if (!response.ok) {\r\n      return handleApiErrors<IMetadataElement[]>(response, url);\r\n    }\r\n\r\n    const responseJson = await response.json();\r\n\r\n    if (responseJson) {\r\n      return responseJson;\r\n    }\r\n    return Promise.resolve([]);\r\n  } catch (err) {\r\n    const error = `getMetrics operation failed for ${url}. Errors: ${err}`;\r\n    return handleError(new ApiError(500, error), url);\r\n  }\r\n}\r\n\r\nexport async function getGranularity(reportType: string): Promise<IMetadataElement[]> {\r\n  const baseUrl = `${uiConfig.getReportingApiBaseAddress()}`;\r\n  const redirectUrl = `metadata/grain?reportType=${reportType}`;\r\n  const url = baseUrl + redirectUrl;\r\n\r\n  const headers = await buildRequestHeadersWithAuthToken(url);\r\n\r\n  let response: Response;\r\n\r\n  try {\r\n    response = await fetch(url, {\r\n      method: 'GET',\r\n      headers,\r\n    });\r\n\r\n    if (!response.ok) {\r\n      return handleApiErrors<IMetadataElement[]>(response, url);\r\n    }\r\n\r\n    const responseJson = await response.json();\r\n\r\n    if (responseJson) {\r\n      return responseJson;\r\n    }\r\n    return Promise.resolve([]);\r\n  } catch (err) {\r\n    const error = `getGranularity operation failed for ${url}. Errors: ${err}`;\r\n    return handleError(new ApiError(500, error), url);\r\n  }\r\n}\r\n\r\nexport async function getColumnMembers(requestParams: ReportColumnMembersParams): Promise<IColumnMemberDetails[]> {\r\n  const baseUrl = `${uiConfig.getReportingApiBaseAddress()}`;\r\n  const redirectUrl = `metadata/columnMembers?${new URLSearchParams(requestParams)}`;\r\n  const url = baseUrl + encodeURIComponent(redirectUrl);\r\n\r\n  const headers = await buildRequestHeadersWithAuthToken(url);\r\n\r\n  let response: Response;\r\n\r\n  try {\r\n    response = await fetch(url, {\r\n      method: 'GET',\r\n      headers,\r\n    });\r\n\r\n    if (!response.ok) {\r\n      return handleApiErrors<IColumnMemberDetails[]>(response, url);\r\n    }\r\n\r\n    const responseJson = await response.json();\r\n\r\n    if (responseJson) {\r\n      return responseJson;\r\n    }\r\n    return Promise.resolve([]);\r\n  } catch (err) {\r\n    const error = `getColumnMembers operation failed for ${url}. Errors: ${err}`;\r\n    return handleError(new ApiError(500, error), url);\r\n  }\r\n}\r\n","import { getTheme, mergeStyleSets } from '@fluentui/react';\r\nimport { IPubcenterTheme } from '../../../theme';\r\nimport { ICommonStyleProps } from '../../types';\r\n\r\ntype StyleProperties = 'pivotRootStyle' | 'pivotItemContainerStyle';\r\nexport type TabsStyles = Record<StyleProperties, string>;\r\n\r\nexport const getStyles = (props: ICommonStyleProps): TabsStyles => {\r\n  const theme = (props.theme as unknown) as IPubcenterTheme;\r\n  const { spacing, palette } = theme;\r\n\r\n  return mergeStyleSets({\r\n    pivotRootStyle: {\r\n      borderBottom: `1px solid ${palette.neutralQuaternaryAlt}`,\r\n      marginLeft: `-${spacing.size32}`,\r\n      marginTop: spacing.size2,\r\n      padding: `0 ${spacing.size32}`,\r\n    },\r\n    pivotItemContainerStyle: {\r\n      marginLeft: spacing.size8,\r\n    },\r\n  });\r\n};\r\n\r\nexport function getClassNames<PropType>(props?: PropType): TabsStyles {\r\n  return getStyles({ theme: getTheme(), ...props });\r\n}\r\n","import { mergeStyleSets, Pivot, PivotItem } from '@fluentui/react';\r\nimport React, { useEffect, useMemo, useState } from 'react';\r\nimport { RouteComponentProps } from 'react-router-dom';\r\nimport { injectRouterAndIntlWithObserver, IRouterWithIntl } from '../../utils';\r\nimport { getCurrentHashValue } from '../../utils/UrlUtils';\r\nimport { getClassNames, TabsStyles } from './Tabs.styles';\r\n\r\nexport interface ITabProps {\r\n  key: string;\r\n  headerText: string;\r\n  component: JSX.Element;\r\n}\r\n\r\nexport interface ITabsProps {\r\n  tabs: ITabProps[];\r\n  className?: string;\r\n  styleProps?: Partial<TabsStyles>;\r\n  defaultTab?: string;\r\n  showItem?: (item) => void;\r\n}\r\n\r\nconst getDefaultSelectedTabKey = (keys: string[]): string => {\r\n  const currentHashValue = getCurrentHashValue();\r\n  if (keys.includes(currentHashValue)) {\r\n    return currentHashValue;\r\n  }\r\n\r\n  // return first tab key if no hash is provided in the URL\r\n  return keys[0];\r\n};\r\n\r\nconst updateUrl = (item?: PivotItem) => {\r\n  if (!item) {\r\n    return;\r\n  }\r\n\r\n  const url = new URL(window.location.href);\r\n  url.hash = item.props.itemKey || '';\r\n  window.history.replaceState('', '', url.toString());\r\n};\r\n\r\nexport const Tabs = injectRouterAndIntlWithObserver(\r\n  ({\r\n    tabs,\r\n    styleProps,\r\n    className = '',\r\n    history,\r\n    showItem,\r\n  }: ITabsProps &\r\n    IRouterWithIntl &\r\n    RouteComponentProps<\r\n      {},\r\n      {},\r\n      {\r\n        defaultTab?: string;\r\n      }\r\n    >): JSX.Element => {\r\n    const { pivotRootStyle, pivotItemContainerStyle } = mergeStyleSets(getClassNames(), styleProps);\r\n    const keys = useMemo(() => tabs.map((tab) => tab.key), [tabs]);\r\n    const defaultTab = getDefaultSelectedTabKey(keys);\r\n    const redirectTab = history?.location?.state?.defaultTab;\r\n    const [selectedKey, setSelectedKey] = useState(defaultTab);\r\n\r\n    useEffect(() => {\r\n      if (redirectTab) {\r\n        setSelectedKey(redirectTab);\r\n      }\r\n      // eslint-disable-next-line react-hooks/exhaustive-deps\r\n    }, [redirectTab]);\r\n\r\n    useEffect(() => {\r\n      return () => setSelectedKey(defaultTab);\r\n      // eslint-disable-next-line react-hooks/exhaustive-deps\r\n    }, []);\r\n\r\n    return (\r\n      <Pivot\r\n        defaultSelectedKey={defaultTab}\r\n        selectedKey={selectedKey}\r\n        className={className}\r\n        styles={{ root: pivotRootStyle, itemContainer: pivotItemContainerStyle }}\r\n        onLinkClick={(link) => {\r\n          setSelectedKey(link?.props?.itemKey!!);\r\n          showItem?.(link);\r\n          updateUrl(link);\r\n        }}\r\n      >\r\n        {tabs.map((tab) => (\r\n          <PivotItem key={tab.key} itemKey={tab.key} headerText={tab.headerText}>\r\n            {tab.component}\r\n          </PivotItem>\r\n        ))}\r\n      </Pivot>\r\n    );\r\n  }\r\n);\r\n","import { action } from 'satcheljs';\r\n\r\nexport const showTokenExpirationNotification = action('showTokenExpirationNotification');\r\n","import { action } from 'satcheljs';\r\n\r\nexport const onManagePageInitialized = action('onManagePageInitialized');\r\n","export enum FormState {\r\n  Create,\r\n  View,\r\n  Edit,\r\n  InPageCreate,\r\n  InPageView,\r\n  InPageEdit,\r\n  Delete,\r\n  Resend,\r\n  AcceptInvite,\r\n  MultiStepCreation,\r\n  MultiStepEdit,\r\n}\r\n","import { action } from 'satcheljs';\r\nimport { IGridV2Column } from '../../../../../layout/GridPageV2';\r\n\r\nexport const onManagePageInitialized = action('onManagePageInitialized', (defaultDataGridColumns: IGridV2Column[]) => ({\r\n  defaultDataGridColumns,\r\n}));\r\n\r\nexport const onUserInvitationsGridInitialized = action('onUserInvitationsGridInitialized', (defaultDataGridColumns: IGridV2Column[]) => ({\r\n  defaultDataGridColumns,\r\n}));\r\n","import { action } from 'satcheljs';\r\n\r\nexport const onInitializeRecommendationSection = action('onInitializeRecommendationSection');\r\nexport const fetchSetupCardsStatus = action('fetchSetupCardsStatus');\r\nexport const triggerOneVetAPIs = action('triggerOneVetAPIs', (eventType: 'login' | 'signup', useCache?: boolean) => ({\r\n  eventType,\r\n  useCache,\r\n}));\r\nexport const dismissFRE = action('dismissFRE');\r\nexport const onInitializeSystemPreferences = action('onInitializeSystemPreferences');\r\n","export enum AdPropertyType {\r\n  Unspecified,\r\n  Website,\r\n  Software,\r\n  Mobile\r\n}","export enum AdSource {\r\n  Microsoft = 'Microsoft',\r\n  Auction = 'Auction',\r\n  XandrAuction = 'Xandr Auction',\r\n}\r\n","export enum AdsTxtStatus {\r\n  Found,\r\n  NotFound,\r\n  Scanning,\r\n}\r\n","export enum AdUnitMarketClassification {\r\n  OwnedAndOperatedCore = 'OwnedAndOperatedCore',\r\n  OwnedAndOperated = 'OwnedAndOperated',\r\n  Syndicated = 'Syndicated',\r\n  SelectTier = 'SelectTier',\r\n  Sponsored = 'Sponsored',\r\n  SponsoredEnhanced = 'SponsoredEnhanced',\r\n}\r\n","export enum AdUnitRPSGuarantee {\r\n  None,\r\n  Core,\r\n  Excluded,\r\n  Other\r\n}","export enum AdUnitServingTier {\r\n  Default = 'Default',\r\n  lowCost = 'Low'\r\n}\r\n","export enum AdUnitType {\r\n  Unspecified = 'Unspecified',\r\n  Search = 'Search',\r\n  Native = 'Native',\r\n  MobileSearch = 'MobileSearch',\r\n}","export enum ApiErrorCodes {\r\n  AdUnitDoesNotHaveTemplate = 'AdUnitDoesNotHaveTemplate',\r\n  /** When API call fails due to token exiry or other authentication failure below error codes are returned */\r\n  InvalidOAuthToken = 'InvalidOAuthToken',\r\n  InvalidUserCredentials = 'InvalidUserCredentials',\r\n  InvalidCCAuthToken = 'InvalidClientCenterAuthenticationToken',\r\n  UserDoesNotExist = 'UserDoesNotExist',\r\n  UserAlreadyMigrated = 'UserAlreadyMigrated',\r\n  UserIdNotFound = 'UserIdNotFound',\r\n}\r\n","export enum AuditType {\r\n  CREATE = 'CREATE',\r\n  UPDATE = 'UPDATE',\r\n  DELETE = 'DELETE',\r\n  EXPORT = 'EXPORT',\r\n  DOWNLOAD = 'DOWNLOAD',\r\n  INVITE = 'INVITE',\r\n  INVITE_ACCEPT = 'INVITE_ACCEPT',\r\n}\r\n","export enum ChannelType {\r\n  UnSpecified = 'UnSpecified',\r\n  URL = 'Url',\r\n  CUSTOM = 'Custom',\r\n}","export enum ClarityType {\r\n  Fraud,\r\n  Behavioral,\r\n  None,\r\n}\r\n","export enum CustomPanelType {\r\n  ModifyColumns,\r\n  None,\r\n}","export enum EntityLimitTier {\r\n  Infinite = 'Infinite',\r\n  Small = 'Small',\r\n  Medium = 'Medium',\r\n  Large = 'Large',\r\n  Network = 'Network'\r\n}\r\n","export enum EntityType {\r\n  Publisher = 'Publisher',\r\n  Property = 'Property',\r\n  User = 'User',\r\n}\r\n","export enum FeatureOverideTier {\r\n  // needs to add what API accepts\r\n  InternalPremium = 'InternalPremium',\r\n  ManagedPremium = 'ManagedPremium',\r\n  SelfServeStandard = 'SelfServeStandard',\r\n  Api = 'Api',\r\n  SelfServeExperiment = 'SelfServeExperiment',\r\n  SelfServeSearch = 'SelfServeSearch'\r\n}\r\n","export enum FilterScope {\r\n  Account = 'Account',\r\n  Publisher = 'Publisher'\r\n}","export enum LayoutMode {\r\n  Default,\r\n  ContentOnly\r\n}\r\n","export enum MediaType {\r\n  PaidSearch = 1,\r\n  Contextual = 2,\r\n  MobileSearch = 3,\r\n  MobileContextual = 4,\r\n  Display = 5,\r\n  WindowsApp = 6,\r\n  Native = 10,\r\n  AudienceAds = 11,\r\n  LinkedInAds = 12,\r\n}\r\n\r\nexport const MediaTypeString = {\r\n  PaidSearch: 'PaidSearch',\r\n  MobilePaidSearch: 'MobilePaidSearch',\r\n  Native: 'Native',\r\n  AudienceAds: 'AudienceAds',\r\n  LinkedInAds: 'LinkedInAds',\r\n};\r\n","import { IDictionary } from '../../../../globalization';\r\n\r\nexport enum NotificationLabel {\r\n  // Critical\r\n  ProfileReviewTSTFailed = 'ProfileReviewTSTFailed',\r\n  ProfileReviewPublisherReputationFailed = 'ProfileReviewPublisherReputationFailed',\r\n  PaymentFailed = 'PaymentFailed',\r\n  PolicyUpdate = 'PolicyUpdate',\r\n  ClarityLinkDeclined = 'ClarityLinkDeclined',\r\n  ClarityLinkExpired = 'ClarityLinkExpired',\r\n\r\n  ProfileReviewPublisherReputationPassed = 'ProfileReviewPublisherReputationPassed',\r\n\r\n  // Payment failed reasons\r\n  PaymentFailedAccountClosed = 'PaymentFailedAccountClosed',\r\n  PaymentFailedBankAccountRestricted = 'PaymentFailedBankAccountRestricted',\r\n  PaymentFailedStripeCouldNotProcess = 'PaymentFailedStripeCouldNotProcess',\r\n  PaymentFailedCouldNotProcess = 'PaymentFailedCouldNotProcess',\r\n  PaymentFailedDeclined = 'PaymentFailedDeclined',\r\n  PaymentFailedExpiredCard = 'PaymentFailedExpiredCard',\r\n  PaymentFailedIncorrectAccountHolderName = 'PaymentFailedIncorrectAccountHolderName',\r\n  PaymentFailedInvalidAccountNumber = 'PaymentFailedInvalidAccountNumber',\r\n  PaymentFailedInvalidCard = 'PaymentFailedInvalidCard',\r\n  PaymentFailedInvalidCurrency = 'PaymentFailedInvalidCurrency',\r\n  PaymentFailedLostOrStolenCard = 'PaymentFailedLostOrStolenCard',\r\n  PaymentFailedNoAccount = 'PaymentFailedNoAccount',\r\n  PaymentFailedNoAccountLocated = 'PaymentFailedNoAccountLocated',\r\n\r\n  //  b. Warning\r\n  DomainReviewPassed = 'DomainReviewPassed',\r\n  DomainReviewFailed = 'DomainReviewFailed',\r\n  MissingPaymentInformation = 'MissingPaymentInformation',\r\n\r\n  UserSpecificTestLabel = 'UserSpecificTestLabel',\r\n\r\n  SomeTestAnnouncement = 'SomeTestAnnouncement',\r\n\r\n  // Error\r\n  ChooseGamNetworkFailure = 'ChooseGamNetworkFailure',\r\n  ChangingItemStatusFailure = 'ChangingItemStatusFailure',\r\n  DeletingItemFailure = 'DeletingItemFailure',\r\n  GridDataDownloadFailure = 'GridDataDownloadFailure',\r\n  DuplicateGridItemFailure = 'DuplicateGridItemFailure',\r\n  FeedbackErrorMessage = 'FeedbackErrorMessage',\r\n  FeedBackInvalidFormMessage = 'FeedBackInvalidFormMessage',\r\n  LoadingBalanceDataFailed = 'LoadingBalanceDataFailed',\r\n  PayoutInformationFailed = 'PayoutInformationFailed',\r\n  LoadPayoutInfoFailed = 'LoadPayoutInfoFailed',\r\n  DeletingUserWentWrong = 'DeletingUserWentWrong',\r\n  AdblockUpdateFailed = 'AdblockUpdateFailed',\r\n  AdblockToggleFailed = 'AdblockToggleFailed',\r\n  ToggleUniversalBlockFailed = 'ToggleUniversalBlockFailed',\r\n  UniversalAdblockUpdateFailed = 'UniversalAdblockUpdateFailed',\r\n  DuplicatedSiteCreationErrorNotification = 'DuplicatedSiteCreationErrorNotification',\r\n  LoadingSitesFailed = 'LoadingSitesFailed',\r\n  PropertyEditFailedNotification = 'PropertyEditFailedNotification',\r\n  CreateTythonAdUnitFailed = 'CreateTythonAdUnitFailed',\r\n}\r\n\r\nexport const mappingReasonsToLabels: IDictionary<NotificationLabel> = {\r\n  PaymentFailedReason_account_closed: NotificationLabel.PaymentFailedAccountClosed,\r\n  PaymentFailedReason_bank_account_restricted: NotificationLabel.PaymentFailedBankAccountRestricted,\r\n  PaymentFailedReasonStripe_could_not_process: NotificationLabel.PaymentFailedStripeCouldNotProcess,\r\n  PaymentFailedReason_could_not_process: NotificationLabel.PaymentFailedCouldNotProcess,\r\n  PaymentFailedReason_declined: NotificationLabel.PaymentFailedDeclined,\r\n  PaymentFailedReason_expired_card: NotificationLabel.PaymentFailedExpiredCard,\r\n  PaymentFailedReason_incorrect_account_holder_name: NotificationLabel.PaymentFailedIncorrectAccountHolderName,\r\n  PaymentFailedReason_invalid_account_number: NotificationLabel.PaymentFailedInvalidAccountNumber,\r\n  PaymentFailedReason_invalid_card: NotificationLabel.PaymentFailedInvalidCard,\r\n  PaymentFailedReason_invalid_currency: NotificationLabel.PaymentFailedInvalidCurrency,\r\n  PaymentFailedReason_lost_or_stolen_card: NotificationLabel.PaymentFailedLostOrStolenCard,\r\n  PaymentFailedReason_no_account: NotificationLabel.PaymentFailedNoAccount,\r\n  PaymentFailedReasonLocate_no_account: NotificationLabel.PaymentFailedNoAccountLocated,\r\n};\r\n\r\nexport const primaryExternalNotificationLabels = [\r\n  NotificationLabel.PolicyUpdate,\r\n  NotificationLabel.PaymentFailed,\r\n  NotificationLabel.PaymentFailedAccountClosed,\r\n  NotificationLabel.PaymentFailedBankAccountRestricted,\r\n  NotificationLabel.PaymentFailedStripeCouldNotProcess,\r\n  NotificationLabel.PaymentFailedCouldNotProcess,\r\n  NotificationLabel.PaymentFailedDeclined,\r\n  NotificationLabel.PaymentFailedExpiredCard,\r\n  NotificationLabel.PaymentFailedIncorrectAccountHolderName,\r\n  NotificationLabel.PaymentFailedInvalidAccountNumber,\r\n  NotificationLabel.PaymentFailedInvalidCard,\r\n  NotificationLabel.PaymentFailedInvalidCurrency,\r\n  NotificationLabel.PaymentFailedLostOrStolenCard,\r\n  NotificationLabel.PaymentFailedNoAccount,\r\n  NotificationLabel.PaymentFailedNoAccountLocated,\r\n  NotificationLabel.ClarityLinkDeclined,\r\n  NotificationLabel.ClarityLinkExpired,\r\n];\r\n","export enum NotificationSeverity {\r\n  Critical = 'Critical',\r\n  Warning = 'Warning',\r\n  Informational = 'Informational',\r\n  Announcements = 'Announcements',\r\n  Error = 'Error',\r\n}\r\n","export enum Partner {\r\n    Microsoft = 'Microsoft',\r\n    Yahoo = 'Yahoo'\r\n}","export enum PaymentInstrumentLifeCycleStatus {\r\n  Created = 'Created',\r\n  Submitted = 'Submitted',\r\n  Pending = 'Pending',\r\n  Failed = 'Failed',\r\n  PinFailed = 'PinFailed',\r\n  Blacklisted = 'Blacklisted',\r\n  Success = 'Success',\r\n  Validated = 'Validated'\r\n}\r\n","export enum PaymentOption {\r\n  MonthlyThreshold = 'Monthly Threshold',\r\n  NoPay = 'No Pay',\r\n}\r\n","export enum PrivateMarketplace {\r\n  InHouse = 'InHouse',\r\n  Boost = 'Boost',\r\n}\r\n","export enum PropertyApprovalStatus {\r\n  Approved = 'Approved',\r\n  AutoApproved = 'AutoApproved',\r\n  Rejected = 'Rejected',\r\n  UnderManualReview= 'UnderManualReview'\r\n}","export enum PublisherGroupConfig {\r\n  DefaultPlus = 'DefaultPlus',\r\n  Default = 'Default',\r\n  Generalist = 'Generalist',\r\n  YieldOptimize = 'YieldOptimize',\r\n  YieldMaximize = 'YieldMaximize',\r\n  BingYahooOAndO = 'BingYahooOAndO',\r\n  LowQualityDistribution = 'LowQualityDistribution',\r\n  MediumQualityDistribution = 'MediumQualityDistribution',\r\n  HighQualityDistribution = 'HighQualityDistribution',\r\n}\r\n","export enum NetworkAffiliation {\r\n    OwnedAndOperated = 'OwnedAndOperated',\r\n    Syndicated = 'Syndicated'\r\n}","export enum PublisherTier {\r\n  // needs to add what API accepts\r\n  InternalPremium = 'InternalPremium',\r\n  ManagedPremium = 'ManagedPremium',\r\n  SelfServeStandard = 'SelfServeStandard',\r\n  SelfServe3rdParty = 'SelfServe3rdParty',\r\n  SelfServe1stParty = 'SelfServe1stParty',\r\n  SelfServe1stPartyBoost = 'SelfServe1stPartyBoost',\r\n}\r\n","export enum ServiceLevel {\r\n  SelfServe = 'SelfServe',\r\n  SelfServeTrusted = 'SelfServeTrusted',\r\n  Premium = 'Premium',\r\n  Internal = 'Internal',\r\n  Select = 'Select'\r\n}\r\n\r\nexport const serviceLevelNameIdMap = {\r\n  SelfServe: 1,\r\n  SelfServeTrusted: 2,\r\n  Premium: 3,\r\n  Internal: 4,\r\n  Select: 5\r\n};\r\n","export enum UserRole {\r\n  PublisherAdmin = 'PublisherAdmin',\r\n  AccountManager = 'AccountManager',\r\n  ReportUser = 'ReportUser',\r\n  ListManager = 'ListManager',\r\n  AdView = 'AdViewer',\r\n  SuperAdmin = 'SuperAdmin'\r\n}\r\n","export enum UserRoleEntityType {\r\n  Customer = 'Customer',\r\n  Account = 'Account'\r\n}\r\n","import { AppealHistory } from '../../../../../../@data';\r\n\r\nexport interface IAppealStateState {\r\n  isDocumentUploadPanelOpen?: boolean;\r\n  documentUploadStatus: DocumentUploadStatus[];\r\n  appealHistory?: AppealHistory[];\r\n}\r\n\r\nexport enum DocumentUploadStatus {\r\n  NotStarted = 1,\r\n  InProgress,\r\n  Uploaded,\r\n  ActionRequired,\r\n}\r\n","import { mixed, object, string } from 'yup';\r\nimport { CustomerHelp } from '../../../../../@data/store/schema/enums/CustomerHelp';\r\nimport { PublisherType } from '../../../../../@data/store/schema/enums/PublisherType';\r\nimport { ISignUpViewModel } from './ISignUpViewModel';\r\n\r\nexport const ORG_NAME_MIN_LENGTH = 3;\r\nexport const ORG_NAME_MAX_LENGTH = 250;\r\n\r\nexport function signUpErrorModel() {\r\n  return object<ISignUpViewModel>().shape({\r\n    accountType: mixed().oneOf([PublisherType.individual, PublisherType.organization]).required(),\r\n    organizationName: mixed()\r\n      .when('accountType', {\r\n        is: PublisherType.organization,\r\n        then: string().required().min(ORG_NAME_MIN_LENGTH).max(ORG_NAME_MAX_LENGTH),\r\n      })\r\n      .label('Organization name'),\r\n    userFirstName: string().trim().required().label('First name'),\r\n    userLastName: string().trim().required().label('Last name'),\r\n    customerHelp: mixed().oneOf([CustomerHelp.Default, CustomerHelp.NoHelp]),\r\n  });\r\n}\r\n","import { createStore } from 'satcheljs';\r\nimport { PublisherType } from '../../../../@data/store/schema/enums/PublisherType';\r\nimport { ISignUpViewState } from './schema';\r\nexport const DEFAULT_SELECTED_ACCOUNT_TYPE = PublisherType.individual;\r\n\r\nexport const getSignUpStore = createStore<ISignUpViewState>('SignUpState', {\r\n  active: {\r\n    accountType: DEFAULT_SELECTED_ACCOUNT_TYPE,\r\n  },\r\n  errors: {},\r\n  isTermsAndConditionsAgreed: false,\r\n  fetchingOvdfStatus: false,\r\n  optInPromotionalEmail: false,\r\n});\r\n","import { mixed, object, string } from 'yup';\r\nimport { Publisher, SelfServePublisher, User, getAddressValidationModel, isOrganizationPublisher } from '../../../../../../@data';\r\nimport { PublisherType } from '../../../../../../@data/store/schema/enums/PublisherType';\r\nimport { ORG_NAME_MAX_LENGTH, ORG_NAME_MIN_LENGTH } from '../../../../../signup/@data';\r\n\r\nexport function profileValidationModel() {\r\n  if (isOrganizationPublisher()) {\r\n    return object<SelfServePublisher>().shape({\r\n      user: getUserProfileValidationModel(),\r\n      publisher: getPublisherProfileValidationModel(),\r\n    });\r\n  } else {\r\n    return object<SelfServePublisher>().shape({\r\n      user: getUserProfileValidationModel(),\r\n    });\r\n  }\r\n}\r\n\r\nexport function getUserProfileValidationModel() {\r\n  return object<User>().shape({\r\n    contactInfo: object().shape({\r\n      phone1: string()\r\n        // TODO: for now make +1 as mandatory US country code, when enabling for other countries, we can make it dynamic\r\n        .matches(/^\\+1 \\d{10}$/, {\r\n          message: 'Invalid phone number',\r\n        })\r\n        .required()\r\n        .label('Phone1'),\r\n    }),\r\n    postalAddress: getAddressValidationModel(),\r\n  });\r\n}\r\n\r\nexport function getPublisherProfileValidationModel() {\r\n  return object<Publisher>().shape({\r\n    publisherType: mixed().oneOf([PublisherType.individual, PublisherType.organization]).required(),\r\n    name: string().required().min(ORG_NAME_MIN_LENGTH).max(ORG_NAME_MAX_LENGTH).label('Organization name'),\r\n    extendedProperties: object().shape({\r\n      organizationEmailAddress: string().email().required().label('Organization email'),\r\n      organizationUrl: string().domain('Invalid organization URL').required().label('Organization URL'),\r\n      ceoName: string().name().required().label('CEO name'),\r\n    }),\r\n    address: getAddressValidationModel(),\r\n  });\r\n}\r\n","import { Callout, classNamesFunction, DirectionalHint, IconButton, Spinner } from '@fluentui/react';\r\nimport * as React from 'react';\r\nimport { IInfoButtonProps, IInfoButtonStyleProps, IInfoButtonStyles } from './InfoButton.types';\r\n\r\nconst getClassNames = classNamesFunction<IInfoButtonStyleProps, IInfoButtonStyles>();\r\ninterface IInfoButtonState {\r\n  isCalloutVisible?: boolean;\r\n}\r\n\r\nexport class InfoButtonBase extends React.Component<IInfoButtonProps, IInfoButtonState> {\r\n  private _iconButtonElement = React.createRef<HTMLDivElement>();\r\n\r\n  constructor(props) {\r\n    super(props);\r\n\r\n    this.state = {\r\n      isCalloutVisible: false,\r\n    };\r\n  }\r\n\r\n  public render(): JSX.Element {\r\n    const { styles, theme, iconName, iconTitle, calloutContent, calloutProps, ariaLabel, ariaDescription } = this.props;\r\n    const classNames = getClassNames(styles, { theme: theme! });\r\n\r\n    return (\r\n      <div className={classNames.root}>\r\n        <div className={classNames.icon} ref={this._iconButtonElement}>\r\n          <IconButton\r\n            styles={{\r\n              rootFocused: {\r\n                '@media screen and (-ms-high-contrast: active), screen and (forced-colors: active)  .ms-Fabric--isFocusVisible .root-241:focus::after': {\r\n                  inset: '2px !important',\r\n                },\r\n              },\r\n            }}\r\n            iconProps={{ iconName: iconName ? iconName : 'info' }}\r\n            title={iconTitle}\r\n            ariaLabel={ariaLabel}\r\n            ariaDescription={ariaDescription}\r\n            onClick={this._onInfoButtonClick}\r\n          />\r\n        </div>\r\n        <Callout\r\n          className={classNames.callout}\r\n          {...calloutProps}\r\n          target={this._iconButtonElement.current}\r\n          onDismiss={this._onCalloutDismiss}\r\n          hidden={!this.state.isCalloutVisible}\r\n          directionalHint={DirectionalHint.rightCenter}\r\n          gapSpace={15}\r\n          ariaLabel={ariaLabel + ' Callout'}\r\n          setInitialFocus={true}\r\n          aria-live=\"assertive\"\r\n        >\r\n          {calloutContent ? <div dangerouslySetInnerHTML={{ __html: calloutContent }} /> : <Spinner />}\r\n        </Callout>\r\n      </div>\r\n    );\r\n  }\r\n\r\n  private _onInfoButtonClick = (ev: React.MouseEvent<HTMLDivElement>): void => {\r\n    ev.stopPropagation(); // Prevents the event from bubbling up to the parent element\r\n    this.setState({ isCalloutVisible: !this.state.isCalloutVisible });\r\n    if (this.props.iconButtonOnClick) {\r\n      this.props.iconButtonOnClick();\r\n    }\r\n  };\r\n\r\n  private _onCalloutDismiss = (): void => {\r\n    this.setState({ isCalloutVisible: false });\r\n    if (this.props.calloutOnDismiss) {\r\n      this.props.calloutOnDismiss();\r\n    }\r\n  };\r\n}\r\n","import { IInfoButtonStyleProps, IInfoButtonStyles } from './InfoButton.types';\r\n\r\nexport const getStyles = (props: IInfoButtonStyleProps): IInfoButtonStyles => {\r\n  return {\r\n    callout:['ms-font-m',{\r\n        padding: 10,\r\n    }],\r\n    icon: {\r\n      display: 'inline-block'\r\n    }\r\n  };\r\n};\r\n","import { styled } from '@fluentui/react';\r\nimport { InfoButtonBase } from './InfoButton.base';\r\nimport { getStyles } from './InfoButton.styles';\r\nimport { IInfoButtonProps, IInfoButtonStyleProps, IInfoButtonStyles } from './InfoButton.types';\r\n\r\n// Use Fabric Base guidelines since this might be contributed back to Fabric.\r\nexport const InfoButton = styled<IInfoButtonProps, IInfoButtonStyleProps, IInfoButtonStyles>(InfoButtonBase, getStyles, undefined, {\r\n  scope: 'InfoButton',\r\n});\r\n","import { getAppStore, listEntity, UserContext } from '../../../../../@data';\r\nimport { BrandSearchResponse } from '../../../../../@data/store/schema/models/BrandSearchResponse';\r\n\r\nexport async function fetchBrands(keyword: string, userContext?: UserContext): Promise<BrandSearchResponse[]> {\r\n  const effectiveUserContext = userContext || getAppStore().userContext;\r\n  const searchParams = new URLSearchParams({\r\n    search: keyword,\r\n  });\r\n\r\n  return await listEntity([], effectiveUserContext, BrandSearchResponse, searchParams);\r\n}\r\n","import { orchestrator } from 'satcheljs';\r\nimport { Log } from '../../../../logging/src';\r\nimport { getSupportedSubGeographies } from '../../services/MetadataService';\r\nimport { fetchStatesOfCountry, setStatesOfCountry } from '../actions';\r\nimport { isStatesPresentForCountry } from '../store/selectors';\r\n\r\norchestrator(fetchStatesOfCountry, async ({ country }) => {\r\n  try {\r\n    // Return if the states are already fetched\r\n    // NOTE: This logic is inside the orchestrator to avoid unnecessary network calls,\r\n    // because the states don't change often.\r\n    if (isStatesPresentForCountry(country)) {\r\n      return;\r\n    }\r\n\r\n    const states = await getSupportedSubGeographies(country);\r\n    setStatesOfCountry(country, states);\r\n  } catch (error) {\r\n    Log.error(`Failed to fetch states of country ${country}`);\r\n  }\r\n});\r\n","import { createStore } from 'satcheljs';\r\nimport '../orchestrators';\r\nimport { IAppMetaDataState } from './schema';\r\n\r\nexport const getMetaDataStore = createStore<IAppMetaDataState>('AppMetaData', {\r\n  raw: {},\r\n  errors: {},\r\n});\r\n","/* eslint-disable @typescript-eslint/consistent-type-assertions */\r\nfunction generateChars(length: number) {\r\n  let chars = '';\r\n  for (let i = 0; i < length; i++) {\r\n    const array = new Uint8Array(1);\r\n    // tslint:disable-next-line\r\n    const crypto = window.crypto || (<any>window).msCrypto;\r\n    crypto.getRandomValues(array);\r\n    const randomChar = Math.floor((array[0] / 1000) * 64);\r\n    chars += randomChar.toString(36);\r\n  }\r\n  return chars;\r\n}\r\n\r\nexport function generateGuid() {\r\n  // format : 'xxxxxxxx-xxxx-4xxx-yxxx-xx'\r\n\r\n  return generateChars(8) + '-' + generateChars(4) + '-' + generateChars(4) + '-' + generateChars(4) + '-' + generateChars(2);\r\n}\r\n","import 'dotenv/config';\r\nimport { Log } from '../../../logging/src';\r\nimport { uiConfig } from '../../config/ui.config';\r\nimport { handleError } from '../../pages/ad-management/AdQuality/@data/services/utility/utility';\r\nimport '../../pages/ad-management/Profile/@data/orchestrators';\r\nimport { generateGuid } from '../../utils/GuidUtils';\r\nimport { Publisher, User } from '../store';\r\nimport { PublisherType } from '../store/schema/enums/PublisherType';\r\nimport { OvdfAPIRequest } from '../store/schema/models/OvdfAPIRequest';\r\nimport { VerifyCodeStatusRequest } from '../store/schema/models/VerifyCodeStatusRequest';\r\nimport { VerifyCodeStatusResponse } from '../store/schema/models/VerifyCodeStatusResponse';\r\nimport { getAppStore } from '../store/store';\r\nimport { buildRequestHeadersWithAuthToken, handleApiErrors } from '../utils';\r\nimport { ApiError } from './ApiService';\r\nimport { getIdToken } from './PubCenterAADAuthService';\r\n\r\nexport const CUSTOM_MESSAGE_CODE = '715-123325';\r\n\r\nexport async function fetchOneVetReviewStatus(eventType: 'login' | 'signup', publisher?: Publisher, user?: User): Promise<string> {\r\n  if (process.env.REACT_APP_ENV !== 'production') {\r\n    return 'pass';\r\n  }\r\n\r\n  const { userContext } = getAppStore();\r\n  const sessionId = sessionStorage.getItem('session_id');\r\n  const idToken = await getIdToken();\r\n\r\n  if (userContext && sessionId && idToken) {\r\n    const url = `${uiConfig.getApiBaseAddress()}/${encodeURIComponent('ovdf')}`;\r\n    const headers = await buildRequestHeadersWithAuthToken(url, userContext);\r\n\r\n    const request: OvdfAPIRequest = {\r\n      sessionId: sessionId || '',\r\n      eventType: eventType,\r\n      publisherId: publisher?.id || 0,\r\n      publisherName: publisher?.name?.toString() || '',\r\n      publisherType: publisher?.publisherType || PublisherType.individual,\r\n      idToken: idToken,\r\n      user: user,\r\n      organization: {\r\n        address: publisher?.address,\r\n        extendedProperties: publisher?.extendedProperties,\r\n      },\r\n      ipAddress: (await getIP()) || '',\r\n    };\r\n\r\n    try {\r\n      const response = await fetch(url, {\r\n        method: 'POST',\r\n        headers: headers,\r\n        body: JSON.stringify(request),\r\n      });\r\n\r\n      const responseJson = await response.json();\r\n      const reviewStatus = responseJson.data.reviewStatus.toString();\r\n\r\n      // Blocking user signup and redirecting user to no-access page. But existing users will be allowed to login\r\n      if (reviewStatus === 'reject' && eventType === 'signup') {\r\n        Log.write(`TMX review failed for this user ${userContext.email}. Response: ${JSON.stringify(responseJson)}`);\r\n\r\n        const noAccessPageRoute = encodeURI(window.location.protocol + '//' + window.location.host + '/no-access');\r\n        window.location.replace(noAccessPageRoute);\r\n      }\r\n\r\n      Log.debug(`OneVet review for user: <${userContext.email}>, trying to <${eventType}> resulted as: <${reviewStatus}>`);\r\n      Log.debug('OVDF response: ' + JSON.stringify(responseJson));\r\n\r\n      sessionStorage.setItem('review_status', reviewStatus);\r\n      return reviewStatus;\r\n\r\n      // TODO: handle unknown_session scenario\r\n    } catch (err) {\r\n      const error = `Session query API failed for ${url}. Errors: ${JSON.stringify(err)}`;\r\n      sessionStorage.setItem('review_status', 'API failed');\r\n\r\n      Log.error(error);\r\n      return 'pass';\r\n    }\r\n  } else {\r\n    Log.error('Could not fetch OVDF ReviewStatus: userContext/idToken is null or session id is missing');\r\n    return 'pass';\r\n  }\r\n}\r\n\r\nexport async function fetchOneVetCodeVerificationStatus(\r\n  publisherId: string,\r\n  requestBody: VerifyCodeStatusRequest\r\n): Promise<{ data: VerifyCodeStatusResponse }> {\r\n  const url = `${uiConfig.getApiBaseAddress()}/entityEvaluation/publishers/${publisherId}/tokenVerification/checkIfVerified`;\r\n\r\n  const headers = await buildRequestHeadersWithAuthToken(url);\r\n\r\n  let response: Response;\r\n  try {\r\n    response = await fetch(url, {\r\n      method: 'POST',\r\n      headers: headers,\r\n      body: JSON.stringify(requestBody),\r\n    });\r\n    if (!response.ok) {\r\n      return handleApiErrors<{ data: VerifyCodeStatusResponse }>(response, url);\r\n    }\r\n\r\n    const responseJson = await response.json();\r\n    if (responseJson) {\r\n      return responseJson;\r\n    }\r\n    return Promise.resolve({} as { data: VerifyCodeStatusResponse });\r\n  } catch (err) {\r\n    if (err.name === 'AbortError') {\r\n      return Promise.resolve({} as { data: VerifyCodeStatusResponse });\r\n    }\r\n    const error = `getReportData operation failed for ${url}. Errors: ${err}`;\r\n    return handleError(new ApiError(500, error), url);\r\n  }\r\n}\r\n\r\nexport function addThreatMetrixScripts() {\r\n  const tmScriptId = 'tmScript';\r\n  const tmNoScriptId = 'tmNoScript';\r\n  const tmScript = document.getElementById(tmScriptId);\r\n  const tmNoScript = document.getElementById(tmNoScriptId);\r\n\r\n  const currentTimestamp = new Date().getTime();\r\n  const sessionId = sessionStorage.getItem('session_id') || generateGuid() + currentTimestamp;\r\n  const orgId = process.env.REACT_APP_ENV === 'production' ? 'y6jn8c31' : 'w0rnzpxd';\r\n  const srcUrl = 'https://vlscppe.microsoft.com/fp/tags.js?org_id=' + orgId + '&session_id=' + sessionId;\r\n\r\n  if (!tmScript) {\r\n    const script = document.createElement('script');\r\n\r\n    script.id = tmScriptId;\r\n    script.src = srcUrl;\r\n\r\n    sessionStorage.setItem('session_id', sessionId);\r\n    document.head.appendChild(script);\r\n  }\r\n\r\n  if (!tmNoScript) {\r\n    const noScript = document.createElement('noscript');\r\n    const iframe = document.createElement('iframe');\r\n\r\n    iframe.setAttribute('aria-hidden', 'true');\r\n    iframe.setAttribute('style', 'width: 100px; height: 100px; border: 0; position: absolute; top: -5000px;');\r\n    iframe.src = srcUrl;\r\n\r\n    noScript.id = tmNoScriptId;\r\n    noScript.appendChild(iframe);\r\n    document.body.appendChild(noScript);\r\n  }\r\n}\r\n\r\nexport async function getIP() {\r\n  const ipResponse = await fetch('https://api.ipify.org?format=json')\r\n    .then((response) => response.json())\r\n    .catch(() => console.log('IP fetch failed'));\r\n\r\n  return ipResponse?.ip;\r\n}\r\n","import { FontWeights, ITheme, getTheme, mergeStyleSets } from '@fluentui/react';\r\nimport { TagSize } from '.';\r\nimport { IPubCenterFonts, IPubcenterTheme } from '../../../theme';\r\nimport { ICommonStyleProps } from '../../types';\r\n\r\ntype StyleProperties = 'success' | 'pending' | 'fail' | 'widthFit';\r\n\r\ntype TabStyles = Record<StyleProperties, string>;\r\n\r\nexport interface ITagStyleProps extends ICommonStyleProps {\r\n  theme: ITheme;\r\n  size?: TagSize;\r\n  hoverAble?: boolean;\r\n}\r\n\r\nexport const getStyles = (props: ITagStyleProps): TabStyles => {\r\n  const theme = (props.theme as unknown) as IPubcenterTheme;\r\n  const { spacing, palette } = theme;\r\n  const fonts = theme.fonts as IPubCenterFonts;\r\n\r\n  const LARGE_SIZE = fonts.size14.fontSize;\r\n  const MEDIUM_SIZE = fonts.size12.fontSize;\r\n  const SMALL_SIZE = fonts.size10.fontSize;\r\n\r\n  const SizeMapper = {\r\n    0: LARGE_SIZE,\r\n    1: MEDIUM_SIZE,\r\n    2: SMALL_SIZE,\r\n  };\r\n\r\n  const statusIdentifier = {\r\n    display: 'flex',\r\n    gap: spacing.size4,\r\n    width: 'fit-content',\r\n    borderRadius: spacing.size4,\r\n    padding: `${spacing.size2} ${spacing.size6}`,\r\n    fontSize: SizeMapper[props.size || 1],\r\n    cursor: props.hoverAble ? 'pointer' : 'default',\r\n    fontWeight: FontWeights.semibold,\r\n  };\r\n\r\n  return mergeStyleSets({\r\n    widthFit: {\r\n      width: 'fit-content',\r\n    },\r\n    success: {\r\n      backgroundColor: palette.honeydew,\r\n      color: palette.deepGreen,\r\n      border: `1px solid ${palette.grannySmithApple}`,\r\n      ...statusIdentifier,\r\n      '&:focus-visible': {\r\n        border: `1px solid black`,\r\n      },\r\n    },\r\n    pending: {\r\n      backgroundColor: palette.neutralLighter,\r\n      color: palette.disabledGray,\r\n      border: `1px solid ${palette.grayX11}`,\r\n      ...statusIdentifier,\r\n      '&:focus-visible': {\r\n        border: `1px solid black`,\r\n      },\r\n    },\r\n    fail: {\r\n      backgroundColor: palette.lavenderBlush,\r\n      color: palette.venetianRed,\r\n      border: `1px solid ${palette.paleChestnut}`,\r\n      ...statusIdentifier,\r\n      '&:focus-visible': {\r\n        border: `1px solid black`,\r\n      },\r\n    },\r\n  });\r\n};\r\n\r\nexport function getClassNames(props?: ITagStyleProps): TabStyles {\r\n  return getStyles({ theme: getTheme(), ...props });\r\n}\r\n","import { DirectionalHint, Icon, TooltipHost, getTheme } from '@fluentui/react';\r\nimport { observer } from 'mobx-react-lite';\r\nimport React from 'react';\r\nimport { CellInfoCallout } from '../../layout/GridPageV2/components/CellInfoCallout';\r\nimport { getClassNames } from './styles';\r\n\r\nexport enum TagType {\r\n  Success = 'success',\r\n  Pending = 'pending',\r\n  Fail = 'fail',\r\n}\r\n\r\nexport enum TagSize {\r\n  Large,\r\n  Medium,\r\n  Small,\r\n}\r\n\r\nexport interface ITagCalloutProps {\r\n  placement: DirectionalHint;\r\n  calloutContent: JSX.Element | null;\r\n}\r\n\r\nexport interface ITagProps {\r\n  status: TagType;\r\n  size?: TagSize;\r\n  text: string;\r\n  tooltipContent?: string;\r\n  icon?: string;\r\n  calloutProps?: ITagCalloutProps;\r\n}\r\n\r\nexport const Tag = observer(({ text, size = 1, tooltipContent, status, icon, calloutProps }: ITagProps) => {\r\n  const classNames = getClassNames({\r\n    theme: getTheme(),\r\n    size: size,\r\n    hoverAble: tooltipContent !== undefined || calloutProps !== undefined,\r\n  });\r\n  const toolTipId = 'status';\r\n\r\n  if (status === undefined) {\r\n    return null;\r\n  }\r\n\r\n  const getTagStyle = () => classNames[status.toString()];\r\n\r\n  const renderTag = () => {\r\n    return (\r\n      <div aria-describedby={toolTipId} className={getTagStyle()}>\r\n        <span>{text}</span>\r\n        {icon !== undefined && <Icon iconName={icon} />}\r\n      </div>\r\n    );\r\n  };\r\n\r\n  const renderTagWithTooltip = () => {\r\n    if (tooltipContent === undefined) {\r\n      return renderTag();\r\n    }\r\n\r\n    return (\r\n      <div className={classNames.widthFit}>\r\n        <TooltipHost\r\n          content={tooltipContent}\r\n          id={toolTipId}\r\n          directionalHint={12}\r\n          aria-describedby={tooltipContent}\r\n          aria-label={tooltipContent}\r\n        >\r\n          {renderTag()}\r\n        </TooltipHost>\r\n      </div>\r\n    );\r\n  };\r\n\r\n  const renderTagWithCallout = () => {\r\n    if (calloutProps === undefined || calloutProps.calloutContent === null) {\r\n      return renderTag();\r\n    }\r\n\r\n    return (\r\n      <CellInfoCallout placement={calloutProps?.placement} calloutContent={calloutProps?.calloutContent}>\r\n        {renderTag()}\r\n      </CellInfoCallout>\r\n    );\r\n  };\r\n\r\n  return tooltipContent ? renderTagWithTooltip() : calloutProps ? renderTagWithCallout() : renderTag();\r\n});\r\n\r\nexport default Tag;\r\n","import { Environment } from \"./Environment\";\r\n\r\nexport class LoggingUtils {\r\n  public static getEnvironment(): string {\r\n    const environment = process.env.REACT_APP_ENV;\r\n    if (environment !== undefined) {\r\n      return environment;\r\n    }\r\n    return Environment.TEST;\r\n  }\r\n}\r\n","export enum TokenType {\r\n  SessionGuid = 1,\r\n  PubCenterAADToken = 4,\r\n}\r\n","import { action } from 'satcheljs';\r\n\r\nexport const onLoadingChanged = action('onLoadingChanged', (loading: boolean) => ({ loading }));\r\nexport const onLoadingSetting = action('onLoadingSetting', (waiting: boolean) => ({ waiting }));\r\nexport const onLoadingWaiting = action('onLoadingWaiting', (waiting: boolean) => ({ waiting }));\r\n","import { Model } from './Model';\r\n\r\nexport class UpdateClarityProject extends Model {\r\n  public apiPath = undefined;\r\n  public className = 'updateClarityProject';\r\n  public propertyId?: string;\r\n  // NOTE: this should be reduced to one attribute for both cases\r\n  // For non Tython users\r\n  public clarityProjectId?: string;\r\n  // For Tython users\r\n  public clarityProjectIdForTython?: string;\r\n  public enableMicrosoftClarity?: boolean;\r\n}\r\n","import { getAppStore, getCurrentPublisher, getEntity, User } from '../../../../../@data';\r\n\r\nexport async function fetchUserDetails(user: User): Promise<User> {\r\n  const { userContext } = getAppStore();\r\n  const publisher = getCurrentPublisher();\r\n  if (!publisher) {\r\n    throw new Error('No publisher found');\r\n  }\r\n\r\n  const userDetails = await getEntity<User>([publisher, user], userContext);\r\n  return userDetails;\r\n}\r\n","export enum VerificationCodeGenerationErrorCodes {\r\n  INVALID_INPUT = 'InvalidInput',\r\n  CODE_GENERATION_LIMIT_REACHED = 'CodeGenerationLimitReached',\r\n  REQUESTED_CODE_VERIFICATION_RESULT_NOT_FOUND_FOR_PUBLISHER = 'RequestedCodeVerificationResultNotFoundForPublisher',\r\n}\r\n","export enum PaginationDisplay {\r\n  Dotted,\r\n  Navigation,\r\n}","import { defineMessages } from 'react-intl';\r\n\r\nexport default defineMessages({\r\n  noPublisherOrAccountSelected: {\r\n    id: 'admanagement.noPublisherOrAccountSelected',\r\n    defaultMessage: 'Select a publisher and account.',\r\n  },\r\n  servingStatusPending: {\r\n    id: 'servingStatus.pending',\r\n    defaultMessage: 'Pending',\r\n  },\r\n  servingStatusNotServing: {\r\n    id: 'servingStatus.notServing',\r\n    defaultMessage: 'Rejected',\r\n  },\r\n  servingStatusServing: {\r\n    id: 'servingStatus.serving',\r\n    defaultMessage: 'Approved',\r\n  },\r\n  servingStatusOnHold: {\r\n    id: 'servingStatus.onHold',\r\n    defaultMessage: 'On hold',\r\n  },\r\n});\r\n","import {\r\n  BaseComponent,\r\n  BasePicker,\r\n  classNamesFunction,\r\n  getId,\r\n  IBasePickerProps,\r\n  Icon,\r\n  IProcessedStyleSet,\r\n  ITag,\r\n  Label,\r\n} from '@fluentui/react';\r\nimport * as React from 'react';\r\nimport { isButtonPressKey } from '../../utils/AccessibilityUtils';\r\nimport {\r\n  IListItem,\r\n  IListPickerItemProps,\r\n  IListPickerProps,\r\n  IListPickerState,\r\n  IListPickerStyleProps,\r\n  IListPickerStyles,\r\n} from './ListPicker.types';\r\n\r\nconst getClassNames = classNamesFunction<IListPickerStyleProps, IListPickerStyles>();\r\nlet classNames: IProcessedStyleSet<IListPickerStyles>;\r\n\r\nclass ListPickerLegacy extends BasePicker<IListItem, IBasePickerProps<IListItem>> {\r\n  protected static defaultProps: Partial<IBasePickerProps<IListItem>> = {\r\n    resolveDelay: 300,\r\n    itemLimit: 1,\r\n\r\n    onRenderItem: (props: IListPickerItemProps) => (\r\n      <div className={classNames.selectedInput} key={props.item.key}>\r\n        <span className={classNames.selectedText} role=\"listitem\">\r\n          {props.item.name}\r\n        </span>\r\n\r\n        <span\r\n          className={classNames.selectedClose}\r\n          role=\"button\"\r\n          tabIndex={0}\r\n          onClick={props.onRemoveItem}\r\n          onKeyDown={(ev) => isButtonPressKey(ev.key) && props.onRemoveItem && props.onRemoveItem()}\r\n          aria-label={props.removeButtonAriaLabel}\r\n        >\r\n          <Icon iconName=\"Cancel\" />\r\n        </span>\r\n      </div>\r\n    ),\r\n    onRenderSuggestionsItem: (props: ITag) => (\r\n      <div className={classNames.item} key={props.key}>\r\n        {props.name + ' (ID: ' + props.key + ')'}\r\n      </div>\r\n    ),\r\n  };\r\n}\r\n\r\nexport class ListPickerBase extends BaseComponent<IListPickerProps, IListPickerState> {\r\n  private _id: string;\r\n\r\n  constructor(props) {\r\n    super(props);\r\n\r\n    this._id = props.id || getId('ListPicker');\r\n\r\n    this.state = {\r\n      selectedItems: this.props.selectedItem ? [this.props.selectedItem] : undefined,\r\n      pickerIsDisabled: this.props.disabled,\r\n    };\r\n  }\r\n\r\n  public componentDidUpdate(prevProps: IListPickerProps, prevState: IListPickerState) {\r\n    if (this.props.selectedItem === prevProps.selectedItem) {\r\n      return;\r\n    }\r\n\r\n    this.setState({\r\n      selectedItems: this.props.selectedItem ? [this.props.selectedItem] : [],\r\n    });\r\n  }\r\n\r\n  public render(): JSX.Element {\r\n    const { styles, theme, onRenderLabel = this._onRenderLabel } = this.props;\r\n    classNames = getClassNames(styles, { theme: theme!, closeButtonIsDisabled: this.state.pickerIsDisabled });\r\n\r\n    const basePickerProps: IBasePickerProps<IListItem> = {\r\n      onResolveSuggestions: (filter, selectedItems) => {\r\n        let selectedItem;\r\n        if (selectedItems && selectedItems.length) {\r\n          selectedItem = selectedItems[0];\r\n        }\r\n\r\n        return this.props.onResolveSuggestions(filter, selectedItem);\r\n      },\r\n      inputProps: {\r\n        placeholder: this.props.inputPlaceholder,\r\n      },\r\n      pickerSuggestionsProps: {\r\n        noResultsFoundText: this.props.noResultsFoundText,\r\n      },\r\n      selectedItems: this.state.selectedItems,\r\n      getTextFromItem: this.props.getTextFromItem,\r\n      disabled: this.props.disabled,\r\n      onChange: (selectedItems: IListItem[]) => {\r\n        this.setState({\r\n          selectedItems: selectedItems,\r\n        });\r\n\r\n        if (this.props.onChange) {\r\n          this.props.onChange(selectedItems.length ? selectedItems[0] : undefined);\r\n        }\r\n      },\r\n      pickerCalloutProps: {\r\n        calloutMaxHeight: 320,\r\n      },\r\n      removeButtonAriaLabel: this.props.removeButtonAriaLabel,\r\n    };\r\n\r\n    return (\r\n      <div className={classNames.root}>\r\n        {onRenderLabel(this.props, this._onRenderLabel)}\r\n\r\n        <ListPickerLegacy className={classNames.basePicker} {...basePickerProps} />\r\n      </div>\r\n    );\r\n  }\r\n\r\n  private _onRenderLabel = (props: IListPickerProps): JSX.Element | null => {\r\n    const { label, required } = props;\r\n    if (label) {\r\n      return (\r\n        <Label className={classNames.label} required={required} htmlFor={this._id}>\r\n          {props.label}\r\n        </Label>\r\n      );\r\n    }\r\n    return null;\r\n  };\r\n}\r\n","import { BreakPoints, IPubcenterSpacing } from '../../../theme';\r\nimport { IListPickerStyleProps, IListPickerStyles } from './ListPicker.types';\r\n\r\nconst { ResponsiveMedium } = BreakPoints;\r\n\r\nexport const getStyles = (props: IListPickerStyleProps): IListPickerStyles => {\r\n  const { theme, closeButtonIsDisabled } = props;\r\n  const spacing = theme.spacing as IPubcenterSpacing;\r\n\r\n  return {\r\n    root: [\r\n      'ms-ListPicker',\r\n      {\r\n        display: 'flex',\r\n        flexDirection: 'row',\r\n      },\r\n    ],\r\n    basePicker: {\r\n      backgroundColor: 'transparent',\r\n      selectors: {\r\n        '.ms-BasePicker-text': {\r\n          height: 46,\r\n          position: 'relative',\r\n          border: 0,\r\n          borderBottom: `1px solid`,\r\n          borderColor: theme.palette.neutralQuaternary,\r\n          width: 320,\r\n          selectors: {\r\n            ':hover': {\r\n              borderColor: theme.palette.neutralQuaternary,\r\n            },\r\n          },\r\n          [ResponsiveMedium]: {\r\n            width: 'calc(28vw - 60px)',\r\n          },\r\n        },\r\n        '.ms-BasePicker-input': {\r\n          backgroundColor: theme.palette.neutralLight,\r\n          height: '100%',\r\n          border: 0,\r\n          borderBottom: `1px solid`,\r\n          borderColor: theme.palette.neutralQuaternary,\r\n          selectors: {\r\n            ':hover': {\r\n              borderColor: theme.palette.themePrimary,\r\n              backgroundColor: theme.palette.white,\r\n            },\r\n            ':focus': {\r\n              backgroundColor: theme.palette.white,\r\n              borderColor: theme.palette.themePrimary,\r\n            },\r\n          },\r\n        },\r\n        '.ms-Callout-container': {\r\n          minWidth: 320,\r\n          width: 320,\r\n        },\r\n      },\r\n    },\r\n    item: {\r\n      padding: theme.spacing.s1,\r\n    },\r\n    selectedInput: {\r\n      position: 'relative',\r\n      right: 0,\r\n      top: 0,\r\n      bottom: 0,\r\n      display: 'flex',\r\n      alignItems: 'center',\r\n      width: 320,\r\n      [ResponsiveMedium]: {\r\n        width: 'calc(28vw - 60px)',\r\n      },\r\n    },\r\n    selectedText: {\r\n      flex: 1,\r\n      paddingRight: spacing.size8,\r\n      paddingLeft: spacing.size8,\r\n      paddingTop: spacing.size12,\r\n      paddingBottom: spacing.size12,\r\n      width: 320,\r\n      whiteSpace: 'nowrap',\r\n      textOverflow: 'ellipsis',\r\n      overflow: 'hidden',\r\n    },\r\n    selectedClose: {\r\n      display: closeButtonIsDisabled ? 'none' : 'block',\r\n      width: spacing.size44,\r\n      textAlign: 'center',\r\n      lineHeight: spacing.size44,\r\n      cursor: 'pointer',\r\n    },\r\n    label: {\r\n      marginRight: spacing.size8,\r\n      paddingBottom: spacing.size12,\r\n      paddingTop: spacing.size12,\r\n    },\r\n  };\r\n};\r\n","import { styled } from '@fluentui/react';\r\nimport { ListPickerBase } from './ListPicker.base';\r\nimport { getStyles } from './ListPicker.styles';\r\nimport { IListPickerProps, IListPickerStyleProps, IListPickerStyles } from './ListPicker.types';\r\n\r\n// Use Fabric Base guidelines since this might be contributed back to Fabric.\r\nexport const ListPicker = styled<IListPickerProps, IListPickerStyleProps, IListPickerStyles>(ListPickerBase, getStyles, undefined, {\r\n  scope: 'ListPicker',\r\n});\r\n","import { defineMessages } from 'react-intl';\r\n\r\nexport default defineMessages({\r\n  publisherPlaceholder: {\r\n    id: 'picker.publisherPlaceholder',\r\n    defaultMessage: 'Search for publisher name or ID'\r\n  },\r\n  publisherNotFound: {\r\n    id: 'picker.publisherNotFound',\r\n    defaultMessage: 'No publishers found'\r\n  },\r\n  accountPlaceholder: {\r\n    id: 'picker.accountPlaceholder',\r\n    defaultMessage: 'Select publisher first and then account'\r\n  },\r\n  accountNotFound: {\r\n    id: 'picker.accountNotFound',\r\n    defaultMessage: 'No accounts found'\r\n  },\r\n  allAccountsOption: {\r\n    id: 'allAccountsOption',\r\n    defaultMessage: 'All accounts',\r\n  },\r\n  listPickerRemoveAriaLabel: {\r\n    id: 'listPickerRemoveAriaLabel',\r\n    defaultMessage: 'Clear selection'\r\n  },\r\n  publisherAccountPickerAriaLabel: {\r\n    id: 'publisherAccountPickerAriaLabel',\r\n    defaultMessage: 'Publisher account picker'\r\n  }\r\n});\r\n","import { IDropdownStyles } from '@fluentui/react';\r\nimport { BreakPoints, IPubcenterSpacing } from '../../../theme';\r\nimport { IPublisherAccountPickerStyleProps, IPublisherAccountPickerStyles } from './PublisherAccountPicker.types';\r\n\r\nconst { ResponsiveMedium, ResponsiveSmall } = BreakPoints;\r\n\r\nexport const getStyles = (props: IPublisherAccountPickerStyleProps): IPublisherAccountPickerStyles => {\r\n  const { theme, isAccountDisabled } = props;\r\n  const spacing = theme.spacing as IPubcenterSpacing;\r\n\r\n  return {\r\n    root: [\r\n      'ms-PublisherAccountPicker',\r\n      {\r\n        display: 'flex',\r\n        paddingLeft: spacing.size32,\r\n        backgroundColor: theme.palette.neutralLight,\r\n        height: 47,\r\n        // minWidth: 1100, // This causes horizontal scrollbar to appear in smaller desktop screens\r\n        [ResponsiveSmall]: {\r\n          flexDirection: 'column',\r\n          height: 96,\r\n          paddingLeft: 0,\r\n          justifyContent: 'center',\r\n          alignItems: 'center',\r\n        },\r\n      },\r\n    ],\r\n    listGroup: {\r\n      display: 'flex',\r\n      flexDirection: 'column',\r\n      marginRight: theme.spacing.l1,\r\n      width: '38vw',\r\n      [ResponsiveMedium]: {\r\n        width: '28vw',\r\n      },\r\n      [ResponsiveSmall]: {\r\n        marginRight: 0,\r\n        width: '100vw',\r\n        alignItems: 'center',\r\n      },\r\n    },\r\n    publisherPicker: ['ms-PublisherPicker'],\r\n    accountPicker: ['ms-AccountPicker'],\r\n    subComponentStyles: {\r\n      dropdown: ({\r\n        root: [\r\n          {\r\n            display: 'flex',\r\n            flexDirection: 'row',\r\n            height: 46,\r\n            width: 'auto',\r\n            color: theme.palette.neutralQuaternary,\r\n          },\r\n        ],\r\n        dropdown: [\r\n          {\r\n            selectors: {\r\n              '&:focus $title': {\r\n                borderColor: theme.palette.neutralQuaternary,\r\n              },\r\n              '&:hover $ms-Dropdown-title': {\r\n                borderColor: theme.palette.neutralQuaternary,\r\n                backgroundColor: 'transparent',\r\n              },\r\n            },\r\n          },\r\n          !isAccountDisabled && {\r\n            selectors: {\r\n              '&:hover $title': {\r\n                borderColor: theme.palette.themePrimary,\r\n                backgroundColor: theme.palette.white,\r\n              },\r\n              '&:focus $title': {\r\n                borderColor: theme.palette.themePrimary,\r\n                backgroundColor: theme.palette.white,\r\n              },\r\n            },\r\n          },\r\n        ],\r\n        label: [\r\n          {\r\n            marginRight: spacing.size8,\r\n            paddingBottom: spacing.size12,\r\n            paddingTop: spacing.size12,\r\n          },\r\n        ],\r\n        title: [\r\n          {\r\n            flex: 1,\r\n            backgroundColor: 'transparent',\r\n            width: 320,\r\n            height: '100%',\r\n            border: 0,\r\n            borderBottom: `1px solid ${theme.palette.neutralQuaternary}`,\r\n            paddingBottom: 13,\r\n            paddingTop: spacing.size8,\r\n          },\r\n        ],\r\n        caretDownWrapper: [\r\n          {\r\n            height: 44,\r\n            width: 44,\r\n            textAlign: 'center',\r\n            lineHeight: 44,\r\n            cursor: 'pointer',\r\n          },\r\n        ],\r\n      } as unknown) as IDropdownStyles,\r\n    },\r\n  };\r\n};\r\n","import { classNamesFunction, css, Dropdown, DropdownMenuItemType, getTheme, IDropdownOption, MessageBarType } from '@fluentui/react';\r\nimport * as React from 'react';\r\nimport { injectIntl } from 'react-intl';\r\nimport { Log } from '../../../logging/src';\r\nimport {\r\n  Account,\r\n  getAppStore,\r\n  getEntity,\r\n  listEntity,\r\n  onLoadingChanged,\r\n  onNotificationChanged,\r\n  onSetFirstPartyBoost,\r\n  Publisher,\r\n  PublisherSearch,\r\n} from '../../@data';\r\nimport { default as appMessages, default as AppMessages } from '../../App.messages';\r\nimport { IListItem, ListPicker } from '../../components/ListPicker';\r\nimport { APP_NAME_PUBCENTER, NO_VALUE_PLACEHOLDER } from '../../constants/AppConstants';\r\nimport { delay } from '../../utils/DelayUtils';\r\nimport messages from './PublisherAccountPicker.messages';\r\nimport { getStyles } from './PublisherAccountPicker.styles';\r\nimport {\r\n  IPublisherAccountPickerProps,\r\n  IPublisherAccountPickerState,\r\n  IPublisherAccountPickerStyleProps,\r\n  IPublisherAccountPickerStyles,\r\n} from './PublisherAccountPicker.types';\r\n\r\nconst getClassNames = classNamesFunction<IPublisherAccountPickerStyleProps, IPublisherAccountPickerStyles>();\r\nconst publisherSearchApiVersion = '1.3';\r\n\r\nexport const PublisherAccountPicker = injectIntl(\r\n  class extends React.Component<IPublisherAccountPickerProps, IPublisherAccountPickerState> {\r\n    private _accountsForCurrentPublisher: IDropdownOption[] = [];\r\n    private _isComponentMounted: boolean;\r\n    private defaultSelectedAccount: Account | undefined = undefined;\r\n\r\n    constructor(props: IPublisherAccountPickerProps) {\r\n      super(props);\r\n\r\n      this.state = {\r\n        publisher: this.props.publisher,\r\n        account: this.props.account,\r\n        isAccountSelectionDisabled: this.props.isAccountSelectionDisabled,\r\n        isPublisherSelectionDisabled: this.props.isPublisherSelectionDisabled,\r\n      };\r\n    }\r\n\r\n    public async componentDidUpdate(prevProps: IPublisherAccountPickerProps) {\r\n      if (this.props.publisher !== prevProps.publisher || this.props.account !== prevProps.account) {\r\n        if (this.props.publisher) {\r\n          await this._updateAccountsCache(this.props.publisher);\r\n        } else {\r\n          this._accountsForCurrentPublisher = [];\r\n          this.setState({ publisher: undefined, account: undefined });\r\n        }\r\n      }\r\n\r\n      const { publisher, account } = this.props;\r\n      const urlPath = this.props.location.pathname;\r\n      if (publisher && account) {\r\n        if (account.id === 0 && urlPath && (urlPath.includes('channel') || urlPath.includes('adfilter'))) {\r\n          this._updateAccountsCache(publisher, true);\r\n        }\r\n        this._handleAllAccountsOptions();\r\n      }\r\n    }\r\n\r\n    public async componentDidMount() {\r\n      this._isComponentMounted = true;\r\n      if (this.state.publisher) {\r\n        if (this.props.isAccountHidden) {\r\n          // this is a hack for now, the global search routing is incomplete, since in AdManagement the below await _updateAccountsCache\r\n          // prevents the route to be changed on OnChange action\r\n          await delay(1000);\r\n          if (this._isComponentMounted) {\r\n            this.props.onChange(this.state.publisher, undefined);\r\n          }\r\n        } else {\r\n          await this._updateAccountsCache(this.state.publisher);\r\n        }\r\n      }\r\n    }\r\n\r\n    public async componentWillUnmount() {\r\n      this._isComponentMounted = false;\r\n    }\r\n\r\n    public render(): JSX.Element {\r\n      const { formatMessage } = this.props.intl;\r\n      const classNames = getClassNames(getStyles, {\r\n        theme: getTheme(),\r\n        isAccountDisabled: !this.state.publisher || this.state.isAccountSelectionDisabled,\r\n        isPublisherDisabled: this.state.isPublisherSelectionDisabled,\r\n      });\r\n      const selectedPublisherItem =\r\n        this.state.publisher && this.state.publisher.name\r\n          ? {\r\n              key: String(this.state.publisher.id),\r\n              name: String(this.state.publisher.name),\r\n            }\r\n          : undefined;\r\n      const selectedAccountItem = this.state.account && this.state.account.name ? String(this.state.account.id) : undefined;\r\n      this._handleAllAccountsOptions();\r\n\r\n      return (\r\n        <div className={classNames.root} role=\"complementary\" aria-label={formatMessage(messages.publisherAccountPickerAriaLabel)}>\r\n          <div className={css(classNames.listGroup, classNames.publisherPicker)}>\r\n            <ListPicker\r\n              label={formatMessage(appMessages.publisher)}\r\n              selectedItem={selectedPublisherItem}\r\n              onResolveSuggestions={this._onPublishersResolveSuggestions}\r\n              getTextFromItem={(item: IListItem) => item.name}\r\n              inputPlaceholder={formatMessage(messages.publisherPlaceholder)}\r\n              noResultsFoundText={formatMessage(messages.publisherNotFound)}\r\n              removeButtonAriaLabel={formatMessage(messages.listPickerRemoveAriaLabel)}\r\n              onChange={this._onPublisherChanged}\r\n              disabled={this.state.isPublisherSelectionDisabled}\r\n            />\r\n          </div>\r\n          {!this.props.isAccountHidden && (\r\n            <div className={css(classNames.listGroup, classNames.accountPicker)}>\r\n              <Dropdown\r\n                id={'accountPicker'}\r\n                placeholder={formatMessage(messages.accountPlaceholder)}\r\n                styles={classNames.subComponentStyles.dropdown}\r\n                label={formatMessage(appMessages.account)}\r\n                options={this._accountsForCurrentPublisher}\r\n                selectedKey={selectedAccountItem}\r\n                onChange={this._onAccountChanged}\r\n                disabled={!this.state.publisher || this.state.isAccountSelectionDisabled}\r\n                calloutProps={{ calloutMaxHeight: 300 }}\r\n              />\r\n            </div>\r\n          )}\r\n        </div>\r\n      );\r\n    }\r\n\r\n    private _onPublisherChanged = async (item?: IListItem) => {\r\n      if (!item) {\r\n        this.setState({\r\n          publisher: undefined,\r\n          account: undefined,\r\n        });\r\n\r\n        this.props.onChange(undefined, undefined);\r\n        return;\r\n      }\r\n\r\n      // Query the db for the full publisher.\r\n      const publisher = new Publisher(parseInt(item.key, 10));\r\n      publisher.name = item.name;\r\n\r\n      if (this.state.isAccountSelectionDisabled) {\r\n        this.props.onChange(publisher, undefined);\r\n      }\r\n      // Update current accounts cache:\r\n      await this._updateAccountsCache(publisher);\r\n    };\r\n\r\n    private async _updateAccountsCache(publisher: Publisher, isUpdateAccount?: boolean) {\r\n      onLoadingChanged(true);\r\n      const userContext = getAppStore().userContext;\r\n      try {\r\n        // If isUpdateAccount is true, then change account selected to defaultSelectedAccount of the Publisher\r\n        if (this.defaultSelectedAccount && isUpdateAccount) {\r\n          const account = new Account(this.defaultSelectedAccount.id);\r\n          account.name = this.defaultSelectedAccount.name;\r\n\r\n          this.setState({ publisher: publisher, account: account });\r\n          this.props.onChange(publisher, account);\r\n          onLoadingChanged(false);\r\n          return;\r\n        }\r\n\r\n        // If user is changing account of the same publisher, to prevent unneccesary API call and reduce page load time\r\n        if (\r\n          !this.state.isAccountSelectionDisabled &&\r\n          this._accountsForCurrentPublisher.length > 0 &&\r\n          this.state.account &&\r\n          this._isComponentMounted &&\r\n          !isUpdateAccount\r\n        ) {\r\n          this.setState({ publisher: publisher, account: this.state.account });\r\n          this.props.onChange(publisher, this.state.account);\r\n          onLoadingChanged(false);\r\n          return;\r\n        }\r\n\r\n        // Prevent unnecessary API call and reduce load time when the Account Picker (at the top) is hidden. For example,\r\n        // this happens when on the AdQuality page.\r\n        if (this.props.isAccountHidden) {\r\n          this.setState({ publisher: publisher, account: this.state.account });\r\n          this.props.onChange(publisher, this.state.account);\r\n          onLoadingChanged(false);\r\n          return;\r\n        }\r\n\r\n        let accounts = await listEntity([publisher], userContext, Account);\r\n        accounts = accounts.sort((a, b) => (String(a.name)!.toLowerCase() < String(b.name)!.toLowerCase() ? -1 : 1));\r\n\r\n        if (this._isComponentMounted && (!accounts || accounts.length === 0)) {\r\n          this._accountsForCurrentPublisher = [];\r\n          this.setState({ publisher: publisher, account: undefined });\r\n          this.props.onChange(publisher, undefined);\r\n          onLoadingChanged(false);\r\n          return;\r\n        }\r\n\r\n        this._accountsForCurrentPublisher = accounts.map((p) => ({\r\n          key: String(p.id),\r\n          text: String(p.name!),\r\n        }));\r\n\r\n        this._accountsForCurrentPublisher.unshift({ key: 'divider', text: NO_VALUE_PLACEHOLDER, itemType: DropdownMenuItemType.Divider });\r\n        this._accountsForCurrentPublisher.unshift({\r\n          key: String('0'),\r\n          text: this.props.intl.formatMessage(messages.allAccountsOption),\r\n        } as IDropdownOption);\r\n\r\n        if (!this.state.isAccountSelectionDisabled) {\r\n          if (this.state.account && this._isComponentMounted && !isUpdateAccount) {\r\n            this.setState({ publisher: publisher, account: this.state.account });\r\n            this.props.onChange(publisher, this.state.account);\r\n          } else {\r\n            const publisherFullInfo = await getEntity<Publisher>([publisher], userContext);\r\n            onSetFirstPartyBoost(publisherFullInfo.publisherTier);\r\n            publisher.publisherTier = publisherFullInfo.publisherTier;\r\n\r\n            if (publisherFullInfo && publisherFullInfo.defaultAccountId) {\r\n              this.defaultSelectedAccount = accounts.find((acc) => acc.id === publisherFullInfo.defaultAccountId);\r\n            } else {\r\n              if (accounts) {\r\n                this.defaultSelectedAccount = accounts[0];\r\n              }\r\n            }\r\n\r\n            if (this.defaultSelectedAccount && this._isComponentMounted) {\r\n              const account = new Account(this.defaultSelectedAccount.id);\r\n              account.name = this.defaultSelectedAccount.name;\r\n\r\n              this.setState({ publisher: publisher, account: account });\r\n              this.props.onChange(publisher, account);\r\n            }\r\n          }\r\n        }\r\n      } catch (e) {\r\n        onNotificationChanged({\r\n          text: this.props.intl.formatMessage(AppMessages.customerInvalid, { appName: APP_NAME_PUBCENTER }),\r\n          messageBarType: MessageBarType.error,\r\n        });\r\n      }\r\n\r\n      onLoadingChanged(false);\r\n    }\r\n\r\n    private _onPublishersResolveSuggestions = async (filter: string): Promise<IListItem[]> => {\r\n      if (filter.trim().length === 0) {\r\n        return [];\r\n      }\r\n      const userContext = getAppStore().userContext!;\r\n\r\n      try {\r\n        const publishers =\r\n          (await listEntity(\r\n            [],\r\n            userContext,\r\n            PublisherSearch,\r\n            new URLSearchParams([\r\n              ['type', 'publishername'],\r\n              ['value', filter],\r\n              ['publisherstatus', 'active'],\r\n            ]),\r\n            publisherSearchApiVersion\r\n          )) || [];\r\n\r\n        if (Number(filter)) {\r\n          const publisher = new Publisher(parseInt(filter, 10));\r\n          const publisherAsync = await getEntity([publisher], userContext);\r\n\r\n          if (publisherAsync) {\r\n            const newPublisher = new PublisherSearch();\r\n            newPublisher.publisherId = publisherAsync.id!;\r\n            newPublisher.publisherName = String(publisherAsync.name);\r\n            publishers.push(newPublisher);\r\n          }\r\n        }\r\n\r\n        return publishers.map((p) => ({\r\n          key: String(p.publisherId),\r\n          name: p.publisherName!,\r\n        }));\r\n      } catch (e) {\r\n        Log.error(`Fetching publisher suggestions failed with error: ${e}`);\r\n      }\r\n\r\n      return [];\r\n    };\r\n\r\n    private _onAccountChanged = (event: React.FormEvent<HTMLDivElement>, option?: IDropdownOption): void => {\r\n      if (!option) {\r\n        this.setState({\r\n          account: undefined,\r\n        });\r\n\r\n        this.props.onChange(this.state.publisher, undefined);\r\n        return;\r\n      }\r\n\r\n      // Query the db for the full account.\r\n      const account = new Account(parseInt(option.key.toString(), 10));\r\n      account.name = option.text;\r\n\r\n      this.setState({ account });\r\n\r\n      this.props.onChange(this.state.publisher, account);\r\n    };\r\n\r\n    private _handleAllAccountsOptions = () => {\r\n      const urlPath = this.props.location.pathname;\r\n      const accounts = this._accountsForCurrentPublisher;\r\n\r\n      if (urlPath && urlPath.includes('adunit') && accounts.length > 0 && accounts[0].key === '0') {\r\n        accounts[0].disabled = false;\r\n      }\r\n\r\n      if (urlPath && (urlPath.includes('channel') || urlPath.includes('adfilter')) && accounts.length > 0 && accounts[0].key === '0') {\r\n        accounts[0].disabled = true;\r\n      }\r\n      this._accountsForCurrentPublisher = accounts;\r\n    };\r\n  }\r\n);\r\n","export function delay(ms: number) {\r\n  return new Promise(resolve => setTimeout(resolve, ms));\r\n}\r\n","import { FontWeights, getTheme, ITheme, mergeStyleSets } from '@fluentui/react';\r\nimport { IPubcenterTheme } from '../../../../../../../theme';\r\nimport { flexWithCenter, noPointerEvents } from '../../../../../../utils/GlobalStyleUtils';\r\n\r\ninterface IPaginationStyleProps {\r\n  theme: ITheme;\r\n}\r\n\r\ntype StyleProperties = 'containerStyle' | 'itemStyle' | 'dotsStyle' | 'selectedItemStyle' | 'disabledItemStyle';\r\nexport type PaginationStyles = Record<StyleProperties, string>;\r\n\r\nexport const getStyles = (props: IPaginationStyleProps): PaginationStyles => {\r\n  const theme = (props.theme as unknown) as IPubcenterTheme;\r\n  const { spacing, palette } = theme;\r\n\r\n  const buttonStyles = {\r\n    ...flexWithCenter,\r\n    width: 32,\r\n    height: 32,\r\n    minWidth: 32,\r\n    margin: spacing.size4,\r\n    fontWeight: FontWeights.semibold,\r\n  };\r\n\r\n  return mergeStyleSets({\r\n    containerStyle: {\r\n      ...flexWithCenter,\r\n      margin: spacing.size16,\r\n    },\r\n    itemStyle: {\r\n      ...buttonStyles,\r\n      ':hover': {\r\n        background: palette.neutralLighter,\r\n      },\r\n    },\r\n    dotsStyle: {\r\n      ...buttonStyles,\r\n      ...noPointerEvents,\r\n    },\r\n    selectedItemStyle: {\r\n      background: palette.themePrimary,\r\n      color: palette.white,\r\n      ...noPointerEvents,\r\n    },\r\n    disabledItemStyle: {\r\n      opacity: 0.5,\r\n      ...noPointerEvents,\r\n    },\r\n  });\r\n};\r\n\r\nexport function getClassNames<PropType>(props?: PropType): PaginationStyles {\r\n  return getStyles({ theme: getTheme(), ...props });\r\n}\r\n","import { useMemo } from 'react';\r\n\r\nexport const DOTS = '...';\r\nexport const DEFAULT_SIBLING_COUNT = 1;\r\n\r\nexport interface IUsePaginationProps {\r\n  currentPageNumber: number;\r\n  pageSize?: number;\r\n  totalPageCount?: number;\r\n  totalItemCount?: number;\r\n  siblingCount?: number;\r\n}\r\n\r\nconst getRange = (start: number, end: number) => {\r\n  const length = end - start + 1;\r\n  return Array.from({ length }, (_, index) => index + start);\r\n};\r\n\r\nexport const useDottedPagination = ({\r\n  totalPageCount,\r\n  totalItemCount,\r\n  pageSize,\r\n  siblingCount = DEFAULT_SIBLING_COUNT,\r\n  currentPageNumber,\r\n}: IUsePaginationProps) => {\r\n  const paginationRange = useMemo(() => {\r\n    if (!totalPageCount && (!totalItemCount || !pageSize)) {\r\n      throw new Error('Either totalPageCount or totalItemCount and pageSize must be provided');\r\n    }\r\n\r\n    const pageCount = totalPageCount ?? Math.ceil(totalItemCount! / pageSize!);\r\n\r\n    // Pages count is determined as siblingCount + firstPage + lastPage + currentPage + 2 * DOTS\r\n    const totalPageNumbersDisplayed = siblingCount + 5;\r\n\r\n    if (totalPageNumbersDisplayed >= pageCount) {\r\n      return getRange(1, pageCount);\r\n    }\r\n\r\n    const leftSiblingIndex = Math.max(currentPageNumber - siblingCount, 1);\r\n    const rightSiblingIndex = Math.min(currentPageNumber + siblingCount, pageCount);\r\n\r\n    /*\r\n      We do not want to show dots if there is only one position left\r\n      after/before the left/right page count as that would lead to a change if our Pagination\r\n      component size which we do not want\r\n    */\r\n    const shouldShowLeftDots = leftSiblingIndex > 2;\r\n    const shouldShowRightDots = rightSiblingIndex < pageCount - 2;\r\n\r\n    const firstPageIndex = 1;\r\n    const lastPageIndex = pageCount;\r\n\r\n    if (!shouldShowLeftDots && shouldShowRightDots) {\r\n      const leftItemCount = 3 + 2 * siblingCount;\r\n      const leftRange = getRange(1, leftItemCount);\r\n\r\n      return [...leftRange, DOTS, pageCount];\r\n    }\r\n\r\n    if (shouldShowLeftDots && !shouldShowRightDots) {\r\n      const rightItemCount = 3 + 2 * siblingCount;\r\n      const rightRange = getRange(pageCount - rightItemCount + 1, pageCount);\r\n      return [firstPageIndex, DOTS, ...rightRange];\r\n    }\r\n\r\n    if (shouldShowLeftDots && shouldShowRightDots) {\r\n      const middleRange = getRange(leftSiblingIndex, rightSiblingIndex);\r\n      return [firstPageIndex, DOTS, ...middleRange, DOTS, lastPageIndex];\r\n    }\r\n  }, [totalItemCount, pageSize, siblingCount, currentPageNumber, totalPageCount]);\r\n\r\n  return paginationRange;\r\n};\r\n","import { DefaultButton, IconButton, mergeStyleSets } from '@fluentui/react';\r\nimport React from 'react';\r\nimport { IPaginationProps } from '../../Pagination';\r\nimport { getClassNames } from './DottedPagination.styles';\r\nimport { DOTS, useDottedPagination } from './useDottedPagination';\r\n\r\nexport interface IDottedPaginationProps extends IPaginationProps {}\r\n\r\nexport const DottedPagination = ({\r\n  currentPageNumber,\r\n  pageSize,\r\n  className,\r\n  onPageChange,\r\n  siblingCount,\r\n  totalItemCount,\r\n  totalPageCount,\r\n  styleProps,\r\n}: IDottedPaginationProps) => {\r\n  const paginationRange = useDottedPagination({\r\n    currentPageNumber,\r\n    totalItemCount,\r\n    totalPageCount,\r\n    siblingCount,\r\n    pageSize,\r\n  });\r\n  const { containerStyle, itemStyle, dotsStyle, selectedItemStyle, disabledItemStyle } = mergeStyleSets(getClassNames(), styleProps);\r\n\r\n  if (!paginationRange) {\r\n    return null;\r\n  }\r\n\r\n  if (currentPageNumber === 0 || paginationRange.length < 2) {\r\n    return null;\r\n  }\r\n\r\n  const lastPage = paginationRange[paginationRange.length - 1];\r\n\r\n  const onNext = () => {\r\n    onPageChange!(currentPageNumber + 1);\r\n  };\r\n\r\n  const onPrevious = () => {\r\n    onPageChange!(currentPageNumber - 1);\r\n  };\r\n\r\n  return (\r\n    <div className={`${containerStyle} ${className || ''}`}>\r\n      <IconButton\r\n        id=\"previousPage\"\r\n        iconProps={{ iconName: 'ChevronLeftSmall' }}\r\n        className={`${itemStyle} ${currentPageNumber === 1 ? disabledItemStyle : ''}`}\r\n        onClick={onPrevious}\r\n      />\r\n\r\n      {paginationRange.map((pageNumber, index) => {\r\n        if (pageNumber === DOTS) {\r\n          return <span className={dotsStyle}>&#8230;</span>;\r\n        }\r\n\r\n        return (\r\n          <DefaultButton\r\n            id={`customPage-${index}`}\r\n            key={pageNumber}\r\n            className={`${itemStyle} ${currentPageNumber === pageNumber ? selectedItemStyle : ''}`}\r\n            onClick={() => onPageChange!(pageNumber as number)}\r\n          >\r\n            {pageNumber}\r\n          </DefaultButton>\r\n        );\r\n      })}\r\n      <IconButton\r\n        id=\"nextPage\"\r\n        iconProps={{ iconName: 'ChevronRightSmall' }}\r\n        className={`${itemStyle} ${currentPageNumber === lastPage ? disabledItemStyle : ''}`}\r\n        onClick={onNext}\r\n      />\r\n    </div>\r\n  );\r\n};\r\n","import { defineMessages } from 'react-intl';\r\n\r\nexport default defineMessages({\r\n  showRows: {\r\n    id: 'showRows',\r\n    defaultMessage: 'Show rows:',\r\n  },\r\n  of: {\r\n    id: 'of',\r\n    defaultMessage: 'of',\r\n  },\r\n  firstPage: {\r\n    id: 'firstPage',\r\n    defaultMessage: 'First page',\r\n  },\r\n  prevPage: {\r\n    id: 'prevPage',\r\n    defaultMessage: 'Previous page',\r\n  },\r\n  lastPage: {\r\n    id: 'lastPage',\r\n    defaultMessage: 'Last page',\r\n  },\r\n  nextPage: {\r\n    id: 'nextPage',\r\n    defaultMessage: 'Next page',\r\n  },\r\n});\r\n","import { getTheme, ITheme, mergeStyleSets } from '@fluentui/react';\r\nimport { IPubcenterTheme } from '../../../../../../../theme';\r\nimport { flexWithAlignCenter, flexWithCenter, noPointerEvents } from '../../../../../../utils/GlobalStyleUtils';\r\n\r\ninterface INavigatedPaginationStyleProps {\r\n  theme: ITheme;\r\n}\r\n\r\ntype StyleProperties = 'containerStyle' | 'itemStyle' | 'dropdownStyle' | 'disabledItemStyle';\r\nexport type NavigatedPaginationStyles = Record<StyleProperties, string>;\r\n\r\nexport const getStyles = (props: INavigatedPaginationStyleProps): NavigatedPaginationStyles => {\r\n  const theme = (props.theme as unknown) as IPubcenterTheme;\r\n  const { spacing, palette } = theme;\r\n\r\n  const buttonStyles = {\r\n    ...flexWithCenter,\r\n    width: 32,\r\n    height: 32,\r\n    minWidth: 32,\r\n    margin: spacing.size4,\r\n    color: palette.black,\r\n  };\r\n\r\n  return mergeStyleSets({\r\n    containerStyle: {\r\n      ...flexWithAlignCenter,\r\n    },\r\n    itemStyle: {\r\n      ...buttonStyles,\r\n      ':hover': {\r\n        backgroundColor: palette.neutralLighter,\r\n        color: palette.blackTranslucent40,\r\n      },\r\n    },\r\n    dropdownStyle: {\r\n      width: 80,\r\n      margin: `0 ${spacing.size12}`,\r\n    },\r\n    disabledItemStyle: {\r\n      opacity: 0.5,\r\n      color: palette.blackTranslucent40,\r\n      ...noPointerEvents,\r\n    },\r\n  });\r\n};\r\n\r\nexport function getClassNames<PropType>(props?: PropType): NavigatedPaginationStyles {\r\n  return getStyles({ theme: getTheme(), ...props });\r\n}\r\n","import { Dropdown, IconButton, IDropdownOption, mergeStyleSets } from '@fluentui/react';\r\nimport React from 'react';\r\nimport { InjectedIntlProps } from 'react-intl';\r\nimport { PAGINATION_PAGE_SIZES } from '../../../../../../constants/AppConstants';\r\nimport { useWindowSize } from '../../../../../../hooks';\r\nimport { getStore as getWindowSizeStore } from '../../../../../../hooks/useWindowSize/store/store';\r\nimport { IPaginationProps } from '../../Pagination';\r\nimport messages from './NavigatedPagination.messages';\r\nimport { getClassNames } from './NavigatedPagination.styles';\r\n\r\nexport interface INavigatedPaginationProps extends IPaginationProps, InjectedIntlProps {}\r\n\r\nexport const NavigatedPagination = ({\r\n  intl,\r\n  currentPageNumber,\r\n  pageSize,\r\n  className,\r\n  onPageNumberChange,\r\n  onPageSizeChange,\r\n  totalItemCount,\r\n  totalPageCount,\r\n  styleProps,\r\n}: INavigatedPaginationProps) => {\r\n  const { formatMessage } = intl;\r\n  const { containerStyle, itemStyle, dropdownStyle, disabledItemStyle } = mergeStyleSets(getClassNames(), styleProps);\r\n  const { windowStoreSerializer } = useWindowSize();\r\n  const { isWindowSmallSize, isWindowExtraSmallSize } = windowStoreSerializer(getWindowSizeStore());\r\n\r\n  const lastPage = totalPageCount || (totalItemCount && pageSize && Math.ceil(totalItemCount / pageSize)) || 0;\r\n  if (lastPage === 0) {\r\n    // Either totalPageCount or totalItemCount and pageSize must be provided\r\n    return <></>;\r\n  }\r\n\r\n  const onFirst = () => {\r\n    onPageNumberChange?.(1);\r\n  };\r\n\r\n  const onNext = () => {\r\n    onPageNumberChange?.(currentPageNumber + 1);\r\n  };\r\n\r\n  const onPrevious = () => {\r\n    onPageNumberChange?.(currentPageNumber - 1);\r\n  };\r\n\r\n  const onLast = () => {\r\n    onPageNumberChange?.(lastPage as number);\r\n  };\r\n\r\n  const getPageSizeOptions = () => {\r\n    return PAGINATION_PAGE_SIZES.map((size) => {\r\n      return {\r\n        key: size.toString(),\r\n        text: size.toString(),\r\n        isSelected: size === currentPageNumber,\r\n      };\r\n    }) as IDropdownOption[];\r\n  };\r\n\r\n  const getPageOptions = () => {\r\n    return Array.from({ length: lastPage as number }, (_, i) => i + 1).map((index) => {\r\n      return {\r\n        key: index.toString(),\r\n        text: index.toString(),\r\n        isSelected: index === currentPageNumber,\r\n      };\r\n    }) as IDropdownOption[];\r\n  };\r\n\r\n  return (\r\n    <div className={`${containerStyle} ${className || ''}`}>\r\n      <span>{formatMessage(messages.showRows)}</span>\r\n      <Dropdown\r\n        ariaLabel={formatMessage(messages.showRows)}\r\n        selectedKey={pageSize?.toString()}\r\n        options={getPageSizeOptions()}\r\n        className={dropdownStyle}\r\n        onChange={(_, e) => {\r\n          if (e) {\r\n            onFirst();\r\n            onPageSizeChange?.(Number(e.text));\r\n          }\r\n        }}\r\n      />\r\n\r\n      {!isWindowSmallSize && !isWindowExtraSmallSize && (\r\n        <IconButton\r\n          id=\"firstPage\"\r\n          iconProps={{ iconName: 'DoubleChevronLeft' }}\r\n          className={`${itemStyle} ${currentPageNumber === 1 ? disabledItemStyle : ''}`}\r\n          ariaLabel={formatMessage(messages.firstPage)}\r\n          onClick={onFirst}\r\n        />\r\n      )}\r\n      <IconButton\r\n        id=\"previousPage\"\r\n        iconProps={{ iconName: 'ChevronLeft' }}\r\n        className={`${itemStyle} ${currentPageNumber === 1 ? disabledItemStyle : ''}`}\r\n        ariaLabel={formatMessage(messages.prevPage)}\r\n        onClick={onPrevious}\r\n      />\r\n\r\n      <Dropdown\r\n        id=\"pageChangerDropdown\"\r\n        selectedKey={currentPageNumber.toString()}\r\n        options={getPageOptions()}\r\n        className={dropdownStyle}\r\n        onChange={(_, e) => e && onPageNumberChange?.(Number(e.text))}\r\n        ariaLabel={currentPageNumber.toString()}\r\n      />\r\n      <span>\r\n        {formatMessage(messages.of)} {lastPage}\r\n      </span>\r\n\r\n      <IconButton\r\n        id=\"nextPage\"\r\n        iconProps={{ iconName: 'ChevronRight' }}\r\n        className={`${itemStyle} ${currentPageNumber === lastPage ? disabledItemStyle : ''}`}\r\n        ariaLabel={formatMessage(messages.nextPage)}\r\n        onClick={onNext}\r\n      />\r\n      {!isWindowSmallSize && !isWindowExtraSmallSize && (\r\n        <IconButton\r\n          id=\"lastPage\"\r\n          iconProps={{ iconName: 'DoubleChevronRight' }}\r\n          className={`${itemStyle} ${currentPageNumber === lastPage ? disabledItemStyle : ''}`}\r\n          ariaLabel={formatMessage(messages.lastPage)}\r\n          onClick={onLast}\r\n        />\r\n      )}\r\n    </div>\r\n  );\r\n};\r\n","import React from 'react';\r\nimport { InjectedIntlProps } from 'react-intl';\r\nimport { PaginationDisplay } from './Pagination.types';\r\nimport { DottedPagination } from './Themes/DottedPagination/DottedPagination';\r\nimport { IUsePaginationProps } from './Themes/DottedPagination/useDottedPagination';\r\nimport { NavigatedPagination } from './Themes/NavigatedPagination/NavigatedPagination';\r\n\r\nexport interface IPaginationProps extends IUsePaginationProps, InjectedIntlProps {\r\n  display?: PaginationDisplay;\r\n  className?: string;\r\n  styleProps?: React.CSSProperties;\r\n  onPageNumberChange?: (page: number) => void;\r\n  onPageSizeChange?: (page: number) => void;\r\n  onPageChange?: (page: number) => void;\r\n}\r\n\r\nexport const Pagination = (props: IPaginationProps) => {\r\n  const getPagination = () => {\r\n    switch (props.display) {\r\n      case PaginationDisplay.Navigation:\r\n        return <NavigatedPagination {...props} />;\r\n      default:\r\n        return <DottedPagination {...props} />;\r\n    }\r\n  };\r\n  return getPagination();\r\n};\r\n","import { getTheme, mergeStyleSets } from '@fluentui/react';\r\nimport { IPubcenterPalette, IPubcenterSpacing } from '../../../../../theme';\r\nimport { ICommonStyleProps } from '../../../../types';\r\n\r\ntype StyleProperties =\r\n  | 'calenderContainer'\r\n  | 'calenderRangeSelectorsContainer'\r\n  | 'calenderRangeSelector'\r\n  | 'calenderRangeSelectedSelector'\r\n  | 'calenderRangeSelectorDateContainer'\r\n  | 'calenderRangeSelectorDate'\r\n  | 'calenderButton'\r\n  | 'calender'\r\n  | 'calenderHeader'\r\n  | 'calenderMonthLabel'\r\n  | 'calenderNavigator'\r\n  | 'calenderBody'\r\n  | 'actions'\r\n  | 'daysGrid';\r\n\r\ntype CustomCalenderStyles = Record<StyleProperties, string>;\r\n\r\nexport const getStyles = (props: ICommonStyleProps): CustomCalenderStyles => {\r\n  const { theme } = props;\r\n  const spacing = theme.spacing as IPubcenterSpacing;\r\n  const palette = theme.palette as IPubcenterPalette;\r\n\r\n  return mergeStyleSets({\r\n    calenderContainer: {\r\n      display: 'flex',\r\n    },\r\n    calenderRangeSelectorsContainer: {\r\n      display: 'flex',\r\n      flexDirection: 'column',\r\n      borderTop: `3px solid ${palette.themePrimary}`,\r\n      borderRight: '1px solid #D6D6D6',\r\n    },\r\n    calenderRangeSelectorDateContainer: {\r\n      padding: spacing.size10,\r\n    },\r\n    calenderRangeSelectorDate: {\r\n      padding: '5px 20px 5px 10px',\r\n      border: '1px solid #757575',\r\n      borderRadius: 2,\r\n      userSelect: 'none',\r\n    },\r\n    calenderRangeSelector: {\r\n      padding: spacing.size10,\r\n      cursor: 'pointer',\r\n      userSelect: 'none',\r\n      '&:hover': {\r\n        color: palette.white,\r\n        background: palette.themePrimary,\r\n      },\r\n    },\r\n    calenderRangeSelectedSelector: {\r\n      color: palette.white,\r\n      background: palette.themePrimary,\r\n    },\r\n    calenderButton: {\r\n      display: 'flex',\r\n      alignItems: 'center',\r\n      color: '#757575',\r\n      gap: spacing.size10,\r\n      width: 'fit-content',\r\n      padding: spacing.size6,\r\n      border: '1px solid #757575',\r\n      borderRadius: 2,\r\n      cursor: 'pointer',\r\n      userSelect: 'none',\r\n    },\r\n    calender: {\r\n      width: '450px',\r\n      display: 'grid',\r\n      gap: spacing.size10,\r\n      textAlign: 'center',\r\n      alignItems: 'center',\r\n      padding: spacing.size16,\r\n    },\r\n    calenderHeader: {\r\n      display: 'flex',\r\n      alignItems: 'center',\r\n      justifyContent: 'space-between',\r\n    },\r\n    calenderNavigator: {\r\n      borderRadius: 2,\r\n      cursor: 'pointer',\r\n      userSelect: 'none',\r\n      padding: spacing.size6,\r\n      '&:hover': {\r\n        color: palette.white,\r\n        background: palette.themePrimary,\r\n      },\r\n    },\r\n    calenderMonthLabel: {\r\n      flexGrow: 1,\r\n      userSelect: 'none',\r\n    },\r\n    calenderBody: {\r\n      display: 'flex',\r\n      justifyContent: 'space-between',\r\n    },\r\n    daysGrid: {\r\n      display: 'grid',\r\n      gridTemplateColumns: 'repeat(7, 1fr)',\r\n      userSelect: 'none',\r\n    },\r\n    actions: {\r\n      display: 'flex',\r\n      gap: '10px',\r\n      justifyContent: 'end',\r\n    },\r\n  });\r\n};\r\n\r\nexport function getClassNames<PropType>(props?: PropType): CustomCalenderStyles {\r\n  return getStyles({ theme: getTheme(), ...props });\r\n}\r\n","import { getTheme, mergeStyleSets } from '@fluentui/react';\r\nimport { IPubcenterPalette, IPubcenterSpacing } from '../../../../../../theme';\r\nimport { ICommonStyleProps } from '../../../../../types';\r\n\r\ntype StyleProperties = 'dateInCurrentMonth' | 'dateNotInCurrentMonth' | 'dateSelected' | 'dateSelectedInBetween' | 'disabledDate';\r\n\r\ntype SingleDayStyles = Record<StyleProperties, string>;\r\n\r\nexport const getStyles = (props: ICommonStyleProps): SingleDayStyles => {\r\n  const { theme } = props;\r\n  const spacing = theme.spacing as IPubcenterSpacing;\r\n  const palette = theme.palette as IPubcenterPalette;\r\n\r\n  const day = {\r\n    padding: spacing.size8,\r\n    borderRadius: 2,\r\n    cursor: 'pointer',\r\n  };\r\n\r\n  return mergeStyleSets({\r\n    dateNotInCurrentMonth: {\r\n      ...day,\r\n      color: '#737373',\r\n      cursor: 'not-allowed',\r\n    },\r\n    disabledDate: {\r\n      ...day,\r\n      color: '#737373',\r\n      cursor: 'not-allowed',\r\n    },\r\n    dateInCurrentMonth: {\r\n      ...day,\r\n      background: palette.neutralLight,\r\n      '&:hover': {\r\n        color: palette.white,\r\n        background: palette.themePrimary,\r\n      },\r\n    },\r\n    dateSelected: {\r\n      ...day,\r\n      background: palette.themePrimary,\r\n      color: palette.white,\r\n    },\r\n    dateSelectedInBetween: {\r\n      ...day,\r\n      background: '#CBE7F2',\r\n    },\r\n  });\r\n};\r\n\r\nexport function getClassNames<PropType>(props?: PropType): SingleDayStyles {\r\n  return getStyles({ theme: getTheme(), ...props });\r\n}\r\n","import React from 'react';\r\nimport { injectIntlAndObserver } from '../../../../../utils';\r\nimport { getClassNames } from './SingleDay.styles';\r\nimport { ISingleDayProps } from './SingleDay.types';\r\n\r\nexport const SingleDay = injectIntlAndObserver(function SingleDayComponent(props: ISingleDayProps): JSX.Element {\r\n  const { dayObj, handleDateRangeSelection, selectedDateRange, hoveredDateRange, handleDateRangeHover, turn, isDisabled } = props;\r\n  const { day, fullDay, isInCurrentMonth } = dayObj;\r\n  const { dateNotInCurrentMonth, dateInCurrentMonth, dateSelected, dateSelectedInBetween, disabledDate } = getClassNames();\r\n\r\n  function getDayClasses() {\r\n    const disabledClass = isDisabled ? disabledDate : '';\r\n    const isInCurrentMonthClass = !isDisabled ? (isInCurrentMonth ? dateInCurrentMonth : dateNotInCurrentMonth) : '';\r\n    const dayIndex = selectedDateRange.findIndex(\r\n      (date) => date.toDateString() === new Date(fullDay.year, fullDay.month, fullDay.day).toDateString()\r\n    );\r\n    const isInHoverRange = hoveredDateRange?.find(\r\n      (date) => date.toDateString() === new Date(fullDay.year, fullDay.month, fullDay.day).toDateString()\r\n    );\r\n    const selectedClass =\r\n      isInCurrentMonth && dayIndex !== -1\r\n        ? dayIndex === 0 || dayIndex === selectedDateRange.length - 1\r\n          ? dateSelected\r\n          : dateSelectedInBetween\r\n        : '';\r\n    const hoverClass = isInCurrentMonth && isInHoverRange ? dateSelected : '';\r\n    return `${disabledClass} ${selectedClass} ${isInCurrentMonthClass} ${hoverClass}`;\r\n  }\r\n\r\n  return (\r\n    <span\r\n      id={isInCurrentMonth ? Object.values(fullDay).join('/') : ''}\r\n      className={getDayClasses()}\r\n      onClick={() => !isDisabled && isInCurrentMonth && handleDateRangeSelection(fullDay)}\r\n      onMouseEnter={() => {\r\n        turn === 1 && isInCurrentMonth && !isDisabled && handleDateRangeHover?.(fullDay);\r\n      }}\r\n    >\r\n      {day}\r\n    </span>\r\n  );\r\n});\r\n","import { Callout, DefaultButton, DirectionalHint, Icon, PrimaryButton } from '@fluentui/react';\r\nimport React, { useState } from 'react';\r\nimport { useI18n } from '../../../../../i18n/useI18n';\r\nimport { getAppStore } from '../../../../@data';\r\nimport AppMessages from '../../../../App.messages';\r\nimport { DATE_RANGE_PICKER_APPLY_BUTTON } from '../../../../constants/DataTestIdConstants';\r\nimport { WEEK_DAYS_LANGUAGE_MAPPING } from '../../../../globalization';\r\nimport { injectIntlAndObserver } from '../../../../utils';\r\nimport { getStore } from '../../../ad-management/Account/Settings/@data/store/store';\r\nimport messages from './CustomCalender.messages';\r\nimport { getClassNames } from './CustomCalender.styles';\r\nimport { ICustomCalenderProps, IDateElements, IDay, RangeType } from './CustomCalender.types';\r\nimport { SingleDay } from './components/SingleDay';\r\nimport {\r\n  get7DaysExcludingToday,\r\n  getDatesInRange,\r\n  getLastSundayToSaturday,\r\n  getMondayToToday,\r\n  getMonthlyCalendar,\r\n  getPresetDataTestId,\r\n  getSelectedEndingDate,\r\n  getSelectedPeriodLabel,\r\n  getSelectedStartingDate,\r\n  getSundayToToday,\r\n  getToday,\r\n  getYesterday,\r\n  isDayInFuture,\r\n} from './utils/CalenderUtils';\r\n\r\nconst END_OF_YEAR_INDEX = 11;\r\nconst START_OF_YEAR_INDEX = 0;\r\n\r\nexport const CustomCalender = injectIntlAndObserver(function CustomCalenderComponent(props: ICustomCalenderProps): JSX.Element {\r\n  const { onSelectedDatesChanged, initialRangeType, initialDateRange, intl, disableFutureDays = true, dataTestId } = props;\r\n  const { formatMessage } = intl;\r\n  const [selectedDateRange, setSelectedDateRange] = useState<Date[]>(getDatesInRange(initialDateRange.startDate, initialDateRange.endDate));\r\n  const [finalDateRange, setFinalDateRange] = useState<Date[]>(getDatesInRange(initialDateRange.startDate, initialDateRange.endDate));\r\n  const [hoveredDateRange, setHoveredDateRange] = useState<Date[]>([]);\r\n  const [turn, setTurn] = useState(0);\r\n  const [isCalenderVisible, setIsCalenderVisible] = useState(false);\r\n  const [rangeType, setRangeType] = useState(initialRangeType);\r\n  const [finalRangeType, setFinalRangeType] = useState(initialRangeType);\r\n  const { publisher, userContext } = getAppStore();\r\n  const { systemPreferences } = getStore().active;\r\n  const { locale } = useI18n({ systemPreferences, publisher, userContext });\r\n  const options: Intl.DateTimeFormatOptions = {};\r\n  options.year = 'numeric';\r\n  options.month = 'short';\r\n  const optionsDays: Intl.DateTimeFormatOptions = {};\r\n  optionsDays.weekday = 'narrow';\r\n  const WEEK_DAYS = WEEK_DAYS_LANGUAGE_MAPPING[getAppStore().locale];\r\n\r\n  const [currentMonth, setCurrentMonth] = useState(new Date().getMonth());\r\n  const [currentYear, setCurrentYear] = useState(new Date().getFullYear());\r\n  const {\r\n    calenderContainer,\r\n    calenderRangeSelectorsContainer,\r\n    calenderRangeSelector,\r\n    calenderRangeSelectedSelector,\r\n    calenderRangeSelectorDateContainer,\r\n    calenderRangeSelectorDate,\r\n    calenderButton,\r\n    calender,\r\n    calenderBody,\r\n    calenderNavigator,\r\n    calenderMonthLabel,\r\n    daysGrid,\r\n    calenderHeader,\r\n    actions,\r\n  } = getClassNames();\r\n\r\n  const nextMonth = () => {\r\n    if (currentMonth < END_OF_YEAR_INDEX) {\r\n      setCurrentMonth((prev) => prev + 1);\r\n    } else {\r\n      setCurrentMonth(START_OF_YEAR_INDEX);\r\n      setCurrentYear((prev) => prev + 1);\r\n    }\r\n  };\r\n\r\n  const prevMonth = () => {\r\n    if (currentMonth > START_OF_YEAR_INDEX) {\r\n      setCurrentMonth((prev) => prev - 1);\r\n    } else {\r\n      setCurrentMonth(END_OF_YEAR_INDEX);\r\n      setCurrentYear((prev) => prev - 1);\r\n    }\r\n  };\r\n\r\n  const handleDateRangeSelection = (selectedDate: IDateElements) => {\r\n    if (turn === 0) {\r\n      setTurn(1);\r\n      setSelectedDateRange([new Date(selectedDate.year, selectedDate.month, selectedDate.day)]);\r\n      setHoveredDateRange([new Date(selectedDate.year, selectedDate.month, selectedDate.day)]);\r\n    } else if (turn === 1) {\r\n      let dates = getDatesInRange(selectedDateRange[0], new Date(selectedDate.year, selectedDate.month, selectedDate.day));\r\n      if (dates.length === 0) {\r\n        dates = [selectedDateRange[0]];\r\n      }\r\n      if (dates.length === 1) {\r\n        dates = [selectedDateRange[0], selectedDateRange[0]];\r\n      }\r\n      setTurn(0);\r\n      setSelectedDateRange(dates);\r\n      setHoveredDateRange([]);\r\n      setRangeType(RangeType.Custom);\r\n    }\r\n  };\r\n\r\n  const handleDateRangeHover = (date: IDateElements) => {\r\n    const days = getDatesInRange(hoveredDateRange[0], new Date(date.year, date.month, date.day));\r\n    setHoveredDateRange(days.length === 0 ? [selectedDateRange[0]] : days);\r\n  };\r\n\r\n  const getRangeSelectorContent = (type: RangeType, message: ReactIntl.FormattedMessage.MessageDescriptor, clickable: boolean = true) => {\r\n    const getRange = (selector: RangeType) => {\r\n      setRangeType(selector);\r\n      let dateRange;\r\n      switch (selector) {\r\n        case RangeType.Today:\r\n          dateRange = getToday();\r\n          break;\r\n        case RangeType.Yesterday:\r\n          dateRange = getYesterday();\r\n          break;\r\n        case RangeType.SundayToday:\r\n          dateRange = getSundayToToday();\r\n          break;\r\n        case RangeType.MondayToday:\r\n          dateRange = getMondayToToday();\r\n          break;\r\n        case RangeType.Last7ExcludingToday:\r\n          dateRange = get7DaysExcludingToday();\r\n          break;\r\n        case RangeType.Last7FromSunToSat:\r\n          dateRange = getLastSundayToSaturday();\r\n          break;\r\n        default:\r\n          break;\r\n      }\r\n      setSelectedDateRange(dateRange);\r\n    };\r\n\r\n    return (\r\n      <span\r\n        data-test-id={getPresetDataTestId(type)}\r\n        className={`${calenderRangeSelector} ${rangeType === type ? calenderRangeSelectedSelector : ''}`}\r\n        onClick={() => clickable && getRange(type)}\r\n      >\r\n        {formatMessage(message)}\r\n      </span>\r\n    );\r\n  };\r\n\r\n  const getCalenderContent = (year: number, month: number) => {\r\n    return (\r\n      <div className={daysGrid}>\r\n        {WEEK_DAYS.map((day, index) => (\r\n          <p key={index}>{day}</p>\r\n        ))}\r\n        {getMonthlyCalendar(year, month).map((day: IDay, index) => (\r\n          <SingleDay\r\n            {...props}\r\n            key={index}\r\n            dayObj={day}\r\n            turn={turn}\r\n            isDisabled={disableFutureDays && isDayInFuture(day.fullDay)}\r\n            handleDateRangeSelection={handleDateRangeSelection}\r\n            selectedDateRange={selectedDateRange}\r\n            hoveredDateRange={hoveredDateRange}\r\n            handleDateRangeHover={handleDateRangeHover}\r\n          />\r\n        ))}\r\n      </div>\r\n    );\r\n  };\r\n  const resetCalender = () => {\r\n    setSelectedDateRange(finalDateRange);\r\n    setRangeType(finalRangeType);\r\n  };\r\n  const hideCalender = () => {\r\n    setIsCalenderVisible(false);\r\n  };\r\n  const onApplyClicked = () => {\r\n    onSelectedDatesChanged({ startDate: selectedDateRange[0], endDate: selectedDateRange[selectedDateRange.length - 1] }, rangeType);\r\n    setFinalDateRange(selectedDateRange);\r\n    setFinalRangeType(rangeType);\r\n    hideCalender();\r\n  };\r\n  const onDismiss = () => {\r\n    resetCalender();\r\n    hideCalender();\r\n  };\r\n\r\n  return (\r\n    <>\r\n      <div\r\n        data-test-id={dataTestId}\r\n        id={'customCalender'}\r\n        className={calenderButton}\r\n        onClick={() => setIsCalenderVisible(!isCalenderVisible)}\r\n      >\r\n        <span>\r\n          {getSelectedPeriodLabel(rangeType, formatMessage)}\r\n          {getSelectedStartingDate(selectedDateRange, locale)}\r\n          {getSelectedEndingDate(selectedDateRange, locale)}\r\n        </span>\r\n        <Icon iconName=\"Calendar\" />\r\n      </div>\r\n      {isCalenderVisible && (\r\n        <Callout target={'#customCalender'} isBeakVisible={false} onDismiss={onDismiss} directionalHint={DirectionalHint.bottomRightEdge}>\r\n          <div className={calenderContainer}>\r\n            <div className={calenderRangeSelectorsContainer}>\r\n              <div className={calenderRangeSelectorDateContainer}>\r\n                <span className={calenderRangeSelectorDate}>{selectedDateRange[0].toLocaleDateString(locale)}</span>\r\n                {' - '}\r\n                <span className={calenderRangeSelectorDate}>\r\n                  {selectedDateRange[selectedDateRange.length - 1].toLocaleDateString(locale)}\r\n                </span>\r\n              </div>\r\n              {getRangeSelectorContent(RangeType.Custom, messages.customLabel, false)}\r\n              {getRangeSelectorContent(RangeType.Today, messages.todayLabel)}\r\n              {getRangeSelectorContent(RangeType.Yesterday, messages.yesterdayLabel)}\r\n              {getRangeSelectorContent(RangeType.SundayToday, messages.sundayTodayLabel)}\r\n              {getRangeSelectorContent(RangeType.MondayToday, messages.mondayTodayLabel)}\r\n              {getRangeSelectorContent(RangeType.Last7ExcludingToday, messages.last7FromTodayLabel)}\r\n              {getRangeSelectorContent(RangeType.Last7FromSunToSat, messages.last7FromSunToSatLabel)}\r\n            </div>\r\n            <div className={calender}>\r\n              <div className={calenderHeader}>\r\n                <Icon iconName=\"ChevronLeft\" className={calenderNavigator} onClick={prevMonth} />\r\n                <span className={calenderMonthLabel}>\r\n                  {new Date(\r\n                    currentMonth - 1 >= 0 ? currentYear : currentYear - 1,\r\n                    currentMonth - 1 >= 0 ? currentMonth - 1 : 11\r\n                  ).toLocaleDateString(locale, options)}\r\n                </span>\r\n                <span className={calenderMonthLabel}>{new Date(currentYear, currentMonth).toLocaleDateString(locale, options)}</span>\r\n                <Icon iconName=\"ChevronRight\" className={calenderNavigator} onClick={nextMonth} />\r\n              </div>\r\n              <div className={calenderBody}>\r\n                {getCalenderContent(currentMonth - 1 >= 0 ? currentYear : currentYear - 1, currentMonth - 1 >= 0 ? currentMonth - 1 : 11)}\r\n                {getCalenderContent(currentYear, currentMonth)}\r\n              </div>\r\n              <div className={actions}>\r\n                <PrimaryButton data-test-id={DATE_RANGE_PICKER_APPLY_BUTTON} onClick={onApplyClicked}>\r\n                  {formatMessage(AppMessages.apply)}\r\n                </PrimaryButton>\r\n                <DefaultButton onClick={onDismiss}>{formatMessage(AppMessages.cancel)}</DefaultButton>\r\n              </div>\r\n            </div>\r\n          </div>\r\n        </Callout>\r\n      )}\r\n    </>\r\n  );\r\n});\r\n","import { IStyle } from '@fluentui/react';\r\nimport { IPubcenterSpacing } from '../../../theme';\r\n\r\nexport interface IInternationalizationStyles {\r\n  supportButtonWrapper?: IStyle;\r\n  supportButton?: IStyle;\r\n}\r\n\r\nexport const getStyles = (props) => {\r\n  const { theme } = props;\r\n  const spacing = theme.spacing as IPubcenterSpacing;\r\n\r\n  return {\r\n    supportButtonWrapper: {\r\n      display: 'flex',\r\n      justifyContent: 'flex-end',\r\n    },\r\n    supportButton: {\r\n      display: 'flex',\r\n      alignItems: 'center',\r\n      marginRight: spacing.size12,\r\n      img: {\r\n        marginRight: spacing.size6,\r\n      },\r\n    },\r\n  };\r\n};\r\n","import { ITheme, classNamesFunction, css, getTheme } from '@fluentui/react';\r\nimport React, { useEffect, useRef } from 'react';\r\nimport { InjectedIntlProps } from 'react-intl';\r\nimport { useI18n } from '../../../i18n/useI18n';\r\nimport { Publisher, UserContext, getEntityAccessPermissions, isTythonSelfServeUser } from '../../@data';\r\nimport { UserRoleEntity, completeAccess, hasReadAccess } from '../../@data/services/UserRoleService';\r\nimport { PublisherSettings } from '../../@data/store/schema/userrolemodels/PublisherSettings';\r\nimport { SupportPageRoute } from '../../Routes';\r\nimport { useCMUIHelpExperience } from '../../hooks';\r\nimport SupportBotton from '../../hooks/useCMUIHelpExperience/supportButton.svg';\r\nimport { onFetchPublisherPreferences } from '../../pages/ad-management/Account/Settings/@data/actions';\r\nimport { getStore } from '../../pages/ad-management/Account/Settings/@data/store/store';\r\nimport { onInitializeSystemPreferences } from '../../pages/ad-management/Home/@data/actions';\r\nimport supportMessages from '../../pages/ad-management/Home/components/ResourcesSection/ResourcesSection.messages';\r\nimport { injectIntlAndObserver } from '../../utils';\r\nimport { IInternationalizationStyles, getStyles } from './InternationalizationLayout.styles';\r\n\r\nexport interface IInternationalizationLayoutProps extends InjectedIntlProps {\r\n  children?: React.ReactNode;\r\n  publisher?: Publisher;\r\n  userContext?: UserContext;\r\n}\r\n\r\nconst getClassNames = classNamesFunction<{ theme: ITheme }, IInternationalizationStyles>();\r\n\r\nexport const InternationalizationLayout = injectIntlAndObserver(({ publisher, userContext, intl }: IInternationalizationLayoutProps) => {\r\n  const accessPermissions = getEntityAccessPermissions(UserRoleEntity.PublisherSettings) as PublisherSettings | null;\r\n  const hasPublisherPreferencesAccess = hasReadAccess(accessPermissions ? accessPermissions.publisherPreferences : completeAccess);\r\n  const systemPreferences = getStore().active.systemPreferences;\r\n  const { locale } = useI18n({ systemPreferences, publisher, userContext });\r\n  const handledPreference = useRef<boolean>(false);\r\n  const handledSystemPreference = useRef<boolean>(false);\r\n  const { init: initCMUIExperience, initCMUIHelpButtonEventListener, removeCMUIHelpButtonEventListener } = useCMUIHelpExperience();\r\n  const classNames = getClassNames(getStyles, { theme: getTheme() });\r\n\r\n  useEffect(() => {\r\n    if (hasPublisherPreferencesAccess && publisher && userContext && !handledPreference.current && isTythonSelfServeUser()) {\r\n      onFetchPublisherPreferences();\r\n      handledPreference.current = true;\r\n    }\r\n  }, [publisher, userContext, hasPublisherPreferencesAccess]);\r\n\r\n  useEffect(() => {\r\n    if (publisher && userContext && !handledSystemPreference.current && isTythonSelfServeUser()) {\r\n      onInitializeSystemPreferences();\r\n      handledSystemPreference.current = true;\r\n    }\r\n  }, [publisher, userContext]);\r\n\r\n  useEffect(() => {\r\n    initCMUIExperience(constructSupportButton(), locale);\r\n    initCMUIHelpButtonEventListener();\r\n    return () => {\r\n      removeCMUIHelpButtonEventListener();\r\n    };\r\n    // eslint-disable-next-line\r\n  }, [locale]);\r\n\r\n  const constructSupportButton = () => {\r\n    return `\r\n      <div class=\"${css(classNames.supportButtonWrapper)}\">\r\n        <a href=\"${SupportPageRoute}\" target=\"_blank\">\r\n          <button class=\"${css(classNames.supportButton)}\">\r\n            <img src=\"${SupportBotton}\" alt=\"${intl.formatMessage(supportMessages.assistanceDescription)}\" /> ${intl.formatMessage(\r\n      supportMessages.assistanceDescription\r\n    )}\r\n          </button>\r\n        </a>\r\n      </div>\r\n    `;\r\n  };\r\n\r\n  return <></>;\r\n});\r\n","import { nullRender } from '@fluentui/react';\r\nimport { observer } from 'mobx-react';\r\nimport * as React from 'react';\r\nimport { RouteComponentProps } from 'react-router';\r\nimport { getAppStore, onPublisherChanged, onPublisherSelected, Publisher } from '../../@data';\r\nimport { PublisherAccountPicker } from '../../layout/PublisherAccountPicker/PublisherAccountPicker';\r\nimport { onSetPublisherReporting } from './@data/actions';\r\nimport { IReportParams } from './@data/store/schema';\r\nimport { defaultRoute, getPageStore, RouteName } from './@data/store/store';\r\n\r\nexport const ReportHeader = observer(\r\n  class ReportHeaderComponent extends React.Component<RouteComponentProps<IReportParams>> {\r\n    public componentDidMount() {\r\n      const publisherId = this.props.match.params.publisherId;\r\n\r\n      onPublisherSelected(publisherId);\r\n    }\r\n\r\n    public render(): JSX.Element | null {\r\n      const appStore = getAppStore();\r\n      const store = getPageStore();\r\n\r\n      if (store.loading) {\r\n        return nullRender();\r\n      }\r\n\r\n      return (\r\n        <PublisherAccountPicker\r\n          {...this.props}\r\n          onChange={this._onPublisherChanged}\r\n          publisher={appStore.publisher}\r\n          isAccountHidden={true}\r\n          isAccountSelectionDisabled={true}\r\n        />\r\n      );\r\n    }\r\n\r\n    private _onPublisherChanged = (publisher?: Publisher) => {\r\n      const store = getPageStore();\r\n      const currentRoute = RouteName[store.currentRoute || defaultRoute];\r\n\r\n      const publisherId = publisher ? publisher.id : 0;\r\n\r\n      if (publisher && publisherId !== 0) {\r\n        this.props.history.push(`/report/${publisherId}/${currentRoute}`);\r\n        onSetPublisherReporting(publisher);\r\n      } else {\r\n        this.props.history.push(`/report/${currentRoute}`);\r\n      }\r\n      onPublisherChanged(publisher);\r\n    };\r\n  }\r\n);\r\n","import * as React from 'react';\r\nimport { InjectedIntlProps, injectIntl } from 'react-intl';\r\nimport { Redirect, Route, RouteComponentProps } from 'react-router';\r\nimport { Switch } from 'react-router-dom';\r\nimport { IAppState, getAppStore } from '../../@data';\r\nimport AppMessages from '../../App.messages';\r\nimport { IRoute } from '../../Routes.types';\r\nimport { ContentLayout } from '../../layout/ContentLayout/ContentLayout';\r\nimport { IMenuProps } from '../../layout/ContentLayout/ContentLayout.types';\r\nimport { RouteName } from './@data/store/store';\r\nimport { BaseReportPage } from './BaseReportPage';\r\nimport { ReportHeader } from './ReportHeader';\r\n\r\nexport const getRoutes = (formatMessage) => [\r\n  {\r\n    key: RouteName[RouteName.dashboard],\r\n    text: formatMessage(AppMessages.navReports),\r\n    icon: 'CRMReport',\r\n    component: BaseReportPage,\r\n  },\r\n];\r\n\r\nconst DefaultRoute = RouteName[RouteName.dashboard];\r\n\r\nexport const ReportRouter = injectIntl(\r\n  class extends React.Component<RouteComponentProps & InjectedIntlProps> {\r\n    public render(): JSX.Element {\r\n      const store = getAppStore();\r\n      const menuProps: IMenuProps = {\r\n        ...this.props,\r\n        routes: this._generateMenuRoutes(store),\r\n      };\r\n      return (\r\n        <ContentLayout {...this.props} menuProps={menuProps} onRenderHeader={this._renderHeader}>\r\n          <Redirect exact path={this.props.match.url} to={`${this.props.match.url}/${DefaultRoute}`} />\r\n          {getRoutes(this.props.intl.formatMessage).map((route: IRoute, index: number) => (\r\n            <Route\r\n              key={index}\r\n              path={[`${this.props.match.url}/${route.key}`, `${this.props.match.url}/:publisherId/${route.key}`]}\r\n              component={route.component}\r\n            />\r\n          ))}\r\n        </ContentLayout>\r\n      );\r\n    }\r\n\r\n    private _generateMenuRoutes(store: IAppState) {\r\n      let keyFnc: (key: string) => string;\r\n\r\n      if (store.publisher && store.publisher.id) {\r\n        const publisherId = store.publisher.id.toString();\r\n        keyFnc = (key) => {\r\n          return `/${publisherId}/${key}`;\r\n        };\r\n      } else {\r\n        keyFnc = (key) => `/${key}`;\r\n      }\r\n\r\n      // Update the menu routes according to whether the publisher/account were specified.\r\n      return getRoutes(this.props.intl.formatMessage).map(\r\n        (route) =>\r\n          ({\r\n            key: keyFnc(route.key),\r\n            text: route.text,\r\n            icon: route.icon,\r\n          } as IRoute)\r\n      );\r\n    }\r\n\r\n    private _renderHeader = (): JSX.Element => {\r\n      // Support non pub urls as well. When nothing matched, go back to home to do the default route.\r\n      return (\r\n        <React.Fragment>\r\n          <Switch>\r\n            <Route path={`${this.props.match.url}/:publisherId`} render={(props) => <ReportHeader {...props} />} />\r\n            <Route path=\"*\" render={() => <Redirect to={this.props.match.url} />} />\r\n          </Switch>\r\n        </React.Fragment>\r\n      );\r\n    };\r\n  }\r\n);\r\n","import React, { ReactNode, Suspense } from 'react';\r\nimport { PageSpinner } from '../Spinners';\r\n\r\nexport interface ILazyLoadedComponentProps {\r\n  fallback?: JSX.Element;\r\n  lazyComponent: ReactNode;\r\n}\r\n\r\nexport const LazyComponent = ({ fallback, lazyComponent }: ILazyLoadedComponentProps): JSX.Element => {\r\n  if (!fallback) {\r\n    fallback = <PageSpinner />;\r\n  }\r\n\r\n  return <Suspense fallback={fallback}>{lazyComponent}</Suspense>;\r\n};\r\n","import { action, orchestrator } from 'satcheljs';\r\n\r\nimport {\r\n  ApiError,\r\n  ClarityStatus,\r\n  Property,\r\n  getAppStore,\r\n  isTythonSelfServeUser,\r\n  onLoadingChanged,\r\n  patchEntity,\r\n  showErrorToastNotification,\r\n  showSuccessToastNotification,\r\n} from '../../../../../../@data';\r\nimport { UpdateClarityProject } from '../../../../../../@data/store/schema/models/UpdateClarityProject';\r\nimport { setPropertyData } from '../../../Manage/__data__/mutatorActions';\r\nimport { getGridPropertyStore } from '../../../Manage/__data__/store/store';\r\nimport PropertyMessages from '../../../Property.messages';\r\n\r\nexport const onResendClarityLink = action('onResendClarityLink', (propertyId: string, clarityId: string, clarityEnabled?: boolean) => ({\r\n  propertyId,\r\n  clarityId,\r\n  clarityEnabled,\r\n}));\r\n\r\norchestrator(onResendClarityLink, async ({ propertyId, clarityId, clarityEnabled }) => {\r\n  const { publisher, userContext } = getAppStore();\r\n  const { data } = getGridPropertyStore();\r\n\r\n  if (publisher && propertyId && clarityId) {\r\n    try {\r\n      onLoadingChanged(true);\r\n\r\n      const body: UpdateClarityProject = {\r\n        apiPath: undefined,\r\n        className: 'updateClarityProject',\r\n        propertyId: propertyId?.toString(),\r\n      };\r\n\r\n      if (isTythonSelfServeUser()) {\r\n        body.clarityProjectIdForTython = clarityId;\r\n      } else {\r\n        body.clarityProjectId = clarityId;\r\n        body.enableMicrosoftClarity = clarityEnabled;\r\n      }\r\n\r\n      await patchEntity([publisher, new Property()], UpdateClarityProject, body, userContext);\r\n      showSuccessToastNotification({ textMessageDescriptor: PropertyMessages.clarityRelinkSuccess });\r\n\r\n      if (clarityEnabled === undefined && data !== undefined) {\r\n        const updatedProperty = { ...data?.find((property) => property.id === propertyId) };\r\n        updatedProperty.servingConfig!.clarityConfig!.clarityStatus = ClarityStatus.Pending;\r\n\r\n        const updatedProperties: Property[] =\r\n          data?.map((property) => {\r\n            if (property.id === propertyId) {\r\n              return updatedProperty as Property;\r\n            } else {\r\n              return property as Property;\r\n            }\r\n          }) || [];\r\n\r\n        setPropertyData(updatedProperties);\r\n      }\r\n    } catch (e) {\r\n      const apiErrorObj = e as ApiError;\r\n      if (clarityId && apiErrorObj && (apiErrorObj.code === 404 || apiErrorObj.code === 400)) {\r\n        showErrorToastNotification({ text: JSON.parse(apiErrorObj.message)[0].description });\r\n      } else {\r\n        // Add check for link or unlink request\r\n        showErrorToastNotification({\r\n          textMessageDescriptor: PropertyMessages.clarityRelinkFailed,\r\n          intlMessageValues: { projectId: clarityId },\r\n        });\r\n      }\r\n    } finally {\r\n      onLoadingChanged(false);\r\n    }\r\n  } else {\r\n    showErrorToastNotification({ textMessageDescriptor: PropertyMessages.invalidState });\r\n  }\r\n});\r\n","import { createStore } from 'satcheljs';\r\nimport { IAccountStatusData } from './schema';\r\n\r\n// !NOTE: This is to be added explicitly for the orchestrators to register themselves.\r\nimport '../orchestrators';\r\n\r\nexport const getAccountStatusData = createStore<IAccountStatusData>('AccountStatusData', {\r\n  status: undefined,\r\n  isLoading: false,\r\n});\r\n","export const ratioMetrics = [\r\n  'WinRate',\r\n  'eCPM',\r\n  'CTR',\r\n  'Viewability',\r\n  'FillRate',\r\n  'AdECPM',\r\n  'AdCTR',\r\n  'ImpressionsRate',\r\n  'MeasurableImpressionsRate',\r\n];\r\n","import { when } from 'mobx';\r\nimport { orchestrator } from 'satcheljs';\r\nimport { Log } from '../../../logging/src';\r\nimport { onAccountSelected, onPublisherAccountChanged, onPublisherSelected } from '../actions';\r\nimport '../mutators';\r\nimport '../orchestrators';\r\nimport { setUserRoles } from '../services/UserRoleService';\r\nimport { UserContext } from '../store/schema';\r\nimport { getAppStore } from '../store/store';\r\nimport { isTythonSelfServeUser } from '../utils/checkUserType';\r\n\r\norchestrator(onPublisherAccountChanged, async (msg) => {\r\n  const store = getAppStore();\r\n  if (isTythonSelfServeUser() && !store.publisher && msg.publisherId === '0') {\r\n    /** DefaultPublisherId is not set when scope call had been failed/skipped,\r\n     * as Publisher and Accounts are not set, entities on homepage won't load.\r\n     * If scope call succeeds, page will load, else user will be logged out. */\r\n    const userContext = store.userContext || new UserContext();\r\n\r\n    Log.info('Fetching user scope again');\r\n    await setUserRoles(userContext);\r\n    when(\r\n      () => store.defaultPublisher !== 0,\r\n      () => {\r\n        const publisherId = store.defaultPublisher ? store.defaultPublisher.toString() : '0';\r\n        onPublisherSelected(publisherId, msg.routeHistory);\r\n      }\r\n    );\r\n  } else {\r\n    onPublisherSelected(msg.publisherId, msg.routeHistory);\r\n    onAccountSelected(msg.accountId);\r\n  }\r\n});\r\n","import { orchestrator } from 'satcheljs';\r\nimport { onAccountChanged } from '../actions';\r\nimport { StorageAccountKey } from '../store/store';\r\n\r\norchestrator(onAccountChanged, async msg => {\r\n  if (!msg.account) {\r\n    localStorage.removeItem(StorageAccountKey);\r\n  } else {\r\n    localStorage.setItem(StorageAccountKey, JSON.stringify(msg.account));\r\n  }\r\n});","import { orchestrator } from 'satcheljs';\r\nimport { Account, getEntity } from '..';\r\nimport { Log } from '../../../logging/src/Log';\r\nimport { onAccountChanged, onAccountSelected, onLoadingChanged } from '../actions';\r\nimport { getAppStore } from '../store/store';\r\n\r\norchestrator(onAccountSelected, async (msg) => {\r\n  const userContext = getAppStore().userContext;\r\n  const accountId = parseInt(msg.id, 10);\r\n\r\n  if (isNaN(accountId)) {\r\n    return;\r\n  }\r\n\r\n  const store = getAppStore();\r\n\r\n  // Account can only get selected when a publisher is present.\r\n  if (!store.publisher) {\r\n    return;\r\n  }\r\n\r\n  if (store.account && store.account.id === accountId) {\r\n    // The stored account params are the same. No need to reset it.\r\n    return;\r\n  }\r\n\r\n  onLoadingChanged(true);\r\n\r\n  const account = new Account(accountId);\r\n\r\n  try {\r\n    const accountAsync = await getEntity([store.publisher, account], userContext);\r\n    if (accountAsync) {\r\n      onAccountChanged(new Account(accountAsync.id, accountAsync.name));\r\n    } else {\r\n      onAccountChanged(undefined);\r\n    }\r\n  } catch (e) {\r\n    Log.error('TODO: Error Handling for API Requests');\r\n  } finally {\r\n    onLoadingChanged(false);\r\n  }\r\n});\r\n","import { orchestrator } from 'satcheljs';\r\nimport { Log } from '../../../logging/src';\r\nimport { removePaymentNotificationBuffers } from '../../pages/ad-management/Account/Payments/Onboarding/usePaymentsOnboarding';\r\nimport { onAuthLogout } from '../actions';\r\nimport { logoutPubCenterAADUser } from '../services/PubCenterAADAuthService';\r\nimport { getAppStore } from '../store/store';\r\n\r\norchestrator(onAuthLogout, async ({ isTokenExpired }) => {\r\n  const { userContext } = getAppStore();\r\n  Log.info(`Logging out ${userContext?.email}`);\r\n\r\n  removePaymentNotificationBuffers();\r\n\r\n  await logoutPubCenterAADUser(isTokenExpired);\r\n});\r\n","import { uiConfig } from '../../config/ui.config';\r\nimport { DismissNotificationRequest, Notification, UserContext } from '../store/schema';\r\nimport { handleApiErrors, handleError } from '../utils/handleApiErrors';\r\nimport { buildRequestHeadersWithAuthToken } from '../utils/requestUtils';\r\nimport { ApiError } from './ApiService';\r\n\r\nexport async function getBackendNotifications(publisherId, accountId, userContext: UserContext): Promise<Notification[]> {\r\n  const url = `${uiConfig.getApiBaseAddress('1.0')}/notifications/publishers/${publisherId}/accounts/${accountId}/users/${\r\n    userContext!.id\r\n  }/panel`;\r\n  const headers = await buildRequestHeadersWithAuthToken(url, userContext);\r\n\r\n  let response: Response;\r\n\r\n  try {\r\n    response = await fetch(url, {\r\n      method: 'GET',\r\n      headers: headers,\r\n    });\r\n    if (!response.ok) {\r\n      return handleApiErrors<Notification[]>(response, url);\r\n    }\r\n\r\n    const responseJson = await response.json();\r\n    if (responseJson.data) {\r\n      return responseJson.data;\r\n    }\r\n    return Promise.resolve([] as Notification[]);\r\n  } catch (err) {\r\n    const error = `getBackendNotifications operation failed for ${url}. Errors: ${err}`;\r\n    return handleError(new ApiError(500, error), url);\r\n  }\r\n}\r\n\r\nexport async function dismissNotifications(\r\n  publisherId,\r\n  accountId,\r\n  userContext: UserContext,\r\n  body: DismissNotificationRequest\r\n): Promise<string[]> {\r\n  const url = `${uiConfig.getApiBaseAddress('1.0')}/notifications/publishers/${publisherId}/accounts/${accountId}/users/${\r\n    userContext!.id\r\n  }/dismiss`;\r\n  const headers = await buildRequestHeadersWithAuthToken(url, userContext);\r\n\r\n  let response: Response;\r\n\r\n  try {\r\n    response = await fetch(url, {\r\n      method: 'DELETE',\r\n      headers: headers,\r\n      body: JSON.stringify(body),\r\n    });\r\n    if (!response.ok) {\r\n      return handleApiErrors<string[]>(response, url);\r\n    }\r\n\r\n    const responseJson = await response.json();\r\n    if (responseJson.data && responseJson.data.notificationIds) {\r\n      return responseJson.data.notificationIds;\r\n    }\r\n    return Promise.resolve([] as string[]);\r\n  } catch (err) {\r\n    const error = `dismiss backend operation failed for ${url}. Errors: ${err}`;\r\n    return handleError(new ApiError(500, error), url);\r\n  }\r\n}\r\n","import { orchestrator } from 'satcheljs';\r\nimport {\r\n  DismissNotificationRequest,\r\n  NotificationSeverity,\r\n  getAppStore,\r\n  onDismissAllNotifications,\r\n  onNotificationPanelItemsChanged,\r\n} from '..';\r\nimport { Log } from '../../../logging/src';\r\nimport { SESSION_DISMISSED_NOTIFICATIONS_BACKEND, SESSION_NOTIFICATIONS_UI } from '../../constants/AppConstants';\r\nimport { dismissNotifications } from '../services/NotificationService';\r\n\r\norchestrator(onDismissAllNotifications, async () => {\r\n  const store = getAppStore();\r\n\r\n  const panelNotifications = store.panelNotifications || [];\r\n  const dismissedNotifications = sessionStorage.getItem(SESSION_DISMISSED_NOTIFICATIONS_BACKEND);\r\n\r\n  let dismissedBackendNotificationInUI: string[] = [];\r\n  if (dismissedNotifications) {\r\n    dismissedBackendNotificationInUI = JSON.parse(dismissedNotifications);\r\n  }\r\n\r\n  const backendDismissedNotifications: string[] = [];\r\n  panelNotifications.forEach((panelNotification) => {\r\n    if (!panelNotification.isUIGenerated) {\r\n      if (panelNotification.severity === NotificationSeverity.Critical || panelNotification.severity === NotificationSeverity.Warning) {\r\n        // we donot dismiss backend notification but remove in UI\r\n        dismissedBackendNotificationInUI.push(panelNotification.id!);\r\n      } else {\r\n        backendDismissedNotifications.push(panelNotification.id!);\r\n      }\r\n    }\r\n  });\r\n  sessionStorage.setItem(SESSION_DISMISSED_NOTIFICATIONS_BACKEND, JSON.stringify(dismissedBackendNotificationInUI));\r\n\r\n  if (backendDismissedNotifications.length > 0) {\r\n    try {\r\n      const body: DismissNotificationRequest = { notificationIds: backendDismissedNotifications };\r\n      await dismissNotifications(store.publisher?.id!, store.account?.id!, store.userContext!, body);\r\n    } catch (e) {\r\n      Log.error(`Failed to dismiss notifications:  ${JSON.stringify(e)}`);\r\n    }\r\n  }\r\n\r\n  onNotificationPanelItemsChanged([]);\r\n  sessionStorage.setItem(SESSION_NOTIFICATIONS_UI, '');\r\n});\r\n","import { orchestrator } from 'satcheljs';\r\nimport { DismissNotificationRequest, NotificationSeverity, getAppStore, onDismissNotification, onNotificationPanelItemsChanged } from '..';\r\nimport { Log } from '../../../logging/src';\r\nimport { INotificationCardItem } from '../../components/NotificationCard';\r\nimport { SESSION_DISMISSED_NOTIFICATIONS_BACKEND, SESSION_NOTIFICATIONS_UI } from '../../constants/AppConstants';\r\nimport { dismissNotifications } from '../services/NotificationService';\r\n\r\norchestrator(onDismissNotification, async (msg) => {\r\n  const store = getAppStore();\r\n  let panelNotifications = store.panelNotifications || [];\r\n  const selectedNotification = msg.notification;\r\n  const indexOfNotification = panelNotifications.findIndex((notification) =>\r\n    selectedNotification.component\r\n      ? notification.id === selectedNotification.id\r\n      : notification.title === selectedNotification.title && notification.id === selectedNotification.id\r\n  );\r\n  panelNotifications = [...panelNotifications.slice(0, indexOfNotification), ...panelNotifications.slice(indexOfNotification + 1)];\r\n  onNotificationPanelItemsChanged(panelNotifications);\r\n\r\n  if (selectedNotification.isUIGenerated) {\r\n    const existingNotifications = sessionStorage.getItem(SESSION_NOTIFICATIONS_UI);\r\n\r\n    let notifications: INotificationCardItem[] = [];\r\n    if (existingNotifications) {\r\n      notifications = JSON.parse(existingNotifications);\r\n    }\r\n\r\n    const indexOfSSNotification = notifications.findIndex((notification) =>\r\n      selectedNotification.component\r\n        ? notification.id === selectedNotification.id\r\n        : notification.title === selectedNotification.title && notification.id === selectedNotification.id\r\n    );\r\n    notifications = [...notifications.slice(0, indexOfSSNotification), ...notifications.slice(indexOfSSNotification + 1)];\r\n\r\n    // Store the updated list back to sessionStorage\r\n    const updatedData = JSON.stringify(notifications);\r\n    sessionStorage.setItem(SESSION_NOTIFICATIONS_UI, updatedData);\r\n  } else {\r\n    // dismiss notification in backend if not critical or warning, or else just in UI\r\n    if (selectedNotification.severity === NotificationSeverity.Critical || selectedNotification.severity === NotificationSeverity.Warning) {\r\n      const dismissedNotifications = sessionStorage.getItem(SESSION_DISMISSED_NOTIFICATIONS_BACKEND);\r\n\r\n      let dismissedBackendNotificationInUI: string[] = [];\r\n      if (dismissedNotifications) {\r\n        dismissedBackendNotificationInUI = JSON.parse(dismissedNotifications);\r\n      }\r\n      // we donot dismiss backend notification but remove in UI\r\n      dismissedBackendNotificationInUI.push(selectedNotification.id!);\r\n      sessionStorage.setItem(SESSION_DISMISSED_NOTIFICATIONS_BACKEND, JSON.stringify(dismissedBackendNotificationInUI));\r\n    } else {\r\n      try {\r\n        const body: DismissNotificationRequest = { notificationIds: [selectedNotification.id!] };\r\n        await dismissNotifications(store.publisher?.id!, store.account?.id!, store.userContext!, body);\r\n      } catch (e) {\r\n        Log.error(`Failed to dismiss notifications: ${JSON.stringify(e)}`);\r\n      }\r\n    }\r\n  }\r\n});\r\n","import { orchestrator } from 'satcheljs';\r\nimport { NotificationLabel, fetchBackendNotifications, getAppStore, mappingReasonsToLabels, onNotificationPanelItemsChanged } from '..';\r\nimport { Log } from '../../../logging/src';\r\nimport { INotificationCardItem } from '../../components/NotificationCard';\r\nimport { SESSION_DISMISSED_NOTIFICATIONS_BACKEND, SESSION_NOTIFICATIONS_UI } from '../../constants/AppConstants';\r\nimport { getBackendNotifications } from '../services/NotificationService';\r\nimport messages from './../../NotificationsPanel.Types.messages';\r\n\r\norchestrator(fetchBackendNotifications, async ({ intl }) => {\r\n  const userContext = getAppStore().userContext;\r\n  const publisher = getAppStore().publisher;\r\n  const account = getAppStore().account;\r\n  const dismissedNotifications = sessionStorage.getItem(SESSION_DISMISSED_NOTIFICATIONS_BACKEND);\r\n\r\n  let dismissedBackendNotificationInUI: string[] = [];\r\n  if (dismissedNotifications) {\r\n    dismissedBackendNotificationInUI = JSON.parse(dismissedNotifications);\r\n  }\r\n  const { formatMessage } = intl;\r\n  try {\r\n    let notifications = await getBackendNotifications(publisher?.id!, account?.id!, userContext!);\r\n\r\n    const existingNotifications = sessionStorage.getItem(SESSION_NOTIFICATIONS_UI);\r\n\r\n    let existingNotificationsCollection: INotificationCardItem[] = [];\r\n    if (existingNotifications) {\r\n      existingNotificationsCollection = JSON.parse(existingNotifications);\r\n    }\r\n    if (dismissedBackendNotificationInUI && dismissedBackendNotificationInUI.length > 0) {\r\n      notifications = notifications.filter((item) => !dismissedBackendNotificationInUI.includes(item.notificationId));\r\n    }\r\n    notifications.forEach((notification) => {\r\n      const intlNotificationTitle = notification.notificationLabel + 'Title';\r\n      const intlNotificationContent = notification.notificationLabel + 'Content';\r\n      const notificationItem: INotificationCardItem = {\r\n        id: notification.notificationId,\r\n        title: messages[intlNotificationTitle] ? formatMessage(messages[intlNotificationTitle]) : notification.notificationTitle,\r\n        content: messages[intlNotificationContent] ? formatMessage(messages[intlNotificationContent]) : notification.notificationContent,\r\n        severity: notification.severity,\r\n        timestamp: notification.lastModifiedDTime,\r\n        notificationLabel: notification.notificationLabel,\r\n        isUIGenerated: false,\r\n      };\r\n      if (notification.notificationLabel === NotificationLabel.PolicyUpdate) {\r\n        const intlNotificationPrimaryActionLabel = notification.notificationLabel + 'PrimaryActionLabel';\r\n        notificationItem.primaryActionText = messages[intlNotificationPrimaryActionLabel]\r\n          ? formatMessage(messages[intlNotificationPrimaryActionLabel])\r\n          : notification.notificationLabel;\r\n      }\r\n      if (notification.notificationLabel === NotificationLabel.PaymentFailed) {\r\n        // get the property bag a dictionary of <string, string>\r\n        const propertyBag = notification.propertyBag;\r\n        const errorCode = propertyBag['errorCode'];\r\n        const errorReason = propertyBag['errorReason'];\r\n\r\n        // get the localized error message\\reason\\content\r\n        // replace all the spaces in errorcode with empty string\r\n        const errorCodeStr = errorCode.toString().replace(/\\s/g, '');\r\n        const intlNotificationErrorReason = notification.notificationLabel + 'Reason_' + errorCodeStr;\r\n        const intlNotificationErrorReasonTitle = notification.notificationLabel + 'Title_' + errorCodeStr;\r\n        if (messages[intlNotificationErrorReasonTitle]) {\r\n          notificationItem.title = formatMessage(messages[intlNotificationErrorReasonTitle]);\r\n        }\r\n        notificationItem.content = messages[intlNotificationErrorReason]\r\n          ? formatMessage(messages[intlNotificationErrorReason])\r\n          : errorReason;\r\n\r\n        notificationItem.notificationLabel = mappingReasonsToLabels[intlNotificationErrorReason]\r\n          ? mappingReasonsToLabels[intlNotificationErrorReason]\r\n          : notificationItem.notificationLabel;\r\n\r\n        // could_not_process could be for 2 reasons, Stripe or bank\r\n        if (errorCodeStr === 'could_not_process' && errorReason.toString().contains('Stripe')) {\r\n          const reason = notification.notificationLabel + 'ReasonStripe_' + errorCodeStr;\r\n          if (messages[reason]) {\r\n            notificationItem.content = messages[reason];\r\n            notificationItem.notificationLabel = mappingReasonsToLabels[reason];\r\n          }\r\n        }\r\n\r\n        // no_account could be for 2 reasons, not located or invalid\r\n        if (errorCodeStr === 'no_account' && errorReason.toString().contains('located')) {\r\n          const reason = notification.notificationLabel + 'ReasonLocate_' + errorCodeStr;\r\n          if (messages[reason]) {\r\n            notificationItem.content = messages[reason];\r\n            notificationItem.notificationLabel = mappingReasonsToLabels[reason];\r\n          }\r\n        }\r\n      }\r\n\r\n      if (notification.notificationActions && notification.notificationActions.length > 0) {\r\n        const primaryAction = notification.notificationActions[0];\r\n        const intlNotificationPrimaryActionLabel = notification.notificationLabel + 'PrimaryActionLabel';\r\n        notificationItem.primaryActionText = messages[intlNotificationPrimaryActionLabel]\r\n          ? formatMessage(messages[intlNotificationPrimaryActionLabel])\r\n          : primaryAction.text;\r\n        notificationItem.primaryActionLink = primaryAction.url;\r\n        if (notification.notificationActions.length > 1) {\r\n          const secondaryAction = notification.notificationActions[1];\r\n          const intlNotificationSecondaryActionLabel = notification.notificationLabel + 'SecondaryActionLabel';\r\n          notificationItem.secondaryActionText = messages[intlNotificationSecondaryActionLabel]\r\n            ? formatMessage(messages[intlNotificationSecondaryActionLabel])\r\n            : secondaryAction.text;\r\n          notificationItem.secondaryActionLink = secondaryAction.url;\r\n        }\r\n      }\r\n      if (\r\n        notification.notificationLabel === NotificationLabel.ClarityLinkDeclined ||\r\n        notification.notificationLabel === NotificationLabel.ClarityLinkExpired\r\n      ) {\r\n        // get the property bag a dictionary of <object, object>\r\n        if (notification.propertyBag) {\r\n          const propertyBag = notification.propertyBag;\r\n          const clarityId = propertyBag['clarityId'];\r\n          const propertyName = propertyBag['propertyName'];\r\n\r\n          notificationItem.title = messages[intlNotificationTitle]\r\n            ? formatMessage(messages[intlNotificationTitle], { projectId: clarityId })\r\n            : notification.notificationTitle;\r\n          notificationItem.intlTitleMessageValues = { projectId: clarityId };\r\n\r\n          notificationItem.content = messages[intlNotificationContent]\r\n            ? formatMessage(messages[intlNotificationContent], { projectId: clarityId, propertyName: propertyName })\r\n            : notification.notificationTitle;\r\n          notificationItem.intlContentMessageValues = { projectId: clarityId, propertyName: propertyName };\r\n\r\n          notificationItem.propertyBag = propertyBag;\r\n        }\r\n      }\r\n      existingNotificationsCollection.push(notificationItem);\r\n    });\r\n\r\n    onNotificationPanelItemsChanged(existingNotificationsCollection);\r\n  } catch (error) {\r\n    Log.error(JSON.stringify(error));\r\n  }\r\n});\r\n","import { orchestrator } from 'satcheljs';\r\nimport { Log } from '../../../logging/src';\r\nimport { DOMAIN_REDIRECTION_QUERY_PARAM, PUBCENTER_TYTHON_DOMAIN_MAPPING, TYTHON_DOMAIN_REDIRECTION_CACHE_KEY } from '../../constants';\r\nimport { onDoNotRenderDefaultPageChanged } from '../../pages/ad-management/@data/actions';\r\nimport { handleDomainRedirection } from '../actions';\r\n\r\norchestrator(handleDomainRedirection, ({ username, pathname }) => {\r\n  onDoNotRenderDefaultPageChanged(true);\r\n  Log.write('Initiating domain redirection for loginHint ' + username);\r\n\r\n  sessionStorage.setItem(TYTHON_DOMAIN_REDIRECTION_CACHE_KEY, 'true');\r\n\r\n  const newDomainOrigin = PUBCENTER_TYTHON_DOMAIN_MAPPING[window.location.host];\r\n  let redirectUrl = `${newDomainOrigin}/login?${DOMAIN_REDIRECTION_QUERY_PARAM}=${username}`;\r\n  if (pathname) {\r\n    pathname = pathname.replace(/\\//, '');\r\n    redirectUrl = `${newDomainOrigin}/${pathname}`;\r\n  }\r\n  Log.write('Redirecting to new domain: ' + redirectUrl);\r\n\r\n  const iframe = document.getElementById('redirectionIframe') as HTMLIFrameElement;\r\n  if (iframe && iframe.contentWindow) {\r\n    iframe.contentWindow?.postMessage(JSON.stringify(localStorage), newDomainOrigin);\r\n  }\r\n\r\n  setTimeout(() => {\r\n    window.location.href = redirectUrl;\r\n  }, 4000);\r\n});\r\n","import { orchestrator } from 'satcheljs';\r\nimport { onHelpInfoCalloutOpened, onHelpInfoChanged } from '../actions';\r\nimport { getHelpInfo } from '../services/HelpService';\r\n\r\nimport '../mutators/helpInfoChanged';\r\n\r\norchestrator(onHelpInfoCalloutOpened, async (msg) => {\r\n  onHelpInfoChanged();\r\n  const helpHtml = await getHelpInfo(msg.popupId, msg.locale);\r\n  onHelpInfoChanged(helpHtml);\r\n});\r\n","import { ApiError, handleApiErrors, handleError } from '..';\r\nimport { EN_LOCALE_KEY } from '../../constants';\r\n\r\nexport async function getHelpInfo(id: string, locale?: string): Promise<string> {\r\n  const helpUrl =\r\n    process.env.REACT_APP_ENV === 'production'\r\n      ? `https://help.pubcenter.microsoft.com/api/apexapi/?project=pubcenter_v4&language=${\r\n          locale ?? EN_LOCALE_KEY\r\n        }&method=popup&asRow=popup&Query=`\r\n      : `https://help.si.pubcenter.microsoft.com/api/apexapi/?project=pubcenter_v4&language=${\r\n          locale ?? EN_LOCALE_KEY\r\n        }&method=popup&asRow=popup&Query=`;\r\n\r\n  const url = helpUrl + encodeURIComponent(id) + '.htm';\r\n  try {\r\n    const response = await fetch(url);\r\n\r\n    if (!response.ok) {\r\n      return handleApiErrors(response, url);\r\n    }\r\n\r\n    const responseJson = await response.json();\r\n    const htmlStr =\r\n      process.env.REACT_APP_ENV === 'production'\r\n        ? '<link rel=\"stylesheet\" type=\"text/css\" href=\"http://help.pubcenter.microsoft.com/resources/popup/styles/PopupStyles.min.css?v=2.00023\"/> '\r\n        : '<link rel=\"stylesheet\" type=\"text/css\" href=\"http://help.si.pubcenter.microsoft.com/resources/popup/styles/PopupStyles.min.css?v=2.00023\"/> ';\r\n\r\n    const helpContent = responseJson?.Content?.Content ?? `Couldn't load help content!!`;\r\n    return htmlStr + helpContent;\r\n  } catch (err) {\r\n    const error = `helpInfo callout operation failed for ${url}. Errors: ${err}`;\r\n    return handleError(new ApiError(500, error), url);\r\n  }\r\n}\r\n","import { orchestrator } from 'satcheljs';\r\nimport { onNavigateBack } from '../actions';\r\n\r\norchestrator(onNavigateBack, msg => {\r\n  if (msg.routeHistory && msg.returnUrl) {\r\n    msg.routeHistory.push(msg.returnUrl);\r\n  } else {\r\n    window.history.back();\r\n  }\r\n});\r\n","import { orchestrator } from 'satcheljs';\r\nimport { NOTIFICATION_DISMISS_TIMEOUT } from '../../constants/AppConstants';\r\nimport { onNotificationChanged, onNotificationRemoved } from '../actions';\r\n\r\norchestrator(onNotificationChanged, async (msg) => {\r\n  if (!msg.notification.suppressAutoDismiss) {\r\n    setTimeout(() => onNotificationRemoved(msg.notification), NOTIFICATION_DISMISS_TIMEOUT);\r\n  }\r\n});\r\n","import { orchestrator } from 'satcheljs';\r\nimport { setAdUnitsData } from '../../pages/ad-management/Adunit/@data/mutatorActions';\r\nimport { setPropertyData } from '../../pages/ad-management/Property/Manage/__data__/mutatorActions';\r\nimport { onPublisherChanged } from '../actions';\r\nimport { Publisher } from '../store/schema';\r\nimport { StoragePublisherKey } from '../store/store';\r\n\r\norchestrator(onPublisherChanged, async (msg) => {\r\n  // Clear ad units and properties cached data when publisher changes\r\n  setAdUnitsData();\r\n  setPropertyData();\r\n\r\n  let publisher = msg.publisher;\r\n\r\n  if (!publisher) {\r\n    localStorage.removeItem(StoragePublisherKey);\r\n  } else {\r\n    // Create a new instance just with name and id, to avoid exposing sensitive publisher information through cache\r\n    publisher = new Publisher(publisher.id, publisher.name);\r\n    publisher.publisherTier = msg.publisher?.publisherTier;\r\n    publisher.enableDefaultTythonV2Reporting = msg.publisher?.enableDefaultTythonV2Reporting;\r\n    localStorage.setItem(StoragePublisherKey, JSON.stringify(publisher));\r\n  }\r\n});\r\n","import { orchestrator } from 'satcheljs';\r\nimport { Account, getEntity, isInternalUser, isTythonSelfServeUser, onAccountChanged, onUserContextChanged, PublisherTier } from '..';\r\nimport { Log } from '../../../logging/src/Log';\r\nimport { RouteName } from '../../pages/ad-management/@data';\r\nimport { onDoNotRenderDefaultPageChanged } from '../../pages/ad-management/@data/actions';\r\nimport { RoutePrefix } from '../../Routes';\r\nimport { isLocationPubCenter } from '../../utils/UrlUtils';\r\nimport {\r\n  handleDomainRedirection,\r\n  onLoadingChanged,\r\n  onPublisherChanged,\r\n  onPublisherSelected,\r\n  redirectToReportingDashboard,\r\n} from '../actions';\r\nimport { setUserRolesInCache } from '../services/UserRoleService';\r\nimport { Publisher } from '../store/schema';\r\nimport { UserType } from '../store/schema/enums/UserType';\r\nimport { getAppStore } from '../store/store';\r\n\r\norchestrator(onPublisherSelected, async (msg) => {\r\n  const { userContext, defaultPublisher } = getAppStore();\r\n  const publisherId = parseInt(msg.id, 10);\r\n\r\n  const isInternalUserLogin = isInternalUser();\r\n\r\n  Log.debug(`Setting publisher context in store for Publisher: ${publisherId}`);\r\n\r\n  if (!userContext || isNaN(publisherId)) {\r\n    return;\r\n  }\r\n\r\n  let { publisher } = getAppStore();\r\n\r\n  if (isInternalUserLogin && publisher && publisher.id === publisherId) {\r\n    console.log('OnPublisherSelected - internal user, publisher context correctly set');\r\n    return;\r\n  }\r\n\r\n  if (publisher && publisher.id === publisherId && publisher.publisherTier) {\r\n    // If publisherTier not equal to SelfServe3rdParty, redirect to reporting dashboard\r\n    if (publisher.publisherTier !== PublisherTier.SelfServe3rdParty) {\r\n      console.log('OnPublisherSelected - Non-tython user, redirecting to reporting dashboard');\r\n      redirectToReportingDashboard();\r\n      return;\r\n    }\r\n\r\n    // If it's tython publisher and if userContext is correctly set, no need to reset it.\r\n    if (publisher.publisherTier === PublisherTier.SelfServe3rdParty && isTythonSelfServeUser()) {\r\n      Log.write('OnPublisherSelected - Tython user, publisher and user context correctly set');\r\n\r\n      if (isLocationPubCenter()) {\r\n        console.log('OnPublisherSelected - Tython user, redirecting to new domain');\r\n        handleDomainRedirection(userContext?.userName ?? userContext.email);\r\n      }\r\n      return;\r\n    }\r\n  }\r\n\r\n  onLoadingChanged(true);\r\n  onDoNotRenderDefaultPageChanged(true);\r\n\r\n  publisher = new Publisher(publisherId);\r\n\r\n  try {\r\n    publisher = (await getEntity([publisher], userContext)) as Publisher;\r\n    publisher.className = new Publisher().className;\r\n\r\n    if (publisher) {\r\n      onPublisherChanged(publisher);\r\n\r\n      /* To provide different user experience for Tython/self-serve publishers, leveraging the PublisherTier value.\r\n      TODO post MVP:  Remove this dependency on PublisherTier and set the userType flag based on user role\r\n      defaultPublisher value is defined for external users who are mostly scoped to perform operations under a publisher shell */\r\n      if (defaultPublisher && publisher.id === defaultPublisher && publisher.publisherTier === PublisherTier.SelfServe3rdParty) {\r\n        if (isLocationPubCenter()) {\r\n          handleDomainRedirection(userContext?.userName ?? userContext.email);\r\n        }\r\n        Log.write(\r\n          `Recognised Tython self serve user. Updating userType to ${UserType.TythonSelfServe} and setting userRoles in cache, if not already set`\r\n        );\r\n        onUserContextChanged({ ...userContext, userType: UserType.TythonSelfServe });\r\n\r\n        // Tython user is not recognised before this hence tython specific user role permissions are not set\r\n        setUserRolesInCache(userContext.userRoles || [41]);\r\n\r\n        if (publisher.defaultAccountId !== undefined) {\r\n          const account = new Account(publisher.defaultAccountId);\r\n          Log.write(`Setting the account to default account: ${publisher.defaultAccountId} `);\r\n          onAccountChanged(account);\r\n        }\r\n\r\n        if (msg.routeHistory) {\r\n          const homePageUrl = `/${RoutePrefix.adManagement}/${publisherId}/${RouteName.home}`;\r\n          Log.write('Redirecting self-serve user to homepage');\r\n          msg.routeHistory.push(homePageUrl);\r\n        }\r\n      } else if (defaultPublisher && publisher.id === defaultPublisher) {\r\n        redirectToReportingDashboard();\r\n      }\r\n    } else {\r\n      onPublisherChanged(undefined);\r\n    }\r\n  } catch (e) {\r\n    Log.error('TODO: Error Handling for API Requests');\r\n  } finally {\r\n    onLoadingChanged(false);\r\n    onDoNotRenderDefaultPageChanged(false);\r\n  }\r\n});\r\n","import { orchestrator } from 'satcheljs';\r\nimport { Log } from '../../../logging/src';\r\nimport { uiConfig } from '../../config/ui.config';\r\nimport { onDoNotRenderDefaultPageChanged } from '../../pages/ad-management/@data/actions';\r\nimport { setUserPublisherContext } from '../../pages/report/@data/services/ReportService';\r\nimport { onAuthLogout, redirectToReportingDashboard } from '../actions';\r\nimport { getAppStore } from '../store/store';\r\nimport { isTythonSelfServeUser } from '../utils';\r\n\r\norchestrator(redirectToReportingDashboard, async () => {\r\n  const { publisher, userContext, defaultPublisher } = getAppStore();\r\n\r\n  if (userContext && publisher && publisher.id && publisher.id === defaultPublisher && !isTythonSelfServeUser()) {\r\n    onDoNotRenderDefaultPageChanged(true);\r\n    try {\r\n      const commonSessionId = await setUserPublisherContext(userContext, publisher.id);\r\n      window.location.replace(uiConfig.getReportingDashboardAddress(commonSessionId));\r\n    } catch (e) {\r\n      Log.write(`Recognized non-Tython MSA user, but failed to redirect to reporting dashboard.`);\r\n      onAuthLogout();\r\n    }\r\n  }\r\n});\r\n","import { MessageBarType } from '@fluentui/react';\r\nimport { orchestrator } from 'satcheljs';\r\nimport messages from '../../App.messages';\r\nimport { onNotificationChanged } from '../actions';\r\nimport { showTokenExpirationNotification } from '../actions/onTokenExpirationActions';\r\n\r\nconst EXPIRED_NOTIFICATION_SHOWN_STATE_KEY = 'isExpiredNotificationShown';\r\n\r\norchestrator(showTokenExpirationNotification, async () => {\r\n  if ((window.history.state || {})[EXPIRED_NOTIFICATION_SHOWN_STATE_KEY]) {\r\n    return;\r\n  }\r\n\r\n  onNotificationChanged({\r\n    textMessageDescriptor: messages.sessionExpiredLoginAgain,\r\n    messageBarType: MessageBarType.info,\r\n  });\r\n  window.history.pushState({ [EXPIRED_NOTIFICATION_SHOWN_STATE_KEY]: true }, '');\r\n  return;\r\n});\r\n","import { orchestrator } from 'satcheljs';\r\nimport { onUserContextChanged } from '../actions';\r\nimport { getAppStore, StorageUserContextKey } from '../store/store';\r\n\r\norchestrator(onUserContextChanged, async (msg) => {\r\n  const store = getAppStore();\r\n  if (!store.userContext) {\r\n    localStorage.clear();\r\n  } else {\r\n    localStorage.setItem(StorageUserContextKey, JSON.stringify(msg.userDetails));\r\n  }\r\n});","export enum UserInvitationType {\r\n  Default = 'Default',\r\n  PubCenterSelfServeUser = 'PubCenterSelfServeUser'\r\n}\r\n","export enum UserType {\r\n  // This flag can be used to provide different user experience for different user types\r\n  TythonSelfServe = 1,\r\n}\r\n","/* eslint no-useless-escape: 0 */\r\nexport const DEFAULT_NON_TYTHON_TNC = `<html xmlns:v=\"urn:schemas-microsoft-com:vml\"\r\nxmlns:o=\"urn:schemas-microsoft-com:office:office\"\r\nxmlns:w=\"urn:schemas-microsoft-com:office:word\"\r\nxmlns:m=\"http://schemas.microsoft.com/office/2004/12/omml\"\r\nxmlns=\"http://www.w3.org/TR/REC-html40\">\r\n\r\n<head>\r\n<meta http-equiv=Content-Type content=\"text/html; charset=utf-8\">\r\n<meta name=ProgId content=Word.Document>\r\n<meta name=Generator content=\"Microsoft Word 15\">\r\n<meta name=Originator content=\"Microsoft Word 15\">\r\n<link rel=File-List href=\"33333.fld/filelist.xml\">\r\n<link rel=Edit-Time-Data href=\"33333.fld/editdata.mso\">\r\n<!--[if !mso]>\r\n<style>\r\nv\\:* {behavior:url(#default#VML);}\r\no\\:* {behavior:url(#default#VML);}\r\nw\\:* {behavior:url(#default#VML);}\r\n.shape {behavior:url(#default#VML);}\r\n</style>\r\n<![endif]--><!--[if gte mso 9]><xml>\r\n <o:DocumentProperties>\r\n  <o:Author>Aolin Yang</o:Author>\r\n  <o:LastAuthor>Aolin Yang</o:LastAuthor>\r\n  <o:Revision>3</o:Revision>\r\n  <o:TotalTime>10</o:TotalTime>\r\n  <o:Created>2023-04-21T22:54:00Z</o:Created>\r\n  <o:LastSaved>2023-04-21T22:56:00Z</o:LastSaved>\r\n  <o:Pages>1</o:Pages>\r\n  <o:Words>8216</o:Words>\r\n  <o:Characters>46834</o:Characters>\r\n  <o:Lines>390</o:Lines>\r\n  <o:Paragraphs>109</o:Paragraphs>\r\n  <o:CharactersWithSpaces>54941</o:CharactersWithSpaces>\r\n  <o:Version>16.00</o:Version>\r\n </o:DocumentProperties>\r\n <o:OfficeDocumentSettings>\r\n  <o:AllowPNG/>\r\n </o:OfficeDocumentSettings>\r\n</xml><![endif]-->\r\n<link rel=themeData href=\"33333.fld/themedata.thmx\">\r\n<link rel=colorSchemeMapping href=\"33333.fld/colorschememapping.xml\">\r\n<!--[if gte mso 9]><xml>\r\n <w:WordDocument>\r\n  <w:Zoom>150</w:Zoom>\r\n  <w:SpellingState>Clean</w:SpellingState>\r\n  <w:GrammarState>Clean</w:GrammarState>\r\n  <w:TrackMoves>false</w:TrackMoves>\r\n  <w:TrackFormatting/>\r\n  <w:PunctuationKerning/>\r\n  <w:ValidateAgainstSchemas/>\r\n  <w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid>\r\n  <w:IgnoreMixedContent>false</w:IgnoreMixedContent>\r\n  <w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText>\r\n  <w:DoNotPromoteQF/>\r\n  <w:LidThemeOther>EN-US</w:LidThemeOther>\r\n  <w:LidThemeAsian>ZH-CN</w:LidThemeAsian>\r\n  <w:LidThemeComplexScript>X-NONE</w:LidThemeComplexScript>\r\n  <w:Compatibility>\r\n   <w:BreakWrappedTables/>\r\n   <w:SnapToGridInCell/>\r\n   <w:WrapTextWithPunct/>\r\n   <w:UseAsianBreakRules/>\r\n   <w:DontGrowAutofit/>\r\n   <w:SplitPgBreakAndParaMark/>\r\n   <w:EnableOpenTypeKerning/>\r\n   <w:DontFlipMirrorIndents/>\r\n   <w:OverrideTableStyleHps/>\r\n   <w:UseFELayout/>\r\n  </w:Compatibility>\r\n  <m:mathPr>\r\n   <m:mathFont m:val=\"Cambria Math\"/>\r\n   <m:brkBin m:val=\"before\"/>\r\n   <m:brkBinSub m:val=\"&#45;-\"/>\r\n   <m:smallFrac m:val=\"off\"/>\r\n   <m:dispDef/>\r\n   <m:lMargin m:val=\"0\"/>\r\n   <m:rMargin m:val=\"0\"/>\r\n   <m:defJc m:val=\"centerGroup\"/>\r\n   <m:wrapIndent m:val=\"1440\"/>\r\n   <m:intLim m:val=\"subSup\"/>\r\n   <m:naryLim m:val=\"undOvr\"/>\r\n  </m:mathPr></w:WordDocument>\r\n</xml><![endif]--><!--[if gte mso 9]><xml>\r\n <w:LatentStyles DefLockedState=\"false\" DefUnhideWhenUsed=\"false\"\r\n  DefSemiHidden=\"false\" DefQFormat=\"false\" DefPriority=\"99\"\r\n  LatentStyleCount=\"376\">\r\n  <w:LsdException Locked=\"false\" Priority=\"0\" QFormat=\"true\" Name=\"Normal\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"0\" QFormat=\"true\" Name=\"heading 1\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"0\" SemiHidden=\"true\"\r\n   UnhideWhenUsed=\"true\" QFormat=\"true\" Name=\"heading 2\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"0\" SemiHidden=\"true\"\r\n   UnhideWhenUsed=\"true\" QFormat=\"true\" Name=\"heading 3\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"0\" SemiHidden=\"true\"\r\n   UnhideWhenUsed=\"true\" QFormat=\"true\" Name=\"heading 4\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"0\" SemiHidden=\"true\"\r\n   UnhideWhenUsed=\"true\" QFormat=\"true\" Name=\"heading 5\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"0\" SemiHidden=\"true\"\r\n   UnhideWhenUsed=\"true\" QFormat=\"true\" Name=\"heading 6\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"0\" SemiHidden=\"true\"\r\n   UnhideWhenUsed=\"true\" QFormat=\"true\" Name=\"heading 7\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"0\" SemiHidden=\"true\"\r\n   UnhideWhenUsed=\"true\" QFormat=\"true\" Name=\"heading 8\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"0\" SemiHidden=\"true\"\r\n   UnhideWhenUsed=\"true\" QFormat=\"true\" Name=\"heading 9\"/>\r\n  <w:LsdException Locked=\"false\" SemiHidden=\"true\" UnhideWhenUsed=\"true\"\r\n   Name=\"index 1\"/>\r\n  <w:LsdException Locked=\"false\" SemiHidden=\"true\" UnhideWhenUsed=\"true\"\r\n   Name=\"index 2\"/>\r\n  <w:LsdException Locked=\"false\" SemiHidden=\"true\" UnhideWhenUsed=\"true\"\r\n   Name=\"index 3\"/>\r\n  <w:LsdException Locked=\"false\" SemiHidden=\"true\" UnhideWhenUsed=\"true\"\r\n   Name=\"index 4\"/>\r\n  <w:LsdException Locked=\"false\" SemiHidden=\"true\" UnhideWhenUsed=\"true\"\r\n   Name=\"index 5\"/>\r\n  <w:LsdException Locked=\"false\" SemiHidden=\"true\" UnhideWhenUsed=\"true\"\r\n   Name=\"index 6\"/>\r\n  <w:LsdException Locked=\"false\" SemiHidden=\"true\" UnhideWhenUsed=\"true\"\r\n   Name=\"index 7\"/>\r\n  <w:LsdException Locked=\"false\" SemiHidden=\"true\" UnhideWhenUsed=\"true\"\r\n   Name=\"index 8\"/>\r\n  <w:LsdException Locked=\"false\" SemiHidden=\"true\" UnhideWhenUsed=\"true\"\r\n   Name=\"index 9\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"39\" SemiHidden=\"true\"\r\n   UnhideWhenUsed=\"true\" Name=\"toc 1\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"39\" SemiHidden=\"true\"\r\n   UnhideWhenUsed=\"true\" Name=\"toc 2\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"39\" SemiHidden=\"true\"\r\n   UnhideWhenUsed=\"true\" Name=\"toc 3\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"39\" SemiHidden=\"true\"\r\n   UnhideWhenUsed=\"true\" Name=\"toc 4\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"39\" SemiHidden=\"true\"\r\n   UnhideWhenUsed=\"true\" Name=\"toc 5\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"39\" SemiHidden=\"true\"\r\n   UnhideWhenUsed=\"true\" Name=\"toc 6\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"39\" SemiHidden=\"true\"\r\n   UnhideWhenUsed=\"true\" Name=\"toc 7\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"39\" SemiHidden=\"true\"\r\n   UnhideWhenUsed=\"true\" Name=\"toc 8\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"39\" SemiHidden=\"true\"\r\n   UnhideWhenUsed=\"true\" Name=\"toc 9\"/>\r\n  <w:LsdException Locked=\"false\" SemiHidden=\"true\" UnhideWhenUsed=\"true\"\r\n   Name=\"Normal Indent\"/>\r\n  <w:LsdException Locked=\"false\" SemiHidden=\"true\" UnhideWhenUsed=\"true\"\r\n   Name=\"footnote text\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"0\" SemiHidden=\"true\"\r\n   UnhideWhenUsed=\"true\" Name=\"annotation text\"/>\r\n  <w:LsdException Locked=\"false\" SemiHidden=\"true\" UnhideWhenUsed=\"true\"\r\n   Name=\"header\"/>\r\n  <w:LsdException Locked=\"false\" SemiHidden=\"true\" UnhideWhenUsed=\"true\"\r\n   Name=\"footer\"/>\r\n  <w:LsdException Locked=\"false\" SemiHidden=\"true\" UnhideWhenUsed=\"true\"\r\n   Name=\"index heading\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"35\" SemiHidden=\"true\"\r\n   UnhideWhenUsed=\"true\" QFormat=\"true\" Name=\"caption\"/>\r\n  <w:LsdException Locked=\"false\" SemiHidden=\"true\" UnhideWhenUsed=\"true\"\r\n   Name=\"table of figures\"/>\r\n  <w:LsdException Locked=\"false\" SemiHidden=\"true\" UnhideWhenUsed=\"true\"\r\n   Name=\"envelope address\"/>\r\n  <w:LsdException Locked=\"false\" SemiHidden=\"true\" UnhideWhenUsed=\"true\"\r\n   Name=\"envelope return\"/>\r\n  <w:LsdException Locked=\"false\" SemiHidden=\"true\" UnhideWhenUsed=\"true\"\r\n   Name=\"footnote reference\"/>\r\n  <w:LsdException Locked=\"false\" SemiHidden=\"true\" UnhideWhenUsed=\"true\"\r\n   Name=\"annotation reference\"/>\r\n  <w:LsdException Locked=\"false\" SemiHidden=\"true\" UnhideWhenUsed=\"true\"\r\n   Name=\"line number\"/>\r\n  <w:LsdException Locked=\"false\" SemiHidden=\"true\" UnhideWhenUsed=\"true\"\r\n   Name=\"page number\"/>\r\n  <w:LsdException Locked=\"false\" SemiHidden=\"true\" UnhideWhenUsed=\"true\"\r\n   Name=\"endnote reference\"/>\r\n  <w:LsdException Locked=\"false\" SemiHidden=\"true\" UnhideWhenUsed=\"true\"\r\n   Name=\"endnote text\"/>\r\n  <w:LsdException Locked=\"false\" SemiHidden=\"true\" UnhideWhenUsed=\"true\"\r\n   Name=\"table of authorities\"/>\r\n  <w:LsdException Locked=\"false\" SemiHidden=\"true\" UnhideWhenUsed=\"true\"\r\n   Name=\"macro\"/>\r\n  <w:LsdException Locked=\"false\" SemiHidden=\"true\" UnhideWhenUsed=\"true\"\r\n   Name=\"toa heading\"/>\r\n  <w:LsdException Locked=\"false\" SemiHidden=\"true\" UnhideWhenUsed=\"true\"\r\n   Name=\"List\"/>\r\n  <w:LsdException Locked=\"false\" SemiHidden=\"true\" UnhideWhenUsed=\"true\"\r\n   Name=\"List Bullet\"/>\r\n  <w:LsdException Locked=\"false\" SemiHidden=\"true\" UnhideWhenUsed=\"true\"\r\n   Name=\"List Number\"/>\r\n  <w:LsdException Locked=\"false\" SemiHidden=\"true\" UnhideWhenUsed=\"true\"\r\n   Name=\"List 2\"/>\r\n  <w:LsdException Locked=\"false\" SemiHidden=\"true\" UnhideWhenUsed=\"true\"\r\n   Name=\"List 3\"/>\r\n  <w:LsdException Locked=\"false\" SemiHidden=\"true\" UnhideWhenUsed=\"true\"\r\n   Name=\"List 4\"/>\r\n  <w:LsdException Locked=\"false\" SemiHidden=\"true\" UnhideWhenUsed=\"true\"\r\n   Name=\"List 5\"/>\r\n  <w:LsdException Locked=\"false\" SemiHidden=\"true\" UnhideWhenUsed=\"true\"\r\n   Name=\"List Bullet 2\"/>\r\n  <w:LsdException Locked=\"false\" SemiHidden=\"true\" UnhideWhenUsed=\"true\"\r\n   Name=\"List Bullet 3\"/>\r\n  <w:LsdException Locked=\"false\" SemiHidden=\"true\" UnhideWhenUsed=\"true\"\r\n   Name=\"List Bullet 4\"/>\r\n  <w:LsdException Locked=\"false\" SemiHidden=\"true\" UnhideWhenUsed=\"true\"\r\n   Name=\"List Bullet 5\"/>\r\n  <w:LsdException Locked=\"false\" SemiHidden=\"true\" UnhideWhenUsed=\"true\"\r\n   Name=\"List Number 2\"/>\r\n  <w:LsdException Locked=\"false\" SemiHidden=\"true\" UnhideWhenUsed=\"true\"\r\n   Name=\"List Number 3\"/>\r\n  <w:LsdException Locked=\"false\" SemiHidden=\"true\" UnhideWhenUsed=\"true\"\r\n   Name=\"List Number 4\"/>\r\n  <w:LsdException Locked=\"false\" SemiHidden=\"true\" UnhideWhenUsed=\"true\"\r\n   Name=\"List Number 5\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"10\" QFormat=\"true\" Name=\"Title\"/>\r\n  <w:LsdException Locked=\"false\" SemiHidden=\"true\" UnhideWhenUsed=\"true\"\r\n   Name=\"Closing\"/>\r\n  <w:LsdException Locked=\"false\" SemiHidden=\"true\" UnhideWhenUsed=\"true\"\r\n   Name=\"Signature\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"1\" SemiHidden=\"true\"\r\n   UnhideWhenUsed=\"true\" Name=\"Default Paragraph Font\"/>\r\n  <w:LsdException Locked=\"false\" SemiHidden=\"true\" UnhideWhenUsed=\"true\"\r\n   Name=\"Body Text\"/>\r\n  <w:LsdException Locked=\"false\" SemiHidden=\"true\" UnhideWhenUsed=\"true\"\r\n   Name=\"Body Text Indent\"/>\r\n  <w:LsdException Locked=\"false\" SemiHidden=\"true\" UnhideWhenUsed=\"true\"\r\n   Name=\"List Continue\"/>\r\n  <w:LsdException Locked=\"false\" SemiHidden=\"true\" UnhideWhenUsed=\"true\"\r\n   Name=\"List Continue 2\"/>\r\n  <w:LsdException Locked=\"false\" SemiHidden=\"true\" UnhideWhenUsed=\"true\"\r\n   Name=\"List Continue 3\"/>\r\n  <w:LsdException Locked=\"false\" SemiHidden=\"true\" UnhideWhenUsed=\"true\"\r\n   Name=\"List Continue 4\"/>\r\n  <w:LsdException Locked=\"false\" SemiHidden=\"true\" UnhideWhenUsed=\"true\"\r\n   Name=\"List Continue 5\"/>\r\n  <w:LsdException Locked=\"false\" SemiHidden=\"true\" UnhideWhenUsed=\"true\"\r\n   Name=\"Message Header\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"11\" QFormat=\"true\" Name=\"Subtitle\"/>\r\n  <w:LsdException Locked=\"false\" SemiHidden=\"true\" UnhideWhenUsed=\"true\"\r\n   Name=\"Salutation\"/>\r\n  <w:LsdException Locked=\"false\" SemiHidden=\"true\" UnhideWhenUsed=\"true\"\r\n   Name=\"Date\"/>\r\n  <w:LsdException Locked=\"false\" SemiHidden=\"true\" UnhideWhenUsed=\"true\"\r\n   Name=\"Body Text First Indent\"/>\r\n  <w:LsdException Locked=\"false\" SemiHidden=\"true\" UnhideWhenUsed=\"true\"\r\n   Name=\"Body Text First Indent 2\"/>\r\n  <w:LsdException Locked=\"false\" SemiHidden=\"true\" UnhideWhenUsed=\"true\"\r\n   Name=\"Note Heading\"/>\r\n  <w:LsdException Locked=\"false\" SemiHidden=\"true\" UnhideWhenUsed=\"true\"\r\n   Name=\"Body Text 2\"/>\r\n  <w:LsdException Locked=\"false\" SemiHidden=\"true\" UnhideWhenUsed=\"true\"\r\n   Name=\"Body Text 3\"/>\r\n  <w:LsdException Locked=\"false\" SemiHidden=\"true\" UnhideWhenUsed=\"true\"\r\n   Name=\"Body Text Indent 2\"/>\r\n  <w:LsdException Locked=\"false\" SemiHidden=\"true\" UnhideWhenUsed=\"true\"\r\n   Name=\"Body Text Indent 3\"/>\r\n  <w:LsdException Locked=\"false\" SemiHidden=\"true\" UnhideWhenUsed=\"true\"\r\n   Name=\"Block Text\"/>\r\n  <w:LsdException Locked=\"false\" SemiHidden=\"true\" UnhideWhenUsed=\"true\"\r\n   Name=\"Hyperlink\"/>\r\n  <w:LsdException Locked=\"false\" SemiHidden=\"true\" UnhideWhenUsed=\"true\"\r\n   Name=\"FollowedHyperlink\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"22\" QFormat=\"true\" Name=\"Strong\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"20\" QFormat=\"true\" Name=\"Emphasis\"/>\r\n  <w:LsdException Locked=\"false\" SemiHidden=\"true\" UnhideWhenUsed=\"true\"\r\n   Name=\"Document Map\"/>\r\n  <w:LsdException Locked=\"false\" SemiHidden=\"true\" UnhideWhenUsed=\"true\"\r\n   Name=\"Plain Text\"/>\r\n  <w:LsdException Locked=\"false\" SemiHidden=\"true\" UnhideWhenUsed=\"true\"\r\n   Name=\"E-mail Signature\"/>\r\n  <w:LsdException Locked=\"false\" SemiHidden=\"true\" UnhideWhenUsed=\"true\"\r\n   Name=\"HTML Top of Form\"/>\r\n  <w:LsdException Locked=\"false\" SemiHidden=\"true\" UnhideWhenUsed=\"true\"\r\n   Name=\"HTML Bottom of Form\"/>\r\n  <w:LsdException Locked=\"false\" SemiHidden=\"true\" UnhideWhenUsed=\"true\"\r\n   Name=\"Normal (Web)\"/>\r\n  <w:LsdException Locked=\"false\" SemiHidden=\"true\" UnhideWhenUsed=\"true\"\r\n   Name=\"HTML Acronym\"/>\r\n  <w:LsdException Locked=\"false\" SemiHidden=\"true\" UnhideWhenUsed=\"true\"\r\n   Name=\"HTML Address\"/>\r\n  <w:LsdException Locked=\"false\" SemiHidden=\"true\" UnhideWhenUsed=\"true\"\r\n   Name=\"HTML Cite\"/>\r\n  <w:LsdException Locked=\"false\" SemiHidden=\"true\" UnhideWhenUsed=\"true\"\r\n   Name=\"HTML Code\"/>\r\n  <w:LsdException Locked=\"false\" SemiHidden=\"true\" UnhideWhenUsed=\"true\"\r\n   Name=\"HTML Definition\"/>\r\n  <w:LsdException Locked=\"false\" SemiHidden=\"true\" UnhideWhenUsed=\"true\"\r\n   Name=\"HTML Keyboard\"/>\r\n  <w:LsdException Locked=\"false\" SemiHidden=\"true\" UnhideWhenUsed=\"true\"\r\n   Name=\"HTML Preformatted\"/>\r\n  <w:LsdException Locked=\"false\" SemiHidden=\"true\" UnhideWhenUsed=\"true\"\r\n   Name=\"HTML Sample\"/>\r\n  <w:LsdException Locked=\"false\" SemiHidden=\"true\" UnhideWhenUsed=\"true\"\r\n   Name=\"HTML Typewriter\"/>\r\n  <w:LsdException Locked=\"false\" SemiHidden=\"true\" UnhideWhenUsed=\"true\"\r\n   Name=\"HTML Variable\"/>\r\n  <w:LsdException Locked=\"false\" SemiHidden=\"true\" UnhideWhenUsed=\"true\"\r\n   Name=\"Normal Table\"/>\r\n  <w:LsdException Locked=\"false\" SemiHidden=\"true\" UnhideWhenUsed=\"true\"\r\n   Name=\"annotation subject\"/>\r\n  <w:LsdException Locked=\"false\" SemiHidden=\"true\" UnhideWhenUsed=\"true\"\r\n   Name=\"No List\"/>\r\n  <w:LsdException Locked=\"false\" SemiHidden=\"true\" UnhideWhenUsed=\"true\"\r\n   Name=\"Outline List 1\"/>\r\n  <w:LsdException Locked=\"false\" SemiHidden=\"true\" UnhideWhenUsed=\"true\"\r\n   Name=\"Outline List 2\"/>\r\n  <w:LsdException Locked=\"false\" SemiHidden=\"true\" UnhideWhenUsed=\"true\"\r\n   Name=\"Outline List 3\"/>\r\n  <w:LsdException Locked=\"false\" SemiHidden=\"true\" UnhideWhenUsed=\"true\"\r\n   Name=\"Table Simple 1\"/>\r\n  <w:LsdException Locked=\"false\" SemiHidden=\"true\" UnhideWhenUsed=\"true\"\r\n   Name=\"Table Simple 2\"/>\r\n  <w:LsdException Locked=\"false\" SemiHidden=\"true\" UnhideWhenUsed=\"true\"\r\n   Name=\"Table Simple 3\"/>\r\n  <w:LsdException Locked=\"false\" SemiHidden=\"true\" UnhideWhenUsed=\"true\"\r\n   Name=\"Table Classic 1\"/>\r\n  <w:LsdException Locked=\"false\" SemiHidden=\"true\" UnhideWhenUsed=\"true\"\r\n   Name=\"Table Classic 2\"/>\r\n  <w:LsdException Locked=\"false\" SemiHidden=\"true\" UnhideWhenUsed=\"true\"\r\n   Name=\"Table Classic 3\"/>\r\n  <w:LsdException Locked=\"false\" SemiHidden=\"true\" UnhideWhenUsed=\"true\"\r\n   Name=\"Table Classic 4\"/>\r\n  <w:LsdException Locked=\"false\" SemiHidden=\"true\" UnhideWhenUsed=\"true\"\r\n   Name=\"Table Colorful 1\"/>\r\n  <w:LsdException Locked=\"false\" SemiHidden=\"true\" UnhideWhenUsed=\"true\"\r\n   Name=\"Table Colorful 2\"/>\r\n  <w:LsdException Locked=\"false\" SemiHidden=\"true\" UnhideWhenUsed=\"true\"\r\n   Name=\"Table Colorful 3\"/>\r\n  <w:LsdException Locked=\"false\" SemiHidden=\"true\" UnhideWhenUsed=\"true\"\r\n   Name=\"Table Columns 1\"/>\r\n  <w:LsdException Locked=\"false\" SemiHidden=\"true\" UnhideWhenUsed=\"true\"\r\n   Name=\"Table Columns 2\"/>\r\n  <w:LsdException Locked=\"false\" SemiHidden=\"true\" UnhideWhenUsed=\"true\"\r\n   Name=\"Table Columns 3\"/>\r\n  <w:LsdException Locked=\"false\" SemiHidden=\"true\" UnhideWhenUsed=\"true\"\r\n   Name=\"Table Columns 4\"/>\r\n  <w:LsdException Locked=\"false\" SemiHidden=\"true\" UnhideWhenUsed=\"true\"\r\n   Name=\"Table Columns 5\"/>\r\n  <w:LsdException Locked=\"false\" SemiHidden=\"true\" UnhideWhenUsed=\"true\"\r\n   Name=\"Table Grid 1\"/>\r\n  <w:LsdException Locked=\"false\" SemiHidden=\"true\" UnhideWhenUsed=\"true\"\r\n   Name=\"Table Grid 2\"/>\r\n  <w:LsdException Locked=\"false\" SemiHidden=\"true\" UnhideWhenUsed=\"true\"\r\n   Name=\"Table Grid 3\"/>\r\n  <w:LsdException Locked=\"false\" SemiHidden=\"true\" UnhideWhenUsed=\"true\"\r\n   Name=\"Table Grid 4\"/>\r\n  <w:LsdException Locked=\"false\" SemiHidden=\"true\" UnhideWhenUsed=\"true\"\r\n   Name=\"Table Grid 5\"/>\r\n  <w:LsdException Locked=\"false\" SemiHidden=\"true\" UnhideWhenUsed=\"true\"\r\n   Name=\"Table Grid 6\"/>\r\n  <w:LsdException Locked=\"false\" SemiHidden=\"true\" UnhideWhenUsed=\"true\"\r\n   Name=\"Table Grid 7\"/>\r\n  <w:LsdException Locked=\"false\" SemiHidden=\"true\" UnhideWhenUsed=\"true\"\r\n   Name=\"Table Grid 8\"/>\r\n  <w:LsdException Locked=\"false\" SemiHidden=\"true\" UnhideWhenUsed=\"true\"\r\n   Name=\"Table List 1\"/>\r\n  <w:LsdException Locked=\"false\" SemiHidden=\"true\" UnhideWhenUsed=\"true\"\r\n   Name=\"Table List 2\"/>\r\n  <w:LsdException Locked=\"false\" SemiHidden=\"true\" UnhideWhenUsed=\"true\"\r\n   Name=\"Table List 3\"/>\r\n  <w:LsdException Locked=\"false\" SemiHidden=\"true\" UnhideWhenUsed=\"true\"\r\n   Name=\"Table List 4\"/>\r\n  <w:LsdException Locked=\"false\" SemiHidden=\"true\" UnhideWhenUsed=\"true\"\r\n   Name=\"Table List 5\"/>\r\n  <w:LsdException Locked=\"false\" SemiHidden=\"true\" UnhideWhenUsed=\"true\"\r\n   Name=\"Table List 6\"/>\r\n  <w:LsdException Locked=\"false\" SemiHidden=\"true\" UnhideWhenUsed=\"true\"\r\n   Name=\"Table List 7\"/>\r\n  <w:LsdException Locked=\"false\" SemiHidden=\"true\" UnhideWhenUsed=\"true\"\r\n   Name=\"Table List 8\"/>\r\n  <w:LsdException Locked=\"false\" SemiHidden=\"true\" UnhideWhenUsed=\"true\"\r\n   Name=\"Table 3D effects 1\"/>\r\n  <w:LsdException Locked=\"false\" SemiHidden=\"true\" UnhideWhenUsed=\"true\"\r\n   Name=\"Table 3D effects 2\"/>\r\n  <w:LsdException Locked=\"false\" SemiHidden=\"true\" UnhideWhenUsed=\"true\"\r\n   Name=\"Table 3D effects 3\"/>\r\n  <w:LsdException Locked=\"false\" SemiHidden=\"true\" UnhideWhenUsed=\"true\"\r\n   Name=\"Table Contemporary\"/>\r\n  <w:LsdException Locked=\"false\" SemiHidden=\"true\" UnhideWhenUsed=\"true\"\r\n   Name=\"Table Elegant\"/>\r\n  <w:LsdException Locked=\"false\" SemiHidden=\"true\" UnhideWhenUsed=\"true\"\r\n   Name=\"Table Professional\"/>\r\n  <w:LsdException Locked=\"false\" SemiHidden=\"true\" UnhideWhenUsed=\"true\"\r\n   Name=\"Table Subtle 1\"/>\r\n  <w:LsdException Locked=\"false\" SemiHidden=\"true\" UnhideWhenUsed=\"true\"\r\n   Name=\"Table Subtle 2\"/>\r\n  <w:LsdException Locked=\"false\" SemiHidden=\"true\" UnhideWhenUsed=\"true\"\r\n   Name=\"Table Web 1\"/>\r\n  <w:LsdException Locked=\"false\" SemiHidden=\"true\" UnhideWhenUsed=\"true\"\r\n   Name=\"Table Web 2\"/>\r\n  <w:LsdException Locked=\"false\" SemiHidden=\"true\" UnhideWhenUsed=\"true\"\r\n   Name=\"Table Web 3\"/>\r\n  <w:LsdException Locked=\"false\" SemiHidden=\"true\" UnhideWhenUsed=\"true\"\r\n   Name=\"Balloon Text\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"39\" Name=\"Table Grid\"/>\r\n  <w:LsdException Locked=\"false\" SemiHidden=\"true\" UnhideWhenUsed=\"true\"\r\n   Name=\"Table Theme\"/>\r\n  <w:LsdException Locked=\"false\" SemiHidden=\"true\" Name=\"Placeholder Text\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"1\" QFormat=\"true\" Name=\"No Spacing\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"60\" Name=\"Light Shading\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"61\" Name=\"Light List\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"62\" Name=\"Light Grid\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"63\" Name=\"Medium Shading 1\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"64\" Name=\"Medium Shading 2\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"65\" Name=\"Medium List 1\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"66\" Name=\"Medium List 2\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"67\" Name=\"Medium Grid 1\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"68\" Name=\"Medium Grid 2\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"69\" Name=\"Medium Grid 3\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"70\" Name=\"Dark List\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"71\" Name=\"Colorful Shading\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"72\" Name=\"Colorful List\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"73\" Name=\"Colorful Grid\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"60\" Name=\"Light Shading Accent 1\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"61\" Name=\"Light List Accent 1\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"62\" Name=\"Light Grid Accent 1\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"63\" Name=\"Medium Shading 1 Accent 1\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"64\" Name=\"Medium Shading 2 Accent 1\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"65\" Name=\"Medium List 1 Accent 1\"/>\r\n  <w:LsdException Locked=\"false\" SemiHidden=\"true\" Name=\"Revision\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"34\" QFormat=\"true\"\r\n   Name=\"List Paragraph\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"29\" QFormat=\"true\" Name=\"Quote\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"30\" QFormat=\"true\"\r\n   Name=\"Intense Quote\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"66\" Name=\"Medium List 2 Accent 1\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"67\" Name=\"Medium Grid 1 Accent 1\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"68\" Name=\"Medium Grid 2 Accent 1\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"69\" Name=\"Medium Grid 3 Accent 1\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"70\" Name=\"Dark List Accent 1\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"71\" Name=\"Colorful Shading Accent 1\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"72\" Name=\"Colorful List Accent 1\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"73\" Name=\"Colorful Grid Accent 1\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"60\" Name=\"Light Shading Accent 2\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"61\" Name=\"Light List Accent 2\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"62\" Name=\"Light Grid Accent 2\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"63\" Name=\"Medium Shading 1 Accent 2\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"64\" Name=\"Medium Shading 2 Accent 2\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"65\" Name=\"Medium List 1 Accent 2\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"66\" Name=\"Medium List 2 Accent 2\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"67\" Name=\"Medium Grid 1 Accent 2\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"68\" Name=\"Medium Grid 2 Accent 2\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"69\" Name=\"Medium Grid 3 Accent 2\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"70\" Name=\"Dark List Accent 2\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"71\" Name=\"Colorful Shading Accent 2\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"72\" Name=\"Colorful List Accent 2\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"73\" Name=\"Colorful Grid Accent 2\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"60\" Name=\"Light Shading Accent 3\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"61\" Name=\"Light List Accent 3\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"62\" Name=\"Light Grid Accent 3\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"63\" Name=\"Medium Shading 1 Accent 3\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"64\" Name=\"Medium Shading 2 Accent 3\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"65\" Name=\"Medium List 1 Accent 3\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"66\" Name=\"Medium List 2 Accent 3\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"67\" Name=\"Medium Grid 1 Accent 3\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"68\" Name=\"Medium Grid 2 Accent 3\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"69\" Name=\"Medium Grid 3 Accent 3\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"70\" Name=\"Dark List Accent 3\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"71\" Name=\"Colorful Shading Accent 3\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"72\" Name=\"Colorful List Accent 3\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"73\" Name=\"Colorful Grid Accent 3\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"60\" Name=\"Light Shading Accent 4\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"61\" Name=\"Light List Accent 4\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"62\" Name=\"Light Grid Accent 4\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"63\" Name=\"Medium Shading 1 Accent 4\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"64\" Name=\"Medium Shading 2 Accent 4\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"65\" Name=\"Medium List 1 Accent 4\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"66\" Name=\"Medium List 2 Accent 4\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"67\" Name=\"Medium Grid 1 Accent 4\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"68\" Name=\"Medium Grid 2 Accent 4\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"69\" Name=\"Medium Grid 3 Accent 4\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"70\" Name=\"Dark List Accent 4\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"71\" Name=\"Colorful Shading Accent 4\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"72\" Name=\"Colorful List Accent 4\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"73\" Name=\"Colorful Grid Accent 4\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"60\" Name=\"Light Shading Accent 5\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"61\" Name=\"Light List Accent 5\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"62\" Name=\"Light Grid Accent 5\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"63\" Name=\"Medium Shading 1 Accent 5\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"64\" Name=\"Medium Shading 2 Accent 5\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"65\" Name=\"Medium List 1 Accent 5\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"66\" Name=\"Medium List 2 Accent 5\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"67\" Name=\"Medium Grid 1 Accent 5\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"68\" Name=\"Medium Grid 2 Accent 5\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"69\" Name=\"Medium Grid 3 Accent 5\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"70\" Name=\"Dark List Accent 5\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"71\" Name=\"Colorful Shading Accent 5\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"72\" Name=\"Colorful List Accent 5\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"73\" Name=\"Colorful Grid Accent 5\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"60\" Name=\"Light Shading Accent 6\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"61\" Name=\"Light List Accent 6\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"62\" Name=\"Light Grid Accent 6\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"63\" Name=\"Medium Shading 1 Accent 6\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"64\" Name=\"Medium Shading 2 Accent 6\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"65\" Name=\"Medium List 1 Accent 6\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"66\" Name=\"Medium List 2 Accent 6\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"67\" Name=\"Medium Grid 1 Accent 6\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"68\" Name=\"Medium Grid 2 Accent 6\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"69\" Name=\"Medium Grid 3 Accent 6\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"70\" Name=\"Dark List Accent 6\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"71\" Name=\"Colorful Shading Accent 6\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"72\" Name=\"Colorful List Accent 6\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"73\" Name=\"Colorful Grid Accent 6\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"19\" QFormat=\"true\"\r\n   Name=\"Subtle Emphasis\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"21\" QFormat=\"true\"\r\n   Name=\"Intense Emphasis\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"31\" QFormat=\"true\"\r\n   Name=\"Subtle Reference\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"32\" QFormat=\"true\"\r\n   Name=\"Intense Reference\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"33\" QFormat=\"true\" Name=\"Book Title\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"37\" SemiHidden=\"true\"\r\n   UnhideWhenUsed=\"true\" Name=\"Bibliography\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"39\" SemiHidden=\"true\"\r\n   UnhideWhenUsed=\"true\" QFormat=\"true\" Name=\"TOC Heading\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"41\" Name=\"Plain Table 1\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"42\" Name=\"Plain Table 2\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"43\" Name=\"Plain Table 3\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"44\" Name=\"Plain Table 4\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"45\" Name=\"Plain Table 5\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"40\" Name=\"Grid Table Light\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"46\" Name=\"Grid Table 1 Light\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"47\" Name=\"Grid Table 2\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"48\" Name=\"Grid Table 3\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"49\" Name=\"Grid Table 4\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"50\" Name=\"Grid Table 5 Dark\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"51\" Name=\"Grid Table 6 Colorful\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"52\" Name=\"Grid Table 7 Colorful\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"46\"\r\n   Name=\"Grid Table 1 Light Accent 1\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"47\" Name=\"Grid Table 2 Accent 1\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"48\" Name=\"Grid Table 3 Accent 1\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"49\" Name=\"Grid Table 4 Accent 1\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"50\" Name=\"Grid Table 5 Dark Accent 1\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"51\"\r\n   Name=\"Grid Table 6 Colorful Accent 1\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"52\"\r\n   Name=\"Grid Table 7 Colorful Accent 1\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"46\"\r\n   Name=\"Grid Table 1 Light Accent 2\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"47\" Name=\"Grid Table 2 Accent 2\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"48\" Name=\"Grid Table 3 Accent 2\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"49\" Name=\"Grid Table 4 Accent 2\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"50\" Name=\"Grid Table 5 Dark Accent 2\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"51\"\r\n   Name=\"Grid Table 6 Colorful Accent 2\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"52\"\r\n   Name=\"Grid Table 7 Colorful Accent 2\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"46\"\r\n   Name=\"Grid Table 1 Light Accent 3\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"47\" Name=\"Grid Table 2 Accent 3\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"48\" Name=\"Grid Table 3 Accent 3\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"49\" Name=\"Grid Table 4 Accent 3\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"50\" Name=\"Grid Table 5 Dark Accent 3\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"51\"\r\n   Name=\"Grid Table 6 Colorful Accent 3\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"52\"\r\n   Name=\"Grid Table 7 Colorful Accent 3\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"46\"\r\n   Name=\"Grid Table 1 Light Accent 4\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"47\" Name=\"Grid Table 2 Accent 4\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"48\" Name=\"Grid Table 3 Accent 4\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"49\" Name=\"Grid Table 4 Accent 4\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"50\" Name=\"Grid Table 5 Dark Accent 4\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"51\"\r\n   Name=\"Grid Table 6 Colorful Accent 4\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"52\"\r\n   Name=\"Grid Table 7 Colorful Accent 4\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"46\"\r\n   Name=\"Grid Table 1 Light Accent 5\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"47\" Name=\"Grid Table 2 Accent 5\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"48\" Name=\"Grid Table 3 Accent 5\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"49\" Name=\"Grid Table 4 Accent 5\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"50\" Name=\"Grid Table 5 Dark Accent 5\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"51\"\r\n   Name=\"Grid Table 6 Colorful Accent 5\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"52\"\r\n   Name=\"Grid Table 7 Colorful Accent 5\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"46\"\r\n   Name=\"Grid Table 1 Light Accent 6\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"47\" Name=\"Grid Table 2 Accent 6\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"48\" Name=\"Grid Table 3 Accent 6\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"49\" Name=\"Grid Table 4 Accent 6\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"50\" Name=\"Grid Table 5 Dark Accent 6\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"51\"\r\n   Name=\"Grid Table 6 Colorful Accent 6\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"52\"\r\n   Name=\"Grid Table 7 Colorful Accent 6\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"46\" Name=\"List Table 1 Light\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"47\" Name=\"List Table 2\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"48\" Name=\"List Table 3\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"49\" Name=\"List Table 4\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"50\" Name=\"List Table 5 Dark\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"51\" Name=\"List Table 6 Colorful\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"52\" Name=\"List Table 7 Colorful\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"46\"\r\n   Name=\"List Table 1 Light Accent 1\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"47\" Name=\"List Table 2 Accent 1\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"48\" Name=\"List Table 3 Accent 1\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"49\" Name=\"List Table 4 Accent 1\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"50\" Name=\"List Table 5 Dark Accent 1\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"51\"\r\n   Name=\"List Table 6 Colorful Accent 1\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"52\"\r\n   Name=\"List Table 7 Colorful Accent 1\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"46\"\r\n   Name=\"List Table 1 Light Accent 2\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"47\" Name=\"List Table 2 Accent 2\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"48\" Name=\"List Table 3 Accent 2\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"49\" Name=\"List Table 4 Accent 2\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"50\" Name=\"List Table 5 Dark Accent 2\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"51\"\r\n   Name=\"List Table 6 Colorful Accent 2\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"52\"\r\n   Name=\"List Table 7 Colorful Accent 2\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"46\"\r\n   Name=\"List Table 1 Light Accent 3\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"47\" Name=\"List Table 2 Accent 3\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"48\" Name=\"List Table 3 Accent 3\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"49\" Name=\"List Table 4 Accent 3\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"50\" Name=\"List Table 5 Dark Accent 3\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"51\"\r\n   Name=\"List Table 6 Colorful Accent 3\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"52\"\r\n   Name=\"List Table 7 Colorful Accent 3\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"46\"\r\n   Name=\"List Table 1 Light Accent 4\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"47\" Name=\"List Table 2 Accent 4\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"48\" Name=\"List Table 3 Accent 4\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"49\" Name=\"List Table 4 Accent 4\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"50\" Name=\"List Table 5 Dark Accent 4\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"51\"\r\n   Name=\"List Table 6 Colorful Accent 4\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"52\"\r\n   Name=\"List Table 7 Colorful Accent 4\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"46\"\r\n   Name=\"List Table 1 Light Accent 5\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"47\" Name=\"List Table 2 Accent 5\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"48\" Name=\"List Table 3 Accent 5\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"49\" Name=\"List Table 4 Accent 5\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"50\" Name=\"List Table 5 Dark Accent 5\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"51\"\r\n   Name=\"List Table 6 Colorful Accent 5\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"52\"\r\n   Name=\"List Table 7 Colorful Accent 5\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"46\"\r\n   Name=\"List Table 1 Light Accent 6\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"47\" Name=\"List Table 2 Accent 6\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"48\" Name=\"List Table 3 Accent 6\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"49\" Name=\"List Table 4 Accent 6\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"50\" Name=\"List Table 5 Dark Accent 6\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"51\"\r\n   Name=\"List Table 6 Colorful Accent 6\"/>\r\n  <w:LsdException Locked=\"false\" Priority=\"52\"\r\n   Name=\"List Table 7 Colorful Accent 6\"/>\r\n  <w:LsdException Locked=\"false\" SemiHidden=\"true\" UnhideWhenUsed=\"true\"\r\n   Name=\"Mention\"/>\r\n  <w:LsdException Locked=\"false\" SemiHidden=\"true\" UnhideWhenUsed=\"true\"\r\n   Name=\"Smart Hyperlink\"/>\r\n  <w:LsdException Locked=\"false\" SemiHidden=\"true\" UnhideWhenUsed=\"true\"\r\n   Name=\"Hashtag\"/>\r\n  <w:LsdException Locked=\"false\" SemiHidden=\"true\" UnhideWhenUsed=\"true\"\r\n   Name=\"Unresolved Mention\"/>\r\n  <w:LsdException Locked=\"false\" SemiHidden=\"true\" UnhideWhenUsed=\"true\"\r\n   Name=\"Smart Link\"/>\r\n </w:LatentStyles>\r\n</xml><![endif]-->\r\n<style>\r\n<!--\r\n /* Font Definitions */\r\n @font-face\r\n\t{font-family:\"Cambria Math\";\r\n\tpanose-1:2 4 5 3 5 4 6 3 2 4;\r\n\tmso-font-charset:0;\r\n\tmso-generic-font-family:roman;\r\n\tmso-font-pitch:variable;\r\n\tmso-font-signature:-536870145 1107305727 0 0 415 0;}\r\n@font-face\r\n\t{font-family:DengXian;\r\n\tpanose-1:2 1 6 0 3 1 1 1 1 1;\r\n\tmso-font-alt:等线;\r\n\tmso-font-charset:134;\r\n\tmso-generic-font-family:auto;\r\n\tmso-font-pitch:variable;\r\n\tmso-font-signature:-1610612033 953122042 22 0 262159 0;}\r\n@font-face\r\n\t{font-family:Calibri;\r\n\tpanose-1:2 15 5 2 2 2 4 3 2 4;\r\n\tmso-font-charset:0;\r\n\tmso-generic-font-family:swiss;\r\n\tmso-font-pitch:variable;\r\n\tmso-font-signature:-469750017 -1073732485 9 0 511 0;}\r\n@font-face\r\n\t{font-family:\"\\@DengXian\";\r\n\tpanose-1:2 1 6 0 3 1 1 1 1 1;\r\n\tmso-font-charset:134;\r\n\tmso-generic-font-family:auto;\r\n\tmso-font-pitch:variable;\r\n\tmso-font-signature:-1610612033 953122042 22 0 262159 0;}\r\n /* Style Definitions */\r\n p.MsoNormal, li.MsoNormal, div.MsoNormal\r\n\t{mso-style-unhide:no;\r\n\tmso-style-qformat:yes;\r\n\tmso-style-parent:\"\";\r\n\tmargin-top:0in;\r\n\tmargin-right:0in;\r\n\tmargin-bottom:8.0pt;\r\n\tmargin-left:0in;\r\n\tline-height:107%;\r\n\tmso-pagination:widow-orphan;\r\n\tfont-size:11.0pt;\r\n\tfont-family:\"Calibri\",sans-serif;\r\n\tmso-ascii-font-family:Calibri;\r\n\tmso-ascii-theme-font:minor-latin;\r\n\tmso-fareast-font-family:Calibri;\r\n\tmso-fareast-theme-font:minor-latin;\r\n\tmso-hansi-font-family:Calibri;\r\n\tmso-hansi-theme-font:minor-latin;\r\n\tmso-bidi-font-family:\"Times New Roman\";\r\n\tmso-bidi-theme-font:minor-bidi;\r\n\tmso-fareast-language:EN-US;}\r\nh1\r\n\t{mso-style-unhide:no;\r\n\tmso-style-qformat:yes;\r\n\tmso-style-link:\"Heading 1 Char\";\r\n\tmso-style-next:Normal;\r\n\tmargin-top:12.0pt;\r\n\tmargin-right:0in;\r\n\tmargin-bottom:12.0pt;\r\n\tmargin-left:.5in;\r\n\ttext-align:justify;\r\n\ttext-justify:inter-ideograph;\r\n\ttext-indent:0in;\r\n\tmso-pagination:none;\r\n\tmso-outline-level:1;\r\n\tmso-list:l1 level1 lfo2;\r\n\ttab-stops:1.0in;\r\n\tfont-size:11.0pt;\r\n\tmso-bidi-font-size:12.0pt;\r\n\tfont-family:\"Calibri\",sans-serif;\r\n\tmso-ascii-font-family:Calibri;\r\n\tmso-ascii-theme-font:minor-latin;\r\n\tmso-hansi-font-family:Calibri;\r\n\tmso-hansi-theme-font:minor-latin;\r\n\tmso-bidi-font-family:\"Times New Roman\";\r\n\tmso-bidi-theme-font:minor-bidi;\r\n\ttext-transform:uppercase;\r\n\tmso-font-kerning:0pt;\r\n\tmso-fareast-language:EN-US;\r\n\tmso-bidi-font-weight:normal;}\r\nh2\r\n\t{mso-style-unhide:no;\r\n\tmso-style-qformat:yes;\r\n\tmso-style-parent:\"\";\r\n\tmso-style-link:\"Heading 2 Char\";\r\n\tmargin-top:6.0pt;\r\n\tmargin-right:0in;\r\n\tmargin-bottom:6.0pt;\r\n\tmargin-left:27.0pt;\r\n\ttext-align:justify;\r\n\ttext-justify:inter-ideograph;\r\n\ttext-indent:-.25in;\r\n\tmso-pagination:widow-orphan;\r\n\tmso-outline-level:2;\r\n\tmso-list:l1 level2 lfo2;\r\n\tmso-layout-grid-align:none;\r\n\tfont-size:11.0pt;\r\n\tmso-bidi-font-size:14.0pt;\r\n\tfont-family:\"Calibri\",sans-serif;\r\n\tmso-fareast-font-family:\"Times New Roman\";\r\n\tmso-bidi-font-family:Arial;\r\n\tmso-fareast-language:EN-US;\r\n\tmso-bidi-font-style:italic;}\r\nh3\r\n\t{mso-style-unhide:no;\r\n\tmso-style-qformat:yes;\r\n\tmso-style-parent:\"Heading 2\";\r\n\tmso-style-link:\"Heading 3 Char\";\r\n\tmargin-top:6.0pt;\r\n\tmargin-right:0in;\r\n\tmargin-bottom:12.0pt;\r\n\tmargin-left:49.5pt;\r\n\ttext-align:justify;\r\n\ttext-justify:inter-ideograph;\r\n\ttext-indent:-.25in;\r\n\tmso-pagination:widow-orphan;\r\n\tmso-outline-level:3;\r\n\tmso-list:l1 level3 lfo2;\r\n\ttab-stops:45.0pt;\r\n\tmso-layout-grid-align:none;\r\n\tfont-size:11.0pt;\r\n\tmso-bidi-font-size:12.0pt;\r\n\tfont-family:\"Calibri\",sans-serif;\r\n\tmso-fareast-font-family:\"Times New Roman\";\r\n\tmso-bidi-font-family:\"Times New Roman\";\r\n\tmso-font-kerning:16.0pt;\r\n\tmso-fareast-language:EN-US;\r\n\tfont-weight:normal;\r\n\tmso-bidi-font-weight:bold;\r\n\tmso-bidi-font-style:italic;\r\n\ttext-decoration:underline;\r\n\ttext-underline:single;}\r\nh4\r\n\t{mso-style-unhide:no;\r\n\tmso-style-qformat:yes;\r\n\tmso-style-link:\"Heading 4 Char\";\r\n\tmso-style-next:Normal;\r\n\tmargin-top:0in;\r\n\tmargin-right:0in;\r\n\tmargin-bottom:6.0pt;\r\n\tmargin-left:175.5pt;\r\n\ttext-align:justify;\r\n\ttext-justify:inter-ideograph;\r\n\ttext-indent:-.25in;\r\n\tmso-pagination:widow-orphan;\r\n\tmso-outline-level:4;\r\n\tmso-list:l1 level4 lfo2;\r\n\tmso-layout-grid-align:none;\r\n\tfont-size:11.0pt;\r\n\tmso-bidi-font-size:14.0pt;\r\n\tfont-family:\"Calibri\",sans-serif;\r\n\tmso-fareast-font-family:\"Times New Roman\";\r\n\tmso-bidi-font-family:\"Times New Roman\";\r\n\tmso-fareast-language:EN-US;\r\n\tfont-weight:normal;\r\n\tmso-bidi-font-weight:bold;}\r\nh5\r\n\t{mso-style-unhide:no;\r\n\tmso-style-qformat:yes;\r\n\tmso-style-link:\"Heading 5 Char\";\r\n\tmso-style-next:Normal;\r\n\tmargin-top:0in;\r\n\tmargin-right:0in;\r\n\tmargin-bottom:12.0pt;\r\n\tmargin-left:1.25in;\r\n\ttext-align:justify;\r\n\ttext-justify:inter-ideograph;\r\n\ttext-indent:-.25in;\r\n\tmso-pagination:widow-orphan;\r\n\tmso-outline-level:5;\r\n\tmso-list:l1 level5 lfo2;\r\n\tmso-layout-grid-align:none;\r\n\tfont-size:11.0pt;\r\n\tmso-bidi-font-size:13.0pt;\r\n\tfont-family:\"Calibri\",sans-serif;\r\n\tmso-fareast-font-family:\"Times New Roman\";\r\n\tmso-bidi-font-family:\"Times New Roman\";\r\n\tmso-fareast-language:EN-US;\r\n\tfont-weight:normal;\r\n\tmso-bidi-font-weight:bold;\r\n\tmso-bidi-font-style:italic;}\r\nh6\r\n\t{mso-style-unhide:no;\r\n\tmso-style-qformat:yes;\r\n\tmso-style-link:\"Heading 6 Char\";\r\n\tmso-style-next:Normal;\r\n\tmargin-top:0in;\r\n\tmargin-right:0in;\r\n\tmargin-bottom:12.0pt;\r\n\tmargin-left:1.5in;\r\n\ttext-align:justify;\r\n\ttext-justify:inter-ideograph;\r\n\ttext-indent:-.25in;\r\n\tmso-pagination:widow-orphan;\r\n\tmso-outline-level:6;\r\n\tmso-list:l1 level6 lfo2;\r\n\tmso-layout-grid-align:none;\r\n\tfont-size:11.0pt;\r\n\tfont-family:\"Calibri\",sans-serif;\r\n\tmso-fareast-font-family:\"Times New Roman\";\r\n\tmso-bidi-font-family:\"Times New Roman\";\r\n\tmso-fareast-language:EN-US;\r\n\tfont-weight:normal;\r\n\tmso-bidi-font-weight:bold;}\r\np.MsoHeading7, li.MsoHeading7, div.MsoHeading7\r\n\t{mso-style-unhide:no;\r\n\tmso-style-qformat:yes;\r\n\tmso-style-link:\"Heading 7 Char\";\r\n\tmso-style-next:Normal;\r\n\tmargin-top:0in;\r\n\tmargin-right:0in;\r\n\tmargin-bottom:12.0pt;\r\n\tmargin-left:1.75in;\r\n\ttext-align:justify;\r\n\ttext-justify:inter-ideograph;\r\n\ttext-indent:-.25in;\r\n\tmso-pagination:widow-orphan;\r\n\tmso-outline-level:7;\r\n\tmso-list:l1 level7 lfo2;\r\n\tmso-layout-grid-align:none;\r\n\tfont-size:10.0pt;\r\n\tmso-bidi-font-size:12.0pt;\r\n\tfont-family:\"Calibri\",sans-serif;\r\n\tmso-fareast-font-family:\"Times New Roman\";\r\n\tmso-bidi-font-family:\"Times New Roman\";\r\n\tmso-fareast-language:EN-US;}\r\np.MsoHeading8, li.MsoHeading8, div.MsoHeading8\r\n\t{mso-style-unhide:no;\r\n\tmso-style-qformat:yes;\r\n\tmso-style-link:\"Heading 8 Char\";\r\n\tmso-style-next:Normal;\r\n\tmargin-top:0in;\r\n\tmargin-right:0in;\r\n\tmargin-bottom:12.0pt;\r\n\tmargin-left:2.0in;\r\n\ttext-align:justify;\r\n\ttext-justify:inter-ideograph;\r\n\ttext-indent:-.25in;\r\n\tmso-pagination:widow-orphan;\r\n\tmso-outline-level:8;\r\n\tmso-list:l1 level8 lfo2;\r\n\tmso-layout-grid-align:none;\r\n\tfont-size:10.0pt;\r\n\tmso-bidi-font-size:12.0pt;\r\n\tfont-family:\"Calibri\",sans-serif;\r\n\tmso-fareast-font-family:\"Times New Roman\";\r\n\tmso-bidi-font-family:\"Times New Roman\";\r\n\tmso-fareast-language:EN-US;\r\n\tmso-bidi-font-style:italic;}\r\np.MsoHeading9, li.MsoHeading9, div.MsoHeading9\r\n\t{mso-style-unhide:no;\r\n\tmso-style-qformat:yes;\r\n\tmso-style-link:\"Heading 9 Char\";\r\n\tmso-style-next:Normal;\r\n\tmargin-top:0in;\r\n\tmargin-right:0in;\r\n\tmargin-bottom:12.0pt;\r\n\tmargin-left:2.25in;\r\n\ttext-align:justify;\r\n\ttext-justify:inter-ideograph;\r\n\ttext-indent:-.25in;\r\n\tmso-pagination:widow-orphan;\r\n\tmso-outline-level:9;\r\n\tmso-list:l1 level9 lfo2;\r\n\tmso-layout-grid-align:none;\r\n\tfont-size:9.0pt;\r\n\tmso-bidi-font-size:11.0pt;\r\n\tfont-family:\"Calibri\",sans-serif;\r\n\tmso-fareast-font-family:\"Times New Roman\";\r\n\tmso-bidi-font-family:Arial;\r\n\tmso-fareast-language:EN-US;}\r\np.MsoCommentText, li.MsoCommentText, div.MsoCommentText\r\n\t{mso-style-link:\"Comment Text Char\";\r\n\tmargin-top:0in;\r\n\tmargin-right:0in;\r\n\tmargin-bottom:8.0pt;\r\n\tmargin-left:0in;\r\n\tmso-pagination:widow-orphan;\r\n\tfont-size:10.0pt;\r\n\tfont-family:\"Calibri\",sans-serif;\r\n\tmso-ascii-font-family:Calibri;\r\n\tmso-ascii-theme-font:minor-latin;\r\n\tmso-fareast-font-family:Calibri;\r\n\tmso-fareast-theme-font:minor-latin;\r\n\tmso-hansi-font-family:Calibri;\r\n\tmso-hansi-theme-font:minor-latin;\r\n\tmso-bidi-font-family:\"Times New Roman\";\r\n\tmso-bidi-theme-font:minor-bidi;\r\n\tmso-fareast-language:EN-US;}\r\np.MsoFooter, li.MsoFooter, div.MsoFooter\r\n\t{mso-style-priority:99;\r\n\tmso-style-link:\"Footer Char\";\r\n\tmargin:0in;\r\n\tmso-pagination:widow-orphan;\r\n\ttab-stops:center 3.25in right 6.5in;\r\n\tfont-size:11.0pt;\r\n\tfont-family:\"Calibri\",sans-serif;\r\n\tmso-ascii-font-family:Calibri;\r\n\tmso-ascii-theme-font:minor-latin;\r\n\tmso-fareast-font-family:Calibri;\r\n\tmso-fareast-theme-font:minor-latin;\r\n\tmso-hansi-font-family:Calibri;\r\n\tmso-hansi-theme-font:minor-latin;\r\n\tmso-bidi-font-family:\"Times New Roman\";\r\n\tmso-bidi-theme-font:minor-bidi;\r\n\tmso-fareast-language:EN-US;}\r\na:link, span.MsoHyperlink\r\n\t{mso-style-priority:99;\r\n\tcolor:blue;\r\n\ttext-decoration:underline;\r\n\ttext-underline:single;}\r\na:visited, span.MsoHyperlinkFollowed\r\n\t{mso-style-noshow:yes;\r\n\tmso-style-priority:99;\r\n\tcolor:#954F72;\r\n\tmso-themecolor:followedhyperlink;\r\n\ttext-decoration:underline;\r\n\ttext-underline:single;}\r\np.MsoListParagraph, li.MsoListParagraph, div.MsoListParagraph\r\n\t{mso-style-priority:34;\r\n\tmso-style-unhide:no;\r\n\tmso-style-qformat:yes;\r\n\tmargin-top:0in;\r\n\tmargin-right:0in;\r\n\tmargin-bottom:8.0pt;\r\n\tmargin-left:.5in;\r\n\tmso-add-space:auto;\r\n\tline-height:107%;\r\n\tmso-pagination:widow-orphan;\r\n\tfont-size:11.0pt;\r\n\tfont-family:\"Calibri\",sans-serif;\r\n\tmso-ascii-font-family:Calibri;\r\n\tmso-ascii-theme-font:minor-latin;\r\n\tmso-fareast-font-family:Calibri;\r\n\tmso-fareast-theme-font:minor-latin;\r\n\tmso-hansi-font-family:Calibri;\r\n\tmso-hansi-theme-font:minor-latin;\r\n\tmso-bidi-font-family:\"Times New Roman\";\r\n\tmso-bidi-theme-font:minor-bidi;\r\n\tmso-fareast-language:EN-US;}\r\np.MsoListParagraphCxSpFirst, li.MsoListParagraphCxSpFirst, div.MsoListParagraphCxSpFirst\r\n\t{mso-style-priority:34;\r\n\tmso-style-unhide:no;\r\n\tmso-style-qformat:yes;\r\n\tmso-style-type:export-only;\r\n\tmargin-top:0in;\r\n\tmargin-right:0in;\r\n\tmargin-bottom:0in;\r\n\tmargin-left:.5in;\r\n\tmso-add-space:auto;\r\n\tline-height:107%;\r\n\tmso-pagination:widow-orphan;\r\n\tfont-size:11.0pt;\r\n\tfont-family:\"Calibri\",sans-serif;\r\n\tmso-ascii-font-family:Calibri;\r\n\tmso-ascii-theme-font:minor-latin;\r\n\tmso-fareast-font-family:Calibri;\r\n\tmso-fareast-theme-font:minor-latin;\r\n\tmso-hansi-font-family:Calibri;\r\n\tmso-hansi-theme-font:minor-latin;\r\n\tmso-bidi-font-family:\"Times New Roman\";\r\n\tmso-bidi-theme-font:minor-bidi;\r\n\tmso-fareast-language:EN-US;}\r\np.MsoListParagraphCxSpMiddle, li.MsoListParagraphCxSpMiddle, div.MsoListParagraphCxSpMiddle\r\n\t{mso-style-priority:34;\r\n\tmso-style-unhide:no;\r\n\tmso-style-qformat:yes;\r\n\tmso-style-type:export-only;\r\n\tmargin-top:0in;\r\n\tmargin-right:0in;\r\n\tmargin-bottom:0in;\r\n\tmargin-left:.5in;\r\n\tmso-add-space:auto;\r\n\tline-height:107%;\r\n\tmso-pagination:widow-orphan;\r\n\tfont-size:11.0pt;\r\n\tfont-family:\"Calibri\",sans-serif;\r\n\tmso-ascii-font-family:Calibri;\r\n\tmso-ascii-theme-font:minor-latin;\r\n\tmso-fareast-font-family:Calibri;\r\n\tmso-fareast-theme-font:minor-latin;\r\n\tmso-hansi-font-family:Calibri;\r\n\tmso-hansi-theme-font:minor-latin;\r\n\tmso-bidi-font-family:\"Times New Roman\";\r\n\tmso-bidi-theme-font:minor-bidi;\r\n\tmso-fareast-language:EN-US;}\r\np.MsoListParagraphCxSpLast, li.MsoListParagraphCxSpLast, div.MsoListParagraphCxSpLast\r\n\t{mso-style-priority:34;\r\n\tmso-style-unhide:no;\r\n\tmso-style-qformat:yes;\r\n\tmso-style-type:export-only;\r\n\tmargin-top:0in;\r\n\tmargin-right:0in;\r\n\tmargin-bottom:8.0pt;\r\n\tmargin-left:.5in;\r\n\tmso-add-space:auto;\r\n\tline-height:107%;\r\n\tmso-pagination:widow-orphan;\r\n\tfont-size:11.0pt;\r\n\tfont-family:\"Calibri\",sans-serif;\r\n\tmso-ascii-font-family:Calibri;\r\n\tmso-ascii-theme-font:minor-latin;\r\n\tmso-fareast-font-family:Calibri;\r\n\tmso-fareast-theme-font:minor-latin;\r\n\tmso-hansi-font-family:Calibri;\r\n\tmso-hansi-theme-font:minor-latin;\r\n\tmso-bidi-font-family:\"Times New Roman\";\r\n\tmso-bidi-theme-font:minor-bidi;\r\n\tmso-fareast-language:EN-US;}\r\nspan.Heading1Char\r\n\t{mso-style-name:\"Heading 1 Char\";\r\n\tmso-style-unhide:no;\r\n\tmso-style-locked:yes;\r\n\tmso-style-link:\"Heading 1\";\r\n\tmso-ansi-font-size:11.0pt;\r\n\ttext-transform:uppercase;\r\n\tmso-font-kerning:0pt;\r\n\tmso-ligatures:none;\r\n\tmso-fareast-language:EN-US;\r\n\tfont-weight:bold;\r\n\tmso-bidi-font-weight:normal;}\r\nspan.Heading2Char\r\n\t{mso-style-name:\"Heading 2 Char\";\r\n\tmso-style-unhide:no;\r\n\tmso-style-locked:yes;\r\n\tmso-style-link:\"Heading 2\";\r\n\tmso-ansi-font-size:11.0pt;\r\n\tmso-bidi-font-size:14.0pt;\r\n\tfont-family:\"Calibri\",sans-serif;\r\n\tmso-ascii-font-family:Calibri;\r\n\tmso-fareast-font-family:\"Times New Roman\";\r\n\tmso-hansi-font-family:Calibri;\r\n\tmso-bidi-font-family:Arial;\r\n\tmso-font-kerning:0pt;\r\n\tmso-ligatures:none;\r\n\tmso-fareast-language:EN-US;\r\n\tfont-weight:bold;\r\n\tmso-bidi-font-style:italic;}\r\nspan.Heading3Char\r\n\t{mso-style-name:\"Heading 3 Char\";\r\n\tmso-style-unhide:no;\r\n\tmso-style-locked:yes;\r\n\tmso-style-link:\"Heading 3\";\r\n\tmso-ansi-font-size:11.0pt;\r\n\tfont-family:\"Calibri\",sans-serif;\r\n\tmso-ascii-font-family:Calibri;\r\n\tmso-fareast-font-family:\"Times New Roman\";\r\n\tmso-hansi-font-family:Calibri;\r\n\tmso-bidi-font-family:\"Times New Roman\";\r\n\tmso-font-kerning:16.0pt;\r\n\tmso-ligatures:none;\r\n\tmso-fareast-language:EN-US;\r\n\tmso-bidi-font-weight:bold;\r\n\tmso-bidi-font-style:italic;\r\n\ttext-decoration:underline;\r\n\ttext-underline:single;}\r\nspan.Heading4Char\r\n\t{mso-style-name:\"Heading 4 Char\";\r\n\tmso-style-unhide:no;\r\n\tmso-style-locked:yes;\r\n\tmso-style-link:\"Heading 4\";\r\n\tmso-ansi-font-size:11.0pt;\r\n\tmso-bidi-font-size:14.0pt;\r\n\tfont-family:\"Calibri\",sans-serif;\r\n\tmso-ascii-font-family:Calibri;\r\n\tmso-fareast-font-family:\"Times New Roman\";\r\n\tmso-hansi-font-family:Calibri;\r\n\tmso-bidi-font-family:\"Times New Roman\";\r\n\tmso-font-kerning:0pt;\r\n\tmso-ligatures:none;\r\n\tmso-fareast-language:EN-US;\r\n\tmso-bidi-font-weight:bold;}\r\nspan.Heading5Char\r\n\t{mso-style-name:\"Heading 5 Char\";\r\n\tmso-style-unhide:no;\r\n\tmso-style-locked:yes;\r\n\tmso-style-link:\"Heading 5\";\r\n\tmso-ansi-font-size:11.0pt;\r\n\tmso-bidi-font-size:13.0pt;\r\n\tfont-family:\"Calibri\",sans-serif;\r\n\tmso-ascii-font-family:Calibri;\r\n\tmso-fareast-font-family:\"Times New Roman\";\r\n\tmso-hansi-font-family:Calibri;\r\n\tmso-bidi-font-family:\"Times New Roman\";\r\n\tmso-font-kerning:0pt;\r\n\tmso-ligatures:none;\r\n\tmso-fareast-language:EN-US;\r\n\tmso-bidi-font-weight:bold;\r\n\tmso-bidi-font-style:italic;}\r\nspan.Heading6Char\r\n\t{mso-style-name:\"Heading 6 Char\";\r\n\tmso-style-unhide:no;\r\n\tmso-style-locked:yes;\r\n\tmso-style-link:\"Heading 6\";\r\n\tmso-ansi-font-size:11.0pt;\r\n\tmso-bidi-font-size:11.0pt;\r\n\tfont-family:\"Calibri\",sans-serif;\r\n\tmso-ascii-font-family:Calibri;\r\n\tmso-fareast-font-family:\"Times New Roman\";\r\n\tmso-hansi-font-family:Calibri;\r\n\tmso-bidi-font-family:\"Times New Roman\";\r\n\tmso-font-kerning:0pt;\r\n\tmso-ligatures:none;\r\n\tmso-fareast-language:EN-US;\r\n\tmso-bidi-font-weight:bold;}\r\nspan.Heading7Char\r\n\t{mso-style-name:\"Heading 7 Char\";\r\n\tmso-style-unhide:no;\r\n\tmso-style-locked:yes;\r\n\tmso-style-link:\"Heading 7\";\r\n\tmso-ansi-font-size:10.0pt;\r\n\tfont-family:\"Calibri\",sans-serif;\r\n\tmso-ascii-font-family:Calibri;\r\n\tmso-fareast-font-family:\"Times New Roman\";\r\n\tmso-hansi-font-family:Calibri;\r\n\tmso-bidi-font-family:\"Times New Roman\";\r\n\tmso-font-kerning:0pt;\r\n\tmso-ligatures:none;\r\n\tmso-fareast-language:EN-US;}\r\nspan.Heading8Char\r\n\t{mso-style-name:\"Heading 8 Char\";\r\n\tmso-style-unhide:no;\r\n\tmso-style-locked:yes;\r\n\tmso-style-link:\"Heading 8\";\r\n\tmso-ansi-font-size:10.0pt;\r\n\tfont-family:\"Calibri\",sans-serif;\r\n\tmso-ascii-font-family:Calibri;\r\n\tmso-fareast-font-family:\"Times New Roman\";\r\n\tmso-hansi-font-family:Calibri;\r\n\tmso-bidi-font-family:\"Times New Roman\";\r\n\tmso-font-kerning:0pt;\r\n\tmso-ligatures:none;\r\n\tmso-fareast-language:EN-US;\r\n\tmso-bidi-font-style:italic;}\r\nspan.Heading9Char\r\n\t{mso-style-name:\"Heading 9 Char\";\r\n\tmso-style-unhide:no;\r\n\tmso-style-locked:yes;\r\n\tmso-style-link:\"Heading 9\";\r\n\tmso-ansi-font-size:9.0pt;\r\n\tmso-bidi-font-size:11.0pt;\r\n\tfont-family:\"Calibri\",sans-serif;\r\n\tmso-ascii-font-family:Calibri;\r\n\tmso-fareast-font-family:\"Times New Roman\";\r\n\tmso-hansi-font-family:Calibri;\r\n\tmso-bidi-font-family:Arial;\r\n\tmso-font-kerning:0pt;\r\n\tmso-ligatures:none;\r\n\tmso-fareast-language:EN-US;}\r\nspan.CommentTextChar\r\n\t{mso-style-name:\"Comment Text Char\";\r\n\tmso-style-unhide:no;\r\n\tmso-style-locked:yes;\r\n\tmso-style-link:\"Comment Text\";\r\n\tmso-ansi-font-size:10.0pt;\r\n\tmso-bidi-font-size:10.0pt;\r\n\tfont-family:\"Calibri\",sans-serif;\r\n\tmso-fareast-font-family:Calibri;\r\n\tmso-fareast-theme-font:minor-latin;\r\n\tmso-font-kerning:0pt;\r\n\tmso-ligatures:none;\r\n\tmso-fareast-language:EN-US;}\r\nspan.FooterChar\r\n\t{mso-style-name:\"Footer Char\";\r\n\tmso-style-priority:99;\r\n\tmso-style-unhide:no;\r\n\tmso-style-locked:yes;\r\n\tmso-style-link:Footer;\r\n\tmso-ansi-font-size:11.0pt;\r\n\tmso-bidi-font-size:11.0pt;\r\n\tfont-family:\"Calibri\",sans-serif;\r\n\tmso-fareast-font-family:Calibri;\r\n\tmso-fareast-theme-font:minor-latin;\r\n\tmso-font-kerning:0pt;\r\n\tmso-ligatures:none;\r\n\tmso-fareast-language:EN-US;}\r\np.OutHead1, li.OutHead1, div.OutHead1\r\n\t{mso-style-name:OutHead1;\r\n\tmso-style-priority:1;\r\n\tmso-style-unhide:no;\r\n\tmso-style-qformat:yes;\r\n\tmso-style-next:Normal;\r\n\tmargin-top:6.0pt;\r\n\tmargin-right:0in;\r\n\tmargin-bottom:0in;\r\n\tmargin-left:.5in;\r\n\ttext-align:justify;\r\n\ttext-justify:inter-ideograph;\r\n\ttext-indent:-.5in;\r\n\tmso-pagination:widow-orphan;\r\n\tmso-outline-level:1;\r\n\tmso-list:l2 level1 lfo1;\r\n\ttab-stops:list .5in;\r\n\tfont-size:11.0pt;\r\n\tmso-bidi-font-size:10.0pt;\r\n\tfont-family:\"Calibri\",sans-serif;\r\n\tmso-fareast-font-family:\"Times New Roman\";\r\n\tmso-bidi-font-family:\"Times New Roman\";\r\n\tcolor:black;\r\n\tmso-fareast-language:EN-US;}\r\np.OutHead2, li.OutHead2, div.OutHead2\r\n\t{mso-style-name:OutHead2;\r\n\tmso-style-priority:1;\r\n\tmso-style-unhide:no;\r\n\tmso-style-qformat:yes;\r\n\tmso-style-next:Normal;\r\n\tmargin-top:6.0pt;\r\n\tmargin-right:0in;\r\n\tmargin-bottom:0in;\r\n\tmargin-left:.5in;\r\n\ttext-align:justify;\r\n\ttext-justify:inter-ideograph;\r\n\ttext-indent:-.5in;\r\n\tmso-pagination:widow-orphan;\r\n\tmso-outline-level:2;\r\n\tmso-list:l2 level2 lfo1;\r\n\ttab-stops:list .5in;\r\n\tfont-size:11.0pt;\r\n\tmso-bidi-font-size:10.0pt;\r\n\tfont-family:\"Calibri\",sans-serif;\r\n\tmso-fareast-font-family:\"Times New Roman\";\r\n\tmso-bidi-font-family:\"Times New Roman\";\r\n\tcolor:black;\r\n\tmso-fareast-language:EN-US;}\r\np.OutHead3, li.OutHead3, div.OutHead3\r\n\t{mso-style-name:OutHead3;\r\n\tmso-style-priority:1;\r\n\tmso-style-unhide:no;\r\n\tmso-style-qformat:yes;\r\n\tmso-style-next:Normal;\r\n\tmargin-top:6.0pt;\r\n\tmargin-right:0in;\r\n\tmargin-bottom:0in;\r\n\tmargin-left:1.0in;\r\n\ttext-align:justify;\r\n\ttext-justify:inter-ideograph;\r\n\ttext-indent:-.5in;\r\n\tmso-pagination:widow-orphan;\r\n\tmso-outline-level:3;\r\n\tmso-list:l2 level3 lfo1;\r\n\ttab-stops:list 1.0in;\r\n\tfont-size:11.0pt;\r\n\tmso-bidi-font-size:10.0pt;\r\n\tfont-family:\"Calibri\",sans-serif;\r\n\tmso-fareast-font-family:\"Times New Roman\";\r\n\tmso-bidi-font-family:\"Times New Roman\";\r\n\tcolor:black;\r\n\tmso-fareast-language:EN-US;}\r\np.OutHead4, li.OutHead4, div.OutHead4\r\n\t{mso-style-name:OutHead4;\r\n\tmso-style-priority:1;\r\n\tmso-style-unhide:no;\r\n\tmso-style-qformat:yes;\r\n\tmso-style-next:Normal;\r\n\tmargin-top:0in;\r\n\tmargin-right:0in;\r\n\tmargin-bottom:12.0pt;\r\n\tmargin-left:1.0in;\r\n\ttext-indent:-.25in;\r\n\tmso-pagination:widow-orphan;\r\n\tpage-break-after:avoid;\r\n\tmso-outline-level:4;\r\n\tmso-list:l2 level4 lfo1;\r\n\ttab-stops:list 1.0in;\r\n\tfont-size:11.0pt;\r\n\tmso-bidi-font-size:10.0pt;\r\n\tfont-family:\"Calibri\",sans-serif;\r\n\tmso-fareast-font-family:\"Times New Roman\";\r\n\tmso-bidi-font-family:\"Times New Roman\";\r\n\tcolor:black;\r\n\tmso-fareast-language:EN-US;\r\n\tfont-weight:bold;\r\n\tmso-bidi-font-weight:normal;}\r\np.OutHead5, li.OutHead5, div.OutHead5\r\n\t{mso-style-name:OutHead5;\r\n\tmso-style-priority:1;\r\n\tmso-style-unhide:no;\r\n\tmso-style-qformat:yes;\r\n\tmso-style-next:Normal;\r\n\tmargin-top:0in;\r\n\tmargin-right:0in;\r\n\tmargin-bottom:12.0pt;\r\n\tmargin-left:2.5in;\r\n\ttext-indent:-.5in;\r\n\tmso-pagination:widow-orphan;\r\n\tpage-break-after:avoid;\r\n\tmso-outline-level:5;\r\n\tmso-list:l2 level5 lfo1;\r\n\ttab-stops:list 2.5in;\r\n\tfont-size:11.0pt;\r\n\tmso-bidi-font-size:10.0pt;\r\n\tfont-family:\"Calibri\",sans-serif;\r\n\tmso-fareast-font-family:\"Times New Roman\";\r\n\tmso-bidi-font-family:\"Times New Roman\";\r\n\tcolor:black;\r\n\tmso-fareast-language:EN-US;\r\n\tfont-weight:bold;\r\n\tmso-bidi-font-weight:normal;}\r\np.OutHead6, li.OutHead6, div.OutHead6\r\n\t{mso-style-name:OutHead6;\r\n\tmso-style-priority:1;\r\n\tmso-style-unhide:no;\r\n\tmso-style-qformat:yes;\r\n\tmso-style-next:Normal;\r\n\tmargin-top:0in;\r\n\tmargin-right:0in;\r\n\tmargin-bottom:12.0pt;\r\n\tmargin-left:3.0in;\r\n\ttext-indent:-.5in;\r\n\tmso-pagination:widow-orphan;\r\n\tpage-break-after:avoid;\r\n\tmso-outline-level:6;\r\n\tmso-list:l2 level6 lfo1;\r\n\ttab-stops:list 3.0in;\r\n\tfont-size:11.0pt;\r\n\tmso-bidi-font-size:10.0pt;\r\n\tfont-family:\"Calibri\",sans-serif;\r\n\tmso-fareast-font-family:\"Times New Roman\";\r\n\tmso-bidi-font-family:\"Times New Roman\";\r\n\tcolor:black;\r\n\tmso-fareast-language:EN-US;\r\n\tfont-weight:bold;\r\n\tmso-bidi-font-weight:normal;}\r\np.OutHead7, li.OutHead7, div.OutHead7\r\n\t{mso-style-name:OutHead7;\r\n\tmso-style-priority:1;\r\n\tmso-style-unhide:no;\r\n\tmso-style-qformat:yes;\r\n\tmso-style-next:Normal;\r\n\tmargin-top:0in;\r\n\tmargin-right:0in;\r\n\tmargin-bottom:12.0pt;\r\n\tmargin-left:3.5in;\r\n\ttext-indent:-.5in;\r\n\tmso-pagination:widow-orphan;\r\n\tpage-break-after:avoid;\r\n\tmso-outline-level:7;\r\n\tmso-list:l2 level7 lfo1;\r\n\ttab-stops:list 3.5in;\r\n\tfont-size:11.0pt;\r\n\tmso-bidi-font-size:10.0pt;\r\n\tfont-family:\"Calibri\",sans-serif;\r\n\tmso-fareast-font-family:\"Times New Roman\";\r\n\tmso-bidi-font-family:\"Times New Roman\";\r\n\tcolor:black;\r\n\tmso-fareast-language:EN-US;\r\n\tfont-weight:bold;\r\n\tmso-bidi-font-weight:normal;}\r\np.OutHead8, li.OutHead8, div.OutHead8\r\n\t{mso-style-name:OutHead8;\r\n\tmso-style-priority:1;\r\n\tmso-style-unhide:no;\r\n\tmso-style-qformat:yes;\r\n\tmso-style-next:Normal;\r\n\tmargin-top:0in;\r\n\tmargin-right:0in;\r\n\tmargin-bottom:12.0pt;\r\n\tmargin-left:4.0in;\r\n\ttext-indent:-.5in;\r\n\tmso-pagination:widow-orphan;\r\n\tpage-break-after:avoid;\r\n\tmso-outline-level:8;\r\n\tmso-list:l2 level8 lfo1;\r\n\ttab-stops:list 4.0in;\r\n\tfont-size:11.0pt;\r\n\tmso-bidi-font-size:10.0pt;\r\n\tfont-family:\"Calibri\",sans-serif;\r\n\tmso-fareast-font-family:\"Times New Roman\";\r\n\tmso-bidi-font-family:\"Times New Roman\";\r\n\tcolor:black;\r\n\tmso-fareast-language:EN-US;\r\n\tfont-weight:bold;\r\n\tmso-bidi-font-weight:normal;}\r\nspan.normaltextrun\r\n\t{mso-style-name:normaltextrun;\r\n\tmso-style-priority:1;\r\n\tmso-style-unhide:no;}\r\nspan.eop\r\n\t{mso-style-name:eop;\r\n\tmso-style-priority:1;\r\n\tmso-style-unhide:no;}\r\nspan.SpellE\r\n\t{mso-style-name:\"\";\r\n\tmso-spl-e:yes;}\r\nspan.GramE\r\n\t{mso-style-name:\"\";\r\n\tmso-gram-e:yes;}\r\n.MsoChpDefault\r\n\t{mso-style-type:export-only;\r\n\tmso-default-props:yes;\r\n\tfont-family:\"Calibri\",sans-serif;\r\n\tmso-ascii-font-family:Calibri;\r\n\tmso-ascii-theme-font:minor-latin;\r\n\tmso-fareast-font-family:DengXian;\r\n\tmso-fareast-theme-font:minor-fareast;\r\n\tmso-hansi-font-family:Calibri;\r\n\tmso-hansi-theme-font:minor-latin;\r\n\tmso-bidi-font-family:\"Times New Roman\";\r\n\tmso-bidi-theme-font:minor-bidi;}\r\n /* Page Definitions */\r\n @page\r\n\t{mso-footnote-separator:url(\"33333.fld/header.html\") fs;\r\n\tmso-footnote-continuation-separator:url(\"33333.fld/header.html\") fcs;\r\n\tmso-endnote-separator:url(\"33333.fld/header.html\") es;\r\n\tmso-endnote-continuation-separator:url(\"33333.fld/header.html\") ecs;}\r\n@page WordSection1\r\n\t{size:8.5in 11.0in;\r\n\tmargin:1.0in 1.0in 1.0in 1.0in;\r\n\tmso-header-margin:.5in;\r\n\tmso-footer-margin:.5in;\r\n\tmso-even-footer:url(\"33333.fld/header.html\") ef1;\r\n\tmso-footer:url(\"33333.fld/header.html\") f1;\r\n\tmso-first-footer:url(\"33333.fld/header.html\") ff1;\r\n\tmso-paper-source:0;}\r\ndiv.WordSection1\r\n\t{page:WordSection1;}\r\n /* List Definitions */\r\n @list l0\r\n\t{mso-list-id:255947117;\r\n\tmso-list-type:hybrid;\r\n\tmso-list-template-ids:1311002444 796035260 -1765366880 67698715 67698703 67698713 67698715 67698703 67698713 67698715;}\r\n@list l0:level1\r\n\t{mso-level-number-format:roman-lower;\r\n\tmso-level-text:\"%1\\)\";\r\n\tmso-level-tab-stop:none;\r\n\tmso-level-number-position:left;\r\n\tmargin-left:1.0in;\r\n\ttext-indent:-.5in;}\r\n@list l0:level2\r\n\t{mso-level-number-format:alpha-lower;\r\n\tmso-level-text:\"%2\\)\";\r\n\tmso-level-tab-stop:none;\r\n\tmso-level-number-position:left;\r\n\tmargin-left:92.0pt;\r\n\ttext-indent:-20.0pt;\r\n\tmso-ansi-font-weight:bold;}\r\n@list l0:level3\r\n\t{mso-level-number-format:roman-lower;\r\n\tmso-level-tab-stop:none;\r\n\tmso-level-number-position:right;\r\n\tmargin-left:1.75in;\r\n\ttext-indent:-9.0pt;}\r\n@list l0:level4\r\n\t{mso-level-tab-stop:none;\r\n\tmso-level-number-position:left;\r\n\tmargin-left:2.25in;\r\n\ttext-indent:-.25in;}\r\n@list l0:level5\r\n\t{mso-level-number-format:alpha-lower;\r\n\tmso-level-tab-stop:none;\r\n\tmso-level-number-position:left;\r\n\tmargin-left:2.75in;\r\n\ttext-indent:-.25in;}\r\n@list l0:level6\r\n\t{mso-level-number-format:roman-lower;\r\n\tmso-level-tab-stop:none;\r\n\tmso-level-number-position:right;\r\n\tmargin-left:3.25in;\r\n\ttext-indent:-9.0pt;}\r\n@list l0:level7\r\n\t{mso-level-tab-stop:none;\r\n\tmso-level-number-position:left;\r\n\tmargin-left:3.75in;\r\n\ttext-indent:-.25in;}\r\n@list l0:level8\r\n\t{mso-level-number-format:alpha-lower;\r\n\tmso-level-tab-stop:none;\r\n\tmso-level-number-position:left;\r\n\tmargin-left:4.25in;\r\n\ttext-indent:-.25in;}\r\n@list l0:level9\r\n\t{mso-level-number-format:roman-lower;\r\n\tmso-level-tab-stop:none;\r\n\tmso-level-number-position:right;\r\n\tmargin-left:4.75in;\r\n\ttext-indent:-9.0pt;}\r\n@list l1\r\n\t{mso-list-id:582490527;\r\n\tmso-list-template-ids:-1777312264;}\r\n@list l1:level1\r\n\t{mso-level-style-link:\"Heading 1\";\r\n\tmso-level-text:\"Section %1\";\r\n\tmso-level-tab-stop:none;\r\n\tmso-level-number-position:left;\r\n\tmargin-left:0in;\r\n\ttext-indent:0in;\r\n\tfont-variant:normal !important;\r\n\tcolor:black;\r\n\tmso-text-animation:none;\r\n\tmso-hide:none;\r\n\ttext-transform:none;\r\n\tposition:relative;\r\n\ttop:0pt;\r\n\tmso-text-raise:0pt;\r\n\tletter-spacing:0pt;\r\n\tmso-font-kerning:0pt;\r\n\tmso-ansi-font-weight:bold;\r\n\tmso-ansi-font-style:normal;\r\n\tmso-no-proof:no;\r\n\ttext-decoration:none;\r\n\ttext-underline:none;\r\n\ttext-decoration:none;\r\n\ttext-line-through:none;\r\n\tvertical-align:baseline;}\r\n@list l1:level2\r\n\t{mso-level-style-link:\"Heading 2\";\r\n\tmso-level-text:\"%1\\.%2\";\r\n\tmso-level-tab-stop:none;\r\n\tmso-level-number-position:left;\r\n\tmargin-left:27.0pt;\r\n\ttext-indent:-.25in;\r\n\tmso-ansi-font-size:11.0pt;\r\n\tmso-ansi-font-weight:bold;\r\n\tmso-ansi-font-style:normal;\r\n\ttext-decoration:none;\r\n\ttext-line-through:none;}\r\n@list l1:level3\r\n\t{mso-level-number-format:alpha-lower;\r\n\tmso-level-style-link:\"Heading 3\";\r\n\tmso-level-text:\"\\(%3\\)\";\r\n\tmso-level-tab-stop:none;\r\n\tmso-level-number-position:left;\r\n\tmargin-left:49.5pt;\r\n\ttext-indent:-.25in;\r\n\tmso-ansi-font-size:11.0pt;\r\n\ttext-transform:none;\r\n\ttext-decoration:none;\r\n\ttext-underline:none;\r\n\ttext-decoration:none;\r\n\ttext-line-through:none;\r\n\tvertical-align:baseline;}\r\n@list l1:level4\r\n\t{mso-level-number-format:roman-lower;\r\n\tmso-level-style-link:\"Heading 4\";\r\n\tmso-level-text:\"\\(%4\\)\";\r\n\tmso-level-tab-stop:none;\r\n\tmso-level-number-position:left;\r\n\tmargin-left:175.5pt;\r\n\ttext-indent:-.25in;\r\n\tmso-ansi-font-size:13.5pt;\r\n\tmso-bidi-font-size:13.5pt;\r\n\ttext-decoration:none;\r\n\ttext-underline:none;\r\n\ttext-decoration:none;\r\n\ttext-line-through:none;}\r\n@list l1:level5\r\n\t{mso-level-style-link:\"Heading 5\";\r\n\tmso-level-text:\"%5\\)\";\r\n\tmso-level-tab-stop:none;\r\n\tmso-level-number-position:left;\r\n\tmargin-left:1.25in;\r\n\ttext-indent:-.25in;\r\n\tmso-ansi-font-size:11.0pt;\r\n\ttext-decoration:none;\r\n\ttext-underline:none;\r\n\ttext-decoration:none;\r\n\ttext-line-through:none;}\r\n@list l1:level6\r\n\t{mso-level-style-link:\"Heading 6\";\r\n\tmso-level-text:\"%1\\.%2\\.%3\\.%4\\.%5\\.%6\";\r\n\tmso-level-tab-stop:none;\r\n\tmso-level-number-position:left;\r\n\tmargin-left:1.5in;\r\n\ttext-indent:-.25in;\r\n\tmso-ansi-font-size:11.0pt;\r\n\ttext-decoration:none;\r\n\ttext-underline:none;\r\n\ttext-decoration:none;\r\n\ttext-line-through:none;}\r\n@list l1:level7\r\n\t{mso-level-style-link:\"Heading 7\";\r\n\tmso-level-text:\"%1\\.%2\\.%3\\.%4\\.%5\\.%6\\.%7\";\r\n\tmso-level-tab-stop:none;\r\n\tmso-level-number-position:left;\r\n\tmargin-left:1.75in;\r\n\ttext-indent:-.25in;\r\n\tmso-ansi-font-size:11.0pt;\r\n\ttext-decoration:none;\r\n\ttext-underline:none;\r\n\ttext-decoration:none;\r\n\ttext-line-through:none;}\r\n@list l1:level8\r\n\t{mso-level-style-link:\"Heading 8\";\r\n\tmso-level-text:\"%1\\.%2\\.%3\\.%4\\.%5\\.%6\\.%7\\.%8\";\r\n\tmso-level-tab-stop:none;\r\n\tmso-level-number-position:left;\r\n\tmargin-left:2.0in;\r\n\ttext-indent:-.25in;\r\n\tmso-ansi-font-size:11.0pt;\r\n\ttext-decoration:none;\r\n\ttext-underline:none;\r\n\ttext-decoration:none;\r\n\ttext-line-through:none;}\r\n@list l1:level9\r\n\t{mso-level-style-link:\"Heading 9\";\r\n\tmso-level-text:\"%1\\.%2\\.%3\\.%4\\.%5\\.%6\\.%7\\.%8\\.%9\";\r\n\tmso-level-tab-stop:none;\r\n\tmso-level-number-position:left;\r\n\tmargin-left:2.25in;\r\n\ttext-indent:-.25in;\r\n\tmso-ansi-font-size:11.0pt;\r\n\ttext-decoration:none;\r\n\ttext-underline:none;\r\n\ttext-decoration:none;\r\n\ttext-line-through:none;}\r\n@list l2\r\n\t{mso-list-id:876699326;\r\n\tmso-list-template-ids:993452568;}\r\n@list l2:level1\r\n\t{mso-level-style-link:OutHead1;\r\n\tmso-level-tab-stop:.5in;\r\n\tmso-level-number-position:left;\r\n\ttext-indent:-.5in;\r\n\tmso-ansi-font-size:11.0pt;\r\n\tmso-bidi-font-size:11.0pt;\r\n\tfont-family:\"Calibri\",sans-serif;\r\n\tfont-variant:normal !important;\r\n\tmso-text-animation:none;\r\n\ttext-transform:uppercase;\r\n\ttext-effect:none;\r\n\ttext-shadow:none;\r\n\ttext-effect:none;\r\n\ttext-effect:none;\r\n\tmso-ansi-font-weight:bold;\r\n\tmso-ansi-font-style:normal;\r\n\ttext-decoration:none;\r\n\ttext-underline:none;\r\n\ttext-decoration:none;\r\n\ttext-line-through:none;\r\n\tvertical-align:baseline;}\r\n@list l2:level2\r\n\t{mso-level-style-link:OutHead2;\r\n\tmso-level-legal-format:yes;\r\n\tmso-level-text:\"%1\\.%2\\.\";\r\n\tmso-level-tab-stop:.5in;\r\n\tmso-level-number-position:left;\r\n\tmargin-left:.5in;\r\n\ttext-indent:-.5in;\r\n\tmso-ansi-font-size:11.0pt;\r\n\tmso-bidi-font-size:11.0pt;\r\n\tfont-family:\"Calibri\",sans-serif;\r\n\tfont-variant:normal !important;\r\n\tmso-text-animation:none;\r\n\ttext-transform:none;\r\n\ttext-effect:none;\r\n\ttext-shadow:none;\r\n\ttext-effect:none;\r\n\ttext-effect:none;\r\n\tmso-ansi-font-weight:bold;\r\n\tmso-ansi-font-style:normal;\r\n\ttext-decoration:none;\r\n\ttext-underline:none;\r\n\ttext-decoration:none;\r\n\ttext-line-through:none;\r\n\tvertical-align:baseline;}\r\n@list l2:level3\r\n\t{mso-level-style-link:OutHead3;\r\n\tmso-level-legal-format:yes;\r\n\tmso-level-text:\"%1\\.%2\\.%3\\.\";\r\n\tmso-level-tab-stop:1.0in;\r\n\tmso-level-number-position:left;\r\n\tmargin-left:1.0in;\r\n\ttext-indent:-.5in;\r\n\tmso-ansi-font-size:11.0pt;\r\n\tmso-bidi-font-size:11.0pt;\r\n\tfont-family:\"Calibri\",sans-serif;\r\n\tfont-variant:normal !important;\r\n\tmso-text-animation:none;\r\n\ttext-transform:none;\r\n\ttext-effect:none;\r\n\ttext-shadow:none;\r\n\ttext-effect:none;\r\n\ttext-effect:none;\r\n\tmso-ansi-font-weight:normal;\r\n\tmso-bidi-font-weight:bold;\r\n\tmso-ansi-font-style:normal;\r\n\ttext-decoration:none;\r\n\ttext-underline:none;\r\n\ttext-decoration:none;\r\n\ttext-line-through:none;\r\n\tvertical-align:baseline;}\r\n@list l2:level4\r\n\t{mso-level-style-link:OutHead4;\r\n\tmso-level-legal-format:yes;\r\n\tmso-level-text:\"%1\\.%2\\.%4\\.\";\r\n\tmso-level-tab-stop:1.0in;\r\n\tmso-level-number-position:left;\r\n\tmargin-left:1.0in;\r\n\ttext-indent:-.25in;\r\n\tmso-ansi-font-size:12.0pt;\r\n\tfont-family:\"Times New Roman\",serif;\r\n\tfont-variant:normal !important;\r\n\tmso-text-animation:none;\r\n\ttext-transform:none;\r\n\ttext-effect:none;\r\n\ttext-shadow:none;\r\n\ttext-effect:none;\r\n\ttext-effect:none;\r\n\tmso-ansi-font-weight:bold;\r\n\tmso-ansi-font-style:normal;\r\n\ttext-decoration:none;\r\n\ttext-underline:none;\r\n\ttext-decoration:none;\r\n\ttext-line-through:none;\r\n\tvertical-align:baseline;}\r\n@list l2:level5\r\n\t{mso-level-style-link:OutHead5;\r\n\tmso-level-text:\"\\(%5\\)\";\r\n\tmso-level-tab-stop:2.5in;\r\n\tmso-level-number-position:left;\r\n\ttext-indent:-.5in;\r\n\tmso-ansi-font-size:12.0pt;\r\n\tfont-family:\"Times New Roman\",serif;\r\n\tfont-variant:normal !important;\r\n\tmso-text-animation:none;\r\n\ttext-transform:none;\r\n\ttext-effect:none;\r\n\ttext-shadow:none;\r\n\ttext-effect:none;\r\n\ttext-effect:none;\r\n\tmso-ansi-font-weight:bold;\r\n\tmso-ansi-font-style:normal;\r\n\ttext-decoration:none;\r\n\ttext-underline:none;\r\n\ttext-decoration:none;\r\n\ttext-line-through:none;\r\n\tvertical-align:baseline;}\r\n@list l2:level6\r\n\t{mso-level-number-format:alpha-lower;\r\n\tmso-level-style-link:OutHead6;\r\n\tmso-level-text:\"\\(%6\\)\";\r\n\tmso-level-tab-stop:3.0in;\r\n\tmso-level-number-position:left;\r\n\ttext-indent:-.5in;\r\n\tmso-ansi-font-size:12.0pt;\r\n\tfont-family:\"Times New Roman\",serif;\r\n\tfont-variant:normal !important;\r\n\tmso-text-animation:none;\r\n\ttext-transform:none;\r\n\ttext-effect:none;\r\n\ttext-shadow:none;\r\n\ttext-effect:none;\r\n\ttext-effect:none;\r\n\tmso-ansi-font-weight:bold;\r\n\tmso-ansi-font-style:normal;\r\n\ttext-decoration:none;\r\n\ttext-underline:none;\r\n\ttext-decoration:none;\r\n\ttext-line-through:none;\r\n\tvertical-align:baseline;}\r\n@list l2:level7\r\n\t{mso-level-number-format:roman-lower;\r\n\tmso-level-style-link:OutHead7;\r\n\tmso-level-text:\"%7\\)\";\r\n\tmso-level-tab-stop:3.5in;\r\n\tmso-level-number-position:left;\r\n\ttext-indent:-.5in;\r\n\tmso-ansi-font-size:12.0pt;\r\n\tfont-family:\"Times New Roman\",serif;\r\n\tfont-variant:normal !important;\r\n\tmso-text-animation:none;\r\n\ttext-transform:none;\r\n\ttext-effect:none;\r\n\ttext-shadow:none;\r\n\ttext-effect:none;\r\n\ttext-effect:none;\r\n\tmso-ansi-font-weight:bold;\r\n\tmso-ansi-font-style:normal;\r\n\ttext-decoration:none;\r\n\ttext-underline:none;\r\n\ttext-decoration:none;\r\n\ttext-line-through:none;\r\n\tvertical-align:baseline;}\r\n@list l2:level8\r\n\t{mso-level-number-format:alpha-lower;\r\n\tmso-level-style-link:OutHead8;\r\n\tmso-level-text:\"%8\\)\";\r\n\tmso-level-tab-stop:4.0in;\r\n\tmso-level-number-position:left;\r\n\ttext-indent:-.5in;\r\n\tmso-ansi-font-size:12.0pt;\r\n\tfont-family:\"Times New Roman\",serif;\r\n\tfont-variant:normal !important;\r\n\tmso-text-animation:none;\r\n\ttext-transform:none;\r\n\ttext-effect:none;\r\n\ttext-shadow:none;\r\n\ttext-effect:none;\r\n\ttext-effect:none;\r\n\tmso-ansi-font-weight:bold;\r\n\tmso-ansi-font-style:normal;\r\n\ttext-decoration:none;\r\n\ttext-underline:none;\r\n\ttext-decoration:none;\r\n\ttext-line-through:none;\r\n\tvertical-align:baseline;}\r\n@list l2:level9\r\n\t{mso-level-number-format:roman-lower;\r\n\tmso-level-tab-stop:2.25in;\r\n\tmso-level-number-position:left;\r\n\tmargin-left:2.25in;\r\n\ttext-indent:-.25in;}\r\n@list l3\r\n\t{mso-list-id:884752434;\r\n\tmso-list-type:hybrid;\r\n\tmso-list-template-ids:565467318 -1 2042009676 -1 -1 -1 -1 -1 -1 -1;}\r\n@list l3:level1\r\n\t{mso-level-number-format:roman-lower;\r\n\tmso-level-text:\"%1\\)\";\r\n\tmso-level-tab-stop:none;\r\n\tmso-level-number-position:left;\r\n\tmargin-left:1.0in;\r\n\ttext-indent:-.5in;}\r\n@list l3:level2\r\n\t{mso-level-number-format:roman-lower;\r\n\tmso-level-text:\"%2\\)\";\r\n\tmso-level-tab-stop:none;\r\n\tmso-level-number-position:left;\r\n\tmargin-left:.75in;\r\n\ttext-indent:-.25in;}\r\n@list l3:level3\r\n\t{mso-level-number-format:roman-lower;\r\n\tmso-level-tab-stop:none;\r\n\tmso-level-number-position:right;\r\n\tmargin-left:1.75in;\r\n\ttext-indent:-9.0pt;}\r\n@list l3:level4\r\n\t{mso-level-tab-stop:none;\r\n\tmso-level-number-position:left;\r\n\tmargin-left:2.25in;\r\n\ttext-indent:-.25in;}\r\n@list l3:level5\r\n\t{mso-level-number-format:alpha-lower;\r\n\tmso-level-tab-stop:none;\r\n\tmso-level-number-position:left;\r\n\tmargin-left:2.75in;\r\n\ttext-indent:-.25in;}\r\n@list l3:level6\r\n\t{mso-level-number-format:roman-lower;\r\n\tmso-level-tab-stop:none;\r\n\tmso-level-number-position:right;\r\n\tmargin-left:3.25in;\r\n\ttext-indent:-9.0pt;}\r\n@list l3:level7\r\n\t{mso-level-tab-stop:none;\r\n\tmso-level-number-position:left;\r\n\tmargin-left:3.75in;\r\n\ttext-indent:-.25in;}\r\n@list l3:level8\r\n\t{mso-level-number-format:alpha-lower;\r\n\tmso-level-tab-stop:none;\r\n\tmso-level-number-position:left;\r\n\tmargin-left:4.25in;\r\n\ttext-indent:-.25in;}\r\n@list l3:level9\r\n\t{mso-level-number-format:roman-lower;\r\n\tmso-level-tab-stop:none;\r\n\tmso-level-number-position:right;\r\n\tmargin-left:4.75in;\r\n\ttext-indent:-9.0pt;}\r\n@list l4\r\n\t{mso-list-id:957879444;\r\n\tmso-list-type:hybrid;\r\n\tmso-list-template-ids:-2135918686 -1 67698689 -1 -1 -1 -1 -1 -1 -1;}\r\n@list l4:level1\r\n\t{mso-level-number-format:roman-lower;\r\n\tmso-level-text:\"%1\\)\";\r\n\tmso-level-tab-stop:none;\r\n\tmso-level-number-position:left;\r\n\tmargin-left:1.0in;\r\n\ttext-indent:-.5in;}\r\n@list l4:level2\r\n\t{mso-level-number-format:bullet;\r\n\tmso-level-text:;\r\n\tmso-level-tab-stop:none;\r\n\tmso-level-number-position:left;\r\n\tmargin-left:1.25in;\r\n\ttext-indent:-.25in;\r\n\tfont-family:Symbol;}\r\n@list l4:level3\r\n\t{mso-level-number-format:roman-lower;\r\n\tmso-level-tab-stop:none;\r\n\tmso-level-number-position:right;\r\n\tmargin-left:1.75in;\r\n\ttext-indent:-9.0pt;}\r\n@list l4:level4\r\n\t{mso-level-tab-stop:none;\r\n\tmso-level-number-position:left;\r\n\tmargin-left:2.25in;\r\n\ttext-indent:-.25in;}\r\n@list l4:level5\r\n\t{mso-level-number-format:alpha-lower;\r\n\tmso-level-tab-stop:none;\r\n\tmso-level-number-position:left;\r\n\tmargin-left:2.75in;\r\n\ttext-indent:-.25in;}\r\n@list l4:level6\r\n\t{mso-level-number-format:roman-lower;\r\n\tmso-level-tab-stop:none;\r\n\tmso-level-number-position:right;\r\n\tmargin-left:3.25in;\r\n\ttext-indent:-9.0pt;}\r\n@list l4:level7\r\n\t{mso-level-tab-stop:none;\r\n\tmso-level-number-position:left;\r\n\tmargin-left:3.75in;\r\n\ttext-indent:-.25in;}\r\n@list l4:level8\r\n\t{mso-level-number-format:alpha-lower;\r\n\tmso-level-tab-stop:none;\r\n\tmso-level-number-position:left;\r\n\tmargin-left:4.25in;\r\n\ttext-indent:-.25in;}\r\n@list l4:level9\r\n\t{mso-level-number-format:roman-lower;\r\n\tmso-level-tab-stop:none;\r\n\tmso-level-number-position:right;\r\n\tmargin-left:4.75in;\r\n\ttext-indent:-9.0pt;}\r\n@list l5\r\n\t{mso-list-id:1865241303;\r\n\tmso-list-type:hybrid;\r\n\tmso-list-template-ids:878460456 2042009676 1153736034 1142858962 -2106013266 -1037651666 -1431029476 1977495350 -1972974876 409270202;}\r\n@list l5:level1\r\n\t{mso-level-number-format:roman-lower;\r\n\tmso-level-text:\"%1\\)\";\r\n\tmso-level-tab-stop:none;\r\n\tmso-level-number-position:left;\r\n\tmargin-left:.75in;\r\n\ttext-indent:-.25in;}\r\n@list l5:level2\r\n\t{mso-level-number-format:alpha-lower;\r\n\tmso-level-tab-stop:none;\r\n\tmso-level-number-position:left;\r\n\tmargin-left:1.25in;\r\n\ttext-indent:-.25in;}\r\n@list l5:level3\r\n\t{mso-level-number-format:roman-lower;\r\n\tmso-level-tab-stop:none;\r\n\tmso-level-number-position:right;\r\n\tmargin-left:1.75in;\r\n\ttext-indent:-9.0pt;}\r\n@list l5:level4\r\n\t{mso-level-tab-stop:none;\r\n\tmso-level-number-position:left;\r\n\tmargin-left:2.25in;\r\n\ttext-indent:-.25in;}\r\n@list l5:level5\r\n\t{mso-level-number-format:alpha-lower;\r\n\tmso-level-tab-stop:none;\r\n\tmso-level-number-position:left;\r\n\tmargin-left:2.75in;\r\n\ttext-indent:-.25in;}\r\n@list l5:level6\r\n\t{mso-level-number-format:roman-lower;\r\n\tmso-level-tab-stop:none;\r\n\tmso-level-number-position:right;\r\n\tmargin-left:3.25in;\r\n\ttext-indent:-9.0pt;}\r\n@list l5:level7\r\n\t{mso-level-tab-stop:none;\r\n\tmso-level-number-position:left;\r\n\tmargin-left:3.75in;\r\n\ttext-indent:-.25in;}\r\n@list l5:level8\r\n\t{mso-level-number-format:alpha-lower;\r\n\tmso-level-tab-stop:none;\r\n\tmso-level-number-position:left;\r\n\tmargin-left:4.25in;\r\n\ttext-indent:-.25in;}\r\n@list l5:level9\r\n\t{mso-level-number-format:roman-lower;\r\n\tmso-level-tab-stop:none;\r\n\tmso-level-number-position:right;\r\n\tmargin-left:4.75in;\r\n\ttext-indent:-9.0pt;}\r\nol\r\n\t{margin-bottom:0in;}\r\nul\r\n\t{margin-bottom:0in;}\r\n-->\r\n</style>\r\n<!--[if gte mso 10]>\r\n<style>\r\n /* Style Definitions */\r\n table.MsoNormalTable\r\n\t{mso-style-name:\"Table Normal\";\r\n\tmso-tstyle-rowband-size:0;\r\n\tmso-tstyle-colband-size:0;\r\n\tmso-style-noshow:yes;\r\n\tmso-style-priority:99;\r\n\tmso-style-parent:\"\";\r\n\tmso-padding-alt:0in 5.4pt 0in 5.4pt;\r\n\tmso-para-margin:0in;\r\n\tmso-pagination:widow-orphan;\r\n\tfont-size:12.0pt;\r\n\tfont-family:\"Calibri\",sans-serif;\r\n\tmso-ascii-font-family:Calibri;\r\n\tmso-ascii-theme-font:minor-latin;\r\n\tmso-hansi-font-family:Calibri;\r\n\tmso-hansi-theme-font:minor-latin;\r\n\tmso-bidi-font-family:\"Times New Roman\";\r\n\tmso-bidi-theme-font:minor-bidi;\r\n\tmso-font-kerning:1.0pt;\r\n\tmso-ligatures:standardcontextual;}\r\n</style>\r\n<![endif]-->\r\n</head>\r\n\r\n<body lang=EN-US link=blue vlink=\"#954F72\" style='tab-interval:.5in;word-wrap:\r\nbreak-word'>\r\n\r\n<div class=WordSection1>\r\n\r\n<p class=MsoNormal style='margin-top:12.0pt;line-height:normal'><b><span\r\nstyle='mso-ascii-font-family:Calibri;mso-fareast-font-family:\"Times New Roman\";\r\nmso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;color:#7F7F7F;\r\nmso-themecolor:text1;mso-themetint:128'>Microsoft pubCenter Publisher Terms and\r\nConditions</span></b><span style='mso-ascii-font-family:Calibri;mso-fareast-font-family:\r\n\"Times New Roman\";mso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;\r\ncolor:#7F7F7F;mso-themecolor:text1;mso-themetint:128'><o:p></o:p></span></p>\r\n\r\n<p class=MsoNormal style='margin-top:12.0pt;text-align:justify;text-justify:\r\ninter-ideograph;line-height:normal'><b><span style='font-size:10.0pt;\r\nmso-ascii-font-family:Calibri;mso-fareast-font-family:\"Times New Roman\";\r\nmso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;color:#7F7F7F;\r\nmso-themecolor:text1;mso-themetint:128'>IF YOUR PRINCIPAL PLACE OF BUSINESS IS\r\nIN THE UNITED STATES, SECTION 19 CONTAINS A BINDING ARBITRATION CLAUSE AND\r\nCLASS ACTION WAIVER. IT AFFECTS YOUR RIGHTS ABOUT HOW TO RESOLVE ANY DISPUTE\r\nWITH MICROSOFT. PLEASE READ IT.</span></b><span style='font-size:10.0pt;\r\nmso-ascii-font-family:Calibri;mso-fareast-font-family:\"Times New Roman\";\r\nmso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;color:#7F7F7F;\r\nmso-themecolor:text1;mso-themetint:128'><o:p></o:p></span></p>\r\n\r\n<p class=MsoNormal style='line-height:normal'><b><span style='font-size:10.0pt;\r\nmso-ascii-font-family:Calibri;mso-fareast-font-family:\"Times New Roman\";\r\nmso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;color:#7F7F7F;\r\nmso-themecolor:text1;mso-themetint:128'>1.&nbsp;INTRODUCTION.&nbsp;</span></b><span\r\nstyle='font-size:10.0pt;mso-ascii-font-family:Calibri;mso-fareast-font-family:\r\n\"Times New Roman\";mso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;\r\ncolor:#7F7F7F;mso-themecolor:text1;mso-themetint:128'>These publisher terms and\r\nconditions are an agreement (“<b>Agreement</b>”) between&nbsp;you&nbsp;(&quot;<b>You</b>&quot;)\r\nand Microsoft.<span style='mso-spacerun:yes'>  </span></span><strong><span\r\nstyle='font-size:10.0pt;font-family:\"Calibri\",sans-serif;color:#7F7F7F;\r\nmso-themecolor:text1;mso-themetint:128;background:white'>“Microsoft”&nbsp;</span></strong><span\r\nstyle='font-size:10.0pt;mso-ascii-font-family:Calibri;mso-hansi-font-family:\r\nCalibri;mso-bidi-font-family:Calibri;color:#7F7F7F;mso-themecolor:text1;\r\nmso-themetint:128;background:white'>means Microsoft Online, Inc. (6880 Sierra\r\nCenter Parkway, Reno, NV 89511 USA) unless your principal place of business is\r\nin (a) India in which case “Microsoft” means Microsoft Corporation (India)\r\nPrivate Limited (Level 10, Tower C, Epitome, Building No. 5, DLF Cyber City,\r\nPhase 3, Gurugram 122002 – Haryana, India), (b) Brazil in which case “Microsoft”\r\nmeans Microsoft do <span class=SpellE>Brasil</span> <span class=SpellE>Importação</span>\r\ne <span class=SpellE>Comércio</span> de Software e Video Games Ltda., enrolled\r\nwith the CNPJ under No. 04.712.500/0001-07 (Av. <span class=SpellE>Presidente</span>\r\n<span class=SpellE>Juscelino</span> <span class=SpellE>Kubitscheck</span> 1909,\r\nTorre Sul, 18 Andar, conj. 181 – Vila Nova <span class=SpellE>Conceição</span>,\r\nCEP: 04543-907 São Paulo/SP <span class=SpellE>Brasil</span>), or (c) Europe,\r\nthe Middle East,</span><span style='font-size:10.0pt;mso-ascii-font-family:\r\nCalibri;mso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;color:#7F7F7F;\r\nmso-themecolor:text1;mso-themetint:128'> or<span style='background:white'>\r\nAfrica (“EMEA”) or Asia-Pacific (“APAC”) in which case “Microsoft” means\r\nMicrosoft Ireland Operations Limited (One Microsoft Place, South County\r\nBusiness Park, <span class=SpellE>Leopardstown</span>, Dublin, Ireland 18, D18\r\nP521)</span></span><span style='font-size:10.0pt;mso-ascii-font-family:Calibri;\r\nmso-fareast-font-family:\"Times New Roman\";mso-hansi-font-family:Calibri;\r\nmso-bidi-font-family:Calibri;color:#7F7F7F;mso-themecolor:text1;mso-themetint:\r\n128'>. <span style='mso-spacerun:yes'> </span>This Agreement incorporates by\r\nreference the terms of the Microsoft Services Agreement\r\n(https://www.microsoft.com/en-us/servicesagreement/); provided, however, in the\r\nevent of any conflict between the terms of the Microsoft Services Agreement\r\nthat are applicable to You and this Agreement, the terms of this Agreement\r\nshall control.<span style='mso-spacerun:yes'>  </span>This Agreement applies to\r\nYour participation in or use of one or more of the following offerings\r\navailable through Microsoft pubCenter (collectively, &quot;pubCenter\r\nPrograms&quot;), including the following Microsoft pubCenter offerings: <span\r\nstyle='mso-spacerun:yes'> </span>(a) the Microsoft pubCenter offering for web\r\npublishers (“<b>pubCenter Program for Web Publishers</b>”); (b) the Microsoft\r\npubCenter offering for mobile application developers (“<b>pubCenter Program for\r\nMobile App Developers</b>”); (c) the Microsoft pubCenter offering for Windows\r\napplications developers (“<b>pubCenter Program for Win App Developers</b>”);\r\nand (d) the Microsoft pubCenter offering for Xbox applications developers (“<b>pubCenter\r\nProgram for Xbox App Developers</b>”).<span style='mso-spacerun:yes'>  </span>Notwithstanding\r\nthe foregoing, (a) if You have separately negotiated an agreement with\r\nMicrosoft covering a pubCenter Program, that separately negotiated agreement\r\ncontinues to apply with respect to the applicable pubCenter Program, or (b) if\r\nYou have another type of separately negotiated agreement with Microsoft (i.e.,\r\nnot specifically covering a pubCenter Program) that separately negotiated\r\nagreement shall apply to the extent it conflicts with the terms of this\r\nAgreement.&nbsp; <o:p></o:p></span></p>\r\n\r\n<p class=MsoNormal style='text-align:justify;text-justify:inter-ideograph;\r\nline-height:normal'><b><span style='font-size:10.0pt;mso-ascii-font-family:\r\nCalibri;mso-fareast-font-family:\"Times New Roman\";mso-hansi-font-family:Calibri;\r\nmso-bidi-font-family:Calibri;color:#7F7F7F;mso-themecolor:text1;mso-themetint:\r\n128'>2.&nbsp;MICROSOFT PUBCENTER</span></b><span style='font-size:10.0pt;\r\nmso-ascii-font-family:Calibri;mso-fareast-font-family:\"Times New Roman\";\r\nmso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;color:#7F7F7F;\r\nmso-themecolor:text1;mso-themetint:128'>. Subject to Your compliance with this\r\nAgreement and such other rules, policies, requirements, and procedures as\r\nMicrosoft may publish on the pubCenter website located at&nbsp;</span><span\r\nstyle='font-size:8.0pt'><a href=\"http://pubcenter.microsoft.com/\"><span\r\nstyle='font-size:10.0pt;mso-ascii-font-family:Calibri;mso-fareast-font-family:\r\n\"Times New Roman\";mso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;\r\ncolor:#7F7F7F;mso-themecolor:text1;mso-themetint:128'>http://pubcenter.microsoft.com</span></a></span><u><span\r\nstyle='font-size:10.0pt;mso-ascii-font-family:Calibri;mso-fareast-font-family:\r\n\"Times New Roman\";mso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;\r\ncolor:#7F7F7F;mso-themecolor:text1;mso-themetint:128'> </span></u><span\r\nstyle='font-size:10.0pt;mso-ascii-font-family:Calibri;mso-fareast-font-family:\r\n\"Times New Roman\";mso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;\r\ncolor:#7F7F7F;mso-themecolor:text1;mso-themetint:128'>(the &quot;<b>pubCenter\r\nSite</b>”) or as published at</span><span style='font-size:8.0pt;mso-ascii-font-family:\r\nCalibri;mso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;color:#7F7F7F;\r\nmso-themecolor:text1;mso-themetint:128'> </span><span style='font-size:10.0pt;\r\nmso-ascii-font-family:Calibri;mso-fareast-font-family:\"Times New Roman\";\r\nmso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;color:#7F7F7F;\r\nmso-themecolor:text1;mso-themetint:128'>https://about.ads.microsoft.com/en-us/policies/home\r\n(“</span><span style='font-size:8.0pt'><a\r\nhref=\"https://about.ads.microsoft.com/en-us/policies/home\"><span\r\nstyle='font-size:10.0pt;mso-bidi-font-family:Calibri;color:#7F7F7F;mso-themecolor:\r\ntext1;mso-themetint:128'>Policies and Guidelines - Microsoft Advertising</span></a></span><span\r\nstyle='font-size:8.0pt;mso-ascii-font-family:Calibri;mso-hansi-font-family:\r\nCalibri;mso-bidi-font-family:Calibri;color:#7F7F7F;mso-themecolor:text1;\r\nmso-themetint:128'>”)</span><span style='font-size:10.0pt;mso-ascii-font-family:\r\nCalibri;mso-fareast-font-family:\"Times New Roman\";mso-hansi-font-family:Calibri;\r\nmso-bidi-font-family:Calibri;color:#7F7F7F;mso-themecolor:text1;mso-themetint:\r\n128'> or as otherwise made available to<span style='mso-spacerun:yes'> \r\n</span>You from time to time (the “<b>Policies</b>”),&nbsp;You&nbsp;may access\r\nthe pubCenter Programs through the pubCenter website. You may access the\r\npubCenter Site solely to manage&nbsp;Your&nbsp;accounts for the pubCenter\r\nPrograms (“<b>Accounts</b>”) for the purpose(s) described hereunder. You may\r\nalso authorize third parties (“<b>Agents</b>”) to access the pubCenter Site and\r\nmanage Your Accounts on Your behalf; provided, however that You will be jointly\r\nand severally responsible for the activities of Your Agents in association with\r\nthe use of the pubCenter Site.<o:p></o:p></span></p>\r\n\r\n<p class=MsoNormal style='text-align:justify;text-justify:inter-ideograph;\r\nline-height:normal'><b><span style='font-size:10.0pt;mso-ascii-font-family:\r\nCalibri;mso-fareast-font-family:\"Times New Roman\";mso-hansi-font-family:Calibri;\r\nmso-bidi-font-family:Calibri;color:#7F7F7F;mso-themecolor:text1;mso-themetint:\r\n128'>3.&nbsp;PUBCENTER CREDENTIALS.</span></b><span style='font-size:10.0pt;\r\nmso-ascii-font-family:Calibri;mso-fareast-font-family:\"Times New Roman\";\r\nmso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;color:#7F7F7F;\r\nmso-themecolor:text1;mso-themetint:128'>&nbsp;You </span><span\r\nstyle='font-size:10.0pt;mso-ascii-font-family:Calibri;mso-hansi-font-family:\r\nCalibri;mso-bidi-font-family:Calibri;color:#7F7F7F;mso-themecolor:text1;\r\nmso-themetint:128;background:white'>agree not to use any false, <span\r\nclass=GramE>inaccurate</span> or misleading information when signing up for\r\nYour Accounts, and You </span><span style='font-size:10.0pt;mso-ascii-font-family:\r\nCalibri;mso-fareast-font-family:\"Times New Roman\";mso-hansi-font-family:Calibri;\r\nmso-bidi-font-family:Calibri;color:#7F7F7F;mso-themecolor:text1;mso-themetint:\r\n128'>must protect any passwords or other credentials associated with Your\r\nAccounts (“<b>Credentials</b>”), keep the Credentials confidential and take\r\nfull and sole responsibility for any use of Your Credentials and any activities\r\noccurred under Your Account. You must <span class=GramE>keep all required\r\nregistration and other Account related information up to date at all times</span>.\r\nIf&nbsp;You&nbsp;suspect any improper or unauthorized use of Your Accounts or\r\nother security issues that may affect a pubCenter Program, <span class=GramE>You</span>\r\nmust contact Microsoft immediately at&nbsp;</span><span style='font-size:8.0pt'><a\r\nhref=\"mailto:pubhelp@microsoft.com\"><span style='font-size:10.0pt;mso-ascii-font-family:\r\nCalibri;mso-fareast-font-family:\"Times New Roman\";mso-hansi-font-family:Calibri;\r\nmso-bidi-font-family:Calibri;color:#7F7F7F;mso-themecolor:text1;mso-themetint:\r\n128;text-decoration:none;text-underline:none'>pubhelp@microsoft.com</span></a></span><span\r\nstyle='font-size:10.0pt;mso-ascii-font-family:Calibri;mso-fareast-font-family:\r\n\"Times New Roman\";mso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;\r\ncolor:#7F7F7F;mso-themecolor:text1;mso-themetint:128'> or another email address\r\nspecified by Microsoft.<span style='mso-spacerun:yes'>  </span></span><span\r\nstyle='font-size:10.0pt;mso-ascii-font-family:Calibri;mso-hansi-font-family:\r\nCalibri;mso-bidi-font-family:Calibri;color:#7F7F7F;mso-themecolor:text1;\r\nmso-themetint:128;background:white'>If we reasonably suspect that Your Accounts\r\nare at risk of being used by a third party fraudulently (for example, as a\r\nresult of an Account compromise), or if Microsoft discovers a security breach\r\nthat is affecting a pubCenter Program, Microsoft may take actions that\r\nMicrosoft deems necessary to address or minimize the impact of the security\r\nissue, including but not limited to suspending Your Account until You can\r\nreclaim ownership,</span><span style='font-size:10.0pt;mso-ascii-font-family:\r\nCalibri;mso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;color:#7F7F7F;\r\nmso-themecolor:text1;mso-themetint:128'> requiring you to update your<span\r\nstyle='background:white'> </span>Credentials, <span style='background:white'>or\r\nstop delivering advertising.</span> You agree to cooperate in a timely manner\r\nwith reasonable requests from Microsoft in connection with any security or data\r\nincidents. </span><span style='font-size:6.5pt;mso-ascii-font-family:Calibri;\r\nmso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;color:#7F7F7F;\r\nmso-themecolor:text1;mso-themetint:128;background:white'>&nbsp;</span><b><span\r\nstyle='font-size:10.0pt;mso-ascii-font-family:Calibri;mso-fareast-font-family:\r\n\"Times New Roman\";mso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;\r\ncolor:#7F7F7F;mso-themecolor:text1;mso-themetint:128'><o:p></o:p></span></b></p>\r\n\r\n<p class=MsoCommentText><b><span style='mso-ascii-font-family:Calibri;\r\nmso-fareast-font-family:\"Times New Roman\";mso-hansi-font-family:Calibri;\r\nmso-bidi-font-family:Calibri;color:#7F7F7F;mso-themecolor:text1;mso-themetint:\r\n128'>4.&nbsp;USE OF PUBCENTER PROGRAMS.&nbsp;<o:p></o:p></span></b></p>\r\n\r\n<p class=MsoCommentText style='margin-bottom:0in'><span class=GramE><b><span\r\nstyle='mso-ascii-font-family:Calibri;mso-fareast-font-family:\"Times New Roman\";\r\nmso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;color:#7F7F7F;\r\nmso-themecolor:text1;mso-themetint:128'>a</span></b><span style='mso-ascii-font-family:\r\nCalibri;mso-fareast-font-family:\"Times New Roman\";mso-hansi-font-family:Calibri;\r\nmso-bidi-font-family:Calibri;color:#7F7F7F;mso-themecolor:text1;mso-themetint:\r\n128'>)When</span></span><span style='mso-ascii-font-family:Calibri;mso-fareast-font-family:\r\n\"Times New Roman\";mso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;\r\ncolor:#7F7F7F;mso-themecolor:text1;mso-themetint:128'> accessing and using the\r\npubCenter Programs, You agree to comply with the terms of this Agreement, the\r\nPolicies, and all applicable laws and regulations. You may access and use only\r\nthe pubCenter Programs for which&nbsp;You&nbsp;have been approved by Microsoft.\r\nApproval for Your access and use of a pubCenter Program is at Microsoft’s sole\r\ndiscretion and does not provide&nbsp;You&nbsp;with any right to access and use\r\nany other pubCenter Program without separate Microsoft approval. In addition, <span\r\nclass=GramE>You</span> agree to access and use the pubCenter Programs,\r\nincluding any associated tags, APIs, or code, (a) only in accordance with\r\nMicrosoft’s technical specifications and (b) only with Your websites (“<b>Websites</b>”),\r\nmobile applications (“<b>Mobile&nbsp;Apps</b>”), Xbox applications (“<b>Xbox\r\nApps</b>”) and Windows applications (“<b>Win Apps</b>”) that have been approved\r\nby Microsoft and properly registered with the pubCenter Programs. You also\r\nagree to the Microsoft API terms of use at </span><span style='font-size:6.5pt'><a\r\nhref=\"https://learn.microsoft.com/en-us/legal/microsoft-apis/terms-of-use\"><span\r\nstyle='font-size:10.0pt;mso-bidi-font-family:Calibri;color:#7F7F7F;mso-themecolor:\r\ntext1;mso-themetint:128'>https://learn.microsoft.com/en-us/legal/microsoft-apis/terms-of-use</span></a></span><span\r\nstyle='mso-ascii-font-family:Calibri;mso-fareast-font-family:\"Times New Roman\";\r\nmso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;color:#7F7F7F;\r\nmso-themecolor:text1;mso-themetint:128'>, if applicable to your access or use.\r\nFor the purposes of this Agreement, Websites, Mobile Apps, Xbox Apps, and Win\r\nApps are referred to collectively as&nbsp;<b>“Properties.</b>”<span\r\nstyle='mso-spacerun:yes'>  </span></span><span style='mso-ascii-font-family:\r\nCalibri;mso-fareast-font-family:DengXian;mso-fareast-theme-font:minor-fareast;\r\nmso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;color:#7F7F7F;\r\nmso-themecolor:text1;mso-themetint:128'>You acknowledge that Microsoft’s\r\napproval of a <span class=GramE>Property</span> is not a certification or\r\nendorsement of that Property.<span style='mso-spacerun:yes'>  </span>Your\r\nProperties shall <span class=GramE>at all times</span> comply with the\r\nPolicies.</span><span style='mso-ascii-font-family:Calibri;mso-fareast-font-family:\r\n\"Times New Roman\";mso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;\r\ncolor:#7F7F7F;mso-themecolor:text1;mso-themetint:128'><o:p></o:p></span></p>\r\n\r\n<p class=MsoCommentText style='margin-bottom:0in'><span class=GramE><b><span\r\nstyle='mso-ascii-font-family:Calibri;mso-fareast-font-family:\"Times New Roman\";\r\nmso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;color:#7F7F7F;\r\nmso-themecolor:text1;mso-themetint:128'>b</span></b><span style='mso-ascii-font-family:\r\nCalibri;mso-fareast-font-family:\"Times New Roman\";mso-hansi-font-family:Calibri;\r\nmso-bidi-font-family:Calibri;color:#7F7F7F;mso-themecolor:text1;mso-themetint:\r\n128'>)<u>Advertisers</u></span></span><u><span style='mso-ascii-font-family:\r\nCalibri;mso-fareast-font-family:\"Times New Roman\";mso-hansi-font-family:Calibri;\r\nmso-bidi-font-family:Calibri;color:#7F7F7F;mso-themecolor:text1;mso-themetint:\r\n128'>’ Right to <span class=SpellE>Opt</span> In or <span class=SpellE>Opt</span>\r\nOut</span></u><span style='mso-ascii-font-family:Calibri;mso-fareast-font-family:\r\n\"Times New Roman\";mso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;\r\ncolor:#7F7F7F;mso-themecolor:text1;mso-themetint:128'>. Microsoft may provide\r\nadvertisers with a list of Properties and publisher names for the purpose of\r\nallowing advertisers to identify certain Properties and publishers on which it\r\ndoes or does not wish to place its ads.<span style='mso-spacerun:yes'> \r\n</span>Microsoft will not be required to disclose to You whether any individual\r\nadvertiser chose to exercise this right <span class=GramE>with regard to</span>\r\nYou or Your Properties.<o:p></o:p></span></p>\r\n\r\n<p class=MsoCommentText style='margin-bottom:0in'><b><span style='mso-ascii-font-family:\r\nCalibri;mso-fareast-font-family:\"Times New Roman\";mso-hansi-font-family:Calibri;\r\nmso-bidi-font-family:Calibri;color:#7F7F7F;mso-themecolor:text1;mso-themetint:\r\n128'>c</span></b><span style='mso-ascii-font-family:Calibri;mso-fareast-font-family:\r\n\"Times New Roman\";mso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;\r\ncolor:#7F7F7F;mso-themecolor:text1;mso-themetint:128'>)</span><span\r\nstyle='font-size:4.0pt;mso-ascii-font-family:Calibri;mso-fareast-font-family:\r\n\"Times New Roman\";mso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;\r\ncolor:#7F7F7F;mso-themecolor:text1;mso-themetint:128'>&nbsp;</span><u><span\r\nstyle='mso-ascii-font-family:Calibri;mso-fareast-font-family:\"Times New Roman\";\r\nmso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;color:#7F7F7F;\r\nmso-themecolor:text1;mso-themetint:128'>Cooperation</span></u><span\r\nstyle='mso-ascii-font-family:Calibri;mso-fareast-font-family:\"Times New Roman\";\r\nmso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;color:#7F7F7F;\r\nmso-themecolor:text1;mso-themetint:128'>.&nbsp;&nbsp;You will provide, via\r\ntelephone and e-mail, <span class=GramE>cooperation</span> and assistance that\r\nMicrosoft reasonably requests related to customer service, billing and\r\ncollections for the advertisers associated with the ads that Microsoft sells\r\nwithin Your Properties.<o:p></o:p></span></p>\r\n\r\n<p class=MsoCommentText style='margin-bottom:0in'><b><span style='mso-ascii-font-family:\r\nCalibri;mso-fareast-font-family:\"Times New Roman\";mso-hansi-font-family:Calibri;\r\nmso-bidi-font-family:Calibri;color:#7F7F7F;mso-themecolor:text1;mso-themetint:\r\n128'>d</span></b><span style='mso-ascii-font-family:Calibri;mso-fareast-font-family:\r\n\"Times New Roman\";mso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;\r\ncolor:#7F7F7F;mso-themecolor:text1;mso-themetint:128'>)Implementation\r\nResponsibilities.&nbsp;&nbsp;You will:<o:p></o:p></span></p>\r\n\r\n<p class=MsoListParagraphCxSpFirst style='margin-top:0in;margin-right:0in;\r\nmargin-bottom:0in;margin-left:1.0in;mso-add-space:auto;text-align:justify;\r\ntext-justify:inter-ideograph;text-indent:-.5in;line-height:normal;mso-list:\r\nl0 level1 lfo4'><![if !supportLists]><span style='font-size:10.0pt;mso-ascii-font-family:\r\nCalibri;mso-fareast-font-family:Calibri;mso-hansi-font-family:Calibri;\r\nmso-bidi-font-family:Calibri;color:#7F7F7F;mso-themecolor:text1;mso-themetint:\r\n128'><span style='mso-list:Ignore'>i)<span style='font:7.0pt \"Times New Roman\"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\r\n</span></span></span><![endif]><span style='font-size:10.0pt;mso-ascii-font-family:\r\nCalibri;mso-fareast-font-family:\"Times New Roman\";mso-hansi-font-family:Calibri;\r\nmso-bidi-font-family:Calibri;color:#7F7F7F;mso-themecolor:text1;mso-themetint:\r\n128'>Deploy identifiers or other technologies designated by Microsoft (“<b>Microsoft\r\nAds SDK</b>”), and </span><span style='font-size:10.0pt;mso-ascii-font-family:\r\nCalibri;mso-fareast-font-family:DengXian;mso-fareast-theme-font:minor-fareast;\r\nmso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;color:#7F7F7F;\r\nmso-themecolor:text1;mso-themetint:128'>provide information that Microsoft\r\nreasonably requests, in accordance with Microsoft’s technical requirements and <span\r\nclass=GramE>instructions<span style='mso-fareast-font-family:\"Times New Roman\"'>;</span></span></span><span\r\nstyle='font-size:10.0pt;mso-ascii-font-family:Calibri;mso-fareast-font-family:\r\n\"Times New Roman\";mso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;\r\ncolor:#7F7F7F;mso-themecolor:text1;mso-themetint:128'><o:p></o:p></span></p>\r\n\r\n<p class=MsoListParagraphCxSpMiddle style='margin-top:0in;margin-right:0in;\r\nmargin-bottom:0in;margin-left:1.0in;mso-add-space:auto;text-align:justify;\r\ntext-justify:inter-ideograph;text-indent:-.5in;line-height:normal;mso-list:\r\nl0 level1 lfo4'><![if !supportLists]><span style='font-size:10.0pt;mso-ascii-font-family:\r\nCalibri;mso-fareast-font-family:Calibri;mso-hansi-font-family:Calibri;\r\nmso-bidi-font-family:Calibri;color:#7F7F7F;mso-themecolor:text1;mso-themetint:\r\n128'><span style='mso-list:Ignore'>ii)<span style='font:7.0pt \"Times New Roman\"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\r\n</span></span></span><![endif]><span style='font-size:10.0pt;mso-ascii-font-family:\r\nCalibri;mso-fareast-font-family:\"Times New Roman\";mso-hansi-font-family:Calibri;\r\nmso-bidi-font-family:Calibri;color:#7F7F7F;mso-themecolor:text1;mso-themetint:\r\n128'>test&nbsp;on Your Property the deployment of ad formats and browsers\r\nspecified by <span class=GramE>Microsoft;</span><o:p></o:p></span></p>\r\n\r\n<p class=MsoListParagraphCxSpMiddle style='margin-top:0in;margin-right:0in;\r\nmargin-bottom:0in;margin-left:1.0in;mso-add-space:auto;text-align:justify;\r\ntext-justify:inter-ideograph;text-indent:-.5in;line-height:normal;mso-list:\r\nl0 level1 lfo4'><![if !supportLists]><span style='font-size:10.0pt;mso-ascii-font-family:\r\nCalibri;mso-fareast-font-family:Calibri;mso-hansi-font-family:Calibri;\r\nmso-bidi-font-family:Calibri;color:#7F7F7F;mso-themecolor:text1;mso-themetint:\r\n128'><span style='mso-list:Ignore'>iii)<span style='font:7.0pt \"Times New Roman\"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\r\n</span></span></span><![endif]><span style='font-size:10.0pt;mso-ascii-font-family:\r\nCalibri;mso-fareast-font-family:\"Times New Roman\";mso-hansi-font-family:Calibri;\r\nmso-bidi-font-family:Calibri;color:#7F7F7F;mso-themecolor:text1;mso-themetint:\r\n128'>in&nbsp;a timely manner, make reasonable efforts to cooperate to resolve\r\nproblems identified during testing of Your <span class=GramE>Property;</span><o:p></o:p></span></p>\r\n\r\n<p class=MsoListParagraphCxSpMiddle style='margin-top:0in;margin-right:0in;\r\nmargin-bottom:0in;margin-left:1.0in;mso-add-space:auto;text-align:justify;\r\ntext-justify:inter-ideograph;text-indent:-.5in;line-height:normal;mso-list:\r\nl0 level1 lfo4'><![if !supportLists]><span style='font-size:10.0pt;mso-ascii-font-family:\r\nCalibri;mso-fareast-font-family:Calibri;mso-hansi-font-family:Calibri;\r\nmso-bidi-font-family:Calibri;color:#7F7F7F;mso-themecolor:text1;mso-themetint:\r\n128'><span style='mso-list:Ignore'>iv)<span style='font:7.0pt \"Times New Roman\"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\r\n</span></span></span><![endif]><span style='font-size:10.0pt;mso-ascii-font-family:\r\nCalibri;mso-fareast-font-family:\"Times New Roman\";mso-hansi-font-family:Calibri;\r\nmso-bidi-font-family:Calibri;color:#7F7F7F;mso-themecolor:text1;mso-themetint:\r\n128'>incorporate into Your Property all guidance, specifications, placement\r\nguidelines, documentation and other consultation related to ads (e.g.,\r\nplacement, sizes, experiences, formats, etc.) that Microsoft provides to You\r\n(if any<span class=GramE>);</span><o:p></o:p></span></p>\r\n\r\n<p class=MsoListParagraphCxSpMiddle style='margin-top:0in;margin-right:0in;\r\nmargin-bottom:0in;margin-left:1.0in;mso-add-space:auto;text-align:justify;\r\ntext-justify:inter-ideograph;text-indent:-.5in;line-height:normal;mso-list:\r\nl0 level1 lfo4'><![if !supportLists]><span style='font-size:10.0pt;mso-ascii-font-family:\r\nCalibri;mso-fareast-font-family:Calibri;mso-hansi-font-family:Calibri;\r\nmso-bidi-font-family:Calibri;color:#7F7F7F;mso-themecolor:text1;mso-themetint:\r\n128'><span style='mso-list:Ignore'>v)<span style='font:7.0pt \"Times New Roman\"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\r\n</span></span></span><![endif]><span style='font-size:10.0pt;mso-ascii-font-family:\r\nCalibri;mso-fareast-font-family:\"Times New Roman\";mso-hansi-font-family:Calibri;\r\nmso-bidi-font-family:Calibri;color:#7F7F7F;mso-themecolor:text1;mso-themetint:\r\n128'>cooperate&nbsp;in good faith with Microsoft’s reasonable requests to\r\noptimize and test modifications to the Microsoft Ads SDK to improve performance;\r\nand<o:p></o:p></span></p>\r\n\r\n<p class=MsoListParagraphCxSpLast style='margin-top:0in;margin-right:0in;\r\nmargin-bottom:0in;margin-left:1.0in;mso-add-space:auto;text-align:justify;\r\ntext-justify:inter-ideograph;text-indent:-.5in;line-height:normal;mso-list:\r\nl0 level1 lfo4'><![if !supportLists]><span style='font-size:10.0pt;mso-ascii-font-family:\r\nCalibri;mso-fareast-font-family:Calibri;mso-hansi-font-family:Calibri;\r\nmso-bidi-font-family:Calibri;color:#7F7F7F;mso-themecolor:text1;mso-themetint:\r\n128'><span style='mso-list:Ignore'>vi)<span style='font:7.0pt \"Times New Roman\"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\r\n</span></span></span><![endif]><span style='font-size:10.0pt;mso-ascii-font-family:\r\nCalibri;mso-fareast-font-family:\"Times New Roman\";mso-hansi-font-family:Calibri;\r\nmso-bidi-font-family:Calibri;color:#7F7F7F;mso-themecolor:text1;mso-themetint:\r\n128'>implement&nbsp;updates that Microsoft makes to the Microsoft Ads SDK\r\nwithin 60 days after Microsoft makes the update available to You.<o:p></o:p></span></p>\r\n\r\n<p class=MsoNormal style='margin-bottom:0in;text-align:justify;text-justify:\r\ninter-ideograph;line-height:normal'><span style='font-size:10.0pt;mso-ascii-font-family:\r\nCalibri;mso-fareast-font-family:\"Times New Roman\";mso-hansi-font-family:Calibri;\r\nmso-bidi-font-family:Calibri;color:#7F7F7F;mso-themecolor:text1;mso-themetint:\r\n128'><o:p>&nbsp;</o:p></span></p>\r\n\r\n<p class=MsoNormal style='margin-bottom:0in;text-align:justify;text-justify:\r\ninter-ideograph;line-height:normal'><span class=GramE><b><span\r\nstyle='font-size:10.0pt;mso-ascii-font-family:Calibri;mso-fareast-font-family:\r\n\"Times New Roman\";mso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;\r\ncolor:#7F7F7F;mso-themecolor:text1;mso-themetint:128'>e</span></b><span\r\nstyle='font-size:10.0pt;mso-ascii-font-family:Calibri;mso-fareast-font-family:\r\n\"Times New Roman\";mso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;\r\ncolor:#7F7F7F;mso-themecolor:text1;mso-themetint:128'>)Traffic</span></span><span\r\nstyle='font-size:10.0pt;mso-ascii-font-family:Calibri;mso-fareast-font-family:\r\n\"Times New Roman\";mso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;\r\ncolor:#7F7F7F;mso-themecolor:text1;mso-themetint:128'> Quality and Ad\r\nPerformance.</span><span style='font-size:10.0pt;mso-ascii-font-family:Calibri;\r\nmso-fareast-font-family:DengXian;mso-fareast-theme-font:minor-fareast;\r\nmso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;color:#7F7F7F;\r\nmso-themecolor:text1;mso-themetint:128'><span style='mso-spacerun:yes'> \r\n</span></span><span style='font-size:10.0pt;mso-ascii-font-family:Calibri;\r\nmso-fareast-font-family:\"Times New Roman\";mso-hansi-font-family:Calibri;\r\nmso-bidi-font-family:Calibri;color:#7F7F7F;mso-themecolor:text1;mso-themetint:\r\n128'><o:p></o:p></span></p>\r\n\r\n<h4 style='margin-top:0in;margin-right:0in;margin-bottom:0in;margin-left:.75in;\r\nmso-list:none'><a name=\"_Hlk510784399\"><span style='font-size:10.0pt;\r\nmso-bidi-font-family:Calibri;color:#7F7F7F;mso-themecolor:text1;mso-themetint:\r\n128'><o:p>&nbsp;</o:p></span></a></h4>\r\n\r\n<h4 style='margin-top:0in;margin-right:0in;margin-bottom:0in;margin-left:.75in;\r\nmso-list:l5 level1 lfo3'><span style='mso-bookmark:_Hlk510784399'><![if !supportLists]><span\r\nstyle='font-size:10.0pt;mso-fareast-font-family:Calibri;mso-bidi-font-family:\r\nCalibri;color:#7F7F7F;mso-themecolor:text1;mso-themetint:128'><span\r\nstyle='mso-list:Ignore'>i)<span style='font:7.0pt \"Times New Roman\"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\r\n</span></span></span><![endif]><span style='font-size:10.0pt;mso-bidi-font-family:\r\nCalibri;color:#7F7F7F;mso-themecolor:text1;mso-themetint:128'>Microsoft may\r\nrequire that a quality score be maintained for traffic from Your Properties, in\r\na manner and method determined by Microsoft.<o:p></o:p></span></span></h4>\r\n\r\n<h4 style='margin-top:0in;margin-right:0in;margin-bottom:0in;margin-left:.75in;\r\nmso-list:l5 level1 lfo3;mso-layout-grid-align:auto'><span style='mso-bookmark:\r\n_Hlk510784399'><![if !supportLists]><span style='font-size:10.0pt;mso-fareast-font-family:\r\nCalibri;mso-bidi-font-family:Calibri;color:#7F7F7F;mso-themecolor:text1;\r\nmso-themetint:128'><span style='mso-list:Ignore'>ii)<span style='font:7.0pt \"Times New Roman\"'>&nbsp;&nbsp;&nbsp;&nbsp;\r\n</span></span></span><![endif]><span style='font-size:10.0pt;mso-bidi-font-family:\r\nCalibri;color:#7F7F7F;mso-themecolor:text1;mso-themetint:128'>You will manage\r\ntraffic quality using methods </span></span><span style='font-size:10.0pt;\r\nmso-bidi-font-family:Calibri;color:#7F7F7F;mso-themecolor:text1;mso-themetint:\r\n128'>to track each traffic source when made available by Microsoft. You will\r\nmaintain traffic quality levels as set by Microsoft.&nbsp; <o:p></o:p></span></h4>\r\n\r\n<h4 style='margin-top:0in;margin-right:0in;margin-bottom:0in;margin-left:1.0in;\r\ntext-indent:-.5in;mso-list:none;mso-layout-grid-align:auto'><span\r\nstyle='font-size:10.0pt;mso-bidi-font-family:Calibri;color:#7F7F7F;mso-themecolor:\r\ntext1;mso-themetint:128'>iii) <span style='mso-spacerun:yes'>  </span><span\r\nstyle='mso-spacerun:yes'> </span>Microsoft may warn You or suspend a <span\r\nclass=GramE>Property</span> if that Property has fallen below acceptable levels\r\nof quality. If You have received such warning or suspension, <span class=GramE>You</span>\r\nwill not directly or indirectly use, distribute, or offer the ad inventory in\r\nyour Properties for Microsoft ads through any third party within the Microsoft\r\nAdvertising network. You will minimize automated, <span class=GramE>fraudulent</span>\r\nand lower quality traffic.&nbsp; Microsoft will determine the validity and\r\nquality of all traffic in its sole discretion.<o:p></o:p></span></h4>\r\n\r\n<h3 style='margin-top:0in;margin-right:0in;margin-bottom:8.0pt;margin-left:\r\n0in;text-indent:0in;mso-pagination:none;mso-list:none'><span\r\nclass=Heading3Char><b><span style='font-size:10.0pt;mso-fareast-font-family:\r\nDengXian;mso-fareast-theme-font:minor-fareast;mso-bidi-font-family:Calibri;\r\ncolor:#7F7F7F;mso-themecolor:text1;mso-themetint:128;mso-bidi-font-style:normal;\r\ntext-decoration:none;text-underline:none'>f</span></b></span><span\r\nclass=Heading3Char><span style='font-size:10.0pt;mso-fareast-font-family:DengXian;\r\nmso-fareast-theme-font:minor-fareast;mso-bidi-font-family:Calibri;color:#7F7F7F;\r\nmso-themecolor:text1;mso-themetint:128;mso-bidi-font-weight:normal;mso-bidi-font-style:\r\nnormal;text-decoration:none;text-underline:none'>)</span></span><span\r\nstyle='font-size:8.0pt;mso-bidi-font-size:9.0pt;mso-bidi-font-family:Calibri;\r\ncolor:#7F7F7F;mso-themecolor:text1;mso-themetint:128;text-decoration:none;\r\ntext-underline:none'> </span><span class=Heading3Char><span style='font-size:\r\n10.0pt;mso-fareast-font-family:DengXian;mso-fareast-theme-font:minor-fareast;\r\nmso-bidi-font-family:Calibri;color:#7F7F7F;mso-themecolor:text1;mso-themetint:\r\n128;mso-bidi-font-weight:normal;mso-bidi-font-style:normal;text-decoration:\r\nnone;text-underline:none'>Performance.</span></span><span style='font-size:\r\n10.0pt;mso-fareast-font-family:DengXian;mso-fareast-theme-font:minor-fareast;\r\nmso-bidi-font-family:Calibri;color:#7F7F7F;mso-themecolor:text1;mso-themetint:\r\n128;text-decoration:none;text-underline:none'> The parties will monitor the\r\nperformance of each Property displaying ads served by a pubCenter Program,\r\nincluding user acceptance and overall deal performance (e.g., volume,\r\nmonetization, and revenue). If either party reasonably believes a <span\r\nclass=GramE>Property</span> is performing below standards, the parties will\r\ncooperate and use commercially reasonable efforts to modify the Property to\r\nimprove its performance.<span style='mso-spacerun:yes'>  </span>If such efforts\r\ndo not improve the Property’s performance to Microsoft’s reasonable\r\nsatisfaction, </span><span class=GramE><span style='font-size:10.0pt;\r\nmso-bidi-font-family:Calibri;color:#7F7F7F;mso-themecolor:text1;mso-themetint:\r\n128;text-decoration:none;text-underline:none'>You</span></span><span\r\nstyle='font-size:10.0pt;mso-bidi-font-family:Calibri;color:#7F7F7F;mso-themecolor:\r\ntext1;mso-themetint:128;text-decoration:none;text-underline:none'> will promptly\r\nremove the poor-quality traffic and You will not directly or indirectly use,\r\ndistribute, or offer such ad inventory for Microsoft ads through any third\r\nparty within the Microsoft Advertising network.</span><span style='font-size:\r\n10.0pt;mso-fareast-font-family:DengXian;mso-fareast-theme-font:minor-fareast;\r\nmso-bidi-font-family:Calibri;color:#7F7F7F;mso-themecolor:text1;mso-themetint:\r\n128;text-decoration:none;text-underline:none'><o:p></o:p></span></h3>\r\n\r\n<p class=MsoNormal style='text-align:justify;text-justify:inter-ideograph;\r\nline-height:normal'><span style='font-size:10.0pt;mso-ascii-font-family:Calibri;\r\nmso-fareast-font-family:\"Times New Roman\";mso-hansi-font-family:Calibri;\r\nmso-bidi-font-family:Calibri;color:#7F7F7F;mso-themecolor:text1;mso-themetint:\r\n128'><o:p>&nbsp;</o:p></span></p>\r\n\r\n<p class=MsoNormal style='margin-left:.4in;text-align:justify;text-justify:\r\ninter-ideograph;text-indent:-.4in;line-height:normal'><b><span\r\nstyle='font-size:10.0pt;mso-ascii-font-family:Calibri;mso-fareast-font-family:\r\n\"Times New Roman\";mso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;\r\ncolor:#7F7F7F;mso-themecolor:text1;mso-themetint:128'>5.&nbsp;GENERAL\r\nPROHIBITIONS.&nbsp;</span></b><span style='font-size:10.0pt;mso-ascii-font-family:\r\nCalibri;mso-fareast-font-family:\"Times New Roman\";mso-hansi-font-family:Calibri;\r\nmso-bidi-font-family:Calibri;color:#7F7F7F;mso-themecolor:text1;mso-themetint:\r\n128'>You will not do any of the following:<o:p></o:p></span></p>\r\n\r\n<p class=MsoCommentText style='margin-bottom:0in'><b><span style='mso-ascii-font-family:\r\nCalibri;mso-fareast-font-family:\"Times New Roman\";mso-hansi-font-family:Calibri;\r\nmso-bidi-font-family:Calibri;color:#7F7F7F;mso-themecolor:text1;mso-themetint:\r\n128'>a</span></b><span style='mso-ascii-font-family:Calibri;mso-fareast-font-family:\r\n\"Times New Roman\";mso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;\r\ncolor:#7F7F7F;mso-themecolor:text1;mso-themetint:128'>) work around any\r\ntechnical limitations of the pubCenter Site or any pubCenter Program or\r\nintroduce or use any device, software, or routine that interferes or attempts\r\nto interfere with the operation of the pubCenter Site or any pubCenter Program,\r\nor otherwise attempt to access either of the foregoing in any ways other than\r\nthose authorized by <span class=GramE>Microsoft;</span><o:p></o:p></span></p>\r\n\r\n<p class=MsoCommentText style='margin-bottom:0in'><b><span style='mso-ascii-font-family:\r\nCalibri;mso-fareast-font-family:\"Times New Roman\";mso-hansi-font-family:Calibri;\r\nmso-bidi-font-family:Calibri;color:#7F7F7F;mso-themecolor:text1;mso-themetint:\r\n128'>b</span></b><span style='mso-ascii-font-family:Calibri;mso-fareast-font-family:\r\n\"Times New Roman\";mso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;\r\ncolor:#7F7F7F;mso-themecolor:text1;mso-themetint:128'>) use any pubCenter\r\nProgram to display advertising anywhere other than on a <span class=GramE>Property</span>\r\nthat has been approved by Microsoft and properly registered with the applicable\r\npubCenter Program;<o:p></o:p></span></p>\r\n\r\n<p class=MsoCommentText style='margin-bottom:0in'><b><span style='mso-ascii-font-family:\r\nCalibri;mso-fareast-font-family:\"Times New Roman\";mso-hansi-font-family:Calibri;\r\nmso-bidi-font-family:Calibri;color:#7F7F7F;mso-themecolor:text1;mso-themetint:\r\n128'>c</span></b><span style='mso-ascii-font-family:Calibri;mso-fareast-font-family:\r\n\"Times New Roman\";mso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;\r\ncolor:#7F7F7F;mso-themecolor:text1;mso-themetint:128'>) cache, store, copy,\r\ndistribute, or redirect any advertising delivered by any pubCenter <span\r\nclass=GramE>Program;</span><o:p></o:p></span></p>\r\n\r\n<p class=MsoCommentText style='margin-bottom:0in'><b><span style='mso-ascii-font-family:\r\nCalibri;mso-fareast-font-family:\"Times New Roman\";mso-hansi-font-family:Calibri;\r\nmso-bidi-font-family:Calibri;color:#7F7F7F;mso-themecolor:text1;mso-themetint:\r\n128'>d</span></b><span style='mso-ascii-font-family:Calibri;mso-fareast-font-family:\r\n\"Times New Roman\";mso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;\r\ncolor:#7F7F7F;mso-themecolor:text1;mso-themetint:128'>) directly or indirectly </span><span\r\nstyle='mso-ascii-font-family:Calibri;mso-fareast-font-family:DengXian;\r\nmso-fareast-theme-font:minor-fareast;mso-hansi-font-family:Calibri;mso-bidi-font-family:\r\nCalibri;color:#7F7F7F;mso-themecolor:text1;mso-themetint:128'>implement or\r\ndistribute ad inventory, or </span><span style='mso-ascii-font-family:Calibri;\r\nmso-fareast-font-family:\"Times New Roman\";mso-hansi-font-family:Calibri;\r\nmso-bidi-font-family:Calibri;color:#7F7F7F;mso-themecolor:text1;mso-themetint:\r\n128'>generate, or authorize or encourage others to generate, </span><span\r\nstyle='mso-ascii-font-family:Calibri;mso-fareast-font-family:DengXian;\r\nmso-fareast-theme-font:minor-fareast;mso-hansi-font-family:Calibri;mso-bidi-font-family:\r\nCalibri;color:#7F7F7F;mso-themecolor:text1;mso-themetint:128'>revenue hereunder\r\nthrough any automated, deceptive, fraudulent or other invalid means including\r\nbut not limited to repeated manual clicks, the use of robots or other automated\r\nquery tools or computer-generated search/page requests, clicks that are\r\nprohibited under any guidelines provided by Microsoft or the terms of this Agreement,\r\nor the unauthorized use of other search engine optimization services or\r\nsoftware,</span><span style='mso-ascii-font-family:Calibri;mso-fareast-font-family:\r\n\"Times New Roman\";mso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;\r\ncolor:#7F7F7F;mso-themecolor:text1;mso-themetint:128'> or through the use of\r\nincentives (e.g. awarding users cash, points prizes, contest entries, etc.);<o:p></o:p></span></p>\r\n\r\n<p class=MsoCommentText style='margin-bottom:0in'><b><span style='mso-ascii-font-family:\r\nCalibri;mso-fareast-font-family:\"Times New Roman\";mso-hansi-font-family:Calibri;\r\nmso-bidi-font-family:Calibri;color:#7F7F7F;mso-themecolor:text1;mso-themetint:\r\n128'>e</span></b><span style='mso-ascii-font-family:Calibri;mso-fareast-font-family:\r\n\"Times New Roman\";mso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;\r\ncolor:#7F7F7F;mso-themecolor:text1;mso-themetint:128'>) edit, resize, modify,\r\nfilter, obscure, hide, make transparent, or reorder any advertising (including\r\ntheir associated links) delivered by any pubCenter <span class=GramE>Program;</span><o:p></o:p></span></p>\r\n\r\n<p class=MsoCommentText style='margin-bottom:0in'><b><span style='mso-ascii-font-family:\r\nCalibri;mso-fareast-font-family:\"Times New Roman\";mso-hansi-font-family:Calibri;\r\nmso-bidi-font-family:Calibri;color:#7F7F7F;mso-themecolor:text1;mso-themetint:\r\n128'>f</span></b><span style='mso-ascii-font-family:Calibri;mso-fareast-font-family:\r\n\"Times New Roman\";mso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;\r\ncolor:#7F7F7F;mso-themecolor:text1;mso-themetint:128'>) display advertising\r\nfrom any pubCenter Program in Properties that do not have distinct, substantial\r\nand legitimate content and purpose other than the display of <span class=GramE>advertising;</span><o:p></o:p></span></p>\r\n\r\n<p class=MsoCommentText style='margin-bottom:0in'><b><span style='mso-ascii-font-family:\r\nCalibri;mso-fareast-font-family:\"Times New Roman\";mso-hansi-font-family:Calibri;\r\nmso-bidi-font-family:Calibri;color:#7F7F7F;mso-themecolor:text1;mso-themetint:\r\n128'>g</span></b><span style='mso-ascii-font-family:Calibri;mso-fareast-font-family:\r\n\"Times New Roman\";mso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;\r\ncolor:#7F7F7F;mso-themecolor:text1;mso-themetint:128'>) collect or use any user\r\nidentifier created or provided to You by Microsoft for any purpose other than\r\npassing such identifier to a pubCenter Program as part of Your use of that\r\npubCenter <span class=GramE>Program;</span><o:p></o:p></span></p>\r\n\r\n<p class=MsoCommentText style='margin-bottom:0in'><b><span style='mso-ascii-font-family:\r\nCalibri;mso-fareast-font-family:\"Times New Roman\";mso-hansi-font-family:Calibri;\r\nmso-bidi-font-family:Calibri;color:#7F7F7F;mso-themecolor:text1;mso-themetint:\r\n128'>h</span></b><span style='mso-ascii-font-family:Calibri;mso-fareast-font-family:\r\n\"Times New Roman\";mso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;\r\ncolor:#7F7F7F;mso-themecolor:text1;mso-themetint:128'>) frame, minimize,\r\nremove, redirect, delay (e.g., insert interstitial ads or <span class=SpellE><span\r\nclass=GramE>pop up</span></span> windows) or otherwise inhibit or modify any\r\nadvertisements served by a pubCenter Program into your Properties or the\r\ndisplay of any web page accessed by the links included with specific\r\nadvertising; <o:p></o:p></span></p>\r\n\r\n<p class=MsoCommentText style='margin-bottom:0in'><span class=SpellE><b><span\r\nstyle='mso-ascii-font-family:Calibri;mso-fareast-font-family:\"Times New Roman\";\r\nmso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;color:#7F7F7F;\r\nmso-themecolor:text1;mso-themetint:128'>i</span></b></span><span\r\nstyle='mso-ascii-font-family:Calibri;mso-fareast-font-family:\"Times New Roman\";\r\nmso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;color:#7F7F7F;\r\nmso-themecolor:text1;mso-themetint:128'>) take&nbsp;any action that imposes an\r\nunreasonably or disproportionately large burden on Microsoft infrastructure,\r\nincluding the pubCenter Site or a pubCenter <span class=GramE>Program;</span> <o:p></o:p></span></p>\r\n\r\n<p class=MsoCommentText style='margin-bottom:0in'><b><span style='mso-ascii-font-family:\r\nCalibri;mso-fareast-font-family:\"Times New Roman\";mso-hansi-font-family:Calibri;\r\nmso-bidi-font-family:Calibri;color:#7F7F7F;mso-themecolor:text1;mso-themetint:\r\n128'>j</span></b><span style='mso-ascii-font-family:Calibri;mso-fareast-font-family:\r\n\"Times New Roman\";mso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;\r\ncolor:#7F7F7F;mso-themecolor:text1;mso-themetint:128'>) display advertising\r\nfrom any pubCenter Program on any portion of your Properties that violate any\r\napplicable law, statute, ordinance or regulation (including export control), or\r\nincludes materials or links to materials that are unlawful (including the sale\r\nof counterfeit goods or copyright piracy), obscene, pornographic,\r\ndiscriminatory, misleading, deceptive, false, gambling related or religious,\r\nthat constitute hate speech or defamation, or otherwise contain materials that\r\ndo not comply with the Policies or other Microsoft policies; or that infringe\r\non any third party’s proprietary rights;<span style='mso-spacerun:yes'> \r\n</span><o:p></o:p></span></p>\r\n\r\n<p class=MsoCommentText style='margin-bottom:0in'><b><span style='mso-ascii-font-family:\r\nCalibri;mso-fareast-font-family:\"Times New Roman\";mso-hansi-font-family:Calibri;\r\nmso-bidi-font-family:Calibri;color:#7F7F7F;mso-themecolor:text1;mso-themetint:\r\n128'>k</span></b><span style='mso-ascii-font-family:Calibri;mso-fareast-font-family:\r\n\"Times New Roman\";mso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;\r\ncolor:#7F7F7F;mso-themecolor:text1;mso-themetint:128'>) display advertising on\r\nany portion of your <span class=GramE>Properties</span> that are generated by\r\nadware, spyware or P2P applications; <o:p></o:p></span></p>\r\n\r\n<p class=MsoCommentText style='margin-bottom:0in'><b><span style='mso-ascii-font-family:\r\nCalibri;mso-fareast-font-family:\"Times New Roman\";mso-hansi-font-family:Calibri;\r\nmso-bidi-font-family:Calibri;color:#7F7F7F;mso-themecolor:text1;mso-themetint:\r\n128'>l</span></b><span style='mso-ascii-font-family:Calibri;mso-fareast-font-family:\r\n\"Times New Roman\";mso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;\r\ncolor:#7F7F7F;mso-themecolor:text1;mso-themetint:128'>) store, distribute, copy\r\nor otherwise use or repurpose data that You receive from Microsoft for any\r\npurpose other than to display ads in accordance with this <span class=GramE>Agreement;</span>\r\n<o:p></o:p></span></p>\r\n\r\n<p class=MsoCommentText style='margin-bottom:0in'><b><span style='mso-ascii-font-family:\r\nCalibri;mso-fareast-font-family:\"Times New Roman\";mso-hansi-font-family:Calibri;\r\nmso-bidi-font-family:Calibri;color:#7F7F7F;mso-themecolor:text1;mso-themetint:\r\n128'>m</span></b><span style='mso-ascii-font-family:Calibri;mso-fareast-font-family:\r\n\"Times New Roman\";mso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;\r\ncolor:#7F7F7F;mso-themecolor:text1;mso-themetint:128'>)&nbsp;display\r\nadvertising from any pubCenter Program on any portion of your <span\r\nclass=GramE>Properties</span> that would download any type of unauthorized or\r\nunlawful program to a computer or other device, or link a user to a website\r\nintended to download this type of software; or <o:p></o:p></span></p>\r\n\r\n<p class=MsoCommentText style='margin-bottom:0in'><b><span style='mso-ascii-font-family:\r\nCalibri;mso-fareast-font-family:\"Times New Roman\";mso-hansi-font-family:Calibri;\r\nmso-bidi-font-family:Calibri;color:#7F7F7F;mso-themecolor:text1;mso-themetint:\r\n128'>n</span></b><span style='mso-ascii-font-family:Calibri;mso-fareast-font-family:\r\n\"Times New Roman\";mso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;\r\ncolor:#7F7F7F;mso-themecolor:text1;mso-themetint:128'>)&nbsp;allow any ad tags\r\n(within ads served by Microsoft) or the Microsoft Ads SDK to (A) be used by a\r\nthird party, (B)&nbsp;be placed anywhere other than Your Properties, or (C)&nbsp;display\r\nads anywhere other than on Your Property.&nbsp;&nbsp;&nbsp;<o:p></o:p></span></p>\r\n\r\n<p class=MsoNormal style='text-align:justify;text-justify:inter-ideograph;\r\nline-height:normal'><span style='font-size:10.0pt;mso-ascii-font-family:Calibri;\r\nmso-fareast-font-family:\"Times New Roman\";mso-hansi-font-family:Calibri;\r\nmso-bidi-font-family:Calibri;color:#7F7F7F;mso-themecolor:text1;mso-themetint:\r\n128'>If You engage in any of the activities prohibited by this Section 5 or\r\notherwise prohibited by Microsoft, or your Property violates this Section 5 or\r\nanother Microsoft requirement or the Policies, then without limiting any other\r\nrights and remedies Microsoft may have under this Agreement, Microsoft may, as\r\nMicrosoft deems appropriate under the circumstances, do any of the following\r\nincluding in order to manage advertiser satisfaction issues:&nbsp;&nbsp;credit\r\nadvertisers for ad impressions; receive “make goods” from You; withhold or\r\ndeduct payments due to You for the time period within which Microsoft\r\ndetermines, after reasonable investigation, the prohibited action occurred; or\r\nsuspend or terminate Your Account.<o:p></o:p></span></p>\r\n\r\n<p class=MsoNormal style='text-align:justify;text-justify:inter-ideograph;\r\nline-height:normal'><b><span style='font-size:10.0pt;mso-ascii-font-family:\r\nCalibri;mso-fareast-font-family:\"Times New Roman\";mso-hansi-font-family:Calibri;\r\nmso-bidi-font-family:Calibri;color:#7F7F7F;mso-themecolor:text1;mso-themetint:\r\n128'>6.&nbsp;REPORTS.&nbsp;</span></b><span style='font-size:10.0pt;mso-ascii-font-family:\r\nCalibri;mso-fareast-font-family:\"Times New Roman\";mso-hansi-font-family:Calibri;\r\nmso-bidi-font-family:Calibri;color:#7F7F7F;mso-themecolor:text1;mso-themetint:\r\n128'>As part of a pubCenter Program, Microsoft may provide&nbsp;You&nbsp;with\r\naccess to online reporting systems to view and use a variety of online reports\r\nrelated to Your use of the pubCenter Program. You may not publicly publish or\r\notherwise distribute or disclose any of these reports to third parties and may\r\nonly use these reports for&nbsp;Your&nbsp;internal business purposes. These and\r\nsimilar reports are considered “Confidential Information” as defined in Section\r\n[30].<o:p></o:p></span></p>\r\n\r\n<p class=MsoNormal style='text-align:justify;text-justify:inter-ideograph;\r\nline-height:normal'><b><span style='font-size:10.0pt;mso-ascii-font-family:\r\nCalibri;mso-fareast-font-family:\"Times New Roman\";mso-hansi-font-family:Calibri;\r\nmso-bidi-font-family:Calibri;color:#7F7F7F;mso-themecolor:text1;mso-themetint:\r\n128'>7.&nbsp;ADVERTISER PREFERENCES.&nbsp;</span></b><span style='font-size:\r\n10.0pt;mso-ascii-font-family:Calibri;mso-fareast-font-family:\"Times New Roman\";\r\nmso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;color:#7F7F7F;\r\nmso-themecolor:text1;mso-themetint:128'>As part of some pubCenter Programs,\r\nMicrosoft may provide&nbsp;You&nbsp;with functionality and features that allow\r\nYou to specify Your preference regarding the display of advertising from\r\ncertain advertisers or groups of advertisers on or in Your Properties. If this\r\nfunctionality is provided through a pubCenter Program, it will\r\nbe&nbsp;Your&nbsp;responsibility to specify and maintain Your preferences.\r\nHowever, Microsoft does not guarantee that all advertising served on or in Your\r\nProperties will meet or otherwise be subject to the preferences that&nbsp;You&nbsp;specify.<o:p></o:p></span></p>\r\n\r\n<p class=MsoNormal style='margin-bottom:0in;text-align:justify;text-justify:\r\ninter-ideograph;line-height:normal'><b><span style='font-size:10.0pt;\r\nmso-ascii-font-family:Calibri;mso-fareast-font-family:\"Times New Roman\";\r\nmso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;color:#7F7F7F;\r\nmso-themecolor:text1;mso-themetint:128'>8.&nbsp;INVOICING AND PAYMENT.&nbsp;<o:p></o:p></span></b></p>\r\n\r\n<p class=MsoNormal style='margin-bottom:0in;text-align:justify;text-justify:\r\ninter-ideograph;line-height:normal'><span class=GramE><b><span\r\nstyle='font-size:10.0pt;mso-ascii-font-family:Calibri;mso-fareast-font-family:\r\n\"Times New Roman\";mso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;\r\ncolor:#7F7F7F;mso-themecolor:text1;mso-themetint:128'>a</span></b><span\r\nstyle='font-size:10.0pt;mso-ascii-font-family:Calibri;mso-fareast-font-family:\r\n\"Times New Roman\";mso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;\r\ncolor:#7F7F7F;mso-themecolor:text1;mso-themetint:128'>)<u>Payments</u></span></span><span\r\nstyle='font-size:10.0pt;mso-ascii-font-family:Calibri;mso-fareast-font-family:\r\n\"Times New Roman\";mso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;\r\ncolor:#7F7F7F;mso-themecolor:text1;mso-themetint:128'>.<span\r\nstyle='mso-spacerun:yes'>  </span>On a monthly basis, Microsoft will\r\npay&nbsp;You&nbsp;in arrears on a net-45 basis for advertising displayed on or\r\nin Your Properties based upon the then-current payment schedules if <span\r\nclass=GramE>Your</span> earned balance equals or exceeds $100 USD (the “<b>Payment\r\n</b><b style='mso-bidi-font-weight:normal'>Threshold</b>”). If <span\r\nclass=GramE>Your</span> earned balance equals less than the Payment Threshold,\r\nMicrosoft may elect to defer such payments (without penalty or late fee) to the\r\nnext applicable payment date that the payment due is greater than the Payment\r\nThreshold or, if such amount has not increased in the trailing twelve month\r\nperiod, cancel such payment permanently without notice.&nbsp;Microsoft may\r\nupdate the timing of the payments, payment schedules, or minimum payment\r\namounts at any time upon notice.<span style='mso-spacerun:yes'>  </span></span><span\r\nstyle='font-size:10.0pt;mso-ascii-font-family:Calibri;mso-fareast-font-family:\r\nDengXian;mso-fareast-theme-font:minor-fareast;mso-hansi-font-family:Calibri;\r\nmso-bidi-font-family:Calibri;color:#7F7F7F;mso-themecolor:text1;mso-themetint:\r\n128'>If a negative amount is due to You (for example, as result of a prior\r\nperiod adjustment for invalid Paid Search Ad traffic), Microsoft may, in its\r\nsole discretion, (<span class=SpellE>i</span>) invoice You for the negative\r\namount, which You will pay within 45 days of receipt, or (ii) offset such\r\namount against future payments.<span style='mso-spacerun:yes'>  </span></span><span\r\nstyle='font-size:10.0pt;mso-ascii-font-family:Calibri;mso-fareast-font-family:\r\n\"Times New Roman\";mso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;\r\ncolor:#7F7F7F;mso-themecolor:text1;mso-themetint:128'>In addition,\r\nif&nbsp;You&nbsp;receive a payment that was not due to You, Microsoft may\r\nreverse or seek return of that payment and You agree to cooperate with\r\nMicrosoft (or its’ Payment Processor) in our efforts to do this. Microsoft may\r\nalso reduce or offset&nbsp;Your&nbsp;earned balance without notice, to adjust\r\nfor any previous overpayment. You acknowledge that the amount&nbsp;You&nbsp;<span\r\nclass=GramE>actually receive</span> will depend in part on the rates and fees\r\nimposed by Your bank or the Payment Processor (as defined herein) and on any\r\napplicable tax withholding requirements by U.S. legislation and the domestic\r\nlegislation of Your domicile. You must provide Microsoft (or the Payment\r\nProcessor) with all financial, tax and banking information requested <span\r\nclass=GramE>in order to</span> make payment of amounts owed under this\r\nAgreement. Microsoft will notify&nbsp;You&nbsp;of any changes to the required\r\ninformation. Failure to provide such information within 60 days after creation\r\nof Your Account or failure to keep such information current and accurate may\r\nresult in the closing of Your Account by Microsoft and forfeiture of amounts\r\nowed to&nbsp;You&nbsp;under this Agreement. <o:p></o:p></span></p>\r\n\r\n<p class=MsoNormal style='margin-bottom:0in;text-align:justify;text-justify:\r\ninter-ideograph;line-height:normal'><span class=GramE><b><span\r\nstyle='font-size:10.0pt;mso-ascii-font-family:Calibri;mso-fareast-font-family:\r\n\"Times New Roman\";mso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;\r\ncolor:#7F7F7F;mso-themecolor:text1;mso-themetint:128'>b</span></b><span\r\nstyle='font-size:10.0pt;mso-ascii-font-family:Calibri;mso-fareast-font-family:\r\n\"Times New Roman\";mso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;\r\ncolor:#7F7F7F;mso-themecolor:text1;mso-themetint:128'>)<u>Data</u></span></span><u><span\r\nstyle='font-size:10.0pt;mso-ascii-font-family:Calibri;mso-fareast-font-family:\r\n\"Times New Roman\";mso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;\r\ncolor:#7F7F7F;mso-themecolor:text1;mso-themetint:128'> for Calculating\r\nPayments; </span></u><u><span style='font-size:10.0pt;mso-ascii-font-family:\r\nCalibri;mso-fareast-font-family:DengXian;mso-fareast-theme-font:minor-fareast;\r\nmso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;color:#7F7F7F;\r\nmso-themecolor:text1;mso-themetint:128'>Unauthorized or Fraudulent Revenue from\r\nAds Served by a pubCenter Program</span></u><span style='font-size:10.0pt;\r\nmso-ascii-font-family:Calibri;mso-fareast-font-family:DengXian;mso-fareast-theme-font:\r\nminor-fareast;mso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;\r\ncolor:#7F7F7F;mso-themecolor:text1;mso-themetint:128'>.<span\r\nstyle='mso-spacerun:yes'>  </span></span><span style='font-size:10.0pt;\r\nmso-ascii-font-family:Calibri;mso-fareast-font-family:\"Times New Roman\";\r\nmso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;color:#7F7F7F;\r\nmso-themecolor:text1;mso-themetint:128'>To the extent that payment is based on\r\nthe number of clicks, impressions, or actions generated by advertising that is\r\ndisplayed on or in Your Properties, reports generated by the applicable\r\npubCenter Programs will be the sole measurement for purposes of invoicing and\r\npayment.<span style='mso-spacerun:yes'>  </span>Impressions, clicks, or other\r\nor actions generated by advertising that a pubCenter Program registers as\r\ncoming from IP addresses owned or controlled by You, or clicks associated with\r\nYour violation of this Agreement, the Policies or other applicable Microsoft\r\nrequirements, are not valid impressions, clicks, or actions.<span\r\nstyle='mso-spacerun:yes'>  </span>In response to Microsoft’s request,&nbsp;<span\r\nclass=GramE>You</span>&nbsp;will provide to Microsoft information relating to\r\nthe&nbsp;pubCenter Program for Your Properties, including user IP addresses,\r\nreferring URL (HTTP Referrer), user agent, and time of submission (as\r\napplicable).<b>&nbsp;&nbsp;</b></span><span style='font-size:10.0pt;mso-ascii-font-family:\r\nCalibri;mso-fareast-font-family:DengXian;mso-fareast-theme-font:minor-fareast;\r\nmso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;color:#7F7F7F;\r\nmso-themecolor:text1;mso-themetint:128'>Microsoft will determine whether the\r\ndata calculating the number of clicks, impressions, or actions is valid, and\r\nMicrosoft will not owe You payment in connection with any data that Microsoft\r\njudges to have been generated through invalid means or in any manner that\r\nviolates the Agreement or is otherwise inaccurate.<span\r\nstyle='mso-spacerun:yes'>  </span></span><span style='font-size:10.0pt;\r\nmso-ascii-font-family:Calibri;mso-fareast-font-family:\"Times New Roman\";\r\nmso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;color:#7F7F7F;\r\nmso-themecolor:text1;mso-themetint:128'>MICROSOFT MAKES NO PROMISES OR\r\nGUARANTEES REGARDING (A) THE NUMBER OF ADVERTISEMENTS YOU MAY EXPECT TO BE\r\nDISPLAYED ON OR IN YOUR PROPERTIES BY A PUBCENTER PROGRAM OR (B) THE AMOUNT OF\r\nANY PAYMENTS YOU MAY RECEIVE.<o:p></o:p></span></p>\r\n\r\n<p class=MsoNormal style='margin-bottom:0in;text-align:justify;text-justify:\r\ninter-ideograph;line-height:normal'><b style='mso-bidi-font-weight:normal'><span\r\nstyle='font-size:10.0pt;mso-ascii-font-family:Calibri;mso-fareast-font-family:\r\n\"Times New Roman\";mso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;\r\ncolor:#7F7F7F;mso-themecolor:text1;mso-themetint:128'>c</span></b><span\r\nstyle='font-size:10.0pt;mso-ascii-font-family:Calibri;mso-fareast-font-family:\r\n\"Times New Roman\";mso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;\r\ncolor:#7F7F7F;mso-themecolor:text1;mso-themetint:128'>)<u>Currency</u>.<span\r\nstyle='mso-spacerun:yes'>  </span></span><span style='font-size:10.0pt;\r\nmso-ascii-font-family:Calibri;mso-hansi-font-family:Calibri;mso-bidi-font-family:\r\nCalibri;color:#7F7F7F;mso-themecolor:text1;mso-themetint:128;mso-bidi-font-weight:\r\nbold'>All amounts owed by Microsoft under this Agreement will be expressed and\r\npaid in the currency chosen by You in your Account; the Account may limit the\r\nchoice of currencies available for selection.<span style='mso-spacerun:yes'> \r\n</span>If amounts owed by Microsoft under this Agreement are described in this\r\nAgreement in one currency and You choose a different currency, then at time of\r\npayment Microsoft will convert its payment amounts to the equivalent amount in\r\nYour chosen currency</span><span style='font-size:10.0pt;mso-ascii-font-family:\r\nCalibri;mso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;color:#7F7F7F;\r\nmso-themecolor:text1;mso-themetint:128'> based on Microsoft’s standard\r\npractices. </span><b><span style='font-size:10.0pt;mso-ascii-font-family:Calibri;\r\nmso-fareast-font-family:\"Times New Roman\";mso-hansi-font-family:Calibri;\r\nmso-bidi-font-family:Calibri;color:#7F7F7F;mso-themecolor:text1;mso-themetint:\r\n128'><o:p></o:p></span></b></p>\r\n\r\n<p class=MsoNormal style='text-align:justify;text-justify:inter-ideograph;\r\nline-height:normal'><b><span style='font-size:10.0pt;mso-ascii-font-family:\r\nCalibri;mso-fareast-font-family:\"Times New Roman\";mso-hansi-font-family:Calibri;\r\nmso-bidi-font-family:Calibri;color:#7F7F7F;mso-themecolor:text1;mso-themetint:\r\n128'>IF YOU RESIDE IN CHINA</span></b><span style='font-size:10.0pt;mso-ascii-font-family:\r\nCalibri;mso-fareast-font-family:\"Times New Roman\";mso-hansi-font-family:Calibri;\r\nmso-bidi-font-family:Calibri;color:#7F7F7F;mso-themecolor:text1;mso-themetint:\r\n128'>, Microsoft may remit payment to&nbsp;You&nbsp;in US dollars only. You are\r\nsolely responsible for obtaining the qualifications and/or completing relevant\r\nnecessary filings or registrations with the government authorities as required\r\nby the applicable law, <span class=GramE>in order to</span> accept payments in\r\nU.S dollars and convert the payment into&nbsp;Your&nbsp;local currency.<o:p></o:p></span></p>\r\n\r\n<p class=MsoNormal style='margin-bottom:0in;line-height:normal'><b><span\r\nstyle='font-size:10.0pt;mso-ascii-font-family:Calibri;mso-fareast-font-family:\r\n\"Times New Roman\";mso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;\r\ncolor:#7F7F7F;mso-themecolor:text1;mso-themetint:128'>9.&nbsp;PAYMENT\r\nPROCESSING.&nbsp;<o:p></o:p></span></b></p>\r\n\r\n<p class=MsoNormal style='margin-bottom:0in;line-height:normal'><span\r\nclass=GramE><b style='mso-bidi-font-weight:normal'><span style='font-size:10.0pt;\r\nmso-ascii-font-family:Calibri;mso-fareast-font-family:\"Times New Roman\";\r\nmso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;color:#7F7F7F;\r\nmso-themecolor:text1;mso-themetint:128'>a</span></b><span style='font-size:\r\n10.0pt;mso-ascii-font-family:Calibri;mso-fareast-font-family:\"Times New Roman\";\r\nmso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;color:#7F7F7F;\r\nmso-themecolor:text1;mso-themetint:128'>)You</span></span><span\r\nstyle='font-size:10.0pt;mso-ascii-font-family:Calibri;mso-fareast-font-family:\r\n\"Times New Roman\";mso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;\r\ncolor:#7F7F7F;mso-themecolor:text1;mso-themetint:128'> may only receive\r\npayments if&nbsp;You&nbsp;reside in one of our supported pubCenter countries that\r\nare qualified to receive payments.&nbsp;<b style='mso-bidi-font-weight:normal'>&nbsp;</b>\r\n<b style='mso-bidi-font-weight:normal'>MICROSOFT TAKES NO RESPONSIBILITY FOR\r\nAND DISCLAIMS ANY OBLIGATIONS TO MAKE PAYMENTS TO PUBLISHERS WHO ARE OPERATING\r\nOUTSIDE OF OUR SUPPORTED COUNTRIES.</b>&nbsp;&nbsp;<o:p></o:p></span></p>\r\n\r\n<p class=MsoNormal style='margin-bottom:0in;line-height:normal'><span\r\nclass=GramE><b><span style='font-size:10.0pt;mso-ascii-font-family:Calibri;\r\nmso-fareast-font-family:\"Times New Roman\";mso-hansi-font-family:Calibri;\r\nmso-bidi-font-family:Calibri;color:#7F7F7F;mso-themecolor:text1;mso-themetint:\r\n128'>b</span></b><span style='font-size:10.0pt;mso-ascii-font-family:Calibri;\r\nmso-fareast-font-family:\"Times New Roman\";mso-hansi-font-family:Calibri;\r\nmso-bidi-font-family:Calibri;color:#7F7F7F;mso-themecolor:text1;mso-themetint:\r\n128'>)</span><b style='mso-bidi-font-weight:normal'><span style='font-size:\r\n10.0pt;mso-ascii-font-family:Calibri;mso-hansi-font-family:Calibri;mso-bidi-font-family:\r\nCalibri;color:#7F7F7F;mso-themecolor:text1;mso-themetint:128'>Third</span></b></span><b\r\nstyle='mso-bidi-font-weight:normal'><span style='font-size:10.0pt;mso-ascii-font-family:\r\nCalibri;mso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;color:#7F7F7F;\r\nmso-themecolor:text1;mso-themetint:128'>-Party Payment Processor<span\r\nstyle='mso-bidi-font-weight:bold'>.<span style='mso-spacerun:yes'>  </span></span></span></b><span\r\nstyle='font-size:10.0pt;mso-ascii-font-family:Calibri;mso-hansi-font-family:\r\nCalibri;mso-bidi-font-family:Calibri;color:#7F7F7F;mso-themecolor:text1;\r\nmso-themetint:128'>All payments are processed by a Microsoft-designated\r\nthird-party payment processor (“<b>Payment Processor</b>”).<span\r\nstyle='mso-spacerun:yes'>  </span>Microsoft may share information about You\r\nwith the Payment Processor and other third parties <span class=GramE>in order\r\nto</span> provide the payments.<span style='mso-spacerun:yes'>    </span></span><span\r\nstyle='font-size:10.0pt;mso-ascii-font-family:Calibri;mso-fareast-font-family:\r\n\"Times New Roman\";mso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;\r\ncolor:#7F7F7F;mso-themecolor:text1;mso-themetint:128'><o:p></o:p></span></p>\r\n\r\n<p class=MsoNormal style='margin-bottom:0in;text-indent:.5in;line-height:normal'><span\r\nclass=SpellE><span style='font-size:10.0pt;mso-ascii-font-family:Calibri;\r\nmso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;color:#7F7F7F;\r\nmso-themecolor:text1;mso-themetint:128'>i</span></span><span style='font-size:\r\n10.0pt;mso-ascii-font-family:Calibri;mso-hansi-font-family:Calibri;mso-bidi-font-family:\r\nCalibri;color:#7F7F7F;mso-themecolor:text1;mso-themetint:128'>)<span\r\nstyle='mso-tab-count:1'>                </span><b>Terms Applicable to Use of\r\nStripe as Payment Processor</b>.<span style='mso-spacerun:yes'>  </span>Payment\r\nprocessing services provided by Stripe are subject to the<span\r\nstyle='background:white'>&nbsp;</span></span><span style='font-size:8.0pt'><a\r\nhref=\"https://stripe.com/connect-account/legal/full\"><span style='font-size:\r\n10.0pt;mso-ascii-font-family:Calibri;mso-hansi-font-family:Calibri;mso-bidi-font-family:\r\nCalibri;color:#7F7F7F;mso-themecolor:text1;mso-themetint:128;border:none windowtext 1.0pt;\r\nmso-border-alt:none windowtext 0in;padding:0in;background:white;text-decoration:\r\nnone;text-underline:none'>Stripe Connected Account Agreement</span></a></span><span\r\nstyle='font-size:10.0pt;mso-ascii-font-family:Calibri;mso-hansi-font-family:\r\nCalibri;mso-bidi-font-family:Calibri;color:#7F7F7F;mso-themecolor:text1;\r\nmso-themetint:128;background:white'>, </span><span style='font-size:10.0pt;\r\nmso-ascii-font-family:Calibri;mso-hansi-font-family:Calibri;mso-bidi-font-family:\r\nCalibri;color:#7F7F7F;mso-themecolor:text1;mso-themetint:128'>which includes\r\nthe<span style='background:white'>&nbsp;</span></span><span style='font-size:\r\n8.0pt'><a href=\"https://stripe.com/legal\"><span style='font-size:10.0pt;\r\nmso-ascii-font-family:Calibri;mso-hansi-font-family:Calibri;mso-bidi-font-family:\r\nCalibri;color:#7F7F7F;mso-themecolor:text1;mso-themetint:128;border:none windowtext 1.0pt;\r\nmso-border-alt:none windowtext 0in;padding:0in;background:white;text-decoration:\r\nnone;text-underline:none'>Stripe Terms of Service</span></a></span><span\r\nstyle='font-size:10.0pt;mso-ascii-font-family:Calibri;mso-hansi-font-family:\r\nCalibri;mso-bidi-font-family:Calibri;color:#7F7F7F;mso-themecolor:text1;\r\nmso-themetint:128;background:white'>&nbsp;</span><span style='font-size:10.0pt;\r\nmso-ascii-font-family:Calibri;mso-hansi-font-family:Calibri;mso-bidi-font-family:\r\nCalibri;color:#7F7F7F;mso-themecolor:text1;mso-themetint:128'>(collectively,\r\nthe “<b>Stripe Services Agreement</b>”).<span style='mso-spacerun:yes'> \r\n</span>By agreeing to this Agreement and using Stripe as Payment Processor, <a\r\nname=\"_Int_WqBpYLpe\"></a><span class=GramE><span style='mso-bookmark:_Int_WqBpYLpe'>You</span></span><span\r\nstyle='mso-bookmark:_Int_WqBpYLpe'></span> agree to be bound by the Stripe\r\nServices Agreement, as the same may be modified by Stripe from time to\r\ntime.<span style='mso-spacerun:yes'>  </span>As a condition of Microsoft\r\nenabling payment processing services through Stripe, <span class=GramE>You</span>\r\nagrees to provide Microsoft accurate and complete information about You and its\r\nbusiness, and You authorize Microsoft to share such information and transaction\r\ninformation related to Your use of the payment processing services provided by\r\nStripe. </span><span style='font-size:8.0pt;mso-ascii-font-family:Calibri;\r\nmso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;color:#7F7F7F;\r\nmso-themecolor:text1;mso-themetint:128'><o:p></o:p></span></p>\r\n\r\n<p class=OutHead2 style='text-indent:0in;mso-list:none;tab-stops:.5in'><span\r\nstyle='font-size:10.0pt;mso-bidi-font-family:Calibri;color:#7F7F7F;mso-themecolor:\r\ntext1;mso-themetint:128'>ii)<span style='mso-tab-count:1'>              </span><b>Terms\r\nApplicable to Use of Other Payment Processors</b>.<span\r\nstyle='mso-spacerun:yes'>  </span>Microsoft reserves the right to change or add\r\nPayment Processors at any time in Microsoft’s sole discretion.<span\r\nstyle='mso-spacerun:yes'>  </span>Your continued engagement in the pubCenter\r\nProgram may require Your agreement to additional terms specific to additional\r\nor other Payment Processors. <o:p></o:p></span></p>\r\n\r\n<p class=OutHead1 style='margin-left:0in;text-indent:0in;mso-list:none;\r\ntab-stops:.5in'><b style='mso-bidi-font-weight:normal'><span style='font-size:\r\n10.0pt;mso-bidi-font-family:Calibri;color:#7F7F7F;mso-themecolor:text1;\r\nmso-themetint:128'>c)<span style='mso-bidi-font-weight:bold'> </span>Payment\r\nProcessor Onboarding<span style='mso-bidi-font-weight:bold'>.<span\r\nstyle='mso-spacerun:yes'>  </span></span></span></b><span style='font-size:\r\n10.0pt;mso-bidi-font-family:Calibri;color:#7F7F7F;mso-themecolor:text1;\r\nmso-themetint:128'>To enable payments, <a name=\"_Int_zsklxzjJ\"></a><span\r\nclass=GramE><span style='mso-bookmark:_Int_zsklxzjJ'>You</span></span><span\r\nstyle='mso-bookmark:_Int_zsklxzjJ'></span> must have, or obtain, an appropriate\r\naccount with a Payment Processor (“<b>Payment Processor Account</b>”), complete\r\nany onboarding requirements the Payment Processor or Microsoft may have, and connect\r\nYour Payment Processor Account with Your pubCenter Account.<span\r\nstyle='mso-spacerun:yes'>  </span>Microsoft is not responsible for Payment\r\nProcessor’s decisions about whether to create or maintain a Payment Processor\r\nAccount for You.<span style='mso-spacerun:yes'>  </span>You are solely\r\nresponsible for maintaining Your Payment Processor Account, including the\r\naccuracy and completeness of all information related to such account, whether\r\nprovided to the Payment Processor or to Microsoft.<span\r\nstyle='mso-spacerun:yes'>  </span>You acknowledge and understand that the\r\nPayment Processor or Microsoft may, in their sole discretion, suspend or\r\nterminate Your ability to receive payments through Your Payment Processor\r\nAccount.<span style='mso-spacerun:yes'>  </span>You must maintain the security\r\nof Your Payment Processor Account and promptly notify Microsoft if You discover\r\nor suspect that someone has accessed Your Payment Processor Account without\r\npermission.<span style='mso-spacerun:yes'>  </span>You are solely responsible\r\nfor all activities that occur under or through Your Payment Processor Account\r\nwhether such actions were taken by You or not.<span style='mso-spacerun:yes'> \r\n</span>You authorize Microsoft to take certain actions through Your Payment\r\nProcessor Account as permitted under the Agreement and the additional terms You\r\nagree to with the Payment Processor including communicating information about\r\ntransactions conducted through the Payment Processor Account such as charges, refunds,\r\nadjustments, and the handling of disputes. <o:p></o:p></span></p>\r\n\r\n<p class=OutHead1 style='margin-left:0in;text-indent:0in;mso-list:none;\r\ntab-stops:.5in'><b style='mso-bidi-font-weight:normal'><span style='font-size:\r\n10.0pt;mso-bidi-font-family:Calibri;color:#7F7F7F;mso-themecolor:text1;\r\nmso-themetint:128'>d</span></b><span style='font-size:10.0pt;mso-bidi-font-family:\r\nCalibri;color:#7F7F7F;mso-themecolor:text1;mso-themetint:128;mso-bidi-font-weight:\r\nbold'>)</span><b style='mso-bidi-font-weight:normal'><span style='font-size:\r\n10.0pt;mso-bidi-font-family:Calibri;color:#7F7F7F;mso-themecolor:text1;\r\nmso-themetint:128'>Violation of Payment Processor Agreements<span\r\nstyle='mso-bidi-font-weight:bold'>.<span style='mso-spacerun:yes'>  </span></span></span></b><span\r\nstyle='font-size:10.0pt;mso-bidi-font-family:Calibri;color:#7F7F7F;mso-themecolor:\r\ntext1;mso-themetint:128'>If Microsoft receives notice that Your activity\r\nviolates its agreements with the Payment Processor, Microsoft may in its sole\r\ndiscretion <span class=GramE>take action</span> against Your account to comply\r\nwith Microsoft’s obligations to the Payment Processor.<span\r\nstyle='mso-spacerun:yes'>  </span>Such actions may include canceling\r\ntransactions, disabling Your connection to the Payment Processor, and/or\r\nsuspending Your access to or use of the pubCenter Programs. <o:p></o:p></span></p>\r\n\r\n<p class=OutHead1 style='margin-left:0in;text-indent:0in;mso-list:none;\r\ntab-stops:.5in'><span class=GramE><b><span style='font-size:10.0pt;mso-bidi-font-family:\r\nCalibri;color:#7F7F7F;mso-themecolor:text1;mso-themetint:128'>e</span></b><span\r\nstyle='font-size:10.0pt;mso-bidi-font-family:Calibri;color:#7F7F7F;mso-themecolor:\r\ntext1;mso-themetint:128'>)<b style='mso-bidi-font-weight:normal'>Your</b></span></span><b\r\nstyle='mso-bidi-font-weight:normal'><span style='font-size:10.0pt;mso-bidi-font-family:\r\nCalibri;color:#7F7F7F;mso-themecolor:text1;mso-themetint:128'> Acknowledgment<span\r\nstyle='mso-bidi-font-weight:bold'>.<span style='mso-spacerun:yes'>  </span></span></span></b><span\r\nstyle='font-size:10.0pt;mso-bidi-font-family:Calibri;color:#7F7F7F;mso-themecolor:\r\ntext1;mso-themetint:128'>You agree and acknowledge that: <o:p></o:p></span></p>\r\n\r\n<p class=OutHead2 style='text-indent:0in;mso-list:none;tab-stops:.5in'><span\r\nclass=SpellE><span style='font-size:10.0pt;mso-bidi-font-family:Calibri;\r\ncolor:#7F7F7F;mso-themecolor:text1;mso-themetint:128'>i</span></span><span\r\nstyle='font-size:10.0pt;mso-bidi-font-family:Calibri;color:#7F7F7F;mso-themecolor:\r\ntext1;mso-themetint:128'>)<span style='mso-tab-count:1'>                </span>Notwithstanding\r\nanything to the contrary herein (including the section regarding assignment and\r\nsublicensing), Microsoft will have no responsibility or liability for any\r\nlosses or damages relating to or arising out of the Payment Processor’s\r\nservices, including but not limited to the receipt or transmission of payments,\r\nlosses or damages from misdirected or lost payments, breaches of security,\r\nchargebacks, fraud, theft of funds, violations of banking, money-laundering,\r\nprivacy, or any other laws relating to or arising out of the use of the Payment\r\nProcessor’s services; <o:p></o:p></span></p>\r\n\r\n<p class=OutHead2 style='text-indent:0in;mso-list:none;tab-stops:.5in'><span\r\nstyle='font-size:10.0pt;mso-bidi-font-family:Calibri;color:#7F7F7F;mso-themecolor:\r\ntext1;mso-themetint:128'>ii)<span style='mso-tab-count:1'>              </span>Nothing\r\nherein is intended to limit any rights You may have against the Payment <span\r\nclass=GramE>Processor;</span><o:p></o:p></span></p>\r\n\r\n<p class=OutHead2 style='text-indent:0in;mso-list:none;tab-stops:.5in'><span\r\nstyle='font-size:10.0pt;mso-bidi-font-family:Calibri;color:#7F7F7F;mso-themecolor:\r\ntext1;mso-themetint:128'>iii)<span style='mso-tab-count:1'>             </span>Designation\r\nof any Payment Processor does not represent an endorsement by Microsoft of the\r\nPayment Processor or its services, and You will rely on Your own diligence <span\r\nclass=GramE>with regard to</span> the Payment Processor, and You agree that You\r\nwill not state or imply any such endorsement by Microsoft<a\r\nname=\"_heading=h.ihv636\"></a>; and<b style='mso-bidi-font-weight:normal'><o:p></o:p></b></span></p>\r\n\r\n<p class=OutHead2 style='margin-bottom:8.0pt;text-indent:0in;mso-list:none;\r\ntab-stops:.5in'><span style='font-size:10.0pt;mso-bidi-font-family:Calibri;\r\ncolor:#7F7F7F;mso-themecolor:text1;mso-themetint:128'>iv)<span\r\nstyle='mso-tab-count:1'>             </span>Microsoft is not a bank or other\r\ndepository institution, payment institution, a money transmitter or a money\r\nservices business and does not offer any banking, money transmission or payment\r\nservices. <a name=\"_heading=h.4i7ojhp\"></a><a name=\"_heading=h.1mrcu09\"></a><b\r\nstyle='mso-bidi-font-weight:normal'><o:p></o:p></b></span></p>\r\n\r\n<p class=MsoNormal style='text-align:justify;text-justify:inter-ideograph;\r\nline-height:normal'><b><span style='font-size:10.0pt;mso-ascii-font-family:\r\nCalibri;mso-fareast-font-family:\"Times New Roman\";mso-hansi-font-family:Calibri;\r\nmso-bidi-font-family:Calibri;color:#7F7F7F;mso-themecolor:text1;mso-themetint:\r\n128'>10.&nbsp;TAXES.&nbsp;&nbsp;</span></b><span style='font-size:10.0pt;\r\nmso-ascii-font-family:Calibri;mso-hansi-font-family:Calibri;mso-bidi-font-family:\r\nCalibri;color:#7F7F7F;mso-themecolor:text1;mso-themetint:128'>Each party will\r\nbear its own taxes in connection with the transactions under this Agreement,\r\nand all such taxes (including but not limited to net income or gross receipts\r\ntaxes, and taxes arising from sales between a party and its customers) will be\r\nthe financial responsibility of the party who is obligated by operation of law\r\nto pay such tax.<span style='mso-spacerun:yes'>  </span>Each party will pay to\r\nthe other party any sales, use or value added taxes that are owed by that party\r\nsolely as a result of entering into this Agreement and which are required to be\r\ncollected under applicable law.<span style='mso-spacerun:yes'>  </span>A party\r\nmay provide to the other party a valid exemption certificate, in which case the\r\nother party will not collect the taxes covered by such certificate.<span\r\nstyle='mso-spacerun:yes'>  </span>If any taxes are required to be withheld on\r\npayments made by one party to the other, the paying party will deduct such\r\ntaxes from the amount otherwise owed and pay them to the appropriate taxing\r\nauthority.<span style='mso-spacerun:yes'>  </span>The paying party will secure\r\nand deliver to the other party an official receipt for those withholdings and\r\nother documents reasonably requested by the other party in order to claim a\r\nforeign tax credit or refund.<span style='mso-spacerun:yes'>  </span>The\r\nparties will use reasonable efforts to ensure that any taxes withheld are\r\nminimized to the extent possible under applicable law.</span><b><span\r\nstyle='font-size:10.0pt;mso-ascii-font-family:Calibri;mso-fareast-font-family:\r\n\"Times New Roman\";mso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;\r\ncolor:#7F7F7F;mso-themecolor:text1;mso-themetint:128'><o:p></o:p></span></b></p>\r\n\r\n<p class=MsoNormal style='margin-bottom:0in;text-align:justify;text-justify:\r\ninter-ideograph;line-height:normal'><b style='mso-bidi-font-weight:normal'><span\r\nstyle='font-size:10.0pt;mso-ascii-font-family:Calibri;mso-fareast-font-family:\r\n\"Times New Roman\";mso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;\r\ncolor:#7F7F7F;mso-themecolor:text1;mso-themetint:128'>11.&nbsp;DATA AND <span\r\nstyle='mso-bidi-font-weight:bold'>TRADEMARKS.</span>&nbsp;</span></b><span\r\nstyle='font-size:10.0pt;mso-ascii-font-family:Calibri;mso-fareast-font-family:\r\n\"Times New Roman\";mso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;\r\ncolor:#7F7F7F;mso-themecolor:text1;mso-themetint:128'><o:p></o:p></span></p>\r\n\r\n<p class=MsoNormal style='margin-bottom:0in;text-align:justify;text-justify:\r\ninter-ideograph;line-height:normal'><b><span style='font-size:10.0pt;\r\nmso-ascii-font-family:Calibri;mso-fareast-font-family:\"Times New Roman\";\r\nmso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;color:#7F7F7F;\r\nmso-themecolor:text1;mso-themetint:128'>a) </span></b><span style='font-size:\r\n10.0pt;mso-ascii-font-family:Calibri;mso-fareast-font-family:\"Times New Roman\";\r\nmso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;color:#7F7F7F;\r\nmso-themecolor:text1;mso-themetint:128'>Microsoft will collect data\r\nabout&nbsp;Your&nbsp;use of a pubCenter Program and its performance in\r\nconnection with Your Properties. As between You and Microsoft, Microsoft owns\r\nand controls all data collected in connection with pubCenter Programs or from\r\nMicrosoft online properties, apps, and other technology like our tags, pixels,\r\nor other unique tracking codes (“<b>pubCenter Data</b>”). You understand and\r\nacknowledge that Microsoft uses pubCenter Data for its own purposes, including\r\nto (a) generate aggregated reports that may be viewed by Microsoft’s clients\r\nand partners, (b) improve the pubCenter Program and other Microsoft advertising\r\nproducts and services and optimize their performance and (c) provide campaign\r\nreporting to advertisers whose advertising was displayed on Your Properties or\r\notherwise related to reporting and performance analysis. In&nbsp;addition, with\r\nrespect to the pubCenter Program for Mobile App Developers and the pubCenter\r\nProgram for Win App Developers, Microsoft will have the right to, without any\r\nadditional consent or approval from You, share with advertisers and partners\r\n(e.g.,&nbsp;&nbsp;ad networks or exchanges) information specific to Your Mobile\r\nApps and Win Apps including, without limitation, the Mobile App’s or Win App’s\r\nname, Your name as publisher of the Mobile App or Win App, impression data and\r\ntargeting availability.<b style='mso-bidi-font-weight:normal'>&nbsp;</b>You\r\nexpressly agree to worldwide disclosure and transfer of data described in this\r\nSection 11 to Microsoft without any charge.<span style='mso-spacerun:yes'> \r\n</span>If Microsoft makes available to&nbsp;You&nbsp;reports or other\r\ninformation related to Your Properties,&nbsp;upon Microsoft’s request,&nbsp;<span\r\nclass=GramE>You</span>&nbsp;will provide screenshots or other representations\r\nof such reports and information to Microsoft, and You agree that Microsoft may\r\ncopy, distribute and otherwise use these reports and information solely to\r\nprovide and promote the pubCenter Program, and promote Microsoft’s relationship\r\nwith You to potential advertisers.<span style='mso-spacerun:yes'> \r\n</span>Microsoft does not share personal information that may be contained in\r\npubCenter Data collected <span class=GramE>as a result of</span> Your use of\r\npubCenter Programs with third parties in any way that identifies individuals\r\npersonally. To the extent such pubCenter Data is also personal information, we\r\ncollect, use, and disclose such data as described in the Microsoft Privacy\r\nStatement available at https://privacy.microsoft.com/en-us/privacystatement.<o:p></o:p></span></p>\r\n\r\n<p class=MsoNormal style='text-align:justify;text-justify:inter-ideograph;\r\nline-height:normal'><b><span style='font-size:10.0pt;mso-ascii-font-family:\r\nCalibri;mso-fareast-font-family:\"Times New Roman\";mso-hansi-font-family:Calibri;\r\nmso-bidi-font-family:Calibri;color:#7F7F7F;mso-themecolor:text1;mso-themetint:\r\n128'>b</span></b><b style='mso-bidi-font-weight:normal'><span style='font-size:\r\n10.0pt;mso-ascii-font-family:Calibri;mso-fareast-font-family:\"Times New Roman\";\r\nmso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;color:#7F7F7F;\r\nmso-themecolor:text1;mso-themetint:128'>) </span></b><span style='font-size:\r\n10.0pt;mso-ascii-font-family:Calibri;mso-fareast-font-family:\"Times New Roman\";\r\nmso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;color:#7F7F7F;\r\nmso-themecolor:text1;mso-themetint:128'>You grant to Microsoft a worldwide,\r\nnonexclusive, royalty-free, fully paid-up license to display and otherwise use\r\nYour trademarks and trade names that You provide to Microsoft in writing\r\n(including via email) (the “<b style='mso-bidi-font-weight:normal'>Publisher\r\nMarks</b>”) for the purposes of providing and promoting the&nbsp;pubCenter\r\nPrograms.&nbsp;&nbsp;Microsoft will comply with&nbsp;Your&nbsp;trademark usage\r\nguidelines that You provide to Microsoft in writing.&nbsp;&nbsp;All goodwill,\r\nrights, and benefits in the Publisher Marks that arise from Microsoft’s use\r\nunder this Agreement will inure solely to&nbsp;You.&nbsp;<o:p></o:p></span></p>\r\n\r\n<p class=MsoNormal style='text-align:justify;text-justify:inter-ideograph;\r\nline-height:normal'><b><span style='font-size:10.0pt;mso-ascii-font-family:\r\nCalibri;mso-fareast-font-family:\"Times New Roman\";mso-hansi-font-family:Calibri;\r\nmso-bidi-font-family:Calibri;color:#7F7F7F;mso-themecolor:text1;mso-themetint:\r\n128'>12.&nbsp;PRIVACY.&nbsp;</span></b><span style='font-size:10.0pt;\r\nmso-ascii-font-family:Calibri;mso-fareast-font-family:\"Times New Roman\";\r\nmso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;color:#7F7F7F;\r\nmso-themecolor:text1;mso-themetint:128'>Nothing in this Agreement provides for\r\nthe collection or transfer between&nbsp;You&nbsp;and Microsoft of any\r\npersonally identifying&nbsp;information&nbsp;of an end user without the express\r\nconsent of the end user. You must maintain and comply with a posted privacy\r\npolicy on&nbsp;Your&nbsp;Properties and must use the pubCenter Programs and all\r\nother Microsoft technologies in a manner consistent with this privacy policy.\r\nYou assume all liability for the collection, use and disclosure of data related\r\nto users of Your Properties and&nbsp;You&nbsp;will comply with all applicable\r\nlaws and regulations in Your collection, use and disclosure of this data.\r\nMicrosoft does not intend to share any personally identifying&nbsp;information\r\nunder this Agreement with You. However, to the extent that Microsoft does share\r\nany information with You that could be considered “personal information” or\r\n“personal data” under the California Consumer Privacy Act (&quot;<b>CCPA</b>”),\r\nthe General Data Protection Regulation (“<b>GDPR</b>”), or any other applicable\r\nprivacy law, You are prohibited from: (<span class=SpellE>i</span>) selling or\r\nsharing such personal information unless the consumer is first provided notice\r\nand an opportunity to opt out of the sale or sharing in the United States; or\r\n(ii) retaining, using, or disclosing such personal information for any purpose\r\nother than for the specific purpose intended when it was shared. You will\r\ncomply with all applicable obligations under the CCPA, GDPR and other\r\napplicable privacy laws and will provide the level of privacy protection\r\nrequired of your business. You will notify Microsoft if you determine that you\r\ncan no longer comply with this section of the Agreement, and you will maintain\r\nreasonable security procedures and practices appropriate to the nature of the\r\npersonal information to protect the personal information from unauthorized or\r\nillegal access, destruction, use, modification, or disclosure. <a\r\nname=\"_Ref267068822\"><o:p></o:p></a></span></p>\r\n\r\n<p class=MsoNormal style='text-align:justify;text-justify:inter-ideograph;\r\nline-height:normal'><span style='mso-bookmark:_Ref267068822'><b\r\nstyle='mso-bidi-font-weight:normal'><span style='font-size:10.0pt;mso-ascii-font-family:\r\nCalibri;mso-fareast-font-family:\"Times New Roman\";mso-hansi-font-family:Calibri;\r\nmso-bidi-font-family:Calibri;color:#7F7F7F;mso-themecolor:text1;mso-themetint:\r\n128'>13.</span></b></span><b style='mso-bidi-font-weight:normal'><span\r\nstyle='font-size:10.0pt;mso-ascii-font-family:Calibri;mso-fareast-font-family:\r\n\"Times New Roman\";mso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;\r\ncolor:#7F7F7F;mso-themecolor:text1;mso-themetint:128'>&nbsp;CONSUMER\r\nNOTICES.&nbsp;</span></b><span style='font-size:10.0pt;mso-ascii-font-family:\r\nCalibri;mso-fareast-font-family:\"Times New Roman\";mso-hansi-font-family:Calibri;\r\nmso-bidi-font-family:Calibri;color:#7F7F7F;mso-themecolor:text1;mso-themetint:\r\n128'>You will maintain a privacy policy, along with consumer privacy notices\r\nthat refer to&nbsp;Your&nbsp;privacy policy, that are all prominently visible\r\non or in Your Properties and <span class=GramE>all of</span> Your websites.\r\nYour privacy policies and notices must be based on then-current laws,\r\nregulations and industry best practices and must include at a minimum: (a) a\r\nfull, accurate and clear disclosure regarding the placement, use and reading of\r\ncookies (if applicable) and related technologies, and any collection, sharing\r\nand use of data related to activity by users; (b) Your use of Microsoft and/or\r\nother third party ad providers and a pubCenter Program for the delivery of\r\nadvertising and data collection by Microsoft and/or other third party ad\r\nproviders in connection with the pubCenter Program; (c)&nbsp;&nbsp;explicitly\r\nobtain affirmative user consent prior to collecting or using user-related\r\ninformation;&nbsp;and (d) a disclosure that users may choose to not participate\r\nin Microsoft’s or other third-party ad providers’ personalized advertising\r\nservices, along with a clear, meaningful and prominent link (such as in the\r\nfooter of its website) to Microsoft-specified web address at&nbsp;&nbsp;</span><span\r\nstyle='font-size:8.0pt'><a href=\"https://choice.live.com/AdvertisementChoice/\"><span\r\nstyle='font-size:10.0pt;mso-ascii-font-family:Calibri;mso-fareast-font-family:\r\n\"Times New Roman\";mso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;\r\ncolor:#7F7F7F;mso-themecolor:text1;mso-themetint:128'>https://choice.live.com/AdvertisementChoice/</span></a></span><span\r\nstyle='font-size:10.0pt;mso-ascii-font-family:Calibri;mso-fareast-font-family:\r\n\"Times New Roman\";mso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;\r\ncolor:#7F7F7F;mso-themecolor:text1;mso-themetint:128'>&nbsp;or other industry\r\nopt-out tools approved by Microsoft where users may &quot;opt out&quot; of such\r\npersonalized advertising services.&nbsp;&nbsp;Currently approved industry\r\nopt-outs include without limitation, www.networkadvertising.org/ or the\r\nSelf-Regulatory Program for Behavioral Advertising Consumer Choice opt-out page\r\nlocated at&nbsp;</span><span style='font-size:8.0pt'><a\r\nhref=\"http://www.aboutads.info/\"><span style='font-size:10.0pt;mso-ascii-font-family:\r\nCalibri;mso-fareast-font-family:\"Times New Roman\";mso-hansi-font-family:Calibri;\r\nmso-bidi-font-family:Calibri;color:#7F7F7F;mso-themecolor:text1;mso-themetint:\r\n128'>www.AboutAds.info</span></a></span><span style='font-size:10.0pt;\r\nmso-ascii-font-family:Calibri;mso-fareast-font-family:\"Times New Roman\";\r\nmso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;color:#7F7F7F;\r\nmso-themecolor:text1;mso-themetint:128'>&nbsp;for the US and Canada or&nbsp;</span><span\r\nstyle='font-size:8.0pt'><a href=\"http://www.youronlinechoices.eu/\"><span\r\nstyle='font-size:10.0pt;mso-ascii-font-family:Calibri;mso-fareast-font-family:\r\n\"Times New Roman\";mso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;\r\ncolor:#7F7F7F;mso-themecolor:text1;mso-themetint:128'>http://www.youronlinechoices.eu/</span></a></span><span\r\nstyle='font-size:10.0pt;mso-ascii-font-family:Calibri;mso-fareast-font-family:\r\n\"Times New Roman\";mso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;\r\ncolor:#7F7F7F;mso-themecolor:text1;mso-themetint:128'>&nbsp;for Europe, or the\r\napplicable laws and regulations in the People’s Republic of China in this\r\nregard.&nbsp;&nbsp;If at any time after acceptance of these terms specific US\r\nand/or legislation of any country applicable to You or Your Properties provides\r\nfor additional legal requirements to Your Properties or relevant activities (e.g.,\r\ndata collection), You agree to immediately adjust Your Properties so that they\r\nbecome compliant with all applicable legislation regardless of any notice from\r\nMicrosoft in this regard. You agree that&nbsp;You&nbsp;are solely liable for\r\ncomplying with <span class=GramE>any and all</span> applicable legislation from\r\nthe countries where Your Properties are developed and intended to be made\r\navailable or legislation that is otherwise applicable to You.<o:p></o:p></span></p>\r\n\r\n<p class=MsoNormal style='text-align:justify;text-justify:inter-ideograph;\r\nline-height:normal'><a name=\"_Ref270378698\"><b style='mso-bidi-font-weight:\r\nnormal'><span style='font-size:10.0pt;mso-ascii-font-family:Calibri;mso-fareast-font-family:\r\n\"Times New Roman\";mso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;\r\ncolor:#7F7F7F;mso-themecolor:text1;mso-themetint:128'>14.</span></b></a><b\r\nstyle='mso-bidi-font-weight:normal'><span style='font-size:10.0pt;mso-ascii-font-family:\r\nCalibri;mso-fareast-font-family:\"Times New Roman\";mso-hansi-font-family:Calibri;\r\nmso-bidi-font-family:Calibri;color:#7F7F7F;mso-themecolor:text1;mso-themetint:\r\n128'>&nbsp;SUPPORT AND FEEDBACK.&nbsp;</span></b><span style='font-size:10.0pt;\r\nmso-ascii-font-family:Calibri;mso-fareast-font-family:\"Times New Roman\";\r\nmso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;color:#7F7F7F;\r\nmso-themecolor:text1;mso-themetint:128'>Microsoft is not obligated to provide\r\nany technical or other support to&nbsp;You&nbsp;for the pubCenter Programs.\r\nIf&nbsp;You&nbsp;give feedback about the pubCenter Programs to Microsoft, then\r\nYou grant to Microsoft, without charge, the right to use, share, and\r\ncommercialize Your feedback in any way and for any purpose. You also grant to third\r\nparties, without charge, any patent rights necessary for their products, <span\r\nclass=GramE>technologies</span> and services to use or interface with any\r\nspecific parts of a Microsoft software or service that\r\nincorporates&nbsp;Your&nbsp;feedback. You will not give feedback that is subject\r\nto a license that requires Microsoft to license its software or documentation\r\nto third parties because Microsoft includes&nbsp;Your&nbsp;feedback in our\r\nsoftware or documentation. These rights that You grant to Microsoft and third\r\nparties in this Section 14 will survive any termination of this Agreement or\r\nany termination of Your rights to use the pubCenter Programs. In addition,\r\nif&nbsp;You&nbsp;receive any feedback, comments, or complaints from users of\r\nYour Properties about any advertising delivered by the pubCenter Programs, <span\r\nclass=GramE>You</span> will promptly forward this information to&nbsp;</span><span\r\nstyle='font-size:8.0pt'><a href=\"mailto:pubhelp@microsoft.com\"><span\r\nstyle='font-size:10.0pt;mso-ascii-font-family:Calibri;mso-fareast-font-family:\r\n\"Times New Roman\";mso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;\r\ncolor:#7F7F7F;mso-themecolor:text1;mso-themetint:128'>pubhelp@microsoft.com</span></a></span><span\r\nstyle='font-size:10.0pt;mso-ascii-font-family:Calibri;mso-fareast-font-family:\r\n\"Times New Roman\";mso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;\r\ncolor:#7F7F7F;mso-themecolor:text1;mso-themetint:128'>.<o:p></o:p></span></p>\r\n\r\n<p class=MsoNormal style='text-align:justify;text-justify:inter-ideograph;\r\nline-height:normal'><b style='mso-bidi-font-weight:normal'><span\r\nstyle='font-size:10.0pt;mso-ascii-font-family:Calibri;mso-fareast-font-family:\r\n\"Times New Roman\";mso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;\r\ncolor:#7F7F7F;mso-themecolor:text1;mso-themetint:128'>15.&nbsp;USE OF\r\nTHIRD-PARTY ADVERTISING PLATFORMS. </span></b><span style='font-size:10.0pt;\r\nmso-ascii-font-family:Calibri;mso-fareast-font-family:\"Times New Roman\";\r\nmso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;color:#7F7F7F;\r\nmso-themecolor:text1;mso-themetint:128'><span\r\nstyle='mso-spacerun:yes'> </span>You have the option of authorizing the serving\r\nof ads from third-party advertising serving platforms (e.g., Google AdSense)\r\nwith whom you have an account (the “<b style='mso-bidi-font-weight:normal'>Third\r\nParty Platform Program</b>”).<span style='mso-spacerun:yes'>  </span>If you\r\nwould like to participate in the <span class=GramE>Third Party</span> Platform\r\nProgram, you will need to configure the settings for ad placement in your\r\nAccount, supply the requested authentication and authorization, and comply with\r\nthe third party platform’s applicable terms and policies (including privacy\r\nrules).<span style='mso-spacerun:yes'>  </span>If you have elected to\r\nparticipate in the <span class=GramE>Third Party</span> Platform Program, you\r\nwill be prompted to log into your account with the third party platform and to\r\nauthorize Microsoft to have access to such account and data to facilitate ad\r\nserving and other related activities (e.g., reporting). Microsoft will have no\r\nresponsibility or liability for any losses or damages relating to or arising\r\nout of use of the <span class=GramE>Third Party</span> Platform Program or its\r\nfunctionality in connection with a pubCenter Program.<o:p></o:p></span></p>\r\n\r\n<p class=MsoNormal style='text-align:justify;text-justify:inter-ideograph;\r\nline-height:normal'><b style='mso-bidi-font-weight:normal'><span\r\nstyle='font-size:10.0pt;mso-ascii-font-family:Calibri;mso-fareast-font-family:\r\n\"Times New Roman\";mso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;\r\ncolor:#7F7F7F;mso-themecolor:text1;mso-themetint:128'>16.PUBLICITY/INFORMATION\r\nREQUESTS.</span></b><span style='font-size:10.0pt;mso-ascii-font-family:Calibri;\r\nmso-fareast-font-family:\"Times New Roman\";mso-hansi-font-family:Calibri;\r\nmso-bidi-font-family:Calibri;color:#7F7F7F;mso-themecolor:text1;mso-themetint:\r\n128'>&nbsp;You may not cause or permit to be released any publicity,\r\nadvertisement, news release, public announcement, or denial or confirmation of\r\nthe same, in whatever form, regarding any aspect of this Agreement or the\r\nrelationship between&nbsp;You&nbsp;and Microsoft, without Microsoft’s prior\r\nwritten consent. In addition,&nbsp;<span class=GramE>You</span>&nbsp;may not\r\nuse Microsoft’s name, trade name, service marks, trademarks, trade dress or\r\nlogo in publicity releases, advertising or similar activities without\r\nMicrosoft’s prior written consent and compliance with the Microsoft Trademark\r\nGuidelines.<o:p></o:p></span></p>\r\n\r\n<p class=MsoNormal style='text-align:justify;text-justify:inter-ideograph;\r\nline-height:normal'><b><span style='font-size:10.0pt;mso-ascii-font-family:\r\nCalibri;mso-fareast-font-family:\"Times New Roman\";mso-hansi-font-family:Calibri;\r\nmso-bidi-font-family:Calibri;color:#7F7F7F;mso-themecolor:text1;mso-themetint:\r\n128'>17.&nbsp;RESERVATION OF RIGHTS.&nbsp;</span></b><span style='font-size:\r\n10.0pt;mso-ascii-font-family:Calibri;mso-fareast-font-family:\"Times New Roman\";\r\nmso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;color:#7F7F7F;\r\nmso-themecolor:text1;mso-themetint:128'>Microsoft retains ownership of all\r\nintellectual property rights associated with the pubCenter Programs and the\r\npubCenter Site, its technology and any enhancements or modifications thereof.\r\nAs between Microsoft and You, <span class=GramE>You</span> retain all\r\nintellectual property rights in the contents of Your Properties, other than\r\nsuch content as Microsoft or its clients may supply. Microsoft’s clients will\r\nretain all right to the advertising displayed on Your Properties.<o:p></o:p></span></p>\r\n\r\n<p class=MsoNormal style='margin-bottom:0in;text-align:justify;text-justify:\r\ninter-ideograph;line-height:normal'><b><span style='font-size:10.0pt;\r\nmso-ascii-font-family:Calibri;mso-fareast-font-family:\"Times New Roman\";\r\nmso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;color:#7F7F7F;\r\nmso-themecolor:text1;mso-themetint:128'>18.&nbsp;WARRANTIES.&nbsp;</span></b><span\r\nstyle='font-size:10.0pt;mso-ascii-font-family:Calibri;mso-fareast-font-family:\r\n\"Times New Roman\";mso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;\r\ncolor:#7F7F7F;mso-themecolor:text1;mso-themetint:128'>At all times during the\r\nterm of this Agreement,<b>&nbsp;</b><span class=GramE>You</span> represent,\r\nwarrant and undertake to Microsoft that:<o:p></o:p></span></p>\r\n\r\n<p class=MsoListParagraphCxSpFirst style='margin-top:0in;margin-right:0in;\r\nmargin-bottom:0in;margin-left:.75in;mso-add-space:auto;text-indent:-.25in;\r\nline-height:normal;mso-list:l3 level2 lfo6;tab-stops:45.0pt'><![if !supportLists]><span\r\nstyle='font-size:10.0pt;mso-ascii-font-family:Calibri;mso-fareast-font-family:\r\nCalibri;mso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;color:#7F7F7F;\r\nmso-themecolor:text1;mso-themetint:128'><span style='mso-list:Ignore'>i)<span\r\nstyle='font:7.0pt \"Times New Roman\"'>&nbsp; </span></span></span><![endif]><b><span\r\nstyle='font-size:10.0pt;mso-ascii-font-family:Calibri;mso-fareast-font-family:\r\n\"Times New Roman\";mso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;\r\ncolor:#7F7F7F;mso-themecolor:text1;mso-themetint:128'><span\r\nstyle='mso-spacerun:yes'>   </span></span></b><span style='font-size:10.0pt;\r\nmso-ascii-font-family:Calibri;mso-fareast-font-family:\"Times New Roman\";\r\nmso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;color:#7F7F7F;\r\nmso-themecolor:text1;mso-themetint:128'>You have the power and authority to\r\nenter into this Agreement and to fully perform Your obligations under this <span\r\nclass=GramE>Agreement;</span><o:p></o:p></span></p>\r\n\r\n<p class=MsoListParagraphCxSpMiddle style='margin-top:0in;margin-right:0in;\r\nmargin-bottom:0in;margin-left:.75in;mso-add-space:auto;text-indent:-.25in;\r\nline-height:normal;mso-list:l3 level2 lfo6;tab-stops:45.0pt'><![if !supportLists]><span\r\nstyle='font-size:10.0pt;mso-ascii-font-family:Calibri;mso-fareast-font-family:\r\nCalibri;mso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;color:#7F7F7F;\r\nmso-themecolor:text1;mso-themetint:128'><span style='mso-list:Ignore'>ii)<span\r\nstyle='font:7.0pt \"Times New Roman\"'> </span></span></span><![endif]><span\r\nstyle='font-size:10.0pt;mso-ascii-font-family:Calibri;mso-fareast-font-family:\r\n\"Times New Roman\";mso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;\r\ncolor:#7F7F7F;mso-themecolor:text1;mso-themetint:128'>You are a business or\r\nsole proprietor and not a <span class=GramE>consumer;</span><o:p></o:p></span></p>\r\n\r\n<p class=MsoListParagraphCxSpMiddle style='margin-top:0in;margin-right:0in;\r\nmargin-bottom:0in;margin-left:.75in;mso-add-space:auto;text-indent:-.25in;\r\nline-height:normal;mso-list:l3 level2 lfo6;tab-stops:45.0pt'><![if !supportLists]><span\r\nstyle='font-size:10.0pt;mso-ascii-font-family:Calibri;mso-fareast-font-family:\r\nCalibri;mso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;color:#7F7F7F;\r\nmso-themecolor:text1;mso-themetint:128'><span style='mso-list:Ignore'>iii)<span\r\nstyle='font:7.0pt \"Times New Roman\"'>&nbsp;&nbsp;&nbsp; </span></span></span><![endif]><span\r\nstyle='font-size:10.0pt;mso-ascii-font-family:Calibri;mso-fareast-font-family:\r\n\"Times New Roman\";mso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;\r\ncolor:#7F7F7F;mso-themecolor:text1;mso-themetint:128'>You are authorized to act\r\non behalf of any third party for which You facilitate participation in the\r\npubCenter <span class=GramE>Programs;</span><o:p></o:p></span></p>\r\n\r\n<p class=MsoListParagraphCxSpMiddle style='margin-top:0in;margin-right:0in;\r\nmargin-bottom:0in;margin-left:.75in;mso-add-space:auto;text-indent:-.25in;\r\nline-height:normal;mso-list:l3 level2 lfo6;tab-stops:45.0pt'><![if !supportLists]><span\r\nstyle='font-size:10.0pt;mso-ascii-font-family:Calibri;mso-fareast-font-family:\r\nCalibri;mso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;color:#7F7F7F;\r\nmso-themecolor:text1;mso-themetint:128'><span style='mso-list:Ignore'>iv)<span\r\nstyle='font:7.0pt \"Times New Roman\"'>&nbsp;&nbsp;&nbsp; </span></span></span><![endif]><span\r\nstyle='font-size:10.0pt;mso-ascii-font-family:Calibri;mso-fareast-font-family:\r\n\"Times New Roman\";mso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;\r\ncolor:#7F7F7F;mso-themecolor:text1;mso-themetint:128'>You have obtained any and\r\nall consents, approvals or licenses (including written consents of third\r\nparties where applicable) required for the display of advertising by a\r\npubCenter Program on or in Your Properties, including without limitation, the\r\ninternet content provider permit, as <span class=GramE>applicable;</span><o:p></o:p></span></p>\r\n\r\n<p class=MsoListParagraphCxSpMiddle style='margin-top:0in;margin-right:0in;\r\nmargin-bottom:0in;margin-left:.75in;mso-add-space:auto;text-indent:-.25in;\r\nline-height:normal;mso-list:l3 level2 lfo6;tab-stops:45.0pt'><![if !supportLists]><span\r\nstyle='font-size:10.0pt;mso-ascii-font-family:Calibri;mso-fareast-font-family:\r\nCalibri;mso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;color:#7F7F7F;\r\nmso-themecolor:text1;mso-themetint:128'><span style='mso-list:Ignore'>v)<span\r\nstyle='font:7.0pt \"Times New Roman\"'> </span></span></span><![endif]><span\r\nstyle='font-size:10.0pt;mso-ascii-font-family:Calibri;mso-fareast-font-family:\r\n\"Times New Roman\";mso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;\r\ncolor:#7F7F7F;mso-themecolor:text1;mso-themetint:128'>Your <span class=GramE>Properties</span>,\r\nincluding all activities carried on or through Your Properties, comply with all\r\napplicable laws and regulations;<o:p></o:p></span></p>\r\n\r\n<p class=MsoListParagraphCxSpMiddle style='margin-top:0in;margin-right:0in;\r\nmargin-bottom:0in;margin-left:.75in;mso-add-space:auto;text-indent:-.25in;\r\nline-height:normal;mso-list:l3 level2 lfo6;tab-stops:45.0pt'><![if !supportLists]><span\r\nstyle='font-size:10.0pt;mso-ascii-font-family:Calibri;mso-fareast-font-family:\r\nCalibri;mso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;color:#7F7F7F;\r\nmso-themecolor:text1;mso-themetint:128'><span style='mso-list:Ignore'>vi)<span\r\nstyle='font:7.0pt \"Times New Roman\"'>&nbsp;&nbsp;&nbsp; </span></span></span><![endif]><span\r\nstyle='font-size:10.0pt;mso-ascii-font-family:Calibri;mso-fareast-font-family:\r\n\"Times New Roman\";mso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;\r\ncolor:#7F7F7F;mso-themecolor:text1;mso-themetint:128'>Your <span class=GramE>Properties</span>\r\n(including the content available on or through Your Properties) do not\r\ninfringe, misappropriate or otherwise violate any third-party intellectual\r\nproperty right;<o:p></o:p></span></p>\r\n\r\n<p class=MsoListParagraphCxSpMiddle style='margin-top:0in;margin-right:0in;\r\nmargin-bottom:0in;margin-left:.75in;mso-add-space:auto;text-indent:-.25in;\r\nline-height:normal;mso-list:l3 level2 lfo6;tab-stops:45.0pt'><![if !supportLists]><span\r\nstyle='font-size:10.0pt;mso-ascii-font-family:Calibri;mso-fareast-font-family:\r\nCalibri;mso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;color:#7F7F7F;\r\nmso-themecolor:text1;mso-themetint:128'><span style='mso-list:Ignore'>vii)<span\r\nstyle='font:7.0pt \"Times New Roman\"'>&nbsp;&nbsp; </span></span></span><![endif]><span\r\nstyle='font-size:10.0pt;mso-ascii-font-family:Calibri;mso-fareast-font-family:\r\n\"Times New Roman\";mso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;\r\ncolor:#7F7F7F;mso-themecolor:text1;mso-themetint:128'>Your <span class=GramE>Properties</span>\r\ndo not violate the rights of any person or entity, including, without\r\nlimitation, rights of publicity or privacy, and are not defamatory, </span><span\r\nstyle='font-size:10.0pt;mso-ascii-font-family:Calibri;mso-fareast-font-family:\r\nCalibri;mso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;color:#7F7F7F;\r\nmso-themecolor:text1;mso-themetint:128'>misleading, false, libelous, obscene,\r\nunlawful, or injurious to any third party</span><span style='font-size:10.0pt;\r\nmso-ascii-font-family:Calibri;mso-fareast-font-family:\"Times New Roman\";\r\nmso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;color:#7F7F7F;\r\nmso-themecolor:text1;mso-themetint:128'>;<o:p></o:p></span></p>\r\n\r\n<p class=MsoListParagraphCxSpMiddle style='margin-top:0in;margin-right:0in;\r\nmargin-bottom:0in;margin-left:.75in;mso-add-space:auto;text-indent:-.25in;\r\nline-height:normal;mso-list:l3 level2 lfo6;tab-stops:45.0pt'><![if !supportLists]><span\r\nstyle='font-size:10.0pt;mso-ascii-font-family:Calibri;mso-fareast-font-family:\r\nCalibri;mso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;color:#7F7F7F;\r\nmso-themecolor:text1;mso-themetint:128'><span style='mso-list:Ignore'>viii)<span\r\nstyle='font:7.0pt \"Times New Roman\"'>&nbsp; </span></span></span><![endif]><span\r\nstyle='font-size:10.0pt;mso-ascii-font-family:Calibri;mso-fareast-font-family:\r\n\"Times New Roman\";mso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;\r\ncolor:#7F7F7F;mso-themecolor:text1;mso-themetint:128'>Your transfer and\r\ndisclosures of data to Microsoft are compliant with all applicable data\r\nprotection laws; and<o:p></o:p></span></p>\r\n\r\n<p class=MsoListParagraphCxSpLast style='margin-left:.75in;mso-add-space:auto;\r\ntext-indent:-.25in;line-height:normal;mso-list:l3 level2 lfo6;tab-stops:45.0pt'><![if !supportLists]><span\r\nstyle='font-size:10.0pt;mso-ascii-font-family:Calibri;mso-fareast-font-family:\r\nCalibri;mso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;color:#7F7F7F;\r\nmso-themecolor:text1;mso-themetint:128'><span style='mso-list:Ignore'>ix)<span\r\nstyle='font:7.0pt \"Times New Roman\"'>&nbsp;&nbsp;&nbsp; </span></span></span><![endif]><span\r\nstyle='font-size:10.0pt;mso-ascii-font-family:Calibri;mso-fareast-font-family:\r\n\"Times New Roman\";mso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;\r\ncolor:#7F7F7F;mso-themecolor:text1;mso-themetint:128'>The\r\ninformation&nbsp;You&nbsp;provide to Microsoft under or in connection with this\r\nAgreement is true, accurate, current, and complete and not misleading.<o:p></o:p></span></p>\r\n\r\n<p class=MsoNormal style='text-align:justify;text-justify:inter-ideograph;\r\nline-height:normal'><span style='font-size:10.0pt;mso-ascii-font-family:Calibri;\r\nmso-fareast-font-family:\"Times New Roman\";mso-hansi-font-family:Calibri;\r\nmso-bidi-font-family:Calibri;color:#7F7F7F;mso-themecolor:text1;mso-themetint:\r\n128'>If the person agreeing to these terms is an individual acting on behalf of\r\na business or sole proprietorship, such person hereby represents and warrants\r\nthat they are authorized to act on behalf of such business or sole\r\nproprietorship and that they are at least the older of 18 years of age or the\r\nage of majority in their applicable jurisdiction.<o:p></o:p></span></p>\r\n\r\n<p class=MsoNormal style='text-align:justify;text-justify:inter-ideograph;\r\nline-height:normal'><b style='mso-bidi-font-weight:normal'><span\r\nstyle='font-size:10.0pt;mso-ascii-font-family:Calibri;mso-fareast-font-family:\r\n\"Times New Roman\";mso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;\r\ncolor:#7F7F7F;mso-themecolor:text1;mso-themetint:128'>19.&nbsp;BINDING\r\nARBITRATION AND CLASS ACTION WAIVER IF YOUR PRINCIPAL PLACE OF BUSINESS IS IN\r\nTHE UNITED STATES.&nbsp;</span></b><strong><span style='font-size:10.0pt;\r\nfont-family:\"Calibri\",sans-serif;color:#7F7F7F;mso-themecolor:text1;mso-themetint:\r\n128'>We hope we never have a dispute, but if we do, You and we agree to try for\r\n60 days to work it out informally. If we can’t, You and we agree to binding\r\nindividual arbitration before the American Arbitration Association (“AAA”)\r\nunder the Federal Arbitration Act, and not to sue in court in front of a judge\r\nor jury. Instead, a neutral arbitrator will decide. Class action lawsuits,\r\nclass-wide arbitrations, private attorney-general actions, and any other\r\nproceeding where someone acts in a representative capacity aren’t allowed. Nor\r\nis combining individual proceedings without the consent of all parties.<span\r\nstyle='mso-spacerun:yes'>  </span></span></strong><span style='font-size:10.0pt;\r\nmso-ascii-font-family:Calibri;mso-fareast-font-family:\"Times New Roman\";\r\nmso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;color:#7F7F7F;\r\nmso-themecolor:text1;mso-themetint:128'>This Section applies to any dispute<b\r\nstyle='mso-bidi-font-weight:normal'>&nbsp;EXCEPT DISPUTES RELATING TO THE\r\nENFORCEMENT OR VALIDITY OF YOUR, YOUR LICENSORS’, MICROSOFT’S, OR MICROSOFT’S\r\nLICENSORS’ INTELLECTUAL PROPERTY RIGHTS.&nbsp;</b>The term “dispute” means any\r\ndispute, action, or other controversy between&nbsp;You&nbsp;and Microsoft\r\nconcerning the pubCenter Programs (including their price) or this Agreement,\r\nwhether in contract, warranty, tort, statute, regulation, ordinance, or any\r\nother legal or equitable basis. “Dispute” will be given the broadest possible\r\nmeaning allowable under law.</span><span style='font-size:10.0pt;mso-ascii-font-family:\r\nCalibri;mso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;color:#7F7F7F;\r\nmso-themecolor:text1;mso-themetint:128'><o:p></o:p></span></p>\r\n\r\n<p class=MsoNormal style='text-align:justify;text-justify:inter-ideograph;\r\nline-height:normal'><b><span style='font-size:10.0pt;mso-ascii-font-family:\r\nCalibri;mso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;color:#7F7F7F;\r\nmso-themecolor:text1;mso-themetint:128'>The complete Arbitration Agreement and\r\nClass Action Waiver contains more terms and is at&nbsp;</span></b><span\r\nstyle='font-size:8.0pt'><a\r\nhref=\"https://about.ads.microsoft.com/en-us/resources/policies/class-action-waiver-and-binding-arbitration\"><span\r\nstyle='font-size:10.0pt;mso-bidi-font-family:Calibri;color:#7F7F7F;mso-themecolor:\r\ntext1;mso-themetint:128'>https://about.ads.microsoft.com/en-us/resources/policies/class-action-waiver-and-binding-arbitration</span></a></span><b><span\r\nstyle='font-size:10.0pt;mso-ascii-font-family:Calibri;mso-hansi-font-family:\r\nCalibri;mso-bidi-font-family:Calibri;color:#7F7F7F;mso-themecolor:text1;\r\nmso-themetint:128'>. You and we agree to it. Please read it.</span></b><span\r\nstyle='font-size:10.0pt;mso-ascii-font-family:Calibri;mso-fareast-font-family:\r\n\"Times New Roman\";mso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;\r\ncolor:#7F7F7F;mso-themecolor:text1;mso-themetint:128'><o:p></o:p></span></p>\r\n\r\n<p class=MsoNormal style='text-align:justify;text-justify:inter-ideograph;\r\nline-height:normal'><a name=\"_Ref299921916\"><b><span style='font-size:10.0pt;\r\nmso-ascii-font-family:Calibri;mso-fareast-font-family:\"Times New Roman\";\r\nmso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;color:#7F7F7F;\r\nmso-themecolor:text1;mso-themetint:128'>20.</span></b></a><b><span\r\nstyle='font-size:10.0pt;mso-ascii-font-family:Calibri;mso-fareast-font-family:\r\n\"Times New Roman\";mso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;\r\ncolor:#7F7F7F;mso-themecolor:text1;mso-themetint:128'>&nbsp;DISCLAIMER OF\r\nWARRANTIES.&nbsp;</span></b><span style='font-size:10.0pt;mso-ascii-font-family:\r\nCalibri;mso-fareast-font-family:\"Times New Roman\";mso-hansi-font-family:Calibri;\r\nmso-bidi-font-family:Calibri;color:#7F7F7F;mso-themecolor:text1;mso-themetint:\r\n128'>MICROSOFT PROVIDES THE PUBCENTER SITE AND PUBCENTER PROGRAMS\r\n&quot;AS-IS,&quot; &quot;WITH ALL FAULTS,&quot; AND &quot;AS AVAILABLE.&quot;\r\nYOU BEAR THE RISK OF USING THE PUBCENTER SITE AND PUBCENTER PROGRAMS TO DISPLAY\r\nADVERTISING ON OR IN YOUR PROPERTIES. TO THE MAXIMUM EXTENT PERMITTED BY LOCAL\r\nLAW, MICROSOFT EXCLUDES ANY EXPRESS, <span class=GramE>STATUTORY</span> OR\r\nIMPLIED WARRANTIES OR CONDITIONS, INCLUDING THOSE OF PRODUCT LIABILITY,\r\nMERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A PARTICULAR PURPOSE, WORKMANLIKE\r\nEFFORT, TITLE, AND NON-INFRINGEMENT, RELATING TO THE PUBCENTER SITE AND\r\nPUBCENTER PROGRAMS. </span><strong><span style='font-size:10.0pt;font-family:\r\n\"Calibri\",sans-serif;color:#7F7F7F;mso-themecolor:text1;mso-themetint:128;\r\nborder:none windowtext 1.0pt;mso-border-alt:none windowtext 0in;padding:0in;\r\nbackground:white;font-weight:normal'>YOU MAY HAVE CERTAIN RIGHTS UNDER YOUR\r\nLOCAL LAW. NOTHING IN THESE TERMS IS INTENDED TO AFFECT THOSE RIGHTS, IF THEY\r\nARE APPLICABLE. </span></strong><span style='font-size:10.0pt;mso-ascii-font-family:\r\nCalibri;mso-fareast-font-family:\"Times New Roman\";mso-hansi-font-family:Calibri;\r\nmso-bidi-font-family:Calibri;color:#7F7F7F;mso-themecolor:text1;mso-themetint:\r\n128'>WITHOUT LIMITING ANY OF THE FOREGOING, </span><strong><span\r\nstyle='font-size:10.0pt;font-family:\"Calibri\",sans-serif;color:#7F7F7F;\r\nmso-themecolor:text1;mso-themetint:128;border:none windowtext 1.0pt;mso-border-alt:\r\nnone windowtext 0in;padding:0in;background:white;font-weight:normal;mso-bidi-font-weight:\r\nbold'>YOU ACKNOWLEDGE THAT COMPUTER AND TELECOMMUNICATIONS SYSTEMS ARE NOT\r\nFAULT-FREE AND OCCASIONAL PERIODS OF</span></strong><strong><span\r\nstyle='font-size:10.0pt;font-family:\"Calibri\",sans-serif;color:#7F7F7F;\r\nmso-themecolor:text1;mso-themetint:128;border:none windowtext 1.0pt;mso-border-alt:\r\nnone windowtext 0in;padding:0in;background:white;mso-bidi-font-weight:normal'> </span></strong><strong><span\r\nstyle='font-size:10.0pt;font-family:\"Calibri\",sans-serif;color:#7F7F7F;\r\nmso-themecolor:text1;mso-themetint:128;border:none windowtext 1.0pt;mso-border-alt:\r\nnone windowtext 0in;padding:0in;background:white;font-weight:normal;mso-bidi-font-weight:\r\nbold'>DOWNTIME OCCUR.</span></strong><strong><span style='font-size:6.5pt;\r\nfont-family:\"Calibri\",sans-serif;color:#7F7F7F;mso-themecolor:text1;mso-themetint:\r\n128;border:none windowtext 1.0pt;mso-border-alt:none windowtext 0in;padding:\r\n0in;background:white'><span style='mso-spacerun:yes'>  </span></span></strong><span\r\nstyle='font-size:10.0pt;mso-ascii-font-family:Calibri;mso-fareast-font-family:\r\n\"Times New Roman\";mso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;\r\ncolor:#7F7F7F;mso-themecolor:text1;mso-themetint:128'>MICROSOFT EXPRESSLY\r\nDISCLAIMS ANY WARRANTIES OR CONDITIONS THAT ACCESS TO OR USE OF THE PUBCENTER\r\nSITE AND PUBCENTER PROGRAMS WILL BE UNINTERRUPTED, SECURE, OR ERROR FREE.&nbsp;<o:p></o:p></span></p>\r\n\r\n<p class=MsoNormal style='text-align:justify;text-justify:inter-ideograph;\r\nline-height:normal;vertical-align:top'><span lang=EN-AU style='font-size:10.0pt;\r\nmso-ascii-font-family:Calibri;mso-fareast-font-family:\"Times New Roman\";\r\nmso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;color:#7F7F7F;\r\nmso-themecolor:text1;mso-themetint:128;mso-ansi-language:EN-AU'>IF YOU LIVE IN\r\nAUSTRALIA, there are guarantees that are implied under the Australian Consumer\r\nLaw that may apply to the goods and services supplied to&nbsp;You&nbsp;as part\r\nof the <span class=SpellE>pubCenter</span> Programs (the “<b>AU Guarantees</b>”).\r\nShould the AU Guarantees apply to&nbsp;You, then these AU Guarantees are not\r\nincluded in the disclaimers and exclusions specified by this Section 20. For\r\nthose <span class=SpellE>pubCenter</span> Programs that include services\r\n(rather than goods), should Microsoft breach any of the AU Guarantees, <span\r\nclass=GramE>Your</span> remedy is limited to receiving the supply of the\r\nservice again or the payment of the cost of having the services supplied again.\r\nFor those <span class=SpellE>pubCenter</span> Programs that includes goods\r\n(which includes computer software), the goods come with AU Guarantees that\r\ncannot be excluded under the Australian Consumer Law and You are entitled to a\r\nreplacement or refund for a major failure and compensation for any other\r\nreasonably foreseeable loss or damage. You are also entitled to have the goods\r\nrepaired or replaced if the goods fail to be of acceptable quality and the\r\nfailure does not amount to a&nbsp;major failure. In the case of software, the\r\nrepair of goods may not be practicable, and a replacement will be provided if\r\nthis is the case.&nbsp;For any AU Guarantees related issues, please\r\ncontact&nbsp;</span><span style='font-size:8.0pt'><a\r\nhref=\"mailto:pubhelp@microsoft.com\"><span style='font-size:10.0pt;mso-ascii-font-family:\r\nCalibri;mso-fareast-font-family:\"Times New Roman\";mso-hansi-font-family:Calibri;\r\nmso-bidi-font-family:Calibri;color:#7F7F7F;mso-themecolor:text1;mso-themetint:\r\n128'>pubhelp@microsoft.com</span></a></span><span style='font-size:10.0pt;\r\nmso-ascii-font-family:Calibri;mso-fareast-font-family:\"Times New Roman\";\r\nmso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;color:#7F7F7F;\r\nmso-themecolor:text1;mso-themetint:128'>.<o:p></o:p></span></p>\r\n\r\n<p class=MsoNormal style='text-align:justify;text-justify:inter-ideograph;\r\nline-height:normal'><a name=\"_Ref299921012\"><b style='mso-bidi-font-weight:\r\nnormal'><span style='font-size:10.0pt;mso-ascii-font-family:Calibri;mso-fareast-font-family:\r\n\"Times New Roman\";mso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;\r\ncolor:#7F7F7F;mso-themecolor:text1;mso-themetint:128'>21.</span></b></a><b\r\nstyle='mso-bidi-font-weight:normal'><span style='font-size:10.0pt;mso-ascii-font-family:\r\nCalibri;mso-fareast-font-family:\"Times New Roman\";mso-hansi-font-family:Calibri;\r\nmso-bidi-font-family:Calibri;color:#7F7F7F;mso-themecolor:text1;mso-themetint:\r\n128'>&nbsp;EXCLUSIONS AND LIMITATION OF LIABILITY.&nbsp;</span></b><span\r\nstyle='font-size:10.0pt;mso-ascii-font-family:Calibri;mso-fareast-font-family:\r\n\"Times New Roman\";mso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;\r\ncolor:#7F7F7F;mso-themecolor:text1;mso-themetint:128'>TO THE MAXIMUM EXTENT\r\nPERMITTED BY LAW, IN NO EVENT WILL MICROSOFT BE LIABLE TO YOU FOR ANY INDIRECT,\r\nINCIDENTAL, CONSEQUENTIAL, PUNITIVE, SPECIAL, OR EXEMPLARY DAMAGES ARISING OUT\r\nOF OR THAT RELATE IN ANY WAY TO THIS AGREEMENT OR ITS PERFORMANCE. THIS\r\nEXCLUSION WILL APPLY REGARDLESS OF THE LEGAL THEORY UPON WHICH ANY CLAIM FOR\r\nSUCH DAMAGES IS BASED, WHETHER MICROSOFT HAD BEEN ADVISED OF THE POSSIBILITY OF\r\nSUCH DAMAGES, WHETHER SUCH DAMAGES WERE REASONABLY FORESEEABLE, OR WHETHER\r\nAPPLICATION OF THE EXCLUSION CAUSES ANY REMEDY TO FAIL OF ITS ESSENTIAL PURPOSE.\r\nIN ADDITION, MICROSOFT WILL NOT BE LIABLE TO YOU FOR DAMAGES OR LOSSES OF ANY\r\nCLASS OR KIND IN EXCESS OF AMOUNTS REMAINING DUE AND PAYABLE TO YOU UNDER A\r\nPUBCENTER PROGRAM. HOWEVER, NONE OF THE FORGOING LIMITATIONS WILL APPLY TO\r\nMICROSOFT’S INDEMNIFICATION OBLIGATION UNDER SECTION 22 (INDEMNIFCATION).&nbsp;</span><b><span\r\nlang=EN-GB style='font-size:10.0pt;mso-ascii-font-family:Calibri;mso-fareast-font-family:\r\n\"Times New Roman\";mso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;\r\ncolor:#7F7F7F;mso-themecolor:text1;mso-themetint:128;mso-ansi-language:EN-GB'>NOTHING\r\n</span></b><b style='mso-bidi-font-weight:normal'><span lang=EN-GB\r\nstyle='font-size:10.0pt;mso-ascii-font-family:Calibri;mso-fareast-font-family:\r\n\"Times New Roman\";mso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;\r\ncolor:#7F7F7F;mso-themecolor:text1;mso-themetint:128;mso-ansi-language:EN-GB'>IN<span\r\nstyle='mso-bidi-font-weight:bold'> THIS</span> SECTION 21 WILL AFFECT THE\r\nSTATUTORY RIGHTS OF ANY CONSUMER TO EXCLUDE OR RESTRICT LIABILITY FOR DEATH OR\r\nPERSONAL INJURY ARISING FROM MICROSOFT’S NEGLIGENCE, FRAUD, OR GROSS NEGLIGENCE\r\nOR WILLFUL INTENT. SOME OR ALL OF THESE LIMITATIONS OR EXCLUSIONS MAY NOT APPLY\r\nTO YOU IF&nbsp;YOUR&nbsp;STATE, PROVINCE, OR COUNTRY DOES NOT ALLOW THE\r\nEXCLUSION OR LIMITATION OF INCIDENTAL, CONSEQUENTIAL OR OTHER DAMAGES.</span></b><span\r\nstyle='font-size:10.0pt;mso-ascii-font-family:Calibri;mso-fareast-font-family:\r\n\"Times New Roman\";mso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;\r\ncolor:#7F7F7F;mso-themecolor:text1;mso-themetint:128'><o:p></o:p></span></p>\r\n\r\n<p class=MsoNormal style='margin-top:0in;margin-right:0in;margin-bottom:0in;\r\nmargin-left:.4in;text-align:justify;text-justify:inter-ideograph;text-indent:\r\n-.4in;line-height:normal'><b><span style='font-size:10.0pt;mso-ascii-font-family:\r\nCalibri;mso-fareast-font-family:\"Times New Roman\";mso-hansi-font-family:Calibri;\r\nmso-bidi-font-family:Calibri;color:#7F7F7F;mso-themecolor:text1;mso-themetint:\r\n128'>22.&nbsp;INDEMNIFICATION.</span></b><span style='font-size:10.0pt;\r\nmso-ascii-font-family:Calibri;mso-fareast-font-family:\"Times New Roman\";\r\nmso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;color:#7F7F7F;\r\nmso-themecolor:text1;mso-themetint:128'><o:p></o:p></span></p>\r\n\r\n<p class=MsoNormal style='margin-bottom:0in;text-align:justify;text-justify:\r\ninter-ideograph;line-height:normal'><b><span style='font-size:10.0pt;\r\nmso-ascii-font-family:Calibri;mso-fareast-font-family:\"Times New Roman\";\r\nmso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;color:#7F7F7F;\r\nmso-themecolor:text1;mso-themetint:128'>a</span></b><span style='font-size:\r\n10.0pt;mso-ascii-font-family:Calibri;mso-fareast-font-family:\"Times New Roman\";\r\nmso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;color:#7F7F7F;\r\nmso-themecolor:text1;mso-themetint:128'>)&nbsp;<b>By You.&nbsp;</b>You will\r\ndefend, indemnify and hold Microsoft and Microsoft’s affiliates, agents and\r\nemployees, harmless from all losses, damages, liability and expenses (including\r\nreasonable attorneys' fees) from any third-party claims, proceedings or suits\r\nresulting from or related to (<span class=SpellE>i</span>) any improper use by\r\nYou or Your Agents of the pubCenter Programs, (ii) any access or use by third\r\nparties of the pubCenter Programs through Your Account or with Your\r\nCredentials; (iii) any improper use of any tags, IDs, code, or the Microsoft\r\nAds SDK related to the pubCenter Programs that are provided to You, (iv) Your\r\nbreach of the Policies, Your warranties or any other term or provision of this\r\nAgreement; (v) Your Properties and (vi) Your collection, use and disclosure of\r\nuser related data.<o:p></o:p></span></p>\r\n\r\n<p class=MsoNormal style='margin-bottom:0in;text-align:justify;text-justify:\r\ninter-ideograph;line-height:normal'><b style='mso-bidi-font-weight:normal'><span\r\nstyle='font-size:10.0pt;mso-ascii-font-family:Calibri;mso-fareast-font-family:\r\n\"Times New Roman\";mso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;\r\ncolor:#7F7F7F;mso-themecolor:text1;mso-themetint:128'>b</span></b><span\r\nstyle='font-size:10.0pt;mso-ascii-font-family:Calibri;mso-fareast-font-family:\r\n\"Times New Roman\";mso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;\r\ncolor:#7F7F7F;mso-themecolor:text1;mso-themetint:128'>)&nbsp;<b\r\nstyle='mso-bidi-font-weight:normal'>By Microsoft.&nbsp;</b>Microsoft will\r\ndefend, <span class=GramE>indemnify</span> and hold You harmless from and\r\nagainst any and all losses, damages, liability and expenses from any\r\nthird-party claims, proceedings, or suits that arise out of a claim that the\r\npubCenter Programs or pubCenter Site, when accessed or used in accordance with\r\nthis Agreement and all applicable Microsoft policies and technical\r\nrequirements, infringes the intellectual property rights of any third party.<o:p></o:p></span></p>\r\n\r\n<p class=MsoNormal style='text-align:justify;text-justify:inter-ideograph;\r\nline-height:normal'><b style='mso-bidi-font-weight:normal'><span\r\nstyle='font-size:10.0pt;mso-ascii-font-family:Calibri;mso-fareast-font-family:\r\n\"Times New Roman\";mso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;\r\ncolor:#7F7F7F;mso-themecolor:text1;mso-themetint:128'>c</span></b><span\r\nstyle='font-size:10.0pt;mso-ascii-font-family:Calibri;mso-fareast-font-family:\r\n\"Times New Roman\";mso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;\r\ncolor:#7F7F7F;mso-themecolor:text1;mso-themetint:128'>)&nbsp;<b\r\nstyle='mso-bidi-font-weight:normal'>Requirements&nbsp;For&nbsp;Indemnification.&nbsp;</b>In\r\nconnection with any claims subject to the indemnification obligations above,\r\nthe party receiving indemnification (“<b style='mso-bidi-font-weight:normal'>Indemnified\r\nParty</b>”) will (<span class=SpellE>i</span>) give the other party (“<b\r\nstyle='mso-bidi-font-weight:normal'>Indemnifying Party</b>”) prompt written\r\nnotice of the claim, (ii) cooperate with the Indemnifying Party (at the\r\nIndemnifying Party's expense) in connection with the defense and settlement of\r\nthe claim, and (iii) permit the Indemnifying Party (through mutually agreed\r\ncounsel) to answer and defend the claim. The Indemnifying Party will not settle\r\nthe claim against the Indemnified Party without the Indemnified Party's prior\r\nwritten consent.<span style='mso-spacerun:yes'>  </span></span><span\r\nstyle='font-size:10.0pt;mso-ascii-font-family:Calibri;mso-hansi-font-family:\r\nCalibri;mso-bidi-font-family:Calibri;color:#7F7F7F;mso-themecolor:text1;\r\nmso-themetint:128'>The Indemnifying Party will not be responsible for any\r\nsettlement made by the Indemnified Party without the Indemnifying Party’s\r\nconsent.</span><span style='font-size:10.0pt;mso-ascii-font-family:Calibri;\r\nmso-fareast-font-family:\"Times New Roman\";mso-hansi-font-family:Calibri;\r\nmso-bidi-font-family:Calibri;color:#7F7F7F;mso-themecolor:text1;mso-themetint:\r\n128'> The Indemnified Party (at its cost) may participate in the defense and\r\nsettlement of the claim with counsel of its own choosing.&nbsp;<a\r\nname=\"_Ref298984492\"><o:p></o:p></a></span></p>\r\n\r\n<p class=MsoCommentText><span style='mso-bookmark:_Ref298984492'><b><span\r\nstyle='mso-ascii-font-family:Calibri;mso-fareast-font-family:\"Times New Roman\";\r\nmso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;color:#7F7F7F;\r\nmso-themecolor:text1;mso-themetint:128'>23.</span></b></span><b><span\r\nstyle='mso-ascii-font-family:Calibri;mso-fareast-font-family:\"Times New Roman\";\r\nmso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;color:#7F7F7F;\r\nmso-themecolor:text1;mso-themetint:128'>&nbsp;TERM AND TERMINATION.&nbsp;</span></b><span\r\nstyle='mso-ascii-font-family:Calibri;mso-fareast-font-family:\"Times New Roman\";\r\nmso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;color:#7F7F7F;\r\nmso-themecolor:text1;mso-themetint:128'>The term of this Agreement will become\r\neffective upon&nbsp;Your&nbsp;access of either the pubCenter Site or a\r\npubCenter Program and continue until terminated by either You or Microsoft as\r\nprovided by this Section 23.<b>&nbsp;</b>You may cancel Your Accounts and\r\nterminate this Agreement at any time by providing written notice to Microsoft.\r\nMicrosoft will have the right to terminate or suspend, entirely or in part,\r\nYour use of the pubCenter Site and pubCenter Programs at any time upon notice\r\nwith respect to either all or some of Your Properties without cause or\r\nexplanation. In addition, if Microsoft reasonably believes that You have\r\nbreached this Agreement or that any of Your Properties are in violation of any\r\napplicable laws, regulations or Microsoft policies (whether internal or\r\nexternal), then Microsoft will have the right to immediately terminate or\r\nsuspend, entirely or in part, Your use of the pubCenter Site and pubCenter\r\nPrograms with respect to either all or some of Your Properties. Except for\r\npayments due and payable to&nbsp;You&nbsp;under a pubCenter Program, Microsoft\r\nwill have no liability to You for any termination or suspension under this\r\nSection 23.<o:p></o:p></span></p>\r\n\r\n<p class=MsoNormal style='text-align:justify;text-justify:inter-ideograph;\r\nline-height:normal'><b style='mso-bidi-font-weight:normal'><span\r\nstyle='font-size:10.0pt;mso-ascii-font-family:Calibri;mso-fareast-font-family:\r\n\"Times New Roman\";mso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;\r\ncolor:#7F7F7F;mso-themecolor:text1;mso-themetint:128'>24.&nbsp;CONTACTS AND\r\nNOTICE.&nbsp;</span></b><span style='font-size:10.0pt;mso-ascii-font-family:\r\nCalibri;mso-fareast-font-family:\"Times New Roman\";mso-hansi-font-family:Calibri;\r\nmso-bidi-font-family:Calibri;color:#7F7F7F;mso-themecolor:text1;mso-themetint:\r\n128'>You must identify an individual to serve as the primary contact under this\r\nAgreement. This primary contact will be the default administrator for this\r\nAgreement and will receive all notices unless&nbsp;You&nbsp;change the primary\r\ncontact by updating Your Account information through the pubCenter Site.\r\nMicrosoft may provide notice to&nbsp;You&nbsp;via email or through the\r\npubCenter Site. All notices that&nbsp;You&nbsp;provide to Microsoft under this\r\nAgreement must be sent to&nbsp;</span><span style='font-size:8.0pt'><a\r\nhref=\"mailto:pubhelp@microsoft.com\"><span style='font-size:10.0pt;mso-ascii-font-family:\r\nCalibri;mso-fareast-font-family:\"Times New Roman\";mso-hansi-font-family:Calibri;\r\nmso-bidi-font-family:Calibri;color:#7F7F7F;mso-themecolor:text1;mso-themetint:\r\n128'>pubhelp@microsoft.com</span></a></span><span style='font-size:10.0pt;\r\nmso-ascii-font-family:Calibri;mso-fareast-font-family:\"Times New Roman\";\r\nmso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;color:#7F7F7F;\r\nmso-themecolor:text1;mso-themetint:128'>. Microsoft may\r\ndisclose&nbsp;Your&nbsp;or Your designated agent’s business contact information\r\nas necessary for Microsoft to administer this Agreement through its affiliates\r\nand other third parties that help Microsoft administer this Agreement.<a\r\nname=\"_Ref270379359\"></a><a name=\"_Ref270379320\"></a><o:p></o:p></span></p>\r\n\r\n<p class=MsoNormal style='text-align:justify;text-justify:inter-ideograph;\r\nline-height:normal'><b style='mso-bidi-font-weight:normal'><span\r\nstyle='font-size:10.0pt;mso-ascii-font-family:Calibri;mso-fareast-font-family:\r\n\"Times New Roman\";mso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;\r\ncolor:#7F7F7F;mso-themecolor:text1;mso-themetint:128'>25.&nbsp;ASSIGNMENT AND\r\nSUBLICENSE.</span></b><span style='font-size:10.0pt;mso-ascii-font-family:Calibri;\r\nmso-fareast-font-family:\"Times New Roman\";mso-hansi-font-family:Calibri;\r\nmso-bidi-font-family:Calibri;color:#7F7F7F;mso-themecolor:text1;mso-themetint:\r\n128'>&nbsp;Microsoft may assign this Agreement to a Microsoft affiliate at any\r\ntime. You may not assign this Agreement or any rights or obligations hereunder\r\nwithout the prior written consent of Microsoft. Microsoft may also delegate its\r\nrights under this Agreement to third parties to assist Microsoft in performing\r\nits obligations under this Agreement, <span class=GramE>provided that</span>\r\nMicrosoft will be responsible for the performance of those third parties\r\nsubject to the terms of this Agreement.<o:p></o:p></span></p>\r\n\r\n<p class=MsoNormal style='text-align:justify;text-justify:inter-ideograph;\r\nline-height:normal'><b style='mso-bidi-font-weight:normal'><span\r\nstyle='font-size:10.0pt;mso-ascii-font-family:Calibri;mso-fareast-font-family:\r\n\"Times New Roman\";mso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;\r\ncolor:#7F7F7F;mso-themecolor:text1;mso-themetint:128'>26.&nbsp;VENUE, CHOICE OF\r\nLAW.&nbsp;</span></b><span style='font-size:10.0pt;mso-ascii-font-family:Calibri;\r\nmso-fareast-font-family:\"Times New Roman\";mso-hansi-font-family:Calibri;\r\nmso-bidi-font-family:Calibri;color:#7F7F7F;mso-themecolor:text1;mso-themetint:\r\n128'>If you live in (or, if a business, your principal place of business is in)\r\nthe United States, the laws of the state where you live (or, if a business,\r\nwhere your principal place of business is located) govern all claims,\r\nregardless of conflict of laws principles, except that the Federal Arbitration\r\nAct governs all provisions relating to arbitration. If your principal place of\r\nbusiness is in any other country,&nbsp;Nevada, USA law governs, regardless of\r\nconflict of laws principles. You and Microsoft irrevocably consent to the exclusive\r\njurisdiction and venue of the state or federal courts in King County,\r\nWashington, USA for all disputes arising out of or relating to this Agreement\r\nor a pubCenter Program that are heard in court (not arbitration and not small\r\nclaims court).<o:p></o:p></span></p>\r\n\r\n<p class=MsoNormal style='text-align:justify;text-justify:inter-ideograph;\r\nline-height:normal'><b><span style='font-size:10.0pt;mso-ascii-font-family:\r\nCalibri;mso-fareast-font-family:\"Times New Roman\";mso-hansi-font-family:Calibri;\r\nmso-bidi-font-family:Calibri;color:#7F7F7F;mso-themecolor:text1;mso-themetint:\r\n128'>27.&nbsp;SURVIVAL; NON-EXCLUSIVITY.&nbsp;</span></b><span\r\nstyle='font-size:10.0pt;mso-ascii-font-family:Calibri;mso-fareast-font-family:\r\n\"Times New Roman\";mso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;\r\ncolor:#7F7F7F;mso-themecolor:text1;mso-themetint:128'>Sections of this\r\nAgreement that, by their terms, require performance after the termination or\r\nexpiration of this Agreement will survive. This Agreement is nonexclusive, and\r\nnothing in this Agreement may be construed as restricting Microsoft from\r\noffering the pubCenter Programs or any other Microsoft product or service to\r\nany third party.<o:p></o:p></span></p>\r\n\r\n<p class=MsoNormal style='text-align:justify;text-justify:inter-ideograph;\r\nline-height:normal'><b><span style='font-size:10.0pt;mso-ascii-font-family:\r\nCalibri;mso-fareast-font-family:\"Times New Roman\";mso-hansi-font-family:Calibri;\r\nmso-bidi-font-family:Calibri;color:#7F7F7F;mso-themecolor:text1;mso-themetint:\r\n128'>28.</span></b><span style='font-size:10.0pt;mso-ascii-font-family:Calibri;\r\nmso-fareast-font-family:\"Times New Roman\";mso-hansi-font-family:Calibri;\r\nmso-bidi-font-family:Calibri;color:#7F7F7F;mso-themecolor:text1;mso-themetint:\r\n128'>&nbsp;<b>UPDATES.&nbsp;</b>Microsoft may update this Agreement at any time\r\nin its sole discretion by providing&nbsp;You&nbsp;with notice of the update (“<b>Update\r\nNotice</b>”). Following Microsoft’s provision to&nbsp;You&nbsp;of an Update\r\nNotice, by continuing to access and use either the pubCenter Site or a\r\npubCenter Program You agree to be bound by the updated version of this\r\nAgreement referenced in the Update Notice. If&nbsp;You&nbsp;do not agree with\r\nan update, do not continue to <span class=GramE>access</span> and use the\r\npubCenter Site and pubCenter Programs and immediately notify Microsoft that You\r\nare terminating this Agreement. Your continued access or use of either the\r\npubCenter Site or a pubCenter Program binds&nbsp;You&nbsp;to any updates to\r\nthis Agreement specified in an Update Notice.<o:p></o:p></span></p>\r\n\r\n<p class=MsoNormal style='text-align:justify;text-justify:inter-ideograph;\r\nline-height:normal'><b><span style='font-size:10.0pt;mso-ascii-font-family:\r\nCalibri;mso-fareast-font-family:\"Times New Roman\";mso-hansi-font-family:Calibri;\r\nmso-bidi-font-family:Calibri;color:#7F7F7F;mso-themecolor:text1;mso-themetint:\r\n128'>29.</span></b><span style='font-size:10.0pt;mso-ascii-font-family:Calibri;\r\nmso-fareast-font-family:\"Times New Roman\";mso-hansi-font-family:Calibri;\r\nmso-bidi-font-family:Calibri;color:#7F7F7F;mso-themecolor:text1;mso-themetint:\r\n128'>&nbsp;<b>LANGUAGE.&nbsp;</b></span><span lang=EN-CA style='font-size:10.0pt;\r\nmso-ascii-font-family:Calibri;mso-fareast-font-family:\"Times New Roman\";\r\nmso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;color:#7F7F7F;\r\nmso-themecolor:text1;mso-themetint:128;mso-ansi-language:EN-CA'>It is the\r\nexpress wish of the parties that this Agreement and all related documents be in\r\nEnglish.&nbsp;</span><span lang=FR-CH style='font-size:10.0pt;mso-ascii-font-family:\r\nCalibri;mso-fareast-font-family:\"Times New Roman\";mso-hansi-font-family:Calibri;\r\nmso-bidi-font-family:Calibri;color:#7F7F7F;mso-themecolor:text1;mso-themetint:\r\n128;mso-ansi-language:FR-CH'>C’est la volonté expresse des parties que la\r\nprésente convention ainsi que les documents qui s’y rattachent soient rédigés\r\nen anglais.<o:p></o:p></span></p>\r\n\r\n<p class=MsoNormal style='text-align:justify;text-justify:inter-ideograph;\r\nline-height:normal;mso-pagination:none'><b><span lang=FR-CH style='font-size:\r\n10.0pt;mso-ascii-font-family:Calibri;mso-fareast-font-family:\"Times New Roman\";\r\nmso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;color:#7F7F7F;\r\nmso-themecolor:text1;mso-themetint:128;mso-ansi-language:FR-CH'>30.</span></b><span\r\nlang=FR-CH style='font-size:8.0pt;mso-ascii-font-family:Calibri;mso-hansi-font-family:\r\nCalibri;mso-bidi-font-family:Calibri;color:#7F7F7F;mso-themecolor:text1;\r\nmso-themetint:128'> </span><b><span style='font-size:4.0pt;mso-ascii-font-family:\r\nCalibri;mso-fareast-font-family:\"Times New Roman\";mso-hansi-font-family:Calibri;\r\nmso-bidi-font-family:Calibri;color:#7F7F7F;mso-themecolor:text1;mso-themetint:\r\n128;text-transform:uppercase'>&nbsp;</span></b><b style='mso-bidi-font-weight:\r\nnormal'><span style='font-size:10.0pt;mso-ascii-font-family:Calibri;mso-fareast-font-family:\r\n\"Times New Roman\";mso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;\r\ncolor:#7F7F7F;mso-themecolor:text1;mso-themetint:128;text-transform:uppercase'>Confidentiality</span></b><span\r\nstyle='font-size:10.0pt;mso-ascii-font-family:Calibri;mso-fareast-font-family:\r\n\"Times New Roman\";mso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;\r\ncolor:#7F7F7F;mso-themecolor:text1;mso-themetint:128'>.<span\r\nstyle='mso-spacerun:yes'>  </span>Neither party will disclose the other’s\r\nConfidential Information to third parties.&nbsp;&nbsp;Each party will use the\r\nother’s Confidential Information only for purposes of the business\r\nrelationship. Each party agrees to take reasonable steps to protect the other’s\r\nConfidential Information.&nbsp;&nbsp;A party may disclose the other’s\r\nConfidential Information to its affiliates, <span class=GramE>employees</span>\r\nand contractors only, so long as the disclosing party remains responsible for\r\nany unauthorized use or disclosure. These disclosures may be made only on a\r\nneed-to-know basis, subject to the obligations of this Section. “<b>Confidential\r\nInformation</b>” means non-public information, know-how and trade secrets in\r\nany form, which is designated as confidential, or a reasonable person\r\nreasonably should understand to be confidential. The following types of\r\ninformation, however marked, are not confidential information: information that\r\n(<span class=SpellE>i</span>) is, or becomes, publicly available without a\r\nbreach of this Agreement; (ii) is lawfully known to the receiver of the information\r\nwithout an obligation to keep it confidential; (iii) is received from another\r\nsource who can disclose it lawfully and without an obligation to keep it\r\nconfidential; (iv) is independently developed without reference to the other\r\nparty’s Confidential Information; or (v) is a comment or suggestion one party\r\nvolunteers about the other’s business, products or services.&nbsp;&nbsp;Each\r\nparty may disclose the other’s Confidential Information if required to comply\r\nwith a court order or other government demand that has the force of law. Before\r\ndoing so, the receiving party must seek the highest level of protection\r\navailable and, when possible, give the disclosing party enough prior notice to\r\nprovide a reasonable chance to seek a protective order for its Confidential Information.</span><span\r\nstyle='font-size:8.0pt;mso-ascii-font-family:Calibri;mso-fareast-font-family:\r\nCalibri;mso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;color:#7F7F7F;\r\nmso-themecolor:text1;mso-themetint:128'><o:p></o:p></span></p>\r\n\r\n<p class=MsoNormal style='text-align:justify;text-justify:inter-ideograph;\r\nline-height:normal;mso-pagination:none'><span style='font-size:10.0pt;\r\nmso-ascii-font-family:Calibri;mso-fareast-font-family:\"Times New Roman\";\r\nmso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;color:#7F7F7F;\r\nmso-themecolor:text1;mso-themetint:128'>If You and Microsoft Corporation have\r\nentered into a standard Microsoft Corporation Non-Disclosure Agreement (“<b>NDA</b>”),\r\nthen the terms most favorable to Microsoft between this Agreement and the NDA\r\nwill prevail. <o:p></o:p></span></p>\r\n\r\n<p class=MsoNormal style='text-align:justify;text-justify:inter-ideograph;\r\nline-height:normal;mso-pagination:none'><b><span style='font-size:10.0pt;\r\nmso-ascii-font-family:Calibri;mso-fareast-font-family:\"Times New Roman\";\r\nmso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;color:#7F7F7F;\r\nmso-themecolor:text1;mso-themetint:128'>31</span></b><span style='font-size:\r\n10.0pt;mso-ascii-font-family:Calibri;mso-fareast-font-family:\"Times New Roman\";\r\nmso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;color:#7F7F7F;\r\nmso-themecolor:text1;mso-themetint:128'>.<b style='mso-bidi-font-weight:normal'>Export\r\n<span style='mso-bidi-font-weight:bold'>Controls</span></b>. The Parties acknowledge\r\nthat the devices, services, software, and related technology (“Items”) may be\r\nsubject to U.S. and other countries’ export jurisdictions. Each Party will\r\ncomply with all laws and regulations applicable to the import or export of the\r\nItems, including but not limited to trade laws such as the U.S. Export\r\nAdministration Regulations and International Traffic in Arms Regulations, and\r\nsanctions regulations administered by the U.S. Office of Foreign Assets Control\r\n(“OFAC”) (“trade laws”). You will not take any action that causes us to violate\r\nU.S. or other applicable trade laws. <span class=GramE>In the event that</span>\r\nyou learn of a potential violation of trade laws relating to the performance of\r\nthis Agreement, or a potential violation of the terms in this subsection, it\r\nwill alert us as soon as possible, but in no event more than 14 days after\r\nacquiring this knowledge. We may suspend or terminate this Agreement to the\r\nextent that we reasonably conclude that performance would cause us to violate\r\nU.S. or other applicable trade laws, including those described above, or put it\r\nat risk of becoming the subject of economic sanctions under such laws.<span\r\nclass=normaltextrun><b style='mso-bidi-font-weight:normal'>&nbsp;</b> For\r\nadditional information related to exporting, see </span></span><span\r\nstyle='font-size:8.0pt'><a href=\"http://www.microsoft.com/exporting\"><span\r\nstyle='font-size:10.0pt;mso-fareast-font-family:Calibri;mso-bidi-font-family:\r\nCalibri;color:#7F7F7F;mso-themecolor:text1;mso-themetint:128'>http://www.microsoft.com/exporting</span></a></span><span\r\nclass=normaltextrun><span style='font-size:10.0pt;mso-ascii-font-family:Calibri;\r\nmso-fareast-font-family:\"Times New Roman\";mso-hansi-font-family:Calibri;\r\nmso-bidi-font-family:Calibri;color:#7F7F7F;mso-themecolor:text1;mso-themetint:\r\n128'>.</span></span><span class=eop><b style='mso-bidi-font-weight:normal'><span\r\nstyle='font-size:10.0pt;mso-ascii-font-family:Calibri;mso-fareast-font-family:\r\n\"Times New Roman\";mso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;\r\ncolor:#7F7F7F;mso-themecolor:text1;mso-themetint:128'>&nbsp;</span></b></span><span\r\nstyle='font-size:10.0pt;mso-ascii-font-family:Calibri;mso-fareast-font-family:\r\n\"Times New Roman\";mso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;\r\ncolor:#7F7F7F;mso-themecolor:text1;mso-themetint:128'><o:p></o:p></span></p>\r\n\r\n<p class=MsoNormal style='line-height:normal;mso-pagination:none;page-break-after:\r\navoid'><b style='mso-bidi-font-weight:normal'><span style='font-size:10.0pt;\r\nmso-ascii-font-family:Calibri;mso-fareast-font-family:\"Times New Roman\";\r\nmso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;color:#7F7F7F;\r\nmso-themecolor:text1;mso-themetint:128'>32. Anti-Bribery/Anti-Corruption. </span></b><span\r\nstyle='font-size:10.0pt;mso-ascii-font-family:Calibri;mso-fareast-font-family:\r\n\"Times New Roman\";mso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;\r\ncolor:#7F7F7F;mso-themecolor:text1;mso-themetint:128'>You represent and warrant\r\nthat you have reviewed and will comply with the Anti-Corruption Policy for Microsoft\r\nRepresentatives available at </span><span style='font-size:8.0pt'><a\r\nhref=\"http://www.microsoft.com/en-us/Legal/Compliance/anticorruption\"><span\r\nstyle='mso-fareast-font-family:Calibri;mso-bidi-font-family:Calibri;color:#7F7F7F;\r\nmso-themecolor:text1;mso-themetint:128'>http://www.microsoft.com/en-us/Legal/Compliance/anticorruption</span></a></span><span\r\nstyle='font-size:10.0pt;mso-ascii-font-family:Calibri;mso-fareast-font-family:\r\n\"Times New Roman\";mso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;\r\ncolor:#7F7F7F;mso-themecolor:text1;mso-themetint:128'>. You will provide annual\r\ntraining to your employees who resell, distribute, or market Microsoft products\r\nor services on compliance with Anti-Corruption Laws.&nbsp;&nbsp; You <span\r\nclass=GramE>represents</span> and warrants that this Anti-Corruption training\r\nhas been provided to its employees and, if not, you agree to participate annually\r\nin online Anti-Corruption training&nbsp;made available free of charge by us and\r\ncertify its completion, understanding, and compliance with the Anti-Corruption\r\nPolicy for Microsoft Representatives. <o:p></o:p></span></p>\r\n\r\n<p class=MsoNormal style='text-align:justify;text-justify:inter-ideograph;\r\nline-height:normal'><span style='font-size:10.0pt;mso-ascii-font-family:Calibri;\r\nmso-fareast-font-family:\"Times New Roman\";mso-hansi-font-family:Calibri;\r\nmso-bidi-font-family:Calibri;color:#7F7F7F;mso-themecolor:text1;mso-themetint:\r\n128'><o:p>&nbsp;</o:p></span></p>\r\n\r\n<p class=MsoNormal><span style='font-size:8.0pt;line-height:107%'><o:p>&nbsp;</o:p></span></p>\r\n\r\n<p class=MsoNormal><span style='font-size:8.0pt;line-height:107%'><o:p>&nbsp;</o:p></span></p>\r\n\r\n<p class=MsoNormal><span style='font-size:8.0pt;line-height:107%'><o:p>&nbsp;</o:p></span></p>\r\n\r\n</div>\r\n\r\n</body>\r\n\r\n</html>\r\n`;\r\n\r\n// TODO - replace with actual TnC for tython experience once they are ready from business side\r\nexport const DEFAULT_TNC = `\r\n  default TnC for Tython Experience\r\n`;\r\n","import { action } from 'mobx';\r\nimport { orchestrator } from 'satcheljs';\r\nimport { Log } from '../../../../../logging/src/Log';\r\nimport { isNotAuthorizedUser, upperCaseCountryCode } from '../../../../@data';\r\nimport { uiConfig } from '../../../../config/ui.config';\r\nimport { EN_LOCALE_KEY, UNAUTHORIZED_LOCAL_STORAGE_LOCALE } from '../../../../constants';\r\nimport { onFetchTnC } from '../actions';\r\nimport { getStore } from '../store/store';\r\n\r\norchestrator(onFetchTnC, async (msg) => {\r\n  const tncStore = getStore();\r\n  const authorizedUserLocale = upperCaseCountryCode(msg.locale ?? EN_LOCALE_KEY);\r\n  const unauthorizedUserLocale = upperCaseCountryCode(localStorage.getItem(UNAUTHORIZED_LOCAL_STORAGE_LOCALE) ?? EN_LOCALE_KEY);\r\n  const TnCLocale = isNotAuthorizedUser() ? unauthorizedUserLocale : authorizedUserLocale;\r\n\r\n  const url = uiConfig.getApiBaseAddress() + `/terms/getLatestByLocales?locales=${TnCLocale}`; // getLatest\r\n\r\n  let response: Response;\r\n  try {\r\n    response = await fetch(url, {\r\n      method: 'GET',\r\n    });\r\n\r\n    const responseJson = await response.json();\r\n\r\n    if (response.ok) {\r\n      const { releaseDate, version, localContent } = responseJson.data;\r\n      action(() => {\r\n        tncStore.content = localContent[TnCLocale];\r\n        tncStore.latestTnCReleaseDate = releaseDate;\r\n        tncStore.latestTnCVersion = version;\r\n      })();\r\n    } else {\r\n      return Log.error(`Fetch latest Terms and Conditions failed. Error: ${JSON.stringify(responseJson.errors)}`);\r\n    }\r\n  } catch (e) {\r\n    Log.error(e);\r\n  } finally {\r\n    action(() => {\r\n      tncStore.isDataLoaded = true;\r\n    })();\r\n  }\r\n});\r\n","import { FeedbackType } from '../../../../layout/PageLayout/header-panels/FeedbackPanel/@data/store/schema/enums/FeedbackType';\r\nimport { Model } from './Model';\r\n\r\nexport class Feedback extends Model {\r\n  public apiPath = undefined;\r\n  public className = 'feedback';\r\n  public type?: FeedbackType;\r\n  public title?: string;\r\n  public description?: string;\r\n  public email?: string;\r\n}\r\n","import { Model } from '.';\r\nimport { User } from './User';\r\n\r\nexport class UserCreateFromInvitation extends Model {\r\n  public apiPath = 'livelogin/userCreateFromInvitation';\r\n  public className = 'userCreateFromInvitation';\r\n\r\n  public user?: User;\r\n  public invitationCode?: string;\r\n  public termsAndConditionsAccepted?: boolean;\r\n}\r\n","import { getReportPageStore } from './store';\r\n\r\nexport function getColumnMembers() {\r\n  return getReportPageStore().columnMembers;\r\n}\r\n\r\nexport function getReportType() {\r\n  return getReportPageStore().reportType;\r\n}\r\n","module.exports = __webpack_public_path__ + \"static/media/connectApp.89604c58.svg\";","module.exports = __webpack_public_path__ + \"static/media/connectSite.2b017668.svg\";","import { action, mutatorAction } from 'satcheljs';\r\nimport { ISubGeography } from '../..';\r\nimport { getMetaDataStore } from '../store/store';\r\n\r\nexport const fetchStatesOfCountry = action('fetchStatesOfCountry', (country: string) => ({ country }));\r\n\r\nexport const setStatesOfCountry = mutatorAction('setStatesOfCountry', (country: string, states: ISubGeography[]) => {\r\n  const metadataStore = getMetaDataStore();\r\n  if (!metadataStore.raw?.states) {\r\n    metadataStore.raw.states = {};\r\n  }\r\n\r\n  metadataStore.raw.states[country] = states;\r\n});\r\n","import { DefaultButton, IButtonProps, PrimaryButton } from '@fluentui/react/lib/Button';\r\nimport { Dialog, DialogFooter, DialogType } from '@fluentui/react/lib/Dialog';\r\nimport React from 'react';\r\n\r\nexport interface IPopupProps {\r\n  popUpTitle?: string;\r\n  popUpDescription?: string;\r\n  children?: JSX.Element;\r\n  customButton?: JSX.Element;\r\n  primaryButtonAriaLabel?: string;\r\n  secondaryButtonAriaLabel?: string;\r\n  isShown: boolean;\r\n  isCloseButtonHidden?: boolean;\r\n  onPopupDismiss: () => void;\r\n  onPrimaryButtonClick?: IButtonProps['onClick'];\r\n  onSecondaryButtonClick?: IButtonProps['onClick'];\r\n  isPrimaryButtonDisabled?: boolean;\r\n}\r\n\r\nexport const PopupCard = ({\r\n  popUpTitle,\r\n  popUpDescription,\r\n  children,\r\n  customButton,\r\n  primaryButtonAriaLabel,\r\n  secondaryButtonAriaLabel,\r\n  isShown,\r\n  isCloseButtonHidden = false,\r\n  isPrimaryButtonDisabled,\r\n  onPrimaryButtonClick,\r\n  onSecondaryButtonClick,\r\n  onPopupDismiss,\r\n}: IPopupProps) => {\r\n  return (\r\n    <Dialog\r\n      hidden={isShown === false}\r\n      onDismiss={onPopupDismiss}\r\n      dialogContentProps={{\r\n        type: isCloseButtonHidden === true ? DialogType.normal : DialogType.close,\r\n        title: popUpTitle,\r\n        subText: popUpDescription,\r\n      }}\r\n      modalProps={{\r\n        isBlocking: false,\r\n      }}\r\n      minWidth={500}\r\n    >\r\n      {children}\r\n\r\n      <DialogFooter>\r\n        {customButton}\r\n        {primaryButtonAriaLabel && onPrimaryButtonClick && (\r\n          <PrimaryButton\r\n            onClick={onPrimaryButtonClick}\r\n            disabled={isPrimaryButtonDisabled}\r\n            data-test-id={`confirm-popup-${primaryButtonAriaLabel}`}\r\n          >\r\n            {primaryButtonAriaLabel}\r\n          </PrimaryButton>\r\n        )}\r\n        {secondaryButtonAriaLabel && onSecondaryButtonClick && (\r\n          <DefaultButton onClick={onSecondaryButtonClick} data-test-id={`confirm-popup-${secondaryButtonAriaLabel}`}>\r\n            {secondaryButtonAriaLabel}\r\n          </DefaultButton>\r\n        )}\r\n      </DialogFooter>\r\n    </Dialog>\r\n  );\r\n};\r\n","import { Environment } from \"./Environment\";\r\nimport { ILogManager } from \"./ILogManager\";\r\nimport { LoggingUtils } from \"./LoggingUtils\";\r\nimport { LogType } from \"./LogType\";\r\n\r\n\r\nexport class ConsoleLoggerManager implements ILogManager {\r\n  public log(logType: LogType, logMessage: string | number | object): void {\r\n    this._consoleLog(logType, logMessage);\r\n  }\r\n\r\n  private _getContextMessage(logType: LogType, logMessage: string | number | object): String {\r\n    const contextMsg = logType + ': ' + JSON.stringify(logMessage);\r\n    return contextMsg;\r\n  }\r\n\r\n  private _consoleLog(logType: LogType, logMessage: string | number | object) {\r\n    const contextMsg = this._getContextMessage(logType, logMessage);\r\n    const environment = LoggingUtils.getEnvironment();\r\n\r\n    switch(logType) {\r\n      case LogType.DEBUG: {\r\n        if (environment === Environment.TEST || environment === Environment.SI) {\r\n          console.log(contextMsg);\r\n        }\r\n        break;\r\n      }\r\n\r\n      case LogType.INFO: {\r\n        if (environment === Environment.TEST || environment === Environment.SI) {\r\n          // tslint:disable-next-line: no-console\r\n          console.info(contextMsg);\r\n        }\r\n        break;\r\n      }\r\n\r\n      case LogType.WARN: {\r\n        if (environment === Environment.TEST || environment === Environment.SI) {\r\n          // tslint:disable-next-line: no-console\r\n          console.warn(contextMsg);\r\n        }\r\n        break;\r\n      }\r\n\r\n      case LogType.ERROR: {\r\n        console.error(contextMsg);\r\n        break;\r\n      }\r\n\r\n      default: {\r\n        console.log(contextMsg);\r\n        break;\r\n      }\r\n    }\r\n  }\r\n}","import { getAppStore } from '../../app/@data/store/store';\r\nimport { ILogUserContext } from './ILogUserContext';\r\n\r\nexport class DefaultLogUserContext implements ILogUserContext {\r\n  public publisherId: number;\r\n  public publisherName: string;\r\n  public userName: string;\r\n  public userId: number;\r\n  public userEmail: string;\r\n  public userContext;\r\n\r\n  // future enhancements\r\n  public trackingId: string;\r\n  public url: string;\r\n\r\n  constructor() {\r\n    const pubObj = getAppStore().publisher;\r\n    if (pubObj !== undefined) {\r\n      this.publisherName = pubObj.name ? JSON.stringify(pubObj.name) : 'undefined';\r\n      this.publisherId = pubObj.id ? pubObj.id : 0;\r\n    }\r\n\r\n    this.userContext = getAppStore().userContext;\r\n    this.userName = this.userContext?.name;\r\n    this.userId = this.userContext?.id;\r\n    this.userEmail = this.userContext?.email ?? this.userContext?.username ?? undefined;\r\n  }\r\n}\r\n","export enum LifeCycleStatus {\r\n  Active = 'Active',\r\n  Inactive = 'Inactive',\r\n  Paused = 'Paused',\r\n  Deleted = 'Deleted',\r\n}\r\n","import { EvidenceStatus } from '../enums';\r\nimport { Model } from './Model';\r\n\r\nexport class AppealHistory extends Model {\r\n  public className = 'appeals';\r\n  public apiPath = undefined;\r\n  public rootRejectionCode: string;\r\n  public latestEvidenceDocumentType: string;\r\n  public scanStatus: EvidenceStatus;\r\n  public submissionStatus: EvidenceStatus;\r\n  public reviewStatus: string;\r\n  public evidenceSubmissionHistory: EvidenceSubmissionHistory[];\r\n}\r\n\r\nexport class EvidenceSubmissionHistory {\r\n  public customerDocumentName: string;\r\n  public customerDocumentFileSizeBytes: number;\r\n  public uploadedDateTime: Date;\r\n  public submittedByUserId: string;\r\n  public submittedByUserName: string;\r\n  public evidenceDocumentType: string;\r\n}\r\n","import { Model } from './Model';\r\n\r\nexport class WelcomeToPubcenterEmail extends Model {\r\n  public apiPath = \"sendWelcomeEmail\";\r\n  public className = 'welcomeToPubcenterEmail';\r\n}","import { action } from 'satcheljs';\r\n\r\nexport const onIsAcceptInviteFlowChanged = action('onIsAcceptInviteFlowChanged', (isAcceptInviteFlow: boolean) => ({ isAcceptInviteFlow }));\r\n\r\nexport const onUserInvitationCodeChanged = action('onUserInvitationCodeChanged', (invitationCode: string) => ({ invitationCode }));\r\n","import { action } from 'satcheljs';\r\n\r\nexport const onSavingChanged = action('onSavingChanged', (saving: boolean) => ({ saving }));\r\n","export function pluralize(name: string): string {\r\n  if (name === '') {\r\n    return '';\r\n  }\r\n  return name.endsWith('y') ? `${name.slice(0, -1)}ies` : name.endsWith('s') ? `${name}es` : `${name}s`;\r\n}\r\n\r\nexport function singularize(name: string): string {\r\n  if (name === '') {\r\n    return '';\r\n  }\r\n  return name.endsWith('ies')\r\n    ? `${name.slice(0, -3)}y`\r\n    : name.endsWith('es')\r\n    ? `${name.slice(0, -2)}`\r\n    : name.endsWith('s')\r\n    ? `${name.slice(0, -1)}`\r\n    : name;\r\n}\r\n\r\nexport function isEmpty(str: string | undefined): boolean {\r\n  return typeof str === 'undefined' || !str || 0 === str.length;\r\n}\r\n\r\nexport function buildHtmlId(id: string) {\r\n  return id.replace(/[\\s.]/g, '');\r\n}\r\n\r\n/**\r\n *  Converts ',', '\\r' and '\\n' separated string to list of strings\r\n * Examples:\r\n *      \"'example.com\\nexample.org\\nexample.net\\n'\" => ['example.com', 'example.org', 'example.net']\r\n *      \"'example.com,example.org,example.net'\" => ['example.com', 'example.org', 'example.net']\r\n */\r\nexport function stringToList(str: string | undefined): string[] {\r\n  const resultList: string[] = [];\r\n  if (str !== undefined || str === '') {\r\n    str\r\n      .replace(/(\\r|\\n)/gm, ',') // replaces newline and carriage return characters with commas\r\n      .split(',') // splits string into array of strings, using comma as the delimiter\r\n      .map((s) => s.trim()) // trims whitespace from each string\r\n      .filter((u) => u.length > 0) // removes empty strings\r\n      .forEach((u) => resultList.push(u.trim())); // trims whitespace from each string\r\n  }\r\n\r\n  return resultList;\r\n}\r\n","export function hasAdQualityAccess(id?: number): boolean {\r\n  if (process.env.REACT_APP_ENV === 'production' && id === 17160724) {\r\n    return true;\r\n  } else if ((process.env.REACT_APP_ENV === 'test' || process.env.REACT_APP_ENV === 'staging') && (id === 204461 || id === 279554782)) {\r\n    return true;\r\n  }\r\n  return false;\r\n}\r\n","import { getAppStore, getEntity, Publisher } from '../../../../../@data';\r\n\r\nexport async function fetchPublisherProfileDetails(publisher: Publisher): Promise<Publisher> {\r\n  const { userContext } = getAppStore();\r\n\r\n  const publisherProfileDetails = await getEntity<Publisher>([publisher], userContext);\r\n  return publisherProfileDetails;\r\n}\r\n","import { FormattedMessage, InjectedIntl } from 'react-intl';\r\nimport { action, mutator, mutatorAction } from 'satcheljs';\r\nimport { RouteName, getAdManagementStore } from '../store/store';\r\n\r\nexport const onCurrentRouteChanged = action(\r\n  'onCurrentRouteChanged',\r\n  (currentRoute: RouteName, formatMessage: InjectedIntl['formatMessage'], intlMessageId?: FormattedMessage.MessageDescriptor) => ({\r\n    currentRoute,\r\n    formatMessage,\r\n    intlMessageId,\r\n  })\r\n);\r\n\r\nmutator(onCurrentRouteChanged, ({ currentRoute }) => {\r\n  getAdManagementStore().currentRoute = currentRoute;\r\n});\r\n\r\nexport const onPanelOpenChanged = mutatorAction('onPanelOpenChanged', (panelIsOpen: boolean) => {\r\n  getAdManagementStore().panelIsOpen = panelIsOpen;\r\n});\r\n\r\nexport const onDoNotRenderDefaultPageChanged = mutatorAction('onDoNotRenderDefaultPageChanged', (doNotRenderDefaultPage: boolean) => {\r\n  getAdManagementStore().doNotRenderDefaultPage = doNotRenderDefaultPage;\r\n});\r\n","import { useEffect, useState } from 'react';\r\nimport { AdUnit, constructUrl, getAppStore, Publisher } from '../@data';\r\n\r\nlet isAdBlockerDetectRun = false;\r\n\r\n// NOTE: Source: https://github.com/aruniverse/adblock-detect-react/blob/master/adblock-detect-react/src/hooks/useDetectAdBlock.ts\r\nexport const useDetectAdBlock = () => {\r\n  const [adBlockDetected, setAdBlockDetected] = useState(false);\r\n  const { publisher } = getAppStore();\r\n\r\n  // We use the pubcenter fetch adunits API endpoint to detect ad blockers\r\n  // If the request is blocked then we assume an ad blocker is present\r\n  useEffect(() => {\r\n    if (isAdBlockerDetectRun) {\r\n      return;\r\n    }\r\n\r\n    const url = constructUrl([new Publisher(publisher?.id)], AdUnit, new URLSearchParams([['extendedInfo', 'true']]));\r\n    fetch(url, {\r\n      method: 'HEAD',\r\n      mode: 'no-cors',\r\n      cache: 'no-store',\r\n    })\r\n      .catch(() => {\r\n        setAdBlockDetected(true);\r\n      })\r\n      .finally(() => {\r\n        isAdBlockerDetectRun = true;\r\n      });\r\n  }, [publisher]);\r\n\r\n  return adBlockDetected;\r\n};\r\n","import { RefObject, useEffect } from 'react';\r\n\r\n/**\r\n * Hook that alerts clicks outside of the passed ref\r\n */\r\nfunction useOnClickOutside<T extends HTMLElement>(ref: RefObject<T>, handler: (event: MouseEvent | TouchEvent) => void): void {\r\n  useEffect(() => {\r\n    const listener = (event: MouseEvent | TouchEvent) => {\r\n      // Do nothing if clicking ref's element or descendent elements\r\n      if (!ref.current || ref.current.contains(event.target as Node)) {\r\n        return;\r\n      }\r\n\r\n      handler(event);\r\n    };\r\n\r\n    // Bind the event listener\r\n    document.addEventListener('mousedown', listener);\r\n    document.addEventListener('touchstart', listener);\r\n\r\n    return () => {\r\n      // Unbind the event listener on clean up\r\n      document.removeEventListener('mousedown', listener);\r\n      document.removeEventListener('touchstart', listener);\r\n    };\r\n  }, [ref, handler]); // Only re-run if ref or handler changes\r\n}\r\n\r\nexport default useOnClickOutside;\r\n","import { ICustomColumn } from '../../types';\r\n\r\nexport function sortItemsBasedOnColumn<ItemType>(items: ItemType[], column?: ICustomColumn): ItemType[] {\r\n  if (!column) {\r\n    return items;\r\n  }\r\n\r\n  if (!items || !items[0]) {\r\n    return [];\r\n  }\r\n\r\n  const { sortFunction, sortableValue, isSortedDescending, fieldName } = column;\r\n\r\n  // Use the sorting function if provided\r\n  if (typeof sortFunction === 'function') {\r\n    return items.sort((a, b) => sortFunction(a, b));\r\n  }\r\n\r\n  const sortedItems = items.concat([]).sort((a: ItemType, b: ItemType) => {\r\n    const firstValue = getSortableValue(a, fieldName, sortableValue);\r\n    const secondValue = getSortableValue(b, fieldName, sortableValue);\r\n\r\n    if (firstValue === undefined && secondValue !== undefined) {\r\n      return 1;\r\n    } else if (secondValue === undefined) {\r\n      return -1;\r\n    }\r\n\r\n    if (typeof firstValue === 'string' && typeof secondValue === 'string') {\r\n      if (isSortedDescending) {\r\n        return firstValue.toLowerCase() > secondValue.toLowerCase() ? -1 : 1;\r\n      } else {\r\n        return firstValue.toLowerCase() > secondValue.toLowerCase() ? 1 : -1;\r\n      }\r\n    } else {\r\n      if (isSortedDescending) {\r\n        return firstValue > secondValue ? -1 : 1;\r\n      } else {\r\n        return firstValue > secondValue ? 1 : -1;\r\n      }\r\n    }\r\n  });\r\n  return sortedItems;\r\n}\r\n\r\nfunction getSortableValue(item, fieldName, sortableValue) {\r\n  // Use the sortableValue function if provided\r\n  return sortableValue ? sortableValue(item) : item[fieldName || ''];\r\n}\r\n","import { action } from 'satcheljs';\r\n\r\nexport const onPublisherDeleted = action('onPublisherDeleted');\r\n","import { action } from 'satcheljs';\r\n\r\nexport const onUserSelfDeleted = action('onUserSelfDeleted');\r\n","import { FontWeights, getTheme, ITheme, keyframes, mergeStyleSets } from '@fluentui/react';\r\nimport { IPubcenterTheme } from '../../../theme';\r\nimport { noPointerEvents } from '../../utils/GlobalStyleUtils';\r\n\r\nexport interface IGridWithCustomColumnStyleProps {\r\n  theme: ITheme;\r\n}\r\n\r\nexport interface IGridWithCustomColumnStyles {\r\n  detailsListStyles?: string;\r\n  detailsHeaderRootStyle?: string;\r\n  detailsRowRootStyle?: string;\r\n  headingRootStyle?: string;\r\n  disabledRowStyle?: string;\r\n}\r\n\r\nexport const getStyles = (props: IGridWithCustomColumnStyleProps): IGridWithCustomColumnStyles => {\r\n  const theme = (props.theme as unknown) as IPubcenterTheme;\r\n  const { spacing, palette, fonts } = theme;\r\n\r\n  return mergeStyleSets({\r\n    detailsListStyles: {\r\n      fontWeight: FontWeights.regular,\r\n      padding: 0,\r\n      marginRight: '-1px',\r\n    },\r\n    detailsHeaderRootStyle: {\r\n      fontWeight: FontWeights.regular,\r\n      padding: 0,\r\n      borderTop: `1px solid ${palette.neutralPrimary}`,\r\n      borderBottom: `1px solid ${palette.neutralPrimary}`,\r\n      '.ms-DetailsHeader-cell:not(:last-child)': {\r\n        marginRight: '-1px',\r\n      },\r\n    },\r\n    detailsRowRootStyle: {\r\n      ...fonts.size14,\r\n      '.ms-DetailsRow-cell:not(:last-child)': {\r\n        marginRight: '-1px',\r\n        borderBottom: 'none',\r\n      },\r\n      '.ms-DetailsRow-cell:(:last-child)': {\r\n        borderBottom: 'none',\r\n      },\r\n      '.ms-DetailsRow-fields.updated': {\r\n        animation: keyframes({\r\n          '50%': {\r\n            backgroundColor: palette.themeLighter,\r\n          },\r\n        }),\r\n        animationDuration: '300ms',\r\n      },\r\n    },\r\n    disabledRowStyle: {\r\n      ...noPointerEvents,\r\n    },\r\n    headingRootStyle: {\r\n      margin: `${spacing.size32} 0 ${spacing.size12}`,\r\n    },\r\n  });\r\n};\r\n\r\nexport function getClassNames<PropType>(props?: PropType): IGridWithCustomColumnStyles {\r\n  return getStyles({ theme: getTheme(), ...props });\r\n}\r\n","import { action } from 'satcheljs';\r\n\r\nexport const fetchPublisherEvaluationStatusAction = action('fetchPublisherEvaluationStatusAction', ({ cache = true } = {}) => ({ cache }));\r\n","import { IAccountPaymentInformation, IAdDeliverySetting, IAdExtensionOption, IMarket } from '../interfaces';\r\nimport { Model } from './Model';\r\n\r\nexport class Account extends Model {\r\n  public apiPath = undefined;\r\n  public className = 'accounts';\r\n  public number?: number;\r\n  public countryCode?: string;\r\n  public currency?: string;\r\n  public currencyCode?: string;\r\n  public languageCode?: string;\r\n  public primaryContactUserId?: number;\r\n  public primaryContactUsername?: string;\r\n  public createdDateTime?: string;\r\n  public lastModifiedDateTime?: string;\r\n  public lastModifiedBy?: string;\r\n  public eTag?: string;\r\n  public additionalMarkets?: IMarket[];\r\n  public supportedSearchMarkets?: string[];\r\n  public supportedMobileSearchMarkets?: string[];\r\n  public enabledFeatures?: string[];\r\n  public adDeliverySettings?: IAdDeliverySetting[];\r\n  public timeZoneId?: number;\r\n  public revenueShare?: number;\r\n  public allowRichAdsInSearch?: boolean;\r\n  public adExtensionOptions?: IAdExtensionOption[];\r\n  public storeIds?: number[];\r\n  public partnerCodes?: string[];\r\n  public formCodes?: string[];\r\n  public startDistributionPlacementCodes?: string[];\r\n  public startDistributionOCIDL2s?: string[];\r\n  public startDistributionNativeAdsInFeedsAndHeadlinesRevenueSharePercentage?: number;\r\n  public paymentInformation?: IAccountPaymentInformation;\r\n}\r\n","import { MediaType } from '..';\r\nimport { Model } from './Model';\r\n\r\nexport class AccountSKU extends Model {\r\n  public apiPath = undefined;\r\n  public className = 'accountSku';\r\n  public accountId: number;\r\n  public medium: MediaType;\r\n  public sku: string;\r\n}\r\n","import { AdPropertyType, AdUnitServingTier, AdUnitType, PublisherGroupConfig } from '../enums';\r\nimport { IAdUnitClassification, IAttribute } from '../interfaces';\r\nimport { AdSenseAdUnitStatus } from './AdSenseAdUnitStatus';\r\nimport { Model } from './Model';\r\n\r\nexport class AdUnit extends Model {\r\n  public apiPath = undefined;\r\n  public className = 'adunits';\r\n  public classification: IAdUnitClassification;\r\n  public attributes?: IAttribute;\r\n  public channelIds: number[];\r\n  public publisherGroupConfiguration?: PublisherGroupConfig;\r\n  public storeIds?: number[];\r\n  public adUnitType?: AdUnitType;\r\n  public overrideNetworkAffiliation?: boolean;\r\n  public accountId?: number;\r\n  public accountName?: string;\r\n  public adPropertyType?: AdPropertyType;\r\n  public etag?: string;\r\n  public servingCostTier?: AdUnitServingTier;\r\n  public partnerCodes?: string[];\r\n  public propertyId?: number;\r\n  public propertyUrl?: string;\r\n  public mediatedWithAdSense: AdSenseAdUnitStatus;\r\n  public creationDate: string;\r\n  public taxonomy: string;\r\n  public requireImpressionFeedbackForBillableTraffic?: boolean;\r\n}\r\n","import { AuditType, UserRole } from '../enums';\r\nimport { Model } from './Model';\r\n\r\nexport class AuditLog extends Model {\r\n  public className = 'auditlogs';\r\n  public apiPath = undefined;\r\n  public modifiedAt: string;\r\n  public publisherId: string;\r\n  public auditType: AuditType;\r\n  public entityType: string;\r\n  public entityId: string;\r\n  public entityName: string;\r\n  public modifiedBy: string;\r\n  public userEmail: string;\r\n  public userRoles: UserRole[];\r\n  public changes: AuditLogChange[];\r\n}\r\n\r\nexport class AuditLogChange {\r\n  public attributeChanged: string;\r\n  public oldValue: string;\r\n  public newValue: string;\r\n  public log?: string;\r\n}\r\n\r\nexport class AuditLogResponse {\r\n  public changeLogs: AuditLog[];\r\n  public pageNumber: number;\r\n  public pageSize: number;\r\n  public totalPages: number;\r\n  public totalRecords: number;\r\n}\r\n","import { ChannelType } from '../enums';\r\nimport { Model } from './Model';\r\n\r\nexport class Channel extends Model {\r\n  public apiPath = undefined;\r\n  public className = 'channels';\r\n  public accountId?: number;\r\n  public associatedAdUnitIds?: number[];\r\n  public associatedFilterIds?: number[];\r\n  public associatedAdUnitCount?: number;\r\n  public associatedFilterCount?: number;\r\n  public type?: ChannelType = ChannelType.CUSTOM;\r\n  public defaultCategoryIds?: number[];\r\n  public defaultKeywords?: string[];\r\n  public urls?: string[] = [];\r\n  public eTag?: string;\r\n}\r\n","import { Model } from './Model';\r\n\r\nexport class EntityEvaluation extends Model {\r\n  public className = 'entityEvaluation';\r\n  public apiPath = undefined;\r\n}\r\n","import { Model } from './Model';\r\n\r\nexport class EntityPreferences extends Model {\r\n  public apiPath = undefined;\r\n  public className = 'preferences';\r\n  public entityId: number;\r\n  public notificationPreferences: NotificationPreferences;\r\n  public systemPreferences: SystemPreferences;\r\n  public tncSignatureStatus: TnCSignatureStatus;\r\n  public showFRECards?: boolean;\r\n}\r\n\r\nexport class NotificationPreferences {\r\n  public notifications: NotificationPreference[];\r\n}\r\n\r\nexport class NotificationPreference {\r\n  public type: NotificationType;\r\n  public enabled: boolean;\r\n}\r\n\r\nexport enum NotificationType {\r\n  BillingAlert = 0,\r\n  ServingStatus = 1,\r\n  ProfileReview = 2,\r\n  InvitedUser = 3,\r\n}\r\n\r\nexport class SystemPreferences {\r\n  public locale?: string;\r\n  public currency?: string;\r\n  public countryCode?: string;\r\n}\r\n\r\nexport class TnCSignatureStatus {\r\n  public acceptedVersion: string;\r\n  public signatureDate: string;\r\n  public isLatestAccepted: boolean;\r\n}\r\n","import { FilterScope } from '../enums';\r\nimport { Model } from './Model';\r\n\r\nexport class Filter extends Model {\r\n  public apiPath = undefined;\r\n  public className = 'filters';\r\n  public appendOnly?: boolean;\r\n  public associatedChannelIds?: number[];\r\n  public associatedChannelCount?: number;\r\n  public blockedAdKeywords?: string[];\r\n  public blockedQueryKeywords?: string[];\r\n  public blockedUrls?: string[];\r\n  public filterScope?: FilterScope;\r\n  public scopeId?: number;\r\n  public blockedUrlCount?: number;\r\n  public blockedAdKeywordCount?: number;\r\n  public blockedQueryKeywordCount?: number;\r\n  public startTime?: string;\r\n  public endTime?: string;\r\n  public startTimeStamp?: number;\r\n  public endTimeStamp?: number;\r\n}\r\n","import { Model } from './Model';\r\n\r\nexport class FilterDownloader extends Model {\r\n  public apiPath = undefined;\r\n  public className = 'filterdownloader';\r\n  public downloadUrl?: string;\r\n  public blockedItemsCount?: number;\r\n}\r\n","import { Model } from './Model';\r\n\r\nexport class IPRange extends Model {\r\n  public apiPath = undefined;\r\n  public className = 'ipAddress';\r\n  public minIPAddress?: string;\r\n  public maxIPAddress?: string;\r\n}\r\n","// tslint:disable: max-line-length\r\n\r\nimport { TemplateType } from '..';\r\nimport { Model } from './Model';\r\n\r\nexport class NativeAdTemplate extends Model {\r\n  public apiPath = undefined;\r\n  public className = 'templates';\r\n\r\n  public type: TemplateType;\r\n  public adUnitId: number;\r\n  public numberOfAds: number;\r\n  public assets: Asset[];\r\n  public renderingConfig: RenderingConfig;\r\n}\r\n\r\nexport class Asset {\r\n  public required: number;\r\n  public title?: Title;\r\n  public img?: Image;\r\n  public data?: Data;\r\n}\r\n\r\nexport class RenderingConfig {\r\n  public customHtml?: string;\r\n  public customCss?: string;\r\n  public simplifiedHtml?: string;\r\n  public drConfig: string;\r\n  public gridRowCount: number;\r\n  public gridColumnCount: number;\r\n  public imageWidthPercentage?: number;\r\n  public adCardWidth?: number;\r\n  public gamAdUnit: GamAdUnit;\r\n}\r\n\r\nexport class GamAdUnit {\r\n  public path?: string\r\n  public isActive?: boolean\r\n  public keyValuesName?: string\r\n  public creativeId?: number\r\n}\r\n\r\nexport class Title {\r\n  public len: number;\r\n}\r\n\r\nexport class Image {\r\n  public type: ImageAssetType;\r\n  public w: number;\r\n  public h: number;\r\n}\r\n\r\nexport class Data {\r\n  public type: DataAssetType;\r\n  // len is an optional field based on openRTB spec\r\n  public len?: number;\r\n}\r\n\r\nexport enum ImageAssetType {\r\n  /**\r\n   *  Values from https://msasg.visualstudio.com/ContentServices/_git/ICE.Service.Monetization?path=/src/ICE.Service.Monetization.Rtb.Contracts/AssetImageType.cs&_a=contents&version=GBmaster\r\n   */\r\n\r\n  Thumbnail = 1,\r\n  Large = 3,\r\n\r\n  // TODO: Deprecated post-MSX to Xandr migration?\r\n  TransparentImage = 500,\r\n\r\n  /** Used to request unbounded number of images */\r\n  // TODO: Deprecated post-MSX to Xandr migration?\r\n  MultipleImages = 600,\r\n}\r\n\r\nexport enum DataAssetType {\r\n  /**\r\n   * Values from: https://msasg.visualstudio.com/ContentServices/_git/ICE.Service.Monetization?path=/src/ICE.Service.Monetization.Rtb.Contracts/AssetDataType.cs&_a=contents&version=GBmaster\r\n   */\r\n\r\n  /**  Sponsored By message where response should contain the brand name of the sponsor. */\r\n  Sponsored = 1,\r\n\r\n  /**\r\n   * Descriptive text associated with the product  or service being  advertised.\r\n   * Longer length of text in response may be truncated or ellipsed by the exchange.\r\n   */\r\n  Description = 2,\r\n\r\n  /**\r\n   * Rating of the product being offered to the user.\r\n   * For example an app’s rating in an app store from 0-5.\r\n   */\r\n  Rating = 3,\r\n\r\n  /**  Number of social ratings or “likes” of the product being offered to the user */\r\n  Likes = 4,\r\n\r\n  /**  Number downloads/installs of this product */\r\n  Downloads = 5,\r\n\r\n  /**\r\n   * Price for product / app / in-app purchase.\r\n   * Value  should include currency symbol in localised format.\r\n   */\r\n  Price = 6,\r\n\r\n  /**\r\n   * Sale price that can be used together with price to indicate a discounted price compared to a regular price.\r\n   * Value  should include currency symbol in localised format.\r\n   */\r\n  Saleprice = 7,\r\n\r\n  /**  Phone number */\r\n  Phone = 8,\r\n\r\n  /**  Address */\r\n  Address = 9,\r\n\r\n  /**  Additional descriptive text associated with the product or service being advertised */\r\n  Description2 = 10,\r\n\r\n  /**\r\n   * Display URL for the text ad. To be used when sponsoring entity doesn’t own the content.\r\n   * IE sponsored by BRAND on SITE (where SITE is transmitted in this field).\r\n   */\r\n  DisplayUrl = 11,\r\n\r\n  /**  CTA description - descriptive text describing a ‘call to action’ button for the destination URL. */\r\n  CTAText = 12,\r\n\r\n  /**  Installment Price */\r\n  // TODO: Deprecated post-MSX to Xandr migration?\r\n  InstallmentPrice = 500,\r\n\r\n  /**  Price Drop */\r\n  // TODO: Deprecated post-MSX to Xandr migration?\r\n  PriceDrop = 501,\r\n\r\n  /**\r\n   * Presence of this asset means the decoration is available, no check on its value details.\r\n   * Value is set to \"true\" when freeshipping is available.\r\n   */\r\n  // TODO: Deprecated post-MSX to Xandr migration?\r\n  FreeShipping = 502,\r\n\r\n  /**  Top Viewed */\r\n  // TODO: Deprecated post-MSX to Xandr migration?\r\n  TopViewed = 503,\r\n\r\n  /**  Sold */\r\n  // TODO: Deprecated post-MSX to Xandr migration?\r\n  Sold = 504,\r\n\r\n  /**  Special Offer */\r\n  // TODO: Deprecated post-MSX to Xandr migration?\r\n  SpecialOffer = 505,\r\n\r\n  /**  Elite Badge */\r\n  // TODO: Deprecated post-MSX to Xandr migration?\r\n  EliteBadge = 506,\r\n\r\n  /**  Condition */\r\n  // TODO: Deprecated post-MSX to Xandr migration?\r\n  Condition = 507,\r\n\r\n  /**  Local Inventory Ad */\r\n  // TODO: Deprecated post-MSX to Xandr migration?\r\n  LIA = 508,\r\n\r\n  /**  Curbside Pickup */\r\n  // TODO: Deprecated post-MSX to Xandr migration?\r\n  CurbsidePickup = 509,\r\n\r\n  /**  Review */\r\n  // TODO: Deprecated post-MSX to Xandr migration?\r\n  Review = 510,\r\n\r\n  /**  Short Title */\r\n  // TODO: Deprecated post-MSX to Xandr migration?\r\n  ShortTitle = 511,\r\n\r\n  /**  Return Policy */\r\n  // TODO: Deprecated post-MSX to Xandr migration?\r\n  ReturnPolicy = 512,\r\n\r\n  /**  Disclaimer Text */\r\n  // TODO: Deprecated post-MSX to Xandr migration?\r\n  DisclaimerText = 513,\r\n}\r\n","import { NotificationPreferences } from './EntityPreferences';\r\nimport { Model } from './Model';\r\n\r\nexport class NotificationPreferencesUpdate extends Model {\r\n  public apiPath = undefined;\r\n  public className = 'updateNotificationPreferences';\r\n  public notificationPreferences: NotificationPreferences;\r\n}\r\n","import { Model } from './Model';\r\n\r\nexport class PhoneVerificationVerifyCode extends Model {\r\n  public apiPath = 'tokenVerification/verifyCode';\r\n  public className = 'verifyCode';\r\n  public requestId: string;\r\n  public code: string;\r\n  public data: IPhoneVerificationData;\r\n}\r\n\r\nexport class PhoneVerificationGenerateCode extends Model {\r\n  public apiPath = 'tokenVerification/generateCode';\r\n  public className = 'generateCode';\r\n  public phoneNumberWithCountryCode?: string;\r\n  public email?: string;\r\n  public locale: string;\r\n  public verificationMediumType: PhoneVerificationMediumType;\r\n  public data: IPhoneVerificationData;\r\n}\r\n\r\nexport interface IPhoneVerificationData {\r\n  requestId: string;\r\n  status: string;\r\n  statusId: number;\r\n  subStatus: string;\r\n  createdDateTime: string;\r\n}\r\n\r\nexport enum PhoneVerificationMediumType {\r\n  email = 'Email',\r\n  phoneSms = 'PhoneSms',\r\n  phoneCall = 'PhoneVoice',\r\n}\r\n\r\n// Might need to make Status/SubStatus enum\r\nexport enum PhoneVerificationSubStatus {\r\n  codeMismatched = 'Code mismatched',\r\n  codeMatched = 'Code matched',\r\n  codeSent = 'Code sent',\r\n  deliveryFailed = 'Code delivery failed',\r\n  expired = 'Expired',\r\n}\r\nexport enum VerificationStatus {\r\n  PASS = 'Pass',\r\n  FAILED = 'Fail',\r\n  IN_PROGRESS = 'In progress',\r\n}\r\n","import { ClarityStatus, ClarityType, PropertyApprovalStatus } from '../enums';\r\nimport { Model } from './Model';\r\nimport { PropertyServingConfigs } from './ServingConfigs';\r\n\r\nexport enum InventoryPlatformType {\r\n  Web = 'Web',\r\n  UWP = 'UWP',\r\n}\r\nexport class Property extends Model {\r\n  public apiPath = undefined;\r\n  public className = 'properties';\r\n  public approvalStatus: PropertyApprovalStatus;\r\n  public approvalStatusComments: string;\r\n  public disapprovalReasonId?: number;\r\n  public lastStatusChangedTime: string;\r\n  public lastUpdatedTimeStamp: string;\r\n  public propertyId?: number;\r\n  public propertyName: string;\r\n  public publisherId: number;\r\n  public url: string;\r\n  public eTag?: string;\r\n  public associatedAdUnitIds?: number[];\r\n  public enableMicrosoftClarity?: boolean;\r\n  public clarityProjectId?: string;\r\n  public clarityProjectIdForTython?: string;\r\n  public clarityStatus?: ClarityStatus;\r\n  public clarityType?: ClarityType;\r\n  public servingConfig?: PropertyServingConfigs;\r\n  public MicrosoftStoreAppId?: string | null;\r\n  public PartnerCenterSellerId?: string | null;\r\n  public COPPAAgreement?: boolean | null;\r\n  public inventoryPlatformType?: InventoryPlatformType;\r\n}\r\n","import { IPRange } from '.';\r\nimport { EntityLimitTier, FeatureOverideTier, NetworkAffiliation, Partner, PublisherTier, ServiceLevel } from '../enums';\r\nimport { PublisherType } from '../enums/PublisherType';\r\nimport { IAddress, IAllowedMarket } from '../interfaces';\r\nimport { Model } from './Model';\r\n\r\nexport interface IPublisherExtendedProperties {\r\n  primaryContactUserId?: number;\r\n  organizationEmailAddress?: string;\r\n  organizationUrl?: string;\r\n  ceoName?: string;\r\n}\r\n\r\nexport class Publisher extends Model {\r\n  public apiPath = undefined;\r\n  public className = 'publishers';\r\n  public address?: IAddress;\r\n  public allowDistributionReporting?: boolean;\r\n  public allowDistributionV2Reporting?: boolean;\r\n  public allowStartDistributionReporting?: boolean;\r\n  public allowStartDistributionContentReporting?: boolean;\r\n  public allowEndorReporting?: boolean;\r\n  public allowMediationReporting?: boolean;\r\n  public allowedMarkets?: IAllowedMarket[];\r\n  public allowMobileSearchAdUnit?: boolean;\r\n  public allowNativeReporting?: boolean;\r\n  public allowSyndicationReporting?: boolean;\r\n  public allowWebAdUnit?: boolean;\r\n  public allowPaidSearchReportingApi?: boolean;\r\n  public allowPaidSearchReportingDashboard?: boolean;\r\n  public allowDynamicPropertyRegistration?: boolean;\r\n  public enableDefaultTythonV2Reporting?: boolean;\r\n  public createdDateTime?: string;\r\n  public defaultAccountId?: number;\r\n  public entityLimitTier?: EntityLimitTier;\r\n  public eTag?: string;\r\n  public financialStatus?: string;\r\n  public ipRanges?: IPRange[];\r\n  public lastModifiedBy?: string;\r\n  public lastModifiedDateTime?: string;\r\n  public networkAffiliation?: NetworkAffiliation;\r\n  public overrideFeatureTier?: FeatureOverideTier;\r\n  public partner?: Partner;\r\n  public propertyAutoApproved?: boolean;\r\n  public publisherMarket?: string;\r\n  public publisherTier?: PublisherTier;\r\n  public serviceLevel?: ServiceLevel;\r\n  public extendedProperties?: IPublisherExtendedProperties;\r\n  public publisherType?: PublisherType;\r\n\r\n  // NOTE: Does not sound right for API to expose this field. This should have been a derived/computed field.\r\n  // Pending on @srivatsa\r\n  public profileComplete?: boolean;\r\n}\r\n","import {\r\n  EntityLimitTier,\r\n  FeatureOverideTier,\r\n  IAddress,\r\n  IAllowedMarket,\r\n  NetworkAffiliation,\r\n  Partner,\r\n  PublisherPromotionalEmail,\r\n  PublisherTier,\r\n  ServiceLevel,\r\n} from '..';\r\nimport { PublisherType } from '../enums/PublisherType';\r\nimport { Model } from './Model';\r\n\r\nexport class PublisherCreate extends Model {\r\n  public apiPath = 'support/publishers/register';\r\n  public className = 'publishers';\r\n  public address?: IAddress;\r\n  public allowDistributionReporting?: boolean;\r\n  public allowDistributionV2Reporting?: boolean;\r\n  public allowStartDistributionReporting?: boolean;\r\n  public allowStartDistributionContentReporting?: boolean;\r\n  public allowSelectTierReporting?: boolean;\r\n  public allowMediationReporting?: boolean;\r\n  public allowedMarkets?: IAllowedMarket[];\r\n  public allowMobileSearchAdUnit?: boolean;\r\n  public allowNativeReporting?: boolean;\r\n  public allowSyndicationReporting?: boolean;\r\n  public allowPaidSearchReportingApi?: boolean;\r\n  public allowPaidSearchReportingDashboard?: boolean;\r\n  public enableDefaultTythonV2Reporting?: boolean;\r\n  public allowWebAdUnit?: boolean;\r\n  public entityLimitTier?: EntityLimitTier;\r\n  public networkAffiliation?: NetworkAffiliation;\r\n  public overrideFeatureTier?: FeatureOverideTier;\r\n  public partner?: Partner;\r\n  public propertyAutoApproved?: boolean;\r\n  public publisherTier?: PublisherTier;\r\n  public serviceLevel?: ServiceLevel;\r\n  public publisherMarket?: string;\r\n  public financialStatus?: string;\r\n  public publisherType?: PublisherType;\r\n  public promotionalEmail?: typeof PublisherPromotionalEmail[keyof typeof PublisherPromotionalEmail];\r\n}\r\n","import { Model } from './Model';\r\n\r\nexport class PublisherSearch extends Model {\r\n  public apiPath = 'support/publishers/search';\r\n  public className = 'publisherSearchSummaries';\r\n  public publisherId: number;\r\n  public publisherName?: string;\r\n}","import { Publisher, User } from '.';\r\nimport { Model } from './Model';\r\n\r\nexport class SelfServePublisher extends Model {\r\n  public apiPath = undefined;\r\n  public className = 'publishers';\r\n\r\n  public publisher?: Publisher;\r\n  public user?: User;\r\n}\r\n","import { AdTypes, NativeAdProperties } from '../../../../pages/ad-management/Adunit/TythonAdunit/CreateAdunit/types';\r\nimport { Model } from './Model';\r\n\r\nexport type TythonAdUnitServingConfig = {\r\n  adUnitId?: number;\r\n  accountId: number;\r\n  propertyId: number;\r\n  adUnitName: string;\r\n  adTypes: AdTypes;\r\n  nativeProperties: NativeAdProperties;\r\n};\r\n\r\nexport class TythonAdUnit extends Model {\r\n  public apiPath = '';\r\n  public className = 'servingConfig';\r\n  public servingConfig?: TythonAdUnitServingConfig;\r\n  /**\r\n   * data for api return type in ad unit serving config endpoint\r\n   */\r\n  public data: { servingConfig: TythonAdUnitServingConfig };\r\n}\r\n","import { AdTypes, NativeAdProperties } from '../../../../pages/ad-management/Adunit/TythonAdunit/CreateAdunit/types';\r\nimport { Model } from './Model';\r\n\r\nexport class TythonAdUnits extends Model {\r\n  public apiPath = undefined;\r\n  public className = 'adUnitServingConfigs';\r\n  public adunit?: {\r\n    adUnitId?: number;\r\n    accountId: number;\r\n    propertyId: number;\r\n    name: string;\r\n    adTypes: AdTypes;\r\n    nativeProperties: NativeAdProperties;\r\n  };\r\n}\r\n","import { Model } from './Model';\r\n\r\nexport class UpdateStatus extends Model {\r\n  public apiPath = undefined;\r\n  public className = 'updateStatus';\r\n}","import { Model } from '.';\r\nimport { SecretQuestion } from '../enums';\r\nimport { IAddress, IContactInfo, INamePair, IUserRoleDetail } from '../interfaces';\r\n\r\nexport class User extends Model {\r\n  public apiPath = undefined;\r\n  public className = 'users';\r\n  public contactByPost?: boolean;\r\n  public contactByPhone?: boolean;\r\n  public contactByEmail?: boolean;\r\n  public contactInfo?: IContactInfo;\r\n  public email?: string;\r\n  public language?: string;\r\n  public username?: string;\r\n  public secretQuestion?: SecretQuestion;\r\n  public postalAddress?: IAddress;\r\n  public userRoleDetails?: IUserRoleDetail[];\r\n  public windowsLiveIdUsername?: string;\r\n  public userRoleDetailsETag?: string;\r\n  public name?: INamePair;\r\n  public phoneNumber?: string;\r\n}\r\n","import { Model } from '.';\r\nimport { IAddress } from '../interfaces';\r\n\r\nexport class UpdateUserContactDetails extends Model {\r\n  public apiPath = undefined;\r\n  public className = 'updateUserContact';\r\n  public postalAddress?: IAddress;\r\n  public userId: number;\r\n  public phone?: string;\r\n}\r\n","import { TokenType, UserType } from '../enums';\r\n\r\nexport class UserContext {\r\n  public className = 'userContext';\r\n  public firstName?: string;\r\n  public lastName?: string;\r\n  public name?: string;\r\n  public userName?: string;\r\n  public email?: string;\r\n  public token?: string;\r\n  public tokenType?: TokenType;\r\n  public userType?: UserType;\r\n  public userRoles?: number[];\r\n  public error?: string;\r\n  public id: number;\r\n\r\n  constructor(userName?: string, email?: string, tokenType?: TokenType) {\r\n    this.name = userName;\r\n    this.email = email;\r\n    this.tokenType = tokenType || TokenType.PubCenterAADToken;\r\n  }\r\n}\r\n","import { Model } from '.';\r\nimport { IUserRoleDetail } from '..';\r\nimport { UserInvitationType } from '../enums/UserInvitationType';\r\n\r\nexport class UserInvitation extends Model {\r\n  public apiPath = undefined;\r\n  public className = 'userInvitations';\r\n  public accountIds?: number[];\r\n  public publisherId?: number;\r\n  public email?: string;\r\n  public expirationDate?: Date | string;\r\n  public firstName?: string;\r\n  public lastName?: string;\r\n  public lcid?: number;\r\n  public roleIds?: number[];\r\n  public entityRoles?: IUserRoleDetail[];\r\n  public get fullName(): string {\r\n    return this.firstName + ' ' + this.lastName;\r\n  }\r\n  public userInvitationType?: UserInvitationType;\r\n}\r\n","import { Model } from '.';\r\n\r\nexport class UserInvitationResend extends Model {\r\n  public apiPath = undefined;\r\n  public className = 'resend';\r\n}\r\n","import { Model } from '.';\r\nimport { IUserRoleDetail } from '..';\r\n\r\nexport class UserRoleUpdate extends Model {\r\n  public apiPath = undefined;\r\n  public className = 'updateRoles';\r\n  public addedRoles?: IUserRoleDetail[];\r\n  public removedRoles?: IUserRoleDetail[];\r\n  public eTag?: string;\r\n}\r\n\r\nexport class FetchDevTokenStatus extends Model {\r\n  public apiPath = undefined;\r\n  public className = 'fetchApiDevTokenStatus';\r\n  public TokenExists?: boolean;\r\n  public ApiDevToken?: string;\r\n}\r\n\r\nexport class GenerateDevToken extends Model {\r\n  public apiPath = undefined;\r\n  public className = 'generateApiDevToken';\r\n  public ApiDevToken?: string;\r\n}\r\n","import { Model } from './Model';\r\n\r\nexport class UserUpdateLanguage extends Model {\r\n  public apiPath = undefined;\r\n  public className = 'updateUserLanguage';\r\n  public userId: number;\r\n  public language: string;\r\n}\r\n","export class XPayJwtTokenRequest {\r\n  public publisherId: number;\r\n  public countryCode: string;\r\n}\r\n","import { action } from 'satcheljs';\r\nimport { Model } from '../../../../@data';\r\nimport { IGridQuery } from '../../GridV2.types';\r\n\r\nexport const onGridPageV2Initialized = action(\r\n  'onGridPageV2Initialized',\r\n  (data: Model[], entity: new () => Model, query?: IGridQuery<Model>) => ({ data, entity, query })\r\n);\r\n","import { orchestrator } from 'satcheljs';\r\nimport {\r\n  Account,\r\n  LifeCycleStatus,\r\n  Model,\r\n  NotificationLabel,\r\n  NotificationSeverity,\r\n  Publisher,\r\n  UpdateStatus,\r\n  deleteEntity,\r\n  getAppStore,\r\n  onNotificationCardAdded,\r\n  patchEntity,\r\n} from '../../../../@data';\r\nimport {\r\n  onPopupOpenChanged,\r\n  showErrorToastNotification,\r\n  showLoadingToastNotification,\r\n  showSuccessToastNotification,\r\n} from '../../../../@data/mutatorActions';\r\nimport { PopupType } from '../../../../@data/store/schema/enums/PopupType';\r\nimport AppMessages from '../../../../App.messages';\r\nimport notificationMessages from '../../../../NotificationsPanel.Types.messages';\r\nimport { getSuccessNotificationChangingStatus } from '../../../../utils';\r\nimport messages from '../../GridV2.messages';\r\nimport { onChangeItemsStatus } from '../actions/commandBarActions';\r\nimport { getStore } from '../store/store';\r\n\r\norchestrator(onChangeItemsStatus, async (msg) => {\r\n  onPopupOpenChanged(PopupType.None);\r\n  const { entity } = getStore();\r\n  const status = msg.status;\r\n  const selectedItems = msg.selectedItems;\r\n\r\n  const showErrorMessage = () => {\r\n    showErrorToastNotification({ textMessageDescriptor: messages.gridDataSubmittingChangingStatusFailed });\r\n    onNotificationCardAdded({\r\n      // tslint:disable-next-line: no-any\r\n      severity: NotificationSeverity.Error,\r\n      titleMessageDescriptor: notificationMessages.ChangingItemStatusFailureTitle,\r\n      contentMessageDescriptor: notificationMessages.ChangingItemStatusFailureContent,\r\n      notificationLabel: NotificationLabel.ChangingItemStatusFailure,\r\n    });\r\n  };\r\n\r\n  const updateSucceeded = (result, entityInstance, ids) => {\r\n    if (result) {\r\n      const gridData = [...getStore().data];\r\n\r\n      selectedItems.forEach((selItem) => {\r\n        const itemCopy = { ...selItem } as Model;\r\n        const index = gridData?.findIndex((dataItem) => dataItem.id === selItem.id);\r\n        itemCopy.status = status;\r\n        if (index !== -1) {\r\n          gridData[index] = itemCopy;\r\n        }\r\n      });\r\n\r\n      msg.setData?.(gridData);\r\n      msg.onItemsStatusChanged?.(selectedItems, status);\r\n\r\n      const commandText = status === LifeCycleStatus.Inactive ? AppMessages.deactivate.defaultMessage : AppMessages.activate.defaultMessage;\r\n      // const notification = getSuccessNotification(commandText!, selectedItems, entityInstance, ids);\r\n      const notification = getSuccessNotificationChangingStatus(commandText, selectedItems, entityInstance, msg.formatMessage, ids);\r\n      showSuccessToastNotification({ text: notification });\r\n    }\r\n  };\r\n\r\n  if (entity && selectedItems && status) {\r\n    const { userContext, publisher } = getAppStore();\r\n\r\n    if (userContext && publisher) {\r\n      const ids = encodeURI(selectedItems.map((item) => item.id).join(','));\r\n\r\n      let entityInstance = new entity();\r\n      try {\r\n        let result;\r\n        if (entityInstance instanceof Account) {\r\n          entityInstance.id = selectedItems[0].id;\r\n          const updateParams = new URLSearchParams([['status', status]]);\r\n          showLoadingToastNotification({\r\n            textMessageDescriptor: messages.gridDataSubmittingChangingStatus,\r\n            onDismiss: async () => {\r\n              try {\r\n                result = await patchEntity([publisher, entityInstance], UpdateStatus, undefined, userContext, updateParams);\r\n                updateSucceeded(result, entityInstance, ids);\r\n              } catch (e) {\r\n                showErrorMessage();\r\n              }\r\n            },\r\n          });\r\n        } else if (entityInstance instanceof Publisher) {\r\n          entityInstance = new Publisher(selectedItems[0].id);\r\n          showLoadingToastNotification({\r\n            textMessageDescriptor: messages.gridDataSubmittingChangingStatus,\r\n            onDismiss: async () => {\r\n              try {\r\n                result = await deleteEntity([entityInstance], undefined, userContext);\r\n                updateSucceeded(result, entityInstance, ids);\r\n              } catch (e) {\r\n                showErrorMessage();\r\n              }\r\n            },\r\n          });\r\n        } else {\r\n          const updateParams = new URLSearchParams([\r\n            ['ids', ids],\r\n            ['status', status],\r\n          ]);\r\n          showLoadingToastNotification({\r\n            textMessageDescriptor: messages.gridDataSubmittingChangingStatus,\r\n            onDismiss: async () => {\r\n              try {\r\n                result = await patchEntity([publisher, entityInstance], UpdateStatus, undefined, userContext, updateParams);\r\n                updateSucceeded(result, entityInstance, ids);\r\n              } catch (e) {\r\n                showErrorMessage();\r\n              }\r\n            },\r\n          });\r\n        }\r\n      } catch (e) {\r\n        showErrorMessage();\r\n      }\r\n    }\r\n  }\r\n  onPopupOpenChanged(PopupType.None);\r\n});\r\n","import { orchestrator } from 'satcheljs';\r\nimport {\r\n  Model,\r\n  NotificationLabel,\r\n  NotificationSeverity,\r\n  PopupType,\r\n  Publisher,\r\n  PublisherSearch,\r\n  deleteEntity,\r\n  getAppStore,\r\n  onNotificationCardAdded,\r\n  onPopupOpenChanged,\r\n  showErrorToastNotification,\r\n  showLoadingToastNotification,\r\n  showSuccessToastNotification,\r\n} from '../../../../@data';\r\n\r\nimport notificationMessages from '../../../../NotificationsPanel.Types.messages';\r\nimport { getSuccessNotificationDeleteItem } from '../../../../utils';\r\nimport messages from '../../GridV2.messages';\r\nimport { onDeleteItem } from '../actions/commandBarActions';\r\nimport { setSelectedItems } from '../mutatorActions';\r\nimport { getStore } from '../store/store';\r\n\r\norchestrator(onDeleteItem, async (msg) => {\r\n  onPopupOpenChanged(PopupType.None);\r\n\r\n  const { entity } = getStore();\r\n  const selectedItem = msg.selectedItem as Model;\r\n\r\n  const showErrorMessage = () => {\r\n    showErrorToastNotification({ textMessageDescriptor: messages.gridDataDeletingItemFailed });\r\n    onNotificationCardAdded({\r\n      // tslint:disable-next-line: no-any\r\n      severity: NotificationSeverity.Error,\r\n      titleMessageDescriptor: notificationMessages.DeletingItemFailureTitle,\r\n      contentMessageDescriptor: notificationMessages.DeletingItemFailureContent,\r\n      notificationLabel: NotificationLabel.DeletingItemFailure,\r\n    });\r\n  };\r\n\r\n  const deleteSucceeded = async (result, entityInstance, formatMessage) => {\r\n    if (result) {\r\n      const items = getStore().data;\r\n      if (items) {\r\n        const copiedItems = items.filter((item) => item.id !== entityInstance.id);\r\n        msg.deleteAction?.(copiedItems);\r\n        msg.setData?.(copiedItems);\r\n        await msg.postDeleteAction?.([msg.selectedItem]);\r\n      }\r\n      setSelectedItems([]);\r\n\r\n      showSuccessToastNotification({ text: getSuccessNotificationDeleteItem([selectedItem], entityInstance, formatMessage) });\r\n    }\r\n  };\r\n\r\n  if (entity && selectedItem) {\r\n    const { userContext, publisher } = getAppStore();\r\n\r\n    if (userContext && publisher) {\r\n      let entityInstance = new entity();\r\n      entityInstance.id = selectedItem.id;\r\n      if (entityInstance instanceof PublisherSearch) {\r\n        entityInstance = new Publisher();\r\n        entityInstance.id = (selectedItem as PublisherSearch).publisherId;\r\n        selectedItem.name = (selectedItem as PublisherSearch).publisherName;\r\n      }\r\n\r\n      await msg.preDeleteAction?.([msg.selectedItem]);\r\n\r\n      try {\r\n        let result;\r\n        if (entityInstance instanceof Publisher) {\r\n          showLoadingToastNotification({\r\n            textMessageDescriptor: messages.gridDataDeletingItem,\r\n            onDismiss: async () => {\r\n              try {\r\n                result = await deleteEntity([entityInstance], undefined, userContext);\r\n                await deleteSucceeded(result, entityInstance, msg.formatMessage);\r\n              } catch (e) {\r\n                showErrorMessage();\r\n              }\r\n            },\r\n          });\r\n        } else {\r\n          showLoadingToastNotification({\r\n            textMessageDescriptor: messages.gridDataDeletingItem,\r\n            onDismiss: async () => {\r\n              try {\r\n                result = await deleteEntity([publisher, entityInstance], undefined, userContext);\r\n                await deleteSucceeded(result, entityInstance, msg.formatMessage);\r\n              } catch (e) {\r\n                showErrorMessage();\r\n              }\r\n            },\r\n          });\r\n        }\r\n      } catch (e) {\r\n        showErrorMessage();\r\n      }\r\n    }\r\n  }\r\n});\r\n","import { orchestrator } from 'satcheljs';\r\nimport {\r\n  Account,\r\n  AdUnit,\r\n  Filter,\r\n  Model,\r\n  NotificationLabel,\r\n  NotificationSeverity,\r\n  Publisher,\r\n  PublisherSearch,\r\n  getAppStore,\r\n  onNotificationCardAdded,\r\n  showLoadingToastNotification,\r\n} from '../../../../@data';\r\nimport { onPopupOpenChanged, showErrorToastNotification, showSuccessToastNotification } from '../../../../@data/mutatorActions';\r\nimport { PopupType } from '../../../../@data/store/schema/enums/PopupType';\r\nimport notificationMessages from '../../../../NotificationsPanel.Types.messages';\r\nimport { getSuccessNotificationDuplicateItem } from '../../../../utils';\r\nimport messages from '../../GridV2.messages';\r\nimport { ISelectableRow } from '../../GridV2.types';\r\nimport { onDuplicateItem } from '../actions/commandBarActions';\r\nimport { setLoading } from '../mutatorActions';\r\nimport { duplicateAccount, duplicateData } from '../services/GridService';\r\nimport { getStore } from '../store/store';\r\n\r\norchestrator(onDuplicateItem, async (msg) => {\r\n  onPopupOpenChanged(PopupType.None);\r\n\r\n  const { entity } = getStore();\r\n\r\n  const selectedItem = msg.selectedItem;\r\n\r\n  const showErrorMessage = () => {\r\n    // TODO: Figure out how to internationalize orchestrators. #1632176\r\n    showErrorToastNotification({ textMessageDescriptor: messages.gridDataDuplicatingFailed });\r\n    onNotificationCardAdded({\r\n      // tslint:disable-next-line: no-any\r\n      severity: NotificationSeverity.Error,\r\n      titleMessageDescriptor: notificationMessages.DuplicateGridItemFailureTitle,\r\n      contentMessageDescriptor: notificationMessages.DuplicateGridItemFailureContent,\r\n      notificationLabel: NotificationLabel.DuplicateGridItemFailure,\r\n    });\r\n  };\r\n\r\n  const duplicateSucceeded = (newEntity, entityInstance, formatMessage) => {\r\n    if (newEntity) {\r\n      const selectedEntity: Model = { ...msg.selectedItem, className: msg.selectedItem.className, apiPath: msg.selectedItem.apiPath };\r\n      selectedEntity.name = selectedItem.name + ' (copy)';\r\n      selectedEntity.id = newEntity.id;\r\n\r\n      msg.setData?.([...(msg.data || []), selectedEntity].map((item) => ({ ...item, isSelected: false } as ISelectableRow)));\r\n      msg.onDuplicateAction?.([selectedEntity]);\r\n\r\n      // const commandText = AppMessages.duplicate.defaultMessage;\r\n      // showSuccessToastNotification({ text: getSuccessNotification(commandText!, [newEntity], entityInstance) });\r\n      showSuccessToastNotification({ text: getSuccessNotificationDuplicateItem([selectedItem], entityInstance, formatMessage) });\r\n    }\r\n  };\r\n\r\n  if (entity && selectedItem) {\r\n    const { userContext, publisher } = getAppStore();\r\n\r\n    if (userContext && publisher) {\r\n      let entityInstance = new entity();\r\n      try {\r\n        const id = encodeURI('' + selectedItem.id);\r\n        if (entityInstance instanceof PublisherSearch) {\r\n          entityInstance = new Publisher();\r\n        }\r\n        const enparams = new URLSearchParams([['ids', id]]);\r\n        if (entityInstance instanceof AdUnit || entityInstance instanceof Filter) {\r\n          enparams.append('type', 'Search');\r\n        }\r\n        if (entityInstance instanceof AdUnit) {\r\n          enparams.append('details', 'true');\r\n        }\r\n\r\n        let newEntity;\r\n        if (entityInstance instanceof Account) {\r\n          showLoadingToastNotification({\r\n            textMessageDescriptor: messages.gridDataDuplicating,\r\n            onDismiss: async () => {\r\n              try {\r\n                newEntity = await duplicateAccount(publisher, selectedItem.id!, userContext);\r\n                duplicateSucceeded(newEntity, entityInstance, msg.formatMessage);\r\n              } catch (e) {\r\n                showErrorMessage();\r\n              }\r\n            },\r\n          });\r\n        } else {\r\n          showLoadingToastNotification({\r\n            textMessageDescriptor: messages.gridDataDuplicating,\r\n            onDismiss: async () => {\r\n              try {\r\n                newEntity = await duplicateData([publisher], userContext, entity, enparams);\r\n                duplicateSucceeded(newEntity, entityInstance, msg.formatMessage);\r\n              } catch (e) {\r\n                showErrorMessage();\r\n              }\r\n            },\r\n          });\r\n        }\r\n      } catch (e) {\r\n        showErrorMessage();\r\n      } finally {\r\n        setLoading(false);\r\n      }\r\n    }\r\n  }\r\n});\r\n","import { Account, getEntity, listEntity, Model, postEntity, Publisher, UserContext } from '../../../../@data';\r\nimport { restoreTypeWithObject } from '../../../../utils';\r\n\r\nexport async function getData(models: Model[], userContext: UserContext, entity?: new () => Model, params?: URLSearchParams) {\r\n  return await listEntity(models, userContext, entity, params);\r\n}\r\n\r\nexport async function duplicateData(models: Model[], userContext: UserContext, entityType: new () => Model, params?: URLSearchParams) {\r\n  let result: Model;\r\n  try {\r\n    result = await getEntity<Model>(models, userContext, entityType, params);\r\n  } catch (error) {\r\n    return Promise.reject(error);\r\n  }\r\n\r\n  if (result) {\r\n    let entityToDuplicate = result[0] as Model;\r\n    entityToDuplicate.id = undefined;\r\n    entityToDuplicate.name += ' (copy)';\r\n    entityToDuplicate.eTag = undefined;\r\n    entityToDuplicate = restoreTypeWithObject(new entityType(), entityToDuplicate)!;\r\n\r\n    return await postEntity(models, entityType, entityToDuplicate, userContext);\r\n  }\r\n}\r\n\r\nexport async function duplicateAccount(publisher: Publisher, accountIdToDuplicate: number, userContext: UserContext) {\r\n  let result: Model;\r\n  try {\r\n    const account = new Account(accountIdToDuplicate);\r\n    result = await getEntity([publisher, account], userContext);\r\n  } catch (error) {\r\n    return Promise.reject(error);\r\n  }\r\n\r\n  if (result) {\r\n    let entityToDuplicate = result as Model;\r\n    entityToDuplicate.id = undefined;\r\n    entityToDuplicate.name += ' (copy)';\r\n    entityToDuplicate.eTag = undefined;\r\n    entityToDuplicate = restoreTypeWithObject(new Account(), entityToDuplicate)!;\r\n    return await postEntity([publisher], Account, entityToDuplicate, userContext);\r\n  }\r\n}\r\n","import { orchestrator } from 'satcheljs';\r\nimport { Log } from '../../../../../logging/src';\r\nimport { onGridPageV2Initialized } from '../actions/gridActions';\r\nimport { setData, setEntity, setQuery } from '../mutatorActions';\r\nimport { getStore } from '../store/store';\r\n\r\norchestrator(onGridPageV2Initialized, ({ data, entity, query }) => {\r\n  const store = getStore();\r\n  let initialize = false;\r\n\r\n  if (query && store.query !== query) {\r\n    setQuery(query);\r\n    initialize = true;\r\n  }\r\n\r\n  if (store.entity !== entity) {\r\n    initialize = true;\r\n    setEntity(entity);\r\n  }\r\n\r\n  if (JSON.stringify(store.data) !== JSON.stringify(data)) {\r\n    setData(data);\r\n    initialize = true;\r\n  }\r\n\r\n  if (initialize) {\r\n    Log.debug('onGridPageV2Initialized');\r\n  }\r\n});\r\n","import React from 'react';\r\nimport { InjectedIntlProps } from 'react-intl';\r\nimport { LifeCycleStatus, Model, PopupType } from '../../../@data';\r\nimport AppMessages from '../../../App.messages';\r\nimport { PopupCard } from '../../../components/Popup';\r\nimport { injectIntlAndObserver } from '../../../utils';\r\nimport { onChangeItemsStatus } from '../@data/actions/commandBarActions';\r\nimport { setDialogType } from '../@data/mutatorActions';\r\nimport { getStore } from '../@data/store/store';\r\nimport { IDestructiveDialogLabelsProps } from '../GridV2.types';\r\n\r\nexport interface IDeactivateConfirmationDialogProps extends InjectedIntlProps {\r\n  deactivateLabels?: IDestructiveDialogLabelsProps;\r\n  setData?: (data?: Model[]) => void;\r\n  data: Model[];\r\n  // tslint:disable-next-line: no-any\r\n  selectedItems: any[];\r\n  onItemsStatusChanged?: (items?: Model[], status?: LifeCycleStatus) => void;\r\n  onDismiss?: () => void;\r\n}\r\n\r\nexport const DeactivateConfirmationDialog = injectIntlAndObserver(function DeactivateConfirmationDialogComp({\r\n  intl: { formatMessage },\r\n  deactivateLabels,\r\n  setData,\r\n  data,\r\n  selectedItems,\r\n  onItemsStatusChanged,\r\n  onDismiss,\r\n}: IDeactivateConfirmationDialogProps): JSX.Element | null {\r\n  const { dialogType } = getStore();\r\n\r\n  const onDialogDismissed = () => {\r\n    setDialogType(PopupType.None);\r\n    onDismiss?.();\r\n  };\r\n\r\n  const handleDeactivateButtonClick = () => {\r\n    onChangeItemsStatus(selectedItems, LifeCycleStatus.Inactive, data, formatMessage, setData, onItemsStatusChanged);\r\n    setDialogType(PopupType.None);\r\n  };\r\n\r\n  return (\r\n    <PopupCard\r\n      isShown={dialogType === PopupType.DeactivateConfirmation}\r\n      popUpTitle={formatMessage(deactivateLabels ? deactivateLabels.title : AppMessages.deactivateGenericTitle)}\r\n      popUpDescription={deactivateLabels?.description ? formatMessage(deactivateLabels.description) : undefined}\r\n      onPopupDismiss={onDialogDismissed}\r\n      onPrimaryButtonClick={handleDeactivateButtonClick}\r\n      onSecondaryButtonClick={onDialogDismissed}\r\n      primaryButtonAriaLabel={formatMessage(AppMessages.deactivate)}\r\n      secondaryButtonAriaLabel={formatMessage(AppMessages.cancel)}\r\n    />\r\n  );\r\n});\r\n","import React from 'react';\r\nimport { InjectedIntlProps } from 'react-intl';\r\nimport { Model, PopupType } from '../../../@data';\r\nimport AppMessages from '../../../App.messages';\r\nimport { PopupCard } from '../../../components/Popup';\r\nimport { injectIntlAndObserver } from '../../../utils';\r\nimport { onDeleteItem } from '../@data/actions/commandBarActions';\r\nimport { setDialogType } from '../@data/mutatorActions';\r\nimport { getStore } from '../@data/store/store';\r\nimport { IDestructiveDialogLabelsProps } from '../GridV2.types';\r\n\r\nexport interface IDeleteConfirmationDialogProps extends InjectedIntlProps {\r\n  deleteLabels?: IDestructiveDialogLabelsProps;\r\n  setData?: (data?: Model[]) => void;\r\n  data: Model[];\r\n  selectedItems: Model[];\r\n  preDeleteAction?: (items: Model[]) => void;\r\n  deleteAction?: (items: Model[]) => void;\r\n  postDeleteAction?: (items: Model[]) => void;\r\n}\r\n\r\nexport const DeleteConfirmationDialog = injectIntlAndObserver(function DeleteConfirmationDialogComp({\r\n  intl: { formatMessage },\r\n  deleteLabels,\r\n  setData,\r\n  data,\r\n  selectedItems,\r\n  preDeleteAction,\r\n  deleteAction,\r\n  postDeleteAction,\r\n}: IDeleteConfirmationDialogProps): JSX.Element | null {\r\n  const { dialogType } = getStore();\r\n\r\n  const onDialogDismissed = () => setDialogType(PopupType.None);\r\n\r\n  const handleDeleteButtonClick = () => {\r\n    onDeleteItem(selectedItems[0], data, formatMessage, setData, preDeleteAction, deleteAction, postDeleteAction);\r\n    onDialogDismissed();\r\n  };\r\n\r\n  return (\r\n    <PopupCard\r\n      isShown={dialogType === PopupType.DeleteConfirmation}\r\n      popUpTitle={formatMessage(deleteLabels ? deleteLabels.title : AppMessages.deleteGenericTitle)}\r\n      popUpDescription={deleteLabels?.description ? formatMessage(deleteLabels.description) : undefined}\r\n      onPopupDismiss={onDialogDismissed}\r\n      onPrimaryButtonClick={handleDeleteButtonClick}\r\n      onSecondaryButtonClick={onDialogDismissed}\r\n      primaryButtonAriaLabel={formatMessage(AppMessages.delete)}\r\n      secondaryButtonAriaLabel={formatMessage(AppMessages.cancel)}\r\n    />\r\n  );\r\n});\r\n","import { Checkbox, DefaultButton, List, mergeStyleSets, Panel, PanelType, PrimaryButton } from '@fluentui/react';\r\nimport React from 'react';\r\nimport { InjectedIntlProps } from 'react-intl';\r\nimport { CustomPanelType, isTythonSelfServeUser } from '../../../@data';\r\nimport AppMessages from '../../../App.messages';\r\nimport { IconTooltip } from '../../../components/IconTooltip/IconTooltip';\r\nimport { APP_NAME_NEW, APP_NAME_PUBCENTER } from '../../../constants/AppConstants';\r\nimport { injectIntlAndObserver } from '../../../utils';\r\nimport { setPanelType } from '../@data/mutatorActions';\r\nimport { getStore } from '../@data/store/store';\r\nimport messages from '../GridV2.messages';\r\nimport { getClassNames } from '../GridV2.styles';\r\nimport { IColumnVisibilityMapping, IGridV2Column } from '../GridV2.types';\r\n\r\nexport interface IModifyColumnsPanelProps extends InjectedIntlProps {\r\n  columns: IGridV2Column[];\r\n  hideDescription?: boolean;\r\n  changeColumnsVisibility: (changeColumnsVisibility: IColumnVisibilityMapping[]) => void;\r\n}\r\n\r\nexport const ModifyColumnsPanel = injectIntlAndObserver(function ModifyColumnsPanelComponent({\r\n  intl,\r\n  columns,\r\n  hideDescription,\r\n  changeColumnsVisibility,\r\n}: IModifyColumnsPanelProps) {\r\n  const classNames = mergeStyleSets(getClassNames());\r\n\r\n  const { formatMessage } = intl;\r\n  const columnVisibilityMappings: IColumnVisibilityMapping[] = [];\r\n  const { panelType } = getStore();\r\n\r\n  const columnVisibilityChange = (column: IGridV2Column, value?: boolean) => {\r\n    columnVisibilityMappings.push({ columnKey: column.key, isVisible: !!value });\r\n  };\r\n\r\n  const onModifyColumnsPanelHide = () => setPanelType(CustomPanelType.None);\r\n\r\n  const handleModifyColumnsClicked = () => {\r\n    changeColumnsVisibility(columnVisibilityMappings);\r\n    onModifyColumnsPanelHide();\r\n  };\r\n\r\n  return (\r\n    <Panel\r\n      isOpen={panelType === CustomPanelType.ModifyColumns}\r\n      type={PanelType.smallFixedFar}\r\n      isLightDismiss\r\n      onDismiss={onModifyColumnsPanelHide}\r\n      headerText={formatMessage(AppMessages.modifyColumns)}\r\n      closeButtonAriaLabel={formatMessage(AppMessages.panelCloseButtonAriaDesc)}\r\n      styles={classNames.subComponentStyles.modifyColumnPanel}\r\n      isFooterAtBottom={true}\r\n      onRenderFooterContent={() => {\r\n        return (\r\n          <div className={classNames.panelButton}>\r\n            <PrimaryButton\r\n              onClick={handleModifyColumnsClicked}\r\n              text={formatMessage(AppMessages.updateColumns)}\r\n              ariaDescription={formatMessage(messages.modifyColumnsPanelApplyButtonAriaDesc)}\r\n            />\r\n            <DefaultButton onClick={onModifyColumnsPanelHide} text={formatMessage(AppMessages.cancel)} />\r\n          </div>\r\n        );\r\n      }}\r\n    >\r\n      {!hideDescription && (\r\n        <span className={classNames.modifyColumnDescription}>\r\n          {formatMessage(AppMessages.modifyColumnsDescription, { appName: isTythonSelfServeUser() ? APP_NAME_NEW : APP_NAME_PUBCENTER })}\r\n        </span>\r\n      )}\r\n      <List\r\n        items={columns}\r\n        onRenderCell={(column: IGridV2Column) => {\r\n          return (\r\n            <div className={classNames.columnCheckboxWrapper}>\r\n              <Checkbox\r\n                label={column.name}\r\n                defaultChecked={column.isVisible}\r\n                onChange={(_, value) => columnVisibilityChange(column, value)}\r\n                disabled={column.isShowingDisabled}\r\n                styles={classNames.subComponentStyles.columnCheckbox}\r\n              />\r\n              {column.incompatibleProps?.isIncompatible && (\r\n                <div className={classNames.columnTooltip}>\r\n                  <IconTooltip tooltipMessage={column.incompatibleProps.incompatibleWontMessage || ''} iconName={'warning'} />\r\n                </div>\r\n              )}\r\n            </div>\r\n          );\r\n        }}\r\n      />\r\n    </Panel>\r\n  );\r\n});\r\n","import { IStyleFunctionOrObject } from '@fluentui/merge-styles';\r\nimport { getTheme, IButtonStyles, ICommandBarStyleProps, ICommandBarStyles } from '@fluentui/react';\r\nimport { IPubCenterFonts, IPubcenterPalette, IPubcenterSpacing } from '../../../../../theme';\r\n\r\nexport const getCustomCommandBarStyles = (\r\n  itemsSelected: boolean,\r\n  itemsCount: number\r\n): IStyleFunctionOrObject<ICommandBarStyleProps, ICommandBarStyles> => {\r\n  const theme = getTheme();\r\n  const palette = theme.palette as IPubcenterPalette;\r\n  const spacing = theme.spacing as IPubcenterSpacing;\r\n\r\n  const overflowSetStyles = {\r\n    backgroundColor: palette.white,\r\n    gridGap: spacing.size4,\r\n  };\r\n\r\n  const styles = {\r\n    root: {\r\n      backgroundColor: palette.white,\r\n      alignItems: 'center',\r\n      height: spacing.size50,\r\n      padding: '0',\r\n      [`& .ms-OverflowSet-item:nth-child(${itemsCount})`]: {\r\n        display: 'flex',\r\n        flexGrow: itemsSelected ? 0 : 1,\r\n      },\r\n    },\r\n    primarySet: {\r\n      ...overflowSetStyles,\r\n    },\r\n    secondarySet: {\r\n      ...overflowSetStyles,\r\n    },\r\n  };\r\n\r\n  if (itemsCount === 0 && !itemsSelected) {\r\n    styles.root['justify-content'] = 'flex-end';\r\n    styles.primarySet['flex-grow'] = 0;\r\n  }\r\n\r\n  if (itemsSelected) {\r\n    styles.root.backgroundColor = palette.themePrimary;\r\n    styles.primarySet.backgroundColor = palette.themePrimary;\r\n    styles.secondarySet.backgroundColor = palette.themePrimary;\r\n    /* tslint:disable:no-string-literal */\r\n    styles.secondarySet['height'] = '100%';\r\n  }\r\n\r\n  return styles;\r\n};\r\n\r\nexport const getButtonStyles = (): IButtonStyles => {\r\n  const theme = getTheme();\r\n  const { semanticColors: s, palette: p } = theme;\r\n  const { size14 } = theme.fonts as IPubCenterFonts;\r\n\r\n  return {\r\n    root: {\r\n      backgroundColor: s.primaryButtonBackground,\r\n      color: s.primaryButtonText,\r\n      ...size14,\r\n      selectors: {\r\n        '&:focus': {\r\n          border: 'none',\r\n          outlineColor: p.white,\r\n          backgroundColor: 'black',\r\n        },\r\n      }, // UM_TODO: focus box is black, not getting reflected\r\n    },\r\n    rootHovered: {\r\n      backgroundColor: s.primaryButtonBackgroundHovered,\r\n      color: s.primaryButtonTextHovered,\r\n    },\r\n    rootPressed: {\r\n      backgroundColor: s.primaryButtonBackgroundPressed,\r\n      color: s.primaryButtonTextPressed,\r\n    },\r\n    rootFocused: {\r\n      backgroundColor: s.primaryButtonBackgroundHovered,\r\n      color: s.primaryButtonTextHovered,\r\n    },\r\n    rootExpandedHovered: {\r\n      backgroundColor: s.primaryButtonBackground,\r\n      color: s.primaryButtonText,\r\n    },\r\n    rootHasMenu: {\r\n      backgroundColor: s.primaryButtonBackground,\r\n      color: s.primaryButtonText,\r\n    },\r\n    icon: {\r\n      backgroundColor: s.primaryButtonBackground,\r\n      color: s.primaryButtonText,\r\n    },\r\n    iconHovered: {\r\n      backgroundColor: s.primaryButtonBackgroundHovered,\r\n      color: s.primaryButtonTextHovered,\r\n    },\r\n    iconExpanded: {\r\n      backgroundColor: s.primaryButtonBackground,\r\n      color: s.primaryButtonText,\r\n    },\r\n    iconExpandedHovered: {\r\n      backgroundColor: s.primaryButtonBackground,\r\n      color: s.primaryButtonText,\r\n    },\r\n    iconPressed: {\r\n      backgroundColor: s.primaryButtonBackgroundPressed,\r\n      color: s.primaryButtonTextPressed,\r\n    },\r\n    menuIcon: {\r\n      backgroundColor: s.primaryButtonBackground,\r\n      color: s.primaryButtonText,\r\n    },\r\n    menuIconHovered: {\r\n      backgroundColor: s.primaryButtonBackgroundHovered,\r\n      color: s.primaryButtonTextHovered,\r\n    },\r\n    menuIconPressed: {\r\n      backgroundColor: s.primaryButtonBackgroundPressed,\r\n      color: s.primaryButtonTextPressed,\r\n    },\r\n    menuIconExpandedHovered: {\r\n      backgroundColor: s.primaryButtonBackground,\r\n      color: s.primaryButtonText,\r\n    },\r\n    menuIconExpanded: {\r\n      backgroundColor: s.primaryButtonBackground,\r\n      color: s.primaryButtonText,\r\n    },\r\n  };\r\n};\r\n\r\nexport const getCountMenuStyles = () => {\r\n  const theme = getTheme();\r\n  const palette = theme.palette as IPubcenterPalette;\r\n  const spacing = theme.spacing as IPubcenterSpacing;\r\n\r\n  return {\r\n    borderRight: `1px solid ${palette.white}`,\r\n    margin: `${spacing.size10} 0`,\r\n    padding: `${spacing.size4} ${spacing.size10}`,\r\n    color: palette.white,\r\n  };\r\n};\r\n","import { Callout, IconButton, SearchBox } from '@fluentui/react';\r\nimport * as React from 'react';\r\nimport { getStore } from '../../../GridPageV2/@data/store/store';\r\nimport { setIsSearchCalloutVisible } from '../../@data/mutatorActions';\r\n\r\ninterface ISearchBoxCallOut {\r\n  placeHolder?: string;\r\n  handleSearch?: (val: string) => void;\r\n}\r\n\r\nexport const SearchBoxCallOut = function SearchBoxCallOutComponent(props: ISearchBoxCallOut) {\r\n  const { placeHolder, handleSearch } = props;\r\n  const { searchWord, isSearchCalloutVisible } = getStore();\r\n\r\n  return (\r\n    <>\r\n      <IconButton\r\n        id={'gridSearchIcon'}\r\n        onClick={() => setIsSearchCalloutVisible(!isSearchCalloutVisible)}\r\n        iconProps={{ iconName: 'Search' }}\r\n      />\r\n      {isSearchCalloutVisible && (\r\n        <Callout\r\n          style={{\r\n            padding: '10px 15px',\r\n          }}\r\n          target={'#gridSearchIcon'}\r\n          isBeakVisible={false}\r\n          onDismiss={() => setIsSearchCalloutVisible(false)}\r\n          directionalHint={5}\r\n        >\r\n          <SearchBox\r\n            value={searchWord}\r\n            placeholder={placeHolder ? placeHolder : ''}\r\n            onChange={(_, val: string) => handleSearch?.(val)}\r\n            onClear={() => handleSearch?.('')}\r\n            ariaLabel={placeHolder}\r\n            autoFocus={isSearchCalloutVisible}\r\n          />\r\n        </Callout>\r\n      )}\r\n    </>\r\n  );\r\n};\r\n","import {\r\n  CommandBarButton,\r\n  IButtonProps,\r\n  ICommandBarItemProps,\r\n  IComponentAs,\r\n  IComponentAsProps,\r\n  IContextualMenuProps,\r\n  PrimaryButton,\r\n  SearchBox,\r\n} from '@fluentui/react';\r\nimport React from 'react';\r\nimport { CustomPanelType, LifeCycleStatus, PopupType, PublisherSearch, getAppStore } from '../../../../../@data';\r\nimport { hasCreateAccess, hasDeleteAccess, hasUpdateAccess } from '../../../../../@data/services/UserRoleService';\r\nimport { getAccessPermission } from '../../../../../@data/utils/getAccessPermission';\r\nimport { default as AppMessages, default as appMessages } from '../../../../../App.messages';\r\nimport { useWindowSize } from '../../../../../hooks';\r\nimport { getStore as getWindowStore } from '../../../../../hooks/useWindowSize/store/store';\r\nimport { onChangeItemsStatus, onDownloadButtonClicked, onDuplicateItem } from '../../../@data/actions/commandBarActions';\r\nimport '../../../@data/mutatorActions';\r\nimport { setDialogType, setFilterMenuCalloutStatus, setPanelType } from '../../../@data/mutatorActions';\r\nimport '../../../@data/orchestrators';\r\nimport { getStore } from '../../../@data/store/store';\r\nimport messages from '../../../GridV2.messages';\r\nimport { CommandBarActions, DownloadOption, GridSelectionMode, IDataGridCommandBarItemProps } from '../../../GridV2.types';\r\nimport { ICustomCommandBarProps } from '../../../components/CustomCommandBar/CustomCommandBar';\r\nimport { SearchBoxCallOut } from '../../SearchBoxCallOut/SearchBoxCallOut';\r\nimport { getButtonStyles, getCountMenuStyles } from '../CustomCommandBar.styles';\r\n\r\nconst { windowStoreSerializer } = useWindowSize();\r\n\r\nexport function getDefaultCommandBarItems(props: ICustomCommandBarProps): IDataGridCommandBarItemProps[] {\r\n  if (!props.commandBarProps) {\r\n    return [];\r\n  }\r\n  const { isGridReady, intl, history, match, columns, data, setData, entity, commandBarProps, handleSearch } = props;\r\n  const { primaryButtonLabel, searchBoxPlaceholder, primaryButtonUrl, onDuplicateItems, onItemsStatusChanged } = commandBarProps;\r\n  const accessPermission = getAccessPermission(entity);\r\n  const { formatMessage } = intl;\r\n\r\n  const commandBarItems: IDataGridCommandBarItemProps[] = [];\r\n  const { isWindowSmallSize, isWindowExtraSmallSize } = windowStoreSerializer(getWindowStore());\r\n\r\n  const downloadItems = (type: DownloadOption) => {\r\n    const entityInstance = new entity();\r\n    const publisherName = getAppStore().publisher?.name ?? '';\r\n\r\n    const filename = `${publisherName}-${entityInstance.className}.csv`;\r\n    onDownloadButtonClicked(formatMessage, data || [], filename, columns, type);\r\n  };\r\n  const menuProps: IContextualMenuProps = {\r\n    shouldFocusOnMount: true,\r\n    items: [\r\n      {\r\n        key: 'selected',\r\n        text: formatMessage(appMessages.downloadSelected),\r\n        onClick: () => downloadItems(DownloadOption.selection),\r\n        ariaDescription: formatMessage(appMessages.downloadSelectedCmdBtnAriaDesc),\r\n        disabled: getStore().selectedItems.length === 0,\r\n      },\r\n      {\r\n        key: 'page',\r\n        text: formatMessage(appMessages.downloadPage),\r\n        onClick: () => downloadItems(DownloadOption.page),\r\n        ariaDescribedBy: formatMessage(appMessages.downloadPageCmdBtnAriaDesc),\r\n      },\r\n      {\r\n        key: 'all',\r\n        text: formatMessage(appMessages.downloadAll),\r\n        onClick: () => downloadItems(DownloadOption.all),\r\n        ariaDescribedBy: formatMessage(appMessages.downloadAllCmdBtnAriaDesc),\r\n      },\r\n    ],\r\n  };\r\n\r\n  if (primaryButtonLabel) {\r\n    commandBarItems.push({\r\n      key: CommandBarActions.new,\r\n      name: formatMessage(primaryButtonLabel),\r\n      commandBarButtonAs: () => (\r\n        <PrimaryButton\r\n          iconProps={{ iconName: 'Add' }}\r\n          text={isWindowExtraSmallSize ? '' : formatMessage(primaryButtonLabel)}\r\n          onClick={() => {\r\n            history.push(primaryButtonUrl || `${match.url}/create`);\r\n          }}\r\n          disabled={!(isGridReady && hasCreateAccess(accessPermission))}\r\n          role=\"link\"\r\n        />\r\n      ),\r\n      iconProps: { iconName: 'Add' },\r\n      onClick: () => {\r\n        history.push(`${match.url}/create`);\r\n      },\r\n      disabled: !(isGridReady && hasCreateAccess(accessPermission)),\r\n      selectionModes: [GridSelectionMode.None],\r\n      ariaDescription: formatMessage(messages.createCmdbtnAriaDesc, { label: formatMessage(primaryButtonLabel) }),\r\n    });\r\n  }\r\n\r\n  if (handleSearch) {\r\n    commandBarItems.push({\r\n      key: CommandBarActions.searchBox,\r\n      commandBarButtonAs: () => {\r\n        return isWindowSmallSize || isWindowExtraSmallSize ? (\r\n          <SearchBoxCallOut placeHolder={searchBoxPlaceholder ? formatMessage(searchBoxPlaceholder) : ''} handleSearch={handleSearch} />\r\n        ) : (\r\n          <SearchBox\r\n            value={getStore().searchWord}\r\n            placeholder={searchBoxPlaceholder ? formatMessage(searchBoxPlaceholder) : ''}\r\n            onChange={(_, val: string) => handleSearch?.(val)}\r\n            onClear={() => handleSearch('')}\r\n            ariaLabel={formatMessage(messages.searchBoxPlaceholder)}\r\n            disabled={!isGridReady}\r\n          />\r\n        );\r\n      },\r\n      renderedInOverflow: false,\r\n      selectionModes: [GridSelectionMode.None],\r\n    });\r\n  }\r\n\r\n  commandBarItems.push(\r\n    ...[\r\n      {\r\n        key: 'count',\r\n        commandBarButtonAs: () => {\r\n          const { selectedItems } = getStore();\r\n          return <div style={getCountMenuStyles()}>{formatMessage(AppMessages.selectedCount, { count: selectedItems.length })}</div>;\r\n        },\r\n        selectionModes: [GridSelectionMode.Single, GridSelectionMode.Multiple],\r\n      },\r\n      {\r\n        id: 'addFilterButton',\r\n        key: CommandBarActions.addFilter,\r\n        name: formatMessage(appMessages.addFilter),\r\n        iconProps: { iconName: 'Filter' },\r\n        iconOnly: isWindowSmallSize || isWindowExtraSmallSize,\r\n        onClick: () => setFilterMenuCalloutStatus(true),\r\n        commandBarButtonAs: addFilterButton,\r\n        ariaDescription: formatMessage(messages.addFilterCmdBtnAriaDesc),\r\n        buttonStyles: getStore().selectedItems.length > 0 ? getButtonStyles() : undefined,\r\n        disabled: !isGridReady,\r\n        selectionModes: [GridSelectionMode.None],\r\n      },\r\n      {\r\n        key: CommandBarActions.edit,\r\n        name: formatMessage(appMessages.edit),\r\n        iconProps: {\r\n          iconName: 'Edit',\r\n        },\r\n        ariaDescription: formatMessage(messages.editCmdBtnAriaDesc),\r\n        onClick: () => {\r\n          const { selectedItems } = getStore();\r\n          if (selectedItems.length > 0) {\r\n            if (selectedItems[0].id) {\r\n              history.push(`${match.url}/edit/${selectedItems[0].id}`);\r\n            } else {\r\n              history.push(`${match.url}/edit`);\r\n            }\r\n          }\r\n        },\r\n        /* In case of Publisher, edit is disabled if publisher is inactive */\r\n        selectionStatus: new entity() instanceof PublisherSearch ? LifeCycleStatus.Active : undefined,\r\n        disabled: !hasUpdateAccess(accessPermission),\r\n        buttonStyles: getStore().selectedItems.length > 0 ? getButtonStyles() : undefined,\r\n        selectionModes: [GridSelectionMode.Single],\r\n      },\r\n      {\r\n        key: CommandBarActions.delete,\r\n        name: formatMessage(appMessages.delete),\r\n        iconProps: {\r\n          iconName: 'Delete',\r\n        },\r\n        ariaDescription: formatMessage(messages.deleteCmdBtnAriaDesc),\r\n        onClick: () => setDialogType(PopupType.DeleteConfirmation),\r\n        buttonStyles: getStore().selectedItems.length > 0 ? getButtonStyles() : undefined,\r\n        disabled: !hasDeleteAccess(accessPermission),\r\n        selectionModes: [GridSelectionMode.Single],\r\n      },\r\n      {\r\n        key: CommandBarActions.activate,\r\n        name: formatMessage(appMessages.activate),\r\n        iconProps: {\r\n          iconName: 'ActivateOrders',\r\n        },\r\n        ariaDescription: formatMessage(messages.activateCmdBtnAriaDesc),\r\n        selectionStatus: LifeCycleStatus.Inactive,\r\n        onClick: () => {\r\n          const { selectedItems, data: dataStore } = getStore();\r\n          onChangeItemsStatus(selectedItems, LifeCycleStatus.Active, dataStore, formatMessage, setData, onItemsStatusChanged);\r\n        },\r\n        buttonStyles: getStore().selectedItems.length > 0 ? getButtonStyles() : undefined,\r\n        disabled: !hasUpdateAccess(accessPermission),\r\n        selectionModes: entity.name === 'Account' ? [GridSelectionMode.Single] : [GridSelectionMode.Single, GridSelectionMode.Multiple],\r\n      },\r\n      {\r\n        key: CommandBarActions.deactivate,\r\n        name: formatMessage(appMessages.deactivate),\r\n        iconProps: {\r\n          iconName: 'DeactivateOrders',\r\n        },\r\n        ariaDescription: formatMessage(messages.deactivateCmdBtnAriaDesc),\r\n        onClick: () => setDialogType(PopupType.DeactivateConfirmation),\r\n        buttonStyles: getStore().selectedItems.length > 0 ? getButtonStyles() : undefined,\r\n        selectionStatus: LifeCycleStatus.Active,\r\n        disabled: !hasUpdateAccess(accessPermission),\r\n        selectionModes: entity.name === 'Account' ? [GridSelectionMode.Single] : [GridSelectionMode.Single, GridSelectionMode.Multiple],\r\n      },\r\n      {\r\n        key: CommandBarActions.duplicate,\r\n        name: formatMessage(appMessages.duplicate),\r\n        iconProps: {\r\n          iconName: 'Copy',\r\n        },\r\n        ariaDescription: formatMessage(messages.copyCmdBtnAriaDesc),\r\n        onClick: () => {\r\n          const { selectedItems } = getStore();\r\n          if (selectedItems.length === 1) {\r\n            onDuplicateItem(selectedItems[0], data, formatMessage, setData, onDuplicateItems);\r\n          }\r\n        },\r\n        buttonStyles: getStore().selectedItems.length > 0 ? getButtonStyles() : undefined,\r\n        disabled: !hasCreateAccess(accessPermission),\r\n        selectionModes: [GridSelectionMode.Single],\r\n      },\r\n      {\r\n        key: CommandBarActions.download,\r\n        name: formatMessage(appMessages.download),\r\n        iconProps: {\r\n          iconName: 'Download',\r\n        },\r\n        ariaDescription: formatMessage(appMessages.downloadCmdBtnAriaDesc),\r\n        subMenuProps: menuProps,\r\n        disabled: !isGridReady,\r\n        buttonStyles: getStore().selectedItems.length > 0 ? getButtonStyles() : undefined,\r\n        selectionModes: [GridSelectionMode.None],\r\n      },\r\n      {\r\n        key: CommandBarActions.modifyColumns,\r\n        name: formatMessage(appMessages.modifyColumns),\r\n        iconProps: {\r\n          iconName: 'TripleColumnEdit',\r\n        },\r\n        ariaDescription: formatMessage(messages.modifyColumnsCmdBtnAriaDesc),\r\n        onClick: () => setPanelType(CustomPanelType.ModifyColumns),\r\n        buttonStyles: getStore().selectedItems.length > 0 ? getButtonStyles() : undefined,\r\n        selectionModes: [GridSelectionMode.None],\r\n        disabled: !isGridReady,\r\n      },\r\n    ]\r\n  );\r\n\r\n  return commandBarItems;\r\n}\r\n\r\nexport const addFilterButton: IComponentAs<ICommandBarItemProps> = (commandBarItemProps: IComponentAsProps<ICommandBarItemProps>) => {\r\n  const { ...buttonProps } = commandBarItemProps;\r\n  const castButtonProps = buttonProps as IButtonProps;\r\n\r\n  return (\r\n    <CommandBarButton\r\n      {...castButtonProps}\r\n      aria-haspopup={true}\r\n      aria-expanded={document.body.contains(document.getElementById('filterMenuDialog'))}\r\n    />\r\n  );\r\n};\r\n","import { Model } from '../../../../../@data';\r\nimport AppMessages from '../../../../../App.messages';\r\nimport { getStore } from '../../../@data/store/store';\r\nimport {\r\n  Direction,\r\n  GridSelectionMode,\r\n  IDataGridCommandBarItemProps,\r\n  IDataGridCommandBarProps,\r\n  IGridPageCommandBarPlacement,\r\n} from '../../../GridV2.types';\r\nimport { ICustomCommandBarProps } from '../../../components/CustomCommandBar/CustomCommandBar';\r\nimport { getButtonStyles } from '../CustomCommandBar.styles';\r\nimport { getDefaultCommandBarFarItems } from './getDefaultCommandBarFarItems';\r\nimport { getDefaultCommandBarItems } from './getDefaultCommandBarItems';\r\nimport { getSelectionMode } from './getSelectionMode';\r\n\r\nexport function buildCommandBarProps(props: ICustomCommandBarProps): IDataGridCommandBarProps {\r\n  const { includeActions, includeFarActions, excludeActions, getCustomCommandBarItems } = props.commandBarProps || {};\r\n\r\n  const customCommandBarItems = getCustomCommandBarItems?.(() => (getStore().selectedItems as Model[]) || []);\r\n  const defaultCommandBarItems = getDefaultCommandBarItems(props);\r\n  const defaultFarCommandBarItems = getDefaultCommandBarFarItems(props);\r\n\r\n  let items: IDataGridCommandBarItemProps[] = [];\r\n  let farItems: IDataGridCommandBarItemProps[] = [];\r\n  const overflowButtonProps = { ariaLabel: props.intl.formatMessage(AppMessages.moreOptionsButtonAriaLabel) };\r\n\r\n  // This will only include the given list of actions from defaultCommandBarItems\r\n  includeActions?.forEach((includeKey) => {\r\n    items.push(...defaultCommandBarItems.filter((item) => item.key === includeKey));\r\n  });\r\n\r\n  // This will only include the given list of actions from defaultCommandBarItems\r\n  includeFarActions?.forEach((includeKey) => {\r\n    items.push(...defaultCommandBarItems.filter((item) => item.key === includeKey));\r\n    farItems.push(...defaultFarCommandBarItems.filter((item) => item.key === includeKey));\r\n  });\r\n\r\n  // This will exclude the given actions from defaultCommandBarItems\r\n  excludeActions?.forEach((excludeKey) => {\r\n    items = items.filter((item) => item.key !== excludeKey);\r\n    farItems = farItems.filter((item) => item.key !== excludeKey);\r\n  });\r\n\r\n  customCommandBarItems?.forEach((customItem) => {\r\n    const placement = customItem.placement;\r\n    if (!customItem.buttonStyles) {\r\n      customItem.buttonStyles = getStore().selectedItems.length > 0 ? getButtonStyles() : undefined;\r\n    }\r\n\r\n    // If placement details are given, then insert at specified placement\r\n    if (placement) {\r\n      items = insertCommandBarItem(items, customItem, placement);\r\n    } else {\r\n      // no placement details provided insert at the end of left sided command bar items\r\n      items.push(customItem);\r\n    }\r\n  });\r\n\r\n  const countItem = defaultCommandBarItems.find((item) => item.key === 'count');\r\n  if (countItem) {\r\n    items.unshift(countItem);\r\n  }\r\n  const cancelItem = defaultFarCommandBarItems.find((item) => item.key === 'Cancel');\r\n  if (cancelItem) {\r\n    farItems.push(cancelItem);\r\n  }\r\n\r\n  const commandBarProps: IDataGridCommandBarProps = { items: items, farItems: farItems, overflowButtonProps: overflowButtonProps };\r\n\r\n  const mode = getSelectionMode(getStore().selectedItems.length);\r\n  commandBarProps.items = getItemsBasedOnModeAndStatus(commandBarProps.items, mode, getStore().selectedItems);\r\n  commandBarProps.farItems = getItemsBasedOnModeAndStatus(commandBarProps.farItems || [], mode, getStore().selectedItems) || [];\r\n\r\n  return commandBarProps;\r\n}\r\n\r\nfunction insertCommandBarItem(\r\n  items: IDataGridCommandBarItemProps[],\r\n  customItem: IDataGridCommandBarItemProps,\r\n  placement: IGridPageCommandBarPlacement\r\n): IDataGridCommandBarItemProps[] {\r\n  // If key not specificed, insert based on direction either before or after rest of the items\r\n  if (!placement.key) {\r\n    switch (placement.direction) {\r\n      case Direction.before:\r\n        items.unshift(customItem);\r\n        break;\r\n      default:\r\n      case Direction.after:\r\n        items.push(customItem);\r\n        break;\r\n    }\r\n  } else {\r\n    const keyItem = items.find((item) => item.key === placement.key);\r\n    let indextoAdd = 0;\r\n\r\n    if (keyItem) {\r\n      const keyPosition = items.findIndex((item) => item === keyItem);\r\n      indextoAdd = keyPosition;\r\n      switch (placement.direction) {\r\n        case Direction.before:\r\n          if (keyPosition === 0) {\r\n            indextoAdd = 0;\r\n          }\r\n          break;\r\n        default:\r\n        case Direction.after:\r\n          indextoAdd++;\r\n          break;\r\n      }\r\n      items.splice(indextoAdd, 0, customItem);\r\n    }\r\n  }\r\n\r\n  return items;\r\n}\r\n\r\nfunction getItemsBasedOnModeAndStatus(items: IDataGridCommandBarItemProps[], mode: GridSelectionMode, selectedItems?: Model[]) {\r\n  const hasSelection = (item) => !item.selectionModes || item.selectionModes.includes(mode);\r\n  const hasStatusSelection = (item) =>\r\n    !item.selectionStatus || (selectedItems && selectedItems.some((dataRow) => dataRow.status === item.selectionStatus));\r\n  return items.filter((item) => hasSelection(item) && hasStatusSelection(item));\r\n}\r\n","import { IContextualMenuProps } from '@fluentui/react';\r\nimport { getAppStore } from '../../../../../@data';\r\nimport AppMessages, { default as appMessages } from '../../../../../App.messages';\r\nimport { onDownloadButtonClicked } from '../../../@data/actions/commandBarActions';\r\nimport '../../../@data/mutatorActions';\r\nimport '../../../@data/orchestrators';\r\nimport { getStore } from '../../../@data/store/store';\r\nimport { CommandBarActions, DownloadOption, GridSelectionMode, IDataGridCommandBarItemProps } from '../../../GridV2.types';\r\nimport { ICustomCommandBarProps } from '../../../components/CustomCommandBar/CustomCommandBar';\r\nimport { getButtonStyles } from '../CustomCommandBar.styles';\r\n\r\nexport function getDefaultCommandBarFarItems(props: ICustomCommandBarProps): IDataGridCommandBarItemProps[] {\r\n  if (!props.commandBarProps) {\r\n    return [];\r\n  }\r\n  const { formatMessage } = props.intl;\r\n  const { isGridReady, columns, entity } = props;\r\n\r\n  const farItems: IDataGridCommandBarItemProps[] = [];\r\n\r\n  const downloadItems = (type: DownloadOption) => {\r\n    const entityInstance = new entity();\r\n    const publisherName = getAppStore().publisher?.name ?? '';\r\n\r\n    const filename = `${publisherName}-${entityInstance.className}.csv`;\r\n    onDownloadButtonClicked(formatMessage, getStore().data || [], filename, columns, type);\r\n  };\r\n  const downloadSubMenuProps: IContextualMenuProps = {\r\n    shouldFocusOnMount: true,\r\n    items: [\r\n      {\r\n        key: 'selected',\r\n        text: formatMessage(appMessages.downloadSelected),\r\n        onClick: () => downloadItems(DownloadOption.selection),\r\n        ariaDescription: formatMessage(appMessages.downloadSelectedCmdBtnAriaDesc),\r\n      },\r\n      {\r\n        key: 'page',\r\n        text: formatMessage(appMessages.downloadPage),\r\n        onClick: () => downloadItems(DownloadOption.page),\r\n        ariaDescribedBy: formatMessage(appMessages.downloadPageCmdBtnAriaDesc),\r\n      },\r\n      {\r\n        key: 'all',\r\n        text: formatMessage(appMessages.downloadAll),\r\n        onClick: () => downloadItems(DownloadOption.all),\r\n        ariaDescribedBy: formatMessage(appMessages.downloadAllCmdBtnAriaDesc),\r\n      },\r\n    ],\r\n  };\r\n\r\n  farItems.push(\r\n    ...[\r\n      {\r\n        id: 'CancelButton',\r\n        key: 'Cancel',\r\n        name: formatMessage(AppMessages.cancel),\r\n        iconProps: {\r\n          iconName: 'Cancel',\r\n        },\r\n        buttonStyles: getButtonStyles(),\r\n        onClick: () => props.cancelSelection(),\r\n        selectionModes: [GridSelectionMode.Single, GridSelectionMode.Multiple],\r\n      },\r\n      {\r\n        key: CommandBarActions.download,\r\n        name: formatMessage(appMessages.download),\r\n        iconProps: {\r\n          iconName: 'Download',\r\n        },\r\n        subMenuProps: downloadSubMenuProps,\r\n        ariaDescription: formatMessage(appMessages.downloadCmdBtnAriaDesc),\r\n        disabled: !isGridReady,\r\n        buttonStyles: getStore().selectedItems.length > 0 ? getButtonStyles() : undefined,\r\n        selectionModes: [GridSelectionMode.Single, GridSelectionMode.Multiple],\r\n      },\r\n    ]\r\n  );\r\n\r\n  return farItems;\r\n}\r\n","import { GridSelectionMode } from '../../../GridV2.types';\r\n\r\nexport function getSelectionMode(selectionCount: Number): GridSelectionMode {\r\n  switch (selectionCount) {\r\n    case 0:\r\n      return GridSelectionMode.None;\r\n    case 1:\r\n      return GridSelectionMode.Single;\r\n    default:\r\n      return GridSelectionMode.Multiple;\r\n  }\r\n}\r\n","import { CommandBar } from '@fluentui/react';\r\nimport React, { useEffect, useMemo, useRef } from 'react';\r\nimport { Model } from '../../../../@data';\r\nimport { GridFilter } from '../../../../components/GridFilter/GridFilter';\r\nimport { IRouterWithIntl, injectIntlAndObserver } from '../../../../utils';\r\nimport { setFilterMenuCalloutStatus } from '../../@data/mutatorActions';\r\nimport { getStore } from '../../@data/store/store';\r\nimport { IBuildCommandBarProps, IColumnVisibilityMapping, IDataGridCommandBarProps, IGridV2Column } from '../../GridV2.types';\r\nimport { DeactivateConfirmationDialog } from '../DeactivateConfirmationDialog';\r\nimport { DeleteConfirmationDialog } from '../DeleteConfirmationDialog';\r\nimport { ModifyColumnsPanel } from '../ModifyColumnsPanel';\r\nimport { getCustomCommandBarStyles } from './CustomCommandBar.styles';\r\nimport { buildCommandBarProps } from './utils';\r\n\r\nexport interface ICustomCommandBarProps extends IRouterWithIntl {\r\n  entity: new () => Model;\r\n  columns: IGridV2Column[];\r\n  commandBarProps?: IBuildCommandBarProps<Model>;\r\n  isGridReady?: boolean;\r\n  // tslint:disable-next-line: no-any\r\n  data: any[];\r\n  cancelSelection: () => void;\r\n  setData?: (data?: Model[]) => void;\r\n  handleSearch?: (value: string) => void;\r\n  filterMenuCalloutOpen?: boolean;\r\n  handleGridFilter: (filterConditions) => Model[];\r\n  changeColumnsVisibility: (columnsVisibility: IColumnVisibilityMapping[]) => void;\r\n}\r\n\r\nexport const CustomCommandBar = injectIntlAndObserver(function CustomCommandBarComponent(props: ICustomCommandBarProps): JSX.Element {\r\n  const commandBarRef = useRef(null);\r\n  const { selectedItems, isSearchCalloutVisible } = getStore();\r\n  const {\r\n    commandBarProps,\r\n    data,\r\n    setData,\r\n    isGridReady,\r\n    columns,\r\n    intl,\r\n    filterMenuCalloutOpen,\r\n    changeColumnsVisibility,\r\n    handleGridFilter,\r\n  } = props;\r\n  const {\r\n    filterItems,\r\n    deleteLabels,\r\n    deactivateLabels,\r\n    onDeactivateDialogDismiss,\r\n    onPreDeleteItems,\r\n    onDeleteItems,\r\n    onPostDeleteItems,\r\n    onItemsStatusChanged,\r\n    includeActions,\r\n    hideModifyColumnsDescription,\r\n  } = commandBarProps || {};\r\n  const commandBarItems: IDataGridCommandBarProps = useMemo(\r\n    () => buildCommandBarProps(props),\r\n    // eslint-disable-next-line react-hooks/exhaustive-deps\r\n    [selectedItems, columns, data, isSearchCalloutVisible, isGridReady]\r\n  );\r\n\r\n  /**\r\n   * to pass 1CS we would need add \"aria-busy\" attribute in the commandbar wrapper to enhance accessibility UI,\r\n   *  which fluentUI doesn't provide such mechanism for <CommandBar /> component\r\n   */\r\n  useEffect(() => {\r\n    if (commandBarRef.current) {\r\n      const commandBarWrapper = document.querySelectorAll('div[role=\"menubar\"]')?.[0];\r\n      if (commandBarWrapper && !commandBarWrapper.hasAttribute('aria-busy')) {\r\n        commandBarWrapper.setAttribute('aria-busy', 'true');\r\n      }\r\n    }\r\n    // eslint-disable-next-line react-hooks/exhaustive-deps\r\n  }, [commandBarRef.current]);\r\n\r\n  return commandBarItems ? (\r\n    <>\r\n      <CommandBar\r\n        {...commandBarItems}\r\n        styles={getCustomCommandBarStyles(!!selectedItems?.length, includeActions?.length || 0)}\r\n        componentRef={commandBarRef}\r\n        data-test-id=\"grid-command-bar\"\r\n      />\r\n\r\n      {filterItems && (\r\n        <GridFilter\r\n          intl={intl}\r\n          filterItems={filterItems || []}\r\n          onFilterMenuCalloutClose={() => setFilterMenuCalloutStatus(false)}\r\n          filterMenuCalloutOpen={filterMenuCalloutOpen}\r\n          onFilterApplied={handleGridFilter}\r\n        />\r\n      )}\r\n\r\n      <ModifyColumnsPanel\r\n        columns={columns}\r\n        changeColumnsVisibility={changeColumnsVisibility}\r\n        hideDescription={hideModifyColumnsDescription}\r\n      />\r\n      <DeleteConfirmationDialog\r\n        data={data}\r\n        setData={setData}\r\n        deleteLabels={deleteLabels}\r\n        selectedItems={selectedItems}\r\n        preDeleteAction={onPreDeleteItems}\r\n        deleteAction={onDeleteItems}\r\n        postDeleteAction={onPostDeleteItems}\r\n      />\r\n      <DeactivateConfirmationDialog\r\n        data={data}\r\n        setData={setData}\r\n        deactivateLabels={deactivateLabels}\r\n        selectedItems={selectedItems}\r\n        onItemsStatusChanged={onItemsStatusChanged}\r\n        onDismiss={onDeactivateDialogDismiss}\r\n      />\r\n    </>\r\n  ) : (\r\n    <></>\r\n  );\r\n});\r\n","import { useState } from 'react';\r\nimport { IGridV2Column, ISelectableRow } from '../GridV2.types';\r\n\r\nfunction flattenNestedObject(obj, parentKey = '') {\r\n  let result = {};\r\n\r\n  for (const key in obj) {\r\n    if (obj.hasOwnProperty(key)) {\r\n      const newKey = parentKey ? `${parentKey}.${key}` : key;\r\n\r\n      if (typeof obj[key] === 'object' && !Array.isArray(obj[key])) {\r\n        const nestedValues = flattenNestedObject(obj[key], newKey);\r\n        result = { ...result, ...nestedValues };\r\n      } else {\r\n        result[newKey] = obj[key];\r\n      }\r\n    }\r\n  }\r\n\r\n  return result;\r\n}\r\n\r\n// tslint:disable-next-line: no-any\r\nexport const useSearchableGrid = (columns: IGridV2Column[], items: any[], updateSearchWord?: (word: string) => void) => {\r\n  const [searchWord, setSearchWord] = useState('');\r\n\r\n  function handleSearch(value: string): ISelectableRow[] {\r\n    setSearchWord(value);\r\n    updateSearchWord?.(value);\r\n    const filteredItems = items.filter((item) => {\r\n      item = flattenNestedObject(item);\r\n\r\n      // if any column has a search function, then return true\r\n      if (columns.filter((col) => col.isVisible && col.searchFunction).some((col) => col?.searchFunction?.(item, value))) {\r\n        return true;\r\n      }\r\n\r\n      return Object.entries(item)\r\n        .map(([IKey, IValue]) => {\r\n          const column = columns.find((i) => i.key === IKey && i.isVisible);\r\n          return IValue && column?.isSearchable && String(IValue).toLowerCase().includes(value.toLowerCase());\r\n        })\r\n        .some(Boolean);\r\n    });\r\n\r\n    return filteredItems;\r\n  }\r\n\r\n  return { handleSearch, searchWord };\r\n};\r\n","import { Model } from '../../../@data';\r\nimport { FilterCondition } from '../../../@data/store/schema/enums/FilterCondition';\r\nimport { FilterType, IFilterDetails } from '../../../components/GridFilter/GridFilter.types';\r\nimport { ISelectableRow } from '../GridV2.types';\r\n\r\nexport const applyFilters = (\r\n  // tslint:disable-next-line: no-any\r\n  items: any[],\r\n  filterConditions: IFilterDetails[],\r\n  setAppliedFilters,\r\n  // tslint:disable-next-line: no-any\r\n  customApplyFilterFn?: (filterDetails: IFilterDetails[], items: any[]) => any[],\r\n  shouldApplyFilter = true\r\n): ISelectableRow[] => {\r\n  let filteredItems: ISelectableRow[] = items;\r\n\r\n  if (!customApplyFilterFn) {\r\n    filterConditions.forEach((filterCol) => {\r\n      if (filterCol.customFunction) {\r\n        filteredItems = filteredItems.filter((dataRow: Model) =>\r\n          filterCol.customFunction ? filterCol.customFunction(dataRow, filterCol) : false\r\n        );\r\n      } else {\r\n        filteredItems = applyFilter(filteredItems, filterCol);\r\n      }\r\n    });\r\n  }\r\n\r\n  if (customApplyFilterFn && shouldApplyFilter) {\r\n    filteredItems = customApplyFilterFn(filterConditions, items);\r\n  }\r\n\r\n  setAppliedFilters(filterConditions);\r\n  return filteredItems;\r\n};\r\n\r\n// tslint:disable-next-line: no-any\r\nfunction applyFilter(items: any[], filterColumn: IFilterDetails): ISelectableRow[] {\r\n  if (filterColumn.columnName !== undefined) {\r\n    const filteredItems = items.filter((item: object) => {\r\n      const val = item[filterColumn.columnName || ''];\r\n\r\n      switch (filterColumn.filterType) {\r\n        case FilterType.custom:\r\n          return filterColumn.filterCondition ? val === filterColumn.filterCondition : true;\r\n\r\n        case FilterType.date: {\r\n          const dateVal = new Date(val);\r\n          const { startDate, endDate } = filterColumn;\r\n\r\n          if (startDate || endDate) {\r\n            if (startDate && endDate) {\r\n              return dateVal >= startDate && dateVal <= endDate;\r\n            }\r\n            if (endDate) {\r\n              return dateVal <= endDate;\r\n            }\r\n            if (startDate) {\r\n              return dateVal >= startDate;\r\n            }\r\n          }\r\n          return true;\r\n        }\r\n\r\n        case FilterType.relational: {\r\n          const numVal = Number(val);\r\n\r\n          if (filterColumn.filterText) {\r\n            const filterNumVal = Number(filterColumn.filterText);\r\n            switch (filterColumn.filterCondition) {\r\n              case FilterCondition.Equals:\r\n                return numVal === filterNumVal;\r\n              case FilterCondition.DoesNotEqual:\r\n                return numVal !== filterNumVal;\r\n              case FilterCondition.GreaterThan:\r\n                return numVal > filterNumVal;\r\n              case FilterCondition.GreaterThanEqual:\r\n                return numVal >= filterNumVal;\r\n              case FilterCondition.LessThan:\r\n                return numVal < filterNumVal;\r\n              case FilterCondition.LessThanEqual:\r\n                return numVal <= filterNumVal;\r\n            }\r\n          }\r\n          return true;\r\n        }\r\n\r\n        case FilterType.string: {\r\n          const filterVal = filterColumn.filterText!.toLocaleLowerCase();\r\n          const strVal = String(val).toLocaleLowerCase();\r\n          switch (filterColumn.filterCondition) {\r\n            case FilterCondition.Contains:\r\n              return strVal.indexOf(filterVal) !== -1;\r\n            case FilterCondition.DoesNotContain:\r\n              return strVal.indexOf(filterVal) === -1;\r\n            case FilterCondition.BeginsWith:\r\n              return strVal.indexOf(filterVal) === 0;\r\n            case FilterCondition.EndsWith: {\r\n              const lastIndex = strVal.lastIndexOf(filterVal);\r\n              return lastIndex === strVal.length - filterVal.length;\r\n            }\r\n            case FilterCondition.Equals:\r\n              return strVal === filterVal;\r\n            case FilterCondition.DoesNotEqual:\r\n              return strVal !== filterVal;\r\n          }\r\n        }\r\n      }\r\n      return val.toLocaleLowerCase().indexOf(filterColumn.filterText!.toLocaleLowerCase()) !== -1;\r\n    });\r\n\r\n    return filteredItems;\r\n  }\r\n  // in case column name is not passed, filter cannot be applied.\r\n  return items;\r\n}\r\n","import { ICustomColumn } from '../../../types';\r\n\r\nfunction flattenNestedObject(obj, parentKey = '') {\r\n  let result = {};\r\n\r\n  for (const key in obj) {\r\n    if (obj.hasOwnProperty(key)) {\r\n      const newKey = parentKey ? `${parentKey}.${key}` : key;\r\n\r\n      if (typeof obj[key] === 'object' && !Array.isArray(obj[key])) {\r\n        const nestedValues = flattenNestedObject(obj[key], newKey);\r\n        result = { ...result, ...nestedValues };\r\n      } else {\r\n        result[newKey] = obj[key];\r\n      }\r\n    }\r\n  }\r\n\r\n  return result;\r\n}\r\n\r\nfunction unflattenObject(flatObj) {\r\n  const result = {};\r\n\r\n  for (const key in flatObj) {\r\n    if (flatObj.hasOwnProperty(key)) {\r\n      const keys = key.split('.');\r\n      let nestedObj = result;\r\n\r\n      for (let i = 0; i < keys.length; i++) {\r\n        const currentKey = keys[i];\r\n        if (i === keys.length - 1) {\r\n          nestedObj[currentKey] = flatObj[key];\r\n        } else {\r\n          nestedObj[currentKey] = nestedObj[currentKey] || {};\r\n          nestedObj = nestedObj[currentKey];\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  return result;\r\n}\r\n\r\nexport function sortItemsBasedOnColumn<ItemType>(items: ItemType[], column?: ICustomColumn): ItemType[] {\r\n  if (!column) {\r\n    return items;\r\n  }\r\n\r\n  if (!items || !items[0]) {\r\n    return [];\r\n  }\r\n\r\n  const { sortFunction, sortableValue, isSortedDescending, fieldName } = column;\r\n\r\n  // Use the sorting function if provided\r\n  if (typeof sortFunction === 'function') {\r\n    return items.sort((a, b) => sortFunction(a, b, isSortedDescending));\r\n  }\r\n\r\n  let itemsCopy = [...items];\r\n\r\n  itemsCopy = itemsCopy.map((item) => {\r\n    return flattenNestedObject(item) as ItemType;\r\n  });\r\n\r\n  const sortedItems = itemsCopy.concat([]).sort((a: ItemType, b: ItemType) => {\r\n    const firstValue = getSortableValue(a, fieldName, sortableValue);\r\n    const secondValue = getSortableValue(b, fieldName, sortableValue);\r\n\r\n    if (firstValue === undefined && secondValue !== undefined) {\r\n      return 1;\r\n    } else if (secondValue === undefined) {\r\n      return -1;\r\n    }\r\n\r\n    if (typeof firstValue === 'string' && typeof secondValue === 'string') {\r\n      if (isSortedDescending) {\r\n        return firstValue.toLowerCase() > secondValue.toLowerCase() ? -1 : 1;\r\n      } else {\r\n        return firstValue.toLowerCase() > secondValue.toLowerCase() ? 1 : -1;\r\n      }\r\n    } else {\r\n      if (isSortedDescending) {\r\n        return firstValue > secondValue ? -1 : 1;\r\n      } else {\r\n        return firstValue > secondValue ? 1 : -1;\r\n      }\r\n    }\r\n  });\r\n\r\n  return sortedItems.map((item) => {\r\n    return unflattenObject(item) as ItemType;\r\n  });\r\n}\r\n\r\nfunction getSortableValue(item, fieldName, sortableValue) {\r\n  // Use the sortableValue function if provided\r\n  return sortableValue ? sortableValue(item) : item[fieldName || ''];\r\n}\r\n","import { useEffect } from 'react';\r\nimport { Model } from '../../../@data';\r\nimport { onNumberOfPagesChanged, onPageNumberChanged } from '../@data/mutatorActions';\r\nimport { getStore } from '../@data/store/store';\r\nimport { IPaginationProps, ISelectableRow } from '../GridV2.types';\r\n\r\nexport const usePagination = (items: ISelectableRow[], paginationProps?: IPaginationProps) => {\r\n  const { paginator } = getStore();\r\n\r\n  const paginateData = (pageNumber?: number, pageSize?: number) => {\r\n    const dataLength = items?.length;\r\n    if (dataLength && pageNumber && pageSize) {\r\n      return items?.slice((pageNumber - 1) * pageSize, pageNumber * pageSize) || [];\r\n    } else {\r\n      return items || [];\r\n    }\r\n  };\r\n\r\n  const initializePagination = (filteredRowsUsingFilter: Model[]) => {\r\n    if (paginationProps && paginationProps.shouldGridHandlePagination) {\r\n      onPageNumberChanged(1);\r\n      onNumberOfPagesChanged(Math.ceil(filteredRowsUsingFilter.length / paginator.currentPageSize));\r\n    }\r\n  };\r\n\r\n  useEffect(() => {\r\n    if (paginationProps === undefined) {\r\n      return;\r\n    }\r\n\r\n    if (paginationProps.numberOfPages) {\r\n      onNumberOfPagesChanged(paginationProps.numberOfPages);\r\n    } else if (paginationProps.shouldGridHandlePagination) {\r\n      onNumberOfPagesChanged(Math.ceil(items.length / paginator.currentPageSize));\r\n    }\r\n    // eslint-disable-next-line react-hooks/exhaustive-deps\r\n  }, [paginationProps]);\r\n\r\n  return { paginateData, initializePagination };\r\n};\r\n","import {\r\n  CheckboxVisibility,\r\n  ConstrainMode,\r\n  DetailsListLayoutMode,\r\n  MessageBar,\r\n  SelectionMode,\r\n  ShimmeredDetailsList,\r\n  Spinner,\r\n  mergeStyleSets,\r\n} from '@fluentui/react';\r\nimport React, { useEffect, useRef, useState } from 'react';\r\nimport { Model, getAppStore, onHelpInfoCalloutOpened, onHelpInfoChanged } from '../../@data';\r\nimport '../../@data/orchestrators';\r\nimport AppMessages from '../../App.messages';\r\nimport { FormTitle } from '../../components/Form';\r\nimport { IFilterDetails } from '../../components/GridFilter/GridFilter.types';\r\nimport { Main } from '../../components/Main/Main';\r\nimport { ZeroResults } from '../../components/ZeroResults/ZeroResults';\r\nimport { PAGINATION_PAGE_SIZES } from '../../constants/AppConstants';\r\nimport { injectIntlAndObserver } from '../../utils';\r\nimport { IGridV2Props, ISelectableRow, getClassNames } from './';\r\nimport { onGridPageV2Initialized } from './@data/actions/gridActions';\r\nimport './@data/mutatorActions';\r\nimport { onPageNumberChanged, onPageSizeChanged, setSearchWord, setSelectedItems } from './@data/mutatorActions';\r\nimport './@data/orchestrators';\r\nimport { getStore } from './@data/store/store';\r\nimport { RenderHeaderCheckbox, RenderRowCheckbox } from './components/CustomCheckbox';\r\nimport { CustomCommandBar } from './components/CustomCommandBar/CustomCommandBar';\r\nimport { Pagination } from './components/Pagination';\r\nimport { PaginationDisplay } from './components/Pagination/Pagination.types';\r\nimport { useSortableGridColumns } from './hooks';\r\nimport { usePagination } from './hooks/usePagination';\r\nimport { useSearchableGrid } from './hooks/useSearchableGrid';\r\nimport { useSelectionGrid } from './hooks/useSelectionGrid';\r\nimport { applyFilters } from './utils/FilteringUtils';\r\n\r\nexport const GridV2 = injectIntlAndObserver(function GridV2Component(props: IGridV2Props<Model>) {\r\n  const {\r\n    intl,\r\n    pageTitle,\r\n    notGridReadyLabel,\r\n    isGridReady,\r\n    isDataLoading,\r\n    dataGridProps,\r\n    commandBarProps,\r\n    entity,\r\n    styleProps,\r\n    paginationProps,\r\n    msgBarProps,\r\n    children,\r\n    bypassFiltrationAndSearching,\r\n    bypassGridResetting,\r\n  } = props;\r\n  const { data, selectedRows, gridV2Columns, onColumnsChanged, onSelectionChanged, identifier, setData, hideDisableStyle } = dataGridProps;\r\n  const rowIdentifier = identifier || 'id';\r\n  const { dataQueryProps, customApplyFilterFn } = commandBarProps || {};\r\n  const isSelectionDisabled = dataGridProps?.selectionMode === SelectionMode.none;\r\n  const { root, titleContainer } = mergeStyleSets(getClassNames(), styleProps);\r\n\r\n  const { filterMenuCalloutOpen, paginator } = getStore();\r\n  const { helpInfo, publisher, account, locale } = getAppStore();\r\n\r\n  const [gridRows, setGridRows] = useState<ISelectableRow[]>(\r\n    data.map(\r\n      (item) =>\r\n        ({\r\n          ...item,\r\n          isSelected: selectedRows?.find((row) => row[rowIdentifier] === item[rowIdentifier])?.['isSelected'] || false,\r\n        } as ISelectableRow)\r\n    )\r\n  );\r\n  const [appliedFilters, setAppliedFilters] = useState<IFilterDetails[]>([]);\r\n  const rowRef = useRef(null);\r\n\r\n  const handleGridFilter = (filterConditions) => applyFilters(data, filterConditions, setAppliedFilters, customApplyFilterFn);\r\n  const { gridColumns, handleColumnHeaderClick, changeColumnsVisibility } = useSortableGridColumns(\r\n    gridV2Columns,\r\n    gridRows,\r\n    setGridRows,\r\n    onColumnsChanged\r\n  );\r\n  const { handleSearch, searchWord } = useSearchableGrid(gridColumns, data, setSearchWord);\r\n  const { selection, getKey } = useSelectionGrid(rowIdentifier, dataGridProps.selectionMode, setGridRows, onSelectionChanged);\r\n  const { paginateData, initializePagination } = usePagination(gridRows, paginationProps);\r\n\r\n  const removeAllSelectedItems = () => {\r\n    setGridRows(gridRows.map((item) => ({ ...item, isSelected: false } as ISelectableRow)));\r\n    setSelectedItems([]);\r\n    selection.setAllSelected(false);\r\n  };\r\n\r\n  const resetGrid = () => {\r\n    onPageNumberChanged(1);\r\n    onPageSizeChanged(PAGINATION_PAGE_SIZES[0]);\r\n    removeAllSelectedItems();\r\n  };\r\n\r\n  const defaultRenderZeroItemsComponent = () => {\r\n    return (\r\n      <ZeroResults\r\n        showDefaultImage\r\n        title={isGridReady ? dataGridProps?.noEntityFound && intl.formatMessage(dataGridProps.noEntityFound) : notGridReadyLabel}\r\n      />\r\n    );\r\n  };\r\n\r\n  const getVisibleColumns = () => gridColumns.filter((col) => col.isVisible);\r\n\r\n  /**\r\n   * replace tabindex=-1 to aria-hidden=\"true\" for accessibility enhancements\r\n   */\r\n  useEffect(() => {\r\n    if (rowRef.current) {\r\n      const checkboxWrappers = document.querySelectorAll('div[role=\"checkbox\"]');\r\n      const headerRowWrapper = document.querySelector('div[role=\"row\"][aria-label=\"List Header\"]');\r\n      if (checkboxWrappers.length) {\r\n        for (let i = 0; i < checkboxWrappers.length; i++) {\r\n          if (checkboxWrappers[i].hasAttribute('tabindex')) {\r\n            checkboxWrappers[i].removeAttribute('tabindex');\r\n          }\r\n        }\r\n      }\r\n      if (headerRowWrapper && !headerRowWrapper.hasAttribute('aria-busy')) {\r\n        headerRowWrapper.setAttribute('aria-busy', 'true');\r\n      }\r\n    }\r\n    // eslint-disable-next-line react-hooks/exhaustive-deps\r\n  }, [rowRef.current, gridRows]);\r\n\r\n  useEffect(() => {\r\n    onGridPageV2Initialized(data, entity, dataQueryProps);\r\n  }, [dataQueryProps, data, entity]);\r\n\r\n  useEffect(() => {\r\n    if (bypassFiltrationAndSearching && bypassGridResetting) {\r\n      return;\r\n    }\r\n    const filteredRowsUsingSearch = handleSearch(searchWord);\r\n    const filteredRowsUsingFilter = applyFilters(filteredRowsUsingSearch, appliedFilters, setAppliedFilters, customApplyFilterFn, false);\r\n    setGridRows(filteredRowsUsingFilter);\r\n    initializePagination(filteredRowsUsingFilter);\r\n    // eslint-disable-next-line react-hooks/exhaustive-deps\r\n  }, [data, appliedFilters, searchWord]);\r\n\r\n  useEffect(() => {\r\n    setGridRows(\r\n      data.map(\r\n        (item) =>\r\n          ({\r\n            ...item,\r\n            isSelected: selectedRows?.find((row) => row[rowIdentifier] === item[rowIdentifier])?.['isSelected'] || false,\r\n          } as ISelectableRow)\r\n      )\r\n    );\r\n    // eslint-disable-next-line react-hooks/exhaustive-deps\r\n  }, [data]);\r\n\r\n  useEffect(() => {\r\n    if (bypassFiltrationAndSearching && bypassGridResetting) {\r\n      return;\r\n    }\r\n    resetGrid();\r\n    return () => resetGrid();\r\n    // eslint-disable-next-line react-hooks/exhaustive-deps\r\n  }, [publisher, account]);\r\n\r\n  return (\r\n    <Main className={root}>\r\n      {pageTitle && (\r\n        <div className={titleContainer}>\r\n          <FormTitle\r\n            {...pageTitle}\r\n            intl={intl}\r\n            calloutContent={helpInfo}\r\n            iconButtonOnClick={() => onHelpInfoCalloutOpened(pageTitle.helpId!, locale)}\r\n            calloutOnDismiss={() => onHelpInfoChanged()}\r\n            styles={pageTitle.styleProps}\r\n          />\r\n          {isDataLoading ? <Spinner /> : <></>}\r\n        </div>\r\n      )}\r\n\r\n      {commandBarProps && (\r\n        <CustomCommandBar\r\n          history={props.history}\r\n          location={props.location}\r\n          match={props.match}\r\n          entity={props.entity}\r\n          columns={gridColumns}\r\n          commandBarProps={commandBarProps}\r\n          data={gridRows}\r\n          setData={setData}\r\n          cancelSelection={removeAllSelectedItems}\r\n          handleSearch={handleSearch}\r\n          isGridReady={isGridReady}\r\n          changeColumnsVisibility={changeColumnsVisibility}\r\n          filterMenuCalloutOpen={filterMenuCalloutOpen}\r\n          handleGridFilter={handleGridFilter}\r\n        />\r\n      )}\r\n\r\n      {msgBarProps && isGridReady && (\r\n        <MessageBar className={msgBarProps.className} messageBarType={msgBarProps.messageBarType} onDismiss={msgBarProps.onDismiss}>\r\n          {msgBarProps.children}\r\n        </MessageBar>\r\n      )}\r\n\r\n      {!(dataGridProps && dataGridProps.renderEmptyGrid) && data.length === 0 && isGridReady ? (\r\n        dataGridProps?.renderZeroItemsComponent ?? defaultRenderZeroItemsComponent()\r\n      ) : (\r\n        <ShimmeredDetailsList\r\n          constrainMode={dataGridProps?.constrainMode ?? ConstrainMode.horizontalConstrained}\r\n          enableShimmer={!isGridReady}\r\n          shimmerLines={dataGridProps?.shimmerLines}\r\n          selectionPreservedOnEmptyClick={true}\r\n          ariaLabelForGrid={pageTitle?.title ?? intl.formatMessage(AppMessages.ariaLabelForGrid)}\r\n          ariaLabelForListHeader={intl.formatMessage(AppMessages.ariaLabelForListHeader)}\r\n          ariaLabelForSelectionColumn={intl.formatMessage(AppMessages.ariaLabelForSelectionColumn)}\r\n          ariaLabelForSelectAllCheckbox={intl.formatMessage(AppMessages.ariaLabelForSelectAllCheckBox)}\r\n          ariaLabelForShimmer={intl.formatMessage(AppMessages.ariaLabelForShimmer)}\r\n          checkButtonAriaLabel={intl.formatMessage(AppMessages.checkBoxLabel)}\r\n          checkButtonGroupAriaLabel={intl.formatMessage(AppMessages.checkButtonGroupAriaLabel)}\r\n          items={\r\n            paginationProps?.shouldGridHandlePagination ? paginateData(paginator.currentPageNumber, paginator.currentPageSize) : gridRows\r\n          }\r\n          selection={dataGridProps?.selectionMode !== SelectionMode.none ? selection : undefined}\r\n          setKey={rowIdentifier}\r\n          getKey={getKey}\r\n          columns={getVisibleColumns().sort((a, b) => (a.columnOrder || 1) - (b.columnOrder || 0))}\r\n          onColumnHeaderClick={handleColumnHeaderClick}\r\n          selectionMode={dataGridProps?.selectionMode || SelectionMode.multiple}\r\n          layoutMode={DetailsListLayoutMode.justified}\r\n          checkboxVisibility={isSelectionDisabled ? CheckboxVisibility.hidden : CheckboxVisibility.always}\r\n          onRenderDetailsHeader={(headerProps) => RenderHeaderCheckbox(selection, headerProps)}\r\n          onRenderRow={(detailsRowProps) => RenderRowCheckbox(rowIdentifier, selection, detailsRowProps, hideDisableStyle)}\r\n          componentRef={rowRef}\r\n        />\r\n      )}\r\n\r\n      {isGridReady && data.length !== 0 && paginationProps && paginationProps.showPagination !== false && (\r\n        <Pagination\r\n          intl={props.intl}\r\n          display={PaginationDisplay.Navigation}\r\n          totalPageCount={paginator.numberOfPages}\r\n          currentPageNumber={paginator.currentPageNumber}\r\n          pageSize={paginator.currentPageSize}\r\n          onPageNumberChange={onPageNumberChanged}\r\n          onPageSizeChange={onPageSizeChanged}\r\n        />\r\n      )}\r\n\r\n      {children}\r\n    </Main>\r\n  );\r\n});\r\n","import React, { useEffect, useState } from 'react';\r\nimport { IColumnVisibilityMapping, IGridV2Column } from '../GridV2.types';\r\nimport { sortItemsBasedOnColumn } from '../utils';\r\n\r\nexport function useSortableGridColumns<ItemType>(\r\n  columns: IGridV2Column[],\r\n  items: ItemType[],\r\n  onSortItems?: (items: ItemType[]) => void,\r\n  onColumnsChanged?: (columns: IGridV2Column[]) => void,\r\n  onCleanupSortItems?: () => void\r\n) {\r\n  const [gridColumns, setGridColumns] = useState<IGridV2Column[]>(columns);\r\n\r\n  const changeColumnsVisibility = (colsVisMap: IColumnVisibilityMapping[]) => {\r\n    const newColumns = [...gridColumns];\r\n    colsVisMap.forEach((colVisMap) => {\r\n      const gridColumn = newColumns.find((col) => col.key === colVisMap.columnKey);\r\n\r\n      if (gridColumn) {\r\n        gridColumn.isVisible = colVisMap.isVisible;\r\n      }\r\n    });\r\n    setGridColumns(newColumns);\r\n    onColumnsChanged?.(newColumns);\r\n  };\r\n\r\n  function handleColumnHeaderClick(ev?: React.MouseEvent<HTMLElement>, column?: IGridV2Column) {\r\n    if (!column || column.suppressSorting) {\r\n      return;\r\n    }\r\n    ev?.stopPropagation();\r\n\r\n    const newColumns = gridColumns.slice();\r\n    const currColumn = newColumns.filter((currCol) => column.key === currCol.key)[0];\r\n\r\n    newColumns.forEach((col: IGridV2Column) => {\r\n      if (col === currColumn) {\r\n        currColumn.isSortedDescending = !currColumn.isSortedDescending;\r\n        currColumn.isSorted = true;\r\n      } else {\r\n        col.isSorted = false;\r\n        col.isSortedDescending = undefined;\r\n      }\r\n    });\r\n\r\n    setGridColumns(newColumns);\r\n    const sortedItems = sortItemsBasedOnColumn(items, currColumn);\r\n    onSortItems?.(sortedItems);\r\n  }\r\n\r\n  useEffect(() => {\r\n    if (JSON.stringify(columns) === JSON.stringify(gridColumns)) {\r\n      return;\r\n    }\r\n    setGridColumns(columns);\r\n    // eslint-disable-next-line react-hooks/exhaustive-deps\r\n  }, [JSON.stringify(columns)]);\r\n\r\n  useEffect(() => {\r\n    return () => onCleanupSortItems?.();\r\n  }, [onCleanupSortItems]);\r\n\r\n  return { gridColumns, handleColumnHeaderClick, changeColumnsVisibility };\r\n}\r\n","import { Selection, SelectionMode } from '@fluentui/react';\r\nimport { useMemo } from 'react';\r\nimport { Model } from '../../../@data';\r\nimport { setSelectedItems } from '../@data/mutatorActions';\r\nimport { getStore } from '../@data/store/store';\r\n\r\nexport const useSelectionGrid = (\r\n  id: string,\r\n  mode?: SelectionMode,\r\n  setGridRows?,\r\n  onSelectionRefChanged?: (selectedItems: Model[]) => void\r\n) => {\r\n  // tslint:disable-next-line: no-any\r\n  const getKey = (item: any): string => item?.[id];\r\n\r\n  const selection: Selection = useMemo(\r\n    () =>\r\n      new Selection({\r\n        onItemsChanged() {\r\n          selection?.getItems().forEach((row) => selection?.setKeySelected(row?.[id], row?.['isSelected'], true));\r\n        },\r\n        onSelectionChanged() {\r\n          if (mode === SelectionMode.single) {\r\n            let selectedRow: Model | undefined = selection.getSelection()[0] as Model;\r\n            if (selection.getSelection()[0] === undefined && getStore().selectedItems[0] !== undefined) {\r\n              if (selection.getItems().find((row) => row?.[id] === getStore().selectedItems[0]?.[id]) !== undefined) {\r\n                selectedRow = undefined;\r\n              } else {\r\n                selectedRow = getStore().selectedItems[0];\r\n              }\r\n            }\r\n            setGridRows((gridRows) => {\r\n              const rowsWithUpdatedSelectionStatus = gridRows.map((row) => {\r\n                return row?.[id] === selectedRow?.[id] ? { ...row, isSelected: true } : { ...row, isSelected: false };\r\n              });\r\n              setSelectedItems(rowsWithUpdatedSelectionStatus.filter((row) => row?.['isSelected'] === true));\r\n              onSelectionRefChanged?.(rowsWithUpdatedSelectionStatus);\r\n              return rowsWithUpdatedSelectionStatus;\r\n            });\r\n          } else {\r\n            const activeRows = selection.getItems().map((row) => {\r\n              return { ...row, isSelected: selection.getSelection().includes(row) };\r\n            });\r\n\r\n            setGridRows((gridRows) => {\r\n              const rowsWithUpdatedSelectionStatus = gridRows.map((row) => {\r\n                const rowToBeSwapped = activeRows.find((r) => r?.[id] === row?.[id]);\r\n                if (rowToBeSwapped) {\r\n                  return rowToBeSwapped;\r\n                }\r\n                return row;\r\n              });\r\n              setSelectedItems(rowsWithUpdatedSelectionStatus.filter((row) => row?.['isSelected'] === true));\r\n              onSelectionRefChanged?.(rowsWithUpdatedSelectionStatus);\r\n              return rowsWithUpdatedSelectionStatus;\r\n            });\r\n          }\r\n        },\r\n        getKey,\r\n      }),\r\n    // eslint-disable-next-line react-hooks/exhaustive-deps\r\n    []\r\n  );\r\n\r\n  return { selection, getKey };\r\n};\r\n","import {\r\n  Checkbox,\r\n  DetailsHeader,\r\n  DetailsRow,\r\n  IDetailsCheckboxProps,\r\n  IDetailsColumnRenderTooltipProps,\r\n  IDetailsHeaderProps,\r\n  IDetailsRowProps,\r\n  mergeStyleSets,\r\n  Selection,\r\n  Shimmer,\r\n  TooltipHost,\r\n} from '@fluentui/react';\r\nimport React from 'react';\r\nimport { getClassNames } from '../GridV2.styles';\r\nimport { IGridV2Column } from '../GridV2.types';\r\n\r\nexport const RenderHeaderCheckbox = (selection: Selection, headerProps?: IDetailsHeaderProps): JSX.Element | null => {\r\n  if (!headerProps) {\r\n    return null;\r\n  }\r\n\r\n  const { detailsHeaderRootStyle } = mergeStyleSets(getClassNames());\r\n\r\n  return (\r\n    <DetailsHeader\r\n      {...headerProps}\r\n      styles={{ root: detailsHeaderRootStyle }}\r\n      onRenderColumnHeaderTooltip={(tooltipHostProps: IDetailsColumnRenderTooltipProps) => {\r\n        return <TooltipHost {...tooltipHostProps} />;\r\n      }}\r\n      onRenderDetailsCheckbox={(props: IDetailsCheckboxProps, defaultRender) => {\r\n        return (\r\n          <Checkbox\r\n            checked={selection.getItems().every((x) => x?.['isSelected'] === true)}\r\n            ariaLabel={'ToggleAll'}\r\n            onChange={(_, checked) => selection.setAllSelected(!checked)}\r\n          />\r\n        );\r\n      }}\r\n    />\r\n  );\r\n};\r\n\r\nexport const RenderRowCheckbox = (\r\n  id: string,\r\n  selection: Selection,\r\n  detailsRowProps?: IDetailsRowProps,\r\n  hideDisableStyle?: boolean\r\n): JSX.Element | null => {\r\n  if (!detailsRowProps) {\r\n    return null;\r\n  }\r\n\r\n  const { item } = detailsRowProps ?? {};\r\n  const { detailsRowRootStyle, disabledRowStyle, checkCell } = mergeStyleSets(getClassNames());\r\n\r\n  return (\r\n    <DetailsRow\r\n      data-testid=\"grid-item\"\r\n      disabled={item?.isDisabled && !hideDisableStyle}\r\n      {...detailsRowProps}\r\n      styles={({ disabled }) => ({ root: `${detailsRowRootStyle} ${disabled && !hideDisableStyle ? disabledRowStyle : ''}` })}\r\n      checkboxCellClassName={checkCell}\r\n      onRenderItemColumn={(itemToRender, _, column: IGridV2Column) => {\r\n        return column.isLoading ? (\r\n          <Shimmer styles={{ root: { display: 'flex', alignItems: 'center', height: '100%' }, shimmerWrapper: { height: '7px' } }} />\r\n        ) : (\r\n          column.onRenderData?.(itemToRender) || itemToRender[column.fieldName!]\r\n        );\r\n      }}\r\n      onRenderDetailsCheckbox={(props: IDetailsCheckboxProps, defaultRender) => {\r\n        return (\r\n          <Checkbox\r\n            checked={props.checked}\r\n            ariaLabel={`Toggle-Select-Row`}\r\n            onChange={() => {\r\n              const index = selection.getItems()?.findIndex((row) => row?.[id] === item?.[id]);\r\n              if (index !== -1) {\r\n                selection.toggleIndexSelected(index);\r\n              }\r\n            }}\r\n          />\r\n        );\r\n      }}\r\n    />\r\n  );\r\n};\r\n","import { boolean, object, string } from 'yup';\r\nimport { IUserViewModel } from './IUserViewModel';\r\n\r\nexport function userAcceptInvitationErrorModel() {\r\n  return object<IUserViewModel>().shape({\r\n    firstName: string()\r\n      .trim()\r\n      .required(),\r\n    lastName: string()\r\n      .trim()\r\n      .required(),\r\n    emailAddress: string()\r\n      .email()\r\n      .required(),\r\n    language: string().required(),\r\n    contactByPhone: boolean(),\r\n    contactByEmail: boolean(),\r\n    phoneNumber: string().when('contactByPhone', {\r\n      is: true,\r\n      then: string().required()\r\n    })\r\n  });\r\n}\r\n","export const ariaConfig = {\r\n  transmitProfile: 'AWT_REAL_TIME',\r\n\r\n  // ARIA Project tokens for different envs\r\n  // aria project name - PubcenterUINext-Dev\r\n  // https://portal.aria.ms/project/13b6d1306d984c86b48a95df1443daa3/home\r\n  ariaTokenTest: '13b6d1306d984c86b48a95df1443daa3-8bd3a776-3812-45d6-93b3-a9944af0602c-7250',\r\n\r\n  // dev/SI/staging refer to the same env\r\n  // aria project name - PubcenterUINext-SI\r\n  // https://portal.aria.ms/project/8729f29d43a04e89bdfb2f7d9c2c22c1/home\r\n  ariaTokenSI: '8729f29d43a04e89bdfb2f7d9c2c22c1-72910d57-9c8c-4929-ba85-adaedc15b808-7236',\r\n\r\n  // aria project name - PubcenterUINext-BCP\r\n  // https://portal.aria.ms/project/4730aa7b426443bca86a435110589367/home\r\n  ariaTokenBCP: '4730aa7b426443bca86a435110589367-2a3d4128-5cf8-492c-a50b-2bcc1edac9a0-7040',\r\n\r\n  // aria project name - PubcenterUINext-Prod\r\n  // https://portal.aria.ms/project/ec1ea72e6f7f4f34a02a6fc2d1fa1280/home\r\n  ariaTokenProd: 'ec1ea72e6f7f4f34a02a6fc2d1fa1280-679679fb-85d9-4a00-b895-fc8382c6cd17-7344',\r\n}","export enum UserConstants {\r\n  publisherId = 'publisherId',\r\n  publisherName = 'publisherName',\r\n  userId = 'userId',\r\n  userName = 'userName',\r\n  trackingId = 'trackingId',\r\n  url = 'url',\r\n  sessionId = 'sessionId',\r\n  logMessage = 'logMessage',\r\n  logLevel = 'logLevel',\r\n  userEmail = 'userEmail',\r\n}\r\n","import { AWTEventPriority, AWTEventProperties, AWTLogManager, AWTSessionState } from '@aria/webjs-sdk';\r\nimport { ariaConfig } from './Aria.Config';\r\nimport { Environment } from './Environment';\r\nimport { ILogManager } from \"./ILogManager\";\r\nimport { ILogUserContext } from \"./ILogUserContext\";\r\nimport { LoggingUtils } from \"./LoggingUtils\";\r\nimport { LogType } from \"./LogType\";\r\nimport { UserConstants } from \"./UserConstants\";\r\n\r\nexport class AriaLoggerManager implements ILogManager {\r\n  private static AriaLogger;\r\n\r\n  private static _getAriaToken(logParams): string {\r\n    let ariaToken = '';\r\n    // Read aria token from logParams, if its non empty\r\n    if (Object.keys(logParams).length !== 0) {\r\n      ariaToken = logParams.ariaToken;\r\n      return ariaToken;\r\n    }\r\n\r\n    const environment = LoggingUtils.getEnvironment();\r\n\r\n    switch (environment) {\r\n      case Environment.TEST:\r\n        ariaToken = ariaConfig.ariaTokenTest;\r\n        break;\r\n\r\n      case Environment.SI:\r\n        ariaToken = ariaConfig.ariaTokenSI;\r\n        break;\r\n\r\n      case Environment.BCP:\r\n        ariaToken = ariaConfig.ariaTokenBCP;\r\n        break;\r\n\r\n      case Environment.PROD:\r\n        ariaToken = ariaConfig.ariaTokenProd;\r\n        break;\r\n\r\n      default:\r\n        ariaToken = ariaConfig.ariaTokenSI;\r\n        break;\r\n    }\r\n\r\n    return ariaToken;\r\n  }\r\n\r\n  private static _initalizeAriaEnv(ariaToken, AriaLogger) {\r\n    try{\r\n      AWTLogManager.initialize(ariaToken);\r\n      AWTLogManager.setTransmitProfile(ariaConfig.transmitProfile);\r\n\r\n      if(AriaLogger === undefined) {\r\n        AriaLogger = AWTLogManager.getLogger(ariaToken);\r\n      }\r\n\r\n      // Initialize the session\r\n      // This enables populating 'sessionID' into the ARIA logs\r\n      AriaLogger.logSession(AWTSessionState.Started);\r\n    } catch (e) {\r\n      console.log('Failed to initialize ARIA environment with error ', e);\r\n    }\r\n\r\n    return AriaLogger;\r\n  }\r\n\r\n  constructor(logParams) {\r\n    const ariaToken = AriaLoggerManager._getAriaToken(logParams);\r\n    AriaLoggerManager.AriaLogger = AriaLoggerManager._initalizeAriaEnv(ariaToken, AriaLoggerManager.AriaLogger);\r\n  }\r\n\r\n  public log(logType: LogType, logMessage: string | number | object, logUserContext: ILogUserContext): void {\r\n    this._ariaLog(logType, logMessage, logUserContext);\r\n  }\r\n\r\n  private _setProperties(logUserContext: ILogUserContext,  eventProperties: AWTEventProperties): void {\r\n    eventProperties.setProperty(UserConstants.publisherId, logUserContext.publisherId);\r\n    eventProperties.setProperty(UserConstants.publisherName, logUserContext.publisherName);\r\n    eventProperties.setProperty(UserConstants.userName, logUserContext.userName);\r\n    eventProperties.setProperty(UserConstants.userId, logUserContext.userId);\r\n    eventProperties.setProperty(UserConstants.userEmail, logUserContext.userEmail);\r\n  }\r\n\r\n  private _ariaLog(logType: LogType, logMessage: string | number | object, logUserContext: ILogUserContext): void {\r\n    const eventProperties = new AWTEventProperties(logType);\r\n    this._setProperties(logUserContext, eventProperties);\r\n    eventProperties.setProperty(UserConstants.logMessage, JSON.stringify(logMessage));\r\n\r\n    switch(logType) {\r\n\r\n      case 'DEBUG': {\r\n        eventProperties.setEventPriority(AWTEventPriority.Normal);\r\n        eventProperties.setProperty(UserConstants.logLevel, 'DEBUG');\r\n        break;\r\n      }\r\n\r\n      case 'INFO': {\r\n        eventProperties.setEventPriority(AWTEventPriority.Normal);\r\n        eventProperties.setProperty(UserConstants.logLevel, 'INFO');\r\n        break;\r\n      }\r\n\r\n      case 'WARN': {\r\n        eventProperties.setEventPriority(AWTEventPriority.High);\r\n        eventProperties.setProperty(UserConstants.logLevel, 'WARN');\r\n        break;\r\n      }\r\n\r\n      case 'ERROR': {\r\n        eventProperties.setEventPriority(AWTEventPriority.Immediate_sync);\r\n        eventProperties.setProperty(UserConstants.logLevel, 'ERROR');\r\n        break;\r\n      }\r\n\r\n      default: {\r\n        eventProperties.setEventPriority(AWTEventPriority.Normal);\r\n        break;\r\n      }\r\n    }\r\n\r\n      AriaLoggerManager.AriaLogger.logEvent(eventProperties);\r\n    };\r\n}","import { action } from 'satcheljs';\r\n\r\nexport const onLoadingChanged = action('onLoadingChanged', (isLoading: boolean) => ({ isLoading }));\r\nexport const onFeatureFlagChanged = action('onFeatureFlagChanged', (isFeatureEnabled: boolean) => ({ isFeatureEnabled }));\r\n","import { mutator } from 'satcheljs';\r\nimport { onFeatureFlagChanged, onLoadingChanged } from '../actions/windowsFeatureFlagActions';\r\nimport { getStore } from '../store/store';\r\n\r\nmutator(onLoadingChanged, (msg) => {\r\n  const store = getStore();\r\n  store.isLoading = msg.isLoading;\r\n});\r\n\r\nmutator(onFeatureFlagChanged, (msg) => {\r\n  const store = getStore();\r\n  store.isFeatureEnabled = msg.isFeatureEnabled;\r\n});\r\n","import { useEffect, useRef } from 'react';\r\nimport { isTythonSelfServeUser } from '../../@data';\r\nimport { onFeatureFlagChanged } from './actions/windowsFeatureFlagActions';\r\nimport './mutators/windowsFeatureFlagMutators';\r\nimport { useWindowsAppFeatureFlagType } from './types';\r\n\r\nconst useWindowsAppFeatureFlag: useWindowsAppFeatureFlagType = (userContext, publisher) => {\r\n  const isFeatureFlagInitialized = useRef(false);\r\n\r\n  /**\r\n   * TODO: Integrate fetch feature flag by publisher id when api is ready to use\r\n   */\r\n  // const fetchWindowsAppFeatureFlagByPublisherId = async (publisherId: string) => {\r\n  //   const url = `${uiConfig.getApiBaseAddress('1.2')}/publishers/${publisherId}/WindowsAppEnable`;\r\n  //   onLoadingChanged(true);\r\n  //   try {\r\n  //     const headers = await buildRequestHeadersWithAuthToken(url, userContext);\r\n  //     const response = await fetch(url, { method: 'GET', headers });\r\n  //     if (!response.ok) {\r\n  //       console.error(`HTTP error! status: ${response.status}`);\r\n  //     }\r\n  //     const featureFlag = await response.json();\r\n  //     // onFeatureFlagChanged(featureFlag)\r\n  //   } catch (error) {\r\n  //     // mark publisher as disabled for testing 321792029,322468545\r\n  //     // tython-test-user-may13@outlook-int.com, tython-test-user-may22@outlook-int.com\r\n  //     onFeatureFlagChanged(!['321792029', 321792029, '322468545', 322468545].includes(publisher?.id!));\r\n  //     console.error(error);\r\n  //   } finally {\r\n  //     onLoadingChanged(false);\r\n  //   }\r\n  // };\r\n\r\n  const ENABLED_PUBLISHERS_PROD = ['253874386'];\r\n  const DISABLED_PUBLISHERS_NON_PROD = ['321792029', '322468545'];\r\n  useEffect(() => {\r\n    if (!isFeatureFlagInitialized.current && userContext && publisher?.id && isTythonSelfServeUser()) {\r\n      isFeatureFlagInitialized.current = true;\r\n      /**\r\n       * TODO: call fetch feature flag once api ready\r\n       * fetchWindowsAppFeatureFlagByPublisherId(publisher.id);\r\n       */\r\n      const isProdEnv = process.env.REACT_APP_ENV === 'production';\r\n      if (isProdEnv) {\r\n        onFeatureFlagChanged(ENABLED_PUBLISHERS_PROD.includes(publisher.id!.toString()));\r\n      } else {\r\n        onFeatureFlagChanged(!DISABLED_PUBLISHERS_NON_PROD.includes(publisher.id!.toString()));\r\n      }\r\n    }\r\n    // eslint-disable-next-line react-hooks/exhaustive-deps\r\n  }, [userContext, publisher]);\r\n};\r\n\r\nexport default useWindowsAppFeatureFlag;\r\n","/* istanbul ignore file */\r\nimport '@bingads-webui-help/apex';\r\nimport $ from 'jquery';\r\nimport { uiConfig } from '../../config/ui.config';\r\n\r\nlet prevLocale;\r\n\r\nexport function initApexPlatform(supportButton, locale) {\r\n  if (prevLocale !== locale) {\r\n    const apexInitOptions = {\r\n      // The project name, ask the writers team for your project name\r\n      Project: 'PubCenter_v4', //  2024-03-11-06-31-14-PubCenter-v4\r\n      // The language of help content, ask the writers team for supported languages of your project\r\n      Market: locale,\r\n      EndPoint: uiConfig.getApexInitUrl(),\r\n      // Set it to true to enable inline help popup\r\n      InitPopup: true,\r\n      // Whether to init on ready, need to set to false for basic usage\r\n      InitOnReady: false,\r\n      SupportOptions: { template: supportButton },\r\n    };\r\n\r\n    $.fn.InitApexPlatform(apexInitOptions);\r\n    prevLocale = locale;\r\n  }\r\n}\r\n","/* eslint-disable jsx-a11y/anchor-is-valid */\r\nimport { css, Icon, Link, PrimaryButton } from '@fluentui/react';\r\nimport { Link as V2Link } from '@fluentui/react-components';\r\nimport React from 'react';\r\nimport { IHeaderItem } from '../../components/Header/Header.types';\r\nimport { InlineAnchorProps, IUseCMUIExperience, QueryArticleAnchorProps, QueryArticleButtonProps } from './index.types';\r\nimport { initApexPlatform } from './init-apex';\r\n\r\n/**\r\n * This is a custom hook to integrate Microsoft Advertising - Campaign Management UI(CMUI) help experience\r\n * This hook @returns 2 core components CMUIInlineHelpAnchor and CMUIPopupArticleByIdAnchor\r\n *\r\n * <CMUIInlineHelpAnchor /> will render a hover card with given `topic` content at absolute position, PM will\r\n * share topic string\r\n * <CMUIPopupArticleByIdAnchor /> will render a anchor tag to support click open the popup help panel and render\r\n * content of the given `query` article\r\n *\r\n * @example\r\n *    const { CMUIInlineHelpAnchor, CMUIPopupArticleByIdAnchor } = useCMUIHelpExperience();\r\n *\r\n *    <CMUIInlineHelpAnchor name=\"Inline Help Button\" topic=\"pop_PCv4_ServingStatus\" className={this._classNames....} />\r\n *     @param name is required\r\n *     @param topic is required to map the expected inline help content\r\n *\r\n *    <CMUIPopupArticleByIdAnchor query=\"ext07502\" name=\"query by id\" className={this._classNames....} />\r\n *     @param name is required\r\n *     @param query is required to map the expected pop up article id\r\n *\r\n * @reference\r\n *     https://msasg.visualstudio.com/Bing_Ads/_artifacts/feed/BingAdsWebUISharedComponents/Npm/@bingads-webui-help%2Fapex/overview\r\n */\r\nexport const useCMUIHelpExperience = (): IUseCMUIExperience => {\r\n  const CMUI_HELP_BUTTON_ID = '#helpbutton';\r\n\r\n  const popupClickHandler = (evt) => {\r\n    window?.PopupController?.PopupJsClick(evt.target);\r\n  };\r\n\r\n  const initCMUIHelpButtonEventListener = () => {\r\n    const helpButtons = document.querySelectorAll(CMUI_HELP_BUTTON_ID);\r\n    for (let i = 0; i < helpButtons.length; i++) {\r\n      helpButtons[i].addEventListener('click', popupClickHandler);\r\n    }\r\n  };\r\n\r\n  const removeCMUIHelpButtonEventListener = () => {\r\n    const helpButtons = document.querySelectorAll(CMUI_HELP_BUTTON_ID);\r\n    for (let i = 0; i < helpButtons.length; i++) {\r\n      helpButtons[i].removeEventListener('click', popupClickHandler);\r\n    }\r\n  };\r\n\r\n  // for now header help icon only expose to Tython flow mvp users\r\n  const CMUIHeaderMenuItemSerializer = (isTythonSelfServeUser: boolean, items: IHeaderItem[] | undefined) => {\r\n    const headerHelpIconProps = {\r\n      key: 'HelpIcon',\r\n      title: 'Help',\r\n      icon: 'Help',\r\n      className: 'HelpTopic',\r\n      query: 'ext07501',\r\n      shouldOverflowUnderExtraSmallScreen: true,\r\n    };\r\n    if (isTythonSelfServeUser && !items?.some((i) => i.key === headerHelpIconProps.key)) {\r\n      if (items) {\r\n        items.unshift(headerHelpIconProps);\r\n      } else {\r\n        items = [headerHelpIconProps];\r\n      }\r\n    }\r\n    return items;\r\n  };\r\n\r\n  const CMUIInlineHelpAnchor = (props: InlineAnchorProps) => {\r\n    const eleRef = React.createRef<HTMLAnchorElement>();\r\n\r\n    const onClick = React.useCallback((event: React.MouseEvent<HTMLAnchorElement>) => {\r\n      event.preventDefault();\r\n      if (eleRef.current) {\r\n        window.PopupController.PopupJsClick(eleRef.current);\r\n      }\r\n      // eslint-disable-next-line react-hooks/exhaustive-deps\r\n    }, []);\r\n\r\n    const { topic, name, className, iconName } = props;\r\n    const iconStyle: React.CSSProperties = {\r\n      fontSize: '16px',\r\n      margin: '0px 4px',\r\n      height: '16px',\r\n      lineHeight: '16px',\r\n      textAlign: 'center',\r\n      flexShrink: 0,\r\n      color: 'rgb(0, 120, 212)',\r\n    };\r\n\r\n    return (\r\n      <a className={className} ref={eleRef} id=\"helpbutton\" tabIndex={0} type=\"helppopup\" onClick={onClick} href=\"#\" topic={topic.trim()}>\r\n        {name && name}\r\n        {iconName && <Icon iconName={iconName} style={iconStyle} />}\r\n      </a>\r\n    );\r\n  };\r\n\r\n  const CMUIPopupArticleByIdAnchor = (props: QueryArticleAnchorProps) => {\r\n    const { query, name, className, disabled, useV2Link = false } = props;\r\n    if (useV2Link) {\r\n      return (\r\n        <V2Link href=\"/#\" query={query} className={css('HelpTopic', className)} disabled={disabled}>\r\n          {name}\r\n        </V2Link>\r\n      );\r\n    }\r\n\r\n    return (\r\n      <Link href=\"/#\" query={query} className={css('HelpTopic', className)}>\r\n        {name}\r\n      </Link>\r\n    );\r\n  };\r\n\r\n  const CMUIPopupArticleUsingButton = (props: QueryArticleButtonProps) => {\r\n    const { query, className, anchorStyle, formatMessage, buttonText, buttonStyle } = props;\r\n    return (\r\n      <>\r\n        <a\r\n          hidden={true}\r\n          href=\"/#\"\r\n          query={query}\r\n          id=\"helpbutton\"\r\n          className={css(className, anchorStyle)}\r\n          // style={{ textDecoration: 'none', color: 'black' }}\r\n        >\r\n          Learn more\r\n        </a>\r\n        <PrimaryButton\r\n          text={formatMessage(buttonText)}\r\n          className={buttonStyle}\r\n          onClick={() => {\r\n            document.getElementById('helpbutton')?.click();\r\n          }}\r\n          tabIndex={0}\r\n        />\r\n      </>\r\n    );\r\n  };\r\n\r\n  return {\r\n    CMUIHeaderMenuItemSerializer,\r\n    CMUIPopupArticleUsingButton,\r\n    CMUIInlineHelpAnchor,\r\n    CMUIPopupArticleByIdAnchor,\r\n    initCMUIHelpButtonEventListener,\r\n    init: initApexPlatform,\r\n    removeCMUIHelpButtonEventListener,\r\n  };\r\n};\r\n","import { AnimationClassNames, FontWeights } from '@fluentui/react';\r\nimport { IPubcenterSpacing } from '../../../theme';\r\nimport { IMultiSelectPickerStyleProps, IMultiSelectPickerStyles } from './MultiSelectPicker.types';\r\n\r\n// TODO: Implement Focused States #1636116 (errorMessage focus too)\r\nexport const getStyles = (props: IMultiSelectPickerStyleProps): IMultiSelectPickerStyles => {\r\n  const { theme, height, hasErrorMessage } = props;\r\n  const spacing = theme.spacing as IPubcenterSpacing;\r\n  const defaultHeight = 260;\r\n  const { semanticColors } = theme;\r\n\r\n  return {\r\n    root: ['ms-MultiSelectPicker'],\r\n    picker: {\r\n      height: height || defaultHeight,\r\n      display: 'flex',\r\n      flexDirection: 'row',\r\n      marginTop: spacing.size8,\r\n      width: 580,\r\n    },\r\n    itemsPane: [\r\n      {\r\n        display: 'flex',\r\n        flex: 1,\r\n        flexGrow: 1,\r\n        overflow: 'hidden',\r\n        flexDirection: 'column',\r\n        borderWidth: 1,\r\n        borderStyle: 'solid',\r\n        borderColor: '#B3B0AD',\r\n        selectors: {\r\n          ':first-child': {\r\n            marginRight: spacing.size16,\r\n          },\r\n        },\r\n      },\r\n      hasErrorMessage && {\r\n        borderColor: semanticColors.errorText,\r\n        selectors: {\r\n          '&:focus, &:hover': {\r\n            borderColor: semanticColors.errorText,\r\n          },\r\n        },\r\n      },\r\n    ],\r\n    header: {\r\n      display: 'flex',\r\n      flexDirection: 'row',\r\n      justifyContent: 'space-between',\r\n      marginTop: spacing.size8,\r\n      marginBottom: spacing.size8,\r\n    },\r\n    headerLabel: [\r\n      'ms-font-m',\r\n      {\r\n        fontWeight: FontWeights.semibold,\r\n        marginLeft: spacing.size8,\r\n        padding: 0,\r\n      },\r\n    ],\r\n    textButton: {\r\n      display: 'flex',\r\n      alignSelf: 'flex-end',\r\n      marginRight: spacing.size8,\r\n    },\r\n    errorMessage: [\r\n      'ms-MultiSelectPicker-errorMessage',\r\n      AnimationClassNames.slideDownIn20,\r\n      theme.fonts.small,\r\n      {\r\n        color: semanticColors.errorText,\r\n        margin: 0,\r\n        paddingTop: 5,\r\n        display: 'flex',\r\n        alignItems: 'center',\r\n      },\r\n    ],\r\n    list: {\r\n      flex: 1,\r\n      overflowY: 'auto',\r\n    },\r\n    disabledPanel: {\r\n      backgroundColor: theme.palette.neutralLighter,\r\n    },\r\n    listItem: {\r\n      display: 'flex',\r\n      paddingLeft: spacing.size8,\r\n      paddingRight: spacing.size8,\r\n      height: spacing.size36,\r\n      lineHeight: spacing.size36,\r\n      cursor: 'pointer',\r\n      selectors: {\r\n        ':hover': {\r\n          backgroundColor: theme.palette.neutralLighter,\r\n        },\r\n      },\r\n    },\r\n    disabledListItem: {\r\n      backgroundColor: theme.palette.neutralLight,\r\n    },\r\n    listItemLabel: [\r\n      'ms-font-m',\r\n      {\r\n        flex: 1,\r\n        textOverflow: 'ellipsis',\r\n        overflow: 'hidden',\r\n        whiteSpace: 'nowrap',\r\n      },\r\n    ],\r\n    subComponentStyles: {\r\n      search: {\r\n        root: {\r\n          height: spacing.size48,\r\n        },\r\n      },\r\n      iconButton: {\r\n        root: [\r\n          'ms-font-m',\r\n          {\r\n            color: theme.palette.themePrimary,\r\n          },\r\n        ],\r\n      },\r\n    },\r\n  };\r\n};\r\n","import { styled } from '@fluentui/react';\r\nimport { MultiSelectPickerBase } from './MultiSelectPicker.base';\r\nimport { getStyles } from './MultiSelectPicker.styles';\r\nimport { IMultiSelectPickerProps, IMultiSelectPickerStyleProps, IMultiSelectPickerStyles } from './MultiSelectPicker.types';\r\n\r\n// Use Fabric Base guidelines since this might be contributed back to Fabric.\r\nexport const MultiSelectPicker = styled<IMultiSelectPickerProps, IMultiSelectPickerStyleProps, IMultiSelectPickerStyles>(\r\n  MultiSelectPickerBase,\r\n  getStyles,\r\n  undefined,\r\n  {\r\n    scope: 'MultiSelectPicker',\r\n  }\r\n);\r\n","import { defineMessages } from 'react-intl';\r\n\r\nexport default defineMessages ({\r\n  addAllButtonAriaDescription: {\r\n    id: 'multiSelectPicker.addAllButtonDescription',\r\n    defaultMessage: 'Click to add all available items'\r\n  },\r\n  removeAllButtonAriaDescription: {\r\n    id: 'multiSelectPicker.removeAllButtonAriaDescription',\r\n    defaultMessage: 'Click to remove all selected items'\r\n  },\r\n  filteredItemsLabel: {\r\n    id: 'multiSelectPicker.filteredItemsLabel',\r\n    defaultMessage: 'Available items: {count}',\r\n  },\r\n  selectedItemsLabel: {\r\n    id: 'multiSelectPicker.selectedItemsLabel',\r\n    defaultMessage: 'Selected: {count}',\r\n  },\r\n  createButtonAriaDesciption: {\r\n    id: 'multiSelectPicker.CreateButtonAriaDescription',\r\n    defaultMessage: 'Click this button to {label} within this page'\r\n  },\r\n  searchBoxPlaceholder: {\r\n    id: 'multiSelectPicker.seachBoxPlaceholder',\r\n    defaultMessage: 'Search available items',\r\n  },\r\n  addIconAriaLabel:{\r\n    id: 'multiSelectPicker.addIconAriaLabel',\r\n    defaultMessage: 'Add item',\r\n  },\r\n  removeIconAriaLabel: {\r\n    id: 'multiSelectPicker.removeIconAriaLabel',\r\n    defaultMessage: 'Remove item',\r\n  },\r\n  removeAllButtonLabel: {\r\n    id: 'multiSelectPicker.removeAll',\r\n    defaultMessage: 'Remove all',\r\n  },\r\n  addAllButtonLabel: {\r\n    id: 'multiSelectPicker.addAll',\r\n    defaultMessage: 'Add all',\r\n  },\r\n  availableItemsListBoxAriaLabel: {\r\n    id:'multiSelectPicker.availableItemsListBoxAriaLabel',\r\n    defaultMessage: 'Available items',\r\n  },\r\n  selectedItemsPaneAriaLabel: {\r\n    id: 'multiSelectPicker.selectedItemsPaneAriaLabel',\r\n    defaultMessage: 'Selected items'\r\n  }\r\n});","import {\r\n  ActionButton,\r\n  BaseComponent,\r\n  classNamesFunction,\r\n  DelayedRender,\r\n  FocusZone,\r\n  FocusZoneDirection,\r\n  getId,\r\n  Icon,\r\n  IProcessedStyleSet,\r\n  Label,\r\n  Link,\r\n  nullRender,\r\n  SearchBox,\r\n  css,\r\n} from '@fluentui/react';\r\nimport * as React from 'react';\r\nimport { isButtonPressKey } from '../../utils/AccessibilityUtils';\r\nimport { getScreenReaderTextStyles } from '../../utils/GlobalStyleUtils';\r\nimport messages from './MultiSelectPicker.messages';\r\nimport { IIdNamePair, IMultiSelectPickerProps, IMultiSelectPickerStyleProps, IMultiSelectPickerStyles } from './MultiSelectPicker.types';\r\n\r\nconst getClassNames = classNamesFunction<IMultiSelectPickerStyleProps, IMultiSelectPickerStyles>();\r\n\r\nexport interface IMultiSelectPickerState {\r\n  filteredItems: IIdNamePair[];\r\n  selectedItems: IIdNamePair[];\r\n}\r\n\r\nexport class MultiSelectPickerBase extends BaseComponent<IMultiSelectPickerProps, IMultiSelectPickerState> {\r\n  private _classNames: IProcessedStyleSet<IMultiSelectPickerStyles>;\r\n  private _label: string = getId('multiSelectPickerLabel');\r\n\r\n  constructor(props: IMultiSelectPickerProps) {\r\n    super(props);\r\n\r\n    const availableItems = [...this.props.items];\r\n    const selectedItems = this._getIntersection(this.props.items, this.props.initialSelectedItems || []);\r\n    selectedItems.forEach((item) => {\r\n      availableItems.find((i) => i.id === item.id)!!.isSelected = true;\r\n    });\r\n\r\n    this.state = {\r\n      filteredItems: availableItems,\r\n      selectedItems: selectedItems,\r\n    };\r\n  }\r\n\r\n  public componentDidUpdate(prevProps: IMultiSelectPickerProps) {\r\n    let initialSelectedItems = this.state.selectedItems;\r\n\r\n    if (this.props.initialSelectedItems !== prevProps.initialSelectedItems) {\r\n      initialSelectedItems = this.props.initialSelectedItems || [];\r\n    }\r\n\r\n    if (this.props.items !== prevProps.items || this.props.initialSelectedItems !== prevProps.initialSelectedItems) {\r\n      // Make sure only the selected ones which still exists remain selected.\r\n      const intersectedSelectedItems = this._getIntersection(initialSelectedItems, this.props.items);\r\n      const availableItems = [...this.props.items];\r\n\r\n      intersectedSelectedItems.forEach((item) => {\r\n        availableItems.find((i) => i.id === item.id)!!.isSelected = true;\r\n      });\r\n\r\n      this.setState({\r\n        filteredItems: availableItems,\r\n        selectedItems: intersectedSelectedItems,\r\n      });\r\n    }\r\n  }\r\n\r\n  public render(): JSX.Element {\r\n    const {\r\n      styles,\r\n      theme,\r\n      errorMessage,\r\n      label,\r\n      onRenderLabel = this._onRenderLabel,\r\n      ariaDescription,\r\n      enableCreateButton,\r\n      createButtonLabel,\r\n      onCreateButtonClick,\r\n      disabled,\r\n    } = this.props;\r\n    this._classNames = getClassNames(styles, { theme: theme!, hasErrorMessage: !!errorMessage });\r\n    const pickerAriaDescriptionId = getId('pickerAriaDescription');\r\n\r\n    const { formatMessage } = this.props.intl;\r\n\r\n    return (\r\n      <div className={this._classNames.root}>\r\n        {onRenderLabel(this.props, this._onRenderLabel)}\r\n        {enableCreateButton && (\r\n          <ActionButton\r\n            iconProps={{ iconName: 'add' }}\r\n            onClick={onCreateButtonClick}\r\n            disabled={disabled}\r\n            ariaDescription={createButtonLabel ? formatMessage(messages.createButtonAriaDesciption, { label: createButtonLabel }) : ''}\r\n          >\r\n            {createButtonLabel}\r\n          </ActionButton>\r\n        )}\r\n        <div\r\n          className={this._classNames.picker}\r\n          role=\"form\"\r\n          {...(label ? { 'aria-labelledby': this._label } : {})}\r\n          aria-describedby={pickerAriaDescriptionId}\r\n        >\r\n          {this._renderItemsPane()}\r\n          {this._renderSelectedItemsPane()}\r\n          <span id={pickerAriaDescriptionId} style={getScreenReaderTextStyles()}>\r\n            {ariaDescription}\r\n          </span>\r\n        </div>\r\n        {errorMessage && (\r\n          <div role=\"alert\">\r\n            <DelayedRender>\r\n              <p className={this._classNames.errorMessage}>\r\n                <span data-automation-id=\"error-message\">{errorMessage}</span>\r\n              </p>\r\n            </DelayedRender>\r\n          </div>\r\n        )}\r\n      </div>\r\n    );\r\n  }\r\n\r\n  private _onRenderLabel = (props: IMultiSelectPickerProps): JSX.Element | null => {\r\n    const { label, required } = props;\r\n\r\n    if (label) {\r\n      return (\r\n        <Label id={this._label} required={required}>\r\n          {props.label}\r\n        </Label>\r\n      );\r\n    }\r\n\r\n    return null;\r\n  };\r\n\r\n  private _renderSelectedItemsPane = (): JSX.Element => {\r\n    const { selectedItems } = this.state;\r\n    const { disabled } = this.props;\r\n    const selectedCount = selectedItems.length;\r\n    const { formatMessage } = this.props.intl;\r\n    const removeAllAriaDescriptionId = getId('removeAllAriaDescription');\r\n\r\n    let renderRemoveAll = nullRender();\r\n    if (selectedCount > 0) {\r\n      renderRemoveAll = (\r\n        <>\r\n          <Link\r\n            className={this._classNames.textButton}\r\n            onClick={this._onRemoveAll}\r\n            disabled={this.props.disabled}\r\n            aria-describedby={removeAllAriaDescriptionId}\r\n          >\r\n            {formatMessage(messages.removeAllButtonLabel)}\r\n          </Link>\r\n\r\n          <span id={removeAllAriaDescriptionId} style={getScreenReaderTextStyles()}>\r\n            {this.props.intl.formatMessage(messages.removeAllButtonAriaDescription)}\r\n          </span>\r\n        </>\r\n      );\r\n    }\r\n\r\n    return (\r\n      <div className={css(this._classNames.itemsPane, disabled ? this._classNames.disabledPanel : '')} role=\"presentation\">\r\n        <Label className={css(this._classNames.headerLabel, this._classNames.header)}>\r\n          {formatMessage(messages.selectedItemsLabel, { count: selectedCount })}\r\n        </Label>\r\n        {renderRemoveAll}\r\n\r\n        <FocusZone\r\n          role=\"listbox\"\r\n          className={this._classNames.list}\r\n          aria-label={formatMessage(messages.selectedItemsPaneAriaLabel)}\r\n          direction={FocusZoneDirection.vertical}\r\n          isCircularNavigation={true}\r\n        >\r\n          {selectedItems.map((item: IIdNamePair, index: number) => (\r\n            <div\r\n              className={this._classNames.listItem}\r\n              id={getId('multiSelectPickerSelItem')}\r\n              key={'multiSelectPickerItem' + index}\r\n              role=\"option\"\r\n              aria-selected={true}\r\n              onClick={!disabled ? this._onItemRemovedClick : undefined}\r\n              onKeyDown={(ev) => isButtonPressKey(ev.key) && !disabled && this._onItemRemovedClick(ev)}\r\n              data-list-index={index}\r\n              data-is-focusable={!disabled}\r\n              tabIndex={!disabled ? 0 : -1}\r\n            >\r\n              <span className={this._classNames.listItemLabel}>{item.name}</span>\r\n              <Icon\r\n                iconName={'remove'}\r\n                ariaLabel={formatMessage(messages.removeIconAriaLabel)}\r\n                styles={this._classNames.subComponentStyles.iconButton}\r\n              />\r\n            </div>\r\n          ))}\r\n        </FocusZone>\r\n      </div>\r\n    );\r\n  };\r\n\r\n  private _renderItemsPane = (): JSX.Element => {\r\n    const { disabled } = this.props;\r\n    const { formatMessage } = this.props.intl;\r\n    const { filteredItems } = this.state;\r\n    const addAllAriaDescriptionId = getId('addAllAriaDescription');\r\n\r\n    let renderAddAll = nullRender();\r\n    if (filteredItems.length > 0) {\r\n      renderAddAll = (\r\n        <>\r\n          <Link\r\n            className={this._classNames.textButton}\r\n            onClick={this._onAddAll}\r\n            disabled={disabled}\r\n            aria-describedby={addAllAriaDescriptionId}\r\n          >\r\n            {formatMessage(messages.addAllButtonLabel)}\r\n          </Link>\r\n\r\n          <span id={addAllAriaDescriptionId} style={getScreenReaderTextStyles()}>\r\n            {this.props.intl.formatMessage(messages.addAllButtonAriaDescription)}\r\n          </span>\r\n        </>\r\n      );\r\n    }\r\n\r\n    return (\r\n      <div className={css(this._classNames.itemsPane, disabled ? this._classNames.disabledPanel : '')} role=\"presentation\">\r\n        <SearchBox\r\n          styles={this._classNames.subComponentStyles.search}\r\n          underlined={true}\r\n          placeholder={formatMessage(messages.searchBoxPlaceholder)}\r\n          onChange={(_, value: string) => this._onSearchChange(value)}\r\n        />\r\n        <div className={this._classNames.header}>\r\n          <Label className={this._classNames.headerLabel}>\r\n            {formatMessage(messages.filteredItemsLabel, { count: filteredItems.length })}\r\n          </Label>\r\n          {renderAddAll}\r\n        </div>\r\n        <FocusZone\r\n          className={this._classNames.list}\r\n          role=\"listbox\"\r\n          aria-multiselectable={true}\r\n          aria-label={formatMessage(messages.availableItemsListBoxAriaLabel)}\r\n          direction={FocusZoneDirection.vertical}\r\n          isCircularNavigation={true}\r\n        >\r\n          {filteredItems.map((item: IIdNamePair, index: number) => (\r\n            <div\r\n              className={css(this._classNames.listItem, item.isSelected ? this._classNames.disabledListItem : '')}\r\n              id={getId('multiSelectPickerItem')}\r\n              key={'multiSelectPickerItem' + index}\r\n              role=\"option\"\r\n              aria-selected={item.isSelected}\r\n              onClick={!disabled && !item.isSelected ? this._onItemAddedClick : undefined}\r\n              onKeyDown={(ev) => {\r\n                if (isButtonPressKey(ev.key)) {\r\n                  if (!disabled && !item.isSelected) {\r\n                    this._onItemAddedClick(ev);\r\n                  }\r\n                }\r\n              }}\r\n              data-is-focusable={!disabled && !item.isSelected}\r\n              data-list-index={index}\r\n              tabIndex={!disabled ? 0 : -1}\r\n            >\r\n              <span className={this._classNames.listItemLabel}>{item.name}</span>\r\n              {!item.isSelected && (\r\n                <Icon\r\n                  iconName={'add'}\r\n                  ariaLabel={formatMessage(messages.addIconAriaLabel)}\r\n                  styles={this._classNames.subComponentStyles.iconButton}\r\n                />\r\n              )}\r\n            </div>\r\n          ))}\r\n        </FocusZone>\r\n      </div>\r\n    );\r\n  };\r\n\r\n  private _onSearchChange = (query: string): void => {\r\n    const queryName = query.toLocaleLowerCase();\r\n    this.setState({\r\n      filteredItems: this.props.items.filter((item) => {\r\n        const name = item.name;\r\n        return name.toLocaleLowerCase().indexOf(queryName) !== -1;\r\n      }),\r\n    });\r\n  };\r\n\r\n  private _getItemAtElement(\r\n    item: IIdNamePair[],\r\n    ev: React.MouseEvent<HTMLDivElement> | React.KeyboardEvent<HTMLDivElement>\r\n  ): IIdNamePair | undefined {\r\n    const el = ev.currentTarget as HTMLDivElement;\r\n\r\n    if (el.getAttribute('data-list-index')) {\r\n      const index = Number(el.getAttribute('data-list-index'));\r\n      return item[index];\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  private _onItemRemovedClick = (ev: React.MouseEvent<HTMLDivElement> | React.KeyboardEvent<HTMLDivElement>): void => {\r\n    const selectedItems = [...this.state.selectedItems];\r\n    const filteredItems = [...this.state.filteredItems];\r\n    const item = this._getItemAtElement(selectedItems, ev);\r\n\r\n    if (item) {\r\n      const remainingSelectedItems = selectedItems.filter((i) => i !== item);\r\n\r\n      filteredItems.forEach((i) => {\r\n        if (i.id === item.id) {\r\n          i.isSelected = false;\r\n        }\r\n      });\r\n\r\n      this.setState({\r\n        selectedItems: remainingSelectedItems,\r\n        filteredItems: filteredItems,\r\n      });\r\n\r\n      if (this.props.onSelectedItems) {\r\n        this.props.onSelectedItems(remainingSelectedItems);\r\n      }\r\n    }\r\n  };\r\n\r\n  private _onItemAddedClick = (ev: React.MouseEvent<HTMLDivElement> | React.KeyboardEvent<HTMLDivElement>): void => {\r\n    const filterItems = [...this.state.filteredItems];\r\n    const item = this._getItemAtElement(filterItems, ev);\r\n\r\n    if (item && !this.state.selectedItems.find((i) => i.id === item.id)) {\r\n      const selectedItems = [...this.state.selectedItems, item];\r\n\r\n      item.isSelected = true;\r\n\r\n      this.setState({\r\n        selectedItems: selectedItems,\r\n        filteredItems: filterItems,\r\n      });\r\n\r\n      if (this.props.onSelectedItems) {\r\n        this.props.onSelectedItems(selectedItems);\r\n      }\r\n    }\r\n  };\r\n\r\n  private _getIntersection = (collectionA: IIdNamePair[], collectionB: IIdNamePair[]) => {\r\n    return collectionA.filter((selectedItem) => collectionB.some((item) => selectedItem.id === item.id));\r\n  };\r\n\r\n  private _onRemoveAll = (ev: React.MouseEvent<HTMLElement>): void => {\r\n    const filterItems = [...this.state.filteredItems];\r\n    filterItems.map((item) => (item.isSelected = false));\r\n\r\n    // reset items isSelected props on removeAll clicked;\r\n    this.props.items.map((item) => (item.isSelected = false));\r\n    this.setState({\r\n      selectedItems: [],\r\n      filteredItems: filterItems,\r\n    });\r\n\r\n    if (this.props.onSelectedItems) {\r\n      this.props.onSelectedItems([]);\r\n    }\r\n  };\r\n\r\n  private _onAddAll = (): void => {\r\n    const selectedItems = [...this.state.selectedItems];\r\n    const filterItems = [...this.state.filteredItems];\r\n\r\n    filterItems.forEach((item) => {\r\n      if (!item.isSelected) {\r\n        selectedItems.push(item);\r\n      }\r\n      item.isSelected = true;\r\n    });\r\n\r\n    this.setState({\r\n      selectedItems: selectedItems,\r\n      filteredItems: filterItems,\r\n    });\r\n\r\n    if (this.props.onSelectedItems) {\r\n      this.props.onSelectedItems(selectedItems);\r\n    }\r\n  };\r\n}\r\n","import { defineMessages } from 'react-intl';\r\n\r\nexport default defineMessages({\r\n  loadAccountStatusFailed: {\r\n    id: 'loadAccountStatus.failed',\r\n    defaultMessage: 'We’re unable to load your account status.',\r\n  },\r\n  failedToLoadPublisherStatus: {\r\n    id: 'accountData.failedToLoadPublisherStatus',\r\n    defaultMessage: 'Failed to fetch publisher status. Please retry after sometime.',\r\n  },\r\n});\r\n","import { ApiError, handleApiErrors, handleError, UserContext } from '../../../../@data';\r\nimport { buildRequestHeadersWithAuthToken } from '../../../../@data/utils/requestUtils';\r\nimport { uiConfig } from '../../../../config/ui.config';\r\n\r\nexport async function setUserPublisherContext(userContext: UserContext, publisherId: number): Promise<string> {\r\n  const url = uiConfig.getApiBaseAddress() + '/user/context';\r\n  const headers = await buildRequestHeadersWithAuthToken(url, userContext);\r\n\r\n  headers.append('targetCustomerId', JSON.stringify(publisherId));\r\n\r\n  let response: Response;\r\n\r\n  try {\r\n    response = await fetch(url, {\r\n      method: 'POST',\r\n      headers: headers,\r\n    });\r\n\r\n    const responseJson = await response.json();\r\n\r\n    if (!response.ok) {\r\n      return handleApiErrors(response, url);\r\n    }\r\n\r\n    const sessionId = responseJson.data.commonSessionId as string;\r\n    return Promise.resolve(sessionId as string);\r\n  } catch (err) {\r\n    const error = `Failed to fetch user scopes for ${url}. Errors: ${err}`;\r\n    return handleError(new ApiError(500, error), url);\r\n  }\r\n}\r\n","module.exports = __webpack_public_path__ + \"static/media/HorizontalBottomAdPreview.ade3c98f.svg\";","module.exports = __webpack_public_path__ + \"static/media/HorizontalUpperAdPreview.30341d67.svg\";","module.exports = __webpack_public_path__ + \"static/media/SquareBottomAdPreview.104777b9.svg\";","module.exports = __webpack_public_path__ + \"static/media/SquareLeftAdPreview.200be276.svg\";","module.exports = __webpack_public_path__ + \"static/media/VerticalBottomAdPreview.61ec7927.svg\";","module.exports = __webpack_public_path__ + \"static/media/VerticalLeftAdPreview.bad374d2.svg\";","module.exports = __webpack_public_path__ + \"static/media/AutoFitHeight.17b37715.svg\";","module.exports = __webpack_public_path__ + \"static/media/AutoFitWidth.cc56f341.svg\";","module.exports = __webpack_public_path__ + \"static/media/AdUnitStep1.b072ddc2.svg\";","module.exports = __webpack_public_path__ + \"static/media/AdUnitStep2.ab0df0a4.svg\";","module.exports = __webpack_public_path__ + \"static/media/ProfileStep1.1f2568b7.svg\";","module.exports = __webpack_public_path__ + \"static/media/ProfileStep2.c3d5a7bd.svg\";","module.exports = __webpack_public_path__ + \"static/media/ProfileStep3.fdf91708.svg\";","module.exports = __webpack_public_path__ + \"static/media/SiteStep1.9c9d332e.svg\";","module.exports = __webpack_public_path__ + \"static/media/SiteStep2.3253c414.svg\";","module.exports = __webpack_public_path__ + \"static/media/SiteStep3.b1df8a7d.svg\";","module.exports = __webpack_public_path__ + \"static/media/adBlock.63613aca.svg\";","module.exports = __webpack_public_path__ + \"static/media/adsTxt.30e52a8d.svg\";","module.exports = __webpack_public_path__ + \"static/media/mediation.e26df186.svg\";","module.exports = __webpack_public_path__ + \"static/media/mediationIcon.13ff8f01.svg\";","module.exports = __webpack_public_path__ + \"static/media/payment.211f62c0.svg\";","import { DirectionalHint, HoverCard, HoverCardType, mergeStyleSets } from '@fluentui/react';\r\nimport React from 'react';\r\nimport { getClassNames } from '../GridV2.styles';\r\n\r\ninterface ICellInfoCalloutProps {\r\n  children: JSX.Element;\r\n  placement?: DirectionalHint;\r\n  calloutContent: JSX.Element | null;\r\n}\r\n\r\nexport const CellInfoCallout = (props: ICellInfoCalloutProps) => {\r\n  const { children, placement = DirectionalHint.leftTopEdge, calloutContent } = props;\r\n  const { calloutFocusable } = mergeStyleSets(getClassNames());\r\n\r\n  return (\r\n    <HoverCard\r\n      style={{\r\n        width: 360,\r\n        padding: '20px 15px',\r\n      }}\r\n      className={calloutFocusable}\r\n      plainCardProps={{\r\n        directionalHint: placement,\r\n        calloutProps: {\r\n          isBeakVisible: true,\r\n        },\r\n        onRenderPlainCard: () => calloutContent,\r\n      }}\r\n      cardDismissDelay={200}\r\n      instantOpenOnClick\r\n      type={HoverCardType.plain}\r\n      trapFocus={true}\r\n      setInitialFocus\r\n    >\r\n      {children}\r\n    </HoverCard>\r\n  );\r\n};\r\n","module.exports = __webpack_public_path__ + \"static/media/emailLogo.e3207688.svg\";","module.exports = __webpack_public_path__ + \"static/media/emailSentLogo.425fe58f.svg\";","import { InjectedIntl } from 'react-intl';\r\nimport { action, mutatorAction } from 'satcheljs';\r\nimport { RouteName, getPageStore } from '../store/store';\r\n\r\nexport const onCurrentRouteChanged = action(\r\n  'onCurrentRouteChanged',\r\n  (currentRoute: RouteName, formatMessage: InjectedIntl['formatMessage']) => ({ currentRoute, formatMessage })\r\n);\r\n\r\nexport const onPanelOpenChanged = mutatorAction('onPanelOpenChanged', (panelIsOpen: boolean) => {\r\n  getPageStore().panelIsOpen = panelIsOpen;\r\n});\r\n","import { mutator } from 'satcheljs';\r\nimport { onCurrentRouteChanged } from '../actions';\r\nimport { getPageStore } from '../store/store';\r\n\r\nmutator(onCurrentRouteChanged, msg => {\r\n  getPageStore().currentRoute = msg.currentRoute;\r\n});\r\n","import { action } from 'satcheljs';\r\nimport { Account, IStringDictionary } from '../../../../../@data';\r\nimport { IAccountViewModel } from '../store/schema';\r\n\r\nexport const onAccountChanged = action('onAccountChanged', (account: IAccountViewModel) => ({ account }));\r\n\r\nexport const onRawChanged = action('onRawChanged', (value?: Account) => ({ value }));\r\n\r\nexport const onAccountErrorChanged = action('onAccountErrorChanged', (values?: IStringDictionary) => ({ values }));\r\n\r\nexport const onFetchAccountsLoading = action('onFetchAccountsLoading', (isLoading: boolean) => ({ isLoading }));\r\n\r\nexport const onFetchingAccountsData = action('onFetchingAccountsData', (isFetchingData: boolean) => ({ isFetchingData }));\r\n\r\nexport const onAccountsFetched = action('onAccountsFetched', (items: Account[]) => ({ items }));\r\n","import { IDropdownOption } from '@fluentui/react';\r\nimport { History } from 'history';\r\nimport { action } from 'satcheljs';\r\nimport { FormState } from '../../../../../components/Form';\r\n\r\nexport const onFormInitialized = action('onFormInitialized', (mode: FormState, publisherId: string, entityId?: string) => ({\r\n  mode,\r\n  publisherId,\r\n  entityId,\r\n}));\r\n\r\nexport const onFormCancelled = action('onFormCancelled');\r\n\r\nexport const onFormCleared = action('onFormCleared');\r\n\r\nexport const onFormSubmitted = action('onFormSubmitted', (mode: FormState, routeHistory?: History) => ({ mode, routeHistory }));\r\n\r\nexport const onAccountIdChanged = action('onAccountIdChanged', (value: number) => ({ value }));\r\n\r\nexport const onAccountSkuFormMediumChanged = action('onAccountSkuFormMediumChanged', (value: IDropdownOption) => ({ value }));\r\n\r\nexport const onAccountSkuFormSkuChanged = action('onAccountSkuFormSkuChanged', (value: IDropdownOption) => ({ value }));\r\n\r\nexport const onAccountSkuFormCleared = action('onAccountSkuFormCleared');\r\n\r\nexport const onAccountSkuFormSubmitted = action('onAccountSkuFormSubmitted', (mode: FormState, accountId: number) => ({ mode, accountId }));\r\n\r\nexport const onFormAccountNameChanged = action('onFormAccountNameChanged', (value?: string) => ({ value }));\r\n\r\nexport const onFormAccountCurrencyChanged = action('onFormAccountCurrencyChanged', (value?: string) => ({ value }));\r\n\r\nexport const onFormAccountLanguageChanged = action('onFormAccountLanguageChanged', (value: IDropdownOption) => ({ value }));\r\n\r\nexport const onFormAccountPrimaryContactChanged = action('onFormAccountPrimaryContactChanged', (value: IDropdownOption) => ({ value }));\r\n\r\nexport const onFormAccountCountryChanged = action('onFormAccountCountryChanged', (value?: IDropdownOption) => ({\r\n  value,\r\n}));\r\n\r\nexport const onFormAccountTimezoneChanged = action('onFormAccountTimezoneChanged', (value?: IDropdownOption) => ({\r\n  value,\r\n}));\r\n\r\nexport const onFormAccountPaymentOptionChanged = action('onFormAccountPaymentOptionChanged', (value?: IDropdownOption) => ({\r\n  value,\r\n}));\r\n\r\nexport const onFormAccountFinancialStatusChanged = action('onFormAccountFinancialStatusChanged', (value?: IDropdownOption) => ({\r\n  value,\r\n}));\r\n\r\nexport const onFormAccountPaymentLifeCycleStatusChanged = action(\r\n  'onFormAccountPaymentLifeCycleStatusChanged',\r\n  (value?: IDropdownOption) => ({\r\n    value,\r\n  })\r\n);\r\n\r\nexport const onFormAccountOperationRatioChanged = action('onFormAccountOperationRatioChanged', (value?: string) => ({\r\n  value,\r\n}));\r\n\r\nexport const onFormAccountAllowPassedURLChanged = action('onFormAccountAllowPassedURLChanged', (value?: boolean) => ({\r\n  value,\r\n}));\r\n\r\nexport const onFormAccountAllowPassedKeywordChanged = action('onFormAccountAllowPassedKeywordChanged', (value?: boolean) => ({\r\n  value,\r\n}));\r\n\r\nexport const onFormAccountAllowCrawlingChanged = action('onFormAccountAllowCrawlingChanged', (value?: boolean) => ({\r\n  value,\r\n}));\r\nexport const onFormAccountAllowAdultAdsChanged = action('onFormAccountAllowAdultAdsChanged', (value?: boolean) => ({\r\n  value,\r\n}));\r\n\r\nexport const onFormAccountAllowGlobalDefaultKeywordsChanged = action(\r\n  'onFormAccountAllowGlobalDefaultKeywordsChanged',\r\n  (value?: boolean) => ({\r\n    value,\r\n  })\r\n);\r\n\r\nexport const onFormAccountAllowMeteredCallExtensionsChanged = action(\r\n  'onFormAccountAllowMeteredCallExtensionsChanged',\r\n  (value?: boolean) => ({\r\n    value,\r\n  })\r\n);\r\n\r\nexport const onFormAccountAllowLocationExtensionsChanged = action('onFormAccountAllowLocationExtensionsChanged', (value?: boolean) => ({\r\n  value,\r\n}));\r\n\r\nexport const onFormAccountAllowPhoneExtensionsChanged = action('onFormAccountAllowPhoneExtensionsChanged', (value?: boolean) => ({\r\n  value,\r\n}));\r\n\r\nexport const onFormAccountAllowMerchantRatingExtensionsChanged = action(\r\n  'onFormAccountAllowMerchantRatingExtensionsChanged',\r\n  (value?: boolean) => ({\r\n    value,\r\n  })\r\n);\r\n\r\nexport const onFormAccountAllowLocalExtensionsChanged = action('onFormAccountAllowLocalExtensionsChanged', (value?: boolean) => ({\r\n  value,\r\n}));\r\n\r\nexport const onFormAccountAllowCallExtensionsChanged = action('onFormAccountAllowCallExtensionsChanged', (value?: boolean) => ({\r\n  value,\r\n}));\r\n\r\nexport const onFormAccountAllowSiteLinkExtensionsChanged = action('onFormAccountAllowSiteLinkExtensionsChanged', (value?: boolean) => ({\r\n  value,\r\n}));\r\n\r\nexport const onFormAccountStoreIdsChanged = action('onFormAccountStoreIdsChanged', (values?: string) => ({ values }));\r\n\r\nexport const onFormAccountPartnerCodesChanged = action('onFormAccountPartnerCodesChanged', (values?: string) => ({ values }));\r\n\r\nexport const onFormAccountFormCodesChanged = action('onFormAccountFormCodesChanged', (values?: string) => ({ values }));\r\n\r\nexport const onFormAccountStartDistributionPlacementCodesChanged = action(\r\n  'onFormAccountStartDistributionPlacementCodesChanged',\r\n  (values?: string) => ({ values })\r\n);\r\n\r\nexport const onFormAccountStartDistributionOCIDL2sChanged = action('onFormAccountStartDistributionOCIDL2sChanged', (values?: string) => ({\r\n  values,\r\n}));\r\n\r\nexport const onFormAccountStartDistributionNativeAdsInFeedsAndHeadlinesRevenueSharePercentageChanged = action(\r\n  'onFormAccountStartDistributionNativeAdsInFeedsAndHeadlinesRevenueSharePercentageChanged',\r\n  (value?: string) => ({ value })\r\n);\r\n","import { action } from 'satcheljs';\r\nimport { AccountSKU } from '../../../../../@data';\r\nimport { ISkuSidePanelProps } from '../../Create/CreateAccount.types';\r\nimport { IAccountSkuViewModel } from '../store/schema/IAccountSkuViewModel';\r\n\r\nexport const onAccountSkuSidePanelInitialized = action('onAccountSkuSidePanelInitialized', (value?: ISkuSidePanelProps) => ({ value }));\r\n\r\nexport const onAccountSkuChanged = action('onAccountSkuChanged', (value?: IAccountSkuViewModel) => ({ value }));\r\n\r\nexport const onAccountSkusChanged = action('onAccountSkusChanged', (value?: AccountSKU[]) => {\r\n  return { value };\r\n});\r\n","import { action } from 'satcheljs';\r\n\r\nexport const onManagePageInitialized = action('onManagePageInitialized');\r\n","import { createStore } from 'satcheljs';\r\nimport { IAccountViewState } from './schema/IAccountViewState';\r\n\r\nexport const getStore = createStore<IAccountViewState>('AccountState', {\r\n  active: {},\r\n  errors: {},\r\n  enablePrivateMarketplace: false,\r\n});\r\n","import { mutator } from 'satcheljs';\r\nimport { Account } from '../../../../../@data';\r\nimport { mergeTypeWithObject } from '../../../../../utils';\r\nimport {\r\n  onAccountChanged,\r\n  onAccountErrorChanged,\r\n  onAccountSkuChanged,\r\n  onAccountSkusChanged,\r\n  onAccountsFetched,\r\n  onFetchAccountsLoading,\r\n  onFetchingAccountsData,\r\n  onRawChanged,\r\n} from '../actions';\r\nimport { getStore } from '../store/store';\r\n\r\nmutator(onAccountChanged, (msg) => {\r\n  getStore().active = msg.account;\r\n});\r\n\r\nmutator(onAccountSkuChanged, (msg) => {\r\n  getStore().accountSku = msg.value;\r\n});\r\n\r\nmutator(onAccountSkusChanged, (msg) => {\r\n  getStore().active.skus = msg.value;\r\n});\r\n\r\nmutator(onRawChanged, (msg) => {\r\n  getStore().raw = mergeTypeWithObject(new Account(), msg.value);\r\n});\r\n\r\nmutator(onAccountErrorChanged, (msg) => {\r\n  getStore().errors = msg.values || {};\r\n});\r\n\r\nmutator(onFetchAccountsLoading, (msg) => {\r\n  getStore().isLoading = msg.isLoading;\r\n});\r\n\r\nmutator(onFetchingAccountsData, (msg) => {\r\n  getStore().isFetchingData = msg.isFetchingData;\r\n});\r\n\r\nmutator(onAccountsFetched, (msg) => {\r\n  getStore().accounts = msg.items;\r\n});\r\n","export const countryToCurrencyMap = {\r\n  AE: 'EUR',\r\n  AF: 'USD',\r\n  AG: 'XCD',\r\n  AL: 'USD',\r\n  AM: 'USD',\r\n  AO: 'USD',\r\n  AR: 'USD',\r\n  AT: 'EUR',\r\n  AU: 'AUD',\r\n  AZ: 'AZN',\r\n  BA: 'USD',\r\n  BD: 'BDT',\r\n  BE: 'EUR',\r\n  BF: 'XOF',\r\n  BG: 'BGN',\r\n  BH: 'BHD',\r\n  BI: 'USD',\r\n  BJ: 'XOF',\r\n  BO: 'USD',\r\n  BR: 'USD',\r\n  BW: 'BWP',\r\n  BY: 'USD',\r\n  CA: 'CAD',\r\n  CD: 'USD',\r\n  CF: 'XAF',\r\n  CG: 'XAF',\r\n  CH: 'CHF',\r\n  CI: 'XOF',\r\n  CL: 'CLP',\r\n  CM: 'XAF',\r\n  CN: 'USD',\r\n  CO: 'COP',\r\n  CR: 'CRC',\r\n  CY: 'EUR',\r\n  CZ: 'CZK',\r\n  DE: 'EUR',\r\n  DK: 'DKK',\r\n  DM: 'XCD',\r\n  DO: 'DOP',\r\n  DZ: 'USD',\r\n  EC: 'USD',\r\n  EE: 'EUR',\r\n  EG: 'EGP',\r\n  ER: 'USD',\r\n  ES: 'EUR',\r\n  ET: 'ETB',\r\n  FI: 'EUR',\r\n  FJ: 'FJD',\r\n  FR: 'EUR',\r\n  GB: 'GBP',\r\n  GE: 'USD',\r\n  GH: 'GHS',\r\n  GN: 'USD',\r\n  GR: 'EUR',\r\n  GT: 'GTQ',\r\n  HK: 'HKD',\r\n  HN: 'USD',\r\n  HR: 'HRK',\r\n  HT: 'USD',\r\n  HU: 'HUF',\r\n  ID: 'IDR',\r\n  IE: 'EUR',\r\n  IL: 'ILS',\r\n  IN: 'INR',\r\n  IQ: 'USD',\r\n  IS: 'USD',\r\n  IT: 'EUR',\r\n  JM: 'JMD',\r\n  JO: 'JOD',\r\n  JP: 'JPY',\r\n  KE: 'KES',\r\n  KH: 'USD',\r\n  KM: 'USD',\r\n  KR: 'KRW',\r\n  KW: 'KWD',\r\n  KZ: 'KZT',\r\n  LA: 'USD',\r\n  LB: 'LBP',\r\n  LI: 'CHF',\r\n  LK: 'LKR',\r\n  LR: 'USD',\r\n  LT: 'EUR',\r\n  LU: 'EUR',\r\n  LV: 'LVL',\r\n  MA: 'MAD',\r\n  MC: 'EUR',\r\n  ME: 'EUR',\r\n  MG: 'USD',\r\n  MK: 'USD',\r\n  ML: 'XOF',\r\n  MN: 'USD',\r\n  MT: 'EUR',\r\n  MU: 'MUR',\r\n  MW: 'MWK',\r\n  MX: 'MXN',\r\n  MY: 'USD',\r\n  MZ: 'USD',\r\n  NE: 'XOF',\r\n  NG: 'NGN',\r\n  NI: 'USD',\r\n  NL: 'EUR',\r\n  NO: 'NOK',\r\n  NP: 'USD',\r\n  NZ: 'NZD',\r\n  OM: 'OMR',\r\n  PA: 'USD',\r\n  PE: 'PEN',\r\n  PH: 'PHP',\r\n  PK: 'PKR',\r\n  PL: 'PLN',\r\n  PT: 'EUR',\r\n  PY: 'USD',\r\n  QA: 'QAR',\r\n  RO: 'USD',\r\n  RS: 'USD',\r\n  RU: 'RUB',\r\n  RW: 'RWF',\r\n  SA: 'SAR',\r\n  SE: 'SEK',\r\n  SG: 'SGD',\r\n  SI: 'EUR',\r\n  SK: 'EUR',\r\n  SL: 'USD',\r\n  SN: 'XOF',\r\n  SO: 'USD',\r\n  SV: 'USD',\r\n  TD: 'XAF',\r\n  TG: 'XOF',\r\n  TH: 'THB',\r\n  TJ: 'USD',\r\n  TL: 'USD',\r\n  TM: 'USD',\r\n  TN: 'TND',\r\n  TO: 'TOP',\r\n  TR: 'TRY',\r\n  TT: 'TTD',\r\n  TW: 'TWD',\r\n  TZ: 'TZS',\r\n  UA: 'USD',\r\n  UG: 'UGX',\r\n  US: 'USD',\r\n  UY: 'UYU',\r\n  UZ: 'USD',\r\n  VC: 'XCD',\r\n  VE: 'USD',\r\n  VN: 'VND',\r\n  ZA: 'ZAR',\r\n  ZM: 'ZMW',\r\n  ZW: 'USD'\r\n};\r\n","import { mutator } from 'satcheljs';\r\nimport { MediaType, PaymentInstrumentLifeCycleStatus, PaymentOption } from '../../../../../@data';\r\nimport { FinancialStatus } from '../../../../../@data/store/schema/enums/FinancialStatus';\r\nimport { countryToCurrencyMap } from '../../../../../config/countryToCurrencyMapper.config';\r\nimport {\r\n  onAccountIdChanged,\r\n  onAccountSkuFormCleared,\r\n  onAccountSkuFormMediumChanged,\r\n  onAccountSkuFormSkuChanged,\r\n  onFormAccountAllowAdultAdsChanged,\r\n  onFormAccountAllowCallExtensionsChanged,\r\n  onFormAccountAllowCrawlingChanged,\r\n  onFormAccountAllowGlobalDefaultKeywordsChanged,\r\n  onFormAccountAllowLocalExtensionsChanged,\r\n  onFormAccountAllowLocationExtensionsChanged,\r\n  onFormAccountAllowMerchantRatingExtensionsChanged,\r\n  onFormAccountAllowMeteredCallExtensionsChanged,\r\n  onFormAccountAllowPassedKeywordChanged,\r\n  onFormAccountAllowPassedURLChanged,\r\n  onFormAccountAllowPhoneExtensionsChanged,\r\n  onFormAccountAllowSiteLinkExtensionsChanged,\r\n  onFormAccountCountryChanged,\r\n  onFormAccountCurrencyChanged,\r\n  onFormAccountFinancialStatusChanged,\r\n  onFormAccountFormCodesChanged,\r\n  onFormAccountLanguageChanged,\r\n  onFormAccountNameChanged,\r\n  onFormAccountOperationRatioChanged,\r\n  onFormAccountPartnerCodesChanged,\r\n  onFormAccountPaymentLifeCycleStatusChanged,\r\n  onFormAccountPaymentOptionChanged,\r\n  onFormAccountPrimaryContactChanged,\r\n  onFormAccountStartDistributionNativeAdsInFeedsAndHeadlinesRevenueSharePercentageChanged,\r\n  onFormAccountStartDistributionOCIDL2sChanged,\r\n  onFormAccountStartDistributionPlacementCodesChanged,\r\n  onFormAccountStoreIdsChanged,\r\n  onFormAccountTimezoneChanged,\r\n  onFormCleared,\r\n} from '../actions';\r\nimport { getStore } from '../store/store';\r\n\r\nmutator(onAccountIdChanged, (msg) => {\r\n  getStore().active.id = msg.value;\r\n});\r\n\r\nmutator(onFormAccountNameChanged, (msg) => {\r\n  getStore().active.name = msg.value;\r\n});\r\n\r\nmutator(onFormAccountCurrencyChanged, (msg) => {\r\n  const countyCode = getStore().active.countryCode!;\r\n  getStore().active.currencyCode = countryToCurrencyMap[countyCode];\r\n});\r\n\r\nmutator(onFormCleared, () => {\r\n  getStore().active = {};\r\n});\r\n\r\nmutator(onAccountSkuFormMediumChanged, (msg) => {\r\n  getStore().accountSku!.medium = msg.value.key as MediaType;\r\n});\r\n\r\nmutator(onAccountSkuFormSkuChanged, (msg) => {\r\n  getStore().accountSku!.sku = msg.value.key as string;\r\n});\r\n\r\nmutator(onAccountSkuFormCleared, () => {\r\n  getStore().accountSku = undefined;\r\n});\r\n\r\nmutator(onFormAccountCountryChanged, (msg) => {\r\n  getStore().active.countryCode = msg.value!!.key as string;\r\n});\r\n\r\nmutator(onFormAccountLanguageChanged, (msg) => {\r\n  getStore().active.languageCode = msg.value.key as string;\r\n});\r\n\r\nmutator(onFormAccountPrimaryContactChanged, (msg) => {\r\n  getStore().active.primaryContactUserId = msg.value.key as number;\r\n});\r\n\r\nmutator(onFormAccountTimezoneChanged, (msg) => {\r\n  getStore().active.timeZoneId = msg.value!!.key as number;\r\n});\r\n\r\nmutator(onFormAccountPaymentOptionChanged, (msg) => {\r\n  getStore().active.paymentOption = msg.value!!.key as PaymentOption;\r\n});\r\n\r\nmutator(onFormAccountFinancialStatusChanged, (msg) => {\r\n  getStore().active.financialStatus = msg.value!!.key as FinancialStatus;\r\n});\r\n\r\nmutator(onFormAccountPaymentLifeCycleStatusChanged, (msg) => {\r\n  getStore().active.paymentLifeCycleStatus = msg.value!!.key as PaymentInstrumentLifeCycleStatus;\r\n});\r\n\r\nmutator(onFormAccountOperationRatioChanged, (msg) => {\r\n  getStore().active.operationRatio = Number(msg.value as string);\r\n});\r\n\r\nmutator(onFormAccountAllowPassedURLChanged, (msg) => {\r\n  getStore().active.allowPassedURL = msg.value;\r\n});\r\n\r\nmutator(onFormAccountAllowPassedKeywordChanged, (msg) => {\r\n  getStore().active.allowPassedKeyword = msg.value;\r\n});\r\n\r\nmutator(onFormAccountAllowCrawlingChanged, (msg) => {\r\n  getStore().active.allowCrawling = msg.value;\r\n});\r\n\r\nmutator(onFormAccountAllowAdultAdsChanged, (msg) => {\r\n  getStore().active.allowAdultAds = msg.value;\r\n});\r\n\r\nmutator(onFormAccountAllowGlobalDefaultKeywordsChanged, (msg) => {\r\n  getStore().active.allowGlobalDefaultKeywords = msg.value;\r\n});\r\n\r\nmutator(onFormAccountAllowMeteredCallExtensionsChanged, (msg) => {\r\n  getStore().active.allowMeteredCallExtensions = msg.value;\r\n});\r\n\r\nmutator(onFormAccountAllowLocationExtensionsChanged, (msg) => {\r\n  getStore().active.allowLocationExtensions = msg.value;\r\n});\r\n\r\nmutator(onFormAccountAllowPhoneExtensionsChanged, (msg) => {\r\n  getStore().active.allowPhoneExtensions = msg.value;\r\n});\r\n\r\nmutator(onFormAccountAllowMerchantRatingExtensionsChanged, (msg) => {\r\n  getStore().active.allowMerchantRatingExtensions = msg.value;\r\n});\r\n\r\nmutator(onFormAccountAllowLocalExtensionsChanged, (msg) => {\r\n  getStore().active.allowLocalExtensions = msg.value;\r\n});\r\n\r\nmutator(onFormAccountAllowCallExtensionsChanged, (msg) => {\r\n  getStore().active.allowCallExtensions = msg.value;\r\n});\r\n\r\nmutator(onFormAccountAllowSiteLinkExtensionsChanged, (msg) => {\r\n  getStore().active.allowSiteLinkExtensions = msg.value;\r\n});\r\n\r\nmutator(onFormAccountStoreIdsChanged, (msg) => {\r\n  getStore().active.storeIds = msg.values;\r\n});\r\n\r\nmutator(onFormAccountPartnerCodesChanged, (msg) => {\r\n  getStore().active.partnerCodes = msg.values;\r\n});\r\n\r\nmutator(onFormAccountFormCodesChanged, (msg) => {\r\n  getStore().active.formCodes = msg.values;\r\n});\r\n\r\nmutator(onFormAccountStartDistributionPlacementCodesChanged, (msg) => {\r\n  getStore().active.startDistributionPlacementCodes = msg.values;\r\n});\r\n\r\nmutator(onFormAccountStartDistributionOCIDL2sChanged, (msg) => {\r\n  getStore().active.startDistributionOCIDL2s = msg.values;\r\n});\r\n\r\nmutator(onFormAccountStartDistributionNativeAdsInFeedsAndHeadlinesRevenueSharePercentageChanged, (msg) => {\r\n  getStore().active.startDistributionNativeAdsInFeedsAndHeadlinesRevenueSharePercentage =\r\n    msg.value !== null && msg.value !== undefined ? (isNaN(parseFloat(msg.value)) ? undefined : parseFloat(msg.value)) : undefined;\r\n});\r\n","import { MessageBarType } from '@fluentui/react';\r\nimport { orchestrator } from 'satcheljs';\r\nimport { AccountSKU, getAppStore, onNotificationChanged, onSavingChanged, postEntity, putEntity } from '../../../../../@data';\r\nimport { FormState } from '../../../../../components/Form';\r\nimport { INotificationBarItem } from '../../../../../components/NotificationBar';\r\nimport { onAccountSkuFormCleared, onAccountSkuFormSubmitted, onAccountSkusChanged } from '../actions';\r\nimport { fetchAllMediumAccountSkus } from '../services/AccountService';\r\nimport { getStore } from '../store/store';\r\n\r\norchestrator(onAccountSkuFormSubmitted, async (msg) => {\r\n  const { publisher, userContext } = getAppStore();\r\n  const { accountSku } = getStore();\r\n\r\n  let notification: INotificationBarItem = {};\r\n\r\n  if (publisher && accountSku) {\r\n    const body: AccountSKU = {\r\n      accountId: accountSku.accountId || msg.accountId,\r\n      medium: accountSku.medium!,\r\n      sku: accountSku.sku!,\r\n      apiPath: undefined,\r\n      className: 'accountSku',\r\n    };\r\n\r\n    onSavingChanged(true);\r\n\r\n    try {\r\n      if (msg.mode === FormState.InPageEdit) {\r\n        await putEntity([publisher], body, userContext, AccountSKU);\r\n        notification = {\r\n          text: `Edited account SKU mapping ${accountSku.accountId} success`,\r\n          messageBarType: MessageBarType.success,\r\n        };\r\n      } else if (msg.mode === FormState.InPageCreate) {\r\n        await postEntity([publisher], AccountSKU, body, userContext);\r\n\r\n        notification = {\r\n          text: `Created new account SKU mapping ${msg.accountId} success`,\r\n          messageBarType: MessageBarType.success,\r\n        };\r\n      }\r\n      const accountSkus = await fetchAllMediumAccountSkus(publisher, String(body.accountId), userContext);\r\n      onAccountSkusChanged(accountSkus.mediumMappedSkus);\r\n      onAccountSkuFormCleared();\r\n    } catch (e) {\r\n      notification = {\r\n        text: `Submitting the account SKU mapping form \"${FormState[msg.mode]}\" caught an error \"${e}\"`,\r\n        messageBarType: MessageBarType.error,\r\n      };\r\n    } finally {\r\n      onSavingChanged(false);\r\n    }\r\n  } else {\r\n    notification = {\r\n      text: `Account SKU mapping  \"${FormState[msg.mode]}\" is invalid.`,\r\n      messageBarType: MessageBarType.warning,\r\n    };\r\n  }\r\n  onNotificationChanged(notification);\r\n});\r\n","import { orchestrator } from 'satcheljs';\r\nimport { onLoadingChanged } from '../../../../../@data';\r\nimport { getSupportedAccountSkus } from '../../../../../@data/services/MetadataService';\r\nimport { FormState } from '../../../../../components/Form';\r\nimport { onPanelOpenChanged } from '../../../@data/actions';\r\nimport { onAccountSkuChanged, onAccountSkuSidePanelInitialized } from '../actions';\r\nimport { IAccountSkuViewModel } from '../store/schema/IAccountSkuViewModel';\r\n\r\norchestrator(onAccountSkuSidePanelInitialized, async (msg) => {\r\n  const panelProps = msg.value;\r\n\r\n  if (panelProps) {\r\n    onLoadingChanged(true);\r\n    const accountSku: IAccountSkuViewModel = {};\r\n    if (panelProps.mode === FormState.InPageEdit) {\r\n      if (panelProps.selectedAccountSku) {\r\n        accountSku.accountId = panelProps.selectedAccountSku.accountId;\r\n        accountSku.medium = panelProps.selectedAccountSku.medium;\r\n        accountSku.sku = panelProps.selectedAccountSku.sku;\r\n        accountSku.listOfMediums = [panelProps.selectedAccountSku.medium.toString()];\r\n      }\r\n    } else {\r\n      accountSku.listOfMediums = panelProps.nonSKUMappedMediums;\r\n    }\r\n\r\n    accountSku.availableSkus = await getSupportedAccountSkus();\r\n\r\n    onAccountSkuChanged(accountSku);\r\n    onLoadingChanged(false);\r\n    onPanelOpenChanged(true);\r\n  } else {\r\n    // error handling\r\n  }\r\n});\r\n","import { orchestrator } from 'satcheljs';\r\nimport { onFormCancelled, onFormCleared } from '../actions';\r\n\r\norchestrator(onFormCancelled, async () => {\r\n  onFormCleared();\r\n});","export enum AdExtensionType {\r\n  SiteLink = 'SiteLink',\r\n  Phone = 'Phone',\r\n  Local = 'Local',\r\n  Location = 'Location',\r\n  Call = 'Call',\r\n  MeteredCall = 'MeteredCall',\r\n  MerchantRatings = 'MerchantRatings'\r\n}\r\n","export enum FinancialStatus {\r\n  // Proposed = 'Proposed',\r\n  // PendingCreditCheck = 'PendingCreditCheck',\r\n  NoHold = 'NoHold',\r\n  Hold = 'Hold',\r\n  // SoldToOnly = 'SoldToOnly',\r\n  // CreditHold = 'CreditHold',\r\n  // CreditWarning = 'CreditWarning',\r\n  TaxOnHold = 'TaxOnHold',\r\n  UserHold = 'UserHold'\r\n  // WriteOff = 'WriteOff'\r\n}\r\n","import { IChoiceGroupOption } from '@fluentui/react';\r\nimport { mutatorAction } from 'satcheljs';\r\nimport { PrivateMarketplace } from '../../../../../@data';\r\nimport { getStore } from '../store/store';\r\n\r\nexport const onAccountPrivateMarketplaceChanged = mutatorAction(\r\n  'onAccountPrivateMarketplaceChanged',\r\n  (privateMarketplace: IChoiceGroupOption) => {\r\n    getStore().privateMarketplace = privateMarketplace.key as PrivateMarketplace;\r\n    getStore().enablePrivateMarketplace = true;\r\n  }\r\n);\r\n\r\nexport const onAccountEnablePrivateMarketplaceChanged = mutatorAction(\r\n  'onAccountEnablePrivateMarketplaceChanged',\r\n  (enablePrivateMarketplace: boolean) => {\r\n    getStore().enablePrivateMarketplace = enablePrivateMarketplace;\r\n  }\r\n);\r\n","import { MessageBarType } from '@fluentui/react';\r\nimport { orchestrator } from 'satcheljs';\r\nimport {\r\n  getAppStore,\r\n  getEntity,\r\n  LifeCycleStatus,\r\n  onLoadingChanged,\r\n  onLoadingSetting,\r\n  onLoadingWaiting,\r\n  onNotificationChanged,\r\n  PaymentInstrumentLifeCycleStatus,\r\n  PaymentOption,\r\n  Publisher,\r\n} from '../../../../../@data';\r\nimport { getSupportedCountries, getSupportedLanguages, getSupportedTimezones } from '../../../../../@data/services/MetadataService';\r\nimport { AccountProfileFeature } from '../../../../../@data/store/schema/enums/AccountProfileFeature';\r\nimport { AdExtensionType } from '../../../../../@data/store/schema/enums/AdExtensionType';\r\nimport { FinancialStatus } from '../../../../../@data/store/schema/enums/FinancialStatus';\r\nimport { FormState } from '../../../../../components/Form';\r\nimport { countryToCurrencyMap } from '../../../../../config/countryToCurrencyMapper.config';\r\nimport { setPublisherContext } from '../../../@data/service/PartnerManagementService';\r\nimport { onAccountChanged, onFormInitialized, onRawChanged } from '../actions';\r\nimport { onAccountEnablePrivateMarketplaceChanged } from '../mutatorActions';\r\nimport { fetchAccountById, fetchAllAvailableUsers, fetchAllMediumAccountSkus } from '../services/AccountService';\r\nimport { IAccountViewModel } from '../store/schema';\r\n\r\norchestrator(onFormInitialized, async (msg) => {\r\n  const { userContext } = getAppStore();\r\n  try {\r\n    const publisherId = parseInt(msg.publisherId, 10);\r\n    if (!isNaN(publisherId)) {\r\n      const publisher = new Publisher(publisherId);\r\n      const account: IAccountViewModel = {};\r\n      setPublisherContext(publisher);\r\n      onLoadingChanged(true);\r\n      onLoadingSetting(false);\r\n      const timeout = 30000;\r\n      const id = setTimeout(() => onLoadingWaiting(true), timeout);\r\n\r\n      const rawPublisher = await getEntity<Publisher>([publisher], userContext);\r\n      account.availableLanguages = await getSupportedLanguages();\r\n      account.availableTimezones = await getSupportedTimezones();\r\n      account.availableCountries = await getSupportedCountries(rawPublisher.serviceLevel!);\r\n      account.availableUsers = await fetchAllAvailableUsers(publisher, userContext);\r\n      account.isDistributionReportingApplicable = rawPublisher.allowDistributionReporting || rawPublisher.allowDistributionV2Reporting;\r\n      clearTimeout(id);\r\n      account.isStartDistributionReportingApplicable = rawPublisher.allowStartDistributionReporting;\r\n      account.isStartDistributionContentReportingApplicable = rawPublisher.allowStartDistributionContentReporting;\r\n\r\n      account.primaryContactUserId = account.availableUsers && account.availableUsers.length > 0 ? account.availableUsers[0].id : undefined;\r\n      account.languageCode = account.availableLanguages && account.availableLanguages.length > 0 ? 'EN' : undefined;\r\n      account.countryCode = account.availableCountries && account.availableCountries.length > 0 ? 'US' : undefined;\r\n      account.currencyCode = account.countryCode && countryToCurrencyMap[account.countryCode];\r\n      account.timeZoneId = account.availableTimezones && account.availableTimezones.length > 0 ? 75 : undefined;\r\n\r\n      account.status = LifeCycleStatus.Active;\r\n      account.paymentOption = PaymentOption.MonthlyThreshold;\r\n      account.financialStatus = FinancialStatus.TaxOnHold;\r\n      account.paymentLifeCycleStatus = PaymentInstrumentLifeCycleStatus.Validated;\r\n      account.revenueSharePercentage = 100;\r\n      account.operationRatio = 0;\r\n      account.allowGlobalDefaultKeywords = true;\r\n      account.allowPassedKeyword = true;\r\n      account.allowCallExtensions = true;\r\n      account.allowSiteLinkExtensions = true;\r\n      account.allowLocationExtensions = true;\r\n      account.allowMeteredCallExtensions = true;\r\n      account.allowMerchantRatingExtensions = true;\r\n\r\n      if (msg.mode === FormState.Edit && msg.entityId) {\r\n        const rawaccount = await fetchAccountById(publisher, msg.entityId, userContext);\r\n        const accountSkuInfo = await fetchAllMediumAccountSkus(publisher, msg.entityId, userContext);\r\n\r\n        account.id = rawaccount.id;\r\n        account.name = String(rawaccount.name);\r\n        account.number = rawaccount.number;\r\n        account.primaryContactUserId = rawaccount.primaryContactUserId;\r\n        account.status = rawaccount.status;\r\n        account.countryCode = rawaccount.countryCode;\r\n        account.languageCode = rawaccount.languageCode;\r\n        account.currencyCode = rawaccount.currencyCode;\r\n        account.timeZoneId = rawaccount.timeZoneId;\r\n        account.adDeliverySettings = rawaccount.adDeliverySettings;\r\n        account.additionalMarkets = rawaccount.additionalMarkets;\r\n\r\n        if (rawaccount.paymentInformation) {\r\n          account.financialStatus = rawaccount.paymentInformation.financialStatus;\r\n          account.paymentLifeCycleStatus = rawaccount.paymentInformation.paymentInstrumentationLifeCycleStatus;\r\n          account.paymentOption = rawaccount.paymentInformation.paymentOption;\r\n          account.operationRatio = rawaccount.paymentInformation.operationCostRatio;\r\n          account.revenueSharePercentage = rawaccount.paymentInformation.revenueSharePercentage;\r\n        }\r\n\r\n        if (rawaccount.enabledFeatures) {\r\n          account.allowGlobalDefaultKeywords = rawaccount.enabledFeatures.some(\r\n            (enFeature) => enFeature === AccountProfileFeature.EnableGlobalDefaultKeywords\r\n          );\r\n          account.allowAdultAds = rawaccount.enabledFeatures.some((enFeature) => enFeature === AccountProfileFeature.EnableAdultAds);\r\n          account.allowCrawling = rawaccount.enabledFeatures.some((enFeature) => enFeature === AccountProfileFeature.EnableCrawling);\r\n          account.allowPassedURL = rawaccount.enabledFeatures.some((enFeature) => enFeature === AccountProfileFeature.EnablePassedUrls);\r\n          account.allowPassedKeyword = rawaccount.enabledFeatures.some(\r\n            (enFeature) => enFeature === AccountProfileFeature.EnablePassedKeywords\r\n          );\r\n        }\r\n\r\n        if (rawaccount.adExtensionOptions) {\r\n          account.allowSiteLinkExtensions = rawaccount.adExtensionOptions.some(\r\n            (adExtension) => adExtension.type === AdExtensionType.SiteLink && adExtension.enabled === true\r\n          );\r\n          account.allowPhoneExtensions = rawaccount.adExtensionOptions.some(\r\n            (adExtension) => adExtension.type === AdExtensionType.Phone && adExtension.enabled === true\r\n          );\r\n          account.allowLocalExtensions = rawaccount.adExtensionOptions.some(\r\n            (adExtension) => adExtension.type === AdExtensionType.Local && adExtension.enabled === true\r\n          );\r\n          account.allowLocationExtensions = rawaccount.adExtensionOptions.some(\r\n            (adExtension) => adExtension.type === AdExtensionType.Location && adExtension.enabled === true\r\n          );\r\n          account.allowMeteredCallExtensions = rawaccount.adExtensionOptions.some(\r\n            (adExtension) => adExtension.type === AdExtensionType.MeteredCall && adExtension.enabled === true\r\n          );\r\n          account.allowMerchantRatingExtensions = rawaccount.adExtensionOptions.some(\r\n            (adExtension) => adExtension.type === AdExtensionType.MerchantRatings && adExtension.enabled === true\r\n          );\r\n          account.allowCallExtensions = rawaccount.adExtensionOptions.some(\r\n            (adExtension) => adExtension.type === AdExtensionType.Call && adExtension.enabled === true\r\n          );\r\n        }\r\n\r\n        if (rawaccount.storeIds && rawaccount.storeIds.length > 0) {\r\n          account.storeIds = rawaccount.storeIds.join('\\n');\r\n        }\r\n        if (rawaccount.partnerCodes && rawaccount.partnerCodes.length > 0) {\r\n          account.partnerCodes = rawaccount.partnerCodes.join('\\n');\r\n        }\r\n        if (rawaccount.formCodes && rawaccount.formCodes.length > 0) {\r\n          account.formCodes = rawaccount.formCodes.join('\\n');\r\n        }\r\n        if (rawaccount.startDistributionPlacementCodes && rawaccount.startDistributionPlacementCodes.length > 0) {\r\n          account.startDistributionPlacementCodes = rawaccount.startDistributionPlacementCodes.join('\\n');\r\n        }\r\n        if (rawaccount.startDistributionOCIDL2s && rawaccount.startDistributionOCIDL2s.length > 0) {\r\n          account.startDistributionOCIDL2s = rawaccount.startDistributionOCIDL2s.join('\\n');\r\n        }\r\n        account.startDistributionNativeAdsInFeedsAndHeadlinesRevenueSharePercentage =\r\n          rawaccount.startDistributionNativeAdsInFeedsAndHeadlinesRevenueSharePercentage;\r\n        account.skus = accountSkuInfo.mediumMappedSkus;\r\n        account.nonSKUMappedMediums = accountSkuInfo.nonMappedMediums;\r\n\r\n        const privateMarketplace = rawaccount.storeIds && rawaccount.storeIds.length !== 0 ? rawaccount.storeIds.length !== 0 : false;\r\n        onAccountEnablePrivateMarketplaceChanged(privateMarketplace);\r\n\r\n        onRawChanged(rawaccount);\r\n      } else {\r\n        onRawChanged();\r\n      }\r\n\r\n      onAccountChanged(account);\r\n    } else {\r\n      onNotificationChanged({\r\n        text: `You have arrived in an invalid state, please report.`,\r\n        messageBarType: MessageBarType.severeWarning,\r\n      });\r\n    }\r\n  } catch (e) {\r\n    onNotificationChanged({\r\n      text: 'Failed to load entity',\r\n      messageBarType: MessageBarType.severeWarning,\r\n    });\r\n  } finally {\r\n    onLoadingChanged(false);\r\n  }\r\n});\r\n","import { MessageBarType } from '@fluentui/react';\r\nimport { orchestrator } from 'satcheljs';\r\nimport {\r\n  Account,\r\n  AccountProfileFeature,\r\n  getAppStore,\r\n  onNavigateBack,\r\n  onNotificationChanged,\r\n  onSavingChanged,\r\n  postEntity,\r\n  putEntity,\r\n} from '../../../../../@data';\r\nimport { AdExtensionType } from '../../../../../@data/store/schema/enums/AdExtensionType';\r\nimport { FormState } from '../../../../../components/Form';\r\nimport { INotificationBarItem } from '../../../../../components/NotificationBar';\r\nimport { validateSchema } from '../../../../../utils';\r\nimport { RouteName } from '../../../@data';\r\nimport { createReturnUrl } from '../../../@data/service/PartnerManagementService';\r\nimport { onAccountErrorChanged, onAccountIdChanged, onFormCleared, onFormSubmitted } from '../actions';\r\nimport { accountErrorModel } from '../store/schema/AccountErrorModel';\r\nimport { getStore } from '../store/store';\r\n\r\norchestrator(onFormSubmitted, async (msg) => {\r\n  const { publisher, userContext } = getAppStore();\r\n  const { active, raw } = getStore();\r\n\r\n  let notification: INotificationBarItem = {};\r\n\r\n  if (publisher) {\r\n    const body: Account = {\r\n      ...raw,\r\n      id: active.id,\r\n      name: active.name,\r\n      apiPath: undefined,\r\n      className: 'accounts',\r\n    };\r\n\r\n    try {\r\n      await validateSchema(accountErrorModel(), active);\r\n      onAccountErrorChanged();\r\n    } catch (e) {\r\n      onAccountErrorChanged(e);\r\n      onNotificationChanged({\r\n        text: `Account - You have ${Object.keys(e).length} errors in the form, please fix them to continue.`,\r\n        messageBarType: MessageBarType.severeWarning,\r\n      });\r\n      return;\r\n    }\r\n\r\n    onSavingChanged(true);\r\n    body.status = active.status;\r\n    body.countryCode = active.countryCode;\r\n    body.primaryContactUserId = active.primaryContactUserId;\r\n    body.currencyCode = active.currencyCode;\r\n    body.languageCode = active.languageCode;\r\n    body.adDeliverySettings = active.adDeliverySettings;\r\n    body.additionalMarkets = active.additionalMarkets;\r\n\r\n    body.timeZoneId = active.timeZoneId;\r\n    body.adExtensionOptions = [];\r\n\r\n    if (active.allowCallExtensions) {\r\n      body.adExtensionOptions.push({\r\n        type: AdExtensionType.Call,\r\n        enabled: active.allowCallExtensions,\r\n      });\r\n    }\r\n\r\n    if (active.allowSiteLinkExtensions) {\r\n      body.adExtensionOptions.push({\r\n        type: AdExtensionType.SiteLink,\r\n        enabled: active.allowSiteLinkExtensions,\r\n      });\r\n    }\r\n\r\n    if (active.allowPhoneExtensions) {\r\n      body.adExtensionOptions.push({\r\n        type: AdExtensionType.Phone,\r\n        enabled: active.allowPhoneExtensions,\r\n      });\r\n    }\r\n\r\n    if (active.allowLocalExtensions) {\r\n      body.adExtensionOptions.push({\r\n        type: AdExtensionType.Local,\r\n        enabled: active.allowLocalExtensions,\r\n      });\r\n    }\r\n\r\n    if (active.allowLocationExtensions) {\r\n      body.adExtensionOptions.push({\r\n        type: AdExtensionType.Location,\r\n        enabled: active.allowLocationExtensions,\r\n      });\r\n    }\r\n\r\n    if (active.allowMeteredCallExtensions) {\r\n      body.adExtensionOptions.push({\r\n        type: AdExtensionType.MeteredCall,\r\n        enabled: active.allowMeteredCallExtensions,\r\n      });\r\n    }\r\n\r\n    if (active.allowMerchantRatingExtensions) {\r\n      body.adExtensionOptions.push({\r\n        type: AdExtensionType.MerchantRatings,\r\n        enabled: active.allowMerchantRatingExtensions,\r\n      });\r\n    }\r\n\r\n    body.enabledFeatures = [];\r\n    if (active.allowGlobalDefaultKeywords) {\r\n      body.enabledFeatures.push(AccountProfileFeature.EnableGlobalDefaultKeywords);\r\n    }\r\n    if (active.allowAdultAds) {\r\n      body.enabledFeatures.push(AccountProfileFeature.EnableAdultAds);\r\n    }\r\n    if (active.allowCrawling) {\r\n      body.enabledFeatures.push(AccountProfileFeature.EnableCrawling);\r\n    }\r\n    if (active.allowPassedURL) {\r\n      body.enabledFeatures.push(AccountProfileFeature.EnablePassedUrls);\r\n    }\r\n    if (active.allowPassedKeyword) {\r\n      body.enabledFeatures.push(AccountProfileFeature.EnablePassedKeywords);\r\n    }\r\n\r\n    body.paymentInformation = {\r\n      financialStatus: active.financialStatus!,\r\n      paymentOption: active.paymentOption!,\r\n      paymentInstrumentationLifeCycleStatus: active.paymentLifeCycleStatus!,\r\n      operationCostRatio: active.operationRatio!,\r\n      revenueSharePercentage: active.revenueSharePercentage!,\r\n    };\r\n\r\n    body.storeIds = active.storeIds\r\n      ? active.storeIds\r\n          .split('\\n')\r\n          .filter((i) => i !== '' && i !== '\\r')\r\n          .map((id) => +id)\r\n      : [];\r\n\r\n    body.partnerCodes = active.partnerCodes\r\n      ? active.partnerCodes\r\n          .split('\\n')\r\n          .filter((i) => i !== '' && i !== '\\r')\r\n          .map((code) => code.trim())\r\n      : [];\r\n\r\n    body.formCodes = active.formCodes\r\n      ? active.formCodes\r\n          .split('\\n')\r\n          .filter((i) => i !== '' && i !== '\\r')\r\n          .map((code) => code.trim())\r\n      : [];\r\n\r\n    body.startDistributionPlacementCodes = active.startDistributionPlacementCodes\r\n      ? active.startDistributionPlacementCodes\r\n          .split('\\n')\r\n          .filter((i) => i !== '' && i !== '\\r')\r\n          .map((code) => code.trim())\r\n      : [];\r\n\r\n    body.startDistributionOCIDL2s = active.startDistributionOCIDL2s\r\n      ? active.startDistributionOCIDL2s\r\n          .split('\\n')\r\n          .filter((i) => i !== '' && i !== '\\r')\r\n          .map((code) => code.trim())\r\n      : [];\r\n\r\n    body.startDistributionNativeAdsInFeedsAndHeadlinesRevenueSharePercentage =\r\n      active.startDistributionNativeAdsInFeedsAndHeadlinesRevenueSharePercentage;\r\n\r\n    try {\r\n      let entity: Account | undefined;\r\n\r\n      if (msg.mode === FormState.Edit) {\r\n        const account = new Account(active.id);\r\n        entity = await putEntity([publisher, account], body, userContext);\r\n        notification = {\r\n          text: `Edited account ${entity.id} success`,\r\n          messageBarType: MessageBarType.success,\r\n        };\r\n      } else {\r\n        entity = await postEntity([publisher], Account, body, userContext);\r\n\r\n        if (entity && entity.id) {\r\n          onAccountIdChanged(entity.id);\r\n        }\r\n        notification = {\r\n          text: `Created new account ${entity.id} success`,\r\n          messageBarType: MessageBarType.success,\r\n        };\r\n      }\r\n\r\n      // return to manage page\r\n      const returnUrl = createReturnUrl(RouteName.account, String(publisher.id));\r\n      onNavigateBack(msg.routeHistory, returnUrl);\r\n      onFormCleared();\r\n    } catch (e) {\r\n      notification = {\r\n        text: `Submitting the account form \"${FormState[msg.mode]}\" caught an error \"${e}\"`,\r\n        messageBarType: MessageBarType.error,\r\n      };\r\n    } finally {\r\n      onSavingChanged(false);\r\n    }\r\n  } else {\r\n    notification = {\r\n      text: `Account form \"${FormState[msg.mode]}\" is invalid id ${active.id}`,\r\n      messageBarType: MessageBarType.warning,\r\n    };\r\n  }\r\n  onNotificationChanged(notification);\r\n});\r\n","import { number, object, string } from 'yup';\r\nimport { IAccountViewModel } from '.';\r\nimport { StringListSchemaYupType } from '../../../../../../utils/validation';\r\n\r\nexport function accountErrorModel() {\r\n  return object<IAccountViewModel>().shape({\r\n    name: string().trim().required(),\r\n    storeIds: new StringListSchemaYupType().of(number().integer()),\r\n    partnerCodes: new StringListSchemaYupType().of(string()),\r\n    formCodes: new StringListSchemaYupType().of(string()),\r\n    startDistributionPlacementCodes: new StringListSchemaYupType().of(string()),\r\n    startDistributionOCIDL2s: new StringListSchemaYupType().of(string()),\r\n    operationRatio: number().integer(),\r\n    revenueSharePercentage: number().integer(),\r\n    startDistributionNativeAdsInFeedsAndHeadlinesRevenueSharePercentage: number().max(100.0).min(0.0)\r\n                                      .when(\"startDistributionPlacementCodes\", (placementCodes, schema) => {\r\n                                      // Revenue share % is only required when placement codes are selected.\r\n                                      if (placementCodes !== null && placementCodes !== undefined && placementCodes.length > 0) {\r\n                                        return schema.required();\r\n                                      } else {\r\n                                        return schema;\r\n                                      }}),\r\n  });\r\n}\r\n","import { MessageBarType } from '@fluentui/react';\r\nimport { orchestrator } from 'satcheljs';\r\nimport { Log } from '../../../../../../logging/src';\r\nimport { Account, getAppStore, listEntity, onNotificationChanged } from '../../../../../@data';\r\nimport { onAccountsFetched, onFetchAccountsLoading, onFetchingAccountsData } from '../actions';\r\nimport { onManagePageInitialized } from '../actions/onManagePageInitialized';\r\nimport { getStore } from '../store/store';\r\n\r\norchestrator(onManagePageInitialized, async () => {\r\n  try {\r\n    const { publisher, userContext } = getAppStore();\r\n    const accounts = getStore().accounts;\r\n\r\n    if (publisher) {\r\n      if (accounts === undefined || accounts.length === 0) {\r\n        onFetchAccountsLoading(true);\r\n      }\r\n      onFetchingAccountsData(true);\r\n\r\n      const params = new URLSearchParams([['details', 'true']]);\r\n      const data = await listEntity([publisher], userContext, Account, params);\r\n      data.map((account) => {\r\n        const item = account as Account;\r\n        if (!!item.createdDateTime) {\r\n          item.createdDateTime = new Date(item.createdDateTime).toISOString();\r\n        }\r\n        return item;\r\n      });\r\n      onAccountsFetched(data);\r\n    }\r\n  } catch (error) {\r\n    Log.error(error);\r\n    onNotificationChanged({ messageBarType: MessageBarType.error, text: 'Failed to load accounts' });\r\n  } finally {\r\n    onFetchAccountsLoading(false);\r\n    onFetchingAccountsData(false);\r\n  }\r\n});\r\n","import { defineMessages } from 'react-intl';\r\n\r\nexport default defineMessages({\r\n  PaidSearch: { id: 'app.MediaType.PaidSearch', defaultMessage: 'Paid Search' },\r\n  MobilePaidSearch: { id: 'app.MediaType.MobilePaidSearch', defaultMessage: 'Mobile Paid Search' },\r\n  Native: { id: 'app.MediaType.Native', defaultMessage: 'Native' },\r\n  AudienceAds: { id: 'app.MediaType.AudienceAds', defaultMessage: 'Audience Ads' },\r\n  LinkedInAds: { id: 'app.MediaType.LinkedInAds', defaultMessage: 'LinkedIn Ads' },\r\n});\r\n","import { defineMessages } from 'react-intl';\r\n\r\nexport default defineMessages({\r\n  createPageTitle: {\r\n    id: 'partnermanagement.account.createPageTitle',\r\n    defaultMessage: 'Create Account',\r\n  },\r\n  editPageTitle: {\r\n    id: 'partnermanagement.account.editPageTitle',\r\n    defaultMessage: 'Edit Account',\r\n  },\r\n  updateAccount: {\r\n    id: 'partnermanagement.account.updateAccount',\r\n    defaultMessage: 'Update Account',\r\n  },\r\n  accountName: {\r\n    id: 'partnermanagement.account.accountName',\r\n    defaultMessage: 'Account name',\r\n  },\r\n  primaryContact: {\r\n    id: 'partnermanagement.account.primaryContact',\r\n    defaultMessage: 'Primary Contact',\r\n  },\r\n  publisherName: {\r\n    id: 'partnermanagement.account.publisherName',\r\n    defaultMessage: 'Publisher name',\r\n  },\r\n  accountNumber: {\r\n    id: 'partnermanagement.account.accountNumber',\r\n    defaultMessage: 'Account Number',\r\n  },\r\n  accountContentDeliverySetting: {\r\n    id: 'partnermanagement.account.accountContentDeliverySetting',\r\n    defaultMessage: 'Account content delivery setting',\r\n  },\r\n  accountContentDeliverySettingInfo: {\r\n    id: 'partnermanagement.account.accountContentDeliverySettingInfo',\r\n    defaultMessage: 'These content delivery settings will be applied to all ad types for this account.',\r\n  },\r\n  adCountryPolicy: {\r\n    id: 'partnermanagement.account.adCountryPolicy',\r\n    defaultMessage: 'Ad country/region policy',\r\n  },\r\n  adLanguage: {\r\n    id: 'partnermanagement.account.adLanguage',\r\n    defaultMessage: 'Ad Language',\r\n  },\r\n  accountContentSettingType: {\r\n    id: 'partnermanagement.account.accountContentSettingType',\r\n    defaultMessage: 'Setting type',\r\n  },\r\n  accountContentSettingTypeSimple: {\r\n    id: 'partnermanagement.account.accountContentSettingTypeSimple',\r\n    defaultMessage: 'Simple settings',\r\n  },\r\n  accountContentSettingTypeAdvanced: {\r\n    id: 'partnermanagement.account.accountContentSettingTypeAdvanced',\r\n    defaultMessage: 'Advanced settings',\r\n  },\r\n  allowedMarketsTitle: {\r\n    id: 'partnermanagement.account.allowedMarketsTitle',\r\n    defaultMessage: 'Allowed markets',\r\n  },\r\n  allowedMarketsOptionAll: {\r\n    id: 'partnermanagement.account.allowedMarketsOptionAll',\r\n    defaultMessage: 'Managed at account level',\r\n  },\r\n  skuTitle: {\r\n    id: 'partnermanagement.account.skuTitle',\r\n    defaultMessage: 'SKUs',\r\n  },\r\n  createSku: {\r\n    id: 'partnermanagement.account.createSku',\r\n    defaultMessage: 'Create SKU Mapping',\r\n  },\r\n  editSku: {\r\n    id: 'partnermanagement.account.editSku',\r\n    defaultMessage: 'Edit SKU Mapping',\r\n  },\r\n  skuCategory: {\r\n    id: 'partnermanagement.account.skuCategory',\r\n    defaultMessage: 'SKU category',\r\n  },\r\n  skuCode: {\r\n    id: 'partnermanagement.account.skuCode',\r\n    defaultMessage: 'SKU code',\r\n  },\r\n  advancedAccountTitle: {\r\n    id: 'partnermanagement.account.advancedAccountTitle',\r\n    defaultMessage: 'Advanced account attributes',\r\n  },\r\n  paymentOption: {\r\n    id: 'partnermanagement.account.paymentOption',\r\n    defaultMessage: 'Payment option',\r\n  },\r\n  paymentOptionMonthlyThreshold: {\r\n    id: 'partnermanagement.account.paymentOptionMonthlyThreshold',\r\n    defaultMessage: 'Monthly Threshold',\r\n  },\r\n  paymentOptionNoPay: {\r\n    id: 'partnermanagement.account.paymentOptionNoPay',\r\n    defaultMessage: 'No Pay',\r\n  },\r\n  lifecycleStatusCreated: {\r\n    id: 'partnermanagement.account.lifecycleStatusCreated',\r\n    defaultMessage: 'Created',\r\n  },\r\n  lifecycleStatusSubmitted: {\r\n    id: 'partnermanagement.account.lifecycleStatusSubmitted',\r\n    defaultMessage: 'Submitted',\r\n  },\r\n  lifecycleStatusPending: {\r\n    id: 'partnermanagement.account.lifecycleStatusPending',\r\n    defaultMessage: 'Pending',\r\n  },\r\n  lifecycleStatusFailed: {\r\n    id: 'partnermanagement.account.lifecycleStatusFailed',\r\n    defaultMessage: 'Failed',\r\n  },\r\n  lifecycleStatusPinFailed: {\r\n    id: 'partnermanagement.account.lifecycleStatusPinFailed',\r\n    defaultMessage: 'Pin Failed',\r\n  },\r\n  lifecycleStatusBlacklisted: {\r\n    id: 'partnermanagement.account.lifecycleStatusBlacklisted',\r\n    defaultMessage: 'Blacklisted',\r\n  },\r\n  lifecycleStatusSuccess: {\r\n    id: 'partnermanagement.account.lifecycleStatusSuccess',\r\n    defaultMessage: 'Success',\r\n  },\r\n  lifecycleStatusValidated: {\r\n    id: 'partnermanagement.account.lifecycleStatusValidated',\r\n    defaultMessage: 'Validated',\r\n  },\r\n\r\n  financialStatusLabel: {\r\n    id: 'partnermanagement.account.financialStatusLabel',\r\n    defaultMessage: 'Financial status',\r\n  },\r\n  financialStatusNoHold: {\r\n    id: 'partnermanagement.account.financialStatusNoHold',\r\n    defaultMessage: 'No Hold',\r\n  },\r\n  financialStatusHold: {\r\n    id: 'partnermanagement.account.financialStatusHold',\r\n    defaultMessage: 'CSO Hold',\r\n  },\r\n  financialStatusTaxOnHold: {\r\n    id: 'partnermanagement.account.financialStatusTaxOnHold',\r\n    defaultMessage: 'Tax On Hold',\r\n  },\r\n  financialStatusUserHold: {\r\n    id: 'partnermanagement.account.financialStatusUserHold',\r\n    defaultMessage: 'User Hold',\r\n  },\r\n  lifecycleStatusLabel: {\r\n    id: 'partnermanagement.account.lifecycleStatusLabel',\r\n    defaultMessage: 'Payment Lifecycle status',\r\n  },\r\n  revenueSharePercentageLabel: {\r\n    id: 'partnermanagement.account.revenueSharePercentageLabel',\r\n    defaultMessage: 'Revenue share percentage',\r\n  },\r\n  operationCostRationLabel: {\r\n    id: 'partnermanagement.account.operationCostRationLabel',\r\n    defaultMessage: 'Operation cost ratio',\r\n  },\r\n  accountLevelattributesLabel: {\r\n    id: 'partnermanagement.account.accountLevelattributesLabel',\r\n    defaultMessage: 'Account level attributes',\r\n  },\r\n  accountLevelattributesDesc: {\r\n    id: 'partnermanagement.account.accountLevelattributesDesc',\r\n    defaultMessage: 'Select account level attributes',\r\n  },\r\n  enableAdunitDebugging: {\r\n    id: 'partnermanagement.account.enableAdunitDebugging',\r\n    defaultMessage: 'Enable ad unit debugging',\r\n  },\r\n  enablePassedURLs: {\r\n    id: 'partnermanagement.account.enablePassedURLs',\r\n    defaultMessage: 'Enable passed URLs',\r\n  },\r\n  enablePassedKeywords: {\r\n    id: 'partnermanagement.account.enablePassedKeywords',\r\n    defaultMessage: 'Enable passed keywords',\r\n  },\r\n  donotCrawl: {\r\n    id: 'partnermanagement.account.donotCrawl',\r\n    defaultMessage: 'Do not crawl',\r\n  },\r\n  enableGlobalDefaultKeywords: {\r\n    id: 'partnermanagement.account.enableGlobalDefaultKeywords',\r\n    defaultMessage: 'Enable global default keywords',\r\n  },\r\n  enableAdultAds: {\r\n    id: 'partnermanagement.account.enableAdultAds',\r\n    defaultMessage: 'Enable adult ads',\r\n  },\r\n  enableRAIS: {\r\n    id: 'partnermanagement.account.enableRAIS',\r\n    defaultMessage: 'Enable RAIS for search ad units',\r\n  },\r\n  phoneExtension: {\r\n    id: 'partnermanagement.account.phoneExtension',\r\n    defaultMessage: 'Phone extensions',\r\n  },\r\n  enableSiteLink: {\r\n    id: 'partnermanagement.account.enableSiteLink ',\r\n    defaultMessage: 'Enable SiteLink extensions',\r\n  },\r\n  localExtension: {\r\n    id: 'partnermanagement.account.localExtension',\r\n    defaultMessage: 'Local extensions',\r\n  },\r\n  locationExtension: {\r\n    id: 'partnermanagement.account.locationExtension',\r\n    defaultMessage: 'Location extensions',\r\n  },\r\n  callExtension: {\r\n    id: 'partnermanagement.account.callExtension',\r\n    defaultMessage: 'Call extension',\r\n  },\r\n  meteredCallExtensions: {\r\n    id: 'partnermanagement.account.meteredCallExtensions',\r\n    defaultMessage: 'Metered call extensions',\r\n  },\r\n  meteredRatingExtensions: {\r\n    id: 'partnermanagement.account.meteredRatingExtensions',\r\n    defaultMessage: 'Merchant rating extensions',\r\n  },\r\n  createAccount: {\r\n    id: 'partnermanagement.account.createAccount',\r\n    defaultMessage: 'Create Account',\r\n  },\r\n  storeIdLabel: {\r\n    id: 'partnermanagement.account.storeIdLabel',\r\n    defaultMessage: 'Store IDs',\r\n  },\r\n  storeIdExampleText: {\r\n    id: 'partnermanagement.account.storeIdExample',\r\n    defaultMessage: 'Example Store ID 1, enter one per line',\r\n  },\r\n  partnerCodeLabel: {\r\n    id: 'partnermanagement.account.partnerCodeLabel',\r\n    defaultMessage: 'Partner Codes for Distribution Reporting',\r\n  },\r\n  partnerCodeText: {\r\n    id: 'partnermanagement.account.partnerCodeText',\r\n    defaultMessage: 'Example Partner Code ABC123, enter one per line',\r\n  },\r\n  formCodeLabel: {\r\n    id: 'partnermanagement.account.formCodeLabel',\r\n    defaultMessage: 'Form Codes for Distribution Reporting',\r\n  },\r\n  formCodeText: {\r\n    id: 'partnermanagement.account.FormCodeText',\r\n    defaultMessage: 'Example Form Code ABC123, enter one per line',\r\n  },\r\n  startDistributionPlacementCodeLabel: {\r\n    id: 'partnermanagement.account.startDistributionPlacementCodeLabel',\r\n    defaultMessage: 'Placement Codes for Start Distribution Reporting',\r\n  },\r\n  startDistributionPlacementCodeText: {\r\n    id: 'partnermanagement.account.startDistributionPlacementCodeText',\r\n    defaultMessage: 'Example Placement Code ABC123, enter one per line',\r\n  },\r\n  startDistributionOCIDL2Label: {\r\n    id: 'partnermanagement.account.startDistributionOCIDL2Label',\r\n    defaultMessage: 'OCIDL2 for Start Distribution Content Reporting',\r\n  },\r\n  startDistributionOCIDL2Text: {\r\n    id: 'partnermanagement.account.startDistributionOCIDL2Text',\r\n    defaultMessage: 'Example OCIDL2 ThirdParty_ABC123, enter one per line',\r\n  },\r\n  startDistributionNativeAdsInFeedsAndHeadlinesRevenueSharePercentageText: {\r\n    id: 'partnermanagement.account.startDistributionNativeAdsInFeedsAndHeadlinesRevenueSharePercentageText',\r\n    defaultMessage: 'Start Distribution Native Ads in Feeds & Headlines Revenue Share Percentage',\r\n  },\r\n  privateMarketplace: {\r\n    id: 'partnermanagement.account.privateMarketplace',\r\n    defaultMessage: 'Enable Private Marketplace',\r\n  },\r\n  inHousePromotions: {\r\n    id: 'partnermanagement.account.inHousePromotions',\r\n    defaultMessage: 'Sponsored Product Ads Stores',\r\n  },\r\n  boost: {\r\n    id: 'partnermanagement.account.boost',\r\n    defaultMessage: 'Boost Advertiser Accounts',\r\n  },\r\n  boostIdsLabel: {\r\n    id: 'partnermanagement.account.boostIdsLabel',\r\n    defaultMessage: 'Advertiser Account IDs',\r\n  },\r\n  boostIdsExampleText: {\r\n    id: 'partnermanagement.account.boostIdsExampleText',\r\n    defaultMessage: 'Example Account ID 1, enter one per line',\r\n  },\r\n  privateMarketplaceIdsLabel: {\r\n    id: 'partnermanagement.account.privateMarketplaceIdsLabel',\r\n    defaultMessage: 'Private Marketplace IDs',\r\n  },\r\n  privateMarketplaceExampleText: {\r\n    id: 'partnermanagement.account.privateMarketplaceIdsExampleText',\r\n    defaultMessage: 'Example ID 1, enter one per line',\r\n  },\r\n});\r\n","import { IDropdownStyles } from '@fluentui/react';\r\nimport { IPubcenterSpacing } from '../../../../../theme';\r\nimport { ICreateAccountStyleProps, ICreateAccountStyles } from './CreateAccount.types';\r\n\r\nexport const getStyles = (props: ICreateAccountStyleProps): ICreateAccountStyles => {\r\n  const { theme } = props;\r\n  const spacing = theme.spacing as IPubcenterSpacing;\r\n\r\n  return {\r\n    root: {\r\n      marginTop: theme.spacing.m,\r\n      marginLeft: theme.spacing.m,\r\n    },\r\n    datagrid: {\r\n      display: 'flex',\r\n      flexDirection: 'column',\r\n      height: '300px',\r\n      flex: 1,\r\n    },\r\n\r\n    subComponentStyles: {\r\n      checkbox: {\r\n        root: {\r\n          marginBottom: spacing.size8,\r\n        },\r\n      },\r\n      dropdown: ({\r\n        dropdown: [\r\n          {\r\n            height: 46,\r\n          },\r\n        ],\r\n      } as unknown) as IDropdownStyles,\r\n    },\r\n  };\r\n};\r\n","import {\r\n  Checkbox,\r\n  ChoiceGroup,\r\n  classNamesFunction,\r\n  ComboBox,\r\n  Dropdown,\r\n  getTheme,\r\n  IComboBoxOption,\r\n  IDropdownOption,\r\n  IProcessedStyleSet,\r\n  nullRender,\r\n  Panel,\r\n  PanelType,\r\n  TextField,\r\n} from '@fluentui/react';\r\nimport * as React from 'react';\r\nimport {\r\n  AccountSKU,\r\n  getAppStore,\r\n  onHelpInfoCalloutOpened,\r\n  onHelpInfoChanged,\r\n  onNavigateBack,\r\n  PaymentInstrumentLifeCycleStatus,\r\n  PaymentOption,\r\n  PrivateMarketplace,\r\n  User,\r\n} from '../../../../@data';\r\nimport { completeAccess, hasReadAccess, hasUpdateAccess, UserRoleEntity, userRoleKey } from '../../../../@data/services/UserRoleService';\r\nimport { FinancialStatus } from '../../../../@data/store/schema/enums/FinancialStatus';\r\nimport { Account as AccountAccessPermissions } from '../../../../@data/store/schema/userrolemodels/Account';\r\nimport AppMessages from '../../../../App.messages';\r\nimport { DataGrid, DataGridSelectionMode, IDataGrid, IDataGridCommandBarProps } from '../../../../components/DataGrid';\r\nimport { FormItem, FormSection, FormState } from '../../../../components/Form';\r\nimport { FormLabel } from '../../../../components/Form/FormLabel';\r\nimport { countryToCurrencyMap } from '../../../../config/countryToCurrencyMapper.config';\r\n\r\nimport {\r\n  COUNTRIES_LANGUAGE_MAPPING,\r\n  CURRENCIES_LANGUAGE_MAPPING,\r\n  LANGUAGES_LANGUAGE_MAPPING,\r\n  TIMEZONE_LANGUAGE_MAPPING,\r\n} from '../../../../globalization';\r\nimport { DetailPage } from '../../../../layout/DetailPage/DetailPage';\r\nimport { IDataGridColumn } from '../../../../layout/GridPageV2';\r\nimport MediaTypeMessages from '../../../../MediaType.messages';\r\nimport { injectIntlWithObserver } from '../../../../utils';\r\nimport { getPageStore, RouteName } from '../../@data';\r\nimport { onPanelOpenChanged } from '../../@data/actions';\r\nimport { createReturnUrl } from '../../@data/service/PartnerManagementService';\r\nimport { IAccountViewModel } from '../@data';\r\nimport {\r\n  onAccountSkuFormMediumChanged,\r\n  onAccountSkuFormSkuChanged,\r\n  onAccountSkuFormSubmitted,\r\n  onAccountSkuSidePanelInitialized,\r\n  onFormAccountAllowAdultAdsChanged,\r\n  onFormAccountAllowCallExtensionsChanged,\r\n  onFormAccountAllowCrawlingChanged,\r\n  onFormAccountAllowGlobalDefaultKeywordsChanged,\r\n  onFormAccountAllowLocalExtensionsChanged,\r\n  onFormAccountAllowLocationExtensionsChanged,\r\n  onFormAccountAllowMerchantRatingExtensionsChanged,\r\n  onFormAccountAllowMeteredCallExtensionsChanged,\r\n  onFormAccountAllowPassedKeywordChanged,\r\n  onFormAccountAllowPassedURLChanged,\r\n  onFormAccountAllowPhoneExtensionsChanged,\r\n  onFormAccountAllowSiteLinkExtensionsChanged,\r\n  onFormAccountCountryChanged,\r\n  onFormAccountCurrencyChanged,\r\n  onFormAccountFinancialStatusChanged,\r\n  onFormAccountFormCodesChanged,\r\n  onFormAccountLanguageChanged,\r\n  onFormAccountNameChanged,\r\n  onFormAccountOperationRatioChanged,\r\n  onFormAccountPartnerCodesChanged,\r\n  onFormAccountPaymentLifeCycleStatusChanged,\r\n  onFormAccountPaymentOptionChanged,\r\n  onFormAccountPrimaryContactChanged,\r\n  onFormAccountStartDistributionNativeAdsInFeedsAndHeadlinesRevenueSharePercentageChanged,\r\n  onFormAccountStartDistributionOCIDL2sChanged,\r\n  onFormAccountStartDistributionPlacementCodesChanged,\r\n  onFormAccountStoreIdsChanged,\r\n  onFormAccountTimezoneChanged,\r\n  onFormCancelled,\r\n  onFormInitialized,\r\n  onFormSubmitted,\r\n} from '../@data/actions';\r\nimport { onAccountPrivateMarketplaceChanged } from '../@data/mutatorActions';\r\nimport { getStore } from '../@data/store/store';\r\nimport messages from './CreateAccount.messages';\r\nimport { getStyles } from './CreateAccount.styles';\r\nimport {\r\n  ICreateAccountProps,\r\n  ICreateAccountStyleProps,\r\n  ICreateAccountStyles,\r\n  IFormInitializationState,\r\n  ISkuSidePanelProps,\r\n} from './CreateAccount.types';\r\n\r\nconst getClassNames = classNamesFunction<ICreateAccountStyleProps, ICreateAccountStyles>();\r\n\r\nexport const CreateAccount = injectIntlWithObserver(\r\n  class extends React.Component<ICreateAccountProps, IFormInitializationState> {\r\n    private _classNames: IProcessedStyleSet<ICreateAccountStyles>;\r\n    private _datagrid = React.createRef<IDataGrid>();\r\n\r\n    constructor(props: ICreateAccountProps) {\r\n      super(props);\r\n      this.state = {\r\n        initializeForm: true,\r\n        skuPanelFormState: FormState.InPageCreate,\r\n      };\r\n    }\r\n\r\n    public componentDidMount() {\r\n      const publisherId = this.props.match.params.publisherId;\r\n      const entityId = this.props.match.params.accountId;\r\n      this.setState({ id: entityId });\r\n      if (publisherId) {\r\n        onFormInitialized(this.props.mode, publisherId, entityId);\r\n      }\r\n    }\r\n\r\n    public componentDidUpdate() {\r\n      const publisherId = this.props.match.params.publisherId;\r\n      const entityId = this.props.match.params.accountId;\r\n      if (this.state.initializeForm && this.state.id !== entityId) {\r\n        this.setState({ id: entityId });\r\n        if (publisherId) {\r\n          onFormInitialized(this.props.mode, publisherId, entityId);\r\n        }\r\n      }\r\n    }\r\n\r\n    public render() {\r\n      const theme = getTheme();\r\n      this._classNames = getClassNames(getStyles, { theme });\r\n      const appStore = getAppStore();\r\n      const store = getStore();\r\n      const activeAccount = store.active;\r\n      const activePublisher = appStore.publisher;\r\n      const publisherId = this.props.match.params.publisherId;\r\n      const { formatMessage } = this.props.intl;\r\n      const accountAccessPermissions = this._getAccountAccessPermission();\r\n      const CURRENCY = CURRENCIES_LANGUAGE_MAPPING[appStore.locale];\r\n      return (\r\n        <DetailPage\r\n          titleLabel={this.props.mode === FormState.Edit ? formatMessage(messages.editPageTitle) : formatMessage(messages.createPageTitle)}\r\n          helpId={'pop_PCv4_AccountCreate'}\r\n          submitLabel={formatMessage(this.props.mode === FormState.Edit ? messages.updateAccount : messages.createPageTitle)}\r\n          onSubmit={() => this._onSubmit(publisherId)}\r\n          onCancel={() => this._onCancel(publisherId)}\r\n          onNavClick={() => this._onCancel(publisherId)}\r\n          saving={getAppStore().saving}\r\n          pageMode={this.props.mode}\r\n        >\r\n          <FormItem>\r\n            <TextField\r\n              label={formatMessage(messages.publisherName)}\r\n              ariaLabel={formatMessage(messages.publisherName)}\r\n              required={true}\r\n              value={activePublisher && String(activePublisher.name)}\r\n              placeholder=\"\"\r\n              disabled={true}\r\n            />\r\n          </FormItem>\r\n          {this.props.mode === FormState.Edit && (\r\n            <FormItem>\r\n              <TextField\r\n                label={formatMessage(messages.accountNumber)}\r\n                ariaLabel={formatMessage(messages.accountNumber)}\r\n                required={true}\r\n                value={activeAccount.number ? String(activeAccount.number) : ''}\r\n                placeholder=\"\"\r\n                disabled={true}\r\n              />\r\n            </FormItem>\r\n          )}\r\n          <FormItem>\r\n            <TextField\r\n              label={formatMessage(messages.accountName)}\r\n              ariaLabel={formatMessage(messages.accountName)}\r\n              errorMessage={store.errors.name}\r\n              value={activeAccount.name}\r\n              required={true}\r\n              onChange={(_, value) => onFormAccountNameChanged(value)}\r\n              disabled={this._isDisabled(\r\n                this.props.mode,\r\n                accountAccessPermissions === null ? completeAccess : accountAccessPermissions.accountName\r\n              )}\r\n            />\r\n          </FormItem>\r\n          <FormItem>\r\n            <Dropdown\r\n              label={formatMessage(messages.primaryContact)}\r\n              ariaLabel={formatMessage(messages.primaryContact)}\r\n              options={this._createPrimaryContactDropDown(activeAccount.availableUsers!)}\r\n              required={true}\r\n              defaultSelectedKey={activeAccount.primaryContactUserId}\r\n              onChange={(_, value) => onFormAccountPrimaryContactChanged(value!)}\r\n              disabled={this._isDisabled(\r\n                this.props.mode,\r\n                accountAccessPermissions === null ? completeAccess : accountAccessPermissions.primaryContact\r\n              )}\r\n            />\r\n          </FormItem>\r\n          <FormItem>\r\n            <Dropdown\r\n              label={formatMessage(AppMessages.language)}\r\n              ariaLabel={formatMessage(AppMessages.language)}\r\n              options={this._createLanguageDropDown(activeAccount.availableLanguages!)}\r\n              required={true}\r\n              defaultSelectedKey={activeAccount.languageCode}\r\n              onChange={(_, value) => onFormAccountLanguageChanged(value!)}\r\n              disabled={this._isDisabled(\r\n                this.props.mode,\r\n                accountAccessPermissions === null ? completeAccess : accountAccessPermissions.lanuage\r\n              )}\r\n            />\r\n          </FormItem>\r\n          <FormItem>\r\n            <ComboBox\r\n              useComboBoxAsMenuWidth={true}\r\n              autoComplete=\"on\"\r\n              label={formatMessage(AppMessages.countryOrRegion)}\r\n              ariaLabel={formatMessage(AppMessages.countryOrRegion)}\r\n              options={this._createCountryDropDown(activeAccount.availableCountries!)}\r\n              required={true}\r\n              selectedKey={activeAccount.countryCode}\r\n              onChange={(_, value) => onFormAccountCountryChanged(value!)}\r\n              disabled={this.props.mode === FormState.Edit}\r\n              tabIndex={this.props.mode === FormState.Edit ? -1 : undefined}\r\n            />\r\n          </FormItem>\r\n          <FormItem>\r\n            <TextField\r\n              label={formatMessage(AppMessages.currency)}\r\n              ariaLabel={formatMessage(AppMessages.currency)}\r\n              required={true}\r\n              value={activeAccount.countryCode && CURRENCY[countryToCurrencyMap[activeAccount.countryCode]]}\r\n              placeholder=\"\"\r\n              disabled={true}\r\n              onChange={(_, value) => onFormAccountCurrencyChanged(value!)}\r\n            />\r\n          </FormItem>\r\n          <FormItem formWidth={440}>\r\n            <Dropdown\r\n              label={formatMessage(AppMessages.timezoneLabel)}\r\n              ariaLabel={formatMessage(AppMessages.timezoneLabel)}\r\n              required={true}\r\n              options={this._createTimezoneDropDown(activeAccount.availableTimezones!)}\r\n              defaultSelectedKey={activeAccount.timeZoneId}\r\n              onChange={(_, value) => onFormAccountTimezoneChanged(value!)}\r\n              disabled={this._isDisabled(\r\n                this.props.mode,\r\n                accountAccessPermissions === null ? completeAccess : accountAccessPermissions.timeZone\r\n              )}\r\n            />\r\n          </FormItem>\r\n          {hasReadAccess(accountAccessPermissions === null ? completeAccess : accountAccessPermissions.accountLevelAttribute) && (\r\n            <FormSection title={formatMessage(messages.advancedAccountTitle)}>\r\n              {this._advancedAccountAttributes(activeAccount, accountAccessPermissions)}\r\n            </FormSection>\r\n          )}\r\n\r\n          {this.props.mode === FormState.Edit &&\r\n            hasReadAccess(accountAccessPermissions === null ? completeAccess : accountAccessPermissions.SKUs) && (\r\n              <>\r\n                <FormSection title={formatMessage(messages.skuTitle)}>{this._SKUs(activeAccount, accountAccessPermissions)}</FormSection>\r\n                <Panel\r\n                  isOpen={getPageStore().panelIsOpen}\r\n                  type={PanelType.medium}\r\n                  onDismiss={() => onPanelOpenChanged(false)}\r\n                  closeButtonAriaLabel={formatMessage(AppMessages.close)}\r\n                >\r\n                  {this._createSkuPanel(this.state.skuPanelFormState, activeAccount.id!)}\r\n                </Panel>\r\n              </>\r\n            )}\r\n        </DetailPage>\r\n      );\r\n    }\r\n\r\n    private _createSkuPanel = (mode: FormState, accountId: number): JSX.Element | null => {\r\n      const { formatMessage } = this.props.intl;\r\n      const accountSku = getStore().accountSku!;\r\n      if (accountSku) {\r\n        return (\r\n          <DetailPage\r\n            helpId={'pop_PCv4_SkuCreate'}\r\n            titleLabel={formatMessage(mode === FormState.InPageEdit ? messages.editSku : messages.createSku)}\r\n            submitLabel={formatMessage(mode === FormState.InPageEdit ? messages.editSku : messages.createSku)}\r\n            onSubmit={() => this._onAccountSkuSubmit(mode, accountId)}\r\n            onCancel={() => onPanelOpenChanged(false)}\r\n            saving={getAppStore().saving}\r\n            pageMode={mode}\r\n          >\r\n            <FormItem>\r\n              <Dropdown\r\n                label={formatMessage(messages.skuCategory)}\r\n                ariaLabel={formatMessage(messages.skuCategory)}\r\n                required={true}\r\n                options={this._createMediaTypeDropdown(accountSku.listOfMediums!)}\r\n                defaultSelectedKey={accountSku.medium!}\r\n                disabled={mode === FormState.InPageEdit}\r\n                onChange={(_, value) => onAccountSkuFormMediumChanged(value!)}\r\n              />\r\n            </FormItem>\r\n            <FormItem>\r\n              <Dropdown\r\n                label={formatMessage(messages.skuCode)}\r\n                ariaLabel={formatMessage(messages.skuCode)}\r\n                required={true}\r\n                options={this._createSkuDropDown(accountSku.availableSkus!)}\r\n                defaultSelectedKey={accountSku.sku!}\r\n                onChange={(_, value) => onAccountSkuFormSkuChanged(value!)}\r\n              />\r\n            </FormItem>\r\n          </DetailPage>\r\n        );\r\n      }\r\n      return nullRender();\r\n    };\r\n\r\n    private _onAccountSkuSubmit(mode: FormState, accountId: number): void {\r\n      onAccountSkuFormSubmitted(mode, accountId);\r\n      onPanelOpenChanged(false);\r\n    }\r\n\r\n    private _createSkuDropDown(skus: string[]): IDropdownOption[] {\r\n      const availableAccountSkus: IDropdownOption[] = [];\r\n      if (skus) {\r\n        skus.forEach((sku) => {\r\n          availableAccountSkus!.push({\r\n            key: sku,\r\n            text: sku,\r\n            ariaLabel: sku,\r\n          });\r\n        });\r\n      }\r\n      return availableAccountSkus;\r\n    }\r\n\r\n    private _advancedAccountAttributes = (\r\n      activeAccount: IAccountViewModel,\r\n      accountAccessPermissions: AccountAccessPermissions | null\r\n    ): JSX.Element => {\r\n      const { formatMessage } = this.props.intl;\r\n      const helpInfo = getAppStore().helpInfo;\r\n\r\n      const paymentLifeCycleStatusOptions: IDropdownOption[] = [\r\n        {\r\n          key: PaymentInstrumentLifeCycleStatus.Blacklisted,\r\n          text: formatMessage(messages.lifecycleStatusBlacklisted),\r\n          ariaLabel: formatMessage(messages.lifecycleStatusBlacklisted),\r\n        },\r\n        {\r\n          key: PaymentInstrumentLifeCycleStatus.Created,\r\n          text: formatMessage(messages.lifecycleStatusCreated),\r\n          ariaLabel: formatMessage(messages.lifecycleStatusCreated),\r\n        },\r\n        {\r\n          key: PaymentInstrumentLifeCycleStatus.PinFailed,\r\n          text: formatMessage(messages.lifecycleStatusPinFailed),\r\n          ariaLabel: formatMessage(messages.lifecycleStatusPinFailed),\r\n        },\r\n        {\r\n          key: PaymentInstrumentLifeCycleStatus.Failed,\r\n          text: formatMessage(messages.lifecycleStatusFailed),\r\n          ariaLabel: formatMessage(messages.lifecycleStatusFailed),\r\n        },\r\n        {\r\n          key: PaymentInstrumentLifeCycleStatus.Pending,\r\n          text: formatMessage(messages.lifecycleStatusPending),\r\n          ariaLabel: formatMessage(messages.lifecycleStatusPending),\r\n        },\r\n        {\r\n          key: PaymentInstrumentLifeCycleStatus.Success,\r\n          text: formatMessage(messages.lifecycleStatusSuccess),\r\n          ariaLabel: formatMessage(messages.lifecycleStatusSuccess),\r\n        },\r\n        {\r\n          key: PaymentInstrumentLifeCycleStatus.Submitted,\r\n          text: formatMessage(messages.lifecycleStatusSubmitted),\r\n          ariaLabel: formatMessage(messages.lifecycleStatusSubmitted),\r\n        },\r\n        {\r\n          key: PaymentInstrumentLifeCycleStatus.Validated,\r\n          text: formatMessage(messages.lifecycleStatusValidated),\r\n          ariaLabel: formatMessage(messages.lifecycleStatusValidated),\r\n        },\r\n      ];\r\n\r\n      const paymentOptionOptions: IDropdownOption[] = [\r\n        {\r\n          key: PaymentOption.MonthlyThreshold,\r\n          text: formatMessage(messages.paymentOptionMonthlyThreshold),\r\n          ariaLabel: formatMessage(messages.paymentOptionMonthlyThreshold),\r\n        },\r\n        {\r\n          key: PaymentOption.NoPay,\r\n          text: formatMessage(messages.paymentOptionNoPay),\r\n          ariaLabel: formatMessage(messages.paymentOptionNoPay),\r\n        },\r\n      ];\r\n      return (\r\n        <FormItem formWidth={440}>\r\n          <FormItem>\r\n            <Dropdown\r\n              label={formatMessage(messages.paymentOption)}\r\n              ariaLabel={formatMessage(messages.paymentOption)}\r\n              required={true}\r\n              options={paymentOptionOptions}\r\n              defaultSelectedKey={activeAccount.paymentOption}\r\n              onChange={(_, value) => onFormAccountPaymentOptionChanged(value!)}\r\n              disabled={this._isDisabled(\r\n                this.props.mode,\r\n                accountAccessPermissions === null ? completeAccess : accountAccessPermissions.paymentOption\r\n              )}\r\n            />\r\n          </FormItem>\r\n          <FormItem>\r\n            <Dropdown\r\n              label={formatMessage(messages.financialStatusLabel)}\r\n              ariaLabel={formatMessage(messages.financialStatusLabel)}\r\n              required={true}\r\n              options={[\r\n                {\r\n                  key: FinancialStatus.NoHold,\r\n                  text: formatMessage(messages.financialStatusNoHold),\r\n                  ariaLabel: formatMessage(messages.financialStatusNoHold),\r\n                },\r\n                {\r\n                  key: FinancialStatus.Hold,\r\n                  text: formatMessage(messages.financialStatusHold),\r\n                  ariaLabel: formatMessage(messages.financialStatusHold),\r\n                },\r\n                {\r\n                  key: FinancialStatus.TaxOnHold,\r\n                  text: formatMessage(messages.financialStatusTaxOnHold),\r\n                  ariaLabel: formatMessage(messages.financialStatusTaxOnHold),\r\n                },\r\n                {\r\n                  key: FinancialStatus.UserHold,\r\n                  text: formatMessage(messages.financialStatusUserHold),\r\n                  ariaLabel: formatMessage(messages.financialStatusUserHold),\r\n                },\r\n              ]}\r\n              defaultSelectedKey={activeAccount.financialStatus ? activeAccount.financialStatus : FinancialStatus.TaxOnHold}\r\n              onChange={(_, value) => onFormAccountFinancialStatusChanged(value!)}\r\n              disabled={this._isDisabled(\r\n                this.props.mode,\r\n                accountAccessPermissions === null ? completeAccess : accountAccessPermissions.financialStatus\r\n              )}\r\n            />\r\n          </FormItem>\r\n          <FormItem>\r\n            <Dropdown\r\n              label={formatMessage(messages.lifecycleStatusLabel)}\r\n              ariaLabel={formatMessage(messages.lifecycleStatusLabel)}\r\n              required={true}\r\n              options={paymentLifeCycleStatusOptions}\r\n              defaultSelectedKey={\r\n                activeAccount.paymentLifeCycleStatus ? activeAccount.paymentLifeCycleStatus : PaymentInstrumentLifeCycleStatus.Validated\r\n              }\r\n              onChange={(_, value) => onFormAccountPaymentLifeCycleStatusChanged(value!)}\r\n              disabled={this._isDisabled(\r\n                this.props.mode,\r\n                accountAccessPermissions === null ? completeAccess : accountAccessPermissions.paymentLifecycle\r\n              )}\r\n            />\r\n          </FormItem>\r\n          <FormItem>\r\n            <TextField\r\n              defaultValue={activeAccount.revenueSharePercentage !== undefined ? String(activeAccount.revenueSharePercentage) : '100'}\r\n              label={formatMessage(messages.revenueSharePercentageLabel)}\r\n              ariaLabel={formatMessage(messages.revenueSharePercentageLabel)}\r\n              errorMessage={getStore().errors.revenueSharePercentage}\r\n              required={true}\r\n              disabled={true}\r\n            />\r\n            <span>%</span>\r\n          </FormItem>\r\n          <FormItem>\r\n            <TextField\r\n              defaultValue={activeAccount.operationRatio ? String(activeAccount.operationRatio) : '0'}\r\n              label={formatMessage(messages.operationCostRationLabel)}\r\n              ariaLabel={formatMessage(messages.operationCostRationLabel)}\r\n              errorMessage={getStore().errors.operationRatio}\r\n              onChange={(_, value) => onFormAccountOperationRatioChanged(value!)}\r\n              disabled={this._isDisabled(\r\n                this.props.mode,\r\n                accountAccessPermissions === null ? completeAccess : accountAccessPermissions.operationCostRation\r\n              )}\r\n            />\r\n          </FormItem>\r\n\r\n          <FormItem role=\"region\" ariaLabelledBy=\"accountLvlattrLabel\" ariaDescription={formatMessage(messages.accountLevelattributesDesc)}>\r\n            <FormLabel\r\n              id=\"accountLvlattrLabel\"\r\n              labelContent={formatMessage(messages.accountLevelattributesLabel)}\r\n              noInfoButton={true}\r\n              intl={this.props.intl}\r\n            />\r\n            <Checkbox\r\n              label={formatMessage(messages.enablePassedURLs)}\r\n              ariaLabel={formatMessage(messages.enablePassedURLs)}\r\n              styles={this._classNames.subComponentStyles.checkbox}\r\n              checked={!!activeAccount.allowPassedURL}\r\n              onChange={(_, value) => onFormAccountAllowPassedURLChanged(value)}\r\n              disabled={this._isDisabled(\r\n                this.props.mode,\r\n                accountAccessPermissions === null ? completeAccess : accountAccessPermissions.accountLevelAttribute\r\n              )}\r\n            />\r\n            <Checkbox\r\n              label={formatMessage(messages.enablePassedKeywords)}\r\n              ariaLabel={formatMessage(messages.enablePassedKeywords)}\r\n              styles={this._classNames.subComponentStyles.checkbox}\r\n              checked={!!activeAccount.allowPassedKeyword}\r\n              onChange={(_, value) => onFormAccountAllowPassedKeywordChanged(value)}\r\n              disabled={this._isDisabled(\r\n                this.props.mode,\r\n                accountAccessPermissions === null ? completeAccess : accountAccessPermissions.accountLevelAttribute\r\n              )}\r\n            />\r\n            <Checkbox\r\n              label={formatMessage(messages.donotCrawl)}\r\n              ariaLabel={formatMessage(messages.donotCrawl)}\r\n              styles={this._classNames.subComponentStyles.checkbox}\r\n              checked={!!activeAccount.allowCrawling}\r\n              onChange={(_, value) => onFormAccountAllowCrawlingChanged(value)}\r\n              disabled={this._isDisabled(\r\n                this.props.mode,\r\n                accountAccessPermissions === null ? completeAccess : accountAccessPermissions.accountLevelAttribute\r\n              )}\r\n            />\r\n            <Checkbox\r\n              label={formatMessage(messages.enableAdultAds)}\r\n              ariaLabel={formatMessage(messages.enableAdultAds)}\r\n              styles={this._classNames.subComponentStyles.checkbox}\r\n              checked={!!activeAccount.allowAdultAds}\r\n              onChange={(_, value) => onFormAccountAllowAdultAdsChanged(value)}\r\n            />\r\n            <Checkbox\r\n              label={formatMessage(messages.enableGlobalDefaultKeywords)}\r\n              ariaLabel={formatMessage(messages.enableGlobalDefaultKeywords)}\r\n              styles={this._classNames.subComponentStyles.checkbox}\r\n              checked={!!activeAccount.allowGlobalDefaultKeywords}\r\n              onChange={(_, value) => onFormAccountAllowGlobalDefaultKeywordsChanged(value)}\r\n              disabled={this._isDisabled(\r\n                this.props.mode,\r\n                accountAccessPermissions === null ? completeAccess : accountAccessPermissions.accountLevelAttribute\r\n              )}\r\n            />\r\n            <Checkbox\r\n              label={formatMessage(messages.enableSiteLink)}\r\n              ariaLabel={formatMessage(messages.enableSiteLink)}\r\n              styles={this._classNames.subComponentStyles.checkbox}\r\n              checked={!!activeAccount.allowSiteLinkExtensions}\r\n              onChange={(_, value) => onFormAccountAllowSiteLinkExtensionsChanged(value)}\r\n              disabled={this._isDisabled(\r\n                this.props.mode,\r\n                accountAccessPermissions === null ? completeAccess : accountAccessPermissions.accountLevelAttribute\r\n              )}\r\n            />\r\n            <Checkbox\r\n              label={formatMessage(messages.meteredCallExtensions)}\r\n              ariaLabel={formatMessage(messages.meteredCallExtensions)}\r\n              styles={this._classNames.subComponentStyles.checkbox}\r\n              checked={!!activeAccount.allowMeteredCallExtensions}\r\n              onChange={(_, value) => onFormAccountAllowMeteredCallExtensionsChanged(value)}\r\n              disabled={this._isDisabled(\r\n                this.props.mode,\r\n                accountAccessPermissions === null ? completeAccess : accountAccessPermissions.accountLevelAttribute\r\n              )}\r\n            />\r\n            <Checkbox\r\n              label={formatMessage(messages.locationExtension)}\r\n              ariaLabel={formatMessage(messages.locationExtension)}\r\n              styles={this._classNames.subComponentStyles.checkbox}\r\n              checked={!!activeAccount.allowLocationExtensions}\r\n              onChange={(_, value) => onFormAccountAllowLocationExtensionsChanged(value)}\r\n              disabled={this._isDisabled(\r\n                this.props.mode,\r\n                accountAccessPermissions === null ? completeAccess : accountAccessPermissions.accountLevelAttribute\r\n              )}\r\n            />\r\n            <Checkbox\r\n              label={formatMessage(messages.phoneExtension)}\r\n              ariaLabel={formatMessage(messages.phoneExtension)}\r\n              styles={this._classNames.subComponentStyles.checkbox}\r\n              checked={!!activeAccount.allowPhoneExtensions}\r\n              onChange={(_, value) => onFormAccountAllowPhoneExtensionsChanged(value)}\r\n              disabled={this._isDisabled(\r\n                this.props.mode,\r\n                accountAccessPermissions === null ? completeAccess : accountAccessPermissions.accountLevelAttribute\r\n              )}\r\n            />\r\n            <Checkbox\r\n              label={formatMessage(messages.meteredRatingExtensions)}\r\n              ariaLabel={formatMessage(messages.meteredRatingExtensions)}\r\n              styles={this._classNames.subComponentStyles.checkbox}\r\n              checked={!!activeAccount.allowMerchantRatingExtensions}\r\n              onChange={(_, value) => onFormAccountAllowMerchantRatingExtensionsChanged(value)}\r\n              disabled={this._isDisabled(\r\n                this.props.mode,\r\n                accountAccessPermissions === null ? completeAccess : accountAccessPermissions.accountLevelAttribute\r\n              )}\r\n            />\r\n            <Checkbox\r\n              label={formatMessage(messages.localExtension)}\r\n              ariaLabel={formatMessage(messages.localExtension)}\r\n              styles={this._classNames.subComponentStyles.checkbox}\r\n              checked={!!activeAccount.allowLocalExtensions}\r\n              onChange={(_, value) => onFormAccountAllowLocalExtensionsChanged(value)}\r\n              disabled={this._isDisabled(\r\n                this.props.mode,\r\n                accountAccessPermissions === null ? completeAccess : accountAccessPermissions.accountLevelAttribute\r\n              )}\r\n            />\r\n            <Checkbox\r\n              label={formatMessage(messages.callExtension)}\r\n              ariaLabel={formatMessage(messages.callExtension)}\r\n              styles={this._classNames.subComponentStyles.checkbox}\r\n              checked={!!activeAccount.allowCallExtensions}\r\n              onChange={(_, value) => onFormAccountAllowCallExtensionsChanged(value)}\r\n              disabled={this._isDisabled(\r\n                this.props.mode,\r\n                accountAccessPermissions === null ? completeAccess : accountAccessPermissions.accountLevelAttribute\r\n              )}\r\n            />\r\n          </FormItem>\r\n          <FormItem role=\"region\" ariaLabel={formatMessage(messages.privateMarketplace)}>\r\n            <FormLabel\r\n              id=\"privateMarketplaceLabel\"\r\n              labelContent={formatMessage(messages.privateMarketplace)}\r\n              intl={this.props.intl}\r\n              calloutContent={helpInfo}\r\n              iconButtonOnClick={() => onHelpInfoCalloutOpened('pop_PCv4_AdUnitsPromotions')}\r\n              calloutOnDismiss={() => onHelpInfoChanged()}\r\n            />\r\n            <ChoiceGroup\r\n              aria-activedescendant={formatMessage(messages.inHousePromotions)}\r\n              ariaLabelledBy={'privateMarketplaceLabel'}\r\n              selectedKey={getStore().privateMarketplace}\r\n              options={[\r\n                {\r\n                  id: formatMessage(messages.inHousePromotions),\r\n                  key: PrivateMarketplace.InHouse,\r\n                  text: formatMessage(messages.inHousePromotions),\r\n                },\r\n                {\r\n                  id: formatMessage(messages.boost),\r\n                  key: PrivateMarketplace.Boost,\r\n                  text: formatMessage(messages.boost),\r\n                },\r\n              ]}\r\n              onChange={(_, value) => onAccountPrivateMarketplaceChanged(value!)}\r\n              disabled={this._isDisabled(\r\n                this.props.mode,\r\n                accountAccessPermissions === null ? completeAccess : accountAccessPermissions.accountLevelAttribute\r\n              )}\r\n            />\r\n          </FormItem>\r\n          {getStore().enablePrivateMarketplace && (\r\n            <FormItem formWidth={440}>\r\n              <TextField\r\n                multiline={true}\r\n                placeholder={formatMessage(this._getAdvertisersWhitelistTextFieldPlaceholder())}\r\n                errorMessage={getStore().errors.storeIds}\r\n                aria-labelledby=\"storeIdLabel\"\r\n                onRenderLabel={() => {\r\n                  return (\r\n                    <FormLabel\r\n                      id=\"storeIdLabel\"\r\n                      labelContent={formatMessage(this._getAdvertisersWhitelistTextFieldLabel())}\r\n                      intl={this.props.intl}\r\n                      noInfoButton={true}\r\n                    />\r\n                  );\r\n                }}\r\n                value={activeAccount.storeIds}\r\n                onChange={(_, value) => onFormAccountStoreIdsChanged(value)}\r\n                disabled={this._isDisabled(\r\n                  this.props.mode,\r\n                  accountAccessPermissions === null ? completeAccess : accountAccessPermissions.inHousePromotion\r\n                )}\r\n              />\r\n            </FormItem>\r\n          )}\r\n\r\n          {getStore().active.isDistributionReportingApplicable && (\r\n            <FormItem formWidth={440}>\r\n              <TextField\r\n                multiline={true}\r\n                placeholder={formatMessage(messages.partnerCodeText)}\r\n                errorMessage={getStore().errors.partnerCodes}\r\n                aria-labelledby=\"partnerCodeLabel\"\r\n                onRenderLabel={() => {\r\n                  return (\r\n                    <FormLabel\r\n                      id=\"partnerCodeLabel\"\r\n                      labelContent={formatMessage(messages.partnerCodeLabel)}\r\n                      noInfoButton={true}\r\n                      intl={this.props.intl}\r\n                    />\r\n                  );\r\n                }}\r\n                value={activeAccount.partnerCodes}\r\n                onChange={(_, value) => onFormAccountPartnerCodesChanged(value)}\r\n                disabled={this._isDisabled(\r\n                  this.props.mode,\r\n                  accountAccessPermissions === null ? completeAccess : accountAccessPermissions.partnerCodesforDistributionReport\r\n                )}\r\n              />\r\n            </FormItem>\r\n          )}\r\n\r\n          {getStore().active.isDistributionReportingApplicable && (\r\n            <FormItem formWidth={440}>\r\n              <TextField\r\n                multiline={true}\r\n                placeholder={formatMessage(messages.formCodeText)}\r\n                errorMessage={getStore().errors.formCodes}\r\n                aria-labelledby=\"formCodeLabel\"\r\n                onRenderLabel={() => {\r\n                  return (\r\n                    <FormLabel\r\n                      id=\"formCodeLabel\"\r\n                      labelContent={formatMessage(messages.formCodeLabel)}\r\n                      noInfoButton={true}\r\n                      intl={this.props.intl}\r\n                    />\r\n                  );\r\n                }}\r\n                value={activeAccount.formCodes}\r\n                onChange={(_, value) => onFormAccountFormCodesChanged(value)}\r\n                disabled={this._isDisabled(\r\n                  this.props.mode,\r\n                  accountAccessPermissions === null ? completeAccess : accountAccessPermissions.formCodesforDistributionReport\r\n                )}\r\n              />\r\n            </FormItem>\r\n          )}\r\n\r\n          {getStore().active.isStartDistributionReportingApplicable && (\r\n            <FormItem formWidth={440}>\r\n              <TextField\r\n                multiline={true}\r\n                placeholder={formatMessage(messages.startDistributionPlacementCodeText)}\r\n                errorMessage={getStore().errors.startDistributionPlacementCodes}\r\n                aria-labelledby=\"startDistributionPlacementCodeLabel\"\r\n                onRenderLabel={() => {\r\n                  return (\r\n                    <FormLabel\r\n                      id=\"startDistributionPlacementCodeLabel\"\r\n                      labelContent={formatMessage(messages.startDistributionPlacementCodeLabel)}\r\n                      calloutContent={helpInfo}\r\n                      iconButtonOnClick={() => onHelpInfoCalloutOpened('pop_PCv4_AdUnitsPromotions')}\r\n                      calloutOnDismiss={() => onHelpInfoChanged()}\r\n                      intl={this.props.intl}\r\n                    />\r\n                  );\r\n                }}\r\n                value={activeAccount.startDistributionPlacementCodes}\r\n                onChange={(_, value) => onFormAccountStartDistributionPlacementCodesChanged(value)}\r\n                disabled={this._isDisabled(\r\n                  this.props.mode,\r\n                  accountAccessPermissions === null ? completeAccess : accountAccessPermissions.startDistributionReporting\r\n                )}\r\n              />\r\n            </FormItem>\r\n          )}\r\n\r\n          {getStore().active.isStartDistributionReportingApplicable && (\r\n            <FormItem>\r\n              <TextField\r\n                defaultValue={\r\n                  activeAccount.startDistributionNativeAdsInFeedsAndHeadlinesRevenueSharePercentage !== undefined\r\n                    ? String(activeAccount.startDistributionNativeAdsInFeedsAndHeadlinesRevenueSharePercentage)\r\n                    : ''\r\n                }\r\n                label={formatMessage(messages.startDistributionNativeAdsInFeedsAndHeadlinesRevenueSharePercentageText)}\r\n                ariaLabel={formatMessage(messages.startDistributionNativeAdsInFeedsAndHeadlinesRevenueSharePercentageText)}\r\n                errorMessage={getStore().errors.startDistributionNativeAdsInFeedsAndHeadlinesRevenueSharePercentage}\r\n                onChange={(_, value) => onFormAccountStartDistributionNativeAdsInFeedsAndHeadlinesRevenueSharePercentageChanged(value)}\r\n                required={this._isStartDistributionNativeAdsInFeedsAndHeadlinesRevenueSharePercentageRequired()}\r\n                disabled={this._isStartDistributionNativeAdsInFeedsAndHeadlinesRevenuePercentageShareDisabled()}\r\n              />\r\n              <span>%</span>\r\n            </FormItem>\r\n          )}\r\n          {getStore().active.isStartDistributionContentReportingApplicable && (\r\n            <FormItem formWidth={440}>\r\n              <TextField\r\n                multiline={true}\r\n                placeholder={formatMessage(messages.startDistributionOCIDL2Text)}\r\n                errorMessage={getStore().errors.startDistributionOCIDL2s}\r\n                aria-labelledby=\"startDistributionOCIDL2Label\"\r\n                onRenderLabel={() => {\r\n                  return (\r\n                    <FormLabel\r\n                      id=\"startDistributionOCIDL2Label\"\r\n                      labelContent={formatMessage(messages.startDistributionOCIDL2Label)}\r\n                      calloutContent={helpInfo}\r\n                      iconButtonOnClick={() => onHelpInfoCalloutOpened('pop_PCv4_AdUnitsPromotions')}\r\n                      calloutOnDismiss={() => onHelpInfoChanged()}\r\n                      intl={this.props.intl}\r\n                    />\r\n                  );\r\n                }}\r\n                value={activeAccount.startDistributionOCIDL2s}\r\n                onChange={(_, value) => onFormAccountStartDistributionOCIDL2sChanged(value)}\r\n                disabled={this._isDisabled(\r\n                  this.props.mode,\r\n                  accountAccessPermissions === null ? completeAccess : accountAccessPermissions.startDistributionReporting\r\n                )}\r\n              />\r\n            </FormItem>\r\n          )}\r\n        </FormItem>\r\n      );\r\n    };\r\n    private _getAdvertisersWhitelistTextFieldLabel = () => {\r\n      const store = getStore();\r\n      return store.privateMarketplace === PrivateMarketplace.InHouse\r\n        ? messages.storeIdLabel\r\n        : store.privateMarketplace === PrivateMarketplace.Boost\r\n        ? messages.boostIdsLabel\r\n        : messages.privateMarketplaceIdsLabel;\r\n    };\r\n    private _getAdvertisersWhitelistTextFieldPlaceholder = () => {\r\n      const store = getStore();\r\n      return store.privateMarketplace === PrivateMarketplace.InHouse\r\n        ? messages.storeIdExampleText\r\n        : store.privateMarketplace === PrivateMarketplace.Boost\r\n        ? messages.boostIdsExampleText\r\n        : messages.privateMarketplaceExampleText;\r\n    };\r\n    private _createMediaTypeDropdown(existingMediums: string[]): IDropdownOption[] {\r\n      const { formatMessage } = this.props.intl;\r\n      const availableMediaTypes: IDropdownOption[] = [];\r\n\r\n      existingMediums.forEach((mediaType) => {\r\n        if (MediaTypeMessages[mediaType]) {\r\n          availableMediaTypes!.push({\r\n            key: mediaType,\r\n            text: formatMessage(MediaTypeMessages[mediaType]),\r\n            ariaLabel: formatMessage(MediaTypeMessages[mediaType]),\r\n          });\r\n        }\r\n      });\r\n\r\n      return availableMediaTypes;\r\n    }\r\n\r\n    private _createTimezoneDropDown(timezones: number[]): IDropdownOption[] {\r\n      const availableTimezones: IDropdownOption[] = [];\r\n      const TIMEZONE = TIMEZONE_LANGUAGE_MAPPING[getAppStore().locale];\r\n\r\n      if (timezones) {\r\n        timezones.forEach((timezoneId) => {\r\n          if (TIMEZONE[timezoneId]) {\r\n            availableTimezones!.push({\r\n              key: timezoneId,\r\n              text: TIMEZONE[timezoneId],\r\n              ariaLabel: TIMEZONE[timezoneId],\r\n            });\r\n          }\r\n        });\r\n      }\r\n\r\n      return availableTimezones;\r\n    }\r\n\r\n    private _createLanguageDropDown(languages: string[]): IDropdownOption[] {\r\n      const availableLanguages: IDropdownOption[] = [];\r\n      const LANGUAGES = LANGUAGES_LANGUAGE_MAPPING[getAppStore().locale];\r\n\r\n      if (languages) {\r\n        languages.forEach((languageCode) => {\r\n          if (LANGUAGES[languageCode]) {\r\n            availableLanguages!.push({\r\n              key: languageCode,\r\n              text: LANGUAGES[languageCode],\r\n              ariaLabel: LANGUAGES[languageCode],\r\n            });\r\n          }\r\n        });\r\n      }\r\n\r\n      return availableLanguages;\r\n    }\r\n\r\n    private _createPrimaryContactDropDown(users: User[]): IDropdownOption[] {\r\n      const availableUsers: IDropdownOption[] = [];\r\n\r\n      if (users) {\r\n        users.forEach((user) => {\r\n          availableUsers!.push({\r\n            key: user.id!,\r\n            text: user.username as string,\r\n            ariaLabel: user.username as string,\r\n          });\r\n        });\r\n      }\r\n\r\n      return availableUsers;\r\n    }\r\n\r\n    private _createCountryDropDown(countries: string[]): IComboBoxOption[] {\r\n      const availableCountrys: IComboBoxOption[] = [];\r\n      const countriesWithLocalLang = COUNTRIES_LANGUAGE_MAPPING[getAppStore().locale];\r\n\r\n      if (countries) {\r\n        countries.forEach((countryCode) => {\r\n          if (countriesWithLocalLang[countryCode]) {\r\n            availableCountrys!.push({\r\n              key: countryCode,\r\n              text: countriesWithLocalLang[countryCode],\r\n              ariaLabel: countriesWithLocalLang[countryCode],\r\n            });\r\n          }\r\n        });\r\n      }\r\n      availableCountrys.sort((a, b) => {\r\n        const firstValue = a.text;\r\n        const secondValue = b.text;\r\n\r\n        return firstValue.toLowerCase() > secondValue.toLowerCase() ? 1 : -1;\r\n      });\r\n      return availableCountrys;\r\n    }\r\n\r\n    private _SKUs = (activeAccount: IAccountViewModel, accountAccessPermissions: AccountAccessPermissions | null): JSX.Element => {\r\n      const { formatMessage } = this.props.intl;\r\n      const appStore = getAppStore();\r\n      const _gridDefaultColumns: IDataGridColumn[] = [\r\n        { columnName: 'medium', friendlyName: 'Category', isVisible: true },\r\n        { columnName: 'sku', friendlyName: 'SKU code', isVisible: true },\r\n      ];\r\n      const _commandBarProps: IDataGridCommandBarProps = {\r\n        items: [\r\n          {\r\n            key: 'new',\r\n            name: formatMessage(messages.createSku),\r\n            ariaLabel: formatMessage(messages.createSku),\r\n            iconProps: {\r\n              iconName: 'Add',\r\n              ariaLabel: 'Add',\r\n            },\r\n            selectionModes: [DataGridSelectionMode.None],\r\n            disabled: activeAccount.nonSKUMappedMediums && activeAccount.nonSKUMappedMediums.length === 0,\r\n            onClick: () => {\r\n              this.setState({ skuPanelFormState: FormState.InPageCreate });\r\n              const skuSidePanel: ISkuSidePanelProps = {\r\n                mode: FormState.InPageCreate,\r\n                accountSkus: activeAccount.skus,\r\n                nonSKUMappedMediums: activeAccount.nonSKUMappedMediums,\r\n              };\r\n              onAccountSkuSidePanelInitialized(skuSidePanel);\r\n            },\r\n          },\r\n          {\r\n            key: 'edit',\r\n            name: formatMessage(AppMessages.edit),\r\n            ariaLabel: formatMessage(AppMessages.edit),\r\n            iconProps: {\r\n              iconName: 'Edit',\r\n              ariaLabel: 'Edit',\r\n            },\r\n            onClick: () => {\r\n              const item = this._getSelectionItems();\r\n              if (item) {\r\n                this.setState({ skuPanelFormState: FormState.InPageEdit });\r\n                const skuSidePanel: ISkuSidePanelProps = {\r\n                  mode: FormState.InPageEdit,\r\n                  selectedAccountSku: item[0],\r\n                };\r\n                onAccountSkuSidePanelInitialized(skuSidePanel);\r\n              }\r\n            },\r\n            selectionModes: [DataGridSelectionMode.Single],\r\n          },\r\n        ],\r\n      };\r\n      return (\r\n        <div className={this._classNames.datagrid}>\r\n          <DataGrid\r\n            intl={this.props.intl}\r\n            helpInfo={appStore.helpInfo}\r\n            componentRef={this._datagrid}\r\n            commandBarProps={_commandBarProps}\r\n            dataIsLoading={false}\r\n            detailListProps={{\r\n              items: activeAccount.skus !== undefined ? activeAccount.skus!.filter((accountSku) => accountSku.medium !== undefined) : [],\r\n              columns: _gridDefaultColumns,\r\n            }}\r\n          />\r\n        </div>\r\n      );\r\n    };\r\n\r\n    private _getSelectionItems() {\r\n      if (this._datagrid.current) {\r\n        const currentSelection = this._datagrid.current.getSelection();\r\n        const selectedIndices = currentSelection.getSelectedIndices();\r\n        const items = currentSelection.getItems();\r\n\r\n        const selectedItems: AccountSKU[] = [];\r\n        selectedIndices.map((selectedIndex) => selectedItems.push(items[selectedIndex] as AccountSKU));\r\n        return selectedItems;\r\n      }\r\n      return null;\r\n    }\r\n\r\n    private _onSubmit = (publisherId?: string): void => {\r\n      this.setState({ initializeForm: false });\r\n      onFormSubmitted(this.props.mode, this.props.history);\r\n    };\r\n\r\n    private _onCancel = (publisherId?: string): void => {\r\n      this.setState({ initializeForm: false });\r\n      onFormCancelled();\r\n      const returnUrl = createReturnUrl(RouteName.account, publisherId);\r\n      onNavigateBack(this.props.history, returnUrl);\r\n    };\r\n\r\n    private _getAccountAccessPermission(): AccountAccessPermissions | null {\r\n      const userRoles = localStorage.getItem(userRoleKey);\r\n      if (userRoles === null) {\r\n        return null;\r\n      }\r\n      const userRolesJSON = JSON.parse(userRoles);\r\n\r\n      for (const value in userRolesJSON) {\r\n        if (value === UserRoleEntity.Account) {\r\n          return JSON.parse(userRolesJSON[value]);\r\n        }\r\n      }\r\n\r\n      return null;\r\n    }\r\n\r\n    private _isStartDistributionNativeAdsInFeedsAndHeadlinesRevenueSharePercentageRequired(): boolean {\r\n      const placementCodeText = getStore().active.startDistributionPlacementCodes;\r\n      const hasStartDistributionPlacementCodes =\r\n        placementCodeText !== null && placementCodeText !== undefined && placementCodeText.trim().length > 0;\r\n      const isRevShareDisabled = this._isStartDistributionNativeAdsInFeedsAndHeadlinesRevenuePercentageShareDisabled();\r\n      return hasStartDistributionPlacementCodes && !isRevShareDisabled;\r\n    }\r\n\r\n    private _isStartDistributionNativeAdsInFeedsAndHeadlinesRevenuePercentageShareDisabled(): boolean {\r\n      const accountAccessPermissions = this._getAccountAccessPermission();\r\n      return this._isDisabled(\r\n        this.props.mode,\r\n        accountAccessPermissions === null ? completeAccess : accountAccessPermissions.startDistributionReporting\r\n      );\r\n    }\r\n\r\n    private _isDisabled(mode: FormState, permission: number): boolean {\r\n      if (mode === FormState.Create || mode === FormState.InPageCreate) {\r\n        return false;\r\n      }\r\n\r\n      return !hasUpdateAccess(permission);\r\n    }\r\n  }\r\n);\r\n","import { defineMessages } from 'react-intl';\r\n\r\nexport default defineMessages({\r\n  create: {\r\n    id: 'account.create',\r\n    defaultMessage: 'Create Account',\r\n  },\r\n  notFound: {\r\n    id: 'account.notFound',\r\n    defaultMessage: 'No accounts found for this publisher, create one.',\r\n  },\r\n  name: {\r\n    id: 'account.name',\r\n    defaultMessage: 'Account name',\r\n  },\r\n  id: {\r\n    id: 'account.id',\r\n    defaultMessage: 'Account ID',\r\n  },\r\n  number: {\r\n    id: 'account.number',\r\n    defaultMessage: 'Account Number',\r\n  },\r\n  contact: {\r\n    id: 'account.contact',\r\n    defaultMessage: 'Primary contact',\r\n  },\r\n  numAdUnits: {\r\n    id: 'account.numAdUnits',\r\n    defaultMessage: '# of ad units',\r\n  },\r\n  adunitnames: {\r\n    id: 'account.adunitnames',\r\n    defaultMessage: 'Ad unit names',\r\n  },\r\n  createdDate: {\r\n    id: 'account.createdDate',\r\n    defaultMessage: 'Date Created',\r\n  },\r\n  accounts: {\r\n    id: 'account',\r\n    defaultMessage: 'Accounts',\r\n  },\r\n  noPublisherSelected: {\r\n    id: 'publisher.noPublisherSelected',\r\n    defaultMessage: 'A publisher isn’t selected yet. To start managing accounts, search for a publisher',\r\n  },\r\n  actions: {\r\n    id: 'publisher.actions',\r\n    defaultMessage: 'Actions',\r\n  },\r\n  zeroResultTitle: {\r\n    id: 'publisher.zeroResultTitle',\r\n    defaultMessage: 'No accounts yet',\r\n  },\r\n  zeroResultDescription: {\r\n    id: 'publisher.zeroResultDescription',\r\n    defaultMessage: 'You haven’t created any accounts yet',\r\n  },\r\n});\r\n","import { Model, getAppStore } from '../../../../../@data';\r\nimport { CommandBarActions, IBuildCommandBarProps } from '../../../../../layout/GridPageV2';\r\nimport { getStore } from '../../@data';\r\nimport messages from '../ManagePage.messages';\r\n\r\nexport function getCommandBarItems(): IBuildCommandBarProps<Model> | undefined {\r\n  const { publisher } = getAppStore();\r\n  const { accounts, isLoading } = getStore();\r\n\r\n  const commandBarItems =\r\n    (accounts && accounts.length !== 0 && publisher) || isLoading\r\n      ? {\r\n          primaryButtonLabel: messages.create,\r\n          includeActions: [CommandBarActions.new],\r\n          includeFarActions: [\r\n            CommandBarActions.searchBox,\r\n            CommandBarActions.edit,\r\n            CommandBarActions.activate,\r\n            CommandBarActions.deactivate,\r\n            CommandBarActions.duplicate,\r\n            CommandBarActions.download,\r\n            CommandBarActions.modifyColumns,\r\n          ],\r\n        }\r\n      : undefined;\r\n\r\n  return commandBarItems;\r\n}\r\n","import * as React from 'react';\r\nimport { useEffect } from 'react';\r\nimport { Account, getAppStore } from '../../../../@data';\r\nimport { ZeroResults } from '../../../../components/ZeroResults/ZeroResults';\r\nimport { useWindowSize } from '../../../../hooks';\r\nimport { getStore as getWindowSizeStore } from '../../../../hooks/useWindowSize/store/store';\r\nimport { GridPageLayout } from '../../../../layout/GridPageLayout/GridPageLayout';\r\nimport { GridV2, IGridV2Column } from '../../../../layout/GridPageV2';\r\nimport { IRouterWithIntl, injectIntlWithObserver } from '../../../../utils/ReactUtils';\r\nimport { RouteName } from '../../@data';\r\nimport { getStore } from '../@data';\r\nimport { onAccountsFetched, onManagePageInitialized } from '../@data/actions';\r\nimport messages from './ManagePage.messages';\r\nimport { getCommandBarItems } from './utils/getCommandBarItems';\r\nimport { getGridColumns } from './utils/getGridColumns';\r\n\r\nexport const ManagePage = injectIntlWithObserver(function AccountManagePage(props: IRouterWithIntl) {\r\n  const { publisher } = getAppStore();\r\n  const { accounts, isLoading, isFetchingData } = getStore();\r\n  const { formatMessage } = props.intl;\r\n  const { windowStoreSerializer } = useWindowSize();\r\n  const { isWindowRegularSize } = windowStoreSerializer(getWindowSizeStore());\r\n  const gridDefaultColumns: IGridV2Column[] = getGridColumns(formatMessage, isWindowRegularSize, props.history);\r\n\r\n  const NoResultComponent = (\r\n    <ZeroResults\r\n      showDefaultImage\r\n      title={!!publisher ? formatMessage(messages.zeroResultTitle) : undefined}\r\n      description={formatMessage(!!publisher ? messages.zeroResultDescription : messages.noPublisherSelected)}\r\n      buttonText={!!publisher ? formatMessage(messages.create) : undefined}\r\n      href={`${RouteName.account}/create`}\r\n    />\r\n  );\r\n\r\n  useEffect(() => {\r\n    onManagePageInitialized();\r\n    // eslint-disable-next-line\r\n  }, [publisher]);\r\n\r\n  return (\r\n    <GridPageLayout>\r\n      <GridV2\r\n        history={props.history}\r\n        location={props.location}\r\n        match={props.match}\r\n        entity={Account}\r\n        pageTitle={{ title: formatMessage(messages.accounts), helpId: 'pop_PCv4_Accounts' }}\r\n        commandBarProps={getCommandBarItems()}\r\n        dataGridProps={{\r\n          gridV2Columns: gridDefaultColumns,\r\n          data: publisher ? accounts || [] : [],\r\n          setData: onAccountsFetched,\r\n          shimmerLines: 10,\r\n          renderZeroItemsComponent: NoResultComponent,\r\n        }}\r\n        isGridReady={!isLoading}\r\n        isDataLoading={isFetchingData}\r\n        paginationProps={{\r\n          shouldGridHandlePagination: true,\r\n        }}\r\n      />\r\n    </GridPageLayout>\r\n  );\r\n});\r\n","import { CommandBarButton } from '@fluentui/react';\r\nimport React from 'react';\r\nimport { Account, getAccessPermission, getAppStore } from '../../../../../@data';\r\nimport { hasUpdateAccess } from '../../../../../@data/services/UserRoleService';\r\nimport AppMessages from '../../../../../App.messages';\r\nimport { IGridV2Column } from '../../../../../layout/GridPageV2';\r\nimport messages from '../ManagePage.messages';\r\n\r\nexport function getGridColumns(formatMessage, isWindowRegularSize, routeHistory): IGridV2Column[] {\r\n  const { publisher } = getAppStore();\r\n\r\n  const columns: IGridV2Column[] = [\r\n    {\r\n      columnOrder: 1,\r\n      key: 'name',\r\n      fieldName: 'name',\r\n      name: formatMessage(messages.name),\r\n      minWidth: 200,\r\n      maxWidth: 200,\r\n      isSearchable: true,\r\n      isVisible: true,\r\n      isExportable: true,\r\n      isResizable: true,\r\n      suppressSorting: false,\r\n    },\r\n    {\r\n      columnOrder: 2,\r\n      key: 'id',\r\n      fieldName: 'id',\r\n      name: formatMessage(messages.id),\r\n      minWidth: 150,\r\n      maxWidth: 150,\r\n      isSearchable: true,\r\n      isVisible: true,\r\n      isExportable: true,\r\n      isResizable: true,\r\n    },\r\n    {\r\n      columnOrder: 3,\r\n      key: 'number',\r\n      fieldName: 'number',\r\n      name: formatMessage(messages.number),\r\n      minWidth: 150,\r\n      maxWidth: 150,\r\n      isSearchable: true,\r\n      isVisible: true,\r\n      isExportable: true,\r\n    },\r\n    {\r\n      columnOrder: 4,\r\n      key: 'status',\r\n      fieldName: 'status',\r\n      name: formatMessage(AppMessages.status),\r\n      minWidth: 150,\r\n      maxWidth: 150,\r\n      isSearchable: true,\r\n      isVisible: true,\r\n      isExportable: true,\r\n    },\r\n    {\r\n      columnOrder: 6,\r\n      key: 'primaryContactUsername',\r\n      fieldName: 'primaryContactUsername',\r\n      name: formatMessage(messages.contact),\r\n      minWidth: 150,\r\n      maxWidth: 150,\r\n      isSearchable: true,\r\n      isVisible: true,\r\n      isExportable: true,\r\n    },\r\n    {\r\n      columnOrder: 7,\r\n      key: 'createdDateTime',\r\n      fieldName: 'createdDateTime',\r\n      name: formatMessage(messages.createdDate),\r\n      minWidth: 150,\r\n      maxWidth: 150,\r\n      isSearchable: true,\r\n      isVisible: true,\r\n      isExportable: true,\r\n    },\r\n    {\r\n      columnOrder: 8,\r\n      key: 'actions',\r\n      name: formatMessage(messages.actions),\r\n      minWidth: 150,\r\n      maxWidth: 150,\r\n      isPadded: true,\r\n      isSearchable: true,\r\n      isVisible: true,\r\n      suppressSorting: true,\r\n      onRender: (item: Account) => {\r\n        const accessPermission = getAccessPermission(item);\r\n\r\n        return (\r\n          <CommandBarButton\r\n            styles={{ root: { background: 'transparent' } }}\r\n            iconProps={{ iconName: 'edit' }}\r\n            ariaLabel={formatMessage(AppMessages.edit)}\r\n            text={isWindowRegularSize ? formatMessage(AppMessages.edit) : ''}\r\n            disabled={!hasUpdateAccess(accessPermission) || publisher === undefined}\r\n            onClick={() => routeHistory.push(`/partner-management/${publisher?.id}/account/edit/${item.id}`)}\r\n          />\r\n        );\r\n      },\r\n    },\r\n  ];\r\n\r\n  return columns;\r\n}\r\n","import * as React from 'react';\r\nimport { InjectedIntlProps, injectIntl } from 'react-intl';\r\nimport { Route, RouteComponentProps } from 'react-router-dom';\r\nimport { RoutePrefix } from '../../../Routes';\r\nimport { FormState } from '../../../components/Form';\r\nimport { RouteName } from '../@data';\r\nimport { onCurrentRouteChanged } from '../@data/actions';\r\nimport './@data/mutators';\r\nimport './@data/orchestrators';\r\nimport { CreateAccount } from './Create/CreateAccount';\r\nimport { ManagePage } from './Manage/ManagePage';\r\n\r\nexport const AccountPage = injectIntl(function AccountPageComponent({ match, intl }: RouteComponentProps & InjectedIntlProps): JSX.Element {\r\n  React.useEffect(() => {\r\n    onCurrentRouteChanged(RouteName.account, intl.formatMessage);\r\n    // eslint-disable-next-line react-hooks/exhaustive-deps\r\n  }, []);\r\n\r\n  return (\r\n    <React.Fragment>\r\n      <Route exact path={`${match.url}`} component={ManagePage} />\r\n      <Route\r\n        path={`/${RoutePrefix.partnerManagement}/:publisherId/${RouteName[RouteName.account]}/create`}\r\n        render={(props) => <CreateAccount {...props} mode={FormState.Create} />}\r\n      />\r\n      <Route\r\n        path={`/${RoutePrefix.partnerManagement}/:publisherId/${RouteName[RouteName.account]}/edit/:accountId`}\r\n        render={(props) => <CreateAccount {...props} mode={FormState.Edit} />}\r\n      />\r\n    </React.Fragment>\r\n  );\r\n});\r\n","import { defineMessages } from 'react-intl';\r\n\r\nexport default defineMessages({\r\n  title: {\r\n      id: 'partnermanagement.title',\r\n      defaultMessage: 'Partner Management Index',\r\n  }\r\n});","import * as React from 'react';\r\nimport { injectIntl } from 'react-intl';\r\nimport { IIndexPageProps } from './IndexPage.types';\r\n\r\nimport messages from './IndexPage.messages';\r\n\r\nexport const IndexPage = injectIntl(class extends React.Component<IIndexPageProps> {\r\n  public render(): JSX.Element {\r\n    return <h1>{this.props.intl.formatMessage(messages.title)}</h1>;\r\n  }\r\n});","import { nullRender } from '@fluentui/react';\r\nimport { observer } from 'mobx-react';\r\nimport * as React from 'react';\r\nimport { getAppStore, onAccountChanged, onPublisherChanged, onPublisherSelected, Publisher } from '../../@data';\r\nimport { PublisherAccountPicker } from '../../layout/PublisherAccountPicker/PublisherAccountPicker';\r\nimport { defaultRoute, getPageStore, RouteName } from './@data';\r\nimport { IPartnerManagementHeaderProps } from './PartnerManagement.types';\r\n\r\nexport const PartnerManagementHeader = observer(\r\n  class extends React.Component<IPartnerManagementHeaderProps> {\r\n    public componentDidMount() {\r\n      const defaultPublisherId = getAppStore().defaultPublisher;\r\n      const publisherId = [0, 3000, 3001, 3002, 3003, 3004].includes(defaultPublisherId === undefined ? 0 : defaultPublisherId)\r\n        ? this.props.match.params.publisherId\r\n        : String(defaultPublisherId);\r\n      onPublisherSelected(publisherId);\r\n    }\r\n\r\n    public render(): JSX.Element | null {\r\n      const appStore = getAppStore();\r\n      const store = getPageStore();\r\n      const accessiblePublishers = appStore.accessiblePublishers;\r\n\r\n      if (store.loading) {\r\n        return nullRender();\r\n      }\r\n\r\n      return (\r\n        <PublisherAccountPicker\r\n          {...this.props}\r\n          onChange={this._onPublisherAccountChanged}\r\n          publisher={appStore.publisher}\r\n          isAccountHidden={this.props.isAccountHidden}\r\n          isAccountSelectionDisabled={this.props.isAccountSelectionDisabled}\r\n          isPublisherSelectionDisabled={accessiblePublishers && accessiblePublishers.length === 1}\r\n        />\r\n      );\r\n    }\r\n\r\n    private _onPublisherAccountChanged = (publisher?: Publisher) => {\r\n      const store = getPageStore();\r\n      const currentRoute = RouteName[store.currentRoute || defaultRoute];\r\n\r\n      const publisherId = publisher ? publisher.id : 0;\r\n\r\n      if (publisherId !== 0) {\r\n        this.props.history.push(`/partner-management/${publisherId}/${currentRoute}`);\r\n      } else {\r\n        this.props.history.push(`/partner-management/${currentRoute}`);\r\n      }\r\n      onPublisherChanged(publisher);\r\n\r\n      if (publisher === undefined) {\r\n        // reset account in store. To avoid API calls with the account of old publisher\r\n        onAccountChanged(undefined);\r\n      }\r\n    };\r\n  }\r\n);\r\n","import { orchestrator } from 'satcheljs';\r\nimport { APP_NAME_NEW, PUBCENTER_TITLE } from '../../../../constants/AppConstants';\r\nimport { isLocationPubCenter } from '../../../../utils';\r\nimport { getRoutes } from '../../PartnerManagementRouter';\r\nimport { onCurrentRouteChanged } from '../actions';\r\n\r\norchestrator(onCurrentRouteChanged, ({ currentRoute, formatMessage }) => {\r\n  const pageName = formatMessage ? getRoutes(formatMessage).find((route) => route.key === currentRoute)?.text : currentRoute.toString();\r\n  const appName = isLocationPubCenter() ? PUBCENTER_TITLE : APP_NAME_NEW;\r\n  document.title = `${appName} - ${pageName}`;\r\n});\r\n","import { action } from 'satcheljs';\r\nimport { IStringDictionary, Model, Publisher } from '../../../../../@data';\r\nimport { IPublisherViewModel } from '../store';\r\n\r\nexport const onRawChanged = action('onRawChanged', (value?: Publisher) => ({ value }));\r\n\r\nexport const onPublisherChanged = action('onPublisherChanged', (publisher: IPublisherViewModel) => ({ publisher }));\r\n\r\nexport const onPublisherErrorChanged = action('onPublisherErrorChanged', (values?: IStringDictionary) => ({ values }));\r\n\r\nexport const onFetchPublishersLoading = action('onFetchPublishersLoading', (isLoading: boolean) => ({ isLoading }));\r\n\r\nexport const onFetchingPublishersData = action('onFetchingPublishersData', (isFetchingData: boolean) => ({ isFetchingData }));\r\n\r\nexport const onPublishersFetched = action('onPublishersFetched', (items: Publisher[] | Model[]) => ({ items }));\r\n","import { createStore } from 'satcheljs';\r\nimport { IPublisherViewState } from './schema/IPublisherViewState';\r\n\r\nexport const getStore = createStore<IPublisherViewState>('PublisherState', {\r\n  active: {},\r\n  errors: {}\r\n});\r\n","import { mutator } from 'satcheljs';\r\nimport { Publisher } from '../../../../../@data';\r\nimport { mergeTypeWithObject } from '../../../../../utils/ObjectUtils';\r\nimport {\r\n  onFetchPublishersLoading,\r\n  onFetchingPublishersData,\r\n  onPublisherChanged,\r\n  onPublisherErrorChanged,\r\n  onPublishersFetched,\r\n  onRawChanged,\r\n} from '../actions/onPublisherChanged';\r\nimport { getStore } from '../store/store';\r\n\r\nmutator(onRawChanged, (msg) => {\r\n  getStore().raw = mergeTypeWithObject(new Publisher(), msg.value);\r\n});\r\n\r\nmutator(onPublisherChanged, (msg) => {\r\n  getStore().active = msg.publisher;\r\n});\r\n\r\nmutator(onPublisherErrorChanged, (msg) => {\r\n  getStore().errors = msg.values || {};\r\n});\r\n\r\nmutator(onFetchPublishersLoading, (msg) => {\r\n  getStore().isLoading = msg.isLoading;\r\n});\r\n\r\nmutator(onFetchingPublishersData, (msg) => {\r\n  getStore().isFetchingData = msg.isFetchingData;\r\n});\r\n\r\nmutator(onPublishersFetched, (msg) => {\r\n  getStore().publishers = msg.items;\r\n});\r\n","import { action } from 'satcheljs';\r\n\r\nexport const onManagePageInitialized = action('onManagePageInitialized');\r\n","import { IChoiceGroupOption, IComboBoxOption, IDropdownOption } from '@fluentui/react';\r\nimport { History } from 'history';\r\nimport { action } from 'satcheljs';\r\nimport { IPRange, ISubGeography, PublisherCreate } from '../../../../../@data';\r\nimport { FormState } from '../../../../../components/Form';\r\n\r\nexport const onFormPublisherPartnerChanged = action('onFormPublisherPartnerChanged', (value: IDropdownOption) => ({ value }));\r\n\r\nexport const onFormIdChanged = action('onFormIdChanged', (value: number) => ({ value }));\r\n\r\nexport const onFormPublisherNameChanged = action('onFormPublisherNameChanged', (value?: string) => ({ value }));\r\n\r\nexport const onFormPublisherNetworkChanged = action('onFormPublisherNetworkChanged', (value: IChoiceGroupOption) => ({ value }));\r\n\r\nexport const onFormPublisherAddressLine1Changed = action('onFormPublisherAddressLine1Changed', (value?: string) => ({ value }));\r\n\r\nexport const onFormPublisherAddressLine2Changed = action('onFormPublisherAddressLine2Changed', (value?: string) => ({ value }));\r\n\r\nexport const onFormPublisherAddressCityChanged = action('onFormPublisherAddressCityChanged', (value?: string) => ({ value }));\r\n\r\nexport const onFormPublisherAddressCountryChanged = action('onFormPublisherAddressCountryChanged', (value?: IComboBoxOption) => ({\r\n  value,\r\n}));\r\n\r\nexport const onFormPublisherAddressCountryCodeChanged = action('onFormPublisherAddressCountryCodeChanged', (value?: IComboBoxOption) => {\r\n  return {\r\n    value,\r\n  };\r\n});\r\n\r\nexport const onFormPublisherAddressStateChanged = action('onFormPublisherAddressStateChanged', (value?: IDropdownOption) => ({ value }));\r\n\r\nexport const onFormPublisherAddressStateListsChanged = action('onFormPublisherAddressStateListsChanged', (value?: ISubGeography[]) => ({\r\n  value,\r\n}));\r\n\r\nexport const onFormPublisherAddressZipcodeChanged = action('onFormPublisherAddressZipcodeChanged', (value?: string) => ({ value }));\r\n\r\nexport const onFormPublisherTierChanged = action('onFormPublisherTierChanged', (value: IDropdownOption) => ({ value }));\r\n\r\nexport const onFormPublisherOverrideTierChanged = action('onFormPublisherOverrideTierChanged', (value: IDropdownOption) => ({ value }));\r\n\r\nexport const onFormPublisherEntityLimitTierChanged = action('onFormPublisherEntityLimitTierChanged', (value: IDropdownOption) => ({\r\n  value,\r\n}));\r\n\r\nexport const onFormPublisherServiceLevelChanged = action('onFormPublisherServiceLevelChanged', (value: IDropdownOption) => ({\r\n  value,\r\n}));\r\n\r\nexport const onFormPublisherWebAdunitsChanged = action('onFormPublisherWebAdunitsChanged', (value?: boolean) => ({\r\n  value,\r\n}));\r\n\r\nexport const onFormPublisherMobileSearchChanged = action('onFormPublisherMobileSearchChanged', (value?: boolean) => ({\r\n  value,\r\n}));\r\n\r\nexport const onFormPublisherDistributionChanged = action('onFormPublisherDistributionChanged', (value?: boolean) => ({\r\n  value,\r\n}));\r\n\r\nexport const onFormPublisherDistributionV2Changed = action('onFormPublisherDistributionV2Changed', (value?: boolean) => ({\r\n  value,\r\n}));\r\n\r\nexport const onFormPublisherStartDistributionChanged = action('onFormPublisherStartDistributionChanged', (value?: boolean) => ({\r\n  value,\r\n}));\r\n\r\nexport const onFormPublisherStartDistributionContentChanged = action(\r\n  'onFormPublisherStartDistributionContentChanged',\r\n  (value?: boolean) => ({\r\n    value,\r\n  })\r\n);\r\n\r\nexport const onFormPublisherSelectTierChanged = action('onFormPublisherSelectTierChanged', (value?: boolean) => ({\r\n  value,\r\n}));\r\n\r\nexport const onFormPublisherMediationChanged = action('onFormPublisherMediationChanged', (value?: boolean) => ({\r\n  value,\r\n}));\r\n\r\nexport const onFormPublisherNativeChanged = action('onFormPublisherNativeChanged', (value?: boolean) => ({\r\n  value,\r\n}));\r\n\r\nexport const onFormPublisherSyndicationChanged = action('onFormPublisherSyndicationChanged', (value?: boolean) => ({\r\n  value,\r\n}));\r\n\r\nexport const onFormPublisherPropertyAutoChanged = action('onFormPublisherPropertyAutoChanged', (value?: boolean) => ({\r\n  value,\r\n}));\r\nexport const onFormPublisherPSReportingAPIChanged = action('onFormPublisherPSReportingAPIChanged', (value?: boolean) => ({\r\n  value,\r\n}));\r\nexport const onFormPublisherPSDashboardChanged = action('onFormPublisherPSDashboardChanged', (value?: boolean) => ({\r\n  value,\r\n}));\r\nexport const onFormPublisherEnableDefaultTythonV2Changed = action('onFormPublisherEnableDefaultTythonV2Changed', (value?: boolean) => ({\r\n  value,\r\n}));\r\n\r\nexport const onFormPublisherDynamicPropertyRegistrationChanged = action(\r\n  'onFormPublisherDynamicPropertyRegistrationChanged',\r\n  (value?: boolean) => ({\r\n    value,\r\n  })\r\n);\r\n\r\nexport const onFormPublisherIpNameChanged = action('onFormPublisherIpNameChanged', (value?: string) => ({\r\n  value,\r\n}));\r\n\r\nexport const onFormPublisherMinimumIpChanged = action('onFormPublisherMinimumIpChanged', (value?: string) => ({\r\n  value,\r\n}));\r\n\r\nexport const onFormPublisherMaximumIpChanged = action('onFormPublisherMaximumIpChanged', (value?: string) => ({\r\n  value,\r\n}));\r\n\r\nexport const onFormPublisherIpChanged = action('onFormPublisherIpChanged', (value: IPRange[], mode: FormState) => ({\r\n  value,\r\n  mode,\r\n}));\r\n\r\nexport const onFormPublisherIpRangesChanged = action('onFormPublisherIpRangesChanged', (value?: IPRange[]) => ({\r\n  value,\r\n}));\r\n\r\nexport const onFormPublisherAccountName = action('onFormPublisherAccountName', (value: string) => ({\r\n  value,\r\n}));\r\n\r\nexport const onFormPublisherAccountLanguage = action('onFormPublisherAccountLanguage', (value: IDropdownOption) => ({\r\n  value,\r\n}));\r\n\r\nexport const onFormPublisherAccountCountry = action('onFormPublisherAccountCountry', (value: IDropdownOption) => ({\r\n  value,\r\n}));\r\n\r\nexport const onFormPublisherAccountCurrency = action('onFormPublisherAccountCurrency', (value?: string) => ({ value }));\r\n\r\nexport const onFormPublisherAccountTimezoneChanged = action('onFormPublisherAccountTimezoneChanged', (value?: IDropdownOption) => ({\r\n  value,\r\n}));\r\n\r\nexport const onFormInitialized = action('onFormInitialized', (mode: FormState, publisherId?: string, entityId?: string) => ({\r\n  mode,\r\n  publisherId,\r\n  entityId,\r\n}));\r\n\r\nexport const onFormEditted = action('onFormEditted', (routeHistory?: History) => ({ routeHistory }));\r\n\r\nexport const onFormCancelled = action('onFormCancelled');\r\n\r\nexport const onFormCleared = action('onFormCleared');\r\n\r\nexport const onFormCreated = action('onFormCreated', (routeHistory?: History) => ({ routeHistory }));\r\n\r\nexport const onPanelCleared = action('onPanelCleared');\r\n\r\nexport const onPublisherCreated = action('onPublisherCreated', (publisher: PublisherCreate) => ({ publisher }));\r\n","import { mutator } from 'satcheljs';\r\nimport { EntityLimitTier, FeatureOverideTier, NetworkAffiliation, Partner, PublisherTier, ServiceLevel } from '../../../../../@data';\r\nimport { countryToCurrencyMap } from '../../../../../config/countryToCurrencyMapper.config';\r\nimport {\r\n  onFormCleared,\r\n  onFormIdChanged,\r\n  onFormPublisherAccountCountry,\r\n  onFormPublisherAccountLanguage,\r\n  onFormPublisherAccountName,\r\n  onFormPublisherAccountTimezoneChanged,\r\n  onFormPublisherAddressCityChanged,\r\n  onFormPublisherAddressCountryChanged,\r\n  onFormPublisherAddressLine1Changed,\r\n  onFormPublisherAddressLine2Changed,\r\n  onFormPublisherAddressStateChanged,\r\n  onFormPublisherAddressStateListsChanged,\r\n  onFormPublisherAddressZipcodeChanged,\r\n  onFormPublisherDistributionChanged,\r\n  onFormPublisherDistributionV2Changed,\r\n  onFormPublisherDynamicPropertyRegistrationChanged,\r\n  onFormPublisherEnableDefaultTythonV2Changed,\r\n  onFormPublisherEntityLimitTierChanged,\r\n  onFormPublisherIpNameChanged,\r\n  onFormPublisherIpRangesChanged,\r\n  onFormPublisherMaximumIpChanged,\r\n  onFormPublisherMediationChanged,\r\n  onFormPublisherMinimumIpChanged,\r\n  onFormPublisherMobileSearchChanged,\r\n  onFormPublisherNameChanged,\r\n  onFormPublisherNativeChanged,\r\n  onFormPublisherNetworkChanged,\r\n  onFormPublisherOverrideTierChanged,\r\n  onFormPublisherPSDashboardChanged,\r\n  onFormPublisherPSReportingAPIChanged,\r\n  onFormPublisherPartnerChanged,\r\n  onFormPublisherPropertyAutoChanged,\r\n  onFormPublisherSelectTierChanged,\r\n  onFormPublisherServiceLevelChanged,\r\n  onFormPublisherStartDistributionChanged,\r\n  onFormPublisherStartDistributionContentChanged,\r\n  onFormPublisherSyndicationChanged,\r\n  onFormPublisherTierChanged,\r\n  onFormPublisherWebAdunitsChanged,\r\n  onPanelCleared,\r\n} from '../actions';\r\nimport { getStore } from '../store/store';\r\n\r\nmutator(onFormPublisherPartnerChanged, (msg) => {\r\n  getStore().active.partner = msg.value.key as Partner;\r\n});\r\n\r\nmutator(onFormIdChanged, (msg) => {\r\n  getStore().active.id = msg.value;\r\n});\r\n\r\nmutator(onFormPublisherNameChanged, (msg) => {\r\n  getStore().active.name = msg.value;\r\n});\r\n\r\nmutator(onFormPublisherNetworkChanged, (msg) => {\r\n  getStore().active.networkAffiliation = msg.value.key as NetworkAffiliation;\r\n});\r\n\r\nmutator(onFormPublisherAddressLine1Changed, (msg) => {\r\n  getStore().active.addressLine1 = msg.value;\r\n});\r\n\r\nmutator(onFormPublisherAddressLine2Changed, (msg) => {\r\n  getStore().active.addressLine2 = msg.value;\r\n});\r\n\r\nmutator(onFormPublisherAddressCityChanged, (msg) => {\r\n  getStore().active.city = msg.value;\r\n});\r\n\r\nmutator(onFormPublisherAddressCountryChanged, (msg) => {\r\n  getStore().active.country = msg.value!.key as string;\r\n});\r\n\r\nmutator(onFormPublisherAddressStateChanged, (msg) => {\r\n  getStore().active.state = msg.value!.key as string;\r\n});\r\n\r\nmutator(onFormPublisherAddressStateListsChanged, (msg) => {\r\n  getStore().active.availableStates = msg.value;\r\n});\r\n\r\nmutator(onFormPublisherAddressZipcodeChanged, (msg) => {\r\n  getStore().active.postalcode = msg.value;\r\n});\r\n\r\nmutator(onFormPublisherTierChanged, (msg) => {\r\n  getStore().active.publisherTier = msg.value.key as PublisherTier;\r\n});\r\n\r\nmutator(onFormPublisherOverrideTierChanged, (msg) => {\r\n  getStore().active.overrideFeatureTier = msg.value.key as FeatureOverideTier;\r\n});\r\n\r\nmutator(onFormPublisherEntityLimitTierChanged, (msg) => {\r\n  getStore().active.entityLimitTier = msg.value.key as EntityLimitTier;\r\n});\r\n\r\nmutator(onFormPublisherServiceLevelChanged, (msg) => {\r\n  getStore().active.serviceLevel = msg.value.key as ServiceLevel;\r\n});\r\n\r\nmutator(onFormPublisherWebAdunitsChanged, (msg) => {\r\n  getStore().active.allowWebAdUnit = msg.value;\r\n});\r\n\r\nmutator(onFormPublisherMobileSearchChanged, (msg) => {\r\n  getStore().active.allowMobileSearchAdUnit = msg.value;\r\n});\r\n\r\nmutator(onFormPublisherDistributionChanged, (msg) => {\r\n  getStore().active.allowDistributionReporting = msg.value;\r\n});\r\n\r\nmutator(onFormPublisherDistributionV2Changed, (msg) => {\r\n  getStore().active.allowDistributionV2Reporting = msg.value;\r\n});\r\n\r\nmutator(onFormPublisherStartDistributionChanged, (msg) => {\r\n  getStore().active.allowStartDistributionReporting = msg.value;\r\n});\r\n\r\nmutator(onFormPublisherStartDistributionContentChanged, (msg) => {\r\n  getStore().active.allowStartDistributionContentReporting = msg.value;\r\n});\r\n\r\nmutator(onFormPublisherEnableDefaultTythonV2Changed, (msg) => {\r\n  getStore().active.enableDefaultTythonV2Reporting = msg.value;\r\n});\r\n\r\nmutator(onFormPublisherSelectTierChanged, (msg) => {\r\n  getStore().active.allowSelectTierReporting = msg.value;\r\n});\r\n\r\nmutator(onFormPublisherMediationChanged, (msg) => {\r\n  getStore().active.allowMediationReporting = msg.value;\r\n});\r\n\r\nmutator(onFormPublisherNativeChanged, (msg) => {\r\n  getStore().active.allowNativeReporting = msg.value;\r\n});\r\n\r\nmutator(onFormPublisherSyndicationChanged, (msg) => {\r\n  getStore().active.allowSyndicationReporting = msg.value;\r\n});\r\n\r\nmutator(onFormPublisherPropertyAutoChanged, (msg) => {\r\n  getStore().active.propertyAutoApproved = msg.value;\r\n});\r\n\r\nmutator(onFormPublisherPSReportingAPIChanged, (msg) => {\r\n  getStore().active.allowPaidSearchReportingApi = msg.value;\r\n});\r\n\r\nmutator(onFormPublisherPSDashboardChanged, (msg) => {\r\n  getStore().active.allowPaidSearchReportingDashboard = msg.value;\r\n});\r\n\r\nmutator(onFormPublisherDynamicPropertyRegistrationChanged, (msg) => {\r\n  getStore().active.allowDynamicPropertyRegistration = msg.value;\r\n});\r\n\r\nmutator(onFormPublisherIpNameChanged, (msg) => {\r\n  getStore().active.ipAddressName = msg.value;\r\n});\r\n\r\nmutator(onFormPublisherMinimumIpChanged, (msg) => {\r\n  getStore().active.minIPAddress = msg.value;\r\n});\r\n\r\nmutator(onFormPublisherMaximumIpChanged, (msg) => {\r\n  getStore().active.maxIPAddress = msg.value;\r\n});\r\n\r\nmutator(onFormPublisherIpRangesChanged, (msg) => {\r\n  getStore().active.ipAddressGrid = msg.value;\r\n});\r\n\r\nmutator(onFormPublisherAccountName, (msg) => {\r\n  getStore().active.accountName = msg.value;\r\n});\r\n\r\nmutator(onFormPublisherAccountLanguage, (msg) => {\r\n  getStore().active.accountLanguage = msg.value.key as string;\r\n});\r\n\r\nmutator(onFormPublisherAccountTimezoneChanged, (msg) => {\r\n  getStore().active.accountTimezoneId = msg.value!.key as number;\r\n});\r\n\r\nmutator(onFormPublisherAccountCountry, (msg) => {\r\n  getStore().active.accountCountry = msg.value.key as string;\r\n  getStore().active.accountCurrency = countryToCurrencyMap[msg.value.key as string];\r\n});\r\n\r\nmutator(onFormCleared, () => {\r\n  getStore().active = {};\r\n});\r\n\r\nmutator(onPanelCleared, () => {\r\n  getStore().active.ipAddressName = undefined;\r\n  getStore().active.maxIPAddress = undefined;\r\n  getStore().active.minIPAddress = undefined;\r\n});\r\n","import { orchestrator } from 'satcheljs';\r\nimport { ISubGeography } from '../../../../../@data';\r\nimport { getSupportedSubGeographies } from '../../../../../@data/services/MetadataService';\r\nimport {\r\n  onFormPublisherAddressCountryChanged,\r\n  onFormPublisherAddressCountryCodeChanged,\r\n  onFormPublisherAddressStateListsChanged\r\n} from '../actions';\r\n\r\norchestrator(onFormPublisherAddressCountryCodeChanged, async msg => {\r\n  onFormPublisherAddressCountryChanged(msg.value);\r\n  let availableStateList: ISubGeography[] = [];\r\n  if (msg.value) {\r\n    availableStateList = await getSupportedSubGeographies(msg.value.key as string);\r\n  }\r\n  onFormPublisherAddressStateListsChanged(availableStateList);\r\n});\r\n","import { orchestrator } from 'satcheljs';\r\nimport { onFormCancelled, onFormCleared } from '../actions';\r\n\r\norchestrator(onFormCancelled, () => {\r\n  onFormCleared();\r\n});\r\n","import { MessageBarType } from '@fluentui/react';\r\nimport { orchestrator } from 'satcheljs';\r\nimport {\r\n  Account,\r\n  AccountProfileFeature,\r\n  EntityLimitTier,\r\n  FeatureOverideTier,\r\n  getAppStore,\r\n  IAddress,\r\n  LifeCycleStatus,\r\n  onNavigateBack,\r\n  onNotificationChanged,\r\n  onSavingChanged,\r\n  PaymentInstrumentLifeCycleStatus,\r\n  PaymentOption,\r\n  postEntity,\r\n  Publisher,\r\n  PublisherCreate,\r\n  PublisherTier,\r\n  ServiceLevel,\r\n} from '../../../../../@data';\r\nimport { AdExtensionType } from '../../../../../@data/store/schema/enums/AdExtensionType';\r\nimport { FinancialStatus } from '../../../../../@data/store/schema/enums/FinancialStatus';\r\nimport { INotificationBarItem } from '../../../../../components/NotificationBar';\r\nimport { countryToCurrencyMap } from '../../../../../config/countryToCurrencyMapper.config';\r\nimport { validateSchema } from '../../../../../utils';\r\nimport { RouteName } from '../../../@data';\r\nimport { createReturnUrl, setPublisherContext } from '../../../@data/service/PartnerManagementService';\r\nimport { onFormCleared, onFormCreated, onFormIdChanged, onPublisherCreated, onPublisherErrorChanged } from '../actions';\r\nimport { getStore, publisherCreateErrorModel } from '../store';\r\n\r\norchestrator(onFormCreated, async (msg) => {\r\n  const { userContext } = getAppStore();\r\n  const { active } = getStore();\r\n\r\n  let notification: INotificationBarItem = {};\r\n\r\n  const publisherBody = new PublisherCreate();\r\n\r\n  const accountBody = new Account();\r\n\r\n  try {\r\n    await validateSchema(publisherCreateErrorModel(), active);\r\n    onPublisherErrorChanged();\r\n  } catch (e) {\r\n    onPublisherErrorChanged(e);\r\n    onNotificationChanged({\r\n      text: `Publisher - You have ${Object.keys(e).length} errors in the form, please fix them to continue.`,\r\n      messageBarType: MessageBarType.severeWarning,\r\n    });\r\n    return;\r\n  }\r\n\r\n  onSavingChanged(true);\r\n\r\n  const address: IAddress = {\r\n    line1: active.addressLine1,\r\n    line2: active.addressLine2,\r\n    city: active.city,\r\n    country: active.country,\r\n    stateOrProvince: active.state,\r\n    postalCode: active.postalcode,\r\n  };\r\n\r\n  publisherBody.partner = active.partner;\r\n  publisherBody.networkAffiliation = active.networkAffiliation;\r\n  publisherBody.address = address;\r\n  publisherBody.name = active.name;\r\n\r\n  publisherBody.publisherTier = PublisherTier.ManagedPremium;\r\n  publisherBody.overrideFeatureTier = FeatureOverideTier.ManagedPremium;\r\n  publisherBody.entityLimitTier = EntityLimitTier.Small;\r\n  publisherBody.serviceLevel = ServiceLevel.Premium;\r\n  publisherBody.allowWebAdUnit = true;\r\n  publisherBody.allowNativeReporting = true;\r\n  publisherBody.allowSyndicationReporting = true;\r\n  publisherBody.allowDistributionReporting = false;\r\n  publisherBody.allowDistributionV2Reporting = true;\r\n  publisherBody.allowStartDistributionReporting = false;\r\n  publisherBody.allowStartDistributionContentReporting = false;\r\n  publisherBody.allowSelectTierReporting = false;\r\n  publisherBody.allowMediationReporting = false;\r\n  publisherBody.allowPaidSearchReportingDashboard = true;\r\n  publisherBody.allowPaidSearchReportingApi = false;\r\n  publisherBody.enableDefaultTythonV2Reporting = false;\r\n  publisherBody.propertyAutoApproved = true;\r\n  publisherBody.financialStatus = FinancialStatus.NoHold;\r\n\r\n  accountBody.name = active.accountName;\r\n  accountBody.languageCode = active.accountLanguage;\r\n  accountBody.countryCode = active.accountCountry;\r\n  accountBody.timeZoneId = active.accountTimezoneId;\r\n  accountBody.currencyCode = countryToCurrencyMap[active.accountCountry!];\r\n  accountBody.status = LifeCycleStatus.Active;\r\n  accountBody.primaryContactUserId = userContext!.id;\r\n  accountBody.primaryContactUsername = userContext!.email;\r\n  accountBody.enabledFeatures = [AccountProfileFeature.EnableGlobalDefaultKeywords, AccountProfileFeature.EnablePassedKeywords];\r\n  accountBody.adExtensionOptions = [\r\n    {\r\n      type: AdExtensionType.Call,\r\n      enabled: true,\r\n    },\r\n    {\r\n      type: AdExtensionType.SiteLink,\r\n      enabled: true,\r\n    },\r\n    {\r\n      type: AdExtensionType.Location,\r\n      enabled: true,\r\n    },\r\n    {\r\n      type: AdExtensionType.MeteredCall,\r\n      enabled: true,\r\n    },\r\n    {\r\n      type: AdExtensionType.MerchantRatings,\r\n      enabled: true,\r\n    },\r\n  ];\r\n  accountBody.paymentInformation = {\r\n    financialStatus: FinancialStatus.TaxOnHold,\r\n    revenueSharePercentage: 100,\r\n    paymentOption: PaymentOption.MonthlyThreshold,\r\n    paymentInstrumentationLifeCycleStatus: PaymentInstrumentLifeCycleStatus.Validated,\r\n    operationCostRatio: 0,\r\n  };\r\n\r\n  try {\r\n    let publisherEntity: PublisherCreate | undefined;\r\n    let publisher: Publisher | undefined;\r\n    let accountEntity: Account | undefined;\r\n\r\n    publisherEntity = await postEntity([], PublisherCreate, publisherBody, userContext);\r\n\r\n    // NOTE: This action is a no-op for now but future side-effects should be handled by the orchestrator/mutator of this action separately.\r\n    onPublisherCreated(publisherEntity);\r\n    publisher = new Publisher();\r\n    publisher.id = publisherEntity.id;\r\n    accountEntity = await postEntity([publisher], Account, accountBody, userContext);\r\n\r\n    if (publisherEntity && publisherEntity.id && accountEntity) {\r\n      onFormIdChanged(publisherEntity.id);\r\n    }\r\n    notification = {\r\n      text: `Created new publisher  success`,\r\n      messageBarType: MessageBarType.success,\r\n    };\r\n\r\n    // return to manage page\r\n    setPublisherContext(publisher);\r\n    const returnUrl = createReturnUrl(RouteName.publisher, String(publisherEntity.id));\r\n    onNavigateBack(msg.routeHistory, returnUrl);\r\n    onFormCleared();\r\n  } catch (e) {\r\n    notification = {\r\n      text: `Submitting the publisher form create caught an error \"${e}\"`,\r\n      messageBarType: MessageBarType.error,\r\n    };\r\n  } finally {\r\n    onSavingChanged(false);\r\n  }\r\n\r\n  onNotificationChanged(notification);\r\n});\r\n","import { mixed, object, string } from 'yup';\r\nimport { NetworkAffiliation } from '../../../../../../@data';\r\nimport { IPublisherViewModel } from './IPublisherViewModel';\r\n\r\nexport function publisherCreateErrorModel() {\r\n  return object<IPublisherViewModel>().shape({\r\n    name: string()\r\n      .trim()\r\n      .required(),\r\n    partner: string().required(),\r\n    networkAffiliation: mixed()\r\n      .oneOf([NetworkAffiliation.Syndicated, NetworkAffiliation.OwnedAndOperated])\r\n      .required(),\r\n    addressLine1: string().required(),\r\n    addressLine2: string(),\r\n    city: string().required(),\r\n    state: string().required(),\r\n    country: string().required(),\r\n    accountName: string()\r\n      .required()\r\n      .min(3)\r\n      .max(100),\r\n    accountLanguage: string().required(),\r\n    accountCountry: string().required(),\r\n    accountCurrency: string().required()\r\n  });\r\n}\r\n","import { MessageBarType } from '@fluentui/react';\r\nimport { orchestrator } from 'satcheljs';\r\nimport { getAppStore, IAddress, onNavigateBack, onNotificationChanged, onSavingChanged, Publisher, putEntity } from '../../../../../@data';\r\nimport { INotificationBarItem } from '../../../../../components/NotificationBar';\r\nimport { validateSchema } from '../../../../../utils';\r\nimport { RouteName } from '../../../@data';\r\nimport { createReturnUrl } from '../../../@data/service/PartnerManagementService';\r\nimport { onFormCleared, onFormEditted, onPublisherErrorChanged } from '../actions';\r\nimport { getStore, publisherEditErrorModel } from '../store';\r\n\r\norchestrator(onFormEditted, async (msg) => {\r\n  const { publisher, userContext } = getAppStore();\r\n  const { active, raw } = getStore();\r\n\r\n  let notification: INotificationBarItem = {};\r\n\r\n  if (publisher && raw) {\r\n    const body: Publisher = {\r\n      ...raw,\r\n      id: active.id,\r\n      name: active.name,\r\n    };\r\n    try {\r\n      await validateSchema(publisherEditErrorModel(), active);\r\n      onPublisherErrorChanged();\r\n    } catch (e) {\r\n      onPublisherErrorChanged(e);\r\n      onNotificationChanged({\r\n        text: `Publisher - You have ${Object.keys(e).length} errors in the form, please fix them to continue.`,\r\n        messageBarType: MessageBarType.severeWarning,\r\n      });\r\n      return;\r\n    }\r\n\r\n    onSavingChanged(true);\r\n\r\n    const address: IAddress = {\r\n      ...raw.address,\r\n      line1: active.addressLine1,\r\n      line2: active.addressLine2,\r\n      city: active.city,\r\n      country: active.country,\r\n      stateOrProvince: active.state,\r\n      postalCode: active.postalcode,\r\n    };\r\n\r\n    body.partner = active.partner;\r\n    body.networkAffiliation = active.networkAffiliation;\r\n    body.address = address;\r\n    body.publisherTier = active.publisherTier;\r\n    body.overrideFeatureTier = active.overrideFeatureTier;\r\n    body.entityLimitTier = active.entityLimitTier;\r\n    body.serviceLevel = active.serviceLevel;\r\n    body.allowWebAdUnit = active.allowWebAdUnit;\r\n    body.allowMobileSearchAdUnit = active.allowMobileSearchAdUnit;\r\n    body.allowDistributionReporting = active.allowDistributionReporting;\r\n    body.allowDistributionV2Reporting = active.allowDistributionV2Reporting;\r\n    body.allowStartDistributionReporting = active.allowStartDistributionReporting;\r\n    body.allowStartDistributionContentReporting = active.allowStartDistributionContentReporting;\r\n    body.allowEndorReporting = active.allowSelectTierReporting;\r\n    body.allowMediationReporting = active.allowMediationReporting;\r\n    body.allowNativeReporting = active.allowNativeReporting;\r\n    body.allowSyndicationReporting = active.allowSyndicationReporting;\r\n    body.propertyAutoApproved = active.propertyAutoApproved;\r\n    body.allowPaidSearchReportingApi = active.allowPaidSearchReportingApi;\r\n    body.allowPaidSearchReportingDashboard = active.allowPaidSearchReportingDashboard;\r\n    body.allowDynamicPropertyRegistration = active.allowDynamicPropertyRegistration;\r\n    body.enableDefaultTythonV2Reporting = active.enableDefaultTythonV2Reporting;\r\n    body.ipRanges = active.ipAddressGrid;\r\n    body.financialStatus = active.financialStatus;\r\n    body.allowedMarkets = active.allowedMarkets;\r\n    try {\r\n      let entity: Publisher | undefined;\r\n\r\n      entity = await putEntity<Publisher>([publisher], body, userContext);\r\n\r\n      notification = {\r\n        text: `Edited publisher ${entity.id} success`,\r\n        messageBarType: MessageBarType.success,\r\n      };\r\n\r\n      // return to manage page\r\n      const returnUrl = createReturnUrl(RouteName.publisher, String(publisher.id));\r\n      onNavigateBack(msg.routeHistory, returnUrl);\r\n      onFormCleared();\r\n    } catch (e) {\r\n      notification = {\r\n        text: `Submitting the publisher form edit caught an error \"${e}\"`,\r\n        messageBarType: MessageBarType.error,\r\n      };\r\n    } finally {\r\n      onSavingChanged(false);\r\n    }\r\n  } else {\r\n    notification = {\r\n      text: `Publisher form edit is invalid id ${active.id}`,\r\n      messageBarType: MessageBarType.warning,\r\n    };\r\n  }\r\n  onNotificationChanged(notification);\r\n});\r\n","import { mixed, object, string } from 'yup';\r\nimport { NetworkAffiliation } from '../../../../../../@data';\r\nimport { IPublisherViewModel } from './IPublisherViewModel';\r\n\r\nexport function publisherEditErrorModel() {\r\n  return object<IPublisherViewModel>().shape({\r\n    name: string()\r\n      .trim()\r\n      .required(),\r\n    partner: string().required(),\r\n    networkAffiliation: mixed()\r\n      .oneOf([NetworkAffiliation.Syndicated, NetworkAffiliation.OwnedAndOperated])\r\n      .required(),\r\n    addressLine1: string().required(),\r\n    addressLine2: string(),\r\n    city: string().required(),\r\n    state: string().required(),\r\n    country: string().required()\r\n  });\r\n}\r\n","import { MessageBarType } from '@fluentui/react';\r\nimport { orchestrator } from 'satcheljs';\r\nimport {\r\n  getEntity,\r\n  ISubGeography,\r\n  NetworkAffiliation,\r\n  onLoadingChanged,\r\n  onLoadingSetting,\r\n  onLoadingWaiting,\r\n  onNotificationChanged,\r\n  Partner,\r\n  Publisher,\r\n} from '../../../../../@data';\r\nimport {\r\n  getSupportedCountries,\r\n  getSupportedLanguages,\r\n  getSupportedSubGeographies,\r\n  getSupportedTimezones,\r\n} from '../../../../../@data/services/MetadataService';\r\nimport { getAppStore } from '../../../../../@data/store/store';\r\nimport { FormState } from '../../../../../components/Form';\r\nimport { setPublisherContext } from '../../../@data/service/PartnerManagementService';\r\nimport { onFormInitialized, onPublisherChanged, onPublisherErrorChanged, onRawChanged } from '../actions';\r\nimport '../mutators/PublisherChanged';\r\nimport { IPublisherViewModel } from '../store/schema/IPublisherViewModel';\r\n\r\norchestrator(onFormInitialized, async (msg) => {\r\n  const { userContext } = getAppStore();\r\n\r\n  try {\r\n    onLoadingChanged(true);\r\n    onLoadingSetting(false);\r\n    const timeout = 30000;\r\n    const id = setTimeout(() => onLoadingWaiting(true), timeout);\r\n\r\n    const metadata = await Promise.all([\r\n      getSupportedSubGeographies('US'),\r\n      getSupportedCountries(),\r\n      getSupportedLanguages(),\r\n      getSupportedTimezones(),\r\n    ]);\r\n\r\n    clearTimeout(id);\r\n\r\n    const defaultUSStates = metadata[0];\r\n    const viewModel: IPublisherViewModel = {\r\n      availableCountries: metadata[1],\r\n      accountAvailableLanguages: metadata[2],\r\n      availableTimezones: metadata[3],\r\n      partner: Partner.Yahoo,\r\n      country: 'US',\r\n      availableStates: defaultUSStates,\r\n      state: 'AL',\r\n      networkAffiliation: NetworkAffiliation.OwnedAndOperated,\r\n      accountLanguage: 'EN',\r\n      accountCountry: 'US',\r\n      accountCurrency: 'USD',\r\n      accountTimezoneId: 75,\r\n    };\r\n\r\n    if (msg.entityId && !isNaN(parseInt(msg.entityId, 10))) {\r\n      const publisher = new Publisher(parseInt(msg.entityId, 10));\r\n\r\n      setPublisherContext(publisher);\r\n      onPublisherErrorChanged();\r\n\r\n      if (msg.mode === FormState.Edit) {\r\n        const raw = await getEntity<Publisher>([publisher], userContext);\r\n\r\n        let availableStates: ISubGeography[] = [];\r\n\r\n        if (raw.address && raw.address.country) {\r\n          availableStates = await getSupportedSubGeographies(raw.address.country);\r\n        }\r\n\r\n        viewModel.partner = raw.partner;\r\n        viewModel.id = raw.id;\r\n        viewModel.name = String(raw.name);\r\n        viewModel.networkAffiliation = raw.networkAffiliation;\r\n        viewModel.addressLine1 = raw.address ? raw.address.line1 : '';\r\n        viewModel.addressLine2 = raw.address ? raw.address.line2 : '';\r\n        viewModel.city = raw.address ? raw.address.city : '';\r\n        viewModel.state = raw.address ? raw.address.stateOrProvince : '';\r\n        viewModel.availableStates = availableStates;\r\n        viewModel.country = raw.address ? raw.address.country : '';\r\n        viewModel.postalcode = raw.address ? raw.address.postalCode : '';\r\n        viewModel.publisherTier = raw.publisherTier;\r\n        viewModel.overrideFeatureTier = raw.overrideFeatureTier;\r\n        viewModel.entityLimitTier = raw.entityLimitTier;\r\n        viewModel.serviceLevel = raw.serviceLevel;\r\n        viewModel.allowWebAdUnit = raw.allowWebAdUnit;\r\n        viewModel.allowMobileSearchAdUnit = raw.allowMobileSearchAdUnit;\r\n        viewModel.allowDistributionReporting = raw.allowDistributionReporting;\r\n        viewModel.allowDistributionV2Reporting = raw.allowDistributionV2Reporting;\r\n        viewModel.allowStartDistributionReporting = raw.allowStartDistributionReporting;\r\n        viewModel.allowStartDistributionContentReporting = raw.allowStartDistributionContentReporting;\r\n        viewModel.allowSelectTierReporting = raw.allowEndorReporting;\r\n        viewModel.allowMediationReporting = raw.allowMediationReporting;\r\n        viewModel.allowNativeReporting = raw.allowNativeReporting;\r\n        viewModel.allowSyndicationReporting = raw.allowSyndicationReporting;\r\n        viewModel.propertyAutoApproved = raw.propertyAutoApproved;\r\n        viewModel.allowPaidSearchReportingApi = raw.allowPaidSearchReportingApi;\r\n        viewModel.allowPaidSearchReportingDashboard = raw.allowPaidSearchReportingDashboard;\r\n        viewModel.allowDynamicPropertyRegistration = raw.allowDynamicPropertyRegistration;\r\n        viewModel.enableDefaultTythonV2Reporting = raw.enableDefaultTythonV2Reporting;\r\n        viewModel.ipAddressGrid = raw.ipRanges;\r\n        viewModel.financialStatus = raw.financialStatus;\r\n        viewModel.allowedMarkets = raw.allowedMarkets;\r\n\r\n        onRawChanged(raw);\r\n      } else {\r\n        onRawChanged();\r\n      }\r\n    }\r\n\r\n    onPublisherChanged(viewModel);\r\n  } catch (e) {\r\n    onNotificationChanged({\r\n      text: 'Failed to load entity',\r\n      messageBarType: MessageBarType.severeWarning,\r\n    });\r\n  } finally {\r\n    onLoadingChanged(false);\r\n  }\r\n});\r\n","import { orchestrator } from 'satcheljs';\r\nimport { IPRange } from '../../../../../@data';\r\nimport { FormState } from '../../../../../components/Form';\r\nimport { validateSchema } from '../../../../../utils';\r\nimport { onPanelOpenChanged } from '../../../@data/actions';\r\nimport { onFormPublisherIpChanged, onFormPublisherIpRangesChanged, onPanelCleared, onPublisherErrorChanged } from '../actions';\r\nimport { getStore, publisherIPAddressViewModel } from '../store';\r\n\r\norchestrator(onFormPublisherIpChanged, async (msg) => {\r\n  const { active } = getStore();\r\n  const newIpRangeGrid: IPRange[] = [];\r\n  const newIpAddress = new IPRange();\r\n  newIpAddress.name = active.ipAddressName;\r\n  newIpAddress.minIPAddress = active.minIPAddress;\r\n  newIpAddress.maxIPAddress = active.maxIPAddress;\r\n\r\n  try {\r\n    await validateSchema(publisherIPAddressViewModel(), active);\r\n    onPublisherErrorChanged();\r\n  } catch (e) {\r\n    onPublisherErrorChanged(e);\r\n    return;\r\n  }\r\n\r\n  if (msg.mode === FormState.Delete || msg.mode === FormState.InPageEdit) {\r\n    active.ipAddressGrid!!.forEach((ip) => {\r\n      if (ip.name !== msg.value[0].name) {\r\n        newIpRangeGrid.push(ip);\r\n      }\r\n    });\r\n  } else {\r\n    if (active.ipAddressGrid) {\r\n      active.ipAddressGrid.forEach((i) => newIpRangeGrid.push(i));\r\n    }\r\n  }\r\n\r\n  if (msg.mode !== FormState.Delete) {\r\n    newIpRangeGrid.push(newIpAddress);\r\n  }\r\n\r\n  onFormPublisherIpRangesChanged(newIpRangeGrid);\r\n  onPanelOpenChanged(false);\r\n  onPanelCleared();\r\n});\r\n","import { object, string } from 'yup';\r\nimport { IPublisherViewModel } from './IPublisherViewModel';\r\n\r\nexport function publisherIPAddressViewModel() {\r\n  return object<IPublisherViewModel>().shape({\r\n    ipAddressName: string().trim().required(),\r\n    minIPAddress: string().trim().required(),\r\n    maxIPAddress: string().trim().required(),\r\n  });\r\n}\r\n","import { MessageBarType } from '@fluentui/react';\r\nimport { orchestrator } from 'satcheljs';\r\nimport { Log } from '../../../../../../logging/src';\r\nimport { getAppStore, getEntity, onNotificationChanged, Publisher } from '../../../../../@data';\r\nimport { onFetchingPublishersData, onFetchPublishersLoading, onPublishersFetched } from '../actions';\r\nimport { onManagePageInitialized } from '../actions/onManagePageInitialized';\r\nimport { getStore } from '../store';\r\n\r\norchestrator(onManagePageInitialized, async () => {\r\n  try {\r\n    const { publisher, userContext } = getAppStore();\r\n    const publishers = getStore().publishers;\r\n\r\n    if (publishers === undefined || publishers.length === 0) {\r\n      onFetchPublishersLoading(true);\r\n    }\r\n    onFetchingPublishersData(true);\r\n\r\n    if (userContext && publisher) {\r\n      const data = await getEntity([publisher], userContext);\r\n      const fetchedPublisher: Publisher = {\r\n        apiPath: undefined,\r\n        className: 'publishers',\r\n        id: data.id,\r\n        name: data.name?.toString(),\r\n        status: data.status,\r\n      };\r\n      onPublishersFetched([fetchedPublisher]);\r\n    } else {\r\n      onPublishersFetched([]);\r\n    }\r\n  } catch (error) {\r\n    Log.error(error);\r\n    onNotificationChanged({ messageBarType: MessageBarType.error, text: 'Failed to load publishers' });\r\n  } finally {\r\n    onFetchPublishersLoading(false);\r\n    onFetchingPublishersData(false);\r\n  }\r\n});\r\n","import { defineMessages } from 'react-intl';\r\n\r\nexport default defineMessages({\r\n  createPageTitle: {\r\n    id: 'partnermanagement.publisher.createPageTitle',\r\n    defaultMessage: 'Create publisher',\r\n  },\r\n  editPageTitle: {\r\n    id: 'partnermanagement.publisher.editPageTitle',\r\n    defaultMessage: 'Edit publisher',\r\n  },\r\n  updatePublisher: {\r\n    id: 'partnermanagement.publisher.updatePublisher',\r\n    defaultMessage: 'Update publisher',\r\n  },\r\n  partner: {\r\n    id: 'partnermanagement.publisher.partner',\r\n    defaultMessage: 'Partner',\r\n  },\r\n  publisherName: {\r\n    id: 'partnermanagement.publisher.publisherName',\r\n    defaultMessage: 'Publisher name',\r\n  },\r\n  publisherId: {\r\n    id: 'partnermanagement.publisher.publisherId',\r\n    defaultMessage: 'Publisher id',\r\n  },\r\n  networkAffiliationLabel: {\r\n    id: 'partnermanagement.publisher.networkAffiliationLabel',\r\n    defaultMessage: 'Network affiliation',\r\n  },\r\n  networkAffiliationOptionPartnerOwned: {\r\n    id: 'partnermanagement.publisher.networkAffiliationOptionPartnerOwned',\r\n    defaultMessage: 'Partner owned (O&O)',\r\n  },\r\n  networkAffiliationOptionSyndicated: {\r\n    id: 'partnermanagement.publisher.networkAffiliationOptionSyndicated',\r\n    defaultMessage: 'Syndicated partner',\r\n  },\r\n  publisherAddressTitle: {\r\n    id: 'partnermanagement.publisher.publisherAddressTitle',\r\n    defaultMessage: 'Publisher address',\r\n  },\r\n  publisherAddressLine2: {\r\n    id: 'partnermanagement.publisher.publisherAddressLine2',\r\n    defaultMessage: 'Publisher address line 2',\r\n  },\r\n  allowedMarketsForAllTitle: {\r\n    id: 'partnermanagement.publisher.allowedMarketsForAllTitle',\r\n    defaultMessage: 'Allowed markets for all accounts',\r\n  },\r\n  allowedMarketsForSelectedTitle: {\r\n    id: 'partnermanagement.publisher.allowedMarketsForSelectedTitle',\r\n    defaultMessage: 'Allowed markets for selected accounts',\r\n  },\r\n  createAnAccountTitle: {\r\n    id: 'partnermanagement.publisher.createAnAccountTitle',\r\n    defaultMessage: 'Create an account',\r\n  },\r\n  createAnAccountInfo: {\r\n    id: 'partnermanagement.publisher.createAnAccountInfo',\r\n    defaultMessage: 'At least one account is required for all new publishers.  A new Account ID will be created for this account.',\r\n  },\r\n  accountName: {\r\n    id: 'partnermanagement.publisher.accountName',\r\n    defaultMessage: 'Account Name',\r\n  },\r\n  contentDeliverySetting: {\r\n    id: 'partnermanagement.publisher.contentDeliverySetting',\r\n    defaultMessage: 'Account content delivery settings',\r\n  },\r\n  adCountryPolicy: {\r\n    id: 'partnermanagement.publisher.adCountryPolicy',\r\n    defaultMessage: 'Ad country/region policy',\r\n  },\r\n  adLanguage: {\r\n    id: 'partnermanagement.publisher.adLanguage',\r\n    defaultMessage: 'Ad Language',\r\n  },\r\n  createPublisher: {\r\n    id: 'partnermanagement.publisher.createPublisher',\r\n    defaultMessage: 'Create publisher',\r\n  },\r\n  editPublisher: {\r\n    id: 'partnermanagement.publisher.editPublisher',\r\n    defaultMessage: 'Save changes',\r\n  },\r\n  microsoft: {\r\n    id: 'partnermanagement.publisher.microsoft',\r\n    defaultMessage: 'Microsoft',\r\n  },\r\n  yahoo: {\r\n    id: 'partnermanagement.publisher.yahoo',\r\n    defaultMessage: 'Yahoo',\r\n  },\r\n  advancedpublihserattributes: {\r\n    id: 'partnermanagement.publisher.advancedpublisherattributes',\r\n    defaultMessage: 'Advanced publisher attributes',\r\n  },\r\n  publishertier: {\r\n    id: 'partnermanagement.publisher.publisherTier',\r\n    defaultMessage: 'Publisher tier',\r\n  },\r\n  publisherTierInternalPremium: {\r\n    id: 'partnermanagement.publisher.publisherTier.internalPremium',\r\n    defaultMessage: 'Internal premium',\r\n  },\r\n  publisherTierManagedPremium: {\r\n    id: 'partnermanagement.publisher.publisherTier.managedPremium',\r\n    defaultMessage: 'Managed premium',\r\n  },\r\n  publishertierSelfServeStandard: {\r\n    id: 'partnermanagement.publisher.publisherTier.selfServeStandard',\r\n    defaultMessage: 'Self-serve standard',\r\n  },\r\n  publishertierSelfServe3rdParty: {\r\n    id: 'partnermanagement.publisher.publisherTier.SelfServe3rdParty',\r\n    defaultMessage: 'Self Serve 3rd Party',\r\n  },\r\n  publishertierSelfServe1stParty: {\r\n    id: 'partnermanagement.publisher.publisherTier.SelfServe1stParty',\r\n    defaultMessage: 'Self Serve 1st Party',\r\n  },\r\n  publishertierSelfServe1stPartyBoost: {\r\n    id: 'partnermanagement.publisher.publisherTier.SelfServe1stPartyBoost',\r\n    defaultMessage: 'Self Serve 1st Party Boost',\r\n  },\r\n  publisherFeatureOverrideTier: {\r\n    id: 'partnermanagement.publisher.featureOverrideTier',\r\n    defaultMessage: 'Publisher override tier',\r\n  },\r\n  publisherFeatureOverrideTierInternalPremium: {\r\n    id: 'partnermanagement.publisher.featuretier.internalPremium',\r\n    defaultMessage: 'Internal premium',\r\n  },\r\n  publisherFeatureOverrideTierManagedPremium: {\r\n    id: 'partnermanagement.publisher.featuretier.managedPremium',\r\n    defaultMessage: 'Managed premium',\r\n  },\r\n  publisherFeatureOverrideTierSelfServeStandard: {\r\n    id: 'partnermanagement.publisher.featuretier.selfServeStandard',\r\n    defaultMessage: 'Self-serve standard',\r\n  },\r\n  publisherFeatureOverrideTierAPI: {\r\n    id: 'partnermanagement.publisher.featuretier.API',\r\n    defaultMessage: 'API',\r\n  },\r\n  publisherFeatureOverrideTierSelfServeExperiment: {\r\n    id: 'partnermanagement.publisher.featuretier.selfserveexperiment',\r\n    defaultMessage: 'Self-serve experiment',\r\n  },\r\n  publisherFeatureOverrideTierSelfServeSearch: {\r\n    id: 'partnermanagement.publisher.featuretier.selfserveSearch',\r\n    defaultMessage: 'Self-serve search',\r\n  },\r\n  publisherEntityLimit: {\r\n    id: 'partnermanagement.publisher.entitylimit',\r\n    defaultMessage: 'Select entity limit tier',\r\n  },\r\n  publisherEntityLimitInfinite: {\r\n    id: 'partnermanagement.publisher.entitylimit.infinite',\r\n    defaultMessage: 'Infinite',\r\n  },\r\n  publisherEntityLimitSmall: {\r\n    id: 'partnermanagement.publisher.entitylimit.small',\r\n    defaultMessage: 'Small',\r\n  },\r\n  publisherEntityLimitMedium: {\r\n    id: 'partnermanagement.publisher.entitylimit.medium',\r\n    defaultMessage: 'Medium',\r\n  },\r\n  publisherEntityLimitLarge: {\r\n    id: 'partnermanagement.publisher.entitylimit.large',\r\n    defaultMessage: 'Large',\r\n  },\r\n  publisherEntityLimitNetwork: {\r\n    id: 'partnermanagement.publisher.entitylimit.network',\r\n    defaultMessage: 'Network',\r\n  },\r\n  publisherServiceLevel: {\r\n    id: 'partnermanagement.publisher.servicelevel',\r\n    defaultMessage: 'Service level',\r\n  },\r\n  publisherServiceLevelPremium: {\r\n    id: 'partnermanagement.publisher.servicelevel.premium',\r\n    defaultMessage: 'Premium',\r\n  },\r\n  publisherServiceLevelSelfServe: {\r\n    id: 'partnermanagement.publisher.servicelevel.selfserve',\r\n    defaultMessage: 'Self-serve',\r\n  },\r\n  publisherServiceLevelSelfServeTrusted: {\r\n    id: 'partnermanagement.publisher.servicelevel.selfservetrusted',\r\n    defaultMessage: 'Self-serve trusted',\r\n  },\r\n  publisherServiceLevelInternal: {\r\n    id: 'partnermanagement.publisher.servicelevel.internal',\r\n    defaultMessage: 'Internal',\r\n  },\r\n  publisherServiceLevelSelect: {\r\n    id: 'partnermanagement.publisher.servicelevel.select',\r\n    defaultMessage: 'Select',\r\n  },\r\n  publisherAllowedFeatures: {\r\n    id: 'partnermanagement.publisher.allowedfeatures',\r\n    defaultMessage: 'Allowed for this publisher',\r\n  },\r\n  publisherAllowedFeaturesWebAdUnits: {\r\n    id: 'partnermanagement.publisher.allowedfeatures.webadunits',\r\n    defaultMessage: 'Web ad units',\r\n  },\r\n  publisherAllowedFeaturesMobileSearchAdunit: {\r\n    id: 'partnermanagement.publisher.allowedfeatures.MobileSearchAdunit',\r\n    defaultMessage: 'Mobile search ad units',\r\n  },\r\n  publisherAllowedFeaturesDistributionReport: {\r\n    id: 'partnermanagement.publisher.allowedfeatures.DistributionReport',\r\n    defaultMessage: 'Distribution reporting',\r\n  },\r\n  publisherAllowedFeaturesDistributionV2Report: {\r\n    id: 'partnermanagement.publisher.allowedfeatures.DistributionV2Report',\r\n    defaultMessage: 'Distribution V2 reporting',\r\n  },\r\n  publisherAllowedFeaturesStartDistributionReport: {\r\n    id: 'partnermanagement.publisher.allowedfeatures.StartDistributionReport',\r\n    defaultMessage: 'Start Distribution reporting',\r\n  },\r\n  publisherAllowedFeaturesStartDistributionContentReport: {\r\n    id: 'partnermanagement.publisher.allowedfeatures.StartDistributionContentReport',\r\n    defaultMessage: 'Start Distribution Content reporting',\r\n  },\r\n  publisherEnableDefaultTythonV2Report: {\r\n    id: 'partnermanagement.publisher.allowedfeatures.EnableDefaultTythonV2Report',\r\n    defaultMessage: 'Default Tython V2 reporting',\r\n  },\r\n  publisherAllowedFeaturesSelectTierReport: {\r\n    id: 'partnermanagement.publisher.allowedfeatures.SelectTierReport',\r\n    defaultMessage: 'Select Tier reporting',\r\n  },\r\n  publisherAllowedFeaturesNativeReport: {\r\n    id: 'partnermanagement.publisher.allowedfeatures.NativeReport',\r\n    defaultMessage: 'Native reporting',\r\n  },\r\n  publisherAllowedFeaturesMediationReport: {\r\n    id: 'partnermanagement.publisher.allowedfeatures.MediationReport',\r\n    defaultMessage: 'RTB/Mediation reporting',\r\n  },\r\n  publisherAllowedFeaturesSyndicationReport: {\r\n    id: 'partnermanagement.publisher.allowedfeatures.SyndicationReport',\r\n    defaultMessage: 'Syndication reporting',\r\n  },\r\n  publisherAllowedFeaturesPropertyAutoApproved: {\r\n    id: 'partnermanagement.publisher.allowedfeatures.PropertyAutoApproved ',\r\n    defaultMessage: 'Property auto approved',\r\n  },\r\n  publisherAllowedFeaturesPaidSearchReportingApi: {\r\n    id: 'partnermanagement.publisher.allowedfeatures.PaidSearchReportingApi ',\r\n    defaultMessage: 'PaidSearch Reporting API',\r\n  },\r\n  publisherAllowedFeaturesPaidSearchDashboard: {\r\n    id: 'partnermanagement.publisher.allowedfeatures.PaidSearchDashboard ',\r\n    defaultMessage: 'PaidSearch Dashboard',\r\n  },\r\n  publisherAllowedFeaturesDynamicSites: {\r\n    id: 'partnermanagement.publisher.allowedfeatures.DynamicSites',\r\n    defaultMessage: 'Dynamic sites / app registration',\r\n  },\r\n  publisherIPAddress: {\r\n    id: 'partnermanagement.publisher.ipaddress',\r\n    defaultMessage: 'IP address ranges for API authentication',\r\n  },\r\n  publisherIPAddressRange: {\r\n    id: 'partnermanagement.publisher.ipaddressrange',\r\n    defaultMessage: 'Create IP address range',\r\n  },\r\n  publisherAdCallFeatures: {\r\n    id: 'partnermanagement.publisher.adcallfeatures',\r\n    defaultMessage: 'Allowed ad call features',\r\n  },\r\n  publisherAdCallFeaturesAskPrice: {\r\n    id: 'partnermanagement.publisher.adcallfeatures.askprice',\r\n    defaultMessage: 'Ask Price',\r\n  },\r\n  publisherAdCallFeaturesOnBehalf: {\r\n    id: 'partnermanagement.publisher.adcallfeatures.onbehalf',\r\n    defaultMessage: 'On behalf',\r\n  },\r\n  publisherAdCallFeaturesReferrer: {\r\n    id: 'partnermanagement.publisher.adcallfeatures.referer',\r\n    defaultMessage: 'Referrer',\r\n  },\r\n  publisherAdCallFeaturesPaidSearchAPI: {\r\n    id: 'partnermanagement.publisher.adcallfeatures.paidsearchAPI',\r\n    defaultMessage: 'Paid search API',\r\n  },\r\n  publisherAdCallFeaturesOutputType: {\r\n    id: 'partnermanagement.publisher.adcallfeatures.outputtype',\r\n    defaultMessage: 'Output type',\r\n  },\r\n  publisherAdCallFeaturesLogImpression: {\r\n    id: 'partnermanagement.publisher.adcallfeatures.logimpression',\r\n    defaultMessage: 'Log impression',\r\n  },\r\n  publisherAdCallFeaturesIPForwording: {\r\n    id: 'partnermanagement.publisher.adcallfeatures.ipforwarding',\r\n    defaultMessage: 'IP Forwarding',\r\n  },\r\n  publisherAdCallFeaturesNetworkOptimizer: {\r\n    id: 'partnermanagement.publisher.adcallfeatures.networkoptimizer',\r\n    defaultMessage: 'Network optimizer',\r\n  },\r\n  publisherAdCallFeaturesAdECN: {\r\n    id: 'partnermanagement.publisher.adcallfeatures.adecn',\r\n    defaultMessage: 'AdECN',\r\n  },\r\n  publisherAdCallFeaturesContextualAPI: {\r\n    id: 'partnermanagement.publisher.adcallfeatures.contextualapi',\r\n    defaultMessage: 'Contextual API',\r\n  },\r\n  IPAddressCreateTitle: {\r\n    id: 'partnermanagement.publisher.IPAddressCreateTitle',\r\n    defaultMessage: 'Create IP address range',\r\n  },\r\n  IPAddressEditTitle: {\r\n    id: 'partnermanagement.publisher.IPAddressEditTitle',\r\n    defaultMessage: 'Edit IP address range',\r\n  },\r\n  IPAddressRangeName: {\r\n    id: 'partnermanagement.publisher.IPAddressRangeName',\r\n    defaultMessage: 'IP address range name',\r\n  },\r\n  IPAddressMinimum: {\r\n    id: 'partnermanagement.publisher.IPAddressMinimum',\r\n    defaultMessage: 'Minimum IP address',\r\n  },\r\n  IPAddressMaximum: {\r\n    id: 'partnermanagement.publisher.IPAddressMaximum',\r\n    defaultMessage: 'Maximum IP address',\r\n  },\r\n  IPAddressType: {\r\n    id: 'partnermanagement.publisher.IPAddressType',\r\n    defaultMessage: 'Type',\r\n  },\r\n  IPAddressIPV4: {\r\n    id: 'partnermanagement.publisher.IPAddressIPV4',\r\n    defaultMessage: 'IPV4',\r\n  },\r\n  IPAddressIPV6: {\r\n    id: 'partnermanagement.publisher.IPAddressIPV6',\r\n    defaultMessage: 'IPV6',\r\n  },\r\n  publisherAllowedFeaturesDesc: {\r\n    id: 'partnermanagement.publisher.publisherAllowedFeaturesDesc',\r\n    defaultMessage: 'Select the features to be allowed for publisher',\r\n  },\r\n});\r\n","import { IPubcenterSpacing } from '../../../../../theme';\r\nimport { ICreatePublisherStyleProps, ICreatePublisherStyles } from './CreatePublisher.types';\r\n\r\nexport const getStyles = (props: ICreatePublisherStyleProps): ICreatePublisherStyles => {\r\n  const { theme } = props;\r\n  const spacing = theme.spacing as IPubcenterSpacing;\r\n\r\n  return {\r\n    root: {\r\n      marginTop: theme.spacing.m,\r\n      marginLeft: theme.spacing.m\r\n    },\r\n    ipGrid: {\r\n      display: 'flex',\r\n      flexDirection: 'column',\r\n      height: '400px',\r\n      flex: 1\r\n    },\r\n    subComponentStyles: {\r\n      servingTierChoiceGroup: {\r\n        flexContainer: {\r\n          display: 'flex',\r\n          flexDirection: 'row',\r\n          justifyContent: 'flex-start',\r\n          selectors: {\r\n            '.ms-ChoiceField': {\r\n              marginRight: theme.spacing.m\r\n            }\r\n          }\r\n        }\r\n      },\r\n      formSection: {\r\n        root: {\r\n          borderBottomWidth: 0\r\n        }\r\n      },\r\n      checkbox: {\r\n        root: {\r\n          marginBottom: spacing.size8\r\n        }\r\n      }\r\n    }\r\n  };\r\n};\r\n","import {\r\n  Checkbox,\r\n  ChoiceGroup,\r\n  classNamesFunction,\r\n  ComboBox,\r\n  Dropdown,\r\n  getTheme,\r\n  IComboBoxOption,\r\n  IDropdownOption,\r\n  IProcessedStyleSet,\r\n  Panel,\r\n  PanelType,\r\n  TextField,\r\n} from '@fluentui/react';\r\nimport * as React from 'react';\r\nimport {\r\n  EntityLimitTier,\r\n  FeatureOverideTier,\r\n  getAppStore,\r\n  IPRange,\r\n  ISubGeography,\r\n  NetworkAffiliation,\r\n  onNavigateBack,\r\n  Partner,\r\n  PublisherTier,\r\n} from '../../../../@data';\r\nimport { completeAccess, hasReadAccess, hasUpdateAccess, UserRoleEntity, userRoleKey } from '../../../../@data/services/UserRoleService';\r\nimport { Publisher as PublisherAccessPermissions } from '../../../../@data/store/schema/userrolemodels/Publisher';\r\nimport AppMessages from '../../../../App.messages';\r\nimport { DataGrid, DataGridSelectionMode, IDataGrid, IDataGridCommandBarProps } from '../../../../components/DataGrid';\r\nimport { FormItem, FormSection, FormState } from '../../../../components/Form';\r\nimport { FormLabel } from '../../../../components/Form/FormLabel';\r\nimport { countryToCurrencyMap } from '../../../../config/countryToCurrencyMapper.config';\r\n\r\nimport {\r\n  COUNTRIES_LANGUAGE_MAPPING,\r\n  CURRENCIES_LANGUAGE_MAPPING,\r\n  LANGUAGES_LANGUAGE_MAPPING,\r\n  TIMEZONE_LANGUAGE_MAPPING,\r\n} from '../../../../globalization';\r\nimport { DetailPage } from '../../../../layout/DetailPage/DetailPage';\r\nimport { IDataGridColumn } from '../../../../layout/GridPageV2';\r\nimport gridPageMessages from '../../../../layout/GridPageV2/GridV2.messages';\r\nimport { getScreenReaderTextStyles } from '../../../../utils/GlobalStyleUtils';\r\nimport { injectIntlWithObserver } from '../../../../utils/ReactUtils';\r\nimport { onPanelOpenChanged } from '../../@data/actions';\r\nimport { createReturnUrl } from '../../@data/service/PartnerManagementService';\r\nimport { getPageStore, RouteName } from '../../@data/store/store';\r\nimport {\r\n  onFormCancelled,\r\n  onFormCreated,\r\n  onFormEditted,\r\n  onFormInitialized,\r\n  onFormPublisherAccountCountry,\r\n  onFormPublisherAccountLanguage,\r\n  onFormPublisherAccountName,\r\n  onFormPublisherAccountTimezoneChanged,\r\n  onFormPublisherAddressCityChanged,\r\n  onFormPublisherAddressCountryCodeChanged,\r\n  onFormPublisherAddressLine1Changed,\r\n  onFormPublisherAddressLine2Changed,\r\n  onFormPublisherAddressStateChanged,\r\n  onFormPublisherAddressZipcodeChanged,\r\n  onFormPublisherDistributionChanged,\r\n  onFormPublisherDistributionV2Changed,\r\n  onFormPublisherDynamicPropertyRegistrationChanged,\r\n  onFormPublisherEnableDefaultTythonV2Changed,\r\n  onFormPublisherEntityLimitTierChanged,\r\n  onFormPublisherIpChanged,\r\n  onFormPublisherIpNameChanged,\r\n  onFormPublisherMaximumIpChanged,\r\n  onFormPublisherMediationChanged,\r\n  onFormPublisherMinimumIpChanged,\r\n  onFormPublisherMobileSearchChanged,\r\n  onFormPublisherNameChanged,\r\n  onFormPublisherNativeChanged,\r\n  onFormPublisherNetworkChanged,\r\n  onFormPublisherOverrideTierChanged,\r\n  onFormPublisherPartnerChanged,\r\n  onFormPublisherPropertyAutoChanged,\r\n  onFormPublisherPSDashboardChanged,\r\n  onFormPublisherPSReportingAPIChanged,\r\n  onFormPublisherSelectTierChanged,\r\n  onFormPublisherServiceLevelChanged,\r\n  onFormPublisherStartDistributionChanged,\r\n  onFormPublisherStartDistributionContentChanged,\r\n  onFormPublisherSyndicationChanged,\r\n  onFormPublisherTierChanged,\r\n  onFormPublisherWebAdunitsChanged,\r\n  onPanelCleared,\r\n} from '../@data/actions/onPublisherFormsChanged';\r\nimport '../@data/mutators/PublisherChanged';\r\nimport '../@data/orchestrators/formInitialized';\r\nimport { getStore } from '../@data/store';\r\nimport messages from './CreatePublisher.messages';\r\nimport { getStyles } from './CreatePublisher.styles';\r\nimport {\r\n  ICreatePublisherProps,\r\n  ICreatePublisherStyleProps,\r\n  ICreatePublisherStyles,\r\n  IFormInitializationState,\r\n} from './CreatePublisher.types';\r\n\r\nconst getClassNames = classNamesFunction<ICreatePublisherStyleProps, ICreatePublisherStyles>();\r\n\r\nexport const CreatePublisher = injectIntlWithObserver(\r\n  class extends React.Component<ICreatePublisherProps, IFormInitializationState> {\r\n    private _classNames: IProcessedStyleSet<ICreatePublisherStyles>;\r\n    private _datagrid = React.createRef<IDataGrid>();\r\n\r\n    constructor(props: ICreatePublisherProps) {\r\n      super(props);\r\n      this.state = {\r\n        initializeForm: true,\r\n        ipPanelFormState: FormState.InPageCreate,\r\n      };\r\n    }\r\n\r\n    public componentDidMount() {\r\n      const publisherId = this.props.match.params.publisherId;\r\n      const entityId = this.props.match.params.id;\r\n      this.setState({ id: entityId });\r\n\r\n      onFormInitialized(this.props.mode, publisherId, entityId);\r\n    }\r\n\r\n    public componentDidUpdate() {\r\n      const publisherId = this.props.match.params.publisherId;\r\n      const entityId = this.props.match.params.id;\r\n      if (this.state.initializeForm && this.state.id !== entityId) {\r\n        this.setState({ id: entityId });\r\n\r\n        onFormInitialized(this.props.mode, publisherId, entityId);\r\n      }\r\n    }\r\n\r\n    public render(): JSX.Element {\r\n      const { formatMessage } = this.props.intl;\r\n      const theme = getTheme();\r\n      this._classNames = getClassNames(getStyles, { theme });\r\n\r\n      const publisherId = this.props.match.params.publisherId;\r\n      const store = getStore();\r\n      const publisherAccessPermissions = this._getPublisherAccessPermission();\r\n\r\n      return (\r\n        <DetailPage\r\n          titleLabel={this.props.mode === FormState.Edit ? formatMessage(messages.editPageTitle) : formatMessage(messages.createPageTitle)}\r\n          helpId={'pop_PCv4_PublisherCreate'}\r\n          submitLabel={formatMessage(this.props.mode === FormState.Edit ? messages.updatePublisher : messages.createPageTitle)}\r\n          onSubmit={() => this._onSubmit(this.props.mode, publisherId)}\r\n          onCancel={() => this._onCancel(publisherId)}\r\n          onNavClick={() => this._onCancel(publisherId)}\r\n          saving={getAppStore().saving}\r\n          pageMode={this.props.mode}\r\n        >\r\n          <FormItem>\r\n            <ComboBox\r\n              useComboBoxAsMenuWidth={true}\r\n              autoComplete=\"on\"\r\n              label={formatMessage(messages.partner)}\r\n              required={true}\r\n              selectedKey={store.active.partner}\r\n              options={[\r\n                { key: Partner.Microsoft, text: formatMessage(messages.microsoft) },\r\n                { key: Partner.Yahoo, text: formatMessage(messages.yahoo) },\r\n              ]}\r\n              disabled={\r\n                this.props.mode === FormState.Edit ||\r\n                (publisherAccessPermissions ? !hasUpdateAccess(publisherAccessPermissions.partner) : false)\r\n              }\r\n              // Removing comboBox from tab order when it's disabled. When enabled tabIndex is set to undefined to prevent double tabbing\r\n              tabIndex={\r\n                this.props.mode === FormState.Edit ||\r\n                (publisherAccessPermissions ? !hasUpdateAccess(publisherAccessPermissions.partner) : false)\r\n                  ? -1\r\n                  : undefined\r\n              }\r\n              errorMessage={store.errors.partner}\r\n              onChange={(_, value) => onFormPublisherPartnerChanged(value!)}\r\n            />\r\n          </FormItem>\r\n          <FormItem formWidth={440}>\r\n            <TextField\r\n              label={formatMessage(messages.publisherName)}\r\n              ariaLabel={formatMessage(messages.publisherName)}\r\n              required={true}\r\n              value={store.active.name}\r\n              disabled={this.props.mode === FormState.Edit}\r\n              onChange={(_, value) => onFormPublisherNameChanged(value)}\r\n              errorMessage={store.errors.name}\r\n            />\r\n          </FormItem>\r\n          {store.active.id && (\r\n            <FormItem>\r\n              <TextField\r\n                label={formatMessage(messages.publisherId)}\r\n                ariaLabel={formatMessage(messages.publisherId)}\r\n                required={true}\r\n                disabled={true}\r\n                defaultValue={String(store.active.id)}\r\n              />\r\n            </FormItem>\r\n          )}\r\n          <FormItem formWidth={440}>\r\n            <ChoiceGroup\r\n              aria-activedescendant={formatMessage(messages.networkAffiliationOptionPartnerOwned)}\r\n              label={formatMessage(messages.networkAffiliationLabel)}\r\n              ariaLabelledBy={'NetworkAffiliation'}\r\n              required={true}\r\n              selectedKey={store.active.networkAffiliation ?? NetworkAffiliation.OwnedAndOperated}\r\n              options={[\r\n                {\r\n                  id: formatMessage(messages.networkAffiliationOptionPartnerOwned),\r\n                  key: NetworkAffiliation.OwnedAndOperated,\r\n                  text: formatMessage(messages.networkAffiliationOptionPartnerOwned),\r\n                },\r\n                {\r\n                  id: formatMessage(messages.networkAffiliationOptionSyndicated),\r\n                  key: NetworkAffiliation.Syndicated,\r\n                  text: formatMessage(messages.networkAffiliationOptionSyndicated),\r\n                },\r\n              ]}\r\n              styles={this._classNames.subComponentStyles.servingTierChoiceGroup}\r\n              onChange={(_, value) => onFormPublisherNetworkChanged(value!)}\r\n              disabled={this._isDisabled(\r\n                this.props.mode,\r\n                publisherAccessPermissions === null ? completeAccess : publisherAccessPermissions.networkAffiliation\r\n              )}\r\n            />\r\n            <span id=\"NetworkAffiliation\" style={getScreenReaderTextStyles()}>\r\n              {formatMessage(messages.networkAffiliationLabel)}\r\n            </span>\r\n          </FormItem>\r\n          <FormSection\r\n            expanded={true}\r\n            title={formatMessage(messages.publisherAddressTitle)}\r\n            styles={this._classNames.subComponentStyles.formSection}\r\n          >\r\n            {this._publisherAddress(publisherAccessPermissions)}\r\n          </FormSection>\r\n          {this.props.mode === FormState.Edit && (\r\n            <FormSection\r\n              title={formatMessage(messages.advancedpublihserattributes)}\r\n              styles={this._classNames.subComponentStyles.formSection}\r\n            >\r\n              {this._advancedpublisherAttributes(publisherAccessPermissions)}\r\n            </FormSection>\r\n          )}\r\n          {this.props.mode === FormState.Create && (\r\n            <FormSection\r\n              expanded={true}\r\n              title={formatMessage(messages.createAnAccountTitle)}\r\n              styles={this._classNames.subComponentStyles.formSection}\r\n            >\r\n              {this._createAccount(publisherAccessPermissions)}\r\n            </FormSection>\r\n          )}\r\n          <Panel\r\n            isOpen={getPageStore().panelIsOpen}\r\n            type={PanelType.medium}\r\n            onDismiss={() => onPanelOpenChanged(false)}\r\n            closeButtonAriaLabel={formatMessage(AppMessages.close)}\r\n          >\r\n            {this._createIPAddress(this._getSelectionItems(), this.state.ipPanelFormState, publisherAccessPermissions)}\r\n          </Panel>\r\n        </DetailPage>\r\n      );\r\n    }\r\n\r\n    private _publisherAddress = (publisherAccessPermissions: PublisherAccessPermissions | null): JSX.Element => {\r\n      const { formatMessage } = this.props.intl;\r\n      const store = getStore();\r\n      return (\r\n        <>\r\n          <FormItem formWidth={440}>\r\n            <TextField\r\n              label={formatMessage(AppMessages.address)}\r\n              ariaLabel={formatMessage(AppMessages.address)}\r\n              value={store.active.addressLine1}\r\n              required={true}\r\n              onChange={(_, value) => onFormPublisherAddressLine1Changed(value)}\r\n              errorMessage={store.errors.addressLine1}\r\n              disabled={this._isDisabled(\r\n                this.props.mode,\r\n                publisherAccessPermissions === null ? completeAccess : publisherAccessPermissions.address\r\n              )}\r\n            />\r\n          </FormItem>\r\n          <FormItem formWidth={440}>\r\n            <TextField\r\n              value={store.active.addressLine2}\r\n              ariaLabel={formatMessage(messages.publisherAddressLine2)}\r\n              onChange={(_, value) => onFormPublisherAddressLine2Changed(value)}\r\n              disabled={this._isDisabled(\r\n                this.props.mode,\r\n                publisherAccessPermissions === null ? completeAccess : publisherAccessPermissions.address\r\n              )}\r\n            />\r\n          </FormItem>\r\n          <FormItem>\r\n            <TextField\r\n              label={formatMessage(AppMessages.city)}\r\n              ariaLabel={formatMessage(AppMessages.city)}\r\n              value={store.active.city}\r\n              required={true}\r\n              errorMessage={store.errors.city}\r\n              onChange={(_, value) => onFormPublisherAddressCityChanged(value)}\r\n              disabled={this._isDisabled(\r\n                this.props.mode,\r\n                publisherAccessPermissions === null ? completeAccess : publisherAccessPermissions.address\r\n              )}\r\n            />\r\n          </FormItem>\r\n          <FormItem formWidth={440}>\r\n            <ComboBox\r\n              useComboBoxAsMenuWidth={true}\r\n              autoComplete=\"on\"\r\n              label={formatMessage(AppMessages.countryOrRegion)}\r\n              required={true}\r\n              errorMessage={store.errors.country}\r\n              options={this._createCountryDropDown(store.active.availableCountries!)}\r\n              selectedKey={store.active.country}\r\n              onChange={(_, value) => onFormPublisherAddressCountryCodeChanged(value!)}\r\n              disabled={this._isDisabled(\r\n                this.props.mode,\r\n                publisherAccessPermissions === null ? completeAccess : publisherAccessPermissions.address\r\n              )}\r\n              tabIndex={\r\n                this._isDisabled(this.props.mode, publisherAccessPermissions === null ? completeAccess : publisherAccessPermissions.address)\r\n                  ? -1\r\n                  : undefined\r\n              }\r\n            />\r\n          </FormItem>\r\n          <FormItem formWidth={440}>\r\n            <ComboBox\r\n              useComboBoxAsMenuWidth={true}\r\n              autoComplete=\"on\"\r\n              required={true}\r\n              errorMessage={store.errors.state}\r\n              label={formatMessage(AppMessages.stateOrProvince)}\r\n              options={this._createStateOrProvinceDropDown(store.active.availableStates!)}\r\n              selectedKey={store.active.state}\r\n              onChange={(_, value) => onFormPublisherAddressStateChanged(value!)}\r\n              disabled={this._isDisabled(\r\n                this.props.mode,\r\n                publisherAccessPermissions === null ? completeAccess : publisherAccessPermissions.address\r\n              )}\r\n              tabIndex={\r\n                this._isDisabled(this.props.mode, publisherAccessPermissions === null ? completeAccess : publisherAccessPermissions.address)\r\n                  ? -1\r\n                  : undefined\r\n              }\r\n            />\r\n          </FormItem>\r\n          <FormItem>\r\n            <TextField\r\n              label={formatMessage(AppMessages.zipcode)}\r\n              ariaLabel={formatMessage(AppMessages.zipcode)}\r\n              value={store.active.postalcode}\r\n              required={true}\r\n              onChange={(_, value) => onFormPublisherAddressZipcodeChanged(value)}\r\n              disabled={this._isDisabled(\r\n                this.props.mode,\r\n                publisherAccessPermissions === null ? completeAccess : publisherAccessPermissions.address\r\n              )}\r\n            />\r\n          </FormItem>\r\n        </>\r\n      );\r\n    };\r\n\r\n    private _advancedpublisherAttributes = (publisherAccessPermissions: PublisherAccessPermissions | null): JSX.Element => {\r\n      const { formatMessage } = this.props.intl;\r\n      const store = getStore();\r\n\r\n      const publisherTierDropdownOption: IComboBoxOption[] = [\r\n        {\r\n          key: PublisherTier.InternalPremium,\r\n          text: formatMessage(messages.publisherTierInternalPremium),\r\n        },\r\n        {\r\n          key: PublisherTier.ManagedPremium,\r\n          text: formatMessage(messages.publisherTierManagedPremium),\r\n        },\r\n        {\r\n          key: PublisherTier.SelfServeStandard,\r\n          text: formatMessage(messages.publishertierSelfServeStandard),\r\n        },\r\n        {\r\n          key: PublisherTier.SelfServe3rdParty,\r\n          text: formatMessage(messages.publishertierSelfServe3rdParty),\r\n        },\r\n        {\r\n          key: PublisherTier.SelfServe1stParty,\r\n          text: formatMessage(messages.publishertierSelfServe1stParty),\r\n        },\r\n        {\r\n          key: PublisherTier.SelfServe1stPartyBoost,\r\n          text: formatMessage(messages.publishertierSelfServe1stPartyBoost),\r\n        },\r\n      ];\r\n\r\n      const featureOverrideTierOption: IComboBoxOption[] = [\r\n        {\r\n          key: FeatureOverideTier.InternalPremium,\r\n          text: formatMessage(messages.publisherFeatureOverrideTierInternalPremium),\r\n        },\r\n        {\r\n          key: FeatureOverideTier.ManagedPremium,\r\n          text: formatMessage(messages.publisherFeatureOverrideTierManagedPremium),\r\n        },\r\n        {\r\n          key: FeatureOverideTier.SelfServeStandard,\r\n          text: formatMessage(messages.publisherFeatureOverrideTierSelfServeStandard),\r\n        },\r\n        {\r\n          key: FeatureOverideTier.Api,\r\n          text: formatMessage(messages.publisherFeatureOverrideTierAPI),\r\n        },\r\n        {\r\n          key: FeatureOverideTier.SelfServeExperiment,\r\n          text: formatMessage(messages.publisherFeatureOverrideTierSelfServeExperiment),\r\n        },\r\n        {\r\n          key: FeatureOverideTier.SelfServeSearch,\r\n          text: formatMessage(messages.publisherFeatureOverrideTierSelfServeSearch),\r\n        },\r\n      ];\r\n\r\n      const entityLimitTierOption: IComboBoxOption[] = [\r\n        {\r\n          key: EntityLimitTier.Infinite,\r\n          text: formatMessage(messages.publisherEntityLimitInfinite),\r\n        },\r\n        {\r\n          key: EntityLimitTier.Small,\r\n          text: formatMessage(messages.publisherEntityLimitSmall),\r\n        },\r\n        {\r\n          key: EntityLimitTier.Medium,\r\n          text: formatMessage(messages.publisherEntityLimitMedium),\r\n        },\r\n        {\r\n          key: EntityLimitTier.Large,\r\n          text: formatMessage(messages.publisherEntityLimitLarge),\r\n        },\r\n        {\r\n          key: EntityLimitTier.Network,\r\n          text: formatMessage(messages.publisherEntityLimitNetwork),\r\n        },\r\n      ];\r\n\r\n      const publisherServiceLevelOption: IComboBoxOption[] = [\r\n        {\r\n          key: 'Premium',\r\n          text: formatMessage(messages.publisherServiceLevelPremium),\r\n        },\r\n        {\r\n          key: 'SelfServe',\r\n          text: formatMessage(messages.publisherServiceLevelSelfServe),\r\n        },\r\n        {\r\n          key: 'trusted',\r\n          text: formatMessage(messages.publisherServiceLevelSelfServeTrusted),\r\n        },\r\n        {\r\n          key: 'internal',\r\n          text: formatMessage(messages.publisherServiceLevelInternal),\r\n        },\r\n        {\r\n          key: 'select',\r\n          text: formatMessage(messages.publisherServiceLevelSelect),\r\n        },\r\n      ];\r\n\r\n      return (\r\n        <>\r\n          {hasReadAccess(publisherAccessPermissions === null ? completeAccess : publisherAccessPermissions.publisherTier) && (\r\n            <FormItem>\r\n              <ComboBox\r\n                useComboBoxAsMenuWidth={true}\r\n                autoComplete=\"on\"\r\n                label={formatMessage(messages.publishertier)}\r\n                selectedKey={store.active.publisherTier}\r\n                required={true}\r\n                options={publisherTierDropdownOption}\r\n                onChange={(_, value) => onFormPublisherTierChanged(value!)}\r\n                disabled={this._isDisabled(\r\n                  this.props.mode,\r\n                  publisherAccessPermissions === null ? completeAccess : publisherAccessPermissions.publisherTier\r\n                )}\r\n                tabIndex={\r\n                  this._isDisabled(\r\n                    this.props.mode,\r\n                    publisherAccessPermissions === null ? completeAccess : publisherAccessPermissions.publisherTier\r\n                  )\r\n                    ? -1\r\n                    : undefined\r\n                }\r\n              />\r\n            </FormItem>\r\n          )}\r\n          {hasReadAccess(publisherAccessPermissions === null ? completeAccess : publisherAccessPermissions.overrideFeatureTier) && (\r\n            <FormItem>\r\n              <ComboBox\r\n                useComboBoxAsMenuWidth={true}\r\n                autoComplete=\"on\"\r\n                label={formatMessage(messages.publisherFeatureOverrideTier)}\r\n                selectedKey={store.active.overrideFeatureTier}\r\n                required={true}\r\n                options={featureOverrideTierOption}\r\n                onChange={(_, value) => onFormPublisherOverrideTierChanged(value!)}\r\n                disabled={this._isDisabled(\r\n                  this.props.mode,\r\n                  publisherAccessPermissions === null ? completeAccess : publisherAccessPermissions.overrideFeatureTier\r\n                )}\r\n                tabIndex={\r\n                  this._isDisabled(\r\n                    this.props.mode,\r\n                    publisherAccessPermissions === null ? completeAccess : publisherAccessPermissions.overrideFeatureTier\r\n                  )\r\n                    ? -1\r\n                    : undefined\r\n                }\r\n              />\r\n            </FormItem>\r\n          )}\r\n          {hasReadAccess(publisherAccessPermissions === null ? completeAccess : publisherAccessPermissions.entityLimitTier) && (\r\n            <FormItem>\r\n              <ComboBox\r\n                useComboBoxAsMenuWidth={true}\r\n                autoComplete=\"on\"\r\n                label={formatMessage(messages.publisherEntityLimit)}\r\n                selectedKey={store.active.entityLimitTier}\r\n                required={true}\r\n                options={entityLimitTierOption}\r\n                onChange={(_, value) => onFormPublisherEntityLimitTierChanged(value!)}\r\n                disabled={this._isDisabled(\r\n                  this.props.mode,\r\n                  publisherAccessPermissions === null ? completeAccess : publisherAccessPermissions.entityLimitTier\r\n                )}\r\n                tabIndex={\r\n                  this._isDisabled(\r\n                    this.props.mode,\r\n                    publisherAccessPermissions === null ? completeAccess : publisherAccessPermissions.entityLimitTier\r\n                  )\r\n                    ? -1\r\n                    : undefined\r\n                }\r\n              />\r\n            </FormItem>\r\n          )}\r\n          {hasReadAccess(publisherAccessPermissions === null ? completeAccess : publisherAccessPermissions.serviceLevel) && (\r\n            <FormItem>\r\n              <ComboBox\r\n                useComboBoxAsMenuWidth={true}\r\n                autoComplete=\"on\"\r\n                label={formatMessage(messages.publisherServiceLevel)}\r\n                selectedKey={store.active.serviceLevel}\r\n                required={true}\r\n                options={publisherServiceLevelOption}\r\n                onChange={(_, value) => onFormPublisherServiceLevelChanged(value!)}\r\n                disabled={this._isDisabled(\r\n                  this.props.mode,\r\n                  publisherAccessPermissions === null ? completeAccess : publisherAccessPermissions.serviceLevel\r\n                )}\r\n                tabIndex={\r\n                  this._isDisabled(\r\n                    this.props.mode,\r\n                    publisherAccessPermissions === null ? completeAccess : publisherAccessPermissions.serviceLevel\r\n                  )\r\n                    ? -1\r\n                    : undefined\r\n                }\r\n              />\r\n            </FormItem>\r\n          )}\r\n\r\n          <FormItem\r\n            formWidth={440}\r\n            role=\"region\"\r\n            ariaLabelledBy=\"pubAlwdFeaturesLabel\"\r\n            ariaDescription={formatMessage(messages.publisherAllowedFeaturesDesc)}\r\n          >\r\n            <FormLabel\r\n              id=\"pubAlwdFeaturesLabel\"\r\n              labelContent={formatMessage(messages.publisherAllowedFeatures)}\r\n              noInfoButton={true}\r\n              intl={this.props.intl}\r\n            />\r\n            {hasReadAccess(publisherAccessPermissions === null ? completeAccess : publisherAccessPermissions.allowWebAdUnit) && (\r\n              <Checkbox\r\n                label={formatMessage(messages.publisherAllowedFeaturesWebAdUnits)}\r\n                ariaLabel={formatMessage(messages.publisherAllowedFeaturesWebAdUnits)}\r\n                checked={!!store.active.allowWebAdUnit}\r\n                styles={this._classNames.subComponentStyles.checkbox}\r\n                onChange={(_, value) => onFormPublisherWebAdunitsChanged(value)}\r\n                disabled={this._isDisabled(\r\n                  this.props.mode,\r\n                  publisherAccessPermissions === null ? completeAccess : publisherAccessPermissions.allowWebAdUnit\r\n                )}\r\n              />\r\n            )}\r\n            {hasReadAccess(publisherAccessPermissions === null ? completeAccess : publisherAccessPermissions.allowMobileSearchAdUnit) && (\r\n              <Checkbox\r\n                label={formatMessage(messages.publisherAllowedFeaturesMobileSearchAdunit)}\r\n                ariaLabel={formatMessage(messages.publisherAllowedFeaturesMobileSearchAdunit)}\r\n                checked={!!store.active.allowMobileSearchAdUnit}\r\n                styles={this._classNames.subComponentStyles.checkbox}\r\n                onChange={(_, value) => onFormPublisherMobileSearchChanged(value)}\r\n                disabled={this._isDisabled(\r\n                  this.props.mode,\r\n                  publisherAccessPermissions === null ? completeAccess : publisherAccessPermissions.allowMobileSearchAdUnit\r\n                )}\r\n              />\r\n            )}\r\n            {hasReadAccess(\r\n              publisherAccessPermissions === null ? completeAccess : publisherAccessPermissions.allowDistributionReporting\r\n            ) && (\r\n              <Checkbox\r\n                label={formatMessage(messages.publisherAllowedFeaturesDistributionReport)}\r\n                ariaLabel={formatMessage(messages.publisherAllowedFeaturesDistributionReport)}\r\n                checked={!!store.active.allowDistributionReporting}\r\n                styles={this._classNames.subComponentStyles.checkbox}\r\n                onChange={(_, value) => onFormPublisherDistributionChanged(value)}\r\n                disabled={this._isDisabled(\r\n                  this.props.mode,\r\n                  publisherAccessPermissions === null ? completeAccess : publisherAccessPermissions.allowDistributionReporting\r\n                )}\r\n              />\r\n            )}\r\n            {hasReadAccess(\r\n              publisherAccessPermissions === null ? completeAccess : publisherAccessPermissions.allowDistributionV2Reporting\r\n            ) && (\r\n              <Checkbox\r\n                label={formatMessage(messages.publisherAllowedFeaturesDistributionV2Report)}\r\n                ariaLabel={formatMessage(messages.publisherAllowedFeaturesDistributionV2Report)}\r\n                checked={!!store.active.allowDistributionV2Reporting}\r\n                styles={this._classNames.subComponentStyles.checkbox}\r\n                onChange={(_, value) => onFormPublisherDistributionV2Changed(value)}\r\n                disabled={this._isDisabled(\r\n                  this.props.mode,\r\n                  publisherAccessPermissions === null ? completeAccess : publisherAccessPermissions.allowDistributionV2Reporting\r\n                )}\r\n              />\r\n            )}\r\n            {hasReadAccess(\r\n              publisherAccessPermissions === null ? completeAccess : publisherAccessPermissions.allowStartDistributionReporting\r\n            ) && (\r\n              <Checkbox\r\n                label={formatMessage(messages.publisherAllowedFeaturesStartDistributionReport)}\r\n                ariaLabel={formatMessage(messages.publisherAllowedFeaturesStartDistributionReport)}\r\n                checked={!!store.active.allowStartDistributionReporting}\r\n                styles={this._classNames.subComponentStyles.checkbox}\r\n                onChange={(_, value) => onFormPublisherStartDistributionChanged(value)}\r\n                disabled={this._isDisabled(\r\n                  this.props.mode,\r\n                  publisherAccessPermissions === null ? completeAccess : publisherAccessPermissions.allowStartDistributionReporting\r\n                )}\r\n              />\r\n            )}\r\n            {hasReadAccess(\r\n              publisherAccessPermissions === null ? completeAccess : publisherAccessPermissions.allowStartDistributionContentReporting\r\n            ) && (\r\n              <Checkbox\r\n                label={formatMessage(messages.publisherAllowedFeaturesStartDistributionContentReport)}\r\n                ariaLabel={formatMessage(messages.publisherAllowedFeaturesStartDistributionContentReport)}\r\n                checked={!!store.active.allowStartDistributionContentReporting}\r\n                styles={this._classNames.subComponentStyles.checkbox}\r\n                onChange={(_, value) => onFormPublisherStartDistributionContentChanged(value)}\r\n                disabled={this._isDisabled(\r\n                  this.props.mode,\r\n                  publisherAccessPermissions === null ? completeAccess : publisherAccessPermissions.allowStartDistributionContentReporting\r\n                )}\r\n              />\r\n            )}\r\n            {hasReadAccess(publisherAccessPermissions === null ? completeAccess : publisherAccessPermissions.allowNativeReporting) && (\r\n              <Checkbox\r\n                label={formatMessage(messages.publisherAllowedFeaturesNativeReport)}\r\n                ariaLabel={formatMessage(messages.publisherAllowedFeaturesNativeReport)}\r\n                checked={!!store.active.allowNativeReporting}\r\n                styles={this._classNames.subComponentStyles.checkbox}\r\n                onChange={(_, value) => onFormPublisherNativeChanged(value)}\r\n                disabled={this._isDisabled(\r\n                  this.props.mode,\r\n                  publisherAccessPermissions === null ? completeAccess : publisherAccessPermissions.allowNativeReporting\r\n                )}\r\n              />\r\n            )}\r\n            {hasReadAccess(publisherAccessPermissions === null ? completeAccess : publisherAccessPermissions.allowSyndicationReporting) && (\r\n              <Checkbox\r\n                label={formatMessage(messages.publisherAllowedFeaturesSyndicationReport)}\r\n                ariaLabel={formatMessage(messages.publisherAllowedFeaturesSyndicationReport)}\r\n                checked={!!store.active.allowSyndicationReporting}\r\n                styles={this._classNames.subComponentStyles.checkbox}\r\n                onChange={(_, value) => onFormPublisherSyndicationChanged(value)}\r\n                disabled={this._isDisabled(\r\n                  this.props.mode,\r\n                  publisherAccessPermissions === null ? completeAccess : publisherAccessPermissions.allowSyndicationReporting\r\n                )}\r\n              />\r\n            )}\r\n            {hasReadAccess(publisherAccessPermissions === null ? completeAccess : publisherAccessPermissions.allowSelectTierReporting) && (\r\n              <Checkbox\r\n                label={formatMessage(messages.publisherAllowedFeaturesSelectTierReport)}\r\n                ariaLabel={formatMessage(messages.publisherAllowedFeaturesSelectTierReport)}\r\n                checked={!!store.active.allowSelectTierReporting}\r\n                styles={this._classNames.subComponentStyles.checkbox}\r\n                onChange={(_, value) => onFormPublisherSelectTierChanged(value)}\r\n                disabled={this._isDisabled(\r\n                  this.props.mode,\r\n                  publisherAccessPermissions === null ? completeAccess : publisherAccessPermissions.allowSelectTierReporting\r\n                )}\r\n              />\r\n            )}\r\n            {hasReadAccess(\r\n              publisherAccessPermissions === null ? completeAccess : publisherAccessPermissions.publisherAllowedFeaturesPropertyAutoApproved\r\n            ) && (\r\n              <Checkbox\r\n                label={formatMessage(messages.publisherAllowedFeaturesPropertyAutoApproved)}\r\n                ariaLabel={formatMessage(messages.publisherAllowedFeaturesPropertyAutoApproved)}\r\n                checked={!!store.active.propertyAutoApproved}\r\n                styles={this._classNames.subComponentStyles.checkbox}\r\n                onChange={(_, value) => onFormPublisherPropertyAutoChanged(value)}\r\n                disabled={this._isDisabled(\r\n                  this.props.mode,\r\n                  publisherAccessPermissions === null\r\n                    ? completeAccess\r\n                    : publisherAccessPermissions.publisherAllowedFeaturesPropertyAutoApproved\r\n                )}\r\n              />\r\n            )}\r\n            {hasReadAccess(\r\n              publisherAccessPermissions === null ? completeAccess : publisherAccessPermissions.allowPaidSearchReportingApi\r\n            ) && (\r\n              <Checkbox\r\n                label={formatMessage(messages.publisherAllowedFeaturesPaidSearchReportingApi)}\r\n                ariaLabel={formatMessage(messages.publisherAllowedFeaturesPaidSearchReportingApi)}\r\n                checked={!!store.active.allowPaidSearchReportingApi}\r\n                styles={this._classNames.subComponentStyles.checkbox}\r\n                onChange={(_, value) => onFormPublisherPSReportingAPIChanged(value)}\r\n                disabled={this._isDisabled(\r\n                  this.props.mode,\r\n                  publisherAccessPermissions === null ? completeAccess : publisherAccessPermissions.allowPaidSearchReportingApi\r\n                )}\r\n              />\r\n            )}\r\n            {hasReadAccess(\r\n              publisherAccessPermissions === null ? completeAccess : publisherAccessPermissions.allowPaidSearchReportingDashboard\r\n            ) && (\r\n              <Checkbox\r\n                label={formatMessage(messages.publisherAllowedFeaturesPaidSearchDashboard)}\r\n                ariaLabel={formatMessage(messages.publisherAllowedFeaturesPaidSearchDashboard)}\r\n                checked={!!store.active.allowPaidSearchReportingDashboard}\r\n                styles={this._classNames.subComponentStyles.checkbox}\r\n                onChange={(_, value) => onFormPublisherPSDashboardChanged(value)}\r\n                disabled={this._isDisabled(\r\n                  this.props.mode,\r\n                  publisherAccessPermissions === null ? completeAccess : publisherAccessPermissions.allowPaidSearchReportingDashboard\r\n                )}\r\n              />\r\n            )}\r\n            {hasReadAccess(\r\n              publisherAccessPermissions === null ? completeAccess : publisherAccessPermissions.allowDynamicPropertyRegistration\r\n            ) && (\r\n              <Checkbox\r\n                label={formatMessage(messages.publisherAllowedFeaturesDynamicSites)}\r\n                ariaLabel={formatMessage(messages.publisherAllowedFeaturesDynamicSites)}\r\n                checked={!!store.active.allowDynamicPropertyRegistration}\r\n                styles={this._classNames.subComponentStyles.checkbox}\r\n                onChange={(_, value) => onFormPublisherDynamicPropertyRegistrationChanged(value)}\r\n                disabled={this._isDisabled(\r\n                  this.props.mode,\r\n                  publisherAccessPermissions === null ? completeAccess : publisherAccessPermissions.allowDynamicPropertyRegistration\r\n                )}\r\n              />\r\n            )}\r\n            {hasReadAccess(publisherAccessPermissions === null ? completeAccess : publisherAccessPermissions.allowMediationReporting) && (\r\n              <Checkbox\r\n                label={formatMessage(messages.publisherAllowedFeaturesMediationReport)}\r\n                ariaLabel={formatMessage(messages.publisherAllowedFeaturesMediationReport)}\r\n                checked={!!store.active.allowMediationReporting}\r\n                styles={this._classNames.subComponentStyles.checkbox}\r\n                onChange={(_, value) => onFormPublisherMediationChanged(value)}\r\n                disabled={this._isDisabled(\r\n                  this.props.mode,\r\n                  publisherAccessPermissions === null ? completeAccess : publisherAccessPermissions.allowMediationReporting\r\n                )}\r\n              />\r\n            )}\r\n            {hasReadAccess(\r\n              publisherAccessPermissions === null ? completeAccess : publisherAccessPermissions.enableDefaultTythonV2Reporting\r\n            ) &&\r\n              store.active.publisherTier === PublisherTier.SelfServe3rdParty && (\r\n                <Checkbox\r\n                  label={formatMessage(messages.publisherEnableDefaultTythonV2Report)}\r\n                  ariaLabel={formatMessage(messages.publisherEnableDefaultTythonV2Report)}\r\n                  checked={!!store.active.enableDefaultTythonV2Reporting}\r\n                  styles={this._classNames.subComponentStyles.checkbox}\r\n                  onChange={(_, value) => onFormPublisherEnableDefaultTythonV2Changed(value)}\r\n                  disabled={this._isDisabled(\r\n                    this.props.mode,\r\n                    publisherAccessPermissions === null ? completeAccess : publisherAccessPermissions.enableDefaultTythonV2Reporting\r\n                  )}\r\n                />\r\n              )}\r\n          </FormItem>\r\n          {hasReadAccess(publisherAccessPermissions === null ? completeAccess : publisherAccessPermissions.ipRanges) && (\r\n            <FormItem formWidth={660}>\r\n              <FormLabel labelContent={formatMessage(messages.publisherIPAddress)} noInfoButton={true} intl={this.props.intl} />\r\n\r\n              {this._IPGrid(publisherAccessPermissions)}\r\n            </FormItem>\r\n          )}\r\n        </>\r\n      );\r\n    };\r\n\r\n    private _createAccount = (publisherAccessPermissions: PublisherAccessPermissions | null): JSX.Element => {\r\n      const { formatMessage } = this.props.intl;\r\n      const store = getStore();\r\n      const CURRENCY = CURRENCIES_LANGUAGE_MAPPING[getAppStore().locale];\r\n\r\n      return (\r\n        <>\r\n          <span>{formatMessage(messages.createAnAccountInfo)}</span>\r\n          <FormItem formWidth={440}>\r\n            <TextField\r\n              label={formatMessage(messages.accountName)}\r\n              ariaLabel={formatMessage(messages.accountName)}\r\n              required={true}\r\n              errorMessage={store.errors.accountName}\r\n              onChange={(_, value) => onFormPublisherAccountName(value!)}\r\n              disabled={this._isDisabled(\r\n                this.props.mode,\r\n                publisherAccessPermissions === null ? completeAccess : publisherAccessPermissions.newAccount\r\n              )}\r\n            />\r\n          </FormItem>\r\n          <FormItem>\r\n            <ComboBox\r\n              useComboBoxAsMenuWidth={true}\r\n              autoComplete=\"on\"\r\n              label={formatMessage(AppMessages.language)}\r\n              options={this._createLanguageDropDown(store.active.accountAvailableLanguages!)}\r\n              selectedKey={store.active.accountLanguage}\r\n              required={true}\r\n              errorMessage={store.errors.accountLanguage}\r\n              onChange={(_, value) => onFormPublisherAccountLanguage(value!)}\r\n              disabled={this._isDisabled(\r\n                this.props.mode,\r\n                publisherAccessPermissions === null ? completeAccess : publisherAccessPermissions.newAccount\r\n              )}\r\n              tabIndex={\r\n                this._isDisabled(\r\n                  this.props.mode,\r\n                  publisherAccessPermissions === null ? completeAccess : publisherAccessPermissions.newAccount\r\n                )\r\n                  ? -1\r\n                  : undefined\r\n              }\r\n            />\r\n          </FormItem>\r\n          <FormItem>\r\n            <ComboBox\r\n              useComboBoxAsMenuWidth={true}\r\n              autoComplete=\"on\"\r\n              label={formatMessage(AppMessages.countryOrRegion)}\r\n              options={this._createCountryDropDown(store.active.availableCountries!)}\r\n              selectedKey={store.active.accountCountry}\r\n              required={true}\r\n              errorMessage={store.errors.accountCountry}\r\n              onChange={(_, value) => onFormPublisherAccountCountry(value!)}\r\n              disabled={this._isDisabled(\r\n                this.props.mode,\r\n                publisherAccessPermissions === null ? completeAccess : publisherAccessPermissions.newAccount\r\n              )}\r\n              tabIndex={\r\n                this._isDisabled(\r\n                  this.props.mode,\r\n                  publisherAccessPermissions === null ? completeAccess : publisherAccessPermissions.newAccount\r\n                )\r\n                  ? -1\r\n                  : undefined\r\n              }\r\n            />\r\n          </FormItem>\r\n          <FormItem>\r\n            <TextField\r\n              label={formatMessage(AppMessages.currency)}\r\n              ariaLabel={formatMessage(AppMessages.currency)}\r\n              required={true}\r\n              value={store.active.accountCountry && CURRENCY[countryToCurrencyMap[store.active.accountCountry]]}\r\n              placeholder=\"\"\r\n              disabled={this._isDisabled(\r\n                this.props.mode,\r\n                publisherAccessPermissions === null ? completeAccess : publisherAccessPermissions.newAccount\r\n              )}\r\n              // onChange={(_, value) => onFormPublisherAccountCurrency(value!!)}\r\n              errorMessage={store.errors.accountCurrency}\r\n            />\r\n          </FormItem>\r\n          <FormItem formWidth={440}>\r\n            <Dropdown\r\n              label={formatMessage(AppMessages.timezoneLabel)}\r\n              ariaLabel={formatMessage(AppMessages.timezoneLabel)}\r\n              required={true}\r\n              options={this._createTimezoneDropDown(store.active.availableTimezones!)}\r\n              defaultSelectedKey={store.active.accountTimezoneId}\r\n              onChange={(_, value) => onFormPublisherAccountTimezoneChanged(value!)}\r\n              disabled={this._isDisabled(\r\n                this.props.mode,\r\n                publisherAccessPermissions === null ? completeAccess : publisherAccessPermissions.newAccount\r\n              )}\r\n            />\r\n          </FormItem>\r\n        </>\r\n      );\r\n    };\r\n\r\n    private _createIPAddress = (\r\n      data: IPRange[] | null,\r\n      mode: FormState,\r\n      publisherAccessPermissions: PublisherAccessPermissions | null\r\n    ): JSX.Element => {\r\n      const { formatMessage } = this.props.intl;\r\n      const store = getStore();\r\n\r\n      return (\r\n        <DetailPage\r\n          titleLabel={formatMessage(mode === FormState.InPageEdit ? messages.IPAddressEditTitle : messages.IPAddressCreateTitle)}\r\n          helpId={'pop_PCv4_IPAddressCreate'}\r\n          submitLabel={formatMessage(mode === FormState.InPageEdit ? messages.IPAddressEditTitle : messages.IPAddressCreateTitle)}\r\n          onSubmit={() => {\r\n            onFormPublisherIpChanged(data ? data : [], mode);\r\n          }}\r\n          onCancel={() => {\r\n            onPanelCleared();\r\n            onPanelOpenChanged(false);\r\n          }}\r\n          saving={getAppStore().saving}\r\n          pageMode={mode}\r\n        >\r\n          <FormItem formWidth={440}>\r\n            <TextField\r\n              label={formatMessage(messages.IPAddressRangeName)}\r\n              ariaLabel={formatMessage(messages.IPAddressRangeName)}\r\n              required={true}\r\n              value={store.active.ipAddressName}\r\n              errorMessage={store.errors.ipAddressName}\r\n              onChange={(_, value) => onFormPublisherIpNameChanged(value)}\r\n              disabled={this._isDisabled(\r\n                this.props.mode,\r\n                publisherAccessPermissions === null ? completeAccess : publisherAccessPermissions.ipRanges\r\n              )}\r\n            />\r\n          </FormItem>\r\n          <FormItem>\r\n            <TextField\r\n              label={formatMessage(messages.IPAddressMinimum)}\r\n              ariaLabel={formatMessage(messages.IPAddressMinimum)}\r\n              required={true}\r\n              value={store.active.minIPAddress}\r\n              errorMessage={store.errors.minIPAddress}\r\n              onChange={(_, value) => onFormPublisherMinimumIpChanged(value)}\r\n              disabled={this._isDisabled(\r\n                this.props.mode,\r\n                publisherAccessPermissions === null ? completeAccess : publisherAccessPermissions.ipRanges\r\n              )}\r\n            />\r\n          </FormItem>\r\n          <FormItem>\r\n            <TextField\r\n              label={formatMessage(messages.IPAddressMaximum)}\r\n              ariaLabel={formatMessage(messages.IPAddressMaximum)}\r\n              required={true}\r\n              value={store.active.maxIPAddress}\r\n              errorMessage={store.errors.maxIPAddress}\r\n              onChange={(_, value) => onFormPublisherMaximumIpChanged(value)}\r\n              disabled={this._isDisabled(\r\n                this.props.mode,\r\n                publisherAccessPermissions === null ? completeAccess : publisherAccessPermissions.ipRanges\r\n              )}\r\n            />\r\n          </FormItem>\r\n        </DetailPage>\r\n      );\r\n    };\r\n\r\n    private _IPGrid = (publisherAccessPermissions: PublisherAccessPermissions | null): JSX.Element => {\r\n      const { formatMessage } = this.props.intl;\r\n      const store = getStore();\r\n      const appStore = getAppStore();\r\n\r\n      const _gridDefaultColumns: IDataGridColumn[] = [\r\n        { columnName: 'name', friendlyName: 'Name', isVisible: true },\r\n        { columnName: 'minIPAddress', friendlyName: 'Minimum IP address', isVisible: true },\r\n        { columnName: 'maxIPAddress', friendlyName: 'Maximum IP address', isVisible: true },\r\n      ];\r\n      const _commandBarProps: IDataGridCommandBarProps = {\r\n        items: [\r\n          {\r\n            key: 'new',\r\n            name: formatMessage(messages.publisherIPAddressRange),\r\n            iconProps: {\r\n              iconName: 'Add',\r\n              ariaLabel: 'Add',\r\n            },\r\n            onClick: () => {\r\n              this.setState({ ipPanelFormState: FormState.InPageCreate });\r\n              onPanelOpenChanged(true);\r\n            },\r\n            selectionModes: [DataGridSelectionMode.None],\r\n            ariaDescription: formatMessage(gridPageMessages.createCmdbtnAriaDesc, {\r\n              label: formatMessage(messages.publisherIPAddressRange),\r\n            }),\r\n          },\r\n          {\r\n            key: 'edit',\r\n            name: formatMessage(AppMessages.edit),\r\n            iconProps: {\r\n              iconName: 'Edit',\r\n              ariaLabel: 'Edit',\r\n            },\r\n            onClick: () => {\r\n              const item = this._getSelectionItems();\r\n              if (item && item[0]) {\r\n                onFormPublisherIpNameChanged(item[0].name!.toString());\r\n                onFormPublisherMinimumIpChanged(item[0].minIPAddress);\r\n                onFormPublisherMaximumIpChanged(item[0].maxIPAddress);\r\n              }\r\n              this.setState({ ipPanelFormState: FormState.InPageEdit });\r\n              onPanelOpenChanged(true);\r\n            },\r\n            selectionModes: [DataGridSelectionMode.Single],\r\n            ariaDescription: formatMessage(gridPageMessages.editCmdBtnAriaDesc),\r\n          },\r\n          {\r\n            key: 'delete',\r\n            name: formatMessage(AppMessages.delete),\r\n            onClick: () => {\r\n              const item = this._getSelectionItems();\r\n              onFormPublisherIpChanged(item ? item : [], FormState.Delete);\r\n            },\r\n            iconProps: {\r\n              iconName: 'Delete',\r\n              ariaLabel: 'Delete',\r\n            },\r\n            selectionModes: [DataGridSelectionMode.Single],\r\n            ariaDescription: formatMessage(gridPageMessages.deleteCmdBtnAriaDesc),\r\n          },\r\n        ],\r\n      };\r\n      return (\r\n        <div className={this._classNames.ipGrid}>\r\n          <DataGrid\r\n            intl={this.props.intl}\r\n            helpInfo={appStore.helpInfo}\r\n            componentRef={this._datagrid}\r\n            commandBarProps={_commandBarProps}\r\n            dataIsLoading={false}\r\n            detailListProps={{\r\n              items: store.active.ipAddressGrid !== undefined ? store.active.ipAddressGrid : [],\r\n              columns: _gridDefaultColumns,\r\n            }}\r\n          />\r\n        </div>\r\n      );\r\n    };\r\n\r\n    private _getSelectionItems() {\r\n      if (this._datagrid.current) {\r\n        const currentSelection = this._datagrid.current.getSelection();\r\n        const selectedIndices = currentSelection.getSelectedIndices();\r\n        const items = currentSelection.getItems();\r\n\r\n        const selectedItems: IPRange[] = [];\r\n        selectedIndices.map((selectedIndex) => selectedItems.push(items[selectedIndex] as IPRange));\r\n        return selectedItems;\r\n      }\r\n      return null;\r\n    }\r\n\r\n    private _createCountryDropDown(countries: string[]): IComboBoxOption[] {\r\n      const availableCountrys: IComboBoxOption[] = [];\r\n      const countriesWithLocalLang = COUNTRIES_LANGUAGE_MAPPING[getAppStore().locale];\r\n\r\n      if (countries) {\r\n        countries.forEach((countryCode) => {\r\n          if (countriesWithLocalLang[countryCode]) {\r\n            availableCountrys!.push({\r\n              key: countryCode,\r\n              text: countriesWithLocalLang[countryCode],\r\n            });\r\n          }\r\n        });\r\n      }\r\n      availableCountrys.sort((a, b) => {\r\n        const firstValue = a.text;\r\n        const secondValue = b.text;\r\n\r\n        return firstValue.toLowerCase() > secondValue.toLowerCase() ? 1 : -1;\r\n      });\r\n      return availableCountrys;\r\n    }\r\n\r\n    private _createTimezoneDropDown(timezones: number[]): IDropdownOption[] {\r\n      const availableTimezones: IDropdownOption[] = [];\r\n      const TIMEZONE = TIMEZONE_LANGUAGE_MAPPING[getAppStore().locale];\r\n\r\n      if (timezones) {\r\n        timezones.forEach((timezoneId) => {\r\n          if (TIMEZONE[timezoneId]) {\r\n            availableTimezones!.push({\r\n              key: timezoneId,\r\n              text: TIMEZONE[timezoneId],\r\n            });\r\n          }\r\n        });\r\n      }\r\n\r\n      return availableTimezones;\r\n    }\r\n\r\n    private _createStateOrProvinceDropDown(states: ISubGeography[]): IComboBoxOption[] {\r\n      const availableStates: IComboBoxOption[] = [];\r\n      if (states) {\r\n        states.forEach((stateOrProvince) => {\r\n          availableStates!.push({\r\n            key: stateOrProvince.code,\r\n            text: stateOrProvince.name,\r\n          });\r\n        });\r\n      }\r\n      availableStates.sort((a, b) => {\r\n        const firstValue = a.text;\r\n        const secondValue = b.text;\r\n\r\n        return firstValue.toLowerCase() > secondValue.toLowerCase() ? 1 : -1;\r\n      });\r\n      return availableStates;\r\n    }\r\n\r\n    private _createLanguageDropDown(languages: string[]): IComboBoxOption[] {\r\n      const availableLanguages: IComboBoxOption[] = [];\r\n      const LANGUAGES = LANGUAGES_LANGUAGE_MAPPING[getAppStore().locale];\r\n\r\n      if (languages) {\r\n        languages.forEach((languageCode) => {\r\n          if (LANGUAGES[languageCode]) {\r\n            availableLanguages!.push({\r\n              key: languageCode,\r\n              text: LANGUAGES[languageCode],\r\n            });\r\n          }\r\n        });\r\n      }\r\n\r\n      return availableLanguages;\r\n    }\r\n\r\n    private _onSubmit = (mode: FormState, publisherId?: string): void => {\r\n      this.setState({ initializeForm: false });\r\n      if (mode === FormState.Create) {\r\n        onFormCreated(this.props.history);\r\n      } else if (mode === FormState.Edit) {\r\n        onFormEditted(this.props.history);\r\n      }\r\n    };\r\n\r\n    private _onCancel = (publisherId?: string): void => {\r\n      this.setState({ initializeForm: false });\r\n      onFormCancelled();\r\n      const returnUrl = createReturnUrl(RouteName.publisher, publisherId);\r\n      onNavigateBack(this.props.history, returnUrl);\r\n    };\r\n\r\n    private _getPublisherAccessPermission(): PublisherAccessPermissions | null {\r\n      const userRoles = localStorage.getItem(userRoleKey);\r\n      if (userRoles === null) {\r\n        return null;\r\n      }\r\n      const userRolesJSON = JSON.parse(userRoles);\r\n\r\n      for (const value in userRolesJSON) {\r\n        if (value === UserRoleEntity.Publisher) {\r\n          return JSON.parse(userRolesJSON[value]);\r\n        }\r\n      }\r\n\r\n      return null;\r\n    }\r\n\r\n    private _isDisabled(mode: FormState, permission: number): boolean {\r\n      if (mode === FormState.Create || mode === FormState.InPageCreate) {\r\n        return false;\r\n      }\r\n\r\n      return !hasUpdateAccess(permission);\r\n    }\r\n  }\r\n);\r\n","import { defineMessages } from 'react-intl';\r\n\r\nexport default defineMessages({\r\n  create: {\r\n    id: 'publisher.create',\r\n    defaultMessage: 'Create publisher',\r\n  },\r\n  deactivateTitle: {\r\n    id: 'publisher.deactivateTitle',\r\n    defaultMessage: 'Do you want to deactivate publisher(s)?',\r\n  },\r\n  notFound: {\r\n    id: 'publisher.notFound',\r\n    defaultMessage: 'No publishers found, create one.',\r\n  },\r\n  name: {\r\n    id: 'publisher.name',\r\n    defaultMessage: 'Publisher name',\r\n  },\r\n  id: {\r\n    id: 'publisher.id',\r\n    defaultMessage: 'Publisher ID',\r\n  },\r\n  impressions: {\r\n    id: 'publisher.impressions',\r\n    defaultMessage: 'Impressions prev.month',\r\n  },\r\n  accountNumber: {\r\n    id: 'publisher.accountNumber',\r\n    defaultMessage: '# of accounts',\r\n  },\r\n  status: {\r\n    id: 'publisher.status',\r\n    defaultMessage: 'Status',\r\n  },\r\n  joinDate: {\r\n    id: 'publisher.joinDate',\r\n    defaultMessage: 'Join date',\r\n  },\r\n  noPublisherSelected: {\r\n    id: 'publisher.noPublisherSelected',\r\n    defaultMessage: 'A publisher isn’t selected yet. To start managing publishers, search for a publisher',\r\n  },\r\n  actions: {\r\n    id: 'publisher.actions',\r\n    defaultMessage: 'Actions',\r\n  },\r\n  zeroResultTitle: {\r\n    id: 'publisher.zeroResultTitle',\r\n    defaultMessage: 'No publishers yet',\r\n  },\r\n  zeroResultDescription: {\r\n    id: 'publisher.zeroResultDescription',\r\n    defaultMessage: 'You haven’t created any publishers yet',\r\n  },\r\n});\r\n","import { Model, getAppStore } from '../../../../../@data';\r\nimport { CommandBarActions, IBuildCommandBarProps } from '../../../../../layout/GridPageV2';\r\nimport { getStore } from '../../@data/store';\r\nimport messages from '../ManagePage.messages';\r\n\r\nexport function getCommandBarItems(): IBuildCommandBarProps<Model> | undefined {\r\n  const { publisher } = getAppStore();\r\n  const { publishers, isLoading } = getStore();\r\n\r\n  const commandBarItems: IBuildCommandBarProps<Model> | undefined =\r\n    (publishers && publishers.length !== 0 && publisher) || isLoading\r\n      ? {\r\n          primaryButtonLabel: messages.create,\r\n          includeActions: [CommandBarActions.new],\r\n          includeFarActions: [\r\n            CommandBarActions.searchBox,\r\n            CommandBarActions.edit,\r\n            CommandBarActions.deactivate,\r\n            CommandBarActions.download,\r\n            CommandBarActions.modifyColumns,\r\n          ],\r\n          deactivateLabels: {\r\n            title: messages.deactivateTitle,\r\n          },\r\n        }\r\n      : undefined;\r\n\r\n  return commandBarItems;\r\n}\r\n","import { SelectionMode } from '@fluentui/react';\r\nimport * as React from 'react';\r\nimport { useEffect } from 'react';\r\nimport { getAppStore, Publisher } from '../../../../@data';\r\nimport AppMessages from '../../../../App.messages';\r\nimport { ZeroResults } from '../../../../components/ZeroResults/ZeroResults';\r\nimport { useWindowSize } from '../../../../hooks';\r\nimport { getStore as getWindowSizeStore } from '../../../../hooks/useWindowSize/store/store';\r\nimport { GridPageLayout } from '../../../../layout/GridPageLayout/GridPageLayout';\r\nimport { GridV2, IGridV2Column } from '../../../../layout/GridPageV2';\r\nimport { RoutePrefix } from '../../../../Routes';\r\nimport { injectIntlWithObserver, IRouterWithIntl } from '../../../../utils/ReactUtils';\r\nimport { RouteName } from '../../@data';\r\nimport { onManagePageInitialized, onPublishersFetched } from '../@data/actions';\r\nimport { getStore } from '../@data/store';\r\nimport messages from './ManagePage.messages';\r\nimport { getCommandBarItems } from './utils/getCommandBarItems';\r\nimport { getGridColumns } from './utils/getGridColumns';\r\n\r\nexport const ManagePage = injectIntlWithObserver(function PublisherManagePage(props: IRouterWithIntl) {\r\n  const { publisher } = getAppStore();\r\n  const { publishers, isLoading, isFetchingData } = getStore();\r\n  const { formatMessage } = props.intl;\r\n  const { windowStoreSerializer } = useWindowSize();\r\n  const { isWindowRegularSize } = windowStoreSerializer(getWindowSizeStore());\r\n  const gridDefaultColumns: IGridV2Column[] = getGridColumns(formatMessage, isWindowRegularSize, props.history);\r\n\r\n  const NoResultComponent = (\r\n    <ZeroResults\r\n      showDefaultImage\r\n      title={!!publisher ? formatMessage(messages.zeroResultTitle) : undefined}\r\n      description={formatMessage(!!publisher ? messages.zeroResultDescription : messages.noPublisherSelected)}\r\n      buttonText={formatMessage(messages.create)}\r\n      onButtonClick={!!publisher ? () => props.history.push(`${RoutePrefix.partnerManagement}/${RouteName.publisher}/create`) : undefined}\r\n    />\r\n  );\r\n\r\n  useEffect(() => {\r\n    onManagePageInitialized();\r\n    // eslint-disable-next-line\r\n  }, [publisher]);\r\n\r\n  return (\r\n    <GridPageLayout>\r\n      <GridV2\r\n        history={props.history}\r\n        location={props.location}\r\n        match={props.match}\r\n        entity={Publisher}\r\n        pageTitle={{ title: formatMessage(AppMessages.publishers), helpId: 'pop_PCv4_Publishers' }}\r\n        commandBarProps={getCommandBarItems()}\r\n        dataGridProps={{\r\n          gridV2Columns: gridDefaultColumns,\r\n          data: publisher ? publishers || [] : [],\r\n          setData: onPublishersFetched,\r\n          shimmerLines: 10,\r\n          selectionMode: SelectionMode.single,\r\n          renderZeroItemsComponent: NoResultComponent,\r\n        }}\r\n        isGridReady={!isLoading}\r\n        isDataLoading={isFetchingData}\r\n        paginationProps={{\r\n          shouldGridHandlePagination: true,\r\n        }}\r\n      />\r\n    </GridPageLayout>\r\n  );\r\n});\r\n","import { CommandBarButton } from '@fluentui/react';\r\nimport React from 'react';\r\nimport { Publisher, getAccessPermission, getAppStore } from '../../../../../@data';\r\nimport { hasUpdateAccess } from '../../../../../@data/services/UserRoleService';\r\nimport AppMessages from '../../../../../App.messages';\r\nimport { IGridV2Column } from '../../../../../layout/GridPageV2';\r\nimport messages from '../ManagePage.messages';\r\n\r\nexport function getGridColumns(formatMessage, isWindowRegularSize, routeHistory): IGridV2Column[] {\r\n  const { publisher } = getAppStore();\r\n\r\n  const columns: IGridV2Column[] = [\r\n    {\r\n      columnOrder: 1,\r\n      key: 'name',\r\n      fieldName: 'name',\r\n      name: formatMessage(messages.name),\r\n      minWidth: 200,\r\n      maxWidth: 200,\r\n      isSearchable: true,\r\n      isVisible: true,\r\n      isExportable: true,\r\n      isResizable: true,\r\n      suppressSorting: false,\r\n    },\r\n    {\r\n      columnOrder: 2,\r\n      key: 'id',\r\n      fieldName: 'id',\r\n      name: formatMessage(messages.id),\r\n      minWidth: 150,\r\n      maxWidth: 150,\r\n      isSearchable: true,\r\n      isVisible: true,\r\n      isExportable: true,\r\n      isResizable: true,\r\n    },\r\n    {\r\n      columnOrder: 3,\r\n      key: 'status',\r\n      fieldName: 'status',\r\n      name: formatMessage(AppMessages.status),\r\n      minWidth: 150,\r\n      maxWidth: 150,\r\n      isSearchable: true,\r\n      isVisible: true,\r\n      isExportable: true,\r\n    },\r\n    {\r\n      columnOrder: 4,\r\n      key: 'actions',\r\n      name: formatMessage(messages.actions),\r\n      minWidth: 150,\r\n      maxWidth: 150,\r\n      isPadded: true,\r\n      isSearchable: true,\r\n      isVisible: true,\r\n      suppressSorting: true,\r\n      onRender: (item: Publisher) => {\r\n        const accessPermission = getAccessPermission(item);\r\n\r\n        return (\r\n          <CommandBarButton\r\n            id={`adunitCallout-${item.id}`}\r\n            styles={{ root: { background: 'transparent' } }}\r\n            iconProps={{ iconName: 'edit' }}\r\n            ariaLabel={formatMessage(AppMessages.edit)}\r\n            text={isWindowRegularSize ? formatMessage(AppMessages.edit) : ''}\r\n            disabled={!hasUpdateAccess(accessPermission) || publisher === undefined}\r\n            onClick={() => routeHistory.push(`/partner-management/${publisher?.id}/publisher/edit/${item.id}`)}\r\n          />\r\n        );\r\n      },\r\n    },\r\n  ];\r\n\r\n  return columns;\r\n}\r\n","import * as React from 'react';\r\nimport { InjectedIntlProps, injectIntl } from 'react-intl';\r\nimport { Route, RouteComponentProps } from 'react-router-dom';\r\nimport { RoutePrefix } from '../../../Routes';\r\nimport { FormState } from '../../../components/Form';\r\nimport { RouteName } from '../@data';\r\nimport { onCurrentRouteChanged } from '../@data/actions';\r\nimport '../@data/orchestrators';\r\nimport './@data/mutators';\r\nimport './@data/orchestrators';\r\nimport { CreatePublisher } from './Create/CreatePublisher';\r\nimport { ManagePage } from './Manage/ManagePage';\r\n\r\nexport const PublisherPage = injectIntl(function PublisherPageComponent({\r\n  match,\r\n  intl,\r\n}: RouteComponentProps & InjectedIntlProps): JSX.Element {\r\n  React.useEffect(() => {\r\n    onCurrentRouteChanged(RouteName.publisher, intl.formatMessage);\r\n    // eslint-disable-next-line react-hooks/exhaustive-deps\r\n  }, []);\r\n\r\n  return (\r\n    <React.Fragment>\r\n      <Route exact path={`${match.url}`} component={ManagePage} />\r\n      <Route path={`${match.url}/create`} render={(props) => <CreatePublisher {...props} mode={FormState.Create} />} />\r\n      <Route\r\n        path={`/${RoutePrefix.partnerManagement}/:publisherId/${RouteName[RouteName.publisher]}/edit/:id`}\r\n        render={(props) => <CreatePublisher {...props} mode={FormState.Edit} />}\r\n      />\r\n    </React.Fragment>\r\n  );\r\n});\r\n","import { IAccountRoleStyleProps, IAccountRoleStyles } from './AccountRole.types';\r\n\r\nexport const getStyles = (props: IAccountRoleStyleProps): IAccountRoleStyles => {\r\n  return {\r\n    option: {\r\n      display: 'flex',\r\n      flexDirection: 'row'\r\n    },\r\n    optionTitle: {\r\n      width: 220\r\n    }\r\n  };\r\n};\r\n","import { ChoiceGroup, classNamesFunction, getTheme, IProcessedStyleSet } from '@fluentui/react';\r\nimport * as React from 'react';\r\nimport { injectIntl } from 'react-intl';\r\nimport { IIdNamePair, MultiSelectPicker } from '../../../../components/MultiSelectPicker';\r\nimport { getStore } from '../@data';\r\nimport messages from '../UserPage.messages';\r\nimport { getStyles } from './AccountRole.styles';\r\nimport { IAccountRoleProps, IAccountRoleStyleProps, IAccountRoleStyles } from './AccountRole.types';\r\n\r\nconst getClassNames = classNamesFunction<IAccountRoleStyleProps, IAccountRoleStyles>();\r\n\r\nexport const AccountRole = injectIntl(\r\n  class extends React.Component<IAccountRoleProps> {\r\n    private _classNames: IProcessedStyleSet<IAccountRoleStyles>;\r\n    public render() {\r\n      this._classNames = getClassNames(getStyles, { theme: getTheme() });\r\n      const { formatMessage } = this.props.intl;\r\n      const { defaultSelectedKey, onChange } = this.props;\r\n      const { active } = getStore();\r\n\r\n      let initialSelectedItems: IIdNamePair[] | undefined;\r\n      let isAccountLevelRole = false;\r\n      switch (defaultSelectedKey) {\r\n        case 'AccountManager':\r\n          initialSelectedItems = active.AccountManagerAccountsSelected;\r\n          isAccountLevelRole = true;\r\n          break;\r\n        case 'ReportUser':\r\n          initialSelectedItems = active.ReportUserAccounstSelected;\r\n          isAccountLevelRole = true;\r\n          break;\r\n        case 'AdViewer':\r\n          initialSelectedItems = active.AdViewAccountsSelected;\r\n          isAccountLevelRole = true;\r\n          break;\r\n        case 'ListManager':\r\n          initialSelectedItems = active.ListManagerAccountsSelected;\r\n          isAccountLevelRole = true;\r\n          break;\r\n        default:\r\n          initialSelectedItems = undefined;\r\n      }\r\n      return (\r\n        <>\r\n          <ChoiceGroup\r\n            label={formatMessage(messages.accountRole)}\r\n            required={true}\r\n            options={[\r\n              {\r\n                key: 'AccountManager',\r\n                text: formatMessage(messages.accountManager),\r\n                ariaLabel: formatMessage(messages.accountManager),\r\n                onRenderField: (props, render) => {\r\n                  return (\r\n                    <div className={this._classNames.option}>\r\n                      <div className={this._classNames.optionTitle}>{render!(props)}</div>\r\n                      <span>{formatMessage(messages.accountManagerDescription)}</span>\r\n                    </div>\r\n                  );\r\n                },\r\n              },\r\n              {\r\n                key: 'ReportUser',\r\n                text: formatMessage(messages.reportUser),\r\n                ariaLabel: formatMessage(messages.reportUser),\r\n                onRenderField: (props, render) => {\r\n                  return (\r\n                    <div className={this._classNames.option}>\r\n                      <div className={this._classNames.optionTitle}>{render!(props)}</div>\r\n                      <span>{formatMessage(messages.reportUserDescription)}</span>\r\n                    </div>\r\n                  );\r\n                },\r\n              },\r\n              {\r\n                key: 'ListManager',\r\n                text: formatMessage(messages.listManager),\r\n                ariaLabel: formatMessage(messages.listManager),\r\n                onRenderField: (props, render) => {\r\n                  return (\r\n                    <div className={this._classNames.option}>\r\n                      <div className={this._classNames.optionTitle}>{render!(props)}</div>\r\n                      <span>{formatMessage(messages.listManagerDescription)}</span>\r\n                    </div>\r\n                  );\r\n                },\r\n              },\r\n              {\r\n                key: 'AdViewer',\r\n                text: formatMessage(messages.adViewer),\r\n                ariaLabel: formatMessage(messages.adViewer),\r\n                onRenderField: (props, render) => {\r\n                  return (\r\n                    <div className={this._classNames.option}>\r\n                      <div className={this._classNames.optionTitle}> {render!(props)}</div>\r\n                      <span>{formatMessage(messages.adViewerDescription)}</span>\r\n                    </div>\r\n                  );\r\n                },\r\n              },\r\n              {\r\n                key: 'PublisherAdmin',\r\n                text: formatMessage(messages.administrator),\r\n                ariaLabel: formatMessage(messages.administrator),\r\n                onRenderField: (props, render) => {\r\n                  return (\r\n                    <div className={this._classNames.option}>\r\n                      <div className={this._classNames.optionTitle}>{render!(props)}</div>\r\n                      <span>{formatMessage(messages.administratorDescription)}</span>\r\n                    </div>\r\n                  );\r\n                },\r\n              },\r\n              {\r\n                key: 'SuperAdmin',\r\n                text: formatMessage(messages.superAdmin),\r\n                ariaLabel: formatMessage(messages.superAdmin),\r\n                onRenderField: (props, render) => {\r\n                  return (\r\n                    <div className={this._classNames.option}>\r\n                      <div className={this._classNames.optionTitle}>{render!(props)}</div>\r\n                      <span>{formatMessage(messages.superAdminDescription)}</span>\r\n                    </div>\r\n                  );\r\n                },\r\n              },\r\n            ]}\r\n            selectedKey={defaultSelectedKey || 'AdViewer'}\r\n            onChange={onChange}\r\n          />\r\n          {isAccountLevelRole && (\r\n            <MultiSelectPicker\r\n              {...this.props}\r\n              ariaDescription={formatMessage(messages.accountMultiSelectPickerAriaDesc)}\r\n              items={this.props.accountList || []}\r\n              disabled={false}\r\n              initialSelectedItems={initialSelectedItems}\r\n              errorMessage={this.props.errorMessage}\r\n              onSelectedItems={(items) => this.props.onSelectedItems(items)}\r\n            />\r\n          )}\r\n        </>\r\n      );\r\n    }\r\n  }\r\n);\r\n","import { IPubcenterSpacing } from '../../../../../theme';\r\nimport { IInviteUserStyleProps, IInviteUserStyles } from './InviteUser.types';\r\n\r\nexport const getStyles = (props: IInviteUserStyleProps): IInviteUserStyles => {\r\n  const { theme } = props;\r\n  const spacing = theme.spacing as IPubcenterSpacing;\r\n\r\n  return {\r\n    subComponentStyles: {\r\n      checkbox: {\r\n        root: {\r\n          marginBottom: spacing.size8\r\n        }\r\n      }\r\n    }\r\n  };\r\n};\r\n","import { Checkbox, classNamesFunction, ComboBox, getTheme, IComboBoxOption, IProcessedStyleSet, TextField } from '@fluentui/react';\r\nimport * as React from 'react';\r\nimport { getAppStore, onHelpInfoCalloutOpened, onHelpInfoChanged, onNavigateBack } from '../../../../@data';\r\nimport { FormItem, FormState } from '../../../../components/Form';\r\nimport { FormLabel } from '../../../../components/Form/FormLabel';\r\nimport { userLocales } from '../../../../config/locale';\r\n\r\nimport { LOCALE_LANGUAGE_MAPPING } from '../../../../globalization';\r\nimport { DetailPage } from '../../../../layout/DetailPage/DetailPage';\r\nimport { injectIntlWithObserver } from '../../../../utils';\r\nimport { RouteName } from '../../@data';\r\nimport { createReturnUrl } from '../../@data/service/PartnerManagementService';\r\nimport { getStore } from '../@data';\r\nimport {\r\n  onFormAccountRoleChanged,\r\n  onFormCancelled,\r\n  onFormEmailAddressChanged,\r\n  onFormFirstNameChanged,\r\n  onFormInitialized,\r\n  onFormLastNameChanged,\r\n  onFormRoleAccountListChanged,\r\n  onFormSubmitted,\r\n  onFormUserLocaleChanged,\r\n  onFormUsernameChanged,\r\n} from '../@data/actions';\r\nimport { AccountRole } from '../AccountRole/AccountRole';\r\nimport messages from '../UserPage.messages';\r\nimport { getStyles } from './InviteUser.styles';\r\nimport { IFormInitializationState, IInviteUserProps, IInviteUserStyleProps, IInviteUserStyles } from './InviteUser.types';\r\n\r\nconst getClassNames = classNamesFunction<IInviteUserStyleProps, IInviteUserStyles>();\r\n\r\nexport const InviteUser = injectIntlWithObserver(\r\n  class extends React.Component<IInviteUserProps, IFormInitializationState> {\r\n    private _classNames: IProcessedStyleSet<IInviteUserStyles>;\r\n    constructor(props: IInviteUserProps) {\r\n      super(props);\r\n      this.state = {\r\n        initializeForm: true,\r\n      };\r\n    }\r\n\r\n    public componentDidMount() {\r\n      const publisherId = this.props.match.params.publisherId;\r\n      const entityId = this.props.match.params.id;\r\n      this.setState({ id: entityId });\r\n      if (publisherId) {\r\n        onFormInitialized(this.props.mode, publisherId, entityId);\r\n      }\r\n    }\r\n\r\n    public componentDidUpdate() {\r\n      const publisherId = this.props.match.params.publisherId;\r\n      const entityId = this.props.match.params.id;\r\n      if (this.state.initializeForm && this.state.id !== entityId) {\r\n        this.setState({ id: entityId });\r\n        if (publisherId) {\r\n          onFormInitialized(this.props.mode, publisherId, entityId);\r\n        }\r\n      }\r\n    }\r\n\r\n    public render(): JSX.Element {\r\n      const { formatMessage } = this.props.intl;\r\n      const theme = getTheme();\r\n      this._classNames = getClassNames(getStyles, { theme });\r\n\r\n      const publisherId = this.props.match.params.publisherId;\r\n      const store = getStore();\r\n      const helpInfo = getAppStore().helpInfo;\r\n      return (\r\n        <DetailPage\r\n          titleLabel={this.props.mode === FormState.Edit ? formatMessage(messages.editPageTitle) : formatMessage(messages.createPageTitle)}\r\n          helpId={'pop_PCv4_UserInvite'}\r\n          submitLabel={formatMessage(this.props.mode === FormState.Edit ? messages.updateUser : messages.createPageTitle)}\r\n          onSubmit={() => this._onSubmit(publisherId)}\r\n          onCancel={() => this._onCancel(publisherId)}\r\n          onNavClick={() => this._onCancel(publisherId)}\r\n          saving={getAppStore().saving}\r\n          pageMode={this.props.mode}\r\n        >\r\n          <>\r\n            <FormItem>\r\n              <TextField\r\n                required={true}\r\n                label={formatMessage(messages.firstName)}\r\n                ariaLabel={formatMessage(messages.firstName)}\r\n                value={store.active.firstName}\r\n                onChange={(_, value) => onFormFirstNameChanged(value)}\r\n                errorMessage={store.errors.firstName}\r\n                disabled={store.active.isLegacyUser || this.props.mode === FormState.Edit}\r\n              />\r\n            </FormItem>\r\n            <FormItem>\r\n              <TextField\r\n                required={true}\r\n                label={formatMessage(messages.lastName)}\r\n                ariaLabel={formatMessage(messages.lastName)}\r\n                value={store.active.lastName}\r\n                onChange={(_, value) => onFormLastNameChanged(value)}\r\n                errorMessage={store.errors.lastName}\r\n                disabled={store.active.isLegacyUser || this.props.mode === FormState.Edit}\r\n              />\r\n            </FormItem>\r\n            <FormItem formWidth={440}>\r\n              <TextField\r\n                required={true}\r\n                label={formatMessage(messages.emailAddress)}\r\n                ariaLabel={formatMessage(messages.emailAddress)}\r\n                value={store.active.emailAddress}\r\n                onChange={(_, value) => onFormEmailAddressChanged(value)}\r\n                errorMessage={store.errors.emailAddress}\r\n                disabled={store.active.isLegacyUser || this.props.mode === FormState.Edit}\r\n              />\r\n            </FormItem>\r\n          </>\r\n\r\n          {store.active.isLegacyUser && (\r\n            <>\r\n              <FormItem>\r\n                <TextField\r\n                  label={formatMessage(messages.telephoneNumber)}\r\n                  ariaLabel={formatMessage(messages.telephoneNumber)}\r\n                  value={store.active.phoneNumber}\r\n                  disabled={true}\r\n                />\r\n              </FormItem>\r\n              <FormItem>\r\n                <TextField\r\n                  label={formatMessage(messages.faxNumber)}\r\n                  ariaLabel={formatMessage(messages.faxNumber)}\r\n                  value={store.active.faxNumber}\r\n                  disabled={true}\r\n                />\r\n              </FormItem>\r\n            </>\r\n          )}\r\n          {store.active.isLegacyUser && (\r\n            <FormItem>\r\n              <TextField\r\n                label={formatMessage(messages.userName)}\r\n                ariaLabel={formatMessage(messages.userName)}\r\n                required={true}\r\n                value={store.active.userName}\r\n                onChange={(_, value) => onFormUsernameChanged(value)}\r\n                errorMessage={store.errors.userName}\r\n                disabled={this.props.mode === FormState.Edit}\r\n              />\r\n            </FormItem>\r\n          )}\r\n          {store.active.isLegacyUser && (\r\n            <FormItem>\r\n              <ComboBox\r\n                useComboBoxAsMenuWidth={true}\r\n                autoComplete=\"on\"\r\n                label={formatMessage(messages.preferredLanguage)}\r\n                ariaLabel={formatMessage(messages.preferredLanguage)}\r\n                required={true}\r\n                options={this._createLocaleOptions(false)}\r\n                selectedKey={store.active.language}\r\n                disabled={store.active.isLegacyUser}\r\n                tabIndex={store.active.isLegacyUser ? -1 : undefined}\r\n              />\r\n            </FormItem>\r\n          )}\r\n          {!store.active.isLegacyUser && (\r\n            <FormItem>\r\n              <ComboBox\r\n                useComboBoxAsMenuWidth={true}\r\n                autoComplete=\"on\"\r\n                label={formatMessage(messages.preferredLanguage)}\r\n                ariaLabel={formatMessage(messages.preferredLanguage)}\r\n                required={true}\r\n                options={this._createLocaleOptions(true)}\r\n                selectedKey={store.active.localeId}\r\n                errorMessage={store.errors.localeId}\r\n                onChange={(_, value) => onFormUserLocaleChanged(value)}\r\n                disabled={this.props.mode === FormState.Edit}\r\n                tabIndex={this.props.mode === FormState.Edit ? -1 : undefined}\r\n              />\r\n            </FormItem>\r\n          )}\r\n          <FormItem formWidth={800}>\r\n            <AccountRole\r\n              defaultSelectedKey={store.active.accountRole}\r\n              accountList={store.active.accountsList}\r\n              accountManagerAccountsSelected={store.active.AccountManagerAccountsSelected}\r\n              reportUserAccounstSelected={store.active.ReportUserAccounstSelected}\r\n              adViewAccountsSelected={store.active.AdViewAccountsSelected}\r\n              listManagerAccountsSelected={store.active.ListManagerAccountsSelected}\r\n              onChange={(_, value) => onFormAccountRoleChanged(value!)}\r\n              onSelectedItems={(items) => onFormRoleAccountListChanged(items)}\r\n              errorMessage={\r\n                store.errors.AccountManagerAccountsSelected ||\r\n                store.errors.ReportUserAccounstSelected ||\r\n                store.errors.ListManagerAccountsSelected ||\r\n                store.errors.AdViewAccountsSelected\r\n              }\r\n            />\r\n          </FormItem>\r\n          {store.active.isLegacyUser && (\r\n            <>\r\n              <FormItem>\r\n                <FormLabel\r\n                  labelContent={formatMessage(messages.marketingContactSetting)}\r\n                  calloutContent={helpInfo}\r\n                  iconButtonOnClick={() => onHelpInfoCalloutOpened('')}\r\n                  calloutOnDismiss={() => onHelpInfoChanged()}\r\n                  intl={this.props.intl}\r\n                />\r\n                <Checkbox\r\n                  label={formatMessage(messages.email)}\r\n                  ariaLabel={formatMessage(messages.email)}\r\n                  styles={this._classNames.subComponentStyles.checkbox}\r\n                  checked={!!store.active.contactByEmail}\r\n                  disabled={true}\r\n                />\r\n                <Checkbox\r\n                  label={formatMessage(messages.phone)}\r\n                  ariaLabel={formatMessage(messages.phone)}\r\n                  styles={this._classNames.subComponentStyles.checkbox}\r\n                  checked={!!store.active.contactByPhone}\r\n                  disabled={true}\r\n                />\r\n                <Checkbox\r\n                  label={formatMessage(messages.postalMail)}\r\n                  ariaLabel={formatMessage(messages.postalMail)}\r\n                  styles={this._classNames.subComponentStyles.checkbox}\r\n                  checked={store.active.contactByPost}\r\n                  disabled={true}\r\n                />\r\n              </FormItem>\r\n            </>\r\n          )}\r\n        </DetailPage>\r\n      );\r\n    }\r\n\r\n    private _createLocaleOptions(isId: boolean): IComboBoxOption[] {\r\n      const availableLocales: IComboBoxOption[] = [];\r\n      const LOCALE = LOCALE_LANGUAGE_MAPPING[getAppStore().locale];\r\n\r\n      Object.keys(userLocales).forEach((userLocale) => {\r\n        availableLocales!.push({\r\n          key: isId ? parseInt(userLocale, 10) : userLocales[userLocale],\r\n          text: LOCALE[userLocale],\r\n          ariaLabel: LOCALE[userLocale],\r\n        });\r\n      });\r\n\r\n      availableLocales.sort((a, b) => {\r\n        const firstValue = a.text;\r\n        const secondValue = b.text;\r\n\r\n        return firstValue.toLowerCase() > secondValue.toLowerCase() ? 1 : -1;\r\n      });\r\n      return availableLocales;\r\n    }\r\n\r\n    private _onSubmit = (publisherId?: string): void => {\r\n      this.setState({ initializeForm: false });\r\n      onFormSubmitted(this.props.mode, this.props.history);\r\n    };\r\n\r\n    private _onCancel = (publisherId?: string): void => {\r\n      this.setState({ initializeForm: false });\r\n      onFormCancelled();\r\n      const returnUrl = createReturnUrl(RouteName.user, publisherId);\r\n      onNavigateBack(this.props.history, returnUrl);\r\n    };\r\n  }\r\n);\r\n","import { FontSizes, FontWeights, classNamesFunction } from '@fluentui/react';\r\nimport { IPubcenterSpacing } from '../../../../../theme';\r\nimport { IManagePageStyleProps, IManagePageStyles } from './ManagePage.types';\r\n\r\nexport const getStyles = (props: IManagePageStyleProps): IManagePageStyles => {\r\n  const { theme } = props;\r\n  const spacing = theme.spacing as IPubcenterSpacing;\r\n\r\n  return {\r\n    root: {\r\n      display: 'flex',\r\n      flexDirection: 'column',\r\n      height: 'inherit',\r\n      flex: 1,\r\n      marginLeft: spacing.size32,\r\n      marginTop: spacing.size32,\r\n      marginRight: spacing.size32,\r\n    },\r\n    tokenPanelsubTitle: {\r\n      marginTop: spacing.size8,\r\n      fontWeight: FontWeights.semibold,\r\n      fontSize: FontSizes.medium,\r\n    },\r\n    tokenPanelsubTitleValue: {\r\n      marginTop: spacing.size12,\r\n      fontSize: FontSizes.medium,\r\n    },\r\n    tokenPanelDevToken: {\r\n      width: '160px',\r\n      height: '40px',\r\n      backgroundColor: theme.palette.white,\r\n      selectors: {\r\n        ':hover': {\r\n          background: theme.palette.neutralLighter,\r\n        },\r\n      },\r\n    },\r\n    tokenPanelAgreement: {\r\n      width: 'inherit',\r\n      display: 'flex',\r\n      alignItems: 'center',\r\n      backgroundColor: theme.palette.themeLighterAlt,\r\n      fontSize: theme.fonts.small.fontSize,\r\n      marginTop: spacing.size12,\r\n      paddingTop: spacing.size12,\r\n      paddingBottom: spacing.size12,\r\n      paddingRight: spacing.size6,\r\n      paddingLeft: spacing.size6,\r\n    },\r\n    tokenPanelAgreementBtn: {\r\n      color: theme.palette.red,\r\n      selectors: {\r\n        ':hover': {\r\n          color: theme.palette.red,\r\n        },\r\n      },\r\n    },\r\n    tokenPanelInfoButton: {\r\n      float: 'left',\r\n    },\r\n    tokenPanelAgreementText: {\r\n      backgroundColor: theme.palette.themeLighterAlt,\r\n      width: 'inherit',\r\n    },\r\n    tokenSpinner: {\r\n      width: '200px',\r\n      marginTop: '10px',\r\n    },\r\n    tokenFetchFail: {\r\n      width: '430px',\r\n      color: theme.palette.red,\r\n    },\r\n  };\r\n};\r\n\r\nexport const getClassNames = classNamesFunction<IManagePageStyleProps, IManagePageStyles>();\r\n","import { defineMessages } from 'react-intl';\r\n\r\nexport default defineMessages({\r\n  invite: {\r\n    id: 'user.invite',\r\n    defaultMessage: 'Invite User',\r\n  },\r\n  notFound: {\r\n    id: 'user.notFound',\r\n    defaultMessage: 'No users found for this publisher, create one.',\r\n  },\r\n  notInvitationFound: {\r\n    id: 'user.notInvitationFound',\r\n    defaultMessage: 'No user invitations found for this publisher, create one.',\r\n  },\r\n  name: {\r\n    id: 'userpage.name',\r\n    defaultMessage: 'Name',\r\n  },\r\n  emailAddress: {\r\n    id: 'userpage.emailAddress',\r\n    defaultMessage: 'E-mail address',\r\n  },\r\n  resendInvitation: {\r\n    id: 'userpage.resendInvitation',\r\n    defaultMessage: 'Re-send',\r\n  },\r\n  deleteInvitation: {\r\n    id: 'userpage.deleteInvitation',\r\n    defaultMessage: 'Delete Invitation',\r\n  },\r\n  deleteInvitationDescription: {\r\n    id: 'userpage.deleteInvitationDescription',\r\n    defaultMessage: 'Are you sure you want to delete invitation?',\r\n  },\r\n  noPublisherSelected: {\r\n    id: 'user.noPublisherSelected',\r\n    defaultMessage: 'Select a publisher.',\r\n  },\r\n  deactivateTitle: {\r\n    id: 'user.deactivateTitle',\r\n    defaultMessage: 'Do you want to deactivate user(s)?',\r\n  },\r\n  username: {\r\n    id: 'user.userName',\r\n    defaultMessage: 'User name',\r\n  },\r\n  dateJoined: {\r\n    id: 'user.dateJoined',\r\n    defaultMessage: 'Date joined',\r\n  },\r\n  userRole: {\r\n    id: 'user.userRole',\r\n    defaultMessage: 'Role',\r\n  },\r\n  lastActivity: {\r\n    id: 'user.lastActivity',\r\n    defaultMessage: 'Last activity',\r\n  },\r\n  dateExpires: {\r\n    id: 'user.dateExpires',\r\n    defaultMessage: 'Date Expires',\r\n  },\r\n  tokenPanelUserNameLabel: {\r\n    id: 'app.tokenPanelUserNameLabel',\r\n    defaultMessage: 'User name',\r\n  },\r\n  tokenPanelEmailLabel: {\r\n    id: 'app.tokenPanelEmailLabel',\r\n    defaultMessage: 'E-mail address',\r\n  },\r\n  developerTokenLabel: {\r\n    id: 'app.developerTokenLabel',\r\n    defaultMessage: 'Developer Token',\r\n  },\r\n  tokenServiceAgreementLabelPrefix: {\r\n    id: 'app.tokenServiceAgreementLabelPrefix',\r\n    defaultMessage:\r\n      'By accessing the Microsoft pubCenter API, you agree that the Microsoft pubCenter API is part of the services made available to you under the Microsoft Developer Services Agreement (see ',\r\n  },\r\n  tokenServiceAgreementLabelLink: {\r\n    id: 'app.tokenServiceAgreementLabelLink',\r\n    defaultMessage: 'https://go.microsoft.com/fwlink/?linkid=861648',\r\n  },\r\n  tokenServiceAgreementLabelSuffix: {\r\n    id: 'app.tokenServiceAgreementLabelSuffix',\r\n    defaultMessage: ' or a succesor location (the “Agreement”)) and accept the terms and conditions in the agreement.',\r\n  },\r\n  tokenStatusLabel: {\r\n    id: 'app.tokenStatusLabel',\r\n    defaultMessage: 'Token Status',\r\n  },\r\n  tokenPanelGenerateButtonAriaDesc: {\r\n    id: 'app.tokenPanelGenerateButtonAriaDesc',\r\n    defaultMessage: 'Click to generate a new token for this user',\r\n  },\r\n  tokenPanelGenerateButtonLabel: {\r\n    id: 'app.tokenPanelGenerateButtonLabel',\r\n    defaultMessage: 'Generate Token',\r\n  },\r\n  tokenPanelFetchFailLabel: {\r\n    id: 'app.tokenPanelFetchFailLabel',\r\n    defaultMessage: 'Fetching dev token failed. Please reopen this panel to try again',\r\n  },\r\n  zeroResultTitleUser: {\r\n    id: 'channel.zeroResultTitle',\r\n    defaultMessage: 'No users yet',\r\n  },\r\n  zeroResultTitleUserInvitations: {\r\n    id: 'channel.zeroResultTitleUserInvitations',\r\n    defaultMessage: 'No user invitations yet',\r\n  },\r\n  zeroResultDescription: {\r\n    id: 'channel.zeroResultDescription',\r\n    defaultMessage: 'You haven’t created any channel yet',\r\n  },\r\n});\r\n","import { PrimaryButton } from '@fluentui/react';\r\nimport React from 'react';\r\nimport { Model, getAppStore } from '../../../../../../@data';\r\nimport { FormState } from '../../../../../../components/Form';\r\nimport { CommandBarActions, Direction, GridSelectionMode, IBuildCommandBarProps } from '../../../../../../layout/GridPageV2';\r\nimport { getStore } from '../../../@data';\r\nimport { onUserInvitationChanged, onUserInvitationsChanged } from '../../../@data/actions';\r\nimport messages from '../../ManagePage.messages';\r\n\r\nexport function getCommandBarItems(formatMessage, history, match): IBuildCommandBarProps<Model> | undefined {\r\n  const { publisher } = getAppStore();\r\n  const { userInvitations, isFetchingUserInvitationsLoading } = getStore();\r\n\r\n  const commandBarItems =\r\n    (userInvitations && userInvitations.length !== 0 && publisher) || isFetchingUserInvitationsLoading\r\n      ? {\r\n          includeActions: [CommandBarActions.custom],\r\n          includeFarActions: [CommandBarActions.searchBox, CommandBarActions.delete, CommandBarActions.modifyColumns],\r\n          onPostDeleteItems: (deletedItem) => {\r\n            onUserInvitationsChanged(userInvitations.filter((row) => row.id !== deletedItem[0].id));\r\n          },\r\n          getCustomCommandBarItems: (getSelectedItems) => {\r\n            return [\r\n              {\r\n                key: 'inviteUser',\r\n                name: formatMessage(messages.invite),\r\n                iconProps: {\r\n                  iconName: 'Add',\r\n                  ariaLabel: 'Add',\r\n                },\r\n                commandBarButtonAs: () => (\r\n                  <PrimaryButton\r\n                    iconProps={{ iconName: 'Add' }}\r\n                    text={formatMessage(messages.invite)}\r\n                    onClick={() => history.push(`${match.url}/create`)}\r\n                    disabled={isFetchingUserInvitationsLoading}\r\n                  />\r\n                ),\r\n                placement: { direction: Direction.before },\r\n                selectionModes: [GridSelectionMode.None],\r\n                disabled: isFetchingUserInvitationsLoading,\r\n              },\r\n              {\r\n                key: 'resend',\r\n                name: formatMessage(messages.resendInvitation),\r\n                ariaLabel: formatMessage(messages.resendInvitation),\r\n                iconProps: {\r\n                  iconName: 'Undo',\r\n                  ariaLabel: 'Undo',\r\n                },\r\n                placement: { direction: Direction.before },\r\n                onClick: () => {\r\n                  const items = getSelectedItems();\r\n                  onUserInvitationChanged(FormState.Resend, items ? items[0] : undefined);\r\n                },\r\n                selectionModes: [GridSelectionMode.Single],\r\n              },\r\n            ];\r\n          },\r\n        }\r\n      : undefined;\r\n\r\n  return commandBarItems;\r\n}\r\n","import { SelectionMode } from '@fluentui/react';\r\nimport * as React from 'react';\r\nimport { useEffect } from 'react';\r\nimport { getAppStore, UserInvitation } from '../../../../../@data';\r\nimport AppMessages from '../../../../../App.messages';\r\nimport { ZeroResults } from '../../../../../components/ZeroResults/ZeroResults';\r\nimport { useCanvasTextWidth, useWindowSize } from '../../../../../hooks';\r\nimport { getStore as getWindowSizeStore } from '../../../../../hooks/useWindowSize/store/store';\r\nimport { GridV2, IGridV2Column } from '../../../../../layout/GridPageV2';\r\nimport { RoutePrefix } from '../../../../../Routes';\r\nimport { injectIntlWithObserver, IRouterWithIntl } from '../../../../../utils';\r\nimport { RouteName } from '../../../@data';\r\nimport { getStore } from '../../@data';\r\nimport { onUserInvitationsChanged, onUserInvitationsGridInitialized } from '../../@data/actions';\r\nimport messages from '../ManagePage.messages';\r\nimport { getCommandBarItems } from './utils/getCommandBarItems';\r\nimport { getGridColumns } from './utils/getGridColumns';\r\n\r\nexport const UserInvitationsGrid = injectIntlWithObserver((props: IRouterWithIntl) => {\r\n  const { publisher } = getAppStore();\r\n  const { userInvitations, isFetchingUserInvitationsLoading, isFetchingUserInvitations } = getStore();\r\n  const { formatMessage } = props.intl;\r\n  const { windowStoreSerializer } = useWindowSize();\r\n  const { isWindowRegularSize } = windowStoreSerializer(getWindowSizeStore());\r\n\r\n  const longestEmail = React.useMemo(\r\n    () => userInvitations?.map((user) => user.email || '').reduce((a, b) => (a.length > b.length ? a : b), '') || '',\r\n    [userInvitations]\r\n  );\r\n  const gridDefaultColumns: IGridV2Column[] = getGridColumns(formatMessage, isWindowRegularSize, useCanvasTextWidth(longestEmail));\r\n\r\n  const NoResultComponent = (\r\n    <ZeroResults\r\n      showDefaultImage\r\n      title={!!publisher ? formatMessage(messages.zeroResultTitleUserInvitations) : undefined}\r\n      description={formatMessage(!!publisher ? messages.notInvitationFound : messages.noPublisherSelected)}\r\n      buttonText={formatMessage(messages.invite)}\r\n      onButtonClick={\r\n        !!publisher ? () => props.history.push(`/${RoutePrefix.partnerManagement}/${publisher?.id}/${RouteName.user}/create`) : undefined\r\n      }\r\n    />\r\n  );\r\n\r\n  useEffect(() => {\r\n    onUserInvitationsGridInitialized(gridDefaultColumns);\r\n    // eslint-disable-next-line\r\n  }, [publisher]);\r\n\r\n  return (\r\n    <GridV2\r\n      {...props}\r\n      entity={UserInvitation}\r\n      pageTitle={{ title: formatMessage(AppMessages.userInvitations), helpId: 'pop_PCv4_UserInvite' }}\r\n      commandBarProps={getCommandBarItems(formatMessage, props.history, props.match)}\r\n      dataGridProps={{\r\n        gridV2Columns: gridDefaultColumns,\r\n        data: publisher ? userInvitations || [] : [],\r\n        setData: onUserInvitationsChanged,\r\n        shimmerLines: 10,\r\n        selectionMode: SelectionMode.single,\r\n        renderZeroItemsComponent: NoResultComponent,\r\n      }}\r\n      isGridReady={!isFetchingUserInvitationsLoading}\r\n      isDataLoading={isFetchingUserInvitations}\r\n      paginationProps={{\r\n        shouldGridHandlePagination: true,\r\n      }}\r\n    />\r\n  );\r\n});\r\n","import { CommandBarButton } from '@fluentui/react';\r\nimport React from 'react';\r\nimport { PopupType, UserInvitation, getAccessPermission } from '../../../../../../@data';\r\nimport { hasDeleteAccess } from '../../../../../../@data/services/UserRoleService';\r\nimport AppMessages from '../../../../../../App.messages';\r\nimport { IGridV2Column } from '../../../../../../layout/GridPageV2';\r\nimport { setDialogType } from '../../../../../../layout/GridPageV2/@data/mutatorActions';\r\nimport messages from '../../ManagePage.messages';\r\n\r\nexport function getGridColumns(formatMessage, isWindowRegularSize, longestEmailLength): IGridV2Column[] {\r\n  const columns: IGridV2Column[] = [\r\n    {\r\n      columnOrder: 0,\r\n      key: 'firstName',\r\n      fieldName: 'firstName',\r\n      name: formatMessage(messages.name),\r\n      minWidth: 100,\r\n      maxWidth: 200,\r\n      isSearchable: true,\r\n      isVisible: true,\r\n      isExportable: true,\r\n      isResizable: true,\r\n      suppressSorting: false,\r\n    },\r\n    {\r\n      columnOrder: 1,\r\n      key: 'email',\r\n      fieldName: 'email',\r\n      name: formatMessage(messages.emailAddress),\r\n      minWidth: longestEmailLength,\r\n      maxWidth: longestEmailLength + 10,\r\n      isSearchable: true,\r\n      isVisible: true,\r\n      isExportable: true,\r\n      isResizable: true,\r\n    },\r\n    {\r\n      columnOrder: 2,\r\n      key: 'expirationDate',\r\n      fieldName: 'expirationDate',\r\n      name: formatMessage(messages.dateExpires),\r\n      minWidth: 200,\r\n      maxWidth: 200,\r\n      isSearchable: true,\r\n      isVisible: true,\r\n      isExportable: true,\r\n      isResizable: true,\r\n    },\r\n    {\r\n      columnOrder: 3,\r\n      key: 'actions',\r\n      name: formatMessage(AppMessages.actions),\r\n      minWidth: 150,\r\n      maxWidth: 200,\r\n      isPadded: true,\r\n      isSearchable: true,\r\n      isVisible: true,\r\n      suppressSorting: true,\r\n      isResizable: true,\r\n      onRender: (item: UserInvitation) => {\r\n        const accessPermission = getAccessPermission(item);\r\n\r\n        return (\r\n          <CommandBarButton\r\n            styles={{ root: { background: 'transparent' } }}\r\n            iconProps={{ iconName: 'Delete' }}\r\n            text={isWindowRegularSize ? formatMessage(AppMessages.delete) : ''}\r\n            onClick={() => setDialogType(PopupType.DeleteConfirmation)}\r\n            disabled={!hasDeleteAccess(accessPermission)}\r\n          />\r\n        );\r\n      },\r\n    },\r\n  ];\r\n\r\n  return columns;\r\n}\r\n","import { ActionButton, IconButton, Panel, PanelType, PrimaryButton, Spinner, getTheme } from '@fluentui/react';\r\nimport React, { useState } from 'react';\r\nimport AppMessages from '../../../../../../App.messages';\r\nimport { COPY_BUTTON_TIMEOUT } from '../../../../../../constants/AppConstants';\r\nimport { IRouterWithIntl, injectIntlWithObserver } from '../../../../../../utils';\r\nimport { getStore } from '../../../@data';\r\nimport { onDevTokenPanelHide } from '../../../@data/actions';\r\nimport messages from '../../ManagePage.messages';\r\nimport { getClassNames, getStyles } from '../../ManagePage.styles';\r\nimport { DevTokenFetch } from '../../ManagePage.types';\r\n\r\nexport const DevTokenPanel = injectIntlWithObserver((props: IRouterWithIntl) => {\r\n  const [copyButtonType, setCopyButtonType] = useState('Copy');\r\n  const { devTokenPanelParams } = getStore();\r\n  if (!devTokenPanelParams || devTokenPanelParams.panelClosed) {\r\n    return <></>;\r\n  }\r\n  const classNames = getClassNames(getStyles, { theme: getTheme() });\r\n  const { formatMessage } = props.intl;\r\n\r\n  const onCopyTokenClick = (copyText) => {\r\n    navigator.clipboard.writeText(copyText);\r\n    setCopyButtonType('Accept');\r\n    setTimeout(() => {\r\n      setCopyButtonType('Copy');\r\n    }, COPY_BUTTON_TIMEOUT);\r\n  };\r\n\r\n  return (\r\n    <Panel\r\n      isOpen={true}\r\n      type={PanelType.medium}\r\n      onDismiss={() => onDevTokenPanelHide()}\r\n      headerText={formatMessage(messages.tokenStatusLabel)}\r\n      closeButtonAriaLabel={formatMessage(AppMessages.panelCloseButtonAriaDesc)}\r\n    >\r\n      <div className={classNames.tokenPanelsubTitle}>{formatMessage(messages.tokenPanelUserNameLabel)}</div>\r\n      <div className={classNames.tokenPanelsubTitleValue}>{devTokenPanelParams.userName ? devTokenPanelParams.userName : ''}</div>\r\n      <div className={classNames.tokenPanelsubTitle}>{formatMessage(messages.tokenPanelEmailLabel)}</div>\r\n      <div className={classNames.tokenPanelsubTitleValue}>{devTokenPanelParams.email ? devTokenPanelParams.email : ''}</div>\r\n      <div className={classNames.tokenPanelsubTitle}>{formatMessage(messages.developerTokenLabel)}</div>\r\n      <div>\r\n        {!devTokenPanelParams.developerToken ||\r\n        devTokenPanelParams.developerToken === DevTokenFetch.TokenNotFound ||\r\n        devTokenPanelParams.developerToken === DevTokenFetch.ApiCallFailed ? (\r\n          <div>\r\n            {devTokenPanelParams.developerToken === DevTokenFetch.TokenNotFound ||\r\n            devTokenPanelParams.developerToken === DevTokenFetch.ApiCallFailed ? (\r\n              <div>\r\n                {devTokenPanelParams.developerToken === DevTokenFetch.TokenNotFound ? (\r\n                  <PrimaryButton\r\n                    className={classNames.tokenPanelsubTitle}\r\n                    onClick={() => {\r\n                      devTokenPanelParams.onGenerateDevToken();\r\n                    }}\r\n                    text={formatMessage(messages.tokenPanelGenerateButtonLabel)}\r\n                    ariaDescription={formatMessage(messages.tokenPanelGenerateButtonAriaDesc)}\r\n                  />\r\n                ) : (\r\n                  <div className={classNames.tokenFetchFail}>\r\n                    <IconButton iconProps={{ iconName: 'Warning' }} className={classNames.tokenPanelAgreementBtn} />\r\n                    <span>{formatMessage(messages.tokenPanelFetchFailLabel)}</span>\r\n                  </div>\r\n                )}\r\n              </div>\r\n            ) : (\r\n              <div className={classNames.tokenSpinner}>\r\n                <Spinner label={devTokenPanelParams.SpinnerText} ariaLive=\"assertive\" labelPosition=\"right\" />\r\n              </div>\r\n            )}\r\n          </div>\r\n        ) : (\r\n          <div className={classNames.tokenPanelDevToken}>\r\n            <span id=\"devToken\">{devTokenPanelParams.developerToken}</span>\r\n            <ActionButton\r\n              menuIconProps={{ iconName: copyButtonType }}\r\n              title=\"Copy\"\r\n              onClick={() => onCopyTokenClick(devTokenPanelParams.developerToken)}\r\n              className=\"button\"\r\n            />\r\n          </div>\r\n        )}\r\n      </div>\r\n      <div className={classNames.tokenPanelAgreement}>\r\n        <div className={classNames.tokenPanelInfoButton}>\r\n          <IconButton iconProps={{ iconName: 'Info' }} />\r\n        </div>\r\n        <div className={classNames.tokenPanelAgreementText}>\r\n          {formatMessage(messages.tokenServiceAgreementLabelPrefix)}\r\n          <a href={formatMessage(messages.tokenServiceAgreementLabelLink)}>{formatMessage(messages.tokenServiceAgreementLabelLink)}</a>\r\n          {formatMessage(messages.tokenServiceAgreementLabelSuffix)}\r\n        </div>\r\n      </div>\r\n    </Panel>\r\n  );\r\n});\r\n","import { Model, getAccessPermission, getAppStore } from '../../../../../../@data';\r\nimport { hasCreateAccess } from '../../../../../../@data/services/UserRoleService';\r\nimport { CommandBarActions, Direction, GridSelectionMode, IBuildCommandBarProps } from '../../../../../../layout/GridPageV2';\r\nimport { getStore } from '../../../@data';\r\nimport { onDevTokenPanelShown, onFetchDevTokenStatus, onGenerateDevTokenStatus } from '../../../@data/actions';\r\nimport messages from '../../ManagePage.messages';\r\nimport { IDevTokenPanelParams } from '../../ManagePage.types';\r\n\r\nexport function getCommandBarItems(formatMessage): IBuildCommandBarProps<Model> | undefined {\r\n  const { publisher } = getAppStore();\r\n  const { users, isFetchingUsersLoading } = getStore();\r\n\r\n  const commandBarItems =\r\n    (users && users.length !== 0 && publisher) || isFetchingUsersLoading\r\n      ? {\r\n          includeFarActions: [\r\n            CommandBarActions.searchBox,\r\n            CommandBarActions.edit,\r\n            CommandBarActions.delete,\r\n            CommandBarActions.tokenStatus,\r\n            CommandBarActions.download,\r\n            CommandBarActions.modifyColumns,\r\n          ],\r\n          getCustomCommandBarItems: (getSelectedItems) => {\r\n            const accessPermission = getAccessPermission(getSelectedItems[0]);\r\n\r\n            return [\r\n              {\r\n                key: CommandBarActions.tokenStatus,\r\n                name: formatMessage(messages.tokenStatusLabel),\r\n                ariaLabel: formatMessage(messages.tokenStatusLabel),\r\n                iconProps: {\r\n                  iconName: 'BranchCompare',\r\n                },\r\n                placement: { direction: Direction.after },\r\n                onClick: () => {\r\n                  const items = getSelectedItems();\r\n                  if (items) {\r\n                    onFetchDevTokenStatus(items[0]);\r\n                    const devTokenPanelDisplayParams: IDevTokenPanelParams = {\r\n                      /* tslint:disable:no-string-literal */\r\n                      userName: items[0]['username'],\r\n                      email: items[0]['email'],\r\n                      developerToken: items[0]['developerToken'],\r\n                      panelClosed: false,\r\n                      SpinnerText: 'Fetching Developer token...',\r\n                      onGenerateDevToken: () => onGenerateDevTokenStatus(items[0]),\r\n                    };\r\n                    onDevTokenPanelShown(devTokenPanelDisplayParams);\r\n                  }\r\n                },\r\n                selectionModes: [GridSelectionMode.Single],\r\n                disabled: !hasCreateAccess(accessPermission),\r\n              },\r\n            ];\r\n          },\r\n        }\r\n      : undefined;\r\n\r\n  return commandBarItems;\r\n}\r\n","import { SelectionMode } from '@fluentui/react';\r\nimport * as React from 'react';\r\nimport { useEffect, useMemo } from 'react';\r\nimport { User, getAppStore } from '../../../../../@data';\r\nimport AppMessages from '../../../../../App.messages';\r\nimport { ZeroResults } from '../../../../../components/ZeroResults/ZeroResults';\r\nimport { useCanvasTextWidth, useWindowSize } from '../../../../../hooks';\r\nimport { getStore as getWindowSizeStore } from '../../../../../hooks/useWindowSize/store/store';\r\nimport { GridV2, IGridV2Column } from '../../../../../layout/GridPageV2';\r\nimport { IRouterWithIntl, injectIntlWithObserver } from '../../../../../utils';\r\nimport { getStore } from '../../@data';\r\nimport { onManagePageInitialized, onUsersChanged } from '../../@data/actions';\r\nimport messages from '../ManagePage.messages';\r\nimport { DevTokenPanel } from './components/DevTokenPanel';\r\nimport { getCommandBarItems } from './utils/getCommandBarItems';\r\nimport { getGridColumns } from './utils/getGridColumns';\r\n\r\nexport const UsersGrid = injectIntlWithObserver((props: IRouterWithIntl) => {\r\n  const { publisher } = getAppStore();\r\n  const { users, isFetchingUsersLoading, isFetchingUsers } = getStore();\r\n  const { formatMessage } = props.intl;\r\n  const { windowStoreSerializer } = useWindowSize();\r\n  const { isWindowRegularSize } = windowStoreSerializer(getWindowSizeStore());\r\n\r\n  const longestEmail = useMemo(() => users?.map((user) => user.email || '').reduce((a, b) => (a.length > b.length ? a : b), '') || '', [\r\n    users,\r\n  ]);\r\n  const gridDefaultColumns: IGridV2Column[] = getGridColumns(\r\n    formatMessage,\r\n    isWindowRegularSize,\r\n    props.history,\r\n    useCanvasTextWidth(longestEmail)\r\n  );\r\n\r\n  const NoResultComponent = (\r\n    <ZeroResults\r\n      showDefaultImage\r\n      title={!!publisher ? formatMessage(messages.zeroResultTitleUser) : undefined}\r\n      description={formatMessage(!!publisher ? messages.notFound : messages.noPublisherSelected)}\r\n    />\r\n  );\r\n\r\n  useEffect(() => {\r\n    onManagePageInitialized(gridDefaultColumns);\r\n    // eslint-disable-next-line\r\n  }, [publisher]);\r\n\r\n  return (\r\n    <>\r\n      <GridV2\r\n        {...props}\r\n        entity={User}\r\n        pageTitle={{ title: formatMessage(AppMessages.users), helpId: 'pop_PCv4_Users' }}\r\n        commandBarProps={getCommandBarItems(formatMessage)}\r\n        dataGridProps={{\r\n          gridV2Columns: gridDefaultColumns,\r\n          data: publisher ? users || [] : [],\r\n          setData: onUsersChanged,\r\n          shimmerLines: 10,\r\n          selectionMode: SelectionMode.single,\r\n          renderZeroItemsComponent: NoResultComponent,\r\n        }}\r\n        isGridReady={!isFetchingUsersLoading}\r\n        isDataLoading={isFetchingUsers}\r\n        paginationProps={{\r\n          shouldGridHandlePagination: true,\r\n        }}\r\n      />\r\n      <DevTokenPanel {...props} />\r\n    </>\r\n  );\r\n});\r\n","import { CommandBarButton } from '@fluentui/react';\r\nimport React from 'react';\r\nimport { PopupType, User, getAccessPermission, getAppStore } from '../../../../../../@data';\r\nimport { hasDeleteAccess, hasUpdateAccess } from '../../../../../../@data/services/UserRoleService';\r\nimport AppMessages from '../../../../../../App.messages';\r\nimport { IGridV2Column } from '../../../../../../layout/GridPageV2';\r\nimport { setDialogType } from '../../../../../../layout/GridPageV2/@data/mutatorActions';\r\nimport messages from '../../ManagePage.messages';\r\n\r\nexport function getGridColumns(formatMessage, isWindowRegularSize, routeHistory, longestEmailLength): IGridV2Column[] {\r\n  const { publisher, entityGridColumns } = getAppStore();\r\n  const gridColumns = entityGridColumns?.find((x) => x.entity === User)?.gridColumns as IGridV2Column[];\r\n\r\n  const columns: IGridV2Column[] = [\r\n    {\r\n      columnOrder: 0,\r\n      key: 'username',\r\n      fieldName: 'username',\r\n      name: formatMessage(messages.username),\r\n      minWidth: longestEmailLength,\r\n      maxWidth: longestEmailLength + 10,\r\n      isSearchable: true,\r\n      isVisible: gridColumns?.find((x) => x.key === 'username')?.isVisible ?? true,\r\n      isExportable: true,\r\n      isResizable: true,\r\n      suppressSorting: false,\r\n    },\r\n    {\r\n      columnOrder: 1,\r\n      key: 'email',\r\n      fieldName: 'email',\r\n      name: formatMessage(messages.emailAddress),\r\n      minWidth: longestEmailLength,\r\n      maxWidth: longestEmailLength + 10,\r\n      isSearchable: true,\r\n      isVisible: gridColumns?.find((x) => x.key === 'email')?.isVisible ?? true,\r\n      isExportable: true,\r\n      isResizable: true,\r\n    },\r\n    {\r\n      columnOrder: 2,\r\n      key: 'status',\r\n      fieldName: 'status',\r\n      name: formatMessage(AppMessages.status),\r\n      minWidth: 75,\r\n      maxWidth: 175,\r\n      isSearchable: true,\r\n      isResizable: true,\r\n      isVisible: gridColumns?.find((x) => x.key === 'status')?.isVisible ?? true,\r\n      isExportable: true,\r\n    },\r\n    {\r\n      columnOrder: 3,\r\n      key: 'actions',\r\n      name: formatMessage(AppMessages.actions),\r\n      minWidth: 150,\r\n      maxWidth: 200,\r\n      isPadded: true,\r\n      isSearchable: true,\r\n      isVisible: gridColumns?.find((x) => x.key === 'actions')?.isVisible ?? true,\r\n      suppressSorting: true,\r\n      isResizable: true,\r\n      onRender: (item: User) => {\r\n        const accessPermission = getAccessPermission(item);\r\n\r\n        return (\r\n          <>\r\n            <CommandBarButton\r\n              styles={{ root: { background: 'transparent' } }}\r\n              iconProps={{ iconName: 'edit' }}\r\n              ariaLabel={formatMessage(AppMessages.edit)}\r\n              text={isWindowRegularSize ? formatMessage(AppMessages.edit) : ''}\r\n              disabled={!hasUpdateAccess(accessPermission) || publisher === undefined}\r\n              onClick={() => routeHistory.push(`/partner-management/${publisher?.id}/user/edit/${item.id}`)}\r\n            />\r\n            <CommandBarButton\r\n              styles={{ root: { background: 'transparent' } }}\r\n              iconProps={{ iconName: 'Delete' }}\r\n              text={isWindowRegularSize ? formatMessage(AppMessages.delete) : ''}\r\n              onClick={() => setDialogType(PopupType.DeleteConfirmation)}\r\n              disabled={!hasDeleteAccess(accessPermission)}\r\n            />\r\n          </>\r\n        );\r\n      },\r\n    },\r\n  ];\r\n\r\n  return columns;\r\n}\r\n","import { getTheme } from '@fluentui/react';\r\nimport * as React from 'react';\r\nimport { useEffect } from 'react';\r\nimport { LayoutMode, onLayoutChanged } from '../../../../@data';\r\nimport AppMessages from '../../../../App.messages';\r\nimport { Tabs } from '../../../../components/Tabs';\r\nimport { IRouterWithIntl, injectIntlWithObserver } from '../../../../utils/ReactUtils';\r\nimport { getClassNames, getStyles } from './ManagePage.styles';\r\nimport { UserInvitationsGrid } from './UserInvitations/UserInvitationsGrid';\r\nimport { UsersGrid } from './Users/UsersGrid';\r\n\r\nexport const ManagePage = injectIntlWithObserver((props: IRouterWithIntl) => {\r\n  const { formatMessage } = props.intl;\r\n  const classNames = getClassNames(getStyles, { theme: getTheme() });\r\n\r\n  useEffect(() => {\r\n    onLayoutChanged(LayoutMode.Default);\r\n  }, []);\r\n\r\n  return (\r\n    <div className={classNames.root}>\r\n      <Tabs\r\n        tabs={[\r\n          {\r\n            key: 'users',\r\n            headerText: formatMessage(AppMessages.users),\r\n            component: <UsersGrid {...props} />,\r\n          },\r\n          {\r\n            key: 'userInvitations',\r\n            headerText: formatMessage(AppMessages.userInvitations),\r\n            component: <UserInvitationsGrid {...props} />,\r\n          },\r\n        ]}\r\n      />\r\n    </div>\r\n  );\r\n});\r\n","import * as React from 'react';\r\nimport { InjectedIntlProps, injectIntl } from 'react-intl';\r\nimport { Route, RouteComponentProps } from 'react-router-dom';\r\nimport { RoutePrefix } from '../../../Routes';\r\nimport { FormState } from '../../../components/Form';\r\nimport { RouteName } from '../@data';\r\nimport { onCurrentRouteChanged } from '../@data/actions';\r\nimport '../@data/orchestrators';\r\nimport './@data/mutators';\r\nimport './@data/orchestrators';\r\nimport { InviteUser } from './Invite/InviteUser';\r\nimport { ManagePage } from './Manage/ManagePage';\r\n\r\nexport const UserPage = injectIntl(function UserPageComponent({ match, intl }: RouteComponentProps & InjectedIntlProps): JSX.Element {\r\n  React.useEffect(() => {\r\n    onCurrentRouteChanged(RouteName.user, intl.formatMessage);\r\n    // eslint-disable-next-line react-hooks/exhaustive-deps\r\n  }, []);\r\n\r\n  return (\r\n    <React.Fragment>\r\n      <Route exact path={`${match.url}`} component={ManagePage} />\r\n      <Route\r\n        path={`/${RoutePrefix.partnerManagement}/:publisherId/${RouteName[RouteName.user]}/create`}\r\n        render={(props) => <InviteUser {...props} mode={FormState.Create} />}\r\n      />\r\n      <Route\r\n        path={`/${RoutePrefix.partnerManagement}/:publisherId/${RouteName[RouteName.user]}/edit/:id`}\r\n        render={(props) => <InviteUser {...props} mode={FormState.Edit} />}\r\n      />\r\n    </React.Fragment>\r\n  );\r\n});\r\n","import * as React from 'react';\r\nimport { InjectedIntl, InjectedIntlProps } from 'react-intl';\r\nimport { Redirect, Route, RouteComponentProps, Switch } from 'react-router';\r\nimport { IAppState, getAppStore } from '../../@data';\r\nimport '../../@data/orchestrators';\r\nimport { UserRoleEntity, completeAccess, hasReadAccess, userRoleKey } from '../../@data/services/UserRoleService';\r\nimport { User as UserAccessPermissions } from '../../@data/store/schema/userrolemodels/User';\r\nimport AppMessages from '../../App.messages';\r\nimport { IRoute } from '../../Routes.types';\r\nimport { ContentLayout } from '../../layout/ContentLayout/ContentLayout';\r\nimport { IMenuProps } from '../../layout/ContentLayout/ContentLayout.types';\r\nimport { injectIntlWithObserver } from '../../utils';\r\nimport { RouteName } from './@data';\r\nimport './@data/mutators';\r\nimport { AccountPage } from './Account/AccountPage';\r\nimport { IndexPage } from './Index/IndexPage';\r\nimport { PartnerManagementHeader } from './PartnerManagementHeader';\r\nimport { PublisherPage } from './Publisher/PublisherPage';\r\nimport { UserPage } from './User/UserPage';\r\n\r\nexport const getRoutes = (formatMessage: InjectedIntl['formatMessage']): IRoute[] => [\r\n  {\r\n    key: RouteName[RouteName.publisher],\r\n    text: formatMessage(AppMessages.navPublisherManagement),\r\n    icon: 'CRMReport',\r\n    component: PublisherPage,\r\n  },\r\n  {\r\n    key: RouteName[RouteName.account],\r\n    text: formatMessage(AppMessages.navAccountManagement),\r\n    icon: 'AccountManagement',\r\n    component: AccountPage,\r\n  },\r\n  {\r\n    key: RouteName[RouteName.user],\r\n    text: formatMessage(AppMessages.navUserManagement),\r\n    icon: 'Contact',\r\n    component: UserPage,\r\n  },\r\n];\r\n\r\nconst DefaultRoute = RouteName[RouteName.publisher];\r\n\r\nexport const PartnerManagementRouter = injectIntlWithObserver(\r\n  class extends React.Component<RouteComponentProps & InjectedIntlProps> {\r\n    public render(): JSX.Element {\r\n      const store = getAppStore();\r\n\r\n      const menuProps: IMenuProps = {\r\n        ...this.props,\r\n        routes: this._generateMenuRoutes(store),\r\n      };\r\n\r\n      return (\r\n        <ContentLayout {...this.props} menuProps={menuProps} onRenderHeader={this._renderHeader}>\r\n          <Redirect exact path={this.props.match.url} to={`${this.props.match.url}/${DefaultRoute}`} />\r\n          {getRoutes(this.props.intl.formatMessage).map((route: IRoute, index: number) => (\r\n            <Route\r\n              key={index}\r\n              path={[`${this.props.match.url}/${route.key}`, `${this.props.match.url}/:publisherIdentifier/${route.key}`]}\r\n              component={route.component}\r\n            />\r\n          ))}\r\n          <Route key=\"catch-all\" path={`${this.props.match.url}/:id`} component={IndexPage} />\r\n        </ContentLayout>\r\n      );\r\n    }\r\n\r\n    private _generateMenuRoutes(store: IAppState) {\r\n      let keyFnc: (key: string) => string;\r\n      const userAccessPermissions = this._getUserAccessPermission();\r\n\r\n      if (store.publisher && store.publisher.id) {\r\n        const publisherId = store.publisher.id.toString();\r\n        keyFnc = (key) => {\r\n          return `/${publisherId}/${key}`;\r\n        };\r\n      } else {\r\n        keyFnc = (key) => `/${key}`;\r\n      }\r\n\r\n      if (!hasReadAccess(userAccessPermissions === null ? completeAccess : userAccessPermissions.accessPermission)) {\r\n        return getRoutes(this.props.intl.formatMessage)\r\n          .filter((route) => route.key !== RouteName.user)\r\n          .map(\r\n            (route) =>\r\n              ({\r\n                key: keyFnc(route.key),\r\n                text: route.text,\r\n                icon: route.icon,\r\n              } as IRoute)\r\n          );\r\n      }\r\n      // Update the menu routes according to whether the publisher/account were specified.\r\n      return getRoutes(this.props.intl.formatMessage).map(\r\n        (route) =>\r\n          ({\r\n            key: keyFnc(route.key),\r\n            text: route.text,\r\n            icon: route.icon,\r\n          } as IRoute)\r\n      );\r\n    }\r\n\r\n    private _renderHeader = (): JSX.Element => {\r\n      // Support non pub urls as well. When nothing matched, go back to home to do the default route.\r\n      return (\r\n        <React.Fragment>\r\n          <Switch>\r\n            <Route\r\n              path={`${this.props.match.url}/:publisherId`}\r\n              render={(props) => <PartnerManagementHeader {...props} isAccountHidden={true} isAccountSelectionDisabled={true} />}\r\n            />\r\n            <Route path=\"*\" render={() => <Redirect to={this.props.match.url} />} />\r\n          </Switch>\r\n        </React.Fragment>\r\n      );\r\n    };\r\n\r\n    private _getUserAccessPermission(): UserAccessPermissions | null {\r\n      const userRoles = localStorage.getItem(userRoleKey);\r\n      if (userRoles === null) {\r\n        return null;\r\n      }\r\n      const userRolesJSON = JSON.parse(userRoles);\r\n\r\n      for (const value in userRolesJSON) {\r\n        if (value === UserRoleEntity.User) {\r\n          return JSON.parse(userRolesJSON[value]);\r\n        }\r\n      }\r\n\r\n      return null;\r\n    }\r\n  }\r\n);\r\n","import { mutator } from 'satcheljs';\r\nimport { onCurrentRouteChanged } from '../actions';\r\nimport { getPageStore } from '../store/store';\r\n\r\nmutator(onCurrentRouteChanged, (msg) => {\r\n  getPageStore().currentRoute = msg.currentRoute;\r\n});\r\n","import { mutator } from 'satcheljs';\r\nimport { onReportingEnabled } from '../actions';\r\nimport { getPageStore } from '../store/store';\r\n\r\nmutator(onReportingEnabled, (msg) => {\r\n  getPageStore().isReportEnabled = msg.isEnabled;\r\n});\r\n","import { orchestrator } from 'satcheljs';\r\nimport { APP_NAME_NEW, PUBCENTER_TITLE } from '../../../../constants/AppConstants';\r\nimport { isLocationPubCenter } from '../../../../utils';\r\nimport { getRoutes } from '../../ReportRouter';\r\nimport { onCurrentRouteChanged } from '../actions';\r\n\r\norchestrator(onCurrentRouteChanged, ({ currentRoute, formatMessage }) => {\r\n  const pageName = formatMessage ? getRoutes(formatMessage).find((route) => route.key === currentRoute)?.text : currentRoute.toString();\r\n  const appName = isLocationPubCenter() ? PUBCENTER_TITLE : APP_NAME_NEW;\r\n  document.title = `${appName} - ${pageName}`;\r\n});\r\n","import { MessageBarType } from '@fluentui/react';\r\nimport { orchestrator } from 'satcheljs';\r\nimport { getAppStore, onLoadingChanged, onNotificationChanged } from '../../../../@data';\r\nimport { uiConfig } from '../../../../config/ui.config';\r\nimport messages from '../../Report.messages';\r\nimport { onReportLinkClicked } from '../actions';\r\nimport { setUserPublisherContext } from '../services/ReportService';\r\n\r\norchestrator(onReportLinkClicked, async () => {\r\n  const { publisher, userContext } = getAppStore();\r\n\r\n  if (publisher && publisher.id && userContext) {\r\n    onLoadingChanged(true);\r\n    try {\r\n      const commonsession = await setUserPublisherContext(userContext, publisher.id);\r\n      // open a new window\r\n      window.open(uiConfig.getReportingDashboardAddress(commonsession));\r\n    } catch (e) {\r\n      onNotificationChanged({\r\n        textMessageDescriptor: messages.reportsNotAvailableAtThisTime,\r\n        messageBarType: MessageBarType.severeWarning,\r\n      });\r\n    } finally {\r\n      onLoadingChanged(false);\r\n    }\r\n  } else {\r\n    onNotificationChanged({\r\n      textMessageDescriptor: messages.reportInvalidState,\r\n      messageBarType: MessageBarType.severeWarning,\r\n    });\r\n  }\r\n});\r\n","import { MessageBarType } from '@fluentui/react';\r\nimport { orchestrator } from 'satcheljs';\r\nimport { getAppStore, getEntity, onLoadingChanged, onNotificationChanged, Publisher } from '../../../../@data';\r\nimport messages from '../../Report.messages';\r\nimport { onReportingEnabled, onSetPublisherReporting } from '../actions';\r\n\r\norchestrator(onSetPublisherReporting, async (msg) => {\r\n  const { userContext } = getAppStore();\r\n  const publisher = msg.publisher;\r\n\r\n  if (publisher && publisher.id && userContext) {\r\n    try {\r\n      onLoadingChanged(true);\r\n      const rawPublisher = await getEntity<Publisher>([publisher], userContext);\r\n      if (rawPublisher.allowPaidSearchReportingDashboard) {\r\n        onReportingEnabled(rawPublisher.allowPaidSearchReportingDashboard);\r\n      } else {\r\n        onReportingEnabled(false);\r\n      }\r\n    } catch (e) {\r\n      onNotificationChanged({\r\n        textMessageDescriptor: messages.failedToFetchPublisherReportDetails,\r\n        messageBarType: MessageBarType.severeWarning,\r\n      });\r\n    } finally {\r\n      onLoadingChanged(false);\r\n    }\r\n  } else {\r\n    onNotificationChanged({\r\n      textMessageDescriptor: messages.reportInvalidState,\r\n      messageBarType: MessageBarType.severeWarning,\r\n    });\r\n  }\r\n});\r\n","import {\r\n  ADUNIT_CHART_TYPE_BAR_BUTTON,\r\n  ADUNIT_CHART_TYPE_DONUT_BUTTON,\r\n  ADUNIT_CHART_TYPE_GRID_BUTTON,\r\n  COUNTRY_CHART_TYPE_BAR_BUTTON,\r\n  COUNTRY_CHART_TYPE_GRID_BUTTON,\r\n  COUNTRY_CHART_TYPE_MAP_BUTTON,\r\n  MEDIATION_CHART_TYPE_BAR_BUTTON,\r\n  MEDIATION_CHART_TYPE_DONUT_BUTTON,\r\n  MEDIATION_CHART_TYPE_GRID_BUTTON,\r\n  PERFORMANCE_CHART_TYPE_BAR_BUTTON,\r\n  PERFORMANCE_CHART_TYPE_DONUT_BUTTON,\r\n  PERFORMANCE_CHART_TYPE_LINE_BUTTON,\r\n  SITE_CHART_TYPE_BAR_BUTTON,\r\n  SITE_CHART_TYPE_DONUT_BUTTON,\r\n  SITE_CHART_TYPE_GRID_BUTTON,\r\n} from '../../../constants/DataTestIdConstants';\r\nimport { ChartTypes, IChartButton } from '../DashboardCards/ReportCard/ReportCard.types';\r\n\r\nexport const PERFORMANCE_ALLOWED_CHARTS: IChartButton[] = [\r\n  { chartType: ChartTypes.LINE, disabled: false, iconName: '', dataTestId: PERFORMANCE_CHART_TYPE_LINE_BUTTON },\r\n];\r\nexport const DETAILED_PERFORMANCE_ALLOWED_CHARTS: IChartButton[] = [\r\n  { chartType: ChartTypes.LINE, disabled: false, iconName: 'LineChart', dataTestId: PERFORMANCE_CHART_TYPE_LINE_BUTTON },\r\n  { chartType: ChartTypes.BAR, disabled: true, iconName: 'BarChartHorizontal', dataTestId: PERFORMANCE_CHART_TYPE_BAR_BUTTON },\r\n  { chartType: ChartTypes.DONUT, disabled: true, iconName: 'DonutChart', dataTestId: PERFORMANCE_CHART_TYPE_DONUT_BUTTON },\r\n];\r\nexport const ADUNIT_ALLOWED_CHARTS: IChartButton[] = [\r\n  { chartType: ChartTypes.DONUT, disabled: false, iconName: 'DonutChart', dataTestId: ADUNIT_CHART_TYPE_DONUT_BUTTON },\r\n  { chartType: ChartTypes.BAR, disabled: false, iconName: 'BarChartHorizontal', dataTestId: ADUNIT_CHART_TYPE_BAR_BUTTON },\r\n  { chartType: ChartTypes.GRID, disabled: false, iconName: 'GridViewSmall', dataTestId: ADUNIT_CHART_TYPE_GRID_BUTTON },\r\n];\r\nexport const DETAILED_ADUNIT_ALLOWED_CHARTS: IChartButton[] = [\r\n  { chartType: ChartTypes.LINE, disabled: false, iconName: 'LineChart', dataTestId: ADUNIT_CHART_TYPE_DONUT_BUTTON },\r\n  { chartType: ChartTypes.DONUT, disabled: false, iconName: 'DonutChart', dataTestId: ADUNIT_CHART_TYPE_BAR_BUTTON },\r\n  { chartType: ChartTypes.BAR, disabled: false, iconName: 'BarChartHorizontal', dataTestId: ADUNIT_CHART_TYPE_GRID_BUTTON },\r\n];\r\nexport const SITE_ALLOWED_CHARTS: IChartButton[] = [\r\n  { chartType: ChartTypes.DONUT, disabled: false, iconName: 'DonutChart', dataTestId: SITE_CHART_TYPE_DONUT_BUTTON },\r\n  { chartType: ChartTypes.BAR, disabled: false, iconName: 'BarChartHorizontal', dataTestId: SITE_CHART_TYPE_BAR_BUTTON },\r\n  { chartType: ChartTypes.GRID, disabled: false, iconName: 'GridViewSmall', dataTestId: SITE_CHART_TYPE_GRID_BUTTON },\r\n];\r\nexport const DETAILED_SITE_ALLOWED_CHARTS: IChartButton[] = [\r\n  { chartType: ChartTypes.LINE, disabled: false, iconName: 'LineChart', dataTestId: SITE_CHART_TYPE_DONUT_BUTTON },\r\n  { chartType: ChartTypes.DONUT, disabled: false, iconName: 'DonutChart', dataTestId: SITE_CHART_TYPE_BAR_BUTTON },\r\n  { chartType: ChartTypes.BAR, disabled: false, iconName: 'BarChartHorizontal', dataTestId: SITE_CHART_TYPE_GRID_BUTTON },\r\n];\r\nexport const MEDIATION_ALLOWED_CHARTS: IChartButton[] = [\r\n  { chartType: ChartTypes.DONUT, disabled: false, iconName: 'DonutChart', dataTestId: MEDIATION_CHART_TYPE_DONUT_BUTTON },\r\n  { chartType: ChartTypes.BAR, disabled: false, iconName: 'BarChartHorizontal', dataTestId: MEDIATION_CHART_TYPE_BAR_BUTTON },\r\n  { chartType: ChartTypes.GRID, disabled: false, iconName: 'GridViewSmall', dataTestId: MEDIATION_CHART_TYPE_GRID_BUTTON },\r\n];\r\nexport const DETAILED_MEDIATION_ALLOWED_CHARTS: IChartButton[] = [\r\n  { chartType: ChartTypes.LINE, disabled: false, iconName: 'LineChart', dataTestId: MEDIATION_CHART_TYPE_DONUT_BUTTON },\r\n  { chartType: ChartTypes.DONUT, disabled: false, iconName: 'DonutChart', dataTestId: MEDIATION_CHART_TYPE_BAR_BUTTON },\r\n  { chartType: ChartTypes.BAR, disabled: false, iconName: 'BarChartHorizontal', dataTestId: MEDIATION_CHART_TYPE_GRID_BUTTON },\r\n];\r\nexport const COUNTRY_ALLOWED_CHARTS: IChartButton[] = [\r\n  { chartType: ChartTypes.MAP, disabled: false, iconName: 'World', dataTestId: COUNTRY_CHART_TYPE_MAP_BUTTON },\r\n  { chartType: ChartTypes.BAR, disabled: false, iconName: 'BarChartHorizontal', dataTestId: COUNTRY_CHART_TYPE_BAR_BUTTON },\r\n  { chartType: ChartTypes.GRID, disabled: false, iconName: 'GridViewSmall', dataTestId: COUNTRY_CHART_TYPE_GRID_BUTTON },\r\n];\r\nexport const DETAILED_COUNTRY_ALLOWED_CHARTS: IChartButton[] = [\r\n  { chartType: ChartTypes.LINE, disabled: false, iconName: 'LineChart', dataTestId: COUNTRY_CHART_TYPE_MAP_BUTTON },\r\n  { chartType: ChartTypes.MAP, disabled: false, iconName: 'World', dataTestId: COUNTRY_CHART_TYPE_BAR_BUTTON },\r\n  { chartType: ChartTypes.BAR, disabled: false, iconName: 'BarChartHorizontal', dataTestId: COUNTRY_CHART_TYPE_GRID_BUTTON },\r\n];\r\n","import { TythonColumnsEnum } from '../@data/store/schema/ColumnsEnum';\r\n\r\nexport const EXCLUDED_FILTER_COLUMNS: TythonColumnsEnum[] = [TythonColumnsEnum.DateTime, TythonColumnsEnum.Date];\r\nexport const ALLOWED_MEDIATION_FILTER_COLUMNS: TythonColumnsEnum[] = [TythonColumnsEnum.AdUnitName];\r\nexport const MEDIATION_DEFAULT_COLUMNS: TythonColumnsEnum[] = [\r\n  TythonColumnsEnum.AdClicks,\r\n  TythonColumnsEnum.AdECPM,\r\n  TythonColumnsEnum.Revenue,\r\n  TythonColumnsEnum.Date,\r\n  TythonColumnsEnum.AdUnitName,\r\n];\r\nexport const MEDIATION_DEFAULT_METRICS: TythonColumnsEnum[] = [TythonColumnsEnum.Revenue];\r\n\r\nexport const ADUNIT_DEFAULT_COLUMNS: TythonColumnsEnum[] = [\r\n  TythonColumnsEnum.Clicks,\r\n  TythonColumnsEnum.eCPM,\r\n  TythonColumnsEnum.Revenue,\r\n  TythonColumnsEnum.DateTime,\r\n  TythonColumnsEnum.AdUnitName,\r\n];\r\nexport const ADUNIT_DEFAULT_METRICS: TythonColumnsEnum[] = [TythonColumnsEnum.Revenue];\r\n\r\nexport const SITE_DEFAULT_COLUMNS: TythonColumnsEnum[] = [\r\n  TythonColumnsEnum.Clicks,\r\n  TythonColumnsEnum.eCPM,\r\n  TythonColumnsEnum.Revenue,\r\n  TythonColumnsEnum.DateTime,\r\n  TythonColumnsEnum.PropertyUrl,\r\n];\r\nexport const SITE_DEFAULT_METRICS: TythonColumnsEnum[] = [TythonColumnsEnum.Revenue];\r\n\r\nexport const PERFORMANCE_DEFAULT_METRICS: TythonColumnsEnum[] = [\r\n  TythonColumnsEnum.ImpressionsServed,\r\n  TythonColumnsEnum.Clicks,\r\n  TythonColumnsEnum.Revenue,\r\n];\r\nexport const PERFORMANCE_DEFAULT_COLUMNS: TythonColumnsEnum[] = [\r\n  TythonColumnsEnum.Clicks,\r\n  TythonColumnsEnum.eCPM,\r\n  TythonColumnsEnum.Revenue,\r\n  TythonColumnsEnum.DateTime,\r\n  TythonColumnsEnum.AdUnitName,\r\n];\r\n\r\nexport const COUNTRY_DEFAULT_COLUMNS: TythonColumnsEnum[] = [\r\n  TythonColumnsEnum.Clicks,\r\n  TythonColumnsEnum.eCPM,\r\n  TythonColumnsEnum.Revenue,\r\n  TythonColumnsEnum.DateTime,\r\n  TythonColumnsEnum.Country,\r\n];\r\nexport const COUNTRY_DEFAULT_METRICS: TythonColumnsEnum[] = [TythonColumnsEnum.Revenue];\r\n\r\nexport const REPORT_ONBOARDING_RENDER_FLAG = 'isReportOnboardingExperienceTriggered';\r\nexport const REPORT_OLD_DATA_NOTIFICATION_DISMISS_FLAG = 'isOldDataNotificationDismissed';\r\n","import { useMemo } from 'react';\r\nimport { AdSenseOAuthStatus } from '../../../@data/store/schema/enums/AdSenseOAuthStatus';\r\nimport { getGoogleAdSenseStore } from '../../ad-management/Account/Settings/components/GoogleConnector/@data';\r\n\r\nexport const useMediationAvailable = () => {\r\n  const { active } = getGoogleAdSenseStore();\r\n  const isMediationAvailable = useMemo(() => active?.connectionStatus === AdSenseOAuthStatus.Success && active?.isMediationEnabled, [\r\n    active.connectionStatus,\r\n    active.isMediationEnabled,\r\n  ]);\r\n  return { isMediationAvailable };\r\n};\r\n","import { getDataFromURL } from '../@data/store/UrlQueryStore';\r\nimport { ReportsQueryStoreKeys } from '../@data/store/schema/ReportsQueryStoreKeys';\r\nimport { ICustomCalenderDateRange, RangeType } from '../components/CustomCalender/CustomCalender.types';\r\nimport { get7DaysExcludingToday } from '../components/CustomCalender/utils/CalenderUtils';\r\nimport { checkIfValidDateRange } from './checkIfValidDateRange';\r\n\r\nexport function getInitialDateRange() {\r\n  const last7Days = get7DaysExcludingToday();\r\n  let initialStartDate = last7Days[0];\r\n  let initialEndDate = last7Days[last7Days.length - 1];\r\n  const storedDateRange = getDataFromURL<ICustomCalenderDateRange>(ReportsQueryStoreKeys.DATE_RANGE)!;\r\n  if (storedDateRange && checkIfValidDateRange(storedDateRange)) {\r\n    initialStartDate = new Date(storedDateRange.startDate);\r\n    initialEndDate = new Date(storedDateRange.endDate);\r\n  }\r\n  return { dateRange: { initialStartDate, initialEndDate }, initialDateRangeType: getInitialDateRangeType() };\r\n}\r\nexport function getInitialDateRangeType() {\r\n  const storedDateRangeType = getDataFromURL<RangeType>(ReportsQueryStoreKeys.DATE_RANGE_TYPE);\r\n  let initialRangeType = RangeType.Last7ExcludingToday;\r\n  if (storedDateRangeType && RangeType[storedDateRangeType]) {\r\n    initialRangeType = storedDateRangeType;\r\n  }\r\n  return initialRangeType;\r\n}\r\n","import { ICustomCalenderDateRange } from '../components/CustomCalender/CustomCalender.types';\r\n\r\nexport function checkIfValidDateRange(dateRange: ICustomCalenderDateRange) {\r\n  const parsedStartDate = Date.parse(dateRange.startDate.toString());\r\n  const parsedEndDate = Date.parse(dateRange.endDate.toString());\r\n  if (!(parsedStartDate && parsedEndDate)) {\r\n    return false;\r\n  }\r\n  if (parsedEndDate < parsedStartDate) {\r\n    return false;\r\n  }\r\n  return true;\r\n}\r\n","import { getTheme, IStackTokens, mergeStyleSets } from '@fluentui/react';\r\nimport { IPubcenterPalette, IPubcenterSpacing, IPubcenterTheme } from '../../../../../theme';\r\nimport { IMetricMarkerProps } from './MetricMarker.types';\r\n\r\ntype StyleProperties = 'marker' | 'contentStyle' | 'markerName' | 'markerData' | 'markerWrapper' | 'tooltip';\r\ntype MetricMarkerStyles = Record<StyleProperties, string>;\r\n\r\nexport const getStyles = (props: Partial<IMetricMarkerProps>): MetricMarkerStyles => {\r\n  const { isActive, color, isIncompatible } = props;\r\n  const theme = getTheme();\r\n  const spacing = theme.spacing as IPubcenterSpacing;\r\n  const palette = theme.palette as IPubcenterPalette;\r\n  return mergeStyleSets({\r\n    marker: {\r\n      height: '40px',\r\n      minHeight: '5px',\r\n      maxWidth: '5px',\r\n      minWidth: '5px',\r\n      backgroundColor: isActive ? color : palette.neutralLight,\r\n      ...(isIncompatible && { backgroundColor: palette.neutralTertiary }),\r\n    },\r\n    contentStyle: { display: 'flex', flexDirection: 'column', justifyContent: 'center' },\r\n    markerName: { fontSize: theme.fonts.medium },\r\n    markerData: { fontWeight: 'bold', fontSize: theme.fonts.large.fontSize, gap: '8px', display: 'flex' },\r\n    tooltip: { fontSize: theme.fonts.medium.fontSize, pointerEvents: 'auto' },\r\n    markerWrapper: {\r\n      display: 'flex',\r\n      gap: spacing.size12,\r\n      paddingRight: spacing.size12,\r\n      boxSizing: 'border-box',\r\n      ':hover': {\r\n        backgroundColor: palette.neutralLighter,\r\n      },\r\n      minWidth: '160px',\r\n      ...(isIncompatible && { color: palette.neutralTertiary, pointerEvents: 'none' }),\r\n    },\r\n  });\r\n};\r\nexport function getClassNames<PropType>(props?: PropType) {\r\n  return getStyles({ ...props });\r\n}\r\nexport function getStackTokens(): IStackTokens {\r\n  const theme = (getTheme() as unknown) as IPubcenterTheme;\r\n  const spacing = theme.spacing;\r\n\r\n  return { childrenGap: spacing.size12 };\r\n}\r\n","import React from 'react';\r\nimport { IconTooltip } from '../../../../components/IconTooltip/IconTooltip';\r\nimport { injectIntlAndObserver } from '../../../../utils';\r\nimport { getClassNames } from './MetricMarker.styles';\r\nimport { IMetricMarkerIntlProps } from './MetricMarker.types';\r\n\r\nexport const MetricMarker = injectIntlAndObserver(\r\n  ({ color, metricData, metricName, isActive, isIncompatible, incompatibleTooltipCantText, onClick }: IMetricMarkerIntlProps) => {\r\n    const { contentStyle, marker, markerData, markerName, markerWrapper, tooltip } = getClassNames({ color, isActive, isIncompatible });\r\n\r\n    return (\r\n      <div onClick={!isIncompatible ? onClick : undefined} className={markerWrapper}>\r\n        <div className={marker} />\r\n        <div className={contentStyle}>\r\n          <span className={markerData}>\r\n            {isIncompatible || !metricData ? '- -' : metricData}\r\n            {isIncompatible && (\r\n              <span className={tooltip}>\r\n                <IconTooltip tooltipMessage={incompatibleTooltipCantText || ''} iconName={'warning'} />\r\n              </span>\r\n            )}\r\n          </span>\r\n          <span className={markerName}>{metricName}</span>\r\n        </div>\r\n      </div>\r\n    );\r\n  }\r\n);\r\n","import { getTheme, IStackTokens, mergeStyleSets } from '@fluentui/react';\r\nimport { IPubcenterPalette, IPubcenterSpacing } from '../../../../../theme';\r\n\r\ntype StyleProperties = 'contentStyle' | 'markerWrapper' | 'listItem' | 'panelButton' | 'columnTooltip' | 'columnCheckboxWrapper';\r\ntype ChartMetricPickerStyles = Record<StyleProperties, string>;\r\nconst theme = getTheme();\r\nconst spacing = theme.spacing as IPubcenterSpacing;\r\nconst palette = theme.palette as IPubcenterPalette;\r\nexport const getStyles = (): ChartMetricPickerStyles => {\r\n  return mergeStyleSets({\r\n    contentStyle: { display: 'flex', flexDirection: 'column', justifyContent: 'center', width: '100%' },\r\n    markerWrapper: {\r\n      display: 'flex',\r\n      justifyContent: 'center',\r\n      ':hover': {\r\n        backgroundColor: palette.neutralLighter,\r\n      },\r\n      minWidth: '75px',\r\n    },\r\n    listItem: {\r\n      position: 'relative',\r\n      boxSizing: 'border-box',\r\n      display: 'block',\r\n      minHeight: '30px',\r\n      padding: spacing.size12,\r\n      ':hover': {\r\n        backgroundColor: palette.neutralLighter,\r\n      },\r\n    },\r\n    panelButton: {\r\n      display: 'flex',\r\n      selectors: {\r\n        '.ms-Button': {\r\n          marginRight: spacing.size8,\r\n        },\r\n      },\r\n    },\r\n    columnTooltip: {\r\n      paddingTop: spacing.size8,\r\n      paddingBottom: spacing.size8,\r\n      marginBottom: spacing.size8,\r\n    },\r\n    columnCheckboxWrapper: {\r\n      display: 'flex',\r\n      gap: spacing.size8,\r\n      alignItems: 'center',\r\n    },\r\n  });\r\n};\r\n\r\nexport const customStyles = {\r\n  addMetricButtonRootStyle: { width: '100%' },\r\n  sidePanelStyles: {\r\n    header: {\r\n      marginBottom: spacing.size24,\r\n    },\r\n    content: {\r\n      display: 'flex',\r\n      flexDirection: 'column',\r\n    },\r\n    footer: {\r\n      borderTopStyle: 'solid',\r\n      borderColor: theme.palette.neutralLight,\r\n      borderTopWidth: 1,\r\n    },\r\n  },\r\n  columnCheckbox: {\r\n    root: {\r\n      paddingTop: spacing.size8,\r\n      paddingBottom: spacing.size8,\r\n      marginBottom: spacing.size8,\r\n    },\r\n  },\r\n};\r\nexport function getClassNames<PropType>(props?: PropType) {\r\n  return getStyles();\r\n}\r\nexport function getStackTokens(): IStackTokens {\r\n  return { childrenGap: spacing.size12 };\r\n}\r\n","import { IconButton } from '@fluentui/react';\r\nimport React from 'react';\r\nimport { InjectedIntlProps, injectIntl } from 'react-intl';\r\nimport { useI18n } from '../../../../../i18n/useI18n';\r\nimport { getAppStore } from '../../../../@data';\r\nimport { getStore } from '../../../ad-management/Account/Settings/@data/store/store';\r\nimport { TythonColumnsEnum } from '../../@data/store/schema/ColumnsEnum';\r\nimport { default as messages } from '../../Report.messages';\r\nimport { formatMetric } from '../../utils/metricsFormatter';\r\nimport { TythonReportingDataRow } from '../@data/store/schema';\r\nimport { MetricMarker } from '../MetricMarker/MetricMarker';\r\nimport { IMetricMarkerProps } from '../MetricMarker/MetricMarker.types';\r\nimport { ActiveMetrics } from '../ReportCard/ReportCard.types';\r\nimport { customStyles, getClassNames } from './ChartMetricPicker.styles';\r\n\r\nexport interface IChartMetricPickerProps extends InjectedIntlProps {\r\n  mode?: ChartSelectionMode;\r\n  summaryData?: TythonReportingDataRow;\r\n  activeMetrics: ActiveMetrics;\r\n  onMetricSelected: (selectedMetric: IMetricMarkerProps) => void;\r\n  onEditButtonClicked: () => void;\r\n}\r\nexport enum ChartSelectionMode {\r\n  SINGLE = 'single',\r\n  MULTI = 'multi',\r\n}\r\nexport const ChartMetricPicker = injectIntl(\r\n  ({ activeMetrics, summaryData, onMetricSelected, onEditButtonClicked, intl: { formatMessage } }: IChartMetricPickerProps) => {\r\n    const { contentStyle, markerWrapper } = getClassNames();\r\n    const { publisher, userContext } = getAppStore();\r\n    const { systemPreferences } = getStore().active;\r\n    const { locale } = useI18n({ systemPreferences, publisher, userContext });\r\n\r\n    const renderMarker = (metricProps: IMetricMarkerProps): JSX.Element => {\r\n      return (\r\n        <MetricMarker\r\n          key={metricProps.metricKey}\r\n          color={metricProps.color}\r\n          metricName={metricProps.metricName}\r\n          metricData={formatMetric(TythonColumnsEnum[metricProps.metricKey], summaryData?.[metricProps.metricKey], locale)}\r\n          isActive={metricProps.isActive}\r\n          onClick={() => {\r\n            onMetricSelected(metricProps);\r\n          }}\r\n          metricKey={''}\r\n          isVisible={metricProps.isVisible}\r\n          disabled={metricProps.disabled}\r\n          isIncompatible={metricProps.isIncompatible}\r\n          incompatibleTooltipCantText={metricProps.incompatibleTooltipCantText}\r\n          incompatibleTooltipWontText={metricProps.incompatibleTooltipWontText}\r\n        />\r\n      );\r\n    };\r\n    const renderVisibleMarkers = () => {\r\n      return Object.keys(activeMetrics)\r\n        .filter((key) => activeMetrics[key].isVisible && !activeMetrics[key].disabled)\r\n        .map((key) => renderMarker(activeMetrics[key]));\r\n    };\r\n    return (\r\n      <>\r\n        {renderVisibleMarkers()}\r\n        <div className={markerWrapper}>\r\n          <div className={contentStyle}>\r\n            <IconButton\r\n              iconProps={{ iconName: 'Edit' }}\r\n              onClick={onEditButtonClicked}\r\n              styles={{ root: customStyles.addMetricButtonRootStyle }}\r\n              title={formatMessage(messages.metricPickerEditButtonTitle)}\r\n            />\r\n          </div>\r\n        </div>\r\n      </>\r\n    );\r\n  }\r\n);\r\n","import { Checkbox, DefaultButton, List, Panel, PanelType, PrimaryButton } from '@fluentui/react';\r\nimport React, { useState } from 'react';\r\nimport { InjectedIntlProps, injectIntl } from 'react-intl';\r\nimport AppMessages from '../../../../App.messages';\r\nimport { IconTooltip } from '../../../../components/IconTooltip/IconTooltip';\r\nimport { IMetricMarkerProps } from '../MetricMarker/MetricMarker.types';\r\nimport { ActiveMetrics } from '../ReportCard/ReportCard.types';\r\nimport { customStyles, getClassNames } from './ChartMetricPicker.styles';\r\n\r\nexport interface IMetricsSidePanelProps extends InjectedIntlProps {\r\n  onMetricsChanged: (activeMetrics: ActiveMetrics) => void;\r\n  activeMetrics: ActiveMetrics;\r\n  isOpen: boolean;\r\n  onPanelHide: () => void;\r\n}\r\n\r\nexport const MetricsSidePanel = injectIntl(\r\n  ({ isOpen, activeMetrics, onPanelHide, onMetricsChanged, intl: { formatMessage } }: IMetricsSidePanelProps) => {\r\n    const { panelButton, columnTooltip, columnCheckboxWrapper } = getClassNames();\r\n    const [availableMetrics, setAvailableMetrics] = useState<IMetricMarkerProps[]>([]);\r\n    const onRenderCell = (item: IMetricMarkerProps): JSX.Element => {\r\n      return (\r\n        <div className={columnCheckboxWrapper}>\r\n          <Checkbox\r\n            label={item.metricName}\r\n            defaultChecked={item.isVisible}\r\n            onChange={(_, value) => {\r\n              const temp = {\r\n                ...item,\r\n                isVisible: !!value,\r\n                isActive: !value ? false : item.isActive,\r\n              };\r\n              setAvailableMetrics([...availableMetrics, temp]);\r\n            }}\r\n            styles={customStyles.columnCheckbox}\r\n          />\r\n          {item.isIncompatible && (\r\n            <div className={columnTooltip}>\r\n              <IconTooltip tooltipMessage={item.incompatibleTooltipWontText || ''} iconName={'warning'} />\r\n            </div>\r\n          )}\r\n        </div>\r\n      );\r\n    };\r\n    const onSave = () => {\r\n      for (const updatedMetric of availableMetrics) {\r\n        activeMetrics[updatedMetric.metricKey] = { ...updatedMetric };\r\n      }\r\n      setAvailableMetrics([]);\r\n      onMetricsChanged({ ...activeMetrics });\r\n      onPanelHide();\r\n    };\r\n    return (\r\n      <Panel\r\n        isOpen={isOpen}\r\n        type={PanelType.smallFixedFar}\r\n        isLightDismiss\r\n        onDismiss={onPanelHide}\r\n        headerText={formatMessage(AppMessages.addMetrics)}\r\n        closeButtonAriaLabel={formatMessage(AppMessages.panelCloseButtonAriaDesc)}\r\n        isFooterAtBottom={true}\r\n        styles={customStyles.sidePanelStyles}\r\n        onRenderFooterContent={() => {\r\n          return (\r\n            <div className={panelButton}>\r\n              <PrimaryButton\r\n                onClick={onSave}\r\n                text={formatMessage(AppMessages.save)}\r\n                ariaDescription={formatMessage(AppMessages.ariaLabelForSave)}\r\n              />\r\n              <DefaultButton onClick={onPanelHide} text={formatMessage(AppMessages.cancel)} />\r\n            </div>\r\n          );\r\n        }}\r\n      >\r\n        <List items={Object.values(activeMetrics).filter((metric) => !metric.disabled)} onRenderCell={onRenderCell} />\r\n      </Panel>\r\n    );\r\n  }\r\n);\r\n","import { getTheme, IStackTokens, ITheme, mergeStyleSets } from '@fluentui/react';\r\nimport { AccessibilityContrast, IPubcenterPalette, IPubcenterTheme } from '../../../../../theme';\r\n\r\nexport interface IReportCardStyleProps {\r\n  theme: ITheme;\r\n}\r\n\r\ntype StyleProperties = 'active' | 'metricsDropdown' | 'cardWrapper' | 'buttonBorder' | 'cardsTitleBarStyle' | 'linkStyle';\r\ntype ReportCardStyles = Record<StyleProperties, string>;\r\n\r\nexport const getStyles = (props: IReportCardStyleProps): ReportCardStyles => {\r\n  const { theme } = props;\r\n  const palette = theme.palette as IPubcenterPalette;\r\n  const { Activated } = AccessibilityContrast;\r\n\r\n  return mergeStyleSets({\r\n    active: {\r\n      backgroundColor: palette.themePrimary,\r\n      color: palette.themeLight,\r\n      ':hover': {\r\n        backgroundColor: palette.themePrimary,\r\n        color: palette.themeLight,\r\n      },\r\n      ':active': {\r\n        backgroundColor: palette.themePrimary,\r\n        color: palette.themeLight,\r\n      },\r\n      [Activated]: {\r\n        color: 'window',\r\n        backgroundColor: 'windowtext',\r\n        borderColor: 'windowtext',\r\n        forcedColorAdjust: 'none',\r\n      },\r\n    },\r\n    metricsDropdown: {\r\n      width: '30%',\r\n      paddingTop: '15px',\r\n      paddingBottom: '15px',\r\n    },\r\n    cardWrapper: {\r\n      height: '100%',\r\n    },\r\n    buttonBorder: {\r\n      border: '1px solid',\r\n      borderRadius: '2px',\r\n      borderColor: palette.neutralLight,\r\n    },\r\n    cardsTitleBarStyle: {\r\n      borderBottom: `1px solid ${palette.neutralLight}`,\r\n      boxSizing: 'border-box',\r\n    },\r\n    linkStyle: {\r\n      color: theme.palette.themePrimary,\r\n      textDecoration: 'none',\r\n    },\r\n  });\r\n};\r\nexport function getClassNames<PropType>(props?: PropType) {\r\n  return getStyles({ theme: getTheme(), ...props });\r\n}\r\nexport function getStackTokens(): IStackTokens {\r\n  const theme = (getTheme() as unknown) as IPubcenterTheme;\r\n  const spacing = theme.spacing;\r\n\r\n  return { childrenGap: spacing.size12 };\r\n}\r\nexport function getMetricPickerStackTokens(): IStackTokens {\r\n  return { childrenGap: `40px 20px` };\r\n}\r\n","import { DefaultButton } from '@fluentui/react';\r\nimport React from 'react';\r\nimport { InjectedIntlProps, injectIntl } from 'react-intl';\r\nimport { GRAIN_SELECTOR_BUTTON } from '../../../../constants/DataTestIdConstants';\r\nimport { getReportGrainsMetadataDisplayName } from '../../utils/intlHelper';\r\nimport { IMetadataElement } from '../@data/store/schema';\r\nimport { getClassNames } from '../ReportCard/ReportCard.styles';\r\nimport { ChartGrain } from '../ReportCard/ReportCard.types';\r\nexport interface IGrainSelectorProps extends InjectedIntlProps {\r\n  activeGrain: ChartGrain;\r\n  activeGrainChanged: (grain: ChartGrain) => void;\r\n  allowedGrains: IMetadataElement[];\r\n}\r\n\r\nexport const GrainSelector = injectIntl(\r\n  ({ allowedGrains, activeGrain, activeGrainChanged, intl: { formatMessage } }: IGrainSelectorProps) => {\r\n    const { active, buttonBorder } = getClassNames();\r\n    return (\r\n      <>\r\n        <div>\r\n          {allowedGrains\r\n            .filter((allowedGrain) => allowedGrain.key !== ChartGrain.NONE)\r\n            .map((allowedGrain) => {\r\n              const isActive = activeGrain === (allowedGrain.key as ChartGrain);\r\n              return (\r\n                <DefaultButton\r\n                  data-test-id={`${GRAIN_SELECTOR_BUTTON}-${allowedGrain.key}`}\r\n                  key={allowedGrain.key}\r\n                  className={isActive ? active : buttonBorder}\r\n                  toggle\r\n                  checked={isActive}\r\n                  text={getReportGrainsMetadataDisplayName(allowedGrain.key, formatMessage)}\r\n                  onClick={() => {\r\n                    activeGrainChanged(allowedGrain.key as ChartGrain);\r\n                  }}\r\n                  allowDisabledFocus\r\n                />\r\n              );\r\n            })}\r\n        </div>\r\n      </>\r\n    );\r\n  }\r\n);\r\n","import { defineMessages } from 'react-intl';\r\n\r\nexport default defineMessages({\r\n  backButtonAriaDesc: {\r\n    id: 'detailPage.backButtonAriaDesc',\r\n    defaultMessage: 'Click to go back to Dashboard',\r\n  },\r\n  breadcrumbAriaLabel: {\r\n    id: 'detailPage.breadcrumbAriaLabel',\r\n    defaultMessage: 'Bread crumb showing the heirarchy of reports',\r\n  },\r\n  exportButton: {\r\n    id: 'detailPage.exportButton',\r\n    defaultMessage: 'Export',\r\n  },\r\n  removeBreakdown: {\r\n    id: 'detailPage.removeBreakdown',\r\n    defaultMessage: 'Remove current break down',\r\n  },\r\n  generatingAndExportingPNG: {\r\n    id: 'detailsPage.generatingAndExportingPNG',\r\n    defaultMessage: 'Generating and exporting PNG',\r\n  },\r\n});\r\n","import { getTheme, ITheme, mergeStyleSets } from '@fluentui/react';\r\n\r\nexport interface IMenuItemWarningIconStyleProps {\r\n  theme: ITheme;\r\n}\r\n\r\ntype StyleProperties = 'wrapper';\r\ntype MenuItemWarningIconStyles = Record<StyleProperties, string>;\r\n\r\nexport const getStyles = (props: IMenuItemWarningIconStyleProps): MenuItemWarningIconStyles => {\r\n  return mergeStyleSets({\r\n    wrapper: {\r\n      display: 'flex',\r\n      gap: '10px',\r\n    },\r\n  });\r\n};\r\nexport function getClassNames<PropType>(props?: PropType) {\r\n  return getStyles({ theme: getTheme(), ...props });\r\n}\r\n","import React from 'react';\r\nimport { IconTooltip } from '../../../../../components/IconTooltip/IconTooltip';\r\nimport { getClassNames } from './MenuItemWarningIcon.styles';\r\n\r\nexport interface IMenuItemWarningIconProps {\r\n  text: string;\r\n  warningMessage: string;\r\n  isIncompatible: Boolean;\r\n}\r\n\r\nexport const MenuItemWarningIcon = (props: IMenuItemWarningIconProps) => {\r\n  const classNames = getClassNames(props);\r\n  const { warningMessage, isIncompatible, text } = props;\r\n  return (\r\n    <div className={classNames.wrapper}>\r\n      {text}\r\n      {isIncompatible && renderWarningIcon(warningMessage)}\r\n    </div>\r\n  );\r\n};\r\nfunction renderWarningIcon(message: string): React.ReactNode {\r\n  return <IconTooltip iconName=\"warning\" tooltipMessage={message} />;\r\n}\r\n","import { getTheme, ITheme, mergeStyleSets } from '@fluentui/react';\r\nimport { IPubcenterPalette } from '../../../../../../theme';\r\n\r\nexport interface IReportDetailsGridStyleProps {\r\n  theme: ITheme;\r\n}\r\n\r\ntype StyleProperties = 'breakdownWrapper' | 'breakdownText' | 'inCompatibleColumnWrapper';\r\ntype ReportDetailsGridStyles = Record<StyleProperties, string>;\r\n\r\nexport const getStyles = (props: IReportDetailsGridStyleProps): ReportDetailsGridStyles => {\r\n  const theme = getTheme();\r\n  const palette = theme.palette as IPubcenterPalette;\r\n  return mergeStyleSets({\r\n    breakdownWrapper: {\r\n      display: 'flex',\r\n      gap: '5px',\r\n    },\r\n    breakdownText: {\r\n      display: 'flex',\r\n      alignItems: 'center',\r\n    },\r\n    inCompatibleColumnWrapper: {\r\n      color: palette.neutralTertiary,\r\n      display: 'flex',\r\n      gap: '8px',\r\n    },\r\n  });\r\n};\r\nexport function getClassNames<PropType>(props?: PropType) {\r\n  return getStyles({ theme: getTheme(), ...props });\r\n}\r\n","import { Dropdown, DropdownMenuItemType, IconButton, SelectionMode } from '@fluentui/react';\r\nimport React, { useState } from 'react';\r\nimport { useI18n } from '../../../../../../i18n/useI18n';\r\nimport { getAppStore } from '../../../../../@data';\r\nimport { IconTooltip } from '../../../../../components/IconTooltip/IconTooltip';\r\nimport {\r\n  CommandBarActions,\r\n  Direction,\r\n  GridSelectionMode,\r\n  GridV2,\r\n  IBuildCommandBarProps,\r\n  IGridPageCommandBarItemProps,\r\n  IGridV2Column,\r\n} from '../../../../../layout/GridPageV2';\r\nimport { IRouterWithIntl, injectIntlAndObserver } from '../../../../../utils';\r\nimport { getStore } from '../../../../ad-management/Account/Settings/@data/store/store';\r\nimport { TythonColumnsEnum } from '../../../@data/store/schema/ColumnsEnum';\r\nimport { default as reportMessages } from '../../../Report.messages';\r\nimport { EXCLUDED_FILTER_COLUMNS } from '../../../constants/common';\r\nimport { FormatMessageFuncType, getReportColumnMetadataDisplayName } from '../../../utils/intlHelper';\r\nimport { roundMetric } from '../../../utils/metricsFormatter';\r\nimport { IMetadataElement, ReportingDataRow, TythonReportingDataRow } from '../../@data/store/schema';\r\nimport {\r\n  buildGridV2Columns,\r\n  getIncompatibleBreakdownMessage,\r\n  getIncompatibleColumnWithBreakdownAndFilterMessage,\r\n  getIncompatibleColumnWithBreakdownMessage,\r\n  getIncompatibleColumnWithFilterMessage,\r\n} from '../../ReportCard/ReportCard.helpers';\r\nimport { ChartGrain } from '../../ReportCard/ReportCard.types';\r\nimport { IActiveFilter } from '../ActionBar/ActionBar';\r\nimport reportDetailsMessages from '../ReportDetailsPage.messages';\r\nimport { MenuItemWarningIcon } from '../WarningIcon/MenuItemWarningIcon';\r\nimport { getClassNames } from './ReportDetailsGrid.styles';\r\n\r\nexport interface IReportDetailsGridProps extends IRouterWithIntl {\r\n  data: ReportingDataRow[];\r\n  isDetailedDataLoaded: boolean;\r\n  hasMinimumBreakdown: boolean;\r\n  dimensions: IMetadataElement[];\r\n  metrics: IMetadataElement[];\r\n  currentChartGrain: ChartGrain;\r\n  initialBreakdown: IMetadataElement[];\r\n  defaultColumns: TythonColumnsEnum[];\r\n  dateDimension: string;\r\n  filters: IActiveFilter[];\r\n  onBreakdownChanged: (newBreakdown: IMetadataElement[]) => void;\r\n}\r\nconst unAllowedBreakdown = EXCLUDED_FILTER_COLUMNS;\r\nconst removeKey = 'remove';\r\nexport const ReportDetailsGrid = injectIntlAndObserver<IReportDetailsGridProps>(\r\n  ({\r\n    data,\r\n    dimensions,\r\n    metrics,\r\n    isDetailedDataLoaded,\r\n    hasMinimumBreakdown,\r\n    initialBreakdown,\r\n    defaultColumns,\r\n    currentChartGrain,\r\n    dateDimension,\r\n    filters,\r\n    history,\r\n    match,\r\n    location,\r\n    onBreakdownChanged,\r\n    intl: { formatMessage },\r\n  }: IReportDetailsGridProps) => {\r\n    const classNames = getClassNames();\r\n    const { publisher, userContext } = getAppStore();\r\n    const { systemPreferences } = getStore().active;\r\n    const { locale } = useI18n({ systemPreferences, publisher, userContext });\r\n    const dateTimeColumn = dimensions.find((value) => value.key === TythonColumnsEnum.DateTime || value.key === TythonColumnsEnum.Date);\r\n    const addDateColumn = currentChartGrain !== ChartGrain.NONE && dateTimeColumn;\r\n    const breakdownList = dimensions.filter((value) => !unAllowedBreakdown.includes(value.key as TythonColumnsEnum));\r\n    const formattedData = formatDate(roundMetrics(data), currentChartGrain, dateDimension, locale);\r\n    const [activeDimensions, setActiveDimensions] = useState<IMetadataElement[]>(initialBreakdown);\r\n    const [metricColumns] = useState(\r\n      addCompatibilityProps(buildGridV2Columns([], metrics, defaultColumns, formatMessage), filters, activeDimensions)\r\n    );\r\n    const [dimensionColumns] = useState(\r\n      buildGridV2Columns(addDateColumn ? [dateTimeColumn, ...activeDimensions] : activeDimensions, [], defaultColumns, formatMessage)\r\n    );\r\n    const [gridColumns, setGridColumns] = useState(applyOrdering([...dimensionColumns, ...metricColumns]));\r\n\r\n    function addCompatibilityProps(\r\n      metricGridColumns: IGridV2Column[],\r\n      activeFilters: IActiveFilter[],\r\n      activeBreakdowns: IMetadataElement[] = []\r\n    ) {\r\n      return metricGridColumns.map((column) => {\r\n        const metricMetadata = metrics.find((metric) => metric.key === column.key);\r\n        const incompatibleFields = (metricMetadata && getIncompatibleBreakdown(metricMetadata, activeBreakdowns, formatMessage)) || [];\r\n        const breakdownIncompatibleMessage = getIncompatibleColumnWithBreakdownMessage(\r\n          getReportColumnMetadataDisplayName(column.key, formatMessage) || '',\r\n          incompatibleFields[0]\r\n        );\r\n        const isBreakdownIncompatible = incompatibleFields.length > 0;\r\n        const incompatibleFilters = (metricMetadata && getIncompatibleFilters(metricMetadata, activeFilters, formatMessage)) || [];\r\n        const filterIncompatibleMessage = getIncompatibleColumnWithFilterMessage(\r\n          getReportColumnMetadataDisplayName(column.key, formatMessage) || '',\r\n          incompatibleFilters[0]\r\n        );\r\n        const filterAndBreakdownIncompatibleMessage = getIncompatibleColumnWithBreakdownAndFilterMessage(\r\n          getReportColumnMetadataDisplayName(column.key, formatMessage) || '',\r\n          incompatibleFilters[0]\r\n        );\r\n        const isFilterIncompatible = incompatibleFilters.length > 0;\r\n        const isIncompatible = isBreakdownIncompatible || isFilterIncompatible;\r\n        const incompatibleMessage =\r\n          isBreakdownIncompatible && isFilterIncompatible\r\n            ? filterAndBreakdownIncompatibleMessage\r\n            : isBreakdownIncompatible\r\n            ? breakdownIncompatibleMessage\r\n            : filterIncompatibleMessage;\r\n        return {\r\n          ...column,\r\n          incompatibleProps: {\r\n            isIncompatible: isIncompatible,\r\n            incompatibleCantMessage: isIncompatible ? formatMessage(incompatibleMessage.cantMessage, incompatibleMessage.params) : '',\r\n            incompatibleWontMessage: isIncompatible ? formatMessage(incompatibleMessage.wontMessage, incompatibleMessage.params) : '',\r\n          },\r\n          suppressSorting: isIncompatible,\r\n          onRenderHeader: (props, defaultRender) => {\r\n            return isIncompatible ? (\r\n              <div className={classNames.inCompatibleColumnWrapper}>\r\n                <span>{props?.column.name}</span>\r\n                <IconTooltip\r\n                  tooltipMessage={isIncompatible ? formatMessage(incompatibleMessage.cantMessage, incompatibleMessage.params) : ''}\r\n                  iconName={'warning'}\r\n                />\r\n              </div>\r\n            ) : (\r\n              defaultRender(props)\r\n            );\r\n          },\r\n        };\r\n      });\r\n    }\r\n    const getBreakdownComponent = () => {\r\n      return (\r\n        <div className={classNames.breakdownWrapper}>\r\n          <div className={classNames.breakdownText}>{formatMessage(reportMessages.breakDownBy)}</div>\r\n          {activeDimensions.map((activeDimension, index) => {\r\n            return (\r\n              <Dropdown\r\n                key={index}\r\n                selectedKey={activeDimension.key}\r\n                onChange={(event, item) => {\r\n                  let newActiveDimensions;\r\n                  if (!item) {\r\n                    return;\r\n                  }\r\n                  if (item.key === removeKey) {\r\n                    newActiveDimensions = activeDimensions.filter((active) => {\r\n                      return active.key !== activeDimension.key;\r\n                    });\r\n                  } else {\r\n                    activeDimensions[index] = {\r\n                      displayName: item.text,\r\n                      key: String(item.key),\r\n                      filterKey: '',\r\n                      incompatibleFields: activeDimension.incompatibleFields,\r\n                    };\r\n                    newActiveDimensions = activeDimensions;\r\n                  }\r\n                  onBreakdownChanged([...newActiveDimensions]);\r\n                  setActiveDimensions([...newActiveDimensions]);\r\n                  setGridColumns(\r\n                    applyOrdering([\r\n                      ...buildGridV2Columns(\r\n                        addDateColumn ? [dateTimeColumn, ...newActiveDimensions] : newActiveDimensions,\r\n                        [],\r\n                        defaultColumns,\r\n                        formatMessage\r\n                      ),\r\n                      ...addCompatibilityProps(metricColumns, filters, newActiveDimensions),\r\n                    ])\r\n                  );\r\n                }}\r\n                onRenderOption={(option) => {\r\n                  return (\r\n                    <>\r\n                      <MenuItemWarningIcon\r\n                        text={option?.text || ''}\r\n                        warningMessage={option?.data?.incompatibleMessage || ''}\r\n                        isIncompatible={option?.data?.isIncompatible || false}\r\n                      />\r\n                    </>\r\n                  );\r\n                }}\r\n                options={[\r\n                  {\r\n                    key: removeKey,\r\n                    text: formatMessage(reportDetailsMessages.removeBreakdown),\r\n                    disabled: hasMinimumBreakdown && activeDimensions.length <= 1,\r\n                    title: formatMessage(reportDetailsMessages.removeBreakdown),\r\n                  },\r\n                  { key: 'divider_1', text: '-', itemType: DropdownMenuItemType.Divider },\r\n                  ...breakdownList.map((breakdown) => {\r\n                    const incompatibleMetrics = getIncompatibleFields(breakdown, gridColumns);\r\n                    const incompatibleMessage = getIncompatibleBreakdownMessage(\r\n                      incompatibleMetrics[0],\r\n                      getReportColumnMetadataDisplayName(breakdown.key, formatMessage)\r\n                    );\r\n\r\n                    return {\r\n                      key: breakdown.key,\r\n                      text: getReportColumnMetadataDisplayName(breakdown.key, formatMessage),\r\n                      disabled: !!activeDimensions.find((active) => active.key === breakdown.key),\r\n                      data: {\r\n                        isIncompatible: incompatibleMetrics.length > 0,\r\n                        incompatibleMessage: formatMessage(incompatibleMessage.message, incompatibleMessage.params),\r\n                      },\r\n                    };\r\n                  }),\r\n                ]}\r\n                dropdownWidth={'auto'}\r\n              />\r\n            );\r\n          })}\r\n          {activeDimensions.length < breakdownList.length && (\r\n            <IconButton\r\n              menuProps={{\r\n                items: breakdownList\r\n                  .filter((dimension) => !activeDimensions.find((active) => active.key === dimension.key))\r\n                  .map((dimension) => {\r\n                    const incompatibleMetrics = getIncompatibleFields(dimension, gridColumns);\r\n\r\n                    const incompatibleMessage = getIncompatibleBreakdownMessage(\r\n                      incompatibleMetrics[0],\r\n                      getReportColumnMetadataDisplayName(dimension.key, formatMessage)\r\n                    );\r\n                    return {\r\n                      key: dimension.key,\r\n                      text: getReportColumnMetadataDisplayName(dimension.key, formatMessage),\r\n                      onClick: () => {\r\n                        activeDimensions.push(dimension);\r\n                        setActiveDimensions([...activeDimensions]);\r\n                        onBreakdownChanged([...activeDimensions]);\r\n                        setGridColumns(\r\n                          applyOrdering([\r\n                            ...buildGridV2Columns(\r\n                              addDateColumn ? [dateTimeColumn, ...activeDimensions] : activeDimensions,\r\n                              [],\r\n                              defaultColumns,\r\n                              formatMessage\r\n                            ),\r\n                            ...addCompatibilityProps(metricColumns, filters, activeDimensions),\r\n                          ])\r\n                        );\r\n                      },\r\n                      onRenderContent: (props) => {\r\n                        return (\r\n                          <MenuItemWarningIcon\r\n                            text={props.item.text || ''}\r\n                            warningMessage={formatMessage(incompatibleMessage.message, incompatibleMessage.params)}\r\n                            isIncompatible={incompatibleMetrics.length > 0}\r\n                          />\r\n                        );\r\n                      },\r\n                    };\r\n                  }),\r\n              }}\r\n              iconProps={{ iconName: 'Add' }}\r\n              ariaLabel=\"Add\"\r\n            />\r\n          )}\r\n        </div>\r\n      );\r\n    };\r\n    const commandBarProps: IBuildCommandBarProps<TythonReportingDataRow> = {\r\n      includeActions: [CommandBarActions.custom],\r\n      includeFarActions: [CommandBarActions.searchBox, CommandBarActions.modifyColumns],\r\n      hideModifyColumnsDescription: true,\r\n      getCustomCommandBarItems: () => {\r\n        const commandBarItems: IGridPageCommandBarItemProps[] = [\r\n          {\r\n            key: 'breakdown',\r\n            placement: { direction: Direction.before },\r\n            commandBarButtonAs: getBreakdownComponent,\r\n            selectionModes: [GridSelectionMode.None],\r\n          },\r\n        ];\r\n\r\n        return commandBarItems;\r\n      },\r\n    };\r\n\r\n    return (\r\n      <div>\r\n        <GridV2\r\n          entity={ReportingDataRow}\r\n          dataGridProps={{\r\n            shimmerLines: 10,\r\n            selectionMode: SelectionMode.none,\r\n            renderEmptyGrid: true,\r\n            noEntityFound: reportMessages.noData,\r\n            data: redactIncompatibleFields(gridColumns, formattedData),\r\n            gridV2Columns: gridColumns,\r\n            onColumnsChanged(columns) {\r\n              setGridColumns(columns);\r\n            },\r\n          }}\r\n          commandBarProps={commandBarProps}\r\n          isGridReady={isDetailedDataLoaded}\r\n          paginationProps={{\r\n            shouldGridHandlePagination: true,\r\n          }}\r\n          history={history}\r\n          location={location}\r\n          match={match}\r\n        />\r\n      </div>\r\n    );\r\n  }\r\n);\r\n\r\nfunction redactIncompatibleFields(gridColumns: IGridV2Column[], data: ReportingDataRow[]) {\r\n  const incompatibleFields = gridColumns\r\n    .filter((column) => {\r\n      return column.incompatibleProps?.isIncompatible && column.isVisible;\r\n    })\r\n    .map((column) => column.key);\r\n  return data.map((row) => {\r\n    const newRow = { ...row };\r\n    for (const field of incompatibleFields) {\r\n      newRow[field] = '--';\r\n    }\r\n    return newRow;\r\n  });\r\n}\r\n\r\nfunction getIncompatibleFields(field: IMetadataElement, gridColumns: IGridV2Column[]) {\r\n  const incompatibleSet = new Set(field.incompatibleFields);\r\n  const incompatibleFields = gridColumns\r\n    .filter((column) => {\r\n      return incompatibleSet.has(column.key as TythonColumnsEnum) && column.isVisible;\r\n    })\r\n    .map((column) => column.name);\r\n  return incompatibleFields;\r\n}\r\nfunction getIncompatibleFilters(field: IMetadataElement, filters: IActiveFilter[], formatMessage: FormatMessageFuncType) {\r\n  const incompatibleSet = new Set(field.incompatibleFields);\r\n  const incompatibleFields = filters\r\n    .filter((filter) => {\r\n      return incompatibleSet.has(filter.key as TythonColumnsEnum);\r\n    })\r\n    .map((filter) => getReportColumnMetadataDisplayName(filter.key, formatMessage));\r\n  return incompatibleFields;\r\n}\r\nfunction getIncompatibleBreakdown(field: IMetadataElement, breakdownList: IMetadataElement[], formatMessage: FormatMessageFuncType) {\r\n  const incompatibleSet = new Set(field.incompatibleFields);\r\n  const incompatibleFields = breakdownList\r\n    .filter((breakdown) => {\r\n      return incompatibleSet.has(breakdown.key as TythonColumnsEnum);\r\n    })\r\n    .map((breakdown) => getReportColumnMetadataDisplayName(breakdown.key, formatMessage));\r\n  return incompatibleFields;\r\n}\r\n\r\nfunction applyOrdering(columns: IGridV2Column[]): IGridV2Column[] {\r\n  return columns.map((column, index) => {\r\n    column.columnOrder = index;\r\n    return column;\r\n  });\r\n}\r\n\r\nexport function roundMetrics(data: ReportingDataRow[]) {\r\n  return data.map((row) => {\r\n    const newRow = { ...row };\r\n    for (const field of Object.keys(row)) {\r\n      newRow[field] = roundMetric(TythonColumnsEnum[field], row[field], true);\r\n    }\r\n    return newRow;\r\n  });\r\n}\r\nexport function formatDate(data: TythonReportingDataRow[], currentChartGrain: ChartGrain, dateDimension: string, locale) {\r\n  return data.map((row) => {\r\n    if (row[dateDimension]) {\r\n      const newRow = { ...row };\r\n      const options: Intl.DateTimeFormatOptions = {};\r\n      currentChartGrain === ChartGrain.HOURLY && (options.hour = '2-digit');\r\n      if (currentChartGrain === ChartGrain.MONTHLY || currentChartGrain === ChartGrain.MONTH_AND_YEAR) {\r\n        options.month = 'short';\r\n        options.year = 'numeric';\r\n      }\r\n      currentChartGrain === ChartGrain.YEARLY && (options.year = 'numeric');\r\n      const dateValue = new Date(row[dateDimension]).toLocaleDateString(locale, options);\r\n      newRow[dateDimension] = dateValue;\r\n      return newRow;\r\n    }\r\n    return row;\r\n  });\r\n}\r\n","export enum Schedule {\r\n  NONE,\r\n  DAILY,\r\n  WEEKLY,\r\n  MONTHLY,\r\n}\r\n","import { getTheme, IStackTokens, ITheme, mergeStyleSets } from '@fluentui/react';\r\nimport { IPubcenterPalette, IPubcenterTheme } from '../../../../../theme';\r\n\r\ninterface IShareModalStyleProps {\r\n  theme: ITheme;\r\n}\r\ntype StyleProperties = 'errorMessage';\r\ntype ShareModalStyles = Record<StyleProperties, string>;\r\n\r\nexport const getStyles = (props: IShareModalStyleProps): ShareModalStyles => {\r\n  const { theme } = props;\r\n  const palette = theme.palette as IPubcenterPalette;\r\n  return mergeStyleSets({\r\n    errorMessage: {\r\n      color: palette.error,\r\n    },\r\n  });\r\n};\r\nexport function getClassNames<PropType>(props?: PropType) {\r\n  return getStyles({ theme: getTheme(), ...props });\r\n}\r\nexport function getStackTokens(): IStackTokens {\r\n  const theme = (getTheme() as unknown) as IPubcenterTheme;\r\n  const spacing = theme.spacing;\r\n\r\n  return { childrenGap: spacing.size12 };\r\n}\r\n","import {\r\n  CompactPeoplePicker,\r\n  DefaultButton,\r\n  Dialog,\r\n  DialogFooter,\r\n  DialogType,\r\n  Dropdown,\r\n  IDropdownOption,\r\n  Label,\r\n  PrimaryButton,\r\n  ValidationState,\r\n} from '@fluentui/react';\r\nimport React, { useState } from 'react';\r\nimport { InjectedIntlProps } from 'react-intl';\r\nimport { injectIntlAndObserver, validateSchema } from '../../../../utils';\r\nimport messages from '../../Report.messages';\r\nimport { IShareViewModel } from '../@data/schema/IShareViewModel';\r\nimport { shareErrorModel } from '../@data/schema/ShareErrorModel';\r\nimport { Schedule } from '../@data/schema/ShareSchedule';\r\nimport { getClassNames } from './ShareModal.styles';\r\n\r\nexport interface IShareModalProps extends InjectedIntlProps {\r\n  enabled: boolean;\r\n  disableModal: () => void;\r\n}\r\nexport interface IShareModalErrors {\r\n  schedule?: string;\r\n  emails?: string;\r\n}\r\nconst MODAL_WIDTH = 560;\r\nexport const ShareModal = injectIntlAndObserver<IShareModalProps>(({ enabled, disableModal, intl }) => {\r\n  const classNames = getClassNames();\r\n  const { formatMessage } = intl;\r\n  const [shareSchedule, setShareSchedule] = useState(getScheduleOptions()[0].key);\r\n  const [emails, setEmails] = useState<string[]>([]);\r\n  const [shareErrors, setShareErrors] = useState<IShareModalErrors>({});\r\n\r\n  return (\r\n    <Dialog\r\n      minWidth={MODAL_WIDTH}\r\n      hidden={!enabled}\r\n      onDismiss={() => {\r\n        disableModal();\r\n      }}\r\n      dialogContentProps={{\r\n        type: DialogType.normal,\r\n        title: 'Share',\r\n      }}\r\n      modalProps={{ isBlocking: false }}\r\n    >\r\n      <Label required>{formatMessage(messages.shareScheduleDropdownLabel)}</Label>\r\n      <Dropdown\r\n        options={getScheduleOptions()}\r\n        defaultSelectedKey={shareSchedule}\r\n        onChange={(_, option) => {\r\n          if (option) {\r\n            setShareSchedule(option.key);\r\n          }\r\n        }}\r\n        ariaLabel={formatMessage(messages.shareScheduleDropdownLabel)}\r\n        errorMessage={shareErrors.schedule}\r\n      />\r\n      <Label required>Send the report to these people</Label>\r\n      <CompactPeoplePicker\r\n        selectionAriaLabel={'Selected contacts'}\r\n        removeButtonAriaLabel={'Remove'}\r\n        onChange={(items) => {\r\n          const newEmails = items\r\n            ? items.map((item) => {\r\n                return item.key as string;\r\n              })\r\n            : [];\r\n          setEmails([...newEmails]);\r\n        }}\r\n        className={'ms-PeoplePicker'}\r\n        onValidateInput={(input: string) => {\r\n          if (emails.includes(input)) {\r\n            return ValidationState.invalid;\r\n          }\r\n          return ValidationState.valid;\r\n        }}\r\n        inputProps={{\r\n          'aria-label': 'People Picker',\r\n        }}\r\n        onResolveSuggestions={() => []}\r\n      />\r\n      <span className={classNames.errorMessage} hidden={!shareErrors.emails}>\r\n        Emails Must Have Valid Values\r\n      </span>\r\n      <DialogFooter>\r\n        <PrimaryButton\r\n          onClick={async () => {\r\n            try {\r\n              await validateSchema(shareErrorModel(), { schedule: shareSchedule, emails } as IShareViewModel);\r\n              setShareErrors({});\r\n            } catch (e) {\r\n              setShareErrors({ ...shareErrors, ...e });\r\n              return;\r\n            }\r\n          }}\r\n          text=\"Save\"\r\n        />\r\n        <DefaultButton\r\n          onClick={() => {\r\n            disableModal();\r\n          }}\r\n          text=\"Cancel\"\r\n        />\r\n      </DialogFooter>\r\n    </Dialog>\r\n  );\r\n});\r\nexport function getScheduleOptions(): IDropdownOption[] {\r\n  // TODO: Add logic to fetch correct options\r\n  return [\r\n    { key: Schedule.NONE, text: 'None' },\r\n    { key: Schedule.DAILY, text: 'Daily' },\r\n    { key: Schedule.WEEKLY, text: 'Weekly' },\r\n    { key: Schedule.MONTHLY, text: 'Monthly' },\r\n  ];\r\n}\r\n","import { mixed, object, string } from 'yup';\r\nimport { StringListSchemaYupType } from '../../../../../utils';\r\nimport { IShareViewModel } from './IShareViewModel';\r\nimport { Schedule } from './ShareSchedule';\r\n\r\nexport function shareErrorModel() {\r\n  return object<IShareViewModel>().shape({\r\n    schedule: mixed().oneOf([Schedule.NONE, Schedule.DAILY, Schedule.WEEKLY, Schedule.MONTHLY]).required(),\r\n    emails: new StringListSchemaYupType().of(string().trim().email().required()).required(),\r\n  });\r\n}\r\n","import { IconButton } from '@fluentui/react';\r\nimport React, { useState } from 'react';\r\nimport { InjectedIntlProps, injectIntl } from 'react-intl';\r\nimport messages from '../../Report.messages';\r\nimport { getClassNames } from '../ReportCard/ReportCard.styles';\r\nimport { ChartGrain, ChartTypes, IChartButton } from '../ReportCard/ReportCard.types';\r\nexport interface IChartTypeSelectorProps extends InjectedIntlProps {\r\n  allowedChartTypes: IChartButton[];\r\n  currentChartType: ChartTypes;\r\n  onChartTypeChange: (grain: ChartTypes) => void;\r\n  setCurrentChartGrain: (grain: ChartGrain) => void;\r\n  enableHideChartsButton?: boolean;\r\n  onChartsHideClicked: (hidden: boolean) => void;\r\n}\r\n\r\nexport const ChartTypeSelector = injectIntl<IChartTypeSelectorProps>(\r\n  ({\r\n    currentChartType,\r\n    onChartTypeChange,\r\n    allowedChartTypes,\r\n    setCurrentChartGrain,\r\n    enableHideChartsButton,\r\n    onChartsHideClicked,\r\n    intl: { formatMessage },\r\n  }: IChartTypeSelectorProps) => {\r\n    const { active, buttonBorder } = getClassNames();\r\n    const [chartsHidden, setChartsHidden] = useState(false);\r\n    const onHideChartsClick = () => {\r\n      const newValue = !chartsHidden;\r\n      onChartsHideClicked(newValue);\r\n      setChartsHidden(newValue);\r\n    };\r\n    return (\r\n      <>\r\n        {allowedChartTypes.map((chart, index) => {\r\n          const onChartTypeIconClick = () => {\r\n            onChartTypeChange(chart.chartType);\r\n          };\r\n          return (\r\n            <IconButton\r\n              key={index}\r\n              title={formatMessage(messages.chartSelectIcon, { chartType: chart.chartType })}\r\n              iconProps={{ iconName: chart.iconName }}\r\n              className={currentChartType === chart.chartType && !chart.disabled && !chartsHidden ? active : buttonBorder}\r\n              onClick={onChartTypeIconClick}\r\n              disabled={chart.disabled || chartsHidden}\r\n              data-test-id={chart.dataTestId}\r\n            />\r\n          );\r\n        })}\r\n        {!!enableHideChartsButton && (\r\n          <IconButton\r\n            title={formatMessage(messages.toggleChartIcon)}\r\n            iconProps={{ iconName: 'blocked' }}\r\n            className={chartsHidden ? active : buttonBorder}\r\n            onClick={onHideChartsClick}\r\n          />\r\n        )}\r\n      </>\r\n    );\r\n  }\r\n);\r\n","import { CommandBarButton } from '@fluentui/react';\r\nimport React, { RefObject } from 'react';\r\nimport { InjectedIntlProps, injectIntl } from 'react-intl';\r\nimport { showLoadingToastNotification } from '../../../../@data';\r\nimport { breakdownDate } from '../../../../utils';\r\nimport ReportMessages from '../../Report.messages';\r\nimport { ICustomCalenderDateRange } from '../../components/CustomCalender/CustomCalender.types';\r\nimport { constructName, exportToPNG } from '../../utils/exportHelper';\r\nimport { IMetadataElement, IReportPageReportData, TythonReportingDataRow } from '../@data/store/schema';\r\nimport { ChartTypeSelector } from '../ChartTypeSelector/ChartTypeSelector';\r\nimport { exportReport, getTopData } from './ReportCard.helpers';\r\nimport { ChartGrain, ChartTypes, IChartButton } from './ReportCard.types';\r\n\r\nexport interface ITopBarActionsOptionsProps extends InjectedIntlProps {\r\n  dateRange: ICustomCalenderDateRange;\r\n  currentChartGrain: ChartGrain;\r\n  currentChartType: ChartTypes;\r\n  onChartTypeChange: (type: ChartTypes) => void;\r\n  setCurrentChartGrain: (type: ChartGrain) => void;\r\n  setEnableShare: (enable: boolean) => void;\r\n  allowedChartTypes: IChartButton[];\r\n  reportData: IReportPageReportData<TythonReportingDataRow>;\r\n  mainDimension?: string;\r\n  selectedMetric: string;\r\n  columnsMetadata: IMetadataElement[];\r\n  reportName: string;\r\n  enableHideChartsButton?: boolean;\r\n  onChartsHideClicked: (hidden: boolean) => void;\r\n  isDetailedView: boolean;\r\n  cardRef: RefObject<HTMLDivElement>;\r\n  sysLocale: string;\r\n}\r\n\r\nexport const TopBarActions = injectIntl(\r\n  ({\r\n    onChartTypeChange,\r\n    setCurrentChartGrain,\r\n    dateRange,\r\n    currentChartType,\r\n    allowedChartTypes,\r\n    setEnableShare,\r\n    reportData,\r\n    selectedMetric,\r\n    mainDimension,\r\n    columnsMetadata,\r\n    reportName,\r\n    enableHideChartsButton,\r\n    onChartsHideClicked,\r\n    currentChartGrain,\r\n    isDetailedView,\r\n    cardRef,\r\n    intl: { formatMessage },\r\n    sysLocale,\r\n  }: ITopBarActionsOptionsProps) => {\r\n    const brokenDownStartDate = breakdownDate(dateRange.startDate, sysLocale);\r\n    const brokenDownEndDate = breakdownDate(dateRange.endDate, sysLocale);\r\n    const startDateString = `${brokenDownStartDate.month}-${brokenDownStartDate.day}-${brokenDownStartDate.year}`;\r\n    const endDateString = `${brokenDownEndDate.month}-${brokenDownEndDate.day}-${brokenDownEndDate.year}`;\r\n    const exportedFileName = constructName(reportName, currentChartGrain, startDateString, endDateString);\r\n    const disableExport = !reportData.isDataLoaded || !reportData.data || reportData.data.length <= 0;\r\n    return (\r\n      <>\r\n        {allowedChartTypes.length > 1 && (\r\n          <ChartTypeSelector\r\n            allowedChartTypes={allowedChartTypes}\r\n            currentChartType={currentChartType}\r\n            onChartTypeChange={onChartTypeChange}\r\n            setCurrentChartGrain={setCurrentChartGrain}\r\n            enableHideChartsButton={enableHideChartsButton}\r\n            onChartsHideClicked={onChartsHideClicked}\r\n          />\r\n        )}\r\n        {!isDetailedView && (\r\n          <>\r\n            <CommandBarButton\r\n              iconProps={{ iconName: 'More' }}\r\n              onRenderMenuIcon={() => null}\r\n              menuProps={{\r\n                items: [\r\n                  {\r\n                    key: 'exportCSV',\r\n                    text: formatMessage(ReportMessages.exportCSV),\r\n                    onClick: () => {\r\n                      const dataToExport: TythonReportingDataRow[] = getDataToExport(selectedMetric, reportData.data, mainDimension);\r\n                      exportReport(dataToExport, columnsMetadata, exportedFileName, formatMessage);\r\n                    },\r\n                    disabled: disableExport,\r\n                  },\r\n                  {\r\n                    key: 'exportPNG',\r\n                    text: formatMessage(ReportMessages.exportPNG),\r\n                    onClick: async () => {\r\n                      showLoadingToastNotification({\r\n                        text: formatMessage(ReportMessages.topBarExportPNG),\r\n                        onDismiss: async () => {\r\n                          cardRef.current && (await exportToPNG(cardRef.current, exportedFileName));\r\n                        },\r\n                      });\r\n                    },\r\n                    disabled: disableExport,\r\n                  },\r\n                  // {\r\n                  //   key: 'share',\r\n                  //   text: 'Share',\r\n                  //   onClick: () => {\r\n                  //     setEnableShare(true);\r\n                  //   },\r\n                  // },\r\n                ],\r\n              }}\r\n            />\r\n          </>\r\n        )}\r\n      </>\r\n    );\r\n  }\r\n);\r\n\r\nexport function getDataToExport(selectedMetric: string, data?: TythonReportingDataRow[], mainDimension?: string) {\r\n  let dataToExport: TythonReportingDataRow[];\r\n  if (mainDimension) {\r\n    dataToExport = getTopData(data || [], selectedMetric, mainDimension).topData.map((row) => {\r\n      return {\r\n        [mainDimension]: row[mainDimension],\r\n        [selectedMetric]: row[selectedMetric],\r\n      } as TythonReportingDataRow;\r\n    });\r\n  } else {\r\n    dataToExport = data || [];\r\n  }\r\n  return dataToExport;\r\n}\r\n","import { Dropdown, Stack } from '@fluentui/react';\r\nimport React, { useEffect, useMemo, useRef, useState } from 'react';\r\nimport { Link } from 'react-router-dom';\r\nimport { useI18n } from '../../../../../i18n/useI18n';\r\nimport { getAppStore } from '../../../../@data';\r\nimport { RoutePrefix } from '../../../../Routes';\r\nimport { Card } from '../../../../components/Card/Card';\r\nimport { HighChartsWrapper } from '../../../../components/HighCharts/HighChartsLibrary';\r\nimport { CHART_WRAPPER } from '../../../../constants/DataTestIdConstants';\r\nimport { injectIntlAndObserver } from '../../../../utils';\r\nimport { getStore } from '../../../ad-management/Account/Settings/@data/store/store';\r\nimport { setDataInURL } from '../../@data/store/UrlQueryStore';\r\nimport { TythonColumnsEnum } from '../../@data/store/schema/ColumnsEnum';\r\nimport { ReportsQueryStoreKeys } from '../../@data/store/schema/ReportsQueryStoreKeys';\r\nimport { RouteName } from '../../@data/store/store';\r\nimport messages from '../../Report.messages';\r\nimport { ratioMetrics } from '../../constants/ratioMetrics';\r\nimport { IMetadataElement } from '../@data/store/schema';\r\nimport { ChartMetricPicker, ChartSelectionMode } from '../ChartMetricPicker/ChartMetricPicker';\r\nimport { MetricsSidePanel } from '../ChartMetricPicker/MetricsSidePanel';\r\nimport { GrainSelector } from '../GrainSelector/GrainSelector';\r\nimport { IMetricMarkerProps } from '../MetricMarker/MetricMarker.types';\r\nimport { ReportDetailsGrid } from '../ReportDetailsPage/ReportDetailsGrid/ReportDetailsGrid';\r\nimport { ShareModal } from '../ShareModal/ShareModal';\r\nimport {\r\n  getActiveMarkers,\r\n  getChart,\r\n  getMetricDropdownOptions,\r\n  getShimmerCustomElements,\r\n  getStartingBreakdown,\r\n  getStartingChartGrain,\r\n} from './ReportCard.helpers';\r\nimport { getClassNames, getMetricPickerStackTokens, getStackTokens } from './ReportCard.styles';\r\nimport { ActiveMetrics, ChartGrain, ChartTypes, IChartsOptions, IReportCardProps, ReportCardType } from './ReportCard.types';\r\nimport { TopBarActions } from './TopBarActions';\r\n\r\nexport const ReportCard = injectIntlAndObserver<IReportCardProps>(\r\n  ({\r\n    title,\r\n    type,\r\n    intl: { formatMessage },\r\n    reportData,\r\n    reportDetailedData,\r\n    summaryData = [],\r\n    isSummaryDataLoaded,\r\n    reportMetadata,\r\n    allowedChartTypes,\r\n    defaultColumns,\r\n    defaultMetrics,\r\n    defaultChartGrain,\r\n    allowedChartGrains,\r\n    showMetricsMarkers = false,\r\n    mainDimension,\r\n    dateDimension,\r\n    enableHideChartsButton,\r\n    showDetailsReportLink,\r\n    dateRange,\r\n    isDetailedView,\r\n    filters,\r\n    hasMinimumBreakdown = false,\r\n    onChartGrainChanged,\r\n    onSelectedMetricChanged,\r\n    onActiveMetricsChanged,\r\n    onBreakDownChanged,\r\n    reportCardRef,\r\n    history,\r\n    location,\r\n    match,\r\n  }: IReportCardProps) => {\r\n    const classNames = getClassNames();\r\n    const { publisher, userContext } = getAppStore();\r\n    const { systemPreferences } = getStore().active;\r\n    const { locale } = useI18n({ systemPreferences, publisher, userContext });\r\n    const viewReportRoute = `/${RoutePrefix.adManagement}/${publisher?.id}/${RouteName.dashboard}/${type}/${RouteName.reportDetails}`;\r\n    const startingChartType = allowedChartTypes[0] || { chartType: ChartTypes.DONUT, disabled: false, iconName: ChartTypes.DONUT };\r\n    const chartGrainStoreKey = `${title}-${ReportsQueryStoreKeys.CHART_GRAIN}`;\r\n    const [currentChartType, setCurrentChartType] = useState(startingChartType.chartType);\r\n    const startingChartGrain = getStartingChartGrain(\r\n      defaultChartGrain,\r\n      allowedChartGrains,\r\n      startingChartType.chartType,\r\n      chartGrainStoreKey\r\n    );\r\n    const chartComponentRef = useRef<HighChartsWrapper.RefObject>(null);\r\n    const mapChartComponentRef = useRef<HighChartsWrapper.RefObject>(null);\r\n    const [currentChartGrain, setCurrentChartGrain] = useState(startingChartGrain);\r\n    const [currentBreakdown, setCurrentBreakdown] = useState(getStartingBreakdown(mainDimension));\r\n    const defaultSelectedMetric = defaultMetrics && defaultMetrics[0] ? defaultMetrics[0] : '';\r\n    const [selectedMetric, setSelectedMetric] = useState(defaultSelectedMetric);\r\n    const [enableShare, setEnableShare] = useState(false);\r\n    const [showCharts, setShowCharts] = useState(true);\r\n    const [showSidePanel, setShowSidePanel] = useState<boolean>(false);\r\n    const [activeMetrics, setActiveMetrics] = useState<ActiveMetrics>({});\r\n\r\n    const isMetadataLoaded = !!reportMetadata;\r\n    const hasEmptyData = !reportData || (reportData && reportData.length <= 0);\r\n    const isDataLoaded = !!reportData;\r\n    const showMetricsDropdown = currentChartType !== ChartTypes.LINE;\r\n    const isDetailedDataLoaded = !!reportDetailedData;\r\n\r\n    const [mainDimensionMetadata, setMainDimensionMetadata] = useState<IMetadataElement>({\r\n      key: '',\r\n      filterKey: '',\r\n      displayName: '',\r\n      incompatibleFields: [],\r\n    });\r\n    const [selectedMetricMetadata, setSelectedMetricMetadata] = useState<IMetadataElement>({\r\n      key: '',\r\n      filterKey: '',\r\n      displayName: '',\r\n      incompatibleFields: [],\r\n    });\r\n    const chartsOptions: IChartsOptions = {\r\n      currentChartType,\r\n      currentChartGrain,\r\n      reportData: reportData || [],\r\n      mainDimension: mainDimensionMetadata,\r\n      selectedMetric: selectedMetricMetadata,\r\n      chartComponentRef,\r\n      mapChartComponentRef,\r\n      activeMetrics,\r\n      dateDimension,\r\n      countryCodeDimension: TythonColumnsEnum.CountryCode,\r\n      formatMessage,\r\n    };\r\n    const disabledRatioMetric = useMemo(() => {\r\n      return currentChartType !== ChartTypes.LINE && currentChartType !== ChartTypes.MAP && ratioMetrics.includes(String(selectedMetric));\r\n    }, [currentChartType, selectedMetric]);\r\n\r\n    const onChartTypeChange = (newChartType: ChartTypes): void => {\r\n      if (newChartType === ChartTypes.LINE) {\r\n        setCurrentChartGrain(getStartingChartGrain(defaultChartGrain, allowedChartGrains, newChartType, chartGrainStoreKey));\r\n      } else {\r\n        setCurrentChartGrain(ChartGrain.NONE);\r\n      }\r\n      setCurrentChartType(newChartType);\r\n    };\r\n    const getTopBarActions = (): React.ReactNode => {\r\n      return (\r\n        <TopBarActions\r\n          currentChartType={currentChartType}\r\n          onChartTypeChange={onChartTypeChange}\r\n          setCurrentChartGrain={setCurrentChartGrain}\r\n          setEnableShare={setEnableShare}\r\n          allowedChartTypes={allowedChartTypes}\r\n          reportData={{\r\n            data: reportData || [],\r\n            isDataLoaded: !!reportData,\r\n          }}\r\n          selectedMetric={selectedMetric}\r\n          columnsMetadata={reportMetadata ? [...reportMetadata.metrics, ...reportMetadata.dimensions] : []}\r\n          reportName={title}\r\n          mainDimension={mainDimension}\r\n          enableHideChartsButton={enableHideChartsButton}\r\n          onChartsHideClicked={(hidden: boolean) => {\r\n            setShowCharts(!hidden);\r\n          }}\r\n          currentChartGrain={currentChartGrain}\r\n          isDetailedView={isDetailedView}\r\n          cardRef={reportCardRef}\r\n          dateRange={dateRange}\r\n          sysLocale={locale}\r\n        />\r\n      );\r\n    };\r\n    const onActiveGrainChanged = (grain: ChartGrain) => {\r\n      setDataInURL(chartGrainStoreKey, grain);\r\n      setCurrentChartGrain(grain);\r\n    };\r\n\r\n    const stringifiedFilters = JSON.stringify(filters);\r\n    useEffect(() => {\r\n      if (isMetadataLoaded) {\r\n        const loadedMetrics = getActiveMarkers(\r\n          reportMetadata.metrics,\r\n          filters,\r\n          currentChartType,\r\n          defaultMetrics,\r\n          formatMessage,\r\n          type === ReportCardType.PERFORMANCE ? '' : selectedMetric\r\n        );\r\n        setActiveMetrics({\r\n          ...loadedMetrics,\r\n        });\r\n        onActiveMetricsChanged && onActiveMetricsChanged(loadedMetrics);\r\n      }\r\n      // eslint-disable-next-line react-hooks/exhaustive-deps\r\n    }, [isMetadataLoaded, currentChartType, stringifiedFilters, locale]);\r\n\r\n    useEffect(() => {\r\n      if (disabledRatioMetric) {\r\n        setSelectedMetric(defaultSelectedMetric);\r\n      }\r\n    }, [disabledRatioMetric, defaultSelectedMetric]);\r\n    useEffect(() => {\r\n      setMainDimensionMetadata(\r\n        reportMetadata?.dimensions.find((dimension) => dimension.key === mainDimension) ||\r\n          ({\r\n            key: '',\r\n            filterKey: '',\r\n            displayName: '',\r\n            incompatibleFields: [],\r\n          } as IMetadataElement)\r\n      );\r\n      setSelectedMetricMetadata(\r\n        reportMetadata?.metrics.find((metric) => metric.key === selectedMetric) ||\r\n          ({\r\n            key: '',\r\n            filterKey: '',\r\n            displayName: '',\r\n            incompatibleFields: [],\r\n          } as IMetadataElement)\r\n      );\r\n    }, [reportMetadata, mainDimension, selectedMetric]);\r\n    useEffect(() => {\r\n      onChartGrainChanged && onChartGrainChanged(currentChartGrain);\r\n    }, [currentChartGrain, onChartGrainChanged]);\r\n    useEffect(() => {\r\n      onSelectedMetricChanged && onSelectedMetricChanged(selectedMetric);\r\n    }, [selectedMetric, onSelectedMetricChanged]);\r\n    return (\r\n      <div className={classNames.cardWrapper}>\r\n        <Card\r\n          titleText={title}\r\n          shimmerCustomElement={getShimmerCustomElements(currentChartType)}\r\n          isDataLoaded={(isDataLoaded || currentChartType === ChartTypes.GRID) && Object.keys(activeMetrics).length > 0}\r\n          cardTopBarActions={getTopBarActions()}\r\n          styleProps={{ titleBar: classNames.cardsTitleBarStyle }}\r\n        >\r\n          <div ref={reportCardRef}>\r\n            <Stack tokens={getStackTokens()}>\r\n              {showCharts && currentChartType === ChartTypes.LINE && (\r\n                <Stack horizontalAlign=\"end\">\r\n                  <GrainSelector\r\n                    activeGrain={currentChartGrain}\r\n                    activeGrainChanged={onActiveGrainChanged}\r\n                    allowedGrains={allowedChartGrains}\r\n                  />\r\n                </Stack>\r\n              )}\r\n              <Stack horizontal horizontalAlign=\"start\" wrap tokens={getMetricPickerStackTokens()}>\r\n                {!hasEmptyData && showMetricsDropdown && !showMetricsMarkers && (\r\n                  <Dropdown\r\n                    className={classNames.metricsDropdown}\r\n                    options={getMetricDropdownOptions(reportMetadata?.metrics || [], currentChartType, formatMessage)}\r\n                    defaultSelectedKey={selectedMetric}\r\n                    onChange={(_, option) => {\r\n                      if (option) {\r\n                        setSelectedMetric(String(option.key));\r\n                      }\r\n                    }}\r\n                    ariaLabel={formatMessage(messages.metricsDropdownLabel)}\r\n                  />\r\n                )}\r\n                {!hasEmptyData && showMetricsMarkers && showCharts && (\r\n                  <>\r\n                    <MetricsSidePanel\r\n                      activeMetrics={activeMetrics}\r\n                      isOpen={showSidePanel}\r\n                      onPanelHide={() => {\r\n                        setShowSidePanel(false);\r\n                      }}\r\n                      onMetricsChanged={(changedMetrics: ActiveMetrics) => {\r\n                        setActiveMetrics({ ...changedMetrics });\r\n                        onActiveMetricsChanged && onActiveMetricsChanged(changedMetrics);\r\n                      }}\r\n                    />\r\n                    <ChartMetricPicker\r\n                      mode={type === ReportCardType.PERFORMANCE ? ChartSelectionMode.MULTI : ChartSelectionMode.SINGLE}\r\n                      activeMetrics={activeMetrics}\r\n                      summaryData={summaryData[0]}\r\n                      onMetricSelected={(selected: IMetricMarkerProps) => {\r\n                        if (selected.disabled) {\r\n                          return;\r\n                        }\r\n                        if (type !== ReportCardType.PERFORMANCE) {\r\n                          for (const key of Object.keys(activeMetrics)) {\r\n                            activeMetrics[key].isActive = false;\r\n                          }\r\n                          setSelectedMetric(selected.metricKey);\r\n                        }\r\n                        selected.isActive = !selected.isActive;\r\n                        setActiveMetrics({ ...activeMetrics });\r\n                        onActiveMetricsChanged && onActiveMetricsChanged(activeMetrics);\r\n                      }}\r\n                      onEditButtonClicked={() => {\r\n                        setShowSidePanel(true);\r\n                      }}\r\n                    />\r\n                  </>\r\n                )}\r\n              </Stack>\r\n              {reportData && showCharts && (\r\n                <Stack data-test-id={`${CHART_WRAPPER}-${currentChartType}-${type}`} styles={{ root: { width: '100%' } }}>\r\n                  {getChart(chartsOptions, locale)}\r\n                </Stack>\r\n              )}\r\n            </Stack>\r\n          </div>\r\n          {isDetailedView && (\r\n            <div>\r\n              <ReportDetailsGrid\r\n                history={history}\r\n                location={location}\r\n                match={match}\r\n                metrics={reportMetadata?.metrics || []}\r\n                dimensions={reportMetadata?.dimensions || []}\r\n                data={reportDetailedData || []}\r\n                isDetailedDataLoaded={!!isDetailedDataLoaded}\r\n                initialBreakdown={reportMetadata?.dimensions.filter((dimension) => currentBreakdown.includes(dimension.key)) || []}\r\n                currentChartGrain={currentChartGrain}\r\n                onBreakdownChanged={(newBreakdown: IMetadataElement[]) => {\r\n                  const updatedBreakdown = [...newBreakdown.map((breakdown) => breakdown.key)];\r\n                  onBreakDownChanged && onBreakDownChanged(updatedBreakdown);\r\n                  setCurrentBreakdown(updatedBreakdown);\r\n                  setDataInURL(ReportsQueryStoreKeys.BREAKDOWN, updatedBreakdown);\r\n                }}\r\n                defaultColumns={defaultColumns}\r\n                hasMinimumBreakdown={hasMinimumBreakdown}\r\n                dateDimension={dateDimension}\r\n                filters={filters}\r\n              />\r\n            </div>\r\n          )}\r\n          {showDetailsReportLink && (\r\n            <div>\r\n              <Link className={classNames.linkStyle} to={`${viewReportRoute}${window.location.search}`}>\r\n                <span>{formatMessage(messages.viewReportLink)}</span>\r\n              </Link>\r\n            </div>\r\n          )}\r\n        </Card>\r\n        <ShareModal\r\n          disableModal={() => {\r\n            setEnableShare(false);\r\n          }}\r\n          enabled={enableShare}\r\n        />\r\n      </div>\r\n    );\r\n  }\r\n);\r\n","import { observer } from 'mobx-react';\r\nimport React, { RefObject, useState } from 'react';\r\nimport { injectIntl } from 'react-intl';\r\nimport appMessages from '../../../../App.messages';\r\nimport { IRouterWithIntl } from '../../../../utils';\r\nimport { TythonColumnsEnum } from '../../@data/store/schema/ColumnsEnum';\r\nimport { ICustomCalenderDateRange } from '../../components/CustomCalender/CustomCalender.types';\r\nimport { ADUNIT_DEFAULT_COLUMNS, ADUNIT_DEFAULT_METRICS } from '../../constants/common';\r\nimport { useReportQuery } from '../../hooks/useReportQuery';\r\nimport { IReportsMetadata, TythonReportingDataRow } from '../@data/store/schema';\r\nimport { ReportCard } from '../ReportCard/ReportCard';\r\nimport { constructRequestBody } from '../ReportCard/ReportCard.helpers';\r\nimport { ActiveMetrics, ChartGrain, IChartButton, ReportCardType } from '../ReportCard/ReportCard.types';\r\nimport { IActiveFilter } from '../ReportDetailsPage/ActionBar/ActionBar';\r\n\r\nconst CHART_DATA_METRIC_ID = 'ad-units-chart';\r\nexport interface IAdUnitsReportCardProps extends IRouterWithIntl {\r\n  dateRange: ICustomCalenderDateRange;\r\n  filters: IActiveFilter[];\r\n  allowedChartTypes: IChartButton[];\r\n  showDetailsReportLink: boolean;\r\n  enableHideChartsButton?: boolean;\r\n  showMetricsMarkers?: boolean;\r\n  isDetailedView: boolean;\r\n  onChartGrainChanged?: (grain: ChartGrain) => void;\r\n  onSelectedMetricChanged?: (metric: string) => void;\r\n  onActiveMetricsChanged?: (activeMetrics: ActiveMetrics) => void;\r\n  onBreakdownChanged?: (breakdown: string[]) => void;\r\n  reportDetailedData?: TythonReportingDataRow[];\r\n  reportCardRef: RefObject<HTMLDivElement>;\r\n  reportMetadata?: IReportsMetadata;\r\n  summaryData?: TythonReportingDataRow[];\r\n}\r\nexport const AdUnitsReportCard = observer(\r\n  injectIntl(\r\n    ({\r\n      dateRange,\r\n      filters,\r\n      allowedChartTypes,\r\n      enableHideChartsButton,\r\n      showDetailsReportLink,\r\n      showMetricsMarkers = false,\r\n      isDetailedView,\r\n      onChartGrainChanged,\r\n      onSelectedMetricChanged,\r\n      onActiveMetricsChanged,\r\n      onBreakdownChanged,\r\n      reportCardRef,\r\n      intl: { formatMessage },\r\n      reportMetadata,\r\n      summaryData,\r\n      reportDetailedData,\r\n      history,\r\n      location,\r\n      match,\r\n    }: IAdUnitsReportCardProps) => {\r\n      const title = formatMessage(appMessages.adUnitsCardTitle);\r\n      const mainDimension = TythonColumnsEnum.AdUnitName;\r\n      const [currentChartGrain, setCurrentChartGrain] = useState(ChartGrain.DAILY);\r\n\r\n      const { data: reportData } = useReportQuery(\r\n        constructRequestBody(\r\n          title,\r\n          dateRange,\r\n          currentChartGrain,\r\n          isDetailedView ? filters : [],\r\n          [mainDimension],\r\n          reportMetadata?.metrics || []\r\n        ),\r\n        isDetailedView,\r\n        !!reportMetadata\r\n      );\r\n\r\n      return (\r\n        <ReportCard\r\n          title={title}\r\n          reportData={reportData}\r\n          reportDetailedData={reportDetailedData}\r\n          summaryData={summaryData}\r\n          isSummaryDataLoaded={!!summaryData}\r\n          allowedChartTypes={allowedChartTypes}\r\n          allowedChartGrains={reportMetadata?.grains || []}\r\n          dataMetrics={{ chartDataMetrics: CHART_DATA_METRIC_ID }}\r\n          mainDimension={mainDimension}\r\n          type={ReportCardType.ADUNIT}\r\n          enableHideChartsButton={enableHideChartsButton}\r\n          showDetailsReportLink={showDetailsReportLink}\r\n          dateRange={dateRange}\r\n          showMetricsMarkers={showMetricsMarkers}\r\n          isDetailedView={isDetailedView}\r\n          filters={filters}\r\n          history={history}\r\n          location={location}\r\n          match={match}\r\n          defaultColumns={ADUNIT_DEFAULT_COLUMNS}\r\n          defaultMetrics={ADUNIT_DEFAULT_METRICS}\r\n          hasMinimumBreakdown={true}\r\n          reportMetadata={reportMetadata}\r\n          dateDimension={TythonColumnsEnum.DateTime}\r\n          onChartGrainChanged={(updatedGrain) => {\r\n            onChartGrainChanged && onChartGrainChanged(updatedGrain);\r\n            setCurrentChartGrain(updatedGrain);\r\n          }}\r\n          onBreakDownChanged={onBreakdownChanged}\r\n          onSelectedMetricChanged={onSelectedMetricChanged}\r\n          onActiveMetricsChanged={onActiveMetricsChanged}\r\n          reportCardRef={reportCardRef}\r\n        />\r\n      );\r\n    }\r\n  )\r\n);\r\n","import { observer } from 'mobx-react';\r\nimport React, { RefObject, useState } from 'react';\r\nimport { injectIntl } from 'react-intl';\r\nimport appMessages from '../../../../App.messages';\r\nimport { IRouterWithIntl } from '../../../../utils';\r\nimport { TythonColumnsEnum } from '../../@data/store/schema/ColumnsEnum';\r\nimport { ICustomCalenderDateRange } from '../../components/CustomCalender/CustomCalender.types';\r\nimport { COUNTRY_DEFAULT_COLUMNS, COUNTRY_DEFAULT_METRICS } from '../../constants/common';\r\nimport { useReportQuery } from '../../hooks/useReportQuery';\r\nimport { IReportsMetadata, TythonReportingDataRow } from '../@data/store/schema';\r\nimport { ReportCard } from '../ReportCard/ReportCard';\r\nimport { constructRequestBody } from '../ReportCard/ReportCard.helpers';\r\nimport { ActiveMetrics, ChartGrain, IChartButton, ReportCardType } from '../ReportCard/ReportCard.types';\r\nimport { IActiveFilter } from '../ReportDetailsPage/ActionBar/ActionBar';\r\n\r\nconst CHART_DATA_METRIC_ID = 'ad-units-chart';\r\nexport interface ICountryReportCardProps extends IRouterWithIntl {\r\n  dateRange: ICustomCalenderDateRange;\r\n  filters: IActiveFilter[];\r\n  allowedChartTypes: IChartButton[];\r\n  showDetailsReportLink: boolean;\r\n  enableHideChartsButton?: boolean;\r\n  showMetricsMarkers?: boolean;\r\n  isDetailedView: boolean;\r\n  onChartGrainChanged?: (grain: ChartGrain) => void;\r\n  onSelectedMetricChanged?: (metric: string) => void;\r\n  onActiveMetricsChanged?: (activeMetrics: ActiveMetrics) => void;\r\n  onBreakdownChanged?: (breakdown: string[]) => void;\r\n  reportDetailedData?: TythonReportingDataRow[];\r\n  reportCardRef: RefObject<HTMLDivElement>;\r\n  reportMetadata?: IReportsMetadata;\r\n  summaryData?: TythonReportingDataRow[];\r\n}\r\nexport const CountryReportCard = observer(\r\n  injectIntl(\r\n    ({\r\n      dateRange,\r\n      filters,\r\n      allowedChartTypes,\r\n      enableHideChartsButton,\r\n      showDetailsReportLink,\r\n      showMetricsMarkers = false,\r\n      isDetailedView,\r\n      onChartGrainChanged,\r\n      onSelectedMetricChanged,\r\n      onActiveMetricsChanged,\r\n      onBreakdownChanged,\r\n      reportDetailedData,\r\n      reportCardRef,\r\n      intl: { formatMessage },\r\n      reportMetadata,\r\n      summaryData,\r\n      history,\r\n      location,\r\n      match,\r\n    }: ICountryReportCardProps) => {\r\n      const title = formatMessage(appMessages.countryCardTitle);\r\n      const mainDimension = TythonColumnsEnum.Country;\r\n      const [currentChartGrain, setCurrentChartGrain] = useState(ChartGrain.DAILY);\r\n      const { data: reportData } = useReportQuery(\r\n        constructRequestBody(\r\n          title,\r\n          dateRange,\r\n          currentChartGrain,\r\n          isDetailedView ? filters : [],\r\n          [mainDimension, TythonColumnsEnum.CountryCode],\r\n          reportMetadata?.metrics || []\r\n        ),\r\n        isDetailedView,\r\n        !!reportMetadata\r\n      );\r\n      return (\r\n        <ReportCard\r\n          title={title}\r\n          reportData={reportData}\r\n          reportDetailedData={reportDetailedData}\r\n          summaryData={summaryData}\r\n          isSummaryDataLoaded={!!summaryData}\r\n          allowedChartTypes={allowedChartTypes}\r\n          allowedChartGrains={reportMetadata?.grains || []}\r\n          dataMetrics={{ chartDataMetrics: CHART_DATA_METRIC_ID }}\r\n          mainDimension={mainDimension}\r\n          type={ReportCardType.COUNTRY}\r\n          enableHideChartsButton={enableHideChartsButton}\r\n          showDetailsReportLink={showDetailsReportLink}\r\n          dateRange={dateRange}\r\n          showMetricsMarkers={showMetricsMarkers}\r\n          isDetailedView={isDetailedView}\r\n          filters={filters}\r\n          history={history}\r\n          location={location}\r\n          match={match}\r\n          defaultColumns={COUNTRY_DEFAULT_COLUMNS}\r\n          defaultMetrics={COUNTRY_DEFAULT_METRICS}\r\n          hasMinimumBreakdown={true}\r\n          reportMetadata={reportMetadata}\r\n          dateDimension={TythonColumnsEnum.DateTime}\r\n          onChartGrainChanged={(updatedGrain) => {\r\n            onChartGrainChanged && onChartGrainChanged(updatedGrain);\r\n            setCurrentChartGrain(updatedGrain);\r\n          }}\r\n          onBreakDownChanged={onBreakdownChanged}\r\n          onSelectedMetricChanged={onSelectedMetricChanged}\r\n          onActiveMetricsChanged={onActiveMetricsChanged}\r\n          reportCardRef={reportCardRef}\r\n        />\r\n      );\r\n    }\r\n  )\r\n);\r\n","import React, { RefObject, useState } from 'react';\r\nimport appMessages from '../../../../App.messages';\r\nimport { IRouterWithIntl, injectIntlAndObserver } from '../../../../utils';\r\nimport { TythonColumnsEnum } from '../../@data/store/schema/ColumnsEnum';\r\nimport { ICustomCalenderDateRange } from '../../components/CustomCalender/CustomCalender.types';\r\nimport { MEDIATION_DEFAULT_COLUMNS, MEDIATION_DEFAULT_METRICS } from '../../constants/common';\r\nimport { useMediationReportQuery } from '../../hooks/useReportQuery';\r\nimport { IReportsMetadata, MediationReportingDataRow } from '../@data/store/schema';\r\nimport { ReportCard } from '../ReportCard/ReportCard';\r\nimport { constructMediationRequestBody } from '../ReportCard/ReportCard.helpers';\r\nimport { ChartGrain, IChartButton, ReportCardType } from '../ReportCard/ReportCard.types';\r\nimport { IActiveFilter } from '../ReportDetailsPage/ActionBar/ActionBar';\r\n\r\nconst CHART_DATA_METRIC_ID = 'mediation-chart';\r\n\r\nexport interface IMediationReportCardProps extends IRouterWithIntl {\r\n  dateRange: ICustomCalenderDateRange;\r\n  filters: IActiveFilter[];\r\n  allowedChartTypes: IChartButton[];\r\n  showDetailsReportLink: boolean;\r\n  enableHideChartsButton?: boolean;\r\n  showMetricsMarkers?: boolean;\r\n  isDetailedView: boolean;\r\n  onChartGrainChanged?: (grain: ChartGrain) => void;\r\n  onSelectedMetricChanged?: (metric: string) => void;\r\n  onBreakdownChanged?: (breakdown: string[]) => void;\r\n  reportDetailedData?: MediationReportingDataRow[];\r\n  reportCardRef: RefObject<HTMLDivElement>;\r\n  reportMetadata?: IReportsMetadata;\r\n}\r\n\r\nexport const MediationReportCard = injectIntlAndObserver<IMediationReportCardProps>(\r\n  ({\r\n    dateRange,\r\n    filters,\r\n    allowedChartTypes,\r\n    enableHideChartsButton,\r\n    showDetailsReportLink,\r\n    showMetricsMarkers = false,\r\n    isDetailedView,\r\n    onChartGrainChanged,\r\n    onSelectedMetricChanged,\r\n    onBreakdownChanged,\r\n    reportDetailedData,\r\n    reportCardRef,\r\n    intl: { formatMessage },\r\n    reportMetadata,\r\n    history,\r\n    location,\r\n    match,\r\n  }: IMediationReportCardProps) => {\r\n    const mainDimension = TythonColumnsEnum.AdUnitName;\r\n    const [currentChartGrain, setCurrentChartGrain] = useState(ChartGrain.DAILY);\r\n    const metrics = reportMetadata?.metrics.map((metric) => metric.key);\r\n    const dimensions = [mainDimension];\r\n    if (currentChartGrain !== ChartGrain.NONE) {\r\n      dimensions.push(TythonColumnsEnum.Date);\r\n    }\r\n    const { data: reportData } = useMediationReportQuery(\r\n      constructMediationRequestBody(dateRange, currentChartGrain, isDetailedView ? filters : [], dimensions, metrics),\r\n      !!reportMetadata\r\n    );\r\n\r\n    return (\r\n      <ReportCard\r\n        title={formatMessage(appMessages.mediationCardTitle)}\r\n        reportData={reportData}\r\n        reportDetailedData={reportDetailedData}\r\n        allowedChartTypes={allowedChartTypes}\r\n        dataMetrics={{ chartDataMetrics: CHART_DATA_METRIC_ID }}\r\n        mainDimension={mainDimension}\r\n        type={ReportCardType.MEDIATION}\r\n        enableHideChartsButton={enableHideChartsButton}\r\n        showDetailsReportLink={showDetailsReportLink}\r\n        dateRange={dateRange}\r\n        showMetricsMarkers={showMetricsMarkers}\r\n        isDetailedView={isDetailedView}\r\n        filters={filters}\r\n        history={history}\r\n        location={location}\r\n        match={match}\r\n        defaultColumns={MEDIATION_DEFAULT_COLUMNS}\r\n        defaultMetrics={MEDIATION_DEFAULT_METRICS}\r\n        hasMinimumBreakdown={true}\r\n        reportMetadata={reportMetadata}\r\n        allowedChartGrains={reportMetadata?.grains || []}\r\n        dateDimension={TythonColumnsEnum.Date}\r\n        onChartGrainChanged={(updatedGrain) => {\r\n          onChartGrainChanged && onChartGrainChanged(updatedGrain);\r\n          setCurrentChartGrain(updatedGrain);\r\n        }}\r\n        onBreakDownChanged={onBreakdownChanged}\r\n        onSelectedMetricChanged={onSelectedMetricChanged}\r\n        reportCardRef={reportCardRef}\r\n      />\r\n    );\r\n  }\r\n);\r\n","import React, { RefObject, useState } from 'react';\r\nimport appMessages from '../../../../App.messages';\r\nimport { IRouterWithIntl, injectIntlWithObserver } from '../../../../utils';\r\nimport { TythonColumnsEnum } from '../../@data/store/schema/ColumnsEnum';\r\nimport { ICustomCalenderDateRange } from '../../components/CustomCalender/CustomCalender.types';\r\nimport { PERFORMANCE_DEFAULT_COLUMNS, PERFORMANCE_DEFAULT_METRICS } from '../../constants/common';\r\nimport { useReportQuery } from '../../hooks/useReportQuery';\r\nimport { IReportsMetadata, TythonReportingDataRow } from '../@data/store/schema';\r\nimport { ReportCard } from '../ReportCard/ReportCard';\r\nimport { constructRequestBody } from '../ReportCard/ReportCard.helpers';\r\nimport { ActiveMetrics, ChartGrain, IChartButton, ReportCardType } from '../ReportCard/ReportCard.types';\r\nimport { IActiveFilter } from '../ReportDetailsPage/ActionBar/ActionBar';\r\n\r\nconst DATA_METRIC_ID = 'performance-report-card';\r\nconst CHART_DATA_METRIC_ID = 'performance-report-chart';\r\nexport interface IPerformanceReportCardProps extends IRouterWithIntl {\r\n  allowedChartTypes: IChartButton[];\r\n  showDetailsReportLink: boolean;\r\n  enableHideChartsButton?: boolean;\r\n  filters: IActiveFilter[];\r\n  dateRange: ICustomCalenderDateRange;\r\n  isDetailedView: boolean;\r\n  onChartGrainChanged?: (grain: ChartGrain) => void;\r\n  onSelectedMetricChanged?: (metric: string) => void;\r\n  onActiveMetricsChanged?: (activeMetrics: ActiveMetrics) => void;\r\n  onBreakdownChanged?: (breakdown: string[]) => void;\r\n  reportDetailedData?: TythonReportingDataRow[];\r\n  reportCardRef: RefObject<HTMLDivElement>;\r\n  reportMetadata?: IReportsMetadata;\r\n  summaryData?: TythonReportingDataRow[];\r\n}\r\nexport const PerformanceReportCard = injectIntlWithObserver<IPerformanceReportCardProps>(\r\n  ({\r\n    dateRange,\r\n    filters,\r\n    allowedChartTypes,\r\n    showDetailsReportLink,\r\n    enableHideChartsButton,\r\n    isDetailedView,\r\n    onChartGrainChanged,\r\n    onSelectedMetricChanged,\r\n    onActiveMetricsChanged,\r\n    onBreakdownChanged,\r\n    reportDetailedData,\r\n    reportCardRef,\r\n    intl: { formatMessage },\r\n    reportMetadata,\r\n    summaryData,\r\n    history,\r\n    location,\r\n    match,\r\n  }) => {\r\n    const title = formatMessage(appMessages.performanceCardTitle);\r\n    const [currentChartGrain, setCurrentChartGrain] = useState(ChartGrain.DAILY);\r\n    const { data: reportData } = useReportQuery(\r\n      constructRequestBody(title, dateRange, currentChartGrain, isDetailedView ? filters : [], [], reportMetadata?.metrics || []),\r\n      isDetailedView,\r\n      !!reportMetadata\r\n    );\r\n    return (\r\n      <div data-metric={DATA_METRIC_ID}>\r\n        <ReportCard\r\n          title={title}\r\n          allowedChartTypes={allowedChartTypes}\r\n          allowedChartGrains={reportMetadata?.grains || []}\r\n          defaultChartGrain={ChartGrain.DAILY}\r\n          reportData={reportData}\r\n          reportDetailedData={reportDetailedData}\r\n          summaryData={summaryData}\r\n          isSummaryDataLoaded={!!summaryData}\r\n          showChartGrains\r\n          showMetricsMarkers\r\n          dataMetrics={{ chartDataMetrics: CHART_DATA_METRIC_ID }}\r\n          type={ReportCardType.PERFORMANCE}\r\n          showDetailsReportLink={showDetailsReportLink}\r\n          enableHideChartsButton={enableHideChartsButton}\r\n          dateRange={dateRange}\r\n          isDetailedView={isDetailedView}\r\n          filters={filters}\r\n          history={history}\r\n          location={location}\r\n          match={match}\r\n          defaultColumns={PERFORMANCE_DEFAULT_COLUMNS}\r\n          defaultMetrics={PERFORMANCE_DEFAULT_METRICS}\r\n          hasMinimumBreakdown={false}\r\n          reportMetadata={reportMetadata}\r\n          dateDimension={TythonColumnsEnum.DateTime}\r\n          onChartGrainChanged={(updatedGrain) => {\r\n            onChartGrainChanged && onChartGrainChanged(updatedGrain);\r\n            setCurrentChartGrain(updatedGrain);\r\n          }}\r\n          onBreakDownChanged={onBreakdownChanged}\r\n          onSelectedMetricChanged={onSelectedMetricChanged}\r\n          onActiveMetricsChanged={onActiveMetricsChanged}\r\n          reportCardRef={reportCardRef}\r\n        />\r\n      </div>\r\n    );\r\n  }\r\n);\r\n","import { observer } from 'mobx-react';\r\nimport React, { RefObject, useState } from 'react';\r\nimport { injectIntl } from 'react-intl';\r\nimport appMessages from '../../../../App.messages';\r\nimport { IRouterWithIntl } from '../../../../utils';\r\nimport { TythonColumnsEnum } from '../../@data/store/schema/ColumnsEnum';\r\nimport { ICustomCalenderDateRange } from '../../components/CustomCalender/CustomCalender.types';\r\nimport { SITE_DEFAULT_COLUMNS, SITE_DEFAULT_METRICS } from '../../constants/common';\r\nimport { useReportQuery } from '../../hooks/useReportQuery';\r\nimport { IReportsMetadata, TythonReportingDataRow } from '../@data/store/schema';\r\nimport { ReportCard } from '../ReportCard/ReportCard';\r\nimport { constructRequestBody } from '../ReportCard/ReportCard.helpers';\r\nimport { ActiveMetrics, ChartGrain, IChartButton, ReportCardType } from '../ReportCard/ReportCard.types';\r\nimport { IActiveFilter } from '../ReportDetailsPage/ActionBar/ActionBar';\r\n\r\nconst CHART_DATA_METRIC_ID = 'sites-chart';\r\nexport interface ISitesReportCardProps extends IRouterWithIntl {\r\n  dateRange: ICustomCalenderDateRange;\r\n  filters: IActiveFilter[];\r\n  allowedChartTypes: IChartButton[];\r\n  showDetailsReportLink: boolean;\r\n  enableHideChartsButton?: boolean;\r\n  showMetricsMarkers?: boolean;\r\n  isDetailedView: boolean;\r\n  onChartGrainChanged?: (grain: ChartGrain) => void;\r\n  onSelectedMetricChanged?: (metric: string) => void;\r\n  onActiveMetricsChanged?: (activeMetrics: ActiveMetrics) => void;\r\n  onBreakdownChanged?: (breakdown: string[]) => void;\r\n  reportDetailedData?: TythonReportingDataRow[];\r\n  reportCardRef: RefObject<HTMLDivElement>;\r\n  reportMetadata?: IReportsMetadata;\r\n  summaryData?: TythonReportingDataRow[];\r\n}\r\n\r\nexport const SitesReportCard = observer(\r\n  injectIntl(\r\n    ({\r\n      dateRange,\r\n      filters,\r\n      allowedChartTypes,\r\n      enableHideChartsButton,\r\n      showDetailsReportLink,\r\n      showMetricsMarkers = false,\r\n      isDetailedView,\r\n      onChartGrainChanged,\r\n      onSelectedMetricChanged,\r\n      onActiveMetricsChanged,\r\n      onBreakdownChanged,\r\n      reportDetailedData,\r\n      reportCardRef,\r\n      intl: { formatMessage },\r\n      reportMetadata,\r\n      summaryData,\r\n      history,\r\n      location,\r\n      match,\r\n    }: ISitesReportCardProps) => {\r\n      const title = formatMessage(appMessages.sitesCardTitle);\r\n      const mainDimension = TythonColumnsEnum.PropertyUrl;\r\n      const [currentChartGrain, setCurrentChartGrain] = useState(ChartGrain.DAILY);\r\n      const { data: reportData } = useReportQuery(\r\n        constructRequestBody(\r\n          title,\r\n          dateRange,\r\n          currentChartGrain,\r\n          isDetailedView ? filters : [],\r\n          [mainDimension],\r\n          reportMetadata?.metrics || []\r\n        ),\r\n        isDetailedView,\r\n        !!reportMetadata\r\n      );\r\n      return (\r\n        <ReportCard\r\n          title={title}\r\n          reportData={reportData}\r\n          reportDetailedData={reportDetailedData}\r\n          summaryData={summaryData}\r\n          isSummaryDataLoaded={!!summaryData}\r\n          allowedChartTypes={allowedChartTypes}\r\n          allowedChartGrains={reportMetadata?.grains || []}\r\n          dataMetrics={{ chartDataMetrics: CHART_DATA_METRIC_ID }}\r\n          mainDimension={mainDimension}\r\n          type={ReportCardType.SITE}\r\n          enableHideChartsButton={enableHideChartsButton}\r\n          showDetailsReportLink={showDetailsReportLink}\r\n          dateRange={dateRange}\r\n          showMetricsMarkers={showMetricsMarkers}\r\n          isDetailedView={isDetailedView}\r\n          filters={filters}\r\n          history={history}\r\n          location={location}\r\n          match={match}\r\n          defaultColumns={SITE_DEFAULT_COLUMNS}\r\n          defaultMetrics={SITE_DEFAULT_METRICS}\r\n          hasMinimumBreakdown={true}\r\n          reportMetadata={reportMetadata}\r\n          dateDimension={TythonColumnsEnum.DateTime}\r\n          onChartGrainChanged={(updatedGrain) => {\r\n            onChartGrainChanged && onChartGrainChanged(updatedGrain);\r\n            setCurrentChartGrain(updatedGrain);\r\n          }}\r\n          onBreakDownChanged={onBreakdownChanged}\r\n          onSelectedMetricChanged={onSelectedMetricChanged}\r\n          onActiveMetricsChanged={onActiveMetricsChanged}\r\n          reportCardRef={reportCardRef}\r\n        />\r\n      );\r\n    }\r\n  )\r\n);\r\n","import { getTheme, ITheme, mergeStyleSets } from '@fluentui/react';\r\nimport { IPubcenterSpacing } from '../../../../../../../theme';\r\n\r\nexport interface IEmptyChartStyleProps {\r\n  theme: ITheme;\r\n}\r\n\r\ntype StyleProperties =\r\n  | 'highlightedFilterInfoContainer'\r\n  | 'filterInfoContainer'\r\n  | 'filterInfoContainerUnfocused'\r\n  | 'filterListPageStyle'\r\n  | 'filterCloseIcon'\r\n  | 'highlightedFilterInfoSelectors'\r\n  | 'filterInfoSelectors'\r\n  | 'filterBarFocused'\r\n  | 'filterBarUnFocused'\r\n  | 'filterIcon'\r\n  | 'filterInfoFocused'\r\n  | 'hidden'\r\n  | 'filterInfoUnfocused';\r\ntype FilterListBarStyles = Record<StyleProperties, string>;\r\n\r\nexport const getStyles = (props: IEmptyChartStyleProps): FilterListBarStyles => {\r\n  const { theme } = props;\r\n  const spacing = theme.spacing as IPubcenterSpacing;\r\n  return mergeStyleSets({\r\n    filterBarFocused: {\r\n      backgroundColor: theme.palette.neutralLighter,\r\n      display: 'flex',\r\n      marginBottom: spacing.size16,\r\n      position: 'relative',\r\n    },\r\n    filterBarUnFocused: {\r\n      marginBottom: spacing.size16,\r\n      marginLeft: spacing.size24,\r\n      display: 'flex',\r\n      flexDirection: 'row',\r\n      overflow: 'hidden',\r\n    },\r\n    filterInfoContainer: {\r\n      display: 'flex',\r\n      flexDirection: 'row',\r\n      backgroundColor: theme.palette.neutralSecondary,\r\n      margin: '8px 0 8px 16px',\r\n      color: theme.palette.white,\r\n      cursor: 'pointer',\r\n      alignItems: 'center',\r\n    },\r\n    filterInfoContainerUnfocused: {\r\n      display: 'flex',\r\n      flexDirection: 'row',\r\n    },\r\n    highlightedFilterInfoContainer: {\r\n      display: 'flex',\r\n      flexDirection: 'row',\r\n      backgroundColor: theme.palette.themePrimary,\r\n      margin: '8px 0 8px 16px',\r\n      color: theme.palette.white,\r\n      cursor: 'pointer',\r\n    },\r\n    filterInfoFocused: {\r\n      fontSize: theme.fonts.medium.fontSize,\r\n      alignContent: 'center',\r\n      padding: '4px 16px',\r\n      lineHeight: '19px',\r\n      display: 'inline-block',\r\n    },\r\n    filterInfoSelectors: {\r\n      selectors: {\r\n        '&:focus, &:hover': {\r\n          backgroundColor: theme.palette.neutralPrimaryAlt,\r\n        },\r\n      },\r\n    },\r\n    highlightedFilterInfoSelectors: {\r\n      selectors: {\r\n        '&:focus, &:hover': {\r\n          backgroundColor: theme.palette.themeDark,\r\n        },\r\n      },\r\n    },\r\n    filterCloseIcon: {\r\n      '&:focus, &:hover': {\r\n        backgroundColor: theme.palette.neutralPrimaryAlt,\r\n        color: theme.palette.white,\r\n      },\r\n      color: theme.palette.white,\r\n    },\r\n    hidden: {\r\n      '&:focus, &:hover, &:click': {\r\n        backgroundColor: theme.palette.white,\r\n        color: theme.palette.white,\r\n      },\r\n      color: theme.palette.white,\r\n      backgroundColor: theme.palette.white,\r\n      width: 0,\r\n    },\r\n    filterIcon: {\r\n      padding: '5px 4px',\r\n      color: theme.palette.themePrimary,\r\n    },\r\n    filterInfoUnfocused: {\r\n      display: 'flex',\r\n      alignItems: 'center',\r\n      color: theme.palette.themePrimary,\r\n      textAlign: 'center',\r\n      verticalAlign: 'center',\r\n      cursor: 'pointer',\r\n      padding: '3px 4px',\r\n    },\r\n    filterListPageStyle: {\r\n      display: 'flex',\r\n      flexFlow: 'row wrap',\r\n    },\r\n  });\r\n};\r\nexport function getClassNames<PropType>(props?: PropType) {\r\n  return getStyles({ theme: getTheme(), ...props });\r\n}\r\n","import { IconButton, css } from '@fluentui/react';\r\nimport React from 'react';\r\nimport { isButtonPressKey } from '../../../../../../utils/AccessibilityUtils';\r\nimport { getClassNames } from './FilterListBar.styles';\r\n\r\nexport interface IFilterListItemProps {\r\n  id: string;\r\n  filterKey: string;\r\n  title: string;\r\n  isFocused: boolean;\r\n  onRemove: (key: string) => void;\r\n  onClick: (key: string) => void;\r\n}\r\n\r\nexport const FilterListItem = ({ id, filterKey, title, isFocused, onClick, onRemove }: IFilterListItemProps) => {\r\n  const classNames = getClassNames();\r\n  return (\r\n    <div id={id} className={isFocused ? classNames.filterInfoContainer : classNames.filterInfoContainerUnfocused}>\r\n      <div\r\n        className={isFocused ? css(classNames.filterInfoFocused, classNames.filterInfoSelectors) : classNames.filterInfoUnfocused}\r\n        onClick={() => {\r\n          onClick(filterKey);\r\n        }}\r\n        onKeyDown={(ev) => isButtonPressKey(ev.key)}\r\n        role=\"button\"\r\n        // tabIndex={0}\r\n        data-is-focusable={true}\r\n      >\r\n        {title}\r\n      </div>\r\n      <IconButton\r\n        className={isFocused ? classNames.filterCloseIcon : classNames.hidden}\r\n        iconProps={{ iconName: 'Cancel' }}\r\n        onClick={() => {\r\n          onRemove(filterKey);\r\n        }}\r\n        tabIndex={0}\r\n        onKeyDown={(ev) => isButtonPressKey(ev.key)}\r\n        aria-label={''}\r\n        data-is-focusable={true}\r\n      />\r\n    </div>\r\n  );\r\n};\r\n","import { FocusZone, FocusZoneDirection } from '@fluentui/react';\r\nimport { useBoolean } from '@fluentui/react-hooks';\r\nimport React, { useRef } from 'react';\r\nimport { getClassNames } from './FilterListBar.styles';\r\nimport { FilterListItem } from './FilterListItem';\r\n\r\nexport interface IFilterListBarProps {\r\n  filterItems: IFilterItem[];\r\n}\r\nexport interface IFilterItem {\r\n  key: string;\r\n  title: string;\r\n  onRemove: (key: string) => void;\r\n  onClick: (key: string) => void;\r\n}\r\nconst DATA_METRIC_ID = 'filter-list-bar';\r\nexport const FilterListBar = ({ filterItems }: IFilterListBarProps) => {\r\n  const classNames = getClassNames();\r\n  const [isBarFocused, { setFalse: setBarUnfocused, setTrue: setBarFocused }] = useBoolean(false);\r\n  const filterBarRef = useRef<HTMLDivElement>(null);\r\n  return (\r\n    <div\r\n      tabIndex={0}\r\n      ref={filterBarRef}\r\n      onFocus={(ev) => {\r\n        setBarFocused();\r\n      }}\r\n      onBlur={() => {\r\n        setBarUnfocused();\r\n      }}\r\n      className={isBarFocused ? classNames.filterBarFocused : classNames.filterBarUnFocused}\r\n      data-metric={DATA_METRIC_ID}\r\n    >\r\n      <FocusZone\r\n        className={classNames.filterListPageStyle}\r\n        direction={FocusZoneDirection.horizontal}\r\n        isCircularNavigation={true}\r\n        aria-label={''}\r\n        aria-describedby=\"filterListAriaDescription\"\r\n      >\r\n        {filterItems.map((item, index) => {\r\n          return (\r\n            <FilterListItem\r\n              key={`filterFocusedList-${index}`}\r\n              filterKey={item.key}\r\n              id={item.key}\r\n              data-list-index={index}\r\n              title={item.title}\r\n              isFocused={isBarFocused}\r\n              onClick={(key) => isBarFocused && item.onClick(key)}\r\n              onRemove={(key) => isBarFocused && item.onRemove(key)}\r\n            />\r\n          );\r\n        })}\r\n      </FocusZone>\r\n    </div>\r\n  );\r\n};\r\n","import { IStackTokens, getTheme, mergeStyleSets } from '@fluentui/react';\r\nimport { IPubcenterTheme } from '../../../../../../../theme';\r\n\r\ntype StyleProperties = 'buttonAction' | 'root' | 'cardRootStyle';\r\ntype ManageFilterStyles = Record<StyleProperties, string>;\r\ninterface IReportDetailsPageStyleProps {}\r\nconst theme = (getTheme() as unknown) as IPubcenterTheme;\r\nconst spacing = theme.spacing;\r\n\r\nexport const getStyles = (props: IReportDetailsPageStyleProps): ManageFilterStyles => {\r\n  return mergeStyleSets({\r\n    buttonAction: {\r\n      width: '100%',\r\n    },\r\n    root: {\r\n      padding: '20px',\r\n    },\r\n    cardRootStyle: {\r\n      boxShadow: 0,\r\n    },\r\n  });\r\n};\r\nexport const formTitleStyles = {\r\n  root: {\r\n    marginBottom: spacing.size24,\r\n  },\r\n};\r\nexport function getClassNames<PropType>(props?: PropType): ManageFilterStyles {\r\n  return getStyles({ theme: getTheme(), ...props });\r\n}\r\nexport function getStackTokens(): IStackTokens {\r\n  return { childrenGap: spacing.size12 };\r\n}\r\n","import { Callout, DefaultButton, DirectionalHint, PrimaryButton, ShimmerElementType, ShimmerElementsGroup, Stack } from '@fluentui/react';\r\nimport { useId } from '@fluentui/react-hooks';\r\nimport React, { useEffect, useState } from 'react';\r\nimport { InjectedIntlProps } from 'react-intl';\r\nimport appMessages from '../../../../../../App.messages';\r\nimport { Card } from '../../../../../../components/Card';\r\nimport { ICheckbox } from '../../../../../../components/CheckboxGroup';\r\nimport { CheckboxTreeWithSelectionBox, ISelection } from '../../../../../../components/CheckboxTreeWithSelectionBox';\r\nimport { injectIntlAndObserver } from '../../../../../../utils';\r\nimport { getReportColumnMetadataDisplayName } from '../../../../utils/intlHelper';\r\nimport { IMetadataElement } from '../../../@data/store/schema';\r\nimport { getClassNames, getStackTokens } from './ManageFilter.styles';\r\n\r\nexport interface IManageFilterProps extends InjectedIntlProps {\r\n  onFilterApplied: (dimension: IMetadataElement, selectedFilters: ISelection[]) => void;\r\n  onDismiss: () => void;\r\n  initialFilterMembers: ICheckbox[];\r\n  buttonId: string;\r\n  isFilterOpen: boolean;\r\n  areMembersLoaded: boolean;\r\n  activeDimension?: IMetadataElement;\r\n  isIncompatible?: boolean;\r\n  inCompatibilityMessage?: string;\r\n}\r\n\r\nexport const ManageFilter = injectIntlAndObserver(\r\n  ({\r\n    onFilterApplied,\r\n    onDismiss,\r\n    initialFilterMembers,\r\n    buttonId,\r\n    isFilterOpen,\r\n    activeDimension,\r\n    intl: { formatMessage },\r\n    areMembersLoaded,\r\n    isIncompatible,\r\n    inCompatibilityMessage,\r\n  }: IManageFilterProps) => {\r\n    const classNames = getClassNames();\r\n    const labelId = useId('callout-label');\r\n    const descriptionId = useId('callout-description');\r\n    const [selectedFilters, setSelectedFilter] = useState<ISelection[]>(getSelectedFilters(initialFilterMembers));\r\n    const [filterMembers, setFilterMembers] = useState<ICheckbox[]>(initialFilterMembers);\r\n\r\n    const onChildCheckboxChange = (event, isChecked, item: ICheckbox) => {\r\n      event?.stopPropagation();\r\n      const filterKey = item?.key as string;\r\n      if (!filterKey) {\r\n        return;\r\n      }\r\n      let newSelection;\r\n      if (isChecked) {\r\n        selectedFilters.push({\r\n          key: filterKey,\r\n          title: item.label || '',\r\n          isDisabled: false,\r\n        });\r\n        newSelection = selectedFilters;\r\n      } else {\r\n        newSelection = selectedFilters.filter((selected) => {\r\n          return selected.key !== filterKey;\r\n        });\r\n      }\r\n      onSelectionChanged(newSelection);\r\n    };\r\n    const onSelectionChanged = (newSelection: ISelection[]) => {\r\n      setSelectedFilter(newSelection);\r\n      setFilterMembers(\r\n        filterMembers.map((filterItem) => {\r\n          filterItem.checked = !!newSelection.find((value) => value.key === filterItem.key);\r\n          return filterItem;\r\n        })\r\n      );\r\n    };\r\n    const onApplyClicked = () => {\r\n      activeDimension && onFilterApplied(activeDimension, selectedFilters);\r\n      onDismiss();\r\n    };\r\n\r\n    useEffect(() => {\r\n      setFilterMembers(initialFilterMembers);\r\n      setSelectedFilter(getSelectedFilters(initialFilterMembers));\r\n    }, [initialFilterMembers]);\r\n    return (\r\n      <>\r\n        {isFilterOpen && (\r\n          <Callout\r\n            ariaLabelledBy={labelId}\r\n            ariaDescribedBy={descriptionId}\r\n            role=\"dialog\"\r\n            target={`#${buttonId}`}\r\n            onDismiss={onDismiss}\r\n            directionalHint={DirectionalHint.rightTopEdge}\r\n            setInitialFocus\r\n            isBeakVisible={false}\r\n          >\r\n            <div className={classNames.root}>\r\n              <Card\r\n                shimmerCustomElement={\r\n                  <ShimmerElementsGroup\r\n                    flexWrap\r\n                    width=\"100%\"\r\n                    shimmerElements={[{ type: ShimmerElementType.line, width: '100%', height: 20 }]}\r\n                  />\r\n                }\r\n                isDataLoaded={areMembersLoaded}\r\n                titleText={getReportColumnMetadataDisplayName(activeDimension?.key || '', formatMessage) || ''}\r\n                styleProps={{ rootStyle: classNames.cardRootStyle }}\r\n                {...(isIncompatible && {\r\n                  titleIconTooltipProps: {\r\n                    iconName: 'warning',\r\n                    tooltipText: inCompatibilityMessage || '',\r\n                  },\r\n                })}\r\n              >\r\n                <CheckboxTreeWithSelectionBox\r\n                  searchPlaceholderText={`${formatMessage(appMessages.search)} ${getReportColumnMetadataDisplayName(\r\n                    activeDimension?.key || '',\r\n                    formatMessage\r\n                  )}`}\r\n                  onChildCheckboxChange={onChildCheckboxChange}\r\n                  onRemoveSelection={(key) => {\r\n                    const newSelection = selectedFilters.filter((selected) => {\r\n                      return selected.key !== key;\r\n                    });\r\n                    onSelectionChanged(newSelection);\r\n                  }}\r\n                  onRemoveAllSelection={() => {\r\n                    onSelectionChanged([]);\r\n                  }}\r\n                  selectionList={selectedFilters}\r\n                  selectionTitle={''}\r\n                  groups={filterMembers}\r\n                  onParentCheckboxChange={() => {\r\n                    return;\r\n                  }}\r\n                />\r\n                <Stack horizontal horizontalAlign=\"space-between\" tokens={getStackTokens()}>\r\n                  <Stack.Item grow>\r\n                    <PrimaryButton onClick={onApplyClicked} className={classNames.buttonAction}>\r\n                      {formatMessage(appMessages.apply)}\r\n                    </PrimaryButton>\r\n                  </Stack.Item>\r\n                  <Stack.Item grow>\r\n                    <DefaultButton onClick={onDismiss} className={classNames.buttonAction}>\r\n                      {formatMessage(appMessages.cancel)}\r\n                    </DefaultButton>\r\n                  </Stack.Item>\r\n                </Stack>\r\n              </Card>\r\n            </div>\r\n          </Callout>\r\n        )}\r\n      </>\r\n    );\r\n  }\r\n);\r\nfunction getSelectedFilters(initialFilterMembers: ICheckbox[]): ISelection[] {\r\n  return initialFilterMembers\r\n    .filter((filterMember) => filterMember.checked)\r\n    .map((filterMember) => {\r\n      return {\r\n        key: String(filterMember.key),\r\n        title: filterMember.label || '',\r\n        isDisabled: false,\r\n      };\r\n    });\r\n}\r\n","import { CommandButton, IContextualMenuItem, IContextualMenuProps, Stack } from '@fluentui/react';\r\nimport { useBoolean, useId } from '@fluentui/react-hooks';\r\nimport React, { useEffect, useState } from 'react';\r\nimport { InjectedIntlProps } from 'react-intl';\r\nimport { Card } from '../../../../../components/Card/Card';\r\nimport { ICheckbox } from '../../../../../components/CheckboxGroup';\r\nimport { ISelection } from '../../../../../components/CheckboxTreeWithSelectionBox';\r\nimport { REPORTING_DATE_RANGE_PICKER } from '../../../../../constants/DataTestIdConstants';\r\nimport { injectIntlAndObserver } from '../../../../../utils';\r\nimport { getDataFromURL, setDataInURL } from '../../../@data/store/UrlQueryStore';\r\nimport { TythonColumnsEnum } from '../../../@data/store/schema/ColumnsEnum';\r\nimport { ReportsQueryStoreKeys } from '../../../@data/store/schema/ReportsQueryStoreKeys';\r\nimport { CustomCalender } from '../../../components/CustomCalender/CustomCalender';\r\nimport { ICustomCalenderDateRange, RangeType } from '../../../components/CustomCalender/CustomCalender.types';\r\nimport { EXCLUDED_FILTER_COLUMNS } from '../../../constants/common';\r\nimport { getReportColumnMetadataDisplayName } from '../../../utils/intlHelper';\r\nimport { fetchReportDimensionColumnMembers, resetColumnMembers } from '../../@data/actions';\r\nimport { IMetadataElement } from '../../@data/store/schema';\r\nimport { getColumnMembers } from '../../@data/store/selectors';\r\nimport { getReportPageStore } from '../../@data/store/store';\r\nimport { getIncompatibleFilterMessage } from '../../ReportCard/ReportCard.helpers';\r\nimport { ActiveMetrics, ReportCardType } from '../../ReportCard/ReportCard.types';\r\nimport { MenuItemWarningIcon } from '../WarningIcon/MenuItemWarningIcon';\r\nimport { FilterListBar } from './FilterListBar/FilterListBar';\r\nimport { ManageFilter } from './ManageFilter/ManageFilter';\r\n\r\nexport interface IActionBarProps extends InjectedIntlProps {\r\n  onSelectedDatesChanged: (dateRange: ICustomCalenderDateRange, rangeType: RangeType) => void;\r\n  onFilterChanged: (activeFilters: IActiveFilter[]) => void;\r\n  initialDateRange: ICustomCalenderDateRange;\r\n  initialDateRangeType: RangeType;\r\n  dimensions: IMetadataElement[];\r\n  isMetadataLoaded: boolean;\r\n  reportCardType: ReportCardType;\r\n  activeMetrics?: ActiveMetrics;\r\n}\r\n\r\nexport interface IActiveFilter {\r\n  key: string;\r\n  filterKey: string;\r\n  displayName: string;\r\n  values: IMetadataElement[];\r\n  incompatibleFields: string[];\r\n  totalMembers: number;\r\n}\r\n\r\nconst unAllowedFilters = EXCLUDED_FILTER_COLUMNS;\r\n\r\nexport const ActionBar = injectIntlAndObserver(\r\n  ({\r\n    onSelectedDatesChanged,\r\n    onFilterChanged,\r\n    initialDateRange,\r\n    initialDateRangeType,\r\n    dimensions,\r\n    isMetadataLoaded,\r\n    reportCardType,\r\n    activeMetrics,\r\n    intl: { formatMessage },\r\n  }: IActionBarProps) => {\r\n    const { reportType } = getReportPageStore();\r\n    const columnMembers = getColumnMembers();\r\n    const [isFilterOpen, { setTrue: setIsFilterOpenTrue, setFalse: setIsFilterOpenFalse }] = useBoolean(false);\r\n    const filterButtonId = useId('callout-button');\r\n    const [activeDimension, setActiveDimension] = useState<IMetadataElement>();\r\n    const storedFilters = getDataFromURL<IActiveFilter[]>(ReportsQueryStoreKeys.FILTERS) || [];\r\n    const [activeFilters, setActiveFilters] = useState<IActiveFilter[]>(storedFilters);\r\n    const currentColumnMembers = activeDimension && columnMembers[activeDimension?.filterKey];\r\n    const areColumnMembersLoaded = currentColumnMembers?.isDataLoaded;\r\n    let dimensionFilter: ICheckbox[] =\r\n      activeDimension && currentColumnMembers && currentColumnMembers.data\r\n        ? currentColumnMembers.data.map((member) => {\r\n            return {\r\n              checked: false,\r\n              key: member.Id,\r\n              label: member.DisplayName,\r\n            };\r\n          })\r\n        : [];\r\n    const currentFilter = activeFilters.find((activeFilter) => activeFilter.filterKey === activeDimension?.filterKey);\r\n    if (currentFilter) {\r\n      dimensionFilter = dimensionFilter.map((filter) => {\r\n        filter.checked = !!currentFilter.values?.find((value) => filter.key === value.key);\r\n        return filter;\r\n      });\r\n    }\r\n    const activeDimensionIncompatibleMessage = getIncompatibleFilterMessage(\r\n      activeDimension?.incompatibleFields?.map((field) => activeMetrics?.[field].metricName).join(',') || '',\r\n      getReportColumnMetadataDisplayName(activeDimension?.key || '', formatMessage) || ''\r\n    );\r\n    const filterMenuProps: IContextualMenuProps = {\r\n      items: isMetadataLoaded\r\n        ? dimensions\r\n            .filter((dimension) => !unAllowedFilters.includes(dimension.key as TythonColumnsEnum) && !!dimension.filterKey)\r\n            .map((dimension) => {\r\n              return {\r\n                key: dimension.key,\r\n                filterKey: dimension.filterKey,\r\n                text: getReportColumnMetadataDisplayName(dimension.key, formatMessage),\r\n                onRenderContent: (props, defaultRender) => {\r\n                  const message = getIncompatibleFilterMessage(\r\n                    dimension?.incompatibleFields?.map((field) => activeMetrics?.[field].metricName).join(',') || '',\r\n                    getReportColumnMetadataDisplayName(dimension.key, formatMessage)\r\n                  );\r\n                  return (\r\n                    <MenuItemWarningIcon\r\n                      text={props.item.text || ''}\r\n                      warningMessage={formatMessage(message.cantMessage, message.params)}\r\n                      isIncompatible={checkFieldCompatibility(dimension, activeMetrics)}\r\n                    />\r\n                  );\r\n                },\r\n                onClick: () => {\r\n                  setActiveDimension(dimension);\r\n                  setIsFilterOpenTrue();\r\n                },\r\n              } as IContextualMenuItem;\r\n            })\r\n        : [],\r\n    };\r\n    const onFilterApplied = (dimension: IMetadataElement, selectedFilters: ISelection[]) => {\r\n      const activeFilterIndex = activeFilters.findIndex((filter) => filter.filterKey === dimension.filterKey);\r\n      if (activeFilterIndex > -1) {\r\n        if (selectedFilters.length <= 0) {\r\n          activeFilters.splice(activeFilterIndex, 1);\r\n        } else {\r\n          activeFilters[activeFilterIndex].values = selectedFilters.map((selected) => ({\r\n            key: selected.key,\r\n            filterKey: selected.key,\r\n            displayName: selected.title || '',\r\n            incompatibleFields: [],\r\n          }));\r\n        }\r\n      } else {\r\n        activeFilters.push({\r\n          key: dimension.key,\r\n          filterKey: dimension.filterKey,\r\n          displayName: getReportColumnMetadataDisplayName(dimension.key, formatMessage),\r\n          totalMembers: currentColumnMembers?.data ? currentColumnMembers?.data.length : 0,\r\n          values: selectedFilters.map((selected) => ({\r\n            key: selected.key,\r\n            filterKey: selected.key,\r\n            displayName: selected.title || '',\r\n            incompatibleFields: [],\r\n          })),\r\n          incompatibleFields: dimension.incompatibleFields,\r\n        });\r\n      }\r\n      setActiveFilters([...activeFilters]);\r\n      onFilterChanged(activeFilters);\r\n      setDataInURL(ReportsQueryStoreKeys.FILTERS, activeFilters);\r\n    };\r\n\r\n    useEffect(() => {\r\n      if (activeDimension && !areColumnMembersLoaded) {\r\n        fetchReportDimensionColumnMembers(\r\n          {\r\n            column: activeDimension?.filterKey,\r\n            reportType,\r\n          },\r\n          reportCardType\r\n        );\r\n      }\r\n    }, [activeDimension, reportType, reportCardType, areColumnMembersLoaded]);\r\n    useEffect(() => {\r\n      return () => {\r\n        resetColumnMembers();\r\n      };\r\n    }, []);\r\n\r\n    return (\r\n      <Card isDataLoaded={true} titleText={''}>\r\n        <Stack horizontal horizontalAlign=\"space-between\">\r\n          <div>\r\n            <CommandButton\r\n              disabled={!isMetadataLoaded}\r\n              id={filterButtonId}\r\n              iconProps={{ iconName: 'Filter' }}\r\n              text=\"Filter\"\r\n              menuProps={filterMenuProps}\r\n            />\r\n            <div>\r\n              <ManageFilter\r\n                initialFilterMembers={dimensionFilter}\r\n                buttonId={filterButtonId}\r\n                isFilterOpen={isFilterOpen}\r\n                onDismiss={function (): void {\r\n                  setIsFilterOpenFalse();\r\n                }}\r\n                activeDimension={activeDimension}\r\n                isIncompatible={activeDimension && checkFieldCompatibility(activeDimension, activeMetrics)}\r\n                inCompatibilityMessage={formatMessage(\r\n                  activeDimensionIncompatibleMessage.cantMessage,\r\n                  activeDimensionIncompatibleMessage.params\r\n                )}\r\n                onFilterApplied={onFilterApplied}\r\n                areMembersLoaded={!!areColumnMembersLoaded}\r\n              />\r\n            </div>\r\n          </div>\r\n          <div>\r\n            <CustomCalender\r\n              dataTestId={REPORTING_DATE_RANGE_PICKER}\r\n              onSelectedDatesChanged={onSelectedDatesChanged}\r\n              initialDateRange={initialDateRange}\r\n              initialRangeType={initialDateRangeType}\r\n            />\r\n          </div>\r\n        </Stack>\r\n        {activeFilters.length > 0 && (\r\n          <FilterListBar\r\n            filterItems={activeFilters.map((filter) => {\r\n              return {\r\n                key: filter.key || '',\r\n                onClick() {\r\n                  setActiveDimension({\r\n                    key: filter.key,\r\n                    filterKey: filter.filterKey,\r\n                    displayName: getReportColumnMetadataDisplayName(filter.key, formatMessage),\r\n                    incompatibleFields: filter.incompatibleFields,\r\n                  });\r\n                  setIsFilterOpenTrue();\r\n                },\r\n                onRemove() {\r\n                  const updatedFilters = activeFilters.filter((active) => active.key !== filter.key);\r\n                  setActiveFilters(updatedFilters);\r\n                  onFilterChanged(updatedFilters);\r\n                  setDataInURL(ReportsQueryStoreKeys.FILTERS, updatedFilters);\r\n                },\r\n                title: `${getReportColumnMetadataDisplayName(filter.key, formatMessage)}: ${filter.values[0].displayName}${\r\n                  filter.values.length > 1 ? ` and ${filter.values.length - 1} more` : ''\r\n                }`,\r\n              };\r\n            })}\r\n          />\r\n        )}\r\n      </Card>\r\n    );\r\n  }\r\n);\r\n\r\nfunction checkFieldCompatibility(dimension: IMetadataElement, activeMetrics: ActiveMetrics | undefined) {\r\n  return (\r\n    dimension.incompatibleFields &&\r\n    dimension.incompatibleFields.filter((field) => {\r\n      return !!activeMetrics?.[field] && activeMetrics?.[field].isVisible;\r\n    }).length > 0\r\n  );\r\n}\r\n","import { IStackTokens, getTheme, mergeStyleSets } from '@fluentui/react';\r\nimport { IPubcenterTheme } from '../../../../../theme';\r\n\r\ntype StyleProperties = 'root';\r\ntype ReportDetailsPageStyles = Record<StyleProperties, string>;\r\ninterface IReportDetailsPageStyleProps {}\r\nconst theme = (getTheme() as unknown) as IPubcenterTheme;\r\nconst spacing = theme.spacing;\r\n\r\nexport const getStyles = (props: IReportDetailsPageStyleProps): ReportDetailsPageStyles => {\r\n  return mergeStyleSets({\r\n    root: {\r\n      display: 'flex',\r\n      flexDirection: 'column',\r\n      overflowY: 'auto',\r\n      flex: 1,\r\n    },\r\n  });\r\n};\r\nexport const formTitleStyles = {\r\n  root: {\r\n    marginBottom: spacing.size24,\r\n  },\r\n};\r\nexport function getClassNames<PropType>(props?: PropType): ReportDetailsPageStyles {\r\n  return getStyles({ theme: getTheme(), ...props });\r\n}\r\nexport function getStackTokens(): IStackTokens {\r\n  return { childrenGap: spacing.size12 };\r\n}\r\n","import { getTheme, mergeStyleSets } from '@fluentui/react';\r\nimport { IPubcenterSpacing } from '../../../../../../theme';\r\n\r\ntype StyleProperties = 'navBackButton';\r\ntype SubPageNavbarStyles = Record<StyleProperties, string>;\r\ninterface ISubPageNavbarStyleProps {}\r\nconst theme = getTheme();\r\nexport const getStyles = (props: ISubPageNavbarStyleProps): SubPageNavbarStyles => {\r\n  const spacing = theme.spacing as IPubcenterSpacing;\r\n  return mergeStyleSets({\r\n    navBackButton: [\r\n      'ms-navBackButton',\r\n      {\r\n        display: 'flex',\r\n        backgroundColor: theme.palette.neutralLighter,\r\n        height: spacing.size44,\r\n        alignItems: 'center',\r\n      },\r\n    ],\r\n  });\r\n};\r\n\r\nexport const breadcrumbStyles = {\r\n  root: {\r\n    margin: 0,\r\n    alignItems: 'center',\r\n  },\r\n  item: {\r\n    lineHeight: '22px',\r\n    fontSize: theme.fonts.mediumPlus.fontSize,\r\n    color: theme.palette.neutralPrimary,\r\n  },\r\n  chevron: {\r\n    lineHeight: '22px',\r\n    color: theme.palette.neutralPrimary,\r\n  },\r\n};\r\n\r\nexport function getClassNames<PropType>(props?: PropType): SubPageNavbarStyles {\r\n  return getStyles({ theme: getTheme(), ...props });\r\n}\r\n","import { ActionButton, Breadcrumb, IBreadcrumbItem } from '@fluentui/react';\r\nimport * as React from 'react';\r\nimport { InjectedIntlProps, injectIntl } from 'react-intl';\r\nimport { onNavigateBack } from '../../../../../@data';\r\nimport AppMessages from '../../../../../App.messages';\r\nimport { breadcrumbStyles, getClassNames } from './SubPageNavbar.styles';\r\n\r\ninterface ISubPageNavBarProps extends InjectedIntlProps {\r\n  backAriaDescription: string;\r\n  breadcrumbAriaLabel?: string;\r\n  breadcrumbItems?: IBreadcrumbItem[];\r\n}\r\n\r\nexport const SubPageNavBar = injectIntl(({ intl, backAriaDescription, breadcrumbAriaLabel, breadcrumbItems }: ISubPageNavBarProps) => {\r\n  const { navBackButton } = getClassNames();\r\n  return (\r\n    <div className={navBackButton}>\r\n      <ActionButton\r\n        iconProps={{\r\n          iconName: 'Back',\r\n        }}\r\n        onClick={() => onNavigateBack()}\r\n        ariaDescription={backAriaDescription}\r\n      >\r\n        {intl.formatMessage(AppMessages.back)}\r\n      </ActionButton>\r\n      {breadcrumbItems && <Breadcrumb items={breadcrumbItems} ariaLabel={breadcrumbAriaLabel} styles={breadcrumbStyles} />}\r\n    </div>\r\n  );\r\n});\r\n","import { CommandButton, IBreadcrumbItem, Stack } from '@fluentui/react';\r\nimport * as React from 'react';\r\nimport { useEffect, useRef, useState } from 'react';\r\nimport { InjectedIntlProps } from 'react-intl';\r\nimport { useI18n } from '../../../../../i18n/useI18n';\r\nimport { LayoutMode, getAppStore, isTythonSelfServeUser, onLayoutChanged, showLoadingToastNotification } from '../../../../@data';\r\nimport appMessages from '../../../../App.messages';\r\nimport { FormTitle } from '../../../../components/Form';\r\nimport { EmptyLayout } from '../../../../layout/EmptyLayout/EmptyLayout';\r\nimport { IRouterWithIntl, injectIntlWithObserver } from '../../../../utils';\r\nimport { getStore } from '../../../ad-management/Account/Settings/@data/store/store';\r\nimport { getDataFromURL, setDataInURL } from '../../@data/store/UrlQueryStore';\r\nimport { TythonColumnsEnum } from '../../@data/store/schema/ColumnsEnum';\r\nimport { ReportsQueryStoreKeys } from '../../@data/store/schema/ReportsQueryStoreKeys';\r\nimport ReportMessages from '../../Report.messages';\r\nimport { ICustomCalenderDateRange, RangeType } from '../../components/CustomCalender/CustomCalender.types';\r\nimport {\r\n  DETAILED_ADUNIT_ALLOWED_CHARTS,\r\n  DETAILED_COUNTRY_ALLOWED_CHARTS,\r\n  DETAILED_MEDIATION_ALLOWED_CHARTS,\r\n  DETAILED_PERFORMANCE_ALLOWED_CHARTS,\r\n  DETAILED_SITE_ALLOWED_CHARTS,\r\n} from '../../constants/allowedChartsType';\r\nimport { ALLOWED_MEDIATION_FILTER_COLUMNS } from '../../constants/common';\r\nimport { useMediationAvailable } from '../../hooks/useMediationAvailable';\r\nimport { useMediationReportMetadata, useMediationReportQuery, useReportMetadata, useReportQuery } from '../../hooks/useReportQuery';\r\nimport { exportToPNG, getExportFileName } from '../../utils/exportHelper';\r\nimport { getInitialDateRange } from '../../utils/getInitialDateRange';\r\nimport { AdUnitsReportCard } from '../AdUnitsReportCard/AdUnitsReportCard';\r\nimport { CountryReportCard } from '../CountryReportCard/CountryReportCard';\r\nimport { MediationReportCard } from '../MediationReportCard/MediationReportCard';\r\nimport { PerformanceReportCard } from '../PerformanceReportCard/PerformanceReportCard';\r\nimport { constructMediationRequestBody, constructRequestBody, exportReport, getStartingBreakdown } from '../ReportCard/ReportCard.helpers';\r\nimport { ActiveMetrics, ChartGrain, IReportDetailsPageParams, ReportCardType } from '../ReportCard/ReportCard.types';\r\nimport { SitesReportCard } from '../SitesReportCard/SitesReportCard';\r\nimport { ActionBar, IActiveFilter } from './ActionBar/ActionBar';\r\nimport messages from './ReportDetailsPage.messages';\r\nimport { formTitleStyles, getClassNames, getStackTokens } from './ReportDetailsPage.styles';\r\nimport { SubPageNavBar } from './SubPageNavbar/SubPageNavbar';\r\n\r\ninterface IReportDetailsPageProps extends IRouterWithIntl<IReportDetailsPageParams>, InjectedIntlProps {}\r\n\r\nexport const ReportDetailsPage = injectIntlWithObserver(({ intl, match, location, history }: IReportDetailsPageProps) => {\r\n  const reportCardType = match.params.type;\r\n  const { formatMessage } = intl;\r\n  const { isMediationAvailable } = useMediationAvailable();\r\n  const { data: reportMetadata } = useReportMetadata();\r\n  const { data: mediationReportMetadata } = useMediationReportMetadata(!!isMediationAvailable);\r\n  const {\r\n    dateRange: { initialStartDate, initialEndDate },\r\n    initialDateRangeType,\r\n  } = getInitialDateRange();\r\n  const [calendarDateRange, setCalendarDateRange] = useState<ICustomCalenderDateRange>({\r\n    startDate: initialStartDate,\r\n    endDate: initialEndDate,\r\n  });\r\n  const storedFilters = getDataFromURL<IActiveFilter[]>(ReportsQueryStoreKeys.FILTERS) || [];\r\n  const [activeFilters, setActiveFilters] = useState<IActiveFilter[]>(storedFilters);\r\n  const [chartGrain, setChartGrain] = useState<ChartGrain>(ChartGrain.DAILY);\r\n  const [selectedMetric, setSelectedMetric] = useState<string>();\r\n  const [activeMetrics, setActiveMetrics] = useState<ActiveMetrics>();\r\n  const [currentBreakdown, setCurrentBreakdown] = useState(getStartingBreakdown(getMainDimension(reportCardType)));\r\n  const reportCardRef = useRef<HTMLDivElement>(null);\r\n  const reportTitle = getReportTitle(reportCardType, formatMessage);\r\n  const isMediationReport = reportCardType === ReportCardType.MEDIATION;\r\n  const mediationMetrics = mediationReportMetadata?.metrics.map((metric) => metric.key);\r\n  const canFetchDetails = !!reportMetadata && !!selectedMetric && !!chartGrain && !!currentBreakdown;\r\n  const canFetchMediationDetails = !!isMediationAvailable && isMediationReport;\r\n  const { publisher, userContext } = getAppStore();\r\n  const { systemPreferences } = getStore().active;\r\n  const { locale } = useI18n({ systemPreferences, publisher, userContext });\r\n\r\n  const breadcrumbItems: IBreadcrumbItem[] = [\r\n    {\r\n      key: 'Report',\r\n      text: 'Report',\r\n    },\r\n    {\r\n      key: 'reportCardType',\r\n      text: reportTitle,\r\n    },\r\n  ];\r\n  const { root } = getClassNames();\r\n  const availableMediationFilters = mediationReportMetadata?.dimensions.filter((dimension) =>\r\n    ALLOWED_MEDIATION_FILTER_COLUMNS.includes(TythonColumnsEnum[dimension.key])\r\n  );\r\n  const exportMetadata = isMediationReport ? mediationReportMetadata : reportMetadata;\r\n  const { data: summaryData } = useReportQuery(\r\n    constructRequestBody(ReportCardType.SUMMARY, calendarDateRange, ChartGrain.NONE, activeFilters, [], reportMetadata?.metrics || []),\r\n    false,\r\n    !!reportMetadata\r\n  );\r\n  const { data: detailedData } = useReportQuery(\r\n    constructRequestBody(reportTitle, calendarDateRange, chartGrain, activeFilters, currentBreakdown, reportMetadata?.metrics || []),\r\n    true,\r\n    canFetchDetails && !canFetchMediationDetails\r\n  );\r\n  const { data: mediationReportDetailedData } = useMediationReportQuery(\r\n    constructMediationRequestBody(calendarDateRange, chartGrain, activeFilters, currentBreakdown, mediationMetrics),\r\n    canFetchDetails && canFetchMediationDetails\r\n  );\r\n  const exportData = isMediationReport ? mediationReportDetailedData : detailedData;\r\n\r\n  const canExport = !!selectedMetric && !!exportMetadata && !!exportData;\r\n  const exportedFileName = getExportFileName(calendarDateRange, chartGrain, reportTitle, locale);\r\n\r\n  const onSelectedDatesChanged = (selectedDateRange: ICustomCalenderDateRange, rangeType: RangeType) => {\r\n    setDataInURL(ReportsQueryStoreKeys.DATE_RANGE, selectedDateRange);\r\n    setDataInURL(ReportsQueryStoreKeys.DATE_RANGE_TYPE, rangeType);\r\n    setCalendarDateRange({ ...selectedDateRange });\r\n  };\r\n  const onChartGrainChanged = (grain: ChartGrain) => {\r\n    setChartGrain(grain);\r\n  };\r\n  const onSelectedMetricChanged = (metric: string) => {\r\n    setSelectedMetric(metric);\r\n  };\r\n  const onActiveMetricsChanged = (changedMetrics: ActiveMetrics) => {\r\n    setActiveMetrics({ ...changedMetrics });\r\n  };\r\n  const onExportCSVClicked = () => {\r\n    if (!canExport) {\r\n      return;\r\n    }\r\n    exportReport(exportData, [...exportMetadata?.dimensions, ...exportMetadata?.metrics], exportedFileName, formatMessage);\r\n  };\r\n  const onExportPNGClicked = () => {\r\n    if (!canExport) {\r\n      return;\r\n    }\r\n    showLoadingToastNotification({\r\n      textMessageDescriptor: messages.generatingAndExportingPNG,\r\n      onDismiss: async () => {\r\n        reportCardRef.current && (await exportToPNG(reportCardRef.current, exportedFileName));\r\n      },\r\n    });\r\n  };\r\n\r\n  useEffect(() => {\r\n    onLayoutChanged(LayoutMode.ContentOnly);\r\n  }, []);\r\n\r\n  return (\r\n    <div className={root}>\r\n      <SubPageNavBar\r\n        breadcrumbAriaLabel={intl.formatMessage(messages.breadcrumbAriaLabel)}\r\n        breadcrumbItems={breadcrumbItems}\r\n        backAriaDescription={intl.formatMessage(messages.backButtonAriaDesc)}\r\n      />\r\n\r\n      <EmptyLayout>\r\n        {isTythonSelfServeUser() ? (\r\n          <>\r\n            <Stack styles={formTitleStyles} horizontal horizontalAlign=\"space-between\">\r\n              <FormTitle title={reportTitle} noHelpPopup={true} intl={intl} />\r\n              <div>\r\n                <CommandButton\r\n                  iconProps={{ iconName: 'export' }}\r\n                  text={intl.formatMessage(messages.exportButton)}\r\n                  menuProps={{\r\n                    items: [\r\n                      {\r\n                        key: 'exportCSV',\r\n                        text: intl.formatMessage(ReportMessages.exportCSV),\r\n                        onClick: onExportCSVClicked,\r\n                        disabled: !canExport,\r\n                      },\r\n                      {\r\n                        key: 'exportPNG',\r\n                        text: intl.formatMessage(ReportMessages.exportPNG),\r\n                        onClick: onExportPNGClicked,\r\n                        disabled: !canExport,\r\n                      },\r\n                    ],\r\n                  }}\r\n                />\r\n              </div>\r\n            </Stack>\r\n            <Stack tokens={getStackTokens()}>\r\n              <Stack.Item grow basis={'100%'}>\r\n                <ActionBar\r\n                  onSelectedDatesChanged={onSelectedDatesChanged}\r\n                  initialDateRange={{ startDate: initialStartDate, endDate: initialEndDate }}\r\n                  initialDateRangeType={initialDateRangeType}\r\n                  onFilterChanged={(changedFilters: IActiveFilter[]) => {\r\n                    setActiveFilters([...changedFilters]);\r\n                  }}\r\n                  dimensions={(isMediationReport ? availableMediationFilters : reportMetadata?.dimensions) || []}\r\n                  isMetadataLoaded={isMediationReport ? !!mediationReportMetadata : !!reportMetadata}\r\n                  reportCardType={reportCardType}\r\n                  activeMetrics={activeMetrics}\r\n                />\r\n              </Stack.Item>\r\n              <Stack.Item grow basis={'100%'}>\r\n                {reportCardType === ReportCardType.PERFORMANCE && (\r\n                  <PerformanceReportCard\r\n                    allowedChartTypes={DETAILED_PERFORMANCE_ALLOWED_CHARTS}\r\n                    showDetailsReportLink={false}\r\n                    enableHideChartsButton={true}\r\n                    dateRange={calendarDateRange}\r\n                    isDetailedView={true}\r\n                    onChartGrainChanged={onChartGrainChanged}\r\n                    onSelectedMetricChanged={onSelectedMetricChanged}\r\n                    onBreakdownChanged={(updatedBreakdown) => {\r\n                      setCurrentBreakdown(updatedBreakdown);\r\n                    }}\r\n                    reportDetailedData={detailedData}\r\n                    filters={activeFilters}\r\n                    history={history}\r\n                    location={location}\r\n                    match={match}\r\n                    reportCardRef={reportCardRef}\r\n                    onActiveMetricsChanged={onActiveMetricsChanged}\r\n                    reportMetadata={reportMetadata}\r\n                    summaryData={summaryData}\r\n                  />\r\n                )}\r\n                {reportCardType === ReportCardType.ADUNIT && (\r\n                  <AdUnitsReportCard\r\n                    allowedChartTypes={DETAILED_ADUNIT_ALLOWED_CHARTS}\r\n                    showDetailsReportLink={false}\r\n                    enableHideChartsButton={true}\r\n                    dateRange={calendarDateRange}\r\n                    showMetricsMarkers={true}\r\n                    isDetailedView={true}\r\n                    onChartGrainChanged={onChartGrainChanged}\r\n                    onSelectedMetricChanged={onSelectedMetricChanged}\r\n                    onBreakdownChanged={(updatedBreakdown) => {\r\n                      setCurrentBreakdown(updatedBreakdown);\r\n                    }}\r\n                    reportDetailedData={detailedData}\r\n                    filters={activeFilters}\r\n                    history={history}\r\n                    location={location}\r\n                    match={match}\r\n                    reportCardRef={reportCardRef}\r\n                    onActiveMetricsChanged={onActiveMetricsChanged}\r\n                    reportMetadata={reportMetadata}\r\n                    summaryData={summaryData}\r\n                  />\r\n                )}\r\n                {reportCardType === ReportCardType.SITE && (\r\n                  <SitesReportCard\r\n                    allowedChartTypes={DETAILED_SITE_ALLOWED_CHARTS}\r\n                    showDetailsReportLink={false}\r\n                    enableHideChartsButton={true}\r\n                    dateRange={calendarDateRange}\r\n                    showMetricsMarkers={true}\r\n                    isDetailedView={true}\r\n                    onChartGrainChanged={onChartGrainChanged}\r\n                    onSelectedMetricChanged={onSelectedMetricChanged}\r\n                    onBreakdownChanged={(updatedBreakdown) => {\r\n                      setCurrentBreakdown(updatedBreakdown);\r\n                    }}\r\n                    reportDetailedData={detailedData}\r\n                    filters={activeFilters}\r\n                    history={history}\r\n                    location={location}\r\n                    match={match}\r\n                    reportCardRef={reportCardRef}\r\n                    onActiveMetricsChanged={onActiveMetricsChanged}\r\n                    reportMetadata={reportMetadata}\r\n                    summaryData={summaryData}\r\n                  />\r\n                )}\r\n                {reportCardType === ReportCardType.COUNTRY && (\r\n                  <CountryReportCard\r\n                    allowedChartTypes={DETAILED_COUNTRY_ALLOWED_CHARTS}\r\n                    showDetailsReportLink={false}\r\n                    enableHideChartsButton={true}\r\n                    dateRange={calendarDateRange}\r\n                    showMetricsMarkers={true}\r\n                    isDetailedView={true}\r\n                    onChartGrainChanged={onChartGrainChanged}\r\n                    onSelectedMetricChanged={onSelectedMetricChanged}\r\n                    onBreakdownChanged={(updatedBreakdown) => {\r\n                      setCurrentBreakdown(updatedBreakdown);\r\n                    }}\r\n                    reportDetailedData={detailedData}\r\n                    filters={activeFilters}\r\n                    history={history}\r\n                    location={location}\r\n                    match={match}\r\n                    reportCardRef={reportCardRef}\r\n                    onActiveMetricsChanged={onActiveMetricsChanged}\r\n                    reportMetadata={reportMetadata}\r\n                    summaryData={summaryData}\r\n                  />\r\n                )}\r\n                {isMediationAvailable && reportCardType === ReportCardType.MEDIATION && (\r\n                  <MediationReportCard\r\n                    dateRange={calendarDateRange}\r\n                    enableHideChartsButton={true}\r\n                    showMetricsMarkers={true}\r\n                    allowedChartTypes={DETAILED_MEDIATION_ALLOWED_CHARTS}\r\n                    showDetailsReportLink={false}\r\n                    isDetailedView={true}\r\n                    onChartGrainChanged={onChartGrainChanged}\r\n                    onSelectedMetricChanged={onSelectedMetricChanged}\r\n                    onBreakdownChanged={(updatedBreakdown) => {\r\n                      setCurrentBreakdown(updatedBreakdown);\r\n                    }}\r\n                    reportDetailedData={mediationReportDetailedData}\r\n                    filters={activeFilters}\r\n                    history={history}\r\n                    location={location}\r\n                    match={match}\r\n                    reportCardRef={reportCardRef}\r\n                    reportMetadata={mediationReportMetadata}\r\n                  />\r\n                )}\r\n              </Stack.Item>\r\n            </Stack>\r\n          </>\r\n        ) : (\r\n          <div>{formatMessage(ReportMessages.reportDescriptionForReportsNotApplicable)}</div>\r\n        )}\r\n      </EmptyLayout>\r\n    </div>\r\n  );\r\n});\r\n\r\nfunction getReportTitle(\r\n  reportCardType: ReportCardType,\r\n  formatMessage: (\r\n    messageDescriptor: ReactIntl.FormattedMessage.MessageDescriptor,\r\n    values?: { [key: string]: ReactIntl.MessageValue } | undefined\r\n  ) => string\r\n) {\r\n  switch (reportCardType) {\r\n    case ReportCardType.PERFORMANCE:\r\n      return formatMessage(appMessages.performanceCardTitle);\r\n    case ReportCardType.ADUNIT:\r\n      return formatMessage(appMessages.adUnitsCardTitle);\r\n    case ReportCardType.MEDIATION:\r\n      return formatMessage(appMessages.mediationCardTitle);\r\n    case ReportCardType.COUNTRY:\r\n      return formatMessage(appMessages.countryCardTitle);\r\n    case ReportCardType.SITE:\r\n      return formatMessage(appMessages.sitesCardTitle);\r\n    default:\r\n      return '';\r\n  }\r\n}\r\nfunction getMainDimension(reportCardType: ReportCardType) {\r\n  switch (reportCardType) {\r\n    case ReportCardType.ADUNIT:\r\n      return TythonColumnsEnum.AdUnitName;\r\n    case ReportCardType.MEDIATION:\r\n      return TythonColumnsEnum.AdUnitName;\r\n    case ReportCardType.COUNTRY:\r\n      return TythonColumnsEnum.Country;\r\n    case ReportCardType.SITE:\r\n      return TythonColumnsEnum.PropertyUrl;\r\n    default:\r\n      return '';\r\n  }\r\n}\r\n","import { getTheme, IStackTokens, ITheme, mergeStyleSets } from '@fluentui/react';\r\nimport { IPubcenterSpacing, IPubcenterTheme } from '../../../../../../theme';\r\n\r\ninterface IMetricCardStyleProps {\r\n  theme: ITheme;\r\n}\r\ntype StyleProperties = 'metricCard' | 'titleStyle' | 'metricStyle';\r\ntype MetricCardStyles = Record<StyleProperties, string>;\r\n\r\nexport const getStyles = (props: IMetricCardStyleProps): MetricCardStyles => {\r\n  const { theme } = props;\r\n  const spacing = theme.spacing as IPubcenterSpacing;\r\n\r\n  return mergeStyleSets({\r\n    metricCard: {\r\n      height: '100%',\r\n      display: 'flex',\r\n      alignItems: 'center',\r\n    },\r\n    titleStyle: {\r\n      whiteSpace: 'nowrap',\r\n    },\r\n    metricStyle: {\r\n      fontSize: '28px',\r\n      fontWeight: 700,\r\n      lineHeight: spacing.size32,\r\n      paddingBottom: spacing.size16,\r\n    },\r\n  });\r\n};\r\nexport function getClassNames<PropType>(props?: PropType) {\r\n  return getStyles({ theme: getTheme(), ...props });\r\n}\r\nexport function getStackTokens(): IStackTokens {\r\n  const theme = (getTheme() as unknown) as IPubcenterTheme;\r\n  const spacing = theme.spacing;\r\n\r\n  return { childrenGap: spacing.size12 };\r\n}\r\n","import { ShimmerElementsGroup, ShimmerElementType } from '@fluentui/react';\r\nimport { observer } from 'mobx-react';\r\nimport React from 'react';\r\nimport { Card } from '../../../../../components/Card/Card';\r\nimport { getClassNames } from './MetricCard.styles';\r\n\r\nexport interface IMetricCardProps {\r\n  title: string;\r\n  dataValue: string;\r\n  isDataLoaded?: boolean;\r\n}\r\n\r\nexport const MetricCard = observer(({ title, isDataLoaded, dataValue }: IMetricCardProps) => {\r\n  const { metricCard, titleStyle, metricStyle } = getClassNames();\r\n  return (\r\n    <Card\r\n      shimmerCustomElement={\r\n        <ShimmerElementsGroup\r\n          flexWrap\r\n          width=\"100%\"\r\n          shimmerElements={[\r\n            { type: ShimmerElementType.gap, width: '10%', height: 30 },\r\n            { type: ShimmerElementType.line, width: '80%', height: 20 },\r\n            { type: ShimmerElementType.gap, width: '10%', height: 30 },\r\n          ]}\r\n        />\r\n      }\r\n      isDataLoaded={isDataLoaded}\r\n      titleText={title}\r\n      styleProps={{ titleStyle }}\r\n    >\r\n      <div className={metricCard}>\r\n        <div className={metricStyle}>{dataValue ? dataValue : '--'}</div>\r\n      </div>\r\n    </Card>\r\n  );\r\n});\r\n","import { getTheme, IStackTokens, mergeStyleSets } from '@fluentui/react';\r\nimport { BreakPoints, IPubcenterTheme } from '../../../../../theme';\r\n\r\nconst { ResponsiveMedium, ResponsiveSmall } = BreakPoints;\r\n\r\nexport interface ITopMetricsStyleProps {\r\n  evenCards?: boolean;\r\n}\r\ntype StyleProperties = 'metricsWrapper' | 'smallCards' | 'cardsColumn';\r\n\r\ntype TopMetricsStyles = Record<StyleProperties, string>;\r\n\r\nexport const getStyles = ({ evenCards }: ITopMetricsStyleProps): TopMetricsStyles => {\r\n  return mergeStyleSets({\r\n    metricsWrapper: {\r\n      display: 'grid',\r\n      columnGap: '1%',\r\n      rowGap: '1%',\r\n      gridTemplateColumns: evenCards ? '1fr' : '1fr 3fr',\r\n      [ResponsiveMedium]: {\r\n        gridTemplateColumns: '1fr',\r\n      },\r\n      [ResponsiveSmall]: {\r\n        gridTemplateColumns: '1fr',\r\n      },\r\n    },\r\n    smallCards: {\r\n      display: 'grid',\r\n      columnGap: '1%',\r\n      gridAutoFlow: 'column',\r\n      gridAutoColumns: '1fr',\r\n      [ResponsiveSmall]: {\r\n        gridTemplateColumns: '1fr',\r\n        gridAutoFlow: 'initial',\r\n        gridAutoColumns: 'initial',\r\n      },\r\n    },\r\n    cardsColumn: {\r\n      display: 'grid',\r\n      rowGap: '2%',\r\n      gridTemplateRows: '49% 49%',\r\n      [ResponsiveSmall]: {\r\n        gridTemplateColumns: '49% 49%',\r\n        columnGap: '2%',\r\n        gridTemplateRows: '1fr',\r\n      },\r\n    },\r\n  });\r\n};\r\nexport function getClassNames<PropType>(props?: PropType) {\r\n  return getStyles({ ...props });\r\n}\r\n\r\nexport function getStackTokens(): IStackTokens {\r\n  const theme = (getTheme() as unknown) as IPubcenterTheme;\r\n  const spacing = theme.spacing;\r\n\r\n  return { childrenGap: spacing.size12 };\r\n}\r\n","import React from 'react';\r\nimport { InjectedIntlProps } from 'react-intl';\r\nimport { useI18n } from '../../../../../i18n/useI18n';\r\nimport { getAppStore } from '../../../../@data';\r\nimport { injectIntlAndObserver } from '../../../../utils';\r\nimport { getStore } from '../../../ad-management/Account/Settings/@data/store/store';\r\nimport { TythonColumnsEnum } from '../../@data/store/schema/ColumnsEnum';\r\nimport { getReportColumnMetadataDisplayName } from '../../utils/intlHelper';\r\nimport { formatMetric } from '../../utils/metricsFormatter';\r\nimport { IReportsMetadata, ReportDataSource, TythonReportingDataRow } from '../@data/store/schema';\r\nimport { getReportPageStore } from '../@data/store/store';\r\nimport { MetricCard } from './MetricCard/MetricCard';\r\nimport { ITopMetricsStyleProps, getClassNames } from './MetricsSummaryCards.styles';\r\n\r\nexport interface ITopMetricsProps extends InjectedIntlProps {\r\n  reportMetadata?: IReportsMetadata;\r\n  summaryData?: TythonReportingDataRow[];\r\n}\r\n\r\nexport const MetricsSummaryCards = injectIntlAndObserver(({ reportMetadata, summaryData, intl: { formatMessage } }: ITopMetricsProps) => {\r\n  const { reportType } = getReportPageStore();\r\n  const { metricsWrapper, smallCards, cardsColumn } = getClassNames<ITopMetricsStyleProps>({\r\n    evenCards: reportType === ReportDataSource.TythonV2,\r\n  });\r\n  const { publisher, userContext } = getAppStore();\r\n  const { systemPreferences } = getStore().active;\r\n  const { locale } = useI18n({ systemPreferences, publisher, userContext });\r\n\r\n  const summary = (summaryData && summaryData[0] ? summaryData[0] : { DateTime: '' }) as TythonReportingDataRow;\r\n  const isSummaryDataLaded = !!summaryData;\r\n\r\n  return (\r\n    <div className={metricsWrapper}>\r\n      {reportType === ReportDataSource.MSXTython && (\r\n        <div>\r\n          <MetricCard\r\n            isDataLoaded={isSummaryDataLaded && !!reportMetadata}\r\n            title={(!!reportMetadata && getReportColumnMetadataDisplayName(TythonColumnsEnum.Revenue, formatMessage)) || ''}\r\n            dataValue={`${formatMetric(TythonColumnsEnum.Revenue, summary.Revenue, locale)}`}\r\n          />\r\n        </div>\r\n      )}\r\n      <div className={smallCards}>\r\n        {reportType === ReportDataSource.TythonV2 && (\r\n          <div className={cardsColumn}>\r\n            <div>\r\n              <MetricCard\r\n                isDataLoaded={isSummaryDataLaded && !!reportMetadata}\r\n                title={(!!reportMetadata && getReportColumnMetadataDisplayName(TythonColumnsEnum.Revenue, formatMessage)) || ''}\r\n                dataValue={`${formatMetric(TythonColumnsEnum.Revenue, summary.Revenue, locale)}`}\r\n              />\r\n            </div>\r\n            <div>\r\n              <MetricCard\r\n                isDataLoaded={isSummaryDataLaded && !!reportMetadata}\r\n                title={(!!reportMetadata && getReportColumnMetadataDisplayName(TythonColumnsEnum.FillRate, formatMessage)) || ''}\r\n                dataValue={`${formatMetric(TythonColumnsEnum.FillRate, summary.FillRate, locale)}`}\r\n              />\r\n            </div>\r\n          </div>\r\n        )}\r\n        <div className={cardsColumn}>\r\n          <div>\r\n            <MetricCard\r\n              isDataLoaded={isSummaryDataLaded && !!reportMetadata}\r\n              title={(!!reportMetadata && getReportColumnMetadataDisplayName(TythonColumnsEnum.ImpressionsServed, formatMessage)) || ''}\r\n              dataValue={`${formatMetric(TythonColumnsEnum.ImpressionsServed, summary.ImpressionsServed, locale)}`}\r\n            />\r\n          </div>\r\n          <div>\r\n            <MetricCard\r\n              isDataLoaded={isSummaryDataLaded && !!reportMetadata}\r\n              title={(!!reportMetadata && getReportColumnMetadataDisplayName(TythonColumnsEnum.Viewability, formatMessage)) || ''}\r\n              dataValue={`${formatMetric(TythonColumnsEnum.Viewability, summary.Viewability, locale)}`}\r\n            />\r\n          </div>\r\n        </div>\r\n        <div className={cardsColumn}>\r\n          <div>\r\n            <MetricCard\r\n              isDataLoaded={isSummaryDataLaded && !!reportMetadata}\r\n              title={(!!reportMetadata && getReportColumnMetadataDisplayName(TythonColumnsEnum.ImpressionsViewed, formatMessage)) || ''}\r\n              dataValue={`${formatMetric(TythonColumnsEnum.ImpressionsViewed, summary.ImpressionsViewed, locale)}`}\r\n            />\r\n          </div>\r\n          <div>\r\n            <MetricCard\r\n              isDataLoaded={isSummaryDataLaded && !!reportMetadata}\r\n              title={(!!reportMetadata && getReportColumnMetadataDisplayName(TythonColumnsEnum.CTR, formatMessage)) || ''}\r\n              dataValue={`${formatMetric(TythonColumnsEnum.CTR, summary.CTR, locale)}`}\r\n            />\r\n          </div>\r\n        </div>\r\n        <div className={cardsColumn}>\r\n          <div>\r\n            <MetricCard\r\n              isDataLoaded={isSummaryDataLaded && !!reportMetadata}\r\n              title={(!!reportMetadata && getReportColumnMetadataDisplayName(TythonColumnsEnum.eCPM, formatMessage)) || ''}\r\n              dataValue={`${formatMetric(TythonColumnsEnum.eCPM, summary.eCPM, locale)}`}\r\n            />\r\n          </div>\r\n          <div>\r\n            <MetricCard\r\n              isDataLoaded={isSummaryDataLaded && !!reportMetadata}\r\n              title={(!!reportMetadata && getReportColumnMetadataDisplayName(TythonColumnsEnum.Clicks, formatMessage)) || ''}\r\n              dataValue={`${formatMetric(TythonColumnsEnum.Clicks, summary.Clicks, locale)}`}\r\n            />\r\n          </div>\r\n        </div>\r\n      </div>\r\n    </div>\r\n  );\r\n});\r\n","import { getTheme, IStackTokens, mergeStyleSets } from '@fluentui/react';\r\nimport { BreakPoints, IPubcenterTheme } from '../../../../theme';\r\nconst { ResponsiveMedium, ResponsiveSmall } = BreakPoints;\r\ninterface ITythonReportCardsStyleProps {\r\n  theme: IPubcenterTheme;\r\n}\r\ntype StyleProperties = 'reportCard';\r\n\r\ntype TythonReportCardsStyles = Record<StyleProperties, string>;\r\n\r\nexport const getStyles = (props: ITythonReportCardsStyleProps): TythonReportCardsStyles => {\r\n  return mergeStyleSets({\r\n    reportCard: {\r\n      display: 'grid',\r\n      gridTemplateColumns: '49.5% 49.5%',\r\n      columnGap: '1%',\r\n      rowGap: '2%',\r\n      [ResponsiveMedium]: {\r\n        gridTemplateColumns: '100%',\r\n        columnGap: '0',\r\n      },\r\n      [ResponsiveSmall]: {\r\n        gridTemplateColumns: '100%',\r\n        columnGap: '0',\r\n      },\r\n    },\r\n  });\r\n};\r\nexport function getClassNames<PropType>(props?: PropType) {\r\n  return getStyles({ theme: (getTheme() as unknown) as IPubcenterTheme, ...props });\r\n}\r\nexport function getStackTokens(): IStackTokens {\r\n  const theme = (getTheme() as unknown) as IPubcenterTheme;\r\n  const spacing = theme.spacing;\r\n\r\n  return { childrenGap: spacing.size12 };\r\n}\r\n","import { Stack } from '@fluentui/react';\r\nimport React, { useRef } from 'react';\r\nimport { IRouterWithIntl, injectIntlAndObserver } from '../../../utils';\r\nimport { ICustomCalenderDateRange } from '../components/CustomCalender/CustomCalender.types';\r\nimport {\r\n  ADUNIT_ALLOWED_CHARTS,\r\n  COUNTRY_ALLOWED_CHARTS,\r\n  MEDIATION_ALLOWED_CHARTS,\r\n  PERFORMANCE_ALLOWED_CHARTS,\r\n  SITE_ALLOWED_CHARTS,\r\n} from '../constants/allowedChartsType';\r\nimport { useMediationAvailable } from '../hooks/useMediationAvailable';\r\nimport { useMediationReportMetadata, useReportMetadata, useReportQuery } from '../hooks/useReportQuery';\r\nimport { AdUnitsReportCard } from './AdUnitsReportCard/AdUnitsReportCard';\r\nimport { CountryReportCard } from './CountryReportCard/CountryReportCard';\r\nimport { MediationReportCard } from './MediationReportCard/MediationReportCard';\r\nimport { MetricsSummaryCards } from './MetricsSummaryCards/MetricsSummaryCards';\r\nimport { PerformanceReportCard } from './PerformanceReportCard/PerformanceReportCard';\r\nimport { constructRequestBody } from './ReportCard/ReportCard.helpers';\r\nimport { ChartGrain, ReportCardType } from './ReportCard/ReportCard.types';\r\nimport { SitesReportCard } from './SitesReportCard/SitesReportCard';\r\nimport { getClassNames, getStackTokens } from './TythonReportCards.styles';\r\nexport interface IDashboardCardsProps extends IRouterWithIntl {\r\n  dateRange: ICustomCalenderDateRange;\r\n}\r\n\r\nexport const TythonReportCards = injectIntlAndObserver((props: IDashboardCardsProps) => {\r\n  const { dateRange } = props;\r\n  const classNames = getClassNames(props);\r\n  const { isMediationAvailable } = useMediationAvailable();\r\n  const { data: reportMetadata } = useReportMetadata();\r\n  const { data: mediationReportMetadata } = useMediationReportMetadata(!!isMediationAvailable);\r\n  const adunitReportCardRef = useRef<HTMLDivElement>(null);\r\n  const sitesReportCardRef = useRef<HTMLDivElement>(null);\r\n  const performanceReportCardRef = useRef<HTMLDivElement>(null);\r\n  const mediationReportCardRef = useRef<HTMLDivElement>(null);\r\n  const countryReportCardRef = useRef<HTMLDivElement>(null);\r\n\r\n  const { data: summaryData } = useReportQuery(\r\n    constructRequestBody(ReportCardType.SUMMARY, dateRange, ChartGrain.NONE, [], [], reportMetadata?.metrics || []),\r\n    false,\r\n    !!reportMetadata\r\n  );\r\n\r\n  return (\r\n    <>\r\n      <Stack tokens={getStackTokens()}>\r\n        <MetricsSummaryCards summaryData={summaryData} reportMetadata={reportMetadata} />\r\n        <Stack>\r\n          <Stack.Item grow basis={'100%'}>\r\n            <PerformanceReportCard\r\n              dateRange={dateRange}\r\n              summaryData={summaryData}\r\n              allowedChartTypes={PERFORMANCE_ALLOWED_CHARTS}\r\n              showDetailsReportLink={true}\r\n              isDetailedView={false}\r\n              filters={[]}\r\n              history={props.history}\r\n              location={props.location}\r\n              match={props.match}\r\n              reportCardRef={performanceReportCardRef}\r\n              reportMetadata={reportMetadata}\r\n            />\r\n          </Stack.Item>\r\n        </Stack>\r\n        <Stack tokens={getStackTokens()}>\r\n          <div className={classNames.reportCard}>\r\n            <div>\r\n              <AdUnitsReportCard\r\n                dateRange={dateRange}\r\n                allowedChartTypes={ADUNIT_ALLOWED_CHARTS}\r\n                showDetailsReportLink={true}\r\n                isDetailedView={false}\r\n                filters={[]}\r\n                history={props.history}\r\n                location={props.location}\r\n                match={props.match}\r\n                reportCardRef={adunitReportCardRef}\r\n                reportMetadata={reportMetadata}\r\n              />\r\n            </div>\r\n            <div>\r\n              <SitesReportCard\r\n                dateRange={dateRange}\r\n                allowedChartTypes={SITE_ALLOWED_CHARTS}\r\n                showDetailsReportLink={true}\r\n                isDetailedView={false}\r\n                filters={[]}\r\n                history={props.history}\r\n                location={props.location}\r\n                match={props.match}\r\n                reportCardRef={sitesReportCardRef}\r\n                reportMetadata={reportMetadata}\r\n              />\r\n            </div>\r\n            <div>\r\n              <CountryReportCard\r\n                dateRange={dateRange}\r\n                allowedChartTypes={COUNTRY_ALLOWED_CHARTS}\r\n                showDetailsReportLink={true}\r\n                isDetailedView={false}\r\n                filters={[]}\r\n                history={props.history}\r\n                location={props.location}\r\n                match={props.match}\r\n                reportCardRef={countryReportCardRef}\r\n                reportMetadata={reportMetadata}\r\n              />\r\n            </div>\r\n            {isMediationAvailable && (\r\n              <div>\r\n                <MediationReportCard\r\n                  dateRange={dateRange}\r\n                  allowedChartTypes={MEDIATION_ALLOWED_CHARTS}\r\n                  showDetailsReportLink={true}\r\n                  isDetailedView={false}\r\n                  filters={[]}\r\n                  history={props.history}\r\n                  location={props.location}\r\n                  match={props.match}\r\n                  reportCardRef={mediationReportCardRef}\r\n                  reportMetadata={mediationReportMetadata}\r\n                />\r\n              </div>\r\n            )}\r\n          </div>\r\n        </Stack>\r\n      </Stack>\r\n    </>\r\n  );\r\n});\r\n","import { IPubcenterPalette, IPubcenterSpacing } from '../../../theme';\r\nimport { IReportPageStyleProps, IReportPageStyles } from './ReportPage.types';\r\n\r\nexport const getStyles = (props: IReportPageStyleProps): IReportPageStyles => {\r\n  const { theme } = props;\r\n  const spacing = theme.spacing as IPubcenterSpacing;\r\n  const pallete = theme.palette as IPubcenterPalette;\r\n\r\n  return {\r\n    root: {\r\n      display: 'flex',\r\n      flexDirection: 'column',\r\n      height: 'inherit',\r\n      flex: 1,\r\n    },\r\n    description: {\r\n      color: theme.palette.neutralSecondary,\r\n      position: 'relative',\r\n      marginTop: spacing.size12,\r\n      fontSize: theme.fonts.medium.fontSize,\r\n    },\r\n    link: [\r\n      'ms-fontSize-Body14',\r\n      {\r\n        color: pallete.themePrimary,\r\n        selectors: {\r\n          ':hover': {\r\n            cursor: 'pointer',\r\n          },\r\n        },\r\n        marginTop: spacing.size12,\r\n      },\r\n    ],\r\n    linkTitle: {\r\n      marginLeft: '6px',\r\n      position: 'relative',\r\n      textAlign: 'center',\r\n    },\r\n    subComponentStyles: {\r\n      formTitle: {\r\n        root: {\r\n          marginBottom: spacing.size24,\r\n        },\r\n      },\r\n    },\r\n  };\r\n};\r\n","import { classNamesFunction, getTheme, Icon, Stack } from '@fluentui/react';\r\nimport * as React from 'react';\r\nimport { useEffect } from 'react';\r\nimport { getAppStore, LayoutMode, onLayoutChanged } from '../../@data';\r\nimport { isTythonSelfServeUser } from '../../@data/utils/checkUserType';\r\nimport { FormTitle } from '../../components/Form';\r\nimport { REPORTING_DATE_RANGE_PICKER } from '../../constants/DataTestIdConstants';\r\nimport { EmptyLayout } from '../../layout/EmptyLayout/EmptyLayout';\r\nimport { injectIntlWithObserver } from '../../utils';\r\nimport { isButtonPressKey } from '../../utils/AccessibilityUtils';\r\nimport { onCurrentRouteChanged as routeChanged } from '../ad-management/@data/actions';\r\nimport '../ad-management/@data/orchestrators';\r\nimport { onCurrentRouteChanged, onReportLinkClicked, onSetPublisherReporting } from './@data/actions';\r\nimport './@data/mutators';\r\nimport './@data/orchestrators';\r\nimport { ReportsQueryStoreKeys } from './@data/store/schema/ReportsQueryStoreKeys';\r\nimport { getPageStore, RouteName } from './@data/store/store';\r\nimport { setDataInURL } from './@data/store/UrlQueryStore';\r\nimport { CustomCalender } from './components/CustomCalender/CustomCalender';\r\nimport { ICustomCalenderDateRange, RangeType } from './components/CustomCalender/CustomCalender.types';\r\nimport { TythonReportCards } from './DashboardCards/TythonReportCards';\r\nimport messages from './Report.messages';\r\nimport { getStyles } from './ReportPage.styles';\r\nimport { IReportPageProps, IReportPageStyleProps, IReportPageStyles } from './ReportPage.types';\r\nimport { getInitialDateRange } from './utils/getInitialDateRange';\r\nconst getClassNames = classNamesFunction<IReportPageStyleProps, IReportPageStyles>();\r\n\r\nexport const ReportPage = injectIntlWithObserver<IReportPageProps>((props: IReportPageProps) => {\r\n  const params = props.match.params;\r\n\r\n  const publisherId = params.publisherId;\r\n  const { publisher } = getAppStore();\r\n  const { isReportEnabled } = getPageStore();\r\n\r\n  useEffect(() => {\r\n    onCurrentRouteChanged(RouteName.dashboard, props.intl.formatMessage);\r\n    onLayoutChanged(LayoutMode.Default);\r\n\r\n    if (isTythonSelfServeUser()) {\r\n      // Since ReportPage is rendered inside ad-management for Tython users, updating current route\r\n      routeChanged(RouteName.dashboard, props.intl.formatMessage);\r\n    }\r\n    if (isReportEnabled === undefined) {\r\n      if (publisherId && publisher) {\r\n        onSetPublisherReporting(publisher);\r\n      }\r\n    }\r\n    // eslint-disable-next-line react-hooks/exhaustive-deps\r\n  }, [publisherId, publisher, isReportEnabled]);\r\n  const {\r\n    dateRange: { initialStartDate, initialEndDate },\r\n    initialDateRangeType,\r\n  } = getInitialDateRange();\r\n\r\n  const [dateRange, setDateRange] = React.useState<ICustomCalenderDateRange>({\r\n    startDate: initialStartDate,\r\n    endDate: initialEndDate,\r\n  });\r\n  const classNames = getClassNames(getStyles, { theme: getTheme() });\r\n  const { formatMessage } = props.intl;\r\n\r\n  const onSelectedDatesChanged = (selectedDateRange: ICustomCalenderDateRange, rangeType: RangeType) => {\r\n    setDataInURL(ReportsQueryStoreKeys.DATE_RANGE, selectedDateRange);\r\n    setDataInURL(ReportsQueryStoreKeys.DATE_RANGE_TYPE, rangeType);\r\n    setDateRange({ ...selectedDateRange });\r\n  };\r\n\r\n  return (\r\n    <EmptyLayout>\r\n      <div className={classNames.root}>\r\n        <Stack styles={classNames.subComponentStyles.formTitle} horizontal horizontalAlign=\"space-between\">\r\n          <FormTitle title={formatMessage(messages.reportTitle)} noHelpPopup={true} intl={props.intl} />\r\n          {isTythonSelfServeUser() && (\r\n            <div>\r\n              <CustomCalender\r\n                dataTestId={REPORTING_DATE_RANGE_PICKER}\r\n                onSelectedDatesChanged={onSelectedDatesChanged}\r\n                initialRangeType={initialDateRangeType}\r\n                initialDateRange={{ startDate: initialStartDate, endDate: initialEndDate }}\r\n              />\r\n            </div>\r\n          )}\r\n        </Stack>\r\n        {isTythonSelfServeUser() ? (\r\n          <TythonReportCards dateRange={dateRange} history={props.history} location={props.location} match={props.match} />\r\n        ) : (\r\n          <div>\r\n            <div id=\"reportDescription\" className={classNames.description}>\r\n              {publisher\r\n                ? isReportEnabled\r\n                  ? _getHighlightedText(formatMessage(messages.reportDescriptionForPublisherSelected), formatMessage(messages.reportLink))\r\n                  : formatMessage(messages.reportDescriptionForReportsNotApplicable)\r\n                : formatMessage(messages.reportDescriptionForPublisherNotSelected)}\r\n            </div>\r\n            {publisher && isReportEnabled && (\r\n              <div\r\n                className={classNames.link}\r\n                role=\"button\"\r\n                tabIndex={0}\r\n                onClick={() => onReportLinkClicked()}\r\n                onKeyDown={(ev) => isButtonPressKey(ev.key) && onReportLinkClicked()}\r\n                aria-describedby=\"reportDescription\"\r\n              >\r\n                <Icon iconName={'OpenInNewWindow'} />\r\n                <span className={classNames.linkTitle}>{formatMessage(messages.reportLink)}</span>\r\n              </div>\r\n            )}\r\n          </div>\r\n        )}\r\n      </div>\r\n    </EmptyLayout>\r\n  );\r\n});\r\nfunction _getHighlightedText(text: string, highlight: string): JSX.Element {\r\n  const parts = text.split(new RegExp(`(${highlight})`, 'gi'));\r\n  return (\r\n    <span>\r\n      {' '}\r\n      {parts.map((part, i) => (\r\n        <span key={i} style={part.toLowerCase() === highlight.toLowerCase() ? { fontWeight: 'bold' } : {}}>\r\n          {part}\r\n        </span>\r\n      ))}{' '}\r\n    </span>\r\n  );\r\n}\r\n","import * as React from 'react';\r\nimport { useEffect } from 'react';\r\nimport { InjectedIntlProps } from 'react-intl';\r\nimport { Route, RouteComponentProps, Switch } from 'react-router-dom';\r\nimport { isTythonSelfServeUser } from '../../@data';\r\nimport { injectIntlWithObserver } from '../../utils';\r\nimport { onInitializeGoogleAccount } from '../ad-management/Account/Settings/components/GoogleConnector/@data/actions';\r\nimport { fetchAdUnitsDataAction } from '../ad-management/Adunit/@data/actions';\r\nimport { onCurrentRouteChanged } from './@data/actions';\r\nimport './@data/mutators';\r\nimport './@data/orchestrators';\r\nimport { RouteName } from './@data/store/store';\r\nimport { fetchMediationReportsMetadata } from './DashboardCards/@data/actions';\r\nimport { ReportDetailsPage } from './DashboardCards/ReportDetailsPage/ReportDetailsPage';\r\n\r\nimport { ReportPage } from './ReportPage';\r\nimport { useMediationAvailable } from './hooks/useMediationAvailable';\r\n\r\nexport const BaseReportPage = injectIntlWithObserver((props: RouteComponentProps & InjectedIntlProps) => {\r\n  const { isMediationAvailable } = useMediationAvailable();\r\n  useEffect(() => {\r\n    onCurrentRouteChanged(RouteName.dashboard, props.intl.formatMessage);\r\n    if (isTythonSelfServeUser()) {\r\n      onInitializeGoogleAccount(false);\r\n    }\r\n    // eslint-disable-next-line react-hooks/exhaustive-deps\r\n  }, []);\r\n  useEffect(() => {\r\n    if (isTythonSelfServeUser() && isMediationAvailable) {\r\n      fetchMediationReportsMetadata();\r\n      fetchAdUnitsDataAction();\r\n    }\r\n  }, [isMediationAvailable]);\r\n  return (\r\n    <>\r\n      <Switch>\r\n        <Route exact path={`${props.match.url}`} component={ReportPage} />\r\n        <Route exact path={`${props.match.url}/:type/${RouteName.reportDetails}`} component={ReportDetailsPage} />\r\n      </Switch>\r\n    </>\r\n  );\r\n});\r\n","import { defineMessages } from 'react-intl';\r\n\r\nexport default defineMessages({\r\n  title: {\r\n    id: 'app.pages.errorPages.suspendedUser.title',\r\n    defaultMessage: 'Your profile has been rejected',\r\n  },\r\n  description: {\r\n    id: 'app.pages.errorPages.suspendedUser.description',\r\n    defaultMessage: \"We have rejected your profile because it doesn't comply with our \",\r\n  },\r\n  termAndConditions: {\r\n    id: 'app.pages.errorPages.suspendedUser.termAndConditions',\r\n    defaultMessage: 'Terms and Conditions.',\r\n  },\r\n});\r\n","import { FontWeights, getTheme, mergeStyleSets } from '@fluentui/react';\r\nimport { BreakPoints, IPubCenterFonts, IPubcenterSpacing } from '../../../../theme';\r\nimport { ICommonStyleProps } from '../../../types';\r\n\r\ntype StyleProperties = 'page' | 'container' | 'titleStyle' | 'descriptionStyle';\r\ntype SetupCardStyles = Record<StyleProperties, string>;\r\n\r\nexport const getStyles = (props: ICommonStyleProps): SetupCardStyles => {\r\n  const { theme } = props;\r\n  const fonts = theme.fonts as IPubCenterFonts;\r\n  const spacing = theme.spacing as IPubcenterSpacing;\r\n  const { ResponsiveSmall } = BreakPoints;\r\n\r\n  return mergeStyleSets({\r\n    page: {\r\n      height: '100%',\r\n      zIndex: 999999,\r\n    },\r\n    container: {\r\n      display: 'flex',\r\n      justifyContent: 'center',\r\n      alignItems: 'center',\r\n      gap: spacing.size24,\r\n      marginTop: '5%',\r\n      padding: `0 ${spacing.size32}`,\r\n      [ResponsiveSmall]: {\r\n        flexDirection: 'column',\r\n      },\r\n    },\r\n    titleStyle: {\r\n      fontSize: fonts.size24.fontSize,\r\n      fontWeight: FontWeights.bold,\r\n    },\r\n    descriptionStyle: {\r\n      fontSize: fonts.size16.fontSize,\r\n    },\r\n  });\r\n};\r\n\r\nexport function getClassNames<PropType>(props?: PropType) {\r\n  return getStyles({ theme: getTheme(), ...props });\r\n}\r\n","import { DefaultButton, Image, Link } from '@fluentui/react';\r\nimport React from 'react';\r\nimport { InjectedIntlProps } from 'react-intl';\r\nimport { isTythonSelfServeUser } from '../../../@data';\r\nimport AppMessages from '../../../App.messages';\r\nimport { SupportPageRoute } from '../../../Routes';\r\nimport { SUPPORT_EMAIL, TNC_HREF_PATH } from '../../../constants/AppConstants';\r\nimport { injectIntlAndObserver } from '../../../utils';\r\nimport messages from './SuspendedUser.messages';\r\nimport { getClassNames } from './SuspendedUser.styles';\r\nimport suspendedUser from './resources/UserSuspended.svg';\r\n\r\nconst SuspendedUserOverlay = injectIntlAndObserver<InjectedIntlProps>(({ intl: { formatMessage } }) => {\r\n  const { page, container, titleStyle, descriptionStyle } = getClassNames();\r\n\r\n  return (\r\n    <div className={page}>\r\n      <div className={container}>\r\n        <Image src={suspendedUser} imageFit={1} shouldFadeIn />\r\n        <div>\r\n          <span className={titleStyle}>{formatMessage(messages.title)}</span>\r\n          <p className={descriptionStyle}>\r\n            {formatMessage(messages.description)}\r\n            <Link target=\"_blank\" href={TNC_HREF_PATH}>\r\n              {formatMessage(messages.termAndConditions)}\r\n            </Link>\r\n          </p>\r\n          <DefaultButton\r\n            href={isTythonSelfServeUser() ? `${SupportPageRoute}` : `mailto:${SUPPORT_EMAIL}`}\r\n            target=\"_blank\"\r\n            rel=\"noopener noreferrer\"\r\n            text={formatMessage(AppMessages.contactSupport)}\r\n          />\r\n        </div>\r\n      </div>\r\n    </div>\r\n  );\r\n});\r\n\r\nexport default SuspendedUserOverlay;\r\n","import React, { useEffect } from 'react';\r\nimport { InjectedIntlProps } from 'react-intl';\r\nimport { RouteComponentProps } from 'react-router-dom';\r\nimport { EntityType, LayoutMode, getAppStore, onHelpInfoCalloutOpened, onHelpInfoChanged, onLayoutChanged } from '../../../../@data';\r\nimport { FormTitle } from '../../../../components/Form';\r\nimport ProfilePanelMessages from '../../../../layout/PageLayout/header-panels/ProfilePanel/ProfilePanel.messages';\r\nimport { injectRouterAndIntlWithObserver } from '../../../../utils';\r\nimport { RouteName } from '../../@data';\r\nimport { onCurrentRouteChanged } from '../../@data/actions';\r\nimport { onFetchUserPreferences } from './@data/actions/onSettingsPageChanged';\r\nimport { setEntityType } from './@data/mutatorActions/settingsPageChanged';\r\nimport messages from './SettingsPage.messages';\r\nimport { getClassNames } from './SettingsPage.styles';\r\nimport { NotificationConfiguration } from './components/NotificationConfiguration';\r\n\r\nexport interface ISettingsPageProps extends RouteComponentProps<{ publisherId: string }>, InjectedIntlProps {}\r\n\r\nexport const UserSettingsPage = injectRouterAndIntlWithObserver(function UserSettingsPageComponent({\r\n  intl,\r\n}: ISettingsPageProps): JSX.Element {\r\n  const { pageTitleStyle, root } = getClassNames();\r\n  const { formatMessage } = intl;\r\n  const { helpInfo, locale } = getAppStore();\r\n\r\n  // const hasUserDeleteAccess = hasDeleteAccess(accessPermissions ? accessPermissions.userDelete : completeAccess);\r\n\r\n  useEffect(() => {\r\n    onCurrentRouteChanged(RouteName.userSettings, intl.formatMessage, ProfilePanelMessages.userSettings);\r\n    onLayoutChanged(LayoutMode.Default);\r\n    setEntityType(EntityType.User);\r\n    onFetchUserPreferences(locale);\r\n    // eslint-disable-next-line react-hooks/exhaustive-deps\r\n  }, []);\r\n\r\n  return (\r\n    <div className={root}>\r\n      <FormTitle\r\n        intl={intl}\r\n        title={formatMessage(messages.userSettings)}\r\n        styles={{ root: pageTitleStyle }}\r\n        id=\"pop_PCv4_Profilesettings\"\r\n        calloutContent={helpInfo}\r\n        iconButtonOnClick={() => onHelpInfoCalloutOpened('pop_PCv4_Profilesettings', locale)}\r\n        calloutOnDismiss={() => onHelpInfoChanged()}\r\n      />\r\n      <NotificationConfiguration />\r\n      {/* {hasUserDeleteAccess && <UserDeletion />} */}\r\n    </div>\r\n  );\r\n});\r\n","import { nullRender } from '@fluentui/react';\r\nimport { observer } from 'mobx-react';\r\nimport * as React from 'react';\r\nimport {\r\n  Account,\r\n  getAppStore,\r\n  onAccountChanged,\r\n  onDefaultPublisherSet,\r\n  onPublisherAccountChanged,\r\n  onPublisherChanged,\r\n  Publisher,\r\n} from '../../@data';\r\nimport '../../@data/orchestrators';\r\nimport { isTythonSelfServeUser } from '../../@data/utils/checkUserType';\r\nimport { DEFAULT_PUBLISHER_CACHE_KEY } from '../../constants/AppConstants';\r\nimport { PublisherAccountPicker } from '../../layout/PublisherAccountPicker/PublisherAccountPicker';\r\nimport { defaultRoute, getAdManagementStore, RouteName } from './@data';\r\nimport { IAdManagementHeaderProps } from './AdManagement.types';\r\n\r\nexport const AdManagementHeader = observer(\r\n  class AdManagementHeaderComponent extends React.Component<IAdManagementHeaderProps> {\r\n    public componentDidMount() {\r\n      if (!getAppStore().defaultPublisher && localStorage.getItem(DEFAULT_PUBLISHER_CACHE_KEY)) {\r\n        onDefaultPublisherSet(Number(localStorage.getItem(DEFAULT_PUBLISHER_CACHE_KEY)));\r\n      }\r\n      const defaultPublisherId = getAppStore().defaultPublisher;\r\n      const publisherId = [3000, 3001, 3002, 3003, 3004, 0].includes(defaultPublisherId === undefined ? 0 : defaultPublisherId)\r\n        ? (this.props.match.params.publisherId as string)\r\n        : String(defaultPublisherId);\r\n      const accountId = this.props.match.params.accountId as string;\r\n\r\n      onPublisherAccountChanged(publisherId, accountId, this.props.history);\r\n    }\r\n\r\n    public render(): JSX.Element | null {\r\n      const appStore = getAppStore();\r\n      const { accessiblePublishers, defaultPublisher } = appStore;\r\n      const { doNotRenderDefaultPage } = getAdManagementStore();\r\n\r\n      /** We don't want to render Publisher account picker for tython flows.\r\n       * Rendering AdmanagementHeader on the page helps to set the publisher/account context properly,\r\n       * so that entity grids can be loaded and all actions are allowed based on user permissions.\r\n       * Currently Tython flows and all the create/edit forms depend on the respective header components to set required context.\r\n       * Ideally we should not depend on the side-effect of the component, so we can consider separating out the logic\r\n       * in the componentDidMount and render AdManagementHeader whenever PublisherAccountPicker is required.\r\n       *\r\n       * If publisher id in appStore is not equal to defaultPublisher, it might lead to user unauthorized error\r\n       */\r\n      const publisherId = defaultPublisher && [3000, 3001, 3002, 3003, 3004, 0].includes(defaultPublisher) ? undefined : defaultPublisher;\r\n      if (doNotRenderDefaultPage || (publisherId && appStore.publisher?.id !== publisherId) || isTythonSelfServeUser()) {\r\n        return nullRender();\r\n      }\r\n\r\n      return (\r\n        <PublisherAccountPicker\r\n          {...this.props}\r\n          onChange={this._onPublisherAccountChanged}\r\n          publisher={appStore.publisher}\r\n          account={appStore.account}\r\n          isAccountHidden={this.props.isAccountHidden}\r\n          isPublisherSelectionDisabled={accessiblePublishers && accessiblePublishers.length === 1}\r\n        />\r\n      );\r\n    }\r\n\r\n    private _onPublisherAccountChanged = (publisher?: Publisher, account?: Account) => {\r\n      const store = getAdManagementStore();\r\n      const currentRoute = RouteName[store.currentRoute || defaultRoute];\r\n\r\n      if (publisher && account) {\r\n        if (\r\n          currentRoute === RouteName[RouteName.property] ||\r\n          currentRoute === RouteName[RouteName.adquality] ||\r\n          currentRoute === RouteName[RouteName.auditHistory] ||\r\n          (currentRoute === RouteName[RouteName.adunit] && account.id === 0)\r\n        ) {\r\n          this.props.history.push(`/ad-management/${publisher.id}/${currentRoute}`);\r\n        } else {\r\n          this.props.history.push(`/ad-management/${publisher.id}-${account.id}/${currentRoute}`);\r\n        }\r\n      } else if (publisher) {\r\n        this.props.history.push(`/ad-management/${publisher.id}/${currentRoute}`);\r\n      } else {\r\n        this.props.history.push(`/ad-management/${currentRoute}`);\r\n      }\r\n\r\n      onPublisherChanged(publisher);\r\n      onAccountChanged(account);\r\n    };\r\n  }\r\n);\r\n","import { action } from 'satcheljs';\r\nimport { IFilterDetails } from '../../../../../components/GridFilter/GridFilter.types';\r\nimport { DownloadOption } from '../../../../../layout/GridPageV2';\r\n\r\nexport const onAuditHistoryPageInitialized = action('onAuditHistoryPageInitialized');\r\n\r\nexport const updateFiltersAndFetchLogs = action('updateFiltersAndFetchLogs', (filterConditions: IFilterDetails[]) => ({\r\n  filterConditions,\r\n}));\r\n\r\nexport const handleDownloadButtonClicked = action('handleDownloadButtonClicked', (downloadType: DownloadOption, formatMessage, locale) => ({\r\n  downloadType,\r\n  formatMessage,\r\n  locale,\r\n}));\r\n","import { createStore } from 'satcheljs';\r\nimport { IAuditHistoryState } from './AuditHistoryState';\r\n\r\nexport const getAuditHistoryStore = createStore<IAuditHistoryState>('AuditHistoryState', {\r\n  startDate: new Date(Date.now() - 7 * 24 * 60 * 60 * 1000),\r\n  endDate: new Date(),\r\n  filters: [],\r\n  entityTypes: [],\r\n  auditTypes: [],\r\n  userRoles: [],\r\n  isDataLoading: false,\r\n  data: [],\r\n  isShowAllDetailsEnabled: false,\r\n});\r\n","import { mutatorAction } from 'satcheljs';\r\nimport { AuditHistoryRequestFilter, AuditLog, AuditType, UserRole } from '../../../../../@data';\r\nimport { ICustomCalenderDateRange } from '../../../../report/components/CustomCalender/CustomCalender.types';\r\nimport { getAuditHistoryStore } from '../store/store';\r\n\r\nexport const onSelectedDatesChanged = mutatorAction('onSelectedDatesChanged', (dateRange: ICustomCalenderDateRange) => {\r\n  dateRange.endDate.setDate(dateRange.endDate.getDate() + 1);\r\n\r\n  getAuditHistoryStore().startDate = dateRange.startDate;\r\n  getAuditHistoryStore().endDate = dateRange.endDate;\r\n  getAuditHistoryStore().pageNumber = 1;\r\n});\r\n\r\nexport const setShowAllDetails = mutatorAction('setShowAllDetails', (showDetails: boolean) => {\r\n  getAuditHistoryStore().isShowAllDetailsEnabled = showDetails;\r\n});\r\n\r\nexport const setAuditLogs = mutatorAction('setAuditLogs', (auditLogs: AuditLog[]) => {\r\n  getAuditHistoryStore().data = auditLogs;\r\n});\r\n\r\nexport const setTotalPages = mutatorAction('setTotalPages', (totalPages: number) => {\r\n  getAuditHistoryStore().totalPages = totalPages;\r\n});\r\n\r\nexport const setTotalRecords = mutatorAction('setTotalRecords', (totalRecords: number) => {\r\n  getAuditHistoryStore().totalRecords = totalRecords;\r\n});\r\n\r\nexport const setPageNumber = mutatorAction('setPageNumber', (pageNumber: number) => {\r\n  getAuditHistoryStore().pageNumber = pageNumber;\r\n});\r\n\r\nexport const setPageSize = mutatorAction('setPageSize', (pageSize: number) => {\r\n  getAuditHistoryStore().pageSize = pageSize;\r\n});\r\n\r\nexport const setFilters = mutatorAction('setFilters', (filters: AuditHistoryRequestFilter[]) => {\r\n  getAuditHistoryStore().filters = filters;\r\n});\r\n\r\nexport const setEntityTypes = mutatorAction('setEntityTypes', (entityTypes: string[]) => {\r\n  getAuditHistoryStore().entityTypes = entityTypes;\r\n});\r\n\r\nexport const setAuditTypes = mutatorAction('setAuditTypes', (auditTypes: AuditType[]) => {\r\n  getAuditHistoryStore().auditTypes = auditTypes;\r\n});\r\n\r\nexport const setUserRoles = mutatorAction('setUserRoles', (userRoles: UserRole[]) => {\r\n  getAuditHistoryStore().userRoles = userRoles;\r\n});\r\n\r\nexport const setIsDataLoading = mutatorAction('setIsDataLoading', (isDataLoading: boolean) => {\r\n  getAuditHistoryStore().isDataLoading = isDataLoading;\r\n});\r\n\r\nexport const resetFilters = mutatorAction('resetFilters', () => {\r\n  const store = getAuditHistoryStore();\r\n  store.filters = [];\r\n  store.entityTypes = [];\r\n  store.auditTypes = [];\r\n  store.userRoles = [];\r\n});\r\n","import { defineMessages } from 'react-intl';\r\n\r\nexport default defineMessages({\r\n  auditHistory: {\r\n    id: 'auditHistory',\r\n    defaultMessage: 'Audit history',\r\n  },\r\n  dateTime: {\r\n    id: 'auditHistory.dateTime',\r\n    defaultMessage: 'Date/Time (UTC)',\r\n  },\r\n  userEmail: {\r\n    id: 'auditHistory.userEmail',\r\n    defaultMessage: 'User email',\r\n  },\r\n  userRole: {\r\n    id: 'auditHistory.userRole',\r\n    defaultMessage: 'User role',\r\n  },\r\n  actionType: {\r\n    id: 'auditHistory.actionType',\r\n    defaultMessage: 'Action type',\r\n  },\r\n  actionOn: {\r\n    id: 'auditHistory.actionOn',\r\n    defaultMessage: 'Entity',\r\n  },\r\n  actionDetails: {\r\n    id: 'auditHistory.actionDetails',\r\n    defaultMessage: 'Action details',\r\n  },\r\n  showAll: {\r\n    id: 'auditHistory.showAll',\r\n    defaultMessage: 'Show all details',\r\n  },\r\n  hideAll: {\r\n    id: 'auditHistory.hideAll',\r\n    defaultMessage: 'Hide all details',\r\n  },\r\n  showDetails: {\r\n    id: 'auditHistory.showDetails',\r\n    defaultMessage: 'Show details',\r\n  },\r\n  hideDetails: {\r\n    id: 'auditHistory.hideDetails',\r\n    defaultMessage: 'Hide details',\r\n  },\r\n  create: {\r\n    id: 'auditHistory.create',\r\n    defaultMessage: 'Create',\r\n  },\r\n  update: {\r\n    id: 'auditHistory.update',\r\n    defaultMessage: 'Update',\r\n  },\r\n  delete: {\r\n    id: 'auditHistory.delete',\r\n    defaultMessage: 'Delete',\r\n  },\r\n  export: {\r\n    id: 'auditHistory.export',\r\n    defaultMessage: 'Export',\r\n  },\r\n  download: {\r\n    id: 'auditHistory.download',\r\n    defaultMessage: 'Download',\r\n  },\r\n  invite: {\r\n    id: 'auditHistory.invite',\r\n    defaultMessage: 'Invite',\r\n  },\r\n  inviteAccept: {\r\n    id: 'auditHistory.inviteAccept',\r\n    defaultMessage: 'Invite accept',\r\n  },\r\n  report: {\r\n    id: 'auditHistory.report',\r\n    defaultMessage: 'Report',\r\n  },\r\n  payment: {\r\n    id: 'auditHistory.payment',\r\n    defaultMessage: 'Payment',\r\n  },\r\n  adunit: {\r\n    id: 'auditHistory.adunit',\r\n    defaultMessage: 'Ad Unit',\r\n  },\r\n  user: {\r\n    id: 'auditHistory.user',\r\n    defaultMessage: 'User',\r\n  },\r\n  noAuditsFound: {\r\n    id: 'auditHistory.noAuditsFound',\r\n    defaultMessage: 'No logs found',\r\n  },\r\n  noPublisherSelected: {\r\n    id: 'auditHistory.noPublisherSelected',\r\n    defaultMessage: `A publisher isn't selected yet. To see logs, search for a publisher..`,\r\n  },\r\n  apiCallFailedNotification: {\r\n    id: 'auditHistory.apiCallFailedNotification',\r\n    defaultMessage: 'Failed to fetch audit history',\r\n  },\r\n  startingDownloadNotification: {\r\n    id: 'auditHistory.startingDownloadNotification',\r\n    defaultMessage: 'Fetching all data and starting download',\r\n  },\r\n});\r\n","import { Log } from '../../../../../../logging/src';\r\nimport {\r\n  AuditHistoryRequest,\r\n  buildRequestHeadersWithAuthToken,\r\n  getAppStore,\r\n  handleApiErrors,\r\n  showErrorToastNotification,\r\n} from '../../../../../@data';\r\nimport { uiConfig } from '../../../../../config/ui.config';\r\nimport AuditHistoryMessages from '../../AuditHistory.messages';\r\nimport { setIsDataLoading } from '../actions';\r\nimport { getAuditHistoryStore } from '../store/store';\r\n\r\nexport async function fetchAuditLogs(pageSize?: number, shouldUpdateGrid = true) {\r\n  const { publisher, userContext } = getAppStore();\r\n\r\n  if (publisher && userContext) {\r\n    const url = generateAuditHistoryUrl(publisher.id, pageSize);\r\n    const headers = await buildRequestHeadersWithAuthToken(url, userContext);\r\n\r\n    let response: Response;\r\n\r\n    const auditHistoryStore = getAuditHistoryStore();\r\n    const { startDate, endDate, filters, entityTypes, userRoles, auditTypes } = auditHistoryStore;\r\n\r\n    // rounding off to last minute to avoid int overflow\r\n    startDate.setMinutes(startDate.getHours(), startDate.getMinutes(), 0);\r\n    endDate.setUTCMinutes(endDate.getHours(), endDate.getMinutes(), 0);\r\n\r\n    const auditHistoryRequest: AuditHistoryRequest = {\r\n      startDateTime: startDate,\r\n      endDateTime: endDate,\r\n      auditTypes: auditTypes,\r\n      userRoles: userRoles,\r\n      entityTypes: entityTypes,\r\n      filters: filters,\r\n    };\r\n\r\n    try {\r\n      if (shouldUpdateGrid) {\r\n        setIsDataLoading(true);\r\n      }\r\n\r\n      response = await fetch(url, {\r\n        method: 'POST',\r\n        headers: headers,\r\n        body: JSON.stringify(auditHistoryRequest),\r\n      });\r\n\r\n      if (!response.ok) {\r\n        await handleApiErrors(response, url);\r\n      }\r\n\r\n      const responseJson = (await response.json()).data;\r\n      return responseJson;\r\n    } catch (err) {\r\n      const error = `Failed to fetch audit history ${url}. Errors: ${err}`;\r\n      Log.error(error);\r\n      showErrorToastNotification({ textMessageDescriptor: AuditHistoryMessages.apiCallFailedNotification });\r\n    } finally {\r\n      setIsDataLoading(false);\r\n    }\r\n  }\r\n}\r\n\r\nfunction generateAuditHistoryUrl(publisherId: string, inputPageSize?: number): string {\r\n  const url = uiConfig.getApiBaseAddress() + '/publishers/' + publisherId + '/changelogs/fetch';\r\n\r\n  const { pageNumber, pageSize } = getAuditHistoryStore();\r\n  const queryString = `PageSize=${inputPageSize ?? pageSize ?? 10}&PageNumber=${pageNumber ?? 1}`;\r\n\r\n  return `${url}?${queryString}`;\r\n}\r\n","import { orchestrator } from 'satcheljs';\r\nimport { setAuditLogs, setPageSize, setTotalPages, setTotalRecords } from '../actions';\r\nimport { onAuditHistoryPageInitialized } from '../actions/actions';\r\nimport { fetchAuditLogs } from '../services/fetchAuditLogs';\r\n\r\norchestrator(onAuditHistoryPageInitialized, async () => {\r\n  const responseJson = await fetchAuditLogs();\r\n\r\n  if (responseJson) {\r\n    const { changeLogs, pageSize, totalPages, totalRecords } = responseJson;\r\n\r\n    setPageSize(pageSize);\r\n    setTotalPages(totalPages);\r\n    setTotalRecords(totalRecords);\r\n    setAuditLogs(changeLogs);\r\n  } else {\r\n    // resetting data in case publisher or user context is null or API failure\r\n    setPageSize(10);\r\n    setTotalPages(0);\r\n    setTotalRecords(0);\r\n    setAuditLogs([]);\r\n  }\r\n});\r\n","import AppMessages from '../../../../App.messages';\r\nimport messages from '../AuditHistory.messages';\r\n\r\nexport function getAdUnitTypes(value?: string) {\r\n  const adUnitTypes: string[] = [];\r\n\r\n  if (value) {\r\n    if (value.includes('Display')) {\r\n      adUnitTypes.push('Display');\r\n    }\r\n    if (value.includes('Native')) {\r\n      adUnitTypes.push('Native');\r\n    }\r\n  }\r\n  return adUnitTypes.join(', ');\r\n}\r\n\r\nexport function getLifeCycleStatusIdValue(value?: string) {\r\n  if (value && value.includes('111')) {\r\n    return 'Active';\r\n  } else if (value && value.includes('112')) {\r\n    return 'Inactive';\r\n  }\r\n  return '';\r\n}\r\n\r\nexport function getAddedRemovedCount(value?: string) {\r\n  if (!value) {\r\n    return [0, 0];\r\n  }\r\n  let addCount = 0,\r\n    removeCount = 0;\r\n\r\n  let messageParts = value.split(',');\r\n  if (messageParts.length > 1) {\r\n    messageParts = messageParts[0].split(' ').concat(messageParts[1].split(' '));\r\n  } else {\r\n    messageParts = value.split(' ');\r\n  }\r\n\r\n  if (value.includes('Added')) {\r\n    addCount = Number(messageParts[1]);\r\n  }\r\n  if (value.includes('Removed') && messageParts.length === 2) {\r\n    removeCount = Number(messageParts[1]);\r\n  } else if (value.includes('Removed') && messageParts.length > 3) {\r\n    removeCount = Number(messageParts[messageParts.length - 1]);\r\n  }\r\n\r\n  return [addCount, removeCount];\r\n}\r\n\r\nexport const getEntityTypeDisplayMap = (entityType: string, formatMessage): string => {\r\n  switch (entityType.toLowerCase()) {\r\n    case 'adunit':\r\n      return formatMessage(messages.adunit);\r\n    case 'property':\r\n      return formatMessage(AppMessages.site);\r\n    case 'user':\r\n      return formatMessage(messages.user);\r\n    case 'publisher':\r\n      return formatMessage(AppMessages.publisher);\r\n    case 'payment':\r\n      return formatMessage(messages.payment);\r\n    case 'report':\r\n      return formatMessage(messages.report);\r\n    default:\r\n      return '';\r\n  }\r\n};\r\n","import { defineMessages } from 'react-intl';\r\n\r\nexport default defineMessages({\r\n  Failed: {\r\n    id: 'auditHistory.Failed',\r\n    defaultMessage: 'failed',\r\n  },\r\n  Settled: {\r\n    id: 'auditHistory.Settled',\r\n    defaultMessage: 'settled',\r\n  },\r\n  Processing: {\r\n    id: 'auditHistory.Processing',\r\n    defaultMessage: 'processing',\r\n  },\r\n  TransactionTitle: {\r\n    id: 'auditHistory.TransactionTitle',\r\n    defaultMessage: 'Transaction {status}',\r\n  },\r\n  TransactionMessage: {\r\n    id: 'auditHistory.TransactionMessage',\r\n    defaultMessage: 'Transaction of {n} USD {status}',\r\n  },\r\n  AdBlockCategories: {\r\n    id: 'auditHistory.AdBlockCategories',\r\n    defaultMessage: 'ad category block',\r\n  },\r\n  AdBlockCategoriesPlural: {\r\n    id: 'auditHistory.AdBlockCategories',\r\n    defaultMessage: 'ad category blocks',\r\n  },\r\n  UniversalAdBlockCategories: {\r\n    id: 'auditHistory.UniversalAdBlockCategories',\r\n    defaultMessage: 'universal category block',\r\n  },\r\n  UniversalAdBlockCategoriesPlural: {\r\n    id: 'auditHistory.UniversalAdBlockCategories',\r\n    defaultMessage: 'universal category blocks',\r\n  },\r\n  UniversalAdBlockStatus: {\r\n    id: 'auditHistory.UniversalAdBlockStatus',\r\n    defaultMessage: 'Universal ad block status',\r\n  },\r\n  PaymentAccountStatus: {\r\n    id: 'auditHistory.PaymentAccountStatus',\r\n    defaultMessage: 'Payment account status',\r\n  },\r\n  AdblocksUpdated: {\r\n    id: 'auditHistory.AdblocksUpdated',\r\n    defaultMessage: 'Ad blocks updated',\r\n  },\r\n  AdBlockStatusEnabled: {\r\n    id: 'auditHistory.AdBlockStatusEnabled',\r\n    defaultMessage: 'Ad block status enabled',\r\n  },\r\n  AdBlockStatusDisabled: {\r\n    id: 'auditHistory.AdBlockStatusDisabled',\r\n    defaultMessage: 'Ad block status disabled',\r\n  },\r\n  ClarityProjectID: {\r\n    id: 'auditHistory.ClarityProjectID',\r\n    defaultMessage: 'Clarity project ID {id} added ',\r\n  },\r\n  ServingStatus: {\r\n    id: 'auditHistory.ServingStatus',\r\n    defaultMessage: 'Serving status',\r\n  },\r\n  ClarityStatus: {\r\n    id: 'auditHistory.ClarityStatus',\r\n    defaultMessage: 'Clarity project link is Approved',\r\n  },\r\n  PropertyName: {\r\n    id: 'auditHistory.PropertyName',\r\n    defaultMessage: 'Site name',\r\n  },\r\n  created: {\r\n    id: 'auditHistory.created',\r\n    defaultMessage: 'Created',\r\n  },\r\n  deleted: {\r\n    id: 'auditHistory.deleted',\r\n    defaultMessage: 'Deleted',\r\n  },\r\n  updated: {\r\n    id: 'auditHistory.updated',\r\n    defaultMessage: 'Updated',\r\n  },\r\n  updatedSmallCase: {\r\n    id: 'auditHistory.updatedSmallCase',\r\n    defaultMessage: 'updated',\r\n  },\r\n  changed: {\r\n    id: 'auditHistory.changed',\r\n    defaultMessage: 'changed',\r\n  },\r\n  exported: {\r\n    id: 'auditHistory.exported',\r\n    defaultMessage: 'Exported',\r\n  },\r\n  details: {\r\n    id: 'auditHistory.details',\r\n    defaultMessage: 'details',\r\n  },\r\n  downloaded: {\r\n    id: 'auditHistory.downloaded',\r\n    defaultMessage: 'Downloaded',\r\n  },\r\n  notificationPreferencesTitle: {\r\n    id: 'auditHistory.notificationPreferencesTitle',\r\n    defaultMessage: 'Notification preferences updated',\r\n  },\r\n  ServingStatusNotification: {\r\n    id: 'auditHistory.ServingStatusNotification',\r\n    defaultMessage: 'Serving status notifications are {status}',\r\n  },\r\n  BillingAlertNotification: {\r\n    id: 'auditHistory.BillingAlertNotification',\r\n    defaultMessage: 'Billing alert notifications are {status}',\r\n  },\r\n  InvitedUserNotification: {\r\n    id: 'auditHistory.InvitedUserNotification',\r\n    defaultMessage: 'User invite notifications are {status}',\r\n  },\r\n  ProfileReviewNotification: {\r\n    id: 'auditHistory.ProfileReviewNotification',\r\n    defaultMessage: 'Profile review notifications are {status}',\r\n  },\r\n  BackgroundColor: {\r\n    id: 'BackgroundColor',\r\n    defaultMessage: 'Background color',\r\n  },\r\n  ButtonBackgroundColor: {\r\n    id: 'BackgroundColor',\r\n    defaultMessage: 'Button background color',\r\n  },\r\n  AdUnitTypes: {\r\n    id: 'AdUnitTypes',\r\n    defaultMessage: 'Ad unit type',\r\n  },\r\n  TitleColor: {\r\n    id: 'TitleColor',\r\n    defaultMessage: 'Title color',\r\n  },\r\n  Font: {\r\n    id: 'Font',\r\n    defaultMessage: 'Font',\r\n  },\r\n  addedAs: {\r\n    id: 'auditHistory.addedAs',\r\n    defaultMessage: '{attributeChanged} added as {newValue}',\r\n  },\r\n  selectedAs: {\r\n    id: 'auditHistory.selectdAs',\r\n    defaultMessage: '{attributeChanged} selected as {newValue}',\r\n  },\r\n  updatedMessageFormat: {\r\n    id: 'auditHistory.updatedMessageFormat',\r\n    defaultMessage: '{attributeChanged} changed from {oldValue} to {newValue}',\r\n  },\r\n  LifeCycleStatusID: {\r\n    id: 'auditHistory.LifeCycleStatusID',\r\n    defaultMessage: 'Serving status',\r\n  },\r\n  nameChangedTo: {\r\n    id: 'auditHistory.nameChangedTo',\r\n    defaultMessage: '{oldValue} name changed to {newValue}',\r\n  },\r\n  added: {\r\n    id: 'auditHistory.added',\r\n    defaultMessage: 'added',\r\n  },\r\n  removed: {\r\n    id: 'auditHistory.removed',\r\n    defaultMessage: 'removed',\r\n  },\r\n});\r\n","import { AuditLog } from '../../../../@data';\r\nimport messages from '../ActionDetails.messages';\r\nimport AuditHistoryMessages from '../AuditHistory.messages';\r\nimport { ActionDetail } from './getActionDetails';\r\n\r\nexport function getActionDetailsForPayment(actionDetail: ActionDetail, auditLog: AuditLog, formatMessage) {\r\n  if (auditLog.changes) {\r\n    actionDetail.changes = auditLog.changes.map((change) => {\r\n      if (change.log) {\r\n        if (change.attributeChanged === 'Transaction') {\r\n          const [status, amount] = getTransactionStatusAndAmount(change.log, formatMessage);\r\n          return formatMessage(messages.TransactionMessage, { n: amount, status: status });\r\n        }\r\n      }\r\n\r\n      if (!change.oldValue && change.newValue) {\r\n        return `${formatMessage(messages.addedAs, {\r\n          attributeChanged: formatMessage(messages.PaymentAccountStatus),\r\n          newValue: change.newValue,\r\n        })}`;\r\n      }\r\n\r\n      if (change.oldValue && change.newValue) {\r\n        return `${formatMessage(messages.updatedMessageFormat, {\r\n          attributeChanged: formatMessage(messages.PaymentAccountStatus),\r\n          oldValue: change.oldValue,\r\n          newValue: change.newValue,\r\n        })}`;\r\n      }\r\n      return '';\r\n    });\r\n  }\r\n  if (actionDetail.changes && actionDetail.changes.length === 1) {\r\n    actionDetail.title = actionDetail.changes[0];\r\n    actionDetail.changes = [];\r\n  } else {\r\n    actionDetail.title = `${formatMessage(messages.updated)} ${formatMessage(AuditHistoryMessages.payment)} ${formatMessage(\r\n      messages.details\r\n    )}`;\r\n  }\r\n}\r\n\r\nfunction getTransactionStatusAndAmount(message: string, formatMessage) {\r\n  let status = '',\r\n    amount = 0;\r\n  message = message.toLowerCase();\r\n\r\n  if (message.includes('failed')) {\r\n    status = formatMessage(messages.Failed);\r\n  } else if (message.includes('settled')) {\r\n    status = formatMessage(messages.Settled);\r\n  } else if (message.includes('processing')) {\r\n    status = formatMessage(messages.Processing);\r\n  }\r\n\r\n  const transactionMessageParts = message.split(' ');\r\n  if (transactionMessageParts.length > 2) {\r\n    amount = Number(transactionMessageParts[1]);\r\n  }\r\n\r\n  return [status, amount];\r\n}\r\n","import { AuditLog, AuditType } from '../../../../@data';\r\nimport ActionDetailsMessages from '../ActionDetails.messages';\r\nimport { getEntityTypeDisplayMap } from './convertAttributeValues';\r\nimport { getActionDetailsForAdunit } from './getAdUnitActionDetails';\r\nimport { getActionDetailsForPayment } from './getPaymentActionDetails';\r\nimport { getActionDetailsForProperty } from './getPropertyActionDetails';\r\nimport { getActionDetailsForPublisher } from './getPublisherActionDetails';\r\nimport { getActionDetailsForUser } from './getUserActionDetails';\r\n\r\nexport class ActionDetail {\r\n  public title: string;\r\n  public changes: string[];\r\n}\r\n\r\nexport function getActionDetails(auditLog: AuditLog, formatMessage): ActionDetail {\r\n  const actionDetail = new ActionDetail();\r\n\r\n  actionDetail.title = `${auditLog.entityName ?? ''} ${auditLog.entityId ?? ''} `;\r\n\r\n  switch (auditLog.auditType) {\r\n    case AuditType.CREATE:\r\n      actionDetail.title = `${formatMessage(ActionDetailsMessages.created)} ${\r\n        auditLog.entityName ? auditLog.entityName : getEntityTypeDisplayMap(auditLog.entityType, formatMessage)\r\n      }`;\r\n      break;\r\n    case AuditType.DELETE:\r\n      actionDetail.title = `${formatMessage(ActionDetailsMessages.deleted)} ${auditLog.entityName}`;\r\n      break;\r\n    case AuditType.EXPORT:\r\n      actionDetail.title = `${formatMessage(ActionDetailsMessages.exported)} ${getEntityTypeDisplayMap(\r\n        auditLog.entityType,\r\n        formatMessage\r\n      )} ${formatMessage(ActionDetailsMessages.details)}`;\r\n      break;\r\n    case AuditType.DOWNLOAD:\r\n      actionDetail.title = `${formatMessage(ActionDetailsMessages.downloaded)} ${getEntityTypeDisplayMap(\r\n        auditLog.entityType,\r\n        formatMessage\r\n      )} ${formatMessage(ActionDetailsMessages.details)}`;\r\n      break;\r\n    case AuditType.INVITE: {\r\n      actionDetail.title = `${auditLog.userEmail} invited `;\r\n      const invitedUserEmail = auditLog.changes?.find((change) => change.attributeChanged === 'Email')?.newValue;\r\n      const invitedUserRole = auditLog.changes?.find((change) => change.attributeChanged === 'UserRole')?.newValue;\r\n      if (invitedUserEmail) {\r\n        actionDetail.title += ` ${invitedUserEmail}${invitedUserRole ? ` as ${invitedUserRole}` : ''}}`;\r\n      } else if (invitedUserRole) {\r\n        actionDetail.title += `${invitedUserRole}`;\r\n      } else {\r\n        actionDetail.title += 'new user';\r\n      }\r\n      break;\r\n    }\r\n    case AuditType.INVITE_ACCEPT:\r\n      actionDetail.title = `${auditLog.userEmail} accepted the invitation}`;\r\n      break;\r\n    case AuditType.UPDATE:\r\n      updateActionDetailsForUpdate(actionDetail, auditLog, formatMessage);\r\n      break;\r\n\r\n    default:\r\n      actionDetail.title += formatMessage(ActionDetailsMessages.updated);\r\n      break;\r\n  }\r\n\r\n  return actionDetail;\r\n}\r\n\r\nfunction updateActionDetailsForUpdate(actionDetail: ActionDetail, auditLog: AuditLog, formatMessage) {\r\n  switch (auditLog.entityType) {\r\n    case 'AdUnit':\r\n      getActionDetailsForAdunit(actionDetail, auditLog, formatMessage);\r\n      break;\r\n    case 'Property':\r\n      getActionDetailsForProperty(actionDetail, auditLog, formatMessage);\r\n      break;\r\n    case 'User':\r\n      getActionDetailsForUser(actionDetail, auditLog, formatMessage);\r\n      break;\r\n    case 'Payment':\r\n      getActionDetailsForPayment(actionDetail, auditLog, formatMessage);\r\n      break;\r\n    case 'Publisher':\r\n      getActionDetailsForPublisher(actionDetail, auditLog, formatMessage);\r\n      break;\r\n    default:\r\n      actionDetail.title = `${auditLog.entityType} ${formatMessage(ActionDetailsMessages.updated)}`;\r\n      break;\r\n  }\r\n}\r\n","import { AuditLog, ServingStatusMap } from '../../../../@data';\r\nimport AppMessages from '../../../../App.messages';\r\nimport ActionDetailsMessages from '../ActionDetails.messages';\r\nimport { getAdUnitTypes, getLifeCycleStatusIdValue } from './convertAttributeValues';\r\nimport { ActionDetail } from './getActionDetails';\r\n\r\nexport function getActionDetailsForAdunit(actionDetail: ActionDetail, auditLog: AuditLog, formatMessage) {\r\n  actionDetail.title = `${formatMessage(ActionDetailsMessages.updated)} ${auditLog.entityName}`;\r\n\r\n  if (auditLog.changes) {\r\n    actionDetail.changes = auditLog.changes.map((change) => {\r\n      let actionDetailMessage = '';\r\n      let attributeChanged = change.attributeChanged;\r\n      if (\r\n        ['AdUnitTypes', 'LifeCycleStatusID', 'Font', 'ServingStatus', 'BackgroundColor', 'ButtonBackgroundColor', 'TitleColor'].includes(\r\n          change.attributeChanged\r\n        )\r\n      ) {\r\n        attributeChanged = formatMessage(ActionDetailsMessages[change.attributeChanged]);\r\n      }\r\n\r\n      if (change.attributeChanged === 'AdUnitTypes') {\r\n        if (change.newValue && !change.oldValue) {\r\n          actionDetailMessage = `${formatMessage(ActionDetailsMessages.selectedAs, {\r\n            attributeChanged: attributeChanged,\r\n            newValue: getAdUnitTypes(change.newValue),\r\n          })}`;\r\n        } else if (change.newValue && change.oldValue) {\r\n          actionDetailMessage = formatMessage(ActionDetailsMessages.updatedMessageFormat, {\r\n            attributeChanged: attributeChanged,\r\n            oldValue: getAdUnitTypes(change.oldValue),\r\n            newValue: getAdUnitTypes(change.newValue),\r\n          });\r\n        }\r\n      } else if (change.attributeChanged === 'AdUnitName') {\r\n        actionDetailMessage = `${formatMessage(ActionDetailsMessages.nameChangedTo, {\r\n          oldValue: change.oldValue,\r\n          newValue: change.newValue,\r\n        })}`;\r\n      } else if (change.attributeChanged === 'LifeCycleStatusID') {\r\n        actionDetailMessage = `${formatMessage(ActionDetailsMessages.updatedMessageFormat, {\r\n          attributeChanged: attributeChanged,\r\n          oldValue: formatMessage(\r\n            getLifeCycleStatusIdValue(change.oldValue) === 'Active' ? AppMessages.statusActive : AppMessages.statusInactive\r\n          ),\r\n          newValue: formatMessage(\r\n            getLifeCycleStatusIdValue(change.newValue) === 'Active' ? AppMessages.statusActive : AppMessages.statusInactive\r\n          ),\r\n        })}`;\r\n      } else if (change.attributeChanged === 'ServingStatus') {\r\n        actionDetailMessage = `${formatMessage(ActionDetailsMessages.updatedMessageFormat, {\r\n          attributeChanged: attributeChanged,\r\n          oldValue: ServingStatusMap[Number(change.oldValue)],\r\n          newValue: ServingStatusMap[Number(change.newValue)],\r\n        })}`;\r\n      } else {\r\n        if (change.newValue && !change.oldValue) {\r\n          actionDetailMessage = `${formatMessage(ActionDetailsMessages.addedAs, {\r\n            attributeChanged: attributeChanged,\r\n            newValue: change.newValue,\r\n          })}`;\r\n        } else if (change.newValue && change.oldValue) {\r\n          actionDetailMessage = formatMessage(ActionDetailsMessages.updatedMessageFormat, {\r\n            attributeChanged: attributeChanged,\r\n            oldValue: change.oldValue,\r\n            newValue: change.newValue,\r\n          });\r\n        }\r\n      }\r\n\r\n      return actionDetailMessage;\r\n    });\r\n  }\r\n}\r\n","import { AuditLog, ServingStatusLabel } from '../../../../@data';\r\nimport adManagementMessages from '../../AdManagement.messages';\r\nimport messages from '../ActionDetails.messages';\r\nimport { getAddedRemovedCount } from './convertAttributeValues';\r\nimport { ActionDetail } from './getActionDetails';\r\n\r\nexport function getActionDetailsForProperty(actionDetail: ActionDetail, auditLog: AuditLog, formatMessage) {\r\n  actionDetail.title = `${formatMessage(messages.updated)} ${auditLog.entityName}`;\r\n  const adblockMessages: string[] = [];\r\n\r\n  if (auditLog.changes) {\r\n    actionDetail.changes = [];\r\n    actionDetail.changes = auditLog.changes.map((change) => {\r\n      if (change.attributeChanged === 'ServingStatus') {\r\n        if (change.newValue && !change.oldValue) {\r\n          return `${formatMessage(messages.ServingStatus)} ${formatMessage(adManagementMessages[ServingStatusLabel[change.newValue]])}`;\r\n        } else if (change.newValue && change.oldValue) {\r\n          return formatMessage(messages.updatedMessageFormat, {\r\n            attributeChanged: formatMessage(messages.ServingStatus),\r\n            oldValue: change.oldValue,\r\n            newValue: change.newValue,\r\n          });\r\n        }\r\n      }\r\n      if (change.attributeChanged === 'ClarityStatus' && change.newValue?.includes('Approved')) {\r\n        return formatMessage(messages.ClarityStatus);\r\n      }\r\n      if (change.attributeChanged === 'ClarityProjectID' && change.newValue) {\r\n        return formatMessage(messages.ClarityProjectID, { id: change.newValue });\r\n      }\r\n      if (change.attributeChanged === 'AdBlockStatus' && change.newValue) {\r\n        return change.newValue.includes('true')\r\n          ? formatMessage(messages.AdBlockStatusEnabled)\r\n          : formatMessage(messages.AdBlockStatusDisabled);\r\n      }\r\n      if (change.attributeChanged === 'PropertyName') {\r\n        if (change.newValue && change.oldValue) {\r\n          return formatMessage(messages.updatedMessageFormat, {\r\n            attributeChanged: formatMessage(messages.PropertyName),\r\n            oldValue: change.oldValue,\r\n            newValue: change.newValue,\r\n          });\r\n        }\r\n      }\r\n\r\n      if (change.log) {\r\n        actionDetail.title = formatMessage(messages.AdblocksUpdated);\r\n        const [addCount, removeCount] = getAddedRemovedCount(change.log);\r\n        if (!isNaN(addCount) && addCount > 0) {\r\n          adblockMessages.push(\r\n            `${addCount} ${formatMessage(addCount > 1 ? messages.AdBlockCategoriesPlural : messages.AdBlockCategories)} ${formatMessage(\r\n              messages.added\r\n            )}`\r\n          );\r\n        }\r\n        if (!isNaN(removeCount) && removeCount > 0) {\r\n          adblockMessages.push(\r\n            `${removeCount} ${formatMessage(\r\n              removeCount > 1 ? messages.AdBlockCategoriesPlural : messages.AdBlockCategories\r\n            )} ${formatMessage(messages.removed)}`\r\n          );\r\n        }\r\n      }\r\n\r\n      return '';\r\n    });\r\n    actionDetail.changes.push(...adblockMessages);\r\n  }\r\n}\r\n","import { AuditLog } from '../../../../@data';\r\nimport ActionDetailsMessages from '../ActionDetails.messages';\r\nimport { ActionDetail } from './getActionDetails';\r\n\r\nexport function getActionDetailsForUser(actionDetail: ActionDetail, auditLog: AuditLog, formatMessage) {\r\n  actionDetail.title = formatMessage(ActionDetailsMessages.notificationPreferencesTitle);\r\n  // Update it to \"Updated user details\" in case there are other attributes updated\r\n\r\n  if (auditLog.changes) {\r\n    actionDetail.changes = auditLog.changes.map((change) => {\r\n      if (change.log) {\r\n        switch (change.attributeChanged) {\r\n          case 'ServingStatusNotification':\r\n            return `${formatMessage(ActionDetailsMessages.ServingStatusNotification, { status: change.log })}`;\r\n          case 'BillingAlertNotification':\r\n            return `${formatMessage(ActionDetailsMessages.BillingAlertNotification, { status: change.log })}`;\r\n          case 'InvitedUserNotification':\r\n            return `${formatMessage(ActionDetailsMessages.InvitedUserNotification, { status: change.log })}`;\r\n          case 'ProfileReviewNotification':\r\n            return `${formatMessage(ActionDetailsMessages.ProfileReviewNotification, { status: change.log })}`;\r\n        }\r\n      }\r\n      if (change.attributeChanged) {\r\n        return `${formatMessage(ActionDetailsMessages.updated)} ${change.attributeChanged}`;\r\n      }\r\n\r\n      return '';\r\n    });\r\n  }\r\n}\r\n","import { AuditLog } from '../../../../@data';\r\nimport AppMessages from '../../../../App.messages';\r\nimport messages from '../ActionDetails.messages';\r\nimport { getAddedRemovedCount } from './convertAttributeValues';\r\nimport { ActionDetail } from './getActionDetails';\r\n\r\nexport function getActionDetailsForPublisher(actionDetail: ActionDetail, auditLog: AuditLog, formatMessage) {\r\n  actionDetail.title = `${formatMessage(messages.updated)} ${formatMessage(AppMessages.publisher)} ${formatMessage(messages.details)}`;\r\n  const adblockMessages: string[] = [];\r\n\r\n  if (auditLog.changes) {\r\n    actionDetail.changes = [];\r\n    actionDetail.changes = auditLog.changes.map((change) => {\r\n      let attributeChanged = change.attributeChanged;\r\n      if (['ServingStatus', 'UniversalAdBlockStatus'].includes(attributeChanged)) {\r\n        attributeChanged = formatMessage(messages[attributeChanged]);\r\n      }\r\n\r\n      if (change.log) {\r\n        actionDetail.title = formatMessage(messages.notificationPreferencesTitle);\r\n        switch (change.attributeChanged) {\r\n          case 'ServingStatusNotification':\r\n            return `${formatMessage(messages.ServingStatusNotification, { status: change.log })}`;\r\n          case 'BillingAlertNotification':\r\n            return `${formatMessage(messages.BillingAlertNotification, { status: change.log })}`;\r\n          case 'InvitedUserNotification':\r\n            return `${formatMessage(messages.InvitedUserNotification, { status: change.log })}`;\r\n          case 'ProfileReviewNotification':\r\n            return `${formatMessage(messages.ProfileReviewNotification, { status: change.log })}`;\r\n          case 'UniversalAdBlockCategories': {\r\n            actionDetail.title = formatMessage(messages.AdblocksUpdated);\r\n            const [addCount, removeCount] = getAddedRemovedCount(change.log);\r\n            if (!isNaN(addCount) && addCount > 0) {\r\n              adblockMessages.push(\r\n                `${addCount} ${formatMessage(\r\n                  addCount > 1 ? messages.UniversalAdBlockCategoriesPlural : messages.UniversalAdBlockCategories\r\n                )} ${formatMessage(messages.added)}`\r\n              );\r\n            }\r\n            if (!isNaN(removeCount) && removeCount > 0) {\r\n              adblockMessages.push(\r\n                `${removeCount} ${formatMessage(\r\n                  removeCount > 1 ? messages.UniversalAdBlockCategoriesPlural : messages.UniversalAdBlockCategories\r\n                )} ${formatMessage(messages.removed)}`\r\n              );\r\n            }\r\n          }\r\n        }\r\n      } else if (!change.oldValue && change.newValue) {\r\n        return `${formatMessage(messages.addedAs, { attributeChanged: attributeChanged, newValue: change.newValue })}`;\r\n      } else if (change.oldValue && !change.newValue) {\r\n        return `${formatMessage(messages.removed)} ${attributeChanged}`;\r\n      } else if (change.oldValue && change.newValue) {\r\n        return `${formatMessage(messages.updatedMessageFormat, {\r\n          attributeChanged: attributeChanged,\r\n          oldValue: change.oldValue,\r\n          newValue: change.newValue,\r\n        })}`;\r\n      }\r\n\r\n      return '';\r\n    });\r\n    actionDetail.changes.push(...adblockMessages);\r\n  }\r\n}\r\n","import { AuditType } from '../../../../@data';\r\nimport { FilterType } from '../../../../components/GridFilter/GridFilter.types';\r\nimport { IFilterItem } from '../../../../layout/GridPageV2';\r\nimport UserManagementMessages from '../../UserManagement/UserManagement.messages';\r\nimport messages from '../AuditHistory.messages';\r\nimport { getEntityTypeDisplayMap } from './convertAttributeValues';\r\n\r\nexport function getFilterItems(formatMessage): IFilterItem[] {\r\n  const { superAdmin, accountManager, reportUser } = UserManagementMessages;\r\n\r\n  return [\r\n    {\r\n      filterName: formatMessage(messages.userEmail),\r\n      filterType: FilterType.string,\r\n      columnName: 'userEmail',\r\n    },\r\n    {\r\n      filterName: formatMessage(messages.userRole),\r\n      filterType: FilterType.custom,\r\n      columnName: 'userRole',\r\n      filterOptions: [\r\n        {\r\n          key: 'SuperAdmin',\r\n          text: formatMessage(superAdmin),\r\n        },\r\n        {\r\n          key: 'AccountManager',\r\n          text: formatMessage(accountManager),\r\n        },\r\n        {\r\n          key: 'ReportUser',\r\n          text: formatMessage(reportUser),\r\n        },\r\n      ],\r\n    },\r\n    {\r\n      filterName: formatMessage(messages.actionType),\r\n      filterType: FilterType.custom,\r\n      columnName: 'actionType',\r\n      filterOptions: [\r\n        {\r\n          key: AuditType.CREATE,\r\n          text: formatMessage(messages.create),\r\n        },\r\n        {\r\n          key: AuditType.UPDATE,\r\n          text: formatMessage(messages.update),\r\n        },\r\n        {\r\n          key: AuditType.DELETE,\r\n          text: formatMessage(messages.delete),\r\n        },\r\n        // {\r\n        //   key: AuditType.INVITE,\r\n        //   text: formatMessage(messages.invite),\r\n        // },\r\n        // {\r\n        //   key: AuditType.INVITE_ACCEPT,\r\n        //   text: formatMessage(messages.inviteAccept),\r\n        // },\r\n        // {\r\n        //   key: AuditType.EXPORT,\r\n        //   text: formatMessage(messages.export),\r\n        // },\r\n        // {\r\n        //   key: AuditType.DOWNLOAD,\r\n        //   text: formatMessage(messages.download),\r\n        // },\r\n      ],\r\n    },\r\n    {\r\n      filterName: formatMessage(messages.actionOn),\r\n      filterType: FilterType.custom,\r\n      columnName: 'actionOn',\r\n      filterOptions: [\r\n        {\r\n          key: 'adunit',\r\n          text: getEntityTypeDisplayMap('adunit', formatMessage),\r\n        },\r\n        {\r\n          key: 'property',\r\n          text: getEntityTypeDisplayMap('property', formatMessage),\r\n        },\r\n        {\r\n          key: 'user',\r\n          text: getEntityTypeDisplayMap('user', formatMessage),\r\n        },\r\n        {\r\n          key: 'publisher',\r\n          text: getEntityTypeDisplayMap('publisher', formatMessage),\r\n        },\r\n        {\r\n          key: 'payment',\r\n          text: getEntityTypeDisplayMap('payment', formatMessage),\r\n        },\r\n        // {\r\n        //   key: 'report',\r\n        //   text: formatMessage(messages.report),\r\n        // },\r\n      ],\r\n    },\r\n  ];\r\n}\r\n","import { Icon } from '@fluentui/react';\r\nimport React, { useEffect, useMemo } from 'react';\r\nimport { InjectedIntlProps } from 'react-intl';\r\nimport { AuditLog } from '../../../@data';\r\nimport { injectIntlAndObserver } from '../../../utils';\r\nimport { isButtonPressKey } from '../../../utils/AccessibilityUtils';\r\nimport { getAuditHistoryStore } from './@data/store/store';\r\nimport messages from './AuditHistory.messages';\r\nimport { getStyles } from './AuditHistory.styles';\r\nimport { getActionDetails } from './utils';\r\n\r\nexport interface IActionDetailProps extends InjectedIntlProps {\r\n  auditLog: AuditLog;\r\n  index: number;\r\n}\r\n\r\nexport const ActionDetail = injectIntlAndObserver(({ intl: { formatMessage }, auditLog, index }: IActionDetailProps) => {\r\n  const { isShowAllDetailsEnabled } = getAuditHistoryStore();\r\n  const styles = getStyles();\r\n\r\n  // eslint-disable-next-line\r\n  const actionDetails = useMemo(() => getActionDetails(auditLog, formatMessage), [auditLog]);\r\n  const [showDetails, setShowDetails] = React.useState(isShowAllDetailsEnabled);\r\n\r\n  useEffect(() => setShowDetails(isShowAllDetailsEnabled), [isShowAllDetailsEnabled]);\r\n\r\n  return (\r\n    <div>\r\n      <span>\r\n        {actionDetails.title || ''}{' '}\r\n        {actionDetails.changes?.length > 0 && (\r\n          <span\r\n            onClick={() => setShowDetails(!showDetails)}\r\n            onKeyDown={(ev) => isButtonPressKey(ev.key) && setShowDetails(!showDetails)}\r\n            tabIndex={0}\r\n          >\r\n            <span className={styles.showDetails} role=\"button\">\r\n              {formatMessage(showDetails ? messages.hideDetails : messages.showDetails)}\r\n            </span>\r\n            <span className={styles.showDetailsIcon}>\r\n              {showDetails ? <Icon iconName=\"ChevronDown\" /> : <Icon iconName=\"ChevronRight\" />}\r\n            </span>\r\n          </span>\r\n        )}\r\n      </span>\r\n      {showDetails && actionDetails.changes?.length > 0 && (\r\n        <ul className={styles.actionDetailsList}>\r\n          {actionDetails.changes?.map((change, index2) => (\r\n            <li className={styles.actionDetailsListItem} key={`actionDetailRow-${index}-${index2}`}>\r\n              {change}\r\n            </li>\r\n          ))}\r\n        </ul>\r\n      )}\r\n    </div>\r\n  );\r\n});\r\n","import { getTheme, mergeStyleSets } from '@fluentui/react';\r\nimport { IPubcenterSpacing } from '../../../../theme';\r\n\r\nexport const getStyles = () => {\r\n  const theme = getTheme();\r\n  const { palette } = theme;\r\n  const spacing = theme.spacing as IPubcenterSpacing;\r\n\r\n  return mergeStyleSets({\r\n    showDetails: {\r\n      color: palette.themePrimary,\r\n      cursor: 'pointer',\r\n    },\r\n    showDetailsIcon: {\r\n      paddingLeft: spacing.size6,\r\n    },\r\n    actionDetailsList: {\r\n      listStyleType: 'none',\r\n      paddingLeft: '0px',\r\n    },\r\n    actionDetailsListItem: {\r\n      color: palette.neutralSecondary,\r\n    },\r\n  });\r\n};\r\n","import React from 'react';\r\nimport { AuditLog, UserRole } from '../../../../@data';\r\nimport { IGridV2Column } from '../../../../layout/GridPageV2';\r\nimport { getFormattedUserRole } from '../../UserManagement/utils/userRoleUtils';\r\nimport { getAuditHistoryStore } from '../@data/store/store';\r\nimport { ActionDetail } from '../ActionDetails';\r\nimport messages from '../AuditHistory.messages';\r\nimport { getEntityTypeDisplayMap } from './convertAttributeValues';\r\nimport { getActionDetails } from './getActionDetails';\r\n\r\nexport function getGridColumns(formatMessage, locale): IGridV2Column[] {\r\n  const { isShowAllDetailsEnabled } = getAuditHistoryStore();\r\n  const formatter = new Intl.DateTimeFormat(locale, {\r\n    year: 'numeric',\r\n    month: '2-digit',\r\n    day: '2-digit',\r\n    hour: '2-digit',\r\n    minute: '2-digit',\r\n    second: '2-digit',\r\n    hour12: true,\r\n  });\r\n\r\n  return [\r\n    {\r\n      columnOrder: 1,\r\n      name: formatMessage(messages.dateTime),\r\n      key: 'dateTime',\r\n      minWidth: 150,\r\n      maxWidth: 150,\r\n      isResizable: true,\r\n      isSorted: true,\r\n      isSearchable: true,\r\n      isVisible: true,\r\n      isExportable: true,\r\n      suppressSorting: false,\r\n      onRender: (item: AuditLog) => (item && item.modifiedAt ? formatter.format(new Date(item.modifiedAt)) : ''),\r\n      exportFunction: (item: AuditLog) => (item && item.modifiedAt ? formatter.format(new Date(item.modifiedAt)) : ''),\r\n    },\r\n    {\r\n      columnOrder: 2,\r\n      fieldName: 'userEmail',\r\n      name: formatMessage(messages.userEmail),\r\n      key: 'userEmail',\r\n      minWidth: 100,\r\n      maxWidth: 200,\r\n      isResizable: true,\r\n      isSorted: true,\r\n      isSearchable: true,\r\n      isVisible: true,\r\n      isExportable: true,\r\n      suppressSorting: false,\r\n    },\r\n    {\r\n      columnOrder: 3,\r\n      name: formatMessage(messages.userRole),\r\n      key: 'userRole',\r\n      minWidth: 80,\r\n      maxWidth: 100,\r\n      isResizable: true,\r\n      isSorted: true,\r\n      isSearchable: true,\r\n      isVisible: true,\r\n      isExportable: true,\r\n      suppressSorting: false,\r\n      onRender: (item: AuditLog) => {\r\n        return item?.userRoles?.map((role) => getFormattedUserRole(formatMessage, role as UserRole)).join(', ') ?? '';\r\n      },\r\n      exportFunction: (item: AuditLog) => {\r\n        return item?.userRoles?.map((role) => getFormattedUserRole(formatMessage, role as UserRole)).join(', ') ?? '';\r\n      },\r\n    },\r\n    {\r\n      columnOrder: 4,\r\n      name: formatMessage(messages.actionType),\r\n      key: 'actionType',\r\n      minWidth: 50,\r\n      maxWidth: 100,\r\n      isResizable: true,\r\n      isSorted: true,\r\n      isSearchable: true,\r\n      isVisible: true,\r\n      isExportable: true,\r\n      suppressSorting: false,\r\n      onRender: (item: AuditLog) => {\r\n        return item ? formatMessage(messages[item.auditType.toString().toLowerCase()]) : '';\r\n      },\r\n      exportFunction: (item: AuditLog) => {\r\n        return item ? formatMessage(messages[item.auditType.toString().toLowerCase()]) : '';\r\n      },\r\n    },\r\n    {\r\n      columnOrder: 5,\r\n      name: formatMessage(messages.actionOn),\r\n      key: 'actionOn',\r\n      minWidth: 50,\r\n      maxWidth: 100,\r\n      isResizable: true,\r\n      isSorted: true,\r\n      isSearchable: true,\r\n      isVisible: true,\r\n      isExportable: true,\r\n      suppressSorting: false,\r\n      onRender: (item: AuditLog) => (item.entityType ? getEntityTypeDisplayMap(item.entityType, formatMessage) : ''),\r\n      exportFunction: (item: AuditLog) => (item.entityType ? getEntityTypeDisplayMap(item.entityType, formatMessage) : ''),\r\n    },\r\n    {\r\n      columnOrder: 6,\r\n      name: formatMessage(messages.actionDetails),\r\n      key: 'actionDetails',\r\n      minWidth: 300,\r\n      maxWidth: isShowAllDetailsEnabled ? 1000 : 300,\r\n      isResizable: true,\r\n      isSorted: true,\r\n      isSearchable: true,\r\n      isVisible: true,\r\n      isExportable: true,\r\n      suppressSorting: false,\r\n      onRender: (item: AuditLog, index: number) => {\r\n        return <ActionDetail auditLog={item} index={index} />;\r\n      },\r\n      searchFunction: (item: AuditLog, searchText: string) => {\r\n        const actionDetails = getActionDetails(item, formatMessage);\r\n        return JSON.stringify(actionDetails).toLowerCase().indexOf(searchText.toLowerCase()) > -1;\r\n      },\r\n      exportFunction: (item: AuditLog) => {\r\n        const actionDetails = getActionDetails(item, formatMessage);\r\n        return JSON.stringify(actionDetails);\r\n      },\r\n    },\r\n  ];\r\n}\r\n","import { orchestrator } from 'satcheljs';\r\nimport { Log } from '../../../../../../logging/src';\r\nimport { isTythonSelfServeUser, showLoadingToastNotification } from '../../../../../@data';\r\nimport { APP_NAME_NEW_COMPACT, APP_NAME_PUBCENTER } from '../../../../../constants';\r\nimport { DownloadOption } from '../../../../../layout/GridPageV2';\r\nimport { onDownloadButtonClicked } from '../../../../../layout/GridPageV2/@data/actions/commandBarActions';\r\nimport '../../../../../layout/GridPageV2/@data/orchestrators/downloadButtonClicked';\r\nimport AuditHistoryMessages from '../../AuditHistory.messages';\r\nimport { getGridColumns } from '../../utils/getGridColumns';\r\nimport { handleDownloadButtonClicked } from '../actions';\r\nimport { fetchAuditLogs } from '../services/fetchAuditLogs';\r\nimport { getAuditHistoryStore } from '../store/store';\r\n\r\norchestrator(handleDownloadButtonClicked, async ({ downloadType, formatMessage, locale }) => {\r\n  Log.info(`User intends to download audit history data for download type: ${downloadType}`);\r\n\r\n  const filename = `${isTythonSelfServeUser() ? APP_NAME_NEW_COMPACT : APP_NAME_PUBCENTER}-Audit-History-${new Date().getFullYear()}-${\r\n    new Date().getMonth() + 1\r\n  }-${new Date().getDate()}}.csv`;\r\n  const columns = getGridColumns(formatMessage, locale);\r\n  let data = getAuditHistoryStore().data || [];\r\n\r\n  if (downloadType === DownloadOption.all) {\r\n    showLoadingToastNotification({\r\n      textMessageDescriptor: AuditHistoryMessages.startingDownloadNotification,\r\n      onDismiss: () => console.log('download data fetched'),\r\n    });\r\n    const response = await fetchAuditLogs(getAuditHistoryStore().totalRecords, false);\r\n    data = response?.changeLogs || [];\r\n  }\r\n\r\n  onDownloadButtonClicked(formatMessage, data, filename, columns, downloadType);\r\n});\r\n","import { IContextualMenuProps } from '@fluentui/react';\r\nimport { AuditLog } from '../../../../@data';\r\nimport AppMessages from '../../../../App.messages';\r\nimport {\r\n  CommandBarActions,\r\n  Direction,\r\n  DownloadOption,\r\n  IBuildCommandBarProps,\r\n  IGridPageCommandBarItemProps,\r\n} from '../../../../layout/GridPageV2';\r\nimport { handleDownloadButtonClicked, setShowAllDetails, updateFiltersAndFetchLogs } from '../@data/actions';\r\nimport { getAuditHistoryStore } from '../@data/store/store';\r\nimport messages from '../AuditHistory.messages';\r\nimport { getFilterItems } from './getFilterItems';\r\n\r\nexport function getCommandBarItems(formatMessage, locale): IBuildCommandBarProps<AuditLog> {\r\n  const { isShowAllDetailsEnabled } = getAuditHistoryStore();\r\n\r\n  const downloadSubMenuProps: IContextualMenuProps = {\r\n    shouldFocusOnMount: true,\r\n    items: [\r\n      {\r\n        key: 'page',\r\n        text: formatMessage(AppMessages.downloadPage),\r\n        onClick: () => {\r\n          handleDownloadButtonClicked(DownloadOption.page, formatMessage, locale);\r\n        },\r\n        ariaDescribedBy: formatMessage(AppMessages.downloadPageCmdBtnAriaDesc),\r\n      },\r\n      {\r\n        key: 'all',\r\n        text: formatMessage(AppMessages.downloadAll),\r\n        onClick: () => {\r\n          handleDownloadButtonClicked(DownloadOption.all, formatMessage, locale);\r\n        },\r\n        ariaDescribedBy: formatMessage(AppMessages.downloadAllCmdBtnAriaDesc),\r\n      },\r\n    ],\r\n  };\r\n\r\n  return {\r\n    includeFarActions: [CommandBarActions.searchBox, CommandBarActions.addFilter],\r\n    getCustomCommandBarItems: (_): IGridPageCommandBarItemProps[] => {\r\n      return [\r\n        {\r\n          key: 'showAll',\r\n          text: formatMessage(isShowAllDetailsEnabled ? messages.hideAll : messages.showAll),\r\n          iconProps: { iconName: isShowAllDetailsEnabled ? 'Hide3' : 'ShowAll' },\r\n          onClick: () => setShowAllDetails(!isShowAllDetailsEnabled),\r\n          placement: {\r\n            direction: Direction.after,\r\n            key: CommandBarActions.addFilter,\r\n          },\r\n        },\r\n        {\r\n          key: CommandBarActions.download,\r\n          name: formatMessage(AppMessages.download),\r\n          ariaDescription: formatMessage(AppMessages.downloadAllCmdBtnAriaDesc),\r\n          iconProps: {\r\n            iconName: 'Download',\r\n          },\r\n          subMenuProps: downloadSubMenuProps,\r\n          placement: {\r\n            direction: Direction.after,\r\n            key: CommandBarActions.addFilter,\r\n          },\r\n        },\r\n      ];\r\n    },\r\n    filterItems: getFilterItems(formatMessage),\r\n    customApplyFilterFn: (filterConditions, items) => {\r\n      updateFiltersAndFetchLogs(filterConditions);\r\n      return getAuditHistoryStore().data || items;\r\n    },\r\n  };\r\n}\r\n","import { orchestrator } from 'satcheljs';\r\nimport { Log } from '../../../../../../logging/src';\r\nimport { AuditHistoryRequestFilter, AuditType, UserRole } from '../../../../../@data';\r\nimport { FilterCondition } from '../../../../../@data/store/schema/enums/FilterCondition';\r\nimport {\r\n  setAuditLogs,\r\n  setAuditTypes,\r\n  setEntityTypes,\r\n  setFilters,\r\n  setPageSize,\r\n  setTotalPages,\r\n  setTotalRecords,\r\n  setUserRoles,\r\n} from '../actions';\r\nimport { updateFiltersAndFetchLogs } from '../actions/actions';\r\nimport { fetchAuditLogs } from '../services/fetchAuditLogs';\r\nimport { getAuditHistoryStore } from '../store/store';\r\n\r\norchestrator(updateFiltersAndFetchLogs, async ({ filterConditions }) => {\r\n  const newFilters: AuditHistoryRequestFilter[] = [];\r\n  const newUserRoles: UserRole[] = [];\r\n  const newAuditTypes: AuditType[] = [];\r\n  const newEntityTypes: string[] = [];\r\n\r\n  const filterConditionMap = new Map<string, string>([\r\n    [FilterCondition.Contains, 'CONTAINS'],\r\n    [FilterCondition.DoesNotContain, 'NOT_CONTAINS'],\r\n    [FilterCondition.BeginsWith, 'BEGINS_WITH'],\r\n    [FilterCondition.EndsWith, 'ENDS_WITH'],\r\n    [FilterCondition.Equals, 'EQUALS'],\r\n    [FilterCondition.DoesNotEqual, 'NOT_EQUALS'],\r\n  ]);\r\n\r\n  filterConditions.forEach((filterCondition) => {\r\n    switch (filterCondition.columnName) {\r\n      case 'userEmail': {\r\n        newFilters.push({\r\n          field: 'userEmail',\r\n          value: filterCondition.filterText ?? '',\r\n          operator: filterCondition.filterCondition ? filterConditionMap.get(filterCondition.filterCondition) ?? 'Contains' : 'Contains',\r\n        });\r\n        break;\r\n      }\r\n      case 'userRole':\r\n        newUserRoles.push(filterCondition.filterCondition as UserRole);\r\n        break;\r\n      case 'actionType':\r\n        newAuditTypes.push(filterCondition.filterCondition as AuditType);\r\n        break;\r\n      case 'actionOn':\r\n        if (filterCondition.filterCondition) {\r\n          newEntityTypes.push(filterCondition.filterCondition);\r\n        }\r\n        break;\r\n      default:\r\n        Log.debug('Unknown filter encountered');\r\n        break;\r\n    }\r\n  });\r\n  const { filters, auditTypes, userRoles, entityTypes } = getAuditHistoryStore();\r\n  if (filters !== newFilters || auditTypes !== newAuditTypes || userRoles !== newUserRoles || entityTypes !== newEntityTypes) {\r\n    setFilters(newFilters);\r\n    setAuditTypes(newAuditTypes);\r\n    setUserRoles(newUserRoles);\r\n    setEntityTypes(newEntityTypes);\r\n\r\n    const responseJson = await fetchAuditLogs();\r\n\r\n    if (responseJson) {\r\n      const { changeLogs, pageSize, totalPages, totalRecords } = responseJson;\r\n      setAuditLogs(changeLogs);\r\n      setPageSize(pageSize);\r\n      setTotalPages(totalPages);\r\n      setTotalRecords(totalRecords);\r\n    }\r\n  }\r\n});\r\n","import { SelectionMode, Stack } from '@fluentui/react';\r\nimport React, { useEffect, useMemo } from 'react';\r\nimport { useI18n } from '../../../../i18n/useI18n';\r\nimport { AuditLog, LayoutMode, getAppStore, onHelpInfoCalloutOpened, onHelpInfoChanged, onLayoutChanged } from '../../../@data';\r\nimport { FormTitle } from '../../../components/Form';\r\nimport { GridPageLayout } from '../../../layout/GridPageLayout/GridPageLayout';\r\nimport { GridV2 } from '../../../layout/GridPageV2';\r\nimport { Pagination } from '../../../layout/GridPageV2/components/Pagination';\r\nimport { PaginationDisplay } from '../../../layout/GridPageV2/components/Pagination/Pagination.types';\r\nimport ProfilePanelMessages from '../../../layout/PageLayout/header-panels/ProfilePanel/ProfilePanel.messages';\r\nimport { IRouterWithIntl, injectIntlAndObserver } from '../../../utils';\r\nimport { CustomCalender } from '../../report/components/CustomCalender/CustomCalender';\r\nimport { RangeType } from '../../report/components/CustomCalender/CustomCalender.types';\r\nimport { RouteName } from '../@data';\r\nimport { onCurrentRouteChanged } from '../@data/actions';\r\nimport { getStore } from '../Account/Settings/@data/store/store';\r\nimport { onAuditHistoryPageInitialized, onSelectedDatesChanged, resetFilters, setPageNumber, setPageSize } from './@data/actions';\r\nimport './@data/orchestrators';\r\nimport { getAuditHistoryStore } from './@data/store/store';\r\nimport AuditHistoryMessages from './AuditHistory.messages';\r\nimport { getCommandBarItems } from './utils/getCommandBarItems';\r\nimport { getGridColumns } from './utils/getGridColumns';\r\n\r\nexport interface IAuditHistoryPageProps extends IRouterWithIntl {}\r\n\r\nexport const AuditHistoryPage = injectIntlAndObserver(function AuditHistoryPageComp(props: IAuditHistoryPageProps) {\r\n  const { formatMessage } = props.intl;\r\n  const { auditHistory, noAuditsFound, noPublisherSelected } = AuditHistoryMessages;\r\n  const { data, startDate, endDate, totalPages, isDataLoading, pageNumber, pageSize, isShowAllDetailsEnabled } = getAuditHistoryStore();\r\n  const { publisher, userContext, helpInfo, locale: appLocale } = getAppStore();\r\n  const { systemPreferences } = getStore().active;\r\n  const { locale } = useI18n({ systemPreferences, publisher, userContext });\r\n\r\n  useEffect(() => {\r\n    if (getAppStore().layout !== LayoutMode.Default) {\r\n      onLayoutChanged(LayoutMode.Default);\r\n    }\r\n\r\n    onCurrentRouteChanged(RouteName.auditHistory, props.intl.formatMessage, ProfilePanelMessages.auditHistory);\r\n\r\n    // resetting filters\r\n    resetFilters();\r\n    // eslint-disable-next-line react-hooks/exhaustive-deps\r\n  }, []);\r\n\r\n  const gridColumns = useMemo(() => {\r\n    return getGridColumns(formatMessage, locale);\r\n    // eslint-disable-next-line react-hooks/exhaustive-deps\r\n  }, [isShowAllDetailsEnabled, locale]);\r\n\r\n  useEffect(() => {\r\n    onAuditHistoryPageInitialized();\r\n\r\n    // eslint-disable-next-line react-hooks/exhaustive-deps\r\n  }, [publisher, startDate, endDate, pageNumber, pageSize]);\r\n\r\n  return (\r\n    <GridPageLayout>\r\n      <Stack horizontal horizontalAlign=\"space-between\">\r\n        <FormTitle\r\n          intl={props.intl}\r\n          title={formatMessage(auditHistory)}\r\n          calloutContent={helpInfo}\r\n          iconButtonOnClick={() => onHelpInfoCalloutOpened('pop_PCv4_AuditHistory', appLocale)}\r\n          calloutOnDismiss={() => onHelpInfoChanged()}\r\n        />\r\n        <div>\r\n          <CustomCalender\r\n            initialDateRange={{ startDate: startDate, endDate: endDate }}\r\n            disableFutureDays\r\n            onSelectedDatesChanged={onSelectedDatesChanged}\r\n            initialRangeType={RangeType.Last7ExcludingToday}\r\n          />\r\n        </div>\r\n      </Stack>\r\n      <GridV2\r\n        {...props}\r\n        entity={AuditLog}\r\n        isGridReady={!isDataLoading}\r\n        commandBarProps={getCommandBarItems(formatMessage, locale)}\r\n        dataGridProps={{\r\n          data: data || [],\r\n          gridV2Columns: gridColumns,\r\n          selectionMode: SelectionMode.none,\r\n          noEntityFound: publisher ? noAuditsFound : noPublisherSelected,\r\n        }}\r\n      >\r\n        <Pagination\r\n          intl={props.intl}\r\n          display={PaginationDisplay.Navigation}\r\n          totalPageCount={totalPages}\r\n          currentPageNumber={pageNumber ?? 1}\r\n          pageSize={pageSize ?? 10}\r\n          onPageNumberChange={setPageNumber}\r\n          onPageSizeChange={setPageSize}\r\n        />\r\n      </GridV2>\r\n    </GridPageLayout>\r\n  );\r\n});\r\n","import { defineMessages } from 'react-intl';\r\n\r\nexport default defineMessages({\r\n  title: {\r\n      id: 'admanagementindex.title',\r\n      defaultMessage: 'Ad Management Index',\r\n  }\r\n});","import * as React from 'react';\r\nimport { injectIntl } from 'react-intl';\r\nimport { Redirect } from 'react-router';\r\nimport messages from './IndexPage.messages';\r\nimport { RouteName, defaultRoute } from '../@data';\r\nimport { IIndexPageProps } from './IndexPage.types';\r\nimport { onCurrentRouteChanged } from '../@data/actions';\r\nimport { getAppStore } from '../../../@data';\r\n\r\ninterface IIndexState {\r\n  baseUrl?: string;\r\n  currentRoute?: string;\r\n}\r\n\r\n/**\r\n * The index page is responsible managing the default state of all the pages that\r\n * don't get matched. For example, when an adunit is not specified, it will redirect\r\n * to this page which will make sure the publisher and account are properly used.\r\n */\r\nexport const IndexPage = injectIntl(class extends React.Component<IIndexPageProps, IIndexState> {\r\n  constructor(props) {\r\n    super(props);\r\n\r\n    if (props.match.params.id) {\r\n      const pageId = props.match.params.id;\r\n      const baseUrl = props.match.url.substring(0, props.match.url.indexOf(pageId) - 1);\r\n      const currentRoute = pageId in RouteName ? pageId : defaultRoute;\r\n      this.state = { baseUrl, currentRoute };\r\n    } else {\r\n      this.state = { baseUrl: props.match.url, currentRoute: RouteName[defaultRoute]};\r\n    }\r\n  }\r\n\r\n  public componentDidMount() {\r\n    onCurrentRouteChanged(RouteName[this.state.currentRoute || defaultRoute], this.props.intl.formatMessage);\r\n  }\r\n\r\n  public render(): JSX.Element {\r\n    const store = getAppStore();\r\n\r\n    if (store.publisher && store.account &&\r\n        store.publisher.id && store.account.id) {\r\n      const publisherId = store.publisher.id.toString();\r\n      const accountId = store.account.id.toString();\r\n      const url = `${this.state.baseUrl}/${publisherId}-${accountId}/${this.state.currentRoute}`;\r\n\r\n      if (url !== this.props.location.pathname) {\r\n        return <Redirect to={url} />;\r\n      }\r\n    }\r\n\r\n    return (\r\n      <React.Fragment>\r\n        <h2>{this.props.intl.formatMessage(messages.title)}</h2>\r\n      </React.Fragment>\r\n    );\r\n  }\r\n});","import { getTheme, mergeStyleSets } from '@fluentui/react';\r\nimport { IPubcenterTheme } from '../../../theme';\r\nimport { ICommonStyleProps } from '../../types';\r\n\r\ntype StyleProperties = 'messageBarButtonStyle' | 'linkStyle';\r\nexport type AdManagementStyles = Record<StyleProperties, string>;\r\n\r\nexport const getStyles = (props: ICommonStyleProps): AdManagementStyles => {\r\n  const theme = (props.theme as unknown) as IPubcenterTheme;\r\n  const { spacing } = theme;\r\n\r\n  return mergeStyleSets({\r\n    messageBarButtonStyle: {\r\n      position: 'absolute',\r\n      top: spacing.size4,\r\n      right: spacing.size32,\r\n    },\r\n    linkStyle: {\r\n      textDecoration: 'none',\r\n      color: theme.palette.themePrimary,\r\n    },\r\n  });\r\n};\r\n\r\nexport function getClassNames<PropType>(props?: PropType): AdManagementStyles {\r\n  return getStyles({ theme: getTheme(), ...props });\r\n}\r\n","import { MessageBarButton, MessageBarType } from '@fluentui/react';\r\nimport React from 'react';\r\nimport { isPublisherActionRequired, isPublisherRejectionUnappealable } from '../../@data';\r\nimport { ExternalLink } from '../../components/ExternalLink';\r\nimport { INotificationBarItem, NotificationBar } from '../../components/NotificationBar';\r\nimport { TNC_HREF_PATH } from '../../constants/AppConstants';\r\nimport { NullableJSXElement } from '../../types';\r\nimport { RouteName, getAdManagementStore } from './@data';\r\nimport { setPublisherRejectedMessageClosedAction } from './@data/actions/entityEvaluationMutatorActions';\r\nimport { getClassNames } from './AdManagement.styles';\r\nimport profileCardMessages from './Home/components/ProfileCard/ProfileCard.messages';\r\nimport { isProfileInEditMode } from './Profile/@data';\r\n\r\nexport function renderCustomNotifications(): NullableJSXElement {\r\n  const pageStore = getAdManagementStore();\r\n  const { messageBarButtonStyle, linkStyle } = getClassNames();\r\n  const { formatMessage } = this.props.intl;\r\n\r\n  const notifications: INotificationBarItem[] = [];\r\n\r\n  if (isPublisherRejectionUnappealable() && !pageStore.isPublisherRejectedMessageClosed) {\r\n    notifications.push({\r\n      children: (\r\n        <div>\r\n          {formatMessage(profileCardMessages.rejectedBannerPart1)}\r\n          <ExternalLink href={TNC_HREF_PATH} className={linkStyle}>\r\n            {formatMessage(profileCardMessages.termsAndConditions)}\r\n          </ExternalLink>\r\n          .&nbsp;\r\n          {/* Removing this message as we don't have publisher deletion flow in place yet.\r\n          {formatMessage(profileCardMessages.rejectedBannerPart2)}\r\n          */}\r\n        </div>\r\n      ),\r\n      onDismiss: () => setPublisherRejectedMessageClosedAction(true),\r\n      messageBarType: MessageBarType.error,\r\n      suppressAutoDismiss: true,\r\n    });\r\n  }\r\n\r\n  if (isPublisherActionRequired() && !isProfileInEditMode() && !window.location.pathname.includes(`${RouteName.publisherProfile}`)) {\r\n    notifications.push({\r\n      children: (\r\n        <div>\r\n          {formatMessage(profileCardMessages.retryDescription)}\r\n          <MessageBarButton onClick={this._handleProfileEditButtonClick} className={messageBarButtonStyle}>\r\n            {formatMessage(profileCardMessages.viewProfile)}\r\n          </MessageBarButton>\r\n        </div>\r\n      ),\r\n      noDismissButton: true,\r\n      messageBarType: MessageBarType.severeWarning,\r\n      suppressAutoDismiss: true,\r\n    });\r\n  }\r\n\r\n  return (\r\n    <NotificationBar\r\n      items={notifications}\r\n      intl={this.props.intl}\r\n      onRemoved={() => {\r\n        return;\r\n      }}\r\n    />\r\n  );\r\n}\r\n","import * as React from 'react';\r\nimport { Redirect, Route, Switch } from 'react-router-dom';\r\nimport { IAppState, getAppStore, isPublisherRejectionUnappealable } from '../../@data';\r\nimport { hasAdQualityAccess } from '../../@data/utils/AdTakeDownService';\r\nimport { isTythonSelfServeUser } from '../../@data/utils/checkUserType';\r\nimport { IAppProps } from '../../ApplicationRoute';\r\nimport { IRoute } from '../../Routes.types';\r\nimport { ContentLayout } from '../../layout/ContentLayout/ContentLayout';\r\nimport { IMenuProps } from '../../layout/ContentLayout/ContentLayout.types';\r\nimport { NullableJSXElement } from '../../types';\r\nimport { injectRouterAndIntlWithObserver } from '../../utils';\r\nimport { getTythonHomePageRoute, getTythonProfilePageRoute } from '../../utils/routeUtils';\r\nimport SuspendedUserOverlay from '../error-pages/SuspendedUser/SuspendedUser';\r\nimport { PUBLISHER_BASED_ROUTES, RouteName } from './@data';\r\nimport { fetchPublisherEvaluationStatusAction } from './@data/actions';\r\nimport { getRoutes } from './@data/services/getAdmanagementRoutes';\r\nimport { UserSettingsPage } from './Account/Settings/UserSettingsPage';\r\nimport { AdManagementHeader } from './AdManagementHeader';\r\nimport { AuditHistoryPage } from './AuditHistory/AuditHistory';\r\nimport { IndexPage } from './Index/IndexPage';\r\nimport { editProfileAction } from './Profile/@data/actions';\r\nimport { renderCustomNotifications } from './renderPartials';\r\n\r\nfunction getDefaultRoute(): string {\r\n  return RouteName[isTythonSelfServeUser() ? RouteName.home : RouteName.adunit];\r\n}\r\n\r\n/**\r\n * The router will make sure /publisher-account/pageName is valid, otherwise it will\r\n * make sure it keeps the state consistent with /pagaeName\r\n */\r\nexport const AdManagementRouter = injectRouterAndIntlWithObserver(\r\n  class AdManagementRouterComponent extends React.Component<IAppProps> {\r\n    private _renderCustomNotifications: () => NullableJSXElement;\r\n\r\n    constructor(props: IAppProps) {\r\n      super(props);\r\n      this._renderCustomNotifications = renderCustomNotifications.bind(this);\r\n      this._handleProfileEditButtonClick = this._handleProfileEditButtonClick.bind(this);\r\n    }\r\n\r\n    public componentDidMount(): void {\r\n      if (isTythonSelfServeUser() && this.props.location.pathname !== getTythonHomePageRoute()) {\r\n        fetchPublisherEvaluationStatusAction();\r\n      }\r\n    }\r\n\r\n    public render(): JSX.Element {\r\n      const appStore = getAppStore();\r\n      const menuProps: IMenuProps = {\r\n        ...this.props,\r\n        routes: this._generateMenuRoutes(appStore),\r\n      };\r\n      const {\r\n        intl: { formatMessage },\r\n      } = this.props;\r\n\r\n      return (\r\n        <ContentLayout\r\n          {...this.props}\r\n          menuProps={menuProps}\r\n          renderCustomNotifications={this._renderCustomNotifications}\r\n          onRenderHeader={this._renderHeader}\r\n        >\r\n          <Redirect exact path={this.props.match.url} to={`${this.props.match.url}/${getDefaultRoute()}`} />\r\n          {isPublisherRejectionUnappealable() ? (\r\n            <SuspendedUserOverlay />\r\n          ) : (\r\n            <>\r\n              {getRoutes(formatMessage).map((route: IRoute, index: number) => (\r\n                <Route\r\n                  key={index}\r\n                  path={[\r\n                    `${this.props.match.url}/${route.key}`,\r\n                    `${this.props.match.url}/:publisherId-:accountId/${route.key}`,\r\n                    `${this.props.match.url}/:publisherId/${route.key}`,\r\n                  ]}\r\n                  component={route.component}\r\n                />\r\n              ))}\r\n              <Route\r\n                key=\"userSettings\"\r\n                path={`${this.props.match.url}/:publisherId/${RouteName[RouteName.userSettings]}`}\r\n                component={UserSettingsPage}\r\n              />\r\n              <Route\r\n                key=\"auditHistory\"\r\n                path={[\r\n                  `${this.props.match.url}/:publisherId/${RouteName[RouteName.auditHistory]}`,\r\n                  `${this.props.match.url}/${RouteName[RouteName.auditHistory]}`,\r\n                ]}\r\n                component={AuditHistoryPage}\r\n              />\r\n            </>\r\n          )}\r\n          <Route key=\"catch-all\" path={`${this.props.match.url}/:id`} component={IndexPage} />\r\n        </ContentLayout>\r\n      );\r\n    }\r\n\r\n    private _handleProfileEditButtonClick() {\r\n      editProfileAction();\r\n      this.props.history.push(getTythonProfilePageRoute());\r\n    }\r\n\r\n    private _generateMenuRoutes(store: IAppState) {\r\n      let keyFnc: (key: string) => string;\r\n\r\n      const {\r\n        intl: { formatMessage },\r\n      } = this.props;\r\n\r\n      if (store.publisher && store.account && store.publisher.id && store.account.id) {\r\n        const publisherId = store.publisher.id.toString();\r\n        const accountId = store.account.id.toString();\r\n        keyFnc = (key) => {\r\n          if (PUBLISHER_BASED_ROUTES.includes(key as RouteName)) {\r\n            return `/${publisherId}/${key}`;\r\n          }\r\n          return `/${publisherId}-${accountId}/${key}`;\r\n        };\r\n      } else if (store.publisher && store.publisher.id) {\r\n        const publisherId = store.publisher.id.toString();\r\n        keyFnc = (key) => `/${publisherId}/${key}`;\r\n      } else {\r\n        keyFnc = (key) => `/${key}`;\r\n      }\r\n\r\n      if (isTythonSelfServeUser()) {\r\n        return getRoutes(formatMessage)\r\n          .filter((route) => ![RouteName.adquality, RouteName.adfilter, RouteName.channel].includes(route.key as RouteName))\r\n          .map(\r\n            (route) =>\r\n              ({\r\n                key: keyFnc(route.key),\r\n                text: route.text,\r\n                icon: route.icon,\r\n                disabled: route.disabled,\r\n              } as IRoute)\r\n          );\r\n      }\r\n\r\n      if (!store.publisher || (store.publisher && !hasAdQualityAccess(store.publisher.id))) {\r\n        return getRoutes(formatMessage)\r\n          .filter((route) => route.key !== RouteName.adquality)\r\n          .map(\r\n            (route) =>\r\n              ({\r\n                key: keyFnc(route.key),\r\n                text: route.text,\r\n                icon: route.icon,\r\n                disabled: route.disabled,\r\n              } as IRoute)\r\n          );\r\n      }\r\n      // Update the menu routes according to whether the publisher/account were specified.\r\n\r\n      return getRoutes(formatMessage).map(\r\n        (route) =>\r\n          ({\r\n            key: keyFnc(route.key),\r\n            text: route.text,\r\n            icon: route.icon,\r\n            disabled: route.disabled,\r\n          } as IRoute)\r\n      );\r\n    }\r\n\r\n    private _renderHeader = (): JSX.Element => {\r\n      // Support non pub/acc urls as well. When nothing matched, go back to home to do the default route.\r\n      return (\r\n        <React.Fragment>\r\n          <Switch>\r\n            <Route\r\n              exact\r\n              path={`${this.props.match.url}/${RouteName.adquality}`}\r\n              render={(props) => <AdManagementHeader {...props} isAccountHidden={true} />}\r\n            />\r\n\r\n            <Route\r\n              exact\r\n              path={`${this.props.match.url}/${RouteName.property}`}\r\n              render={(props) => <AdManagementHeader {...props} isAccountHidden={true} />}\r\n            />\r\n\r\n            <Route exact path={`${this.props.match.url}/:publisherId/${RouteName.adunit}`} component={AdManagementHeader} />\r\n\r\n            <Route exact path={`${this.props.match.url}/:id?`} component={AdManagementHeader} />\r\n            <Route path={`${this.props.match.url}/:publisherId-:accountId`} component={AdManagementHeader} />\r\n\r\n            <Route\r\n              path={`${this.props.match.url}/:publisherId`}\r\n              render={(props) => <AdManagementHeader {...props} isAccountHidden={true} />}\r\n            />\r\n\r\n            <Route path=\"*\" render={() => <Redirect to={this.props.match.url} />} />\r\n          </Switch>\r\n        </React.Fragment>\r\n      );\r\n    };\r\n  }\r\n);\r\n","import { BreakPoints, IPubcenterTheme } from '../../../theme';\r\nimport { ITnCModalStyleProps, ITnCModalStyles } from './TnCModal.types';\r\n\r\nexport const getStyles = (props: ITnCModalStyleProps): ITnCModalStyles => {\r\n  const { spacing, fonts, palette } = (props.theme as unknown) as IPubcenterTheme;\r\n\r\n  const CONTAINER_WIDTH = 582;\r\n  const CONTAINER_WIDTH_MEDIUM = 548;\r\n  const { ResponsiveSmall, ResponsiveMedium } = BreakPoints;\r\n  const PADDING = 28;\r\n  const LAYOUT_HEIGHT = 48 + 48 + PADDING; // header height + footer height + vertical padding\r\n  const getLeftPosition = (width) => `calc((100vw - ${width}px - 4em)/2)`;\r\n\r\n  return {\r\n    root: {\r\n      background: 'rgba(0, 0, 0, 0.2)',\r\n      bottom: 0,\r\n      left: 0,\r\n      position: 'fixed',\r\n      right: 0,\r\n      top: 0,\r\n      [ResponsiveSmall]: {\r\n        position: 'initial',\r\n        background: 'transparent',\r\n      },\r\n    },\r\n    content: {\r\n      overflowY: 'auto',\r\n      background: 'white',\r\n      padding: '1em 2em',\r\n      position: 'absolute',\r\n      top: 80,\r\n      width: CONTAINER_WIDTH,\r\n      left: getLeftPosition(CONTAINER_WIDTH),\r\n      borderRadius: spacing.size12,\r\n      height: 'calc(100vh - 200px)',\r\n      display: 'flex',\r\n      flexDirection: 'column',\r\n      minHeight: 386,\r\n      color: palette.neutralPrimary,\r\n      [ResponsiveMedium]: {\r\n        width: CONTAINER_WIDTH_MEDIUM,\r\n        left: getLeftPosition(CONTAINER_WIDTH_MEDIUM),\r\n      },\r\n      [ResponsiveSmall]: {\r\n        top: spacing.size48,\r\n        height: `calc(100vh - ${LAYOUT_HEIGHT}px)`,\r\n        borderRadius: 0,\r\n        width: `calc(100vw - ${PADDING * 2}px)`,\r\n        left: 0,\r\n      },\r\n    },\r\n    summaryContent: {\r\n      marginBottom: spacing.size24,\r\n    },\r\n    tncWrapper: {\r\n      minHeight: spacing.size64,\r\n      overflow: 'scroll',\r\n      maxHeight: 'calc(100% - 372px)',\r\n      border: `1px solid ${palette.neutralSecondary}`,\r\n      boxShadow: `1px 1px 1px ${palette.neutralSecondary}40`,\r\n      borderRadius: spacing.size2,\r\n      padding: spacing.size12,\r\n      paddingRight: spacing.size4,\r\n      margin: '16px 0px',\r\n      color: palette.neutralSecondaryAlt,\r\n      fontFamily: 'inherit',\r\n    },\r\n    tncCheckbox: {\r\n      display: 'inline-flex',\r\n      marginRight: spacing.size12,\r\n    },\r\n    tncCheckboxWrapper: {\r\n      display: 'flex',\r\n      alignItems: 'center',\r\n      svg: {\r\n        marginLeft: spacing.size6,\r\n      },\r\n    },\r\n    tncAckMsgSubline: {\r\n      marginLeft: spacing.size36,\r\n      color: palette.neutralSecondary,\r\n      fontSize: fonts.size12.fontSize,\r\n    },\r\n    endingButton: {\r\n      marginLeft: spacing.size12,\r\n    },\r\n    actionButtonWrapper: {\r\n      display: 'flex',\r\n      alignItems: 'center',\r\n      justifyContent: 'flex-end',\r\n      marginTop: spacing.size12,\r\n    },\r\n    headLineGreeting: {\r\n      fontWeight: 600,\r\n      fontSize: fonts.size20.fontSize,\r\n      margin: `${spacing.size12} 0px`,\r\n    },\r\n  };\r\n};\r\n","import {\r\n  Checkbox,\r\n  DefaultButton,\r\n  FocusTrapZone,\r\n  IProcessedStyleSet,\r\n  Layer,\r\n  Popup,\r\n  PrimaryButton,\r\n  Text,\r\n  classNamesFunction,\r\n  getTheme,\r\n} from '@fluentui/react';\r\nimport { useBoolean } from '@fluentui/react-hooks';\r\nimport * as React from 'react';\r\nimport { InjectedIntlProps } from 'react-intl';\r\nimport { useI18n } from '../../../i18n/useI18n';\r\nimport { getAppStore, isTythonSelfServeUser } from '../../@data';\r\nimport { APP_NAME_NEW, APP_NAME_PUBCENTER } from '../../constants';\r\nimport { getStore } from '../../pages/ad-management/Account/Settings/@data/store/store';\r\nimport { injectIntlAndObserver } from '../../utils';\r\nimport { Logo } from '../Logo/Logo';\r\nimport messages from './TnCModal.messages';\r\nimport { getStyles } from './TnCModal.styles';\r\nimport { ITnCModalStyleProps, ITnCModalStyles } from './TnCModal.types';\r\n\r\nconst getClassNames = classNamesFunction<ITnCModalStyleProps, ITnCModalStyles>();\r\nexport interface ITnCModalProps {\r\n  onSkip?: () => void;\r\n  onAccept: () => void;\r\n  isActive: boolean;\r\n  content?: string;\r\n  releaseDate?: string;\r\n  isLoading: boolean;\r\n}\r\n\r\nexport const TnCModal = injectIntlAndObserver(\r\n  ({ intl: { formatMessage }, onSkip, onAccept, isActive, content, releaseDate, isLoading }: ITnCModalProps & InjectedIntlProps) => {\r\n    const [isTnCAccepted, { toggle, setFalse }] = useBoolean(false);\r\n    const { publisher, userContext } = getAppStore();\r\n    const { systemPreferences } = getStore().active;\r\n    const { locale } = useI18n({ systemPreferences, publisher, userContext });\r\n    const tncReleaseDate = new Date(releaseDate!).toLocaleDateString(locale, { month: 'long', day: 'numeric', year: 'numeric' });\r\n    const classNames: IProcessedStyleSet<ITnCModalStyles> = getClassNames(getStyles, {\r\n      theme: getTheme(),\r\n    });\r\n\r\n    if (!isActive) {\r\n      return null;\r\n    }\r\n\r\n    return (\r\n      <>\r\n        {isActive && (\r\n          <Layer styles={{ root: { background: 'transparent' } }}>\r\n            <Popup className={classNames.root} role=\"dialog\" aria-modal=\"true\" onDismiss={onSkip}>\r\n              <FocusTrapZone disabled>\r\n                <div role=\"document\" className={classNames.content}>\r\n                  <Logo renderDarkLogo />\r\n                  <Text block className={classNames.headLineGreeting}>\r\n                    {formatMessage(messages.headLineGreeting)}\r\n                  </Text>\r\n                  <Text block className={classNames.summaryContent}>\r\n                    {formatMessage(messages.summary, {\r\n                      releaseDate: tncReleaseDate,\r\n                      appName: isTythonSelfServeUser() ? APP_NAME_NEW : APP_NAME_PUBCENTER,\r\n                    })}\r\n                  </Text>\r\n                  <Text block>{formatMessage(messages.thanksMsg)}</Text>\r\n                  <Text block>\r\n                    {formatMessage(messages.thanksMsgSubLine, { appName: isTythonSelfServeUser() ? APP_NAME_NEW : APP_NAME_PUBCENTER })}\r\n                  </Text>\r\n                  <div className={classNames.tncWrapper}>\r\n                    <div dangerouslySetInnerHTML={{ __html: content! }} />\r\n                  </div>\r\n                  <Text block className={classNames.tncCheckboxWrapper}>\r\n                    <Checkbox checked={isTnCAccepted} onChange={toggle} className={classNames.tncCheckbox} />\r\n                    {formatMessage(messages.ackMsg)}\r\n                    <svg width=\"7\" height=\"7\" viewBox=\"0 0 7 7\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n                      <path\r\n                        d=\"M3.864 0.879999L3.624 3.184L5.928 2.536L6.096 3.64L3.888 3.82L5.316 5.716L4.284 6.28L3.264 4.18L2.34 6.28L1.272 5.716L2.676 3.82L0.492 3.64L0.66 2.536L2.94 3.184L2.688 0.879999H3.864Z\"\r\n                        fill=\"#A80000\"\r\n                      />\r\n                    </svg>\r\n                  </Text>\r\n                  <Text block className={classNames.tncAckMsgSubline}>\r\n                    {formatMessage(messages.ackMsgSubline)}\r\n                  </Text>\r\n                  <div className={classNames.actionButtonWrapper}>\r\n                    <PrimaryButton onClick={onAccept} disabled={!isTnCAccepted || isLoading}>\r\n                      {formatMessage(isLoading ? messages.submitting : messages.acceptButton)}\r\n                    </PrimaryButton>\r\n                    <DefaultButton\r\n                      className={classNames.endingButton}\r\n                      onClick={() => {\r\n                        setFalse();\r\n                        onSkip?.();\r\n                      }}\r\n                      disabled={onSkip === undefined}\r\n                    >\r\n                      {formatMessage(messages.skipButton)}\r\n                    </DefaultButton>\r\n                  </div>\r\n                </div>\r\n              </FocusTrapZone>\r\n            </Popup>\r\n          </Layer>\r\n        )}\r\n      </>\r\n    );\r\n  }\r\n);\r\n","import { getTheme, keyframes, mergeStyleSets } from '@fluentui/react';\r\nimport { IPubcenterTheme } from '../../../theme';\r\nimport { ICommonStyleProps } from '../../types';\r\nimport { flexWithJustifyBetween } from '../../utils/GlobalStyleUtils';\r\nimport { ToastType } from './ToastNotification.types';\r\n\r\nexport interface IToastStyleProps extends ICommonStyleProps {\r\n  type: ToastType;\r\n  suppressAutoDismiss?: boolean;\r\n  animationTime?: number;\r\n}\r\n\r\ntype StyleProperties = 'notificationsContainer' | 'notificationBody' | 'notificationAnimation' | 'notificationIcon';\r\n\r\ntype ToastNotificationStyles = Record<StyleProperties, string>;\r\n\r\nexport const getStyles = (props: IToastStyleProps): ToastNotificationStyles => {\r\n  const theme = (props.theme as unknown) as IPubcenterTheme;\r\n  const { spacing, palette } = theme;\r\n  const AUTO_DISMISS_ANIMATION_TIME: number = props.animationTime || 3000;\r\n  const MANUAL_DISMISS_ANIMATION_TIME: number = AUTO_DISMISS_ANIMATION_TIME / 4;\r\n\r\n  const toastStyle = {\r\n    info: {\r\n      background: palette.neutralLighter,\r\n    },\r\n    warning: {\r\n      background: palette.warning,\r\n    },\r\n    error: {\r\n      background: palette.messageBarError,\r\n      color: palette.neutralPrimary,\r\n    },\r\n    success: {\r\n      background: palette.success,\r\n    },\r\n    loading: {\r\n      background: palette.neutralLighter,\r\n    },\r\n  };\r\n\r\n  return mergeStyleSets({\r\n    notificationsContainer: {\r\n      position: 'absolute',\r\n      zIndex: 9999999,\r\n      top: spacing.size50,\r\n      right: spacing.size40,\r\n      display: 'flex',\r\n      flexDirection: 'column',\r\n      gap: spacing.size10,\r\n      alignItems: 'flex-end',\r\n    },\r\n    notificationBody: {\r\n      ...flexWithJustifyBetween,\r\n      boxShadow: 'rgb(0 0 0 / 14%) 0px 4px 8px, rgb(0 0 0 / 12%) 0px 0px 2px',\r\n      padding: `${spacing.size20} ${spacing.size10}`,\r\n      gap: spacing.size10,\r\n      borderRadius: 4,\r\n      width: 'fit-content',\r\n      ...toastStyle[props.type.toString()],\r\n    },\r\n    notificationAnimation: {\r\n      animationName: props.suppressAutoDismiss ? automaticFadeIn : automaticFadeInOut,\r\n      animationDuration: props.suppressAutoDismiss ? `${MANUAL_DISMISS_ANIMATION_TIME}ms` : `${AUTO_DISMISS_ANIMATION_TIME}ms`,\r\n      animationIterationCount: 1,\r\n    },\r\n    notificationIcon: {\r\n      cursor: 'pointer',\r\n      userSelect: 'none',\r\n    },\r\n  });\r\n};\r\n\r\nconst automaticFadeInOut = keyframes({\r\n  '0%': {\r\n    opacity: 0,\r\n    transform: 'translateX(100%)',\r\n    easing: 'ease-out',\r\n  },\r\n  '25%': {\r\n    opacity: 1,\r\n    transform: 'translateX(0)',\r\n    easing: 'ease-in',\r\n  },\r\n  '50%': {\r\n    opacity: 1,\r\n    transform: 'translateX(0)',\r\n  },\r\n  '75%': {\r\n    opacity: 1,\r\n    transform: 'translateX(0)',\r\n  },\r\n  '100%': {\r\n    opacity: 0,\r\n    transform: 'translateX(100%)',\r\n  },\r\n});\r\n\r\nconst automaticFadeIn = keyframes({\r\n  '0%': {\r\n    opacity: 0,\r\n    transform: 'translateX(100%)',\r\n    easing: 'ease-out',\r\n  },\r\n  '100%': {\r\n    opacity: 1,\r\n    transform: 'translateX(0)',\r\n    easing: 'ease-in',\r\n  },\r\n});\r\n\r\nexport function getClassNames<PropType>(props?: PropType): ToastNotificationStyles {\r\n  return getStyles({ theme: getTheme(), type: ToastType.info, ...props });\r\n}\r\n","import { Icon, Spinner } from '@fluentui/react';\r\nimport React from 'react';\r\nimport { removeToastNotification } from '../../@data/mutatorActions';\r\nimport { getClassNames } from './ToastNotification.styles';\r\nimport { IToastNotificationItemProps, IToastNotificationProps, ToastIcon, ToastType } from './ToastNotification.types';\r\n\r\nexport function ToastNotification({ items, intl }: IToastNotificationProps) {\r\n  const { notificationsContainer } = getClassNames();\r\n\r\n  return (\r\n    <div className={notificationsContainer}>\r\n      {items?.map((item) => (\r\n        <ToastNotificationItem key={item?.id.toString()} item={item} intl={intl} />\r\n      ))}\r\n    </div>\r\n  );\r\n}\r\n\r\nfunction ToastNotificationItem({ item, intl }: IToastNotificationItemProps) {\r\n  const { suppressAutoDismiss, animationTime, onDismiss, textMessageDescriptor, intlMessageValues, noDismissButton, text } = item.content;\r\n\r\n  const classNames = getClassNames({\r\n    suppressAutoDismiss: suppressAutoDismiss,\r\n    type: item.type,\r\n    animationTime: animationTime,\r\n  });\r\n\r\n  const onMessageDismiss = async () => {\r\n    if (!onDismiss) {\r\n      return;\r\n    }\r\n    await onDismiss();\r\n  };\r\n\r\n  return (\r\n    <div\r\n      role=\"alert\"\r\n      aria-live=\"assertive\"\r\n      className={classNames.notificationAnimation}\r\n      onAnimationEnd={async () => {\r\n        await onMessageDismiss();\r\n        if (suppressAutoDismiss === true && noDismissButton === false) {\r\n          return;\r\n        }\r\n        removeToastNotification(item);\r\n      }}\r\n    >\r\n      <div className={classNames.notificationBody}>\r\n        <Icon iconName={ToastIcon[item.type]} />\r\n        {item.type === ToastType.loading && <Spinner />}\r\n\r\n        {textMessageDescriptor ? intl.formatMessage(textMessageDescriptor, intlMessageValues) : text}\r\n        {!noDismissButton && (\r\n          <Icon\r\n            className={classNames.notificationIcon}\r\n            iconName={'Cancel'}\r\n            aria-label={item.content.dismissButtonAriaLabel}\r\n            onClick={() => {\r\n              removeToastNotification(item);\r\n              onMessageDismiss();\r\n            }}\r\n          />\r\n        )}\r\n      </div>\r\n    </div>\r\n  );\r\n}\r\n","import { defineMessages } from 'react-intl';\r\n\r\nexport default defineMessages({\r\n  messageBarDismissButtonAriaLabel: {\r\n    id: 'notificationLayout.messageBarDismissButtonAriaLabel',\r\n    defaultMessage: 'Dismiss notification',\r\n  },\r\n});\r\n","import { IStyle } from '@fluentui/react';\r\nimport { IPubcenterSpacing } from '../../../theme';\r\n\r\nexport interface INotificationLayoutStyles {\r\n  dialogRoot: IStyle;\r\n  dialogTitle: IStyle;\r\n  dialogContent: IStyle;\r\n  dialogWrapper: IStyle;\r\n  imgWrapper: IStyle;\r\n  dialogButtonCancel: IStyle;\r\n}\r\n\r\nexport const getStyles = (props) => {\r\n  const { theme } = props;\r\n  const spacing = theme.spacing as IPubcenterSpacing;\r\n\r\n  return {\r\n    dialogRoot: {\r\n      // overwrite fluentUI responsive size\r\n      width: `${spacing.size480} !important`,\r\n      minWidth: `30vw !important`,\r\n      maxWidth: `80vw !important`,\r\n      '.ms-Dialog-header': {\r\n        display: 'none',\r\n      },\r\n      '.ms-Dialog-inner': {\r\n        paddingTop: `${spacing.size24}`,\r\n      },\r\n    },\r\n    dialogWrapper: {\r\n      minHeight: spacing.size128,\r\n    },\r\n    dialogContent: {\r\n      height: '100%',\r\n      paddingLeft: spacing.size12,\r\n    },\r\n    imgWrapper: {\r\n      alignSelf: 'center',\r\n      img: { width: spacing.size72 },\r\n    },\r\n  };\r\n};\r\n","import {\r\n  classNamesFunction,\r\n  DefaultButton,\r\n  Dialog,\r\n  DialogType,\r\n  getTheme,\r\n  ImageBase,\r\n  ITheme,\r\n  PrimaryButton,\r\n  Stack,\r\n  Text,\r\n} from '@fluentui/react';\r\nimport { useBoolean, useSetTimeout } from '@fluentui/react-hooks';\r\nimport React, { useEffect, useMemo, useRef } from 'react';\r\nimport notificationMessages from '../../.../../NotificationsPanel.Types.messages';\r\nimport { useI18n } from '../../../i18n/useI18n';\r\nimport {\r\n  EntityEvaluationStatus,\r\n  fetchBackendNotifications,\r\n  getAppStore,\r\n  getPublisherEvaluationApprovalStatus,\r\n  NotificationLabel,\r\n  NotificationSeverity,\r\n  onNotificationCardAdded,\r\n  onNotificationCardRemoved,\r\n  onNotificationChanged,\r\n  onNotificationRemoved,\r\n  PaymentsPageBalance,\r\n} from '../../@data';\r\nimport { removeToastNotification } from '../../@data/mutatorActions';\r\nimport { isTythonSelfServeUser } from '../../@data/utils/checkUserType';\r\nimport { NotificationBar } from '../../components/NotificationBar';\r\nimport { TnCModal } from '../../components/TnCModal';\r\nimport { ToastNotification } from '../../components/ToastNotification';\r\nimport { APP_NAME_NEW } from '../../constants/AppConstants';\r\nimport { useWindowSize } from '../../hooks';\r\nimport { getStore } from '../../hooks/useWindowSize/store/store';\r\nimport { PAYMENTS_TAB_KEY } from '../../pages/ad-management/Account';\r\nimport { fetchAccountStatus, fetchPaymentsPageBalance } from '../../pages/ad-management/Account/@data/actions';\r\nimport { getAccountStatus, getPaymentsPageBalance } from '../../pages/ad-management/Account/@data/store/selectors';\r\nimport { SetupPaymentNotification } from '../../pages/ad-management/Account/Payments/Onboarding/PaymentsOnboarding';\r\nimport { paymentCheerMessages } from '../../pages/ad-management/Account/Payments/Onboarding/paymentsOnboarding.messages';\r\nimport {\r\n  NOTIFICATION_RENDER_BUFFER,\r\n  setPaymentNotificationBuffer,\r\n  SETUP_PAYMENTS_CHEER_DIALOG_FLAG,\r\n  SETUP_PAYMENTS_NOTIFICATION_FLAG,\r\n  SETUP_PAYMENTS_NOTIFICATION_ID,\r\n} from '../../pages/ad-management/Account/Payments/Onboarding/usePaymentsOnboarding';\r\nimport { onFetchUserPreferences } from '../../pages/ad-management/Account/Settings/@data/actions';\r\nimport { getStore as getUserSettingStore } from '../../pages/ad-management/Account/Settings/@data/store/store';\r\nimport dialogImg from '../../pages/ad-management/Home/resources/partyPopper.svg';\r\nimport { getStore as getTnCStore } from '../../pages/terms-and-conditions/@data/store/store';\r\nimport useTnC from '../../pages/terms-and-conditions/useTnC';\r\nimport { AccountPageRoute, DefaultRoute } from '../../Routes';\r\nimport { injectRouterAndIntlWithObserver, IRouterWithIntl } from '../../utils';\r\nimport messages from './NotificationLayout.messages';\r\nimport { getStyles, INotificationLayoutStyles } from './NotificationLayout.styles';\r\n\r\nconst getClassNames = classNamesFunction<{ theme: ITheme }, INotificationLayoutStyles>();\r\n\r\nexport interface INotificationLayoutProps {\r\n  children?: React.ReactNode;\r\n  renderCustomNotifications?: () => React.ReactNode;\r\n  ignoreGlobalAsync?: boolean;\r\n}\r\n\r\nexport const NotificationLayout = injectRouterAndIntlWithObserver(\r\n  ({ children, intl, renderCustomNotifications, history, ignoreGlobalAsync = false }: INotificationLayoutProps & IRouterWithIntl) => {\r\n    // TODO: wrap render logic into a hook\r\n    const classNames = getClassNames(getStyles, { theme: getTheme() });\r\n    const { notifications: barNotifications, publisher, userContext, account, toastNotifications, menuCollapsed, loading } = getAppStore();\r\n    const { isDataLoaded, data } = getPaymentsPageBalance();\r\n    const accountStatus = getAccountStatus();\r\n    const { setTimeout } = useSetTimeout();\r\n    const isPaymentNotificationHandledPerUserSession = localStorage.getItem(SETUP_PAYMENTS_NOTIFICATION_FLAG);\r\n    const isPaymentCheerDialogHandledPerUserSession = localStorage.getItem(SETUP_PAYMENTS_CHEER_DIALOG_FLAG);\r\n\r\n    const { systemPreferences } = getUserSettingStore().active;\r\n    const { locale } = useI18n({ systemPreferences, publisher, userContext });\r\n\r\n    const [paymentCheerDialogActive, { setFalse: dismissPaymentCheerDialog, setTrue: activatePaymentCheerDialog }] = useBoolean(false);\r\n    const { windowStoreSerializer } = useWindowSize();\r\n    const { isWindowSmallSize, isWindowExtraSmallSize } = windowStoreSerializer(getStore());\r\n    const publisherEvaluationStatus = getPublisherEvaluationApprovalStatus();\r\n    const handledPreference = useRef<boolean>(false);\r\n    const tncStore = getTnCStore();\r\n    const { tncSignatureStatus } = getUserSettingStore().active;\r\n    const { tncModalProps } = useTnC({\r\n      barNotifications,\r\n      tncStore,\r\n      tncSignatureStatus,\r\n      userContext,\r\n      publisher,\r\n      shouldDisableTnC: isTythonSelfServeUser() && !ignoreGlobalAsync,\r\n      isAppLoading: loading,\r\n    });\r\n    const MissingPaymentInformationNotificationId = 'MissingPaymentInformationNotification';\r\n    // eslint-disable-next-line react-hooks/exhaustive-deps\r\n    const windowLocationPath = useMemo(() => window.location.pathname, [window.location.pathname]);\r\n\r\n    /**\r\n     * fetch user level account preference for tython users\r\n     */\r\n    const shouldFetchUserPreference = useMemo(\r\n      () => !ignoreGlobalAsync && publisher && userContext && !handledPreference.current && isTythonSelfServeUser(),\r\n      [publisher, userContext, ignoreGlobalAsync]\r\n    );\r\n\r\n    /**\r\n     * fetch account status and balance when tython user landed default route\r\n     */\r\n    const shouldFetchPaymentOnboarding = useMemo(\r\n      () => publisher?.id && isTythonSelfServeUser() && windowLocationPath.includes(DefaultRoute),\r\n      [publisher, windowLocationPath]\r\n    );\r\n\r\n    /**\r\n     * fetch backend notifications when tython user landed default route\r\n     */\r\n    const shouldFetchBackendNotifications = useMemo(\r\n      () => publisher?.id && account?.id && userContext?.id && isTythonSelfServeUser() && windowLocationPath.includes(DefaultRoute),\r\n      [publisher, account, userContext, windowLocationPath]\r\n    );\r\n\r\n    /**\r\n     * hide notification when window in smaller screen and menu is expanded to save some screen space\r\n     */\r\n    const shouldHideBarNotifications = useMemo(() => (isWindowExtraSmallSize || isWindowSmallSize) && !menuCollapsed, [\r\n      isWindowExtraSmallSize,\r\n      isWindowSmallSize,\r\n      menuCollapsed,\r\n    ]);\r\n\r\n    /**\r\n     * handle payment notification push based on current route and localstorage flag\r\n     * as this notification suppose to show only once per valid user login\r\n     * push notification when\r\n     * - account status is loaded\r\n     * - balance is loaded\r\n     * - notification localStorage flag is empty\r\n     * - Publisher evaluation status is not rejected\r\n     * - user is tython super admin\r\n     */\r\n    const shouldPushPaymentNotification = useMemo(\r\n      () =>\r\n        accountStatus === 'NotCreated' &&\r\n        isDataLoaded &&\r\n        !isPaymentNotificationHandledPerUserSession &&\r\n        shouldFetchPaymentOnboarding &&\r\n        publisherEvaluationStatus &&\r\n        publisherEvaluationStatus !== EntityEvaluationStatus.Rejected &&\r\n        isTythonSelfServeUser() &&\r\n        userContext?.userRoles?.includes(41),\r\n      [\r\n        isDataLoaded,\r\n        accountStatus,\r\n        isPaymentNotificationHandledPerUserSession,\r\n        shouldFetchPaymentOnboarding,\r\n        publisherEvaluationStatus,\r\n        userContext,\r\n      ]\r\n    );\r\n\r\n    /**\r\n     * remove payment notification in panel based on account status\r\n     */\r\n    const shouldRemovePaymentNotificationInPanel = useMemo(\r\n      () =>\r\n        shouldFetchPaymentOnboarding &&\r\n        accountStatus &&\r\n        (accountStatus === 'Active' || accountStatus === 'InActive' || accountStatus === 'Error') &&\r\n        isDataLoaded,\r\n      [isDataLoaded, accountStatus, shouldFetchPaymentOnboarding]\r\n    );\r\n\r\n    /**\r\n     * handle payment cheer message render behavior, render the cheer popup only when\r\n     * - notification is valid to push\r\n     * - user balance > threshold\r\n     */\r\n    const shouldTriggerPaymentCheerDialog = useMemo(\r\n      () =>\r\n        shouldPushPaymentNotification &&\r\n        !isPaymentCheerDialogHandledPerUserSession &&\r\n        (data as PaymentsPageBalance).currBalance > (data as PaymentsPageBalance).threshold,\r\n      // eslint-disable-next-line react-hooks/exhaustive-deps\r\n      [shouldPushPaymentNotification, isPaymentCheerDialogHandledPerUserSession]\r\n    );\r\n\r\n    const setupPaymentNotification = {\r\n      messageBarType: 5,\r\n      component: <SetupPaymentNotification publisher={publisher?.id} onAction={() => onNotificationRemoved(setupPaymentNotification)} />,\r\n      suppressAutoDismiss: true,\r\n      id: SETUP_PAYMENTS_NOTIFICATION_ID,\r\n      messageBarStyles: {\r\n        text: {\r\n          marginTop: 0,\r\n          marginBottom: 0,\r\n          alignItems: 'center',\r\n          paddingTop: 2,\r\n        },\r\n        content: { alignItems: 'center' },\r\n      },\r\n    };\r\n\r\n    useEffect(() => {\r\n      if (shouldFetchUserPreference) {\r\n        onFetchUserPreferences(locale);\r\n        handledPreference.current = true;\r\n      }\r\n    }, [shouldFetchUserPreference, locale]);\r\n\r\n    useEffect(() => {\r\n      shouldFetchPaymentOnboarding && fetchPaymentsPageBalance();\r\n      shouldFetchPaymentOnboarding && fetchAccountStatus();\r\n    }, [shouldFetchPaymentOnboarding]);\r\n\r\n    useEffect(() => {\r\n      if (shouldFetchBackendNotifications) {\r\n        fetchBackendNotifications(intl);\r\n      }\r\n      // eslint-disable-next-line react-hooks/exhaustive-deps\r\n    }, [shouldFetchBackendNotifications]);\r\n\r\n    useEffect(() => {\r\n      if (shouldPushPaymentNotification) {\r\n        onNotificationCardAdded({\r\n          // tslint:disable-next-line: no-any\r\n          id: MissingPaymentInformationNotificationId,\r\n          notificationLabel: NotificationLabel.MissingPaymentInformation,\r\n          severity: NotificationSeverity.Warning,\r\n          title: intl.formatMessage(notificationMessages.MissingPaymentInformationTitle),\r\n          content: intl.formatMessage(notificationMessages.MissingPaymentInformationContent, { appName: APP_NAME_NEW }),\r\n          intlContentMessageValues: { appName: APP_NAME_NEW },\r\n          primaryActionText: intl.formatMessage(notificationMessages.MissingPaymentInformationPrimaryActionLabel),\r\n          primaryActionLink: `/ad-management/${publisher?.id}${AccountPageRoute}#payments`,\r\n        });\r\n        setTimeout(() => {\r\n          onNotificationChanged(setupPaymentNotification);\r\n          setPaymentNotificationBuffer(SETUP_PAYMENTS_NOTIFICATION_FLAG);\r\n        }, NOTIFICATION_RENDER_BUFFER);\r\n      }\r\n      // eslint-disable-next-line react-hooks/exhaustive-deps\r\n    }, [shouldPushPaymentNotification]);\r\n\r\n    useEffect(() => {\r\n      if (shouldRemovePaymentNotificationInPanel) {\r\n        onNotificationCardRemoved(MissingPaymentInformationNotificationId);\r\n      }\r\n    }, [shouldRemovePaymentNotificationInPanel]);\r\n\r\n    useEffect(() => {\r\n      if (shouldTriggerPaymentCheerDialog) {\r\n        activatePaymentCheerDialog();\r\n        setPaymentNotificationBuffer(SETUP_PAYMENTS_CHEER_DIALOG_FLAG);\r\n      }\r\n      // eslint-disable-next-line react-hooks/exhaustive-deps\r\n    }, [shouldTriggerPaymentCheerDialog]);\r\n\r\n    const handlePaymentSetupClick = () => {\r\n      dismissPaymentCheerDialog();\r\n      if (publisher?.id) {\r\n        history.push(`/ad-management/${publisher.id}${AccountPageRoute}#payments`, { defaultTab: PAYMENTS_TAB_KEY });\r\n      }\r\n    };\r\n\r\n    return (\r\n      <>\r\n        {renderCustomNotifications?.()}\r\n        <ToastNotification\r\n          items={toastNotifications}\r\n          intl={intl}\r\n          onRemoved={(notification) => removeToastNotification(notification)}\r\n          dismissButtonAriaLabel={intl.formatMessage(messages.messageBarDismissButtonAriaLabel)}\r\n        />\r\n        <NotificationBar\r\n          intl={intl}\r\n          items={shouldHideBarNotifications ? [] : barNotifications}\r\n          onRemoved={(notification) => onNotificationRemoved(notification)}\r\n          dismissButtonAriaLabel={intl.formatMessage(messages.messageBarDismissButtonAriaLabel)}\r\n        />\r\n        <Dialog\r\n          hidden={!paymentCheerDialogActive}\r\n          onDismiss={dismissPaymentCheerDialog}\r\n          dialogContentProps={{\r\n            type: DialogType.normal,\r\n            closeButtonAriaLabel: intl.formatMessage(paymentCheerMessages.cheerMessageCancelArialabel),\r\n          }}\r\n          styles={{ main: classNames.dialogRoot }}\r\n        >\r\n          <Stack horizontal className={classNames.dialogWrapper}>\r\n            <Stack.Item grow={1} className={classNames.imgWrapper}>\r\n              <ImageBase src={dialogImg} loading=\"lazy\" />\r\n            </Stack.Item>\r\n            <Stack.Item grow={5}>\r\n              <Stack verticalAlign=\"space-between\" className={classNames.dialogContent}>\r\n                <Stack.Item>\r\n                  <Text variant=\"xLarge\">{intl.formatMessage(paymentCheerMessages.cheerMessageTitle)}</Text>\r\n                </Stack.Item>\r\n                <Stack.Item>\r\n                  <Text>{intl.formatMessage(paymentCheerMessages.cheerMessageContent)}</Text>\r\n                </Stack.Item>\r\n                <Stack.Item>\r\n                  <Stack horizontal horizontalAlign=\"space-between\">\r\n                    <Stack.Item>\r\n                      <PrimaryButton onClick={handlePaymentSetupClick}>\r\n                        {intl.formatMessage(paymentCheerMessages.cheerMessageButtonAction)}\r\n                      </PrimaryButton>\r\n                    </Stack.Item>\r\n                    <Stack.Item>\r\n                      <DefaultButton onClick={dismissPaymentCheerDialog}>\r\n                        {intl.formatMessage(paymentCheerMessages.cheerMessageButtonCancel)}\r\n                      </DefaultButton>\r\n                    </Stack.Item>\r\n                  </Stack>\r\n                </Stack.Item>\r\n              </Stack>\r\n            </Stack.Item>\r\n          </Stack>\r\n        </Dialog>\r\n        <TnCModal {...tncModalProps} />\r\n        {children}\r\n      </>\r\n    );\r\n  }\r\n);\r\n","import { BaseComponent, classNamesFunction, FocusTrapZone, MessageBar } from '@fluentui/react';\r\nimport * as React from 'react';\r\nimport { INotificationBarItem, INotificationBarProps, INotificationBarStyleProps, INotificationBarStyles } from './NotificationBar.types';\r\n\r\nconst getClassNames = classNamesFunction<INotificationBarStyleProps, INotificationBarStyles>();\r\ninterface INotificationBarState {\r\n  useTrapZone: boolean;\r\n}\r\n\r\nexport class NotificationBarBase extends BaseComponent<INotificationBarProps, INotificationBarState> {\r\n  constructor(props) {\r\n    super(props);\r\n    this.state = {\r\n      useTrapZone: false,\r\n    };\r\n  }\r\n\r\n  public componentDidUpdate(prevProps: INotificationBarProps, prevState: INotificationBarState): void {\r\n    if (this.props.items && prevProps.items && this.props.items?.length > prevProps.items?.length && !prevState.useTrapZone) {\r\n      this.setState({ useTrapZone: true });\r\n    }\r\n  }\r\n\r\n  public render(): JSX.Element {\r\n    const { dismissButtonAriaLabel, styles, theme, items = [], intl } = this.props;\r\n    const classNames = getClassNames(styles, { theme: theme! });\r\n\r\n    const onMessageDismiss = (item: INotificationBarItem) => {\r\n      const { onDismiss, noDismissButton } = item;\r\n      if (!!onDismiss) {\r\n        return onDismiss;\r\n      }\r\n\r\n      if (!noDismissButton) {\r\n        return () => this.props.onRemoved(item);\r\n      }\r\n    };\r\n\r\n    return (\r\n      <div className={classNames.root}>\r\n        {items.map((item, idx) => (\r\n          <FocusTrapZone\r\n            key={`focus-trap-${idx}`}\r\n            disabled={!this.state.useTrapZone}\r\n            onFocus={() => {\r\n              setTimeout(() => this.setState({ useTrapZone: false }), 1000);\r\n            }}\r\n          >\r\n            <MessageBar\r\n              key={idx}\r\n              messageBarType={item.messageBarType}\r\n              styles={{ ...classNames.subComponentStyles.messageBar, ...(item.messageBarStyles ?? {}) }}\r\n              onDismiss={onMessageDismiss(item)}\r\n              dismissButtonAriaLabel={dismissButtonAriaLabel}\r\n              role=\"alert\"\r\n              actions={item.actions}\r\n            >\r\n              {/* {item.text} */}\r\n              {item.textMessageDescriptor && intl ? intl?.formatMessage(item.textMessageDescriptor, item.intlMessageValues) : item.text}\r\n              {item.children}\r\n              {item.component && item.component}\r\n            </MessageBar>\r\n          </FocusTrapZone>\r\n        ))}\r\n      </div>\r\n    );\r\n  }\r\n}\r\n","import { INotificationBarStyleProps, INotificationBarStyles } from './NotificationBar.types';\r\n\r\nexport const getStyles = (props: INotificationBarStyleProps): INotificationBarStyles => {\r\n  const { theme } = props;\r\n\r\n  return {\r\n    root: {\r\n    },\r\n    subComponentStyles: {\r\n      messageBar: {\r\n        root: {\r\n          marginBottom: theme.spacing.s1,\r\n          selectors: {\r\n            '&:last-child': {\r\n              marginBottom: 0\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n  };\r\n};\r\n","import { styled } from '@fluentui/react';\r\nimport { NotificationBarBase } from './NotificationBar.base';\r\nimport { getStyles } from './NotificationBar.styles';\r\nimport { INotificationBarProps, INotificationBarStyleProps, INotificationBarStyles } from './NotificationBar.types';\r\n\r\nexport const NotificationBar = styled<INotificationBarProps, INotificationBarStyleProps, INotificationBarStyles>(\r\n  NotificationBarBase,\r\n  getStyles,\r\n  undefined,\r\n  {\r\n    scope: 'NotificationBar',\r\n  }\r\n);\r\n","import { defineMessages } from 'react-intl';\r\n\r\nexport default defineMessages({\r\n  applyFilterButtonLabel: {\r\n    id:'gridFilter.filterSelectionCallout.apply',\r\n    defaultMessage: 'Apply'\r\n  },\r\n  filterSelectionTextBoxErrorMessage: {\r\n    id:'gridFilter.filterSelectionCallout.TextBoxErrorMessage',\r\n    defaultMessage: 'Field requires numerical value'\r\n  },\r\n  filtersTitle: {\r\n    id:'gridFilter.filtersTitle',\r\n    defaultMessage: 'Filters'\r\n  },\r\n  filterListAriaDescription: {\r\n    id: 'gridFilter.filterListAriaDescription',\r\n    defaultMessage: 'Click on list item to view or edit filter'\r\n  },\r\n  appliedFilterListAriaLabel: {\r\n    id: 'gridFilter.appliedFilterListAriaLabel',\r\n    defaultMessage: 'Applied filter list',\r\n  },\r\n  filterMenuAriaLabel: {\r\n    id: 'gridFilter.filterMenuAriaLabel',\r\n    defaultMessage: 'Filter Menu'\r\n  },\r\n  removeFilterIconAriaLabel: {\r\n    id: 'gridFilter.removeFilterIconAriaLabel',\r\n    defaultMessage: 'Remove filter'\r\n  },\r\n  applyFilterAriaDesc: {\r\n    id: 'gridFilter.applyFilterAriaDesc',\r\n    defaultMessage: 'Click to apply filter'\r\n  },\r\n  filterOptionDropdownAriaLabel: {\r\n    id: 'gridFilter.filterOptionDropdownAriaLabel',\r\n    defaultMessage: 'Filter options'\r\n  },\r\n  filterTextBoxAriaLabel: {\r\n    id: 'gridFilter.filterTextBoxAriaLabel',\r\n    defaultMessage: 'Filter value',\r\n  },\r\n  startDatePlaceholder: {\r\n    id:' gridFilter.filterSelectionCallout.startDatePlaceholder',\r\n    defaultMessage: 'Select start date...'\r\n  },\r\n  endDatePlaceholder: {\r\n    id:'gridFilter.filterSelectionCallout.endDatePlaceholder',\r\n    defaultMessage: 'Select end date...'\r\n  },\r\n  equals: {\r\n    id:'gridFilter.filterConditionStrings.equals',\r\n    defaultMessage: 'equals'\r\n  },\r\n  doesNotEqual: {\r\n    id:'gridFilter.filterConditionStrings.doesNotEqual',\r\n    defaultMessage: 'does not equal'\r\n  },\r\n  greaterThan: {\r\n    id:'gridFilter.filterConditionStrings.greaterThan',\r\n    defaultMessage: 'greater than'\r\n  },\r\n  greaterThanEqual: {\r\n    id:'gridFilter.filterConditionStrings.greaterThanEqual',\r\n    defaultMessage: 'greater than or equals'\r\n  },\r\n  lessThan: {\r\n    id:'gridFilter.filterConditionStrings.lessThan',\r\n    defaultMessage: 'less than'\r\n  },\r\n  lessThanEqual: {\r\n    id:'gridFilter.filterConditionStrings.lessThanEqual',\r\n    defaultMessage: 'less than or equals'\r\n  },\r\n  contains: {\r\n    id:'gridFilter.filterConditionStrings.contains',\r\n    defaultMessage: 'contains'\r\n  },\r\n  doesNotContain: {\r\n    id:'gridFilter.filterConditionStrings.doesNotContain',\r\n    defaultMessage: 'does not contain'\r\n  },\r\n  beginsWith: {\r\n    id:'gridFilter.filterConditionStrings.beginsWith',\r\n    defaultMessage: 'begins with'\r\n  },\r\n  endsWith: {\r\n    id:'gridFilter.filterConditionStrings.endsWith',\r\n    defaultMessage: 'ends with'\r\n  }\r\n});","import { IPubcenterSpacing } from '../../../theme';\r\nimport { IGridFilterStyleProps, IGridFilterStyles } from './GridFilter.types';\r\n\r\nexport const getStyles = (props: IGridFilterStyleProps): IGridFilterStyles => {\r\n  const { theme } = props;\r\n  const spacing = theme.spacing as IPubcenterSpacing;\r\n\r\n  return {\r\n    root: ['ms-GridFilter'],\r\n    filterBarFocused: {\r\n      backgroundColor: theme.palette.neutralLighter,\r\n      display: 'flex',\r\n      marginBottom: spacing.size16,\r\n      position: 'relative',\r\n    },\r\n    filterBarUnFocused: {\r\n      marginBottom: spacing.size16,\r\n      marginLeft: spacing.size24,\r\n      display: 'flex',\r\n      flexDirection: 'row',\r\n      overflow: 'hidden',\r\n    },\r\n    filterInfoContainer: {\r\n      display: 'flex',\r\n      flexDirection: 'row',\r\n      backgroundColor: theme.palette.neutralSecondary,\r\n      margin: '8px 0 8px 16px',\r\n      height: 28,\r\n      borderRadius: '2px',\r\n      color: theme.palette.white,\r\n      cursor: 'pointer',\r\n    },\r\n    highlightedFilterInfoContainer: {\r\n      display: 'flex',\r\n      flexDirection: 'row',\r\n      backgroundColor: theme.palette.themePrimary,\r\n      margin: '8px 0 8px 16px',\r\n      height: 28,\r\n      borderRadius: '2px',\r\n      color: theme.palette.white,\r\n      cursor: 'pointer',\r\n    },\r\n    filterInfoFocused: {\r\n      fontSize: theme.fonts.medium.fontSize,\r\n      alignContent: 'center',\r\n      padding: '4px 16px',\r\n      lineHeight: '19px',\r\n      display: 'inline-block',\r\n    },\r\n    filterInfoSelectors: {\r\n      selectors: {\r\n        '&:focus, &:hover': {\r\n          backgroundColor: theme.palette.neutralPrimaryAlt,\r\n        },\r\n      },\r\n    },\r\n    highlightedFilterInfoSelectors: {\r\n      selectors: {\r\n        '&:focus, &:hover': {\r\n          backgroundColor: theme.palette.themeDark,\r\n        },\r\n      },\r\n    },\r\n    filterCloseIcon: {\r\n      width: 12,\r\n      padding: spacing.size8,\r\n    },\r\n    filterIcon: {\r\n      padding: '5px 4px',\r\n      color: theme.palette.themePrimary,\r\n    },\r\n    filterInfoUnfocused: {\r\n      color: theme.palette.themePrimary,\r\n      textAlign: 'center',\r\n      verticalAlign: 'center',\r\n      cursor: 'pointer',\r\n      padding: '3px 4px',\r\n    },\r\n    filterMenuListItem: {\r\n      fontSize: theme.fonts.medium.fontSize,\r\n      padding: spacing.size8,\r\n      selectors: {\r\n        '&:focus, &:hover': {\r\n          backgroundColor: theme.palette.neutralLighter,\r\n        },\r\n      },\r\n      cursor: 'pointer',\r\n    },\r\n    filterSelectionCallout: {\r\n      display: 'flex',\r\n      flexDirection: 'column',\r\n      padding: spacing.size16,\r\n    },\r\n    filterSelectionCalloutTitle: {\r\n      lineHeight: '28px',\r\n      textAlign: 'left',\r\n      fontSize: theme.fonts.large.fontSize,\r\n      marginBottom: spacing.size8,\r\n    },\r\n    filterSelectionToolBar: {\r\n      display: 'flex',\r\n      flexDirection: 'row',\r\n    },\r\n    filterSelectionApplyButton: {\r\n      marginRight: spacing.size16,\r\n      backgroundColor: theme.palette.themePrimary,\r\n      borderColor: theme.palette.white,\r\n      color: theme.palette.white,\r\n      borderRadius: '2px',\r\n      selectors: {\r\n        '&:focus, &:hover': {\r\n          backgroundColor: theme.palette.themeDarkAlt,\r\n          color: theme.palette.white,\r\n        },\r\n      },\r\n    },\r\n    filterSelectionCancelButton: {\r\n      selectors: {\r\n        '&:focus, &:hover': {\r\n          backgroundColor: theme.palette.neutralLighter,\r\n        },\r\n      },\r\n    },\r\n    disabledApplyButton: {\r\n      marginRight: spacing.size16,\r\n      backgroundColor: theme.palette.neutralQuaternaryAlt,\r\n      borderColor: theme.palette.white,\r\n      borderRadius: '2px',\r\n    },\r\n    viewAllButton: {\r\n      color: theme.palette.themePrimary,\r\n      textDecoration: 'underline',\r\n      display: 'flex run-in',\r\n      height: 24,\r\n      width: 80,\r\n    },\r\n    clearAllButton: {\r\n      color: theme.palette.themePrimary,\r\n      textDecoration: 'underline',\r\n      display: 'flex run-in',\r\n      height: 24,\r\n      width: 80,\r\n      top: 10,\r\n    },\r\n    filterSummaryCallout: {\r\n      display: 'flex',\r\n      flexDirection: 'column',\r\n      padding: '5px 5px 16px 24px',\r\n      minWidth: 180,\r\n    },\r\n    calloutCloseIcon: {\r\n      marginTop: '1px',\r\n      padding: spacing.size4,\r\n      cursor: 'pointer',\r\n      position: 'absolute',\r\n      right: '2px',\r\n      color: theme.palette.black,\r\n      selectors: {\r\n        '&:focus, &:hover': {\r\n          backgroundColor: theme.palette.neutralLighter,\r\n          color: theme.palette.black,\r\n        },\r\n      },\r\n    },\r\n    filterSummaryCalloutHeader: {\r\n      display: 'flex',\r\n      flexDirection: 'row',\r\n    },\r\n    filterInfoSummaryItem: {\r\n      color: theme.palette.themePrimary,\r\n      verticalAlign: 'center',\r\n      cursor: 'pointer',\r\n      padding: '3px 20px 3px 4px',\r\n    },\r\n    filterSummaryCalloutTitle: {\r\n      lineHeight: '20px',\r\n      textAlign: 'left',\r\n      fontSize: theme.fonts.large.fontSize,\r\n      marginTop: spacing.size12,\r\n      marginBottom: spacing.size4,\r\n    },\r\n    filterListPageStyle: {\r\n      display: 'flex',\r\n      flexFlow: 'row wrap',\r\n    },\r\n    subComponentStyles: {\r\n      iconButton: {\r\n        root: [\r\n          'ms-font-m',\r\n          {\r\n            color: theme.palette.white,\r\n          },\r\n        ],\r\n      },\r\n    },\r\n  };\r\n};\r\n","import {\r\n  ActionButton,\r\n  BaseComponent,\r\n  Callout,\r\n  Checkbox,\r\n  DatePicker,\r\n  DefaultButton,\r\n  DirectionalHint,\r\n  Dropdown,\r\n  FocusZone,\r\n  FocusZoneDirection,\r\n  IDropdownOption,\r\n  IProcessedStyleSet,\r\n  Icon,\r\n  IconButton,\r\n  Label,\r\n  TextField,\r\n  classNamesFunction,\r\n  css,\r\n  elementContains,\r\n  focusFirstChild,\r\n  getDocument,\r\n  getId,\r\n  getWindow,\r\n  on,\r\n} from '@fluentui/react';\r\nimport * as React from 'react';\r\nimport { FilterCondition } from '../../@data/store/schema/enums/FilterCondition';\r\nimport appMessages from '../../App.messages';\r\nimport { IFilterItem } from '../../layout/GridPageV2';\r\nimport { isButtonPressKey } from '../../utils/AccessibilityUtils';\r\nimport { getScreenReaderTextStyles } from '../../utils/GlobalStyleUtils';\r\nimport { DayPickerStrings } from '../DateTimePicker/DateTimePicker.types';\r\nimport { FormItem } from '../Form';\r\nimport messages from './GridFilter.messages';\r\nimport { getStyles } from './GridFilter.styles';\r\nimport { FilterType, IFilterDetails, IGridFilterProps, IGridFilterStyleProps, IGridFilterStyles } from './GridFilter.types';\r\n\r\nexport interface IGridFilterState {\r\n  isFilterBarFocused: boolean;\r\n  isFilterBeingModified: boolean;\r\n  filterMenuCalloutOpen: boolean;\r\n  filterSelectionCalloutOpen: boolean;\r\n  filterSummaryCalloutOpen: boolean;\r\n  appliedFilterList: IFilterDetails[];\r\n  filterSelectionCalloutTarget?: string;\r\n  filterSelectionColumn?: IFilterDetails;\r\n  textBoxErrorMessage?: string;\r\n}\r\n\r\nconst getClassNames = classNamesFunction<IGridFilterStyleProps, IGridFilterStyles>();\r\n\r\nexport class GridFilterBase extends BaseComponent<IGridFilterProps, IGridFilterState> {\r\n  private _classNames: IProcessedStyleSet<IGridFilterStyles> = getClassNames(getStyles, { theme: this.props.theme! });\r\n  private _gridFilter = React.createRef<HTMLDivElement>();\r\n  private _tempDisposables: (() => void)[] = [];\r\n  private _filterListContainer = React.createRef<HTMLDivElement>();\r\n\r\n  constructor(props: IGridFilterProps) {\r\n    super(props);\r\n\r\n    this.state = {\r\n      isFilterBarFocused: false,\r\n      isFilterBeingModified: false,\r\n      filterMenuCalloutOpen: false,\r\n      filterSelectionCalloutOpen: false,\r\n      filterSummaryCalloutOpen: false,\r\n      appliedFilterList: this.props.initialFilterListValues || [],\r\n      // showClearAll: this.props.showClearAll,\r\n    };\r\n  }\r\n\r\n  public componentDidMount() {\r\n    this._addListeners();\r\n  }\r\n\r\n  public componentDidUpdate(prevProps: IGridFilterProps) {\r\n    if (prevProps === this.props) {\r\n      return;\r\n    }\r\n\r\n    if (this.props.hideCallout) {\r\n      this.setState({ appliedFilterList: this.props.initialFilterListValues ?? [] });\r\n    } else if (this.state.appliedFilterList.length === 0) {\r\n      this.setState({ appliedFilterList: this.props.initialFilterListValues ?? [] });\r\n    } else {\r\n      this.setState({ appliedFilterList: this.state.appliedFilterList });\r\n    }\r\n\r\n    this.setState({\r\n      filterMenuCalloutOpen: this.props.filterMenuCalloutOpen !== undefined ? this.props.filterMenuCalloutOpen : false,\r\n    });\r\n  }\r\n\r\n  public componentWillUnmount() {\r\n    this._async.dispose();\r\n    this._tempDisposables.forEach((dispose: () => void) => dispose());\r\n  }\r\n\r\n  public resetGridFilter() {\r\n    this.setState({\r\n      isFilterBarFocused: false,\r\n      isFilterBeingModified: false,\r\n      filterMenuCalloutOpen: false,\r\n      filterSelectionCalloutOpen: false,\r\n      filterSummaryCalloutOpen: false,\r\n      appliedFilterList: [],\r\n    });\r\n  }\r\n\r\n  public render(): JSX.Element {\r\n    const {\r\n      appliedFilterList,\r\n      isFilterBarFocused,\r\n      filterSelectionCalloutOpen,\r\n      filterSelectionColumn,\r\n      filterSummaryCalloutOpen,\r\n    } = this.state;\r\n\r\n    return (\r\n      <div ref={this._gridFilter} className={this._classNames.root}>\r\n        {this.state.filterMenuCalloutOpen && this._renderFilterMenuCallout()}\r\n        {filterSelectionCalloutOpen && filterSelectionColumn && !this.props.hideCallout && this._renderFilterSelectionCallout()}\r\n        {filterSummaryCalloutOpen && this._renderFilterSummaryCallout()}\r\n        {appliedFilterList.length > 0\r\n          ? isFilterBarFocused\r\n            ? this._renderAppliedFiltersFocusedList()\r\n            : this._renderAppliedFiltersUnfocusedList()\r\n          : null}\r\n        <span id=\"filterListAriaDescription\" style={getScreenReaderTextStyles()}>\r\n          {this.props.intl.formatMessage(messages.filterListAriaDescription)}\r\n        </span>\r\n      </div>\r\n    );\r\n  }\r\n\r\n  private _renderAppliedFiltersFocusedList = (): JSX.Element => {\r\n    const { appliedFilterList, isFilterBeingModified, filterSelectionColumn } = this.state;\r\n\r\n    return (\r\n      <div ref={this._filterListContainer} id={'appliedFilterFocusedList'} className={this._classNames.filterBarFocused}>\r\n        <FocusZone\r\n          className={this._classNames.filterListPageStyle}\r\n          direction={FocusZoneDirection.horizontal}\r\n          isCircularNavigation={true}\r\n          aria-label={this.props.intl.formatMessage(messages.appliedFilterListAriaLabel)}\r\n          aria-describedby=\"filterListAriaDescription\"\r\n          role=\"list\"\r\n        >\r\n          {appliedFilterList.map((fil: IFilterDetails, index: number) => {\r\n            const applyModifyFilterStyles: boolean =\r\n              filterSelectionColumn && isFilterBeingModified && fil.filterId === filterSelectionColumn.filterId ? true : false;\r\n\r\n            return (\r\n              <div\r\n                className={applyModifyFilterStyles ? this._classNames.highlightedFilterInfoContainer : this._classNames.filterInfoContainer}\r\n                id={fil.filterId}\r\n                key={'filterFocusedList-' + index}\r\n                data-list-index={index}\r\n                role=\"listitem\"\r\n              >\r\n                <div\r\n                  className={css(\r\n                    this._classNames.filterInfoFocused,\r\n                    applyModifyFilterStyles ? this._classNames.highlightedFilterInfoSelectors : this._classNames.filterInfoSelectors\r\n                  )}\r\n                  onClick={this._onFilterInfoFocusedClicked}\r\n                  onKeyDown={(ev) => isButtonPressKey(ev.key) && this._onFilterInfoFocusedClicked(ev)}\r\n                  role=\"button\"\r\n                  tabIndex={0}\r\n                  data-is-focusable={true}\r\n                >\r\n                  {fil.filterType === FilterType.custom\r\n                    ? `${fil.filterName}: ${fil.filterCondition}`\r\n                    : fil.filterType === FilterType.date\r\n                    ? `${fil.filterName}${fil.startDate ? ' from ' + fil.startDate.toLocaleDateString() : ''}${\r\n                        fil.endDate ? ' to ' + fil.endDate.toLocaleDateString() : ''\r\n                      }`\r\n                    : `${fil.filterName} ${fil.filterCondition} ${fil.filterText}`}\r\n                  {fil.includeNulls ? ` ${fil.showNullsCheckboxLabel}` : ''}\r\n                </div>\r\n                <div\r\n                  className={css(\r\n                    this._classNames.filterCloseIcon,\r\n                    applyModifyFilterStyles ? this._classNames.highlightedFilterInfoSelectors : this._classNames.filterInfoSelectors\r\n                  )}\r\n                  onClick={(ev) => {\r\n                    this._onFilterRemoveButtonClicked(ev);\r\n                    if (this.props.hideCallout) {\r\n                      if (fil.filterName && fil.filterCondition && fil.filterText) {\r\n                        const filterCondition = Object.values(FilterCondition).find((v) => v === fil.filterCondition);\r\n                        if (filterCondition && this.props.onDeleteTextCondition) {\r\n                          this.props.onDeleteTextCondition(fil.filterName, filterCondition, fil.filterText);\r\n                        }\r\n                      } else if (fil.filterName && fil.filterText && this.props.onListValueChanged) {\r\n                        this.props.onListValueChanged(fil.filterName, fil.filterText);\r\n                      }\r\n                    }\r\n                  }}\r\n                  onKeyDown={(ev) => isButtonPressKey(ev.key) && this._onFilterRemoveButtonClicked(ev)}\r\n                  role=\"button\"\r\n                  tabIndex={0}\r\n                  aria-label={this.props.intl.formatMessage(messages.removeFilterIconAriaLabel)}\r\n                  data-is-focusable={true}\r\n                >\r\n                  <Icon iconName=\"Cancel\" />\r\n                </div>\r\n              </div>\r\n            );\r\n          })}\r\n        </FocusZone>\r\n        {this.props.showClearAll && appliedFilterList.length > 0 ? (\r\n          <ActionButton\r\n            className={this._classNames.clearAllButton}\r\n            id={'clearAllButton'}\r\n            onClick={(_) => {\r\n              if (this.props.onClearAll) {\r\n                this.props.onClearAll();\r\n              }\r\n            }}\r\n          >\r\n            {'Clear all'}\r\n          </ActionButton>\r\n        ) : null}\r\n      </div>\r\n    );\r\n  };\r\n\r\n  private _renderAppliedFiltersUnfocusedList = (): JSX.Element => {\r\n    const { appliedFilterList } = this.state;\r\n\r\n    return (\r\n      <div id={'appliedFilterUnfocusedList'} className={this._classNames.filterBarUnFocused}>\r\n        <Icon className={this._classNames.filterIcon} iconName=\"Filter\" />\r\n        <FocusZone\r\n          className={this._classNames.filterListPageStyle}\r\n          direction={FocusZoneDirection.horizontal}\r\n          isCircularNavigation={true}\r\n          aria-label={this.props.intl.formatMessage(messages.appliedFilterListAriaLabel)}\r\n          aria-describedby=\"filterListAriaDescription\"\r\n        >\r\n          {appliedFilterList.map((fil: IFilterDetails, index: number) => (\r\n            <div\r\n              className={this._classNames.filterInfoUnfocused}\r\n              key={'appliedFilterUnfocusedList' + index}\r\n              onClick={this._onFilterInfoUnfocusedClicked}\r\n              onKeyDown={(ev) => isButtonPressKey(ev.key) && this._onFilterInfoUnfocusedClicked(ev)}\r\n              role=\"button\"\r\n              tabIndex={0}\r\n              data-list-index={index}\r\n              data-is-focusable={true}\r\n            >\r\n              {fil.filterType === FilterType.custom\r\n                ? `${fil.filterName}: ${fil.filterCondition}`\r\n                : fil.filterType === FilterType.date\r\n                ? `${fil.filterName}${fil.startDate ? ' from ' + fil.startDate.toLocaleDateString() : ''}${\r\n                    fil.endDate ? ' to ' + fil.endDate.toLocaleDateString() : ''\r\n                  }`\r\n                : `${fil.filterName} ${fil.filterCondition} ${fil.filterText}`}\r\n              {fil.includeNulls ? ` ${fil.showNullsCheckboxLabel}` : ''}\r\n              {index !== appliedFilterList.length - 1 ? ';' : ''}\r\n            </div>\r\n          ))}\r\n        </FocusZone>\r\n        {/* {appliedFilterList.length >= 4 ? (\r\n          <ActionButton\r\n            className={this._classNames.viewAllButton}\r\n            id={'viewAllButton'}\r\n            onClick={(_) => this.setState({ filterSummaryCalloutOpen: true })}\r\n          >\r\n            {'View all'}\r\n          </ActionButton>\r\n        ) : null} */}\r\n      </div>\r\n    );\r\n  };\r\n\r\n  private _renderFilterMenuCallout = (): JSX.Element => {\r\n    return (\r\n      <Callout\r\n        id=\"filterMenuDialog\"\r\n        target={'#addFilterButton'}\r\n        isBeakVisible={false}\r\n        calloutWidth={180}\r\n        directionalHint={DirectionalHint.bottomLeftEdge}\r\n        onDismiss={() => {\r\n          this.setState({ filterMenuCalloutOpen: false });\r\n          this.props.onFilterMenuCalloutClose();\r\n        }}\r\n        setInitialFocus={true}\r\n        role=\"dialog\"\r\n        shouldRestoreFocus={true}\r\n        onKeyDown={(ev: React.KeyboardEvent<HTMLDivElement>) => {\r\n          if (ev.key === 'Tab' || (ev.shiftKey && ev.key === 'Tab')) {\r\n            this.setState({ filterMenuCalloutOpen: false });\r\n            this.props.onFilterMenuCalloutClose();\r\n          }\r\n        }}\r\n      >\r\n        <FocusZone\r\n          role=\"listbox\"\r\n          direction={FocusZoneDirection.vertical}\r\n          isCircularNavigation={true}\r\n          aria-label={this.props.intl.formatMessage(messages.filterMenuAriaLabel)}\r\n        >\r\n          {this.props.filterItems.map((col: IFilterItem, index: number) => (\r\n            <div\r\n              className={this._classNames.filterMenuListItem}\r\n              id={`gridFilterMenuItem-${index}`}\r\n              key={`gridFilterMenuItem-${index}`}\r\n              onClick={this._onFilterMenuItemClicked}\r\n              onKeyDown={(ev) => isButtonPressKey(ev.key) && this._onFilterMenuItemClicked(ev)}\r\n              role=\"option\"\r\n              aria-selected={false}\r\n              tabIndex={0}\r\n              data-list-index={index}\r\n              data-is-focusable={true}\r\n            >\r\n              {col.filterName}\r\n            </div>\r\n          ))}\r\n        </FocusZone>\r\n      </Callout>\r\n    );\r\n  };\r\n\r\n  private _renderFilterSelectionCallout = (): JSX.Element => {\r\n    const { formatMessage } = this.props.intl;\r\n    const {\r\n      filterSelectionColumn,\r\n      filterSelectionCalloutTarget,\r\n      textBoxErrorMessage,\r\n      isFilterBeingModified,\r\n      appliedFilterList,\r\n    } = this.state;\r\n\r\n    const relationalFilterOptions: IDropdownOption[] = [\r\n      { key: FilterCondition.Equals, text: formatMessage(messages.equals) },\r\n      { key: FilterCondition.DoesNotEqual, text: formatMessage(messages.doesNotEqual) },\r\n      { key: FilterCondition.GreaterThan, text: formatMessage(messages.greaterThan) },\r\n      { key: FilterCondition.GreaterThanEqual, text: formatMessage(messages.greaterThanEqual) },\r\n      { key: FilterCondition.LessThan, text: formatMessage(messages.lessThan) },\r\n      { key: FilterCondition.LessThanEqual, text: formatMessage(messages.lessThanEqual) },\r\n    ];\r\n\r\n    const stringFilterTypeOptions: IDropdownOption[] = [\r\n      { key: FilterCondition.Contains, text: formatMessage(messages.contains) },\r\n      { key: FilterCondition.DoesNotContain, text: formatMessage(messages.doesNotContain) },\r\n      { key: FilterCondition.BeginsWith, text: formatMessage(messages.beginsWith) },\r\n      { key: FilterCondition.EndsWith, text: formatMessage(messages.endsWith) },\r\n      { key: FilterCondition.Equals, text: formatMessage(messages.equals) },\r\n      { key: FilterCondition.DoesNotEqual, text: formatMessage(messages.doesNotEqual) },\r\n    ];\r\n\r\n    let filterOptions: IDropdownOption[] = [];\r\n\r\n    if (filterSelectionColumn) {\r\n      switch (filterSelectionColumn.filterType) {\r\n        case FilterType.relational:\r\n          filterOptions = relationalFilterOptions;\r\n          break;\r\n        case FilterType.string:\r\n          filterOptions = stringFilterTypeOptions;\r\n          break;\r\n        case FilterType.custom:\r\n          filterOptions = filterSelectionColumn.filterOptions || [];\r\n          break;\r\n        default:\r\n          filterOptions = [];\r\n      }\r\n\r\n      if (!filterSelectionColumn.filterCondition) {\r\n        filterSelectionColumn.filterCondition = filterOptions.length > 0 ? filterOptions[0].key.toString() : undefined;\r\n      }\r\n    }\r\n\r\n    const applyButtonDisabled: boolean =\r\n      filterSelectionColumn !== undefined &&\r\n      filterSelectionColumn.filterType !== FilterType.custom &&\r\n      !filterSelectionColumn.filterText &&\r\n      !filterSelectionColumn.startDate &&\r\n      !filterSelectionColumn.endDate &&\r\n      !filterSelectionColumn.includeNulls;\r\n\r\n    return (\r\n      <>\r\n        <Callout\r\n          target={filterSelectionCalloutTarget && isFilterBeingModified ? filterSelectionCalloutTarget : '#addFilterButton'}\r\n          isBeakVisible={false}\r\n          calloutWidth={212}\r\n          directionalHint={DirectionalHint.bottomLeftEdge}\r\n          setInitialFocus={true}\r\n          role=\"dialog\"\r\n          ariaLabelledBy=\"filterSelDialogLabel\"\r\n          shouldRestoreFocus={true}\r\n          onDismiss={(ev) => {\r\n            if (!ev) {\r\n              return;\r\n            }\r\n            // if target clicks on another filterInfo then no action required.\r\n            const target = ev.target as HTMLElement;\r\n            const isTargetOutsideGridFilter = this._gridFilter.current && !elementContains(this._gridFilter.current, target);\r\n            const isTargetInsideFilterContainer = this._filterListContainer.current && this._filterListContainer.current === target;\r\n            if (isTargetOutsideGridFilter || isTargetInsideFilterContainer || ('key' in ev && ev.key === 'Escape')) {\r\n              this.setState({\r\n                appliedFilterList: [...appliedFilterList],\r\n                filterSelectionCalloutOpen: false,\r\n                isFilterBeingModified: false,\r\n              });\r\n            }\r\n          }}\r\n        >\r\n          {filterSelectionColumn ? (\r\n            <div className={this._classNames.filterSelectionCallout}>\r\n              <Label id=\"filterSelDialogLabel\" className={this._classNames.filterSelectionCalloutTitle}>\r\n                {filterSelectionColumn.filterName}\r\n              </Label>\r\n\r\n              {filterSelectionColumn.filterType !== FilterType.date ? (\r\n                <>\r\n                  <FormItem formWidth={180}>\r\n                    <Dropdown\r\n                      options={filterOptions}\r\n                      defaultSelectedKey={filterSelectionColumn.filterCondition}\r\n                      onChange={(_, option) => {\r\n                        if (option) {\r\n                          filterSelectionColumn.filterCondition = option.key.toString();\r\n                          this.setState({ filterSelectionColumn: { ...filterSelectionColumn } });\r\n                        }\r\n                      }}\r\n                      ariaLabel={\r\n                        filterSelectionColumn.filterType === FilterType.custom\r\n                          ? formatMessage(messages.filterTextBoxAriaLabel)\r\n                          : formatMessage(messages.filterOptionDropdownAriaLabel)\r\n                      }\r\n                    />\r\n                  </FormItem>\r\n\r\n                  {filterSelectionColumn.filterType !== FilterType.custom ? (\r\n                    <FormItem formWidth={180}>\r\n                      <TextField\r\n                        errorMessage={textBoxErrorMessage}\r\n                        value={filterSelectionColumn.filterText}\r\n                        placeholder={formatMessage(messages.filterTextBoxAriaLabel)}\r\n                        onChange={(_, filter) => {\r\n                          if (filterSelectionColumn) {\r\n                            filterSelectionColumn.filterText = filter;\r\n\r\n                            let errorMessage: string | undefined = undefined;\r\n                            if (filter && filterSelectionColumn.filterType === FilterType.relational && isNaN(Number(filter))) {\r\n                              errorMessage = formatMessage(messages.filterSelectionTextBoxErrorMessage);\r\n                            }\r\n                            this.setState({ filterSelectionColumn: { ...filterSelectionColumn }, textBoxErrorMessage: errorMessage });\r\n                          }\r\n                        }}\r\n                      />\r\n                    </FormItem>\r\n                  ) : null}\r\n                </>\r\n              ) : (\r\n                <>\r\n                  <FormItem formWidth={180}>\r\n                    <DatePicker\r\n                      strings={DayPickerStrings}\r\n                      allowTextInput={true}\r\n                      placeholder={formatMessage(messages.startDatePlaceholder)}\r\n                      value={filterSelectionColumn.startDate}\r\n                      maxDate={filterSelectionColumn.endDate || new Date(Date.now())}\r\n                      onSelectDate={(value) => {\r\n                        filterSelectionColumn.startDate = value!;\r\n                        this.setState({ filterSelectionColumn: filterSelectionColumn });\r\n                      }}\r\n                      disabled={filterSelectionColumn.includeNulls === true}\r\n                    />\r\n                  </FormItem>\r\n                  <FormItem formWidth={180}>\r\n                    <DatePicker\r\n                      strings={DayPickerStrings}\r\n                      allowTextInput={true}\r\n                      placeholder={formatMessage(messages.endDatePlaceholder)}\r\n                      maxDate={new Date(Date.now())}\r\n                      minDate={filterSelectionColumn.startDate}\r\n                      value={filterSelectionColumn.endDate}\r\n                      onSelectDate={(value) => {\r\n                        filterSelectionColumn.endDate = value!;\r\n                        this.setState({ filterSelectionColumn: filterSelectionColumn });\r\n                      }}\r\n                      disabled={filterSelectionColumn.includeNulls === true}\r\n                    />\r\n                  </FormItem>\r\n                </>\r\n              )}\r\n\r\n              {filterSelectionColumn.showNullsCheckboxLabel ? (\r\n                <FormItem formWidth={180}>\r\n                  <Checkbox\r\n                    label={filterSelectionColumn.showNullsCheckboxLabel}\r\n                    checked={filterSelectionColumn.includeNulls === undefined ? false : filterSelectionColumn.includeNulls}\r\n                    onChange={(_, checked) => {\r\n                      filterSelectionColumn.includeNulls = checked;\r\n                      this.setState({ filterSelectionColumn: filterSelectionColumn });\r\n                    }}\r\n                    disabled={!!(filterSelectionColumn.startDate || filterSelectionColumn.endDate)}\r\n                  />\r\n                </FormItem>\r\n              ) : null}\r\n\r\n              <div className={this._classNames.filterSelectionToolBar}>\r\n                <DefaultButton\r\n                  className={!applyButtonDisabled ? this._classNames.filterSelectionApplyButton : this._classNames.disabledApplyButton}\r\n                  text={formatMessage(messages.applyFilterButtonLabel)}\r\n                  disabled={applyButtonDisabled}\r\n                  ariaHidden={applyButtonDisabled}\r\n                  ariaDescription={formatMessage(messages.applyFilterAriaDesc)}\r\n                  onClick={(ev: React.MouseEvent<HTMLDivElement>) => {\r\n                    return isFilterBeingModified\r\n                      ? this._onFilterModified(ev, filterSelectionCalloutTarget)\r\n                      : this._onFilterApplyButtonClicked(ev);\r\n                  }}\r\n                />\r\n                <DefaultButton\r\n                  className={this._classNames.filterSelectionCancelButton}\r\n                  text={formatMessage(appMessages.cancel)}\r\n                  onClick={() => {\r\n                    this.setState({\r\n                      filterSelectionCalloutOpen: false,\r\n                      isFilterBeingModified: false,\r\n                      appliedFilterList: [...appliedFilterList],\r\n                    });\r\n                    // here in the condition when the filter is clicked from a link which is not focussed,\r\n                    // we need to get the focused list element from the DOM and return the focus on it\r\n                    const target = getDocument()!.querySelector(this.state.filterSelectionCalloutTarget!) as HTMLElement;\r\n                    focusFirstChild(target);\r\n                  }}\r\n                  onKeyDown={(ev) => {\r\n                    // applied on the cancel button as it's last active item on the callout\r\n                    if (ev.key === 'Tab' && !ev.shiftKey) {\r\n                      this.setState({\r\n                        filterSelectionCalloutOpen: false,\r\n                        isFilterBeingModified: false,\r\n                        appliedFilterList: [...appliedFilterList],\r\n                      });\r\n                    }\r\n                  }}\r\n                />\r\n              </div>\r\n            </div>\r\n          ) : null}\r\n        </Callout>\r\n      </>\r\n    );\r\n  };\r\n\r\n  private _renderFilterSummaryCallout = (): JSX.Element => {\r\n    const { appliedFilterList } = this.state;\r\n\r\n    return (\r\n      <Callout\r\n        className={this._classNames.filterSummaryCallout}\r\n        target={'#viewAllButton'}\r\n        ariaLabelledBy=\"viewAllDailogLabel\"\r\n        role=\"dialog\"\r\n        directionalHint={DirectionalHint.rightCenter}\r\n        setInitialFocus={true}\r\n        shouldRestoreFocus={true}\r\n        onDismiss={() => this.setState({ filterSummaryCalloutOpen: false })}\r\n      >\r\n        <div className={this._classNames.filterSummaryCalloutHeader}>\r\n          <Label id=\"viewAllDailogLabel\" className={this._classNames.filterSummaryCalloutTitle}>\r\n            {this.props.intl.formatMessage(messages.filtersTitle)}\r\n          </Label>\r\n          <IconButton\r\n            className={this._classNames.calloutCloseIcon}\r\n            iconProps={{ iconName: 'Cancel' }}\r\n            onClick={(_) => this.setState({ filterSummaryCalloutOpen: false })}\r\n            tabIndex={0}\r\n            onKeyDown={(ev: React.KeyboardEvent<HTMLDivElement>) => {\r\n              // To make sure shift + Tab focuses on the previous element in the tab order,\r\n              // which will be taken care if callout is dismissed\r\n              if ((ev.shiftKey && ev.key === 'Tab') || ev.key === 'Enter ' || ev.key === ' ') {\r\n                this.setState({ filterSummaryCalloutOpen: false });\r\n              }\r\n            }}\r\n          />\r\n        </div>\r\n\r\n        <FocusZone\r\n          role=\"list\"\r\n          direction={FocusZoneDirection.vertical}\r\n          isCircularNavigation={true}\r\n          aria-describedby=\"filterListAriaDescription\"\r\n        >\r\n          {appliedFilterList.map((fil: IFilterDetails, index: number) => (\r\n            <div\r\n              className={this._classNames.filterInfoSummaryItem}\r\n              id={`gridFilterSummary-${index}`}\r\n              key={`gridFilterSummary-${index}`}\r\n              onClick={(ev) => {\r\n                this.setState({ filterSummaryCalloutOpen: false });\r\n                this._onFilterInfoUnfocusedClicked(ev);\r\n              }}\r\n              onKeyDown={(ev: React.KeyboardEvent<HTMLDivElement>) => {\r\n                // Dismiss the callout if tab key is pressed, so that focus is moved to next element in the tab order\r\n                if (ev.key === 'Tab' && !ev.shiftKey) {\r\n                  this.setState({ filterSummaryCalloutOpen: false });\r\n                }\r\n                if (isButtonPressKey(ev.key)) {\r\n                  this.setState({ filterSummaryCalloutOpen: false });\r\n                  this._onFilterInfoUnfocusedClicked(ev);\r\n                }\r\n              }}\r\n              role=\"button\"\r\n              tabIndex={0}\r\n              data-is-focusable={true}\r\n              data-list-index={index}\r\n            >\r\n              {fil.filterType === FilterType.custom\r\n                ? `${fil.filterName}: ${fil.filterCondition}`\r\n                : fil.filterType === FilterType.date\r\n                ? `${fil.filterName}${fil.startDate ? ' from ' + fil.startDate.toLocaleDateString() : ''}${\r\n                    fil.endDate ? ' to ' + fil.endDate.toLocaleDateString() : ''\r\n                  }`\r\n                : `${fil.filterName} ${fil.filterCondition} ${fil.filterText}`}\r\n              {fil.includeNulls ? ` ${fil.showNullsCheckboxLabel}` : ''}\r\n            </div>\r\n          ))}\r\n        </FocusZone>\r\n      </Callout>\r\n    );\r\n  };\r\n\r\n  private _onFilterMenuItemClicked = (ev: React.MouseEvent<HTMLDivElement, MouseEvent> | React.KeyboardEvent<HTMLDivElement>): void => {\r\n    const index = this._getIndexOfElement(ev);\r\n\r\n    if (index !== undefined) {\r\n      const { filterItems } = this.props;\r\n      const filterItem = filterItems[index];\r\n\r\n      if (filterItem) {\r\n        const filterSelectionColumn: IFilterDetails = {\r\n          filterId: this._getFilterContainerId(filterItem),\r\n          filterType: filterItem.filterType || FilterType.string,\r\n          filterOptions: filterItem.filterOptions,\r\n          columnName: filterItem.columnName,\r\n          filterName: filterItem.filterName,\r\n          customFunction: filterItem.customFunction,\r\n          includeNulls: filterItem.includeNullsInFilterResults,\r\n          showNullsCheckboxLabel: filterItem.showNullsCheckboxLabel,\r\n        };\r\n\r\n        this.setState({\r\n          filterMenuCalloutOpen: false,\r\n          filterSelectionCalloutOpen: true,\r\n          filterSelectionColumn: filterSelectionColumn,\r\n        });\r\n      }\r\n      this.props.onFilterMenuCalloutClose();\r\n    }\r\n  };\r\n\r\n  private _onFilterApplyButtonClicked = (ev: React.MouseEvent<HTMLDivElement> | React.KeyboardEvent<HTMLDivElement>): void => {\r\n    const { appliedFilterList, filterSelectionColumn } = this.state;\r\n    const isFilterUnique = this._isFilterUnique(filterSelectionColumn);\r\n\r\n    if (filterSelectionColumn && isFilterUnique) {\r\n      appliedFilterList.push(filterSelectionColumn);\r\n\r\n      this.setState({\r\n        appliedFilterList: [...appliedFilterList],\r\n        filterSelectionCalloutOpen: false,\r\n        isFilterBarFocused: true,\r\n        isFilterBeingModified: false,\r\n      });\r\n\r\n      this.props.onFilterApplied(appliedFilterList);\r\n      return;\r\n    }\r\n\r\n    // if filter is not unique then open the existing filter\r\n    // updating appliedFilterList so that list is re-rendered\r\n    if (filterSelectionColumn && !isFilterUnique) {\r\n      this.setState({\r\n        appliedFilterList: [...appliedFilterList],\r\n        isFilterBarFocused: true,\r\n        isFilterBeingModified: true,\r\n        filterSelectionCalloutOpen: true,\r\n        filterSelectionCalloutTarget: `#${filterSelectionColumn.filterId}`,\r\n      });\r\n    }\r\n  };\r\n\r\n  private _isFilterUnique = (fil: IFilterDetails | undefined): boolean => {\r\n    const { appliedFilterList } = this.state;\r\n\r\n    if (!fil) {\r\n      return false;\r\n    }\r\n\r\n    switch (fil.filterType) {\r\n      case FilterType.string:\r\n      case FilterType.relational: {\r\n        return appliedFilterList.filter(\r\n          (f) => f.columnName === fil.columnName && f.filterCondition === fil.filterCondition && f.filterText === fil.filterText\r\n        ).length > 0\r\n          ? false\r\n          : true;\r\n      }\r\n\r\n      case FilterType.custom:\r\n        return appliedFilterList.filter((f) => f.columnName === fil.columnName && f.filterCondition === fil.filterCondition).length > 0\r\n          ? false\r\n          : true;\r\n\r\n      case FilterType.date:\r\n        return appliedFilterList.filter(\r\n          (f) => f.columnName === fil.columnName && f.startDate === fil.startDate && f.endDate === fil.endDate\r\n        ).length > 0\r\n          ? false\r\n          : true;\r\n      default:\r\n        return true;\r\n    }\r\n  };\r\n\r\n  private _onFilterModified = (ev: React.MouseEvent<HTMLDivElement>, filterId: string | undefined): void => {\r\n    const { appliedFilterList, filterSelectionColumn } = this.state;\r\n\r\n    if (filterSelectionColumn && filterId !== undefined) {\r\n      filterId = filterId?.slice(1); // to remove # placed at index 0\r\n\r\n      const modifyFilter = appliedFilterList.filter((f) => f.filterId === filterId)?.[0];\r\n      if (modifyFilter) {\r\n        modifyFilter.filterCondition = filterSelectionColumn.filterCondition;\r\n        modifyFilter.filterText = filterSelectionColumn.filterText;\r\n        modifyFilter.startDate = filterSelectionColumn.startDate;\r\n        modifyFilter.endDate = filterSelectionColumn.endDate;\r\n      }\r\n\r\n      this.setState({\r\n        isFilterBeingModified: false,\r\n        filterSelectionCalloutOpen: false,\r\n        isFilterBarFocused: true,\r\n        appliedFilterList: [...appliedFilterList],\r\n      });\r\n      this.props.onFilterApplied(appliedFilterList);\r\n    }\r\n  };\r\n\r\n  private _onFilterRemoveButtonClicked = (ev: React.MouseEvent<HTMLDivElement, MouseEvent> | React.KeyboardEvent<HTMLDivElement>): void => {\r\n    const { appliedFilterList } = this.state;\r\n    const index = this._getIndexOfParentElement(ev);\r\n\r\n    if (index !== undefined) {\r\n      appliedFilterList.splice(index, 1);\r\n\r\n      // in cases when user removes the filter when filterSelectionCallout is open for filter edit, dismiss the callout\r\n      this.setState({ appliedFilterList: [...appliedFilterList], filterSelectionCalloutOpen: false, isFilterBeingModified: false });\r\n      this.props.onFilterApplied(appliedFilterList);\r\n    }\r\n  };\r\n\r\n  private _onFilterInfoFocusedClicked = (ev: React.MouseEvent<HTMLDivElement, MouseEvent> | React.KeyboardEvent<HTMLDivElement>): void => {\r\n    const { appliedFilterList } = this.state;\r\n    const index = this._getIndexOfParentElement(ev);\r\n\r\n    if (index !== undefined) {\r\n      const filterCol = appliedFilterList[index];\r\n\r\n      // updating appliedFilterList so that List is re-rendered after applying updated state properties\r\n      this.setState({\r\n        appliedFilterList: [...appliedFilterList],\r\n        isFilterBarFocused: true,\r\n        isFilterBeingModified: true,\r\n        filterSelectionCalloutOpen: true,\r\n        filterSelectionColumn: filterCol,\r\n        filterSelectionCalloutTarget: `#${filterCol.filterId}`,\r\n      });\r\n    }\r\n  };\r\n\r\n  private _onFilterInfoUnfocusedClicked = (\r\n    ev: React.MouseEvent<HTMLDivElement, MouseEvent> | React.KeyboardEvent<HTMLDivElement>\r\n  ): void => {\r\n    const { appliedFilterList } = this.state;\r\n    const index = this._getIndexOfElement(ev);\r\n\r\n    if (index !== undefined) {\r\n      const filterCol = appliedFilterList[index];\r\n\r\n      this.setState({\r\n        isFilterBarFocused: true,\r\n        isFilterBeingModified: true,\r\n        filterSelectionCalloutOpen: true,\r\n        filterSelectionColumn: filterCol,\r\n        filterSelectionCalloutTarget: `#${filterCol.filterId}`,\r\n      });\r\n    }\r\n  };\r\n\r\n  private _getIndexOfElement = (\r\n    ev: React.MouseEvent<HTMLDivElement, MouseEvent> | React.KeyboardEvent<HTMLDivElement>\r\n  ): number | undefined => {\r\n    const el = ev.currentTarget as HTMLDivElement;\r\n\r\n    if (el.getAttribute('data-list-index')) {\r\n      const index = Number(el.getAttribute('data-list-index'));\r\n      return index;\r\n    }\r\n    return undefined;\r\n  };\r\n\r\n  private _getIndexOfParentElement = (ev: React.MouseEvent<HTMLDivElement> | React.KeyboardEvent<HTMLDivElement>): number | undefined => {\r\n    const el = ev.currentTarget.parentElement as HTMLDivElement;\r\n\r\n    if (el.getAttribute('data-list-index')) {\r\n      const index = Number(el.getAttribute('data-list-index'));\r\n      return index;\r\n    }\r\n    return undefined;\r\n  };\r\n\r\n  private _addListeners() {\r\n    const window = getWindow()!;\r\n\r\n    this._async.setTimeout(\r\n      () =>\r\n        this._tempDisposables.push(\r\n          on(window.document.documentElement, 'focus', this._dismissOnLostFocus, true),\r\n          on(window.document.documentElement, 'click', this._dismissOnLostFocus, true)\r\n        ),\r\n      0\r\n    );\r\n  }\r\n\r\n  private _dismissOnLostFocus = (ev: Event) => {\r\n    const target = ev.target as HTMLElement;\r\n    const isEventTargetOutsideGridFilter = this._gridFilter.current && !elementContains(this._gridFilter.current, target);\r\n\r\n    const currentDoc: Document = getDocument()!;\r\n    const addFiltertarget = currentDoc ? (currentDoc.querySelector('#addFilterButton') as HTMLElement) : null;\r\n    const isTargetAddFilterButton =\r\n      (addFiltertarget && target === addFiltertarget) || elementContains(addFiltertarget, target, true) ? true : false;\r\n\r\n    if (isEventTargetOutsideGridFilter && !isTargetAddFilterButton) {\r\n      this.setState({ isFilterBarFocused: false });\r\n    }\r\n  };\r\n\r\n  private _getFilterContainerId = (fil?: IFilterItem): string => {\r\n    let filterContainerId = fil ? fil.columnName : '';\r\n    filterContainerId = getId(filterContainerId);\r\n    return filterContainerId;\r\n  };\r\n}\r\n","import { styled } from '@fluentui/react';\r\nimport { GridFilterBase } from './GridFilter.base';\r\nimport { getStyles } from './GridFilter.styles';\r\nimport { IGridFilterProps, IGridFilterStyleProps, IGridFilterStyles } from './GridFilter.types';\r\n\r\nexport const GridFilter = styled<IGridFilterProps, IGridFilterStyleProps, IGridFilterStyles>(GridFilterBase, getStyles, undefined, {\r\n  scope: 'GridFilter',\r\n});\r\n","import { FontWeights } from '@fluentui/react';\r\nimport { IPubcenterTheme } from '../../../theme';\r\nimport { flexWithAlignCenter } from '../../utils/GlobalStyleUtils';\r\nimport { ILogoStyleProps, ILogoStyles } from './Logo.types';\r\n\r\nexport const getStyles = (props: ILogoStyleProps): ILogoStyles => {\r\n  const { spacing, fonts, palette } = (props.theme as unknown) as IPubcenterTheme;\r\n  const { shouldRenderLogo, renderDarkLogo, renderGreyLogo } = props;\r\n\r\n  return {\r\n    logo: {\r\n      ...flexWithAlignCenter,\r\n      selectors: {\r\n        img: {\r\n          ...(renderGreyLogo\r\n            ? { margin: `3px ${spacing.size12} 0 ${spacing.size12}`, width: '113px', objectFit: 'cover' }\r\n            : renderDarkLogo\r\n            ? {\r\n                width: spacing.size128,\r\n              }\r\n            : { marginLeft: spacing.size10 }),\r\n        },\r\n        div: {\r\n          fontSize: fonts.size28.fontSize,\r\n          marginRight: shouldRenderLogo ? spacing.size8 : spacing.size16,\r\n          marginTop: spacing.size4,\r\n          marginBottom: spacing.size8,\r\n        },\r\n        span: {\r\n          ...(renderGreyLogo\r\n            ? { fontSize: fonts.size20.fontSize, color: '#737373' }\r\n            : renderDarkLogo\r\n            ? {\r\n                fontSize: fonts.size18.fontSize,\r\n                color: palette.neutralPrimary,\r\n              }\r\n            : {\r\n                fontSize: fonts.size16.fontSize,\r\n              }),\r\n          fontWeight: FontWeights.semibold,\r\n          marginRight: spacing.s1,\r\n          marginLeft: 0,\r\n        },\r\n      },\r\n    },\r\n    logoNavButton: {\r\n      opacity: shouldRenderLogo ? 0 : 1,\r\n      width: shouldRenderLogo ? 0 : spacing.size48,\r\n    },\r\n    divider: {\r\n      fontWeight: renderDarkLogo ? 100 : undefined,\r\n      ...(renderGreyLogo ? { color: '#737373', fontSize: fonts.size24.fontSize, width: '1px' } : {}),\r\n    },\r\n  };\r\n};\r\n","import { defineMessages } from 'react-intl';\r\n\r\nexport default defineMessages({\r\n  msLogo: {\r\n    id: 'header.logo.msg',\r\n    defaultMessage: 'Microsoft Logo',\r\n  },\r\n});\r\n","import { IProcessedStyleSet, classNamesFunction, getTheme } from '@fluentui/react';\r\nimport * as React from 'react';\r\nimport { InjectedIntlProps, injectIntl } from 'react-intl';\r\nimport { isPublisherRejectionUnappealable } from '../../@data';\r\nimport { APP_NAME_PUBCENTER, APP_NAME_SHORT } from '../../constants';\r\nimport { isLocationPubCenter } from '../../utils';\r\nimport { getStyles } from './Logo.styles';\r\nimport { ILogoStyleProps, ILogoStyles } from './Logo.types';\r\nimport messages from './messages';\r\nimport microsoftLogo from './resources/microsoft.svg';\r\nimport microsoftDarkLogo from './resources/microsoftDark.svg';\r\nimport microsoftGreyLogo from './resources/microsoftGrey.png';\r\n\r\nconst getClassNames = classNamesFunction<ILogoStyleProps, ILogoStyles>();\r\ntype LogoProps = { shouldRenderLogo?: boolean; renderDarkLogo?: boolean; renderGreyLogo?: boolean };\r\n\r\nexport const Logo = injectIntl<InjectedIntlProps & LogoProps>(\r\n  ({ shouldRenderLogo = true, renderDarkLogo = false, intl: { formatMessage }, renderGreyLogo = true }) => {\r\n    const _classNames: IProcessedStyleSet<ILogoStyles> = React.useMemo(\r\n      () =>\r\n        getClassNames(getStyles, {\r\n          theme: getTheme(),\r\n          shouldRenderLogo: shouldRenderLogo,\r\n          renderDarkLogo: renderDarkLogo,\r\n          renderGreyLogo: renderGreyLogo,\r\n        }),\r\n      [shouldRenderLogo, renderDarkLogo, renderGreyLogo]\r\n    );\r\n    const { logo: logoStyle, logoNavButton, divider } = _classNames;\r\n    const logo = renderGreyLogo ? microsoftGreyLogo : renderDarkLogo ? microsoftDarkLogo : microsoftLogo;\r\n\r\n    return (\r\n      <div className={logoStyle}>\r\n        {shouldRenderLogo && <img src={logo} alt={formatMessage(messages.msLogo)} />}\r\n        {shouldRenderLogo && <div className={divider}>|</div>}\r\n\r\n        <div className={isPublisherRejectionUnappealable() ? undefined : logoNavButton} />\r\n        <span>{isLocationPubCenter() ? APP_NAME_PUBCENTER : APP_NAME_SHORT}</span>\r\n      </div>\r\n    );\r\n  }\r\n);\r\n","import { BaseButton, Text } from '@fluentui/react';\r\nimport React from 'react';\r\nimport { InjectedIntlProps, injectIntl } from 'react-intl';\r\nimport { isTythonSelfServeUser } from '../../@data';\r\nimport { APP_NAME_NEW, APP_NAME_PUBCENTER } from '../../constants/AppConstants';\r\nimport { classNames } from '../../pages/ad-management/Account/Payments/Onboarding/PaymentsOnboarding';\r\nimport { daysAheadOfToday } from '../../utils';\r\nimport messages from './TnCModal.messages';\r\nimport { ITnCNotificationProps } from './TnCModal.types';\r\n\r\nconst TnCNotificationComponent = injectIntl<InjectedIntlProps & ITnCNotificationProps>(\r\n  ({ onAction, latestTnCReleaseDate, signatureDate, intl: { formatMessage } }) => (\r\n    <div className={classNames.setupNotificationWrapper}>\r\n      <Text className={classNames.tncNotificationText}>\r\n        {formatMessage(messages.tncNotificationContent, {\r\n          latestTnCReleaseDate: latestTnCReleaseDate\r\n            ? // TODO: add i18n migration once feature is ready\r\n              new Date(latestTnCReleaseDate).toLocaleDateString('en-US', { month: 'long', day: 'numeric', year: 'numeric' })\r\n            : formatMessage(messages.unknown),\r\n          buffer:\r\n            signatureDate && daysAheadOfToday(signatureDate) >= 0\r\n              ? formatMessage(messages.dayBuffer, { buffer: daysAheadOfToday(signatureDate) })\r\n              : formatMessage(messages.twoWeekBuffer),\r\n          appName: isTythonSelfServeUser() ? APP_NAME_NEW : APP_NAME_PUBCENTER,\r\n        })}\r\n      </Text>\r\n      <BaseButton className={classNames.actionButton} onClick={onAction}>\r\n        {formatMessage(messages.goToAccept)}\r\n      </BaseButton>\r\n    </div>\r\n  )\r\n);\r\n\r\nexport const TnCNotification = (props: ITnCNotificationProps) => <TnCNotificationComponent {...props} />;\r\n","import { useEffect, useMemo, useRef, useState } from 'react';\r\nimport { Log } from '../../../logging/src/Log';\r\nimport {\r\n  Publisher,\r\n  User,\r\n  UserContext,\r\n  buildRequestHeadersWithAuthToken,\r\n  constructUrl,\r\n  isTythonSelfServeUser,\r\n  onNotificationChanged,\r\n  onNotificationRemoved,\r\n} from '../../@data';\r\nimport { INotificationBarItem } from '../../components/NotificationBar';\r\nimport { ITnCModalProps } from '../../components/TnCModal';\r\nimport { TnCNotification } from '../../components/TnCModal/TnCNotification';\r\nimport { ITnCSignatureStatus } from '../ad-management/Account/Settings/@data/store/schema/ISettingsViewModel';\r\nimport { setNotificationPanelTriggered } from './@data';\r\nimport { ITnC } from './@data/store/store';\r\n\r\ntype UseTnC = ({\r\n  tncStore,\r\n  tncSignatureStatus,\r\n  userContext,\r\n  publisher,\r\n  shouldDisableTnC,\r\n  isAppLoading,\r\n  barNotifications,\r\n}: {\r\n  tncStore: ITnC;\r\n  tncSignatureStatus?: ITnCSignatureStatus;\r\n  userContext?: UserContext;\r\n  publisher?: Publisher;\r\n  shouldDisableTnC: boolean;\r\n  isAppLoading?: boolean;\r\n  barNotifications?: INotificationBarItem[];\r\n}) => { tncModalProps: ITnCModalProps };\r\n\r\ntype SignatureRetryProps = {\r\n  userContext?: UserContext;\r\n  publisher?: Publisher;\r\n  isSkipping?: boolean;\r\n  latestTnCVersion?: string;\r\n  onPatchStart?: () => void;\r\n  onPatchFinished?: () => void;\r\n  onSuccess?: () => void;\r\n  withRetry?: boolean;\r\n  patchUrl?: string;\r\n};\r\n\r\nconst TNC_NOTIFICATION_ID = 'tnc-notification-pushed';\r\nexport const TNC_PRE_SIGNATURE_FLAG = 'tnc-pre-signed-latest';\r\n\r\nconst useTnC: UseTnC = ({ tncStore, tncSignatureStatus, publisher, userContext, shouldDisableTnC, isAppLoading, barNotifications }) => {\r\n  const handledTnCPopup = useRef<boolean>(false);\r\n  const [shouldRenderTnCModal, setRenderTnC] = useState<boolean>(false);\r\n  const [acceptingTnC, setAcceptingTnC] = useState<boolean>(false);\r\n  const { content, nonTythonContent, isDataLoaded, latestTnCReleaseDate, latestTnCVersion, isNotificationPanelTrigerred } = tncStore;\r\n  const { isLatestAccepted, signatureDate, acceptedVersion } = tncSignatureStatus ?? {};\r\n  const isTnCPreSigned = window.localStorage.getItem(TNC_PRE_SIGNATURE_FLAG);\r\n\r\n  const notification = {\r\n    id: TNC_NOTIFICATION_ID,\r\n    messageBarType: 1,\r\n    component: TnCNotification({\r\n      onAction: () => {\r\n        setRenderTnC(true);\r\n        onNotificationRemoved(notification);\r\n      },\r\n      latestTnCReleaseDate: latestTnCReleaseDate!,\r\n      signatureDate: signatureDate,\r\n    }),\r\n    suppressAutoDismiss: true,\r\n    messageBarStyles: {\r\n      text: {\r\n        marginTop: 0,\r\n        marginBottom: 0,\r\n        alignItems: 'center',\r\n        paddingTop: 2,\r\n      },\r\n      content: { alignItems: 'center' },\r\n    },\r\n  };\r\n\r\n  const shouldHandleTnCForExistingUser = useMemo(\r\n    () =>\r\n      (!isAppLoading && isDataLoaded && !isLatestAccepted && isNotificationPanelTrigerred) ||\r\n      (!isAppLoading && isDataLoaded && !isLatestAccepted && !handledTnCPopup.current && shouldDisableTnC && !isTnCPreSigned),\r\n    // eslint-disable-next-line react-hooks/exhaustive-deps\r\n    [isDataLoaded, handledTnCPopup.current, shouldDisableTnC, isLatestAccepted, isAppLoading, isNotificationPanelTrigerred]\r\n  );\r\n\r\n  useEffect(() => {\r\n    if (shouldHandleTnCForExistingUser) {\r\n      if (\r\n        !isNotificationPanelTrigerred &&\r\n        localStorage.getItem(TNC_NOTIFICATION_ID) &&\r\n        signatureDate &&\r\n        new Date(signatureDate) > new Date()\r\n      ) {\r\n        !barNotifications?.find((n) => n.id === notification.id) && onNotificationChanged(notification);\r\n      } else {\r\n        setRenderTnC(true);\r\n        handledTnCPopup.current = true;\r\n        localStorage.setItem(TNC_NOTIFICATION_ID, 'true');\r\n      }\r\n    }\r\n    // eslint-disable-next-line react-hooks/exhaustive-deps\r\n  }, [shouldHandleTnCForExistingUser]);\r\n\r\n  /**\r\n   * hide popup when user login session has expired\r\n   */\r\n  const shouldForceHidePopup = window?.location?.pathname.includes('login');\r\n\r\n  /**\r\n   * if isSkipping is true, that means user is skipping signing the TnC,\r\n   * in backend mechanism we consider this is \"accepting null TnC\"\r\n   *  */\r\n  const onAcceptTnC = async (isSkipping = false) => {\r\n    if (!userContext || !publisher) {\r\n      return;\r\n    }\r\n    patchAcceptTnC({\r\n      userContext,\r\n      publisher,\r\n      isSkipping,\r\n      latestTnCVersion,\r\n      onPatchStart: () => setAcceptingTnC(true),\r\n      onPatchFinished: () => setAcceptingTnC(false),\r\n      onSuccess: () => setRenderTnC(false),\r\n    });\r\n    if (isNotificationPanelTrigerred) {\r\n      setNotificationPanelTriggered(false);\r\n    }\r\n  };\r\n\r\n  /**\r\n   * Sign empty TnC only when first time user skip the TnC\r\n   * - signatureDate is not ahead of today utc\r\n   * - signatureDate is undefined as by default tncSignatureStatus is undefined\r\n   */\r\n  const onSkipTnC = () => {\r\n    const isSkippingFirstTime =\r\n      !signatureDate || signatureDate === 'undefined' || (new Date() > new Date(signatureDate) && signatureDate !== '');\r\n    if (isSkippingFirstTime) {\r\n      onAcceptTnC(true);\r\n    }\r\n    setRenderTnC(false);\r\n    if (isNotificationPanelTrigerred) {\r\n      setNotificationPanelTriggered(false);\r\n    } else {\r\n      onNotificationChanged(notification);\r\n    }\r\n  };\r\n\r\n  /**\r\n   * disable the skip button when user has seen latest TnC but not\r\n   * signed within the next 14 days,\r\n   * - if tnc first time expose to user, signatureDate is undefined, in this case we will\r\n   *   not disable the skip button\r\n   * - if acceptedVersion is empty string (user skipped TnC previously) and signature\r\n   *   date(at this point signatureDate is date of first time user saw TnC + 14days)\r\n   *   is before today date, we should disable the skip button\r\n   */\r\n  const shouldDisableSkip = useMemo(() => {\r\n    if (!signatureDate) {\r\n      return false;\r\n    }\r\n    const bufferPassed = new Date(signatureDate) < new Date();\r\n    const userSkippedTnCPreviously = acceptedVersion === '';\r\n    return bufferPassed && userSkippedTnCPreviously;\r\n  }, [signatureDate, acceptedVersion]);\r\n\r\n  const tncModalProps = {\r\n    onSkip: shouldDisableSkip ? undefined : onSkipTnC,\r\n    onAccept: () => onAcceptTnC(),\r\n    isActive: shouldRenderTnCModal && !shouldForceHidePopup,\r\n    content: isTythonSelfServeUser() ? content : nonTythonContent,\r\n    releaseDate: latestTnCReleaseDate,\r\n    isLoading: acceptingTnC,\r\n  };\r\n\r\n  return { tncModalProps };\r\n};\r\n\r\nexport const patchAcceptTnC = async ({\r\n  userContext,\r\n  publisher,\r\n  isSkipping = false,\r\n  latestTnCVersion,\r\n  onPatchStart = () => null,\r\n  onPatchFinished = () => null,\r\n  onSuccess = () => null,\r\n  withRetry = false,\r\n  patchUrl,\r\n}: SignatureRetryProps) => {\r\n  onPatchStart();\r\n  let response: Response;\r\n  let url;\r\n  if (patchUrl) {\r\n    url = patchUrl;\r\n  } else {\r\n    const user = new User(userContext?.id);\r\n    url = constructUrl([publisher!, user]) + `/accept-terms/${isSkipping ? null : latestTnCVersion}`;\r\n  }\r\n\r\n  const headers = await buildRequestHeadersWithAuthToken(url, userContext);\r\n\r\n  try {\r\n    response = await fetch(url, {\r\n      method: 'PATCH',\r\n      headers: headers,\r\n    });\r\n\r\n    const responseJson = await response.json();\r\n\r\n    if (response.ok) {\r\n      onSuccess();\r\n    } else {\r\n      if (withRetry) {\r\n        throw Error('Patch failed');\r\n      } else {\r\n        return Log.error(\r\n          `${isSkipping ? 'Skipping' : 'Signing'} latest terms and conditions failed. Error: ${JSON.stringify(responseJson.errors)}`\r\n        );\r\n      }\r\n    }\r\n  } catch (e) {\r\n    if (withRetry) {\r\n      throw e;\r\n    }\r\n    Log.error(e);\r\n  } finally {\r\n    if (!withRetry) {\r\n      onPatchFinished();\r\n    }\r\n  }\r\n};\r\n\r\n/**\r\n * accept latest tnc api will return errors within 2-5 minutes right after user signup, which is\r\n * a known backend issue, as a work around, set localStorage flag after user finish signup flow,\r\n * once tnc hook see this flag, will consider user has pre signed latest TnC per login session\r\n * and fire the signature api call in the next few minutes.\r\n */\r\nexport const preSignTnC = (value?: boolean) => {\r\n  if (value) {\r\n    window.localStorage.setItem(TNC_PRE_SIGNATURE_FLAG, 'true');\r\n  } else {\r\n    window.localStorage.removeItem(TNC_PRE_SIGNATURE_FLAG);\r\n  }\r\n};\r\n\r\nexport default useTnC;\r\n","import { getTheme, ITheme, mergeStyleSets } from '@fluentui/react';\r\nimport { IPubcenterPalette } from '../../../theme';\r\n\r\nexport interface IEmptyChartStyleProps {\r\n  theme: ITheme;\r\n}\r\n\r\ntype StyleProperties = 'noDataText' | 'chartLine' | 'container' | 'chartGrid';\r\ntype EmptyChartStyles = Record<StyleProperties, string>;\r\n\r\nexport const getStyles = (props: IEmptyChartStyleProps): EmptyChartStyles => {\r\n  const { theme } = props;\r\n  const palette = theme.palette as IPubcenterPalette;\r\n  return mergeStyleSets({\r\n    noDataText: {\r\n      position: 'absolute',\r\n      width: '100%',\r\n      height: '100%',\r\n      display: 'flex',\r\n      alignItems: 'center',\r\n      justifyItems: 'center',\r\n      justifyContent: 'center',\r\n      textAlign: 'center',\r\n    },\r\n    chartLine: {\r\n      width: '100%',\r\n      borderColor: palette.neutralLight,\r\n      borderStyle: 'solid',\r\n    },\r\n    chartGrid: {\r\n      display: 'flex',\r\n      flexDirection: 'column',\r\n      gap: '70px',\r\n    },\r\n    container: {\r\n      position: 'relative',\r\n      minHeight: '300px',\r\n    },\r\n  });\r\n};\r\nexport function getClassNames<PropType>(props?: PropType) {\r\n  return getStyles({ theme: getTheme(), ...props });\r\n}\r\n","import React from 'react';\r\nimport { getClassNames } from './EmptyChart.styles';\r\n\r\nconst DATA_METRIC_ID = 'empty-chart';\r\nexport interface IEmptyChartProps {\r\n  noDataText: string;\r\n  noDataMessage: string;\r\n  showGridLines: Boolean;\r\n}\r\n\r\nexport const EmptyChart = (props: IEmptyChartProps) => {\r\n  const classNames = getClassNames(props);\r\n  const { noDataMessage, noDataText, showGridLines } = props;\r\n  return (\r\n    <div className={classNames.container} data-metric={DATA_METRIC_ID}>\r\n      <div className={classNames.noDataText}>\r\n        <div>\r\n          <b>{noDataText}</b> {noDataMessage}\r\n        </div>\r\n      </div>\r\n      {showGridLines && (\r\n        <div className={classNames.chartGrid}>\r\n          <hr className={classNames.chartLine} />\r\n          <hr className={classNames.chartLine} />\r\n          <hr className={classNames.chartLine} />\r\n          <hr className={classNames.chartLine} />\r\n        </div>\r\n      )}\r\n    </div>\r\n  );\r\n};\r\n","import { FontWeights, getTheme, mergeStyleSets } from '@fluentui/react';\r\nimport { BreakPoints, IPubcenterTheme } from '../../../theme';\r\nimport { ICommonStyleProps } from '../../types';\r\nimport { flexWithAlignCenter, flexWithJustifyBetween } from '../../utils/GlobalStyleUtils';\r\n\r\ntype StyleProperties =\r\n  | 'containerStyle'\r\n  | 'headerRowStyle'\r\n  | 'headingTitleStyle'\r\n  | 'headingIconStyle'\r\n  | 'sectionStyle'\r\n  | 'sectionTitleStyle'\r\n  | 'contentRowStyle'\r\n  | 'contentLabelStyle'\r\n  | 'contentLabelStyleWithColor'\r\n  | 'sectionContentStyle'\r\n  | 'bodyContainerStyle'\r\n  | 'actionStyle';\r\nexport type SummaryCardStyles = Record<StyleProperties, string>;\r\n\r\nexport const getStyles = (props: ICommonStyleProps): SummaryCardStyles => {\r\n  const theme = (props.theme as unknown) as IPubcenterTheme;\r\n  const { spacing, fonts } = theme;\r\n  const { ResponsiveSmall } = BreakPoints;\r\n\r\n  return mergeStyleSets({\r\n    containerStyle: {\r\n      boxShadow: '0px 4px 8px rgba(0, 0, 0, 0.14), 0px 0px 2px rgba(0, 0, 0, 0.12)',\r\n      borderRadius: spacing.size6,\r\n      marginBottom: spacing.size16,\r\n    },\r\n    headingTitleStyle: {\r\n      ...fonts.size16,\r\n      margin: 0,\r\n      fontWeight: FontWeights.semibold,\r\n      ...flexWithAlignCenter,\r\n    },\r\n    headingIconStyle: {\r\n      fontSize: fonts.size14.fontSize,\r\n      height: spacing.size16,\r\n      width: spacing.size16,\r\n      marginRight: spacing.size8,\r\n    },\r\n    headerRowStyle: {\r\n      padding: `0 ${spacing.size24}`,\r\n      height: spacing.size54,\r\n      ...flexWithJustifyBetween,\r\n      borderBottom: `1px solid ${theme.palette.neutralQuaternaryAlt}`,\r\n    },\r\n    sectionStyle: {\r\n      '&:not(:last-child)': {\r\n        marginBottom: spacing.size12,\r\n      },\r\n      width: '50%',\r\n    },\r\n    sectionTitleStyle: {\r\n      ...fonts.size14Medium,\r\n      margin: 0,\r\n      [ResponsiveSmall]: {\r\n        overflowWrap: 'break-word',\r\n      },\r\n    },\r\n    contentRowStyle: {\r\n      display: 'flex',\r\n      marginBottom: spacing.size4,\r\n      ...fonts.size14,\r\n      [ResponsiveSmall]: {\r\n        display: 'block',\r\n      },\r\n    },\r\n    contentLabelStyle: {\r\n      opacity: 0.6,\r\n      minWidth: 200,\r\n      color: theme.palette.black,\r\n    },\r\n    contentLabelStyleWithColor: {\r\n      opacity: 0.6,\r\n      minWidth: 200,\r\n      color: theme.palette.eerieBlack,\r\n    },\r\n    sectionContentStyle: {\r\n      margin: 0,\r\n      ...fonts.size14,\r\n      [ResponsiveSmall]: {\r\n        overflowWrap: 'break-word',\r\n      },\r\n    },\r\n    bodyContainerStyle: {\r\n      padding: `${spacing.size12} ${spacing.size24}`,\r\n      display: 'flex',\r\n      flexWrap: 'wrap',\r\n    },\r\n    actionStyle: {},\r\n  });\r\n};\r\n\r\nexport function getClassNames<PropType>(props?: PropType): SummaryCardStyles {\r\n  return getStyles({ theme: getTheme(), ...props });\r\n}\r\n","import { Image, Link, mergeStyleSets } from '@fluentui/react';\r\nimport React from 'react';\r\nimport { IChildrenProp } from '../../types';\r\nimport { SummaryCardStyles, getClassNames } from './SummaryCard.styles';\r\n\r\nexport interface ISummaryCardProps extends IChildrenProp {}\r\nexport function SummaryCard({ children }: ISummaryCardProps) {\r\n  const { containerStyle } = getClassNames();\r\n\r\n  return <div className={containerStyle}>{children}</div>;\r\n}\r\n\r\nexport interface IHeadingRowProps extends IChildrenProp {}\r\nSummaryCard.HeadingRow = function HeadingRow({ children }: IHeadingRowProps) {\r\n  const { headerRowStyle } = getClassNames();\r\n  return <div className={headerRowStyle}>{children}</div>;\r\n};\r\n\r\nexport interface IHeadingTitleProps {\r\n  text: string;\r\n  icon?: string;\r\n}\r\nSummaryCard.HeadingTitle = function HeadingTitle({ text, icon }: IHeadingTitleProps) {\r\n  const { headingTitleStyle, headingIconStyle } = getClassNames();\r\n  return (\r\n    <h2 className={headingTitleStyle}>\r\n      <Image src={icon} shouldFadeIn alt={text} className={headingIconStyle} />\r\n      {text}\r\n    </h2>\r\n  );\r\n};\r\n\r\nSummaryCard.ActionsContainer = function ActionsContainer({ children }: IChildrenProp) {\r\n  return <div>{children}</div>;\r\n};\r\n\r\nexport interface IActionProps extends IChildrenProp {\r\n  disabled?: boolean;\r\n  onClick: () => void;\r\n  styleProps?: Partial<Pick<SummaryCardStyles, 'actionStyle'>>;\r\n}\r\nSummaryCard.Action = function Action({ children, disabled, onClick, styleProps }: IActionProps) {\r\n  const { actionStyle } = mergeStyleSets(getClassNames(), styleProps);\r\n\r\n  return (\r\n    <Link disabled={disabled} onClick={onClick} className={actionStyle}>\r\n      {children}\r\n    </Link>\r\n  );\r\n};\r\n\r\nexport interface IBodyProps extends Partial<IChildrenProp> {\r\n  styleProps?: Partial<Pick<SummaryCardStyles, 'bodyContainerStyle'>>;\r\n}\r\nSummaryCard.Body = function Body({ children, styleProps }: IBodyProps) {\r\n  const { bodyContainerStyle } = mergeStyleSets(getClassNames(), styleProps);\r\n  return <div className={bodyContainerStyle}>{children}</div>;\r\n};\r\n\r\nexport interface ISectionProps extends Partial<IChildrenProp> {\r\n  styleProps?: Partial<Pick<SummaryCardStyles, 'sectionStyle'>>;\r\n}\r\nSummaryCard.Section = function Section({ children, styleProps }: ISectionProps) {\r\n  const { sectionStyle } = mergeStyleSets(getClassNames(), styleProps);\r\n  return <div className={sectionStyle}>{children}</div>;\r\n};\r\n\r\nexport interface ISectionTitleProps {\r\n  text: string;\r\n}\r\nSummaryCard.SectionTitle = function SectionTitle({ text }: ISectionTitleProps) {\r\n  const { sectionTitleStyle } = getClassNames();\r\n  return <h3 className={sectionTitleStyle}>{text}</h3>;\r\n};\r\n\r\nexport interface IContentRowProps {\r\n  label?: string;\r\n  value?: string;\r\n  styleProps?: Partial<SummaryCardStyles>;\r\n  children?: React.ReactNode;\r\n}\r\nSummaryCard.ContentRow = function ContentRow({ label, value, children, styleProps }: IContentRowProps) {\r\n  const { contentRowStyle, contentLabelStyle, contentLabelStyleWithColor } = mergeStyleSets(getClassNames(), styleProps);\r\n  return (\r\n    <div className={contentRowStyle}>\r\n      {label && <div className={contentLabelStyleWithColor}>{label}</div>}\r\n      {value && <div className={contentLabelStyle}>{value}</div>}\r\n      {children && <div className={contentLabelStyle}>{children}</div>}\r\n    </div>\r\n  );\r\n};\r\n\r\nexport interface ISectionValueProps extends Partial<IChildrenProp> {\r\n  text?: string;\r\n  styleProps?: Partial<Pick<SummaryCardStyles, 'sectionContentStyle'>>;\r\n}\r\nSummaryCard.SectionContent = function SectionValue({ text, children, styleProps }: ISectionValueProps) {\r\n  const { sectionContentStyle } = mergeStyleSets(getClassNames(), styleProps);\r\n  return (\r\n    <div>\r\n      <p className={sectionContentStyle}>{text}</p>\r\n      {children}\r\n    </div>\r\n  );\r\n};\r\n","import { mutator } from 'satcheljs';\r\nimport { onHelpInfoChanged } from '../actions';\r\nimport { getAppStore } from '../store/store';\r\n\r\nmutator(onHelpInfoChanged, msg => {\r\n  getAppStore().helpInfo = msg.helpInfo;\r\n});\r\n","import { orchestrator } from 'satcheljs';\r\nimport { Log } from '../../../../../logging/src';\r\nimport {\r\n  Model,\r\n  NotificationLabel,\r\n  NotificationSeverity,\r\n  onNotificationCardAdded,\r\n  showErrorToastNotification,\r\n  showSuccessToastNotification,\r\n} from '../../../../@data';\r\nimport notificationMessages from '../../../../NotificationsPanel.Types.messages';\r\nimport { CSVHelper } from '../../../../utils';\r\nimport messages from '../../GridV2.messages';\r\nimport { DownloadOption } from '../../GridV2.types';\r\nimport { onDownloadButtonClicked } from '../actions/commandBarActions';\r\nimport { getStore } from '../store/store';\r\n\r\norchestrator(onDownloadButtonClicked, async (msg) => {\r\n  Log.write('onDownloadButtonClicked');\r\n  const { selectedItems, paginator } = getStore();\r\n\r\n  const getActivePage = (items: Model[], pageNumber?: number, pageSize?: number) => {\r\n    const dataLength = items?.length;\r\n    if (dataLength && pageNumber && pageSize) {\r\n      return items?.slice((pageNumber - 1) * pageSize, pageNumber * pageSize) || [];\r\n    } else {\r\n      return items || [];\r\n    }\r\n  };\r\n\r\n  let downloadData: Model[] = msg.data;\r\n  if (msg.downloadType === DownloadOption.selection && !!selectedItems && selectedItems.length !== 0) {\r\n    downloadData = selectedItems;\r\n  } else if (msg.downloadType === DownloadOption.page) {\r\n    downloadData = getActivePage(msg.data, paginator.currentPageNumber, paginator.currentPageSize);\r\n  } else if (msg.downloadType === DownloadOption.all) {\r\n    downloadData = msg.data;\r\n  }\r\n\r\n  let stringDataForCSV: string[];\r\n  let headers: string;\r\n\r\n  if (downloadData && msg.columns) {\r\n    const columns = msg.columns.filter((col) => col.isExportable && col.isVisible);\r\n    headers = columns.map((col) => CSVHelper.escapeStringForCSV(col.csvHeaderName ?? col.name)).toString();\r\n    stringDataForCSV = downloadData.map((rowData) => {\r\n      return CSVHelper.getCSVStringsV2(rowData, columns);\r\n    });\r\n\r\n    CSVHelper.downloadDataAsCSV(stringDataForCSV.join('\\n'), headers, msg.csvFileName);\r\n\r\n    showSuccessToastNotification({\r\n      textMessageDescriptor: messages.gridDataDownloadSuccess,\r\n    });\r\n  } else {\r\n    showErrorToastNotification({ textMessageDescriptor: notificationMessages.GridDataDownloadFailureContent });\r\n    onNotificationCardAdded({\r\n      // tslint:disable-next-line: no-any\r\n      severity: NotificationSeverity.Error,\r\n      title: msg.formatMessage(notificationMessages.GridDataDownloadFailureTitle),\r\n      content: msg.formatMessage(notificationMessages.GridDataDownloadFailureContent),\r\n      notificationLabel: NotificationLabel.GridDataDownloadFailure,\r\n    });\r\n  }\r\n});\r\n","import { mutator } from 'satcheljs';\r\nimport { onAccountChanged } from '../actions';\r\nimport { getAppStore } from '../store/store';\r\n\r\nmutator(onAccountChanged, msg => {\r\n  const store = getAppStore();\r\n  store.account = msg.account;\r\n});\r\n","import { mutator } from 'satcheljs';\r\nimport { onMenuCollapsedChanged } from '../actions';\r\nimport { getAppStore } from '../store/store';\r\n\r\nmutator(onMenuCollapsedChanged, msg => {\r\n  getAppStore().menuCollapsed = msg.collapsed;\r\n});\r\n","import { mutator } from 'satcheljs';\r\nimport { getAppStore, onEntityGridColumnsChanged } from '..';\r\n\r\nmutator(onEntityGridColumnsChanged, (msg) => {\r\n  const store = getAppStore();\r\n  const entityGridColumns = store.entityGridColumns || [];\r\n  const existingEntityColumns = entityGridColumns.find((entityGridColumn) => entityGridColumn.entity === msg.entityColumnsData.entity);\r\n\r\n  if (existingEntityColumns) {\r\n    existingEntityColumns.gridColumns = msg.entityColumnsData.gridColumns;\r\n  } else {\r\n    store.entityGridColumns = [...entityGridColumns, msg.entityColumnsData];\r\n  }\r\n});\r\n","import { mutator } from 'satcheljs';\r\nimport { onIsAcceptInviteFlowChanged, onUserInvitationCodeChanged } from '..';\r\nimport { Log } from '../../../logging/src';\r\nimport { StorageIsUserInviteFlowKey, StorageUserInvitationCodeFlowKey, getAppStore } from '../store/store';\r\n\r\nmutator(onIsAcceptInviteFlowChanged, (msg) => {\r\n  Log.debug('Setting IsAcceptInviteFlow in cache as: ' + msg.isAcceptInviteFlow);\r\n  localStorage.setItem(StorageIsUserInviteFlowKey, JSON.stringify(msg.isAcceptInviteFlow));\r\n});\r\n\r\nmutator(onUserInvitationCodeChanged, (msg) => {\r\n  Log.debug('UserInvitationCode changed: ' + msg.invitationCode);\r\n  if (msg.invitationCode !== 'redirect') {\r\n    localStorage.setItem(StorageUserInvitationCodeFlowKey, msg.invitationCode);\r\n    getAppStore().userInvitationCode = msg.invitationCode;\r\n  }\r\n});\r\n","import { mutator } from 'satcheljs';\r\nimport { onLayoutChanged } from '../actions';\r\nimport { getAppStore } from '../store/store';\r\n\r\nmutator(onLayoutChanged, msg => {\r\n  getAppStore().layout = msg.layout;\r\n});\r\n","import { mutator } from 'satcheljs';\r\nimport AppMessages from '../../App.messages';\r\nimport { onLoadingChanged, onLoadingSetting, onLoadingWaiting } from '../actions/onLoadingChanged';\r\nimport { getAppStore } from '../store/store';\r\n\r\nmutator(onLoadingChanged, msg => {\r\n  getAppStore().loading = msg.loading;\r\n  AppMessages.loadingLabel.defaultMessage = AppMessages.loadingStatusLabel.defaultMessage;\r\n});\r\n\r\nmutator(onLoadingSetting, msg => {\r\n  getAppStore().waiting = msg.waiting;\r\n  AppMessages.loadingLabel.defaultMessage = AppMessages.loadingStatusLabel.defaultMessage;\r\n});\r\n\r\nmutator(onLoadingWaiting, msg => {\r\n  getAppStore().waiting = msg.waiting;\r\n  AppMessages.loadingLabel.defaultMessage = AppMessages.loadingWaitingLabel.defaultMessage;\r\n});","import { mutator } from 'satcheljs';\r\nimport { onNotificationChanged, onNotificationRemoved } from '../actions';\r\nimport { getAppStore } from '../store/store';\r\n\r\nmutator(onNotificationChanged, (msg) => {\r\n  const store = getAppStore();\r\n  const notifications = store.notifications || [];\r\n  store.notifications = [...notifications, msg.notification];\r\n});\r\n\r\nmutator(onNotificationRemoved, (msg) => {\r\n  const store = getAppStore();\r\n  const notifications = store.notifications || [];\r\n  const indexOfNotification = notifications.findIndex((notification) =>\r\n    msg.notification.component\r\n      ? notification.id === msg.notification.id\r\n      : notification.text === msg.notification.text || notification.id === msg.notification.id\r\n  );\r\n  store.notifications = [...notifications.slice(0, indexOfNotification), ...notifications.slice(indexOfNotification + 1)];\r\n});\r\n","import { mutator } from 'satcheljs';\r\nimport { INotificationCardItem } from '../../components/NotificationCard';\r\nimport { SESSION_NOTIFICATIONS_UI } from '../../constants/AppConstants';\r\nimport { onNotificationCardAdded, onNotificationCardRemoved, onNotificationPanelClosed, onNotificationPanelItemsChanged } from '../actions';\r\nimport { getAppStore } from '../store/store';\r\n\r\nmutator(onNotificationCardAdded, (msg) => {\r\n  const store = getAppStore();\r\n  const panelNotifications = store.panelNotifications || [];\r\n  const newNotificationCard: INotificationCardItem = {\r\n    id: ((crypto as unknown) as { randomUUID: () => string }).randomUUID(),\r\n    isUIGenerated: true,\r\n    timestamp: new Date(),\r\n    ...msg.notification,\r\n  };\r\n  store.panelNotifications = [...panelNotifications, newNotificationCard];\r\n\r\n  if (newNotificationCard.isUIGenerated) {\r\n    // persist in session storage as well\r\n    const existingNotifications = sessionStorage.getItem(SESSION_NOTIFICATIONS_UI);\r\n\r\n    let notifications: INotificationCardItem[] = [];\r\n    if (existingNotifications) {\r\n      notifications = JSON.parse(existingNotifications);\r\n    }\r\n\r\n    // Add a new item to the list, if it doesn't already exist\r\n    if (notifications.length === 0 || !notifications.some((notification) => notification.id === newNotificationCard.id)) {\r\n      notifications.push(newNotificationCard);\r\n\r\n      // Store the updated list back to sessionStorage\r\n      const updatedData = JSON.stringify(notifications);\r\n      sessionStorage.setItem(SESSION_NOTIFICATIONS_UI, updatedData);\r\n    }\r\n  }\r\n});\r\n\r\nmutator(onNotificationCardRemoved, (msg) => {\r\n  const store = getAppStore();\r\n  const panelNotifications = store.panelNotifications || [];\r\n  const selectedNotificationId = msg.id;\r\n  const indexOfNotification = panelNotifications.findIndex((notification) => notification.id === selectedNotificationId);\r\n  store.panelNotifications = [...panelNotifications.slice(0, indexOfNotification), ...panelNotifications.slice(indexOfNotification + 1)];\r\n\r\n  const existingNotifications = sessionStorage.getItem(SESSION_NOTIFICATIONS_UI);\r\n\r\n  let notifications: INotificationCardItem[] = [];\r\n  if (existingNotifications) {\r\n    notifications = JSON.parse(existingNotifications);\r\n  }\r\n\r\n  const indexOfSSNotification = notifications.findIndex((notification) => notification.id === selectedNotificationId);\r\n  notifications = [...notifications.slice(0, indexOfSSNotification), ...notifications.slice(indexOfSSNotification + 1)];\r\n\r\n  // Store the updated list back to sessionStorage\r\n  const updatedData = JSON.stringify(notifications);\r\n  sessionStorage.setItem(SESSION_NOTIFICATIONS_UI, updatedData);\r\n});\r\n\r\nmutator(onNotificationPanelItemsChanged, (msg) => {\r\n  const store = getAppStore();\r\n  store.panelNotifications = msg.value;\r\n});\r\n\r\nmutator(onNotificationPanelClosed, (msg) => {\r\n  getAppStore().notificationPanelCollapsed = msg.isClosed;\r\n});\r\n","import { mutator } from 'satcheljs';\r\nimport { Log } from '../../../logging/src';\r\nimport { onAccessiblePublisherListChanged, onDefaultPublisherSet, onPublisherChanged } from '../actions';\r\nimport { Publisher } from '../store';\r\nimport { getAppStore } from '../store/store';\r\n\r\nmutator(onPublisherChanged, (msg) => {\r\n  const store = getAppStore();\r\n  if (msg.publisher) {\r\n    msg.publisher.className = new Publisher().className;\r\n  }\r\n\r\n  store.publisher = msg.publisher;\r\n});\r\n\r\nmutator(onDefaultPublisherSet, (msg) => {\r\n  Log.debug(`Setting default publisher, ${msg.id}`);\r\n\r\n  const store = getAppStore();\r\n  store.defaultPublisher = msg.id;\r\n});\r\n\r\nmutator(onAccessiblePublisherListChanged, (msg) => {\r\n  const store = getAppStore();\r\n  store.accessiblePublishers = msg.value;\r\n});\r\n","import { mutator } from 'satcheljs';\r\nimport { onSavingChanged } from '../actions/onSavingChanged';\r\nimport { getAppStore } from '../store/store';\r\n\r\nmutator(onSavingChanged, msg => {\r\n  getAppStore().saving = msg.saving;\r\n});\r\n","import { mutator } from 'satcheljs';\r\nimport { onUserContextChanged } from '../actions';\r\nimport { getAppStore } from '../store/store';\r\n\r\nmutator(onUserContextChanged, msg => {\r\n  getAppStore().userContext = msg.userDetails;\r\n});","import { orchestrator } from 'satcheljs';\r\nimport { getAppStore, showErrorToastNotification } from '../../../../../@data';\r\nimport { getAccountStatus } from '../../../../../@data/services/PaymentsService';\r\nimport messages from '../../AccountPage.messages';\r\nimport { setAccountStatusDataAction, setAccountStatusIsLoading } from '../actions';\r\nimport { fetchAccountStatus } from '../actions/actions';\r\n\r\norchestrator(fetchAccountStatus, async () => {\r\n  const userContext = getAppStore().userContext;\r\n  const publisher = getAppStore().publisher;\r\n  setAccountStatusIsLoading(true);\r\n  try {\r\n    const data = await getAccountStatus(publisher?.id!, userContext!);\r\n    setAccountStatusDataAction(data);\r\n  } catch (error) {\r\n    showErrorToastNotification({ textMessageDescriptor: messages.loadAccountStatusFailed });\r\n  }\r\n  setAccountStatusIsLoading(false);\r\n});\r\n","import { orchestrator } from 'satcheljs';\r\nimport {\r\n  NotificationLabel,\r\n  NotificationSeverity,\r\n  getAppStore,\r\n  onNotificationCardAdded,\r\n  showErrorToastNotification,\r\n} from '../../../../../@data';\r\nimport { getBalance } from '../../../../../@data/services/PaymentsService';\r\nimport notificationMessages from '../../../../../NotificationsPanel.Types.messages';\r\nimport { getStore } from '../../Settings/@data/store/store';\r\nimport { setBalanceDataAction, setBalanceIsDataLoadedAction } from '../actions';\r\nimport { fetchPaymentsPageBalance } from '../actions/actions';\r\n\r\norchestrator(fetchPaymentsPageBalance, async () => {\r\n  const userContext = getAppStore().userContext;\r\n  const publisher = getAppStore().publisher;\r\n  try {\r\n    const { systemPreferences } = getStore().active;\r\n\r\n    const data = await getBalance(publisher?.id!, systemPreferences?.currency, userContext!);\r\n    setBalanceDataAction(data);\r\n    setBalanceIsDataLoadedAction(true);\r\n  } catch (error) {\r\n    showErrorToastNotification({ textMessageDescriptor: notificationMessages.LoadingBalanceDataFailedContent });\r\n\r\n    onNotificationCardAdded({\r\n      // tslint:disable-next-line: no-any\r\n      severity: NotificationSeverity.Error,\r\n      titleMessageDescriptor: notificationMessages.LoadingBalanceDataFailedTitle,\r\n      contentMessageDescriptor: notificationMessages.LoadingBalanceDataFailedContent,\r\n      notificationLabel: NotificationLabel.LoadingBalanceDataFailed,\r\n    });\r\n  }\r\n});\r\n","import { orchestrator } from 'satcheljs';\r\nimport {\r\n  NotificationLabel,\r\n  NotificationSeverity,\r\n  getAppStore,\r\n  onNotificationCardAdded,\r\n  showErrorToastNotification,\r\n} from '../../../../../@data';\r\nimport { getEstimatedEarnings } from '../../../../../@data/services/PaymentsService';\r\nimport { PaymentsPageEstimatedEarningsRequestParams } from '../../../../../@data/store/schema/models/PaymentPageEstimatedEarningsRequestParams';\r\nimport notificationMessages from '../../../../../NotificationsPanel.Types.messages';\r\nimport { ChartGrain } from '../../Payments/EstimatedEarnings/EstimatedEarnings.types';\r\nimport { setEstimatedEarningsDataAction, setEstimatedEarningsIsDataLoadedAction } from '../actions';\r\nimport { fetchPaymentsPageEstimatedEarnings } from '../actions/actions';\r\n\r\norchestrator(fetchPaymentsPageEstimatedEarnings, async ({ grain }) => {\r\n  const userContext = getAppStore().userContext;\r\n  const publisher = getAppStore().publisher;\r\n\r\n  try {\r\n    const localeDate = new Date();\r\n    const startYear = grain === ChartGrain.YEARLY ? localeDate.getUTCFullYear() - 6 : localeDate.getUTCFullYear();\r\n    const startMonth = grain === ChartGrain.MONTHLY ? localeDate.getUTCMonth() - 6 : localeDate.getUTCMonth();\r\n    const startDate = new Date(startYear, startMonth, localeDate.getUTCDate(), 0, 0, 0);\r\n    const endDate = new Date(localeDate.getUTCFullYear(), localeDate.getUTCMonth(), localeDate.getUTCDate(), 0, 0, 0);\r\n    const startDateString = `${startDate.getMonth() + 1}/${startDate.getDate()}/${startDate.getFullYear()}`;\r\n    const endDateString = `${endDate.getMonth() + 1}/${endDate.getDate()}/${endDate.getFullYear()}`;\r\n    const requestParams: PaymentsPageEstimatedEarningsRequestParams = {\r\n      grain,\r\n      startDate: startDateString,\r\n      endDate: endDateString,\r\n    };\r\n    const data = await getEstimatedEarnings(publisher?.id!, requestParams, userContext!);\r\n    setEstimatedEarningsDataAction(data, grain);\r\n    setEstimatedEarningsIsDataLoadedAction(true, grain);\r\n  } catch (error) {\r\n    showErrorToastNotification({ textMessageDescriptor: notificationMessages.PayoutInformationFailedContent });\r\n    onNotificationCardAdded({\r\n      // tslint:disable-next-line: no-any\r\n      severity: NotificationSeverity.Error,\r\n      titleMessageDescriptor: notificationMessages.PayoutInformationFailedTitle,\r\n      contentMessageDescriptor: notificationMessages.PayoutInformationFailedContent,\r\n      notificationLabel: NotificationLabel.PayoutInformationFailed,\r\n    });\r\n  }\r\n});\r\n","import { orchestrator } from 'satcheljs';\r\nimport {\r\n  getAppStore,\r\n  NotificationLabel,\r\n  NotificationSeverity,\r\n  onNotificationCardAdded,\r\n  showErrorToastNotification,\r\n  XPayJwtTokenRequest,\r\n} from '../../../../../@data';\r\nimport { getXPayJwtToken } from '../../../../../@data/services/PaymentsService';\r\nimport notificationMessages from '../../../../../NotificationsPanel.Types.messages';\r\nimport { fetchAccountById } from '../../../../partner-management/Account/@data/services/AccountService';\r\nimport { setXpayJwtTokenStatusIsLoading } from '../actions';\r\nimport { onInitializePaymentsPage } from '../actions/actions';\r\nimport { getPaymentsPageData } from '../store/paymentsPageStore';\r\n\r\norchestrator(\r\n  onInitializePaymentsPage,\r\n  async ({ shouldRenderOnboardingPopup, locale, countryCode, onResolvedCallback = (success: boolean) => null }) => {\r\n    try {\r\n      const { xpayJwtToken, xpayJwtTokenStatusIsLoading, xpayJwtTokenRequest, xpayTokenExpirationTimeStamp } = getPaymentsPageData();\r\n      const { publisher, userContext } = getAppStore();\r\n      let tokenResponse, xPayJWTRequest;\r\n\r\n      if (\r\n        (!xpayJwtToken && !xpayJwtTokenStatusIsLoading) ||\r\n        (xpayJwtToken && xpayTokenExpirationTimeStamp && xpayTokenExpirationTimeStamp <= new Date().getTime())\r\n      ) {\r\n        setXpayJwtTokenStatusIsLoading(true);\r\n        // TODO : remove the fetch account and depends on countryCode passed as props\r\n        const accountId = getAppStore().account?.id;\r\n        const account = await fetchAccountById(publisher!, accountId, userContext);\r\n        xPayJWTRequest = new XPayJwtTokenRequest();\r\n        xPayJWTRequest.publisherId = publisher?.id!;\r\n        xPayJWTRequest.countryCode = account.countryCode || countryCode;\r\n        tokenResponse = await getXPayJwtToken(xPayJWTRequest, userContext!);\r\n      }\r\n\r\n      const xpayParams: {\r\n        authToken: string;\r\n        containerId: string;\r\n        theme: string;\r\n        locale: string;\r\n        xpayClientName: string;\r\n        isRefreshedUI: boolean;\r\n        country: string;\r\n        showTransactionReport: boolean;\r\n        showSetupPopup: boolean;\r\n        serviceAgreement: string;\r\n      } = {\r\n        authToken: xpayJwtToken ?? tokenResponse.xpayJwtToken,\r\n        containerId: 'onboarding-container',\r\n        theme: 'dark',\r\n        locale: locale,\r\n        xpayClientName: 'PubCenter',\r\n        isRefreshedUI: false,\r\n        country: xpayJwtTokenRequest.countryCode ?? xPayJWTRequest.countryCode,\r\n        showTransactionReport: true,\r\n        showSetupPopup: shouldRenderOnboardingPopup,\r\n        serviceAgreement: xpayJwtTokenRequest.countryCode === 'CA' ? 'Recipient' : 'Full',\r\n      };\r\n\r\n      if (window.hasOwnProperty('xPayUIAccountOnboarding')) {\r\n        console.log('window has property xPayUIAccountOnboarding');\r\n        window['xPayUIAccountOnboarding']['renderStripeOnboardingComponent'](xpayParams);\r\n        onResolvedCallback(true);\r\n      }\r\n    } catch (error) {\r\n      showErrorToastNotification({ textMessageDescriptor: notificationMessages.LoadPayoutInfoFailedContent });\r\n      onNotificationCardAdded({\r\n        // tslint:disable-next-line: no-any\r\n        severity: NotificationSeverity.Error,\r\n        titleMessageDescriptor: notificationMessages.LoadPayoutInfoFailedTitle,\r\n        contentMessageDescriptor: notificationMessages.LoadPayoutInfoFailedContent,\r\n        notificationLabel: NotificationLabel.LoadPayoutInfoFailed,\r\n      });\r\n      onResolvedCallback(false);\r\n    } finally {\r\n      setXpayJwtTokenStatusIsLoading(false);\r\n    }\r\n  }\r\n);\r\n","import { defineMessages } from 'react-intl';\r\n\r\nexport default defineMessages({\r\n  headerLabel: {\r\n    id: 'systemPreferences.headerLabel',\r\n    defaultMessage: 'Locale',\r\n  },\r\n  headerAction: {\r\n    id: 'systemPreferences.headerAction',\r\n    defaultMessage: 'Edit',\r\n  },\r\n  panelHeaderText: {\r\n    id: 'systemPreferences.panelHeaderText',\r\n    defaultMessage: 'Edit system preferences',\r\n  },\r\n  updateLanguageFailed: {\r\n    id: 'systemPreferences.languageUpdateFailed',\r\n    defaultMessage: 'Failed to update user language. Please try again!',\r\n  },\r\n  invalidStateReLoginOrReport: {\r\n    id: 'systemPreferences.invalidStateReLoginOrReport',\r\n    defaultMessage: 'You have arrived in an invalid state, please re-login or report if issue persists.',\r\n  },\r\n});\r\n","module.exports = __webpack_public_path__ + \"static/media/adVector.f259b774.svg\";","module.exports = __webpack_public_path__ + \"static/media/codeIcon.6a91c982.svg\";","module.exports = __webpack_public_path__ + \"static/media/DocumentationCenterIcon.31cd5d5e.svg\";","module.exports = __webpack_public_path__ + \"static/media/FeedBackIcon.9b57b425.svg\";","module.exports = __webpack_public_path__ + \"static/media/SupportTeamIcon.914857e7.svg\";","module.exports = __webpack_public_path__ + \"static/media/empty.5254ba69.svg\";","module.exports = __webpack_public_path__ + \"static/media/fre-1.0c9c5356.jpg\";","module.exports = __webpack_public_path__ + \"static/media/fre-2.fd050b2a.jpg\";","module.exports = __webpack_public_path__ + \"static/media/fre-3.ec650c27.jpg\";","import { mutatorAction } from 'satcheljs';\r\nimport { getAppealStore } from '../store/appealStore';\r\nimport { DocumentUploadStatus } from '../store/schema';\r\n\r\nexport const setDocumentUploadPanelOpen = mutatorAction('setDocumentUploadPanelOpen', (isPanelOpen: boolean) => {\r\n  getAppealStore().isDocumentUploadPanelOpen = isPanelOpen;\r\n});\r\n\r\nexport const setDocumentUploadStatus = mutatorAction('setBVDocumentUploadStatus', (index: number, status: DocumentUploadStatus) => {\r\n  getAppealStore().documentUploadStatus[index] = status;\r\n});\r\n\r\n// tslint:disable-next-line: no-any\r\nexport const setAppealHistory = mutatorAction('setAppealHistory', (appealHistory: any) => {\r\n  getAppealStore().appealHistory = appealHistory;\r\n});\r\n","export const GOOGLE_ADSENSE_OAUTH_CLIENT_ID_PROD = '1049810782184-nk9negp0sgack3sfatbfei0vjillr6ll.apps.googleusercontent.com';\r\nexport const GOOGLE_ADSENSE_OAUTH_CLIENT_ID_SI = '1049810782184-nk9negp0sgack3sfatbfei0vjillr6ll.apps.googleusercontent.com';\r\n\r\nexport const GOOGLE_ADSENSE_OAUTH_URL = 'https://accounts.google.com/o/oauth2/auth/oauthchooseaccount?';\r\n\r\nexport const GOOGLE_ADSENSE_OAUTH_ACCESS_TYPE = 'offline';\r\n\r\nexport const GOOGLE_ADSENSE_OAUTH_RESPONSE_TYPE = 'code';\r\n\r\nexport const GOOGLE_ADSENSE_SCOPES = [\r\n  'https://www.googleapis.com/auth/admanager',\r\n  'https://www.googleapis.com/auth/adsense',\r\n  'https://www.googleapis.com/auth/userinfo.email',\r\n];\r\n\r\nexport const GIF_ANIMATION_DURATION = 4475;\r\n\r\nexport const GOOGLE_API_SCRIPT = 'https://accounts.google.com/gsi/client';\r\n\r\nexport const NOTIFICATION_FAILED_WITH_REASON_ERROR_CODE = 'NOTIFICATION_FAILED_WITH_REASON_ERROR_CODE';\r\n\r\nexport const MULTIPLE_GAM_ID_ERROR_CODE = 'MultipleGamNetworksFound';\r\n","export enum ServingStatus {\r\n  Pending = 'Pending',\r\n  NotServing = 'Rejected',\r\n  Serving = 'Approved',\r\n  OnHold = 'On hold',\r\n}\r\n\r\nexport type ServingStatusKey = keyof typeof ServingStatus;\r\n\r\nexport const ServingStatusLabel: { [key in ServingStatusKey]: string } = {\r\n  Pending: 'servingStatusPending',\r\n  NotServing: 'servingStatusNotServing',\r\n  Serving: 'servingStatusServing',\r\n  OnHold: 'servingStatusOnHold',\r\n};\r\n\r\nexport const ServingStatusMap = {\r\n  0: ServingStatus.Pending,\r\n  1: ServingStatus.NotServing,\r\n  2: ServingStatus.Serving,\r\n  3: ServingStatus.OnHold,\r\n};\r\n","import {\r\n  DetailsHeader,\r\n  DetailsListLayoutMode,\r\n  DetailsRow,\r\n  IDetailsColumnRenderTooltipProps,\r\n  IShimmeredDetailsListProps,\r\n  mergeStyleSets,\r\n  SelectionMode,\r\n  ShimmeredDetailsList,\r\n  TooltipHost,\r\n} from '@fluentui/react';\r\nimport React from 'react';\r\nimport { InjectedIntlProps, injectIntl } from 'react-intl';\r\nimport { useSortableGridColumns } from '../../hooks';\r\nimport { IPropertyLevelAdBlock } from '../../pages/ad-management/AdBlock/components/PropertyLevelBlocking';\r\nimport type { ICustomColumn } from '../../types';\r\nimport { FormTitle } from '../Form';\r\nimport { getClassNames, IGridWithCustomColumnStyles } from './GridWithCustomColumns.styles';\r\n\r\nconst DEFAULT_SHIMMER_LINES = 5;\r\nexport interface IGridWithCustomColumns extends IShimmeredDetailsListProps, InjectedIntlProps {\r\n  columns: ICustomColumn[];\r\n  calloutArticleQuery?: string;\r\n  headingText?: string;\r\n  headingCalloutContent?: string;\r\n  styleProps?: Partial<IGridWithCustomColumnStyles>;\r\n  onSortItems?: (items: IPropertyLevelAdBlock[]) => void;\r\n  onCleanupSortItems?: () => void;\r\n  renderZeroItemsComponent?: () => JSX.Element;\r\n  helpInfoProps?: {\r\n    id: string;\r\n    calloutContent?: string;\r\n    iconButtonOnClick: () => void;\r\n    calloutOnDismiss: () => void;\r\n  };\r\n  titleHeadingLevel?: number;\r\n}\r\n\r\nexport const GridWithCustomColumns = injectIntl(function GridWithCustomColumnsComponent({\r\n  columns,\r\n  calloutArticleQuery,\r\n  items,\r\n  styleProps,\r\n  headingText,\r\n  headingCalloutContent,\r\n  intl,\r\n  shimmerLines = DEFAULT_SHIMMER_LINES,\r\n  enableShimmer = true,\r\n  helpInfoProps = undefined,\r\n  titleHeadingLevel,\r\n  onSortItems,\r\n  onCleanupSortItems,\r\n  renderZeroItemsComponent,\r\n}: IGridWithCustomColumns) {\r\n  const { detailsListStyles, detailsHeaderRootStyle, detailsRowRootStyle, headingRootStyle, disabledRowStyle } = mergeStyleSets(\r\n    getClassNames(),\r\n    styleProps\r\n  );\r\n  const { gridColumns, handleColumnHeaderClick } = useSortableGridColumns<IPropertyLevelAdBlock>(\r\n    columns,\r\n    items,\r\n    onSortItems,\r\n    onCleanupSortItems\r\n  );\r\n\r\n  return (\r\n    <div className=\"gridWithCustomColumns\">\r\n      {headingText && (\r\n        <FormTitle\r\n          intl={intl}\r\n          title={headingText}\r\n          calloutContent={headingCalloutContent}\r\n          styles={{ root: headingRootStyle }}\r\n          articleQuery={calloutArticleQuery}\r\n          {...(helpInfoProps ? helpInfoProps : {})}\r\n          titleHeadingLevel={titleHeadingLevel}\r\n        />\r\n      )}\r\n\r\n      {!enableShimmer && items.length === 0 && renderZeroItemsComponent?.()}\r\n\r\n      {(enableShimmer || items.length > 0) && (\r\n        <ShimmeredDetailsList\r\n          enableShimmer={enableShimmer}\r\n          shimmerLines={shimmerLines}\r\n          items={items}\r\n          detailsListStyles={{ root: detailsListStyles }}\r\n          onRenderRow={(detailsRowProps) => {\r\n            const { item } = detailsRowProps ?? {};\r\n            if (!detailsRowProps) {\r\n              return null;\r\n            }\r\n\r\n            return (\r\n              <DetailsRow\r\n                disabled={item?.isDisabled}\r\n                {...detailsRowProps}\r\n                styles={({ disabled }) => ({ root: `${detailsRowRootStyle} ${disabled ? disabledRowStyle : ''}` })}\r\n              />\r\n            );\r\n          }}\r\n          onRenderDetailsHeader={(headerProps) => {\r\n            if (!headerProps) {\r\n              return null;\r\n            }\r\n            return (\r\n              <DetailsHeader\r\n                {...headerProps}\r\n                styles={{ root: detailsHeaderRootStyle }}\r\n                onRenderColumnHeaderTooltip={(tooltipHostProps: IDetailsColumnRenderTooltipProps) => {\r\n                  return <TooltipHost {...tooltipHostProps} />;\r\n                }}\r\n              />\r\n            );\r\n          }}\r\n          columns={gridColumns}\r\n          selectionMode={SelectionMode.none}\r\n          onColumnHeaderClick={handleColumnHeaderClick}\r\n          layoutMode={DetailsListLayoutMode.justified}\r\n        />\r\n      )}\r\n    </div>\r\n  );\r\n});\r\n","import { getAppStore, listEntity, Publisher, UserContext } from '../../../../../@data';\r\nimport { PropertyServingConfigs } from '../../../../../@data/store/schema/models/ServingConfigs';\r\n\r\nexport async function fetchPropertiesServingConfigs(publisher: Publisher, userContext?: UserContext): Promise<PropertyServingConfigs[]> {\r\n  const effectiveUserContext = userContext || getAppStore().userContext;\r\n  const propertiesServingConfigs = await listEntity([publisher], effectiveUserContext, PropertyServingConfigs);\r\n  return propertiesServingConfigs;\r\n}\r\n","import { getAppStore, getEntity, Property, Publisher, UserContext } from '../../../../../@data';\r\nimport { PropertyServingConfig } from '../../../../../@data/store/schema/models/ServingConfigs';\r\n\r\nexport async function fetchPropertyServingConfig(\r\n  publisher: Publisher,\r\n  property: Property,\r\n  userContext?: UserContext\r\n): Promise<PropertyServingConfig> {\r\n  const effectiveUserContext = userContext || getAppStore().userContext;\r\n  const propertyServingConfig = await getEntity([publisher, property], effectiveUserContext, PropertyServingConfig);\r\n  return propertyServingConfig;\r\n}\r\n","import { getAppStore, getEntity, Publisher, UserContext } from '../../../../../@data';\r\nimport { PublisherServingConfig } from '../../../../../@data/store/schema/models/ServingConfigs';\r\n\r\nexport async function fetchPublisherServingConfig(publisher: Publisher, userContext?: UserContext): Promise<PublisherServingConfig> {\r\n  const effectiveUserContext = userContext || getAppStore().userContext;\r\n  const publisherServingConfig = await getEntity([publisher], effectiveUserContext, PublisherServingConfig);\r\n  return publisherServingConfig;\r\n}\r\n","import { getAppStore, Property, Publisher, putEntity, UserContext } from '../../../../../@data';\r\nimport { PropertyServingConfig } from '../../../../../@data/store/schema/models/ServingConfigs';\r\n\r\nexport async function updatePropertyServingConfig(\r\n  publisher: Publisher,\r\n  property: Property,\r\n  body: PropertyServingConfig,\r\n  userContext?: UserContext\r\n): Promise<PropertyServingConfig> {\r\n  const effectiveUserContext = userContext || getAppStore().userContext;\r\n  const propertyServingConfig = await putEntity([publisher, property], body, effectiveUserContext, PropertyServingConfig);\r\n  return propertyServingConfig;\r\n}\r\n","import { getAppStore, Publisher, putEntity, UserContext } from '../../../../../@data';\r\nimport { PublisherServingConfig } from '../../../../../@data/store/schema/models/ServingConfigs';\r\n\r\nexport async function updatePublisherServingConfig(\r\n  publisher: Publisher,\r\n  body: PublisherServingConfig,\r\n  userContext?: UserContext\r\n): Promise<PublisherServingConfig> {\r\n  const effectiveUserContext = userContext || getAppStore().userContext;\r\n  const publisherServingConfig = await putEntity([publisher], body, effectiveUserContext, PublisherServingConfig);\r\n  return publisherServingConfig;\r\n}\r\n","import { defineMessages } from 'react-intl';\r\nimport { VerificationCodeGenerationErrorCodes } from './@data/store/schema/VerificationCodeGenerationErrorCodes';\r\n\r\nexport default defineMessages({\r\n  [VerificationCodeGenerationErrorCodes.INVALID_INPUT]: {\r\n    id: 'profilePage.verificationErrors.InvalidInput',\r\n    defaultMessage: 'Invalid email format.',\r\n  },\r\n  [VerificationCodeGenerationErrorCodes.CODE_GENERATION_LIMIT_REACHED]: {\r\n    id: 'profilePage.verificationErrors.CodeGenerationLimitReached',\r\n    defaultMessage: 'Code generation limit reached.',\r\n  },\r\n  [VerificationCodeGenerationErrorCodes.REQUESTED_CODE_VERIFICATION_RESULT_NOT_FOUND_FOR_PUBLISHER]: {\r\n    id: 'profilePage.verificationErrors.CodeGenerationLimitReached',\r\n    defaultMessage: 'No existing code verification result found for this publisher.',\r\n  },\r\n});\r\n","import { getTheme, mergeStyleSets } from '@fluentui/react';\r\nimport { IPubcenterTheme } from '../../../../../theme';\r\nimport { ICommonStyleProps } from '../../../../types';\r\nimport { flexWithAlignCenter } from '../../../../utils/GlobalStyleUtils';\r\n\r\ntype StyleProperties = 'pageTitleStyle' | 'root' | 'deleteButton' | 'flexDisplay';\r\ntype SettingsPageStyles = Record<StyleProperties, string>;\r\n\r\nexport const getStyles = (props: ICommonStyleProps): SettingsPageStyles => {\r\n  const theme = (props.theme as unknown) as IPubcenterTheme;\r\n  const { spacing } = theme;\r\n\r\n  return mergeStyleSets({\r\n    pageTitleStyle: {\r\n      margin: `${spacing.size32} 0 ${spacing.size16} 0`,\r\n    },\r\n    root: {\r\n      margin: `0 ${spacing.size32}`,\r\n      height: '-webkit-fill-available',\r\n    },\r\n    deleteButton: {\r\n      color: theme.palette.redDark,\r\n      selectors: {\r\n        '&:focus, &:hover, &:pressed': {\r\n          color: theme.palette.redDark,\r\n        },\r\n      },\r\n    },\r\n    footerRowStyle: {\r\n      borderTop: `1px solid ${theme.palette.neutralQuaternaryAlt}`,\r\n      gap: spacing.size12,\r\n      ...flexWithAlignCenter,\r\n      margin: `${spacing.size24} -${spacing.size32} 0`,\r\n      padding: `${spacing.size16} ${spacing.size32} 0`,\r\n    },\r\n    preTextStyle: {\r\n      margin: 0,\r\n      fontFamily: 'inherit',\r\n    },\r\n    fieldsContainerStyle: {\r\n      display: 'flex',\r\n      flexWrap: 'wrap',\r\n      '> *': {\r\n        flexBasis: '50%',\r\n      },\r\n      '> *:nth-child(odd)': {\r\n        paddingRight: spacing.size24,\r\n      },\r\n      '> *:last-child': {\r\n        marginBottom: spacing.size8,\r\n      },\r\n      label: {\r\n        color: theme.palette.neutralPrimary,\r\n      },\r\n    },\r\n    flexDisplay: {\r\n      width: '100%',\r\n    },\r\n  });\r\n};\r\n\r\nexport function getClassNames<PropType>(props?: PropType): SettingsPageStyles {\r\n  return getStyles({ theme: getTheme(), ...props });\r\n}\r\n","module.exports = __webpack_public_path__ + \"static/media/Desert.a863829c.svg\";","module.exports = __webpack_public_path__ + \"static/media/AccountNavIcon.6d095328.svg\";","module.exports = __webpack_public_path__ + \"static/media/AccountNavIconActive.11bbb9e4.svg\";","module.exports = __webpack_public_path__ + \"static/media/AdBlockNavIcon.ee8f5da0.svg\";","module.exports = __webpack_public_path__ + \"static/media/AdBlockNavIconActive.44fdc6f4.svg\";","module.exports = __webpack_public_path__ + \"static/media/AdUnitNavIcon.1e43df48.svg\";","module.exports = __webpack_public_path__ + \"static/media/AdUnitNavIconActive.c7ed3e06.svg\";","module.exports = __webpack_public_path__ + \"static/media/AdsIcon.1e43df48.svg\";","module.exports = __webpack_public_path__ + \"static/media/AdsIconActive.c7ed3e06.svg\";","module.exports = __webpack_public_path__ + \"static/media/HomeNavIcon.c3c97464.svg\";","module.exports = __webpack_public_path__ + \"static/media/HomeNavIconActive.26a224b6.svg\";","module.exports = __webpack_public_path__ + \"static/media/InventoryIcon.ee28981f.svg\";","module.exports = __webpack_public_path__ + \"static/media/InventoryIconActive.571aa9ab.svg\";","module.exports = __webpack_public_path__ + \"static/media/ReportNavIcon.7d9227c3.svg\";","module.exports = __webpack_public_path__ + \"static/media/ReportNavIconActive.619105bf.svg\";","module.exports = __webpack_public_path__ + \"static/media/SiteNavIcon.ee28981f.svg\";","module.exports = __webpack_public_path__ + \"static/media/SiteNavIconActive.571aa9ab.svg\";","import { Model } from './Model';\r\n\r\nexport class BrandResponse extends Model {\r\n  public apiPath = 'metadata/xandr/brands';\r\n  public className = '';\r\n  public id: number;\r\n  public name: string;\r\n  // Need to be addressed to match camal case\r\n  // tslint:disable-next-line\r\n  public category_id: number;\r\n  // Need to be addressed to match camal case\r\n  // tslint:disable-next-line\r\n  public integration_domain: string;\r\n  public urls: string[];\r\n}\r\n\r\nexport class BrandDetailsResponse extends BrandResponse {\r\n  public apiPath = 'metadata/xandr/brands/details';\r\n  public className = '';\r\n}\r\nexport class BrandSearchResponse extends BrandResponse {\r\n  public apiPath = 'metadata/xandr/brands';\r\n  public className = '';\r\n}\r\n","import { orchestrator } from 'satcheljs';\r\nimport { IUserViewModel } from '..';\r\nimport { Log } from '../../../../../../logging/src';\r\nimport { getAppStore, onIsAcceptInviteFlowChanged, onUserInvitationCodeChanged } from '../../../../../@data';\r\nimport { getSupportedLanguagesDropDownOptions } from '../../../../../@data/utils/supportedLanguages';\r\nimport { UNAUTHORIZED_LOCAL_STORAGE_LOCALE } from '../../../../../constants';\r\nimport { onLanguageChanged } from '../../../../ad-management/Account/Settings/@data/mutatorActions';\r\nimport { getStore } from '../../../../ad-management/Account/Settings/@data/store/store';\r\nimport { onPubCenterAADLogin } from '../../../../login/@data';\r\nimport { onAcceptInvitePageInitialized, onUserChanged, validateUserInvitationCode } from '../actions';\r\n\r\norchestrator(onAcceptInvitePageInitialized, async (msg) => {\r\n  const { userContext } = getAppStore();\r\n  const { systemPreferences } = getStore().active;\r\n\r\n  Log.debug('Initializing acceptInvite page');\r\n\r\n  onUserInvitationCodeChanged(msg.invitationCode);\r\n  onLanguageChanged(msg.invitationLocale, UNAUTHORIZED_LOCAL_STORAGE_LOCALE);\r\n  if (!userContext?.token) {\r\n    Log.debug('AcceptInvite page - No user login found, prompting user login');\r\n    onIsAcceptInviteFlowChanged(true);\r\n\r\n    onPubCenterAADLogin();\r\n  } else {\r\n    Log.debug(`AcceptInvite page - UserContext is present for ${userContext.email} `);\r\n\r\n    // Fetching supported locales and verifying if the locale from the invitation URL is supported, if not default to English\r\n    const localeFromInvitationUrl = systemPreferences?.locale;\r\n    const isInvitationUrlSupported =\r\n      localeFromInvitationUrl &&\r\n      getSupportedLanguagesDropDownOptions(localeFromInvitationUrl ?? 'en-US').find(\r\n        (option) => option.key.toString() === localeFromInvitationUrl\r\n      )\r\n        ? true\r\n        : false;\r\n\r\n    const user: IUserViewModel = {\r\n      firstName: userContext.firstName ?? (userContext.name && userContext.name.split(' ')[0]),\r\n      lastName: userContext.lastName ?? (userContext.name && userContext.name.split(' ')[1]),\r\n      userName: userContext.userName ?? userContext.email,\r\n      emailAddress: userContext.email,\r\n      language: isInvitationUrlSupported ? localeFromInvitationUrl : 'en-US',\r\n      contactByEmail: true,\r\n      contactByPhone: false,\r\n    };\r\n    onUserChanged(user);\r\n\r\n    // Validate the invitation code asynchronously\r\n    validateUserInvitationCode(msg.invitationCode);\r\n  }\r\n});\r\n","import { MessageBarType } from '@fluentui/react';\r\nimport { orchestrator } from 'satcheljs';\r\nimport { getStore } from '..';\r\nimport { Log } from '../../../../../../logging/src';\r\nimport {\r\n  getAppStore,\r\n  LifeCycleStatus,\r\n  onNotificationChanged,\r\n  onSavingChanged,\r\n  onUserFirstTime,\r\n  postEntity,\r\n  User,\r\n} from '../../../../../@data';\r\nimport { onIsAcceptInviteFlowChanged } from '../../../../../@data/actions/onAcceptInviteActions';\r\nimport { UserCreateFromInvitation } from '../../../../../@data/store/schema/models/UserCreateFromInvitation';\r\nimport { WELCOME_SEND_FLAG } from '../../../../../constants/AppConstants';\r\nimport { validateSchema } from '../../../../../utils';\r\nimport { onAcceptInvitePageSubmitted, onFormCleared, onUserErrorChanged } from '../actions';\r\nimport { userAcceptInvitationErrorModel } from '../store/schema';\r\n\r\norchestrator(onAcceptInvitePageSubmitted, async (msg) => {\r\n  const { userInvitationCode, userContext} = getAppStore();\r\n  const { active } = getStore();\r\n\r\n  if (active && userInvitationCode) {\r\n    const body: UserCreateFromInvitation = {\r\n      apiPath: 'livelogin/userCreateFromInvitation',\r\n      className: 'userCreateFromInvitation',\r\n    };\r\n\r\n    try {\r\n      await validateSchema(userAcceptInvitationErrorModel(), active);\r\n      onUserErrorChanged();\r\n    } catch (e) {\r\n      onUserErrorChanged(e);\r\n      onNotificationChanged({\r\n        text: `User Accept Invitation - You have ${Object.keys(e).length} errors in the form, please fix them to continue.`,\r\n        messageBarType: MessageBarType.severeWarning,\r\n      });\r\n      return;\r\n    }\r\n\r\n    onSavingChanged(true);\r\n\r\n    body.invitationCode = userInvitationCode;\r\n    body.termsAndConditionsAccepted = true;\r\n\r\n    const userBody = new User();\r\n    userBody.name = {\r\n      firstName: active.firstName!,\r\n      lastName: active.lastName!,\r\n    };\r\n    userBody.status = LifeCycleStatus.Active;\r\n    userBody.username = active.userName;\r\n    userBody.email = active.emailAddress;\r\n    userBody.contactByEmail = active.contactByEmail;\r\n    userBody.contactByPhone = active.contactByPhone;\r\n    userBody.phoneNumber = active.phoneNumber;\r\n    userBody.language = active.language;\r\n\r\n    body.user = userBody;\r\n\r\n    try {\r\n      await postEntity([], UserCreateFromInvitation, body, userContext);\r\n      Log.write(`Created new user successfully ${userBody.username}, redirecting user to login page`);\r\n      onNotificationChanged({\r\n        text: `Created new user successfully.`,\r\n        messageBarType: MessageBarType.success,\r\n      });\r\n      sessionStorage.setItem(WELCOME_SEND_FLAG, \"true\")\r\n      onIsAcceptInviteFlowChanged(false);\r\n      onFormCleared();\r\n      onUserFirstTime(true);\r\n      window.location.replace('/login');\r\n    } catch (e) {\r\n      Log.error(`Accepting the user invitation caught an error \"${e}\". Please contact admin.`);\r\n      onNotificationChanged({\r\n        text: `Accepting the user invitation caught an error \"${e}\". Please contact admin.`,\r\n        messageBarType: MessageBarType.error,\r\n      });\r\n    } finally {\r\n      onSavingChanged(false);\r\n    }\r\n  } else {\r\n    onNotificationChanged({\r\n      text: `Accept User Invitation form is invalid`,\r\n      messageBarType: MessageBarType.warning,\r\n    });\r\n  }\r\n});\r\n","import { MessageBarType } from '@fluentui/react';\r\nimport { runInAction } from 'mobx';\r\nimport { orchestrator } from 'satcheljs';\r\nimport { Log } from '../../../../../../logging/src';\r\nimport { FetchDevTokenStatus, Model, User, getAppStore, getEntity, onNotificationChanged } from '../../../../../@data';\r\nimport { INotificationBarItem } from '../../../../../components/NotificationBar';\r\nimport { DevTokenFetch } from '../../Manage/ManagePage.types';\r\nimport { onFetchDevTokenStatus } from '../actions';\r\nimport { getStore } from '../store/store';\r\n\r\norchestrator(onFetchDevTokenStatus, async (msg) => {\r\n  const store = getStore();\r\n  const selectedItem = msg.selectedItem as Model;\r\n  let notification: INotificationBarItem = {};\r\n\r\n  if (store && selectedItem) {\r\n    const { userContext, publisher } = getAppStore();\r\n    if (userContext && publisher) {\r\n      try {\r\n        const userId = selectedItem.id;\r\n        const user = new User(userId);\r\n\r\n        Log.debug('Fetching dev token for user ' + userId);\r\n\r\n        await getEntity([publisher, user], userContext, FetchDevTokenStatus).then((response) => {\r\n          runInAction(() => {\r\n            const fetchedToken = response.toString() !== 'false' ? response.toString() : DevTokenFetch.TokenNotFound;\r\n            Log.info('Fetched dev token: ' + fetchedToken);\r\n            if (store.devTokenPanelParams) {\r\n              store.devTokenPanelParams.developerToken = fetchedToken;\r\n            }\r\n          });\r\n        });\r\n      } catch (exception) {\r\n        notification = {\r\n          text: `Fetching the token raised an error \"${exception}\"`,\r\n          messageBarType: MessageBarType.error,\r\n        };\r\n        // This will make the UI show an error message instead of infinite spinner\r\n        runInAction(() => {\r\n          if (store.devTokenPanelParams) {\r\n            store.devTokenPanelParams.developerToken = DevTokenFetch.ApiCallFailed;\r\n          }\r\n        });\r\n        Log.error('Fetching the token raised an error ' + exception.toString());\r\n        onNotificationChanged(notification);\r\n      }\r\n    }\r\n  }\r\n});\r\n","import { orchestrator } from 'satcheljs';\r\nimport { onFormCancelled, onFormCleared } from '../actions';\r\n\r\norchestrator(onFormCancelled, async () => {\r\n  onFormCleared();\r\n});\r\n","import { IUserViewModel } from '..';\r\nimport { Account, IUserRoleDetail, listEntity, Publisher, UserContext, UserRole, UserRoleEntityType } from '../../../../../@data';\r\nimport { IIdNamePair } from '../../../../../components/MultiSelectPicker';\r\n\r\nexport const fetchAccounts = async (publisher: Publisher, userContext?: UserContext): Promise<Account[]> => {\r\n  return new Promise<Account[]>(async (resolve, reject) => {\r\n    listEntity([publisher], userContext, Account)\r\n      .then(result => resolve(result))\r\n      .catch(err => reject(err));\r\n  });\r\n};\r\n\r\nexport function getDistinctUserRolesFrom(current: IUserRoleDetail[], fromUserRoles: IUserRoleDetail[]): IUserRoleDetail[] {\r\n  const distinctUserRoles: IUserRoleDetail[] = [];\r\n  current.forEach(currentAccountRole => {\r\n    const exists = fromUserRoles.some(newRole => isUserRoleSame(newRole, currentAccountRole));\r\n    if (!exists) {\r\n      distinctUserRoles.push(currentAccountRole);\r\n    }\r\n  });\r\n  return distinctUserRoles;\r\n}\r\n\r\nexport function getUserRoleDetails(active: IUserViewModel, publisherId: number): IUserRoleDetail[] {\r\n  const userRoleDetails: IUserRoleDetail[] = [];\r\n  if (active.accountRole) {\r\n    userRoleDetails.push({\r\n      entityId: publisherId,\r\n      userRole: active.accountRole,\r\n      entityType: UserRoleEntityType.Customer\r\n    });\r\n\r\n    if ([UserRole.AccountManager, UserRole.AdView, UserRole.ListManager, UserRole.ReportUser].includes(active.accountRole)) {\r\n      let selectedAccounts: IIdNamePair[] = [];\r\n      switch (active.accountRole) {\r\n        case UserRole.AccountManager:\r\n          selectedAccounts = active.AccountManagerAccountsSelected!;\r\n          break;\r\n        case UserRole.AdView:\r\n          selectedAccounts = active.AdViewAccountsSelected!;\r\n          break;\r\n        case UserRole.ListManager:\r\n          selectedAccounts = active.ListManagerAccountsSelected!;\r\n          break;\r\n\r\n        case UserRole.ReportUser:\r\n          selectedAccounts = active.ReportUserAccounstSelected!;\r\n          break;\r\n        default:\r\n          break;\r\n      }\r\n      selectedAccounts.forEach(selectedAccount => {\r\n        userRoleDetails.push({\r\n          entityId: selectedAccount.id,\r\n          userRole: active.accountRole!,\r\n          entityType: UserRoleEntityType.Account\r\n        });\r\n      });\r\n    }\r\n  }\r\n  return userRoleDetails;\r\n}\r\n\r\nexport function isDeepUserRolesEqual(a: IUserRoleDetail[], b: IUserRoleDetail[]): boolean {\r\n  let isSame: boolean = true;\r\n  a.forEach(eachRole => {\r\n    if (b.some(someRole => isUserRoleDifferent(someRole, eachRole))) {\r\n      isSame = false;\r\n    }\r\n  });\r\n  return isSame;\r\n}\r\n\r\nfunction isUserRoleDifferent(a: IUserRoleDetail, b: IUserRoleDetail): boolean {\r\n  return a.entityId !== b.entityId || a.entityType !== b.entityType || a.userRole !== b.userRole;\r\n}\r\n\r\nfunction isUserRoleSame(a: IUserRoleDetail, b: IUserRoleDetail): boolean {\r\n  // tslint:disable:triple-equals\r\n  // eslint-disable-next-line\r\n  return a.entityId == b.entityId && a.entityType == b.entityType && a.userRole == b.userRole;\r\n  // tslint:enable: triple-equals\r\n}\r\n","import { MessageBarType } from '@fluentui/react';\r\nimport { orchestrator } from 'satcheljs';\r\nimport {\r\n  Account,\r\n  getAppStore,\r\n  getEntity,\r\n  IUserName,\r\n  listEntity,\r\n  onLoadingChanged,\r\n  onLoadingSetting,\r\n  onLoadingWaiting,\r\n  onNotificationChanged,\r\n  Publisher,\r\n  User,\r\n} from '../../../../../@data';\r\nimport { FormState } from '../../../../../components/Form';\r\nimport { IIdNamePair } from '../../../../../components/MultiSelectPicker';\r\nimport { setPublisherContext } from '../../../@data/service/PartnerManagementService';\r\nimport { onFormInitialized, onRawChanged, onUserChanged, onUserErrorChanged } from '../actions';\r\nimport { fetchAccounts } from '../services/UserService';\r\nimport { IUserViewModel } from '../store/schema';\r\n\r\norchestrator(onFormInitialized, async (msg) => {\r\n  const { userContext } = getAppStore();\r\n\r\n  const user: IUserViewModel = {\r\n    accountsList: [],\r\n  };\r\n\r\n  const publisherId = parseInt(msg.publisherId, 10);\r\n  if (!isNaN(publisherId)) {\r\n    const publisher = new Publisher(publisherId);\r\n\r\n    try {\r\n      setPublisherContext(publisher);\r\n      onUserErrorChanged();\r\n      onLoadingChanged(true);\r\n      onLoadingSetting(false);\r\n      const timeout = 30000;\r\n      const id = setTimeout(() => onLoadingWaiting(true), timeout);\r\n      const response = await listEntity([publisher], userContext, Account);\r\n\r\n      user.accountsList = response ? response.map((f) => ({ id: f.id, name: f.name } as IIdNamePair)) : [];\r\n      user.allAccounts = response ? response.map((f) => ({ id: f.id, name: f.name } as IIdNamePair)) : [];\r\n      user.localeId = 1033; // default to US-en\r\n\r\n      if (msg.mode === FormState.Edit && msg.entityId) {\r\n        const userId = parseInt(msg.entityId, 10);\r\n        const userWithId = new User(userId);\r\n        const rawUser = await getEntity<User>([publisher, userWithId], userContext);\r\n\r\n        user.isLegacyUser = rawUser.windowsLiveIdUsername ? false : true;\r\n        user.firstName = (rawUser.name as IUserName).firstName;\r\n        user.lastName = (rawUser.name as IUserName).lastName;\r\n        user.emailAddress = rawUser.email;\r\n        user.phoneNumber = rawUser.contactInfo ? rawUser.contactInfo.homePhone : '';\r\n        user.faxNumber = rawUser.contactInfo ? rawUser.contactInfo.fax : '';\r\n        user.userName = rawUser.username;\r\n        user.language = rawUser.language;\r\n        user.SecretQuestion = rawUser.secretQuestion;\r\n        user.contactByEmail = rawUser.contactByEmail;\r\n        user.contactByPhone = rawUser.contactByPhone;\r\n        user.contactByPost = rawUser.contactByPost;\r\n        user.accountRole = rawUser.userRoleDetails ? rawUser.userRoleDetails[0].userRole : undefined;\r\n        user.userRoleDetails = rawUser.userRoleDetails;\r\n\r\n        // set selected account list for each role after figure out the entity type mapping\r\n        const accountManagerAccountList: number[] = [];\r\n        const reportUserAccountList: number[] = [];\r\n        const listManagerAccountList: number[] = [];\r\n        const adViewAccountList: number[] = [];\r\n\r\n        if (rawUser.userRoleDetails) {\r\n          rawUser.userRoleDetails.forEach((i) => {\r\n            switch (i.userRole) {\r\n              case 'AccountManager':\r\n                accountManagerAccountList.push(i.entityId);\r\n                break;\r\n              case 'ReportUser':\r\n                reportUserAccountList.push(i.entityId);\r\n                break;\r\n              case 'ListManager':\r\n                listManagerAccountList.push(i.entityId);\r\n                break;\r\n              case 'AdViewer':\r\n                adViewAccountList.push(i.entityId);\r\n                break;\r\n            }\r\n          });\r\n        }\r\n        const allAccounts = await fetchAccounts(publisher, userContext);\r\n        clearTimeout(id);\r\n\r\n        const accountManagerResponse = allAccounts.filter((acc) => {\r\n          return accountManagerAccountList.some((accountManagerAccount) => accountManagerAccount === acc.id);\r\n        });\r\n        user.AccountManagerAccountsSelected = accountManagerResponse.map((f) => ({ id: f.id, name: f.name } as IIdNamePair));\r\n\r\n        const reportUserResponse = allAccounts.filter((acc) => {\r\n          return reportUserAccountList.some((reportUserAccount) => reportUserAccount === acc.id);\r\n        });\r\n        user.ReportUserAccounstSelected = reportUserResponse.map((f) => ({ id: f.id, name: f.name } as IIdNamePair));\r\n\r\n        const listManagerResponse = allAccounts.filter((acc) => {\r\n          return listManagerAccountList.some((account) => account === acc.id);\r\n        });\r\n        user.ListManagerAccountsSelected = listManagerResponse.map((f) => ({ id: f.id, name: f.name } as IIdNamePair));\r\n\r\n        const adViewResponse = allAccounts.filter((acc) => {\r\n          return adViewAccountList.some((account) => account === acc.id);\r\n        });\r\n        user.AdViewAccountsSelected = adViewResponse.map((f) => ({ id: f.id, name: f.name } as IIdNamePair));\r\n\r\n        onRawChanged(rawUser);\r\n      } else {\r\n        onRawChanged();\r\n      }\r\n\r\n      onUserChanged(user);\r\n    } catch (e) {\r\n      onNotificationChanged({\r\n        text: 'Failed to load entity',\r\n        messageBarType: MessageBarType.severeWarning,\r\n      });\r\n    } finally {\r\n      onLoadingChanged(false);\r\n    }\r\n  } else {\r\n    onNotificationChanged({\r\n      text: `You have arrived in an invalid state, please report.`,\r\n      messageBarType: MessageBarType.severeWarning,\r\n    });\r\n  }\r\n});\r\n","import { MessageBarType } from '@fluentui/react';\r\nimport { orchestrator } from 'satcheljs';\r\nimport {\r\n  getAppStore,\r\n  getEntity,\r\n  onNavigateBack,\r\n  onNotificationChanged,\r\n  onSavingChanged,\r\n  patchEntity,\r\n  postEntity,\r\n  Publisher,\r\n  PublisherTier,\r\n  UserInvitation,\r\n  UserRoleEntityType,\r\n  UserRoleUpdate,\r\n} from '../../../../../@data';\r\nimport { UserInvitationType } from '../../../../../@data/store/schema/enums/UserInvitationType';\r\nimport { FormState } from '../../../../../components/Form';\r\nimport { INotificationBarItem } from '../../../../../components/NotificationBar';\r\nimport { validateSchema } from '../../../../../utils';\r\nimport { RouteName } from '../../../@data';\r\nimport { createReturnUrl } from '../../../@data/service/PartnerManagementService';\r\nimport { onFormCleared, onFormIdChanged, onFormSubmitted, onUserErrorChanged } from '../actions';\r\nimport { getDistinctUserRolesFrom, getUserRoleDetails, isDeepUserRolesEqual } from '../services/UserService';\r\nimport { userRoleErrorModel } from '../store/schema/UserErrorModel';\r\nimport { userInvitationErrorModel } from '../store/schema/UserInvitationErrorModel';\r\nimport { getStore } from '../store/store';\r\n\r\norchestrator(onFormSubmitted, async (msg) => {\r\n  const { publisher, userContext } = getAppStore();\r\n  const { active, raw } = getStore();\r\n  let notification: INotificationBarItem = {};\r\n  if (publisher && raw) {\r\n    try {\r\n      if (msg.mode === FormState.Edit) {\r\n        try {\r\n          await validateSchema(userRoleErrorModel(), active);\r\n          onUserErrorChanged();\r\n        } catch (e) {\r\n          onUserErrorChanged(e);\r\n          return;\r\n        }\r\n        onSavingChanged(true);\r\n\r\n        let entity: UserRoleUpdate | undefined;\r\n        entity = new UserRoleUpdate();\r\n\r\n        entity.eTag = raw.userRoleDetailsETag;\r\n        const existingUserRoles = raw.userRoleDetails;\r\n        const editedUserRoles = getUserRoleDetails(active, publisher.id!);\r\n\r\n        if (existingUserRoles && !isDeepUserRolesEqual(existingUserRoles, editedUserRoles)) {\r\n          entity.addedRoles = [];\r\n          entity.removedRoles = [];\r\n          // there will always be only one customer level role\r\n          const newCustomerLevelRole = editedUserRoles.filter((e) => e.entityType === UserRoleEntityType.Customer);\r\n\r\n          // there could be many accountLevelRoles\r\n          const newAccountLevelRoles = editedUserRoles.filter((e) => e.entityType === UserRoleEntityType.Account);\r\n\r\n          // there existed some role earlier : will always be the case but sanity checking\r\n          if (existingUserRoles && existingUserRoles.length > 0) {\r\n            const existingCustomerRole = existingUserRoles.filter((e) => e.entityType === UserRoleEntityType.Customer);\r\n\r\n            // if new customer role is same as than current role\r\n            // 1. no need of adding customer role\r\n            // 2. we need to see which account role is missing in old from new : add\r\n            // 3. we need to see which account role is missing in new from old: remove\r\n            // else\r\n            // 1. remove old customer\r\n            // 2. add new customer\r\n            // 3. remove all old account level (since customer level is changed now)\r\n            // 4. add all new account\r\n            if (isDeepUserRolesEqual(newCustomerLevelRole, existingCustomerRole)) {\r\n              const existingAccountRoles = existingUserRoles.filter((e) => e.entityType === UserRoleEntityType.Account);\r\n              entity.removedRoles = getDistinctUserRolesFrom(existingAccountRoles, newAccountLevelRoles);\r\n              entity.addedRoles = getDistinctUserRolesFrom(newAccountLevelRoles, existingAccountRoles);\r\n            } else {\r\n              entity.removedRoles = existingUserRoles;\r\n              entity.addedRoles = editedUserRoles;\r\n            }\r\n          } else {\r\n            entity.addedRoles = editedUserRoles;\r\n          }\r\n\r\n          entity = await patchEntity([publisher, raw], UserRoleUpdate, entity, userContext);\r\n          if (entity && entity.id) {\r\n            onFormIdChanged(entity.id);\r\n          }\r\n\r\n          notification = {\r\n            text: `Edited user role for user ${raw.id} successfully`,\r\n            messageBarType: MessageBarType.success,\r\n          };\r\n        }\r\n      } else {\r\n        try {\r\n          await validateSchema(userInvitationErrorModel(), active);\r\n\r\n          onUserErrorChanged();\r\n        } catch (e) {\r\n          onUserErrorChanged(e);\r\n          onNotificationChanged({\r\n            text: `User Invitation - You have ${Object.keys(e).length} errors in the form, please fix them to continue.`,\r\n            messageBarType: MessageBarType.severeWarning,\r\n          });\r\n          return;\r\n        }\r\n        onSavingChanged(true);\r\n\r\n        let entity: UserInvitation;\r\n        entity = new UserInvitation();\r\n        entity.firstName = active.firstName;\r\n        entity.lastName = active.lastName;\r\n        entity.email = active.emailAddress;\r\n        entity.entityRoles = [];\r\n        entity.apiPath = undefined;\r\n        entity.lcid = active.localeId;\r\n\r\n        const publisherDetails = await getEntity<Publisher>([publisher], userContext);\r\n        entity.userInvitationType = UserInvitationType.Default;\r\n        if (\r\n          publisherDetails.publisherTier === PublisherTier.SelfServe3rdParty ||\r\n          publisherDetails.publisherTier === PublisherTier.SelfServeStandard\r\n        ) {\r\n          entity.userInvitationType = UserInvitationType.PubCenterSelfServeUser;\r\n        }\r\n\r\n        entity.entityRoles = getUserRoleDetails(active, publisher.id!);\r\n        entity = await postEntity([publisher], UserInvitation, entity, userContext);\r\n\r\n        if (entity && entity.id) {\r\n          onFormIdChanged(entity.id);\r\n        }\r\n\r\n        notification = {\r\n          text: `Invite new user successfully!`,\r\n          messageBarType: MessageBarType.success,\r\n        };\r\n      }\r\n      const returnUrl = createReturnUrl(RouteName.user, String(publisher.id));\r\n      onNavigateBack(msg.routeHistory, returnUrl);\r\n      onFormCleared();\r\n    } catch (e) {\r\n      notification = {\r\n        text: `Submitting the user form \"${FormState[msg.mode]}\" caught an error \"${e}\"`,\r\n        messageBarType: MessageBarType.error,\r\n      };\r\n    } finally {\r\n      onSavingChanged(false);\r\n    }\r\n  } else {\r\n    notification = {\r\n      text: `User form \"${FormState[msg.mode]}\" is invalid id ${active.id}`,\r\n      messageBarType: MessageBarType.warning,\r\n    };\r\n  }\r\n  onNotificationChanged(notification);\r\n});\r\n","import { array, mixed, object } from 'yup';\r\nimport { IdNamePairErrorModel, UserRole } from '../../../../../../@data';\r\nimport { ArrayObservableSchemaYupType } from '../../../../../../utils';\r\nimport { IUserViewModel } from './IUserViewModel';\r\n\r\nexport function userRoleErrorModel() {\r\n  return object<IUserViewModel>().shape({\r\n    AccountManagerAccountsSelected: new ArrayObservableSchemaYupType().of(IdNamePairErrorModel).when('accountRole', {\r\n      is: UserRole.AccountManager,\r\n      then: array()\r\n        .min(1)\r\n        .required(),\r\n\r\n      otherwise: array()\r\n    }),\r\n    ReportUserAccounstSelected: new ArrayObservableSchemaYupType().of(IdNamePairErrorModel).when('accountRole', {\r\n      is: UserRole.ReportUser,\r\n      then: array()\r\n        .required()\r\n        .min(1),\r\n      otherwise: array()\r\n    }),\r\n    ListManagerAccountsSelected: new ArrayObservableSchemaYupType().of(IdNamePairErrorModel).when('accountRole', {\r\n      is: UserRole.ListManager,\r\n      then: array()\r\n        .required()\r\n        .min(1),\r\n      otherwise: array()\r\n    }),\r\n    AdViewAccountsSelected: new ArrayObservableSchemaYupType().of(IdNamePairErrorModel).when('accountRole', {\r\n      is: UserRole.AdView,\r\n      then: array()\r\n        .required()\r\n        .min(1),\r\n      otherwise: array()\r\n    }),\r\n    accountRole: mixed()\r\n      .oneOf([\r\n        UserRole.AccountManager,\r\n        UserRole.AdView,\r\n        UserRole.ListManager,\r\n        UserRole.PublisherAdmin,\r\n        UserRole.ReportUser,\r\n        UserRole.SuperAdmin\r\n      ])\r\n      .required()\r\n  });\r\n}\r\n","import { array, mixed, number, object, string } from 'yup';\r\nimport { IdNamePairErrorModel, UserRole } from '../../../../../../@data';\r\nimport { ArrayObservableSchemaYupType } from '../../../../../../utils';\r\nimport { IUserViewModel } from './IUserViewModel';\r\n\r\nexport function userInvitationErrorModel() {\r\n  return object<IUserViewModel>().shape({\r\n    firstName: string()\r\n      .trim()\r\n      .required(),\r\n    lastName: string()\r\n      .trim()\r\n      .required(),\r\n    emailAddress: string()\r\n      .email()\r\n      .required(),\r\n    localeId: number().required(),\r\n    AccountManagerAccountsSelected: new ArrayObservableSchemaYupType().of(IdNamePairErrorModel).when('accountRole', {\r\n      is: UserRole.AccountManager,\r\n      then: array()\r\n        .min(1)\r\n        .required(),\r\n\r\n      otherwise: array()\r\n    }),\r\n    ReportUserAccounstSelected: new ArrayObservableSchemaYupType().of(IdNamePairErrorModel).when('accountRole', {\r\n      is: UserRole.ReportUser,\r\n      then: array()\r\n        .required()\r\n        .min(1),\r\n      otherwise: array()\r\n    }),\r\n    ListManagerAccountsSelected: new ArrayObservableSchemaYupType().of(IdNamePairErrorModel).when('accountRole', {\r\n      is: UserRole.ListManager,\r\n      then: array()\r\n        .required()\r\n        .min(1),\r\n      otherwise: array()\r\n    }),\r\n    AdViewAccountsSelected: new ArrayObservableSchemaYupType().of(IdNamePairErrorModel).when('accountRole', {\r\n      is: UserRole.AdView,\r\n      then: array()\r\n        .required()\r\n        .min(1),\r\n      otherwise: array()\r\n    }),\r\n    accountRole: mixed()\r\n      .oneOf([\r\n        UserRole.AccountManager,\r\n        UserRole.AdView,\r\n        UserRole.ListManager,\r\n        UserRole.PublisherAdmin,\r\n        UserRole.ReportUser,\r\n        UserRole.SuperAdmin\r\n      ])\r\n      .required()\r\n  });\r\n}\r\n","import { MessageBarType } from '@fluentui/react';\r\nimport { orchestrator } from 'satcheljs';\r\nimport { getStore } from '..';\r\nimport {\r\n  deleteEntity,\r\n  getAppStore,\r\n  getEntity,\r\n  onNotificationChanged,\r\n  postEntity,\r\n  Publisher,\r\n  PublisherTier,\r\n  showLoadingToastNotification,\r\n  showSuccessToastNotification,\r\n  UserInvitation,\r\n  UserInvitationResend,\r\n  UserInvitationType,\r\n} from '../../../../../@data';\r\nimport { FormState } from '../../../../../components/Form';\r\nimport { INotificationBarItem } from '../../../../../components/NotificationBar';\r\nimport messages from '../../UserPage.messages';\r\nimport { onUserInvitationChanged, onUserInvitationExpiryChanged, onUserInvitationsChanged } from '../actions';\r\n\r\norchestrator(onUserInvitationChanged, async (msg) => {\r\n  const { publisher, userContext } = getAppStore();\r\n  const selectedItem = msg.value as UserInvitation;\r\n  let notification: INotificationBarItem = {};\r\n\r\n  if (selectedItem && publisher && userContext) {\r\n    const entityInstance = new UserInvitation();\r\n    entityInstance.id = selectedItem.id;\r\n    const publisherDetails = await getEntity<Publisher>([publisher], userContext);\r\n    entityInstance.userInvitationType = UserInvitationType.Default;\r\n    if (\r\n      publisherDetails.publisherTier === PublisherTier.SelfServe3rdParty ||\r\n      publisherDetails.publisherTier === PublisherTier.SelfServeStandard\r\n    ) {\r\n      entityInstance.userInvitationType = UserInvitationType.PubCenterSelfServeUser;\r\n    }\r\n    try {\r\n      if (msg.mode === FormState.Resend) {\r\n        showLoadingToastNotification({\r\n          textMessageDescriptor: messages.resendingUserInvitation,\r\n          intlMessageValues: { email: selectedItem.email },\r\n          onDismiss: async () => {\r\n            await postEntity([publisher, entityInstance], UserInvitationResend, entityInstance, userContext);\r\n\r\n            /* Updating the user invitation expiry date on successful resend */\r\n            onUserInvitationExpiryChanged(selectedItem.id, new Date(new Date().setDate(new Date().getDate() + 30)));\r\n\r\n            showSuccessToastNotification({\r\n              textMessageDescriptor: messages.resendUserInvitationSuccess,\r\n              intlMessageValues: { email: selectedItem.email },\r\n            });\r\n          },\r\n        });\r\n      } else if (msg.mode === FormState.Delete) {\r\n        const result = await deleteEntity([publisher, entityInstance], undefined, userContext);\r\n\r\n        if (result) {\r\n          let userInvitations = getStore().userInvitations;\r\n\r\n          if (userInvitations) {\r\n            userInvitations = userInvitations.filter((item) => item.id !== selectedItem.id);\r\n          }\r\n          onUserInvitationsChanged(userInvitations);\r\n\r\n          showSuccessToastNotification({\r\n            textMessageDescriptor: messages.deletedUserInvitationSuccess,\r\n            intlMessageValues: { firstName: selectedItem.firstName },\r\n          });\r\n        }\r\n      }\r\n    } catch (e) {\r\n      notification = {\r\n        text: (msg.mode === FormState.Delete ? 'Deleting' : 'Resending ') + `the invitation caught an error \"${e}\"`,\r\n        messageBarType: MessageBarType.error,\r\n      };\r\n      onNotificationChanged(notification);\r\n    }\r\n  }\r\n});\r\n","import { MessageBarType } from '@fluentui/react';\r\nimport { runInAction } from 'mobx';\r\nimport { orchestrator } from 'satcheljs';\r\nimport { Log } from '../../../../../../logging/src';\r\nimport { GenerateDevToken, Model, User, getAppStore, getEntity, onNotificationChanged } from '../../../../../@data';\r\nimport { INotificationBarItem } from '../../../../../components/NotificationBar';\r\nimport { DevTokenFetch } from '../../Manage/ManagePage.types';\r\nimport { onGenerateDevTokenStatus } from '../actions';\r\nimport { getStore } from '../store/store';\r\n\r\norchestrator(onGenerateDevTokenStatus, async (msg) => {\r\n  const store = getStore();\r\n  const selectedItem = msg.selectedItem as Model;\r\n  let notification: INotificationBarItem = {};\r\n\r\n  if (store && selectedItem) {\r\n    const { userContext, publisher } = getAppStore();\r\n    if (userContext && publisher) {\r\n      try {\r\n        const userId = selectedItem.id;\r\n        const user = new User(userId);\r\n        Log.debug('Generating a new dev token for user ' + userId);\r\n\r\n        // While awaiting the call to generate new dev token, the intermediate value of token is set to undefined\r\n        // This facilitates the spinner to show up with the following text\r\n        runInAction(() => {\r\n          if (store.devTokenPanelParams) {\r\n            store.devTokenPanelParams.developerToken = undefined;\r\n            store.devTokenPanelParams.SpinnerText = 'Generating Developer Token...';\r\n          }\r\n        });\r\n\r\n        await getEntity([publisher, user], userContext, GenerateDevToken).then((response) => {\r\n          runInAction(() => {\r\n            const generatedToken = response.toString();\r\n            Log.info('Generated dev token: ' + generatedToken);\r\n            if (store.devTokenPanelParams) {\r\n              store.devTokenPanelParams.developerToken = generatedToken;\r\n            }\r\n          });\r\n        });\r\n        notification = {\r\n          text: 'Developer token has been successfully generated for the selected user ' + userId,\r\n          messageBarType: MessageBarType.success,\r\n        };\r\n      } catch (exception) {\r\n        notification = {\r\n          text: `Generating the token raised an error \"${exception}\"`,\r\n          messageBarType: MessageBarType.error,\r\n        };\r\n        // This will make the UI show an error message instead of infinite spinner\r\n        runInAction(() => {\r\n          if (store.devTokenPanelParams) {\r\n            store.devTokenPanelParams.developerToken = DevTokenFetch.ApiCallFailed;\r\n          }\r\n        });\r\n        Log.error('Generating the token raised an error ' + exception.toString());\r\n      }\r\n      onNotificationChanged(notification);\r\n    }\r\n  }\r\n});\r\n","import { MessageBarType } from '@fluentui/react';\r\nimport { orchestrator } from 'satcheljs';\r\nimport { Log } from '../../../../../../logging/src';\r\nimport { getAppStore, listEntity, onNotificationChanged, User } from '../../../../../@data';\r\nimport { onFetchingUsersData, onFetchUsersLoading, onUsersChanged } from '../actions';\r\nimport { onManagePageInitialized } from '../actions/onManagePageInitialized';\r\nimport { getStore } from '../store/store';\r\n\r\norchestrator(onManagePageInitialized, async (msg) => {\r\n  try {\r\n    const { publisher, userContext } = getAppStore();\r\n    const users = getStore().users;\r\n\r\n    if (users === undefined || users.length === 0) {\r\n      onFetchUsersLoading(true);\r\n    }\r\n    onFetchingUsersData(true);\r\n\r\n    if (userContext && publisher) {\r\n      const fetchedUsers = await listEntity([publisher], userContext, User);\r\n      onUsersChanged(fetchedUsers);\r\n    }\r\n  } catch (error) {\r\n    Log.error(error);\r\n    onNotificationChanged({ messageBarType: MessageBarType.error, text: 'Failed to load users' });\r\n  } finally {\r\n    onFetchUsersLoading(false);\r\n    onFetchingUsersData(false);\r\n  }\r\n});\r\n","import { orchestrator } from 'satcheljs';\r\nimport { Log } from '../../../../../../logging/src';\r\nimport { User, getAppStore, postEntity } from '../../../../../@data';\r\nimport { WelcomeToPubcenterEmail } from '../../../../../@data/store/schema/models/welcomeToPubcenterEmail';\r\nimport { sendWelcomeToPubcenterEmail } from '../actions';\r\n\r\norchestrator(sendWelcomeToPubcenterEmail, async () => {\r\n\r\n\r\n  const { userContext, publisher} = getAppStore();\r\n  if (!publisher || ! userContext) {\r\n    return;\r\n  }\r\n  try {\r\n    const user = new User(userContext.id);\r\n    await postEntity([publisher!, user], WelcomeToPubcenterEmail, undefined, userContext);\r\n  } catch (e) {\r\n    Log.error(e);\r\n  }\r\n});","import { MessageBarType } from '@fluentui/react';\r\nimport { orchestrator } from 'satcheljs';\r\nimport { Log } from '../../../../../../logging/src';\r\nimport { getAppStore, listEntity, onNotificationChanged, UserInvitation } from '../../../../../@data';\r\nimport { onFetchingUserInvitationsData, onFetchUserInvitationsLoading, onUserInvitationsChanged } from '../actions';\r\nimport { onUserInvitationsGridInitialized } from '../actions/onManagePageInitialized';\r\nimport { getStore } from '../store/store';\r\n\r\norchestrator(onUserInvitationsGridInitialized, async (msg) => {\r\n  try {\r\n    const { publisher, userContext } = getAppStore();\r\n    const userInvitations = getStore().userInvitations;\r\n\r\n    if (userInvitations === undefined || userInvitations.length === 0) {\r\n      onFetchUserInvitationsLoading(true);\r\n    }\r\n    onFetchingUserInvitationsData(true);\r\n\r\n    if (userContext && publisher) {\r\n      const fetchedUserInvitations = await listEntity([publisher], userContext, UserInvitation);\r\n      fetchedUserInvitations.forEach((userInvitation) => {\r\n        if (!!userInvitation.expirationDate) {\r\n          userInvitation.expirationDate = new Date(userInvitation.expirationDate).toISOString();\r\n        }\r\n      });\r\n      onUserInvitationsChanged(fetchedUserInvitations);\r\n    }\r\n  } catch (error) {\r\n    Log.error(error);\r\n    onNotificationChanged({ messageBarType: MessageBarType.error, text: 'Failed to load user invitations' });\r\n  } finally {\r\n    onFetchUserInvitationsLoading(false);\r\n    onFetchingUserInvitationsData(false);\r\n  }\r\n});\r\n","import { MessageBarType } from '@fluentui/react';\r\nimport { orchestrator } from 'satcheljs';\r\nimport { Log } from '../../../../../../logging/src';\r\nimport { onNotificationChanged } from '../../../../../@data';\r\nimport { uiConfig } from '../../../../../config/ui.config';\r\nimport { validateUserInvitationCode } from '../actions';\r\n\r\norchestrator(validateUserInvitationCode, async ({ invitationCode }) => {\r\n  if (invitationCode !== 'redirect') {\r\n    const defaultHeaders = [['content-type', 'application/json']];\r\n    const headers = new Headers([...defaultHeaders]);\r\n    const body = { invitationCode: invitationCode };\r\n    const url = uiConfig.getApiBaseAddress() + '/public/userInvitations/validate';\r\n\r\n    try {\r\n      const response = await fetch(url, {\r\n        method: 'POST',\r\n        headers: headers,\r\n        body: JSON.stringify(body),\r\n      });\r\n\r\n      if (!response.ok && response.status === 400) {\r\n        onNotificationChanged({\r\n          text: 'Invalid invitation code, please check with your admin to resend user invitation',\r\n          messageBarType: MessageBarType.error,\r\n          suppressAutoDismiss: true,\r\n        });\r\n        return;\r\n      }\r\n    } catch (error) {\r\n      Log.error(error);\r\n    }\r\n  }\r\n});\r\n","import { when } from 'mobx';\r\nimport { orchestrator } from 'satcheljs';\r\nimport { Log } from '../../../../../../logging/src';\r\nimport {\r\n  getCurrentPublisherId,\r\n  getPublisherCountry,\r\n  isPublisherProfileDataPresent,\r\n  onLoadingChanged,\r\n  showErrorToastNotification,\r\n} from '../../../../../@data';\r\nimport { fetchStatesOfCountry } from '../../../../../@data/@metadata/actions';\r\nimport { isStatesPresentForCountry } from '../../../../../@data/@metadata/store/selectors';\r\nimport { getPrimaryUserId } from '../../../../../@data/store';\r\nimport messages from '../../ProfilePage.messages';\r\nimport { editProfileAction, fetchPublisherProfileDetailsAction, fetchUserDetailsAction } from '../actions';\r\nimport { initializeProfileActiveStateFromRawDataAction, setProfileEditModeAction } from '../actions/mutatorActions';\r\nimport { isPrimaryUserDataPresent } from '../store/selectors';\r\n\r\norchestrator(editProfileAction, async () => {\r\n  try {\r\n    onLoadingChanged(true);\r\n\r\n    when(\r\n      () => {\r\n        const publisherCountry = getPublisherCountry();\r\n        return !!publisherCountry && !isStatesPresentForCountry(publisherCountry);\r\n      },\r\n      () => fetchStatesOfCountry(getPublisherCountry()!)\r\n    );\r\n\r\n    const primaryUserId = getPrimaryUserId();\r\n    if (primaryUserId) {\r\n      fetchUserDetailsAction(primaryUserId);\r\n    }\r\n\r\n    fetchPublisherProfileDetailsAction(getCurrentPublisherId());\r\n\r\n    await when(() => {\r\n      const publisherCountry = getPublisherCountry();\r\n      return (\r\n        isPublisherProfileDataPresent() && isPrimaryUserDataPresent() && !!publisherCountry && isStatesPresentForCountry(publisherCountry)\r\n      );\r\n    });\r\n\r\n    initializeProfileActiveStateFromRawDataAction();\r\n    setProfileEditModeAction(true);\r\n  } catch (error) {\r\n    showErrorToastNotification({ textMessageDescriptor: messages.failedToLoadProfileDetails });\r\n    Log.error(`Failed to load profile details: ${error.message}`);\r\n  } finally {\r\n    onLoadingChanged(false);\r\n  }\r\n});\r\n","import { orchestrator } from 'satcheljs';\r\nimport { EntityEvaluation, getAppStore, listEntity } from '../../../../../@data';\r\nimport { AppealHistory } from '../../../../../@data/store/schema/models/AppealHistory';\r\nimport { fetchAppealHistory, setAppealHistory } from '../actions';\r\n\r\norchestrator(fetchAppealHistory, async () => {\r\n  const { publisher, userContext } = getAppStore();\r\n\r\n  // fetch appeal history\r\n  if (publisher && userContext) {\r\n    try {\r\n      const appealHistory: AppealHistory[] = await listEntity([new EntityEvaluation(), publisher], userContext, AppealHistory);\r\n      setAppealHistory(appealHistory);\r\n    } catch (e) {\r\n      console.log('Failed to fetch appeal history');\r\n    }\r\n  }\r\n});\r\n","import { orchestrator } from 'satcheljs';\r\nimport { showErrorToastNotification, User } from '../../../../../@data';\r\nimport messages from '../../ProfilePage.messages';\r\nimport { fetchUserDetailsAction } from '../actions';\r\nimport { setPrimaryUserDetailsAction } from '../actions/mutatorActions';\r\nimport { fetchUserDetails } from '../services/fetchUserDetails';\r\n\r\norchestrator(fetchUserDetailsAction, async ({ userId }) => {\r\n  try {\r\n    if (!userId) {\r\n      return;\r\n    }\r\n\r\n    const userDetails = await fetchUserDetails(new User(userId));\r\n    setPrimaryUserDetailsAction(userDetails);\r\n  } catch (error) {\r\n    showErrorToastNotification({ textMessageDescriptor: messages.loadUserDetailsFailed });\r\n  }\r\n});\r\n","import { orchestrator } from 'satcheljs';\r\nimport { Log } from '../../../../../../logging/src';\r\nimport { onPublisherChanged, Publisher, showErrorToastNotification, StoragePublisherKey } from '../../../../../@data';\r\nimport messages from '../../ProfilePage.messages';\r\nimport { fetchPublisherProfileDetailsAction } from '../actions';\r\nimport { setPublisherProfileDetailsAction } from '../actions/mutatorActions';\r\nimport { fetchPublisherProfileDetails } from '../services/fetchPublisherProfileDetails';\r\n\r\norchestrator(fetchPublisherProfileDetailsAction, async ({ publisherId }) => {\r\n  try {\r\n    if (!publisherId) {\r\n      return;\r\n    }\r\n\r\n    const publisherProfileDetails = await fetchPublisherProfileDetails(new Publisher(publisherId));\r\n    const publisher = new Publisher(publisherProfileDetails.id, publisherProfileDetails.name);\r\n    publisher.publisherTier = publisherProfileDetails.publisherTier;\r\n    publisher.enableDefaultTythonV2Reporting = publisherProfileDetails.enableDefaultTythonV2Reporting;\r\n    localStorage.setItem(StoragePublisherKey, JSON.stringify(publisher));\r\n    setPublisherProfileDetailsAction(publisherProfileDetails);\r\n    onPublisherChanged(publisherProfileDetails);\r\n  } catch (error) {\r\n    showErrorToastNotification({ textMessageDescriptor: messages.failedToLoadPublisherDetails });\r\n    Log.error(`Failed to load publisher details: ${error.message}`);\r\n  }\r\n});\r\n","import { when } from 'mobx';\r\nimport { orchestrator } from 'satcheljs';\r\nimport { Log } from '../../../../../../logging/src';\r\nimport {\r\n  IPhoneVerificationData,\r\n  PhoneVerificationGenerateCode,\r\n  PhoneVerificationMediumType,\r\n  PhoneVerificationSubStatus,\r\n  User,\r\n  getCurrentPublisher,\r\n  isOrganizationPublisher,\r\n  onLoadingChanged,\r\n  showErrorToastNotification,\r\n} from '../../../../../@data';\r\nimport { EN_LOCALE_KEY } from '../../../../../constants';\r\nimport { deepClone } from '../../../../../utils';\r\nimport { getStore } from '../../../Account/Settings/@data/store/store';\r\nimport messages from '../../ProfilePage.messages';\r\nimport VerificationErrorsMessages from '../../VerificationErrors.messages';\r\nimport {\r\n  generateVerificationCode,\r\n  setIsPhoneVerificationCodeShown,\r\n  setIsPhoneVerificationMethodsShown,\r\n  setPhoneVerificationRequestId,\r\n  setPhoneVerificationResp,\r\n  setVerificationCodeGenerationLimitReached,\r\n} from '../actions';\r\nimport { generateCodeAsync } from '../services';\r\nimport { VerificationCodeGenerationErrorCodes } from '../store/schema/VerificationCodeGenerationErrorCodes';\r\nimport { getProfileStore } from '../store/store';\r\n\r\norchestrator(generateVerificationCode, async ({ profile }) => {\r\n  try {\r\n    const publisher = getCurrentPublisher();\r\n\r\n    if (!publisher) {\r\n      return Promise.reject('No publisher found');\r\n    }\r\n\r\n    const newUserDetails: User = deepClone(profile.user);\r\n    if (!newUserDetails) {\r\n      throw new Error('User details are missing');\r\n    }\r\n\r\n    const { systemPreferences } = getStore().active;\r\n    const phoneVerificationGenerateCode: PhoneVerificationGenerateCode = profile.phoneVerificationGenerateCode;\r\n    phoneVerificationGenerateCode.locale = systemPreferences && systemPreferences.locale ? systemPreferences.locale : EN_LOCALE_KEY;\r\n    if (phoneVerificationGenerateCode.verificationMediumType === PhoneVerificationMediumType.email) {\r\n      phoneVerificationGenerateCode.email = profile.publisher?.extendedProperties?.organizationEmailAddress!;\r\n    } else {\r\n      phoneVerificationGenerateCode.phoneNumberWithCountryCode = newUserDetails.contactInfo?.phone1!;\r\n    }\r\n\r\n    const result: IPhoneVerificationData = await generateCodeAsync(phoneVerificationGenerateCode, publisher);\r\n\r\n    setPhoneVerificationRequestId(result.requestId);\r\n    setPhoneVerificationResp(result);\r\n    setVerificationCodeGenerationLimitReached(false);\r\n    onLoadingChanged(false);\r\n\r\n    if (phoneVerificationGenerateCode.verificationMediumType === PhoneVerificationMediumType.email) {\r\n      setIsPhoneVerificationCodeShown(true);\r\n    }\r\n    // need to check subStatus other options\r\n    await when(\r\n      () => {\r\n        const subStatus = getProfileStore().active.phoneVerificationResp?.subStatus;\r\n        return subStatus === PhoneVerificationSubStatus.deliveryFailed || subStatus === PhoneVerificationSubStatus.codeSent;\r\n      },\r\n      () => {\r\n        const subStatus = getProfileStore().active.phoneVerificationResp?.subStatus;\r\n        if (subStatus === PhoneVerificationSubStatus.codeSent) {\r\n          setIsPhoneVerificationMethodsShown(false);\r\n          setIsPhoneVerificationCodeShown(true);\r\n        } else if (subStatus === PhoneVerificationSubStatus.deliveryFailed) {\r\n          showErrorToastNotification({ textMessageDescriptor: messages.generatedCodeFailed });\r\n        }\r\n      }\r\n    );\r\n  } catch (error) {\r\n    let apiErrorCode: VerificationCodeGenerationErrorCodes;\r\n    switch (error.code) {\r\n      case 400:\r\n        apiErrorCode = JSON.parse(error.message)?.[0]?.code;\r\n        showErrorToastNotification({\r\n          textMessageDescriptor:\r\n            VerificationErrorsMessages[apiErrorCode] ?? isOrganizationPublisher()\r\n              ? messages.generateEmailVerificationCodeFailed\r\n              : messages.generateVerificationCodeFailed,\r\n        });\r\n        break;\r\n      case 403:\r\n        apiErrorCode = JSON.parse(error.message)?.[0]?.code;\r\n        if (apiErrorCode === VerificationCodeGenerationErrorCodes.CODE_GENERATION_LIMIT_REACHED) {\r\n          setIsPhoneVerificationCodeShown(true);\r\n          setVerificationCodeGenerationLimitReached(true);\r\n        }\r\n        break;\r\n      default:\r\n        showErrorToastNotification({\r\n          textMessageDescriptor: isOrganizationPublisher()\r\n            ? messages.generateEmailVerificationCodeFailed\r\n            : messages.generateVerificationCodeFailed,\r\n        });\r\n        break;\r\n    }\r\n    onLoadingChanged(false);\r\n    Log.error(error);\r\n  }\r\n});\r\n","import { when } from 'mobx';\r\nimport { orchestrator } from 'satcheljs';\r\nimport { Log } from '../../../../../../logging/src';\r\nimport { getAppStore, isPublisherProfileDataPresent, onLoadingChanged, showErrorToastNotification } from '../../../../../@data';\r\nimport { getXPayJwtToken } from '../../../../../@data/services/PaymentsService';\r\nimport { XPayJwtTokenRequest, getPrimaryUserId } from '../../../../../@data/store';\r\nimport { fetchAccountById } from '../../../../partner-management/Account/@data/services/AccountService';\r\nimport { fetchPublisherEvaluationStatusAction } from '../../../@data/actions';\r\nimport { setXpayJwtToken, setXpayJwtTokenExpirationTime, setXpayJwtTokenStatusIsLoading } from '../../../Account/@data/actions';\r\nimport messages from '../../ProfilePage.messages';\r\nimport { fetchPublisherProfileDetailsAction, fetchUserDetailsAction, onInitializeProfilePage } from '../actions';\r\nimport { setLoadingStateAction } from '../actions/mutatorActions';\r\nimport { isPrimaryUserDataPresent } from '../store/selectors';\r\n\r\norchestrator(onInitializeProfilePage, async ({ publisherId, countryCode }) => {\r\n  setLoadingStateAction(true);\r\n  onLoadingChanged(true);\r\n\r\n  try {\r\n    fetchPublisherProfileDetailsAction(publisherId);\r\n\r\n    // Action to trigger GET user details API call\r\n    // For Tython, primary user is the current logged in user\r\n    // But this will change when user-management is implemented and multiple users are supported\r\n    const primaryUserId = getPrimaryUserId();\r\n    if (!primaryUserId) {\r\n      throw new Error('User not found. Please login again.');\r\n    }\r\n    fetchUserDetailsAction(primaryUserId);\r\n\r\n    if (!getAppStore().publisherEvaluationStatus || getAppStore().isPublisherEvaluationStatusFetchFailed) {\r\n      fetchPublisherEvaluationStatusAction();\r\n    }\r\n\r\n    setXpayJwtTokenStatusIsLoading(true);\r\n    const userContext = getAppStore().userContext;\r\n    const publisher = getAppStore().publisher;\r\n    const accountId = getAppStore().account?.id;\r\n    const account = await fetchAccountById(publisher!, accountId, userContext);\r\n    const xPayJWTRequest = new XPayJwtTokenRequest();\r\n    xPayJWTRequest.publisherId = publisher?.id!;\r\n    xPayJWTRequest.countryCode = account.countryCode || countryCode;\r\n    const tokenResponse = await getXPayJwtToken(xPayJWTRequest, userContext!);\r\n    const tokenExpirationTime = new Date();\r\n    tokenExpirationTime.setMinutes(tokenExpirationTime.getMinutes() + 5);\r\n    setXpayJwtToken(tokenResponse.xpayJwtToken, xPayJWTRequest);\r\n    setXpayJwtTokenExpirationTime(tokenExpirationTime.getTime());\r\n\r\n    // wait till the publisher details are fetched and set in the store\r\n    await when(() => {\r\n      return isPrimaryUserDataPresent() && isPublisherProfileDataPresent();\r\n    });\r\n  } catch (error) {\r\n    showErrorToastNotification({ textMessageDescriptor: messages.publisherProfileDetailsFailed });\r\n    Log.error(`Error while initializing profile page ${error}`);\r\n  } finally {\r\n    setLoadingStateAction(false);\r\n    onLoadingChanged(false);\r\n    setXpayJwtTokenStatusIsLoading(false);\r\n  }\r\n});\r\n","import { orchestrator } from 'satcheljs';\r\nimport { Log } from '../../../../../../logging/src';\r\nimport { buildRequestHeadersWithAuthToken, getAppStore, showErrorToastNotification } from '../../../../../@data';\r\nimport { uiConfig } from '../../../../../config/ui.config';\r\nimport messages from '../../ProfilePage.messages';\r\nimport { submitEvidenceDocument } from '../actions';\r\nimport { DocumentUploadStatus } from '../store/schema';\r\n\r\norchestrator(submitEvidenceDocument, async ({ setDocumentUploadStatus, documentContent }) => {\r\n  const { publisher, userContext } = getAppStore();\r\n\r\n  if (userContext && publisher && documentContent) {\r\n    const url = `${uiConfig.getApiBaseAddress()}/entityEvaluation/publishers/${publisher.id}/appeals/submitEvidence`;\r\n    const headers = await buildRequestHeadersWithAuthToken(url, userContext, false);\r\n\r\n    try {\r\n      const response = await fetch(url, {\r\n        method: 'POST',\r\n        headers: headers,\r\n        body: documentContent,\r\n      });\r\n\r\n      if (!response.ok) {\r\n        throw new Error(response.statusText);\r\n      }\r\n\r\n      Log.info(`Evidence submitted successfully for: ${documentContent?.get('EvidenceDocumentType')}`);\r\n\r\n      setDocumentUploadStatus(DocumentUploadStatus.Uploaded);\r\n    } catch (error) {\r\n      showErrorToastNotification({ textMessageDescriptor: messages.failedToSubmitEvidence });\r\n      Log.error(`Failed to submit evidence: ${error.message}`);\r\n    }\r\n  }\r\n});\r\n","import { orchestrator } from 'satcheljs';\r\nimport { Log } from '../../../../../../logging/src';\r\nimport { onLoadingChanged, Publisher, showErrorToastNotification, UpdateUserContactDetails, User } from '../../../../../@data';\r\nimport { isIndividualPublisher } from '../../../../../@data/selectors';\r\nimport { deepClone } from '../../../../../utils';\r\nimport { setPublisherEvalutionStatusToInReview } from '../../../@data/actions/entityEvaluationMutatorActions';\r\nimport messages from '../../ProfilePage.messages';\r\nimport {\r\n  setIsSubmittedAction,\r\n  setPrimaryUserDetailsAction,\r\n  setProfileEditModeAction,\r\n  setPublisherProfileDetailsAction,\r\n  updatePublisherProfileAction,\r\n} from '../actions';\r\nimport { updatePublisherDetails } from '../services';\r\nimport { updateUserContactDetails } from '../services/updateUserContactDetails';\r\n\r\nconst animationTimeMS: number = 5000;\r\n\r\norchestrator(updatePublisherProfileAction, async ({ profile }) => {\r\n  try {\r\n    onLoadingChanged(true);\r\n\r\n    const newPublisherDetails: Publisher = deepClone(profile.publisher);\r\n    if (!newPublisherDetails) {\r\n      throw new Error('Publisher details are missing');\r\n    }\r\n\r\n    // NOTE: Setting this from UI because API doesn't have a way to tell this. Pending on @srivatsa.\r\n    newPublisherDetails.profileComplete = true;\r\n\r\n    const newUserDetails: User = deepClone(profile.user);\r\n    if (!newUserDetails) {\r\n      throw new Error('User details are missing');\r\n    }\r\n\r\n    // For individual publishers, we need to set the user address as publisher address.\r\n    if (isIndividualPublisher()) {\r\n      newPublisherDetails.address = { ...newPublisherDetails.address, ...newUserDetails.postalAddress };\r\n    }\r\n\r\n    const newUserContactDetails = new UpdateUserContactDetails();\r\n    newUserContactDetails.postalAddress = newUserDetails.postalAddress;\r\n    newUserContactDetails.userId = newUserDetails.id;\r\n    newUserContactDetails.phone = newUserDetails.contactInfo?.phone1;\r\n\r\n    // Keeping the User and Publisher update sequential and in this order to avoid race condition with CRM Profile sync\r\n    await updateUserContactDetails(newUserContactDetails);\r\n    const updatedPublisherDetails = await updatePublisherDetails(newPublisherDetails);\r\n\r\n    // Update the local store with the updated publisher details\r\n    setPublisherProfileDetailsAction(updatedPublisherDetails);\r\n\r\n    // Update the local store with the updated user details\r\n    setPrimaryUserDetailsAction(newUserDetails);\r\n\r\n    // Change the edit mode back to summary mode\r\n    setProfileEditModeAction(false);\r\n    setIsSubmittedAction(true);\r\n\r\n    setPublisherEvalutionStatusToInReview(newPublisherDetails);\r\n  } catch (error) {\r\n    if (error.code === 400) {\r\n      showErrorToastNotification({ text: JSON.parse(error.message)[0].description, animationTime: animationTimeMS });\r\n    } else {\r\n      showErrorToastNotification({ textMessageDescriptor: messages.updatePublisherProfileDetailsFailed });\r\n    }\r\n\r\n    Log.error(error);\r\n  } finally {\r\n    onLoadingChanged(false);\r\n  }\r\n});\r\n","import { getAppStore, getCurrentPublisher, patchEntity, UpdateUserContactDetails, User } from '../../../../../@data';\r\nimport { getPrimaryUserId } from '../../../../../@data/store';\r\n\r\nexport async function updateUserContactDetails(body: UpdateUserContactDetails) {\r\n  const publisher = getCurrentPublisher();\r\n  const primaryUser = new User(getPrimaryUserId());\r\n\r\n  if (!publisher) {\r\n    return Promise.reject('No publisher found');\r\n  }\r\n\r\n  if (!primaryUser.id) {\r\n    return Promise.reject('No primary user found');\r\n  }\r\n\r\n  const { userContext } = getAppStore();\r\n  const userDetails = await patchEntity([publisher, primaryUser], UpdateUserContactDetails, body, userContext);\r\n  return userDetails;\r\n}\r\n","import { orchestrator } from 'satcheljs';\r\nimport { Log } from '../../../../../../logging/src';\r\nimport { User, getCurrentPublisher, onLoadingChanged, showErrorToastNotification } from '../../../../../@data';\r\nimport { AddressValidation } from '../../../../../@data/store/schema/models/AddressValidation';\r\nimport { deepClone } from '../../../../../utils';\r\nimport messages from '../../ProfilePage.messages';\r\nimport { setIsAddressValid, setProfileErrorsAction, validateAddress } from '../actions';\r\nimport { validateAddressAsync } from '../services';\r\n\r\norchestrator(validateAddress, async ({ profile, formatMessage }) => {\r\n  try {\r\n    const publisher = getCurrentPublisher();\r\n    if (!publisher) {\r\n      return Promise.reject('No publisher found');\r\n    }\r\n\r\n    const newUserDetails: User = deepClone(profile.user);\r\n    if (!newUserDetails) {\r\n      throw new Error('User details are missing');\r\n    }\r\n\r\n    const addressValidation = new AddressValidation();\r\n    addressValidation.postalCode = newUserDetails.postalAddress?.postalCode;\r\n    addressValidation.country = newUserDetails.postalAddress?.country;\r\n    addressValidation.city = newUserDetails.postalAddress?.city;\r\n    addressValidation.stateOrProvince = newUserDetails.postalAddress?.stateOrProvince;\r\n    addressValidation.line1 = newUserDetails.postalAddress?.line1;\r\n    addressValidation.line2 = newUserDetails.postalAddress?.line2;\r\n    addressValidation.isOrg = false;\r\n\r\n    // add new endpoint call\r\n    const result = await validateAddressAsync(addressValidation, publisher);\r\n    setIsAddressValid(result.isAddressValid);\r\n  } catch (error) {\r\n    if (error.code === 400) {\r\n      setProfileErrorsAction({ 'user.postalAddress.postalCode': formatMessage(messages.profileInvalidAddressErrorMessage) });\r\n    } else {\r\n      showErrorToastNotification({ text: formatMessage(messages.profileAddressValidationFailed) });\r\n    }\r\n    setIsAddressValid(false);\r\n    onLoadingChanged(false);\r\n    Log.error(error);\r\n  }\r\n});\r\n","import { MessageBarType } from '@fluentui/react';\r\nimport { when } from 'mobx';\r\nimport { orchestrator } from 'satcheljs';\r\nimport { PhoneVerificationMediumType, isOrganizationPublisher, onLoadingChanged, onNotificationChanged } from '../../../../../@data';\r\nimport { validateSchema } from '../../../../../utils';\r\nimport messages from '../../ProfilePage.messages';\r\nimport {\r\n  generateVerificationCode,\r\n  setIsAddressValid,\r\n  setIsOrgAddressValid,\r\n  setIsPhoneVerificationMethodsShown,\r\n  setIsPreviewShownAction,\r\n  setPhoneVerificationMediumType,\r\n  setProfileErrorsAction,\r\n  validateAndPreviewProfileChangesAction,\r\n} from '../actions';\r\nimport { profileValidationModel } from '../store/schema';\r\nimport { getProfileActiveData, getPublisherProfileActiveData } from '../store/selectors';\r\nimport { getProfileStore } from '../store/store';\r\n\r\norchestrator(validateAndPreviewProfileChangesAction, async ({ profile, formatMessage, isVerificationRequired }) => {\r\n  try {\r\n    onLoadingChanged(true);\r\n    await validateSchema(profileValidationModel(), profile);\r\n    // validateAddress(getPublisherProfileActiveData(), formatMessage);\r\n    setIsAddressValid(true);\r\n    if (isOrganizationPublisher()) {\r\n      // await validateOrgAddress(getPublisherProfileActiveData(), formatMessage);\r\n      setIsOrgAddressValid(true);\r\n    }\r\n    setProfileErrorsAction();\r\n\r\n    when(\r\n      () => {\r\n        const isAddressValid = getProfileActiveData().isAddressValid;\r\n        const isOrgAddressValid = getProfileActiveData().isOrgAddressValid;\r\n\r\n        let retValue = isAddressValid === true || isAddressValid === false;\r\n        if (isOrganizationPublisher()) {\r\n          retValue = retValue && (isOrgAddressValid === true || isOrgAddressValid === false);\r\n        }\r\n\r\n        return retValue;\r\n      },\r\n      async () => {\r\n        let isAddressValid = getProfileActiveData().isAddressValid;\r\n        if (isOrganizationPublisher()) {\r\n          isAddressValid = isAddressValid && getProfileActiveData().isOrgAddressValid;\r\n        }\r\n        if (!getProfileStore().active.isLoading && isAddressValid) {\r\n          if (isOrganizationPublisher()) {\r\n            setPhoneVerificationMediumType(PhoneVerificationMediumType.email);\r\n            if (isVerificationRequired) {\r\n              generateVerificationCode(getPublisherProfileActiveData());\r\n            } else {\r\n              onLoadingChanged(false);\r\n              setIsPreviewShownAction(true);\r\n            }\r\n          } else {\r\n            onLoadingChanged(false);\r\n            setIsPhoneVerificationMethodsShown(true);\r\n          }\r\n        }\r\n        setIsAddressValid(undefined);\r\n        setIsOrgAddressValid(undefined);\r\n      }\r\n    );\r\n  } catch (e) {\r\n    setProfileErrorsAction(e);\r\n    onNotificationChanged({\r\n      text: formatMessage(messages.profileInvalidFieldsErrorMessage, {\r\n        count: Object.keys(e).length,\r\n      }),\r\n      messageBarType: MessageBarType.severeWarning,\r\n    });\r\n    onLoadingChanged(false);\r\n    return;\r\n  }\r\n});\r\n","import { orchestrator } from 'satcheljs';\r\nimport { Log } from '../../../../../../logging/src';\r\nimport { Publisher, getCurrentPublisher, onLoadingChanged, showErrorToastNotification } from '../../../../../@data';\r\nimport { AddressValidation } from '../../../../../@data/store/schema/models/AddressValidation';\r\nimport { deepClone } from '../../../../../utils';\r\nimport messages from '../../ProfilePage.messages';\r\nimport { setIsOrgAddressValid, setProfileErrorsAction, validateOrgAddress } from '../actions';\r\nimport { validateAddressAsync } from '../services';\r\n\r\norchestrator(validateOrgAddress, async ({ profile, formatMessage }) => {\r\n  try {\r\n    const publisher = getCurrentPublisher();\r\n\r\n    if (!publisher) {\r\n      return Promise.reject('No publisher found');\r\n    }\r\n\r\n    const newPublisherDetails: Publisher = deepClone(profile.publisher);\r\n    if (!newPublisherDetails) {\r\n      throw new Error('Publisher details are missing');\r\n    }\r\n\r\n    const addressValidation = new AddressValidation();\r\n    addressValidation.postalCode = newPublisherDetails.address?.postalCode;\r\n    addressValidation.country = newPublisherDetails.address?.country;\r\n    addressValidation.city = newPublisherDetails.address?.city;\r\n    addressValidation.stateOrProvince = newPublisherDetails.address?.stateOrProvince;\r\n    addressValidation.line1 = newPublisherDetails.address?.line1;\r\n    addressValidation.line2 = newPublisherDetails.address?.line2;\r\n    addressValidation.isOrg = true;\r\n\r\n    // add new endpoint call\r\n    const result = await validateAddressAsync(addressValidation, publisher);\r\n    setIsOrgAddressValid(result.isOrgAddressValid);\r\n  } catch (error) {\r\n    if (error.code === 400) {\r\n      setProfileErrorsAction({ 'publisher.address.postalCode': formatMessage(messages.profileInvalidAddressErrorMessage) });\r\n    } else {\r\n      showErrorToastNotification({ text: formatMessage(messages.profileAddressValidationFailed) });\r\n    }\r\n    setIsOrgAddressValid(false);\r\n\r\n    onLoadingChanged(false);\r\n    Log.error(error);\r\n  }\r\n});\r\n","import { when } from 'mobx';\r\nimport { orchestrator } from 'satcheljs';\r\nimport { Log } from '../../../../../../logging/src';\r\nimport {\r\n  IPhoneVerificationData,\r\n  PhoneVerificationSubStatus,\r\n  PhoneVerificationVerifyCode,\r\n  User,\r\n  getCurrentPublisher,\r\n  showErrorToastNotification,\r\n} from '../../../../../@data';\r\nimport { deepClone } from '../../../../../utils';\r\nimport messages from '../../ProfilePage.messages';\r\nimport {\r\n  setIsCodeBeingVerified,\r\n  setIsVerificationSuccess,\r\n  setPhoneVerificationResp,\r\n  setProfileErrorsAction,\r\n  verifyGeneratedCode,\r\n} from '../actions';\r\nimport { verifyGeneratedCodeAsync } from '../services/verifyGeneratedCodeAsync';\r\nimport { getProfileStore } from '../store/store';\r\n\r\norchestrator(verifyGeneratedCode, async ({ profile, formatMessage }) => {\r\n  try {\r\n    setIsCodeBeingVerified(true);\r\n\r\n    const publisher = getCurrentPublisher();\r\n\r\n    if (!publisher) {\r\n      return Promise.reject('No publisher found');\r\n    }\r\n\r\n    const newUserDetails: User = deepClone(profile.user);\r\n    if (!newUserDetails) {\r\n      throw new Error('User details are missing');\r\n    }\r\n\r\n    const phoneVerificationVerifyCode: PhoneVerificationVerifyCode = profile.phoneVerificationVerifyCode;\r\n\r\n    // code\r\n    // verification method\r\n\r\n    const result: IPhoneVerificationData = await verifyGeneratedCodeAsync(phoneVerificationVerifyCode, publisher);\r\n    setPhoneVerificationResp(result);\r\n\r\n    // need to check subStatus other options\r\n    await when(\r\n      () => {\r\n        const subStatus = getProfileStore().active.phoneVerificationResp?.subStatus;\r\n\r\n        return (\r\n          subStatus === PhoneVerificationSubStatus.codeMatched ||\r\n          subStatus === PhoneVerificationSubStatus.codeMismatched ||\r\n          subStatus === PhoneVerificationSubStatus.expired\r\n        );\r\n      },\r\n      () => {\r\n        const subStatus = getProfileStore().active.phoneVerificationResp?.subStatus;\r\n        if (subStatus === PhoneVerificationSubStatus.codeMatched) {\r\n          setIsCodeBeingVerified(false);\r\n          setIsVerificationSuccess(true);\r\n        } else if (subStatus === PhoneVerificationSubStatus.codeMismatched) {\r\n          setProfileErrorsAction({ 'user.verification.code': formatMessage(messages.generatedCodeInvalid) });\r\n        } else {\r\n          setProfileErrorsAction({ 'user.verification.code': formatMessage(messages.generatedCodeExpired) });\r\n        }\r\n      }\r\n    );\r\n  } catch (error) {\r\n    showErrorToastNotification({ textMessageDescriptor: messages.verifyingGeneratedCodeFailed });\r\n    Log.error(error);\r\n  } finally {\r\n    setIsCodeBeingVerified(false);\r\n  }\r\n});\r\n","import { getAppStore, postEntity } from '../../../../../@data';\r\nimport { EvaluationStatus, PhoneVerificationVerifyCode, Publisher } from '../../../../../@data/store';\r\n\r\nexport async function verifyGeneratedCodeAsync(body: PhoneVerificationVerifyCode, publisher: Publisher) {\r\n  const { userContext } = getAppStore();\r\n  const phoneVerificationResp = await postEntity<PhoneVerificationVerifyCode>(\r\n    [new EvaluationStatus(), publisher],\r\n    PhoneVerificationVerifyCode,\r\n    body,\r\n    userContext\r\n  );\r\n  return phoneVerificationResp.data;\r\n}\r\n","import { getTheme, ITheme, mergeStyleSets } from '@fluentui/react';\r\nimport { IPubcenterTheme } from '../../../theme';\r\n\r\n// NOTE: Keep the style types in the same file where the style definitions are present.\r\n// This helps in better DX (Developer Experience) as we needn't switch files to see what's the type.\r\nexport interface ICheckboxGroupStyleProps {\r\n  theme: ITheme;\r\n}\r\n\r\ntype StyleProperties = 'collapseStyle' | 'expandStyle' | 'expandIconStyle' | 'collapseIconStyle' | 'disabledStyle' | 'commonCheckboxStyle';\r\nexport type CheckboxGroupStyles = Record<StyleProperties, string>;\r\n\r\nexport const getStyles = (props: ICheckboxGroupStyleProps): CheckboxGroupStyles => {\r\n  const theme = (props.theme as unknown) as IPubcenterTheme;\r\n  const { spacing } = theme;\r\n\r\n  const commonCollapsibleIconStyle = {\r\n    transition: 'transform 200ms',\r\n    padding: `0 ${spacing.size4}`,\r\n  };\r\n\r\n  return mergeStyleSets({\r\n    collapseStyle: {\r\n      display: 'none',\r\n    },\r\n    expandStyle: {\r\n      display: 'block',\r\n      marginLeft: spacing.size24,\r\n    },\r\n    collapseIconStyle: {\r\n      transform: 'rotate(0)',\r\n      ...commonCollapsibleIconStyle,\r\n    },\r\n    expandIconStyle: {\r\n      transform: 'rotate(90deg)',\r\n      ...commonCollapsibleIconStyle,\r\n    },\r\n    commonCheckboxStyle: {\r\n      padding: `${spacing.size8} 0`,\r\n      display: 'flex',\r\n      alignItems: 'center',\r\n    },\r\n    disabledStyle: {\r\n      opacity: 0.6,\r\n    },\r\n  });\r\n};\r\n\r\nexport function getClassNames<PropType>(props?: PropType): CheckboxGroupStyles {\r\n  return getStyles({ theme: getTheme(), ...props });\r\n}\r\n","import { Checkbox, ICheckboxProps, Icon, mergeStyleSets } from '@fluentui/react';\r\nimport { useBoolean } from '@fluentui/react-hooks';\r\nimport React from 'react';\r\nimport { isButtonPressKey } from '../../utils/AccessibilityUtils';\r\nimport { ConditionalTooltip } from '../ConditionalTooltip';\r\nimport { getClassNames } from './CheckboxGroup.styles';\r\nimport { ICheckbox, ICheckboxGroup, ICheckboxGroupProps } from './CheckboxGroup.types';\r\n\r\n/**\r\n * A controlled component to render a single node of checkbox-tree (singe parent and many children)\r\n * Meaning, the consumer of this component needs to control/handle the state and behavior for the component.\r\n */\r\nexport function CheckboxGroup({\r\n  group,\r\n  isExpanded,\r\n  onExpand,\r\n  onCollapse,\r\n  onParentCheckboxChange,\r\n  onChildCheckboxChange,\r\n  styleProps,\r\n  disabledCheckboxTooltipText,\r\n}: ICheckboxGroupProps): JSX.Element {\r\n  const areAllChildrenDisabled = (): boolean => group.children.every((checkbox) => !!checkbox.disabled);\r\n  const areAllChildrenChecked = (): boolean => group.children.every((checkbox) => !!checkbox.checked);\r\n  const isNoneChildrenChecked = (): boolean => group.children.every((checkbox) => !checkbox.checked);\r\n  const areSomeChildrenChecked = (): boolean => !areAllChildrenChecked() && !isNoneChildrenChecked();\r\n\r\n  const [isInExpandedState, { toggle: toggleIsInExpandedState }] = useBoolean(isExpanded ?? areSomeChildrenChecked());\r\n  const { commonCheckboxStyle, collapseStyle, expandStyle, expandIconStyle, collapseIconStyle, disabledStyle } = mergeStyleSets(\r\n    getClassNames(),\r\n    styleProps\r\n  );\r\n\r\n  const handleExpandCollapseButtonClick = (ev: React.MouseEvent | React.KeyboardEvent) => {\r\n    ev.stopPropagation();\r\n    ev.preventDefault();\r\n\r\n    if (isInExpandedState) {\r\n      onCollapse?.(group);\r\n    } else {\r\n      onExpand?.(group);\r\n    }\r\n    toggleIsInExpandedState();\r\n  };\r\n\r\n  const handleParentCheckboxClick = (ev?: React.FormEvent<HTMLElement | HTMLInputElement>, checked?: boolean) => {\r\n    if (areSomeChildrenChecked()) {\r\n      // check all child checkboxes\r\n      return onParentCheckboxChange?.(ev, true, group);\r\n    }\r\n    onParentCheckboxChange?.(ev, checked, group);\r\n  };\r\n\r\n  const isParentCheckboxDisabled = (): boolean => {\r\n    return areAllChildrenDisabled();\r\n  };\r\n\r\n  const renderLabel = (props?: ICheckboxProps): JSX.Element => {\r\n    return (\r\n      <div className={props?.disabled ? disabledStyle : ''}>\r\n        <Icon\r\n          iconName=\"CaretRightSolid8\"\r\n          className={isInExpandedState ? expandIconStyle : collapseIconStyle}\r\n          onClick={handleExpandCollapseButtonClick}\r\n          onKeyDown={(ev) => isButtonPressKey(ev.key) && handleExpandCollapseButtonClick(ev)}\r\n          tabIndex={0}\r\n          aria-label={isInExpandedState ? 'Expanded' : 'Collapsed'}\r\n        />\r\n        {props?.label}\r\n      </div>\r\n    );\r\n  };\r\n\r\n  const getCheckboxId = (checkbox: ICheckbox | ICheckboxGroup) => `check-${checkbox.key}`;\r\n\r\n  const renderChildCheckbox = (checkbox: ICheckbox): JSX.Element => {\r\n    return (\r\n      <Checkbox\r\n        className={commonCheckboxStyle}\r\n        id={getCheckboxId(checkbox)}\r\n        checked={checkbox.checked}\r\n        label={checkbox.label}\r\n        disabled={checkbox.disabled}\r\n        onChange={(ev, checked) => onChildCheckboxChange?.(ev, checked, checkbox)}\r\n      />\r\n    );\r\n  };\r\n\r\n  const renderParentCheckbox = (parent: ICheckboxGroup): JSX.Element => {\r\n    return (\r\n      <Checkbox\r\n        id={getCheckboxId(parent)}\r\n        key={parent.label}\r\n        className={commonCheckboxStyle}\r\n        checked={areAllChildrenChecked()}\r\n        indeterminate={areSomeChildrenChecked()}\r\n        label={parent.label}\r\n        onChange={handleParentCheckboxClick}\r\n        onRenderLabel={renderLabel}\r\n        disabled={isParentCheckboxDisabled()}\r\n      />\r\n    );\r\n  };\r\n\r\n  return (\r\n    <div>\r\n      <ConditionalTooltip\r\n        showTooltip={isParentCheckboxDisabled()}\r\n        content={disabledCheckboxTooltipText}\r\n        targetSelector={`#${getCheckboxId(group)}`}\r\n      >\r\n        {renderParentCheckbox(group)}\r\n      </ConditionalTooltip>\r\n      <div className={isInExpandedState ? expandStyle : collapseStyle}>\r\n        {group.children.map((child) => {\r\n          return (\r\n            <ConditionalTooltip\r\n              key={child.key}\r\n              showTooltip={child.disabled}\r\n              targetSelector={`#${getCheckboxId(child)}`}\r\n              content={disabledCheckboxTooltipText}\r\n            >\r\n              {renderChildCheckbox(child)}\r\n            </ConditionalTooltip>\r\n          );\r\n        })}\r\n      </div>\r\n    </div>\r\n  );\r\n}\r\n","import { FontWeights, getTheme, ITheme, mergeStyleSets } from '@fluentui/react';\r\nimport { BreakPoints, IPubcenterTheme } from '../../../theme';\r\nimport { HEADING_ITEM_HEIGHT, STANDARD_LIST_ITEM_HEIGHT } from '../../constants/StyleConstants';\r\nimport { flexWithAlignCenter } from '../../utils/GlobalStyleUtils';\r\n\r\nexport const BOX_HEIGHT = 288;\r\nexport const BOX_WIDTH = 300;\r\n\r\n// NOTE: Keep the style types in the same file where the style definitions are present.\r\n// This helps in better DX (Developer Experience) as we needn't switch files to see what's the type.\r\nexport interface ICheckboxTreeWithSelectionBoxStyleProps {\r\n  theme: ITheme;\r\n  isError?: boolean;\r\n}\r\n\r\ntype StyleProperties =\r\n  | 'containerStyle'\r\n  | 'selectionBoxContainerStyle'\r\n  | 'titleContainerStyle'\r\n  | 'selectedItemsContainerStyle'\r\n  | 'selectedItemStyle'\r\n  | 'disabledItemStyle'\r\n  | 'checkboxTreeContainerStyle'\r\n  | 'errorMessageStyle'\r\n  | 'rootStyle'\r\n  | 'removeAllButtonStyle';\r\ntype CheckboxTreeWithSelectionBoxStyles = Record<StyleProperties, string>;\r\n\r\nexport const getStyles = (props: ICheckboxTreeWithSelectionBoxStyleProps): CheckboxTreeWithSelectionBoxStyles => {\r\n  const theme = (props.theme as unknown) as IPubcenterTheme;\r\n  const { spacing, palette, fonts } = theme;\r\n  const { isError = false } = props;\r\n  const containerBorderStyle = {\r\n    border: `1px solid ${isError ? palette.error : palette.neutralTertiaryAlt}`,\r\n  };\r\n  const { ResponsiveSmall } = BreakPoints;\r\n\r\n  return mergeStyleSets({\r\n    rootStyle: {\r\n      marginBottom: spacing.size8,\r\n    },\r\n    containerStyle: {\r\n      display: 'flex',\r\n      gap: spacing.size8,\r\n      [ResponsiveSmall]: {\r\n        display: 'block',\r\n      },\r\n    },\r\n    checkboxTreeContainerStyle: {\r\n      ...containerBorderStyle,\r\n      [ResponsiveSmall]: {\r\n        width: '100%',\r\n      },\r\n    },\r\n    selectionBoxContainerStyle: {\r\n      ...containerBorderStyle,\r\n      height: BOX_HEIGHT,\r\n      width: BOX_WIDTH,\r\n      [ResponsiveSmall]: {\r\n        width: '100%',\r\n      },\r\n    },\r\n    selectedItemsContainerStyle: {\r\n      paddingLeft: spacing.size12,\r\n      overflowY: 'auto',\r\n      height: BOX_HEIGHT - HEADING_ITEM_HEIGHT,\r\n    },\r\n    titleContainerStyle: {\r\n      ...flexWithAlignCenter,\r\n      justifyContent: 'space-between',\r\n      ...fonts.size14,\r\n      fontWeight: FontWeights.semibold,\r\n      height: HEADING_ITEM_HEIGHT,\r\n      paddingLeft: spacing.size12,\r\n      borderBottom: `1px solid ${palette.neutralQuaternaryAlt}`,\r\n    },\r\n    disabledItemStyle: {\r\n      color: palette.disabledGray,\r\n      opacity: 1,\r\n      pointerEvents: 'none',\r\n      backgroundColor: palette.white,\r\n    },\r\n    selectedItemStyle: {\r\n      ...fonts.size14,\r\n      ...flexWithAlignCenter,\r\n      justifyContent: 'space-between',\r\n      height: STANDARD_LIST_ITEM_HEIGHT,\r\n    },\r\n    removeAllButtonStyle: {\r\n      color: palette.themePrimary,\r\n    },\r\n    errorMessageStyle: {\r\n      ...fonts.size12,\r\n      marginTop: spacing.size2,\r\n      color: palette.redDark,\r\n    },\r\n  });\r\n};\r\n\r\nexport function getClassNames<PropType>(props?: PropType): CheckboxTreeWithSelectionBoxStyles {\r\n  return getStyles({ theme: getTheme(), ...props });\r\n}\r\n","import { FontWeights, getTheme, ITheme, mergeStyleSets } from '@fluentui/react';\r\nimport { IPubcenterTheme } from '../../../theme';\r\nimport { HEADING_ITEM_HEIGHT, SMALLER_LIST_ITEM_HEIGHT } from '../../constants/StyleConstants';\r\nimport { flexWithAlignCenter } from '../../utils/GlobalStyleUtils';\r\nimport { BOX_HEIGHT, BOX_WIDTH } from '../CheckboxTreeWithSelectionBox/CheckboxTreeWithSelectionBox.styles';\r\n\r\n// NOTE: Keep the style types in the same file where the style definitions are present.\r\n// This helps in better DX (Developer Experience) as we needn't switch files to see what's the type.\r\nexport interface ICheckboxTreeStyleProps {\r\n  theme: ITheme;\r\n}\r\n\r\nexport interface ICheckboxTreeStyles {\r\n  singleCheckboxStyle?: string;\r\n  checkboxTreeContainerStyle?: string;\r\n  checkboxContainerStyle?: string;\r\n  searchBoxRootStyle?: string;\r\n  selectedBlockStyle?: string;\r\n}\r\n\r\nexport const getStyles = (props: ICheckboxTreeStyleProps): ICheckboxTreeStyles => {\r\n  const theme = (props.theme as unknown) as IPubcenterTheme;\r\n  const { spacing, palette, fonts } = theme;\r\n\r\n  const commonCheckboxStyle = {\r\n    padding: `${spacing.size8} 0`,\r\n    ...flexWithAlignCenter,\r\n  };\r\n  const searchBorderStyle = {\r\n    border: 'none',\r\n    borderBottom: `1px solid ${palette.neutralQuaternaryAlt}`,\r\n  };\r\n\r\n  return mergeStyleSets({\r\n    singleCheckboxStyle: {\r\n      ...commonCheckboxStyle,\r\n    },\r\n    checkboxTreeContainerStyle: {\r\n      border: `1px solid ${palette.neutralTertiaryAlt}`,\r\n      display: 'inline-block',\r\n      height: BOX_HEIGHT,\r\n      width: BOX_WIDTH,\r\n    },\r\n    checkboxContainerStyle: {\r\n      paddingLeft: spacing.size12,\r\n      overflowY: 'auto',\r\n      height: BOX_HEIGHT - HEADING_ITEM_HEIGHT,\r\n    },\r\n    searchBoxRootStyle: {\r\n      height: HEADING_ITEM_HEIGHT,\r\n      ...searchBorderStyle,\r\n      '&:hover,&:focus': {\r\n        ...searchBorderStyle,\r\n      },\r\n    },\r\n    selectedBlockStyle: {\r\n      ...fonts.size12,\r\n      height: SMALLER_LIST_ITEM_HEIGHT,\r\n      ...flexWithAlignCenter,\r\n      marginLeft: `-${spacing.size12}`,\r\n      paddingLeft: spacing.size12,\r\n      background: palette.neutralLighter,\r\n      fontWeight: FontWeights.semibold,\r\n    },\r\n  });\r\n};\r\n\r\nexport function getClassNames<PropType>(props?: PropType): ICheckboxTreeStyles {\r\n  return getStyles({ theme: getTheme(), ...props });\r\n}\r\n","import { Checkbox, ISearchBoxProps, mergeStyleSets, SearchBox } from '@fluentui/react';\r\nimport React, { useCallback, useState } from 'react';\r\nimport { NullableJSXElement } from '../../types';\r\nimport { CheckboxGroup, ICheckbox, ICheckboxGroup, ICheckboxGroupProps } from '../CheckboxGroup';\r\nimport { CheckboxGroupStyles } from '../CheckboxGroup/CheckboxGroup.styles';\r\nimport { ConditionalTooltip } from '../ConditionalTooltip';\r\nimport { getClassNames, ICheckboxTreeStyles } from './CheckboxTree.styles';\r\n\r\nexport type GroupedCheckbox = ICheckboxGroup | ICheckbox;\r\n\r\nexport interface ICheckboxTreeProps\r\n  extends Pick<ICheckboxGroupProps, 'onParentCheckboxChange' | 'onChildCheckboxChange' | 'disabledCheckboxTooltipText'> {\r\n  groups: GroupedCheckbox[];\r\n  styleProps?: Partial<ICheckboxTreeStyles & CheckboxGroupStyles>;\r\n  selectedText?: string;\r\n  suppressSearch?: boolean;\r\n  searchPlaceholderText?: string;\r\n  onSearch?: (value: string) => void;\r\n  onSearchTermChange?: (ev: React.ChangeEvent<HTMLInputElement>, value: string) => void;\r\n  onSearchClear?: ISearchBoxProps['onSearch'];\r\n}\r\n\r\n// Narrowing using type predicates. Refer: https://www.typescriptlang.org/docs/handbook/2/narrowing.html#using-type-predicates\r\nexport function isCheckboxGroup(group: GroupedCheckbox): group is ICheckboxGroup {\r\n  return (group as ICheckboxGroup).children !== undefined;\r\n}\r\n\r\nexport function CheckboxTree({\r\n  groups,\r\n  styleProps,\r\n  onChildCheckboxChange,\r\n  onParentCheckboxChange,\r\n  selectedText,\r\n  onSearch,\r\n  onSearchClear,\r\n  onSearchTermChange,\r\n  suppressSearch,\r\n  searchPlaceholderText,\r\n  disabledCheckboxTooltipText,\r\n}: ICheckboxTreeProps) {\r\n  const {\r\n    singleCheckboxStyle,\r\n    checkboxContainerStyle,\r\n    checkboxTreeContainerStyle,\r\n    searchBoxRootStyle,\r\n    selectedBlockStyle,\r\n  } = mergeStyleSets(getClassNames(), styleProps);\r\n  const [searchTerm, setSearchTerm] = useState('');\r\n\r\n  const handleSearch = (value: string) => {\r\n    onSearch?.(value);\r\n  };\r\n\r\n  const handleSearchTermChange = (ev: React.ChangeEvent<HTMLInputElement>, value: string) => {\r\n    setSearchTerm(value);\r\n    onSearchTermChange?.(ev, value);\r\n  };\r\n\r\n  const getFilteredGroups = useCallback((): GroupedCheckbox[] => {\r\n    if (!searchTerm) {\r\n      return groups;\r\n    }\r\n\r\n    return groups.filter((group) => {\r\n      const { label = '' } = group;\r\n      if (isCheckboxGroup(group)) {\r\n        return group.children.some((child) => (child.label ?? '').toLowerCase().includes(searchTerm.toLowerCase()));\r\n      }\r\n      return label.toLowerCase().includes(searchTerm.toLowerCase());\r\n    });\r\n  }, [groups, searchTerm]);\r\n\r\n  const handleSearchClear = (ev) => {\r\n    setSearchTerm('');\r\n    onSearchClear?.(ev);\r\n  };\r\n\r\n  const renderSearchBox = (): NullableJSXElement => {\r\n    if (suppressSearch) {\r\n      return null;\r\n    }\r\n\r\n    return (\r\n      <SearchBox\r\n        styles={{ root: searchBoxRootStyle }}\r\n        placeholder={searchPlaceholderText}\r\n        onClear={handleSearchClear}\r\n        onChange={handleSearchTermChange}\r\n        onSearch={handleSearch}\r\n      />\r\n    );\r\n  };\r\n\r\n  const renderSelectedBlock = (): NullableJSXElement => {\r\n    if (!selectedText) {\r\n      return null;\r\n    }\r\n\r\n    return <div className={selectedBlockStyle}>{selectedText}</div>;\r\n  };\r\n\r\n  const getCheckboxId = (checkbox: ICheckbox) => `check-${checkbox.key}`;\r\n\r\n  const renderCheckbox = (checkbox: ICheckbox): NullableJSXElement => {\r\n    return (\r\n      <Checkbox\r\n        disabled={!!checkbox.disabled}\r\n        className={singleCheckboxStyle}\r\n        id={getCheckboxId(checkbox)}\r\n        label={checkbox.label}\r\n        checked={checkbox.checked}\r\n        onChange={(event, checked) => onChildCheckboxChange(event, checked, checkbox)}\r\n      />\r\n    );\r\n  };\r\n\r\n  const renderCheckboxGroups = (): JSX.Element => {\r\n    return (\r\n      <div className={checkboxContainerStyle}>\r\n        {renderSelectedBlock()}\r\n        {getFilteredGroups().map((group: GroupedCheckbox) => {\r\n          if (isCheckboxGroup(group)) {\r\n            return (\r\n              <CheckboxGroup\r\n                key={group.key}\r\n                group={group}\r\n                onChildCheckboxChange={onChildCheckboxChange}\r\n                onParentCheckboxChange={onParentCheckboxChange}\r\n                disabledCheckboxTooltipText={disabledCheckboxTooltipText}\r\n              />\r\n            );\r\n          } else {\r\n            return (\r\n              <ConditionalTooltip\r\n                key={group.key}\r\n                showTooltip={group.disabled}\r\n                targetSelector={`#${getCheckboxId(group)}`}\r\n                content={disabledCheckboxTooltipText}\r\n              >\r\n                {renderCheckbox(group)}\r\n              </ConditionalTooltip>\r\n            );\r\n          }\r\n        })}\r\n      </div>\r\n    );\r\n  };\r\n\r\n  return (\r\n    <div className={checkboxTreeContainerStyle}>\r\n      {renderSearchBox()}\r\n      {renderCheckboxGroups()}\r\n    </div>\r\n  );\r\n}\r\n","import { ActionButton, IconButton } from '@fluentui/react';\r\nimport React from 'react';\r\nimport { InjectedIntlProps, injectIntl } from 'react-intl';\r\nimport messages from '../../App.messages';\r\nimport { NullableJSXElement } from '../../types';\r\nimport { CheckboxTree } from '../CheckboxTree';\r\nimport { ConditionalTooltip } from '../ConditionalTooltip';\r\nimport { getClassNames } from './CheckboxTreeWithSelectionBox.styles';\r\nimport { ICheckboxTreeWithSelectionBoxProps, ISelection } from './CheckboxTreeWithSelectionBox.types';\r\n\r\nexport const CheckboxTreeWithSelectionBox = injectIntl(function CheckboxTreeWithSelectionBoxComponent({\r\n  selectionList,\r\n  selectionTitle,\r\n  disabledSelectionTooltipText,\r\n  onRemoveSelection,\r\n  onRenderSelectionItem,\r\n  onRemoveAllSelection,\r\n  intl: { formatMessage },\r\n  errorMessage,\r\n  ...restProps\r\n}: ICheckboxTreeWithSelectionBoxProps & InjectedIntlProps) {\r\n  const {\r\n    containerStyle,\r\n    selectionBoxContainerStyle,\r\n    disabledItemStyle,\r\n    selectedItemStyle,\r\n    selectedItemsContainerStyle,\r\n    titleContainerStyle,\r\n    removeAllButtonStyle,\r\n    checkboxTreeContainerStyle,\r\n    errorMessageStyle,\r\n    rootStyle,\r\n  } = getClassNames({ isError: !!errorMessage });\r\n\r\n  function getActiveItems() {\r\n    return selectionList.filter((item) => !item.isDisabled);\r\n  }\r\n\r\n  function renderSelectedItem({ isDisabled, key, title }: ISelection): JSX.Element | undefined {\r\n    return (\r\n      <div className={`${selectedItemStyle} ${isDisabled ? disabledItemStyle : ''}`}>\r\n        <div className=\"title\">{title}</div>\r\n        <IconButton\r\n          iconProps={{ iconName: 'Delete' }}\r\n          id={key}\r\n          onClick={() => onRemoveSelection(key)}\r\n          disabled={isDisabled}\r\n          ariaLabel={formatMessage(messages.delete)}\r\n        />\r\n      </div>\r\n    );\r\n  }\r\n\r\n  function renderSelectionBox(): NullableJSXElement {\r\n    return (\r\n      <div className={selectionBoxContainerStyle}>\r\n        <div className={titleContainerStyle}>\r\n          {selectionTitle}\r\n          {onRemoveAllSelection && getActiveItems().length > 0 && (\r\n            <ActionButton styles={{ root: removeAllButtonStyle }} onClick={onRemoveAllSelection}>\r\n              Remove all\r\n            </ActionButton>\r\n          )}\r\n        </div>\r\n        <div className={selectedItemsContainerStyle}>\r\n          {selectionList.map((selectedItem) => {\r\n            const { isDisabled, key } = selectedItem;\r\n            return (\r\n              <ConditionalTooltip key={key} showTooltip={isDisabled} content={disabledSelectionTooltipText} targetSelector={`#${key}`}>\r\n                {renderSelectedItem(selectedItem)}\r\n              </ConditionalTooltip>\r\n            );\r\n          })}\r\n        </div>\r\n      </div>\r\n    );\r\n  }\r\n\r\n  return (\r\n    <div className={rootStyle}>\r\n      <div className={containerStyle}>\r\n        <CheckboxTree {...restProps} styleProps={{ checkboxTreeContainerStyle }} />\r\n        {renderSelectionBox()}\r\n      </div>\r\n      {errorMessage && <div className={errorMessageStyle}>{errorMessage}</div>}\r\n    </div>\r\n  );\r\n});\r\n","import { orchestrator } from 'satcheljs';\r\nimport { Log } from '../../../../../../logging/src';\r\nimport { Model, User, getAppStore, patchEntity } from '../../../../../@data';\r\nimport { TYTHON_DOMAIN_REDIRECTION_CACHE_KEY } from '../../../../../constants';\r\nimport { dismissFRE } from '../actions';\r\nimport { setIsFRECardShown } from '../mutatorActions';\r\n\r\nexport class DismissFRERequest extends Model {\r\n  public apiPath = `dismissFRE`;\r\n  public className = 'dismissFRE';\r\n}\r\n\r\norchestrator(dismissFRE, async () => {\r\n  setIsFRECardShown(false);\r\n  sessionStorage.removeItem(TYTHON_DOMAIN_REDIRECTION_CACHE_KEY);\r\n\r\n  const { publisher, userContext } = getAppStore();\r\n  const user = new User(userContext?.id);\r\n\r\n  if (publisher && user) {\r\n    try {\r\n      await patchEntity([publisher, user], DismissFRERequest, undefined, userContext);\r\n    } catch (e) {\r\n      Log.error(`Failed to dismiss FRE card, ${JSON.stringify(e)}`);\r\n    }\r\n  }\r\n});\r\n","import { HomePageStatus } from '../../../../pages/ad-management/Home/@data/store/schema/IHomeViewState';\r\nimport { Model } from './Model';\r\n\r\nexport class EntitySummary extends Model {\r\n  public apiPath = undefined;\r\n  public className = 'entitySummary';\r\n  public profile: HomePageStatus;\r\n  public site: HomePageStatus;\r\n  public adUnit: HomePageStatus;\r\n  public isHomePageSetupComplete: boolean;\r\n}\r\n","import { Model } from './Model';\r\n\r\nexport class Home extends Model {\r\n  public apiPath = undefined;\r\n  public className = 'home';\r\n}\r\n","import { when } from 'jquery';\r\nimport { orchestrator } from 'satcheljs';\r\nimport { Log } from '../../../../../../logging/src';\r\nimport { getAppStore, getEntity, isPublisherUnderReview } from '../../../../../@data';\r\nimport { EntitySummary } from '../../../../../@data/store/schema/models/EntitySummary';\r\nimport { Home } from '../../../../../@data/store/schema/models/Home';\r\nimport { fetchSetupCardsStatus } from '../actions/actions';\r\nimport { setHomePageStatus, setIsStatusLoading } from '../mutatorActions';\r\nimport { HomePageStatus } from '../store/schema/IHomeViewState';\r\nimport { getStore } from '../store/store';\r\n\r\norchestrator(fetchSetupCardsStatus, async () => {\r\n  const { publisher, account, userContext } = getAppStore();\r\n\r\n  if (publisher && account && userContext) {\r\n    setIsStatusLoading(true);\r\n\r\n    try {\r\n      const data = (await getEntity([new Home(), publisher], userContext, EntitySummary)) as EntitySummary;\r\n      if (data.profile === 'Rejected' && isPublisherUnderReview()) {\r\n        data.profile = HomePageStatus.AwaitingVerification;\r\n      }\r\n      setHomePageStatus(data.profile, data.site, data.adUnit, data.isHomePageSetupComplete);\r\n      await when(() => {\r\n        const { adUnitStatus, siteStatus, profileStatus, isSetupDone } = getStore();\r\n        if (adUnitStatus !== undefined && siteStatus !== undefined && profileStatus !== undefined && isSetupDone !== undefined) {\r\n          setIsStatusLoading(false);\r\n          return true;\r\n        }\r\n        return false;\r\n      });\r\n    } catch (error) {\r\n      Log.error(error);\r\n    } finally {\r\n      setIsStatusLoading(false);\r\n    }\r\n  }\r\n});\r\n","import { when } from 'mobx';\r\nimport { orchestrator } from 'satcheljs';\r\nimport { getGoogleAdSenseStore } from '../../../Account/Settings/components/GoogleConnector/@data';\r\nimport { onInitializeGoogleAccount } from '../../../Account/Settings/components/GoogleConnector/@data/actions';\r\nimport { onInitializeRecommendationSection } from '../actions/actions';\r\n\r\norchestrator(onInitializeRecommendationSection, async () => {\r\n  onInitializeGoogleAccount(false);\r\n  await when(() => {\r\n    const { active: googleAdSense } = getGoogleAdSenseStore();\r\n    return !!googleAdSense.connectionStatus;\r\n  });\r\n});\r\n","import { orchestrator } from 'satcheljs';\r\nimport { Log } from '../../../../../../logging/src';\r\nimport { User, getAppStore } from '../../../../../@data';\r\nimport { fetchCcmtAccountById } from '../../../../partner-management/Account/@data/services/AccountService';\r\nimport { onSettingsChanged } from '../../../Account/Settings/@data/mutatorActions';\r\nimport { ISettingsViewModel } from '../../../Account/Settings/@data/store/schema/ISettingsViewModel';\r\nimport { getStore } from '../../../Account/Settings/@data/store/store';\r\nimport { getProfileStore, isPrimaryUserDataPresent } from '../../../Profile/@data';\r\nimport { setPrimaryUserDetailsAction } from '../../../Profile/@data/actions';\r\nimport { fetchUserDetails } from '../../../Profile/@data/services/fetchUserDetails';\r\nimport { onInitializeSystemPreferences } from '../actions';\r\n\r\norchestrator(onInitializeSystemPreferences, async () => {\r\n  const { userContext, publisher, account } = getAppStore();\r\n\r\n  if (userContext && publisher && account) {\r\n    let userDetails: User = new User();\r\n    if (!isPrimaryUserDataPresent()) {\r\n      userDetails = await fetchUserDetails(new User(userContext.id));\r\n      setPrimaryUserDetailsAction(userDetails);\r\n    } else {\r\n      userDetails = getProfileStore().raw.primaryUser!;\r\n    }\r\n\r\n    const ccmtAccount = await fetchCcmtAccountById(publisher!, account.id, userContext);\r\n\r\n    // set system preference\r\n    const settings: ISettingsViewModel = getStore().active;\r\n    const systemPreferences = {\r\n      locale: userDetails.language?.toLocaleLowerCase(),\r\n      currency: ccmtAccount.currency,\r\n      countryCode: ccmtAccount.countryCode,\r\n    };\r\n\r\n    onSettingsChanged({ ...settings, systemPreferences });\r\n  } else {\r\n    Log.error('Could not initialize system preferences');\r\n  }\r\n});\r\n","import { orchestrator } from 'satcheljs';\r\nimport { Log } from '../../../../../../logging/src';\r\nimport { Publisher, User, getAppStore, isPublisherProfileDataPresent, onPublisherChanged } from '../../../../../@data';\r\nimport { fetchOneVetReviewStatus } from '../../../../../@data/services/OneVetIntegrationService';\r\nimport { isPrimaryUserDataPresent } from '../../../Profile/@data';\r\nimport { setPrimaryUserDetailsAction } from '../../../Profile/@data/actions';\r\nimport { fetchPublisherProfileDetails } from '../../../Profile/@data/services';\r\nimport { fetchUserDetails } from '../../../Profile/@data/services/fetchUserDetails';\r\nimport { triggerOneVetAPIs } from '../actions';\r\n\r\norchestrator(triggerOneVetAPIs, async ({ eventType, useCache = true }) => {\r\n  const sessionId = sessionStorage.getItem('session_id');\r\n\r\n  // if (process.env.REACT_APP_ENV === 'test' || !sessionId) {\r\n  //   return;\r\n  // }\r\n\r\n  // Skip API in case review status is present in cache\r\n  if (useCache && sessionStorage.getItem('review_status')) {\r\n    return;\r\n  }\r\n\r\n  const { userContext, publisher } = getAppStore();\r\n\r\n  if (userContext && publisher && sessionId) {\r\n    Log.write(`Triggering oneVetAPI ${sessionId}`);\r\n\r\n    let publisherProfileDetails = getAppStore().publisher;\r\n    let userDetails: User = new User();\r\n    if (!isPublisherProfileDataPresent()) {\r\n      publisherProfileDetails = await fetchPublisherProfileDetails(new Publisher(publisher.id));\r\n      onPublisherChanged(publisherProfileDetails);\r\n    }\r\n    if (!isPrimaryUserDataPresent()) {\r\n      userDetails = await fetchUserDetails(new User(userContext.id));\r\n      setPrimaryUserDetailsAction(userDetails);\r\n    }\r\n\r\n    fetchOneVetReviewStatus(eventType, publisherProfileDetails, userDetails);\r\n  } else {\r\n    Log.error('Could not trigger OVDF API: userContext or publisher or sessionId is null');\r\n  }\r\n});\r\n","import { mutator } from 'satcheljs';\r\nimport { onDevTokenPanelHide, onDevTokenPanelShown } from '../actions';\r\nimport { getStore } from '../store/store';\r\n\r\nmutator(onDevTokenPanelShown, (msg) => {\r\n  const store = getStore();\r\n  store.devTokenPanelParams = msg.devTokenPanelParams;\r\n});\r\n\r\nmutator(onDevTokenPanelHide, () => {\r\n  const store = getStore();\r\n  const devtokenparam = store.devTokenPanelParams;\r\n  if (devtokenparam) {\r\n    devtokenparam.panelClosed = true;\r\n    devtokenparam.SpinnerText = 'Fetching Developer Token...';\r\n  }\r\n  store.devTokenPanelParams = devtokenparam;\r\n});\r\n","import { mutator } from 'satcheljs';\r\nimport { Log } from '../../../../../../logging/src';\r\nimport { User } from '../../../../../@data';\r\nimport { mergeTypeWithObject } from '../../../../../utils';\r\nimport {\r\n  onFetchUserInvitationsLoading,\r\n  onFetchUsersLoading,\r\n  onFetchingUserInvitationsData,\r\n  onFetchingUsersData,\r\n  onRawChanged,\r\n  onUserChanged,\r\n  onUserErrorChanged,\r\n  onUserInvitationExpiryChanged,\r\n  onUserInvitationsChanged,\r\n  onUsersChanged,\r\n} from '../actions';\r\nimport { getStore } from '../store/store';\r\n\r\nmutator(onRawChanged, (msg) => {\r\n  getStore().raw = mergeTypeWithObject(new User(), msg.value);\r\n});\r\n\r\nmutator(onUserChanged, (msg) => {\r\n  getStore().active = msg.user;\r\n});\r\n\r\nmutator(onFetchUsersLoading, (msg) => {\r\n  getStore().isFetchingUsersLoading = msg.isLoading;\r\n});\r\n\r\nmutator(onFetchingUsersData, (msg) => {\r\n  getStore().isFetchingUsers = msg.isFetchingData;\r\n});\r\n\r\nmutator(onUserInvitationsChanged, (msg) => {\r\n  getStore().userInvitations = msg.userInvitations;\r\n});\r\n\r\nmutator(onFetchUserInvitationsLoading, (msg) => {\r\n  getStore().isFetchingUserInvitationsLoading = msg.isLoading;\r\n});\r\n\r\nmutator(onFetchingUserInvitationsData, (msg) => {\r\n  getStore().isFetchingUserInvitations = msg.isFetchingData;\r\n});\r\n\r\nmutator(onUsersChanged, (msg) => {\r\n  getStore().users = msg.users;\r\n});\r\n\r\nmutator(onUserErrorChanged, (msg) => {\r\n  getStore().errors = msg.values || {};\r\n});\r\n\r\nmutator(onUserInvitationExpiryChanged, ({ id, value: date }) => {\r\n  const { userInvitations } = getStore();\r\n  const userInvitation = userInvitations?.find((ui) => ui.id === id);\r\n  if (userInvitation) {\r\n    userInvitation.expirationDate = date.toISOString();\r\n    getStore().userInvitations = [...userInvitations];\r\n    Log.info(`Updated user invitation expiry date to ${userInvitation.expirationDate}`);\r\n  }\r\n});\r\n","import { mutator } from 'satcheljs';\r\nimport { UserRole } from '../../../../../@data';\r\nimport {\r\n  onFormAccountRoleChanged,\r\n  onFormCleared,\r\n  onFormContactByEmailChanged,\r\n  onFormContactByPhoneChanged,\r\n  onFormEmailAddressChanged,\r\n  onFormFirstNameChanged,\r\n  onFormIdChanged,\r\n  onFormLanguageChanged,\r\n  onFormLastNameChanged,\r\n  onFormPhoneNumberChanged,\r\n  onFormRoleAccountListChanged,\r\n  onFormUserLocaleChanged,\r\n  onFormUsernameChanged\r\n} from '../actions';\r\nimport { getStore } from '../store/store';\r\n\r\nmutator(onFormIdChanged, msg => {\r\n  getStore().active.id = msg.value;\r\n});\r\n\r\nmutator(onFormCleared, () => {\r\n  getStore().active = {};\r\n  getStore().raw = undefined;\r\n});\r\n\r\nmutator(onFormFirstNameChanged, msg => {\r\n  getStore().active.firstName = msg.value;\r\n});\r\n\r\nmutator(onFormLastNameChanged, msg => {\r\n  getStore().active.lastName = msg.value;\r\n});\r\n\r\nmutator(onFormPhoneNumberChanged, msg => {\r\n  getStore().active.phoneNumber = msg.value;\r\n});\r\n\r\nmutator(onFormEmailAddressChanged, msg => {\r\n  getStore().active.emailAddress = msg.value;\r\n});\r\n\r\nmutator(onFormUsernameChanged, msg => {\r\n  getStore().active.userName = msg.value;\r\n});\r\n\r\nmutator(onFormLanguageChanged, msg => {\r\n  getStore().active.language = msg.value;\r\n});\r\n\r\nmutator(onFormAccountRoleChanged, msg => {\r\n  if (msg.value) {\r\n    getStore().active.accountRole = msg.value.key as UserRole;\r\n    getStore().active.accountsList = getStore().active.allAccounts;\r\n  }\r\n});\r\n\r\nmutator(onFormUserLocaleChanged, msg => {\r\n  getStore().active.localeId = msg.value!!.key as number;\r\n});\r\n\r\nmutator(onFormContactByEmailChanged, msg => {\r\n  getStore().active.contactByEmail = !!msg.value;\r\n});\r\n\r\nmutator(onFormContactByPhoneChanged, msg => {\r\n  getStore().active.contactByPhone = !!msg.value;\r\n});\r\n\r\nmutator(onFormRoleAccountListChanged, msg => {\r\n  const userRole = getStore().active.accountRole;\r\n\r\n  if (userRole === UserRole.AccountManager) {\r\n    getStore().active.AccountManagerAccountsSelected = msg.value;\r\n  } else if (userRole === UserRole.AdView) {\r\n    getStore().active.AdViewAccountsSelected = msg.value;\r\n  } else if (userRole === UserRole.ListManager) {\r\n    getStore().active.ListManagerAccountsSelected = msg.value;\r\n  } else if (userRole === UserRole.ReportUser) {\r\n    getStore().active.ReportUserAccounstSelected = msg.value;\r\n  }\r\n});\r\n","import { orchestrator } from 'satcheljs';\r\nimport { APP_NAME_NEW, PUBCENTER_TITLE } from '../../../../constants/AppConstants';\r\nimport { isLocationPubCenter } from '../../../../utils';\r\nimport { onCurrentRouteChanged } from '../actions/onAdManagementStoreChanged';\r\nimport { getRoutes } from '../services/getAdmanagementRoutes';\r\n\r\norchestrator(onCurrentRouteChanged, ({ currentRoute, formatMessage, intlMessageId }) => {\r\n  const pageName = intlMessageId\r\n    ? formatMessage(intlMessageId)\r\n    : getRoutes(formatMessage).find((route) => route.key === currentRoute)?.text ?? currentRoute.toString();\r\n  const appName = isLocationPubCenter() ? PUBCENTER_TITLE : APP_NAME_NEW;\r\n  document.title = `${appName} - ${pageName}`;\r\n});\r\n","import { orchestrator } from 'satcheljs';\r\nimport { Log } from '../../../../../logging/src';\r\nimport { NotificationSeverity, onNotificationCardAdded, showErrorToastNotification } from '../../../../@data';\r\nimport { getCurrentPublisher, getPublisherEvaluationStatus, isPublisherRejectionAppealable } from '../../../../@data/selectors';\r\nimport { AccountPageRoute } from '../../../../Routes';\r\nimport messages from '../../Account/AccountPage.messages';\r\nimport ProfileCardMessages from '../../Home/components/ProfileCard/ProfileCard.messages';\r\nimport { fetchAppealHistory } from '../../Profile/@data/actions';\r\nimport { setPublisherEvaluationFetchFailedAction, setPublisherEvaluationStatusAction } from '../actions/entityEvaluationMutatorActions';\r\nimport { fetchPublisherEvaluationStatusAction } from '../actions/publisherEvaluationActions';\r\nimport { fetchPublisherEvaluationStatus } from '../services/publisherEvaluationService';\r\n\r\n/**\r\n * This orchestrator is for the whole ad-management module as any page of the\r\n * ad-management module can trigger this action.\r\n */\r\n\r\norchestrator(fetchPublisherEvaluationStatusAction, async ({ cache }) => {\r\n  try {\r\n    const publisher = getCurrentPublisher();\r\n    if (!publisher) {\r\n      return;\r\n    }\r\n\r\n    if (cache && !!getPublisherEvaluationStatus()) {\r\n      return;\r\n    }\r\n\r\n    const evaluationResponse = await fetchPublisherEvaluationStatus(publisher);\r\n    setPublisherEvaluationStatusAction(evaluationResponse);\r\n    setPublisherEvaluationFetchFailedAction(false);\r\n\r\n    if (isPublisherRejectionAppealable()) {\r\n      fetchAppealHistory();\r\n\r\n      onNotificationCardAdded({\r\n        id: 'publisherProfileNeedsAttention',\r\n        titleMessageDescriptor: ProfileCardMessages.retryTitle,\r\n        contentMessageDescriptor: ProfileCardMessages.retryDescription,\r\n        severity: NotificationSeverity.Warning,\r\n        primaryActionTextMessageDescriptor: ProfileCardMessages.viewProfile,\r\n        primaryActionLink: `/ad-management/${publisher?.id}${AccountPageRoute}#profile`,\r\n      });\r\n    }\r\n  } catch (error) {\r\n    setPublisherEvaluationFetchFailedAction(true);\r\n    showErrorToastNotification({ textMessageDescriptor: messages.failedToLoadPublisherStatus });\r\n    Log.error(`Failed to fetch publisher status. Please retry after sometime.: ${error.message}}`);\r\n  }\r\n});\r\n","import { getEntity, Publisher, PublisherEvaluationStatus } from '../../../../@data';\r\nimport { getCurrentUserContext } from '../../../../@data/store';\r\n\r\nexport async function fetchPublisherEvaluationStatus(publisher: Publisher): Promise<PublisherEvaluationStatus> {\r\n  const publisherEvaluationStatus = new PublisherEvaluationStatus();\r\n\r\n  // TODO: Make the API call only once and return the promise if multiple calls are made\r\n  return await getEntity([publisherEvaluationStatus, publisher], getCurrentUserContext());\r\n}\r\n","import { defineMessages } from 'react-intl';\r\n\r\nexport default defineMessages({\r\n  headerLabel: {\r\n    id: 'notificationConfigTab.headerLabel',\r\n    defaultMessage: 'Notification preferences',\r\n  },\r\n  headerAction: {\r\n    id: 'notificationConfigTab.headerAction',\r\n    defaultMessage: 'Edit',\r\n  },\r\n  panelHeader: {\r\n    id: 'notificationConfigTab.panelHeader',\r\n    defaultMessage: 'Edit notification preferences',\r\n  },\r\n  billingLabel: {\r\n    id: 'notificationConfigTab.billingLabel',\r\n    defaultMessage: 'Billing alerts',\r\n  },\r\n  billingDescription: {\r\n    id: 'notificationConfigTab.billingDescription',\r\n    defaultMessage: `We'll notify you with statements, monthly invoices, prepay or postpay threshold accounts.`,\r\n  },\r\n  servingLabel: {\r\n    id: 'notificationConfigTab.servingLabel',\r\n    defaultMessage: 'Serving status',\r\n  },\r\n  servingDescription: {\r\n    id: 'notificationConfigTab.servingDescription',\r\n    defaultMessage: `We'll notify you about your serving status.`,\r\n  },\r\n  profileLabel: {\r\n    id: 'notificationConfigTab.profileLabel',\r\n    defaultMessage: 'Profile review',\r\n  },\r\n  profileDescription: {\r\n    id: 'notificationConfigTab.profileDescription',\r\n    defaultMessage: `We'll notify you about any profile review updates.`,\r\n  },\r\n  invitedUserLabel: {\r\n    id: 'notificationConfigTab.invitedUserLabel',\r\n    defaultMessage: 'User invitations',\r\n  },\r\n  invitedUserDescription: {\r\n    id: 'notificationConfigTab.invitedUserDescription',\r\n    defaultMessage: `We'll notify you when a new user has been invited to this account.`,\r\n  },\r\n  saveButtonAriaDesc: {\r\n    id: 'notificationConfigTab.saveButtonDescription',\r\n    defaultMessage: 'Click to update notification preferences',\r\n  },\r\n});\r\n","import { getTheme, mergeStyleSets } from '@fluentui/react';\r\nimport { IPubcenterSpacing } from '../../../../../../../theme';\r\nimport { ICommonStyleProps } from '../../../../../../types';\r\n\r\ntype StyleProperties = 'gridDisplay' | 'flexDisplay' | 'panelSectionContent' | 'panelContent';\r\ntype NotificationConfigurationStyles = Record<StyleProperties, string>;\r\n\r\nexport const getStyles = (props: ICommonStyleProps): NotificationConfigurationStyles => {\r\n  const theme = getTheme();\r\n  const spacing = theme.spacing as IPubcenterSpacing;\r\n\r\n  const flexDisplay = {\r\n    width: '100%',\r\n    display: 'flex',\r\n    justifyContent: 'space-between',\r\n    alignItem: 'end',\r\n    '& label': {\r\n      wordBreak: 'normal',\r\n    },\r\n  };\r\n\r\n  return mergeStyleSets({\r\n    gridDisplay: {\r\n      display: 'grid',\r\n      gridTemplateColumns: '1fr',\r\n    },\r\n    flexDisplay: {\r\n      ...flexDisplay,\r\n    },\r\n    panelSectionContent: {\r\n      marginTop: spacing.size4,\r\n    },\r\n    panelContent: {\r\n      marginTop: spacing.size16,\r\n    },\r\n    panelSection: {\r\n      ...flexDisplay,\r\n      marginBottom: spacing.size16,\r\n    },\r\n  });\r\n};\r\n\r\nexport function getClassNames<PropType>(props?: PropType): NotificationConfigurationStyles {\r\n  return getStyles({ theme: getTheme(), ...props });\r\n}\r\n","import { Toggle } from '@fluentui/react';\r\nimport React from 'react';\r\nimport { InjectedIntlProps } from 'react-intl';\r\nimport { EntityType } from '../../../../../../@data';\r\nimport { completeAccess, hasReadAccess, hasUpdateAccess, UserRoleEntity } from '../../../../../../@data/services/UserRoleService';\r\nimport { PublisherSettings } from '../../../../../../@data/store/schema/userrolemodels/PublisherSettings';\r\nimport { UserSettings } from '../../../../../../@data/store/schema/userrolemodels/UserSettings';\r\nimport { getEntityAccessPermissions } from '../../../../../../@data/utils/getAccessPermission';\r\nimport AppMessages from '../../../../../../App.messages';\r\nimport { SummaryCard } from '../../../../../../components/SummaryCard';\r\nimport { injectIntlAndObserver } from '../../../../../../utils';\r\nimport { toggleBillingAlerts, toggleInvitedUsers, toggleProfileReview, toggleServingStatus } from '../../@data/actions';\r\nimport '../../@data/mutatorActions';\r\nimport '../../@data/orchestrators';\r\nimport { getStore } from '../../@data/store/store';\r\nimport settingsIcon from '../../resources/settings.svg';\r\nimport messages from './NotificationConfiguration.messages';\r\nimport { getClassNames } from './NotificationConfiguration.styles';\r\n\r\nexport interface INotificationConfigurationProps extends InjectedIntlProps {}\r\n\r\nexport const NotificationConfiguration = injectIntlAndObserver(function NotificationConfigurationComponent({\r\n  intl,\r\n}: INotificationConfigurationProps): JSX.Element | null {\r\n  const { formatMessage } = intl;\r\n  const { HeadingRow, HeadingTitle, Body, Section, SectionContent, SectionTitle } = SummaryCard;\r\n  const { gridDisplay, flexDisplay } = getClassNames();\r\n  const { notificationPreferences, entityType } = getStore().active;\r\n\r\n  const { billingAlerts, servingStatus, profileReview, invitedUsers } = notificationPreferences;\r\n\r\n  const publisherSettingsPermissions = getEntityAccessPermissions(UserRoleEntity.PublisherSettings) as PublisherSettings | null;\r\n  const hasPublisherPreferencesReadAccess = hasReadAccess(\r\n    publisherSettingsPermissions ? publisherSettingsPermissions.publisherPreferences : completeAccess\r\n  );\r\n  const hasPublisherPreferencesUpdateAccess = hasReadAccess(\r\n    publisherSettingsPermissions ? publisherSettingsPermissions.publisherPreferences : completeAccess\r\n  );\r\n  const userSettingsPermissions = getEntityAccessPermissions(UserRoleEntity.UserSettings) as UserSettings | null;\r\n\r\n  const hasSettingsReadAccess = (field: string) => {\r\n    if (entityType === EntityType.Publisher && hasPublisherPreferencesReadAccess) {\r\n      return true;\r\n    } else {\r\n      return hasReadAccess(!userSettingsPermissions ? completeAccess : userSettingsPermissions[field]);\r\n    }\r\n  };\r\n\r\n  const hasSettingsUpdateAccess = (field: string) => {\r\n    if (entityType === EntityType.Publisher && hasPublisherPreferencesUpdateAccess) {\r\n      return true;\r\n    } else {\r\n      return hasUpdateAccess(!userSettingsPermissions ? completeAccess : userSettingsPermissions[field]);\r\n    }\r\n  };\r\n\r\n  const hasBillingAlertsAccess = hasSettingsReadAccess('billingAlerts');\r\n  const hasServingStatusAccess = hasSettingsReadAccess('servingStatus');\r\n  const hasProfileReviewAccess = hasSettingsReadAccess('profileReview');\r\n  const hasInvitedUsersAccess = hasSettingsReadAccess('invitedUsers');\r\n\r\n  if (!hasBillingAlertsAccess && !hasServingStatusAccess && !hasProfileReviewAccess && !hasInvitedUsersAccess) {\r\n    return null;\r\n  }\r\n\r\n  return (\r\n    <React.Fragment>\r\n      <SummaryCard>\r\n        <HeadingRow>\r\n          <HeadingTitle text={formatMessage(messages.headerLabel)} icon={settingsIcon} />\r\n        </HeadingRow>\r\n        <Body styleProps={{ bodyContainerStyle: gridDisplay }}>\r\n          {hasBillingAlertsAccess && (\r\n            <Section styleProps={{ sectionStyle: flexDisplay }}>\r\n              <div>\r\n                <SectionTitle text={formatMessage(messages.billingLabel)} />\r\n                <SectionContent text={formatMessage(messages.billingDescription)} />\r\n              </div>\r\n              <Toggle\r\n                inlineLabel\r\n                checked={billingAlerts}\r\n                onText={formatMessage(AppMessages.on)}\r\n                offText={formatMessage(AppMessages.off)}\r\n                onChange={(_, checked) => toggleBillingAlerts(entityType, checked)}\r\n                disabled={\r\n                  !(hasSettingsUpdateAccess('billingAlerts') && (entityType === EntityType.User ? billingAlerts !== undefined : true))\r\n                }\r\n              />\r\n            </Section>\r\n          )}\r\n          {hasServingStatusAccess && (\r\n            <Section styleProps={{ sectionStyle: flexDisplay }}>\r\n              <div>\r\n                <SectionTitle text={formatMessage(messages.servingLabel)} />\r\n                <SectionContent text={formatMessage(messages.servingDescription)} />\r\n              </div>\r\n              <Toggle\r\n                inlineLabel\r\n                checked={servingStatus}\r\n                onText={formatMessage(AppMessages.on)}\r\n                offText={formatMessage(AppMessages.off)}\r\n                onChange={(_, checked) => toggleServingStatus(entityType, checked)}\r\n                disabled={\r\n                  !(hasSettingsUpdateAccess('servingStatus') && (entityType === EntityType.User ? servingStatus !== undefined : true))\r\n                }\r\n              />\r\n            </Section>\r\n          )}\r\n          {hasProfileReviewAccess && (\r\n            <Section styleProps={{ sectionStyle: flexDisplay }}>\r\n              <div>\r\n                <SectionTitle text={formatMessage(messages.profileLabel)} />\r\n                <SectionContent text={formatMessage(messages.profileDescription)} />\r\n              </div>\r\n              <Toggle\r\n                inlineLabel\r\n                checked={profileReview}\r\n                onText={formatMessage(AppMessages.on)}\r\n                offText={formatMessage(AppMessages.off)}\r\n                onChange={(_, checked) => toggleProfileReview(entityType, checked)}\r\n                // UM_TODO: write UT for this assumption. If preference is disabled on publisher level, user cannot override it.\r\n                disabled={\r\n                  !(hasSettingsUpdateAccess('profileReview') && (entityType === EntityType.User ? profileReview !== undefined : true))\r\n                }\r\n              />\r\n            </Section>\r\n          )}\r\n          {hasInvitedUsersAccess && (\r\n            <Section styleProps={{ sectionStyle: flexDisplay }}>\r\n              <div>\r\n                <SectionTitle text={formatMessage(messages.invitedUserLabel)} />\r\n                <SectionContent text={formatMessage(messages.invitedUserDescription)} />\r\n              </div>\r\n              <Toggle\r\n                inlineLabel\r\n                checked={invitedUsers}\r\n                onText={formatMessage(AppMessages.on)}\r\n                offText={formatMessage(AppMessages.off)}\r\n                onChange={(_, checked) => toggleInvitedUsers(entityType, checked)}\r\n                disabled={\r\n                  !(hasSettingsUpdateAccess('invitedUsers') && (entityType === EntityType.User ? invitedUsers !== undefined : true))\r\n                }\r\n              />\r\n            </Section>\r\n          )}\r\n        </Body>\r\n      </SummaryCard>\r\n    </React.Fragment>\r\n  );\r\n});\r\n","module.exports = __webpack_public_path__ + \"static/media/UserSuspended.66be7a21.svg\";","module.exports = __webpack_public_path__ + \"static/media/settings.3a561171.svg\";","module.exports = __webpack_public_path__ + \"static/media/default.a863829c.svg\";","module.exports = __webpack_public_path__ + \"static/media/supportButton.287b243a.svg\";","module.exports = __webpack_public_path__ + \"static/media/microsoft.3aa215b7.svg\";","module.exports = __webpack_public_path__ + \"static/media/microsoftDark.8b5afe66.svg\";","module.exports = __webpack_public_path__ + \"static/media/microsoftGrey.4a805504.png\";","module.exports = __webpack_public_path__ + \"static/media/partyPopper.67140c99.svg\";","module.exports = __webpack_public_path__ + \"static/media/scriptPlacement.25427644.png\";","module.exports = __webpack_public_path__ + \"static/media/NoCodeFound.21802357.svg\";","module.exports = __webpack_public_path__ + \"static/media/fileIcon.a53bea01.svg\";","module.exports = __webpack_public_path__ + \"static/media/fishpool.ef6f516e.svg\";","module.exports = __webpack_public_path__ + \"static/media/codeFree.06d1a51d.svg\";","module.exports = __webpack_public_path__ + \"static/media/existingClarity.39b0a4d3.svg\";","module.exports = __webpack_public_path__ + \"static/media/richBehavior.02a57e34.svg\";","module.exports = __webpack_public_path__ + \"static/media/clarityLogo.28d1969a.svg\";","module.exports = __webpack_public_path__ + \"static/media/scriptPlacement.25427644.png\";","module.exports = __webpack_public_path__ + \"static/media/adPreviewBackground.53d622d7.png\";","module.exports = __webpack_public_path__ + \"static/media/ProfileStep4.d54502b7.svg\";","module.exports = __webpack_public_path__ + \"static/media/BalanceImg.f092fed3.svg\";","module.exports = __webpack_public_path__ + \"static/media/Data_Usage.af2cfe99.svg\";","module.exports = __webpack_public_path__ + \"static/media/SearchIcon.d3031458.svg\";","module.exports = __webpack_public_path__ + \"static/media/CreateAppIcon.f121eb43.svg\";","module.exports = __webpack_public_path__ + \"static/media/About-us-background-image.03bee876.jpg\";","module.exports = __webpack_public_path__ + \"static/media/ads.7852f218.png\";","module.exports = __webpack_public_path__ + \"static/media/man.84c8365d.jpg\";","module.exports = __webpack_public_path__ + \"static/media/money.a7ad4940.png\";","module.exports = \"data:image/png;base64,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\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJgAAACYCAYAAAAYwiAhAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAACXkSURBVHgB7V0LfBTltf++mdndhCSbBJMiNCSrYO8toUpLtSo+YuujKvi4QEVRHhWfWIX69qoBe7X1Cgi+ao0IgqhAVdDykFqJWrGtxooV7r3KY/OQAHluEpJ9zHzfPefbmWQhM5vNOzvZP79hZueVZPY/55zvnPOdQ8kgheetFR4iu8YRmWcQwjywK49QKYNw4iGUZITP4h7zq6lXPx5ec7EuJUTyEsa8RFW/8F45u54kAI9yEECQyeksACKNAxKcSygSimaQXgUHgtEvgHw7CaX/JJzu9F46/QsyyGBLgglCJTsvJxoQipIrep9MsQIlnQSk0zYSyVHsvfhqL7E5bEMwzzurC4gC0okBoSgfR+ICKOHIB8RBVnovtKd0i2uCgaTKIEnOO+BLmmVtL8UL0K7jywiVN9hJssUlwYS0kmkhbBYQW4J/QLi0Emy2lSTOETcEa5NWbF6P2FScNXCVlfNQcBfRiI81N+2iftWnVR+uYNU+H5EYPfjk8jI8NSUlRVxx5MgRittJM6eOdDgcRDkxL4crcrrkTh1JFNlNnY4fUIfzu1SmuTAidZNuA6Qa1xYyLm8smzi9jsQhBjzBeopYPBD8hAfVr5BILX//4hP/6jfKgDCRp7DU1FTe1NTEjR1paWm8sbGRR96GhJ+ZsTaeX+RzFPu/++g9PyCZx+XIWRlnUqdzLJDvTNJlANGYtoozsrL0shn7SRxhwBKsu8TiGqvgzc1b2IHDW1v+8tfdNX/aZvilkBxM32b6wocOHcpqa2uZflwcy8nJIRUVFdzj8RBFUfiePXvCv5vHQ71eL9fXkSSj2dnZtKqqSsYdbrdbbmhowP2Se/LEjJSCn+Q7hn3nYpqUdCZV5LGks+C8FJaXvRNnLNR/T04GOAYkwTxb19wBDssFnSUWSinW0rKj+e+frvW/uL5cl1DiiwBpxCilTJIkBmTRqqurkUAMCMTGjBnDd+/eHUk647nwBQsWEFg6+iIFuaZOnUrWr1+PnyW4J4V7CnLhsaysLBl+pqR/lrPunpubfMr3L5HcaVd1mmwcnLqML/ROuu5lzjn+XWSgYkD9Zl0y3tGW8h0pClZWftLw8OKPcRcQi4O6Y6DuNBImjDZ8+HCtsrLSkFgMyMCBDByhf0E9Lg3w1riG+wuS6YsgGC6ZmZlSXV2dAmTLSznjR3dThzKByPLI2H8AKWUtgZ+WTbl+Pxmg0mxAEEyoQ5cDiTUv1mtQWoUqq4qCW7fvqH57qw+MbzTCBZlImEQqboMk0UCS4MPXdGnESP+Bws8XC27D7ybB7yaBWlVArSqwT8pZ/dQ1cnr6TZ2Sapw/xTW+FOwzLxlgROt3goWlFlkBv4onlvORWMG9ZYt8D//3JyAZDFKx9PR0zefzhUDtaaD2DJIZNtVAtVUipZoh2ZSMjAw57bH7z5GGZ91MXa6LY7oTqk0CavPS61a27hkA6DeCdVZqIbE0b8WiivkP7zB2EV1KwRIytnXVF2msxxMk+P0p/P4ozRQYeMjyzTNOHHLqDx6LlWjgenn6hCUv/bq4uBifS78/g34hmGcLxAq5sj0WqSUk1j7v4so7H9mBahANdd22QkK1EoscPTqMdwipBipUBhWKZHPkPv/EOVLOsGeIJOV2eDWMNtXahvMrrpu7T7cx+41ofU6wmEeIYLyrNfWLK2bcXkR0NQfD/hAM+4XEGj9+fKikpMQgVjxKq1jQOiiAQYoCgxRl5CvPXCdnuO+JgWg+rmmPzC7Zv7SwsLDfSCaRPoRn8ytPwvB6aUfkYo3NRTVFr58K5HqBtBnsASCXH4jVjNtArhBps7HsCjE4gSV41llnBWDtV+9+dIX6+a6JPBB4rYNr06ksL17xw7yFQC7ZGNH2Nfrkh+r21lukI/eDppWre0rngZ31CWl7uIYqFOpQ9/vYmVSWCGs7igMBHHk6kx+9r0Aakf1sh9KMsQ8D/3t48k1NTbV9PYrudQkm7C2X8k/SAbmE1Hr2tQvQiAcfllCDYOTiW9uiL0gwbbCSC6H/7fiShQoKClrKbrzzPf9X31zCg8FXo14oSee4vn/8Zy/mZY4iuuOX9BF69QfFZMyDrcVqGhbX3HIvqkN0kmowTA/V19cjoYIwqmJxPCrsbUhgMshgLjhz1/3hV1Jq8n2wK93ybDD+pW8PXzj+z3/bu27dOq0vIgC99hM8m9aMI5S9FZVcoBIbt304pWX5a+V6GEeD4HKQhIkVShArZqDadBz/u3tHJY3N3xxVZTJWpvrqp1ZMv72EhE2QXv/Fehw6uVByHW91Drofan+/anJo47uH9fggjhCRXKgWQxGxwQQ6hnDRNL33cX3yqfmbIQaVRyXpe6ZnUpouJSf/IvWic96/SEk7CM+Z9CZ6XIJFkMtypIj2VtlVNz6MuVURKlEQi7T5tBLoGtBv5sx948UHpeSk+6Oc51Prai8ESfY56cVn3qNGvrC5wmrRklxavW8xkAs9+BjmUdGQB4L5YXSDBEuQq5uAAYAK5kWgbPKcR7g/8FiUU9OVjKHrRjz3OBr+qMl6xVzqsZvGYtCr1bWFtTffVxRhb/lhN6pFdEXY2WHa1zCC6gpIsnkgyR63PBMM/8C+8p9X/uqBPUDOHh+l9wjBwn4udEVQj9U56oGD8yrm3LWW6DFE8OMEqqqqkFwhkiBWbwG/X0fuH5+fJQ1J/YPlWRgo/3Tn6Z7iT6t7OobZMypSOFGpx+qweuhocsHiz83NDaA/hyTI1ZsQz7tsys0rWHPLTZZnUZLHx49dD+RykB72k3WbYJ4ta6ImCAq1OPfhdST8xyKhhFoE3406mJ2mfQgRasv+7fMruL/lHquTIKx0Vt6bKxaNHj0aBwkDg2AicM35AqvjaNBjPLG5uZlhoJqE7a1ImyuBvgH/7LPP1NL/uGEpeP0ftTqJJjluDT5+3x2wqYD91iParctM1Y36f1qNGJFc5dfMXQyuCIajRaJLLpIgV38Cv28lb+OKJdThuM3iHB/78v8mZK/f/DVqGTBjSHc0TZdYKoz68IjRlFwsEHgXyUXCrgg0Gg0fV4Jc/Qthk5VePvtOorGPLM5Jl8aetLn0jDOyYVvurhnTNTEoMlGpx/QYhH+OFP/tIUwOhE/o5xJqEURuglwDA+J78X/5P5PFNDgzQKgp5bwfPQhbaPR3K9rTaRXp2bRqFqHSCtODELhu3Pb++TXLVuKMaDQug2A0+q+99tpQP0+2SKA9pJwVy0Ypw4b+w0oTqYcOXVox+86/kLD26dL31ykJFvbUi2llpsAMVCBXOWxyDP/AOvDDH/5QTZBrQIJVzL5jH9fU31idoGRn//67v5ojVCXpor3eORXJHXdYqUbW4l+rpzcjVIwt6hkRvR6xT6BrwOTN01ZtXsZD2jOmJ4CqVH565gOw5YTvskv+sZgvCI8aHftND+ppN/6XXi+DEFAoKSkpkJ+f7x8oM1sSsAaOEkcsXpjlGjPqUyvhETpQOfHbOXe/R7qgKmOXYGLUaI7Anv3zkFww4sD4YghDQAlyxQcw6bDyrgU1UkCbY3WO8p3s+7Oyspyw2enc/pgIJgx7Qj1mx1hz87rK+Qs+wen6TU1Nak5OTsIdEX/ge6+Y+T5XtafNDlJFmZD87H+h30w577zzOjWqjE2CWRn2oBqDH326CF0Suqfef8YZZ6BbIkGuOAP6u9SybxeGixe3h5yWem/mdVOzKyoqOmXwd0iwcKyResyOqYeqFh9cVoTpzlpDQwNKLVU36hMEi0N8e9sDtYRpj1gcTk+beP7cPXv2YKwyZpJFPSlqjhdIL++kmaeRMJlQarXo64RLIr5BPZtWbweRdq7JMV9gw7snV76w+hCJ0eDvQII5Z1pJr8DXe+frpSXVYcOGGTHGBLniH1zWuKUUc/zsrLkk7OGPybyyPCkcb2SzzI4Jw/7ORz7WK9uAw/dQglw2wt7LZmwH/8UHZsektJSbMqZNyyIxZlxYn+CUr7CSXkfAsCdtM6+NUWOCYPYB5yG20OJYuvvK826BtaN7BLMYOWKmRM2yogosmEvCxDKq2yRgI5ReMXO7KKduApRiJDx7qUNj35Rg0fxeob3lL6BbAjz2Rs2IBLlsCs6spdiIpx87G2xvg2SWMJdgVJpp+gNVdRdWFkTbS3dLdDnKnsDAR+nEmcVWtpgjd8Q9wWBQwTKgJIoUa0cw4ZqwyLHXDtcWNTc3C9sLPfZYN4IkfF52BidUXmp2AAsWs3PPzdIL5FmaWu0PcMcVpmeC36tizq/XYvVm+KRiHVS9dkQCNgarq//AyrufPu0itMWMpERTKWbCPH6H6Q8KBLBmF4YUWis4k4T0sj3Kpt9aB9/yMrNjUsqQabCSPR6PpKfztD8n8oNn04pxHbgmSGNjozZ69OiEW2IQgXNmaodhTf8Rz/zX2V6vVwFtFosEU2aZ/gAw7v0vvoqZqkJ6paenJ2yvQQQw9iF0RIrNjilZx03AFQgd01Qe5eiPpvEnotU3rNPbsqBa1EpKSmwtvUTtfod0iuiYS6Rx4R7ekf0o9XbJlHsJg1FWMG2D98or7d2jG/9OSguO3U2HJF8Cq8chCC7rHU2Oclu1Mi5axmrjux+cBs5VnMiB08+accq/3WZl90BXt5e5yrB/kNeOM9bz3l51AlWkfWbHmrZ/OJ6sePOb6upqLNB8FMHaVCSTC8wuRvWoe+5ZdnY2lgayXZ1UIbFcyv7wLPUutwycSWVpu+et1VfCNu2vqs69hXAbQezK2x7Jp5x8id7oq91oso1glF5udjFv8WNnDcxWZVVVVcyWrglJ8pCeaHJKSR5Nkt7I2/TyfD3z01YkA+m+0Ww3dbmwr5ICvtEoBCPEtJF66MDBrfokWmF/4SSBBKKDUnnx3hsm/4yEbVzbkEyRlA1m+6WU5J/jCnyjohXOUcfwv2juiabtf9ulq0RBsMFSEYeH1F2sqXkd1tgIVR6aj2ss/Ym1ZWO5Xk7PeCHrttu6NadwoEH1+7+wOJSedfucXOyttG/fvqM8E/ooUjaVXvgwG9/e6sNmnnq/RZuTi/lYw5EX/N/s3Xb4oUW7iO6KiWgVKDD8zltyHaeefJXkTrvb8lYSzU0+e+zM4W8MXwbPzSgPGtfwXjm73rPlFYhPtg8lJo0bO6Fp1R/3+nw+IzYpnp3ONmpOsGDwK1yjczWimac9AUFd/5ffTCibdssTQK5/waBGhRdLTGRxuVyYDo7VgXCU1FK5+PffwHmPqoerro12Sykp6VK/3+/Apla2MfoZ32m2W0pNya+vr5dVVaWRZlSYYJSeYnaRWuMzWrpE9l60H4LBDd5Lr/vZwft+44VPGjiSgzCo8QPJkFjNtbW1zdhZg4RJJvbhUjFr/hs8FHrG6rYQEB5bV1fnwICw7iOKf0iSqZqkSY4J8EJiD3M58m/VN7ipBFOrDlcQvSUxsbH0QtFP2sp7BkDMI5H8ILVxLTJ2i4uLjfhrZP+kgMzohii3TgeS4jM2Mg5sIMWCxWZ7KYSNQNO19ig39kvCwWg2ROe84XDh4n8BKyMlmJ3RWj+WhB3KRrw1mtTm+66c9X6U4wQkIT5s0cCK2ADei2d7TbMrKHVnzf9lHmzJkTliElEUc/tL0zD2iPYXB/8Gx37XNocxUu6sOcCtHJD4kupbNvOHmf+9ru+dhP4wCiZBmwQLOxlN7qFpqB6J2+3m4N9gQLDB4gDrwt8ZGaeM2Ku/pPo9jf7c8Q/KTA196nK6SVsTVQHYYB6zk8GD/xUOz/UOs4kmCRYI+xDNAb40fIYEBg340T5mBqemgX2alIRNuCTQeOIj/idB1MxjehON+bCgCUmQKzok5+VWh0JlFVi+ncCggYFdQuwDi5Gky4nMoqFQKMIGI1Ke6T0am1FFCgMfhugJgpkgnIGC2RcmAPVoVB2CT8xW3eM0zVyCyeFelYyxVnPAcmSjBgI+okuu7OzsBMGOgcjAiFJp27/twymw4jAKN1wb9iGYLHtN90vySHDL0KqqqlZeKeEYZHv+BL37yuHhEEzTWb9+PUlAzxnDUbdMo3c3OXBw3sGnl5fhs4NRuDE52T4vqRSsJ9zRbjf4V93glhGb48ePpyUlJcdmtEacLEkcHg4SDD8OGgkmylWxYwY+VEIpNc5qtNgKzhoCX++bDarRSHEKeTyeAHi3B1NBPqEegVyGijR/aNVPviRsMIxBDgIfWBs4L4BXcdZRC+FXRCUXEIvXNy6u+cOrpxnkAumPpArakVxhZ6sJZGkkrjIyMog+qKGWEkzvRiu2B5EPrLPwafW+F+tff6cIs06IbnOhWsTe4zA4GpS1aiHoLWVlZYmMCksjH8mVmD3UIdLljPQ7j7vhmj/nvvHi0hHPPf4TIBaGmUS4aZAWQhbE2rNnD25LUeNjeoqJfTzQvQVQDVJy0lVOz3c3ejat+lPuH5ePwBr0ZJC+nOhYHj16tNhWop0IXnxcDTJHKysFwV4Khr54+bj+coGPJyemy6l0jjTEVeJ542UsC/4WGYSOanAsU1wIFr+3Okm3wTgyEcRda4ai3eG9ZMZsEn7xkmEE7YKRoChPhM8jac41I5P+/cR8+TvZP5ecjjNxZrPFbTLoEOWPOSuf+snolW9+PkhVpZHRah4ZT4OHCSuKGYqDahTZlmCpArmw9qzIDYOXzV+zrOibb2+5f2PZ5Dm3eifN/BFvOPJEtBsp2Znrvhr3vWww9m01w0ivwNQeEL3Q6/YaL5N1lqUqaeIkGGYPRjuC4wgQ1i0w3BZp0kTPYtUX8bl02k2/0fbsPQdz+U3vQmnekLNOvR17YduNZOagrZ4HHTCK5BaF97Oy0t1uNwFH4WCTYAimZ7CGIIZotIIO6QtuB+CZ+DGN2vXU6n+wluBjVjeShiRjPVMX3M8+BFMVj9luPT1JCCTDyJdEfQUTKEOzRoKRjznWg3kEyS0WdD4LEoJ9Ggz+794VVjW0AOnZ9918Aqyx14898vI5z7DYb3AF3RTiWaEn31S8Y/IYJvFH5vYkYApe+cBjVbDaaHWC69/+7SwSTpu2hxRTLJJUVa0s8iMRNphF+quUmpyPsciKigo6depUkoA1sGOZVRKeAKeRefnxTzALCcZDwQp908gcQQkmeU1vQkVuj3CyJrIpuom2/Ch67NT6uAQlptMcuT9Upo8ixUf8T7JMHnM5xuqZFAlPfiygJM/qkFbfUI55UtnZ2TaxwajHbLfma6jQZ8C35r5JxKGZp7+CE1GfciVhbg9JwBLRKnMjtJamBsyTqqqqsofLxyLNPrR9h1FuoTV6IXUwzw2T+GlLS0tCikWFaBpmPrKCofvhhxZhCQYRmwRzI65JphfKMZ1HW61nlMDCCgsLDU8+sZznlnTyKWfgOcFg0LYE82xevd+z5TUP6SI8m1+ZGS5cZw6jOjdpixDEtxTTZI/Zbh4MofQS0xzx48KFC8V+o3TAB2YXSSlDxoKrQtJjkTYF9YCHcL/nT6tW5q557kQSrk7Y4VWYPg3kehI2V1qexFlDROMwg1zxTTC5fZ1WBA+qolCOJEnG3ynsMD3YjdOQ2v/d1KmM1esN2D/MIUkzpUz3TJBoH5ywZc0GkGpfsFq2s2z69DrjFCCVh8iucUTWCuBpgFokUasiar7GIohfondbw/KjYIPFf18ni0I5rLEJJRirr68/6iUKE0wKFpsm8TsdZ7ovuyyj4e23MeA7SGwwUWn7XJBqRMoUKvCY4/hidvwosFhd+TVzF+kXaECuuO8tEK5jYj6YYZUHdmEHPiy1SiIIJlSkpaEPSLngVKw3YJviHX0B1tyyruyqGwv1jyi17NER2KKOCQ5kDsBABsjFhw0bxvQeVgIRpDEPdTiGHX8xngfBSxpLA8pBDbC51OrawrIpN8zT69qqQ4cONQLk8a8eJWLax4qp6m5cYyWmQ4cOaZEj5QjCmE8Hl5JdF6OhDw402ZZZFZzNhv+8pJvg/sBW/7aPzq+YcXsRkIvB8xKzimprazHzwiYJh+aNOlidbwvBsFDYwD9KRcbUiCHwl49/HHp5/dfV1dWYB6US+8GZ8/LSKXJa6iTqcEyIkqnaBpyqFlR3sZaWHfXrNr2gbStuxEZhRh9zMOpDYHcFgVwqZl6QOEc0fvg3b/9J08q1XqwKScK5ciHj2FHWqmfTK/+EPe30LGtofAJrkpJwlw/VhpWmcbDjzMjIcMIoSHFPvSwj/ZzTx4LNkcEdiqi3YPR1ZS3+BvbN3l0Hn1wemTlgvLVG9UPD5rJNqjQMdrAGx5PH7sdGHaWXzTqfhP9eJJdRvE/gmJx8tMPaFwSmyUnY8EikmwC57Jhfjn9TYNSoUaEDBw44Kte/HWhY/3YN0WtdYQkFzCwhEdWTEfp+UXcCJJamuyEMktmrIiQHt4zJ4Jm3BHfomywnJ4dhH9HI40cb7cy8oxaojTOxbRtpqzVqNwjpU1JSouolx/FNPAIDG8z/PQLD78i06RbjeHp6+hF9X3N+fr4fVGEA+zgRm5FLqEdq3qjD//XXWKKKgfRnSUlJ7SIV7Tjp2bxmv9k0eVSTDTff/xioEHygIWI/KWaGyPyt1okMpK1iobHPXtLqGHg2r1oJj2JmuwOaVuadNPN0Epbaxot3lI1u0lKZvUxMILnTbuSTLsjU+9EMFneFUWE7snardsza1uQKw3z0qNb5lke0GTI1C9oRhdU3mrbPJViS+5zTzwYda1c1mYAJPJtWzQqX+GqPlh2fbdVbbBsvWzut1o4o4R7N5sFvZdhxNxJb1XxPoGNIpj3csc1QzfOrcCRtlH83HfyZSiLO2UKz/VRRJox47jE7G/sJREBUcbQw7nld/Vpcg+9LkAvCQ6Y2uSlJSifOLLaKTTpGDL+XhAk2CCaSDnLIxFR6oXFffduD6wz7a8yYMRgeMg2FWUkhDv9MbTHMsBjx7O/OITbrhZjA0QingVPT2KN6qGZJc3MzdqDThg8fru7evdsyzmpdOqCy6ilLKZZzfEKK2R1cedJ0v6aV+958bwtKL/B9od8waoFjS4JVzPl1LWH8KbNj1AG22PO/w6FrQorZEML2spBeWmPTusbNmxsw5go+UfSHRo3sRDXUma9pqbUtJqQY9kJU7NYAfdBDJitM94P0av7rp2jcc4hiRHafs0RUggmXhZUUgxHlyLXPz7VVL8QEovq9QHqtrXlupUgBdzgcRkvDqBGdDomRRmRLKSanpd6bcc012Jc6oSptgHDMkRaaHoSRY+0N9yxG2wukl1ZdXR3Uy4RGRYcE+9fE6fUgxR6xOJzunvKz+2CNCf0Jgz/eweUFVtJLrapZgrW/0Pby+Xyh8ePHs1jStmIiBNpYJ2x+ZTuw2zQmFar4dtK3N977HgnnQQ2C2Jz9IAx7mW43PQjS6/BVt5wOrgn8bo1sE/yuOyRYTLYTMpVrISsphs7XZ4fOmZMFmwmDPw4hVKOVYQ9o/PNfp+jSSky/I51IpIzZOC+97Jfbuao9bX4XKTft4tMfgC3D4E+QLJ4QRTXi9Dv/8lfLsSB0ZmYmpoGHQIjEPIGlM6M/nuIPLbCaIEGTk27JXfeH20nYHksQLE7g2brmDtNcLwSoxuBHf3+RhKVVqK6uTqSCdyZlvlPuhd2/mFPH/aHrLW+WmnLfsAV3YXHOxKgyDiBUI2MLrI6rh6qWHHxmeZk+kQVdEp1OBe8KCaS8t19eShX5V6ZHGStr2vqPM6qfeeYwsdGkBzsBiCVWer9Lj9k5oBpfqPnl/EK9oaph2Hc6HbwrDlKmln270HIuIdhjKReeit5ex9SpUxMO2IEIrtBwrJF6TI+DasSZ6Uguo2scfJddmsjSVTVGT1yzbDTLHPoPq7pYPBh6rvSK2XeCQRiw4TS3uIVnyxpcLQDfk7lDlTNf45YPLqwB1YjkAo89Th7G+Y5dmofRVQnDZ3xTt1fS2G+sTqBOx615by5/CMjl6MbPSaAH0SG5AGpN/RIgF4aDmCzLKs5MJ93o2NtdQ1zO2wj2mEO+zeoE7g/ck/Lg4mV6Q4OEJOsnwGgRV/MgKvOk1TlavW9R+TVzRTgI1GNw+PDhAX0aX5franRXsrDSy2fOB8P+Q6sTaJLrv5sW3D4LNpVE8ZT+gShBxfisaOTigeAOINcS3NbraoSAXN0u2iKT7oO7vjdqk2PEsF+Ay9/UHqNO56SMKy76dsPcu3Ya15AE+gR6fbNZsFh66jENp7botanBr/catpZol0N6oCJQT0gUfmjBoir1cOUFoNtLLc9KSXkebDKsb5AIivcRhFqUKD7zqORq3PbhlMY/bcOMGTG/MT8/v8cqAvWEBBO4yJnhK80esklOc19mKckU5YL0qRMl3+sb/0oSQfFeRYRB/1vLk5Bc722f7F++rtzlcmlDhgwJ5eTk+KdNm6YuXLiwR76fnpYk8glrnhrPMzO2wauTbnUSV4OPQmwTg+f2KxIyAABqEb9XtKfmWZ7EWUPz519O1kusa5ih6vP5Ip2pPWLG9DTBRDWanJeW/lg5fui70UhGNPaOWt/464rr5u7Fqs4JX1n34XlrBX4DmcTpeJNEaQyBvq7g519OOdBWvx9J5QdnanD9+vU9Ri5Eb9lCCpBsvDLsuLXYlNPyLE5K1cM1F8wprdsLOj/+S3z3I/TwzwngoX/f0kOPAC998+c75xwuXPIvottchjsCsyREY68eRG8RTJQ+H/70Y6NdJ47cGpVkhPi4pj1SOmkmzsPs0bdnsED3cd0RDlxT69LqQK7Gdz+c6l/xemQAO6AvvfLse200h4mHANkDJCMdkwwvWKU1ND9SfvVN+0iCZDGhVSW6nEvg+c2KerJOLgwBpaamajjlHw36iooKkVvfWyZKr7oLDJLlPTAvm575o7UQCD+7gwtKWTBwfdmVczB1N6Eyo8DzzmpcnQd+gJeiqkQSdqLWrlj3S/aXj3w4G5u0SS4jxb3XnnNf+KOEuoS3xSEtW/CQlJx0f4dXgDRjLcGFZVOu308SJDsKQmphhxGXA+OJ8zo6PyLtBj8a5BIO1d6UXAb60uEpezweB1v84O1SsvOBqCNMBEgzztgjs0v2rywsLGQ9bXzGI2K2tRAwUmQ1DUvKZtxWhJ90tYgSC8llTJjt9Ze3L2OD2qxZs4Jlk+cs9X+5awImJkY9G2w2KsvLV546ah+8tT8lgzgjA9WhmPXD+HZYlnZILmFvfXSBTi5RVj0pKck/ZswYw8/VZ4mg/SEW6Pjx45WSkhIXhI4eh2D4rTFdNQjVpm5n4XSyQhLNrxUB1thUVPfa24saN2xuIDq5srOzg1VVVUZssU8d231OMN3wx00MUzlGrn1+ppwy5H7MhI3pBpRsBLfGMu+lM7bbVW12hVgotdQ9pfMr5j8syorrKtEw5kO6j6vPX8x+/YYwfeeVV15xNM25erTrpBPm0mTnLTFfzMlOUBfLvJOuW0lsINFajXdZLiCKKFtZEOu1OLWs+bUNi6o3bMZi/lpaWprW2NiI9laI9HDop7PodxGAJIMFpZnzOwvuGjXkxye/E7M0E8BuvfwDrrKFpZfN2E/iDK3SSpHOBcN8Xof2VQTQ/aDtK19ScWfhx/ouMUocMWJEMDMzU50yZQoGrfvV3TNQdIyIYeIo0+v1Oke++uy1sjvt3s4RjYSlGiUrCZU3eC++2ksGKHRp5SFJTmzHXEA6Ia0EYISoVh4urJhzFzZB4HoGqpicMXr06OCePXvUvnBBxIKBZsTg76OAz0wBD7Mzd/0L94Pf7OpOEw3BkGy0mEhsA6tt3ClKUfUTWtUf9lvElnhUutys2UWH4KwBu+i2vP5OETZgjyAWxhMxA9UYIQ6YDJWBaiXLMKSWd+/e7cgBtSl9/6Tp0hAgWixd0KxASTFhNEw6hXu9F07/gvQSWiWU01kA3/U4vQ1xAekqsLOb70hR7bp3RFc3vQgJtm8JuVyu0HHHHRfS66QOuFjuQB6GCbVJwqUIlOHXX3OcfPZpk5SsoXd3SaK1R33YfiNe+AJ3ElmqI0FaSqhWT1QV9xPvlbO9x17USh6E05lBNOohMs8QRCIEnMcSEIp5OmNLWUKXWPWr3ilq3LrVR9qarRseeSNnfsBOcI6Hcb6kLwr4cxTw5zhyVj81XXa7p2GtWGJDoPEe3Fu6uPKuhTtADYqaXDAyZHpnN6OyYFy0C4wXRxLVF2ztLIMR6wD1oDhuneVJGnvSpXJa6k3dUp8DAFxjFcCgtSittA8/bEADXScWuhyEnUXapNWAsrOiIR49lYZEk/VFTOzNeeI/T5E8edOoyzWBKvJYEgfgIXUXO3Jkq3ro8I7K+QuNvouRatBQherUqVONXthxlWIez65wIdEg7CRB2Mmo2S/Ww++emyfnn3SW7E69mDoc+QNGuoFNxVr8W2lL4Kumv3/6bs0zq4x4LAPPOwfPuxHa0UA1quCyiezoFpfOZDvEWgz1SfWRZyvR3G631NDQIA377X0nO4YfP1YakpJPHfIPqFPJB1eBm/QmcOSnsnLu9+9gR5p3tXzx5Y6ap1aW6zaV4fxk8Dsy+B0jVd+xpIrrKIXdgnk0YhFqdNiwYfKhQ4fk9PR02efzhasvUiK5/2Niuhv7cruH5NKkpBwYMORSWRGSjipKDsd8DlnKMfshaC+JDcZ8XA3hdj0Y5hXcHyjngYBP27VnN9bVirgEJRTRJZRBHDGjKqINsW1IFQk7J1m1kk1XoyLxkeg2HIRSpLq6OkE4MKQpGNJSxHUEJA3Vk/Ran5Hu2Ix8ZqLzrb6fkbYuuGLRe3ob9pRhP4mloKBAKy4uZhH3SSRWxjmEVDv33HNRfSpAOhwcuGBJhmUILClg+6QSbA1AiBtGqejHysQF1NhQkICZxmdjG9f6eZg86R46dCiq3VR9wXsm6T/DSdp6OyVq2A4SGGq0VZ2SMAkUnYQGAV3gGsG1QZbIBYnjys/PdxrExfvAiK9VUpJBTqbEmxQdhpqNbAhPyNHqLKHaouD/AUTRW8AiuP4QAAAAAElFTkSuQmCC\"","module.exports = __webpack_public_path__ + \"static/media/time.599c4eb9.png\";","module.exports = \"data:image/png;base64,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\"","module.exports = __webpack_public_path__ + \"static/media/twoWomen.0e368eff.jpg\";","module.exports = __webpack_public_path__ + \"static/media/woman.4d988ca2.jpg\";","module.exports = __webpack_public_path__ + \"static/media/UserNotFound.a6fb0e98.svg\";","module.exports = __webpack_public_path__ + \"static/media/loginBackgroundImage.062ec7c6.svg\";","import { MessageBarType } from '@fluentui/react';\r\nimport { orchestrator } from 'satcheljs';\r\nimport { Log } from '../../../../../../../logging/src';\r\nimport {\r\n  EntityPreferences,\r\n  EntityType,\r\n  getAppStore,\r\n  getEntity,\r\n  NotificationType,\r\n  onLoadingChanged,\r\n  onNotificationChanged,\r\n  showErrorToastNotification,\r\n} from '../../../../../../@data';\r\nimport messages from '../../SettingsPage.messages';\r\nimport { onFetchPublisherPreferences } from '../actions/onSettingsPageChanged';\r\nimport { onSettingsChanged, saveRawSettings } from '../mutatorActions/settingsPageChanged';\r\nimport { INotificationPreferences, ISettingsViewModel } from '../store/schema/ISettingsViewModel';\r\nimport { getStore } from '../store/store';\r\n\r\norchestrator(onFetchPublisherPreferences, async () => {\r\n  Log.debug('Fetching publisher preferences');\r\n  const { publisher, userContext } = getAppStore();\r\n\r\n  if (publisher && userContext) {\r\n    try {\r\n      onLoadingChanged(true);\r\n\r\n      const raw = await getEntity([publisher], userContext, EntityPreferences);\r\n\r\n      const notificationPreferences: INotificationPreferences = {\r\n        billingAlerts: true,\r\n        servingStatus: true,\r\n        profileReview: true,\r\n        invitedUsers: true,\r\n      };\r\n\r\n      if (raw.notificationPreferences) {\r\n        raw.notificationPreferences.notifications.forEach((np) => {\r\n          switch ((NotificationType[np.type] as unknown) as NotificationType) {\r\n            case NotificationType.BillingAlert:\r\n              notificationPreferences.billingAlerts = np.enabled;\r\n              break;\r\n            case NotificationType.ServingStatus:\r\n              notificationPreferences.servingStatus = np.enabled;\r\n              break;\r\n            case NotificationType.ProfileReview:\r\n              notificationPreferences.profileReview = np.enabled;\r\n              break;\r\n            case NotificationType.InvitedUser:\r\n              notificationPreferences.invitedUsers = np.enabled;\r\n              break;\r\n          }\r\n        });\r\n      }\r\n\r\n      const settings = getStore().active;\r\n\r\n      const viewModel: ISettingsViewModel = {\r\n        entityType: EntityType.Publisher,\r\n        systemPreferences: settings.systemPreferences,\r\n        notificationPreferences: notificationPreferences,\r\n      };\r\n\r\n      onSettingsChanged(viewModel);\r\n      saveRawSettings(raw);\r\n    } catch (e) {\r\n      showErrorToastNotification({ textMessageDescriptor: messages.publisherPreferencesFailed });\r\n    } finally {\r\n      onLoadingChanged(false);\r\n    }\r\n  } else {\r\n    onNotificationChanged({\r\n      messageBarType: MessageBarType.error,\r\n      textMessageDescriptor: messages.invalidStateLoginOrReport,\r\n    });\r\n  }\r\n});\r\n","import { MessageBarType } from '@fluentui/react';\r\nimport { orchestrator } from 'satcheljs';\r\nimport { Log } from '../../../../../../../logging/src';\r\nimport {\r\n  EntityPreferences,\r\n  EntityType,\r\n  getAppStore,\r\n  getEntity,\r\n  isLocalRetrieved,\r\n  NotificationType,\r\n  onLoadingChanged,\r\n  onNotificationChanged,\r\n  showErrorToastNotification,\r\n  User,\r\n} from '../../../../../../@data';\r\nimport { onFetchTnC } from '../../../../../terms-and-conditions/@data/actions';\r\nimport { TNC_PRE_SIGNATURE_FLAG } from '../../../../../terms-and-conditions/useTnC';\r\nimport messages from '../../SettingsPage.messages';\r\nimport { hasAccessToNotifications } from '../../utils/roleDifferentiationUtils';\r\nimport { onFetchUserPreferences } from '../actions/onSettingsPageChanged';\r\nimport { onSettingsChanged, saveRawSettings } from '../mutatorActions/settingsPageChanged';\r\nimport { INotificationPreferences, ISettingsViewModel } from '../store/schema/ISettingsViewModel';\r\nimport { getStore } from '../store/store';\r\n\r\norchestrator(onFetchUserPreferences, async (msg) => {\r\n  Log.debug('fetching user preferences');\r\n  const { publisher, userContext } = getAppStore();\r\n\r\n  if (publisher && userContext) {\r\n    try {\r\n      onLoadingChanged(true);\r\n      const user = new User(userContext.id);\r\n\r\n      const userPreferences = await getEntity([publisher, user], userContext, EntityPreferences);\r\n      const tnc = userPreferences.tncSignatureStatus;\r\n\r\n      const notificationPreferences: INotificationPreferences = {};\r\n\r\n      userPreferences.notificationPreferences.notifications.forEach((np) => {\r\n        switch ((NotificationType[np.type as NotificationType] as unknown) as NotificationType) {\r\n          case NotificationType.BillingAlert:\r\n            notificationPreferences.billingAlerts = np.enabled;\r\n            break;\r\n          case NotificationType.ServingStatus:\r\n            notificationPreferences.servingStatus = np.enabled;\r\n            break;\r\n          case NotificationType.ProfileReview:\r\n            notificationPreferences.profileReview = np.enabled;\r\n            break;\r\n          case NotificationType.InvitedUser:\r\n            notificationPreferences.invitedUsers = np.enabled;\r\n            break;\r\n        }\r\n      });\r\n\r\n      if (!tnc?.isLatestAccepted) {\r\n        isLocalRetrieved() && onFetchTnC(msg.locale);\r\n      }\r\n\r\n      /** In case user level preference doesn't exist, inherit value from publisher preferences\r\n       * If publisher level preference is true, we inherit the value,\r\n       * if false, user level setting is undefined, so that user can't override it.\r\n       */\r\n      if (hasAccessToNotifications()) {\r\n        const publisherPreferences = await getEntity([publisher], userContext, EntityPreferences);\r\n        publisherPreferences.notificationPreferences.notifications.forEach((np) => {\r\n          if (np.enabled) {\r\n            if (\r\n              (NotificationType[np.type] as unknown) === NotificationType.BillingAlert &&\r\n              notificationPreferences.billingAlerts === undefined\r\n            ) {\r\n              notificationPreferences.billingAlerts = np.enabled;\r\n            } else if (\r\n              (NotificationType[np.type] as unknown) === NotificationType.ServingStatus &&\r\n              notificationPreferences.servingStatus === undefined\r\n            ) {\r\n              notificationPreferences.servingStatus = np.enabled;\r\n            } else if (\r\n              (NotificationType[np.type] as unknown) === NotificationType.ProfileReview &&\r\n              notificationPreferences.profileReview === undefined\r\n            ) {\r\n              notificationPreferences.profileReview = np.enabled;\r\n            } else if (\r\n              (NotificationType[np.type] as unknown) === NotificationType.InvitedUser &&\r\n              notificationPreferences.invitedUsers === undefined\r\n            ) {\r\n              notificationPreferences.invitedUsers = np.enabled;\r\n            }\r\n          }\r\n        });\r\n      }\r\n\r\n      const settings = getStore().active;\r\n\r\n      const viewModel: ISettingsViewModel = {\r\n        entityType: EntityType.User,\r\n        systemPreferences: settings.systemPreferences,\r\n        notificationPreferences: notificationPreferences,\r\n        tncSignatureStatus: userPreferences.tncSignatureStatus,\r\n      };\r\n\r\n      onSettingsChanged(viewModel);\r\n      saveRawSettings(userPreferences);\r\n    } catch (e) {\r\n      /**\r\n       * this is a workaround to hide user preference call failures, the endpoint\r\n       * is expected to return failures when user just signed up within the first\r\n       * few minutes\r\n       */\r\n      !window?.localStorage.getItem(TNC_PRE_SIGNATURE_FLAG) &&\r\n        showErrorToastNotification({ textMessageDescriptor: messages.userPreferencesFailed });\r\n    } finally {\r\n      onLoadingChanged(false);\r\n    }\r\n  } else {\r\n    onNotificationChanged({\r\n      messageBarType: MessageBarType.error,\r\n      textMessageDescriptor: messages.invalidStateLoginOrReport,\r\n    });\r\n  }\r\n});\r\n","import { getEntityAccessPermissions } from '../../../../../@data';\r\nimport { UserRoleEntity } from '../../../../../@data/services/UserRoleService';\r\nimport { UserSettings } from '../../../../../@data/store/schema/userrolemodels/UserSettings';\r\n\r\nexport function hasAccessToNotifications() {\r\n  const userSettingsPermissions = getEntityAccessPermissions(UserRoleEntity.UserSettings) as UserSettings | null;\r\n  if (!userSettingsPermissions) {\r\n    return true; // completeAccess\r\n  }\r\n\r\n  const { billingAlerts, servingStatus, profileReview, invitedUsers } = userSettingsPermissions;\r\n  return billingAlerts || servingStatus || profileReview || invitedUsers;\r\n}\r\n","import { MessageBarType } from '@fluentui/react';\r\nimport { orchestrator } from 'satcheljs';\r\nimport { deleteEntity, getAppStore, onAuthLogout, onNotificationChanged, showSuccessToastNotification } from '../../../../../../@data';\r\nimport messages from '../../SettingsPage.messages';\r\nimport { onPublisherDeleted } from '../actions/onPublisherDeleted';\r\n\r\norchestrator(onPublisherDeleted, async () => {\r\n  const { publisher, userContext } = getAppStore();\r\n  if (userContext && publisher) {\r\n    try {\r\n      await deleteEntity([publisher], undefined, userContext);\r\n\r\n      showSuccessToastNotification({ textMessageDescriptor: messages.deletedPublisherSuccess });\r\n      onAuthLogout();\r\n    } catch (e) {\r\n      onNotificationChanged({\r\n        text: `Deleting the publisher caught an error \"${e}\"`,\r\n        messageBarType: MessageBarType.error,\r\n      });\r\n    }\r\n  } else {\r\n    onNotificationChanged({\r\n      messageBarType: MessageBarType.error,\r\n      textMessageDescriptor: messages.invalidStateLoginOrReport,\r\n    });\r\n  }\r\n});\r\n","import { orchestrator } from 'satcheljs';\r\nimport { deepClone } from '../../../../../../utils';\r\nimport {\r\n  onUpdateNotificationPreferences,\r\n  toggleBillingAlerts,\r\n  toggleInvitedUsers,\r\n  toggleProfileReview,\r\n  toggleServingStatus,\r\n} from '../actions/onNotificationPreferencesChanged';\r\nimport { getStore } from '../store/store';\r\n\r\norchestrator(toggleBillingAlerts, ({ entityType, checked }) => {\r\n  const { notificationPreferences } = getStore().active;\r\n  const np = deepClone(notificationPreferences);\r\n  np.billingAlerts = checked;\r\n  onUpdateNotificationPreferences(entityType, np);\r\n});\r\n\r\norchestrator(toggleServingStatus, ({ entityType, checked }) => {\r\n  const { notificationPreferences } = getStore().active;\r\n  const np = deepClone(notificationPreferences);\r\n  np.servingStatus = checked;\r\n  onUpdateNotificationPreferences(entityType, np);\r\n});\r\n\r\norchestrator(toggleProfileReview, ({ entityType, checked }) => {\r\n  const { notificationPreferences } = getStore().active;\r\n  const np = deepClone(notificationPreferences);\r\n  np.profileReview = checked;\r\n  onUpdateNotificationPreferences(entityType, np);\r\n});\r\n\r\norchestrator(toggleInvitedUsers, ({ entityType, checked }) => {\r\n  const { notificationPreferences } = getStore().active;\r\n  const np = deepClone(notificationPreferences);\r\n  np.invitedUsers = checked;\r\n  onUpdateNotificationPreferences(entityType, np);\r\n});\r\n","import { MessageBarType } from '@fluentui/react';\r\nimport { orchestrator } from 'satcheljs';\r\nimport { Log } from '../../../../../../../logging/src';\r\nimport {\r\n  EntityType,\r\n  getAppStore,\r\n  NotificationPreference,\r\n  NotificationPreferencesUpdate,\r\n  NotificationType,\r\n  onLoadingChanged,\r\n  onNotificationChanged,\r\n  patchEntity,\r\n  showErrorToastNotification,\r\n  showSuccessToastNotification,\r\n  User,\r\n} from '../../../../../../@data';\r\nimport messages from '../../SettingsPage.messages';\r\nimport { onUpdateNotificationPreferences } from '../actions/onNotificationPreferencesChanged';\r\nimport { setNotificationPreferences } from '../mutatorActions';\r\n\r\norchestrator(onUpdateNotificationPreferences, async ({ entityType, np }) => {\r\n  Log.debug('Updating notification preferences');\r\n  const { publisher, userContext } = getAppStore();\r\n\r\n  if (publisher && userContext) {\r\n    const notifications: NotificationPreference[] = [];\r\n\r\n    if (np.billingAlerts !== undefined) {\r\n      notifications.push({ type: NotificationType.BillingAlert, enabled: np.billingAlerts });\r\n    }\r\n    if (np.servingStatus !== undefined) {\r\n      notifications.push({ type: NotificationType.ServingStatus, enabled: np.servingStatus });\r\n    }\r\n    if (np.profileReview !== undefined) {\r\n      notifications.push({ type: NotificationType.ProfileReview, enabled: np.profileReview });\r\n    }\r\n    if (np.invitedUsers !== undefined) {\r\n      notifications.push({ type: NotificationType.InvitedUser, enabled: np.invitedUsers });\r\n    }\r\n\r\n    const notificationPreferencesUpdate: NotificationPreferencesUpdate = new NotificationPreferencesUpdate();\r\n    notificationPreferencesUpdate.notificationPreferences = {\r\n      notifications: notifications,\r\n    };\r\n\r\n    try {\r\n      onLoadingChanged(true);\r\n      const pathModels = [publisher];\r\n\r\n      if (entityType === EntityType.User) {\r\n        const user = new User(userContext.id);\r\n        pathModels.push(user);\r\n      }\r\n      await patchEntity(pathModels, NotificationPreferencesUpdate, notificationPreferencesUpdate, userContext);\r\n\r\n      setNotificationPreferences(np);\r\n\r\n      showSuccessToastNotification({ textMessageDescriptor: messages.updatedNotificationPreferencesSuccessfully });\r\n    } catch (e) {\r\n      showErrorToastNotification({ textMessageDescriptor: messages.notificationPreferencesFailed });\r\n    } finally {\r\n      onLoadingChanged(false);\r\n    }\r\n  } else {\r\n    onNotificationChanged({\r\n      messageBarType: MessageBarType.error,\r\n      textMessageDescriptor: messages.invalidStateLoginOrReport,\r\n    });\r\n  }\r\n});\r\n","import { MessageBarType } from '@fluentui/react';\r\nimport { orchestrator } from 'satcheljs';\r\nimport { Log } from '../../../../../../../logging/src';\r\nimport {\r\n  UserUpdateLanguage,\r\n  getAppStore,\r\n  onLoadingChanged,\r\n  onNotificationChanged,\r\n  patchEntity,\r\n  showErrorToastNotification,\r\n} from '../../../../../../@data';\r\nimport { LOCAL_STORAGE_LOCALE } from '../../../../../../constants';\r\nimport { onFetchTnC } from '../../../../../terms-and-conditions/@data';\r\nimport { getPrimaryUserRawData } from '../../../../Profile/@data';\r\nimport { setPrimaryUserDetailsETagAction } from '../../../../Profile/@data/actions';\r\nimport messages from '../../components/SystemConfiguration/SystemConfiguration.messages';\r\nimport { onUpdateUserLanguage } from '../actions';\r\nimport { onLanguageChanged } from '../mutatorActions';\r\n\r\norchestrator(onUpdateUserLanguage, async (msg) => {\r\n  Log.debug('Updating user language');\r\n  const { publisher, userContext } = getAppStore();\r\n  const user = getPrimaryUserRawData();\r\n\r\n  if (publisher && userContext && user && user.language) {\r\n    try {\r\n      onLoadingChanged(true);\r\n      const updatedUserLanguage: UserUpdateLanguage = new UserUpdateLanguage();\r\n      updatedUserLanguage.language = msg.locale;\r\n      updatedUserLanguage.userId = user.id;\r\n      updatedUserLanguage.eTag = user.eTag;\r\n\r\n      const updateUserResp = await patchEntity([publisher, user], UserUpdateLanguage, updatedUserLanguage, userContext);\r\n      if (updateUserResp.eTag) {\r\n        setPrimaryUserDetailsETagAction(updateUserResp.eTag);\r\n      }\r\n\r\n      onLanguageChanged(msg.locale, LOCAL_STORAGE_LOCALE);\r\n      onFetchTnC(msg.locale);\r\n\r\n      const element = document.getElementById('apex_platform_chrome');\r\n      element?.remove();\r\n\r\n      msg?.closePanel?.();\r\n      msg?.setFormChanged?.(false);\r\n    } catch (error) {\r\n      showErrorToastNotification({ textMessageDescriptor: messages.updateLanguageFailed });\r\n      Log.error(error);\r\n    } finally {\r\n      onLoadingChanged(false);\r\n    }\r\n  } else {\r\n    onNotificationChanged({\r\n      messageBarType: MessageBarType.error,\r\n      textMessageDescriptor: messages.invalidStateReLoginOrReport,\r\n    });\r\n  }\r\n});\r\n","import { MessageBarType } from '@fluentui/react';\r\nimport { orchestrator } from 'satcheljs';\r\nimport {\r\n  deleteEntity,\r\n  getAppStore,\r\n  NotificationLabel,\r\n  NotificationSeverity,\r\n  onAuthLogout,\r\n  onNotificationCardAdded,\r\n  onNotificationChanged,\r\n  showErrorToastNotification,\r\n  showSuccessToastNotification,\r\n  User,\r\n} from '../../../../../../@data';\r\nimport notificationMessages from '../../../../../../NotificationsPanel.Types.messages';\r\nimport messages from '../../SettingsPage.messages';\r\nimport { onUserSelfDeleted } from '../actions/onUserSelfDeleted';\r\n\r\norchestrator(onUserSelfDeleted, async () => {\r\n  const { publisher, userContext } = getAppStore();\r\n\r\n  if (userContext && publisher) {\r\n    try {\r\n      const user = new User(userContext.id);\r\n\r\n      await deleteEntity([publisher, user], undefined, userContext);\r\n\r\n      showSuccessToastNotification({ textMessageDescriptor: messages.deletingUserSuccess, intlMessageValues: { name: userContext.name } });\r\n\r\n      onAuthLogout();\r\n    } catch (e) {\r\n      showErrorToastNotification({ textMessageDescriptor: notificationMessages.DeletingUserWentWrongContent });\r\n      onNotificationCardAdded({\r\n        // tslint:disable-next-line: no-any\r\n        severity: NotificationSeverity.Error,\r\n        titleMessageDescriptor: notificationMessages.DeletingUserWentWrongTitle,\r\n        contentMessageDescriptor: notificationMessages.DeletingUserWentWrongContent,\r\n        notificationLabel: NotificationLabel.DeletingUserWentWrong,\r\n      });\r\n    }\r\n  } else {\r\n    onNotificationChanged({\r\n      messageBarType: MessageBarType.error,\r\n      textMessageDescriptor: messages.invalidStateLoginOrReport,\r\n    });\r\n  }\r\n});\r\n","import { MessageBarType } from '@fluentui/react';\r\nimport { orchestrator } from 'satcheljs';\r\nimport { Log } from '../../../../../../../../../logging/src';\r\nimport { getAppStore, onNotificationChanged, postEntity } from '../../../../../../../../@data';\r\nimport { onPopupOpenChanged, showErrorToastNotification, showSuccessToastNotification } from '../../../../../../../../@data/mutatorActions';\r\nimport { AdSenseOAuthStatus } from '../../../../../../../../@data/store/schema/enums/AdSenseOAuthStatus';\r\nimport { PopupType } from '../../../../../../../../@data/store/schema/enums/PopupType';\r\nimport { AdSenseMediationOptIn } from '../../../../../../../../@data/store/schema/models/AdSenseMediation';\r\nimport { fetchAccountById } from '../../../../../../../partner-management/Account/@data/services/AccountService';\r\nimport { googleConnectorMessages } from '../../GoogleConnector.messages';\r\nimport { onConnectGoogleAccount } from '../actions';\r\nimport { NOTIFICATION_FAILED_WITH_REASON_ERROR_CODE } from '../constants';\r\nimport { onChangeConnection } from '../mutatorActions';\r\n\r\norchestrator(onConnectGoogleAccount, async ({ code }) => {\r\n  const { publisher, account, userContext } = getAppStore();\r\n\r\n  try {\r\n    if (publisher && account && userContext) {\r\n      const urlParams = new URLSearchParams();\r\n      const accountDetails = await fetchAccountById(publisher!, account?.id, userContext);\r\n      urlParams.append(\r\n        'routeSuffix',\r\n        `api/mediation/oauth/optIn?oneTimeAuthorizationCode=${code}&currencyCode=${accountDetails.currencyCode}`\r\n      );\r\n      const response = await postEntity([], AdSenseMediationOptIn, new AdSenseMediationOptIn(), undefined, urlParams, undefined);\r\n\r\n      if (\r\n        response &&\r\n        response?.oAuthConnectionStatus &&\r\n        AdSenseOAuthStatus[response?.oAuthConnectionStatus] === AdSenseOAuthStatus.Success\r\n      ) {\r\n        showSuccessToastNotification({ textMessageDescriptor: googleConnectorMessages.googleAccountConnectedSuccessfully });\r\n\r\n        onChangeConnection({\r\n          email: response?.email,\r\n          isMediationEnabled: response?.mediationStatus,\r\n          connectionStatus: AdSenseOAuthStatus[response?.oAuthConnectionStatus],\r\n          connectedDate: response?.connectedTimeStamp,\r\n          connectedImageSrc: response?.userImageUri,\r\n        });\r\n      } else if (response?.oAuthConnectionStatus && AdSenseOAuthStatus[response?.oAuthConnectionStatus] !== AdSenseOAuthStatus.Success) {\r\n        onNotificationChanged({\r\n          messageBarType: MessageBarType.error,\r\n          text: response.oauthFailureReasons?.[0].description || 'Connecting to your Google account failed.',\r\n          id: NOTIFICATION_FAILED_WITH_REASON_ERROR_CODE,\r\n        });\r\n        onChangeConnection({\r\n          email: response.email,\r\n          isMediationEnabled: response.mediationStatus,\r\n          connectionStatus: AdSenseOAuthStatus[response.oAuthConnectionStatus],\r\n          connectedDate: response.connectedTimeStamp,\r\n          connectionStatusTip: response.oauthFailureReasons?.[0].description,\r\n          actionItems: response.oauthFailureReasons,\r\n        });\r\n      } else {\r\n        onNotificationChanged({\r\n          messageBarType: MessageBarType.error,\r\n          text: response.oauthFailureReasons?.[0].description || 'Connecting to your Google account failed.',\r\n        });\r\n        onChangeConnection({\r\n          connectionStatus: AdSenseOAuthStatus.None,\r\n        });\r\n      }\r\n    }\r\n  } catch (error) {\r\n    showErrorToastNotification({ textMessageDescriptor: googleConnectorMessages.connectGoogleAccountFailed });\r\n    Log.error(`Error while connecting google account ${error}`);\r\n  } finally {\r\n    onPopupOpenChanged(PopupType.None);\r\n  }\r\n});\r\n","import { orchestrator } from 'satcheljs';\r\nimport { Log } from '../../../../../../../../../logging/src';\r\nimport { deleteEntity, getAppStore, onLoadingChanged } from '../../../../../../../../@data';\r\nimport { showErrorToastNotification, showSuccessToastNotification } from '../../../../../../../../@data/mutatorActions';\r\nimport { AdSenseOAuthStatus } from '../../../../../../../../@data/store/schema/enums/AdSenseOAuthStatus';\r\nimport { AdSenseMediationOptOut } from '../../../../../../../../@data/store/schema/models/AdSenseMediation';\r\nimport { googleConnectorMessages } from '../../GoogleConnector.messages';\r\nimport { onDisconnectGoogleAccount } from '../actions';\r\nimport { onChangeConnection } from '../mutatorActions';\r\n\r\norchestrator(onDisconnectGoogleAccount, async () => {\r\n  const { publisher, account } = getAppStore();\r\n\r\n  onLoadingChanged(true);\r\n\r\n  try {\r\n    if (publisher && account) {\r\n      const urlParams = new URLSearchParams();\r\n      urlParams.append('routeSuffix', 'api/mediation/admanager/optOut');\r\n      const response = (await deleteEntity([], AdSenseMediationOptOut, undefined, urlParams, undefined)) as AdSenseMediationOptOut;\r\n\r\n      if (response && response?.mediationStatus === false) {\r\n        onChangeConnection({\r\n          connectionStatus: AdSenseOAuthStatus.None,\r\n        });\r\n\r\n        showSuccessToastNotification({ textMessageDescriptor: googleConnectorMessages.disconnectingGoogleAccountSuccess });\r\n      } else {\r\n        showErrorToastNotification({ textMessageDescriptor: googleConnectorMessages.disconnectingGoogleAccountFailed });\r\n      }\r\n    }\r\n  } catch (error) {\r\n    showErrorToastNotification({ textMessageDescriptor: googleConnectorMessages.disconnectGoogleAccountFailed });\r\n    Log.error(`Error while initializing google account ${error}`);\r\n  } finally {\r\n    onLoadingChanged(false);\r\n  }\r\n});\r\n","import { orchestrator } from 'satcheljs';\r\nimport { Log } from '../../../../../../../../../logging/src';\r\nimport { getAppStore, getEntity, onLoadingChanged, putEntity, showErrorToastNotification } from '../../../../../../../../@data';\r\nimport { AdSenseOAuthStatus } from '../../../../../../../../@data/store/schema/enums/AdSenseOAuthStatus';\r\nimport { AdSenseMediation, AdSenseMediationHealthCheck } from '../../../../../../../../@data/store/schema/models/AdSenseMediation';\r\nimport { googleConnectorMessages } from '../../GoogleConnector.messages';\r\nimport { onInitializeGoogleAccount } from '../actions';\r\nimport { onChangeConnection } from '../mutatorActions';\r\n\r\nexport const handleMediationResponse = (response: AdSenseMediation) => {\r\n  if (response && response?.oAuthConnectionStatus && AdSenseOAuthStatus[response?.oAuthConnectionStatus] === AdSenseOAuthStatus.Success) {\r\n    onChangeConnection({\r\n      email: response?.email,\r\n      isMediationEnabled: response?.mediationStatus,\r\n      connectionStatus: AdSenseOAuthStatus[response?.oAuthConnectionStatus],\r\n      connectedDate: response?.connectedTimeStamp,\r\n      connectedImageSrc: response?.userImageUri,\r\n    });\r\n  } else if (\r\n    response.oAuthConnectionStatus &&\r\n    AdSenseOAuthStatus[response.oAuthConnectionStatus] !== AdSenseOAuthStatus.Success &&\r\n    AdSenseOAuthStatus[response.oAuthConnectionStatus] !== AdSenseOAuthStatus.None\r\n  ) {\r\n    onChangeConnection({\r\n      email: response.email,\r\n      isMediationEnabled: response.mediationStatus,\r\n      connectionStatus: AdSenseOAuthStatus[response.oAuthConnectionStatus],\r\n      connectedDate: response.connectedTimeStamp,\r\n      connectionStatusTip: response.oauthFailureReasons?.[0].description,\r\n      actionItems: response.oauthFailureReasons,\r\n    });\r\n  } else {\r\n    onChangeConnection({\r\n      connectionStatus: AdSenseOAuthStatus.None,\r\n    });\r\n  }\r\n};\r\n\r\norchestrator(onInitializeGoogleAccount, async ({ showLoadingSpinner = true, showNotifications = true, onFinished = () => null }) => {\r\n  const { publisher, account } = getAppStore();\r\n\r\n  if (showLoadingSpinner) {\r\n    onLoadingChanged(true);\r\n  }\r\n\r\n  if (publisher && account) {\r\n    try {\r\n      const urlParams = new URLSearchParams();\r\n      urlParams.append('routeSuffix', 'api/mediation/oauth/getDetails');\r\n      let response = await getEntity([], undefined, AdSenseMediation, urlParams, undefined);\r\n\r\n      // perform health check if oAuthConnectionStatus is valid, endpoint will return same contract as getDetails response\r\n      if (response && response.mediationStatus) {\r\n        const healthCheckUrlParams = new URLSearchParams();\r\n        healthCheckUrlParams.append('routeSuffix', 'api/mediation/admanager/healthCheck');\r\n        const request: AdSenseMediationHealthCheck = {\r\n          apiPath: 'preauth/mediation',\r\n          className: 'oauth',\r\n        };\r\n\r\n        const healthCheckResponse = await putEntity([], request, undefined, AdSenseMediationHealthCheck, healthCheckUrlParams, undefined);\r\n        response = healthCheckResponse;\r\n      }\r\n      // extract response logic handler and reuse it to handle GAM network selection response\r\n      handleMediationResponse(response);\r\n    } catch (error) {\r\n      if (showNotifications) {\r\n        showErrorToastNotification({ textMessageDescriptor: googleConnectorMessages.googleConnectorFailedToFetchAdSenseConnectionDetails });\r\n      }\r\n      Log.error(`Error while fetching google account ${error}`);\r\n      onChangeConnection({\r\n        connectionStatus: AdSenseOAuthStatus.None,\r\n      });\r\n    } finally {\r\n      if (showLoadingSpinner) {\r\n        onLoadingChanged(false);\r\n      }\r\n      onFinished();\r\n    }\r\n  } else {\r\n    if (showNotifications) {\r\n      showErrorToastNotification({ textMessageDescriptor: googleConnectorMessages.initializeGoogleAccountFailed });\r\n    }\r\n  }\r\n});\r\n","import { orchestrator } from 'satcheljs';\r\nimport { Log } from '../../../../../../../../../logging/src';\r\nimport { getAppStore, onLoadingChanged, putEntity, showErrorToastNotification } from '../../../../../../../../@data';\r\nimport { AdSenseMediationToggle } from '../../../../../../../../@data/store/schema/models/AdSenseMediation';\r\nimport { googleConnectorMessages } from '../../GoogleConnector.messages';\r\nimport { onMediateGoogleAccount } from '../actions';\r\nimport { onChangeMediationToggle } from '../mutatorActions';\r\n\r\norchestrator(onMediateGoogleAccount, async ({ mediate, formatMessage }) => {\r\n  const { publisher, account } = getAppStore();\r\n\r\n  onLoadingChanged(true);\r\n  const operation = mediate ? 'Enabling' : 'Disabling';\r\n  let errorToastNotification = mediate\r\n    ? formatMessage(googleConnectorMessages.googleConnectorMediationOperationEnabling)\r\n    : formatMessage(googleConnectorMessages.googleConnectorMediationOperationDisabling);\r\n\r\n  errorToastNotification = errorToastNotification + formatMessage(googleConnectorMessages.googleConnectorMediationFailed);\r\n\r\n  if (publisher && account) {\r\n    try {\r\n      const urlParams = new URLSearchParams();\r\n      urlParams.append('routeSuffix', 'api/mediation/admanager/toggleMediation');\r\n      const request: AdSenseMediationToggle = {\r\n        apiPath: 'preauth/mediation',\r\n        className: 'oauth',\r\n        toggle: mediate,\r\n      };\r\n\r\n      const response = await putEntity([], request, undefined, AdSenseMediationToggle, urlParams, undefined);\r\n\r\n      if (response && response?.mediationStatus === mediate) {\r\n        onChangeMediationToggle(mediate);\r\n      } else {\r\n        onChangeMediationToggle(!mediate);\r\n        showErrorToastNotification({ text: errorToastNotification });\r\n      }\r\n    } catch (error) {\r\n      onChangeMediationToggle(!mediate);\r\n      showErrorToastNotification({ text: errorToastNotification });\r\n      Log.error(`Error while ${operation} adSense mediation: ${error}`);\r\n    } finally {\r\n      onLoadingChanged(false);\r\n    }\r\n  }\r\n});\r\n","import { classNamesFunction, getTheme } from '@fluentui/react';\r\nimport { IPubcenterPalette, IPubcenterSpacing } from '../theme';\r\nimport { IAppPageStyleProps, IAppPageStyles } from './App.types';\r\n\r\nexport const getStyles = (props: IAppPageStyleProps): IAppPageStyles => {\r\n  const { theme } = props;\r\n  const spacing = theme.spacing as IPubcenterSpacing;\r\n  const palette = theme.palette as IPubcenterPalette;\r\n\r\n  return {\r\n    skipButton: {\r\n      left: '50%',\r\n      padding: spacing.size16,\r\n      zIndex: '1',\r\n      position: 'absolute',\r\n      transform: 'translateY(-100%)',\r\n      transition: 'transform 0.3s',\r\n      backgroundColor: palette.neutralLight,\r\n      selectors: {\r\n        '&:focus, &:hover': {\r\n          transform: 'translateY(0%)',\r\n        },\r\n      },\r\n    },\r\n  };\r\n};\r\n\r\nconst classNames = classNamesFunction<IAppPageStyleProps, IAppPageStyles>();\r\n\r\nexport function getClassNames<PropType>(props?: PropType) {\r\n  return classNames(getStyles, { theme: getTheme(), ...props });\r\n}\r\n","import { Log } from '../../../logging/src';\r\nimport { UnauthorizedInternalUserPageRoute } from '../../Routes';\r\n\r\nexport const PubCenterUserRoles = [41, 42, 43, 49, 61, 62, 91, 116, 124, 125, 156, 169, 170, 171, 172, 174];\r\n\r\nexport function checkInternalUserAccess(roleIds?: number[]) {\r\n  if (!roleIds) {\r\n    return;\r\n  }\r\n\r\n  const usersPubCenterRoles = roleIds.filter((roleId: number) => PubCenterUserRoles.includes(roleId));\r\n\r\n  if (usersPubCenterRoles.length > 0) {\r\n    return;\r\n  }\r\n\r\n  const UnauthorizedInternalUserRoute = encodeURI(\r\n    window.location.protocol + '//' + window.location.host + UnauthorizedInternalUserPageRoute\r\n  );\r\n  Log.error(\r\n    `User does not have access to PubCenter with following roles: ${roleIds}. Redirecting to ${UnauthorizedInternalUserPageRoute} error page`\r\n  );\r\n\r\n  window.location.replace(UnauthorizedInternalUserRoute);\r\n}\r\n","import { nullRender } from '@fluentui/utilities';\r\nimport { observer } from 'mobx-react';\r\nimport * as React from 'react';\r\nimport { Redirect, Route, RouteComponentProps } from 'react-router';\r\nimport { Log } from '../logging/src';\r\nimport { getAppStore, onAuthLogout } from './@data';\r\nimport { checkInternalUserAccess } from './@data/services/AuthorizationService';\r\nimport { isLocationPubCenter } from './utils/UrlUtils';\r\n\r\ninterface IAuthenticatedRouteProps {\r\n  key: string;\r\n  path: string;\r\n  component: React.ComponentType<RouteComponentProps> | React.ComponentType;\r\n  routeProps: RouteComponentProps;\r\n}\r\n\r\nexport const AuthenticatedRoute = observer(\r\n  class extends React.Component<IAuthenticatedRouteProps> {\r\n    public render(): JSX.Element | null {\r\n      const { path, component, routeProps } = this.props;\r\n      const { userContext, isInviteUserFlow } = getAppStore();\r\n\r\n      const redirectToOldLoginPage = {\r\n        pathname: '/loginV2',\r\n        state: { from: routeProps.location },\r\n      };\r\n      const redirectToNewLoginPage = {\r\n        pathname: '/',\r\n        state: { from: routeProps.location },\r\n      };\r\n\r\n      if (!userContext) {\r\n        return <Redirect to={isLocationPubCenter() ? redirectToOldLoginPage : redirectToNewLoginPage} />;\r\n      }\r\n\r\n      checkInternalUserAccess(userContext?.userRoles);\r\n      if (!isInviteUserFlow && userContext?.token && userContext?.userRoles) {\r\n        return <Route path={path} component={component} />;\r\n      } else {\r\n        Log.error(`User not authenticated logging out ${userContext?.email}`);\r\n        onAuthLogout();\r\n        return nullRender();\r\n      }\r\n    }\r\n  }\r\n);\r\n","import { defineMessages } from 'react-intl';\r\n\r\nexport default defineMessages({\r\n  title: {\r\n    id: 'loginPage.title',\r\n    defaultMessage: 'Microsoft pubCenter',\r\n  },\r\n  welcome: {\r\n    id: 'loginPage.welcome',\r\n    defaultMessage: 'Welcome to pubCenter!',\r\n  },\r\n  description: {\r\n    id: 'loginPage.description',\r\n    defaultMessage: `We understand that creating content can be time-consuming. Making it profitable should be simple and hassle-free.`,\r\n  },\r\n  emailPlaceholder: {\r\n    id: 'loginPage.emailPlaceholder',\r\n    defaultMessage: 'Enter your email address',\r\n  },\r\n  signInButton: {\r\n    id: 'loginPage.signInButton',\r\n    defaultMessage: 'Sign in',\r\n  },\r\n  signInButtonAriaLabel: {\r\n    id: 'loginPage.signInButtonAriaLabel',\r\n    defaultMessage: 'Click to sign in',\r\n  },\r\n  imageAlt: {\r\n    id: 'loginPage.imageAlt',\r\n    defaultMessage: 'login background image',\r\n  },\r\n  redirectionMessage: {\r\n    id: 'loginPage.redirectionMessage',\r\n    defaultMessage: 'Redirecting to Monetize Now',\r\n  },\r\n});\r\n","import { Overlay, Spinner, mergeStyleSets } from '@fluentui/react';\r\nimport React from 'react';\r\n\r\nexport interface IRedirectionSpinnerStyles {\r\n  overlayStyle: string;\r\n  spinnerStyle: string;\r\n}\r\n\r\nconst getStyles = () =>\r\n  mergeStyleSets({\r\n    overlayStyle: {\r\n      flex: 1,\r\n      display: 'flex',\r\n      position: 'fixed',\r\n      zIndex: 9999999,\r\n    },\r\n    spinnerStyle: {\r\n      flex: 1,\r\n      display: 'flex',\r\n      selectors: {\r\n        '.ms-Spinner-circle': {\r\n          height: 67,\r\n          width: 67,\r\n          borderWidth: '4px',\r\n        },\r\n        '.ms-Spinner-label': {\r\n          color: '#000',\r\n          fontSize: '24px',\r\n          fontWeight: 'bold',\r\n        },\r\n      },\r\n    },\r\n  });\r\n\r\nexport const RedirectionSpinner = ({ label }) => {\r\n  const { overlayStyle, spinnerStyle } = getStyles();\r\n  return (\r\n    <>\r\n      <Overlay className={overlayStyle}>\r\n        <Spinner className={spinnerStyle} label={label} labelPosition=\"bottom\" />\r\n      </Overlay>\r\n    </>\r\n  );\r\n};\r\n","export enum ResourceType {\r\n  AdUnit,\r\n  Filter,\r\n  Channel,\r\n  Publisher,\r\n  Reporting,\r\n  WebProperty,\r\n  Account,\r\n  User\r\n}\r\n\r\nexport enum CrossEntityResourceType {\r\n  PublisherByAdunit,\r\n  PublisherByAccount,\r\n  PublisherByUser,\r\n  PublisherByWebProperty,\r\n  PublisherByChannel,\r\n  PublisherByFilter\r\n}\r\n\r\nexport const crossEntityResourceTypeMap: Map<string, string[]> = new Map([\r\n  [\r\n    ResourceType[ResourceType.Publisher],\r\n    [\r\n      CrossEntityResourceType[CrossEntityResourceType.PublisherByAccount],\r\n      CrossEntityResourceType[CrossEntityResourceType.PublisherByAdunit],\r\n      CrossEntityResourceType[CrossEntityResourceType.PublisherByUser],\r\n      CrossEntityResourceType[CrossEntityResourceType.PublisherByWebProperty]\r\n    ]\r\n  ]\r\n]);\r\n","export enum ResourceTypeDistribution {\r\n  EqualBucketSize = 0,\r\n  DynamicBucketSize = 1\r\n}\r\n","/* eslint-disable jsx-a11y/interactive-supports-focus */\r\nimport {\r\n  Callout,\r\n  classNamesFunction,\r\n  DirectionalHint,\r\n  FocusZone,\r\n  FocusZoneDirection,\r\n  ICalloutProps,\r\n  IProcessedStyleSet,\r\n  SearchBox,\r\n  Shimmer,\r\n  ShimmerElementType,\r\n} from '@fluentui/react';\r\nimport * as React from 'react';\r\nimport { PubcenterTheme } from '../../../theme';\r\nimport { useWindowSize } from '../../hooks';\r\nimport { getStore } from '../../hooks/useWindowSize/store/store';\r\nimport { ISearchBarStyleProps, ISearchBarStyles, ISearchProps, ISearchState } from './Search.types';\r\n\r\nconst getClassNames = classNamesFunction<ISearchBarStyleProps, ISearchBarStyles>();\r\nconst defaultMinLettersToSearch = 3;\r\nconst defaultCalloutWidth = `clamp(${PubcenterTheme.spacing.size256}, 50vw, ${PubcenterTheme.spacing.size960})`;\r\nconst maxCalloutHeight = 614;\r\n\r\nexport class SearchBase<T> extends React.Component<ISearchProps<T>, ISearchState> {\r\n  private _classNames: IProcessedStyleSet<ISearchBarStyles>;\r\n  private _searchBarElement = React.createRef<HTMLDivElement>();\r\n\r\n  constructor(props: ISearchProps<T>) {\r\n    super(props);\r\n    this.state = {\r\n      calloutVisible: false,\r\n    };\r\n  }\r\n\r\n  public handleClickOutside = (event) => {\r\n    if (this._searchBarElement && !this._searchBarElement?.current?.contains(event.target)) {\r\n      this.props.onClearInResponsiveView?.();\r\n    }\r\n  };\r\n\r\n  public componentWillUnmount() {\r\n    document.removeEventListener('mousedown', this.handleClickOutside);\r\n  }\r\n\r\n  public componentDidMount() {\r\n    document.addEventListener('mousedown', this.handleClickOutside);\r\n    this.setState({ calloutVisible: false });\r\n  }\r\n\r\n  public componentDidUpdate(prevProps: ISearchProps<T>) {\r\n    if (prevProps.searchInProgress === true && this.props.searchInProgress === false) {\r\n      this.setState({ calloutVisible: true });\r\n    }\r\n  }\r\n\r\n  public render(): JSX.Element {\r\n    const {\r\n      styles,\r\n      theme,\r\n      searchBoxProps,\r\n      searchInProgress,\r\n      minLettersToSearch,\r\n      calloutProps,\r\n      searchResultList,\r\n      searchResultListAriaLabel,\r\n    } = this.props;\r\n\r\n    const { windowStoreSerializer } = useWindowSize();\r\n    const windowSize = windowStoreSerializer(getStore());\r\n    const { width: screenWidth, height: screenHeight, isWindowSmallSize, isWindowExtraSmallSize } = windowSize;\r\n    this._classNames = getClassNames(styles, { theme: theme! });\r\n\r\n    let searchCalloutProps: ICalloutProps = {\r\n      calloutMaxHeight: isWindowSmallSize || isWindowExtraSmallSize ? screenHeight : maxCalloutHeight,\r\n      style: {\r\n        width: isWindowSmallSize || isWindowExtraSmallSize ? screenWidth : calloutProps?.calloutWidth ?? defaultCalloutWidth,\r\n      },\r\n    };\r\n    if (calloutProps) {\r\n      const { calloutWidth, calloutMaxHeight, ...otherCalloutProps } = calloutProps;\r\n      searchCalloutProps = { ...otherCalloutProps };\r\n    }\r\n\r\n    return (\r\n      <>\r\n        <div role=\"search\" className={this._classNames.searchBar} ref={this._searchBarElement}>\r\n          <SearchBox\r\n            styles={this._classNames.subComponentStyles.searchBox}\r\n            placeholder={searchBoxProps.placeholder}\r\n            disableAnimation={true}\r\n            onSearch={(value) => {\r\n              this.setState({ calloutVisible: true });\r\n              this._onChange(value, minLettersToSearch ? minLettersToSearch : defaultMinLettersToSearch);\r\n            }}\r\n            onClear={this._onClear}\r\n            onChange={(_, value: string) => this._onChange(value, minLettersToSearch ? minLettersToSearch : defaultMinLettersToSearch)}\r\n            ariaLabel={searchBoxProps.searchBoxAriaLabel}\r\n          />\r\n        </div>\r\n        {searchInProgress && (\r\n          <Callout\r\n            target={this._searchBarElement.current}\r\n            className={this._classNames.calloutWrapper}\r\n            {...searchCalloutProps}\r\n            role={'dialog'}\r\n            directionalHint={DirectionalHint.bottomCenter}\r\n            directionalHintFixed={true}\r\n            isBeakVisible={false}\r\n            gapSpace={2}\r\n          >\r\n            {this._onRenderShimmer()}\r\n          </Callout>\r\n        )}\r\n        {!searchInProgress && searchResultList && this.state.calloutVisible && (\r\n          <Callout\r\n            target={this._searchBarElement.current}\r\n            className={this._classNames.calloutWrapper}\r\n            {...searchCalloutProps}\r\n            role={'dialog'}\r\n            onDismiss={() => this.setState({ calloutVisible: false })}\r\n            directionalHint={DirectionalHint.bottomCenter}\r\n            directionalHintFixed={true}\r\n            isBeakVisible={false}\r\n            gapSpace={2}\r\n            setInitialFocus={searchResultList ? true : false}\r\n          >\r\n            <FocusZone\r\n              onClick={() => this.setState({ calloutVisible: false })}\r\n              onKeyDown={(ev) => {\r\n                // Earlier clicking tab was taking focus out of context and hence breaking the navigation order\r\n                // Dismissing the callout makes sure that it will focus on the next active element in the tab order.\r\n\r\n                if (ev.key === 'Tab' || (ev.shiftKey && ev.key === 'Tab') || ev.key === ' ' || ev.key === 'Enter') {\r\n                  this.setState({ calloutVisible: false });\r\n                }\r\n              }}\r\n              role=\"listbox\"\r\n              isCircularNavigation={true}\r\n              direction={FocusZoneDirection.vertical}\r\n              aria-label={searchResultListAriaLabel}\r\n              aria-live=\"assertive\"\r\n            >\r\n              {searchResultList.length > 0 &&\r\n                searchResultList.map((category) => this.props.onRenderSearchResult && this.props.onRenderSearchResult(category))}\r\n              {this.props.onRenderSearchResultFooter && this.props.onRenderSearchResultFooter()}\r\n            </FocusZone>\r\n          </Callout>\r\n        )}\r\n      </>\r\n    );\r\n  }\r\n\r\n  private _onRenderShimmer = (): JSX.Element => {\r\n    return (\r\n      <div className={this._classNames.shimmerCallout}>\r\n        <Shimmer\r\n          className={this._classNames.shimmerElement}\r\n          shimmerElements={[\r\n            { type: ShimmerElementType.circle, height: 28, width: 28 },\r\n            { type: ShimmerElementType.gap, height: 28, width: 16 },\r\n            { type: ShimmerElementType.line, height: 20, width: 390 },\r\n            { type: ShimmerElementType.gap, height: 28, width: '100%' },\r\n          ]}\r\n        />\r\n        <Shimmer\r\n          className={this._classNames.shimmerElement}\r\n          shimmerElements={[\r\n            { type: ShimmerElementType.circle, height: 28, width: 28 },\r\n            { type: ShimmerElementType.gap, height: 28, width: 16 },\r\n            { type: ShimmerElementType.line, height: 20, width: 390 },\r\n            { type: ShimmerElementType.gap, height: 28, width: '100%' },\r\n          ]}\r\n        />\r\n        <Shimmer\r\n          className={this._classNames.shimmerElement}\r\n          shimmerElements={[\r\n            { type: ShimmerElementType.circle, height: 28, width: 28 },\r\n            { type: ShimmerElementType.gap, height: 28, width: 16 },\r\n            { type: ShimmerElementType.line, height: 20, width: 390 },\r\n            { type: ShimmerElementType.gap, height: 28, width: '100%' },\r\n          ]}\r\n        />\r\n      </div>\r\n    );\r\n  };\r\n\r\n  private _onChange = (queryText: string, minNumLettersForSearchTrigger: number): void => {\r\n    if (this.props.searchBoxProps && this.props.searchBoxProps.onChange) {\r\n      this.props.searchBoxProps.onChange(queryText, minNumLettersForSearchTrigger);\r\n    }\r\n  };\r\n\r\n  private _onClear = (): void => {\r\n    this.setState({ calloutVisible: false });\r\n    this.props.onClearInResponsiveView?.();\r\n    if (this.props.searchBoxProps && this.props.searchBoxProps.onClear) {\r\n      this.props.searchBoxProps.onClear();\r\n    }\r\n  };\r\n}\r\n","import { BreakPoints, IPubcenterPalette, IPubcenterSpacing } from '../../../theme';\r\nimport { ISearchBarStyleProps, ISearchBarStyles } from './Search.types';\r\n\r\nconst { ResponsiveSmall } = BreakPoints;\r\n\r\nexport const getSearchStyles = (props: ISearchBarStyleProps): ISearchBarStyles => {\r\n  const { theme } = props;\r\n  const spacing = theme.spacing as IPubcenterSpacing;\r\n  const pallete = theme.palette as IPubcenterPalette;\r\n\r\n  return {\r\n    root: ['ms-GlobalSearch'],\r\n    searchBar: [\r\n      'ms-GlobalSearchBar',\r\n      {\r\n        display: 'flex',\r\n        alignItems: 'center',\r\n      },\r\n    ],\r\n    calloutWrapper: {\r\n      [ResponsiveSmall]: {\r\n        left: '0 !important',\r\n        right: '0 !important',\r\n        '>div[role=\"dialog\"]': {\r\n          height: '100vh',\r\n        },\r\n      },\r\n    },\r\n    shimmerCallout: {\r\n      flexDirection: 'column',\r\n      width: spacing.size480,\r\n    },\r\n    shimmerElement: {\r\n      width: spacing.size480,\r\n      height: spacing.size48,\r\n      padding: '0 16px',\r\n    },\r\n    subComponentStyles: {\r\n      searchBox: {\r\n        root: [\r\n          'ms-fontSize-Body14',\r\n          {\r\n            height: spacing.size32,\r\n            width: `clamp(${spacing.size256}, 50vw, ${spacing.size960})`,\r\n            borderRadius: '2px',\r\n            background: pallete.neutralQuaternaryAlt,\r\n            selectors: {\r\n              ':hover': {\r\n                background: pallete.white,\r\n              },\r\n            },\r\n            [ResponsiveSmall]: {\r\n              width: `clamp(30vw, 40vw, 45vw);`,\r\n            },\r\n          },\r\n        ],\r\n      },\r\n    },\r\n  };\r\n};\r\n","import { styled } from '@fluentui/react';\r\nimport { SearchBase } from './Search.base';\r\nimport { getSearchStyles } from './Search.styles';\r\n\r\n// Use Fabric Base guidelines since this might be contributed back to Fabric.\r\nexport const Search = styled(SearchBase, getSearchStyles, undefined, {\r\n  scope: 'Search',\r\n});\r\n","import { defineMessages } from 'react-intl';\r\n\r\nexport default defineMessages({\r\n  homeButtonAriaLabel: {\r\n    id: 'header.homeButtonAriaLabel',\r\n    defaultMessage: '{appName} home',\r\n  },\r\n  dropdownAriaLabel: {\r\n    id: 'header.dropdownAriaLabel',\r\n    defaultMessage: 'Module Selector',\r\n  },\r\n  myAccountDescribedByLabel: {\r\n    id: 'header.myAccountDescribedByLabel',\r\n    defaultMessage: 'Click on the icon to view more details and get a link to sign out',\r\n  },\r\n  myAccountStatusLabel: {\r\n    id: 'header.myAccountStatusLabel',\r\n    defaultMessage: 'Your profile picture with status set as online',\r\n  },\r\n  defaultRouteDirection: {\r\n    id: 'header.defaultRouteDirection',\r\n    defaultMessage: 'At {appName} Home',\r\n  }\r\n});\r\n","import { FontWeights, IButtonStyles, ITheme } from '@fluentui/react';\r\nimport { BreakPoints, IPubcenterTheme } from '../../../theme';\r\nimport { IHeaderStyleProps, IHeaderStyles } from './Header.types';\r\n\r\nconst { ResponsiveExtraLarge, ResponsiveSmall } = BreakPoints;\r\n\r\nexport const getStyles = (props: IHeaderStyleProps): IHeaderStyles => {\r\n  const theme = (props.theme as unknown) as IPubcenterTheme;\r\n  const { spacing, fonts, palette } = theme;\r\n\r\n  return {\r\n    root: {\r\n      backgroundColor: props.isTythonExperience ? palette['NeutralBackground5.Rest'] : palette.headerGlobal,\r\n      color: 'white',\r\n      display: 'flex',\r\n      alignItems: 'center',\r\n    },\r\n    defaultButtonStyle: {\r\n      borderRadius: '5px',\r\n      whiteSpace: 'nowrap',\r\n    },\r\n    defaultButtonWrapperStyle: {\r\n      position: 'relative',\r\n      display: 'flex',\r\n      flexWrap: 'nowrap',\r\n      flexGrow: '100',\r\n      justifyContent: 'flex-end',\r\n    },\r\n    itemIcon: {\r\n      fontSize: fonts.size16.fontSize,\r\n      width: spacing.size48,\r\n      height: spacing.size48,\r\n      textAlign: 'center',\r\n      lineHeight: spacing.size48,\r\n      selectors: {\r\n        ':hover': {\r\n          background: palette.themeSecondary,\r\n        },\r\n      },\r\n    },\r\n    dot: {\r\n      position: 'absolute',\r\n      top: spacing.size12,\r\n      marginLeft: spacing.size24,\r\n      width: spacing.size10,\r\n      height: spacing.size10,\r\n      backgroundColor: 'red',\r\n      borderRadius: '50%',\r\n    },\r\n    moreInfoIcon: {\r\n      color: '#ffffff',\r\n      [ResponsiveSmall]: {\r\n        color: palette.neutralLight,\r\n      },\r\n    },\r\n    overflowIcon: {\r\n      color: '#000000',\r\n    },\r\n    overflowMenuWrapper: {\r\n      '.ms-ContextualMenu-link': {\r\n        ':hover': {\r\n          '.ms-ContextualMenu-icon': {\r\n            color: '#000000',\r\n          },\r\n        },\r\n      },\r\n    },\r\n    navigationLm: {\r\n      display: 'flex',\r\n      alignItems: 'center',\r\n      flexGrow: 1,\r\n      // adding padding to accormodate the focus indicator outline within the header\r\n      padding: `${spacing.size2} 0`,\r\n    },\r\n    leftSection: {\r\n      [ResponsiveExtraLarge]: {\r\n        marginRight: theme.spacing.s1,\r\n      },\r\n    },\r\n    rightSection: {\r\n      flexGrow: 1,\r\n      justifyContent: 'flex-end',\r\n      ...(props.isTythonExperience\r\n        ? {\r\n            '.ms-OverflowSet-item': {\r\n              'i[role=\"img\"]': { color: palette['NeutralForeground2.Rest'] },\r\n              'i[role=\"img\"]:hover': { background: palette['NeutralBackground3.Rest'] },\r\n              '.ms-Persona:hover': { background: palette['NeutralBackground3.Rest'] },\r\n            },\r\n          }\r\n        : {}),\r\n      [ResponsiveSmall]: {\r\n        zIndex: 9999,\r\n      },\r\n    },\r\n    logo: {\r\n      display: 'flex',\r\n      alignItems: 'center',\r\n      ...(props.isTythonExperience ? { color: palette['NeutralForeground1.Rest'] } : {}),\r\n      marginLeft: theme.spacing.s1,\r\n      marginRight: theme.spacing.s1,\r\n      height: 44,\r\n      selectors: {\r\n        i: {\r\n          fontSize: 28,\r\n          marginRight: theme.spacing.s1,\r\n        },\r\n        span: {\r\n          fontSize: fonts.size16.fontSize,\r\n          fontWeight: FontWeights.semibold,\r\n          marginRight: theme.spacing.s1,\r\n          ...(props.isTythonExperience ? { marginLeft: theme.spacing.size30 } : {}),\r\n        },\r\n      },\r\n      [ResponsiveSmall]: {\r\n        paddingLeft: 0,\r\n      },\r\n    },\r\n    helpCenterIcon: { color: '#ffffff' },\r\n    textHeader: {\r\n      marginLeft: 8,\r\n    },\r\n    dropdownOption: {\r\n      marginRight: theme.spacing.s1,\r\n    },\r\n    navItem: {\r\n      cursor: 'pointer',\r\n    },\r\n    subComponentStyles: {\r\n      dropdown: {\r\n        root: {\r\n          width: 200,\r\n          marginRight: theme.spacing.m,\r\n        },\r\n        dropdown: [\r\n          {\r\n            selectors: {\r\n              '&:focus $title': {\r\n                borderColor: palette.themeSecondary,\r\n              },\r\n            },\r\n          },\r\n        ],\r\n      },\r\n      itemIdentity: {\r\n        root: {\r\n          flexDirection: 'row-reverse',\r\n          height: '100%',\r\n          padding: '10px',\r\n          marginRight: '10px',\r\n          selectors: {\r\n            '&:hover': {\r\n              background: palette.themeSecondary,\r\n            },\r\n            '&:hover $primaryText': {\r\n              color: 'white',\r\n            },\r\n          },\r\n        },\r\n        primaryText: {\r\n          color: 'white',\r\n        },\r\n        secondaryText: {\r\n          color: 'white',\r\n        },\r\n      },\r\n    },\r\n  };\r\n};\r\n\r\nexport const getOverflowIconStyle = (theme: ITheme): Partial<IButtonStyles> => {\r\n  return {\r\n    root: {\r\n      fontSize: 16,\r\n      minWidth: 0,\r\n      color: '#ffffff',\r\n      width: 48,\r\n      // adjusting the height with extra padding to accomodate the focus indicator outline within the header\r\n      height: 44,\r\n      textAlign: 'center',\r\n      lineHeight: 44,\r\n    },\r\n    rootHovered: {\r\n      background: theme.palette.themeSecondary,\r\n    },\r\n    rootExpanded: {\r\n      background: theme.palette.themeSecondary,\r\n    },\r\n  };\r\n};\r\n","import {\r\n  Announced,\r\n  classNamesFunction,\r\n  ContextualMenu,\r\n  css,\r\n  DefaultButton,\r\n  Dropdown,\r\n  getTheme,\r\n  Icon,\r\n  IconButton,\r\n  IContextualMenuItem,\r\n  IContextualMenuProps,\r\n  IDropdownOption,\r\n  IProcessedStyleSet,\r\n  OverflowSet,\r\n  Panel,\r\n  PanelType,\r\n  Persona,\r\n  PersonaPresence,\r\n  PersonaSize,\r\n  ResizeGroup,\r\n} from '@fluentui/react';\r\nimport * as React from 'react';\r\nimport { getAppStore, LayoutMode } from '../../@data';\r\nimport { isNotAuthorizedUser, isTythonSelfServeUser } from '../../@data/utils/checkUserType';\r\nimport { getSupportedLocalesMapping } from '../../@data/utils/supportedLanguages';\r\nimport AppMessages from '../../App.messages';\r\nimport { reverseLocales, userLocales } from '../../config/locale';\r\nimport {\r\n  APP_NAME_NEW,\r\n  APP_NAME_PUBCENTER,\r\n  CUSTOM_NOTIFICATIONS_WIDTH,\r\n  CUSTOM_WIDTH,\r\n  EN_LOCALE_KEY,\r\n  UNAUTHORIZED_LOCAL_STORAGE_LOCALE,\r\n} from '../../constants/AppConstants';\r\nimport { useWindowSize } from '../../hooks';\r\nimport { getStore } from '../../hooks/useWindowSize/store/store';\r\nimport { onLanguageChanged } from '../../pages/ad-management/Account/Settings/@data/mutatorActions';\r\nimport { AcceptInvitePageRoute, DefaultRoute, LandingPageRoute, SignUpPageRoute } from '../../Routes';\r\nimport { isLocationPubCenter } from '../../utils';\r\nimport { isButtonPressKey } from '../../utils/AccessibilityUtils';\r\nimport { Logo } from '../Logo/Logo';\r\nimport { Search } from '../Search/Search';\r\nimport messages from './Header.messages';\r\nimport { getOverflowIconStyle, getStyles } from './Header.styles';\r\nimport { IHeaderDropdownItem, IHeaderItem, IHeaderProps, IHeaderState, IHeaderStyleProps, IHeaderStyles, PanelTypes } from './Header.types';\r\n\r\nconst getClassNames = classNamesFunction<IHeaderStyleProps, IHeaderStyles>();\r\nconst defaultLang = getSupportedLocalesMapping(localStorage.getItem(UNAUTHORIZED_LOCAL_STORAGE_LOCALE))\r\n  ? getSupportedLocalesMapping(localStorage.getItem(UNAUTHORIZED_LOCAL_STORAGE_LOCALE))[\r\n      reverseLocales[localStorage.getItem(UNAUTHORIZED_LOCAL_STORAGE_LOCALE) ?? EN_LOCALE_KEY]\r\n    ]\r\n  : 'English - United States';\r\n\r\ninterface IHeaderData {\r\n  items?: IHeaderItem[];\r\n  isSearchBarActiveInNonRegularView?: boolean;\r\n}\r\n\r\nexport class Header<T> extends React.Component<IHeaderProps<T>, IHeaderState> {\r\n  private _classNames: IProcessedStyleSet<IHeaderStyles>;\r\n  constructor(props: IHeaderProps<T>) {\r\n    super(props);\r\n\r\n    const initialRouteMatch = window.location.pathname.match(/(\\/[\\w-]+)\\/?/);\r\n    const initialRoute = initialRouteMatch ? initialRouteMatch[1] : DefaultRoute;\r\n    this.state = {\r\n      title: this.props.loadingText || '...',\r\n      currentRoute: initialRoute,\r\n      announcedMessage: undefined,\r\n      panelType: undefined,\r\n      isSearchBarActiveInNonRegularView: false,\r\n      selectedLanguage: defaultLang,\r\n    };\r\n  }\r\n\r\n  public componentDidMount(): void {\r\n    getAppStore().userContext?.id === undefined &&\r\n      onLanguageChanged(localStorage.getItem(UNAUTHORIZED_LOCAL_STORAGE_LOCALE) ?? EN_LOCALE_KEY, UNAUTHORIZED_LOCAL_STORAGE_LOCALE);\r\n  }\r\n\r\n  public componentDidUpdate(prevProps: IHeaderProps<T>) {\r\n    const routeMatch = window.location.pathname.match(/(\\/[\\w-]+)\\/?/);\r\n    const route = routeMatch ? routeMatch[1] : DefaultRoute;\r\n\r\n    if (route !== this.state.currentRoute) {\r\n      this.setState({\r\n        currentRoute: route,\r\n      });\r\n    }\r\n\r\n    // make sure this state get's reset so screen reader will announce every time when redirection is triggered\r\n    if (this.state.announcedMessage) {\r\n      setTimeout(\r\n        () =>\r\n          this.setState({\r\n            announcedMessage: undefined,\r\n          }),\r\n        500\r\n      );\r\n    }\r\n  }\r\n\r\n  public render(): JSX.Element {\r\n    const {\r\n      items,\r\n      useCMUIHelpExperience: { CMUIHeaderMenuItemSerializer },\r\n    } = this.props;\r\n    this._classNames = getClassNames(getStyles, {\r\n      theme: getTheme(),\r\n      isTythonExperience: isTythonSelfServeUser() || !isLocationPubCenter(),\r\n    });\r\n\r\n    const headerData: IHeaderData = {\r\n      items: CMUIHeaderMenuItemSerializer(isTythonSelfServeUser(), items),\r\n    };\r\n\r\n    return <ResizeGroup data={headerData} onRenderData={this._onRenderData} onReduceData={this._onReduceData} />;\r\n  }\r\n\r\n  private _onReduceData = (data: IHeaderData): IHeaderProps<T> | undefined => {\r\n    return undefined;\r\n  };\r\n\r\n  private _onRenderData = (data?: IHeaderData): JSX.Element => {\r\n    const { publisher, userContext } = getAppStore();\r\n    const signingUp: boolean = publisher === undefined && userContext?.id === undefined;\r\n    const shouldRenderCustomLeftIcon = !!this.props.renderLeftIcon;\r\n    const { formatMessage } = this.props.intl;\r\n    const { windowStoreSerializer } = useWindowSize();\r\n    const { isWindowSmallSize, isWindowRegularSize, isWindowExtraSmallSize } = windowStoreSerializer(getStore());\r\n    const { isSearchBarActiveInNonRegularView } = this.state;\r\n    const shouldHideDropdownInResponsiveView = !isWindowRegularSize && isSearchBarActiveInNonRegularView;\r\n    const shouldRenderSearchBarInResponsiveView = (isSearchBarActiveInNonRegularView && !isWindowRegularSize) || isWindowRegularSize;\r\n    const SearchBarIconButton: IHeaderItem[] =\r\n      // responsive logic to hide search icon\r\n      isWindowRegularSize || isSearchBarActiveInNonRegularView\r\n        ? []\r\n        : [\r\n            // render logic to disable search icon for tython user\r\n            ...(isTythonSelfServeUser()\r\n              ? []\r\n              : [\r\n                  {\r\n                    title: '',\r\n                    icon: 'Search',\r\n                    onClick: () => this.setState({ isSearchBarActiveInNonRegularView: true }),\r\n                    key: 'HeaderSearchIcon',\r\n                    shouldOverflowUnderExtraSmallScreen: true,\r\n                  },\r\n                ]),\r\n          ];\r\n    const headerItems = [...SearchBarIconButton, ...(data?.items ?? [])];\r\n    const [headerIconItems, headerIconOverflowItems] = [\r\n      isWindowExtraSmallSize ? headerItems.filter((item) => !item.shouldOverflowUnderExtraSmallScreen) : headerItems,\r\n      isWindowExtraSmallSize\r\n        ? headerItems\r\n            .filter((item) => item.shouldOverflowUnderExtraSmallScreen)\r\n            // as a11y enhancement, make sure first item gets auto focused\r\n            .map((item, index) => (index === 0 ? { ...item, autoFocus: 'true' } : item))\r\n        : [],\r\n    ];\r\n    const isContentOnlyLayout = getAppStore().layout === LayoutMode.ContentOnly;\r\n    const selectedLang = getSupportedLocalesMapping(localStorage.getItem(UNAUTHORIZED_LOCAL_STORAGE_LOCALE))\r\n      ? getSupportedLocalesMapping(localStorage.getItem(UNAUTHORIZED_LOCAL_STORAGE_LOCALE))[\r\n          reverseLocales[localStorage.getItem(UNAUTHORIZED_LOCAL_STORAGE_LOCALE) ?? EN_LOCALE_KEY]\r\n        ]\r\n      : 'English - United States';\r\n    const selectedHeaderItem = headerItems.find((item) => item.key === this.state.selectedItem?.key);\r\n\r\n    localStorage.getItem(UNAUTHORIZED_LOCAL_STORAGE_LOCALE) ?? localStorage.setItem(UNAUTHORIZED_LOCAL_STORAGE_LOCALE, EN_LOCALE_KEY);\r\n\r\n    const menuProps: IContextualMenuProps = {\r\n      onItemClick: (ev, item) => {\r\n        if (item && item.text && item.key !== localStorage.getItem(UNAUTHORIZED_LOCAL_STORAGE_LOCALE)) {\r\n          onLanguageChanged(item.key, UNAUTHORIZED_LOCAL_STORAGE_LOCALE);\r\n        }\r\n      },\r\n      items: this._getLanguageContextualMenuItems(getAppStore().locale),\r\n      directionalHintFixed: true,\r\n    };\r\n\r\n    return (\r\n      <header className={this._classNames.root}>\r\n        {this.state.announcedMessage ? <Announced message={this.state.announcedMessage} /> : undefined}\r\n\r\n        <div\r\n          className={css(this._classNames.logo, shouldRenderCustomLeftIcon ? '' : this._classNames.navItem)}\r\n          onClick={() => {\r\n            if (!shouldRenderCustomLeftIcon) {\r\n              this._navigateTo(DefaultRoute);\r\n              this.setState({\r\n                announcedMessage: formatMessage(messages.defaultRouteDirection, {\r\n                  appName: isTythonSelfServeUser() ? APP_NAME_NEW : APP_NAME_PUBCENTER,\r\n                }),\r\n              });\r\n            }\r\n          }}\r\n          onKeyDown={(ev) => {\r\n            if (!shouldRenderCustomLeftIcon && isButtonPressKey(ev.key)) {\r\n              this._navigateTo(DefaultRoute);\r\n              this.setState({\r\n                announcedMessage: formatMessage(messages.defaultRouteDirection, {\r\n                  appName: isTythonSelfServeUser() ? APP_NAME_NEW : APP_NAME_PUBCENTER,\r\n                }),\r\n              });\r\n            }\r\n          }}\r\n          role=\"link\"\r\n          tabIndex={0}\r\n          aria-label={formatMessage(messages.homeButtonAriaLabel, {\r\n            appName: isTythonSelfServeUser() ? APP_NAME_NEW : APP_NAME_PUBCENTER,\r\n          })}\r\n        >\r\n          {this.props.renderLeftIcon ?? (\r\n            <Logo\r\n              shouldRenderLogo={!(isWindowSmallSize || isWindowExtraSmallSize) || isContentOnlyLayout}\r\n              renderGreyLogo={!isLocationPubCenter() || isTythonSelfServeUser()}\r\n            />\r\n          )}\r\n        </div>\r\n\r\n        <nav className={css(this._classNames.navigationLm)}>\r\n          {/* Temporarily hiding module selection dropDown and global search for tython MVP users (including signup page) */}\r\n          {this._shouldShowDropdownSearch() && (\r\n            <>\r\n              {!shouldHideDropdownInResponsiveView && (\r\n                <div className={this._classNames.leftSection}>\r\n                  <Dropdown\r\n                    className={this._classNames.navItem}\r\n                    styles={this._classNames.subComponentStyles.dropdown}\r\n                    onRenderOption={this._onRenderOption}\r\n                    options={this._initializeRoutesData()}\r\n                    selectedKey={this.state.currentRoute}\r\n                    onChange={this._onDropdownChange}\r\n                    ariaLabel={formatMessage(messages.dropdownAriaLabel)}\r\n                  />\r\n                </div>\r\n              )}\r\n\r\n              {this.props.searchProps && shouldRenderSearchBarInResponsiveView && (\r\n                <Search\r\n                  {...this.props.searchProps}\r\n                  onClearInResponsiveView={\r\n                    isSearchBarActiveInNonRegularView ? () => this.setState({ isSearchBarActiveInNonRegularView: false }) : undefined\r\n                  }\r\n                />\r\n              )}\r\n            </>\r\n          )}\r\n\r\n          {signingUp && (\r\n            <div className={this._classNames.defaultButtonWrapperStyle}>\r\n              <DefaultButton\r\n                text={selectedLang}\r\n                iconProps={{ iconName: 'LocaleLanguage' }}\r\n                menuProps={menuProps}\r\n                menuAs={this._getMenu}\r\n                persistMenu={true}\r\n                className={this._classNames.defaultButtonStyle}\r\n              />\r\n            </div>\r\n          )}\r\n\r\n          <OverflowSet\r\n            className={this._classNames.rightSection}\r\n            items={headerIconItems}\r\n            overflowItems={headerIconOverflowItems}\r\n            onRenderItem={this._onRenderItem}\r\n            onRenderOverflowButton={this._onRenderOverflowButton}\r\n            overflowSide=\"start\"\r\n          />\r\n\r\n          {this._createPanel(selectedHeaderItem)}\r\n        </nav>\r\n      </header>\r\n    );\r\n  };\r\n\r\n  private _getMenu = (props: IContextualMenuProps): JSX.Element => {\r\n    return <ContextualMenu {...props} />;\r\n  };\r\n\r\n  private _getLanguageContextualMenuItems = (locale: string): IContextualMenuItem[] => {\r\n    const isProdEnv = process.env.REACT_APP_ENV === 'production';\r\n    const supportedLocales = getSupportedLocalesMapping(locale);\r\n    const supportedLanguages: IContextualMenuItem[] = [];\r\n\r\n    Object.keys(supportedLocales).forEach((localeCode) => {\r\n      supportedLanguages.push({\r\n        key: userLocales[localeCode].toLocaleLowerCase(),\r\n        text: supportedLocales[localeCode],\r\n      });\r\n    });\r\n\r\n    supportedLanguages.sort((a, b) => {\r\n      const firstValue = a.text;\r\n      const secondValue = b.text;\r\n\r\n      return firstValue!.toLowerCase() > secondValue!.toLowerCase() ? 1 : -1;\r\n    });\r\n\r\n    const filteredLanguages = supportedLanguages.filter((value, index) => value.key === EN_LOCALE_KEY);\r\n\r\n    return isProdEnv ? filteredLanguages : supportedLanguages;\r\n  };\r\n\r\n  private _createPanel(item?: IHeaderItem): JSX.Element {\r\n    // For icons such as CMUI help icon, panels are integrated with 3rd party libraries no need to render native panel\r\n    if (item && !item.panel) {\r\n      return <></>;\r\n    }\r\n\r\n    return (\r\n      <Panel\r\n        headerText={item?.title}\r\n        type={item ? (item.type && item.type === PanelTypes.Profile ? PanelType.smallFixedFar : PanelType.custom) : undefined}\r\n        customWidth={item?.type === PanelTypes.Notifications ? CUSTOM_NOTIFICATIONS_WIDTH : CUSTOM_WIDTH}\r\n        isOpen={!!item}\r\n        isLightDismiss={true}\r\n        onDismiss={this._hidePanel}\r\n        closeButtonAriaLabel={this.props.intl.formatMessage(AppMessages.close)}\r\n        isFooterAtBottom={item?.panelProps?.isFooterAtBottom}\r\n        onRenderFooterContent={() => item?.panelProps?.onRenderFooterContent?.({ onDismiss: this._hidePanel }) || null}\r\n      >\r\n        {item?.panel ? React.cloneElement(<item.panel />, { hidePanel: this._hidePanel }) : <p>Loading...</p>}\r\n      </Panel>\r\n    );\r\n  }\r\n\r\n  private _initializeRoutesData(): IDropdownOption[] {\r\n    if (!this.props.dropdownItems) {\r\n      return [];\r\n    }\r\n\r\n    return this.props.dropdownItems.map((item: IHeaderDropdownItem) => {\r\n      return {\r\n        key: item.key,\r\n        text: item.text,\r\n        title: '',\r\n        ariaLabel: item.text,\r\n        data: {\r\n          icon: item.icon,\r\n        },\r\n      };\r\n    });\r\n  }\r\n\r\n  private _onRenderOption = (option: IDropdownOption): JSX.Element => {\r\n    return (\r\n      <div>\r\n        {option.data && option.data.icon && (\r\n          <Icon className={this._classNames.dropdownOption} iconName={option.data.icon} aria-hidden=\"true\" title={option.data.icon} />\r\n        )}\r\n        <span>{option.text}</span>\r\n      </div>\r\n    );\r\n  };\r\n\r\n  private _onDropdownChange = (event: React.FormEvent<HTMLDivElement>, option?: IDropdownOption): void => {\r\n    if (option) {\r\n      const currentRoute = option.key.toString();\r\n      this._navigateTo(currentRoute);\r\n    }\r\n  };\r\n\r\n  private _navigateTo = (route: string): void => {\r\n    this.setState({\r\n      currentRoute: route,\r\n    });\r\n\r\n    if (this.props.onNavigate) {\r\n      this.props.onNavigate(route);\r\n    }\r\n  };\r\n\r\n  private _onRenderItem = (item: IHeaderItem): JSX.Element | React.ReactNode => {\r\n    return item.identity ? this._renderIdentity(item) : this._renderIcon(item);\r\n  };\r\n\r\n  private _onRenderOverflowButton = (overflowItems: IHeaderItem[]): JSX.Element => {\r\n    const overflowItemSerializer = (items: IHeaderItem[]) =>\r\n      items.map((item) => ({\r\n        ...item,\r\n        name: item.title,\r\n        ...(item.icon ? { iconProps: { iconName: item.icon, className: this._classNames.overflowIcon } } : {}),\r\n        ...(item.panel ? { onClick: () => this._showPanel(item) } : {}),\r\n      }));\r\n    return (\r\n      <IconButton\r\n        title=\"More options\"\r\n        styles={getOverflowIconStyle(getTheme())}\r\n        menuIconProps={{ iconName: 'More', className: this._classNames.moreInfoIcon }}\r\n        menuProps={{ items: overflowItemSerializer(overflowItems!), className: this._classNames.overflowMenuWrapper }}\r\n      />\r\n    );\r\n  };\r\n\r\n  private _renderIdentity = (item: IHeaderItem): JSX.Element => {\r\n    const identity = item.identity!;\r\n\r\n    return (\r\n      <Persona\r\n        className={this._classNames.navItem}\r\n        title={item.title}\r\n        styles={this._classNames.subComponentStyles.itemIdentity}\r\n        text={identity.name}\r\n        secondaryText={identity.email}\r\n        size={PersonaSize.size24}\r\n        presence={PersonaPresence.online}\r\n        showSecondaryText={false}\r\n        hidePersonaDetails={true}\r\n        role=\"button\"\r\n        aria-haspopup={true}\r\n        aria-describedby={this.props.intl.formatMessage(messages.myAccountDescribedByLabel)}\r\n        imageAlt={this.props.intl.formatMessage(messages.myAccountStatusLabel)}\r\n        onClick={() => this._showPanel(item)}\r\n        aria-expanded={this.state.selectedItem !== undefined}\r\n        onKeyDown={(ev) => isButtonPressKey(ev.key) && this._showPanel(item)}\r\n        tabIndex={0}\r\n      />\r\n    );\r\n  };\r\n\r\n  private _renderIcon = (item: IHeaderItem): JSX.Element => {\r\n    /**\r\n     * when icon has a `query` prop that means icon is for bingads helpcenter use, in this case we\r\n     * will need to wrap it in an anchor tag with query attribute\r\n     *  */\r\n    if (item.query) {\r\n      return (\r\n        <a href=\"/#\" query={item.query} className={css(item.className, this._classNames.helpCenterIcon)}>\r\n          <Icon\r\n            className={css(this._classNames.navItem, this._classNames.itemIcon, item.className)}\r\n            title={item.title}\r\n            iconName={item.icon}\r\n            onKeyDown={(ev) => (item.panel ? isButtonPressKey(ev.key) && this._showPanel(item) : null)}\r\n            // not to show panel for icons don't have panels\r\n            onClick={() => (item.panel ? this._showPanel(item) : item.onClick?.() ?? null)}\r\n          />\r\n        </a>\r\n      );\r\n    } else if (item.showRedDot) {\r\n      return (\r\n        <div>\r\n          <span className={this._classNames.dot} />\r\n          <Icon\r\n            className={css(this._classNames.navItem, this._classNames.itemIcon, item.className)}\r\n            title={item.title}\r\n            iconName={item.icon}\r\n            onKeyDown={(ev) => (item.panel ? isButtonPressKey(ev.key) && this._showPanel(item) : null)}\r\n            tabIndex={0}\r\n            // not to show panel for icons don't have panels\r\n            onClick={() => (item.panel ? this._showPanel(item) : item.onClick?.() ?? null)}\r\n          />\r\n        </div>\r\n      );\r\n    }\r\n    return (\r\n      <Icon\r\n        className={css(this._classNames.navItem, this._classNames.itemIcon, item.className)}\r\n        title={item.title}\r\n        iconName={item.icon}\r\n        onKeyDown={(ev) => (item.panel ? isButtonPressKey(ev.key) && this._showPanel(item) : null)}\r\n        tabIndex={0}\r\n        // not to show panel for icons don't have panels\r\n        onClick={() => (item.panel ? this._showPanel(item) : item.onClick?.() ?? null)}\r\n      />\r\n    );\r\n  };\r\n\r\n  private _showPanel(item: IHeaderItem) {\r\n    this.setState({\r\n      title: item.title,\r\n      selectedItem: item,\r\n      panelType: item.type && item.type === PanelTypes.Profile ? PanelType.smallFixedFar : PanelType.custom,\r\n    });\r\n  }\r\n\r\n  private _hidePanel = (): void => {\r\n    this.setState({ selectedItem: undefined });\r\n  };\r\n\r\n  private _shouldShowDropdownSearch = () =>\r\n    !isTythonSelfServeUser() &&\r\n    !window.location.pathname.includes(AcceptInvitePageRoute) &&\r\n    ![SignUpPageRoute, LandingPageRoute, '/'].includes(window.location.pathname) &&\r\n    !isNotAuthorizedUser();\r\n}\r\n","import { action } from 'satcheljs';\r\nimport { ResourceType } from '../../../../@data/store/schema/enums/ResourceType';\r\nimport { ResourceTypeDistribution } from '../../../../@data/store/schema/enums/ResourceTypeDistribution';\r\nimport { IGlobalSearchFilter } from '../../../../@data/store/schema/interfaces/IGlobalSearchFilter';\r\nimport { IGlobalSearchResultData } from '../../../../@data/store/schema/interfaces/IGlobalSearchResultData';\r\n\r\nexport const onSearchTriggered = action(\r\n  'onSearchTriggered',\r\n  (\r\n    query: string,\r\n    resourceTypes?: ResourceType[],\r\n    globalFilters?: IGlobalSearchFilter[],\r\n    resourceTypeDistribution?: ResourceTypeDistribution,\r\n    pageSize?: number\r\n  ) => ({\r\n    query,\r\n    resourceTypes,\r\n    globalFilters,\r\n    resourceTypeDistribution,\r\n    pageSize\r\n  })\r\n);\r\n\r\nexport const setGlobalSearchResult = action('setGlobalSearchResult', (data?: IGlobalSearchResultData) => ({ data }));\r\n\r\nexport const setSearchQuery = action('setSearchQuery', (searchQuery: string) => ({ searchQuery }));\r\n\r\nexport const setSearchingStatus = action('setSearchingStatus', (searching: boolean) => ({ searching }));\r\n","import { createStore } from 'satcheljs';\r\nimport { IGlobalSearchCalloutState } from './schema/IGlobalSearchCalloutState';\r\n\r\nexport const getGlobalSearchCalloutStore = createStore<IGlobalSearchCalloutState>('GlobalSearchResultCalloutState', {\r\n  searchText: '',\r\n  data: { results: [] },\r\n  searching: false\r\n});\r\n","import { mutator } from 'satcheljs';\r\nimport { setGlobalSearchResult, setSearchingStatus, setSearchQuery } from '../actions/onSearchTriggered';\r\nimport { getGlobalSearchCalloutStore } from '../store/store';\r\n\r\nmutator(setGlobalSearchResult, msg => {\r\n  const store = getGlobalSearchCalloutStore();\r\n  store.data = msg.data;\r\n});\r\n\r\nmutator(setSearchQuery, msg => {\r\n  const store = getGlobalSearchCalloutStore();\r\n  store.searchText = msg.searchQuery;\r\n});\r\n\r\nmutator(setSearchingStatus, msg => {\r\n  getGlobalSearchCalloutStore().searching = msg.searching;\r\n});\r\n","import { handleApiErrors, handleError } from '..';\r\nimport { uiConfig } from '../../config/ui.config';\r\nimport { UserContext } from '../store/schema';\r\nimport { IGlobalSearchResultData } from '../store/schema/interfaces/IGlobalSearchResultData';\r\nimport { GlobalSearchRequest } from '../store/schema/models/GlobalSearchRequest';\r\nimport { GlobalSearchResponse } from '../store/schema/models/GlobalSearchResponse';\r\nimport { buildRequestHeadersWithAuthToken } from '../utils/requestUtils';\r\nimport { ApiError } from './ApiService';\r\n\r\nexport async function postSearch(body: GlobalSearchRequest, userContext?: UserContext): Promise<IGlobalSearchResultData> {\r\n  const url = uiConfig.getApiBaseAddress() + '/search';\r\n  const headers = await buildRequestHeadersWithAuthToken(url, userContext);\r\n\r\n  let response: Response;\r\n\r\n  try {\r\n    response = await fetch(url, {\r\n      method: 'POST',\r\n      headers: headers,\r\n      body: JSON.stringify(body),\r\n    });\r\n\r\n    if (!response.ok) {\r\n      return handleApiErrors<IGlobalSearchResultData>(response, url);\r\n    }\r\n\r\n    const responseJson: GlobalSearchResponse = await response.json();\r\n    if (responseJson.data) {\r\n      return responseJson.data;\r\n    }\r\n    return Promise.resolve({} as IGlobalSearchResultData);\r\n  } catch (err) {\r\n    const error = `Search operation failed for ${url}. Errors: ${err}`;\r\n    return handleError(new ApiError(500, error), url);\r\n  }\r\n}\r\n","import { orchestrator } from 'satcheljs';\r\nimport { Log } from '../../../../../logging/src/Log';\r\nimport { getAppStore } from '../../../../@data';\r\nimport { postSearch } from '../../../../@data/services/GlobalSearchApiService';\r\nimport { ResourceType } from '../../../../@data/store/schema/enums/ResourceType';\r\nimport { IGlobalSearchResultData } from '../../../../@data/store/schema/interfaces/IGlobalSearchResultData';\r\nimport { GlobalSearchRequest } from '../../../../@data/store/schema/models/GlobalSearchRequest';\r\nimport { onSearchTriggered, setGlobalSearchResult, setSearchingStatus } from '../actions/onSearchTriggered';\r\nimport { getGlobalSearchCalloutStore } from '../store/store';\r\n\r\norchestrator(onSearchTriggered, async (msg) => {\r\n  const { userContext } = getAppStore();\r\n  const pageSize = 8;\r\n  const resourceTypes: string[] = [];\r\n\r\n  if (msg.resourceTypes) {\r\n    msg.resourceTypes.map((resourceType: ResourceType) => resourceTypes.push(ResourceType[resourceType]));\r\n  }\r\n\r\n  const request: GlobalSearchRequest = {\r\n    query: msg.query,\r\n    globalFilters: [],\r\n    resourceTypes: resourceTypes,\r\n    options: {\r\n      paginationOptions: {\r\n        pageSize: msg.pageSize ? msg.pageSize : pageSize,\r\n        pageToken: '',\r\n      },\r\n      resourceTypeDistribution: msg.resourceTypeDistribution,\r\n      highlightingOptions: {\r\n        highlightPreTag: '<b>',\r\n        highlightPostTag: '</b>',\r\n      },\r\n    },\r\n  };\r\n\r\n  try {\r\n    const response: IGlobalSearchResultData = await postSearch(request, userContext);\r\n    if (request.query === getGlobalSearchCalloutStore().searchText) {\r\n      setGlobalSearchResult(response);\r\n      setSearchingStatus(false);\r\n    } else if (getGlobalSearchCalloutStore().searchText === '') {\r\n      setSearchingStatus(false);\r\n    }\r\n  } catch (e) {\r\n    Log.error(`Error: ${JSON.stringify(e)}`);\r\n    setSearchingStatus(false);\r\n  }\r\n});\r\n","import { IPubcenterPalette, IPubcenterSpacing } from '../../../theme';\r\nimport { IGlobalSearchHeaderStyleProps, IGlobalSearchHeaderStyles } from './GlobalSearchHeader.types';\r\n\r\nexport const getStyles = (props: IGlobalSearchHeaderStyleProps): IGlobalSearchHeaderStyles => {\r\n  const { theme } = props;\r\n  const spacing = theme.spacing as IPubcenterSpacing;\r\n  const pallete = theme.palette as IPubcenterPalette;\r\n\r\n  return {\r\n    root: {\r\n      display: 'flex',\r\n      flexDirection: 'column',\r\n      height: 'inherit',\r\n      overflow: 'hidden'\r\n    },\r\n    wrapper: {\r\n      flex: 1,\r\n      position: 'relative',\r\n      display: 'flex',\r\n      flexDirection: 'column',\r\n      height: 'inherit'\r\n    },\r\n    searchResultHeader: [\r\n      'ms-fontWeight-semibold',\r\n      {\r\n        height: theme.spacing.l2,\r\n        fontSize: theme.fonts.medium.fontSize,\r\n        paddingLeft: theme.spacing.m,\r\n        color: pallete.themePrimary,\r\n        selectors: {\r\n          ':hover': {\r\n            cursor: 'pointer'\r\n          }\r\n        }\r\n      }\r\n    ],\r\n    categorySeparator: {\r\n      display: 'inline-block',\r\n      height: spacing.size12,\r\n      borderTop: '1px',\r\n      borderTopColor: pallete.neutralLighter,\r\n      width: '95%',\r\n      marginTop: '0px'\r\n    },\r\n    entityContainer: {\r\n      display: 'flex',\r\n      flexDirection: 'row',\r\n      height: spacing.size48,\r\n      selectors: {\r\n        ':hover': {\r\n          cursor: 'pointer'\r\n        }\r\n      }\r\n    },\r\n    iconContainer: {\r\n      width: spacing.size64\r\n    },\r\n    entityIcon: {\r\n      fontSize: '28px',\r\n      color: theme.palette.neutralDark,\r\n      alignItems: 'center',\r\n      paddingLeft: theme.spacing.m,\r\n      paddingRight: theme.spacing.m,\r\n      paddingTop: '10px',\r\n      paddingBottom: '10px'\r\n    },\r\n    entityInfo: [\r\n      'ms-fontSize-Body14',\r\n      {\r\n        paddingTop: '13px',\r\n        paddingBottom: '16px',\r\n        color: pallete.neutralPrimary,\r\n        height: '19px',\r\n        lineHeight: '19px',\r\n        alignItems: 'center'\r\n      }\r\n    ],\r\n    textLinkFooter: [\r\n      'ms-fontSize-Body14',\r\n      {\r\n        display: 'flex',\r\n        alignItems: 'center',\r\n        height: spacing.size48,\r\n        justifyContent: 'center',\r\n        color: pallete.themePrimary,\r\n        selectors: {\r\n          ':hover': {\r\n            cursor: 'pointer'\r\n          }\r\n        }\r\n      }\r\n    ],\r\n    footer: [\r\n      'ms-fontSize-Body14',\r\n      {\r\n        display: 'flex',\r\n        justifyContent: 'center',\r\n        color: pallete.neutralPrimary\r\n      }\r\n    ],\r\n  };\r\n};\r\n","import { classNamesFunction, getId, getTheme, Icon, IProcessedStyleSet, nullRender } from '@fluentui/react';\r\nimport * as React from 'react';\r\nimport { getAppStore, IGlobalSearchResultItem, onLoadingChanged } from '../../@data';\r\nimport { completeAccess, hasReadAccess, UserRoleEntity, userRoleKey } from '../../@data/services/UserRoleService';\r\nimport { ResourceType } from '../../@data/store/schema/enums/ResourceType';\r\nimport { ResourceTypeDistribution } from '../../@data/store/schema/enums/ResourceTypeDistribution';\r\nimport { IGlobalSearchResultData } from '../../@data/store/schema/interfaces/IGlobalSearchResultData';\r\nimport { DropdownMenu as MenuAccessPermissions } from '../../@data/store/schema/userrolemodels/DropdownMenu';\r\nimport { isTythonSelfServeUser } from '../../@data/utils/checkUserType';\r\nimport { Header } from '../../components/Header/Header';\r\nimport { IHeaderItem, PanelTypes } from '../../components/Header/Header.types';\r\nimport { ISearchProps, ISearchResultList } from '../../components/Search/Search.types';\r\nimport { APP_NAME_NEW, APP_NAME_PUBCENTER } from '../../constants/AppConstants';\r\nimport { debounce, useCMUIHelpExperience } from '../../hooks';\r\nimport { AdManagementRouter } from '../../pages/ad-management/AdManagementRouter';\r\nimport { PartnerManagementRouter } from '../../pages/partner-management/PartnerManagementRouter';\r\nimport { ReportRouter } from '../../pages/report/ReportRouter';\r\nimport { DefaultRoute, RoutePrefix } from '../../Routes';\r\nimport { IRoute } from '../../Routes.types';\r\nimport { groupBy, injectRouterAndIntlWithObserver, pluralize } from '../../utils';\r\nimport { isButtonPressKey } from '../../utils/AccessibilityUtils';\r\nimport { getScreenReaderTextStyles } from '../../utils/GlobalStyleUtils';\r\nimport {\r\n  FeedbackPanel,\r\n  NotificationsPanel,\r\n  ProfilePanel,\r\n  renderFooterContent,\r\n  renderNotificationFooterContent,\r\n} from '../PageLayout/header-panels';\r\nimport { onSearchTriggered, setGlobalSearchResult, setSearchingStatus, setSearchQuery } from './@data/actions/onSearchTriggered';\r\nimport './@data/mutators/searchTriggered';\r\nimport './@data/orchestrators/searchTriggered';\r\nimport { getGlobalSearchCalloutStore } from './@data/store/store';\r\nimport messages from './GlobalSearchHeader.messages';\r\nimport { getStyles } from './GlobalSearchHeader.styles';\r\nimport { IGlobalSearchHeaderProps, IGlobalSearchHeaderStyleProps, IGlobalSearchHeaderStyles } from './GlobalSearchHeader.types';\r\n\r\nconst theme = getTheme();\r\nconst getClassNames = classNamesFunction<IGlobalSearchHeaderStyleProps, IGlobalSearchHeaderStyles>();\r\nconst defaultMinLettersToSearch = 3;\r\nconst globalSearchBaseRoute = '/search';\r\n\r\nconst EntityIconMap = {\r\n  Publisher: 'EMI',\r\n  Account: 'Work',\r\n  User: 'Contact',\r\n  AdUnit: 'AdUnit',\r\n  Channel: 'AdUnitChannel',\r\n  Filter: 'Filter',\r\n  WebProperty: 'Favicon',\r\n  PublisherByAccount: 'EMI',\r\n  PublisherByUser: 'EMI',\r\n  PublisherByAdUnit: 'EMI',\r\n  PublisherByWebProperty: 'EMI',\r\n  PublisherByChannel: 'EMI',\r\n  PublisherByFilter: 'EMI',\r\n};\r\n\r\nexport const GlobalSearchHeader = injectRouterAndIntlWithObserver(\r\n  class extends React.Component<IGlobalSearchHeaderProps> {\r\n    private _classNames: IProcessedStyleSet<IGlobalSearchHeaderStyles>;\r\n\r\n    public render(): JSX.Element {\r\n      this._classNames = getClassNames(getStyles, { theme });\r\n      const userContext = getAppStore().userContext;\r\n      let _searchProps: ISearchProps<IGlobalSearchResultItem>;\r\n      const layoutStore = getGlobalSearchCalloutStore();\r\n      let searchResults: ISearchResultList<IGlobalSearchResultItem>[] = [];\r\n      const searchInProgress = layoutStore.searching;\r\n      if (layoutStore.data) {\r\n        searchResults = this._searchResultToCategories(layoutStore.data);\r\n      }\r\n      const notifications = getAppStore().panelNotifications;\r\n      const headerItems: IHeaderItem[] = [\r\n        // {\r\n        //   key: 'settings',\r\n        //   icon: 'Settings',\r\n        //   title: this.props.intl.formatMessage(messages.settings),\r\n        //   panel: SettingsPanel\r\n        // },\r\n        // {\r\n        //   key: 'help',\r\n        //   icon: 'Help',\r\n        //   title: this.props.intl.formatMessage(messages.help),\r\n        //   panel: HelpPanel\r\n        // }\r\n      ];\r\n      if (isTythonSelfServeUser()) {\r\n        headerItems.push({\r\n          key: 'feedback',\r\n          icon: 'Feedback',\r\n          title: this.props.intl.formatMessage(messages.feedback, { appName: isTythonSelfServeUser() ? APP_NAME_NEW : APP_NAME_PUBCENTER }),\r\n          type: PanelTypes.Feedback,\r\n          panel: FeedbackPanel,\r\n          panelProps: {\r\n            isFooterAtBottom: true,\r\n            onRenderFooterContent: renderFooterContent,\r\n          },\r\n          shouldOverflowUnderExtraSmallScreen: true,\r\n        });\r\n      }\r\n\r\n      if (userContext && userContext.token) {\r\n        // show notifications only if user is logged in. Icon shouldn't be shown on other login page\r\n        headerItems.push({\r\n          key: 'notifications',\r\n          icon: 'Notifications',\r\n          title: this.props.intl.formatMessage(messages.notifications),\r\n          type: PanelTypes.Notifications,\r\n          panel: NotificationsPanel,\r\n          panelProps: {\r\n            isFooterAtBottom: true,\r\n            onRenderFooterContent: renderNotificationFooterContent,\r\n          },\r\n          shouldOverflowUnderExtraSmallScreen: true,\r\n          showRedDot: notifications && notifications.length > 0,\r\n        });\r\n\r\n        headerItems.push({\r\n          key: 'profile',\r\n          title: this.props.intl.formatMessage(messages.account),\r\n          identity: {\r\n            name: userContext?.name ?? '',\r\n            email: userContext?.email ?? '',\r\n          },\r\n          type: PanelTypes.Profile,\r\n          // @ts-ignore\r\n          panel: ProfilePanel,\r\n          shouldOverflowUnderExtraSmallScreen: false,\r\n        });\r\n      }\r\n\r\n      const menuAccessPermissions = this._getMenuAccessPermission();\r\n\r\n      const newRoutes: IRoute[] = [];\r\n\r\n      if (hasReadAccess(menuAccessPermissions === null ? completeAccess : menuAccessPermissions.adManagement)) {\r\n        newRoutes.push({\r\n          key: `/${RoutePrefix.adManagement}`,\r\n          text: 'Ad Management',\r\n          icon: 'DocumentManagement',\r\n          component: AdManagementRouter,\r\n        } as IRoute);\r\n      }\r\n\r\n      if (hasReadAccess(menuAccessPermissions === null ? completeAccess : menuAccessPermissions.partnerManagment)) {\r\n        newRoutes.push({\r\n          key: `/${RoutePrefix.partnerManagement}`,\r\n          text: 'Partner Management',\r\n          icon: 'AccountManagement',\r\n          component: PartnerManagementRouter,\r\n        } as IRoute);\r\n      }\r\n\r\n      if (hasReadAccess(menuAccessPermissions === null ? completeAccess : menuAccessPermissions.reporting)) {\r\n        newRoutes.push({\r\n          key: `/${RoutePrefix.report}`,\r\n          text: 'Reporting',\r\n          icon: 'CRMReport',\r\n          component: ReportRouter,\r\n        } as IRoute);\r\n      }\r\n\r\n      _searchProps = {\r\n        searchBoxProps: {\r\n          placeholder: this.props.intl.formatMessage(messages.searchPlaceHolder, {\r\n            appName: isTythonSelfServeUser() ? APP_NAME_NEW : APP_NAME_PUBCENTER,\r\n          }),\r\n          onChange: debounce(this._onSearchQueryChange, 300),\r\n          onClear: this._onClearSearch,\r\n          searchBoxAriaLabel: this.props.intl.formatMessage(messages.searchBoxAriaLabel),\r\n        },\r\n        minLettersToSearch: defaultMinLettersToSearch,\r\n        searchInProgress: searchInProgress,\r\n        onRenderSearchResult: this._onRenderSearchResult,\r\n        onRenderSearchResultFooter: this._onRenderSearchCalloutFooter,\r\n        searchResultList: searchResults,\r\n        searchResultListAriaLabel: this.props.intl.formatMessage(messages.searchResultListAriaLabel),\r\n      };\r\n\r\n      return (\r\n        <Header\r\n          intl={this.props.intl}\r\n          items={headerItems}\r\n          searchProps={_searchProps}\r\n          dropdownItems={newRoutes}\r\n          onNavigate={(path) => this.props.history.push(path)}\r\n          renderLeftIcon={this.props.renderLeftMost}\r\n          useCMUIHelpExperience={useCMUIHelpExperience()}\r\n        />\r\n      );\r\n    }\r\n\r\n    private _searchResultToCategories = (searchResult: IGlobalSearchResultData): ISearchResultList<IGlobalSearchResultItem>[] => {\r\n      const retVal: ISearchResultList<IGlobalSearchResultItem>[] = [];\r\n      if (searchResult.results.length > 0) {\r\n        // Group all search results into bucket of entity type\r\n        const searchResultByCategory = groupBy(searchResult.results, (item) => item.resourceType);\r\n        searchResultByCategory.forEach((item) => {\r\n          const entityType = item[0];\r\n          // Create a category of the entity type\r\n          const searchCategory: ISearchResultList<IGlobalSearchResultItem> = {\r\n            categoryName: entityType,\r\n            totalCount: searchResult.resultMetadata ? searchResult.resultMetadata.ResultCountPerResourceType[entityType] : 0,\r\n            searchResults: [],\r\n          };\r\n          const categoryItems = item[1];\r\n          // Create entities and push them to list\r\n          categoryItems.forEach((resultItem) => {\r\n            const searchResultItem: IGlobalSearchResultItem = {\r\n              name: resultItem.resourceName,\r\n              id: resultItem.resourceId,\r\n              icon: EntityIconMap[resultItem.resourceType],\r\n            };\r\n            const publisherId: string = resultItem.propertyBag ? resultItem.propertyBag.PublisherId : '';\r\n            const accountId: string = resultItem.propertyBag ? resultItem.propertyBag.AccountId : '';\r\n            searchResultItem.route = this._createRoutePath(entityType, resultItem.resourceId, publisherId, accountId);\r\n            searchResultItem.onClick = (url: string) => {\r\n              if (resultItem.propertyBag) {\r\n                onLoadingChanged(true);\r\n                this.props.history.push(url);\r\n              }\r\n            };\r\n            searchCategory.searchResults && searchCategory.searchResults.push(searchResultItem);\r\n          });\r\n          retVal.push(searchCategory);\r\n        });\r\n      }\r\n      return retVal;\r\n    };\r\n\r\n    private _createRoutePath = (entityType: string, entityId: string, publisherId: string, accountId: string): string => {\r\n      let route = '';\r\n\r\n      switch (entityType) {\r\n        case 'AdUnit':\r\n        case 'AdUnitByProperty': {\r\n          if (publisherId && accountId) {\r\n            route = `${DefaultRoute}/${publisherId}-${accountId}/adunit/edit/${entityId}`;\r\n          }\r\n          break;\r\n        }\r\n        case 'Channel': {\r\n          if (publisherId && accountId) {\r\n            route = `${DefaultRoute}/${publisherId}-${accountId}/channel/edit/${entityId}`;\r\n          }\r\n          break;\r\n        }\r\n        case 'WebProperty':\r\n        case 'PropertyByAdUnit': {\r\n          if (publisherId) {\r\n            route = `${DefaultRoute}/${publisherId}/property/edit/${entityId}`;\r\n          }\r\n          break;\r\n        }\r\n        case 'Filter': {\r\n          if (publisherId && accountId) {\r\n            route = `${DefaultRoute}/${publisherId}-${accountId}/adfilter/edit/${entityId}`;\r\n          }\r\n          break;\r\n        }\r\n        case 'Publisher':\r\n        case 'PublisherByAccount':\r\n        case 'PublisherByUser':\r\n        case 'PublisherByAdUnit':\r\n        case 'PublisherByWebProperty':\r\n        case 'PublisherByChannel':\r\n        case 'PublisherByFilter': {\r\n          route = `/${RoutePrefix.partnerManagement}/${entityId}/publisher/edit/${entityId}`;\r\n          break;\r\n        }\r\n        case 'Account': {\r\n          route = `/${RoutePrefix.partnerManagement}/${publisherId}/account/edit/${entityId}`;\r\n          break;\r\n        }\r\n        case 'User': {\r\n          route = `/${RoutePrefix.partnerManagement}/${publisherId}/user/edit/${entityId}`;\r\n          break;\r\n        }\r\n        default: {\r\n          route = `${DefaultRoute}`;\r\n        }\r\n      }\r\n      return route;\r\n    };\r\n\r\n    private _onSearchQueryChange = (value: string, minLettersToSearch: number): void => {\r\n      if (value.length >= minLettersToSearch) {\r\n        setSearchQuery(value);\r\n        setSearchingStatus(true);\r\n        const resourceTypes: ResourceType[] = [\r\n          ResourceType.AdUnit,\r\n          ResourceType.Filter,\r\n          ResourceType.Channel,\r\n          ResourceType.WebProperty,\r\n          ResourceType.Publisher,\r\n          ResourceType.Account,\r\n          ResourceType.User,\r\n        ];\r\n        onSearchTriggered(value, resourceTypes, undefined, ResourceTypeDistribution.DynamicBucketSize);\r\n      } else {\r\n        setSearchQuery(value);\r\n        const emptyResult: IGlobalSearchResultData = { results: [] };\r\n        setGlobalSearchResult(emptyResult);\r\n      }\r\n    };\r\n\r\n    private _onClearSearch = (): void => {\r\n      setSearchQuery('');\r\n      setSearchingStatus(false);\r\n      const emptyResult: IGlobalSearchResultData = { results: [] };\r\n      setGlobalSearchResult(emptyResult);\r\n    };\r\n\r\n    private _onViewMoreResultClicked = (searchText: string, filter?: string): void => {\r\n      let sourceRef = '';\r\n      for (const route in RoutePrefix) {\r\n        if (this.props.location.pathname.search(RoutePrefix[route]) >= 0) {\r\n          sourceRef = RoutePrefix[route];\r\n          break;\r\n        }\r\n      }\r\n      this.props.history.push(encodeURI(`${globalSearchBaseRoute}?q=${searchText}&filter=${filter}&sourceRef=${sourceRef}`));\r\n    };\r\n\r\n    private _onRenderSearchResult = (searchResultCategory?: ISearchResultList<IGlobalSearchResultItem>): JSX.Element | null => {\r\n      const searchQuery = getGlobalSearchCalloutStore().searchText;\r\n      const searchResultHeaderDescId = getId('searchResultHeader');\r\n\r\n      if (searchResultCategory) {\r\n        return (\r\n          <>\r\n            <div\r\n              className={this._classNames.searchResultHeader}\r\n              tabIndex={-1}\r\n              role=\"option\"\r\n              aria-selected={false}\r\n              onClick={() => this._onViewMoreResultClicked(searchQuery, searchResultCategory.categoryName)}\r\n              onKeyDown={(ev) => {\r\n                if (isButtonPressKey(ev.key)) {\r\n                  this._onViewMoreResultClicked(searchQuery, searchResultCategory.categoryName);\r\n                }\r\n              }}\r\n              aria-describedby={searchResultHeaderDescId}\r\n              data-is-focusable={true}\r\n            >\r\n              {this.props.intl.formatMessage(messages.viewCategoryResult, {\r\n                category: pluralize(searchResultCategory.categoryName),\r\n                totalCount: searchResultCategory.totalCount,\r\n              })}\r\n            </div>\r\n            {searchResultCategory.searchResults\r\n              ? searchResultCategory.searchResults.map((item: IGlobalSearchResultItem, index: number) =>\r\n                  this._onRenderCell(item, searchQuery, index)\r\n                )\r\n              : []}\r\n            <hr className={this._classNames.categorySeparator} />\r\n\r\n            <span id={searchResultHeaderDescId} style={getScreenReaderTextStyles()}>\r\n              {this.props.intl.formatMessage(messages.viewCategoryResultsAriaDescription, {\r\n                categoryName: searchResultCategory.categoryName,\r\n              })}\r\n            </span>\r\n          </>\r\n        );\r\n      } else {\r\n        return nullRender();\r\n      }\r\n    };\r\n\r\n    private _onRenderCell = (item: IGlobalSearchResultItem, searchQuery: string, index: number): JSX.Element => {\r\n      const cellDescId = getId('searchResult');\r\n      return (\r\n        <div\r\n          className={this._classNames.entityContainer}\r\n          key={'searchResultOption-' + index}\r\n          role=\"option\"\r\n          aria-selected={false}\r\n          tabIndex={-1}\r\n          onClick={() => this._onItemClicked(item)}\r\n          onKeyDown={(ev) => isButtonPressKey(ev.key) && this._onItemClicked(item)}\r\n          aria-describedby={cellDescId}\r\n          data-is-focusable={true}\r\n        >\r\n          <Icon className={this._classNames.entityIcon} iconName={item.icon} />\r\n          <span className={this._classNames.entityInfo}>{this._getHighlightedText(item.name + ' - ' + item.id, searchQuery)}</span>\r\n\r\n          <span id={cellDescId} style={getScreenReaderTextStyles()}>\r\n            {this.props.intl.formatMessage(messages.entityInfoButtonAriaDescription)}\r\n          </span>\r\n        </div>\r\n      );\r\n    };\r\n\r\n    private _getHighlightedText = (text: string, highlight: string): JSX.Element => {\r\n      const parts = text.split(new RegExp(`(${highlight})`, 'gi'));\r\n      return (\r\n        <span>\r\n          {' '}\r\n          {parts.map((part, i) => (\r\n            <span key={i} style={part.toLowerCase() === highlight.toLowerCase() ? { fontWeight: 'bold' } : {}}>\r\n              {part}\r\n            </span>\r\n          ))}{' '}\r\n        </span>\r\n      );\r\n    };\r\n\r\n    private _onItemClicked = (item: IGlobalSearchResultItem): void => {\r\n      if (item.onClick && item.route) {\r\n        item.onClick(item.route);\r\n      }\r\n    };\r\n\r\n    private _onRenderSearchCalloutFooter = (): JSX.Element => {\r\n      const searchQuery = getGlobalSearchCalloutStore().searchText;\r\n      const searchResult = getGlobalSearchCalloutStore().data;\r\n      const elementId = getId('searchCalloutFooter');\r\n\r\n      return (\r\n        <>\r\n          {!!searchResult && searchResult.results!.length > 0 && (\r\n            <div\r\n              className={this._classNames.textLinkFooter}\r\n              role=\"button\"\r\n              tabIndex={-1}\r\n              onClick={() => this._onViewMoreResultClicked(searchQuery, 'all')}\r\n              onKeyDown={(ev) => isButtonPressKey(ev.key) && this._onViewMoreResultClicked(searchQuery, 'all')}\r\n              aria-describedby={elementId}\r\n              data-is-focusable={true}\r\n            >\r\n              {this.props.intl.formatMessage(messages.viewAllResult, { searchQuery: searchQuery })}\r\n            </div>\r\n          )}\r\n          {!searchResult ||\r\n            (searchResult.results!.length === 0 && searchQuery.length >= defaultMinLettersToSearch && (\r\n              <div className={this._classNames.footer} data-is-focusable>\r\n                {this.props.intl.formatMessage(messages.viewNoResult, { searchQuery: searchQuery })}\r\n              </div>\r\n            ))}\r\n          <span id={elementId} style={getScreenReaderTextStyles()}>\r\n            {this.props.intl.formatMessage(messages.footerAriaDescription)}\r\n          </span>\r\n        </>\r\n      );\r\n    };\r\n\r\n    private _getMenuAccessPermission(): MenuAccessPermissions | null {\r\n      const userRoles = localStorage.getItem(userRoleKey);\r\n      if (userRoles === null) {\r\n        return null;\r\n      }\r\n      const userRolesJSON = JSON.parse(userRoles);\r\n\r\n      for (const value in userRolesJSON) {\r\n        if (value === UserRoleEntity.DropdownMenu) {\r\n          return JSON.parse(userRolesJSON[value]);\r\n        }\r\n      }\r\n\r\n      return null;\r\n    }\r\n  }\r\n);\r\n","import { IPubcenterSpacing } from '../../../theme';\r\nimport { IPageLayoutStyleProps, IPageLayoutStyles } from './PageLayout.types';\r\n\r\nexport const getStyles = (props: IPageLayoutStyleProps): IPageLayoutStyles => {\r\n  const { theme } = props;\r\n  const spacing = theme.spacing as IPubcenterSpacing;\r\n\r\n  return {\r\n    root: {\r\n      display: 'flex',\r\n      flexDirection: 'column',\r\n      height: 'inherit',\r\n      overflow: 'hidden',\r\n    },\r\n    wrapper: {\r\n      flex: 1,\r\n      position: 'relative',\r\n      display: 'flex',\r\n      flexDirection: 'column',\r\n      height: 'inherit',\r\n      overflowY: 'auto',\r\n      overflowX: 'hidden',\r\n    },\r\n    supportButtonWrapper: {\r\n      display: 'flex',\r\n      justifyContent: 'flex-end',\r\n    },\r\n    supportButton: {\r\n      display: 'flex',\r\n      alignItems: 'center',\r\n      marginRight: spacing.size12,\r\n      img: {\r\n        marginRight: spacing.size6,\r\n      },\r\n    },\r\n    spinnerStyle: {\r\n      flex: 1,\r\n      display: 'flex',\r\n      selectors: {\r\n        '.ms-Spinner-circle': {\r\n          height: 67,\r\n          width: 67,\r\n        },\r\n      },\r\n    },\r\n    overlayStyle: {\r\n      flex: 1,\r\n      display: 'flex',\r\n      position: 'fixed',\r\n      backgroundColor: 'white',\r\n      zIndex: 9999999,\r\n    },\r\n  };\r\n};\r\n","import { IProcessedStyleSet, Overlay, classNamesFunction, getTheme } from '@fluentui/react';\r\nimport * as React from 'react';\r\nimport { IAppState, getAppStore, isPublisherRejectionUnappealable, isTythonSelfServeUser } from '../../@data';\r\nimport AppMessages from '../../App.messages';\r\nimport { SupportPageRoute } from '../../Routes';\r\nimport { PageSpinner } from '../../components/Spinners';\r\nimport { LOCAL_STORAGE_LOCALE, TYTHON_DOMAIN_REDIRECTION_CACHE_KEY } from '../../constants/AppConstants';\r\nimport { useWindowSize } from '../../hooks';\r\nimport { getAdManagementStore } from '../../pages/ad-management/@data';\r\nimport '../../pages/ad-management/@data/actions';\r\nimport LoginPageMessages from '../../pages/login/LoginPage.messages';\r\nimport { RedirectionSpinner } from '../../pages/login/components/RedirectionSpinner';\r\nimport { injectIntlWithObserver } from '../../utils';\r\nimport { GlobalSearchHeader } from '../GlobalSearchHeader/GlobalSearchHeader';\r\nimport { getStyles } from './PageLayout.styles';\r\nimport { IPageLayoutProps, IPageLayoutStyleProps, IPageLayoutStyles } from './PageLayout.types';\r\nconst theme = getTheme();\r\nconst getClassNames = classNamesFunction<IPageLayoutStyleProps, IPageLayoutStyles>();\r\n\r\nconst { onWindowResize } = useWindowSize();\r\n/**\r\n * PageLayout component is used to render the outermost layout of the application.\r\n * This layout renders the global search header, page level overlay spinner, and footer.\r\n */\r\nexport const Page = injectIntlWithObserver(\r\n  class PageLayout extends React.Component<IPageLayoutProps> {\r\n    private _classNames: IProcessedStyleSet<IPageLayoutStyles>;\r\n\r\n    public handleResize = () => {\r\n      onWindowResize(window);\r\n    };\r\n\r\n    public componentDidMount() {\r\n      window.addEventListener('resize', this.handleResize);\r\n    }\r\n\r\n    public componentWillUnmount() {\r\n      window.removeEventListener('resize', this.handleResize);\r\n    }\r\n\r\n    public render(): JSX.Element | null {\r\n      const appStore = getAppStore();\r\n      this._classNames = getClassNames(getStyles, { theme });\r\n\r\n      // Show spinner until publisher info is fetched from the backend\r\n      if (appStore.loading && appStore.defaultPublisher !== 0 && !appStore.publisher) {\r\n        return this._renderSpinner(appStore);\r\n      }\r\n\r\n      /** Do not render new UI content until publisher info fetched\r\n       * Tython Publisher will be redirected to homePage\r\n       * Non-Tython MSA user is redirected to the reporting dashboard\r\n       */\r\n      if (getAdManagementStore().doNotRenderDefaultPage) {\r\n        return this._renderSpinner(appStore);\r\n      }\r\n\r\n      const localStorageLocal = localStorage.getItem(LOCAL_STORAGE_LOCALE);\r\n\r\n      return (\r\n        <div className={this._classNames.root}>\r\n          {isPublisherRejectionUnappealable() && this.props.location.pathname !== SupportPageRoute && <Overlay style={{ zIndex: 9999 }} />}\r\n          <div style={{ zIndex: isPublisherRejectionUnappealable() ? 99999 : undefined }}>\r\n            <GlobalSearchHeader renderLeftMost={this.props.renderLeftMostSection} />\r\n          </div>\r\n          <div className={this._classNames.wrapper}>{this.props.children}</div>\r\n          {(appStore.loading || (isTythonSelfServeUser() && !localStorageLocal)) &&\r\n            this._renderSpinner(appStore, isTythonSelfServeUser() && !localStorageLocal)}\r\n        </div>\r\n      );\r\n    }\r\n\r\n    private _renderSpinner = (appStore: IAppState, renderWhiteBackground?: boolean): JSX.Element => {\r\n      return sessionStorage.getItem(TYTHON_DOMAIN_REDIRECTION_CACHE_KEY) === 'true' ? (\r\n        <RedirectionSpinner label={this.props.intl.formatMessage(LoginPageMessages.redirectionMessage)} />\r\n      ) : (\r\n        <PageSpinner\r\n          styleProps={{\r\n            overlayStyle: renderWhiteBackground ? this._classNames.overlayStyle : undefined,\r\n          }}\r\n          label={this.props.intl.formatMessage(appStore.waiting ? AppMessages.loadingWaitingLabel : AppMessages.loadingLabel)}\r\n        />\r\n      );\r\n    };\r\n  }\r\n);\r\n","import { action } from 'satcheljs';\r\nimport { ISearchResultInfo } from '../store/schema/IGlobalSearchResultPageState';\r\n\r\nexport const onSearchTriggered = action('onSearchTriggered', (resourceType?: string) => ({ resourceType }));\r\n\r\nexport const setData = action('setData', (results: Map<string, ISearchResultInfo>, resourceTypes: Map<string, number>) => ({\r\n  results,\r\n  resourceTypes\r\n}));\r\n\r\nexport const setSearchParams = action('setSearchParams', (query: string, sourceRef?: string) => ({ query, sourceRef }));\r\n\r\nexport const showMoreLoading = action('showMoreLoading', (resourceType: string, value: boolean) => ({ resourceType, value }));\r\n\r\nexport const clearStore = action('clearStore');\r\n","import { createStore } from 'satcheljs';\r\nimport { IGlobalSearchResultPageState, ISearchResultInfo } from './schema/IGlobalSearchResultPageState';\r\n\r\nexport enum Filters {\r\n  adunits,\r\n  adfilters,\r\n  channels,\r\n  publishers,\r\n  reporting,\r\n  properties,\r\n  accounts,\r\n  users\r\n}\r\n\r\nexport const getStore = createStore<IGlobalSearchResultPageState>('GlobalSearchResultPageState', {\r\n  resourceTypes: new Map<string, number>(),\r\n  results: new Map<string, ISearchResultInfo>(),\r\n  isShowMoreLoading: new Map<string, boolean>(),\r\n  searchQuery: '',\r\n  sourceRef: ''\r\n});\r\n","import { mutator } from 'satcheljs';\r\nimport { getAppStore } from '../../../../@data';\r\nimport { clearStore, setData, setSearchParams, showMoreLoading } from '../actions/onSearchTriggered';\r\nimport { ISearchResultInfo } from '../store/schema/IGlobalSearchResultPageState';\r\nimport { getStore } from '../store/store';\r\n\r\nmutator(setData, msg => {\r\n  const store = getStore();\r\n  const appStore = getAppStore();\r\n\r\n  msg.results.forEach((searchResultInfo: ISearchResultInfo, key: string) => {\r\n    const resultInfo = store.results.get(key);\r\n    if (resultInfo) {\r\n      resultInfo.pageToken = searchResultInfo.pageToken;\r\n      resultInfo.resultData = resultInfo.resultData.concat(searchResultInfo.resultData);\r\n      store.results.set(key, resultInfo);\r\n    } else {\r\n      store.results.set(key, searchResultInfo);\r\n    }\r\n  });\r\n  msg.resourceTypes.forEach((value: number, key: string) => {\r\n    if (value) {\r\n      store.resourceTypes.set(key, value);\r\n    }\r\n  });\r\n  appStore.loading = false;\r\n});\r\n\r\nmutator(setSearchParams, msg => {\r\n  const store = getStore();\r\n  store.searchQuery = msg.query;\r\n  store.sourceRef = msg.sourceRef;\r\n});\r\n\r\nmutator(showMoreLoading, msg => {\r\n  const store = getStore();\r\n  store.isShowMoreLoading.set(msg.resourceType, msg.value);\r\n});\r\n\r\nmutator(clearStore, () => {\r\n  getStore().resourceTypes.clear();\r\n  getStore().isShowMoreLoading.clear();\r\n  getStore().results.clear();\r\n  getStore().searchQuery = '';\r\n});\r\n","export abstract class SearchResult {\r\n  constructor(public name?: string, public id?: string, public iconName?: string) {}\r\n  public abstract getPublisherId(): string;\r\n  public abstract getAccountId(): string;\r\n  public abstract getResourceType(): string;\r\n}\r\n","import { ResourceType } from '../../../../../../@data/store/schema/enums/ResourceType';\r\nimport { IGlobalSearchResult } from '../../../../../../@data/store/schema/interfaces/IGlobalSearchResult';\r\nimport { SearchResult } from './SearchResult';\r\n\r\nexport class Account extends SearchResult {\r\n  public createdDate?: string;\r\n  public status?: string;\r\n  private _item: IGlobalSearchResult;\r\n\r\n  constructor(item?: IGlobalSearchResult) {\r\n    super(item && item.resourceName, item && item.resourceId, 'Work');\r\n    if (item) {\r\n      this.createdDate = item.propertyBag && item.propertyBag.CreationDateTime;\r\n      this.status = item.propertyBag && item.propertyBag.Status;\r\n      this._item = item;\r\n    }\r\n  }\r\n\r\n  public getPublisherId(): string {\r\n    if (this._item && this._item.propertyBag && this._item.propertyBag.PublisherId) {\r\n      return this._item.propertyBag.PublisherId;\r\n    }\r\n\r\n    return '';\r\n  }\r\n\r\n  public getAccountId(): string {\r\n    if (this._item && this._item.propertyBag && this._item.propertyBag.AccountId) {\r\n      return this._item.propertyBag.AccountId;\r\n    }\r\n\r\n    return '';\r\n  }\r\n\r\n  public getResourceType(): string {\r\n    return ResourceType[ResourceType.Account];\r\n  }\r\n}\r\n","import { ResourceType } from '../../../../../../@data/store/schema/enums/ResourceType';\r\nimport { IGlobalSearchResult } from '../../../../../../@data/store/schema/interfaces/IGlobalSearchResult';\r\nimport { SearchResult } from './SearchResult';\r\n\r\nexport class AdFilter extends SearchResult {\r\n  public numberOfExcludedURLs?: string;\r\n  public numberOfExcludedKeywords?: string;\r\n  private _item: IGlobalSearchResult;\r\n\r\n  constructor(item?: IGlobalSearchResult) {\r\n    super(item && item.resourceName, item && item.resourceId, 'Filter');\r\n    if (item) {\r\n      this.numberOfExcludedURLs = item.propertyBag && item.propertyBag.NumberOfExcludedURLs;\r\n      this.numberOfExcludedKeywords = item.propertyBag && item.propertyBag.NumberOfExcludedKeywords;\r\n      this._item = item;\r\n    }\r\n  }\r\n\r\n  public getPublisherId(): string {\r\n    if (this._item && this._item.propertyBag && this._item.propertyBag.PublisherId) {\r\n      return this._item.propertyBag.PublisherId;\r\n    }\r\n\r\n    return '';\r\n  }\r\n\r\n  public getAccountId(): string {\r\n    if (this._item && this._item.propertyBag && this._item.propertyBag.AccountId) {\r\n      return this._item.propertyBag.AccountId;\r\n    }\r\n\r\n    return '';\r\n  }\r\n\r\n  public getResourceType(): string {\r\n    return ResourceType[ResourceType.Filter];\r\n  }\r\n}\r\n","import { ResourceType } from '../../../../../../@data/store/schema/enums/ResourceType';\r\nimport { IGlobalSearchResult } from '../../../../../../@data/store/schema/interfaces/IGlobalSearchResult';\r\nimport { SearchResult } from './SearchResult';\r\n\r\nexport class AdUnit extends SearchResult {\r\n  public numberOfChannels?: number;\r\n  public status?: string;\r\n  private _item: IGlobalSearchResult;\r\n\r\n  constructor(item?: IGlobalSearchResult) {\r\n    super(item && item.resourceName, item && item.resourceId, 'AdUnit');\r\n    if (item) {\r\n      this.numberOfChannels = item.propertyBag && item.propertyBag.NumberOfChannels;\r\n      this.status = item.propertyBag && item.propertyBag.Status;\r\n      this._item = item;\r\n    }\r\n  }\r\n\r\n  public getPublisherId(): string {\r\n    if (this._item && this._item.propertyBag && this._item.propertyBag.PublisherId) {\r\n      return this._item.propertyBag.PublisherId;\r\n    }\r\n\r\n    return '';\r\n  }\r\n\r\n  public getAccountId(): string {\r\n    if (this._item && this._item.propertyBag && this._item.propertyBag.AccountId) {\r\n      return this._item.propertyBag.AccountId;\r\n    }\r\n\r\n    return '';\r\n  }\r\n\r\n  public getResourceType(): string {\r\n    return ResourceType[ResourceType.AdUnit];\r\n  }\r\n}\r\n","import { ResourceType } from '../../../../../../@data/store/schema/enums/ResourceType';\r\nimport { IGlobalSearchResult } from '../../../../../../@data/store/schema/interfaces/IGlobalSearchResult';\r\nimport { SearchResult } from './SearchResult';\r\n\r\nexport class Channel extends SearchResult {\r\n  public numberOfAdunits?: number;\r\n  public numberOfAdFilters?: number;\r\n  private _item: IGlobalSearchResult;\r\n\r\n  constructor(item?: IGlobalSearchResult) {\r\n    super(item && item.resourceName, item && item.resourceId, 'AdUnitChannel');\r\n    if (item) {\r\n      this.numberOfAdunits = item.propertyBag && item.propertyBag.NumberOfAdunits;\r\n      this.numberOfAdFilters = item.propertyBag && item.propertyBag.NumberOfAdFilters;\r\n      this._item = item;\r\n    }\r\n  }\r\n\r\n  public getPublisherId(): string {\r\n    if (this._item && this._item.propertyBag && this._item.propertyBag.PublisherId) {\r\n      return this._item.propertyBag.PublisherId;\r\n    }\r\n\r\n    return '';\r\n  }\r\n\r\n  public getAccountId(): string {\r\n    if (this._item && this._item.propertyBag && this._item.propertyBag.AccountId) {\r\n      return this._item.propertyBag.AccountId;\r\n    }\r\n\r\n    return '';\r\n  }\r\n\r\n  public getResourceType(): string {\r\n    return ResourceType[ResourceType.Channel];\r\n  }\r\n}\r\n","import { ResourceType } from '../../../../../../@data/store/schema/enums/ResourceType';\r\nimport { IGlobalSearchResult } from '../../../../../../@data/store/schema/interfaces/IGlobalSearchResult';\r\nimport { SearchResult } from './SearchResult';\r\n\r\nexport class Publisher extends SearchResult {\r\n  public createdDate?: string;\r\n  public lastModifiedDateTime?: string;\r\n  public notes: string;\r\n  private _item: IGlobalSearchResult;\r\n\r\n  constructor(item?: IGlobalSearchResult) {\r\n    super(item && item.resourceName, item && item.resourceId, 'EMI');\r\n    if (item) {\r\n      this.createdDate = item.propertyBag && item.propertyBag.CreationDateTime;\r\n      this.lastModifiedDateTime = item.propertyBag && item.propertyBag.LastModifiedDateTime;\r\n      this.notes = item.resourceType;\r\n      this._item = item;\r\n    }\r\n  }\r\n\r\n  public getPublisherId(): string {\r\n    if (this._item && this._item.propertyBag && this._item.propertyBag.PublisherId) {\r\n      return this._item.propertyBag.PublisherId;\r\n    }\r\n\r\n    return '';\r\n  }\r\n\r\n  public getAccountId(): string {\r\n    if (this._item && this._item.propertyBag && this._item.propertyBag.AccountId) {\r\n      return this._item.propertyBag.AccountId;\r\n    }\r\n\r\n    return '';\r\n  }\r\n\r\n  public getResourceType(): string {\r\n    return ResourceType[ResourceType.Publisher];\r\n  }\r\n}\r\n","import { ResourceType } from '../../../../../../@data/store/schema/enums/ResourceType';\r\nimport { IGlobalSearchResult } from '../../../../../../@data/store/schema/interfaces/IGlobalSearchResult';\r\nimport { SearchResult } from './SearchResult';\r\n\r\nexport class User extends SearchResult {\r\n  public fullName?: string;\r\n  public publisherName?: string;\r\n  private _item: IGlobalSearchResult;\r\n\r\n  constructor(item?: IGlobalSearchResult) {\r\n    super(item && item.resourceName, item && item.resourceId, 'Contact');\r\n    if (item) {\r\n      this.fullName = item.propertyBag && item.propertyBag.FullName;\r\n      this.publisherName = item.propertyBag && item.propertyBag.PublisherName;\r\n      this._item = item;\r\n    }\r\n  }\r\n\r\n  public getPublisherId(): string {\r\n    if (this._item && this._item.propertyBag && this._item.propertyBag.PublisherId) {\r\n      return this._item.propertyBag.PublisherId;\r\n    }\r\n\r\n    return '';\r\n  }\r\n\r\n  public getAccountId(): string {\r\n    if (this._item && this._item.propertyBag && this._item.propertyBag.AccountId) {\r\n      return this._item.propertyBag.AccountId;\r\n    }\r\n\r\n    return '';\r\n  }\r\n\r\n  public getResourceType(): string {\r\n    return ResourceType[ResourceType.User];\r\n  }\r\n}\r\n","import { ResourceType } from '../../../../../../@data/store/schema/enums/ResourceType';\r\nimport { IGlobalSearchResult } from '../../../../../../@data/store/schema/interfaces/IGlobalSearchResult';\r\nimport { SearchResult } from './SearchResult';\r\n\r\nexport class WebProperty extends SearchResult {\r\n  public publisherName?: string;\r\n  public websiteURL?: string;\r\n  private _item: IGlobalSearchResult;\r\n\r\n  constructor(item?: IGlobalSearchResult) {\r\n    super(item && item.resourceName, item && item.resourceId, 'BusinessHoursSign');\r\n    if (item) {\r\n      this.websiteURL = item.propertyBag && item.propertyBag.WebSiteURL;\r\n      this.publisherName = item.propertyBag && item.propertyBag.PublisherName;\r\n      this._item = item;\r\n    }\r\n  }\r\n\r\n  public getPublisherId(): string {\r\n    if (this._item && this._item.propertyBag && this._item.propertyBag.PublisherId) {\r\n      return this._item.propertyBag.PublisherId;\r\n    }\r\n\r\n    return '';\r\n  }\r\n\r\n  public getAccountId(): string {\r\n    if (this._item && this._item.propertyBag && this._item.propertyBag.AccountId) {\r\n      return this._item.propertyBag.AccountId;\r\n    }\r\n\r\n    return '';\r\n  }\r\n\r\n  public getResourceType(): string {\r\n    return ResourceType[ResourceType.WebProperty];\r\n  }\r\n}\r\n","import { crossEntityResourceTypeMap, ResourceType } from '../../../../@data/store/schema/enums/ResourceType';\r\nimport { IGlobalSearchResult } from '../../../../@data/store/schema/interfaces/IGlobalSearchResult';\r\nimport { IGlobalSearchResultData } from '../../../../@data/store/schema/interfaces/IGlobalSearchResultData';\r\nimport { RoutePrefix } from '../../../../Routes';\r\nimport { ISearchResultInfo } from '../store/schema/IGlobalSearchResultPageState';\r\nimport { Account, AdFilter, AdUnit, Channel, Publisher, User, WebProperty } from '../store/schema/models/Index';\r\n\r\nconst resourceTypePriorityMap = new Map<string, string[]>([\r\n  [\r\n    RoutePrefix.adManagement,\r\n    [\r\n      ResourceType[ResourceType.Filter],\r\n      ResourceType[ResourceType.Channel],\r\n      ResourceType[ResourceType.AdUnit],\r\n      ResourceType[ResourceType.WebProperty],\r\n      ResourceType[ResourceType.Reporting],\r\n      ResourceType[ResourceType.Account],\r\n      ResourceType[ResourceType.Publisher],\r\n      ResourceType[ResourceType.User]\r\n    ]\r\n  ],\r\n  [\r\n    RoutePrefix.partnerManagement,\r\n    [\r\n      ResourceType[ResourceType.Account],\r\n      ResourceType[ResourceType.Publisher],\r\n      ResourceType[ResourceType.User],\r\n      ResourceType[ResourceType.Reporting],\r\n      ResourceType[ResourceType.Filter],\r\n      ResourceType[ResourceType.Channel],\r\n      ResourceType[ResourceType.AdUnit],\r\n      ResourceType[ResourceType.WebProperty]\r\n    ]\r\n  ],\r\n  [\r\n    RoutePrefix.report,\r\n    [\r\n      ResourceType[ResourceType.Reporting],\r\n      ResourceType[ResourceType.Filter],\r\n      ResourceType[ResourceType.Channel],\r\n      ResourceType[ResourceType.AdUnit],\r\n      ResourceType[ResourceType.WebProperty],\r\n      ResourceType[ResourceType.Account],\r\n      ResourceType[ResourceType.Publisher],\r\n      ResourceType[ResourceType.User]\r\n    ]\r\n  ]\r\n]);\r\n\r\nexport function buildSearchResults(data: IGlobalSearchResultData): ISearchResultInfo {\r\n  const searchResultInfo: ISearchResultInfo = { pageToken: '', resultData: [] };\r\n  const publisherCrossEntities = crossEntityResourceTypeMap.get(ResourceType[ResourceType.Publisher]);\r\n  if (data.results.length > 0) {\r\n    // eslint-disable-next-line\r\n    data.results.map((item: IGlobalSearchResult) => {\r\n      if (item.resourceType === ResourceType[ResourceType.Account]) {\r\n        const searchResult = new Account(item);\r\n        searchResultInfo.resultData.push(searchResult);\r\n      } else if (item.resourceType === ResourceType[ResourceType.AdUnit]) {\r\n        const searchResult = new AdUnit(item);\r\n        searchResultInfo.resultData.push(searchResult);\r\n      } else if (item.resourceType === ResourceType[ResourceType.Filter]) {\r\n        const searchResult = new AdFilter(item);\r\n        searchResultInfo.resultData.push(searchResult);\r\n      } else if (item.resourceType === ResourceType[ResourceType.Channel]) {\r\n        const searchResult = new Channel(item);\r\n        searchResultInfo.resultData.push(searchResult);\r\n      } else if (item.resourceType === ResourceType[ResourceType.WebProperty]) {\r\n        const searchResult = new WebProperty(item);\r\n        searchResultInfo.resultData.push(searchResult);\r\n      } else if (item.resourceType === ResourceType[ResourceType.Publisher]) {\r\n        const searchResult = new Publisher(item);\r\n        searchResultInfo.resultData.push(searchResult);\r\n      } else if (item.resourceType === ResourceType[ResourceType.User]) {\r\n        const searchResult = new User(item);\r\n        searchResultInfo.resultData.push(searchResult);\r\n      } else if (publisherCrossEntities && publisherCrossEntities.find((value: string) => value === item.resourceType)) {\r\n        const searchResult = new Publisher(item);\r\n        searchResultInfo.resultData.push(searchResult);\r\n      }\r\n    });\r\n  }\r\n  searchResultInfo.pageToken = data.resultMetadata ? data.resultMetadata.NextPageToken : '';\r\n  return searchResultInfo;\r\n}\r\n\r\nexport function getOrderedResources(resourceTypes: Map<string, number>, routePrefix: string): Map<string, number> {\r\n  const orderedResourceTypesMap = new Map<string, number>();\r\n  const orderedResourceTypes = resourceTypePriorityMap.get(routePrefix);\r\n\r\n  if (orderedResourceTypes) {\r\n    orderedResourceTypes.forEach((resource: string) => {\r\n      const value = resourceTypes.get(resource);\r\n      if (value) {\r\n        orderedResourceTypesMap.set(resource, value);\r\n        resourceTypes.delete(resource);\r\n      }\r\n    });\r\n\r\n    resourceTypes.forEach((value: number, resource: string) => {\r\n      orderedResourceTypesMap.set(resource, value);\r\n    });\r\n\r\n    return orderedResourceTypesMap;\r\n  }\r\n\r\n  return resourceTypes;\r\n}\r\n","import { orchestrator } from 'satcheljs';\r\nimport { Log } from '../../../../../logging/src/Log';\r\nimport { getAppStore, onLoadingChanged } from '../../../../@data';\r\nimport { postSearch } from '../../../../@data/services/GlobalSearchApiService';\r\nimport { ResourceType } from '../../../../@data/store/schema/enums/ResourceType';\r\nimport { ResourceTypeDistribution } from '../../../../@data/store/schema/enums/ResourceTypeDistribution';\r\nimport { IGlobalSearchResultData } from '../../../../@data/store/schema/interfaces/IGlobalSearchResultData';\r\nimport { GlobalSearchRequest } from '../../../../@data/store/schema/models/GlobalSearchRequest';\r\nimport { getEnumNames } from '../../../../utils';\r\nimport { onSearchTriggered, setData, showMoreLoading } from '../actions/onSearchTriggered';\r\nimport { buildSearchResults, getOrderedResources } from '../services/GlobalSearchHelperService';\r\nimport { ISearchResultInfo } from '../store/schema/IGlobalSearchResultPageState';\r\nimport { getStore } from '../store/store';\r\n\r\nconst defaultPageToken = '';\r\nconst defaultPageSize = 5;\r\nconst showMorePagesize = 20;\r\n\r\norchestrator(onSearchTriggered, async (msg) => {\r\n  const { userContext } = getAppStore();\r\n  const store = getStore();\r\n  let resourceTypes: string[] = [];\r\n  let pageSize: number;\r\n  let pageToken = '';\r\n\r\n  if (msg.resourceType) {\r\n    pageSize = showMorePagesize;\r\n    const searchResultInfo = store.results.get(msg.resourceType);\r\n    resourceTypes.push(msg.resourceType);\r\n    if (searchResultInfo) {\r\n      pageToken = searchResultInfo.pageToken;\r\n    }\r\n    showMoreLoading(msg.resourceType, true);\r\n  } else {\r\n    pageSize = defaultPageSize;\r\n    pageToken = defaultPageToken;\r\n    resourceTypes = getEnumNames(ResourceType);\r\n    onLoadingChanged(true);\r\n  }\r\n\r\n  try {\r\n    const promiseResponses: Promise<IGlobalSearchResultData>[] = [];\r\n    for (const resource of resourceTypes) {\r\n      const reqResourceTypes = [resource];\r\n      /* const crossEntityResourceTypes = crossEntityResourceTypeMap.get(resource);\r\n      if (crossEntityResourceTypes) {\r\n        // eslint-disable-next-line\r\n        crossEntityResourceTypes.map((resourceType: string) => {\r\n          reqResourceTypes.push(resourceType);\r\n        });\r\n      }*/\r\n\r\n      const request: GlobalSearchRequest = {\r\n        query: store.searchQuery,\r\n        resourceTypes: reqResourceTypes,\r\n        globalFilters: [],\r\n        options: {\r\n          paginationOptions: { pageSize: pageSize, pageToken: pageToken },\r\n          resultPriorityOptions: { resourceTypeDistribution: ResourceTypeDistribution[ResourceTypeDistribution.DynamicBucketSize] },\r\n        },\r\n      };\r\n      promiseResponses.push(postSearch(request, userContext));\r\n    }\r\n\r\n    const responses = await Promise.all(promiseResponses);\r\n    const responseMap: Map<string, ISearchResultInfo> = new Map<string, ISearchResultInfo>();\r\n    const resourceTypeMap: Map<string, number> = new Map<string, number>();\r\n\r\n    for (let i = 0; i < resourceTypes.length; i++) {\r\n      // Setting search result items for each resource type\r\n      const searchResultInfo = buildSearchResults(responses[i]);\r\n      responseMap.set(resourceTypes[i], searchResultInfo);\r\n      // Setting search result item count for each resource type\r\n      let totalResultCount = 0;\r\n      const resultMetadata = responses[i].resultMetadata;\r\n      if (resultMetadata) {\r\n        totalResultCount = resultMetadata.ResultCountPerResourceType[resourceTypes[i]];\r\n      }\r\n      resourceTypeMap.set(resourceTypes[i], totalResultCount);\r\n    }\r\n\r\n    setData(responseMap, getOrderedResources(resourceTypeMap, store.sourceRef || ''));\r\n    if (msg.resourceType) {\r\n      showMoreLoading(msg.resourceType, false);\r\n    }\r\n  } catch (e) {\r\n    Log.error(`To do error handling in search page: ${JSON.stringify(e)}`);\r\n  }\r\n});\r\n","import { defineMessages } from 'react-intl';\r\n\r\nexport default defineMessages({\r\n  id: {\r\n    id: 'globalSearch.id',\r\n    defaultMessage: 'ID'\r\n  },\r\n  name: {\r\n    id: 'globalSearch.name',\r\n    defaultMessage: 'Name'\r\n  },\r\n  createdDate: {\r\n    id: 'globalSearch.createdDate',\r\n    defaultMessage: 'Created date'\r\n  },\r\n  numberOfChannels: {\r\n    id: 'globalSearch.numberOfChannels',\r\n    defaultMessage: 'Channels'\r\n  },\r\n  numberOfExcludedURLs: {\r\n    id: 'globalSearch.numberOfExcludedURLs',\r\n    defaultMessage: 'Excluded URLs'\r\n  },\r\n  numberOfExcludedKeywords: {\r\n    id: 'globalSearch.numberOfExcludedKeywords',\r\n    defaultMessage: 'Excluded keywords'\r\n  },\r\n  numberOfAdunits: {\r\n    id: 'globalSearch.numberOfAdunits',\r\n    defaultMessage: 'AdUnits'\r\n  },\r\n  numberOfAdFilters: {\r\n    id: 'globalSearch.numberOfAdfilters',\r\n    defaultMessage: 'AdFilters'\r\n  },\r\n  lastModifiedDateTime: {\r\n    id: 'globalSearch.lastModifiedDateTime',\r\n    defaultMessage: 'Modified date'\r\n  },\r\n  fullName: {\r\n    id: 'globalSearch.fullName',\r\n    defaultMessage: 'Full name'\r\n  },\r\n  publisherName: {\r\n    id: 'globalSearch.publisherName',\r\n    defaultMessage: 'Publisher name'\r\n  },\r\n  websiteUrl: {\r\n    id: 'globalSearch.websiteUrl',\r\n    defaultMessage: 'Website URL'\r\n  },\r\n  notes: {\r\n    id: 'globalSearch.notes',\r\n    defaultMessage: 'Notes'\r\n  },\r\n  clickableCellAriaDesc: {\r\n    id: 'globalSearch.clickableCellAriaDesc',\r\n    defaultMessage: 'Click to view or edit entity'\r\n  },\r\n  showMoreDescription: {\r\n    id: 'globalSearch.showMoreDescription',\r\n    defaultMessage: 'Click to fetch more results for {entity}'\r\n  }\r\n});\r\n","import { IPubcenterPalette, IPubcenterSpacing } from '../../../../theme';\r\nimport { IGlobalSearchResultListStyleProps, IGlobalSearchResultListStyles } from './GlobalSearchResultList.types';\r\n\r\nexport const getStyles = (props: IGlobalSearchResultListStyleProps): IGlobalSearchResultListStyles => {\r\n  const { theme } = props;\r\n  const spacing = theme.spacing as IPubcenterSpacing;\r\n  const pallete = theme.palette as IPubcenterPalette;\r\n  return {\r\n    root: {\r\n      backgroundColor: theme.palette.white,\r\n      paddingTop: spacing.size32\r\n    },\r\n    header: [\r\n      'ms-fontWeight-semibold',\r\n      {\r\n        fontSize: '14px',\r\n        paddingBottom: spacing.size16,\r\n        margin: 0\r\n      }\r\n    ],\r\n    button: [\r\n      'ms-showmore-button',\r\n      {\r\n        color: pallete.themeDark,\r\n        paddingTop: spacing.size16,\r\n        selectors: {\r\n          ':hover': {\r\n            color: pallete.blueDark\r\n          },\r\n          ':disabled': {\r\n            color: pallete.neutralQuaternary\r\n          }\r\n        }\r\n      }\r\n    ],\r\n    buttonIcon: {\r\n      paddingLeft: spacing.size8\r\n    },\r\n    iconHeader: {\r\n      padding: 0,\r\n      fontSize: spacing.size16\r\n    },\r\n    iconCell: {\r\n      textAlign: 'center',\r\n      selectors: {\r\n        '&:before': {\r\n          content: '.',\r\n          display: 'inline-block',\r\n          verticalAlign: 'middle',\r\n          height: '100%',\r\n          width: '0px',\r\n          visibility: 'hidden'\r\n        }\r\n      }\r\n    },\r\n    iconImg: {\r\n      verticalAlign: 'middle',\r\n      maxHeight: spacing.size16,\r\n      maxWidth: spacing.size16\r\n    },\r\n  };\r\n};\r\n","import {\r\n  ActionButton,\r\n  classNamesFunction,\r\n  getId,\r\n  getTheme,\r\n  IColumn,\r\n  Icon,\r\n  Link,\r\n  nullRender,\r\n  SelectionMode,\r\n  ShimmeredDetailsList,\r\n} from '@fluentui/react';\r\nimport * as React from 'react';\r\nimport { CrossEntityResourceType, ResourceType } from '../../../@data/store/schema/enums/ResourceType';\r\nimport AppMessages from '../../../App.messages';\r\nimport { RoutePrefix } from '../../../Routes';\r\nimport { injectIntlWithObserver } from '../../../utils';\r\nimport { getScreenReaderTextStyles } from '../../../utils/GlobalStyleUtils';\r\nimport { onSearchTriggered } from '../@data/actions/onSearchTriggered';\r\nimport { SearchResult } from '../@data/store/schema/models/SearchResult';\r\nimport { getStore } from '../@data/store/store';\r\nimport GlobalSearchResultListMessages from './GlobalSearchResultList.messages';\r\nimport { getStyles } from './GlobalSearchResultList.styles';\r\nimport {\r\n  IGlobalSearchResultListProps,\r\n  IGlobalSearchResultListStyleProps,\r\n  IGlobalSearchResultListStyles,\r\n} from './GlobalSearchResultList.types';\r\n\r\nconst getClassNames = classNamesFunction<IGlobalSearchResultListStyleProps, IGlobalSearchResultListStyles>();\r\n\r\nexport const GlobalSearchResultList = injectIntlWithObserver(\r\n  class extends React.Component<IGlobalSearchResultListProps> {\r\n    private _columns: Map<string, string> = new Map([\r\n      ['id', this.props.intl.formatMessage(GlobalSearchResultListMessages.id)],\r\n      ['name', this.props.intl.formatMessage(GlobalSearchResultListMessages.name)],\r\n      ['status', this.props.intl.formatMessage(AppMessages.status)],\r\n      ['createdDate', this.props.intl.formatMessage(GlobalSearchResultListMessages.createdDate)],\r\n      ['numberOfExcludedURLs', this.props.intl.formatMessage(GlobalSearchResultListMessages.numberOfExcludedURLs)],\r\n      ['numberOfExcludedKeywords', this.props.intl.formatMessage(GlobalSearchResultListMessages.numberOfExcludedKeywords)],\r\n      ['numberOfChannels', this.props.intl.formatMessage(GlobalSearchResultListMessages.numberOfChannels)],\r\n      ['numberOfAdunits', this.props.intl.formatMessage(GlobalSearchResultListMessages.numberOfAdunits)],\r\n      ['numberOfAdFilters', this.props.intl.formatMessage(GlobalSearchResultListMessages.numberOfAdFilters)],\r\n      ['lastModifiedDateTime', this.props.intl.formatMessage(GlobalSearchResultListMessages.lastModifiedDateTime)],\r\n      ['fullName', this.props.intl.formatMessage(GlobalSearchResultListMessages.fullName)],\r\n      ['publisherName', this.props.intl.formatMessage(GlobalSearchResultListMessages.publisherName)],\r\n      ['websiteURL', this.props.intl.formatMessage(GlobalSearchResultListMessages.websiteUrl)],\r\n      ['notes', this.props.intl.formatMessage(GlobalSearchResultListMessages.notes)],\r\n    ]);\r\n\r\n    private _columnNames: Map<string, string[]> = new Map([\r\n      [ResourceType[ResourceType.Account], ['name', 'id', 'createdDate', 'status']],\r\n      [ResourceType[ResourceType.AdUnit], ['name', 'id', 'numberOfChannels', 'status']],\r\n      [ResourceType[ResourceType.Filter], ['name', 'id', 'numberOfExcludedURLs', 'numberOfExcludedKeywords']],\r\n      [ResourceType[ResourceType.Channel], ['name', 'id', 'numberOfAdunits', 'numberOfAdFilters']],\r\n      [ResourceType[ResourceType.Publisher], ['name', 'id', 'createdDate', 'lastModifiedDateTime', 'notes']],\r\n      [ResourceType[ResourceType.User], ['name', 'id', 'fullName', 'publisherName']],\r\n      [ResourceType[ResourceType.WebProperty], ['name', 'id', 'publisherName', 'websiteURL']],\r\n    ]);\r\n\r\n    public render(): JSX.Element | null {\r\n      const classNames = getClassNames(getStyles, { theme: getTheme() });\r\n      const store = getStore();\r\n      const searchResultInfo = store.results.get(this.props.resourceType);\r\n      const { formatMessage } = this.props.intl;\r\n\r\n      if (searchResultInfo === undefined) {\r\n        return nullRender();\r\n      }\r\n\r\n      const isLoading = store.isShowMoreLoading.get(this.props.resourceType);\r\n      const totalCount = store.resourceTypes.get(this.props.resourceType) || 0;\r\n      /* const crossEntityResourceTypes = crossEntityResourceTypeMap.get(this.props.resourceType);\r\n\r\n      if (crossEntityResourceTypes) {\r\n        crossEntityResourceTypes.forEach((resourceType: string) => {\r\n          totalCount += store.resourceTypes.get(resourceType) || 0;\r\n        });\r\n      }*/\r\n\r\n      const header = this.props.headerText + ' (' + totalCount + ')';\r\n\r\n      return (\r\n        <div className={classNames.root}>\r\n          <h2 className={classNames.header}>{header}</h2>\r\n          <ShimmeredDetailsList\r\n            items={searchResultInfo.resultData}\r\n            onRenderItemColumn={this._renderItemColumn}\r\n            columns={this._buildSearchResultListColumns(this.props.resourceType)}\r\n            selectionMode={SelectionMode.none}\r\n          />\r\n          {isLoading && (\r\n            <ShimmeredDetailsList\r\n              items={[]}\r\n              columns={this._buildSearchResultListColumns(this.props.resourceType)}\r\n              selectionMode={SelectionMode.none}\r\n              enableShimmer={true}\r\n              isHeaderVisible={false}\r\n              shimmerLines={5}\r\n            />\r\n          )}\r\n          <ActionButton\r\n            disabled={searchResultInfo.pageToken === ''}\r\n            className={classNames.button}\r\n            onClick={() => onSearchTriggered(this.props.resourceType)}\r\n            ariaDescription={formatMessage(GlobalSearchResultListMessages.showMoreDescription, { entity: this.props.headerText })}\r\n          >\r\n            {formatMessage(AppMessages.showMore)}\r\n            <Icon className={classNames.buttonIcon} iconName=\"ChevronDown\" />\r\n          </ActionButton>\r\n        </div>\r\n      );\r\n    }\r\n\r\n    private _buildSearchResultListColumns(resourceType: string): IColumn[] {\r\n      const columns = this._columnNames.get(resourceType);\r\n      const classNames = getClassNames(getStyles, { theme: getTheme() });\r\n      const newColumns: IColumn[] = [];\r\n\r\n      const iconColumn: IColumn = {\r\n        key: 'iconColumn',\r\n        name: 'File Type',\r\n        className: classNames.iconCell,\r\n        iconClassName: classNames.iconHeader,\r\n        iconName: 'Page',\r\n        isIconOnly: true,\r\n        fieldName: 'iconName',\r\n        minWidth: 16,\r\n        maxWidth: 16,\r\n        onRender: (item: SearchResult) => {\r\n          return <Icon className={classNames.iconImg} iconName={item.iconName} />;\r\n        },\r\n      };\r\n      newColumns.push(iconColumn);\r\n      if (columns) {\r\n        // eslint-disable-next-line\r\n        columns.map((column: string) => {\r\n          const newColumn: IColumn = {\r\n            key: column,\r\n            name: this._columns.get(column) || '',\r\n            fieldName: column,\r\n            isCollapsable: false,\r\n            minWidth: 100,\r\n            maxWidth: 300,\r\n            isResizable: true,\r\n            isPadded: true,\r\n          };\r\n          newColumns.push(newColumn);\r\n        });\r\n      }\r\n\r\n      return newColumns;\r\n    }\r\n\r\n    private _onClick = (item: SearchResult): void => {\r\n      const publisherId = item.getPublisherId();\r\n      const accountId = item.getAccountId();\r\n      const resourceType = item.getResourceType();\r\n      const entityId = item.id;\r\n      let route = '';\r\n\r\n      switch (resourceType) {\r\n        case ResourceType[ResourceType.AdUnit]: {\r\n          if (publisherId !== '' && accountId !== '') {\r\n            route = `/${RoutePrefix.adManagement}/${publisherId}-${accountId}/adunit/edit/${entityId}`;\r\n          }\r\n          break;\r\n        }\r\n        case ResourceType[ResourceType.Channel]: {\r\n          if (publisherId !== '' && accountId !== '') {\r\n            route = `/${RoutePrefix.adManagement}/${publisherId}-${accountId}/channel/edit/${entityId}`;\r\n          }\r\n          break;\r\n        }\r\n        case ResourceType[ResourceType.WebProperty]: {\r\n          if (publisherId !== '') {\r\n            route = `/${RoutePrefix.adManagement}/${publisherId}/property/edit/${entityId}`;\r\n          }\r\n          break;\r\n        }\r\n        case ResourceType[ResourceType.Filter]: {\r\n          if (publisherId !== '' && accountId !== '') {\r\n            route = `/${RoutePrefix.adManagement}/${publisherId}-${accountId}/adfilter/edit/${entityId}`;\r\n          }\r\n          break;\r\n        }\r\n        case ResourceType[ResourceType.Account]: {\r\n          if (publisherId !== '') {\r\n            route = `/${RoutePrefix.partnerManagement}/${publisherId}/account/edit/${entityId}`;\r\n          }\r\n          break;\r\n        }\r\n        case ResourceType[ResourceType.Publisher]:\r\n        case CrossEntityResourceType[CrossEntityResourceType.PublisherByAccount]:\r\n        case CrossEntityResourceType[CrossEntityResourceType.PublisherByAdunit]:\r\n        case CrossEntityResourceType[CrossEntityResourceType.PublisherByChannel]:\r\n        case CrossEntityResourceType[CrossEntityResourceType.PublisherByFilter]:\r\n        case CrossEntityResourceType[CrossEntityResourceType.PublisherByUser]:\r\n        case CrossEntityResourceType[CrossEntityResourceType.PublisherByWebProperty]: {\r\n          if (entityId !== '') {\r\n            route = `/${RoutePrefix.partnerManagement}/${entityId}/publisher/edit/${entityId}`;\r\n          }\r\n          break;\r\n        }\r\n        case ResourceType[ResourceType.User]: {\r\n          if (publisherId !== '') {\r\n            route = `/${RoutePrefix.partnerManagement}/${publisherId}/user/edit/${entityId}`;\r\n          }\r\n          break;\r\n        }\r\n      }\r\n\r\n      if (route !== '') {\r\n        this.props.history.push(route);\r\n      }\r\n    };\r\n\r\n    private _renderItemColumn = (item: SearchResult, index: number, column: IColumn): JSX.Element => {\r\n      const cellAriaDescId = getId('clickableCellAriaDesc-');\r\n\r\n      if (column.key === 'name') {\r\n        return (\r\n          <>\r\n            <Link onClick={() => this._onClick(item)} aria-describedby={cellAriaDescId}>\r\n              {item.name}\r\n            </Link>\r\n            <span id={cellAriaDescId} style={getScreenReaderTextStyles()}>\r\n              {this.props.intl.formatMessage(GlobalSearchResultListMessages.clickableCellAriaDesc)}\r\n            </span>\r\n          </>\r\n        );\r\n      }\r\n      return <span>{item[column.fieldName || '']}</span>;\r\n    };\r\n  }\r\n);\r\n","import { defineMessages } from 'react-intl';\r\n\r\nexport default defineMessages({\r\n  searchResults: {\r\n    id: 'globalSearch.searchResults',\r\n    defaultMessage: 'Search results'\r\n  },\r\n  filterSearchBy: {\r\n    id: 'globalSearch.filterSearchBy',\r\n    defaultMessage: 'Filter search by'\r\n  },\r\n  clearFilters: {\r\n    id: 'globalSearch.clearFilters',\r\n    defaultMessage: 'Clear filters'\r\n  },\r\n  filterCheckboxAriaDesc: {\r\n    id: 'globalSearch.filterCheckboxAriaDesc',\r\n  defaultMessage: 'Check this to include {entity} search results'\r\n  }\r\n});\r\n","import { IPubcenterPalette, IPubcenterSpacing } from '../../../../theme';\r\nimport { IGlobalSearchResultPageStyleProps, IGlobalSearchResultPageStyles } from './GlobalSearchResultPage.types';\r\n\r\nexport const getStyles = (props: IGlobalSearchResultPageStyleProps): IGlobalSearchResultPageStyles => {\r\n  const { theme } = props;\r\n  const spacing = theme.spacing as IPubcenterSpacing;\r\n  const pallete = theme.palette as IPubcenterPalette;\r\n  return {\r\n    root: {\r\n      display: 'flex',\r\n      flexDirection: 'column',\r\n      height: 'inherit',\r\n      maxHeight: '95vh',\r\n      flex: 1,\r\n      backgroundColor: theme.palette.white\r\n    },\r\n    header: [\r\n      'ms-fontWeight-semibold',\r\n      {\r\n        display: 'flex',\r\n        fontSize: `calc(${spacing.size16} + ${spacing.size4})`,\r\n        paddingTop: spacing.size32,\r\n        paddingBottom: spacing.size24\r\n      }\r\n    ],\r\n    filter: {\r\n      display: 'flex',\r\n      flexDirection: 'row',\r\n      alignItems: 'center'\r\n    },\r\n    filterContent: {\r\n      display: 'flex',\r\n      paddingRight: spacing.size24\r\n    },\r\n    clearFilterButton: {\r\n      display: 'flex',\r\n      color: pallete.themeDarkAlt,\r\n      marginLeft: 'auto',\r\n      selectors: {\r\n        ':hover': {\r\n          color: pallete.blueDark\r\n        }\r\n      }\r\n    },\r\n    navBackButton: [\r\n      'ms-navBackButton',\r\n      {\r\n        display: 'flex',\r\n        color: pallete.themeDarkAlt,\r\n        backgroundColor: theme.palette.neutralLighter,\r\n        height: spacing.size44,\r\n        alignItems: 'center',\r\n        selectors: {\r\n          ':hover': {\r\n            color: pallete.blueDark\r\n          }\r\n        }\r\n      }\r\n    ],\r\n    scrollablePanel: {\r\n      borderBottomStyle: 'solid',\r\n      borderColor: theme.palette.neutralLight,\r\n      borderBottomWidth: 1,\r\n      overflowY: 'auto',\r\n      flex: 1\r\n    },\r\n    pageContent: {\r\n      display: 'flex',\r\n      flexDirection: 'column',\r\n      paddingLeft: spacing.size44,\r\n      paddingRight: spacing.size44,\r\n      paddingBottom: spacing.size44\r\n    },\r\n  };\r\n};\r\n","import { ActionButton, Checkbox, classNamesFunction, getId, getTheme, nullRender } from '@fluentui/react';\r\nimport * as React from 'react';\r\nimport { getAppStore, onNavigateBack } from '../../../@data';\r\nimport { ResourceType } from '../../../@data/store/schema/enums/ResourceType';\r\nimport AppMessages from '../../../App.messages';\r\nimport { Main } from '../../../components/Main/Main';\r\nimport { injectIntlWithObserver } from '../../../utils';\r\nimport { getScreenReaderTextStyles } from '../../../utils/GlobalStyleUtils';\r\nimport { clearStore, onSearchTriggered, setSearchParams } from '../@data/actions/onSearchTriggered';\r\nimport '../@data/mutators/searchChanged';\r\nimport '../@data/orchestrators/searchTriggered';\r\nimport { getStore } from '../@data/store/store';\r\nimport { GlobalSearchResultList } from '../GlobalSearchResultList/GlobalSearchResultList';\r\nimport GlobalSearchResultPageMessages from './GlobalSearchResultPage.messages';\r\nimport { getStyles } from './GlobalSearchResultPage.styles';\r\nimport {\r\n  IFilter,\r\n  IGlobalSearchResultPageProps,\r\n  IGlobalSearchResultPageState,\r\n  IGlobalSearchResultPageStyleProps,\r\n  IGlobalSearchResultPageStyles,\r\n} from './GlobalSearchResultPage.types';\r\n\r\nconst getClassNames = classNamesFunction<IGlobalSearchResultPageStyleProps, IGlobalSearchResultPageStyles>();\r\n\r\nexport const GlobalSearchResultPage = injectIntlWithObserver(\r\n  class GlobalSearchResultPageComponent extends React.Component<IGlobalSearchResultPageProps, IGlobalSearchResultPageState> {\r\n    private _classNames = getClassNames(getStyles, { theme: getTheme() });\r\n    private _filters: Map<string, IFilter> = new Map<string, IFilter>([\r\n      [ResourceType[ResourceType.AdUnit], { text: this.props.intl.formatMessage(AppMessages.adUnits), isSelected: true }],\r\n      [ResourceType[ResourceType.Filter], { text: this.props.intl.formatMessage(AppMessages.adFilters), isSelected: true }],\r\n      [ResourceType[ResourceType.Channel], { text: this.props.intl.formatMessage(AppMessages.channels), isSelected: true }],\r\n      [ResourceType[ResourceType.Publisher], { text: this.props.intl.formatMessage(AppMessages.publishers), isSelected: true }],\r\n      [ResourceType[ResourceType.Reporting], { text: this.props.intl.formatMessage(AppMessages.reporting), isSelected: true }],\r\n      [ResourceType[ResourceType.WebProperty], { text: this.props.intl.formatMessage(AppMessages.properties), isSelected: true }],\r\n      [ResourceType[ResourceType.Account], { text: this.props.intl.formatMessage(AppMessages.accounts), isSelected: true }],\r\n      [ResourceType[ResourceType.User], { text: this.props.intl.formatMessage(AppMessages.users), isSelected: true }],\r\n    ]);\r\n\r\n    constructor(props: IGlobalSearchResultPageProps) {\r\n      super(props);\r\n      this.state = {\r\n        filters: this._filters,\r\n      };\r\n    }\r\n\r\n    public componentDidMount() {\r\n      const params = new URLSearchParams(this.props.location.search);\r\n      const query = params.get('q') || '';\r\n      const sourceRef = params.get('sourceRef') || '';\r\n      const filter = params.get('filter') || '';\r\n\r\n      setSearchParams(query, sourceRef);\r\n      this._updateFilters(filter);\r\n      onSearchTriggered();\r\n    }\r\n\r\n    public componentDidUpdate() {\r\n      const params = new URLSearchParams(this.props.location.search);\r\n      const store = getStore();\r\n      const query = params.get('q') || '';\r\n      const sourceRef = params.get('sourceRef') || '';\r\n      const filter = params.get('filter') || '';\r\n\r\n      if (query !== '' && store.searchQuery !== query) {\r\n        clearStore();\r\n        setSearchParams(query, sourceRef);\r\n        this._updateFilters(filter);\r\n        onSearchTriggered();\r\n      }\r\n    }\r\n\r\n    public componentWillUnmount() {\r\n      clearStore();\r\n    }\r\n\r\n    public render(): JSX.Element | null {\r\n      const classNames = this._classNames;\r\n      const { formatMessage } = this.props.intl;\r\n      const appStore = getAppStore();\r\n\r\n      if (appStore.loading === true) {\r\n        return nullRender();\r\n      }\r\n\r\n      return (\r\n        <div className={classNames.root}>\r\n          <ActionButton\r\n            className={classNames.navBackButton}\r\n            iconProps={{\r\n              iconName: 'Back',\r\n            }}\r\n            onClick={() => onNavigateBack()}\r\n          >\r\n            {formatMessage(AppMessages.back)}\r\n          </ActionButton>\r\n          <div className={classNames.scrollablePanel}>\r\n            <Main className={classNames.pageContent} aria-labelledby=\"searchResultHeading\">\r\n              <div id=\"searchResultHeading\" className={classNames.header} role=\"heading\" aria-level={1}>\r\n                {formatMessage(GlobalSearchResultPageMessages.searchResults)}\r\n              </div>\r\n              <div className={classNames.filter} role=\"region\" aria-labelledby=\"filtersLabel\">\r\n                <div id=\"filtersLabel\" className={classNames.filterContent}>\r\n                  {formatMessage(GlobalSearchResultPageMessages.filterSearchBy)}\r\n                </div>\r\n                {this._getFilters()}\r\n                <ActionButton className={classNames.clearFilterButton} onClick={() => this._clearFilters()}>\r\n                  {formatMessage(GlobalSearchResultPageMessages.clearFilters)}\r\n                </ActionButton>\r\n              </div>\r\n              {this._getSearchResultLists()}\r\n            </Main>\r\n          </div>\r\n        </div>\r\n      );\r\n    }\r\n\r\n    private _getFilters(): JSX.Element {\r\n      const element: JSX.Element[] = [];\r\n      const classNames = getClassNames(getStyles, { theme: getTheme() });\r\n      const store = getStore();\r\n      store.resourceTypes.forEach((value: number, key: string) => {\r\n        const filterState = this.state.filters.get(key);\r\n        const checkboxAriaDescId = getId('checkBoxAriaDesc-');\r\n\r\n        if (filterState && value > 0) {\r\n          element.push(\r\n            <>\r\n              <Checkbox\r\n                className={classNames.filterContent}\r\n                key={key}\r\n                label={filterState.text}\r\n                ariaLabel={filterState.text}\r\n                checked={filterState.isSelected}\r\n                onChange={() => this._checkBoxClicked(key)}\r\n                ariaDescribedBy={checkboxAriaDescId}\r\n              />\r\n              <span id={checkboxAriaDescId} style={getScreenReaderTextStyles()}>\r\n                {this.props.intl.formatMessage(GlobalSearchResultPageMessages.filterCheckboxAriaDesc, { entity: filterState.text })}\r\n              </span>\r\n            </>\r\n          );\r\n        }\r\n      });\r\n      return <React.Fragment>{element}</React.Fragment>;\r\n    }\r\n\r\n    private _getSearchResultLists(): JSX.Element {\r\n      const element: JSX.Element[] = [];\r\n      const store = getStore();\r\n      store.resourceTypes.forEach((value: number, key: string) => {\r\n        const filterState = this.state.filters.get(key);\r\n        if (filterState && filterState.isSelected && value > 0) {\r\n          element.push(<GlobalSearchResultList {...this.props} resourceType={key} headerText={filterState.text} key={key} />);\r\n        }\r\n      });\r\n      return <React.Fragment>{element}</React.Fragment>;\r\n    }\r\n\r\n    private _clearFilters() {\r\n      const filters = this.state.filters;\r\n\r\n      filters.forEach((filter: IFilter) => {\r\n        filter.isSelected = false;\r\n      });\r\n\r\n      this.setState({ filters: filters });\r\n    }\r\n\r\n    private _checkBoxClicked(resourceType: string) {\r\n      const filters = this.state.filters;\r\n      const filterState = filters.get(resourceType);\r\n      if (filterState) {\r\n        filterState.isSelected = !filterState.isSelected;\r\n      }\r\n      this.setState({ filters: filters });\r\n    }\r\n\r\n    private _updateFilters(resourceType: string) {\r\n      const filterResource = this._filters.get(resourceType);\r\n\r\n      if (filterResource) {\r\n        const filters = this.state.filters;\r\n\r\n        filters.forEach((filter: IFilter) => {\r\n          if (filter !== filterResource) {\r\n            filter.isSelected = false;\r\n          } else {\r\n            filter.isSelected = true;\r\n          }\r\n        });\r\n\r\n        this.setState({ filters: filters });\r\n      }\r\n    }\r\n  }\r\n);\r\n","import * as React from 'react';\r\nimport { injectIntlWithObserver, IRouterWithIntl } from '../../utils';\r\nimport { GlobalSearchResultPage } from './GlobalSearchResultPage/GlobalSearchResultPage';\r\n\r\nexport const GlobalSearchResultRouter = injectIntlWithObserver(\r\n  class extends React.Component<IRouterWithIntl> {\r\n    public render(): JSX.Element {\r\n      return <GlobalSearchResultPage {...this.props} />;\r\n    }\r\n  }\r\n);\r\n","import { defineMessages } from 'react-intl';\r\n\r\nexport default defineMessages({\r\n  productName: {\r\n    id: 'aboutUs.productName',\r\n    defaultMessage: '{appName}',\r\n  },\r\n  pubCenterNewBrand: {\r\n    id: 'aboutUs.pubCenterNewBrand',\r\n    defaultMessage: 'Microsoft Monetize Now',\r\n  },\r\n  slogan: {\r\n    id: 'aboutUs.slogan',\r\n    defaultMessage: 'Earn more money from your site with Microsoft',\r\n  },\r\n  incentive: {\r\n    id: 'aboutUs.incentive',\r\n    defaultMessage: 'Get more out of your site with high-quality, relevant ads.',\r\n  },\r\n  contactUs: {\r\n    id: 'aboutUs.contactUs',\r\n    defaultMessage: 'Contact us',\r\n  },\r\n  alreadyMember: {\r\n    id: 'aboutUs.alreadyMember',\r\n    defaultMessage: 'Already using {appName}?',\r\n  },\r\n  alreadyMemberNewBrand: {\r\n    id: 'aboutUs.alreadyMemberNewBrand',\r\n    defaultMessage: 'Already using Microsoft Monetize Now?',\r\n  },\r\n  emailAddressLabel: {\r\n    id: 'aboutUs.emailAddressLabel',\r\n    defaultMessage: 'Enter your email address to sign in:',\r\n  },\r\n  signIn: {\r\n    id: 'aboutUs.signIn',\r\n    defaultMessage: 'Sign In',\r\n  },\r\n  signUp: {\r\n    id: 'aboutUs.signUp',\r\n    defaultMessage: 'Sign Up',\r\n  },\r\n  usersToBeQuestion: {\r\n    id: 'aboutUs.usersToBeQuestion',\r\n    defaultMessage: 'Who should get started?',\r\n  },\r\n  usersToBeQuirkOne: {\r\n    id: 'aboutUs.usersToBeQuirkOne',\r\n    defaultMessage: 'Any small publisher or blog looking to build their audience and make it profitable through native ads.',\r\n  },\r\n  usersToBeQuirkTwo: {\r\n    id: 'aboutUs.usersToBeQuirkTwo',\r\n    defaultMessage: 'Sites focused on travel, entertainment, sports, food, finance, auto, community, news, telecom, and others.',\r\n  },\r\n  usersToBeQuirkThree: {\r\n    id: 'aboutUs.usersToBeQuirkThree',\r\n    defaultMessage: 'Publishers with up to 5M page views per month.',\r\n  },\r\n  moneyLabel: {\r\n    id: 'aboutUs.moneyLabel',\r\n    defaultMessage: 'Earn more money',\r\n  },\r\n  moneyDesc: {\r\n    id: 'aboutUs.moneyDesc',\r\n    defaultMessage: 'Serve ads that drive higher engagement and more revenue for you.',\r\n  },\r\n  adsLabel: {\r\n    id: 'aboutUs.adsLabel',\r\n    defaultMessage: 'Show beautiful ads',\r\n  },\r\n  adsDesc: {\r\n    id: 'aboutUs.adsDesc',\r\n    defaultMessage: 'Engage your audience with impactful images that blend naturally with your site experience.',\r\n  },\r\n  timeLabel: {\r\n    id: 'aboutUs.timeLabel',\r\n    defaultMessage: 'Save time',\r\n  },\r\n  timeDesc: {\r\n    id: 'aboutUs.timeDesc',\r\n    defaultMessage: 'Leverage the simple set up and management, so you can focus on what you do best.',\r\n  },\r\n  advantageOneHeader: {\r\n    id: 'aboutUs.advantageOneHeader',\r\n    defaultMessage: 'We make earning money easier, so you can focus on creating great content.',\r\n  },\r\n  advantageOneDescOne: {\r\n    id: 'aboutUs.advantageOneDescOne',\r\n    defaultMessage: 'Deliver ads that match the look and feel of your site and appeal to your audience.',\r\n  },\r\n  advantageOneDescTwo: {\r\n    id: 'aboutUs.advantageOneDescTwo',\r\n    defaultMessage: 'Get the flexibility to control where ads show on the page and block content that doesn’t resonate with your audience.',\r\n  },\r\n  advantageTwoHeader: {\r\n    id: 'aboutUs.advantageTwoHeader',\r\n    defaultMessage: 'Grow with your audience',\r\n  },\r\n  advantageTwoDescOne: {\r\n    id: 'aboutUs.advantageTwoDescOne',\r\n    defaultMessage: 'The more you attract an engaged audience, the more you monetize.',\r\n  },\r\n  advantageTwoDescTwo: {\r\n    id: 'aboutUs.advantageTwoDescTwo',\r\n    defaultMessage: 'And the more you monetize, the more you can invest in growing your audience.',\r\n  },\r\n  startingHeader: {\r\n    id: 'aboutUs.startingHeader',\r\n    defaultMessage: 'Get started easily',\r\n  },\r\n  startingDesc: {\r\n    id: 'aboutUs.startingDesc',\r\n    defaultMessage: 'Start earning with minimal effort on your side.',\r\n  },\r\n  stepOneHeader: {\r\n    id: 'aboutUs.stepOneHeader',\r\n    defaultMessage: 'Get access',\r\n  },\r\n  stepOneDesc: {\r\n    id: 'aboutUs.stepOneHeader',\r\n    defaultMessage: 'Access your account via a custom link (at no cost).',\r\n  },\r\n  stepTwoHeader: {\r\n    id: 'aboutUs.stepTwoHeader',\r\n    defaultMessage: 'Set up your ads',\r\n  },\r\n  stepTwoDesc: {\r\n    id: 'aboutUs.stepTwoDesc',\r\n    defaultMessage: 'Browse our templates and use them to create your ads.',\r\n  },\r\n  stepThreeHeader: {\r\n    id: 'aboutUs.stepThreeHeader',\r\n    defaultMessage: 'Connect your site',\r\n  },\r\n  stepThreeDesc: {\r\n    id: 'aboutUs.stepThreeDesc',\r\n    defaultMessage: `Place one line of code on your page. It's easy and we’ll show you how to do it.`,\r\n  },\r\n  monetizationHeader: {\r\n    id: 'aboutUs.monetizationHeader',\r\n    defaultMessage: `Start monetizing`,\r\n  },\r\n  monetizationDesc: {\r\n    id: 'aboutUs.monetizationDesc',\r\n    defaultMessage: `We’re looking for businesses like yours to help you earn more in fewer steps.`,\r\n  },\r\n  imgBackgroundAlt: {\r\n    id: 'aboutUs.imgBackgroundAlt',\r\n    defaultMessage: 'Background image in about us page sign in section',\r\n  },\r\n  imgMoneyBagAlt: {\r\n    id: 'aboutUs.imgMoneyBagAlt',\r\n    defaultMessage: 'Money bag icon',\r\n  },\r\n  imgAdsAlt: {\r\n    id: 'aboutUs.imgAdsAlt',\r\n    defaultMessage: 'Ads icon',\r\n  },\r\n  imgTimeAlt: {\r\n    id: 'aboutUs.imgTimeAlt',\r\n    defaultMessage: 'Clock icon',\r\n  },\r\n  imgPrimaryOnboardAlt: {\r\n    id: 'aboutUs.imgPrimaryOnboardAlt',\r\n    defaultMessage: 'Example with no image fit value and only width is specified.',\r\n  },\r\n  imgSecondaryOnboardAltOne: {\r\n    id: 'aboutUs.imgSecondaryOnboardAltOne',\r\n    defaultMessage: 'Example with image fit value of 1.',\r\n  },\r\n  imgSecondaryOnboardAltTwo: {\r\n    id: 'aboutUs.imgSecondaryOnboardAltTwo',\r\n    defaultMessage: 'Example with image fit value of 2.',\r\n  },\r\n  imgSecondaryOnboardAltThree: {\r\n    id: 'aboutUs.imgSecondaryOnboardAltThree',\r\n    defaultMessage: 'Example with image fit value of 3.',\r\n  },\r\n  emailInputPlaceholder: {\r\n    id: 'aboutUs.emailInputPlaceholder',\r\n    defaultMessage: 'Enter your email address',\r\n  },\r\n});\r\n","import { FontWeights, getTheme, mergeStyleSets } from '@fluentui/react';\r\nimport { IPubCenterFonts, IPubcenterPalette, IPubcenterSpacing } from '../../../theme';\r\nimport { ICommonStyleProps } from '../../types';\r\nimport aboutUsBG from './resources/About-us-background-image.jpg';\r\n\r\ntype StyleProperties =\r\n  | 'introductionContainer'\r\n  | 'imageContainer'\r\n  | 'signInContainer'\r\n  | 'header'\r\n  | 'smaller'\r\n  | 'font18'\r\n  | 'font16'\r\n  | 'font14'\r\n  | 'bodyContainer'\r\n  | 'imageWithTextOnLeft'\r\n  | 'imageWithTextOnRight'\r\n  | 'iconsContainer'\r\n  | 'iconContainer'\r\n  | 'stepsContainer'\r\n  | 'textFieldTitle'\r\n  | 'textFieldGroup'\r\n  | 'centerTextAlign'\r\n  | 'iconsContainerPrimary'\r\n  | 'monetizationContainer';\r\n\r\nexport type AboutUsPageStyles = Record<StyleProperties, string>;\r\n\r\nexport const getStyles = (props: ICommonStyleProps): AboutUsPageStyles => {\r\n  const { theme } = props;\r\n  const fonts = theme.fonts as IPubCenterFonts;\r\n  const palette = theme.palette as IPubcenterPalette;\r\n  const space = theme.spacing as IPubcenterSpacing;\r\n\r\n  const imageWithTextGrid = {\r\n    display: 'grid',\r\n    padding: '40px 0',\r\n    gap: '30px',\r\n    alignItems: 'center',\r\n    '@media(max-width: 1050px)': {\r\n      gridTemplateColumns: '1fr 1fr',\r\n    },\r\n    '@media(max-width: 850px)': {\r\n      display: 'block',\r\n    },\r\n  };\r\n\r\n  return mergeStyleSets({\r\n    introductionContainer: {\r\n      display: 'grid',\r\n      gridTemplateColumns: '2fr 1fr',\r\n      color: palette.white,\r\n      '@media(max-width: 1000px)': {\r\n        gridTemplateColumns: '1fr 1fr',\r\n      },\r\n      '@media(max-width: 850px)': {\r\n        display: 'block',\r\n      },\r\n    },\r\n    textFieldTitle: {\r\n      color: palette.white,\r\n    },\r\n    textFieldGroup: {\r\n      height: space.size50,\r\n    },\r\n    centerTextAlign: {\r\n      textAlign: 'center',\r\n    },\r\n    imageContainer: {\r\n      position: 'relative',\r\n      background: `url(${aboutUsBG}), rgba(0,0,0,0.5)`,\r\n      backgroundPosition: 'center',\r\n      backgroundSize: 'cover',\r\n      backgroundBlendMode: 'multiply',\r\n      backgroundRepeat: 'no-repeat',\r\n      boxSizing: 'border-box',\r\n      padding: '50px',\r\n    },\r\n    signInContainer: {\r\n      background: '#10152E',\r\n      boxSizing: 'border-box',\r\n      padding: '50px',\r\n      '> button': {\r\n        float: 'right',\r\n        marginTop: space.size6,\r\n      },\r\n    },\r\n    bodyContainer: {\r\n      margin: '0 auto',\r\n      padding: '0 20px',\r\n      '@media(min-width: 1200px)': {\r\n        width: '1170px',\r\n      },\r\n    },\r\n    imageWithTextOnLeft: {\r\n      ...imageWithTextGrid,\r\n      gridTemplateColumns: '2fr 1fr',\r\n    },\r\n    imageWithTextOnRight: {\r\n      ...imageWithTextGrid,\r\n      gridTemplateColumns: '1fr 2fr',\r\n    },\r\n    iconsContainer: {\r\n      display: 'grid',\r\n      gridTemplateColumns: '1fr 1fr 1fr',\r\n      gap: '25px',\r\n      alignItems: 'baseline',\r\n      textAlign: 'center',\r\n      '@media(max-width: 850px)': {\r\n        gridTemplateColumns: '1fr',\r\n      },\r\n    },\r\n    iconsContainerPrimary: {\r\n      padding: `${space.size40} 0`,\r\n    },\r\n    iconContainer: {\r\n      display: 'flex',\r\n      flexDirection: 'column',\r\n      alignItems: 'center',\r\n      textAlign: 'center',\r\n    },\r\n    stepsContainer: {\r\n      background: '#f2f2f2',\r\n      padding: '40px 0',\r\n    },\r\n    monetizationContainer: {\r\n      background: '#10152E',\r\n      padding: '40px 0',\r\n      color: 'white',\r\n    },\r\n    header: {\r\n      fontSize: 38,\r\n    },\r\n    smaller: {\r\n      ...fonts.size28,\r\n    },\r\n    font18: {\r\n      ...fonts.size18,\r\n      fontWeight: FontWeights.semibold,\r\n      marginTop: '10px',\r\n    },\r\n    font16: {\r\n      ...fonts.size16,\r\n    },\r\n    font14: {\r\n      ...fonts.size14,\r\n    },\r\n  });\r\n};\r\n\r\nexport function getClassNames<PropType>(props?: PropType): AboutUsPageStyles {\r\n  return getStyles({ theme: getTheme(), ...props });\r\n}\r\n","import { PrimaryButton, TextField } from '@fluentui/react';\r\nimport React, { useEffect, useLayoutEffect } from 'react';\r\n\r\nimport { Image } from '@fluentui/react';\r\nimport { LayoutMode, getAppStore, onLayoutChanged } from '../../@data';\r\nimport { DefaultRoute } from '../../Routes';\r\nimport { APP_NAME_NEW, APP_NAME_PUBCENTER, TYTHON_SUPPORT_EMAIL } from '../../constants/AppConstants';\r\nimport { Page } from '../../layout/PageLayout/PageLayout';\r\nimport { IRouterWithIntl, injectIntlWithObserver, isLocationPubCenter } from '../../utils';\r\nimport { getLoginPageStore, onEmailChanged, onLoginButtonClicked } from '../login/@data';\r\nimport messages from './AboutUsPage.messages';\r\nimport { getClassNames } from './AboutUsPage.styles';\r\nimport ads from './resources/ads.png';\r\nimport man from './resources/man.jpg';\r\nimport money from './resources/money.png';\r\nimport one from './resources/one.png';\r\nimport three from './resources/three.png';\r\nimport time from './resources/time.png';\r\nimport two from './resources/two.png';\r\nimport twoWomen from './resources/twoWomen.jpg';\r\nimport woman from './resources/woman.jpg';\r\n\r\nexport interface IAboutUsPageProps extends IRouterWithIntl {}\r\n\r\nexport const AboutUsPage = injectIntlWithObserver(function AboutUsPageComponent(props: IAboutUsPageProps) {\r\n  const { formatMessage } = props.intl;\r\n  const {\r\n    errors,\r\n    active: { email },\r\n  } = getLoginPageStore();\r\n  const { userContext } = getAppStore();\r\n\r\n  const {\r\n    introductionContainer,\r\n    imageContainer,\r\n    signInContainer,\r\n    bodyContainer,\r\n    imageWithTextOnLeft,\r\n    imageWithTextOnRight,\r\n    iconsContainer,\r\n    iconContainer,\r\n    stepsContainer,\r\n    monetizationContainer,\r\n    textFieldTitle,\r\n    textFieldGroup,\r\n    centerTextAlign,\r\n    iconsContainerPrimary,\r\n    header,\r\n    smaller,\r\n    font18,\r\n    font16,\r\n    font14,\r\n  } = getClassNames();\r\n\r\n  useEffect(() => {\r\n    onLayoutChanged(LayoutMode.Default);\r\n  }, []);\r\n\r\n  useLayoutEffect(() => {\r\n    if (userContext && userContext.token) {\r\n      props.history.push(`${DefaultRoute}`);\r\n    }\r\n    // eslint-disable-next-line react-hooks/exhaustive-deps\r\n  }, [userContext]);\r\n\r\n  const handleSignInClick = () => {\r\n    onLoginButtonClicked();\r\n  };\r\n\r\n  // Removing signup button to prevent new user signup\r\n  /*\r\n    const handleSignUpClick = () => {\r\n      AADLogin(true);\r\n    };\r\n\r\n    const AADLogin = (shouldSetSessionFlag = false) => {\r\n      if (shouldSetSessionFlag) {\r\n        localStorage.setItem(USER_SIGNUP_KEY, 'true');\r\n      }\r\n      const requestParams: Partial<RedirectRequest> = { redirectStartPage: aadConfig.auth.redirectUri };\r\n      onPubCenterAADLogin(requestParams);\r\n    };\r\n  */\r\n\r\n  return (\r\n    <Page {...props}>\r\n      <div className={introductionContainer}>\r\n        <div className={imageContainer}>\r\n          <p className={header}>\r\n            {formatMessage(messages.productName, { appName: isLocationPubCenter() ? APP_NAME_PUBCENTER : APP_NAME_NEW })}\r\n          </p>\r\n          <span className={header}>{formatMessage(messages.slogan)}</span>\r\n          <p>{formatMessage(messages.incentive)}</p>\r\n          <br />\r\n          <br />\r\n          <PrimaryButton\r\n            text={formatMessage(messages.contactUs)}\r\n            href={`mailto:${TYTHON_SUPPORT_EMAIL}`}\r\n            target=\"_blank\"\r\n            rel=\"noopener noreferrer\"\r\n          />\r\n        </div>\r\n        <div className={signInContainer}>\r\n          <p className={header}>\r\n            {formatMessage(messages.alreadyMember, { appName: isLocationPubCenter() ? APP_NAME_PUBCENTER : APP_NAME_NEW })}\r\n          </p>\r\n          <TextField\r\n            label={formatMessage(messages.emailAddressLabel)}\r\n            styles={{ subComponentStyles: { label: { root: textFieldTitle } }, fieldGroup: textFieldGroup }}\r\n            placeholder={formatMessage(messages.emailInputPlaceholder)}\r\n            onChange={(_, val) => onEmailChanged(val || '')}\r\n            errorMessage={errors.email}\r\n            value={email}\r\n            type=\"email\"\r\n            onKeyDown={(ev) => ev.key === 'Enter' && handleSignInClick()}\r\n          />\r\n          <PrimaryButton onClick={handleSignInClick} text={formatMessage(messages.signIn)} />\r\n        </div>\r\n      </div>\r\n      <div className={bodyContainer}>\r\n        <div className={imageWithTextOnLeft}>\r\n          <Image imageFit={1} src={woman} alt={formatMessage(messages.imgBackgroundAlt)} loading=\"lazy\" />\r\n          <div>\r\n            <p className={smaller}>{formatMessage(messages.usersToBeQuestion)}</p>\r\n            <ul>\r\n              <li className={font16}>{formatMessage(messages.usersToBeQuirkOne)}</li>\r\n              <li className={font16}>{formatMessage(messages.usersToBeQuirkTwo)}</li>\r\n              <li className={font16}>{formatMessage(messages.usersToBeQuirkThree)}</li>\r\n            </ul>\r\n          </div>\r\n        </div>\r\n        <div className={`${iconsContainer} ${iconsContainerPrimary}`}>\r\n          <div className={iconContainer}>\r\n            <Image src={money} alt={formatMessage(messages.imgMoneyBagAlt)} loading=\"lazy\" />\r\n            <span className={font18}>{formatMessage(messages.moneyLabel)}</span>\r\n            <span className={font14}>{formatMessage(messages.moneyDesc)}</span>\r\n          </div>\r\n          <div className={iconContainer}>\r\n            <Image src={ads} alt={formatMessage(messages.imgAdsAlt)} loading=\"lazy\" />\r\n            <span className={font18}>{formatMessage(messages.adsLabel)}</span>\r\n            <span className={font14}>{formatMessage(messages.adsDesc)}</span>\r\n          </div>\r\n          <div className={iconContainer}>\r\n            <Image src={time} alt={formatMessage(messages.imgTimeAlt)} loading=\"lazy\" />\r\n            <span className={font18}>{formatMessage(messages.timeLabel)}</span>\r\n            <span className={font14}>{formatMessage(messages.timeDesc)}</span>\r\n          </div>\r\n        </div>\r\n        <div className={imageWithTextOnRight}>\r\n          <div>\r\n            <p className={smaller}>{formatMessage(messages.advantageOneHeader)}</p>\r\n            <p className={font16}>{formatMessage(messages.advantageOneDescOne)}</p>\r\n            <p className={font16}>{formatMessage(messages.advantageOneDescTwo)}</p>\r\n          </div>\r\n          <Image imageFit={1} src={man} alt={formatMessage(messages.imgPrimaryOnboardAlt)} loading=\"lazy\" />\r\n        </div>\r\n        <div className={imageWithTextOnLeft}>\r\n          <Image imageFit={1} src={twoWomen} alt={formatMessage(messages.imgPrimaryOnboardAlt)} loading=\"lazy\" />\r\n          <div>\r\n            <p className={smaller}>{formatMessage(messages.advantageTwoHeader)}</p>\r\n            <p className={font16}>{formatMessage(messages.advantageTwoDescOne)}</p>\r\n            <p className={font16}>{formatMessage(messages.advantageTwoDescTwo)}</p>\r\n          </div>\r\n        </div>\r\n      </div>\r\n      <div className={stepsContainer}>\r\n        <div className={centerTextAlign}>\r\n          <span className={smaller}>{formatMessage(messages.startingHeader)}</span>\r\n          <p>{formatMessage(messages.startingDesc)}</p>\r\n        </div>\r\n        <div className={`${bodyContainer} ${iconsContainer}`}>\r\n          <div className={iconContainer}>\r\n            <Image src={one} alt={formatMessage(messages.imgSecondaryOnboardAltOne)} loading=\"lazy\" />\r\n            <span className={font18}>{formatMessage(messages.stepOneHeader)}</span>\r\n            <span className={font14}>{formatMessage(messages.stepOneDesc)}</span>\r\n          </div>\r\n          <div className={iconContainer}>\r\n            <Image src={two} alt={formatMessage(messages.imgSecondaryOnboardAltTwo)} loading=\"lazy\" />\r\n            <span className={font18}>{formatMessage(messages.stepTwoHeader)}</span>\r\n            <span className={font14}>{formatMessage(messages.stepTwoDesc)}</span>\r\n          </div>\r\n          <div className={iconContainer}>\r\n            <Image src={three} alt={formatMessage(messages.imgSecondaryOnboardAltThree)} loading=\"lazy\" />\r\n            <span className={font18}>{formatMessage(messages.stepThreeHeader)}</span>\r\n            <span className={font14}>{formatMessage(messages.stepThreeDesc)}</span>\r\n          </div>\r\n        </div>\r\n      </div>\r\n      <div className={monetizationContainer}>\r\n        <div className={centerTextAlign}>\r\n          <p className={smaller}>{formatMessage(messages.monetizationHeader)}</p>\r\n          <p className={font16}>{formatMessage(messages.monetizationDesc)}</p>\r\n          {/*\r\n          <PrimaryButton text={formatMessage(messages.signUp)} target=\"_blank\" rel=\"noopener noreferrer\" onClick={handleSignUpClick} />\r\n          */}\r\n        </div>\r\n      </div>\r\n    </Page>\r\n  );\r\n});\r\n","import { defineMessages } from 'react-intl';\r\n\r\nexport default defineMessages({\r\n  inventoryCreationTitle: {\r\n    id: 'app.layout.EntityCreationLayout.inventoryCreationTitle',\r\n    defaultMessage: 'Connect your inventory',\r\n  },\r\n  inventoryCreationContentSectionOne: {\r\n    id: 'app.layout.EntityCreationLayout.inventoryCreationContentSectionOne',\r\n    defaultMessage:\r\n      'To start monetizing with Microsoft pubCenter, we need you to connect your Site or your Application. Which type of Inventory setup you would like? {helpLinkPlaceholder}',\r\n  },\r\n  inventoryCreationContentSectionOneLink: {\r\n    id: 'app.layout.EntityCreationLayout.inventoryCreationContentSectionOneLink',\r\n    defaultMessage: 'Learn more about our supported platforms.',\r\n  },\r\n  inventoryCreationContentSectionTwo: {\r\n    id: 'app.layout.EntityCreationLayout.inventoryCreationContentSectionTwo',\r\n    defaultMessage:\r\n      'We strongly suggest that you review our {helpLinkPlaceholder}. Sites and apps that do not meet these guidelines will be rejected and won’t be able to serve ads.',\r\n  },\r\n  inventoryCreationContentSectionTwoLink: {\r\n    id: 'app.layout.EntityCreationLayout.inventoryCreationContentSectionTwoLink',\r\n    defaultMessage: 'inventory guidelines',\r\n  },\r\n  inventoryCreationCardTitleSite: {\r\n    id: 'app.layout.EntityCreationLayout.inventoryCreationCardTitleSite',\r\n    defaultMessage: 'Connect Site',\r\n  },\r\n  adsCreationCardTitleSite: {\r\n    id: 'app.layout.EntityCreationLayout.adsCreationCardTitleSite',\r\n    defaultMessage: 'Site ad unit',\r\n  },\r\n  adsCreationCardTitleApp: {\r\n    id: 'app.layout.EntityCreationLayout.adsCreationCardTitleApp',\r\n    defaultMessage: 'App ad unit',\r\n  },\r\n  inventoryCreationCardDescriptionSite: {\r\n    id: 'app.layout.EntityCreationLayout.inventoryCreationCardDescriptionSite',\r\n    defaultMessage:\r\n      'Connect your website to showcase ads. Each website is reviewed in accordance with our {MSPolicyPlaceholder} and {AdRenderingPoliciesPlaceholder}. To ensure your website passes our review, please follow our {SiteApprovalGuidelinesPlaceholder} before submitting your site for approval.',\r\n  },\r\n  inventoryCreationCardDescriptionApp: {\r\n    id: 'app.layout.EntityCreationLayout.inventoryCreationCardDescriptionApp',\r\n    defaultMessage:\r\n      'Connect your App to showcase ads. Each app will be reviewed in accordance with our {MSPolicyPlaceholder} and {AdRenderingPoliciesPlaceholder}. To ensure your app passes our review, please follow our {AppApprovalGuidelinesPlaceholder} before submitting your app for approval.',\r\n  },\r\n  inventoryCreationCardTitleApp: {\r\n    id: 'app.layout.EntityCreationLayout.inventoryCreationCardTitleApp',\r\n    defaultMessage: 'Connect App',\r\n  },\r\n  MSPolicyPlaceholder: {\r\n    id: 'app.layout.EntityCreationLayout.MSPolicyPlaceholder',\r\n    defaultMessage: 'Microsoft policies',\r\n  },\r\n  AdRenderingPoliciesPlaceholder: {\r\n    id: 'app.layout.EntityCreationLayout.AdRenderingPoliciesPlaceholder',\r\n    defaultMessage: 'Ad rendering policies',\r\n  },\r\n  SiteApprovalGuidelinesPlaceholder: {\r\n    id: 'app.layout.EntityCreationLayout.SiteApprovalGuidelinesPlaceholder',\r\n    defaultMessage: 'site approval guidelines',\r\n  },\r\n  AppApprovalGuidelinesPlaceholder: {\r\n    id: 'app.layout.EntityCreationLayout.AppApprovalGuidelinesPlaceholder',\r\n    defaultMessage: 'app approval guidelines',\r\n  },\r\n  adsCreationTitle: {\r\n    id: 'app.layout.EntityCreationLayout.adsCreationTitle',\r\n    defaultMessage: 'What type of ad unit do you want to create?',\r\n  },\r\n  adsCreationContentSectionOne: {\r\n    id: 'app.layout.EntityCreationLayout.adsCreationContentSectionOne',\r\n    defaultMessage: 'Ad units allow you to control where and when ads show across your inventory. Each ad unit must be connected to an existing piece of inventory.',\r\n  },\r\n\r\n});\r\n","import { makeStyles, tokens } from '@fluentui/react-components';\r\n\r\nexport const useStyles = makeStyles({\r\n  root: {\r\n    marginLeft: '-3rem',\r\n  },\r\n  title: {\r\n    marginTop: '2rem',\r\n  },\r\n  contentSection: {\r\n    width: '50rem',\r\n    marginLeft: 'calc(50% - 25rem)',\r\n    color: tokens.colorNeutralForeground3,\r\n  },\r\n  imgWrapper: {\r\n    width: '8rem',\r\n  },\r\n  cardGroupWrapper: {\r\n    width: '50rem',\r\n    display: 'flex',\r\n    justifyContent: 'space-between',\r\n    marginLeft: 'calc(50% - 25rem)',\r\n  },\r\n  cardWrapper: {\r\n    width: 'calc(50% - 0.75rem)',\r\n  },\r\n  card: {\r\n    display: 'flex',\r\n    alignItems: 'center',\r\n    height: '18.75rem',\r\n  },\r\n  cardSelected: {\r\n    backgroundColor: tokens.colorNeutralBackground2Selected,\r\n  },\r\n  cardTitle: {\r\n    color: tokens.colorNeutralForeground1,\r\n  },\r\n  cardDescription: {\r\n    color: tokens.colorNeutralForeground3,\r\n  },\r\n});\r\n","import { Body1, Body2, Card, FluentProvider, Title2, Title3, webLightTheme } from '@fluentui/react-components';\r\nimport React from 'react';\r\nimport { FormattedMessage, InjectedIntlProps } from 'react-intl';\r\nimport { RouteComponentProps } from 'react-router-dom';\r\nimport { FormState } from '../../components/Form/FormState/FormState';\r\nimport { injectRouterWithIntl } from '../../utils/ReactUtils';\r\nimport {\r\n  getTythonAdUnitCreatePageRoute,\r\n  getTythonAppAdunitCreationRoute,\r\n  getTythonAppInventoryCreationRoute,\r\n  getTythonSiteCreatePageRoute,\r\n} from '../../utils/routeUtils';\r\nimport { DetailPage } from '../DetailPage/DetailPage';\r\nimport { Footer } from '../Footer/Footer';\r\nimport ConnectAppImg from './connectApp.svg';\r\nimport ConnectSiteImg from './connectSite.svg';\r\nimport messages from './messages';\r\nimport { useStyles } from './styles';\r\n\r\nexport enum EntityTypeCreationType {\r\n  Inventory = 'inventory',\r\n  Ads = 'ads',\r\n}\r\n\r\nexport enum InventoryType {\r\n  Site = 'site',\r\n  App = 'app',\r\n}\r\n\r\ntype EntityCreationLayoutProps = {\r\n  entityType: EntityTypeCreationType;\r\n};\r\n\r\ntype EntityCreationLayoutType = React.FC<EntityCreationLayoutProps & InjectedIntlProps & RouteComponentProps>;\r\n\r\nconst useEntityCreationLayout = ({ entityType, history }) => {\r\n  const [selectedInventoryType, setSelectedInventoryType] = React.useState<InventoryType | undefined>(undefined);\r\n\r\n  const entityCreationUrl = {\r\n    [EntityTypeCreationType.Inventory]: {\r\n      [InventoryType.Site]: getTythonSiteCreatePageRoute(),\r\n      [InventoryType.App]: getTythonAppInventoryCreationRoute(),\r\n    },\r\n    [EntityTypeCreationType.Ads]: {\r\n      [InventoryType.Site]: getTythonAdUnitCreatePageRoute(),\r\n      [InventoryType.App]: getTythonAppAdunitCreationRoute(),\r\n    },\r\n  };\r\n\r\n  const detailPageProps = React.useMemo(() => {\r\n    return {\r\n      saving: false,\r\n      loading: false,\r\n      onSubmit: () => history.push(entityCreationUrl[entityType][selectedInventoryType!]),\r\n      submitButtonDisabled: !selectedInventoryType,\r\n      submitLabel: 'Next',\r\n      hasFormTitle: false,\r\n      hideNavButton: false,\r\n      pageMode: FormState.Edit,\r\n    };\r\n    // eslint-disable-next-line react-hooks/exhaustive-deps\r\n  }, [selectedInventoryType, entityType]);\r\n\r\n  return {\r\n    detailPageProps,\r\n    selectedInventoryType,\r\n    setSelectedInventoryType,\r\n  };\r\n};\r\n\r\nconst EntityCreationLayout: EntityCreationLayoutType = ({ entityType, intl: { formatMessage }, history }) => {\r\n  // TODO: enable help article when content is ready\r\n  // const { CMUIPopupArticleByIdAnchor } = useCMUIHelpExperience();\r\n  const styles = useStyles();\r\n  const { detailPageProps, selectedInventoryType, setSelectedInventoryType } = useEntityCreationLayout({ entityType, history });\r\n\r\n  const EntityCreationLayoutTitle = {\r\n    [EntityTypeCreationType.Inventory]: formatMessage(messages.inventoryCreationTitle),\r\n    [EntityTypeCreationType.Ads]: formatMessage(messages.adsCreationTitle),\r\n  };\r\n\r\n  const EntityCreationLayoutContentSectionOne = {\r\n    [EntityTypeCreationType.Inventory]: (\r\n      <Body2 block className={styles.contentSection}>\r\n        <FormattedMessage\r\n          {...messages.inventoryCreationContentSectionOne}\r\n          values={{\r\n            helpLinkPlaceholder: formatMessage(messages.inventoryCreationContentSectionOneLink),\r\n            // helpLinkPlaceholder: (\r\n            //   <CMUIPopupArticleByIdAnchor\r\n            //     useV2Link\r\n            //     query=\"ext07504\"\r\n            //     name={formatMessage(messages.inventoryCreationContentSectionOneLink)}\r\n            //   />\r\n            // ),\r\n          }}\r\n        />\r\n      </Body2>\r\n    ),\r\n    [EntityTypeCreationType.Ads]: (\r\n      <Body2 block className={styles.contentSection}>\r\n        {formatMessage(messages.adsCreationContentSectionOne)}\r\n      </Body2>\r\n    ),\r\n  };\r\n\r\n  const EntityCreationLayoutContentSectionTwo = {\r\n    [EntityTypeCreationType.Inventory]: (\r\n      <Body2 block className={styles.contentSection}>\r\n        <FormattedMessage\r\n          {...messages.inventoryCreationContentSectionTwo}\r\n          values={{\r\n            helpLinkPlaceholder: formatMessage(messages.inventoryCreationContentSectionTwoLink),\r\n            // helpLinkPlaceholder: (\r\n            //   <CMUIPopupArticleByIdAnchor\r\n            //     useV2Link\r\n            //     query=\"ext07504\"\r\n            //     name={formatMessage(messages.inventoryCreationContentSectionTwoLink)}\r\n            //   />\r\n            // ),\r\n          }}\r\n        />\r\n      </Body2>\r\n    ),\r\n  };\r\n  const EntityCreationLayoutSelectableCards = {\r\n    [EntityTypeCreationType.Ads]: [\r\n      {\r\n        inventoryType: InventoryType.Site,\r\n        cardIcon: <img className={styles.imgWrapper} src={ConnectSiteImg} alt={formatMessage(messages.adsCreationCardTitleSite)} />,\r\n        cardTitle: (\r\n          <Title3 block className={styles.cardTitle}>\r\n            {formatMessage(messages.adsCreationCardTitleSite)}\r\n          </Title3>\r\n        ),\r\n      },\r\n      {\r\n        inventoryType: InventoryType.App,\r\n        cardIcon: <img className={styles.imgWrapper} src={ConnectAppImg} alt={formatMessage(messages.adsCreationCardTitleApp)} />,\r\n        cardTitle: (\r\n          <Title3 block className={styles.cardTitle}>\r\n            {formatMessage(messages.adsCreationCardTitleApp)}\r\n          </Title3>\r\n        ),\r\n      },\r\n    ],\r\n    [EntityTypeCreationType.Inventory]: [\r\n      {\r\n        inventoryType: InventoryType.Site,\r\n        cardIcon: <img className={styles.imgWrapper} src={ConnectSiteImg} alt={formatMessage(messages.inventoryCreationCardTitleSite)} />,\r\n        cardTitle: (\r\n          <Title3 block className={styles.cardTitle}>\r\n            {formatMessage(messages.inventoryCreationCardTitleSite)}\r\n          </Title3>\r\n        ),\r\n        cardDescription: (\r\n          <Body1 block className={styles.cardDescription}>\r\n            <FormattedMessage\r\n              {...messages.inventoryCreationCardDescriptionSite}\r\n              values={{\r\n                MSPolicyPlaceholder: formatMessage(messages.MSPolicyPlaceholder),\r\n                AdRenderingPoliciesPlaceholder: formatMessage(messages.AdRenderingPoliciesPlaceholder),\r\n                SiteApprovalGuidelinesPlaceholder: formatMessage(messages.SiteApprovalGuidelinesPlaceholder),\r\n                /**\r\n                 * MSPolicyPlaceholder: (\r\n                  <CMUIPopupArticleByIdAnchor useV2Link query=\"ext07504\" name={formatMessage(messages.MSPolicyPlaceholder)} />\r\n                ),\r\n                AdRenderingPoliciesPlaceholder: (\r\n                  <CMUIPopupArticleByIdAnchor useV2Link query=\"ext07504\" name={formatMessage(messages.AdRenderingPoliciesPlaceholder)} />\r\n                ),\r\n                SiteApprovalGuidelinesPlaceholder: (\r\n                  <CMUIPopupArticleByIdAnchor useV2Link query=\"ext07504\" name={formatMessage(messages.SiteApprovalGuidelinesPlaceholder)} />\r\n                ),\r\n                 */\r\n              }}\r\n            />\r\n          </Body1>\r\n        ),\r\n      },\r\n      {\r\n        inventoryType: InventoryType.App,\r\n        cardIcon: <img className={styles.imgWrapper} src={ConnectAppImg} alt={formatMessage(messages.inventoryCreationCardTitleApp)} />,\r\n        cardTitle: (\r\n          <Title3 block className={styles.cardTitle}>\r\n            {formatMessage(messages.inventoryCreationCardTitleApp)}\r\n          </Title3>\r\n        ),\r\n        cardDescription: (\r\n          <Body1 block className={styles.cardDescription}>\r\n            <FormattedMessage\r\n              {...messages.inventoryCreationCardDescriptionApp}\r\n              values={{\r\n                MSPolicyPlaceholder: formatMessage(messages.MSPolicyPlaceholder),\r\n                AdRenderingPoliciesPlaceholder: formatMessage(messages.AdRenderingPoliciesPlaceholder),\r\n                AppApprovalGuidelinesPlaceholder: formatMessage(messages.AppApprovalGuidelinesPlaceholder),\r\n                /**\r\n                 *  MSPolicyPlaceholder: (\r\n                  <CMUIPopupArticleByIdAnchor useV2Link query=\"ext07504\" name={formatMessage(messages.MSPolicyPlaceholder)} />\r\n                ),\r\n                AdRenderingPoliciesPlaceholder: (\r\n                  <CMUIPopupArticleByIdAnchor useV2Link query=\"ext07504\" name={formatMessage(messages.AdRenderingPoliciesPlaceholder)} />\r\n                ),\r\n                AppApprovalGuidelinesPlaceholder: (\r\n                  <CMUIPopupArticleByIdAnchor useV2Link query=\"ext07504\" name={formatMessage(messages.AppApprovalGuidelinesPlaceholder)} />\r\n                ),\r\n                 */\r\n              }}\r\n            />\r\n          </Body1>\r\n        ),\r\n      },\r\n    ],\r\n  };\r\n\r\n  return (\r\n    <>\r\n      {' '}\r\n      <DetailPage {...detailPageProps}>\r\n        <FluentProvider theme={webLightTheme}>\r\n          <div className={styles.root}>\r\n            <Title2 align=\"center\" block className={styles.title}>\r\n              {EntityCreationLayoutTitle[entityType]}\r\n            </Title2>\r\n            <br />\r\n            {EntityCreationLayoutContentSectionOne[entityType]}\r\n            <br />\r\n            {EntityCreationLayoutContentSectionTwo[entityType]}\r\n            <br />\r\n            <br />\r\n            <div className={styles.cardGroupWrapper}>\r\n              {EntityCreationLayoutSelectableCards[entityType].map((card) => (\r\n                <div className={styles.cardWrapper}>\r\n                  <Card\r\n                    className={styles.card}\r\n                    selected={card.inventoryType === selectedInventoryType}\r\n                    onSelectionChange={() => setSelectedInventoryType(card.inventoryType)}\r\n                  >\r\n                    {card.cardIcon}\r\n                    {card.cardTitle}\r\n                  </Card>\r\n                  <br />\r\n                  {card.cardDescription}\r\n                </div>\r\n              ))}\r\n            </div>\r\n          </div>\r\n        </FluentProvider>\r\n      </DetailPage>\r\n      <Footer />\r\n    </>\r\n  );\r\n};\r\n\r\nexport default injectRouterWithIntl(EntityCreationLayout);\r\n","import React from 'react';\r\nimport EntityCreationLayout, { EntityTypeCreationType } from '../../../../layout/EntityCreationLayout';\r\n\r\nconst AdTypePage = () => {\r\n  // TODO: enhance injectRouterWithIntl type to work with functional components\r\n  // @ts-ignore\r\n  return <EntityCreationLayout entityType={EntityTypeCreationType.Ads} />;\r\n};\r\n\r\nexport default AdTypePage;\r\n","import React from 'react';\r\nimport EntityCreationLayout, { EntityTypeCreationType } from '../../../../layout/EntityCreationLayout';\r\n\r\nconst InventoryTypePage = () => {\r\n  // TODO: enhance injectRouterWithIntl type to work with functional components\r\n  // @ts-ignore\r\n  return <EntityCreationLayout entityType={EntityTypeCreationType.Inventory} />;\r\n};\r\n\r\nexport default InventoryTypePage;\r\n","import { getTheme, mergeStyleSets } from '@fluentui/react';\r\nimport { BreakPoints, IPubCenterFonts, IPubcenterSpacing } from '../../../../theme';\r\n\r\nexport interface ILoginPageStyles {\r\n  root: string;\r\n  main: string;\r\n  title: string;\r\n  email: string;\r\n  button: string;\r\n}\r\n\r\nexport const getClassNames = (): ILoginPageStyles => {\r\n  const theme = getTheme();\r\n  const spacing = theme.spacing as IPubcenterSpacing;\r\n  const fonts = theme.fonts as IPubCenterFonts;\r\n  const { size16 } = fonts;\r\n\r\n  return mergeStyleSets({\r\n    root: {\r\n      display: 'flex',\r\n      flexDirection: 'column',\r\n      height: '100vh',\r\n    },\r\n    main: {\r\n      margin: 'auto',\r\n      display: 'flex',\r\n      flexDirection: 'column',\r\n      justifyContent: 'center',\r\n      width: spacing.size360,\r\n      gap: spacing.size12,\r\n      alignItems: 'center',\r\n      textAlign: 'center',\r\n      '@media(max-width: 360px)': {\r\n        width: '90%',\r\n      },\r\n    },\r\n    title: {\r\n      ...size16,\r\n      fontWeight: 600,\r\n    },\r\n    email: {\r\n      ...size16,\r\n      fontWeight: 'normal',\r\n    },\r\n    button: {\r\n      width: spacing.size320,\r\n      [BreakPoints.ResponsiveSmall]: {\r\n        width: '90%',\r\n      },\r\n    },\r\n  });\r\n};\r\n","import { DefaultButton, Image, PrimaryButton } from '@fluentui/react';\r\nimport React from 'react';\r\nimport { InjectedIntlProps } from 'react-intl';\r\nimport { RouteComponentProps } from 'react-router-dom';\r\nimport { Footer } from '../../../layout/Footer/Footer';\r\nimport UserNotFound from '../resources/UserNotFound.svg';\r\nimport { getClassNames } from './InvalidUser.styles';\r\n\r\nexport interface IInvalidUserErrorPageProps extends InjectedIntlProps, RouteComponentProps {\r\n  errorImageAltText?: string;\r\n  imageSrc?: string;\r\n  renderTitle?: () => JSX.Element;\r\n  title?: string;\r\n  email?: string;\r\n  titleSubText?: string;\r\n  children?: React.ReactNode;\r\n  primaryButtonLabel?: string;\r\n  defaultButtonLabel?: string;\r\n  onPrimaryButtonClick?: () => void;\r\n  onDefaultButtonClick?: () => void;\r\n}\r\n\r\nexport const InvalidUserErrorPage = function ErrorPageComponent(props: IInvalidUserErrorPageProps): JSX.Element {\r\n  const {\r\n    errorImageAltText,\r\n    imageSrc,\r\n    renderTitle,\r\n    title,\r\n    email,\r\n    titleSubText,\r\n    primaryButtonLabel,\r\n    defaultButtonLabel,\r\n    onPrimaryButtonClick,\r\n    onDefaultButtonClick,\r\n  } = props;\r\n  const { root, main, title: titleStyle, email: emailStyle, button: buttonStyle } = getClassNames();\r\n\r\n  return (\r\n    <div className={root}>\r\n      <div className={main}>\r\n        <Image src={imageSrc || UserNotFound} alt={errorImageAltText} />\r\n        {renderTitle ? (\r\n          renderTitle()\r\n        ) : (\r\n          <h1 className={titleStyle}>\r\n            {title}\r\n            <span className={emailStyle}>{email}</span>\r\n            <br />\r\n            {titleSubText}\r\n          </h1>\r\n        )}\r\n        {primaryButtonLabel && onPrimaryButtonClick && (\r\n          <PrimaryButton className={buttonStyle} text={primaryButtonLabel} onClick={onPrimaryButtonClick} />\r\n        )}\r\n        {defaultButtonLabel && onDefaultButtonClick && (\r\n          <DefaultButton className={buttonStyle} text={defaultButtonLabel} onClick={onDefaultButtonClick} />\r\n        )}\r\n        {props.children}\r\n      </div>\r\n      <Footer {...props} />\r\n    </div>\r\n  );\r\n};\r\n","export function _urlBase64Decode(str: string) {\r\n  let output = str.replace(/-/g, '+').replace(/_/g, '/');\r\n  switch (output.length % 4) {\r\n    case 0:\r\n      break;\r\n    case 2:\r\n      output += '==';\r\n      break;\r\n    case 3:\r\n      output += '=';\r\n      break;\r\n    default:\r\n      output = '';\r\n  }\r\n\r\n  return decodeURIComponent(escape(window.atob(output)));\r\n}\r\n\r\nexport function decodeToken(token: string = '') {\r\n  if (token === null || token === '') {\r\n    return { upn: '' };\r\n  }\r\n  const parts = token.split('.');\r\n  if (parts.length !== 3) {\r\n    throw new Error('JWT must have 3 parts');\r\n  }\r\n  const decoded = _urlBase64Decode(parts[1]);\r\n  if (!decoded) {\r\n    throw new Error('Cannot decode the token');\r\n  }\r\n  return JSON.parse(decoded);\r\n}\r\n","import { orchestrator } from 'satcheljs';\r\nimport { Log } from '../../../../../logging/src';\r\nimport { UserContext, getAppStore, onUserContextChanged } from '../../../../@data';\r\nimport { checkInternalUserAccess } from '../../../../@data/services/AuthorizationService';\r\nimport * as pubCenterAADAuthService from '../../../../@data/services/PubCenterAADAuthService';\r\nimport { setUserRoles } from '../../../../@data/services/UserRoleService';\r\nimport {\r\n  corpTenantId,\r\n  silentTokenRequest as pubSilentTokenRequest,\r\n  authTokenRequest as pubTokenRequest,\r\n} from '../../../../config/pubCenterAAD.config';\r\nimport { decodeToken } from '../../../../utils/JwtDecoderUtils';\r\nimport { onAuthPageInitialized, onLoadingSet } from '../actions';\r\n\r\norchestrator(onAuthPageInitialized, async ({ loginHint }) => {\r\n  const { userContext, isInviteUserFlow } = getAppStore();\r\n  if (userContext || window.location.hash || loginHint) {\r\n    onLoadingSet(true);\r\n    let authResponse = await pubCenterAADAuthService.handleLoginRedirectAsync();\r\n\r\n    // Need the second check because we need to make sure accessToken is for PubCenter endpoint\r\n    if (!authResponse || !authResponse.scopes.includes(pubSilentTokenRequest.scopes[0])) {\r\n      Log.write('No auth response from redirection, trying to acquire token silently');\r\n      authResponse = await pubCenterAADAuthService.acquireAuthResponseAsync(pubTokenRequest, loginHint);\r\n    }\r\n\r\n    if (authResponse && authResponse.scopes.includes(pubSilentTokenRequest.scopes[0])) {\r\n      const idToken = authResponse.idToken;\r\n      const userInfo = decodeToken(idToken);\r\n\r\n      // Set user context\r\n      const newUserContext = new UserContext();\r\n      newUserContext.userName = authResponse.account ? authResponse.account.username : undefined;\r\n      newUserContext.email = userInfo.email ?? userInfo.preferred_username;\r\n      newUserContext.token = authResponse.accessToken;\r\n      newUserContext.name = userInfo.name;\r\n      newUserContext.firstName = userInfo.given_name;\r\n      newUserContext.lastName = userInfo.family_name;\r\n\r\n      onUserContextChanged(newUserContext);\r\n\r\n      if (!(userInfo.tid !== corpTenantId && isInviteUserFlow)) {\r\n        await setUserRoles(newUserContext);\r\n        checkInternalUserAccess(newUserContext.userRoles);\r\n      } else {\r\n        Log.write('Skipping scope call for user invitation flow');\r\n      }\r\n    }\r\n  }\r\n  onLoadingSet(false);\r\n});\r\n","import { RedirectRequest } from '@azure/msal-browser';\r\nimport { orchestrator } from 'satcheljs';\r\nimport { getLoginPageStore } from '..';\r\nimport { envBasedConfig } from '../../../../config/pubCenterAAD.config';\r\nimport { UNAUTHORIZED_LOCAL_STORAGE_LOCALE } from '../../../../constants';\r\nimport { validateSchema } from '../../../../utils';\r\nimport { onErrorsChanged, onLoginButtonClicked, onPubCenterAADLogin } from '../actions';\r\nimport { loginPageErrorModel } from '../store/schema/LoginPageErrorModel';\r\n\r\norchestrator(onLoginButtonClicked, async () => {\r\n  /**\r\n   * make sure browser storage is clean before firing the login mechanism\r\n   * https://msasg.visualstudio.com/Bing_Ads/_sprints/taskboard/AdSyndication%20Team/Bing_Ads/2023/05-May?workitem=5233694\r\n   */\r\n  const localStorageUnAuthLocale = window.localStorage.getItem(UNAUTHORIZED_LOCAL_STORAGE_LOCALE);\r\n  window?.localStorage.clear();\r\n  window?.sessionStorage.removeItem('msal.interaction.status');\r\n  sessionStorage.removeItem(`msal.${envBasedConfig.clientId}.interaction.status`);\r\n  if (localStorageUnAuthLocale) {\r\n    window.localStorage.setItem(UNAUTHORIZED_LOCAL_STORAGE_LOCALE, localStorageUnAuthLocale);\r\n  }\r\n\r\n  const { active } = getLoginPageStore();\r\n\r\n  try {\r\n    await validateSchema(loginPageErrorModel(), active);\r\n    onErrorsChanged();\r\n\r\n    const requestParams: Partial<RedirectRequest> = { loginHint: active.email };\r\n    onPubCenterAADLogin(requestParams);\r\n  } catch (e) {\r\n    onErrorsChanged(e);\r\n    return;\r\n  }\r\n});\r\n","import { object, string } from 'yup';\r\nimport { ILoginPageViewModel } from '../../../../login/@data/store/schema/ILoginPageViewModel';\r\n\r\nexport function loginPageErrorModel() {\r\n  return object<ILoginPageViewModel>().shape({\r\n    email: string().trim().email('Please enter a valid email address.').required('Please enter your email address.'),\r\n  });\r\n}\r\n","import { RedirectRequest } from '@azure/msal-browser';\r\nimport { orchestrator } from 'satcheljs';\r\nimport { Log } from '../../../../../logging/src';\r\nimport { onPubCenterAADLogin, onSwitchAccount } from '../actions';\r\n\r\norchestrator(onSwitchAccount, async (msg) => {\r\n  try {\r\n    // passing prompt parameter as 'select_account', which will redirect user select account page listing all the accounts in session or\r\n    // any remembered accounts or an option to choose to use a different account\r\n    const requestParams: Partial<RedirectRequest> = { prompt: 'select_account' };\r\n    onPubCenterAADLogin(requestParams);\r\n  } catch (e) {\r\n    Log.write(e);\r\n  }\r\n});\r\n","import { orchestrator } from 'satcheljs';\r\nimport { Log } from '../../../../../logging/src';\r\nimport { getAppStore, onUserContextChanged, UserContext } from '../../../../@data';\r\nimport { loginPubCenterAADUser } from '../../../../@data/services/PubCenterAADAuthService';\r\nimport { aadConfig } from '../../../../config/pubCenterAAD.config';\r\nimport { onLoadingSet, onPubCenterAADLogin } from '../actions';\r\n\r\norchestrator(onPubCenterAADLogin, async ({ requestParams }) => {\r\n  Log.write('Logging in through new integrated login flow!!');\r\n\r\n  let userContext = getAppStore().userContext;\r\n  if (!userContext) {\r\n    userContext = new UserContext();\r\n  }\r\n\r\n  onUserContextChanged(userContext);\r\n  onLoadingSet(true);\r\n\r\n  requestParams = { redirectStartPage: aadConfig.auth.redirectUri, ...requestParams };\r\n  loginPubCenterAADUser(requestParams);\r\n});\r\n","import { defineMessages } from 'react-intl';\r\n\r\nexport default defineMessages({\r\n  userDoesNotExist: {\r\n    id: 'InvalidUser.userDoesNotExist',\r\n    defaultMessage: 'There is no {appName} account associated with this Microsoft Account, ',\r\n  },\r\n  userDoesNotExist2: {\r\n    id: 'InvalidUser.userDoesNotExist2',\r\n    defaultMessage: 'Please check that you are signed in with the Microsoft Account for your {appName} account.',\r\n  },\r\n  switchAccountLabel: {\r\n    id: 'InvalidUser.option1',\r\n    defaultMessage: 'Sign in with a different Microsoft Account',\r\n  },\r\n  newAccount: {\r\n    id: 'InvalidUser.option2',\r\n    defaultMessage: 'Create a new Microsoft Account',\r\n  },\r\n  gotoAdvertising: {\r\n    id: 'InvalidUser.option3',\r\n    defaultMessage: 'Go to Microsoft Advertising',\r\n  },\r\n  imageAlt: {\r\n    id: 'InvalidUser.imageAlt',\r\n    defaultMessage: 'User does not exist',\r\n  },\r\n  signupToPubCenter: {\r\n    id: 'InvalidUser.signupToPubCenter',\r\n    defaultMessage: 'Sign up to {appName}',\r\n  },\r\n  unauthorizedInternalUser: {\r\n    id: 'InvalidUser.unauthorizedInternalUser',\r\n    defaultMessage: 'You do not have access to {appName}. Please use the link below to set up your access.',\r\n  },\r\n  requestAccess: {\r\n    id: 'InvalidUser.requestAccess',\r\n    defaultMessage: 'Request access to {appName}',\r\n  },\r\n  signInWithMSA: {\r\n    id: 'InvalidUser.signInWithMSA',\r\n    defaultMessage: 'Sign in with a Microsoft Account',\r\n  },\r\n});\r\n","import React from 'react';\r\nimport { InjectedIntlProps, injectIntl } from 'react-intl';\r\nimport { RouteComponentProps } from 'react-router';\r\nimport { getAppStore, onUserContextChanged } from '../../../@data';\r\nimport { APP_NAME_PUBCENTER, ENTERPRISE_USER_ACCESS_URL } from '../../../constants/AppConstants';\r\nimport { onSwitchAccount } from '../../login/@data';\r\nimport '../../login/@data/orchestrators';\r\nimport { InvalidUserErrorPage } from './InvalidUser';\r\nimport messages from './InvalidUser.messages';\r\nimport { getClassNames } from './InvalidUser.styles';\r\n\r\ninterface IUnauthorizedInternalUserPageProps extends InjectedIntlProps, RouteComponentProps {}\r\n\r\nexport const UnauthorizedInternalUserPage = injectIntl(function UnauthorizedInternalUserErrorPageComp(\r\n  props: IUnauthorizedInternalUserPageProps\r\n): JSX.Element {\r\n  const { formatMessage } = props.intl;\r\n  const { userContext } = getAppStore();\r\n  const { title: titleStyle } = getClassNames();\r\n\r\n  const onSwitchAccountClicked = (): void => {\r\n    if (userContext) {\r\n      onUserContextChanged({ ...userContext });\r\n    }\r\n    onSwitchAccount();\r\n  };\r\n\r\n  const onRedirectToEnterpriseUserAccessUI = (): void => {\r\n    window.location.replace(encodeURI(ENTERPRISE_USER_ACCESS_URL));\r\n  };\r\n\r\n  const renderTitle = (): JSX.Element => {\r\n    return <h1 className={titleStyle}>{formatMessage(messages.unauthorizedInternalUser, { appName: APP_NAME_PUBCENTER })}</h1>;\r\n  };\r\n\r\n  return (\r\n    <InvalidUserErrorPage\r\n      {...props}\r\n      errorImageAltText={formatMessage(messages.imageAlt)}\r\n      renderTitle={renderTitle}\r\n      primaryButtonLabel={formatMessage(messages.requestAccess, { appName: APP_NAME_PUBCENTER })}\r\n      defaultButtonLabel={formatMessage(messages.signInWithMSA)}\r\n      onPrimaryButtonClick={onRedirectToEnterpriseUserAccessUI}\r\n      onDefaultButtonClick={onSwitchAccountClicked}\r\n    />\r\n  );\r\n});\r\n","import React from 'react';\r\nimport { InjectedIntlProps, injectIntl } from 'react-intl';\r\nimport { RouteComponentProps } from 'react-router';\r\nimport { getAppStore, onUserContextChanged } from '../../../@data';\r\nimport { APP_NAME_NEW, APP_NAME_PUBCENTER } from '../../../constants';\r\nimport { GlobalSearchHeader } from '../../../layout/GlobalSearchHeader/GlobalSearchHeader';\r\nimport { onSwitchAccount } from '../../login/@data';\r\nimport '../../login/@data/orchestrators';\r\nimport { InvalidUserErrorPage } from './InvalidUser';\r\nimport messages from './InvalidUser.messages';\r\n\r\ninterface IUserDoesNotExistProps extends InjectedIntlProps, RouteComponentProps {}\r\n\r\nexport const UserDoesNotExistErrorPage = injectIntl(function UserDoesNotExistErrorPageComp(props: IUserDoesNotExistProps): JSX.Element {\r\n  const { formatMessage } = props.intl;\r\n  const { userContext } = getAppStore();\r\n\r\n  const onSwitchAccountClicked = (): void => {\r\n    if (userContext) {\r\n      onUserContextChanged({ ...userContext });\r\n    }\r\n    onSwitchAccount();\r\n  };\r\n\r\n  // Removing signup button - to prevent new user signup\r\n  /*\r\n    const onRedirectToSignupPage = (): void => {\r\n      let signupPageRoute = window.location.origin + SignUpPageRoute;\r\n\r\n      if (isLocationPubCenter()) {\r\n        const newDomainOrigin = PUBCENTER_TYTHON_DOMAIN_MAPPING[window.location.host];\r\n        signupPageRoute = `${newDomainOrigin}${SignUpPageRoute}`;\r\n      }\r\n      Log.write('Redirecting to new domain: ' + signupPageRoute);\r\n      window.location.replace(signupPageRoute);\r\n    };\r\n  */\r\n\r\n  const isInternalUser = userContext?.email && userContext?.email.indexOf('@microsoft.com') !== -1;\r\n\r\n  return (\r\n    <>\r\n      <GlobalSearchHeader />\r\n      <InvalidUserErrorPage\r\n        {...props}\r\n        errorImageAltText={formatMessage(messages.imageAlt)}\r\n        title={formatMessage(messages.userDoesNotExist, { appName: isInternalUser ? APP_NAME_PUBCENTER : APP_NAME_NEW })}\r\n        titleSubText={formatMessage(messages.userDoesNotExist2, { appName: isInternalUser ? APP_NAME_PUBCENTER : APP_NAME_NEW })}\r\n        email={userContext?.email}\r\n        // primaryButtonLabel={formatMessage(messages.signupToPubCenter, { appName: APP_NAME_NEW })}\r\n        defaultButtonLabel={formatMessage(messages.switchAccountLabel)}\r\n        // onPrimaryButtonClick={onRedirectToSignupPage}\r\n        onDefaultButtonClick={onSwitchAccountClicked}\r\n      />\r\n    </>\r\n  );\r\n});\r\n","import { defineMessages } from 'react-intl';\r\n\r\nexport default defineMessages({\r\n  imageAlt: {\r\n    id: 'NoAccess.imageAlt',\r\n    defaultMessage: 'User does not have access to this website',\r\n  },\r\n  pageTitle: {\r\n    id: 'NoAccess.pageTitle',\r\n    defaultMessage: 'No Access',\r\n  },\r\n  errorMessage: {\r\n    id: 'NoAccess.errorMessage',\r\n    defaultMessage: `{appName} does not recognize this account`,\r\n  },\r\n  errorDescriptionPart1: {\r\n    id: 'NoAccess.errorDescription',\r\n    defaultMessage: `We are unable to validate your request at this time. Please `,\r\n  },\r\n  contactSupport: {\r\n    id: 'NoAccess.contactSupport',\r\n    defaultMessage: `contact support`,\r\n  },\r\n  errorDescriptionPart2: {\r\n    id: 'NoAccess.errorDescription',\r\n    defaultMessage: ` with subject \"No access\" and use reference message code: {messageCode} and transaction ID: {transactionId}`,\r\n  },\r\n});\r\n","import React from 'react';\r\nimport { InjectedIntlProps, injectIntl } from 'react-intl';\r\nimport { RouteComponentProps } from 'react-router';\r\nimport { isTythonSelfServeUser } from '../../../../@data';\r\nimport { CUSTOM_MESSAGE_CODE } from '../../../../@data/services/OneVetIntegrationService';\r\nimport { ExternalLink } from '../../../../components/ExternalLink';\r\nimport { APP_NAME_NEW, APP_NAME_PUBCENTER, SUPPORT_EMAIL, TYTHON_SUPPORT_EMAIL } from '../../../../constants/AppConstants';\r\nimport { InvalidUserErrorPage } from '../InvalidUser';\r\nimport { getClassNames } from '../InvalidUser.styles';\r\nimport messages from './NoAccessPage.messages';\r\n\r\ninterface INoAccessErrorPageProps extends InjectedIntlProps, RouteComponentProps {}\r\n\r\nexport const NoAccessErrorPage = injectIntl(function NoAccessErrorPageComp(props: INoAccessErrorPageProps): JSX.Element {\r\n  const { formatMessage } = props.intl;\r\n  const { title: titleStyle } = getClassNames();\r\n\r\n  const renderTitle = (): JSX.Element => {\r\n    return (\r\n      <div>\r\n        <h1>{formatMessage(messages.pageTitle)}</h1>\r\n        <h2 className={titleStyle}>\r\n          {formatMessage(messages.errorMessage, { appName: isTythonSelfServeUser() ? APP_NAME_NEW : APP_NAME_PUBCENTER })}\r\n        </h2>\r\n        <p>\r\n          {formatMessage(messages.errorDescriptionPart1)}\r\n          <ExternalLink\r\n            href={`mailto:${isTythonSelfServeUser() ? TYTHON_SUPPORT_EMAIL : SUPPORT_EMAIL}`}\r\n            aria-label={formatMessage(messages.contactSupport)}\r\n          >\r\n            {formatMessage(messages.contactSupport)}\r\n          </ExternalLink>\r\n          {formatMessage(messages.errorDescriptionPart2, {\r\n            messageCode: CUSTOM_MESSAGE_CODE,\r\n            transactionId: sessionStorage.getItem('session_id'),\r\n          })}\r\n        </p>\r\n      </div>\r\n    );\r\n  };\r\n\r\n  return <InvalidUserErrorPage {...props} errorImageAltText={formatMessage(messages.imageAlt)} renderTitle={renderTitle} />;\r\n});\r\n","import React, { useEffect } from 'react';\r\nimport { handleDomainRedirection } from '../../@data';\r\nimport { LandingPageRoute } from '../../Routes';\r\nimport { USER_SIGNUP_KEY } from '../../constants/AppConstants';\r\nimport { Page } from '../../layout/PageLayout/PageLayout';\r\nimport { injectRouterWithIntl } from '../../utils';\r\nimport { isLocationPubCenter } from '../../utils/UrlUtils';\r\nimport { onPubCenterAADLogin } from '../login/@data';\r\n\r\nexport const LandingPage = injectRouterWithIntl(function LandingPageComponent(props) {\r\n  useEffect(() => {\r\n    localStorage.setItem(USER_SIGNUP_KEY, 'true');\r\n\r\n    if (isLocationPubCenter()) {\r\n      handleDomainRedirection('', LandingPageRoute);\r\n    } else {\r\n      onPubCenterAADLogin();\r\n    }\r\n  }, []);\r\n\r\n  return <Page {...props} />;\r\n});\r\n","import { mutator } from 'satcheljs';\r\nimport { onLoadingSet } from '../actions';\r\nimport { getLoginPageStore } from '..';\r\n\r\nmutator(onLoadingSet, (msg) => {\r\n  getLoginPageStore().loading = msg.value;\r\n});\r\n","import { default as React, useEffect } from 'react';\r\nimport { Redirect } from 'react-router-dom';\r\nimport { Log } from '../../../logging/src';\r\nimport { LogType } from '../../../logging/src/LogType';\r\nimport { getAppStore, showTokenExpirationNotification } from '../../@data';\r\nimport AppMessages from '../../App.messages';\r\nimport { DefaultRoute } from '../../Routes';\r\nimport { PageSpinner } from '../../components/Spinners';\r\nimport {\r\n  DOMAIN_REDIRECTION_QUERY_PARAM,\r\n  REDIRECT_URI_SESSION_STORAGE_KEY,\r\n  TOKEN_EXPIRED_SEARCH_PARAM_KEY,\r\n  TYTHON_DOMAIN_REDIRECTION_CACHE_KEY,\r\n} from '../../constants/AppConstants';\r\nimport { getUrlSearchParameter, injectIntlWithObserver } from '../../utils';\r\nimport { getLoginPageStore, onAuthPageInitialized, onLoadingSet } from './@data';\r\nimport './@data/mutators/userAuthentication';\r\nimport './@data/orchestrators';\r\nimport LoginPageMessages from './LoginPage.messages';\r\nimport { ILoginPageProps } from './components/LoginPageView';\r\nimport { RedirectionSpinner } from './components/RedirectionSpinner';\r\n\r\nexport const LoginPage = injectIntlWithObserver(function LoginPageComponent({ location, intl }: ILoginPageProps) {\r\n  const { formatMessage } = intl;\r\n  const { loading } = getLoginPageStore();\r\n  const [isLoading, setLoading] = React.useState(true);\r\n  const [isRedirectionFlow, setRedirectionFlow] = React.useState(!!sessionStorage.getItem(TYTHON_DOMAIN_REDIRECTION_CACHE_KEY));\r\n\r\n  useEffect(() => {\r\n    Log.info(`Navigated to new integrated login page: ${window.location.href}`);\r\n    const loginHint = getUrlSearchParameter(window.location.search, DOMAIN_REDIRECTION_QUERY_PARAM);\r\n\r\n    if (loginHint) {\r\n      Log.write(`Setting redirected user cache for : ${loginHint}`, LogType.DEBUG);\r\n      setRedirectionFlow(true);\r\n      sessionStorage.setItem(TYTHON_DOMAIN_REDIRECTION_CACHE_KEY, 'true');\r\n      onLoadingSet(true);\r\n    }\r\n    onAuthPageInitialized(loginHint);\r\n\r\n    const searchParam = new URLSearchParams(location.search);\r\n    if (searchParam.get(TOKEN_EXPIRED_SEARCH_PARAM_KEY) === 'true') {\r\n      showTokenExpirationNotification();\r\n    }\r\n    // eslint-disable-next-line\r\n  }, []);\r\n\r\n  useEffect(() => setLoading(!!loading), [loading]);\r\n\r\n  const { userContext, isInviteUserFlow, waiting } = getAppStore();\r\n  // tslint:disable-next-line: no-any\r\n  const { from } = (location.state as any) || { from: { pathname: DefaultRoute } };\r\n\r\n  if (!isLoading) {\r\n    if (isInviteUserFlow) {\r\n      return <Redirect to={'acceptUserInvite/code=redirect/locale=redirect'} />;\r\n    }\r\n\r\n    let redirectTo = from.pathname;\r\n    if (userContext && userContext.token) {\r\n      if (redirectTo === '/login') {\r\n        redirectTo = DefaultRoute;\r\n      }\r\n\r\n      if (sessionStorage.getItem(REDIRECT_URI_SESSION_STORAGE_KEY)) {\r\n        redirectTo = sessionStorage.getItem(REDIRECT_URI_SESSION_STORAGE_KEY) || '';\r\n        sessionStorage.removeItem(REDIRECT_URI_SESSION_STORAGE_KEY);\r\n      }\r\n\r\n      Log.debug(`Redirecting to: ${redirectTo} after login`);\r\n      return <Redirect to={redirectTo} />;\r\n    }\r\n  } else if (!userContext && !isRedirectionFlow && !window.location.search.includes(DOMAIN_REDIRECTION_QUERY_PARAM)) {\r\n    return <Redirect to={'/'} />;\r\n  }\r\n\r\n  // by default if you're here, then authentication is ongoing. Once user is authentication, then redirect user to appropriate page\r\n  return isRedirectionFlow ? (\r\n    <RedirectionSpinner label={formatMessage(LoginPageMessages.redirectionMessage)} />\r\n  ) : (\r\n    <PageSpinner label={formatMessage(waiting ? AppMessages.loadingWaitingLabel : AppMessages.loadingLabel)} />\r\n  );\r\n});\r\n","import { IStyleFunctionOrObject, ITextFieldStyleProps, ITextFieldStyles, getTheme, mergeStyleSets } from '@fluentui/react';\r\nimport { BreakPoints, IPubCenterFonts, IPubcenterPalette, IPubcenterSpacing } from '../../../theme';\r\n\r\nexport interface ILoginPageStyles {\r\n  titleStyle: string;\r\n  descStyle: string;\r\n  buttonBackground: string;\r\n  signInButtonStyle: string;\r\n  imageStyle: string;\r\n}\r\n\r\nconst { ResponsiveNonSmall, ResponsiveSmall, ResponsiveExtraSmall } = BreakPoints;\r\n\r\nexport const getClassNames = (): ILoginPageStyles => {\r\n  const theme = getTheme();\r\n  const spacing = theme.spacing as IPubcenterSpacing;\r\n  const fonts = theme.fonts as IPubCenterFonts;\r\n  const { size32, size16 } = fonts;\r\n\r\n  return mergeStyleSets({\r\n    titleStyle: {\r\n      ...size32,\r\n      color: theme.palette.white,\r\n      margin: `0 0  ${spacing.size24} 0`,\r\n      textAlign: 'center',\r\n    },\r\n    descStyle: {\r\n      color: theme.palette.white,\r\n      ...size16,\r\n      textAlign: 'center',\r\n      [ResponsiveNonSmall]: {\r\n        width: '382px',\r\n      },\r\n      [ResponsiveSmall]: {\r\n        maxWidth: '320px',\r\n        minWidth: '224px',\r\n      },\r\n    },\r\n    buttonBackground: {\r\n      borderRadius: '10px',\r\n      background: '#0a152ecc',\r\n      position: 'absolute',\r\n      display: 'flex',\r\n      flexDirection: 'column',\r\n      justifyContent: 'center',\r\n      alignItems: 'center',\r\n      top: '50%',\r\n      left: '50%',\r\n      transform: 'translate(-50%, -50%)',\r\n      padding: `${spacing.size80} ${spacing.size32}`,\r\n      [ResponsiveNonSmall]: {\r\n        width: `446px`,\r\n      },\r\n      [ResponsiveSmall]: {\r\n        maxWidth: `calc(100vw - ${spacing.size96})`,\r\n        width: 'max-content',\r\n      },\r\n      [ResponsiveExtraSmall]: {\r\n        maxWidth: `calc(100vw - ${spacing.size96})`,\r\n      },\r\n    },\r\n    signInButtonStyle: {\r\n      height: spacing.size48,\r\n      background: 'transparent',\r\n      color: theme.palette.white,\r\n      border: `${spacing.size2} solid ${theme.palette.white}`,\r\n      marginTop: spacing.size16,\r\n      marginLeft: spacing.size24,\r\n      marginRight: spacing.size24,\r\n      selectors: {\r\n        '&:focus': {\r\n          outline: `1px solid ${theme.palette.white}`,\r\n        },\r\n      },\r\n      [ResponsiveNonSmall]: {\r\n        width: spacing.size320,\r\n      },\r\n      [ResponsiveSmall]: {\r\n        minWidth: '224px',\r\n        maxWidth: spacing.size320,\r\n        width: '-webkit-fill-available',\r\n      },\r\n    },\r\n    imageStyle: {\r\n      width: '100vw',\r\n      height: '100vh',\r\n    },\r\n  });\r\n};\r\n\r\nexport const getTextFieldStyles = (props: ITextFieldStyleProps): IStyleFunctionOrObject<ITextFieldStyleProps, ITextFieldStyles> => {\r\n  const theme = getTheme();\r\n  const spacing = theme.spacing as IPubcenterSpacing;\r\n  const { size16 } = theme.fonts as IPubCenterFonts;\r\n  const palette = theme.palette as IPubcenterPalette;\r\n  const { hasErrorMessage } = props;\r\n\r\n  return {\r\n    root: {\r\n      marginTop: spacing.size24,\r\n      marginLeft: spacing.size24,\r\n      marginRight: spacing.size24,\r\n      [ResponsiveNonSmall]: {\r\n        width: spacing.size320,\r\n      },\r\n      [ResponsiveSmall]: {\r\n        minWidth: '224px',\r\n        maxWidth: spacing.size320,\r\n        width: '-webkit-fill-available',\r\n      },\r\n    },\r\n    fieldGroup: [\r\n      {\r\n        height: spacing.size48,\r\n      },\r\n      hasErrorMessage && {\r\n        background: palette.messageBarError,\r\n        border: 'none',\r\n      },\r\n    ],\r\n    field: [\r\n      hasErrorMessage && {\r\n        color: palette.redDark,\r\n        border: `2px solid ${theme.palette.white}`,\r\n      },\r\n    ],\r\n    errorMessage: {\r\n      color: theme.palette.white,\r\n      ...size16,\r\n      width: spacing.size320,\r\n    },\r\n  };\r\n};\r\n","import { DefaultButton, IRefObject, ITextField, Image, ImageFit, TextField, getTheme } from '@fluentui/react';\r\nimport React, { useLayoutEffect, useRef } from 'react';\r\nimport { InjectedIntlProps } from 'react-intl';\r\nimport { RouteComponentProps } from 'react-router-dom';\r\nimport { LOCAL_STORAGE_LOCALE } from '../../../constants';\r\nimport { GlobalSearchHeader } from '../../../layout/GlobalSearchHeader/GlobalSearchHeader';\r\nimport { InternationalizationLayout } from '../../../layout/InternationalizationLayout';\r\nimport { NotificationLayout } from '../../../layout/NotificationLayout';\r\nimport { injectIntlWithObserver } from '../../../utils';\r\nimport { onLanguageChanged } from '../../ad-management/Account/Settings/@data/mutatorActions';\r\nimport { getLoginPageStore, onEmailChanged, onLoginButtonClicked } from '../@data';\r\nimport '../@data/mutators/userAuthentication';\r\nimport '../@data/orchestrators';\r\nimport LoginPageMessages from '../LoginPage.messages';\r\nimport { getClassNames, getTextFieldStyles } from '../LoginPage.styles';\r\nimport loginBackgroundImage from '../resources/loginBackgroundImage.svg';\r\n\r\nexport interface ILoginPageProps extends RouteComponentProps, InjectedIntlProps {}\r\n\r\nexport const LoginPageView = injectIntlWithObserver(function LoginPageComponent({ location, intl }: ILoginPageProps) {\r\n  const { formatMessage } = intl;\r\n  const { title, welcome, description, emailPlaceholder, signInButton, imageAlt, signInButtonAriaLabel } = LoginPageMessages;\r\n  const { active, errors } = getLoginPageStore();\r\n  const { email } = active;\r\n  const { buttonBackground, imageStyle, titleStyle, descStyle, signInButtonStyle } = getClassNames();\r\n  const emailInputRef = useRef<{ state: { isFocused: boolean } }>(null);\r\n\r\n  useLayoutEffect(() => {\r\n    const localStorageLocal = localStorage.getItem(LOCAL_STORAGE_LOCALE);\r\n    if (localStorageLocal) {\r\n      onLanguageChanged(localStorageLocal, LOCAL_STORAGE_LOCALE);\r\n    }\r\n  });\r\n\r\n  return (\r\n    <>\r\n      <GlobalSearchHeader />\r\n      <InternationalizationLayout />\r\n      <NotificationLayout ignoreGlobalAsync>\r\n        <Image\r\n          imageFit={ImageFit.cover}\r\n          src={loginBackgroundImage}\r\n          className={imageStyle}\r\n          alt={formatMessage(imageAlt)}\r\n          shouldFadeIn={true}\r\n        />\r\n        <div\r\n          className={buttonBackground}\r\n          onKeyDown={(ev) => {\r\n            if (ev.key === 'Enter' && emailInputRef?.current?.state?.isFocused) {\r\n              onLoginButtonClicked();\r\n            }\r\n          }}\r\n        >\r\n          <h1 className={titleStyle}>{formatMessage(title)}</h1>\r\n          <label className={descStyle}>{formatMessage(welcome)}</label>\r\n          <label className={descStyle}>{formatMessage(description)}</label>\r\n          <TextField\r\n            id=\"signInEmailInput\"\r\n            componentRef={emailInputRef as IRefObject<ITextField>}\r\n            styles={getTextFieldStyles({ hasErrorMessage: !!errors.email, theme: getTheme() })}\r\n            value={email}\r\n            placeholder={formatMessage(emailPlaceholder)}\r\n            onChange={(_, val) => onEmailChanged(val || '')}\r\n            errorMessage={errors.email}\r\n            type=\"email\"\r\n          />\r\n          <DefaultButton\r\n            id=\"signInButton\"\r\n            className={signInButtonStyle}\r\n            onClick={onLoginButtonClicked}\r\n            text={formatMessage(signInButton)}\r\n            ariaLabel={formatMessage(signInButtonAriaLabel)}\r\n          />\r\n        </div>\r\n      </NotificationLayout>\r\n    </>\r\n  );\r\n});\r\n","import { defineMessages } from 'react-intl';\r\n\r\nexport default defineMessages({\r\n  signUpDetailsTitle: {\r\n    id: 'signup.signUpDetails.title',\r\n    defaultMessage: 'Before you begin',\r\n  },\r\n  signUpDetailsContentYes: {\r\n    id: 'signup.signUpDetails.contentYes',\r\n    defaultMessage: 'Yes, send me customized help and performance suggestions',\r\n  },\r\n  signUpDetailsContentNo: {\r\n    id: 'signup.signUpDetails.contentNo',\r\n    defaultMessage: `No, I don't want customized help and performance suggestions`,\r\n  },\r\n  signUpDetailsCountryTerritory: {\r\n    id: 'signup.signUpDetails.CountryTerritory',\r\n    defaultMessage: 'Your payment country / territory',\r\n  },\r\n  signUpDetailsTermsAndConditions: {\r\n    id: 'signup.signUpDetails.TermsAndConditions',\r\n    defaultMessage: 'Our terms and conditions',\r\n  },\r\n  signUpDetailsCountry: {\r\n    id: 'signup.signUpDetails.country',\r\n    defaultMessage: 'Your payment country / territory',\r\n  },\r\n  agreementText: {\r\n    id: 'signup.agreementText',\r\n    defaultMessage: 'I have read and accepted the terms and conditions.  *',\r\n  },\r\n  defaultCountry: {\r\n    id: 'signup.defaultCountry',\r\n    defaultMessage: 'United States',\r\n  },\r\n  messageBarText: {\r\n    id: 'signup.messageBar',\r\n    defaultMessage:\r\n      'Select the country/region here you currently live and where your bank account is associated. This will help you get paid.',\r\n  },\r\n  organizationName: {\r\n    id: 'signup.organizationName',\r\n    defaultMessage: 'Organization name',\r\n  },\r\n  orgNamePlaceholder: {\r\n    id: 'signup.orgNamePlaceholder',\r\n    defaultMessage: 'Do not exceed {limit} characters',\r\n  },\r\n  firstName: {\r\n    id: 'signup.firstName',\r\n    defaultMessage: 'First name',\r\n  },\r\n  lastName: {\r\n    id: 'signup.lastName',\r\n    defaultMessage: 'Last name',\r\n  },\r\n  signupdetailsBoldBanner: {\r\n    id: 'signupdetails.boldBanner',\r\n    defaultMessage: '{appName} is currently only accepting payment in the United States',\r\n  },\r\n  signupdetailsInfoBanner: {\r\n    id: 'signupdetails.infoBanner',\r\n    defaultMessage:\r\n      'Note that your country and currency selections cannot be changed after submitting. Also, if you use Google Ad Manager, it is recommended that you use the same currency selection.',\r\n  },\r\n  signupdetailsWaitlist: {\r\n    id: 'signupdetails.waitlist',\r\n    defaultMessage: 'waitlist',\r\n  },\r\n  signupEmailOptIn: {\r\n    id: 'signup.email.OptIn',\r\n    defaultMessage: 'I would like information, tips, and offers about {appName}.',\r\n  },\r\n  signupEmailOptInPrivacyLink: {\r\n    id: 'signup.email.OptIn.PrivacyLink',\r\n    defaultMessage: 'Privacy Statement',\r\n  },\r\n  signUpDetailsPreferredLanguage: {\r\n    id: 'signupdetails.preferred.language',\r\n    defaultMessage: 'Preferred language',\r\n  },\r\n  signUpDetailsCurrency: {\r\n    id: 'signupdetails.currency',\r\n    defaultMessage: 'Currency',\r\n  },\r\n});\r\n","import { IPubcenterSpacing } from '../../../../../theme';\r\nimport { IAcceptInviteStyleProps, IAcceptInviteStyles } from './AcceptInvite.types';\r\n\r\nexport const getStyles = (props: IAcceptInviteStyleProps): IAcceptInviteStyles => {\r\n  const { theme } = props;\r\n  const spacing = theme.spacing as IPubcenterSpacing;\r\n\r\n  return {\r\n    switchNowButton: {\r\n      color: theme.palette.themePrimary,\r\n    },\r\n    subComponentStyles: {\r\n      checkbox: {\r\n        root: {\r\n          marginBottom: spacing.size8,\r\n        },\r\n      },\r\n    },\r\n    privacyEmailLinkWrapper: {\r\n      marginTop: `-${spacing.size12}`,\r\n      display: 'flex',\r\n      gap: spacing.size6,\r\n    },\r\n  };\r\n};\r\n","import {\r\n  ActionButton,\r\n  Checkbox,\r\n  classNamesFunction,\r\n  ComboBox,\r\n  getTheme,\r\n  IComboBoxOption,\r\n  IProcessedStyleSet,\r\n  Link,\r\n  TextField,\r\n} from '@fluentui/react';\r\nimport * as React from 'react';\r\nimport {\r\n  getAppStore,\r\n  onHelpInfoCalloutOpened,\r\n  onHelpInfoChanged,\r\n  onIsAcceptInviteFlowChanged,\r\n  onUserInvitationCodeChanged,\r\n} from '../../../../@data';\r\nimport { getSupportedLanguagesDropDownOptions } from '../../../../@data/utils/supportedLanguages';\r\nimport AppMessages from '../../../../App.messages';\r\nimport { FormItem, FormState } from '../../../../components/Form';\r\nimport { FormLabel } from '../../../../components/Form/FormLabel';\r\nimport { PageSpinner } from '../../../../components/Spinners';\r\nimport { ContentLayout } from '../../../../layout/ContentLayout/ContentLayout';\r\nimport { DetailPage } from '../../../../layout/DetailPage/DetailPage';\r\nimport { injectIntlWithObserver } from '../../../../utils';\r\nimport { getLoginPageStore, onSwitchAccount } from '../../../login/@data';\r\nimport signUpMessages from '../../../signup/component/SignupDetails/SignUpDetails.messages';\r\nimport { getStore as getUserPageStore } from '../@data';\r\nimport {\r\n  onAcceptInvitePageInitialized,\r\n  onAcceptInvitePageSubmitted,\r\n  onFormCancelled,\r\n  onFormContactByEmailChanged,\r\n  onFormEmailAddressChanged,\r\n  onFormFirstNameChanged,\r\n  onFormLanguageChanged,\r\n  onFormLastNameChanged,\r\n  onFormPhoneNumberChanged,\r\n  onFormUserLocaleChanged,\r\n} from '../@data/actions';\r\nimport '../@data/mutators';\r\nimport '../@data/orchestrators';\r\nimport messages from '../UserPage.messages';\r\nimport { getStyles } from './AcceptInvite.styles';\r\nimport { IAccepInviteProps, IAcceptInviteStyleProps, IAcceptInviteStyles } from './AcceptInvite.types';\r\n\r\nconst getClassNames = classNamesFunction<IAcceptInviteStyleProps, IAcceptInviteStyles>();\r\n\r\nexport const AcceptInvitePage = injectIntlWithObserver(\r\n  class extends React.Component<IAccepInviteProps> {\r\n    private _classNames: IProcessedStyleSet<IAcceptInviteStyles>;\r\n    public componentDidMount() {\r\n      const invitationCode = this.props.match.params.invitationcode;\r\n      const invitationLocale = this.props.match.params.invitationLocale;\r\n\r\n      onAcceptInvitePageInitialized(invitationCode, invitationLocale);\r\n    }\r\n\r\n    public render(): JSX.Element | null {\r\n      const { formatMessage } = this.props.intl;\r\n      const theme = getTheme();\r\n      const store = getUserPageStore();\r\n      const loginPageStore = getLoginPageStore();\r\n      const { userContext, helpInfo } = getAppStore();\r\n      this._classNames = getClassNames(getStyles, { theme });\r\n\r\n      // Spin till loading is set\r\n      if (!userContext?.token && loginPageStore.loading) {\r\n        return <PageSpinner label={formatMessage(AppMessages.loadingLabel)} />;\r\n      }\r\n\r\n      return (\r\n        <ContentLayout {...this.props} ignoreNotificationAsync>\r\n          <DetailPage\r\n            titleLabel={formatMessage(messages.acceptInvite)}\r\n            submitLabel={formatMessage(messages.createUser)}\r\n            onSubmit={() => this._onSubmit()}\r\n            onCancel={() => this._onCancel()}\r\n            onNavClick={() => this._onCancel()}\r\n            saving={getAppStore().saving}\r\n            helpId={'pop_PCv4_AcceptInvite'}\r\n            pageMode={FormState.AcceptInvite}\r\n          >\r\n            <>\r\n              <FormItem>\r\n                <TextField\r\n                  label={formatMessage(messages.userName)}\r\n                  ariaLabel={formatMessage(messages.userName)}\r\n                  required={true}\r\n                  value={store.active.userName}\r\n                  disabled={true}\r\n                />\r\n              </FormItem>\r\n              <FormItem>\r\n                <TextField\r\n                  required={true}\r\n                  label={formatMessage(messages.firstName)}\r\n                  ariaLabel={formatMessage(messages.firstName)}\r\n                  onChange={(_, value) => onFormFirstNameChanged(value)}\r\n                  value={store.active.firstName}\r\n                  errorMessage={store.errors.firstName}\r\n                />\r\n              </FormItem>\r\n              <FormItem>\r\n                <TextField\r\n                  required={true}\r\n                  label={formatMessage(messages.lastName)}\r\n                  ariaLabel={formatMessage(messages.lastName)}\r\n                  value={store.active.lastName}\r\n                  onChange={(_, value) => onFormLastNameChanged(value)}\r\n                  errorMessage={store.errors.lastName}\r\n                />\r\n              </FormItem>\r\n              <FormItem formWidth={440}>\r\n                <TextField\r\n                  required={true}\r\n                  label={formatMessage(messages.emailAddress)}\r\n                  ariaLabel={formatMessage(messages.emailAddress)}\r\n                  value={store.active.emailAddress}\r\n                  onChange={(_, value) => onFormEmailAddressChanged(value)}\r\n                  errorMessage={store.errors.emailAddress}\r\n                />\r\n              </FormItem>\r\n              <FormItem>\r\n                <ComboBox\r\n                  useComboBoxAsMenuWidth={true}\r\n                  autoComplete=\"on\"\r\n                  label={formatMessage(messages.preferredLanguage)}\r\n                  required={true}\r\n                  options={getSupportedLanguagesDropDownOptions(getAppStore().locale)}\r\n                  selectedKey={store.active.language?.toLocaleLowerCase()}\r\n                  onChange={(_, value) => this._onPreferredLanguageChange(value)}\r\n                  errorMessage={store.errors.language}\r\n                />\r\n              </FormItem>\r\n              <FormItem>\r\n                <FormLabel\r\n                  labelContent={formatMessage(messages.marketingContactSetting)}\r\n                  calloutContent={helpInfo}\r\n                  iconButtonOnClick={() => onHelpInfoCalloutOpened('pop_PCv4_MarketingContactSettings')}\r\n                  calloutOnDismiss={() => onHelpInfoChanged()}\r\n                  intl={this.props.intl}\r\n                />\r\n              </FormItem>\r\n              <div className={this._classNames.privacyEmailLinkWrapper}>\r\n                <Checkbox\r\n                  required={false}\r\n                  label={formatMessage(signUpMessages.signupEmailOptIn)}\r\n                  ariaLabel={formatMessage(messages.email)}\r\n                  checked={!!store.active.contactByEmail}\r\n                  onChange={(_, value) => onFormContactByEmailChanged(value)}\r\n                />\r\n                <Link href=\"http://go.microsoft.com/fwlink/?LinkId=521839\" target=\"_blank\">\r\n                  {formatMessage(signUpMessages.signupEmailOptInPrivacyLink)}\r\n                </Link>\r\n              </div>\r\n              {store.active.contactByPhone && (\r\n                <FormItem>\r\n                  <TextField\r\n                    label={formatMessage(messages.telephoneNumber)}\r\n                    ariaLabel={formatMessage(messages.telephoneNumber)}\r\n                    value={store.active.phoneNumber}\r\n                    onChange={(_, value) => onFormPhoneNumberChanged(value)}\r\n                    required={true}\r\n                    errorMessage={store.errors.phoneNumber}\r\n                  />\r\n                </FormItem>\r\n              )}\r\n              <label>{formatMessage(messages.useDifferentAccountMessage, { email: store.active.emailAddress })}</label>\r\n              <ActionButton className={this._classNames.switchNowButton} onClick={this._onSwitchAccountButtonClicked}>\r\n                {formatMessage(messages.switchNow)}\r\n              </ActionButton>\r\n            </>\r\n          </DetailPage>\r\n        </ContentLayout>\r\n      );\r\n    }\r\n\r\n    private _onSwitchAccountButtonClicked = (): void => {\r\n      const invitationCode = this.props.match.params.invitationcode;\r\n      onIsAcceptInviteFlowChanged(true);\r\n      onUserInvitationCodeChanged(invitationCode);\r\n      onSwitchAccount();\r\n    };\r\n\r\n    private _onPreferredLanguageChange = (value?: IComboBoxOption): void => {\r\n      onFormUserLocaleChanged(value);\r\n      value && typeof value.key === 'string' && onFormLanguageChanged(value.key);\r\n    };\r\n\r\n    private _onSubmit = (): void => {\r\n      onAcceptInvitePageSubmitted();\r\n    };\r\n\r\n    private _onCancel = (): void => {\r\n      onFormCancelled();\r\n    };\r\n  }\r\n);\r\n","import { defineMessages } from 'react-intl';\r\n\r\nexport default defineMessages({\r\n  formTitle: {\r\n    id: 'support.form.title',\r\n    defaultMessage: 'Contact Support',\r\n  },\r\n  formTitleInputHeader: {\r\n    id: 'support.form.title.input.header',\r\n    defaultMessage: 'Title',\r\n  },\r\n  formEmailInputHeader: {\r\n    id: 'support.form.email.input.header',\r\n    defaultMessage: 'Email',\r\n  },\r\n  formEmailInputPlaceholder: {\r\n    id: 'support.form.email.input.placeholder',\r\n    defaultMessage: 'Enter email',\r\n  },\r\n  formCreationFailedTitle: {\r\n    id: 'support.form.creation.failed.title',\r\n    defaultMessage: 'Could not be sent',\r\n  },\r\n  formCreationFailedDetails: {\r\n    id: 'support.form.creation.failed.details',\r\n    defaultMessage: '{msgTitle} This request could not be created. Please try again.',\r\n  },\r\n  formCreationSuccessTitle: {\r\n    id: 'support.form.creation.success.title',\r\n    defaultMessage: 'Your support request is sent',\r\n  },\r\n  formCreationSuccessDetails: {\r\n    id: 'support.form.creation.success.details',\r\n    defaultMessage:\r\n      'We’re reviewing your request: {ticketNumber}. You’ll receive an email confirmation as soon as possible. You can close this tab at any time.',\r\n  },\r\n  formTitleInputPlaceholder: {\r\n    id: 'support.form.title.input.placeholder',\r\n    defaultMessage: 'Subject',\r\n  },\r\n  formDescriptionInputHeader: {\r\n    id: 'support.form.description.input.header',\r\n    defaultMessage: 'Description',\r\n  },\r\n  formDescriptionInputPlaceholder: {\r\n    id: 'support.form.description.input.placeholder',\r\n    defaultMessage: 'Please share your feedback or describe your experience.',\r\n  },\r\n  formSubmitButton: {\r\n    id: 'support.form.submit.button',\r\n    defaultMessage: 'Submit',\r\n  },\r\n  formSubmitButtonLoading: {\r\n    id: 'support.form.submit.button.loading',\r\n    defaultMessage: 'Submitting Form',\r\n  },\r\n  formDescriptionWordsCount: {\r\n    id: 'support.form.description.words.count',\r\n    defaultMessage: '{count} words remaining',\r\n  },\r\n  formDescriptionWordCount: {\r\n    id: 'support.form.description.word.count',\r\n    defaultMessage: '{count} word remaining',\r\n  },\r\n});\r\n","import { ITheme, classNamesFunction, getTheme } from '@fluentui/react';\r\nimport { BreakPoints, IPubcenterPalette, IPubcenterSpacing } from '../../../theme';\r\nimport { ISupportPageStyles } from './types';\r\n\r\nconst getStyles = ({ theme }) => {\r\n  const spacing = theme.spacing as IPubcenterSpacing;\r\n  const palette = theme.palette as IPubcenterPalette;\r\n  const { ResponsiveSmall, ResponsiveMedium } = BreakPoints;\r\n  const imageWidth = spacing.size192;\r\n  return {\r\n    footerWrapper: {\r\n      height: '100%',\r\n    },\r\n    root: {\r\n      display: 'flex',\r\n      justifyContent: 'center',\r\n      minHeight: `calc(100% - ${spacing.size48})`,\r\n      overflowX: 'scroll',\r\n    },\r\n    pageTitle: {\r\n      fontSize: spacing.size20,\r\n      fontWeight: '600',\r\n      lineHeight: spacing.size28,\r\n    },\r\n    formWrapper: {\r\n      marginTop: spacing.size24,\r\n      '.ms-TextField-fieldGroup': {\r\n        borderRadius: spacing.size2,\r\n        borderColor: palette.neutralTertiaryAlt,\r\n      },\r\n      [ResponsiveSmall]: {\r\n        width: '100%',\r\n      },\r\n    },\r\n    emailIcon: {\r\n      marginLeft: `calc((100% - ${imageWidth})/2)`,\r\n      width: imageWidth,\r\n    },\r\n    submitButton: {\r\n      margin: `${spacing.size12} 0`,\r\n      float: 'right',\r\n    },\r\n    errorBannerWrapper: {\r\n      marginBottom: 0,\r\n    },\r\n    formSuccessHead: {\r\n      marginTop: spacing.size24,\r\n    },\r\n    descriptionWordCountWrapper: {\r\n      display: 'block',\r\n      textAlign: 'right',\r\n      fontSize: spacing.size10,\r\n      fontColor: palette.neutralTertiaryAlt,\r\n    },\r\n    formInputStyles: {\r\n      width: 440,\r\n      [ResponsiveMedium]: { width: 324 },\r\n      [ResponsiveSmall]: { width: 280 },\r\n    },\r\n    transparentText: {\r\n      color: 'transparent',\r\n      display: 'block',\r\n      userSelect: 'none'\r\n    }\r\n  };\r\n};\r\n\r\nconst getClassNames = classNamesFunction<{ theme: ITheme }, ISupportPageStyles>();\r\nexport const classNames = getClassNames(getStyles, { theme: getTheme() });\r\n","import { useEffect, useState } from 'react';\r\nimport { Log } from '../../../logging/src/Log';\r\nimport { LayoutMode, UserContext, buildRequestHeadersWithAuthToken, onLayoutChanged } from '../../@data';\r\nimport { uiConfig } from '../../config/ui.config';\r\nimport { usePUID, usePreloadSVGImages } from '../../hooks';\r\nimport emailLogo from './emailLogo.svg';\r\nimport emailSentLogo from './emailSentLogo.svg';\r\nimport { UseSupportPage } from './types';\r\n\r\nexport const MAX_WORD_COUNT = 700;\r\nconst postFormSubmission = async (props: {\r\n  title: string;\r\n  description: string;\r\n  email: string;\r\n  puid: string;\r\n  userContext: UserContext;\r\n  formattedLocale: string;\r\n  countryCode: string;\r\n}) => {\r\n  const { title, description, email, puid, userContext, formattedLocale, countryCode } = props;\r\n  const url = uiConfig.getApiBaseAddress() + '/ucmTicket/createAuthenticatedCase';\r\n  const headers = await buildRequestHeadersWithAuthToken(url, userContext);\r\n\r\n  let response: Response;\r\n\r\n  try {\r\n    response = await fetch(url, {\r\n      method: 'POST',\r\n      headers: headers,\r\n      body: JSON.stringify({\r\n        title,\r\n        description,\r\n        email,\r\n        puid,\r\n        SupportLanguage: formattedLocale,\r\n        SupportCountry: countryCode,\r\n      }),\r\n    });\r\n\r\n    if (!response.ok) {\r\n      return Promise.reject(response);\r\n    }\r\n\r\n    const responseJson: { data: { caseNumber: string } } = await response.json();\r\n    if (responseJson.data) {\r\n      return Promise.resolve(responseJson.data);\r\n    }\r\n  } catch (err) {\r\n    const error = `Search operation failed for ${url}. Errors: ${err}`;\r\n    return Promise.reject(error);\r\n  }\r\n};\r\n\r\nexport const useSupportPage: UseSupportPage = ({ appStore, location, formattedLocale, countryCode }) => {\r\n  const { userContext } = appStore;\r\n  const [titleInput, setTitleInput] = useState('');\r\n  const [descriptionInput, setDescriptionInput] = useState('');\r\n  const [emailInput, setEmailInput] = useState(userContext?.email ?? '');\r\n  const [shouldRenderFailureMessage, setShouldRenderFailureMessage] = useState(false);\r\n  const [createdTicketCaseNumber, setCreatedTicketCaseNumber] = useState('');\r\n  const [isFormLoading, setIsFormLoading] = useState(false);\r\n  const puid = usePUID();\r\n  const emailRegex = /^[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,}$/i;\r\n  const isFormValid =\r\n    titleInput.length > 0 && descriptionInput.length > 0 && emailRegex.test(emailInput) && descriptionInput.length <= MAX_WORD_COUNT;\r\n\r\n  const onFormSubmit = async () => {\r\n    if (puid && userContext) {\r\n      setIsFormLoading(true);\r\n      setShouldRenderFailureMessage(false);\r\n      postFormSubmission({\r\n        title: titleInput,\r\n        description: descriptionInput,\r\n        email: emailInput,\r\n        puid,\r\n        userContext,\r\n        formattedLocale,\r\n        countryCode,\r\n      })\r\n        .then((data) => {\r\n          setCreatedTicketCaseNumber(data!.caseNumber);\r\n          // Accessibility enhancement: once submit success, focus on terms and conditions link\r\n          const termsAndConditionsLink = document?.querySelector?.('a[href=\"/terms-and-conditions\"]') as HTMLAnchorElement | null;\r\n          termsAndConditionsLink?.focus?.();\r\n        })\r\n        .catch((err) => {\r\n          Log.error(err);\r\n          setShouldRenderFailureMessage(true);\r\n        })\r\n        .finally(() => setIsFormLoading(false));\r\n    }\r\n  };\r\n\r\n  // Declare outside the function so it persists between calls\r\n  let debounceTimeout: NodeJS.Timeout | null = null;\r\n\r\n  const onDescriptionChange = (description: string) => {\r\n    const prevWords = descriptionInput.split(/\\s+/).filter(Boolean).length;\r\n    const newWords = description.split(/\\s+/).filter(Boolean).length;\r\n\r\n    if (newWords <= MAX_WORD_COUNT) {\r\n      setDescriptionInput(description);\r\n\r\n      // If word count changed (word completed or deleted)\r\n      if (prevWords !== newWords) {\r\n        // Force screen reader to re-announce by temporarily removing and re-adding the element\r\n        const wordCountElement = document.getElementById('description-word-count');\r\n        if (wordCountElement) {\r\n          const parent = wordCountElement.parentNode;\r\n          const nextSibling = wordCountElement.nextSibling;\r\n\r\n          // Clear any existing timeout before setting a new one\r\n          if (debounceTimeout) {\r\n            clearTimeout(debounceTimeout);\r\n          }\r\n\r\n          // Set new timeout\r\n          debounceTimeout = setTimeout(() => {\r\n            parent?.removeChild(wordCountElement);\r\n            parent?.insertBefore(wordCountElement, nextSibling);\r\n          }, 100);\r\n        }\r\n      }\r\n    }\r\n  };\r\n\r\n  usePreloadSVGImages([emailLogo, emailSentLogo]);\r\n\r\n  useEffect(() => {\r\n    onLayoutChanged(LayoutMode.Default);\r\n    /**\r\n     * remove required attribute from the form fields, this is for accessibility\r\n     * workaround that Edge is interacting with the required attribute with tooltip\r\n     * rendered unexpectedly. remove the required attribute to avoid the tooltip\r\n     * render by browser, in user perspective we have disabled submit button while\r\n     * inputs are empty and added required UX to support the experience. Tooltip is\r\n     * redundant in this case.\r\n     */\r\n    document.getElementById('supportTitleInput')?.removeAttribute('required');\r\n    document.getElementById('supportDescriptionInput')?.removeAttribute('required');\r\n    document.getElementById('supportEmailInput')?.removeAttribute('required');\r\n    // eslint-disable-next-line\r\n  }, []);\r\n\r\n  useEffect(() => {\r\n    if (shouldRenderFailureMessage) {\r\n      setShouldRenderFailureMessage(false);\r\n    }\r\n    // eslint-disable-next-line react-hooks/exhaustive-deps\r\n  }, [descriptionInput, titleInput, emailInput]);\r\n\r\n  useEffect(() => {\r\n    // Parse the query parameters\r\n    const queryParams = new URLSearchParams(location.search);\r\n    const subject = queryParams.get('subject');\r\n\r\n    // Set the form title if 'subject' query param exists\r\n    if (subject) {\r\n      setTitleInput(subject);\r\n    }\r\n  }, [location.search]); // Depend on 'search' part of the location object\r\n\r\n  return {\r\n    titleInput,\r\n    descriptionInput,\r\n    emailInput,\r\n    isFormValid,\r\n    shouldRenderFailureMessage,\r\n    createdTicketCaseNumber,\r\n    isFormLoading,\r\n    setTitleInput,\r\n    setEmailInput,\r\n    onDescriptionChange,\r\n    onFormSubmit,\r\n  };\r\n};\r\n","import { Announced, MessageBar, MessageBarType, PrimaryButton, Spinner, Text, TextField } from '@fluentui/react';\r\nimport React, { useEffect, useRef } from 'react';\r\nimport { FormattedMessage } from 'react-intl';\r\nimport { useI18n } from '../../../i18n/useI18n';\r\nimport { getAppStore } from '../../@data';\r\nimport { FormItem } from '../../components/Form';\r\nimport { Main } from '../../components/Main/Main';\r\nimport { Footer } from '../../layout/Footer/Footer';\r\nimport { InternationalizationLayout } from '../../layout/InternationalizationLayout';\r\nimport { injectRouterAndIntlWithObserver } from '../../utils';\r\nimport { getStore } from '../ad-management/Account/Settings/@data/store/store';\r\nimport emailLogo from './emailLogo.svg';\r\nimport emailSentLogo from './emailSentLogo.svg';\r\nimport messages from './messages';\r\nimport { classNames } from './styles';\r\nimport { ISupportPageProps } from './types';\r\nimport { MAX_WORD_COUNT, useSupportPage } from './useSupportPage';\r\n\r\nexport const SupportPage = injectRouterAndIntlWithObserver(function SupportPageComponent({ intl, location }: ISupportPageProps) {\r\n  const { formatMessage } = intl;\r\n  const appStore = getAppStore();\r\n  const { publisher, userContext } = appStore;\r\n  const { systemPreferences } = getStore().active;\r\n  const { formattedLocale, countryCode } = useI18n({ systemPreferences, publisher, userContext });\r\n  const {\r\n    emailInput,\r\n    titleInput,\r\n    descriptionInput,\r\n    isFormValid,\r\n    isFormLoading,\r\n    shouldRenderFailureMessage,\r\n    createdTicketCaseNumber,\r\n    onDescriptionChange,\r\n    onFormSubmit,\r\n    setTitleInput,\r\n    setEmailInput,\r\n  } = useSupportPage({ appStore, location, formattedLocale, countryCode });\r\n  const {\r\n    root,\r\n    pageTitle,\r\n    formWrapper,\r\n    emailIcon,\r\n    submitButton,\r\n    errorBannerWrapper,\r\n    formSuccessHead,\r\n    formInputStyles,\r\n    footerWrapper,\r\n    descriptionWordCountWrapper,\r\n    transparentText,\r\n  } = classNames;\r\n\r\n  // Ref for focusing on the success message\r\n  const successMessageRef = useRef(null);\r\n\r\n  // Use effect to focus on the success message when a ticket is created\r\n  useEffect(() => {\r\n    if (createdTicketCaseNumber && successMessageRef.current) {\r\n      (successMessageRef.current as HTMLElement).focus();\r\n    }\r\n  }, [createdTicketCaseNumber]);\r\n\r\n  return (\r\n    <div className={footerWrapper}>\r\n      <InternationalizationLayout />\r\n      <Main className={root}>\r\n        <div className={formWrapper}>\r\n          <h1 className={pageTitle}>{formatMessage(createdTicketCaseNumber ? messages.formCreationSuccessTitle : messages.formTitle)}</h1>\r\n          <img\r\n            className={emailIcon}\r\n            src={createdTicketCaseNumber ? emailSentLogo : emailLogo}\r\n            alt={formatMessage(createdTicketCaseNumber ? messages.formCreationSuccessTitle : messages.formTitle)}\r\n          />\r\n          {!createdTicketCaseNumber ? (\r\n            <>\r\n              <FormItem styles={{ root: formInputStyles }}>\r\n                <TextField\r\n                  id=\"supportEmailInput\"\r\n                  autoComplete=\"off\"\r\n                  disabled={isFormLoading}\r\n                  label={formatMessage(messages.formEmailInputHeader)}\r\n                  required={true}\r\n                  value={emailInput}\r\n                  onChange={(_, value: string) => setEmailInput(value)}\r\n                  placeholder={formatMessage(messages.formEmailInputPlaceholder)}\r\n                  aria-label={formatMessage(messages.formEmailInputPlaceholder)}\r\n                />\r\n              </FormItem>\r\n              <FormItem styles={{ root: formInputStyles }}>\r\n                <TextField\r\n                  id=\"supportTitleInput\"\r\n                  autoComplete=\"off\"\r\n                  disabled={isFormLoading}\r\n                  label={formatMessage(messages.formTitleInputHeader)}\r\n                  required={true}\r\n                  value={titleInput}\r\n                  onChange={(_, value: string) => setTitleInput(value)}\r\n                  placeholder={formatMessage(messages.formTitleInputPlaceholder)}\r\n                  aria-label={formatMessage(messages.formTitleInputPlaceholder)}\r\n                />\r\n              </FormItem>\r\n              <FormItem styles={{ root: formInputStyles }}>\r\n                <TextField\r\n                  id=\"supportDescriptionInput\"\r\n                  autoComplete=\"off\"\r\n                  disabled={isFormLoading}\r\n                  multiline\r\n                  label={formatMessage(messages.formDescriptionInputHeader)}\r\n                  required={true}\r\n                  resizable={false}\r\n                  value={descriptionInput}\r\n                  onChange={(e, value: string) => onDescriptionChange(value)}\r\n                  placeholder={formatMessage(messages.formDescriptionInputPlaceholder)}\r\n                  aria-describedby=\"description-word-count\"\r\n                />\r\n                <Text id=\"description-word-count\" className={descriptionWordCountWrapper} aria-atomic=\"true\">\r\n                  {formatMessage(\r\n                    MAX_WORD_COUNT - descriptionInput.split(/\\s+/).filter(Boolean).length === 1\r\n                      ? messages.formDescriptionWordCount\r\n                      : messages.formDescriptionWordsCount,\r\n                    { count: MAX_WORD_COUNT - descriptionInput.split(/\\s+/).filter(Boolean).length }\r\n                  )}\r\n                </Text>\r\n              </FormItem>\r\n            </>\r\n          ) : (\r\n            <>\r\n              <div aria-live=\"assertive\">\r\n                <Announced message={formatMessage(messages.formCreationSuccessTitle)} />\r\n                <Announced message={formatMessage(messages.formCreationSuccessDetails, { ticketNumber: createdTicketCaseNumber })} />\r\n              </div>\r\n              <FormItem\r\n                className={formSuccessHead}\r\n                styles={{ root: formInputStyles }}\r\n                tabIndex={-1} // Make the FormItem focusable\r\n                // @ts-ignore\r\n                ref={successMessageRef} // Attach the ref to focus this item\r\n                role=\"alert\" // Ensure screen readers treat this as an alert\r\n              >\r\n                <Text>\r\n                  <span className={transparentText}>\r\n                    <FormattedMessage {...messages.formCreationSuccessTitle} />\r\n                  </span>\r\n                  <FormattedMessage {...messages.formCreationSuccessDetails} values={{ ticketNumber: createdTicketCaseNumber }} />\r\n                </Text>\r\n              </FormItem>\r\n            </>\r\n          )}\r\n\r\n          {shouldRenderFailureMessage && (\r\n            <FormItem className={errorBannerWrapper} styles={{ root: formInputStyles }}>\r\n              <MessageBar messageBarType={MessageBarType.error} messageBarIconProps={{ iconName: 'StatusErrorFull' }}>\r\n                <FormattedMessage\r\n                  {...messages.formCreationFailedDetails}\r\n                  values={{\r\n                    msgTitle: <b>{formatMessage(messages.formCreationFailedTitle)}</b>,\r\n                  }}\r\n                />\r\n              </MessageBar>\r\n            </FormItem>\r\n          )}\r\n\r\n          {!createdTicketCaseNumber && (\r\n            <PrimaryButton\r\n              ariaLabel={formatMessage(messages.formSubmitButton)}\r\n              className={submitButton}\r\n              disabled={!isFormValid || isFormLoading}\r\n              onClick={onFormSubmit}\r\n              aria-live=\"assertive\"\r\n            >\r\n              {isFormLoading ? (\r\n                <Spinner ariaLabel={formatMessage(messages.formSubmitButtonLoading)} />\r\n              ) : (\r\n                formatMessage(messages.formSubmitButton)\r\n              )}\r\n            </PrimaryButton>\r\n          )}\r\n        </div>\r\n      </Main>\r\n      <Footer />\r\n    </div>\r\n  );\r\n});\r\n","import { Spinner } from '@fluentui/react';\r\nimport { observer } from 'mobx-react-lite';\r\nimport React, { useEffect, useMemo } from 'react';\r\nimport { useI18n } from '../../../i18n/useI18n';\r\nimport { getAppStore, isTythonSelfServeUser } from '../../@data';\r\nimport { isLocationPubCenter } from '../../utils/UrlUtils';\r\nimport { getStore } from '../ad-management/Account/Settings/@data/store/store';\r\nimport { onFetchTnC } from './@data';\r\nimport { getStore as getTnCStore } from './@data/store/store';\r\n\r\nexport const TermsNConditionsPage = observer(() => {\r\n  const { content, nonTythonContent, isDataLoaded } = getTnCStore();\r\n  const { userContext, publisher } = getAppStore();\r\n  const { systemPreferences } = getStore().active;\r\n  const { locale } = useI18n({ systemPreferences, publisher, userContext });\r\n\r\n  const tncContentString = useMemo(() => {\r\n    // when there is no user login, we will render TnC depends on window url\r\n    if (!userContext && isDataLoaded) {\r\n      return isLocationPubCenter() ? nonTythonContent : content;\r\n    }\r\n    // when user is logged in, we will render TnC depends on user tython self serve flag\r\n    if (userContext && isDataLoaded) {\r\n      return isTythonSelfServeUser() ? content : nonTythonContent;\r\n    }\r\n\r\n    return undefined;\r\n    // eslint-disable-next-line react-hooks/exhaustive-deps\r\n  }, [userContext, isDataLoaded]);\r\n\r\n  useEffect(() => {\r\n    onFetchTnC(locale);\r\n  }, [locale]);\r\n\r\n  return tncContentString ? (\r\n    <div style={{ padding: 12, position: 'absolute' }}>\r\n      <div style={{ padding: 12, border: '1px solid', borderRadius: 3 }}>\r\n        <div\r\n          dangerouslySetInnerHTML={{\r\n            __html: isLocationPubCenter()\r\n              ? tncContentString\r\n                  ?.replaceAll('Monetize Now', 'pubCenter')\r\n                  ?.replaceAll('MONETIZE NOW', 'PUBCENTER')\r\n                  ?.replaceAll('monetizenow', 'pubcenter')\r\n              : tncContentString,\r\n          }}\r\n        />\r\n      </div>\r\n    </div>\r\n  ) : (\r\n    <div style={{ width: '100%', height: '100%', display: 'flex', justifyContent: 'center' }}>\r\n      <Spinner size={3} />\r\n    </div>\r\n  );\r\n});\r\n","import { MAIN_CONTENT_ID } from '../constants/AppConstants';\r\n\r\nexport function handleSkipToMainContentClick(): void {\r\n  const mainContentNode = document.getElementById(MAIN_CONTENT_ID);\r\n  if (mainContentNode) {\r\n    mainContentNode.tabIndex = -1;\r\n    mainContentNode.focus();\r\n    mainContentNode.removeAttribute('tabIndex');\r\n  }\r\n}\r\n","import { defineMessages } from 'react-intl';\r\nexport default defineMessages({\r\n  domainStringValidator: {\r\n    id: 'yup.domain',\r\n    defaultMessage: 'Invalid domain name',\r\n  },\r\n  duplicateDomainStringValidator: {\r\n    id: 'yup.duplicateDomain',\r\n    defaultMessage: 'Site domain name already exists',\r\n  },\r\n  nameStringValidator: {\r\n    id: 'yup.name',\r\n    defaultMessage: 'Invalid name',\r\n  },\r\n  duplicateNameStringValidator: {\r\n    id: 'yup.duplicateName',\r\n    defaultMessage: 'Site name already exists',\r\n  },\r\n});\r\n","import { DefaultButton } from '@fluentui/react';\r\nimport * as React from 'react';\r\nimport { InjectedIntlProps, injectIntl } from 'react-intl';\r\nimport { Redirect, Route, RouteComponentProps, Switch, withRouter } from 'react-router-dom';\r\nimport './@data/mutators';\r\nimport './@data/orchestrators';\r\nimport appMessages from './App.messages';\r\nimport { getClassNames } from './App.styles';\r\nimport { AuthenticatedRoute } from './AuthenticatedRoute';\r\nimport {\r\n  DefaultRoute,\r\n  LandingPageRoute,\r\n  LogInPageRoute,\r\n  NoAccessErrorPageRoute,\r\n  SupportPageRoute,\r\n  UnauthorizedInternalUserPageRoute,\r\n  UserDoesNotExistErrorPageRoute,\r\n  getGlobalRoutes,\r\n} from './Routes';\r\nimport { IRoute } from './Routes.types';\r\nimport { TNC_HREF_PATH } from './constants/AppConstants';\r\nimport { Page } from './layout/PageLayout/PageLayout';\r\nimport { GlobalSearchResultRouter } from './pages/GlobalSearch/GlobalSearchResultRouter';\r\nimport { AboutUsPage } from './pages/about-us/AboutUsPage';\r\nimport AdTypePage from './pages/ad-management/Ads/AdTypePage';\r\nimport InventoryTypePage from './pages/ad-management/Inventory/InventoryTypePage';\r\nimport { UnauthorizedInternalUserPage, UserDoesNotExistErrorPage } from './pages/error-pages/InvalidUser';\r\nimport { NoAccessErrorPage } from './pages/error-pages/InvalidUser/NoAccessPage/NoAccesPage';\r\nimport { LandingPage } from './pages/landing-page/LandingPage';\r\nimport { LoginPage } from './pages/login/LoginPage';\r\nimport { LoginPageView } from './pages/login/components/LoginPageView';\r\nimport { AcceptInvitePage } from './pages/partner-management/User/AcceptInvite/AcceptInvite';\r\nimport { SupportPage } from './pages/support';\r\nimport { TermsNConditionsPage } from './pages/terms-and-conditions/TermsNConditionsPage';\r\nimport { handleSkipToMainContentClick } from './utils/DomUtils';\r\nimport { isLocationPubCenter } from './utils/UrlUtils';\r\nimport { getTythonAdsCreationPageRoute, getTythonInventoryCreationPageRoute } from './utils/routeUtils';\r\nimport { validatorFactory } from './utils/validation/ValidatorFactory';\r\n\r\nexport interface IAppProps extends RouteComponentProps, InjectedIntlProps {}\r\n\r\nexport const ApplicationRoute = withRouter(\r\n  injectIntl(\r\n    // NOTE: Use named classes for easier debugging. This name would appear in the React DevTools and error traces too.\r\n    class AppRoute extends React.Component<IAppProps> {\r\n      constructor(props: IAppProps) {\r\n        super(props);\r\n        validatorFactory(this.props.intl);\r\n      }\r\n\r\n      public render(): JSX.Element {\r\n        const { formatMessage } = this.props.intl;\r\n        const classNames = getClassNames();\r\n\r\n        return (\r\n          <>\r\n            <DefaultButton\r\n              onClick={handleSkipToMainContentClick}\r\n              text={formatMessage(appMessages.skipToMainContent)}\r\n              className={classNames.skipButton}\r\n            />\r\n            <Switch>\r\n              {isLocationPubCenter() ? <Redirect exact path=\"/\" to={DefaultRoute} /> : <Route exact path=\"/\" component={AboutUsPage} />}\r\n              <Route path={LogInPageRoute} component={LoginPage} />\r\n              <Route path={'/loginV2'} component={LoginPageView} />\r\n              {/* <Route path={SignUpPageRoute} component={SignUpPage} /> */}\r\n              <Route path={LandingPageRoute} component={LandingPage} />\r\n              <Route path={UserDoesNotExistErrorPageRoute} component={UserDoesNotExistErrorPage} />\r\n              <Route path={NoAccessErrorPageRoute} component={NoAccessErrorPage} />\r\n              <Route path={UnauthorizedInternalUserPageRoute} component={UnauthorizedInternalUserPage} />\r\n              <Route path={TNC_HREF_PATH} component={TermsNConditionsPage} />\r\n              <Page {...this.props}>\r\n                <Switch>\r\n                  <Route path=\"/acceptUserInvite/code=:invitationcode/locale=:invitationLocale\" component={AcceptInvitePage} />\r\n                  <Route path=\"/acceptUserInvite/code=:invitationcode\" component={AcceptInvitePage} />\r\n                  <AuthenticatedRoute\r\n                    path={getTythonInventoryCreationPageRoute()}\r\n                    key={getTythonInventoryCreationPageRoute()}\r\n                    component={InventoryTypePage}\r\n                    routeProps={this.props}\r\n                  />\r\n                  <AuthenticatedRoute\r\n                    path={getTythonAdsCreationPageRoute()}\r\n                    key={getTythonAdsCreationPageRoute()}\r\n                    component={AdTypePage}\r\n                    routeProps={this.props}\r\n                  />\r\n                  {getGlobalRoutes().map((route: IRoute) => (\r\n                    <AuthenticatedRoute key={route.key} path={route.key} component={route.component} routeProps={this.props} />\r\n                  ))}\r\n                  <AuthenticatedRoute\r\n                    key={SupportPageRoute}\r\n                    path={SupportPageRoute}\r\n                    component={SupportPage as React.ComponentType<{}>}\r\n                    routeProps={this.props}\r\n                  />\r\n                  <AuthenticatedRoute key=\"/search\" path=\"/search\" component={GlobalSearchResultRouter} routeProps={this.props} />\r\n                  <Redirect path=\"*\" to={DefaultRoute} />\r\n                </Switch>\r\n              </Page>\r\n            </Switch>\r\n          </>\r\n        );\r\n      }\r\n    }\r\n  )\r\n);\r\n","import { InjectedIntl } from 'react-intl';\r\nimport { domainInitialize, duplicateDomainInitialize, duplicateNameInitialize, nameInitialize } from './DomainStringValidator';\r\nimport messages from './validation.messages';\r\n\r\nexport function validatorFactory(intl: InjectedIntl) {\r\n  domainInitialize(intl.formatMessage(messages.domainStringValidator));\r\n  duplicateDomainInitialize(intl.formatMessage(messages.duplicateDomainStringValidator));\r\n  nameInitialize(intl.formatMessage(messages.nameStringValidator));\r\n  duplicateNameInitialize(intl.formatMessage(messages.duplicateNameStringValidator));\r\n}\r\n","import { observer } from 'mobx-react';\r\nimport * as React from 'react';\r\nimport { InjectedIntlProps, IntlProvider } from 'react-intl';\r\nimport { RouteComponentProps, withRouter } from 'react-router-dom';\r\nimport { useI18n } from '../i18n/useI18n';\r\nimport { getAppStore } from './@data';\r\nimport './@data/mutators';\r\nimport './@data/orchestrators';\r\nimport { ApplicationRoute } from './ApplicationRoute';\r\nimport useWindowsAppFeatureFlag from './hooks/useWindowsAppFeatureFlag';\r\nimport { getStore } from './pages/ad-management/Account/Settings/@data/store/store';\r\n\r\nexport interface IAppProps extends RouteComponentProps, InjectedIntlProps {}\r\n\r\nexport const App = withRouter(\r\n  observer(() => {\r\n    const { systemPreferences } = getStore().active;\r\n    const { publisher, userContext } = getAppStore();\r\n    const { locale, messages } = useI18n({ systemPreferences, publisher, userContext });\r\n    useWindowsAppFeatureFlag(userContext, publisher);\r\n\r\n    return (\r\n      <IntlProvider locale={locale} messages={messages} onError={() => null}>\r\n        <ApplicationRoute />\r\n      </IntlProvider>\r\n    );\r\n  })\r\n);\r\n","// This optional code is used to register a service worker.\r\n// register() is not called by default.\r\n\r\nimport { Log } from \"./logging/src/Log\";\r\n\r\n// This lets the app load faster on subsequent visits in production, and gives\r\n// it offline capabilities. However, it also means that developers (and users)\r\n// will only see deployed updates on subsequent visits to a page, after all the\r\n// existing tabs open on the page have been closed, since previously cached\r\n// resources are updated in the background.\r\n\r\n// To learn more about the benefits of this model and instructions on how to\r\n// opt-in, read http://bit.ly/CRA-PWA\r\n\r\nconst isLocalhost = Boolean(\r\n  window.location.hostname === 'localhost' ||\r\n    // [::1] is the IPv6 localhost address.\r\n    window.location.hostname === '[::1]' ||\r\n    // 127.0.0.1/8 is considered localhost for IPv4.\r\n    window.location.hostname.match(\r\n      /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\r\n    )\r\n);\r\n\r\ntype Config = {\r\n  onSuccess?: (registration: ServiceWorkerRegistration) => void;\r\n  onUpdate?: (registration: ServiceWorkerRegistration) => void;\r\n};\r\n\r\nexport function register(config?: Config) {\r\n  if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\r\n    // The URL constructor is available in all browsers that support SW.\r\n    const publicUrl = new URL(\r\n      (process as { env: { [key: string]: string } }).env.PUBLIC_URL,\r\n      window.location.href\r\n    );\r\n    if (publicUrl.origin !== window.location.origin) {\r\n      // Our service worker won't work if PUBLIC_URL is on a different origin\r\n      // from what our page is served on. This might happen if a CDN is used to\r\n      // serve assets; see https://github.com/facebook/create-react-app/issues/2374\r\n      return;\r\n    }\r\n\r\n    window.addEventListener('load', () => {\r\n      const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\r\n\r\n      if (isLocalhost) {\r\n        // This is running on localhost. Let's check if a service worker still exists or not.\r\n        checkValidServiceWorker(swUrl, config);\r\n\r\n        // Add some additional logging to localhost, pointing developers to the\r\n        // service worker/PWA documentation.\r\n        navigator.serviceWorker.ready.then(() => {\r\n          Log.info(\r\n            'This web app is being served cache-first by a service ' +\r\n              'worker. To learn more, visit http://bit.ly/CRA-PWA'\r\n          );\r\n        });\r\n      } else {\r\n        // Is not localhost. Just register service worker\r\n        registerValidSW(swUrl, config);\r\n      }\r\n    });\r\n  }\r\n}\r\n\r\nfunction registerValidSW(swUrl: string, config?: Config) {\r\n  navigator.serviceWorker\r\n    .register(swUrl)\r\n    .then(registration => {\r\n      registration.onupdatefound = () => {\r\n        const installingWorker = registration.installing;\r\n        if (!installingWorker) {\r\n          return;\r\n        }\r\n        installingWorker.onstatechange = () => {\r\n          if (installingWorker.state === 'installed') {\r\n            if (navigator.serviceWorker.controller) {\r\n              // At this point, the updated precached content has been fetched,\r\n              // but the previous service worker will still serve the older\r\n              // content until all client tabs are closed.\r\n              Log.info(\r\n                'New content is available and will be used when all ' +\r\n                  'tabs for this page are closed. See http://bit.ly/CRA-PWA.'\r\n              );\r\n\r\n              // Execute callback\r\n              if (config && config.onUpdate) {\r\n                config.onUpdate(registration);\r\n              }\r\n            } else {\r\n              // At this point, everything has been precached.\r\n              // It's the perfect time to display a\r\n              // \"Content is cached for offline use.\" message.\r\n              Log.info('Content is cached for offline use.');\r\n\r\n              // Execute callback\r\n              if (config && config.onSuccess) {\r\n                config.onSuccess(registration);\r\n              }\r\n            }\r\n          }\r\n        };\r\n      };\r\n    })\r\n    .catch(error => {\r\n      Log.error(`Error during service worker registration: ${JSON.stringify(error)}`);\r\n    });\r\n}\r\n\r\nfunction checkValidServiceWorker(swUrl: string, config?: Config) {\r\n  // Check if the service worker can be found. If it can't reload the page.\r\n  fetch(swUrl)\r\n    .then(response => {\r\n      // Ensure service worker exists, and that we really are getting a JS file.\r\n      const contentType = response.headers.get('content-type');\r\n      if (\r\n        response.status === 404 ||\r\n        (contentType && contentType.indexOf('javascript') === -1)\r\n      ) {\r\n        // No service worker found. Probably a different app. Reload the page.\r\n        navigator.serviceWorker.ready.then(registration => {\r\n          registration.unregister().then(() => {\r\n            window.location.reload();\r\n          });\r\n        });\r\n      } else {\r\n        // Service worker found. Proceed as normal.\r\n        registerValidSW(swUrl, config);\r\n      }\r\n    })\r\n    .catch(() => {\r\n      Log.info(\r\n        'No internet connection found. App is running in offline mode.'\r\n      );\r\n    });\r\n}\r\n\r\nexport function unregister() {\r\n  if ('serviceWorker' in navigator) {\r\n    navigator.serviceWorker.ready.then(registration => {\r\n      registration.unregister();\r\n    });\r\n  }\r\n}\r\n","import { ThemeProvider } from '@fluentui/react';\r\nimport { QueryClient } from '@tanstack/query-core';\r\nimport { QueryClientProvider } from '@tanstack/react-query';\r\nimport { ReactQueryDevtools } from '@tanstack/react-query-devtools';\r\nimport * as React from 'react';\r\nimport * as ReactDOM from 'react-dom';\r\nimport { BrowserRouter } from 'react-router-dom';\r\nimport { addThreatMetrixScripts } from './app/@data/services/OneVetIntegrationService';\r\nimport { tythonRedirectionUtils } from './app/@data/utils/redirectionUtils';\r\nimport { App } from './app/App';\r\nimport './index.css';\r\nimport { Log } from './logging/src/Log';\r\nimport * as serviceWorker from './serviceWorker';\r\nimport { PubcenterCustomizations } from './theme';\r\nconst queryClient = new QueryClient();\r\n\r\nReactDOM.render(\r\n  <QueryClientProvider client={queryClient}>\r\n    <ReactQueryDevtools initialIsOpen={false} />\r\n    <BrowserRouter>\r\n      <ThemeProvider theme={PubcenterCustomizations} style={{ height: 'inherit' }}>\r\n        <App />\r\n      </ThemeProvider>\r\n    </BrowserRouter>\r\n  </QueryClientProvider>,\r\n  document.getElementById('root') as HTMLElement\r\n);\r\n\r\n// If you want your app to work offline and load faster, you can change\r\n// unregister() to register() below. Note this comes with some pitfalls.\r\n// Learn more about service workers: http://bit.ly/CRA-PWA\r\nserviceWorker.unregister();\r\n\r\n// This triggers the singleton 'Log' class and provides a single instance of\r\n// the class that can be used anywhere in the UI code. 'Log.write' can now be\r\n// used to write to ARIA and console\r\nLog.getInstance();\r\n\r\naddThreatMetrixScripts();\r\n\r\n/**\r\n * Add a iframe to transfer localstorage from pubcenter to tython domain\r\n * In the new domain, add a listener to receive and set the localstorage\r\n */\r\ntythonRedirectionUtils();\r\n","import { PUBCENTER_DOMAINS, PUBCENTER_TYTHON_DOMAIN_MAPPING } from '../../constants';\r\nimport { isLocationPubCenter } from '../../utils';\r\n\r\nexport function tythonRedirectionUtils() {\r\n  if (!isLocationPubCenter()) {\r\n    window.addEventListener('message', function (e) {\r\n      if (PUBCENTER_DOMAINS.includes(e.origin) && e.data) {\r\n        const localStorageCache = JSON.parse(e.data);\r\n\r\n        Object.keys(localStorageCache)?.forEach((key) => {\r\n          localStorage.setItem(key, localStorageCache[key]);\r\n        });\r\n      }\r\n    });\r\n  } else {\r\n    const newDomainOrigin = PUBCENTER_TYTHON_DOMAIN_MAPPING[window.location.host];\r\n    const iframe = document.createElement('iframe');\r\n    iframe.id = 'redirectionIframe';\r\n    iframe.src = newDomainOrigin;\r\n    iframe.style.display = 'none';\r\n    iframe.style.width = '0';\r\n    iframe.style.height = '0';\r\n\r\n    document.body.appendChild(iframe);\r\n  }\r\n}\r\n"],"sourceRoot":""}