{"version":3,"file":"static/js/performance-page.5b40e5bd.chunk.js","mappings":"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","sources":["../../../../node_modules/.pnpm/@bingads-webui-cc-react+io-notifications@1.1.5_@types+react-dom@17.0.22_@types+react@17.0.69/node_modules/@bingads-webui-cc-react/io-notifications/src/styles.js","../../../../node_modules/.pnpm/@bingads-webui-cc-react+io-notifications@1.1.5_@types+react-dom@17.0.22_@types+react@17.0.69/node_modules/@bingads-webui-cc-react/io-notifications/src/io-recommendation.js","../../../../node_modules/.pnpm/@bingads-webui-cc-react+io-notifications@1.1.5_@types+react-dom@17.0.22_@types+react@17.0.69/node_modules/@bingads-webui-cc-react/io-notifications/src/constants.js","../../../../node_modules/.pnpm/@bingads-webui-cc-react+io-notifications@1.1.5_@types+react-dom@17.0.22_@types+react@17.0.69/node_modules/@bingads-webui-cc-react/io-notifications/src/io-warning-account.js","../../../../node_modules/.pnpm/@bingads-webui-cc-react+io-notifications@1.1.5_@types+react-dom@17.0.22_@types+react@17.0.69/node_modules/@bingads-webui-cc-react/io-notifications/src/io-warning-customer.js","../../../../node_modules/.pnpm/@bingads-webui-cc-react+io-notifications@1.1.5_@types+react-dom@17.0.22_@types+react@17.0.69/node_modules/@bingads-webui-cc-react/io-notifications/src/helper.js","../../../../node_modules/.pnpm/@bingads-webui-cc-react+io-notifications@1.1.5_@types+react-dom@17.0.22_@types+react@17.0.69/node_modules/@bingads-webui-cc-react/io-notifications/src/io-notifications.js","../../../node_modules/@bingads-webui-campaign-react/performance-page/src/column-action-events.js","../../../node_modules/@bingads-webui-campaign-react/performance-page/src/performance-page.js","../../../node_modules/@bingads-webui-campaign-react/performance-page/src/toolbar-config.js","../../../node_modules/@bingads-webui-campaign-react/performance-page/src/performance-page-styles.js","feature-bootstrap/performance-page.js"],"sourcesContent":["import { createUseStyles } from 'react-jss';\r\nimport { CommunicationColors } from '@bingads-webui-react/fabric-control';\r\n\r\nexport const useStyles = createUseStyles({\r\n RecommendationMessageBar: {\r\n background: CommunicationColors.tint40,\r\n margin: '16px auto',\r\n padding: '0 8px',\r\n backgroundClip: 'content-box',\r\n },\r\n WarningMessageBar: {\r\n margin: '16px auto',\r\n padding: '0 8px',\r\n backgroundClip: 'content-box',\r\n },\r\n Icon: {\r\n color: CommunicationColors.primary,\r\n },\r\n RecommendationMessageText: {\r\n fontSize: 'small',\r\n },\r\n WarningMessageText: {\r\n fontSize: 'small',\r\n },\r\n Container: {\r\n minWidth: '950px',\r\n },\r\n});\r\n","import React, { useContext, useState } from 'react';\r\nimport _ from 'underscore';\r\nimport PropTypes from 'prop-types';\r\nimport classnames from 'classnames';\r\n\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { MessageBar, MessageBarButton } from '@bingads-webui-react/fabric-control';\r\n\r\nimport { useStyles } from './styles';\r\n\r\nexport function IORecommendationMessageBar({\r\n numOfRecommendations, buttonOnClick, dismissOnClick, recommendationIds,\r\n}) {\r\n const styles = useStyles();\r\n const i18n = useContext(I18nContext);\r\n const [show, setShow] = useState(numOfRecommendations > 0);\r\n const recommendationText = i18n.getString(\r\n _TL_('We\\'ve noticed a trend in your insertion order frequency and spend rate, and provide {{numOfRecommendations}} recommendation(s) for you.'),\r\n { numOfRecommendations }\r\n );\r\n return (\r\n show &&\r\n {\r\n buttonOnClick({ recommendationIds });\r\n }}\r\n >\r\n {i18n.getString(_TL_('View details'))}\r\n \r\n }\r\n isMultiline={false}\r\n messageBarIconProps={{\r\n iconName: 'lightbulb',\r\n className: `icon-lightbulb ${styles.Icon}`,\r\n }}\r\n onDismiss={() => {\r\n setShow(false);\r\n dismissOnClick();\r\n }}\r\n >\r\n \r\n {i18n.getString(_TL_('Recommendations: '))}\r\n {recommendationText}\r\n \r\n \r\n );\r\n}\r\n\r\nIORecommendationMessageBar.defaultProps = {\r\n numOfRecommendations: 0,\r\n buttonOnClick: _.noop,\r\n dismissOnClick: _.noop,\r\n};\r\n\r\nIORecommendationMessageBar.propTypes = {\r\n numOfRecommendations: PropTypes.number,\r\n buttonOnClick: PropTypes.func,\r\n dismissOnClick: PropTypes.func,\r\n};\r\n","import { Constants } from '@bingads-webui-clientcenter/entity-utils';\r\n\r\nexport const IORecommendationTypesToFetch = [\r\n Constants.RecommendationType.InsertionOrderCreation,\r\n Constants.RecommendationType.InsertionOrderUpdate,\r\n Constants.RecommendationType.RecurringInsertionOrderAdd,\r\n];\r\n\r\nexport const AccountPausedWarningType = [\r\n Constants.NotificationType.InsertionOrderBalanceDepletedEvent,\r\n Constants.NotificationType.InsertionOrderExpiredEvent,\r\n];\r\n\r\nexport const IOExpiringWarningType = [\r\n Constants.NotificationType.InsertionOrderExpiringUrgentEvent,\r\n];\r\n\r\nexport const IOExhaustingWarningType = [\r\n Constants.NotificationType.InsertionOrderExhaustingUrgentEvent,\r\n];\r\n\r\nconst LogsPrefix = 'IONotifications';\r\nexport const LogsScenario = {\r\n Default: LogsPrefix,\r\n Displayed: `${LogsPrefix}_Displayed`,\r\n BillingSummaryDisplayed: `${LogsPrefix}_BillingSummaryDisplayed`,\r\n AccountPerformanceDisplayed: `${LogsPrefix}_AccountPerformanceDisplayed`,\r\n AccountPausedWarningDismiss: `${LogsPrefix}_AccountPausedWarningDismiss`,\r\n CustomerExpiringWarningDismiss: `${LogsPrefix}_CustomerExpiringWarningDismiss`,\r\n CustomerExhaustingWarningDismiss: `${LogsPrefix}_CustomerExhaustingWarningDismiss`,\r\n AccountExpiringWarningDismiss: `${LogsPrefix}_AccountExpiringWarningDismiss`,\r\n AccountExhaustingWarningDismiss: `${LogsPrefix}_AccountExhaustingWarningDismiss`,\r\n RecommendationDismiss: `${LogsPrefix}_RecommendationDismiss`,\r\n AccountPausedWarningJump: `${LogsPrefix}_AccountPausedWarningJump`,\r\n CustomerExpiringWarningJump: `${LogsPrefix}_CustomerExpiringWarningJump`,\r\n CustomerExhaustingWarningJump: `${LogsPrefix}_CustomerExhaustingWarningJump`,\r\n AccountExpiringWarningJump: `${LogsPrefix}_AccountExpiringWarningJump`,\r\n AccountExhaustingWarningJump: `${LogsPrefix}_AccountExhaustingWarningJump`,\r\n RecommendationJump: `${LogsPrefix}_RecommendationJump`,\r\n};\r\n","import React, { useContext, useState } from 'react';\r\nimport _ from 'underscore';\r\nimport PropTypes from 'prop-types';\r\nimport classnames from 'classnames';\r\n\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { MessageBar, MessageBarButton, MessageBarType } from '@bingads-webui-react/fabric-control';\r\nimport { Constants } from '@bingads-webui-clientcenter/entity-utils';\r\n\r\nimport { IOExpiringWarningType, IOExhaustingWarningType } from './constants';\r\nimport { useStyles } from './styles';\r\n\r\nconst { IOFilter } = Constants;\r\n\r\nexport function IOWarningAccountMessageBar({\r\n isIOExpiring, isIOExhausting, buttonOnClick, dismissOnClick,\r\n}) {\r\n const styles = useStyles();\r\n const i18n = useContext(I18nContext);\r\n const [showIOExpiring, setShowIOExpiring] = useState(isIOExpiring);\r\n const [showIOExhausting, setShowIOExhausting] = useState(isIOExhausting);\r\n const IOExpiringText = i18n.getString(\r\n _TL_('Your account\\'s insertion order is expiring soon. To make sure your ads can display, please extend the end date or add new orders.')\r\n );\r\n const IOExhaustingText = i18n.getString(\r\n _TL_('The budget for your account\\'s insertion order will exhaust soon. To make sure your ads can display, please increase the budget or create new orders.')\r\n );\r\n return (\r\n <>\r\n {showIOExpiring &&\r\n {\r\n buttonOnClick({ iofilter: IOFilter.Expiring, warningsTypeIds: IOExpiringWarningType });\r\n }}\r\n >\r\n {i18n.getString(_TL_('Fix it'))}\r\n \r\n }\r\n isMultiline={false}\r\n onDismiss={() => {\r\n setShowIOExpiring(false);\r\n dismissOnClick(IOExpiringWarningType);\r\n }}\r\n >\r\n \r\n {i18n.getString(_TL_('Insertion Order Expiring: '))}\r\n {IOExpiringText}\r\n \r\n }\r\n {showIOExhausting &&\r\n {\r\n buttonOnClick({ iofilter: IOFilter.Exhausting, warningsTypeIds: IOExhaustingWarningType });\r\n }}\r\n >\r\n {i18n.getString(_TL_('Fix it'))}\r\n \r\n }\r\n isMultiline={false}\r\n onDismiss={() => {\r\n setShowIOExhausting(false);\r\n dismissOnClick(IOExhaustingWarningType);\r\n }}\r\n >\r\n \r\n {i18n.getString(_TL_('Insertion Order Exhausting: '))}\r\n {IOExhaustingText}\r\n \r\n }\r\n \r\n );\r\n}\r\n\r\nIOWarningAccountMessageBar.defaultProps = {\r\n isIOExhausting: false,\r\n isIOExpiring: false,\r\n buttonOnClick: _.noop,\r\n};\r\n\r\nIOWarningAccountMessageBar.propTypes = {\r\n isIOExhausting: PropTypes.bool,\r\n isIOExpiring: PropTypes.bool,\r\n buttonOnClick: PropTypes.func,\r\n};\r\n","import React, { useContext, useState } from 'react';\r\nimport _ from 'underscore';\r\nimport PropTypes from 'prop-types';\r\nimport classnames from 'classnames';\r\n\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { MessageBar, MessageBarButton, MessageBarType } from '@bingads-webui-react/fabric-control';\r\nimport { Constants } from '@bingads-webui-clientcenter/entity-utils';\r\n\r\nimport { useStyles } from './styles';\r\nimport { AccountPausedWarningType, IOExpiringWarningType, IOExhaustingWarningType } from './constants';\r\n\r\nconst { IOFilter } = Constants;\r\n\r\nexport function IOWarningCustomerMessageBar({\r\n numOfAccountPaused, numOfIOExpiring, numOfIOExhausting, buttonOnClick, dismissOnClick,\r\n}) {\r\n const styles = useStyles();\r\n const i18n = useContext(I18nContext);\r\n const [showAccountPaused, setShowAccountPaused] = useState(numOfAccountPaused > 0);\r\n const [showIOExpiring, setShowIOExpiring] = useState(numOfIOExpiring > 0);\r\n const [showIOExhausting, setShowIOExhausting] = useState(numOfIOExhausting > 0);\r\n const accountPausedText = numOfAccountPaused === 1 ?\r\n i18n.getString(\r\n _TL_('Your ads are not displaying because {{numOfAccountPaused}} of your accounts is paused due to their insertion orders have expired or exhausted.'),\r\n { numOfAccountPaused }\r\n ) :\r\n i18n.getString(\r\n _TL_('Your ads are not displaying because {{numOfAccountPaused}} of your accounts are paused due to their insertion orders have expired or exhausted.'),\r\n { numOfAccountPaused }\r\n );\r\n const IOExpiringText = numOfIOExpiring === 1 ?\r\n i18n.getString(\r\n _TL_('{{numOfIOExpiring}} of your account\\'s insertion orders is expiring soon. To make sure your ads can display, please extend the end date or add new orders.'),\r\n { numOfIOExpiring }\r\n ) :\r\n i18n.getString(\r\n _TL_('{{numOfIOExpiring}} of your accounts\\' insertion orders are expiring soon. To make sure your ads can display, please extend the end date or add new orders.'),\r\n { numOfIOExpiring }\r\n );\r\n const IOExhaustingText = numOfIOExhausting === 1 ?\r\n i18n.getString(\r\n _TL_('The budget for {{numOfIOExhausting}} of your account\\'s insertion orders will exhaust soon. To make sure your ads can display, please increase the budget or create new orders.'),\r\n { numOfIOExhausting }\r\n ) :\r\n i18n.getString(\r\n _TL_('The budget for {{numOfIOExhausting}} of your accounts\\' insertion orders will exhaust soon. To make sure your ads can display, please increase the budget or create new orders.'),\r\n { numOfIOExhausting }\r\n );\r\n\r\n return (\r\n <>\r\n {showAccountPaused &&\r\n {\r\n buttonOnClick({ iofilter: IOFilter.AccountPaused, warningsTypeIds: AccountPausedWarningType });\r\n }}\r\n >\r\n {i18n.getString(_TL_('Fix it'))}\r\n \r\n }\r\n isMultiline={false}\r\n onDismiss={() => {\r\n setShowAccountPaused(false);\r\n dismissOnClick(AccountPausedWarningType);\r\n }}\r\n >\r\n \r\n {i18n.getString(_TL_('Account Paused: '))}\r\n {accountPausedText}\r\n \r\n }\r\n {showIOExpiring &&\r\n {\r\n buttonOnClick({ iofilter: IOFilter.Expiring, warningsTypeIds: IOExpiringWarningType });\r\n }}\r\n >\r\n {i18n.getString(_TL_('Fix it'))}\r\n \r\n }\r\n isMultiline={false}\r\n onDismiss={() => {\r\n setShowIOExpiring(false);\r\n dismissOnClick(IOExpiringWarningType);\r\n }}\r\n >\r\n \r\n {i18n.getString(_TL_('Insertion Order Expiring: '))}\r\n {IOExpiringText }\r\n \r\n }\r\n {showIOExhausting &&\r\n {\r\n buttonOnClick({ iofilter: IOFilter.Exhausting, warningsTypeIds: IOExhaustingWarningType });\r\n }}\r\n >\r\n {i18n.getString(_TL_('Fix it'))}\r\n \r\n }\r\n isMultiline={false}\r\n onDismiss={() => {\r\n setShowIOExhausting(false);\r\n dismissOnClick(IOExhaustingWarningType);\r\n }}\r\n >\r\n \r\n {i18n.getString(_TL_('Insertion Order Exhausting: '))}\r\n {IOExhaustingText}\r\n \r\n }\r\n \r\n );\r\n}\r\n\r\nIOWarningCustomerMessageBar.defaultProps = {\r\n numOfAccountPaused: 0,\r\n numOfIOExpiring: 0,\r\n numOfIOExhausting: 0,\r\n buttonOnClick: _.noop,\r\n};\r\n\r\nIOWarningCustomerMessageBar.propTypes = {\r\n numOfAccountPaused: PropTypes.number,\r\n numOfIOExpiring: PropTypes.number,\r\n numOfIOExhausting: PropTypes.number,\r\n buttonOnClick: PropTypes.func,\r\n};\r\n","import URI from 'urijs';\r\nimport _ from 'underscore';\r\nimport { Constants } from '@bingads-webui-clientcenter/entity-utils';\r\nimport { getRoutePathById } from '@bingads-webui-react/with-site-map';\r\nimport { AccountPausedWarningType, IOExhaustingWarningType, IOExpiringWarningType, LogsScenario } from '../src/constants';\r\n\r\nexport const navigateToIOPage = ({\r\n uid, cid, aid, iofilter, history, siteMap,\r\n}) => {\r\n const siteMapId = 'insertionOrder';\r\n const path = getRoutePathById(siteMap, siteMapId);\r\n const uri = new URI(path);\r\n uri.addSearch({\r\n uid,\r\n cid,\r\n aid: aid || '',\r\n iofilter: iofilter || '',\r\n entrypoint: Constants.IOEntryPointAlias.IONotificationsEnhancement,\r\n });\r\n history.push({ pathname: uri.path(), search: uri.search() });\r\n};\r\n\r\nexport const getAccountIOWarningProps = ({\r\n warnings,\r\n}) => {\r\n const isIOExpiring = _.some(warnings, w => w.NotificationTypeId === Constants.NotificationType.InsertionOrderExpiringUrgentEvent);\r\n const isIOExhausting = _.some(warnings, w => w.NotificationTypeId === Constants.NotificationType.InsertionOrderExhaustingUrgentEvent);\r\n return { isIOExpiring, isIOExhausting };\r\n};\r\n\r\nexport const getCustomerIOWarningProps = ({\r\n warnings,\r\n}) => {\r\n let numOfIOBalanceDepleted = 0;\r\n let numOfIOExpired = 0;\r\n let numOfIOExpiring = 0;\r\n let numOfIOExhausting = 0;\r\n _.each(warnings, (warning) => {\r\n const notificationCount = warning.NotificationCount || 1;\r\n switch (warning.NotificationTypeId) {\r\n /*\r\n In the data from CCMT,\r\n for a customer, if more than 1 account under the customer\r\n have same type notification, MT will return {... NotificationCount: 3 ...}.\r\n But if only one account has this type notification,\r\n NotificationCount won't be included in the data.\r\n So I use `|| 1` here to avoid undefined.\r\n */\r\n case Constants.NotificationType.InsertionOrderBalanceDepletedEvent:\r\n numOfIOBalanceDepleted = notificationCount;\r\n break;\r\n case Constants.NotificationType.InsertionOrderExpiredEvent:\r\n numOfIOExpired = notificationCount;\r\n break;\r\n case Constants.NotificationType.InsertionOrderExpiringUrgentEvent:\r\n numOfIOExpiring = notificationCount;\r\n break;\r\n case Constants.NotificationType.InsertionOrderExhaustingUrgentEvent:\r\n numOfIOExhausting = notificationCount;\r\n break;\r\n default:\r\n break;\r\n }\r\n });\r\n return {\r\n numOfAccountPaused: numOfIOBalanceDepleted + numOfIOExpired,\r\n numOfIOExhausting,\r\n numOfIOExpiring,\r\n };\r\n};\r\n\r\nexport const getDismissWarningsInfo = ({ warnings, warningsTypeIdsToDismiss }) => {\r\n const uiDeliveryIds = [];\r\n const notificationTypeIds = [];\r\n const ids = [];\r\n _.each(warnings, (warning) => {\r\n if (warningsTypeIdsToDismiss.indexOf(warning.NotificationTypeId) !== -1) {\r\n if (warning.UIDeliveryId) {\r\n uiDeliveryIds.push(warning.UIDeliveryId);\r\n } else {\r\n notificationTypeIds.push(warning.NotificationTypeId);\r\n }\r\n ids.push(warning.id);\r\n }\r\n });\r\n return { ids, notificationTypeIds, uiDeliveryIds };\r\n};\r\n\r\nexport const getWarningsLogInfo = ({\r\n aid, warningsTypeIds, uiDeliveryIds, isDismiss,\r\n}) => {\r\n let scenarioName;\r\n const message = {\r\n warningTypes: warningsTypeIds,\r\n warningIds: uiDeliveryIds,\r\n };\r\n switch (warningsTypeIds) {\r\n case AccountPausedWarningType:\r\n scenarioName = isDismiss ? LogsScenario.AccountPausedWarningDismiss : LogsScenario.AccountPausedWarningJump;\r\n break;\r\n case IOExpiringWarningType:\r\n if (isDismiss) {\r\n scenarioName = aid > 0 ? LogsScenario.AccountExpiringWarningDismiss : LogsScenario.CustomerExpiringWarningDismiss;\r\n } else {\r\n scenarioName = aid > 0 ? LogsScenario.AccountExpiringWarningJump : LogsScenario.CustomerExpiringWarningJump;\r\n }\r\n break;\r\n case IOExhaustingWarningType:\r\n if (isDismiss) {\r\n scenarioName = aid > 0 ? LogsScenario.AccountExhaustingWarningDismiss : LogsScenario.CustomerExhaustingWarningDismiss;\r\n } else {\r\n scenarioName = aid > 0 ? LogsScenario.AccountExhaustingWarningJump : LogsScenario.CustomerExhaustingWarningJump;\r\n }\r\n break;\r\n default:\r\n return {};\r\n }\r\n return { scenarioName, message };\r\n};\r\n\r\nexport const logActionInfos = ({\r\n recommendationIds, warningsTypeIds, uiDeliveryIds, aid, logger, isDismiss,\r\n}) => {\r\n let logInfo;\r\n if (!_.isEmpty(recommendationIds)) {\r\n logInfo = {\r\n scenarioName: isDismiss ? LogsScenario.RecommendationDismiss : LogsScenario.RecommendationJump,\r\n message: {\r\n recommendationIds,\r\n },\r\n };\r\n } else if (!_.isEmpty(warningsTypeIds)) {\r\n logInfo = getWarningsLogInfo({\r\n aid, warningsTypeIds, uiDeliveryIds, isDismiss,\r\n });\r\n }\r\n if (logInfo && !(_.isEmpty(logInfo.scenarioName) || _.isEmpty(logInfo.message))) {\r\n logger.trace(logInfo);\r\n }\r\n};\r\n","import React, { useCallback, useMemo, useEffect, useState } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport _ from 'underscore';\r\nimport classnames from 'classnames';\r\nimport { Promise } from 'bluebird';\r\n\r\nimport { useJsData, useJsDataCallback } from '@bingads-webui-cc-react/js-data-rest';\r\nimport { useLoggerContext } from '@bingads-webui-cc-react/instrumentation-base';\r\nimport { getRoutePathById } from '@bingads-webui-react/with-site-map';\r\n\r\nimport { IORecommendationMessageBar } from './io-recommendation';\r\nimport { IOWarningAccountMessageBar } from './io-warning-account';\r\nimport { IOWarningCustomerMessageBar } from './io-warning-customer';\r\nimport { IORecommendationTypesToFetch, LogsScenario } from './constants';\r\nimport { useStyles } from './styles';\r\nimport { navigateToIOPage, getAccountIOWarningProps, getCustomerIOWarningProps, getDismissWarningsInfo, logActionInfos } from './helper';\r\n\r\nexport function IONotifications({\r\n uid, cid, aid, history, siteMap, containerClass,\r\n}) {\r\n const logger = useLoggerContext({ defaultScenarioName: LogsScenario.Default });\r\n const styles = useStyles();\r\n const [warningsTypeIdsToDismiss, setWarningsTypeIdsToDismiss] = useState([]);\r\n\r\n const { data: warnings, loading: isWarningsLoading } = useJsData(\r\n jsData => jsData.UnifiedQueueNotification.findAll({ cid, aid })\r\n , [cid, aid]\r\n );\r\n\r\n const { data: recommendations, loading: isRecommendationsLoading } = useJsData(\r\n jsData => jsData.Recommendation.findAll({\r\n cid,\r\n aid,\r\n types: IORecommendationTypesToFetch,\r\n }), [cid, aid]\r\n );\r\n\r\n const IOWarningProps = useMemo(() => (aid > 0 ?\r\n getAccountIOWarningProps({ warnings }) :\r\n getCustomerIOWarningProps({ warnings }))\r\n , [aid, warnings]);\r\n\r\n const recommendationIds = useMemo(() => _.sortBy(_.pluck(recommendations, 'id')), [recommendations]);\r\n\r\n const { execute: dismissWarnings } = useJsDataCallback(\r\n (jsData) => {\r\n const { ids, uiDeliveryIds, notificationTypeIds } = getDismissWarningsInfo({ warnings, warningsTypeIdsToDismiss });\r\n\r\n logActionInfos({\r\n aid, warningsTypeIds: warningsTypeIdsToDismiss, isDismiss: true, logger, uiDeliveryIds,\r\n });\r\n\r\n return jsData.UnifiedQueueNotification.destroyAll({ uiDeliveryIds, notificationTypeIds }, {\r\n beforeDestroy: () => {\r\n _.each(ids, id => jsData.UnifiedQueueNotification.eject(id));\r\n return Promise.resolve(ids);\r\n },\r\n });\r\n }, [warningsTypeIdsToDismiss, warnings]\r\n );\r\n\r\n const { execute: dismissRecommendations } = useJsDataCallback(\r\n (jsData) => {\r\n logActionInfos({ recommendationIds, isDismiss: true, logger });\r\n return jsData.Recommendation.destroyAll(undefined, { params: { cid, aid, ids: recommendationIds } });\r\n }, [cid, aid, recommendationIds]\r\n );\r\n\r\n const goToIOPage = useCallback(({ iofilter, recommendationIds: recIds, warningsTypeIds } = {}) => {\r\n logActionInfos({\r\n recommendationIds: recIds, warningsTypeIds, aid, logger,\r\n });\r\n navigateToIOPage({\r\n uid, cid, aid, iofilter, history, siteMap,\r\n });\r\n }, [aid, cid, history, logger, siteMap, uid]);\r\n\r\n useEffect(() => {\r\n if (!isWarningsLoading && !_.isEmpty(warningsTypeIdsToDismiss)) {\r\n dismissWarnings();\r\n setWarningsTypeIdsToDismiss([]);\r\n }\r\n }, [dismissWarnings, isWarningsLoading, warningsTypeIdsToDismiss]);\r\n\r\n useEffect(() => {\r\n if (!isWarningsLoading && !isRecommendationsLoading && (!_.isEmpty(recommendationIds) || _.some(IOWarningProps, value => !!value))) {\r\n const path = getRoutePathById(siteMap, 'billing');\r\n logger.trace({\r\n scenarioName: path === '/billing' ? LogsScenario.BillingSummaryDisplayed : LogsScenario.AccountPerformanceDisplayed,\r\n message: {\r\n isAccountLevel: aid > 0,\r\n ...IOWarningProps,\r\n recommendationIds,\r\n },\r\n });\r\n }\r\n // eslint need to be disabled, if not, the dependencies will be auto fill, finally lead to logging more than once.\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [logger, isWarningsLoading, isRecommendationsLoading]);\r\n\r\n return !(isWarningsLoading || isRecommendationsLoading) && (\r\n
\r\n {\r\n aid > 0 ?\r\n (\r\n \r\n ) : (\r\n \r\n )\r\n }\r\n \r\n
\r\n );\r\n}\r\n\r\nIONotifications.defaultProps = {\r\n aid: null,\r\n containerClass: '',\r\n};\r\n\r\nIONotifications.propTypes = {\r\n uid: PropTypes.number.isRequired,\r\n cid: PropTypes.number.isRequired,\r\n aid: PropTypes.number,\r\n containerClass: PropTypes.string,\r\n history: PropTypes.shape({\r\n push: PropTypes.func,\r\n }).isRequired,\r\n siteMap: PropTypes.arrayOf(PropTypes.shape({\r\n name: PropTypes.string.isRequired,\r\n })).isRequired,\r\n};\r\n","import React from 'react';\r\nimport $ from 'jquery';\r\nimport ReactDOM from 'react-dom';\r\nimport URI from 'urijs';\r\nimport { appendScopeParameter } from '@bingads-webui-campaign/summary-grid-helper';\r\nimport {\r\n dismissCallout,\r\n ACCOUNTS_GRID_CALLOUT_MOUNTING_DOM,\r\n ACCOUNTS_GRID_POPOVER_CLASSNAME,\r\n getAutoPlacement,\r\n} from '@bingads-webui-campaign-react/accounts-grid-factory';\r\nimport { PopoverWithLock, Utils } from '@bingads-webui-campaign-react/accounts-summary-common';\r\nimport { createElementBasedFluctuationPopupFactory } from '@bingads-webui-campaign-react/fluctuation-popup';\r\nimport { getRoutePathById, allSiteMap } from '@bingads-webui-campaign-react/with-site-map';\r\nimport { keyCode } from '@bingads-webui/keycode';\r\n\r\nconst MaxCalloutWidth = 325; // this value is defined in global style\r\n\r\nexport const getColumnActionEvents = ({\r\n serverContext,\r\n instrumentation,\r\n scope,\r\n getjsDataCampaign,\r\n appConfig,\r\n perfMarker,\r\n}) =>\r\n // Fluctuation popup need some dependencies which we cannot get from upper level. So we add one more layer of function here.\r\n ({ accountSummaryi18n, azureUrlRewrite }) =>\r\n (view) => {\r\n const i18n = accountSummaryi18n;\r\n\r\n const showFluctuationInsightsPopup = (event) => {\r\n event.stopPropagation();\r\n const { currentTarget } = event;\r\n const key = view.gridView.keyOfElement(event.target);\r\n const account = view.gridView.itemWithKey(key);\r\n const dateRange = view.dateFilter.getCurrentDateRange();\r\n\r\n const dismissFluc = ({ isLastFluc }) => {\r\n if (isLastFluc) {\r\n Utils.forceAccountsGridRefresh({ gridView: view.gridView, getjsDataCampaign });\r\n }\r\n };\r\n\r\n createElementBasedFluctuationPopupFactory({\r\n triggerButton: currentTarget,\r\n deps: {\r\n i18n,\r\n context: {\r\n ...serverContext,\r\n scope,\r\n CurrentAccount: { Id: account.Id },\r\n },\r\n instrumentation,\r\n azure: azureUrlRewrite,\r\n appConfig,\r\n },\r\n metrics: [{\r\n name: currentTarget.getAttribute('data-metric-name'),\r\n value: currentTarget.getAttribute('data-metric-value'),\r\n type: currentTarget.getAttribute('data-metric-type'),\r\n }],\r\n isForVNext: true,\r\n canViewAllInsights: true,\r\n asyncLoadFluctuationConfig: {\r\n dateRange: {\r\n startDate: dateRange.start,\r\n endDate: dateRange.end,\r\n },\r\n fluctuationTypeIds: [currentTarget.getAttribute('data-metric-type')],\r\n },\r\n onFlucDismiss: dismissFluc,\r\n fromScenario: 'PerformanceGrid',\r\n onDismiss: () => {\r\n if (currentTarget) {\r\n currentTarget.focus();\r\n }\r\n },\r\n perfMarker,\r\n }, document.getElementById(ACCOUNTS_GRID_CALLOUT_MOUNTING_DOM));\r\n };\r\n\r\n const showFluctuationInsightsTooltip = (event) => {\r\n const fluctuationTooltipCalloutProp = {\r\n parentGrid: view,\r\n popoverId: 'fluctuation-tooltip-id',\r\n target: event.currentTarget,\r\n hasCloseButton: false,\r\n placement: 'top',\r\n onClose: dismissCallout,\r\n contentView: () => ({i18n.getString('Fluctuation_Insights_Icon_Tooltip')}),\r\n };\r\n\r\n ReactDOM.render(\r\n ,\r\n document.getElementById(ACCOUNTS_GRID_CALLOUT_MOUNTING_DOM)\r\n );\r\n };\r\n\r\n const filterEnterKeyDown = eventHandler => (event, ...args) => {\r\n if (event.keyCode === keyCode.Enter) {\r\n eventHandler(event, ...args);\r\n }\r\n };\r\n\r\n // Tooltip when hovering over spend text, to show budget center entry\r\n const showBudgetCenterHelpTooltip = (event) => {\r\n const url = getRoutePathById(allSiteMap, 'budget-center');\r\n const uri = new URI(url);\r\n appendScopeParameter(uri, scope);\r\n const key = view.gridView.keyOfElement(event.target);\r\n const account = view.gridView.itemWithKey(key);\r\n uri.addQuery('aid', account.Id);\r\n uri.addQuery('entrypoint', 'performancegrid');\r\n const actionLink = uri.toString();\r\n\r\n const placement = getAutoPlacement(event.target, MaxCalloutWidth);\r\n\r\n const budgetCenterHelpTooltipCalloutProp = {\r\n parentGrid: view.gridView,\r\n popoverId: 'budget-center-help-tooltip-id',\r\n target: event.currentTarget,\r\n hasCloseButton: false,\r\n placement,\r\n onClose: dismissCallout,\r\n focusLockContent: true,\r\n contentView: () => (\r\n <>\r\n
{i18n.getString('AccountGrid_BudgetCenter_HelpText')}
\r\n {i18n.getString('Campaign_BudgetCenter_ViewLink')}\r\n \r\n ),\r\n };\r\n\r\n ReactDOM.render(\r\n ,\r\n document.getElementById(ACCOUNTS_GRID_CALLOUT_MOUNTING_DOM)\r\n );\r\n };\r\n\r\n return {\r\n 'click .performance-metrics-fluctuation .clickable': showFluctuationInsightsPopup,\r\n 'mouseenter .performance-metrics-fluctuation .clickable': showFluctuationInsightsTooltip,\r\n 'mouseleave .performance-metrics-fluctuation .clickable': (event) => {\r\n if ($(event.relatedTarget).closest(`.${ACCOUNTS_GRID_POPOVER_CLASSNAME}`).length === 0) {\r\n view.trigger('closePopup');\r\n }\r\n },\r\n 'click .performance-metrics-value .budget-center-entry': showBudgetCenterHelpTooltip,\r\n 'mouseenter .performance-metrics-value .budget-center-entry': showBudgetCenterHelpTooltip,\r\n 'mouseleave .performance-metrics-value .budget-center-entry': (event) => {\r\n if ($(event.relatedTarget).closest(`.${ACCOUNTS_GRID_POPOVER_CLASSNAME}`).length === 0) {\r\n view.trigger('closePopup');\r\n }\r\n },\r\n 'keydown .performance-metrics-value .budget-center-entry': filterEnterKeyDown(e => showBudgetCenterHelpTooltip(e)),\r\n };\r\n };\r\n","import _ from 'underscore';\r\nimport Promise from 'bluebird';\r\nimport React, { Fragment, Suspense, useMemo, useState, useEffect, useRef } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classNames from 'classnames';\r\n\r\nimport { inlineChartContainerStyle } from '@bingads-webui-campaign-react/inline-chart-style';\r\nimport { ProgressiveLoadingBlock } from '@bingads-webui-campaign-react/shell-ui-common';\r\nimport { StyledAccountsWelcomeBar } from '@bingads-webui-campaign-react/accounts-welcome-bar';\r\nimport { StyledTablePageContainer } from '@bingads-webui-campaign-react/table-page-container';\r\nimport { StyledGridViewWrapper } from '@bingads-webui-campaign-react/grid-view-wrapper';\r\nimport { TopGridPanel } from '@bingads-webui-campaign-react/top-grid-panel';\r\nimport { withGlobalFilter } from '@bingads-webui-campaign-react/global-filter-context';\r\nimport { withTablePageStateManager } from '@bingads-webui-campaign-react/table-page-state-manager';\r\nimport { withInstrumentation } from '@bingads-webui-react/hoc-with-instrumentation';\r\nimport { FilterViewManagerWithGlobalFilterContext } from '@bingads-webui-campaign-react/filter-view-manager';\r\nimport { getToolbarEditor } from '@bingads-webui-campaign-react/toolbar-plugin';\r\nimport { DisclaimerBannerWithoutTimezone, DisclaimerBannerWithInstoreWithoutTimezone } from '@bingads-webui-campaign-react/help';\r\nimport { perfMarkerPropTypes } from '@bingads-webui/performance-marker';\r\nimport { createAccountsGridForUiNext, dismissCallout, ACCOUNTS_GRID_CALLOUT_MOUNTING_DOM, getGridStyles, getCalloutStyles } from '@bingads-webui-campaign-react/accounts-grid-factory';\r\nimport { gridsType, gridsMap } from '@bingads-webui-campaign/accounts-grid';\r\nimport { dismissPopupIfExist } from '@bingads-webui-campaign/fluctuation-common';\r\nimport { ScopeSelector } from '@bingads-webui-react/scope-selector';\r\nimport { IONotifications } from '@bingads-webui-cc-react/io-notifications';\r\nimport { LoggerContextProvider } from '@bingads-webui-cc-react/instrumentation-base';\r\nimport { InlineWarningAlert } from '@bingads-webui-cc-react/alert';\r\nimport { constants } from '@bingads-webui/instrumentation';\r\nimport { withDelayedStyles } from '@bingads-webui-campaign-react/common-utils';\r\nimport { getLinkAccountButtonStyle } from '@bingads-webui-campaign-react/accounts-summary-common';\r\nimport { getFluctuationPopupStyle,\r\n getFluctuationTooltipStyle,\r\n getFluctuationLoadingStyle,\r\n getBudgetCenterTooltipStyle } from '@bingads-webui-campaign-react/common-styles';\r\nimport eventDispatcher from '@bingads-webui-component-legacy/event-dispatcher/index';\r\nimport { Constants } from '@bingads-webui-clientcenter/entity-utils';\r\n\r\nimport { getToolbarConfig } from './toolbar-config';\r\nimport { getColumnActionEvents } from './column-action-events';\r\n\r\nconst { EnforcementActionType } = Constants;\r\n\r\nconst Performance = ({\r\n classes,\r\n forceHideToolbar,\r\n i18n,\r\n instrumentation,\r\n onGridInjected,\r\n pageName,\r\n panelView,\r\n perfMarker,\r\n permissions,\r\n preexecuteFlag,\r\n preferenceService,\r\n renderToolbarContainer,\r\n resetToolbarVisibility,\r\n scope,\r\n serverContext,\r\n showInlineChart,\r\n showTopGridPanel,\r\n crossPageSelectPlugin,\r\n toolbarPlugin,\r\n toolbarSelectedConfig,\r\n toolbarUnselectedConfig,\r\n updateToolbar,\r\n siteMap,\r\n lazyLoadDep,\r\n accountsGridLegacyDepsListWebpack,\r\n loadInlineChartWithWebpack,\r\n getjsDataCampaign,\r\n history,\r\n}) => {\r\n const [backboneGridView, setBackboneGridView] = useState(null);\r\n const [inlineChart, setInlineChart] = useState(null);\r\n let defaultGridType = gridsType.performance;\r\n const expertAccountPillSelected = _.get(scope, ['values', 'expertAccountPillSelected']) === 'true';\r\n if (!expertAccountPillSelected && serverContext.CurrentCustomer.HasUnifiedSmartAccount) {\r\n defaultGridType = gridsType.smartPerformance;\r\n }\r\n const [gridType, setGridType] = useState(defaultGridType);\r\n\r\n useEffect(() =>\r\n // do nothing on mounted, only dismiss possible callout on unmounted\r\n () => dismissCallout(), []);\r\n\r\n useEffect(() => {\r\n const pageContainer = document.querySelector('.table-page-container');\r\n\r\n const dismissPopup = () => dismissPopupIfExist([document.getElementById(ACCOUNTS_GRID_CALLOUT_MOUNTING_DOM)]);\r\n\r\n if (pageContainer) {\r\n pageContainer.addEventListener('scroll', dismissPopup);\r\n }\r\n\r\n return () => {\r\n pageContainer.removeEventListener('scroll', dismissPopup);\r\n };\r\n }, []);\r\n if (perfMarker) {\r\n // eslint-disable-next-line no-param-reassign\r\n perfMarker.doneCallback = () => {\r\n eventDispatcher.trigger('performance_grid_loaded');\r\n };\r\n }\r\n\r\n const accountsGridPromise = useMemo(\r\n () => createAccountsGridForUiNext({\r\n serverContext,\r\n permissions,\r\n scope,\r\n perfMarker,\r\n addDateChangeListener: _.noop,\r\n gridName: gridsMap[gridType].gridName,\r\n gridType,\r\n pageElementSelector: '.performance-page',\r\n pageName,\r\n preexecuteFlag,\r\n preferenceService,\r\n crossPageSelectPlugin,\r\n toolbarPlugin,\r\n i18n,\r\n siteMap,\r\n lazyLoadDep,\r\n accountsGridLegacyDepsListWebpack,\r\n getEvents: getColumnActionEvents({\r\n serverContext, instrumentation, scope, getjsDataCampaign, appConfig: accountsGridLegacyDepsListWebpack['component/config/index'], perfMarker,\r\n }),\r\n }),\r\n // Theoretically we should return a function to cleanup promises, but no page seems to be doing that right now.\r\n [serverContext, permissions, scope, perfMarker, gridType, pageName, preferenceService, crossPageSelectPlugin, toolbarPlugin, i18n, siteMap, lazyLoadDep, accountsGridLegacyDepsListWebpack, instrumentation, preexecuteFlag, getjsDataCampaign]\r\n );\r\n\r\n const MakeGridView = React.lazy(() => accountsGridPromise.then(({ grid, filterService }) => {\r\n // This lets TablePageStateManager figure out when to start performing scheduled updates.\r\n onGridInjected({\r\n deselectAll: grid.gridView.deselectAll.bind(grid.gridView),\r\n backboneGridView: grid.gridView,\r\n });\r\n\r\n setBackboneGridView(grid);\r\n\r\n const StyledGridViewWrapperWithFilterContext = withGlobalFilter(StyledGridViewWrapper);\r\n\r\n const InlineChart = React.lazy(() => (\r\n Promise.resolve()\r\n )\r\n .then(() => (loadInlineChartWithWebpack)({\r\n serverContext,\r\n gridView: { grid },\r\n filterService,\r\n chartContainer: '.performance-inline-chart',\r\n entityType: 'Account',\r\n preexecuteFlag,\r\n gridName: gridsMap[gridType].gridName,\r\n }))\r\n .then(inlineChartView => ({\r\n // React.lazy takes a function that returns a promise that resolves to a default export style component.\r\n default: () => inlineChartView,\r\n })));\r\n\r\n setInlineChart();\r\n\r\n return {\r\n default: () => (),\r\n };\r\n }));\r\n\r\n const MakeFilterBarView = React.lazy(() => accountsGridPromise.then(({ filterService, filterConfig }) => {\r\n const toolbarEditor = getToolbarEditor({\r\n toolbarConfig: { toolbarSelectedConfig, toolbarUnselectedConfig },\r\n updateToolbar,\r\n });\r\n const { i18n: legacyI18n, ...filterProps } = filterConfig;\r\n const updateToolbarBinded = _.bind(toolbarEditor.update, toolbarEditor);\r\n\r\n return {\r\n default: () => (\r\n \r\n ),\r\n };\r\n }));\r\n const GridView = useRef(MakeGridView);\r\n const FilterBarView = useRef(MakeFilterBarView);\r\n\r\n // Triggers full reload of grid whenever the gridType changes from Smart to Expert or vice versa\r\n useEffect(() => {\r\n GridView.current = MakeGridView;\r\n FilterBarView.current = MakeFilterBarView;\r\n // DO NOT FIX THIS LINT ERROR OR ELSE ENTIRE PAGE FREEZES\r\n // eslint-disable-next-line\r\n }, [gridType]);\r\n\r\n const { CurrentUser = {} } = serverContext;\r\n const { dynamic: { DSAEnforcement: DSAEnforcementEnabled } = {} } = permissions;\r\n const stickyTopOfGridContent = (\r\n \r\n {renderToolbarContainer()}\r\n \r\n {DSAEnforcementEnabled && CurrentUser.EnforcementActionId === EnforcementActionType.SuspendAccountCreation\r\n ? (\r\n
\r\n \r\n {i18n.getString(_TL_('Your manager account is currently under a Strike 2 penalty and you are suspended from creating new accounts. Details have been shared on your admin email.'))}\r\n \r\n
)\r\n : null}\r\n
\r\n );\r\n\r\n // The choice between UP Smart and Expert performance grids only appears if customer has both account types, otherwise it's hidden\r\n const showAccountsModeSelector = serverContext.CurrentCustomer.HasUnifiedSmartAccount\r\n && serverContext.CurrentCustomer.HasExpertAccount;\r\n\r\n const onModeChange = ({ index }) => {\r\n resetToolbarVisibility({ forceHideToolbar: false });\r\n if (index === 0) {\r\n setGridType(gridsType.smartPerformance);\r\n } else {\r\n setGridType(gridsType.performance);\r\n }\r\n };\r\n\r\n const logger = useMemo(() => ({\r\n trace: (scenarioName, message) => {\r\n instrumentation.writeRawLog({\r\n logCategory: constants.LOGCATEGORY.TRACE,\r\n api: scenarioName,\r\n message,\r\n entryType: constants.ENTRYTYPE.MESSAGE,\r\n });\r\n },\r\n }), [instrumentation]);\r\n\r\n const topOfGridContent = React.useMemo(() => (\r\n \r\n \r\n {showAccountsModeSelector ? (\r\n onModeChange({ index }),\r\n levelItems: [\r\n {\r\n name: i18n.getString(_TL_('Smart accounts')),\r\n value: 0,\r\n },\r\n {\r\n name: i18n.getString(_TL_('Expert accounts')),\r\n value: 1,\r\n }],\r\n }}\r\n />\r\n ) : null}\r\n \r\n \r\n \r\n
\r\n
\r\n \r\n {showInlineChart && inlineChart}\r\n \r\n
\r\n
\r\n {showTopGridPanel &&\r\n \r\n }\r\n
), [serverContext.CurrentCustomer.Name, serverContext.CurrentCustomer.Id, serverContext.CurrentUser.Id, permissions, i18n, showAccountsModeSelector, gridType, logger, history, siteMap, classes.IONotificationsContainer, classes.inlineChartContainer, classes.topGridPanelCustomStyles, showInlineChart, inlineChart, showTopGridPanel, panelView, onModeChange]);\r\n\r\n return (\r\n }>\r\n }\r\n pgridView={backboneGridView ? backboneGridView.gridView : null}\r\n customClasses={{\r\n tablePageContainer: classNames('performance-page', classes.gridContainer),\r\n gridViewContainer: classNames('performance-table', classes.grid),\r\n }}\r\n CustomDisclaimerBanner={_.get(permissions, ['IsInStoreVisitGoalEnabled']) ? DisclaimerBannerWithInstoreWithoutTimezone : DisclaimerBannerWithoutTimezone}\r\n scrollToTop={forceHideToolbar && showTopGridPanel}\r\n />\r\n \r\n );\r\n};\r\n\r\nPerformance.propTypes = {\r\n serverContext: PropTypes.shape({\r\n CurrentCustomer: PropTypes.shape({\r\n HasUnifiedSmartAccount: PropTypes.bool.isRequired,\r\n HasExpertAccount: PropTypes.bool.isRequired,\r\n Name: PropTypes.string.isRequired,\r\n Id: PropTypes.number.isRequired,\r\n }),\r\n CurrentUser: PropTypes.shape({\r\n Id: PropTypes.number.isRequired,\r\n }),\r\n }).isRequired,\r\n permissions: PropTypes.shape({}).isRequired,\r\n\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n instrumentation: PropTypes.shape({\r\n writeRawLog: PropTypes.func,\r\n }).isRequired,\r\n perfMarker: perfMarkerPropTypes.isRequired,\r\n\r\n // Props from HOC withPreference (in ui-next/app-content)\r\n preferenceService: PropTypes.shape().isRequired,\r\n\r\n // Props from HOC withScope (in ui-next/app-content)\r\n scope: PropTypes.shape({\r\n values: PropTypes.shape({}),\r\n }).isRequired,\r\n siteMap: PropTypes.arrayOf(PropTypes.shape({\r\n id: PropTypes.string,\r\n })).isRequired,\r\n\r\n // Props from HOC withDefaultStyles\r\n classes: PropTypes.shape().isRequired,\r\n\r\n // Props from HOC withTablePageStateManager\r\n crossPageSelectPlugin: PropTypes.shape({\r\n plugin: PropTypes.func.isRequired,\r\n }).isRequired,\r\n toolbarPlugin: PropTypes.shape({\r\n plugin: PropTypes.func.isRequired,\r\n }).isRequired,\r\n renderToolbarContainer: PropTypes.func.isRequired,\r\n toolbarSelectedConfig: PropTypes.shape().isRequired,\r\n toolbarUnselectedConfig: PropTypes.shape().isRequired,\r\n // showToolbarSelected: PropTypes.bool.isRequired,\r\n // showToolbarUnselected: PropTypes.bool.isRequired,\r\n // This prop is used by TablePageStateManager to force hide the inline chart when the top of grid panel is shown.\r\n showInlineChart: PropTypes.bool.isRequired,\r\n // forceHideInlineChart: PropTypes.bool.isRequired,\r\n showTopGridPanel: PropTypes.bool.isRequired,\r\n // showTopOfGridPanel: PropTypes.func.isRequired,\r\n onGridInjected: PropTypes.func.isRequired,\r\n updateToolbar: PropTypes.func.isRequired,\r\n resetToolbarVisibility: PropTypes.func.isRequired,\r\n forceHideToolbar: PropTypes.bool.isRequired,\r\n panelView: PropTypes.func.isRequired,\r\n // forceResetScrollFlag: PropTypes.bool.isRequired,\r\n pageName: PropTypes.string,\r\n preexecuteFlag: PropTypes.bool,\r\n lazyLoadDep: PropTypes.func,\r\n // eslint-disable-next-line\r\n accountsGridLegacyDepsListWebpack: PropTypes.object,\r\n loadInlineChartWithWebpack: PropTypes.func,\r\n getjsDataCampaign: PropTypes.func,\r\n history: PropTypes.shape({\r\n push: PropTypes.func,\r\n }).isRequired,\r\n};\r\n\r\nPerformance.defaultProps = {\r\n pageName: '',\r\n preexecuteFlag: false,\r\n lazyLoadDep: undefined,\r\n accountsGridLegacyDepsListWebpack: null,\r\n loadInlineChartWithWebpack: undefined,\r\n getjsDataCampaign: undefined,\r\n};\r\n\r\nconst getDelayedPerformanceStyles = () => (\r\n import(/* webpackMode: 'eager' */'./performance-page-styles')\r\n .then(({ getPerformanceStyles }) => ({\r\n getDelayedStyles: getPerformanceStyles,\r\n }))\r\n);\r\nconst getDefaultStyles = (components, { palette = {} }) => ({\r\n inlineChartContainer: inlineChartContainerStyle(palette),\r\n gridContainer: {\r\n ...getLinkAccountButtonStyle(components, { palette }),\r\n },\r\n grid: {\r\n ...getGridStyles(components, { palette }),\r\n\r\n // column width override\r\n '&& .table-container colgroup.column-group .col-AccountName': {\r\n width: 300,\r\n minWidth: 300,\r\n },\r\n },\r\n '@global': {\r\n ...getCalloutStyles(components, { palette }),\r\n ...getFluctuationPopupStyle({ palette }),\r\n ...getFluctuationTooltipStyle(),\r\n ...getFluctuationLoadingStyle(),\r\n ...getBudgetCenterTooltipStyle(),\r\n },\r\n});\r\n\r\nexport const StyledPerformance = _.compose(\r\n _.partial(withDelayedStyles, _, getDefaultStyles, getDelayedPerformanceStyles, 'performance_grid_loaded'),\r\n withTablePageStateManager({ getToolbarConfig }),\r\n withInstrumentation\r\n)(Performance);\r\n","import _ from 'underscore';\r\n\r\nimport { getYahooModel } from '@bingads-webui-react/yahoo-iframe';\r\n\r\nimport { buildToobarConfig, ToolbarConfigs } from '@bingads-webui-campaign-react/accounts-summary-common';\r\nimport { getRoutePathById } from '@bingads-webui-campaign-react/with-site-map';\r\n\r\nexport const getToolbarConfig = (context) => {\r\n const {\r\n permissions,\r\n onSelectCrossPage,\r\n i18n,\r\n scope,\r\n serverContext: {\r\n CurrentUser,\r\n },\r\n siteMap,\r\n getBulkUnlinkAccounts,\r\n getBulkTransferAccounts,\r\n } = context;\r\n\r\n const dynamicToolbarItemsKeys = {\r\n unlinkAccount: 'unlink-account',\r\n transferAccount: 'transfer-account',\r\n bamDropdownEdit: 'bam-dropdown-edit',\r\n };\r\n\r\n const { canUserAccessMicrosoftData, isManagedByYahoo } = getYahooModel({\r\n isCustomerManagedByYahoo: CurrentUser.ManagedBy === 'Yahoo',\r\n isInternalUser: CurrentUser.IsInternal,\r\n permissions: permissions.dynamic,\r\n });\r\n\r\n const getBulkEditDropdown = ({\r\n gridView,\r\n }) => {\r\n const selectedAccounts = gridView ? gridView.selectedItems() : null;\r\n const hasManagerAccount = selectedAccounts && _.some(selectedAccounts, account => _.isObject(account) && account.AccountType === 'ManagerAccount');\r\n\r\n return permissions.IsCampaignBAMEnabled && [dynamicToolbarItemsKeys.bamDropdownEdit, {\r\n id: dynamicToolbarItemsKeys.bamDropdownEdit,\r\n type: 'dropdown',\r\n iconLeftGlyphName: 'ba-Edit',\r\n button: {\r\n text: i18n.getString(_TL_('Edit')),\r\n },\r\n menu: {\r\n items: [{\r\n text: i18n.getString(_TL_('Build spreadsheet')),\r\n id: 'dropdown-bam-spreadsheet',\r\n onClick: () => { scope.save(getRoutePathById(siteMap, 'build-spreadsheet')); },\r\n }, {\r\n text: i18n.getString(_TL_('Upload')),\r\n id: 'dropdown-bam-upload',\r\n onClick: () => { scope.save('../bulkuploads/uploads'); },\r\n }],\r\n },\r\n disabled: hasManagerAccount,\r\n }];\r\n };\r\n\r\n const toolbarSelectedConfig = buildToobarConfig([\r\n // Indicates how many grid rows are selected\r\n ['selection-widget', {\r\n type: 'selection-widget',\r\n onSelectCrossPage,\r\n }],\r\n // The faint vertical separate next to the chart toggle\r\n ['divider', {\r\n type: 'divider',\r\n }],\r\n [dynamicToolbarItemsKeys.unlinkAccount, {}],\r\n permissions && permissions.IsAccountLabelsEnabled && ['dropdown-labels', {\r\n type: 'dropdown',\r\n id: 'dropdown-labels',\r\n }],\r\n [dynamicToolbarItemsKeys.transferAccount, {}],\r\n [dynamicToolbarItemsKeys.bamDropdownEdit, {}],\r\n // Separates the left-float and right-float nav items\r\n ['expander', {\r\n type: 'expander',\r\n }],\r\n // The \"X\" to return to the unselected toolbar\r\n ['button-clear-selection', {\r\n type: 'button-clear-selection',\r\n }],\r\n ['button-chart-toggle', {\r\n id: 'button-chart-toggle',\r\n type: 'button',\r\n }],\r\n ]);\r\n\r\n const toolbarDynamicSelectedConfigCallback = ({ gridView } = {}) => buildToobarConfig([\r\n ToolbarConfigs.getUnlinkAccountNavItem({\r\n key: dynamicToolbarItemsKeys.unlinkAccount, context, gridView, getBulkUnlinkAccounts,\r\n }),\r\n ToolbarConfigs.getTransferAccountNavItem({\r\n key: dynamicToolbarItemsKeys.transferAccount, context, gridView, getBulkTransferAccounts,\r\n }),\r\n getBulkEditDropdown({ gridView }),\r\n ]);\r\n\r\n const toolbarUnselectedConfig = buildToobarConfig([\r\n permissions.IsOBOAgencyCreateAccountEnabled\r\n ? ToolbarConfigs.getCreateAccountOBOButton({ context })\r\n : canUserAccessMicrosoftData && ToolbarConfigs.getCreateAccountButton({ context }),\r\n !isManagedByYahoo && ToolbarConfigs.getSendRequestNavItem({ context }),\r\n getBulkEditDropdown({}),\r\n ['predicate-list', {\r\n id: 'predicate-list',\r\n type: 'custom',\r\n }],\r\n ['search-box-filter', {\r\n id: 'search-box-filter',\r\n type: 'search-box',\r\n }],\r\n permissions.IsCustomerHierarchyEnabled &&\r\n ['accountsSelection_selector', {\r\n id: 'accountsSelection_selector',\r\n }],\r\n ['dropdown-column-chooser', {\r\n id: 'dropdown-column-chooser',\r\n type: 'dropdown',\r\n }],\r\n ['dropdown-segment', {\r\n id: 'dropdown-segment',\r\n type: 'dropdown',\r\n button: {\r\n // This text is overwritten with a localized string by the segment plugin\r\n text: 'segment-placeholder',\r\n },\r\n }],\r\n ['button-download', {\r\n id: 'button-download',\r\n type: 'nav-item',\r\n iconLeftGlyphName: 'ba-Download',\r\n }],\r\n // The faint vertical separator next to the chart toggle\r\n ['divider', {\r\n type: 'divider',\r\n }],\r\n ['button-chart-toggle', {\r\n id: 'button-chart-toggle',\r\n type: 'button',\r\n }],\r\n ]);\r\n\r\n return {\r\n toolbarSelectedConfig,\r\n toolbarDynamicSelectedConfigCallback,\r\n toolbarUnselectedConfig,\r\n };\r\n};\r\n","import { getGridStyles } from '@bingads-webui-campaign-react/accounts-grid-factory';\r\nimport { legacyUIBlockerStyle, labelColumnHeaderStyle } from '@bingads-webui-campaign-react/common-styles';\r\nimport { getLinkAccountButtonStyle } from '@bingads-webui-campaign-react/accounts-summary-common';\r\nimport { inlineChartContainerStyle } from '@bingads-webui-campaign-react/inline-chart-style';\r\n\r\nexport const getPerformanceStyles = (components, { palette = {} }) => ({\r\n inlineChartContainer: inlineChartContainerStyle(palette),\r\n IONotificationsContainer: {\r\n boxShadow: 'inset 0px 4.6px 1.8px -4px rgba(0, 0, 0, 0.108), inset 0px 7.2px 7.2px -4px rgba(0, 0, 0, 0.132)',\r\n padding: [8, 24],\r\n '&:empty': {\r\n padding: 0,\r\n },\r\n },\r\n gridContainer: {\r\n ...getLinkAccountButtonStyle(components, { palette }),\r\n },\r\n grid: {\r\n ...getGridStyles(components, { palette }),\r\n ...legacyUIBlockerStyle({ palette }),\r\n\r\n // column width override\r\n '&& .table-container colgroup.column-group .col-AccountName': {\r\n width: 300,\r\n minWidth: 300,\r\n },\r\n },\r\n dsaSuspensionWarning: {\r\n padding: '0 15px 8px 32px',\r\n },\r\n '@global': {\r\n ...labelColumnHeaderStyle(),\r\n },\r\n});\r\n","import { withProps } from '../components/utils';\r\nimport { loadPageWebpack } from './legacy-bootstrap-utils';\r\n\r\nconst getPerformanceDeps = () => {\r\n const legacydeps = import(/* webpackMode: \"eager\" */'./performance-deps');\r\n\r\n return legacydeps;\r\n};\r\nconst importPage = () => import(/* webpackMode: \"eager\" */'@bingads-webui-campaign-react/performance-page');\r\n\r\nconst importFeature = () => Promise.all([\r\n importPage(),\r\n getPerformanceDeps(),\r\n]).then(([thePageModule, performanceDeps]) => withProps(thePageModule.StyledPerformance, performanceDeps));\r\n\r\nconst Feature = loadPageWebpack({\r\n importFeature,\r\n importL10n: () => import(/* webpackChunkName: \"performance-page.dynamic.l10n\" */'./performance-page.l10n'),\r\n hasLegacyI18n: true,\r\n});\r\n\r\nexport default Feature;\r\n"],"names":["useStyles","createUseStyles","RecommendationMessageBar","background","CommunicationColors","tint40","margin","padding","backgroundClip","WarningMessageBar","Icon","color","primary","RecommendationMessageText","fontSize","WarningMessageText","Container","minWidth","IORecommendationMessageBar","_ref","numOfRecommendations","buttonOnClick","dismissOnClick","recommendationIds","styles","i18n","useContext","I18nContext","_useState","useState","_useState2","_slicedToArray","show","setShow","recommendationText","getString","_TL_","_jsx","MessageBar","className","classnames","actions","MessageBarButton","onClick","children","isMultiline","messageBarIconProps","iconName","concat","onDismiss","_jsxs","title","defaultProps","_","IORecommendationTypesToFetch","Constants","RecommendationType","InsertionOrderCreation","InsertionOrderUpdate","RecurringInsertionOrderAdd","AccountPausedWarningType","NotificationType","InsertionOrderBalanceDepletedEvent","InsertionOrderExpiredEvent","IOExpiringWarningType","InsertionOrderExpiringUrgentEvent","IOExhaustingWarningType","InsertionOrderExhaustingUrgentEvent","LogsPrefix","LogsScenario","Default","Displayed","BillingSummaryDisplayed","AccountPerformanceDisplayed","AccountPausedWarningDismiss","CustomerExpiringWarningDismiss","CustomerExhaustingWarningDismiss","AccountExpiringWarningDismiss","AccountExhaustingWarningDismiss","RecommendationDismiss","AccountPausedWarningJump","CustomerExpiringWarningJump","CustomerExhaustingWarningJump","AccountExpiringWarningJump","AccountExhaustingWarningJump","RecommendationJump","IOFilter","IOWarningAccountMessageBar","isIOExpiring","isIOExhausting","showIOExpiring","setShowIOExpiring","_useState3","_useState4","showIOExhausting","setShowIOExhausting","IOExpiringText","IOExhaustingText","_Fragment","messageBarType","MessageBarType","severeWarning","iofilter","Expiring","warningsTypeIds","Exhausting","IOWarningCustomerMessageBar","numOfAccountPaused","numOfIOExpiring","numOfIOExhausting","showAccountPaused","setShowAccountPaused","_useState5","_useState6","accountPausedText","AccountPaused","logActionInfos","_ref6","logInfo","uiDeliveryIds","aid","logger","isDismiss","_ref5","scenarioName","message","warningTypes","warningIds","getWarningsLogInfo","trace","IONotifications","uid","cid","history","siteMap","containerClass","useLoggerContext","defaultScenarioName","warningsTypeIdsToDismiss","setWarningsTypeIdsToDismiss","_useJsData","useJsData","jsData","UnifiedQueueNotification","findAll","warnings","data","isWarningsLoading","loading","_useJsData2","Recommendation","types","recommendations","isRecommendationsLoading","IOWarningProps","useMemo","_ref2","w","NotificationTypeId","getAccountIOWarningProps","_ref3","numOfIOBalanceDepleted","numOfIOExpired","warning","notificationCount","NotificationCount","getCustomerIOWarningProps","_useJsDataCallback","useJsDataCallback","_getDismissWarningsIn","_ref4","notificationTypeIds","ids","indexOf","UIDeliveryId","push","id","getDismissWarningsInfo","destroyAll","beforeDestroy","eject","Promise","resolve","dismissWarnings","execute","dismissRecommendations","undefined","params","goToIOPage","useCallback","arguments","length","recIds","path","getRoutePathById","uri","URI","addSearch","entrypoint","IOEntryPointAlias","IONotificationsEnhancement","pathname","search","navigateToIOPage","useEffect","value","_objectSpread","isAccountLevel","getColumnActionEvents","serverContext","instrumentation","scope","getjsDataCampaign","appConfig","perfMarker","accountSummaryi18n","azureUrlRewrite","view","eventHandler","showBudgetCenterHelpTooltip","event","url","allSiteMap","appendScopeParameter","key","gridView","keyOfElement","target","account","itemWithKey","addQuery","Id","actionLink","toString","placement","getAutoPlacement","budgetCenterHelpTooltipCalloutProp","parentGrid","popoverId","currentTarget","hasCloseButton","onClose","dismissCallout","focusLockContent","contentView","href","ReactDOM","PopoverWithLock","document","getElementById","ACCOUNTS_GRID_CALLOUT_MOUNTING_DOM","stopPropagation","dateRange","dateFilter","getCurrentDateRange","createElementBasedFluctuationPopupFactory","triggerButton","deps","context","CurrentAccount","azure","metrics","name","getAttribute","type","isForVNext","canViewAllInsights","asyncLoadFluctuationConfig","startDate","start","endDate","end","fluctuationTypeIds","onFlucDismiss","isLastFluc","Utils","forceAccountsGridRefresh","fromScenario","focus","fluctuationTooltipCalloutProp","$","relatedTarget","closest","ACCOUNTS_GRID_POPOVER_CLASSNAME","trigger","e","keyCode","Enter","_len","args","Array","_key","apply","EnforcementActionType","Performance","classes","forceHideToolbar","onGridInjected","pageName","panelView","permissions","preexecuteFlag","preferenceService","renderToolbarContainer","resetToolbarVisibility","showInlineChart","showTopGridPanel","crossPageSelectPlugin","toolbarPlugin","toolbarSelectedConfig","toolbarUnselectedConfig","updateToolbar","lazyLoadDep","accountsGridLegacyDepsListWebpack","loadInlineChartWithWebpack","backboneGridView","setBackboneGridView","inlineChart","setInlineChart","defaultGridType","gridsType","performance","CurrentCustomer","HasUnifiedSmartAccount","smartPerformance","gridType","setGridType","pageContainer","querySelector","dismissPopup","dismissPopupIfExist","addEventListener","removeEventListener","doneCallback","eventDispatcher","accountsGridPromise","createAccountsGridForUiNext","addDateChangeListener","gridName","gridsMap","pageElementSelector","getEvents","MakeGridView","React","then","grid","filterService","deselectAll","bind","StyledGridViewWrapperWithFilterContext","withGlobalFilter","StyledGridViewWrapper","InlineChart","chartContainer","entityType","inlineChartView","default","removeGridOnUmount","MakeFilterBarView","filterConfig","toolbarEditor","getToolbarEditor","toolbarConfig","legacyI18n","filterProps","_objectWithoutProperties","_excluded","updateToolbarBinded","update","FilterViewManagerWithGlobalFilterContext","GridView","useRef","FilterBarView","current","_serverContext$Curren","CurrentUser","_permissions$dynamic","dynamic","DSAEnforcementEnabled","DSAEnforcement","stickyTopOfGridContent","Fragment","EnforcementActionId","SuspendAccountCreation","dsaSuspensionWarning","InlineWarningAlert","showAccountsModeSelector","HasExpertAccount","onModeChange","index","writeRawLog","logCategory","constants","LOGCATEGORY","TRACE","api","entryType","ENTRYTYPE","MESSAGE","topOfGridContent","StyledAccountsWelcomeBar","customerName","Name","ScopeSelector","customClasses","scopeSelectorCustomClass","pillControlCustomClass","hideSubMenuSeparator","pillControlParams","levelIndex","onItemChange","levelItems","LoggerContextProvider","IONotificationsContainer","classNames","inlineChartContainer","Suspense","fallback","ProgressiveLoadingBlock","TopGridPanel","topGridPanelCustomStyles","StyledTablePageContainer","pgridView","tablePageContainer","gridContainer","gridViewContainer","CustomDisclaimerBanner","DisclaimerBannerWithInstoreWithoutTimezone","DisclaimerBannerWithoutTimezone","scrollToTop","StyledPerformance","withDelayedStyles","components","_ref7","_ref7$palette","palette","inlineChartContainerStyle","getLinkAccountButtonStyle","getGridStyles","width","getCalloutStyles","getFluctuationPopupStyle","getFluctuationTooltipStyle","getFluctuationLoadingStyle","getBudgetCenterTooltipStyle","getDelayedStyles","getPerformanceStyles","withTablePageStateManager","getToolbarConfig","onSelectCrossPage","getBulkUnlinkAccounts","getBulkTransferAccounts","dynamicToolbarItemsKeys","_getYahooModel","getYahooModel","isCustomerManagedByYahoo","ManagedBy","isInternalUser","IsInternal","canUserAccessMicrosoftData","isManagedByYahoo","getBulkEditDropdown","selectedAccounts","selectedItems","hasManagerAccount","AccountType","IsCampaignBAMEnabled","iconLeftGlyphName","button","text","menu","items","save","disabled","buildToobarConfig","IsAccountLabelsEnabled","toolbarDynamicSelectedConfigCallback","ToolbarConfigs","getUnlinkAccountNavItem","getTransferAccountNavItem","IsOBOAgencyCreateAccountEnabled","getCreateAccountOBOButton","getCreateAccountButton","getSendRequestNavItem","IsCustomerHierarchyEnabled","withInstrumentation","_ref$palette","boxShadow","legacyUIBlockerStyle","labelColumnHeaderStyle","Feature","loadPageWebpack","importFeature","all","thePageModule","performanceDeps","withProps","importL10n","hasLegacyI18n"],"sourceRoot":""}