{"version":3,"file":"static/js/application.async.landing~b2a75e84.69619089.chunk.js","mappings":"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","sources":["../../../node_modules/@bingads-webui-campaign-react/spa-tutorial/src/tutorial.js","../../../node_modules/@bingads-webui-campaign-react/spa-tutorial/src/spa-tutorial.js","../../../node_modules/@bingads-webui-campaign-react/spa-tutorial/src/spav2-tutorial.js","../../../node_modules/@bingads-webui-campaign-react/spa-tutorial/src/ms-store-ads-tutorial.js","../../../node_modules/@bingads-webui-campaign-react/sparkle-icon/src/index.js","../../../node_modules/@bingads-webui-campaign-react/sponsored-campaign-creation/src/no-store.js","../../../node_modules/@bingads-webui-campaign-react/sponsored-campaign-creation/src/model/default-values.js","../../../node_modules/@bingads-webui-campaign-react/sponsored-campaign-creation/src/model/campaign-criterions.js","../../../node_modules/@bingads-webui-campaign-react/sponsored-campaign-creation/src/model/campaign.js","../../../node_modules/@bingads-webui-campaign-react/sponsored-campaign-creation/src/model/crud.js","../../../node_modules/@bingads-webui-campaign-react/sponsored-campaign-creation/src/styles/get-campaign-creation-styles.js","../../../node_modules/@bingads-webui-campaign-react/sponsored-campaign-creation/src/styles/index.js","../../../node_modules/@bingads-webui-campaign-react/sponsored-campaign-creation/src/model/api-errors.js","../../../node_modules/@bingads-webui-campaign-react/sponsored-campaign-creation/src/controls/validated-shared-budget.js","../../../node_modules/@bingads-webui-campaign-react/sponsored-campaign-creation/src/controls/validated-devices.js","../../../node_modules/@bingads-webui-campaign-react/sponsored-campaign-creation/src/controls/validated-product-filter.js","../../../node_modules/@bingads-webui-campaign-react/sponsored-campaign-creation/src/controls/validated-bid-setting.js","../../../node_modules/@bingads-webui-campaign-react/sponsored-campaign-creation/src/basic-settings.js","../../../node_modules/@bingads-webui-campaign-react/sponsored-campaign-creation/src/controls/validated-ad-distribution.js","../../../node_modules/@bingads-webui-campaign-react/sponsored-campaign-creation/src/more-settings.js","../../../node_modules/@bingads-webui-campaign-react/sponsored-campaign-creation/src/page.js","../../../node_modules/@bingads-webui-campaign-react/sponsored-campaign-creation/src/wizard/shared/styles/collapsible-panel.js","../../../node_modules/@bingads-webui-campaign-react/sponsored-campaign-creation/src/wizard/shared/styles/brand-panel.js","../../../node_modules/@bingads-webui-campaign-react/sponsored-campaign-creation/src/wizard/shared/components/panels/brand-panel.js","../../../node_modules/@bingads-webui-campaign-react/sponsored-campaign-creation/src/wizard/shared/components/category-selector.js","../../../node_modules/@bingads-webui-campaign-react/sponsored-campaign-creation/src/wizard/shared/styles/category-panel.js","../../../node_modules/@bingads-webui-campaign-react/sponsored-campaign-creation/src/wizard/shared/components/panels/category-panel.js","../../../node_modules/@bingads-webui-campaign-react/sponsored-campaign-creation/src/wizard/shared/utils.js","../../../node_modules/@bingads-webui-campaign-react/sponsored-campaign-creation/src/wizard/shared/components/product-settings/use-data-source.js","../../../node_modules/@bingads-webui-campaign-react/sponsored-campaign-creation/src/wizard/shared/styles/product-id-panel.js","../../../node_modules/@bingads-webui-campaign-react/sponsored-campaign-creation/src/wizard/shared/components/panels/product-id-panel.js","../../../node_modules/@bingads-webui-campaign-react/sponsored-campaign-creation/src/wizard/shared/styles/product-settings.js","../../../node_modules/@bingads-webui-campaign-react/sponsored-campaign-creation/src/wizard/shared/components/product-settings/index.js","../../../node_modules/@bingads-webui-campaign-react/sponsored-campaign-creation/src/wizard/steps/adgoup-settings/utils.js","../../../node_modules/@bingads-webui-campaign-react/sponsored-campaign-creation/src/wizard/steps/adgoup-settings/shell.js","../../../node_modules/@bingads-webui-campaign-react/sponsored-campaign-creation/src/wizard/steps/adgoup-settings/use-target-repository.js","../../../node_modules/@bingads-webui-campaign-react/sponsored-campaign-creation/src/wizard/steps/budget-and-bid/styles.js","../../../node_modules/@bingads-webui-campaign-react/sponsored-campaign-creation/src/wizard/steps/budget-and-bid/shell.js","../../../node_modules/@bingads-webui-campaign-react/sponsored-campaign-creation/src/wizard/steps/budget-and-bid/use-budget-bid-repository.js","../../../node_modules/@bingads-webui-campaign-react/sponsored-campaign-creation/src/wizard/steps/campaign-settings/styles.js","../../../node_modules/@bingads-webui-campaign-react/sponsored-campaign-creation/src/wizard/steps/campaign-settings/shell.js","../../../node_modules/@bingads-webui-campaign-react/sponsored-campaign-creation/src/wizard/steps/campaign-settings/use-campaign-repository.js","../../../node_modules/@bingads-webui-campaign-react/sponsored-campaign-creation/src/wizard/steps/summary/use-summary-schema-data.js","../../../node_modules/@bingads-webui-campaign-react/sponsored-campaign-creation/src/wizard/constants.js","../../../node_modules/@bingads-webui-campaign-react/sponsored-campaign-creation/src/wizard/steps/summary/shell.js","../../../node_modules/@bingads-webui-campaign-react/sponsored-campaign-creation/src/wizard/steps/summary/schema.js","../../../node_modules/@bingads-webui-campaign-react/sponsored-campaign-creation/src/wizard/steps/summary/use-summary-repository.js","../../../node_modules/@bingads-webui-campaign-react/sponsored-campaign-creation/src/wizard/steps/step-lists.js","../../../node_modules/@bingads-webui-campaign-react/sponsored-campaign-creation/src/wizard/steps/step-config.js","../../../node_modules/@bingads-webui-campaign-react/sponsored-campaign-creation/src/wizard/footer.js","../../../node_modules/@bingads-webui-campaign-react/sponsored-campaign-creation/src/wizard/index.js","../../../node_modules/@bingads-webui-campaign-react/sponsored-campaign-creation/src/index.js","../../../node_modules/@bingads-webui-campaign-react/sponsored-campaign-creation/src/model/location-criterions.js","../../../node_modules/@bingads-webui-campaign-react/standard-shopping-wizard/src/constants.js","../../../node_modules/@bingads-webui-campaign-react/standard-shopping-wizard/src/steps/step-utils.js","../../../node_modules/@bingads-webui-campaign-react/standard-shopping-wizard/src/steps/summary/use-summary-schema-data.js","../../../node_modules/@bingads-webui-campaign-react/standard-shopping-wizard/src/steps/summary/summary-step.js","../../../node_modules/@bingads-webui-campaign-react/standard-shopping-wizard/src/steps/summary/schema.js","../../../node_modules/@bingads-webui-campaign-react/standard-shopping-wizard/src/model/campaign-criterions.js","../../../node_modules/@bingads-webui-campaign-react/standard-shopping-wizard/src/model/campaign.js","../../../node_modules/@bingads-webui-campaign-react/standard-shopping-wizard/src/model/ad-group-criterions.js","../../../node_modules/@bingads-webui-campaign-react/standard-shopping-wizard/src/model/ad-group.js","../../../node_modules/@bingads-webui-campaign-react/standard-shopping-wizard/src/model/ad-group-bulk.js","../../../node_modules/@bingads-webui-campaign-react/standard-shopping-wizard/src/model/campaign-bulk.js","../../../node_modules/@bingads-webui-campaign-react/standard-shopping-wizard/src/shared/styles/collapsible-panel.js","../../../node_modules/@bingads-webui-campaign-react/standard-shopping-wizard/src/shared/use-wizard-log.js","../../../node_modules/@bingads-webui-campaign-react/standard-shopping-wizard/src/shared/get-product-data.js","../../../node_modules/@bingads-webui-campaign-react/standard-shopping-wizard/src/steps/summary/use-summary-repository.js","../../../node_modules/@bingads-webui-campaign-react/standard-shopping-wizard/src/steps/campaign-settings/component/setting-configs.js","../../../node_modules/@bingads-webui-campaign-react/standard-shopping-wizard/src/steps/campaign-settings/component/product-filter.js","../../../node_modules/@bingads-webui-campaign-react/standard-shopping-wizard/src/steps/campaign-settings/component/store-setting.js","../../../node_modules/@bingads-webui-campaign-react/standard-shopping-wizard/src/steps/campaign-settings/component/bmc-redirect.js","../../../node_modules/@bingads-webui-campaign-react/standard-shopping-wizard/src/steps/campaign-settings/component/campaign-priority.js","../../../node_modules/@bingads-webui-campaign-react/standard-shopping-wizard/src/steps/campaign-settings/styles.js","../../../node_modules/@bingads-webui-campaign-react/standard-shopping-wizard/src/shared/pannel-header.js","../../../node_modules/@bingads-webui-campaign-react/standard-shopping-wizard/src/steps/campaign-settings/campaign-settings-shell.js","../../../node_modules/@bingads-webui-campaign-react/standard-shopping-wizard/src/steps/campaign-settings/use-campaign-repository.js","../../../node_modules/@bingads-webui-campaign-react/standard-shopping-wizard/src/steps/adgroup-settings/utils.js","../../../node_modules/@bingads-webui-campaign-react/standard-shopping-wizard/src/steps/adgroup-settings/components/device-target.js","../../../node_modules/@bingads-webui-campaign-react/standard-shopping-wizard/src/steps/adgroup-settings/components/targeting-preferences.js","../../../node_modules/@bingads-webui-campaign-react/standard-shopping-wizard/src/steps/adgroup-settings/components/ad-rotation.js","../../../node_modules/@bingads-webui-campaign-react/standard-shopping-wizard/src/steps/adgroup-settings/target-shell.js","../../../node_modules/@bingads-webui-campaign-react/standard-shopping-wizard/src/steps/adgroup-settings/adgroup-settings.js","../../../node_modules/@bingads-webui-campaign-react/standard-shopping-wizard/src/steps/adgroup-settings/use-target-repository.js","../../../node_modules/@bingads-webui-campaign-react/standard-shopping-wizard/src/steps/budget-and-bids/styles.js","../../../node_modules/@bingads-webui-campaign-react/standard-shopping-wizard/src/steps/budget-and-bids/budget-bid-step.js","../../../node_modules/@bingads-webui-campaign-react/standard-shopping-wizard/src/steps/budget-and-bids/use-budget-bid-repository.js","../../../node_modules/@bingads-webui-campaign-react/standard-shopping-wizard/src/steps/step-config.js","../../../node_modules/@bingads-webui-campaign-react/standard-shopping-wizard/src/steps/step-lists.js","../../../node_modules/@bingads-webui-campaign-react/standard-shopping-wizard/src/footer.js","../../../node_modules/@bingads-webui-campaign-react/standard-shopping-wizard/src/index.js","../../../node_modules/@bingads-webui-campaign-react/standard-shopping-wizard/src/steps/adgroup-settings/components/ad-distribution.js","../../../node_modules/@bingads-webui-campaign-react/static-audience-campaign-creation/src/utils/router-helper.ts","../../../node_modules/@bingads-webui-campaign-react/static-audience-campaign-creation/src/utils/handle-errors.ts","../../../node_modules/@bingads-webui-campaign-react/static-audience-campaign-creation/src/utils/validations.ts","../../../node_modules/@bingads-webui-campaign-react/static-audience-campaign-creation/src/utils/ads-repository.ts","../../../node_modules/@bingads-webui-campaign-react/static-audience-campaign-creation/src/utils/pricing-model-range-map.ts","../../../node_modules/@bingads-webui-campaign-react/static-audience-campaign-creation/src/ad-creation/mock.ts","../../../node_modules/@bingads-webui-campaign-react/static-audience-campaign-creation/src/campaign-settings/campaign-settings-styles.ts","../../../node_modules/@bingads-webui-campaign-react/static-audience-campaign-creation/src/campaign-settings/campaign-information.tsx","../../../node_modules/@bingads-webui-campaign-react/static-audience-campaign-creation/src/hooks/use-recommendation-fetch.ts","../../../node_modules/@bingads-webui-campaign-react/static-audience-campaign-creation/src/campaign-settings/campaign-setting-types.ts","../../../node_modules/@bingads-webui-campaign-react/static-audience-campaign-creation/src/campaign-settings/budget-bid.tsx","../../../node_modules/@bingads-webui-campaign-react/static-audience-campaign-creation/src/step-footer.tsx","../../../node_modules/@bingads-webui-campaign-react/static-audience-campaign-creation/src/components/error-view.tsx","../../../node_modules/@bingads-webui-campaign-react/static-audience-campaign-creation/src/campaign-settings/campaign-settings-container.tsx","../../../node_modules/@bingads-webui-campaign-react/static-audience-campaign-creation/src/store/audience-creation-flow-actions.ts","../../../node_modules/@bingads-webui-campaign-react/static-audience-campaign-creation/src/store/audience-creation-flow-reducer.ts","../../../node_modules/@bingads-webui-campaign-react/static-audience-campaign-creation/src/store/audience-campaign-creation-context.tsx","../../../node_modules/@bingads-webui-campaign-react/static-audience-campaign-creation/src/ad-creation/ad-creation-style.ts","../../../node_modules/@bingads-webui-campaign-react/static-audience-campaign-creation/src/ad-creation/ad-preview.tsx","../../../node_modules/@bingads-webui-campaign-react/static-audience-campaign-creation/src/ad-creation/ad-editor-panel.tsx","../../../node_modules/@bingads-webui-campaign-react/static-audience-campaign-creation/src/ad-creation/ad-preview-card.tsx","../../../node_modules/@bingads-webui-campaign-react/static-audience-campaign-creation/src/ad-creation/recommended-ads-panel.tsx","../../../node_modules/@bingads-webui-campaign-react/static-audience-campaign-creation/src/ad-creation/custom-ads-panel.tsx","../../../node_modules/@bingads-webui-campaign-react/static-audience-campaign-creation/src/ad-creation/targeting.tsx","../../../node_modules/@bingads-webui-campaign-react/static-audience-campaign-creation/src/ad-creation/ad-creation.tsx","../../../node_modules/@bingads-webui-campaign-react/static-audience-campaign-creation/src/summary/summary-styles.ts","../../../node_modules/@bingads-webui-campaign-react/static-audience-campaign-creation/src/summary/summary-container.tsx","../../../node_modules/@bingads-webui-campaign-react/static-audience-campaign-creation/src/audience-creation-flow-styles.ts","../../../node_modules/@bingads-webui-campaign-react/static-audience-campaign-creation/src/app.tsx","../../../node_modules/@bingads-webui-campaign-react/status-popover/src/const.js","../../../node_modules/@bingads-webui-campaign-react/status-popover/src/styles/icon-styles.js","../../../node_modules/@bingads-webui-campaign-react/status-popover/src/components/status-icon.js","../../../node_modules/@bingads-webui-campaign-react/status-popover/src/styles/status-popover-styles.js","../../../node_modules/@bingads-webui-campaign-react/status-popover/src/components/status-popover-item.js","../../../node_modules/@bingads-webui-campaign-react/status-summary-card/src/components/use-is-read-only-user.ts","../../../node_modules/@bingads-webui-campaign-react/status-summary-card/src/components/dropdown-menu-button.tsx","../../../node_modules/@bingads-webui-campaign-react/status-summary-card/src/components/dialog-edit-button.tsx","../../../node_modules/@bingads-webui-campaign-react/status-summary-card/src/styles/styles.ts","../../../node_modules/@bingads-webui-campaign-react/status-summary-card/src/components/icon.tsx","../../../node_modules/@bingads-webui-campaign-react/status-summary-card/src/status-summary-card.tsx"],"sourcesContent":["import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classnames from 'classnames';\r\nimport { withDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { Glyphicon, Panel, PanelGroup } from '@bingads-webui-react/primitive';\r\n\r\nconst style = (_, { palette }) => ({\r\n tutorial: {\r\n '& .panel-title a': {\r\n color: palette.themePrimary,\r\n fontSize: 18,\r\n textDecoration: 'none',\r\n },\r\n },\r\n tutorialContainer: {\r\n display: 'flex',\r\n backgroundColor: '#f3f2f1',\r\n },\r\n tutorialStep: {\r\n flex: 1,\r\n display: 'flex',\r\n alignItems: 'stretch',\r\n '& a:hover': {\r\n textDecoration: 'underline',\r\n },\r\n },\r\n tutorialStepContent: {\r\n padding: 20,\r\n flex: 1,\r\n },\r\n stepSeperator: {\r\n padding: '0 16px',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n backgroundColor: '#fff',\r\n },\r\n});\r\n\r\nfunction UnstyledTutorial({\r\n classes,\r\n items,\r\n title,\r\n secondaryTitle,\r\n description = '',\r\n className,\r\n expanded,\r\n}) {\r\n const mergedClassName = classnames(className, classes.tutorial);\r\n return (\r\n \r\n \r\n \r\n {title}\r\n \r\n \r\n \r\n
\r\n {secondaryTitle ? (

{secondaryTitle}

) : null}\r\n

{description}

\r\n
\r\n
\r\n {items.map(({ title: itemTitle, text: itemText }, idx) => (\r\n <>\r\n
\r\n
\r\n
{itemTitle}
\r\n

{itemText}

\r\n
\r\n
\r\n {idx !== items.length - 1 ? (\r\n
\r\n \r\n
\r\n ) : null}\r\n \r\n ))}\r\n
\r\n
\r\n
\r\n
\r\n \r\n );\r\n}\r\n\r\nUnstyledTutorial.propTypes = {\r\n classes: PropTypes.shape({\r\n tutorial: PropTypes.string,\r\n tutorialContainer: PropTypes.string,\r\n tutorialStep: PropTypes.string,\r\n tutorialStepContent: PropTypes.string,\r\n stepSeperator: PropTypes.string,\r\n }).isRequired,\r\n items: PropTypes.arrayOf(PropTypes.shape({\r\n title: PropTypes.string.isRequired,\r\n text: PropTypes.oneOfType([\r\n PropTypes.string,\r\n PropTypes.element,\r\n ]).isRequired,\r\n })).isRequired,\r\n title: PropTypes.string.isRequired,\r\n secondaryTitle: PropTypes.string,\r\n description: PropTypes.oneOfType([\r\n PropTypes.string,\r\n PropTypes.element,\r\n ]),\r\n className: PropTypes.string,\r\n expanded: PropTypes.bool,\r\n};\r\n\r\nUnstyledTutorial.defaultProps = {\r\n description: '',\r\n className: '',\r\n secondaryTitle: null,\r\n expanded: false,\r\n};\r\n\r\nexport const Tutorial = withDefaultStyles(UnstyledTutorial, style);\r\n\r\n","/* eslint-disable jsx-a11y/anchor-is-valid */\r\n/* eslint-disable no-script-url */\r\nimport React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { template } from 'underscore';\r\nimport { withDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { underlineLinkStyle } from '@bingads-webui-campaign-react/common-styles';\r\nimport { Tutorial } from './tutorial';\r\n\r\nconst style = (_, { palette }) => ({\r\n spaTutorial: {\r\n padding: '0 22px',\r\n borderBottom: `1px solid ${palette.neutralLight}`,\r\n ...underlineLinkStyle({ palette, elementLocator: 'a.HelpTopic' }),\r\n },\r\n campaignLink: {\r\n ...underlineLinkStyle({ palette, elementLocator: '', isGreyBackground: true }),\r\n },\r\n});\r\n\r\nfunction UnstyledSPATutorial({ i18n, classes }) {\r\n const description = (\r\n \r\n {`${i18n.getString(_TL_('Product feeds are a key component to cooperative bidding, where retailers work hand-in-hand with manufacturers to drive product sales in specific channels. Setup is just two steps'))} `}\r\n \r\n {i18n.getString(_TL_('Learn more'))}\r\n \r\n \r\n );\r\n\r\n const { search } = window.location;\r\n const campaignLink = `${i18n.getString(_TL_('Campaigns page'))}`;\r\n const createTag = `${i18n.getString(_TL_('Create campaign'))}`;\r\n const tmpl = i18n.getString(_TL_('Once you\\'ve linked to your partner\\'s store, build campaigns to highlight your product feed. Get those products in front of the right audience at the right time through bid boost, which is an expense that can be shared with your partner. In the {{link}}, click {{create}} to get started.'));\r\n const createTmpl = template(tmpl);\r\n const createCampaignContentText = createTmpl({ link: campaignLink, create: createTag });\r\n\r\n const items = [\r\n {\r\n title: i18n.getString(_TL_('Create product feed')),\r\n text: i18n.getString(_TL_('The product feed is simply a list of items you\\'re promoting with a manufacturer, a retailer, or another third party. You\\'ll need to list the items in a file and add them to Microsoft Advertising. In the Product feeds tab, click Upload feed to get started.')),\r\n },\r\n {\r\n title: i18n.getString(_TL_('Link to store')),\r\n text: i18n.getString(_TL_('Once you build your product feed, you need to gain access to your partner\\'s Microsoft Merchant Center store to target sales on that channel. In the Linked stores tab, click Add retail partner to send a request for access')),\r\n },\r\n {\r\n title: i18n.getString(_TL_('Create campaigns')),\r\n text: (\r\n
\r\n ),\r\n },\r\n ];\r\n\r\n return (\r\n \r\n );\r\n}\r\n\r\nUnstyledSPATutorial.propTypes = {\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.string.isRequired,\r\n }).isRequired,\r\n classes: PropTypes.shape({\r\n spaTutorial: PropTypes.string.isRequired,\r\n campaignLink: PropTypes.string.isRequired,\r\n }).isRequired,\r\n};\r\n\r\nexport const SPATutorial = withDefaultStyles(UnstyledSPATutorial, style);\r\n","/* eslint-disable jsx-a11y/anchor-is-valid */\r\n/* eslint-disable no-script-url */\r\nimport React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { template } from 'underscore';\r\nimport { withDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { underlineLinkStyle } from '@bingads-webui-campaign-react/common-styles';\r\nimport { Tutorial } from './tutorial';\r\n\r\nconst style = (_, { palette }) => ({\r\n spaTutorial: {\r\n padding: '0 22px',\r\n borderBottom: `1px solid ${palette.neutralLight}`,\r\n ...underlineLinkStyle({ palette, elementLocator: 'a.HelpTopic' }),\r\n },\r\n campaignLink: {\r\n ...underlineLinkStyle({ palette, elementLocator: '', isGreyBackground: true }),\r\n },\r\n});\r\n\r\nfunction getHtmlCampaignSection(i18n, classes) {\r\n const { search } = window.location;\r\n const campaignLink = `${i18n.getString(_TL_('Campaigns page'))}`;\r\n const createTag = `${i18n.getString(_TL_('Create campaign'))}`;\r\n const boostTag = `${i18n.getString(_TL_('Boost product sales'))}`;\r\n const tmpl = i18n.getString(_TL_('Now that one or more retailers have been matched, you can create a campaign. From the {{link}}, click {{create}} then {{boost}} to get started.'));\r\n const createTmpl = template(tmpl);\r\n return createTmpl({\r\n link: campaignLink,\r\n create: createTag,\r\n boost: boostTag,\r\n });\r\n}\r\n\r\nfunction getHtmlBrandSection(i18n) {\r\n const brandTag = `${i18n.getString(_TL_('Brands'))}`;\r\n const tmpl = i18n.getString(_TL_('From the {{brands}} tab, enter your brand names and corresponding sub-brands.'));\r\n const createTmpl = template(tmpl);\r\n return createTmpl({\r\n brands: brandTag,\r\n });\r\n}\r\n\r\nfunction getHtmlStoreSection(i18n) {\r\n const storesTag = `${i18n.getString(_TL_('Retail partners'))}`;\r\n const actionTag = `${i18n.getString(_TL_('Link to all retail partners'))}`;\r\n const tmpl = i18n.getString(_TL_('After you\\'ve submitted your brands, you\\'re ready to partner with retailers who sell your products. From the {{stores}} tab, you can submit a manual linking request or enable {{action}} to automatically match relevant retailers to you. We recommend this option, as it streamlines the retailer matching process.'));\r\n const createTmpl = template(tmpl);\r\n return createTmpl({\r\n stores: storesTag,\r\n action: actionTag,\r\n });\r\n}\r\n\r\nfunction UnstyledSPAv2Tutorial({ i18n, classes }) {\r\n const description = (\r\n \r\n {`${i18n.getString(_TL_('Shopping campaigns for Brands enable brands and manufacturers to boost product sales by partnering with retailers to cooperatively bid on Shopping campaigns. Setup is just three easy steps.'))} `}\r\n \r\n {i18n.getString(_TL_('Learn more'))}\r\n \r\n \r\n );\r\n\r\n const items = [\r\n {\r\n title: i18n.getString(_TL_('Enter your brands')),\r\n text: (\r\n // eslint-disable-next-line react/no-danger\r\n
\r\n ),\r\n },\r\n {\r\n title: i18n.getString(_TL_('Link your retailers')),\r\n text: (\r\n // eslint-disable-next-line react/no-danger\r\n
\r\n ),\r\n },\r\n {\r\n title: i18n.getString(_TL_('Create campaigns')),\r\n text: (\r\n // eslint-disable-next-line react/no-danger\r\n
\r\n ),\r\n },\r\n ];\r\n\r\n return (\r\n \r\n );\r\n}\r\n\r\nUnstyledSPAv2Tutorial.propTypes = {\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.string.isRequired,\r\n }).isRequired,\r\n classes: PropTypes.shape({\r\n spaTutorial: PropTypes.string.isRequired,\r\n }).isRequired,\r\n};\r\n\r\nexport const SPAv2Tutorial = withDefaultStyles(UnstyledSPAv2Tutorial, style);\r\n","/* eslint-disable jsx-a11y/anchor-is-valid */\r\n/* eslint-disable no-script-url */\r\nimport React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classnames from 'classnames';\r\nimport { template } from 'underscore';\r\nimport { withDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { underlineLinkStyle } from '@bingads-webui-campaign-react/common-styles';\r\nimport { Tutorial } from './tutorial';\r\n\r\nconst style = (_, { palette }) => ({\r\n spaTutorial: {\r\n padding: '0 22px',\r\n borderBottom: `1px solid ${palette.neutralLight}`,\r\n ...underlineLinkStyle({ palette, elementLocator: 'a.HelpTopic' }),\r\n },\r\n campaignLink: {\r\n ...underlineLinkStyle({ palette, elementLocator: '', isGreyBackground: true }),\r\n },\r\n});\r\n\r\nfunction getHtmlCampaignSection(i18n, classes) {\r\n const { search } = window.location;\r\n const campaignLink = `${i18n.getString(_TL_('start creating campaigns'))}`;\r\n const tmpl = i18n.getString(_TL_('After you add your Publisher account and app information, you can {{campaignLink}}'));\r\n const createTmpl = template(tmpl);\r\n return createTmpl({\r\n campaignLink,\r\n });\r\n}\r\n\r\nfunction getHtmlEnterSellerIdsSection(i18n) {\r\n const brandTag = `${i18n.getString(_TL_('Seller IDs'))}`;\r\n const addPublisherUIItem = `${i18n.getString(_TL_('Add Publisher'))}`;\r\n const tmpl = i18n.getString(_TL_('Select {{addPublisherUIItem}} and search for your Publisher account in Partner Center. You can search by using app or Publisher information. Once you add your Publisher account, you can start creating campaigns.'));\r\n const createTmpl = template(tmpl);\r\n return createTmpl({\r\n brands: brandTag,\r\n addPublisherUIItem,\r\n });\r\n}\r\n\r\nfunction UnstyledMSStoreAdsTutorial({ i18n, classes }) {\r\n const description = (\r\n \r\n {`${i18n.getString(_TL_('Microsoft Store ads help you improve the discoverability of your apps and games, manage campaigns, and review performance reports.'))} `}\r\n \r\n {i18n.getString(_TL_('Learn more'))}\r\n \r\n \r\n );\r\n\r\n const items = [\r\n {\r\n title: i18n.getString(_TL_('Add and connect your Publisher account')),\r\n text: (\r\n // eslint-disable-next-line react/no-danger\r\n
\r\n ),\r\n },\r\n {\r\n title: i18n.getString(_TL_('Create campaigns')),\r\n text: (\r\n // eslint-disable-next-line react/no-danger\r\n
\r\n ),\r\n },\r\n ];\r\n\r\n return (\r\n \r\n );\r\n}\r\n\r\nUnstyledMSStoreAdsTutorial.propTypes = {\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n classes: PropTypes.shape({\r\n spaTutorial: PropTypes.string.isRequired,\r\n campaignLink: PropTypes.string.isRequired,\r\n }).isRequired,\r\n};\r\n\r\nexport const MSStoreAdsTutorial = withDefaultStyles(UnstyledMSStoreAdsTutorial, style);\r\n","import React, { useContext } from 'react';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { registerIcons } from '@fluentui/style-utilities';\r\nimport SparkleImg from './sparkle.svg';\r\n\r\nexport const SparkleIcon = () => {\r\n const i18n = useContext(I18nContext);\r\n return (\r\n {i18n.getString(_TL_('sparkle\r\n );\r\n};\r\n\r\nregisterIcons({\r\n icons: {\r\n 'sparkle-svg': ,\r\n },\r\n});\r\n\r\nexport const SparkleImgSVGIcon = 'sparkle-svg';\r\nexport const SparkleImgIcon = SparkleImg;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { DefaultButton, Link, Stack } from '@fluentui/react';\r\nimport { withDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\n\r\nconst getStyle = () => ({\r\n title: {\r\n fontSize: 26,\r\n },\r\n noStoreView: {\r\n marginLeft: 32,\r\n },\r\n addBrandLink: {\r\n marginLeft: 5,\r\n },\r\n buttonContainer: {\r\n borderTop: '1px solid #edebe9',\r\n paddingTop: 16,\r\n marginTop: '10px !important',\r\n marginRight: 20,\r\n },\r\n});\r\n\r\nconst NoStoreTitle = _TL_('Campaign settings');\r\nconst NoStoreText = _TL_('To create a shopping campaign as a brand, you must first add your brand names and initiate product matching with the retailers.');\r\n\r\nconst UnStyledNoStoreView = ({ i18n, classes, onCancel }) => (\r\n \r\n

{i18n.getString(NoStoreTitle)}

\r\n \r\n {i18n.getString(NoStoreText)}\r\n \r\n {i18n.getString(_TL_('Add brands'))}\r\n \r\n \r\n
\r\n \r\n {i18n.getString(_TL_('Cancel'))}\r\n \r\n
\r\n
\r\n);\r\n\r\nUnStyledNoStoreView.propTypes = {\r\n classes: PropTypes.shape({\r\n title: PropTypes.string.isRequired,\r\n noStoreView: PropTypes.string.isRequired,\r\n addBrandLink: PropTypes.string.isRequired,\r\n buttonContainer: PropTypes.string.isRequired,\r\n }).isRequired,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }).isRequired,\r\n onCancel: PropTypes.func.isRequired,\r\n};\r\n\r\nexport const NoStoreView = withDefaultStyles(UnStyledNoStoreView, getStyle);\r\n","const deviceDefaultSetting = [\r\n {\r\n targeted: _TL_('Targeted'),\r\n device: _TL_('Computer'),\r\n bidAdjustmentDropdown: 'Increase by',\r\n bidAdjustmentInput: 0,\r\n },\r\n {\r\n targeted: _TL_('Targeted'),\r\n device: _TL_('Tablet'),\r\n bidAdjustmentDropdown: 'Increase by',\r\n bidAdjustmentInput: 0,\r\n },\r\n {\r\n targeted: _TL_('Targeted'),\r\n device: _TL_('Smartphone'),\r\n bidAdjustmentDropdown: 'Increase by',\r\n bidAdjustmentInput: 0,\r\n },\r\n];\r\n\r\nexport const deviceDefaultSettings = {\r\n parentLevelSettings: [...deviceDefaultSetting],\r\n currentLevelSettings: [...deviceDefaultSetting],\r\n useParentLevel: false,\r\n};\r\n\r\nexport const resetDeviceDefaultSettings = (deviceTargets = deviceDefaultSetting) => {\r\n const { currentLevelSettings } = deviceTargets;\r\n\r\n return {\r\n ...deviceTargets,\r\n currentLevelSettings: currentLevelSettings.map(setting => ({\r\n // Existing settings has Id\r\n ...setting,\r\n bidAdjustmentInput: 0,\r\n bidAdjustmentDropdown: 'Increase by',\r\n })),\r\n };\r\n};\r\n\r\nconst defaultLocationData = {\r\n parentLevelSettings: {},\r\n currentLevelSettings: {\r\n currentLocations: [],\r\n targetOption: 'everywhere',\r\n peopleInLocation: true,\r\n peopleSearchingForLocation: true,\r\n },\r\n useParentLevel: false,\r\n bidMode: false,\r\n};\r\n\r\nconst defaultBudget = {\r\n Amount: 25,\r\n Type: 'DailyStandard',\r\n};\r\n\r\nexport const getDefaultAdDistribution = isMran => (isMran ? 'InHousePromotion' : 'BingYahooAndSearchPartners');\r\n\r\nexport const getDefaultCampaignValues = (isMran) => {\r\n let biddingScheme = { Type: 'ManualCpc' };\r\n\r\n if (!isMran) {\r\n biddingScheme = {\r\n Type: 'CostPerSale',\r\n TargetCostPerSale: 1,\r\n };\r\n }\r\n\r\n return {\r\n locationTargets: defaultLocationData,\r\n Budget: defaultBudget,\r\n BiddingScheme: biddingScheme,\r\n device: deviceDefaultSettings,\r\n dayTimeRanges: [],\r\n AdDistribution: getDefaultAdDistribution(isMran),\r\n };\r\n};\r\n","import { shouldSelectBundleOption, parseLocationTargets } from '@bingads-webui-campaign/hotel-common-targets';\r\nimport { modelToViewModelDayTimeTargets, locationTargetsOptionKeys } from '@bingads-webui-campaign-react/wizard-shared-components';\r\n\r\nimport { deviceDefaultSettings } from './default-values';\r\n\r\nexport const modelToViewModelForLocationTargets = ({\r\n model, bundleCountries, campaignId,\r\n}) => {\r\n const {\r\n locations,\r\n intentId,\r\n intentOption,\r\n } = parseLocationTargets(model, 'campaign', campaignId);\r\n let targetOption = locations.length ? locationTargetsOptionKeys.specific : locationTargetsOptionKeys.everywhere;\r\n targetOption = shouldSelectBundleOption(bundleCountries, locations) ? locationTargetsOptionKeys.bundleOrDefaultMarket : targetOption;\r\n\r\n return {\r\n locationTargets: {\r\n currentLevelSettings: {\r\n initLocations: locations,\r\n currentLocations: locations,\r\n targetOption,\r\n intentId,\r\n ...intentOption,\r\n },\r\n bidMode: true,\r\n useParentLevel: locations.length === 0,\r\n },\r\n };\r\n};\r\n\r\nexport const modelToViewModelForDayTimeTargets = ({\r\n model,\r\n}) => {\r\n const campaignDayTimeRanges = modelToViewModelDayTimeTargets(model);\r\n return {\r\n dayTimeRanges: campaignDayTimeRanges,\r\n };\r\n};\r\n\r\nconst DeviceMap = {\r\n Tablets: _TL_('Tablet'),\r\n Computers: _TL_('Computer'),\r\n Smartphones: _TL_('Smartphone'),\r\n};\r\n\r\nexport const modelToViewModelDeviceTargets = ({\r\n model,\r\n}) => {\r\n const currentLevelSettings = model.map((item) => {\r\n const device = DeviceMap[item.Criterion.DeviceName];\r\n const bidAdjustmentInput = item.CriterionBid.Multiplier;\r\n const bidAdjustmentDropdown = bidAdjustmentInput >= 0 ? 'Increase by' : 'Decrease by';\r\n\r\n return {\r\n targeted: _TL_('Targeted'),\r\n device,\r\n bidAdjustmentDropdown,\r\n bidAdjustmentInput: Math.abs(bidAdjustmentInput),\r\n // Move this property to the last, as details doesn't need this property, and they have bugs for showing \":\"\"\r\n Id: item.Id,\r\n };\r\n });\r\n\r\n return {\r\n device: {\r\n ...deviceDefaultSettings,\r\n currentLevelSettings,\r\n },\r\n };\r\n};\r\n","import _ from 'underscore';\r\n\r\nimport { convertLocationStateToLocationSchemaCampaign } from '@bingads-webui-campaign/hotel-common-targets';\r\nimport { convertDeviceStateToDeviceSchema, getAdSchedule } from '@bingads-webui-campaign/hotel-campaign-upsert';\r\nimport timeZoneMapper from '@bingads-webui-component-legacy/timezonemapper/index';\r\n\r\nimport { modelToViewModelForLocationTargets, modelToViewModelForDayTimeTargets, modelToViewModelDeviceTargets } from './campaign-criterions';\r\n\r\nconst defaultAdGroupName = 'Ad group #1';\r\n\r\nexport const getAdGroup = (campaign, shoppingSearchBid) => {\r\n const adgroup = {\r\n CampaignName: campaign.Name,\r\n Name: defaultAdGroupName,\r\n Medium: 'Search',\r\n PricingModel: 'CPC',\r\n Status: 'Active',\r\n AdDistribution: campaign.AdDistribution,\r\n ...campaign.adScheduleDateSettings,\r\n SearchBid: shoppingSearchBid,\r\n };\r\n\r\n if (campaign.Id) {\r\n adgroup.Campaign = {\r\n Id: campaign.Id,\r\n };\r\n }\r\n\r\n return adgroup;\r\n};\r\n\r\nexport const getAd = campaign => ({\r\n CampaignName: campaign.Name,\r\n AdGroupName: defaultAdGroupName,\r\n PromotionalText: '',\r\n});\r\n\r\nexport const getProductPartition = (campaign, shoppingSearchBid) => ({\r\n BidAmount: shoppingSearchBid,\r\n ProductCondition: 'All',\r\n ProductValue: '',\r\n CampaignName: campaign.Name,\r\n AdGroupName: defaultAdGroupName,\r\n IsExcluded: false,\r\n IsLeaf: 'Unit',\r\n});\r\n\r\n// Reference https://msasg.visualstudio.com/Bing_Ads/_git/AdsAppsCampaignUI?path=/private/campaign-legacy/packages/shopping-campaign/view/campaign-creation/index.js&_a=contents&version=GBmaster\r\nexport const convertCampaignStateToCampaignJSONSchemaData = ({\r\n campaign,\r\n // TODO, edit mode\r\n initTargets = {},\r\n bundleLocationCriterions,\r\n shoppingSettings = {},\r\n isSPB = false,\r\n}) => {\r\n // As we are using some shared function, and the data structure is a little bit different, thus we need to transform it\r\n // TODO check if we could update our data structure to match the shared function\r\n const campaignInSharedFormat = {\r\n ...campaign,\r\n name: { value: campaign.Name },\r\n bidStrategy: { option: campaign.BiddingScheme.Type },\r\n adScheduleData: campaign.adSchedulesBulkUpsert || [],\r\n };\r\n\r\n const shoppingSearchBid = campaign.SearchBid || 1;\r\n\r\n const deviceSettings = convertDeviceStateToDeviceSchema(campaignInSharedFormat, initTargets);\r\n const locationTargets = convertLocationStateToLocationSchemaCampaign(campaign.locationTargets, bundleLocationCriterions, campaignInSharedFormat);\r\n const adSchedules = getAdSchedule(campaignInSharedFormat);\r\n\r\n const model = {\r\n Name: campaign.Name,\r\n BiddingScheme: campaign.BiddingScheme,\r\n AdScheduleUseSearcherTimeZone: !!campaign.AdScheduleUseSearcherTimeZone,\r\n Budget: campaign.Budget,\r\n BudgetId: campaign.Budget.Id,\r\n CampaignType: 'Shopping',\r\n CampaignSubType: 'ShoppingSponsoredProductAd',\r\n Languages: ['All'],\r\n TimeZone: timeZoneMapper.getAccountTimeZone(),\r\n CampaignCriterions: [\r\n ...deviceSettings,\r\n ...locationTargets,\r\n ...adSchedules,\r\n ],\r\n ...shoppingSettings.basic,\r\n };\r\n\r\n if (shoppingSettings.hasFilteredProducts && !_.isEmpty(shoppingSettings.productScope)) {\r\n model.CampaignProductScope = { ...shoppingSettings.productScope, CampaignName: campaign.Name };\r\n\r\n if (shoppingSettings.productScopeId) {\r\n model.CampaignProductScope.Id = shoppingSettings.productScopeId;\r\n }\r\n }\r\n\r\n // Quick return when editing\r\n if (campaign.Id) {\r\n return {\r\n ...model,\r\n Id: campaign.Id,\r\n };\r\n }\r\n\r\n if (isSPB) {\r\n model.IsPromotionsForBrands = true;\r\n }\r\n\r\n return {\r\n ...model,\r\n Status: 'Active',\r\n AdGroups: [getAdGroup(campaign, shoppingSearchBid)],\r\n ProductAds: [getAd(campaign)],\r\n ProductPartitions: [getProductPartition(campaign, shoppingSearchBid)],\r\n };\r\n};\r\n\r\nexport const modelToViewModelForCampaign = ({\r\n campaignModel,\r\n locationCriterionsModel,\r\n dayTimeCriterionsModel,\r\n deviceCriterionsModel,\r\n bundleCountries,\r\n}) => {\r\n let data = { ...campaignModel };\r\n\r\n if (!_.isEmpty(locationCriterionsModel)) {\r\n data = _.extend(data, modelToViewModelForLocationTargets({\r\n model: locationCriterionsModel,\r\n bundleCountries,\r\n campaignId: campaignModel.Id,\r\n }));\r\n }\r\n\r\n if (!_.isEmpty(dayTimeCriterionsModel)) {\r\n data = _.extend(data, modelToViewModelForDayTimeTargets({\r\n model: dayTimeCriterionsModel,\r\n }));\r\n }\r\n\r\n if (!_.isEmpty(deviceCriterionsModel)) {\r\n data = _.extend(data, modelToViewModelDeviceTargets({\r\n model: deviceCriterionsModel,\r\n }));\r\n }\r\n\r\n if (campaignModel.CampaignSettings && campaignModel.CampaignSettings[0] && campaignModel.CampaignSettings[0]['@odata.type'] === '#Model.ShoppingSettings') {\r\n data.ProviderId = campaignModel.CampaignSettings[0].ProviderId;\r\n data.SalesCountry = campaignModel.CampaignSettings[0].SalesCountry;\r\n data.Priority = campaignModel.CampaignSettings[0].Priority;\r\n }\r\n\r\n return data;\r\n};\r\n","import { getCampaignStoreQueriesWithLocalMock } from '@bingads-webui-campaign-react/merchant-shared';\r\nimport { queryify } from '@bingads-webui/url-util';\r\nimport jsdata from '@bingads-webui-component-legacy/js-data-campaign/index';\r\nimport { edmCampaign } from '@bingads-webui/edm-campaign';\r\nimport { getProductScopeData, mergeData } from '@bingads-webui-campaign-react/product-services';\r\n\r\nconst campaignEDM = edmCampaign.types.resolve('Model.ShoppingCampaign');\r\nconst campaignResource = new campaignEDM.ResourceIdentifier();\r\n\r\nexport const createOrUpdateCampaign = (data) => {\r\n const createOrUpdateCall = data && data.Id\r\n ? campaignResource.bulkUpdate.bind(campaignResource)\r\n : campaignResource.bulkCreate.bind(campaignResource);\r\n\r\n return createOrUpdateCall(data);\r\n};\r\n\r\nconst campaignStoreQueries = getCampaignStoreQueriesWithLocalMock();\r\n\r\nexport const getMmcStoreData = options => campaignStoreQueries.getActiveCampaignStores(options);\r\nexport const getProductScopeFromOData = (params, serverContext) => {\r\n const options = {\r\n dataName: 'MetaData',\r\n bypassCache: true,\r\n cacheResponse: true,\r\n getProductConditionOptions: true,\r\n getSalesCountryCollection: true,\r\n noBMCAccounts: true,\r\n };\r\n\r\n if (params.salesCountry) {\r\n options.countryCode = params.salesCountry;\r\n }\r\n\r\n if (params.campaignId) {\r\n options.campaignId = params.campaignId;\r\n options.getCampaignCriterions = true;\r\n }\r\n\r\n if (params.getCategoryFullData) {\r\n options.getCategoryFullData = true;\r\n }\r\n\r\n const p = getProductScopeData(null, serverContext, options).then(data => mergeData(data));\r\n\r\n return p;\r\n};\r\n\r\nexport const getProductData = ({\r\n aid,\r\n cid,\r\n uid,\r\n campaignId = '',\r\n salesCountry,\r\n getCategoryFullData = false,\r\n}) => {\r\n let url = queryify('/Campaign/NewCampaign/GetProductScope', {\r\n aid,\r\n cid,\r\n uid,\r\n getCategoryFullData,\r\n });\r\n\r\n const urlQueryStringObject = {};\r\n\r\n if (campaignId) {\r\n urlQueryStringObject.campaignId = campaignId;\r\n }\r\n\r\n if (salesCountry) {\r\n urlQueryStringObject.salesCountry = salesCountry;\r\n }\r\n\r\n url = queryify(url, urlQueryStringObject);\r\n\r\n const params = {\r\n url,\r\n adapter: 'legacy',\r\n bypassCache: true,\r\n cacheResponse: true,\r\n };\r\n\r\n return jsdata.Product.find('MetaData', params);\r\n};\r\n\r\nexport const readCampaign = (cid, aid, campaignId) =>\r\n edmCampaign\r\n .Customers.$withKey(cid)\r\n .Accounts.$withKey(aid)\r\n .Campaigns.$withKey(campaignId)\r\n .get({ select: ['Budget'] })\r\n .toPromise();\r\n\r\nconst campaignCriterionTypeName = 'Model.CampaignCriterion';\r\n\r\nconst readCampaignCriterions = (cid, aid, campaignId, type) =>\r\n edmCampaign\r\n .Customers.$withKey(cid)\r\n .Accounts.$withKey(aid)\r\n .Campaigns.$withKey(campaignId)\r\n .CampaignCriterions\r\n .$cast(campaignCriterionTypeName)\r\n .get({\r\n filter: {\r\n where: type,\r\n },\r\n })\r\n .toPromise();\r\n\r\nexport const readLocationCriterions = (cid, aid, campaignId) =>\r\n readCampaignCriterions(\r\n cid, aid, campaignId,\r\n \"isof(Criterion,'Model.LocationCriterion') or isof(Criterion,'Model.RadiusCriterion') or isof(Criterion,'Model.LocationIntentCriterion')\"\r\n );\r\n\r\nexport const readDayTimeCriterions = (cid, aid, campaignId) =>\r\n readCampaignCriterions(\r\n cid, aid, campaignId,\r\n \"isof(Criterion,'Model.DayTimeCriterion')\"\r\n );\r\n\r\nexport const readDeviceCriterions = (cid, aid, campaignId) =>\r\n readCampaignCriterions(\r\n cid, aid, campaignId,\r\n \"isof(Criterion,'Model.DeviceCriterion')\"\r\n );\r\n\r\nexport const destroyProductScope = (campaignId, productScopeId) =>\r\n jsdata.CampaignProductScope.destroy(productScopeId, { adapter: 'bulk', parentId: campaignId });\r\n","export const campaignCreationStyles = () => ({\r\n '& .container-budget': {\r\n '& .input-group': {\r\n marginLeft: '0px !important',\r\n },\r\n\r\n '& .form-control-static': {\r\n display: 'flex !important',\r\n margin: '0px !important',\r\n },\r\n },\r\n\r\n '& .vanila-bid-strategy': {\r\n '& .bid-strategy-container': {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n\r\n '& .bid-strategy-selection-container .control-label': {\r\n marginTop: 0,\r\n },\r\n\r\n '& .bid-strategy-details-container .control-label': {\r\n marginTop: 26,\r\n },\r\n\r\n '& .bid-strategy-details-container .form-control-static .control-label': {\r\n display: 'inline',\r\n },\r\n },\r\n },\r\n\r\n '& .location-target-options .intent-target-options .ms-Checkbox-label': {\r\n display: 'inline-flex',\r\n },\r\n\r\n '& .bing-maps-location-targets-search-box-with-search-options': {\r\n '& a:hover, a:focus, a:active': {\r\n textDecoration: 'none',\r\n\r\n '&::after': {\r\n display: 'none',\r\n },\r\n },\r\n },\r\n\r\n '& .location-target-settings .everywhere': {\r\n display: 'flex',\r\n },\r\n\r\n '& .shopping-settings__container .storeContainer': {\r\n marginTop: 0,\r\n },\r\n\r\n '& #device-target-wrapper .table-container': {\r\n width: 480,\r\n },\r\n\r\n '& .collapse-content': {\r\n paddingLeft: 2,\r\n },\r\n\r\n '& .shopping-settings__container .productsScope': {\r\n marginTop: 0,\r\n },\r\n\r\n '& .shopping-settings__container .brand-wide-cashback-container': {\r\n paddingBottom: 12,\r\n\r\n '& .brand-wide-cashback-toggle-container': {\r\n paddingTop: 7,\r\n\r\n '& label.ms-Toggle-label': {\r\n fontWeight: 400,\r\n },\r\n },\r\n },\r\n\r\n '& .adschedule-targets-container': {\r\n paddingBottom: '0px !important',\r\n\r\n '& .scheduling-grid.advanced-scheduling-grid': {\r\n marginTop: '16px',\r\n },\r\n\r\n '& .ad-scheduling-panel': {\r\n '& .add-time-row': {\r\n padding: '0px !important',\r\n marginLeft: 10,\r\n },\r\n },\r\n },\r\n});\r\n","import { isFunction, some, isEmpty } from 'underscore';\r\n\r\nimport { merge } from '@bingads-webui/primitive-utilities';\r\nimport {\r\n campaignSettingsStyles,\r\n budgetBidsStyles,\r\n creationCommonStyle,\r\n} from '@bingads-webui-campaign-react/campaign-adgroup-settings-shared-styles';\r\nimport {\r\n uiblockerStyle,\r\n toggleButtonStyle,\r\n messageBarStyle,\r\n searchboxStyle,\r\n tableStyle,\r\n btnStyle,\r\n linkStyle,\r\n paginationStyle,\r\n statusStyle,\r\n controlStyle,\r\n floatButtonStyle,\r\n getLocalBlockerStyle,\r\n containerBudgetStyle,\r\n locationBidGridStyle,\r\n keywordPlannerStyle,\r\n locationMapStyle,\r\n glyphIconStyle,\r\n sharedBudgetGridWrapper,\r\n selectElementStyle,\r\n scrollbarStyle,\r\n datePickerStyle,\r\n targetLocationRecommendationStyle,\r\n alertStyle,\r\n helpbuttonStyle,\r\n mergeStyles,\r\n} from '@bingads-webui-campaign-react/common-styles';\r\n\r\nimport { campaignCreationStyles } from './get-campaign-creation-styles';\r\n\r\nfunction resolveStyles({ theme }, ...styles) {\r\n const resolvedStyles = styles.map(s => (isFunction(s) ? s(theme) : s));\r\n\r\n if (some(resolvedStyles, isEmpty)) {\r\n throw new Error('Cannot pass in empty style!');\r\n }\r\n\r\n return resolvedStyles;\r\n}\r\n\r\nconst glyphIconStyleOverride = (theme) => {\r\n const original = glyphIconStyle(theme);\r\n original['input[type=\"radio\"]'] = {};\r\n return original;\r\n};\r\n\r\nexport const getStyles = (components, theme) => {\r\n const { palette } = theme;\r\n\r\n return {\r\n root: {\r\n padding: '8px 32px',\r\n backgroundColor: 'rgba(250, 249, 248, 1)',\r\n borderTop: '1px solid rgba(225, 223, 221, 1)',\r\n flexBasis: 0,\r\n flexGrow: 1,\r\n overflowY: 'auto',\r\n },\r\n title: {\r\n fontSize: 26,\r\n },\r\n description: {\r\n color: 'rgba(96, 94, 92, 1)',\r\n },\r\n footer: {\r\n '& .step-skip': {\r\n marginLeft: 25,\r\n },\r\n },\r\n uiBlockerAdapter: {\r\n height: '100%',\r\n ...mergeStyles(\r\n { theme },\r\n components.reactUIBlockerStyle(theme.palette, 'rgba(255, 255, 255, 0.4)'),\r\n {\r\n '& .react-block-ui-none, & .react-block-ui': {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n flexGrow: 1,\r\n overflowY: 'hidden', // to not extend to the content, but shrink to flex-parent\r\n },\r\n },\r\n {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n flexGrow: 1,\r\n overflowY: 'hidden',\r\n }\r\n ),\r\n },\r\n settingContainer: {\r\n maxWidth: 1008,\r\n ...merge(\r\n {},\r\n {\r\n '@global': merge(\r\n {},\r\n ...resolveStyles(\r\n { theme },\r\n messageBarStyle,\r\n btnStyle,\r\n controlStyle,\r\n floatButtonStyle,\r\n getLocalBlockerStyle,\r\n glyphIconStyleOverride,\r\n scrollbarStyle\r\n )\r\n ),\r\n },\r\n ...resolveStyles(\r\n { theme },\r\n campaignSettingsStyles,\r\n budgetBidsStyles,\r\n containerBudgetStyle,\r\n keywordPlannerStyle,\r\n searchboxStyle,\r\n locationBidGridStyle,\r\n locationMapStyle,\r\n sharedBudgetGridWrapper,\r\n tableStyle,\r\n toggleButtonStyle,\r\n linkStyle,\r\n selectElementStyle,\r\n campaignCreationStyles\r\n )\r\n ),\r\n ...alertStyle(theme),\r\n ...paginationStyle(theme),\r\n ...statusStyle(theme),\r\n ...creationCommonStyle(theme),\r\n },\r\n '@global': merge(\r\n {},\r\n glyphIconStyleOverride(theme),\r\n uiblockerStyle(theme),\r\n datePickerStyle({ palette }),\r\n targetLocationRecommendationStyle({ palette }),\r\n helpbuttonStyle(theme)\r\n ),\r\n floatingBanner: {\r\n position: 'fixed',\r\n bottom: '10%',\r\n left: '50%',\r\n transform: 'translate(-50%, 0)',\r\n background: '#fff',\r\n width: 650,\r\n zIndex: 10000000,\r\n },\r\n };\r\n};\r\n","export const ERROR_ENTITY = {\r\n Campaign: 'campaign',\r\n CampaignLocation: 'campaignLocation',\r\n CampaignRadius: 'campaignRadius',\r\n CampaignNegativeLocation: 'campaignNegativeLocation',\r\n CampaignLocationIntent: 'campaignLocationIntent',\r\n CampaignDayTimeCriterion: 'campaignDayTimeCriterion',\r\n};\r\n\r\nexport const apiErrorMapper = campaignApiError => (campaignApiError &&\r\n (campaignApiError.isHtmlMessage ?\r\n { DangerousHtmlMessage: campaignApiError.message } :\r\n campaignApiError.message || campaignApiError.code || campaignApiError.toString())) || '';\r\n","import React, { useCallback, useContext } from 'react';\r\nimport { Text } from '@fluentui/react';\r\nimport { HelpPopup } from '@bingads-webui-react/help-popup';\r\nimport PropTypes from 'prop-types';\r\nimport { withCustomValidation } from '@bingads-webui-react/validation';\r\nimport { ActivityContext } from '@bingads-webui-react/hoc-with-signal';\r\nimport { LegacySharedBudget } from '@bingads-webui-campaign-react/legacy-shared-budget';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\n\r\nconst LegacySharedBudgetWithCustomValidation = ({\r\n campaignId, validationProps, updateValidation, ...restProps\r\n}) => {\r\n const { data } = validationProps;\r\n const i18n = useContext(I18nContext);\r\n const activity = useContext(ActivityContext);\r\n\r\n const onChange = useCallback((newData, newIsValid) => {\r\n updateValidation(newIsValid ? [] : [i18n.getString(_TL_('Legacy Budget has validation errors'))], { Budget: newData });\r\n if (activity) {\r\n // signal activity to parent\r\n activity.signal(`onLegacySharedBudgetChange - ${JSON.stringify(newData)} - isValid: ${newIsValid}}`);\r\n }\r\n }, [i18n, updateValidation, activity]);\r\n\r\n return (\r\n
\r\n
\r\n {i18n.getString(_TL_('Campaign budget'))}\r\n \r\n
\r\n \r\n
\r\n );\r\n};\r\n\r\nLegacySharedBudgetWithCustomValidation.propTypes = {\r\n campaignId: PropTypes.string.isRequired,\r\n validationProps: PropTypes.shape({\r\n data: PropTypes.shape({\r\n Budget: PropTypes.shape({\r\n Amount: PropTypes.number,\r\n }),\r\n }),\r\n }).isRequired,\r\n updateValidation: PropTypes.func.isRequired,\r\n};\r\n\r\nexport const ValidatedLegacySharedBudget = withCustomValidation(LegacySharedBudgetWithCustomValidation);\r\n\r\n","import React, { useCallback, useContext, useState } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport _ from 'underscore';\r\n\r\nimport { Label } from '@bingads-webui-react/fabric-control';\r\nimport { RadioGroup } from '@bingads-webui-react/radio';\r\nimport { withCustomValidation } from '@bingads-webui-react/validation';\r\nimport { ActivityContext } from '@bingads-webui-react/hoc-with-signal';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { DeviceTargetSetting, isDeviceTargetValid } from '@bingads-webui-campaign/hotel-common-targets';\r\n\r\nimport { resetDeviceDefaultSettings } from '../model/default-values';\r\n\r\nconst DevicesSettingOptionKeys = {\r\n All: 'all',\r\n Custom: 'custom',\r\n};\r\n\r\nconst DevicesSettingOptionKeysMap = {\r\n [DevicesSettingOptionKeys.All]: _TL_('Target all devices at 100%'),\r\n [DevicesSettingOptionKeys.Custom]: _TL_('Set bid modifiers for certain devices'),\r\n};\r\n\r\nconst getInitTargetOption = (device) => {\r\n if (device.useParentLevel) {\r\n return DevicesSettingOptionKeys.All;\r\n }\r\n\r\n return device.currentLevelSettings.every(setting => setting.bidAdjustmentInput === 0) ? DevicesSettingOptionKeys.All : DevicesSettingOptionKeys.Custom;\r\n};\r\n\r\nconst TargetDevicesWithCustomValidation = ({\r\n validationProps, updateValidation, bidStrategyType,\r\n}) => {\r\n const { data: device } = validationProps;\r\n const i18n = useContext(I18nContext);\r\n const activity = useContext(ActivityContext);\r\n const [targetOption, setTargetOption] = useState(getInitTargetOption(device));\r\n\r\n const onTargetOptionChanged = useCallback((newTargetOption) => {\r\n // Reset device settings\r\n if (newTargetOption === DevicesSettingOptionKeys.All) {\r\n updateValidation([], { device: resetDeviceDefaultSettings(device) });\r\n }\r\n\r\n setTargetOption(newTargetOption);\r\n\r\n if (activity) {\r\n activity.signal(`onTargetOptionChanged - ${JSON.stringify(newTargetOption)}`);\r\n }\r\n }, [activity, updateValidation, device]);\r\n\r\n const onChange = useCallback((newData) => {\r\n const { useParentLevel, currentLevelSettings } = newData;\r\n const newIsValid = useParentLevel || isDeviceTargetValid(currentLevelSettings, _.noop, bidStrategyType);\r\n updateValidation(newIsValid ? [] : [i18n.getString(_TL_('Target devices has validation errors'))], { device: newData });\r\n\r\n if (activity) {\r\n // signal activity to parent\r\n activity.signal(`onTargetDevicesChange - ${JSON.stringify(newData)} - isValid: ${newIsValid}}`);\r\n }\r\n }, [i18n, updateValidation, activity, bidStrategyType]);\r\n\r\n return (\r\n
\r\n
\r\n
\r\n i18n.getString(DevicesSettingOptionKeysMap[key])}\r\n onChange={onTargetOptionChanged}\r\n checked={targetOption}\r\n getItemId={_.identity}\r\n />\r\n
\r\n {\r\n targetOption === DevicesSettingOptionKeys.Custom && (\r\n
\r\n \r\n
\r\n )\r\n }\r\n
\r\n );\r\n};\r\n\r\nTargetDevicesWithCustomValidation.propTypes = {\r\n validationProps: PropTypes.shape({\r\n data: PropTypes.shape({}),\r\n }).isRequired,\r\n updateValidation: PropTypes.func.isRequired,\r\n bidStrategyType: PropTypes.string.isRequired,\r\n};\r\n\r\nexport const ValidatedTargetDevices = withCustomValidation(TargetDevicesWithCustomValidation);\r\n\r\n","import React, { useCallback, useContext, useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport { withCustomValidation } from '@bingads-webui-react/validation';\r\nimport { ActivityContext } from '@bingads-webui-react/hoc-with-signal';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { ServerContext } from '@bingads-webui-campaign-react/server-context';\r\nimport { LegacyShoppingSettings } from '@bingads-webui-campaign-react/legacy-shopping-settings';\r\n\r\nconst ProductFilterWithCustomValidation = ({\r\n updateValidation, isMran, shoppingSettingsRef, productData, campaignSettings,\r\n}) => {\r\n const activity = useContext(ActivityContext);\r\n const i18n = useContext(I18nContext);\r\n const serverContext = useContext(ServerContext);\r\n\r\n const onChange = useCallback((newData, newIsValid) => {\r\n // We are not using the updated data here as we will using the backbone view ref to get the final data\r\n updateValidation(newIsValid ? [] : [i18n.getString(_TL_('Legacy product settings has error'))]);\r\n\r\n if (activity) {\r\n // signal activity to parent\r\n activity.signal(`onLegacyProductFilterChange - ${JSON.stringify(newData)} - isValid: ${newIsValid}}`);\r\n }\r\n }, [updateValidation, activity, i18n]);\r\n\r\n const shoppingSettingOptions = useMemo(() => ({\r\n data: productData,\r\n model: campaignSettings,\r\n campaignType: 'Shopping',\r\n campaignSubType: 'ShoppingSponsoredProductAd',\r\n isStoreValid: true,\r\n isSponsoredSettings: {\r\n isSponsoredCampaign: true,\r\n hideBid: true,\r\n hideStoreSection: true,\r\n isSponsoredPilotEnabled: true,\r\n isSPBCampaign: !isMran,\r\n isSPBOptInAvailable: true,\r\n shouldUseNewMmcApiForSpa: true,\r\n },\r\n isMSStoreAdsGAWorkflow: false,\r\n deps: {\r\n i18nNewDesign: i18n,\r\n },\r\n withRealTimeUpdates: true,\r\n accountCountryCode: serverContext.CurrentAccount.CountryCode,\r\n }), [productData, campaignSettings, isMran, i18n]);\r\n\r\n return (\r\n
\r\n \r\n
\r\n );\r\n};\r\n\r\nProductFilterWithCustomValidation.propTypes = {\r\n updateValidation: PropTypes.func.isRequired,\r\n isMran: PropTypes.bool.isRequired,\r\n shoppingSettingsRef: PropTypes.shape({}).isRequired,\r\n productData: PropTypes.shape({}).isRequired,\r\n campaignSettings: PropTypes.shape({}),\r\n};\r\n\r\nProductFilterWithCustomValidation.defaultProps = {\r\n campaignSettings: {},\r\n};\r\n\r\nexport const ValidatedProductFilter = withCustomValidation(ProductFilterWithCustomValidation);\r\n\r\n","import React, { useCallback, useContext } from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport { withCustomValidation } from '@bingads-webui-react/validation';\r\nimport { ActivityContext } from '@bingads-webui-react/hoc-with-signal';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { LegacyBidSetting } from '@bingads-webui-campaign-react/legacy-bid-setting';\r\n\r\nconst BidSettingWithCustomValidation = ({\r\n updateValidation, budgetAmount, validateWithBudget, defaultBidValue,\r\n}) => {\r\n const activity = useContext(ActivityContext);\r\n const i18n = useContext(I18nContext);\r\n\r\n const onChange = useCallback((newData, newIsValid) => {\r\n updateValidation(\r\n newIsValid ? [] : [i18n.getString(_TL_('Legacy bid setting has error'))],\r\n { SearchBid: newData }\r\n );\r\n\r\n if (activity) {\r\n // signal activity to parent\r\n activity.signal(`onLegacyBidSettingChange - ${JSON.stringify(newData)} - isValid: ${newIsValid}}`);\r\n }\r\n }, [updateValidation, activity, i18n]);\r\n\r\n return (\r\n
\r\n \r\n
\r\n );\r\n};\r\n\r\nBidSettingWithCustomValidation.propTypes = {\r\n updateValidation: PropTypes.func.isRequired,\r\n budgetAmount: PropTypes.number,\r\n defaultBidValue: PropTypes.number,\r\n validateWithBudget: PropTypes.bool,\r\n};\r\n\r\nBidSettingWithCustomValidation.defaultProps = {\r\n budgetAmount: null,\r\n defaultBidValue: null,\r\n validateWithBudget: false,\r\n};\r\n\r\nexport const ValidatedBidSetting = withCustomValidation(BidSettingWithCustomValidation);\r\n\r\n","/* eslint-disable react/prop-types */\r\n/* eslint-disable jsx-a11y/anchor-is-valid */\r\nimport React, { useMemo, useContext } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classNames from 'classnames';\r\nimport _ from 'underscore';\r\n\r\nimport {\r\n TextTitle,\r\n ValidatedFixedPanel,\r\n getPanelErrorProps,\r\n Collapse,\r\n useCollapseState,\r\n collapseExpander,\r\n ValidatedPanel,\r\n} from '@bingads-webui-campaign/wizard-jumbo-card';\r\nimport {\r\n ValidatedLegacyBidStrategy,\r\n ValidatedLocationTargetSetting,\r\n} from '@bingads-webui-campaign-react/step-wizard-controls';\r\nimport { ServerContext } from '@bingads-webui-campaign-react/server-context';\r\nimport { Stack, Link } from '@bingads-webui-react/fabric-control';\r\nimport { RemainingCharsValidatedTextField as ServerValidatedRemainingCharsValidatedTextField } from '@bingads-webui-campaign-react/remaining-chars-hint';\r\nimport { Campaign } from '@bingads-webui/campaign-odata-schemas';\r\nimport { withUnvalidatedControlErrors, withControlErrorHandling } from '@bingads-webui-campaign-react/error-handling';\r\nimport { andComp, anyComp, propertyIs, entityIs } from '@bingads-webui-campaign-react/form-error';\r\nimport { getBudgetTitleDetails, getLocationTargetTitleDetails } from '@bingads-webui-campaign-react/wizard-shared-components';\r\nimport { getGridTargetTitleDetails } from '@bingads-webui-campaign/hotel-common-upsert';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\n\r\nimport { ValidatedLegacySharedBudget } from './controls/validated-shared-budget';\r\nimport { ValidatedTargetDevices } from './controls/validated-devices';\r\nimport { ValidatedProductFilter } from './controls/validated-product-filter';\r\nimport { ValidatedBidSetting } from './controls/validated-bid-setting';\r\nimport { ERROR_ENTITY } from './model/api-errors';\r\nimport BudgetBidImg from './media/budget-bid.svg';\r\nimport LocationImg from './media/location.svg';\r\nimport DevicesImg from './media/devices.svg';\r\nimport ProductImg from './media/product.svg';\r\n\r\nconst entityIsCampaign = entityIs(ERROR_ENTITY.Campaign);\r\n\r\nconst campaignNameProp = andComp(entityIsCampaign, propertyIs('Name'));\r\nconst campaignBudgetProp = andComp(entityIsCampaign, propertyIs('Budget'));\r\nconst campaignBiddingSchemeProp = andComp(entityIsCampaign, propertyIs('BiddingScheme'));\r\nconst campaignProductFilterSchemeProp = andComp(entityIsCampaign, propertyIs('ProductFilter'));\r\nconst campaignDevicesSchemeProp = andComp(entityIsCampaign, propertyIs('device'));\r\nconst campaignLocationCriterions = anyComp(\r\n entityIs(ERROR_ENTITY.CampaignLocation),\r\n entityIs(ERROR_ENTITY.CampaignRadius),\r\n entityIs(ERROR_ENTITY.CampaignNegativeLocation),\r\n entityIs(ERROR_ENTITY.CampaignLocationIntent)\r\n);\r\n\r\nconst ServerValidatedLegacySharedBudget = withControlErrorHandling(withUnvalidatedControlErrors(ValidatedLegacySharedBudget, { filter: campaignBudgetProp }));\r\nconst ServerValidatedLegacyBidStrategy = withControlErrorHandling(withUnvalidatedControlErrors(ValidatedLegacyBidStrategy, { filter: campaignBiddingSchemeProp }));\r\nconst ServerValidatedLocationTargetSetting = withControlErrorHandling(withUnvalidatedControlErrors(ValidatedLocationTargetSetting, { filter: campaignLocationCriterions }));\r\nconst ServerValidatedTargetDevicesSetting = withControlErrorHandling(withUnvalidatedControlErrors(ValidatedTargetDevices, { filter: campaignDevicesSchemeProp }));\r\nconst ServerValidatedProductFilterSetting = withControlErrorHandling(withUnvalidatedControlErrors(ValidatedProductFilter, { filter: campaignProductFilterSchemeProp }));\r\nconst ValidatedBidSettingWithErrorHandling = withControlErrorHandling(ValidatedBidSetting);\r\n\r\nexport const BasicSettings = ({\r\n isMran,\r\n isCreation,\r\n scope,\r\n campaign,\r\n bundleCountries,\r\n bundleLocationCriterions,\r\n showAllValidationErrors,\r\n shoppingSettingsRef,\r\n productData,\r\n}) => {\r\n const serverContext = useContext(ServerContext);\r\n const i18n = useContext(I18nContext);\r\n\r\n const {\r\n Id: campaignId,\r\n BiddingScheme: biddingScheme,\r\n Budget: budget,\r\n locationTargets,\r\n device,\r\n CampaignSettings: campaignSettings,\r\n SearchBid: searchBid,\r\n } = campaign;\r\n const biddingStrategyType = biddingScheme.Type;\r\n\r\n const [\r\n allCampaignSettingsSections,\r\n campaignSettingsExpandedSections,\r\n setCampaignSettingsExpandedSections,\r\n flipCampaignSettingsExpandAllState,\r\n ] = useCollapseState(\r\n ['campaign', 'budget-bid', 'locations', 'product-filter', 'devices'] /* all sections */,\r\n ['campaign', 'budget-bid', 'locations', 'product-filter', 'devices'] /* initially expanded sections */\r\n );\r\n\r\n const basicSettingsExpand = useMemo(\r\n () => collapseExpander({ setActiveKeys: setCampaignSettingsExpandedSections }),\r\n [setCampaignSettingsExpandedSections]\r\n );\r\n\r\n const campaignPanel = useMemo(() => (\r\n }\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n >\r\n \r\n \r\n ), [i18n]);\r\n\r\n const bidBudgetPanel = useMemo(() => (\r\n }\r\n formErrorProps={{ showAllValidationErrors }}\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n actuationProps={{\r\n expand: basicSettingsExpand,\r\n expandKey: 'budget-bid',\r\n }}\r\n >\r\n \r\n \r\n {\r\n isMran && isCreation &&\r\n \r\n }\r\n \r\n ), [basicSettingsExpand, biddingScheme, budget, campaignId, i18n, isCreation, isMran, serverContext, showAllValidationErrors, searchBid]);\r\n\r\n const locationPanel = useMemo(() => (\r\n }\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n actuationProps={{\r\n expand: basicSettingsExpand,\r\n expandKey: 'locations',\r\n }}\r\n >\r\n \r\n \r\n ), [basicSettingsExpand, biddingStrategyType, bundleCountries, bundleLocationCriterions, i18n, locationTargets, scope]);\r\n\r\n const productFilterPanel = useMemo(() => (\r\n }\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n actuationProps={{\r\n expand: basicSettingsExpand,\r\n expandKey: 'product-filter',\r\n }}\r\n >\r\n \r\n \r\n ), [basicSettingsExpand, isMran, shoppingSettingsRef, productData, campaignSettings]);\r\n\r\n const devicePanel = useMemo(() => (\r\n }\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n actuationProps={{\r\n expand: basicSettingsExpand,\r\n expandKey: 'devices',\r\n }}\r\n >\r\n \r\n \r\n ), [basicSettingsExpand, biddingStrategyType, device, i18n]);\r\n\r\n return (\r\n
\r\n \r\n {campaignSettingsExpandedSections.length ? i18n.getString(_TL_('Collapse all')) : i18n.getString(_TL_('Expand all'))}\r\n \r\n \r\n {campaignPanel}\r\n {bidBudgetPanel}\r\n {locationPanel}\r\n {productFilterPanel}\r\n {devicePanel}\r\n \r\n
\r\n );\r\n};\r\n\r\nBasicSettings.propTypes = {\r\n isMran: PropTypes.bool,\r\n isCreation: PropTypes.bool,\r\n showAllValidationErrors: PropTypes.bool.isRequired,\r\n scope: PropTypes.shape({}).isRequired,\r\n shoppingSettingsRef: PropTypes.shape({}).isRequired,\r\n};\r\n\r\nBasicSettings.defaultProps = {\r\n isCreation: true,\r\n isMran: false,\r\n};\r\n","import React, { useCallback, useContext, useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport { withCustomValidation } from '@bingads-webui-react/validation';\r\nimport { ActivityContext } from '@bingads-webui-react/hoc-with-signal';\r\nimport { AdDistribution } from '@bingads-webui-campaign/ad-distribution';\r\nimport { getDefaultAdDistribution } from '../model/default-values';\r\n\r\nconst getOptions = (isSPB, onChange) => ({\r\n AdDistribution: getDefaultAdDistribution(!isSPB),\r\n campaignType: 'shopping',\r\n campaignSubType: 'ShoppingSponsoredProductAd',\r\n Languages: ['All'],\r\n isSPBCampaign: isSPB,\r\n onChange,\r\n});\r\n\r\nconst LegacyAdDistributionWithCustomValidation = ({\r\n setAdDistributionView, updateValidation, isMran,\r\n}) => {\r\n const activity = useContext(ActivityContext);\r\n\r\n const onChange = useCallback((newData) => {\r\n updateValidation([], { AdDistribution: newData });\r\n\r\n if (activity) {\r\n // signal activity to parent\r\n activity.signal(`onLegacyAdDistributionChange - ${JSON.stringify(newData)}`);\r\n }\r\n }, [updateValidation, activity]);\r\n\r\n const options = useMemo(() => getOptions(!isMran, onChange), [isMran, onChange]);\r\n\r\n return (\r\n
\r\n \r\n
\r\n );\r\n};\r\n\r\nLegacyAdDistributionWithCustomValidation.propTypes = {\r\n validationProps: PropTypes.shape({\r\n data: PropTypes.shape({}),\r\n }).isRequired,\r\n updateValidation: PropTypes.func.isRequired,\r\n setAdDistributionView: PropTypes.func.isRequired,\r\n isMran: PropTypes.bool.isRequired,\r\n};\r\n\r\nexport const ValidatedLegacyAdDistribution = withCustomValidation(LegacyAdDistributionWithCustomValidation);\r\n\r\n","/* eslint-disable react/prop-types */\r\n/* eslint-disable jsx-a11y/anchor-is-valid */\r\nimport React, { useMemo, useContext, useState } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classNames from 'classnames';\r\n\r\nimport {\r\n TextTitle,\r\n getPanelErrorProps,\r\n Collapse,\r\n useCollapseState,\r\n collapseExpander,\r\n ValidatedPanel,\r\n} from '@bingads-webui-campaign/wizard-jumbo-card';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { Stack, Link, Label } from '@bingads-webui-react/fabric-control';\r\nimport { getAdScheduleDetails } from '@bingads-webui-campaign-react/wizard-shared-components';\r\nimport { ValidatedLegacyAdSchedule } from '@bingads-webui-campaign/ad-schedule';\r\nimport { withUnvalidatedControlErrors, withControlErrorHandling } from '@bingads-webui-campaign-react/error-handling';\r\nimport { andComp, propertyIs, entityIs } from '@bingads-webui-campaign-react/form-error';\r\n\r\nimport { ValidatedLegacyAdDistribution } from './controls/validated-ad-distribution';\r\nimport { ERROR_ENTITY } from './model/api-errors';\r\nimport ClockImg from './media/clock.svg';\r\nimport ConnectedImg from './media/connected.svg';\r\n\r\nconst entityIsCampaign = entityIs(ERROR_ENTITY.Campaign);\r\n// TODO update\r\nconst campaignAdScheduleProp = andComp(entityIsCampaign, propertyIs('adSchedule'));\r\nconst campaignAdDistributionProp = andComp(entityIsCampaign, propertyIs('adDistribution'));\r\n\r\nconst ServerValidatedAdScheduleSetting = withControlErrorHandling(withUnvalidatedControlErrors(ValidatedLegacyAdSchedule, { filter: campaignAdScheduleProp }));\r\nconst ServerValidatedAdDistributionSetting = withControlErrorHandling(withUnvalidatedControlErrors(ValidatedLegacyAdDistribution, { filter: campaignAdDistributionProp }));\r\n\r\nexport const MoreSettings = ({\r\n isCreation, campaign, isMran,\r\n}) => {\r\n const i18n = useContext(I18nContext);\r\n const [adScheduleView, setAdScheduleView] = useState(null);\r\n const [adDistributionView, setAdDistributionView] = useState(null);\r\n\r\n const [\r\n allMoreSettingsSections,\r\n moreSettingsExpandedSections,\r\n setMoreSettingsExpandedSections,\r\n flipMoreSettingsExpandAllState,\r\n ] = useCollapseState(\r\n ['ad-schedule', 'ad-distribution'] /* all sections */,\r\n [] /* initially expanded sections */\r\n );\r\n\r\n const moreBasicSettingsExpand = useMemo(\r\n () => collapseExpander({ setActiveKeys: setMoreSettingsExpandedSections }),\r\n [setMoreSettingsExpandedSections]\r\n );\r\n\r\n // Use for init, as the underlying component has useEffect listen on the changes, we don't want this effect\r\n const dayTimeRanges = useMemo(() => ({ dayTimeRanges: campaign.dayTimeRanges }), [campaign.dayTimeRanges]);\r\n\r\n const adSchedulePanel = useMemo(() => (\r\n }\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n actuationProps={{\r\n expand: moreBasicSettingsExpand,\r\n expandKey: 'ad-schedule',\r\n }}\r\n >\r\n \r\n \r\n ), [adScheduleView, campaign, dayTimeRanges, i18n, isCreation, moreBasicSettingsExpand, setAdScheduleView]);\r\n\r\n const adDistributionDetails = adDistributionView ? adDistributionView.getTranslatedOption() : '';\r\n\r\n const adDistributionPanel = useMemo(() => (\r\n }\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n actuationProps={{\r\n expand: moreBasicSettingsExpand,\r\n expandKey: 'ad-distribution',\r\n }}\r\n >\r\n \r\n \r\n ), [adDistributionDetails, moreBasicSettingsExpand, isMran]);\r\n\r\n return (\r\n
\r\n \r\n \r\n {moreSettingsExpandedSections.length ? i18n.getString(_TL_('Collapse all')) : i18n.getString(_TL_('Expand all'))}\r\n \r\n \r\n {adSchedulePanel}\r\n {\r\n isCreation && adDistributionPanel\r\n }\r\n \r\n
\r\n );\r\n};\r\n\r\nMoreSettings.propTypes = {\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }).isRequired,\r\n isCreation: PropTypes.bool.isRequired,\r\n isMran: PropTypes.bool.isRequired,\r\n campaign: PropTypes.shape({}).isRequired,\r\n};\r\n","/* eslint-disable no-param-reassign */\r\nimport React, { useCallback, useMemo, useState, useContext, useRef } from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport { ValidationGroup } from '@bingads-webui-react/validation';\r\nimport { buildLegacyI18n } from '@bingads-webui/build-legacy-i18n';\r\nimport { Stack } from '@bingads-webui-react/fabric-control';\r\nimport { ValidationStringMap } from '@bingads-webui/validation-string-map';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { StepFooter } from '@bingads-webui-campaign-react/step-wizard-layout';\r\nimport { Campaign } from '@bingads-webui/campaign-odata-schemas';\r\nimport { FormErrorGroup } from '@bingads-webui-campaign-react/form-error';\r\nimport { getRoutePathById } from '@bingads-webui-campaign-react/with-site-map';\r\nimport * as i18nErrors from '@bingads-webui-component-legacy/api-errors-campaign';\r\nimport { MessageBar, MessageBarType } from '@fluentui/react/lib/MessageBar';\r\nimport { ActivityContext } from '@bingads-webui-react/hoc-with-signal';\r\n\r\nimport { apiErrorMapper } from './model/api-errors';\r\nimport { BasicSettings } from './basic-settings';\r\nimport { MoreSettings } from './more-settings';\r\nimport { getStyles } from './styles';\r\nimport { convertCampaignStateToCampaignJSONSchemaData } from './model/campaign';\r\nimport {\r\n createOrUpdateCampaign as createOrUpdateCall,\r\n destroyProductScope,\r\n} from './model/crud';\r\n\r\n// TODO\r\nconst serverErrors = [];\r\nconst logScope = 'SimplifiedSponsoredCampaignPage';\r\n\r\nexport function SponsoredCampaignCreationLegacy({\r\n i18n, isMran, isCreation, scope, siteMap, perfMarker, setIsLoading, productData, bundleCountries, bundleLocationCriterions, campaign, setCampaign,\r\n}) {\r\n const classes = useDefaultStyles(getStyles);\r\n const activity = useContext(ActivityContext);\r\n\r\n const [isValid, setIsValid] = useState(false);\r\n const [errorMessage, setErrorMessage] = useState();\r\n const [showAllValidationErrors, setShowAllValidationErrors] = useState(false);\r\n const shoppingSettingsRef = useRef();\r\n\r\n const legacyI18n = useMemo(() => buildLegacyI18n(i18n, [ValidationStringMap]), [i18n]);\r\n\r\n const handleCreateOrUpdateSuccess = useCallback((savePerfMarker) => {\r\n savePerfMarker.done();\r\n activity.trace(`${logScope}|Save|Succeed|${isMran ? 'MRAN' : 'SPB'}|${isCreation ? 'Creation' : 'Settings'}`);\r\n\r\n if (isCreation) {\r\n scope.save(getRoutePathById(siteMap, 'campaigns'));\r\n } else {\r\n scope.save(getRoutePathById(siteMap, 'adgroups'));\r\n }\r\n }, [isCreation, scope, siteMap, activity, isMran]);\r\n\r\n const hideErrorBanner = useCallback(() => {\r\n setErrorMessage('');\r\n }, []);\r\n\r\n const handleCreateOrUpdateError = useCallback((response, erroredModel, savePerfMarker) => {\r\n savePerfMarker.done();\r\n\r\n const errors = i18nErrors.getBulkApiErrors(response.errors);\r\n\r\n activity.error(`${logScope}|Save|Failed|Error:${JSON.stringify(errors)}|Data:${JSON.stringify(erroredModel)}`);\r\n setErrorMessage(errors.map(err =>
{err.message}
));\r\n }, [activity]);\r\n\r\n const onSave = useCallback(() => {\r\n activity.trace(`${logScope}|Save|Clicked`);\r\n\r\n if (!isValid) {\r\n setShowAllValidationErrors(true);\r\n activity.trace(`${logScope}|Save|FormInvalid`);\r\n\r\n return;\r\n }\r\n\r\n const productScopeId = productData.CampaignCriterionsData && productData.CampaignCriterionsData.Id;\r\n const productScope = shoppingSettingsRef.current.getProductScope();\r\n const hasFilteredProducts = shoppingSettingsRef.current.hasFilteredProducts();\r\n\r\n const model = convertCampaignStateToCampaignJSONSchemaData({\r\n campaign,\r\n bundleLocationCriterions,\r\n shoppingSettings: {\r\n productScopeId,\r\n basic: shoppingSettingsRef.current.viewModel.toObject(),\r\n searchBid: shoppingSettingsRef.current.getSearchBid(),\r\n productScope,\r\n hasFilteredProducts,\r\n },\r\n isSPB: !isMran,\r\n });\r\n\r\n const savePerfMarker = perfMarker.createChild('Save_Campaign');\r\n savePerfMarker.willInit();\r\n\r\n setErrorMessage('');\r\n setIsLoading(true);\r\n activity.trace(`${logScope}|Save|Start`);\r\n\r\n createOrUpdateCall(model)\r\n .then(() => {\r\n // If we remove product filer from campaign level, we need to delete associated product scope\r\n if (!hasFilteredProducts && productScopeId) {\r\n return destroyProductScope(campaign.Id, productScopeId);\r\n }\r\n\r\n return null;\r\n })\r\n .then(() => handleCreateOrUpdateSuccess(savePerfMarker))\r\n .catch(res => handleCreateOrUpdateError(res, model, savePerfMarker))\r\n .then(() => setIsLoading(false));\r\n }, [activity, isValid, productData.CampaignCriterionsData, campaign, bundleLocationCriterions, isMran, perfMarker, setIsLoading, handleCreateOrUpdateSuccess, handleCreateOrUpdateError]);\r\n\r\n const onGoBack = useCallback(() => {\r\n scope.save(getRoutePathById(siteMap, 'campaign-create'));\r\n }, [scope, siteMap]);\r\n\r\n const onCancel = useCallback(() => {\r\n scope.save(getRoutePathById(siteMap, 'campaigns'));\r\n }, [scope, siteMap]);\r\n\r\n const onValidate = useCallback((res) => {\r\n const { data: newCampaignData, isValid: isFormValid } = res;\r\n\r\n setCampaign(prev => ({ ...prev, ...newCampaignData }));\r\n setIsValid(isFormValid);\r\n }, [setCampaign]);\r\n\r\n return (\r\n \r\n \r\n \r\n { isCreation && (\r\n \r\n

{i18n.getString(_TL_('Campaign settings'))}

\r\n {i18n.getString(_TL_('Tell us about your campaign'))}\r\n
\r\n )}\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n\r\n \r\n
\r\n {errorMessage &&\r\n
\r\n \r\n {errorMessage}\r\n \r\n
}\r\n
\r\n );\r\n}\r\n\r\nSponsoredCampaignCreationLegacy.propTypes = {\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }).isRequired,\r\n isMran: PropTypes.bool,\r\n isCreation: PropTypes.bool,\r\n scope: PropTypes.shape({\r\n values: PropTypes.shape({\r\n cid: PropTypes.number.isRequired,\r\n aid: PropTypes.number.isRequired,\r\n uid: PropTypes.number.isRequired,\r\n campaignId: PropTypes.number,\r\n }).isRequired,\r\n save: PropTypes.func.isRequired,\r\n history: PropTypes.shape({}).isRequired,\r\n }).isRequired,\r\n siteMap: PropTypes.shape([]).isRequired,\r\n perfMarker: PropTypes.shape({\r\n createChild: PropTypes.func,\r\n }).isRequired,\r\n setIsLoading: PropTypes.func.isRequired,\r\n productData: PropTypes.shape({\r\n CampaignCriterionsData: PropTypes.shape({\r\n Id: PropTypes.number,\r\n }),\r\n }).isRequired,\r\n bundleCountries: PropTypes.shape([]).isRequired,\r\n bundleLocationCriterions: PropTypes.shape([]).isRequired,\r\n campaign: PropTypes.shape({\r\n Id: PropTypes.number,\r\n }).isRequired,\r\n setCampaign: PropTypes.func.isRequired,\r\n};\r\n\r\nSponsoredCampaignCreationLegacy.defaultProps = {\r\n isCreation: true,\r\n isMran: false,\r\n};\r\n","export const getCollapsiblePanelStyles = (components, theme) => ({\r\n border: 'none',\r\n marginBottom: 'unset',\r\n backgroundColor: 'unset',\r\n\r\n '& .panel-heading': {\r\n padding: 0,\r\n borderBottom: 'none',\r\n marginBottom: 18,\r\n\r\n '& .panel-title': {\r\n fontSize: 18,\r\n '& > a': {\r\n color: theme.palette.themePrimary,\r\n padding: 0,\r\n '&:hover, &:active': {\r\n color: theme.palette.themeDarker,\r\n textDecoration: 'none',\r\n backgroundColor: 'unset',\r\n },\r\n },\r\n\r\n '& > a:after': {\r\n transform: 'rotate(180deg)',\r\n },\r\n\r\n '& > a.collapsed:after': {\r\n transform: 'rotate(90deg)',\r\n },\r\n },\r\n },\r\n\r\n '& .panel-collapse': {\r\n '& .panel-body': {\r\n padding: 0,\r\n overflow: 'hidden',\r\n },\r\n },\r\n});\r\n","export const getBrandPanelStyles = () => ({\r\n brandPanel: {\r\n marginTop: 40,\r\n '& .search-box': {\r\n width: 350,\r\n },\r\n '& .desc': {\r\n marginTop: 16,\r\n display: 'flex',\r\n justifyContent: 'flex-end',\r\n },\r\n '& .brands-grid': {\r\n marginTop: 16,\r\n },\r\n },\r\n});\r\n","import React, { useContext, useCallback, useState, useMemo, useRef, useEffect } from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport { Panel, PanelType, PrimaryButton, DefaultButton, SearchBox, Selection, SelectionMode } from '@fluentui/react';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { HelpIcon } from '@bingads-webui-campaign-react/help';\r\nimport { CampaignShimmeredDetailsList } from '@bingads-webui-grid/campaign-details-list';\r\nimport { buildColumn } from '@bingads-webui-grid/campaignui-common-columns';\r\nimport { getBrandPanelStyles } from '../../styles/brand-panel';\r\n\r\nconst footerButtonStyles = { root: { marginRight: 8 } };\r\n\r\nconst defaultColumn = ({ i18n }) => [\r\n {\r\n key: 'BrandName',\r\n title: i18n.getString(_TL_('Brand')),\r\n helpId: 'pop_BA_a',\r\n },\r\n {\r\n key: 'MatchedProductCount',\r\n title: i18n.getString(_TL_('Products')),\r\n helpId: 'pop_BA_a',\r\n },\r\n];\r\n\r\nexport const buildColumns = ({\r\n i18n,\r\n}) => {\r\n const columns = defaultColumn({\r\n i18n,\r\n });\r\n return columns.map(column => ({\r\n ...buildColumn(column),\r\n onRender: column.onRender,\r\n }));\r\n};\r\n\r\nconst initialPageSize = 20;\r\nexport const BrandPanel = (props) => {\r\n const {\r\n brandsList, selectedBrands, isOpen, onSave, onClose,\r\n } = props;\r\n const i18n = useContext(I18nContext);\r\n const classes = useDefaultStyles(getBrandPanelStyles);\r\n const [page, setPage] = useState(1);\r\n const [pageSize, setPageSize] = useState(initialPageSize);\r\n const [query, setQuery] = useState('');\r\n const [items, setItems] = useState(brandsList.slice(0, initialPageSize));\r\n const [filteredItems, setFilteredItems] = useState(brandsList);\r\n const [selectedItems, setSelectedItems] = useState([]);\r\n const columns = useMemo(() => buildColumns({ i18n }), [i18n]);\r\n const gridSelectionRef = useRef(new Selection({\r\n onSelectionChanged: () => {\r\n const itemsInCurrentPage = gridSelectionRef.current.getItems();\r\n if (itemsInCurrentPage[0]) {\r\n const selection = gridSelectionRef.current.getSelection();\r\n setSelectedItems((v) => {\r\n const map = itemsInCurrentPage.reduce((acc, item) => {\r\n acc[item.MmcBrandId] = true;\r\n return acc;\r\n }, {});\r\n const itemsInOtherPage = v.filter(item => !map[item.MmcBrandId]);\r\n return [...itemsInOtherPage, ...selection];\r\n });\r\n }\r\n },\r\n }));\r\n\r\n const save = useCallback(() => {\r\n onSave(selectedItems);\r\n }, [onSave, selectedItems]);\r\n\r\n const cancel = useCallback(() => {\r\n onClose();\r\n }, [onClose]);\r\n\r\n const filterItems = useCallback((_query, _page, _pageSize) => {\r\n const filteredResult = brandsList.filter(item => item.BrandName.toLowerCase().includes(_query.toLowerCase()));\r\n setFilteredItems(filteredResult);\r\n setItems(filteredResult.slice((_page - 1) * _pageSize, _page * _pageSize));\r\n }, [brandsList]);\r\n\r\n useEffect(() => {\r\n items.forEach((item, index) => {\r\n gridSelectionRef.current.setIndexSelected(index, selectedItems.find(i => i.MmcBrandId === item.MmcBrandId));\r\n });\r\n }, [items, selectedItems]);\r\n\r\n useEffect(() => {\r\n if (isOpen) {\r\n setQuery('');\r\n setPage(1);\r\n setPageSize(initialPageSize);\r\n setSelectedItems(selectedBrands);\r\n setFilteredItems(brandsList);\r\n setItems(brandsList.slice(0, initialPageSize));\r\n }\r\n }, [brandsList, isOpen, selectedBrands]);\r\n\r\n const onRenderFooterContent = React.useCallback(\r\n () => (\r\n
\r\n \r\n {i18n.getString(_TL_('Save'))}\r\n \r\n \r\n {i18n.getString(_TL_('Cancel'))}\r\n \r\n
\r\n ),\r\n [cancel, i18n, save]\r\n );\r\n\r\n return (\r\n \r\n {i18n.getString(_TL_('Select brands'))}\r\n \r\n \r\n }\r\n onRenderFooterContent={onRenderFooterContent}\r\n >\r\n
\r\n {\r\n setQuery(newValue);\r\n setPage(1);\r\n filterItems(newValue, 1, pageSize);\r\n }}\r\n />\r\n

\r\n {i18n.getString(_TL_('Showing {{pageSize}} of {{total}} products'), {\r\n pageSize: Math.min(pageSize, brandsList.length),\r\n total: brandsList.length,\r\n })}\r\n

\r\n
\r\n {\r\n setPage(_page);\r\n filterItems(query, _page, pageSize);\r\n },\r\n onPageSizeChange: (_pageSize) => {\r\n setPage(1);\r\n setPageSize(_pageSize);\r\n filterItems(query, 1, _pageSize);\r\n },\r\n }}\r\n />\r\n
\r\n
\r\n \r\n );\r\n};\r\n\r\nBrandPanel.propTypes = {\r\n selectedBrands: PropTypes.arrayOf(PropTypes.shape({})).isRequired,\r\n brandsList: PropTypes.arrayOf(PropTypes.shape({})).isRequired,\r\n isOpen: PropTypes.bool.isRequired,\r\n onSave: PropTypes.func.isRequired,\r\n onClose: PropTypes.func.isRequired,\r\n};\r\n\r\n","import React, { useContext } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { DropdownTreeSelect } from '@bingads-webui-campaign-react/dropdown-tree-select';\r\n\r\nexport function processTreeNode(data, level, parentNode = null) {\r\n const res = [];\r\n data.forEach((item) => {\r\n const node = {\r\n level,\r\n value: `L${level}-${item.Value}`,\r\n content: item.Text,\r\n allowedCheck: true,\r\n children: [],\r\n };\r\n if (parentNode) {\r\n node.parentValue = parentNode.value;\r\n node.parentNode = parentNode;\r\n }\r\n res.push(node);\r\n if (item.Children && item.Children.length > 0) {\r\n const children = processTreeNode(item.Children, level + 1, node);\r\n node.children = children.filter(child => child.level === level + 1);\r\n res.push(...children);\r\n }\r\n });\r\n return res;\r\n}\r\n\r\nfunction shouldNodeSelect(node, selectedMap) {\r\n if (!node) {\r\n return false;\r\n }\r\n if (selectedMap[node.value]) {\r\n return true;\r\n }\r\n if (node.children.length === 0) {\r\n return selectedMap[node.value];\r\n }\r\n for (let i = 0; i < node.children.length; i += 1) {\r\n if (!shouldNodeSelect(node.children[i], selectedMap)) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n}\r\n\r\nexport function processSelectResult(allCategories, selectedItems) {\r\n const selectedMap = {};\r\n const resultMap = {};\r\n selectedItems.forEach((item) => {\r\n selectedMap[item] = true;\r\n });\r\n const selectedCategories = allCategories.filter(item => selectedMap[item.value]);\r\n for (let i = 0; i < selectedCategories.length; i += 1) {\r\n const category = selectedCategories[i];\r\n\r\n // Select parent node if all childrens are selected\r\n let node = category.parentNode;\r\n while (node) {\r\n if (shouldNodeSelect(node, selectedMap)) {\r\n if (shouldNodeSelect(node.parentNode, selectedMap)) {\r\n node = node.parentNode;\r\n } else {\r\n resultMap[node.value] = true;\r\n break;\r\n }\r\n } else {\r\n break;\r\n }\r\n }\r\n\r\n // ignore this node if any parent node is selected\r\n let isParentSelect = false;\r\n node = category.parentNode;\r\n while (node) {\r\n if (resultMap[node.value]) {\r\n isParentSelect = true;\r\n break;\r\n }\r\n node = node.parentNode;\r\n }\r\n if (!isParentSelect) {\r\n resultMap[category.value] = true;\r\n }\r\n }\r\n return Object.keys(resultMap);\r\n}\r\n\r\n\r\nexport const CategorySelector = (props) => {\r\n const {\r\n categoryData, selectedItems, setSelectedItems, openItems, setOpenItems,\r\n } = props;\r\n const i18n = useContext(I18nContext);\r\n\r\n return (\r\n
\r\n \r\n
\r\n );\r\n};\r\n\r\nCategorySelector.propTypes = {\r\n openItems: PropTypes.arrayOf(PropTypes.shape({})).isRequired,\r\n setOpenItems: PropTypes.arrayOf(PropTypes.shape({})).isRequired,\r\n categoryData: PropTypes.arrayOf(PropTypes.shape({})).isRequired,\r\n selectedItems: PropTypes.arrayOf(PropTypes.shape({})).isRequired,\r\n setSelectedItems: PropTypes.func.isRequired,\r\n};\r\n\r\n","export const getCategoryPanelStyles = () => ({\r\n categoryPanel: {\r\n marginTop: 6,\r\n '& .desc': {\r\n marginBottom: 20,\r\n },\r\n },\r\n});\r\n","import React, { useState, useContext, useCallback, useMemo, useEffect } from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport { Panel, PanelType, PrimaryButton, DefaultButton } from '@fluentui/react';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { HelpIcon } from '@bingads-webui-campaign-react/help';\r\nimport { useWizardService, getWizardData } from '@bingads-webui-react/wizard';\r\nimport { CategorySelector, processSelectResult, processTreeNode } from '../category-selector';\r\nimport { getCategoryPanelStyles } from '../../styles/category-panel';\r\n\r\nconst footerButtonStyles = { root: { marginRight: 8 } };\r\n\r\nexport const CategoryPanel = (props) => {\r\n const {\r\n mmcCategories, selectedCategories, isOpen, onSave, onClose,\r\n } = props;\r\n const i18n = useContext(I18nContext);\r\n const classes = useDefaultStyles(getCategoryPanelStyles);\r\n const { state } = useWizardService();\r\n const { productData } = getWizardData(state);\r\n const allCategories = useMemo(() => processTreeNode(productData.CategoryData.filter(category => mmcCategories.includes(category.Value)), 1), [mmcCategories, productData.CategoryData]);\r\n const [selectedItems, setSelectedItems] = useState([]);\r\n const [openItems, setOpenItems] = useState([]);\r\n\r\n const save = useCallback(() => {\r\n onSave(processSelectResult(allCategories, selectedItems));\r\n }, [allCategories, onSave, selectedItems]);\r\n\r\n const cancel = useCallback(() => {\r\n onClose();\r\n }, [onClose]);\r\n\r\n\r\n useEffect(() => {\r\n if (isOpen) {\r\n setSelectedItems(selectedCategories);\r\n }\r\n }, [isOpen, selectedCategories]);\r\n\r\n const onRenderFooterContent = React.useCallback(\r\n () => (\r\n
\r\n \r\n {i18n.getString(_TL_('Save'))}\r\n \r\n \r\n {i18n.getString(_TL_('Cancel'))}\r\n \r\n
\r\n ),\r\n [cancel, i18n, save]\r\n );\r\n\r\n return (\r\n \r\n {i18n.getString(_TL_('Select categories'))}\r\n \r\n \r\n }\r\n onRenderFooterContent={onRenderFooterContent}\r\n >\r\n
\r\n

{i18n.getString(_TL_('Filter down and select the specific categories you want to advertise.'))}

\r\n \r\n
\r\n \r\n );\r\n};\r\n\r\nCategoryPanel.propTypes = {\r\n mmcCategories: PropTypes.arrayOf(PropTypes.string).isRequired,\r\n selectedCategories: PropTypes.arrayOf(PropTypes.shape({})).isRequired,\r\n isOpen: PropTypes.bool.isRequired,\r\n onSave: PropTypes.func.isRequired,\r\n onClose: PropTypes.func.isRequired,\r\n};\r\n\r\n","export function getBmcMtEndpoint() {\r\n const url = window.location.href;\r\n let endPoint = 'https://mmcapi.ads-int.microsoft.com';\r\n if (url.includes('ads.microsoft.com') || url.includes('si.bingads.microsoft.com')) {\r\n endPoint = 'https://mmcapi.ads.microsoft.com';\r\n }\r\n return endPoint;\r\n}\r\n","import _ from 'underscore';\r\nimport $ from 'jquery';\r\nimport Promise from 'bluebird';\r\nimport { useWizardService, getWizardData } from '@bingads-webui-react/wizard';\r\nimport { useCallback } from 'react';\r\nimport { getBmcMtEndpoint } from '../../utils';\r\n\r\nexport function useProductDataSource() {\r\n const { state } = useWizardService();\r\n\r\n const { scope } = getWizardData(state);\r\n const {\r\n values: { cid, aid, uid },\r\n } = scope;\r\n\r\n const getBrands = useCallback(() => new Promise((resolve, reject) => {\r\n $.ajax({\r\n url: `${getBmcMtEndpoint()}/api/v1/manufacturers/${cid}/brands?cid=${cid}&aid=${aid}&uid=${uid}`,\r\n type: 'GET',\r\n xhrFields: {\r\n withCredentials: true,\r\n },\r\n success: (obj) => {\r\n resolve(_.result(obj.ResponseObject, 'Brands', []));\r\n },\r\n error: (err) => {\r\n reject(err);\r\n },\r\n });\r\n }), [cid, aid, uid]);\r\n\r\n const getMatchedProductCount = useCallback((brands, categories, productIds) => new Promise((resolve, reject) => {\r\n const queryArr = [];\r\n if (brands.length > 0) {\r\n queryArr.push(`MmcBrandIds=${brands.join(',')}`);\r\n }\r\n if (categories.length > 0) {\r\n queryArr.push(`BrandCategoriesL1=${categories.join(',')}`);\r\n }\r\n if (productIds.length > 0) {\r\n queryArr.push(`ProductIds=${productIds.join(',')}`);\r\n }\r\n const queryString = queryArr.join('&');\r\n $.ajax({\r\n url: `${getBmcMtEndpoint()}/api/v1/manufacturers/${cid}/brands/matchedProductCount?${queryString}`,\r\n type: 'GET',\r\n xhrFields: {\r\n withCredentials: true,\r\n },\r\n success: (obj) => {\r\n resolve(_.result(obj, 'ResponseObject', {\r\n Status: 0,\r\n MatchedProductCount: 0,\r\n }));\r\n },\r\n error: (err) => {\r\n reject(err);\r\n },\r\n });\r\n }), [cid]);\r\n\r\n const getBrandCategories = useCallback(() => new Promise((resolve, reject) => {\r\n $.ajax({\r\n url: `${getBmcMtEndpoint()}/api/v1/manufacturers/${cid}/brands/categories`,\r\n type: 'GET',\r\n xhrFields: {\r\n withCredentials: true,\r\n },\r\n success: (obj) => {\r\n resolve(_.result(obj.ResponseObject, 'BrandCategoriesL1', []));\r\n },\r\n error: (err) => {\r\n reject(err);\r\n },\r\n });\r\n }), [cid]);\r\n\r\n\r\n const getProductData = useCallback((page, pageSize, keyword, brands, categories) => new Promise((resolve) => {\r\n const mockData = new Array(pageSize).fill(0).map((v, index) => ({\r\n Id: ((page - 1) * pageSize) + index,\r\n Name: `${keyword}-${page}-${index}`,\r\n Brand: brands.map(b => b.BrandName).join(','),\r\n Category: categories.join(','),\r\n Conversion: Math.floor(Math.random() * 1000),\r\n Impression: Math.floor(Math.random() * 1000),\r\n Clicks: Math.floor(Math.random() * 1000),\r\n }));\r\n setTimeout(() => {\r\n resolve({\r\n data: mockData,\r\n total: 100,\r\n });\r\n }, 500);\r\n }), []);\r\n\r\n\r\n return {\r\n getBrands,\r\n getProductData,\r\n getMatchedProductCount,\r\n getBrandCategories,\r\n };\r\n}\r\n","export const getProductIdPanelStyles = () => ({\r\n productIdPanel: {\r\n marginTop: 25,\r\n '& .search': {\r\n display: 'flex',\r\n gap: '20px',\r\n alignItems: 'center',\r\n '& .ms-layer': {\r\n display: 'none',\r\n },\r\n '& .ms-Button > span': {\r\n display: 'flex',\r\n alignItems: 'center',\r\n gap: '4px',\r\n },\r\n },\r\n '& .search-box': {\r\n width: 350,\r\n },\r\n '& .desc': {\r\n marginTop: 16,\r\n display: 'flex',\r\n justifyContent: 'flex-end',\r\n },\r\n '& .product-id-grid': {\r\n marginTop: 16,\r\n },\r\n },\r\n brandSelectorCallout: {\r\n '& .brand-selector-content': {\r\n width: 240,\r\n '& .brand-list': {\r\n padding: 10,\r\n height: 210,\r\n overflow: 'auto',\r\n '& .ms-Checkbox': {\r\n height: 32,\r\n },\r\n },\r\n '& .clear': {\r\n height: 48,\r\n padding: '0 8px',\r\n display: 'flex',\r\n justifyContent: 'flex-end',\r\n alignItems: 'center',\r\n borderTop: '1px solid #e0e0e0',\r\n },\r\n },\r\n },\r\n categorySelectorCallout: {\r\n '& .category-selector-content': {\r\n width: 343,\r\n height: 532,\r\n overflow: 'hidden',\r\n },\r\n },\r\n});\r\n","import React, { useContext, useCallback, useState, useMemo, useRef, useEffect } from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport { Panel, PanelType, PrimaryButton, DefaultButton, SearchBox, Selection, SelectionMode, Callout, DirectionalHint, Icon, Checkbox, ActionButton } from '@fluentui/react';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { HelpIcon } from '@bingads-webui-campaign-react/help';\r\nimport { CampaignShimmeredDetailsList } from '@bingads-webui-grid/campaign-details-list';\r\nimport { buildColumn } from '@bingads-webui-grid/campaignui-common-columns';\r\nimport { useWizardService, getWizardData } from '@bingads-webui-react/wizard';\r\nimport { useProductDataSource } from '../product-settings/use-data-source';\r\nimport { CategorySelector, processSelectResult, processTreeNode } from '../category-selector';\r\nimport { getProductIdPanelStyles } from '../../styles/product-id-panel';\r\n\r\nconst footerButtonStyles = { root: { marginRight: 8 } };\r\n\r\nconst defaultColumn = ({ i18n }) => [\r\n {\r\n key: 'Id',\r\n title: i18n.getString(_TL_('Product ID')),\r\n helpId: 'pop_BA_a',\r\n onRender: item => (\r\n
\r\n
{item.Name}
\r\n
{item.Id}
\r\n
\r\n ),\r\n },\r\n {\r\n key: 'Brand',\r\n title: i18n.getString(_TL_('Brand')),\r\n helpId: 'pop_BA_a',\r\n },\r\n {\r\n key: 'Category',\r\n title: i18n.getString(_TL_('Category (1st level)')),\r\n minWidth: 350,\r\n helpId: 'pop_BA_a',\r\n },\r\n {\r\n key: 'Conversion',\r\n title: i18n.getString(_TL_('Conv.')),\r\n helpId: 'pop_BA_a',\r\n },\r\n {\r\n key: 'Impression',\r\n title: i18n.getString(_TL_('Impr')),\r\n helpId: 'pop_BA_a',\r\n },\r\n {\r\n key: 'Clicks',\r\n title: i18n.getString(_TL_('Clicks')),\r\n helpId: 'pop_BA_a',\r\n },\r\n];\r\n\r\nexport const buildColumns = ({\r\n i18n,\r\n}) => {\r\n const columns = defaultColumn({\r\n i18n,\r\n });\r\n return columns.map(column => ({\r\n ...buildColumn(column),\r\n onRender: column.onRender,\r\n }));\r\n};\r\n\r\nconst initialPageSize = 20;\r\nexport const ProductIDPanel = (props) => {\r\n const {\r\n brandsList, mmcCategories, selectedProductIds, isOpen, onSave, onClose,\r\n } = props;\r\n const i18n = useContext(I18nContext);\r\n const classes = useDefaultStyles(getProductIdPanelStyles);\r\n const { getProductData } = useProductDataSource();\r\n const [page, setPage] = useState(1);\r\n const [pageSize, setPageSize] = useState(initialPageSize);\r\n const [query, setQuery] = useState('');\r\n const [items, setItems] = useState(null);\r\n const [selectedBrands, setSelectedBrands] = useState([]);\r\n const [total, setTotal] = useState(0);\r\n const [selectedItems, setSelectedItems] = useState([]);\r\n const [isBrandCalloutVisible, setIsBrandCalloutVisible] = useState(false);\r\n\r\n const { state } = useWizardService();\r\n const { productData } = getWizardData(state);\r\n const allCategories = useMemo(() => processTreeNode(productData.CategoryData.filter(category => mmcCategories.includes(category.Value)), 1), [mmcCategories, productData.CategoryData]);\r\n const [selectedCategories, setSelectedCategories] = useState([]);\r\n const [categoryOpenItems, setCategoryOpenItems] = useState([]);\r\n const [isCategoryCalloutVisible, setIsCategoryCalloutVisible] = useState(false);\r\n\r\n const columns = useMemo(() => buildColumns({ i18n }), [i18n]);\r\n\r\n const gridSelectionRef = useRef(new Selection({\r\n onSelectionChanged: () => {\r\n const itemsInCurrentPage = gridSelectionRef.current.getItems();\r\n if (itemsInCurrentPage[0]) {\r\n const selection = gridSelectionRef.current.getSelection();\r\n setSelectedItems((v) => {\r\n const map = itemsInCurrentPage.reduce((acc, item) => {\r\n acc[item.Id] = true;\r\n return acc;\r\n }, {});\r\n const itemsInOtherPage = v.filter(item => !map[item.Id]);\r\n return [...itemsInOtherPage, ...selection];\r\n });\r\n }\r\n },\r\n }));\r\n\r\n const save = useCallback(() => {\r\n onSave(selectedItems);\r\n }, [onSave, selectedItems]);\r\n\r\n const cancel = useCallback(() => {\r\n onClose();\r\n }, [onClose]);\r\n\r\n const loadData = useCallback((_page = 1, _pageSize = initialPageSize, _query = '', brands = [], categories = []) => {\r\n setItems(null);\r\n const finalCategory = processSelectResult(allCategories, categories);\r\n getProductData(_page, _pageSize, _query, brands, finalCategory).then((res) => {\r\n setItems(res.data);\r\n setTotal(res.total);\r\n });\r\n }, [allCategories, getProductData]);\r\n\r\n const search = useCallback((_query) => {\r\n setQuery(_query);\r\n setPage(1);\r\n loadData(1, pageSize, _query, selectedBrands, selectedCategories);\r\n }, [loadData, pageSize, selectedBrands, selectedCategories]);\r\n\r\n const selectBrand = useCallback((brand, isChecked) => {\r\n if (isChecked) {\r\n setSelectedBrands([...selectedBrands, brand]);\r\n } else {\r\n setSelectedBrands(selectedBrands.filter(b => b.MmcBrandId !== brand.MmcBrandId));\r\n }\r\n }, [selectedBrands]);\r\n\r\n const reloadData = useCallback(() => {\r\n setPage(1);\r\n loadData(1, pageSize, query, selectedBrands, selectedCategories);\r\n }, [loadData, pageSize, query, selectedBrands, selectedCategories]);\r\n\r\n useEffect(() => {\r\n if (items) {\r\n items.forEach((item, index) => {\r\n gridSelectionRef.current.setIndexSelected(index, selectedItems.find(i => i.Id === item.Id));\r\n });\r\n }\r\n }, [items, selectedItems]);\r\n\r\n useEffect(() => {\r\n if (isOpen) {\r\n setQuery('');\r\n setPage(1);\r\n setPageSize(initialPageSize);\r\n setSelectedItems(selectedProductIds);\r\n setSelectedBrands([]);\r\n setSelectedCategories([]);\r\n loadData();\r\n }\r\n }, [isOpen, loadData, selectedProductIds]);\r\n\r\n const onRenderFooterContent = React.useCallback(\r\n () => (\r\n
\r\n \r\n {i18n.getString(_TL_('Save'))}\r\n \r\n \r\n {i18n.getString(_TL_('Cancel'))}\r\n \r\n
\r\n ),\r\n [cancel, i18n, save]\r\n );\r\n\r\n const renderBrandSelecter = React.useCallback(() => (\r\n <>\r\n {\r\n if (isBrandCalloutVisible) {\r\n setIsBrandCalloutVisible(false);\r\n reloadData();\r\n } else {\r\n setIsBrandCalloutVisible(true);\r\n }\r\n }}\r\n >\r\n {i18n.getString(_TL_('Brand'))}\r\n \r\n \r\n {isBrandCalloutVisible ? (\r\n {\r\n setIsBrandCalloutVisible(false);\r\n reloadData();\r\n }}\r\n setInitialFocus\r\n >\r\n
\r\n
\r\n {\r\n brandsList.map(brand => (\r\n v.MmcBrandId === brand.MmcBrandId)} onChange={(e, isChecked) => selectBrand(brand, isChecked)} />\r\n ))\r\n }\r\n
\r\n
\r\n setSelectedBrands([])}>\r\n {i18n.getString(_TL_('Clear'))}\r\n \r\n
\r\n
\r\n \r\n ) : null}\r\n \r\n ), [brandsList, classes.brandSelectorCallout, reloadData, i18n, isBrandCalloutVisible, selectBrand, selectedBrands]);\r\n\r\n const renderCategorySelector = React.useCallback(() => (\r\n <>\r\n {\r\n if (isCategoryCalloutVisible) {\r\n setIsCategoryCalloutVisible(false);\r\n reloadData();\r\n } else {\r\n setIsCategoryCalloutVisible(true);\r\n }\r\n }}\r\n >\r\n {i18n.getString(_TL_('Category'))}\r\n \r\n \r\n {isCategoryCalloutVisible ? (\r\n {\r\n setIsCategoryCalloutVisible(false);\r\n reloadData();\r\n }}\r\n setInitialFocus\r\n >\r\n
\r\n \r\n
\r\n \r\n ) : null}\r\n \r\n ), [allCategories, categoryOpenItems, classes.categorySelectorCallout, i18n, isCategoryCalloutVisible, reloadData, selectedCategories]);\r\n\r\n return (\r\n \r\n {i18n.getString(_TL_('Select product IDs'))}\r\n \r\n \r\n }\r\n onRenderFooterContent={onRenderFooterContent}\r\n >\r\n
\r\n
\r\n search(newValue)}\r\n />\r\n {renderBrandSelecter()}\r\n {renderCategorySelector()}\r\n
\r\n

\r\n {i18n.getString(_TL_('Showing {{pageSize}} of {{total}} products'), {\r\n pageSize: items ? items.length : 0,\r\n total,\r\n })}\r\n

\r\n
\r\n {\r\n setPage(_page);\r\n loadData(_page, pageSize, query, selectedBrands, selectedCategories);\r\n },\r\n onPageSizeChange: (_pageSize) => {\r\n setPage(1);\r\n setPageSize(_pageSize);\r\n loadData(1, _pageSize, query, selectedBrands, selectedCategories);\r\n },\r\n }}\r\n />\r\n
\r\n
\r\n \r\n );\r\n};\r\n\r\nProductIDPanel.propTypes = {\r\n mmcCategories: PropTypes.arrayOf(PropTypes.string).isRequired,\r\n brandsList: PropTypes.arrayOf(PropTypes.shape({})).isRequired,\r\n selectedProductIds: PropTypes.arrayOf(PropTypes.shape({})).isRequired,\r\n isOpen: PropTypes.bool.isRequired,\r\n onSave: PropTypes.func.isRequired,\r\n onClose: PropTypes.func.isRequired,\r\n};\r\n\r\n","export const getProductFilterStyles = () => ({\r\n productFilter: {\r\n '& .matching-notification': {\r\n marginTop: 8,\r\n '& .ms-MessageBar-content': {\r\n display: 'flex',\r\n alignItems: 'center',\r\n },\r\n },\r\n '& .forms': {\r\n marginTop: 16,\r\n '& .ms-ChoiceField-field': {\r\n display: 'flex',\r\n },\r\n '& .filters': {\r\n marginTop: 10,\r\n paddingLeft: 26,\r\n '& .buttons': {\r\n margin: '16px 0',\r\n display: 'flex',\r\n gap: '16px',\r\n },\r\n '& .filter-result': {\r\n '& .filter-type': {\r\n marginTop: 8,\r\n paddingBottom: 20,\r\n },\r\n '& .filter-title': {\r\n fontWeight: 'bold',\r\n },\r\n '& .selected-items': {\r\n marginTop: 8,\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n '& .list': {\r\n display: 'flex',\r\n gap: '6px',\r\n flexWrap: 'wrap',\r\n alignItems: 'center',\r\n },\r\n },\r\n },\r\n },\r\n },\r\n },\r\n});\r\n","/* eslint-disable jsx-a11y/click-events-have-key-events */\r\n/* eslint-disable jsx-a11y/anchor-is-valid */\r\nimport React, { useContext, useEffect, useMemo, useState, useCallback } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { DefaultButton, IconButton, MessageBar, MessageBarType, ChoiceGroup } from '@fluentui/react';\r\nimport { withCustomValidation } from '@bingads-webui-react/validation';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { SectionShimmer } from '@bingads-webui-campaign-react/display-plus-campaigns';\r\nimport { ActivityContext } from '@bingads-webui-react/hoc-with-signal';\r\nimport { useWizardService, getWizardData } from '@bingads-webui-react/wizard';\r\nimport { AddBrandPanelV2 } from '@bingads-webui-campaign-react/feed-summary-page';\r\nimport { SelectedItem } from '@bingads-webui-campaign-react/pill-item-components';\r\nimport { ReactTemplate } from '@bingads-webui-react/react-template';\r\nimport { BrandPanel } from '../panels/brand-panel';\r\nimport { CategoryPanel } from '../panels/category-panel';\r\nimport { ProductIDPanel } from '../panels/product-id-panel';\r\nimport { useProductDataSource } from './use-data-source';\r\nimport { getProductFilterStyles } from '../../styles/product-settings';\r\n\r\nconst filterOptions = {\r\n All: 'All',\r\n Filter: 'Filter',\r\n};\r\n\r\nconst matchStatusEnum = {\r\n Unknown: -1,\r\n InProgress: 0,\r\n Complete: 1,\r\n};\r\n\r\nconst ProductFilterWithCustomValidation = ({ updateValidation }) => {\r\n const i18n = useContext(I18nContext);\r\n const activity = useContext(ActivityContext);\r\n const { state } = useWizardService();\r\n const { scope, perfMarker } = getWizardData(state);\r\n const { getBrands, getBrandCategories, getMatchedProductCount } = useProductDataSource();\r\n const classes = useDefaultStyles(getProductFilterStyles);\r\n\r\n const [brandsList, setBrandsList] = useState(null);\r\n const [mmcCategories, setMmcCategories] = useState([]);\r\n const [showAddBrandPanel, setShowAddBrandPanel] = useState(false);\r\n const [showNotification, setShowNotification] = useState(true);\r\n const [selectedOptions, setSelectedOptions] = useState(filterOptions.All);\r\n const [showBrandPanel, setShowBrandPanel] = useState(false);\r\n const [showCategoryPanel, setShowCategoryPanel] = useState(false);\r\n const [showProductIdPanel, setShowProductIdPanel] = useState(false);\r\n\r\n const [matchedProductCount, setMatchedProductCount] = useState(0);\r\n const [matchStatus, setMatchStatus] = useState(matchStatusEnum.Unknown);\r\n\r\n const [brands, setBrands] = useState([]);\r\n const [categories, setCategories] = useState([]);\r\n const [productIds, setProductIds] = useState([]);\r\n const [error, setError] = useState(null);\r\n\r\n const options = useMemo(() => {\r\n const matchedCount = <>:{i18n.getString(_TL_(' {{count}} products'), { count: matchedProductCount })};\r\n return [\r\n {\r\n key: filterOptions.All,\r\n text: i18n.getString(_TL_('Include all products to advertise')),\r\n onRenderField: (props, render) => (\r\n \r\n {render(props)}\r\n {matchedProductCount > 0 && selectedOptions === filterOptions.All && matchedCount}\r\n \r\n ),\r\n },\r\n {\r\n key: filterOptions.Filter,\r\n text: i18n.getString(_TL_('Select specific products to advertise')),\r\n onRenderField: (props, render) => (\r\n \r\n {render(props)}\r\n {matchedProductCount > 0 && selectedOptions === filterOptions.Filter && matchedCount}\r\n \r\n ),\r\n },\r\n ];\r\n }, [i18n, matchedProductCount, selectedOptions]);\r\n\r\n const fetchMatchedProductCount = useCallback((_brands, _categories, _productIds) => {\r\n getMatchedProductCount(_brands, _categories, _productIds).then((res) => {\r\n setMatchedProductCount(res.MatchedProductCount);\r\n setMatchStatus(res.Status);\r\n });\r\n }, [getMatchedProductCount]);\r\n\r\n const loadBrandListAndMMCCategories = useCallback(() => {\r\n getBrands().then((res) => {\r\n setBrandsList(res);\r\n if (res.length > 0) {\r\n const categoryL1s = categories.filter(v => v.split('-')[0] === 'L1').map(v => v.split('-')[1]);\r\n fetchMatchedProductCount(brands.map(v => v.MmcBrandId), categoryL1s || [], productIds.map(v => v.Id));\r\n }\r\n });\r\n getBrandCategories().then((res) => {\r\n setMmcCategories(res);\r\n });\r\n }, [brands, categories, fetchMatchedProductCount, getBrandCategories, getBrands, productIds]);\r\n\r\n const onAddBrandPanelClose = useCallback((shouldReload) => {\r\n if (shouldReload) {\r\n loadBrandListAndMMCCategories();\r\n }\r\n setShowAddBrandPanel(false);\r\n }, [loadBrandListAndMMCCategories]);\r\n\r\n const onSelectChange = useCallback((e, option) => {\r\n activity.signal(`onProductSelectionChange: ${option.key}`);\r\n setSelectedOptions(option.key);\r\n }, [activity]);\r\n\r\n const onSaveBrands = useCallback((data) => {\r\n activity.signal(`onProductBrandSave: ${JSON.stringify(data)}`);\r\n setBrands(data);\r\n setShowBrandPanel(false);\r\n }, [activity]);\r\n\r\n const onSaveCategories = useCallback((data) => {\r\n activity.signal(`onProductCategoriesSave: ${JSON.stringify(data)}`);\r\n setCategories(data);\r\n setShowCategoryPanel(false);\r\n }, [activity]);\r\n\r\n const onSaveProductIds = useCallback((data) => {\r\n activity.signal(`onProductIdsSave: ${JSON.stringify(data)}`);\r\n setProductIds(data);\r\n setShowProductIdPanel(false);\r\n }, [activity]);\r\n\r\n const removeItemInType = useCallback((type, item, getKey) => {\r\n const funcMap = {\r\n brand: setBrands,\r\n category: setCategories,\r\n productId: setProductIds,\r\n };\r\n funcMap[type](v => v.filter(i => getKey(i) !== getKey(item)));\r\n }, []);\r\n\r\n const removeAllInType = useCallback((type) => {\r\n const funcMap = {\r\n brand: setBrands,\r\n category: setCategories,\r\n productId: setProductIds,\r\n };\r\n funcMap[type]([]);\r\n }, []);\r\n\r\n useEffect(() => {\r\n loadBrandListAndMMCCategories();\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, []);\r\n\r\n useEffect(() => {\r\n setError(null);\r\n if (selectedOptions === filterOptions.All) {\r\n fetchMatchedProductCount([], [], []);\r\n updateValidation([], {\r\n productFilter: {\r\n hasFilteredProducts: false,\r\n productScope: {},\r\n },\r\n });\r\n return;\r\n }\r\n\r\n const productScope = {};\r\n const categoryMap = {};\r\n let conditionIndex = 1;\r\n\r\n if (brands.length > 0) {\r\n productScope[`ProductCondition${conditionIndex}`] = 'Brand';\r\n productScope[`ProductValue${conditionIndex}`] = brands.map(v => v.MmcBrandId).join(';;');\r\n productScope[`ProductOperator${conditionIndex}`] = 'equal';\r\n conditionIndex += 1;\r\n }\r\n if (categories.length > 0) {\r\n for (let i = 0; i < categories.length; i += 1) {\r\n const [level, name] = categories[i].split('-');\r\n if (!categoryMap[level]) {\r\n categoryMap[level] = [name];\r\n } else {\r\n categoryMap[level].push(name);\r\n }\r\n }\r\n\r\n Object.keys(categoryMap).forEach((level) => {\r\n productScope[`ProductCondition${conditionIndex}`] = `Category${level}`;\r\n productScope[`ProductValue${conditionIndex}`] = categoryMap[level].join(';;');\r\n productScope[`ProductOperator${conditionIndex}`] = 'equal';\r\n conditionIndex += 1;\r\n });\r\n }\r\n\r\n if (productIds.length > 0) {\r\n productScope[`ProductCondition${conditionIndex}`] = 'Id';\r\n productScope[`ProductValue${conditionIndex}`] = productIds.map(v => v.Id).join(';;');\r\n productScope[`ProductOperator${conditionIndex}`] = 'equal';\r\n }\r\n\r\n if (brands.length > 0 || categoryMap[0] || productIds.length > 0) {\r\n fetchMatchedProductCount(brands.map(v => v.MmcBrandId), categoryMap[0] || [], productIds.map(v => v.Id));\r\n updateValidation([], {\r\n productFilter: {\r\n hasFilteredProducts: true,\r\n productScope,\r\n },\r\n });\r\n } else {\r\n setMatchedProductCount(0);\r\n setMatchStatus(matchStatusEnum.Unknown);\r\n const errorMsg = i18n.getString(_TL_('Please select at least one filter'));\r\n setError(errorMsg);\r\n updateValidation([errorMsg], {\r\n productFilter: {\r\n hasFilteredProducts: true,\r\n productScope,\r\n },\r\n });\r\n }\r\n }, [brands, categories, fetchMatchedProductCount, getMatchedProductCount, i18n, productIds, selectedOptions, updateValidation]);\r\n\r\n if (!brandsList) {\r\n return ;\r\n }\r\n\r\n const addBrandPanel = ( {}}\r\n perfMarker={perfMarker}\r\n brandsList={brandsList}\r\n />);\r\n\r\n if (brandsList.length === 0) {\r\n return (\r\n
\r\n

{i18n.getString(_TL_('Add all your brands and we’ll match them with the associated products.'))}

\r\n
\r\n setShowAddBrandPanel(true)}\r\n />\r\n
\r\n {addBrandPanel}\r\n
\r\n );\r\n }\r\n\r\n function renderFilterResult(category, items, renderKey = v => v.Id, renderName = v => v.Name, renderTitle = v => v.Name, maxCount = 4) {\r\n if (items.length === 0) {\r\n return null;\r\n }\r\n const titleMap = {\r\n brand: i18n.getString(_TL_('Brand')),\r\n category: i18n.getString(_TL_('Categories')),\r\n productId: i18n.getString(_TL_('Product ID')),\r\n };\r\n return (\r\n
\r\n
{titleMap[category]}: {items.length}
\r\n
\r\n
\r\n {items.slice(0, maxCount).map((item, index) => (\r\n removeItemInType(category, item, renderKey)}\r\n />\r\n ))}\r\n {items.length > maxCount && +{items.length - maxCount}}\r\n
\r\n removeAllInType(category)} />\r\n
\r\n
\r\n );\r\n }\r\n\r\n const filterContent = (\r\n
\r\n
{i18n.getString(_TL_('Filter products by:'))}
\r\n
\r\n {renderFilterResult('brand', brands, v => v.MmcBrandId, v => {v.BrandName}, v => v.BrandName, 4)}\r\n {renderFilterResult('category', categories, v => v, v => {v.split('-')[1]}, v => v.split('-')[1], 3)}\r\n {renderFilterResult('productId', productIds, v => v.Id, v => ID: {v.Id}, v => v.Id, 2)}\r\n
\r\n
\r\n 0} onClick={() => setShowBrandPanel(true)} />\r\n 0} onClick={() => setShowCategoryPanel(true)} />\r\n 0 || categories.length > 0} onClick={() => setShowProductIdPanel(true)} />\r\n
\r\n {matchStatus === matchStatusEnum.InProgress &&
{i18n.getString(_TL_('* All options will be enabled once product matching is complete'))}
}\r\n
\r\n );\r\n\r\n return (\r\n
\r\n setShowAddBrandPanel(true)} role=\"button\" tabIndex={-1}>{i18n.getString(_TL_('Add more'))} }}\r\n template={\r\n i18n.getString(_TL_(\"{{aTag}}Add more{{/aTag}} of your brands and we'll match them with the associated products.\"))\r\n }\r\n />\r\n
\r\n {matchStatus === matchStatusEnum.InProgress &&\r\n \r\n {i18n.getString(_TL_(\"Product matching can take up to 10 hours. We'll email once complete.\"))}\r\n \r\n }\r\n {showNotification && matchStatus === matchStatusEnum.Complete &&\r\n setShowNotification(false)}\r\n >\r\n {i18n.getString(_TL_('Success!'))} }}\r\n template={\r\n i18n.getString(_TL_('{{bold}}Success!{{/bold}} Product matching is now complete.'))\r\n }\r\n />\r\n \r\n }\r\n
\r\n\r\n
\r\n \r\n {selectedOptions === 'Filter' && filterContent}\r\n
\r\n {error &&
{error}
}\r\n {addBrandPanel}\r\n onSaveBrands(data)}\r\n onClose={() => setShowBrandPanel(false)}\r\n />\r\n onSaveCategories(data)}\r\n onClose={() => setShowCategoryPanel(false)}\r\n />\r\n setShowProductIdPanel(false)}\r\n />\r\n
\r\n );\r\n};\r\n\r\nProductFilterWithCustomValidation.propTypes = {\r\n updateValidation: PropTypes.func.isRequired,\r\n};\r\n\r\nProductFilterWithCustomValidation.defaultProps = {\r\n};\r\n\r\nexport const ValidatedProductFilter = withCustomValidation(ProductFilterWithCustomValidation);\r\n\r\n","import { getCollapsiblePanelStyles } from '../../shared';\r\n\r\nexport const getAdGroupStyles = (components, theme) => ({\r\n collapsiblePanel: getCollapsiblePanelStyles(components, theme),\r\n toggle: {\r\n marginBottom: '0px',\r\n alignSelf: 'center',\r\n },\r\n adgroupShell: {\r\n '& .base-options-stack': {\r\n // width: '100%',\r\n },\r\n '& .collapse-container': {\r\n width: 'inherit',\r\n },\r\n '& .contextual-target': {\r\n maxWidth: '1000px',\r\n },\r\n '& .ms-ChoiceFieldGroup label': {\r\n padding: 0,\r\n fontWeight: 400,\r\n },\r\n },\r\n urlOptionsContainer: {\r\n maxWidth: 435,\r\n },\r\n});\r\n\r\nexport const getTargetingPanels = () => ({\r\n basicOptions: [\r\n 'ad-group-name',\r\n 'location-target',\r\n ],\r\n moreOptions: [\r\n 'start-end-dates',\r\n 'ad-schedule',\r\n 'ad-distribution',\r\n ],\r\n});\r\n","/* eslint-disable react/prop-types */\r\nimport _ from 'underscore';\r\nimport React, { useCallback, useContext, useMemo } from 'react';\r\nimport classNames from 'classnames';\r\nimport { Stack } from '@fluentui/react';\r\nimport { Panel as BootstrapPanel } from 'react-bootstrap';\r\nimport { withScope } from '@bingads-webui-react/scope-service';\r\nimport { AdGroup } from '@bingads-webui/campaign-odata-schemas';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { SEARCH_TYPE } from '@bingads-webui-react/bing-maps';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { buildLegacyI18n } from '@bingads-webui/build-legacy-i18n';\r\nimport { ValidationStringMap } from '@bingads-webui/validation-string-map';\r\nimport { useFormService } from '@bingads-webui-react/form';\r\nimport { ActuationGroup } from '@bingads-webui-campaign-react/actuator';\r\nimport { AttentionBeaconGroup } from '@bingads-webui-campaign-react/attention-beacon';\r\nimport { FormErrorGroup, UnmappedFormErrors, andComp, anyComp, entityIs, propertyIs } from '@bingads-webui-campaign-react/form-error';\r\nimport { ValidationGroup } from '@bingads-webui-react/validation';\r\nimport { Collapse, TextTitle, ValidatedBootstrapPanel, ValidatedPanel, collapseExpander, useCollapseState, getPanelErrorProps } from '@bingads-webui-campaign/wizard-jumbo-card';\r\nimport { withControlErrorHandling, withUnvalidatedControlErrors } from '@bingads-webui-campaign-react/error-handling';\r\nimport { ValidatedLocationTargetSetting } from '@bingads-webui-campaign-react/step-wizard-controls';\r\nimport { getAdScheduleDetails, getLocationTargetTitleDetails } from '@bingads-webui-campaign-react/wizard-shared-components';\r\nimport { ValidatedLegacyDateSetting } from '@bingads-webui-campaign/date-setting';\r\nimport { ValidatedLegacyAdSchedule } from '@bingads-webui-campaign/ad-schedule';\r\nimport { StepHeader, ERROR_ENTITY, adScheduleIcon, locationTargetIcon, startDateEndDateIcon, SectionShimmer } from '@bingads-webui-campaign-react/display-plus-campaigns';\r\nimport { withPermissions } from '@bingads-webui-react/hoc-with-permissions';\r\nimport { useWizardService, getWizardData } from '@bingads-webui-react/wizard';\r\nimport { ValidatedLegacyAdDistribution } from '@bingads-webui-campaign-react/standard-shopping-wizard/src/steps/adgroup-settings/components/ad-distribution';\r\n\r\nimport { getDefaultAdDistribution } from '../../../model/default-values';\r\nimport { getTargetingPanels, getAdGroupStyles } from './utils';\r\n\r\nconst campaignLocationCriterions = anyComp(\r\n entityIs(ERROR_ENTITY.CampaignLocation),\r\n entityIs(ERROR_ENTITY.CampaignRadius),\r\n entityIs(ERROR_ENTITY.CampaignNegativeLocation),\r\n entityIs(ERROR_ENTITY.CampaignLocationIntent)\r\n);\r\n\r\nconst ServerValidatedLocationTargetSetting = withControlErrorHandling(withUnvalidatedControlErrors(\r\n ValidatedLocationTargetSetting,\r\n { filter: campaignLocationCriterions }\r\n));\r\n\r\nconst ServerValidatedAdDistributionSetting = ValidatedLegacyAdDistribution && withControlErrorHandling(withUnvalidatedControlErrors(\r\n ValidatedLegacyAdDistribution,\r\n {\r\n filter: andComp(entityIs(ERROR_ENTITY.Adgroup), propertyIs('adDistribution')),\r\n }\r\n));\r\n\r\nconst campaignPropertyList = [\r\n 'locationTargets',\r\n];\r\nconst adGroupPropertyList = [\r\n 'StartDate', 'EndDate', 'AdDistribution',\r\n];\r\n\r\nconst AdgroupStepInternal = ({\r\n data,\r\n onDataChange,\r\n scope,\r\n error,\r\n}) => {\r\n const i18n = useContext(I18nContext);\r\n const legacyI18n = useMemo(() => buildLegacyI18n(i18n, [ValidationStringMap]), [i18n]);\r\n const classes = useDefaultStyles(getAdGroupStyles);\r\n const { state: { context: { saveFailed: showAllValidationErrors } } } = useFormService();\r\n const wizardService = useWizardService();\r\n const { bundleCountries, bundleLocationCriterions } = getWizardData(wizardService.state);\r\n\r\n const {\r\n campaign = {},\r\n } = data || {};\r\n const {\r\n locationTargets,\r\n } = campaign || {};\r\n\r\n const { basicOptions, moreOptions } = getTargetingPanels();\r\n const [\r\n allTargetSettingsSections,\r\n targetSettingsExpandedSections,\r\n setTargetSettingsExpandedSections,\r\n ] = useCollapseState(\r\n basicOptions /* all sections */,\r\n ['location-target', 'predictive-targeting'] /* initially expanded sections */\r\n );\r\n const [\r\n allMoreSettingsSections,\r\n moreSettingsExpandedSections,\r\n setMoreSettingsExpandedSections,\r\n ] = useCollapseState(\r\n moreOptions /* all sections */,\r\n ['start-end-dates', 'ad-schedule', 'ad-distribution'] /* initially expanded sections */\r\n );\r\n const allBasicExpand = useMemo(\r\n () => collapseExpander({ setActiveKeys: setTargetSettingsExpandedSections }),\r\n [setTargetSettingsExpandedSections]\r\n );\r\n const [adScheduleView, setAdScheduleView] = React.useState(null);\r\n const [adDistributionView, setAdDistributionView] = React.useState(null);\r\n\r\n const onValidate = (result) => {\r\n if (data && data.campaign) {\r\n const targets = _.pick(result.data, campaignPropertyList);\r\n const adGroupProperties = _.pick(result.data, adGroupPropertyList);\r\n const campaignData = _.omit(result.data, campaignPropertyList, adGroupPropertyList);\r\n\r\n const mergedData = {\r\n ...data,\r\n campaign: {\r\n ...data.campaign,\r\n ...campaignData,\r\n ...targets,\r\n },\r\n adGroup: {\r\n ...data.adGroup,\r\n ...adGroupProperties,\r\n },\r\n };\r\n\r\n onDataChange({\r\n data: mergedData,\r\n isValid: result.isValid,\r\n });\r\n }\r\n };\r\n\r\n const locationTargetProps = {\r\n validationProps: {\r\n data: locationTargets,\r\n },\r\n allowNegativeLocationTargeting: false,\r\n isRadiusExcludeEnabled: false,\r\n bundleCountries,\r\n bundleLocationCriterions,\r\n hideIntent: false,\r\n defaultSelectedSearchType: SEARCH_TYPE.Boundary,\r\n bidStrategyType: 'placeholder',\r\n scope,\r\n strings: {\r\n description: i18n.getString(_TL_('For example, a country/region, state/province, or ZIP/postal code.')),\r\n },\r\n };\r\n\r\n const adDistributionGetOptions = useCallback((initialAdDistribution, onChange) => {\r\n const isSPB = campaign.BiddingScheme && campaign.BiddingScheme.Type === 'CostPerSale';\r\n return {\r\n AdDistribution: initialAdDistribution || getDefaultAdDistribution(!isSPB),\r\n campaignType: 'shopping',\r\n campaignSubType: 'ShoppingSponsoredProductAd',\r\n Languages: ['All'],\r\n isSPBCampaign: isSPB,\r\n onChange,\r\n };\r\n }, [campaign]);\r\n\r\n return (\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n \r\n
\r\n \r\n
\r\n
\r\n \r\n \r\n \r\n }\r\n >\r\n \r\n \r\n \r\n \r\n \r\n (\r\n <>\r\n \r\n \r\n {i18n.getString(_TL_('More options'))}\r\n \r\n \r\n \r\n \r\n
\r\n \r\n }\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n >\r\n {\r\n data && data.adGroup ? (\r\n \r\n ) : ()\r\n }\r\n \r\n }\r\n >\r\n \r\n \r\n }\r\n >\r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n )}\r\n />\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport const AdgroupStep = withPermissions(withScope(AdgroupStepInternal));\r\n","import _ from 'underscore';\r\nimport Promise from 'bluebird';\r\nimport { useContext } from 'react';\r\nimport { Campaign, AdGroup } from '@bingads-webui/campaign-odata-schemas';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { ActivityContext } from '@bingads-webui-react/hoc-with-signal';\r\nimport { useWizardService, getWizardData, WIZARD_EVENTS } from '@bingads-webui-react/wizard';\r\nimport { useWizardLog, modelToViewModelForDateSetting, viewModelToBulkModelForDateSetting, convertMachineDateToAccountDate, LOG_STATUS } from '@bingads-webui-campaign-react/standard-shopping-wizard';\r\nimport { ERROR_ENTITY, getBulkUploadErrorType, modelToViewModelForBulkErrors, removeReferencedEntityInvalidIdErrors } from '@bingads-webui-campaign-react/xandr-video-campaign-shared-components';\r\nimport { defaultBidForShoppingCampaign } from '@bingads-webui-campaign-legacy/budget/shared/defaultBid';\r\nimport { convertCampaignStateToCampaignJSONSchemaData, modelToViewModelForCampaign, getAdGroup, getAd, getProductPartition } from '../../../model/campaign';\r\nimport { createOrUpdateCampaign, readLocationCriterions, readDayTimeCriterions, readDeviceCriterions } from '../../../model/crud';\r\n\r\n\r\nconst bulkUpsertCampaignSettingsEntityErrorMap = {\r\n [getBulkUploadErrorType(Campaign)]: ERROR_ENTITY.Campaign,\r\n [getBulkUploadErrorType(AdGroup)]: ERROR_ENTITY.AdGroup,\r\n};\r\n\r\nexport const useTargetRepository = () => {\r\n const { state, send } = useWizardService();\r\n const i18n = useContext(I18nContext);\r\n const activity = useContext(ActivityContext);\r\n\r\n const { onStepLoadedLog, onStepSavedLog } = useWizardLog({ activity, wizardState: state, flow: 'sponsored-shopping/adgroup' });\r\n const {\r\n scope, campaign, bundleCountries, bundleLocationCriterions,\r\n } = getWizardData(state);\r\n const {\r\n values: {\r\n cid,\r\n aid,\r\n },\r\n } = scope;\r\n\r\n const load = () => {\r\n onStepLoadedLog({ status: LOG_STATUS.LOAD_START });\r\n return new Promise((resolve) => {\r\n const $readLocationCriterions = readLocationCriterions(cid, aid, campaign.Id);\r\n const $readDayTimeCriterions = readDayTimeCriterions(cid, aid, campaign.Id);\r\n const $readDeviceCriterions = readDeviceCriterions(cid, aid, campaign.Id);\r\n\r\n Promise.all([\r\n $readLocationCriterions,\r\n $readDayTimeCriterions,\r\n $readDeviceCriterions,\r\n ]).then(([locationCriterions, dayTimeCriterions, deviceCriterions]) => {\r\n const campaignData = modelToViewModelForCampaign({\r\n campaignModel: campaign,\r\n locationCriterionsModel: locationCriterions ? locationCriterions.value : [],\r\n dayTimeCriterionsModel: dayTimeCriterions ? dayTimeCriterions.value : [],\r\n deviceCriterionsModel: deviceCriterions ? deviceCriterions.value : [],\r\n bundleCountries,\r\n });\r\n resolve({\r\n adGroup: campaign.AdGroups[0] ? {\r\n ...campaign.AdGroups[0],\r\n ...modelToViewModelForDateSetting({\r\n adGroupModel: campaign.AdGroups[0],\r\n i18n,\r\n }),\r\n } : {},\r\n campaign: campaignData,\r\n });\r\n });\r\n });\r\n };\r\n\r\n const save = ({ data }) => {\r\n const model = convertCampaignStateToCampaignJSONSchemaData({\r\n campaign: data.campaign,\r\n bundleLocationCriterions,\r\n isSPB: campaign.BiddingScheme.Type === 'CostPerSale',\r\n });\r\n const adGroupId = campaign.AdGroups[0] ? campaign.AdGroups[0].Id : null;\r\n const adGroup = {\r\n ...getAdGroup(campaign, defaultBidForShoppingCampaign()),\r\n ...data.adGroup,\r\n ...viewModelToBulkModelForDateSetting({\r\n adGroupViewModel: {\r\n data: {\r\n StartDate: convertMachineDateToAccountDate(new Date()),\r\n ...data.adGroup,\r\n },\r\n },\r\n i18n,\r\n }),\r\n };\r\n\r\n model.AdGroups = [adGroup];\r\n if (!adGroup.Id) {\r\n model.ProductAds = [getAd(campaign)];\r\n model.ProductPartitions = [getProductPartition(campaign, adGroup.SearchBid)];\r\n }\r\n\r\n onStepSavedLog({ status: LOG_STATUS.SAVE_START });\r\n return new Promise((resolve, reject) => {\r\n createOrUpdateCampaign(model)\r\n .then((res) => {\r\n onStepSavedLog({ status: LOG_STATUS.SAVE_SUCCESS, msg: `Status: ${res.Status}, Id: ${res.Id}` });\r\n const finalAdGroup = adGroup.Id ? {\r\n ...res.AdGroups[0],\r\n Id: adGroupId || res.AdGroups[0].Id,\r\n } : res.AdGroups[0];\r\n send(WIZARD_EVENTS.UPDATE_WIZARD_DATA, { campaign: res, adGroup: finalAdGroup });\r\n resolve();\r\n })\r\n .catch((res) => {\r\n // eslint-disable-next-line prefer-promise-reject-errors\r\n const serverErrors = modelToViewModelForBulkErrors(\r\n removeReferencedEntityInvalidIdErrors(res.errors),\r\n bulkUpsertCampaignSettingsEntityErrorMap,\r\n 'sponsored-shopping/adgroup-target-settings',\r\n i18n,\r\n activity\r\n );\r\n onStepSavedLog({ status: LOG_STATUS.SAVE_FAIL, msg: res });\r\n // eslint-disable-next-line prefer-promise-reject-errors\r\n return reject({ error: _.flatten(serverErrors.filter(val => val !== null)) });\r\n });\r\n });\r\n };\r\n\r\n return {\r\n load,\r\n save,\r\n };\r\n};\r\n","import { getCollapsiblePanelStyles } from '../../shared/styles/collapsible-panel';\r\n\r\nexport const getStyles = (components, theme) => ({\r\n divider: {\r\n padding: '5px 0px 0px 4px',\r\n width: '100%',\r\n borderTop: '2px solid #E0E0E0',\r\n marginTop: 30,\r\n marginBottom: 20,\r\n },\r\n budgetContainer: {\r\n '& .budget-title-container span': {\r\n fontWeight: 600,\r\n },\r\n },\r\n budgetBidShell: {\r\n display: 'flex',\r\n width: 966,\r\n '& .checkbox-inline, & .checkbox>label, & .radio-inline, & .radio>label, & label.checkbox, & label.radio': {\r\n '&:focus-within': {\r\n outline: 'none',\r\n },\r\n },\r\n '& .bid-and-budget #currencyLabelCostPerSale': {\r\n display: 'inline',\r\n },\r\n },\r\n collapsiblePanel: getCollapsiblePanelStyles(components, theme),\r\n});\r\n","/* eslint-disable react/prop-types */\r\nimport React, { useContext, useMemo, useState, useEffect } from 'react';\r\nimport classNames from 'classnames';\r\nimport _ from 'underscore';\r\n\r\nimport { Stack } from '@fluentui/react';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { useWizardService, matchStepState, STEP_STATES } from '@bingads-webui-react/wizard';\r\nimport { ActivityContext } from '@bingads-webui-react/hoc-with-signal';\r\nimport { useFormService } from '@bingads-webui-react/form';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { buildLegacyI18n } from '@bingads-webui/build-legacy-i18n';\r\nimport { ValidationStringMap } from '@bingads-webui/validation-string-map';\r\nimport { Collapse, useCollapseState, ValidatedPanel, getPanelErrorProps, TextTitle } from '@bingads-webui-campaign/wizard-jumbo-card';\r\nimport { isAutoBidding } from '@bingads-webui-campaign-react/standard-shopping-wizard';\r\nimport { Campaign } from '@bingads-webui/campaign-odata-schemas';\r\nimport { ValidationGroup } from '@bingads-webui-react/validation';\r\nimport { FormErrorGroup, UnmappedFormErrors } from '@bingads-webui-campaign-react/form-error';\r\nimport { ServerContext } from '@bingads-webui-campaign-react/server-context';\r\nimport { AttentionBeaconGroup } from '@bingads-webui-campaign-react/attention-beacon';\r\nimport { ActuationGroup } from '@bingads-webui-campaign-react/actuator';\r\nimport {\r\n AudienceBudgetBidStrategy,\r\n AudienceBidValue,\r\n StepHeader,\r\n SectionShimmer,\r\n bidValueIcon,\r\n budgetBidStrategyIcon,\r\n} from '@bingads-webui-campaign-react/display-plus-campaigns';\r\nimport { formatBidValue } from '@bingads-webui-campaign-react/summary-page';\r\n\r\nimport { getStyles } from './styles';\r\n\r\nexport const BudgetBidStep = ({\r\n data,\r\n onDataChange,\r\n error,\r\n}) => {\r\n const classes = useDefaultStyles(getStyles);\r\n const activity = useContext(ActivityContext);\r\n\r\n const { state } = useWizardService();\r\n const currentStates = state.toStrings()[1];\r\n const { state: { context: { saveFailed: showAllValidationErrors } } } = useFormService();\r\n\r\n const {\r\n campaign,\r\n adGroup,\r\n } = data || {};\r\n\r\n const i18n = useContext(I18nContext);\r\n const legacyI18n = useMemo(() => buildLegacyI18n(i18n, [ValidationStringMap]), [i18n]);\r\n\r\n const [, setSharedBudgetView] = useState(null);\r\n const serverContext = useContext(ServerContext);\r\n const { CeilingValue, FloorValue } = serverContext.ProductGroupBidRange || {};\r\n\r\n const isAutoBiddingScheme = isAutoBidding(campaign && campaign.biddingScheme && campaign.biddingScheme.Type);\r\n const basicOptions = isAutoBiddingScheme ? [\r\n 'bid-and-budget',\r\n ] : [\r\n 'bid-and-budget',\r\n 'bid-value',\r\n ];\r\n\r\n const onValidate = (result) => {\r\n if (campaign) {\r\n let adGroupData = {};\r\n\r\n if (result.data) {\r\n adGroupData = {\r\n SearchBid: isAutoBiddingScheme ? null : result.data.SearchBid,\r\n };\r\n }\r\n\r\n onDataChange({\r\n data: {\r\n ...data,\r\n campaign: {\r\n ...campaign,\r\n ...result.data,\r\n },\r\n adGroup: {\r\n ...adGroup,\r\n ...adGroupData,\r\n },\r\n },\r\n isValid: result.isValid,\r\n });\r\n }\r\n };\r\n\r\n const [\r\n allBudgetBidSections,\r\n budgetBidExpandedSections,\r\n setBudgetBidExpandedSections,\r\n ] = useCollapseState(\r\n basicOptions,\r\n ['bid-and-budget', 'bid-value'] /* initially expanded sections */\r\n );\r\n\r\n const budgetBidStrategyTitleDetails = useMemo(() => {\r\n if (!campaign) {\r\n return '';\r\n }\r\n const currencyCode = serverContext.CurrentAccount.CurrencyCode;\r\n const amount = _.isNumber(campaign.Budget.Amount) ?\r\n i18n.formatCurrency(campaign.Budget.Amount, currencyCode) :\r\n '-';\r\n return i18n.getString(_TL_('{{amount}} per day'), {\r\n amount,\r\n });\r\n }, [campaign, i18n, serverContext]);\r\n\r\n const bidTitleDetails = useMemo(() => (\r\n adGroup ? formatBidValue(i18n, adGroup.SearchBid, serverContext.CurrentAccount.CurrencyCode) : ''\r\n ), [adGroup, i18n, serverContext]);\r\n\r\n\r\n useEffect(() => {\r\n if (activity && matchStepState(state, STEP_STATES.LOADING)) {\r\n activity.signal(`onBudgetBidStepLoading - ${currentStates}`);\r\n }\r\n\r\n if (activity && matchStepState(state, STEP_STATES.SAVING)) {\r\n activity.signal(`onBudgetBidStepSaving - ${currentStates}`);\r\n }\r\n }, [activity, currentStates, state]);\r\n\r\n return (\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n \r\n
\r\n
\r\n \r\n \r\n }\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n >\r\n {\r\n campaign ? (\r\n \r\n ) : ()\r\n }\r\n \r\n }\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n >\r\n {\r\n adGroup ? (\r\n \r\n ) : ()\r\n }\r\n \r\n \r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n );\r\n};\r\n","import _ from 'underscore';\r\nimport Promise from 'bluebird';\r\nimport { useContext } from 'react';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { Campaign, AdGroup } from '@bingads-webui/campaign-odata-schemas';\r\nimport { ActivityContext } from '@bingads-webui-react/hoc-with-signal';\r\nimport { useWizardService, getWizardData, WIZARD_EVENTS } from '@bingads-webui-react/wizard';\r\nimport { useWizardLog, LOG_STATUS } from '@bingads-webui-campaign-react/standard-shopping-wizard';\r\nimport { ERROR_ENTITY, getBulkUploadErrorType, modelToViewModelForBulkErrors, removeReferencedEntityInvalidIdErrors } from '@bingads-webui-campaign-react/xandr-video-campaign-shared-components';\r\nimport { createOrUpdateCampaign } from '../../../model/crud';\r\n\r\nconst bulkUpsertCampaignSettingsEntityErrorMap = {\r\n [getBulkUploadErrorType(Campaign)]: ERROR_ENTITY.Campaign,\r\n [getBulkUploadErrorType(AdGroup)]: ERROR_ENTITY.AdGroup,\r\n};\r\n\r\nexport const useBudgetBitRepository = () => {\r\n const { state, send } = useWizardService();\r\n const i18n = useContext(I18nContext);\r\n const activity = useContext(ActivityContext);\r\n const { onStepLoadedLog, onStepSavedLog } = useWizardLog({ activity, wizardState: state, flow: 'sponsored-shopping/budget-bid' });\r\n const { campaign, adGroup } = getWizardData(state);\r\n\r\n const load = () => {\r\n onStepLoadedLog({ status: LOG_STATUS.LOAD_START });\r\n return new Promise((resolve) => {\r\n onStepLoadedLog({ status: LOG_STATUS.LOAD_SUCCESS });\r\n resolve({\r\n campaign,\r\n adGroup: campaign.AdGroups[0],\r\n });\r\n });\r\n };\r\n\r\n const save = ({ data }) => {\r\n onStepSavedLog({ status: LOG_STATUS.SAVE_START });\r\n const model = {\r\n Id: data.campaign.Id,\r\n Budget: data.campaign.Budget,\r\n AdGroups: [{\r\n Id: adGroup.Id,\r\n CampaignName: data.campaign.Name,\r\n SearchBid: data.adGroup.SearchBid,\r\n }],\r\n };\r\n return new Promise((resolve, reject) => {\r\n createOrUpdateCampaign(model)\r\n .then((res) => {\r\n onStepSavedLog({ status: LOG_STATUS.SAVE_SUCCESS, msg: `Status: ${res.Status}, Id: ${res.Id}` });\r\n send(WIZARD_EVENTS.UPDATE_WIZARD_DATA, {\r\n campaign: {\r\n ...campaign,\r\n ...res,\r\n AdGroups: [{\r\n ...campaign.AdGroups[0],\r\n ...res.AdGroups[0],\r\n }],\r\n },\r\n });\r\n resolve();\r\n })\r\n .catch((res) => {\r\n // eslint-disable-next-line prefer-promise-reject-errors\r\n const serverErrors = modelToViewModelForBulkErrors(\r\n removeReferencedEntityInvalidIdErrors(res.errors),\r\n bulkUpsertCampaignSettingsEntityErrorMap,\r\n 'sponsored-shopping/campaign-settings',\r\n i18n,\r\n activity\r\n );\r\n onStepSavedLog({ status: LOG_STATUS.SAVE_FAIL, msg: res });\r\n // eslint-disable-next-line prefer-promise-reject-errors\r\n return reject({ error: _.flatten(serverErrors.filter(val => val !== null)) });\r\n });\r\n });\r\n };\r\n\r\n return {\r\n load,\r\n save,\r\n };\r\n};\r\n","// import { getCollapsiblePanelStyles } from '../../shared/styles';\r\nimport _ from 'underscore';\r\nimport { merge } from '@bingads-webui/primitive-utilities';\r\nimport { creationCommonStyle } from '@bingads-webui-campaign-react/campaign-adgroup-settings-shared-styles';\r\n\r\nfunction resolveStyles({ theme }, ...styles) {\r\n const resolvedStyles = styles.map(s => (_.isFunction(s) ? s(theme) : s));\r\n\r\n if (_.some(resolvedStyles, _.isEmpty)) {\r\n throw new Error('Cannot pass in empty style!');\r\n }\r\n\r\n return resolvedStyles;\r\n}\r\n\r\nexport const getCampaignStyles = (components, theme) => ({\r\n divider: {\r\n padding: '5px 0px 0px 4px',\r\n width: '100%',\r\n borderTop: '2px solid #E0E0E0',\r\n marginTop: 30,\r\n marginBottom: 20,\r\n },\r\n budgetContainer: {\r\n '& .budget-title-container span': {\r\n fontWeight: 600,\r\n },\r\n },\r\n campaignShell: {\r\n display: 'flex',\r\n width: 966,\r\n '& .collapse-container .collapse-title-bar .collapse-title .helpbutton': {\r\n verticalAlign: 'middle',\r\n },\r\n '& .ms-ChoiceFieldGroup label': {\r\n padding: 0,\r\n fontWeight: 400,\r\n },\r\n ...merge(\r\n {},\r\n ...resolveStyles(\r\n { theme },\r\n creationCommonStyle\r\n )\r\n ),\r\n '& .local-inventory label': {\r\n display: 'flex',\r\n },\r\n '& .product-collections label': {\r\n display: 'flex',\r\n },\r\n '& .productsScope': {\r\n display: 'none',\r\n },\r\n '& .bid-strategy-details-container label': {\r\n display: 'inline-block',\r\n },\r\n '& .bid-and-budget #currencyLabelCostPerSale': {\r\n display: 'inline',\r\n },\r\n '& .allFeedProducts': {\r\n display: 'none',\r\n },\r\n '& .vanila-bid-strategy .bid-strategy-container': {\r\n marginTop: 0,\r\n '& h2.control-label': {\r\n marginTop: 0,\r\n },\r\n },\r\n },\r\n collapsiblePanel: {},\r\n estimationPart: {\r\n flexGrow: '1',\r\n position: 'sticky',\r\n marginTop: '58px',\r\n marginLeft: '30px',\r\n },\r\n urlOptionsContainer: {\r\n maxWidth: 435,\r\n },\r\n});\r\n","import _ from 'underscore';\r\nimport PropTypes from 'prop-types';\r\nimport React, { useContext, useState, useMemo, useCallback, useEffect } from 'react';\r\nimport classNames from 'classnames';\r\nimport { Stack } from '@fluentui/react';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { ServerContext } from '@bingads-webui-campaign-react/server-context';\r\nimport { Campaign } from '@bingads-webui/campaign-odata-schemas';\r\nimport { ActuationGroup } from '@bingads-webui-campaign-react/actuator';\r\nimport { AttentionBeaconGroup } from '@bingads-webui-campaign-react/attention-beacon';\r\nimport { FormErrorGroup, UnmappedFormErrors, andComp, propertyIs, entityIs } from '@bingads-webui-campaign-react/form-error';\r\nimport { withUnvalidatedControlErrors, withControlErrorHandling } from '@bingads-webui-campaign-react/error-handling';\r\nimport { ValidationGroup } from '@bingads-webui-react/validation';\r\nimport { Collapse, useCollapseState, ValidatedPanel, getPanelErrorProps, TextTitle } from '@bingads-webui-campaign/wizard-jumbo-card';\r\nimport { ValidatedLegacyBidStrategy } from '@bingads-webui-campaign-react/step-wizard-controls';\r\nimport { RemainingCharsValidatedTextField } from '@bingads-webui-campaign-react/remaining-chars-hint';\r\nimport { campaignNameProp } from '@bingads-webui-campaign-react/xandr-campaign';\r\nimport {\r\n StepHeader,\r\n budgetBidStrategyIcon,\r\n SectionShimmer,\r\n} from '@bingads-webui-campaign-react/display-plus-campaigns';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { ValidationStringMap } from '@bingads-webui/validation-string-map';\r\nimport { buildLegacyI18n } from '@bingads-webui/build-legacy-i18n';\r\nimport { useFormService } from '@bingads-webui-react/form';\r\nimport { useWizardService, matchStepState, STEP_STATES, WIZARD_EVENTS } from '@bingads-webui-react/wizard';\r\nimport { ActivityContext } from '@bingads-webui-react/hoc-with-signal';\r\nimport { getBidBudgetTitleDetails } from '@bingads-webui-campaign-react/wizard-shared-components';\r\nimport { ERROR_ENTITY } from '../../../model/api-errors';\r\nimport { getCampaignStyles } from './styles';\r\nimport ProductImg from '../../../media/product.svg';\r\nimport { ValidatedProductFilter as LegacyValidatedProductFilter } from '../../../controls/validated-product-filter';\r\nimport { ValidatedProductFilter } from '../../shared';\r\n\r\nconst campaignBiddingSchemeProp = andComp(entityIs(ERROR_ENTITY.Campaign), propertyIs('BiddingScheme'));\r\nconst campaignProductFilterSchemeProp = entityIs('Campaign Product Scope Error');\r\n\r\nconst ServerValidatedLegacyBidStrategy = withControlErrorHandling(withUnvalidatedControlErrors(ValidatedLegacyBidStrategy, { filter: campaignBiddingSchemeProp }));\r\nconst LegacyServerValidatedProductFilterSetting = withControlErrorHandling(withUnvalidatedControlErrors(LegacyValidatedProductFilter, { filter: campaignProductFilterSchemeProp }));\r\nconst ServerValidatedProductFilterSetting = withControlErrorHandling(withUnvalidatedControlErrors(ValidatedProductFilter, { filter: campaignProductFilterSchemeProp }));\r\n\r\nconst getPanelOptions = () => ({\r\n basicOptions: [\r\n 'campaign-name',\r\n 'bid-and-budget',\r\n 'product-filter',\r\n 'product-filter-2',\r\n ],\r\n});\r\n\r\nconst INT_MAX = (2 ** 31) - 1;\r\n\r\nexport const CampaignSettingsStep = (props) => {\r\n const {\r\n data,\r\n onDataChange,\r\n error,\r\n } = props;\r\n\r\n const {\r\n campaign,\r\n productData,\r\n shoppingSettingsRef,\r\n } = data || {};\r\n\r\n const classes = useDefaultStyles(getCampaignStyles);\r\n\r\n const serverContext = useContext(ServerContext);\r\n\r\n const i18n = useContext(I18nContext);\r\n const legacyI18n = useMemo(() => buildLegacyI18n(i18n, [ValidationStringMap]), [i18n]);\r\n\r\n const activity = useContext(ActivityContext);\r\n\r\n const { state, send } = useWizardService();\r\n const { campaignStepIsValid } = state.context.wizardData;\r\n const currentStates = state.toStrings()[1];\r\n\r\n const { basicOptions } = getPanelOptions();\r\n const [basicOptionsShown, setBasicOptionsShown] = useState(basicOptions);\r\n\r\n const noStore = useMemo(() => (\r\n (_.isEmpty(productData) || _.isEmpty(productData.ProductCollectionAccounts) ||\r\n _.findIndex(productData.ProductCollectionAccounts, item => !item.IsGlobalStore && !item.IsCoOpStore) < 0)\r\n ), [productData]);\r\n\r\n // add campaign here to ensure data loaded before showing redirect to BMC\r\n const showRedirectToBMC = useMemo(() => campaign && noStore, [noStore, campaign]);\r\n\r\n const [\r\n allCampaignSettingsSections,\r\n campaignSettingsExpandedSections,\r\n setCampaignSettingsExpandedSections,\r\n ] = useCollapseState(\r\n basicOptionsShown /* all sections */,\r\n basicOptions /* initially expanded sections */\r\n );\r\n\r\n const { state: { context: { saveFailed: showAllValidationErrors } } } = useFormService();\r\n\r\n const onValidate = (result) => {\r\n if (data && data.campaign) {\r\n setBasicOptionsShown([...basicOptions]);\r\n onDataChange({\r\n data: {\r\n ...data,\r\n campaign: {\r\n ...data.campaign,\r\n ...result.data,\r\n },\r\n },\r\n isValid: result.isValid,\r\n });\r\n }\r\n };\r\n\r\n const campaignNameTitleDetails = useMemo(() => {\r\n let campaignDetail = '';\r\n if (campaign) {\r\n campaignDetail = i18n.getString(_TL_('Name: {{Name}}'), { Name: campaign.Name });\r\n }\r\n return campaignDetail;\r\n }, [campaign, i18n]);\r\n\r\n const budgetBidStrategyTitleDetails = useMemo(() => (\r\n campaign ? getBidBudgetTitleDetails(serverContext, i18n, campaign.BiddingScheme, campaign.Budget) : ''\r\n ), [campaign, i18n, serverContext]);\r\n\r\n const onCampaignNameChange = useCallback((ev) => {\r\n activity.signal(`onCampaignNameChange: ${_.get(ev, ['target', 'value'])}}`);\r\n }, [activity]);\r\n\r\n useEffect(() => {\r\n const prefixTitle = 'onCampaignStep';\r\n if (activity && matchStepState(state, STEP_STATES.LOADING)) {\r\n activity.signal(`${prefixTitle}Loading - ${currentStates}`);\r\n }\r\n\r\n if (activity && matchStepState(state, STEP_STATES.SAVING)) {\r\n activity.signal(`${prefixTitle}Saving - ${currentStates}`);\r\n }\r\n }, [activity, currentStates, state]);\r\n\r\n\r\n useEffect(() => {\r\n send(WIZARD_EVENTS.UPDATE_WIZARD_DATA, { showRedirectToBMC });\r\n }, [showRedirectToBMC, send]);\r\n\r\n useEffect(() => {\r\n const isSaving = matchStepState(state, STEP_STATES.SAVING);\r\n if (isSaving && campaignStepIsValid === false) {\r\n setCampaignSettingsExpandedSections([...basicOptions]);\r\n }\r\n }, [campaignStepIsValid, setCampaignSettingsExpandedSections, basicOptions, send, state]);\r\n\r\n return (\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n \r\n \r\n }\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n >\r\n \r\n \r\n\r\n }\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n >\r\n {\r\n campaign ? (\r\n \r\n ) : ()\r\n }\r\n \r\n }\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n actuationProps={{\r\n expand: true,\r\n expandKey: 'product-filter-2',\r\n }}\r\n >\r\n \r\n \r\n }\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n actuationProps={{\r\n expand: true,\r\n expandKey: 'product-filter',\r\n }}\r\n >\r\n \r\n \r\n \r\n \r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n );\r\n};\r\n\r\nCampaignSettingsStep.propTypes = {\r\n data: PropTypes.shape({\r\n adGroup: PropTypes.shape({}),\r\n campaign: PropTypes.shape({}),\r\n productData: PropTypes.shape({}),\r\n productFilterRef: PropTypes.shape({}),\r\n feedData: PropTypes.shape({}),\r\n storeSettingRef: PropTypes.shape({}),\r\n }).isRequired,\r\n onDataChange: PropTypes.func.isRequired,\r\n error: PropTypes.arrayOf(PropTypes.string),\r\n};\r\n\r\nCampaignSettingsStep.defaultProps = {\r\n error: undefined,\r\n};\r\n\r\n","import _ from 'underscore';\r\nimport $ from 'jquery';\r\nimport Promise from 'bluebird';\r\nimport { useContext, useRef, useState } from 'react';\r\nimport { Campaign } from '@bingads-webui/campaign-odata-schemas';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { ServerContext } from '@bingads-webui-campaign-react/server-context';\r\nimport { ActivityContext } from '@bingads-webui-react/hoc-with-signal';\r\nimport { useWizardService, getWizardData, WIZARD_EVENTS } from '@bingads-webui-react/wizard';\r\nimport { useWizardLog, LOG_STATUS } from '@bingads-webui-campaign-react/standard-shopping-wizard';\r\nimport { ERROR_ENTITY, getBulkUploadErrorType, modelToViewModelForBulkErrors, removeReferencedEntityInvalidIdErrors } from '@bingads-webui-campaign-react/xandr-video-campaign-shared-components';\r\nimport { defaultBidForShoppingCampaign } from '@bingads-webui-campaign-legacy/budget/shared/defaultBid';\r\nimport { convertCampaignStateToCampaignJSONSchemaData } from '../../../model/campaign';\r\nimport { getDefaultCampaignValues } from '../../../model/default-values';\r\nimport { createOrUpdateCampaign } from '../../../model/crud';\r\nimport { getBmcMtEndpoint } from '../../shared/utils';\r\n\r\nconst bulkUpsertCampaignSettingsEntityErrorMap = {\r\n [getBulkUploadErrorType(Campaign)]: ERROR_ENTITY.Campaign,\r\n};\r\n\r\nexport const useCampaignRepository = () => {\r\n const { state, send } = useWizardService();\r\n const activity = useContext(ActivityContext);\r\n const i18n = useContext(I18nContext);\r\n const serverContext = useContext(ServerContext);\r\n const {\r\n productData, bundleLocationCriterions, campaign, scope,\r\n } = getWizardData(state);\r\n const {\r\n values: { cid },\r\n } = scope;\r\n const { onStepLoadedLog, onStepSavedLog } = useWizardLog({ activity, wizardState: state, flow: 'sponsored-shopping/campaign-settings' });\r\n const shoppingSettingsRef = useRef();\r\n const [savedCampaignId, setSavedCampaignId] = useState(null);\r\n\r\n const load = () => {\r\n onStepLoadedLog({ status: LOG_STATUS.LOAD_START });\r\n if (campaign && campaign.Id) {\r\n setSavedCampaignId(campaign.Id);\r\n }\r\n return new Promise((resolve) => {\r\n onStepLoadedLog({ status: LOG_STATUS.LOAD_SUCCESS });\r\n resolve({\r\n campaign: campaign && campaign.Id ? { ...getDefaultCampaignValues(true), ...campaign } : getDefaultCampaignValues(true),\r\n shoppingSettingsRef,\r\n productData,\r\n });\r\n });\r\n };\r\n\r\n const save = ({ data }) => {\r\n onStepSavedLog({ status: LOG_STATUS.SAVE_START });\r\n const { productFilter } = data.campaign;\r\n const productScopeId = productData.CampaignCriterionsData && productData.CampaignCriterionsData.Id;\r\n const { productScope, hasFilteredProducts } = productFilter;\r\n const globalStore = productData.ProductCollectionAccounts.find(v => v.IsGlobalStore);\r\n\r\n const createGlobalStorePromise = globalStore ? Promise.resolve(globalStore.Value) : new Promise((resolve, reject) => {\r\n $.ajax({\r\n url: `${getBmcMtEndpoint()}/api/v1/BingAds/GetOrCreateSpaGlobalStoreId/${cid}`,\r\n type: 'POST',\r\n xhrFields: {\r\n withCredentials: true,\r\n },\r\n success: (obj) => {\r\n resolve(obj);\r\n },\r\n error: (err) => {\r\n const errMsg = _.result(err.responseJSON[0], 'ShortTitle', '');\r\n // eslint-disable-next-line prefer-promise-reject-errors\r\n reject({ error: [errMsg] });\r\n },\r\n });\r\n });\r\n\r\n return createGlobalStorePromise.then((globalStoreId) => {\r\n const basic = {\r\n CampaignSubType: 'ShoppingSponsoredProductAd',\r\n LocalInventoryAdsEnabled: false,\r\n Priority: 'High',\r\n ProviderId: globalStoreId,\r\n SalesCountry: serverContext.CurrentAccount.CountryCode,\r\n ShoppableAdsEnabled: data.campaign.BiddingScheme.Type !== 'CostPerSale',\r\n };\r\n\r\n const campaignInfo = {\r\n ...data.campaign,\r\n };\r\n if (!data.campaign.Id && savedCampaignId) {\r\n campaignInfo.Id = savedCampaignId;\r\n }\r\n if (!savedCampaignId) {\r\n campaignInfo.SearchBid = defaultBidForShoppingCampaign();\r\n }\r\n const model = convertCampaignStateToCampaignJSONSchemaData({\r\n campaign: {\r\n ...campaignInfo,\r\n Budget: {\r\n ...data.campaign.Budget,\r\n Id: null,\r\n },\r\n },\r\n bundleLocationCriterions,\r\n shoppingSettings: {\r\n productScopeId,\r\n basic,\r\n productScope,\r\n hasFilteredProducts,\r\n },\r\n isSPB: data.campaign.BiddingScheme.Type === 'CostPerSale',\r\n });\r\n\r\n model.AdGroups = [];\r\n model.ProductAds = [];\r\n model.ProductPartitions = [];\r\n model.Status = 'Paused';\r\n\r\n if (savedCampaignId) {\r\n // if savedCampaignId is set, it means the CampaignCriterions is already created, we should not create again.\r\n model.CampaignCriterions = [];\r\n }\r\n return new Promise((resolve, reject) => {\r\n createOrUpdateCampaign(model)\r\n .then((res) => {\r\n onStepSavedLog({ status: LOG_STATUS.SAVE_SUCCESS, msg: `Status: ${res.Status}, Id: ${res.Id}` });\r\n send(WIZARD_EVENTS.UPDATE_WIZARD_DATA, {\r\n campaign: {\r\n ...res,\r\n adSchedules: {\r\n dayTimeRangs: [],\r\n },\r\n },\r\n });\r\n resolve();\r\n })\r\n .catch((res) => {\r\n // bulkupsert might be failed in some column. if campaign column is success. we should save campaignId to avoid duplicate campaign creation error.\r\n const campaignId = _.get(res, ['entity', 'Id']);\r\n if (campaignId > 0) {\r\n setSavedCampaignId(campaignId);\r\n }\r\n // eslint-disable-next-line prefer-promise-reject-errors\r\n const serverErrors = modelToViewModelForBulkErrors(\r\n removeReferencedEntityInvalidIdErrors(res.errors),\r\n bulkUpsertCampaignSettingsEntityErrorMap,\r\n 'sponsored-shopping/campaign-settings',\r\n i18n,\r\n activity\r\n );\r\n onStepSavedLog({ status: LOG_STATUS.SAVE_FAIL, msg: res });\r\n // eslint-disable-next-line prefer-promise-reject-errors\r\n return reject({ error: _.flatten(serverErrors.filter(val => val !== null)) });\r\n });\r\n });\r\n });\r\n };\r\n\r\n return {\r\n load,\r\n save,\r\n };\r\n};\r\n","import { useState, useEffect, useContext } from 'react';\r\nimport _ from 'underscore';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport _preferencesService from '@bingads-webui-component-legacy/preference/service/index';\r\nimport { ServerContext } from '@bingads-webui-campaign-react/server-context';\r\nimport biddingStrategyTypes from '@bingads-webui-campaign-legacy/bidding-strategy/bidding-strategy-type';\r\nimport { modelToViewModelForDateSetting } from '@bingads-webui-campaign-react/standard-shopping-wizard';\r\n\r\nconst buildSchemaData = ({\r\n data, timeDisplayType, serverContext, i18n,\r\n}) => {\r\n const targetParentEntity = data.campaign;\r\n const locations = _.map(\r\n _.filter(\r\n _.get(targetParentEntity, ['locationTargets', 'currentLevelSettings', 'currentLocations'], []),\r\n loc => loc.SelectionStatus === 'Included'\r\n ),\r\n loc => loc.location\r\n );\r\n const autoBidding = [biddingStrategyTypes.maximizeConversions, biddingStrategyTypes.maximizeClicks, biddingStrategyTypes.maxConversionValue, biddingStrategyTypes.targetRoas, biddingStrategyTypes.costPerSale];\r\n const startEndDate = modelToViewModelForDateSetting({\r\n adGroupModel: data.adGroup,\r\n i18n,\r\n });\r\n return ({\r\n campaignName: {\r\n data: data.campaign.Name,\r\n },\r\n conversionGoals: {\r\n conversionGoals: data.campaign.conversionGoals,\r\n },\r\n store: {\r\n storeName: data.campaign.StoreName,\r\n },\r\n products: {\r\n productFilters: data.campaign.ProductFilters,\r\n useSelectedItem: true,\r\n },\r\n adGroupName: {\r\n data: data.adGroup.Name,\r\n },\r\n locationTargeting: {\r\n locations,\r\n targetOption: _.get(targetParentEntity, ['locationTargets', 'currentLevelSettings', 'targetOption'], null),\r\n },\r\n advancedTargetingSeparator: {},\r\n startEndDates: {\r\n startDate: startEndDate.StartDate,\r\n endDate: startEndDate.EndDate,\r\n },\r\n adSchedule: {\r\n adSchedules: data.campaign.adSchedules && data.campaign.adSchedules.dayTimeRanges,\r\n useSearcherTimeZone: data.campaign.AdScheduleUseSearcherTimeZone,\r\n timeDisplayType,\r\n includeStartEnd: false,\r\n isRendered: !_.isEmpty(data.campaign.adSchedules),\r\n },\r\n adDistribution: {\r\n adDistribution: data.adGroup.AdDistribution,\r\n isRendered: true,\r\n },\r\n budget: {\r\n data: data.campaign.Budget,\r\n currencyCode: serverContext.CurrentAccount.CurrencyCode,\r\n },\r\n bidStrategy: {\r\n data: data.campaign.BiddingScheme,\r\n },\r\n bidValue: {\r\n data: data.adGroup.SearchBid,\r\n currencyCode: serverContext.CurrentAccount.CurrencyCode,\r\n isRendered: data.campaign.BiddingScheme && !_.contains(autoBidding, data.campaign.BiddingScheme.Type),\r\n },\r\n });\r\n};\r\n\r\nexport const useSummarySchemaData = ({ data }) => {\r\n const isAudienceShoppingCampaign = false;\r\n const i18n = useContext(I18nContext);\r\n\r\n const [timeDisplayType, setTimeDisplayType] = useState('12-hour');\r\n\r\n const serverContext = useContext(ServerContext);\r\n\r\n useEffect(() => {\r\n const preferencesService = _preferencesService.default || _preferencesService;\r\n preferencesService.initialize().then(() => {\r\n const isTwelveHourDisplay = preferencesService.findByName('WebApp.CampaignUI.isTwelveHourDisplay') || {};\r\n setTimeDisplayType(_.isUndefined(isTwelveHourDisplay.Data) || isTwelveHourDisplay.Data ? '12-hour' : '24-hour');\r\n });\r\n }, []);\r\n\r\n return (data && buildSchemaData({\r\n data, timeDisplayType, isAudienceShoppingCampaign, serverContext, i18n,\r\n })) || {};\r\n};\r\n\r\n","export const STEP_PATHS = {\r\n CAMPAIGN_SETTINGS: 'CAMPAIGN_SETTINGS',\r\n BUDGET_AND_BIDS: 'BUDGET_AND_BIDS',\r\n TARGET_SETTINGS: 'TARGET_SETTINGS',\r\n AD_GROUP_SETTINGS: 'AD_GROUP_SETTINGS',\r\n SUMMARY: 'SUMMARY',\r\n};\r\n","import React, { useMemo, useCallback } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { Stack } from '@bingads-webui-react/fabric-control';\r\nimport { GeneratedUI } from '@bingads-webui-campaign-react/ui-generator';\r\nimport { summaryPageComponentTypes } from '@bingads-webui-campaign-react/summary-page';\r\nimport { WIZARD_EVENTS, useWizardService } from '@bingads-webui-react/wizard';\r\nimport { StepHeader } from '@bingads-webui-campaign-react/display-plus-campaigns';\r\nimport { buildSchema } from './schema';\r\nimport { useSummarySchemaData } from './use-summary-schema-data';\r\nimport { STEP_PATHS } from '../../constants';\r\n\r\nexport const SummaryStep = ({\r\n data,\r\n}) => {\r\n const schemaData = useSummarySchemaData({ data });\r\n\r\n const { send } = useWizardService();\r\n\r\n const onShoppingHeaderActionClick = useCallback(() => send(WIZARD_EVENTS.NAVIGATE_TO, {\r\n stepId: STEP_PATHS.CAMPAIGN_SETTINGS,\r\n }), [send]);\r\n\r\n const onTargetingHeaderActionClick = useCallback(() => send(WIZARD_EVENTS.NAVIGATE_TO, {\r\n stepId: STEP_PATHS.TARGET_SETTINGS,\r\n }), [send]);\r\n\r\n const onBudgetBidHeaderActionClick = useCallback(() => send(WIZARD_EVENTS.NAVIGATE_TO, {\r\n stepId: STEP_PATHS.BUDGET_AND_BIDS,\r\n }), [send]);\r\n\r\n const options = useMemo(() => ({\r\n onShoppingHeaderActionClick,\r\n onTargetingHeaderActionClick,\r\n onBudgetBidHeaderActionClick,\r\n }), [onShoppingHeaderActionClick, onTargetingHeaderActionClick, onBudgetBidHeaderActionClick]);\r\n\r\n const schema = useMemo(() => buildSchema(options), [options]);\r\n\r\n return (\r\n
\r\n \r\n \r\n \r\n \r\n {data ?\r\n
\r\n \r\n
\r\n : null\r\n }\r\n
\r\n
\r\n );\r\n};\r\n\r\nSummaryStep.propTypes = {\r\n data: PropTypes.shape({}),\r\n};\r\n\r\nSummaryStep.defaultProps = {\r\n data: null,\r\n};\r\n","import { buildDefaultDataProperty } from '@bingads-webui-campaign-react/ui-generator';\r\n\r\nexport const buildSchema = options => ({\r\n separatorStyles: {\r\n marginBottom: 20,\r\n },\r\n shopping: {\r\n type: 'panel',\r\n header: {\r\n title: _TL_('Shopping settings'),\r\n actionButton: {\r\n label: _TL_('Edit'),\r\n iconName: 'Edit',\r\n ariaLabel: _TL_('Edit'),\r\n onClick: options.onShoppingHeaderActionClick,\r\n },\r\n },\r\n components: {\r\n campaignName: buildDefaultDataProperty({\r\n label: _TL_('Campaign name'),\r\n dynamicProps: props => props.campaignName,\r\n }),\r\n hd1: {\r\n type: 'horizontal-divider',\r\n },\r\n bidStrategy: {\r\n type: 'bid-strategy',\r\n dynamicProps: props => props.bidStrategy,\r\n },\r\n hd2: {\r\n type: 'horizontal-divider',\r\n },\r\n products: {\r\n type: 'products',\r\n dynamicProps: props => props.products,\r\n },\r\n },\r\n },\r\n targeting: {\r\n type: 'panel',\r\n header: {\r\n title: _TL_('Targeting'),\r\n actionButton: {\r\n label: _TL_('Edit'),\r\n iconName: 'Edit',\r\n ariaLabel: _TL_('Edit'),\r\n onClick: options.onTargetingHeaderActionClick,\r\n },\r\n },\r\n components: {\r\n separatorStyles: {\r\n marginBottom: 8,\r\n },\r\n adGroupName: buildDefaultDataProperty({\r\n label: _TL_('Ad group name'),\r\n dynamicProps: props => props.adGroupName,\r\n }),\r\n hd1: {\r\n type: 'horizontal-divider',\r\n },\r\n locationTargeting: {\r\n type: 'location-targeting',\r\n dynamicProps: props => props.locationTargeting,\r\n },\r\n hd2: {\r\n type: 'horizontal-divider',\r\n },\r\n startEndDates: {\r\n type: 'start-end-dates',\r\n dynamicProps: props => props.startEndDates,\r\n },\r\n adSchedule: {\r\n type: 'ad-schedule',\r\n dynamicProps: props => props.adSchedule,\r\n },\r\n adDistribution: {\r\n type: 'ad-distribution',\r\n dynamicProps: props => props.adDistribution,\r\n },\r\n },\r\n },\r\n budgetBid: {\r\n type: 'panel',\r\n header: {\r\n title: _TL_('Budget & bids'),\r\n actionButton: {\r\n label: _TL_('Edit'),\r\n iconName: 'Edit',\r\n ariaLabel: _TL_('Edit'),\r\n onClick: options.onBudgetBidHeaderActionClick,\r\n },\r\n },\r\n components: {\r\n separatorStyles: {\r\n marginBottom: 8,\r\n },\r\n budget: {\r\n type: 'budget',\r\n dynamicProps: props => props.budget,\r\n },\r\n\r\n bidValue: {\r\n type: 'bid-value',\r\n dynamicProps: props => props.bidValue,\r\n },\r\n },\r\n },\r\n});\r\n","import _ from 'underscore';\r\nimport Promise from 'bluebird';\r\nimport { useContext } from 'react';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { Campaign, AdGroup } from '@bingads-webui/campaign-odata-schemas';\r\nimport { ActivityContext } from '@bingads-webui-react/hoc-with-signal';\r\nimport { useWizardService, getWizardData } from '@bingads-webui-react/wizard';\r\nimport { useWizardLog, LOG_STATUS } from '@bingads-webui-campaign-react/standard-shopping-wizard';\r\nimport { ERROR_ENTITY, getBulkUploadErrorType, modelToViewModelForBulkErrors, removeReferencedEntityInvalidIdErrors } from '@bingads-webui-campaign-react/xandr-video-campaign-shared-components';\r\nimport { modelToViewModelForCampaign } from '../../../model/campaign';\r\nimport { readLocationCriterions, readDayTimeCriterions, readDeviceCriterions, createOrUpdateCampaign } from '../../../model/crud';\r\n\r\nconst bulkUpsertCampaignSettingsEntityErrorMap = {\r\n [getBulkUploadErrorType(Campaign)]: ERROR_ENTITY.Campaign,\r\n [getBulkUploadErrorType(AdGroup)]: ERROR_ENTITY.AdGroup,\r\n};\r\n\r\nexport const useSummaryRepository = () => {\r\n const { state } = useWizardService();\r\n const i18n = useContext(I18nContext);\r\n const activity = useContext(ActivityContext);\r\n const { onStepLoadedLog, onStepSavedLog } = useWizardLog({ activity, wizardState: state, flow: 'sponsored-shopping/summary' });\r\n const { campaign, bundleCountries, scope } = getWizardData(state);\r\n\r\n const {\r\n values: {\r\n cid,\r\n aid,\r\n },\r\n } = scope;\r\n\r\n const load = () => {\r\n onStepLoadedLog({ status: LOG_STATUS.LOAD_START });\r\n return new Promise((resolve) => {\r\n const $readLocationCriterions = readLocationCriterions(cid, aid, campaign.Id);\r\n const $readDayTimeCriterions = readDayTimeCriterions(cid, aid, campaign.Id);\r\n const $readDeviceCriterions = readDeviceCriterions(cid, aid, campaign.Id);\r\n\r\n Promise.all([\r\n $readLocationCriterions,\r\n $readDayTimeCriterions,\r\n $readDeviceCriterions,\r\n ]).then(([locationCriterions, dayTimeCriterions, deviceCriterions]) => {\r\n const campaignData = modelToViewModelForCampaign({\r\n campaignModel: campaign,\r\n locationCriterionsModel: locationCriterions ? locationCriterions.value : [],\r\n dayTimeCriterionsModel: dayTimeCriterions ? dayTimeCriterions.value : [],\r\n deviceCriterionsModel: deviceCriterions ? deviceCriterions.value : [],\r\n bundleCountries,\r\n });\r\n resolve({\r\n adGroup: campaign.AdGroups[0],\r\n campaign: campaignData,\r\n });\r\n });\r\n });\r\n };\r\n\r\n const save = ({ data }) => {\r\n onStepSavedLog({ status: LOG_STATUS.SAVE_START });\r\n const model = {\r\n Id: data.campaign.Id,\r\n Status: 'Active',\r\n AdGroups: [{\r\n Id: data.adGroup.Id,\r\n CampaignName: data.campaign.Name,\r\n Status: 'Active',\r\n }],\r\n };\r\n return new Promise((resolve, reject) => {\r\n createOrUpdateCampaign(model)\r\n .then((res) => {\r\n onStepSavedLog({ status: LOG_STATUS.SAVE_SUCCESS, msg: `Status: ${res.Status}, Id: ${res.Id}` });\r\n\r\n return resolve({\r\n campaign: {\r\n ...campaign,\r\n ...res,\r\n },\r\n adGroup: {\r\n ...campaign.AdGroups[0],\r\n ...res.AdGroups[0],\r\n },\r\n });\r\n })\r\n .catch((res) => {\r\n // eslint-disable-next-line prefer-promise-reject-errors\r\n const serverErrors = modelToViewModelForBulkErrors(\r\n removeReferencedEntityInvalidIdErrors(res.errors),\r\n bulkUpsertCampaignSettingsEntityErrorMap,\r\n 'sponsored-shopping/campaign-settings',\r\n i18n,\r\n activity\r\n );\r\n onStepSavedLog({ status: LOG_STATUS.SAVE_FAIL, msg: res });\r\n // eslint-disable-next-line prefer-promise-reject-errors\r\n return reject({ error: _.flatten(serverErrors.filter(val => val !== null)) });\r\n });\r\n });\r\n };\r\n\r\n return {\r\n load,\r\n save,\r\n };\r\n};\r\n","import _ from 'underscore';\r\nimport React, { useMemo, useCallback, useContext } from 'react';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { Constants } from '@bingads-webui-theme-2018/theme-fluent';\r\nimport { ResponsiveStepList } from '@bingads-webui-react/step-progress-indicator';\r\nimport { useResponsiveSize } from '@bingads-webui-react/with-responsive-size';\r\nimport {\r\n useWizardService,\r\n getCurrentStepId,\r\n getCurrentFlow,\r\n WIZARD_EVENTS,\r\n} from '@bingads-webui-react/wizard';\r\n\r\nimport { getStepListConfig } from './step-config';\r\n\r\nexport const StepList = () => {\r\n const { state, send } = useWizardService();\r\n const i18n = useContext(I18nContext);\r\n\r\n const currentStepId = getCurrentStepId(state);\r\n const currentFlow = getCurrentFlow(state);\r\n const displayMode = useResponsiveSize(Constants.ResponsiveSizeBreakpoints);\r\n\r\n const stepListConfig = useMemo(() => getStepListConfig({\r\n i18n,\r\n }), [i18n]);\r\n\r\n const getDefaultOnItemClickFn = useCallback((step) => {\r\n let toStep;\r\n if (currentFlow.includes(step.id)) {\r\n toStep = step;\r\n } else if (!_.isEmpty(step.steps)) {\r\n const firstSubStep = _.find(step.steps, s => currentFlow.includes(s.id));\r\n if (firstSubStep) {\r\n toStep = firstSubStep;\r\n }\r\n }\r\n if (toStep && toStep.isBehind) {\r\n return () => {\r\n send(WIZARD_EVENTS.NAVIGATE_TO, {\r\n stepId: toStep.id,\r\n });\r\n };\r\n }\r\n return undefined;\r\n }, [currentFlow, send]);\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\n","import React from 'react';\r\nimport { Activity } from '@bingads-webui-react/hoc-with-signal';\r\nimport { AdgroupStep, useTargetRepository } from './adgoup-settings';\r\nimport { BudgetBidStep, useBudgetBitRepository } from './budget-and-bid';\r\nimport { CampaignSettingsStep, useCampaignRepository } from './campaign-settings';\r\nimport { SummaryStep, useSummaryRepository } from './summary';\r\nimport { STEP_PATHS } from '../constants';\r\n\r\nexport const getStepConfig = () => [{\r\n id: STEP_PATHS.CAMPAIGN_SETTINGS,\r\n view: props => ,\r\n repository: useCampaignRepository,\r\n}, {\r\n id: STEP_PATHS.TARGET_SETTINGS,\r\n view: props => ,\r\n repository: useTargetRepository,\r\n}, {\r\n id: STEP_PATHS.BUDGET_AND_BIDS,\r\n view: props => ,\r\n repository: useBudgetBitRepository,\r\n},\r\n{\r\n id: STEP_PATHS.SUMMARY,\r\n view: props => ,\r\n repository: useSummaryRepository,\r\n}];\r\n\r\n// for now. AWF and SWF share the same step list. if they are different, we can return different step list based on the flow\r\nexport const getStepListConfig = ({ i18n }) => [{\r\n id: STEP_PATHS.CAMPAIGN_SETTINGS,\r\n title: i18n.getString(_TL_('Shopping Settings')),\r\n},\r\n{\r\n id: STEP_PATHS.TARGET_SETTINGS,\r\n title: i18n.getString(_TL_('Ad group & targeting')),\r\n},\r\n{\r\n id: STEP_PATHS.BUDGET_AND_BIDS,\r\n title: i18n.getString(_TL_('Budget & bids')),\r\n},\r\n{\r\n id: STEP_PATHS.SUMMARY,\r\n title: i18n.getString(_TL_('Summary')),\r\n}];\r\n\r\nexport const getFlow = () => [\r\n STEP_PATHS.CAMPAIGN_SETTINGS,\r\n STEP_PATHS.TARGET_SETTINGS,\r\n STEP_PATHS.BUDGET_AND_BIDS,\r\n STEP_PATHS.SUMMARY,\r\n];\r\n\r\nexport const getFirstStep = () => STEP_PATHS.CAMPAIGN_SETTINGS;\r\n","import React, { useContext, useCallback, useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { Stack, PrimaryButton, DefaultButton } from '@fluentui/react';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport {\r\n useWizardService,\r\n getIsFirstStep,\r\n getIsLastStep,\r\n getCurrentStepId,\r\n matchStepState,\r\n STEP_STATES,\r\n WIZARD_EVENTS,\r\n} from '@bingads-webui-react/wizard';\r\nimport { CancelButton } from '@bingads-webui-react/wizard-ui-library';\r\nimport { ActivityContext } from '@bingads-webui-react/hoc-with-signal';\r\nimport { STEP_PATHS } from './constants';\r\n\r\nconst SaveAndPublishButton = () => {\r\n const i18n = useContext(I18nContext);\r\n\r\n const activity = useContext(ActivityContext);\r\n\r\n const { state, send } = useWizardService();\r\n const isBlocking = matchStepState(state, STEP_STATES.FETCHING) || matchStepState(state, STEP_STATES.LOADING) || matchStepState(state, STEP_STATES.SAVING);\r\n\r\n const onNextClicked = useCallback(() => {\r\n if (activity) {\r\n activity.signal('onSaveAndPublishClicked');\r\n }\r\n send(WIZARD_EVENTS.UPDATE_WIZARD_DATA, { isPublishing: true });\r\n send(WIZARD_EVENTS.SAVE_AND_EXIT);\r\n }, [activity, send]);\r\n\r\n const buttonText = useMemo(() => {\r\n const currentStep = getCurrentStepId(state);\r\n\r\n if (currentStep === STEP_PATHS.SUMMARY) {\r\n return i18n.getString(_TL_('Go live'));\r\n }\r\n\r\n return i18n.getString(_TL_('Save & go live'));\r\n }, [i18n, state]);\r\n\r\n return (\r\n \r\n {buttonText}\r\n \r\n );\r\n};\r\n\r\nexport const SaveAndExitButton = () => {\r\n const i18n = useContext(I18nContext);\r\n\r\n const activity = useContext(ActivityContext);\r\n\r\n const { state, send } = useWizardService();\r\n const isBlocking = matchStepState(state, STEP_STATES.FETCHING) || matchStepState(state, STEP_STATES.LOADING) || matchStepState(state, STEP_STATES.SAVING);\r\n\r\n const onNextClicked = useCallback(() => {\r\n if (activity) {\r\n activity.signal('onSaveAndExitButtonClicked');\r\n }\r\n send(WIZARD_EVENTS.UPDATE_WIZARD_DATA, { isAdGroupSaving: true });\r\n send(WIZARD_EVENTS.SAVE_AND_EXIT);\r\n }, [activity, send]);\r\n\r\n return (\r\n \r\n {i18n.getString(_TL_('Save and exit'))}\r\n \r\n );\r\n};\r\n\r\nexport const NextButton = () => {\r\n const i18n = useContext(I18nContext);\r\n\r\n const { state, send } = useWizardService();\r\n const isBlocking = matchStepState(state, STEP_STATES.FETCHING) || matchStepState(state, STEP_STATES.LOADING) || matchStepState(state, STEP_STATES.SAVING);\r\n\r\n const onNextClicked = useCallback(() => {\r\n send(WIZARD_EVENTS.SAVE_AND_NEXT);\r\n }, [send]);\r\n\r\n return (\r\n \r\n {i18n.getString(_TL_('Next'))}\r\n \r\n );\r\n};\r\n\r\nexport const BackButton = () => {\r\n const i18n = useContext(I18nContext);\r\n\r\n const { state, send } = useWizardService();\r\n const isBlocking = matchStepState(state, STEP_STATES.FETCHING) || matchStepState(state, STEP_STATES.LOADING) || matchStepState(state, STEP_STATES.SAVING);\r\n\r\n const onBackClicked = useCallback(() => {\r\n send(WIZARD_EVENTS.BACK);\r\n }, [send]);\r\n\r\n return (\r\n \r\n {i18n.getString(_TL_('Back'))}\r\n \r\n );\r\n};\r\n\r\nexport const StepFooter = ({\r\n nextButtonText,\r\n nextDisabled,\r\n backButtonText,\r\n cancelButtonText,\r\n}) => {\r\n const { state } = useWizardService();\r\n const isFirstStep = getIsFirstStep(state);\r\n const isLastStep = getIsLastStep(state);\r\n\r\n const currentStep = getCurrentStepId(state);\r\n\r\n return (\r\n \r\n {!isFirstStep && }\r\n {(!isLastStep ? : )}\r\n {currentStep === STEP_PATHS.TARGET_SETTINGS && }\r\n {isFirstStep && }\r\n \r\n );\r\n};\r\n\r\nStepFooter.propTypes = {\r\n nextDisabled: PropTypes.bool,\r\n backButtonText: PropTypes.string,\r\n nextButtonText: PropTypes.string,\r\n cancelButtonText: PropTypes.string,\r\n};\r\nStepFooter.defaultProps = {\r\n nextDisabled: false,\r\n backButtonText: undefined,\r\n nextButtonText: undefined,\r\n cancelButtonText: undefined,\r\n};\r\n","import React, { useContext, useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { Wizard, LayoutContainer, Layout, StepContainer } from '@bingads-webui-react/wizard';\r\nimport { BusyBlocker, CancelWizardDialog, DefaultTemplate } from '@bingads-webui-react/wizard-ui-library';\r\nimport { WizardPerfMarker } from '@bingads-webui-campaign/wizard-performance-marker';\r\nimport { withSiteMap, getRoutePathById } from '@bingads-webui-campaign-react/with-site-map';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { StepList } from './steps/step-lists';\r\nimport { getStepConfig, getFirstStep } from './steps/step-config';\r\nimport { StepFooter } from './footer';\r\n\r\nfunction SponsoredCampaignCreationWizardInternal(props) {\r\n const {\r\n perfMarker, bundleCountries, bundleLocationCriterions, productData, scope, siteMap,\r\n } = props;\r\n const wizardPerfMarker = useMemo(() => (\r\n perfMarker.createChild('SponsoredCampaignCreationWizard')\r\n ), [perfMarker]);\r\n const initialStep = getFirstStep();\r\n const routeToNavigateToWhenDone = getRoutePathById(siteMap, 'campaigns');\r\n const i18n = useContext(I18nContext);\r\n\r\n const config = useMemo(() => ({\r\n id: 'sponsored-campaign-wizard',\r\n initialStep,\r\n steps: getStepConfig(),\r\n initialWizardData: {\r\n bundleCountries,\r\n bundleLocationCriterions,\r\n productData,\r\n scope,\r\n perfMarker: wizardPerfMarker,\r\n },\r\n actions: {\r\n onDone: () => scope.save(routeToNavigateToWhenDone),\r\n onExited: () => scope.save(routeToNavigateToWhenDone),\r\n },\r\n }), [bundleCountries, bundleLocationCriterions, initialStep, productData, routeToNavigateToWhenDone, scope, wizardPerfMarker]);\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n }\r\n nextButtonText={i18n.getString(_TL_('Save & go to next step'))}\r\n />\r\n \r\n \r\n \r\n \r\n \r\n );\r\n}\r\n\r\nSponsoredCampaignCreationWizardInternal.propTypes = {\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }).isRequired,\r\n isMran: PropTypes.bool,\r\n isCreation: PropTypes.bool,\r\n scope: PropTypes.shape({\r\n values: PropTypes.shape({\r\n cid: PropTypes.number.isRequired,\r\n aid: PropTypes.number.isRequired,\r\n uid: PropTypes.number.isRequired,\r\n campaignId: PropTypes.number,\r\n }).isRequired,\r\n save: PropTypes.func.isRequired,\r\n history: PropTypes.shape({}).isRequired,\r\n }).isRequired,\r\n siteMap: PropTypes.shape([]).isRequired,\r\n perfMarker: PropTypes.shape({\r\n createChild: PropTypes.func,\r\n }).isRequired,\r\n setIsLoading: PropTypes.func.isRequired,\r\n productData: PropTypes.shape({\r\n CampaignCriterionsData: PropTypes.shape({\r\n Id: PropTypes.number,\r\n }),\r\n }).isRequired,\r\n bundleCountries: PropTypes.shape([]).isRequired,\r\n bundleLocationCriterions: PropTypes.shape([]).isRequired,\r\n campaign: PropTypes.shape({\r\n Id: PropTypes.number,\r\n }).isRequired,\r\n setCampaign: PropTypes.func.isRequired,\r\n};\r\n\r\nSponsoredCampaignCreationWizardInternal.defaultProps = {\r\n isCreation: true,\r\n isMran: false,\r\n};\r\n\r\nexport const SponsoredCampaignCreationWizard = withSiteMap(SponsoredCampaignCreationWizardInternal);\r\n","/* eslint-disable react/prop-types */\r\n/* eslint-disable no-param-reassign */\r\nimport React, { useCallback, useMemo, useState, useContext, useEffect } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport _ from 'underscore';\r\nimport Promise from 'bluebird';\r\n\r\nimport { UiBlocker } from '@bingads-webui-react/ui-blocker';\r\nimport { withScope } from '@bingads-webui-react/scope-service';\r\nimport { withCreationHeader } from '@bingads-webui-campaign-react/campaign-adgroup-creation';\r\nimport { overrideLegacyStoreWithNewMmcApiStoreData } from '@bingads-webui-campaign/sponsored-campaign-shared';\r\nimport { isMSStoreProviderId } from '@bingads-webui-campaign-react/ms-store-ads-common';\r\nimport { getRoutePathById } from '@bingads-webui-campaign-react/with-site-map';\r\nimport { Activity, Scenario, ActivityContext } from '@bingads-webui-react/hoc-with-signal';\r\nimport { ServerContext } from '@bingads-webui-campaign-react/server-context';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\n\r\nimport { loadBundleCountries } from './model/location-criterions';\r\nimport { NoStoreView } from './no-store';\r\nimport { modelToViewModelForCampaign } from './model/campaign';\r\nimport { getDefaultCampaignValues } from './model/default-values';\r\nimport {\r\n getMmcStoreData,\r\n getProductData,\r\n getProductScopeFromOData,\r\n readCampaign,\r\n readLocationCriterions,\r\n readDayTimeCriterions,\r\n readDeviceCriterions,\r\n} from './model/crud';\r\nimport { getStyles } from './styles';\r\nimport { SponsoredCampaignCreationLegacy } from './page';\r\nimport { SponsoredCampaignCreationWizard } from './wizard';\r\n\r\n\r\n// TODO\r\nconst logScope = 'SimplifiedSponsoredCampaignPage';\r\n\r\nconst UnstyledSponsoredCampaignCreation = (props) => {\r\n const {\r\n i18n, isMran, isCreation, scope, siteMap, perfMarker: parentPerfMarker,\r\n } = props;\r\n const activity = useContext(ActivityContext);\r\n\r\n const classes = useDefaultStyles(getStyles);\r\n const [productData, setProductData] = useState();\r\n const [hasStore, setHasStore] = useState(true);\r\n const [isLoading, setIsLoading] = useState(false);\r\n const [isInitialized, setIsInitialized] = useState(false);\r\n const [campaign, setCampaign] = useState(getDefaultCampaignValues(isMran));\r\n const [{ bundleCountries, bundleLocationCriterions }, setBundleCountriesAndLocationCriterions] = useState({ bundleCountries: [], bundleLocationCriterions: [] });\r\n const serverContext = useContext(ServerContext);\r\n const { MranSimplificationV2, OdataGetProductScope, FeedLabel, FeedLabelBlockList } = serverContext.DynamicPermissions;\r\n\r\n const perfMarker = useMemo(() => {\r\n const child = parentPerfMarker.createChild(`Simplified_Sponsored_Campaign_${isCreation ? 'Creation' : 'Settings'}`);\r\n child.willInit();\r\n return child;\r\n }, [isCreation, parentPerfMarker]);\r\n\r\n const onCancel = useCallback(() => {\r\n scope.save(getRoutePathById(siteMap, 'campaigns'));\r\n }, [scope, siteMap]);\r\n\r\n const processProductData = useCallback((data) => {\r\n const stores = _.filter(data.ProductCollectionAccounts, item => !isMSStoreProviderId(item.Value));\r\n setProductData({\r\n ...data,\r\n ProductCollectionAccounts: stores,\r\n });\r\n\r\n setHasStore(!isCreation || _.findIndex(stores, item => item.IsGlobalStore || item.IsCoOpStore) >= 0);\r\n }, [isCreation]);\r\n\r\n useEffect(() => {\r\n const {\r\n values: {\r\n cid,\r\n aid,\r\n uid,\r\n campaignId,\r\n },\r\n } = scope;\r\n\r\n if (!isInitialized && cid && aid && uid) {\r\n setIsLoading(true);\r\n perfMarker.willFetchData();\r\n activity.trace(`${logScope}|DataInit|Start`);\r\n\r\n let $campaignDataFetchPromise = Promise.resolve();\r\n const $bundleCountriesPromise = loadBundleCountries({ cid, aid });\r\n\r\n if (campaignId) {\r\n const $readCampaign = readCampaign(cid, aid, campaignId);\r\n const $readLocationCriterions = readLocationCriterions(cid, aid, campaignId);\r\n const $readDayTimeCriterions = readDayTimeCriterions(cid, aid, campaignId);\r\n const $readDeviceCriterions = readDeviceCriterions(cid, aid, campaignId);\r\n\r\n $campaignDataFetchPromise = Promise.all([\r\n $readCampaign,\r\n $readLocationCriterions,\r\n $readDayTimeCriterions,\r\n $readDeviceCriterions,\r\n $bundleCountriesPromise,\r\n ]).then(([savedCampaign, locationCriterions, dayTimeCriterions, deviceCriterions, bc]) => {\r\n const campaignData = modelToViewModelForCampaign({\r\n campaignModel: savedCampaign,\r\n locationCriterionsModel: locationCriterions ? locationCriterions.value : [],\r\n dayTimeCriterionsModel: dayTimeCriterions ? dayTimeCriterions.value : [],\r\n deviceCriterionsModel: deviceCriterions ? deviceCriterions.value : [],\r\n bundleCountries: bc,\r\n });\r\n\r\n setCampaign(prev => ({ ...prev, ...campaignData }));\r\n setBundleCountriesAndLocationCriterions(bc);\r\n\r\n return campaignData;\r\n });\r\n } else {\r\n $campaignDataFetchPromise = Promise.all([\r\n $bundleCountriesPromise,\r\n ]).then(([bc]) => {\r\n setBundleCountriesAndLocationCriterions(bc);\r\n\r\n return {};\r\n });\r\n }\r\n\r\n const getProductDataCall = OdataGetProductScope ?\r\n params => getProductScopeFromOData(_.pick(params, ['campaignId', 'salesCountry', 'getCategoryFullData']), serverContext) :\r\n params => getProductData(params);\r\n\r\n // Align with UI server logic, otherwise it will fail to save because the salesCountry is not consistent with category.\r\n const defaultCountryCode = FeedLabel && !FeedLabelBlockList ? serverContext.CurrentAccount.CountryCode : 'US';\r\n\r\n $campaignDataFetchPromise\r\n .then((campaignData = {}) =>\r\n Promise.all([\r\n getProductDataCall({\r\n aid,\r\n cid,\r\n uid,\r\n campaignId,\r\n salesCountry: campaignId ? campaignData.SalesCountry : defaultCountryCode,\r\n getCategoryFullData: MranSimplificationV2 && isCreation,\r\n }),\r\n getMmcStoreData({ isWindowsStoreAd: true }),\r\n ])\r\n .then(overrideLegacyStoreWithNewMmcApiStoreData)\r\n .then(processProductData))\r\n .then(() => {\r\n perfMarker.willRender();\r\n setIsLoading(false);\r\n setIsInitialized(true);\r\n activity.trace(`${logScope}|DataInit|Succeed`);\r\n })\r\n .catch((err) => {\r\n activity.error(`${logScope}|DataInit|Failed|Error:${JSON.stringify(err)}`);\r\n })\r\n .finally(() => {\r\n perfMarker.done();\r\n });\r\n }\r\n }, [isInitialized, perfMarker, processProductData, scope, activity, MranSimplificationV2, isCreation, FeedLabel, FeedLabelBlockList, OdataGetProductScope, serverContext]);\r\n\r\n useEffect(() => {\r\n activity.trace(`${logScope}|Loaded|${isMran ? 'MRAN' : 'SPB'}|${isCreation ? 'Creation' : 'Settings'}`);\r\n\r\n return () => activity.trace(`${logScope}|Unmount`);\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, []);\r\n\r\n const contentProps = {\r\n ...props,\r\n perfMarker,\r\n setIsLoading,\r\n productData,\r\n bundleCountries,\r\n bundleLocationCriterions,\r\n campaign,\r\n setCampaign,\r\n };\r\n const content = (MranSimplificationV2 && isCreation) ? : ;\r\n\r\n return (\r\n
\r\n \r\n {\r\n isInitialized && (\r\n hasStore ? content : \r\n )\r\n }\r\n \r\n
\r\n );\r\n};\r\n\r\nUnstyledSponsoredCampaignCreation.propTypes = {\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }).isRequired,\r\n isMran: PropTypes.bool,\r\n isCreation: PropTypes.bool,\r\n scope: PropTypes.shape({\r\n values: PropTypes.shape({\r\n cid: PropTypes.number.isRequired,\r\n aid: PropTypes.number.isRequired,\r\n uid: PropTypes.number.isRequired,\r\n campaignId: PropTypes.number,\r\n }).isRequired,\r\n save: PropTypes.func.isRequired,\r\n history: PropTypes.shape({}).isRequired,\r\n }).isRequired,\r\n siteMap: PropTypes.shape([]).isRequired,\r\n perfMarker: PropTypes.shape({}).isRequired,\r\n};\r\n\r\nUnstyledSponsoredCampaignCreation.defaultProps = {\r\n isCreation: true,\r\n isMran: false,\r\n};\r\n\r\nconst UnstyledSponsoredCampaignCreationWithLogContext = ({ isCreation, ...restProps }) => (\r\n \r\n \r\n \r\n \r\n \r\n);\r\n\r\nexport const SponsoredCampaignCreationPage = (props) => {\r\n const serverContext = useContext(ServerContext);\r\n const { MranSimplificationV2 } = serverContext.DynamicPermissions;\r\n const composeMethods = MranSimplificationV2 ? [withScope] : [withCreationHeader, withScope];\r\n const Component = _.compose(...composeMethods)(UnstyledSponsoredCampaignCreationWithLogContext);\r\n return ();\r\n};\r\n\r\nexport const SponsoredCampaignSettingsPage = (props) => {\r\n const Component = _.compose(withScope)(UnstyledSponsoredCampaignCreationWithLogContext);\r\n return ();\r\n};\r\n","import { getBundleCountriesAndBundleLocationCriterions } from '@bingads-webui-campaign/hotel-common-targets';\r\n\r\nexport const loadBundleCountries = ({\r\n cid,\r\n aid,\r\n}) => {\r\n const lcid = '1033';\r\n\r\n // Pass lcid only so we use US as default country, passing US will include CA\r\n return getBundleCountriesAndBundleLocationCriterions(cid, aid, lcid);\r\n};\r\n","import { AdTypes } from '@bingads-webui-campaign-react/campaign-onboarding-v2';\r\n\r\nexport const STEP_PATHS = {\r\n CAMPAIGN_SETTINGS: 'CAMPAIGN_SETTINGS',\r\n BUDGET_AND_BIDS: 'BUDGET_AND_BIDS',\r\n TARGET_SETTINGS: 'TARGET_SETTINGS',\r\n AD_GROUP_SETTINGS: 'AD_GROUP_SETTINGS',\r\n SUMMARY: 'SUMMARY',\r\n};\r\n\r\nexport const FLOWS = {\r\n SHOPPING_AUDIENCE: 'SHOPPING_AUDIENCE',\r\n SHOPPING_SEARCH: 'SHOPPING_SEARCH',\r\n};\r\n\r\nexport const AD_TYPES_TO_FLOWS = {\r\n [AdTypes.ShoppingAudience]: FLOWS.SHOPPING_AUDIENCE,\r\n [AdTypes.AudienceAndSearch]: FLOWS.SHOPPING_SEARCH,\r\n};\r\n\r\nexport const PLACEHOLDER_ID = {\r\n CampaignNegativeReferenceId: -11,\r\n};\r\n\r\nexport const CREATE_SCENARIO = {\r\n CREATE_CAMPAIGN: 'create_campaign',\r\n UPDATE_CAMPAIGN: 'update_campaign',\r\n UPDATE_ADGROUP: 'update_adGroup',\r\n};\r\n","import _ from 'underscore';\r\nimport { isAudienceShoppingCampaign } from '@bingads-webui-campaign-react/constants';\r\nimport { AdTypes } from '@bingads-webui-campaign-react/campaign-onboarding-v2';\r\nimport biddingStrategyTypes from '@bingads-webui-campaign-legacy/bidding-strategy/bidding-strategy-type';\r\n\r\nimport { FLOWS } from '../constants';\r\n\r\nexport const isSearchShoppingCampaign = flow => flow === FLOWS.SHOPPING_SEARCH;\r\n\r\nexport const isAutoBidding = (bidStrategyType) => {\r\n const autoBidding = [biddingStrategyTypes.maximizeConversions, biddingStrategyTypes.maximizeClicks, biddingStrategyTypes.maxConversionValue, biddingStrategyTypes.targetRoas, biddingStrategyTypes.costPerSale];\r\n const result = _.contains(autoBidding, bidStrategyType);\r\n\r\n return result;\r\n};\r\n\r\nexport const getBudgetBidSections = () => {\r\n const options = {\r\n basicOptions: [\r\n 'bid-and-budget',\r\n 'bid-value',\r\n ],\r\n advancedOptions: [\r\n 'bid-adjustment',\r\n ],\r\n };\r\n\r\n return options;\r\n};\r\n\r\nexport const allSettledPromiseWrapper = (promises) => {\r\n const wrappedPromises = promises.map(p => Promise.resolve(p)\r\n .then(\r\n val => ({ status: 'fulfilled', value: val }),\r\n err => ({ status: 'rejected', reason: err })\r\n ));\r\n return Promise.all(wrappedPromises);\r\n};\r\n\r\nexport const getCampaignType = (isSearch, campaignSettings) => (isSearch ? {\r\n CampaignType: 'Shopping',\r\n CampaignSubType: undefined,\r\n} : {\r\n CampaignType: 'Audience',\r\n CampaignSubType: campaignSettings ? campaignSettings.CampaignSubType : 'AudienceFeedBased',\r\n});\r\n\r\nexport const getProductTileDetails = (product) => {\r\n if (!product) {\r\n return '';\r\n }\r\n let result = '';\r\n const operateMap = {\r\n equal: '=',\r\n notequal: '≠',\r\n };\r\n const conditionValueCount = Object.keys(product).filter(key => key.startsWith('ProductCondition') || key.startsWith('ProductValue')).length;\r\n // eslint-disable-next-line no-plusplus\r\n for (let i = 1; i <= conditionValueCount / 2; i++) {\r\n const condition = product[`ProductCondition${i}`];\r\n const value = product[`ProductValue${i}`];\r\n const operatorString = product[`ProductOperator${i}`];\r\n const operator = operatorString ? (operateMap[operatorString] || operatorString) : '=';\r\n\r\n if (condition && value) {\r\n result += `${condition}${operator}${value} & `;\r\n }\r\n }\r\n\r\n return result.slice(0, -2); // remove the last &\r\n};\r\n\r\nexport const getAdTypeFromCurrentCampaign = (currentCampaign) => {\r\n if (currentCampaign && isAudienceShoppingCampaign(currentCampaign.CampaignType, currentCampaign.CampaignSubType)) {\r\n return AdTypes.ShoppingAudience;\r\n }\r\n\r\n return AdTypes.AudienceAndSearch;\r\n};\r\n\r\nexport const getNoValidStore = (productData, feedData) => (\r\n (_.isEmpty(productData) || _.isEmpty(productData.ProductCollectionAccounts) ||\r\n _.findIndex(productData.ProductCollectionAccounts, item => !item.IsGlobalStore && !item.IsCoOpStore) < 0) &&\r\n (_.isEmpty(feedData) || feedData.length <= 0)\r\n);\r\n\r\n","import { useState, useEffect, useContext } from 'react';\r\nimport _ from 'underscore';\r\nimport _preferencesService from '@bingads-webui-component-legacy/preference/service/index';\r\nimport { useWizardService } from '@bingads-webui-react/wizard';\r\nimport { ServerContext } from '@bingads-webui-campaign-react/server-context';\r\nimport biddingStrategyTypes from '@bingads-webui-campaign-legacy/bidding-strategy/bidding-strategy-type';\r\n\r\nimport { isSearchShoppingCampaign } from '../step-utils';\r\n\r\nconst buildSchemaData = ({\r\n data, timeDisplayType, isAudienceShoppingCampaign, serverContext,\r\n}) => {\r\n // For AWF, some targets have to be created at ad group level\r\n const targetParentEntity = isAudienceShoppingCampaign ? data.adGroup : data.campaign;\r\n const locations = _.map(\r\n _.filter(\r\n _.get(targetParentEntity, ['locationTargets', 'currentLevelSettings', 'currentLocations'], []),\r\n loc => loc.SelectionStatus === 'Included'\r\n ),\r\n loc => loc.location\r\n );\r\n const autoBidding = [biddingStrategyTypes.maximizeConversions, biddingStrategyTypes.maximizeClicks, biddingStrategyTypes.maxConversionValue, biddingStrategyTypes.targetRoas, biddingStrategyTypes.costPerSale];\r\n\r\n return ({\r\n campaignName: {\r\n data: data.campaign.Name,\r\n },\r\n conversionGoals: {\r\n conversionGoals: data.campaign.conversionGoals,\r\n },\r\n store: {\r\n storeName: data.campaign.StoreName,\r\n },\r\n feeds: {\r\n feedLabel: data.campaign.FeedLabel,\r\n isRendered: !_.isEmpty(data.campaign.FeedLabel),\r\n },\r\n localInventory: {\r\n isLocalInventoryEnabled: data.campaign.LocalInventoryAdsEnabled,\r\n isRendered: !isAudienceShoppingCampaign,\r\n },\r\n productCollections: {\r\n isProductCollectionsEnabled: data.campaign.ShoppableAdsEnabled,\r\n isRendered: !isAudienceShoppingCampaign,\r\n },\r\n products: {\r\n productFilters: data.campaign.ProductFilters,\r\n useSelectedItem: true,\r\n },\r\n adGroupName: {\r\n data: data.adGroup.Name,\r\n },\r\n locationTargeting: {\r\n locations,\r\n targetOption: _.get(targetParentEntity, ['locationTargets', 'currentLevelSettings', 'targetOption'], null),\r\n },\r\n genderTargeting: {\r\n genders: targetParentEntity.genderTypes,\r\n isRendered: isAudienceShoppingCampaign,\r\n },\r\n ageRangeTargeting: {\r\n ageRanges: targetParentEntity.ageRanges,\r\n isRendered: isAudienceShoppingCampaign,\r\n },\r\n // PT is hidden until backend algo is ready\r\n // predictiveTargeting: {\r\n // isPredictiveTargetingEnabled: data.adGroup.UseOptimizedTargeting,\r\n // isRendered: isAudienceShoppingCampaign,\r\n // },\r\n advancedTargetingSeparator: {},\r\n startEndDates: {\r\n startDate: data.adGroup.StartDate,\r\n endDate: data.adGroup.EndDate,\r\n },\r\n adSchedule: {\r\n adSchedules: data.campaign.adSchedules && data.campaign.adSchedules.dayTimeRanges,\r\n useSearcherTimeZone: data.campaign.AdScheduleUseSearcherTimeZone,\r\n timeDisplayType,\r\n includeStartEnd: false,\r\n isRendered: !_.isEmpty(data.campaign.adSchedules),\r\n },\r\n adDistribution: {\r\n adDistribution: data.adGroup.AdDistribution,\r\n isRendered: !isAudienceShoppingCampaign,\r\n },\r\n budget: {\r\n data: data.campaign.Budget,\r\n currencyCode: serverContext.CurrentAccount.CurrencyCode,\r\n },\r\n bidStrategy: {\r\n data: data.campaign.BiddingScheme,\r\n },\r\n bidValue: {\r\n data: data.adGroup.SearchBid,\r\n currencyCode: serverContext.CurrentAccount.CurrencyCode,\r\n isRendered: data.campaign.BiddingScheme && !_.contains(autoBidding, data.campaign.BiddingScheme.Type),\r\n },\r\n });\r\n};\r\n\r\nexport const useSummarySchemaData = ({ data }) => {\r\n const { state } = useWizardService();\r\n const { flow } = state.context.wizardData;\r\n const isAudienceShoppingCampaign = !isSearchShoppingCampaign(flow);\r\n\r\n const [timeDisplayType, setTimeDisplayType] = useState('12-hour');\r\n\r\n const serverContext = useContext(ServerContext);\r\n\r\n useEffect(() => {\r\n const preferencesService = _preferencesService.default || _preferencesService;\r\n preferencesService.initialize().then(() => {\r\n const isTwelveHourDisplay = preferencesService.findByName('WebApp.CampaignUI.isTwelveHourDisplay') || {};\r\n setTimeDisplayType(_.isUndefined(isTwelveHourDisplay.Data) || isTwelveHourDisplay.Data ? '12-hour' : '24-hour');\r\n });\r\n }, []);\r\n\r\n return (data && buildSchemaData({\r\n data, timeDisplayType, isAudienceShoppingCampaign, serverContext,\r\n })) || {};\r\n};\r\n\r\n","import React, { useMemo, useCallback } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { Stack } from '@bingads-webui-react/fabric-control';\r\nimport { GeneratedUI } from '@bingads-webui-campaign-react/ui-generator';\r\nimport { summaryPageComponentTypes } from '@bingads-webui-campaign-react/summary-page';\r\nimport { WIZARD_EVENTS, useWizardService } from '@bingads-webui-react/wizard';\r\nimport { StepHeader } from '@bingads-webui-campaign-react/display-plus-campaigns';\r\nimport { buildSchema } from './schema';\r\nimport { useSummarySchemaData } from './use-summary-schema-data';\r\nimport { STEP_PATHS } from '../../constants';\r\n\r\nexport const SummaryStep = ({\r\n data,\r\n}) => {\r\n const schemaData = useSummarySchemaData({ data });\r\n\r\n const { send } = useWizardService();\r\n\r\n const onShoppingHeaderActionClick = useCallback(() => send(WIZARD_EVENTS.NAVIGATE_TO, {\r\n stepId: STEP_PATHS.CAMPAIGN_SETTINGS,\r\n }), [send]);\r\n\r\n const onTargetingHeaderActionClick = useCallback(() => send(WIZARD_EVENTS.NAVIGATE_TO, {\r\n stepId: STEP_PATHS.TARGET_SETTINGS,\r\n }), [send]);\r\n\r\n const onBudgetBidHeaderActionClick = useCallback(() => send(WIZARD_EVENTS.NAVIGATE_TO, {\r\n stepId: STEP_PATHS.BUDGET_AND_BIDS,\r\n }), [send]);\r\n\r\n const options = useMemo(() => ({\r\n onShoppingHeaderActionClick,\r\n onTargetingHeaderActionClick,\r\n onBudgetBidHeaderActionClick,\r\n }), [onShoppingHeaderActionClick, onTargetingHeaderActionClick, onBudgetBidHeaderActionClick]);\r\n\r\n const schema = useMemo(() => buildSchema(options), [options]);\r\n\r\n return (\r\n
\r\n \r\n \r\n \r\n \r\n {data ?\r\n
\r\n \r\n
\r\n : null\r\n }\r\n
\r\n
\r\n );\r\n};\r\n\r\nSummaryStep.propTypes = {\r\n data: PropTypes.shape({}),\r\n};\r\n\r\nSummaryStep.defaultProps = {\r\n data: null,\r\n};\r\n","import { buildDefaultDataProperty } from '@bingads-webui-campaign-react/ui-generator';\r\n\r\nexport const buildSchema = options => ({\r\n separatorStyles: {\r\n marginBottom: 20,\r\n },\r\n shopping: {\r\n type: 'panel',\r\n header: {\r\n title: _TL_('Shopping settings'),\r\n actionButton: {\r\n label: _TL_('Edit'),\r\n iconName: 'Edit',\r\n ariaLabel: _TL_('Edit'),\r\n onClick: options.onShoppingHeaderActionClick,\r\n },\r\n },\r\n components: {\r\n campaignName: buildDefaultDataProperty({\r\n // TODO: why not use type?\r\n label: _TL_('Campaign name'),\r\n dynamicProps: props => props.campaignName,\r\n }),\r\n conversionGoals: {\r\n type: 'conversion-goals',\r\n dynamicProps: props => props.conversionGoals,\r\n },\r\n hd1: {\r\n type: 'horizontal-divider',\r\n },\r\n store: {\r\n type: 'store',\r\n dynamicProps: props => props.store,\r\n },\r\n feeds: {\r\n type: 'feeds',\r\n dynamicProps: props => props.feeds,\r\n },\r\n localInventory: {\r\n type: 'local-inventory',\r\n dynamicProps: props => props.localInventory,\r\n },\r\n productCollections: {\r\n type: 'product-collections',\r\n dynamicProps: props => props.productCollections,\r\n },\r\n hd2: {\r\n type: 'horizontal-divider',\r\n },\r\n products: {\r\n type: 'products',\r\n dynamicProps: props => props.products,\r\n },\r\n },\r\n },\r\n targeting: {\r\n type: 'panel',\r\n header: {\r\n title: _TL_('Targeting'),\r\n actionButton: {\r\n label: _TL_('Edit'),\r\n iconName: 'Edit',\r\n ariaLabel: _TL_('Edit'),\r\n onClick: options.onTargetingHeaderActionClick,\r\n },\r\n },\r\n components: {\r\n separatorStyles: {\r\n marginBottom: 8,\r\n },\r\n adGroupName: buildDefaultDataProperty({\r\n label: _TL_('Ad group name'),\r\n dynamicProps: props => props.adGroupName,\r\n }),\r\n hd1: {\r\n type: 'horizontal-divider',\r\n },\r\n locationTargeting: {\r\n type: 'location-targeting',\r\n dynamicProps: props => props.locationTargeting,\r\n },\r\n genderTargeting: {\r\n type: 'gender-targeting',\r\n dynamicProps: props => props.genderTargeting,\r\n },\r\n ageRangeTargeting: {\r\n type: 'age-range-targeting',\r\n dynamicProps: props => props.ageRangeTargeting,\r\n },\r\n // PT is hidden until backend algo is ready\r\n // predictiveTargeting: {\r\n // type: 'predictive-targeting',\r\n // dynamicProps: props => props.predictiveTargeting,\r\n // },\r\n hd2: {\r\n type: 'horizontal-divider',\r\n },\r\n startEndDates: {\r\n type: 'start-end-dates',\r\n dynamicProps: props => props.startEndDates,\r\n },\r\n adSchedule: {\r\n type: 'ad-schedule',\r\n dynamicProps: props => props.adSchedule,\r\n },\r\n adDistribution: {\r\n type: 'ad-distribution',\r\n dynamicProps: props => props.adDistribution,\r\n },\r\n },\r\n },\r\n budgetBid: {\r\n type: 'panel',\r\n header: {\r\n title: _TL_('Budget & bids'),\r\n actionButton: {\r\n label: _TL_('Edit'),\r\n iconName: 'Edit',\r\n ariaLabel: _TL_('Edit'),\r\n onClick: options.onBudgetBidHeaderActionClick,\r\n },\r\n },\r\n components: {\r\n separatorStyles: {\r\n marginBottom: 8,\r\n },\r\n budget: {\r\n type: 'budget',\r\n dynamicProps: props => props.budget,\r\n },\r\n bidStrategy: {\r\n type: 'bid-strategy',\r\n dynamicProps: props => props.bidStrategy,\r\n },\r\n bidValue: {\r\n type: 'bid-value',\r\n dynamicProps: props => props.bidValue,\r\n },\r\n },\r\n },\r\n});\r\n","// Directly reuse display-plus-campaigns/src/shared/model/campaign-criterion.js\r\n// TODO: remove later. Just a temp placeholder\r\nimport { omit, isEmpty } from 'underscore';\r\nimport { readCampaignCriterions } from '@bingads-webui-campaign-react/display-plus-campaigns';\r\nimport { CRITERION_LEVEL, getTargetCriterion as getTargetCriterionForAdGroup, modelToViewModelForTargetCriterions as modelToViewModelForTargetCriterionsBase } from '@bingads-webui-campaign-react/xandr-campaign';\r\nimport { edmCampaign } from '@bingads-webui/edm-campaign';\r\nimport { convertLocationStateToLocationSchemaCampaign } from '@bingads-webui-campaign/hotel-common-targets';\r\n\r\nimport { PLACEHOLDER_ID } from '../constants';\r\n\r\nexport {\r\n readDayTimeCriterions,\r\n viewModelToBulkModelForAdSchedules,\r\n} from '@bingads-webui-campaign-react/display-plus-campaigns';\r\nexport const RemovedDeviceBidAdjustment = -100;\r\n\r\nexport const readLocationCriterions = ({\r\n cid,\r\n aid,\r\n campaignId,\r\n}) =>\r\n readCampaignCriterions({\r\n cid,\r\n aid,\r\n campaignId,\r\n type: \"isof(Criterion,'Model.LocationCriterion') or isof(Criterion,'Model.RadiusCriterion') or isof(Criterion,'Model.LocationIntentCriterion')\",\r\n });\r\n\r\nexport const readAgeAndGenderTargetingCriterions = ({\r\n cid,\r\n aid,\r\n campaignId,\r\n}) =>\r\n readCampaignCriterions({\r\n cid,\r\n aid,\r\n campaignId,\r\n type: \"isof(Criterion,'Model.AgeCriterion') or isof(Criterion,'Model.GenderCriterion')\",\r\n });\r\n\r\nexport const readTargetingCriterions = ({\r\n cid,\r\n aid,\r\n campaignId,\r\n}) =>\r\n readCampaignCriterions({\r\n cid,\r\n aid,\r\n campaignId,\r\n type: \"isof(Criterion,'Model.AgeCriterion') or isof(Criterion,'Model.GenderCriterion') or isof(Criterion,'Model.DeviceCriterion') or isof(Criterion,'Model.GenreCriterion') or isof(Criterion, 'Model.IndustryCriterion') or isof(Criterion, 'Model.JobFunctionCriterion') or isof(Criterion, 'Model.CompanyNameCriterion') or isof(Criterion, 'Model.ContextualTarget')\",\r\n });\r\n\r\nexport const readAudienceCriterions = ({\r\n cid,\r\n aid,\r\n campaignId,\r\n}) =>\r\n edmCampaign\r\n .Customers.$withKey(cid)\r\n .Accounts.$withKey(aid)\r\n .Campaigns.$withKey(campaignId)\r\n .AudienceAssociations\r\n .get({ top: 2000 })\r\n .toPromise();\r\n\r\n\r\nexport const modelToViewModelForCampaignLevelAudienceCriterions = ({ model }) => {\r\n const initialAudiences = model.map(audience => ({\r\n CriterionType: audience.CriterionType,\r\n Id: audience.Id,\r\n Status: audience.Status,\r\n Criterion: {\r\n AudienceId: audience.AudienceCriterion.AudienceId,\r\n AudienceName: audience.AudienceCriterion.AudienceName,\r\n AudienceType: audience.AudienceCriterion.AudienceType,\r\n BidMultiplier: audience.AudienceCriterion.BidMultiplier,\r\n Type: audience.AudienceCriterion.Type,\r\n },\r\n Campaign: audience.Campaign,\r\n BidType: audience.BidType,\r\n }));\r\n\r\n return {\r\n initialAudiences,\r\n audiences: initialAudiences,\r\n };\r\n};\r\n\r\nexport const getTargetCriterion = ({\r\n targets,\r\n type,\r\n propKey,\r\n adGroupViewModel,\r\n campaignViewModel,\r\n bidAdjustment,\r\n overrideType = undefined,\r\n}) => (adGroupViewModel ? getTargetCriterionForAdGroup({\r\n targets,\r\n type,\r\n propKey,\r\n adGroupViewModel,\r\n campaignViewModel,\r\n bidAdjustment,\r\n overrideType,\r\n}) : getTargetCriterionForCampaign({\r\n targets,\r\n type,\r\n propKey,\r\n campaignViewModel,\r\n bidAdjustment,\r\n overrideType,\r\n}));\r\n\r\nexport const viewModelToBulkModelForAudiences = ({ campaignViewModel }) => {\r\n if (campaignViewModel.data.audienceRestricted) {\r\n return [];\r\n }\r\n const audiences = campaignViewModel.data.audiences || [];\r\n const initialAudiences = campaignViewModel.data.initialAudiences || [];\r\n\r\n const added = audiences.filter(audience => !initialAudiences.find(initialAudience => initialAudience.Criterion.AudienceId === audience.Criterion.AudienceId && initialAudience.Criterion.BidMultiplier === audience.Criterion.BidMultiplier));\r\n const removed = initialAudiences.filter(initialAudience => !audiences.find(audience => audience.Criterion.AudienceId === initialAudience.Criterion.AudienceId && initialAudience.Criterion.BidMultiplier === audience.Criterion.BidMultiplier)).map(audience => ({\r\n ...audience,\r\n Status: 'Deleted',\r\n }));\r\n\r\n return [...added, ...removed].map((audience) => {\r\n const Status = isEmpty(audience.Status) ? 'Active' : audience.Status;\r\n\r\n const typePrefix = audience.Status === 'Excluded' ? 'Negative' : '';\r\n const criterionType = `${typePrefix}${audience.Criterion.AudienceType}`;\r\n\r\n if (campaignViewModel.data.Id) {\r\n return {\r\n ...audience,\r\n Status,\r\n CriterionType: criterionType,\r\n Campaign: {\r\n Id: campaignViewModel.data.Id,\r\n },\r\n };\r\n }\r\n\r\n return {\r\n ...audience,\r\n Status,\r\n CriterionType: criterionType,\r\n CampaignName: campaignViewModel.data.Name,\r\n Campaign: {\r\n Id: PLACEHOLDER_ID.CampaignNegativeReferenceId,\r\n },\r\n };\r\n });\r\n};\r\n\r\n// Supports both campaign level and ad group level\r\n// For campaign level, pass in campaignViewModel only\r\n// Expects both wrapped in { data: ...}\r\nexport const viewModelToBulkModelForTargeting = ({\r\n campaignViewModel,\r\n adGroupViewModel,\r\n}) => {\r\n const parentEntity = adGroupViewModel || campaignViewModel;\r\n\r\n // device\r\n const deviceTargets = [];\r\n\r\n const { devices } = parentEntity.data;\r\n if (Array.isArray(devices) && devices.length > 0) {\r\n devices.forEach(({\r\n Id, device, bidAdjustment, isBidAdjustmentNegative,\r\n }) => {\r\n deviceTargets.push(...getTargetCriterion({\r\n targets: [{ criterion: device, Id }],\r\n type: 'Device',\r\n propKey: 'DeviceName',\r\n campaignViewModel,\r\n adGroupViewModel,\r\n bidAdjustment: bidAdjustment * (isBidAdjustmentNegative ? -1 : 1),\r\n }));\r\n });\r\n }\r\n\r\n // age\r\n const ageTargets = parentEntity.data.ageRanges || [];\r\n const initialAgeTargets = parentEntity.data.initialAgeRanges || [];\r\n const addedAges = ageTargets.filter(target => initialAgeTargets.find(initialTarget => initialTarget.criterion === target) === undefined);\r\n const removedAges = initialAgeTargets.filter(initialTarget => ageTargets.find(target => initialTarget.criterion === target) === undefined).map(target => ({ ...target, status: 'Deleted' }));\r\n const addedAgeCriterion = getTargetCriterion({\r\n targets: addedAges.map(criterion => ({ criterion })), type: 'Age', propKey: 'Target', campaignViewModel, adGroupViewModel,\r\n });\r\n const removedAgeCriterion = getTargetCriterion({\r\n targets: removedAges, type: 'Age', propKey: 'Target', campaignViewModel, adGroupViewModel,\r\n });\r\n\r\n const negativeAgeRanges = parentEntity.data.negativeAgeRanges || [];\r\n const removedNegativeAges = negativeAgeRanges.filter(negativeAge => addedAges.find(addedTarget => addedTarget === negativeAge.criterion)).map(target => ({ ...target, status: 'Deleted' }));\r\n const removedNegativeAgeCriterion = getTargetCriterion({\r\n targets: removedNegativeAges, type: 'NegativeAge', propKey: 'Target', campaignViewModel, adGroupViewModel,\r\n });\r\n\r\n // gender\r\n const genderTypes = parentEntity.data.genderTypes || [];\r\n const initialGenderTypes = parentEntity.data.initialGenderTypes || [];\r\n const addedGenders = genderTypes.filter(target => initialGenderTypes.find(initialTarget => initialTarget.criterion === target) === undefined);\r\n const removedGenders = initialGenderTypes.filter(initialTarget => genderTypes.find(target => initialTarget.criterion === target) === undefined).map(target => ({ ...target, status: 'Deleted' }));\r\n const addedGenderCriterion = getTargetCriterion({\r\n targets: addedGenders.map(criterion => ({ criterion })), type: 'Gender', propKey: 'Target', campaignViewModel, adGroupViewModel,\r\n });\r\n const removedGenderCriterion = getTargetCriterion({\r\n targets: removedGenders, type: 'Gender', propKey: 'Target', campaignViewModel, adGroupViewModel,\r\n });\r\n\r\n const negativeGenderTypes = parentEntity.data.negativeGenderTypes || [];\r\n const removedNegativeGenders = negativeGenderTypes.filter(negativeGender => addedGenders.find(addedTarget => addedTarget === negativeGender.criterion)).map(target => ({ ...target, status: 'Deleted' }));\r\n const removedNegativeGenderCriterion = getTargetCriterion({\r\n targets: removedNegativeGenders, type: 'NegativeGender', propKey: 'Target', campaignViewModel, adGroupViewModel,\r\n });\r\n\r\n // industry\r\n let industryTargets = [];\r\n let negativeIndustryTargets = [];\r\n let initialIndustryTargets = [];\r\n let initialNegativeIndustryTargets = [];\r\n let addedIndustryTargets = [];\r\n let removedIndustryTargets = [];\r\n let addedIndustryCriterion = [];\r\n let removedIndustryCriterion = [];\r\n let negativeAddedIndustryTargets = [];\r\n let negativeRemovedIndustryTargets = [];\r\n let negativeAddedIndustryCriterion = [];\r\n let negativeRemovedIndustryCriterion = [];\r\n\r\n industryTargets = parentEntity.data.industry || [];\r\n initialIndustryTargets = parentEntity.data.initialIndustryTargets || [];\r\n\r\n negativeIndustryTargets = parentEntity.data.negativeIndustry || [];\r\n initialNegativeIndustryTargets = parentEntity.data.initialNegativeIndustryTargets || [];\r\n\r\n addedIndustryTargets = industryTargets.filter(target => initialIndustryTargets.find(initialTarget => initialTarget.criterion === target) === undefined);\r\n removedIndustryTargets = initialIndustryTargets.filter(initialTarget => industryTargets.find(target => initialTarget.criterion === target) === undefined).map(target => ({ ...target, status: 'Deleted' }));\r\n addedIndustryCriterion = getTargetCriterion({\r\n targets: addedIndustryTargets.map(criterion => ({ criterion })), type: 'Industry', propKey: 'Target', campaignViewModel, adGroupViewModel,\r\n });\r\n\r\n removedIndustryCriterion = getTargetCriterion({\r\n targets: removedIndustryTargets, type: 'Industry', propKey: 'Target', campaignViewModel, adGroupViewModel,\r\n });\r\n\r\n negativeAddedIndustryTargets = negativeIndustryTargets.filter(target => initialNegativeIndustryTargets.find(initialTarget => initialTarget.criterion === target) === undefined);\r\n negativeRemovedIndustryTargets = initialNegativeIndustryTargets.filter(initialTarget => negativeIndustryTargets.find(target => initialTarget.criterion === target) === undefined).map(target => ({ ...target, status: 'Deleted' }));\r\n negativeAddedIndustryCriterion = getTargetCriterion({\r\n targets: negativeAddedIndustryTargets.map(criterion => ({ criterion })), type: 'NegativeIndustry', propKey: 'Target', campaignViewModel, adGroupViewModel, overrideType: 'Industry',\r\n });\r\n\r\n negativeRemovedIndustryCriterion = getTargetCriterion({\r\n targets: negativeRemovedIndustryTargets, type: 'NegativeIndustry', propKey: 'Target', campaignViewModel, adGroupViewModel, overrideType: 'Industry',\r\n });\r\n\r\n // job target\r\n let jobTargets = [];\r\n let negativeJobTargets = [];\r\n let initialJobTargets = [];\r\n let initialNegativeJobTargets = [];\r\n let addedJobTargets = [];\r\n let removedJobTargets = [];\r\n let addedJobCriterion = [];\r\n let removedJobCriterion = [];\r\n let negativeAddedJobTargets = [];\r\n let negativeRemovedJobTargets = [];\r\n let negativeAddedJobCriterion = [];\r\n let negativeRemovedJobCriterion = [];\r\n\r\n jobTargets = parentEntity.data.jobTargets || [];\r\n initialJobTargets = parentEntity.data.initialJobTargets || [];\r\n\r\n negativeJobTargets = parentEntity.data.negativeJobTargets || [];\r\n initialNegativeJobTargets = parentEntity.data.initialNegativeJobTargets || [];\r\n\r\n addedJobTargets = jobTargets.filter(target => initialJobTargets.find(initialTarget => initialTarget.criterion === target) === undefined);\r\n removedJobTargets = initialJobTargets.filter(initialTarget => jobTargets.find(target => initialTarget.criterion === target) === undefined).map(target => ({ ...target, status: 'Deleted' }));\r\n addedJobCriterion = getTargetCriterion({\r\n targets: addedJobTargets.map(criterion => ({ criterion })), type: 'JobFunction', propKey: 'Target', campaignViewModel, adGroupViewModel,\r\n });\r\n\r\n removedJobCriterion = getTargetCriterion({\r\n targets: removedJobTargets, type: 'JobFunction', propKey: 'Target', campaignViewModel, adGroupViewModel,\r\n });\r\n\r\n negativeAddedJobTargets = negativeJobTargets.filter(target => initialNegativeJobTargets.find(initialTarget => initialTarget.criterion === target) === undefined);\r\n negativeRemovedJobTargets = initialNegativeJobTargets.filter(initialTarget => negativeJobTargets.find(target => initialTarget.criterion === target) === undefined).map(target => ({ ...target, status: 'Deleted' }));\r\n negativeAddedJobCriterion = getTargetCriterion({\r\n targets: negativeAddedJobTargets.map(criterion => ({ criterion })), type: 'NegativeJobFunction', propKey: 'Target', campaignViewModel, adGroupViewModel, overrideType: 'JobFunction',\r\n });\r\n\r\n negativeRemovedJobCriterion = getTargetCriterion({\r\n targets: negativeRemovedJobTargets, type: 'NegativeJobFunction', propKey: 'Target', campaignViewModel, adGroupViewModel, overrideType: 'JobFunction',\r\n });\r\n\r\n // companyName targets\r\n let companyNameTargets = [];\r\n let negativeCompanyNameTargets = [];\r\n let initialCompanyNameTargets = [];\r\n let initialNegativeCompanyNameTargets = [];\r\n let addedCompanyNameTargets = [];\r\n let removedCompanyNameTargets = [];\r\n let addedCompanyNameCriterion = [];\r\n let removedCompanyNameCriterion = [];\r\n let negativeAddedCompanyNameTargets = [];\r\n let negativeRemovedCompanyNameTargets = [];\r\n let negativeAddedCompanyNameCriterion = [];\r\n let negativeRemovedCompanyNameCriterion = [];\r\n\r\n companyNameTargets = parentEntity.data.companyNameTargets || [];\r\n initialCompanyNameTargets = parentEntity.data.initialCompanyNameTargets || [];\r\n\r\n\r\n negativeCompanyNameTargets = parentEntity.data.negativeCompanyNameTargets || [];\r\n initialNegativeCompanyNameTargets = parentEntity.data.initialNegativeCompanyNameTargets || [];\r\n\r\n addedCompanyNameTargets = companyNameTargets.filter(target => initialCompanyNameTargets.find(initialTarget => initialTarget.Target === target.Target) === undefined);\r\n removedCompanyNameTargets = initialCompanyNameTargets.filter(initialTarget => companyNameTargets.find(target => initialTarget.Target === target.Target) === undefined).map(target => ({ ...target, criterion: target.Target, status: 'Deleted' }));\r\n\r\n addedCompanyNameCriterion = getTargetCriterion({\r\n targets: addedCompanyNameTargets.map(criterion => ({ criterion })), type: 'CompanyName', propKey: 'Target', campaignViewModel, adGroupViewModel,\r\n });\r\n\r\n removedCompanyNameCriterion = getTargetCriterion({\r\n targets: removedCompanyNameTargets, type: 'CompanyName', propKey: 'Target', campaignViewModel, adGroupViewModel,\r\n });\r\n\r\n negativeAddedCompanyNameTargets = negativeCompanyNameTargets.filter(target => initialNegativeCompanyNameTargets.find(initialTarget => initialTarget.Target === target.Target) === undefined);\r\n negativeRemovedCompanyNameTargets = initialNegativeCompanyNameTargets.filter(initialTarget => negativeCompanyNameTargets.find(target => initialTarget.Target === target.Target) === undefined).map(target => ({ ...target, criterion: target.Target, status: 'Deleted' }));\r\n\r\n negativeAddedCompanyNameCriterion = getTargetCriterion({\r\n targets: negativeAddedCompanyNameTargets.map(criterion => ({ criterion })), type: 'NegativeCompanyName', propKey: 'Target', campaignViewModel, adGroupViewModel, overrideType: 'CompanyName',\r\n });\r\n\r\n negativeRemovedCompanyNameCriterion = getTargetCriterion({\r\n targets: negativeRemovedCompanyNameTargets, type: 'NegativeCompanyName', propKey: 'Target', campaignViewModel, adGroupViewModel, overrideType: 'CompanyName',\r\n });\r\n\r\n\r\n return [\r\n ...deviceTargets,\r\n ...removedNegativeAgeCriterion,\r\n ...addedAgeCriterion,\r\n ...removedAgeCriterion,\r\n ...removedNegativeGenderCriterion,\r\n ...addedGenderCriterion,\r\n ...removedGenderCriterion,\r\n ...addedIndustryCriterion,\r\n ...removedIndustryCriterion,\r\n ...negativeAddedIndustryCriterion,\r\n ...negativeRemovedIndustryCriterion,\r\n ...addedJobCriterion,\r\n ...removedJobCriterion,\r\n ...negativeAddedJobCriterion,\r\n ...negativeRemovedJobCriterion,\r\n ...addedCompanyNameCriterion,\r\n ...removedCompanyNameCriterion,\r\n ...negativeAddedCompanyNameCriterion,\r\n ...negativeRemovedCompanyNameCriterion,\r\n ];\r\n};\r\n\r\n// Supports both campaign level and ad group level\r\n// For campaign level, pass in campaignViewModel only\r\n// Expects both wrapped in { data: ...}\r\nexport function getDeviceCriterionsFull(campaignViewModel, adGroupViewModel) {\r\n const parentEntity = adGroupViewModel || campaignViewModel;\r\n\r\n const deviceTargets = parentEntity.data.deviceTypes || [];\r\n const initialDeviceTargets = parentEntity.data.initialDeviceTypes || [];\r\n\r\n const addedBackDevices = initialDeviceTargets.filter(initialTarget => deviceTargets.find(target => initialTarget.criterion === target) && initialTarget.bidAdjustment === RemovedDeviceBidAdjustment)\r\n .map((device => ({ criterion: device.criterion, Id: device.Id })));\r\n const newlyAddedDevices = deviceTargets.filter(target => initialDeviceTargets.find(initialTarget => initialTarget.criterion === target) === undefined)\r\n .filter((device => addedBackDevices.find(addedBackDevice => addedBackDevice.criterion === device) === undefined));\r\n const removedDevices = initialDeviceTargets.filter(initialTarget => deviceTargets.find(target => initialTarget.criterion === target) === undefined);\r\n const addedDevices = [...addedBackDevices, ...newlyAddedDevices.map(criterion => ({ criterion }))];\r\n\r\n return { addedDevices, removedDevices };\r\n}\r\n\r\nconst getTargetCriterionForCampaign = ({\r\n targets,\r\n type,\r\n propKey,\r\n campaignViewModel,\r\n bidAdjustment,\r\n overrideType = undefined,\r\n}) => targets.map((target) => {\r\n const criterion = {\r\n Type: overrideType || type,\r\n BidAdjustment: bidAdjustment,\r\n [`${overrideType || type}Criterion`]: {\r\n [propKey]: typeof (target.criterion) === 'object' ? target.criterion.Target : target.criterion,\r\n },\r\n };\r\n if (campaignViewModel.data.Id) {\r\n return {\r\n Id: target.Id,\r\n Status: target.status ? target.status : 'Active',\r\n Criterion: criterion,\r\n CriterionType: type,\r\n Campaign: {\r\n Id: campaignViewModel.data.Id,\r\n },\r\n };\r\n }\r\n return {\r\n Criterion: criterion,\r\n CriterionType: type,\r\n CampaignName: campaignViewModel.data.Name,\r\n Campaign: {\r\n Id: PLACEHOLDER_ID.CampaignNegativeReferenceId,\r\n },\r\n };\r\n});\r\n\r\nexport const viewModelToBulkModelForLocationTargets = ({ bundleLocationCriterions, campaignViewModel }) => {\r\n if (!campaignViewModel.data.locationTargets || campaignViewModel.data.locationRestricted) {\r\n return [];\r\n }\r\n\r\n const bulkUpsertModel = convertLocationStateToLocationSchemaCampaign(\r\n campaignViewModel.data.locationTargets,\r\n bundleLocationCriterions,\r\n {\r\n bidStrategy: { option: 'placeholder' },\r\n ...campaignViewModel.data,\r\n }\r\n );\r\n\r\n return bulkUpsertModel;\r\n};\r\n\r\nexport const modelToViewModelForTargetCriterions = ({ model }) => {\r\n const viewModel = modelToViewModelForTargetCriterionsBase({ model, level: CRITERION_LEVEL.CAMPAIGN });\r\n\r\n const deviceTypesOverride = viewModel.initialDeviceTypes && viewModel.initialDeviceTypes.map(target => ({\r\n Id: target.Id,\r\n device: target.criterion,\r\n isBidAdjustmentNegative: target.bidAdjustment < 0,\r\n bidAdjustment: Math.abs(target.bidAdjustment),\r\n }));\r\n\r\n return {\r\n ...omit(viewModel, 'initialDeviceTypes', 'deviceTypes'),\r\n devices: deviceTypesOverride,\r\n };\r\n};\r\n","/* eslint-disable no-param-reassign */\r\nimport { pick, isString, extend, isEmpty, find, get, map, clone, filter, pluck } from 'underscore';\r\nimport { edmCampaign } from '@bingads-webui/edm-campaign';\r\nimport { CampaignSubTypes } from '@bingads-webui-campaign-react/constants';\r\nimport { findTargetNodeAndAncestorsNodes } from '@bingads-webui-campaign-react/filter-options-group';\r\n\r\nimport {\r\n modelToViewModelForConversionGoals,\r\n bulkModelToViewModelForConversionGoals,\r\n modelToViewModelForLocationTargets,\r\n bulkModelToViewModelForLocationTargets,\r\n} from '@bingads-webui-campaign-react/perf-max-step-wizard';\r\nimport {\r\n modelToViewModelForDayTimeTargets,\r\n CRITERION_LEVEL,\r\n} from '@bingads-webui-campaign-react/xandr-campaign';\r\nimport { modelToViewModelForCampaignLevelAudienceCriterions, modelToViewModelForTargetCriterions } from './campaign-criterions';\r\n\r\n// TODO: Need to add shopping-related properties such as CPS\r\nconst whitelistedSchemaPropertyKeysForModel = [\r\n 'Budget', 'Id', 'Name', 'Status', 'TimeZone', 'BidStrategyName', 'BudgetId',\r\n 'DeliveryStatus', 'DeliveryStatusDetails', 'CampaignType', 'CampaignSubType',\r\n 'IsBidLandscapeAvailable', 'AdScheduleUseSearcherTimeZone',\r\n 'BiddingScheme',\r\n 'CampaignSettings', 'DisplayBiddingStrategyType',\r\n 'DisplayBiddingStrategyMaxCpc', 'DisplayBiddingStrategyTargetCpa', 'Languages',\r\n 'BaseCampaignName',\r\n 'VerifiedTrackingData',\r\n 'CampaignProductScope', 'LocalInventoryAdsEnabled', 'ShoppableAdsEnabled',\r\n 'Priority', 'ProviderId', 'FeedLabel', 'SalesCountry',\r\n 'TrackingUrlTemplate', 'UrlCustomParameters', 'FinalUrlSuffix', 'FeedId',\r\n 'PersonalizedOffersEnabled', 'CashbackPercent', 'CashbackScope',\r\n];\r\n\r\nconst operatorOptions = {\r\n equal: '=',\r\n notequal: '≠',\r\n};\r\n\r\nexport const viewModelToModelForConversionGoals = campaignViewModel => ({\r\n CampaignConversionGoal: campaignViewModel.data.conversionGoals && campaignViewModel.data.conversionGoals.originalConversionGoals ? campaignViewModel.data.conversionGoals.originalConversionGoals : [],\r\n});\r\n\r\nexport const viewModelToModelForCampaign = campaignViewModel => ({\r\n ...pick(campaignViewModel.data, whitelistedSchemaPropertyKeysForModel),\r\n});\r\n\r\nexport const bulkModelToViewModelForCampaign = ({\r\n campaignModel,\r\n originalCampaignModel,\r\n bundleCountries,\r\n}) => {\r\n let data = {\r\n ...pick(campaignModel, [...whitelistedSchemaPropertyKeysForModel, 'ImportProperties']),\r\n };\r\n\r\n if (data.Id && isString(data.Id)) {\r\n // eslint-disable-next-line no-param-reassign\r\n data.Id = parseInt(data.Id, 10);\r\n }\r\n\r\n data = extend(data, bulkModelToViewModelForConversionGoals({\r\n campaignModel,\r\n originalCampaignViewModel: originalCampaignModel,\r\n }));\r\n\r\n data = extend(data, bulkModelToViewModelForLocationTargets({\r\n locationTargetsModel: campaignModel.CampaignCriterions,\r\n bundleCountries,\r\n }));\r\n\r\n const campaignViewModel = {\r\n data,\r\n isValid: true,\r\n isDirty: false,\r\n };\r\n\r\n return campaignViewModel;\r\n};\r\n\r\nconst readCampaign = (cid, aid, campaignId) =>\r\n edmCampaign\r\n .Customers.$withKey(cid)\r\n .Accounts.$withKey(aid)\r\n .Campaigns.$withKey(campaignId)\r\n .get({\r\n select: ['Budget', 'CampaignConversionGoal/Goals'],\r\n })\r\n .toPromise();\r\n\r\nexport const loadCampaign = (cid, aid, campaignId) =>\r\n readCampaign(cid, aid, campaignId);\r\n\r\nconst getStoreNameById = (providerId, feedId, productData, feedData) => {\r\n let storeName = '';\r\n if (feedId > 0 && feedData && feedData.length > 0) {\r\n const selectedFeed = find(feedData, item => item.Id === feedId.toString());\r\n storeName = selectedFeed ? selectedFeed.Name : '';\r\n } else if (providerId > 0 && productData && productData.ProductCollectionAccounts && productData.ProductCollectionAccounts.length > 0) {\r\n const selectedProduct = find(productData.ProductCollectionAccounts, item => item.Value === providerId.toString());\r\n storeName = selectedProduct ? selectedProduct.Text : '';\r\n }\r\n\r\n return storeName;\r\n};\r\n\r\n// This will set multi values onto seperate lines.\r\nconst multilineValueInputProcessor = (valueInput, isEnhancedPAFilterP1Enabled) => {\r\n // Value input will be val1;;val2;;val3;;etc.\r\n const valuesArr = valueInput.split(';;');\r\n\r\n if (!isEnhancedPAFilterP1Enabled || valuesArr.length === 1) {\r\n return valueInput;\r\n }\r\n let output = valuesArr[0];\r\n\r\n for (let i = 1; i < valuesArr.length; i++) {\r\n output = `${output}, ${valuesArr[i]}`;\r\n }\r\n return output;\r\n};\r\n\r\n// Reference: component-react/packages/filter-options-group/src/filter-options-group/index.js\r\nconst composeProductFilter = (productFilter) => {\r\n const {\r\n PresetOperator = 'equal', PresetValue, Text, ValueOptions,\r\n } = productFilter;\r\n const operator = operatorOptions[PresetOperator] || '=';\r\n\r\n if (ValueOptions === null) {\r\n return `${Text} ${operator} ${PresetValue}`;\r\n }\r\n\r\n const selectedItems = filter(ValueOptions, valueOption => valueOption.Selected);\r\n const selectedTexts = pluck(selectedItems, 'Text').join(', ');\r\n\r\n return `${Text} ${operator} ${selectedTexts}`;\r\n};\r\n\r\nconst defaultSelectedDataSourceHelper = (dataSource, customerSelectedProductConditions, permissions, isDynamicDataFeedBasedCampaign) => {\r\n const customerSelectedProductConditionsCopy = map(customerSelectedProductConditions, clone);\r\n const defaultSelectedDataSource = [];\r\n\r\n // for each operand we get that has data.\r\n customerSelectedProductConditionsCopy.forEach((customerSelectedProductCondition) => {\r\n let selectedProductConditionItem;\r\n\r\n // First get the operand data that has a value.\r\n for (let i = 0; i < dataSource.length; i++) {\r\n const ds = dataSource[i];\r\n\r\n // We need to map the operands if this is migrated from legacy, as they may not match the values.\r\n if (!isDynamicDataFeedBasedCampaign && ds && ds.Value === customerSelectedProductCondition.Operand) {\r\n customerSelectedProductCondition.Operand = ds.Text;\r\n }\r\n const { target } = findTargetNodeAndAncestorsNodes(ds, customerSelectedProductCondition.Operand);\r\n\r\n if (target) {\r\n selectedProductConditionItem = target;\r\n break;\r\n }\r\n }\r\n\r\n // if we have found an operand with a value:\r\n if (selectedProductConditionItem) {\r\n const clonedItem = clone(selectedProductConditionItem);\r\n\r\n clonedItem.PresetOperator = customerSelectedProductCondition.Operator;\r\n // eslint-disable-next-line no-negated-condition\r\n if (!clonedItem.ValueOptions) {\r\n clonedItem.PresetValue = multilineValueInputProcessor(customerSelectedProductCondition.Attribute, permissions.IsEnhancedPAFilterP1Enabled);\r\n } else {\r\n const valueOptions = clonedItem.ValueOptions;\r\n\r\n const findHelper = (valueOption, valueB) => {\r\n if (valueOption.Value.toUpperCase() === valueB.toUpperCase()) {\r\n return true;\r\n } else if (valueOption.Text.toUpperCase() === valueB.toUpperCase()) {\r\n return true;\r\n }\r\n return false;\r\n };\r\n // New feature, We can now select multiple values.\r\n const selectedValueArray = customerSelectedProductCondition.Attribute.split(';;');\r\n // Keep this for single-select just in case.\r\n const selectedValueOption = find(valueOptions, valueOption => findHelper(valueOption, selectedValueArray[0]));\r\n const selectedValueOptions = [];\r\n\r\n selectedValueArray.forEach((e) => {\r\n selectedValueOptions.push(find(valueOptions, valueOption => findHelper(valueOption, e)));\r\n });\r\n\r\n // If this is migrated from legacy, we will need to uncapitalize the valueoptions from all-caps.\r\n if (!isDynamicDataFeedBasedCampaign) {\r\n valueOptions.forEach((valueOption) => {\r\n valueOption.Value = valueOption.Text;\r\n });\r\n }\r\n\r\n // if this is a valueoption that is selected.\r\n if (selectedValueOption) {\r\n selectedValueOption.Selected = true;\r\n // eslint-disable-next-line no-return-assign\r\n selectedValueOptions.forEach(e => e.Selected = true);\r\n } /* else if (this.activityLogger) {\r\n // this should never happen\r\n this.activityLogger.error(`can not find user selected value option item which is ${JSON.stringify(customerSelectedProductCondition)}`);\r\n } */\r\n }\r\n\r\n defaultSelectedDataSource.push(clonedItem);\r\n } /* else if (this.activityLogger) {\r\n // this should never happen\r\n this.activityLogger.error(`can not find user selected production condition item which is ${JSON.stringify(customerSelectedProductCondition)}`);\r\n } */\r\n });\r\n\r\n return defaultSelectedDataSource;\r\n};\r\n\r\nconst getProdutFilters = (providerId, feedId, productData, feedData, permissions, isDynamicDataFeedBasedCampaign) => {\r\n const customerSelections = get(productData, ['CampaignCriterionsData', 'Criterion', 'ProductConditions'], []);\r\n const dynamicDataFeedConditionOptions = get(productData, ['DynamicDataFeedConditionOptions'], {});\r\n const productFilters = [];\r\n\r\n if (!isEmpty(customerSelections)) {\r\n let selectedConditionOptions = productData.ProductConditionOptions;\r\n\r\n if (isDynamicDataFeedBasedCampaign) {\r\n const selectedFeedId = feedId || providerId;\r\n const selectedFeed = find(feedData, item => item.Id === selectedFeedId.toString());\r\n if (!selectedFeed) {\r\n console.error(`can not find Feed data, feedId is ${feedId}`);\r\n // this.activityLogger.error(`can not find Feed data, feedId is ${feedId}`);\r\n }\r\n const selectedCategory = selectedFeed.FeedType;\r\n selectedConditionOptions = dynamicDataFeedConditionOptions[selectedCategory];\r\n }\r\n\r\n const selectedItems = defaultSelectedDataSourceHelper(selectedConditionOptions, customerSelections, permissions, isDynamicDataFeedBasedCampaign);\r\n\r\n selectedItems.forEach((item) => {\r\n const productFilter = composeProductFilter(item);\r\n productFilters.push(productFilter);\r\n });\r\n }\r\n\r\n return productFilters;\r\n};\r\n\r\nexport const modelToViewModelForCampaign = ({\r\n campaignModel,\r\n dayTimeCriterionsModel = [],\r\n locationCriterionsModel,\r\n bundleCountries,\r\n targetCriterionsModel,\r\n audienceCriterionsModel = [],\r\n productData,\r\n feedData,\r\n permissions,\r\n}) => {\r\n let data = {\r\n ...pick(campaignModel, [...whitelistedSchemaPropertyKeysForModel, 'ImportProperties']),\r\n };\r\n\r\n data = extend(data, modelToViewModelForConversionGoals(campaignModel));\r\n\r\n if (dayTimeCriterionsModel) {\r\n data = extend(data, modelToViewModelForDayTimeTargets({ model: dayTimeCriterionsModel }));\r\n }\r\n\r\n if (!isEmpty(locationCriterionsModel)) {\r\n data = extend(data, modelToViewModelForLocationTargets({ model: locationCriterionsModel, bundleCountries, campaignId: campaignModel.Id }));\r\n }\r\n\r\n if (!isEmpty(targetCriterionsModel)) {\r\n data = extend(data, modelToViewModelForTargetCriterions({ model: targetCriterionsModel, level: CRITERION_LEVEL.CAMPAIGN }));\r\n }\r\n\r\n data = extend(data, modelToViewModelForCampaignLevelAudienceCriterions({ model: audienceCriterionsModel }));\r\n\r\n if (campaignModel.CampaignSettings && campaignModel.CampaignSettings[0] && campaignModel.CampaignSettings[0]['@odata.type'] === '#Model.ShoppingSettings') {\r\n data.ProviderId = campaignModel.CampaignSettings[0].ProviderId;\r\n data.FeedId = campaignModel.CampaignSettings[0].FeedId;\r\n data.SalesCountry = campaignModel.CampaignSettings[0].SalesCountry;\r\n data.FeedLabel = campaignModel.CampaignSettings[0].FeedLabel;\r\n data.LocalInventoryAdsEnabled = campaignModel.CampaignSettings[0].LocalInventoryAdsEnabled;\r\n data.ShoppableAdsEnabled = campaignModel.CampaignSettings[0].ShoppableAdsEnabled;\r\n data.Priority = campaignModel.CampaignSettings[0].Priority;\r\n data.FeedTypeId = campaignModel.CampaignSettings[0].FeedTypeId;\r\n }\r\n\r\n data.StoreName = getStoreNameById(data.ProviderId, data.FeedId, productData, feedData);\r\n data.ProductFilters = getProdutFilters(data.ProviderId, data.FeedId, productData, feedData, permissions, campaignModel.CampaignSubType === CampaignSubTypes.AudienceDynamicFeedBased);\r\n\r\n const campaignViewModel = {\r\n data,\r\n isValid: true,\r\n isDirty: false,\r\n };\r\n\r\n return campaignViewModel;\r\n};\r\n","// Directly reuse xandr-campaign/src/model/ad-group-criterions.js\r\nimport _ from 'underscore';\r\nimport { readAdGroupCriterions } from '@bingads-webui-campaign-react/xandr-campaign';\r\n\r\n// TODO: remove later. Just a temp placeholder\r\nexport {\r\n viewModelToBulkModelForTargeting,\r\n initialAdGroupCriterionsViewModel,\r\n modelToViewModelForAdGroupCriterions,\r\n modelToViewModelForLocationTargets,\r\n modelToViewModelForDayTimeTargets,\r\n modelToViewModelForTargetCriterions,\r\n modelToViewModelForAudienceCriterions,\r\n bulkModelToViewModelForDayTimeTargets,\r\n bulkModelToViewModelForLocationTargets,\r\n viewModelToBulkModelForLocationTargets,\r\n viewModelToBulkModelForAdSchedules,\r\n viewModelToBulkModelForAudiences,\r\n loadBundleCountries,\r\n readAdGroupCriterions,\r\n readLocationCriterions as readAdGroupLocationCriterions,\r\n readDayTimeCriterions,\r\n readTargetingCriterions as readAdGroupTargetingCriterions,\r\n readAudienceCriterions,\r\n} from '@bingads-webui-campaign-react/xandr-campaign';\r\n\r\n// Reuse display-plus-campaigns/src/shared/model/adgroup-criterions-with-bid-adjustment.js\r\nexport {\r\n viewModelToBulkModelForBidAdjustmentUI,\r\n} from '@bingads-webui-campaign-react/display-plus-campaigns';\r\n\r\nexport const readAdGroupAgeAndGenderCriterions = ({\r\n cid,\r\n aid,\r\n campaignId,\r\n adGroupId,\r\n}) => readAdGroupCriterions({\r\n cid,\r\n aid,\r\n campaignId,\r\n adGroupId,\r\n type: \"isof(Criterion,'Model.AgeCriterion') or isof(Criterion,'Model.GenderCriterion')\",\r\n});\r\n\r\nexport const bulkModelToViewModelForProductPartitions = ({\r\n adGroupModel,\r\n}) => adGroupModel.ProductPartitions && ({\r\n ProductPartitions: adGroupModel.ProductPartitions.map(productPartition => _.omit(productPartition, 'Client Id')),\r\n});\r\n","import { pick, extend, omit, isString, isEmpty, has } from 'underscore';\r\nimport { edmCampaign } from '@bingads-webui/edm-campaign';\r\nimport {\r\n modelToViewModelForLocationTargets,\r\n modelToViewModelForDayTimeTargets,\r\n bulkModelToViewModelForLocationTargets,\r\n bulkModelToViewModelForDayTimeTargets,\r\n modelToViewModelForTargetCriterions,\r\n modelToViewModelForAudienceCriterions,\r\n AdGroupNegativeReferenceId,\r\n} from '@bingads-webui-campaign-react/xandr-campaign';\r\nimport { bulkModelToViewModelForProductPartitions } from './ad-group-criterions';\r\n\r\n// The i18n object passed from the React context is not fully initialized with account timezone.\r\n// The parseDate and formatDate will use the browser timezone instead of account timezone, causing issues.\r\nconst globalLegacyI18n = window.globalLegacyI18n.get('@bingads-webui/i18n-amd-loader!campaignui/campaign-creation-advanced');\r\n\r\nconst whitelistedSchemaPropertyKeysForModel = [\r\n 'Id', 'Name', 'Status', 'BidStrategyName', 'Campaign', 'SearchBid', 'CampaignName',\r\n 'AdScheduleUseSearcherTimeZone', 'StartDate', 'EndDate', 'FrequencyCapSettings',\r\n 'TrackingUrlTemplate', 'UrlCustomParameters', 'FinalUrlSuffix', 'UseOptimizedTargeting',\r\n 'AdDistribution', 'Medium',\r\n];\r\n\r\nconst readonlyPropertyKeysForModel = [\r\n // StartDate is not simply readonly. It can be updated in certain situations such as the current start date being in the future\r\n // Refer to the DB sproc for details.\r\n // 'StartDate',\r\n];\r\n\r\nexport const modelToViewModelForAdGroup = ({\r\n adGroupModel,\r\n campaignModel,\r\n locationCriterionsModel,\r\n dayTimeCriterionsModel,\r\n bundleCountries,\r\n targetCriterionsModel,\r\n audienceCriterionsModel,\r\n i18n,\r\n isAudienceShoppingCampaign = false,\r\n}) => {\r\n let data = pick(adGroupModel, whitelistedSchemaPropertyKeysForModel);\r\n\r\n data.CampaignSubType = campaignModel && campaignModel.CampaignSubType;\r\n data.CampaignBidStrategyName = campaignModel && campaignModel.BiddingScheme && campaignModel.BiddingScheme.Type;\r\n data.AdRotation = adGroupModel.AdRotation && adGroupModel.AdRotation.RotationType;\r\n data.ProductPartitions = adGroupModel.ProductPartitions;\r\n\r\n if (!isAudienceShoppingCampaign) {\r\n data.AdDistribution = adGroupModel.AdDistribution;\r\n }\r\n\r\n data = extend(data, modelToViewModelForDateSetting({\r\n adGroupModel,\r\n i18n,\r\n }));\r\n\r\n if (isAudienceShoppingCampaign) {\r\n data.UseOptimizedTargeting = adGroupModel.UseOptimizedTargeting;\r\n }\r\n\r\n if (locationCriterionsModel) {\r\n data = extend(data, modelToViewModelForLocationTargets({\r\n model: locationCriterionsModel,\r\n bundleCountries,\r\n adGroupId: adGroupModel.Id,\r\n }));\r\n }\r\n\r\n if (dayTimeCriterionsModel) {\r\n data = extend(data, modelToViewModelForDayTimeTargets({\r\n model: dayTimeCriterionsModel,\r\n }));\r\n }\r\n\r\n if (targetCriterionsModel) {\r\n data = extend(data, modelToViewModelForTargetCriterions({\r\n model: targetCriterionsModel,\r\n }));\r\n }\r\n\r\n if (audienceCriterionsModel) {\r\n data = extend(data, modelToViewModelForAudienceCriterions({\r\n model: audienceCriterionsModel,\r\n }));\r\n }\r\n\r\n const adGroupViewModel = {\r\n data,\r\n isValid: true,\r\n isDirty: false,\r\n };\r\n return adGroupViewModel;\r\n};\r\n\r\nexport const convertMachineDateToAccountDate = (date) => {\r\n const dateString = globalLegacyI18n.formatDate(date, {\r\n timeZone: undefined,\r\n raw: 'yyyy-MM-dd',\r\n });\r\n\r\n return globalLegacyI18n.parseDate(dateString, {\r\n timeZone: undefined,\r\n raw: 'yyyy-MM-dd',\r\n });\r\n};\r\n\r\nconst formatDateToAPIFormat = (i18n, date) => {\r\n if (date == null) {\r\n return '';\r\n }\r\n\r\n if (typeof date === 'string') {\r\n return date;\r\n }\r\n\r\n return globalLegacyI18n.formatDate(date, {\r\n raw: 'M/d/yyyy',\r\n });\r\n};\r\n\r\nconst parseDateFromAPIFormat = (i18n, date) => {\r\n if (date == null) {\r\n return null;\r\n }\r\n\r\n if (typeof date === 'string') {\r\n const dateFromMdyyyyFormat = globalLegacyI18n.parseDate(date.substring(0, 10), { raw: 'M/d/yyyy' });\r\n const dateFromyyyyMdFormat = globalLegacyI18n.parseDate(date.substring(0, 10), { raw: 'yyyy-M-d' });\r\n return dateFromMdyyyyFormat || dateFromyyyyMdFormat;\r\n }\r\n\r\n return date;\r\n};\r\n\r\nexport const modelToViewModelForDateSetting = ({ adGroupModel, i18n }) => ({\r\n StartDate: adGroupModel.StartDate ? parseDateFromAPIFormat(i18n, adGroupModel.StartDate) : undefined,\r\n EndDate: adGroupModel.EndDate ? parseDateFromAPIFormat(i18n, adGroupModel.EndDate) : undefined,\r\n});\r\n\r\nexport const viewModelToBulkModelForDateSetting = ({ i18n, adGroupViewModel }) => ({\r\n StartDate: formatDateToAPIFormat(i18n, adGroupViewModel.data.StartDate),\r\n EndDate: adGroupViewModel.data.EndDate ? formatDateToAPIFormat(i18n, adGroupViewModel.data.EndDate) : '1/1/3000',\r\n});\r\n\r\nconst bulkModelToViewModelForDateSetting = ({ adGroupModel, originalAdGroupViewModel, i18n }) => ({\r\n StartDate: adGroupModel.StartDate ? parseDateFromAPIFormat(i18n, adGroupModel.StartDate) : originalAdGroupViewModel.data.StartDate,\r\n EndDate: adGroupModel.EndDate && adGroupModel.EndDate !== '1/1/3000' ? parseDateFromAPIFormat(i18n, adGroupModel.EndDate) : undefined,\r\n});\r\n\r\nexport const bulkModelToViewModelForAdGroup = ({\r\n adGroupModel,\r\n bundleCountries,\r\n originalAdGroupViewModel,\r\n i18n,\r\n}) => {\r\n let data = pick(adGroupModel, whitelistedSchemaPropertyKeysForModel);\r\n if (data.Id && isString(data.Id)) {\r\n // eslint-disable-next-line no-param-reassign\r\n data.Id = parseInt(data.Id, 10);\r\n }\r\n\r\n data = extend(data, bulkModelToViewModelForLocationTargets({\r\n locationTargetsModel: adGroupModel.AdGroupCriterions || [],\r\n bundleCountries,\r\n }));\r\n data = extend(data, bulkModelToViewModelForDayTimeTargets({\r\n criterions: adGroupModel.AdGroupCriterions || [],\r\n }));\r\n\r\n data = extend(data, bulkModelToViewModelForDateSetting({ adGroupModel, originalAdGroupViewModel, i18n }));\r\n\r\n if (isEmpty(data.FrequencyCapSettings)) {\r\n data = extend(data, { FrequencyCapSettings: [{}] });\r\n }\r\n\r\n if (originalAdGroupViewModel.data.deal) {\r\n data = extend(data, {\r\n deal: originalAdGroupViewModel.data.deal,\r\n });\r\n }\r\n\r\n data = extend(data, bulkModelToViewModelForProductPartitions({\r\n adGroupModel,\r\n }));\r\n\r\n const adGroupViewModel = {\r\n data,\r\n isValid: true,\r\n isDirty: false,\r\n };\r\n return adGroupViewModel;\r\n};\r\n\r\nexport const viewModelToModelForAdGroup = ({ adGroupViewModel, i18n, isAudienceShoppingCampaign }) => {\r\n let model = pick(adGroupViewModel.data, whitelistedSchemaPropertyKeysForModel);\r\n\r\n model = extend(model, viewModelToBulkModelForDateSetting({ i18n, adGroupViewModel }));\r\n\r\n if (!adGroupViewModel.data.Id || adGroupViewModel.data.Id === AdGroupNegativeReferenceId) {\r\n model.Id = AdGroupNegativeReferenceId;\r\n\r\n if (isEmpty(model.FrequencyCapSettings) ||\r\n isEmpty(model.FrequencyCapSettings[0]) ||\r\n !model.FrequencyCapSettings[0].CapValue) {\r\n model = omit(model, 'FrequencyCapSettings');\r\n }\r\n } else {\r\n model = omit(model, readonlyPropertyKeysForModel);\r\n }\r\n\r\n if (has(adGroupViewModel.data, 'PricingModel')) {\r\n model.PricingModel = adGroupViewModel.data.PricingModel;\r\n }\r\n\r\n if (isAudienceShoppingCampaign) {\r\n model = omit(model, 'AdDistribution');\r\n } else if (has(adGroupViewModel.data, 'AdDistribution')) {\r\n model.AdDistribution = adGroupViewModel.data.AdDistribution;\r\n }\r\n\r\n if (has(adGroupViewModel.data, 'AdRotation')) {\r\n model.AdRotation = adGroupViewModel.data.AdRotation;\r\n }\r\n\r\n if (has(adGroupViewModel.data, 'TargetSetting')) {\r\n model.TargetSetting = adGroupViewModel.data.TargetSetting;\r\n }\r\n\r\n if (adGroupViewModel.data.CampaignBidStrategyName === 'ManualCpc' || adGroupViewModel.data.CampaignBidStrategyName === 'EnhancedCpc') {\r\n model.SearchBid = adGroupViewModel.data.SearchBid;\r\n }\r\n\r\n return model;\r\n};\r\n\r\n\r\nconst readAdGroup = (cid, aid, campaignId, adGroupId) =>\r\n edmCampaign\r\n .Customers.$withKey(cid)\r\n .Accounts.$withKey(aid)\r\n .Campaigns.$withKey(campaignId)\r\n .AdGroups.$withKey(adGroupId)\r\n .get()\r\n .toPromise();\r\n\r\nexport const loadAdGroup = (cid, aid, campaignId, adGroupId) =>\r\n readAdGroup(cid, aid, campaignId, adGroupId);\r\n","import { pick, extend } from 'underscore';\r\nimport { AdGroup } from '@bingads-webui/campaign-odata-schemas';\r\nimport { edmCampaign } from '@bingads-webui/edm-campaign';\r\nimport { ERROR_ENTITY, isBulkWrappedResponse, getBulkUploadErrorType, modelToViewModelForBulkErrors, removeReferencedEntityInvalidIdErrors } from '@bingads-webui-campaign-react/xandr-video-campaign-shared-components';\r\nimport { getErrorsPlaceholders } from '@bingads-webui-campaign-react/xandr-campaign';\r\nimport { isAudienceShoppingCampaign } from '@bingads-webui-campaign-react/constants';\r\n\r\nimport { bulkModelToViewModelForAdGroup, viewModelToModelForAdGroup } from './ad-group';\r\nimport { PLACEHOLDER_ID } from '../constants';\r\nimport {\r\n viewModelToBulkModelForLocationTargets,\r\n viewModelToBulkModelForAdSchedules,\r\n viewModelToBulkModelForAudiences,\r\n} from './ad-group-criterions';\r\nimport {\r\n viewModelToBulkModelForTargeting\r\n} from './campaign-criterions';\r\n\r\nconst adGroupEDM = edmCampaign.types.resolve('Model.AdGroup');\r\nconst adGroupResource = new adGroupEDM.ResourceIdentifier();\r\n\r\nconst createOrUpdateAdGroup = (data) => {\r\n const createOrUpdateCall = data && data.Id ?\r\n adGroupResource.bulkUpdate.bind(adGroupResource) :\r\n adGroupResource.bulkCreate.bind(adGroupResource);\r\n return createOrUpdateCall(data);\r\n};\r\n\r\nconst GENERIC_ERROR_MESSAGE_KEY = _TL_(\"We've encountered an error and can't continue. Please contact support for further assistance.\");\r\n\r\nconst bulkUpsertAdGroupSettingsEntityErrorMap = {\r\n [getBulkUploadErrorType(AdGroup)]: ERROR_ENTITY.AdGroup,\r\n};\r\n\r\nexport const viewModelToBulkModelForAdGroup = ({\r\n campaignViewModel,\r\n adGroupViewModel,\r\n bundleLocationCriterions,\r\n customTargetingBulkModel = null,\r\n saveAdGroupCriterions = false,\r\n updateProductPartitionBids = false,\r\n isProductGroupAllowedForAudienceCampaign = false,\r\n i18n,\r\n}) => {\r\n const isUpdate = !!adGroupViewModel.data.Id;\r\n const doesCampaignExist = !!campaignViewModel.Id;\r\n const isAudienceCampaign = isAudienceShoppingCampaign(campaignViewModel.CampaignType, campaignViewModel.CampaignSubType);\r\n const isAudienceDynamicFeedBasedCampaign = isAudienceCampaign && campaignViewModel.CampaignSubType === 'AudienceDynamicFeedBased';\r\n // Product groups are always supported for SWF\r\n // For AudienceFeedBased, it requires an pilot\r\n // For AudienceDynamicFeedBased, it is not supported\r\n const isProductGroupSupported = !isAudienceCampaign || (isProductGroupAllowedForAudienceCampaign && !isAudienceDynamicFeedBasedCampaign);\r\n const adGroupModel = viewModelToModelForAdGroup({ adGroupViewModel, i18n, isAudienceShoppingCampaign: isAudienceCampaign });\r\n const modelToSave = {\r\n ...adGroupModel,\r\n Campaign: doesCampaignExist ? pick(campaignViewModel, 'Id') : {\r\n Id: PLACEHOLDER_ID.CampaignNegativeReferenceId,\r\n },\r\n };\r\n\r\n if (saveAdGroupCriterions) {\r\n const locationTargetsModel = viewModelToBulkModelForLocationTargets({\r\n bundleLocationCriterions,\r\n adGroupViewModel,\r\n campaignViewModel,\r\n });\r\n const adSchedulesModel = viewModelToBulkModelForAdSchedules({ adGroupViewModel, campaignViewModel });\r\n const targetingModel = customTargetingBulkModel ?\r\n customTargetingBulkModel({ adGroupViewModel, campaignViewModel }) :\r\n viewModelToBulkModelForTargeting({\r\n adGroupViewModel,\r\n campaignViewModel: {\r\n data: campaignViewModel,\r\n },\r\n });\r\n\r\n const audienceCriterionsModel = viewModelToBulkModelForAudiences({ adGroupViewModel, campaignViewModel });\r\n modelToSave.AdGroupCriterions = [\r\n ...locationTargetsModel,\r\n ...adSchedulesModel,\r\n ...targetingModel,\r\n ];\r\n modelToSave.AdGroupAudienceCriterions = audienceCriterionsModel;\r\n }\r\n\r\n // Create necessary child entities if this is a new ad group\r\n if (!isUpdate) {\r\n // Ads are implicitly created for AWF. Besides, they don't use Product Ads type\r\n if (!isAudienceCampaign) {\r\n extend(modelToSave, {\r\n ProductAds: {\r\n CampaignName: campaignViewModel.Name,\r\n AdGroupName: adGroupModel.Name,\r\n PromotionalText: '',\r\n },\r\n });\r\n }\r\n\r\n if (isProductGroupSupported) {\r\n extend(modelToSave, {\r\n ProductPartitions: [{\r\n BidAmount: adGroupModel.SearchBid,\r\n ProductCondition: 'All',\r\n ProductValue: '',\r\n CampaignName: campaignViewModel.Name,\r\n AdGroupName: adGroupModel.Name,\r\n IsExcluded: false,\r\n IsLeaf: 'Unit',\r\n }],\r\n });\r\n }\r\n }\r\n\r\n if (updateProductPartitionBids && isProductGroupSupported && adGroupViewModel.data.ProductPartitions) {\r\n extend(modelToSave, {\r\n ProductPartitions: adGroupViewModel.data.ProductPartitions.map(productPartition => ({\r\n ...productPartition,\r\n BidAmount: adGroupModel.SearchBid,\r\n })),\r\n });\r\n }\r\n\r\n return modelToSave;\r\n};\r\n\r\nexport const saveAdGroup = async ({\r\n adGroup: adGroupViewModel,\r\n bundleCountries,\r\n bundleLocationCriterions,\r\n campaign,\r\n customTargetingBulkModel = null,\r\n saveAdGroupCriterions = false,\r\n updateProductPartitionBids = false,\r\n isProductGroupAllowedForAudienceCampaign = false,\r\n}, {\r\n scenario, i18n, activityLogger,\r\n}) => {\r\n const adGroupBulkModel = viewModelToBulkModelForAdGroup({\r\n campaignViewModel: campaign,\r\n adGroupViewModel,\r\n bundleLocationCriterions,\r\n customTargetingBulkModel,\r\n updateProductPartitionBids,\r\n saveAdGroupCriterions,\r\n isProductGroupAllowedForAudienceCampaign,\r\n i18n,\r\n });\r\n\r\n try {\r\n const result = await createOrUpdateAdGroup(adGroupBulkModel);\r\n\r\n const data = {\r\n adGroup: bulkModelToViewModelForAdGroup({\r\n adGroupModel: result,\r\n originalAdGroupViewModel: adGroupViewModel,\r\n bundleCountries,\r\n i18n,\r\n }),\r\n ...getErrorsPlaceholders(),\r\n };\r\n return data;\r\n } catch (bulkOrSystemError) {\r\n if (isBulkWrappedResponse(bulkOrSystemError)) {\r\n const { entity, errors } = bulkOrSystemError;\r\n const adGroup = entity ?\r\n bulkModelToViewModelForAdGroup({\r\n adGroupModel: entity,\r\n originalAdGroupViewModel: adGroupViewModel,\r\n bundleCountries,\r\n errors,\r\n i18n,\r\n }) :\r\n adGroupViewModel;\r\n\r\n let filteredErrors = errors;\r\n if (adGroup.data.Id <= 0) {\r\n filteredErrors = removeReferencedEntityInvalidIdErrors(errors);\r\n }\r\n\r\n const serverErrors = modelToViewModelForBulkErrors(\r\n filteredErrors,\r\n bulkUpsertAdGroupSettingsEntityErrorMap,\r\n scenario,\r\n i18n,\r\n activityLogger\r\n );\r\n\r\n // eslint-disable-next-line prefer-promise-reject-errors\r\n return Promise.reject({\r\n adGroup,\r\n serverErrors,\r\n });\r\n }\r\n\r\n // Activity\r\n // eslint-disable-next-line no-console\r\n console.warn(`AdGroup bulk upsert system error: ${bulkOrSystemError.stack || bulkOrSystemError.message || bulkOrSystemError}`);\r\n // eslint-disable-next-line prefer-promise-reject-errors\r\n\r\n return {\r\n adGroup: adGroupViewModel,\r\n systemErrors: [i18n.getString(GENERIC_ERROR_MESSAGE_KEY)],\r\n // TODO: We would want to return the criterions with Ids, but UI's bulk drops them\r\n };\r\n }\r\n};\r\n","import { Campaign } from '@bingads-webui/campaign-odata-schemas';\r\nimport _ from 'underscore';\r\nimport { edmCampaign } from '@bingads-webui/edm-campaign';\r\nimport { viewModelToBulkModelForConversionGoals } from '@bingads-webui-campaign-react/perf-max-step-wizard';\r\nimport { ERROR_ENTITY, isBulkWrappedResponse, getBulkUploadErrorType, modelToViewModelForBulkErrors, removeReferencedEntityInvalidIdErrors } from '@bingads-webui-campaign-react/xandr-video-campaign-shared-components';\r\nimport { getErrorsPlaceholders } from '@bingads-webui-campaign-react/xandr-campaign';\r\nimport { isAudienceShoppingCampaign } from '@bingads-webui-campaign-react/constants';\r\nimport { bulkModelToViewModelForAdGroup } from './ad-group';\r\nimport { bulkModelToViewModelForCampaign, viewModelToModelForCampaign } from './campaign';\r\nimport { PLACEHOLDER_ID } from '../constants';\r\nimport { viewModelToBulkModelForAudiences, viewModelToBulkModelForTargeting, viewModelToBulkModelForLocationTargets } from './campaign-criterions';\r\nimport { viewModelToBulkModelForAdGroup } from './ad-group-bulk';\r\n\r\nconst campaignEDM = edmCampaign.types.resolve('Model.ShoppingCampaign');\r\nconst campaignResource = new campaignEDM.ResourceIdentifier();\r\n\r\nconst createOrUpdateCampaign = (data) => {\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\nconst GENERIC_ERROR_MESSAGE_KEY = _TL_(\"We've encountered an error and can't continue. Please contact support for further assistance.\");\r\n\r\nconst bulkUpsertCampaignSettingsEntityErrorMap = {\r\n [getBulkUploadErrorType(Campaign)]: ERROR_ENTITY.Campaign,\r\n};\r\n\r\nexport const saveCampaign = ({\r\n campaign: campaignViewModel,\r\n adGroup: adGroupViewModel,\r\n viewModelToBulkModelForAdSchedules = null,\r\n updateCampaignStatus = true,\r\n bundleLocationCriterions,\r\n bundleCountries,\r\n}, { scenario, i18n, activityLogger }) => {\r\n const campaignModel = viewModelToModelForCampaign(campaignViewModel);\r\n const isAudienceCampaign = isAudienceShoppingCampaign(campaignViewModel.data.CampaignType, campaignViewModel.data.CampaignSubType);\r\n\r\n let conversionGoalsAssociations = {};\r\n let adSchedulesModel = [];\r\n\r\n const modelToSave = {\r\n ...campaignModel,\r\n ...conversionGoalsAssociations,\r\n };\r\n\r\n if (!updateCampaignStatus) {\r\n delete modelToSave.Status;\r\n }\r\n\r\n if (!_.isEmpty(campaignViewModel.data.conversionGoals)) {\r\n conversionGoalsAssociations = {\r\n CampaignConversionGoalAssociations: viewModelToBulkModelForConversionGoals(campaignViewModel, campaignViewModel.data.Id || PLACEHOLDER_ID.CampaignNegativeReferenceId),\r\n };\r\n _.extend(modelToSave, { ...conversionGoalsAssociations });\r\n }\r\n\r\n if (viewModelToBulkModelForAdSchedules) {\r\n adSchedulesModel = viewModelToBulkModelForAdSchedules({ campaignViewModel });\r\n }\r\n const targetingModel = viewModelToBulkModelForTargeting({ campaignViewModel });\r\n const locationModel = viewModelToBulkModelForLocationTargets({ campaignViewModel, bundleLocationCriterions });\r\n\r\n modelToSave.CampaignCriterions = [\r\n ...adSchedulesModel,\r\n ...targetingModel,\r\n ...locationModel,\r\n ];\r\n\r\n modelToSave.CampaignAudienceCriterions = viewModelToBulkModelForAudiences({ campaignViewModel });\r\n\r\n\r\n if (!modelToSave.Id) {\r\n modelToSave.Id = PLACEHOLDER_ID.CampaignNegativeReferenceId;\r\n }\r\n\r\n if (adGroupViewModel) {\r\n modelToSave.AdGroups = [\r\n viewModelToBulkModelForAdGroup({\r\n adGroupViewModel,\r\n campaignViewModel: campaignViewModel.data,\r\n i18n,\r\n saveAdGroupCriterions: isAudienceCampaign, // For AWF, targets are created at ad group level\r\n }),\r\n ];\r\n }\r\n\r\n return createOrUpdateCampaign(modelToSave)\r\n // with bulk the result will have shape of:\r\n // - { ...entityData } - in case of success;\r\n // - { entity: { ...entityData }, errors: [(EditorialError|MTError)] } - in case of error(s).\r\n .then((result) => {\r\n const data = {\r\n campaign: bulkModelToViewModelForCampaign({\r\n campaignModel: result,\r\n originalCampaignModel: campaignViewModel,\r\n bundleCountries,\r\n }),\r\n ...getErrorsPlaceholders(),\r\n };\r\n\r\n if (adGroupViewModel) {\r\n data.adGroup = bulkModelToViewModelForAdGroup({\r\n adGroupModel: result.AdGroups[0],\r\n originalAdGroupViewModel: adGroupViewModel,\r\n bundleCountries,\r\n i18n,\r\n });\r\n }\r\n\r\n return data;\r\n }, (bulkOrSystemError) => {\r\n if (isBulkWrappedResponse(bulkOrSystemError)) {\r\n const { entity, errors } = bulkOrSystemError;\r\n const campaign = entity ?\r\n bulkModelToViewModelForCampaign({\r\n campaignModel: entity,\r\n originalCampaignModel: campaignViewModel,\r\n }) :\r\n campaignViewModel;\r\n\r\n const adGroupData = {};\r\n if (adGroupViewModel) {\r\n adGroupData.adGroup = bulkModelToViewModelForAdGroup({\r\n adGroupModel: entity.AdGroups[0],\r\n originalAdGroupViewModel: adGroupViewModel,\r\n i18n,\r\n });\r\n }\r\n\r\n let filteredErrors = errors;\r\n if (campaign.data.Id <= 0) {\r\n filteredErrors = removeReferencedEntityInvalidIdErrors(errors);\r\n }\r\n\r\n const serverErrors = modelToViewModelForBulkErrors(\r\n filteredErrors,\r\n bulkUpsertCampaignSettingsEntityErrorMap,\r\n scenario,\r\n i18n,\r\n activityLogger\r\n );\r\n\r\n // eslint-disable-next-line prefer-promise-reject-errors\r\n return Promise.reject({\r\n campaign,\r\n serverErrors,\r\n ...adGroupData,\r\n });\r\n }\r\n\r\n // Activity\r\n // eslint-disable-next-line no-console\r\n console.warn(`Campaign bulk upsert system error: ${bulkOrSystemError.stack || bulkOrSystemError.message || bulkOrSystemError}`);\r\n // eslint-disable-next-line prefer-promise-reject-errors\r\n return Promise.reject({\r\n campaign: campaignViewModel,\r\n systemErrors: [i18n.getString(GENERIC_ERROR_MESSAGE_KEY)],\r\n // TODO: We would want to return the criterions with Ids, but UI's bulk drops them\r\n });\r\n });\r\n};\r\n","export const getCollapsiblePanelStyles = (components, theme) => ({\r\n border: 'none',\r\n marginBottom: 'unset',\r\n backgroundColor: 'unset',\r\n\r\n '& .panel-heading': {\r\n padding: 0,\r\n borderBottom: 'none',\r\n marginBottom: 18,\r\n\r\n '& .panel-title': {\r\n fontSize: 18,\r\n '& > a': {\r\n color: theme.palette.themePrimary,\r\n padding: 0,\r\n '&:hover, &:active': {\r\n color: theme.palette.themeDarker,\r\n textDecoration: 'none',\r\n backgroundColor: 'unset',\r\n },\r\n },\r\n\r\n '& > a:after': {\r\n transform: 'rotate(180deg)',\r\n },\r\n\r\n '& > a.collapsed:after': {\r\n transform: 'rotate(90deg)',\r\n },\r\n },\r\n },\r\n\r\n '& .panel-collapse': {\r\n '& .panel-body': {\r\n padding: 0,\r\n overflow: 'hidden',\r\n },\r\n },\r\n});\r\n\r\nexport const getPannelHeaderStyles = () => ({\r\n pannelHeader: {\r\n display: 'inline',\r\n fontSize: 18,\r\n marginBottom: 0,\r\n padding: 0,\r\n },\r\n});\r\n","import { useMemo, useCallback, useRef, useEffect } from 'react';\r\nimport {\r\n getCurrentStepId, WIZARD_EVENTS,\r\n} from '@bingads-webui-react/wizard';\r\n\r\nexport const LOG_STATUS = {\r\n LOAD_START: 'load_start',\r\n LOAD_SUCCESS: 'load_success',\r\n SAVE_START: 'save_start',\r\n SAVE_SUCCESS: 'save_success',\r\n SAVE_FAIL: 'save_fail',\r\n CANCEL: 'cancel',\r\n};\r\n\r\nexport const useWizardLog = ({\r\n activity, wizardState, isSearch, flow,\r\n}) => {\r\n const stepTime = useRef({\r\n loadStart: 0,\r\n loadEnd: 0,\r\n saveStart: 0,\r\n saveEnd: 0,\r\n });\r\n\r\n const logContent = useMemo(() => ({\r\n flow: flow || `${isSearch ? 'search' : 'audience'}-shopping/new`,\r\n step: getCurrentStepId(wizardState),\r\n stepDuration: 0,\r\n requestSpend: 0,\r\n msg: '',\r\n status: '',\r\n guid: activity.id,\r\n }), [flow, isSearch, wizardState, activity.id]);\r\n\r\n const traceLog = useCallback((logPayload) => {\r\n activity.trace(JSON.stringify(logPayload));\r\n }, [activity]);\r\n\r\n const onStepLoadedLog = useCallback(({ status, msg = '' }) => {\r\n const nowTime = Date.now();\r\n const logs = { status };\r\n if (msg) {\r\n logs.msg = msg;\r\n }\r\n if (status === LOG_STATUS.LOAD_START) {\r\n stepTime.current.loadStart = nowTime;\r\n } else if (status === LOG_STATUS.LOAD_SUCCESS) {\r\n stepTime.current.loadEnd = nowTime;\r\n logs.requestSpend = nowTime - stepTime.current.loadStart;\r\n }\r\n traceLog({\r\n ...logContent,\r\n ...logs,\r\n status,\r\n });\r\n }, [logContent, stepTime, traceLog]);\r\n\r\n const onStepSavedLog = useCallback(({ status, msg = '' }) => {\r\n const nowTime = Date.now();\r\n const logs = { status };\r\n if (msg) {\r\n logs.msg = msg;\r\n }\r\n if (status === LOG_STATUS.SAVE_START) {\r\n stepTime.current.saveStart = nowTime;\r\n } else if (status === LOG_STATUS.SAVE_SUCCESS || status === LOG_STATUS.SAVE_FAIL) {\r\n logs.requestSpend = nowTime - stepTime.current.saveStart;\r\n logs.stepDuration = nowTime - stepTime.current.loadEnd;\r\n }\r\n traceLog({\r\n ...logContent,\r\n ...logs,\r\n });\r\n }, [logContent, stepTime, traceLog]);\r\n\r\n useEffect(() => (() => {\r\n if (wizardState.event.type === WIZARD_EVENTS.CANCEL) {\r\n traceLog({\r\n ...logContent,\r\n status: LOG_STATUS.CANCEL,\r\n stepDuration: Date.now() - stepTime.current.loadEnd,\r\n });\r\n }\r\n }), [wizardState, logContent, traceLog]);\r\n\r\n return {\r\n onStepLoadedLog,\r\n onStepSavedLog,\r\n };\r\n};\r\n","import _ from 'underscore';\r\nimport { getProductScopeData } from '@bingads-webui-campaign-react/product-services';\r\nimport { getProductData as GetProductData } from '@bingads-webui-campaign/audience-campaign-shared';\r\n\r\nexport const getProductData = (params, serverContext) => {\r\n const isOdataGetProductScopeEnabled = _.get(serverContext, ['DynamicPermissions', 'OdataGetProductScope'], false);\r\n let p = null;\r\n\r\n if (!isOdataGetProductScopeEnabled) {\r\n p = GetProductData(params);\r\n\r\n return p;\r\n }\r\n\r\n const options = {\r\n dataName: 'MetaData',\r\n };\r\n\r\n if (params.salesCountry) {\r\n options.countryCode = params.salesCountry;\r\n }\r\n\r\n if (params.campaignId) {\r\n options.campaignId = params.campaignId;\r\n options.getCampaignCriterions = true;\r\n options.bypassCache = true;\r\n options.cacheResponse = false;\r\n options.shouldShowPlaceholderStoreIfExists = true;\r\n } else {\r\n options.bypassCache = false;\r\n options.cacheResponse = true;\r\n }\r\n\r\n if (params.getCampaignCriterionsOnly) {\r\n options.getCampaignCriterionsOnly = true;\r\n } else {\r\n options.getProductConditionOptions = true;\r\n options.getSalesCountryCollection = true;\r\n options.getDynamicDataFeedOptions = true;\r\n\r\n if (params.getCategoryFullData) {\r\n options.getCategoryFullData = true;\r\n }\r\n\r\n if (params.getProductTypeFullData) {\r\n options.getProductTypeFullData = true;\r\n }\r\n }\r\n\r\n p = getProductScopeData(null, serverContext, options);\r\n\r\n return p;\r\n}\r\n","import Promise from 'bluebird';\r\nimport _ from 'underscore';\r\nimport { useContext, useMemo, useCallback } from 'react';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { useWizardService } from '@bingads-webui-react/wizard';\r\nimport { ScopeContext } from '@bingads-webui-react/scope-service';\r\nimport { ActivityContext, ScenarioContext } from '@bingads-webui-react/hoc-with-signal';\r\nimport { ServerContext } from '@bingads-webui-campaign-react/server-context';\r\nimport { loadBundleCountries, getErrorsPlaceholders } from '@bingads-webui-campaign-react/xandr-campaign';\r\nimport { withDFMCache } from '@bingads-webui/dfm-cache';\r\nimport { mergeData } from '@bingads-webui-campaign-react/product-services';\r\nimport { getFeedData } from '@bingads-webui-campaign/audience-campaign-creation-wizard';\r\n\r\nimport {\r\n loadCampaign,\r\n loadAdGroup,\r\n readDayTimeCriterions,\r\n readLocationCriterions,\r\n readAdGroupLocationCriterions,\r\n readAgeAndGenderTargetingCriterions,\r\n readAdGroupAgeAndGenderCriterions,\r\n modelToViewModelForAdGroup,\r\n modelToViewModelForCampaign,\r\n viewModelToModelForCampaign,\r\n viewModelToModelForConversionGoals,\r\n saveAdGroup,\r\n saveCampaign,\r\n} from '../../model';\r\nimport { isSearchShoppingCampaign, allSettledPromiseWrapper } from '../step-utils';\r\nimport { useWizardLog, LOG_STATUS, getProductData } from '../../shared';\r\n\r\nconst getFeedDataWithCache = withDFMCache(getFeedData, 'getFeedScopeDFM', {});\r\n\r\nexport const useSummaryRepository = () => {\r\n const i18n = useContext(I18nContext);\r\n const { state } = useWizardService();\r\n\r\n const { scope } = useContext(ScopeContext) || {};\r\n const serverContext = useContext(ServerContext);\r\n const { Permissions, DynamicPermissions } = serverContext || {};\r\n const permissions = useMemo(() => ({ dynamic: { ...DynamicPermissions }, ...Permissions }), [DynamicPermissions, Permissions]);\r\n const isPAAIMConsolidationEnabled = _.get(serverContext, ['DynamicPermissions', 'PAAIMConsolidation'], false);\r\n const isOdataGetProductScopeEnabled = _.get(serverContext, ['DynamicPermissions', 'OdataGetProductScope'], false);\r\n\r\n const scenarioContext = useContext(ScenarioContext);\r\n const activity = useContext(ActivityContext);\r\n\r\n const internalGetProductData = useCallback(params => getProductData(params, serverContext), [serverContext]);\r\n const getAudienceProductDataWithCache = withDFMCache(internalGetProductData, 'getAudienceProductScopeDFM', {});\r\n const getProductDataWithCache = withDFMCache(internalGetProductData, 'getProductScopeDFM', {});\r\n\r\n const { cid, aid } = scope.values;\r\n\r\n const { flow, isPublishing } = state.context.wizardData;\r\n const isSearch = isSearchShoppingCampaign(flow);\r\n const { onStepLoadedLog, onStepSavedLog } = useWizardLog({ activity, wizardState: state, isSearch });\r\n\r\n\r\n const load = () => {\r\n onStepLoadedLog({ status: LOG_STATUS.LOAD_START });\r\n const savedCampaign = state.context.wizardData.campaign;\r\n const savedAdGroup = state.context.wizardData.adGroup;\r\n const savedProductData = state.context.wizardData.productData;\r\n const savedFeedData = state.context.wizardData.feedData;\r\n // const adGroupId = savedAdGroup ? savedAdGroup.Id : 1180875542953561;\r\n // const campaignId = savedCampaign ? savedCampaign.Id : 946842629; feedlabel\r\n const adGroupId = savedAdGroup ? savedAdGroup.Id : null;\r\n const campaignId = savedCampaign ? savedCampaign.Id : null;\r\n // const adGroupId = savedAdGroup ? savedAdGroup.Id : 1194069858307329;//null;\r\n // const campaignId = savedCampaign ? savedCampaign.Id : 1046593706;//null; dynamicFeed\r\n\r\n const isSearchShopping = isSearch;\r\n\r\n const loadPromises = {\r\n adGroup: savedAdGroup ? Promise.resolve(savedAdGroup) : loadAdGroup(cid, aid, campaignId, adGroupId),\r\n campaign: savedCampaign ? Promise.resolve({\r\n ...viewModelToModelForCampaign({\r\n data: savedCampaign,\r\n }),\r\n ...viewModelToModelForConversionGoals({\r\n data: savedCampaign,\r\n }),\r\n }) : loadCampaign(cid, aid, campaignId),\r\n locationCriterions: isSearchShopping ? readLocationCriterions({ cid, aid, campaignId }) : readAdGroupLocationCriterions({\r\n cid, aid, campaignId, adGroupId,\r\n }),\r\n dayTimeCriterions: readDayTimeCriterions({ cid, aid, campaignId }),\r\n targetCriterions: isSearchShopping ? readAgeAndGenderTargetingCriterions({ cid, aid, campaignId }) : readAdGroupAgeAndGenderCriterions({\r\n cid, aid, campaignId, adGroupId,\r\n }),\r\n bundleCountriesAndLocationCriterions: loadBundleCountries({ cid, aid, serverContext }),\r\n };\r\n\r\n if (!isSearchShopping) {\r\n // When refresh in local, the data-fetch-manager will get product data without campaign Id and set cache. We can't get the campaignCriterion.\r\n // TODO: include permissions for CuriseFeedForAudienceCampaign 1073\r\n loadPromises.feedData = savedFeedData ? Promise.resolve(savedFeedData) : getFeedDataWithCache({ $top: 10000 /* permissions */ });\r\n } else {\r\n loadPromises.feedData = Promise.resolve(null);\r\n }\r\n\r\n if (!savedProductData) {\r\n const params = { campaignId };\r\n\r\n if (!isSearchShopping) {\r\n params.getCategoryFullData = true;\r\n params.getProductTypeFullData = true;\r\n params.salesCountry = 'US';\r\n }\r\n\r\n if (isOdataGetProductScopeEnabled) {\r\n const p = isSearchShopping ? getProductDataWithCache(params) : getAudienceProductDataWithCache(params);\r\n loadPromises.productData = p.then(pData => mergeData(pData));\r\n } else {\r\n loadPromises.productData = isSearchShopping ? getProductDataWithCache(params) : getAudienceProductDataWithCache(params);\r\n }\r\n } else {\r\n loadPromises.productData = Promise.resolve(savedProductData);\r\n }\r\n\r\n return Promise.props(loadPromises).then(({\r\n adGroup,\r\n campaign,\r\n locationCriterions,\r\n dayTimeCriterions,\r\n targetCriterions,\r\n bundleCountriesAndLocationCriterions,\r\n productData,\r\n feedData,\r\n }) => {\r\n onStepLoadedLog({ status: LOG_STATUS.LOAD_SUCCESS });\r\n const adGroupData = modelToViewModelForAdGroup({\r\n adGroupModel: adGroup,\r\n campaignModel: campaign,\r\n i18n,\r\n isAudienceShoppingCampaign: !isSearchShopping,\r\n locationCriterionsModel: !isSearchShopping && locationCriterions ? locationCriterions.value : [],\r\n targetCriterionsModel: !isSearchShopping && targetCriterions ? targetCriterions.value : [],\r\n });\r\n\r\n const campaignData = modelToViewModelForCampaign({\r\n campaignModel: campaign,\r\n locationCriterionsModel: isSearchShopping && locationCriterions ? locationCriterions.value : [],\r\n dayTimeCriterionsModel: dayTimeCriterions ? dayTimeCriterions.value : [],\r\n targetCriterionsModel: isSearchShopping && targetCriterions ? targetCriterions.value : [],\r\n bundleCountries: bundleCountriesAndLocationCriterions.bundleCountries,\r\n productData,\r\n feedData,\r\n permissions,\r\n });\r\n\r\n return {\r\n adGroup: adGroupData.data,\r\n campaign: campaignData.data,\r\n };\r\n });\r\n };\r\n\r\n const save = () => {\r\n onStepSavedLog({ status: LOG_STATUS.SAVE_START });\r\n const savedCampaign = state.context.wizardData.campaign;\r\n const savedAdGroup = state.context.wizardData.adGroup;\r\n\r\n if (isPublishing) {\r\n savedCampaign.Status = 'Active';\r\n savedAdGroup.Status = 'Active';\r\n } else {\r\n savedCampaign.Status = 'Paused';\r\n savedAdGroup.Status = 'Paused';\r\n }\r\n\r\n const savePromises = [\r\n saveAdGroup({\r\n adGroup: { data: savedAdGroup },\r\n campaign: savedCampaign,\r\n isProductGroupAllowedForAudienceCampaign: isPAAIMConsolidationEnabled,\r\n }, {\r\n scenario: scenarioContext.name,\r\n activityLogger: scenarioContext.createActivity('saveDefaultAdGroup'),\r\n i18n,\r\n }),\r\n saveCampaign({\r\n campaign: { data: savedCampaign },\r\n }, {\r\n scenario: scenarioContext.name,\r\n activityLogger: scenarioContext.createActivity('saveDefaultCampaign'),\r\n i18n,\r\n }),\r\n ];\r\n\r\n return new Promise((resolve, reject) => {\r\n allSettledPromiseWrapper(savePromises).then((results) => {\r\n const allSuccess = _.every(results, result => result.status === 'fulfilled');\r\n\r\n if (allSuccess) {\r\n const campaignData = results[1].value.campaign.data;\r\n onStepSavedLog({ status: LOG_STATUS.SAVE_SUCCESS, msg: `Status: ${campaignData.Status}, Id: ${campaignData.Id}` });\r\n return resolve({\r\n adGroup: results[0].value.adGroup.data,\r\n campaign: results[1].value.campaign.data,\r\n ...getErrorsPlaceholders(),\r\n });\r\n }\r\n\r\n const errors = _.map(results, (result) => {\r\n if (result.status === 'fulfilled') {\r\n return null;\r\n }\r\n\r\n const { serverErrors = {} } = result.reason;\r\n\r\n return serverErrors;\r\n });\r\n onStepSavedLog({ status: LOG_STATUS.SAVE_FAIL, msg: errors });\r\n // eslint-disable-next-line prefer-promise-reject-errors\r\n return reject({ error: _.flatten(errors.filter(val => val !== null)) });\r\n });\r\n });\r\n };\r\n\r\n return {\r\n load,\r\n save,\r\n };\r\n};\r\n","import { getCampaignType } from '../../step-utils';\r\n\r\nexport const getPriorityOptions = i18n => [\r\n { key: 'Low', text: i18n.getString(_TL_('Low')) },\r\n { key: 'Medium', text: i18n.getString(_TL_('Medium')) },\r\n { key: 'High', text: i18n.getString(_TL_('High')) },\r\n];\r\n\r\nexport const getShoppingSettingOptions = ({\r\n isSearch,\r\n settingScenarioName,\r\n i18n,\r\n productData,\r\n feedData,\r\n campaignSettings,\r\n activity,\r\n ccJsData,\r\n onStoreSelectionChange,\r\n onSalesCountryChange,\r\n onFeedLabelChange,\r\n setProductLoading,\r\n isCPSSelected,\r\n updateProductConditionOptions,\r\n updateChildLevelProductCondition,\r\n onSelectFilterProducts,\r\n}) => {\r\n const campaignTypeConfig = getCampaignType(isSearch, campaignSettings);\r\n if (isSearch) {\r\n return {\r\n settingScenarioName,\r\n data: productData,\r\n feedData,\r\n model: campaignSettings,\r\n campaignType: campaignTypeConfig.CampaignType,\r\n campaignSubType: campaignTypeConfig.CampaignSubType,\r\n // campaignId: _.result(this.campaign, 'Id'),\r\n isStoreValid: true,\r\n activityLogger: activity,\r\n onStoreSelectionChange,\r\n onSalesCountryChange,\r\n onFeedLabelChange,\r\n setProductLoading,\r\n isSponsoredSettings: {\r\n isSponsoredCampaign: false,\r\n isSPBCampaign: false,\r\n isSPBOptInAvailable: false,\r\n shouldUseNewMmcApiForSpa: false,\r\n hideBid: false,\r\n },\r\n ccJsData,\r\n deps: {\r\n i18nNewDesign: i18n,\r\n },\r\n isCPSSelected,\r\n isAllFeedProducts: false,\r\n updateProductConditionOptions,\r\n updateChildLevelProductCondition,\r\n onSelectFilterProducts,\r\n };\r\n }\r\n return {\r\n settingScenarioName,\r\n data: productData,\r\n feedData,\r\n model: campaignSettings,\r\n campaignType: campaignTypeConfig.CampaignType,\r\n campaignSubType: campaignTypeConfig.CampaignSubType,\r\n activityLogger: activity,\r\n ccJsData,\r\n deps: {\r\n i18nNewDesign: i18n,\r\n },\r\n onSalesCountryChange,\r\n onStoreSelectionChange,\r\n onFeedLabelChange,\r\n setProductLoading,\r\n isCPSSelected,\r\n isAllFeedProducts: false,\r\n };\r\n};\r\n","import React, { useCallback, useContext, useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport { withCustomValidation } from '@bingads-webui-react/validation';\r\nimport { ActivityContext } from '@bingads-webui-react/hoc-with-signal';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { LegacyShoppingSettings } from '@bingads-webui-campaign-react/legacy-shopping-settings';\r\nimport { andComp, propertyIs, entityIs } from '@bingads-webui-campaign-react/form-error';\r\nimport { withUnvalidatedControlErrors, withControlErrorHandling } from '@bingads-webui-campaign-react/error-handling';\r\nimport { useJsDataContext } from '@bingads-webui-cc-react/js-data-rest';\r\nimport { SettingScenarios } from '@bingads-webui-campaign-legacy/shopping-campaign/view/campaign-creation/utils';\r\n\r\nimport { getShoppingSettingOptions } from './setting-configs';\r\n\r\nconst entityIsCampaign = entityIs('campaign');\r\nconst campaignProductFilterSchemeProp = andComp(entityIsCampaign, propertyIs('ProductFilter'));\r\n\r\nconst ProductFilterWithCustomValidation = ({\r\n updateValidation, productFilterRef, productData,\r\n campaignSettings, isSearch, feedData, setProductLoading,\r\n updateProductConditionOptions, updateChildLevelProductCondition,\r\n}) => {\r\n const activity = useContext(ActivityContext);\r\n const i18n = useContext(I18nContext);\r\n const ccJsData = useJsDataContext();\r\n\r\n const onChange = useCallback((newData, isValid) => {\r\n // We are not using the updated data here as we will using the backbone view ref to get the final data\r\n updateValidation(isValid ? [] : [i18n.getString(_TL_('Legacy product settings has error'))]);\r\n if (activity && !isValid) {\r\n // signal activity to parent\r\n activity.signal(`onLegacyProductFilterChange - ${JSON.stringify(newData)} - isValid: ${isValid}}`);\r\n }\r\n }, [updateValidation, activity, i18n]);\r\n\r\n const campaignSettingsProp = useMemo(() => (campaignSettings && campaignSettings.Id ? campaignSettings : undefined), [campaignSettings]);\r\n\r\n const shoppingSettingOptions = useMemo(() => getShoppingSettingOptions({\r\n isSearch,\r\n settingScenarioName: SettingScenarios.PAAIMProductSetting,\r\n i18n,\r\n productData,\r\n feedData,\r\n campaignSettings: campaignSettingsProp,\r\n activity,\r\n ccJsData,\r\n setProductLoading,\r\n updateProductConditionOptions,\r\n updateChildLevelProductCondition,\r\n }), [productData, campaignSettingsProp, activity, isSearch, ccJsData, feedData, i18n,\r\n setProductLoading, updateProductConditionOptions, updateChildLevelProductCondition]);\r\n\r\n return (\r\n
\r\n \r\n
\r\n );\r\n};\r\n\r\nProductFilterWithCustomValidation.propTypes = {\r\n updateValidation: PropTypes.func.isRequired,\r\n productFilterRef: PropTypes.shape({}).isRequired,\r\n productData: PropTypes.shape({}).isRequired,\r\n campaignSettings: PropTypes.shape({\r\n Id: PropTypes.number,\r\n }),\r\n isSearch: PropTypes.bool.isRequired,\r\n feedData: PropTypes.shape({}).isRequired,\r\n setProductLoading: PropTypes.func.isRequired,\r\n updateProductConditionOptions: PropTypes.func.isRequired,\r\n updateChildLevelProductCondition: PropTypes.func.isRequired,\r\n};\r\n\r\nProductFilterWithCustomValidation.defaultProps = {\r\n campaignSettings: undefined,\r\n};\r\n\r\nexport const ValidatedProductFilterSetting = withControlErrorHandling(withUnvalidatedControlErrors(withCustomValidation(ProductFilterWithCustomValidation), { filter: campaignProductFilterSchemeProp }));\r\n\r\n","import _ from 'underscore';\r\nimport React, { useCallback, useContext, useMemo, useState, useEffect } from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport { withCustomValidation } from '@bingads-webui-react/validation';\r\nimport { ActivityContext } from '@bingads-webui-react/hoc-with-signal';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { LegacyShoppingSettings } from '@bingads-webui-campaign-react/legacy-shopping-settings';\r\nimport { withUnvalidatedControlErrors, withControlErrorHandling } from '@bingads-webui-campaign-react/error-handling';\r\nimport { useJsDataContext } from '@bingads-webui-cc-react/js-data-rest';\r\nimport { SettingScenarios } from '@bingads-webui-campaign-legacy/shopping-campaign/view/campaign-creation/utils';\r\n\r\nimport { getShoppingSettingOptions } from './setting-configs';\r\n\r\nconst StoreSettingWithCustomValidation = ({\r\n updateValidation, storeSettingRef, productData, campaignSettings, isSearch, feedData, isCPSSelected,\r\n onStoreSelectionChange, onSalesCountryChange, onFeedLabelChange, onSelectFilterProducts,\r\n}) => {\r\n const activity = useContext(ActivityContext);\r\n const i18n = useContext(I18nContext);\r\n const ccJsData = useJsDataContext();\r\n\r\n const onChange = useCallback((newData, isValid) => {\r\n // We are not using the updated data here as we will using the backbone view ref to get the final data\r\n updateValidation(isValid ? [] : [i18n.getString(_TL_('Legacy store settings has error'))]);\r\n if (activity && !isValid) {\r\n // signal activity to parent\r\n activity.signal(`onLegacyProductFilterChange - ${JSON.stringify(newData)} - isValid: ${isValid}}`);\r\n }\r\n }, [updateValidation, activity, i18n]);\r\n\r\n const [storeSettings, setStoreSettings] = useState(undefined);\r\n\r\n useEffect(() => {\r\n if (campaignSettings && campaignSettings.Id && !storeSettings) {\r\n setStoreSettings(campaignSettings);\r\n }\r\n }, [campaignSettings, storeSettings]);\r\n\r\n const shoppingSettingOptions = useMemo(() => getShoppingSettingOptions({\r\n isSearch,\r\n settingScenarioName: SettingScenarios.PAAIMStoreSetting,\r\n i18n,\r\n // Due to we separate product filter from store setting. we should ensure storeSetting pass the validation by remove campaignCriterionsData while edit\r\n productData: _.omit(productData, 'CampaignCriterionsData'),\r\n feedData,\r\n campaignSettings: storeSettings,\r\n activity,\r\n ccJsData,\r\n onStoreSelectionChange,\r\n onSalesCountryChange,\r\n onFeedLabelChange,\r\n isCPSSelected,\r\n onSelectFilterProducts,\r\n }), [productData, storeSettings, activity, isSearch, ccJsData, feedData, i18n,\r\n onStoreSelectionChange, isCPSSelected, onSalesCountryChange, onFeedLabelChange, onSelectFilterProducts]);\r\n\r\n return (\r\n
\r\n \r\n
\r\n );\r\n};\r\n\r\nStoreSettingWithCustomValidation.propTypes = {\r\n updateValidation: PropTypes.func.isRequired,\r\n storeSettingRef: PropTypes.shape({}).isRequired,\r\n productData: PropTypes.shape({}).isRequired,\r\n campaignSettings: PropTypes.shape({\r\n Id: PropTypes.number,\r\n }),\r\n isSearch: PropTypes.bool.isRequired,\r\n feedData: PropTypes.shape({}).isRequired,\r\n onStoreSelectionChange: PropTypes.func.isRequired,\r\n isCPSSelected: PropTypes.bool,\r\n onSalesCountryChange: PropTypes.func.isRequired,\r\n onFeedLabelChange: PropTypes.func.isRequired,\r\n onSelectFilterProducts: PropTypes.func.isRequired,\r\n};\r\n\r\nStoreSettingWithCustomValidation.defaultProps = {\r\n campaignSettings: undefined,\r\n isCPSSelected: false,\r\n};\r\n\r\nexport const ValidatedStoreSetting = withControlErrorHandling(withUnvalidatedControlErrors(withCustomValidation(StoreSettingWithCustomValidation)));\r\n\r\n","import React, { useCallback, useEffect } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { Link } from '@fluentui/react';\r\nimport { ReactTemplate } from '@bingads-webui-react/react-template';\r\nimport { getRouterDep } from '@bingads-webui-campaign-react/legacy-router-dep';\r\n\r\nexport const BMCRedirect = ({\r\n isEnabledForDynamicFeedCampaign,\r\n i18n,\r\n scope,\r\n activity,\r\n}) => {\r\n const toBMC = useCallback(() => {\r\n getRouterDep(scope).navigateToRoute('bing_merchant_center');\r\n }, [scope]);\r\n\r\n const toDynamicDataManagement = useCallback(() => {\r\n getRouterDep(scope).navigateToRoute('dynamicdata_management');\r\n }, [scope]);\r\n\r\n useEffect(() => {\r\n activity.signal('RenderBMCRedirect');\r\n }, []);\r\n\r\n return (\r\n
\r\n {text},\r\n // eslint-disable-next-line jsx-a11y/anchor-is-valid\r\n b: text => (isEnabledForDynamicFeedCampaign ? <> or {text} : null),\r\n }}\r\n template={i18n.getString(_TL_('To create a shopping campaign, you need to create a Microsoft Merchant Center store and add your catalog. {{a}}Create a store{{/a}} {{b}}Upload a Dynamic Data Feed{{/b}}'))}\r\n />\r\n
\r\n );\r\n};\r\n\r\nBMCRedirect.propTypes = {\r\n isEnabledForDynamicFeedCampaign: PropTypes.bool.isRequired,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n scope: PropTypes.string.isRequired,\r\n activity: PropTypes.shape({\r\n signal: PropTypes.func.isRequired,\r\n }).isRequired,\r\n};\r\n","import React, { useState, useCallback, useEffect } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { ChoiceGroup, Label, Stack } from '@fluentui/react';\r\nimport { HelpPopup } from '@bingads-webui-react/help-popup';\r\nimport { getPriorityOptions } from './index';\r\n\r\nexport const CampaignPriority = ({\r\n data, onDataChange, activity, i18n, ...restProps\r\n}) => {\r\n const { campaign } = data;\r\n const [priority, setPriority] = useState(campaign.Priority || 'Low');\r\n const onCampaignPriorityChange = useCallback((ev, option) => {\r\n activity.signal(`onCampaignPriorityChange: ${option.key}`);\r\n setPriority(option.key);\r\n }, [activity]);\r\n\r\n useEffect(() => {\r\n if (campaign.Priority !== priority) {\r\n onDataChange({\r\n data: {\r\n ...data,\r\n campaign: { ...data.campaign, Priority: priority },\r\n },\r\n });\r\n }\r\n }, [campaign.Priority, data, onDataChange, priority]);\r\n\r\n return (\r\n
\r\n \r\n \r\n
\r\n );\r\n};\r\n\r\nCampaignPriority.propTypes = {\r\n data: PropTypes.shape({\r\n campaign: PropTypes.shape({\r\n Priority: PropTypes.string,\r\n }),\r\n }).isRequired,\r\n onDataChange: PropTypes.func.isRequired,\r\n activity: PropTypes.shape({\r\n signal: PropTypes.func,\r\n }).isRequired,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }).isRequired,\r\n};\r\n","// import { getCollapsiblePanelStyles } from '../../shared/styles';\r\nimport _ from 'underscore';\r\nimport { merge } from '@bingads-webui/primitive-utilities';\r\nimport { creationCommonStyle } from '@bingads-webui-campaign-react/campaign-adgroup-settings-shared-styles';\r\n\r\nfunction resolveStyles({ theme }, ...styles) {\r\n const resolvedStyles = styles.map(s => (_.isFunction(s) ? s(theme) : s));\r\n\r\n if (_.some(resolvedStyles, _.isEmpty)) {\r\n throw new Error('Cannot pass in empty style!');\r\n }\r\n\r\n return resolvedStyles;\r\n}\r\n\r\nexport const getCampaignStyles = (components, theme) => ({\r\n divider: {\r\n padding: '5px 0px 0px 4px',\r\n width: '100%',\r\n borderTop: '2px solid #E0E0E0',\r\n marginTop: 30,\r\n marginBottom: 20,\r\n },\r\n budgetContainer: {\r\n '& .budget-title-container span': {\r\n fontWeight: 600,\r\n },\r\n },\r\n campaignShell: {\r\n display: 'flex',\r\n width: 966,\r\n '& .ms-ChoiceFieldGroup label': {\r\n padding: 0,\r\n fontWeight: 400,\r\n },\r\n ...merge(\r\n {},\r\n ...resolveStyles(\r\n { theme },\r\n creationCommonStyle\r\n )\r\n ),\r\n '& .local-inventory label': {\r\n display: 'flex',\r\n },\r\n '& .product-collections label': {\r\n display: 'flex',\r\n },\r\n '& .productsScope': {\r\n display: 'none',\r\n },\r\n '& .bid-strategy-details-container label': {\r\n display: 'inline-block',\r\n },\r\n '& .bid-and-budget #currencyLabelCostPerSale': {\r\n display: 'inline',\r\n },\r\n '& .allFeedProducts': {\r\n display: 'none',\r\n },\r\n },\r\n collapsiblePanel: {},\r\n estimationPart: {\r\n flexGrow: '1',\r\n position: 'sticky',\r\n marginTop: '58px',\r\n marginLeft: '30px',\r\n },\r\n urlOptionsContainer: {\r\n maxWidth: 435,\r\n },\r\n});\r\n","import React from 'react';\r\nimport { TextTitle as OriginalTextTitle } from '@bingads-webui-campaign/wizard-jumbo-card';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { getPannelHeaderStyles } from './styles/collapsible-panel';\r\n\r\nconst PannelHeader = (props) => {\r\n const classes = useDefaultStyles(getPannelHeaderStyles);\r\n\r\n return (\r\n

{props.children}

\r\n );\r\n};\r\n\r\nexport const TextTitle = props => ;\r\n","import _ from 'underscore';\r\nimport PropTypes from 'prop-types';\r\nimport React, { useContext, useState, useMemo, useCallback, useEffect } from 'react';\r\nimport classNames from 'classnames';\r\nimport { Stack } from '@fluentui/react';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { Loading } from '@bingads-webui-campaign-react/loading';\r\nimport { ServerContext } from '@bingads-webui-campaign-react/server-context';\r\nimport { Campaign } from '@bingads-webui/campaign-odata-schemas';\r\nimport { ActuationGroup } from '@bingads-webui-campaign-react/actuator';\r\nimport { AttentionBeaconGroup } from '@bingads-webui-campaign-react/attention-beacon';\r\nimport { FormErrorGroup, UnmappedFormErrors } from '@bingads-webui-campaign-react/form-error';\r\nimport { ValidationGroup } from '@bingads-webui-react/validation';\r\nimport { Collapse, useCollapseState, ValidatedPanel, collapseExpander } from '@bingads-webui-campaign/wizard-jumbo-card';\r\nimport { RemainingCharsValidatedTextField } from '@bingads-webui-campaign-react/remaining-chars-hint';\r\nimport { campaignNameProp } from '@bingads-webui-campaign-react/xandr-campaign';\r\nimport { ValidatedUrlOptionsParameter } from '@bingads-webui-campaign-react/validated-url-input';\r\nimport { BaseExclusion, getExclusionsDetails } from '@bingads-webui-campaign/hotel-common-upsert';\r\nimport { getUrlOptionsDetails } from '@bingads-webui-campaign-react/url-options';\r\nimport {\r\n StepHeader,\r\n conversionGoalsIcon,\r\n budgetBidStrategyIcon,\r\n AudienceBudgetBidStrategy,\r\n SectionShimmer,\r\n} from '@bingads-webui-campaign-react/display-plus-campaigns';\r\nimport { ShoppingImg, UrlOptionsImg } from '@bingads-webui-campaign-react/perf-max-step-wizard';\r\nimport { ProductImg } from '@bingads-webui-campaign-react/sponsored-campaign-creation';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { ValidationStringMap } from '@bingads-webui/validation-string-map';\r\nimport { buildLegacyI18n } from '@bingads-webui/build-legacy-i18n';\r\nimport { useFormService } from '@bingads-webui-react/form';\r\nimport { ValidatedConversionGoals } from '@bingads-webui-campaign-react/step-wizard-controls';\r\nimport { useWizardService, matchStepState, STEP_STATES, WIZARD_EVENTS } from '@bingads-webui-react/wizard';\r\nimport { ScopeContext } from '@bingads-webui-react/scope-service';\r\nimport { ActivityContext } from '@bingads-webui-react/hoc-with-signal';\r\nimport biddingStrategyTypes from '@bingads-webui-campaign-legacy/bidding-strategy/bidding-strategy-type';\r\nimport { getConversionGoalTitleDetails, getStoreTitleDetails, getBidBudgetTitleDetails } from '@bingads-webui-campaign-react/wizard-shared-components';\r\nimport { getStores, getCountries } from '@bingads-webui-campaign-react/store-select';\r\nimport { getMessageType } from '@bingads-webui-campaign-react/campaign-settings-utils';\r\n\r\nimport { ValidatedProductFilterSetting, ValidatedStoreSetting, BMCRedirect, CampaignPriority } from './component';\r\nimport { getCampaignStyles } from './styles';\r\nimport { isSearchShoppingCampaign, getProductTileDetails, getNoValidStore } from '../step-utils';\r\nimport { CREATE_SCENARIO } from '../../constants';\r\nimport { TextTitle } from '../../shared/pannel-header';\r\n\r\n// todo: refer to private\\ui-next\\packages\\display-plus-campaigns\\src\\steps\\campaign\\campaign-step-shell.js\r\nconst getPanelErrorProps = ({ needsAttention }) => (needsAttention ? {\r\n error: _TL_(\"* Something's wrong\"),\r\n} : {});\r\n\r\nconst getPanelOptions = () => ({\r\n basicOptions: [\r\n 'campaign-name',\r\n 'store-settings',\r\n 'product-filter',\r\n 'conversions',\r\n 'bid-and-budget',\r\n 'campaign-url-options',\r\n 'base-exclusion',\r\n ],\r\n});\r\n\r\nexport const CampaignSettingsStep = (props) => {\r\n const {\r\n data,\r\n onDataChange,\r\n error,\r\n } = props;\r\n\r\n const {\r\n campaign,\r\n productData,\r\n feedData,\r\n productFilterRef,\r\n storeSettingRef,\r\n setSiteExclusionView,\r\n setIPExclusionView,\r\n siteExclusionViewRef,\r\n ipExclusionViewRef,\r\n productConditionsRef,\r\n } = data || {};\r\n\r\n const classes = useDefaultStyles(getCampaignStyles);\r\n\r\n const serverContext = useContext(ServerContext);\r\n const isEnabledForDynamicFeedCampaign = _.get(serverContext, ['Permissions', 'IsEnabledForDynamicFeedCampaign'], false);\r\n const isConversionAssociationWarningP3Enabled = _.get(serverContext, ['DynamicPermissions', 'ConversionAssociationWarningP3'], false);\r\n\r\n const { scope } = useContext(ScopeContext) || {};\r\n const { cid, aid } = scope.values;\r\n\r\n const i18n = useContext(I18nContext);\r\n const legacyI18n = useMemo(() => buildLegacyI18n(i18n, [ValidationStringMap]), [i18n]);\r\n const globalLegacyI18n = useMemo(() => window.globalLegacyI18n.get('$/i18n!legacy/global'), []);\r\n const campaignBiddingSchemeType = _.get(campaign, ['BiddingScheme', 'Type'], '');\r\n const activity = useContext(ActivityContext);\r\n\r\n const { state, send } = useWizardService();\r\n const { wizardData } = state.context || {};\r\n const { flow, createScenario, campaignStepIsValid } = wizardData || {};\r\n const isEditMode = createScenario === CREATE_SCENARIO.UPDATE_CAMPAIGN;\r\n const currentStates = state.toStrings()[1];\r\n const isSearch = useMemo(() => isSearchShoppingCampaign(flow), [flow]);\r\n\r\n const [isCPSSelected, setIsCPSSelected] = useState(false);\r\n const { basicOptions } = getPanelOptions();\r\n const [basicOptionsShown, setBasicOptionsShown] = useState(basicOptions);\r\n const [productLoading, setProductLoading] = useState(false);\r\n\r\n const noStore = useMemo(() => getNoValidStore(productData, feedData), [productData, feedData]);\r\n\r\n // add campaign here to ensure data loaded before showing redirect to BMC\r\n const showRedirectToBMC = useMemo(() => campaign && noStore && !isEditMode, [noStore, campaign, isEditMode]);\r\n\r\n const [\r\n allCampaignSettingsSections,\r\n campaignSettingsExpandedSections,\r\n setCampaignSettingsExpandedSections,\r\n ] = useCollapseState(\r\n basicOptionsShown /* all sections */,\r\n ['campaign-name', 'conversions', 'bid-and-budget', 'store-settings',\r\n 'product-filter', 'conversions', 'campaign-url-options',\r\n 'base-exclusion'] /* initially expanded sections */\r\n );\r\n\r\n const basicSettingsExpand = useMemo(\r\n () => collapseExpander({ setActiveKeys: setCampaignSettingsExpandedSections }),\r\n [setCampaignSettingsExpandedSections]\r\n );\r\n\r\n const { state: { context: { saveFailed: showAllValidationErrors } } } = useFormService();\r\n\r\n const onValidate = (result) => {\r\n if (data && data.campaign) {\r\n const resultBiddingScheme = _.get(result, ['data', 'BiddingScheme'], {});\r\n const campaignBiddingScheme = _.get(campaign, ['BiddingScheme'], {});\r\n let biddingScheme = resultBiddingScheme;\r\n\r\n if (resultBiddingScheme && !resultBiddingScheme.Type && !_.isUndefined(campaignBiddingSchemeType)) {\r\n biddingScheme = campaignBiddingScheme;\r\n }\r\n\r\n const patchData = {\r\n ...data,\r\n campaign: {\r\n ...data.campaign,\r\n ...result.data,\r\n BiddingScheme: {\r\n ...biddingScheme,\r\n },\r\n },\r\n };\r\n\r\n setBasicOptionsShown([...basicOptions]);\r\n onDataChange({\r\n data: {\r\n ...patchData,\r\n adGroup: {\r\n ...data.adGroup,\r\n },\r\n },\r\n isValid: result.isValid,\r\n });\r\n\r\n if (isConversionAssociationWarningP3Enabled && isEditMode) {\r\n const message = getMessageType(data, patchData);\r\n if (message) {\r\n const updatedData = {\r\n wizardData: {\r\n ...wizardData,\r\n customConfirmMessages: [message],\r\n },\r\n };\r\n send(WIZARD_EVENTS.UPDATE_WIZARD_DATA, updatedData.wizardData);\r\n }\r\n }\r\n }\r\n };\r\n\r\n const onStoreSelectionChange = useCallback((store) => {\r\n if (productFilterRef.current) {\r\n productFilterRef.current.onSelectionChange(store);\r\n } else {\r\n console.log('productFilterRef.current is not available');\r\n }\r\n }, [productFilterRef]);\r\n\r\n const onFeedLabelChange = useCallback((feedLabel) => {\r\n productFilterRef.current.triggerFeedLabelChange(feedLabel);\r\n productFilterRef.current.removeProductGroup();\r\n }, [productFilterRef]);\r\n\r\n const onSalesCountryChange = useCallback((country) => {\r\n productFilterRef.current.triggerSalesCountryChange(country);\r\n }, [productFilterRef]);\r\n\r\n const onSelectFilterProducts = useCallback((isSelected) => {\r\n if (!isSelected) {\r\n productFilterRef.current.triggerFeedLabelChange(null);\r\n productFilterRef.current.triggerIsFeedFilterChecked(false);\r\n }\r\n }, [productFilterRef]);\r\n\r\n const updateProductConditionOptions = useCallback((options) => {\r\n productConditionsRef.current = options;\r\n }, [productConditionsRef]);\r\n\r\n const updateChildLevelProductCondition = useCallback((option) => {\r\n if (option) {\r\n const updatedProductCondition = _.reject(productConditionsRef.current, item => item.Value === option.Value);\r\n productConditionsRef.current = [...updatedProductCondition, option];\r\n }\r\n }, [productConditionsRef]);\r\n\r\n useEffect(() => {\r\n // since we don't call getProductScope to get the correct country product data if customer selected All products and selected country.\r\n // so we should trigger manually to let it send call when change from All products to filter product.\r\n if (!isEditMode && campaign && !campaign.CampaignProductScope && campaign.SalesCountry && productFilterRef && productFilterRef.current) {\r\n const hasFilteredProducts = productFilterRef.current.hasFilteredProducts();\r\n if (!hasFilteredProducts) {\r\n productFilterRef.current.triggerSalesCountryChange(campaign.SalesCountry);\r\n }\r\n }\r\n }, [campaign, productFilterRef, isEditMode]);\r\n\r\n const campaignNameTitleDetails = useMemo(() => {\r\n let campaignDetail = '';\r\n if (campaign) {\r\n campaignDetail = i18n.getString(_TL_('Name: {{Name}}'), { Name: campaign.Name });\r\n if (isSearch) {\r\n campaignDetail += i18n.getString(_TL_('. Priority: {{Priority}}'), { Priority: campaign.Priority });\r\n }\r\n }\r\n return campaignDetail;\r\n }, [campaign, i18n, isSearch]);\r\n\r\n const campaignUrlOptions = useMemo(() => {\r\n if (campaign) {\r\n return {\r\n TrackingUrlTemplate: campaign.TrackingUrlTemplate,\r\n FinalUrlSuffix: campaign.FinalUrlSuffix,\r\n UrlCustomParameters: campaign.UrlCustomParameters,\r\n };\r\n }\r\n\r\n return {\r\n TrackingUrlTemplate: '',\r\n FinalUrlSuffix: '',\r\n UrlCustomParameters: [],\r\n };\r\n }, [campaign]);\r\n\r\n const conversionGoalsTitleDetails = useMemo(() => getConversionGoalTitleDetails(i18n, campaign && campaign.conversionGoals), [campaign, i18n]);\r\n\r\n const storeTitleDetails = useMemo(() => {\r\n if (!campaignSettingsExpandedSections.includes('store-settings') && storeSettingRef && campaign) {\r\n const storeView = storeSettingRef.current;\r\n const storesData = {\r\n stores: getStores({ productData }),\r\n countries: getCountries({\r\n productData,\r\n legacyI18n: globalLegacyI18n,\r\n IsDomesticSimplifiedChineseEnabled: _.get(serverContext, ['Permissions', 'IsDomesticSimplifiedChineseEnabled'], false),\r\n }),\r\n errors: undefined,\r\n };\r\n return getStoreTitleDetails(i18n, storesData, storeView.viewModel.toObject(), !isSearch);\r\n }\r\n return '';\r\n }, [i18n, campaign, globalLegacyI18n, productData, serverContext, storeSettingRef, campaignSettingsExpandedSections, isSearch]);\r\n\r\n const productFilterTitleDetails = useMemo(() => {\r\n if (!campaignSettingsExpandedSections.includes('product-filter') && productFilterRef && campaign) {\r\n const productScope = productFilterRef.current.getProductScope();\r\n const hasFilteredProducts = productFilterRef.current.hasFilteredProducts();\r\n if (!hasFilteredProducts) {\r\n return i18n.getString(_TL_('All products'));\r\n }\r\n return getProductTileDetails(productScope);\r\n }\r\n return '';\r\n }, [campaign, productFilterRef, campaignSettingsExpandedSections, i18n]);\r\n\r\n const exclusionTitleDetails = useMemo(() => {\r\n if (isEditMode && !campaignSettingsExpandedSections.includes('base-exclusion')) {\r\n const exclusions = {};\r\n if (siteExclusionViewRef && siteExclusionViewRef.current) {\r\n exclusions.ExcludedSites = siteExclusionViewRef.current.getValues();\r\n }\r\n if (ipExclusionViewRef && ipExclusionViewRef.current) {\r\n exclusions.ExcludedIPs = ipExclusionViewRef.current.getValues();\r\n }\r\n return getExclusionsDetails(i18n, exclusions);\r\n }\r\n return '';\r\n }, [i18n, siteExclusionViewRef, ipExclusionViewRef, isEditMode, campaignSettingsExpandedSections]);\r\n\r\n const urlTitleDetails = useMemo(() => (isEditMode && campaign ? getUrlOptionsDetails(i18n, campaign) : ''), [isEditMode, campaign, i18n]);\r\n\r\n const budgetBidStrategyTitleDetails = useMemo(() => (\r\n isEditMode && campaign ? getBidBudgetTitleDetails(serverContext, i18n, campaign.BiddingScheme, campaign.Budget) : ''\r\n ), [campaign, i18n, serverContext, isEditMode]);\r\n\r\n const onCampaignNameChange = useCallback((ev) => {\r\n activity.signal(`onCampaignNameChange: ${_.get(ev, ['target', 'value'])}}`);\r\n }, [activity]);\r\n\r\n useEffect(() => {\r\n const prefixTitle = isEditMode ? 'onCampaignSettingPage' : 'onCampaignStep';\r\n if (activity && matchStepState(state, STEP_STATES.LOADING)) {\r\n activity.signal(`${prefixTitle}Loading - ${currentStates}`);\r\n }\r\n\r\n if (activity && matchStepState(state, STEP_STATES.SAVING)) {\r\n activity.signal(`${prefixTitle}Saving - ${currentStates}`);\r\n }\r\n }, [activity, currentStates, state, isEditMode]);\r\n\r\n useEffect(() => {\r\n if (campaign && campaign.BiddingScheme) {\r\n setIsCPSSelected(campaign.BiddingScheme.Type === biddingStrategyTypes.costPerSale);\r\n }\r\n }, [campaign]);\r\n\r\n useEffect(() => {\r\n send(WIZARD_EVENTS.UPDATE_WIZARD_DATA, { showRedirectToBMC });\r\n }, [showRedirectToBMC, send]);\r\n\r\n useEffect(() => {\r\n const isSaving = matchStepState(state, STEP_STATES.SAVING);\r\n if (isSaving && campaignStepIsValid === false && campaignSettingsExpandedSections.length === basicOptions.length) {\r\n setCampaignSettingsExpandedSections([...basicOptions]);\r\n }\r\n }, [campaignStepIsValid, setCampaignSettingsExpandedSections, basicOptions, send, state, campaignSettingsExpandedSections]);\r\n\r\n return (\r\n
\r\n { showRedirectToBMC ? :\r\n \r\n \r\n \r\n \r\n
\r\n {!isEditMode &&\r\n
\r\n \r\n \r\n \r\n
}\r\n
\r\n \r\n
\r\n \r\n \r\n }\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n >\r\n \r\n {isSearch && campaign && !isCPSSelected &&\r\n \r\n }\r\n \r\n {\r\n isEditMode &&\r\n }\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n >\r\n {\r\n campaign ? (\r\n \r\n ) : ()\r\n }\r\n \r\n }\r\n }\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n actuationProps={{\r\n expand: basicSettingsExpand,\r\n expandKey: 'store-settings',\r\n }}\r\n >\r\n {campaign && storeSettingRef && }\r\n \r\n }\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n actuationProps={{\r\n expand: basicSettingsExpand,\r\n expandKey: 'product-filter',\r\n }}\r\n >\r\n {campaign && productFilterRef &&\r\n }\r\n \r\n \r\n {\r\n isEditMode &&\r\n }>\r\n {campaign &&\r\n }\r\n \r\n }\r\n {\r\n isEditMode &&\r\n }\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n actuationProps={{\r\n expand: basicSettingsExpand,\r\n expandKey: 'campaign-url-options',\r\n }}\r\n >\r\n
\r\n \r\n {i18n.getString(_TL_('Set up the tracking and redirect information for your ads.'))}\r\n \r\n {campaign &&\r\n }\r\n
\r\n \r\n }\r\n }\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n actuationProps={{\r\n expand: basicSettingsExpand,\r\n expandKey: 'conversions',\r\n }}\r\n >\r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n }\r\n
\r\n );\r\n};\r\n\r\nCampaignSettingsStep.propTypes = {\r\n data: PropTypes.shape({\r\n adGroup: PropTypes.shape({}),\r\n campaign: PropTypes.shape({}),\r\n productData: PropTypes.shape({}),\r\n productFilterRef: PropTypes.shape({}),\r\n feedData: PropTypes.shape({}),\r\n storeSettingRef: PropTypes.shape({}),\r\n }).isRequired,\r\n onDataChange: PropTypes.func.isRequired,\r\n error: PropTypes.arrayOf(PropTypes.string),\r\n};\r\n\r\nCampaignSettingsStep.defaultProps = {\r\n error: undefined,\r\n};\r\n\r\n","import _ from 'underscore';\r\nimport Promise from 'bluebird';\r\nimport { useRef, useContext, useState, useEffect, useCallback, useMemo } from 'react';\r\nimport { Scopes } from '@bingads-webui-campaign-react/goal-selector';\r\nimport { generateNameSuggestionSuffix } from '@bingads-webui-campaign/audience-campaign-shared';\r\nimport { mergeData } from '@bingads-webui-campaign-react/product-services';\r\nimport { getFeedData } from '@bingads-webui-campaign/audience-campaign-creation-wizard';\r\nimport { withDFMCache } from '@bingads-webui/dfm-cache';\r\nimport { useWizardService, WIZARD_EVENTS } from '@bingads-webui-react/wizard';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { ActivityContext, ScenarioContext } from '@bingads-webui-react/hoc-with-signal';\r\nimport { getErrorsPlaceholders, DeviceKeys } from '@bingads-webui-campaign-react/xandr-campaign';\r\nimport { getBudgetRange } from '@bingads-webui-campaign-legacy/common-grid-config/budget/get-budget-range';\r\nimport { ServerContext } from '@bingads-webui-campaign-react/server-context';\r\nimport jsdata from '@bingads-webui-component-legacy/js-data-campaign/index';\r\nimport { ScopeContext } from '@bingads-webui-react/scope-service';\r\nimport exclusionRepository from '@bingads-webui-campaign-legacy/advanced-settings/util/exclusion-repository';\r\nimport biddingStrategyTypes from '@bingads-webui-campaign-legacy/bidding-strategy/bidding-strategy-type';\r\nimport { CampaignSubTypes } from '@bingads-webui-campaign-react/constants';\r\nimport { AlertHelper } from '@bingads-webui-campaign/alert-helper';\r\nimport { InstrumentationContext } from '@bingads-webui-react/hoc-with-instrumentation';\r\nimport { showBudgetBidCampaignNotifications } from '@bingads-webui-campaign/import-shared-utils';\r\n\r\nimport { isSearchShoppingCampaign, getCampaignType, allSettledPromiseWrapper, getNoValidStore } from '../step-utils';\r\nimport { saveCampaign, loadCampaign, modelToViewModelForCampaign } from '../../model';\r\nimport { CREATE_SCENARIO } from '../../constants';\r\nimport { useWizardLog, LOG_STATUS, getProductData } from '../../shared';\r\n\r\nconst getDynamicFeedData = withDFMCache(getFeedData, 'getFeedScopeDFM', {});\r\nconst AudienceCampaignNamePrefix = _TL_('Shopping_Audience');\r\nconst SearchCampaignNamePrefix = _TL_('Shopping_Search');\r\n\r\nexport const getDefaultCampaign = ({\r\n isSearch,\r\n currencyCode,\r\n i18n,\r\n}) => ({\r\n Name: generateNameSuggestionSuffix(i18n.getString(isSearch ? SearchCampaignNamePrefix : AudienceCampaignNamePrefix)),\r\n Status: 'Paused',\r\n Budget: {\r\n Amount: getBudgetRange(currencyCode).Daily.Default,\r\n Type: 'DailyStandard',\r\n },\r\n BiddingScheme: {\r\n Type: 'EnhancedCpc',\r\n },\r\n Languages: ['All'],\r\n conversionGoals: {\r\n originalConversionGoals: [],\r\n goalSelection: [],\r\n goalScopeSelection: Scopes.ACCOUNT,\r\n },\r\n BudgetId: null,\r\n ProviderId: undefined,\r\n SalesCountry: null,\r\n FeedLabel: undefined,\r\n LocalInventoryAdsEnabled: false,\r\n finalUrlExpansionOptOut: false,\r\n ShoppableAdsEnabled: false,\r\n Priority: 'Low',\r\n ...isSearch ? {\r\n devices: [{\r\n device: DeviceKeys.Computers,\r\n bidAdjustment: 0,\r\n }, {\r\n device: DeviceKeys.Tablets,\r\n bidAdjustment: 0,\r\n }, {\r\n device: DeviceKeys.Smartphones,\r\n bidAdjustment: 0,\r\n }],\r\n } : {},\r\n ...getCampaignType(isSearch),\r\n});\r\n\r\nexport const useCampaignRepository = () => {\r\n const productFilterRef = useRef();\r\n const storeSettingRef = useRef();\r\n const i18n = useContext(I18nContext);\r\n const [siteExclusionView, setSiteExclusionView] = useState(null);\r\n const [ipExclusionView, setIPExclusionView] = useState(null);\r\n const { state, send } = useWizardService();\r\n const { flow, createScenario } = state.context.wizardData;\r\n const isCampaignCreate = createScenario === CREATE_SCENARIO.CREATE_CAMPAIGN;\r\n const scenarioContext = useContext(ScenarioContext);\r\n const activity = useContext(ActivityContext);\r\n const serverContext = useContext(ServerContext);\r\n const instrumentation = useContext(InstrumentationContext);\r\n const isShoppableAdsEnabled = _.get(serverContext, ['DynamicPermissions', 'ShoppableAds'], false);\r\n const isOdataGetProductScopeEnabled = _.get(serverContext, ['DynamicPermissions', 'OdataGetProductScope'], false);\r\n const currencyCode = _.get(serverContext, ['CurrentAccount', 'CurrencyCode'], 'USD');\r\n const isSearch = isSearchShoppingCampaign(flow);\r\n const { scope } = useContext(ScopeContext) || {};\r\n const { onStepLoadedLog, onStepSavedLog } = useWizardLog({ activity, wizardState: state, isSearch });\r\n const { cid, aid } = scope.values;\r\n const [savedCampaignId, setSavedCampaignId] = useState(null);\r\n const AlertCenter = useMemo(() => new AlertHelper({ i18n }), [i18n]);\r\n const logProductApi = (spendTime, scenario) => activity.signal(`productApiSpend-${isCampaignCreate ? 'create' : 'setting'}-${isSearch ? 'search' : 'audience'}-${scenario}: ${spendTime}`);\r\n\r\n const ipExclusionViewRef = useRef();\r\n const siteExclusionViewRef = useRef();\r\n const productConditionsRef = useRef();\r\n\r\n const internalGetProductData = useCallback(params => getProductData(params, serverContext), [serverContext]);\r\n const getAudienceProductDataWithCache = withDFMCache(internalGetProductData, 'getAudienceProductScopeDFM', {});\r\n const getProductDataWithCache = withDFMCache(internalGetProductData, 'getProductScopeDFM', {});\r\n\r\n const getCampaignFromViewModel = useCallback(({ campaignModel, productData, feedData }) => modelToViewModelForCampaign({\r\n campaignModel,\r\n locationCriterionsModel: [],\r\n dayTimeCriterionsModel: [],\r\n targetCriterionsModel: [],\r\n bundleCountries: [],\r\n productData,\r\n feedData,\r\n permissions: serverContext.Permissions,\r\n }).data, [serverContext.Permissions]);\r\n\r\n useEffect(() => {\r\n if (ipExclusionView) {\r\n ipExclusionViewRef.current = ipExclusionView;\r\n }\r\n if (siteExclusionView) {\r\n siteExclusionViewRef.current = siteExclusionView;\r\n }\r\n }, [siteExclusionView, ipExclusionView]);\r\n\r\n const load = () => {\r\n onStepLoadedLog({ status: LOG_STATUS.LOAD_START });\r\n const {\r\n campaign: savedCampaign,\r\n productData: savedProductData,\r\n feedData: savedFeedData,\r\n } = state.context.wizardData;\r\n\r\n const campaignId = savedCampaign ? savedCampaign.Id : undefined;\r\n\r\n const productParams = campaignId ? { campaignId } : {};\r\n // in setting page.\r\n if (!isCampaignCreate) {\r\n const savedSalesCountry = _.get(savedCampaign, ['CampaignSettings', 0, 'SalesCountry']);\r\n const savedFeedLabel = _.get(savedCampaign, ['CampaignSettings', 0, 'FeedLabel']);\r\n\r\n if (savedSalesCountry) {\r\n productParams.salesCountry = savedSalesCountry;\r\n }\r\n if (savedFeedLabel) {\r\n productParams.feedLabel = savedFeedLabel;\r\n }\r\n if (!isSearch) {\r\n productParams.getCategoryFullData = true;\r\n productParams.getProductTypeFullData = true;\r\n productParams.salesCountry = 'US'; // For audience shopping. We only support US for now.\r\n }\r\n } else {\r\n productParams.getProductConditionOptions = true;\r\n productParams.getSalesCountryCollection = true;\r\n productParams.getDynamicDataFeedOptions = true;\r\n\r\n if (!isSearch) {\r\n productParams.getCategoryFullData = true;\r\n productParams.getProductTypeFullData = true;\r\n productParams.salesCountry = 'US'; // For audience shopping. We only support US for now.\r\n }\r\n }\r\n\r\n const loadPromises = {};\r\n if (campaignId) {\r\n if (isCampaignCreate) {\r\n loadPromises.campaign = Promise.resolve(savedCampaign);\r\n } else {\r\n loadPromises.campaign = loadCampaign(cid, aid, campaignId);\r\n }\r\n } else {\r\n loadPromises.campaign = getDefaultCampaign({ isSearch, currencyCode, i18n });\r\n }\r\n if (!isSearch) {\r\n loadPromises.feedData = savedFeedData ? Promise.resolve(savedFeedData) : getDynamicFeedData();\r\n }\r\n let productCall = null;\r\n if (!savedProductData) {\r\n const req = isSearch ? getProductDataWithCache(productParams) : getAudienceProductDataWithCache(productParams);\r\n productCall = () => {\r\n const nTime = Date.now();\r\n return req.then((pData) => {\r\n logProductApi(Date.now() - nTime, 'load');\r\n\r\n if (isOdataGetProductScopeEnabled) {\r\n const mergedData = mergeData(pData);\r\n\r\n return mergedData;\r\n }\r\n\r\n return pData;\r\n });\r\n };\r\n } else {\r\n productConditionsRef.current = savedProductData.ProductConditionOptions;\r\n productCall = () => Promise.resolve(savedProductData);\r\n }\r\n\r\n return Promise.props({\r\n ...loadPromises,\r\n productData: productCall(),\r\n }).then(({\r\n campaign,\r\n productData,\r\n feedData,\r\n }) => {\r\n onStepLoadedLog({ status: LOG_STATUS.LOAD_SUCCESS, msg: getNoValidStore(productData, feedData) ? 'NoStore' : 'HasStore' });\r\n const productDataSource = productData;\r\n productDataSource.ProductCollectionAccounts = _.filter(productData.ProductCollectionAccounts, store => !store.IsCoOpStore);\r\n productConditionsRef.current = productData.ProductConditionOptions;\r\n return {\r\n campaign: isCampaignCreate ? campaign : getCampaignFromViewModel({\r\n campaignModel: campaign,\r\n productData,\r\n feedData,\r\n }),\r\n productData: productDataSource,\r\n productConditionsRef, // when salesCountry change, we should save the productConditions and update the productData\r\n feedData: feedData || {},\r\n productFilterRef,\r\n storeSettingRef,\r\n ipExclusionViewRef,\r\n siteExclusionViewRef,\r\n setSiteExclusionView,\r\n setIPExclusionView,\r\n };\r\n });\r\n };\r\n\r\n const save = ({ data }) => {\r\n const {\r\n campaign,\r\n productData,\r\n productConditionsRef: savedProductConditions,\r\n } = data;\r\n onStepSavedLog({ status: LOG_STATUS.SAVE_START });\r\n let model = _.extend({}, campaign);\r\n const isEditMode = campaign.Id || savedCampaignId;\r\n\r\n if (savedCampaignId) {\r\n model.Id = savedCampaignId;\r\n }\r\n\r\n // In campaign settings page, support swtich between CPS and Non-CPS.\r\n if (isEditMode) {\r\n const isCostPerSaleEnabled = _.get(serverContext, ['Permissions', 'IsCostPerSaleEnabled'], false);\r\n\r\n if (campaign.BiddingScheme && campaign.BiddingScheme.Type === biddingStrategyTypes.costPerSale) {\r\n model.PersonalizedOffersEnabled = true;\r\n model.CashbackPercent = 10;\r\n model.CashbackScope = 'Product';\r\n model.Priority = 'High';\r\n } else if (isCostPerSaleEnabled && model.CampaignSubType !== CampaignSubTypes.AudienceDynamicFeedBased) {\r\n // PersonalizedOffersEnabled should be set to true/false only when CPS pilot is enabled, otherwise it will cause PersonalizedOffersAccountNotInPilot error.\r\n model.PersonalizedOffersEnabled = false;\r\n model.CashbackPercent = 'delete_value';\r\n model.CashbackScope = 'delete_value';\r\n } else {\r\n // This is for AudienceDynamicFeedBased campaign or when CPS pilot is not enabled.\r\n delete model.PersonalizedOffersEnabled;\r\n delete model.CashbackPercent;\r\n delete model.CashbackScope;\r\n }\r\n }\r\n\r\n const storeSettingView = storeSettingRef.current;\r\n const productFilterView = productFilterRef.current;\r\n\r\n const isStoreValid = storeSettingView.validate();\r\n const isProductFilterValid = productFilterView.validate();\r\n\r\n if (!isStoreValid || !isProductFilterValid) {\r\n send(WIZARD_EVENTS.UPDATE_WIZARD_DATA, { campaignStepIsValid: false });\r\n return Promise.reject();\r\n }\r\n send(WIZARD_EVENTS.UPDATE_WIZARD_DATA, { campaignStepIsValid: true });\r\n\r\n if (!isSearch && !campaign.Id) {\r\n if (storeSettingView.isSelectedStore() || storeSettingView.selectedCategory === null) {\r\n model.CampaignSubType = CampaignSubTypes.AudienceFeedBased;\r\n } else {\r\n model.CampaignSubType = CampaignSubTypes.AudienceDynamicFeedBased;\r\n model.FeedId = storeSettingView.viewModel.FeedId();\r\n }\r\n }\r\n\r\n const storeSettingModel = storeSettingView.viewModel.toObject();\r\n // we don't need get Priority from storeSettingModel, since we separate it as an independent field.\r\n _.extend(model, _.omit(storeSettingModel, 'Priority'));\r\n\r\n const productScope = productFilterView.getProductScope();\r\n const hasFilteredProducts = productFilterView.hasFilteredProducts();\r\n\r\n let SalesCountryValue = model.SalesCountry;\r\n if (storeSettingView.isFeedProductFilterEnabled) {\r\n if (!storeSettingView.viewModel.isFeedFilterChecked()) {\r\n // choose neither feed label nor sales country\r\n model = _.omit(model, 'SalesCountry');\r\n model = _.omit(model, 'FeedLabel');\r\n SalesCountryValue = null;\r\n } else if (model.FeedLabel && model.FeedLabel.length > 0) {\r\n model = _.omit(model, 'SalesCountry');\r\n SalesCountryValue = null;\r\n } else {\r\n model = _.omit(model, 'FeedLabel');\r\n }\r\n if (isEditMode && !model.SalesCountry) {\r\n model.SalesCountry = 'delete_value';\r\n }\r\n if (isEditMode && !model.FeedLabel) {\r\n model.FeedLabel = 'delete_value';\r\n }\r\n }\r\n if (!isShoppableAdsEnabled) {\r\n model = _.omit(model, 'ShoppableAdsEnabled');\r\n }\r\n if (!isSearch) {\r\n model = _.omit(model, 'Priority');\r\n }\r\n if (hasFilteredProducts) {\r\n model.CampaignProductScope = _.defaults(productScope, {\r\n CampaignName: campaign.Name,\r\n });\r\n\r\n if (productData.CampaignCriterionsData) {\r\n model.CampaignProductScope.Id = productData.CampaignCriterionsData.Id;\r\n }\r\n } else {\r\n model = _.omit(model, 'CampaignProductScope');\r\n }\r\n const destroyProductScopeIfNeed = () => {\r\n if (productData.CampaignCriterionsData && !hasFilteredProducts) {\r\n return jsdata.CampaignProductScope.destroy(productData.CampaignCriterionsData.Id, { adapter: 'bulk', parentId: campaign.Id });\r\n }\r\n return Promise.resolve();\r\n };\r\n\r\n if (isEditMode) {\r\n model = _.omit(model, 'devices');\r\n }\r\n\r\n const saveCampaignPromise = saveCampaign({\r\n campaign: { data: model },\r\n updateCampaignStatus: isCampaignCreate,\r\n // adGroup: isEditMode ? null : { data: getAdGroup(campaign) }, // will create ad group only for first time\r\n }, {\r\n scenario: scenarioContext.name,\r\n activityLogger: scenarioContext.createActivity('saveDefaultCampaign'),\r\n i18n,\r\n });\r\n const saveExtensionsInSettingFlow = () => {\r\n if (isCampaignCreate) {\r\n return Promise.resolve();\r\n }\r\n const extensionData = {\r\n campaignId: campaign.Id,\r\n AdvanceSettings: {\r\n Exclusions: {\r\n ExcludedSites: siteExclusionView.getValues(),\r\n ExcludedIPs: ipExclusionView.getValues(),\r\n },\r\n },\r\n };\r\n return exclusionRepository.saveExtensions(extensionData, 'campaign')\r\n .then(() => {\r\n siteExclusionView.clearApiErrors();\r\n })\r\n .catch((response) => {\r\n if (response.NegativeSitesResult || response.NegativeIPsResult) {\r\n const { NegativeSitesResult: siteErrors, NegativeIPsResult: ipErrors } = response;\r\n if (siteExclusionView && siteErrors) {\r\n siteExclusionView.showErrors(siteErrors);\r\n } else {\r\n siteExclusionView.clearApiErrors();\r\n }\r\n if (ipExclusionView && ipErrors) {\r\n ipExclusionView.showErrors(ipErrors);\r\n } else {\r\n ipExclusionView.clearApiErrors();\r\n }\r\n // eslint-disable-next-line no-throw-literal\r\n throw 'exclusion error';\r\n }\r\n });\r\n };\r\n return new Promise((resolve, reject) => {\r\n allSettledPromiseWrapper([saveCampaignPromise, destroyProductScopeIfNeed(), saveExtensionsInSettingFlow()]).then((results) => {\r\n const allSuccess = _.every(results, result => result.status === 'fulfilled');\r\n if (allSuccess) {\r\n if (isEditMode) {\r\n const { activity: BudgetBidCampaignImportNotificationActivity } = instrumentation.createScenarioAndActivity({\r\n scenarioName: 'BudgetBidCampaignImportNotification',\r\n activityName: 'ShoppingCampaignSettingPage',\r\n });\r\n\r\n const { campaign: initialCampaign } = state.context.stepContexts.CAMPAIGN_SETTINGS.initialData;\r\n\r\n showBudgetBidCampaignNotifications({\r\n campaignItemList: [initialCampaign],\r\n oldBudget: initialCampaign.Budget,\r\n newBudget: campaign.Budget,\r\n oldBidStrategy: initialCampaign.BiddingScheme,\r\n newBidStrategy: campaign.BiddingScheme,\r\n activity: BudgetBidCampaignImportNotificationActivity,\r\n });\r\n }\r\n if (!isCampaignCreate) {\r\n send(WIZARD_EVENTS.EXIT);\r\n return resolve();\r\n }\r\n const campaignData = {\r\n ...results[0].value.campaign.data,\r\n SalesCountry: SalesCountryValue,\r\n FeedLabel: model.FeedLabel === 'delete_value' ? '' : model.FeedLabel,\r\n };\r\n\r\n const wizardUpdateData = {\r\n campaign: campaignData,\r\n feedData: data.feedData,\r\n productData,\r\n };\r\n const stepProps = {\r\n ...data,\r\n campaign: campaignData,\r\n productData,\r\n ...getErrorsPlaceholders(),\r\n };\r\n // if no product filtered, we don't need to get CampaignCriterions data.\r\n if (!hasFilteredProducts) {\r\n onStepSavedLog({ status: LOG_STATUS.SAVE_SUCCESS, msg: `Status: ${campaignData.Status}, Id: ${campaignData.Id}` });\r\n wizardUpdateData.productData = { ...productData, CampaignCriterionsData: null };\r\n stepProps.productData = { ...productData, CampaignCriterionsData: null };\r\n if (model.FeedId) {\r\n return loadCampaign(cid, aid, campaignData.Id).then((fullCampaign) => {\r\n const fullCampaignData = getCampaignFromViewModel({\r\n campaignModel: fullCampaign,\r\n productData,\r\n feedData: data.feedData,\r\n });\r\n send(WIZARD_EVENTS.UPDATE_WIZARD_DATA, { ...wizardUpdateData, campaign: fullCampaignData });\r\n resolve({ ...stepProps, campaign: fullCampaignData });\r\n });\r\n }\r\n send(WIZARD_EVENTS.UPDATE_WIZARD_DATA, wizardUpdateData);\r\n return resolve(stepProps);\r\n }\r\n\r\n const nTime = Date.now();\r\n return internalGetProductData({ campaignId: campaignData.Id, getCampaignCriterionsOnly: true }).then((pData) => {\r\n logProductApi(Date.now() - nTime, 'save');\r\n\r\n const newProductData = _.isArray(pData) ? mergeData(pData) : pData;\r\n\r\n onStepSavedLog({ status: LOG_STATUS.SAVE_SUCCESS, msg: `Status: ${campaignData.Status}, Id: ${campaignData.Id}` });\r\n if (campaignData.CampaignProductScope && newProductData.CampaignCriterionsData) {\r\n campaignData.CampaignProductScope.Id = newProductData.CampaignCriterionsData.Id;\r\n }\r\n const updatedProductData = {\r\n ...productData,\r\n CampaignCriterionsData: newProductData.CampaignCriterionsData,\r\n ProductConditionOptions: savedProductConditions.current || productData.ProductConditionOptions,\r\n };\r\n\r\n wizardUpdateData.productData = updatedProductData;\r\n wizardUpdateData.campaign = campaignData;\r\n\r\n stepProps.productData = updatedProductData;\r\n stepProps.campaign = campaignData;\r\n\r\n // if select dynamic feed and back to edit. We need to get the ProviderId from campaign setting. which not return from bulk upsert.\r\n if (model.FeedId) {\r\n return loadCampaign(cid, aid, campaignData.Id).then((fullCampaign) => {\r\n const fullCampaignData = getCampaignFromViewModel({\r\n campaignModel: fullCampaign,\r\n productData: updatedProductData,\r\n feedData: data.feedData,\r\n });\r\n send(WIZARD_EVENTS.UPDATE_WIZARD_DATA, { ...wizardUpdateData, campaign: fullCampaignData });\r\n resolve({ ...stepProps, campaign: fullCampaignData });\r\n });\r\n }\r\n send(WIZARD_EVENTS.UPDATE_WIZARD_DATA, wizardUpdateData);\r\n return resolve(stepProps);\r\n }).catch((error) => {\r\n onStepSavedLog({ status: LOG_STATUS.SAVE_FAIL, msg: error });\r\n send(WIZARD_EVENTS.UPDATE_WIZARD_DATA, wizardUpdateData);\r\n AlertCenter.showAlert(_.get(error, ['Errors', 0, 'Message']));\r\n return reject();\r\n });\r\n }\r\n\r\n // bulkupsert might be failed in some column. if campaign column is success. we should save campaignId to avoid duplicate campaign creation error.\r\n const campaignId = _.get(results[0], ['reason', 'campaign', 'data', 'Id']);\r\n if (campaignId > 0) {\r\n setSavedCampaignId(campaignId);\r\n }\r\n // const adGroupId = _.get(results[0], ['reason', 'adGroup', 'data', 'Id']);\r\n // if (adGroupId > 0) {\r\n // send(WIZARD_EVENTS.UPDATE_WIZARD_DATA, {\r\n // adGroup: results[0].reason.adGroup.data,\r\n // });\r\n // }\r\n\r\n const errors = _.map(results, (result) => {\r\n if (result.status === 'fulfilled') {\r\n return null;\r\n }\r\n\r\n const { serverErrors = {} } = result.reason;\r\n\r\n return serverErrors;\r\n });\r\n onStepSavedLog({ status: LOG_STATUS.SAVE_FAIL, msg: results });\r\n // eslint-disable-next-line prefer-promise-reject-errors\r\n return reject({ error: _.flatten(errors.filter(val => val !== null)) });\r\n });\r\n });\r\n };\r\n\r\n return {\r\n load,\r\n save,\r\n };\r\n};\r\n","import _ from 'underscore';\r\nimport { getCollapsiblePanelStyles } from '../../shared';\r\nimport { isSearchShoppingCampaign } from '../step-utils';\r\n\r\nexport const getAdGroupStyles = (components, theme) => ({\r\n collapsiblePanel: getCollapsiblePanelStyles(components, theme),\r\n toggle: {\r\n marginBottom: '0px',\r\n alignSelf: 'center',\r\n },\r\n adgroupShell: {\r\n '& .base-options-stack': {\r\n // width: '100%',\r\n },\r\n '& .collapse-container': {\r\n width: 'inherit',\r\n },\r\n '& .contextual-target': {\r\n maxWidth: '1000px',\r\n },\r\n '& .ms-ChoiceFieldGroup label': {\r\n padding: 0,\r\n fontWeight: 400,\r\n },\r\n },\r\n urlOptionsContainer: {\r\n maxWidth: 435,\r\n },\r\n});\r\n\r\nexport const getTargetingPanels = (flow) => {\r\n if (!isSearchShoppingCampaign(flow)) {\r\n return {\r\n basicOptions: [\r\n 'location-target',\r\n 'gender-target',\r\n 'age-target',\r\n // 'predictive-targeting',\r\n ],\r\n advancedOptions: [\r\n 'audience-target',\r\n 'company-target',\r\n 'industry-target',\r\n 'job-target',\r\n // // PT cannot be disabled until algorithm team fix an issue\r\n // 'predictive-targeting-control',\r\n ],\r\n moreOptions: [\r\n 'start-end-dates',\r\n 'ad-schedule',\r\n ],\r\n };\r\n }\r\n\r\n return {\r\n basicOptions: [\r\n 'location-target',\r\n // 'gender-target',\r\n // 'age-target',\r\n ],\r\n advancedOptions: [\r\n 'device-target',\r\n // 'audience-target',\r\n // 'company-target',\r\n // 'industry-target',\r\n // 'job-target',\r\n ],\r\n moreOptions: [\r\n 'start-end-dates',\r\n 'ad-schedule',\r\n 'ad-distribution',\r\n ],\r\n };\r\n};\r\n\r\nexport const getAdGroupSettingsPanels = (flow, showBid) => {\r\n if (!isSearchShoppingCampaign(flow)) {\r\n return {\r\n basicOptions: _.compact([\r\n 'ad-group-name',\r\n showBid ? 'bid-value' : null,\r\n 'url-options',\r\n 'start-end-dates',\r\n 'ad-rotation',\r\n ]),\r\n };\r\n }\r\n\r\n return {\r\n basicOptions: _.compact([\r\n 'ad-group-name',\r\n showBid ? 'bid-value' : null,\r\n 'url-options',\r\n 'start-end-dates',\r\n 'ad-distribution',\r\n 'ad-rotation',\r\n ]),\r\n };\r\n};\r\n","import React, { useCallback, useMemo } from 'react';\r\nimport { ValidatedTargetDevices } from '@bingads-webui-campaign-react/sponsored-campaign-creation';\r\nimport { withCustomValidation } from '@bingads-webui-react/validation';\r\n\r\nexport const convertToGridTargetDetails = devices => ({\r\n useParentLevel: false,\r\n parentLevelSettings: [],\r\n currentLevelSettings: devices ? devices.map(({\r\n device, bidAdjustment, Id, isBidAdjustmentNegative,\r\n }) => ({\r\n targeted: _TL_('Targeted'),\r\n device,\r\n bidAdjustmentDropdown: isBidAdjustmentNegative ? _TL_('Decrease by') : _TL_('Increase by'),\r\n bidAdjustmentInput: Math.abs(bidAdjustment),\r\n Id,\r\n })) : [],\r\n});\r\n\r\nconst convertFromGridTargetDetails = device => ({\r\n devices: device && device.currentLevelSettings && Array.isArray(device.currentLevelSettings) ?\r\n device.currentLevelSettings.map(({\r\n device: deviceName, bidAdjustmentDropdown, bidAdjustmentInput, Id,\r\n }) => {\r\n const isBidAdjustmentNegative = bidAdjustmentDropdown === 'Decrease by';\r\n\r\n return {\r\n device: deviceName,\r\n bidAdjustment: parseFloat(bidAdjustmentInput),\r\n // Needs another boolean to indicate the dropdown selection.\r\n // If we use `bidAdjustment < 0`, users cannot change the dropdown when the bidAdjustment is 0\r\n isBidAdjustmentNegative,\r\n Id,\r\n };\r\n }) : [],\r\n});\r\n\r\nconst InternalDeviceTargets = ({\r\n validationProps, updateValidation, ...restProps\r\n}) => {\r\n const { data: deviceTargets } = validationProps;\r\n\r\n const onChange = useCallback((errors, newData) => {\r\n const { device } = newData || {};\r\n updateValidation(errors, convertFromGridTargetDetails(device));\r\n }, [updateValidation]);\r\n\r\n const mappedData = useMemo(() => convertToGridTargetDetails(deviceTargets), [deviceTargets]);\r\n\r\n return ();\r\n};\r\n\r\nexport const DeviceTargets = withCustomValidation(InternalDeviceTargets);\r\n\r\n","import React, { useContext, useState, useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classNames from 'classnames';\r\nimport {\r\n Collapse,\r\n useCollapseState,\r\n ValidatedBootstrapPanel,\r\n ValidatedPanel,\r\n ValidatedFixedPanel,\r\n TextTitle,\r\n} from '@bingads-webui-campaign/wizard-jumbo-card';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { Panel as BootstrapPanel } from 'react-bootstrap';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { CampaignSubTypes } from '@bingads-webui-campaign-react/constants';\r\nimport {\r\n ValidatedAudiencePicker,\r\n formatAudience,\r\n} from '@bingads-webui-campaign-react/xandr-campaign';\r\nimport { MessageBarType, MessageBar } from '@fluentui/react';\r\nimport { ServerContext } from '@bingads-webui-campaign-react/server-context';\r\nimport { ValidatedCompanyPicker, formatCompany } from '@bingads-webui-campaign-react/display-plus-campaigns/src/steps/adgroup/components/company-target';\r\nimport { ValidatedIndustryPicker, formatIndustry } from '@bingads-webui-campaign-react/display-plus-campaigns/src/steps/adgroup/components/industry-target';\r\nimport { ValidatedJobFunctionPicker, formatJobFunction } from '@bingads-webui-campaign-react/display-plus-campaigns/src/steps/adgroup/components/job-function-target';\r\nimport { SectionShimmer, PredictiveTargetingControlHeader, ERROR_ENTITY } from '@bingads-webui-campaign-react/display-plus-campaigns';\r\nimport { withControlErrorHandling, withUnvalidatedControlErrors } from '@bingads-webui-campaign-react/error-handling';\r\nimport { andComp, entityIs, propertyIs } from '@bingads-webui-campaign-react/form-error';\r\nimport { getGridTargetTitleDetails } from '@bingads-webui-campaign/hotel-common-upsert';\r\nimport { DeviceImg } from '@bingads-webui-campaign-react/sponsored-campaign-creation';\r\n\r\nimport { getAdGroupStyles, getTargetingPanels } from '../utils';\r\nimport { isSearchShoppingCampaign } from '../../step-utils';\r\nimport { DeviceTargets as ValidatedTargetDevices, convertToGridTargetDetails } from './device-target';\r\n\r\nconst getPanelErrorProps = ({ needsAttention }) => (needsAttention ? {\r\n error: _TL_(\"* Something's wrong\"),\r\n} : {});\r\n\r\nconst ServerValidatedTargetDevice = withControlErrorHandling(withUnvalidatedControlErrors(ValidatedTargetDevices, {\r\n filter: andComp(entityIs(ERROR_ENTITY.Campaign), propertyIs('device')),\r\n}));\r\n\r\nconst TargetingPreferencesInternal = ({\r\n data,\r\n flow,\r\n}) => {\r\n const i18n = useContext(I18nContext);\r\n const serverContext = useContext(ServerContext);\r\n const isAudienceCampaing = !isSearchShoppingCampaign(flow);\r\n\r\n const {\r\n campaign,\r\n adGroup,\r\n } = data || {};\r\n\r\n const [optimizedTargetingEnabled, setOptimizedTargetingEnabled] = useState(false);\r\n\r\n const { advancedOptions } = getTargetingPanels(flow, serverContext);\r\n\r\n const {\r\n devices: campaignDeviceTargets,\r\n audiences: campaignAudiences,\r\n industry: campaignIndustry,\r\n negativeIndustry: campaignNegativeIndustry,\r\n jobTargets: campaignJobTargets,\r\n negativeJobTargets: campaignNegativeJobTargets,\r\n companyNameTargets: campaignCompanyNameTargets,\r\n negativeCompanyNameTargets: campaignNegativeCompanyNameTargets,\r\n BiddingScheme: biddingScheme,\r\n } = campaign || {};\r\n const { Type: bidStrategyType } = biddingScheme || {};\r\n\r\n const {\r\n audiences: adGroupAudiences,\r\n industry: adGroupIndustry,\r\n negativeIndustry: adGroupNegativeIndustry,\r\n jobTargets: adGroupJobTargets,\r\n negativeJobTargets: adGroupNegativeJobTargets,\r\n companyNameTargets: adGroupCompanyNameTargets,\r\n negativeCompanyNameTargets: adGroupNegativeCompanyNameTargets,\r\n } = adGroup || {};\r\n\r\n const audiences = isAudienceCampaing ? adGroupAudiences : campaignAudiences;\r\n const industry = isAudienceCampaing ? adGroupIndustry : campaignIndustry;\r\n const negativeIndustry = isAudienceCampaing ? adGroupNegativeIndustry : campaignNegativeIndustry;\r\n const jobTargets = isAudienceCampaing ? adGroupJobTargets : campaignJobTargets;\r\n const negativeJobTargets = isAudienceCampaing ? adGroupNegativeJobTargets : campaignNegativeJobTargets;\r\n const companyNameTargets = isAudienceCampaing ? adGroupCompanyNameTargets : campaignCompanyNameTargets;\r\n const negativeCompanyNameTargets = isAudienceCampaing ? adGroupNegativeCompanyNameTargets : campaignNegativeCompanyNameTargets;\r\n\r\n const classes = useDefaultStyles(getAdGroupStyles);\r\n const [\r\n allAdGroupTargetingSections,\r\n adgroupTargetingExpandedSections,\r\n setAdGroupTargetingExpandedSections,\r\n ] = useCollapseState(\r\n advancedOptions /* all sections */,\r\n [] /* initially expanded sections */\r\n );\r\n\r\n const getCampaignSubType = useMemo(() => {\r\n if (isAudienceCampaing) {\r\n return CampaignSubTypes.AudienceFeedBased;\r\n }\r\n return null;\r\n }, [isAudienceCampaing]);\r\n\r\n const adGroupTargetingSections = () => (\r\n \r\n }\r\n >\r\n {\r\n audiences ? (\r\n \r\n ) : ()\r\n }\r\n \r\n }\r\n >\r\n {\r\n campaignDeviceTargets ? (\r\n \r\n ) : ()\r\n }\r\n \r\n }\r\n >\r\n \r\n \r\n }\r\n >\r\n \r\n \r\n }\r\n >\r\n \r\n \r\n )\r\n : \r\n }\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n >\r\n \r\n {!optimizedTargetingEnabled ?\r\n i18n.getString(_TL_('Predictive targeting is automatically enabled. You can disable it by setting a targeting preference.'))\r\n : i18n.getString(_TL_('Turning off predictive targeting significantly limits our ability to help you reach the best audience for your campaign.'))\r\n }\r\n \r\n \r\n \r\n );\r\n\r\n return (\r\n <>\r\n (\r\n <>\r\n \r\n \r\n {i18n.getString(_TL_('Targeting preferences (optional)'))}\r\n \r\n \r\n \r\n \r\n
\r\n {adGroupTargetingSections()}\r\n
\r\n
\r\n
\r\n \r\n )}\r\n />\r\n \r\n );\r\n};\r\n\r\nTargetingPreferencesInternal.propTypes = {\r\n data: PropTypes.shape({\r\n locationTargets: PropTypes.shape({}),\r\n adGroup: PropTypes.shape({\r\n locationTargets: PropTypes.shape({}),\r\n deviceTypes: PropTypes.shape({}),\r\n }),\r\n }).isRequired,\r\n};\r\n\r\nexport const TargetingPreferences = TargetingPreferencesInternal;\r\n","import React, { useCallback, useContext, useMemo } from 'react';\r\nimport { Stack, ChoiceGroup, MessageBar, MessageBarType } from '@fluentui/react';\r\nimport { withCustomValidation } from '@bingads-webui-react/validation';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\n\r\nconst getAdRotationStyles = (components, theme) => ({\r\n AdRotationMessageBar: {\r\n backgroundColor: theme.palette.themeLighterAlt,\r\n },\r\n});\r\n\r\nconst AdRotation = ({\r\n updateValidation,\r\n validationProps,\r\n}) => {\r\n const {\r\n data,\r\n } = validationProps || {};\r\n // Must have an initial value or the Fluent UI will take the choice group as uncontrolled\r\n const { AdRotation: adRotation = 'OptimizeForClicks' } = data || {};\r\n const i18n = useContext(I18nContext);\r\n const classes = useDefaultStyles(getAdRotationStyles);\r\n\r\n const adRotationOptions = useMemo(() => [{\r\n key: 'OptimizeForClicks',\r\n text: i18n.getString(_TL_('Optimize - prioritize ads that perform well')),\r\n }, {\r\n key: 'RotateAdsEvenly',\r\n text: i18n.getString(_TL_('Rotate ads more evenly - include all ads, even those with a lower CTR')),\r\n }], [i18n]);\r\n\r\n const onChange = useCallback((ev, option) => {\r\n updateValidation([], {\r\n AdRotation: option.key,\r\n });\r\n }, [updateValidation]);\r\n\r\n return (\r\n
{i18n.getString(_TL_('Which ads do you want to show?'))}
\r\n \r\n \r\n {i18n.getString(_TL_('This ad rotation setting will be ignored if you use an automated bidding bid strategy, as automated bidding prioritizes better-performing ads.'))}\r\n \r\n
);\r\n};\r\n\r\nexport const ValidatedAdRotation = withCustomValidation(AdRotation);\r\n","import React, { useContext, useMemo } from 'react';\r\nimport classNames from 'classnames';\r\nimport _ from 'underscore';\r\nimport { Stack } from '@fluentui/react';\r\nimport { Alert } from '@bingads-webui-react/alert';\r\nimport { Panel as BootstrapPanel } from 'react-bootstrap';\r\nimport { withScope } from '@bingads-webui-react/scope-service';\r\nimport { AdGroup } from '@bingads-webui/campaign-odata-schemas';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { SEARCH_TYPE } from '@bingads-webui-react/bing-maps';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { buildLegacyI18n } from '@bingads-webui/build-legacy-i18n';\r\nimport { ValidationStringMap } from '@bingads-webui/validation-string-map';\r\nimport { useFormService } from '@bingads-webui-react/form';\r\nimport { ActuationGroup } from '@bingads-webui-campaign-react/actuator';\r\nimport { AttentionBeaconGroup } from '@bingads-webui-campaign-react/attention-beacon';\r\nimport { FormErrorGroup, UnmappedFormErrors, andComp, anyComp, entityIs, propertyIs } from '@bingads-webui-campaign-react/form-error';\r\nimport { ValidationGroup } from '@bingads-webui-react/validation';\r\nimport { Collapse, TextTitle, ValidatedBootstrapPanel, ValidatedFixedPanel, ValidatedPanel, collapseExpander, useCollapseState, getPanelErrorProps } from '@bingads-webui-campaign/wizard-jumbo-card';\r\nimport { ServerContext } from '@bingads-webui-campaign-react/server-context';\r\nimport { withControlErrorHandling, withUnvalidatedControlErrors } from '@bingads-webui-campaign-react/error-handling';\r\nimport { ValidatedLocationTargetSetting } from '@bingads-webui-campaign-react/step-wizard-controls';\r\nimport { getAdScheduleDetails, getLocationTargetTitleDetails } from '@bingads-webui-campaign-react/wizard-shared-components';\r\nimport { ValidatedLegacyDateSetting } from '@bingads-webui-campaign/date-setting';\r\nimport { ValidatedLegacyAdSchedule } from '@bingads-webui-campaign/ad-schedule';\r\nimport { AgeRange, Gender, formatAgeRanges, formatGenders } from '@bingads-webui-campaign-react/xandr-campaign';\r\nimport { StepHeader, ERROR_ENTITY, adScheduleIcon, ageTargetIcon, genderTargetIcon, locationTargetIcon, startDateEndDateIcon, SectionShimmer, getTargetSettingsFromCriterions, PredictiveTargetingHeader } from '@bingads-webui-campaign-react/display-plus-campaigns';\r\nimport { withPermissions } from '@bingads-webui-react/hoc-with-permissions';\r\n\r\nimport {\r\n TargetingPreferences,\r\n} from './components';\r\nimport { getTargetingPanels, getAdGroupStyles } from './utils';\r\nimport { isSearchShoppingCampaign } from '../step-utils';\r\nimport { ValidatedLegacyAdDistribution } from './components/ad-distribution';\r\n\r\nconst campaignLocationCriterions = anyComp(\r\n entityIs(ERROR_ENTITY.CampaignLocation),\r\n entityIs(ERROR_ENTITY.CampaignRadius),\r\n entityIs(ERROR_ENTITY.CampaignNegativeLocation),\r\n entityIs(ERROR_ENTITY.CampaignLocationIntent)\r\n);\r\n\r\nconst ServerValidatedLocationTargetSetting = withControlErrorHandling(withUnvalidatedControlErrors(\r\n ValidatedLocationTargetSetting,\r\n { filter: campaignLocationCriterions }\r\n));\r\n\r\nconst ServerValidatedLocationTargetSettingForAdGroup = withControlErrorHandling(withUnvalidatedControlErrors(\r\n ValidatedLocationTargetSetting,\r\n {\r\n filter: anyComp(\r\n entityIs(ERROR_ENTITY.AdGroupLocation),\r\n entityIs(ERROR_ENTITY.AdGroupRadius),\r\n entityIs(ERROR_ENTITY.AdGroupNegativeLocation),\r\n entityIs(ERROR_ENTITY.AdGroupLocationIntent)\r\n ),\r\n }\r\n));\r\n\r\nconst ServerValidatedAdDistributionSetting = withControlErrorHandling(withUnvalidatedControlErrors(\r\n ValidatedLegacyAdDistribution,\r\n {\r\n filter: andComp(entityIs(ERROR_ENTITY.AdGroup), propertyIs('adDistribution')),\r\n }\r\n));\r\n\r\nconst adGroupLevelTargetListForAudienceFlow = [\r\n 'locationTargets', 'genderTypes', 'ageRanges', 'companyNameTargets', 'negativeCompanyNameTargets',\r\n 'industry', 'negativeIndustry', 'jobTargets', 'negativeJobTargets', 'audiences',\r\n];\r\nconst adGroupPropertyList = [\r\n 'UseOptimizedTargeting', 'StartDate', 'EndDate', 'AdDistribution',\r\n];\r\n\r\nconst TargetStepInternal = ({\r\n data,\r\n onDataChange,\r\n scope,\r\n error,\r\n flowType,\r\n permissions,\r\n}) => {\r\n const i18n = useContext(I18nContext);\r\n const legacyI18n = useMemo(() => buildLegacyI18n(i18n, [ValidationStringMap]), [i18n]);\r\n const classes = useDefaultStyles(getAdGroupStyles);\r\n const { state: { context: { saveFailed: showAllValidationErrors } } } = useFormService();\r\n const isAudienceCampaign = !isSearchShoppingCampaign(flowType);\r\n const { AgeGenderDisclaimer: isAgeGenderDisclaimerEnabled } = _.result(permissions, 'dynamic', {});\r\n\r\n const {\r\n campaign,\r\n adGroup,\r\n bundleCountries,\r\n bundleLocationCriterions,\r\n } = data || {};\r\n const {\r\n locationTargets: campaignLocationTargets,\r\n genderTypes: campaignGenderTypes,\r\n ageRanges: campaignAgeRanges,\r\n } = campaign || {};\r\n const {\r\n locationTargets: adGroupLocationTargets,\r\n genderTypes: adGroupGenderTypes,\r\n ageRanges: adGroupAgeRanges,\r\n } = adGroup || {};\r\n const genderTypes = isAudienceCampaign ? adGroupGenderTypes : campaignGenderTypes;\r\n const ageRanges = isAudienceCampaign ? adGroupAgeRanges : campaignAgeRanges;\r\n const locationTargets = isAudienceCampaign ? adGroupLocationTargets : campaignLocationTargets;\r\n\r\n const serverContext = useContext(ServerContext);\r\n const { basicOptions, moreOptions } = getTargetingPanels(flowType, serverContext);\r\n const [\r\n allTargetSettingsSections,\r\n targetSettingsExpandedSections,\r\n setTargetSettingsExpandedSections,\r\n ] = useCollapseState(\r\n basicOptions /* all sections */,\r\n ['ad-group-name', 'location-target', 'predictive-targeting'] /* initially expanded sections */\r\n );\r\n const [\r\n allMoreSettingsSections,\r\n moreSettingsExpandedSections,\r\n setMoreSettingsExpandedSections,\r\n ] = useCollapseState(\r\n moreOptions /* all sections */,\r\n ['start-end-dates', 'ad-schedule', 'ad-distribution'] /* initially expanded sections */\r\n );\r\n const allBasicExpand = useMemo(\r\n () => collapseExpander({ setActiveKeys: setTargetSettingsExpandedSections }),\r\n [setTargetSettingsExpandedSections]\r\n );\r\n const [adScheduleView, setAdScheduleView] = React.useState(null);\r\n const [adDistributionView, setAdDistributionView] = React.useState(null);\r\n\r\n const onValidate = (result) => {\r\n if (data && data.campaign) {\r\n // Certain targets have to be created at ad group level for AWF\r\n const targets = _.pick(result.data, adGroupLevelTargetListForAudienceFlow);\r\n const adGroupProperties = _.pick(result.data, adGroupPropertyList);\r\n const campaignData = _.omit(result.data, adGroupLevelTargetListForAudienceFlow, adGroupPropertyList);\r\n\r\n const mergedData = {\r\n ...data,\r\n campaign: {\r\n ...data.campaign,\r\n ...campaignData,\r\n ...isAudienceCampaign ? {} : targets,\r\n },\r\n adGroup: {\r\n ...data.adGroup,\r\n ...isAudienceCampaign ? targets : {},\r\n ...adGroupProperties,\r\n },\r\n };\r\n\r\n if (isAudienceCampaign) {\r\n mergedData.adGroup.TargetSetting = getTargetSettingsFromCriterions(mergedData.adGroup); // For AWF, the default is target and bid\r\n }\r\n\r\n onDataChange({\r\n data: mergedData,\r\n isValid: result.isValid,\r\n });\r\n }\r\n };\r\n\r\n const locationTargetProps = {\r\n validationProps: {\r\n data: locationTargets,\r\n },\r\n allowNegativeLocationTargeting: true,\r\n isRadiusExcludeEnabled: false,\r\n bundleCountries,\r\n bundleLocationCriterions,\r\n hideIntent: isAudienceCampaign,\r\n defaultSelectedSearchType: SEARCH_TYPE.Boundary,\r\n bidStrategyType: 'placeholder',\r\n scope,\r\n strings: {\r\n description: i18n.getString(_TL_('For example, a country/region, state/province, or ZIP/postal code.')),\r\n },\r\n };\r\n\r\n return (\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n }\r\n >\r\n {\r\n isAudienceCampaign ? (\r\n \r\n ) : (\r\n \r\n )\r\n }\r\n \r\n }\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n actuationProps={{\r\n expand: allBasicExpand,\r\n expandKey: 'gender-target',\r\n }}\r\n >\r\n {\r\n genderTypes ? () : ()\r\n }\r\n \r\n }\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n actuationProps={{\r\n expand: allBasicExpand,\r\n expandKey: 'age-target',\r\n }}\r\n >\r\n {\r\n ageRanges ? () : ()\r\n }\r\n \r\n {\r\n isAudienceCampaign && (\r\n : }\r\n >\r\n
\r\n \r\n )\r\n }\r\n \r\n \r\n \r\n \r\n \r\n \r\n (\r\n <>\r\n \r\n \r\n {i18n.getString(_TL_('More options'))}\r\n \r\n \r\n \r\n \r\n
\r\n \r\n }\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n >\r\n {\r\n data && data.adGroup ? (\r\n \r\n ) : ()\r\n }\r\n \r\n }\r\n >\r\n {\r\n campaign ? (\r\n \r\n ) : ()\r\n }\r\n \r\n }\r\n >\r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n )}\r\n />\r\n
\r\n {\r\n isAgeGenderDisclaimerEnabled && (\r\n not use individuals’ demographics—such as age, gender, location, etc.—for the purpose of personalizing advertising, segmenting, or profiling customers.'))}\r\n level=\"Info\"\r\n icon={(
)}\r\n dismissible={false}\r\n />\r\n )\r\n }\r\n \r\n \r\n \r\n \r\n
\r\n );\r\n};\r\n\r\nexport const TargetStep = withPermissions(withScope(TargetStepInternal));\r\n","import React, { useContext, useMemo, useCallback } from 'react';\r\nimport _ from 'underscore';\r\nimport classNames from 'classnames';\r\nimport { Stack } from '@fluentui/react';\r\nimport { Collapse, ValidatedFixedPanel, ValidatedPanel, collapseExpander, useCollapseState, getPanelErrorProps } from '@bingads-webui-campaign/wizard-jumbo-card';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { buildLegacyI18n } from '@bingads-webui/build-legacy-i18n';\r\nimport { ValidationStringMap } from '@bingads-webui/validation-string-map';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { withScope } from '@bingads-webui-react/scope-service';\r\nimport { useFormService } from '@bingads-webui-react/form';\r\nimport { ActuationGroup } from '@bingads-webui-campaign-react/actuator';\r\nimport { AttentionBeaconGroup } from '@bingads-webui-campaign-react/attention-beacon';\r\nimport { ValidationGroup } from '@bingads-webui-react/validation';\r\nimport { FormErrorGroup, UnmappedFormErrors, andComp, entityIs, propertyIs } from '@bingads-webui-campaign-react/form-error';\r\nimport { withControlErrorHandling, withUnvalidatedControlErrors } from '@bingads-webui-campaign-react/error-handling';\r\nimport { ValidatedLegacyDateSetting } from '@bingads-webui-campaign/date-setting';\r\nimport { AdGroup } from '@bingads-webui/campaign-odata-schemas';\r\nimport { RemainingCharsValidatedTextField } from '@bingads-webui-campaign-react/remaining-chars-hint';\r\nimport { ERROR_ENTITY } from '@bingads-webui-campaign-react/xandr-video-campaign-shared-components';\r\nimport { AudienceBidValue, SectionShimmer, bidValueIcon, startDateEndDateIcon } from '@bingads-webui-campaign-react/display-plus-campaigns';\r\nimport { ServerContext } from '@bingads-webui-campaign-react/server-context';\r\nimport { ValidatedUrlOptionsParameter } from '@bingads-webui-campaign-react/validated-url-input';\r\nimport { UrlOptionsImg } from '@bingads-webui-campaign-react/perf-max-step-wizard';\r\n\r\nimport { getAdGroupSettingsPanels, getAdGroupStyles } from './utils';\r\nimport { ValidatedLegacyAdDistribution } from './components/ad-distribution';\r\nimport { ValidatedAdRotation } from './components';\r\nimport { isSearchShoppingCampaign, isAutoBidding } from '../step-utils';\r\nimport { TextTitle } from '../../shared/pannel-header';\r\n\r\nconst ServerValidatedAdDistributionSetting = withControlErrorHandling(withUnvalidatedControlErrors(\r\n ValidatedLegacyAdDistribution,\r\n {\r\n filter: andComp(entityIs(ERROR_ENTITY.AdGroup), propertyIs('adDistribution')),\r\n }\r\n));\r\n\r\nconst AdGroupSettingsInternal = ({\r\n data,\r\n onDataChange,\r\n error,\r\n flowType,\r\n}) => {\r\n const i18n = useContext(I18nContext);\r\n const legacyI18n = useMemo(() => buildLegacyI18n(i18n, [ValidationStringMap]), [i18n]);\r\n const classes = useDefaultStyles(getAdGroupStyles);\r\n const { state: { context: { saveFailed: showAllValidationErrors } } } = useFormService();\r\n const serverContext = useContext(ServerContext);\r\n\r\n const {\r\n adGroup,\r\n } = data || {};\r\n const { CeilingValue, FloorValue } = serverContext.ProductGroupBidRange || {};\r\n const bidStrategyType = _.get(data, ['campaign', 'BiddingScheme', 'Type'], '');\r\n const showBid = !isAutoBidding(bidStrategyType);\r\n\r\n const { basicOptions } = getAdGroupSettingsPanels(flowType, showBid);\r\n const [adDistributionView, setAdDistributionView] = React.useState(null);\r\n const [\r\n allAdGroupSettingsSections,\r\n adGroupSettingsExpandedSections,\r\n setAdGroupSettingsExpandedSections,\r\n ] = useCollapseState(basicOptions, basicOptions); // all expanded by default\r\n const allBasicExpanded = useMemo(\r\n () => collapseExpander({ setActiveKeys: setAdGroupSettingsExpandedSections }),\r\n [setAdGroupSettingsExpandedSections]\r\n );\r\n const isSearchShopping = isSearchShoppingCampaign(flowType);\r\n\r\n const onValidate = useCallback((result) => {\r\n if (data && data.adGroup) {\r\n onDataChange({\r\n data: {\r\n ...data,\r\n adGroup: {\r\n ...data.adGroup,\r\n ...result.data,\r\n SearchBid: data.adGroup.SearchBid,\r\n CpmBid: data.adGroup.CpmBid,\r\n },\r\n },\r\n isValid: result.isValid,\r\n });\r\n }\r\n }, [onDataChange, data]);\r\n\r\n return (\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n \r\n
\r\n \r\n \r\n }\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n >\r\n {\r\n adGroup ? (\r\n \r\n ) : \r\n }\r\n \r\n }\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n >\r\n {\r\n adGroup ? (\r\n \r\n ) : ()\r\n }\r\n \r\n }\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n actuationProps={{\r\n expand: allBasicExpanded,\r\n expandKey: 'url-options',\r\n }}\r\n >\r\n
\r\n \r\n {i18n.getString(_TL_('Set up the tracking and redirect information for your ads.'))}\r\n \r\n {\r\n adGroup ?\r\n : \r\n }\r\n
\r\n \r\n }\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n >\r\n \r\n \r\n {\r\n isSearchShopping && (\r\n }\r\n >\r\n \r\n \r\n )\r\n }\r\n }\r\n >\r\n \r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport const AdGroupSettings = withScope(AdGroupSettingsInternal);\r\n","/* eslint-disable */\r\nimport Promise from 'bluebird';\r\nimport _ from 'underscore';\r\nimport { useContext } from 'react';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { useWizardService, WIZARD_EVENTS, getWizardData } from '@bingads-webui-react/wizard';\r\nimport {\r\n loadBundleCountries,\r\n getErrorsPlaceholders,\r\n readTargetingCriterions as readAdGroupTargetingCriterions,\r\n readAudienceCriterions as readAdGroupAudienceCriterions,\r\n readLocationCriterions as readAdGroupLocationCriterions,\r\n modelToViewModelForLocationTargets,\r\n AdGroupNegativeReferenceId,\r\n} from '@bingads-webui-campaign-react/xandr-campaign';\r\nimport { ScopeContext } from '@bingads-webui-react/scope-service';\r\nimport { ActivityContext, ScenarioContext } from '@bingads-webui-react/hoc-with-signal';\r\nimport { ServerContext } from '@bingads-webui-campaign-react/server-context';\r\nimport { isAudienceShoppingCampaign } from '@bingads-webui-campaign-react/constants';\r\nimport { defaultBidForShoppingCampaign } from '@bingads-webui-campaign-legacy/budget/shared/defaultBid';\r\n\r\nimport {\r\n readTargetingCriterions,\r\n readDayTimeCriterions,\r\n readLocationCriterions,\r\n readAudienceCriterions\r\n} from '../../model/campaign-criterions';\r\nimport { allSettledPromiseWrapper, isSearchShoppingCampaign } from '../step-utils';\r\nimport { useWizardLog, LOG_STATUS } from '../../shared';\r\nimport {\r\n loadCampaign,\r\n modelToViewModelForAdGroup,\r\n modelToViewModelForCampaign,\r\n viewModelToModelForCampaign,\r\n viewModelToModelForConversionGoals,\r\n viewModelToBulkModelForAdSchedules,\r\n saveCampaign,\r\n saveAdGroup,\r\n convertMachineDateToAccountDate,\r\n} from '../../model';\r\nimport { CREATE_SCENARIO } from '../../constants';\r\n\r\nconst getAdGroup = ({\r\n campaign,\r\n locationCriterionsModel,\r\n bundleCountries,\r\n}) => {\r\n const isSearch = !isAudienceShoppingCampaign(campaign.CampaignType, campaign.CampaignSubType);\r\n const adgroup = {\r\n CampaignName: campaign.Name,\r\n CampaignSubType: campaign.CampaignSubType,\r\n CampaignBidStrategyName: campaign.BiddingScheme && campaign.BiddingScheme.Type,\r\n Name: 'Ad group #1',\r\n PricingModel: 'CPC',\r\n Medium: 'Search',\r\n Status: 'Paused', // Keep the ad group paused before go live so that we can update start date\r\n StartDate: convertMachineDateToAccountDate(new Date()), // Always use account timezone\r\n SearchBid: defaultBidForShoppingCampaign(),\r\n adSchedules: {\r\n dayTimeRangs: [],\r\n },\r\n ...modelToViewModelForLocationTargets({\r\n model: locationCriterionsModel,\r\n bundleCountries,\r\n adGroupId: AdGroupNegativeReferenceId,\r\n }),\r\n ...isSearch ? {} : {\r\n ageRanges: [\r\n 'EighteenToTwentyFive',\r\n 'TwentyFiveToThirtyFive',\r\n 'ThirtyFiveToFifty',\r\n 'FiftyToSixtyFive',\r\n 'SixtyFiveAndAbove',\r\n 'Unknown',\r\n ],\r\n initialAgeRanges: [],\r\n negativeAgeRanges: [],\r\n genderTypes: [\r\n 'Female',\r\n 'Male',\r\n 'Unknown',\r\n ],\r\n initialGenderTypes: [],\r\n negativeGenderTYpes: [],\r\n audiences: [],\r\n initialAudiences: [],\r\n initialIndustryTargets: [],\r\n industry: [],\r\n initialNegativeIndustryTargets: [],\r\n negativeIndustry: [],\r\n initialJobTargets: [],\r\n jobTargets: [],\r\n initialNegativeJobTargets: [],\r\n negativeJobTargets: [],\r\n initialCompanyNameTargets: [],\r\n companyNameTargets: [],\r\n initialNegativeCompanyNameTargets: [],\r\n negativeCompanyNameTargets: [],\r\n UseOptimizedTargeting: true,\r\n TargetSetting: 'Age;Gender',\r\n },\r\n };\r\n if (campaign.Id) {\r\n adgroup.Campaign = {\r\n Id: campaign.Id,\r\n };\r\n }\r\n return adgroup;\r\n};\r\n\r\nexport const useTargetRepository = () => {\r\n const i18n = useContext(I18nContext);\r\n const { scope } = useContext(ScopeContext) || {};\r\n const { cid, aid } = scope.values;\r\n\r\n const { state, send } = useWizardService();\r\n const { flow, createScenario } = getWizardData(state);\r\n\r\n const serverContext = useContext(ServerContext);\r\n const scenarioContext = useContext(ScenarioContext);\r\n const isPAAIMConsolidationEnabled = _.get(serverContext, ['DynamicPermissions', 'PAAIMConsolidation'], false);\r\n\r\n const activity = useContext(ActivityContext);\r\n const isSearch = isSearchShoppingCampaign(flow);\r\n const isCampaignCreate = createScenario === CREATE_SCENARIO.CREATE_CAMPAIGN;\r\n const { onStepLoadedLog, onStepSavedLog } = useWizardLog({ activity, wizardState: state, isSearch });\r\n\r\n const load = () => {\r\n onStepLoadedLog({ status: LOG_STATUS.LOAD_START });\r\n const savedCampaign = state.context.wizardData.campaign;\r\n const savedAdGroup = state.context.wizardData.adGroup;\r\n\r\n const adGroupId = savedAdGroup ? savedAdGroup.Id : null;\r\n const campaignId = savedCampaign ? savedCampaign.Id : null; // awf: 946842344, swf: 946842546\r\n\r\n const loadPromises = {\r\n bundleCountriesAndLocationCriterions: loadBundleCountries({ cid, aid, serverContext }),\r\n adGroup: savedAdGroup ? Promise.resolve(savedAdGroup) : Promise.resolve(),\r\n // saved campaigns are viewmodels\r\n campaign: savedCampaign ? Promise.resolve({\r\n ...viewModelToModelForCampaign({\r\n data: savedCampaign\r\n }),\r\n ...viewModelToModelForConversionGoals({\r\n data: savedCampaign\r\n })\r\n }) : loadCampaign(cid, aid, campaignId),\r\n dayTimeCriterions: readDayTimeCriterions({ cid, aid, campaignId }),\r\n locationCriterions: isSearch ? readLocationCriterions({ cid, aid, campaignId }) : (adGroupId ? readAdGroupLocationCriterions({ cid, aid, campaignId, adGroupId }) : Promise.resolve({ value: [] })),\r\n targetCriterions: isSearch ? readTargetingCriterions({ cid, aid, campaignId }) : (adGroupId ? readAdGroupTargetingCriterions({ cid, aid, campaignId, adGroupId }) : Promise.resolve({ value: [] })),\r\n audienceCriterions: isSearch ? readAudienceCriterions({ cid, aid, campaignId }) : (adGroupId ? readAdGroupAudienceCriterions({ cid, aid, campaignId, adGroupId }) : Promise.resolve({ value: [] })),\r\n };\r\n\r\n return Promise.props(loadPromises).then(({\r\n adGroup,\r\n campaign,\r\n locationCriterions,\r\n bundleCountriesAndLocationCriterions,\r\n dayTimeCriterions,\r\n targetCriterions,\r\n audienceCriterions,\r\n }) => {\r\n onStepLoadedLog({ status: LOG_STATUS.LOAD_SUCCESS });\r\n const adGroupData = adGroup ? modelToViewModelForAdGroup({\r\n adGroupModel: adGroup,\r\n campaignModel: campaign,\r\n i18n,\r\n isAudienceShoppingCampaign: !isSearch,\r\n locationCriterionsModel: !isSearch && locationCriterions ? locationCriterions.value : [],\r\n bundleCountries: !isSearch ? bundleCountriesAndLocationCriterions.bundleCountries : [],\r\n targetCriterionsModel: !isSearch && targetCriterions ? targetCriterions.value : [],\r\n audienceCriterionsModel: !isSearch && audienceCriterions ? audienceCriterions.value : [],\r\n }) : { data: getAdGroup({ campaign, locationCriterionsModel: locationCriterions.value, bundleCountries: bundleCountriesAndLocationCriterions.bundleCountries }), isValid: true, isDirty: false };\r\n const campaignData = modelToViewModelForCampaign({\r\n campaignModel: campaign,\r\n dayTimeCriterionsModel: dayTimeCriterions ? dayTimeCriterions.value : [],\r\n locationCriterionsModel: isSearch && locationCriterions ? locationCriterions.value : [],\r\n bundleCountries: isSearch ? bundleCountriesAndLocationCriterions.bundleCountries : [],\r\n targetCriterionsModel: isSearch && targetCriterions ? targetCriterions.value : [],\r\n audienceCriterionsModel: isSearch && audienceCriterions ? audienceCriterions.value : [],\r\n });\r\n\r\n // Only set the default value for AdRotation if it not in the creation wizard\r\n if (!isCampaignCreate) {\r\n adGroupData.data.AdRotation = adGroupData.data.AdRotation || 'OptimizeForClicks';\r\n }\r\n\r\n return {\r\n adGroup: adGroupData.data,\r\n campaign: campaignData.data,\r\n ...bundleCountriesAndLocationCriterions,\r\n ...getErrorsPlaceholders(),\r\n }\r\n });\r\n };\r\n\r\n const save = ({ data }) => {\r\n onStepSavedLog({ status: LOG_STATUS.SAVE_START });\r\n const {\r\n campaign,\r\n adGroup,\r\n bundleCountries,\r\n bundleLocationCriterions,\r\n } = data;\r\n\r\n const saveCampaignPromise = saveCampaign({\r\n campaign: { data: campaign },\r\n viewModelToBulkModelForAdSchedules,\r\n updateCampaignStatus: isCampaignCreate,\r\n bundleLocationCriterions: isSearch ? bundleLocationCriterions : null,\r\n bundleCountries: isSearch ? bundleCountries : null,\r\n }, {\r\n scenario: scenarioContext.name,\r\n activityLogger: scenarioContext.createActivity('saveDefaultCampaign'),\r\n i18n,\r\n });\r\n\r\n const saveAdGroupPromise = saveAdGroup({\r\n adGroup: { data: adGroup },\r\n campaign,\r\n bundleCountries: isSearch ? null : bundleCountries,\r\n bundleLocationCriterions: isSearch ? null : bundleLocationCriterions,\r\n saveAdGroupCriterions: !isSearch,\r\n isProductGroupAllowedForAudienceCampaign: isPAAIMConsolidationEnabled,\r\n }, {\r\n scenario: scenarioContext.name,\r\n activityLogger: scenarioContext.createActivity('saveAdGroup'),\r\n i18n,\r\n serverContext,\r\n });\r\n\r\n const savePromises = [saveCampaignPromise, saveAdGroupPromise];\r\n\r\n return new Promise((resolve, reject) => {\r\n allSettledPromiseWrapper(savePromises).then((results) => {\r\n const allSuccess = _.every(results, result => result.status === 'fulfilled');\r\n\r\n if (allSuccess) {\r\n\r\n const campaignData = results[0].value.campaign.data;\r\n const adGroupData = results[1].value.adGroup.data;\r\n\r\n onStepSavedLog({ status: LOG_STATUS.SAVE_SUCCESS, msg: `Status: ${campaignData.Status}, Id: ${campaignData.Id}` });\r\n send(WIZARD_EVENTS.UPDATE_WIZARD_DATA, {\r\n campaign: campaignData,\r\n adGroup: adGroupData,\r\n });\r\n\r\n return resolve({\r\n adGroup: adGroupData,\r\n campaign: campaignData,\r\n ...getErrorsPlaceholders(),\r\n });\r\n }\r\n\r\n const errors = _.map(results, (result) => {\r\n if (result.status === 'fulfilled') {\r\n return null;\r\n }\r\n\r\n const { serverErrors = {} } = result.reason;\r\n\r\n return serverErrors;\r\n });\r\n onStepSavedLog({ status: LOG_STATUS.SAVE_FAIL, msg: results });\r\n return reject({ error: _.flatten(errors.filter(val => val !== null)) });\r\n });\r\n });\r\n };\r\n\r\n return {\r\n load,\r\n save,\r\n };\r\n};","import { getCollapsiblePanelStyles } from '../../shared/styles/collapsible-panel';\r\n\r\nexport const getStyles = (components, theme) => ({\r\n divider: {\r\n padding: '5px 0px 0px 4px',\r\n width: '100%',\r\n borderTop: '2px solid #E0E0E0',\r\n marginTop: 30,\r\n marginBottom: 20,\r\n },\r\n budgetContainer: {\r\n '& .budget-title-container span': {\r\n fontWeight: 600,\r\n },\r\n },\r\n budgetBidShell: {\r\n display: 'flex',\r\n width: 966,\r\n '& .checkbox-inline, & .checkbox>label, & .radio-inline, & .radio>label, & label.checkbox, & label.radio': {\r\n '&:focus-within': {\r\n outline: 'none',\r\n },\r\n },\r\n '& .bid-and-budget #currencyLabelCostPerSale': {\r\n display: 'inline',\r\n },\r\n },\r\n collapsiblePanel: getCollapsiblePanelStyles(components, theme),\r\n});\r\n","import React, { useContext, useMemo, useState, useEffect } from 'react';\r\nimport classNames from 'classnames';\r\nimport _ from 'underscore';\r\n\r\nimport { Stack } from '@fluentui/react';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { useWizardService, matchStepState, STEP_STATES, getWizardData } from '@bingads-webui-react/wizard';\r\nimport { ActivityContext } from '@bingads-webui-react/hoc-with-signal';\r\nimport { useFormService } from '@bingads-webui-react/form';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { buildLegacyI18n } from '@bingads-webui/build-legacy-i18n';\r\nimport { ValidationStringMap } from '@bingads-webui/validation-string-map';\r\nimport { Collapse, useCollapseState, ValidatedPanel, getPanelErrorProps } from '@bingads-webui-campaign/wizard-jumbo-card';\r\nimport { Campaign } from '@bingads-webui/campaign-odata-schemas';\r\nimport { ValidationGroup } from '@bingads-webui-react/validation';\r\nimport { FormErrorGroup, UnmappedFormErrors } from '@bingads-webui-campaign-react/form-error';\r\nimport { ServerContext } from '@bingads-webui-campaign-react/server-context';\r\nimport { AttentionBeaconGroup } from '@bingads-webui-campaign-react/attention-beacon';\r\nimport { ActuationGroup } from '@bingads-webui-campaign-react/actuator';\r\nimport {\r\n AudienceBudgetBidStrategy,\r\n AudienceBidValue,\r\n StepHeader,\r\n SectionShimmer,\r\n bidValueIcon,\r\n budgetBidStrategyIcon,\r\n} from '@bingads-webui-campaign-react/display-plus-campaigns';\r\nimport { getBidBudgetTitleDetails } from '@bingads-webui-campaign-react/wizard-shared-components';\r\nimport { formatBidValue } from '@bingads-webui-campaign-react/summary-page';\r\n\r\nimport { getStyles } from './styles';\r\nimport { getBudgetBidSections, isAutoBidding } from '../step-utils';\r\nimport { TextTitle } from '../../shared/pannel-header';\r\n\r\nexport const BudgetBidStep = ({\r\n data,\r\n onDataChange,\r\n error,\r\n}) => {\r\n const classes = useDefaultStyles(getStyles);\r\n const activity = useContext(ActivityContext);\r\n\r\n const { state } = useWizardService();\r\n const { facInfo } = getWizardData(state);\r\n const currentStates = state.toStrings()[1];\r\n const { state: { context: { saveFailed: showAllValidationErrors } } } = useFormService();\r\n\r\n const {\r\n campaign,\r\n adGroup,\r\n } = data || {};\r\n\r\n const i18n = useContext(I18nContext);\r\n const legacyI18n = useMemo(() => buildLegacyI18n(i18n, [ValidationStringMap]), [i18n]);\r\n const biddingSchemeType = _.get(campaign, ['BiddingScheme', 'Type'], '');\r\n\r\n const [sharedBudgetView, setSharedBudgetView] = useState(null);\r\n const serverContext = useContext(ServerContext);\r\n const { CeilingValue, FloorValue } = serverContext.ProductGroupBidRange || {};\r\n\r\n const { basicOptions } = getBudgetBidSections();\r\n const [optionsShown, setOptionsShown] = useState(basicOptions);\r\n\r\n const onValidate = (result) => {\r\n if (campaign) {\r\n let adGroupData = {};\r\n const biddingScheme = _.get(result, ['data', 'BiddingScheme'], {});\r\n const currentBiddingSchemeType = biddingScheme.Type || biddingSchemeType;\r\n\r\n if (isAutoBidding(currentBiddingSchemeType)) {\r\n // for auto bidding strategies we hide the bid panel\r\n const filterOutBidPanel = optionsShown.filter(option => option !== 'bid-value');\r\n adGroupData = {\r\n SearchBid: null,\r\n };\r\n setOptionsShown([...filterOutBidPanel]);\r\n } else {\r\n setOptionsShown([...basicOptions]);\r\n\r\n if (result.data) {\r\n adGroupData = {\r\n SearchBid: result.data.SearchBid,\r\n };\r\n }\r\n }\r\n\r\n if (!_.isUndefined(biddingScheme.BidStrategyId)) {\r\n campaign.BidStrategyName = biddingScheme.BidStrategyName;\r\n }\r\n\r\n onDataChange({\r\n data: {\r\n ...data,\r\n campaign: {\r\n ...campaign,\r\n ...result.data,\r\n },\r\n adGroup: {\r\n ...adGroup,\r\n PricingModel: result.data.BiddingScheme && result.data.BiddingScheme.Type,\r\n ...adGroupData,\r\n },\r\n },\r\n isValid: result.isValid,\r\n });\r\n }\r\n };\r\n\r\n const [\r\n allBudgetBidSections,\r\n budgetBidExpandedSections,\r\n setBudgetBidExpandedSections,\r\n ] = useCollapseState(\r\n optionsShown /* all sections */,\r\n ['bid-and-budget', 'bid-value'] /* initially expanded sections */\r\n );\r\n\r\n const budgetBidStrategyTitleDetails = useMemo(() => (\r\n campaign ? getBidBudgetTitleDetails(serverContext, i18n, campaign.BiddingScheme, campaign.Budget) : ''\r\n ), [campaign, i18n, serverContext]);\r\n\r\n const bidTitleDetails = useMemo(() => (\r\n adGroup ? formatBidValue(i18n, adGroup.SearchBid, serverContext.CurrentAccount.CurrencyCode) : ''\r\n ), [adGroup, i18n, serverContext]);\r\n\r\n useEffect(() => {\r\n if (facInfo && facInfo.current.isFACCouponActive && sharedBudgetView) {\r\n sharedBudgetView.budgetView.ko_model.updateFeatureAdoptionCoupon({\r\n showFACHint: true,\r\n couponValue: facInfo.current.facCouponValue,\r\n });\r\n }\r\n }, [facInfo, sharedBudgetView]);\r\n\r\n useEffect(() => {\r\n if (activity && matchStepState(state, STEP_STATES.LOADING)) {\r\n activity.signal(`onBudgetBidStepLoading - ${currentStates}`);\r\n }\r\n\r\n if (activity && matchStepState(state, STEP_STATES.SAVING)) {\r\n activity.signal(`onBudgetBidStepSaving - ${currentStates}`);\r\n }\r\n }, [activity, currentStates, state]);\r\n\r\n return (\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n \r\n
\r\n
\r\n \r\n \r\n }\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n >\r\n {\r\n campaign ? (\r\n \r\n ) : ()\r\n }\r\n \r\n }\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n >\r\n {\r\n adGroup ? (\r\n \r\n ) : ()\r\n }\r\n \r\n \r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n );\r\n};\r\n","import Promise from 'bluebird';\r\nimport _ from 'underscore';\r\nimport { useContext } from 'react';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { useWizardService, getWizardData, WIZARD_EVENTS } from '@bingads-webui-react/wizard';\r\nimport { ScopeContext } from '@bingads-webui-react/scope-service';\r\nimport { ActivityContext, ScenarioContext } from '@bingads-webui-react/hoc-with-signal';\r\nimport { ServerContext } from '@bingads-webui-campaign-react/server-context';\r\nimport { getErrorsPlaceholders } from '@bingads-webui-campaign-react/xandr-campaign';\r\nimport biddingStrategyTypes from '@bingads-webui-campaign-legacy/bidding-strategy/bidding-strategy-type';\r\nimport { CampaignSubTypes } from '@bingads-webui-campaign-react/constants';\r\nimport { defaultBidForShoppingCampaign } from '@bingads-webui-campaign-legacy/budget/shared/defaultBid';\r\n\r\nimport {\r\n loadCampaign,\r\n loadAdGroup,\r\n modelToViewModelForAdGroup,\r\n saveAdGroup,\r\n saveCampaign,\r\n} from '../../model';\r\nimport { isSearchShoppingCampaign } from '../step-utils';\r\nimport { useWizardLog, LOG_STATUS } from '../../shared';\r\n\r\nexport const useBudgetBidRepository = () => {\r\n const i18n = useContext(I18nContext);\r\n\r\n const serverContext = useContext(ServerContext);\r\n const scenarioContext = useContext(ScenarioContext);\r\n const activity = useContext(ActivityContext);\r\n const isPAAIMConsolidationEnabled = _.get(serverContext, ['DynamicPermissions', 'PAAIMConsolidation'], false);\r\n\r\n const { scope } = useContext(ScopeContext) || {};\r\n const { cid, aid } = scope.values;\r\n\r\n const { state, send } = useWizardService();\r\n const { flow } = getWizardData(state);\r\n const isAudienceShoppingCampaign = !isSearchShoppingCampaign(flow);\r\n const { onStepLoadedLog, onStepSavedLog } = useWizardLog({ activity, wizardState: state, isSearch: !isAudienceShoppingCampaign });\r\n\r\n const load = () => {\r\n onStepLoadedLog({ status: LOG_STATUS.LOAD_START });\r\n const savedCampaign = state.context.wizardData.campaign;\r\n const savedAdGroup = state.context.wizardData.adGroup;\r\n\r\n const adGroupId = savedAdGroup ? savedAdGroup.Id : null;\r\n const campaignId = savedCampaign ? savedCampaign.Id : null;\r\n\r\n const loadPromises = {\r\n adGroup: savedAdGroup ? Promise.resolve(savedAdGroup) : loadAdGroup(cid, aid, campaignId, adGroupId),\r\n campaign: savedCampaign ? Promise.resolve(savedCampaign) : loadCampaign(cid, aid, campaignId),\r\n };\r\n\r\n return Promise.props(loadPromises).then(({\r\n adGroup,\r\n campaign,\r\n }) => {\r\n onStepLoadedLog({ status: LOG_STATUS.LOAD_SUCCESS });\r\n const adGroupData = modelToViewModelForAdGroup({\r\n adGroupModel: {\r\n ...adGroup,\r\n SearchBid: adGroup.SearchBid !== undefined ? adGroup.SearchBid : defaultBidForShoppingCampaign(),\r\n },\r\n campaignModel: campaign,\r\n i18n,\r\n isAudienceShoppingCampaign,\r\n });\r\n\r\n return {\r\n adGroup: adGroupData.data,\r\n campaign,\r\n ...getErrorsPlaceholders(),\r\n };\r\n });\r\n };\r\n\r\n\r\n const save = ({ data }) => {\r\n onStepSavedLog({ status: LOG_STATUS.SAVE_START });\r\n const { adGroup, campaign } = data;\r\n campaign.Status = 'Paused';\r\n const isCostPerSaleEnabled = _.get(serverContext, ['Permissions', 'IsCostPerSaleEnabled'], false);\r\n\r\n if (campaign.BiddingScheme && campaign.BiddingScheme.Type === biddingStrategyTypes.costPerSale) {\r\n campaign.PersonalizedOffersEnabled = true;\r\n campaign.CashbackPercent = 10;\r\n campaign.CashbackScope = 'Product';\r\n campaign.Priority = 'High';\r\n } else if (isCostPerSaleEnabled && campaign.CampaignSubType !== CampaignSubTypes.AudienceDynamicFeedBased) {\r\n // PersonalizedOffersEnabled should be set to true/false only when CPS pilot is enabled, otherwise it will cause PersonalizedOffersAccountNotInPilot error.\r\n campaign.PersonalizedOffersEnabled = false;\r\n campaign.CashbackPercent = 'delete_value';\r\n campaign.CashbackScope = 'delete_value';\r\n } else {\r\n // This is for AudienceDynamicFeedBased campaign or when CPS pilot is not enabled.\r\n delete campaign.PersonalizedOffersEnabled;\r\n delete campaign.CashbackPercent;\r\n delete campaign.CashbackScope;\r\n }\r\n\r\n const saveAdGroupsPromise = () => saveAdGroup({\r\n adGroup: { data: adGroup },\r\n campaign,\r\n updateProductPartitionBids: true,\r\n isProductGroupAllowedForAudienceCampaign: isPAAIMConsolidationEnabled,\r\n }, {\r\n scenario: scenarioContext.name,\r\n activityLogger: scenarioContext.createActivity('saveAdGroup'),\r\n i18n,\r\n serverContext,\r\n });\r\n\r\n const saveCampaignPromise = () => saveCampaign({\r\n campaign: { data: campaign },\r\n }, {\r\n scenario: scenarioContext.name,\r\n activityLogger: scenarioContext.createActivity('saveDefaultCampaign'),\r\n i18n,\r\n });\r\n\r\n // Save campaign first, then save ad groups.\r\n // When change from CPS to some other bidding strategy,\r\n // we need to save campaign first, to prevent BidCannotBeManagedForBiddingScheme error in adgroup save.\r\n return saveCampaignPromise().then(campaignResult => saveAdGroupsPromise().then((adGroupResult) => {\r\n const campaignData = campaignResult.campaign.data;\r\n onStepSavedLog({ status: LOG_STATUS.SAVE_SUCCESS, msg: `Status: ${campaignData.Status}, Id: ${campaignData.Id}` });\r\n send(WIZARD_EVENTS.UPDATE_WIZARD_DATA, {\r\n campaign: campaignData,\r\n adGroup: adGroupResult.adGroup.data,\r\n });\r\n\r\n return Promise.resolve({\r\n adGroup: adGroupResult.adGroup.data,\r\n campaign: campaignData,\r\n ...getErrorsPlaceholders(),\r\n });\r\n })).catch((error) => {\r\n const { serverErrors = {} } = error;\r\n onStepSavedLog({ status: LOG_STATUS.SAVE_FAIL, msg: serverErrors });\r\n // eslint-disable-next-line prefer-promise-reject-errors\r\n return Promise.reject({ error: serverErrors });\r\n });\r\n };\r\n\r\n return {\r\n load,\r\n save,\r\n };\r\n};\r\n","import _ from 'underscore';\r\nimport React from 'react';\r\nimport { Activity } from '@bingads-webui-react/hoc-with-signal';\r\nimport { getNeedConfirming } from '@bingads-webui-campaign-react/campaign-settings-utils';\r\n\r\nimport {\r\n CampaignSettingsStep,\r\n TargetStep,\r\n BudgetBidStep,\r\n SummaryStep,\r\n useCampaignRepository,\r\n useBudgetBidRepository,\r\n useSummaryRepository,\r\n useTargetRepository,\r\n} from './index';\r\nimport { STEP_PATHS, CREATE_SCENARIO } from '../constants';\r\nimport { AdGroupSettings } from './adgroup-settings';\r\n\r\nexport const getStepConfig = ({ flowType, createScenario, permissions = {} }) => {\r\n if (createScenario === CREATE_SCENARIO.CREATE_CAMPAIGN) {\r\n return [{\r\n id: STEP_PATHS.CAMPAIGN_SETTINGS,\r\n view: props => ,\r\n repository: useCampaignRepository,\r\n viewProps: { flowType },\r\n }, {\r\n id: STEP_PATHS.TARGET_SETTINGS,\r\n view: props => ,\r\n repository: useTargetRepository,\r\n viewProps: { flowType },\r\n }, {\r\n id: STEP_PATHS.BUDGET_AND_BIDS,\r\n view: props => ,\r\n repository: useBudgetBidRepository,\r\n viewProps: { flowType },\r\n },\r\n {\r\n id: STEP_PATHS.SUMMARY,\r\n view: props => ,\r\n repository: useSummaryRepository,\r\n }];\r\n }\r\n\r\n if (createScenario === CREATE_SCENARIO.UPDATE_CAMPAIGN) {\r\n const stepConfig = {\r\n id: STEP_PATHS.CAMPAIGN_SETTINGS,\r\n view: props => ,\r\n repository: useCampaignRepository,\r\n viewProps: { flowType, createScenario },\r\n };\r\n\r\n if (_.get(permissions, ['dynamic', 'ConversionAssociationWarningP3'], false)) {\r\n stepConfig.machineOptions = {\r\n guards: {\r\n needsConfirming: context => getNeedConfirming(permissions, context),\r\n },\r\n };\r\n }\r\n\r\n return [stepConfig];\r\n }\r\n\r\n return [{\r\n id: STEP_PATHS.AD_GROUP_SETTINGS,\r\n view: props => ,\r\n repository: useTargetRepository,\r\n viewProps: { flowType, createScenario },\r\n }];\r\n};\r\n\r\n// for now. AWF and SWF share the same step list. if they are different, we can return different step list based on the flow\r\nexport const getStepListConfig = ({ i18n, createScenario }) => {\r\n if (createScenario === CREATE_SCENARIO.CREATE_CAMPAIGN) {\r\n return [{\r\n id: STEP_PATHS.CAMPAIGN_SETTINGS,\r\n title: i18n.getString(_TL_('Shopping settings')),\r\n },\r\n {\r\n id: STEP_PATHS.TARGET_SETTINGS,\r\n title: i18n.getString(_TL_('Targeting')),\r\n },\r\n {\r\n id: STEP_PATHS.BUDGET_AND_BIDS,\r\n title: i18n.getString(_TL_('Budget & bids')),\r\n },\r\n {\r\n id: STEP_PATHS.SUMMARY,\r\n title: i18n.getString(_TL_('Summary')),\r\n }];\r\n }\r\n\r\n if (createScenario === CREATE_SCENARIO.UPDATE_CAMPAIGN) {\r\n return [{\r\n id: STEP_PATHS.CAMPAIGN_SETTINGS,\r\n title: i18n.getString(_TL_('Campaign Settings')),\r\n }];\r\n }\r\n\r\n return [{\r\n id: STEP_PATHS.AD_GROUP_SETTINGS,\r\n title: i18n.getString(_TL_('Ad Group Settings')),\r\n }];\r\n};\r\n\r\nexport const getFlow = ({ createScenario }) => {\r\n if (createScenario === CREATE_SCENARIO.CREATE_CAMPAIGN) {\r\n return [\r\n STEP_PATHS.CAMPAIGN_SETTINGS,\r\n STEP_PATHS.TARGET_SETTINGS,\r\n STEP_PATHS.BUDGET_AND_BIDS,\r\n STEP_PATHS.SUMMARY,\r\n ];\r\n }\r\n\r\n if (createScenario === CREATE_SCENARIO.UPDATE_CAMPAIGN) {\r\n return [STEP_PATHS.CAMPAIGN_SETTINGS];\r\n }\r\n\r\n return [STEP_PATHS.AD_GROUP_SETTINGS];\r\n};\r\n\r\nexport const getFirstStep = ({ createScenario }) => {\r\n switch (createScenario) {\r\n case CREATE_SCENARIO.CREATE_CAMPAIGN:\r\n case CREATE_SCENARIO.UPDATE_CAMPAIGN:\r\n return STEP_PATHS.CAMPAIGN_SETTINGS;\r\n\r\n case CREATE_SCENARIO.UPDATE_ADGROUP:\r\n return STEP_PATHS.AD_GROUP_SETTINGS;\r\n\r\n default:\r\n throw new Error('Unexpected scenario!');\r\n }\r\n};\r\nexport const getDestinationWhenDone = ({ createScenario }) => {\r\n switch (createScenario) {\r\n case CREATE_SCENARIO.CREATE_CAMPAIGN:\r\n return 'campaigns';\r\n case CREATE_SCENARIO.UPDATE_ADGROUP:\r\n return 'ads';\r\n\r\n default:\r\n return 'adgroups';\r\n }\r\n};\r\n","import _ from 'underscore';\r\nimport React, { useMemo, useCallback, useContext } from 'react';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { Constants } from '@bingads-webui-theme-2018/theme-fluent';\r\nimport { ResponsiveStepList } from '@bingads-webui-react/step-progress-indicator';\r\nimport { useResponsiveSize } from '@bingads-webui-react/with-responsive-size';\r\nimport {\r\n useWizardService,\r\n getCurrentStepId,\r\n getCurrentFlow,\r\n WIZARD_EVENTS,\r\n} from '@bingads-webui-react/wizard';\r\n\r\nimport { getStepListConfig } from './step-config';\r\n\r\nexport const StepList = () => {\r\n const { state, send } = useWizardService();\r\n const i18n = useContext(I18nContext);\r\n\r\n const currentStepId = getCurrentStepId(state);\r\n const currentFlow = getCurrentFlow(state);\r\n const displayMode = useResponsiveSize(Constants.ResponsiveSizeBreakpoints);\r\n const { flow, createScenario } = state.context.wizardData;\r\n\r\n const stepListConfig = useMemo(() => getStepListConfig({\r\n i18n, flow, currentStepId, createScenario,\r\n }), [currentStepId, flow, i18n, createScenario]);\r\n\r\n const getDefaultOnItemClickFn = useCallback((step) => {\r\n let toStep;\r\n if (currentFlow.includes(step.id)) {\r\n toStep = step;\r\n } else if (!_.isEmpty(step.steps)) {\r\n const firstSubStep = _.find(step.steps, s => currentFlow.includes(s.id));\r\n if (firstSubStep) {\r\n toStep = firstSubStep;\r\n }\r\n }\r\n if (toStep && toStep.isBehind) {\r\n return () => {\r\n send(WIZARD_EVENTS.NAVIGATE_TO, {\r\n stepId: toStep.id,\r\n });\r\n };\r\n }\r\n return undefined;\r\n }, [currentFlow, send]);\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\n","import _ from 'underscore';\r\nimport React, { useContext, useCallback, useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { Stack, PrimaryButton, DefaultButton } from '@fluentui/react';\r\nimport {\r\n useWizardService,\r\n getIsFirstStep,\r\n getIsLastStep,\r\n getCurrentStepId,\r\n matchStepState,\r\n STEP_STATES,\r\n WIZARD_EVENTS,\r\n} from '@bingads-webui-react/wizard';\r\nimport { CancelButton } from '@bingads-webui-react/wizard-ui-library';\r\nimport { ActivityContext } from '@bingads-webui-react/hoc-with-signal';\r\nimport { STEP_PATHS } from './constants';\r\n\r\nconst SaveAndPublishButton = ({ adoptCoupon }) => {\r\n const i18n = useContext(I18nContext);\r\n\r\n const activity = useContext(ActivityContext);\r\n\r\n const { state, send } = useWizardService();\r\n const isBlocking = matchStepState(state, STEP_STATES.FETCHING) || matchStepState(state, STEP_STATES.LOADING) || matchStepState(state, STEP_STATES.SAVING);\r\n\r\n const onNextClicked = useCallback(() => {\r\n if (activity) {\r\n activity.signal('onSaveAndPublishClicked');\r\n }\r\n send(WIZARD_EVENTS.UPDATE_WIZARD_DATA, { isPublishing: true });\r\n adoptCoupon();\r\n send(WIZARD_EVENTS.SAVE_AND_EXIT);\r\n }, [activity, send, adoptCoupon]);\r\n\r\n const buttonText = useMemo(() => {\r\n const currentStep = getCurrentStepId(state);\r\n\r\n if (currentStep === STEP_PATHS.SUMMARY) {\r\n return i18n.getString(_TL_('Go live'));\r\n }\r\n\r\n return i18n.getString(_TL_('Save'));\r\n }, [i18n, state]);\r\n\r\n return (\r\n \r\n {buttonText}\r\n \r\n );\r\n};\r\n\r\nexport const SaveAndExitButton = ({ adoptCoupon }) => {\r\n const i18n = useContext(I18nContext);\r\n\r\n const activity = useContext(ActivityContext);\r\n\r\n const { state, send } = useWizardService();\r\n const isBlocking = matchStepState(state, STEP_STATES.FETCHING) || matchStepState(state, STEP_STATES.LOADING) || matchStepState(state, STEP_STATES.SAVING);\r\n\r\n const onNextClicked = useCallback(() => {\r\n if (activity) {\r\n activity.signal('onSaveAndExitButtonClicked');\r\n }\r\n send(WIZARD_EVENTS.UPDATE_WIZARD_DATA, { isAdGroupSaving: true });\r\n adoptCoupon();\r\n send(WIZARD_EVENTS.SAVE_AND_EXIT);\r\n }, [activity, send, adoptCoupon]);\r\n\r\n return (\r\n \r\n {i18n.getString(_TL_('Save and exit'))}\r\n \r\n );\r\n};\r\n\r\nexport const NextButton = ({ buttonText, disabled }) => {\r\n const i18n = useContext(I18nContext);\r\n\r\n const { state, send } = useWizardService();\r\n const isBlocking = matchStepState(state, STEP_STATES.FETCHING) || matchStepState(state, STEP_STATES.LOADING) || matchStepState(state, STEP_STATES.SAVING);\r\n\r\n const onNextClicked = useCallback(() => {\r\n send(WIZARD_EVENTS.SAVE_AND_NEXT);\r\n }, [send]);\r\n\r\n return (\r\n \r\n {buttonText || i18n.getString(_TL_('Next'))}\r\n \r\n );\r\n};\r\n\r\nexport const BackButton = ({ buttonText }) => {\r\n const i18n = useContext(I18nContext);\r\n\r\n const { state, send } = useWizardService();\r\n const isBlocking = matchStepState(state, STEP_STATES.FETCHING) || matchStepState(state, STEP_STATES.LOADING) || matchStepState(state, STEP_STATES.SAVING);\r\n\r\n const onBackClicked = useCallback(() => {\r\n send(WIZARD_EVENTS.BACK);\r\n }, [send]);\r\n\r\n return (\r\n \r\n {buttonText || i18n.getString(_TL_('Back'))}\r\n \r\n );\r\n};\r\nBackButton.propTypes = {\r\n buttonText: PropTypes.string,\r\n};\r\nBackButton.defaultProps = {\r\n buttonText: undefined,\r\n};\r\n\r\n\r\nNextButton.propTypes = {\r\n buttonText: PropTypes.string,\r\n disabled: PropTypes.bool,\r\n};\r\nNextButton.defaultProps = {\r\n buttonText: undefined,\r\n disabled: false,\r\n};\r\n\r\nexport const StepFooter = ({\r\n nextButtonText,\r\n nextDisabled,\r\n backButtonText,\r\n cancelButtonText,\r\n adoptCoupon,\r\n}) => {\r\n const { state } = useWizardService();\r\n const { showRedirectToBMC } = state.context.wizardData;\r\n const isFirstStep = getIsFirstStep(state);\r\n const isLastStep = getIsLastStep(state);\r\n\r\n const currentStep = getCurrentStepId(state);\r\n\r\n return (\r\n <>\r\n {!showRedirectToBMC ?\r\n \r\n {!isFirstStep && }\r\n {(!isLastStep ? : )}\r\n {currentStep === STEP_PATHS.TARGET_SETTINGS && }\r\n {isFirstStep && }\r\n \r\n :\r\n \r\n \r\n \r\n }\r\n \r\n );\r\n};\r\nStepFooter.propTypes = {\r\n nextButtonText: PropTypes.string,\r\n nextDisabled: PropTypes.bool,\r\n backButtonText: PropTypes.string,\r\n cancelButtonText: PropTypes.string,\r\n adoptCoupon: PropTypes.func,\r\n};\r\nStepFooter.defaultProps = {\r\n nextButtonText: undefined,\r\n nextDisabled: false,\r\n backButtonText: undefined,\r\n cancelButtonText: undefined,\r\n adoptCoupon: _.noop,\r\n};\r\n","import _ from 'underscore';\r\nimport React, { useMemo, useContext, useEffect, useRef } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport {\r\n Wizard,\r\n LayoutContainer,\r\n Layout,\r\n StepContainer,\r\n} from '@bingads-webui-react/wizard';\r\nimport {\r\n BusyBlocker,\r\n DefaultTemplate,\r\n CancelWizardDialog,\r\n ConfirmWizardDialog,\r\n} from '@bingads-webui-react/wizard-ui-library';\r\nimport { WizardPerfMarker } from '@bingads-webui-campaign/wizard-performance-marker';\r\nimport { Scenario, Activity } from '@bingads-webui-react/hoc-with-signal';\r\nimport { InstrumentationContext } from '@bingads-webui-react/hoc-with-instrumentation';\r\nimport { PerformanceMarkerProvider } from '@bingads-webui-campaign-react/performance-marker-provider';\r\nimport { withSiteMap, getRoutePathById } from '@bingads-webui-campaign-react/with-site-map';\r\nimport { withScope } from '@bingads-webui-react/scope-service';\r\nimport { MmpFetchProvider } from '@bingads-webui-campaign-react/xandr-campaign';\r\nimport { withPermissions } from '@bingads-webui-react/hoc-with-permissions';\r\nimport { setClarityTag } from '@bingads-webui-universal/clarity';\r\nimport { useShoppingFAC, ShoppingFACScenario } from '@bingads-webui-campaign-react/shopping-coupon-callout';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { useConfirmDialogConfigWithLogger } from '@bingads-webui-campaign-react/campaign-settings-wizard-v1-utils';\r\n\r\nimport { getStepConfig, StepList, getFlow, getFirstStep, getDestinationWhenDone, getAdTypeFromCurrentCampaign, isSearchShoppingCampaign } from './steps';\r\nimport { AD_TYPES_TO_FLOWS, CREATE_SCENARIO } from './constants';\r\nimport { StepFooter } from './footer';\r\n\r\nconst StandardShoppingCampaignWizardInternal = (props) => {\r\n const {\r\n siteMap, scope, perfMarker,\r\n campaignType: adType,\r\n createScenario = CREATE_SCENARIO.CREATE_CAMPAIGN,\r\n currentCampaign = undefined,\r\n currentAdGroup = undefined,\r\n serverContext,\r\n permissions,\r\n } = props;\r\n\r\n const isConversionAssociationWarningP3Enabled = _.get(permissions, ['dynamic', 'ConversionAssociationWarningP3'], false);\r\n const isCampaignCreation = createScenario === CREATE_SCENARIO.CREATE_CAMPAIGN;\r\n const isCampaignUpdate = createScenario === CREATE_SCENARIO.UPDATE_CAMPAIGN;\r\n const routeToNavigateToWhenDone = getRoutePathById(siteMap, getDestinationWhenDone({ createScenario }));\r\n const i18n = useContext(I18nContext);\r\n\r\n const instrumentation = useContext(InstrumentationContext);\r\n\r\n const wizardType = adType || getAdTypeFromCurrentCampaign(currentCampaign);\r\n\r\n const wizardPerfMarker = useMemo(() => (\r\n perfMarker.createChild(`StandardShoppingWizard-${wizardType}`)\r\n ), [perfMarker, wizardType]);\r\n\r\n const flowType = AD_TYPES_TO_FLOWS[wizardType];\r\n const initialStep = getFirstStep({ createScenario });\r\n\r\n const facCouponInfoRef = useRef({\r\n isFACCouponActive: false,\r\n facCouponValue: null,\r\n });\r\n\r\n const {\r\n isActive: isFACCouponActive,\r\n ShoppingFACCallout,\r\n adoptCouponFromActiveStatus,\r\n facCoupon,\r\n } = useShoppingFAC();\r\n\r\n const showFACCallout = useMemo(\r\n () => isSearchShoppingCampaign(flowType) && isCampaignCreation && _.get(serverContext, ['DynamicPermissions', 'FACForShopping'], false),\r\n [flowType, isCampaignCreation, serverContext]\r\n );\r\n\r\n useEffect(() => {\r\n facCouponInfoRef.current.isFACCouponActive = isFACCouponActive;\r\n facCouponInfoRef.current.facCouponValue = facCoupon && facCoupon.value;\r\n }, [isFACCouponActive, facCoupon]);\r\n\r\n const config = useMemo(() => ({\r\n id: 'standard-shopping-wizard',\r\n initialStep,\r\n steps: getStepConfig({ flowType, createScenario, permissions }),\r\n initialFlowFactors: { flow: flowType },\r\n initialWizardData: {\r\n flow: flowType,\r\n createScenario,\r\n campaign: currentCampaign,\r\n facInfo: facCouponInfoRef,\r\n adGroup: currentAdGroup,\r\n },\r\n getFlow: () => getFlow({ createScenario }),\r\n actions: {\r\n onDone: () => scope.save(routeToNavigateToWhenDone),\r\n onExited: () => scope.save(routeToNavigateToWhenDone),\r\n },\r\n attachStepActivities: true,\r\n }), [flowType, initialStep, routeToNavigateToWhenDone, scope, createScenario, currentCampaign, currentAdGroup, facCouponInfoRef, permissions]);\r\n\r\n useEffect(() => {\r\n setClarityTag({ StandardShopping: flowType });\r\n }, [flowType]);\r\n\r\n return (\r\n \r\n \r\n \r\n {showFACCallout && }\r\n \r\n \r\n \r\n \r\n {createScenario === CREATE_SCENARIO.CREATE_CAMPAIGN && }\r\n \r\n }\r\n nextButtonText={i18n.getString(_TL_('Save & go to next step'))}\r\n />\r\n \r\n \r\n {\r\n isConversionAssociationWarningP3Enabled && isCampaignUpdate\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\nStandardShoppingCampaignWizardInternal.propTypes = {\r\n siteMap: PropTypes.shape({}).isRequired,\r\n scope: PropTypes.shape({\r\n save: PropTypes.func.isRequired,\r\n }).isRequired,\r\n perfMarker: PropTypes.shape({\r\n createChild: PropTypes.func.isRequired,\r\n }).isRequired,\r\n campaignType: PropTypes.string.isRequired,\r\n createScenario: PropTypes.string,\r\n currentCampaign: PropTypes.shape({}),\r\n serverContext: PropTypes.shape({}).isRequired,\r\n currentAdGroup: PropTypes.shape({}),\r\n permissions: PropTypes.shape({}),\r\n};\r\n\r\nStandardShoppingCampaignWizardInternal.defaultProps = {\r\n currentCampaign: undefined,\r\n createScenario: CREATE_SCENARIO.CREATE_CAMPAIGN,\r\n currentAdGroup: undefined,\r\n permissions: {},\r\n};\r\n\r\nexport const StandardShoppingCampaignWizard = withPermissions(withScope(withSiteMap(StandardShoppingCampaignWizardInternal)));\r\n","import React, { useCallback, useContext, useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport { withCustomValidation } from '@bingads-webui-react/validation';\r\nimport { ActivityContext } from '@bingads-webui-react/hoc-with-signal';\r\nimport { AdDistribution } from '@bingads-webui-campaign/ad-distribution';\r\n\r\nconst defaultGetOptions = (initialAdDistribution, onChange) => ({\r\n AdDistribution: initialAdDistribution || 'BingYahooAndSearchPartners',\r\n campaignType: 'shopping',\r\n campaignSubType: undefined,\r\n Languages: [],\r\n isSPBCampaign: false,\r\n onChange,\r\n});\r\n\r\nconst LegacyAdDistributionWithCustomValidation = ({\r\n setAdDistributionView, updateValidation, validationProps, getOptions,\r\n}) => {\r\n const {\r\n data,\r\n } = validationProps || {};\r\n const {\r\n AdDistribution: adDistribution,\r\n } = data || {};\r\n\r\n const activity = useContext(ActivityContext);\r\n\r\n const onChange = useCallback((newData) => {\r\n updateValidation([], { AdDistribution: newData });\r\n\r\n if (activity) {\r\n // signal activity to parent\r\n activity.signal(`onLegacyAdDistributionChange - ${JSON.stringify(newData)}`);\r\n }\r\n }, [updateValidation, activity]);\r\n\r\n const options = useMemo(() => getOptions(adDistribution, onChange), [adDistribution, getOptions, onChange]);\r\n\r\n return (\r\n
\r\n \r\n
\r\n );\r\n};\r\n\r\nLegacyAdDistributionWithCustomValidation.propTypes = {\r\n validationProps: PropTypes.shape({\r\n data: PropTypes.shape({}),\r\n }).isRequired,\r\n updateValidation: PropTypes.func.isRequired,\r\n setAdDistributionView: PropTypes.func.isRequired,\r\n getOptions: PropTypes.func,\r\n};\r\n\r\nLegacyAdDistributionWithCustomValidation.defaultProps = {\r\n getOptions: defaultGetOptions,\r\n};\r\n\r\nexport const ValidatedLegacyAdDistribution = withCustomValidation(LegacyAdDistributionWithCustomValidation);\r\n","import { getRoutePathById } from '@bingads-webui-campaign-react/with-site-map';\r\n\r\nexport function navigateToRoute(routeStore, siteMap, id) {\r\n const pathname = getRoutePathById(siteMap, id);\r\n\r\n if (routeStore.state.history) {\r\n routeStore.state.history.push({\r\n pathname,\r\n search: routeStore.state.location.search,\r\n });\r\n }\r\n}\r\n","import _ from 'underscore';\r\nimport { getBulkErrorsLogMessage } from '@bingads-webui-campaign/audience-campaign-shared';\r\nimport { DependencyResolver } from '@bingads-webui-campaign/dependency-resolver';\r\n\r\nexport function handleErrors(activityLogger, response, setErrors) {\r\n const i18nErrors = DependencyResolver.get('component/api-errors-campaign/index');\r\n const i18n = DependencyResolver.get('component/i18n/loader!campaignui/feature/audience-campaign');\r\n\r\n if (response && response.entity) {\r\n const hasErrors = response && !_.isUndefined(response.errors);\r\n\r\n if (hasErrors) {\r\n if (response.errors.length) {\r\n const bulkApiErrors = i18nErrors.getBulkApiErrors(response.errors);\r\n const noMappedErrors = _.every(bulkApiErrors, error => error.code === error.message);\r\n\r\n if (_.isEmpty(bulkApiErrors) || noMappedErrors) {\r\n setErrors([{ message: i18n.getString('GenericErrorMessage_Short') }]);\r\n activityLogger.error(`${getBulkErrorsLogMessage(response.errors)}, Entity:${JSON.stringify(response.entity)}`);\r\n } else {\r\n setErrors(bulkApiErrors);\r\n\r\n activityLogger.trace(getBulkErrorsLogMessage(response.errors));\r\n _.each(response.errors, (error) => {\r\n activityLogger.signal(error.Error, 'audience campaign creation api error');\r\n });\r\n }\r\n }\r\n } else {\r\n // Unexpected case. Log Error.\r\n activityLogger.error(JSON.stringify(response));\r\n }\r\n } else {\r\n // Ajax error\r\n setErrors(i18nErrors.getODataErrors(response.errors));\r\n }\r\n}\r\n","import { result } from 'underscore';\r\nimport { isValidUrl } from '@bingads-webui/url-util';\r\nimport { DependencyResolver } from '@bingads-webui-campaign/dependency-resolver';\r\nimport { PricingModelToRangeKey } from '@bingads-webui-campaign/audience-campaign-shared';\r\n\r\nconst CampaignNameLength = 128;\r\n\r\nexport function campaignNameValidation(name?: string) {\r\n if (!name) {\r\n return false;\r\n }\r\n\r\n return name.length <= CampaignNameLength;\r\n}\r\n\r\nexport function finalUrlValidation(url?: string) {\r\n if (!url) {\r\n return false;\r\n }\r\n\r\n return isValidUrl(url);\r\n}\r\n\r\nexport function MaxCostValidation(value?: number) {\r\n if (!value) {\r\n return false;\r\n }\r\n\r\n return Number(value) > 0;\r\n}\r\n\r\nexport function budgetValidation(value?: number) {\r\n if (!value) {\r\n return false;\r\n }\r\n\r\n return Number(value) > 0;\r\n}\r\n\r\nexport function targetCPAValidation(value?: number) {\r\n if (!value) {\r\n return false;\r\n }\r\n\r\n return Number(value) > 0;\r\n}\r\n\r\nexport function bidValueValidation(rangeKey: string, value?: number) {\r\n if (!value) {\r\n return false;\r\n }\r\n\r\n const config = DependencyResolver.get('component/config/index');\r\n\r\n const ceilingValue = result(config.get(PricingModelToRangeKey[rangeKey]), 'CeilingValue');\r\n const floorValue = result(config.get(PricingModelToRangeKey[rangeKey]), 'FloorValue');\r\n\r\n if (ceilingValue && floorValue) {\r\n if (value > ceilingValue || value < floorValue) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n}\r\n","import { ResponsiveAdRepository } from '@bingads-webui-campaign/responsive-ad-editor';\r\nimport { IAdModel } from '../store';\r\n\r\nexport function removeAds(ads: IAdModel[], { viewContext }) {\r\n const adsRepository = new ResponsiveAdRepository({ viewContext });\r\n\r\n const promises = ads.map(ad => adsRepository.removeAdAsync(ad.Id));\r\n\r\n return Promise.all(promises);\r\n}\r\n\r\nexport function getAds(adIds: number[], {\r\n viewContext,\r\n extraExpand = ',Model.ResponsiveAd/Headlines,Model.ResponsiveAd/LongHeadlines,Model.ResponsiveAd/Descriptions,Model.ResponsiveAd/Images',\r\n}) {\r\n const adsRepository = new ResponsiveAdRepository({ viewContext });\r\n\r\n const promises = adIds.map(id => adsRepository.getAdAsync(id, extraExpand));\r\n\r\n return Promise.all(promises);\r\n}\r\n","export const pricingModelToRangeKeyMap = {\r\n EnhancedCpc: 'CPC',\r\n ManualCpc: 'CPC',\r\n ManualCpm: 'CPM',\r\n};\r\n","export const previews = [{\r\n images: [[{\r\n id: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/1-HWpcPamxFHV1xYBSKHbKKD-kCAwRAi1.jpg',\r\n idString: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/1-HWpcPamxFHV1xYBSKHbKKD-kCAwRAi1.jpg',\r\n src: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/1-HWpcPamxFHV1xYBSKHbKKD-kCAwRAi1.jpg',\r\n type: 'Image191x100',\r\n width: 1080,\r\n height: 1080,\r\n cropSettings: {\r\n SourceX: 0, SourceY: 258, SourceWidth: 1080, SourceHeight: 565,\r\n },\r\n isIncluded: true,\r\n isLogo: false,\r\n isRecommendedImage: true,\r\n originCropSetting: {\r\n SourceWidth: 1080, SourceHeight: 565, SourceX: 0, SourceY: 258,\r\n },\r\n baseImage: {\r\n id: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/1-HWpcPamxFHV1xYBSKHbKKD-kCAwRAi1.jpg',\r\n idString: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/1-HWpcPamxFHV1xYBSKHbKKD-kCAwRAi1.jpg',\r\n src: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/1-HWpcPamxFHV1xYBSKHbKKD-kCAwRAi1.jpg',\r\n type: null,\r\n width: 1080,\r\n height: 1080,\r\n cropSettings: null,\r\n effectSettings: null,\r\n baseId: null,\r\n metadata: null,\r\n isIncluded: true,\r\n isLogo: false,\r\n isRecommendedImage: true,\r\n originCropSetting: {\r\n SourceWidth: 1080, SourceHeight: 565, SourceX: 0, SourceY: 258,\r\n },\r\n },\r\n }, {\r\n id: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/1-HWpcPamxFHV1xYBSKHbKKD-kCAwRAi1.jpg',\r\n idString: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/1-HWpcPamxFHV1xYBSKHbKKD-kCAwRAi1.jpg',\r\n src: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/1-HWpcPamxFHV1xYBSKHbKKD-kCAwRAi1.jpg',\r\n type: 'Image178x100',\r\n associationType: 'ImageMedia178X100',\r\n width: 1080,\r\n height: 1080,\r\n cropSettings: {\r\n SourceWidth: 1080, SourceHeight: 607, SourceX: 0, SourceY: 237,\r\n },\r\n isIncluded: true,\r\n isLogo: false,\r\n isRecommendedImage: false,\r\n originCropSetting: {\r\n SourceWidth: 1080, SourceHeight: 607, SourceX: 0, SourceY: 237,\r\n },\r\n isAutoCropping: true,\r\n baseImage: {\r\n id: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/1-HWpcPamxFHV1xYBSKHbKKD-kCAwRAi1.jpg', idString: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/1-HWpcPamxFHV1xYBSKHbKKD-kCAwRAi1.jpg', src: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/1-HWpcPamxFHV1xYBSKHbKKD-kCAwRAi1.jpg', type: null, associationType: 'ImageMedia178X100', width: 1080, height: 1080, cropSettings: null, effectSettings: null, baseId: null, metadata: null, isIncluded: false, isLogo: false, isRecommendedImage: false, originCropSetting: null,\r\n },\r\n }, {\r\n id: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/1-HWpcPamxFHV1xYBSKHbKKD-kCAwRAi1.jpg',\r\n idString: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/1-HWpcPamxFHV1xYBSKHbKKD-kCAwRAi1.jpg',\r\n src: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/1-HWpcPamxFHV1xYBSKHbKKD-kCAwRAi1.jpg',\r\n type: 'Image150x100',\r\n associationType: 'ImageMedia15X10',\r\n width: 1080,\r\n height: 1080,\r\n cropSettings: {\r\n SourceWidth: 1080, SourceHeight: 720, SourceX: 0, SourceY: 180,\r\n },\r\n isIncluded: true,\r\n isLogo: false,\r\n isRecommendedImage: false,\r\n originCropSetting: {\r\n SourceWidth: 1080, SourceHeight: 720, SourceX: 0, SourceY: 180,\r\n },\r\n isAutoCropping: true,\r\n baseImage: {\r\n id: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/1-HWpcPamxFHV1xYBSKHbKKD-kCAwRAi1.jpg', idString: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/1-HWpcPamxFHV1xYBSKHbKKD-kCAwRAi1.jpg', src: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/1-HWpcPamxFHV1xYBSKHbKKD-kCAwRAi1.jpg', type: null, associationType: 'ImageMedia15X10', width: 1080, height: 1080, cropSettings: null, effectSettings: null, baseId: null, metadata: null, isIncluded: false, isLogo: false, isRecommendedImage: false, originCropSetting: null,\r\n },\r\n }, {\r\n id: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/1-HWpcPamxFHV1xYBSKHbKKD-kCAwRAi1.jpg',\r\n idString: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/1-HWpcPamxFHV1xYBSKHbKKD-kCAwRAi1.jpg',\r\n src: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/1-HWpcPamxFHV1xYBSKHbKKD-kCAwRAi1.jpg',\r\n type: 'Image133x100',\r\n associationType: 'ImageMedia133X100',\r\n width: 1080,\r\n height: 1080,\r\n cropSettings: {\r\n SourceWidth: 1080, SourceHeight: 812, SourceX: 0, SourceY: 134,\r\n },\r\n isIncluded: true,\r\n isLogo: false,\r\n isRecommendedImage: false,\r\n originCropSetting: {\r\n SourceWidth: 1080, SourceHeight: 812, SourceX: 0, SourceY: 134,\r\n },\r\n isAutoCropping: true,\r\n baseImage: {\r\n id: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/1-HWpcPamxFHV1xYBSKHbKKD-kCAwRAi1.jpg', idString: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/1-HWpcPamxFHV1xYBSKHbKKD-kCAwRAi1.jpg', src: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/1-HWpcPamxFHV1xYBSKHbKKD-kCAwRAi1.jpg', type: null, associationType: 'ImageMedia133X100', width: 1080, height: 1080, cropSettings: null, effectSettings: null, baseId: null, metadata: null, isIncluded: false, isLogo: false, isRecommendedImage: false, originCropSetting: null,\r\n },\r\n }, {\r\n id: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/1-HWpcPamxFHV1xYBSKHbKKD-kCAwRAi1.jpg',\r\n idString: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/1-HWpcPamxFHV1xYBSKHbKKD-kCAwRAi1.jpg',\r\n src: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/1-HWpcPamxFHV1xYBSKHbKKD-kCAwRAi1.jpg',\r\n type: 'Image1x1',\r\n associationType: 'SquareImageMedia',\r\n width: 1080,\r\n height: 1080,\r\n cropSettings: {\r\n SourceWidth: 1080, SourceHeight: 1080, SourceX: 0, SourceY: 0,\r\n },\r\n isIncluded: true,\r\n isLogo: false,\r\n isRecommendedImage: false,\r\n originCropSetting: {\r\n SourceWidth: 1080, SourceHeight: 1080, SourceX: 0, SourceY: 0,\r\n },\r\n isAutoCropping: true,\r\n baseImage: {\r\n id: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/1-HWpcPamxFHV1xYBSKHbKKD-kCAwRAi1.jpg', idString: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/1-HWpcPamxFHV1xYBSKHbKKD-kCAwRAi1.jpg', src: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/1-HWpcPamxFHV1xYBSKHbKKD-kCAwRAi1.jpg', type: null, associationType: 'SquareImageMedia', width: 1080, height: 1080, cropSettings: null, effectSettings: null, baseId: null, metadata: null, isIncluded: true, isLogo: false, isRecommendedImage: false, originCropSetting: null,\r\n },\r\n }], [{\r\n id: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/16KVMOQPeJU2laynni3k-c6CORdmpobSZ.jpg',\r\n idString: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/16KVMOQPeJU2laynni3k-c6CORdmpobSZ.jpg',\r\n src: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/16KVMOQPeJU2laynni3k-c6CORdmpobSZ.jpg',\r\n type: 'Image191x100',\r\n width: 1080,\r\n height: 1080,\r\n cropSettings: {\r\n SourceX: 0, SourceY: 258, SourceWidth: 1080, SourceHeight: 565,\r\n },\r\n isIncluded: true,\r\n isLogo: false,\r\n isRecommendedImage: true,\r\n originCropSetting: {\r\n SourceWidth: 1080, SourceHeight: 565, SourceX: 0, SourceY: 258,\r\n },\r\n baseImage: {\r\n id: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/16KVMOQPeJU2laynni3k-c6CORdmpobSZ.jpg',\r\n idString: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/16KVMOQPeJU2laynni3k-c6CORdmpobSZ.jpg',\r\n src: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/16KVMOQPeJU2laynni3k-c6CORdmpobSZ.jpg',\r\n type: null,\r\n width: 1080,\r\n height: 1080,\r\n cropSettings: null,\r\n effectSettings: null,\r\n baseId: null,\r\n metadata: null,\r\n isIncluded: true,\r\n isLogo: false,\r\n isRecommendedImage: true,\r\n originCropSetting: {\r\n SourceWidth: 1080, SourceHeight: 565, SourceX: 0, SourceY: 258,\r\n },\r\n },\r\n }, {\r\n id: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/16KVMOQPeJU2laynni3k-c6CORdmpobSZ.jpg',\r\n idString: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/16KVMOQPeJU2laynni3k-c6CORdmpobSZ.jpg',\r\n src: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/16KVMOQPeJU2laynni3k-c6CORdmpobSZ.jpg',\r\n type: 'Image178x100',\r\n associationType: 'ImageMedia178X100',\r\n width: 1080,\r\n height: 1080,\r\n cropSettings: {\r\n SourceWidth: 1080, SourceHeight: 607, SourceX: 0, SourceY: 237,\r\n },\r\n isIncluded: true,\r\n isLogo: false,\r\n isRecommendedImage: false,\r\n originCropSetting: {\r\n SourceWidth: 1080, SourceHeight: 607, SourceX: 0, SourceY: 237,\r\n },\r\n isAutoCropping: true,\r\n baseImage: {\r\n id: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/16KVMOQPeJU2laynni3k-c6CORdmpobSZ.jpg', idString: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/16KVMOQPeJU2laynni3k-c6CORdmpobSZ.jpg', src: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/16KVMOQPeJU2laynni3k-c6CORdmpobSZ.jpg', type: null, associationType: 'ImageMedia178X100', width: 1080, height: 1080, cropSettings: null, effectSettings: null, baseId: null, metadata: null, isIncluded: false, isLogo: false, isRecommendedImage: false, originCropSetting: null,\r\n },\r\n }, {\r\n id: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/16KVMOQPeJU2laynni3k-c6CORdmpobSZ.jpg',\r\n idString: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/16KVMOQPeJU2laynni3k-c6CORdmpobSZ.jpg',\r\n src: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/16KVMOQPeJU2laynni3k-c6CORdmpobSZ.jpg',\r\n type: 'Image150x100',\r\n associationType: 'ImageMedia15X10',\r\n width: 1080,\r\n height: 1080,\r\n cropSettings: {\r\n SourceWidth: 1080, SourceHeight: 720, SourceX: 0, SourceY: 180,\r\n },\r\n isIncluded: true,\r\n isLogo: false,\r\n isRecommendedImage: false,\r\n originCropSetting: {\r\n SourceWidth: 1080, SourceHeight: 720, SourceX: 0, SourceY: 180,\r\n },\r\n isAutoCropping: true,\r\n baseImage: {\r\n id: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/16KVMOQPeJU2laynni3k-c6CORdmpobSZ.jpg', idString: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/16KVMOQPeJU2laynni3k-c6CORdmpobSZ.jpg', src: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/16KVMOQPeJU2laynni3k-c6CORdmpobSZ.jpg', type: null, associationType: 'ImageMedia15X10', width: 1080, height: 1080, cropSettings: null, effectSettings: null, baseId: null, metadata: null, isIncluded: false, isLogo: false, isRecommendedImage: false, originCropSetting: null,\r\n },\r\n }, {\r\n id: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/16KVMOQPeJU2laynni3k-c6CORdmpobSZ.jpg',\r\n idString: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/16KVMOQPeJU2laynni3k-c6CORdmpobSZ.jpg',\r\n src: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/16KVMOQPeJU2laynni3k-c6CORdmpobSZ.jpg',\r\n type: 'Image133x100',\r\n associationType: 'ImageMedia133X100',\r\n width: 1080,\r\n height: 1080,\r\n cropSettings: {\r\n SourceWidth: 1080, SourceHeight: 812, SourceX: 0, SourceY: 134,\r\n },\r\n isIncluded: true,\r\n isLogo: false,\r\n isRecommendedImage: false,\r\n originCropSetting: {\r\n SourceWidth: 1080, SourceHeight: 812, SourceX: 0, SourceY: 134,\r\n },\r\n isAutoCropping: true,\r\n baseImage: {\r\n id: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/16KVMOQPeJU2laynni3k-c6CORdmpobSZ.jpg', idString: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/16KVMOQPeJU2laynni3k-c6CORdmpobSZ.jpg', src: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/16KVMOQPeJU2laynni3k-c6CORdmpobSZ.jpg', type: null, associationType: 'ImageMedia133X100', width: 1080, height: 1080, cropSettings: null, effectSettings: null, baseId: null, metadata: null, isIncluded: false, isLogo: false, isRecommendedImage: false, originCropSetting: null,\r\n },\r\n }, {\r\n id: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/16KVMOQPeJU2laynni3k-c6CORdmpobSZ.jpg',\r\n idString: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/16KVMOQPeJU2laynni3k-c6CORdmpobSZ.jpg',\r\n src: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/16KVMOQPeJU2laynni3k-c6CORdmpobSZ.jpg',\r\n type: 'Image1x1',\r\n associationType: 'SquareImageMedia',\r\n width: 1080,\r\n height: 1080,\r\n cropSettings: {\r\n SourceWidth: 1080, SourceHeight: 1080, SourceX: 0, SourceY: 0,\r\n },\r\n isIncluded: true,\r\n isLogo: false,\r\n isRecommendedImage: false,\r\n originCropSetting: {\r\n SourceWidth: 1080, SourceHeight: 1080, SourceX: 0, SourceY: 0,\r\n },\r\n isAutoCropping: true,\r\n baseImage: {\r\n id: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/16KVMOQPeJU2laynni3k-c6CORdmpobSZ.jpg', idString: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/16KVMOQPeJU2laynni3k-c6CORdmpobSZ.jpg', src: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/16KVMOQPeJU2laynni3k-c6CORdmpobSZ.jpg', type: null, associationType: 'SquareImageMedia', width: 1080, height: 1080, cropSettings: null, effectSettings: null, baseId: null, metadata: null, isIncluded: true, isLogo: false, isRecommendedImage: false, originCropSetting: null,\r\n },\r\n }], [{\r\n id: 'https://blogs.bing.com/BingBlogs/files/50/50be2ce8-de70-4b33-8aa6-43abf774d114.png',\r\n idString: 'https://blogs.bing.com/BingBlogs/files/50/50be2ce8-de70-4b33-8aa6-43abf774d114.png',\r\n src: 'https://blogs.bing.com/BingBlogs/files/50/50be2ce8-de70-4b33-8aa6-43abf774d114.png',\r\n type: 'Image191x100',\r\n width: 2400,\r\n height: 1290,\r\n cropSettings: {\r\n SourceX: 0, SourceY: 17, SourceWidth: 2400, SourceHeight: 1257,\r\n },\r\n isIncluded: true,\r\n isLogo: false,\r\n isRecommendedImage: true,\r\n originCropSetting: {\r\n SourceWidth: 2400, SourceHeight: 1257, SourceX: 0, SourceY: 17,\r\n },\r\n baseImage: {\r\n id: 'https://blogs.bing.com/BingBlogs/files/50/50be2ce8-de70-4b33-8aa6-43abf774d114.png',\r\n idString: 'https://blogs.bing.com/BingBlogs/files/50/50be2ce8-de70-4b33-8aa6-43abf774d114.png',\r\n src: 'https://blogs.bing.com/BingBlogs/files/50/50be2ce8-de70-4b33-8aa6-43abf774d114.png',\r\n type: null,\r\n width: 2400,\r\n height: 1290,\r\n cropSettings: null,\r\n effectSettings: null,\r\n baseId: null,\r\n metadata: null,\r\n isIncluded: true,\r\n isLogo: false,\r\n isRecommendedImage: true,\r\n originCropSetting: {\r\n SourceWidth: 2400, SourceHeight: 1257, SourceX: 0, SourceY: 17,\r\n },\r\n },\r\n }, {\r\n id: 'https://blogs.bing.com/BingBlogs/files/50/50be2ce8-de70-4b33-8aa6-43abf774d114.png',\r\n idString: 'https://blogs.bing.com/BingBlogs/files/50/50be2ce8-de70-4b33-8aa6-43abf774d114.png',\r\n src: 'https://blogs.bing.com/BingBlogs/files/50/50be2ce8-de70-4b33-8aa6-43abf774d114.png',\r\n type: 'Image178x100',\r\n associationType: 'ImageMedia178X100',\r\n width: 2400,\r\n height: 1290,\r\n cropSettings: {\r\n SourceWidth: 2296, SourceHeight: 1290, SourceX: 52, SourceY: 0,\r\n },\r\n isIncluded: true,\r\n isLogo: false,\r\n isRecommendedImage: false,\r\n originCropSetting: {\r\n SourceWidth: 2296, SourceHeight: 1290, SourceX: 52, SourceY: 0,\r\n },\r\n isAutoCropping: true,\r\n baseImage: {\r\n id: 'https://blogs.bing.com/BingBlogs/files/50/50be2ce8-de70-4b33-8aa6-43abf774d114.png', idString: 'https://blogs.bing.com/BingBlogs/files/50/50be2ce8-de70-4b33-8aa6-43abf774d114.png', src: 'https://blogs.bing.com/BingBlogs/files/50/50be2ce8-de70-4b33-8aa6-43abf774d114.png', type: null, associationType: 'ImageMedia178X100', width: 2400, height: 1290, cropSettings: null, effectSettings: null, baseId: null, metadata: null, isIncluded: false, isLogo: false, isRecommendedImage: false, originCropSetting: null,\r\n },\r\n }, {\r\n id: 'https://blogs.bing.com/BingBlogs/files/50/50be2ce8-de70-4b33-8aa6-43abf774d114.png',\r\n idString: 'https://blogs.bing.com/BingBlogs/files/50/50be2ce8-de70-4b33-8aa6-43abf774d114.png',\r\n src: 'https://blogs.bing.com/BingBlogs/files/50/50be2ce8-de70-4b33-8aa6-43abf774d114.png',\r\n type: 'Image150x100',\r\n associationType: 'ImageMedia15X10',\r\n width: 2400,\r\n height: 1290,\r\n cropSettings: {\r\n SourceWidth: 1935, SourceHeight: 1290, SourceX: 233, SourceY: 0,\r\n },\r\n isIncluded: true,\r\n isLogo: false,\r\n isRecommendedImage: false,\r\n originCropSetting: {\r\n SourceWidth: 1935, SourceHeight: 1290, SourceX: 233, SourceY: 0,\r\n },\r\n isAutoCropping: true,\r\n baseImage: {\r\n id: 'https://blogs.bing.com/BingBlogs/files/50/50be2ce8-de70-4b33-8aa6-43abf774d114.png', idString: 'https://blogs.bing.com/BingBlogs/files/50/50be2ce8-de70-4b33-8aa6-43abf774d114.png', src: 'https://blogs.bing.com/BingBlogs/files/50/50be2ce8-de70-4b33-8aa6-43abf774d114.png', type: null, associationType: 'ImageMedia15X10', width: 2400, height: 1290, cropSettings: null, effectSettings: null, baseId: null, metadata: null, isIncluded: false, isLogo: false, isRecommendedImage: false, originCropSetting: null,\r\n },\r\n }, {\r\n id: 'https://blogs.bing.com/BingBlogs/files/50/50be2ce8-de70-4b33-8aa6-43abf774d114.png',\r\n idString: 'https://blogs.bing.com/BingBlogs/files/50/50be2ce8-de70-4b33-8aa6-43abf774d114.png',\r\n src: 'https://blogs.bing.com/BingBlogs/files/50/50be2ce8-de70-4b33-8aa6-43abf774d114.png',\r\n type: 'Image133x100',\r\n associationType: 'ImageMedia133X100',\r\n width: 2400,\r\n height: 1290,\r\n cropSettings: {\r\n SourceWidth: 1716, SourceHeight: 1290, SourceX: 342, SourceY: 0,\r\n },\r\n isIncluded: true,\r\n isLogo: false,\r\n isRecommendedImage: false,\r\n originCropSetting: {\r\n SourceWidth: 1716, SourceHeight: 1290, SourceX: 342, SourceY: 0,\r\n },\r\n isAutoCropping: true,\r\n baseImage: {\r\n id: 'https://blogs.bing.com/BingBlogs/files/50/50be2ce8-de70-4b33-8aa6-43abf774d114.png', idString: 'https://blogs.bing.com/BingBlogs/files/50/50be2ce8-de70-4b33-8aa6-43abf774d114.png', src: 'https://blogs.bing.com/BingBlogs/files/50/50be2ce8-de70-4b33-8aa6-43abf774d114.png', type: null, associationType: 'ImageMedia133X100', width: 2400, height: 1290, cropSettings: null, effectSettings: null, baseId: null, metadata: null, isIncluded: false, isLogo: false, isRecommendedImage: false, originCropSetting: null,\r\n },\r\n }, {\r\n id: 'https://blogs.bing.com/BingBlogs/files/50/50be2ce8-de70-4b33-8aa6-43abf774d114.png',\r\n idString: 'https://blogs.bing.com/BingBlogs/files/50/50be2ce8-de70-4b33-8aa6-43abf774d114.png',\r\n src: 'https://blogs.bing.com/BingBlogs/files/50/50be2ce8-de70-4b33-8aa6-43abf774d114.png',\r\n type: 'Image1x1',\r\n associationType: 'SquareImageMedia',\r\n width: 2400,\r\n height: 1290,\r\n cropSettings: {\r\n SourceWidth: 1290, SourceHeight: 1290, SourceX: 555, SourceY: 0,\r\n },\r\n isIncluded: true,\r\n isLogo: false,\r\n isRecommendedImage: false,\r\n originCropSetting: {\r\n SourceWidth: 1290, SourceHeight: 1290, SourceX: 555, SourceY: 0,\r\n },\r\n isAutoCropping: true,\r\n baseImage: {\r\n id: 'https://blogs.bing.com/BingBlogs/files/50/50be2ce8-de70-4b33-8aa6-43abf774d114.png', idString: 'https://blogs.bing.com/BingBlogs/files/50/50be2ce8-de70-4b33-8aa6-43abf774d114.png', src: 'https://blogs.bing.com/BingBlogs/files/50/50be2ce8-de70-4b33-8aa6-43abf774d114.png', type: null, associationType: 'SquareImageMedia', width: 2400, height: 1290, cropSettings: null, effectSettings: null, baseId: null, metadata: null, isIncluded: false, isLogo: false, isRecommendedImage: false, originCropSetting: null,\r\n },\r\n }]],\r\n shortHeadline: 'Maps Bing Maps',\r\n longHeadline: 'Make it faster and easier to go from Browsing to doing Things Online.',\r\n description: 'Make it faster and easier to go from Browsing to doing Things Online.',\r\n businessName: 'Bing',\r\n url: 'https://bing.com',\r\n}, {\r\n images: [[{\r\n id: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/1-HWpcPamxFHV1xYBSKHbKKD-kCAwRAi1.jpg',\r\n idString: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/1-HWpcPamxFHV1xYBSKHbKKD-kCAwRAi1.jpg',\r\n src: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/1-HWpcPamxFHV1xYBSKHbKKD-kCAwRAi1.jpg',\r\n type: 'Image191x100',\r\n width: 1080,\r\n height: 1080,\r\n cropSettings: {\r\n SourceX: 0, SourceY: 258, SourceWidth: 1080, SourceHeight: 565,\r\n },\r\n isIncluded: true,\r\n isLogo: false,\r\n isRecommendedImage: true,\r\n originCropSetting: {\r\n SourceWidth: 1080, SourceHeight: 565, SourceX: 0, SourceY: 258,\r\n },\r\n baseImage: {\r\n id: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/1-HWpcPamxFHV1xYBSKHbKKD-kCAwRAi1.jpg',\r\n idString: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/1-HWpcPamxFHV1xYBSKHbKKD-kCAwRAi1.jpg',\r\n src: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/1-HWpcPamxFHV1xYBSKHbKKD-kCAwRAi1.jpg',\r\n type: null,\r\n width: 1080,\r\n height: 1080,\r\n cropSettings: null,\r\n effectSettings: null,\r\n baseId: null,\r\n metadata: null,\r\n isIncluded: true,\r\n isLogo: false,\r\n isRecommendedImage: true,\r\n originCropSetting: {\r\n SourceWidth: 1080, SourceHeight: 565, SourceX: 0, SourceY: 258,\r\n },\r\n },\r\n }, {\r\n id: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/1-HWpcPamxFHV1xYBSKHbKKD-kCAwRAi1.jpg',\r\n idString: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/1-HWpcPamxFHV1xYBSKHbKKD-kCAwRAi1.jpg',\r\n src: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/1-HWpcPamxFHV1xYBSKHbKKD-kCAwRAi1.jpg',\r\n type: 'Image178x100',\r\n associationType: 'ImageMedia178X100',\r\n width: 1080,\r\n height: 1080,\r\n cropSettings: {\r\n SourceWidth: 1080, SourceHeight: 607, SourceX: 0, SourceY: 237,\r\n },\r\n isIncluded: true,\r\n isLogo: false,\r\n isRecommendedImage: false,\r\n originCropSetting: {\r\n SourceWidth: 1080, SourceHeight: 607, SourceX: 0, SourceY: 237,\r\n },\r\n isAutoCropping: true,\r\n baseImage: {\r\n id: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/1-HWpcPamxFHV1xYBSKHbKKD-kCAwRAi1.jpg', idString: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/1-HWpcPamxFHV1xYBSKHbKKD-kCAwRAi1.jpg', src: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/1-HWpcPamxFHV1xYBSKHbKKD-kCAwRAi1.jpg', type: null, associationType: 'ImageMedia178X100', width: 1080, height: 1080, cropSettings: null, effectSettings: null, baseId: null, metadata: null, isIncluded: false, isLogo: false, isRecommendedImage: false, originCropSetting: null,\r\n },\r\n }, {\r\n id: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/1-HWpcPamxFHV1xYBSKHbKKD-kCAwRAi1.jpg',\r\n idString: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/1-HWpcPamxFHV1xYBSKHbKKD-kCAwRAi1.jpg',\r\n src: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/1-HWpcPamxFHV1xYBSKHbKKD-kCAwRAi1.jpg',\r\n type: 'Image150x100',\r\n associationType: 'ImageMedia15X10',\r\n width: 1080,\r\n height: 1080,\r\n cropSettings: {\r\n SourceWidth: 1080, SourceHeight: 720, SourceX: 0, SourceY: 180,\r\n },\r\n isIncluded: true,\r\n isLogo: false,\r\n isRecommendedImage: false,\r\n originCropSetting: {\r\n SourceWidth: 1080, SourceHeight: 720, SourceX: 0, SourceY: 180,\r\n },\r\n isAutoCropping: true,\r\n baseImage: {\r\n id: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/1-HWpcPamxFHV1xYBSKHbKKD-kCAwRAi1.jpg', idString: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/1-HWpcPamxFHV1xYBSKHbKKD-kCAwRAi1.jpg', src: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/1-HWpcPamxFHV1xYBSKHbKKD-kCAwRAi1.jpg', type: null, associationType: 'ImageMedia15X10', width: 1080, height: 1080, cropSettings: null, effectSettings: null, baseId: null, metadata: null, isIncluded: false, isLogo: false, isRecommendedImage: false, originCropSetting: null,\r\n },\r\n }, {\r\n id: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/1-HWpcPamxFHV1xYBSKHbKKD-kCAwRAi1.jpg',\r\n idString: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/1-HWpcPamxFHV1xYBSKHbKKD-kCAwRAi1.jpg',\r\n src: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/1-HWpcPamxFHV1xYBSKHbKKD-kCAwRAi1.jpg',\r\n type: 'Image133x100',\r\n associationType: 'ImageMedia133X100',\r\n width: 1080,\r\n height: 1080,\r\n cropSettings: {\r\n SourceWidth: 1080, SourceHeight: 812, SourceX: 0, SourceY: 134,\r\n },\r\n isIncluded: true,\r\n isLogo: false,\r\n isRecommendedImage: false,\r\n originCropSetting: {\r\n SourceWidth: 1080, SourceHeight: 812, SourceX: 0, SourceY: 134,\r\n },\r\n isAutoCropping: true,\r\n baseImage: {\r\n id: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/1-HWpcPamxFHV1xYBSKHbKKD-kCAwRAi1.jpg', idString: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/1-HWpcPamxFHV1xYBSKHbKKD-kCAwRAi1.jpg', src: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/1-HWpcPamxFHV1xYBSKHbKKD-kCAwRAi1.jpg', type: null, associationType: 'ImageMedia133X100', width: 1080, height: 1080, cropSettings: null, effectSettings: null, baseId: null, metadata: null, isIncluded: false, isLogo: false, isRecommendedImage: false, originCropSetting: null,\r\n },\r\n }, {\r\n id: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/1-HWpcPamxFHV1xYBSKHbKKD-kCAwRAi1.jpg',\r\n idString: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/1-HWpcPamxFHV1xYBSKHbKKD-kCAwRAi1.jpg',\r\n src: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/1-HWpcPamxFHV1xYBSKHbKKD-kCAwRAi1.jpg',\r\n type: 'Image1x1',\r\n associationType: 'SquareImageMedia',\r\n width: 1080,\r\n height: 1080,\r\n cropSettings: {\r\n SourceWidth: 1080, SourceHeight: 1080, SourceX: 0, SourceY: 0,\r\n },\r\n isIncluded: true,\r\n isLogo: false,\r\n isRecommendedImage: false,\r\n originCropSetting: {\r\n SourceWidth: 1080, SourceHeight: 1080, SourceX: 0, SourceY: 0,\r\n },\r\n isAutoCropping: true,\r\n baseImage: {\r\n id: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/1-HWpcPamxFHV1xYBSKHbKKD-kCAwRAi1.jpg', idString: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/1-HWpcPamxFHV1xYBSKHbKKD-kCAwRAi1.jpg', src: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/1-HWpcPamxFHV1xYBSKHbKKD-kCAwRAi1.jpg', type: null, associationType: 'SquareImageMedia', width: 1080, height: 1080, cropSettings: null, effectSettings: null, baseId: null, metadata: null, isIncluded: true, isLogo: false, isRecommendedImage: false, originCropSetting: null,\r\n },\r\n }], [{\r\n id: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/16KVMOQPeJU2laynni3k-c6CORdmpobSZ.jpg',\r\n idString: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/16KVMOQPeJU2laynni3k-c6CORdmpobSZ.jpg',\r\n src: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/16KVMOQPeJU2laynni3k-c6CORdmpobSZ.jpg',\r\n type: 'Image191x100',\r\n width: 1080,\r\n height: 1080,\r\n cropSettings: {\r\n SourceX: 0, SourceY: 258, SourceWidth: 1080, SourceHeight: 565,\r\n },\r\n isIncluded: true,\r\n isLogo: false,\r\n isRecommendedImage: true,\r\n originCropSetting: {\r\n SourceWidth: 1080, SourceHeight: 565, SourceX: 0, SourceY: 258,\r\n },\r\n baseImage: {\r\n id: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/16KVMOQPeJU2laynni3k-c6CORdmpobSZ.jpg',\r\n idString: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/16KVMOQPeJU2laynni3k-c6CORdmpobSZ.jpg',\r\n src: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/16KVMOQPeJU2laynni3k-c6CORdmpobSZ.jpg',\r\n type: null,\r\n width: 1080,\r\n height: 1080,\r\n cropSettings: null,\r\n effectSettings: null,\r\n baseId: null,\r\n metadata: null,\r\n isIncluded: true,\r\n isLogo: false,\r\n isRecommendedImage: true,\r\n originCropSetting: {\r\n SourceWidth: 1080, SourceHeight: 565, SourceX: 0, SourceY: 258,\r\n },\r\n },\r\n }, {\r\n id: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/16KVMOQPeJU2laynni3k-c6CORdmpobSZ.jpg',\r\n idString: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/16KVMOQPeJU2laynni3k-c6CORdmpobSZ.jpg',\r\n src: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/16KVMOQPeJU2laynni3k-c6CORdmpobSZ.jpg',\r\n type: 'Image178x100',\r\n associationType: 'ImageMedia178X100',\r\n width: 1080,\r\n height: 1080,\r\n cropSettings: {\r\n SourceWidth: 1080, SourceHeight: 607, SourceX: 0, SourceY: 237,\r\n },\r\n isIncluded: true,\r\n isLogo: false,\r\n isRecommendedImage: false,\r\n originCropSetting: {\r\n SourceWidth: 1080, SourceHeight: 607, SourceX: 0, SourceY: 237,\r\n },\r\n isAutoCropping: true,\r\n baseImage: {\r\n id: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/16KVMOQPeJU2laynni3k-c6CORdmpobSZ.jpg', idString: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/16KVMOQPeJU2laynni3k-c6CORdmpobSZ.jpg', src: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/16KVMOQPeJU2laynni3k-c6CORdmpobSZ.jpg', type: null, associationType: 'ImageMedia178X100', width: 1080, height: 1080, cropSettings: null, effectSettings: null, baseId: null, metadata: null, isIncluded: false, isLogo: false, isRecommendedImage: false, originCropSetting: null,\r\n },\r\n }, {\r\n id: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/16KVMOQPeJU2laynni3k-c6CORdmpobSZ.jpg',\r\n idString: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/16KVMOQPeJU2laynni3k-c6CORdmpobSZ.jpg',\r\n src: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/16KVMOQPeJU2laynni3k-c6CORdmpobSZ.jpg',\r\n type: 'Image150x100',\r\n associationType: 'ImageMedia15X10',\r\n width: 1080,\r\n height: 1080,\r\n cropSettings: {\r\n SourceWidth: 1080, SourceHeight: 720, SourceX: 0, SourceY: 180,\r\n },\r\n isIncluded: true,\r\n isLogo: false,\r\n isRecommendedImage: false,\r\n originCropSetting: {\r\n SourceWidth: 1080, SourceHeight: 720, SourceX: 0, SourceY: 180,\r\n },\r\n isAutoCropping: true,\r\n baseImage: {\r\n id: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/16KVMOQPeJU2laynni3k-c6CORdmpobSZ.jpg', idString: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/16KVMOQPeJU2laynni3k-c6CORdmpobSZ.jpg', src: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/16KVMOQPeJU2laynni3k-c6CORdmpobSZ.jpg', type: null, associationType: 'ImageMedia15X10', width: 1080, height: 1080, cropSettings: null, effectSettings: null, baseId: null, metadata: null, isIncluded: false, isLogo: false, isRecommendedImage: false, originCropSetting: null,\r\n },\r\n }, {\r\n id: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/16KVMOQPeJU2laynni3k-c6CORdmpobSZ.jpg',\r\n idString: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/16KVMOQPeJU2laynni3k-c6CORdmpobSZ.jpg',\r\n src: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/16KVMOQPeJU2laynni3k-c6CORdmpobSZ.jpg',\r\n type: 'Image133x100',\r\n associationType: 'ImageMedia133X100',\r\n width: 1080,\r\n height: 1080,\r\n cropSettings: {\r\n SourceWidth: 1080, SourceHeight: 812, SourceX: 0, SourceY: 134,\r\n },\r\n isIncluded: true,\r\n isLogo: false,\r\n isRecommendedImage: false,\r\n originCropSetting: {\r\n SourceWidth: 1080, SourceHeight: 812, SourceX: 0, SourceY: 134,\r\n },\r\n isAutoCropping: true,\r\n baseImage: {\r\n id: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/16KVMOQPeJU2laynni3k-c6CORdmpobSZ.jpg', idString: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/16KVMOQPeJU2laynni3k-c6CORdmpobSZ.jpg', src: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/16KVMOQPeJU2laynni3k-c6CORdmpobSZ.jpg', type: null, associationType: 'ImageMedia133X100', width: 1080, height: 1080, cropSettings: null, effectSettings: null, baseId: null, metadata: null, isIncluded: false, isLogo: false, isRecommendedImage: false, originCropSetting: null,\r\n },\r\n }, {\r\n id: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/16KVMOQPeJU2laynni3k-c6CORdmpobSZ.jpg',\r\n idString: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/16KVMOQPeJU2laynni3k-c6CORdmpobSZ.jpg',\r\n src: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/16KVMOQPeJU2laynni3k-c6CORdmpobSZ.jpg',\r\n type: 'Image1x1',\r\n associationType: 'SquareImageMedia',\r\n width: 1080,\r\n height: 1080,\r\n cropSettings: {\r\n SourceWidth: 1080, SourceHeight: 1080, SourceX: 0, SourceY: 0,\r\n },\r\n isIncluded: true,\r\n isLogo: false,\r\n isRecommendedImage: false,\r\n originCropSetting: {\r\n SourceWidth: 1080, SourceHeight: 1080, SourceX: 0, SourceY: 0,\r\n },\r\n isAutoCropping: true,\r\n baseImage: {\r\n id: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/16KVMOQPeJU2laynni3k-c6CORdmpobSZ.jpg', idString: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/16KVMOQPeJU2laynni3k-c6CORdmpobSZ.jpg', src: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/16KVMOQPeJU2laynni3k-c6CORdmpobSZ.jpg', type: null, associationType: 'SquareImageMedia', width: 1080, height: 1080, cropSettings: null, effectSettings: null, baseId: null, metadata: null, isIncluded: true, isLogo: false, isRecommendedImage: false, originCropSetting: null,\r\n },\r\n }], [{\r\n id: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/1A9HiRm2AhPL6u0sgct0ku6nxDSPoHZhb.jpg',\r\n idString: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/1A9HiRm2AhPL6u0sgct0ku6nxDSPoHZhb.jpg',\r\n src: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/1A9HiRm2AhPL6u0sgct0ku6nxDSPoHZhb.jpg',\r\n type: 'Image191x100',\r\n width: 1080,\r\n height: 1080,\r\n cropSettings: {\r\n SourceX: 0, SourceY: 258, SourceWidth: 1080, SourceHeight: 565,\r\n },\r\n isIncluded: true,\r\n isLogo: false,\r\n isRecommendedImage: true,\r\n originCropSetting: {\r\n SourceWidth: 1080, SourceHeight: 565, SourceX: 0, SourceY: 258,\r\n },\r\n baseImage: {\r\n id: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/1A9HiRm2AhPL6u0sgct0ku6nxDSPoHZhb.jpg',\r\n idString: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/1A9HiRm2AhPL6u0sgct0ku6nxDSPoHZhb.jpg',\r\n src: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/1A9HiRm2AhPL6u0sgct0ku6nxDSPoHZhb.jpg',\r\n type: null,\r\n width: 1080,\r\n height: 1080,\r\n cropSettings: null,\r\n effectSettings: null,\r\n baseId: null,\r\n metadata: null,\r\n isIncluded: true,\r\n isLogo: false,\r\n isRecommendedImage: true,\r\n originCropSetting: {\r\n SourceWidth: 1080, SourceHeight: 565, SourceX: 0, SourceY: 258,\r\n },\r\n },\r\n }, {\r\n id: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/1A9HiRm2AhPL6u0sgct0ku6nxDSPoHZhb.jpg',\r\n idString: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/1A9HiRm2AhPL6u0sgct0ku6nxDSPoHZhb.jpg',\r\n src: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/1A9HiRm2AhPL6u0sgct0ku6nxDSPoHZhb.jpg',\r\n type: 'Image178x100',\r\n associationType: 'ImageMedia178X100',\r\n width: 1080,\r\n height: 1080,\r\n cropSettings: {\r\n SourceWidth: 1080, SourceHeight: 607, SourceX: 0, SourceY: 237,\r\n },\r\n isIncluded: true,\r\n isLogo: false,\r\n isRecommendedImage: false,\r\n originCropSetting: {\r\n SourceWidth: 1080, SourceHeight: 607, SourceX: 0, SourceY: 237,\r\n },\r\n isAutoCropping: true,\r\n baseImage: {\r\n id: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/1A9HiRm2AhPL6u0sgct0ku6nxDSPoHZhb.jpg', idString: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/1A9HiRm2AhPL6u0sgct0ku6nxDSPoHZhb.jpg', src: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/1A9HiRm2AhPL6u0sgct0ku6nxDSPoHZhb.jpg', type: null, associationType: 'ImageMedia178X100', width: 1080, height: 1080, cropSettings: null, effectSettings: null, baseId: null, metadata: null, isIncluded: false, isLogo: false, isRecommendedImage: false, originCropSetting: null,\r\n },\r\n }, {\r\n id: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/1A9HiRm2AhPL6u0sgct0ku6nxDSPoHZhb.jpg',\r\n idString: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/1A9HiRm2AhPL6u0sgct0ku6nxDSPoHZhb.jpg',\r\n src: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/1A9HiRm2AhPL6u0sgct0ku6nxDSPoHZhb.jpg',\r\n type: 'Image150x100',\r\n associationType: 'ImageMedia15X10',\r\n width: 1080,\r\n height: 1080,\r\n cropSettings: {\r\n SourceWidth: 1080, SourceHeight: 720, SourceX: 0, SourceY: 180,\r\n },\r\n isIncluded: true,\r\n isLogo: false,\r\n isRecommendedImage: false,\r\n originCropSetting: {\r\n SourceWidth: 1080, SourceHeight: 720, SourceX: 0, SourceY: 180,\r\n },\r\n isAutoCropping: true,\r\n baseImage: {\r\n id: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/1A9HiRm2AhPL6u0sgct0ku6nxDSPoHZhb.jpg', idString: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/1A9HiRm2AhPL6u0sgct0ku6nxDSPoHZhb.jpg', src: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/1A9HiRm2AhPL6u0sgct0ku6nxDSPoHZhb.jpg', type: null, associationType: 'ImageMedia15X10', width: 1080, height: 1080, cropSettings: null, effectSettings: null, baseId: null, metadata: null, isIncluded: false, isLogo: false, isRecommendedImage: false, originCropSetting: null,\r\n },\r\n }, {\r\n id: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/1A9HiRm2AhPL6u0sgct0ku6nxDSPoHZhb.jpg',\r\n idString: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/1A9HiRm2AhPL6u0sgct0ku6nxDSPoHZhb.jpg',\r\n src: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/1A9HiRm2AhPL6u0sgct0ku6nxDSPoHZhb.jpg',\r\n type: 'Image133x100',\r\n associationType: 'ImageMedia133X100',\r\n width: 1080,\r\n height: 1080,\r\n cropSettings: {\r\n SourceWidth: 1080, SourceHeight: 812, SourceX: 0, SourceY: 134,\r\n },\r\n isIncluded: true,\r\n isLogo: false,\r\n isRecommendedImage: false,\r\n originCropSetting: {\r\n SourceWidth: 1080, SourceHeight: 812, SourceX: 0, SourceY: 134,\r\n },\r\n isAutoCropping: true,\r\n baseImage: {\r\n id: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/1A9HiRm2AhPL6u0sgct0ku6nxDSPoHZhb.jpg', idString: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/1A9HiRm2AhPL6u0sgct0ku6nxDSPoHZhb.jpg', src: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/1A9HiRm2AhPL6u0sgct0ku6nxDSPoHZhb.jpg', type: null, associationType: 'ImageMedia133X100', width: 1080, height: 1080, cropSettings: null, effectSettings: null, baseId: null, metadata: null, isIncluded: false, isLogo: false, isRecommendedImage: false, originCropSetting: null,\r\n },\r\n }, {\r\n id: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/1A9HiRm2AhPL6u0sgct0ku6nxDSPoHZhb.jpg',\r\n idString: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/1A9HiRm2AhPL6u0sgct0ku6nxDSPoHZhb.jpg',\r\n src: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/1A9HiRm2AhPL6u0sgct0ku6nxDSPoHZhb.jpg',\r\n type: 'Image1x1',\r\n associationType: 'SquareImageMedia',\r\n width: 1080,\r\n height: 1080,\r\n cropSettings: {\r\n SourceWidth: 1080, SourceHeight: 1080, SourceX: 0, SourceY: 0,\r\n },\r\n isIncluded: true,\r\n isLogo: false,\r\n isRecommendedImage: false,\r\n originCropSetting: {\r\n SourceWidth: 1080, SourceHeight: 1080, SourceX: 0, SourceY: 0,\r\n },\r\n isAutoCropping: true,\r\n baseImage: {\r\n id: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/1A9HiRm2AhPL6u0sgct0ku6nxDSPoHZhb.jpg', idString: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/1A9HiRm2AhPL6u0sgct0ku6nxDSPoHZhb.jpg', src: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/1A9HiRm2AhPL6u0sgct0ku6nxDSPoHZhb.jpg', type: null, associationType: 'SquareImageMedia', width: 1080, height: 1080, cropSettings: null, effectSettings: null, baseId: null, metadata: null, isIncluded: true, isLogo: false, isRecommendedImage: false, originCropSetting: null,\r\n },\r\n }]],\r\n shortHeadline: 'Bing Photo Search',\r\n longHeadline: 'Make it faster and easier to go from Browsing to doing the Things you Love.',\r\n description: 'Make it faster and easier to go from Browsing to doing the Things you Love.',\r\n businessName: 'Bing',\r\n url: 'https://bing.com',\r\n}, {\r\n images: [[{\r\n id: '7146826138370',\r\n idString: '7146826138370',\r\n src: 'https://www.bing-exp.com/th?id=OADD2.7146826138370_17CZ8MCZKY4MKLZWVI&pid=21.2',\r\n type: 'Image191x100',\r\n associationType: 'LandscapeImageMedia',\r\n width: 1080,\r\n height: 1080,\r\n cropSettings: {\r\n SourceWidth: 1080, SourceHeight: 565, SourceX: 0, SourceY: 258,\r\n },\r\n isIncluded: false,\r\n isLogo: false,\r\n isRecommendedImage: false,\r\n originCropSetting: {\r\n SourceWidth: 1080, SourceHeight: 565, SourceX: 0, SourceY: 258,\r\n },\r\n isAutoCropping: true,\r\n baseImage: {\r\n id: '7146826138370', idString: '7146826138370', src: 'https://www.bing-exp.com/th?id=OADD2.7146826138370_17CZ8MCZKY4MKLZWVI&pid=21.2', type: null, associationType: 'LandscapeImageMedia', width: 1080, height: 1080, cropSettings: null, effectSettings: null, baseId: null, metadata: null, isIncluded: false, isLogo: false, isRecommendedImage: false, originCropSetting: null,\r\n },\r\n }, {\r\n id: '7146826138370',\r\n idString: '7146826138370',\r\n src: 'https://www.bing-exp.com/th?id=OADD2.7146826138370_17CZ8MCZKY4MKLZWVI&pid=21.2',\r\n type: 'Image178x100',\r\n associationType: 'ImageMedia178X100',\r\n width: 1080,\r\n height: 1080,\r\n cropSettings: {\r\n SourceWidth: 1080, SourceHeight: 607, SourceX: 0, SourceY: 237,\r\n },\r\n isIncluded: false,\r\n isLogo: false,\r\n isRecommendedImage: false,\r\n originCropSetting: {\r\n SourceWidth: 1080, SourceHeight: 607, SourceX: 0, SourceY: 237,\r\n },\r\n isAutoCropping: true,\r\n baseImage: {\r\n id: '7146826138370', idString: '7146826138370', src: 'https://www.bing-exp.com/th?id=OADD2.7146826138370_17CZ8MCZKY4MKLZWVI&pid=21.2', type: null, associationType: 'ImageMedia178X100', width: 1080, height: 1080, cropSettings: null, effectSettings: null, baseId: null, metadata: null, isIncluded: false, isLogo: false, isRecommendedImage: false, originCropSetting: null,\r\n },\r\n }, {\r\n id: '7146826138370',\r\n idString: '7146826138370',\r\n src: 'https://www.bing-exp.com/th?id=OADD2.7146826138370_17CZ8MCZKY4MKLZWVI&pid=21.2',\r\n type: 'Image150x100',\r\n associationType: 'ImageMedia15X10',\r\n width: 1080,\r\n height: 1080,\r\n cropSettings: {\r\n SourceWidth: 1080, SourceHeight: 720, SourceX: 0, SourceY: 180,\r\n },\r\n isIncluded: false,\r\n isLogo: false,\r\n isRecommendedImage: false,\r\n originCropSetting: {\r\n SourceWidth: 1080, SourceHeight: 720, SourceX: 0, SourceY: 180,\r\n },\r\n isAutoCropping: true,\r\n baseImage: {\r\n id: '7146826138370', idString: '7146826138370', src: 'https://www.bing-exp.com/th?id=OADD2.7146826138370_17CZ8MCZKY4MKLZWVI&pid=21.2', type: null, associationType: 'ImageMedia15X10', width: 1080, height: 1080, cropSettings: null, effectSettings: null, baseId: null, metadata: null, isIncluded: false, isLogo: false, isRecommendedImage: false, originCropSetting: null,\r\n },\r\n }, {\r\n id: '7146826138370',\r\n idString: '7146826138370',\r\n src: 'https://www.bing-exp.com/th?id=OADD2.7146826138370_17CZ8MCZKY4MKLZWVI&pid=21.2',\r\n type: 'Image133x100',\r\n associationType: 'ImageMedia133X100',\r\n width: 1080,\r\n height: 1080,\r\n cropSettings: {\r\n SourceWidth: 1080, SourceHeight: 812, SourceX: 0, SourceY: 134,\r\n },\r\n isIncluded: false,\r\n isLogo: false,\r\n isRecommendedImage: false,\r\n originCropSetting: {\r\n SourceWidth: 1080, SourceHeight: 812, SourceX: 0, SourceY: 134,\r\n },\r\n isAutoCropping: true,\r\n baseImage: {\r\n id: '7146826138370', idString: '7146826138370', src: 'https://www.bing-exp.com/th?id=OADD2.7146826138370_17CZ8MCZKY4MKLZWVI&pid=21.2', type: null, associationType: 'ImageMedia133X100', width: 1080, height: 1080, cropSettings: null, effectSettings: null, baseId: null, metadata: null, isIncluded: false, isLogo: false, isRecommendedImage: false, originCropSetting: null,\r\n },\r\n }, {\r\n id: '7146826138370',\r\n idString: '7146826138370',\r\n src: 'https://www.bing-exp.com/th?id=OADD2.7146826138370_17CZ8MCZKY4MKLZWVI&pid=21.2',\r\n type: 'Image1x1',\r\n associationType: 'SquareImageMedia',\r\n width: 1080,\r\n height: 1080,\r\n cropSettings: {\r\n SourceWidth: 1080, SourceHeight: 1080, SourceX: 0, SourceY: 0,\r\n },\r\n isIncluded: false,\r\n isLogo: false,\r\n isRecommendedImage: false,\r\n originCropSetting: {\r\n SourceWidth: 1080, SourceHeight: 1080, SourceX: 0, SourceY: 0,\r\n },\r\n isAutoCropping: true,\r\n baseImage: {\r\n id: '7146826138370', idString: '7146826138370', src: 'https://www.bing-exp.com/th?id=OADD2.7146826138370_17CZ8MCZKY4MKLZWVI&pid=21.2', type: null, associationType: 'SquareImageMedia', width: 1080, height: 1080, cropSettings: null, effectSettings: null, baseId: null, metadata: null, isIncluded: true, isLogo: false, isRecommendedImage: false, originCropSetting: null,\r\n },\r\n }], [{\r\n id: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/1xZL420knQHMs_-TvANTgp33NWP_XeKZI.jpg',\r\n idString: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/1xZL420knQHMs_-TvANTgp33NWP_XeKZI.jpg',\r\n src: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/1xZL420knQHMs_-TvANTgp33NWP_XeKZI.jpg',\r\n type: 'Image191x100',\r\n width: 1080,\r\n height: 1080,\r\n cropSettings: {\r\n SourceX: 0, SourceY: 258, SourceWidth: 1080, SourceHeight: 565,\r\n },\r\n isIncluded: true,\r\n isLogo: false,\r\n isRecommendedImage: true,\r\n originCropSetting: {\r\n SourceWidth: 1080, SourceHeight: 565, SourceX: 0, SourceY: 258,\r\n },\r\n baseImage: {\r\n id: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/1xZL420knQHMs_-TvANTgp33NWP_XeKZI.jpg',\r\n idString: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/1xZL420knQHMs_-TvANTgp33NWP_XeKZI.jpg',\r\n src: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/1xZL420knQHMs_-TvANTgp33NWP_XeKZI.jpg',\r\n type: null,\r\n width: 1080,\r\n height: 1080,\r\n cropSettings: null,\r\n effectSettings: null,\r\n baseId: null,\r\n metadata: null,\r\n isIncluded: true,\r\n isLogo: false,\r\n isRecommendedImage: true,\r\n originCropSetting: {\r\n SourceWidth: 1080, SourceHeight: 565, SourceX: 0, SourceY: 258,\r\n },\r\n },\r\n }, {\r\n id: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/1xZL420knQHMs_-TvANTgp33NWP_XeKZI.jpg',\r\n idString: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/1xZL420knQHMs_-TvANTgp33NWP_XeKZI.jpg',\r\n src: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/1xZL420knQHMs_-TvANTgp33NWP_XeKZI.jpg',\r\n type: 'Image178x100',\r\n associationType: 'ImageMedia178X100',\r\n width: 1080,\r\n height: 1080,\r\n cropSettings: {\r\n SourceWidth: 1080, SourceHeight: 607, SourceX: 0, SourceY: 237,\r\n },\r\n isIncluded: true,\r\n isLogo: false,\r\n isRecommendedImage: false,\r\n originCropSetting: {\r\n SourceWidth: 1080, SourceHeight: 607, SourceX: 0, SourceY: 237,\r\n },\r\n isAutoCropping: true,\r\n baseImage: {\r\n id: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/1xZL420knQHMs_-TvANTgp33NWP_XeKZI.jpg', idString: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/1xZL420knQHMs_-TvANTgp33NWP_XeKZI.jpg', src: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/1xZL420knQHMs_-TvANTgp33NWP_XeKZI.jpg', type: null, associationType: 'ImageMedia178X100', width: 1080, height: 1080, cropSettings: null, effectSettings: null, baseId: null, metadata: null, isIncluded: false, isLogo: false, isRecommendedImage: false, originCropSetting: null,\r\n },\r\n }, {\r\n id: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/1xZL420knQHMs_-TvANTgp33NWP_XeKZI.jpg',\r\n idString: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/1xZL420knQHMs_-TvANTgp33NWP_XeKZI.jpg',\r\n src: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/1xZL420knQHMs_-TvANTgp33NWP_XeKZI.jpg',\r\n type: 'Image150x100',\r\n associationType: 'ImageMedia15X10',\r\n width: 1080,\r\n height: 1080,\r\n cropSettings: {\r\n SourceWidth: 1080, SourceHeight: 720, SourceX: 0, SourceY: 180,\r\n },\r\n isIncluded: true,\r\n isLogo: false,\r\n isRecommendedImage: false,\r\n originCropSetting: {\r\n SourceWidth: 1080, SourceHeight: 720, SourceX: 0, SourceY: 180,\r\n },\r\n isAutoCropping: true,\r\n baseImage: {\r\n id: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/1xZL420knQHMs_-TvANTgp33NWP_XeKZI.jpg', idString: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/1xZL420knQHMs_-TvANTgp33NWP_XeKZI.jpg', src: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/1xZL420knQHMs_-TvANTgp33NWP_XeKZI.jpg', type: null, associationType: 'ImageMedia15X10', width: 1080, height: 1080, cropSettings: null, effectSettings: null, baseId: null, metadata: null, isIncluded: false, isLogo: false, isRecommendedImage: false, originCropSetting: null,\r\n },\r\n }, {\r\n id: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/1xZL420knQHMs_-TvANTgp33NWP_XeKZI.jpg',\r\n idString: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/1xZL420knQHMs_-TvANTgp33NWP_XeKZI.jpg',\r\n src: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/1xZL420knQHMs_-TvANTgp33NWP_XeKZI.jpg',\r\n type: 'Image133x100',\r\n associationType: 'ImageMedia133X100',\r\n width: 1080,\r\n height: 1080,\r\n cropSettings: {\r\n SourceWidth: 1080, SourceHeight: 812, SourceX: 0, SourceY: 134,\r\n },\r\n isIncluded: true,\r\n isLogo: false,\r\n isRecommendedImage: false,\r\n originCropSetting: {\r\n SourceWidth: 1080, SourceHeight: 812, SourceX: 0, SourceY: 134,\r\n },\r\n isAutoCropping: true,\r\n baseImage: {\r\n id: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/1xZL420knQHMs_-TvANTgp33NWP_XeKZI.jpg', idString: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/1xZL420knQHMs_-TvANTgp33NWP_XeKZI.jpg', src: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/1xZL420knQHMs_-TvANTgp33NWP_XeKZI.jpg', type: null, associationType: 'ImageMedia133X100', width: 1080, height: 1080, cropSettings: null, effectSettings: null, baseId: null, metadata: null, isIncluded: false, isLogo: false, isRecommendedImage: false, originCropSetting: null,\r\n },\r\n }, {\r\n id: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/1xZL420knQHMs_-TvANTgp33NWP_XeKZI.jpg',\r\n idString: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/1xZL420knQHMs_-TvANTgp33NWP_XeKZI.jpg',\r\n src: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/1xZL420knQHMs_-TvANTgp33NWP_XeKZI.jpg',\r\n type: 'Image1x1',\r\n associationType: 'SquareImageMedia',\r\n width: 1080,\r\n height: 1080,\r\n cropSettings: {\r\n SourceWidth: 1080, SourceHeight: 1080, SourceX: 0, SourceY: 0,\r\n },\r\n isIncluded: true,\r\n isLogo: false,\r\n isRecommendedImage: false,\r\n originCropSetting: {\r\n SourceWidth: 1080, SourceHeight: 1080, SourceX: 0, SourceY: 0,\r\n },\r\n isAutoCropping: true,\r\n baseImage: {\r\n id: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/1xZL420knQHMs_-TvANTgp33NWP_XeKZI.jpg', idString: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/1xZL420knQHMs_-TvANTgp33NWP_XeKZI.jpg', src: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/1xZL420knQHMs_-TvANTgp33NWP_XeKZI.jpg', type: null, associationType: 'SquareImageMedia', width: 1080, height: 1080, cropSettings: null, effectSettings: null, baseId: null, metadata: null, isIncluded: true, isLogo: false, isRecommendedImage: false, originCropSetting: null,\r\n },\r\n }], [{\r\n id: 'https://blogs.bing.com/BingBlogs/files/b6/b6b1efa2-e24a-447d-8ec2-076a9ba7c4f2.jpg',\r\n idString: 'https://blogs.bing.com/BingBlogs/files/b6/b6b1efa2-e24a-447d-8ec2-076a9ba7c4f2.jpg',\r\n src: 'https://blogs.bing.com/BingBlogs/files/b6/b6b1efa2-e24a-447d-8ec2-076a9ba7c4f2.jpg',\r\n type: 'Image191x100',\r\n width: 1920,\r\n height: 812,\r\n cropSettings: {\r\n SourceX: 185, SourceY: 0, SourceWidth: 1551, SourceHeight: 812,\r\n },\r\n isIncluded: true,\r\n isLogo: false,\r\n isRecommendedImage: true,\r\n originCropSetting: {\r\n SourceWidth: 1551, SourceHeight: 812, SourceX: 185, SourceY: 0,\r\n },\r\n baseImage: {\r\n id: 'https://blogs.bing.com/BingBlogs/files/b6/b6b1efa2-e24a-447d-8ec2-076a9ba7c4f2.jpg',\r\n idString: 'https://blogs.bing.com/BingBlogs/files/b6/b6b1efa2-e24a-447d-8ec2-076a9ba7c4f2.jpg',\r\n src: 'https://blogs.bing.com/BingBlogs/files/b6/b6b1efa2-e24a-447d-8ec2-076a9ba7c4f2.jpg',\r\n type: null,\r\n width: 1920,\r\n height: 812,\r\n cropSettings: null,\r\n effectSettings: null,\r\n baseId: null,\r\n metadata: null,\r\n isIncluded: true,\r\n isLogo: false,\r\n isRecommendedImage: true,\r\n originCropSetting: {\r\n SourceWidth: 1551, SourceHeight: 812, SourceX: 185, SourceY: 0,\r\n },\r\n },\r\n }, {\r\n id: 'https://blogs.bing.com/BingBlogs/files/b6/b6b1efa2-e24a-447d-8ec2-076a9ba7c4f2.jpg',\r\n idString: 'https://blogs.bing.com/BingBlogs/files/b6/b6b1efa2-e24a-447d-8ec2-076a9ba7c4f2.jpg',\r\n src: 'https://blogs.bing.com/BingBlogs/files/b6/b6b1efa2-e24a-447d-8ec2-076a9ba7c4f2.jpg',\r\n type: 'Image178x100',\r\n associationType: 'ImageMedia178X100',\r\n width: 1920,\r\n height: 812,\r\n cropSettings: {\r\n SourceWidth: 1445, SourceHeight: 812, SourceX: 238, SourceY: 0,\r\n },\r\n isIncluded: true,\r\n isLogo: false,\r\n isRecommendedImage: false,\r\n originCropSetting: {\r\n SourceWidth: 1445, SourceHeight: 812, SourceX: 238, SourceY: 0,\r\n },\r\n isAutoCropping: true,\r\n baseImage: {\r\n id: 'https://blogs.bing.com/BingBlogs/files/b6/b6b1efa2-e24a-447d-8ec2-076a9ba7c4f2.jpg', idString: 'https://blogs.bing.com/BingBlogs/files/b6/b6b1efa2-e24a-447d-8ec2-076a9ba7c4f2.jpg', src: 'https://blogs.bing.com/BingBlogs/files/b6/b6b1efa2-e24a-447d-8ec2-076a9ba7c4f2.jpg', type: null, associationType: 'ImageMedia178X100', width: 1920, height: 812, cropSettings: null, effectSettings: null, baseId: null, metadata: null, isIncluded: false, isLogo: false, isRecommendedImage: false, originCropSetting: null,\r\n },\r\n }, {\r\n id: 'https://blogs.bing.com/BingBlogs/files/b6/b6b1efa2-e24a-447d-8ec2-076a9ba7c4f2.jpg',\r\n idString: 'https://blogs.bing.com/BingBlogs/files/b6/b6b1efa2-e24a-447d-8ec2-076a9ba7c4f2.jpg',\r\n src: 'https://blogs.bing.com/BingBlogs/files/b6/b6b1efa2-e24a-447d-8ec2-076a9ba7c4f2.jpg',\r\n type: 'Image150x100',\r\n associationType: 'ImageMedia15X10',\r\n width: 1920,\r\n height: 812,\r\n cropSettings: {\r\n SourceWidth: 1218, SourceHeight: 812, SourceX: 351, SourceY: 0,\r\n },\r\n isIncluded: true,\r\n isLogo: false,\r\n isRecommendedImage: false,\r\n originCropSetting: {\r\n SourceWidth: 1218, SourceHeight: 812, SourceX: 351, SourceY: 0,\r\n },\r\n isAutoCropping: true,\r\n baseImage: {\r\n id: 'https://blogs.bing.com/BingBlogs/files/b6/b6b1efa2-e24a-447d-8ec2-076a9ba7c4f2.jpg', idString: 'https://blogs.bing.com/BingBlogs/files/b6/b6b1efa2-e24a-447d-8ec2-076a9ba7c4f2.jpg', src: 'https://blogs.bing.com/BingBlogs/files/b6/b6b1efa2-e24a-447d-8ec2-076a9ba7c4f2.jpg', type: null, associationType: 'ImageMedia15X10', width: 1920, height: 812, cropSettings: null, effectSettings: null, baseId: null, metadata: null, isIncluded: false, isLogo: false, isRecommendedImage: false, originCropSetting: null,\r\n },\r\n }, {\r\n id: 'https://blogs.bing.com/BingBlogs/files/b6/b6b1efa2-e24a-447d-8ec2-076a9ba7c4f2.jpg',\r\n idString: 'https://blogs.bing.com/BingBlogs/files/b6/b6b1efa2-e24a-447d-8ec2-076a9ba7c4f2.jpg',\r\n src: 'https://blogs.bing.com/BingBlogs/files/b6/b6b1efa2-e24a-447d-8ec2-076a9ba7c4f2.jpg',\r\n type: 'Image133x100',\r\n associationType: 'ImageMedia133X100',\r\n width: 1920,\r\n height: 812,\r\n cropSettings: {\r\n SourceWidth: 1080, SourceHeight: 812, SourceX: 420, SourceY: 0,\r\n },\r\n isIncluded: true,\r\n isLogo: false,\r\n isRecommendedImage: false,\r\n originCropSetting: {\r\n SourceWidth: 1080, SourceHeight: 812, SourceX: 420, SourceY: 0,\r\n },\r\n isAutoCropping: true,\r\n baseImage: {\r\n id: 'https://blogs.bing.com/BingBlogs/files/b6/b6b1efa2-e24a-447d-8ec2-076a9ba7c4f2.jpg', idString: 'https://blogs.bing.com/BingBlogs/files/b6/b6b1efa2-e24a-447d-8ec2-076a9ba7c4f2.jpg', src: 'https://blogs.bing.com/BingBlogs/files/b6/b6b1efa2-e24a-447d-8ec2-076a9ba7c4f2.jpg', type: null, associationType: 'ImageMedia133X100', width: 1920, height: 812, cropSettings: null, effectSettings: null, baseId: null, metadata: null, isIncluded: false, isLogo: false, isRecommendedImage: false, originCropSetting: null,\r\n },\r\n }, {\r\n id: 'https://blogs.bing.com/BingBlogs/files/b6/b6b1efa2-e24a-447d-8ec2-076a9ba7c4f2.jpg',\r\n idString: 'https://blogs.bing.com/BingBlogs/files/b6/b6b1efa2-e24a-447d-8ec2-076a9ba7c4f2.jpg',\r\n src: 'https://blogs.bing.com/BingBlogs/files/b6/b6b1efa2-e24a-447d-8ec2-076a9ba7c4f2.jpg',\r\n type: 'Image1x1',\r\n associationType: 'SquareImageMedia',\r\n width: 1920,\r\n height: 812,\r\n cropSettings: {\r\n SourceWidth: 812, SourceHeight: 812, SourceX: 554, SourceY: 0,\r\n },\r\n isIncluded: true,\r\n isLogo: false,\r\n isRecommendedImage: false,\r\n originCropSetting: {\r\n SourceWidth: 812, SourceHeight: 812, SourceX: 554, SourceY: 0,\r\n },\r\n isAutoCropping: true,\r\n baseImage: {\r\n id: 'https://blogs.bing.com/BingBlogs/files/b6/b6b1efa2-e24a-447d-8ec2-076a9ba7c4f2.jpg', idString: 'https://blogs.bing.com/BingBlogs/files/b6/b6b1efa2-e24a-447d-8ec2-076a9ba7c4f2.jpg', src: 'https://blogs.bing.com/BingBlogs/files/b6/b6b1efa2-e24a-447d-8ec2-076a9ba7c4f2.jpg', type: null, associationType: 'SquareImageMedia', width: 1920, height: 812, cropSettings: null, effectSettings: null, baseId: null, metadata: null, isIncluded: false, isLogo: false, isRecommendedImage: false, originCropSetting: null,\r\n },\r\n }]],\r\n shortHeadline: 'Bing Images Search',\r\n longHeadline: 'Turn information into action. Make it faster & easier to go from Browsing to doing Things.',\r\n description: 'Turn information into action. Make it faster & easier to go from Browsing to doing Things.',\r\n businessName: 'Bing',\r\n url: 'https://bing.com',\r\n}];\r\n\r\n\r\nexport const ads = [{\r\n '@odata.type': '#Model.ResponsiveAd',\r\n Text: 'Make it faster and easier to go from Browsing to doing Things Online.',\r\n FinalUrls: ['https://bing.com'],\r\n Headline: 'Maps Bing Maps',\r\n LongHeadline: 'Make it faster and easier to go from Browsing to doing Things Online.',\r\n BusinessName: 'Bing',\r\n Images: [{\r\n Id: '',\r\n PinnedField: 'None',\r\n EditorialStatus: null,\r\n AssociationType: 'None',\r\n UiDisplayStatus: 'Inactive',\r\n PerformanceLabel: null,\r\n RecommendationId: null,\r\n Asset: {\r\n '@odata.type': '#Model.ImageAsset', Id: 0, Name: null, AssetType: 'Empty', Text: null, TracingId: null, SubType: 'None', IdString: '0', CropX: 0, CropY: 0, CropHeight: 1080, CropWidth: 1080, ImageUrl: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/1-HWpcPamxFHV1xYBSKHbKKD-kCAwRAi1.jpg',\r\n },\r\n PerformanceMetrics: null,\r\n }, {\r\n Id: '',\r\n PinnedField: 'None',\r\n EditorialStatus: null,\r\n AssociationType: 'None',\r\n UiDisplayStatus: 'Inactive',\r\n PerformanceLabel: null,\r\n RecommendationId: null,\r\n Asset: {\r\n '@odata.type': '#Model.ImageAsset', Id: 0, Name: null, AssetType: 'Empty', Text: null, TracingId: null, SubType: 'None', IdString: '0', CropX: 0, CropY: 0, CropHeight: 1080, CropWidth: 1080, ImageUrl: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/16KVMOQPeJU2laynni3k-c6CORdmpobSZ.jpg',\r\n },\r\n PerformanceMetrics: null,\r\n }, {\r\n Id: '',\r\n PinnedField: 'None',\r\n EditorialStatus: null,\r\n AssociationType: 'None',\r\n UiDisplayStatus: 'Inactive',\r\n PerformanceLabel: null,\r\n RecommendationId: null,\r\n Asset: {\r\n '@odata.type': '#Model.ImageAsset', Id: 0, Name: null, AssetType: 'Empty', Text: null, TracingId: null, SubType: 'None', IdString: '0', CropX: 0, CropY: 0, CropHeight: 1290, CropWidth: 2400, ImageUrl: 'https://blogs.bing.com/BingBlogs/files/50/50be2ce8-de70-4b33-8aa6-43abf774d114.png',\r\n },\r\n PerformanceMetrics: null,\r\n }],\r\n Headlines: [{\r\n Id: '',\r\n PinnedField: 'None',\r\n EditorialStatus: null,\r\n AssociationType: 'None',\r\n UiDisplayStatus: 'Inactive',\r\n PerformanceLabel: null,\r\n RecommendationId: null,\r\n Asset: {\r\n '@odata.type': '#Model.TextAsset', Id: 0, Name: null, AssetType: 'Text', Text: 'Maps Bing Maps', TracingId: null,\r\n },\r\n PerformanceMetrics: null,\r\n }],\r\n LongHeadlines: [{\r\n Id: '',\r\n PinnedField: 'None',\r\n EditorialStatus: null,\r\n AssociationType: 'None',\r\n UiDisplayStatus: 'Inactive',\r\n PerformanceLabel: null,\r\n RecommendationId: null,\r\n Asset: {\r\n '@odata.type': '#Model.TextAsset', Id: 0, Name: null, AssetType: 'Text', Text: 'Make it faster and easier to go from Browsing to doing Things Online.', TracingId: null,\r\n },\r\n PerformanceMetrics: null,\r\n }, {\r\n Id: '',\r\n PinnedField: 'None',\r\n EditorialStatus: null,\r\n AssociationType: 'None',\r\n UiDisplayStatus: 'Inactive',\r\n PerformanceLabel: null,\r\n RecommendationId: null,\r\n Asset: {\r\n '@odata.type': '#Model.TextAsset', Id: 0, Name: null, AssetType: 'Text', Text: 'Bing helps you turn information into action, making it faster & easier to go from Browsing', TracingId: null,\r\n },\r\n PerformanceMetrics: null,\r\n }],\r\n Descriptions: [{\r\n Id: '',\r\n PinnedField: 'None',\r\n EditorialStatus: null,\r\n AssociationType: 'None',\r\n UiDisplayStatus: 'Inactive',\r\n PerformanceLabel: null,\r\n RecommendationId: null,\r\n Asset: {\r\n '@odata.type': '#Model.TextAsset', Id: 0, Name: null, AssetType: 'Text', Text: 'Make it faster and easier to go from Browsing to doing Things Online.', TracingId: null,\r\n },\r\n PerformanceMetrics: null,\r\n }, {\r\n Id: '',\r\n PinnedField: 'None',\r\n EditorialStatus: null,\r\n AssociationType: 'None',\r\n UiDisplayStatus: 'Inactive',\r\n PerformanceLabel: null,\r\n RecommendationId: null,\r\n Asset: {\r\n '@odata.type': '#Model.TextAsset', Id: 0, Name: null, AssetType: 'Text', Text: 'Bing helps you turn information into action, making it faster & easier to go from Browsing', TracingId: null,\r\n },\r\n PerformanceMetrics: null,\r\n }],\r\n}, {\r\n '@odata.type': '#Model.ResponsiveAd',\r\n Text: 'Make it faster and easier to go from Browsing to doing the Things you Love.',\r\n FinalUrls: ['https://bing.com'],\r\n Headline: 'Bing Photo Search',\r\n LongHeadline: 'Make it faster and easier to go from Browsing to doing the Things you Love.',\r\n BusinessName: 'Bing',\r\n Images: [{\r\n Id: '',\r\n PinnedField: 'None',\r\n EditorialStatus: null,\r\n AssociationType: 'None',\r\n UiDisplayStatus: 'Inactive',\r\n PerformanceLabel: null,\r\n RecommendationId: null,\r\n Asset: {\r\n '@odata.type': '#Model.ImageAsset', Id: 0, Name: null, AssetType: 'Empty', Text: null, TracingId: null, SubType: 'None', IdString: '0', CropX: 0, CropY: 0, CropHeight: 1080, CropWidth: 1080, ImageUrl: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/1-HWpcPamxFHV1xYBSKHbKKD-kCAwRAi1.jpg',\r\n },\r\n PerformanceMetrics: null,\r\n }, {\r\n Id: '',\r\n PinnedField: 'None',\r\n EditorialStatus: null,\r\n AssociationType: 'None',\r\n UiDisplayStatus: 'Inactive',\r\n PerformanceLabel: null,\r\n RecommendationId: null,\r\n Asset: {\r\n '@odata.type': '#Model.ImageAsset', Id: 0, Name: null, AssetType: 'Empty', Text: null, TracingId: null, SubType: 'None', IdString: '0', CropX: 0, CropY: 0, CropHeight: 1080, CropWidth: 1080, ImageUrl: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/16KVMOQPeJU2laynni3k-c6CORdmpobSZ.jpg',\r\n },\r\n PerformanceMetrics: null,\r\n }, {\r\n Id: '',\r\n PinnedField: 'None',\r\n EditorialStatus: null,\r\n AssociationType: 'None',\r\n UiDisplayStatus: 'Inactive',\r\n PerformanceLabel: null,\r\n RecommendationId: null,\r\n Asset: {\r\n '@odata.type': '#Model.ImageAsset', Id: 0, Name: null, AssetType: 'Empty', Text: null, TracingId: null, SubType: 'None', IdString: '0', CropX: 0, CropY: 0, CropHeight: 1080, CropWidth: 1080, ImageUrl: 'https://aggsvcstorage.z13.web.core.windows.net/stock-images/1A9HiRm2AhPL6u0sgct0ku6nxDSPoHZhb.jpg',\r\n },\r\n PerformanceMetrics: null,\r\n }],\r\n Headlines: [{\r\n Id: '',\r\n PinnedField: 'None',\r\n EditorialStatus: null,\r\n AssociationType: 'None',\r\n UiDisplayStatus: 'Inactive',\r\n PerformanceLabel: null,\r\n RecommendationId: null,\r\n Asset: {\r\n '@odata.type': '#Model.TextAsset', Id: 0, Name: null, AssetType: 'Text', Text: 'Bing Photo Search', TracingId: null,\r\n },\r\n PerformanceMetrics: null,\r\n }],\r\n LongHeadlines: [{\r\n Id: '',\r\n PinnedField: 'None',\r\n EditorialStatus: null,\r\n AssociationType: 'None',\r\n UiDisplayStatus: 'Inactive',\r\n PerformanceLabel: null,\r\n RecommendationId: null,\r\n Asset: {\r\n '@odata.type': '#Model.TextAsset', Id: 0, Name: null, AssetType: 'Text', Text: 'Make it faster and easier to go from Browsing to doing the Things you Love.', TracingId: null,\r\n },\r\n PerformanceMetrics: null,\r\n }, {\r\n Id: '',\r\n PinnedField: 'None',\r\n EditorialStatus: null,\r\n AssociationType: 'None',\r\n UiDisplayStatus: 'Inactive',\r\n PerformanceLabel: null,\r\n RecommendationId: null,\r\n Asset: {\r\n '@odata.type': '#Model.TextAsset', Id: 0, Name: null, AssetType: 'Text', Text: 'Turn information into action, making it faster and easier to go from Browsing to doing.', TracingId: null,\r\n },\r\n PerformanceMetrics: null,\r\n }],\r\n Descriptions: [{\r\n Id: '',\r\n PinnedField: 'None',\r\n EditorialStatus: null,\r\n AssociationType: 'None',\r\n UiDisplayStatus: 'Inactive',\r\n PerformanceLabel: null,\r\n RecommendationId: null,\r\n Asset: {\r\n '@odata.type': '#Model.TextAsset', Id: 0, Name: null, AssetType: 'Text', Text: 'Make it faster and easier to go from Browsing to doing the Things you Love.', TracingId: null,\r\n },\r\n PerformanceMetrics: null,\r\n }, {\r\n Id: '',\r\n PinnedField: 'None',\r\n EditorialStatus: null,\r\n AssociationType: 'None',\r\n UiDisplayStatus: 'Inactive',\r\n PerformanceLabel: null,\r\n RecommendationId: null,\r\n Asset: {\r\n '@odata.type': '#Model.TextAsset', Id: 0, Name: null, AssetType: 'Text', Text: 'Turn information into action, making it faster and easier to go from Browsing to doing.', TracingId: null,\r\n },\r\n PerformanceMetrics: null,\r\n }],\r\n}];\r\n","export const getCampaignSettingsStyles = () => ({\r\n campaignSettingsWrapper: {\r\n backgroundColor: '#FAF9F8',\r\n display: 'flex',\r\n height: '100%',\r\n minWidth: 1000,\r\n flexDirection: 'column',\r\n '& .conversion-wizard-footer': {\r\n flexBasis: 50,\r\n borderTop: '1px solid #edebe9',\r\n padding: '16px 24px',\r\n },\r\n },\r\n\r\n switchToAdvance: {\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n background: '#EFF6FC',\r\n padding: '5px 20px',\r\n alignItems: 'center',\r\n '& .welcome-text': {\r\n\r\n },\r\n '& .welcome-bold': {\r\n fontWeight: 600,\r\n marginLeft: 10,\r\n marginRight: 5,\r\n },\r\n },\r\n\r\n campaignSettingContainer: {\r\n padding: 30,\r\n flex: 1,\r\n overflow: 'auto',\r\n '& h2': {\r\n margin: 0,\r\n },\r\n '& .campaign-message': {\r\n color: '#605E5C',\r\n margin: '30px 0',\r\n },\r\n },\r\n campaignInformationContainer: {\r\n backgroundColor: 'white',\r\n padding: '16px 24px',\r\n maxWidth: 928,\r\n '& .title': {\r\n marginBottom: 10,\r\n },\r\n },\r\n budgetBid: {\r\n backgroundColor: 'white',\r\n padding: '16px 24px',\r\n marginTop: 10,\r\n maxWidth: 928,\r\n '& .max-cost-checkbox .ms-Checkbox-label': {\r\n display: 'flex !important',\r\n },\r\n '& .title': {\r\n marginBottom: 10,\r\n },\r\n '& .sub-title': {\r\n fontWeight: 600,\r\n },\r\n '& .bid-strategy-desc': {\r\n fontWeight: 400,\r\n marginBottom: 20,\r\n color: '#605E5C',\r\n },\r\n '& .bid-strategy': {\r\n marginTop: 20,\r\n },\r\n },\r\n budget: {\r\n position: 'relative',\r\n '& .currency': {\r\n position: 'absolute',\r\n left: 125,\r\n top: 27,\r\n },\r\n },\r\n bidValue: {\r\n position: 'relative',\r\n '& .currency': {\r\n position: 'absolute',\r\n left: 89,\r\n top: 27,\r\n },\r\n },\r\n});\r\n","import React, { useState } from 'react';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { TextField, ITextFieldStyles } from '@fluentui/react';\r\nimport { useRecommendationFetch } from '../hooks';\r\nimport { useAudienceCampaignCreationWizardStore, WIZARD_ACTIONS } from '../store';\r\nimport { campaignNameValidation, finalUrlValidation } from '../utils';\r\nimport { getCampaignSettingsStyles } from './campaign-settings-styles';\r\n\r\n// eslint-disable-next-line no-underscore-dangle\r\ndeclare let _TL_: any;\r\n\r\nfunction remainingWarning(text: string, limit: number, i18n: any): string {\r\n if (text.length > limit) {\r\n return '';\r\n }\r\n return `${limit - text.length} ${i18n.getString(_TL_('characters remaining'))}`;\r\n}\r\n\r\nfunction getErrorMessage(text: string, limit: number, i18n: any, validationAfterBlur: boolean): string {\r\n if (validationAfterBlur) {\r\n return '';\r\n }\r\n\r\n if (!campaignNameValidation(text)) {\r\n return i18n.getString(_TL_('Field should not exceed 128 characters or empty'));\r\n }\r\n\r\n return '';\r\n}\r\n\r\nfunction finalURLErrorMessage(url: string, i18n: any, validationAfterBlur: boolean): string {\r\n if (validationAfterBlur) {\r\n return '';\r\n }\r\n\r\n if (finalUrlValidation(url)) {\r\n return '';\r\n }\r\n\r\n return i18n.getString(_TL_('One or more of the URLs are not valid.'));\r\n}\r\n\r\nexport function CampaignInformation() {\r\n const classes = useDefaultStyles(getCampaignSettingsStyles) as any;\r\n const setRecommendation = useRecommendationFetch();\r\n const {\r\n dispatch,\r\n i18n,\r\n state: {\r\n validations,\r\n currentCampaign: {\r\n name: campaignName,\r\n },\r\n finalURL,\r\n },\r\n } = useAudienceCampaignCreationWizardStore();\r\n const [name, setName] = useState(campaignName);\r\n const [url, setFinalURL] = useState(finalURL);\r\n\r\n const textFieldStyles: Partial = { fieldGroup: { width: 435 } };\r\n\r\n function changeCampaignName(_, value?: string) {\r\n setName(value);\r\n }\r\n\r\n function blurCampaignName(e: React.FocusEvent) {\r\n dispatch({\r\n type: WIZARD_ACTIONS.CAMPAIGN_NAME_CHANGE,\r\n payload: e.target.value,\r\n });\r\n }\r\n\r\n function changeFinalURL(_, value?: string) {\r\n setFinalURL(value);\r\n }\r\n\r\n function fetchRecommendation() {\r\n let formattedURL: string | undefined;\r\n\r\n if (url && !url.startsWith('http')) {\r\n formattedURL = `https://${url}`;\r\n setFinalURL(formattedURL);\r\n } else {\r\n formattedURL = url;\r\n }\r\n\r\n if (formattedURL === finalURL) {\r\n return;\r\n }\r\n\r\n dispatch({\r\n type: WIZARD_ACTIONS.FINALURL_CHANGE,\r\n payload: formattedURL,\r\n });\r\n\r\n if (url) {\r\n setRecommendation(url);\r\n }\r\n }\r\n\r\n return (\r\n
\r\n

{i18n.getString(_TL_('Campaign Information'))}

\r\n\r\n \r\n \r\n
\r\n );\r\n}\r\n","import { useEffect, useState } from 'react';\r\nimport _ from 'underscore';\r\nimport { isValidUrl } from '@bingads-webui/url-util';\r\nimport { scopeStore } from '@bingads-webui-campaign/global-context-store';\r\nimport {\r\n AdRecommendRepository,\r\n} from '@bingads-webui-campaign/responsive-ad-editor';\r\nimport { convertAdunitsToImageList } from '@bingads-webui-campaign/responsive-ad-editor/src/utils/ad-recommend-util';\r\n\r\nimport { getRecommendCacheByUrl, setRecommendCache } from '../utils';\r\n\r\nimport { LoadingState, useAudienceCampaignCreationWizardStore, WIZARD_ACTIONS } from '../store';\r\n\r\nimport { ads } from '../ad-creation/mock';\r\n\r\nexport const useRecommendationFetch = () => {\r\n const { dispatch } = useAudienceCampaignCreationWizardStore();\r\n const [url, setUrl] = useState('');\r\n const {\r\n aid,\r\n cid,\r\n } = _.chain(scopeStore.state).result('scope').result('values', {}).value() as any;\r\n\r\n const baseURL = `/Customers(${cid})/Accounts(${aid})/`;\r\n const repository = new AdRecommendRepository({ baseURL });\r\n\r\n useEffect(() => {\r\n if (!isValidUrl(url)) {\r\n return;\r\n }\r\n\r\n dispatch({\r\n type: WIZARD_ACTIONS.LOADING_RECOMMENDATION_STATE_UPDATE,\r\n payload: LoadingState.Loading,\r\n });\r\n\r\n const fetchData = async () => {\r\n try {\r\n let res = { value: [] };\r\n if ((window as any).e2eTestEnvironment) {\r\n res.value = ads;\r\n } else {\r\n const resultFromCache = getRecommendCacheByUrl(url);\r\n if (resultFromCache) {\r\n res = resultFromCache;\r\n } else {\r\n res = await repository.getRecommendAds(url);\r\n }\r\n }\r\n setRecommendCache(url, res);\r\n const result = convertAdunitsToImageList(res.value);\r\n\r\n dispatch({\r\n type: WIZARD_ACTIONS.LOADING_RECOMMENDATION_STATE_UPDATE,\r\n payload: LoadingState.Sucess,\r\n });\r\n\r\n dispatch({\r\n type: WIZARD_ACTIONS.FETCH_RECOMMENDATION,\r\n payload: {\r\n recommendations: res.value,\r\n adsForPreview: result,\r\n },\r\n });\r\n\r\n dispatch({\r\n type: WIZARD_ACTIONS.RECOMMENDADS_SELECTED,\r\n payload: {\r\n recommmendationsSelected: Array(res.value.length).fill(true),\r\n savedRecommendations: Array(res.value.length).fill(null),\r\n },\r\n });\r\n } catch (error) {\r\n dispatch({\r\n type: WIZARD_ACTIONS.LOADING_RECOMMENDATION_STATE_UPDATE,\r\n payload: LoadingState.Failed,\r\n });\r\n }\r\n };\r\n\r\n fetchData();\r\n }, [url]); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n\r\n return setUrl;\r\n};\r\n","export const enum BidStrategy {\r\n EnhancedCpc = 'EnhancedCpc',\r\n ManualCpc = 'ManualCpc',\r\n ManualCpm = 'ManualCpm',\r\n MaxConversions = 'MaxConversions',\r\n}\n","import React, { useState, useEffect } from 'react';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { result } from 'underscore';\r\nimport { TextField,\r\n Dropdown,\r\n Stack,\r\n IDropdownOption,\r\n DropdownMenuItemType,\r\n Checkbox,\r\n} from '@fluentui/react';\r\nimport { HelpPopup } from '@bingads-webui-react/help-popup';\r\nimport { PricingModelToRangeKey } from '@bingads-webui-campaign/audience-campaign-shared';\r\n\r\nimport { DependencyResolver } from '@bingads-webui-campaign/dependency-resolver';\r\nimport {\r\n MaxCostValidation,\r\n budgetValidation,\r\n targetCPAValidation,\r\n bidValueValidation,\r\n pricingModelToRangeKeyMap\r\n} from '../utils';\r\nimport { useAudienceCampaignCreationWizardStore, WIZARD_ACTIONS } from '../store';\r\nimport { getCampaignSettingsStyles } from './campaign-settings-styles';\r\nimport { BidStrategy } from './campaign-setting-types';\r\n\r\n// eslint-disable-next-line no-underscore-dangle\r\ndeclare let _TL_: any;\r\n\r\nfunction getErrorMessage(key: string, value: number, i18n: any, validationAfterBlur: boolean) {\r\n if (validationAfterBlur) {\r\n return '';\r\n }\r\n\r\n if (bidValueValidation(key, value)) {\r\n return '';\r\n }\r\n const config = DependencyResolver.get('component/config/index');\r\n\r\n const ceilingValue = result(config.get(PricingModelToRangeKey[key]), 'CeilingValue');\r\n const floorValue = result(config.get(PricingModelToRangeKey[key]), 'FloorValue');\r\n\r\n return i18n.getString(_TL_('The bid value should be between {{floorValue}} and {{ceilingValue}}'), { ceilingValue, floorValue });\r\n}\r\n\r\nfunction getBudgetErrorMessage(validationAfterBlur: boolean, value: number, i18n: any) {\r\n if (validationAfterBlur) {\r\n return '';\r\n }\r\n\r\n if (!budgetValidation(value)) {\r\n return i18n.getString(_TL_('Budget should be larger than 0'));\r\n }\r\n\r\n return '';\r\n}\r\n\r\nfunction getMaxCostErrorMessage(validationAfterBlur: boolean, i18n: any, value?: number): string {\r\n if (validationAfterBlur) {\r\n return '';\r\n }\r\n\r\n if (!MaxCostValidation(value)) {\r\n return i18n.getString(_TL_('Max Cost must larger than 0'));\r\n }\r\n\r\n return '';\r\n}\r\n\r\nfunction getTargetCPAErrorMessage(i18n: any, value: number, validationAfterBlur: boolean) {\r\n if (validationAfterBlur) {\r\n return '';\r\n }\r\n\r\n if (!targetCPAValidation(value)) {\r\n return i18n.getString(_TL_('Target CPA must larger than 0'));\r\n }\r\n\r\n return '';\r\n}\r\n\r\nexport function BudgetBid() {\r\n const {\r\n viewContext, dispatch, i18n,\r\n state: {\r\n budget,\r\n validations,\r\n bidStrategy,\r\n bidValue,\r\n maxCost,\r\n targetCpa,\r\n },\r\n } = useAudienceCampaignCreationWizardStore();\r\n const [budgetState, setBudget] = useState(String(budget));\r\n const [bidValueState, setBidValue] = useState(String(bidValue));\r\n const [maxCostCheck, setMaxCostCheck] = useState(!!maxCost);\r\n const [maxCostState, setMaxCost] = useState(String(maxCost));\r\n const [targetCPAState, setTargetCPA] = useState(String(targetCpa));\r\n\r\n useEffect(() => {\r\n setBidValue(String(bidValue));\r\n }, [bidValue]);\r\n\r\n const permissionConfig = DependencyResolver.get('component/config/index');\r\n const permissions = permissionConfig.get('Permissions');\r\n const autoBiddingEnabled = permissions.IsAudienceCampaignAutoBiddingV2Enabled;\r\n const classes = useDefaultStyles(getCampaignSettingsStyles) as any;\r\n const { accountCurrencyCode } = viewContext;\r\n const options: IDropdownOption[] = [autoBiddingEnabled && {\r\n key: 'Automated',\r\n text: i18n.getString(_TL_('Automated')),\r\n itemType: DropdownMenuItemType.Header,\r\n }, {\r\n key: BidStrategy.EnhancedCpc,\r\n text: i18n.getString(_TL_('Enhanced CPC')),\r\n }, permissions.IsAudienceCampaignAutoBiddingV2Enabled && {\r\n key: BidStrategy.MaxConversions,\r\n text: i18n.getString(_TL_('Maximize Conversions')),\r\n }, autoBiddingEnabled && {\r\n key: 'divider_1',\r\n text: '-',\r\n itemType: DropdownMenuItemType.Divider,\r\n }, {\r\n key: 'Manual',\r\n text: i18n.getString(_TL_('Manual')),\r\n itemType: DropdownMenuItemType.Header,\r\n }, {\r\n key: BidStrategy.ManualCpc,\r\n text: i18n.getString(_TL_('Manual CPC')),\r\n }, {\r\n key: BidStrategy.ManualCpm,\r\n text: i18n.getString(_TL_('Manual CPM')),\r\n }].filter(option => !!option);\r\n\r\n const bidStrategyMap = {\r\n EnhancedCpc: {\r\n desc: i18n.getString(_TL_('Adjust my bid to get more conversions')),\r\n },\r\n ManualCpc: {\r\n desc: i18n.getString(_TL_('Cost per click')),\r\n },\r\n ManualCpm: {\r\n desc: i18n.getString(_TL_('Cost per thousand viewable impressions')),\r\n },\r\n MaxConversions: {\r\n desc: i18n.getString(_TL_('Set my bids to get the most conversion value')),\r\n },\r\n };\r\n\r\n function changeBudget(_, value?: string) {\r\n setBudget(value);\r\n }\r\n\r\n function changeBidStrategy(_, item?: IDropdownOption) {\r\n dispatch({\r\n type: WIZARD_ACTIONS.BIDSTRATEGY_CHANGE,\r\n payload: item!.key,\r\n });\r\n }\r\n\r\n function changeBidValue(_, value?: string) {\r\n setBidValue(value);\r\n }\r\n\r\n function blurBudget(e: React.FocusEvent) {\r\n dispatch({\r\n type: WIZARD_ACTIONS.BUDGET_CHANGE,\r\n payload: e.target.value,\r\n });\r\n }\r\n\r\n function blurBidValue(e: React.FocusEvent) {\r\n dispatch({\r\n type: WIZARD_ACTIONS.BIDVALUE_CHNAGE,\r\n payload: {\r\n rangeKey: pricingModelToRangeKeyMap[bidStrategy],\r\n value: e.target.value,\r\n },\r\n });\r\n }\r\n\r\n function maxCostCheckChange(_, checked?: boolean) {\r\n setMaxCostCheck(checked);\r\n\r\n if (!checked) {\r\n setMaxCost(undefined);\r\n dispatch({\r\n type: WIZARD_ACTIONS.MAXCOST_CHANGE,\r\n payload: undefined,\r\n });\r\n }\r\n }\r\n\r\n function changeMaxCost(_, value?: string) {\r\n setMaxCost(value);\r\n }\r\n\r\n function blurMaxCost() {\r\n dispatch({\r\n type: WIZARD_ACTIONS.MAXCOST_CHANGE,\r\n payload: maxCostState,\r\n });\r\n }\r\n\r\n function changeTargetCPA(_, value?: string) {\r\n setTargetCPA(value);\r\n }\r\n\r\n function blurTargetCPA() {\r\n dispatch({\r\n type: WIZARD_ACTIONS.TARGETCPA_CHANGE,\r\n payload: targetCPAState,\r\n });\r\n }\r\n\r\n return (\r\n
\r\n

{i18n.getString(_TL_('Budget & Bid Strategy'))}

\r\n
\r\n (\r\n \r\n {i18n.getString(_TL_('How much would you like to spend each day?'))}\r\n \r\n \r\n )}\r\n styles={{ fieldGroup: { width: 110 } }}\r\n />\r\n
{accountCurrencyCode}
\r\n
\r\n\r\n \r\n
{i18n.getString(_TL_('Bid strategy'))}
\r\n \r\n
\r\n\r\n (\r\n \r\n {i18n.getString(_TL_('How do you want to manage your bids?'))}\r\n {i18n.getString(_TL_('Learn more'))}\r\n \r\n )}\r\n styles={{ dropdown: { width: 240 } }}\r\n />\r\n
{bidStrategyMap[bidStrategy].desc}
\r\n\r\n {\r\n bidStrategy === BidStrategy.MaxConversions ?\r\n
\r\n
\r\n (\r\n \r\n
{i18n.getString(_TL_('Target CPA'))}
\r\n \r\n
\r\n )}\r\n value={String(targetCPAState)}\r\n styles={{ fieldGroup: { width: 80 } }}\r\n />\r\n
{accountCurrencyCode}
\r\n
\r\n \r\n {\r\n maxCostCheck &&\r\n \r\n }\r\n
:\r\n
\r\n (\r\n \r\n
{i18n.getString(_TL_('Bid value'))}
\r\n \r\n
\r\n )}\r\n value={String(bidValueState)}\r\n styles={{ fieldGroup: { width: 80 } }}\r\n />\r\n
{accountCurrencyCode}
\r\n
\r\n }\r\n
\r\n );\r\n}\r\n","// import _ from 'underscore';\r\nimport React from 'react';\r\nimport { Stack, DefaultButton, PrimaryButton } from '@fluentui/react';\r\n\r\ninterface IProps {\r\n // config: any;\r\n buttons: {\r\n type: string;\r\n text: string;\r\n onClick: () => void;\r\n disabled?: boolean,\r\n }[];\r\n}\r\n\r\nfunction getButton(type: string) {\r\n if (type === 'Primary') {\r\n return PrimaryButton;\r\n } else if (type === 'Default') {\r\n return DefaultButton;\r\n }\r\n\r\n return DefaultButton;\r\n}\r\n\r\nexport function StepFooter(props: IProps) {\r\n const { buttons } = props;\r\n\r\n return (\r\n
\r\n \r\n {buttons.map((button) => {\r\n const { onClick, text, type, disabled = false } = button;\r\n const Button = getButton(type);\r\n\r\n return
\r\n );\r\n}\r\n","import React from 'react';\r\n\r\ninterface IProps {\r\n errors: string[];\r\n}\r\n\r\nexport function ErrorView(props: IProps) {\r\n const { errors } = props;\r\n\r\n return (\r\n
\r\n {errors.map(error => (\r\n
{error}
\r\n ))}\r\n
\r\n );\r\n}\r\n","import React, { useState } from 'react';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { routeStore, siteMapStore } from '@bingads-webui-campaign/global-context-store';\r\nimport { DependencyResolver } from '@bingads-webui-campaign/dependency-resolver';\r\nimport { CrudAudienceAdgroup } from '@bingads-webui-campaign/crud-audience-adgroup';\r\nimport { FontIcon, DefaultButton, Spinner, SpinnerSize } from '@fluentui/react';\r\nimport BlockUi from 'react-block-ui';\r\nimport { AudienceTargetInfo } from '@bingads-webui-campaign/audience-target-info';\r\nimport { schema } from '@bingads-webui-campaign/audience-campaign-shared';\r\n\r\nimport { CampaignInformation } from './campaign-information';\r\nimport { BudgetBid } from './budget-bid';\r\nimport { useAudienceCampaignCreationWizardStore, WIZARD_ACTIONS, LoadingState } from '../store';\r\nimport { getCampaignSettingsStyles } from './campaign-settings-styles';\r\nimport { StepFooter } from '../step-footer';\r\nimport {\r\n navigateToRoute,\r\n handleErrors,\r\n campaignNameValidation,\r\n finalUrlValidation,\r\n MaxCostValidation,\r\n pricingModelToRangeKeyMap,\r\n targetCPAValidation,\r\n bidValueValidation,\r\n budgetValidation\r\n} from '../utils';\r\nimport { ErrorView } from '../components';\r\nimport { BidStrategy } from './campaign-setting-types';\r\n\r\nconst pricingModelAdgroupBidAttributeMapping = {\r\n EnhancedCpc: 'SearchBid',\r\n MaxConversions: 'SearchBid',\r\n ManualCpm: 'CpmBid',\r\n ManualCpc: 'SearchBid',\r\n};\r\n\r\n// eslint-disable-next-line no-underscore-dangle\r\ndeclare let _TL_: any;\r\n\r\nexport function CampaignSettingsContainer() {\r\n const classes = useDefaultStyles(getCampaignSettingsStyles) as any;\r\n\r\n const {\r\n dispatch,\r\n viewContext,\r\n i18n,\r\n deps,\r\n perfMarker,\r\n activities: {\r\n campaignSettingActivity,\r\n },\r\n state: {\r\n budget,\r\n validations,\r\n bidStrategy,\r\n bidValue,\r\n maxCost,\r\n targetCpa,\r\n adgroupBackboneView,\r\n finalURL,\r\n currentAdgroup: {\r\n id: adgroupId,\r\n },\r\n loadingState: {\r\n saveCampaign,\r\n },\r\n currentCampaign: {\r\n name: campaignName,\r\n id: campaignId,\r\n },\r\n },\r\n } = useAudienceCampaignCreationWizardStore();\r\n const [errors, setErrors] = useState([]);\r\n\r\n const setupAdgroupView = () => {\r\n if (adgroupBackboneView) {\r\n return adgroupBackboneView;\r\n }\r\n const instr = DependencyResolver.get('campaignui/feature/instrumentation/index');\r\n instr.addScenario(schema);\r\n const logScenario = instr.aimCampaignCreationWizard.create();\r\n\r\n const currentLevelTargetInfo = new AudienceTargetInfo({\r\n resourceName: 'AdGroupCriterion',\r\n deps,\r\n isForVNext: true,\r\n isAudienceCreationWorkflow: true,\r\n });\r\n\r\n const options = {\r\n perfMarker,\r\n logScenario,\r\n deps: {\r\n ...deps,\r\n i18nNewDesign: i18n,\r\n },\r\n viewContext,\r\n newI18n: i18n,\r\n currentLevelTargetInfo,\r\n scenario: 'simplify-campaign-creation',\r\n };\r\n\r\n return new CrudAudienceAdgroup(options);\r\n };\r\n\r\n const validate = () => {\r\n const validationErrors = validations;\r\n if (!campaignNameValidation(campaignName)) {\r\n validationErrors.campaignName = false;\r\n }\r\n\r\n if (!finalUrlValidation(finalURL)) {\r\n validationErrors.finalUrl = false;\r\n }\r\n\r\n if (!budgetValidation(budget)) {\r\n validationErrors.budget = false;\r\n }\r\n\r\n if (bidStrategy === BidStrategy.MaxConversions) {\r\n if (!targetCPAValidation(targetCpa)) {\r\n validationErrors.targetCpa = false;\r\n }\r\n // bypass bidvalue validation if max conversion\r\n validationErrors.bidValue = true;\r\n\r\n if (maxCost) {\r\n if (!MaxCostValidation(maxCost)) {\r\n validationErrors.maxCost = false;\r\n }\r\n } else {\r\n validationErrors.maxCost = true;\r\n }\r\n } else {\r\n if (!bidValueValidation(pricingModelToRangeKeyMap[bidStrategy], bidValue)) {\r\n validationErrors.bidValue = false;\r\n }\r\n // bypass max cost and target cpa validation if not max conversion\r\n validationErrors.maxCost = true;\r\n validationErrors.targetCpa = true;\r\n }\r\n\r\n if (Object.values(validationErrors).some(error => error === false)) {\r\n dispatch({\r\n type: WIZARD_ACTIONS.VALIDATION_CHANGE,\r\n payload: validationErrors,\r\n });\r\n return false;\r\n }\r\n\r\n return true;\r\n };\r\n\r\n const save = async () => {\r\n dispatch({\r\n type: WIZARD_ACTIONS.CAMPAIGN_SAVING_STATE_UPDATE,\r\n payload: LoadingState.Loading,\r\n });\r\n\r\n const jsdata = DependencyResolver.get('component/js-data-campaign/index');\r\n const timeZoneMapper = DependencyResolver.get('component/timezonemapper/index');\r\n\r\n const params = {\r\n TimeZone: timeZoneMapper.getAccountTimeZone(),\r\n CampaignType: 'Audience',\r\n Languages: ['All'],\r\n Name: campaignName,\r\n Status: 'Paused',\r\n BiddingScheme: {\r\n Type: bidStrategy,\r\n },\r\n Budget: {\r\n Amount: budget,\r\n Type: 'DailyStandard',\r\n },\r\n AdScheduleUseSearcherTimeZone: false,\r\n };\r\n\r\n if (bidStrategy === BidStrategy.MaxConversions) {\r\n params.BiddingScheme = {\r\n Type: bidStrategy,\r\n // @ts-ignore\r\n TargetCpa: targetCpa,\r\n // @ts-ignore\r\n MaxCpc: {\r\n Amount: maxCost,\r\n },\r\n };\r\n }\r\n\r\n let campaignRes;\r\n let adgroupRes;\r\n\r\n try {\r\n const requestOptions = { adapter: 'bulk', cacheResponse: false };\r\n if (campaignId) {\r\n campaignRes = await jsdata.Campaign.update(campaignId, params, requestOptions);\r\n } else {\r\n campaignRes = await jsdata.Campaign.create(params, requestOptions);\r\n campaignSettingActivity.signal(`campaign Id: ${campaignRes.Id}`);\r\n }\r\n\r\n const adgroupParmas = {\r\n PricingModel: bidStrategy,\r\n Name: 'Adgroup 1',\r\n [pricingModelAdgroupBidAttributeMapping[bidStrategy]]: bidValue,\r\n Campaign: {\r\n Id: campaignRes.Id,\r\n },\r\n };\r\n\r\n if (adgroupId) {\r\n adgroupRes = await jsdata.AdGroup.update(\r\n adgroupId,\r\n adgroupParmas,\r\n requestOptions\r\n );\r\n } else {\r\n adgroupRes = await jsdata.AdGroup.create(adgroupParmas, requestOptions);\r\n campaignSettingActivity.signal(`ad group Id: ${adgroupRes.Id}`);\r\n }\r\n\r\n dispatch({\r\n type: WIZARD_ACTIONS.CAMPAIGN_SAVING_STATE_UPDATE,\r\n payload: LoadingState.Sucess,\r\n });\r\n\r\n viewContext.currentCampaign = campaignRes;\r\n viewContext.currentAdGroup = adgroupRes;\r\n\r\n dispatch({\r\n type: WIZARD_ACTIONS.CAMPAIGN_UPDATE,\r\n payload: {\r\n id: campaignRes.Id,\r\n },\r\n });\r\n\r\n dispatch({\r\n type: WIZARD_ACTIONS.ADGROUP_UPDATE,\r\n payload: {\r\n id: adgroupRes.Id,\r\n name: adgroupRes.Name,\r\n },\r\n });\r\n\r\n dispatch({\r\n type: WIZARD_ACTIONS.INIT_ADGOURPBACKBONE_VIEW,\r\n payload: setupAdgroupView(),\r\n });\r\n\r\n dispatch({\r\n type: WIZARD_ACTIONS.NAVIGATE_TO_ADS,\r\n });\r\n } catch (error) {\r\n handleErrors(campaignSettingActivity, error, (errorMsgs: {message: string}[]) => {\r\n setErrors(errorMsgs.map(errorMsg => errorMsg.message));\r\n });\r\n dispatch({\r\n type: WIZARD_ACTIONS.CAMPAIGN_SAVING_STATE_UPDATE,\r\n payload: LoadingState.Failed,\r\n });\r\n }\r\n };\r\n\r\n const footButtons = [{\r\n type: 'Primary',\r\n text: i18n.getString(_TL_('Save & go to next step')),\r\n onClick: () => {\r\n if (validate()) {\r\n save();\r\n }\r\n },\r\n }, {\r\n type: 'Default',\r\n text: i18n.getString(_TL_('Cancel')),\r\n onClick: () => {\r\n if (window.confirm('Do you really want to cancel and leave?')) { // eslint-disable-line no-alert\r\n navigateToRoute(routeStore, siteMapStore.state.siteMap, 'campaigns');\r\n }\r\n },\r\n }];\r\n\r\n function handleSwitch() {\r\n navigateToRoute(routeStore, siteMapStore.state.siteMap, 'campaign-create-audience');\r\n }\r\n\r\n return (\r\n } >\r\n
\r\n
\r\n
\r\n \r\n {i18n.getString(_TL_('Welcome to Simplified audience setup.'))}\r\n {i18n.getString(_TL_('You are in Pilot mode. Your campaigns and ads will be set up for increased performance using automated bidding, targeting and ad recommendation capabilities.'))}\r\n
\r\n \r\n
\r\n
\r\n

{i18n.getString(_TL_('Campaign Settings'))}

\r\n
{i18n.getString(_TL_('Tell us about your campaign and how much you want to spend.'))}
\r\n\r\n \r\n \r\n \r\n
\r\n \r\n
\r\n
\r\n );\r\n}\r\n","export enum WIZARD_ACTIONS {\r\n WIZARD_NAVIGATE_NEXT = 'WIZARD_NAVIGATE_NEXT',\r\n CAMPAIGN_NAME_CHANGE = 'CAMPAIGN_NAME_CHANGE',\r\n FINALURL_CHANGE = 'FINALURL_CHANGE',\r\n BUDGET_CHANGE = 'BUDGET_CHANGE',\r\n BIDSTRATEGY_CHANGE = 'BIDSTRATEGY_CHANGE',\r\n BIDVALUE_CHNAGE = 'BIDVALUE_CHNAGE',\r\n SUGGESTEDBIDMAP_UPDATE = 'SUGGESTEDBIDMAP_UPDATE',\r\n NAVIGATE_TO_ADS = 'NAVIGATE_TO_ADS',\r\n NAVIGATE_TO_SUMMARY = 'NAVIGATE_TO_SUMMARY',\r\n NAVIGATE_TO_CAMPAIGNSETTINGS = 'NAVIGATE_TO_CAMPAIGNSETTINGS',\r\n FETCH_RECOMMENDATION = 'FETCH_RECOMMENDATION',\r\n FETCH_ADS = 'FETCH_ADS',\r\n CAMPAIGN_SAVING_STATE_UPDATE = 'CAMPAIGN_SAVING_STATE_UPDATE',\r\n LOADING_SUGGESTED_BID_STATE_UPDATE = 'LOADING_SUGGESTED_BID_STATE_UPDATE',\r\n LOADING_ADS_STATE_UPDATE = 'LOADING_ADS_STATE_UPDATE',\r\n EDITING_AD_STATE_UPDATE = 'EDITING_AD_STATE_UPDATE',\r\n LOADING_RECOMMENDATION_STATE_UPDATE = 'LOADING_RECOMMENDATION_STATE_UPDATE',\r\n CAMPAIGN_UPDATE = 'CAMPAIGN_UPDATE',\r\n ADGROUP_UPDATE = 'ADGROUP_UPDATE',\r\n RECOMMENDADS_SELECTED = 'RECOMMENDADS_SELECTED',\r\n SAVE_ADS_STATE_UPDATE = 'SAVE_ADS_STATE_UPDATE',\r\n INIT_ADGOURPBACKBONE_VIEW = 'INIT_ADGOURPBACKBONE_VIEW',\r\n MAXCOST_CHANGE = 'MAXCOST_CHANGE',\r\n CHANGE_ADGROUP_TARGET_DOM = 'CHANGE_ADGROUP_TARGET_DOM',\r\n TARGETCPA_CHANGE = 'TARGETCPA_CHANGE',\r\n VALIDATION_CHANGE = 'VALIDATION_CHANGE',\r\n UPDATE_SAVEDADS = 'UPDATE_SAVEDADS',\r\n CUSTOMADS_SELECTED = 'CUSTOMADS_SELECTED',\r\n FINISH_CREATION = 'FINISH_CREATION',\r\n}\r\n","// import _ from 'underscore';\r\nimport { IRecommendAd } from '@bingads-webui-campaign-react/audience-shared';\r\nimport { WIZARD_ACTIONS } from './audience-creation-flow-actions';\r\nimport { BidStrategy } from '../campaign-settings';\r\nimport {\r\n campaignNameValidation,\r\n finalUrlValidation,\r\n MaxCostValidation,\r\n bidValueValidation,\r\n targetCPAValidation,\r\n budgetValidation\r\n} from '../utils';\r\n\r\nexport enum Step {\r\n campaignSettings = 'campaignSettings',\r\n ads = 'ads',\r\n summary = 'summary'\r\n}\r\n\r\nexport interface IAction {\r\n type: WIZARD_ACTIONS;\r\n payload?: any;\r\n}\r\n\r\nexport interface IAdModel extends IRecommendAd {\r\n Id: number;\r\n}\r\n\r\ninterface ICurrentCampaign {\r\n name: string;\r\n id: string;\r\n type: string;\r\n}\r\n\r\ninterface ICurrentAdgroup {\r\n name: string;\r\n id: string;\r\n}\r\n\r\nexport enum LoadingState {\r\n Init = 'Init',\r\n Loading = 'Loading',\r\n Sucess = 'Sucess',\r\n Failed = 'Failed'\r\n}\r\n\r\nexport interface IState {\r\n currentStep: Step;\r\n finalURL: string;\r\n budget: number;\r\n bidStrategy: BidStrategy;\r\n bidValue: number;\r\n maxCost?: number;\r\n targetCpa?: number;\r\n cid: number;\r\n aid: number;\r\n recommmendationsSelected: boolean[];\r\n customAdsSelected: boolean[];\r\n adgroupBackboneView?: any;\r\n adgroupTargetDom?: any;\r\n validations: {\r\n campaignName: boolean,\r\n finalUrl: boolean,\r\n bidValue: boolean,\r\n maxCost: boolean,\r\n budget: boolean,\r\n targetCpa: boolean,\r\n },\r\n loadingState: {\r\n saveCampaign: LoadingState;\r\n saveAds: LoadingState;\r\n loadingRecommendation: LoadingState;\r\n editingAd: LoadingState;\r\n loadingAds: LoadingState;\r\n loadingSuggestedBid: LoadingState;\r\n finishCreation: LoadingState;\r\n },\r\n currentCampaign: ICurrentCampaign;\r\n currentAdgroup: ICurrentAdgroup;\r\n bidSuggestionMap?: Record;\r\n recommendations: IRecommendAd[];\r\n savedRecommendations: (IAdModel | null)[];\r\n customAds: IAdModel[];\r\n}\r\n\r\nexport const initialState: IState = {\r\n currentStep: Step.campaignSettings,\r\n finalURL: '',\r\n aid: 0,\r\n cid: 0,\r\n customAdsSelected: [],\r\n recommmendationsSelected: [],\r\n loadingState: {\r\n saveCampaign: LoadingState.Init,\r\n loadingRecommendation: LoadingState.Init,\r\n saveAds: LoadingState.Init,\r\n editingAd: LoadingState.Init,\r\n loadingSuggestedBid: LoadingState.Init,\r\n loadingAds: LoadingState.Init,\r\n finishCreation: LoadingState.Init,\r\n },\r\n validations: {\r\n campaignName: true,\r\n finalUrl: true,\r\n bidValue: true,\r\n budget: true,\r\n maxCost: true,\r\n targetCpa: true,\r\n },\r\n currentCampaign: {\r\n name: '',\r\n id: '',\r\n type: 'Audience',\r\n },\r\n currentAdgroup: {\r\n name: 'Adgroup 1',\r\n id: '',\r\n },\r\n budget: 0,\r\n bidValue: 0,\r\n bidStrategy: BidStrategy.EnhancedCpc,\r\n recommendations: [],\r\n customAds: [],\r\n savedRecommendations: [],\r\n};\r\n\r\nexport const AudienceCreationWizardReducer = (state: IState, action: IAction) => {\r\n switch (action.type) {\r\n case WIZARD_ACTIONS.CAMPAIGN_NAME_CHANGE:\r\n return {\r\n ...state,\r\n validations: {\r\n ...state.validations,\r\n campaignName: campaignNameValidation(action.payload),\r\n },\r\n currentCampaign: {\r\n ...state.currentCampaign,\r\n name: action.payload,\r\n },\r\n };\r\n case WIZARD_ACTIONS.FINALURL_CHANGE:\r\n return {\r\n ...state,\r\n validations: {\r\n ...state.validations,\r\n finalUrl: finalUrlValidation(action.payload),\r\n },\r\n finalURL: action.payload,\r\n };\r\n case WIZARD_ACTIONS.BUDGET_CHANGE:\r\n return {\r\n ...state,\r\n validations: {\r\n ...state.validations,\r\n budget: budgetValidation(action.payload),\r\n },\r\n budget: action.payload,\r\n };\r\n case WIZARD_ACTIONS.BIDSTRATEGY_CHANGE:\r\n return {\r\n ...state,\r\n bidStrategy: action.payload,\r\n };\r\n case WIZARD_ACTIONS.BIDVALUE_CHNAGE:\r\n return {\r\n ...state,\r\n validations: {\r\n ...state.validations,\r\n bidValue: bidValueValidation(action.payload.rangeKey, action.payload.value),\r\n },\r\n bidValue: action.payload.value,\r\n };\r\n case WIZARD_ACTIONS.SUGGESTEDBIDMAP_UPDATE:\r\n return {\r\n ...state,\r\n bidSuggestionMap: action.payload,\r\n };\r\n case WIZARD_ACTIONS.NAVIGATE_TO_ADS:\r\n return {\r\n ...state,\r\n currentStep: Step.ads,\r\n };\r\n case WIZARD_ACTIONS.NAVIGATE_TO_CAMPAIGNSETTINGS:\r\n return {\r\n ...state,\r\n currentStep: Step.campaignSettings,\r\n };\r\n case WIZARD_ACTIONS.NAVIGATE_TO_SUMMARY:\r\n return {\r\n ...state,\r\n currentStep: Step.summary,\r\n };\r\n case WIZARD_ACTIONS.FETCH_RECOMMENDATION:\r\n return {\r\n ...state,\r\n ...action.payload,\r\n };\r\n case WIZARD_ACTIONS.FETCH_ADS:\r\n return {\r\n ...state,\r\n customAds: action.payload,\r\n };\r\n case WIZARD_ACTIONS.CAMPAIGN_SAVING_STATE_UPDATE:\r\n return {\r\n ...state,\r\n loadingState: {\r\n ...state.loadingState,\r\n saveCampaign: action.payload,\r\n },\r\n };\r\n case WIZARD_ACTIONS.LOADING_SUGGESTED_BID_STATE_UPDATE:\r\n return {\r\n ...state,\r\n loadingState: {\r\n ...state.loadingState,\r\n loadingSuggestedBid: action.payload,\r\n },\r\n };\r\n case WIZARD_ACTIONS.LOADING_ADS_STATE_UPDATE:\r\n return {\r\n ...state,\r\n loadingState: {\r\n ...state.loadingState,\r\n loadingAds: action.payload,\r\n },\r\n };\r\n case WIZARD_ACTIONS.EDITING_AD_STATE_UPDATE:\r\n return {\r\n ...state,\r\n loadingState: {\r\n ...state.loadingState,\r\n editingAd: action.payload,\r\n },\r\n };\r\n case WIZARD_ACTIONS.LOADING_RECOMMENDATION_STATE_UPDATE:\r\n return {\r\n ...state,\r\n loadingState: {\r\n ...state.loadingState,\r\n loadingRecommendation: action.payload,\r\n },\r\n };\r\n case WIZARD_ACTIONS.FINISH_CREATION:\r\n return {\r\n ...state,\r\n loadingState: {\r\n ...state.loadingState,\r\n finishCreation: action.payload,\r\n },\r\n };\r\n case WIZARD_ACTIONS.CAMPAIGN_UPDATE:\r\n return {\r\n ...state,\r\n currentCampaign: {\r\n ...state.currentCampaign,\r\n ...action.payload,\r\n },\r\n };\r\n case WIZARD_ACTIONS.ADGROUP_UPDATE:\r\n return {\r\n ...state,\r\n currentAdgroup: {\r\n ...state.currentAdgroup,\r\n ...action.payload,\r\n },\r\n };\r\n case WIZARD_ACTIONS.RECOMMENDADS_SELECTED:\r\n return {\r\n ...state,\r\n recommmendationsSelected: action.payload.recommmendationsSelected,\r\n savedRecommendations: action.payload.savedRecommendations,\r\n };\r\n case WIZARD_ACTIONS.CUSTOMADS_SELECTED:\r\n return {\r\n ...state,\r\n customAds: action.payload.customAds,\r\n customAdsSelected: action.payload.customAdsSelected,\r\n };\r\n case WIZARD_ACTIONS.SAVE_ADS_STATE_UPDATE:\r\n return {\r\n ...state,\r\n loadingState: {\r\n ...state.loadingState,\r\n saveAds: action.payload,\r\n },\r\n };\r\n case WIZARD_ACTIONS.INIT_ADGOURPBACKBONE_VIEW:\r\n return {\r\n ...state,\r\n adgroupBackboneView: action.payload,\r\n };\r\n case WIZARD_ACTIONS.MAXCOST_CHANGE:\r\n return {\r\n ...state,\r\n validations: {\r\n ...state.validations,\r\n maxCost: MaxCostValidation(action.payload),\r\n },\r\n maxCost: action.payload,\r\n };\r\n case WIZARD_ACTIONS.CHANGE_ADGROUP_TARGET_DOM:\r\n return {\r\n ...state,\r\n adgroupTargetDom: action.payload,\r\n };\r\n case WIZARD_ACTIONS.TARGETCPA_CHANGE:\r\n return {\r\n ...state,\r\n validations: {\r\n ...state.validations,\r\n targetCpa: targetCPAValidation(action.payload),\r\n },\r\n targetCpa: action.payload,\r\n };\r\n case WIZARD_ACTIONS.VALIDATION_CHANGE:\r\n return {\r\n ...state,\r\n validations: {\r\n ...state.validations,\r\n ...action.payload,\r\n },\r\n };\r\n case WIZARD_ACTIONS.UPDATE_SAVEDADS:\r\n if (action.payload.type === 'custome') {\r\n const ads = state.customAds;\r\n const selects = state.customAdsSelected;\r\n\r\n selects[action.payload.index] = true;\r\n ads[action.payload.index] = action.payload.savedAd;\r\n return {\r\n ...state,\r\n customAds: [...ads],\r\n customAdsSelected: [...selects],\r\n };\r\n } else if (action.payload.type === 'recommend') {\r\n const ads = state.savedRecommendations;\r\n const selects = state.recommmendationsSelected;\r\n\r\n selects[action.payload.index] = true;\r\n ads[action.payload.index] = action.payload.savedAd;\r\n return {\r\n ...state,\r\n savedRecommendations: [...ads],\r\n recommmendationsSelected: [...selects],\r\n };\r\n } else if (action.payload.type === 'add') {\r\n return {\r\n ...state,\r\n customAds: [...state.customAds, action.payload.savedAd],\r\n customAdsSelected: [...state.customAdsSelected, true],\r\n };\r\n }\r\n return {\r\n ...state,\r\n };\r\n default:\r\n return state;\r\n }\r\n};\r\n","import React, { useEffect, useMemo } from 'react';\r\nimport _ from 'underscore';\r\n// @ts-ignore\r\nimport { getBudgetRange } from '@bingads-webui-campaign-legacy/common-grid-config/budget/get-budget-range';\r\nimport { DependencyResolver } from '@bingads-webui-campaign/dependency-resolver';\r\nimport { AudienceTargetInfo } from '@bingads-webui-campaign/audience-target-info';\r\nimport { scopeStore } from '@bingads-webui-campaign/global-context-store';\r\nimport { schema, BidStrategy as EstimateBidStrategy } from '@bingads-webui-campaign/audience-campaign-shared';\r\nimport { EstimateRequestFactory } from '@bingads-webui-campaign/reach-estimate-control';\r\nimport { BidStrategy } from '../campaign-settings';\r\nimport { AudienceCreationWizardReducer, initialState, IAction, IState, LoadingState } from './audience-creation-flow-reducer';\r\nimport { WIZARD_ACTIONS } from './audience-creation-flow-actions';\r\nimport { pricingModelToRangeKeyMap } from '../utils';\r\n\r\nfunction getEstimatePromise(data): Promise {\r\n const odata = DependencyResolver.get('component/http/channel/odata');\r\n\r\n return odata.post('Customers()/Accounts()/Default.AudienceEstimationV2', {\r\n host: 'adinsight.odata.url',\r\n path: 'AdInsight/V2/',\r\n data: { request: data },\r\n customHeader: {\r\n name: 'x-ms-scenarioname',\r\n },\r\n });\r\n}\r\n\r\ninterface Context {\r\n permissions: any;\r\n startToFinishMarker: any;\r\n viewContext: any;\r\n activities: {\r\n campaignSettingActivity: any,\r\n summaryActivity: any,\r\n adCreationActivity: any,\r\n logScenario: any,\r\n };\r\n i18n: any;\r\n deps: any;\r\n perfMarker: any;\r\n dispatch: React.Dispatch;\r\n state: IState;\r\n}\r\n\r\nfunction setupInstrumentation() {\r\n const instr = DependencyResolver.get('campaignui/feature/instrumentation/index');\r\n instr.addScenario(schema);\r\n const logScenario = instr.simplifiedCampaignCreationWizard.create();\r\n\r\n return {\r\n logScenario,\r\n campaignSettingActivity: logScenario.campaignSetting.create(),\r\n adCreationActivity: logScenario.adCreation.create(),\r\n summaryActivity: logScenario.summary.create(),\r\n };\r\n}\r\n\r\nfunction setupInitialState(currencyCode: string) {\r\n const {\r\n aid,\r\n cid,\r\n } = _.chain(scopeStore.state).result('scope').result('values', {}).value() as any;\r\n const permissionConfig = DependencyResolver.get('component/config/index');\r\n const permissions = permissionConfig.get('Permissions');\r\n\r\n const realDefaultBudget = getBudgetRange(currencyCode).Daily.Default;\r\n const defaultBudget = currencyCode === 'USD' ? 25 : realDefaultBudget;\r\n\r\n let defaultBidStrategy = BidStrategy.ManualCpm;\r\n if (permissions.IsAudienceCampaignAutoBiddingV2Enabled) {\r\n defaultBidStrategy = BidStrategy.MaxConversions;\r\n }\r\n\r\n return {\r\n ...initialState,\r\n bidStrategy: defaultBidStrategy,\r\n budget: defaultBudget,\r\n cid,\r\n aid,\r\n };\r\n}\r\n\r\ninterface IProps {\r\n children: any;\r\n context: {\r\n deps: any;\r\n perfMarker: any;\r\n i18n: any;\r\n viewContext: any;\r\n permissions: any;\r\n }\r\n}\r\n\r\nconst AudienceCampaignCreationWizardContext = React.createContext(null);\r\n\r\nexport const useAudienceCampaignCreationWizardStore = () => React.useContext(AudienceCampaignCreationWizardContext);\r\n\r\nexport const AudienceCampaignCreationWizardProvider = (props: IProps) => {\r\n const {\r\n context,\r\n children,\r\n } = props;\r\n\r\n const [state, dispatch] = React.useReducer(\r\n AudienceCreationWizardReducer,\r\n setupInitialState(context.viewContext.accountCurrencyCode)\r\n );\r\n\r\n useEffect(() => {\r\n const currentLevelTargetInfo = new AudienceTargetInfo({\r\n resourceName: 'AdGroupCriterion',\r\n deps: context.deps,\r\n isForVNext: true,\r\n isAudienceCreationWorkflow: true,\r\n });\r\n\r\n const estimateRequestFactory = new EstimateRequestFactory({\r\n currentLevelTargetInfo: state.adgroupBackboneView ?\r\n state.adgroupBackboneView.currentLevelTargetInfo : currentLevelTargetInfo,\r\n });\r\n\r\n const subType = 'AudienceStatic';\r\n const targetsCPCData =\r\n estimateRequestFactory.create(\r\n EstimateBidStrategy.ManualCpc,\r\n subType,\r\n {},\r\n true\r\n );\r\n\r\n const targetsCPMData =\r\n estimateRequestFactory.create(\r\n EstimateBidStrategy.ManualCpm,\r\n subType,\r\n {},\r\n true\r\n );\r\n\r\n const fetchSuggestionBidMapping = async () => {\r\n const promises = [\r\n getEstimatePromise(targetsCPCData),\r\n getEstimatePromise(targetsCPMData),\r\n ];\r\n\r\n try {\r\n dispatch({\r\n type: WIZARD_ACTIONS.LOADING_SUGGESTED_BID_STATE_UPDATE,\r\n payload: LoadingState.Loading,\r\n });\r\n\r\n const [cpcEstimateData, cpmEstimateData] = await Promise.all(promises);\r\n\r\n const bidMap = {\r\n [BidStrategy.EnhancedCpc]: cpcEstimateData.SuggestedBid,\r\n [BidStrategy.ManualCpc]: cpcEstimateData.SuggestedBid,\r\n [BidStrategy.ManualCpm]: cpmEstimateData.SuggestedBid,\r\n [BidStrategy.MaxConversions]: cpcEstimateData.SuggestedBid,\r\n };\r\n\r\n dispatch({\r\n type: WIZARD_ACTIONS.SUGGESTEDBIDMAP_UPDATE,\r\n payload: bidMap,\r\n });\r\n\r\n const defaultBidValue = context.i18n.formatDecimal(bidMap[state.bidStrategy] || 0, {\r\n maximumFractionDigits: 2,\r\n minimumFractionDigits: 2,\r\n });\r\n\r\n dispatch({\r\n type: WIZARD_ACTIONS.BIDVALUE_CHNAGE,\r\n payload: { value: defaultBidValue, rangeKey: pricingModelToRangeKeyMap[state.bidStrategy] },\r\n });\r\n\r\n dispatch({\r\n type: WIZARD_ACTIONS.LOADING_SUGGESTED_BID_STATE_UPDATE,\r\n payload: LoadingState.Sucess,\r\n });\r\n } catch (error) {\r\n dispatch({\r\n type: WIZARD_ACTIONS.LOADING_SUGGESTED_BID_STATE_UPDATE,\r\n payload: LoadingState.Failed,\r\n });\r\n }\r\n };\r\n\r\n fetchSuggestionBidMapping();\r\n }, []); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n const wizardContext = useMemo(() => (\r\n {\r\n dispatch,\r\n startToFinishMarker: context.perfMarker.createChild('simplifyAudienceCampaignCreationTimeSpend'),\r\n activities: setupInstrumentation(),\r\n ...context,\r\n }\r\n ), []); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n return (\r\n \r\n {children}\r\n \r\n );\r\n};\r\n","import { getMsanPreviewStyles } from '@bingads-webui-campaign-react/shared-image-preview-styles';\r\n\r\nexport const getAdCreationStyles = () => ({\r\n adCell: {\r\n '& .mask': {\r\n position: 'absolute',\r\n top: 0,\r\n left: 0,\r\n borderRadius: 6,\r\n height: '100%',\r\n width: '100%',\r\n background: 'linear-gradient(360deg, #000000 0%, rgba(0, 0, 0, 0) 74.88%), url(image.png)',\r\n },\r\n },\r\n adLabel: {\r\n position: 'absolute',\r\n background: 'white',\r\n color: 'black',\r\n width: 26,\r\n height: 20,\r\n borderRadius: 5,\r\n top: 5,\r\n left: 5,\r\n textAlign: 'center',\r\n fontSize: 11,\r\n },\r\n adEditorPanel: {\r\n '& .ms-Panel-main': {\r\n width: 1300,\r\n height: 'calc(100% - 97px)',\r\n top: 97,\r\n },\r\n '& .ms-Panel-scrollableContent': {\r\n overflowX: 'hidden',\r\n },\r\n },\r\n predictiveTarget: {\r\n background: '#EFF6FC',\r\n margin: 10,\r\n padding: 10,\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n border: '1px solid #0078D4',\r\n '& .targeting-text': {\r\n alignItems: 'center',\r\n display: 'flex',\r\n '& .welcome-bold': {\r\n fontWeight: 600,\r\n marginLeft: 10,\r\n marginRight: 5,\r\n },\r\n '& .turnon': {\r\n marginRight: 5,\r\n color: '#0078D4',\r\n fontWeight: 'bold',\r\n },\r\n },\r\n },\r\n targeting: {\r\n background: 'white',\r\n width: 1300,\r\n marginBottom: 50,\r\n padding: 10,\r\n marginTop: 40,\r\n '& .title': {\r\n padding: 10,\r\n justifyContent: 'space-between',\r\n display: 'flex',\r\n borderBottom: '1px solid #EDEBE9',\r\n },\r\n '& .crud-audience-target-selector': {\r\n padding: '0 !important',\r\n },\r\n // hide optimize targeting in new flow, but reuse the logic\r\n '& .optimized-toggle-container': {\r\n visibility: 'hidden',\r\n width: 1,\r\n height: 1,\r\n },\r\n },\r\n previews: {\r\n width: 670,\r\n ...getMsanPreviewStyles(),\r\n '& .preview-header': {\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n },\r\n '& .new-responsive-ad-preview-container': {\r\n height: 500,\r\n position: 'relative',\r\n },\r\n '& .responsive-ad-preview-content': {\r\n border: 'none',\r\n left: '50%',\r\n top: 200,\r\n transform: 'translate(-50%, -50%)',\r\n position: 'absolute',\r\n },\r\n '& .carousel-indicators': {\r\n left: 50,\r\n },\r\n '& .carousel-control.right': {\r\n backgroundColor: 'transparent',\r\n color: '#0078d4',\r\n top: 480,\r\n },\r\n '& .carousel-control.left': {\r\n backgroundColor: 'transparent',\r\n color: '#0078d4',\r\n left: 620,\r\n top: 480,\r\n },\r\n '& .preview-type-string': {\r\n left: '50%',\r\n top: 440,\r\n transform: 'translate(-50%, -50%)',\r\n position: 'absolute',\r\n },\r\n '& .additional-disclaimer': {\r\n display: 'none',\r\n },\r\n },\r\n textInline: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n position: 'absolute',\r\n top: 0,\r\n bottom: 0,\r\n right: 0,\r\n left: 0,\r\n '& .headline': {\r\n fontWeight: 400,\r\n fontSize: 24,\r\n color: 'white',\r\n },\r\n '& .url': {\r\n color: '#9FCCAE',\r\n whiteSpace: 'nowrap',\r\n width: 200,\r\n textAlign: 'center',\r\n overflow: 'hidden',\r\n textOverflow: 'ellipsis',\r\n },\r\n },\r\n previewModal: {\r\n padding: '12px 12px 14px 24px',\r\n '& .header': {\r\n alignItems: 'center',\r\n justifyContent: 'space-between',\r\n display: 'flex',\r\n '& button': {\r\n color: '#605E5C',\r\n },\r\n },\r\n },\r\n addCustomAd: {\r\n width: 226,\r\n height: 202,\r\n display: 'flex',\r\n marginTop: 46,\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n background: 'rgba(0, 0, 0, 0.03)',\r\n border: '1px solid #E1E1E1',\r\n borderRadius: 6,\r\n cursor: 'pointer',\r\n },\r\n adsContainerWrapper: {\r\n display: 'flex',\r\n backgroundColor: '#FAF9F8',\r\n height: '100%',\r\n flexDirection: 'column',\r\n '& .conversion-wizard-footer': {\r\n flexBasis: 50,\r\n borderTop: '1px solid #edebe9',\r\n padding: '16px 24px',\r\n },\r\n },\r\n adsContainer: {\r\n padding: 30,\r\n height: '100%',\r\n backgroundColor: '#FAF9F8',\r\n flex: 1,\r\n overflowX: 'hidden !important',\r\n '& .alert': {\r\n margin: '10px 0',\r\n },\r\n },\r\n crudAudienceAdgroup: {\r\n height: 1,\r\n visibility: 'hidden',\r\n '& .crud-audience-adgroup': {\r\n height: 1,\r\n },\r\n },\r\n recommendCard: {\r\n '& .recommend-ad-checkbox': {\r\n padding: '0 12px',\r\n },\r\n '& .image-asset-grid-cell': {\r\n height: 250,\r\n width: 250,\r\n position: 'relative',\r\n },\r\n },\r\n\r\n});\r\n","import React, { useState, useMemo } from 'react';\r\nimport _ from 'underscore';\r\nimport { DefaultButton } from '@fluentui/react';\r\nimport classnames from 'classnames';\r\nimport { ResponsiveAdForPreview } from '@bingads-webui-campaign-react/audience-shared';\r\n\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { DependencyResolver } from '@bingads-webui-campaign/dependency-resolver';\r\nimport { PreviewGeneral, constants } from '@bingads-webui-campaign-react/image-experience';\r\nimport { Carousel } from '@bingads-webui-react/primitive-unthemed';\r\n\r\nimport { getAdCreationStyles } from './ad-creation-style';\r\n\r\n// eslint-disable-next-line no-underscore-dangle\r\ndeclare let _TL_: any;\r\n\r\ninterface IProps {\r\n onEdit: () => void;\r\n hideModal: () => void;\r\n preview: ResponsiveAdForPreview;\r\n}\r\n\r\nexport function AdPreview(props: IProps) {\r\n const { preview, onEdit, hideModal } = props;\r\n const classes = useDefaultStyles(getAdCreationStyles) as any;\r\n const [carouselIndex, setCarouselIndex] = useState(0);\r\n const {\r\n longHeadline, shortHeadline, businessName, url, description,\r\n } = preview;\r\n\r\n function handleSelect(selectedIndex) {\r\n setCarouselIndex(selectedIndex);\r\n }\r\n const i18n = DependencyResolver.get('component/i18n/loader!campaignui/feature/audience-campaign');\r\n\r\n const responsivePreviewTitle: string[] = useMemo(() => _.map(\r\n constants.multimediaAdinMSANRatios,\r\n typeKey => i18n.getString(\r\n 'ImageExperience_Ad_Preview_Title_Template',\r\n {\r\n // eslint-disable-next-line\r\n ratio: i18n.getString(constants.aspectRatios[typeKey].stringKey),\r\n }\r\n )\r\n ), [i18n]);\r\n\r\n function onEditInPreview() {\r\n hideModal();\r\n onEdit();\r\n }\r\n\r\n return (\r\n
\r\n
\r\n {responsivePreviewTitle[carouselIndex]}\r\n \r\n
\r\n
\r\n \r\n {\r\n preview.images[0].map((imageObj, i) => (\r\n \r\n \r\n \r\n ))\r\n }\r\n \r\n
\r\n
\r\n );\r\n}\r\n","/* eslint-disable react/require-default-props */\r\nimport React, { useMemo } from 'react';\r\nimport { BackboneViewWrapper } from '@bingads-webui-react/backbone-view-wrapper';\r\nimport { ResponsiveAdEditor } from '@bingads-webui-campaign/responsive-ad-editor';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { DependencyResolver } from '@bingads-webui-campaign/dependency-resolver';\r\nimport { schema } from '@bingads-webui-campaign/audience-campaign-shared';\r\n\r\nimport { Panel } from '@fluentui/react';\r\nimport { getAdCreationStyles } from './ad-creation-style';\r\nimport { getAds } from '../utils';\r\nimport { useAudienceCampaignCreationWizardStore, IAdModel, WIZARD_ACTIONS, LoadingState } from '../store';\r\n\r\n// eslint-disable-next-line no-underscore-dangle\r\ndeclare let _TL_: any;\r\n\r\ninterface IProps {\r\n isOpen: boolean;\r\n dismissPanel: () => void;\r\n adModel?: IAdModel;\r\n type: string;\r\n index?: number\r\n}\r\n\r\nexport function AdEditorPanel(props: IProps) {\r\n const {\r\n isOpen, dismissPanel, adModel, type, index,\r\n } = props;\r\n\r\n const {\r\n perfMarker,\r\n deps,\r\n dispatch,\r\n i18n,\r\n viewContext,\r\n activities: {\r\n adCreationActivity,\r\n },\r\n viewContext: {\r\n currentCampaign,\r\n currentAdGroup,\r\n },\r\n state: {\r\n finalURL,\r\n },\r\n } = useAudienceCampaignCreationWizardStore();\r\n const classes = useDefaultStyles(getAdCreationStyles) as any;\r\n\r\n const initializeOptions = useMemo(() => {\r\n // : instrumentation.aimAdCreation.create();\r\n const instr = DependencyResolver.get('campaignui/feature/instrumentation/index');\r\n instr.addScenario(schema);\r\n\r\n const adModelToView = {\r\n ...adModel,\r\n FinalUrls: [finalURL],\r\n } || { FinalUrls: [finalURL] };\r\n\r\n const logScenario = instr.aimCampaignCreationWizard.create();\r\n return {\r\n logScenario,\r\n viewContext: {\r\n currentCampaign,\r\n currentAdGroup,\r\n },\r\n isForVNext: true,\r\n newI18n: i18n,\r\n ad: adModelToView,\r\n pageContext: deps.pageContext,\r\n perfMarker,\r\n scenario: 'new-audience-static-creation',\r\n };\r\n }, [adModel, finalURL]); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n const logRecommendEditAds = (ad: IAdModel) => {\r\n adCreationActivity.signal(`Edit or create: ad Id: ${ad.Id}, type: ${type}`);\r\n };\r\n\r\n async function onSave({ savedAd, imageUrl }) {\r\n dismissPanel();\r\n let ad: IAdModel[] = [];\r\n try {\r\n dispatch({\r\n type: WIZARD_ACTIONS.LOADING_ADS_STATE_UPDATE,\r\n payload: LoadingState.Loading,\r\n });\r\n\r\n ad = await getAds([savedAd.Id], { viewContext });\r\n\r\n ad[0].Images.forEach((image) => {\r\n // eslint-disable-next-line no-param-reassign\r\n image.Asset.ImageUrl = imageUrl;\r\n });\r\n\r\n dispatch({\r\n type: WIZARD_ACTIONS.LOADING_ADS_STATE_UPDATE,\r\n payload: LoadingState.Sucess,\r\n });\r\n\r\n dispatch({\r\n type: WIZARD_ACTIONS.UPDATE_SAVEDADS,\r\n payload: {\r\n savedAd: ad[0],\r\n type,\r\n index,\r\n },\r\n });\r\n\r\n logRecommendEditAds(savedAd);\r\n } catch (error) {\r\n dispatch({\r\n type: WIZARD_ACTIONS.LOADING_ADS_STATE_UPDATE,\r\n payload: LoadingState.Failed,\r\n });\r\n }\r\n }\r\n\r\n return (\r\n {}}\r\n closeButtonAriaLabel=\"Close\"\r\n layerProps={{ styles: { root: { zIndex: 100 } } }}\r\n isOpen={isOpen}\r\n >\r\n \r\n \r\n );\r\n}\r\n","/* eslint-disable react/require-default-props */\r\nimport React from 'react';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { useBoolean } from '@fluentui/react-hooks';\r\n// @ts-ignore\r\nimport { AssetLibraryImageAssetsGridCellBase } from '@bingads-webui-campaign-react/asset-library-landing-page-content';\r\nimport { Checkbox, Modal, IconButton } from '@fluentui/react';\r\n// @ts-ignore\r\nimport { TilesGridCellActionButton as ActionButton } from '@bingads-webui-campaign-react/asset-library-components';\r\nimport { uploadRecommendImage } from '@bingads-webui-campaign/responsive-ad-editor';\r\nimport { ResponsiveAdForPreview } from '@bingads-webui-campaign-react/audience-shared';\r\nimport { AdPreview } from './ad-preview';\r\nimport { AdEditorPanel } from './ad-editor-panel';\r\nimport { getAdCreationStyles } from './ad-creation-style';\r\nimport { useAudienceCampaignCreationWizardStore, IAdModel, WIZARD_ACTIONS, LoadingState } from '../store';\r\n\r\n// eslint-disable-next-line no-underscore-dangle\r\ndeclare let _TL_: any;\r\n\r\ninterface IProps {\r\n index: number;\r\n preview: ResponsiveAdForPreview;\r\n type: string;\r\n checked?: boolean;\r\n hideEdit?: boolean;\r\n adModel?: IAdModel;\r\n onChange?: (index: number, checked?: boolean) => void;\r\n}\r\n\r\nexport function AdPreviewCard(props: IProps) {\r\n const {\r\n index, preview, onChange, type, adModel, hideEdit, checked,\r\n } = props;\r\n\r\n const {\r\n dispatch,\r\n i18n,\r\n state: {\r\n cid,\r\n aid,\r\n },\r\n } = useAudienceCampaignCreationWizardStore();\r\n\r\n const classes = useDefaultStyles(getAdCreationStyles) as any;\r\n\r\n const [previewOpen, { setTrue: showModal, setFalse: hideModal }] = useBoolean(false);\r\n const [isOpen, { setTrue: openPanel, setFalse: dismissPanel }] = useBoolean(false);\r\n async function onEdit() {\r\n dispatch({\r\n type: WIZARD_ACTIONS.EDITING_AD_STATE_UPDATE,\r\n payload: LoadingState.Loading,\r\n });\r\n\r\n try {\r\n if (type === 'recommend') {\r\n await uploadRecommendImage(adModel!.Images, { cid, aid }, {});\r\n }\r\n dispatch({\r\n type: WIZARD_ACTIONS.EDITING_AD_STATE_UPDATE,\r\n payload: LoadingState.Sucess,\r\n });\r\n } catch (error) {\r\n dispatch({\r\n type: WIZARD_ACTIONS.EDITING_AD_STATE_UPDATE,\r\n payload: LoadingState.Failed,\r\n });\r\n }\r\n openPanel();\r\n }\r\n\r\n return (\r\n
\r\n {onChange && onChange(index, c)} />}\r\n
\r\n (\r\n
\r\n {defaultContent}\r\n
\r\n
Ad
\r\n
\r\n
{preview.shortHeadline}
\r\n
{preview.url}
\r\n
\r\n
\r\n )}\r\n renderOverlayContent={() => {\r\n if (hideEdit) {\r\n return null;\r\n }\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n \r\n
\r\n \r\n
\r\n );\r\n }}\r\n />\r\n
\r\n\r\n
\r\n );\r\n}\r\n","import React, { useMemo } from 'react';\r\nimport { convertAdunitsToImageList } from '@bingads-webui-campaign/responsive-ad-editor/src/utils/ad-recommend-util';\r\nimport { Stack, Spinner } from '@fluentui/react';\r\nimport BlockUi from 'react-block-ui';\r\n\r\nimport { IAdModel, LoadingState, useAudienceCampaignCreationWizardStore, WIZARD_ACTIONS } from '../store';\r\nimport { AdPreviewCard } from './ad-preview-card';\r\n\r\nexport function RecommendedAdsPanel() {\r\n const {\r\n dispatch,\r\n state: {\r\n recommmendationsSelected,\r\n recommendations,\r\n savedRecommendations,\r\n loadingState: {\r\n loadingRecommendation,\r\n },\r\n },\r\n } = useAudienceCampaignCreationWizardStore();\r\n\r\n function onChange(index: number, checked?: boolean) {\r\n recommmendationsSelected[index] = !!checked;\r\n\r\n dispatch({\r\n type: WIZARD_ACTIONS.RECOMMENDADS_SELECTED,\r\n payload: {\r\n recommmendationsSelected: [...recommmendationsSelected],\r\n savedRecommendations,\r\n },\r\n });\r\n }\r\n\r\n const previews = useMemo(() => convertAdunitsToImageList(recommendations), [recommendations]);\r\n\r\n return (\r\n } >\r\n \r\n {previews.map((preview, index) =>\r\n ())}\r\n \r\n \r\n );\r\n}\r\n\r\n","/* eslint-disable jsx-a11y/no-static-element-interactions */\r\n/* eslint-disable jsx-a11y/click-events-have-key-events */\r\nimport React, { useMemo } from 'react';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { FontIcon, Stack } from '@fluentui/react';\r\nimport { useBoolean } from '@fluentui/react-hooks';\r\nimport { convertAdunitsToImageList } from '@bingads-webui-campaign/responsive-ad-editor/src/utils/ad-recommend-util';\r\n\r\nimport { useAudienceCampaignCreationWizardStore, WIZARD_ACTIONS } from '../store';\r\nimport { AdPreviewCard } from './ad-preview-card';\r\nimport { AdEditorPanel } from './ad-editor-panel';\r\nimport { getAdCreationStyles } from './ad-creation-style';\r\n\r\nexport function CustomAdsPanel() {\r\n const classes = useDefaultStyles(getAdCreationStyles) as any;\r\n const [isOpen, { setTrue: openPanel, setFalse: dismissPanel }] = useBoolean(false);\r\n\r\n const {\r\n dispatch,\r\n state: {\r\n customAdsSelected,\r\n customAds,\r\n },\r\n } = useAudienceCampaignCreationWizardStore();\r\n\r\n function onChange(index: number, checked?: boolean) {\r\n customAdsSelected[index] = !!checked;\r\n\r\n dispatch({\r\n type: WIZARD_ACTIONS.CUSTOMADS_SELECTED,\r\n payload: {\r\n customAdsSelected: [...customAdsSelected],\r\n customAds,\r\n },\r\n });\r\n }\r\n\r\n const previews = useMemo(() => convertAdunitsToImageList(customAds), [customAds]);\r\n\r\n return (\r\n \r\n\r\n
\r\n \r\n
\r\n \r\n\r\n {previews.map((preview, index) =>\r\n ())}\r\n\r\n
\r\n );\r\n}\r\n","/* eslint-disable react/require-default-props */\r\nimport React, { useEffect, useState } from 'react';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { FontIcon, DefaultButton } from '@fluentui/react';\r\nimport { useAudienceCampaignCreationWizardStore, WIZARD_ACTIONS } from '../store';\r\nimport { getAdCreationStyles } from './ad-creation-style';\r\n\r\ninterface IPredictiveTargetProps {\r\n isExpand?: boolean;\r\n setCollapse?: (val: boolean) => void;\r\n}\r\n\r\n// eslint-disable-next-line no-underscore-dangle\r\ndeclare let _TL_: any;\r\n\r\nexport function PredictiveTargetText(props: IPredictiveTargetProps) {\r\n const {\r\n i18n,\r\n } = useAudienceCampaignCreationWizardStore();\r\n\r\n const {\r\n isExpand,\r\n setCollapse,\r\n } = props;\r\n const classes = useDefaultStyles(getAdCreationStyles) as any;\r\n\r\n return (\r\n
\r\n
\r\n \r\n {i18n.getString(_TL_('Predictive Targeting is turned'))}\r\n {i18n.getString(_TL_('On'))}\r\n {i18n.getString(_TL_('We will try to find the best audience for your ads to increase performance.'))}\r\n
\r\n {!isExpand && setCollapse(true)} />}\r\n
\r\n );\r\n}\r\n\r\nexport function Targeting() {\r\n const {\r\n i18n,\r\n dispatch,\r\n state: {\r\n adgroupTargetDom,\r\n adgroupBackboneView,\r\n },\r\n } = useAudienceCampaignCreationWizardStore();\r\n\r\n let containerRef;\r\n\r\n const classes = useDefaultStyles(getAdCreationStyles) as any;\r\n const [isExpand, setCollapse] = useState(false);\r\n useEffect(() => {\r\n let adgroupDom;\r\n if (adgroupTargetDom) {\r\n adgroupDom = adgroupTargetDom;\r\n } else {\r\n adgroupDom = adgroupBackboneView.render().$el;\r\n\r\n dispatch({\r\n type: WIZARD_ACTIONS.CHANGE_ADGROUP_TARGET_DOM,\r\n payload: adgroupDom,\r\n });\r\n }\r\n adgroupDom.appendTo(containerRef);\r\n adgroupBackboneView.willShow();\r\n }, []); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n return (\r\n
\r\n

\r\n {i18n.getString(_TL_('Targeting'))}\r\n setCollapse(!isExpand)}\r\n className=\"delete-hotspot\"\r\n style={{ cursor: 'pointer' }}\r\n iconName={isExpand ? 'ChevronDown' : 'ChevronUp'}\r\n />\r\n

\r\n \r\n
{ containerRef = container; }} />\r\n
\r\n );\r\n}\r\n","import React, { useState } from 'react';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { Alert } from '@bingads-webui-react/alert';\r\nimport BlockUi from 'react-block-ui';\r\nimport { Spinner } from '@fluentui/react';\r\nimport { IImageExperienceImage, IRecommendAd } from '@bingads-webui-campaign-react/audience-shared';\r\nimport { DependencyResolver } from '@bingads-webui-campaign/dependency-resolver';\r\nimport { uploadRecommendImage, getMultiImagesFromMTAssetsAsync } from '@bingads-webui-campaign/responsive-ad-editor';\r\n\r\n\r\nimport { useAudienceCampaignCreationWizardStore, WIZARD_ACTIONS, LoadingState, IAdModel } from '../store';\r\nimport { getAdCreationStyles } from './ad-creation-style';\r\nimport { RecommendedAdsPanel } from './recommended-ads-panel';\r\nimport { CustomAdsPanel } from './custom-ads-panel';\r\nimport { StepFooter } from '../step-footer';\r\nimport { Targeting } from './targeting';\r\nimport { handleErrors, removeAds, getAds } from '../utils';\r\nimport { ErrorView } from '../components';\r\n\r\n// eslint-disable-next-line no-underscore-dangle\r\ndeclare let _TL_: any;\r\n\r\nexport function AdCreationContainer() {\r\n const {\r\n dispatch,\r\n i18n,\r\n viewContext,\r\n activities: {\r\n adCreationActivity,\r\n },\r\n state: {\r\n cid,\r\n aid,\r\n customAds,\r\n adgroupBackboneView,\r\n currentAdgroup: {\r\n id: adgroupId,\r\n },\r\n currentCampaign: {\r\n id: campaignId,\r\n },\r\n recommmendationsSelected,\r\n recommendations,\r\n customAdsSelected,\r\n savedRecommendations,\r\n loadingState: {\r\n editingAd,\r\n saveAds,\r\n loadingAds,\r\n loadingRecommendation,\r\n },\r\n },\r\n } = useAudienceCampaignCreationWizardStore();\r\n const [errors, setErrors] = useState([]);\r\n\r\n const classes = useDefaultStyles(getAdCreationStyles) as any;\r\n\r\n async function save(selectedRecommendations: IRecommendAd[]) {\r\n const jsdata = DependencyResolver.get('component/js-data-campaign/index');\r\n const odata = DependencyResolver.get('component/http/channel/odata');\r\n const baseURL = `/Customers(${cid})/Accounts(${aid})/`;\r\n\r\n const uploadPromises = selectedRecommendations.map(recommendation =>\r\n uploadRecommendImage(recommendation.Images, { cid, aid }, {})\r\n .then(() => getMultiImagesFromMTAssetsAsync(odata, baseURL, recommendation.Images)));\r\n\r\n const imagesByAds: IImageExperienceImage[][][] = await Promise.all(uploadPromises);\r\n const promises = selectedRecommendations.map((recommendation, index) => {\r\n const croppedImages: IImageExperienceImage[][] = imagesByAds[index];\r\n\r\n const params = {\r\n AdGroup: {\r\n Id: adgroupId,\r\n },\r\n BusinessName: recommendation.BusinessName,\r\n FinalUrls: recommendation.FinalUrls,\r\n Descriptions: JSON.stringify(recommendation.Descriptions.map(desc => ({ Text: desc.Asset.Text }))),\r\n Headlines: JSON.stringify(recommendation.Headlines.map(desc => ({ Text: desc.Asset.Text }))),\r\n LongHeadlines: JSON.stringify(recommendation.LongHeadlines.map(desc => ({ Text: desc.Asset.Text }))),\r\n Images: JSON.stringify(croppedImages.map(imageList => ({\r\n id: imageList[0].Id,\r\n idString: imageList[0].IdString,\r\n subType: 'LandscapeImageMedia',\r\n cropX: imageList[0].CropSettings!.SourceX,\r\n cropY: imageList[0].CropSettings!.SourceY,\r\n cropWidth: imageList[0].CropSettings!.SourceWidth,\r\n cropHeight: imageList[0].CropSettings!.SourceHeight,\r\n }))),\r\n };\r\n\r\n return jsdata.ResponsiveAd.create(params, { adapter: 'bulk', cacheResponse: false });\r\n });\r\n\r\n const adgroupUpdatePromise = adgroupBackboneView.validateAndSave();\r\n\r\n const selectedTargets = Object.values(adgroupBackboneView.audienceTargetSelector.selectionStates).filter(selectState => selectState);\r\n adCreationActivity.signal(`campaign id: ${campaignId}, selected target count: ${selectedTargets.length}`, 'AutoTargeting');\r\n\r\n const response = await Promise.all([...promises, adgroupUpdatePromise]);\r\n return response;\r\n }\r\n\r\n const footButtons = [{\r\n type: 'Primary',\r\n text: i18n.getString(_TL_('Save & go to next step')),\r\n onClick: async () => {\r\n try {\r\n const recommendationsNeedToSave: IRecommendAd[] = [];\r\n recommmendationsSelected.forEach((selected, index) => {\r\n if (selected && !savedRecommendations[index]) {\r\n recommendationsNeedToSave.push(recommendations[index]);\r\n }\r\n });\r\n\r\n if (recommmendationsSelected.filter(select => !!select).length === 0 &&\r\n customAdsSelected.filter(select => !!select).length === 0) {\r\n const validationErrors: any = [];\r\n\r\n validationErrors.push(i18n.getString(_TL_('Please add at least one ad.')));\r\n\r\n setErrors(validationErrors);\r\n return;\r\n }\r\n\r\n dispatch({\r\n type: WIZARD_ACTIONS.SAVE_ADS_STATE_UPDATE,\r\n payload: LoadingState.Loading,\r\n });\r\n\r\n const response: any = await save(recommendationsNeedToSave);\r\n\r\n // remove last element which is adgroup response\r\n const savedAdModels: IAdModel[] = await getAds(response.slice(0, -1).map(ad => ad.Id), { viewContext });\r\n\r\n savedAdModels.forEach((ad) => {\r\n adCreationActivity.signal(`Recommended ad Id: ${ad.Id}, type: recommend`);\r\n });\r\n\r\n savedAdModels.forEach((ad, index) => {\r\n ad.Images.forEach((image, imageIndex) => {\r\n // eslint-disable-next-line no-param-reassign\r\n image.Asset.ImageUrl = recommendationsNeedToSave[index].Images[imageIndex].Asset.ImageUrl;\r\n });\r\n });\r\n\r\n const tmpSavedRecommendations = [...savedRecommendations];\r\n const tmpSavedCustomAds = [...customAds];\r\n const tmpCustomAdsSelected = [...customAdsSelected];\r\n const removedAds: IAdModel[] = [];\r\n\r\n recommmendationsSelected.forEach((selected, index) => {\r\n // the ads need to be saved in onclick save event\r\n if (selected && !tmpSavedRecommendations[index]) {\r\n if (savedAdModels.length > 0) {\r\n tmpSavedRecommendations[index] = savedAdModels.shift()!;\r\n } else {\r\n adCreationActivity.error(`tmpSavedRecommendations setting failed by: ${JSON.stringify(savedAdModels)}`);\r\n }\r\n }\r\n // the ads need to be removed in onclick save event\r\n if (!selected && tmpSavedRecommendations[index]) {\r\n removedAds.push(tmpSavedRecommendations[index] as IAdModel);\r\n tmpSavedRecommendations[index] = null;\r\n }\r\n });\r\n\r\n customAdsSelected.forEach((selected, index) => {\r\n if (!selected && tmpSavedCustomAds[index]) {\r\n removedAds.push(tmpSavedCustomAds.splice(index, 1)[0]);\r\n tmpCustomAdsSelected.splice(index, 1);\r\n }\r\n });\r\n\r\n removeAds(removedAds, { viewContext });\r\n\r\n dispatch({\r\n type: WIZARD_ACTIONS.RECOMMENDADS_SELECTED,\r\n payload: {\r\n recommmendationsSelected,\r\n savedRecommendations: tmpSavedRecommendations,\r\n },\r\n });\r\n\r\n dispatch({\r\n type: WIZARD_ACTIONS.CUSTOMADS_SELECTED,\r\n payload: {\r\n customAdsSelected: tmpCustomAdsSelected,\r\n customAds: tmpSavedCustomAds,\r\n },\r\n });\r\n dispatch({\r\n type: WIZARD_ACTIONS.SAVE_ADS_STATE_UPDATE,\r\n payload: LoadingState.Sucess,\r\n });\r\n\r\n dispatch({\r\n type: WIZARD_ACTIONS.NAVIGATE_TO_SUMMARY,\r\n });\r\n } catch (error) {\r\n handleErrors(adCreationActivity, error, (errorMsgs) => {\r\n setErrors(errorMsgs.map(errorMsg => errorMsg.message));\r\n });\r\n dispatch({\r\n type: WIZARD_ACTIONS.SAVE_ADS_STATE_UPDATE,\r\n payload: LoadingState.Failed,\r\n });\r\n }\r\n },\r\n }, {\r\n type: 'Default',\r\n text: i18n.getString(_TL_('Back')),\r\n onClick: () => {\r\n dispatch({\r\n type: WIZARD_ACTIONS.NAVIGATE_TO_CAMPAIGNSETTINGS,\r\n });\r\n },\r\n }];\r\n\r\n return (\r\n
\r\n }\r\n style={{ flex: 1 }}\r\n >\r\n
\r\n {\r\n (loadingRecommendation === LoadingState.Loading ||\r\n // @ts-ignore\r\n (recommendations.length !== 0 && loadingRecommendation !== LoadingState.Loading)) &&\r\n
\r\n

{i18n.getString(_TL_('Recommended Ads'))}

\r\n
\r\n )}\r\n dismissible={false}\r\n />\r\n
\r\n \r\n
\r\n }\r\n\r\n

{i18n.getString(_TL_('Custom Ads'))}

\r\n \r\n\r\n \r\n \r\n
\r\n \r\n\r\n \r\n
\r\n );\r\n}\r\n","export const getSummaryStyles = () => ({\r\n summaryContainerWrapper: {\r\n display: 'flex',\r\n height: '100%',\r\n backgroundColor: '#FAF9F8',\r\n flexDirection: 'column',\r\n '& .conversion-wizard-footer': {\r\n flexBasis: 50,\r\n borderTop: '1px solid #edebe9',\r\n padding: '16px 24px',\r\n },\r\n '& .summary-container': {\r\n flex: 1,\r\n padding: 30,\r\n overflow: 'auto',\r\n },\r\n '& .title': {\r\n position: 'relative',\r\n '& h2': {\r\n marginBottom: 20,\r\n },\r\n '& .review-image': {\r\n position: 'absolute',\r\n top: 0,\r\n left: 380,\r\n },\r\n },\r\n '& .summary-section': {\r\n backgroundColor: 'white',\r\n marginTop: 40,\r\n '& .campaign-summary-item-wrapper': {\r\n display: 'flex',\r\n padding: '10px 0',\r\n '& .campaign-summary-item-key': {\r\n color: '#605E5C',\r\n width: 150,\r\n },\r\n '& .campaign-summary-item-value': {\r\n color: '#323130',\r\n },\r\n },\r\n },\r\n },\r\n});\r\n","import React, { useMemo, useState } from 'react';\r\nimport { Stack, IStackStyles, DefaultButton, Spinner } from '@fluentui/react';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { setClarityTag } from '@bingads-webui-universal/clarity';\r\nimport { routeStore, siteMapStore } from '@bingads-webui-campaign/global-context-store';\r\nimport { getLocalStorage } from '@bingads-webui/storage';\r\n// @ts-ignore\r\nimport { objectivesConfig } from '@bingads-webui-campaign-react/campaign-adgroup-creation/src/helper/objectives-config';\r\nimport { convertAdunitsToImageList } from '@bingads-webui-campaign/responsive-ad-editor/src/utils/ad-recommend-util';\r\nimport BlockUi from 'react-block-ui';\r\nimport { DependencyResolver } from '@bingads-webui-campaign/dependency-resolver';\r\nimport { IRecommendAd } from '@bingads-webui-campaign-react/audience-shared';\r\n\r\nimport { AdPreviewCard, PredictiveTargetText } from '../ad-creation';\r\nimport { LoadingState, useAudienceCampaignCreationWizardStore, WIZARD_ACTIONS } from '../store';\r\nimport { getSummaryStyles } from './summary-styles';\r\nimport { StepFooter } from '../step-footer';\r\nimport { navigateToRoute, handleErrors } from '../utils';\r\nimport { ErrorView } from '../components';\r\n\r\n// @ts-ignore\r\nimport TestImage from './image.svg';\r\nimport { BidStrategy } from '../campaign-settings';\r\n\r\n// eslint-disable-next-line no-underscore-dangle\r\ndeclare let _TL_: any;\r\n\r\nexport function SummaryContainer() {\r\n const {\r\n i18n,\r\n permissions,\r\n dispatch,\r\n startToFinishMarker,\r\n activities: {\r\n summaryActivity,\r\n },\r\n viewContext: {\r\n accountCurrencyCode,\r\n },\r\n state: {\r\n currentCampaign: {\r\n name: campaignName,\r\n id: campaignId,\r\n },\r\n currentAdgroup: {\r\n id: adgroupId,\r\n },\r\n loadingState: {\r\n saveAds,\r\n finishCreation,\r\n loadingAds,\r\n },\r\n adgroupBackboneView,\r\n customAds,\r\n finalURL,\r\n savedRecommendations,\r\n budget,\r\n bidValue,\r\n targetCpa,\r\n bidStrategy,\r\n },\r\n } = useAudienceCampaignCreationWizardStore();\r\n const classes = useDefaultStyles(getSummaryStyles) as any;\r\n const [errors, setErrors] = useState([]);\r\n\r\n const logOnSave = () => {\r\n startToFinishMarker.done();\r\n summaryActivity.signal('finish creating campaign');\r\n summaryActivity.signal(`ad group Id: ${adgroupId}, campaign Id: ${campaignId}, bidStrategy: ${bidStrategy}, bidValue: ${bidValue}, targetCpa: ${targetCpa}`, 'AutoBidding');\r\n };\r\n\r\n const getAdGroupLocations = () => {\r\n try {\r\n return adgroupBackboneView.locationSetting.getTargetedLocations();\r\n } catch (error) {\r\n summaryActivity.error('getAdGroupLocations: could not get locations');\r\n }\r\n\r\n return [];\r\n };\r\n const adGroupLocations = getAdGroupLocations();\r\n\r\n const footButtons = [{\r\n type: 'Primary',\r\n text: i18n.getString(_TL_('Save campaign')),\r\n onClick: async () => {\r\n const jsdata = DependencyResolver.get('component/js-data-campaign/index');\r\n\r\n const params = {\r\n Id: campaignId,\r\n Status: 'Active',\r\n };\r\n const requestOptions = { adapter: 'bulk', cacheResponse: false };\r\n try {\r\n dispatch({\r\n type: WIZARD_ACTIONS.FINISH_CREATION,\r\n payload: LoadingState.Loading,\r\n });\r\n await jsdata.Campaign.update(campaignId, params, requestOptions);\r\n\r\n dispatch({\r\n type: WIZARD_ACTIONS.FINISH_CREATION,\r\n payload: LoadingState.Sucess,\r\n });\r\n logOnSave();\r\n setClarityTag({ finishAudienceCampaign: 'true' });\r\n\r\n navigateToRoute(routeStore, siteMapStore.state.siteMap, 'campaigns');\r\n } catch (error) {\r\n dispatch({\r\n type: WIZARD_ACTIONS.FINISH_CREATION,\r\n payload: LoadingState.Failed,\r\n });\r\n\r\n handleErrors(summaryActivity, error, (errorMsgs) => {\r\n setErrors(errorMsgs.map(errorMsg => errorMsg.message));\r\n });\r\n }\r\n },\r\n }, {\r\n type: 'Default',\r\n text: i18n.getString(_TL_('Back')),\r\n onClick: () => {\r\n dispatch({\r\n type: WIZARD_ACTIONS.NAVIGATE_TO_ADS,\r\n });\r\n },\r\n }];\r\n\r\n const stackStyles: IStackStyles = {\r\n root: {\r\n padding: 10,\r\n borderBottom: '1px solid #EDEBE9',\r\n },\r\n };\r\n\r\n const bidStrategyValueMapping = {\r\n EnhancedCpc: i18n.getString(_TL_('Enhanced CPC')),\r\n ManualCpc: i18n.getString(_TL_('Manual CPC')),\r\n ManualCpm: i18n.getString(_TL_('Manual CPM')),\r\n MaxConversions: i18n.getString(_TL_('Maximize Conversions')),\r\n };\r\n\r\n const campaignObjective: any = objectivesConfig({ i18n, permissions }).find(config => config.id === getLocalStorage().get('CampaignObjective')) || {};\r\n\r\n const summaryItems = [{\r\n key: 'Campaign objective',\r\n keyName: i18n.getString(_TL_('Campaign objective: ')),\r\n value: campaignObjective.descriptionLine || i18n.getString(_TL_('Visit my website')),\r\n }, {\r\n key: 'Campaign name',\r\n keyName: i18n.getString(_TL_('Campaign name: ')),\r\n value: campaignName,\r\n }, {\r\n key: 'Final URL',\r\n keyName: i18n.getString(_TL_('Final URL: ')),\r\n value: finalURL,\r\n }, {\r\n key: 'Budget',\r\n keyName: i18n.getString(_TL_('Budget: ')),\r\n value: `${budget} ${accountCurrencyCode} / ${i18n.getString(_TL_('day'))}`,\r\n }, {\r\n key: 'Bidding',\r\n keyName: i18n.getString(_TL_('Bidding: ')),\r\n value: `${bidStrategyValueMapping[bidStrategy]}: ${bidValue} ${accountCurrencyCode}`,\r\n }, {\r\n key: 'TargetValue',\r\n keyName: i18n.getString(_TL_('Target CPA: ')),\r\n value: `Maximize Conversions: ${targetCpa} ${accountCurrencyCode}`,\r\n }, {\r\n key: 'Locations',\r\n keyName: i18n.getString(_TL_('Location selected for the Ad Group: ')),\r\n // value: i18n.getString('All available countries/regions'),\r\n // eslint-disable-next-line no-nested-ternary\r\n value: adGroupLocations.length === 0 ?\r\n i18n.getString('All available countries/regions') :\r\n (adGroupLocations.length > 3 ?\r\n `${adGroupLocations.join(',')} and More...` :\r\n adGroupLocations.join(',')),\r\n }];\r\n\r\n const previews = useMemo(() => convertAdunitsToImageList([\r\n ...customAds.filter(ad => !!ad),\r\n ...savedRecommendations.filter(ad => !!ad)] as IRecommendAd[]), [customAds, savedRecommendations]);\r\n\r\n return (\r\n }>\r\n
\r\n
\r\n
\r\n

{i18n.getString(_TL_('Prepare for success!'))}

\r\n
{i18n.getString(_TL_('Your campaign is looking great. Sit back and watch it grow.'))}
\r\n
{i18n.getString(_TL_('Review the details of your campaign before you publish.'))}
\r\n \"\"\r\n
\r\n\r\n
\r\n \r\n

{i18n.getString(_TL_('Campaign settings'))}

\r\n dispatch({ type: WIZARD_ACTIONS.NAVIGATE_TO_CAMPAIGNSETTINGS })}\r\n />\r\n
\r\n \r\n {['Campaign objective', 'Campaign name', 'Final URL'].map((key) => {\r\n const summaryItem = summaryItems.find(item => item.key === key)!;\r\n return (\r\n
\r\n
{summaryItem.keyName}
\r\n
{summaryItem.value}
\r\n
\r\n );\r\n })}\r\n
\r\n \r\n {['Budget', bidStrategy === BidStrategy.MaxConversions ? 'TargetValue' : 'Bidding'].map((key) => {\r\n const summaryItem = summaryItems.find(item => item.key === key)!;\r\n return (\r\n
\r\n
{summaryItem.keyName}
\r\n
{summaryItem.value}
\r\n
\r\n );\r\n })}\r\n
\r\n \r\n {['Locations'].map((key) => {\r\n const summaryItem = summaryItems.find(item => item.key === key)!;\r\n return (\r\n
\r\n
{summaryItem.keyName}
\r\n
{summaryItem.value}
\r\n
\r\n );\r\n })}\r\n
\r\n
\r\n\r\n }>\r\n
\r\n \r\n

{i18n.getString(_TL_('Selected Ads'))}

\r\n dispatch({ type: WIZARD_ACTIONS.NAVIGATE_TO_ADS })}\r\n />\r\n
\r\n \r\n {previews.map((preview, index) => )}\r\n \r\n \r\n
\r\n
\r\n \r\n
\r\n \r\n\r\n
\r\n
\r\n );\r\n}\r\n","export const getStyles = (components, { palette = {} as any } = {}) => {\r\n const color = {\r\n completedBorder: palette.blue,\r\n completedIcon: palette.blue,\r\n inProgressIcon: '#c0def6',\r\n incompleteBorder: '#ebebeb',\r\n incompleteIcon: palette.neutralLight,\r\n background: palette.white,\r\n stepContentBorder: palette.neutralQuaternaryAlt,\r\n stepFooterBorder: palette.neutralLight,\r\n };\r\n return {\r\n wizardContentContainer: {\r\n display: 'flex',\r\n height: '100%',\r\n '& h2': {\r\n margin: 0,\r\n },\r\n '& h3': {\r\n margin: 0,\r\n },\r\n '& .step-container': {\r\n flex: 1,\r\n position: 'relative',\r\n '& .step': {\r\n height: '100%',\r\n position: 'absolute',\r\n width: '100%',\r\n top: 0,\r\n left: 0,\r\n },\r\n },\r\n '& .react-blocker': {\r\n height: '100%',\r\n width: '100%',\r\n },\r\n },\r\n wizardListContainer: {\r\n width: '228px',\r\n minWidth: '228px',\r\n borderRight: `1px solid ${color.stepContentBorder}`,\r\n paddingLeft: '32px',\r\n paddingTop: '32px',\r\n paddingBottom: '32px',\r\n overflow: 'hidden',\r\n minHeight: 450,\r\n\r\n '& ol': {\r\n margin: 0,\r\n padding: 0,\r\n listStyle: 'none',\r\n },\r\n\r\n // Styles for drawing the vertical line\r\n '& .step-progress-list-item': {\r\n borderLeft: `2px solid ${color.completedBorder}`,\r\n '&.step-progress-list-item-ahead': { borderLeftColor: color.incompleteBorder },\r\n },\r\n\r\n // top level list items\r\n '& ol.step-progress-list>.step-progress-list-item': {\r\n paddingTop: '24px',\r\n\r\n '&:first-child': { borderLeftColor: color.background, paddingTop: 0 },\r\n\r\n '&>.step-progress-list-item-glyphicon': {\r\n marginLeft: '-8px',\r\n marginRight: '8px',\r\n background: color.background,\r\n paddingTop: '5px',\r\n paddingBottom: '4px',\r\n },\r\n\r\n '&>.step-progress-list-item-glyphicon.iconba-RadioBullet2': {\r\n paddingTop: 0,\r\n paddingBottom: 0,\r\n transform: 'scale(1.52)',\r\n },\r\n },\r\n\r\n // nested list items\r\n '& ol.step-progress-list-item-list>.step-progress-list-item': {\r\n fontSize: '12px',\r\n lineHeight: '16px',\r\n paddingTop: '24px',\r\n marginLeft: '-2px',\r\n\r\n '&>.step-progress-list-item-glyphicon': {\r\n marginLeft: '-8px',\r\n marginRight: '12px',\r\n background: color.background,\r\n paddingBottom: '1px',\r\n },\r\n },\r\n\r\n '& .step-progress-list-item-selected, & .step-progress-list-item-contains-selected': { fontWeight: '600' },\r\n\r\n // glyphicon colors\r\n '& .step-progress-list-item-behind .step-progress-list-item-glyphicon': {\r\n color: color.completedIcon,\r\n },\r\n '& .step-progress-list-item-selected .step-progress-list-item-glyphicon, & .step-progress-list-item-contains-selected>.step-progress-list-item-glyphicon': {\r\n color: color.inProgressIcon,\r\n },\r\n '& .step-progress-list-item-ahead .step-progress-list-item-glyphicon': {\r\n color: color.incompleteIcon,\r\n },\r\n },\r\n };\r\n};\r\n","import React, { useEffect } from 'react';\r\nimport { VerticalSeparatedLayout } from '@bingads-webui-react/steps';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { setClarityTag } from '@bingads-webui-universal/clarity';\r\nimport 'react-block-ui/style.css';\r\n\r\nimport { AudienceCampaignCreationWizardProvider, useAudienceCampaignCreationWizardStore, Step as CreationStep } from './store';\r\nimport { AdCreationContainer } from './ad-creation';\r\nimport { CampaignSettingsContainer } from './campaign-settings';\r\nimport { SummaryContainer } from './summary';\r\nimport { getStyles } from './audience-creation-flow-styles';\r\n\r\n// eslint-disable-next-line no-underscore-dangle\r\ndeclare let _TL_: any;\r\n\r\nconst {\r\n StepsContextProvider,\r\n StepContainer,\r\n Step,\r\n StepProgressList,\r\n} = VerticalSeparatedLayout;\r\n\r\ninterface IProps {\r\n perfMarker: any;\r\n deps: any;\r\n newI18n: any;\r\n viewContext: any;\r\n}\r\n\r\nexport function App() {\r\n const {\r\n i18n,\r\n startToFinishMarker,\r\n activities: {\r\n campaignSettingActivity,\r\n },\r\n state: {\r\n currentStep,\r\n },\r\n } = useAudienceCampaignCreationWizardStore();\r\n\r\n useEffect(() => {\r\n startToFinishMarker.willInit();\r\n campaignSettingActivity.signal('setup campaign');\r\n\r\n setClarityTag({ startSimplifyAudienceCampaign: 'true' });\r\n }, []); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n const classes = useDefaultStyles(getStyles) as any;\r\n const getStepProgressItemGlyphicon = () => 'ba-RadioBullet2';\r\n\r\n return (\r\n \r\n
\r\n
\r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n );\r\n}\r\n\r\nexport const StaticAudienceCampaignCreation = React.memo((props: IProps) => {\r\n const {\r\n perfMarker,\r\n deps,\r\n newI18n,\r\n viewContext,\r\n } = props;\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n});\r\n","export const Status = {\r\n Active: 'Active',\r\n Pending: 'Pending',\r\n Warning: 'Warning',\r\n Error: 'Error',\r\n};\r\n","import { makeStyles, shorthands } from '@fluentui/react-components';\r\n\r\nconst parentShared = {\r\n height: '20px',\r\n width: '20px',\r\n ...shorthands.borderRadius('50%'),\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n};\r\n\r\nexport const useStyles = makeStyles({\r\n parentActive: {\r\n ...parentShared,\r\n backgroundColor: '#dff6dd',\r\n },\r\n parentPending: {\r\n ...parentShared,\r\n backgroundColor: '#EFF6FC',\r\n },\r\n parentWarning: {\r\n ...parentShared,\r\n backgroundColor: '#FFF4CE',\r\n },\r\n parentError: {\r\n ...parentShared,\r\n backgroundColor: '#FDE7E9',\r\n },\r\n childActive: {\r\n color: '#107C10',\r\n },\r\n childPending: {\r\n color: '#004578',\r\n },\r\n childWarning: {\r\n color: '#D83B01',\r\n },\r\n childError: {\r\n color: '#A80000',\r\n },\r\n});\r\n","import React, { useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classNames from 'classnames';\r\n\r\nimport {\r\n CheckmarkCircleRegular,\r\n CircleRegular,\r\n WarningRegular,\r\n ErrorCircleRegular,\r\n} from '@fluentui/react-icons';\r\n\r\nimport { Status } from '../const';\r\nimport { useStyles } from '../styles/icon-styles';\r\n\r\nexport function StatusIcon({\r\n status,\r\n}) {\r\n const classes = useStyles();\r\n const {\r\n IconElement,\r\n parentClass,\r\n childClass,\r\n } = useMemo(() => {\r\n if (status === Status.Active) {\r\n return {\r\n IconElement: CheckmarkCircleRegular,\r\n parentClass: classes.parentActive,\r\n childClass: classes.childActive,\r\n };\r\n } else if (status === Status.Pending) {\r\n return {\r\n IconElement: CircleRegular,\r\n parentClass: classes.parentPending,\r\n childClass: classes.childPending,\r\n };\r\n } else if (status === Status.Warning) {\r\n return {\r\n IconElement: WarningRegular,\r\n parentClass: classes.parentWarning,\r\n childClass: classes.childWarning,\r\n };\r\n }\r\n\r\n return {\r\n IconElement: ErrorCircleRegular,\r\n parentClass: classes.parentError,\r\n childClass: classes.childError,\r\n };\r\n }, [classes, status]);\r\n\r\n return (\r\n
\r\n \r\n
\r\n );\r\n}\r\n\r\nStatusIcon.propTypes = {\r\n status: PropTypes.oneOf(Object.values(Status)).isRequired,\r\n};\r\n","import { makeStyles, shorthands } from '@fluentui/react-components';\r\n\r\nexport const useStyles = makeStyles({\r\n statusItem: {\r\n display: 'flex',\r\n flexDirection: 'row',\r\n alignItems: 'center',\r\n ...shorthands.gap('4px'),\r\n },\r\n nameText: {\r\n color: '#605E5C',\r\n },\r\n statusLabelMsg: {\r\n fontWeight: 'bold',\r\n color: '#707070',\r\n },\r\n statusLabelMsgWithPopover: {\r\n fontWeight: 'bold',\r\n color: '#707070',\r\n '&:hover': {\r\n cursor: 'pointer',\r\n },\r\n },\r\n popover: {\r\n width: '240px',\r\n },\r\n popoverTitle: {\r\n display: 'flex',\r\n flexDirection: 'row',\r\n alignItems: 'center',\r\n ...shorthands.gap('4px'),\r\n color: '#323130',\r\n },\r\n popoverTitleText: {\r\n fontWeight: 'bold',\r\n },\r\n popoverMsg: {\r\n marginTop: '16px',\r\n color: '#323130',\r\n },\r\n footer: {\r\n display: 'flex',\r\n flexDirection: 'row',\r\n alignItems: 'center',\r\n justifyContent: 'space-between',\r\n marginTop: '12px',\r\n },\r\n});\r\n","import _ from 'underscore';\r\nimport React, { useMemo, useRef, useCallback } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classNames from 'classnames';\r\n\r\nimport {\r\n Body1,\r\n Body2,\r\n Button,\r\n Popover,\r\n PopoverTrigger,\r\n PopoverSurface,\r\n useId,\r\n Link,\r\n} from '@fluentui/react-components';\r\n\r\nimport { Status } from '../const';\r\nimport { StatusIcon } from './status-icon';\r\nimport { useStyles } from '../styles/status-popover-styles';\r\n\r\nexport function StatusPopoverItem({\r\n name,\r\n status,\r\n statusLabelMsg,\r\n cardMsg,\r\n cardButtonText,\r\n onCardButtonClicked,\r\n customPopoverProps,\r\n learnMoreLink,\r\n i18n,\r\n}) {\r\n const classes = useStyles();\r\n const id = useId();\r\n const triggerRef = useRef(null);\r\n\r\n // TODO: This is a workaround to focus on the trigger element when the popover is opened.\r\n // We should remove this workaround once the issue is fixed in the Fluent UI.\r\n const setFocus = useCallback(() => {\r\n if (triggerRef && triggerRef.current) {\r\n triggerRef.current.focus();\r\n }\r\n }, [triggerRef]);\r\n\r\n const labelMsgPart = useMemo(() => {\r\n if (_.isEmpty(statusLabelMsg)) {\r\n return null;\r\n }\r\n\r\n if (cardMsg) {\r\n return (\r\n \r\n \r\n {statusLabelMsg}\r\n \r\n \r\n
\r\n
\r\n {`${name}: ${statusLabelMsg}`}\r\n
\r\n {cardMsg}\r\n \r\n {\r\n onCardButtonClicked &&\r\n \r\n {cardButtonText}\r\n \r\n }\r\n {learnMoreLink &&\r\n \r\n {i18n.getString(_TL_('Learn more'))}\r\n \r\n }\r\n \r\n
\r\n
\r\n
\r\n );\r\n }\r\n\r\n return (\r\n {statusLabelMsg}\r\n );\r\n }, [cardMsg, classes.statusLabelMsg, classes.statusLabelMsgWithPopover, classes.popover, classes.popoverTitle, classes.popoverTitleName, classes.popoverTitleValue, classes.popoverMsg, classes.popoverButton, customPopoverProps, statusLabelMsg, setFocus, id, name, onCardButtonClicked, cardButtonText]);\r\n\r\n const className = name && name.replaceAll(' ', '-').toLowerCase();\r\n return (\r\n
\r\n \r\n {`${name}:`}\r\n {labelMsgPart}\r\n
\r\n );\r\n}\r\n\r\nStatusPopoverItem.propTypes = {\r\n name: PropTypes.string.isRequired,\r\n status: PropTypes.oneOf(Object.values(Status)).isRequired,\r\n statusLabelMsg: PropTypes.string.isRequired,\r\n cardMsg: PropTypes.string,\r\n onCardButtonClicked: PropTypes.func,\r\n cardButtonText: PropTypes.string,\r\n customPopoverProps: PropTypes.object,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n learnMoreLink: PropTypes.string,\r\n};\r\n\r\nStatusPopoverItem.defaultProps = {\r\n cardMsg: '',\r\n onCardButtonClicked: null,\r\n cardButtonText: '',\r\n customPopoverProps: {},\r\n learnMoreLink: undefined,\r\n};\r\n","import { useContext, useMemo } from 'react';\r\nimport { ServerContext } from '@bingads-webui-campaign-react/server-context';\r\n\r\nexport const useIsReadOnlyUser = (): boolean => {\r\n const serverContext = useContext(ServerContext) as any;\r\n return useMemo(() => (serverContext?.CurrentAccountInActive || serverContext?.Permissions?.IsReadOnlyUser), [serverContext]);\r\n};\r\n","import React, { useMemo } from 'react';\r\nimport {\r\n Menu,\r\n MenuButton,\r\n MenuItemRadio,\r\n MenuList,\r\n MenuPopover,\r\n MenuTrigger,\r\n MenuProps,\r\n tokens,\r\n} from '@fluentui/react-components';\r\nimport {\r\n ChevronDown16Regular,\r\n FluentIcon,\r\n} from '@fluentui/react-icons';\r\n\r\nimport { useIsReadOnlyUser } from './use-is-read-only-user';\r\n\r\ninterface IMenuItemConfig {\r\n icon?: FluentIcon;\r\n iconColor?: string;\r\n text: string;\r\n value: string;\r\n}\r\n\r\nexport interface IDropdownMenuButtonProps {\r\n checkedValue: string;\r\n onChange: MenuProps['onCheckedValueChange'];\r\n menuItemConfigs: IMenuItemConfig[];\r\n buttonAriaLabel: string;\r\n}\r\n\r\nexport const DropdownMenuButton: React.FunctionComponent = ({\r\n checkedValue,\r\n onChange,\r\n menuItemConfigs,\r\n buttonAriaLabel,\r\n}: IDropdownMenuButtonProps) => {\r\n const isReadOnly = useIsReadOnlyUser();\r\n\r\n const checkedValues = useMemo<\r\n Record\r\n >(() => ({\r\n key: [checkedValue],\r\n }), [checkedValue]);\r\n\r\n const menuItems = useMemo(() => menuItemConfigs.map(menuItemConfig => (\r\n : null\r\n }\r\n value={menuItemConfig.value}\r\n name=\"key\"\r\n key={menuItemConfig.value}\r\n className=\"ba-status-summary-card-menu-list-item\"\r\n >\r\n {menuItemConfig.text}\r\n \r\n )), [menuItemConfigs]);\r\n\r\n return (\r\n \r\n \r\n }\r\n className=\"ba-status-summary-card-menu-button\"\r\n aria-label={buttonAriaLabel}\r\n disabled={isReadOnly}\r\n />\r\n \r\n\r\n \r\n \r\n {menuItems}\r\n \r\n \r\n \r\n );\r\n};\r\n","import React, { useState, useCallback } from 'react';\r\nimport {\r\n MenuButton,\r\n Dialog,\r\n DialogTrigger,\r\n DialogSurface,\r\n DialogBody,\r\n DialogTitle,\r\n DialogContent,\r\n} from '@fluentui/react-components';\r\nimport { Edit16Filled } from '@fluentui/react-icons';\r\n\r\nimport { useIsReadOnlyUser } from './use-is-read-only-user';\r\n\r\nexport interface IDialogEditButtonProps {\r\n title: string;\r\n ChildComponent: React.FunctionComponent<{ closeDialog: () => void; }>;\r\n buttonAriaLabel: string;\r\n}\r\n\r\nexport const DialogEditButton: React.FunctionComponent = ({\r\n title,\r\n ChildComponent,\r\n buttonAriaLabel,\r\n}: IDialogEditButtonProps) => {\r\n const [isOpen, setIsOpen] = useState(false);\r\n\r\n const isReadOnly = useIsReadOnlyUser();\r\n\r\n const closeDialog = useCallback(() => setIsOpen(false), [setIsOpen]);\r\n\r\n const onOpenChange = useCallback((_e, data) => {\r\n setIsOpen(data.open);\r\n }, [setIsOpen]);\r\n\r\n return (\r\n \r\n \r\n }\r\n className=\"ba-status-summary-card-menu-button\"\r\n aria-label={buttonAriaLabel}\r\n disabled={isReadOnly}\r\n />\r\n \r\n \r\n \r\n {title}\r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n","import { makeStyles, shorthands, tokens } from '@fluentui/react-components';\r\n\r\nconst colors = {\r\n green: {\r\n backgroundColor: tokens.colorPaletteDarkGreenBackground2,\r\n color: tokens.colorPaletteDarkGreenForeground2,\r\n },\r\n gray: {\r\n backgroundColor: tokens.colorNeutralBackground1Hover,\r\n color: tokens.colorNeutralForeground2,\r\n },\r\n purple: {\r\n backgroundColor: tokens.colorPalettePurpleBackground2,\r\n color: tokens.colorPalettePurpleForeground2,\r\n },\r\n brown: {\r\n backgroundColor: tokens.colorPaletteBrownBackground2,\r\n color: tokens.colorPaletteBrownForeground2,\r\n },\r\n blue: {\r\n backgroundColor: tokens.colorPaletteBlueBackground2,\r\n color: tokens.colorPaletteBlueForeground2,\r\n },\r\n};\r\n\r\nexport type TColorKey = keyof typeof colors;\r\n\r\nexport const useStyles = makeStyles({\r\n cardContainer: {\r\n flexGrow: 1,\r\n height: '68px',\r\n },\r\n card: {\r\n height: '68px',\r\n ...shorthands.padding('12px'),\r\n },\r\n cardText: {\r\n ...shorthands.overflow('hidden'),\r\n maxWidth: '180px',\r\n display: 'block',\r\n },\r\n cardDescription: {\r\n ...shorthands.overflow('hidden'),\r\n maxWidth: '180px',\r\n display: 'block',\r\n },\r\n cardWarning: {\r\n display: 'inline',\r\n color: 'var(--Status-Warning-Foreground-1-Rest, #BC4B09)',\r\n textDecorationStyle: 'dashed',\r\n textDecorationLine: 'underline',\r\n },\r\n iconWarning: {\r\n color: 'var(--Status-Warning-Foreground-1-Rest, #BC4B09)',\r\n cursor: 'pointer',\r\n },\r\n});\r\n\r\nexport const useIconStyles = makeStyles({\r\n iconContainer: {\r\n height: '44px',\r\n width: '44px',\r\n boxSizing: 'border-box',\r\n backgroundColor: '#9AD29A',\r\n color: '#063B06',\r\n ...shorthands.borderRadius('4px'),\r\n ...shorthands.padding('12px'),\r\n },\r\n icon: {\r\n height: '20px',\r\n width: '20px',\r\n },\r\n});\r\n\r\nexport const useIconColorStyles = makeStyles({\r\n ...colors,\r\n});\r\n","import React, { memo } from 'react';\r\nimport classNames from 'classnames';\r\nimport {\r\n FluentIcon,\r\n} from '@fluentui/react-icons';\r\nimport { TColorKey, useIconStyles, useIconColorStyles } from '../styles/styles';\r\n\r\nexport interface IIconProps {\r\n IconComponent: FluentIcon;\r\n color: TColorKey;\r\n}\r\n\r\nexport const StatusSummaryCardIcon: React.FunctionComponent = memo(({\r\n IconComponent,\r\n color,\r\n}: IIconProps) => {\r\n const classes = useIconStyles();\r\n const colorClasses = useIconColorStyles();\r\n\r\n return (\r\n
\r\n
\r\n \r\n
\r\n
\r\n );\r\n});\r\n","import React, { memo, useMemo } from 'react';\r\nimport classNames from 'classnames';\r\nimport {\r\n Card,\r\n CardHeader,\r\n Text,\r\n Caption1,\r\n Tooltip,\r\n Button,\r\n} from '@fluentui/react-components';\r\nimport { Shimmer } from '@fluentui/react';\r\nimport {\r\n Warning16Regular,\r\n} from '@fluentui/react-icons';\r\n\r\nimport { DropdownMenuButton, IDropdownMenuButtonProps } from './components/dropdown-menu-button';\r\nimport { DialogEditButton, IDialogEditButtonProps } from './components/dialog-edit-button';\r\nimport { StatusSummaryCardIcon, IIconProps } from './components/icon';\r\nimport { useStyles } from './styles/styles';\r\n\r\nexport interface IStatusSummaryCardProps extends IIconProps {\r\n header: string;\r\n description: string;\r\n dropdownMenuProps?: IDropdownMenuButtonProps;\r\n dialogEditProps?: IDialogEditButtonProps;\r\n isLoading: boolean;\r\n className?: string;\r\n warningMessage?: string;\r\n}\r\n\r\nexport const StatusSummaryCard: React.FunctionComponent = memo(({\r\n header,\r\n description,\r\n IconComponent,\r\n color,\r\n dropdownMenuProps,\r\n dialogEditProps,\r\n isLoading,\r\n className,\r\n warningMessage,\r\n}: IStatusSummaryCardProps) => {\r\n const classes = useStyles();\r\n\r\n const action = useMemo(() => {\r\n if (dropdownMenuProps) {\r\n return ();\r\n }\r\n\r\n if (dialogEditProps) {\r\n return ();\r\n }\r\n\r\n return null;\r\n }, [dialogEditProps, dropdownMenuProps]);\r\n\r\n return (\r\n
\r\n \r\n {isLoading ?\r\n }\r\n header={}\r\n description={}\r\n /> :\r\n \r\n }\r\n header={\r\n \r\n \r\n {header}\r\n \r\n \r\n }\r\n description={\r\n \r\n \r\n {description}\r\n {warningMessage &&\r\n
\r\n }\r\n />\r\n {warningMessage}\r\n
\r\n }\r\n \r\n
\r\n }\r\n action={action}\r\n />}\r\n
\r\n
\r\n );\r\n});\r\n\r\nStatusSummaryCard.defaultProps = {\r\n dropdownMenuProps: undefined,\r\n dialogEditProps: undefined,\r\n className: '',\r\n warningMessage: undefined,\r\n};\r\n"],"names":["UnstyledTutorial","_ref2","classes","items","title","secondaryTitle","_ref2$description","description","className","expanded","mergedClassName","classnames","tutorial","_jsx","PanelGroup","accordion","role","defaultActiveKey","children","_jsxs","Panel","eventKey","Heading","Title","toggle","Body","Collapse","tutorialContainer","map","_ref3","idx","itemTitle","itemText","text","_Fragment","tutorialStep","tutorialStepContent","length","stepSeperator","Glyphicon","glyph","defaultProps","Tutorial","withDefaultStyles","_","_ref","color","palette","themePrimary","fontSize","textDecoration","display","backgroundColor","flex","alignItems","padding","justifyContent","SPATutorial","i18n","React","concat","getString","_TL_","query","href","search","window","location","campaignLink","createTag","tmpl","createCampaignContentText","template","createTmpl","link","create","dangerouslySetInnerHTML","__html","spaTutorial","_objectSpread","borderBottom","neutralLight","underlineLinkStyle","elementLocator","isGreyBackground","getHtmlCampaignSection","boostTag","boost","getHtmlBrandSection","brandTag","brands","getHtmlStoreSection","storesTag","actionTag","stores","action","SPAv2Tutorial","getHtmlEnterSellerIdsSection","addPublisherUIItem","MSStoreAdsTutorial","SparkleIcon","useContext","I18nContext","src","SparkleImg","alt","registerIcons","icons","SparkleImgSVGIcon","SparkleImgIcon","NoStoreView","onCancel","Stack","noStoreView","Link","addBrandLink","buttonContainer","DefaultButton","onClick","marginLeft","borderTop","paddingTop","marginTop","marginRight","deviceDefaultSetting","targeted","device","bidAdjustmentDropdown","bidAdjustmentInput","deviceDefaultSettings","parentLevelSettings","currentLevelSettings","useParentLevel","resetDeviceDefaultSettings","deviceTargets","arguments","undefined","setting","defaultLocationData","currentLocations","targetOption","peopleInLocation","peopleSearchingForLocation","bidMode","defaultBudget","Amount","Type","getDefaultAdDistribution","isMran","getDefaultCampaignValues","biddingScheme","TargetCostPerSale","locationTargets","Budget","BiddingScheme","dayTimeRanges","AdDistribution","DeviceMap","Tablets","Computers","Smartphones","defaultAdGroupName","getAdGroup","campaign","shoppingSearchBid","adgroup","CampaignName","Name","Medium","PricingModel","Status","adScheduleDateSettings","SearchBid","Id","Campaign","getAd","AdGroupName","PromotionalText","getProductPartition","BidAmount","ProductCondition","ProductValue","IsExcluded","IsLeaf","convertCampaignStateToCampaignJSONSchemaData","_ref$initTargets","initTargets","bundleLocationCriterions","_ref$shoppingSettings","shoppingSettings","_ref$isSPB","isSPB","campaignInSharedFormat","name","value","bidStrategy","option","adScheduleData","adSchedulesBulkUpsert","deviceSettings","convertDeviceStateToDeviceSchema","convertLocationStateToLocationSchemaCampaign","adSchedules","getAdSchedule","model","AdScheduleUseSearcherTimeZone","BudgetId","CampaignType","CampaignSubType","Languages","TimeZone","timeZoneMapper","getAccountTimeZone","CampaignCriterions","_toConsumableArray","basic","hasFilteredProducts","productScope","CampaignProductScope","productScopeId","IsPromotionsForBrands","AdGroups","ProductAds","ProductPartitions","modelToViewModelForCampaign","campaignModel","locationCriterionsModel","dayTimeCriterionsModel","deviceCriterionsModel","bundleCountries","data","campaignId","_parseLocationTargets","parseLocationTargets","locations","intentId","intentOption","locationTargetsOptionKeys","specific","everywhere","shouldSelectBundleOption","bundleOrDefaultMarket","initLocations","modelToViewModelForLocationTargets","modelToViewModelDayTimeTargets","modelToViewModelForDayTimeTargets","item","Criterion","DeviceName","CriterionBid","Multiplier","Math","abs","modelToViewModelDeviceTargets","CampaignSettings","ProviderId","SalesCountry","Priority","campaignResource","edmCampaign","types","resolve","ResourceIdentifier","createOrUpdateCampaign","bulkUpdate","bind","bulkCreate","campaignStoreQueries","getCampaignStoreQueriesWithLocalMock","getMmcStoreData","options","getActiveCampaignStores","readCampaignCriterions","cid","aid","type","Customers","$withKey","Accounts","Campaigns","$cast","get","filter","where","toPromise","readLocationCriterions","readDayTimeCriterions","readDeviceCriterions","campaignCreationStyles","margin","flexDirection","width","paddingLeft","paddingBottom","fontWeight","resolveStyles","theme","_len","styles","Array","_key","resolvedStyles","s","isFunction","some","isEmpty","Error","glyphIconStyleOverride","original","glyphIconStyle","getStyles","components","root","flexBasis","flexGrow","overflowY","footer","uiBlockerAdapter","height","mergeStyles","reactUIBlockerStyle","settingContainer","maxWidth","merge","apply","messageBarStyle","btnStyle","controlStyle","floatButtonStyle","getLocalBlockerStyle","scrollbarStyle","campaignSettingsStyles","budgetBidsStyles","containerBudgetStyle","keywordPlannerStyle","searchboxStyle","locationBidGridStyle","locationMapStyle","sharedBudgetGridWrapper","tableStyle","toggleButtonStyle","linkStyle","selectElementStyle","alertStyle","paginationStyle","statusStyle","creationCommonStyle","uiblockerStyle","datePickerStyle","targetLocationRecommendationStyle","helpbuttonStyle","floatingBanner","position","bottom","left","transform","background","zIndex","ERROR_ENTITY","apiErrorMapper","campaignApiError","isHtmlMessage","DangerousHtmlMessage","message","code","toString","ValidatedLegacySharedBudget","withCustomValidation","validationProps","updateValidation","restProps","_objectWithoutProperties","_excluded","activity","ActivityContext","onChange","useCallback","newData","newIsValid","signal","JSON","stringify","style","marginBottom","Text","HelpPopup","topic","LegacySharedBudget","level","budget","DevicesSettingOptionKeys","All","Custom","DevicesSettingOptionKeysMap","_defineProperty","ValidatedTargetDevices","bidStrategyType","_useState","useState","every","getInitTargetOption","_useState2","_slicedToArray","setTargetOption","onTargetOptionChanged","newTargetOption","isDeviceTargetValid","Label","RadioGroup","renderItem","key","checked","getItemId","DeviceTargetSetting","setData","patchErrMsg","showTargetedColumn","ProductFilterWithCustomValidation","shoppingSettingsRef","productData","campaignSettings","serverContext","ServerContext","shoppingSettingOptions","useMemo","campaignType","campaignSubType","isStoreValid","isSponsoredSettings","isSponsoredCampaign","hideBid","hideStoreSection","isSponsoredPilotEnabled","isSPBCampaign","isSPBOptInAvailable","shouldUseNewMmcApiForSpa","isMSStoreAdsGAWorkflow","deps","i18nNewDesign","withRealTimeUpdates","accountCountryCode","CurrentAccount","CountryCode","LegacyShoppingSettings","ValidatedProductFilter","BidSettingWithCustomValidation","budgetAmount","validateWithBudget","defaultBidValue","LegacyBidSetting","ValidatedBidSetting","entityIsCampaign","entityIs","campaignNameProp","andComp","propertyIs","campaignBudgetProp","campaignBiddingSchemeProp","campaignProductFilterSchemeProp","campaignDevicesSchemeProp","campaignLocationCriterions","anyComp","ServerValidatedLegacySharedBudget","withControlErrorHandling","withUnvalidatedControlErrors","ServerValidatedLegacyBidStrategy","ValidatedLegacyBidStrategy","ServerValidatedLocationTargetSetting","ValidatedLocationTargetSetting","ServerValidatedTargetDevicesSetting","ServerValidatedProductFilterSetting","ValidatedBidSettingWithErrorHandling","BasicSettings","isCreation","scope","showAllValidationErrors","searchBid","biddingStrategyType","_useCollapseState","useCollapseState","_useCollapseState2","allCampaignSettingsSections","campaignSettingsExpandedSections","setCampaignSettingsExpandedSections","flipCampaignSettingsExpandAllState","basicSettingsExpand","collapseExpander","setActiveKeys","campaignPanel","ValidatedFixedPanel","TextTitle","titleKey","topicKey","attentionBeaconProps","getExtraProps","getPanelErrorProps","ServerValidatedRemainingCharsValidatedTextField","placeholder","id","field","schema","formErrorProps","bidBudgetPanel","ValidatedPanel","details","getBudgetTitleDetails","icon","BudgetBidImg","actuationProps","expand","expandKey","noApplyBudgetFromSharedLibrary","shouldShowSponsoredCampaignCashback","isSponsoredCampaignShowManualCpcOption","isSponsoredCampaignCashbackOptedIn","popupIds","locationPanel","LocationImg","getLocationTargetTitleDetails","showSearchTypeOptions","skipValidation","allowBidAdjustment","productFilterPanel","ProductImg","devicePanel","DevicesImg","getGridTargetTitleDetails","classNames","horizontalAlign","tokens","allPanelItems","checkItems","skipItemsTypeCheck","activeKeys","ValidatedLegacyAdDistribution","setAdDistributionView","getOptions","campaignAdScheduleProp","campaignAdDistributionProp","ServerValidatedAdScheduleSetting","ValidatedLegacyAdSchedule","ServerValidatedAdDistributionSetting","MoreSettings","adScheduleView","setAdScheduleView","_useState3","_useState4","adDistributionView","allMoreSettingsSections","moreSettingsExpandedSections","setMoreSettingsExpandedSections","flipMoreSettingsExpandAllState","moreBasicSettingsExpand","adSchedulePanel","getAdScheduleDetails","current","ClockImg","showDateSettings","showBidAdjustmentColumn","entity","adDistributionDetails","getTranslatedOption","adDistributionPanel","ConnectedImg","horizontal","serverErrors","logScope","SponsoredCampaignCreationLegacy","siteMap","perfMarker","setIsLoading","setCampaign","useDefaultStyles","isValid","setIsValid","errorMessage","setErrorMessage","_useState5","_useState6","setShowAllValidationErrors","useRef","legacyI18n","buildLegacyI18n","ValidationStringMap","handleCreateOrUpdateSuccess","savePerfMarker","done","trace","save","getRoutePathById","hideErrorBanner","handleCreateOrUpdateError","response","erroredModel","errors","i18nErrors","error","err","onSave","CampaignCriterionsData","getProductScope","viewModel","toObject","getSearchBid","createChild","willInit","createOrUpdateCall","then","jsdata","destroy","adapter","parentId","destroyProductScope","catch","res","onGoBack","onValidate","newCampaignData","isFormValid","prev","verticalFill","FormErrorGroup","errorMapper","grow","ValidationGroup","StepFooter","onSkippingLinkClick","onPreviousClick","onNextClick","nextButtonText","skippingLinkTitle","previousButtonText","MessageBar","messageBarType","MessageBarType","onDismiss","isMultiline","getCollapsiblePanelStyles","border","themeDarker","overflow","getBrandPanelStyles","brandPanel","footerButtonStyles","BrandPanel","props","brandsList","selectedBrands","isOpen","onClose","page","setPage","pageSize","setPageSize","setQuery","_useState7","slice","_useState8","setItems","_useState9","_useState10","filteredItems","setFilteredItems","_useState11","_useState12","selectedItems","setSelectedItems","columns","helpId","defaultColumn","column","buildColumn","onRender","buildColumns","gridSelectionRef","Selection","onSelectionChanged","itemsInCurrentPage","getItems","selection","getSelection","v","reduce","acc","MmcBrandId","itemsInOtherPage","cancel","filterItems","_query","_page","_pageSize","filteredResult","BrandName","toLowerCase","includes","useEffect","forEach","index","setIndexSelected","find","i","onRenderFooterContent","PrimaryButton","panel","PanelType","custom","customWidth","isFooterAtBottom","headerText","HelpIcon","SearchBox","onSearch","newValue","min","total","CampaignShimmeredDetailsList","enableShimmer","selectionMode","SelectionMode","multiple","pager","pageNumber","availablePageSizes","onPageChange","onPageSizeChange","processTreeNode","parentNode","node","Value","content","allowedCheck","parentValue","push","Children","child","shouldNodeSelect","selectedMap","processSelectResult","allCategories","resultMap","selectedCategories","category","isParentSelect","Object","keys","CategorySelector","categoryData","openItems","setOpenItems","DropdownTreeSelect","checkedItems","onOpenChange","getCategoryPanelStyles","categoryPanel","CategoryPanel","mmcCategories","state","useWizardService","getWizardData","CategoryData","getBmcMtEndpoint","url","endPoint","useProductDataSource","_scope$values","values","uid","getBrands","Promise","reject","$","xhrFields","withCredentials","success","obj","ResponseObject","getMatchedProductCount","categories","productIds","queryArr","join","queryString","MatchedProductCount","getBrandCategories","getProductData","keyword","mockData","fill","Brand","b","Category","Conversion","floor","random","Impression","Clicks","setTimeout","getProductIdPanelStyles","productIdPanel","gap","brandSelectorCallout","categorySelectorCallout","minWidth","ProductIDPanel","selectedProductIds","setSelectedBrands","setTotal","_useState13","_useState14","_useState15","_useState16","isBrandCalloutVisible","setIsBrandCalloutVisible","_useState17","_useState18","setSelectedCategories","_useState19","_useState20","categoryOpenItems","setCategoryOpenItems","_useState21","_useState22","isCategoryCalloutVisible","setIsCategoryCalloutVisible","loadData","finalCategory","selectBrand","brand","isChecked","reloadData","renderBrandSelecter","Icon","iconName","Callout","ariaLabelledBy","ariaDescribedBy","gapSpace","target","isBeakVisible","directionalHint","DirectionalHint","bottomLeftEdge","setInitialFocus","Checkbox","label","e","ActionButton","iconProps","allowDisabledFocus","renderCategorySelector","getProductFilterStyles","productFilter","flexWrap","filterOptions","matchStatusEnum","_getWizardData","_useProductDataSource","setBrandsList","setMmcCategories","showAddBrandPanel","setShowAddBrandPanel","showNotification","setShowNotification","selectedOptions","setSelectedOptions","showBrandPanel","setShowBrandPanel","showCategoryPanel","setShowCategoryPanel","showProductIdPanel","setShowProductIdPanel","matchedProductCount","setMatchedProductCount","matchStatus","setMatchStatus","setBrands","_useState23","_useState24","setCategories","_useState25","_useState26","setProductIds","_useState27","_useState28","setError","matchedCount","count","onRenderField","render","fetchMatchedProductCount","_brands","_categories","_productIds","loadBrandListAndMMCCategories","categoryL1s","split","onAddBrandPanelClose","shouldReload","onSelectChange","onSaveBrands","onSaveCategories","onSaveProductIds","removeItemInType","getKey","productId","removeAllInType","categoryMap","conditionIndex","_categories$i$split","_categories$i$split2","errorMsg","SectionShimmer","addBrandPanel","AddBrandPanelV2","setRefreshDataTile","renderFilterResult","renderKey","renderName","renderTitle","maxCount","titleMap","SelectedItem","itemIndex","onDelete","IconButton","ariaLabel","filterContent","disabled","ReactTemplate","aTag","tabIndex","messageBarIconProps","bold","ChoiceGroup","defaultSelectedKey","required","getAdGroupStyles","collapsiblePanel","alignSelf","adgroupShell","urlOptionsContainer","CampaignLocation","CampaignRadius","CampaignNegativeLocation","CampaignLocationIntent","Adgroup","campaignPropertyList","adGroupPropertyList","AdgroupStep","withPermissions","withScope","onDataChange","useFormService","context","saveFailed","wizardService","_ref2$campaign","_getTargetingPanels","basicOptions","moreOptions","allTargetSettingsSections","targetSettingsExpandedSections","setTargetSettingsExpandedSections","_useCollapseState3","_useCollapseState4","allBasicExpand","_React$useState","_React$useState2","_React$useState3","_React$useState4","locationTargetProps","allowNegativeLocationTargeting","isRadiusExcludeEnabled","hideIntent","defaultSelectedSearchType","SEARCH_TYPE","Boundary","strings","adDistributionGetOptions","initialAdDistribution","ActuationGroup","isActive","AttentionBeaconGroup","AdGroup","adGroup","result","targets","adGroupProperties","campaignData","mergedData","StepHeader","UnmappedFormErrors","childrenGap","panelKey","locationTargetIcon","token","ValidatedBootstrapPanel","defaultExpanded","BootstrapPanel","startDateEndDateIcon","ValidatedLegacyDateSetting","StartDate","EndDate","Timezone","isCreate","adScheduleIcon","hideMinuteOptions","hideUseCampaignSetting","bulkUpsertCampaignSettingsEntityErrorMap","getBulkUploadErrorType","useTargetRepository","_useWizardService","send","_useWizardLog","useWizardLog","wizardState","flow","onStepLoadedLog","onStepSavedLog","load","status","LOG_STATUS","LOAD_START","$readLocationCriterions","$readDayTimeCriterions","$readDeviceCriterions","locationCriterions","dayTimeCriterions","deviceCriterions","modelToViewModelForDateSetting","adGroupModel","adGroupId","defaultBidForShoppingCampaign","viewModelToBulkModelForDateSetting","adGroupViewModel","convertMachineDateToAccountDate","Date","SAVE_START","SAVE_SUCCESS","msg","finalAdGroup","WIZARD_EVENTS","UPDATE_WIZARD_DATA","modelToViewModelForBulkErrors","removeReferencedEntityInvalidIdErrors","SAVE_FAIL","val","divider","budgetContainer","budgetBidShell","outline","BudgetBidStep","currentStates","toStrings","setSharedBudgetView","ProductGroupBidRange","CeilingValue","FloorValue","isAutoBiddingScheme","isAutoBidding","allBudgetBidSections","budgetBidExpandedSections","setBudgetBidExpandedSections","budgetBidStrategyTitleDetails","currencyCode","CurrencyCode","amount","formatCurrency","bidTitleDetails","formatBidValue","matchStepState","STEP_STATES","LOADING","SAVING","adGroupData","budgetBidStrategyIcon","AudienceBudgetBidStrategy","setBudgetView","hideBidStrategy","bidValueIcon","AudienceBidValue","ceilingValue","floorValue","stopPropagation","useBudgetBitRepository","LOAD_SUCCESS","getCampaignStyles","campaignShell","verticalAlign","estimationPart","LegacyServerValidatedProductFilterSetting","LegacyValidatedProductFilter","INT_MAX","pow","CampaignSettingsStep","campaignStepIsValid","wizardData","basicOptionsShown","setBasicOptionsShown","noStore","ProductCollectionAccounts","IsGlobalStore","IsCoOpStore","showRedirectToBMC","campaignNameTitleDetails","campaignDetail","getBidBudgetTitleDetails","onCampaignNameChange","ev","prefixTitle","RemainingCharsValidatedTextField","onBlur","useCampaignRepository","savedCampaignId","setSavedCampaignId","globalStore","errMsg","responseJSON","globalStoreId","LocalInventoryAdsEnabled","ShoppableAdsEnabled","campaignInfo","dayTimeRangs","useSummarySchemaData","timeDisplayType","setTimeDisplayType","preferencesService","_preferencesService","initialize","isTwelveHourDisplay","findByName","Data","targetParentEntity","loc","SelectionStatus","autoBidding","biddingStrategyTypes","maximizeConversions","maximizeClicks","maxConversionValue","targetRoas","costPerSale","startEndDate","campaignName","conversionGoals","store","storeName","StoreName","products","productFilters","ProductFilters","useSelectedItem","adGroupName","locationTargeting","advancedTargetingSeparator","startEndDates","startDate","endDate","adSchedule","useSearcherTimeZone","includeStartEnd","isRendered","adDistribution","bidValue","buildSchemaData","isAudienceShoppingCampaign","STEP_PATHS","SummaryStep","schemaData","onShoppingHeaderActionClick","NAVIGATE_TO","stepId","onTargetingHeaderActionClick","onBudgetBidHeaderActionClick","separatorStyles","shopping","header","actionButton","buildDefaultDataProperty","dynamicProps","hd1","hd2","targeting","budgetBid","buildSchema","GeneratedUI","customComponentTypes","summaryPageComponentTypes","useSummaryRepository","StepList","currentStepId","getCurrentStepId","currentFlow","getCurrentFlow","displayMode","useResponsiveSize","Constants","ResponsiveSizeBreakpoints","stepListConfig","getStepListConfig","getDefaultOnItemClickFn","step","toStep","steps","firstSubStep","isBehind","ResponsiveStepList","config","getOnItemClickFn","SaveAndPublishButton","isBlocking","FETCHING","onNextClicked","isPublishing","SAVE_AND_EXIT","buttonText","SaveAndExitButton","_useWizardService2","isAdGroupSaving","NextButton","_useWizardService3","SAVE_AND_NEXT","BackButton","_useWizardService4","onBackClicked","BACK","nextDisabled","backButtonText","cancelButtonText","isFirstStep","getIsFirstStep","isLastStep","getIsLastStep","currentStep","CancelButton","SponsoredCampaignCreationWizardInternal","wizardPerfMarker","initialStep","routeToNavigateToWhenDone","view","Activity","repository","initialWizardData","actions","onDone","onExited","Wizard","WizardPerfMarker","wizardName","wizardMarker","LayoutContainer","DefaultTemplate","Layout","component","StepContainer","footerProps","BusyBlocker","loadingText","CancelWizardDialog","SponsoredCampaignCreationWizard","withSiteMap","UnstyledSponsoredCampaignCreation","parentPerfMarker","setProductData","hasStore","setHasStore","isLoading","isInitialized","setIsInitialized","_useState12$","setBundleCountriesAndLocationCriterions","_serverContext$Dynami","DynamicPermissions","MranSimplificationV2","OdataGetProductScope","FeedLabel","FeedLabelBlockList","processProductData","isMSStoreProviderId","willFetchData","$campaignDataFetchPromise","$bundleCountriesPromise","getBundleCountriesAndBundleLocationCriterions","loadBundleCountries","$readCampaign","select","readCampaign","savedCampaign","bc","getProductDataCall","params","dataName","bypassCache","cacheResponse","getProductConditionOptions","getSalesCountryCollection","noBMCAccounts","salesCountry","countryCode","getCampaignCriterions","getCategoryFullData","getProductScopeData","mergeData","getProductScopeFromOData","_ref$campaignId","_ref$getCategoryFullD","queryify","urlQueryStringObject","Product","defaultCountryCode","isWindowsStoreAd","overrideLegacyStoreWithNewMmcApiStoreData","willRender","finally","contentProps","UiBlocker","blocking","UnstyledSponsoredCampaignCreationWithLogContext","_ref5","Scenario","SponsoredCampaignCreationPage","composeMethods","withCreationHeader","Component","SponsoredCampaignSettingsPage","FLOWS","AD_TYPES_TO_FLOWS","AdTypes","ShoppingAudience","AudienceAndSearch","PLACEHOLDER_ID","CREATE_SCENARIO","CREATE_CAMPAIGN","UPDATE_CAMPAIGN","UPDATE_ADGROUP","isSearchShoppingCampaign","allSettledPromiseWrapper","promises","wrappedPromises","p","reason","all","getCampaignType","isSearch","getNoValidStore","feedData","feeds","feedLabel","localInventory","isLocalInventoryEnabled","productCollections","isProductCollectionsEnabled","genderTargeting","genders","genderTypes","ageRangeTargeting","ageRanges","readAgeAndGenderTargetingCriterions","readTargetingCriterions","readAudienceCriterions","_ref4","AudienceAssociations","top","getTargetCriterion","_ref6","propKey","campaignViewModel","bidAdjustment","_ref6$overrideType","overrideType","getTargetCriterionForAdGroup","getTargetCriterionForCampaign","viewModelToBulkModelForTargeting","_ref8","parentEntity","devices","isArray","_ref9","isBidAdjustmentNegative","criterion","removedIndustryTargets","addedIndustryCriterion","removedIndustryCriterion","negativeRemovedIndustryTargets","negativeAddedIndustryCriterion","negativeRemovedIndustryCriterion","ageTargets","initialAgeTargets","initialAgeRanges","addedAges","initialTarget","removedAges","addedAgeCriterion","removedAgeCriterion","removedNegativeAges","negativeAgeRanges","negativeAge","addedTarget","removedNegativeAgeCriterion","initialGenderTypes","addedGenders","removedGenders","addedGenderCriterion","removedGenderCriterion","removedNegativeGenders","negativeGenderTypes","negativeGender","removedNegativeGenderCriterion","industryTargets","negativeIndustryTargets","initialIndustryTargets","initialNegativeIndustryTargets","addedIndustryTargets","negativeAddedIndustryTargets","industry","negativeIndustry","removedJobTargets","addedJobCriterion","removedJobCriterion","negativeRemovedJobTargets","negativeAddedJobCriterion","negativeRemovedJobCriterion","jobTargets","negativeJobTargets","initialJobTargets","initialNegativeJobTargets","addedJobTargets","negativeAddedJobTargets","removedCompanyNameTargets","addedCompanyNameCriterion","removedCompanyNameCriterion","negativeRemovedCompanyNameTargets","negativeAddedCompanyNameCriterion","negativeRemovedCompanyNameCriterion","companyNameTargets","negativeCompanyNameTargets","initialCompanyNameTargets","initialNegativeCompanyNameTargets","addedCompanyNameTargets","negativeAddedCompanyNameTargets","Target","_ref10","_ref10$overrideType","BidAdjustment","CriterionType","whitelistedSchemaPropertyKeysForModel","operatorOptions","equal","notequal","viewModelToModelForConversionGoals","CampaignConversionGoal","originalConversionGoals","viewModelToModelForCampaign","pick","bulkModelToViewModelForCampaign","originalCampaignModel","isString","parseInt","extend","bulkModelToViewModelForConversionGoals","originalCampaignViewModel","bulkModelToViewModelForLocationTargets","locationTargetsModel","isDirty","loadCampaign","getProdutFilters","providerId","feedId","permissions","isDynamicDataFeedBasedCampaign","customerSelections","dynamicDataFeedConditionOptions","selectedConditionOptions","ProductConditionOptions","selectedFeedId","selectedFeed","console","FeedType","dataSource","customerSelectedProductConditions","customerSelectedProductConditionsCopy","clone","defaultSelectedDataSource","customerSelectedProductCondition","selectedProductConditionItem","ds","Operand","findTargetNodeAndAncestorsNodes","clonedItem","PresetOperator","Operator","ValueOptions","valueOptions","findHelper","valueOption","valueB","toUpperCase","selectedValueArray","Attribute","selectedValueOption","selectedValueOptions","Selected","PresetValue","valueInput","isEnhancedPAFilterP1Enabled","valuesArr","output","multilineValueInputProcessor","IsEnhancedPAFilterP1Enabled","defaultSelectedDataSourceHelper","_productFilter$Preset","operator","selectedTexts","pluck","composeProductFilter","_ref2$dayTimeCriterio","targetCriterionsModel","_ref2$audienceCriteri","audienceCriterionsModel","modelToViewModelForConversionGoals","_ref12","modelToViewModelForTargetCriterionsBase","CRITERION_LEVEL","CAMPAIGN","deviceTypesOverride","initialDeviceTypes","omit","modelToViewModelForTargetCriterions","initialAudiences","audience","AudienceId","AudienceCriterion","AudienceName","AudienceType","BidMultiplier","BidType","audiences","modelToViewModelForCampaignLevelAudienceCriterions","FeedId","FeedTypeId","selectedProduct","getStoreNameById","CampaignSubTypes","AudienceDynamicFeedBased","readAdGroupAgeAndGenderCriterions","readAdGroupCriterions","globalLegacyI18n","readonlyPropertyKeysForModel","modelToViewModelForAdGroup","_ref$isAudienceShoppi","CampaignBidStrategyName","AdRotation","RotationType","UseOptimizedTargeting","modelToViewModelForAudienceCriterions","date","dateString","formatDate","timeZone","raw","parseDate","formatDateToAPIFormat","parseDateFromAPIFormat","dateFromMdyyyyFormat","substring","dateFromyyyyMdFormat","bulkModelToViewModelForAdGroup","originalAdGroupViewModel","AdGroupCriterions","bulkModelToViewModelForDayTimeTargets","criterions","bulkModelToViewModelForDateSetting","FrequencyCapSettings","deal","productPartition","bulkModelToViewModelForProductPartitions","loadAdGroup","readAdGroup","adGroupResource","createOrUpdateAdGroup","bulkUpsertAdGroupSettingsEntityErrorMap","viewModelToBulkModelForAdGroup","_ref$customTargetingB","customTargetingBulkModel","_ref$saveAdGroupCrite","saveAdGroupCriterions","_ref$updateProductPar","updateProductPartitionBids","_ref$isProductGroupAl","isProductGroupAllowedForAudienceCampaign","isUpdate","doesCampaignExist","isAudienceCampaign","isAudienceDynamicFeedBasedCampaign","isProductGroupSupported","AdGroupNegativeReferenceId","CapValue","has","TargetSetting","viewModelToModelForAdGroup","modelToSave","viewModelToBulkModelForLocationTargets","adSchedulesModel","viewModelToBulkModelForAdSchedules","targetingModel","viewModelToBulkModelForAudiences","AdGroupAudienceCriterions","saveAdGroup","_asyncToGenerator","_regeneratorRuntime","mark","_callee","_ref2$customTargeting","_ref2$saveAdGroupCrit","_ref2$updateProductPa","_ref2$isProductGroupA","scenario","activityLogger","adGroupBulkModel","filteredErrors","wrap","_context","next","sent","getErrorsPlaceholders","abrupt","t0","isBulkWrappedResponse","warn","stack","systemErrors","stop","_x","_x2","saveCampaign","_ref$viewModelToBulkM","_ref$updateCampaignSt","updateCampaignStatus","conversionGoalsAssociations","CampaignConversionGoalAssociations","viewModelToBulkModelForConversionGoals","locationModel","_ref11","locationRestricted","CampaignAudienceCriterions","_ref7","audienceRestricted","added","initialAudience","removed","typePrefix","criterionType","bulkOrSystemError","getPannelHeaderStyles","pannelHeader","CANCEL","stepTime","loadStart","loadEnd","saveStart","saveEnd","logContent","stepDuration","requestSpend","guid","traceLog","logPayload","_ref2$msg","nowTime","now","logs","_ref3$msg","event","GetProductData","shouldShowPlaceholderStoreIfExists","getCampaignCriterionsOnly","getDynamicDataFeedOptions","getProductTypeFullData","getFeedDataWithCache","withDFMCache","getFeedData","ScopeContext","Permissions","dynamic","isPAAIMConsolidationEnabled","isOdataGetProductScopeEnabled","scenarioContext","ScenarioContext","internalGetProductData","getAudienceProductDataWithCache","getProductDataWithCache","_state$context$wizard","savedAdGroup","savedProductData","savedFeedData","isSearchShopping","loadPromises","readAdGroupLocationCriterions","targetCriterions","bundleCountriesAndLocationCriterions","$top","pData","savePromises","createActivity","results","_result$reason$server","getPriorityOptions","getShoppingSettingOptions","settingScenarioName","ccJsData","onStoreSelectionChange","onSalesCountryChange","onFeedLabelChange","setProductLoading","isCPSSelected","updateProductConditionOptions","updateChildLevelProductCondition","onSelectFilterProducts","campaignTypeConfig","isAllFeedProducts","productFilterRef","useJsDataContext","campaignSettingsProp","SettingScenarios","PAAIMProductSetting","ValidatedProductFilterSetting","StoreSettingWithCustomValidation","storeSettingRef","storeSettings","setStoreSettings","PAAIMStoreSetting","ValidatedStoreSetting","BMCRedirect","isEnabledForDynamicFeedCampaign","toBMC","getRouterDep","navigateToRoute","toDynamicDataManagement","a","CampaignPriority","priority","setPriority","onCampaignPriorityChange","selectedKey","PannelHeader","OriginalTextTitle","as","needsAttention","setSiteExclusionView","setIPExclusionView","siteExclusionViewRef","ipExclusionViewRef","productConditionsRef","isConversionAssociationWarningP3Enabled","campaignBiddingSchemeType","createScenario","isEditMode","setIsCPSSelected","productLoading","onSelectionChange","log","triggerFeedLabelChange","removeProductGroup","country","triggerSalesCountryChange","isSelected","triggerIsFeedFilterChecked","updatedProductCondition","campaignUrlOptions","TrackingUrlTemplate","FinalUrlSuffix","UrlCustomParameters","conversionGoalsTitleDetails","getConversionGoalTitleDetails","storeTitleDetails","storeView","storesData","getStores","countries","getCountries","IsDomesticSimplifiedChineseEnabled","getStoreTitleDetails","productFilterTitleDetails","product","operateMap","conditionValueCount","startsWith","condition","operatorString","getProductTileDetails","exclusionTitleDetails","exclusions","ExcludedSites","getValues","ExcludedIPs","getExclusionsDetails","urlTitleDetails","getUrlOptionsDetails","resultBiddingScheme","campaignBiddingScheme","patchData","getMessageType","updatedData","customConfirmMessages","ShoppingImg","Loading","isVisible","BaseExclusion","adgroupId","showSiteExclusion","showIPExclusion","UrlOptionsImg","ValidatedUrlOptionsParameter","initialValue","conversionGoalsIcon","ValidatedConversionGoals","getDynamicFeedData","siteExclusionView","ipExclusionView","isCampaignCreate","instrumentation","InstrumentationContext","isShoppableAdsEnabled","AlertCenter","AlertHelper","logProductApi","spendTime","getCampaignFromViewModel","_state$context$wizard2","productParams","savedSalesCountry","savedFeedLabel","generateNameSuggestionSuffix","getBudgetRange","Daily","Default","goalSelection","goalScopeSelection","Scopes","ACCOUNT","finalUrlExpansionOptOut","DeviceKeys","getDefaultCampaign","productCall","req","nTime","productDataSource","savedProductConditions","isCostPerSaleEnabled","PersonalizedOffersEnabled","CashbackPercent","CashbackScope","storeSettingView","productFilterView","validate","isProductFilterValid","isSelectedStore","selectedCategory","AudienceFeedBased","storeSettingModel","SalesCountryValue","isFeedProductFilterEnabled","isFeedFilterChecked","saveCampaignPromise","saveExtensionsInSettingFlow","extensionData","AdvanceSettings","Exclusions","exclusionRepository","saveExtensions","clearApiErrors","NegativeSitesResult","NegativeIPsResult","siteErrors","ipErrors","showErrors","BudgetBidCampaignImportNotificationActivity","createScenarioAndActivity","scenarioName","activityName","initialCampaign","stepContexts","CAMPAIGN_SETTINGS","initialData","showBudgetBidCampaignNotifications","campaignItemList","oldBudget","newBudget","oldBidStrategy","newBidStrategy","EXIT","wizardUpdateData","stepProps","fullCampaign","fullCampaignData","newProductData","updatedProductData","showAlert","getTargetingPanels","advancedOptions","convertToGridTargetDetails","DeviceTargets","deviceName","parseFloat","convertFromGridTargetDetails","mappedData","ServerValidatedTargetDevice","TargetingPreferences","isAudienceCampaing","optimizedTargetingEnabled","setOptimizedTargetingEnabled","campaignDeviceTargets","campaignAudiences","campaignIndustry","campaignNegativeIndustry","campaignJobTargets","campaignNegativeJobTargets","campaignCompanyNameTargets","campaignNegativeCompanyNameTargets","adGroupAudiences","adGroupIndustry","adGroupNegativeIndustry","adGroupJobTargets","adGroupNegativeJobTargets","adGroupCompanyNameTargets","adGroupNegativeCompanyNameTargets","allAdGroupTargetingSections","adgroupTargetingExpandedSections","setAdGroupTargetingExpandedSections","getCampaignSubType","formatAudience","ValidatedAudiencePicker","supportExclusion","DeviceImg","formatCompany","ValidatedCompanyPicker","BrandAwarenessVideoAds","formatIndustry","ValidatedIndustryPicker","formatJobFunction","ValidatedJobFunctionPicker","PredictiveTargetingControlHeader","onToggleEnabledChanged","warning","getAdRotationStyles","AdRotationMessageBar","themeLighterAlt","ValidatedAdRotation","_ref3$AdRotation","adRotation","adRotationOptions","info","ServerValidatedLocationTargetSettingForAdGroup","AdGroupLocation","AdGroupRadius","AdGroupNegativeLocation","AdGroupLocationIntent","adGroupLevelTargetListForAudienceFlow","TargetStep","flowType","isAgeGenderDisclaimerEnabled","AgeGenderDisclaimer","campaignLocationTargets","campaignGenderTypes","campaignAgeRanges","adGroupLocationTargets","adGroupGenderTypes","adGroupAgeRanges","getTargetSettingsFromCriterions","formatGenders","genderTargetIcon","Gender","hideUnknown","formatAgeRanges","ageTargetIcon","AgeRange","PredictiveTargetingHeader","Alert","dismissible","AdGroupSettings","_getAdGroupSettingsPa","showBid","getAdGroupSettingsPanels","allAdGroupSettingsSections","adGroupSettingsExpandedSections","setAdGroupSettingsExpandedSections","allBasicExpanded","CpmBid","negativeGenderTYpes","readAdGroupTargetingCriterions","audienceCriterions","readAdGroupAudienceCriterions","facInfo","biddingSchemeType","sharedBudgetView","optionsShown","setOptionsShown","isFACCouponActive","budgetView","ko_model","updateFeatureAdoptionCoupon","showFACHint","couponValue","facCouponValue","currentBiddingSchemeType","filterOutBidPanel","BidStrategyId","BidStrategyName","useBudgetBidRepository","campaignResult","adGroupResult","_error$serverErrors","getStepConfig","_ref$permissions","viewProps","stepConfig","machineOptions","guards","needsConfirming","getNeedConfirming","adoptCoupon","StandardShoppingCampaignWizardInternal","adType","_props$createScenario","_props$currentCampaig","currentCampaign","_props$currentAdGroup","currentAdGroup","isCampaignCreation","isCampaignUpdate","getDestinationWhenDone","wizardType","getAdTypeFromCurrentCampaign","getFirstStep","facCouponInfoRef","_useShoppingFAC","useShoppingFAC","ShoppingFACCallout","adoptCouponFromActiveStatus","facCoupon","showFACCallout","initialFlowFactors","getFlow","attachStepActivities","setClarityTag","StandardShopping","PerformanceMarkerProvider","immediateDone","ShoppingFACScenario","FACShoppingInSearchCampaignNew","MmpFetchProvider","ConfirmWizardDialog","useConfirmDialogConfigWithLogger","StandardShoppingCampaignWizard","LegacyAdDistributionWithCustomValidation","routeStore","pathname","history","handleErrors","setErrors","bulkApiErrors","getBulkApiErrors","noMappedErrors","getODataErrors","campaignNameValidation","finalUrlValidation","isValidUrl","MaxCostValidation","Number","budgetValidation","targetCPAValidation","bidValueValidation","rangeKey","getAds","adIds","viewContext","extraExpand","adsRepository","ResponsiveAdRepository","getAdAsync","pricingModelToRangeKeyMap","EnhancedCpc","ManualCpc","ManualCpm","ads","FinalUrls","Headline","LongHeadline","BusinessName","Images","PinnedField","EditorialStatus","AssociationType","UiDisplayStatus","PerformanceLabel","RecommendationId","Asset","AssetType","TracingId","SubType","IdString","CropX","CropY","CropHeight","CropWidth","ImageUrl","PerformanceMetrics","Headlines","LongHeadlines","Descriptions","getCampaignSettingsStyles","campaignSettingsWrapper","switchToAdvance","campaignSettingContainer","campaignInformationContainer","remainingWarning","limit","getErrorMessage","validationAfterBlur","finalURLErrorMessage","CampaignInformation","setRecommendation","dispatch","useAudienceCampaignCreationWizardStore","setUrl","baseURL","AdRecommendRepository","WIZARD_ACTIONS","LOADING_RECOMMENDATION_STATE_UPDATE","payload","LoadingState","async","e2eTestEnvironment","getRecommendAds","Sucess","FETCH_RECOMMENDATION","recommendations","adsForPreview","RECOMMENDADS_SELECTED","recommmendationsSelected","savedRecommendations","Failed","fetchData","useRecommendationFetch","validations","finalURL","setName","setFinalURL","textFieldStyles","fieldGroup","TextField","CAMPAIGN_NAME_CHANGE","formattedURL","FINALURL_CHANGE","finalUrl","BidStrategy","getBudgetErrorMessage","getMaxCostErrorMessage","getTargetCPAErrorMessage","BudgetBid","maxCost","targetCpa","budgetState","setBudget","String","bidValueState","setBidValue","maxCostCheck","setMaxCostCheck","maxCostState","setMaxCost","targetCPAState","setTargetCPA","autoBiddingEnabled","IsAudienceCampaignAutoBiddingV2Enabled","accountCurrencyCode","itemType","Header","MaxConversions","Divider","bidStrategyMap","desc","BUDGET_CHANGE","onRenderLabel","Dropdown","BIDSTRATEGY_CHANGE","dropdown","TARGETCPA_CHANGE","MAXCOST_CHANGE","BIDVALUE_CHNAGE","buttons","button","Button","getButton","ErrorView","pricingModelAdgroupBidAttributeMapping","CampaignSettingsContainer","activities","campaignSettingActivity","adgroupBackboneView","currentAdgroup","loadingState","setupAdgroupView","instr","addScenario","logScenario","aimCampaignCreationWizard","currentLevelTargetInfo","resourceName","isForVNext","isAudienceCreationWorkflow","newI18n","footButtons","validationErrors","VALIDATION_CHANGE","CAMPAIGN_SAVING_STATE_UPDATE","campaignRes","adgroupRes","TargetCpa","MaxCpc","requestOptions","update","adgroupParmas","CAMPAIGN_UPDATE","ADGROUP_UPDATE","INIT_ADGOURPBACKBONE_VIEW","NAVIGATE_TO_ADS","errorMsgs","confirm","loader","Spinner","size","large","FontIcon","Step","initialState","customAdsSelected","Init","loadingRecommendation","saveAds","editingAd","loadingSuggestedBid","loadingAds","finishCreation","customAds","AudienceCreationWizardReducer","SUGGESTEDBIDMAP_UPDATE","bidSuggestionMap","NAVIGATE_TO_CAMPAIGNSETTINGS","NAVIGATE_TO_SUMMARY","summary","FETCH_ADS","LOADING_SUGGESTED_BID_STATE_UPDATE","LOADING_ADS_STATE_UPDATE","EDITING_AD_STATE_UPDATE","FINISH_CREATION","CUSTOMADS_SELECTED","SAVE_ADS_STATE_UPDATE","CHANGE_ADGROUP_TARGET_DOM","adgroupTargetDom","UPDATE_SAVEDADS","selects","savedAd","getEstimatePromise","post","host","path","request","customHeader","setupInstrumentation","simplifiedCampaignCreationWizard","campaignSetting","adCreationActivity","adCreation","summaryActivity","AudienceCampaignCreationWizardContext","AudienceCampaignCreationWizardProvider","realDefaultBudget","defaultBidStrategy","setupInitialState","estimateRequestFactory","subType","targetsCPCData","targetsCPMData","cpcEstimateData","cpmEstimateData","bidMap","SuggestedBid","formatDecimal","maximumFractionDigits","minimumFractionDigits","fetchSuggestionBidMapping","wizardContext","startToFinishMarker","Provider","getAdCreationStyles","adCell","borderRadius","adLabel","textAlign","adEditorPanel","overflowX","predictiveTarget","visibility","previews","textInline","right","whiteSpace","textOverflow","previewModal","addCustomAd","cursor","adsContainerWrapper","adsContainer","crudAudienceAdgroup","recommendCard","AdPreview","preview","onEdit","hideModal","carouselIndex","setCarouselIndex","longHeadline","shortHeadline","businessName","responsivePreviewTitle","multimediaAdinMSANRatios","typeKey","ratio","aspectRatios","stringKey","Carousel","controls","onSelect","selectedIndex","activeIndex","images","imageObj","Item","image","previewTexts","AdEditorPanel","dismissPanel","adModel","initializeOptions","adModelToView","ad","pageContext","onOuterClick","closeButtonAriaLabel","layerProps","BackboneViewWrapper","View","ResponsiveAdEditor","eventsToActions","imageUrl","logRecommendEditAds","AdPreviewCard","hideEdit","previewOpen","setTrue","showModal","setFalse","useBoolean","openPanel","uploadRecommendImage","c","FinalSrc","isOverlayEnabled","renderCellContent","defaultContent","renderOverlayContent","Modal","RecommendedAdsPanel","CustomAdsPanel","PredictiveTargetText","isExpand","setCollapse","Targeting","containerRef","adgroupDom","$el","appendTo","willShow","ref","container","AdCreationContainer","recommendationsNeedToSave","selected","selectedRecommendations","odata","uploadPromises","recommendation","getMultiImagesFromMTAssetsAsync","imagesByAds","croppedImages","imageList","idString","cropX","CropSettings","SourceX","cropY","SourceY","cropWidth","SourceWidth","cropHeight","SourceHeight","ResponsiveAd","adgroupUpdatePromise","validateAndSave","selectedTargets","audienceTargetSelector","selectionStates","selectState","savedAdModels","imageIndex","tmpSavedRecommendations","tmpSavedCustomAds","tmpCustomAdsSelected","removedAds","shift","splice","removeAdAsync","removeAds","getSummaryStyles","summaryContainerWrapper","SummaryContainer","adGroupLocations","locationSetting","getTargetedLocations","getAdGroupLocations","finishAudienceCampaign","stackStyles","bidStrategyValueMapping","campaignObjective","getLocalStorage","summaryItems","keyName","descriptionLine","summaryItem","completedBorder","blue","completedIcon","inProgressIcon","incompleteBorder","incompleteIcon","white","stepContentBorder","neutralQuaternaryAlt","stepFooterBorder","wizardContentContainer","wizardListContainer","borderRight","minHeight","listStyle","borderLeft","borderLeftColor","lineHeight","StepsContextProvider","StepProgressList","VerticalSeparatedLayout","App","startSimplifyAudienceCampaign","currentPath","getItemGlyphicon","StaticAudienceCampaignCreation","Active","Pending","Warning","parentShared","shorthands","useStyles","makeStyles","parentActive","parentPending","parentWarning","parentError","childActive","childPending","childWarning","childError","StatusIcon","_useMemo","IconElement","CheckmarkCircleRegular","parentClass","childClass","CircleRegular","WarningRegular","ErrorCircleRegular","statusItem","nameText","statusLabelMsg","statusLabelMsgWithPopover","popover","popoverTitle","popoverTitleText","popoverMsg","StatusPopoverItem","cardMsg","cardButtonText","onCardButtonClicked","customPopoverProps","learnMoreLink","useId","triggerRef","setFocus","focus","labelMsgPart","Popover","trapFocus","withArrow","openOnHover","PopoverTrigger","Body2","underline","onMouseOver","PopoverSurface","Body1","block","popoverButton","autoFocus","rel","learnMore","popoverTitleName","popoverTitleValue","replaceAll","useIsReadOnlyUser","CurrentAccountInActive","IsReadOnlyUser","DropdownMenuButton","checkedValue","menuItemConfigs","buttonAriaLabel","isReadOnly","checkedValues","menuItems","menuItemConfig","MenuItemRadio","iconColor","colorNeutralForeground3","Menu","onCheckedValueChange","MenuTrigger","disableButtonEnhancement","MenuButton","appearance","MenuPopover","MenuList","DialogEditButton","ChildComponent","setIsOpen","closeDialog","_e","open","Dialog","modalType","DialogTrigger","DialogSurface","DialogBody","DialogTitle","DialogContent","colors","green","colorPaletteDarkGreenBackground2","colorPaletteDarkGreenForeground2","gray","colorNeutralBackground1Hover","colorNeutralForeground2","purple","colorPalettePurpleBackground2","colorPalettePurpleForeground2","brown","colorPaletteBrownBackground2","colorPaletteBrownForeground2","colorPaletteBlueBackground2","colorPaletteBlueForeground2","cardContainer","card","cardText","cardDescription","cardWarning","textDecorationStyle","textDecorationLine","iconWarning","useIconStyles","iconContainer","boxSizing","useIconColorStyles","StatusSummaryCardIcon","memo","IconComponent","colorClasses","StatusSummaryCard","dropdownMenuProps","dialogEditProps","warningMessage","Card","CardHeader","Shimmer","shimmerWrapper","Tooltip","relationship","truncate","weight","Caption1"],"sourceRoot":""}