{"version":3,"file":"static/js/application.async.landing~bbc40aea.64973bcb.chunk.js","mappings":"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","sources":["../../../node_modules/@bingads-webui-campaign-react/brand-page/src/legacy-deps-list.js","../../../node_modules/@bingads-webui-campaign-react/brand-page/src/additional-plugins.js","../../../node_modules/@bingads-webui-campaign-react/brand-page/src/brands-factory.js","../../../node_modules/@bingads-webui-campaign-react/brand-page/src/add-brand-panel.js","../../../node_modules/@bingads-webui-campaign-react/brand-page/src/brands-page.js","../../../node_modules/@bingads-webui-campaign-react/brand-page/src/toolbar-config.js","../../../node_modules/@bingads-webui-campaign-react/budget-component/src/styles/get-estimated-monthly-budget-styles.js","../../../node_modules/@bingads-webui-campaign-react/budget-component/src/styles/get-budget-input-styles.js","../../../node_modules/@bingads-webui-campaign-react/budget-component/src/currency-dropdown.js","../../../node_modules/@bingads-webui-campaign-react/budget-component/src/budget-input.js","../../../node_modules/@bingads-webui-campaign-react/budget-component/src/consts.js","../../../node_modules/@bingads-webui-campaign-react/budget-component/src/styles/get-slider-styles.js","../../../node_modules/@bingads-webui-campaign-react/budget-component/src/slider.js","../../../node_modules/@bingads-webui-campaign-react/budget-component/src/serialize-currencies.js","../../../node_modules/@bingads-webui-campaign-react/budget-component/src/styles/get-shimmer-styles.js","../../../node_modules/@bingads-webui-campaign-react/budget-component/src/budget-shimmer.js","../../../node_modules/@bingads-webui-campaign-react/budget-component/src/budget-component.js","../../../node_modules/@bingads-webui-campaign-react/budget-component/src/helpers.js","../../../node_modules/@bingads-webui-campaign-react/budget-suggestion-v2/src/model/api-parser.js","../../../node_modules/@bingads-webui-campaign-react/budget-suggestion-v2/src/model/constants.js","../../../node_modules/@bingads-webui-campaign-react/budget-suggestion-v2/src/components/budget-item.js","../../../node_modules/@bingads-webui-campaign-react/budget-suggestion-v2/src/components/budget-suggestion-container.js","../../../node_modules/@bingads-webui-campaign-react/budget-suggestion-v2/src/components/budget-suggestion-offline-container.js","../../../node_modules/@bingads-webui-campaign-react/budget-suggestion-v2/src/components/use-budget-metrics-logger.js","../../../node_modules/@bingads-webui-campaign-react/budget-suggestion-v2/src/use-budget-suggestion-repository.js","../../../node_modules/@bingads-webui-campaign-react/budget-suggestion-v2/src/budget-suggestion.js","../../../node_modules/@bingads-webui-campaign-react/budget-suggestion-v2/src/budget-suggestion-dialog.js","../../../node_modules/@bingads-webui-campaign-react/brand-page/src/empty-placeholder-template.pug","../../../node_modules/@bingads-webui-campaign-react/brandkit-data-service/src/service/use-brandkit-data-service.ts","../../../node_modules/@bingads-webui-campaign-react/brandkit-data-service/src/brand-kit-repository.ts","../../../node_modules/@bingads-webui-campaign-react/brandkit-data-service/src/use-brandkit-service.ts","../../../node_modules/@bingads-webui-campaign-react/brandkit-data-service/src/schema/brandkit.ts","../../../node_modules/@bingads-webui-campaign-react/budget-component-v2/src/use-budget-range.ts","../../../node_modules/@bingads-webui-campaign-react/budget-component-v2/src/styles/budget-input-styles.ts","../../../node_modules/@bingads-webui-campaign-react/budget-component-v2/src/budget-input-pure.tsx","../../../node_modules/@bingads-webui-campaign-react/budget-component-v2/src/styles/validated-budget-input-styles.ts","../../../node_modules/@bingads-webui-campaign-react/budget-component-v2/src/validated-budget-input.tsx"],"sourcesContent":["/* eslint-disable import/extensions */\r\n/* eslint-disable import/no-unresolved */\r\n\r\nimport edm from '@bingads-webui-component-legacy/edm-campaign/index';\r\nimport appConfig from '@bingads-webui-component-legacy/config/index';\r\nimport logger from '@bingads-webui-static-legacy/instrumentation/index';\r\nimport * as columnChooserPreference from '@bingads-webui-component-legacy/bingads-grid/service/column-chooser-preferences';\r\nimport * as legacyColumnChooserPreferences from '@bingads-webui-component-legacy/bingads-grid/service/legacy-column-chooser-preferences';\r\nimport jsDataCampaign from '@bingads-webui-component-legacy/js-data-campaign/index';\r\nimport appState from '@bingads-webui-component-legacy/state/index';\r\nimport * as preferenceService from '@bingads-webui-component-legacy/preference/service/index';\r\nimport sessionStore from '@bingads-webui-component-legacy/js-data-storage/session-storage';\r\nimport * as preferenceStoreFactory from '@bingads-webui-component-legacy/bingads-grid/service/filter-preferences';\r\nimport cacheService from '@bingads-webui-static-legacy/cache-service';\r\nimport dataContextManager from '@bingads-webui-static-legacy/summary/SummaryDataContextManager';\r\nimport { ProductOffer } from '@bingads-webui-campaign/campaign-ui-schemas';\r\nimport pageContext from '@bingads-webui-static-legacy/page-context';\r\n\r\n\r\nconst i18n = window.globalLegacyI18n.get('@bingads-webui/i18n-amd-loader!campaignui/feature/product-feed');\r\nconst schemaI18nCampaign = window.globalLegacyI18n.get('$/schema-i18n!campaign');\r\nexport const brandGridLegacyDepsList = {\r\n '@bingads-webui/i18n-amd-loader!campaignui/feature/product-feed': i18n,\r\n 'component/edm-campaign/index': edm,\r\n 'component/config/index': appConfig,\r\n 'module/service/instrumentation/index': logger,\r\n 'component/bingads-grid/service/column-chooser-preferences': columnChooserPreference,\r\n 'component/bingads-grid/service/legacy-column-chooser-preferences': legacyColumnChooserPreferences,\r\n 'component/js-data-campaign/index': jsDataCampaign,\r\n 'component/state/index': appState,\r\n 'component/preference/service/index': preferenceService,\r\n '$/schema!campaign/ProductOffer': ProductOffer,\r\n 'component/js-data-storage/session-storage': sessionStore,\r\n 'component/bingads-grid/service/filter-preferences': preferenceStoreFactory,\r\n 'Services/CacheService': cacheService,\r\n SummaryDataContextManager: dataContextManager,\r\n '$/schema-i18n!campaign': schemaI18nCampaign,\r\n PageContext: pageContext,\r\n};\r\n\r\nexport const extraDepList = [\r\n '$/i18n!legacy/global',\r\n 'module/app/component/azureUrlRewrite',\r\n];\r\n\r\nexport const inlineChartDepList = [\r\n '@bingads-webui/i18n-amd-loader!@bingads-webui-campaign-react/inline-chart',\r\n 'Constants',\r\n '$/i18n!global',\r\n 'component/bingads-grid/service/grid-preferences',\r\n];\r\n\r\nexport const pageDepList = [\r\n 'component/bingads-grid/shared/timeRangeChecker',\r\n 'component/bingads-grid/service/fetch-pagination',\r\n];\r\n","import _ from 'underscore';\r\nimport Promise from 'bluebird';\r\nimport { projectionGridScopeNavigator } from '@bingads-webui-campaign/projection-grid-scope-navigator';\r\nimport { placeholderPlugin } from '@bingads-webui/projection-grid-placeholder';\r\n\r\nimport placeholderTemplate from './empty-placeholder-template.pug';\r\n\r\nexport const getAdditionalPluginsFactory = ({\r\n toolbarPlugin,\r\n scope,\r\n i18n,\r\n}) => view => [\r\n toolbarPlugin,\r\n {\r\n plugin: projectionGridScopeNavigator,\r\n config: scope,\r\n }, {\r\n plugin: placeholderPlugin,\r\n config: {\r\n container: '.brand-page .grid-noresult',\r\n template: placeholderTemplate,\r\n templateOptions: {\r\n i18n,\r\n _,\r\n },\r\n asyncEmptyText: view.tooMuchDataErrorText,\r\n asyncCallback: () => Promise.resolve(view.showTooMuchDataError),\r\n },\r\n },\r\n];\r\n","/* eslint-disable import/extensions */\r\n/* eslint-disable import/no-unresolved */\r\n\r\nimport Promise from 'bluebird';\r\nimport $ from 'jquery';\r\nimport _ from 'underscore';\r\nimport { getBrandGridFactory } from '@bingads-webui-campaign/cpg-product-feed-grid';\r\nimport { getRouterDep } from '@bingads-webui-campaign-react/legacy-router-dep';\r\nimport { getGridPreferences } from '@bingads-webui-campaign/summary-grid-helper';\r\nimport edm from '@bingads-webui-component-legacy/edm-campaign/index';\r\nimport appState from '@bingads-webui-component-legacy/state/index';\r\nimport segmentTimeChecker from '@bingads-webui-component-legacy/bingads-grid/shared/timeRangeChecker';\r\nimport { fetchPaginationConfig } from '@bingads-webui-component-legacy/bingads-grid/service/fetch-pagination';\r\n\r\nimport { brandGridLegacyDepsList } from './legacy-deps-list';\r\nimport { getAdditionalPluginsFactory } from './additional-plugins';\r\n\r\n\r\nlet brandFactory = null;\r\nconst brandPromiseFactory = () => {\r\n const brandPromise = new Promise((resolve) => {\r\n if (brandFactory) {\r\n resolve(brandFactory);\r\n } else {\r\n getBrandGridFactory()(brandGridLegacyDepsList)\r\n .then((result) => {\r\n brandFactory = result;\r\n resolve(result);\r\n });\r\n }\r\n });\r\n return brandPromise;\r\n};\r\n\r\nexport function createBrandsGridForUiNext({\r\n serverContext,\r\n toolbarPlugin,\r\n preferenceService,\r\n scope,\r\n permissions,\r\n currentCampaign,\r\n currentAdGroup,\r\n siteMap,\r\n perfMarker,\r\n fetchDataCallback,\r\n hideSubBrand,\r\n}) {\r\n return new Promise((resolve) => {\r\n const campaignContext = {\r\n currentCampaign,\r\n currentAdGroup,\r\n };\r\n brandPromiseFactory({\r\n serverContext,\r\n scope,\r\n permissions,\r\n campaignContext,\r\n preferenceService,\r\n }).then(({ createBrandGrid }) => {\r\n const i18n = window.globalLegacyI18n.get('@bingads-webui/i18n-amd-loader!campaignui/feature/product-feed');\r\n\r\n // merge the scopeService instance and scope entity object together\r\n const scopeAdapter = _.extend({\r\n customerId: scope.values.cid,\r\n accountId: scope.values.aid,\r\n campaignId: scope.values.campaignId,\r\n adGroupId: scope.values.adGroupId,\r\n }, scope);\r\n\r\n if (scopeAdapter.adGroupId) {\r\n appState.set('campaign_id', scopeAdapter.campaignId);\r\n appState.set('adgroup_id', scopeAdapter.adGroupId);\r\n } else if (scopeAdapter.campaignId) {\r\n appState.set('campaign_id', scopeAdapter.campaignId);\r\n appState.unset('adgroup_id');\r\n } else {\r\n appState.unset('campaign_id');\r\n appState.unset('adgroup_id');\r\n }\r\n\r\n let edmEntity = edm.currentAccount;\r\n if (scopeAdapter.adGroupId) {\r\n edmEntity = edm.currentAdGroup;\r\n } else if (scopeAdapter.campaignId) {\r\n edmEntity = edm.currentCampaign;\r\n }\r\n\r\n const router = {\r\n getRouteTo: () => 'route',\r\n navigateToRoute: getRouterDep(scope, siteMap).navigateToRoute,\r\n };\r\n const $viewport = $('.brand-page');\r\n\r\n getGridPreferences({\r\n gridName: 'productsGrid',\r\n dateUtil: {\r\n format: value => i18n.formatDate(value),\r\n },\r\n state: appState,\r\n edm: edmEntity,\r\n segmentTimeChecker,\r\n fetchPaginationConfig,\r\n customColumnsEnabled: false,\r\n }).then((preferenceConfig) => {\r\n resolve({\r\n gridView: createBrandGrid({\r\n getAdditionalPlugins: getAdditionalPluginsFactory({\r\n toolbarPlugin,\r\n scope: scopeAdapter,\r\n i18n,\r\n }),\r\n preferenceConfig,\r\n router,\r\n scope: scopeAdapter,\r\n addDateChangeListener: _.noop,\r\n isForVNext: true,\r\n viewport: $viewport,\r\n customHeaderOffset: () => $viewport.find('.sticky-container').height(),\r\n perfMarker,\r\n fetchDataCallback,\r\n hideSubBrand,\r\n }),\r\n i18n,\r\n });\r\n });\r\n });\r\n });\r\n}\r\n","import $ from 'jquery';\r\nimport classNames from 'classnames';\r\nimport PropTypes from 'prop-types';\r\nimport React, { memo } from 'react';\r\nimport { every, pick } from 'underscore';\r\nimport { Panel, PanelType } from '@fluentui/react';\r\nimport { withDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { Button, Input, Glyphicon } from '@bingads-webui-react/primitive';\r\nimport { withUiBlock } from '@bingads-webui/uiblocker';\r\nimport { AlertHelper } from '@bingads-webui-campaign/alert-helper';\r\n\r\nconst panelStyles = {\r\n main: {\r\n top: 60,\r\n },\r\n};\r\n\r\nconst overlayProps = {\r\n styles: {\r\n root: {\r\n top: 60,\r\n },\r\n },\r\n};\r\n\r\nconst flexStyle = {\r\n overflow: 'hidden',\r\n display: 'flex',\r\n flex: 1,\r\n position: 'relative',\r\n flexDirection: 'column',\r\n};\r\n\r\nfunction style() {\r\n return {\r\n panel: {\r\n '& .ms-Panel-scrollableContent, & .ms-Panel-contentInner, & .ms-Panel-content': {\r\n ...flexStyle,\r\n },\r\n '& .ms-Panel-content': {\r\n padding: 0,\r\n },\r\n '& input': {\r\n width: '90%',\r\n marginBottom: 10,\r\n },\r\n },\r\n header: {\r\n marginTop: 32,\r\n marginLeft: 28,\r\n },\r\n content: {\r\n ...flexStyle,\r\n marginLeft: 28,\r\n overflow: 'auto',\r\n },\r\n addSubBrandButton: {\r\n border: 'none',\r\n color: '#1470A5',\r\n width: 'fit-content',\r\n paddingLeft: 0,\r\n paddingRight: 5,\r\n '&:hover, &:active, &:focus': {\r\n color: '#0c4261',\r\n background: 'none',\r\n border: 'none',\r\n 'border-color': 'none',\r\n 'text-decoration': 'underline',\r\n },\r\n },\r\n saveButton: {\r\n marginRight: 12,\r\n },\r\n subBrandInput: {\r\n display: 'inline-block',\r\n },\r\n removeSubBrandButton: {\r\n padding: 0,\r\n border: 'none',\r\n height: 32,\r\n width: 32,\r\n minWidth: 'unset',\r\n },\r\n bottomBar: {\r\n borderTop: '1px solid #EDEBE9',\r\n padding: '0 16px',\r\n height: 63,\r\n display: 'flex',\r\n flexDirection: 'row',\r\n alignItems: 'center',\r\n },\r\n closeButton: {\r\n position: 'absolute',\r\n right: 12,\r\n top: 14,\r\n padding: 0,\r\n border: 'none',\r\n minWidth: 'unset',\r\n height: 32,\r\n width: 32,\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n '& .iconba': {\r\n color: '#605E5C',\r\n margin: 0,\r\n },\r\n },\r\n addSubBrandErrorMessage: {\r\n color: 'red',\r\n },\r\n };\r\n}\r\n\r\nconst componentsAttributes = {\r\n panelClass: 'add-brand-panel',\r\n brandNameClass: 'brand-name',\r\n brandUrlClass: 'brand-website-url',\r\n addSubBrandButtonClass: 'add-sub-brand',\r\n addSubBrandErrorMessageClass: 'sub-brand-error',\r\n subBrandClass: 'sub-brand',\r\n removeSubBrandButtonClass: 'remove-sub-brand',\r\n saveButtonClass: 'save-brand',\r\n cancelButonClass: 'close-add-brand-panel',\r\n closeIconClass: 'close-add-brand-panel-icon',\r\n};\r\n\r\nconst maxSubBrands = 10;\r\nconst maxSubBrandValueLength = 256;\r\n\r\nclass AddBrandPanel extends React.PureComponent {\r\n constructor(props) {\r\n super(props);\r\n this.state = this.initState();\r\n }\r\n\r\n onSaveBrand = () => {\r\n this.sendAddBrandRequest();\r\n this.props.onClose();\r\n this.resetState();\r\n }\r\n\r\n onClosePanel = () => {\r\n this.props.onClose();\r\n this.resetState();\r\n }\r\n\r\n initState() {\r\n return {\r\n brandName: null,\r\n brandUrl: null,\r\n subBrands: [],\r\n showAddSubBrandError: false,\r\n };\r\n }\r\n\r\n updateBrandName = (e) => {\r\n const { value } = e.currentTarget;\r\n this.setState({\r\n brandName: value,\r\n });\r\n }\r\n\r\n updateBrandUrl = (e) => {\r\n const { value } = e.currentTarget;\r\n this.setState({\r\n brandUrl: value,\r\n });\r\n }\r\n\r\n addSubBrand = () => {\r\n if (!this.canAddSubBrand()) {\r\n this.setState({\r\n showAddSubBrandError: true,\r\n });\r\n return;\r\n }\r\n const { subBrands } = this.state;\r\n this.setState({\r\n subBrands: [...subBrands, ''],\r\n showAddSubBrandError: false,\r\n });\r\n }\r\n\r\n canAddSubBrand = () => {\r\n const { subBrands } = this.state;\r\n return every(subBrands, subBrand => this.validateInput(subBrand));\r\n }\r\n\r\n updateSubBrand = (e) => {\r\n const { value, tabIndex } = e.currentTarget;\r\n const { subBrands } = this.state;\r\n const truncateValue = value.slice(0, maxSubBrandValueLength);\r\n this.setState({\r\n subBrands: [...subBrands.slice(0, tabIndex), truncateValue, ...subBrands.slice(tabIndex + 1)],\r\n }, this.updateSubBrandErrorMessage);\r\n }\r\n\r\n updateSubBrandErrorMessage = () => {\r\n if (this.canAddSubBrand()) {\r\n this.setState({\r\n showAddSubBrandError: false,\r\n });\r\n } else {\r\n this.setState({\r\n showAddSubBrandError: true,\r\n });\r\n }\r\n }\r\n\r\n removeSubBrand = (e) => {\r\n const { tabIndex } = e.currentTarget;\r\n const { subBrands } = this.state;\r\n this.setState({\r\n subBrands: [...subBrands.slice(0, tabIndex), ...subBrands.slice(tabIndex + 1)],\r\n }, this.updateSubBrandErrorMessage);\r\n }\r\n\r\n canSaveBrand = () => {\r\n const { brandName, brandUrl, subBrands } = this.state;\r\n return this.validateInput(brandName) && this.validateInput(brandUrl) && every(subBrands, subBrand => this.validateInput(subBrand));\r\n }\r\n\r\n validateInput = (input) => {\r\n if (input && input !== '') {\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n showAddBrandError() {\r\n const { i18n } = this.props;\r\n const alertHelper = new AlertHelper({ i18n });\r\n alertHelper.showError(i18n.getString(_TL_('Request to add brand failed.')));\r\n }\r\n\r\n sendAddBrandRequest = () => {\r\n const { brandGrid } = this.props;\r\n const unblock = withUiBlock(brandGrid.grid.gridView.$el);\r\n const saveResult = pick(this.state, 'brandName', 'brandUrl', 'subBrands');\r\n $.ajax({\r\n url: `${brandGrid.getBmcMtEndpoint()}/api/v1/manufacturers/${brandGrid.customerId}/brands?cid=${brandGrid.customerId}&aid=${brandGrid.accountId}&uid=${brandGrid.userId}`,\r\n type: 'POST',\r\n data: saveResult,\r\n xhrFields: {\r\n withCredentials: true,\r\n },\r\n success: () => {\r\n unblock();\r\n brandGrid.fetchGridData = true;\r\n brandGrid.grid.gridView.refresh(true);\r\n },\r\n error: () => {\r\n unblock();\r\n this.showAddBrandError();\r\n },\r\n });\r\n }\r\n\r\n resetState() {\r\n this.setState(this.initState());\r\n }\r\n\r\n render() {\r\n const {\r\n displayName,\r\n isOpen,\r\n classes,\r\n } = this.props;\r\n\r\n const showSubBrand = this.state.subBrands.length > 0;\r\n const showAddSubBrand = this.state.subBrands.length < maxSubBrands;\r\n const isSaveButtonDisabled = !this.canSaveBrand();\r\n const { i18n } = this.props;\r\n const componentsStrings = {\r\n brandName: i18n.getString(_TL_('Brand name')),\r\n brandUrl: i18n.getString(_TL_('Brand domain URL')),\r\n addSubBrandText: i18n.getString(_TL_('Add sub-brand')),\r\n addSubBrandErrorMessage: i18n.getString(_TL_('Sub-brand(s) cannot be empty.')),\r\n subBrandName: i18n.getString(_TL_('Sub-brand(s)')),\r\n removeSubBrandButtonAriaLabel: i18n.getString(_TL_('remove sub brand')),\r\n saveButtonText: i18n.getString(_TL_('Save')),\r\n cancelButtonText: i18n.getString(_TL_('Cancel')),\r\n closeIconAriaLabel: i18n.getString(_TL_('Close')),\r\n };\r\n\r\n const showSubBrandContent = showSubBrand ? (\r\n \r\n \r\n {componentsStrings.subBrandName}\r\n \r\n {this.state.subBrands.map((subBrand, idx) => (\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n ))}\r\n
\r\n ) : null;\r\n\r\n const showAddSubBrandErrorMessage = this.state.showAddSubBrandError ? (\r\n \r\n {componentsStrings.addSubBrandErrorMessage}\r\n \r\n ) : null;\r\n\r\n const showAddSubBrandButton = showAddSubBrand ? (\r\n \r\n {showAddSubBrandErrorMessage}\r\n \r\n \r\n {componentsStrings.addSubBrandText}\r\n \r\n \r\n ) : null;\r\n\r\n return (\r\n \r\n \r\n {displayName}\r\n \r\n
\r\n \r\n {componentsStrings.brandName}\r\n \r\n \r\n \r\n {componentsStrings.brandUrl}\r\n \r\n \r\n {showSubBrandContent}\r\n {showAddSubBrandButton}\r\n
\r\n
\r\n \r\n {componentsStrings.saveButtonText}\r\n \r\n \r\n {componentsStrings.cancelButtonText}\r\n \r\n
\r\n \r\n \r\n \r\n \r\n );\r\n }\r\n}\r\n\r\nAddBrandPanel.propTypes = {\r\n displayName: PropTypes.string.isRequired,\r\n isOpen: PropTypes.bool.isRequired,\r\n onClose: PropTypes.func.isRequired,\r\n classes: PropTypes.objectOf(PropTypes.object).isRequired,\r\n brandGrid: PropTypes.objectOf(PropTypes.object).isRequired,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }).isRequired,\r\n};\r\n\r\nAddBrandPanel.defaultProps = {\r\n};\r\n\r\nexport const StyledAddBrandPanel = withDefaultStyles(memo(AddBrandPanel), style);\r\n","import React, { Fragment } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { noop, compose, extend } from 'underscore';\r\nimport { SPAv2Tutorial } from '@bingads-webui-campaign-react/spa-tutorial';\r\nimport { StyledGridViewWrapper } from '@bingads-webui-campaign-react/grid-view-wrapper';\r\nimport { TopGridPanel } from '@bingads-webui-campaign-react/top-grid-panel';\r\nimport { withGlobalFilter } from '@bingads-webui-campaign-react/global-filter-context';\r\nimport { withDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { StyledTablePageContainer } from '@bingads-webui-campaign-react/table-page-container';\r\nimport { withI18nConsumer } from '@bingads-webui-react/i18n-context';\r\nimport { withTablePageStateManager } from '@bingads-webui-campaign-react/table-page-state-manager';\r\nimport { withCurrentExpandedScope } from '@bingads-webui-campaign-react/use-current-scope-entity';\r\nimport { perfMarkerPropTypes } from '@bingads-webui/performance-marker';\r\nimport { ProgressiveLoadingBlock } from '@bingads-webui-campaign-react/shell-ui-common';\r\n\r\nimport { createBrandsGridForUiNext } from './brands-factory';\r\nimport { getToolbarConfig } from './toolbar-config';\r\n\r\nimport { StyledAddBrandPanel } from './add-brand-panel';\r\n\r\nconst StyledGridViewWrapperWithFilterContext = withGlobalFilter(StyledGridViewWrapper);\r\n\r\nconst getBrandGridViewStyles = () =>\r\n ({\r\n '@global': extend({\r\n '.brand-page .table-container table.table thead.header tr th': {\r\n '&:first-child, &:nth-child(2)': {\r\n 'border-right': '1px solid #EDEBE9',\r\n },\r\n '&:nth-child(5)': {\r\n 'border-right': 'none',\r\n },\r\n '&:last-child': {\r\n 'border-left': 'none',\r\n },\r\n },\r\n '.brand-page .table-container table.table tbody tr td': {\r\n 'overflow-wrap': 'break-word',\r\n '&:first-child, &:nth-child(2)': {\r\n 'border-right': '1px solid #EDEBE9',\r\n },\r\n '&:nth-child(5)': {\r\n 'border-right': 'none',\r\n '&:hover': {\r\n 'border-right': 'none',\r\n },\r\n },\r\n '&:last-child': {\r\n 'border-left': 'none',\r\n '&:hover': {\r\n 'border-left': 'none',\r\n },\r\n },\r\n },\r\n '.brand-page .bingadsgrid .table-container table.table tbody tr:hover': {\r\n '& td': {\r\n borderRight: '1px solid #fff',\r\n },\r\n },\r\n '.brand-page .bingadsgrid': {\r\n paddingRight: 32,\r\n },\r\n '.brand-page .container-fluid': {\r\n marginRight: 32,\r\n height: 56,\r\n display: 'flex',\r\n flexDirection: 'column',\r\n justifyContent: 'center',\r\n },\r\n '.brand-page .top-grid-form': {\r\n maxWidth: 'none',\r\n },\r\n '.grid-header-text': {\r\n whiteSpace: 'nowrap',\r\n },\r\n '.show-brand-dropdown': {\r\n border: 'none',\r\n background: 'none',\r\n width: 17,\r\n '&:hover, &:focus, &:active, &:visited': {\r\n 'background-color': 'white',\r\n border: '1px solid #EDEBE9',\r\n },\r\n },\r\n '.brand-dropdown': {\r\n position: 'absolute',\r\n 'font-weight': 600,\r\n height: 32,\r\n 'line-height': 1.5,\r\n 'min-width': 80,\r\n outline: 'transparent',\r\n padding: '0px 20px',\r\n 'text-decoration': 'none',\r\n border: '1px solid #EDEBE9',\r\n 'background-color': 'white',\r\n '&:active, &:focus': {\r\n 'background-color': 'white',\r\n border: '1px solid #EDEBE9',\r\n },\r\n '&:hover': {\r\n 'background-color': '#FDFBF9',\r\n },\r\n },\r\n '.delete-brand': {\r\n background: 'none',\r\n 'vertical-align': 'middle',\r\n '&:active, &:focus, &:hover': {\r\n border: 'none',\r\n },\r\n },\r\n }),\r\n });\r\n\r\nclass Brands extends React.PureComponent {\r\n constructor(props) {\r\n super(props);\r\n const {\r\n serverContext,\r\n scope,\r\n preferenceService,\r\n permissions,\r\n crossPageSelectPlugin,\r\n toolbarPlugin,\r\n onGridInjected,\r\n showTopOfGridPanel,\r\n currentCampaign,\r\n currentAdGroup,\r\n siteMap,\r\n perfMarker,\r\n classes,\r\n } = props;\r\n\r\n this.classes = classes;\r\n\r\n this.state = {\r\n backboneGridView: null,\r\n addBrandPanel: {\r\n isOpenAddBrandPanel: false,\r\n displayName: '',\r\n },\r\n };\r\n this.columnAction = noop;\r\n this.chartView = null;\r\n this.viewport = React.createRef();\r\n\r\n const brandsGridPromise = createBrandsGridForUiNext({\r\n crossPageSelectPlugin,\r\n serverContext,\r\n scope,\r\n preferenceService,\r\n permissions,\r\n toolbarPlugin,\r\n currentCampaign,\r\n currentAdGroup,\r\n siteMap,\r\n perfMarker,\r\n });\r\n\r\n const BrandsGridView = React.lazy(() => { // eslint-disable-line arrow-body-style\r\n return brandsGridPromise.then(({ gridView, i18n }) => {\r\n this.GRID_EVENT_NAMES = gridView.EVENT_NAMES;\r\n this.brandGrid = gridView;\r\n this.gridView = gridView.grid.gridView;\r\n this.bindGridEvents();\r\n gridView.overrideWith = showTopOfGridPanel; // eslint-disable-line no-param-reassign\r\n onGridInjected({\r\n backboneGridView: gridView,\r\n deselectAll: gridView.grid.gridView.deselectAll.bind(gridView.grid.gridView),\r\n });\r\n this.i18n = i18n;\r\n\r\n this.setState({ backboneGridView: gridView });\r\n\r\n return {\r\n default: () => (),\r\n };\r\n });\r\n });\r\n\r\n this.productFeedGrid = ();\r\n }\r\n\r\n componentWillUnmount() {\r\n if (this.gridView) {\r\n this.gridView.off(this.GRID_EVENT_NAMES.SHOW_ADD_BRAND_PANEL, this.showAddBrandPanel);\r\n }\r\n }\r\n\r\n bindGridEvents = () => {\r\n if (this.gridView) {\r\n this.gridView.on(this.GRID_EVENT_NAMES.SHOW_ADD_BRAND_PANEL, this.showAddBrandPanel);\r\n }\r\n };\r\n\r\n showAddBrandPanel = ({\r\n displayName,\r\n }) => {\r\n this.setState({\r\n addBrandPanel: {\r\n isOpenAddBrandPanel: true,\r\n displayName,\r\n },\r\n });\r\n };\r\n\r\n closeAddBrandPanel = () => {\r\n this.setState({\r\n addBrandPanel: {\r\n isOpenAddBrandPanel: false,\r\n },\r\n });\r\n };\r\n\r\n render() {\r\n const {\r\n panelView,\r\n renderToolbarContainer,\r\n showTopGridPanel,\r\n i18n,\r\n } = this.props;\r\n\r\n const topGridPanel = showTopGridPanel ? (\r\n ) : null;\r\n\r\n const topOfGridContent = (\r\n \r\n \r\n {topGridPanel}\r\n \r\n );\r\n\r\n const stickyTopOfGridContent = (\r\n \r\n {renderToolbarContainer()}\r\n \r\n );\r\n\r\n return (\r\n }>\r\n \r\n {this.state.addBrandPanel ? : null}\r\n \r\n );\r\n }\r\n}\r\n\r\nBrands.propTypes = {\r\n location: PropTypes.shape({\r\n pathname: PropTypes.string.isRequired,\r\n search: PropTypes.string.isRequired,\r\n }).isRequired,\r\n serverContext: PropTypes.shape({\r\n CurrentCustomer: PropTypes.object.isRequired,\r\n }).isRequired,\r\n classes: PropTypes.shape({\r\n gridContainer: PropTypes.string,\r\n inlineChartContainer: PropTypes.string.isRequired,\r\n pageContainer: PropTypes.string.isRequired,\r\n topGridPanelCustomStyles: PropTypes.object, // eslint-disable-line react/forbid-prop-types\r\n }).isRequired,\r\n scope: PropTypes.shape({}).isRequired,\r\n preferenceService: PropTypes.shape({}).isRequired,\r\n permissions: PropTypes.shape({}).isRequired,\r\n currentCampaign: PropTypes.shape({}).isRequired,\r\n currentAdGroup: PropTypes.shape({}).isRequired,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }).isRequired,\r\n renderToolbarContainer: PropTypes.func.isRequired,\r\n crossPageSelectPlugin: PropTypes.shape({\r\n plugin: PropTypes.func.isRequired,\r\n }).isRequired,\r\n toolbarPlugin: PropTypes.shape({\r\n plugin: PropTypes.func.isRequired,\r\n }).isRequired,\r\n panelView: PropTypes.shape({\r\n render: PropTypes.func,\r\n }).isRequired,\r\n onGridInjected: PropTypes.func.isRequired,\r\n showTopGridPanel: PropTypes.bool.isRequired,\r\n showTopOfGridPanel: PropTypes.func.isRequired,\r\n siteMap: PropTypes.arrayOf(PropTypes.shape({\r\n id: PropTypes.string,\r\n })).isRequired,\r\n perfMarker: perfMarkerPropTypes.isRequired,\r\n};\r\n\r\nBrands.defaultProps = {\r\n};\r\n\r\nexport const StyledBrand = compose(\r\n withI18nConsumer,\r\n WrappedComponent => withDefaultStyles(WrappedComponent, getBrandGridViewStyles),\r\n withCurrentExpandedScope,\r\n withTablePageStateManager({ getToolbarConfig })\r\n)(Brands);\r\n","export function getToolbarConfig({\r\n i18n,\r\n lazyInject,\r\n}) {\r\n // eslint-disable-next-line\r\n const toolbarSelectedConfig = new Map([\r\n\r\n ]);\r\n\r\n // eslint-disable-next-line\r\n const toolbarUnselectedConfig = new Map([\r\n ['button-add-brand', {\r\n id: 'button-add-brand',\r\n type: 'button',\r\n classes: ['btn-primary'],\r\n text: i18n.getString(_TL_('Add')),\r\n iconLeftGlyphName: 'ba-Add',\r\n onClick() {\r\n const gridView = lazyInject().backboneGridView;\r\n gridView.AddBrandToolbar();\r\n },\r\n }],\r\n ]);\r\n return {\r\n toolbarSelectedConfig,\r\n toolbarUnselectedConfig,\r\n };\r\n}\r\n","import PropTypes from 'prop-types';\r\n\r\nexport const getEstimatedMonthlyBudgetStyles = () => {\r\n const budgetMonthly = {\r\n marginTop: '16px',\r\n overflowWrap: 'break-word',\r\n wordBreak: 'break-word',\r\n fontWeight: '600',\r\n fontSize: '14px',\r\n lineHeight: '20px',\r\n };\r\n\r\n return {\r\n budgetMonthly,\r\n };\r\n};\r\n\r\nexport const classesProps = PropTypes.shape({\r\n budgetMonthly: PropTypes.string,\r\n});\r\n","import PropTypes from 'prop-types';\r\n\r\nexport const getBudgetInputStyles = () => {\r\n const budgetDetailsContainer = {\r\n display: 'flex',\r\n };\r\n\r\n const dropdownContainer = {\r\n marginLeft: '12px',\r\n };\r\n\r\n const budgetInputContainer = {\r\n display: 'inline-block',\r\n flex: 1,\r\n maxWidth: '280px',\r\n '& input': {\r\n height: '32px',\r\n },\r\n '& [role=alert]': {\r\n display: 'none', // we use custom ErrorMessages component\r\n },\r\n };\r\n\r\n const isInvalid = {\r\n border: '1px solid #a4262c',\r\n };\r\n\r\n const inline = {\r\n display: 'inline-block',\r\n '& button': {\r\n display: 'flex',\r\n fontWeight: 200,\r\n width: '86px',\r\n height: '32px',\r\n lineHeight: '32px',\r\n textAlign: 'left',\r\n },\r\n };\r\n\r\n const budgetTitle = {\r\n fontSize: '14px',\r\n lineHeight: '19px',\r\n marginBottom: '7px',\r\n fontWeight: '600',\r\n '& label': {\r\n marginRight: '3px',\r\n padding: 'inherit',\r\n },\r\n };\r\n\r\n const inputText = {\r\n '-moz-appearance': 'textfield',\r\n\r\n '&::-webkit-outer-spin-button': {\r\n '-webkit-appearance': 'none',\r\n margin: 0,\r\n },\r\n '&::-webkit-inner-spin-button': {\r\n '-webkit-appearance': 'none',\r\n margin: 0,\r\n },\r\n };\r\n\r\n const currencyText = {\r\n fontWeight: 200,\r\n padding: '5px 0 0 10px',\r\n };\r\n\r\n const budgetInputError = {\r\n fontSize: 12,\r\n color: '#A80000',\r\n };\r\n\r\n return {\r\n budgetDetailsContainer,\r\n budgetInputContainer,\r\n budgetTitle,\r\n currencyText,\r\n dropdownContainer,\r\n inline,\r\n inputText,\r\n isInvalid,\r\n budgetInputError,\r\n };\r\n};\r\n\r\nexport const classesProps = PropTypes.shape({\r\n budgetDetailsContainer: PropTypes.string,\r\n budgetInputContainer: PropTypes.string,\r\n budgetTitle: PropTypes.string,\r\n currencyText: PropTypes.string,\r\n dropdownContainer: PropTypes.string,\r\n inline: PropTypes.string,\r\n inputText: PropTypes.string,\r\n isInvalid: PropTypes.string,\r\n});\r\n","import React from 'react';\r\nimport _ from 'underscore';\r\nimport PropTypes from 'prop-types';\r\nimport { Dropdown } from '@bingads-webui-react/fabric-with-signal';\r\n\r\nconst dropdownStyles = {\r\n dropdown: { width: 160, marginLeft: '12px' },\r\n callout: { minWidth: 200 },\r\n};\r\n\r\nexport const CurrencyDropdown = ({\r\n ariaLabel, currencies, selectedCurrency, onSelectCurrency,\r\n}) => {\r\n const currencyOptions = _.map(currencies, currency => ({\r\n title: currency.text,\r\n selected: currency.Code === selectedCurrency,\r\n ...currency,\r\n }));\r\n\r\n const currentCurrencyTitle = _.find(currencyOptions, currency => currency.selected).title;\r\n\r\n return (\r\n onSelectCurrency(_.get(val, 'key'))}\r\n aria-label={ariaLabel}\r\n title={currentCurrencyTitle}\r\n />\r\n );\r\n};\r\n\r\nCurrencyDropdown.propTypes = {\r\n currencies: PropTypes.arrayOf(PropTypes.shape({})).isRequired,\r\n selectedCurrency: PropTypes.string.isRequired,\r\n onSelectCurrency: PropTypes.func.isRequired,\r\n ariaLabel: PropTypes.string,\r\n};\r\n\r\nCurrencyDropdown.defaultProps = {\r\n ariaLabel: '',\r\n};\r\n","import React, { useContext, useCallback, useState } from 'react';\r\nimport _ from 'underscore';\r\nimport classNames from 'classnames';\r\nimport PropTypes from 'prop-types';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { LegacyI18nContext } from '@bingads-webui-react/legacy-i18n-context';\r\nimport { BudgetInput as ValidatedBudgetInput } from '@bingads-webui-react/budget-control';\r\nimport { ErrorMessages } from '@bingads-webui-react/validation';\r\nimport { getBudgetInputStyles } from './styles/get-budget-input-styles';\r\nimport { CurrencyDropdown } from './currency-dropdown';\r\n\r\nconst RANGE_STEP = 0.01;\r\n\r\nexport const BudgetInput = ({\r\n budgetValue,\r\n currencies,\r\n selectedCurrency,\r\n showDropdown,\r\n isCurrencyDisabled,\r\n onBudgetInputChange,\r\n onBudgetValidate,\r\n onRenderInlineHelp,\r\n onSelectCurrency,\r\n schema,\r\n}) => {\r\n const i18n = useContext(I18nContext);\r\n const legacyI18n = useContext(LegacyI18nContext);\r\n const classes = useDefaultStyles(getBudgetInputStyles);\r\n const maxBudget = _.get(schema, ['properties', 'budget', 'maximum']);\r\n const minBudget = _.get(schema, ['properties', 'budget', 'minimum']);\r\n const schemaName = _.get(schema, 'name');\r\n\r\n const onRenderCurrencyDropDown =\r\n useCallback(() => (\r\n ), [currencies, selectedCurrency, onSelectCurrency, i18n]);\r\n\r\n const [budgetError, setBudgetError] = useState([]);\r\n const [isBudgetValid, setIsBudgetValid] = useState(false);\r\n\r\n const customErrorProcessor = useCallback(errors => _.map(\r\n errors,\r\n (oldError, key) => {\r\n const customErrors = {\r\n decimalLength: i18n.getString(_TL_('Budget needs to be set to 2 decimal lengths')),\r\n range: i18n.getString(_TL_('Your budget should be greater than {{accountCurrencyCode}} {{dailyRangeFloorValue}} and less than your daily maximum. The daily max. is your monthly budget averaged out over the number of days left in the month.'), {\r\n accountCurrencyCode: selectedCurrency,\r\n dailyRangeFloorValue: minBudget,\r\n }),\r\n required: i18n.getString(_TL_('This field is required')),\r\n type: i18n.getString(_TL_('Field requires numeric value')),\r\n };\r\n return customErrors[key] || oldError;\r\n }\r\n ), [i18n, minBudget, selectedCurrency]);\r\n\r\n const onBudgetInputValidate = useCallback(({ data, isValid, messages }) => {\r\n setIsBudgetValid(isValid);\r\n setBudgetError(messages);\r\n onBudgetValidate({ data, isValid, messages });\r\n }, [onBudgetValidate]);\r\n\r\n return (\r\n \r\n \r\n {!_.isEmpty(budgetError) ?\r\n : null}\r\n \r\n );\r\n};\r\n\r\nBudgetInput.propTypes = {\r\n budgetValue: PropTypes.string.isRequired,\r\n currencies: PropTypes.arrayOf(PropTypes.shape({})).isRequired,\r\n selectedCurrency: PropTypes.string.isRequired,\r\n showDropdown: PropTypes.bool.isRequired,\r\n isCurrencyDisabled: PropTypes.bool.isRequired,\r\n onBudgetInputChange: PropTypes.func.isRequired,\r\n onBudgetValidate: PropTypes.func.isRequired,\r\n onRenderInlineHelp: PropTypes.func,\r\n onSelectCurrency: PropTypes.func.isRequired,\r\n budgetSuggestion: PropTypes.shape({\r\n GlobalMaximumBudget: PropTypes.shape({\r\n DailyBudget: PropTypes.number.isRequired,\r\n }),\r\n GlobalMinimumBudget: PropTypes.shape({\r\n DailyBudget: PropTypes.number.isRequired,\r\n }),\r\n }).isRequired,\r\n schema: PropTypes.shape({\r\n name: PropTypes.string,\r\n type: PropTypes.string,\r\n properties: PropTypes.shape(),\r\n }),\r\n};\r\n\r\nBudgetInput.defaultProps = {\r\n schema: undefined,\r\n onRenderInlineHelp: _.noop,\r\n};\r\n","export const DAYS_OF_MONTH = 30.4; // 30.4 days on average\r\n\r\nexport const FALLBACK_ESTIMATES = {\r\n IsLimitedEstimates: true,\r\n GlobalMinimumBudget: {\r\n DailyBudget: 2, MonthlyBudget: 40,\r\n },\r\n MinimumBudget: {\r\n DailyBudget: 2, MonthlyBudget: 40,\r\n },\r\n CompetitorBudgetLowerBound: {\r\n DailyBudget: 20,\r\n },\r\n SuggestedBudget: {\r\n DailyBudget: 10, MonthlyBudget: 200,\r\n },\r\n CompetitorBudgetUpperBound: {\r\n DailyBudget: 40,\r\n },\r\n MaximumBudget: {\r\n DailyBudget: 200, MonthlyBudget: 4000,\r\n },\r\n GlobalMaximumBudget: {\r\n DailyBudget: 500, MonthlyBudget: 10000,\r\n },\r\n Currency: 'USD',\r\n};\r\n\r\n\r\nexport const currencyStrings = {\r\n ALL: _TL_('Albanian Lek (ALL)'),\r\n AED: _TL_('United Arab Emirates Dirham (AED)'),\r\n ARS: _TL_('Argentine Peso (ARS)'),\r\n AMD: _TL_('Armenian Dram (AMD)'),\r\n AUD: _TL_('Australian Dollar (AUD)'),\r\n AZN: _TL_('Azerbaijani Manat (AZN)'),\r\n BHD: _TL_('Bahraini Dinar (BHD)'),\r\n BDT: _TL_('Bangladeshi Taka (BDT)'),\r\n BZD: _TL_('Belize Dollar (BZD)'),\r\n BOB: _TL_('Bolivian Boliviano (BOB)'),\r\n BWP: _TL_('Botswanan Pula (BWP)'),\r\n BRL: _TL_('Brazilian Real (BRL)'),\r\n GBP: _TL_('UK Pound (GBP)'),\r\n BND: _TL_('Brunei Dollar (BND)'),\r\n BGN: _TL_('Bulgarian Lev (BGN)'),\r\n CAD: _TL_('Canadian Dollar (CAD)'),\r\n CHF: _TL_('Swiss Franc (CHF)'),\r\n CLP: _TL_('Chilean Peso (CLP)'),\r\n CNY: _TL_('Yuan Renminbi (CNY)'),\r\n COP: _TL_('Colombian Peso (COP)'),\r\n CRC: _TL_('Costa Rican Colón (CRC)'),\r\n CZK: _TL_('Czech Republic Koruna (CZK)'),\r\n DKK: _TL_('Danish Krone (DKK)'),\r\n DOP: _TL_('Dominican Peso (DOP)'),\r\n DZD: _TL_('Algerian Dinar (DZD)'),\r\n XCD: _TL_('East Caribbean Dollar (XCD)'),\r\n EGP: _TL_('Egyptian Pound (EGP)'),\r\n ETB: _TL_('Ethiopian Birr (ETB)'),\r\n EUR: _TL_('Euro (EUR)'),\r\n FJD: _TL_('Fijian Dollar (FJD)'),\r\n GEL: _TL_('Georgian Lari (GEL)'),\r\n GHS: _TL_('Ghanian Cedi (GHS)'),\r\n GTQ: _TL_('Guatemalan Quetzal (GTQ)'),\r\n HNL: _TL_('Honduran Lempira (HNL)'),\r\n HKD: _TL_('Hong Kong Dollar (HKD)'),\r\n HRK: _TL_('Croatian Kuna (HRK)'),\r\n HUF: _TL_('Hungarian Forint (HUF)'),\r\n ISK: _TL_('Icelandic Króna (ISK)'),\r\n INR: _TL_('Indian Rupee (INR)'),\r\n IDR: _TL_('Indonesian Rupiah (IDR)'),\r\n IQD: _TL_('Iraqi Dinar (IQD)'),\r\n ILS: _TL_('Israeli New Shekel (ILS)'),\r\n JMD: _TL_('Jamaican Dollar (JMD)'),\r\n JPY: _TL_('Japanese Yen (JPY)'),\r\n JOD: _TL_('Jordanian Dinar (JOD)'),\r\n KZT: _TL_('Kazakhstani Tenge (KZT)'),\r\n KES: _TL_('Kenyan Shilling (KES)'),\r\n KWD: _TL_('Kuwaiti Dinar (KWD)'),\r\n KGS: _TL_('Kyrgyzstani Som (KGS)'),\r\n KRW: _TL_('South Korea Won (KRW)'),\r\n LBP: _TL_('Lebanese Pound (LBP)'),\r\n LKR: _TL_('Sri Lankan Rupee (LKR)'),\r\n LYD: _TL_('Libyan Dinar (LYD)'),\r\n MOP: _TL_('Macanese Pataca (MOP)'),\r\n MKD: _TL_('Macedonian Denar (MKD)'),\r\n MWK: _TL_('Malawi Kwacha (MWK)'),\r\n MYR: _TL_('Malaysian Ringgit (MYR)'),\r\n MVR: _TL_('Maldivian Rufiyaa (MVR)'),\r\n MUR: _TL_('Mauritian Rupee (MUR)'),\r\n MXN: _TL_('Mexican Peso (MXN)'),\r\n MNT: _TL_('Mongolian Tugrik (MNT)'),\r\n MAD: _TL_('Moroccan Dirham (MAD)'),\r\n NZD: _TL_('New Zealand Dollar (NZD)'),\r\n NIO: _TL_('Nicaraguan Córdoba (NIO)'),\r\n NGN: _TL_('Nigerian Naira (NGN)'),\r\n NOK: _TL_('Norwegian Krone (NOK)'),\r\n OMR: _TL_('Omani Rial (OMR)'),\r\n PKR: _TL_('Pakistani Rupee (PKR)'),\r\n PAB: _TL_('Panamian Balboa (PAB)'),\r\n PYG: _TL_('Paraguayan Guarani (PYG)'),\r\n PEN: _TL_('Peruvian Nuevo Sol (PEN)'),\r\n PHP: _TL_('Philippine Peso (PHP)'),\r\n PLN: _TL_('Polish Zloty (PLN)'),\r\n QAR: _TL_('Qatari Riyal (QAR)'),\r\n RON: _TL_('Romanian Leu (RON)'),\r\n RSD: _TL_('Serbian Dinar (RSD)'),\r\n RUB: _TL_('Russian Ruble (RUB)'),\r\n RWF: _TL_('Rwandan Franc (RWF)'),\r\n SAR: _TL_('Saudi Riyal (SAR)'),\r\n SEK: _TL_('Swedish Krona (SEK)'),\r\n SGD: _TL_('Singapore Dollar (SGD)'),\r\n TZS: _TL_('Tanzanian Shilling (TZS)'),\r\n THB: _TL_('Thai Baht (THB)'),\r\n TOP: _TL_('Tongan Pa\\'anga (TOP)'),\r\n TTD: _TL_('Trinidad and Tobago Dollar (TTD)'),\r\n TND: _TL_('Tunisian Dinar (TND)'),\r\n TRY: _TL_('Turkish Lira (TRY)'),\r\n TWD: _TL_('New Taiwan Dollar (TWD)'),\r\n UGX: _TL_('Ugandan Shilling (UGX)'),\r\n UAH: _TL_('Ukrainian Hryvnia (UAH)'),\r\n UYU: _TL_('Uruguayan Peso (UYU)'),\r\n USD: _TL_('US Dollar (USD)'),\r\n UZS: _TL_('Uzbekistani Som (UZS)'),\r\n VEF: _TL_('Venezuelan Bolivar (VEF)'),\r\n VES: _TL_('Sovereign Bolivar (VES)'),\r\n VND: _TL_('Dong (VND)'),\r\n XAF: _TL_('Central African CFA Franc (XAF)'),\r\n XOF: _TL_('West African CFA Franc (XOF)'),\r\n YER: _TL_('Yemeni Rial (YER)'),\r\n ZAR: _TL_('South African Rand (ZAR)'),\r\n ZMW: _TL_('Zambian Kwacha (ZMW)'),\r\n};\r\n","import PropTypes from 'prop-types';\r\n\r\nexport const getSliderStyles = () => {\r\n const sliderContainer = {\r\n position: 'relative',\r\n maxWidth: '400px',\r\n marginTop: '27px',\r\n marginBottom: '16px',\r\n };\r\n\r\n const sliderOverlay = {\r\n position: 'absolute',\r\n width: '100%',\r\n backgroundColor: '#CFE4FA',\r\n border: '1px solid #0F6CBD',\r\n top: '6px',\r\n height: '15px',\r\n '@media screen and (-ms-high-contrast: active) , (forced-colors: active) ': {\r\n border: '8px solid #BB4D38',\r\n top: '5px',\r\n 'forced-color-adjust': 'none',\r\n },\r\n zIndex: '-1',\r\n borderRadius: '2px',\r\n };\r\n\r\n const paragraph = {\r\n fontSize: '12px',\r\n };\r\n\r\n const competitorHelpText = {\r\n ...paragraph,\r\n flexDirection: 'row',\r\n display: 'inline-flex',\r\n verticalAlign: 'top',\r\n };\r\n\r\n const competitorHelpIndicator = {\r\n backgroundColor: '#CFE4FA',\r\n border: '1px solid #0F6CBD',\r\n width: '12px !important',\r\n height: '12px',\r\n flexDirection: 'row',\r\n display: 'inline-flex',\r\n borderRadius: '2px',\r\n marginRight: '8px',\r\n };\r\n\r\n\r\n return {\r\n sliderContainer,\r\n sliderOverlay,\r\n competitorHelpIndicator,\r\n competitorHelpText,\r\n };\r\n};\r\n\r\nexport const classesProps = PropTypes.shape({\r\n sliderContainer: PropTypes.shape({}),\r\n sliderOverlay: PropTypes.shape({}),\r\n slider: PropTypes.shape({}),\r\n competitorHelpIndicator: PropTypes.shape({}),\r\n competitorHelpText: PropTypes.shape({}),\r\n paragraph: PropTypes.shape({}),\r\n});\r\n\r\nexport const sliderStyles = {\r\n activeSection: {\r\n backgroundColor: '#0F6CBD',\r\n },\r\n inactiveSection: {\r\n backgroundColor: '#616161 !important',\r\n },\r\n thumb: {\r\n border: '2px solid white !important',\r\n outline: '1px solid #c8c6c4',\r\n height: '16px',\r\n width: '16px',\r\n background: '#0F6CBD',\r\n cursor: 'pointer',\r\n },\r\n};\r\n","import React, { useMemo, useCallback } from 'react';\r\nimport _ from 'underscore';\r\nimport PropTypes from 'prop-types';\r\nimport classNames from 'classnames';\r\nimport { Slider as FluentSlider } from '@fluentui/react';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { CompetitorSliderView } from '@bingads-webui-react/budget-control';\r\nimport { FALLBACK_ESTIMATES } from './consts';\r\nimport { getSliderStyles, sliderStyles } from './styles/get-slider-styles';\r\n\r\nconst RANGE_STEP = 0.01;\r\n\r\nexport const Slider = ({\r\n ariaLabel,\r\n budgetValue,\r\n onBudgetSliderChange,\r\n budgetSuggestion,\r\n showCompetitorSlider,\r\n}) => {\r\n const classes = useDefaultStyles(getSliderStyles);\r\n\r\n const budgetSuggestionWithFallback = useMemo(() => (\r\n _.isEmpty(budgetSuggestion) ? FALLBACK_ESTIMATES :\r\n budgetSuggestion\r\n ), [budgetSuggestion]);\r\n\r\n const onChange = useCallback((val) => {\r\n const stringifiedValue = val && val.toString();\r\n if (stringifiedValue) {\r\n return onBudgetSliderChange(stringifiedValue);\r\n }\r\n return _.noop;\r\n }, [onBudgetSliderChange]);\r\n\r\n return (\r\n
\r\n \r\n\r\n {\r\n showCompetitorSlider && budgetSuggestion &&\r\n { /* TODO */ }}\r\n />\r\n }\r\n
\r\n );\r\n};\r\n\r\nSlider.propTypes = {\r\n ariaLabel: PropTypes.string,\r\n onBudgetSliderChange: PropTypes.func.isRequired,\r\n budgetValue: PropTypes.string.isRequired,\r\n showCompetitorSlider: PropTypes.bool,\r\n budgetSuggestion: PropTypes.shape({}),\r\n};\r\n\r\nSlider.defaultProps = {\r\n ariaLabel: '',\r\n showCompetitorSlider: true,\r\n budgetSuggestion: undefined,\r\n};\r\n\r\n","import _ from 'underscore';\r\nimport { currencyStrings } from './consts';\r\n\r\nexport const serializeCurrencies = (supportedCurrencies, i18n) =>\r\n _.map(supportedCurrencies, (currency) => {\r\n const Code = _.get(currency, ['value', 'Code']);\r\n const Id = _.get(currency, ['value', 'Id']);\r\n\r\n return {\r\n Code,\r\n Id,\r\n currency: Code,\r\n currencyLocalizationKey: currencyStrings && i18n.getString(currencyStrings[Code]),\r\n key: Code,\r\n text: currencyStrings && i18n.getString(currencyStrings[Code]),\r\n };\r\n });\r\n\r\n","import PropTypes from 'prop-types';\r\n\r\nexport const getShimmerStyles = () => {\r\n const shimmerContainer = {\r\n padding: '15px 0',\r\n root: { margin: '5px' },\r\n '& .height-15 .ms-Shimmer-shimmerWrapper': {\r\n height: '15px',\r\n },\r\n '& .height-22 .ms-Shimmer-shimmerWrapper': {\r\n height: '22px',\r\n },\r\n '& .height-33 .ms-Shimmer-shimmerWrapper': {\r\n height: '33px',\r\n },\r\n '& .height-40 .ms-Shimmer-shimmerWrapper': {\r\n height: '40px',\r\n },\r\n };\r\n\r\n return {\r\n shimmerContainer,\r\n };\r\n};\r\n\r\nexport const classesProps = PropTypes.shape({\r\n shimmerContainer: PropTypes.string,\r\n});\r\n","import React from 'react';\r\nimport classNames from 'classnames';\r\nimport { Stack, Shimmer } from '@fluentui/react';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { getShimmerStyles } from './styles/get-shimmer-styles';\r\n\r\nexport const BudgetShimmer = () => {\r\n const classes = useDefaultStyles(getShimmerStyles);\r\n\r\n return (\r\n
\r\n \r\n \r\n \r\n \r\n \r\n
);\r\n};\r\n","import React, { useCallback, useContext, useEffect, useMemo, useState } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport _ from 'underscore';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { EstimatedMonthlyBudget } from '@bingads-webui-react/budget-control';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\n\r\nimport { getEstimatedMonthlyBudgetStyles } from './styles/get-estimated-monthly-budget-styles';\r\nimport { BudgetInput } from './budget-input';\r\nimport { Slider } from './slider';\r\nimport { serializeCurrencies } from './serialize-currencies';\r\nimport { getMonthlyBudget } from './helpers';\r\nimport { BudgetShimmer } from './budget-shimmer';\r\n\r\nexport const BudgetComponent = ({\r\n showDropdown,\r\n currencies,\r\n currency,\r\n onCurrencyChange,\r\n budget,\r\n onBudgetChange,\r\n // TODO: Better make this props straightforward and split it\r\n budgetSuggestion,\r\n isLoading,\r\n logger,\r\n onNotifyValidation,\r\n onRenderInlineHelp,\r\n withSlider,\r\n}) => {\r\n const i18n = useContext(I18nContext);\r\n const classes = useDefaultStyles(getEstimatedMonthlyBudgetStyles);\r\n\r\n const budgetSchema = useMemo(() => ({\r\n name: `Product Schema ${_.get(budgetSuggestion, ['Currency'])}`,\r\n type: 'object',\r\n properties: {\r\n budget: {\r\n type: 'number',\r\n required: true,\r\n maximum: _.get(budgetSuggestion, ['GlobalMaximumBudget', 'DailyBudget']),\r\n minimum: _.get(budgetSuggestion, ['GlobalMinimumBudget', 'DailyBudget']),\r\n },\r\n },\r\n }), [budgetSuggestion]);\r\n\r\n const serializedCurrencies = useMemo(() => serializeCurrencies(currencies, i18n), [currencies, i18n]);\r\n const [monthlyBudget, setMonthlyBudget] = useState();\r\n\r\n const onBudgetInputChange = useCallback((e) => {\r\n const value = _.get(e, ['target', 'value']);\r\n onBudgetChange(value);\r\n logger.trace(`[Budget] Budget amount updated: ${value}`);\r\n }, [logger, onBudgetChange]);\r\n\r\n const onBudgetSliderChange = useCallback((val) => {\r\n const shouldLocalize = true;\r\n onBudgetChange(val, shouldLocalize);\r\n // budget value change by slider should always be valid\r\n onNotifyValidation({ isValid: true });\r\n }, [onBudgetChange, onNotifyValidation]);\r\n\r\n const onBudgetInputValidate = useCallback(({ data, isValid, messages }) => {\r\n onNotifyValidation({ data, isValid, messages });\r\n }, [onNotifyValidation]);\r\n\r\n const onSelectCurrency = useCallback((val) => {\r\n onCurrencyChange(val);\r\n logger.trace(`[Budget] Currency updated: ${val}`);\r\n }, [logger, onCurrencyChange]);\r\n\r\n useEffect(() => {\r\n const monthlyBudgetValue = budget && getMonthlyBudget(i18n.parseDecimal(budget));\r\n const formattedMonthyBudget = monthlyBudgetValue && i18n.formatDecimal(monthlyBudgetValue, {\r\n minimumFractionDigits: 2,\r\n maximumFractionDigits: 2,\r\n });\r\n\r\n if (!_.isNaN(formattedMonthyBudget)) {\r\n setMonthlyBudget(formattedMonthyBudget);\r\n } else {\r\n setMonthlyBudget('-');\r\n }\r\n }, [budget, i18n]);\r\n\r\n return (\r\n isLoading ?\r\n :\r\n
\r\n \r\n {withSlider &&\r\n \r\n }\r\n \r\n
\r\n );\r\n};\r\n\r\nBudgetComponent.propTypes = {\r\n showDropdown: PropTypes.bool,\r\n logger: PropTypes.shape({\r\n trace: PropTypes.func.isRequired,\r\n error: PropTypes.func.isRequired,\r\n }),\r\n currencies: PropTypes.arrayOf(PropTypes.shape({})),\r\n currency: PropTypes.string.isRequired,\r\n onCurrencyChange: PropTypes.func,\r\n budget: PropTypes.number.isRequired,\r\n onBudgetChange: PropTypes.func.isRequired,\r\n onNotifyValidation: PropTypes.func.isRequired,\r\n budgetSuggestion: PropTypes.shape({}),\r\n isLoading: PropTypes.bool,\r\n onRenderInlineHelp: PropTypes.func,\r\n withSlider: PropTypes.bool,\r\n};\r\n\r\nBudgetComponent.defaultProps = {\r\n currencies: [],\r\n onCurrencyChange: _.noop,\r\n showDropdown: false,\r\n budgetSuggestion: {},\r\n isLoading: true,\r\n logger: {\r\n trace: _.noop,\r\n error: _.noop,\r\n },\r\n onRenderInlineHelp: _.noop,\r\n withSlider: true,\r\n};\r\n","import { DAYS_OF_MONTH } from './consts';\r\n\r\nexport const getMonthlyBudget = dailyBudget => Math.floor(DAYS_OF_MONTH * dailyBudget);\r\n","import _ from 'underscore';\r\nimport { biddingStrategyTypeId } from '@bingads-webui-campaign-react/constants';\r\nimport {\r\n BudgetSuggestionTiers,\r\n ApiKeysBudgetSuggestion,\r\n BudgetDetailKeys,\r\n formatNumber,\r\n CampaignTypeToAdvertiserChannelTypeId,\r\n} from './constants';\r\n\r\nconst parseBudgetDetails = (data, i18n, currency) => {\r\n const BudgetDetails = _.mapObject(BudgetDetailKeys, (key) => {\r\n const detail = {\r\n Low: data[`${key}Low`],\r\n Mid: data[`${key}Mid`],\r\n High: data[`${key}High`],\r\n Range: `${formatNumber(data[`${key}Low`])} - ${formatNumber(data[`${key}High`])}`,\r\n };\r\n\r\n if (key === BudgetDetailKeys.CostPerConversion || key === BudgetDetailKeys.CostPerClick) {\r\n detail.Low = data[`${key}Low`];\r\n detail.Mid = data[`${key}Mid`];\r\n detail.High = data[`${key}High`];\r\n\r\n if (data[`${key}Low`] === 'INF' || data[`${key}High`] === 'INF') {\r\n detail.Range = '-';\r\n } else {\r\n detail.Range = `${i18n.formatCurrency(Math.round((data[`${key}Low`]) * 100) / 100, currency)} - ${i18n.formatCurrency(Math.round((data[`${key}High`]) * 100) / 100, currency)}`;\r\n }\r\n }\r\n\r\n if (key === BudgetDetailKeys.CTR) {\r\n detail.Low = data[`${key}LowPercent`];\r\n detail.Mid = data[`${key}MidPercent`];\r\n detail.High = data[`${key}HighPercent`];\r\n detail.Range = `${Math.round(detail.Low * 1000) / 1000}% - ${Math.round(detail.High * 1000) / 1000}%`;\r\n }\r\n\r\n return detail;\r\n });\r\n\r\n return BudgetDetails;\r\n};\r\n\r\nexport const parseBudgetSuggestionAPI = (data, i18n, currency) => {\r\n// three budget suggestion tiers\r\n// 1. Advanced (high) 2. Balanced (medium) 3. Starter (low)\r\n\r\n const suffix = 'Details';\r\n\r\n const budgetSuggestions = {};\r\n\r\n _.each(BudgetSuggestionTiers, (tier, key) => {\r\n const budgetKey = `Budget${ApiKeysBudgetSuggestion[key]}30Day`;\r\n const budgetDailyKey = `Budget${ApiKeysBudgetSuggestion[key]}Daily`;\r\n const budgetDetailsKey = `Budget${ApiKeysBudgetSuggestion[key]}${suffix}`;\r\n\r\n const BudgetDetails = parseBudgetDetails(data[budgetDetailsKey], i18n, currency);\r\n\r\n budgetSuggestions[tier] = {\r\n BudgetAmountMonthly: data[budgetKey],\r\n BudgetAmountDaily: data[budgetDailyKey] ? Math.round(data[budgetDailyKey] * 100) / 100 : Math.round(data[budgetKey] / 30.43),\r\n BudgetDetails: { ...BudgetDetails },\r\n };\r\n });\r\n return budgetSuggestions;\r\n};\r\n\r\nexport const getSuggestedBudgetAmounts = parsedBudgetSuggestionResponse =>\r\n _.map(parsedBudgetSuggestionResponse, value => value.BudgetAmountMonthly);\r\n\r\nexport const parsePerformanceEstimateAPI = (data, i18n, currency) => {\r\n const performanceEstimate = {};\r\n\r\n performanceEstimate.BudgetAmountMonthly = data.BudgetAdvertiser30Day;\r\n performanceEstimate.BudgetDetails = parseBudgetDetails(data.AdvertiserBudgetDetails, i18n, currency);\r\n\r\n return performanceEstimate;\r\n};\r\n\r\nexport const parseBudgetLandscapeAPI = (data, i18n, currency) => {\r\n const result = {};\r\n\r\n if (data && data.value && data.value.length === 0) {\r\n return result;\r\n }\r\n\r\n const budgetLandscapeData = data.value && data.value[0];\r\n\r\n result.Current = {\r\n BudgetAmountMonthly: budgetLandscapeData.BudgetCurrent,\r\n BudgetAmountDaily: budgetLandscapeData.BudgetCurrentDaily ? Math.round(budgetLandscapeData.BudgetCurrentDaily * 100) / 100 : Math.round(budgetLandscapeData.BudgetCurrent / 30.43),\r\n BudgetDetails: { ...parseBudgetDetails(budgetLandscapeData.BudgetCurrentDetails, i18n, currency) },\r\n };\r\n result.Suggested = {\r\n\r\n BudgetAmountMonthly: budgetLandscapeData.BudgetSuggested,\r\n BudgetAmountDaily: budgetLandscapeData.BudgetSuggestedDaily ? Math.round(budgetLandscapeData.BudgetSuggestedDaily * 100) / 100 : Math.round(budgetLandscapeData.BudgetSuggested / 30.43),\r\n BudgetDetails: { ...parseBudgetDetails(budgetLandscapeData.BudgetSuggestedDetails, i18n, currency) },\r\n };\r\n return result;\r\n};\r\n\r\nexport const parseViewModelToMTModelForPMax = ({\r\n campaign,\r\n assetGroup,\r\n currency,\r\n latestSuggestedBudget,\r\n isPerformanceEstimation,\r\n}) => {\r\n const {\r\n Budget,\r\n BiddingScheme,\r\n CampaignType,\r\n Languages,\r\n conversionGoals,\r\n locationTargets,\r\n } = campaign || {};\r\n\r\n const {\r\n BusinessName,\r\n Descriptions,\r\n Headlines,\r\n LongHeadlines,\r\n } = assetGroup || {};\r\n\r\n const {\r\n Amount: CurrentBudgetAmount,\r\n } = Budget || {};\r\n\r\n const {\r\n Type,\r\n TargetCpa,\r\n TargetRoas,\r\n TargetImpressionShare,\r\n MaxCpc,\r\n } = BiddingScheme || {};\r\n\r\n const {\r\n Amount: MaxCpcAmount,\r\n } = MaxCpc || {};\r\n\r\n const { goalSelection, goalScopeSelection } = conversionGoals || [];\r\n\r\n const { currentLevelSettings } = locationTargets || {};\r\n\r\n const { currentLocations } = currentLevelSettings || [];\r\n\r\n const LocationTargets = _.map(_.filter(currentLocations, location => location.CriterionType === 'Location'), location => location.Criterion.LocationCriterion.LocationId);\r\n\r\n const RadiusTargets = _.map(_.filter(currentLocations, location => location.CriterionType === 'Radius'), location => ({\r\n Radius: location.Criterion.RadiusCriterion.Radius,\r\n Latitude: location.Criterion.RadiusCriterion.Latitude,\r\n Longitude: location.Criterion.RadiusCriterion.Longitude,\r\n }));\r\n\r\n const BiddingSchemeId = biddingStrategyTypeId[Type] || biddingStrategyTypeId.MaxConversions;\r\n\r\n const GoalCategory = goalScopeSelection === 'campaign-scope' ? _.map(goalSelection, goal => goal.GoalCategory) : [];\r\n\r\n return {\r\n CampaignTypeId: CampaignTypeToAdvertiserChannelTypeId[CampaignType],\r\n BiddingSchemeId,\r\n TargetCpa: TargetCpa || null,\r\n MaxCpc: MaxCpcAmount || null,\r\n Languages,\r\n BusinessName: [BusinessName],\r\n Descriptions: _.values(Descriptions),\r\n Headlines: _.values(Headlines),\r\n LongHeadlines: _.values(LongHeadlines),\r\n GoalCategory,\r\n RadiusTargets,\r\n LocationIds: LocationTargets,\r\n CurrencyCode: currency,\r\n GetBudget: isPerformanceEstimation ? 0 : 1,\r\n RecommendedBudget: isPerformanceEstimation ? latestSuggestedBudget : null,\r\n AdvertiserBudget: isPerformanceEstimation ? Math.floor(CurrentBudgetAmount * 30.43) : null,\r\n TargetRoas: TargetRoas || null,\r\n TargetImpressionShare: TargetImpressionShare || null,\r\n Keywords: [],\r\n Age: [],\r\n };\r\n};\r\n\r\n","import _ from 'underscore';\r\nimport { CampaignTypes, biddingStrategyTypeId } from '@bingads-webui-campaign-react/constants';\r\nimport { parseViewModelToMTModelForPMax } from './api-parser';\r\n\r\nexport const MODE = {\r\n CREATION: 'CREATION',\r\n EDITING: 'EDITING',\r\n};\r\n\r\nexport const BudgetSuggestionTiers = {\r\n Advanced: 'Advanced',\r\n Balanced: 'Balanced',\r\n Starter: 'Starter',\r\n};\r\n\r\nexport const CustomBudget = 'CustomBudget';\r\n\r\nexport const BudgetSuggestionOfflineTiers = {\r\n Suggested: 'Suggested',\r\n Current: 'Current',\r\n};\r\n\r\nexport const RecommendedBudgetSuggestionTier = 'Suggested';\r\n\r\nexport const ApiKeysBudgetSuggestion = {\r\n Advanced: 'High',\r\n Balanced: 'Mid',\r\n Starter: 'Low',\r\n};\r\n\r\nexport const BudgetTierTitles = {\r\n Advanced: _TL_('Accelerated'),\r\n Balanced: _TL_('Recommended'),\r\n Starter: _TL_('Basic'),\r\n Suggested: _TL_('Recommended'),\r\n Current: _TL_('Current budget'),\r\n};\r\n\r\nexport const BudgetDetailKeys = {\r\n Impressions: 'Impressions',\r\n Clicks: 'Clicks',\r\n CTR: 'CTR',\r\n CostPerClick: 'CostPerClick',\r\n Conversions: 'Conversions',\r\n CostPerConversion: 'CostPerConversion',\r\n};\r\n\r\nexport const BudgetDetailKeysByBidType = {\r\n [biddingStrategyTypeId.MaxConversions]: [\r\n BudgetDetailKeys.Clicks,\r\n BudgetDetailKeys.Impressions,\r\n BudgetDetailKeys.Conversions,\r\n BudgetDetailKeys.CostPerConversion,\r\n ],\r\n [biddingStrategyTypeId.MaxConversionValue]: [\r\n BudgetDetailKeys.Clicks,\r\n BudgetDetailKeys.Impressions,\r\n BudgetDetailKeys.Conversions,\r\n BudgetDetailKeys.CostPerConversion,\r\n ],\r\n [biddingStrategyTypeId.MaxClicks]: [\r\n BudgetDetailKeys.Clicks,\r\n BudgetDetailKeys.Impressions,\r\n BudgetDetailKeys.CTR,\r\n BudgetDetailKeys.CostPerClick,\r\n ],\r\n [biddingStrategyTypeId.TargetImpressionShare]: [\r\n BudgetDetailKeys.Clicks,\r\n BudgetDetailKeys.Impressions,\r\n BudgetDetailKeys.CTR,\r\n BudgetDetailKeys.CostPerClick,\r\n ],\r\n [biddingStrategyTypeId.TargetCpa]: [\r\n BudgetDetailKeys.Clicks,\r\n BudgetDetailKeys.Impressions,\r\n BudgetDetailKeys.Conversions,\r\n BudgetDetailKeys.CostPerConversion,\r\n ],\r\n [biddingStrategyTypeId.TargetRoas]: [\r\n BudgetDetailKeys.Clicks,\r\n BudgetDetailKeys.Impressions,\r\n BudgetDetailKeys.Conversions,\r\n BudgetDetailKeys.CostPerConversion,\r\n ],\r\n [biddingStrategyTypeId.EnhancedCpc]: [\r\n BudgetDetailKeys.Clicks,\r\n BudgetDetailKeys.Impressions,\r\n BudgetDetailKeys.CTR,\r\n BudgetDetailKeys.CostPerClick,\r\n ],\r\n [biddingStrategyTypeId.CostPerSale]: [\r\n BudgetDetailKeys.Clicks,\r\n BudgetDetailKeys.Impressions,\r\n BudgetDetailKeys.CTR,\r\n BudgetDetailKeys.CostPerClick,\r\n ],\r\n Default: [],\r\n};\r\n\r\n\r\nexport const BudgetDetailKeysByCampaignType = {\r\n [CampaignTypes.PerformanceMax]: [\r\n BudgetDetailKeys.Clicks,\r\n BudgetDetailKeys.Impressions,\r\n BudgetDetailKeys.Conversions,\r\n BudgetDetailKeys.CostPerConversion,\r\n ],\r\n Default: [\r\n BudgetDetailKeys.Conversions,\r\n BudgetDetailKeys.CTR,\r\n BudgetDetailKeys.Impressions,\r\n BudgetDetailKeys.Clicks,\r\n ],\r\n};\r\n\r\nexport const BudgetDetailsKeysText = {\r\n [BudgetDetailKeys.Impressions]: {\r\n title: _TL_('Monthly impr.'),\r\n popupId: 'pop_BA_MonthlyImpr',\r\n },\r\n [BudgetDetailKeys.Clicks]: {\r\n title: _TL_('Monthly clicks'),\r\n popupId: 'pop_BA_MonthlyClicks',\r\n },\r\n [BudgetDetailKeys.CTR]: {\r\n title: _TL_('Avg. CTR'),\r\n popupId: 'pop_BA_AvgCTR',\r\n },\r\n [BudgetDetailKeys.CostPerClick]: {\r\n title: _TL_('Avg. CPC'),\r\n popupId: 'pop_BA_AvgCostPerClick',\r\n },\r\n [BudgetDetailKeys.Conversions]: {\r\n title: _TL_('Monthly conv.'),\r\n popupId: 'pop_BA_MonthlyConv',\r\n },\r\n [BudgetDetailKeys.CostPerConversion]: {\r\n title: _TL_('Avg. CPA'),\r\n popupId: 'pop_BA_AverageCPC',\r\n },\r\n};\r\n\r\n\r\nexport const getMatchingBudgetTierBasedOnBudget = (budgetSuggestionData, budgetAmount, mode) => {\r\n if (!budgetAmount) {\r\n return mode === MODE.CREATION ? BudgetSuggestionTiers.Balanced : BudgetSuggestionOfflineTiers.Suggested;\r\n }\r\n\r\n let matchingBudgetTier = mode === MODE.CREATION ? CustomBudget : BudgetSuggestionOfflineTiers.Suggested;\r\n\r\n if (mode === MODE.CREATION) {\r\n _.each(budgetSuggestionData, (budget, key) => {\r\n if (budget.BudgetAmountDaily === parseFloat(budgetAmount)) {\r\n matchingBudgetTier = key;\r\n }\r\n });\r\n } else {\r\n _.each(budgetSuggestionData, (budget, key) => {\r\n if (budget.BudgetAmountMonthly === parseFloat(budgetAmount)) {\r\n matchingBudgetTier = key;\r\n }\r\n });\r\n }\r\n\r\n return matchingBudgetTier;\r\n};\r\n\r\nconst parserByCampaignType = {\r\n [CampaignTypes.PerformanceMax]: parseViewModelToMTModelForPMax,\r\n Default: parseViewModelToMTModelForPMax,\r\n};\r\n\r\n\r\nexport const getParserByCampaignType = campaignType => parserByCampaignType[campaignType] || parserByCampaignType.Default;\r\n\r\nexport const formatNumber = (num) => {\r\n if (num >= 1e9) {\r\n return `${(num / 1e9).toFixed(1)}B`;\r\n } else if (num >= 1e6) {\r\n return `${(num / 1e6).toFixed(1)}M`;\r\n } else if (num >= 1e3) {\r\n return `${(num / 1e3).toFixed(1)}K`;\r\n } else if (num === 0) {\r\n return '0';\r\n }\r\n return num ? num.toString() : '';\r\n};\r\n\r\nexport const CampaignTypeToAdvertiserChannelTypeId = {\r\n [CampaignTypes.Default]: 1,\r\n [CampaignTypes.Product]: 2,\r\n [CampaignTypes.Shopping]: 3,\r\n [CampaignTypes.DynamicSearchAds]: 4,\r\n [CampaignTypes.Hotel]: 5,\r\n [CampaignTypes.Audience]: 6,\r\n [CampaignTypes.Smart]: 7,\r\n [CampaignTypes.Hotel]: 8,\r\n [CampaignTypes.PerformanceMax]: 9,\r\n};\r\n","import React, { useContext } from 'react';\r\nimport _ from 'underscore';\r\nimport PropTypes from 'prop-types';\r\nimport classNames from 'classnames';\r\nimport { Skeleton, SkeletonItem } from '@fluentui/react-components';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { useResponsiveStyles } from '@bingads-webui-campaign-react/common-hooks';\r\nimport { ValidatedBudgetInput } from '@bingads-webui-campaign-react/budget-component-v2';\r\nimport { HelpIcon } from '@bingads-webui-campaign-react/help';\r\nimport { biddingStrategyTypeId } from '@bingads-webui-campaign-react/constants';\r\nimport {\r\n BudgetTierTitles,\r\n BudgetDetailKeysByBidType,\r\n BudgetDetailsKeysText,\r\n BudgetDetailKeysByCampaignType,\r\n} from '../model/constants';\r\n\r\nconst getRadioStyles = () => ({\r\n root: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n width: '100%',\r\n },\r\n radioTitle: {\r\n fontSize: '16px',\r\n fontWeight: '600',\r\n },\r\n flexBox: {\r\n display: 'flex',\r\n flexDirection: 'row',\r\n justifyContent: 'space-between',\r\n flexWrap: 'wrap',\r\n },\r\n leftBox: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n rowGap: '5px',\r\n },\r\n budgetDay: {\r\n fontSize: '14px',\r\n fontWeight: '600',\r\n borderRight: '1px solid rgba(224, 224, 224, 1)',\r\n verticalAlign: 'middle',\r\n paddingRight: '5px',\r\n height: 20,\r\n width: 'auto',\r\n display: 'inline-block',\r\n },\r\n budgetMonth: {\r\n fontSize: '14px',\r\n fontWeight: '600',\r\n height: 20,\r\n width: 'auto',\r\n display: 'inline-block',\r\n verticalAlign: 'middle',\r\n },\r\n column: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n },\r\n metric: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n },\r\n rightBox: {\r\n display: 'grid',\r\n 'grid-template-columns': 'repeat(2, 1fr)',\r\n width: '250px',\r\n columnGap: '10px',\r\n },\r\n badge: {\r\n borderRadius: '999px',\r\n textAlign: 'center',\r\n width: 81,\r\n height: 20,\r\n border: '1px solid rgba(159, 216, 159, 1)',\r\n color: 'rgba(14, 112, 14, 1)',\r\n fontSize: '10px',\r\n fontWeight: '600',\r\n background: 'rgba(241, 250, 241, 1)',\r\n },\r\n metricTitle: {\r\n fontSize: '10px',\r\n fontWeight: '400',\r\n color: 'rgba(97, 97, 97, 1)',\r\n },\r\n metricValue: {\r\n fontWeight: '600',\r\n fontSize: '14px',\r\n },\r\n budgetDisclaimer: {\r\n width: 'auto',\r\n fontSize: '10px',\r\n color: 'rgba(112, 112, 112, 1)',\r\n marginTop: '10px',\r\n },\r\n skeletionStyle: {\r\n height: 20,\r\n width: 60,\r\n display: 'inline-block',\r\n marginRight: '5px',\r\n },\r\n});\r\n\r\nexport const Metrics = ({\r\n budgetDetails,\r\n isLoading,\r\n bidType,\r\n campaignType,\r\n}) => {\r\n const i18n = useContext(I18nContext);\r\n\r\n const getStyles = useResponsiveStyles(getRadioStyles);\r\n\r\n const budgetDetailsKeys = BudgetDetailKeysByBidType[biddingStrategyTypeId[bidType]] || BudgetDetailKeysByCampaignType[campaignType] || BudgetDetailKeysByBidType.Default;\r\n\r\n return budgetDetailsKeys.map(key => (\r\n
\r\n
\r\n \r\n {\r\n isLoading ?\r\n \r\n \r\n \r\n :\r\n <>\r\n {i18n.getString(BudgetDetailsKeysText[key].title)} \r\n \r\n \r\n }\r\n \r\n \r\n {\r\n isLoading ?\r\n \r\n \r\n \r\n : budgetDetails && budgetDetails[key].Range\r\n }\r\n \r\n
\r\n
\r\n ));\r\n};\r\n\r\nexport const BudgetItemLabel = ({\r\n tier,\r\n data,\r\n isLoading,\r\n currency,\r\n campaignType,\r\n bidType,\r\n}) => {\r\n const getStyles = useResponsiveStyles(getRadioStyles);\r\n\r\n const i18n = useContext(I18nContext);\r\n\r\n const {\r\n BudgetAmountDaily,\r\n BudgetAmountMonthly,\r\n BudgetDetails,\r\n } = data || {};\r\n\r\n return (\r\n
\r\n
\r\n
\r\n \r\n {i18n.getString(BudgetTierTitles[tier])}\r\n \r\n
\r\n \r\n {isLoading ?\r\n \r\n \r\n \r\n : `${i18n.formatCurrency(BudgetAmountDaily, currency)} /${i18n.getString(_TL_('day'))}`\r\n }\r\n \r\n  \r\n \r\n {\r\n isLoading ?\r\n \r\n \r\n \r\n : `${i18n.formatCurrency(BudgetAmountMonthly, currency)}/${i18n.getString(_TL_('month'))}`\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\nBudgetItemLabel.propTypes = {\r\n tier: PropTypes.string.isRequired,\r\n data: PropTypes.shape({}).isRequired,\r\n isLoading: PropTypes.bool.isRequired,\r\n bidType: PropTypes.string.isRequired,\r\n campaignType: PropTypes.string.isRequired,\r\n currency: PropTypes.string,\r\n};\r\n\r\nBudgetItemLabel.defaultProps = {\r\n currency: 'USD',\r\n};\r\n\r\nexport const CustomBudgetLabel = ({\r\n isSelected,\r\n currency,\r\n onUpdateCustomBudget,\r\n customPerformanceData,\r\n hidePerformanceData,\r\n customBudgetResult,\r\n bidType,\r\n defaultBudget,\r\n minBudget,\r\n campaignType,\r\n maxBudget,\r\n showDropdown,\r\n onSelectCurrency,\r\n currencies,\r\n}) => {\r\n const getStyles = useResponsiveStyles(getRadioStyles);\r\n\r\n const i18n = useContext(I18nContext);\r\n\r\n const {\r\n BudgetDetails,\r\n isLoading,\r\n } = customPerformanceData || {};\r\n\r\n return (\r\n
\r\n
\r\n
\r\n {i18n.getString(_TL_('Set your own budget'))} \r\n {\r\n isSelected && (\r\n <>\r\n \r\n \r\n )\r\n }\r\n
\r\n
\r\n {\r\n // show two metrics in a column\r\n !hidePerformanceData && isSelected &&\r\n \r\n }\r\n
\r\n
\r\n
\r\n );\r\n};\r\n\r\n\r\nCustomBudgetLabel.propTypes = {\r\n isSelected: PropTypes.bool.isRequired,\r\n currency: PropTypes.string.isRequired,\r\n bidType: PropTypes.string.isRequired,\r\n onUpdateCustomBudget: PropTypes.func.isRequired,\r\n customPerformanceData: PropTypes.shape({\r\n BudgetDetails: PropTypes.shape({}),\r\n isLoading: PropTypes.bool,\r\n }),\r\n hidePerformanceData: PropTypes.bool,\r\n defaultBudget: PropTypes.number.isRequired,\r\n campaignType: PropTypes.string.isRequired,\r\n showDropdown: PropTypes.bool,\r\n onSelectCurrency: PropTypes.func,\r\n currencies: PropTypes.arrayOf(PropTypes.shape({})),\r\n};\r\n\r\nCustomBudgetLabel.defaultProps = {\r\n hidePerformanceData: false,\r\n customPerformanceData: {\r\n BudgetDetails: {},\r\n isLoading: false,\r\n },\r\n showDropdown: false,\r\n onSelectCurrency: _.noop,\r\n currencies: [],\r\n};\r\n","import React, { useState, useEffect, useContext } from 'react';\r\nimport _ from 'underscore';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport PropTypes from 'prop-types';\r\nimport classNames from 'classnames';\r\nimport {\r\n FluentProvider,\r\n webLightTheme,\r\n RadioGroup,\r\n Radio,\r\n} from '@fluentui/react-components';\r\nimport { ValidatedBudgetInput } from '@bingads-webui-campaign-react/budget-component-v2';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { BudgetItemLabel, CustomBudgetLabel } from './budget-item';\r\nimport { BudgetSuggestionTiers, getMatchingBudgetTierBasedOnBudget, CustomBudget } from '../model/constants';\r\n\r\nconst getStyles = () => ({\r\n selectedRadio: {\r\n border: '1px solid rgba(15, 108, 189, 1)',\r\n padding: '12px, 16px, 12px, 8px',\r\n borderRadius: '4px',\r\n },\r\n radio: {\r\n width: '100%',\r\n '& .fui-Label': {\r\n width: '100%',\r\n },\r\n },\r\n radioGroup: {\r\n width: '100%',\r\n },\r\n});\r\n\r\nexport const BudgetSuggestionContainer = ({\r\n data,\r\n isLoading,\r\n mode,\r\n campaignType,\r\n currency,\r\n onBudgetValidate,\r\n customPerformanceData,\r\n defaultBudget,\r\n bidType,\r\n minBudget,\r\n maxBudget,\r\n showDropdown,\r\n onSelectCurrency,\r\n currencies,\r\n}) => {\r\n const classes = useDefaultStyles(getStyles);\r\n\r\n const [selectedBudget, setSelectedBudget] = useState(null);\r\n\r\n const [customBudgetResult, setCustomBudgetResult] = useState(null);\r\n\r\n const i18n = useContext(I18nContext);\r\n\r\n const hasError = !isLoading && _.isEmpty(data);\r\n\r\n useEffect(() => {\r\n if (!isLoading && !hasError) {\r\n if (selectedBudget && selectedBudget !== CustomBudget) {\r\n const BudgetAmount = data && data[selectedBudget] && data[selectedBudget].BudgetAmountDaily;\r\n\r\n onBudgetValidate({ data: { budget: BudgetAmount, budgetTier: selectedBudget }, isValid: true, messages: [] });\r\n } else if (customBudgetResult) {\r\n onBudgetValidate({ data: { ...customBudgetResult.data, budgetTier: selectedBudget }, isValid: customBudgetResult.isValid, messages: customBudgetResult.messages });\r\n }\r\n }\r\n\r\n if (hasError && customBudgetResult) {\r\n onBudgetValidate({ data: { ...customBudgetResult.data, budgetTier: selectedBudget }, isValid: customBudgetResult.isValid, messages: customBudgetResult.messages });\r\n }\r\n }, [customBudgetResult, hasError, data, isLoading, onBudgetValidate, selectedBudget]);\r\n\r\n\r\n useEffect(() => {\r\n const matchingTier = getMatchingBudgetTierBasedOnBudget(data, defaultBudget, mode);\r\n\r\n if (selectedBudget === null && !_.isEmpty(data) && defaultBudget) {\r\n setSelectedBudget(matchingTier);\r\n }\r\n }, [defaultBudget, data, selectedBudget, mode]);\r\n\r\n if (hasError) {\r\n return (\r\n <>\r\n \r\n \r\n );\r\n }\r\n\r\n return (\r\n \r\n
\r\n {i18n.getString(_TL_('The following budget options are based on performance estimates from businesses with similar campaigns, ad settings, and budgets.'))}\r\n
\r\n setSelectedBudget(val.value)}>\r\n {(\r\n Object.keys(BudgetSuggestionTiers).map(tier => (\r\n }\r\n checked={selectedBudget === tier}\r\n className={selectedBudget === tier ?\r\n classNames(classes.selectedRadio, classes.radio, `budget-radio-${tier}`, 'selected')\r\n : classNames(`budget-radio-${tier}`, classes.radio)}\r\n />\r\n ))\r\n )\r\n }\r\n }\r\n checked={selectedBudget === CustomBudget}\r\n className={selectedBudget === CustomBudget ?\r\n classNames(classes.selectedRadio, classes.radio, `budget-radio-${CustomBudget}`, 'selected')\r\n : classNames(`budget-radio-${CustomBudget}`, classes.radio)}\r\n />\r\n \r\n
\r\n );\r\n};\r\n\r\nBudgetSuggestionContainer.propTypes = {\r\n data: PropTypes.shape({}).isRequired,\r\n isLoading: PropTypes.bool.isRequired,\r\n mode: PropTypes.string.isRequired,\r\n campaignType: PropTypes.string.isRequired,\r\n currency: PropTypes.string.isRequired,\r\n onBudgetValidate: PropTypes.func.isRequired,\r\n customPerformanceData: PropTypes.shape({}),\r\n defaultBudget: PropTypes.number.isRequired,\r\n showDropdown: PropTypes.bool,\r\n onSelectCurrency: PropTypes.func,\r\n currencies: PropTypes.arrayOf(PropTypes.shape({})),\r\n};\r\n\r\nBudgetSuggestionContainer.defaultProps = {\r\n customPerformanceData: null,\r\n showDropdown: false,\r\n onSelectCurrency: _.noop,\r\n currencies: [],\r\n};\r\n","import React, { useState, useContext, useEffect } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classNames from 'classnames';\r\nimport _ from 'underscore';\r\nimport {\r\n FluentProvider,\r\n webLightTheme,\r\n RadioGroup,\r\n Radio,\r\n} from '@fluentui/react-components';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { BudgetItemLabel, CustomBudgetLabel } from './budget-item';\r\nimport { RecommendedBudgetSuggestionTier, getMatchingBudgetTierBasedOnBudget, CustomBudget } from '../model/constants';\r\n\r\nconst getStyles = () => ({\r\n selectedRadio: {\r\n border: '1px solid rgba(15, 108, 189, 1)',\r\n padding: '12px, 16px, 12px, 8px',\r\n borderRadius: '4px',\r\n },\r\n radioGroupContainer: {\r\n gap: '16px',\r\n width: '100%',\r\n },\r\n currentBudget: {\r\n paddingLeft: '32px',\r\n gap: '16px',\r\n borderBottom: '1px solid var(--Neutral-Stroke-2-Rest, #E0E0E0)',\r\n },\r\n budgetTitle: {\r\n fontSize: '16px',\r\n fontWeight: '600',\r\n },\r\n radio: {\r\n width: '100%',\r\n '& .fui-Label': {\r\n width: '100%',\r\n },\r\n },\r\n});\r\n\r\nexport const BudgetSuggestionOfflineContainer = ({\r\n data,\r\n isLoading,\r\n mode,\r\n campaignType,\r\n currency,\r\n onBudgetValidate,\r\n defaultBudget,\r\n bidType,\r\n minBudget,\r\n maxBudget,\r\n}) => {\r\n const classes = useDefaultStyles(getStyles);\r\n const i18n = useContext(I18nContext);\r\n\r\n const [selectedBudget, setSelectedBudget] = useState(null);\r\n\r\n const [customBudgetResult, setCustomBudgetResult] = useState(null);\r\n\r\n useEffect(() => {\r\n if (!isLoading) {\r\n if (selectedBudget !== CustomBudget) {\r\n const BudgetAmount = data && data[selectedBudget] && data[selectedBudget].BudgetAmountDaily;\r\n\r\n onBudgetValidate({ data: { budget: BudgetAmount, budgetTier: selectedBudget }, isValid: true });\r\n } else if (customBudgetResult) {\r\n onBudgetValidate({ data: { ...customBudgetResult.data, budgetTier: selectedBudget }, isValid: customBudgetResult.isValid, messages: customBudgetResult.messages });\r\n }\r\n }\r\n }, [customBudgetResult, data, isLoading, onBudgetValidate, selectedBudget]);\r\n\r\n useEffect(() => {\r\n const matchingTier = getMatchingBudgetTierBasedOnBudget(data, defaultBudget, mode);\r\n\r\n if (selectedBudget === null && data && defaultBudget) {\r\n setSelectedBudget(matchingTier);\r\n } else if (selectedBudget === null && data) {\r\n setSelectedBudget(RecommendedBudgetSuggestionTier);\r\n }\r\n }, [defaultBudget, data, selectedBudget, mode]);\r\n\r\n if (!isLoading && _.isEmpty(data)) {\r\n return (\r\n
\r\n {i18n.getString(_TL_('There are no budget suggestions available for this campaign.'))}\r\n
\r\n );\r\n }\r\n\r\n return (\r\n \r\n
\r\n
\r\n \r\n
\r\n setSelectedBudget(val.value)} className={classNames(classes.radioGroupContainer, isLoading ? 'budget-loading' : '')}>\r\n \r\n {i18n.getString(_TL_('Select new budget'))}\r\n \r\n }\r\n checked={selectedBudget === RecommendedBudgetSuggestionTier}\r\n className={\r\n selectedBudget === RecommendedBudgetSuggestionTier ?\r\n classNames(classes.selectedRadio, classes.radio, 'budget-radio-Suggested')\r\n : classNames('budget-radio-Suggested', classes.radio)}\r\n />\r\n }\r\n checked={selectedBudget === CustomBudget}\r\n className={selectedBudget === CustomBudget ?\r\n classNames(classes.selectedRadio, classes.radio, 'budget-radio-CustomBudget')\r\n : classNames('budget-radio-CustomBudget', classes.radio)}\r\n />\r\n \r\n
\r\n
\r\n );\r\n};\r\n\r\nBudgetSuggestionOfflineContainer.propTypes = {\r\n data: PropTypes.shape({\r\n Current: PropTypes.shape({\r\n BudgetAmountDaily: PropTypes.number,\r\n BudgetAmountMonthly: PropTypes.number,\r\n }),\r\n Suggested: PropTypes.shape({\r\n BudgetAmountDaily: PropTypes.number,\r\n BudgetAmountMonthly: PropTypes.number,\r\n }),\r\n }).isRequired,\r\n isLoading: PropTypes.bool.isRequired,\r\n mode: PropTypes.string.isRequired,\r\n campaignType: PropTypes.string.isRequired,\r\n onBudgetValidate: PropTypes.func.isRequired,\r\n defaultBudget: PropTypes.number.isRequired,\r\n};\r\n","import { useContext, useCallback } from 'react';\r\nimport _ from 'underscore';\r\nimport { ActivityContext } from '@bingads-webui-react/hoc-with-signal';\r\nimport { BudgetSuggestionTiers } from '../model/constants';\r\n\r\nconst formatCustomBudgetPerformanceMetrics = ({ performanceMetricsResponse }) => {\r\n const template = {};\r\n\r\n template.CustomBudgetPerformance = JSON.stringify(performanceMetricsResponse);\r\n\r\n return template;\r\n};\r\n\r\nconst formatBudgetSuggestionResponse = ({ budgetResponse }) => {\r\n const template = {};\r\n\r\n _.each(budgetResponse, (value, tier) => {\r\n const { BudgetAmountMonthly, BudgetAmountDaily, BudgetDetails } = value;\r\n\r\n template[`${tier}BudgetAmountMonthly`] = BudgetAmountMonthly;\r\n template[`${tier}BudgetAmountDaily`] = BudgetAmountDaily;\r\n template[`${tier}BudgetPerformance`] = JSON.stringify(BudgetDetails);\r\n });\r\n\r\n return template;\r\n};\r\n\r\nconst formatBudgetTemplate = ({\r\n campaign,\r\n budgetResponse,\r\n appliedBudget,\r\n budgetTier,\r\n}) => {\r\n const { Id, Budget, BiddingScheme } = campaign;\r\n\r\n const formattedBudgetResponse = formatBudgetSuggestionResponse({ budgetResponse });\r\n\r\n let tier = BudgetSuggestionTiers[budgetTier];\r\n\r\n if (budgetTier === 'CustomBudget') {\r\n tier = 'CustomBudget';\r\n }\r\n\r\n return {\r\n CampaignID: Id,\r\n CurrentBudget: Budget,\r\n BiddingStrategy: BiddingScheme,\r\n ...formattedBudgetResponse,\r\n BudgetApplied: appliedBudget,\r\n BudgetTier: tier,\r\n };\r\n};\r\n\r\nconst formatBudgetLandscapeTemplate = ({ campaign, budgetLandscapeResponse }) => {\r\n const { Id } = campaign;\r\n\r\n const template = formatBudgetSuggestionResponse({ budgetResponse: budgetLandscapeResponse });\r\n\r\n return {\r\n CampaignID: Id,\r\n ...template,\r\n };\r\n};\r\n\r\nexport const useBudgetMetricsLogger = () => {\r\n const activity = useContext(ActivityContext);\r\n\r\n const logBudgetFetchMetrics = useCallback(({\r\n campaign,\r\n budgetResponse,\r\n }) => {\r\n if (activity) {\r\n activity.trace(`[BudgetSuggestionV2][BudgetSuggestion] - ${JSON.stringify(formatBudgetTemplate({ campaign, budgetResponse }))}`);\r\n }\r\n }, [activity]);\r\n\r\n const logCustomBudgetPerformanceMetrics = useCallback(({\r\n campaign,\r\n performanceMetricsResponse,\r\n }) => {\r\n if (activity) {\r\n activity.trace(`[BudgetSuggestionV2][PerformanceMetrics] - ${JSON.stringify(formatCustomBudgetPerformanceMetrics({ campaign, performanceMetricsResponse }))}`);\r\n }\r\n }, [activity]);\r\n\r\n const logBudgetLandscapeMetrics = useCallback(({\r\n campaign,\r\n budgetLandscapeResponse,\r\n }) => {\r\n if (activity) {\r\n activity.trace(`[BudgetSuggestionV2][BudgetLandscape] - ${JSON.stringify(formatBudgetLandscapeTemplate({ campaign, budgetLandscapeResponse }))}`);\r\n }\r\n }, [activity]);\r\n\r\n const saveBudgetSuggestionMetrics = useCallback(({\r\n campaign,\r\n budgetResponse,\r\n appliedBudget,\r\n budgetTier,\r\n }) => {\r\n if (budgetTier === null && activity) {\r\n activity.trace(`[BudgetSuggestionV2][BudgetApplied][ManualInput] - ${JSON.stringify(formatBudgetTemplate({\r\n campaign,\r\n budgetResponse,\r\n appliedBudget,\r\n budgetTier,\r\n }))}`);\r\n } else if (activity) {\r\n activity.trace(`[BudgetSuggestionV2][BudgetApplied] - ${JSON.stringify(formatBudgetTemplate({\r\n campaign,\r\n budgetResponse,\r\n appliedBudget,\r\n budgetTier,\r\n }))}`);\r\n }\r\n }, [activity]);\r\n\r\n return {\r\n logBudgetFetchMetrics,\r\n logCustomBudgetPerformanceMetrics,\r\n logBudgetLandscapeMetrics,\r\n saveBudgetSuggestionMetrics,\r\n };\r\n};\r\n","import { useCallback, useContext, useRef, useMemo } from 'react';\r\nimport _ from 'underscore';\r\nimport Promise from 'bluebird';\r\nimport { ServerContext } from '@bingads-webui-campaign-react/server-context';\r\nimport { odata } from '@bingads-webui/http-util';\r\nimport { ScopeContext } from '@bingads-webui-react/scope-service';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { edmCampaign } from '@bingads-webui/edm-campaign';\r\n\r\nimport {\r\n parsePerformanceEstimateAPI,\r\n parseBudgetSuggestionAPI,\r\n parseBudgetLandscapeAPI,\r\n getSuggestedBudgetAmounts,\r\n} from './model/api-parser';\r\nimport { MODE, getParserByCampaignType } from './model/constants';\r\nimport { useBudgetMetricsLogger } from './components/use-budget-metrics-logger';\r\n\r\nexport const createOrUpdateCampaign = (data) => {\r\n const campaignEDM = edmCampaign.types.resolve('Model.ShoppingCampaign');\r\n const campaignResource = new campaignEDM.ResourceIdentifier();\r\n const createOrUpdateCall = data && data.Id ?\r\n campaignResource.bulkUpdate.bind(campaignResource) :\r\n campaignResource.bulkCreate.bind(campaignResource);\r\n return createOrUpdateCall(data);\r\n};\r\n\r\nexport const getODataConfig = (serverContext) => {\r\n const isLocal = () => {\r\n const hostname = document.location.hostname.toLowerCase();\r\n return hostname.indexOf('ads.microsoft.com') === -1 &&\r\n hostname.indexOf('ads-int.microsoft.com') === -1;\r\n };\r\n\r\n const odataPath = isLocal() ? 'AdInsight/V2' : 'AdInsight/V2';\r\n\r\n const oDataConfig = {\r\n odataToken: serverContext.Token,\r\n oDataToken: serverContext.Token,\r\n odataPath: `${serverContext.ServicesEndpoints.AdInsightAPI}${odataPath}`,\r\n oDataPath: `${serverContext.ServicesEndpoints.AdInsightAPI}${odataPath}`,\r\n };\r\n\r\n return oDataConfig;\r\n};\r\n\r\nexport const useBudgetSuggestionRepository = ({\r\n mode,\r\n campaignId,\r\n campaignType,\r\n currency,\r\n campaign,\r\n assetGroup,\r\n}) => {\r\n const serverContext = useContext(ServerContext);\r\n\r\n const { scope } = useContext(ScopeContext) || {};\r\n\r\n const i18n = useContext(I18nContext);\r\n\r\n const { aid, cid, campaignId: campaignIdFromScope } = scope.values;\r\n const currentCampaignId = campaignId || campaignIdFromScope;\r\n\r\n const { CurrentAccount: { CurrencyCode } } = serverContext;\r\n\r\n const {\r\n logBudgetFetchMetrics,\r\n logBudgetLandscapeMetrics,\r\n logCustomBudgetPerformanceMetrics,\r\n saveBudgetSuggestionMetrics,\r\n } = useBudgetMetricsLogger();\r\n\r\n const oDataConfig = useMemo(() => getODataConfig(serverContext), [serverContext]);\r\n\r\n const oDataOptions = useMemo(() => ({\r\n contentType: 'application/json',\r\n path: oDataConfig.odataPath,\r\n oDataToken: oDataConfig.odataToken,\r\n }), [oDataConfig]);\r\n\r\n const latestSuggestedBudget = useRef([]);\r\n\r\n const fetchBudgetSuggestionData = useCallback((payload) => {\r\n const baseURL = `${oDataConfig.odataPath}/Customers(${cid})/Accounts(${aid})/BudgetSuggestion.GetBudgetSuggestion`;\r\n\r\n const options = _.extend(\r\n {},\r\n oDataOptions,\r\n {\r\n url: baseURL,\r\n data: payload,\r\n }\r\n );\r\n\r\n const promise = odata.post(options);\r\n\r\n return promise.then((data) => {\r\n if (data) {\r\n const parsedBudgetSuggestion = parseBudgetSuggestionAPI(data, i18n, currency);\r\n\r\n logBudgetFetchMetrics({ campaign, budgetResponse: parsedBudgetSuggestion });\r\n latestSuggestedBudget.current = parsedBudgetSuggestion;\r\n return parsedBudgetSuggestion;\r\n }\r\n\r\n return null;\r\n });\r\n }, [aid, campaign, cid, logBudgetFetchMetrics, oDataConfig.odataPath, oDataOptions, i18n, currency]);\r\n\r\n const fetchInitialBudgetSuggestionData = useCallback(() => {\r\n const parser = getParserByCampaignType(campaignType);\r\n\r\n const payload = parser({\r\n assetGroup, campaign, campaignType, currency: currency || CurrencyCode,\r\n });\r\n\r\n return fetchBudgetSuggestionData(payload);\r\n }, [CurrencyCode, assetGroup, campaign, campaignType, currency, fetchBudgetSuggestionData]);\r\n\r\n const saveBudget = useCallback(({\r\n budgetAmount,\r\n budgetTier,\r\n biddingScheme,\r\n }) => {\r\n const modelToSave = {\r\n Id: campaignId,\r\n Budget: {\r\n Amount: i18n.parseDecimal(budgetAmount),\r\n Type: 'DailyStandard',\r\n },\r\n ...(\r\n _.isEmpty(biddingScheme) ? {} : { BiddingScheme: biddingScheme }\r\n ),\r\n };\r\n\r\n return createOrUpdateCampaign(modelToSave).then((res) => {\r\n saveBudgetSuggestionMetrics({\r\n campaign, budgetResponse: latestSuggestedBudget.current, appliedBudget: budgetAmount, budgetTier,\r\n });\r\n\r\n return res;\r\n }).catch(error =>\r\n // eslint-disable-next-line prefer-promise-reject-errors\r\n Promise.reject({ error }));\r\n }, [campaign, campaignId, i18n, saveBudgetSuggestionMetrics]);\r\n\r\n const fetchBudgetLandscapeData = useCallback(() => {\r\n const baseURL = `${oDataConfig.odataPath}/Customers(${cid})/Accounts(${aid})/Campaigns(${currentCampaignId})/Opportunity.GetUpdatedBudgetLandscape`;\r\n\r\n const promise = odata.get(baseURL, oDataConfig);\r\n\r\n return promise.then((data) => {\r\n const parsedBudgetLandscape = parseBudgetLandscapeAPI(data, i18n, currency);\r\n\r\n logBudgetLandscapeMetrics({ campaign: { Id: currentCampaignId }, budgetLandscapeResponse: parsedBudgetLandscape });\r\n\r\n return parsedBudgetLandscape;\r\n });\r\n }, [oDataConfig, cid, aid, currentCampaignId, i18n, currency, logBudgetLandscapeMetrics]);\r\n\r\n const loadBudget = useCallback(() => {\r\n if (mode === MODE.CREATION) {\r\n return fetchInitialBudgetSuggestionData();\r\n }\r\n\r\n return fetchBudgetLandscapeData();\r\n }, [fetchBudgetLandscapeData, fetchInitialBudgetSuggestionData, mode]);\r\n\r\n const fetchCustomBudgetPerformanceData = useCallback(({ budgetAmount }) => {\r\n const baseURL = `${oDataConfig.odataPath}/Customers(${cid})/Accounts(${aid})/BudgetSuggestion.GetPerformanceEstimation`;\r\n\r\n const updatedCampaign = {\r\n ...campaign,\r\n Budget: {\r\n Amount: i18n.parseDecimal(budgetAmount),\r\n },\r\n };\r\n\r\n const parser = getParserByCampaignType(campaignType);\r\n\r\n const payload = parser({\r\n assetGroup,\r\n campaign: updatedCampaign,\r\n currency: currency || CurrencyCode,\r\n latestSuggestedBudget: getSuggestedBudgetAmounts(latestSuggestedBudget.current).sort((a, b) => a - b),\r\n isPerformanceEstimation: true,\r\n });\r\n\r\n const options = _.extend(\r\n {},\r\n oDataOptions,\r\n {\r\n url: baseURL,\r\n data: payload,\r\n }\r\n );\r\n\r\n const promise = odata.post(options);\r\n\r\n return promise.then((data) => {\r\n const parsedPerformanceEstimate = parsePerformanceEstimateAPI(data, i18n, currency);\r\n\r\n logCustomBudgetPerformanceMetrics({ performanceMetricsResponse: parsedPerformanceEstimate });\r\n\r\n return parsedPerformanceEstimate;\r\n });\r\n }, [CurrencyCode, aid, assetGroup, campaign, campaignType, cid, currency, i18n, logCustomBudgetPerformanceMetrics, oDataConfig.odataPath, oDataOptions]);\r\n\r\n // only for online model.\r\n // load budget but only updating few fields in campaign object.\r\n const loadBudgetPartial = useCallback((args) => {\r\n const updatedCampaign = {\r\n ...campaign,\r\n ...args,\r\n };\r\n\r\n const parser = getParserByCampaignType(campaignType);\r\n\r\n const payload = parser({\r\n assetGroup,\r\n campaign: updatedCampaign,\r\n campaignType,\r\n currency: currency || CurrencyCode,\r\n });\r\n\r\n return fetchBudgetSuggestionData(payload);\r\n }, [CurrencyCode, assetGroup, campaign, campaignType, currency, fetchBudgetSuggestionData]);\r\n\r\n return {\r\n loadBudget,\r\n loadBudgetPartial,\r\n saveBudget,\r\n fetchCustomBudgetPerformanceData,\r\n };\r\n};\r\n","import React, { useEffect, useState, useCallback } from 'react';\r\nimport _ from 'underscore';\r\nimport PropTypes from 'prop-types';\r\nimport { BudgetSuggestionContainer } from './components/budget-suggestion-container';\r\nimport { BudgetSuggestionOfflineContainer } from './components/budget-suggestion-offline-container';\r\nimport { useBudgetSuggestionRepository } from './use-budget-suggestion-repository';\r\nimport { MODE, CustomBudget } from './model/constants';\r\n\r\nexport const BudgetSuggestion = ({\r\n mode,\r\n campaignId,\r\n campaign,\r\n assetGroup,\r\n campaignType,\r\n currency,\r\n onBudgetValidate,\r\n bidType,\r\n ...rest\r\n}) => {\r\n const { loadBudget, fetchCustomBudgetPerformanceData } = useBudgetSuggestionRepository({\r\n mode,\r\n campaignId,\r\n campaignType,\r\n currency,\r\n campaign,\r\n assetGroup,\r\n });\r\n\r\n const [isLoading, setIsLoading] = useState(true);\r\n\r\n const [budgetSuggestionData, setBudgetSuggestionData] = useState(null);\r\n\r\n const [customPerformanceData, setCustomPerformanceData] = useState(null);\r\n\r\n useEffect(() => {\r\n setIsLoading(true);\r\n loadBudget().then((data) => {\r\n setBudgetSuggestionData(data);\r\n }).finally(() => {\r\n setIsLoading(false);\r\n });\r\n }, [loadBudget]);\r\n\r\n const onBudgetSuggestionChange = useCallback((result) => {\r\n const { data } = result;\r\n\r\n const { budgetTier, budgetAmount } = data;\r\n\r\n if (budgetTier === CustomBudget) {\r\n setCustomPerformanceData({ isLoading: true });\r\n fetchCustomBudgetPerformanceData({ budgetAmount })\r\n .then((customBudgetResult) => {\r\n setCustomPerformanceData({ isLoading: false, ...customBudgetResult });\r\n })\r\n .catch((err) => {\r\n setCustomPerformanceData({ isLoading: false, err });\r\n });\r\n }\r\n onBudgetValidate(result);\r\n }, [fetchCustomBudgetPerformanceData, onBudgetValidate]);\r\n\r\n return (\r\n mode === MODE.CREATION ?\r\n \r\n :\r\n \r\n );\r\n};\r\n\r\nBudgetSuggestion.propTypes = {\r\n mode: PropTypes.string,\r\n campaignId: PropTypes.string,\r\n campaignType: PropTypes.string,\r\n currency: PropTypes.string,\r\n onBudgetValidate: PropTypes.func,\r\n campaign: PropTypes.shape({}),\r\n assetGroup: PropTypes.shape({}),\r\n bidType: PropTypes.string.isRequired,\r\n};\r\n\r\nBudgetSuggestion.defaultProps = {\r\n mode: MODE.EDITING,\r\n campaignId: undefined,\r\n campaignType: undefined,\r\n currency: undefined,\r\n onBudgetValidate: _.noop,\r\n campaign: undefined,\r\n assetGroup: undefined,\r\n};\r\n","import _ from 'underscore';\r\nimport React, { useCallback, useState, useEffect } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classNames from 'classnames';\r\nimport {\r\n Dialog,\r\n DialogSurface,\r\n DialogTitle,\r\n DialogBody,\r\n DialogActions,\r\n DialogContent,\r\n Button,\r\n} from '@fluentui/react-components';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { LearnMoreLink } from '@bingads-webui-campaign-react/help';\r\nimport { MODE } from './model/constants';\r\nimport { BudgetSuggestionOfflineContainer } from './components/budget-suggestion-offline-container';\r\nimport { useBudgetSuggestionRepository } from './use-budget-suggestion-repository';\r\n\r\nconst getStyles = () => ({\r\n editBudgetSuggestionButton: {\r\n color: 'rgb(0, 120, 212) !important',\r\n border: 'none !important',\r\n padding: '0px !important',\r\n fontWeight: '400!important',\r\n '&:active, &:focus, &:hover': {\r\n color: 'rgb(0, 120, 212) !important',\r\n backgroundColor: '#ffffff !important',\r\n },\r\n },\r\n learnMoreContent: {\r\n '& a.HelpTopic:focus': {\r\n outline: 'none !important',\r\n },\r\n },\r\n\r\n});\r\n\r\nexport const BudgetSuggestionDialog = ({\r\n onBudgetChange,\r\n i18n,\r\n campaignId,\r\n campaignType,\r\n currency,\r\n enableSaving,\r\n campaign,\r\n onGridRefresh,\r\n showDialog,\r\n onTriggerDialog,\r\n minBudget,\r\n maxBudget,\r\n defaultBudget,\r\n}) => {\r\n const classes = useDefaultStyles(getStyles);\r\n const [isOpen, setIsOpen] = useState(false);\r\n const [customBudgetResult, setCustomBudgetResult] = useState({ data: { budget: 20 }, isValid: true, messages: [] });\r\n\r\n const { loadBudget, fetchCustomBudgetPerformanceData, saveBudget } = useBudgetSuggestionRepository({\r\n campaignId,\r\n campaignType,\r\n currency,\r\n campaign,\r\n });\r\n\r\n const [isLoading, setIsLoading] = useState(true);\r\n\r\n const [budgetSuggestionData, setBudgetSuggestionData] = useState(null);\r\n\r\n useEffect(() => {\r\n setIsLoading(true);\r\n loadBudget().then((data) => {\r\n setBudgetSuggestionData(data);\r\n }).finally(() => {\r\n setIsLoading(false);\r\n });\r\n }, [loadBudget]);\r\n\r\n const triggerDialog = useCallback((isDialogOpen) => {\r\n if (onTriggerDialog) {\r\n onTriggerDialog(isDialogOpen);\r\n } else {\r\n setIsOpen(isDialogOpen);\r\n }\r\n }, [onTriggerDialog]);\r\n\r\n const onChange = useCallback(() => {\r\n onBudgetChange({ Amount: customBudgetResult.data.budget, Type: 'DailyStandard' }, customBudgetResult.isValid);\r\n triggerDialog(false);\r\n }, [customBudgetResult, onBudgetChange, triggerDialog]);\r\n\r\n return (\r\n
\r\n {\r\n !onTriggerDialog && (\r\n triggerDialog(true)}\r\n >\r\n { i18n.getString(_TL_('View budget recommendations'))}\r\n \r\n )\r\n }\r\n \r\n \r\n \r\n \r\n {i18n.getString(_TL_('Budget recommendations'))}\r\n \r\n \r\n
\r\n {i18n.getString(_TL_('Your ads could be shown more often. You can increase your budget to ensure more ad exposure.'))}\r\n \r\n
\r\n \r\n
\r\n \r\n {\r\n if (enableSaving) {\r\n saveBudget({\r\n campaign: { campaign },\r\n budgetAmount: `${customBudgetResult.data.budget}`,\r\n budgetTier: customBudgetResult.data.budgetTier,\r\n }).then(() => {\r\n onGridRefresh();\r\n });\r\n triggerDialog(false);\r\n } else {\r\n onChange();\r\n }\r\n }\r\n }\r\n >\r\n {i18n.getString(_TL_('Apply'))}\r\n \r\n \r\n \r\n
\r\n
\r\n \r\n
\r\n );\r\n};\r\n\r\nBudgetSuggestionDialog.propTypes = {\r\n budget: PropTypes.shape({\r\n Amount: PropTypes.number,\r\n }).isRequired,\r\n onBudgetChange: PropTypes.func.isRequired,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n campaignId: PropTypes.string.isRequired,\r\n campaignType: PropTypes.string,\r\n currency: PropTypes.string,\r\n enableSaving: PropTypes.bool,\r\n onGridRefresh: PropTypes.func,\r\n campaign: PropTypes.shape({}),\r\n showDialog: PropTypes.bool,\r\n onTriggerDialog: PropTypes.func,\r\n};\r\n\r\nBudgetSuggestionDialog.defaultProps = {\r\n campaignType: 'performanceMax',\r\n currency: 'USD',\r\n enableSaving: false,\r\n onGridRefresh: _.noop,\r\n campaign: null,\r\n showDialog: false,\r\n onTriggerDialog: null,\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 (options, placeholderText) {var i18n = options.templateOptions.i18n\nif ((placeholderText)) {\npug_html = pug_html + \"\\u003Cdiv class=\\\"grid-nodata\\\"\\u003E\" + (pug.escape(null == (pug_interp = placeholderText) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\";\n}\nelse {\npug_html = pug_html + \"\\u003Cdiv class=\\\"grid-nodata\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('CPG_BrandsGrid_NoResult')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\";\n}}.call(this,\"options\" in locals_for_with?locals_for_with.options:typeof options!==\"undefined\"?options:undefined,\"placeholderText\" in locals_for_with?locals_for_with.placeholderText:typeof placeholderText!==\"undefined\"?placeholderText:undefined));;return pug_html;};\nmodule.exports = template;","// import _ from 'underscore';\r\nimport { useCallback } from 'react';\r\nimport { useFetch } from '@bingads-webui-campaign-react/campaign-http';\r\n\r\nexport const useBrandKitDataService = () => {\r\n const { post, put, del, response, cache, loading, error } = useFetch();\r\n // will fix loading, error, response, cache\r\n // const fetchData = useMemo(() => ({ response, cache, loading, error }), [response, cache, loading, error]);\r\n\r\n const getBrandKitDataByAccId = useCallback(\r\n ({ accId }: { accId: string }) => {\r\n const url = 'v13/BrandKits/QueryByAccountId';\r\n return post(url, { AccountId: accId });\r\n },\r\n [post]\r\n );\r\n\r\n const getBrandKitDataById = useCallback(\r\n ({ brandkitIds }: { brandkitIds: string[] }) => {\r\n const url = 'v13/BrandKits/QueryByIds';\r\n return post(url, { BrandKitIds: brandkitIds });\r\n },\r\n [post]\r\n );\r\n\r\n const createBrandKitData = useCallback(\r\n ({\r\n accId,\r\n brandKitData,\r\n }: {\r\n accId: string;\r\n brandKitData\r\n }) => {\r\n const url = 'v13/BrandKits';\r\n return post(url, { AccountId: accId, BrandKits: brandKitData });\r\n },\r\n [post]\r\n );\r\n\r\n const updateBrandKitData = useCallback(\r\n ({ accId, brandKitData }) => {\r\n const url = 'v13/BrandKits';\r\n return put(url, { AccountId: accId, BrandKits: brandKitData });\r\n },\r\n [put]\r\n );\r\n\r\n const deleteBrandKitData = useCallback(\r\n ({ brandKitIds, accId }: { brandKitIds: string[]; accId: string }) => {\r\n const url = 'v13/BrandKits';\r\n return del(url, { AccountId: accId, BrandKitIds: brandKitIds });\r\n },\r\n [del]\r\n );\r\n\r\n return {\r\n getBrandKitDataById,\r\n createBrandKitData,\r\n getBrandKitDataByAccId,\r\n updateBrandKitData,\r\n deleteBrandKitData,\r\n response,\r\n cache,\r\n loading,\r\n error,\r\n };\r\n};\r\n","/* istanbul ignore file */\r\nimport { useCallback } from 'react';\r\nimport { useBrandKitDataService } from './service/use-brandkit-data-service';\r\nimport { BrandKitType, BrandKitResponseType, BrandKitColor, BrandKitPalette } from './service/schema/brandkit';\r\nimport { BrandKitDataType, Color, Images } from './schema/brandkit';\r\n// import { mockBrandKitResponse } from './mock/brandkit';\r\n// import { BrandKitDefaultFonts } from '@bingads-webui-campaign-react/ads-studio-app-components';\r\n\r\nconst transformLogos = (data: any) => {\r\n const logos: Images[] = [];\r\n let squareLogosCount = 0;\r\n let landscapeLogosCount = 0;\r\n if (Array.isArray(data.SquareLogos)) {\r\n data.SquareLogos.forEach((logo) => {\r\n squareLogosCount += 1;\r\n logos.push({\r\n ...logo,\r\n Src: logo.Url,\r\n ImageType: 'square',\r\n });\r\n });\r\n }\r\n if (Array.isArray(data.LandscapeLogos)) {\r\n data.LandscapeLogos.forEach((logo) => {\r\n landscapeLogosCount += 1;\r\n logos.push({\r\n ...logo,\r\n // will chane once data coming fromm backend\r\n Src: logo.Url,\r\n ImageType: 'landscape',\r\n });\r\n });\r\n }\r\n return { logos, squareLogosCount, landscapeLogosCount };\r\n};\r\n\r\nconst transformPalette = (data: BrandKitType) => {\r\n const palettes: Color[] = [];\r\n if (Array.isArray(data.Palettes)) {\r\n data.Palettes.forEach((palette: BrandKitPalette) => {\r\n if (Array.isArray(palette.Colors)) {\r\n palette.Colors.forEach((color: BrandKitColor) => {\r\n palettes.push({\r\n ...color,\r\n Type: palette.ColorType,\r\n });\r\n });\r\n }\r\n });\r\n }\r\n return palettes;\r\n};\r\nconst transformImages = (data: any) => {\r\n const images: Images[] = [];\r\n\r\n if (Array.isArray(data.Images)) {\r\n data.Images.forEach((image) => {\r\n images.push({\r\n ...image,\r\n Src: image.Url,\r\n });\r\n });\r\n }\r\n\r\n return images;\r\n};\r\n\r\nconst transformPaletteRequest = (data: BrandKitDataType) => {\r\n const palettesMap: { [key: string]: BrandKitColor[] } = {};\r\n if (Array.isArray(data.palettes)) {\r\n data.palettes.forEach((palette: Color) => {\r\n if (!palettesMap[palette.Type]) {\r\n palettesMap[palette.Type] = [];\r\n }\r\n palettesMap[palette.Type].push({\r\n Name: palette.Name,\r\n HexCode: palette.HexCode,\r\n });\r\n });\r\n }\r\n const palettes: BrandKitPalette[] = Object.keys(palettesMap).map(colors => ({\r\n ColorType: colors,\r\n Colors: palettesMap[colors],\r\n }));\r\n return palettes;\r\n};\r\n\r\nconst transformBrandkitResponse = (brandkit: BrandKitResponseType) => Array.isArray(brandkit.BrandKits) && brandkit.BrandKits.map((data: BrandKitType) => {\r\n const { logos, squareLogosCount, landscapeLogosCount } = transformLogos(data);\r\n const palettes = transformPalette(data);\r\n const images = transformImages(data);\r\n return ({\r\n id: data && data.Id,\r\n brandkitName: data && data.Name,\r\n images,\r\n logos,\r\n palettes,\r\n squareLogosCount,\r\n landscapeLogosCount,\r\n fonts: data && data.Fonts,\r\n });\r\n});\r\n\r\nconst transformCreateBrandkitRequest = (brandkits: BrandKitDataType[]) => Array.isArray(brandkits) && brandkits.map((brandkit: BrandKitDataType) => {\r\n const squareLogos = brandkit.logos && brandkit.logos.filter(logo => logo.ImageType === 'square');\r\n const landscapeLogos = brandkit.logos && brandkit.logos.filter(logo => logo.ImageType === 'landscape');\r\n return ({\r\n ...(brandkit.brandkitName && { Name: brandkit.brandkitName }),\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n ...(brandkit.images && { Images: brandkit.images.map(({ Src, ...rest }) => rest) }),\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n ...(squareLogos && squareLogos.length > 0 && { SquareLogos: squareLogos.map(({ ImageType, Src, ...rest }) => rest) }),\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n ...(landscapeLogos && landscapeLogos.length > 0 && { LandscapeLogos: landscapeLogos.map(({ ImageType, Src, ...rest }) => rest) }),\r\n ...(brandkit.palettes && { Palettes: transformPaletteRequest(brandkit) }),\r\n ...(brandkit.fonts && { Fonts: brandkit.fonts }),\r\n });\r\n});\r\n\r\nconst transformUpdateBrandkitRequest = (brandkits: BrandKitDataType[]) => Array.isArray(brandkits) && brandkits.map((brandkit: BrandKitDataType) => {\r\n const squareLogos = brandkit.logos && brandkit.logos.filter(logo => logo.ImageType === 'square');\r\n const landscapeLogos = brandkit.logos && brandkit.logos.filter(logo => logo.ImageType === 'landscape');\r\n return ({\r\n Id: brandkit.id,\r\n Name: brandkit.brandkitName,\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n ...(Array.isArray(brandkit.images) && { Images: brandkit.images.map(({ Src, ...rest }) => rest) }),\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n ...(Array.isArray(squareLogos) && { SquareLogos: squareLogos.map(({ ImageType, Src, ...rest }) => rest) }),\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n ...(Array.isArray(landscapeLogos) && { LandscapeLogos: landscapeLogos.map(({ ImageType, Src, ...rest }) => rest) }),\r\n ...(brandkit.palettes && { Palettes: transformPaletteRequest(brandkit) }),\r\n ...(brandkit.fonts && { Fonts: brandkit.fonts }),\r\n });\r\n});\r\n\r\nexport const useBrandKitRepository = () => {\r\n const {\r\n createBrandKitData,\r\n getBrandKitDataByAccId,\r\n updateBrandKitData,\r\n response: brandkitResp,\r\n cache,\r\n loading: brandkitLoading,\r\n error: brandkitError,\r\n } = useBrandKitDataService();\r\n\r\n\r\n const getBrandKits = useCallback(async (aid) => {\r\n try {\r\n const brandKit = await getBrandKitDataByAccId({ accId: aid });\r\n return {\r\n response: transformBrandkitResponse(brandKit),\r\n error: null,\r\n };\r\n } catch (error) {\r\n return {\r\n response: null,\r\n error,\r\n };\r\n }\r\n }, [getBrandKitDataByAccId]);\r\n\r\n const createBrandKits = useCallback(async (aid, brandKits) => {\r\n try {\r\n const brandKit = await createBrandKitData({ accId: aid, brandKitData: transformCreateBrandkitRequest(brandKits) });\r\n return {\r\n response: brandKit,\r\n error: null,\r\n };\r\n } catch (error) {\r\n return {\r\n response: null,\r\n error,\r\n };\r\n }\r\n }, [createBrandKitData]);\r\n\r\n const updateBrandKit = useCallback(async (aid, brandKits) => {\r\n try {\r\n const brandKit = await updateBrandKitData({ accId: aid, brandKitData: transformUpdateBrandkitRequest(brandKits) });\r\n return {\r\n response: brandKit,\r\n error: null,\r\n };\r\n } catch (error) {\r\n return {\r\n response: null,\r\n error,\r\n };\r\n }\r\n }, [updateBrandKitData]);\r\n\r\n return {\r\n getBrandKits,\r\n updateBrandKit,\r\n createBrandKits,\r\n brandkitResp,\r\n brandkitError,\r\n cache,\r\n brandkitLoading,\r\n };\r\n};\r\n","import { useMemo } from 'react';\r\nimport { useBrandKitRepository } from './brand-kit-repository';\r\n\r\nexport const useBrandKitService = () => {\r\n const dataService = useBrandKitRepository();\r\n const {\r\n getBrandKits,\r\n updateBrandKit,\r\n createBrandKits,\r\n brandkitResp,\r\n brandkitError,\r\n cache,\r\n brandkitLoading,\r\n } = dataService;\r\n\r\n const brandKitDataService = useMemo(() => ({\r\n getBrandKits,\r\n updateBrandKit,\r\n createBrandKits,\r\n }), [createBrandKits, getBrandKits, updateBrandKit]);\r\n\r\n const brandkitApiState = useMemo(() => ({\r\n brandkitResp,\r\n brandkitError,\r\n cache,\r\n brandkitLoading,\r\n }), [brandkitError, brandkitLoading, brandkitResp, cache]);\r\n\r\n return {\r\n brandKitDataService,\r\n brandkitApiState,\r\n };\r\n};\r\n","export interface Color {\r\n Name: string;\r\n HexCode: string; // #FFFFFF\r\n Type: string; // primary, secondary, etc.\r\n}\r\n\r\nenum BackgroundPreference {}\r\n// Define enum values for BackgroundPreference if available\r\n\r\nenum FontTextAssetType {\r\n ShortHeadline = 0,\r\n LongHeadline = 1,\r\n Description = 2,\r\n CallToAction = 3,\r\n // Add other text asset types as needed\r\n}\r\n\r\nenum Fontface {\r\n Arial = 0,\r\n NewTimesRoman = 1,\r\n // Add other font faces as needed\r\n}\r\n\r\n\r\nenum CropType {\r\n ManualCrop,\r\n CenterCrop,\r\n SmartCrop,\r\n Unknown,\r\n}\r\nexport interface Asset {\r\n Id: number;\r\n Name: string;\r\n Src?: string;\r\n Type: string;\r\n}\r\n\r\nexport interface Images extends Asset {\r\n BackgroundPreference?: BackgroundPreference;\r\n CropHeight: number;\r\n CropWidth: number;\r\n CropX: number;\r\n CropY: number;\r\n Url: string;\r\n ThumbnailUrl: string,\r\n SubType: string; // subtype used to distinguish logo or image?\r\n TargetHeight: number;\r\n TargetWidth: number;\r\n ImageType?: string; // square or landscape\r\n}\r\n\r\nexport interface Font {\r\n Typeface: Fontface;\r\n Weight?: string;\r\n TextType: FontTextAssetType; // ad component that font will be applied to\r\n}\r\n\r\nexport interface CropSettings {\r\n SourceX: number;\r\n SourceY: number;\r\n SourceWidth: number;\r\n SourceHeight: number;\r\n CroppingType?: CropType; // ManualCrop/CenterCrop/SmartCrop/Unknown\r\n}\r\n\r\nexport interface BrandKitDataType {\r\n id: number;\r\n brandkitName: string;\r\n images?: Images[]; // Max 15\r\n logos?: Images[]; // Max 5\r\n palettes?: Color[]; // Max 5\r\n fonts?: Font[];\r\n squareLogosCount: number;\r\n landscapeLogosCount: number;\r\n}\r\n","import { useContext } from 'react';\r\nimport { ServerContext } from '@bingads-webui-campaign-react/server-context';\r\n\r\nexport const useBudgetRange = () => {\r\n const serverContext = useContext(ServerContext) as any;\r\n const currencyCode = serverContext?.CurrentAccount?.CurrencyCode || 'USD';\r\n\r\n const minDailyBudget = serverContext?.BudgetRange?.DailyRange?.FloorValue;\r\n\r\n // Currently the max daily budget returned by server context is the same as max monthly budget https://msasg.visualstudio.com/Bing_Ads/_git/AdsAppUI?path=/private/UI/OpportunityUI/Microsoft.AdCenter.UI.Web.Opportunity/Repository/StaticEntityRepository.cs&version=GBmaster&line=86&lineEnd=86&lineStartColumn=13&lineEndColumn=122&lineStyle=plain&_a=contents\r\n // Because of that we use the same logic as on MT where maxDailyBudget = maxMonthlyBudget / 28 https://msasg.visualstudio.com/DefaultCollection/Bing_Ads/_git/AdsAppsMT?path=/private/Common/BusinessRules/CampaignValidators/BudgetLimitHelper.cs&version=GBmaster&line=10&lineEnd=12&lineStartColumn=1&lineEndColumn=35&lineStyle=plain&_a=contents\r\n const maxDailyBudget = serverContext?.BudgetRange?.MonthlyRange?.CeilingValue\r\n ? Number((serverContext.BudgetRange.MonthlyRange.CeilingValue / 28).toFixed(2))\r\n : serverContext?.BudgetRange?.DailyRange?.CeilingValue;\r\n\r\n return {\r\n currencyCode,\r\n minDailyBudget,\r\n maxDailyBudget,\r\n };\r\n};\r\n","import { makeStyles, tokens, shorthands } from '@fluentui/react-components';\r\n\r\nexport const useBudgetInputStyles = makeStyles({\r\n row: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n },\r\n label: {\r\n marginBottom: tokens.spacingVerticalXS,\r\n },\r\n input: {\r\n maxWidth: '280px',\r\n ...shorthands.flex(1),\r\n },\r\n dropdown: {\r\n minWidth: '150px',\r\n marginLeft: tokens.spacingHorizontalXS,\r\n },\r\n currency: {\r\n ...shorthands.margin('0', '0', '0', tokens.spacingHorizontalS),\r\n },\r\n});\r\n","import React, { useCallback, useContext, useMemo } from 'react';\r\nimport _ from 'underscore';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport {\r\n Input,\r\n InputProps,\r\n Label,\r\n mergeClasses,\r\n useId,\r\n Dropdown,\r\n Option,\r\n} from '@fluentui/react-components';\r\nimport { HelpPopupInline } from '@bingads-webui-react/help-popup';\r\n\r\nimport { useBudgetInputStyles } from './styles/budget-input-styles';\r\n\r\ndeclare function _TL_(arg0: string): string;\r\n\r\ninterface BudgetInputPureProps {\r\n className?: string;\r\n value?: string;\r\n onChange: (value: string) => void;\r\n currency: string;\r\n label?: string;\r\n helpTopic?: string;\r\n helpLabel?: string;\r\n showDropdown?: boolean;\r\n onSelectCurrency?: (event: any, data: any) => void;\r\n currencies?: { code: string; text: string }[];\r\n}\r\n\r\nexport const BudgetInputPure: React.FC = (props) => {\r\n const {\r\n className,\r\n value,\r\n onChange,\r\n currency,\r\n label,\r\n helpTopic,\r\n helpLabel,\r\n showDropdown,\r\n onSelectCurrency,\r\n currencies = [],\r\n } = props;\r\n const id = useId('budget-input');\r\n const classes = useBudgetInputStyles();\r\n const i18n = useContext(I18nContext) as any;\r\n\r\n const onInputChange: InputProps['onChange'] = useCallback(\r\n (_e, data) => {\r\n onChange(data?.value);\r\n },\r\n [onChange]\r\n );\r\n\r\n const selectedOption = useMemo(() => {\r\n if (!showDropdown || !currency) {\r\n return { code: '', text: '' };\r\n }\r\n return (\r\n _.find(currencies, c => c.code === currency) || { code: '', text: '' }\r\n );\r\n }, [showDropdown, currency, currencies]);\r\n\r\n return (\r\n
\r\n \r\n
\r\n \r\n {showDropdown ? (\r\n \r\n {_.map(currencies, c => (\r\n \r\n ))}\r\n \r\n ) : (\r\n \r\n {currency}\r\n \r\n )}\r\n
\r\n
\r\n );\r\n};\r\n\r\nBudgetInputPure.defaultProps = {\r\n className: '',\r\n value: undefined,\r\n label: undefined,\r\n helpTopic: undefined,\r\n helpLabel: undefined,\r\n showDropdown: false,\r\n onSelectCurrency: _.noop,\r\n currencies: [],\r\n};\r\n","import { makeStyles, tokens } from '@fluentui/react-components';\r\n\r\nexport const useValidatedBudgetInputStyles = makeStyles({\r\n root: {\r\n marginBottom: tokens.spacingVerticalMNudge,\r\n },\r\n});\r\n","import _ from 'underscore';\r\nimport React, { useCallback, useMemo, useContext } from 'react';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { withValidation, GenericAdapter } from '@bingads-webui-react/validation';\r\nimport { withErrorField } from '@bingads-webui-react/primitive-validation-fluent';\r\nimport { mergeClasses } from '@fluentui/react-components';\r\n\r\nimport { BudgetInputPure } from './budget-input-pure';\r\nimport { useBudgetRange } from './use-budget-range';\r\nimport { useValidatedBudgetInputStyles } from './styles/validated-budget-input-styles';\r\n\r\nconst BudgetInput = withErrorField(withValidation(BudgetInputPure, GenericAdapter));\r\n\r\ndeclare function _TL_(arg0: string): string;\r\n\r\ninterface ValidatedBudgetInputProps {\r\n budgetKey?: string;\r\n maxBudget?: number;\r\n minBudget?: number;\r\n currency?: string;\r\n validationProps: {},\r\n}\r\n\r\nexport const ValidatedBudgetInput: React.FC = (props) => {\r\n const {\r\n currency,\r\n budgetKey,\r\n maxBudget,\r\n minBudget,\r\n validationProps,\r\n ...rest\r\n } = props;\r\n\r\n const classes = useValidatedBudgetInputStyles();\r\n const i18n = useContext(I18nContext) as any;\r\n\r\n const {\r\n currencyCode,\r\n minDailyBudget,\r\n maxDailyBudget,\r\n } = useBudgetRange();\r\n\r\n const finalMaxBudget = maxBudget || maxDailyBudget;\r\n const finalMinBudget = minBudget || minDailyBudget;\r\n const finalCurrency = currency || currencyCode;\r\n\r\n const budgetSchema = useMemo(() => ({\r\n name: 'Budget schema',\r\n type: 'object',\r\n properties: {\r\n [String(budgetKey)]: {\r\n type: 'number',\r\n required: true,\r\n maximum: finalMaxBudget,\r\n minimum: finalMinBudget,\r\n },\r\n },\r\n }), [budgetKey, finalMaxBudget, finalMinBudget]);\r\n\r\n const customErrorProcessor = useCallback(errors => _.map(\r\n errors,\r\n (oldError, key) => {\r\n const customErrors = {\r\n decimalLength: i18n.getString(_TL_('Budget needs to be set to 2 decimal lengths')),\r\n range: i18n.getString(_TL_('Your budget should be greater than {{accountCurrencyCode}} {{dailyRangeFloorValue}} and less than your daily maximum. The daily max. is your monthly budget averaged out over the number of days left in the month.'), {\r\n accountCurrencyCode: finalCurrency,\r\n dailyRangeFloorValue: finalMinBudget,\r\n }),\r\n required: i18n.getString(_TL_('This field is required')),\r\n type: i18n.getString(_TL_('Field requires numeric value')),\r\n };\r\n return customErrors[key] || oldError;\r\n }\r\n ), [finalCurrency, finalMinBudget, i18n]);\r\n\r\n return (\r\n
\r\n \r\n
\r\n );\r\n};\r\n\r\nValidatedBudgetInput.defaultProps = {\r\n budgetKey: 'Budget',\r\n maxBudget: undefined,\r\n minBudget: undefined,\r\n currency: undefined,\r\n};\r\n"],"names":["i18n","window","globalLegacyI18n","get","schemaI18nCampaign","brandGridLegacyDepsList","edm","appConfig","logger","columnChooserPreference","legacyColumnChooserPreferences","jsDataCampaign","appState","preferenceService","ProductOffer","sessionStore","preferenceStoreFactory","cacheService","SummaryDataContextManager","dataContextManager","PageContext","pageContext","getAdditionalPluginsFactory","_ref","toolbarPlugin","scope","view","plugin","projectionGridScopeNavigator","config","placeholderPlugin","container","template","placeholderTemplate","templateOptions","_","asyncEmptyText","tooMuchDataErrorText","asyncCallback","Promise","showTooMuchDataError","brandFactory","brandPromiseFactory","resolve","getBrandGridFactory","then","result","createBrandsGridForUiNext","serverContext","permissions","currentCampaign","currentAdGroup","siteMap","perfMarker","fetchDataCallback","hideSubBrand","campaignContext","_ref2","createBrandGrid","scopeAdapter","customerId","values","cid","accountId","aid","campaignId","adGroupId","set","unset","edmEntity","currentAccount","router","getRouteTo","navigateToRoute","getRouterDep","$viewport","$","getGridPreferences","gridName","dateUtil","format","value","formatDate","state","segmentTimeChecker","fetchPaginationConfig","customColumnsEnabled","preferenceConfig","gridView","getAdditionalPlugins","addDateChangeListener","isForVNext","viewport","customHeaderOffset","find","height","panelStyles","main","top","overlayProps","styles","root","flexStyle","overflow","display","flex","position","flexDirection","componentsAttributes","AddBrandPanel","_React$PureComponent","props","_this","_classCallCheck","_callSuper","onSaveBrand","sendAddBrandRequest","onClose","resetState","onClosePanel","updateBrandName","e","currentTarget","setState","brandName","updateBrandUrl","brandUrl","addSubBrand","canAddSubBrand","subBrands","concat","_toConsumableArray","showAddSubBrandError","every","subBrand","validateInput","updateSubBrand","_e$currentTarget","tabIndex","truncateValue","slice","updateSubBrandErrorMessage","removeSubBrand","canSaveBrand","_this$state","input","brandGrid","unblock","withUiBlock","grid","$el","saveResult","pick","url","getBmcMtEndpoint","userId","type","data","xhrFields","withCredentials","success","fetchGridData","refresh","error","showAddBrandError","initState","_inherits","_createClass","key","this","AlertHelper","showError","getString","_TL_","_this2","_this$props","displayName","isOpen","classes","showSubBrand","length","showAddSubBrand","isSaveButtonDisabled","componentsStrings","addSubBrandText","addSubBrandErrorMessage","subBrandName","removeSubBrandButtonAriaLabel","saveButtonText","cancelButtonText","closeIconAriaLabel","showSubBrandContent","_jsxs","React","children","_jsx","map","idx","Input","className","classNames","subBrandInput","onChange","Button","removeSubBrandButton","btnStyle","onClick","Glyphicon","glyph","showAddSubBrandErrorMessage","showAddSubBrandButton","addSubBrandButton","Panel","panel","PanelType","medium","hasCloseButton","header","content","bottomBar","saveButton","disabled","closeButton","defaultProps","StyledAddBrandPanel","withDefaultStyles","memo","_objectSpread","padding","width","marginBottom","marginTop","marginLeft","border","color","paddingLeft","paddingRight","background","marginRight","minWidth","borderTop","alignItems","right","justifyContent","margin","StyledGridViewWrapperWithFilterContext","withGlobalFilter","StyledGridViewWrapper","getBrandGridViewStyles","extend","borderRight","maxWidth","whiteSpace","outline","Brands","bindGridEvents","on","GRID_EVENT_NAMES","SHOW_ADD_BRAND_PANEL","showAddBrandPanel","addBrandPanel","isOpenAddBrandPanel","closeAddBrandPanel","crossPageSelectPlugin","onGridInjected","showTopOfGridPanel","backboneGridView","columnAction","noop","chartView","brandsGridPromise","BrandsGridView","EVENT_NAMES","overrideWith","deselectAll","bind","default","productFeedGrid","off","panelView","renderToolbarContainer","showTopGridPanel","topGridPanel","TopGridPanel","customClasses","topGridPanelCustomStyles","topOfGridContent","Fragment","SPAv2Tutorial","stickyTopOfGridContent","fallback","ProgressiveLoadingBlock","StyledTablePageContainer","tablePageContainer","gridViewContainer","StyledBrand","compose","withI18nConsumer","WrappedComponent","withCurrentExpandedScope","withTablePageStateManager","getToolbarConfig","lazyInject","toolbarSelectedConfig","Map","toolbarUnselectedConfig","id","text","iconLeftGlyphName","AddBrandToolbar","getEstimatedMonthlyBudgetStyles","budgetMonthly","overflowWrap","wordBreak","fontWeight","fontSize","lineHeight","PropTypes","getBudgetInputStyles","budgetDetailsContainer","budgetInputContainer","budgetTitle","currencyText","dropdownContainer","inline","textAlign","inputText","isInvalid","budgetInputError","dropdownStyles","dropdown","callout","CurrencyDropdown","ariaLabel","currencies","selectedCurrency","onSelectCurrency","currencyOptions","currency","title","selected","Code","currentCurrencyTitle","Dropdown","options","dropdownWidth","val","BudgetInput","budgetValue","showDropdown","isCurrencyDisabled","onBudgetInputChange","onBudgetValidate","onRenderInlineHelp","schema","useContext","I18nContext","legacyI18n","LegacyI18nContext","useDefaultStyles","maxBudget","minBudget","schemaName","onRenderCurrencyDropDown","useCallback","_useState","useState","_useState2","_slicedToArray","budgetError","setBudgetError","_useState3","_useState4","isBudgetValid","setIsBudgetValid","customErrorProcessor","errors","oldError","decimalLength","range","accountCurrencyCode","dailyRangeFloorValue","required","onBudgetInputValidate","isValid","messages","ValidatedBudgetInput","onBudgetChange","validationKey","inputClassName","selectedCurrencyText","RANGE_STEP","validationProps","field","errorProcessor","alwaysShowError","initialValue","ErrorMessages","undefined","FALLBACK_ESTIMATES","IsLimitedEstimates","GlobalMinimumBudget","DailyBudget","MonthlyBudget","MinimumBudget","CompetitorBudgetLowerBound","SuggestedBudget","CompetitorBudgetUpperBound","MaximumBudget","GlobalMaximumBudget","Currency","currencyStrings","ALL","AED","ARS","AMD","AUD","AZN","BHD","BDT","BZD","BOB","BWP","BRL","GBP","BND","BGN","CAD","CHF","CLP","CNY","COP","CRC","CZK","DKK","DOP","DZD","XCD","EGP","ETB","EUR","FJD","GEL","GHS","GTQ","HNL","HKD","HRK","HUF","ISK","INR","IDR","IQD","ILS","JMD","JPY","JOD","KZT","KES","KWD","KGS","KRW","LBP","LKR","LYD","MOP","MKD","MWK","MYR","MVR","MUR","MXN","MNT","MAD","NZD","NIO","NGN","NOK","OMR","PKR","PAB","PYG","PEN","PHP","PLN","QAR","RON","RSD","RUB","RWF","SAR","SEK","SGD","TZS","THB","TOP","TTD","TND","TRY","TWD","UGX","UAH","UYU","USD","UZS","VEF","VES","VND","XAF","XOF","YER","ZAR","ZMW","getSliderStyles","sliderContainer","sliderOverlay","backgroundColor","zIndex","borderRadius","competitorHelpIndicator","competitorHelpText","verticalAlign","sliderStyles","slider","paragraph","activeSection","inactiveSection","thumb","cursor","Slider","onBudgetSliderChange","budgetSuggestion","showCompetitorSlider","budgetSuggestionWithFallback","useMemo","stringifiedValue","toString","FluentSlider","min","Number","max","step","showValue","CompetitorSliderView","getShimmerStyles","shimmerContainer","BudgetShimmer","Stack","tokens","childrenGap","Shimmer","BudgetComponent","onCurrencyChange","budget","isLoading","onNotifyValidation","withSlider","budgetSchema","name","properties","maximum","minimum","serializedCurrencies","supportedCurrencies","Id","currencyLocalizationKey","serializeCurrencies","monthlyBudget","setMonthlyBudget","trace","useEffect","dailyBudget","monthlyBudgetValue","parseDecimal","Math","floor","formattedMonthyBudget","formatDecimal","minimumFractionDigits","maximumFractionDigits","EstimatedMonthlyBudget","parseBudgetDetails","BudgetDetailKeys","detail","Low","Mid","High","Range","formatNumber","CostPerConversion","CostPerClick","formatCurrency","round","CTR","parseViewModelToMTModelForPMax","campaign","assetGroup","latestSuggestedBudget","isPerformanceEstimation","Budget","BiddingScheme","CampaignType","Languages","conversionGoals","locationTargets","_ref3","BusinessName","Descriptions","Headlines","LongHeadlines","CurrentBudgetAmount","Amount","_ref5","Type","TargetCpa","TargetRoas","TargetImpressionShare","MaxCpcAmount","MaxCpc","_ref7","goalSelection","goalScopeSelection","currentLocations","currentLevelSettings","LocationTargets","location","CriterionType","Criterion","LocationCriterion","LocationId","RadiusTargets","Radius","RadiusCriterion","Latitude","Longitude","BiddingSchemeId","biddingStrategyTypeId","MaxConversions","GoalCategory","goal","CampaignTypeId","CampaignTypeToAdvertiserChannelTypeId","LocationIds","CurrencyCode","GetBudget","RecommendedBudget","AdvertiserBudget","Keywords","Age","MODE","CREATION","EDITING","BudgetSuggestionTiers","Advanced","Balanced","Starter","CustomBudget","BudgetSuggestionOfflineTiers","RecommendedBudgetSuggestionTier","ApiKeysBudgetSuggestion","BudgetTierTitles","Suggested","Current","Impressions","Clicks","Conversions","BudgetDetailKeysByBidType","_defineProperty","MaxConversionValue","MaxClicks","EnhancedCpc","CostPerSale","BudgetDetailKeysByCampaignType","CampaignTypes","PerformanceMax","BudgetDetailsKeysText","popupId","getMatchingBudgetTierBasedOnBudget","budgetSuggestionData","budgetAmount","mode","matchingBudgetTier","BudgetAmountDaily","parseFloat","BudgetAmountMonthly","parserByCampaignType","getParserByCampaignType","campaignType","Default","num","toFixed","Product","Shopping","DynamicSearchAds","Hotel","Audience","Smart","getRadioStyles","radioTitle","flexBox","flexWrap","leftBox","rowGap","budgetDay","budgetMonth","column","metric","rightBox","columnGap","badge","metricTitle","metricValue","budgetDisclaimer","skeletionStyle","Metrics","budgetDetails","bidType","getStyles","useResponsiveStyles","Skeleton","style","appearance","animation","SkeletonItem","_Fragment","HelpIcon","topic","BudgetItemLabel","tier","BudgetDetails","as","size","CustomBudgetLabel","_ref4","isSelected","onUpdateCustomBudget","customPerformanceData","hidePerformanceData","customBudgetResult","defaultBudget","onValidate","budgetKey","label","selectedRadio","radio","radioGroup","BudgetSuggestionContainer","selectedBudget","setSelectedBudget","setCustomBudgetResult","hasError","BudgetAmount","budgetTier","matchingTier","FluentProvider","theme","webLightTheme","RadioGroup","defaultValue","Object","keys","Radio","checked","radioGroupContainer","gap","currentBudget","borderBottom","BudgetSuggestionOfflineContainer","formatBudgetSuggestionResponse","budgetResponse","JSON","stringify","formatBudgetTemplate","appliedBudget","formattedBudgetResponse","CampaignID","CurrentBudget","BiddingStrategy","BudgetApplied","BudgetTier","useBudgetMetricsLogger","activity","ActivityContext","logBudgetFetchMetrics","logCustomBudgetPerformanceMetrics","_ref6","performanceMetricsResponse","CustomBudgetPerformance","formatCustomBudgetPerformanceMetrics","logBudgetLandscapeMetrics","budgetLandscapeResponse","formatBudgetLandscapeTemplate","saveBudgetSuggestionMetrics","_ref8","useBudgetSuggestionRepository","ServerContext","ScopeContext","_scope$values","campaignIdFromScope","currentCampaignId","CurrentAccount","_useBudgetMetricsLogg","oDataConfig","odataPath","hostname","document","toLowerCase","indexOf","isLocal","odataToken","Token","oDataToken","ServicesEndpoints","AdInsightAPI","oDataPath","getODataConfig","oDataOptions","contentType","path","useRef","fetchBudgetSuggestionData","payload","baseURL","odata","post","parsedBudgetSuggestion","budgetSuggestions","budgetDailyKey","budgetDetailsKey","parseBudgetSuggestionAPI","current","fetchInitialBudgetSuggestionData","parser","saveBudget","biddingScheme","campaignResource","edmCampaign","types","ResourceIdentifier","bulkUpdate","bulkCreate","createOrUpdateCampaign","res","catch","fetchBudgetLandscapeData","parsedBudgetLandscape","budgetLandscapeData","BudgetCurrent","BudgetCurrentDaily","BudgetCurrentDetails","BudgetSuggested","BudgetSuggestedDaily","BudgetSuggestedDetails","parseBudgetLandscapeAPI","loadBudget","fetchCustomBudgetPerformanceData","parsedBudgetSuggestionResponse","updatedCampaign","sort","a","b","parsedPerformanceEstimate","performanceEstimate","BudgetAdvertiser30Day","AdvertiserBudgetDetails","parsePerformanceEstimateAPI","loadBudgetPartial","args","BudgetSuggestion","rest","_objectWithoutProperties","_excluded","_useBudgetSuggestionR","setIsLoading","setBudgetSuggestionData","_useState5","_useState6","setCustomPerformanceData","finally","onBudgetSuggestionChange","err","editBudgetSuggestionButton","learnMoreContent","BudgetSuggestionDialog","enableSaving","onGridRefresh","showDialog","onTriggerDialog","setIsOpen","_useState7","_useState8","triggerDialog","isDialogOpen","Dialog","modalType","open","dialog","DialogSurface","DialogBody","DialogTitle","DialogContent","LearnMoreLink","linkText","DialogActions","buttonGroup","applyButton","pug","module","exports","locals","pug_interp","pug_html","locals_for_with","placeholderText","escape","call","useBrandKitDataService","put","del","response","cache","loading","getBrandKitDataByAccId","accId","AccountId","getBrandKitDataById","brandkitIds","BrandKitIds","createBrandKitData","brandKitData","BrandKits","updateBrandKitData","deleteBrandKitData","brandKitIds","transformPaletteRequest","palettesMap","Array","isArray","palettes","forEach","palette","push","Name","HexCode","colors","ColorType","Colors","transformBrandkitResponse","brandkit","logos","squareLogosCount","landscapeLogosCount","SquareLogos","logo","Src","Url","ImageType","LandscapeLogos","transformLogos","Palettes","transformPalette","images","Images","image","transformImages","brandkitName","fonts","Fonts","useBrandKitRepository","brandkitResp","brandkitLoading","brandkitError","getBrandKits","async","brandKit","createBrandKits","brandKits","brandkits","squareLogos","filter","landscapeLogos","updateBrandKit","useBrandKitService","dataService","brandKitDataService","brandkitApiState","BackgroundPreference","FontTextAssetType","Fontface","CropType","useBudgetRange","currencyCode","minDailyBudget","BudgetRange","DailyRange","FloorValue","maxDailyBudget","MonthlyRange","CeilingValue","useBudgetInputStyles","row","spacingVerticalXS","spacingHorizontalXS","spacingHorizontalS","BudgetInputPure","helpTopic","helpLabel","useId","onInputChange","_e","selectedOption","c","code","Label","htmlFor","HelpPopupInline","placeholder","onOptionSelect","selectedOptions","Option","useValidatedBudgetInputStyles","spacingVerticalMNudge","withErrorField","withValidation","GenericAdapter","finalMaxBudget","finalMinBudget","finalCurrency","String"],"sourceRoot":""}