{"version":3,"file":"static/js/application.initial.react~f166492d.d8f6fbd2.js","mappings":"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","sources":["../../../node_modules/@bingads-webui-campaign-react/actuator/src/actuation-context.js","../../../node_modules/@bingads-webui-campaign-react/actuator/src/actuator-id.js","../../../node_modules/@bingads-webui-campaign-react/actuator/src/use-actuators-tracking.js","../../../node_modules/@bingads-webui-campaign-react/actuator/src/actuation-group.js","../../../node_modules/@bingads-webui-campaign-react/actuator/src/actuators/use-actuator-registration.js","../../../node_modules/@bingads-webui-campaign-react/actuator/src/actuators/bootstrap-expandable-actuator.js","../../../node_modules/@bingads-webui-campaign-react/actuator/src/actuators/custom-expandable-actuator.js","../../../node_modules/@bingads-webui-campaign-react/actuator/src/actuators/focusable-actuator.js","../../../node_modules/@bingads-webui-campaign-react/actuator/src/with-actuation.js","../../../node_modules/@bingads-webui-campaign-react/advisor-chart/src/consts.js","../../../node_modules/@bingads-webui-campaign-react/advisor-chart/src/metrics.js","../../../node_modules/@bingads-webui-campaign-react/advisor-chart/src/chart-configuration.js","../../../node_modules/@bingads-webui-campaign-react/advisor-chart/src/with-series-data.js","../../../node_modules/@bingads-webui-campaign-react/advisor-chart/src/with-categories.js","../../../node_modules/@bingads-webui-campaign-react/advisor-chart/src/advisor-chart.js","../../../node_modules/@bingads-webui-campaign-react/advisor-chart/src/metric-chart.js","../../../node_modules/@bingads-webui-campaign-react/advisor-chart/src/empty-chart.js","../../../node_modules/@bingads-webui-campaign-react/apex-help-dropdown-customized/src/apex-help-articles.js","../../../node_modules/@bingads-webui-campaign-react/apex-help-dropdown-customized/src/copilot-search-results.js","../../../node_modules/@bingads-webui-campaign-react/apex-help-dropdown-customized/src/consts.js","../../../node_modules/@bingads-webui-campaign-react/apex-help-dropdown-customized/src/renderApexHelpSuggestions.js","../../../node_modules/@bingads-webui-campaign-react/apex-help-dropdown-customized/src/styles/copilot-icon-styles.js","../../../node_modules/@bingads-webui-campaign-react/apex-help-dropdown-customized/src/copilot-button.js","../../../node_modules/@bingads-webui-campaign-react/apex-help-dropdown-customized/src/render-search-input-icon.js","../../../node_modules/@bingads-webui-campaign-react/attention-beacon/src/attention-beacon-context.js","../../../node_modules/@bingads-webui-campaign-react/attention-beacon/src/beacon-id.js","../../../node_modules/@bingads-webui-campaign-react/attention-beacon/src/attention-beacon-group.js","../../../node_modules/@bingads-webui-campaign-react/attention-beacon/src/consumers/with-attention-beacon-render.js","../../../node_modules/@bingads-webui-campaign-react/attention-beacon/src/with-attention-beacon.js","../../../node_modules/@bingads-webui-campaign-react/attention-beacon/src/use-attention-beacon-context.js","../../../node_modules/@bingads-webui-campaign-react/attention-beacon/src/use-needs-attention-for-adapter.js","../../../node_modules/@bingads-webui-campaign-react/attention-beacon/src/consumers/use-needs-attention.js","../../../node_modules/@bingads-webui-campaign-react/attention-beacon/src/consumers/with-attention-beacon-props-injection.js","../../../node_modules/@bingads-webui-campaign-react/brand-lists-data/src/brand-list.js","../../../node_modules/@bingads-webui-campaign-react/brand-lists-data/src/grid-edm.js","../../../node_modules/@bingads-webui-campaign-react/brand-lists-data/src/load-campaign-associated-brand-lists-factory.js","../../../node_modules/@bingads-webui-campaign-react/brand-lists-data/src/bulk-upsert-errors.js","../../../node_modules/@bingads-webui-campaign-react/brand-lists-data/src/error-handling.js","../../../node_modules/@bingads-webui-campaign-react/brand-lists-data/src/manage-brand-list-error-handling.js","../../../node_modules/@bingads-webui-campaign-react/budget-center-component/src/styles/budget-update-panel.js","../../../node_modules/@bingads-webui-campaign-react/budget-center-component/src/constants.js","../../../node_modules/@bingads-webui-campaign-react/budget-center-component/src/styles/monitoring-card.js","../../../node_modules/@bingads-webui-campaign-react/budget-center-component/src/styles/total-budget-depleted-progress-bar.js","../../../node_modules/@bingads-webui-campaign-react/budget-center-component/src/styles/tooltip-card.js","../../../node_modules/@bingads-webui-campaign-react/budget-center-component/src/styles/tree-node-with-tooltip.js","../../../node_modules/@bingads-webui-campaign-react/budget-center-component/src/styles/ui-blocker.js","../../../node_modules/@bingads-webui-campaign-react/budget-center-component/src/styles/campaign-selector.js","../../../node_modules/@bingads-webui-campaign-react/budget-center-component/src/styles/month-picker.js","../../../node_modules/@bingads-webui-campaign-react/budget-center-component/src/controls/ui-blocker.js","../../../node_modules/@bingads-webui-campaign-react/budget-center-component/src/utils/update-campaign-budget.js","../../../node_modules/@bingads-webui-campaign-react/budget-center-component/src/utils/error-handler.js","../../../node_modules/@bingads-webui-campaign-react/budget-center-component/src/utils/log-handler.js","../../../node_modules/@bingads-webui-campaign-react/budget-center-component/src/utils/format-utils.js","../../../node_modules/@bingads-webui-campaign-react/budget-center-component/src/utils/monitoring-card.js","../../../node_modules/@bingads-webui-campaign-react/budget-center-component/src/utils/url-utils.js","../../../node_modules/@bingads-webui-campaign-react/budget-center-component/src/utils/tooltip-card.js","../../../node_modules/@bingads-webui-campaign-react/budget-center-component/src/styles/top-key-card.js","../../../node_modules/@bingads-webui-campaign-react/budget-center-component/src/controls/top-key-card-controls/content-item-node.js","../../../node_modules/@bingads-webui-campaign-react/budget-center-component/src/controls/top-key-card-controls/insertion-order-card.js","../../../node_modules/@bingads-webui-campaign-react/budget-center-component/src/controls/top-key-card-controls/insertion-order-budget-and-spend-card.js","../../../node_modules/@bingads-webui-campaign-react/budget-center-component/src/utils/top-key-card.js","../../../node_modules/@bingads-webui-campaign-react/budget-center-component/src/controls/top-key-card-controls/budget-actions.js","../../../node_modules/@bingads-webui-campaign-react/budget-center-component/src/utils/top-key-card-group.js","../../../node_modules/@bingads-webui-campaign-react/budget-center-component/src/utils/tree-node-with-tooltip.js","../../../node_modules/@bingads-webui-campaign-react/budget-center-component/src/controls/budget-update-panel.js","../../../node_modules/@bingads-webui-campaign-react/budget-center-component/src/controls/monitoring-card.js","../../../node_modules/@bingads-webui-campaign-react/budget-center-component/src/controls/monitoring-card-button.js","../../../node_modules/@bingads-webui-campaign-react/budget-center-component/src/controls/tooltip-card-section.js","../../../node_modules/@bingads-webui-campaign-react/budget-center-component/src/controls/tooltip-card.js","../../../node_modules/@bingads-webui-campaign-react/budget-center-component/src/controls/total-budget-depleted-progress-bar.js","../../../node_modules/@bingads-webui-campaign-react/budget-center-component/src/controls/help-popup-title.js","../../../node_modules/@bingads-webui-campaign-react/budget-center-component/src/controls/top-key-card-controls/top-key-card-group.js","../../../node_modules/@bingads-webui-campaign-react/budget-center-component/src/controls/top-key-card-controls/alert-message.js","../../../node_modules/@bingads-webui-campaign-react/budget-center-component/src/controls/tree-node-with-tooltip.js","../../../node_modules/@bingads-webui-campaign-react/budget-center-component/src/controls/campaign-selector-item.js","../../../node_modules/@bingads-webui-campaign-react/budget-center-component/src/controls/campaign-selector.js","../../../node_modules/@bingads-webui-campaign-react/budget-center-component/src/controls/month-picker.js","../../../node_modules/@bingads-webui-campaign-react/advisor-chart/src/tooltip-template-vnext.pug"],"sourcesContent":["import React from 'react';\r\n\r\nexport const ActuationContext = React.createContext();\r\n","let actuatorId = 0;\r\nexport const getActuatorId = () => {\r\n actuatorId += 1;\r\n return actuatorId;\r\n};\r\n\r\nexport const consoleLog = (...args) => {\r\n // eslint-disable-next-line no-console\r\n console.log(...args);\r\n};\r\n","import { without } from 'underscore';\r\nimport { useCallback, useState, useContext, useEffect, useRef } from 'react';\r\nimport { ActuationContext } from './actuation-context';\r\nimport { getActuatorId } from './actuator-id';\r\n\r\nexport const useActuatorsTracking = ({ activate, needsActivation, debugMode: debugModeFromProps }) => {\r\n const parentContext = useContext(ActuationContext);\r\n const isIsolated = !parentContext;\r\n const {\r\n registerActuator: parentRegisterActuator,\r\n unregisterActuator: parentUnregisterActuator,\r\n debugMode: parentDebugMode,\r\n } = isIsolated ? {} : parentContext;\r\n const debugMode = debugModeFromProps || parentDebugMode;\r\n\r\n const actuatorsRef = useRef([]);\r\n\r\n const activateCallback = useCallback((phase) => {\r\n activate({ phase, actuators: actuatorsRef.current });\r\n }, [activate]);\r\n\r\n const registerActuator = useCallback((beacon) => {\r\n actuatorsRef.current = [...actuatorsRef.current, beacon];\r\n }, []);\r\n const unregisterActuator = useCallback((beacon) => {\r\n actuatorsRef.current = without(actuatorsRef.current, beacon);\r\n }, []);\r\n const needsActivationQuery = useCallback(phase => needsActivation({ phase, actuators: actuatorsRef.current }), [needsActivation]);\r\n\r\n const [actuatorId, setBeaconId] = useState(-1);\r\n useEffect(() => {\r\n const id = getActuatorId();\r\n setBeaconId(id);\r\n const beacon = {\r\n id, activate: activateCallback, needsActivation: needsActivationQuery,\r\n };\r\n if (!isIsolated) {\r\n parentRegisterActuator(beacon);\r\n }\r\n return () => {\r\n if (!isIsolated) {\r\n parentUnregisterActuator(beacon);\r\n }\r\n };\r\n }, [activateCallback, needsActivationQuery, isIsolated, parentRegisterActuator, parentUnregisterActuator]);\r\n\r\n return {\r\n isIsolated,\r\n actuatorId,\r\n registerActuator,\r\n unregisterActuator,\r\n actuatorsRef,\r\n debugMode,\r\n };\r\n};\r\n","import { property, noop, any } from 'underscore';\r\nimport React, { useCallback, useMemo, useState, useEffect } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport hoistNonReactStatics from 'hoist-non-react-statics';\r\nimport { getDisplayName } from '@bingads-webui-react/hoc-utils';\r\nimport { ActuationContext } from './actuation-context';\r\nimport { consoleLog } from './actuator-id';\r\nimport { useActuatorsTracking } from './use-actuators-tracking';\r\n\r\nconst needsActivation = ({ phase, actuators }) => any(actuators, b => b.needsActivation(phase));\r\n\r\nexport const ActuationGroup = ({ children, actuationProps: actuationPropsFromProps }) => {\r\n const { isActive, debugMode: debugModeFromProps } = actuationPropsFromProps;\r\n // We currently support either a root-node-mode or a proxy mode\r\n // - in the root-node-mode the parentContext is undefined\r\n // - in the proxy mode the parentContext is defined, isActive can be used for external control\r\n // of the proxy's sub-tree ignoring parent's isActive and focusing tracking\r\n const [phase, setPhase] = useState(undefined);\r\n const activate = useCallback(({ phase: newParentPhase }) => {\r\n setPhase(newParentPhase);\r\n }, []);\r\n\r\n const {\r\n actuatorId, debugMode, isIsolated, registerActuator, unregisterActuator, actuatorsRef,\r\n } = useActuatorsTracking({ activate, needsActivation, debugMode: debugModeFromProps });\r\n\r\n const log = useMemo(() => (debugMode ? consoleLog : noop), [debugMode]);\r\n\r\n const [prevIsActive, setPrevIsActive] = useState(undefined);\r\n\r\n if (isIsolated && prevIsActive !== isActive) {\r\n if (isActive) {\r\n // HACK: settling of new errors and lightning up of beacons can take several rerenders\r\n // depending on how it all integrated. Without a guaranteed synchronization of beacons\r\n // with the group we have to delay the activation using the timer\r\n setTimeout(() => setPhase('expand'), 100);\r\n } else {\r\n setPhase(undefined);\r\n }\r\n setPrevIsActive(isActive);\r\n }\r\n\r\n useEffect(() => {\r\n // In the Isolated mode the group cycles through activation phases.\r\n // In the proxy-mode the group follows parent's phases.\r\n if (phase === 'expand') {\r\n for (let i = 0; i < actuatorsRef.current.length; i += 1) {\r\n const actuator = actuatorsRef.current[i];\r\n if (actuator.needsActivation('expand', actuatorId)) {\r\n log(`[DWD] Expand actuator ${actuatorId}/${actuator.id}`);\r\n actuator.activate('expand');\r\n }\r\n }\r\n if (isIsolated) {\r\n // HACK: settling of the \"needs activation\" state for actuator can take several rerenders\r\n // depending on how it all integrated. Without a guaranteed synchronization of actuators\r\n // with the group we have to delay the activation using the timer\r\n setTimeout(() => setPhase('focus'), 500);\r\n }\r\n } else if (phase === 'focus') {\r\n for (let i = 0; i < actuatorsRef.current.length; i += 1) {\r\n const beacon = actuatorsRef.current[i];\r\n if (beacon.needsActivation('focus', actuatorId)) {\r\n log(`[DWD] Focus on beacon ${actuatorId}/${beacon.id}`);\r\n beacon.activate('focus');\r\n break;\r\n }\r\n }\r\n if (isIsolated) {\r\n setPhase(undefined);\r\n }\r\n } else {\r\n actuatorsRef.current.forEach((beacon) => {\r\n beacon.activate(undefined);\r\n });\r\n }\r\n }, [phase, actuatorId, isIsolated, actuatorsRef, log]);\r\n\r\n const actuatorContextProps = useMemo(() => ({\r\n registerActuator,\r\n unregisterActuator,\r\n debugMode,\r\n }), [registerActuator, unregisterActuator, debugMode]);\r\n\r\n return (\r\n \r\n {debugMode && `ActGrp ID: ${actuatorId}. Acts: ${actuatorsRef.current.map(property('id')).join(', ')}`}\r\n {children}\r\n \r\n );\r\n};\r\n\r\nActuationGroup.propTypes = {\r\n children: PropTypes.oneOfType([\r\n PropTypes.arrayOf(PropTypes.node),\r\n PropTypes.node,\r\n ]).isRequired,\r\n actuationProps: PropTypes.shape({\r\n isActive: PropTypes.bool,\r\n debugMode: PropTypes.bool,\r\n }),\r\n};\r\n\r\nActuationGroup.defaultProps = {\r\n actuationProps: {\r\n isActive: undefined,\r\n debugMode: false,\r\n },\r\n};\r\n\r\nexport const withActuationGroupProxy = (WrappedComponent) => {\r\n const HOC = props => (\r\n \r\n \r\n \r\n );\r\n\r\n hoistNonReactStatics(HOC, WrappedComponent);\r\n HOC.displayName = `withActuationGroupProxy(${getDisplayName(WrappedComponent)})`;\r\n\r\n return HOC;\r\n};\r\n","import { useState, useEffect } from 'react';\r\nimport { getActuatorId } from '../actuator-id';\r\n\r\nexport const useActuatorRegistration = ({ activate, needsActivation, actuatorProps }) => {\r\n const {\r\n registerActuator, unregisterActuator, debugMode,\r\n } = actuatorProps;\r\n const [actuatorId, setBeaconId] = useState(-1);\r\n useEffect(() => {\r\n const id = getActuatorId();\r\n setBeaconId(id);\r\n const actuator = {\r\n id, activate, needsActivation,\r\n };\r\n registerActuator(actuator);\r\n return () => {\r\n unregisterActuator(actuator);\r\n };\r\n }, [activate, needsActivation, registerActuator, unregisterActuator]);\r\n\r\n return { actuatorId, debugMode };\r\n};\r\n","import React, { useCallback } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport hoistNonReactStatics from 'hoist-non-react-statics';\r\nimport { getDisplayName } from '@bingads-webui-react/hoc-utils';\r\nimport { useActuatorRegistration } from './use-actuator-registration';\r\n\r\n// React-Bootstrap Collapse expander. Support only controlled mode\r\nexport const BootstrapExpandableActuator = (WrappedComponent) => {\r\n const HOC = ({\r\n actuationProps,\r\n actuatorProps,\r\n expanded: expandedFromProps,\r\n onToggle: onToggleFromProps,\r\n ...restProps\r\n }) => {\r\n const needsActivation = useCallback(queryPhase => queryPhase === 'expand', []);\r\n const activate = useCallback((phase) => {\r\n if (phase === 'expand') {\r\n onToggleFromProps(true);\r\n }\r\n }, [onToggleFromProps]);\r\n\r\n const { actuatorId, debugMode } = useActuatorRegistration({ activate, needsActivation, actuatorProps });\r\n\r\n const newProps = {\r\n expanded: expandedFromProps,\r\n onToggle: onToggleFromProps,\r\n };\r\n\r\n return (\r\n <>\r\n {debugMode && `Exp ID: ${actuatorId}. IsExpanded: ${expandedFromProps}`}\r\n \r\n \r\n );\r\n };\r\n\r\n HOC.propTypes = {\r\n actuationProps: PropTypes.shape({}),\r\n actuatorProps: PropTypes.shape({\r\n registerActuator: PropTypes.func.isRequired,\r\n unregisterActuator: PropTypes.func.isRequired,\r\n debugMode: PropTypes.bool,\r\n }),\r\n expanded: PropTypes.bool,\r\n onToggle: PropTypes.func,\r\n };\r\n\r\n HOC.defaultProps = {\r\n actuationProps: undefined,\r\n actuatorProps: {\r\n debugMode: false,\r\n },\r\n expanded: undefined,\r\n onToggle: undefined,\r\n };\r\n\r\n hoistNonReactStatics(HOC, WrappedComponent);\r\n HOC.displayName = `BootstrapExpandableActuator(${getDisplayName(WrappedComponent)})`;\r\n HOC.isActuator = true;\r\n\r\n return HOC;\r\n};\r\n","import { isFunction } from 'underscore';\r\nimport React, { useCallback, useRef } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport hoistNonReactStatics from 'hoist-non-react-statics';\r\nimport { getDisplayName } from '@bingads-webui-react/hoc-utils';\r\nimport { useActuatorRegistration } from './use-actuator-registration';\r\n\r\n// Custom expander\r\nexport const CustomExpandableActuator = (WrappedComponent) => {\r\n const HOC = ({ actuationProps, actuatorProps, ...restProps }) => {\r\n const { expand: expandFromProps, expandKey: expandKeyFromProps } = actuationProps;\r\n\r\n const expandRef = useRef(expandFromProps);\r\n expandRef.current = expandFromProps;\r\n\r\n const expandKeyRef = useRef(expandKeyFromProps);\r\n expandKeyRef.current = expandKeyFromProps;\r\n\r\n const expand = useCallback(() => {\r\n if (isFunction(expandRef.current)) {\r\n expandRef.current(expandKeyRef.current);\r\n }\r\n }, []);\r\n\r\n const needsActivation = useCallback(queryPhase => queryPhase === 'expand', []);\r\n const activate = useCallback((phase) => {\r\n if (phase === 'expand') {\r\n expand();\r\n }\r\n }, [expand]);\r\n\r\n\r\n const { actuatorId, debugMode } = useActuatorRegistration({ activate, needsActivation, actuatorProps });\r\n\r\n return (\r\n <>\r\n {debugMode && `CustExp ID: ${actuatorId}.`}\r\n \r\n \r\n );\r\n };\r\n\r\n HOC.propTypes = {\r\n actuationProps: PropTypes.shape({\r\n expand: PropTypes.func,\r\n expandKey: PropTypes.string,\r\n }),\r\n actuatorProps: PropTypes.shape({\r\n registerActuator: PropTypes.func.isRequired,\r\n unregisterActuator: PropTypes.func.isRequired,\r\n debugMode: PropTypes.bool,\r\n }),\r\n };\r\n\r\n HOC.defaultProps = {\r\n actuationProps: {\r\n expand: undefined,\r\n expandKey: undefined,\r\n },\r\n actuatorProps: {\r\n debugMode: false,\r\n },\r\n };\r\n\r\n hoistNonReactStatics(HOC, WrappedComponent);\r\n HOC.displayName = `CustomExpandableActuator(${getDisplayName(WrappedComponent)})`;\r\n HOC.isActuator = true;\r\n\r\n return HOC;\r\n};\r\n","import React, { useCallback, useEffect, useRef, useState } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport hoistNonReactStatics from 'hoist-non-react-statics';\r\nimport { getDisplayName } from '@bingads-webui-react/hoc-utils';\r\nimport { useActuatorRegistration } from './use-actuator-registration';\r\n\r\n// Brings the top of the wrapped component into focus\r\nexport const FocusableActuator = (WrappedComponent) => {\r\n const HOC = ({ actuatorProps, actuationProps, ...restProps }) => {\r\n const needsActivation = useCallback(queryPhase => queryPhase === 'focus', []);\r\n const [isActive, setIsActive] = useState(false);\r\n const activate = useCallback((phase) => {\r\n if (phase === 'focus') {\r\n setIsActive(true);\r\n }\r\n }, []);\r\n\r\n const { actuatorId, debugMode } = useActuatorRegistration({ activate, needsActivation, actuatorProps });\r\n\r\n const focusElementRef = useRef();\r\n\r\n useEffect(() => {\r\n if (isActive) {\r\n const focusables = focusElementRef.current.querySelectorAll('button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])');\r\n if (focusables.length > 0) {\r\n focusables[0].focus();\r\n } else {\r\n focusElementRef.current.scrollIntoView({\r\n behavior: 'smooth',\r\n });\r\n }\r\n setIsActive(false);\r\n }\r\n }, [isActive]);\r\n\r\n return (\r\n <>\r\n
\r\n {debugMode && `Foc ID: ${actuatorId}`}\r\n \r\n
\r\n \r\n );\r\n };\r\n\r\n HOC.propTypes = {\r\n actuatorProps: PropTypes.shape({\r\n registerActuator: PropTypes.func.isRequired,\r\n unregisterActuator: PropTypes.func.isRequired,\r\n debugMode: PropTypes.bool,\r\n }),\r\n actuationProps: PropTypes.shape({}),\r\n };\r\n\r\n HOC.defaultProps = {\r\n actuatorProps: {\r\n debugMode: false,\r\n },\r\n actuationProps: undefined,\r\n };\r\n\r\n hoistNonReactStatics(HOC, WrappedComponent);\r\n HOC.displayName = `FocusableActuator(${getDisplayName(WrappedComponent)})`;\r\n HOC.isActuator = true;\r\n\r\n return HOC;\r\n};\r\n","import { any, compose, identity } from 'underscore';\r\nimport React, { useCallback, useRef, useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport hoistNonReactStatics from 'hoist-non-react-statics';\r\nimport { getDisplayName } from '@bingads-webui-react/hoc-utils';\r\nimport { useActuatorsTracking } from './use-actuators-tracking';\r\n\r\nconst activate = ({ phase, actuators }) => {\r\n actuators.forEach(actuator => actuator.activate(phase));\r\n};\r\n\r\nexport const withActuation = (WrappedComponent, { Actuators }) => {\r\n const Actuator = compose(...(Actuators || [identity]))(WrappedComponent);\r\n\r\n const HOC = ({ actuationProps, ...restProps }) => {\r\n const { needsActivation: needsActivationFromProps } = actuationProps;\r\n const needsActivationStateRef = useRef(needsActivationFromProps);\r\n needsActivationStateRef.current = needsActivationFromProps;\r\n\r\n const needsActivation = useCallback(({ phase, actuators }) => needsActivationStateRef.current && any(actuators, b => b.needsActivation(phase)), []);\r\n const {\r\n actuatorId, debugMode, registerActuator, unregisterActuator,\r\n } = useActuatorsTracking({ activate, needsActivation });\r\n\r\n const actuatorProps = useMemo(() => ({\r\n registerActuator,\r\n unregisterActuator,\r\n debugMode,\r\n }), [debugMode, registerActuator, unregisterActuator]);\r\n\r\n return (\r\n <>\r\n {debugMode &&\r\n
{`Actuator ${actuatorId}: ${needsActivationFromProps ? '!!!' : 'OK'}`}
\r\n }\r\n \r\n \r\n );\r\n };\r\n\r\n HOC.propTypes = {\r\n actuationProps: PropTypes.shape({\r\n needsActivation: PropTypes.bool,\r\n }),\r\n };\r\n\r\n HOC.defaultProps = {\r\n actuationProps: {\r\n needsActivation: false,\r\n },\r\n };\r\n\r\n hoistNonReactStatics(HOC, WrappedComponent);\r\n HOC.displayName = `withActuation(${getDisplayName(WrappedComponent)})`;\r\n HOC.isActuator = true;\r\n\r\n return HOC;\r\n};\r\n","export const METRICS = {\r\n // Recommendations and Auction Insight\r\n ImpressionShare: 'ImpressionShare',\r\n OverlapRate: 'OverlapRate',\r\n AveragePosition: 'AveragePosition',\r\n AboveRate: 'AboveRate',\r\n TopOfPageRate: 'TopOfPageRate',\r\n AbsoluteTopOfPageRate: 'AbsoluteTopOfPageRate',\r\n OutrankingShare: 'OutrankingShare',\r\n // Recommendations\r\n ConversionRate: 'ConversionRate',\r\n SearchTerms: 'SearchTerms',\r\n};\r\n\r\nexport const CHART_TYPES = {\r\n None: null,\r\n RecommendationCard: 'RecommendationCard',\r\n SmallTile: 'SmallTile',\r\n LargeTile: 'LargeTile',\r\n Primary: 'Primary',\r\n Secondary: 'Secondary',\r\n};\r\n\r\nexport const DEVICE_TYPE = {\r\n None: null,\r\n PC: 'PC',\r\n SmartPhone: 'SmartPhone',\r\n Tablet: 'Tablet',\r\n};\r\n","import _ from 'underscore';\r\nimport {\r\n formatDecimal,\r\n} from '@bingads-webui-campaign/recommendation-core';\r\nimport { METRICS } from './consts';\r\n\r\nconst NUMBER_TYPES = {\r\n Percentage: 'Percentage',\r\n Integer: 'Integer',\r\n Short: 'Short',\r\n};\r\n\r\nconst METRICS_TYPES = {\r\n [METRICS.ImpressionShare]: NUMBER_TYPES.Percentage,\r\n [METRICS.OverlapRate]: NUMBER_TYPES.Percentage,\r\n [METRICS.AveragePosition]: NUMBER_TYPES.Integer,\r\n [METRICS.AboveRate]: NUMBER_TYPES.Percentage,\r\n [METRICS.TopOfPageRate]: NUMBER_TYPES.Percentage,\r\n [METRICS.AbsoluteTopOfPageRate]: NUMBER_TYPES.Percentage,\r\n [METRICS.OutrankingShare]: NUMBER_TYPES.Percentage,\r\n [METRICS.ConversionRate]: NUMBER_TYPES.Percentage,\r\n [METRICS.SearchTerms]: NUMBER_TYPES.Short,\r\n};\r\n\r\nconst AuctionInsightMetrics = [\r\n METRICS.ImpressionShare,\r\n METRICS.OverlapRate,\r\n METRICS.AveragePosition,\r\n METRICS.AboveRate,\r\n METRICS.TopOfPageRate,\r\n METRICS.AbsoluteTopOfPageRate,\r\n METRICS.OutrankingShare,\r\n];\r\n\r\nconst AuctionInsightMetricsForShopping = [\r\n METRICS.ImpressionShare,\r\n METRICS.OverlapRate,\r\n METRICS.AbsoluteTopOfPageRate,\r\n METRICS.OutrankingShare,\r\n];\r\n\r\nexport function isMetricPercentage(metric) {\r\n return METRICS_TYPES[metric] === NUMBER_TYPES.Percentage;\r\n}\r\n\r\nexport function formatMetric(i18n, metric, value, label = false) {\r\n const format = METRICS_TYPES[metric];\r\n const options = label ?\r\n { digits: 0 } :\r\n {\r\n maximumFractionDigits: 2,\r\n minimumFractionDigits: 2,\r\n digits: 2,\r\n };\r\n\r\n switch (format) {\r\n case NUMBER_TYPES.Percentage:\r\n return i18n.formatPercent(value, options);\r\n case NUMBER_TYPES.Short:\r\n return formatDecimal(value, i18n);\r\n case NUMBER_TYPES.Integer:\r\n default:\r\n return i18n.formatDecimalToFixed(value, options);\r\n }\r\n}\r\n\r\nexport function localizeMetric(i18n, metric) {\r\n return i18n.getString(`AuctionInsights_ColumnName_${metric}`);\r\n}\r\n\r\nexport function getLocalizedMetrics(\r\n i18n, isShoppingCampaignType = false,\r\n isAvgPositionDeprecationPhase1Enabled = false,\r\n IsAvgPositionDeprecationPhase2Enabled = false\r\n) {\r\n let metrics = isShoppingCampaignType ?\r\n AuctionInsightMetricsForShopping : AuctionInsightMetrics;\r\n\r\n if (!isAvgPositionDeprecationPhase1Enabled) {\r\n metrics = _.without(metrics, METRICS.AbsoluteTopOfPageRate);\r\n }\r\n\r\n if (IsAvgPositionDeprecationPhase2Enabled) {\r\n metrics = _.without(metrics, METRICS.AveragePosition);\r\n }\r\n\r\n return _.map(metrics, (metric, id) => ({\r\n id,\r\n value: localizeMetric(i18n, metric),\r\n metric,\r\n }));\r\n}\r\n\r\nexport function localizeTitle(i18n, metric) {\r\n return i18n.getString(`Chart_Title_${metric}`);\r\n}\r\n","/* eslint-disable no-param-reassign */\r\nimport _ from 'underscore';\r\nimport { localizeSegmentationValue, segmentationType } from '@bingads-webui-campaign/segmentation-utilities';\r\nimport { merge } from '@bingads-webui-universal/primitive-utilities';\r\n\r\nimport tooltipTemplateVNext from './tooltip-template-vnext.pug';\r\n\r\nimport {\r\n CHART_TYPES,\r\n} from './consts';\r\nimport {\r\n formatMetric,\r\n isMetricPercentage,\r\n localizeMetric,\r\n localizeTitle,\r\n} from './metrics';\r\n\r\nconst CHART_TYPE = {\r\n COLUMN: 'column',\r\n LINE: 'line',\r\n};\r\n\r\nconst VNextColors = [\r\n '#0078d4',\r\n '#022f22',\r\n '#e3008c',\r\n '#4b003f',\r\n '#917edb',\r\n // above 5 colors are revised against default colors for\r\n // competition card which has at most 5 lines,\r\n // work with designer to get below 5 updated if necessary\r\n '#01188F',\r\n '#006D21',\r\n '#0C8484',\r\n '#D8D8D8',\r\n '#666666',\r\n];\r\n\r\nconst VNextRecommendationCardColors = [\r\n // From Figma:\r\n // https://www.figma.com/file/UiSbekGiA9XqEL6WM2v5allf/Microsoft-Advertising-HIG-0.01.01?node-id=11345%3A12550\r\n '#0078d4',\r\n '#022F22',\r\n '#E3008C',\r\n '#00188F',\r\n '#E86E58',\r\n '#001D3F',\r\n '#917EDB',\r\n '#502006',\r\n '#00A5B0',\r\n '#4B003F',\r\n '#D9D9D9',\r\n];\r\n\r\nfunction getChartType(primarySegmentType = null) {\r\n return _.contains([\r\n segmentationType.DayOfWeek,\r\n segmentationType.HourOfDay,\r\n segmentationType.Device,\r\n null,\r\n ], primarySegmentType) ?\r\n CHART_TYPE.COLUMN :\r\n CHART_TYPE.LINE;\r\n}\r\n\r\nfunction showXLabels(primarySegmentType = null) {\r\n return _.contains([\r\n segmentationType.DayOfWeek,\r\n segmentationType.HourOfDay,\r\n segmentationType.Device,\r\n ], primarySegmentType);\r\n}\r\n\r\nfunction setSeriesVNextMarker(chartOptions, subType) {\r\n const vNextMarkerSymbols = [\r\n 'circle',\r\n 'diamond',\r\n 'triangle-down',\r\n 'triangle',\r\n 'square',\r\n 'circle',\r\n 'diamond',\r\n 'triangle-down',\r\n 'triangle',\r\n 'square',\r\n ];\r\n _.each(chartOptions.series, (sery, index) => {\r\n if (index < vNextMarkerSymbols.length) {\r\n sery.marker = {\r\n symbol: vNextMarkerSymbols[index],\r\n enabled: subType !== 'Line_Weekly_Chart',\r\n lineWidth: 2,\r\n radius: 6,\r\n };\r\n }\r\n sery.lineWidth = 2;\r\n });\r\n}\r\n\r\nfunction getYAxis(i18n, metric) {\r\n return {\r\n title: {\r\n text: null,\r\n style: {\r\n color: '#333333',\r\n fontFamily: 'Segoe UI',\r\n fontWeight: 'normal',\r\n fontSize: '12px',\r\n },\r\n },\r\n labels: {\r\n formatter() {\r\n return `${formatMetric(i18n, metric, this.value, true)}`;\r\n },\r\n },\r\n min: 0,\r\n ceiling: isMetricPercentage(metric) ?\r\n 1 : null,\r\n minTickInterval: isMetricPercentage(metric) ?\r\n 0.01 : 1,\r\n tickPixelInterval: 30,\r\n gridLineDashStyle: 'dash',\r\n visible: true,\r\n showFirstLabel: true,\r\n showLastLabel: true,\r\n };\r\n}\r\n\r\nfunction defaultChartOptions({\r\n i18n,\r\n metric,\r\n primarySegmentType,\r\n series,\r\n localizeCategory,\r\n}) {\r\n return {\r\n series,\r\n tooltip: {\r\n useHTML: true,\r\n formatter({ chart }) {\r\n const options = {\r\n color: this.color,\r\n blockChart: chart.options.chart.type === CHART_TYPE.COLUMN,\r\n segment: this.key === 0 ? null : localizeCategory(this.key),\r\n name: this.series.options.fullName || this.series.name,\r\n metric: localizeMetric(i18n, this.series.options.metric || metric),\r\n metricValue: formatMetric(i18n, this.series.options.metric || metric, this.y),\r\n index: this.series.index,\r\n };\r\n return tooltipTemplateVNext(options);\r\n },\r\n },\r\n chart: {\r\n type: getChartType(primarySegmentType),\r\n spacingTop: 10,\r\n spacingLeft: 0,\r\n spacingRight: 0,\r\n spacingBottom: 10,\r\n marginLeft: 50,\r\n marginRight: 10,\r\n },\r\n colors: [\r\n '#006464',\r\n '#BE5A00',\r\n '#B40091',\r\n '#600090',\r\n '#0078D7',\r\n '#01188F',\r\n '#006D21',\r\n '#0C8484',\r\n '#D8D8D8',\r\n '#666666',\r\n ],\r\n credits: {\r\n enabled: false,\r\n },\r\n legend: {\r\n align: 'right',\r\n verticalAlign: 'top',\r\n layout: 'horizontal',\r\n width: 350,\r\n itemStyle: {\r\n fontWeight: 'normal',\r\n textOverflow: 'ellipsis',\r\n overflow: 'hidden',\r\n },\r\n squareSymbol: false,\r\n symbolRadius: 0,\r\n symbolHeight: 5,\r\n symbolWidth: 19,\r\n },\r\n yAxis: getYAxis(i18n, metric),\r\n xAxis: {\r\n visible: true,\r\n lineWidth: 1,\r\n lineColor: '#DEE0E3',\r\n labels: {\r\n enabled: showXLabels(primarySegmentType),\r\n formatter() {\r\n return `${localizeCategory(this.value)}`;\r\n },\r\n style: {\r\n fontFamily: 'Segoe UI',\r\n },\r\n },\r\n tickLength: 0,\r\n type: 'category',\r\n plotBands: [],\r\n },\r\n title: {\r\n text: null,\r\n },\r\n plotOptions: {\r\n series: {\r\n maxPointWidth: 75,\r\n connectNulls: true,\r\n zoneAxis: 'x',\r\n },\r\n line: {\r\n pointPlacement: 'on',\r\n },\r\n },\r\n };\r\n}\r\n\r\nconst primaryChartOptions = config => merge(config, {\r\n chart: {\r\n height: 300,\r\n },\r\n});\r\n\r\nconst weeklyDataChartOptions = (i18n, config) => {\r\n const data = merge(config, {\r\n plotOptions: {\r\n line: {\r\n lineWidth: 1,\r\n },\r\n series: {\r\n marker: {\r\n enabled: false,\r\n },\r\n },\r\n },\r\n });\r\n\r\n const { xAxis } = data;\r\n delete data.xAxis;\r\n\r\n data.xAxis = [\r\n merge(xAxis, {\r\n showFirstLabel: false,\r\n tickLength: 5,\r\n tickInterval: 24,\r\n gridLineWidth: 1,\r\n labels: {\r\n enabled: true,\r\n formatter() {\r\n return i18n.formatDate(new Date(this.value), {\r\n skeleton: 'h',\r\n timeZone: null,\r\n });\r\n },\r\n style: {\r\n fontFamily: 'Segoe UI',\r\n },\r\n },\r\n }),\r\n {\r\n linkedTo: 0,\r\n opposite: true,\r\n type: 'category',\r\n showFirstLabel: true,\r\n tickLength: 0,\r\n tickInterval: 12,\r\n labels: {\r\n enabled: true,\r\n formatter() {\r\n // get category from first Axis\r\n const value = this.chart.xAxis[0].names[this.value];\r\n return i18n.formatDate(new Date(value), {\r\n skeleton: 'EEEEE',\r\n timeZone: null,\r\n });\r\n },\r\n },\r\n tickPositions: _.map(_.range(7), val => (val * 24) + 12),\r\n },\r\n ];\r\n // if (_.has(data, 'series')) {\r\n // data.series = data.series.map((sery) => {\r\n // sery = merge(sery, {\r\n // marker: {\r\n // enabled: false,\r\n // },\r\n // });\r\n // return sery;\r\n // });\r\n // }\r\n return data;\r\n};\r\n\r\nconst lineColumnChartOptions = (i18n, config, metric) => {\r\n // Update ConversionRate series\r\n let data = config;\r\n const conversionSeries = _.findWhere(data.series, { yAxis: 1 });\r\n\r\n if (conversionSeries) {\r\n data = merge(config, {\r\n chart: {\r\n // need right margin for second yAxis\r\n marginRight: 70,\r\n },\r\n plotOptions: {\r\n column: {\r\n color: '#BBD5E6',\r\n maxPointWidth: 35,\r\n },\r\n },\r\n });\r\n\r\n const { yAxis } = data;\r\n delete data.yAxis;\r\n\r\n // Need to align yaxis of primary and secondary metrics.\r\n if (isMetricPercentage(metric)) {\r\n data.yAxis = [\r\n merge(yAxis, {\r\n tickInterval: 0.2,\r\n tickPixelInterval: 36,\r\n }),\r\n merge(getYAxis(i18n, 'ConversionRate'), {\r\n opposite: true,\r\n title: {\r\n text: localizeMetric(i18n, 'ConversionRate'),\r\n },\r\n tickInterval: 0.2,\r\n tickPixelInterval: 36,\r\n }),\r\n ];\r\n } else {\r\n data.yAxis = [\r\n yAxis,\r\n merge(getYAxis(i18n, 'ConversionRate'), {\r\n opposite: true,\r\n title: {\r\n text: localizeMetric(i18n, 'ConversionRate'),\r\n },\r\n }),\r\n ];\r\n }\r\n\r\n conversionSeries.type = 'column';\r\n conversionSeries.name = i18n.getString('Conversions_Data_Template', { name: conversionSeries.name });\r\n }\r\n\r\n if (config.chart.type === 'column') {\r\n data = merge(data, {\r\n data: {\r\n plotOptions: {\r\n series: {\r\n pointWidth: '16px',\r\n },\r\n },\r\n },\r\n });\r\n }\r\n\r\n return data;\r\n};\r\n\r\nconst columnBottomChartOptions = (i18n, config, metric) => {\r\n const options = merge(config, {\r\n chart: {\r\n height: 250,\r\n marginTop: 40,\r\n },\r\n legend: {\r\n x: 30,\r\n y: 10,\r\n layout: 'horizontal',\r\n align: 'left',\r\n verticalAlign: 'bottom',\r\n itemStyle: {\r\n color: '#333333',\r\n fontFamily: 'Segoe UI',\r\n fontWeight: 'normal',\r\n fontSize: '10px',\r\n width: '200px',\r\n },\r\n width: 520,\r\n },\r\n title: {\r\n text: localizeTitle(i18n, metric),\r\n style: {\r\n color: '#333333',\r\n fontFamily: 'Segoe UI',\r\n fontWeight: 'normal',\r\n fontSize: '12px',\r\n },\r\n },\r\n });\r\n return options;\r\n};\r\n\r\nconst recommendationCardChartOptions = (i18n, config, metric, subType) => {\r\n // configuration for all recommendation cards\r\n let data = merge(config, {\r\n chart: {\r\n height: 250,\r\n // Need extra space for yAxis title\r\n marginLeft: 70,\r\n },\r\n yAxis: {\r\n title: {\r\n text: localizeMetric(i18n, metric),\r\n },\r\n },\r\n });\r\n\r\n switch (subType) {\r\n case 'Line_Weekly_Chart':\r\n data = weeklyDataChartOptions(i18n, data);\r\n break;\r\n case 'Line_Column_Chart':\r\n data = lineColumnChartOptions(i18n, data, metric);\r\n break;\r\n case 'Search_Terms_Chart':\r\n data = columnBottomChartOptions(i18n, data, metric);\r\n break;\r\n default:\r\n }\r\n\r\n return data;\r\n};\r\n\r\nconst secondaryChartOptions = (i18n, config, secondarySegment) => {\r\n const option = merge(config, {\r\n chart: {\r\n height: 142.5,\r\n },\r\n legend: {\r\n enabled: false,\r\n width: 0,\r\n },\r\n title: {\r\n text: localizeSegmentationValue({\r\n i18n,\r\n type: segmentationType.DeviceType,\r\n value: secondarySegment,\r\n }),\r\n margin: 0,\r\n floating: false,\r\n align: 'right',\r\n style: {\r\n fontSize: '12px',\r\n },\r\n },\r\n });\r\n return option;\r\n};\r\n\r\nconst tileChartOptionsVNext = (config, isForRecommendationCard = false) => {\r\n const options = merge(config, {\r\n chart: {\r\n height: 180,\r\n marginRight: 10,\r\n marginBottom: 10,\r\n },\r\n colors: isForRecommendationCard ? VNextRecommendationCardColors : VNextColors,\r\n legend: {\r\n enabled: false,\r\n },\r\n xAxis: {\r\n labels: {\r\n enabled: false,\r\n style: {\r\n fontFamily: 'Segoe UI',\r\n },\r\n },\r\n },\r\n tickLength: 0,\r\n tooltip: {\r\n backgroundColor: null,\r\n borderWidth: 0,\r\n shadow: false,\r\n outside: false,\r\n positioner(labelWidth, labelHeight, point) {\r\n // a custom positioner to keep tooltips inside the plot area\r\n\r\n // if current point x + label width is bigger than plot width\r\n // which means part of label will be outside plot\r\n // so we put tooltip to the left of point\r\n // otherwise keep tooltip to the right\r\n // if corrected x is negative, make it zero\r\n // similar logic to handle y\r\n\r\n // we have predefined label width and height\r\n // in case label width and height is too small\r\n\r\n const predefinedLabelWidth = 190;\r\n labelWidth = Math.max(labelWidth, predefinedLabelWidth);\r\n let x = (point.plotX + labelWidth) > this.chart.plotWidth ?\r\n (point.plotX - labelWidth) :\r\n point.plotX;\r\n if (x < 0) {\r\n x = 0;\r\n }\r\n\r\n const predefinedLabelHeight = 110;\r\n labelHeight = Math.max(labelHeight, predefinedLabelHeight);\r\n let y = (point.plotY + labelHeight) > this.chart.plotHeight ?\r\n (point.plotY - labelHeight) :\r\n point.plotY;\r\n if (y < 0) {\r\n y = 0;\r\n }\r\n\r\n return { x, y };\r\n },\r\n },\r\n });\r\n return options;\r\n};\r\n\r\nexport function getChartOptions({\r\n i18n,\r\n type,\r\n subType,\r\n metric,\r\n primarySegmentType,\r\n secondarySegment,\r\n series,\r\n localizeCategory,\r\n}) {\r\n let chartOptions = defaultChartOptions({\r\n i18n,\r\n metric,\r\n primarySegmentType,\r\n series,\r\n localizeCategory,\r\n });\r\n\r\n // customize default chart options based on type\r\n switch (type) {\r\n case CHART_TYPES.LargeTile:\r\n case CHART_TYPES.SmallTile:\r\n tileChartOptionsVNext(chartOptions);\r\n setSeriesVNextMarker(chartOptions);\r\n break;\r\n case CHART_TYPES.Secondary:\r\n chartOptions = secondaryChartOptions(\r\n i18n,\r\n chartOptions,\r\n secondarySegment\r\n );\r\n tileChartOptionsVNext(chartOptions, true);\r\n setSeriesVNextMarker(chartOptions, subType);\r\n chartOptions.chart.height = 130;\r\n break;\r\n case CHART_TYPES.RecommendationCard:\r\n chartOptions = recommendationCardChartOptions(\r\n i18n,\r\n chartOptions,\r\n metric,\r\n subType\r\n );\r\n tileChartOptionsVNext(chartOptions, true);\r\n setSeriesVNextMarker(chartOptions, subType);\r\n break;\r\n default:\r\n chartOptions = primaryChartOptions(chartOptions);\r\n tileChartOptionsVNext(chartOptions, true);\r\n setSeriesVNextMarker(chartOptions, subType);\r\n chartOptions.chart.height = 277;\r\n }\r\n\r\n return chartOptions;\r\n}\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport hoistNonReactStatics from 'hoist-non-react-statics';\r\nimport { getDisplayName } from '@bingads-webui-react/hoc-utils';\r\nimport _ from 'underscore';\r\nimport { include } from 'underscore.string';\r\n\r\nfunction formatName(i18n, name) {\r\n if (name === 'You') {\r\n return { name: i18n.getString('AuctionInsights_You') };\r\n }\r\n\r\n if (include(name, ';')) {\r\n const domains = _.flatten(name.split(';'));\r\n const count = _.chain(domains)\r\n .compact()\r\n .size()\r\n .value();\r\n if (count > 3) {\r\n return {\r\n name: i18n.getString('Multiple_Competitors_Template', {\r\n count,\r\n competitor1: domains[0],\r\n competitor2: domains[1],\r\n competitor3: domains[2],\r\n }),\r\n fullName: i18n.getString('Multiple_Competitors_Template_Full', {\r\n count,\r\n competitors: domains.join(', '),\r\n }),\r\n };\r\n }\r\n }\r\n return { name };\r\n}\r\n\r\nfunction generateZones(data) {\r\n // change null data to dotted lines\r\n const zones = _.reduce(data, (memo, num, index) => {\r\n if (_.isNull(num)) {\r\n const prev = _.findWhere(memo, { value: index });\r\n if (prev) {\r\n // If previous found, extend zone duration\r\n prev.value = index + 1;\r\n } else {\r\n // If no previous value found, create new zone around index\r\n memo.push({ value: index - 1 });\r\n memo.push({ value: index + 1, dashStyle: 'dot' });\r\n }\r\n }\r\n return memo;\r\n }, []);\r\n\r\n return {\r\n zones,\r\n };\r\n}\r\n\r\nfunction mapSeries(data, categories = []) {\r\n return {\r\n data: _.map(data, (value, i) => ([categories[i], value])),\r\n };\r\n}\r\n\r\nfunction patchMissingData(items, categories, secondarySegment = null) {\r\n if (_.isEmpty(categories)) return items;\r\n\r\n // patch missing data with null\r\n return _.map(items, (item) => {\r\n const data = _.map(\r\n categories,\r\n primarySegment =>\r\n _.result(_.find(\r\n item.segmentData,\r\n segment =>\r\n segment.primarySegment === primarySegment &&\r\n (secondarySegment ? segment.secondarySegment === secondarySegment : true)\r\n ), 'value', null)\r\n );\r\n return _.extend(item, {\r\n data,\r\n });\r\n });\r\n}\r\n\r\nfunction withSecondMetric(secondaryMetric, metric) {\r\n return metric === secondaryMetric ?\r\n {\r\n yAxis: 1,\r\n zIndex: 0,\r\n metric,\r\n } :\r\n {\r\n yAxis: 0,\r\n zIndex: 1,\r\n metric,\r\n };\r\n}\r\n\r\nfunction getSeriesWithSecondMetric(\r\n i18n,\r\n items,\r\n secondarySegment,\r\n categories,\r\n secondaryMetric\r\n) {\r\n const patchedData = patchMissingData(items, categories, secondarySegment);\r\n\r\n return _.map(patchedData, ({\r\n name, data, metric, visible,\r\n }) => _.extend(\r\n mapSeries(data, categories),\r\n formatName(i18n, name),\r\n generateZones(data),\r\n withSecondMetric(secondaryMetric, metric),\r\n !_.isUndefined(visible) && { visible }\r\n ));\r\n}\r\n\r\nexport const WithSeriesData = (WrappedComponent) => {\r\n const HoC = props => (\r\n \r\n );\r\n\r\n HoC.displayName = `WithSeriesData(${getDisplayName(WrappedComponent)})`;\r\n HoC.propTypes = {\r\n secondaryMetric: PropTypes.string,\r\n secondarySegment: PropTypes.string,\r\n categories: PropTypes.arrayOf(PropTypes.string),\r\n i18n: PropTypes.PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n items: PropTypes.arrayOf(PropTypes.shape({\r\n name: PropTypes.string,\r\n data: PropTypes.arrayOf(PropTypes.number),\r\n metric: PropTypes.string,\r\n segmentData: PropTypes.arrayOf(PropTypes.shape({\r\n primarySegment: PropTypes.string,\r\n secondarySegment: PropTypes.string,\r\n value: PropTypes.number,\r\n })),\r\n })).isRequired,\r\n };\r\n HoC.defaultProps = {\r\n secondarySegment: null,\r\n categories: [],\r\n secondaryMetric: null,\r\n };\r\n\r\n hoistNonReactStatics(HoC, WrappedComponent);\r\n\r\n return HoC;\r\n};\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport _ from 'underscore';\r\nimport hoistNonReactStatics from 'hoist-non-react-statics';\r\nimport { getDisplayName } from '@bingads-webui-react/hoc-utils';\r\nimport {\r\n localizeSegmentationValue,\r\n segmentationType\r\n} from '@bingads-webui-campaign/segmentation-utilities';\r\n\r\nimport {\r\n DEVICE_TYPE,\r\n} from './consts';\r\n\r\n// value may be \"2020-07-09\" or \"2018-07-19T00:00:00\"\r\nfunction localizeCategory(i18n, value, type = segmentationType.DeviceType) {\r\n if (type === 'Hour') {\r\n return i18n.formatDate(\r\n i18n.parseDate(value, { raw: \"yyyy-MM-dd'T'HH:mm:ss\" }) || i18n.parseDate(value, { raw: 'yyyy-MM-dd' }),\r\n { skeleton: 'yMEdh' }\r\n );\r\n } else if (type === 'Day') {\r\n return i18n.formatDate(\r\n i18n.parseDate(value, { raw: \"yyyy-MM-dd'T'HH:mm:ss\" }) || i18n.parseDate(value, { raw: 'yyyy-MM-dd' }),\r\n { skeleton: 'yMEd' }\r\n );\r\n }\r\n\r\n return localizeSegmentationValue({\r\n i18n,\r\n type,\r\n value,\r\n });\r\n}\r\n\r\nfunction getAllCategories(primarySegmentType, items) {\r\n // return harded coded list for HourOfDay and DayOfWeek\r\n if (_.isNull(primarySegmentType)) {\r\n return [];\r\n } else if (primarySegmentType === segmentationType.HourOfDay) {\r\n return _.map(_.range(24), hour => `${hour}`);\r\n } else if (primarySegmentType === segmentationType.DayOfWeek) {\r\n return ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];\r\n } else if (primarySegmentType === segmentationType.Device) {\r\n return _.compact(_.values(DEVICE_TYPE));\r\n }\r\n\r\n // Generate list based on union of all categories.\r\n // sortBy is the same sort used by auctionInsights, so categories are in order\r\n return _.chain(items)\r\n .pluck('segmentData')\r\n .flatten()\r\n .pluck('primarySegment')\r\n .union()\r\n .sortBy()\r\n .value();\r\n}\r\n\r\nexport const WithCategories = (WrappedComponent) => {\r\n const HoC = props => (\r\n \r\n localizeCategory(props.i18n, item, props.primarySegmentType))\r\n }\r\n />\r\n );\r\n\r\n HoC.displayName = `WithCategories(${getDisplayName(WrappedComponent)})`;\r\n HoC.propTypes = {\r\n primarySegmentType: PropTypes.string,\r\n i18n: PropTypes.PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n items: PropTypes.arrayOf(PropTypes.shape({\r\n name: PropTypes.string,\r\n data: PropTypes.arrayOf(PropTypes.number),\r\n segmentData: PropTypes.arrayOf(PropTypes.shape({\r\n primarySegment: PropTypes.string,\r\n secondarySegment: PropTypes.string,\r\n value: PropTypes.number,\r\n })),\r\n })).isRequired,\r\n };\r\n HoC.defaultProps = {\r\n primarySegmentType: null,\r\n };\r\n\r\n hoistNonReactStatics(HoC, WrappedComponent);\r\n\r\n return HoC;\r\n};\r\n","/* eslint-disable jsx-a11y/no-static-element-interactions */\r\nimport React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport _ from 'underscore';\r\nimport { HighchartReactWrapper } from '@bingads-webui-react/highchart-react-wrapper';\r\nimport { keyCode } from '@bingads-webui/keycode';\r\n\r\nimport {\r\n CHART_TYPES,\r\n} from './consts';\r\nimport { getChartOptions } from './chart-configuration';\r\nimport { WithSeriesData } from './with-series-data';\r\nimport { WithCategories } from './with-categories';\r\n\r\nconst CHART_TYPE = {\r\n COLUMN: 'column',\r\n LINE: 'line',\r\n};\r\n\r\nclass AdvisorChartView extends React.Component {\r\n static defaultProps = {\r\n type: null,\r\n primarySegmentType: null,\r\n secondarySegment: null,\r\n title: null,\r\n subType: null,\r\n categories: [],\r\n localizeCategory: _.noop,\r\n enableLegend: true,\r\n onChartRenderedCallback: _.noop,\r\n };\r\n\r\n static propTypes = {\r\n selectedMetric: PropTypes.string.isRequired,\r\n primarySegmentType: PropTypes.string,\r\n secondarySegment: PropTypes.string,\r\n title: PropTypes.string,\r\n type: PropTypes.oneOf(_.values(CHART_TYPES)),\r\n subType: PropTypes.string,\r\n i18n: PropTypes.PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n localizeCategory: PropTypes.func,\r\n categories: PropTypes.arrayOf(PropTypes.string),\r\n series: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n enableLegend: PropTypes.bool,\r\n onChartRenderedCallback: PropTypes.func,\r\n };\r\n\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n labelsVisibilityUpdated: false,\r\n };\r\n }\r\n\r\n onLabelClick = (index) => {\r\n // flip visible property\r\n // only when it was false, it becomes true, all others (true/null/undefined) now becomes false\r\n this.props.series[index].visible = (this.props.series[index].visible === false);\r\n\r\n // manually trigger a re-render\r\n this.setState({\r\n labelsVisibilityUpdated: !this.state.labelsVisibilityUpdated,\r\n });\r\n };\r\n\r\n onLabelKeyDown = (event, index) => {\r\n if (event.keyCode === keyCode.Enter || event.keyCode === keyCode.Space) {\r\n this.onLabelClick(index);\r\n }\r\n };\r\n\r\n buildVNextLegendLabels(chartOptions) {\r\n const labels = [];\r\n\r\n _.each(chartOptions.series, (sery, index) => {\r\n const label = (\r\n
  • \r\n this.onLabelClick(index)}\r\n onKeyDown={event => this.onLabelKeyDown(event, index)}\r\n tabIndex={0}\r\n role=\"button\"\r\n >\r\n {sery.name}\r\n \r\n
  • \r\n );\r\n labels.push(label);\r\n });\r\n\r\n return (\r\n
    \r\n
      \r\n {labels}\r\n
    \r\n
    \r\n );\r\n }\r\n\r\n renderRow(chartOptions, element) {\r\n return (\r\n \r\n {element}\r\n \r\n );\r\n }\r\n\r\n render() {\r\n const chartOptions = getChartOptions({\r\n i18n: this.props.i18n,\r\n type: this.props.type,\r\n subType: this.props.subType,\r\n metric: this.props.selectedMetric,\r\n primarySegmentType: this.props.primarySegmentType,\r\n secondarySegment: this.props.secondarySegment,\r\n series: this.props.series,\r\n localizeCategory: this.props.localizeCategory,\r\n enableLegend: this.props.enableLegend,\r\n });\r\n\r\n return (\r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n {chartOptions.chart.type === CHART_TYPE.COLUMN &&\r\n this.props.title &&\r\n this.renderRow(\r\n chartOptions, (\r\n \r\n {this.props.title}\r\n \r\n )\r\n )\r\n }\r\n {chartOptions.chart.type !== CHART_TYPE.COLUMN &&\r\n this.props.subType !== 'Line_Weekly_Chart' &&\r\n this.renderRow(\r\n chartOptions, (\r\n
    \r\n
    \r\n \r\n {this.props.localizeCategory(_.first(this.props.categories))}\r\n \r\n
    \r\n
    \r\n \r\n {this.props.localizeCategory(_.last(this.props.categories))}\r\n \r\n
    \r\n
    \r\n )\r\n )\r\n }\r\n {\r\n this.props.enableLegend && this.buildVNextLegendLabels(chartOptions)\r\n }\r\n
    \r\n );\r\n }\r\n}\r\n\r\nexport const AdvisorChart =\r\n WithCategories(WithSeriesData(AdvisorChartView));\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport _ from 'underscore';\r\nimport { segmentationType } from '@bingads-webui-campaign/segmentation-utilities';\r\n\r\nimport { AdvisorChart } from './advisor-chart';\r\nimport {\r\n CHART_TYPES,\r\n DEVICE_TYPE,\r\n METRICS,\r\n} from './consts';\r\n\r\nconst maxNumber = 5;\r\n\r\nfunction getDeviceTypeList(raw, primaryDeviceType) {\r\n // get segmentData from first item\r\n const segmentData = raw[0].PerformanceMetrics.SegmentedData;\r\n\r\n if (_.size(segmentData) > 0 && _.size(segmentData[0].Key) > 1) {\r\n const keys = _.pluck(segmentData[0].Key, 'StringValue');\r\n\r\n if (_.intersection(keys, DEVICE_TYPE).length > 0) {\r\n // Move the primaryDeviceType to start of the list\r\n // Use compact to remove null from list\r\n return _.compact(_.union(\r\n [primaryDeviceType],\r\n _.values(DEVICE_TYPE)\r\n ));\r\n }\r\n }\r\n\r\n return [null];\r\n}\r\n\r\nfunction isYou(item) {\r\n return item.DisplayDomain === 'You';\r\n}\r\n\r\nfunction findYou(items) {\r\n return _.find(items, isYou);\r\n}\r\n\r\nfunction filterItems(raw, domainFilter) {\r\n const you = findYou(raw);\r\n let topItems = raw;\r\n\r\n if (!_.isEmpty(domainFilter)) {\r\n topItems = _.filter(raw, ({ DisplayDomain }) => _.contains(domainFilter, DisplayDomain));\r\n }\r\n\r\n // Ensure 'You' is always first item in chart\r\n topItems = _.first(topItems, maxNumber);\r\n\r\n if (you) {\r\n topItems = _.union([you], topItems);\r\n topItems = _.first(topItems, maxNumber);\r\n }\r\n\r\n return topItems;\r\n}\r\n\r\nfunction extractSegmentDataForMetric(items, metric) {\r\n let primarySegmentType = null;\r\n let secondarySegmentType = null;\r\n const data = _.map(items, (item) => {\r\n const keys = _.size(item.Key);\r\n let primarySegment = null;\r\n let secondarySegment = null;\r\n\r\n if (keys === 2) {\r\n const primary = _.find(\r\n item.Key,\r\n ({ SegmentationType }) => SegmentationType !== segmentationType.Device\r\n );\r\n primarySegment = primary.StringValue;\r\n primarySegmentType = primary.SegmentationType;\r\n\r\n const secondary = _.find(\r\n item.Key,\r\n ({ SegmentationType }) => SegmentationType === segmentationType.Device\r\n );\r\n\r\n secondarySegment = secondary.StringValue;\r\n secondarySegmentType = secondary.SegmentationType;\r\n } else {\r\n primarySegment = item.Key[0].StringValue;\r\n primarySegmentType = item.Key[0].SegmentationType;\r\n }\r\n\r\n return {\r\n primarySegment,\r\n secondarySegment,\r\n value: item.Data[metric],\r\n };\r\n });\r\n\r\n return {\r\n primarySegmentType,\r\n secondarySegmentType,\r\n data,\r\n };\r\n}\r\n\r\nfunction extractDataForMetric(topItems, metric) {\r\n let primarySegmentType = null;\r\n let secondarySegmentType = null;\r\n const shouldHideYou = _.contains([\r\n METRICS.AboveRate,\r\n METRICS.OverlapRate,\r\n METRICS.OutrankingShare,\r\n ], metric);\r\n\r\n const items = _.map(topItems, (item) => {\r\n const data = {\r\n name: item.DisplayDomain,\r\n data: [item.PerformanceMetrics[metric]],\r\n };\r\n\r\n if (shouldHideYou && isYou(item)) {\r\n data.visible = false;\r\n }\r\n\r\n const segmentData = extractSegmentDataForMetric(item.PerformanceMetrics.SegmentedData, metric);\r\n ({ primarySegmentType, secondarySegmentType } = segmentData);\r\n\r\n return _.extend(data, {\r\n segmentData: segmentData.data,\r\n });\r\n });\r\n\r\n return {\r\n items,\r\n primarySegmentType,\r\n secondarySegmentType,\r\n };\r\n}\r\n\r\nexport class AdvisorChartWithMetrics extends React.PureComponent {\r\n static defaultProps = {\r\n chartType: null,\r\n domains: null,\r\n primaryDeviceType: null,\r\n onChartRenderedCallback: _.noop,\r\n };\r\n\r\n static propTypes = {\r\n i18n: PropTypes.PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n selectedMetric: PropTypes.string.isRequired,\r\n primaryDeviceType: PropTypes.string,\r\n domains: PropTypes.arrayOf(PropTypes.string),\r\n chartType: PropTypes.oneOf(_.values(CHART_TYPES)),\r\n items: PropTypes.arrayOf(PropTypes.shape({\r\n PerformanceMetrics: PropTypes.object.isRequired,\r\n DisplayDomain: PropTypes.string.isRequired,\r\n })).isRequired,\r\n onChartRenderedCallback: PropTypes.func,\r\n };\r\n\r\n render() {\r\n if (_.isEmpty(this.props.items)) {\r\n return (null);\r\n }\r\n const deviceTypeList = getDeviceTypeList(this.props.items, this.props.primaryDeviceType);\r\n const topData = filterItems(this.props.items, this.props.domains);\r\n const {\r\n items,\r\n primarySegmentType,\r\n } = extractDataForMetric(topData, this.props.selectedMetric);\r\n const showDeviceTypeDropdown = _.size(deviceTypeList) > 1;\r\n\r\n return (\r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n {showDeviceTypeDropdown &&\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\n }\r\n
    \r\n
    \r\n );\r\n }\r\n}\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nexport const EmptyChart = ({ i18n }) => (\r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n);\r\n\r\nEmptyChart.displayName = 'EmptyChart';\r\nEmptyChart.propTypes = {\r\n i18n: PropTypes.PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n};\r\n","import React, { useEffect, useState, useCallback } from 'react';\r\nimport _ from 'underscore';\r\nimport PropTypes from 'prop-types';\r\nimport $ from 'jquery';\r\n\r\nexport const ApexHelpArticles = (props) => {\r\n const [showHelpArticleTitle, setShowHelpArticleTitle] = useState(false);\r\n\r\n const {\r\n suggestionData,\r\n renderSuggestionToHtml,\r\n logger,\r\n } = props;\r\n\r\n useEffect(() => {\r\n if (_.get($('.apex-topic'), 'length') > 0) {\r\n setShowHelpArticleTitle(true);\r\n } else {\r\n setShowHelpArticleTitle(false);\r\n }\r\n }, [suggestionData]);\r\n\r\n\r\n const tryRenderSuggestionToHtml = useCallback((sug) => {\r\n try {\r\n return renderSuggestionToHtml(sug);\r\n } catch (e) {\r\n logger.error(`renderSuggestionToHtml Error:${e}`);\r\n return '';\r\n }\r\n }, [logger, renderSuggestionToHtml]);\r\n\r\n\r\n return (\r\n \r\n {showHelpArticleTitle ?
    Help Articles
    : null}\r\n \r\n
    \r\n );\r\n};\r\n\r\nApexHelpArticles.propTypes = {\r\n suggestionData: PropTypes.arrayOf(PropTypes.shape({\r\n suggestion: PropTypes.string,\r\n url: PropTypes.string,\r\n video: PropTypes.string,\r\n nav: PropTypes.string,\r\n project: PropTypes.string,\r\n language: PropTypes.string,\r\n })),\r\n renderSuggestionToHtml: PropTypes.func.isRequired,\r\n logger: PropTypes.shape({ error: PropTypes.func.isRequired, trace: PropTypes.func.isRequired }).isRequired,\r\n};\r\n\r\nApexHelpArticles.defaultProps = {\r\n suggestionData: undefined,\r\n};\r\n\r\n","import React, { useEffect, useState, useCallback } from 'react';\r\nimport $ from 'jquery';\r\nimport PropTypes from 'prop-types';\r\nimport { CopilotResultViewExternalSiteMap } from '@bingads-webui/global-search-copilot';\r\nimport { allSiteMap } from '@bingads-webui-react/with-site-map';\r\nimport { HELP_APEX } from './consts';\r\n\r\nexport const CopilotSearchResults = (props) => {\r\n const {\r\n hideSuggestionBox,\r\n i18n,\r\n logger,\r\n isNewLogo,\r\n } = props;\r\n const [searchQuery, setSearchQuery] = useState('');\r\n const [renderedFirstTime, setRenderedFirstTime] = useState(false);\r\n\r\n useEffect(() => {\r\n $('#searchquery').on('keydown', (e) => {\r\n setSearchQuery(e.target.value);\r\n });\r\n\r\n $('#searchquery').on('keyup', (e) => {\r\n setSearchQuery(e.target.value);\r\n });\r\n }, []);\r\n\r\n const closeApexPopUp = useCallback(() => {\r\n if (hideSuggestionBox) {\r\n hideSuggestionBox();\r\n }\r\n window.apex_glb.closeHelpView();\r\n setSearchQuery('');\r\n }, [hideSuggestionBox]);\r\n\r\n useEffect(() => {\r\n if (!renderedFirstTime) {\r\n logger.trace('Showed copilot search results in apex help');\r\n setRenderedFirstTime(true);\r\n }\r\n }, [logger, renderedFirstTime]);\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nCopilotSearchResults.propTypes = {\r\n hideSuggestionBox: PropTypes.func.isRequired,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n logger: PropTypes.shape({ error: PropTypes.func.isRequired, trace: PropTypes.func.isRequired }).isRequired,\r\n isNewLogo: PropTypes.bool,\r\n};\r\n\r\nCopilotSearchResults.defaultProps = {\r\n isNewLogo: false,\r\n};\r\n","export const HELP_APEX = 'Help_apex_pop_up';\r\n","import React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport $ from 'jquery';\r\nimport { ApexHelpArticles } from './apex-help-articles';\r\nimport { CopilotSearchResults } from './copilot-search-results';\r\n\r\nlet showSuggestions = false;\r\n\r\nconst APEX_INPUT_SEARCH_BOX = '#searchquery';\r\nconst APEX_LINK = '.apex-suggestion-item';\r\nconst APEX_CLOSE_BUTTON = '#apex_drag_header .close_button';\r\nexport const renderApexHelpSuggestions = (suggestionData, suggestionContainer, renderSuggestionToHtml, hideSuggestionBox, i18n, logger, isNewLogo=false) => {\r\n const hideSuggestionBoxWithReset = () => {\r\n hideSuggestionBox();\r\n // reset after the pop up is closed\r\n showSuggestions = false;\r\n };\r\n ReactDOM.render(\r\n
    \r\n \r\n \r\n
    ,\r\n suggestionContainer\r\n );\r\n\r\n // show suggestions when typing in searchbox, hide on Enter\r\n $(APEX_INPUT_SEARCH_BOX).on('keyup', (e) => {\r\n showSuggestions = e.code !== 'Enter';\r\n });\r\n\r\n $(APEX_INPUT_SEARCH_BOX).on('keydown', (e) => {\r\n showSuggestions = e.code !== 'Enter';\r\n });\r\n\r\n\r\n $(document).on('click', APEX_LINK, () => {\r\n showSuggestions = false;\r\n });\r\n $(document).on('enter', APEX_LINK, () => {\r\n showSuggestions = false;\r\n });\r\n\r\n // reset after closing the pop up\r\n /* istanbul ignore next */\r\n $(APEX_CLOSE_BUTTON).on('click', () => {\r\n hideSuggestionBoxWithReset();\r\n });\r\n\r\n const isApexVisible = $('#apexHelpContainer').is(':visible');\r\n\r\n return {\r\n showSuggestions: isApexVisible && showSuggestions,\r\n };\r\n};\r\n","import { makeStyles } from '@fluentui/react-components';\r\n\r\nexport const useCopilotIconStyles = makeStyles({\r\n copilotIcon: {\r\n paddingTop: '4px',\r\n paddingRight: '4px',\r\n paddingLeft: '4px',\r\n },\r\n});\r\n","import React, { useEffect, useState, useCallback } from 'react';\r\nimport $ from 'jquery';\r\nimport PropTypes from 'prop-types';\r\nimport { CopilotIcon } from '@bingads-webui-react/copilot-ui-base';\r\nimport { useCopilotIconStyles } from './styles/copilot-icon-styles';\r\n\r\nexport const CopilotButton = (props) => {\r\n const {\r\n i18n,\r\n isNewLogo,\r\n } = props;\r\n const [searchQuery, setSearchQuery] = useState('');\r\n useEffect(() => {\r\n $('#searchquery').on('keydown', (e) => {\r\n setSearchQuery(e.target.value);\r\n });\r\n\r\n $('#searchquery').on('keyup', (e) => {\r\n setSearchQuery(e.target.value);\r\n });\r\n }, []);\r\n\r\n const onClick = useCallback(() => {\r\n const customizedEvent = {\r\n eventType: 'message',\r\n eventData: {\r\n message: searchQuery || '',\r\n },\r\n eventSource: 'apex-help-dropdown-copilot-button',\r\n };\r\n\r\n const toggleCopilotEvent = new CustomEvent('copilotToggleEvent', {\r\n detail: customizedEvent,\r\n bubbles: true,\r\n cancelable: true,\r\n composed: false,\r\n });\r\n\r\n document.dispatchEvent(toggleCopilotEvent);\r\n\r\n window.apex_glb.closeHelpView();\r\n }, [searchQuery]);\r\n\r\n const onCopilotKeyDown = useCallback((e) => { if (e && e.key === 'Enter') { onClick(); } }, [onClick]);\r\n\r\n const copilotIconStyles = useCopilotIconStyles();\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nCopilotButton.propTypes = {\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }).isRequired,\r\n isNewLogo: PropTypes.bool,\r\n};\r\n\r\nCopilotButton.defaultProps = {\r\n isNewLogo: false,\r\n};\r\n","import React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport { CopilotButton } from './copilot-button';\r\n\r\nexport const renderSearchInputIcon = (container, i18n, isNewLogo = false) => {\r\n ReactDOM.render(, container);\r\n};\r\n\r\n","import React from 'react';\r\n\r\nexport const AttentionBeaconContext = React.createContext();\r\n","let beaconId = 0;\r\nexport const getBeaconId = () => {\r\n beaconId += 1;\r\n return beaconId;\r\n};\r\n","import { without, any, property, isFunction } from 'underscore';\r\nimport React, { useCallback, useMemo, useState, useContext, useEffect, useRef } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport hoistNonReactStatics from 'hoist-non-react-statics';\r\nimport { getDisplayName } from '@bingads-webui-react/hoc-utils';\r\nimport { AttentionBeaconContext } from './attention-beacon-context';\r\nimport { getBeaconId } from './beacon-id';\r\n\r\nexport const AttentionBeaconGroup = ({ children, attentionBeaconProps }) => {\r\n const { debugMode: debugModeFromProps, onNeedsAttentionChange } = attentionBeaconProps;\r\n // We currently support either a root-node-mode or a proxy mode\r\n // - in the root-node-mode the parentContext is undefined\r\n // - in the proxy mode the parentContext is defined, isActive can be used for external control\r\n // of the proxy's sub-tree ignoring parent's isActive and focusing tracking\r\n const parentContext = useContext(AttentionBeaconContext);\r\n const isIsolated = !parentContext;\r\n const {\r\n registerBeacon: parentRegisterBeacon,\r\n unregisterBeacon: parentUnregisterBeacon,\r\n notifyStateChange: parentNotifyStateChange,\r\n debugMode: parentDebugMode,\r\n } = isIsolated ? {} : parentContext;\r\n\r\n const beaconsRef = useRef([]);\r\n const needsAttentionRef = useRef(false);\r\n // const [needsAttentionState, setNeedsAttentionState] = useState(needsAttentionRef.current);\r\n\r\n const notifyStateChange = useCallback(() => {\r\n needsAttentionRef.current = any(beaconsRef.current, b => b.needsAttention());\r\n // setNeedsAttentionState(needsAttentionRef.current);\r\n if (isFunction(onNeedsAttentionChange)) {\r\n onNeedsAttentionChange(needsAttentionRef.current);\r\n }\r\n if (isFunction(parentNotifyStateChange)) {\r\n parentNotifyStateChange();\r\n }\r\n }, [parentNotifyStateChange, onNeedsAttentionChange]);\r\n\r\n const registerBeacon = useCallback((beacon) => {\r\n beaconsRef.current = [...beaconsRef.current, beacon];\r\n notifyStateChange();\r\n }, [notifyStateChange]);\r\n const unregisterBeacon = useCallback((beacon) => {\r\n beaconsRef.current = without(beaconsRef.current, beacon);\r\n notifyStateChange();\r\n }, [notifyStateChange]);\r\n\r\n const needsAttentionQuery = useCallback(() => needsAttentionRef.current, []);\r\n\r\n const [beaconId, setBeaconId] = useState(-1);\r\n useEffect(() => {\r\n const id = getBeaconId();\r\n setBeaconId(id);\r\n const beacon = { id, needsAttention: needsAttentionQuery };\r\n if (!isIsolated) {\r\n parentRegisterBeacon(beacon);\r\n }\r\n return () => {\r\n if (!isIsolated) {\r\n parentUnregisterBeacon(beacon);\r\n }\r\n };\r\n }, [needsAttentionQuery, isIsolated, parentRegisterBeacon, parentUnregisterBeacon]);\r\n\r\n const debugMode = debugModeFromProps || parentDebugMode;\r\n const attentionBeaconContextProps = useMemo(() => ({\r\n registerBeacon,\r\n unregisterBeacon,\r\n notifyStateChange,\r\n debugMode,\r\n }), [registerBeacon, unregisterBeacon, notifyStateChange, debugMode]);\r\n\r\n return (\r\n \r\n {debugMode &&\r\n
    {`AttGrp ID: ${beaconId}. Beacons: ${beaconsRef.current.map(property('id')).join(', ')}`}
    \r\n }\r\n {children}\r\n
    \r\n );\r\n};\r\n\r\nAttentionBeaconGroup.propTypes = {\r\n children: PropTypes.oneOfType([\r\n PropTypes.arrayOf(PropTypes.node),\r\n PropTypes.node,\r\n ]).isRequired,\r\n attentionBeaconProps: PropTypes.shape({\r\n onNeedsAttentionChange: PropTypes.func,\r\n debugMode: PropTypes.bool,\r\n }),\r\n};\r\n\r\nAttentionBeaconGroup.defaultProps = {\r\n attentionBeaconProps: {\r\n onNeedsAttentionChange: undefined,\r\n debugMode: false,\r\n },\r\n};\r\n\r\nexport const withAttentionBeaconGroupProxy = (WrappedComponent) => {\r\n const HOC = ({ attentionBeaconProps, ...restProps }) => (\r\n \r\n \r\n \r\n );\r\n\r\n HOC.propTypes = {\r\n attentionBeaconProps: PropTypes.shape({\r\n onNeedsAttentionChange: PropTypes.func,\r\n debugMode: PropTypes.bool,\r\n }),\r\n };\r\n\r\n HOC.defaultProps = {\r\n attentionBeaconProps: {\r\n onNeedsAttentionChange: undefined,\r\n debugMode: false,\r\n },\r\n };\r\n\r\n hoistNonReactStatics(HOC, WrappedComponent);\r\n HOC.displayName = `withAttentionBeaconGroup(${getDisplayName(WrappedComponent)})`;\r\n // HOC.isAttentionBeaconConsumer = true;\r\n\r\n return HOC;\r\n};\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport hoistNonReactStatics from 'hoist-non-react-statics';\r\nimport { getDisplayName } from '@bingads-webui-react/hoc-utils';\r\nimport { useNeedsAttention } from './use-needs-attention';\r\n\r\nexport const withAttentionBeaconRender = (WrappedComponent) => {\r\n const HOC = ({ attentionBeaconProps: attentionBeaconPropsFromProps, render, ...restProps }) => {\r\n const [needsAttention, attentionBeaconProps] = useNeedsAttention(attentionBeaconPropsFromProps);\r\n\r\n return (\r\n \r\n {render({ needsAttention })}\r\n \r\n );\r\n };\r\n\r\n HOC.propTypes = {\r\n attentionBeaconProps: PropTypes.shape({\r\n needsAttention: PropTypes.bool,\r\n }),\r\n render: PropTypes.func.isRequired,\r\n };\r\n\r\n HOC.defaultProps = {\r\n attentionBeaconProps: {\r\n needsAttention: false,\r\n },\r\n };\r\n\r\n hoistNonReactStatics(HOC, WrappedComponent);\r\n HOC.displayName = `withAttentionBeaconRender(${getDisplayName(WrappedComponent)})`;\r\n // HOC.isAttentionBeaconConsumer = true;\r\n\r\n return HOC;\r\n};\r\n","import { compose, isFunction } from 'underscore';\r\nimport React, { useCallback, useEffect, useRef, useState, useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport hoistNonReactStatics from 'hoist-non-react-statics';\r\nimport { getDisplayName } from '@bingads-webui-react/hoc-utils';\r\nimport { useAttentionBeaconContext } from './use-attention-beacon-context';\r\nimport { getBeaconId } from './beacon-id';\r\n\r\nexport const withAttentionBeacon = (WrappedComponent, { Adapters }) => {\r\n const AttentionBeaconAdapter = compose(...Adapters)(WrappedComponent);\r\n\r\n const HOC = ({ attentionBeaconProps: attentionBeaconPropsFromProps, ...restProps }) => {\r\n const [beaconId, setBeaconId] = useState(-1);\r\n const needsAttentionRef = useRef(false);\r\n const [needsAttentionState, setNeedsAttentionState] = useState(needsAttentionRef.current);\r\n\r\n const {\r\n isIsolated, registerBeacon, unregisterBeacon, notifyStateChange, debugMode,\r\n } = useAttentionBeaconContext();\r\n\r\n const { onNeedsAttentionChange: onNeedsAttentionChangeFromProps } = attentionBeaconPropsFromProps;\r\n const onAdapterNeedsAttentionChange = useCallback((newNeedsAttention) => {\r\n needsAttentionRef.current = newNeedsAttention;\r\n setNeedsAttentionState(needsAttentionRef.current);\r\n if (isFunction(onNeedsAttentionChangeFromProps)) {\r\n onNeedsAttentionChangeFromProps(newNeedsAttention, beaconId);\r\n }\r\n if (!isIsolated) {\r\n notifyStateChange();\r\n }\r\n }, [isIsolated, onNeedsAttentionChangeFromProps, notifyStateChange, beaconId]);\r\n\r\n const needsAttentionQuery = useCallback(() => needsAttentionRef.current, []);\r\n\r\n useEffect(() => {\r\n const id = getBeaconId();\r\n setBeaconId(id);\r\n const beacon = {\r\n id, needsAttention: needsAttentionQuery,\r\n };\r\n if (!isIsolated) {\r\n registerBeacon(beacon);\r\n }\r\n return () => {\r\n if (!isIsolated) {\r\n unregisterBeacon(beacon);\r\n }\r\n };\r\n }, [isIsolated, needsAttentionQuery, registerBeacon, unregisterBeacon]);\r\n\r\n const attentionBeaconAdapterProps = useMemo(() => ({\r\n onAdapterNeedsAttentionChange,\r\n debugMode,\r\n }), [onAdapterNeedsAttentionChange, debugMode]);\r\n\r\n return (\r\n <>\r\n {debugMode &&\r\n
    {`Beacon ${beaconId}`}
    {(needsAttentionState ? '!!!' : 'Ok')}
    \r\n }\r\n \r\n \r\n );\r\n };\r\n\r\n HOC.propTypes = {\r\n attentionBeaconProps: PropTypes.shape({\r\n onNeedsAttentionChange: PropTypes.func,\r\n }),\r\n };\r\n\r\n HOC.defaultProps = {\r\n attentionBeaconProps: {\r\n onNeedsAttentionChange: undefined,\r\n },\r\n };\r\n\r\n hoistNonReactStatics(HOC, WrappedComponent);\r\n HOC.displayName = `withAttentionBeacon(${getDisplayName(WrappedComponent)})`;\r\n\r\n return HOC;\r\n};\r\n","import { useContext } from 'react';\r\nimport { AttentionBeaconContext } from './attention-beacon-context';\r\n\r\nexport const useAttentionBeaconContext = () => {\r\n const parentContext = useContext(AttentionBeaconContext);\r\n const isIsolated = !parentContext;\r\n const {\r\n registerBeacon, unregisterBeacon, notifyStateChange, debugMode,\r\n } = isIsolated ? {} : parentContext;\r\n return {\r\n isIsolated, registerBeacon, unregisterBeacon, notifyStateChange, debugMode,\r\n };\r\n};\r\n","import { useCallback, useMemo, useEffect, useState } from 'react';\r\n\r\nexport const useNeedsAttentionForAdapter = ({ needsAttentionLocal, attentionBeaconAdapterProps: attentionBeaconAdapterPropsFromProps }) => {\r\n const { onAdapterNeedsAttentionChange: onAdapterNeedsAttentionChangeFromProps } = attentionBeaconAdapterPropsFromProps;\r\n const [needsAttentionFromAdapter, setNeedsAttentionFromAdapter] = useState(false);\r\n const onAdapterNeedsAttentionChange = useCallback((newNeedsAttention) => {\r\n setNeedsAttentionFromAdapter(newNeedsAttention);\r\n }, []);\r\n\r\n const needsAttention = needsAttentionLocal || needsAttentionFromAdapter;\r\n useEffect(() => {\r\n onAdapterNeedsAttentionChangeFromProps(needsAttention);\r\n }, [needsAttention, onAdapterNeedsAttentionChangeFromProps]);\r\n\r\n const attentionBeaconAdapterProps = useMemo(() => ({\r\n ...attentionBeaconAdapterPropsFromProps,\r\n onAdapterNeedsAttentionChange,\r\n }), [attentionBeaconAdapterPropsFromProps, onAdapterNeedsAttentionChange]);\r\n\r\n return { needsAttention, attentionBeaconAdapterProps };\r\n};\r\n","import { isFunction } from 'underscore';\r\nimport { useCallback, useMemo, useState } from 'react';\r\n\r\nexport const useNeedsAttention = (attentionBeaconPropsFromProps) => {\r\n const [needsAttention, setNeedsAttention] = useState(false);\r\n const { onNeedsAttentionChange: onNeedsAttentionChangeFromProps } = attentionBeaconPropsFromProps;\r\n const onNeedsAttentionChange = useCallback((newNeedsAttention) => {\r\n if (isFunction(onNeedsAttentionChangeFromProps)) {\r\n onNeedsAttentionChangeFromProps(newNeedsAttention);\r\n }\r\n setNeedsAttention(newNeedsAttention);\r\n }, [onNeedsAttentionChangeFromProps]);\r\n\r\n const attentionBeaconProps = useMemo(() => ({\r\n ...attentionBeaconPropsFromProps,\r\n onNeedsAttentionChange,\r\n }), [attentionBeaconPropsFromProps, onNeedsAttentionChange]);\r\n\r\n return [needsAttention, attentionBeaconProps];\r\n};\r\n","import { isFunction } from 'underscore';\r\nimport React, { useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport hoistNonReactStatics from 'hoist-non-react-statics';\r\nimport { getDisplayName } from '@bingads-webui-react/hoc-utils';\r\nimport { useNeedsAttention } from './use-needs-attention';\r\n\r\nexport const withAttentionBeaconPropsInjection = (WrappedComponent) => {\r\n const HOC = ({ attentionBeaconProps: attentionBeaconPropsFromProps, ...restProps }) => {\r\n const [needsAttention, attentionBeaconProps] = useNeedsAttention(attentionBeaconPropsFromProps);\r\n const { getExtraProps } = attentionBeaconProps;\r\n\r\n const extraProps = useMemo(() => {\r\n if (isFunction(getExtraProps)) {\r\n return getExtraProps({ needsAttention, props: restProps });\r\n }\r\n return {};\r\n }, [getExtraProps, needsAttention, restProps]);\r\n\r\n return React.createElement(WrappedComponent, {\r\n ...restProps,\r\n ...extraProps,\r\n attentionBeaconProps,\r\n });\r\n };\r\n\r\n HOC.propTypes = {\r\n attentionBeaconProps: PropTypes.shape({\r\n getExtraProps: PropTypes.func,\r\n }),\r\n };\r\n\r\n HOC.defaultProps = {\r\n attentionBeaconProps: {\r\n getExtraProps: undefined,\r\n },\r\n };\r\n\r\n hoistNonReactStatics(HOC, WrappedComponent);\r\n HOC.displayName = `withAttentionBeaconPropsInjection(${getDisplayName(WrappedComponent)})`;\r\n // HOC.isAttentionBeaconConsumer = true;\r\n\r\n return HOC;\r\n};\r\n","/* eslint-disable no-console */\r\nimport { edmCampaign } from '@bingads-webui/edm-campaign';\r\n\r\nconst MT_ALLOWED_MIN_SEARCH_FILTER_LENGTH = 2;\r\nconst MAX_BRAND_LISTS = 20;\r\n\r\nexport const getBrandListById = async ({ cid, aid, brandListId }) => {\r\n const payload = {\r\n $filter: `Id eq ${brandListId}`,\r\n $top: 1,\r\n };\r\n const edm = edmCampaign\r\n .Customers\r\n .$withKey(cid)\r\n .Accounts\r\n .$withKey(aid)\r\n .BrandLists;\r\n const res = await edm.get(payload).toPromise();\r\n return res && res.value && res.value.length > 0 ? res.value[0] : null;\r\n};\r\n\r\nexport const loadBrandListsFactory = (cid, aid) => async () => {\r\n const payload = {\r\n top: MAX_BRAND_LISTS,\r\n skip: 0,\r\n endDate: Date.now(),\r\n };\r\n\r\n const edm = edmCampaign\r\n .Customers.$withKey(cid)\r\n .Accounts.$withKey(aid)\r\n .BrandLists;\r\n\r\n const res = await edm.get(payload).toPromise();\r\n return res.value.map(brandList => ({\r\n key: brandList.Id,\r\n ...brandList,\r\n }));\r\n};\r\n\r\nexport const loadBrandsFactoryFromProp = ({ cid, aid }) => async ({ searchFilter, top }) => {\r\n // If there's no search filter, we don't need to load brands since MT will not allow it\r\n if (!searchFilter || searchFilter.length < MT_ALLOWED_MIN_SEARCH_FILTER_LENGTH) {\r\n return [];\r\n }\r\n\r\n const payload = {\r\n search: searchFilter,\r\n top,\r\n count: true,\r\n endDate: Date.now(),\r\n };\r\n\r\n const edm = edmCampaign\r\n .Customers\r\n .$withKey(cid)\r\n .Accounts\r\n .$withKey(aid)\r\n .Brands;\r\n\r\n const result = await edm.get(payload).toPromise();\r\n if (result && result.value && result.value.length > 0) {\r\n const options = result.value.map(brand => ({\r\n key: brand.Id,\r\n name: brand.Name,\r\n link: brand.Uri,\r\n isUnderReview: brand.Status === 'Pending',\r\n }));\r\n return options;\r\n }\r\n return [];\r\n};\r\n\r\nexport const loadBrandsUnderBrandListFactoryFromProp = ({\r\n cid, aid, brandListId, isEdit, top,\r\n}) => async () => {\r\n // If it's not in edit mode, we don't need to load brands\r\n if (!isEdit) {\r\n return [];\r\n }\r\n\r\n const payload = {\r\n endDate: Date.now(),\r\n top,\r\n };\r\n\r\n const edm = edmCampaign\r\n .Customers\r\n .$withKey(cid)\r\n .Accounts\r\n .$withKey(aid)\r\n .BrandLists\r\n .$withKey(brandListId)\r\n .BrandItems;\r\n\r\n const result = await edm.get(payload).toPromise();\r\n if (result && result.value && result.value.length > 0) {\r\n const options = result.value.map(brand => ({\r\n key: brand.BrandId,\r\n name: brand.BrandName,\r\n link: brand.Uri,\r\n isUnderReview: false,\r\n }));\r\n return options;\r\n }\r\n return [];\r\n};\r\n\r\nexport const createBrandListFromProp = ({ cid, aid }) => (brandListPayload) => {\r\n const edmEntityAccount = edmCampaign\r\n .Customers\r\n .$withKey(cid)\r\n .Accounts\r\n .$withKey(aid);\r\n\r\n return edmEntityAccount.bulkCreate(brandListPayload, {\r\n entityName: 'Model.BrandList',\r\n });\r\n};\r\n\r\nexport const updateBrandListFromProp = ({ cid, aid }) => async (brandListPayload) => {\r\n const edmEntityAccount = edmCampaign\r\n .Customers\r\n .$withKey(cid)\r\n .Accounts\r\n .$withKey(aid);\r\n\r\n return edmEntityAccount.bulkUpdate(brandListPayload, {\r\n entityName: 'Model.BrandItem',\r\n });\r\n};\r\n\r\nexport const deleteBrandListFromProp = ({ cid, aid }) => (brandLists) => {\r\n const payload = brandLists.map(Id => ({\r\n BrandLists: {\r\n Id,\r\n Status: 'Deleted',\r\n },\r\n }));\r\n const edmEntityAccount = edmCampaign\r\n .Customers\r\n .$withKey(cid)\r\n .Accounts\r\n .$withKey(aid);\r\n return edmEntityAccount.bulkUpdate(payload, {\r\n entityName: 'Model.BrandList',\r\n });\r\n};\r\n\r\nexport const getCampaignsFromProp = ({ cid, aid }) => (getCampaignsPayload) => {\r\n const edmEntityCampaign = edmCampaign\r\n .Customers\r\n .$withKey(cid)\r\n .Accounts\r\n .$withKey(aid)\r\n .Campaigns;\r\n const { search, pageNumber, campaignType } = getCampaignsPayload;\r\n const broadOnlyFilter = campaignType === 'PerformanceMax' ? '' : 'isBroadMatchOnlyCampaign eq true and ';\r\n const query = {\r\n count: true,\r\n top: 10,\r\n skip: (pageNumber - 1) * 10 || 0,\r\n filter: { where: `(${broadOnlyFilter}CampaignType eq Enum.CampaignType'${campaignType}')${search ? `and contains(Name, '${search}')` : ''}` },\r\n select: ['Id', 'Name'],\r\n };\r\n const payload = {\r\n gridDataParameters: {\r\n CurrentCustomerId: cid,\r\n },\r\n };\r\n return edmEntityCampaign['Default.GridData'].$makeCall({ query, payload }).toPromise();\r\n};\r\n\r\nexport const getCampaignBrandListAssociationFromProp = ({ cid, aid }) => (brandListId, isExclusion) => {\r\n const edmEntityBrandLists = edmCampaign\r\n .Customers\r\n .$withKey(cid)\r\n .Accounts\r\n .$withKey(aid)\r\n .BrandLists\r\n .$withKey(brandListId);\r\n return edmEntityBrandLists['Default.GetCampaignAssociations'].$makeCall({\r\n query: {\r\n top: 100,\r\n endDate: Date.now(),\r\n filter: { where: `IsExclusion eq ${!!isExclusion}` },\r\n },\r\n }).toPromise();\r\n};\r\n\r\n\r\nexport const campaignBrandListAssociationFromProp = ({ cid, aid }) => (brandListCampaignAssociationPayload) => {\r\n const edmEntityAccount = edmCampaign\r\n .Customers\r\n .$withKey(cid)\r\n .Accounts\r\n .$withKey(aid);\r\n const {\r\n brandList, campaigns, originalAssociation, isExclusion,\r\n } = brandListCampaignAssociationPayload;\r\n const campaignsMap = {};\r\n campaigns.forEach((id) => {\r\n campaignsMap[id] = 1;\r\n });\r\n const originalAssociationMap = {};\r\n originalAssociation.forEach((EntityId) => {\r\n originalAssociationMap[EntityId] = 1;\r\n });\r\n const payload = [];\r\n for (let i = 0; i < campaigns.length; i += 1) {\r\n if (!originalAssociationMap[campaigns[i]]) {\r\n payload.push({\r\n BrandListsAssociations: {\r\n SharedEntityId: brandList,\r\n EntityId: campaigns[i],\r\n IsExclusion: isExclusion,\r\n },\r\n });\r\n }\r\n }\r\n for (let i = 0; i < originalAssociation.length; i += 1) {\r\n if (!campaignsMap[originalAssociation[i]]) {\r\n payload.push({\r\n BrandListsAssociations: {\r\n SharedEntityId: brandList,\r\n EntityId: originalAssociation[i],\r\n Status: 'Deleted',\r\n IsExclusion: isExclusion,\r\n },\r\n });\r\n }\r\n }\r\n return edmEntityAccount.bulkCreateMany(payload);\r\n};\r\n\r\nexport const createBrandFromProp = ({ cid, aid }) => ({ brandName, brandLink, brandReason }) => {\r\n const payload = [{\r\n Name: brandName,\r\n Uri: brandLink,\r\n RequestReason: brandReason,\r\n }];\r\n\r\n const edmEntityAccount = edmCampaign\r\n .Customers\r\n .$withKey(cid)\r\n .Accounts\r\n .$withKey(aid);\r\n\r\n return edmEntityAccount.Brands['Default.PostBrands']\r\n .$makeCall({ payload })\r\n .toPromise();\r\n};\r\n","import { edmCampaign } from '@bingads-webui/edm-campaign';\r\n\r\nexport const getBrandListsEdm = ({\r\n customerId,\r\n accountId,\r\n}) => {\r\n const edm = edmCampaign\r\n .Customers.$withKey(customerId)\r\n .Accounts.$withKey(accountId)\r\n .BrandLists;\r\n edm.$makeCall = params => edm.get({\r\n ...params.query,\r\n cache: Date.now(),\r\n });\r\n return edm;\r\n};\r\n\r\nexport const getBrandsUnderBrandListEdm = ({\r\n cid, aid, brandListId,\r\n}) => {\r\n const edm = edmCampaign\r\n .Customers\r\n .$withKey(cid)\r\n .Accounts\r\n .$withKey(aid)\r\n .BrandLists\r\n .$withKey(brandListId)\r\n .BrandItems;\r\n edm.$makeCall = params => edm.get(params.query);\r\n return edm;\r\n};\r\n","import { edmCampaign } from '@bingads-webui/edm-campaign';\r\n\r\nexport const loadCampaignAssociatedBrandListsFactory = (cid, aid, campaignId) => () =>\r\n edmCampaign\r\n .Customers.$withKey(cid)\r\n .Accounts.$withKey(aid)\r\n .Campaigns.$withKey(campaignId)\r\n .BrandLists['Default.GetCampaignAssociations']\r\n .$makeCall({\r\n functionParams: {\r\n },\r\n query: {\r\n count: true,\r\n skip: 0,\r\n top: 2147483647, // max Int32,\r\n endDate: Date.now(),\r\n },\r\n })\r\n .toPromise()\r\n .then(({ value }) => value.map(({ SharedEntityId, SharedEntityName, ListItemCount }) => ({\r\n key: SharedEntityId,\r\n Id: SharedEntityId,\r\n Name: SharedEntityName,\r\n Count: ListItemCount,\r\n })));\r\n","import { identity, result } from 'underscore';\r\nimport { Campaign, BrandList, BrandListAssociation, BrandItem } from '@bingads-webui/campaign-odata-schemas';\r\nimport { getBulkApiErrors } from '@bingads-webui-campaign/api-errors';\r\n\r\nexport const ERROR_ENTITY = {\r\n Campaign: 'campaign',\r\n BrandList: 'brandList',\r\n BrandListAssociation: 'brandListAssociation',\r\n BrandItem: 'brandItem',\r\n};\r\n\r\nconst getBulkUploadEntityType = entitySchema =>\r\n (entitySchema.properties['bulk-upload-type'] || {}).value ||\r\n entitySchema.name;\r\n\r\nconst getBulkUploadErrorType = entitySchema =>\r\n `${getBulkUploadEntityType(entitySchema)} Error`;\r\n\r\nexport const bulkUpsertBrandListsEntityErrorMap = {\r\n [getBulkUploadErrorType(Campaign)]: ERROR_ENTITY.Campaign,\r\n [getBulkUploadErrorType(BrandList)]: ERROR_ENTITY.BrandList,\r\n [getBulkUploadErrorType(BrandListAssociation)]: ERROR_ENTITY.BrandListAssociation,\r\n [getBulkUploadErrorType(BrandItem)]: ERROR_ENTITY.BrandItem,\r\n};\r\n\r\nexport const mapBulkUpsertErrors = (\r\n errors,\r\n bulkUpsertEntityErrorMap,\r\n errorProcessor = identity,\r\n scenario,\r\n i18n,\r\n activityLogger\r\n) =>\r\n getBulkApiErrors(errors, scenario, i18n, activityLogger).map((error) => {\r\n const errorType = error.type;\r\n const mappedErrorType = result(bulkUpsertEntityErrorMap, errorType, errorType);\r\n // eslint-disable-next-line no-param-reassign\r\n error.type = mappedErrorType;\r\n return errorProcessor(error);\r\n });\r\n\r\nexport const modelToViewModelForBulkErrors = (errors, bulkUpsertEntityErrorMap, scenario, i18n, activityLogger) =>\r\n mapBulkUpsertErrors(errors, bulkUpsertEntityErrorMap, /* errorProcessor */ identity, scenario, i18n, activityLogger);\r\n","import { has } from 'underscore';\r\nimport { CampaignApiError, getODataErrors } from '@bingads-webui-campaign/api-errors';\r\nimport { bulkUpsertBrandListsEntityErrorMap, modelToViewModelForBulkErrors } from './bulk-upsert-errors';\r\n\r\nexport const GENERIC_ERROR_MESSAGE = _TL_(\"We've encountered an error and can't continue. Please contact support for further assistance.\");\r\n\r\nexport const getViewModelBulkUpsertErrors = (i18n, result) => {\r\n if (has(result, 'entity')) {\r\n const serverErrors = modelToViewModelForBulkErrors(\r\n result.errors,\r\n bulkUpsertBrandListsEntityErrorMap,\r\n 'brandList',\r\n i18n\r\n );\r\n\r\n if (serverErrors && serverErrors.length > 0) {\r\n return serverErrors;\r\n }\r\n }\r\n\r\n return [new CampaignApiError(GENERIC_ERROR_MESSAGE)];\r\n};\r\n\r\nexport const getOdataResponseErrors = (i18n, result) => {\r\n if (result && result.errors) {\r\n const serverErrors = getODataErrors(result.errors, i18n);\r\n\r\n if (serverErrors && serverErrors.length > 0) {\r\n return serverErrors;\r\n }\r\n }\r\n\r\n return [new CampaignApiError(GENERIC_ERROR_MESSAGE)];\r\n};\r\n","import { isEmpty, reduce, filter, find } from 'underscore';\r\n\r\nconst and = (predicate1, predicate2) => item => predicate1(item) && predicate2(item);\r\nconst or = (predicate1, predicate2) => item => predicate1(item) || predicate2(item);\r\nconst not = predicate => item => !predicate(item);\r\nconst errorIs = errorCode => error => error.Error === errorCode;\r\nconst clientIdIs = clientId => error => error['Client Id'] === clientId;\r\n\r\nexport const extractAndRestoreFailedBrandItemAssociations = (errors, BrandList, BrandItemsAssociations) => {\r\n // If the brand list itself has errors, we don't need to process the brand item associations\r\n if (BrandList) {\r\n const brandListClientId = clientIdIs(BrandList['Client Id']);\r\n const brandListErrors = filter(errors, brandListClientId);\r\n if (!isEmpty(brandListErrors)) {\r\n return { savedAddedBrandItemIds: [], savedDeletedBrandItemIds: [], filteredErrors: brandListErrors };\r\n }\r\n }\r\n\r\n const { savedAddedBrandItemIds, savedDeletedBrandItemIds, filteredErrors } =\r\n reduce(BrandItemsAssociations, (acc, brandItemAssociation) => {\r\n const brandItemAssociationClientId = clientIdIs(brandItemAssociation['Client Id']);\r\n\r\n const brandItemAssociationErrors = filter(acc.filteredErrors, brandItemAssociationClientId);\r\n if (isEmpty(brandItemAssociationErrors)) {\r\n if (brandItemAssociation.Status === 'Active') {\r\n acc.savedAddedBrandItemIds.push(brandItemAssociation.SharedEntityId);\r\n } else if (brandItemAssociation.Status === 'Deleted') {\r\n acc.savedDeletedBrandItemIds.push(brandItemAssociation.SharedEntityId);\r\n }\r\n } else {\r\n const campaignServiceSharedEntityAssociationDoesNotExistError = errorIs('CampaignServiceSharedEntityAssociationDoesNotExist');\r\n\r\n // Some errors are non-blocking and should be filtered out\r\n // Case #1.1: Deleting an association that doesn't exist\r\n // Case #1.2: Deleting an association where both the association and the brand list are already deleted\r\n const associationDoesNotExistError = find(brandItemAssociationErrors, campaignServiceSharedEntityAssociationDoesNotExistError);\r\n if (associationDoesNotExistError) {\r\n acc.filteredErrors = acc.filteredErrors.filter(not(or(\r\n and(campaignServiceSharedEntityAssociationDoesNotExistError, brandItemAssociationClientId),\r\n and(errorIs('CampaignServiceSharedListIdInvalid'), brandItemAssociationClientId)\r\n )));\r\n }\r\n\r\n // Case #2: Adding an association that already exists\r\n // FIXME: MT returns incorrect error code for this case\r\n acc.filteredErrors = acc.filteredErrors\r\n .filter(not(and(errorIs('CampaignServiceFutureFeatureCode'), brandItemAssociationClientId)));\r\n }\r\n return acc;\r\n }, { savedAddedBrandItemIds: [], savedDeletedBrandItemIds: [], filteredErrors: errors });\r\n\r\n return {\r\n savedAddedBrandItemIds, savedDeletedBrandItemIds, filteredErrors,\r\n };\r\n};\r\n","import { getErrorTextStyle } from '@bingads-webui-cc-react/common-styles';\r\nimport { components as Components, Mode } from '@bingads-webui-react/app-layout-container';\r\n\r\nexport const getBudgetUpdatePanelStyles = (_components, { palette }) => ({\r\n Layer: {\r\n zIndex: '1000 !important',\r\n },\r\n\r\n Panel: {\r\n marginTop: `${Components.header[Mode.Collapsed].height}px`,\r\n\r\n '& .ms-Panel-header, & .ms-Panel-content, & .ms-Panel-footerInner': {\r\n paddingLeft: '16px',\r\n paddingRight: '16px',\r\n },\r\n\r\n '& .form-group': {\r\n '& .form-control-container [role=\"alert\"]': {\r\n ...getErrorTextStyle(),\r\n },\r\n },\r\n\r\n '& .ms-Panel-footer': {\r\n borderTop: `1px solid ${palette.neutralLight}`,\r\n '& .panel-buttons button': {\r\n marginRight: '8px',\r\n },\r\n },\r\n\r\n '& .react-block-ui': {\r\n height: '100%',\r\n },\r\n },\r\n\r\n BudgetOptionImpact: {\r\n marginLeft: 8,\r\n color: palette.neutralSecondary,\r\n },\r\n\r\n CustomizeInput: {\r\n marginTop: 4,\r\n marginLeft: 8,\r\n },\r\n\r\n PanelFooterInfo: {\r\n marginTop: -16,\r\n marginLeft: -16,\r\n marginRight: -16,\r\n marginBottom: 16,\r\n },\r\n});\r\n","import { Constants } from '@bingads-webui-clientcenter/entity-utils';\r\nimport { MessageBarType } from '@fluentui/react';\r\n\r\nconst { InsertionOrderStatus, InsertionOrdersGridFieldNames } = Constants;\r\n\r\nexport const CustomizeBudgetKey = 'CustomizeBudget';\r\nexport const StandardBudgetType = 'DailyStandard';\r\nexport const LifetimeStandardBudgetType = 'LifetimeBudgetStandard';\r\nexport const LifetimeBudgetField = 'LifetimeBudget';\r\nexport const IconErrorColor = '#A80000';\r\nexport const Grey = '#F1F1F1';\r\nexport const BlankNumber = '-';\r\n\r\nexport const EstimateType = Object.freeze({\r\n Conversions: 'Conversions',\r\n Clicks: 'Clicks',\r\n Impressions: 'Impressions',\r\n Spend: 'Spend',\r\n});\r\n\r\nexport const Severity = Object.freeze({\r\n Default: 0,\r\n Error: 1,\r\n Warning: 2,\r\n Recommendation: 3,\r\n AllCampaigns: 4,\r\n});\r\n\r\nexport const IconName = Object.freeze({\r\n [Severity.Error]: 'ErrorBadge',\r\n [Severity.Warning]: 'Warning',\r\n [Severity.Recommendation]: 'Insights',\r\n [Severity.AllCampaigns]: 'OEM',\r\n});\r\n\r\nexport const ActionType = Object.freeze({\r\n EditBudget: 'EditBudget',\r\n AdjustBudget: 'AdjustBudget',\r\n AddFunds: 'AddFunds',\r\n FixIt: 'FixIt',\r\n CreateNew: 'CreateNew',\r\n Apply: 'Apply',\r\n Enable: 'Enable',\r\n ViewDetails: 'ViewDetails',\r\n});\r\n\r\nexport const ActionTextKey = Object.freeze({\r\n [ActionType.EditBudget]: _TL_('Edit budget'),\r\n [ActionType.AdjustBudget]: _TL_('Adjust budget'),\r\n [ActionType.AddFunds]: _TL_('Add funds'),\r\n [ActionType.FixIt]: _TL_('Fix it'),\r\n [ActionType.CreateNew]: _TL_('Create new'),\r\n [ActionType.Apply]: _TL_('Apply'),\r\n [ActionType.Enable]: _TL_('Enable'),\r\n [ActionType.ViewDetails]: _TL_('View details'),\r\n});\r\n\r\nexport const TooltipChartType = Object.freeze({\r\n AccountPastDayDailySpend: 1,\r\n AccountPastDayCumulativeSpend: 2,\r\n AccountTodayDailySpend: 3,\r\n AccountTodayCumulativeSpend: 4,\r\n CampaignPastDayDailySpend: 5,\r\n CampaignPastDayCumulativeSpend: 6,\r\n CampaignTodayDailySpend: 7,\r\n CampaignTodayCumulativeSpend: 8,\r\n});\r\n\r\nexport const TooltipChartKeyDataTitleKey = Object.freeze({\r\n SpendOfTheDay: _TL_('Spend of the day'),\r\n MonthToDateSpend: _TL_('Month to date spend'),\r\n MonthlySpendLimit: _TL_('Monthly spend limit'),\r\n DailyBudget: _TL_('Daily budget'),\r\n LifetimeBudget: _TL_('Lifetime budget'),\r\n});\r\n\r\nexport const ClickChangeType = Object.freeze({\r\n Increase: 'Increase',\r\n Decrease: 'Decrease',\r\n});\r\n\r\nexport const BudgetActionType = Object.freeze({\r\n DailyBudget: 'daily',\r\n LifetimeBudget: 'lifetime',\r\n});\r\n\r\nexport const TopKeyCardType = Object.freeze({\r\n SumSpendOfTheMonth: 'SumSpendOfTheMonth',\r\n SumSpendToDate: 'SumSpendToDate',\r\n SumMonthlyBudget: 'SumMonthlyBudget',\r\n SumDailyBudget: 'SumDailyBudget',\r\n SumTotalBudget: 'SumTotalBudget',\r\n PrepayBalance: 'PrepayBalance',\r\n CurrentBalance: 'CurrentBalance',\r\n BudgetAndSpend: 'BudgetAndSpend',\r\n InsertionOrder: 'InsertionOrder',\r\n\r\n SpendOfTheMonth: 'SpendOfTheMonth',\r\n SpendToDate: 'SpendToDate',\r\n MonthlyBudget: 'MonthlyBudget',\r\n DailyBudget: 'DailyBudget',\r\n LifetimeBudget: 'LifetimeBudget',\r\n});\r\n\r\nexport const MessageBarTypes = Object.freeze({\r\n [Severity.Error]: MessageBarType.error,\r\n [Severity.Warning]: MessageBarType.warning,\r\n});\r\n\r\nexport const InsertionOrderTextKey = Object.freeze({\r\n NoEndDate: _TL_('No end date'),\r\n Unlimited: _TL_('Unlimited'),\r\n NoEndDateLowerCase: _TL_('no end date'),\r\n UnlimitedLowerCase: _TL_('unlimited'),\r\n});\r\n\r\nexport const InsertionOrderFieldNameTextKey = Object.freeze({\r\n [InsertionOrdersGridFieldNames.SpendCapAmount]: _TL_('budget'),\r\n [InsertionOrdersGridFieldNames.ThruDate]: _TL_('end date'),\r\n [InsertionOrdersGridFieldNames.Status]: _TL_('status'),\r\n});\r\n\r\nexport const InsertionOrderStatusTextKey = Object.freeze({\r\n [InsertionOrderStatus.PendingSystemReview]: _TL_('Pending Microsoft Advertising review'),\r\n [InsertionOrderStatus.PendingUserReview]: _TL_('Pending review'),\r\n [InsertionOrderStatus.Active]: _TL_('Active'),\r\n [InsertionOrderStatus.Declined]: _TL_('Declined'),\r\n [InsertionOrderStatus.Expired]: _TL_('Expired'),\r\n [InsertionOrderStatus.Canceled]: _TL_('Canceled'),\r\n [InsertionOrderStatus.Pending]: _TL_('Not started'),\r\n [InsertionOrderStatus.Exhausted]: _TL_('Exhausted'),\r\n [InsertionOrderStatus.PendingBillToPartyChange]: _TL_('Pending billing take over'),\r\n [InsertionOrderStatus.PendingBillToPartyChangeAndUserReview]: _TL_('Pre-approval required'),\r\n [InsertionOrderStatus.Queued]: _TL_('Queued'),\r\n});\r\n\r\nexport const IOAuthzAction = Object.freeze({\r\n isIOAddAuthorized: 'isIOAddAuthorized',\r\n isIOUpdateAuthorized: 'isIOUpdateAuthorized',\r\n});\r\n\r\n/**\r\n * The entry point identifier when entering budget center page. The value should be appended to the url search.\r\n */\r\nexport const EntryPoint = Object.freeze({\r\n directvisit: 'directvisit',\r\n unknown: 'unknown',\r\n toolssetup: 'toolssetup', // This value hasn't been applied to Tools/Setup yet, the log can be found from Kusto client log table substrate1\r\n campaignsgrid: 'campaignsgrid',\r\n performancegrid: 'performancegrid',\r\n email: 'email',\r\n budgetcentersidebar: 'budgetcentersidebar',\r\n budgetcentercampaignsummarygrid: 'budgetcentercampaignsummarygrid',\r\n teachingbubble: 'teachingbubble',\r\n budgetcentercampaignselector: 'budgetcentercampaignselector',\r\n});\r\n","import { NeutralColors } from '@fluentui/react';\r\n\r\nimport { EstimateType, Severity, IconErrorColor } from '../constants';\r\n\r\nconst SpendTextColor = '#333333';\r\n\r\nexport const getMonitoringCardStyles = (_components, { palette }) => ({\r\n Container: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n padding: 16,\r\n boxShadow: '1px 0.3px 2px rgba(0, 0, 0, 0.108), 0px 3px 3.6px rgba(0, 0, 0, 0.132)',\r\n borderRadius: 4,\r\n margin: '16px 0px',\r\n },\r\n\r\n Content: {\r\n marginRight: 24,\r\n },\r\n\r\n Actions: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n gap: '8px',\r\n marginLeft: 'auto',\r\n whiteSpace: 'nowrap',\r\n },\r\n\r\n Icon: {\r\n fontWeight: 400,\r\n fontSize: 24,\r\n lineHeight: '24px',\r\n margin: '4px 16px 4px 0px',\r\n },\r\n\r\n [`Icon-Severity-${Severity.Error}`]: {\r\n color: IconErrorColor,\r\n },\r\n\r\n [`Icon-Severity-${Severity.Warning}`]: {\r\n color: palette.orange,\r\n },\r\n\r\n [`Icon-Severity-${Severity.Recommendation}`]: {\r\n color: palette.themePrimary,\r\n },\r\n\r\n Message: {\r\n fontWeight: 600,\r\n fontSize: 14,\r\n lineHeight: '20px',\r\n margin: '4px 0px',\r\n color: palette.neutralPrimary,\r\n },\r\n\r\n Hint: {\r\n fontWeight: 400,\r\n fontSize: 12,\r\n lineHeight: '16px',\r\n margin: '4px 0px',\r\n color: NeutralColors.gray120,\r\n },\r\n\r\n Estimates: {\r\n fontWeight: 400,\r\n fontSize: 12,\r\n lineHeight: '16px',\r\n margin: '4px 0px',\r\n },\r\n\r\n WeeklyEstimatesText: {\r\n fontWeight: 600,\r\n color: NeutralColors.gray120,\r\n },\r\n\r\n Estimate: {\r\n marginLeft: '8px',\r\n },\r\n\r\n [EstimateType.Conversions]: {\r\n color: palette.green,\r\n },\r\n\r\n [EstimateType.Clicks]: {\r\n color: palette.green,\r\n },\r\n\r\n [EstimateType.Impressions]: {\r\n color: palette.green,\r\n },\r\n\r\n [EstimateType.Spend]: {\r\n color: SpendTextColor,\r\n },\r\n});\r\n","import { Grey } from '../constants';\r\n\r\nconst fullBarWidth = 177;\r\nconst barHeight = 4;\r\nconst separatorPosition = 88;\r\nconst separatorWidth = 1;\r\nconst borderRadius = 2;\r\n\r\nconst green = '#41A512';\r\nconst yellow = '#FFB900';\r\nconst red = '#A80001';\r\n\r\n// [0, 0.4] => green, (0.4, 0.8] => yellow, 0.8+ => red\r\nconst getColor = (percentage) => {\r\n if (percentage <= 0.4) return green;\r\n if (percentage <= 0.8) return yellow;\r\n return red;\r\n};\r\n\r\nexport const getTotalBudgetDepletedProgressBarStyles = () => ({\r\n Container: {\r\n position: 'relative',\r\n width: fullBarWidth,\r\n height: barHeight,\r\n },\r\n Bar: {\r\n position: 'absolute',\r\n width: '100%',\r\n height: '100%',\r\n background: ({ percentage }) => {\r\n const progress = 50 * percentage;\r\n const color = getColor(percentage);\r\n\r\n return `linear-gradient(to right, ${color} ${progress}%, ${Grey} ${progress}%)`;\r\n },\r\n borderRadius,\r\n },\r\n Separator: {\r\n position: 'absolute',\r\n width: separatorWidth,\r\n height: '100%',\r\n left: separatorPosition,\r\n backgroundColor: Grey,\r\n },\r\n});\r\n","import { NeutralColors, DefaultPalette } from '@fluentui/react';\r\nimport { IconErrorColor, ClickChangeType } from '../constants';\r\n\r\nconst DarkBlack = '#1A1A1A';\r\nconst DarkGrey = '#616161';\r\nconst opaqueLightWhite = 'rgb(0, 0, 0, 0.1)';\r\n\r\nexport const getTooltipCardStyles = () => ({\r\n '& .tooltip-card-container': {\r\n padding: '6px 10px 6px 10px',\r\n borderRadius: 4,\r\n width: 281,\r\n fontFamily: 'Segoe UI',\r\n whiteSpace: 'break-spaces',\r\n },\r\n '& .budget-center-tooltip-card-section': {\r\n paddingTop: 12,\r\n marginTop: 12,\r\n borderTop: `1px solid ${opaqueLightWhite}`,\r\n },\r\n '& .budget-center-tooltip-card-section-header': {\r\n fontSize: 12,\r\n fontWeight: 400,\r\n lineHeight: '20px',\r\n color: NeutralColors.gray160,\r\n marginBottom: 12,\r\n },\r\n '& .budget-center-tooltip-card-key-data-section': {\r\n borderTop: 'none',\r\n paddingTop: 0,\r\n marginTop: 0,\r\n },\r\n '& #hourly-trend-chart': {\r\n height: 100,\r\n },\r\n '& .budget-center-tooltip-section-content-item': {\r\n width: '100%',\r\n display: 'flex',\r\n flexDirection: 'row',\r\n alignItems: 'center',\r\n justifyContent: 'space-between',\r\n fontSize: 14,\r\n color: DarkBlack,\r\n lineHeight: '20px',\r\n margin: '12px 0',\r\n },\r\n '& .budget-center-tooltip-item-key': {\r\n fontWeight: 400,\r\n width: 192,\r\n overflow: 'hidden',\r\n textOverflow: 'ellipsis',\r\n whiteSpace: 'nowrap',\r\n },\r\n '& .budget-center-tooltip-item-value': {\r\n fontWeight: 700,\r\n },\r\n '& .budget-center-tooltip-section-event-item': {\r\n color: NeutralColors.gray160,\r\n lineHeight: '20px',\r\n marginTop: 12,\r\n },\r\n '& .budget-center-tooltip-event-message': {\r\n fontWeight: 700,\r\n fontSize: 14,\r\n },\r\n '& .budget-center-tooltip-event-hint': {\r\n color: DarkGrey,\r\n display: 'flex',\r\n flexDirection: 'row',\r\n },\r\n [`& .${ClickChangeType.Increase}`]: {\r\n color: DefaultPalette.green,\r\n marginRight: 4,\r\n },\r\n [`& .${ClickChangeType.Decrease}`]: {\r\n color: IconErrorColor,\r\n marginRight: 4,\r\n },\r\n});\r\n","import { Severity, IconErrorColor } from '../constants';\r\n\r\nconst TreeNodeSelectedColor = '#EAE8E6';\r\n\r\nexport const getTreeNodeStyles = (_components, { palette }) => {\r\n const SidebarBorder = `1px solid ${palette.neutralQuaternaryAlt}`;\r\n\r\n return {\r\n TreeNode: ({ isSelected }) => ({\r\n width: 240,\r\n height: '100%',\r\n border: 'none',\r\n display: 'flex',\r\n alignItems: 'center',\r\n position: 'relative',\r\n borderRight: SidebarBorder,\r\n padding: 0,\r\n ...isSelected && {\r\n backgroundColor: TreeNodeSelectedColor,\r\n },\r\n }),\r\n TreeNodeIcon: {\r\n width: 40,\r\n minWidth: 40,\r\n },\r\n TreeNodeGlyphicon: {\r\n margin: '10px 12px 10px 12px !important',\r\n fontSize: '16px !important',\r\n top: '0px !important',\r\n },\r\n [`TreeNodeGlyphicon-${Severity.AllCampaigns}`]: {\r\n color: palette.neutralPrimary,\r\n },\r\n [`TreeNodeGlyphicon-${Severity.Error}`]: {\r\n color: IconErrorColor,\r\n },\r\n [`TreeNodeGlyphicon-${Severity.Warning}`]: {\r\n color: palette.orange,\r\n },\r\n TreeNodeLeftPadding: ({ isSelected }) => ({\r\n width: 4,\r\n minWidth: 4,\r\n height: '100%',\r\n ...isSelected && {\r\n backgroundColor: palette.themePrimary,\r\n },\r\n }),\r\n TreeNodeName: {\r\n fontSize: 14,\r\n lineHeight: '20px',\r\n width: 196,\r\n paddingRight: 16,\r\n textOverflow: 'ellipsis',\r\n overflow: 'hidden',\r\n whiteSpace: 'nowrap',\r\n textAlign: 'left',\r\n },\r\n HiddenTooltip: {\r\n display: 'none',\r\n },\r\n };\r\n};\r\n","import { uiblockerStyle } from '@bingads-webui-campaign-react/common-styles';\r\n\r\nexport const getUiBlockerStyles = (_components, { palette }) => ({\r\n '@global': {\r\n ...uiblockerStyle({ palette }),\r\n },\r\n});\r\n","import { getBlockerStyle, spinnerKeyframe } from '@bingads-webui-campaign-react/common-styles';\r\nimport { shorthands, tokens } from '@fluentui/react-components';\r\nimport { Severity, IconErrorColor } from '../constants';\r\n\r\nexport const getCampaignMenuItemStyles = (_components, { palette }) => ({\r\n CampaignMenuItem: {\r\n alignItems: 'start',\r\n height: 'auto',\r\n minHeight: 32,\r\n '& .fui-MenuItem__icon': {\r\n height: 16,\r\n width: 16,\r\n minWidth: 16,\r\n fontSize: 16,\r\n },\r\n '& .fui-MenuItem__content': {\r\n color: tokens.colorBrandForegroundLink,\r\n wordBreak: 'break-word',\r\n },\r\n },\r\n CampaignItemIcon: {\r\n width: 16,\r\n minWidth: 16,\r\n },\r\n SeverityIcon: {\r\n display: 'inline-flex',\r\n alignItems: 'center',\r\n fontSize: 16,\r\n position: 'relative',\r\n },\r\n [`CampaignSelectorItemGlyphicon-${Severity.AllCampaigns}`]: {\r\n color: palette.neutralPrimary,\r\n },\r\n [`CampaignSelectorItemGlyphicon-${Severity.Error}`]: {\r\n color: IconErrorColor,\r\n },\r\n [`CampaignSelectorItemGlyphicon-${Severity.Warning}`]: {\r\n color: palette.orange,\r\n },\r\n});\r\n\r\nexport const getCampaignSelectorStyles = (_components, { palette }) => ({\r\n CampaignSelector: {\r\n '& .fui-MenuItem': {\r\n backgroundColor: 'transparent',\r\n color: tokens.colorNeutralForeground1,\r\n maxWidth: 'none',\r\n flexBasis: 'fit-content',\r\n flexShrink: 1,\r\n flexGrow: 1,\r\n ...shorthands.padding(tokens.spacingVerticalSNudge),\r\n },\r\n\r\n '& .fui-MenuGroupHeader': {\r\n ...shorthands.padding('0', 4),\r\n },\r\n\r\n '& .scope-filters': {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n flexGrow: 1,\r\n },\r\n },\r\n ListMenuGroup: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n flexGrow: 1,\r\n minHeight: '0',\r\n },\r\n SearchBox: {\r\n marginTop: 4,\r\n },\r\n ScrollingContainer: {\r\n overflowX: 'hidden',\r\n overflowY: 'auto',\r\n scrollbarGutter: 'stable',\r\n maxHeight: '50vh',\r\n\r\n '&::-webkit-scrollbar': {\r\n backgroundColor: 'transparent',\r\n '-webkit-border-radius': 10,\r\n width: 8,\r\n },\r\n '&::-webkit-scrollbar-track': {\r\n backgroundColor: 'transparent',\r\n '-webkit-border-radius': 10,\r\n },\r\n '&::-webkit-scrollbar-thumb': {\r\n borderRadius: 10,\r\n '-webkit-border-radius': 10,\r\n backgroundColor: tokens.colorNeutralForeground3,\r\n },\r\n ':hover': {\r\n overflowY: 'auto',\r\n },\r\n },\r\n PlaceholderNode: {\r\n height: 36,\r\n display: 'flex',\r\n alignItems: 'center',\r\n width: 240,\r\n paddingLeft: 16,\r\n paddingRight: 16,\r\n },\r\n PlaceholderNodeIcon: {\r\n marginRight: 3,\r\n },\r\n Spinner: getBlockerStyle(16, palette),\r\n ...spinnerKeyframe,\r\n});\r\n","import { NeutralColors } from '@fluentui/react';\r\n\r\nexport const getBudgetCenterMonthPickerStyle = (_components, { palette }) => ({\r\n monthPickerContainer: {\r\n marginLeft: 'auto',\r\n marginRight: 16,\r\n },\r\n monthPickerSection: {\r\n height: '100%',\r\n display: 'flex',\r\n alignItems: 'center',\r\n },\r\n monthPickerButton: {\r\n width: 172,\r\n padding: '0px 4px',\r\n borderColor: NeutralColors.gray80,\r\n },\r\n monthPickerButtonText: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n color: palette.neutralSecondary,\r\n fontWeight: 400,\r\n },\r\n monthText: {\r\n fontSize: 14,\r\n lineHeight: '20px',\r\n whiteSpace: 'nowrap',\r\n overflow: 'hidden',\r\n textOverflow: 'ellipsis',\r\n maxWidth: 130,\r\n },\r\n calendarIcon: {\r\n fontSize: 16,\r\n lineHeight: '16px',\r\n marginLeft: 'auto',\r\n top: 0,\r\n },\r\n navigationIcons: {\r\n fontSize: 12,\r\n lineHeight: '12px',\r\n color: palette.neutralSecondary,\r\n '& button:not([disabled]):hover': {\r\n backgroundColor: palette.neutralLight,\r\n },\r\n '& button[disabled]': {\r\n color: palette.neutralTertiaryAlt,\r\n },\r\n },\r\n navigationIconButtonWrapper: {\r\n background: 'none',\r\n border: 'none',\r\n padding: 0,\r\n },\r\n navigationIcon: {\r\n padding: 8,\r\n top: 0,\r\n },\r\n monthPickerCallout: {\r\n paddingLeft: 20,\r\n paddingRight: 20,\r\n paddingTop: 20,\r\n backgroundColor: palette.white,\r\n '& .year-components .navContainer': {\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n alignItems: 'center',\r\n marginBottom: 12,\r\n },\r\n '& .isSelected': {\r\n backgroundColor: `${palette.themePrimary} !important`,\r\n color: palette.white,\r\n },\r\n },\r\n});\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport { UiBlocker as UiBlockerBase } from '@bingads-webui-react/ui-blocker';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\n\r\nimport { getUiBlockerStyles } from '../styles';\r\n\r\nexport const UiBlocker = ({\r\n loadingText,\r\n blocking,\r\n children,\r\n}) => {\r\n useDefaultStyles(getUiBlockerStyles);\r\n\r\n return (\r\n \r\n {children}\r\n \r\n );\r\n};\r\n\r\nUiBlocker.propTypes = {\r\n loadingText: PropTypes.string.isRequired,\r\n blocking: PropTypes.bool.isRequired,\r\n children: PropTypes.node.isRequired,\r\n};\r\n","import _ from 'underscore';\r\nimport { edmCampaign } from '@bingads-webui/edm-campaign';\r\n\r\nimport { showErrorBanner, logSingleResponse } from '../utils';\r\nimport { StandardBudgetType, LifetimeStandardBudgetType } from '../constants';\r\n\r\nexport const updateCampaignBudget = ({\r\n cid, aid, campaignId, attrs,\r\n}) => edmCampaign\r\n .Customers.$withKey(cid)\r\n .Accounts.$withKey(aid)\r\n .Campaigns.$withKey(campaignId)\r\n .bulkUpdate({\r\n Id: campaignId,\r\n ...attrs,\r\n });\r\n\r\nexport const updateCampaignBudgetMany = ({\r\n cid, aid, campaignIdList, attrsList,\r\n}) => edmCampaign\r\n .Customers.$withKey(cid)\r\n .Accounts.$withKey(aid)\r\n .Campaigns.$withKey()\r\n .bulkUpdateMany(\r\n campaignIdList,\r\n attrsList\r\n );\r\n\r\nexport const updateSharedBudget = ({\r\n cid, aid, budgetId, attrs,\r\n}) => edmCampaign\r\n .Customers.$withKey(cid)\r\n .Accounts.$withKey(aid)\r\n .Budgets.$withKey(budgetId)\r\n .bulkUpdate({\r\n Id: budgetId,\r\n ...attrs,\r\n });\r\n\r\nexport const updateSharedBudgetMany = ({\r\n cid, aid, budgetIdList, attrsList,\r\n}) => edmCampaign\r\n .Customers.$withKey(cid)\r\n .Accounts.$withKey(aid)\r\n .Budgets.$withKey()\r\n .bulkUpdateMany(\r\n budgetIdList,\r\n attrsList\r\n );\r\n\r\n// generateUpdateCampaignBudgetPromises is to generate update campaign budget promises for many accounts.\r\nexport const generateUpdateCampaignBudgetPromises = ({ cid, campaigns, type }) => {\r\n const campaignGroups = _.groupBy(campaigns, item => item.AccountId);\r\n const accountIds = _.keys(campaignGroups);\r\n return accountIds.map((aid) => {\r\n const itemGroup = campaignGroups[aid];\r\n const attrsList = _.map(itemGroup, i => ({ Budget: { Amount: parseFloat(i.SuggestedBudget), Type: type } }));\r\n return updateCampaignBudgetMany({\r\n cid,\r\n aid,\r\n campaignIdList: _.map(itemGroup, i => i.CampaignId),\r\n attrsList,\r\n });\r\n });\r\n};\r\n\r\n// generateUpdateSharedBudgetManyPromises is to generate update shared budget promises for many accounts.\r\nexport const generateUpdateSharedBudgetManyPromises = ({ cid, campaigns }) => {\r\n const campaignGroups = _.groupBy(campaigns, item => item.AccountId);\r\n const accountIds = _.keys(campaignGroups);\r\n return accountIds.map((aid) => {\r\n const uniqItems = _.uniq(campaignGroups[aid], i => i.BudgetId);\r\n const attrsList = _.map(uniqItems, i => ({ Amount: parseFloat(i.SuggestedBudget) }));\r\n return updateSharedBudgetMany({\r\n cid,\r\n aid,\r\n budgetIdList: _.map(uniqItems, i => i.BudgetId),\r\n attrsList,\r\n });\r\n });\r\n};\r\n\r\nexport const onSaveBudgetUpdate = ({\r\n budget,\r\n i18n,\r\n cid,\r\n budgetUpdateItem,\r\n budgetUpdateItem: { AccountId, CampaignId, BudgetId, DailyBudget },\r\n setIsSaving = _.noop,\r\n successCallback = _.noop,\r\n activity,\r\n // below options are mainly for testing purpose\r\n updateSharedBudgetFunc = updateSharedBudget,\r\n updateCampaignBudgetFunc = updateCampaignBudget,\r\n showErrorBannerFunc = showErrorBanner,\r\n logSingleResponseFunc = logSingleResponse,\r\n}) => {\r\n (activity && activity.trace(JSON.stringify({ ...budgetUpdateItem, newBudget: budget }), 'updateBudget-before'));\r\n let updateBudgetPromise;\r\n if (BudgetId > 0) {\r\n const attrs = { Amount: parseFloat(budget) };\r\n updateBudgetPromise = updateSharedBudgetFunc({\r\n cid, aid: AccountId, budgetId: BudgetId, attrs,\r\n });\r\n } else {\r\n const attrs = { Budget: { Amount: parseFloat(budget), Type: DailyBudget !== null ? StandardBudgetType : LifetimeStandardBudgetType } };\r\n updateBudgetPromise = updateCampaignBudgetFunc({\r\n cid, aid: AccountId, campaignId: CampaignId, attrs,\r\n });\r\n }\r\n\r\n setIsSaving(true);\r\n\r\n return updateBudgetPromise.then((response) => {\r\n successCallback();\r\n (activity && logSingleResponseFunc({\r\n activity,\r\n result: response,\r\n api: 'updateBudget',\r\n sourceItems: [budgetUpdateItem],\r\n }));\r\n }).catch((response) => {\r\n showErrorBannerFunc({ response, i18n });\r\n (activity && logSingleResponseFunc({\r\n activity,\r\n result: response,\r\n api: 'updateBudget',\r\n sourceItems: [budgetUpdateItem],\r\n }));\r\n }).finally(() => setIsSaving(false));\r\n};\r\n","import _ from 'underscore';\r\nimport { getBulkApiErrors } from '@bingads-webui-campaign/api-errors';\r\nimport { notificationApi } from '@bingads-webui-campaign/notification-center';\r\n\r\nconst getUnexpectedError = i18n => ([{\r\n message: i18n.getString(_TL_(\"We've encountered an error and could not finish this task. Please try again or contact support.\")),\r\n}]);\r\n\r\nconst getBulkEditResponseErrors = (response, i18n, scenario) => {\r\n if (!response || !response.errors) {\r\n return getUnexpectedError(i18n);\r\n }\r\n\r\n const errors = getBulkApiErrors(response.errors, scenario, i18n);\r\n\r\n if (!errors || !errors[0] || !errors[0].message) {\r\n return getUnexpectedError(i18n);\r\n }\r\n\r\n // error is a api error class\r\n return _.map(errors, error => ({ message: error.message }));\r\n};\r\n\r\n// Handle errors in many scenarios:\r\n// 1. The request failed: the response code != 200;\r\n// 2. Only one campaign is updated in the request: The response is an object with either entity or errors;\r\n// 3. Many campaigns are updated, and some success and some fail:\r\n// The response has many items, and one item may have both many entity and many errors.\r\nexport function parseResponseMany(response, i18n) {\r\n let serverErrors = [];\r\n const checkAndGetError = (item) => {\r\n if (_.isArray(item)) {\r\n item.forEach((i) => {\r\n checkAndGetError(i);\r\n });\r\n } else if (!item || _.isEmpty(item.entity) || !_.isEmpty(item.errors)) {\r\n const err = getBulkEditResponseErrors(item, i18n);\r\n serverErrors = _.union(serverErrors, err);\r\n }\r\n };\r\n\r\n checkAndGetError(response);\r\n return serverErrors;\r\n}\r\n\r\nexport function showErrorBanner({ response, i18n }) {\r\n const serverErrors = parseResponseMany(response, i18n);\r\n if (serverErrors.length > 0) {\r\n notificationApi.showWarning(serverErrors[0].message);\r\n } else {\r\n notificationApi.showInfo(i18n.getString(_TL_('Budget suggestions successfully applied.')));\r\n }\r\n}\r\n","import _ from 'underscore';\r\n\r\nfunction parseResponse({ result, sourceItems = [] }) {\r\n if (_.isEmpty(result)) {\r\n return {\r\n ...result,\r\n errors: [{\r\n Error: 'UnexpectedError',\r\n Type: 'Unexpected Error',\r\n }],\r\n };\r\n }\r\n\r\n let { entity } = result;\r\n if (!entity) {\r\n entity = result;\r\n }\r\n\r\n if (entity.Budget) {\r\n // standard budget error\r\n const sourceItem = _.findWhere(sourceItems, { CampaignId: entity.Id });\r\n return {\r\n Amount: entity.Budget.Amount,\r\n UpdateType: entity.Budget.Type,\r\n CampaignId: entity.Id,\r\n errors: result.errors,\r\n sourceItem,\r\n };\r\n }\r\n // shared budget error\r\n const sourceItem = _.findWhere(sourceItems, { BudgetId: entity.Id });\r\n return {\r\n Amount: entity.Amount,\r\n UpdateType: 'DailyShared',\r\n BudgetId: entity.Id,\r\n errors: result.errors,\r\n sourceItem,\r\n };\r\n}\r\n\r\nexport function logSingleResponse({\r\n activity, api, result, sourceItems,\r\n}) {\r\n const logMessage = parseResponse({ result, sourceItems });\r\n if (!_.isEmpty(logMessage.errors)) {\r\n activity.error(JSON.stringify(logMessage), api);\r\n } else {\r\n activity.trace(JSON.stringify(logMessage), api);\r\n }\r\n}\r\n\r\nexport function logUpdateBudget({\r\n activity, api, response, sourceItems,\r\n}) {\r\n const getErrorLog = (item) => {\r\n if (_.isArray(item)) {\r\n item.forEach((i) => {\r\n getErrorLog(i);\r\n });\r\n } else {\r\n logSingleResponse({\r\n activity, result: item, api, sourceItems,\r\n });\r\n }\r\n };\r\n\r\n getErrorLog(response);\r\n}\r\n","import _ from 'underscore';\r\n\r\nexport const formatInteger = ({ i18n, value, options }) => i18n.formatDecimal(value, {\r\n minimumFractionDigits: 0, maximumFractionDigits: 1, compact: 'short', withSign: 'always', ...options,\r\n});\r\n\r\nexport const parseDecimal = ({ i18n, value }) => (_.isString(value) ? i18n.parseDecimal(value) : value);\r\n\r\nexport const formatCurrency = ({\r\n i18n, value, currencyCode, options,\r\n}) =>\r\n i18n.formatCurrency(value, currencyCode, options);\r\n\r\nexport const formatDate = ({ i18n, dateString }) => i18n.formatDate(new Date(dateString));\r\n\r\nexport const formatCivilDate = ({ i18n, civilDate, options }) => i18n.formatCivilDate(civilDate, options);\r\n","import React from 'react';\r\nimport _ from 'underscore';\r\n\r\nimport { Constants, InsertionOrderUtils } from '@bingads-webui-clientcenter/entity-utils';\r\nimport IWindow from '@bingads-webui-clientcenter/window-interface';\r\n\r\nimport { Severity, EstimateType, ActionType, InsertionOrderTextKey, IOAuthzAction } from '../constants';\r\nimport { formatCurrency, formatDate } from './format-utils';\r\nimport { MonitoringCardButton } from '../controls';\r\n\r\nconst {\r\n RecommendationType,\r\n BudgetRecommendationItemType,\r\n BudgetEventType,\r\n IOFilter,\r\n IOEntryPointAlias,\r\n SecurityAction,\r\n} = Constants;\r\nconst { isEndlessIOEndDate, isUnlimitedIOBudget } = InsertionOrderUtils;\r\n\r\nconst calcDelta = (a, b) => {\r\n if (!_.isNumber(a) || !_.isNumber(b)) {\r\n return null;\r\n }\r\n\r\n return a - b;\r\n};\r\n\r\nconst calcDeltaItem = (itemA, itemB) => {\r\n if (!itemA || !itemB) {\r\n return null;\r\n }\r\n\r\n return {\r\n EstimatedConversionsIncrease: calcDelta(itemA.EstimatedConversions, itemB.EstimatedConversions),\r\n EstimatedClicksIncrease: calcDelta(itemA.EstimatedClicks, itemB.EstimatedClicks),\r\n EstimatedImpressionsIncrease: calcDelta(itemA.EstimatedImpressions, itemB.EstimatedImpressions),\r\n EstimatedSpendIncrease: calcDelta(itemA.EstimatedSpend, itemB.EstimatedSpend),\r\n };\r\n};\r\n\r\nexport const populateEstimatedIncrease = (campaignBudgetRecommendation) => {\r\n if (!campaignBudgetRecommendation) {\r\n return null;\r\n }\r\n\r\n const budgetRecommendationItems = campaignBudgetRecommendation.BudgetRecommendationItems;\r\n const current = _.findWhere(budgetRecommendationItems, { Comment: BudgetRecommendationItemType.Current });\r\n\r\n return {\r\n ...campaignBudgetRecommendation,\r\n BudgetRecommendationItems: budgetRecommendationItems &&\r\n _.map(budgetRecommendationItems, item => ({\r\n ...item,\r\n ...calcDeltaItem(item, current),\r\n })),\r\n };\r\n};\r\n\r\nexport const getDeltaEstimates = (campaignBudgetRecommendation) => {\r\n const suggested = _.findWhere(\r\n _.get(campaignBudgetRecommendation, 'BudgetRecommendationItems'),\r\n { Comment: BudgetRecommendationItemType.Suggested }\r\n );\r\n\r\n if (!suggested) {\r\n return null;\r\n }\r\n\r\n const {\r\n EstimatedConversionsIncrease,\r\n EstimatedClicksIncrease,\r\n EstimatedImpressionsIncrease,\r\n EstimatedSpendIncrease,\r\n } = suggested;\r\n\r\n return _.compact([\r\n EstimatedConversionsIncrease && { type: EstimateType.Conversions, amount: EstimatedConversionsIncrease },\r\n EstimatedClicksIncrease && { type: EstimateType.Clicks, amount: EstimatedClicksIncrease },\r\n EstimatedImpressionsIncrease && { type: EstimateType.Impressions, amount: EstimatedImpressionsIncrease },\r\n EstimatedSpendIncrease && { type: EstimateType.Spend, amount: EstimatedSpendIncrease },\r\n ]);\r\n};\r\n\r\nexport const formatBudgetEventTypes = ({\r\n i18n,\r\n budgetEventTypes,\r\n campaignBudgetRecommendation,\r\n openBudgetUpdatePanel,\r\n navigateBySiteMapId,\r\n authzMap,\r\n activity,\r\n}) => {\r\n const deltaEstimates = getDeltaEstimates(campaignBudgetRecommendation);\r\n const isExperimentCampaign = _.get(campaignBudgetRecommendation, 'IsExperimentCampaign');\r\n\r\n const formatBudgetEventType = (type) => {\r\n const handleClick = ({ api, action }) => {\r\n activity && activity.trace(`BudgetEventType: ${type}`, api);\r\n action();\r\n };\r\n\r\n switch (type) {\r\n case BudgetEventType.CampaignOutOfBudget:\r\n return {\r\n severity: Severity.Error,\r\n message: i18n.getString(_TL_('Your campaign is out of budget. Please increase your budget to ensure your ads keep serving.')),\r\n deltaEstimates,\r\n actions: isExperimentCampaign || !_.get(authzMap, SecurityAction.CampaignManagementFullControl)\r\n ? null\r\n : handleClick({\r\n api: 'openBudgetUpdatePanel',\r\n action: openBudgetUpdatePanel,\r\n })}\r\n />,\r\n };\r\n case BudgetEventType.CampaignLimitedByBudget:\r\n return {\r\n severity: Severity.Warning,\r\n message: i18n.getString(_TL_('Your campaign will be limited by budget. Please increase your budget to avoid missing potential traffic.')),\r\n deltaEstimates,\r\n actions: isExperimentCampaign || !_.get(authzMap, SecurityAction.CampaignManagementFullControl)\r\n ? null\r\n : handleClick({\r\n api: 'openBudgetUpdatePanel',\r\n action: openBudgetUpdatePanel,\r\n })}\r\n />,\r\n };\r\n case BudgetEventType.PrepayAccountBalanceLow:\r\n return {\r\n severity: Severity.Warning,\r\n message: i18n.getString(_TL_('Your prepay balance is under 15% of your last recharge amount. Please add funds to ensure your ads keep serving.')),\r\n actions: _.get(authzMap, SecurityAction.ForceBilling)\r\n ? handleClick({\r\n api: 'navigate',\r\n action: () => navigateBySiteMapId('addFunds', { extraSearch: { returnurl: IWindow.location.href } }),\r\n })}\r\n />\r\n : null,\r\n };\r\n case BudgetEventType.PrepayAccountBalanceZero:\r\n return {\r\n severity: Severity.Error,\r\n message: i18n.getString(_TL_('Your prepay balance is depleted. Please add funds to ensure your ads keep serving.')),\r\n actions: _.get(authzMap, SecurityAction.ForceBilling)\r\n ? handleClick({\r\n api: 'navigate',\r\n action: () => navigateBySiteMapId('addFunds', { extraSearch: { returnurl: IWindow.location.href } }),\r\n })}\r\n />\r\n : null,\r\n };\r\n case BudgetEventType.InsertionOrderBalanceDepleted:\r\n case BudgetEventType.InsertionOrderExpired:\r\n return {\r\n severity: Severity.Error,\r\n message: i18n.getString(_TL_('Your insertion order is paused due to expiration or depletion. Please fix your existing insertion order or create a new one.')),\r\n actions: _.get(authzMap, IOAuthzAction.isIOAddAuthorized)\r\n ? handleClick({\r\n api: 'navigate',\r\n action: () => navigateBySiteMapId('insertionOrder', { extraSearch: { iofilter: IOFilter.AccountPaused, entrypoint: IOEntryPointAlias.BudgetCenter } }),\r\n })}\r\n />\r\n : null,\r\n };\r\n case BudgetEventType.InsertionOrderExhaustingUrgent:\r\n return {\r\n severity: Severity.Warning,\r\n message: i18n.getString(_TL_('Your insertion order is going to exhaust in 7 days. To keep your ads running, please increase the budget or create a new one.')),\r\n actions: _.get(authzMap, IOAuthzAction.isIOAddAuthorized)\r\n ? handleClick({\r\n api: 'navigate',\r\n action: () => navigateBySiteMapId('insertionOrder', { extraSearch: { iofilter: IOFilter.Exhausting, entrypoint: IOEntryPointAlias.BudgetCenter } }),\r\n })}\r\n />\r\n : null,\r\n };\r\n case BudgetEventType.InsertionOrderExpiringUrgent:\r\n return {\r\n severity: Severity.Warning,\r\n message: i18n.getString(_TL_('Your insertion order will expire in 7 days. To ensure your ads keep serving, please extend the expiration date of your current insertion order or create a new one.')),\r\n actions: _.get(authzMap, IOAuthzAction.isIOAddAuthorized)\r\n ? handleClick({\r\n api: 'navigate',\r\n action: () => navigateBySiteMapId('insertionOrder', { extraSearch: { iofilter: IOFilter.Expiring, entrypoint: IOEntryPointAlias.BudgetCenter } }),\r\n })}\r\n />\r\n : null,\r\n };\r\n case BudgetEventType.AccountHold:\r\n return {\r\n severity: Severity.Error,\r\n message: i18n.getString(_TL_('Your payment method is declined. Please try again.')),\r\n actions: _.get(authzMap, SecurityAction.ForceBilling)\r\n ? handleClick({\r\n api: 'navigate',\r\n action: () => navigateBySiteMapId('payNow', { extraSearch: { returnurl: IWindow.location.href } }),\r\n })}\r\n />\r\n : null,\r\n };\r\n default:\r\n return null;\r\n }\r\n };\r\n\r\n const budgetEventTypesDeduped = _.contains(budgetEventTypes, BudgetEventType.InsertionOrderBalanceDepleted) && _.contains(budgetEventTypes, BudgetEventType.InsertionOrderExpired)\r\n ? _.without(budgetEventTypes, BudgetEventType.InsertionOrderExpired)\r\n : budgetEventTypes;\r\n\r\n return _.compact(_.map(budgetEventTypesDeduped, (budgetEventType) => {\r\n const formatted = formatBudgetEventType(budgetEventType);\r\n return formatted && ({\r\n eventType: budgetEventType,\r\n budgetEventType,\r\n ...formatted,\r\n });\r\n }));\r\n};\r\n\r\nexport const formatAccountRecommendations = ({\r\n i18n,\r\n currencyCode,\r\n accountRecommendations,\r\n navigateBySiteMapId,\r\n authzMap,\r\n activity,\r\n}) => {\r\n const formatAccountRecommendation = ({\r\n RecommendationType: type,\r\n FromDate,\r\n ThruDate,\r\n SpendCapAmount,\r\n SeriesStartDate,\r\n }) => {\r\n const handleClick = ({ api, action }) => {\r\n activity && activity.trace(`RecommendationType: ${type}`, api);\r\n action();\r\n };\r\n switch (type) {\r\n case RecommendationType.InsertionOrderCreation: {\r\n const fromDate = formatDate({ i18n, dateString: FromDate });\r\n const thruDate = isEndlessIOEndDate(ThruDate)\r\n ? i18n.getString(InsertionOrderTextKey.NoEndDateLowerCase)\r\n : formatDate({ i18n, dateString: ThruDate });\r\n const spendCapAmount = isUnlimitedIOBudget(SpendCapAmount)\r\n ? i18n.getString(InsertionOrderTextKey.UnlimitedLowerCase)\r\n : formatCurrency({ i18n, value: SpendCapAmount, currencyCode });\r\n return {\r\n severity: Severity.Recommendation,\r\n message: i18n.getString(\r\n _TL_('Create a new insertion order from {{fromDate}} to {{thruDate}} with {{spendCapAmount}} budget.'),\r\n { fromDate, thruDate, spendCapAmount }\r\n ),\r\n hint: i18n.getString(_TL_('We recommend this based on the current trends of your insertion order frequency and spend rate.')),\r\n actions: _.get(authzMap, IOAuthzAction.isIOAddAuthorized)\r\n ? handleClick({\r\n api: 'navigate',\r\n action: () => navigateBySiteMapId('insertionOrder', { extraSearch: { entrypoint: IOEntryPointAlias.BudgetCenter } }),\r\n })}\r\n />\r\n : null,\r\n };\r\n }\r\n case RecommendationType.InsertionOrderUpdate: {\r\n const spendCapAmount = isUnlimitedIOBudget(SpendCapAmount)\r\n ? i18n.getString(InsertionOrderTextKey.UnlimitedLowerCase)\r\n : formatCurrency({ i18n, value: SpendCapAmount, currencyCode });\r\n return {\r\n severity: Severity.Recommendation,\r\n message: i18n.getString(\r\n _TL_('Increase your insertion order budget to {{spendCapAmount}} to get more traffic.'),\r\n { spendCapAmount }\r\n ),\r\n actions: _.get(authzMap, IOAuthzAction.isIOUpdateAuthorized)\r\n ? handleClick({\r\n api: 'navigate',\r\n action: () => navigateBySiteMapId('insertionOrder', { extraSearch: { entrypoint: IOEntryPointAlias.BudgetCenter } }),\r\n })}\r\n />\r\n : null,\r\n };\r\n }\r\n case RecommendationType.RecurringInsertionOrderAdd: {\r\n const seriesStartDate = formatDate({ i18n, dateString: SeriesStartDate });\r\n return {\r\n severity: Severity.Recommendation,\r\n message: i18n.getString(\r\n _TL_('Create recurring insertion orders from {{seriesStartDate}}.'),\r\n { seriesStartDate }\r\n ),\r\n hint: i18n.getString(_TL_('We recommend this based on the current trends of your insertion order frequency and spend rate.')),\r\n actions: _.get(authzMap, IOAuthzAction.isIOAddAuthorized)\r\n ? handleClick({\r\n api: 'navigate',\r\n action: () => navigateBySiteMapId('insertionOrder', { extraSearch: { entrypoint: IOEntryPointAlias.BudgetCenter } }),\r\n })}\r\n />\r\n : null,\r\n };\r\n }\r\n case RecommendationType.AutoRecharge:\r\n return {\r\n severity: Severity.Recommendation,\r\n message: i18n.getString(_TL_('Turn on auto-recharge for your prepaid account to ensure your ads keep serving.')),\r\n hint: i18n.getString(_TL_('Auto-recharge can help your prepay account avoid delays in delivering ads.')),\r\n actions: _.get(authzMap, SecurityAction.AccountUpdate)\r\n ? handleClick({\r\n api: 'navigate',\r\n action: () => navigateBySiteMapId('billingSettings', { extraSearch: { returnurl: IWindow.location.href } }),\r\n })}\r\n />\r\n : null,\r\n };\r\n default:\r\n return null;\r\n }\r\n };\r\n\r\n return _.compact(_.map(accountRecommendations, (accountRecommendation) => {\r\n const formatted = formatAccountRecommendation(accountRecommendation);\r\n return formatted && ({\r\n eventType: accountRecommendation.RecommendationType,\r\n ...accountRecommendation,\r\n ...formatted,\r\n });\r\n }));\r\n};\r\n\r\nexport const getMonitoringCardConfig = ({\r\n i18n,\r\n authzMap,\r\n currencyCode,\r\n activity,\r\n accountRecommendations,\r\n budgetEventTypes,\r\n campaignBudgetRecommendation,\r\n openBudgetUpdatePanel,\r\n navigateBySiteMapId,\r\n}) => {\r\n const budgetEventAlerts = formatBudgetEventTypes({\r\n i18n, budgetEventTypes, campaignBudgetRecommendation, openBudgetUpdatePanel, navigateBySiteMapId, authzMap, activity,\r\n });\r\n const accountRecommendationAlerts = formatAccountRecommendations({\r\n i18n, currencyCode, accountRecommendations, navigateBySiteMapId, authzMap, activity,\r\n });\r\n return _.sortBy([...budgetEventAlerts, ...accountRecommendationAlerts], 'severity');\r\n};\r\n","import URI from 'urijs';\r\n\r\nimport { getRoutePathById } from '@bingads-webui-react/with-site-map';\r\n\r\nconst getURIObj = ({\r\n siteMapId, cid, aid, uid, siteMap, extraSearch,\r\n}) => {\r\n const path = getRoutePathById(siteMap, siteMapId);\r\n const uri = new URI(path);\r\n uri.addSearch({\r\n cid,\r\n aid,\r\n uid,\r\n ...extraSearch,\r\n });\r\n return uri;\r\n};\r\n\r\nexport const getURL = ({\r\n siteMapId, cid, aid, uid, siteMap, extraSearch,\r\n}) => {\r\n const uri = getURIObj({\r\n siteMapId, cid, aid, uid, siteMap, extraSearch,\r\n });\r\n return uri.toString();\r\n};\r\n\r\nexport const generateGetURLBySiteMapId = ({\r\n siteMap, cid, aid, uid,\r\n}) => (siteMapId, { extraSearch } = {}) => getURL({\r\n siteMapId, cid, aid, uid, siteMap, extraSearch,\r\n});\r\n\r\nexport const navigate = ({\r\n history, siteMapId, cid, aid, uid, siteMap, extraSearch,\r\n}) => {\r\n const uri = getURIObj({\r\n siteMapId, cid, aid, uid, siteMap, extraSearch,\r\n });\r\n history.push(uri.toString());\r\n};\r\n\r\nexport const generateNavigateBySiteMapId = ({\r\n history, siteMap, cid, aid, uid,\r\n}) => (siteMapId, { extraSearch } = {}) => navigate({\r\n history, siteMapId, cid, aid, uid, siteMap, extraSearch,\r\n});\r\n","import { Constants, InsertionOrderUtils } from '@bingads-webui-clientcenter/entity-utils';\r\nimport { ClickChangeType,\r\n InsertionOrderFieldNameTextKey,\r\n InsertionOrderStatusTextKey,\r\n InsertionOrderTextKey,\r\n LifetimeBudgetField,\r\n TooltipChartKeyDataTitleKey,\r\n TooltipChartType } from '../constants';\r\nimport { formatCurrency, formatDate, formatInteger, parseDecimal } from './format-utils';\r\n\r\nconst {\r\n BudgetEventType, BudgetChangeType, InsertionOrdersGridFieldNames,\r\n} = Constants;\r\nconst { isEndlessIOEndDate, isUnlimitedIOBudget } = InsertionOrderUtils;\r\n\r\nexport function getKeyDataItemsConfig({ i18n, chartType }) {\r\n switch (chartType) {\r\n case TooltipChartType.AccountPastDayDailySpend:\r\n case TooltipChartType.AccountTodayDailySpend:\r\n return [{\r\n title: i18n.getString(TooltipChartKeyDataTitleKey.SpendOfTheDay),\r\n valueFieldName: 'DailySpend',\r\n }];\r\n case TooltipChartType.AccountPastDayCumulativeSpend:\r\n case TooltipChartType.AccountTodayCumulativeSpend:\r\n return [{\r\n title: i18n.getString(TooltipChartKeyDataTitleKey.SpendOfTheDay),\r\n valueFieldName: 'DailySpend',\r\n }, {\r\n title: i18n.getString(TooltipChartKeyDataTitleKey.MonthToDateSpend),\r\n valueFieldName: 'MTDSpend',\r\n }];\r\n case TooltipChartType.CampaignPastDayDailySpend:\r\n case TooltipChartType.CampaignTodayDailySpend:\r\n return [{\r\n title: i18n.getString(TooltipChartKeyDataTitleKey.SpendOfTheDay),\r\n valueFieldName: 'DailySpend',\r\n }, {\r\n title: i18n.getString(TooltipChartKeyDataTitleKey.LifetimeBudget),\r\n valueFieldName: 'LifetimeBudget',\r\n }, {\r\n title: i18n.getString(TooltipChartKeyDataTitleKey.DailyBudget),\r\n valueFieldName: 'DailyBudget',\r\n }];\r\n case TooltipChartType.CampaignPastDayCumulativeSpend:\r\n case TooltipChartType.CampaignTodayCumulativeSpend:\r\n return [{\r\n title: i18n.getString(TooltipChartKeyDataTitleKey.SpendOfTheDay),\r\n valueFieldName: 'DailySpend',\r\n }, {\r\n title: i18n.getString(TooltipChartKeyDataTitleKey.MonthToDateSpend),\r\n valueFieldName: 'MTDSpend',\r\n }, {\r\n title: i18n.getString(TooltipChartKeyDataTitleKey.LifetimeBudget),\r\n valueFieldName: 'LifetimeBudget',\r\n }, {\r\n title: i18n.getString(TooltipChartKeyDataTitleKey.MonthlySpendLimit),\r\n valueFieldName: 'MonthlyBudget',\r\n }];\r\n default:\r\n return [];\r\n }\r\n}\r\n\r\nexport const formatTooltipEventType = ({\r\n i18n, eventType,\r\n}) => {\r\n switch (eventType) {\r\n case BudgetEventType.CampaignOutOfBudget:\r\n return { message: i18n.getString(_TL_('Campaign out of budget')) };\r\n case BudgetEventType.PrepayAccountBalanceZero:\r\n return { message: i18n.getString(_TL_('Account out of budget')) };\r\n case BudgetEventType.InsertionOrderBalanceDepleted:\r\n return { message: i18n.getString(_TL_('Insertion order exhausted')) };\r\n case BudgetEventType.InsertionOrderExpired:\r\n return { message: i18n.getString(_TL_('Insertion order expired')) };\r\n case BudgetEventType.AccountHold:\r\n return { message: i18n.getString(_TL_('Payment declined')) };\r\n default:\r\n return null;\r\n }\r\n};\r\n\r\nfunction formatInsertionOrderValue({\r\n fieldName, value, i18n, currencyCode,\r\n}) {\r\n if (fieldName === InsertionOrdersGridFieldNames.SpendCapAmount) {\r\n return isUnlimitedIOBudget(Number(value))\r\n ? i18n.getString(InsertionOrderTextKey.UnlimitedLowerCase)\r\n : formatCurrency({ i18n, value: parseDecimal({ i18n, value }), currencyCode });\r\n }\r\n if (fieldName === InsertionOrdersGridFieldNames.Status) {\r\n return i18n.getString(InsertionOrderStatusTextKey[Number(value)]);\r\n }\r\n if (fieldName === InsertionOrdersGridFieldNames.ThruDate) {\r\n const endDate = new Date(value);\r\n return isEndlessIOEndDate(endDate)\r\n ? i18n.getString(InsertionOrderTextKey.NoEndDateLowerCase)\r\n : formatDate({ i18n, dateString: endDate });\r\n }\r\n return value;\r\n}\r\n\r\nfunction getInsertionOrderMessage({ i18n, eventHistory, currencyCode }) {\r\n if (!eventHistory.OldValue) {\r\n return i18n.getString(_TL_('Order was created'));\r\n }\r\n return i18n.getString(\r\n _TL_('Insertion order {{changeField}} changed from {{oldValue}} to {{newValue}}'),\r\n {\r\n changeField: i18n.getString(InsertionOrderFieldNameTextKey[eventHistory.FieldName]),\r\n oldValue: formatInsertionOrderValue({\r\n fieldName: eventHistory.FieldName, value: eventHistory.OldValue, i18n, currencyCode,\r\n }),\r\n newValue: formatInsertionOrderValue({\r\n fieldName: eventHistory.FieldName, value: eventHistory.NewValue, i18n, currencyCode,\r\n }),\r\n }\r\n );\r\n}\r\n\r\nexport const formatTooltipBudgetChangeType = ({\r\n i18n, eventType, eventHistory, currencyCode,\r\n}) => {\r\n switch (eventType) {\r\n case BudgetChangeType.PrepayBalanceRecharge:\r\n return {\r\n message: i18n.getString(\r\n _TL_('Balance recharged with {{changeAmount}}'),\r\n { changeAmount: formatCurrency({ i18n, value: eventHistory.NewValue, currencyCode }) }\r\n ),\r\n };\r\n case BudgetChangeType.InsertionOrderChange:\r\n return {\r\n message: getInsertionOrderMessage({ i18n, eventHistory, currencyCode }),\r\n };\r\n case BudgetChangeType.ThresholdPaymentChange:\r\n return {\r\n message: i18n.getString(\r\n _TL_('Payment of {{changeAmount}} made'),\r\n { changeAmount: formatCurrency({ i18n, value: eventHistory.NewValue, currencyCode }) }\r\n ),\r\n };\r\n case BudgetChangeType.CampaignDailyBudgetChange:\r\n return {\r\n message: i18n.getString(\r\n eventHistory.FieldName === LifetimeBudgetField\r\n ? _TL_('Lifetime budget changed from {{oldValue}} to {{newValue}}')\r\n : _TL_('Daily budget changed from {{oldValue}} to {{newValue}}'),\r\n {\r\n oldValue: formatCurrency({ i18n, value: parseDecimal({ i18n, value: eventHistory.OldValue }), currencyCode }),\r\n newValue: formatCurrency({ i18n, value: parseDecimal({ i18n, value: eventHistory.NewValue }), currencyCode }),\r\n }\r\n ),\r\n hint: eventHistory.DailyClickChange !== 0 && {\r\n type: eventHistory.DailyClickChange > 0 ? ClickChangeType.Increase : ClickChangeType.Decrease,\r\n clicks: formatInteger({ i18n, value: eventHistory.DailyClickChange }),\r\n },\r\n };\r\n default:\r\n return null;\r\n }\r\n};\r\n","import { Severity, IconErrorColor, Grey } from '../constants';\r\n\r\nexport const getTopKeyCardStyles = (_components, { palette }) => ({\r\n TopKeyCardGroup: {\r\n marginLeft: -8,\r\n marginRight: -8,\r\n },\r\n AmountNodeInfo: {\r\n display: 'flex',\r\n flexDirection: 'row',\r\n alignItems: 'end',\r\n },\r\n AmountNodeValueNode: {\r\n marginRight: 10,\r\n },\r\n AmountNodeValue: {\r\n fontSize: 28,\r\n fontWeight: 600,\r\n lineHeight: '36px',\r\n },\r\n AmountNodeSuffix: {\r\n fontSize: 14,\r\n fontWeight: 600,\r\n marginLeft: 2,\r\n },\r\n AmountHint: {\r\n fontSize: 14,\r\n },\r\n ItemName: {\r\n fontSize: 14,\r\n lineHeight: '20px',\r\n },\r\n MessageItem: {\r\n fontSize: 12,\r\n lineHeight: '16px',\r\n },\r\n [`Icon-Severity-${Severity.Error}`]: {\r\n color: IconErrorColor,\r\n },\r\n [`Icon-Severity-${Severity.Warning}`]: {\r\n color: palette.orange,\r\n },\r\n CampaignEditLink: {\r\n marginRight: 16,\r\n },\r\n CampaignSharedIcon: {\r\n marginLeft: 4,\r\n fontSize: 14,\r\n },\r\n});\r\n\r\nexport const getThresholdProgressBarStyles = (_components, { palette }) => ({\r\n Container: {\r\n position: 'relative',\r\n width: 209,\r\n height: 4,\r\n marginTop: 8,\r\n },\r\n Bar: {\r\n position: 'absolute',\r\n width: '100%',\r\n height: '100%',\r\n background: ({ percentage }) => {\r\n const progress = 100 * percentage;\r\n return `linear-gradient(to right, ${palette.themePrimary} ${progress}%, ${Grey} ${progress}%)`;\r\n },\r\n borderRadius: 2,\r\n },\r\n});\r\n\r\nexport const getInsertionOrderCardStyles = () => ({\r\n Item: {\r\n display: 'flex',\r\n flexDirection: 'row',\r\n justifyContent: 'space-between',\r\n alignItems: 'flex-start',\r\n marginBottom: 12,\r\n },\r\n ItemValue: {\r\n fontSize: 28,\r\n fontWeight: 600,\r\n lineHeight: '36px',\r\n },\r\n NoActiveIO: {\r\n marginTop: 5,\r\n },\r\n NoActiveName: {\r\n fontSize: 16,\r\n fontWeight: 600,\r\n lineHeight: '22px',\r\n marginBottom: 8,\r\n },\r\n NoActiveMessageItem: {\r\n display: 'flex',\r\n flexDirection: 'row',\r\n alignItems: 'center',\r\n lineHeight: '20px',\r\n marginBottom: 4,\r\n },\r\n NoActiveMessageItemPrefix: {\r\n marginRight: 4,\r\n },\r\n FontSize14: {\r\n fontSize: '14px !important',\r\n },\r\n});\r\n\r\nexport const getAlertMessageStyles = (_components, { palette }) => ({\r\n MessageText: {\r\n marginRight: 8,\r\n },\r\n MessageBar: {\r\n marginTop: 8,\r\n '& .ms-MessageBar-content': {\r\n alignItems: 'center',\r\n },\r\n },\r\n [`Icon-Severity-${Severity.Error}`]: {\r\n color: IconErrorColor,\r\n },\r\n\r\n [`Icon-Severity-${Severity.Warning}`]: {\r\n color: palette.orange,\r\n },\r\n});\r\n","import React from 'react';\r\nimport classnames from 'classnames';\r\nimport PropTypes from 'prop-types';\r\nimport _ from 'underscore';\r\n\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { getInsertionOrderCardStyles, getThresholdProgressBarStyles, getTopKeyCardStyles } from '../../styles/top-key-card';\r\nimport { formatCurrency } from '../../utils';\r\n\r\nexport function MessageItem({ message, severity, className }) {\r\n const classes = useDefaultStyles(getTopKeyCardStyles);\r\n return (
    {message}
    );\r\n}\r\nMessageItem.propTypes = {\r\n severity: PropTypes.number.isRequired,\r\n message: PropTypes.string.isRequired,\r\n className: PropTypes.string,\r\n};\r\nMessageItem.defaultProps = {\r\n className: null,\r\n};\r\n\r\nexport function AmountNode({\r\n i18n, currencyCode, amount, suffixKey, hint, message,\r\n}) {\r\n const classes = useDefaultStyles(getTopKeyCardStyles);\r\n if (!_.isNumber(amount)) {\r\n return null;\r\n }\r\n const formattedValue = formatCurrency({\r\n i18n, value: amount, currencyCode, options: { compact: 'short', maximumFractionDigits: 2 },\r\n });\r\n\r\n return (\r\n
    \r\n
    \r\n
    \r\n {formattedValue}\r\n {suffixKey && {i18n.getString(suffixKey)}}\r\n
    \r\n {hint && {hint}}\r\n
    \r\n {message && }\r\n
    \r\n );\r\n}\r\n\r\nAmountNode.propTypes = {\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n currencyCode: PropTypes.string.isRequired,\r\n amount: PropTypes.number,\r\n suffixKey: PropTypes.string,\r\n hint: PropTypes.oneOfType([PropTypes.string, PropTypes.node]),\r\n message: PropTypes.shape({\r\n severity: PropTypes.number,\r\n text: PropTypes.string,\r\n }),\r\n};\r\nAmountNode.defaultProps = {\r\n amount: null,\r\n suffixKey: null,\r\n hint: null,\r\n message: null,\r\n};\r\n\r\nexport function ThresholdProgressBar({ percentage }) {\r\n const classes = useDefaultStyles(getThresholdProgressBarStyles, { percentage });\r\n\r\n return (\r\n
    \r\n
    \r\n
    \r\n );\r\n}\r\nThresholdProgressBar.propTypes = {\r\n percentage: PropTypes.number.isRequired,\r\n};\r\n\r\nexport function InsertionOrderItem({\r\n i18n, itemName, itemKey, itemValue, message, severity,\r\n}) {\r\n const classes = useDefaultStyles(getInsertionOrderCardStyles);\r\n\r\n return (\r\n
    \r\n
    \r\n
    {i18n.getString(itemKey)}
    \r\n {message && }\r\n
    \r\n
    {itemValue}
    \r\n
    \r\n );\r\n}\r\nInsertionOrderItem.propTypes = {\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n itemName: PropTypes.string,\r\n itemKey: PropTypes.string.isRequired,\r\n itemValue: PropTypes.oneOfType([PropTypes.string, PropTypes.node]).isRequired,\r\n message: PropTypes.string,\r\n severity: PropTypes.number,\r\n};\r\nInsertionOrderItem.defaultProps = {\r\n itemName: null,\r\n message: null,\r\n severity: null,\r\n};\r\n","import React, { useMemo } from 'react';\r\nimport classnames from 'classnames';\r\nimport PropTypes from 'prop-types';\r\nimport _ from 'underscore';\r\n\r\nimport { Constants, InsertionOrderUtils } from '@bingads-webui-clientcenter/entity-utils';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { getCivilDateFromDate } from '@bingads-webui-universal/temporal-utitlities';\r\nimport { formatCivilDate, formatCurrency, formatInteger } from '../../utils';\r\nimport { InsertionOrderTextKey, Severity } from '../../constants';\r\nimport { AmountNode, InsertionOrderItem, MessageItem } from './content-item-node';\r\nimport { getInsertionOrderCardStyles } from '../../styles/top-key-card';\r\n\r\nconst { BudgetEventType } = Constants;\r\nconst { isEndlessIOEndDate, isUnlimitedIOBudget } = InsertionOrderUtils;\r\n\r\nexport function InsertionOrderCard({\r\n i18n, currencyCode, rawData, abnormalStatus,\r\n}) {\r\n const classes = useDefaultStyles(getInsertionOrderCardStyles);\r\n const { today, ExpireDate, RemainingBudget } = rawData;\r\n const expirationDate = useMemo(() => {\r\n if (!ExpireDate) {\r\n return null;\r\n }\r\n const date = getCivilDateFromDate(ExpireDate);\r\n return formatCivilDate({ i18n, civilDate: date, options: { date: 'medium' } });\r\n }, [ExpireDate, i18n]);\r\n\r\n const noActiveIO = useMemo(() => {\r\n const expiredMessage = _.find(abnormalStatus, item => item === BudgetEventType.InsertionOrderExpired) ? (\r\n
    \r\n \r\n {i18n.getString(_TL_('Your previous IO expires on {{expirationDate}}'), { expirationDate: '' })}\r\n \r\n \r\n
    \r\n ) : null;\r\n const remainingBudget = formatCurrency({\r\n i18n, value: 0, currencyCode, options: { compact: 'short' },\r\n });\r\n const exhaustedMessage = _.find(abnormalStatus, item => item === BudgetEventType.InsertionOrderBalanceDepleted) ? (\r\n
    \r\n \r\n {i18n.getString(_TL_('Your previous IO’s remaining budget is {{remainingBudget}}'), { remainingBudget: '' })}\r\n \r\n \r\n
    \r\n ) : null;\r\n\r\n if (!expiredMessage && !exhaustedMessage && ExpireDate) {\r\n return null;\r\n }\r\n\r\n return (\r\n
    \r\n {i18n.getString(_TL_('No active IO'))}\r\n {expiredMessage}\r\n {exhaustedMessage}\r\n
    \r\n );\r\n }, [ExpireDate, abnormalStatus, classes, currencyCode, expirationDate, i18n]);\r\n\r\n const remainingBudgetMessageConfig = useMemo(() => {\r\n if (!abnormalStatus) {\r\n return null;\r\n }\r\n for (let i = 0; i < abnormalStatus.length; i += 1) {\r\n const eventType = abnormalStatus[i];\r\n if (eventType === BudgetEventType.InsertionOrderExhaustingUrgent) {\r\n return {\r\n message: i18n.getString(_TL_('Exhaust in 7 days')),\r\n severity: Severity.Warning,\r\n };\r\n }\r\n }\r\n return null;\r\n }, [abnormalStatus, i18n]);\r\n\r\n const expireOnMessageConfig = useMemo(() => {\r\n if (!abnormalStatus || !ExpireDate) {\r\n return null;\r\n }\r\n for (let i = 0; i < abnormalStatus.length; i += 1) {\r\n const eventType = abnormalStatus[i];\r\n if (eventType === BudgetEventType.InsertionOrderExpiringUrgent) {\r\n const expireInDays = formatInteger({\r\n i18n,\r\n value: (ExpireDate - new Date(today.year, today.month - 1, today.day)) / (1000 * 3600 * 24),\r\n options: { withSign: 'auto' },\r\n });\r\n return {\r\n message: i18n.getString(_TL_('Expire in {{expireInDays}} days'), { expireInDays }),\r\n severity: Severity.Warning,\r\n };\r\n }\r\n }\r\n return null;\r\n }, [ExpireDate, abnormalStatus, i18n, today]);\r\n\r\n const noErrorNode = useMemo(() => {\r\n if (noActiveIO) {\r\n return null;\r\n }\r\n\r\n const remainingBudgetValue = isUnlimitedIOBudget(RemainingBudget)\r\n ? i18n.getString(InsertionOrderTextKey.Unlimited)\r\n : ();\r\n const expirationDateValue = isEndlessIOEndDate(ExpireDate)\r\n ? i18n.getString(InsertionOrderTextKey.NoEndDate)\r\n : expirationDate;\r\n return (\r\n <>\r\n \r\n \r\n \r\n );\r\n }, [ExpireDate, RemainingBudget, currencyCode, expirationDate, expireOnMessageConfig, i18n, noActiveIO, remainingBudgetMessageConfig]);\r\n\r\n return (\r\n <>\r\n {noErrorNode}\r\n {noActiveIO}\r\n \r\n );\r\n}\r\n\r\nInsertionOrderCard.propTypes = {\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n formatCivilDate: PropTypes.func.isRequired,\r\n }).isRequired,\r\n currencyCode: PropTypes.string.isRequired,\r\n rawData: PropTypes.shape({\r\n today: PropTypes.shape({\r\n year: PropTypes.number.isRequired,\r\n month: PropTypes.number.isRequired,\r\n day: PropTypes.number.isRequired,\r\n }),\r\n RemainingBudget: PropTypes.number.isRequired,\r\n ExpireDate: PropTypes.shape({}),\r\n }).isRequired,\r\n abnormalStatus: PropTypes.arrayOf(PropTypes.number),\r\n};\r\n\r\nInsertionOrderCard.defaultProps = {\r\n abnormalStatus: [],\r\n};\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport _ from 'underscore';\r\nimport { getInsertionOrderBudgetAndSpendContentConfig } from '../../utils/top-key-card';\r\nimport { AmountNode, InsertionOrderItem } from './content-item-node';\r\n\r\nexport function InsertionOrderBudgetAndSpendCard({\r\n i18n, currencyCode, rawData,\r\n}) {\r\n const items = getInsertionOrderBudgetAndSpendContentConfig();\r\n return (\r\n
    \r\n {_.compact(_.map(items, item => _.isNumber(rawData[item.fieldName]) && (\r\n \r\n )}\r\n />)))}\r\n
    \r\n );\r\n}\r\n\r\nInsertionOrderBudgetAndSpendCard.propTypes = {\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n currencyCode: PropTypes.string.isRequired,\r\n rawData: PropTypes.shape({}).isRequired,\r\n};\r\n\r\n","import React from 'react';\r\nimport classnames from 'classnames';\r\nimport _ from 'underscore';\r\nimport { Constants } from '@bingads-webui-clientcenter/entity-utils';\r\nimport IWindow from '@bingads-webui-clientcenter/window-interface';\r\nimport { Link as LinkButton } from '@bingads-webui-react/fabric-control';\r\nimport { DefaultButton } from '@fluentui/react';\r\nimport { Severity, TopKeyCardType, IOAuthzAction, BudgetActionType } from '../constants';\r\nimport { AmountNode, ThresholdProgressBar } from '../controls/top-key-card-controls/content-item-node';\r\nimport { InsertionOrderCard } from '../controls/top-key-card-controls/insertion-order-card';\r\nimport { InsertionOrderBudgetAndSpendCard } from '../controls/top-key-card-controls/insertion-order-budget-and-spend-card';\r\nimport { formatCurrency } from './format-utils';\r\nimport { BudgetActions } from '../controls/top-key-card-controls/budget-actions';\r\n\r\nconst {\r\n BudgetEventType, IOFilter, IOEntryPointAlias, SecurityAction,\r\n} = Constants;\r\n\r\nexport function getAbnormalMessage({\r\n abnormalStatus, eventType, messageText, severity,\r\n}) {\r\n return _.find(abnormalStatus, item => item === eventType) ? {\r\n text: messageText,\r\n severity,\r\n } : null;\r\n}\r\n\r\nfunction getThresholdProgressBar({ rawData }) {\r\n const { CurrentBalance, BalanceThreshold } = rawData;\r\n const percentage = CurrentBalance / BalanceThreshold;\r\n return BalanceThreshold > 0 && percentage >= 0 ? () : null;\r\n}\r\n\r\nexport function getInsertionOrderCardFooter({\r\n i18n, abnormalStatus, navigateBySiteMapId, rawData, authzMap, handleClick,\r\n}) {\r\n if (!_.get(authzMap, IOAuthzAction.isIOAddAuthorized)) {\r\n return null;\r\n }\r\n\r\n const ioActionButton = ({ iofilter, text, eventType = 'NoEventType' }) => (\r\n handleClick({\r\n api: `ActionClick-IO-BudgetEventType${eventType}`,\r\n action: () => navigateBySiteMapId('insertionOrder', { extraSearch: { entrypoint: IOEntryPointAlias.BudgetCenter, iofilter } }),\r\n })}\r\n >\r\n {text}\r\n \r\n );\r\n\r\n if (abnormalStatus && abnormalStatus.length > 0) {\r\n for (let i = 0; i < abnormalStatus.length; i += 1) {\r\n const eventType = abnormalStatus[i];\r\n switch (eventType) {\r\n case BudgetEventType.InsertionOrderBalanceDepleted:\r\n case BudgetEventType.InsertionOrderExpired:\r\n return ioActionButton({ iofilter: IOFilter.AccountPaused, text: i18n.getString(_TL_('Create new IO')), eventType });\r\n case BudgetEventType.InsertionOrderExpiringUrgent:\r\n return ioActionButton({ iofilter: IOFilter.Expiring, text: i18n.getString(_TL_('Edit insertion order')), eventType });\r\n case BudgetEventType.InsertionOrderExhaustingUrgent:\r\n return ioActionButton({ iofilter: IOFilter.Exhausting, text: i18n.getString(_TL_('Edit insertion order')), eventType });\r\n default:\r\n }\r\n }\r\n }\r\n\r\n return rawData.ExpireDate ?\r\n ioActionButton({ text: i18n.getString(_TL_('Edit insertion order')) }) :\r\n ioActionButton({ text: i18n.getString(_TL_('Create new IO')) });\r\n}\r\n\r\nexport function getTopKeyCardConfig({\r\n i18n,\r\n authzMap,\r\n currencyCode,\r\n activity,\r\n topKeyCardType,\r\n rawData,\r\n abnormalStatus,\r\n isExperimentCampaign,\r\n openBudgetUpdatePanel,\r\n navigateBySiteMapId,\r\n}) {\r\n const handleClick = ({ api, action }) => {\r\n activity && activity.trace(`topKeyCardType: ${topKeyCardType}`, api);\r\n action();\r\n };\r\n\r\n switch (topKeyCardType) {\r\n case TopKeyCardType.SumSpendToDate:\r\n return _.isNumber(rawData.MTDSpend) ? {\r\n cardType: topKeyCardType,\r\n headerConfig: {\r\n titleKey: _TL_('Spend to date (sum)'),\r\n helpTopic: 'pop_BA_BudgetCenter_SpendtoDate',\r\n itemNameKey: _TL_('sum of spend to date'),\r\n },\r\n content: (),\r\n } : null;\r\n case TopKeyCardType.SumMonthlyBudget:\r\n return _.isNumber(rawData.MonthlyBudget) ? {\r\n cardType: topKeyCardType,\r\n headerConfig: {\r\n titleKey: _TL_('Monthly budget (sum)'),\r\n helpTopic: 'pop_BA_BudgetCenter_MonthlyBudget',\r\n itemNameKey: _TL_('sum of monthly budget'),\r\n },\r\n content: (),\r\n } : null;\r\n case TopKeyCardType.SumDailyBudget:\r\n return _.isNumber(rawData.DailyBudget) ? {\r\n cardType: topKeyCardType,\r\n headerConfig: {\r\n titleKey: _TL_('Daily budget (sum)'),\r\n helpTopic: 'pop_BA_CampaignGrids_SharedBudget',\r\n itemNameKey: _TL_('sum of daily budget'),\r\n },\r\n content: (),\r\n } : null;\r\n case TopKeyCardType.SumTotalBudget:\r\n return _.isNumber(rawData.LifetimeBudget) ? {\r\n cardType: topKeyCardType,\r\n headerConfig: {\r\n titleKey: _TL_('Lifetime budget (sum)'),\r\n itemNameKey: _TL_('sum of lifetime budget'),\r\n },\r\n content: (),\r\n } : null;\r\n case TopKeyCardType.SumSpendOfTheMonth:\r\n return _.isNumber(rawData.MTDSpend) ? {\r\n cardType: topKeyCardType,\r\n headerConfig: {\r\n titleKey: _TL_('Spend of the month (sum)'),\r\n helpTopic: 'pop_BA_BudgetCenter_SpendMonth',\r\n itemNameKey: _TL_('sum of spend of the month'),\r\n },\r\n content: (),\r\n } : null;\r\n case TopKeyCardType.PrepayBalance:\r\n {\r\n if (!_.isNumber(rawData.RemainingBudget)) {\r\n return null;\r\n }\r\n const action = _.get(authzMap, SecurityAction.ForceBilling) && (\r\n handleClick({\r\n api: 'ActionClick-AddFunds',\r\n action: () => navigateBySiteMapId('addFunds', { extraSearch: { returnurl: IWindow.location.href } }),\r\n })}\r\n >\r\n {i18n.getString(_TL_('Add funds'))}\r\n \r\n );\r\n const message = getAbnormalMessage({\r\n abnormalStatus,\r\n eventType: BudgetEventType.PrepayAccountBalanceZero,\r\n messageText: i18n.getString(_TL_('Out of balance')),\r\n severity: Severity.Error,\r\n }) || getAbnormalMessage({\r\n abnormalStatus,\r\n eventType: BudgetEventType.PrepayAccountBalanceLow,\r\n messageText: i18n.getString(_TL_('Under 15% of last charging amount')),\r\n severity: Severity.Warning,\r\n });\r\n return {\r\n cardType: topKeyCardType,\r\n headerConfig: {\r\n titleKey: _TL_('Prepay balance'),\r\n helpTopic: 'pop_BA_Accounts_Billing_Tile_PrepayBal',\r\n itemNameKey: _TL_('prepay balance'),\r\n },\r\n hasAction: !!action,\r\n content: (),\r\n };\r\n }\r\n case TopKeyCardType.CurrentBalance:\r\n {\r\n if (!_.isNumber(rawData.CurrentBalance)) {\r\n return null;\r\n }\r\n const hint = (\r\n \r\n {formatCurrency({ i18n, currencyCode, value: rawData.BalanceThreshold })} {i18n.getString(_TL_('threshold'))}\r\n \r\n );\r\n const message = getAbnormalMessage({\r\n abnormalStatus,\r\n eventType: BudgetEventType.AccountHold,\r\n messageText: i18n.getString(_TL_('Account on hold')),\r\n severity: Severity.Error,\r\n });\r\n return {\r\n cardType: topKeyCardType,\r\n headerConfig: {\r\n titleKey: _TL_('Current balance'),\r\n helpTopic: 'pop_BA_Accounts_Billing_Tile_CurrBalThreshold',\r\n itemNameKey: _TL_('current balance'),\r\n },\r\n content: (\r\n <>\r\n \r\n {getThresholdProgressBar({ rawData })}\r\n \r\n ),\r\n };\r\n }\r\n case TopKeyCardType.SpendToDate:\r\n return _.isNumber(rawData.MTDSpend) ? {\r\n cardType: topKeyCardType,\r\n headerConfig: {\r\n titleKey: _TL_('Spend to date'),\r\n helpTopic: 'pop_BA_BudgetCenter_SpendtoDate',\r\n itemNameKey: _TL_('spend to date'),\r\n },\r\n content: (),\r\n } : null;\r\n case TopKeyCardType.SpendOfTheMonth:\r\n return _.isNumber(rawData.MTDSpend) ? {\r\n cardType: topKeyCardType,\r\n headerConfig: {\r\n titleKey: _TL_('Spend of the month'),\r\n helpTopic: 'pop_BA_BudgetCenter_SpendMonth',\r\n itemNameKey: _TL_('spend of the month'),\r\n },\r\n content: (),\r\n } : null;\r\n case TopKeyCardType.MonthlyBudget:\r\n return _.isNumber(rawData.MonthlyBudget) ? {\r\n cardType: topKeyCardType,\r\n headerConfig: {\r\n titleKey: rawData.budgetId > 0 ? _TL_('Monthly budget (shared)') : _TL_('Monthly budget'),\r\n helpTopic: 'pop_BA_BudgetCenter_MonthlyBudget',\r\n itemNameKey: rawData.budgetId > 0 ? _TL_('shared monthly budget') : _TL_('monthly budget'),\r\n },\r\n content: (),\r\n } : null;\r\n case TopKeyCardType.DailyBudget:\r\n {\r\n if (!_.isNumber(rawData.DailyBudget)) {\r\n return null;\r\n }\r\n const action = (\r\n \r\n );\r\n const message = getAbnormalMessage({\r\n abnormalStatus,\r\n eventType: BudgetEventType.CampaignOutOfBudget,\r\n messageText: i18n.getString(_TL_('Out of budget')),\r\n severity: Severity.Error,\r\n }) || getAbnormalMessage({\r\n abnormalStatus,\r\n eventType: BudgetEventType.CampaignLimitedByBudget,\r\n messageText: i18n.getString(_TL_('Limited by budget')),\r\n severity: Severity.Warning,\r\n });\r\n return {\r\n cardType: topKeyCardType,\r\n headerConfig: {\r\n titleKey: rawData.budgetId > 0 ? _TL_('Daily budget (shared)') : _TL_('Daily budget'),\r\n helpTopic: 'pop_BA_CampaignGrids_SharedBudget',\r\n itemNameKey: rawData.budgetId > 0 ? _TL_('shared daily budget') : _TL_('daily budget'),\r\n },\r\n hasAction: !!action,\r\n content: (),\r\n };\r\n }\r\n case TopKeyCardType.LifetimeBudget:\r\n {\r\n if (!_.isNumber(rawData.LifetimeBudget)) {\r\n return null;\r\n }\r\n const action = (\r\n \r\n );\r\n const message = getAbnormalMessage({\r\n abnormalStatus,\r\n eventType: BudgetEventType.CampaignOutOfBudget,\r\n messageText: i18n.getString(_TL_('Out of budget')),\r\n severity: Severity.Error,\r\n }) || getAbnormalMessage({\r\n abnormalStatus,\r\n eventType: BudgetEventType.CampaignLimitedByBudget,\r\n messageText: i18n.getString(_TL_('Limited by budget')),\r\n severity: Severity.Warning,\r\n });\r\n return {\r\n cardType: topKeyCardType,\r\n headerConfig: {\r\n titleKey: rawData.budgetId > 0 ? _TL_('Campaign Total budget (shared)') : _TL_('Campaign total budget'),\r\n // helpTopic: '',\r\n itemNameKey: rawData.budgetId > 0 ? _TL_('shared campaign total budget') : _TL_('campaign total budget'),\r\n },\r\n hasAction: !!action,\r\n content: (),\r\n };\r\n }\r\n case TopKeyCardType.BudgetAndSpend:\r\n return {\r\n cardType: topKeyCardType,\r\n headerConfig: {\r\n titleKey: _TL_('Budget & spend'),\r\n helpTopic: 'pop_BA_BudgetCenter_BudgetSpend',\r\n itemNameKey: _TL_('budget & spend'),\r\n },\r\n content: (\r\n \r\n ),\r\n };\r\n case TopKeyCardType.InsertionOrder:\r\n {\r\n const footer = getInsertionOrderCardFooter({\r\n i18n, abnormalStatus, navigateBySiteMapId, rawData, authzMap, handleClick,\r\n });\r\n return {\r\n cardType: topKeyCardType,\r\n headerConfig: {\r\n titleKey: _TL_('Insertion order (IO)'),\r\n helpTopic: 'pop_BA_Accounts_BTO_InsertionOrder',\r\n itemNameKey: _TL_('insertion order'),\r\n },\r\n hasAction: !!footer,\r\n content: (\r\n \r\n ),\r\n footer,\r\n };\r\n }\r\n default:\r\n return null;\r\n }\r\n}\r\n\r\nexport function getInsertionOrderBudgetAndSpendContentConfig() {\r\n return [{\r\n key: _TL_('Spend to date (sum)'),\r\n fieldName: 'MTDSpend',\r\n }, {\r\n key: _TL_('Monthly budget (sum)'),\r\n fieldName: 'MonthlyBudget',\r\n }, {\r\n key: _TL_('Daily budget (sum)'),\r\n fieldName: 'DailyBudget',\r\n }, {\r\n key: _TL_('Lifetime budget (sum)'),\r\n fieldName: 'LifetimeBudget',\r\n }];\r\n}\r\n","import React from 'react';\r\nimport classnames from 'classnames';\r\nimport PropTypes from 'prop-types';\r\nimport { Link as LinkButton } from '@bingads-webui-react/fabric-control';\r\nimport { Glyphicon } from '@bingads-webui-react/primitive';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { getTopKeyCardStyles } from '../../styles/top-key-card';\r\nimport { BudgetActionType } from '../../constants';\r\n\r\nexport function BudgetActions({\r\n i18n, isAuth, budgetId, handleClick, openBudgetUpdatePanel, navigateBySiteMapId, type,\r\n}) {\r\n const classes = useDefaultStyles(getTopKeyCardStyles);\r\n const actionClickApi = type === BudgetActionType.LifetimeBudget ?'ActionClick-EditLifetimeBudget' : 'ActionClick-EditDailyBudget';\r\n\r\n return (\r\n <>\r\n {isAuth &&\r\n handleClick({\r\n api: actionClickApi,\r\n action: openBudgetUpdatePanel,\r\n })}\r\n >\r\n {i18n.getString(_TL_('Edit'))}\r\n }\r\n {budgetId > 0 &&\r\n handleClick({\r\n api: 'ActionClick-SharedBudgetPage',\r\n action: () => navigateBySiteMapId('shared-budgets-edit', { extraSearch: { budgetId } }),\r\n })}\r\n >\r\n {i18n.getString(_TL_('Shared budgets'))}\r\n \r\n }\r\n \r\n );\r\n}\r\n\r\nBudgetActions.propTypes = {\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n isAuth: PropTypes.bool.isRequired,\r\n budgetId: PropTypes.number,\r\n handleClick: PropTypes.func.isRequired,\r\n openBudgetUpdatePanel: PropTypes.func.isRequired,\r\n navigateBySiteMapId: PropTypes.func.isRequired,\r\n type: PropTypes.oneOf([BudgetActionType.DailyBudget, BudgetActionType.LifetimeBudget]).isRequired,\r\n};\r\n\r\nBudgetActions.defaultProps = {\r\n budgetId: null,\r\n};\r\n","import _ from 'underscore';\r\nimport { Constants } from '@bingads-webui-clientcenter/entity-utils';\r\nimport { TopKeyCardType } from '../constants';\r\nimport { getTopKeyCardConfig } from './top-key-card';\r\n\r\nconst { PaymentOption } = Constants;\r\n\r\nexport function getTopKeyCardTypes({\r\n paymentOption, isAccountScope, isCurrentMonth, isLifetimeBudget,\r\n}) {\r\n if (!isAccountScope) {\r\n if (isLifetimeBudget) {\r\n return isCurrentMonth\r\n ? [TopKeyCardType.SpendToDate, TopKeyCardType.LifetimeBudget]\r\n : [TopKeyCardType.SpendOfTheMonth, TopKeyCardType.LifetimeBudget];\r\n }\r\n return isCurrentMonth\r\n ? [TopKeyCardType.SpendToDate, TopKeyCardType.MonthlyBudget, TopKeyCardType.DailyBudget]\r\n : [TopKeyCardType.SpendOfTheMonth, TopKeyCardType.MonthlyBudget];\r\n }\r\n if (!isCurrentMonth) {\r\n switch (paymentOption) {\r\n case PaymentOption.Prepay:\r\n case PaymentOption.Threshold:\r\n case PaymentOption.Invoice:\r\n return [TopKeyCardType.SumSpendOfTheMonth, TopKeyCardType.SumMonthlyBudget, TopKeyCardType.SumTotalBudget];\r\n default:\r\n return null;\r\n }\r\n }\r\n switch (paymentOption) {\r\n case PaymentOption.Prepay:\r\n return [TopKeyCardType.SumSpendToDate, TopKeyCardType.SumMonthlyBudget, TopKeyCardType.SumDailyBudget, TopKeyCardType.SumTotalBudget, TopKeyCardType.PrepayBalance];\r\n case PaymentOption.Threshold:\r\n return [TopKeyCardType.SumSpendToDate, TopKeyCardType.SumMonthlyBudget, TopKeyCardType.SumDailyBudget, TopKeyCardType.SumTotalBudget, TopKeyCardType.CurrentBalance];\r\n case PaymentOption.Invoice:\r\n return [TopKeyCardType.BudgetAndSpend, TopKeyCardType.InsertionOrder];\r\n default:\r\n return null;\r\n }\r\n}\r\n\r\nexport function getTopKeyCardGroup({\r\n i18n,\r\n authzMap,\r\n currencyCode,\r\n activity,\r\n paymentOption,\r\n isAccountScope,\r\n isCurrentMonth,\r\n rawData,\r\n abnormalStatus,\r\n isExperimentCampaign,\r\n openBudgetUpdatePanel,\r\n navigateBySiteMapId,\r\n}) {\r\n const cardTypes = getTopKeyCardTypes({\r\n paymentOption, isAccountScope, isCurrentMonth, isLifetimeBudget: !!rawData?.LifetimeBudget,\r\n });\r\n const cardNumber = cardTypes ? cardTypes.length : 0;\r\n if (!cardTypes) {\r\n return null;\r\n }\r\n return {\r\n cards: _.compact(_.map(cardTypes, topKeyCardType => getTopKeyCardConfig({\r\n i18n,\r\n authzMap,\r\n currencyCode,\r\n activity,\r\n topKeyCardType,\r\n rawData,\r\n abnormalStatus,\r\n isExperimentCampaign,\r\n openBudgetUpdatePanel,\r\n navigateBySiteMapId,\r\n }))),\r\n cardNumber,\r\n };\r\n}\r\n","import { Constants } from '@bingads-webui-clientcenter/entity-utils';\r\n\r\nimport { Severity } from '../constants';\r\n\r\nconst { DeliveryStatus } = Constants;\r\n\r\nexport const getNodeSeverity = ({ deliveryStatus }) => {\r\n switch (DeliveryStatus[deliveryStatus]) {\r\n case DeliveryStatus.CampaignBudgetPaused:\r\n return Severity.Error;\r\n case DeliveryStatus.BudgetSuggestions:\r\n return Severity.Warning;\r\n default:\r\n return undefined;\r\n }\r\n};\r\n\r\nexport const getNodeIconTooltipText = ({ deliveryStatus }, i18n) => {\r\n switch (DeliveryStatus[deliveryStatus]) {\r\n case DeliveryStatus.CampaignBudgetPaused:\r\n return i18n.getString(_TL_('Out of budget'));\r\n case DeliveryStatus.BudgetSuggestions:\r\n return i18n.getString(_TL_('Limited by budget'));\r\n default:\r\n return undefined;\r\n }\r\n};\r\n","import React, { useState, useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classnames from 'classnames';\r\nimport _ from 'underscore';\r\n\r\nimport { Panel, PrimaryButton, DefaultButton, MessageBar, MessageBarType, DefaultPalette } from '@bingads-webui-react/fabric-control';\r\nimport { LineByLineFormGroup } from '@bingads-webui-cc-react/layout';\r\nimport { RadioGroup, Input } from '@bingads-webui-react/primitive-validation';\r\nimport { getBudgetRange } from '@bingads-webui-campaign-legacy/common-grid-config/budget/get-budget-range';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { buildLegacyI18n } from '@bingads-webui/build-legacy-i18n';\r\nimport { mergeI18n } from '@bingads-webui-campaign-react/i18n-merger';\r\nimport { ValidationStringMap } from '@bingads-webui/validation-string-map';\r\nimport { Constants } from '@bingads-webui-clientcenter/entity-utils';\r\n\r\nimport { UiBlocker } from './ui-blocker';\r\nimport { CustomizeBudgetKey } from '../constants';\r\nimport { getBudgetUpdatePanelStyles } from '../styles';\r\nimport { formatCurrency, formatInteger } from '../utils';\r\n\r\nconst { BudgetRecommendationItemType } = Constants;\r\n\r\nexport const BudgetUpdatePanel = ({\r\n i18n: i18nFromProps,\r\n currencyCode,\r\n dailyBudget,\r\n lifetimeBudget,\r\n budgetId,\r\n budgetRecommendations,\r\n onSave,\r\n onCancel,\r\n isSaving,\r\n}) => {\r\n const i18n = useMemo(() => mergeI18n(buildLegacyI18n(i18nFromProps, [ValidationStringMap]), i18nFromProps), [i18nFromProps]);\r\n const classes = useDefaultStyles(getBudgetUpdatePanelStyles);\r\n const { Daily: { Min: dailyMin, Max: dailyMax }, Lifetime: { Min: lifetimeMin, Max: lifetimeMax } } = useMemo(() => getBudgetRange(currencyCode), [currencyCode]);\r\n const schema = useMemo(() => ({\r\n properties: {\r\n CustomizeBudget: {\r\n type: 'number',\r\n required: true,\r\n minimum: dailyBudget !== null ? dailyMin : lifetimeMin,\r\n maximum: dailyBudget !== null ? dailyMax : lifetimeMax,\r\n },\r\n },\r\n }), [dailyMin, dailyMax, lifetimeMin, lifetimeMax, dailyBudget]);\r\n const radioItems = useMemo(() => [...budgetRecommendations, { Comment: CustomizeBudgetKey }], [budgetRecommendations]);\r\n const customizeItem = useMemo(() => _.findWhere(radioItems, { Comment: CustomizeBudgetKey }), [radioItems]);\r\n const [isValid, setIsValid] = useState(false);\r\n const [custimizeBudget, setCustomizeBudget] = useState(dailyBudget || lifetimeBudget);\r\n const [selectedItem, setSelectedItem] = useState(() => _.findWhere(radioItems, { Comment: BudgetRecommendationItemType.Suggested }) || radioItems[0]);\r\n const isSharedBudget = budgetId > 0;\r\n\r\n const customValidator = (value, defaultValidator) => {\r\n if (selectedItem !== customizeItem) {\r\n return [];\r\n }\r\n\r\n return defaultValidator(value);\r\n };\r\n\r\n const onClickSave = () => {\r\n onSave({ budget: selectedItem.Comment === CustomizeBudgetKey ? custimizeBudget : selectedItem.EstimatedBudget });\r\n };\r\n\r\n const onRenderFooterContent = () => (\r\n
    \r\n {isSharedBudget && (\r\n
    \r\n \r\n {i18n.getString(_TL_('Notice: What you are editing is a shared budget, which is consumed across multiple campaigns.'))}\r\n \r\n
    \r\n )}\r\n
    \r\n \r\n {i18n.getString(_TL_('Apply'))}\r\n \r\n \r\n {i18n.getString(_TL_('Cancel'))}\r\n \r\n
    \r\n
    \r\n );\r\n\r\n const renderItem = ({\r\n Comment, EstimatedBudget, EstimatedClicksIncrease, EstimatedRevenueIncrease,\r\n }) => {\r\n if (Comment === CustomizeBudgetKey) {\r\n return (\r\n <>\r\n {i18n.getString(_TL_('Customize'))}\r\n
    \r\n {\r\n setCustomizeBudget(value.data[CustomizeBudgetKey]);\r\n setIsValid(value.isValid);\r\n },\r\n field: CustomizeBudgetKey,\r\n data: { [CustomizeBudgetKey]: custimizeBudget },\r\n schema,\r\n alwaysShowError: custimizeBudget !== null,\r\n }}\r\n placeholder={selectedItem === customizeItem ? i18n.getString(_TL_('Specify the amount')) : undefined}\r\n disabled={selectedItem !== customizeItem}\r\n />\r\n
    \r\n \r\n );\r\n }\r\n\r\n const budget = formatCurrency({ i18n, value: EstimatedBudget, currencyCode });\r\n const budgetRow = Comment === BudgetRecommendationItemType.Suggested\r\n ? {i18n.getString(_TL_('{{budget}} /day (recommended)'), { budget })}\r\n : {i18n.getString(_TL_('{{budget}} /day'), { budget })};\r\n let impactRow = null;\r\n if (_.isNumber(EstimatedClicksIncrease) && EstimatedClicksIncrease !== 0) {\r\n const clicks = formatInteger({ i18n, value: EstimatedClicksIncrease });\r\n impactRow = (\r\n
    \r\n {i18n.getString(_TL_('Weekly estimates: {{clicks}} Clicks'), { clicks })}\r\n
    \r\n );\r\n } else if (_.isNumber(EstimatedRevenueIncrease) && EstimatedRevenueIncrease !== 0) {\r\n const revenue = formatCurrency({ i18n, value: EstimatedRevenueIncrease, currencyCode });\r\n impactRow = (\r\n
    \r\n {i18n.getString(_TL_('Expected revenue lift: {{revenue}}'), { revenue })}\r\n
    \r\n );\r\n }\r\n\r\n return (\r\n <>\r\n {budgetRow}\r\n {impactRow}\r\n \r\n );\r\n };\r\n\r\n const renderHeaderText = () => {\r\n if (isSharedBudget) {\r\n return i18n.getString(_TL_('Daily budget (shared)'));\r\n } else if (lifetimeBudget !== null) {\r\n return i18n.getString(_TL_('Lifetime budget'));\r\n }\r\n return i18n.getString(_TL_('Daily budget'));\r\n };\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nBudgetUpdatePanel.propTypes = {\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n formatCurrency: PropTypes.func.isRequired,\r\n }).isRequired,\r\n currencyCode: PropTypes.string.isRequired,\r\n dailyBudget: PropTypes.number,\r\n lifetimeBudget: PropTypes.number,\r\n budgetId: PropTypes.number,\r\n budgetRecommendations: PropTypes.arrayOf(PropTypes.shape({\r\n Comment: PropTypes.oneOf(_.values(BudgetRecommendationItemType)),\r\n EstimatedBudget: PropTypes.number,\r\n EstimatedClicksIncrease: PropTypes.number,\r\n EstimatedRevenueIncrease: PropTypes.number,\r\n })),\r\n onSave: PropTypes.func.isRequired,\r\n onCancel: PropTypes.func.isRequired,\r\n isSaving: PropTypes.bool,\r\n};\r\n\r\nBudgetUpdatePanel.defaultProps = {\r\n dailyBudget: null,\r\n lifetimeBudget: null,\r\n budgetId: null,\r\n budgetRecommendations: [],\r\n isSaving: false,\r\n};\r\n","import React, { useCallback, useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classnames from 'classnames';\r\nimport _ from 'underscore';\r\n\r\nimport { Glyphicon } from '@bingads-webui-react/primitive';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { Constants } from '@bingads-webui-clientcenter/entity-utils';\r\n\r\nimport { getMonitoringCardStyles } from '../styles';\r\nimport { EstimateType, IconName, Severity } from '../constants';\r\nimport { formatCurrency, formatInteger } from '../utils';\r\n\r\nconst { RecommendationType, BudgetEventType } = Constants;\r\n\r\nexport const MonitoringCard = ({\r\n i18n,\r\n currencyCode,\r\n eventType,\r\n severity,\r\n message,\r\n hint,\r\n deltaEstimates,\r\n actions,\r\n}) => {\r\n const classes = useDefaultStyles(getMonitoringCardStyles);\r\n\r\n const formatEstimate = useCallback(({ type, amount }) => {\r\n switch (type) {\r\n case EstimateType.Conversions: {\r\n const conversions = formatInteger({ i18n, value: amount });\r\n return i18n.getString(_TL_('{{conversions}} Conversions'), { conversions });\r\n }\r\n case EstimateType.Clicks: {\r\n const clicks = formatInteger({ i18n, value: amount });\r\n return i18n.getString(_TL_('{{clicks}} Clicks'), { clicks });\r\n }\r\n case EstimateType.Impressions: {\r\n const impressions = formatInteger({ i18n, value: amount });\r\n return i18n.getString(_TL_('{{impressions}} Impressions'), { impressions });\r\n }\r\n case EstimateType.Spend: {\r\n const spend = formatCurrency({\r\n i18n, value: amount, currencyCode, options: { withSign: 'always' },\r\n });\r\n return i18n.getString(_TL_('{{spend}} Spend'), { spend });\r\n }\r\n default:\r\n return null;\r\n }\r\n }, [currencyCode, i18n]);\r\n\r\n const messageNode = useMemo(() => (\r\n
    \r\n {message}\r\n
    \r\n ), [classes.Message, message]);\r\n\r\n const hintNode = useMemo(() => (\r\n hint && (\r\n
    \r\n {hint}\r\n
    \r\n )\r\n ), [classes.Hint, hint]);\r\n\r\n const estimatesNode = useMemo(() => {\r\n if (_.isEmpty(deltaEstimates)) {\r\n return null;\r\n }\r\n\r\n return (\r\n
    \r\n \r\n {i18n.getString(_TL_('Weekly estimates:'))}\r\n \r\n {_.map(deltaEstimates, ({ type, amount }) => (\r\n \r\n {formatEstimate({ type, amount })}\r\n \r\n ))}\r\n
    \r\n );\r\n }, [classes, deltaEstimates, formatEstimate, i18n]);\r\n\r\n const actionsNode = useMemo(() => (\r\n actions && (\r\n
    \r\n {actions}\r\n
    \r\n )\r\n ), [actions, classes.Actions]);\r\n\r\n return (\r\n
    \r\n \r\n
    \r\n {messageNode}\r\n {hintNode}\r\n {estimatesNode}\r\n
    \r\n {actionsNode}\r\n
    \r\n );\r\n};\r\n\r\nMonitoringCard.propTypes = {\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n currencyCode: PropTypes.string.isRequired,\r\n eventType: PropTypes.oneOf([..._.values(BudgetEventType), ..._.values(RecommendationType)]).isRequired,\r\n severity: PropTypes.oneOf(_.values(Severity)).isRequired,\r\n message: PropTypes.string.isRequired,\r\n hint: PropTypes.string,\r\n deltaEstimates: PropTypes.arrayOf(PropTypes.shape({\r\n type: PropTypes.oneOf(_.values(EstimateType)).isRequired,\r\n amount: PropTypes.number.isRequired,\r\n })),\r\n actions: PropTypes.node,\r\n};\r\n\r\nMonitoringCard.defaultProps = {\r\n hint: null,\r\n deltaEstimates: [],\r\n actions: null,\r\n};\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport _ from 'underscore';\r\n\r\nimport { PrimaryButton } from '@bingads-webui-react/fabric-control';\r\n\r\nimport { ActionType, ActionTextKey } from '../constants';\r\n\r\nexport const MonitoringCardButton = ({\r\n actionType, i18n, onClick, ButtonComponent,\r\n}) => (\r\n \r\n {i18n.getString(ActionTextKey[actionType])}\r\n \r\n);\r\n\r\nMonitoringCardButton.propTypes = {\r\n actionType: PropTypes.oneOf(_.values(ActionType)).isRequired,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n onClick: PropTypes.func.isRequired,\r\n ButtonComponent: PropTypes.func,\r\n};\r\n\r\nMonitoringCardButton.defaultProps = {\r\n ButtonComponent: PrimaryButton,\r\n};\r\n","\r\nimport React, { useCallback } from 'react';\r\nimport classnames from 'classnames';\r\nimport PropTypes from 'prop-types';\r\nimport _ from 'underscore';\r\n\r\nimport { Constants } from '@bingads-webui-clientcenter/entity-utils';\r\nimport { formatTooltipBudgetChangeType, formatTooltipEventType } from '../utils/tooltip-card';\r\n\r\nconst { BudgetEventType, BudgetChangeType } = Constants;\r\n\r\nexport function TooltipSectionContentItem({\r\n title, value,\r\n}) {\r\n return (\r\n
    \r\n {title}\r\n {value}\r\n
    \r\n );\r\n}\r\n\r\nexport function TooltipSectionEventItem({\r\n i18n,\r\n budgetEventType,\r\n budgetChangeType,\r\n eventHistory,\r\n currencyCode,\r\n}) {\r\n const tooltipEvent = budgetEventType ? formatTooltipEventType({\r\n i18n, eventType: budgetEventType,\r\n }) :\r\n formatTooltipBudgetChangeType({\r\n i18n, eventType: budgetChangeType, eventHistory, currencyCode,\r\n });\r\n const hintNode = useCallback(({ type, clicks }) => (\r\n \r\n {i18n.getString(_TL_('{{clicks}} daily clicks'), { clicks })}\r\n {i18n.getString(_TL_('after change'), { comment: 'The full string is: {{clickNumber}} daily clicks after change. {{{clickNumber}} daily clicks} is another TL string.' })}\r\n \r\n ), [i18n]);\r\n\r\n return tooltipEvent && (\r\n
    \r\n
    {tooltipEvent.message}
    \r\n {tooltipEvent.hint && hintNode({ type: tooltipEvent.hint.type, clicks: tooltipEvent.hint.clicks })}\r\n
    );\r\n}\r\n\r\nexport function TooltipCardSection({\r\n name,\r\n header,\r\n children,\r\n}) {\r\n return (\r\n
    \r\n {header && (\r\n
    \r\n {header}\r\n
    )}\r\n
    \r\n {children}\r\n
    \r\n
    \r\n );\r\n}\r\n\r\nTooltipSectionContentItem.propTypes = {\r\n title: PropTypes.string.isRequired,\r\n value: PropTypes.string.isRequired,\r\n};\r\n\r\nTooltipSectionEventItem.propTypes = {\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n currencyCode: PropTypes.string.isRequired,\r\n budgetEventType: PropTypes.oneOf(_.values(BudgetEventType)),\r\n budgetChangeType: PropTypes.oneOf(_.values(BudgetChangeType)),\r\n eventHistory: PropTypes.shape({\r\n FieldName: PropTypes.string,\r\n NewValue: PropTypes.oneOfType([\r\n PropTypes.number,\r\n PropTypes.string,\r\n ]),\r\n OldValue: PropTypes.oneOfType([\r\n PropTypes.number,\r\n PropTypes.string,\r\n ]),\r\n DailyClickChange: PropTypes.number,\r\n }),\r\n};\r\nTooltipSectionEventItem.defaultProps = {\r\n budgetEventType: null,\r\n budgetChangeType: null,\r\n eventHistory: null,\r\n};\r\n\r\nTooltipCardSection.propTypes = {\r\n name: PropTypes.string.isRequired,\r\n header: PropTypes.node,\r\n children: PropTypes.node,\r\n};\r\n\r\nTooltipCardSection.defaultProps = {\r\n header: null,\r\n children: null,\r\n};\r\n","import React, { useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classnames from 'classnames';\r\nimport _ from 'underscore';\r\n\r\nimport { Constants } from '@bingads-webui-clientcenter/entity-utils';\r\nimport { TooltipChartType } from '../constants';\r\nimport { TooltipCardSection, TooltipSectionContentItem, TooltipSectionEventItem } from './tooltip-card-section';\r\nimport { formatCivilDate, formatCurrency } from '../utils/format-utils';\r\nimport { getKeyDataItemsConfig } from '../utils';\r\n\r\nconst { BudgetEventType, BudgetChangeType } = Constants;\r\n\r\nexport const TooltipCardUnstyled = ({\r\n i18n,\r\n chartType,\r\n currencyCode,\r\n civilDate,\r\n tooltipKeyData,\r\n topSpendingCampaigns,\r\n hourlyTrendChart,\r\n monitoringConfigs,\r\n}) => {\r\n const keyDataSection = useMemo(() => {\r\n const keyDataItemsConfig = getKeyDataItemsConfig({ i18n, chartType });\r\n return keyDataItemsConfig && (\r\n \r\n
    \r\n {_.compact(_.map(keyDataItemsConfig, keyDataItem =>\r\n _.isNumber(tooltipKeyData[keyDataItem.valueFieldName]) && (\r\n \r\n )))}\r\n
    \r\n \r\n );\r\n }, [chartType, civilDate, currencyCode, i18n, tooltipKeyData]);\r\n\r\n const topSpendingCampaignsSection = useMemo(\r\n () =>\r\n !_.isEmpty(topSpendingCampaigns) && (\r\n \r\n {_.map(topSpendingCampaigns, (topSpendingCampaign, index) => (\r\n \r\n ))}\r\n \r\n )\r\n , [chartType, currencyCode, i18n, topSpendingCampaigns]\r\n );\r\n\r\n const hourlyTrendSection = useMemo(() =>\r\n hourlyTrendChart && (\r\n \r\n {hourlyTrendChart}\r\n \r\n ), [hourlyTrendChart, i18n]);\r\n\r\n const monitoringEventSection = useMemo(() => (\r\n monitoringConfigs && (\r\n \r\n {_.map(monitoringConfigs.BudgetChange, budgetChange => (\r\n \r\n ))}\r\n {_.map(monitoringConfigs.AbnormalStatus, abnormal => (\r\n \r\n ))}\r\n \r\n )\r\n ), [chartType, currencyCode, i18n, monitoringConfigs]);\r\n\r\n return (\r\n
    \r\n {keyDataSection}\r\n {topSpendingCampaignsSection}\r\n {hourlyTrendSection}\r\n {monitoringEventSection}\r\n
    \r\n );\r\n};\r\n\r\nTooltipCardUnstyled.propTypes = {\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n formatCivilDate: PropTypes.func.isRequired,\r\n }).isRequired,\r\n currencyCode: PropTypes.string.isRequired,\r\n chartType: PropTypes.oneOf(_.values(TooltipChartType)).isRequired,\r\n civilDate: PropTypes.shape({}),\r\n tooltipKeyData: PropTypes.shape({}),\r\n topSpendingCampaigns: PropTypes.arrayOf(PropTypes.shape({\r\n CampaignName: PropTypes.string,\r\n DailySpend: PropTypes.number,\r\n })),\r\n hourlyTrendChart: PropTypes.node,\r\n monitoringConfigs: PropTypes.shape({\r\n BudgetChange: PropTypes.arrayOf(PropTypes.shape({\r\n type: PropTypes.oneOf(_.values(BudgetChangeType)),\r\n eventHistory: PropTypes.shape({\r\n FieldName: PropTypes.string,\r\n NewValue: PropTypes.oneOfType([\r\n PropTypes.number,\r\n PropTypes.string,\r\n ]),\r\n OldValue: PropTypes.oneOfType([\r\n PropTypes.number,\r\n PropTypes.string,\r\n ]),\r\n DailyClickChange: PropTypes.number,\r\n }),\r\n })),\r\n AbnormalStatus: PropTypes.arrayOf(PropTypes.oneOf(_.values(BudgetEventType))),\r\n }),\r\n};\r\n\r\nTooltipCardUnstyled.defaultProps = {\r\n civilDate: null,\r\n tooltipKeyData: null,\r\n topSpendingCampaigns: null,\r\n hourlyTrendChart: null,\r\n monitoringConfigs: null,\r\n};\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classnames from 'classnames';\r\n\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\n\r\nimport { getTotalBudgetDepletedProgressBarStyles } from '../styles';\r\n\r\nexport const TotalBudgetDepletedProgressBar = ({\r\n percentage,\r\n}) => {\r\n const classes = useDefaultStyles(getTotalBudgetDepletedProgressBarStyles, { percentage });\r\n\r\n return (\r\n
    \r\n
    \r\n
    \r\n
    \r\n );\r\n};\r\n\r\nTotalBudgetDepletedProgressBar.propTypes = {\r\n percentage: PropTypes.number.isRequired,\r\n};\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { HelpPopupInline } from '@bingads-webui-react/help-popup';\r\n\r\nexport function HelpPopupTitle({\r\n i18n, nameKey, helpTopic, itemNameKey,\r\n}) {\r\n return (\r\n <>\r\n {i18n.getString(nameKey)}\r\n {helpTopic && itemNameKey && }\r\n \r\n );\r\n}\r\n\r\nHelpPopupTitle.propTypes = {\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n nameKey: PropTypes.string.isRequired,\r\n helpTopic: PropTypes.string,\r\n itemNameKey: PropTypes.string,\r\n};\r\n\r\nHelpPopupTitle.defaultProps = {\r\n helpTopic: null,\r\n itemNameKey: null,\r\n};\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classnames from 'classnames';\r\nimport _ from 'underscore';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { CardsBoard, CardContainer } from '@bingads-webui-react/cards-board';\r\nimport { HelpPopupTitle } from '../help-popup-title';\r\nimport { getTopKeyCardStyles } from '../../styles/top-key-card';\r\n\r\nexport const TopKeyCardGroup = ({\r\n i18n,\r\n cards,\r\n cardNumber,\r\n}) => {\r\n const classes = useDefaultStyles(getTopKeyCardStyles);\r\n const cardGroup = _.map(cards, (cardConfig) => {\r\n const {\r\n cardType, headerConfig, content, footer,\r\n } = cardConfig;\r\n\r\n const header = ();\r\n\r\n return {\r\n key: `${cardType}`,\r\n occupiedColNumber: 1,\r\n cardContainer: (\r\n \r\n ),\r\n };\r\n });\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nTopKeyCardGroup.propTypes = {\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n cards: PropTypes.arrayOf(PropTypes.shape({})).isRequired,\r\n cardNumber: PropTypes.number.isRequired,\r\n};\r\n\r\nTopKeyCardGroup.defaultProps = {\r\n};\r\n","import React, { useMemo, useContext, useCallback, useEffect } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classnames from 'classnames';\r\nimport _ from 'underscore';\r\n\r\nimport { Constants } from '@bingads-webui-clientcenter/entity-utils';\r\nimport { MessageBar, MessageBarButton } from '@fluentui/react';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { ActivityContext } from '@bingads-webui-react/hoc-with-signal';\r\nimport { getAlertMessageStyles } from '../../styles/top-key-card';\r\nimport { ActionTextKey, IconName, MessageBarTypes, Severity } from '../../constants';\r\n\r\nconst { BudgetEventType, SecurityAction } = Constants;\r\n\r\nexport const AlertMessage = ({\r\n i18n,\r\n budgetEventTypes,\r\n onUpdateBudget,\r\n authzMap,\r\n}) => {\r\n const classes = useDefaultStyles(getAlertMessageStyles);\r\n const activity = useContext(ActivityContext);\r\n const messageConfig = useMemo(() => {\r\n if (_.find(budgetEventTypes, item => item === BudgetEventType.CampaignOutOfBudget)) {\r\n return {\r\n severity: Severity.Error,\r\n message: i18n.getString(_TL_('This campaign is out of budget. Please adjust your budget to ensure your ads keep serving.')),\r\n };\r\n }\r\n return null;\r\n }, [budgetEventTypes, i18n]);\r\n const hasAction = !!_.get(authzMap, SecurityAction.CampaignManagementFullControl);\r\n const handleClick = useCallback(() => {\r\n activity && activity.trace(`BudgetEventType: ${BudgetEventType.CampaignOutOfBudget}`, 'ActionClick-AlertMessage');\r\n onUpdateBudget();\r\n }, [activity, onUpdateBudget]);\r\n\r\n useEffect(() => {\r\n if (messageConfig) {\r\n activity && activity.trace(JSON.stringify({ BudgetEventType: BudgetEventType.CampaignOutOfBudget, hasAction }), 'Show-AlertMessage');\r\n }\r\n }, [activity, hasAction, messageConfig]);\r\n\r\n return messageConfig && (\r\n \r\n {messageConfig.message}\r\n {hasAction && {i18n.getString(ActionTextKey.AdjustBudget)}}\r\n \r\n );\r\n};\r\n\r\nAlertMessage.propTypes = {\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n budgetEventTypes: PropTypes.arrayOf(PropTypes.number),\r\n onUpdateBudget: PropTypes.func,\r\n authzMap: PropTypes.shape({}),\r\n};\r\n\r\nAlertMessage.defaultProps = {\r\n budgetEventTypes: [],\r\n onUpdateBudget: _.noop,\r\n authzMap: {},\r\n};\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classnames from 'classnames';\r\nimport _ from 'underscore';\r\n\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { Glyphicon, Button, OverlayTrigger, Tooltip } from '@bingads-webui-react/primitive';\r\nimport { withOverflowProp } from '@bingads-webui-react/with-overflow-prop';\r\n\r\nimport { getTreeNodeStyles } from '../styles';\r\nimport { IconName, Severity } from '../constants';\r\n\r\nconst OverlayTriggerContainer = ({ renderOverlayTrigger, children, ...rest }) => (\r\n renderOverlayTrigger\r\n ? {children}\r\n : <>{children}\r\n);\r\n\r\nOverlayTriggerContainer.propTypes = {\r\n renderOverlayTrigger: PropTypes.bool,\r\n children: PropTypes.node.isRequired,\r\n};\r\n\r\nOverlayTriggerContainer.defaultProps = {\r\n renderOverlayTrigger: true,\r\n};\r\n\r\nconst TreeNodeWithTooltipBase = ({\r\n // hoc props\r\n forwardedRef,\r\n isTextOverflow,\r\n // node props\r\n id,\r\n name,\r\n severity,\r\n iconTooltipText,\r\n isSelected,\r\n onClick,\r\n}) => {\r\n const classes = useDefaultStyles(getTreeNodeStyles, { isSelected });\r\n const hasIconTooltipText = !!iconTooltipText;\r\n const overflowOverlayProps = {\r\n placement: 'top',\r\n overlay: (\r\n \r\n {name}\r\n \r\n ),\r\n };\r\n const iconOverlayProps = {\r\n placement: 'top',\r\n overlay: (\r\n \r\n {iconTooltipText}\r\n \r\n ),\r\n };\r\n\r\n return (\r\n \r\n \r\n
    \r\n \r\n
    \r\n {\r\n IconName[severity] &&\r\n \r\n }\r\n
    \r\n \r\n \r\n
    \r\n {name}\r\n
    \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nTreeNodeWithTooltipBase.propTypes = {\r\n forwardedRef: PropTypes.shape({ current: PropTypes.instanceOf(Element) }),\r\n isTextOverflow: PropTypes.bool,\r\n id: PropTypes.oneOfType([PropTypes.string, PropTypes.number]).isRequired,\r\n name: PropTypes.string.isRequired,\r\n severity: PropTypes.oneOf(_.values(Severity)),\r\n iconTooltipText: PropTypes.string,\r\n isSelected: PropTypes.bool,\r\n onClick: PropTypes.func.isRequired,\r\n};\r\n\r\nTreeNodeWithTooltipBase.defaultProps = {\r\n forwardedRef: null,\r\n isTextOverflow: false,\r\n severity: undefined,\r\n iconTooltipText: undefined,\r\n isSelected: false,\r\n};\r\n\r\nexport const TreeNodeWithTooltip = withOverflowProp(TreeNodeWithTooltipBase);\r\n","import classnames from 'classnames';\r\nimport PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport { Glyphicon } from '@bingads-webui-react/primitive';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { MenuItem } from '@fluentui/react-components';\r\nimport { IconName } from '../constants';\r\nimport { getCampaignMenuItemStyles } from '../styles';\r\n\r\nexport const CampaignSelectorItem = ({\r\n name, severity, onClick, className,\r\n}) => {\r\n const classes = useDefaultStyles(getCampaignMenuItemStyles);\r\n const statusIcon = (\r\n
    \r\n {severity\r\n ? (\r\n )\r\n : null}\r\n
    \r\n );\r\n\r\n return (\r\n \r\n {name}\r\n \r\n );\r\n};\r\n\r\nCampaignSelectorItem.propTypes = {\r\n name: PropTypes.string.isRequired,\r\n severity: PropTypes.number,\r\n onClick: PropTypes.func.isRequired,\r\n className: PropTypes.string,\r\n};\r\n\r\nCampaignSelectorItem.defaultProps = {\r\n severity: null,\r\n className: '',\r\n};\r\n","import React, { useMemo } from 'react';\r\nimport classnames from 'classnames';\r\nimport PropTypes from 'prop-types';\r\nimport _ from 'underscore';\r\n\r\nimport { SearchBox } from '@bingads-webui-fluent-component/scope-selector-menu';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { MenuDivider, MenuGroup, MenuList } from '@fluentui/react-components';\r\n\r\nimport { getCampaignSelectorStyles } from '../styles/campaign-selector';\r\nimport { CampaignSelectorItem } from './campaign-selector-item';\r\n\r\nexport function CampaignSelector({\r\n i18n,\r\n className,\r\n isCampaignListLoading,\r\n campaignNodesList,\r\n allCampaignsNode,\r\n onSearchChange,\r\n}) {\r\n const classes = useDefaultStyles(getCampaignSelectorStyles);\r\n\r\n const placeholderTreeNode = useMemo(\r\n () => (isCampaignListLoading\r\n ? (\r\n
    \r\n
    \r\n
    \r\n
    \r\n
    {i18n.getString(_TL_('Loading...'))}
    \r\n
    \r\n )\r\n : null)\r\n , [classes, i18n, isCampaignListLoading]\r\n );\r\n\r\n return (\r\n \r\n \r\n
    \r\n \r\n
    \r\n
    \r\n \r\n \r\n \r\n {placeholderTreeNode}\r\n
    \r\n {_.map(campaignNodesList, campaignNode => (\r\n \r\n ))}\r\n
    \r\n
    \r\n
    \r\n );\r\n}\r\n\r\nCampaignSelector.propTypes = {\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n className: PropTypes.string,\r\n isCampaignListLoading: PropTypes.bool,\r\n campaignNodesList: PropTypes.arrayOf(PropTypes.shape({\r\n id: PropTypes.string.isRequired,\r\n name: PropTypes.string.isRequired,\r\n severity: PropTypes.number,\r\n })),\r\n allCampaignsNode: PropTypes.shape({\r\n id: PropTypes.string.isRequired,\r\n name: PropTypes.string.isRequired,\r\n severity: PropTypes.number.isRequired,\r\n }).isRequired,\r\n onSearchChange: PropTypes.func.isRequired,\r\n};\r\n\r\nCampaignSelector.defaultProps = {\r\n className: '',\r\n isCampaignListLoading: false,\r\n campaignNodesList: [],\r\n};\r\n","import classnames from 'classnames';\r\nimport PropTypes from 'prop-types';\r\nimport React, { useContext, useEffect, useMemo, useState } from 'react';\r\nimport _ from 'underscore';\r\n\r\nimport { withGlobalFilter } from '@bingads-webui-campaign-react/global-filter-context';\r\nimport { withServerContext } from '@bingads-webui-campaign-react/server-context';\r\nimport { WaterfallFilterType } from '@bingads-webui-campaign/filter-storage';\r\nimport { ActivityContext } from '@bingads-webui-react/hoc-with-signal';\r\nimport { withI18nConsumer } from '@bingads-webui-react/i18n-context';\r\nimport { Glyphicon } from '@bingads-webui-react/primitive';\r\nimport { SingleMonthCalendar } from '@bingads-webui-react/single-month-calendar';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { compareCivilMonth, parseCivilDate, translateLegacyToIANATimezone } from '@bingads-webui-universal/temporal-utitlities';\r\nimport { Callout, DefaultButton, DirectionalHint } from '@fluentui/react';\r\n\r\nimport { getBudgetCenterMonthPickerStyle } from '../styles';\r\n\r\nconst isoDateFormat = 'yyyy-MM-dd';\r\n\r\nconst MonthPickerBase = ({\r\n i18n,\r\n serverContext,\r\n [WaterfallFilterType.BudgetCenterMonthFilter]: monthFilter,\r\n updateWaterfallFilter,\r\n}) => {\r\n const classes = useDefaultStyles(getBudgetCenterMonthPickerStyle);\r\n const buttonClass = 'budget-center-month-picker-button';\r\n const timeZone = _.get(serverContext, ['CurrentAccount', 'TimeZone']);\r\n const activity = useContext(ActivityContext);\r\n const civilDateToday = useMemo(() => {\r\n const isoDateString = i18n.formatDate(new Date(), {\r\n timeZone: translateLegacyToIANATimezone(timeZone),\r\n raw: isoDateFormat,\r\n });\r\n return parseCivilDate({\r\n i18n,\r\n dateString: isoDateString,\r\n dateFormat: isoDateFormat,\r\n });\r\n }, [i18n, timeZone]);\r\n const earliestDate = _.get(monthFilter, 'earliestDate');\r\n const selectedDate = _.get(monthFilter, 'selectedDate', civilDateToday);\r\n const minDate = useMemo(() => earliestDate, [earliestDate]);\r\n const maxDate = useMemo(() => civilDateToday, [civilDateToday]);\r\n\r\n useEffect(() => {\r\n updateWaterfallFilter({\r\n filterType: WaterfallFilterType.BudgetCenterMonthFilter,\r\n filter: { civilDateToday, selectedDate: civilDateToday },\r\n });\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, []);\r\n const [navigatedDate, setNavigatedDate] = useState(civilDateToday);\r\n const [isCalloutVisible, setIsCalloutVisible] = useState(false);\r\n const monthText = useMemo(() => i18n.formatCivilDate(selectedDate, { skeleton: 'MMMM' }), [i18n, selectedDate]);\r\n const isMonthPickerButtonDisabled = useMemo(() => !minDate, [minDate]);\r\n const isPrevMonthButtonDisabled = useMemo(() => !minDate || compareCivilMonth(selectedDate, minDate) === 0, [minDate, selectedDate]);\r\n const isNextMonthButtonDisabled = useMemo(() => !minDate || compareCivilMonth(selectedDate, maxDate) === 0, [minDate, maxDate, selectedDate]);\r\n const toggleIsCalloutVisible = () => setIsCalloutVisible(visible => !visible);\r\n const updateSelectedDate = (date) => {\r\n updateWaterfallFilter({\r\n filterType: WaterfallFilterType.BudgetCenterMonthFilter,\r\n filter: {\r\n ...monthFilter,\r\n selectedDate: date,\r\n },\r\n });\r\n };\r\n const logTrace = ({ date, api }) => {\r\n if (activity) {\r\n activity.trace(date.toString(), api);\r\n }\r\n };\r\n const onSelectDate = (date) => {\r\n logTrace({ date, api: 'onSelectDate' });\r\n updateSelectedDate(date);\r\n setIsCalloutVisible(false);\r\n };\r\n const onPrevMonthClick = () => {\r\n const newDate = selectedDate.plus({ months: -1 });\r\n if (compareCivilMonth(newDate, minDate) >= 0) {\r\n logTrace({ date: newDate, api: 'onPrevMonthClick' });\r\n updateSelectedDate(newDate);\r\n setNavigatedDate(newDate);\r\n }\r\n };\r\n const onNextMonthClick = () => {\r\n const newDate = selectedDate.plus({ months: 1 });\r\n if (compareCivilMonth(newDate, maxDate) <= 0) {\r\n logTrace({ date: newDate, api: 'onNextMonthClick' });\r\n updateSelectedDate(newDate);\r\n setNavigatedDate(newDate);\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n if (selectedDate.year !== navigatedDate.year) {\r\n setNavigatedDate(selectedDate);\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [selectedDate]);\r\n\r\n return (\r\n
    \r\n
    \r\n
    \r\n \r\n \r\n {`${monthText} ${selectedDate.year}`}\r\n \r\n \r\n
    \r\n }\r\n className={classnames(buttonClass, classes.monthPickerButton, isCalloutVisible ? 'dialog-visible' : 'dialog-invisible')}\r\n onClick={toggleIsCalloutVisible}\r\n disabled={isMonthPickerButtonDisabled}\r\n />\r\n
    \r\n
    \r\n \r\n \r\n \r\n \r\n \r\n \r\n
    \r\n
    \r\n {isCalloutVisible ? (\r\n \r\n \r\n \r\n ) : null}\r\n
    \r\n );\r\n};\r\n\r\nMonthPickerBase.propTypes = {\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n formatDate: PropTypes.func,\r\n formatCivilDate: PropTypes.func,\r\n }).isRequired,\r\n serverContext: PropTypes.shape({\r\n CurrentAccount: PropTypes.shape({\r\n TimeZone: PropTypes.number,\r\n }),\r\n }).isRequired,\r\n selectedParent: PropTypes.shape({\r\n id: PropTypes.string,\r\n name: PropTypes.string,\r\n url: PropTypes.string,\r\n }).isRequired,\r\n updateWaterfallFilter: PropTypes.func,\r\n};\r\n\r\nMonthPickerBase.defaultProps = {\r\n updateWaterfallFilter: _.noop,\r\n};\r\n\r\nexport const MonthPicker = _.compose(\r\n withI18nConsumer,\r\n withServerContext,\r\n withGlobalFilter\r\n)(props => (\r\n \r\n));\r\n","var pug = require(\"!../../../../../node_modules/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (blockChart, color, index, metric, metricValue, name, segment) {pug_html = pug_html + \"\\u003Cdiv class=\\\"chart-tooltip\\\"\\u003E\";\nif (segment) {\npug_html = pug_html + \"\\u003Cdiv class=\\\"segment-wrapper\\\"\\u003E\\u003Cspan\\u003E\" + (pug.escape(null == (pug_interp = segment) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003C\\u002Fdiv\\u003E\";\n}\nif (blockChart) {\npug_html = pug_html + \"\\u003Cspan\" + (\" class=\\\"tooltip-color-block\\\"\"+pug.attr(\"style\", pug.style('background-color: ' + color), true, true)) + \"\\u003E\\u003C\\u002Fspan\\u003E\";\n}\nelse {\npug_html = pug_html + \"\\u003Cspan\" + (\" class=\\\"tooltip-color-line\\\"\"+pug.attr(\"style\", pug.style('background-color: ' + color), true, true)) + \"\\u003E\\u003C\\u002Fspan\\u003E\";\n}\nif (blockChart) {\npug_html = pug_html + \"\\u003Cdiv class=\\\"tooltip-name-container column\\\"\\u003E\\u003Cdiv\" + (\" class=\\\"tooltip-legend\\\"\"+pug.attr(\"id\", 'legend' + index, true, true)) + \"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"tooltip-name\\\"\\u003E\" + (pug.escape(null == (pug_interp = name) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";\n}\nelse {\npug_html = pug_html + \"\\u003Cdiv class=\\\"tooltip-name-container line\\\"\\u003E\\u003Cdiv\" + (\" class=\\\"tooltip-legend\\\"\"+pug.attr(\"id\", 'legend' + index, true, true)) + \"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"tooltip-name\\\"\\u003E\" + (pug.escape(null == (pug_interp = name) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";\n}\npug_html = pug_html + \"\\u003Cspan class=\\\"metric-value\\\"\\u003E\" + (pug.escape(null == (pug_interp = metric) ? \"\" : pug_interp)) + (pug.escape(null == (pug_interp = ': ') ? \"\" : pug_interp)) + \"\\u003Cb\\u003E\" + (pug.escape(null == (pug_interp = metricValue) ? \"\" : pug_interp)) + \"\\u003C\\u002Fb\\u003E\\u003C\\u002Fspan\\u003E\\u003C\\u002Fdiv\\u003E\";}.call(this,\"blockChart\" in locals_for_with?locals_for_with.blockChart:typeof blockChart!==\"undefined\"?blockChart:undefined,\"color\" in locals_for_with?locals_for_with.color:typeof color!==\"undefined\"?color:undefined,\"index\" in locals_for_with?locals_for_with.index:typeof index!==\"undefined\"?index:undefined,\"metric\" in locals_for_with?locals_for_with.metric:typeof metric!==\"undefined\"?metric:undefined,\"metricValue\" in locals_for_with?locals_for_with.metricValue:typeof metricValue!==\"undefined\"?metricValue:undefined,\"name\" in locals_for_with?locals_for_with.name:typeof name!==\"undefined\"?name:undefined,\"segment\" in locals_for_with?locals_for_with.segment:typeof segment!==\"undefined\"?segment:undefined));;return pug_html;};\nmodule.exports = template;"],"names":["ActuationContext","React","actuatorId","getActuatorId","consoleLog","_console","console","log","apply","arguments","useActuatorsTracking","_ref","activate","needsActivation","debugModeFromProps","debugMode","parentContext","useContext","isIsolated","_ref2","parentRegisterActuator","registerActuator","parentUnregisterActuator","unregisterActuator","parentDebugMode","actuatorsRef","useRef","activateCallback","useCallback","phase","actuators","current","beacon","concat","_toConsumableArray","without","needsActivationQuery","_useState","useState","_useState2","_slicedToArray","setBeaconId","useEffect","id","any","b","ActuationGroup","children","actuationPropsFromProps","actuationProps","isActive","undefined","setPhase","_ref3","newParentPhase","_useActuatorsTracking","useMemo","noop","_useState3","_useState4","prevIsActive","setPrevIsActive","setTimeout","i","length","actuator","forEach","actuatorContextProps","_jsxs","Provider","value","map","property","join","defaultProps","useActuatorRegistration","actuatorProps","BootstrapExpandableActuator","WrappedComponent","HOC","expandedFromProps","expanded","onToggleFromProps","onToggle","restProps","_objectWithoutProperties","_excluded","queryPhase","_useActuatorRegistrat","newProps","_Fragment","_jsx","_objectSpread","isActuator","hoistNonReactStatics","displayName","getDisplayName","CustomExpandableActuator","expandFromProps","expand","expandKeyFromProps","expandKey","expandRef","expandKeyRef","isFunction","FocusableActuator","setIsActive","focusElementRef","focusables","querySelectorAll","focus","scrollIntoView","behavior","ref","style","position","display","withActuation","Actuators","Actuator","compose","identity","needsActivationFromProps","needsActivationStateRef","_ref4","METRICS","ImpressionShare","OverlapRate","AveragePosition","AboveRate","TopOfPageRate","AbsoluteTopOfPageRate","OutrankingShare","ConversionRate","SearchTerms","CHART_TYPES","None","RecommendationCard","SmallTile","LargeTile","Primary","Secondary","DEVICE_TYPE","PC","SmartPhone","Tablet","NUMBER_TYPES","METRICS_TYPES","_defineProperty","AuctionInsightMetrics","AuctionInsightMetricsForShopping","isMetricPercentage","metric","formatMetric","i18n","options","digits","maximumFractionDigits","minimumFractionDigits","formatPercent","formatDecimal","formatDecimalToFixed","localizeMetric","getString","getLocalizedMetrics","IsAvgPositionDeprecationPhase2Enabled","metrics","_","localizeTitle","CHART_TYPE","VNextColors","VNextRecommendationCardColors","getChartType","primarySegmentType","segmentationType","showXLabels","setSeriesVNextMarker","chartOptions","subType","vNextMarkerSymbols","series","sery","index","marker","symbol","enabled","lineWidth","radius","getYAxis","title","text","color","fontFamily","fontWeight","fontSize","labels","formatter","this","min","ceiling","minTickInterval","tickPixelInterval","gridLineDashStyle","visible","showFirstLabel","showLastLabel","recommendationCardChartOptions","config","data","merge","chart","height","marginLeft","yAxis","plotOptions","line","xAxis","tickLength","tickInterval","gridLineWidth","formatDate","Date","skeleton","timeZone","linkedTo","opposite","type","names","tickPositions","val","weeklyDataChartOptions","conversionSeries","marginRight","column","maxPointWidth","name","pointWidth","lineColumnChartOptions","marginTop","legend","x","y","layout","align","verticalAlign","itemStyle","width","columnBottomChartOptions","tileChartOptionsVNext","isForRecommendationCard","marginBottom","colors","tooltip","backgroundColor","borderWidth","shadow","outside","positioner","labelWidth","labelHeight","point","Math","max","plotX","plotWidth","plotY","plotHeight","getChartOptions","secondarySegment","localizeCategory","useHTML","blockChart","segment","key","fullName","metricValue","tooltipTemplateVNext","spacingTop","spacingLeft","spacingRight","spacingBottom","credits","textOverflow","overflow","squareSymbol","symbolRadius","symbolHeight","symbolWidth","lineColor","plotBands","connectNulls","zoneAxis","pointPlacement","defaultChartOptions","localizeSegmentationValue","margin","floating","secondaryChartOptions","getSeriesWithSecondMetric","items","categories","secondaryMetric","patchedData","item","primarySegment","segmentData","patchMissingData","mapSeries","include","domains","split","count","compact","size","competitor1","competitor2","competitor3","competitors","formatName","zones","memo","num","prev","push","dashStyle","generateZones","zIndex","withSecondMetric","AdvisorChartView","_React$Component","props","_this","_classCallCheck","_callSuper","onLabelClick","setState","labelsVisibilityUpdated","state","onLabelKeyDown","event","keyCode","Enter","Space","_inherits","_createClass","_this2","label","className","onClick","onKeyDown","tabIndex","role","element","paddingLeft","paddingRight","textAlign","selectedMetric","enableLegend","HighchartReactWrapper","onChartRenderedCallback","renderRow","float","buildVNextLegendLabels","AdvisorChart","HoC","hour","pluck","flatten","union","sortBy","parseDate","raw","WithCategories","WithSeriesData","isYou","DisplayDomain","filterItems","domainFilter","you","topItems","extractDataForMetric","secondarySegmentType","shouldHideYou","PerformanceMetrics","Key","primary","SegmentationType","StringValue","secondary","Data","extractSegmentDataForMetric","SegmentedData","AdvisorChartWithMetrics","_React$PureComponent","deviceTypeList","primaryDeviceType","keys","getDeviceTypeList","_extractDataForMetric","showDeviceTypeDropdown","chartType","EmptyChart","dangerouslySetInnerHTML","__html","ApexHelpArticles","showHelpArticleTitle","setShowHelpArticleTitle","suggestionData","renderSuggestionToHtml","logger","$","tryRenderSuggestionToHtml","sug","e","error","CopilotSearchResults","hideSuggestionBox","isNewLogo","searchQuery","setSearchQuery","renderedFirstTime","setRenderedFirstTime","on","target","closeApexPopUp","window","apex_glb","closeHelpView","trace","CopilotResultViewExternalSiteMap","siteMap","allSiteMap","onCopilotClick","placeholderText","_TL_","source","showSuggestions","APEX_INPUT_SEARCH_BOX","APEX_LINK","renderApexHelpSuggestions","suggestionContainer","hideSuggestionBoxWithReset","ReactDOM","code","document","is","useCopilotIconStyles","makeStyles","copilotIcon","paddingTop","CopilotButton","toggleCopilotEvent","CustomEvent","detail","eventType","eventData","message","eventSource","bubbles","cancelable","composed","dispatchEvent","onCopilotKeyDown","copilotIconStyles","CopilotIcon","iconStyles","renderSearchInputIcon","container","AttentionBeaconContext","beaconId","getBeaconId","AttentionBeaconGroup","attentionBeaconProps","onNeedsAttentionChange","parentRegisterBeacon","registerBeacon","parentUnregisterBeacon","unregisterBeacon","parentNotifyStateChange","notifyStateChange","beaconsRef","needsAttentionRef","needsAttention","needsAttentionQuery","attentionBeaconContextProps","withAttentionBeaconGroupProxy","withAttentionBeaconRender","attentionBeaconPropsFromProps","render","_useNeedsAttention","useNeedsAttention","_useNeedsAttention2","withAttentionBeacon","Adapters","AttentionBeaconAdapter","needsAttentionState","setNeedsAttentionState","_useAttentionBeaconCo","useAttentionBeaconContext","onNeedsAttentionChangeFromProps","onAdapterNeedsAttentionChange","newNeedsAttention","attentionBeaconAdapterProps","useNeedsAttentionForAdapter","needsAttentionLocal","attentionBeaconAdapterPropsFromProps","onAdapterNeedsAttentionChangeFromProps","needsAttentionFromAdapter","setNeedsAttentionFromAdapter","setNeedsAttention","withAttentionBeaconPropsInjection","getExtraProps","extraProps","getBrandListById","_asyncToGenerator","_regeneratorRuntime","mark","_callee","cid","aid","brandListId","payload","edm","res","wrap","_context","next","$filter","$top","edmCampaign","Customers","$withKey","Accounts","BrandLists","get","toPromise","sent","abrupt","stop","_x","loadBrandListsFactory","_callee2","_context2","top","skip","endDate","now","brandList","Id","loadBrandsFactoryFromProp","_ref6","_callee3","_ref5","searchFilter","result","_context3","search","Brands","brand","Name","link","Uri","isUnderReview","Status","_x2","loadBrandsUnderBrandListFactoryFromProp","_ref7","isEdit","_callee4","_context4","BrandItems","BrandId","BrandName","createBrandListFromProp","_ref9","brandListPayload","bulkCreate","entityName","updateBrandListFromProp","_ref10","_ref11","_callee5","edmEntityAccount","_context5","bulkUpdate","_x3","deleteBrandListFromProp","_ref12","brandLists","getCampaignsFromProp","_ref13","getCampaignsPayload","edmEntityCampaign","Campaigns","pageNumber","campaignType","query","filter","where","select","gridDataParameters","CurrentCustomerId","$makeCall","getCampaignBrandListAssociationFromProp","_ref14","isExclusion","campaignBrandListAssociationFromProp","_ref15","brandListCampaignAssociationPayload","campaigns","originalAssociation","campaignsMap","originalAssociationMap","EntityId","BrandListsAssociations","SharedEntityId","IsExclusion","bulkCreateMany","createBrandFromProp","_ref16","_ref17","brandName","brandLink","RequestReason","brandReason","getBrandListsEdm","customerId","accountId","params","cache","getBrandsUnderBrandListEdm","loadCampaignAssociatedBrandListsFactory","campaignId","functionParams","then","SharedEntityName","Count","ListItemCount","ERROR_ENTITY","getBulkUploadErrorType","entitySchema","properties","getBulkUploadEntityType","bulkUpsertBrandListsEntityErrorMap","Campaign","BrandList","BrandListAssociation","BrandItem","modelToViewModelForBulkErrors","errors","bulkUpsertEntityErrorMap","scenario","activityLogger","errorProcessor","getBulkApiErrors","errorType","mappedErrorType","mapBulkUpsertErrors","GENERIC_ERROR_MESSAGE","getViewModelBulkUpsertErrors","has","serverErrors","CampaignApiError","getOdataResponseErrors","getODataErrors","and","predicate1","predicate2","not","predicate","errorIs","errorCode","Error","clientIdIs","clientId","extractAndRestoreFailedBrandItemAssociations","BrandItemsAssociations","brandListClientId","brandListErrors","isEmpty","savedAddedBrandItemIds","savedDeletedBrandItemIds","filteredErrors","_reduce","reduce","acc","brandItemAssociation","brandItemAssociationClientId","brandItemAssociationErrors","campaignServiceSharedEntityAssociationDoesNotExistError","find","getBudgetUpdatePanelStyles","_components","palette","Layer","Panel","Components","header","Mode","Collapsed","getErrorTextStyle","borderTop","neutralLight","BudgetOptionImpact","neutralSecondary","CustomizeInput","PanelFooterInfo","InsertionOrderStatus","Constants","InsertionOrdersGridFieldNames","CustomizeBudgetKey","StandardBudgetType","IconErrorColor","Grey","BlankNumber","EstimateType","Object","freeze","Conversions","Clicks","Impressions","Spend","Severity","Default","Warning","Recommendation","AllCampaigns","IconName","ActionType","EditBudget","AdjustBudget","AddFunds","FixIt","CreateNew","Apply","Enable","ViewDetails","ActionTextKey","TooltipChartType","AccountPastDayDailySpend","AccountPastDayCumulativeSpend","AccountTodayDailySpend","AccountTodayCumulativeSpend","CampaignPastDayDailySpend","CampaignPastDayCumulativeSpend","CampaignTodayDailySpend","CampaignTodayCumulativeSpend","TooltipChartKeyDataTitleKey","SpendOfTheDay","MonthToDateSpend","MonthlySpendLimit","DailyBudget","LifetimeBudget","ClickChangeType","Increase","Decrease","BudgetActionType","TopKeyCardType","SumSpendOfTheMonth","SumSpendToDate","SumMonthlyBudget","SumDailyBudget","SumTotalBudget","PrepayBalance","CurrentBalance","BudgetAndSpend","InsertionOrder","SpendOfTheMonth","SpendToDate","MonthlyBudget","MessageBarTypes","MessageBarType","warning","InsertionOrderTextKey","NoEndDate","Unlimited","NoEndDateLowerCase","UnlimitedLowerCase","InsertionOrderFieldNameTextKey","SpendCapAmount","ThruDate","InsertionOrderStatusTextKey","_Object$freeze5","PendingSystemReview","PendingUserReview","Active","Declined","Expired","Canceled","Pending","Exhausted","PendingBillToPartyChange","PendingBillToPartyChangeAndUserReview","Queued","IOAuthzAction","isIOAddAuthorized","isIOUpdateAuthorized","EntryPoint","directvisit","unknown","toolssetup","campaignsgrid","performancegrid","email","budgetcentersidebar","budgetcentercampaignsummarygrid","teachingbubble","budgetcentercampaignselector","getMonitoringCardStyles","Container","alignItems","padding","boxShadow","borderRadius","Content","Actions","gap","whiteSpace","Icon","lineHeight","orange","themePrimary","neutralPrimary","NeutralColors","gray120","green","getTotalBudgetDepletedProgressBarStyles","Bar","background","percentage","progress","getColor","Separator","left","getTooltipCardStyles","gray160","flexDirection","justifyContent","DefaultPalette","getTreeNodeStyles","SidebarBorder","neutralQuaternaryAlt","TreeNode","isSelected","border","borderRight","TreeNodeIcon","minWidth","TreeNodeGlyphicon","getUiBlockerStyles","uiblockerStyle","getCampaignMenuItemStyles","CampaignMenuItem","minHeight","tokens","colorBrandForegroundLink","wordBreak","CampaignItemIcon","SeverityIcon","getCampaignSelectorStyles","CampaignSelector","colorNeutralForeground1","maxWidth","flexBasis","flexShrink","flexGrow","shorthands","spacingVerticalSNudge","ListMenuGroup","SearchBox","ScrollingContainer","overflowX","overflowY","scrollbarGutter","maxHeight","colorNeutralForeground3","PlaceholderNode","PlaceholderNodeIcon","Spinner","getBlockerStyle","spinnerKeyframe","getBudgetCenterMonthPickerStyle","monthPickerContainer","monthPickerSection","monthPickerButton","borderColor","gray80","monthPickerButtonText","monthText","calendarIcon","navigationIcons","neutralTertiaryAlt","navigationIconButtonWrapper","navigationIcon","monthPickerCallout","white","UiBlocker","loadingText","blocking","useDefaultStyles","UiBlockerBase","classes","blockUiContainer","blockerIndicator","updateCampaignBudget","attrs","updateSharedBudget","budgetId","Budgets","generateUpdateCampaignBudgetPromises","campaignGroups","AccountId","itemGroup","attrsList","Budget","Amount","parseFloat","SuggestedBudget","Type","campaignIdList","bulkUpdateMany","updateCampaignBudgetMany","CampaignId","generateUpdateSharedBudgetManyPromises","uniqItems","BudgetId","budgetIdList","updateSharedBudgetMany","onSaveBudgetUpdate","updateBudgetPromise","budget","budgetUpdateItem","_ref7$budgetUpdateIte","_ref7$setIsSaving","setIsSaving","_ref7$successCallback","successCallback","activity","_ref7$updateSharedBud","updateSharedBudgetFunc","_ref7$updateCampaignB","updateCampaignBudgetFunc","_ref7$showErrorBanner","showErrorBannerFunc","showErrorBanner","_ref7$logSingleRespon","logSingleResponseFunc","logSingleResponse","JSON","stringify","newBudget","response","api","sourceItems","catch","finally","getUnexpectedError","getBulkEditResponseErrors","checkAndGetError","entity","err","parseResponseMany","notificationApi","showWarning","showInfo","logMessage","_ref$sourceItems","sourceItem","UpdateType","parseResponse","logUpdateBudget","getErrorLog","formatInteger","withSign","parseDecimal","formatCurrency","currencyCode","dateString","formatCivilDate","civilDate","RecommendationType","BudgetRecommendationItemType","BudgetEventType","IOFilter","IOEntryPointAlias","SecurityAction","isEndlessIOEndDate","InsertionOrderUtils","isUnlimitedIOBudget","calcDelta","a","populateEstimatedIncrease","campaignBudgetRecommendation","budgetRecommendationItems","BudgetRecommendationItems","Comment","Current","itemB","itemA","EstimatedConversionsIncrease","EstimatedConversions","EstimatedClicksIncrease","EstimatedClicks","EstimatedImpressionsIncrease","EstimatedImpressions","EstimatedSpendIncrease","EstimatedSpend","formatBudgetEventTypes","budgetEventTypes","openBudgetUpdatePanel","navigateBySiteMapId","authzMap","deltaEstimates","suggested","Suggested","amount","getDeltaEstimates","isExperimentCampaign","budgetEventTypesDeduped","InsertionOrderBalanceDepleted","InsertionOrderExpired","budgetEventType","formatted","handleClick","action","CampaignOutOfBudget","severity","actions","CampaignManagementFullControl","MonitoringCardButton","actionType","CampaignLimitedByBudget","PrepayAccountBalanceLow","ForceBilling","extraSearch","returnurl","IWindow","href","PrepayAccountBalanceZero","iofilter","AccountPaused","entrypoint","BudgetCenter","InsertionOrderExhaustingUrgent","Exhausting","InsertionOrderExpiringUrgent","Expiring","AccountHold","formatBudgetEventType","formatAccountRecommendations","accountRecommendations","accountRecommendation","FromDate","SeriesStartDate","InsertionOrderCreation","fromDate","thruDate","spendCapAmount","hint","InsertionOrderUpdate","RecurringInsertionOrderAdd","seriesStartDate","AutoRecharge","AccountUpdate","formatAccountRecommendation","getMonitoringCardConfig","budgetEventAlerts","accountRecommendationAlerts","getURIObj","siteMapId","uid","path","getRoutePathById","uri","URI","addSearch","generateGetURLBySiteMapId","toString","getURL","generateNavigateBySiteMapId","history","navigate","BudgetChangeType","formatInsertionOrderValue","fieldName","Number","getInsertionOrderMessage","eventHistory","OldValue","changeField","FieldName","oldValue","newValue","NewValue","getTopKeyCardStyles","TopKeyCardGroup","AmountNodeInfo","AmountNodeValueNode","AmountNodeValue","AmountNodeSuffix","AmountHint","ItemName","MessageItem","getThresholdProgressBarStyles","getInsertionOrderCardStyles","Item","ItemValue","NoActiveIO","NoActiveName","NoActiveMessageItem","NoActiveMessageItemPrefix","FontSize14","getAlertMessageStyles","MessageText","MessageBar","classnames","AmountNode","suffixKey","formattedValue","ThresholdProgressBar","InsertionOrderItem","itemName","itemKey","itemValue","InsertionOrderCard","rawData","abnormalStatus","today","ExpireDate","RemainingBudget","expirationDate","date","getCivilDateFromDate","noActiveIO","expiredMessage","remainingBudget","exhaustedMessage","remainingBudgetMessageConfig","expireOnMessageConfig","expireInDays","year","month","day","noErrorNode","remainingBudgetValue","expirationDateValue","InsertionOrderBudgetAndSpendCard","BudgetActions","isAuth","actionClickApi","LinkButton","as","CampaignEditLink","Glyphicon","glyph","CampaignSharedIcon","getAbnormalMessage","messageText","getThresholdProgressBar","BalanceThreshold","getTopKeyCardConfig","topKeyCardType","MTDSpend","cardType","headerConfig","titleKey","helpTopic","itemNameKey","content","hasAction","footer","ioActionButton","_ref4$eventType","DefaultButton","getInsertionOrderCardFooter","PaymentOption","getTopKeyCardGroup","paymentOption","isAccountScope","isCurrentMonth","cardTypes","isLifetimeBudget","Prepay","Threshold","Invoice","getTopKeyCardTypes","cardNumber","cards","DeliveryStatus","getNodeSeverity","deliveryStatus","CampaignBudgetPaused","BudgetSuggestions","getNodeIconTooltipText","BudgetUpdatePanel","i18nFromProps","dailyBudget","lifetimeBudget","budgetRecommendations","onSave","onCancel","isSaving","mergeI18n","buildLegacyI18n","ValidationStringMap","_useMemo","getBudgetRange","_useMemo$Daily","Daily","dailyMin","Min","dailyMax","Max","_useMemo$Lifetime","Lifetime","lifetimeMin","lifetimeMax","schema","CustomizeBudget","required","minimum","maximum","radioItems","customizeItem","isValid","setIsValid","custimizeBudget","setCustomizeBudget","_useState5","_useState6","selectedItem","setSelectedItem","isSharedBudget","customValidator","defaultValidator","onClickSave","EstimatedBudget","layerProps","closeButtonAriaLabel","headerText","isOpen","isLightDismiss","onDismiss","isFooterAtBottom","onRenderFooterContent","messageBarType","info","styles","root","themeLighterAlt","PrimaryButton","disabled","LineByLineFormGroup","isStatic","contentColClass","RadioGroup","checked","renderItem","EstimatedRevenueIncrease","Input","validationProps","validator","onValidate","field","alwaysShowError","placeholder","budgetRow","impactRow","clicks","revenue","onChange","MonitoringCard","formatEstimate","conversions","impressions","spend","messageNode","Message","hintNode","Hint","estimatesNode","Estimates","WeeklyEstimatesText","Estimate","actionsNode","ButtonComponent","TooltipSectionContentItem","TooltipSectionEventItem","budgetChangeType","tooltipEvent","formatTooltipEventType","PrepayBalanceRecharge","changeAmount","InsertionOrderChange","ThresholdPaymentChange","CampaignDailyBudgetChange","DailyClickChange","formatTooltipBudgetChangeType","comment","TooltipCardSection","TooltipCardUnstyled","tooltipKeyData","topSpendingCampaigns","hourlyTrendChart","monitoringConfigs","keyDataSection","keyDataItemsConfig","valueFieldName","getKeyDataItemsConfig","keyDataItem","topSpendingCampaignsSection","topSpendingCampaign","CampaignName","DailySpend","hourlyTrendSection","monitoringEventSection","BudgetChange","budgetChange","AbnormalStatus","abnormal","TotalBudgetDepletedProgressBar","HelpPopupTitle","nameKey","HelpPopupInline","topic","ariaLabel","cardGroup","cardConfig","occupiedColNumber","cardContainer","CardContainer","CardsBoard","colNumber","defaultColMinWidth","isAutoFillBlankDisabled","AlertMessage","onUpdateBudget","ActivityContext","messageConfig","messageBarIconProps","iconName","MessageBarButton","OverlayTriggerContainer","renderOverlayTrigger","rest","OverlayTrigger","TreeNodeWithTooltipBase","forwardedRef","isTextOverflow","iconTooltipText","hasIconTooltipText","overflowOverlayProps","placement","overlay","Tooltip","HiddenTooltip","iconOverlayProps","Button","btnStyle","TreeNodeLeftPadding","TreeNodeName","TreeNodeWithTooltip","withOverflowProp","CampaignSelectorItem","statusIcon","MenuItem","icon","isCampaignListLoading","campaignNodesList","allCampaignsNode","onSearchChange","placeholderTreeNode","MenuList","MenuGroup","MenuDivider","campaignNode","isoDateFormat","MonthPickerBase","serverContext","monthFilter","WaterfallFilterType","BudgetCenterMonthFilter","updateWaterfallFilter","buttonClass","civilDateToday","isoDateString","translateLegacyToIANATimezone","parseCivilDate","dateFormat","earliestDate","selectedDate","minDate","maxDate","filterType","navigatedDate","setNavigatedDate","isCalloutVisible","setIsCalloutVisible","isMonthPickerButtonDisabled","isPrevMonthButtonDisabled","compareCivilMonth","isNextMonthButtonDisabled","toggleIsCalloutVisible","updateSelectedDate","logTrace","newDate","plus","months","Callout","isBeakVisible","directionalHint","DirectionalHint","bottomCenter","SingleMonthCalendar","onSelectDate","onNavigateDate","isMonthRangePicker","MonthPicker","withI18nConsumer","withServerContext","withGlobalFilter","pug","module","exports","locals","pug_interp","pug_html","locals_for_with","escape","attr","call"],"sourceRoot":""}